From 7d558229e85444324b06e3958151769489443f08 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Fri, 23 Jan 2026 12:12:12 +0530 Subject: [PATCH 001/225] Feat: Implement map-based project location with seismic/wind zone overlays * Integrate shapefiles and UI for Indian seismic and wind zones. * Implement logic to fetch nearest city data and temperature using coordinates. * Add validation to restrict navigation within India and handle missing district data. * Refactor location saving and validation methods. --- .gitignore | 9 + .../bridge_types/plate_girder/ui_fields.py | 22 + .../ui_fields_project_location.py | 86 ++ .../core/data/project_location/database.py | 398 ++++++ .../core/data/project_location/schema.sql | 1185 ++++++++++++++++ .../core/data/project_location/seismic.png | Bin 0 -> 664948 bytes .../shapefiles/seismic_zones.cpg | 1 + .../shapefiles/seismic_zones.dbf | Bin 0 -> 3042 bytes .../shapefiles/seismic_zones.prj | 1 + .../shapefiles/seismic_zones.qmd | 27 + .../shapefiles/seismic_zones.shp | Bin 0 -> 26004 bytes .../shapefiles/seismic_zones.shx | Bin 0 -> 228 bytes .../shapefiles/wind_zones.cpg | 1 + .../shapefiles/wind_zones.dbf | Bin 0 -> 2353 bytes .../shapefiles/wind_zones.prj | 1 + .../shapefiles/wind_zones.qmd | 27 + .../shapefiles/wind_zones.shp | Bin 0 -> 52220 bytes .../shapefiles/wind_zones.shx | Bin 0 -> 204 bytes .../core/data/project_location/wind.png | Bin 0 -> 682090 bytes .../core/data/project_location/zone_lookup.py | 204 +++ .../desktop/ui/dialogs/project_location.py | 1213 ++++++++++++++--- .../desktop/ui/docks/input_dock.py | 18 +- .../desktop/ui/widgets/native_map.py | 362 +++++ 23 files changed, 3315 insertions(+), 240 deletions(-) create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/ui_fields_project_location.py create mode 100644 src/osdagbridge/core/data/project_location/database.py create mode 100644 src/osdagbridge/core/data/project_location/schema.sql create mode 100644 src/osdagbridge/core/data/project_location/seismic.png create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.cpg create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.dbf create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.prj create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.qmd create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.shp create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.shx create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/wind_zones.cpg create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/wind_zones.dbf create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/wind_zones.prj create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/wind_zones.qmd create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/wind_zones.shp create mode 100644 src/osdagbridge/core/data/project_location/shapefiles/wind_zones.shx create mode 100644 src/osdagbridge/core/data/project_location/wind.png create mode 100644 src/osdagbridge/core/data/project_location/zone_lookup.py create mode 100644 src/osdagbridge/desktop/ui/widgets/native_map.py diff --git a/.gitignore b/.gitignore index a36298f53..bdbaf4cb5 100644 --- a/.gitignore +++ b/.gitignore @@ -206,3 +206,12 @@ cython_debug/ marimo/_static/ marimo/_lsp/ __marimo__/ + +# Map Tile Cache +src/osdag_map_cache/ +/osdag_map_cache/ + +# Database files +*.db +*.sqlite +*.sqlite3 \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index a6f0bb9c6..9dad090bf 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -7,6 +7,28 @@ def __init__(self): self.module = KEY_DISP_FINPLATE self.design_status = False self.design_button_status = False + # Session-level UI input state (in-memory only) + self._input_state: dict[str, object] = {} + self._output_state: dict[str, object] = {} + + def set_input_value(self, key: str, value: object) -> None: + """Store a single UI input value in memory.""" + self._input_state[key] = value + + def get_input_value(self, key: str, default: object = None) -> object: + """Retrieve a single UI input value from memory.""" + return self._input_state.get(key, default) + + def set_input_values(self, values: dict[str, object] | None) -> None: + """Bulk update input state.""" + if values: + self._input_state.update(values) + + def get_input_values_dict(self, include_empty: bool = True) -> dict[str, object]: + """Export all current input state.""" + if include_empty: + return dict(self._input_state) + return {k: v for k, v in self._input_state.items() if v not in (None, "", [])} def input_values(self): """Return list of input fields for the UI""" diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_project_location.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_project_location.py new file mode 100644 index 000000000..91747ab83 --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_project_location.py @@ -0,0 +1,86 @@ +"""Dynamic project location helpers backed by the weather database. + +This keeps all project-location related data (states, stations, IRC values) +centralized so both the basic inputs combobox and the Project Location +popup can consume the same source of truth. +""" + +from __future__ import annotations + +import os +from typing import Dict, List, Optional + +from osdagbridge.core.data.project_location.database import Database + +# Compute absolute path to weather.db sitting under core/data/project_location +DB_PATH = os.path.abspath( + os.path.join(os.path.dirname(__file__), "..", "..", "data", "project_location", "weather.db") +) + + +def _with_db(func): + """Open/close a Database handle around simple reads.""" + def wrapper(*args, **kwargs): + db = Database(DB_PATH) + db.connect() + try: + return func(db, *args, **kwargs) + finally: + db.close() + return wrapper + + +@_with_db +def get_state_list(db: Database, include_placeholder: bool = True) -> List[str]: + states = db.get_states_with_temperature() or [] + if include_placeholder: + return ["Select State", *states] + return states + + +@_with_db +def get_station_list(db: Database, state: str, include_placeholder: bool = True) -> List[str]: + # Only include stations that have temperature data + stations = db.get_stations_by_state_with_temperature(state) if state else [] + stations = stations or [] + if include_placeholder: + return ["Select District", *stations] if stations else ["Select District"] + return stations + + +@_with_db +def get_flat_location_options(db: Database, include_placeholder: bool = True) -> List[str]: + options: List[str] = [] + for state in db.get_states_with_temperature() or []: + for station in db.get_stations_by_state(state) or []: + options.append(f"{station}, {state}") + if include_placeholder: + return ["Select Location", *options] if options else ["Select Location"] + return options + + +@_with_db +def get_weather(db: Database, state: str, station: str) -> Dict[str, Optional[float]]: + data = db.get_weather_data_by_state_station(state, station) + if not data: + return { + "wind_speed": None, + "zone": None, + "z_value": None, + "max_temp": None, + "min_temp": None, + } + return { + "wind_speed": data.get("wind_speed"), + "zone": data.get("zone"), + "z_value": data.get("z_value"), + "max_temp": data.get("max_temp"), + "min_temp": data.get("min_temp"), + "latitude": data.get("latitude"), + "longitude": data.get("longitude"), + } + + +def get_default_location() -> Dict[str, str]: + """Default to placeholders so the user explicitly selects a location.""" + return {"state": "", "station": ""} diff --git a/src/osdagbridge/core/data/project_location/database.py b/src/osdagbridge/core/data/project_location/database.py new file mode 100644 index 000000000..7c158d9fc --- /dev/null +++ b/src/osdagbridge/core/data/project_location/database.py @@ -0,0 +1,398 @@ +import sqlite3 +import os +from typing import List, Dict, Tuple, Optional + + +class Database: + """ + Weather DB with (state, station) as the canonical key. + stations = parent; temperature/zone/windspeed = children. + """ + + def __init__(self, db_name: str = 'weather.db'): + self.db_name = db_name + self.connection: Optional[sqlite3.Connection] = None + self.cursor: Optional[sqlite3.Cursor] = None + + # -------------------- connection -------------------- + + def connect(self): + """Establish connection to the database.""" + self.connection = sqlite3.connect(self.db_name) + self.connection.execute("PRAGMA foreign_keys = ON") + self.cursor = self.connection.cursor() + + def close(self): + """Close the database connection.""" + if self.connection: + self.connection.close() + self.connection = None + self.cursor = None + + # -------------------- schema -------------------- + + def run_schema(self, schema_file: str = 'schema.sql'): + """ + Execute the SQL schema file to create (and optionally seed) the database. + Uses executescript to safely run multi-statement SQL. + """ + if not os.path.exists(schema_file): + raise FileNotFoundError(f"Schema file '{schema_file}' not found") + + self.connect() + + with open(schema_file, 'r', encoding='utf-8') as f: + schema_sql = f.read() + + self.connection.executescript(schema_sql) + + # If someone ran with an older schema (no stations), fix it up: + self._bootstrap_stations_if_missing() + + print(f"Database '{self.db_name}' created and populated successfully!") + + def _table_exists(self, name: str) -> bool: + self.cursor.execute( + "SELECT 1 FROM sqlite_master WHERE type='table' AND name=?", + (name,) + ) + return self.cursor.fetchone() is not None + + def _bootstrap_stations_if_missing(self): + """ + If the DB lacks a 'stations' table (legacy 3-table layout), + create it and backfill from existing child tables. + """ + if self._table_exists("stations"): + return + + # create parent table + self.cursor.execute(""" + CREATE TABLE stations ( + state TEXT NOT NULL, + station TEXT NOT NULL, + PRIMARY KEY (state, station) + ) + """) + + # backfill union of keys from children (if they exist) + unions = [] + for tbl in ("temperature_data", "zone_data", "windspeed_data"): + if self._table_exists(tbl): + unions.append(f"SELECT state, station FROM {tbl}") + + if unions: + union_sql = " UNION ".join(unions) + self.cursor.execute(f"INSERT OR IGNORE INTO stations(state, station) {union_sql}") + + # helpful indexes + self.cursor.execute("CREATE INDEX IF NOT EXISTS idx_stations_state ON stations(state)") + self.cursor.execute("CREATE INDEX IF NOT EXISTS idx_stations_station ON stations(station)") + + self.connection.commit() + + # -------------------- dropdowns (use parent) -------------------- + + def get_states_with_temperature(self) -> List[str]: + """List all unique states from the canonical stations table where atleast one station has temperature data.""" + self.cursor.execute(""" + SELECT DISTINCT s.state + FROM stations s + INNER JOIN temperature_data t ON s.state = t.state AND s.station = t.station + WHERE t.max_temp IS NOT NULL AND t.min_temp IS NOT NULL + ORDER BY s.state + """) + return [row[0] for row in self.cursor.fetchall()] + + def get_stations_by_state(self, state: str) -> List[str]: + """List all stations for a given state from the canonical stations table.""" + self.cursor.execute( + "SELECT station FROM stations WHERE state = ? ORDER BY station", + (state,), + ) + return [row[0] for row in self.cursor.fetchall()] + + def get_stations_by_state_with_temperature(self, state: str) -> List[str]: + """List stations for a given state that have valid temperature data (non-NULL).""" + self.cursor.execute( + """ + SELECT s.station + FROM stations s + INNER JOIN temperature_data t ON s.state = t.state AND s.station = t.station + WHERE s.state = ? + AND t.max_temp IS NOT NULL + AND t.min_temp IS NOT NULL + ORDER BY s.station + """, + (state,), + ) + return [row[0] for row in self.cursor.fetchall()] + + # -------------------- details (LEFT JOIN children) -------------------- + + def get_weather_data_by_state_station(self, state: str, station: str) -> Optional[Dict]: + """ + Get complete weather data for a specific state and station. + Includes temperature, zone, and windspeed (NULL if not available). + """ + self.cursor.execute( + """ + SELECT s.state, s.station, + t.max_temp, t.min_temp, + z.zone, z.z_value, + w.wind_speed, + s.latitude, s.longitude + FROM stations s + LEFT JOIN temperature_data t ON s.state = t.state AND s.station = t.station + LEFT JOIN zone_data z ON s.state = z.state AND s.station = z.station + LEFT JOIN windspeed_data w ON s.state = w.state AND s.station = w.station + WHERE s.state = ? AND s.station = ? + """, + (state, station), + ) + data = self.cursor.fetchone() + + if not data: + return None + + return { + 'state': data[0], + 'station': data[1], + 'max_temp': data[2], + 'min_temp': data[3], + 'zone': data[4], + 'z_value': data[5], + 'wind_speed': data[6], + 'latitude': data[7], + 'longitude': data[8], + } + + def get_temperature_by_state_station(self, state: str, station: str) -> Optional[Tuple[float, float]]: + """Get temperature data (max, min) for a specific station.""" + self.cursor.execute( + """ + SELECT t.max_temp, t.min_temp + FROM temperature_data t + WHERE t.state = ? AND t.station = ? + """, + (state, station), + ) + result = self.cursor.fetchone() + return result if result else None + + def get_zone_by_station(self, state: str, station: str) -> Optional[Tuple[str, float]]: + """Get zone info for a specific station.""" + self.cursor.execute( + """ + SELECT z.zone, z.z_value + FROM zone_data z + WHERE z.state = ? AND z.station = ? + """, + (state, station), + ) + result = self.cursor.fetchone() + return result if result else None + + def get_windspeed_by_station(self, state: str, station: str) -> Optional[int]: + """Get wind speed for a specific station.""" + self.cursor.execute( + """ + SELECT w.wind_speed + FROM windspeed_data w + WHERE w.state = ? AND w.station = ? + """, + (state, station), + ) + result = self.cursor.fetchone() + return result[0] if result else None + + def get_nearest_station_temperature(self, lat: float, lon: float) -> Optional[Dict]: + """ + Find the nearest station with temperature data based on coordinates. + + Uses simplified Euclidean distance (sufficient for nearby points within India). + Returns station info and temperature data for the nearest match. + + Returns: + Dict with keys: state, station, max_temp, min_temp, distance_deg + or None if no station with coordinates and temperature data exists. + """ + # Query stations with coordinates and temperature data, calculate distance + # Using Euclidean approximation: sqrt((lat2-lat1)^2 + (lon2-lon1)^2) + self.cursor.execute( + """ + SELECT s.state, s.station, s.latitude, s.longitude, + t.max_temp, t.min_temp, + ((s.latitude - ?) * (s.latitude - ?) + (s.longitude - ?) * (s.longitude - ?)) as dist_sq + FROM stations s + INNER JOIN temperature_data t ON s.state = t.state AND s.station = t.station + WHERE s.latitude IS NOT NULL + AND s.longitude IS NOT NULL + AND t.max_temp IS NOT NULL + AND t.min_temp IS NOT NULL + ORDER BY dist_sq ASC + LIMIT 1 + """, + (lat, lat, lon, lon), + ) + result = self.cursor.fetchone() + + if not result: + return None + + import math + distance_deg = math.sqrt(result[6]) if result[6] else 0 + + return { + 'state': result[0], + 'station': result[1], + 'latitude': result[2], + 'longitude': result[3], + 'max_temp': result[4], + 'min_temp': result[5], + 'distance_deg': round(distance_deg, 4), + } + + def search_stations(self, search_term: str) -> List[Dict]: + """ + Fuzzy search over canonical stations; great for autocomplete. + """ + like = f'%{search_term}%' + self.cursor.execute( + """ + SELECT state, station FROM stations + WHERE station LIKE ? OR state LIKE ? + ORDER BY state, station + """, + (like, like), + ) + return [{'state': row[0], 'station': row[1]} for row in self.cursor.fetchall()] + + def get_stations_with_zone_data(self) -> List[Dict]: + """All stations that have zone data.""" + self.cursor.execute( + """ + SELECT z.state, z.station, z.zone, z.z_value + FROM zone_data z + ORDER BY z.state, z.station + """ + ) + return [{'state': r[0], 'station': r[1], 'zone': r[2], 'z_value': r[3]} for r in self.cursor.fetchall()] + + def get_stations_with_windspeed_data(self) -> List[Dict]: + """All stations that have windspeed data.""" + self.cursor.execute( + """ + SELECT w.state, w.station, w.wind_speed + FROM windspeed_data w + ORDER BY w.state, w.station + """ + ) + return [{'state': r[0], 'station': r[1], 'wind_speed': r[2]} for r in self.cursor.fetchall()] + + # -------------------- stats (count from parent) -------------------- + + def get_statistics(self) -> Dict: + """ + Database statistics including record counts and data ranges. + """ + stats: Dict[str, Optional[float]] = {} + + # Unique station count (ground truth) + self.cursor.execute("SELECT COUNT(*) FROM stations") + stats['total_stations'] = self.cursor.fetchone()[0] + + # Child row counts + self.cursor.execute("SELECT COUNT(*) FROM temperature_data") + stats['records_with_temperature'] = self.cursor.fetchone()[0] + + self.cursor.execute("SELECT COUNT(*) FROM zone_data") + stats['records_with_zone'] = self.cursor.fetchone()[0] + + self.cursor.execute("SELECT COUNT(*) FROM windspeed_data") + stats['records_with_windspeed'] = self.cursor.fetchone()[0] + + # Stations that lack BOTH zone and wind entries + self.cursor.execute(""" + SELECT COUNT(*) FROM stations s + LEFT JOIN zone_data z ON s.state = z.state AND s.station = z.station + LEFT JOIN windspeed_data w ON s.state = w.state AND s.station = w.station + WHERE z.state IS NULL AND w.state IS NULL + """) + stats['stations_without_zone_and_wind'] = self.cursor.fetchone()[0] + + # Temperature statistics (only where both present) + self.cursor.execute(""" + SELECT MAX(max_temp), MIN(min_temp), AVG(max_temp), AVG(min_temp) + FROM temperature_data + WHERE max_temp IS NOT NULL AND min_temp IS NOT NULL + """) + t = self.cursor.fetchone() + stats['highest_max_temp'] = t[0] + stats['lowest_min_temp'] = t[1] + stats['avg_max_temp'] = round(t[2], 2) if t[2] is not None else None + stats['avg_min_temp'] = round(t[3], 2) if t[3] is not None else None + + # Wind stats + self.cursor.execute("SELECT MAX(wind_speed), MIN(wind_speed), AVG(wind_speed) FROM windspeed_data") + w = self.cursor.fetchone() + stats['max_wind_speed'] = w[0] + stats['min_wind_speed'] = w[1] + stats['avg_wind_speed'] = round(w[2], 2) if w[2] is not None else None + + return stats + + +# -------------------- quick manual test -------------------- + +if __name__ == '__main__': + db = Database('weather.db') + + print("Creating and populating database...") + db.run_schema('schema.sql') + + print("\n" + "="*50) + print("TESTING DATABASE QUERIES") + print("="*50) + + print("\n1. Getting all states...") + states = db.get_states_with_temperature() + print(f"Total states: {len(states)}") + print(f"First 5 states: {states[:5]}") + + print("\n2. Getting stations for 'Andhra Pradesh'...") + stations = db.get_stations_by_state('Andhra Pradesh') + print(f"Total stations: {len(stations)}") + print(f"First 5 stations: {stations[:5]}") + + print("\n3. Getting complete weather data for 'Andhra Pradesh' - 'Anantapur'...") + data = db.get_weather_data_by_state_station('Andhra Pradesh', 'Anantapur') + if data: + print(f"State: {data['state']}") + print(f"Station: {data['station']}") + print(f"Max Temperature: {data['max_temp']}°C") + print(f"Min Temperature: {data['min_temp']}°C") + print(f"Zone: {data['zone'] if data['zone'] else 'NULL'}") + print(f"Z Value: {data['z_value'] if data['z_value'] else 'NULL'}") + print(f"Wind Speed: {data['wind_speed'] if data['wind_speed'] else 'NULL'} m/s") + + print("\n4. Searching for stations with 'Mumbai'...") + results = db.search_stations('Mumbai') + for result in results[:10]: + print(f" - {result['state']}: {result['station']}") + + print("\n5. Database Statistics:") + stats = db.get_statistics() + for key, value in stats.items(): + print(f" {key}: {value}") + + print("\n6. Stations with Zone Data (first 5):") + zone_stations = db.get_stations_with_zone_data() + for station in zone_stations[:5]: + print(f" - {station['state']}: {station['station']} (Zone {station['zone']})") + + db.close() + + print("\n" + "="*50) + print("Database testing completed successfully!") + print("="*50) diff --git a/src/osdagbridge/core/data/project_location/schema.sql b/src/osdagbridge/core/data/project_location/schema.sql new file mode 100644 index 000000000..89b43ff38 --- /dev/null +++ b/src/osdagbridge/core/data/project_location/schema.sql @@ -0,0 +1,1185 @@ +-- Weather Database Schema (4 Tables: Parent + 3 Children) +-- Drop tables if they exist (drop children first, then parent) +DROP TABLE IF EXISTS windspeed_data; +DROP TABLE IF EXISTS zone_data; +DROP TABLE IF EXISTS temperature_data; +DROP TABLE IF EXISTS stations; + +-- Table 1: Stations iwth lat/long (Parent/Canonical Table) +-- This is the source of truth for all state-station combinations +CREATE TABLE stations ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + state VARCHAR(100) NOT NULL, + station VARCHAR(100) NOT NULL, + latitude DECIMAL(9, 6), + longitude DECIMAL(9, 6), + UNIQUE (state, station) +); + +-- Table 2: Temperature Data (Child Table) +CREATE TABLE temperature_data ( + state VARCHAR(100) NOT NULL, + station VARCHAR(100) NOT NULL, + max_temp DECIMAL(5, 2), + min_temp DECIMAL(5, 2), + PRIMARY KEY (state, station) +); + +-- Table 3: Zone Data (Child Table) +CREATE TABLE zone_data ( + state VARCHAR(100) NOT NULL, + station VARCHAR(100) NOT NULL, + zone VARCHAR(10) NOT NULL, + z_value DECIMAL(4, 2) NOT NULL, + PRIMARY KEY (state, station) +); + +-- Table 4: Windspeed Data (Child Table) +CREATE TABLE windspeed_data ( + state VARCHAR(100) NOT NULL, + station VARCHAR(100) NOT NULL, + wind_speed INTEGER NOT NULL, + PRIMARY KEY (state, station) +); + +-- Create indexes for better query performance +CREATE INDEX idx_stations_state ON stations(state); +CREATE INDEX idx_stations_station ON stations(station); +CREATE INDEX idx_station_id ON stations(id); +CREATE INDEX idx_stations_coords ON stations(latitude, longitude); + +-- Insert Stations (Parent Table - all unique state-station combinations) +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andaman and Nicobar Island', 'Car-Nicobar', 9.1527, 92.8197); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andaman and Nicobar Island', 'Hut Bay', 10.6, 92.55); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andaman and Nicobar Island', 'Kondul', 7.2333, 93.7667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andaman and Nicobar Island', 'Long Island', 12.4, 92.9667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andaman and Nicobar Island', 'Mayabandar', 12.9167, 92.9); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andaman and Nicobar Island', 'Nancowry', 7.9833, 93.5333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andaman and Nicobar Island', 'Port Blair', 11.6234, 92.7265); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Anantapur', 14.6819, 77.6006); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Arogyavaram', 13.6154, 79.4236); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Bapatla', 15.9047, 80.4672); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Cuddapah', 14.4673, 78.8242); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Dolphine Nose/CDR Visakhapatnam', 17.7041, 83.3007); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Gannavaram (A)', 16.5304, 80.7978); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Kakinada', 16.9891, 82.2475); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Kalingapatanam', 18.33, 84.13); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Kavali', 14.9167, 79.9833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Kurnool', 15.8281, 78.0373); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Masulipatnam', 16.1859, 81.1514); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Nagarjunasagar', 16.5728, 79.3144); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Nandigama', 16.7719, 80.2858); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Nandyal', 15.4786, 78.4836); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Narsapur', 16.4342, 81.6967); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Nellore', 14.4426, 79.9865); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Nidadavolu', 16.9063, 81.6718); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Ongole', 15.5057, 80.0499); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Rentachintala', 16.55, 79.55); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Tirmalai', 13.6833, 79.35); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Tirupathy', 13.6288, 79.4192); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Tuni', 17.3578, 82.5464); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Vijayawada', 16.5062, 80.648); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Vishakhapatnam', 17.6868, 83.2185); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Andhra Pradesh', 'Vishakhapatnam (RS/RW)', 17.6868, 83.2185); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Arunachal Pradesh', 'Pasighat', 28.0667, 95.3333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Assam', 'Dhubri (Rupsi) (A)', 26.02, 89.98); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Assam', 'Dibrugarh (Mohanbari) (A)', 27.4839, 95.0169); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Assam', 'Guwahati (Bhorjar) (A)', 26.1061, 91.5859); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Assam', 'Jorhat', 26.7509, 94.2037); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Assam', 'North Lakhimpur', 27.2361, 94.1069); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Assam', 'Rangia', 26.45, 91.6167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Assam', 'Sadiya', 27.8333, 95.6667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Assam', 'Silchar', 24.8333, 92.7789); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Assam', 'Tezpur', 26.6338, 92.8); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Bailaldila', 18.67, 81.25); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Barauni', 25.4647, 86.0111); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Bhagalpur', 25.2425, 86.9842); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Chaibasa', 22.55, 85.8); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Chapra', 25.7839, 84.7411); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Chattisgarh Ambikapur', 23.1186, 83.194); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Daltonganj', 24.0326, 84.0711); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Darbhanga', 26.1542, 85.8918); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Dehri', 24.91, 84.18); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Dumka', 24.2677, 87.2508); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Gaya', 24.7914, 85.0002); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Hazaribagh', 23.9925, 85.3637); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Jagdalpur', 19.0833, 82.0333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Jamshedpur', 22.8046, 86.2029); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Jamshedpur (A)', 22.8046, 86.2029); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Motihari', 26.65, 84.9167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Mungher', 25.3708, 86.4633); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Muzaffarpur', 26.1225, 85.3906); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Patna (A)', 25.5941, 85.0919); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Pbo Raipur', 21.2514, 81.6296); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Purnea', 25.7771, 87.4753); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Raipur', 21.2514, 81.6296); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Raipur (Mana)', 21.2514, 81.6296); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Ranchi(A)', 23.3441, 85.3096); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Bihar', 'Sabaur', 25.2333, 87.05); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Chhattisgarh', 'Bhilai', 21.2167, 81.4333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Daman & Diu', 'Diu', 20.7144, 70.9874); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Goa', 'Dabolim (N.A.S.)', 15.3808, 73.8314); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Goa', 'Marmugao', 15.4089, 73.8006); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Goa', 'Panjim', 15.4909, 73.8278); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Ahmedabad', 23.0225, 72.5714); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Amreli', 21.603, 71.2163); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Balsar (Valsad)', 20.61, 72.926); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Baroda', 22.3072, 73.1812); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Baroda (A)', 22.3072, 73.1812); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Bhavnagar (A)', 21.7645, 72.1519); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Bhuj (Rudramata) (A)', 23.2419, 69.6669); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Deesa', 24.2575, 72.1908); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Dohad', 22.8333, 74.25); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Dwarka', 22.2442, 68.9685); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Idar', 23.83, 73.0); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Kakrapara', 21.2333, 73.35); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Keshod (A)', 21.3167, 70.25); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Naliya', 23.25, 68.85); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'New Kandla', 23.0333, 70.2167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Okha', 22.4672, 69.07); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Porbandar (A)', 21.6417, 69.6293); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Rajkot (A)', 22.3039, 70.8022); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Surat', 21.1702, 72.8311); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Vadodara', 22.3072, 73.1812); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Vallabh Vidyanagar', 22.5333, 72.9167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Gujarat', 'Veraval', 20.9158, 70.3629); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Haryana', 'Ambala', 30.3782, 76.7767); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Haryana', 'Bhiwani', 28.7872, 76.1322); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Haryana', 'Gurgaon', 28.4595, 77.0266); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Haryana', 'Hissar', 29.1492, 75.7217); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Haryana', 'Karnal', 29.6857, 76.9905); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Haryana', 'Narnaul', 28.05, 76.1167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Haryana', 'Rohtak', 28.8955, 76.6066); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Himachal Pradesh', 'Bhuntar (A)', 31.8776, 77.1544); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Himachal Pradesh', 'Dharamshala', 32.219, 76.3234); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Himachal Pradesh', 'Kalpa (GL)', 31.5333, 78.25); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Himachal Pradesh', 'Manali', 32.2396, 77.1887); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Himachal Pradesh', 'Mandi', 31.7167, 76.9167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Himachal Pradesh', 'Nahan', 30.56, 77.295); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Himachal Pradesh', 'Nauni / Solan', 30.85, 77.1667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Himachal Pradesh', 'Shimla', 31.1048, 77.1734); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Himachal Pradesh', 'Sundernagar', 31.5333, 76.9); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Himachal Pradesh', 'Una', 31.4685, 76.2708); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Badarwah', 32.97, 75.73); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Banihal', 33.4333, 75.1833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Batote', 33.1167, 75.3167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Gulmarg', 34.05, 74.38); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Jammu', 32.7266, 74.857); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Kathua', 32.3861, 75.5194); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Katra', 32.9917, 74.9319); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Kukernag', 33.5667, 75.3); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Kupwara', 34.5167, 74.25); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Pehalgam', 34.0167, 75.3167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Quazigund', 33.6333, 75.1667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jammu and Kashmir', 'Srinagar', 34.0837, 74.7973); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Jharkhand', 'Bokaro', 23.6693, 86.1511); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Bagalkote', 16.1716, 75.6602); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Balehonnur', 13.3167, 75.4167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Bangalore (A)', 12.9499, 77.6853); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Bangaluru [Bangalore]', 12.9716, 77.5946); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Belgaum', 15.8497, 74.4977); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Belgaum (Sambre) (A)', 15.8497, 74.4977); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Bellary', 15.1394, 76.9214); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Bengaluru', 12.9716, 77.5946); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Bidar', 17.9133, 77.53); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Bijapur', 16.8302, 75.71); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Chickmagalur', 13.3161, 75.772); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Chitradurga', 14.2226, 76.3987); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Dharwad', 15.4589, 75.0078); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Gadag', 15.4296, 75.6294); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Gulbarga', 17.3297, 76.8343); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Hassan', 13.0, 76.1); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Honavar', 14.2833, 74.45); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Karwar', 14.8137, 74.1294); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Kolar Gold Field', 12.9537, 78.2693); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Mandya', 12.5218, 76.8951); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Mangalore (Bajpe) (A)', 12.9141, 74.883); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Mangalore (Panambur)', 12.9262, 74.839); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Mercara', 12.421, 75.7382); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Mysuru', 12.2958, 76.6394); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Raichur', 16.212, 77.3439); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Shimoga', 13.9299, 75.5681); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Shirali', 14.0167, 74.5333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Karnataka', 'Tumkur', 13.3379, 77.1173); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Alleppy (Alappuzha)', 9.4981, 76.3388); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Calicut (Kozhikode)', 11.2588, 75.7804); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Calikote/Kozhicode', 11.2588, 75.7804); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Cannanore (Kannur)', 11.8745, 75.3704); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Cochin (N.A.S.)/ Kochi', 9.9312, 76.2673); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Karipur (Airport)', 11.1367, 75.9509); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Kochi', 9.9312, 76.2673); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Kottayam', 9.5916, 76.5222); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Palakkad (Palghat)', 10.7867, 76.6548); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Punalur', 9.0167, 76.9167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Thiruvananthapuram', 8.5241, 76.9366); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Kerala', 'Thiruvananthapuram (Trivandrum)', 8.5241, 76.9366); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Lakshadweep Island', 'Amini Divi', 10.1167, 72.7333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Lakshadweep Island', 'Islands Agatti(A)', 10.8236, 72.1761); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Lakshadweep Island', 'Minicoy', 8.2833, 73.05); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Alirajpur (Jhabua)', 22.3, 74.35); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Bagratawa', 23.8333, 77.6333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Betul', 21.911, 77.9); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Bhopal (Bairagarh)', 23.2599, 77.4126); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Chhindwara', 22.0574, 78.9382); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Damoh', 23.8333, 79.45); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Datia', 25.6667, 78.45); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Dhar', 22.5969, 75.3042); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Ginabahar', 22.4, 78.1333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Guna', 24.65, 77.3167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Gwalior', 26.2183, 78.1828); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Hoshangabad', 22.75, 77.7167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Indore', 22.7196, 75.8577); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Jabalpur', 23.1815, 79.9864); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Jashpurnagar', 22.882, 84.1293); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Kannod', 23.5, 76.75); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Khajuraho', 24.8318, 79.9199); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Khandwa', 21.8333, 76.35); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Khargone', 21.8167, 75.6); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Malanjkhand', 21.9833, 80.7333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Mandla', 22.5997, 80.3818); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Narsinghpur', 22.95, 79.1833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Nimach', 24.4631, 74.8669); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Nowgong', 25.05, 79.4167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Panna', 24.7167, 80.1833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Pendra Road', 22.7833, 81.9667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Raisen', 23.3333, 77.7833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Rajgarh', 24.0, 76.7167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Rajnandgaon', 21.1, 81.0333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Ratlam', 23.3341, 75.0367); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Rewa', 24.5333, 81.3); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Sagar', 23.8388, 78.7378); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Satna', 24.5667, 80.8167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Seoni', 22.087, 79.5466); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Shajapur', 23.4333, 76.2667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Sheopur', 25.6667, 76.7); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Shivpuri', 25.4236, 77.6628); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Sidhi', 24.4167, 81.8833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Sironj', 24.1, 77.6833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Thikri', 22.4167, 74.9833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Tikamgarh', 24.75, 78.85); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Ujjain', 23.1765, 75.7885); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Umaria', 23.5167, 80.8333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Madhya Pradesh', 'Vidisha', 23.53, 77.81); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Ahmednagar', 19.0948, 74.748); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Akola', 20.7059, 77.0048); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Akola (A)', 20.7059, 77.0048); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Alibagh', 18.6414, 72.8724); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Amravati', 20.9333, 77.75); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Aurangabad (Chikalthana) (A)', 19.8625, 75.3984); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Baramati', 18.152, 74.58); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Bhira', 18.41, 73.33); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Bir (Beed)', 18.9891, 75.76); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Brahmapuri', 20.6, 79.8667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Buldhana', 20.5372, 76.1833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Chandrapur (Chanda)', 19.95, 79.3); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Dahanu', 19.9667, 72.7167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Devgad (Devgarh)', 16.3833, 73.3667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Gondia', 21.45, 80.2); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Harnai', 17.8167, 73.1); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Jalgaon', 21.0077, 75.5626); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Jeur', 18.6667, 75.4); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Kolhapur', 16.705, 74.2433); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Mahabaleshwar', 17.9256, 73.656); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Malegaon', 20.5579, 74.5089); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Miraj (Sangali)', 16.8333, 74.6333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Mumbai (Colaba)', 18.9067, 72.8147); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Mumbai(Bombay) (Santa Cruz)', 19.076, 72.8777); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Nagpur (Mayo-Hospital)', 21.1458, 79.0882); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Nagpur (Sonegaon)', 21.092, 79.0481); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Nanded', 19.15, 77.3167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Nashik', 19.9975, 73.7898); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Osmanabad', 18.1667, 76.05); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Ozar(A)', 20.1167, 73.9167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Parbhani', 19.2667, 76.7833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Pune', 18.5204, 73.8567); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Pusad', 19.9167, 77.5667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Ratnagiri (PBO)', 16.9902, 73.312); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Satara', 17.6833, 73.9833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Sholapur', 17.6599, 75.9064); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Sironcha', 18.85, 80.0); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Solapur', 17.6599, 75.9064); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Tarapur', 19.85, 72.6833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Thane', 19.2183, 72.9781); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Vengurla', 15.8667, 73.6333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Wardha', 20.745, 78.595); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Maharashtra', 'Yeotmal', 20.3833, 78.1167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Manipur', 'Imphal', 24.817, 93.9368); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Manipur', 'Imphal/Tulihal(A)', 24.7667, 93.8967); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Meghalaya', 'Barapani', 25.6833, 91.9); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Meghalaya', 'Cherrapunji', 25.2833, 91.7167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Meghalaya', 'Shillong (C.S.O.)', 25.5788, 91.8933); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Mizoram', 'Aizwal', 23.7271, 92.7176); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Nagaland', 'Kohima', 25.6701, 94.1089); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('New Delhi', '(Safdarjang)', 28.5847, 77.2088); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('New Delhi', 'C.H.O.', 28.6139, 77.209); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('New Delhi', 'Delhi', 28.6139, 77.209); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('New Delhi', 'New Delhi Palam (A)', 28.5562, 77.1); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Angul', 20.8364, 85.0988); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Balasore', 21.4942, 86.9317); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Baripada', 21.9333, 86.7333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Bhawanipatna', 19.8976, 83.167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Bhubaneshwar (A)', 20.2552, 85.8148); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Bhubaneswar', 20.2961, 85.8245); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Bolangir', 20.7, 83.4833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Chandbali', 20.7667, 86.75); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Cuttack', 20.4625, 85.883); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Gopalpur', 19.25, 84.9167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Jharsuguda', 21.8554, 84.0062); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Keonjhargarh', 21.6333, 85.5833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Paradip Port', 20.3167, 86.6167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Phulbani', 20.4667, 84.2333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Puri', 19.8135, 85.8312); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Rourkela', 22.2604, 84.8536); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Sambalpur', 21.4669, 83.9812); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Sundergarh', 22.1167, 84.0333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Odisha', 'Titlagarh', 20.2833, 83.15); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Pondicherry', '(M.O)', 11.9416, 79.8083); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Pondicherry', 'Pondicherry', 11.9416, 79.8083); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Pondicherry', 'Puducherry', 11.9416, 79.8083); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Punjab', 'Amritsar (Rajasansi)', 31.7092, 74.7974); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Punjab', 'Bhatinda', 30.211, 74.9455); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Punjab', 'Chandigarh', 30.7333, 76.7794); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Punjab', 'Kapurthala', 31.3797, 75.3819); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Punjab', 'Ludhiana', 30.901, 75.8573); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Punjab', 'Ludhiana (P.A.U.)', 30.901, 75.8573); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Punjab', 'Patiala', 30.3398, 76.3869); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Punjab', 'Patiala (Rs/Rw)', 30.3398, 76.3869); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Abu', 24.5925, 72.7083); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Ajmer', 26.4499, 74.6399); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Alwar', 27.553, 76.6346); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Banswara', 23.55, 74.4333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Barmer', 25.75, 71.4167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Bharatpur', 27.2152, 77.503); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Bhilwara', 25.3333, 74.6333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Bikaner(P.B.O)', 28.0229, 73.3119); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Chambal/(Rawat Bhatta Dam)', 24.9167, 75.5833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Chittorgarh', 24.8887, 74.6269); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Churu', 28.3078, 74.9683); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Dholpur', 26.7, 77.9); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Ganganagar', 29.9167, 73.8833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Jaipur (Sanganer)', 26.823, 75.8074); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Jaisalmer', 26.9157, 70.9083); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Jawai Bandh/ Erinpura', 25.0833, 73.1833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Jhalawar', 24.5833, 76.1667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Jodhpur', 26.2389, 73.0243); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Kota (A)', 25.18, 75.8648); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Kota (PB-Micromet)', 25.18, 75.8648); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Phalodi', 27.1333, 72.3667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Pilani', 28.3667, 75.6); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Sawai Madhopur', 26.0167, 76.35); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Sikar', 27.6167, 75.15); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Udaipur', 24.5854, 73.7125); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Rajasthan', 'Udaipur (Dabok) (A)', 24.6167, 73.7); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Sikkim', 'Gangtok', 27.3389, 88.6065); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Sikkim', 'Tadong', 27.2833, 88.5833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Adiramapatinam', 10.3333, 79.3833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Ariyalur', 11.1333, 79.0667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Chennai (Minambakkam) (A)', 12.9855, 80.1689); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Chennai (Nungambakkam)', 13.0569, 80.2425); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Coimbatore (Pilamedu)', 11.0168, 76.9558); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Coonoor', 11.353, 76.7959); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Cuddalore', 11.748, 79.7714); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Dharampuri', 12.1333, 78.15); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Dharmapuri', 12.1333, 78.15); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Erode', 11.341, 77.7172); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'K. Paramathy', 10.95, 77.45); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Kalpakkam', 12.55, 80.1667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Kanchipuram', 12.8342, 79.7036); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Kanniyakumari', 8.0883, 77.5385); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Karaikal', 10.9254, 79.838); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Karaikudi', 10.0731, 78.7747); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Kodaikanal', 10.2381, 77.4892); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Koradacherry', 10.9167, 79.4667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Kudumiamalai', 10.1667, 78.0333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Madurai', 9.9252, 78.1198); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Madurai (A)', 9.8333, 78.0833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Mettur Dam', 11.8, 77.8); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Nagapattinam', 10.7667, 79.85); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Octacamund', 11.4086, 76.6999); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Palayamkottai', 8.7333, 77.7333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Pamban', 9.2786, 79.221); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Port Novo', 11.5, 79.7667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Salem', 11.6643, 78.146); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Thanjavur', 10.787, 79.1378); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Tiruchi', 10.7905, 78.7047); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Tiruchirapalli (A)', 10.7654, 78.7098); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Tiruchirappalli', 10.7905, 78.7047); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Tiruppattur', 12.5, 78.55); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Tiruttani', 13.1833, 79.6333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Tiruvannamalai', 12.2253, 79.0747); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Tondi', 9.75, 79.0167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Tuticorin', 8.7642, 78.1348); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Vedaranniyam', 10.3833, 79.8667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tamil Nadu', 'Vellore', 12.9165, 79.1325); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Telangana', 'Bhadrachallam', 17.6683, 80.8903); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Telangana', 'Hanamkonda', 17.9854, 79.5603); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Telangana', 'Hyderabad (A)', 17.2403, 78.4294); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Telangana', 'Khammam', 17.2473, 80.1514); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Telangana', 'Mahbubnagar', 16.7333, 77.9833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Telangana', 'Medak', 18.05, 78.2667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Telangana', 'Nalgonda', 17.05, 79.2667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Telangana', 'Nizamabad', 18.6725, 78.0941); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Telangana', 'Ramgundam', 18.75, 79.4667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tripura', 'Agartala (A)', 23.8871, 91.25); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Tripura', 'Kailashahar (A)', 24.3167, 92.0); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Agra', 27.1767, 78.0081); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Aligarh', 27.8974, 78.088); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Allahabad', 25.4358, 81.8463); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Bahraich', 27.5667, 81.5833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Ballia', 25.7667, 84.15); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Banda', 25.4667, 80.3333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Barabanki', 26.9333, 81.1833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Bareilly', 28.367, 79.4304); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Bareilly P.B.O.', 28.367, 79.4304); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Bulandshahr', 28.4, 77.85); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Churk', 24.5833, 83.15); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Etawah', 26.785, 79.0158); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Faizabad', 26.7833, 82.15); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Fatehgarh', 27.3667, 79.6167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Fatehpur', 25.9333, 80.8); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Gazipur', 25.5833, 83.5667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Gonda', 27.1333, 81.95); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Gorakhpur (P.B.O)', 26.7606, 83.3732); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Hamirpur', 25.95, 80.15); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Hardoi', 27.4, 80.1333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Jhansi', 25.4484, 78.5685); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Kanpur (A)', 26.4725, 80.3311); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Kheri-Lakhimpur', 27.95, 80.7833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Lucknow (Amausi)', 26.7606, 80.8893); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Mainpuri', 27.2333, 79.0333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Mathura', 27.49, 77.6833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Meerut', 28.9845, 77.7064); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Moradabad', 28.8389, 78.7768); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Mukhim', 29.1667, 79.3167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Muzaffarnagar', 29.4667, 77.7); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Najibabad', 29.6167, 78.3333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Pilibhit', 28.64, 79.8); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Shahajahanpur', 27.8833, 79.9167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Sultanpur (M.O.)', 26.25, 82.0833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Varanasi', 25.3176, 82.9739); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttar Pradesh', 'Varanasi (Babatpur)', 25.4515, 82.8593); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttarakhand', 'Almora', 29.5971, 79.6591); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttarakhand', 'Dehra Dun', 30.3165, 78.0322); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttarakhand', 'Mukteswar (Kumaun)', 29.4722, 79.65); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttarakhand', 'Nainital', 29.3919, 79.4542); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttarakhand', 'Pantnagar', 29.0333, 79.5); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('Uttarakhand', 'Roorkee', 29.8543, 77.888); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Asansol', 23.6833, 86.9667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Bagati', 21.65, 87.9833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Balurghat', 25.2333, 88.7667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Bankura', 23.2345, 87.0674); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Bankura (M.O.)', 23.2345, 87.0674); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Berhampore', 24.1, 88.25); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Burdwan', 23.25, 87.85); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Calcutta (Alipur)', 22.5333, 88.3333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Calcutta (Dum Dum) (A)', 22.65, 88.45); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Canning', 22.3333, 88.6667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Contai', 21.7833, 87.75); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Cooch Behar (A)', 26.3167, 89.4333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Darjeeling', 27.036, 88.2627); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Diamond Harbour', 22.1833, 88.1833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Digha', 21.6167, 87.55); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Durgapur', 23.5204, 87.3119); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Haldia', 22.0667, 88.0667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Jalpaiguri', 26.5167, 88.7333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Kalimpong', 27.0667, 88.4667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Kolkata', 22.5726, 88.3639); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Krishnanagar', 23.4, 88.5); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Malda', 25.0167, 88.1333); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Midnapore', 22.4167, 87.3167); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Purulia', 23.3333, 86.3667); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Sagar Island', 21.6333, 88.05); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Sandheads', 20.9, 88.3); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Shanti-Niketan', 23.6833, 87.6833); +INSERT INTO stations (state, station, latitude, longitude) VALUES ('West Bengal', 'Ulberia', 22.4667, 88.1); +-- Insert Temperature Data +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andaman and Nicobar Island', 'Car-Nicobar', 38.1, 10.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andaman and Nicobar Island', 'Hut Bay', 39.4, 0.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andaman and Nicobar Island', 'Kondul', 47.2, 14.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andaman and Nicobar Island', 'Long Island', 43.1, 14.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andaman and Nicobar Island', 'Mayabandar', 39.0, 14.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andaman and Nicobar Island', 'Nancowry', 39.2, 13.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andaman and Nicobar Island', 'Port Blair', 36.4, 14.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Anantapur', 44.1, 9.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Arogyavaram', 40.6, 8.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Bapatla', 47.4, 11.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Cuddapah', 46.1, 10.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Dolphine Nose/CDR Visakhapatnam', 42.8, 14.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Gannavaram (A)', 48.8, 8.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Kakinada', 47.2, 12.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Kalingapatanam', 46.2, 10.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Kavali', 47.2, 16.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Kurnool', 45.6, 6.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Masulipatnam', 47.8, 13.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Nagarjunasagar', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Nandigama', 47.1, 9.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Nandyal', 48.2, 9.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Narsapur', 46.1, 14.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Nellore', 46.7, 11.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Nidadavolu', 48.9, 11.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Ongole', 47.4, 14.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Rentachintala', 49.9, 9.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Tirmalai', 37.6, 3.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Tirupathy', 45.2, 12.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Tuni', 47.5, 13.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Vijayawada', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Vishakhapatnam', 45.4, 10.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Andhra Pradesh', 'Vishakhapatnam (RS/RW)', 42.0, 15.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Arunachal Pradesh', 'Pasighat', 38.8, 6.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Assam', 'Dhubri (Rupsi) (A)', 41.3, 2.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Assam', 'Dibrugarh (Mohanbari) (A)', 39.8, 1.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Assam', 'Guwahati (Bhorjar) (A)', 40.3, 3.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Assam', 'Jorhat', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Assam', 'North Lakhimpur', 39.0, 2.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Assam', 'Rangia', 39.4, 6.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Assam', 'Sadiya', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Assam', 'Silchar', 39.4, 5.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Assam', 'Tezpur', 45.7, 5.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Bailaldila', 39.4, 4.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Barauni', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Bhagalpur', 46.6, 3.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Chaibasa', 46.7, 4.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Chapra', 46.6, 2.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Chattisgarh Ambikapur', 44.9, 0.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Daltonganj', 48.8, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Darbhanga', 44.1, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Dehri', 49.5, -1.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Dumka', 48.5, 1.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Gaya', 49.0, 1.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Hazaribagh', 46.6, 0.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Jagdalpur', 46.1, 2.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Jamshedpur', 47.7, 3.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Jamshedpur (A)', 46.6, 4.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Motihari', 44.4, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Mungher', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Muzaffarpur', 44.5, 2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Patna (A)', 46.6, 1.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Pbo Raipur', 47.0, 6.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Purnea', 43.9, -0.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Raipur', 47.9, 3.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Raipur (Mana)', 47.9, 5.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Ranchi(A)', 43.4, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Bihar', 'Sabaur', 46.1, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Chhattisgarh', 'Bhilai', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Daman & Diu', 'Diu', 44.0, 5.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Goa', 'Dabolim (N.A.S.)', 38.2, 13.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Goa', 'Marmugao', 38.4, 12.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Goa', 'Panjim', 39.8, 3.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Ahmedabad', 47.8, 2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Amreli', 46.2, 1.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Balsar (Valsad)', 43.1, 5.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Baroda', 46.7, -1.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Baroda (A)', 46.2, 2.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Bhavnagar (A)', 47.3, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Bhuj (Rudramata) (A)', 47.8, -0.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Deesa', 49.4, 2.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Dohad', 47.0, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Dwarka', 42.7, 6.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Idar', 48.5, 4.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Kakrapara', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Keshod (A)', 45.5, 3.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Naliya', 44.6, 0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'New Kandla', 47.1, 4.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Okha', 39.5, 10.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Porbandar (A)', 45.5, 2.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Rajkot (A)', 47.9, -0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Surat', 45.6, 4.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Vadodara', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Vallabh Vidyanagar', 47.5, 2.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Gujarat', 'Veraval', 44.2, 4.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Haryana', 'Ambala', 47.8, -1.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Haryana', 'Bhiwani', 46.8, 0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Haryana', 'Gurgaon', 49.0, -0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Haryana', 'Hissar', 48.8, -3.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Haryana', 'Karnal', 49.0, -0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Haryana', 'Narnaul', 48.4, -0.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Haryana', 'Rohtak', 47.2, -0.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Himachal Pradesh', 'Bhuntar (A)', 40.0, -5.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Himachal Pradesh', 'Dharamshala', 42.7, -1.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Himachal Pradesh', 'Kalpa (GL)', 32.4, -15.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Himachal Pradesh', 'Manali', 35.0, -11.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Himachal Pradesh', 'Mandi', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Himachal Pradesh', 'Nahan', 43.0, -7.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Himachal Pradesh', 'Nauni / Solan', 39.0, -3.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Himachal Pradesh', 'Shimla', 32.4, -12.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Himachal Pradesh', 'Sundernagar', 42.1, -2.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Himachal Pradesh', 'Una', 45.2, -5.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Badarwah', 39.4, -10.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Banihal', 36.3, -13.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Batote', 36.6, -7.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Gulmarg', 29.4, -19.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Jammu', 47.4, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Kathua', 48.0, -1.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Katra', 46.2, -1.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Kukernag', 34.9, -15.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Kupwara', 37.6, -15.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Pehalgam', 32.2, -18.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Quazigund', 35.7, -16.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jammu and Kashmir', 'Srinagar', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Jharkhand', 'Bokaro', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Bagalkote', 42.8, 7.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Balehonnur', 39.2, 6.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Bangalore (A)', 38.3, 8.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Bangaluru [Bangalore]', 38.9, 7.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Belgaum', 41.9, 6.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Belgaum (Sambre) (A)', 40.2, 6.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Bellary', 44.7, 7.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Bengaluru', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Bidar', 44.0, 6.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Bijapur', 44.9, 5.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Chickmagalur', 37.0, 10.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Chitradurga', 41.7, 8.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Dharwad', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Gadag', 41.7, 9.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Gulbarga', 46.1, 5.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Hassan', 37.8, 5.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Honavar', 38.6, 13.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Karwar', 39.6, 11.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Kolar Gold Field', 39.7, 9.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Mandya', 39.1, 8.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Mangalore (Bajpe) (A)', 39.8, 15.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Mangalore (Panambur)', 38.1, 15.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Mercara', 36.2, 4.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Mysuru', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Raichur', 45.6, 7.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Shimoga', 44.0, 6.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Shirali', 38.9, 14.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Karnataka', 'Tumkur', 39.0, 6.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Alleppy (Alappuzha)', 39.9, 13.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Calicut (Kozhikode)', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Calikote/Kozhicode', 38.1, 13.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Cannanore (Kannur)', 38.3, 16.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Cochin (N.A.S.)/ Kochi', 36.5, 16.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Karipur (Airport)', 38.6, 11.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Kochi', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Kottayam', 38.5, 16.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Palakkad (Palghat)', 41.8, 14.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Punalur', 40.6, 12.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Thiruvananthapuram', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Kerala', 'Thiruvananthapuram (Trivandrum)', 38.3, 16.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Lakshadweep Island', 'Amini Divi', 38.3, 16.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Lakshadweep Island', 'Islands Agatti(A)', 38.0, 22.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Lakshadweep Island', 'Minicoy', 36.7, 16.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Alirajpur (Jhabua)', 46.2, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Bagratawa', 47.2, 1.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Betul', 48.0, -0.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Bhopal (Bairagarh)', 46.0, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Chhindwara', 47.6, 1.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Damoh', 49.8, 1.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Datia', 48.5, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Dhar', 47.1, 3.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Ginabahar', 46.1, -6.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Guna', 48.0, -2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Gwalior', 48.3, -1.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Hoshangabad', 47.1, 1.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Indore', 46.0, -2.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Jabalpur', 46.7, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Jashpurnagar', 42.5, -1.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Kannod', 47.6, 1.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Khajuraho', 48.4, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Khandwa', 47.6, 0.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Khargone', 47.9, 0.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Malanjkhand', 45.5, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Mandla', 46.8, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Narsinghpur', 48.6, -1.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Nimach', 46.7, -1.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Nowgong', 48.8, -1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Panna', 47.0, -0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Pendra Road', 46.7, 1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Raisen', 47.7, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Rajgarh', 48.3, 6.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Rajnandgaon', 46.7, 1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Ratlam', 45.5, 2.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Rewa', 46.8, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Sagar', 46.4, 1.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Satna', 47.8, 0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Seoni', 45.2, 2.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Shajapur', 47.2, -0.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Sheopur', 48.8, -2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Shivpuri', 47.2, -4.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Sidhi', 52.3, 1.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Sironj', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Thikri', 47.5, 0.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Tikamgarh', 47.5, -0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Ujjain', 46.0, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Umaria', 48.7, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Madhya Pradesh', 'Vidisha', 49.1, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Ahmednagar', 48.2, 2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Akola', 47.8, 2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Akola (A)', 47.7, 4.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Alibagh', 40.1, 9.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Amravati', 48.3, 1.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Aurangabad (Chikalthana) (A)', 43.6, 1.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Baramati', 43.8, 5.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Bhira', 49.0, 5.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Bir (Beed)', 47.0, 4.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Brahmapuri', 48.3, 0.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Buldhana', 44.2, 4.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Chandrapur (Chanda)', 49.2, 2.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Dahanu', 40.6, 8.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Devgad (Devgarh)', 43.1, 14.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Gondia', 47.5, 0.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Harnai', 39.8, 12.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Jalgaon', 48.4, 1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Jeur', 46.6, 2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Kolhapur', 42.3, 8.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Mahabaleshwar', 38.2, 3.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Malegaon', 46.7, -0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Miraj (Sangali)', 43.0, 6.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Mumbai (Colaba)', 40.6, 11.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Mumbai(Bombay) (Santa Cruz)', 42.2, 7.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Nagpur (Mayo-Hospital)', 47.7, 7.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Nagpur (Sonegaon)', 47.8, 3.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Nanded', 46.7, 3.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Nashik', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Osmanabad', 45.1, 8.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Ozar(A)', 43.9, 0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Parbhani', 46.6, 4.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Pune', 43.3, 1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Pusad', 47.6, 1.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Ratnagiri (PBO)', 40.6, 11.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Satara', 42.6, 4.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Sholapur', 46.0, 4.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Sironcha', 48.2, 4.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Solapur', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Tarapur', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Thane', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Vengurla', 40.0, 6.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Wardha', 48.4, 4.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Maharashtra', 'Yeotmal', 46.6, 6.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Manipur', 'Imphal', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Manipur', 'Imphal/Tulihal(A)', 36.1, -2.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Meghalaya', 'Barapani', 35.2, -3.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Meghalaya', 'Cherrapunji', 31.1, -1.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Meghalaya', 'Shillong (C.S.O.)', 30.2, -3.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Mizoram', 'Aizwal', 35.5, 6.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Nagaland', 'Kohima', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('New Delhi', '(Safdarjang)', 47.2, -0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('New Delhi', 'C.H.O.', 47.8, -0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('New Delhi', 'Delhi', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('New Delhi', 'New Delhi Palam (A)', 48.4, -2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Angul', 47.2, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Balasore', 46.7, 6.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Baripada', 48.3, 6.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Bhawanipatna', 48.5, 4.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Bhubaneshwar (A)', 46.5, 8.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Bhubaneswar', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Bolangir', 49.0, 1.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Chandbali', 46.7, 5.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Cuttack', 47.7, 5.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Gopalpur', 44.0, 9.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Jharsuguda', 49.6, 6.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Keonjhargarh', 47.4, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Paradip Port', 42.4, 9.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Phulbani', 44.6, -2.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Puri', 44.2, 7.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Rourkela', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Sambalpur', 49.0, 3.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Sundergarh', 47.6, 1.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Odisha', 'Titlagarh', 50.1, 4.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Pondicherry', '(M.O)', 43.1, 16.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Pondicherry', 'Pondicherry', 45.5, 15.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Pondicherry', 'Puducherry', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Punjab', 'Amritsar (Rajasansi)', 47.8, -3.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Punjab', 'Bhatinda', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Punjab', 'Chandigarh', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Punjab', 'Kapurthala', 47.7, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Punjab', 'Ludhiana', 46.6, -1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Punjab', 'Ludhiana (P.A.U.)', 46.6, -1.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Punjab', 'Patiala', 47.0, -0.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Punjab', 'Patiala (Rs/Rw)', 47.0, -0.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Abu', 40.4, -7.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Ajmer', 47.4, -2.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Alwar', 50.6, -0.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Banswara', 47.5, 2.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Barmer', 49.9, -1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Bharatpur', 48.5, 1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Bhilwara', 47.8, -0.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Bikaner(P.B.O)', 49.4, -4.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Chambal/(Rawat Bhatta Dam)', 47.6, -1.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Chittorgarh', 47.5, -0.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Churu', 49.9, -4.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Dholpur', 50.0, -4.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Ganganagar', 50.0, -2.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Jaipur (Sanganer)', 49.0, -2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Jaisalmer', 49.2, -5.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Jawai Bandh/ Erinpura', 48.1, -3.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Jhalawar', 49.3, -0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Jodhpur', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Kota (A)', 48.5, 1.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Kota (PB-Micromet)', 47.4, 2.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Phalodi', 49.6, -3.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Pilani', 48.6, -4.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Sawai Madhopur', 48.0, -1.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Sikar', 49.7, -4.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Udaipur', 44.6, 0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Rajasthan', 'Udaipur (Dabok) (A)', 46.4, -1.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Sikkim', 'Gangtok', 29.9, -2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Sikkim', 'Tadong', 32.6, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Adiramapatinam', 43.0, 15.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Ariyalur', 49.6, 13.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Chennai (Minambakkam) (A)', 49.1, 15.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Chennai (Nungambakkam)', 45.0, 13.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Coimbatore (Pilamedu)', 42.6, 12.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Coonoor', 29.6, -0.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Cuddalore', 43.3, 8.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Dharampuri', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Dharmapuri', 41.4, 10.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Erode', 42.8, 13.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'K. Paramathy', 45.4, 13.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Kalpakkam', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Kanchipuram', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Kanniyakumari', 39.4, 18.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Karaikal', 42.0, 17.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Karaikudi', 42.7, 15.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Kodaikanal', 29.3, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Koradacherry', 42.6, 15.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Kudumiamalai', 43.1, 13.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Madurai', 44.5, 10.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Madurai (A)', 43.4, 14.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Mettur Dam', 42.4, 13.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Nagapattinam', 42.8, 15.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Octacamund', 28.5, -2.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Palayamkottai', 44.9, 16.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Pamban', 38.9, 17.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Port Novo', 43.5, 13.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Salem', 42.8, 11.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Thanjavur', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Tiruchi', 42.4, 16.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Tiruchirapalli (A)', 43.9, 13.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Tiruchirappalli', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Tiruppattur', 46.3, 10.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Tiruttani', 48.6, 10.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Tiruvannamalai', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Tondi', 40.4, 15.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Tuticorin', 41.1, 15.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Vedaranniyam', 40.0, 14.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tamil Nadu', 'Vellore', 45.0, 8.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Telangana', 'Bhadrachallam', 49.4, 8.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Telangana', 'Hanamkonda', 47.8, 8.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Telangana', 'Hyderabad (A)', 45.5, 6.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Telangana', 'Khammam', 47.2, 9.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Telangana', 'Mahbubnagar', 45.3, 9.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Telangana', 'Medak', 46.3, 2.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Telangana', 'Nalgonda', 46.5, 10.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Telangana', 'Nizamabad', 47.3, 4.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Telangana', 'Ramgundam', 47.3, 7.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tripura', 'Agartala (A)', 42.2, 2.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Tripura', 'Kailashahar (A)', 42.2, 2.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Agra', 48.6, -2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Aligarh', 49.5, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Allahabad', 48.8, -0.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Bahraich', 47.6, 0.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Ballia', 48.0, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Banda', 48.9, -0.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Barabanki', 47.0, 2.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Bareilly', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Bareilly P.B.O.', 47.3, -1.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Bulandshahr', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Churk', 49.0, -0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Etawah', 48.6, 0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Faizabad', 47.4, 0.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Fatehgarh', 48.8, 2.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Fatehpur', 48.1, -1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Gazipur', 46.4, -0.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Gonda', 49.9, 0.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Gorakhpur (P.B.O)', 49.4, 1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Hamirpur', 48.2, -1.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Hardoi', 48.3, 0.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Jhansi', 48.2, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Kanpur (A)', 47.3, 0.4); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Kheri-Lakhimpur', 47.6, 0.5); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Lucknow (Amausi)', 47.7, -1.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Mainpuri', 49.2, -1.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Mathura', 47.6, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Meerut', 46.1, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Moradabad', 48.2, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Mukhim', 36.3, -9.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Muzaffarnagar', 45.0, -2.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Najibabad', 45.2, -2.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Pilibhit', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Shahajahanpur', 46.2, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Sultanpur (M.O.)', 48.0, 0.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Varanasi', 47.2, 1.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttar Pradesh', 'Varanasi (Babatpur)', 48.0, 0.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttarakhand', 'Almora', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttarakhand', 'Dehra Dun', 43.9, -1.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttarakhand', 'Mukteswar (Kumaun)', 31.5, -7.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttarakhand', 'Nainital', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttarakhand', 'Pantnagar', 45.6, -2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('Uttarakhand', 'Roorkee', 47.4, -2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Asansol', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Bagati', 46.2, 0.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Balurghat', 43.4, 4.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Bankura', 47.4, 0.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Bankura (M.O.)', 46.4, 6.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Berhampore', 48.3, 3.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Burdwan', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Calcutta (Alipur)', 43.9, 6.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Calcutta (Dum Dum) (A)', 43.7, 5.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Canning', 42.5, 7.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Contai', 43.8, 7.7); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Cooch Behar (A)', 41.0, 3.3); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Darjeeling', 28.5, -7.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Diamond Harbour', 43.0, 8.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Digha', 42.0, 7.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Durgapur', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Haldia', 40.9, 9.1); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Jalpaiguri', 40.9, 2.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Kalimpong', 34.1, -0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Kolkata', NULL, NULL); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Krishnanagar', 46.1, 0.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Malda', 45.0, 3.9); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Midnapore', 47.2, 0.6); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Purulia', 46.3, 3.8); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Sagar Island', 40.0, 7.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Sandheads', 40.4, 9.2); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Shanti-Niketan', 47.0, 5.0); +INSERT INTO temperature_data (state, station, max_temp, min_temp) VALUES ('West Bengal', 'Ulberia', 43.5, 6.6); + +-- Insert Zone Data +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Andhra Pradesh', 'Dolphine Nose/CDR Visakhapatnam', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Andhra Pradesh', 'Kurnool', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Andhra Pradesh', 'Masulipatnam', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Andhra Pradesh', 'Nagarjunasagar', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Andhra Pradesh', 'Nellore', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Andhra Pradesh', 'Vijayawada', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Andhra Pradesh', 'Vishakhapatnam', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Assam', 'Guwahati (Bhorjar) (A)', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Assam', 'Jorhat', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Assam', 'Sadiya', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Assam', 'Tezpur', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Barauni', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Darbhanga', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Gaya', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Jamshedpur', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Jamshedpur (A)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Mungher', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Patna (A)', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Pbo Raipur', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Raipur', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Raipur (Mana)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Bihar', 'Ranchi(A)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Chhattisgarh', 'Bhilai', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Goa', 'Panjim', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Gujarat', 'Ahmedabad', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Gujarat', 'Bhuj (Rudramata) (A)', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Gujarat', 'Kakrapara', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Gujarat', 'Rajkot (A)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Gujarat', 'Surat', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Gujarat', 'Vadodara', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Haryana', 'Ambala', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Himachal Pradesh', 'Kalpa (GL)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Himachal Pradesh', 'Mandi', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Himachal Pradesh', 'Shimla', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Himachal Pradesh', 'Una', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Jammu and Kashmir', 'Srinagar', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Jharkhand', 'Bokaro', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Bangalore (A)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Belgaum', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Belgaum (Sambre) (A)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Bijapur', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Chitradurga', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Dharwad', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Gulbarga', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Karwar', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Mangalore (Bajpe) (A)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Mangalore (Panambur)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Karnataka', 'Mysuru', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Kerala', 'Calicut (Kozhikode)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Kerala', 'Cochin (N.A.S.)/ Kochi', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Kerala', 'Kochi', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Kerala', 'Thiruvananthapuram', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Madhya Pradesh', 'Bagratawa', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Madhya Pradesh', 'Bhopal (Bairagarh)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Madhya Pradesh', 'Dhar', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Madhya Pradesh', 'Jabalpur', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Madhya Pradesh', 'Sagar', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Madhya Pradesh', 'Sironj', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Aurangabad (Chikalthana) (A)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Mumbai (Colaba)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Mumbai(Bombay) (Santa Cruz)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Nagpur (Mayo-Hospital)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Nagpur (Sonegaon)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Nashik', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Osmanabad', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Pune', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Solapur', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Tarapur', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Maharashtra', 'Thane', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Manipur', 'Imphal', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Manipur', 'Imphal/Tulihal(A)', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Meghalaya', 'Shillong (C.S.O.)', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Nagaland', 'Kohima', 'V', 0.36); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('New Delhi', '(Safdarjang)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('New Delhi', 'Delhi', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('New Delhi', 'New Delhi Palam (A)', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Odisha', 'Bhawanipatna', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Odisha', 'Bhubaneswar', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Odisha', 'Cuttack', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Odisha', 'Puri', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Odisha', 'Rourkela', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Pondicherry', '(M.O)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Pondicherry', 'Pondicherry', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Pondicherry', 'Puducherry', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Punjab', 'Amritsar (Rajasansi)', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Punjab', 'Bhatinda', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Punjab', 'Chandigarh', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Punjab', 'Ludhiana', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Punjab', 'Ludhiana (P.A.U.)', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Punjab', 'Patiala', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Punjab', 'Patiala (Rs/Rw)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Rajasthan', 'Ajmer', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Rajasthan', 'Bikaner(P.B.O)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Rajasthan', 'Jaipur (Sanganer)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Rajasthan', 'Jodhpur', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Rajasthan', 'Kota (A)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Rajasthan', 'Kota (PB-Micromet)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Rajasthan', 'Udaipur', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Rajasthan', 'Udaipur (Dabok) (A)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Sikkim', 'Gangtok', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Chennai (Minambakkam) (A)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Chennai (Nungambakkam)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Coimbatore (Pilamedu)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Cuddalore', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Dharampuri', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Kalpakkam', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Kanchipuram', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Madurai', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Madurai (A)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Salem', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Thanjavur', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Tiruchi', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Tiruchirappalli', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Tiruvannamalai', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Tamil Nadu', 'Vellore', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Telangana', 'Hyderabad (A)', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Agra', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Allahabad', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Bahraich', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Bareilly', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Bareilly P.B.O.', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Bulandshahr', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Gorakhpur (P.B.O)', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Jhansi', 'II', 0.1); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Kanpur (A)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Lucknow (Amausi)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Moradabad', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Pilibhit', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Varanasi', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttar Pradesh', 'Varanasi (Babatpur)', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttarakhand', 'Almora', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttarakhand', 'Dehra Dun', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttarakhand', 'Nainital', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('Uttarakhand', 'Roorkee', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('West Bengal', 'Asansol', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('West Bengal', 'Burdwan', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('West Bengal', 'Darjeeling', 'IV', 0.24); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('West Bengal', 'Durgapur', 'III', 0.16); +INSERT INTO zone_data (state, station, zone, z_value) VALUES ('West Bengal', 'Kolkata', 'III', 0.16); + +-- Insert Windspeed Data +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Andaman and Nicobar Island', 'Port Blair', 44); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Andhra Pradesh', 'Dolphine Nose/CDR Visakhapatnam', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Andhra Pradesh', 'Kurnool', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Andhra Pradesh', 'Masulipatnam', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Andhra Pradesh', 'Nellore', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Andhra Pradesh', 'Vijayawada', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Andhra Pradesh', 'Vishakhapatnam', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Andhra Pradesh', 'Vishakhapatnam (RS/RW)', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Assam', 'Guwahati (Bhorjar) (A)', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Bihar', 'Barauni', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Bihar', 'Darbhanga', 55); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Bihar', 'Gaya', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Bihar', 'Jamshedpur', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Bihar', 'Jamshedpur (A)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Bihar', 'Patna (A)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Bihar', 'Pbo Raipur', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Bihar', 'Raipur', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Bihar', 'Raipur (Mana)', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Bihar', 'Ranchi(A)', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Chhattisgarh', 'Bhilai', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Goa', 'Panjim', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Gujarat', 'Ahmedabad', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Gujarat', 'Bhuj (Rudramata) (A)', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Gujarat', 'Rajkot (A)', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Gujarat', 'Surat', 44); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Gujarat', 'Vadodara', 44); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Himachal Pradesh', 'Mandi', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Himachal Pradesh', 'Shimla', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Jammu and Kashmir', 'Srinagar', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Jharkhand', 'Bokaro', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Karnataka', 'Bangalore (A)', 33); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Karnataka', 'Bengaluru', 33); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Karnataka', 'Mangalore (Bajpe) (A)', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Karnataka', 'Mangalore (Panambur)', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Karnataka', 'Mysuru', 33); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Kerala', 'Calicut (Kozhikode)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Kerala', 'Thiruvananthapuram', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Kerala', 'Thiruvananthapuram (Trivandrum)', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Madhya Pradesh', 'Bagratawa', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Madhya Pradesh', 'Bhopal (Bairagarh)', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Madhya Pradesh', 'Jabalpur', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Maharashtra', 'Aurangabad (Chikalthana) (A)', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Maharashtra', 'Mumbai (Colaba)', 44); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Maharashtra', 'Mumbai(Bombay) (Santa Cruz)', 44); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Maharashtra', 'Nagpur (Mayo-Hospital)', 44); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Maharashtra', 'Nagpur (Sonegaon)', 44); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Maharashtra', 'Nashik', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Maharashtra', 'Pune', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Manipur', 'Imphal', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Manipur', 'Imphal/Tulihal(A)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Nagaland', 'Kohima', 44); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('New Delhi', '(Safdarjang)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('New Delhi', 'Delhi', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('New Delhi', 'New Delhi Palam (A)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Odisha', 'Bhawanipatna', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Odisha', 'Bhubaneshwar (A)', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Odisha', 'Bhubaneswar', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Odisha', 'Cuttack', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Odisha', 'Rourkela', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Pondicherry', '(M.O)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Pondicherry', 'Pondicherry', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Pondicherry', 'Puducherry', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Punjab', 'Amritsar (Rajasansi)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Punjab', 'Bhatinda', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Punjab', 'Chandigarh', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Punjab', 'Ludhiana', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Punjab', 'Ludhiana (P.A.U.)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Punjab', 'Patiala', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Punjab', 'Patiala (Rs/Rw)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Rajasthan', 'Ajmer', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Rajasthan', 'Bikaner(P.B.O)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Rajasthan', 'Jaipur (Sanganer)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Rajasthan', 'Jodhpur', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Rajasthan', 'Udaipur', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Rajasthan', 'Udaipur (Dabok) (A)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Sikkim', 'Gangtok', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Tamil Nadu', 'Chennai (Minambakkam) (A)', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Tamil Nadu', 'Chennai (Nungambakkam)', 50); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Tamil Nadu', 'Coimbatore (Pilamedu)', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Tamil Nadu', 'Madurai', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Tamil Nadu', 'Madurai (A)', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Tamil Nadu', 'Tiruchi', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Tamil Nadu', 'Tiruchirapalli (A)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Tamil Nadu', 'Tiruchirappalli', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Telangana', 'Hyderabad (A)', 44); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Agra', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Bahraich', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Bareilly', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Bareilly P.B.O.', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Gorakhpur (P.B.O)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Jhansi', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Kanpur (A)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Lucknow (Amausi)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Moradabad', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Varanasi', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttar Pradesh', 'Varanasi (Babatpur)', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttarakhand', 'Almora', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttarakhand', 'Dehra Dun', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttarakhand', 'Nainital', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('Uttarakhand', 'Roorkee', 39); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('West Bengal', 'Asansol', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('West Bengal', 'Darjeeling', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('West Bengal', 'Durgapur', 47); +INSERT INTO windspeed_data (state, station, wind_speed) VALUES ('West Bengal', 'Kolkata', 50); diff --git a/src/osdagbridge/core/data/project_location/seismic.png b/src/osdagbridge/core/data/project_location/seismic.png new file mode 100644 index 0000000000000000000000000000000000000000..993533a258bf60f5dc1830165c97d5d7edf2bc0c GIT binary patch literal 664948 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 }d3kXb`x>`$G?WFCbl5SCd@ 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%0Di;i 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�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®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%0Dp$5@3rhF4s|PTBOm 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�N%FV{y%DR|8?9c*O|A0a>BH_8sC?M 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 S6DpT{^l~+IOFp`|S_%MT?}ym{ literal 0 HcmV?d00001 diff --git a/src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.prj b/src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.prj new file mode 100644 index 000000000..f45cbadf0 --- /dev/null +++ b/src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.prj @@ -0,0 +1 @@ +GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] \ No newline at end of file diff --git a/src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.qmd b/src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.qmd new file mode 100644 index 000000000..64331e163 --- /dev/null +++ b/src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.qmd @@ -0,0 +1,27 @@ + + + + + + dataset + + + + + + + + + GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],MEMBER["World Geodetic System 1984 (G2296)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]] + +proj=longlat +datum=WGS84 +no_defs + 3452 + 4326 + EPSG:4326 + WGS 84 + longlat + EPSG:7030 + true + + + + diff --git a/src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.shp b/src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.shp new file mode 100644 index 0000000000000000000000000000000000000000..fc6c146c386a34ae6118b2571d86a3b607145356 GIT binary patch literal 26004 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 C`>*Q& literal 0 HcmV?d00001 diff --git a/src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.shx b/src/osdagbridge/core/data/project_location/shapefiles/seismic_zones.shx new file mode 100644 index 0000000000000000000000000000000000000000..984fe375dd5a683a3055456906a81e0205752484 GIT binary patch literal 228 zcmZQzQ0HR64vJndGcd3M<@i4OKeT!q;Be#Lr_NS)DTf8kVM~?GBOFe@an-KKb#lP2 z9YxfLfq{twi0y#*1khBVoop5i4BT!E4D1pN3_?i^42%s748qTVx`4Du7LZ=Sz#u9H zk(UALXH;NdkPQQhX8`F#KzarPgIpYt2AU_Y1*AVPFeu0|Fz^G#^>+d70h()g4I~Z# Dx=kOA literal 0 HcmV?d00001 diff --git a/src/osdagbridge/core/data/project_location/shapefiles/wind_zones.cpg b/src/osdagbridge/core/data/project_location/shapefiles/wind_zones.cpg new file mode 100644 index 000000000..3ad133c04 --- /dev/null +++ b/src/osdagbridge/core/data/project_location/shapefiles/wind_zones.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/src/osdagbridge/core/data/project_location/shapefiles/wind_zones.dbf b/src/osdagbridge/core/data/project_location/shapefiles/wind_zones.dbf new file mode 100644 index 0000000000000000000000000000000000000000..e5a679b21fdafc9d0887aaebb79de39d7dd60ef6 GIT binary patch literal 2353 zcmZRsV-)3OU|?uuSPdjGK~;WUYJ6r2NWvLJ1b_%6P@G>{l$;6{z$zb>1Xt__VsXK_ z5C*S;p#pV*XOOcQbxnkrW@@TnL}hbn+&&R1veH + + + + + dataset + + + + + + + + + GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],MEMBER["World Geodetic System 1984 (G2296)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]] + +proj=longlat +datum=WGS84 +no_defs + 3452 + 4326 + EPSG:4326 + WGS 84 + longlat + EPSG:7030 + true + + + + diff --git a/src/osdagbridge/core/data/project_location/shapefiles/wind_zones.shp b/src/osdagbridge/core/data/project_location/shapefiles/wind_zones.shp new file mode 100644 index 0000000000000000000000000000000000000000..0970a8b4338acebeb1813bf786c0a4dfd8c1de5e GIT binary patch literal 52220 zcma&Oc{r8d_xMeN5+cfwOl8h2XT~~8iIOuH4aSO0k)%W!%9v1T&?H2eA}X3GGEbSJ zqJbzSNlEqW_wRe|bAO)q=l8vy#~)qStG&;@_q~U;)?RDfTS!Q2p3wjG&*RU~Od+A! zsH`Y?r$g?r1Ds2IcAJ!>3}RAB@~46W&>0QDTqN z;ruaQkG?-l2szH#l+#Ct&`%vAyTn;=;;-CIv35GV%FHw`kYm9YcxmGHlnzR5%T zoKJ^4A@#jy2`tc(Hv1EMg$^?Fq()@SSkO(2QIJld!vUe!y5m$9xK!)7w;rd1J?Z|H zG8zk>Ic3_((u*xsDDWd23rr)q4e~EvG^@4xcPeXa_KNS7(kv= z$2Jx;|9ll|y`2sl0~lZChTv@T=*W}v2U#%NG%3^oMNAv*JW6g7nfPKCC`DTnCr;OO>M-PtUdXEkTDObi`HX4$q%mEi9) za!0IN>>&$&MNVg?B+;P&RJ7cmu;9k~!33!^Is{ak1l_G=0rR7Et8E4y7#`n{uvX2EjY|1Q| zZvpbIWvp;~#e%ad=hf=h16bW`{kFf01^JI-6k47D^xT_Kdai{9{%bWh58ef+=k1L& zdxkUXmxA<{J1l7FrWH2c0+4UmwP}4Zdfua_k^=<*h4EWdJ#VvMddY%A)V(Kd)d4h3f5erPvjlrFa{m4l<2)94xL&YS zRRPGTSl=&xiUpgO&pFGS5Ab-Wn$b`=3;u3&U`;3h*or^7pW)Afkdul_q|5+jRMs?H zV6i|%{phw9djPtU|1ORe3qD+(XSU!3!0gYDii^?ys5ZU1KKUX*Vu}adM~Vd!s#iY9 zR-^Ia9{;F-_8T_-ZrA^0Sq?Mdqkm!&cPSnE&UcC?ym=I|xd`bTk4e}JngZzxy0-5%Y9E#w}A#%v3 z1rkVRrKIsJQAY6F8Sk<=rLe z@bOZQrTKwaX!)fFceBoxV(S*!y% z$Q%hfh;#Gp`Z{}D@2Z?El`*T95q ztpk#h;sB-BR)qa{!~_rTnN2I^0A#PqS(kE$2}k#ZTHO@`s5vWK{P#8!!uWFdjE>_% z<4h*}y|G>9qy|9$Ldl`47nmTnwL{KZ7ohU@t@w_!On4^COqE{&;5cW1;BxpxD=eP>^f{7@$BPQ4kocoTs65s3lAy-e6=e67rQCqP1GOk?*RCd^}7 z`IqbgSa5&DaU7Ln^5p%*v$nEeCYwbHKY$60h}y>Y zEdWxrT6UX#nJ}}eolxHcV61w$=$Q`_-cm(E7JdL25EiLY@ngbN)^6wB698X!q)bGk z_EQ~;->UxtFnVrvt7<*5G6E0w=+YrX*)pdljS1v|wO4(#bLEEAOb#957TeU5j-c^48$iD4 zPKOO2&&Zq#V*)cu@i*C<4&L^Lp5ACYG0v@4R9xuKgsoqCn)mzA0b1-{tng&QufE6b z^aFJ0>N#+ZPQvs`i{@Xo-5LUUy&V-&5y3Ch2mMH*Rk=F(ErhAIok?4R{hPfL+e-Wb_&l)3fcAi z{a~i+JKJcU6{sBhb!NjEv|gE@Z5E zx90UA(sih^HL^nf`K$V2)0FT6*#+jsUi9~t(B0cDy&N%CSG?;{@!6L+Z@NV}mDA4z z&kYIZiv}!VgrLjT{>X&cQul^z8Z04tg|hlTFn^@BW9fVr>?S)m=U7?77xT%ZYt&f)Djt6)M=ikZN&D~j z3>Ms4xK8IZ(*iC?*VOJm#DbSzGcMk1F^55?s){hA*LNO1O^}Z>2h%TqvX15>y?wdf zC(_3pzAtZ|>UqEdl0?Pf)V1aU`;@u4Y88E{ITTF1*5B5O?ECyQ30Q0nl6QvLV$WHy zR{u%o2|06tz1n$0@ey^NIjrCK?`4xww-EM(;T2d<|#EJ`59~ooa3Ud&`JZVHaSsmRDair8*;a*XmHNWN$%Zm z7T7O$eEBsWFXxOTzFc*k2ER2uERxarBRc&1J!DBoWkScdfUjoTYik~3*=Q26Pi z`AARqc&XgbNuxpaYm2NU^Vne2@&21{0u6LBZR%^p*$jCK{2BW&07pqCLA%&aK zzkVMLUh?%i#$bL<)>VNGZXWYI^A6I`d}o=@M|#`Fq+GS+Fb$TznEfbzDbByFuQ4OE z*r0#nUIROn20@=z-K*DOLscoIarGV=s2;DbK4Qp*gu)ZXBySolcr~4_xB}_z29m0p zGYz)h4?3hnWW#9{@-L~4G`OTP%=l}?23qJaai<9l=E;^Pzg)|P(z|Oe5316jF}>jx zVFMdx$*ujUDocYs;&Cna9N6$fCDg!Ok_K7>t>3OWvf-$gx5Lv3DkOJhtcY`AL(EUv zwZDd`@MgH*sBR}4x(Y(Zl=U?fqYN=Eh8Y^%gM$9tJR}4N#1=AKSn;%!$aO;P4 zrPw|yRJ^o*n^VAsRN@uQO951%-YMLnS;_`&+twA8kF{|!fR9G7K zS~v1B8}>9-r3krDq1>i*>_QD%PmULf{wyjeiucOf)vK!UnIPlomuU(r1Y0ACY1#(o_wP438 zPkj#b>s6nKmZXAE^G2~~Qx2SZ$5=NaOoerYEu$#}4rElvx}F-NfWdm&nY)%8C|>zE zRl1u3n`%|GzS(i0^L4Lg{R;|=#Vi<=WOBe@>Gj2y{ir;=U;pz)4tOnX%{2K-fwcUj z_sPy2P<~>xcJ3qv1`_7hUUcJt_v3GzzEKLqOjlKCdf@Hdta@+d=8o#8p5GJukOCMB z|Ir^^SV4j1-iPz^w{u|k`_5#?+Z0$*Q5Ipf3ulRWA9E&T%cH8)FO^c@m9yl#_%sgCcWZ|D=Tjg^ML6&3d7PWwMII^U;=jK!WA`rW zVh(I?5xxEU2?a73+0avlmt%ZR<|8{gg91&Bv5gBVIdFMe-nI531r!Qq6stVN`GL}d zE7{dJuUY=ylGlp*cSq-0=`{)zs+ENky7Bg3TsR})`;G(H_-KVmj~y7odCIHUpYojp zsyA<5SXoH{j2+3npEq{ky#1|iZuCnEXqdK7?w#Pk;LUFXS7uS+aHX8cmvQv|hvkUM zN>m`cy|8rP3kQrkMUL8%sNk0OFjpC|ZSpQPf1tu8jeMu4!yFh@9CGU0h%>gnvGU}* zdc(9RDgv3EBVHO zh>uG*+YI4+=7iGVz8`pheS6>O+>@d~ea7(*ztQ_+@^k3Upmoy}2kswVH2zDQ28Z@_ zi;oC#;Xv%kgIf(~a4-Allf=1PIQqf3Za0AjbB_q+o)hCjYiNq48Jz}9kC24i`CRy* z>Y}=4Ez*yvTGs1iaqbDYr0uA{h4B-yp-~nza9B)D%~ZtO+ijfkIY@;oc>bcx_WjeU zTyQ8!n00k74KR-4%WsUQj?iNYTB$(y^xsKF^($9d?~uAj1*|={EwZ}j(s8DJ{g`t# z7H7YRh=HQLRG5sNj9RY5g~Uq7t}-{O;CTUj`6%)wvMgDH3z18H#ouwDLU@|8TCWzW z&zCQg7I)$`b-8ddP=c*)gyj2s)^~qBoMpvYN54|I&=q(g=C>9V!h|ynTIpPPdE$J7 zwFVUi^Gt*CI9!1|nvi~&ExnZsLt*Z7zb~Xhe9H|V19zOg{g%jY^ubyBRhQ^1U;Ou* z?=wDq+|3oN&)oC1%~N~0FiX4Gq*Rv*-$Ga3oV$-JSg#oOItJDWQ>ifXP18HyL-_ly ze{AzCG!kd?1z{H!#Bc@j_TMagI{Bk#A{U}cqfK90Q$eM0$cCEC73>GvQ_C#zlU%@_ zcgv?ol9z_F@Osv``&pdF&c)RHynwS|E#Yu_HqKr@-jXc~@b)p=I4W!S&uw!mqy^Pf z?=9y7;U2T@g$Wf5!hal1E8zC`b5^wlAhatmFQqMOj>s+zHDb{iHxu z+jjcBi(D}D-F)E38w%(z3fh193>WsT-FKyx*UygAF^6c#) z%JI{&TnPG^!`zWXfsi;ahdU8mShgosWpyZ$_f)e3>S0{453s(c=1GCGAOB`0g>WH& zx#diPH3d36KJtiY{!E%42VYaCfYEou?L`4x5Ns$)^{?T zBU)TM;mrm04a=n-%%s3X_2GPpU0fjbj#<-0abADo%;sVRoX_3by;M_|0&2&vtg!Xs z!X&Tl#u76M98ev!s@#djZ|BKdB6g@hMY;^y4laDYUo2;|l>+dU6sPLK1!9HXCh0vC z2;HSYt8wCj)s4Sd_YPCQBq48O`9?0>(6Dd_iK4((cH^t>JiMH49vrE`=E65a6+7;3 z3P=ZWriT!JL&uSyq;q2$oIdjKqB#+koI`h$)0u1t@t0%3vu#P{T ziN)TV%+0xQ_0d^w<6a7+yAh*uNL(o3_a}VaYpu=|T)_0v^@TGEWe|UuJ(2ycm;x0~ z>bt`Xx!}v!uS1EW&J_mud}I4vi?5F`#@fr@208LbUK}sqqj4sU0z+MTjt|vv#^e=N zo_{UuveIHMTyzv8LKX#`SN=zSV(s5`T3a8p2=#ZZ=k48f6oLHZjV`BNY(w?$y;R#K zj@C2ZUeGwto9!dXg$I{|=Ki`$5yGGdUOQdxBmSHWNx!c#t&F(vPW>@U`~exA zkCzb~Ou3-&gpe9rK!%^=`%~12T*waT4?c2*46La8m(H4T!AD)*>|i1pRwX2v*`;W_6cm4HRa%pQXus5`YaSOAV=vqaF(<=)zJA6S zn~xEtO7J#8zlUF`T1cNCl$!BuixwGDbTWzDX%3_=ZlsoqkwLV@BID8@4zwQ(7*zO0 z64bx!+~86773b$kbNxlWkN}%ssS_)2>J5+t&re#I71i5K0uJ9E;K(o+JZ&Ti=Fe(? z5VQ0?2{f1r;yafhdG-9}r>0U8xE-plny1c%T#*M=q4^}ZP!M!5e>oSHE*7b2Psceo z-H7EDOM=?HX|slrzSXv$o!K5q0#?)XnTy&;-^?p^4t6Dh=A0MOZaQdx$;}x~WRs9x z{6G5mb9U!W2M5k7%iju8dxK|?vQuQG-xn7<8Ach@BP5uqraoT!KF(X~y#(np<$@RD!; zGLP?_F0>-To}6b5$6j*a-S$+Yd4@#zbT-5IWg7=JZWI2&mLS4!JD<&Kn>Z-`@$38Q zzXZq-*}3L9vd2x*vc)s%2{3A;qCRwo1LPY;cJ0>)u>6`>N779W?0w|2;!g|#6jz03 z>f~`i$-zBgU_SvqKRqY=^&$sYqwe32I1nJ1e_psFx8kxakpMT}Ea$P~Inb2<{b05@ z0d~$R30xh6?A^)10iAI(kb026wKbF@@O6z{<<1Ze!RrfcQq%X|!-1ekxfBm80;urM zJBzlyiqhv2pepEwPvbTYEF~UjR@p%Si=A;TN*q*Q+W1V#dIFf2)YLAuLFHlfI%I1C zio1$;pIiOkEX!|if`6V{y4<4AD}VqqKc83G>&O9rvb?cz7XJM6c3;<}jUeWqr&6@a zhPsT2u)p-+g&UC^nDa+n-6?-b^VoG$X@_!>5G9PHj zQ{M$};Jog=DcMbAsMHPI^UNFPfzH*HnOwa7c-w}-h1NK$nT$F+>2g3LI$c_5B^egF zzEt}=hXW;F;%ws-$iUpa=4sIo8#ZVbJpVG63@*2iz0s&;LmMW4_B}4P%4S2>l}I(t z4-$A7K7C{n%ZB-Uc@wx-;#G+k@>lWY$ByjZ7kM@)#>$r$wmolY@yLI4KdXI(#9~1IF$rx2ihjfKB9R3uD#Js zUO0E|bgmpbhURyfudDE97Ci7wB(5yNe;>el=*4J9>w(`sHow{Z+jNwW|B)1y?_j@# zEO=fpU%t=g$33z6#p0rE4=v`;SV)F%@^u}|<0wvB>3#m?ZxU4VdHf>*(i~PH{ zY0Xr{mS11bDctw(b2-CZzHA3s-+CbgRjlq{f*D_aEjd}!;EUq!7*i&?F}7{$d5T$HMZ2vD*j=+K!WCan2M3MY;c z;G~kWdQBb^g8A|n61GXKf#W7368@cK6T;_-f>puaywg0*y$iO@fNYEB0#PbsO` z@hB5#4W+N6_loiUeX|yeQLDiDp!?XVs7fN(S!6+ZE)ycQS%wui5@DZ6b@lfgCeVn= zwhKFv$=f(&Z;Ci9ex={5Zk$`}vOSSv1;@{RyEL+xFe~ypyk^#4A|$9Z3def;Bx15B{B^IpGV9SNR4o>>tY zh~kVt)cl_?NMOiX^K5!I$~WW78;e=e-*))myuP$oxos!TZ|{r08h2sB<+Ri9r|n5# zxxwL+H;TJqyyeC_tCc(^+_N+Kn6a7!>+Loz=(A_S>D9~BdsdR*+HM7DXHzEJ&oyf7 zT0(;K%c5;F7ohddpAT8xZ8}>%GJxH)>&;hBA{0Io>pfb>fJ{}%RBs(3IwwEAefALp z8kJ8Uc2OikZ||G0>P)y%jzxz zFm^L*84IgmKx9|x^1Vd7d~`CYY!wCn{jT3D%NN_>yuh*ba}*2bHGF&L-jjtwKkhIf z#ptrXb`TLTCf>U@m2?nib-w*Hl1MnZ0@W|#+gH6>*Eo$u45-}U{Z#uRYX3`J@4Wxu z)tD%#afQkDEtTOnl4fP5{^Ir#2#HTLJ|n+`}?+-Fkt_37yk?u5*&?wKJ%y%L$H6S*_%~E^wD_o_XEb5 ze#W?Le5F>{0TTS1u~;ak?V`PSvXH8afZTg3wNcY^su-|LqL>{zjLv6w-&%G)WB^kmb(@|D8B}7GwK9=>*slMs zJjaj>+5M4sHuRNc#D)wpwR+AmWem6&l`fOMm5k1J%gDVYXguf3)z$cr1^e~u z;LX9lW9avKk4v}aBl*NXzpvu&-^*5ww7N1fl=daOewM=k*^ZFgADhV_<=Z@Jb(H~^ z4rE~X70W@ z2CFE7_NF$pM+G`jP&_-KFYyEe{H6#(PmWU{=dnf3P9#s{7g{cp$wTo8mAmH)5*cu- z&ST5(G77|f*RW2HK=t|lsRy)mFQt(DkUtfif2oQBI$@4-69EixZqKEH&FjzJbx6KE$#+_wO{PLkxx*J5 ze}*8Q(W%;}R=AG=>il@$yCa^gMTZ#>*WF||5J80o-dWjzV@RI;v9qelLH=b{L|K0_ zk{|r|1tvco^Q+n~f1nE1E9U=i|MrGA%`#fzB1sgy=xcsEfqAZ^Ih%>Ga;HEFSbjn?RYH81cf_i|9F3+f@`4D zVi&~sKIqS=Sx5uVY&Fvp5=`)qx?p`piw1t(gLc(O-;VO*AD&Kc$VrQtP?5DSzKBVK z@9*ai1usE)N!{g<7lKf{|LM`XXcd$~ zn4gEV@~eiqw2%cPCPL zBd1L*0JE=*Ejs1h)>uIFeDU5Ul$W+7G`p{lX90(sMB7YLQJ&L`cVDc0EgoT<&byHPS9DNv?yeIk&(VdH_zmUhI2|wukj}G!)qgXH$^|H|D&pBY z)>E7VP*&IHKAio(t9IUyv;=qAsnpLmm@pKx%UOG|CDQkbih77Ck4wewmS73@o&M&y zq4Px+Kfi{vc+4-n66K+#w%0h`N6$ZW@bbGlCfs--6_!wG2`ctezKeqQV;BP|;TlsCNW{_fu& zA6de`^M_DM(JUb$(W3wSW}{1^zIXq~3TRFr3kY0@Z0~zjk8F```cEE`=|BIVzgpv% zMi)b*NA`wyuvJMg^H!06fEq(k_fxBie*1rLUFg&5?Mw0URI6TPr)3PV=iAXM)m=<( zs52maq)|M0` z&DZaqzDPiR%*pc_Tx7?X&HAyo1Ni|q-75*THD-Wul>F5kLlVd?5H9vJVSs=Awym%9 zNO0`-xh3T*7!XCQ*NjvrL3i3hp&B9s68Pul_>eO)%47!Y^;n)RD}(ye@ZM%6g#q~< zTC`^5XEgf2nVp6By8CI;E-{k8?n)@0wsM?->>Ntkya;m!EO&Tix$id-7CwD^+Y8w> z=Q5ZkVc&@`^!t*r0kYe88^BL_ln89o!2P+%u6dETV9|#!M401DI64dU=YG@o`bjyG zfS<~X3mGgTL4MQMeeom)5JayK&q|UYd``=lJ?bykzYEIR_NwUl^Ye3LX>&-hvU@2x z4~+-LSo&$1Qw=);LXs4ACK~3eHLO}*z zKW@>kO^LZU8%Ar{ExgWvzVN_&$RUEoNJ;4a5|rcje$IIA2_lrG*bi1AJ1uR;%ga(p zM0lQ?wer**2E3dt1uMgd0=-AtucagAfphfw5y_0rIIn)*(WFBnB0rH>x7{rUI7mJX zj!?(jCvCZ8-X%qZH;(?k!svPO6yEzOIG=6PW&8(rc2UwSk^HKC1gKGO|7{V6+CO_*eZLO@jJFREmPIij zyht~u9r<-{-CtARh3pK`6E1~L+Xw)1`7X!MIcj!Dq3B6FoGBx>J5~eEQ7K#N4(Q<= z{3UJE-(~3e2D9#Oi)6rum&EV+^7!+dls&IGNf01c;^1YUBgpRO7DsQLHiK^;C!!9- zB0FfQ+{SGqX5e$;_~$3c?#t;1U(wfQg7+zIe(woac4S%v;y~E${=mpaQdxja{zAEE+)KfFS z*idTYpO*tTYp(ia_zJ}dS`X%JjrhcXo8B8g&5|KNR%u+P^(Z>0@aGfb+hYo8btvwD z@!4>S^Z}QTrFLEF=jLJNt23EUAb;w?g|h@`88r0XHwW2~{QYv$cV&6AI1_GJjGp!kLw-el zv%?>ynV>yZ*}Kl40Ds(NrV3@4g8hLpwjVHEeKjw|<01vGkL`!z=(DmJQpgWUFdRQJ z5BWLyoHXqHU3AP0j@;Xq+g3DQIX5iJjSU#tl0ZB@4-L}h^LAKqT+70c<&Yyj5Nr{9RIC&p?Pj6v>`L8!M z8neydYta2{*IIN=*^xS#HoXGgNSXvqKSJkr!&?TN(G?)o#hNA|#%!Sw_e%y#3-EGG z9%AJ=!9s;@ml&Y`?M{H<*b3<2pCijNCnk3PT>-ZOMcdlYISK3EhJ)nPZ%6U>3AJ`w zY>arwgM8?XA^I?mFYk_}&ro$*XC}~3Vsxd9yF4?vwz1-DKnMeBYqYGC+|0m)uiuJ4 zJ^UN$YXNE$Gl71c7rp&x*F!T{cB*yqsSA>yo*n0l+s%Nn^;_6X#52lbcf@p>fwSa; zT;I*Oe5`e77+`Xdyq0r{HvMZR(C^s#b9Vfl5x4=3$KE8_*cLwK+vSn z&8s>D`0l3fcESc{=PYXaK4kBND$FaNTtN`nLzq60<=ac)tiIhl?Frz|6{&uM>=}z+ zNz4HhN5t$KtB&a+16KlQ1Sh_Ej_ff^ANBCMSeX@K4E+XP-X+&`tjIr^++QZ&wu-KKP zgPw=k9~c`@ZG^O%2?Bc(vsWbd7!A{>}nqNa!J<5tge?Q`cNdzbH58)8Q(uT~&JoO3QSB^}9+ z%H2B|S~#E76nT9Q+n`W~-`86pRnn zUrZjahk5%-)QIqnxFYOOC<8nmT6(@kago86tLql;VZi#IJM0!MAp+fX#4$Ah`NjD5 zx38|mK+|q~e6aak_Q~UHEs6u4Gxu>_;Ew#Le8$c@7-RbhYY*G6$Cg}7yDCEj#y9`n z66m~z+5bsCTb7m5k-fwpPwc#ijRz)wejSqUHC{~=oNvocX}F}@qx0M2y51gr28eXL z*&@Ot0yFNDn;hb1AN^LpZ79!$DLKN@L+{5wpUkygu8XW(tl~< zyo!Im$IdqwZf1h+G6oFyUX%%rC4#2JypC6@40vpNBWiCN5nkvge{E61&rcX*=QWJ6 z^P%k3gP9@n48YE7S{rSe-pU|-rprCr_zcB;=wksgQaImt*_Sk10{OAaFHM}OCqiJv z-|Lg2`1us$97lCRN)KL+ooB7f`_wDu;pc6vz2OHBa&3MR0W0tEEm_(OpVzSX>;Mbp!t;%3B!~!`+q~lk&Vdc) zS<}-F0{@F>f}yuOdOys+guOr3e~hvIVvO}q`^u4;4`{rw{$cZh`FF7S!uo@)53K)F zNt!k}3mNcq!lqdX`JXQQ9UvRZBL7CRLC|{?_r=yL#`%kl1CB4p{Yn4!k0F;CaZPDBuqf+PUwZ)TTHMr5tdN;ZVUriOO$t_d`{$9o?KS!iGel`nUhaHhsVHu-y(`kwA3M|lG5fL4rZVX~BaqWjy(0vrS zv)nv|jX_uc3enyOeZTj@W>Ze95&9l%o6d7%7AV(?PL}2xL6GZ>nHL|!leu{w!?U@{A`Lk}+9>Sq9#WB=x) zTC(6z!Q|8*I|GQ&@?zbyVL@23ZZmPV0W^xdA=KHiKsNm5{_~&ofxU2E+X3_)d9OwC zu={;|&=kJLq`0Gd4_?eN)JoEai(5ph!UNGg1h>UusfZiTbpQA`Re-AEsX zvuBh>qWqocqPZ&$Oz45j%x#*_F0vqA%-4ijt_R)QD$?c`vOqs|?y(~^#pU*hy!TEE?Kf0iM2fRx@-;yNh!P4AYG1B#@zioN1 z8m5o~zF~I~@?|yP&bUf(0XKV){Q`X@jqF z{#M;m7P?Pj0YkAy8xjs#-4sIiI85fO{k1+*8|DNm$~&NYA7(v%YZ`V)8&(llS56;8 z`B6DvZCE00M2nqaF@8g3xL63B*1xnpk*&cGSlPgwo_kY!{x%D2MWv#l@= zAdRE^9pUzKLN7HzGBNVb$q}ZYzrl^kUqjw8;ZClr`>7Bupj~=H?nL=i*!yDff^7?u zKf07^3HCQOK8`a&lJeV`perpIBq6E|o+T^G<(rv;`M~4@v>w}HUZf4Ni@GI0KSl8- zG06eZc5N^xIP3MJc!%B3sq@a3I`EY{Xw&wP32`q=4d?sm!1_U5-ns`&ke6>?bL#@m zyCcOmtm@H$tHHh=Pf+{>TW_0BPaM8g&IEmPjy{lt?R~JgP z$;XY*ciA$>y%u(k=t5QZ%!+g9yX}2v=z04km!o)X<2wygJ2?B7 zqx%NVNCjL+_d&JzPJjKf94za5l}B<>jD)}6u=1)SBfd?i^w51ia~s-F{hM~aw~t)M zc|&gJ${jcLKx@eE#ky-KU+J;G&@u^qc%p7~^U_r&T$!r|nXWO}c(FJsmM3suBR)apM@a4Vz`bAA%KlNctNRiLeRFpqd<5W5QK0mSp;b&=0h{3a_5pp0!2v?`hj%NMa1FC8*~ zDWP|kDp6>>NL%*Q{WK87|6DqrznsrBge{W#&dniAc%L8omUO@n-T(7S_xe62tmn&H z8Kaw_kN2YaoK9<#EHMO3_hnu>WNaX8B;a{c!N*@n;yj&tQfj+8&WHa*N3+dwJ~J3J zFk+8$=f%FQOE%-&d{XMemhCwEOI+<+6kr70-tBA7Bi*ZEp<&4lH3F=E(UP-24kjY~ z5-D6f7|et(g$<`iFB!pm{yh@Mb|n4H$iw*pr`&bC1pj@-3YC?w%ZvbiJfHa&wSQi3 zg_=nVUY=mEZS`cg5!}A$@4FU_&))BTHFJI&L0qT(pg0=8#^<6hH^>|Bi5a|AH_po=Dg@RW{mFH`M}_z zc<#2*O!lF(#t^C*b@wug=L*dVp8f2GF{qw`0_|`VFP%9t!hVSJxpkX7irS6Qy*$cV zA5nSl(Vg+4AB@2=KW*Mr1j?T)ezd!L6t%zN`bH+opIg2y;qMwD6Ts{htpx4Mf99G9 z%CAme{3@bp0{^yekjW#0Or_KR*hy-^C4u)FxNwPoru`iBmSDGq2b>F*X9Itd|Bszi z^pBB*{$dkqs*n9b-$5)XNt;G_9-FJOfjP~E=Wb@#$nQ}eie34!Yr;GTeBmD$JW59Q zN-P*TFq;Q<$yrw?#!#c{ke^YzR^OgY*eiL!uh_qs$^!|FwY=N8WKe96C`z{C!8CjJ$I;_t*je%`^`bQo;+uT@(*wvr9qAT# zTg`)sk7aaulqd6h_b0~+J09do%(?vu$k3cy*A}*p2f|^rV9VZF+(CgFZ^hZ#hQddZV8k+~_=KLBRc}9Ze zpPPri^3e0<`iU;Qg7ToYCiaAE;=#p>g9neCCqc%kT`Y4)RR403b1%xH!sf0}S*Eht z@qcFqKOT$KpJ$)*arZ2|{=a$I;=|_S14Kdl`}pxj?Dv=W=Rb^(yXA_`tR@Qj=bvxz zdeRq`+cU~ko6kiK{DT;baYYjhaeixOH>}^o-*SBR=?HK=4p%x53ce3 zpV)p;;QRA1mgW0Lu=?2h_J5Hc8`tN772iKI|IUhiMu@HX@lb4k9_9O+PAxbq@m?40 z$J+n#FMYY(r?^dr2iW|y#T|K&sKJ9%`?o!Mf$~oO%{K!L-R`RKpfyC6*@yC`F)ri# zFR1k=e(YA^K@&gzi}7iG{21faySf)vcM<_(Y(1ac+$A!i!~^L-pX((k?^(IjJpGa) z53u!*$tP`oz5>Qf_2Fwf$s~dN8W!z|tfZsw8lG3(PLb!qY?~mui!%uv4Rq~oWO<;K zeJJ+MP7;*e_u2etA%xr z2LrzU0%JPg|AFZfX}7b>+@(qIZ!TpI+t*ET0V}u2-|+U(53XQ-FwWuoXE5&L`-iaK zWAX~)LcTu=V{3js1jg9$HVyVRr(2sZw_(+dtMGXUDoRz7qI>u*u6hV|2-G5{>Ck}E!wd#??m6hCxzH* zzef2He8%>Nai3+DdIuVR{{FaamPP4l zfWC`)@8@CNguYAU`*SeH)(ghi`onAyY&~PV&8xZk(q0mLD@gu$xDkD)?xU18iN52) zo`>l_tbg(@79~GWUhmc{7d@BfT)e(bWDzsc`FIobw7?4e&fOw zX;;@8l*c=;M7(1TTE79aqHV6cBLTL5REq+=*up5!mcPFYMXOUr@Oz)yWA*7FD zY!ph+cSc^irUAES@qoN_c-hgVWWe?>W?x`DCJy6QNa#DJkezGRiz0hOr)fBFHCZ4J zjI+r};S4ggtIjM=6XU@f(cKX(=sQ`A^BIn7%}o(g5IZpT=rW09b`X=-;SOy z!h;aUr;5{e$uRxRS;rj7FGrc_K<|g>JLd<-UOz(es?9gIiuQzzz7Jf^&O!1Cvj;Kx zlfuta4$L7&eL?mt0V?A1+Q2n{C7;2dZnhuz|mJ zu)CKHQ{JsDM|V5^lfvi2&*SrRur9B0Rakidklw;Ewc4zV7yG;uOHR zaoawPJeC0eSelRtgIUC*QbcTMt z{t()CALXPo7g1ruM$>?yBRu%qnW+?|N(CRkxW+qiJaCUZP`KED3U};h7FQ=CJ8*Eu zSo~@#%rXc)`TRJt+oeKDI~Y_r_*_;k<%4Cut<38dRc@9 zTT-6hr&RKwLDQt&XbBDW=PD_RS0g*7-RjeKO&W|l+>YixO0W=aoF=+IZ+qhp!?{q zzIa?{@tOxKZNVr-!W`PKyd@lX#e)s6gL2HJ%)$KKSHErDI2(pr&NfU)aA&t_gC=E!IR45|-?&p2>KKpw;@AY24 zF8=sjYoE2(UTf{O?)!7E{kaR>pfV>T=gqJ=p3}dzG9VY{gQwGK&0cdTEIjtb87rk7M1)hFz3yewbMElFfO599Wmd?{v+q7goj>_ z=K*v0xYnB?jPtkKtIEJS$ecIdeaE$C&hjva0{!OHxR3ABUYemk!8_)3TlDiB#GJm@{G%6Cbivco4U7i& zT5t=^z-4Z_?GzKV%ikvMHqOTHAEq6+#YI2A=HWVdS^WMX=~R-uoRS;Jl^yHKxk6!P z`GER(@;~}b-UhR9AIeXaJ+b4A8R~bZS)ZKY2J*r6TOOSgpPswlmg$ae_^WVJPXKoG~ls8(& zRioX1Wpsw>I&}MptN`nGh=IVh*_lm({PJ9olf>(v~jNyQ+OL zdT=}1tz><+A!oi8ccWfR@7jgmQ2$CMYpYMhJ1l>D=>AoE)GHjnZZW%;s*mhna(&UL zczC%R{Q}M__riml%;8~F_NKq+r@W6Jm3i-P4w2$d@3;z5@53YWpnzX!XIMRmTeUpQ z9QE4&#h;#iP2fX)MwyyBdxFr9>TZhoTogrN@_jRUKdseT9Q{_aX=|3Cz9fmKS>AT} zaoe0X-^g-uK9cywmA}be=m(P5kI8rITu?we>(H6NbI2k2TzYTXFtONPM?kaeTzxqi0;alR>p1+cVd#*c?%0j{-vlR zg**d^4GU*}*R!H9yVlp4--g1yCss+%N1lwlezquF=OFJ=s}u9?gNp_9TFJ@HS%L5K z=iOP|9u~0nbK#M7E8XBzr0IM4OKIi7% zZ$W;3ZYZ=b^Ll%w1#f+v6VcW1xYmNVe*QSQxA?+G3&>>N*|jm$4J`Oom+KB&K*0U- z=MTdve5_7h<#Ysv84KHHNk^icyMC3{yM7CZH_GIW9Cd?x`d5Vc+AUCz%4bRVF|-%; z@}A_qvVfT#Hjm-B8x(XrJS5hHI@%8(U3EO=28{6RN}SljJu6rOZ(;!0J9 z8yrmfB;NYS0>1UILf71;aJ=i#=8xG_|B;w%ABoBKllx)$`9n|@I=Z)-Q=x1moOQl?qL zT_us4yb?DkT=mjDe4Zt5|6X{Jq2{Y%2@YMq&(=Q2{mi3!iMX02Ncc?eR;zIX(zXxt z>`)YH#P_#IaaNMPCHUTw8ck@S>WhBr$KKNB2E{{VJ6O_|Jo{tw6W^tM5|*%eUGw<) z57?if_Ve=uv3-R7L$;r^SIGGhIx|ImQWx@i7H5U*@%u0mlk$T1zo=N?K%tKBc4BHMvL8CfGs;k;R{e@@S%@F53QFlRo6R~(WY zkd~wFXVxPwh_-GOt9Ex=Sc{Nh42cep_8e}^WG>~_+0hwIF% z8x|T{z~A)KJ#pIZy#4cvj6;ipt~;!7_4%-nZUOU3K3e(F-Qjg>cj|&U7VwyUjWw+A z&hsZsS}c>zS?)mk4W4Y+_v^x*Yer&D6tR^nB_^x8^X!35eM$0rY3{I_ z_F~<(CUXc$+-&zr(VgcnkBKwo{C&>Cp zdvE;vi;g6Dcb>mT_TL(v=;C~iIj{f5hpm-3PUfH$l)I%_%bjQMk^M*7gYKq{-zBk} zCj58*VioFnhZA<}=$1qM@Ab#(RPp&L34fJr4~fb7LE5haC#|xKalYha_Rl@D$Q*Wl zOtT)4a_8BnD_%N(oG0N9n+X5t@Wr5j6*H*kk-c(7H%yo+pNL*oe`B&c&)+o_G(PCe zN7ZM0XVUElztP_y?AO?id&gc3p+7{}zvTKLDz|mY7M3}93{E>TuL?4+r=2aQ{IR1Ry^D92;(ki_JKdkP zID?PfVCn|9gJ_ok2UBX`Q zy0+C#=Cdh}56La|@eq22-~SW##&M%W+A!)Fzc=u8_>qU>p?p7N{Y_J_ApCb>f`2NL zn>nP6_KoJ1$TE);|LB+gi|MYLT#}V3u${=Vdi;DmnEhioS7uLVP;on|(ss2}^UeP+rivlg_ZFl~{bWHsuElI7)+T9wl3 zrjYJ3cET;$4Z@CV-oGkM;fP<7`f8G<@LhlVwhdR%o??sk_Mv|1e=*s<=iEK_0|cq| zW)N|DvV7h7M^K3RkrK9*HHP>+e|N_^{BAdaErfl@ewFdAsM3V@e6`uP68Ds%UKVlx zQq7gFV>ze~5#2IH_A>GTL*>tcQ%rczL-NL}wnt>xCL%x3vcpp$)P%>6ndi@wboDg> zKNb6?{0nZdEwV*FdX)(%E^Zh~J?93K2;Q5-WSo9C!M{n*91%UQV*(^LBY5@Z4Ibig zF=$V`JL_OJ*92A*_O+VG?`xXVO(6Pkm*%mP$S;X(on3|cjwB}eT+%*gr-jr_YC?S> z!hR>?0{#SF_pcpLzbuahU{N^$PGeUU(z4s8N)q-k0f!p z-`Qb}U2fo`@ohk?$e8DkT(deT7hhtGddMkS;@h!*v~G*jo?{#))~?n((2W$Ip__^IyLDzZj|Qsd$7W^dBDl@ret9ll)ODb)Rrz?_*vZ~t4Ustw5v&8 zu6nDS+|oBx-BE;{P2Ow5?_aw%a?_*8UgYskjq3Yf?sS90?lA)&#nBIHy}NG&?dU5q zxlg*0wAwCiwp5%l2mh3oDNOu5 zxi6CI>?tD8g7E&R(qG7{E+BZ-ppw|%?dZplyeqj5lDsU*+p38E`n|gyb;&=k)lNsh zt?1q7M_QO?pvdZZiRXFr6aAljm)KwipF}<_O+Y^{r{Tm>Vbt07*jF5%dlu&{p^HxP z%u^*6)ze(fpz2#pe+AC#1uVytr7mWmcCcy8>NLg~2%Ue9{b7OUu;KDE4Gg1r8VED)vj|TKZ>woWfJAmu1p}}RTM)S;sG-Z3a2A7IEiro*P~;yOlySg9>8ad*x>HpHwmf>mFZc znJ63&&sp>^IWtHO$?`md^FD8Xhe@fd8BFgxke!Zxa`t1k5+CLnIN;?rsU(8JB+n^H z=uVS7|McR7#|7o4JU{+0p&LxbC5B>y&R;M!<;6u-=kN#JHKpPjx}F026g4SqFZDsY zSf5ZZ@}X`c5$8F(KV{kJA5`3@iqL^Qu_E@``vu3cy33TF_7(3F8cNCSRECoB5_uQzW-KFHy|;|+mP)m4*PTd z4e~l9-kK1ZSA#rp5}`}E-`?@9v5Om!{YTtd1-}yN1vmt}e08cQ!*ihR`W~6C~d8z|ale5IV*- z1P^9N=p>W88HpdJ{@DFh75&ux4o?sKHoOFw{HI`6EF!o zTIGQ8W!=Yvuk4?jz)~&FNFm0by)tC0`!U}6d)XVwn|R(}H4zUrefIpR3!X3V;mj1W z$9O5pBli>W)pG=o9M-o=-wyZX-tn@M*%;p^u@AxXlGpESq;D3)n5RK$((AtaCLs29 zjfQFo^0Gw#g~|u66MlfaIT5d|zn#1Fz&%$8xh=-$cL#M#o0fkO%%ke>eH(F0HIu?m z&#gCByoS2d%`WdhVLW(UorgqliYx5hINxnaD(XNFcj;_Oas^Lw?<3DHBeqab^N*ph zu40a_2;#BRnv-Z(On~oNOp`BY@KHc zUv0w^nh-ygyC`a*XbQK8JPA&)ucMG=3VWMw*gnMm(>V3(E5`!u)~}+?uXeh^WPOFl29KJ8w$2xi?MGZ;$4Fed z(iybVHM=ymqOm^0j@Mt4w>|Z^E5s0aR37)eRXlal6%+{_degJJj<=r1@igl`Jd|$= zIi^yh%4c!DToS7ce~5Vq_%t2ooO6X!gx|2H{XGBMi>{!s^xW*%FH9lXZpo8*iLNj( zb>7%x%yXl(KEufn=Wp7Uw~tPDnnDGU7vZVwCROeSQwX$HW-h|{Ub}QxM18+0XkOUr zv-t|vmnwF3(Xc7JoTB3~c-0lA5P20i3a5L7Q*nNkcRu_ffN|#Z+v_vZQ8&9Tsa;CM z3`&Ui$@xluDszSz6|s5hv$QPi8vb>S0VjKb*5ET3&!c>i8vl7Th)99uBUZGoR5rah?!;0Id}{0 z10rrg#=*%r#kC(bD}^7Ry+f?;q#rwFaLE6g75cG69PXA^mS@-^D(dWHW+9~I{uAmViQiT%xw@XK!!`(b^@ z{$sMJWA=lHL;N6k3-TNU8AtywCiizTu1@an{X|@hJm)}S(%vECy6Hq5f>WiS9PDMz zJJ%4EP$hb0C+eCJaR@RFPsSZc`<6V%AUav=2`!e2JHO6Vvgu1RhXBIwN)ERdSbm3! zQ#%rI>u|!a+eh$F`fC(5r(&Eyl8DPY?F>EKdW(u%k-WbU!E=$kKItF$TgQC5{*dw) z$hbRMe(~{+o$ZylzY}qN@>~KL_ab?E5`QCj5fYQU35oyfpZpi23nR?OC;mU*7tS{N zy3rcH@wz<(ky;TnxV|7VZ;K1At#*g3(i4pS$M2~n&i{Oh$ldCKdiGlvNeEfT8$shG zMV)-ao8v&o}n@;hhqK;(S6vFfCB7>suTR<07hfk#)hC{vyzbjiLsZVbfcSQ6DGo}I!Wlb#I}w^2-&$p zoOGBsU$`Nd+vaUQxy%*z5xPc6(~9Fw9bG}3z36Tz*ATQX_AXU+c7@VOmWvNALfsl- zYOTI1NHGexqn{Hq@J&7Z`+(FGbpUywnAK3)D?>A)@Q6WGz9-6(^}sN z8wId^%tYrQQA4OX&-rz3f(yTA|EnwV zT`PN266Uuev3gK5-^?M*rxyJC+>T)bc;$6Lu>KPl+QS9+=YKE&!R@05XSQ*{fF<+0 z{EY#GZ+O|et`7D7WA+@J-;BC6zP(Go)o{U)&~bY3wkTet8uQDQ{;PX4E08ZevXTpm z3Qk)LE*pTDx#?-=GA>9Hx+)v1!;>nWa^c9~i}Eib4WM*YNv72kE(m^-_P!Ww05?PF zo39~u{BFoJ@ilCdc_p!6qjb@Q7X@7SQc3%5bb~M|?Ydn8=-I&Wl{fFm3*ibuL(s*9;U0Irc#;( zyQBZaxoyDqJ}})NCdmT+cWd>;yfL5L>CZ-8A}q|m={|KW<}18aYkJw_Cq93F%vYUN zT<~gX6$tEQf`gdMG=&v7-w#eQRCrI}_wJ)Bo-{Gxz*PRsQ+Ry}XRW2+OD5*Kdj7N& z>+5@_9eC~q6N(LQuV-L>LlQU5g&QyN{+f=jGM_zU!uu+b1~bg((fz%rX!1QK+-3K0T$q<tEJhvUtcSj)fOU55!h_|$gBT<8%{ zyP+z>1b4;w8S4zWAbv%#B~FZqypZ&i8+0zbc*vdHVzzJdqk!)OCMUaUdW#!}EEH zKCH`h`Bqeq`BVu#gT=AG&-cCHz&zV6UPH(9q3X*T?UZT`e74=TBmJO0Ji8x1GoYLU zzfWm;_V3mQ-9I<%T`>RZr~NNqT-~7$7Pq$VEH36iZ|%ZwwE_CjboZ*!+q)c)+oZW$ z*i|1^P8Y5@n~(Wnt)f%B?DWC!al`1}+Z?D&Umx0GjMwvb)8D0YAntD5Q#ramNbY{o z9eoY+sfyl`?p4(X!x@^(&n0tU<4XgU*<5{)`BneDGy(Gu3+}Sj7SV@7gNmBjaU9Sb zHFSD0Oov(-4~aV$IpDk1XSv8{{2rAkuj%-8`du4UzE7g!@wq0dd^MrJu=@I;N0%_4 zZ7lJ9tD<(C*a+UAy#84NcVbTp2eh)}wrqJr2NKsSeleB%h~MLiN)8ENe%swvu39%f zP?-EZSuQ-Rdd|O`D$gUnueGoq-25DW-=v=Qi0_Nb_sr-!7RG@YKUx=D z_n?E|$e%=JFoj=^NsT|*#)07reRT_5=`eC?t6z;j2fTt~!j`k?FnOWbd1D_AZ2ORD z_j)<@|6=w?`FaXZd$i!jRxb|xEpix6AbGA2#Nv z{&scj`XoANDmIPVxN^Y%&F$_>BYH6Io);qG#sR5h|A>c!dc1OlrtK4YZF-Opo9^U^ z?V-tBb6(S+2b~L7%{9UL#Q10VW-No%dI-U#$n%J^MWpEIB~_o-8jrvtj?Gi+XVG-fD$7Qx4c1)f#4<(}RmYy)+CA zF~8C0Kt;|;J=oPXwZ@ylfzajeO}8J>gGD_GI^T6UuqR{NqXUQZ;OCSZwmn)D7A_3h zu^jVjlkICPif-&u#{Ab)S63eL*Tek8FS!K|=_t6WITzcr^U$L$b2z|XQJ87)7xe%Zq}gOh zbKupDdv|B{>4HrD?u#X}IB>tJqeP=x7it0d`zakJC^qvl=Z?JiyjrV)AyP2MH zS_c@f#6SGT`*FY8l%@yhz*i!_`Hc&kJ-rv`!280pKbK>BHGjP@>yy=i!oh9ZX3gXP zW9a7lO*wPE|BN2#V#99X+u>jEcM8+__V4*DVf<}@Mr&QBZm z-Hj?2MjSn5opzJ0Hs(Fsu&@U4;wL)V4>Yw=2Q@Eb82fAM$+1I*g4!_YzLULg+wP}YkWb{F+VGlRv@ul+^X@uynd5j|l9~H`Bwh=gZhIT+ z%W$9~m3yrj)5qcRnnSQPdaXy{y zzZLc3uqN6!?@gR={>>9vkv%z36DsUVb0t+cutj;wLf2)Q(5cHF$;R^Pv#hJdvZ(*! zXIm?%i23Ma-f^XdHGr&7rKaA?vRwndcFb3tC(nT^HgsmfEe&3K#?}XQ{S4FK<)06} zy`!4pp#k@Z_8(XqA#_4T1OA@wT^5DU-?mwcTRWx>IYfUhc-fr)ty>)`V)-(qaXwGA za=aq>g2H?wZ-39OQis6F#g~$>zdsWCGD@^X_fO;a>EDs}@jayuEjCrn2XOu@*}yi4 z^Hb-|w^i}qrx&o*;ep_JWR;YM}G=@Uxl;)c2`BDinNK4FVHPPT%;;hG8#vzvGA0Aa6;( zN8~sgzNWP-EO1f-m7>R)@xM{;CiB#Ay}BCgwHJIabBql$qqx_)XQ*L*%Ow@Zf3iV{ z(4Qf(?I|Of8INha@@3ZF6BH6De0JhmJ?#VycFI^@>BM|vhxorTG@@wWPUJTuxuZ<4 z^=90Ds$Bb!K;f$oZ1{X9B2o1;>eu}Jx_MtG8{TBj=~j%RfyYH}W0@8(17Hs#Q3zfN)^yBKZcLp@>(`1W*(Ln zsitAR(@A#{>QEoZY(c~KVH)JAr`eooruyU5*<~$9-mt;2Y?pD`dNr78)??Ms&W6S6 zy-yFGRD=E9`)|$1_Fa}t319J04cr}67f50I=iK1W{54k{<~JIj@c)d@mvz%S&s7~< zY87EE{4&%#QYgRd@0IBich#9B+F*qzNOI?Q-6jU+z-so)j$|EzDnSl|KjD zUzfodiSp5c7PZ5rF@0?Cv0}I|4^#Mfm(k#iGg=@tm}dI|pI_fMcr-Q_^`}~#zx?Sz zeW*uhvImkDhD}7nIP&e5`sKAAiL0JS{!Q1YKCWzt3&SC(L*EsWsKl zUl-03`SDh+);c`%t}dtwOr~g{^)I;}ll|w!rWLpa z>j7)au~(Bv*}VODmgq=?9=>0x-hX!nr04%?g8=8>=dX%#U`k@QPWT@^-v0Aq zmSD+zK{`yC{$=$e++RX38FzY%(|PNMW>7-bMOiv;{Uq%ra=jc}mbNKQpUzv~nopk5 zYBxjuu`i2?t2NL*oG+z+*beL8wbkzq?(Zvp{*?B1rbDjmx8Oj1w3i3AofGk*!@@K< z6?Z1uZyM$8J?rV<`7n6Dh7kuAWh#tjZ=u86i_HRQ|JWl{cQe95&_4Vq+G=LSfw_c! z&8xZfLjg7%*pczNW7-iqEReXO@94mR%^j(grDy4IM!8Gp6bI|imY&#|OouU zaX+-HUw*cf4m(PgwG^(#^*^b5$w(O;Vp^`SqStbOHD{{IiYhvkHAFZ5LVJ`|WZv_j zmJaVfchRfRUM2m3H~#H%XSZ=6lF+xwy7u6LYY>GS23n@A3`2V)+jiARKOM|I+^{!| z;6T!krWss8ef%D;-y?4y?&nrZ8l}bb!RJta|GF#8 z)Q6-Sx!Zft{ua9VW)tpS5Hizka{Cbublhdzo#W_3)UJ1i)-fD-Oz6#h4a^HsLVu^j z#PP+W2z>~&lNw7#|KNV%+jE;Q>BEV&ey-cle<+s-P9J2ixQlXgIPg@+M|*QS>gjA)$KcQB zK!$|P4wHBK@Mpo3JA3bQz=+VtF%H-kpje9IN$BH(O`UZ-n-XLLdXG+}@j9=)w88%5=AAFaw;3e4VQ{9_XGF&Vcec z-Spp|F@NXpPj($q41mXb5*B~qfT`D~x~5YMxDt7|bm%MEi;k7QsxB}MdiaNt+siyp753@BRpW|rDd++Ujyl`cwUfaI-tvVy-k5EI-X{4ERH z*FE69Zye{x!)bB4cNx$pU6MIAf%fw^$=1!q3<$g0@9_@#hL9gqFEgGnKvZvzaJ2vz z4jnaS{Vr!fWOMHJ*;A13%h1hBt7AavPZe|L*<7gRNObL*&jgdpk5c33AU~pgAy!a> z3DXGvW7017D;2s-a4VQC;6ING>G`Ez1{O?MI>o+)5BZYrbH}s1mowqaho=w3Rk-jx zr{womA0}iId<)4Jy_~syM~)U39#zNBOF7HLeg1H%us#r)dKRvjRWI*v- zLB>P=OjC+4^Nylfm0NNlNy}o(L=O{QgpWj|E#^WCn=!eWj|Khb9Nvc7V!m#I4@~hr z&%Y7*tW}|EnHTk0KnpFtG~1I4@_u)Ju3LuuCc(FPUt!6gSw-=KcT(?)-?+$vPkCpC zH*e*_WP-mXG0E?eeB-viFMI zmDzGbATgh))9mRSL%4K9L33#e7wV?;UFF|^I^0olVy@S?FtPgn>NH=T`)+Z;n8+h=GE;g=OD@JE{`{Nw;^vcpb?JAxP)6v4|6e$n(2*v~^$8tu zl3!0Fbf8~>%V1|I7ifeIwxU8+!vOO2zI#7>&FC?N#OE6u>;G@DHt!}DO*rG#k<3)W6cRBXE$ulYZ-}olRNkvd! z?D0S6Lr-Ly#Yu&-p*b-3ucDp~Y_h(yryJ+mgYr|o_UjG*Cr)|?ulwh(baQa{1|N(Q zy}#X`>S+ib+pk+3Udx3d`pD3(wT7T`GxDzOIxcJ{%0mg>-DkzamWGvvFwJ&g&2~SG z;}ChL4-X!xDn{NusrCCJ4>rd6)+{bwguMPzBCodH&P18n+i{+GzssGr6!XXuafi)B zUTm|nx`B+HxGogCZ2xS6d2kI*cIxlKd3TK45U*_hMe~ndTn*z8LWO=KsRyh`7nhUEdTY-W$NY_2zMn z`?(;tBxIx><7#C6qP>!$Hkk&z_UR1PudqnKI2Q3dncJ5Aiadzz9$>=~) zjFX($pRq!M3)hA(KkJ@gfJ92CW&-YmXNi69dC8_FC-^X~(f`59@i7DR1VZ+28$+Iq z*oPAq9lXc=&H>M63u~j}3=lkgX4qta1AJ-co}}!jaK)#P!sajrv`oFdeo{B`I``v! zcWh>W^Y5tg<*(3=BJ7a#V^z(SO~|WuUv}GR&j2riH=l@lwR(mb1EgwNr{AvSfWb>< zYMKTE!o_=+o~=M0M0EH@fFuKYokk*dK0#j1OfZh|TOTSS+vRTNqFul~IM@4!KCBNY zuY7%w1I40cM^4#O_?eQ>2NMGdv!%8>b z?Ph^Tdyz*yw|uC140+?1s}*u~bD(`^<0`eUbTA%zZ+F_13cUdyp z-JSh2Yt}xd!xDm*75&?jkd;q|KLjsY>@Jr#c7u+5bZu|F9S5rBMiiZnp@Yf%w~7Ue zus<|XclZa;VZdU8W%@!6xbDc^aoUFt^Oiq*_!<3(q2|mSIpmT59?V=Rr;K)&7Aq=h z0Uh!Qp3up;Bf1)S;CUYx=6pw<>6yaoH#3k2t{1AP=|P@~@$*6$XWswDsnH)6+!o=0 zjJ^5z_i;VAW0vhZcM9H*p}B5nj~>W{KfL-Ed5zIEIUWT!_28Z3jJ}n~OE`;mlnrdv z1K;7iU9-_Iyv5oSc}`9b$_|W1okG7+wK4a4!8=_ZP8%@vufIWI|C6kwLw35n-@iTW zSgG8v12fib^}B?AYn{bsty?E_c;)0;euQIN+uy;4mc?@UWj3g*I%h{%Tn*|n*SEZH zi_n2)LPwc@%tt2lkS-`SWpANfWJ5~RyW`g#^uW1y#=xd%^ozSSuePF}82)=}K>8jw z^0lGMj@+jMxp$N<8lE-11mj4@^7kn1W&n(wjJ^~BqsZFZ0>gTQ(l;FYNpxwsmK%P z&bqfymtz3@IoE-KJjAxOV!NuBVt%Q>3qp>_gOFH9_vnkw$YTjkn5h;T8Sv%{xt_1M z>Axxkd9*mE9{aBf24G?PYDyLIyyWw0U7XhDH4Ed6$%W45_gPS)Ir-rxDq8%7OVtMn1>{g5`UM>&xiE+m`jL2Mpx+x6a`}u!iksbWE{V-0$AAfEjc^U)A z^?GY1 zz1gMP7}p~FswyH*N3QQGd#{B&){z0zqbzAccZ#pxf zIfxPT6aB6|w!beGZel{ZSN+gkVYFAa>OMbskO^^FLeH0pb3uip_rRf$3G^+$PHd7w zd*XKam&tfeL6O*>lB(iG$0uQaqqaNy24->L?cQd?E;=$HvKYs|?5s}UTi#atD$19j{tKjK_w<+l768mq^(b)p#@yI(6?I*{F z+~0p`-;WuI=D-1~PKy^ySU{Ew`Ba`N$8#%&D}C(Z&LD5y$Cn|Uj_s{fF;_T8%}28S z-Th6CQg!Gz`JC#py@YYnWfL2OezACQ$wG&WZ%QHtAiQ*HrQ2nkkK@eKM`sy8mg3Ti z#s?hU`%A`|$@iCxWBdL(?&ug|0ExtYo*!}5YvV-&D4cO=p3-Er*B)Nj7?^Ir8^6zr zRlXtjF`t`>AQp^G@zLE6%!{YBc( zXi|&v@lDG9#}40Y-8x;~mJQVm^+3MMN}!y5ut;AJ-zC2S2kQlD|6_-<|1rYxuQ#Gu z;M5;Bh}>et=Wd}vmG8c^V%%qn)NY1nZ>Pbw*Jg2xkRKoEK7IA>S{lr<`x#w@>&~y{ zvC(2%8hB}J3uyhzh711FZdS<9U`m|Mnl*eJs6D?wsP2<052t9<<~Q9^-WRwmslm!!}jk{VQVbs#fW#!a~Wpl2h@19-B3E%A~2^cNg6lDf*@YjI~Z56LFs` zv(}EeU7><{f1j6s#%~DxGrU7>0{6{W^-y=6R%H;<%W(0qZJM`qnr;8}Z}HWq)1=DMQsV)3epc z*T;Q0u>6^aGVb^941eRk`yidYKYyt*cyoQ(Un+5*8=1e^pHCT1&p-ZJ1M%+T1-IuF zDnUfS#EmB<)Lc02Q`w+f%!XGjae1?Hm4FsBcGl@G8=~xI&A0DXf`_{`Ia_bzzPo?s z-JmJTkUc9&NhFQB-=i`ghhW?%uX5I;Hu)<<%590EtGKU<%oeWr8jaVlX_K8EPd!f% zL)Y8?3>zHk=Uj9YRspW;t0@U5F(1XWysp)XDscAPlR~SbY>EYEE;cUp7^x8E!Sp`x~SGVQvq{h2L_})p6AU6DY6`z(3b@kN~l8KtC?eJ zD=7TcnJ=@J&4z%N%@NP%tHNLYs%BFsHr&{$__sns6+F&}f5>xS!>T>Yn_se3q4V?h zu+5mi!t^!0yMBWzh~>rdr`oYWxx4UrW4J1i@8*yGEv`-XRKa9-!I5r!SJNa|s~TQW z*YB6ldtEt`#;b2kW{Gu)1q}{+(ESJPF~35Z@$#%)7#||;f81tp;#v$1>P*s|{$l$U zf2>iBy+ebgUDo%Py0C#0ROWKD2ID=%^ZgLE3*YmB1|gnmOZR)Sp>eU5>n33}UjICK zI&NuRYmt|uA z#uc*Ro%q)>uUTq9&eyaYr<~v+8Z5S)IV$^{4L$ddtU6UffJ67h2&Xi#a|95@FC36}dpMb(Y>+A)i!_UMcxhIxSr3RxFL)AF3;Alr0srU z2)mjF1C97xV50D2wbchhn0~I?kUfRM6W!9&dPS(ZV^f411SBY2Ut4f2bq<9m>=R_( zs!(_^;pIS(h6~6(-(mIcGv>pr+?zH_AMPMA02@92>}RRefD{B5_|au+z4o$9=|3(w82%ifaZ;sVD^SL{7>j|I0E zYAi3}x}`YnxN@a~^KvQg&i zItJMA$AdGz%2}VB`iRaO4-%gZo-y!s5k4RB?hH)k{PD5=zw!88IkiSh7d&_K@3}e>Kb+<> z_(w?}NbGLaZN*+q;n0&GmpzT4FxfxuOV$}UShxU-h$E5nU16n>k~I1=oL@TGYwHa>*XdDu=cFFyiFkIhef2X2yfiV3 zOJuk}bx5aC(-%CaNxX0Go&M~eI*-XKCo%bZ5|j0F-S&i~S~B5Uk(=lS8qS~YJ#TdF zm_WYYe?E9G;6s0e#L1}_A~~r{u+^3t?^AODrl*QTQ#ljJ^&#@aO5Ms43fm7Ixc^8D z&xI4~#}2dp;>%_fCf^sbJpa$qPZh^ly!vl`7%5$Ig9V#Urn{8NxxitAa`WM*)bHOl z-5fPWe>884lHp557YNv!yz03F=Bxd?VUeu@=FK3^^}DyfRdZ9O)&mlUO-r6El~4Wt z;6tazZ7&UY_w(B-)hG9p!oqlfrA*wAR~{CU7Q9*25a!>e2jxD!rP6dIqB1A&&tF>#EE%=tW^Rp9q; zUXDxr|Lh`sXyF|xkBjHRJLAi*_p(gjb5_4cpc3-nN0SP6S>SiQ2fhWbMBX*#VB*X~ zPZPKwc=m@3o);%^d32Y~ZsfI3X%>&oUSR@-CtHL?k70c6(;=a0jwV3wW9@dv`rV1| z@|LIPCFGG)UyXRsje#DKv&92>>VpB+Z+ab! z;NJbZ0Xa7=Y%E#J`g_C>?oXc4tBmKt3kaTn->bEH5y(Kz-N{j8}3?>$xevicbM(X!EBD-J&}fcS79I}7Atjl|lMvM(6GtUGJ< z+B=blCFaqwypYJ)8V(c@d3{Hl7Th?3equP0*LaPzW0ybrvAVGl8`El8Q02aA?sD`) zH!d<$`i8v7ej@%|KzwiU`TkI#+A$8~nJHg9w3G$88YkLspCMD#@`?hD|+p9aqxX6EcUd#qJEFU724hg7U-v+Ut}$^qmBtAzDayPVY#}j zBmn*X@=D)G8}$2`edEc=i06NpIpfZX|9?DBXv->oc_`L#AUK*m|cmy%|`=jOyuJ1u!<5`(_hJq^#e0n}Cm_8l9?@;ZP z%H^;?#grM$n!$ymD`9VkPN~w!gLKAsSt+x?Qu0Xo zX5{H-8@79#ox*~rzF$_$&*s9yg(~+velQ{I*p4uXnOq1Xz7L^i{yr~&^`BUu@?}va z6BZEtGxtklS;ToJIEu&gw_^PIy~v>8?tM)7KC|+rFY@xrqOj@>hV0p z!oyDL)0m)KoN9fy49^#wDvi+`#`t<#%-0VWk(YRHTehf)0Tsmg1XbNg%R?6#kT_O+ zSp<0{5|iaV#P3ou^2eW0GExCclnb!;5ce~ zJ$NqzW*Ik)dtSiv?9yIQ8KM6hZ!4cOtp$0m_?$C)e&Klo+NWgoO5{x*-4wb`9!a#iIF)BI3>E-p?Cua*it5Xjeqr_zvnZ@%#Ffz#Cg72BCmJn zXe|GL81nc;UhdLP%j@%y*Nz-LIlN%D0l0q-*kFPFaw?Hm-0omE^A++5g;(ngmY5m9 zAaP#lt^HHi_sDzB=+E9_*~*4%MBeT9f_C*Y^4PE-eyK%`j{)ow4?Clu$p#4`?|GWy zYsu~Ce=gD8H8f9Kp(#vOxo0;_A#9e=ZD{WJ+)ASA6;VIr^49q?bZR)Qcwfg zotvHGf+_4e$epxsD}^_vDClJRA&(xf8Bu1c1~(lVMi2W^IM}7nO?nghvqV0@zZuS7 zs@Jn2T|{=YQ5DaJ%BwDTzYhKTpx$pS@@i0V+s9$`T0C#(#pmHqLW*vtOW~a=X1X|GlWKV08M*sZe6M+*`YiUsOyi-TdnGNk$ zTNT90@OY6nXzO+r+_&21(&h3N;b;Owv?YCP{;UJ1P1Dh-Flb zyPXGA;nOPfL}TP5`2E&2aWAXF&fZOSipW>kD>zDUwyT1jg3Xinh#A)o&T;Wn<=sE5 z18!GSTj~e%=06E?s z8{W+^>QsRx3y!^N+QA0VRwFHg*D7#MPVm7y%>GR7L)2VCL8Ys$J-q)vBB-nwuYo<%3yqJa>>feIA29K?mdvA3~%R^=60vxcorW@42@NWTEEe# zoydQL*zEb}xIr1#YkqP(i|g4T;f0Tl9h4zUcpW3)U3#g@HRS{@>W~(#$CBRaE(Z@u#k- zd)wrxauT-%^KTc#X^s3mT2qr{-hy8so*RVwq z&RE#iHsXFj;y_|O&qxk>o9dznEiBWs`KR$b_0jAryNncJVaU?zi#Q*yDxQ5w6Hkn)3h>fCcl%+)f=9ahzf{P>U#Z5iQrw^BoVd>j zJ1Y;f7F{*kxDDq|>mb{1syysHl(W?i*E{)=L(H^Ca==VAK4I=dVe)+=%OBXb$&TXt zNaEMT`tjSsL}_c99Gt5DdEycBhor9|^r&t~+=>lkdCh5M6Ms`S)NVYp{Ijz>7}Vnmio+R1KA%& zK3VHM=CZ;3+HdW7AqsH%=TK0?95$2|*_}L@s{qOAMVBn4*kF5ky49Zn1^8pamsueB z4?kR!;4H5Q>vxNPNSKCk|s1wH>8Pm5Smq5U0svNPE)-YTiUqm&mP0y%GOb4x-Ym&)WF@2uZw1zy{rKntTliTe%U4p^?q zrl24gwura@PBal7A`YAEgA0NnApt=FMFav9mmpzL6T-eFAclzRt8=WT&v`%Zsp;yf zuj+L7+*{vwp^1WW>E%}rU)F|uqSl|c-a+HR`4|SW-4Y5l6to6@RkeDV4wyC-uoJ3K zyZdGDhA(u$A>yFtbUE_hmK-kBXwd#{itD%{K4&6l~UC=qui10AgR4 z@B1r}g5N^T{VVegfNl10Ob=mSN83HEe;7dKvFDny@f568tTSHj!2+k;fbC+)Pn5*@ zSK7Q7zmoCxGE`zA-Rbblj{LuP%=6a7eu;J)i@mf0{3Nj|+_uu%)hP^}Ay`#M;}b<$82}pbfPGDh4Te!8(IFZoG6gS`H7Z_7hYd; zL_81nrw#q1`oxF>;+=6mrKXtqr5;u0U#{0{>k~#mV-`MdKR4a4 zl7VxA3I!X-T??6-idq;c$lJrrnv z2&%4UZ-ti6>(adtPkhtxcs4%_o%`C~Cfbg8W}3&PG0pqZxZdg;4f!%-c!|fOMb|gL z@kz(^6D&loAB7&s&y~~vBkS-s=;}^tY;i&3mF1fzinbx&_D?)`@5q%6y|Hb z=ysYXPry9-Yr*d!p^Y4P?t1p|dpinfUhF*PSs&o~BgAm$@6jl}!qj(UefKz z(=(A=c#C;fP&4dO`JM}bSO*xwJXh11@USgBMi)?4syGhF`c)gn3K4Ud&C*11`DsN%x4hjErX~GrC36%=W99@(h;7x(I!JG}cY%{vQW! zJ6`#L1XatsVruPN;PdOVi{6rp<1@WtRg?ajgy=Fqt?Py894OXs==uGSrJ^!4O#&Sc z89g7}y;CGSBrA`UP+T}rSH$a{AmJ9Sw{p*M#Aeqx37=t|L#p2dvv?3xb+DUlXB6F&Q&w&j86Q!EXBt*51mDt6h zb44Y|gOYa`95RxlI`I>Ok7fkfxm7W^OS{zVmr4@!TE;8pPjY}=JMC{*!Q3x%;q4{; zYs`4BmOf||2$}h;nd({+m&eRkGdEvJ1*ZKFMnA2P^ zat?7PFOrbo9k`?^l?!pKK@*=$a#1Jy$@~0Eu>!PSm=_i|ThT3B%tC zQZwqrqHed)tj!jg5{o+Bj6iLj4IbK)if{0dA3sRb0Q|Lne8yBq;2YU-QX(D#7O>dBVm0Uj79_sQ?N zfpoqs8JpY|2Fu7!y2}U|oEISGYZb%blnHD3^CmoK-`V*rq?!UcUhDO3nqtxS2_4^k zD;kRVb?AMBpFdVtb(|~F_l_EVevB#%Tk=|vu85y!@)z4gVUHf<~;-g&MtOg}Vkx#UN zzDIh(ZV=xZ8o_!`Kv0yneP%vt7u|Q;^J#PG)=~gC9LQW!tOBV7mW>h+>{#j=BGCoUa;{DNt-~A)q`> z&-Kg<`aiMvh+mA5!Nl#VcCADPE3e3k9X><=-5*eKZEui@(iL6mlnI3z`yr|rhX}iuNF1y esJoy#!9{B7;pdt09edQ#y%y!q(DV6!{pNooRhQWS literal 0 HcmV?d00001 diff --git a/src/osdagbridge/core/data/project_location/shapefiles/wind_zones.shx b/src/osdagbridge/core/data/project_location/shapefiles/wind_zones.shx new file mode 100644 index 0000000000000000000000000000000000000000..27df843130f294b10474a779ae05613ac91ffcd8 GIT binary patch literal 204 zcmZQzQ0HR64$@vQGcd3MOBegn)dBXABIS8yFarW&y<~Ffgd=0d1VYz@T%Afq}b$ ufx*HLsJ4QE!4Amh1Iqix0p$-cFa#?B%>wERy~e=6tiZq!@r!|hmjM7oLLD*y literal 0 HcmV?d00001 diff --git a/src/osdagbridge/core/data/project_location/wind.png b/src/osdagbridge/core/data/project_location/wind.png new file mode 100644 index 0000000000000000000000000000000000000000..4fee21e5a476b2fae9ae22ff6024b91480993660 GIT binary patch literal 682090 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≀ActK*)Yp1jG5MxS)1+DLxvve1pY3MFyC$cu}> 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

n9{T8JP~jSl1jSUneE}XR7Ar9a|McLSNSpg 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μ(vcjD}}aSTsG}2wIp}BNa*QK(2gM>Ce~E;1R6yA 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
+ + + + +""" + +class BridgeBackend(QObject): + """The QWebChannel translator between Python and JavaScript.""" + + # Signal: Python uses this to push JSON data to JavaScript + newPlotData = Signal(str) + + def __init__(self, main_app): + super().__init__() + self.main_app = main_app + + @Slot() + def pageReady(self): + """JavaScript calls this when the page is fully loaded.""" + self.main_app.update_plot() + + @Slot() + def requestSummaryDialog(self): + """JavaScript calls this when the 'SUMMARY' button is clicked.""" + self.main_app.show_summary_dialog() + + +class SummaryDialog(QDialog): + """A floating tool palette that hovers over the main UI without disturbing it.""" + def __init__(self, parent=None): + super().__init__(parent) + self.setWindowTitle("Extreme Values") + + self.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint) + self.resize(350, 250) + + layout = QVBoxLayout(self) + layout.setContentsMargins(5, 5, 5, 5) + + self.table = QTableWidget() + self.table.setColumnCount(3) + self.table.setHorizontalHeaderLabels(["Girder", "Max (N mm)", "Min (N mm)"]) + self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + layout.addWidget(self.table) + + def update_data(self, stats): + self.table.setRowCount(len(stats)) + for row, (girder, vals) in enumerate(stats.items()): + item_girder = QTableWidgetItem(girder) + item_max = QTableWidgetItem(f"{vals['max']:.2f}") + item_min = QTableWidgetItem(f"{vals['min']:.2f}") + + item_max.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) + item_min.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) + + self.table.setItem(row, 0, item_girder) + self.table.setItem(row, 1, item_max) + self.table.setItem(row, 2, item_min) + + +class PlotWidget(QWidget): + def __init__(self): + super().__init__() + self.setWindowTitle("Plate Girder Results") + + # Populated by setup() after bridge analysis completes + self._ds_all = None + self._nodes = {} + self._members = {} + + layout = QVBoxLayout(self) + top = QHBoxLayout() + + # ---------- LOADCASE ---------- + top.addWidget(QLabel("Load case:")) + self.combo = QComboBox() + self.combo.currentTextChanged.connect(self.update_plot) + top.addWidget(self.combo) + + # ---------- FORCE ---------- + top.addWidget(QLabel("Force:")) + self.force_combo = QComboBox() + self.force_combo.addItems(list(FORCE_MAP.keys())) + self.force_combo.setCurrentText("Vy") + self.force_combo.currentTextChanged.connect(self.update_plot) + top.addWidget(self.force_combo) + + # ---------- CONTOUR CHECKBOX ---------- + self.contour = QCheckBox("Contour (Moments only)") + self.contour.stateChanged.connect(self.update_plot) + top.addWidget(self.contour) + + top.addStretch() + layout.addLayout(top) + + # ---------- MAIN BROWSER AREA ---------- + self.web = QWebEngineView() + + # Stops Qt from painting a blank background behind the web viewer + self.web.setAttribute(Qt.WA_OpaquePaintEvent) + self.web.setAttribute(Qt.WA_NoSystemBackground) + self.web.page().setBackgroundColor(Qt.white) + + settings = self.web.settings() + settings.setAttribute(QWebEngineSettings.WebAttribute.LocalContentCanAccessRemoteUrls, True) + layout.addWidget(self.web) + + # ---------- INITIALIZATION & QWEBCHANNEL ---------- + self.stats_dict = {} + self.summary_dialog = SummaryDialog(self) + + self.channel = QWebChannel() + self.backend = BridgeBackend(self) + + self.channel.registerObject("backend", self.backend) + self.web.page().setWebChannel(self.channel) + + # Inject HTML directly into memory + self.web.setHtml(HTML_TEMPLATE, QUrl("qrc:/")) + + def setup(self, ds_all, loadcases, nodes, members): + """Populate the widget with bridge analysis results. Call after design() completes.""" + self._ds_all = ds_all + self._nodes = nodes + self._members = members + + self.combo.blockSignals(True) + self.combo.clear() + self.combo.addItems(loadcases) + self.combo.blockSignals(False) + + def show_summary_dialog(self): + """Pops up the dialog perfectly in the top-left corner of the web view.""" + if not self.stats_dict: + return + + self.summary_dialog.update_data(self.stats_dict) + self.summary_dialog.show() + self.summary_dialog.raise_() + self.summary_dialog.activateWindow() + + # Calculate exactly where the top-left of the 3D plot is on the screen + top_left_corner = self.web.mapToGlobal(QPoint(15, 15)) + self.summary_dialog.move(top_left_corner) + + def update_plot(self): + if self._ds_all is None: + return + + loadcase = self.combo.currentText() + force_key = self.force_combo.currentText() + ds = self._ds_all.sel(Loadcase=loadcase) + + is_force = force_key.startswith("F") + is_moment = force_key.startswith("M") + + if is_force: + self.contour.blockSignals(True) + self.contour.setChecked(False) + self.contour.setEnabled(False) + self.contour.blockSignals(False) + + self.stats_dict = {} + plot_json = build_figure_sfd(ds, force_key, self._nodes, self._members) + + elif is_moment: + self.contour.setEnabled(True) + + if self.contour.isChecked(): + plot_json = build_figure_bmd_contour(ds, force_key, self._nodes, self._members) + self.stats_dict = {} + else: + plot_json, self.stats_dict = build_figure_bmd(ds, force_key, self._nodes, self._members) + + if self.summary_dialog.isVisible(): + self.summary_dialog.update_data(self.stats_dict) + + else: + raise ValueError(f"Unsupported force: {force_key}") + + # -------- INJECT PLOT VIA QWEBCHANNEL -------- + # Emits the raw JSON string perfectly without double-encoding it + self.backend.newPlotData.emit(plot_json) + + +# ======================= MAIN +if __name__ == "__main__": + app = QApplication(sys.argv) + w = PlotWidget() + w.resize(1200, 800) + w.show() + sys.exit(app.exec()) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 72596e88c..460953fbb 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -232,14 +232,15 @@ def mousePressEvent(self, event): ) self.cad_log_splitter.addWidget(self.cad_comp_widget) - from osdagbridge.desktop.ui.cad_3d import CAD3DWindow + # from osdagbridge.desktop.ui.cad_3d import CAD3DWindow # 3D CAD placeholder (mutually exclusive with dual view + plots) self.cad_3d_widget = CentralPlaceholderWidget("3D CAD Here") self.cad_3d_widget.setVisible(False) self.cad_log_splitter.addWidget(self.cad_3d_widget) # Plots placeholder (mutually exclusive with dual view + 3d cad) - self.plots_widget = CentralPlaceholderWidget("Analysis Plots Here") + from osdagbridge.desktop.ui.plots_UI import PlotWidget + self.plots_widget = PlotWidget() self.plots_widget.setVisible(False) self.cad_log_splitter.addWidget(self.plots_widget) @@ -306,6 +307,16 @@ def common_design_func(self, trigger: str): self.backend.set_input(self.input_dict) print(f"@@input_dictionary: {self.input_dict}") self.backend.design() + + # Lock the input dock after design is triggered + if self.input_dock and not self.input_dock.is_locked: + self.input_dock.toggle_lock() + + # Wire up the plots widget with results from the completed analysis + ds_all = self.backend.get_results_dataset() + loadcases = self.backend.get_available_loadcases() + nodes, members = self.backend.get_nodes_members() + self.plots_widget.setup(ds_all, loadcases, nodes, members) elif trigger == "Save": # Collect all the values from input Dock and save to osi/csv pass From f7171ceff948df58032f19f6ea6d223488154229 Mon Sep 17 00:00:00 2001 From: Manav Sharma Date: Wed, 1 Apr 2026 21:01:11 +0530 Subject: [PATCH 135/225] added load values , changed Kn to T , added query logic , added axle and wheels data to moving load cases , added reactions --- .../plate_girder/analysis_results.py | 754 +++++++++++++++--- 1 file changed, 648 insertions(+), 106 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index 6ca2bdad6..475c5d93b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -1,15 +1,143 @@ -# ============================================================ -# Plate Girder Analysis Results -# ============================================================ -# 1. Reads OpenSees result dataset (forces, moments) -# 2. Builds logical girders using BFS -# 3. Allows girder-wise interactive result viewing -# ============================================================ +""" +PlateGirderAnalysisResults +--------------------------- +Core processing engine for bridge analysis results and structural +load auditing within the OsdagBridge framework. + +ARCHITECTURE & DATA FLOW +------------------------- +1. Result Capture : Reads raw force/moment/reaction datasets from + OpenSeespy via osmgrillage, keyed by load-case + name and element ID. +2. Girder BFS : Uses Breadth-First Search on the grillage + adjacency graph to reconstruct continuous + longitudinal girders (EB1, G1 … Gn, EB2) from + individual frame elements. +3. Load Extraction : Reads applied loads directly from ospgrillage + Load objects (Line / Patch / Point) and compares + with analysis results for audit compliance. +4. IRC:6 Vehicles : Calls IRC6_2017.cl_204_1_Class70R_vehicle_wheel() + and IRC6_2017.cl_204_1_ClassA_vehicle() to obtain + local axle x-positions and wheel z-offsets, then + computes global wheel coordinates as: + global_x = vehicle.x + local_axle_x + global_z = vehicle.z + local_wheel_z + Each axle load is split equally into 2 wheel loads (L/R). + +CLASS STRUCTURE +--------------- +PlateGirderAnalysisResults(dataset, bridge, edge_dist) + + ── Initialisation ── + __init__ Store dataset, bridge ref, edge_dist + + ── Grillage Connectivity ── + build_grillage_connectivity Build node/element/adjacency maps + build_girders BFS girder reconstruction + filter_girders Remove edge beams when edge_dist > 0 + + ── Result Access ── + get_available_loadcases List all load-case names in dataset + classify_loadcases Group into dead / vehicle_static / vehicle_moving + get_beam_element_results Raw force/moment for given elements + LC + print_load_availability Print classified LC summary + + ── Public Print Methods (Interactive Menu) ── + print_moving_load_trace Option 3 – moving load trace per girder + print_envelopes Option 4 – max/min envelopes across LCs + print_critical_max_state Option 5 – critical position for a component + print_girder_reactions Option 6 – Ra/Rb per girder per LC + print_load_extraction Option 7 – dead + moving load audit report + + ── Private DataFrame Builders ── + _get_girder_sw_df Girder self-weight tabulation + _get_dead_lc_df Dead load case (Line/Patch/Point) + _get_vehicle_df IRC:6 vehicle wheel layout with global coords + _get_moving_trace_df Moving trace data per girder / component + _get_envelopes_df Envelope summary (max/min Vy, Mz) per LC + _get_critical_state_df Critical governing position + _get_reactions_df Support reactions (Ra, Rb) per girder + + ── Private Print Wrappers ── + _print_girder_sw_extraction Print girder self-weight table + _print_single_dead_lc_extraction Print one dead load case + _print_single_vehicle_extraction Print one vehicle layout + + ── Helpers ── + _get_active_pts Extract non-None points from a load object + _bound(da, db) Governing max/min across i-node and j-node DataArrays + + ── Programmatic API ── + query(category, **kwargs) Unified read-only interface (see below) + verify_sections Print section property verification log + + ── Interactive Entry Point ── + run_interactive_viewer 7-option terminal menu + +INTERACTIVE MENU (run_interactive_viewer) +------------------------------------------ + 1. Show girder paths (BFS) + 2. Show analysis result (forces/moments per girder & load case) + 3. Show moving load trace (force vs vehicle position) + 4. Show max/min envelopes (all moving load cases) + 5. Show critical maximum state (governing LC + element) + 6. Show girder reactions (Ra, Rb) + 7. Load extraction (dead loads + IRC:6 vehicle wheel layout) + 0. Exit (triggers section verification log) + +PROGRAMMATIC QUERY API – results.query(category, **kwargs) +-------------------------------------------------------------- +category='girder_paths' + Returns girder name → {start, end, path, elements, length} + kwargs: none + +category='forces' + Returns element-wise force/moment for one load case + one girder. + kwargs: name (load-case str), girder ('G1' etc.), component ('Vy_i') + +category='moving_trace' + Returns {x_pos, load_case, component (kN/kNm)} across all + moving load cases for a girder. + kwargs: name (LC filter), girder, component + +category='envelopes' + Returns {load_case, girder, Max Vy, Min Vy, Max Mz, Min Mz} + for all (or filtered) moving LCs. + kwargs: name (LC filter, optional), girder (optional) + +category='critical_state' + Returns governing {category, component, max_value, load_case, girder}. + kwargs: name (vehicle category e.g. 'ClassA'), component ('Mz_i') + +category='reactions' + Returns {girder, Ra (kN), Rb (kN), span, case} per girder. + kwargs: name (load-case str) + +category='moving' + Returns IRC:6 wheel layout table for one static vehicle load case. + kwargs: name (load-case name e.g. 'Case1 ClassA L1') + +EXAMPLE USAGE +------------- + results = PlateGirderAnalysisResults(dataset=ds, bridge=bridge) + + # Programmatic (returns DataFrame): + df, _ = results.query(category='moving', name='Case1 ClassA L1') + df, _ = results.query(category='reactions', name='Case1 ClassA L1') + df, _ = results.query(category='forces', + name='Case1 ClassA L1', girder='G3', + component='Mz_i') + + # Interactive terminal: + results.run_interactive_viewer() +""" import math from collections import defaultdict, deque import openseespy.opensees as ops import pandas as pd +from osdagbridge.core.utils.common import kN, m, m2 +from osdagbridge.core.utils.codes.irc6_2017 import IRC6_2017 class PlateGirderAnalysisResults: @@ -284,6 +412,10 @@ def build_girders(self, verbose=True): name = "EB1" elif i == num_pairs: name = "EB2" + else: + name = f"G{i - 1}" + else: + name = f"G{i}" path = self.bfs_shortest_path(adj, s, e) path_elements, element_map = self.get_elements_along_path(path, elements) @@ -318,7 +450,16 @@ def build_girders(self, verbose=True): return girder_map, elements def filter_girders(self, girder_map): - return girder_map + if self.edge_dist > 0: + # If there's an overhang, show everything (EB1, G1...Gn, EB2) + return girder_map + else: + # If no overhang (dist=0), hide the physical edge girders (G1 and Gn) + keys = list(girder_map.keys()) + if len(keys) <= 2: + return girder_map + filtered_keys = keys[1:-1] + return {k: girder_map[k] for k in filtered_keys} # ======================================================== # PRINT MOVING LOAD TRACE @@ -384,25 +525,23 @@ def to_list(val): # 5. Get results for this girder and loadcase try: - subset = self.ds.sel(Loadcase=lc, Element=elements).copy() - - + subset = self.ds.sel(Loadcase=lc, Element=elements) # Extract values and create DataFrame df = pd.DataFrame({ "Element": elements, - "Vx_i (kN)": subset.sel(Component="Vx_i")["forces"].values / 1000, - "Vx_j (kN)": subset.sel(Component="Vx_j")["forces"].values / 1000, - "Vy_i (kN)": subset.sel(Component="Vy_i")["forces"].values / 1000, - "Vy_j (kN)": subset.sel(Component="Vy_j")["forces"].values / 1000, - "Vz_i (kN)": subset.sel(Component="Vz_i")["forces"].values / 1000, - "Vz_j (kN)": subset.sel(Component="Vz_j")["forces"].values / 1000, - "Mx_i (kNm)": subset.sel(Component="Mx_i")["forces"].values / 1000, - "Mx_j (kNm)": subset.sel(Component="Mx_j")["forces"].values / 1000, - "My_i (kNm)": subset.sel(Component="My_i")["forces"].values / 1000, - "My_j (kNm)": subset.sel(Component="My_j")["forces"].values / 1000, - "Mz_i (kNm)": subset.sel(Component="Mz_i")["forces"].values / 1000, - "Mz_j (kNm)": subset.sel(Component="Mz_j")["forces"].values / 1000, + "Vx_i": subset.sel(Component="Vx_i")["forces"].values, + "Vx_j": subset.sel(Component="Vx_j")["forces"].values, + "Vy_i": subset.sel(Component="Vy_i")["forces"].values, + "Vy_j": subset.sel(Component="Vy_j")["forces"].values, + "Vz_i": subset.sel(Component="Vz_i")["forces"].values, + "Vz_j": subset.sel(Component="Vz_j")["forces"].values, + "Mx_i": subset.sel(Component="Mx_i")["forces"].values, + "Mx_j": subset.sel(Component="Mx_j")["forces"].values, + "My_i": subset.sel(Component="My_i")["forces"].values, + "My_j": subset.sel(Component="My_j")["forces"].values, + "Mz_i": subset.sel(Component="Mz_i")["forces"].values, + "Mz_j": subset.sel(Component="Mz_j")["forces"].values, }) print(df.to_string(index=False)) @@ -453,16 +592,11 @@ def to_list(val): if g_filter and girder_name not in g_filter: continue - if self.edge_dist > 0 and girder_name in ["EB1", "EB2"]: - continue # dont calculate it for calculating other values - elements = girder_data["elements"] try: # Select ONLY this loadcase and elements for this girder - subset = self.ds.sel(Loadcase=lc, Element=elements).copy() - - + subset = self.ds.sel(Loadcase=lc, Element=elements) # --- Vy Envelope --- vy_i = subset.sel(Component="Vy_i")["forces"] @@ -491,80 +625,80 @@ def to_list(val): # Compute max/min for Vy mxi, mxj = float(vy_i.max()), float(vy_j.max()) if mxi >= mxj: - v_max, v_max_e = mxi / 1000, int(vy_i.idxmax()) + v_max, v_max_e = mxi, int(vy_i.idxmax()) else: - v_max, v_max_e = mxj / 1000, int(vy_j.idxmax()) + v_max, v_max_e = mxj, int(vy_j.idxmax()) mni, mnj = float(vy_i.min()), float(vy_j.min()) if mni <= mnj: - v_min, v_min_e = mni / 1000, int(vy_i.idxmin()) + v_min, v_min_e = mni, int(vy_i.idxmin()) else: - v_min, v_min_e = mnj / 1000, int(vy_j.idxmin()) + v_min, v_min_e = mnj, int(vy_j.idxmin()) # Compute max/min for Vx mx_i_val, mx_j_val = float(vx_i.max()), float(vx_j.max()) if mx_i_val >= mx_j_val: - vx_max, vx_max_e = mx_i_val / 1000, int(vx_i.idxmax()) + vx_max, vx_max_e = mx_i_val, int(vx_i.idxmax()) else: - vx_max, vx_max_e = mx_j_val / 1000, int(vx_j.idxmax()) + vx_max, vx_max_e = mx_j_val, int(vx_j.idxmax()) mn_i_val, mn_j_val = float(vx_i.min()), float(vx_j.min()) if mn_i_val <= mn_j_val: - vx_min, vx_min_e = mn_i_val / 1000, int(vx_i.idxmin()) + vx_min, vx_min_e = mn_i_val, int(vx_i.idxmin()) else: - vx_min, vx_min_e = mn_j_val / 1000, int(vx_j.idxmin()) + vx_min, vx_min_e = mn_j_val, int(vx_j.idxmin()) # Compute max/min for Vz mz_i_val, mz_j_val = float(vz_i.max()), float(vz_j.max()) if mz_i_val >= mz_j_val: - vz_max, vz_max_e = mz_i_val / 1000, int(vz_i.idxmax()) + vz_max, vz_max_e = mz_i_val, int(vz_i.idxmax()) else: - vz_max, vz_max_e = mz_j_val / 1000, int(vz_j.idxmax()) + vz_max, vz_max_e = mz_j_val, int(vz_j.idxmax()) mnz_i_val, mnz_j_val = float(vz_i.min()), float(vz_j.min()) if mnz_i_val <= mnz_j_val: - vz_min, vz_min_e = mnz_i_val / 1000, int(vz_i.idxmin()) + vz_min, vz_min_e = mnz_i_val, int(vz_i.idxmin()) else: - vz_min, vz_min_e = mnz_j_val / 1000, int(vz_j.idxmin()) + vz_min, vz_min_e = mnz_j_val, int(vz_j.idxmin()) # Compute max/min for Mx mx_i_val, mx_j_val = float(mx_i.max()), float(mx_j.max()) if mx_i_val >= mx_j_val: - mx_max, mx_max_e = mx_i_val / 1000, int(mx_i.idxmax()) + mx_max, mx_max_e = mx_i_val, int(mx_i.idxmax()) else: - mx_max, mx_max_e = mx_j_val / 1000, int(mx_j.idxmax()) + mx_max, mx_max_e = mx_j_val, int(mx_j.idxmax()) mnx_i_val, mnx_j_val = float(mx_i.min()), float(mx_j.min()) if mnx_i_val <= mnx_j_val: - mx_min, mx_min_e = mnx_i_val / 1000, int(mx_i.idxmin()) + mx_min, mx_min_e = mnx_i_val, int(mx_i.idxmin()) else: - mx_min, mx_min_e = mnx_j_val / 1000, int(mx_j.idxmin()) + mx_min, mx_min_e = mnx_j_val, int(mx_j.idxmin()) # Compute max/min for My my_i_val, my_j_val = float(my_i.max()), float(my_j.max()) if my_i_val >= my_j_val: - my_max, my_max_e = my_i_val / 1000, int(my_i.idxmax()) + my_max, my_max_e = my_i_val, int(my_i.idxmax()) else: - my_max, my_max_e = my_j_val / 1000, int(my_j.idxmax()) + my_max, my_max_e = my_j_val, int(my_j.idxmax()) mny_i_val, mny_j_val = float(my_i.min()), float(my_j.min()) if mny_i_val <= mny_j_val: - my_min, my_min_e = mny_i_val / 1000, int(my_i.idxmin()) + my_min, my_min_e = mny_i_val, int(my_i.idxmin()) else: - my_min, my_min_e = mny_j_val / 1000, int(my_j.idxmin()) + my_min, my_min_e = mny_j_val, int(my_j.idxmin()) # Compute max/min for Mz mmxi, mmxj = float(mz_i.max()), float(mz_j.max()) if mmxi >= mmxj: - m_max, m_max_e = mmxi / 1000, int(mz_i.idxmax()) + m_max, m_max_e = mmxi, int(mz_i.idxmax()) else: - m_max, m_max_e = mmxj / 1000, int(mz_j.idxmax()) + m_max, m_max_e = mmxj, int(mz_j.idxmax()) mmni, mmnj = float(mz_i.min()), float(mz_j.min()) if mmni <= mmnj: - m_min, m_min_e = mmni / 1000, int(mz_i.idxmin()) + m_min, m_min_e = mmni, int(mz_i.idxmin()) else: - m_min, m_min_e = mmnj / 1000, int(mz_j.idxmin()) + m_min, m_min_e = mmnj, int(mz_j.idxmin()) # Group results by element to avoid redundant rows crit_eles = defaultdict( @@ -690,13 +824,9 @@ def print_critical_max_state(self): # 3. Search for absolute maximum within selected category for lc in relevant_lcs: for g_name, g_data in girder_map.items(): - if self.edge_dist > 0 and g_name in ["EB1", "EB2"]: - continue # Skip EB1 and EB2 when finding maximum - elements = g_data["elements"] try: - subset = self.ds.sel(Loadcase=lc, Element=elements, Component=comp)["forces"].copy() - + subset = self.ds.sel(Loadcase=lc, Element=elements, Component=comp)["forces"] # Find both max and min in this subset s_max = float(subset.max()) @@ -723,7 +853,7 @@ def print_critical_max_state(self): if crit_lc is None: print("❌ No results found.") - return # reactions vy start ra and end rb, point load and line load , point-coordinate,line-start and end + return print("\n" + "=" * 100) print(" " * 35 + "GLOBAL CRITICAL MAXIMUM SUMMARY") @@ -742,7 +872,7 @@ def print_critical_max_state(self): "Component": comp, "Girder": crit_girder, "Element": crit_ele, - "Value (kN/kNm)": f"{crit_val / 1000:.3f}", + "Value": f"{crit_val:.3f}", "Loadcase (Short)": short_lc, "Position": position_str }] @@ -757,9 +887,7 @@ def print_critical_max_state(self): elements = g_data["elements"] print(f"\n>>> Girder: {g_name}") try: - subset = self.ds.sel(Loadcase=crit_lc, Element=elements).copy() - - + subset = self.ds.sel(Loadcase=crit_lc, Element=elements) vx_i = subset.sel(Component="Vx_i")["forces"].values vx_j = subset.sel(Component="Vx_j")["forces"].values @@ -940,6 +1068,456 @@ def verify_sections(self): print(" " * 30 + "End of Verification (Exiting Analysis Tools)") print("=" * 105) + def print_load_extraction(self, include_moving=True): + """ + Extracts and prints load information for all dead load cases and (optionally) + moving load cases. Delegates to the same private helpers used by the + interactive menu (Option 7), ensuring a single source of truth. + """ + print("\n" + "=" * 110) + print(" " * 40 + "LOAD EXTRACTION REPORT") + print("=" * 110) + + # Build girder map for self-weight extraction + nodes, _, _ = self.build_grillage_connectivity() + g_map, _ = self.build_girders(verbose=False) + g_map = self.filter_girders(g_map) + + # 1. Girder Self Weight + self._print_girder_sw_extraction(g_map, nodes) + + # 2. Other Dead Loads (dynamically discovered) + for attr_name in sorted(vars(self.bridge).keys()): + val = getattr(self.bridge, attr_name) + if (attr_name.endswith("_load_case") + and attr_name != "self_weight_load_case" + and val is not None): + display_name = attr_name.replace("_", " ").title() + self._print_single_dead_lc_extraction(display_name, val) + + # 3. Moving Loads (Vehicles) + if include_moving and getattr(self.bridge, 'vehicle_load_cases_list', None): + for lc in self.bridge.vehicle_load_cases_list: + self._print_single_vehicle_extraction(lc) + + print("\n" + "=" * 110) + + + def _get_active_pts(self, load_obj): + """Helper to get non-None points from load attributes (fending off stale point_list).""" + pts = [] + for i in range(1, 9): + p = getattr(load_obj, f"load_point_{i}", None) + if p: + pts.append(p) + return pts + + @staticmethod + def _bound(da, db): + """ + Returns (max_kN, max_ele, min_kN, min_ele) from two xarray DataArrays + representing the i-node and j-node of a force/moment component. + Picks the governing value (larger magnitude) between the two ends. + """ + a_max, b_max = float(da.max()), float(db.max()) + a_min, b_min = float(da.min()), float(db.min()) + if a_max >= b_max: + v_max, e_max = a_max / 1000.0, int(da.idxmax()) + else: + v_max, e_max = b_max / 1000.0, int(db.idxmax()) + if a_min <= b_min: + v_min, e_min = a_min / 1000.0, int(da.idxmin()) + else: + v_min, e_min = b_min / 1000.0, int(db.idxmin()) + return v_max, e_max, v_min, e_min + + def query(self, category, **kwargs): + """ + Public programmatic API for querying ALL bridge analysis results. + Returns a nested list (array) of the requested data and the column headers. + + Parameters + ---------- + category : str + 'girder_sw', 'dead', 'moving', 'reactions', 'forces', + 'girder_paths', 'moving_trace', 'envelopes', 'critical_state' + kwargs : dict + - name : str (Load case or Category name) + - girder : str (Optional girder name) + - component : str (e.g., 'Vy_i', 'Mz_j') + + Returns + ------- + data : list of lists, columns : list + """ + df = None + name = kwargs.get('name') + girder = kwargs.get('girder') + comp = kwargs.get('component') + + if category == "girder_paths": + df = self._get_girder_paths_df(girder) + elif category == "girder_sw": + nodes, _, _ = self.build_grillage_connectivity() + g_map, _ = self.build_girders(verbose=False) + g_map = self.filter_girders(g_map) + df = self._get_girder_sw_df(g_map, nodes) + elif category == "dead": + if not name: return [], [] + lc = getattr(self.bridge, name, None) + df = self._get_dead_lc_df(name, lc) + elif category == "moving": + if not name: return [], [] + v_lcs = getattr(self.bridge, 'vehicle_load_cases_list', []) + target_lc = next((lc for lc in v_lcs if lc.name == name), None) + if target_lc: + df = self._get_vehicle_df(target_lc) + elif category == "reactions": + if not name: return [], [] + df = self._get_reactions_df(name, girder) + elif category == "forces": + if not name or not girder or not comp: return [], [] + df = self._get_forces_df(name, girder, comp) + elif category == "moving_trace": + if not name or not girder or not comp: return [], [] + df = self._get_moving_trace_df(name, girder, comp) + elif category == "envelopes": + df = self._get_envelopes_df(name, girder) + elif category == "critical_state": + if not name or not comp: return [], [] + df = self._get_critical_state_df(name, comp) + + if df is not None and not df.empty: + return df.values.tolist(), df.columns.tolist() + return [], [] + + def _get_girder_paths_df(self, girder_filter=None): + """Internal helper for Girder Paths (BFS results).""" + g_map, _ = self.build_girders(verbose=False) + g_map = self.filter_girders(g_map) + rows = [] + for g, data in g_map.items(): + if girder_filter and g != girder_filter: + continue + rows.append({"Girder": g, "Start": data["start"], "End": data["end"], "Length": round(data["length"], 3), "Nodes": str(data["path"])}) + return pd.DataFrame(rows) + + def _get_moving_trace_df(self, category_name, girder_name, component): + """Internal helper for Moving Load Trace.""" + g_map, _ = self.build_girders(verbose=False) + if girder_name not in g_map: return pd.DataFrame() + elements = g_map[girder_name]["elements"] + + lc_groups = self.classify_loadcases() + all_moving = lc_groups["vehicle_moving"] + relevant = [lc for lc in all_moving if category_name in lc] + + rows = [] + for lc in relevant: + try: + x_pos = float(lc.split("L")[-1]) if "L" in lc else 0.0 + subset = self.ds.sel(Loadcase=lc, Element=elements, Component=component)["forces"] + val = float(subset.max()) if "max" in component.lower() else float(subset.min()) + if abs(float(subset.min())) > abs(float(subset.max())): val = float(subset.min()) + rows.append({"X Pos": round(x_pos, 3), "LoadCase": lc, f"{component} (kN/kNm)": round(val/1000, 3)}) + except Exception: pass + return pd.DataFrame(rows) + + def _get_envelopes_df(self, lc_filter=None, g_filter=None): + """Internal helper for Max/Min Envelopes.""" + g_map, _ = self.build_girders(verbose=False) + g_map = self.filter_girders(g_map) + all_lcs = self.get_available_loadcases() + if lc_filter: all_lcs = [lc for lc in all_lcs if lc_filter in str(lc)] + + rows = [] + for lc in all_lcs: + for g_name, g_data in g_map.items(): + if g_filter and g_name != g_filter: continue + try: + subset = self.ds.sel(Loadcase=lc, Element=g_data["elements"])["forces"] + rows.append({ + "LoadCase": lc, "Girder": g_name, + "Max Vy": round(float(subset.sel(Component=["Vy_i", "Vy_j"]).max())/1000, 3), + "Min Vy": round(float(subset.sel(Component=["Vy_i", "Vy_j"]).min())/1000, 3), + "Max Mz": round(float(subset.sel(Component=["Mz_i", "Mz_j"]).max())/1000, 3), + "Min Mz": round(float(subset.sel(Component=["Mz_i", "Mz_j"]).min())/1000, 3) + }) + except Exception: pass + return pd.DataFrame(rows) + + def _get_critical_state_df(self, category_name, component): + """Internal helper for Critical Maximum State.""" + lc_groups = self.classify_loadcases() + relevant = [lc for lc in lc_groups["vehicle_moving"] if category_name in lc] + g_map, _ = self.build_girders(verbose=False) + g_map = self.filter_girders(g_map) + + best_val, best_lc, best_g, best_e = 0, None, None, None + for lc in relevant: + for g, data in g_map.items(): + try: + subset = self.ds.sel(Loadcase=lc, Element=data["elements"], Component=component)["forces"] + v = float(subset.max()) if abs(float(subset.max())) >= abs(float(subset.min())) else float(subset.min()) + if abs(v) > abs(best_val): + best_val, best_lc, best_g = v, lc, g + except Exception: pass + + if best_lc: + return pd.DataFrame([{ + "Category": category_name, "Component": component, + "Max Value": round(best_val/1000, 3), "LoadCase": best_lc, "Girder": best_g + }]) + return pd.DataFrame() + + def _get_reactions_df(self, load_case, girder_filter=None): + """Internal helper to build Reaction DataFrame for a specific load case.""" + nodes, _, _ = self.build_grillage_connectivity() + g_map, _ = self.build_girders(verbose=False) + g_map = self.filter_girders(g_map) + + rows = [] + for g_name, g_data in g_map.items(): + if girder_filter and g_name != girder_filter: + continue + + el_map = g_data["element_map"] + if not el_map: continue + + # Start node (Ra) from first element + eid_s, n1_s, _ = el_map[0] + # End node (Rb) from last element + eid_e, _, n2_e = el_map[-1] + + try: + nodes_s = ops.eleNodes(eid_s) + c_ra = "Vy_i" if n1_s == nodes_s[0] else "Vy_j" + nodes_e = ops.eleNodes(eid_e) + c_rb = "Vy_j" if n2_e == nodes_e[1] else "Vy_i" + + ra = float(self.ds.sel(Loadcase=load_case, Element=eid_s, Component=c_ra)["forces"]) / 1000 + rb = -float(self.ds.sel(Loadcase=load_case, Element=eid_e, Component=c_rb)["forces"]) / 1000 + + rows.append({"Girder": g_name, "Ra (kN)": round(ra, 3), "Rb (kN)": round(rb, 3)}) + except Exception: pass + return pd.DataFrame(rows) + + def _get_forces_df(self, load_case, girder_name, component): + """Internal helper to build Internal Force DataFrame for a girder's elements.""" + g_map, _ = self.build_girders(verbose=False) + if girder_name not in g_map: return pd.DataFrame() + + elements = g_map[girder_name]["elements"] + rows = [] + unit = "kN" if "V" in component else "kNm" + + for eid in elements: + try: + val = float(self.ds.sel(Loadcase=load_case, Element=eid, Component=component)["forces"]) / 1000 + rows.append({"Element": str(eid), f"{component} ({unit})": round(val, 3)}) + except Exception: pass + return pd.DataFrame(rows) + + def _get_girder_sw_df(self, girder_map, nodes): + """Internal helper to build the Girder Self weight DataFrame.""" + # 1. Identify magnitudes from bridge case + sw_mag_map = {} + if hasattr(self.bridge, 'self_weight_load_case') and self.bridge.self_weight_load_case: + for lg in self.bridge.self_weight_load_case.load_groups: + load = lg["load"] + if "line" in type(load).__name__.lower(): + pts = self._get_active_pts(load) + if pts: + sw_mag_map[round(pts[0].z, 3)] = pts[0].p / 1000.0 + + sw_data = [] + total_v_audit = 0 + for g_name, g_data in girder_map.items(): + s, e = nodes[g_data["start"]], nodes[g_data["end"]] + val = sw_mag_map.get(round(s[2], 3), 22.4) + L = math.sqrt((e[0]-s[0])**2 + (e[2]-s[2])**2) + total_v_audit += val * L + + sw_data.append({ + "Girder": g_name, "Type": "Line", + "Start X": round(s[0], 3), "Start Y": round(s[1], 3), "Start Z": round(s[2], 3), + "End X": round(e[0], 3), "End Y": round(e[1], 3), "End Z": round(e[2], 3), + "Value (kN/m)": round(val, 2) + }) + df = pd.DataFrame(sw_data) + df.attrs["total_v"] = total_v_audit + return df + + def _get_dead_lc_df(self, display_name, lc): + """Internal helper to build Dead Load Case DataFrame.""" + if not lc or not lc.load_groups: return pd.DataFrame() + + case_data = [] + total_v_audit = 0 + for i, lg in enumerate(lc.load_groups, 1): + load = lg["load"] + cname = type(load).__name__.lower() + pts = self._get_active_pts(load) + row = {"ID": i} + try: + if "line" in cname and len(pts) >= 2: + p1, p2 = pts[0], pts[1] + val = p1.p / 1000.0 + total_v_audit += val * math.sqrt((p2.x-p1.x)**2 + (p2.z-p1.z)**2) + row.update({"Type": "Line", "Start X": round(p1.x, 3), "Start Z": round(p1.z, 3), "End X": round(p2.x, 3), "End Z": round(p2.z, 3), "Value (kN/m)": round(val, 3)}) + elif "patch" in cname and len(pts) >= 4: + val = pts[0].p / 1000.0 + area = (max(p.x for p in pts) - min(p.x for p in pts)) * (max(p.z for p in pts) - min(p.z for p in pts)) + total_v_audit += val * area + row.update({"Type": "Patch", "P1 X": round(pts[0].x, 2), "P1 Z": round(pts[0].z, 2), "P2 X": round(pts[1].x, 2), "P2 Z": round(pts[1].z, 2), "P3 X": round(pts[2].x, 2), "P3 Z": round(pts[2].z, 2), "P4 X": round(pts[3].x, 2), "P4 Z": round(pts[3].z, 2), "Value (kN/m2)": round(val, 3)}) + elif "point" in cname and pts: + val = pts[0].p / 1000.0 + total_v_audit += val + row.update({"Type": "Point", "X": round(pts[0].x, 3), "Z": round(pts[0].z, 3), "Value (kN)": round(val, 3)}) + except Exception: pass + case_data.append(row) + df = pd.DataFrame(case_data) + df.attrs["total_v"] = total_v_audit + return df + + def _get_vehicle_df(self, lc): + """ + Build Moving Load (Vehicle) DataFrame using IRC6_2017 local geometry. + + For each vehicle in the load-case: + - Detects vehicle type from the load-case name (Class70R / ClassA) + - Reads the vehicle's global reference position from ospgrillage + - Calls the matching IRC6_2017 method for local axle X positions, + local wheel Z offsets, and per-axle loads + - Global wheel position = vehicle_global + local_offset + - Splits each axle load equally into 2 wheel loads (L / R) + - Falls back to raw point data for unrecognised vehicle types + """ + moving_data = [] + total_v_audit = 0.0 + lc_name = lc.name # e.g. "Case1 Class70R L1" or "Case1 ClassA L1" + + for lg in lc.load_groups: + load_obj = lg["load"] + + # ── 1. Recover global vehicle reference position ────────────────── + global_x = 0.0 + global_z = 0.0 + gc = getattr(load_obj, 'global_coord', None) + if gc is not None: + global_x = float(getattr(gc, 'x', 0.0)) + global_z = float(getattr(gc, 'z', 0.0)) + + # ── 2. Detect vehicle type → fetch IRC6 local geometry ──────────── + irc_data = None + if 'Class70R' in lc_name: + try: + irc_data = IRC6_2017.cl_204_1_Class70R_vehicle_wheel() + irc_data['_type'] = 'Class70R(W)' + except Exception: + pass + elif 'ClassA' in lc_name: + try: + irc_data = IRC6_2017.cl_204_1_ClassA_vehicle() + irc_data['_type'] = 'ClassA' + except Exception: + pass + + # ── 3a. IRC6 path: correct global positions + axle→wheel split ──── + if irc_data is not None: + axle_x_local = irc_data['x'] # local axle x positions (m) + wheel_z_local = irc_data['z'] # local wheel z offsets, e.g. [-0.965, +0.965] + axle_loads_N = irc_data['wheel_loads'] # per-axle load in N (kN=1000 in unit system) + + axle_counter = 1 + wheel_counter = 1 + + for local_x, axle_load_N in zip(axle_x_local, axle_loads_N): + global_axle_x = global_x + local_x # global longitudinal position + axle_load_kN = axle_load_N / 1000.0 # N → kN + wheel_load_kN = axle_load_kN / 2.0 # 2 wheels per axle + total_v_audit += axle_load_kN + + for w_idx, local_z in enumerate(wheel_z_local): + side = "L" if w_idx == 0 else "R" + global_wheel_z = global_z + local_z # global transverse position + + moving_data.append({ + "Axle": axle_counter, + "Axle Load (kN)": round(axle_load_kN, 2), + "Global Axle X (m)": round(global_axle_x, 3), + "Wheel": f"A{axle_counter}{side}", + "Side": side, + "Global X (m)": round(global_axle_x, 3), + "Global Z (m)": round(global_wheel_z, 3), + "Wheel Load (kN)": round(wheel_load_kN, 3), + }) + wheel_counter += 1 + + axle_counter += 1 + + # ── 3b. Fallback: read raw point data (unknown vehicle type) ────── + else: + sub_loads = ( + load_obj.compound_load_obj_list + if hasattr(load_obj, 'compound_load_obj_list') + else [load_obj] + ) + axle_counter = 1 + wheel_counter = 1 + + for sub_load in sub_loads: + pts = self._get_active_pts(sub_load) + if not pts: + continue + axle_load_kN = sum(p.p for p in pts) / 1000.0 + total_v_audit += axle_load_kN + + for p in pts: + moving_data.append({ + "Axle": axle_counter, + "Axle Load (kN)": round(axle_load_kN, 2), + "Global Axle X (m)": round(global_x + p.x, 3), + "Wheel": wheel_counter, + "Side": "-", + "Global X (m)": round(global_x + p.x, 3), + "Global Z (m)": round(global_z + p.z, 3), + "Wheel Load (kN)": round(p.p / 1000.0, 3), + }) + wheel_counter += 1 + axle_counter += 1 + + df = pd.DataFrame(moving_data) + df.attrs["total_v"] = total_v_audit + return df + + def _print_girder_sw_extraction(self, girder_map, nodes): + """Interactive view of girder self weight.""" + df = self._get_girder_sw_df(girder_map, nodes) + print(f"\n{'='*110}\n>>> GIRDER SELF WEIGHT\n{'-'*110}") + if not df.empty: + print(df.to_string(index=False)) + print(f"\nTotal Vertical Self-Weight: {df.attrs.get('total_v', 0):.2f} kN") + print("=" * 110) + + def _print_single_dead_lc_extraction(self, display_name, lc): + """Interactive view of dead load case.""" + df = self._get_dead_lc_df(display_name, lc) + print(f"\n{'='*110}\n>>> {display_name}\n{'-'*110}") + if not df.empty: + print(df.to_string(index=False)) + print(f"\nTotal Vertical Load in Case: {df.attrs.get('total_v', 0):.2f} kN") + print("=" * 110) + + def _print_single_vehicle_extraction(self, lc): + """Interactive view of vehicle load.""" + df = self._get_vehicle_df(lc) + print(f"\n{'='*110}\n>>> MOVING LOAD CONFIGURATION: {lc.name}\n{'-'*110}") + if not df.empty: + print(df.to_string(index=False)) + print(f"\nTotal Vehicle Weight (Vertical): {df.attrs.get('total_v', 0):.2f} kN") + print("=" * 110) + def run_interactive_viewer(self): while True: @@ -951,14 +1529,12 @@ def run_interactive_viewer(self): print("3. Show moving load trace") print("4. Show max/min envelopes") print("5. Show critical maximum state") - print("6. Show girder reactions (Ra, Rb)") print("0. Exit") print("==============================") main_choice = input("Enter choice: ").strip() if main_choice == "0": - self.verify_sections() break # ====================================================== @@ -1051,7 +1627,7 @@ def run_interactive_viewer(self): # ================= LOADCASE LOOP ================= while True: - self.print_load_availability() + print("\nSelect Loadcase:") for i, lc in enumerate(loadcases, 1): print(f"{i}. {lc}") @@ -1092,7 +1668,7 @@ def run_interactive_viewer(self): comp = component_map[r] - # ---------------- FORCES / MOMENTS ---------------- + # ---------------- FORCES ---------------- res = self.get_beam_element_results( girder_elements, lc, comp ) @@ -1103,12 +1679,11 @@ def run_interactive_viewer(self): data = [] for eid, val in res.items(): try: - # Handle potential array values to get a clean scalar and convert to kN/kNm - scalar_val = float(val) / 1000 if val is not None else val + # Handle potential array values to get a clean scalar + scalar_val = float(val) if val is not None else val except (TypeError, ValueError): scalar_val = val - unit = "kN" if "V" in comp else "kNm" - data.append({"Element": eid, f"{comp} ({unit})": scalar_val}) + data.append({"Element": eid, comp: scalar_val}) df = pd.DataFrame(data) print(df.to_string(index=False)) @@ -1148,8 +1723,7 @@ def run_interactive_viewer(self): continue # Show available moving load cases - self.print_load_availability() - print("\nSelect Moving Load Category:") + print("\nAvailable Moving Load Categories:") case_types = defaultdict(list) for lc in moving_lcs: parts = lc.split() @@ -1199,8 +1773,7 @@ def run_interactive_viewer(self): print("❌ Invalid selection") continue - self.print_load_availability() - lc_input = input("\nEnter Load Case Filter (e.g. 'ClassA') or leave blank for all: ").strip() + lc_input = input("Enter Load Case Filter (e.g. 'ClassA') or leave blank for all: ").strip() if not lc_input: lc_input = None self.print_envelopes(load_case_filter=lc_input, girder_filter=g_input) @@ -1210,36 +1783,5 @@ def run_interactive_viewer(self): self.print_critical_max_state() continue - elif main_choice == "6": - print("\n--- Girder Reactions Configuration ---") - girder_map, _ = self.build_girders(verbose=False) - girder_map = self.filter_girders(girder_map) - g_list = list(girder_map.keys()) - - print("\nSelect Girder:") - for i, g in enumerate(g_list, 1): - print(f"{i}. {g}") - print(f"{len(g_list)+1}. All Girders") - print("0. Back") - - g_choice = input("Enter choice: ").strip() - if g_choice == "0": continue - - if not g_choice or g_choice == str(len(g_list)+1): - g_input = None - elif g_choice.isdigit() and 1 <= int(g_choice) <= len(g_list): - g_input = g_list[int(g_choice)-1] - else: - print("❌ Invalid selection") - continue - - self.print_load_availability() - lc_input = input("\nEnter Load Case Filter (e.g. 'ClassA' or 'Dead') or leave blank for all: ").strip() - if not lc_input: lc_input = None - - self.print_girder_reactions(load_case_filter=lc_input, girder_filter=g_input) - continue - else: print("❌ Invalid option") - From eef862067d85e720e615deb1886b9867d54d9fb0 Mon Sep 17 00:00:00 2001 From: Manav Sharma Date: Wed, 1 Apr 2026 21:12:13 +0530 Subject: [PATCH 136/225] Corrected Code With All The Functions --- .../plate_girder/analysis_results.py | 345 +++++++++--------- 1 file changed, 174 insertions(+), 171 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index 475c5d93b..e87b5954b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -412,10 +412,6 @@ def build_girders(self, verbose=True): name = "EB1" elif i == num_pairs: name = "EB2" - else: - name = f"G{i - 1}" - else: - name = f"G{i}" path = self.bfs_shortest_path(adj, s, e) path_elements, element_map = self.get_elements_along_path(path, elements) @@ -450,16 +446,7 @@ def build_girders(self, verbose=True): return girder_map, elements def filter_girders(self, girder_map): - if self.edge_dist > 0: - # If there's an overhang, show everything (EB1, G1...Gn, EB2) - return girder_map - else: - # If no overhang (dist=0), hide the physical edge girders (G1 and Gn) - keys = list(girder_map.keys()) - if len(keys) <= 2: - return girder_map - filtered_keys = keys[1:-1] - return {k: girder_map[k] for k in filtered_keys} + return girder_map # ======================================================== # PRINT MOVING LOAD TRACE @@ -525,23 +512,25 @@ def to_list(val): # 5. Get results for this girder and loadcase try: - subset = self.ds.sel(Loadcase=lc, Element=elements) + subset = self.ds.sel(Loadcase=lc, Element=elements).copy() + + # Extract values and create DataFrame df = pd.DataFrame({ "Element": elements, - "Vx_i": subset.sel(Component="Vx_i")["forces"].values, - "Vx_j": subset.sel(Component="Vx_j")["forces"].values, - "Vy_i": subset.sel(Component="Vy_i")["forces"].values, - "Vy_j": subset.sel(Component="Vy_j")["forces"].values, - "Vz_i": subset.sel(Component="Vz_i")["forces"].values, - "Vz_j": subset.sel(Component="Vz_j")["forces"].values, - "Mx_i": subset.sel(Component="Mx_i")["forces"].values, - "Mx_j": subset.sel(Component="Mx_j")["forces"].values, - "My_i": subset.sel(Component="My_i")["forces"].values, - "My_j": subset.sel(Component="My_j")["forces"].values, - "Mz_i": subset.sel(Component="Mz_i")["forces"].values, - "Mz_j": subset.sel(Component="Mz_j")["forces"].values, + "Vx_i (kN)": subset.sel(Component="Vx_i")["forces"].values / 1000, + "Vx_j (kN)": subset.sel(Component="Vx_j")["forces"].values / 1000, + "Vy_i (kN)": subset.sel(Component="Vy_i")["forces"].values / 1000, + "Vy_j (kN)": subset.sel(Component="Vy_j")["forces"].values / 1000, + "Vz_i (kN)": subset.sel(Component="Vz_i")["forces"].values / 1000, + "Vz_j (kN)": subset.sel(Component="Vz_j")["forces"].values / 1000, + "Mx_i (kNm)": subset.sel(Component="Mx_i")["forces"].values / 1000, + "Mx_j (kNm)": subset.sel(Component="Mx_j")["forces"].values / 1000, + "My_i (kNm)": subset.sel(Component="My_i")["forces"].values / 1000, + "My_j (kNm)": subset.sel(Component="My_j")["forces"].values / 1000, + "Mz_i (kNm)": subset.sel(Component="Mz_i")["forces"].values / 1000, + "Mz_j (kNm)": subset.sel(Component="Mz_j")["forces"].values / 1000, }) print(df.to_string(index=False)) @@ -592,142 +581,39 @@ def to_list(val): if g_filter and girder_name not in g_filter: continue + if self.edge_dist > 0 and girder_name in ["EB1", "EB2"]: + continue # dont calculate it for calculating other values + elements = girder_data["elements"] try: # Select ONLY this loadcase and elements for this girder - subset = self.ds.sel(Loadcase=lc, Element=elements) - - # --- Vy Envelope --- - vy_i = subset.sel(Component="Vy_i")["forces"] - vy_j = subset.sel(Component="Vy_j")["forces"] - - # --- Vx Envelope --- - vx_i = subset.sel(Component="Vx_i")["forces"] - vx_j = subset.sel(Component="Vx_j")["forces"] - - # --- Vz Envelope --- - vz_i = subset.sel(Component="Vz_i")["forces"] - vz_j = subset.sel(Component="Vz_j")["forces"] - - # --- Mx Envelope --- - mx_i = subset.sel(Component="Mx_i")["forces"] - mx_j = subset.sel(Component="Mx_j")["forces"] - - # --- My Envelope --- - my_i = subset.sel(Component="My_i")["forces"] - my_j = subset.sel(Component="My_j")["forces"] - - # --- Mz Envelope --- - mz_i = subset.sel(Component="Mz_i")["forces"] - mz_j = subset.sel(Component="Mz_j")["forces"] - - # Compute max/min for Vy - mxi, mxj = float(vy_i.max()), float(vy_j.max()) - if mxi >= mxj: - v_max, v_max_e = mxi, int(vy_i.idxmax()) - else: - v_max, v_max_e = mxj, int(vy_j.idxmax()) - - mni, mnj = float(vy_i.min()), float(vy_j.min()) - if mni <= mnj: - v_min, v_min_e = mni, int(vy_i.idxmin()) - else: - v_min, v_min_e = mnj, int(vy_j.idxmin()) - - # Compute max/min for Vx - mx_i_val, mx_j_val = float(vx_i.max()), float(vx_j.max()) - if mx_i_val >= mx_j_val: - vx_max, vx_max_e = mx_i_val, int(vx_i.idxmax()) - else: - vx_max, vx_max_e = mx_j_val, int(vx_j.idxmax()) - - mn_i_val, mn_j_val = float(vx_i.min()), float(vx_j.min()) - if mn_i_val <= mn_j_val: - vx_min, vx_min_e = mn_i_val, int(vx_i.idxmin()) - else: - vx_min, vx_min_e = mn_j_val, int(vx_j.idxmin()) - - # Compute max/min for Vz - mz_i_val, mz_j_val = float(vz_i.max()), float(vz_j.max()) - if mz_i_val >= mz_j_val: - vz_max, vz_max_e = mz_i_val, int(vz_i.idxmax()) - else: - vz_max, vz_max_e = mz_j_val, int(vz_j.idxmax()) + subset = self.ds.sel(Loadcase=lc, Element=elements).copy() - mnz_i_val, mnz_j_val = float(vz_i.min()), float(vz_j.min()) - if mnz_i_val <= mnz_j_val: - vz_min, vz_min_e = mnz_i_val, int(vz_i.idxmin()) - else: - vz_min, vz_min_e = mnz_j_val, int(vz_j.idxmin()) - - # Compute max/min for Mx - mx_i_val, mx_j_val = float(mx_i.max()), float(mx_j.max()) - if mx_i_val >= mx_j_val: - mx_max, mx_max_e = mx_i_val, int(mx_i.idxmax()) - else: - mx_max, mx_max_e = mx_j_val, int(mx_j.idxmax()) - mnx_i_val, mnx_j_val = float(mx_i.min()), float(mx_j.min()) - if mnx_i_val <= mnx_j_val: - mx_min, mx_min_e = mnx_i_val, int(mx_i.idxmin()) - else: - mx_min, mx_min_e = mnx_j_val, int(mx_j.idxmin()) - - # Compute max/min for My - my_i_val, my_j_val = float(my_i.max()), float(my_j.max()) - if my_i_val >= my_j_val: - my_max, my_max_e = my_i_val, int(my_i.idxmax()) - else: - my_max, my_max_e = my_j_val, int(my_j.idxmax()) - mny_i_val, mny_j_val = float(my_i.min()), float(my_j.min()) - if mny_i_val <= mny_j_val: - my_min, my_min_e = mny_i_val, int(my_i.idxmin()) - else: - my_min, my_min_e = mny_j_val, int(my_j.idxmin()) - - # Compute max/min for Mz - mmxi, mmxj = float(mz_i.max()), float(mz_j.max()) - if mmxi >= mmxj: - m_max, m_max_e = mmxi, int(mz_i.idxmax()) - else: - m_max, m_max_e = mmxj, int(mz_j.idxmax()) + # --- Compact envelope computation via _bound helper --- + _COMP_PAIRS = [ + ("Vy", "Vy_i", "Vy_j", "kN"), + ("Vx", "Vx_i", "Vx_j", "kN"), + ("Vz", "Vz_i", "Vz_j", "kN"), + ("Mx", "Mx_i", "Mx_j", "kNm"), + ("My", "My_i", "My_j", "kNm"), + ("Mz", "Mz_i", "Mz_j", "kNm"), + ] + _COLS = [ + f"{mm} {n} ({u})" + for n, ci, cj, u in _COMP_PAIRS + for mm in ("Max", "Min") + ] + crit_eles = defaultdict(lambda: dict.fromkeys(_COLS, "-")) - mmni, mmnj = float(mz_i.min()), float(mz_j.min()) - if mmni <= mmnj: - m_min, m_min_e = mmni, int(mz_i.idxmin()) - else: - m_min, m_min_e = mmnj, int(mz_j.idxmin()) - - # Group results by element to avoid redundant rows - crit_eles = defaultdict( - lambda: { - "Max Vy (kN)": "-", - "Min Vy (kN)": "-", - "Max Vx (kN)": "-", - "Min Vx (kN)": "-", - "Max Vz (kN)": "-", - "Min Vz (kN)": "-", - "Max Mx (kNm)": "-", - "Min Mx (kNm)": "-", - "Max My (kNm)": "-", - "Min My (kNm)": "-", - "Max Mz (kNm)": "-", - "Min Mz (kNm)": "-", - }) - crit_eles[v_max_e]["Max Vy (kN)"] = f"{v_max:.3f}" - crit_eles[v_min_e]["Min Vy (kN)"] = f"{v_min:.3f}" - crit_eles[vx_max_e]["Max Vx (kN)"] = f"{vx_max:.3f}" - crit_eles[vx_min_e]["Min Vx (kN)"] = f"{vx_min:.3f}" - crit_eles[vz_max_e]["Max Vz (kN)"] = f"{vz_max:.3f}" - crit_eles[vz_min_e]["Min Vz (kN)"] = f"{vz_min:.3f}" - crit_eles[mx_max_e]["Max Mx (kNm)"] = f"{mx_max:.3f}" - crit_eles[mx_min_e]["Min Mx (kNm)"] = f"{mx_min:.3f}" - crit_eles[my_max_e]["Max My (kNm)"] = f"{my_max:.3f}" - crit_eles[my_min_e]["Min My (kNm)"] = f"{my_min:.3f}" - crit_eles[m_max_e]["Max Mz (kNm)"] = f"{m_max:.3f}" - crit_eles[m_min_e]["Min Mz (kNm)"] = f"{m_min:.3f}" + for label, ci, cj, unit in _COMP_PAIRS: + da = subset.sel(Component=ci)["forces"] + db = subset.sel(Component=cj)["forces"] + v_max, e_max, v_min, e_min = self._bound(da, db) + crit_eles[e_max][f"Max {label} ({unit})"] = f"{v_max:.3f}" + crit_eles[e_min][f"Min {label} ({unit})"] = f"{v_min:.3f}" # Add to loadcase data for eid in sorted(crit_eles.keys()): @@ -824,9 +710,13 @@ def print_critical_max_state(self): # 3. Search for absolute maximum within selected category for lc in relevant_lcs: for g_name, g_data in girder_map.items(): + if self.edge_dist > 0 and g_name in ["EB1", "EB2"]: + continue # Skip EB1 and EB2 when finding maximum + elements = g_data["elements"] try: - subset = self.ds.sel(Loadcase=lc, Element=elements, Component=comp)["forces"] + subset = self.ds.sel(Loadcase=lc, Element=elements, Component=comp)["forces"].copy() + # Find both max and min in this subset s_max = float(subset.max()) @@ -853,7 +743,7 @@ def print_critical_max_state(self): if crit_lc is None: print("❌ No results found.") - return + return # reactions vy start ra and end rb, point load and line load , point-coordinate,line-start and end print("\n" + "=" * 100) print(" " * 35 + "GLOBAL CRITICAL MAXIMUM SUMMARY") @@ -872,7 +762,7 @@ def print_critical_max_state(self): "Component": comp, "Girder": crit_girder, "Element": crit_ele, - "Value": f"{crit_val:.3f}", + "Value (kN/kNm)": f"{crit_val / 1000:.3f}", "Loadcase (Short)": short_lc, "Position": position_str }] @@ -887,7 +777,9 @@ def print_critical_max_state(self): elements = g_data["elements"] print(f"\n>>> Girder: {g_name}") try: - subset = self.ds.sel(Loadcase=crit_lc, Element=elements) + subset = self.ds.sel(Loadcase=crit_lc, Element=elements).copy() + + vx_i = subset.sel(Component="Vx_i")["forces"].values vx_j = subset.sel(Component="Vx_j")["forces"].values @@ -1444,13 +1336,13 @@ def _get_vehicle_df(self, lc): moving_data.append({ "Axle": axle_counter, - "Axle Load (kN)": round(axle_load_kN, 2), + "Axle Load (t)": round(axle_load_kN, 2), "Global Axle X (m)": round(global_axle_x, 3), "Wheel": f"A{axle_counter}{side}", "Side": side, "Global X (m)": round(global_axle_x, 3), "Global Z (m)": round(global_wheel_z, 3), - "Wheel Load (kN)": round(wheel_load_kN, 3), + "Wheel Load (t)": round(wheel_load_kN, 3), }) wheel_counter += 1 @@ -1476,13 +1368,13 @@ def _get_vehicle_df(self, lc): for p in pts: moving_data.append({ "Axle": axle_counter, - "Axle Load (kN)": round(axle_load_kN, 2), + "Axle Load (t)": round(axle_load_kN, 2), "Global Axle X (m)": round(global_x + p.x, 3), "Wheel": wheel_counter, "Side": "-", "Global X (m)": round(global_x + p.x, 3), "Global Z (m)": round(global_z + p.z, 3), - "Wheel Load (kN)": round(p.p / 1000.0, 3), + "Wheel Load (t)": round(p.p / 1000.0, 3), }) wheel_counter += 1 axle_counter += 1 @@ -1522,19 +1414,22 @@ def run_interactive_viewer(self): while True: - print("\n==============================") + print("==============================") print("Select Option:") print("1. Show girder paths (BFS)") print("2. Show Analysis Result") print("3. Show moving load trace") print("4. Show max/min envelopes") print("5. Show critical maximum state") + print("6. Show girder reactions (Ra, Rb)") + print("7. Load Extraction (Dead + Moving)") print("0. Exit") print("==============================") main_choice = input("Enter choice: ").strip() if main_choice == "0": + self.verify_sections() break # ====================================================== @@ -1627,7 +1522,7 @@ def run_interactive_viewer(self): # ================= LOADCASE LOOP ================= while True: - + self.print_load_availability() print("\nSelect Loadcase:") for i, lc in enumerate(loadcases, 1): print(f"{i}. {lc}") @@ -1668,7 +1563,7 @@ def run_interactive_viewer(self): comp = component_map[r] - # ---------------- FORCES ---------------- + # ---------------- FORCES / MOMENTS ---------------- res = self.get_beam_element_results( girder_elements, lc, comp ) @@ -1679,11 +1574,12 @@ def run_interactive_viewer(self): data = [] for eid, val in res.items(): try: - # Handle potential array values to get a clean scalar - scalar_val = float(val) if val is not None else val + # Handle potential array values to get a clean scalar and convert to kN/kNm + scalar_val = float(val) / 1000 if val is not None else val except (TypeError, ValueError): scalar_val = val - data.append({"Element": eid, comp: scalar_val}) + unit = "kN" if "V" in comp else "kNm" + data.append({"Element": eid, f"{comp} ({unit})": scalar_val}) df = pd.DataFrame(data) print(df.to_string(index=False)) @@ -1723,7 +1619,8 @@ def run_interactive_viewer(self): continue # Show available moving load cases - print("\nAvailable Moving Load Categories:") + self.print_load_availability() + print("\nSelect Moving Load Category:") case_types = defaultdict(list) for lc in moving_lcs: parts = lc.split() @@ -1773,7 +1670,8 @@ def run_interactive_viewer(self): print("❌ Invalid selection") continue - lc_input = input("Enter Load Case Filter (e.g. 'ClassA') or leave blank for all: ").strip() + self.print_load_availability() + lc_input = input("\nEnter Load Case Filter (e.g. 'ClassA') or leave blank for all: ").strip() if not lc_input: lc_input = None self.print_envelopes(load_case_filter=lc_input, girder_filter=g_input) @@ -1783,5 +1681,110 @@ def run_interactive_viewer(self): self.print_critical_max_state() continue + elif main_choice == "6": + print("\n--- Girder Reactions Configuration ---") + girder_map, _ = self.build_girders(verbose=False) + girder_map = self.filter_girders(girder_map) + g_list = list(girder_map.keys()) + + print("\nSelect Girder:") + for i, g in enumerate(g_list, 1): + print(f"{i}. {g}") + print(f"{len(g_list)+1}. All Girders") + print("0. Back") + + g_choice = input("Enter choice: ").strip() + if g_choice == "0": continue + + if not g_choice or g_choice == str(len(g_list)+1): + g_input = None + elif g_choice.isdigit() and 1 <= int(g_choice) <= len(g_list): + g_input = g_list[int(g_choice)-1] + else: + print("❌ Invalid selection") + continue + + self.print_load_availability() + lc_input = input("\nEnter Load Case Filter (e.g. 'ClassA' or 'Dead') or leave blank for all: ").strip() + if not lc_input: lc_input = None + + self.print_girder_reactions(load_case_filter=lc_input, girder_filter=g_input) + continue + + # ====================================================== + # OPTION 7 → LOAD EXTRACTION (LADDER-WISE) + # ====================================================== + elif main_choice == "7": + while True: + print("\n--- Load Extraction Category ---") + print("1. Dead Loads") + print("2. Moving Loads (Vehicles)") + print("0. Back") + + cat = input("Enter choice: ").strip() + if cat == "0": break + + if cat == "1": + # Dead Load Ladder - Dynamically discovered + avail_dead = [("Girder Self Weight", "self_weight_load_case")] + found_lcs = [] + for attr in sorted(vars(self.bridge).keys()): + val = getattr(self.bridge, attr) + if attr.endswith("_load_case") and attr != "self_weight_load_case" and val is not None: + display_name = attr.replace("_", " ").title() + found_lcs.append((display_name, attr)) + avail_dead.extend(found_lcs) + + if not avail_dead: + print("❌ No dead load cases found.") + continue + + while True: + print("\nSelect Dead Load Case:") + for i, (name, _) in enumerate(avail_dead, 1): + print(f"{i}. {name}") + print("0. Back") + + lc_idx = input("Enter choice: ").strip() + if lc_idx == "0": break + + if lc_idx.isdigit() and 1 <= int(lc_idx) <= len(avail_dead): + name, attr = avail_dead[int(lc_idx)-1] + lc = getattr(self.bridge, attr) + if name == "Girder Self Weight": + nodes, elements, _ = self.build_grillage_connectivity() + g_map, _ = self.build_girders(verbose=False) + g_map = self.filter_girders(g_map) + self._print_girder_sw_extraction(g_map, nodes) + else: + self._print_single_dead_lc_extraction(name, lc) + else: + print("❌ Invalid selection") + + elif cat == "2": + # Moving Load Ladder + if not hasattr(self.bridge, 'vehicle_load_cases_list') or not self.bridge.vehicle_load_cases_list: + print("❌ No vehicle load cases found.") + continue + + v_lcs = self.bridge.vehicle_load_cases_list + while True: + print("\nSelect Vehicle Case:") + for i, lc in enumerate(v_lcs, 1): + print(f"{i}. {lc.name}") + print("0. Back") + + v_idx = input("Enter choice: ").strip() + if v_idx == "0": break + + if v_idx.isdigit() and 1 <= int(v_idx) <= len(v_lcs): + self._print_single_vehicle_extraction(v_lcs[int(v_idx)-1]) + else: + print("❌ Invalid selection") + else: + print("❌ Invalid option") + continue + else: print("❌ Invalid option") + From 7bc8e22472f86277e8347ee3febb52b1809e17d7 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Fri, 10 Apr 2026 17:46:34 +0530 Subject: [PATCH 137/225] Connect 2D cad, added req.field validation, Design setup - Connect 2D Cad updation with self.input_dict - Single enhanced workflow for validation + 2d cad updation - Added automated required-fields '*' and validation (making field red) - Setup Loading popup on design and 3d-cad render and cleanup on unlock --- .../bridge_types/plate_girder/defaults.py | 6 +- .../bridge_types/plate_girder/ui_fields.py | 17 +- .../bridge_types/plate_girder/validator.py | 3 +- src/osdagbridge/core/utils/common.py | 4 +- src/osdagbridge/desktop/ui/cad_3d.py | 89 +++++-- .../desktop/ui/dialogs/loading_popup.py | 241 ++++++++++++++++++ .../desktop/ui/docks/cad_dual_view.py | 41 ++- .../desktop/ui/docks/dock_utils.py | 28 ++ .../desktop/ui/docks/input_dock.py | 139 +++++++--- .../desktop/ui/{plots_UI.py => plots_ui.py} | 0 src/osdagbridge/desktop/ui/template_page.py | 160 ++++++++---- 11 files changed, 601 insertions(+), 127 deletions(-) create mode 100644 src/osdagbridge/desktop/ui/dialogs/loading_popup.py rename src/osdagbridge/desktop/ui/{plots_UI.py => plots_ui.py} (100%) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/defaults.py b/src/osdagbridge/core/bridge_types/plate_girder/defaults.py index 847e0b7b5..1d6dfcf34 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/defaults.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/defaults.py @@ -512,9 +512,9 @@ def get_ai_median_defaults(median_type: str) -> dict[str, float | None]: DEFAULTS_DICT = { # Input Dock Defaults KEY_STRUCTURE_TYPE: "Highway Bridge", - KEY_PROJECT_LOCATION: None, - KEY_SPAN: DEFAULT_SPAN_M, - KEY_CARRIAGEWAY_WIDTH: DEFAULT_CARRIAGEWAY_WIDTH_M, + KEY_PROJECT_LOCATION: None, # Required field will be none by default + KEY_SPAN: None, + KEY_CARRIAGEWAY_WIDTH: None, KEY_INCLUDE_MEDIAN: "No", KEY_FOOTPATH: "None", KEY_SKEW_ANGLE: DEFAULT_SKEW_ANGLE_DEG, diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index b052dc725..bf83913d0 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -54,6 +54,11 @@ # TYPE_NOTE attr : str — attribute name to set on InputDock so domain logic can call .setVisible() on the label + + # For requied field, tupple[6]["required"] = True, InputDock will check + if the value is filled before design, if not, show error and prevent design. + + # Required field also automatically adds the '*' symbol after the display label, e.g. "Project Location*" """ @@ -111,12 +116,16 @@ def input_values(self): # ── Project Location ────────────────────────────────────────────── (KEY_SECTION_PROJECT, DISP_TITLE_PROJECT, TYPE_TITLE, None, True, "No Validator", - {"container": "main", "show_group_title": False}), + { + "container": "main", + "show_group_title": False + }), - (KEY_PROJECT_LOCATION, "Project Location*", TYPE_BUTTON, None, True, "No Validator", + (KEY_PROJECT_LOCATION, "Project Location", TYPE_BUTTON, None, True, "No Validator", { "action": "show_project_location_dialog", "button_label": "Select Location", + "required": True, }), # ── Geometric Details ───────────────────────────────────────────── @@ -126,12 +135,14 @@ def input_values(self): (KEY_SPAN, KEY_DISP_SPAN, TYPE_TEXTBOX, None, True, "Double Validator", { "placeholder": f"{SPAN_MIN}–{SPAN_MAX} m", + "required": True, }), (KEY_CARRIAGEWAY_WIDTH, KEY_DISP_CARRIAGEWAY_WIDTH, TYPE_TEXTBOX, None, True, "Double Validator", { - "placeholder_dynamic": "_carriageway_placeholder_text" + "placeholder_dynamic": "_carriageway_placeholder_text", + "required": True, }), (KEY_INCLUDE_MEDIAN, "Include Median", TYPE_COMBOBOX, VALUES_NO_YES, diff --git a/src/osdagbridge/core/bridge_types/plate_girder/validator.py b/src/osdagbridge/core/bridge_types/plate_girder/validator.py index b3756bbab..ad47911d6 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/validator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/validator.py @@ -45,7 +45,8 @@ def validate_basic_inputs(self, key: str, inputs: dict) -> dict: min_w = CARRIAGEWAY_WIDTH_MIN_WITH_MEDIAN if median else CARRIAGEWAY_WIDTH_MIN return min_w, "Carriageway width must be specified." - assumed_lanes = 2 if median else 1 + assumed_lanes = 2 if median == 'Yes' else 1 + required_width = IRC5_2015.cl_104_3_1_carriageway_width(carriageway_width, assumed_lanes) if carriageway_width < required_width: diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index 2b0e015ea..83a08e48e 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -74,8 +74,8 @@ DISP_TITLE_PROJECT = "Project Location" KEY_DISP_PROJECT_LOCATION = "City in India*" DISP_TITLE_GEOMETRIC = "Geometric Details" -KEY_DISP_SPAN = "Span*" -KEY_DISP_CARRIAGEWAY_WIDTH = "Carriageway Width*\n(Each way)" +KEY_DISP_SPAN = "Span" +KEY_DISP_CARRIAGEWAY_WIDTH = "Carriageway Width\n(Each way)" KEY_DISP_FOOTPATH = "Footpath" KEY_DISP_SKEW_ANGLE = "Skew Angle" DISP_TITLE_MATERIAL = "Material Inputs" diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index c50ddcba0..58b678c12 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -30,7 +30,6 @@ # Custom 3D Viewer from osdagbridge.desktop.ui.utils.custom_3dviewer import CustomViewer3d - class CAD3DWindow(QWidget): """ Main 3D CAD window for OsdagBridge. @@ -39,14 +38,9 @@ class CAD3DWindow(QWidget): def __init__(self, parent=None): super().__init__(parent) - self.setWindowTitle("OsdagBridge 3D CAD Viewer") - self.resize(1200, 800) - # CAD generator self.generator = PlateGirderCADGenerator() - self.generator.model_data = self.generator.generate() - # Internal CAD state self.viewer = None self.display = None @@ -54,31 +48,27 @@ def __init__(self, parent=None): # UI + CAD setup self.setup_ui() - self.init_display() + self.init_display() # Only initializes the viewer, does NOT render - # UI SETUP + # ── UI SETUP ────────────────────────────────────────────────────────────── def setup_ui(self): - self.layout = QVBoxLayout(self) self.layout.setContentsMargins(0, 0, 0, 0) - # Component selector + # Component selector — hidden until render_3d_cad() is called self.component_selector = BridgeComponentCheckbox(self) self.component_selector.hide() self.layout.addWidget(self.component_selector) - - # CAD INITIALIZATION + # ── CAD INITIALIZATION (viewer only, no render) ─────────────────────────── def init_display(self): """ - CAD initialization. - - - Creates CustomViewer3d - - Defers InitDriver for safety + Initialize the 3D viewer widget only. + Does NOT generate or render any geometry. + Call render_3d_cad() to render the model. """ - load_backend("pyside6") self.viewer = CustomViewer3d(self) @@ -93,36 +83,75 @@ def _deferred_init_driver(self): self.viewer.InitDriver() self._cad_init_pending = False - self._complete_cad_init() - self.load_bridge() def _complete_cad_init(self): """ Complete CAD setup after InitDriver. REQUIRED for hover, selection, view cube. """ - self.display = self.viewer._display self.viewer.context = self.display.Context self.viewer.view = self.display.View self.display.set_bg_gradient_color([255, 255, 255], [126, 126, 126]) - - self.viewer.context.SetAutomaticHilight(False) if hasattr(self.viewer, "display_view_cube"): self.viewer.display_view_cube() - # ADD ZOOM BUTTONS self.create_cad_view_controls() def _is_display_ready(self): return self.display is not None and not self._cad_init_pending - # CAD DISPLAY + # ── RENDER / CLEAR ──────────────────────────────────────────────────────── + + def render_3d_cad(self): + """ + Generate and render the 3D bridge model on the display. + Shows the component selector checkboxes after rendering. + Safe to call multiple times — clears previous model first. + """ + if not self._is_display_ready(): + return + + # Generate fresh model data + self.generator.model_data = self.generator.generate() + + # Render on display + self.load_bridge() + + # Show component selector + self.component_selector.show() + + def clear_3d_cad(self): + """ + Clear the 3D model from the display and hide the component selector. + """ + if not self._is_display_ready(): + return + + # Clear all AIS objects from context + if hasattr(self.viewer, "cleanup_for_new_model"): + self.viewer.cleanup_for_new_model() + self.display.EraseAll() + self.display.Repaint() + + # Reset tracked objects + self.viewer.model_ais_objects = {} + self.viewer.model_hover_labels = {} + if hasattr(self.viewer, "deck_texture_ais"): + self.viewer.deck_texture_ais = [] + + # Hide component selector + self.component_selector.hide() + + # Reset checkboxes to default state (Model checked) + self.component_selector.reset() + + # ── CAD DISPLAY ─────────────────────────────────────────────────────────── def load_bridge(self): if not self._is_display_ready(): return @@ -527,6 +556,18 @@ def _on_click(self, component_key, clicked_cb, checked): model_cb.setChecked(True) model_cb.blockSignals(False) self.parent.show_full_model() + + def reset(self): + """Reset all checkboxes to default state (Model selected, others unchecked).""" + for cb in self.checkboxes: + cb.blockSignals(True) + cb.setChecked(False) + cb.blockSignals(False) + + # Re-check "Model" as default + self.checkboxes[0].blockSignals(True) + self.checkboxes[0].setChecked(True) + self.checkboxes[0].blockSignals(False) # Standalone Testing---------------------------- def main(): diff --git a/src/osdagbridge/desktop/ui/dialogs/loading_popup.py b/src/osdagbridge/desktop/ui/dialogs/loading_popup.py new file mode 100644 index 000000000..30f1c7225 --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/loading_popup.py @@ -0,0 +1,241 @@ +import sys +import multiprocessing as mp +from PySide6.QtWidgets import QApplication, QVBoxLayout, QDialog, QLabel +from PySide6.QtCore import Qt, QTimer +from PySide6.QtGui import QPainter, QColor, QPen, QIcon + +class CircularProgressWidget(QLabel): + def __init__(self, is_light_theme, parent=None): + super().__init__(parent) + self.angle = 0 + self.is_light_theme = is_light_theme + self.setFixedSize(100, 100) + + # Higher frame rate for smoother motion + self.timer = QTimer() + self.timer.timeout.connect(self.rotate) + # ~60 FPS for ultra smooth animation + self.timer.start(16) + + def rotate(self): + # Smaller increment for ultra-smooth rotation (3 degrees instead of 6) + self.angle = (self.angle - 6) % 360 + self.update() + + def paintEvent(self, event): + painter = QPainter(self) + + # Enable high-quality rendering + painter.setRenderHint(QPainter.RenderHint.Antialiasing, True) + painter.setRenderHint(QPainter.RenderHint.SmoothPixmapTransform, True) + + # Calculate center and radius using integers from the start + rect = self.rect() + center_x = rect.width() // 2 + center_y = rect.height() // 2 + radius = min(center_x, center_y) - 12 + + # Ensure all coordinates are integers + x = center_x - radius + y = center_y - radius + w = 2 * radius + h = 2 * radius + + # Set up pen with precise width + pen = QPen() + pen.setWidthF(3.0) # Use floating point width + pen.setCapStyle(Qt.PenCapStyle.RoundCap) + pen.setJoinStyle(Qt.PenJoinStyle.RoundJoin) + + # Draw background circle with subtle color + pen.setColor(QColor(230, 230, 230)) # Lighter background + painter.setPen(pen) + painter.drawEllipse(x, y, w, h) + + # Draw progress arc with precise positioning + # Simplified theme detection - you can pass theme via pipe if needed + if self.is_light_theme: + pen.setColor(QColor(0x90, 0xAF, 0x13)) #90AF13 + else: + pen.setColor(QColor(0x6B, 0x7D, 0x20)) #6B7D20 + painter.setPen(pen) + + # Use integer angles + start_angle = int(self.angle * 16) # Qt uses 16ths of a degree + span_angle = 80 * 16 # Arc span + + painter.drawArc(x, y, w, h, start_angle, span_angle) + + def stop_animation(self): + self.timer.stop() + + +class ModernLoadingDialog(QDialog): + def __init__(self, parent=None, is_light_theme=True): + super().__init__(parent) + self.is_light_theme = is_light_theme + self.setWindowFlag(Qt.WindowType.FramelessWindowHint) + self.setModal(False) # Changed to False since it's in separate process + self.setFixedSize(220, 170) + try: + self.setWindowIcon(QIcon(":/images/osdag_logo.png")) + except: + pass # Ignore if icon not available + self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground, True) + # Keep window on top + self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint) + + # Set up layout + layout = QVBoxLayout() + layout.setAlignment(Qt.AlignmentFlag.AlignCenter) + layout.setSpacing(15) + layout.setContentsMargins(12, 12, 12, 12) + + # Add circular progress widget + self.circular_progress = CircularProgressWidget(is_light_theme) + layout.addWidget(self.circular_progress, alignment=Qt.AlignmentFlag.AlignCenter) + + # Add loading text + self.loading_label = QLabel("Loading...") + self.loading_label.setAlignment(Qt.AlignmentFlag.AlignCenter) + self.loading_label.setObjectName("loading_label") + if self.is_light_theme: + self.loading_label.setStyleSheet(""" + QLabel#loading_label{ + font-size: 15px; + font-weight: 500; + color: #444444; + margin-top: 5px; + } + """) + else: + self.loading_label.setStyleSheet(""" + QLabel#loading_label{ + font-size: 15px; + font-weight: 500; + color: #D0D0D0; + margin-top: 5px; + } + """) + + layout.addWidget(self.loading_label) + self.setLayout(layout) + + # Center on screen + self.center_on_screen() + + def center_on_screen(self): + """Center the dialog in the middle of the screen""" + screen = QApplication.primaryScreen() + screen_geometry = screen.availableGeometry() + + x = (screen_geometry.width() - self.width()) // 2 + y = (screen_geometry.height() - self.height()) // 2 + + self.move(x, y) + + def closeEvent(self, event): + self.circular_progress.stop_animation() + super().closeEvent(event) + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.RenderHint.Antialiasing, True) + painter.setRenderHint(QPainter.RenderHint.SmoothPixmapTransform, True) + + rect = self.rect().adjusted(0, 0, -1, -1) + radius = 12 + + # Fill rounded rectangle + painter.setPen(Qt.PenStyle.NoPen) + if self.is_light_theme: + painter.setBrush(QColor(255, 255, 255, 250)) + else: + painter.setBrush(QColor(56, 56, 56, 250)) + painter.drawRoundedRect(rect, radius, radius) + + # Draw subtle border + pen = QPen(QColor(200, 200, 200, 204)) + pen.setWidth(1) + pen.setCapStyle(Qt.PenCapStyle.RoundCap) + pen.setJoinStyle(Qt.PenJoinStyle.RoundJoin) + painter.setPen(pen) + painter.setBrush(Qt.BrushStyle.NoBrush) + painter.drawRoundedRect(rect, radius, radius) + + super().paintEvent(event) + + +def run_loading_dialog_process(stop_event, is_light_theme=True): + """ + Function to run in separate process + Args: + stop_event: multiprocessing.Event to signal when to close + is_light_theme: bool indicating theme preference + """ + app = QApplication(sys.argv) + dialog = ModernLoadingDialog(is_light_theme=is_light_theme) + + # Check stop event periodically + timer = QTimer() + timer.timeout.connect(lambda: dialog.close() if stop_event.is_set() else None) + timer.start(100) # Check every 100ms + + dialog.show() + app.exec() + +class LoadingDialogManager: + """ + Manager class to control the loading dialog. + Uses in-process dialog on Linux to avoid window duplication issues. + Uses separate process on Windows/macOS for better performance. + """ + def __init__(self, is_light_theme=True): + self.process = None + self.stop_event = None + self.is_light_theme = is_light_theme + self._dialog = None # For in-process mode + + # Detect OS - Linux has issues with multiprocess GUI windows + import platform + self._use_process = platform.system() != "Linux" + + def show(self): + """Show the loading dialog""" + if self._use_process: + # Windows/macOS - use separate process + if self.process is not None and self.process.is_alive(): + return # Already running + + self.stop_event = mp.Event() + self.process = mp.Process( + target=run_loading_dialog_process, + args=(self.stop_event, self.is_light_theme) + ) + self.process.start() + else: + # Linux - use in-process dialog to avoid duplicate window issues + if self._dialog is None: + self._dialog = ModernLoadingDialog(is_light_theme=self.is_light_theme) + self._dialog.show() + + def hide(self): + """Hide the loading dialog""" + if self._use_process: + if self.process is not None and self.process.is_alive(): + self.stop_event.set() + self.process.join(timeout=2) # Wait up to 2 seconds + if self.process.is_alive(): + self.process.terminate() # Force terminate if still running + self.process = None + self.stop_event = None + else: + # Linux - close in-process dialog + if self._dialog is not None: + self._dialog.hide() + self._dialog.circular_progress.stop_animation() + self._dialog = None + + def __del__(self): + """Cleanup when manager is destroyed""" + self.hide() \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py index b29acce39..8208107a7 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py @@ -163,40 +163,55 @@ def update_from_osdag_inputs(self, input_dict): # Map span (meters to mm) if KEY_SPAN in input_dict: - params['span_length'] = float(input_dict[KEY_SPAN]) * 1000 + if input_dict[KEY_SPAN] is not None: + params['span_length'] = float(input_dict[KEY_SPAN]) * 1000 # Map carriageway width (meters to mm) if KEY_CARRIAGEWAY_WIDTH in input_dict: - params['carriageway_width'] = float(input_dict[KEY_CARRIAGEWAY_WIDTH]) * 1000 + if input_dict[KEY_CARRIAGEWAY_WIDTH] is not None: + params['carriageway_width'] = float(input_dict[KEY_CARRIAGEWAY_WIDTH]) * 1000 # Map skew angle (degrees) if KEY_SKEW_ANGLE in input_dict: - params['skew_angle'] = float(input_dict[KEY_SKEW_ANGLE]) + if input_dict[KEY_SKEW_ANGLE] is not None: + params['skew_angle'] = float(input_dict[KEY_SKEW_ANGLE]) # Map number of girders if KEY_NO_OF_GIRDERS in input_dict: params['num_girders'] = int(input_dict[KEY_NO_OF_GIRDERS]) - + else: + params['num_girders'] = 4 # Add default values if not present + # Map girder spacing (meters to mm) if KEY_GIRDER_SPACING in input_dict: params['girder_spacing'] = float(input_dict[KEY_GIRDER_SPACING]) * 1000 - + else: + params['girder_spacing'] = 2.75 * 1000 # Add default values if not present + # Map deck overhang (meters to mm) if KEY_DECK_OVERHANG in input_dict: params['deck_overhang'] = float(input_dict[KEY_DECK_OVERHANG]) * 1000 - + else: + params['deck_overhang'] = 1.0 * 1000 # Add default values if not present + # Map deck thickness (mm) if KEY_DECK_THICKNESS in input_dict: params['deck_thickness'] = float(input_dict[KEY_DECK_THICKNESS]) - + else: + params['deck_thickness'] = 200 # Add default values if not present + # Map footpath width (meters to mm) if KEY_FOOTPATH_WIDTH in input_dict: params['footpath_width'] = float(input_dict[KEY_FOOTPATH_WIDTH]) * 1000 - + else: + params['footpath_width'] = 1.5 * 1000 # Add default values if not present + # Map footpath thickness (mm) if KEY_FOOTPATH_THICKNESS in input_dict: params['footpath_thickness'] = float(input_dict[KEY_FOOTPATH_THICKNESS]) - + else: + params['footpath_thickness'] = 200 # Add default values if not present + if "crash_barrier_type" in input_dict: params['crash_barrier_type'] = input_dict["crash_barrier_type"] @@ -265,10 +280,12 @@ def update_from_osdag_inputs(self, input_dict): # Map cross bracing spacing (meters to mm) if KEY_CROSS_BRACING_SPACING in input_dict: params['cross_bracing_spacing'] = float(input_dict[KEY_CROSS_BRACING_SPACING]) * 1000 - + else: + params['cross_bracing_spacing'] = 3.5 * 1000 # Add default values if not present + # Map median present if KEY_INCLUDE_MEDIAN in input_dict: - params['median_present'] = bool(input_dict[KEY_INCLUDE_MEDIAN]) + params['median_present'] = bool(input_dict[KEY_INCLUDE_MEDIAN] == "Yes") # When enabling median from homepage and no median_type was set yet, # provide a sensible default so the CAD can draw a shape. if params['median_present'] and 'median_type' not in input_dict: @@ -282,8 +299,6 @@ def update_from_osdag_inputs(self, input_dict): params["median_height"] = geom["kerb_height"] elif "barrier_height" in geom: params["median_height"] = geom["barrier_height"] - - print(f"@@{params}") # Update both widgets with same parameters self.cross_section_widget.update_params(params) diff --git a/src/osdagbridge/desktop/ui/docks/dock_utils.py b/src/osdagbridge/desktop/ui/docks/dock_utils.py index 109d9e0f6..3bf03837a 100644 --- a/src/osdagbridge/desktop/ui/docks/dock_utils.py +++ b/src/osdagbridge/desktop/ui/docks/dock_utils.py @@ -29,6 +29,13 @@ def apply_field_style(widget): border: 1px solid black; color: black; } + QComboBox:disabled{ + padding: 1px 7px; + border: 1px solid #666; + border-radius: 5px; + background-color: #f1f1f1; + color: #666; + } """) elif isinstance(widget, QLineEdit): widget.setStyleSheet(""" @@ -39,4 +46,25 @@ def apply_field_style(widget): background-color: white; color: #000000; } + QLineEdit[error='true'] { + padding: 1px 7px; + border: 1px solid #FF0000; + border-radius: 6px; + background-color: white; + color: #000000; + } + QLineEdit:disabled { + padding: 1px 7px; + border: 1px solid #070707; + border-radius: 6px; + background-color: #f1f1f1; + color: #666; + } + QLineEdit[error='true']:disabled { + padding: 1px 7px; + border: 1px solid #FF0000; + border-radius: 6px; + background-color: #f1f1f1; + color: #666; + } """) diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index a7bf72a4d..98b6927b7 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -42,10 +42,12 @@ " left:8px; padding:0 4px; margin-top:4px; background-color:white; color:#333; }" ) ACTION_BTN_STYLE = ( - "QPushButton { background-color:#90AF13; color:white; font-weight:bold; border:none;" + "QPushButton { background-color:#90AF13; border: 1px solid #90AF13; color:white; font-weight:bold; border:none;" " border-radius:4px; padding:8px 20px; font-size:11px; min-width:80px; }" - "QPushButton:hover { background-color:#7a9a12; }" - "QPushButton:disabled { background:#D0D0D0; color:#666; }" + "QPushButton:hover { background-color:#7a9a12; border: 1px solid #7a9a12;}" + "QPushButton:disabled { background:#D0D0D0; color:#666; border: 1px solid #D0D0D0;}" + "QPushButton[error='true'] { background:#FF0000; color:#FFFFFF; border: 1px solid #FF0000;}" + "QPushButton[error='true']:disabled { background:#D0D0D0; color:#666; border: 1px solid #FF0000; }" ) LABEL_STYLE = "QLabel { color:#000; font-size:12px; background:transparent; }" @@ -178,7 +180,7 @@ def _build_top_bar(self) -> QHBoxLayout: self.lock_btn.clicked.connect(self.toggle_lock) top_bar.addWidget(self.lock_btn) - self.lock_btn_tooltip = QLabel("Unlock to Edit") + self.lock_btn_tooltip = QLabel("🔒 Unlock to Edit") self.lock_btn_tooltip.setStyleSheet(""" QLabel { background-color:#f1f1f1; color:#000; border:1px solid #90AF13; padding:4px; font-size:15px; border-radius:0px; } @@ -262,6 +264,14 @@ def parent_for(meta) -> QVBoxLayout: ) meta = meta or {} + # If "required": True, add '*' to Label + if meta.get("required", False): + if '\n' in label: # for case like Carriageway Width\n(Each way) + idx = label.index('\n') + label = label[:idx] + '*' + label[idx:] + else: + label = label + '*' + if ftype == TYPE_MODULE: continue @@ -288,7 +298,7 @@ def parent_for(meta) -> QVBoxLayout: glayout.addLayout(self._field_row(label, self._make_textbox(key, validator, meta), meta)) elif ftype == TYPE_BUTTON: - glayout.addLayout(self._make_button_row(label, meta)) + glayout.addLayout(self._make_button_row(key, label, meta)) elif ftype == TYPE_NOTE: note = QLabel(label or "") @@ -339,9 +349,9 @@ def _make_combobox(self, key, values, meta) -> NoScrollComboBox: if idx >= 0: widget.setCurrentIndex(idx) - # Signal the change in value so to update the input_dictionary + # Signal that change in value so to update the input_dictionary widget.currentTextChanged.connect( - lambda text, k=key: self._on_field_changed(k, text) + lambda text, k=key: self._on_field_edited(k, text) ) # Wire generic on_changed callbacks declared in schema. @@ -392,15 +402,15 @@ def _make_textbox(self, key, validator, meta) -> QLineEdit: if default is not None: widget.setText(str(default)) - # Signal when value changed to update input_dictionary - widget.textChanged.connect( - lambda text, k=key: self._on_field_changed(k, text) - ) - # Validation on focus-out — mandatory for all textbox fields # This will validate the input, either it say nothing or popup warning and set specific valid value widget.editingFinished.connect( - lambda k=key, w=widget: self._validate_field(k, w) + lambda k=key, w=widget: self._on_field_edited(k, w) + ) + + # For soft-validation while value is being edited in the textbox + widget.textChanged.connect( + lambda text, k=key: self._on_field_editing(text, k) ) # Extra callbacks declared in schema @@ -411,7 +421,7 @@ def _make_textbox(self, key, validator, meta) -> QLineEdit: return widget - def _make_button_row(self, label: str, meta: dict) -> QHBoxLayout: + def _make_button_row(self, key: str, label: str, meta: dict) -> QHBoxLayout: """ [Label | Action Button] row. label → tuple[1] @@ -429,6 +439,7 @@ def _make_button_row(self, label: str, meta: dict) -> QHBoxLayout: btn_text = meta.get("button_label") btn = QPushButton(btn_text) + btn.setObjectName(key) btn.setCursor(Qt.CursorShape.PointingHandCursor) btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) btn.setStyleSheet(ACTION_BTN_STYLE) @@ -437,6 +448,8 @@ def _make_button_row(self, label: str, meta: dict) -> QHBoxLayout: btn.clicked.connect(cb) else: btn.setEnabled(False) + # Reset required-validation error-state (red) + btn.clicked.connect(lambda _, widget=btn: self.reset_error_state(widget)) row.addWidget(btn, 1) return row @@ -690,7 +703,7 @@ def _show_material_info(self, key: str): def show_project_location_dialog(self): dialog = ProjectLocationDialog() if dialog.exec() == QDialog.Accepted: - self._on_field_changed(KEY_PROJECT_LOCATION, dialog.get_selected_location()) + self._update_input_dict(KEY_PROJECT_LOCATION, dialog.get_selected_location()) def show_additional_inputs(self): self._open_additional_inputs() @@ -742,6 +755,11 @@ def _on_additional_inputs_closed(self): def toggle_lock(self): self.is_locked = not self.is_locked + + if not self.is_locked: + # Clear 3D-Cad + self.parent.cad_3d_widget.clear_3d_cad() + self.lock_btn.setChecked(self.is_locked) self.scroll_area.setDisabled(self.is_locked) self._sync_lock_icon() @@ -792,37 +810,94 @@ def resizeEvent(self, event): if self.parent and hasattr(self.parent, "update_docking_icons"): self.parent.update_docking_icons(input_is_active=self.width() > 0) - # Validate the value of text box and show warning and set valid value - def _validate_field(self, key: str, widget: QLineEdit): + def reset_error_state(self, widget: QWidget): + """Reset error='true' property to remove red highlight.""" + if widget and widget.property("error"): + widget.setProperty("error", False) + widget.style().unpolish(widget) + widget.style().polish(widget) + + def _on_field_edited(self, key: str, widget: QLineEdit | str): """ - Called on editingFinished for validated textbox fields. - Reads widget value, validates against current input_dict, - corrects the widget and input_dict if needed, shows message. + Called on editingFinished (QLineEdit) or currentTextChanged (QComboBox). + - QComboBox: always valid, skip validation, update dict + CAD. + - QLineEdit: hard validation — corrects widget + input_dict if invalid, shows popup. """ + # QComboBox passes str directly via currentTextChanged + if isinstance(widget, str): + self._update_input_dict(key, widget) + self.input_value_changed.emit() + return + + current_text = widget.text().strip() + + # Update dict first so validator reads the latest value + self._update_input_dict(key, current_text) + + # hard-validation start ---------------------- result = self.validator.validate_basic_inputs(key, self.parent.input_dict) - if result is None: + if result is not None: + corrected, message = result + CustomMessageBox( + title="Input Error", + text=message, + dialogType=MessageBoxType.Warning + ).exec() + # update to valid text + widget.blockSignals(True) + widget.setText(str(corrected)) + widget.blockSignals(False) + self._update_input_dict(key, str(corrected)) + # hard-validation end ---------------------- + + # Always update CAD after hard validation + self.input_value_changed.emit() + + + def _on_field_editing(self, current_text: str, key: str): + """ + Soft validation — called on textChanged (while typing). + No popups, no corrections. Updates dict + CAD only when valid. + """ + + # Always reset error state while typing + widget = self.input_widget.findChild(QWidget, key) + if widget and widget.property("error"): + widget.setProperty("error", False) + widget.style().unpolish(widget) + widget.style().polish(widget) + + if not current_text.strip(): + # Empty — fall back to default silently + self._update_input_dict(key, "") + self.input_value_changed.emit() return - corrected, message = result - widget.setText(str(corrected)) - # Update value in input_dict - self._on_field_changed(key, str(corrected)) - CustomMessageBox( - title="Input Error", - text=message, - dialogType=MessageBoxType.Warning - ).exec() + # Update dict first so validator reads the latest value + self._update_input_dict(key, current_text) + + # soft-validation start ---------------------- + result = self.validator.validate_basic_inputs(key, self.parent.input_dict) + if result is not None: + # Still typing, value not valid yet — skip CAD update + return + # soft-validation end ---------------------- + + # Valid - update CAD + self.input_value_changed.emit() + # ══════════════════════════════════════════════════════════════════════════ # Inputs Saving using input_dictionary # ══════════════════════════════════════════════════════════════════════════ # Update input_dictionary on value changed - def _on_field_changed(self, key: str, value: str): + def _update_input_dict(self, key: str, value: str): """ Called on every widget value change. If value is empty/None, falls back to DEFAULTS_DICT. Updates parent input_dict and notifies listeners. """ + if hasattr(self.parent, "input_dict"): # If Empty or None Value then set the default # print(f"@Change: {value}, default: {DEFAULTS_DICT.get(key)}") @@ -834,8 +909,6 @@ def _on_field_changed(self, key: str, value: str): else: print("[ERROR]: template_page.input_dictionary Not Found") - - self.input_value_changed.emit() def _collect_basic_inputs(self) -> list[dict]: out = [] diff --git a/src/osdagbridge/desktop/ui/plots_UI.py b/src/osdagbridge/desktop/ui/plots_ui.py similarity index 100% rename from src/osdagbridge/desktop/ui/plots_UI.py rename to src/osdagbridge/desktop/ui/plots_ui.py diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 460953fbb..ddd471bae 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -1,7 +1,7 @@ import sys from PySide6.QtWidgets import ( QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, - QMenuBar, QSplitter, QSizePolicy, QPushButton, QScrollArea, QFrame, + QMenuBar, QSplitter, QSizePolicy, QPushButton, QLineEdit, QComboBox, ) from PySide6.QtSvgWidgets import QSvgWidget from PySide6.QtCore import Qt, QFile, QTextStream, Signal,QTimer @@ -12,6 +12,9 @@ from osdagbridge.desktop.ui.docks.log_dock import LogDock from osdagbridge.desktop.ui.docks.cad_dual_view import BridgeDualCADWidget from osdagbridge.desktop.ui.dialogs.additional_inputs import AdditionalInputs +from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType +from osdagbridge.desktop.ui.dialogs.loading_popup import LoadingDialogManager +from osdagbridge.desktop.ui.cad_3d import CAD3DWindow from osdagbridge.core.bridge_types.plate_girder.ui_fields import FrontendData from osdagbridge.core.bridge_types.plate_girder.defaults import DEFAULTS_DICT @@ -98,6 +101,8 @@ def __init__(self, title: str, backend: object, parent=None): # Must be initialized BEFORE init_ui because init_ui calls update_cad_from_inputs self.cad_state = {} + self.init_ui() + def init_ui(self): # Docking icons Parent class class ClickableSvgWidget(QSvgWidget): @@ -234,12 +239,12 @@ def mousePressEvent(self, event): # from osdagbridge.desktop.ui.cad_3d import CAD3DWindow # 3D CAD placeholder (mutually exclusive with dual view + plots) - self.cad_3d_widget = CentralPlaceholderWidget("3D CAD Here") + self.cad_3d_widget = CAD3DWindow() self.cad_3d_widget.setVisible(False) self.cad_log_splitter.addWidget(self.cad_3d_widget) # Plots placeholder (mutually exclusive with dual view + 3d cad) - from osdagbridge.desktop.ui.plots_UI import PlotWidget + from osdagbridge.desktop.ui.plots_ui import PlotWidget self.plots_widget = PlotWidget() self.plots_widget.setVisible(False) self.cad_log_splitter.addWidget(self.plots_widget) @@ -294,18 +299,96 @@ def mousePressEvent(self, event): #-------Common-Design-Save-Additional-Inputs-Functionality-START------- + def validate_required_inputs(self): + """Check that all required fields have values before allowing design to proceed.""" + required_field_keys = [] + + # Collect empty field keys + for tupple in self.backend.input_values(): + key, label, _, _, _, _, meta_data = tupple + if meta_data.get("required", False): + required_field_keys.append((key, label)) + + empty_widgets = [] + # collect empty required widgets + for key, label in required_field_keys: + widget = self.input_dock.input_widget.findChild(QWidget, key) + # print(f"[DEBUG] Validating required field '{key}' with widget: {widget}") + # Do check for QLineEdit + # Since QComboBox always has a value (the first option) + if isinstance(widget, QLineEdit): + if widget.text().strip() == "": + empty_widgets.append((widget, label)) + # This is for other options like Project Locations which is to be checked in self.input_dict + elif not isinstance(widget, QComboBox): + value = self.input_dict.get(key) + if value in [None, "", [], {}]: # Check for empty values + empty_widgets.append((widget, label)) + + # If empty widgets, show error popup and color the fields red + message = "Please fill in the required(*) fields before proceeding:\n" + if empty_widgets: + for widget, label in empty_widgets: + # Collecting label name to show in popup message + message += f" - {label.replace('\n', ' ')}\n" # Replace \n with space for better readability + # Highlight widget with red color + widget.setProperty("error", True) + widget.style().unpolish(widget) + widget.style().polish(widget) + + # Show error popup + CustomMessageBox( + title="Empty Required Fields", + text=message, + dialogType=MessageBoxType.Critical + ).exec() + return False # Validation failed + return True # Validation passed + + def _start_loading(self): + """Start loading popup""" + import time + self.loading = LoadingDialogManager() + self.loading.show() + self.setEnabled(False) + time.sleep(1) + + def _finish_loading(self): + """Close the loading dialog box""" + import time + time.sleep(1) + if hasattr(self, 'loading') and self.loading is not None: + self.loading.hide() + self.setEnabled(True) + def common_design_func(self, trigger: str): """ Trigger belongs to one of ["Design", "Save", "Additional Inputs"] """ - print(f"@plot:{self.plots_view_active}") - print(f"@3d:{self.cad_3d_view_active}") - print(f"@top:{self.top_view_active}") - print(f"@c/s:{self.cross_section_active}") + # print(f"[DEBUG]plot:{self.plots_view_active}") + # print(f"[DEBUG]3d:{self.cad_3d_view_active}") + # print(f"[DEBUG]top:{self.top_view_active}") + # print(f"[DEBUG]c/s:{self.cross_section_active}") + from pprint import pprint + print("\n@@input_dictionary:\n") + pprint(self.input_dict) + + # Check required fields + required_widget_validated = self.validate_required_inputs() + if not required_widget_validated: + return # Stop design process if validation fails + + # Call Additional Input Defaults + additional_inputs_dict = {} + self.input_dict.update(additional_inputs_dict) + if trigger == "Design": + + # Start-Loading-popup--------------------------------------------- + self._start_loading() + # Collect all the values from input Dock and pass to backend self.backend.set_input(self.input_dict) - print(f"@@input_dictionary: {self.input_dict}") self.backend.design() # Lock the input dock after design is triggered @@ -317,9 +400,20 @@ def common_design_func(self, trigger: str): loadcases = self.backend.get_available_loadcases() nodes, members = self.backend.get_nodes_members() self.plots_widget.setup(ds_all, loadcases, nodes, members) + + # Render 3D cad using the parameters from Backend + self.cad_3d_widget.render_3d_cad() + + # Close-loading-popup--------------------------------------------- + self._finish_loading() + + # Focus 3D-Cad widget + self.cad_3d_view_toggle(force_show=True) + elif trigger == "Save": # Collect all the values from input Dock and save to osi/csv pass + elif trigger == "Additional Inputs": # Show Additional Inputs pass @@ -331,53 +425,23 @@ def setup_cad_connections(self): # Connect to input dock's value changed signals # This will update the CAD whenever any input field changes if hasattr(self.input_dock, 'input_value_changed'): - self.input_dock.input_value_changed.connect(self.update_cad_from_inputs) - - def open_additional_inputs(self): - """ - Open Additional Inputs dialog and route values through CAD interface - """ - dialog = AdditionalInputs(parent=self) - - if dialog.exec(): - # Get values ONLY (do not update CAD directly) - values = dialog.get_all_values() - - if values: - self.update_cad_state("additional_inputs", values) - - def update_cad_state(self, source: str, values: dict): - """ - Central CAD interface (single source of truth) - source: 'input_dock' | 'additional_inputs' - """ - if not values: - return - - # 1. Store state - self.cad_state.update(values) - - # 2. Apply state to CAD UI ONLY - if hasattr(self, 'cad_comp_widget'): - self.cad_comp_widget.update_from_osdag_inputs(self.cad_state) + self.input_dock.input_value_changed.connect(self.update_cad_from_inputs) def update_cad_from_inputs(self): """ - Collect inputs from InputDock and send to CAD interface + Collect inputs from InputDock and update 2D-CAD """ if not self.input_dock: return - input_values = self.input_dock.get_all_input_values() - # print("[DEBUG] Collected input values from InputDock:", input_values) - - if not input_values: - return - # IMPORTANT: send ONLY to interface - # self.update_cad_state("input_dock", input_values) + # 1. Store state + self.cad_state.update(self.input_dict) + # 2. Apply state to CAD UI + if hasattr(self, 'cad_comp_widget'): + self.cad_comp_widget.update_from_osdag_inputs(self.cad_state) #---------------------------------Docking-Icons-Functionality-START---------------------------------------------- @@ -451,10 +515,10 @@ def top_view_toggle(self): self.cad_comp_widget.set_top_view_visible(self.top_view_active) - def cad_3d_view_toggle(self): + def cad_3d_view_toggle(self, force_show=False): self.cad_3d_view_active = not self.cad_3d_view_active - if self.cad_3d_view_active: + if self.cad_3d_view_active or force_show: # 3D CAD is mutually exclusive — deactivate Plots & update icon self.plots_view_active = False self.plots_control.load(":/vectors/view_btn/plots_inactive.svg") @@ -840,7 +904,7 @@ def create_menu_bar_items(self): design_prefs_action = QAction("Additional Inputs", self) design_prefs_action.setShortcut(QKeySequence("Alt+P")) edit_menu.addAction(design_prefs_action) - design_prefs_action.triggered.connect(self.open_additional_inputs) + design_prefs_action.triggered.connect(lambda _: print("Open Additional Input")) graphics_menu = self.menu_bar.addMenu("Graphics") From ef52da2c473cc328d037ace3596ff1d0ebe47569 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sat, 11 Apr 2026 17:17:19 +0530 Subject: [PATCH 138/225] Created DTO for 3D CAD Bridge design parameters --- .../plate_girder/cad_generator.py | 206 ++++++++---------- .../core/bridge_types/plate_girder/dto.py | 129 ++++++++++- src/osdagbridge/desktop/ui/cad_3d.py | 106 ++++++++- src/osdagbridge/desktop/ui/template_page.py | 115 +++++++++- 4 files changed, 433 insertions(+), 123 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index ef9b3ab60..11ccf8094 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -48,6 +48,10 @@ build_cross_bracings ) +from osdagbridge.core.bridge_types.plate_girder.dto import ( + BridgeParametersDTO, +) + # Component keys for CAD organization KEY_CAD_GIRDER = "Girder" KEY_CAD_STIFFENER = "Stiffener" @@ -127,154 +131,130 @@ class PlateGirderCADGenerator: """ def __init__(self, bridge_type=KEY_MODULE_PG): - """ - Initialize the CAD generator with default parameters. - - Args: - bridge_type: Type of bridge module (default: Plate Girder) - """ + self.bridge_type = bridge_type + self.model_data = {} + self.display = None + self.cad_widget = None + self.component = None + def _set_parameters(self, design_params: BridgeParametersDTO): # GIRDER PARAMETERS - self.span_length_L = 25000 # Total span length (mm) - - self.girder_section_d = 900 # Clear web depth (mm) - self.girder_section_bf = 500 # Top flange width (mm) - self.girder_section_bf_b = 500 # Bottom flange width (mm) - self.girder_section_tf = 260 # Top flange thickness (mm) - self.girder_section_tf_b = 260 # Bottom flange thickness (mm) - self.girder_section_tw = 100 # Web thickness (mm) - - self.num_girders = 5 # Number of girders - self.girder_spacing = 2750 # Center-to-center spacing (mm) + self.span_length_L = design_params.span_length_L + self.girder_section_d = design_params.girder_section_d + self.girder_section_bf = design_params.girder_section_bf + self.girder_section_bf_b = design_params.girder_section_bf_b + self.girder_section_tf = design_params.girder_section_tf + self.girder_section_tf_b = design_params.girder_section_tf_b + self.girder_section_tw = design_params.girder_section_tw + self.num_girders = design_params.num_girders + self.girder_spacing = design_params.girder_spacing # GEOMETRY PARAMETERS - self.skew_angle = 0 # Skew angle in degrees (0 = no skew) + self.skew_angle = design_params.skew_angle # DECK PARAMETERS - self.carriageway_width = 12000 # Width of traffic lanes (mm) - self.deck_thickness = 400 # Deck slab thickness (mm) - - self.footpath_config = "BOTH" # "NONE" / "LEFT" / "RIGHT" / "BOTH" - self.footpath_width = 1500 # Footpath width (mm) - self.railing_width = 300 # Railing width (mm) + self.carriageway_width = design_params.carriageway_width + self.deck_thickness = design_params.deck_thickness + self.footpath_config = design_params.footpath_config + self.footpath_width = design_params.footpath_width + self.railing_width = design_params.railing_width # CRASH BARRIER PARAMETERS - self.barrier_type = "Semi-Rigid" # "Rigid", "Semi-Rigid", or "Flexible" - self.crash_barrier_subtype = "Double W-beam" # Specific barrier design - - # Options: - # - Rigid: "IRC-5R", "High Containment" - # - Semi-Rigid/Metallic: "Single W-beam", "Double W-beam" + self.barrier_type = design_params.barrier_type + self.crash_barrier_subtype = design_params.crash_barrier_subtype # MEDIAN PARAMETERS - self.enable_median = True # Include median barrier - self.median_type = "Metallic Crash Barrier" - # Options: "Raised Kerb", "RCC Crash Barrier", "Metallic Crash Barrier" + self.enable_median = design_params.enable_median + self.median_type = design_params.median_type # RAILING PARAMETERS - self.rail_count = 3 # Number of rails - self.railing_type = "rcc" # "rcc" or "steel" + self.rail_count = design_params.rail_count + self.railing_type = design_params.railing_type # STIFFENER PARAMETERS - - # Intermediate stiffener configuration - self.include_intermediate_stiffeners = True # Include intermediate stiffeners - self.intermediate_stiffener_spacing = 2000 # Spacing between intermediate stiffeners (mm) - self.intermediate_stiffener_thickness = 20 # Intermediate stiffener thickness (mm) - self.intermediate_stiffener_outstand = None # outstand for intermediate stiffeners - - # End stiffener configuration - self.num_end_stiffener_pairs = 4 # Number of end stiffener pairs on each end - self.end_stiffener_thickness = 30 # End stiffener thickness (mm) - self.end_stiffener_outstand = None # outstand for end stiffeners - - # Longitudinal stiffener configuration - self.include_longitudinal_stiffeners = True # Whether to include longitudinal stiffeners - self.num_longitudinal_stiffeners = 2 # Number of longitudinal stiffeners (1 or 2) - self.longitudinal_stiffener_thickness = 20 # Thickness of longitudinal stiffeners (mm) - self.longitudinal_stiffener_outstand = None # outstand for longitudinal stiffeners + self.include_intermediate_stiffeners = design_params.include_intermediate_stiffeners + self.intermediate_stiffener_spacing = design_params.intermediate_stiffener_spacing + self.intermediate_stiffener_thickness = design_params.intermediate_stiffener_thickness + self.intermediate_stiffener_outstand = design_params.intermediate_stiffener_outstand - # CROSS BRACING PARAMETERS - self.cross_bracing_spacing = 4000 # Spacing between bracing frames (mm) + self.num_end_stiffener_pairs = design_params.num_end_stiffener_pairs + self.end_stiffener_thickness = design_params.end_stiffener_thickness + self.end_stiffener_outstand = design_params.end_stiffener_outstand - self.bracing_type = "X" # "X" or "K" - self.x_bracket_option = "BOTH" # For X-bracing: "NONE", "UPPER", "LOWER", "BOTH" - self.k_top_bracket = True # For K-bracing: include top bracket + self.include_longitudinal_stiffeners = design_params.include_longitudinal_stiffeners + self.num_longitudinal_stiffeners = design_params.num_longitudinal_stiffeners + self.longitudinal_stiffener_thickness = design_params.longitudinal_stiffener_thickness + self.longitudinal_stiffener_outstand = design_params.longitudinal_stiffener_outstand - # Diagonal members section configuration - self.diagonal_section_type = "ANGLE" + # CROSS BRACING PARAMETERS + self.cross_bracing_spacing = design_params.cross_bracing_spacing + self.bracing_type = design_params.bracing_type + self.x_bracket_option = design_params.x_bracket_option + self.k_top_bracket = design_params.k_top_bracket + + self.diagonal_section_type = design_params.diagonal_section_type self.diagonal_section_dims = { - "leg_h": 100, # Vertical leg height (longer leg) - "leg_w": 50, # Horizontal leg width (shorter leg) - "connection_type": "LONGER_LEG" # "LONGER_LEG" or "SHORTER_LEG" + "leg_h": design_params.diagonal_section_dims.leg_h, + "leg_w": design_params.diagonal_section_dims.leg_w, + "connection_type": design_params.diagonal_section_dims.connection_type, } - self.diagonal_thickness = 5 # Diagonal member thickness (mm) + self.diagonal_thickness = design_params.diagonal_thickness - # Top chord/bracket section configuration - self.top_chord_section_type = "DOUBLE_CHANNEL" + self.top_chord_section_type = design_params.top_chord_section_type self.top_chord_section_dims = { - "leg_h": 80, - "leg_w": 40, - "connection_type": "LONGER_LEG" + "leg_h": design_params.top_chord_section_dims.leg_h, + "leg_w": design_params.top_chord_section_dims.leg_w, + "connection_type": design_params.top_chord_section_dims.connection_type, } - self.top_chord_thickness = 5 # Top chord thickness (mm) + self.top_chord_thickness = design_params.top_chord_thickness - # Bottom chord/bracket section configuration - self.bottom_chord_section_type = "ANGLE" + self.bottom_chord_section_type = design_params.bottom_chord_section_type self.bottom_chord_section_dims = { - "leg_h": 80, - "leg_w": 40, - "connection_type": "LONGER_LEG" + "leg_h": design_params.bottom_chord_section_dims.leg_h, + "leg_w": design_params.bottom_chord_section_dims.leg_w, + "connection_type": design_params.bottom_chord_section_dims.connection_type, } - self.bottom_chord_thickness = 5 # Bottom chord thickness (mm) + self.bottom_chord_thickness = design_params.bottom_chord_thickness # END DIAPHRAGM PARAMETERS - self.end_diaphragm_type = "Cross Bracing" # Options: "Cross Bracing", "Rolled Beam", "Welded Beam" - self.end_diaphragm_spacing = 100 # Longitudinal offset from bridge ends (mm) - - # For "Cross Bracing" type end diaphragms - separate section configuration - self.end_diaphragm_bracing_type = "K" # "X" or "K" - - # End diaphragm diagonal members - self.end_diaphragm_diagonal_section_type = "ANGLE" + self.end_diaphragm_type = design_params.end_diaphragm_type + self.end_diaphragm_spacing = design_params.end_diaphragm_spacing + self.end_diaphragm_bracing_type = design_params.end_diaphragm_bracing_type + + self.end_diaphragm_diagonal_section_type = design_params.end_diaphragm_diagonal_section_type self.end_diaphragm_diagonal_section_dims = { - "leg_h": 100, - "leg_w": 50, - "connection_type": "LONGER_LEG" + "leg_h": design_params.end_diaphragm_diagonal_section_dims.leg_h, + "leg_w": design_params.end_diaphragm_diagonal_section_dims.leg_w, + "connection_type": design_params.end_diaphragm_diagonal_section_dims.connection_type, } - self.end_diaphragm_diagonal_thickness = 5 - - # End diaphragm top chord - self.end_diaphragm_top_chord_section_type = "CHANNEL" + self.end_diaphragm_diagonal_thickness = design_params.end_diaphragm_diagonal_thickness + + self.end_diaphragm_top_chord_section_type = design_params.end_diaphragm_top_chord_section_type self.end_diaphragm_top_chord_section_dims = { - "leg_h": 80, - "leg_w": 40, - "connection_type": "LONGER_LEG" + "leg_h": design_params.end_diaphragm_top_chord_section_dims.leg_h, + "leg_w": design_params.end_diaphragm_top_chord_section_dims.leg_w, + "connection_type": design_params.end_diaphragm_top_chord_section_dims.connection_type, } - self.end_diaphragm_top_chord_thickness = 5 - - # End diaphragm bottom chord - self.end_diaphragm_bottom_chord_section_type = "ANGLE" + self.end_diaphragm_top_chord_thickness = design_params.end_diaphragm_top_chord_thickness + + self.end_diaphragm_bottom_chord_section_type = design_params.end_diaphragm_bottom_chord_section_type self.end_diaphragm_bottom_chord_section_dims = { - "leg_h": 80, - "leg_w": 40, - "connection_type": "LONGER_LEG" + "leg_h": design_params.end_diaphragm_bottom_chord_section_dims.leg_h, + "leg_w": design_params.end_diaphragm_bottom_chord_section_dims.leg_w, + "connection_type": design_params.end_diaphragm_bottom_chord_section_dims.connection_type, } - self.end_diaphragm_bottom_chord_thickness = 5 - - # For "Rolled Beam" or "Welded Beam" types (unchanged) - self.end_diaphragm_section = "I_SECTION" - self.end_diaphragm_dims = { - "depth": 800, - "flange_width": 250, - "web_thickness": 12, - "flange_thickness": 100 - } + self.end_diaphragm_bottom_chord_thickness = design_params.end_diaphragm_bottom_chord_thickness - # MAIN CAD GENERATION + self.end_diaphragm_section = design_params.end_diaphragm_section + self.end_diaphragm_dims = { + "depth": design_params.end_diaphragm_dims.depth, + "flange_width": design_params.end_diaphragm_dims.flange_width, + "web_thickness": design_params.end_diaphragm_dims.web_thickness, + "flange_thickness": design_params.end_diaphragm_dims.flange_thickness, + } - def generate(self): + def generate(self, design_params: BridgeParametersDTO): """ Generate complete bridge CAD geometry. @@ -307,6 +287,8 @@ def generate(self): - median_w_beams: Median W-beams (if metallic) - railings: Railing components """ + + self._set_parameters(design_params) # HELPER FUNCTIONS diff --git a/src/osdagbridge/core/bridge_types/plate_girder/dto.py b/src/osdagbridge/core/bridge_types/plate_girder/dto.py index 538a29b82..a8731d31a 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/dto.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/dto.py @@ -12,6 +12,9 @@ "MaterialProperties", "GrillageGeometry", "DeckLayoutProperties", + "SectionDimsDTO" + "ISectionDimsDTO" + "BridgeParametersDTO" ] # ------------------------------------------------------------------ @@ -222,4 +225,128 @@ class DeckLayoutProperties: footpath_width: float railing_width: float median_width: float - n_footpaths: int \ No newline at end of file + n_footpaths: int + + + + + +from dataclasses import dataclass +from typing import Optional + + +# --------------------------------------------------------------------------- +# Nested DTOs — only for fields that were dicts in the original config +# --------------------------------------------------------------------------- + +@dataclass +class SectionDimsDTO: + leg_h: float + leg_w: float + connection_type: str # "LONGER_LEG" / "SHORTER_LEG" + + +@dataclass +class ISectionDimsDTO: + depth: float + flange_width: float + web_thickness: float + flange_thickness: float + + +# --------------------------------------------------------------------------- +# Main DTO +# --------------------------------------------------------------------------- + +@dataclass +class BridgeParametersDTO: + + # --- Girder --- + span_length_L: float + girder_section_d: float + girder_section_bf: float + girder_section_bf_b: float + girder_section_tf: float + girder_section_tf_b: float + girder_section_tw: float + num_girders: int + girder_spacing: float + + # --- Geometry --- + skew_angle: float + + # --- Deck --- + carriageway_width: float + deck_thickness: float + footpath_config: str # "NONE" / "LEFT" / "RIGHT" / "BOTH" + footpath_width: float + railing_width: float + + # --- Crash Barrier --- + barrier_type: str # "Rigid" / "Semi-Rigid" / "Flexible" + crash_barrier_subtype: str + + # --- Median --- + enable_median: bool + median_type: str + + # --- Railing --- + rail_count: int + railing_type: str # "rcc" / "steel" + + # --- Intermediate Stiffeners --- + include_intermediate_stiffeners: bool + intermediate_stiffener_spacing: float + intermediate_stiffener_thickness: float + intermediate_stiffener_outstand: Optional[float] + + # --- End Stiffeners --- + num_end_stiffener_pairs: int + end_stiffener_thickness: float + end_stiffener_outstand: Optional[float] + + # --- Longitudinal Stiffeners --- + include_longitudinal_stiffeners: bool + num_longitudinal_stiffeners: int + longitudinal_stiffener_thickness: float + longitudinal_stiffener_outstand: Optional[float] + + # --- Cross Bracing --- + cross_bracing_spacing: float + bracing_type: str # "X" / "K" + x_bracket_option: str # "NONE" / "UPPER" / "LOWER" / "BOTH" + k_top_bracket: bool + + diagonal_section_type: str + diagonal_section_dims: SectionDimsDTO + diagonal_thickness: float + + top_chord_section_type: str + top_chord_section_dims: SectionDimsDTO + top_chord_thickness: float + + bottom_chord_section_type: str + bottom_chord_section_dims: SectionDimsDTO + bottom_chord_thickness: float + + # --- End Diaphragm --- + end_diaphragm_type: str # "Cross Bracing" / "Rolled Beam" / "Welded Beam" + end_diaphragm_spacing: float + end_diaphragm_bracing_type: str # "X" / "K" + + end_diaphragm_diagonal_section_type: str + end_diaphragm_diagonal_section_dims: SectionDimsDTO + end_diaphragm_diagonal_thickness: float + + end_diaphragm_top_chord_section_type: str + end_diaphragm_top_chord_section_dims: SectionDimsDTO + end_diaphragm_top_chord_thickness: float + + end_diaphragm_bottom_chord_section_type: str + end_diaphragm_bottom_chord_section_dims: SectionDimsDTO + end_diaphragm_bottom_chord_thickness: float + + end_diaphragm_section: str + end_diaphragm_dims: ISectionDimsDTO + + diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index 58b678c12..7d83c792f 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -30,6 +30,12 @@ # Custom 3D Viewer from osdagbridge.desktop.ui.utils.custom_3dviewer import CustomViewer3d +from osdagbridge.core.bridge_types.plate_girder.dto import ( + BridgeParametersDTO, + SectionDimsDTO, + ISectionDimsDTO +) + class CAD3DWindow(QWidget): """ Main 3D CAD window for OsdagBridge. @@ -108,7 +114,7 @@ def _is_display_ready(self): # ── RENDER / CLEAR ──────────────────────────────────────────────────────── - def render_3d_cad(self): + def render_3d_cad(self, design_params: BridgeParametersDTO): """ Generate and render the 3D bridge model on the display. Shows the component selector checkboxes after rendering. @@ -118,7 +124,7 @@ def render_3d_cad(self): return # Generate fresh model data - self.generator.model_data = self.generator.generate() + self.generator.model_data = self.generator.generate(design_params) # Render on display self.load_bridge() @@ -572,9 +578,105 @@ def reset(self): # Standalone Testing---------------------------- def main(): app = QApplication(sys.argv) + + bridge_parameters = BridgeParametersDTO( + # --- Girder --- + span_length_L=25_000, + girder_section_d=900, + girder_section_bf=500, + girder_section_bf_b=500, + girder_section_tf=260, + girder_section_tf_b=260, + girder_section_tw=100, + num_girders=5, + girder_spacing=2_750, + + # --- Geometry --- + skew_angle=0, + + # --- Deck --- + carriageway_width=12_000, + deck_thickness=400, + footpath_config="BOTH", + footpath_width=1_500, + railing_width=300, + + # --- Crash Barrier --- + barrier_type="Semi-Rigid", + crash_barrier_subtype="Double W-beam", + + # --- Median --- + enable_median=True, + median_type="Metallic Crash Barrier", + + # --- Railing --- + rail_count=3, + railing_type="rcc", + + # --- Intermediate Stiffeners --- + include_intermediate_stiffeners=True, + intermediate_stiffener_spacing=2_000, + intermediate_stiffener_thickness=20, + intermediate_stiffener_outstand=None, + + # --- End Stiffeners --- + num_end_stiffener_pairs=4, + end_stiffener_thickness=30, + end_stiffener_outstand=None, + + # --- Longitudinal Stiffeners --- + include_longitudinal_stiffeners=True, + num_longitudinal_stiffeners=2, + longitudinal_stiffener_thickness=20, + longitudinal_stiffener_outstand=None, + + # --- Cross Bracing --- + cross_bracing_spacing=4_000, + bracing_type="X", + x_bracket_option="BOTH", + k_top_bracket=True, + + diagonal_section_type="ANGLE", + diagonal_section_dims=SectionDimsDTO(leg_h=100, leg_w=50, connection_type="LONGER_LEG"), + diagonal_thickness=5, + + top_chord_section_type="DOUBLE_CHANNEL", + top_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), + top_chord_thickness=5, + + bottom_chord_section_type="ANGLE", + bottom_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), + bottom_chord_thickness=5, + + # --- End Diaphragm --- + end_diaphragm_type="Cross Bracing", + end_diaphragm_spacing=100, + end_diaphragm_bracing_type="K", + + end_diaphragm_diagonal_section_type="ANGLE", + end_diaphragm_diagonal_section_dims=SectionDimsDTO(leg_h=100, leg_w=50, connection_type="LONGER_LEG"), + end_diaphragm_diagonal_thickness=5, + + end_diaphragm_top_chord_section_type="CHANNEL", + end_diaphragm_top_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), + end_diaphragm_top_chord_thickness=5, + + end_diaphragm_bottom_chord_section_type="ANGLE", + end_diaphragm_bottom_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), + end_diaphragm_bottom_chord_thickness=5, + + end_diaphragm_section="I_SECTION", + end_diaphragm_dims=ISectionDimsDTO(depth=800, flange_width=250, web_thickness=12, flange_thickness=100), + ) + win = CAD3DWindow() win.show() + + # Delay render until after the display is fully initialized + QTimer.singleShot(200, lambda: win.render_3d_cad(bridge_parameters)) + sys.exit(app.exec()) + if __name__ == "__main__": main() \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index ddd471bae..1bff32e3f 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -19,6 +19,105 @@ from osdagbridge.core.bridge_types.plate_girder.ui_fields import FrontendData from osdagbridge.core.bridge_types.plate_girder.defaults import DEFAULTS_DICT from osdagbridge.core.utils.common import * +from osdagbridge.core.bridge_types.plate_girder.dto import( + BridgeParametersDTO, + SectionDimsDTO, + ISectionDimsDTO +) + +''' +Temporary DTO and will be removed once the backend is connected +''' +bridge_parameters = BridgeParametersDTO( + # --- Girder --- + span_length_L=25_000, + girder_section_d=900, + girder_section_bf=500, + girder_section_bf_b=500, + girder_section_tf=260, + girder_section_tf_b=260, + girder_section_tw=100, + num_girders=5, + girder_spacing=2_750, + + # --- Geometry --- + skew_angle=0, + + # --- Deck --- + carriageway_width=12_000, + deck_thickness=400, + footpath_config="BOTH", + footpath_width=1_500, + railing_width=300, + + # --- Crash Barrier --- + barrier_type="Semi-Rigid", + crash_barrier_subtype="Double W-beam", + + # --- Median --- + enable_median=True, + median_type="Metallic Crash Barrier", + + # --- Railing --- + rail_count=3, + railing_type="rcc", + + # --- Intermediate Stiffeners --- + include_intermediate_stiffeners=True, + intermediate_stiffener_spacing=2_000, + intermediate_stiffener_thickness=20, + intermediate_stiffener_outstand=None, + + # --- End Stiffeners --- + num_end_stiffener_pairs=4, + end_stiffener_thickness=30, + end_stiffener_outstand=None, + + # --- Longitudinal Stiffeners --- + include_longitudinal_stiffeners=True, + num_longitudinal_stiffeners=2, + longitudinal_stiffener_thickness=20, + longitudinal_stiffener_outstand=None, + + # --- Cross Bracing --- + cross_bracing_spacing=4_000, + bracing_type="X", + x_bracket_option="BOTH", + k_top_bracket=True, + + diagonal_section_type="ANGLE", + diagonal_section_dims=SectionDimsDTO(leg_h=100, leg_w=50, connection_type="LONGER_LEG"), + diagonal_thickness=5, + + top_chord_section_type="DOUBLE_CHANNEL", + top_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), + top_chord_thickness=5, + + bottom_chord_section_type="ANGLE", + bottom_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), + bottom_chord_thickness=5, + + # --- End Diaphragm --- + end_diaphragm_type="Cross Bracing", + end_diaphragm_spacing=100, + end_diaphragm_bracing_type="K", + + end_diaphragm_diagonal_section_type="ANGLE", + end_diaphragm_diagonal_section_dims=SectionDimsDTO(leg_h=100, leg_w=50, connection_type="LONGER_LEG"), + end_diaphragm_diagonal_thickness=5, + + end_diaphragm_top_chord_section_type="CHANNEL", + end_diaphragm_top_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), + end_diaphragm_top_chord_thickness=5, + + end_diaphragm_bottom_chord_section_type="ANGLE", + end_diaphragm_bottom_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), + end_diaphragm_bottom_chord_thickness=5, + + end_diaphragm_section="I_SECTION", + end_diaphragm_dims=ISectionDimsDTO(depth=800, flange_width=250, web_thickness=12, flange_thickness=100), + ) + class CustomWindow(QWidget): def __init__(self, title: str, backend: object, parent=None): @@ -244,8 +343,8 @@ def mousePressEvent(self, event): self.cad_log_splitter.addWidget(self.cad_3d_widget) # Plots placeholder (mutually exclusive with dual view + 3d cad) - from osdagbridge.desktop.ui.plots_ui import PlotWidget - self.plots_widget = PlotWidget() + # from osdagbridge.desktop.ui.plots_ui import PlotWidget + self.plots_widget = CentralPlaceholderWidget("PlotWidget") self.plots_widget.setVisible(False) self.cad_log_splitter.addWidget(self.plots_widget) @@ -389,20 +488,20 @@ def common_design_func(self, trigger: str): # Collect all the values from input Dock and pass to backend self.backend.set_input(self.input_dict) - self.backend.design() + # self.backend.design() # Lock the input dock after design is triggered if self.input_dock and not self.input_dock.is_locked: self.input_dock.toggle_lock() # Wire up the plots widget with results from the completed analysis - ds_all = self.backend.get_results_dataset() - loadcases = self.backend.get_available_loadcases() - nodes, members = self.backend.get_nodes_members() - self.plots_widget.setup(ds_all, loadcases, nodes, members) + # ds_all = self.backend.get_results_dataset() + # loadcases = self.backend.get_available_loadcases() + # nodes, members = self.backend.get_nodes_members() + # self.plots_widget.setup(ds_all, loadcases, nodes, members) # Render 3D cad using the parameters from Backend - self.cad_3d_widget.render_3d_cad() + self.cad_3d_widget.render_3d_cad(bridge_parameters) # Close-loading-popup--------------------------------------------- self._finish_loading() From 7822ab96101f06db9c5aa102bbbe15d422afd165 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Sat, 11 Apr 2026 21:16:27 +0530 Subject: [PATCH 139/225] corrected median logic for live load analysis --- .../core/bridge_types/plate_girder/analyser.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 35ab30087..645e2b4b8 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -708,6 +708,7 @@ def vehicle_lane_coordinates(self): # Get lane coordinates lane_coords = [] # [(x, z), (x, z), ...] + carriageway_width = None # ---------- Single carriageway ---------- if layout.has_component("carriageway"): @@ -723,8 +724,11 @@ def vehicle_lane_coordinates(self): # ---------- Split carriageway (with median) ---------- else: + cw_left_width = 0.0 + cw_right_width = 0.0 if layout.has_component("carriageway_left"): cw_left = layout.get_component("carriageway_left") + cw_left_width = cw_left.width n_lanes = IRC6_2017.table_6(cw_left.width) lane_width = cw_left.width / n_lanes @@ -735,6 +739,7 @@ def vehicle_lane_coordinates(self): if layout.has_component("carriageway_right"): cw_right = layout.get_component("carriageway_right") + cw_right_width = cw_right.width n_lanes = IRC6_2017.table_6(cw_right.width) lane_width = cw_right.width / n_lanes @@ -743,6 +748,8 @@ def vehicle_lane_coordinates(self): z = cw_right.z_start + (i + 0.5) * lane_width lane_coords.append((x_coord, z)) + carriageway_width = cw_left_width + cw_right_width + if carriageway_width is None: raise ValueError("carriageway_width must be provided or derivable from layout") @@ -1178,7 +1185,7 @@ def plot(self, model=None): crash_barrier_width=0.45 * m, footpath_width=1.50 * m, railing_width=0.30 * m, - median_width=0.0 * m, + median_width=1.0 * m, n_footpaths=2, )) From 387481a71b143c44aed7a39483de4b84fa090d08 Mon Sep 17 00:00:00 2001 From: Aditya Donde Date: Sun, 12 Apr 2026 19:13:29 +0530 Subject: [PATCH 140/225] added matplotlib plots and widget for it --- .../plate_girder/plategirderbridge.py | 14 +- .../plate_girder/plot_generator.py | 519 ++++++++++++++++++ src/osdagbridge/desktop/ui/mpl_plot_widget.py | 122 ++++ src/osdagbridge/desktop/ui/template_page.py | 14 +- 4 files changed, 655 insertions(+), 14 deletions(-) create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py create mode 100644 src/osdagbridge/desktop/ui/mpl_plot_widget.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 2d032343d..bc032a469 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -14,7 +14,7 @@ from .initial_sizing import BridgeConfigurationSolver, DEFAULT_FOOTPATH_WIDTH from .analyser import BridgeGrillageModel from .analysis_results import PlateGirderAnalysisResults -from .plots_widget import ( +from .plot_generator import ( build_figure_sfd, build_figure_bmd, build_figure_bmd_contour, @@ -586,18 +586,18 @@ def get_nodes_members(self) -> tuple[dict, dict]: """Return (nodes, members) dicts built from the active openseespy model.""" return build_nodes_members() - def build_figure_sfd(self, ds, force_key: str) -> str: - """Build and return Plotly SFD figure JSON for the given dataset slice and force key.""" + def build_figure_sfd(self, ds, force_key: str): + """Build and return a matplotlib Figure for the SFD of the given dataset slice.""" nodes, members = self.get_nodes_members() return build_figure_sfd(ds, force_key, nodes, members) - def build_figure_bmd(self, ds, force_key: str) -> tuple[str, dict]: - """Build and return (Plotly BMD figure JSON, summary_data) for the given dataset slice.""" + def build_figure_bmd(self, ds, force_key: str): + """Build and return a matplotlib Figure for the BMD of the given dataset slice.""" nodes, members = self.get_nodes_members() return build_figure_bmd(ds, force_key, nodes, members) - def build_figure_bmd_contour(self, ds, force_key: str) -> str: - """Build and return Plotly BMD contour figure JSON for the given dataset slice.""" + def build_figure_bmd_contour(self, ds, force_key: str): + """Build and return a matplotlib Figure for the BMD contour plot of the given dataset slice.""" nodes, members = self.get_nodes_members() return build_figure_bmd_contour(ds, force_key, nodes, members) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py new file mode 100644 index 000000000..49d7f9699 --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -0,0 +1,519 @@ +import io +from collections import defaultdict + +import matplotlib +import matplotlib.pyplot as plt +import matplotlib.colors as mcolors +import numpy as np +import openseespy.opensees as ops +from mpl_toolkits.mplot3d.art3d import Line3DCollection + +try: + import mplcursors + _MPLCURSORS = True +except ImportError: + _MPLCURSORS = False + +# Force component map +FORCE_MAP = { + "Fx": ("Vx_i", "Vx_j"), + "Fy": ("Vy_i", "Vy_j"), + "Fz": ("Vz_i", "Vz_j"), + "Mx": ("Mx_i", "Mx_j"), + "My": ("My_i", "My_j"), + "Mz": ("Mz_i", "Mz_j"), +} + +# View settings (elevation/azimuth for a near-front-elevation look) +DEFAULT_ELEV = 10 +DEFAULT_AZIM = -90 + + +# ============================================================================= +# LOW-LEVEL HELPERS +# ============================================================================= + +def build_nodes_members(): + """Build nodes and members dicts from the active openseespy model.""" + nodes = { + int(n): list(map(float, ops.nodeCoord(n))) + for n in ops.getNodeTags() + } + members = { + int(e): list(map(int, ops.eleNodes(e))) + for e in ops.getEleTags() + } + return nodes, members + + +def _find_girders(nodes, members, z_tol=3): + """ + Return an OrderedDict { z_value: [elem_tag, ...] } + containing only longitudinal elements (both end-nodes share the same z). + Elements within each girder are sorted by their i-node x-coordinate. + """ + node_z = {n: round(coord[2], z_tol) for n, coord in nodes.items()} + + girders = defaultdict(list) + for ele, (n1, n2) in members.items(): + if node_z[n1] == node_z[n2]: + girders[node_z[n1]].append(ele) + + # sort elements within each girder by x of i-node + for z_val in girders: + girders[z_val].sort(key=lambda e: nodes[members[e][0]][0]) + + return dict(sorted(girders.items())) + + +def _build_polyline(elems, members, nodes, force_i, force_j, ds): + """ + Build arrays (xs, ys, zs, vals, node_ids) for one girder. + vals[k] is the force at node k: for the i-node of each element and + the j-node of the last element. + """ + def get_force(elem, comp): + return float(ds["forces"].sel(Element=elem, Component=comp).values) + + def find_component(name): + for c in ds["Component"].values: + if c.lower() == name.lower(): + return c + return None + + comp_i = find_component(force_i) + comp_j = find_component(force_j) + + xs, ys, zs, vals, node_ids = [], [], [], [], [] + for e in elems: + n1, n2 = members[e] + x1, y1, z1 = nodes[n1] + xs.append(x1); ys.append(y1); zs.append(z1) + vals.append(round(get_force(e, comp_i), 3)) + node_ids.append(n1) + + last_e = elems[-1] + n1, n2 = members[last_e] + x2, y2, z2 = nodes[n2] + xs.append(x2); ys.append(y2); zs.append(z2) + vals.append(round(get_force(last_e, comp_j), 3)) + node_ids.append(n2) + + return np.array(xs), np.array(ys), np.array(zs), np.array(vals), node_ids + + +# ============================================================================= +# DRAWING HELPERS (matplotlib 3-D) +# ============================================================================= + +def _add_grillage_background(ax, nodes, members): + """Draw all elements as thin dark-grey lines (structural grid).""" + for ele, (n1, n2) in members.items(): + x1, _, z1 = nodes[n1] + x2, _, z2 = nodes[n2] + ax.plot([x1, x2], [z1, z2], [0, 0], + color="darkgrey", linewidth=0.8, alpha=0.6, zorder=1) + + +def _add_coordinate_triad(ax, nodes, scale=0.10): + """Draw X / Y / Z arrows and labels at the minimum-corner of the model.""" + xs = [c[0] for c in nodes.values()] + ys = [c[1] for c in nodes.values()] + zs = [c[2] for c in nodes.values()] + + span = max(max(xs) - min(xs), max(zs) - min(zs)) or 5000 + L = span * scale + + ox, oy, oz = min(xs), 0, min(zs) # triad origin + + colors = {"X": "#FF4136", "Y": "#2ECC40", "Z": "#0074D9"} + + # X arrow (along span) + ax.quiver(ox, oz, oy, L, 0, 0, + color=colors["X"], linewidth=2, arrow_length_ratio=0.25, zorder=5) + ax.text(ox + L * 1.25, oz, oy, "X", color=colors["X"], + fontsize=9, fontweight="bold", zorder=5) + + # Z arrow (along width) — note ax.plot uses (x=span, y=width, z=force) + ax.quiver(ox, oz, oy, 0, L, 0, + color=colors["Z"], linewidth=2, arrow_length_ratio=0.25, zorder=5) + ax.text(ox, oz + L * 1.25, oy, "Z", color=colors["Z"], + fontsize=9, fontweight="bold", zorder=5) + + # Y arrow (upward = force direction) + ax.quiver(ox, oz, oy, 0, 0, L, + color=colors["Y"], linewidth=2, arrow_length_ratio=0.25, zorder=5) + ax.text(ox, oz, oy + L * 1.25, "Y", color=colors["Y"], + fontsize=9, fontweight="bold", zorder=5) + + +# ============================================================================= +# SFD PLOT +# ============================================================================= + +def build_figure_sfd(ds, force_key, nodes, members): + """ + Build a 3-D matplotlib figure showing the Shear Force Diagram. + + Parameters + ---------- + ds : xarray.Dataset — analysis results (must have 'forces' DataArray) + force_key : str — one of FORCE_MAP keys, e.g. "Fy" + nodes : dict — {tag: [x, y, z]} + members : dict — {tag: [n1, n2]} + + Returns + ------- + fig : matplotlib.figure.Figure + """ + comp_i_name, comp_j_name = FORCE_MAP[force_key] + girders = _find_girders(nodes, members) + + fig = plt.figure(figsize=(14, 6), dpi=110, facecolor="white") + ax = fig.add_subplot(111, projection="3d", facecolor="white") + + all_xs = [coord[0] for coord in nodes.values()] + all_zs = [coord[2] for coord in nodes.values()] + x_range = max(all_xs) - min(all_xs) or 1.0 + z_range = max(all_zs) - min(all_zs) or 1.0 + ax.set_xlim(min(all_xs), max(all_xs)) + ax.set_ylim(min(all_zs), max(all_zs)) + ax.set_box_aspect([x_range, z_range, x_range * 0.30]) + + _add_grillage_background(ax, nodes, members) + _add_coordinate_triad(ax, nodes) + + shear_color = "#1565C0" + fill_color = "#90CAF9" + base_color = "#388E3C" + + girder_items = list(girders.items()) + _scatter_objs = [] + _scatter_data = {} + + for i, (z_val, elems) in enumerate(girder_items): + girder_name = f"G{i + 1}" + + xs, ys, zs, Vy, node_ids = _build_polyline( + elems, members, nodes, comp_i_name, comp_j_name, ds + ) + + z_base = float(np.mean(zs)) + z_arr = np.full_like(xs, z_base) + + val_range = max(Vy) - min(Vy) + if val_range == 0: + shear_scale = 1.0 if max(Vy) == 0 else 0.25 * abs((max(xs) - min(xs)) / max(Vy)) + else: + shear_scale = 0.25 * abs((max(xs) - min(xs)) / val_range) + + x_step = np.repeat(xs, 2)[1:-1] + Vy_step = np.repeat(Vy[:-1], 2) + y_step = Vy_step * shear_scale + z_step = np.full_like(x_step, z_base) + + ax.plot_surface( + np.vstack([x_step, x_step]), + np.vstack([z_step, z_step]), + np.vstack([np.zeros_like(y_step), y_step]), + color=fill_color, alpha=0.25, linewidth=0, antialiased=False, zorder=2 + ) + + ax.plot(x_step, z_step, y_step, color=shear_color, linewidth=2.0, zorder=4) + + ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], + color=base_color, linewidth=1.5, zorder=3) + ax.scatter(xs, z_arr, np.zeros_like(xs), + color=base_color, s=18, zorder=4, depthshade=False) + + for xi, vyi in zip(xs, Vy): + ax.plot([xi, xi], [z_base, z_base], [0, vyi * shear_scale], + color=shear_color, linewidth=1.2, alpha=0.7, zorder=3) + + sc = ax.scatter(xs, z_arr, Vy * shear_scale, + color=shear_color, s=30, zorder=5, depthshade=False) + _scatter_objs.append(sc) + _scatter_data[id(sc)] = (node_ids, xs, Vy) + + ax.text(xs[0], z_base, 0, f" {girder_name}", + color="black", fontsize=8, fontweight="bold", + ha="left", va="bottom", zorder=6) + + if _MPLCURSORS and _scatter_objs: + cursor = mplcursors.cursor(_scatter_objs, hover=True) + + @cursor.connect("add") + def on_add(sel, _data=_scatter_data, _fk=force_key): + nids, xs_g, vals_g = _data[id(sel.artist)] + idx = sel.index + sel.annotation.set_text( + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f}" + ) + sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) + + ax.set_xlabel("Span Length", fontsize=10, labelpad=8) + ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) + ax.set_zlabel(f"{force_key} (scaled)", fontsize=10, labelpad=8) + ax.set_title(f"Shear Force Diagram — {force_key}", fontsize=12, fontweight="bold", pad=12) + ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) + ax.xaxis.pane.fill = False + ax.yaxis.pane.fill = False + ax.zaxis.pane.fill = False + ax.xaxis.pane.set_edgecolor("lightgrey") + ax.yaxis.pane.set_edgecolor("lightgrey") + ax.zaxis.pane.set_edgecolor("lightgrey") + ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) + + plt.tight_layout() + return fig + + +# ============================================================================= +# BMD PLOT +# ============================================================================= + +def build_figure_bmd(ds, force_key, nodes, members): + """ + Build a 3-D matplotlib figure showing the Bending Moment Diagram. + + Parameters + ---------- + ds : xarray.Dataset — analysis results (must have 'forces' DataArray) + force_key : str — one of FORCE_MAP keys, e.g. "Mz" + nodes : dict — {tag: [x, y, z]} + members : dict — {tag: [n1, n2]} + + Returns + ------- + fig : matplotlib.figure.Figure + summary_data : dict — {girder_name: {"max": float, "min": float}} + """ + comp_i_name, comp_j_name = FORCE_MAP[force_key] + girders = _find_girders(nodes, members) + + fig = plt.figure(figsize=(14, 6), dpi=110, facecolor="white") + ax = fig.add_subplot(111, projection="3d", facecolor="white") + + all_xs = [coord[0] for coord in nodes.values()] + all_zs = [coord[2] for coord in nodes.values()] + x_range = max(all_xs) - min(all_xs) or 1.0 + z_range = max(all_zs) - min(all_zs) or 1.0 + ax.set_xlim(min(all_xs), max(all_xs)) + ax.set_ylim(min(all_zs), max(all_zs)) + ax.set_box_aspect([x_range, z_range, x_range * 0.30]) + + _add_grillage_background(ax, nodes, members) + _add_coordinate_triad(ax, nodes) + + moment_color = "#C62828" + fill_color = "#EF9A9A" + base_color = "#388E3C" + + summary_data = {} + _scatter_objs = [] + _scatter_data = {} + + for i, (z_val, elems) in enumerate(girders.items()): + girder_name = f"G{i + 1}" + + xs, ys, zs, Mz, node_ids = _build_polyline( + elems, members, nodes, comp_i_name, comp_j_name, ds + ) + + z_base = float(np.mean(zs)) + z_arr = np.full_like(xs, z_base) + + val_range = max(Mz) - min(Mz) + if val_range == 0: + moment_scale = 1.0 if max(Mz) == 0 else 0.1 * abs((max(xs) - min(xs)) / max(Mz)) + else: + moment_scale = 0.1 * abs((max(xs) - min(xs)) / val_range) + + y_plot = -Mz * moment_scale # negate: positive moment plots downward + + ax.plot_surface( + np.vstack([xs, xs]), + np.vstack([z_arr, z_arr]), + np.vstack([np.zeros_like(y_plot), y_plot]), + color=fill_color, alpha=0.25, linewidth=0, antialiased=False, zorder=2 + ) + + ax.plot(xs, z_arr, y_plot, color=moment_color, linewidth=2.0, zorder=4) + + ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], + color=base_color, linewidth=1.5, zorder=3) + ax.scatter(xs, z_arr, np.zeros_like(xs), + color=base_color, s=18, zorder=4, depthshade=False) + + idx_max = int(np.argmax(Mz)) + idx_min = int(np.argmin(Mz)) + for idx, clr in ((idx_max, "#FF4136"), (idx_min, "#0074D9")): + ax.plot([xs[idx], xs[idx]], [z_base, z_base], [0, y_plot[idx]], + color=clr, linewidth=1.5, zorder=3) + ax.text(xs[idx], z_base, y_plot[idx], + f" {Mz[idx]:.2f}", color=clr, fontsize=7, zorder=6) + + sc = ax.scatter(xs, z_arr, y_plot, + color=moment_color, s=30, zorder=5, depthshade=False) + _scatter_objs.append(sc) + _scatter_data[id(sc)] = (node_ids, xs, Mz) + + ax.text(xs[0], z_base, 0, f" {girder_name}", + color="black", fontsize=8, fontweight="bold", + ha="left", va="bottom", zorder=6) + + summary_data[girder_name] = {"max": float(max(Mz)), "min": float(min(Mz))} + + if _MPLCURSORS and _scatter_objs: + cursor = mplcursors.cursor(_scatter_objs, hover=True) + + @cursor.connect("add") + def on_add(sel, _data=_scatter_data, _fk=force_key): + nids, xs_g, vals_g = _data[id(sel.artist)] + idx = sel.index + sel.annotation.set_text( + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f}" + ) + sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) + + ax.set_xlabel("Span Length", fontsize=10, labelpad=8) + ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) + ax.set_zlabel(f"{force_key} (scaled)", fontsize=10, labelpad=8) + ax.set_title(f"Bending Moment Diagram — {force_key}", fontsize=12, fontweight="bold", pad=12) + ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) + ax.xaxis.pane.fill = False + ax.yaxis.pane.fill = False + ax.zaxis.pane.fill = False + ax.xaxis.pane.set_edgecolor("lightgrey") + ax.yaxis.pane.set_edgecolor("lightgrey") + ax.zaxis.pane.set_edgecolor("lightgrey") + ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) + + plt.tight_layout() + return fig, summary_data + + +# ============================================================================= +# BMD CONTOUR PLOT +# ============================================================================= + +def build_figure_bmd_contour(ds, force_key, nodes, members): + """ + Build a 3-D matplotlib figure showing the BMD with a Jet colour-map + scaled to the global moment range across all girders. + + Parameters + ---------- + ds : xarray.Dataset + force_key : str + nodes : dict + members : dict + + Returns + ------- + fig : matplotlib.figure.Figure + """ + comp_i_name, comp_j_name = FORCE_MAP[force_key] + girders = _find_girders(nodes, members) + + # Global moment range for a consistent colour scale + all_vals = [] + for elems in girders.values(): + _, _, _, mz, _ = _build_polyline(elems, members, nodes, comp_i_name, comp_j_name, ds) + all_vals.extend(mz.tolist()) + vmin, vmax = min(all_vals), max(all_vals) + if vmin == vmax: + vmin -= 1.0; vmax += 1.0 + + norm = mcolors.Normalize(vmin=vmin, vmax=vmax) + cmap = plt.colormaps["jet"] + + fig = plt.figure(figsize=(14, 6), dpi=110, facecolor="white") + ax = fig.add_subplot(111, projection="3d", facecolor="white") + + all_xs = [coord[0] for coord in nodes.values()] + all_zs = [coord[2] for coord in nodes.values()] + x_range = max(all_xs) - min(all_xs) or 1.0 + z_range = max(all_zs) - min(all_zs) or 1.0 + ax.set_xlim(min(all_xs), max(all_xs)) + ax.set_ylim(min(all_zs), max(all_zs)) + ax.set_box_aspect([x_range, z_range, x_range * 0.30]) + + _add_grillage_background(ax, nodes, members) + _add_coordinate_triad(ax, nodes) + + base_color = "#388E3C" + + for i, (z_val, elems) in enumerate(girders.items()): + girder_name = f"G{i + 1}" + + xs, ys, zs, Mz, node_ids = _build_polyline( + elems, members, nodes, comp_i_name, comp_j_name, ds + ) + + z_base = float(np.mean(zs)) + z_arr = np.full_like(xs, z_base) + + val_range = max(Mz) - min(Mz) + if val_range == 0: + moment_scale = 1.0 if max(Mz) == 0 else 0.1 * abs((max(xs) - min(xs)) / max(Mz)) + else: + moment_scale = 0.1 * abs((max(xs) - min(xs)) / val_range) + + y_plot = Mz * moment_scale + + face_colors = cmap(norm(np.vstack([Mz, Mz]))) + ax.plot_surface( + np.vstack([xs, xs]), + np.vstack([z_arr, z_arr]), + np.vstack([np.zeros_like(y_plot), y_plot]), + facecolors=face_colors, alpha=0.35, linewidth=0, + antialiased=False, zorder=2 + ) + + pts = np.column_stack([xs, z_arr, y_plot]) # (N, 3) + segs = np.stack([pts[:-1], pts[1:]], axis=1) # (N-1, 2, 3) + seg_colors = cmap(norm((Mz[:-1] + Mz[1:]) / 2)) + lc = Line3DCollection(segs, colors=seg_colors, linewidths=3, zorder=4) + ax.add_collection3d(lc) + + ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], + color=base_color, linewidth=1.5, linestyle="--", zorder=3) + + for xi, zi, mzi, ypi in zip(xs, z_arr, Mz, y_plot): + ax.plot([xi, xi], [zi, zi], [0, ypi], + color=cmap(norm(mzi)), linewidth=1.0, alpha=0.7, zorder=3) + + ax.text(xs[0], z_base, 0, f" {girder_name}", + color="black", fontsize=8, fontweight="bold", + ha="left", va="bottom", zorder=6) + + sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm) + sm.set_array([]) + cbar = fig.colorbar(sm, ax=ax, shrink=0.5, pad=0.1, aspect=20) + cbar.set_label(f"{force_key}", fontsize=10) + + ax.set_xlabel("Span Length", fontsize=10, labelpad=8) + ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) + ax.set_zlabel(f"{force_key} (scaled)", fontsize=10, labelpad=8) + ax.set_title(f"BMD Contour — {force_key}", fontsize=12, fontweight="bold", pad=12) + ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) + ax.xaxis.pane.fill = False + ax.yaxis.pane.fill = False + ax.zaxis.pane.fill = False + ax.xaxis.pane.set_edgecolor("lightgrey") + ax.yaxis.pane.set_edgecolor("lightgrey") + ax.zaxis.pane.set_edgecolor("lightgrey") + ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) + + plt.tight_layout() + return fig + + +def figure_to_bytes(fig, fmt="png", dpi=150): + """Convenience helper — render a matplotlib figure to raw bytes.""" + buf = io.BytesIO() + fig.savefig(buf, format=fmt, dpi=dpi, bbox_inches="tight", facecolor="white") + buf.seek(0) + plt.close(fig) + return buf.read() diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py new file mode 100644 index 000000000..72247294d --- /dev/null +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -0,0 +1,122 @@ +import matplotlib +matplotlib.use("QtAgg") + +from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg, NavigationToolbar2QT +import matplotlib.pyplot as plt + +from PySide6.QtWidgets import ( + QWidget, QVBoxLayout, QHBoxLayout, QLabel, QComboBox, +) + +from osdagbridge.core.bridge_types.plate_girder.plot_generator import ( + build_figure_sfd, + build_figure_bmd, + FORCE_MAP, +) + +# Forces starting with "F" -> shear (SFD); starting with "M" -> moment (BMD) +_SFD_KEYS = {k for k in FORCE_MAP if k.startswith("F")} + + +class MplPlotWidget(QWidget): + """ + PySide6 widget that renders matplotlib analysis plots. + + - Fx / Fy / Fz -> Shear Force Diagram (step plot) + - Mx / My / Mz -> Bending Moment Diagram (curve plot) + + Call setup() after bridge.design() completes to populate the widget. + """ + + def __init__(self, parent=None): + super().__init__(parent) + + # Data populated by setup() + self._ds_all = None + self._nodes = {} + self._members = {} + + # Top control bar + top = QHBoxLayout() + top.setContentsMargins(4, 4, 4, 0) + top.setSpacing(8) + + top.addWidget(QLabel("Load case:")) + self.combo_lc = QComboBox() + self.combo_lc.currentTextChanged.connect(self._on_controls_changed) + top.addWidget(self.combo_lc) + + top.addWidget(QLabel("Force:")) + self.combo_force = QComboBox() + self.combo_force.addItems(list(FORCE_MAP.keys())) + self.combo_force.setCurrentText("Fy") + self.combo_force.currentTextChanged.connect(self._on_controls_changed) + top.addWidget(self.combo_force) + + top.addStretch() + + # Matplotlib canvas + self._fig = plt.figure(figsize=(14, 6), facecolor="white") + self._canvas = FigureCanvasQTAgg(self._fig) + self._canvas.setMinimumHeight(300) + + # Navigation toolbar (zoom / pan / save) + self._toolbar = NavigationToolbar2QT(self._canvas, self) + + # Assemble layout + root = QVBoxLayout(self) + root.setContentsMargins(0, 0, 0, 0) + root.setSpacing(0) + root.addLayout(top) + root.addWidget(self._toolbar) + root.addWidget(self._canvas, stretch=1) + + # Public API + + def setup(self, ds_all, loadcases: list, nodes: dict, members: dict): + """ + Populate the widget after bridge analysis is complete. + + Parameters + ---------- + ds_all : xarray.Dataset — full results dataset (all load cases) + loadcases : list[str] — load case names for the combo box + nodes : dict — {tag: [x, y, z]} + members : dict — {tag: [n1, n2]} + """ + self._ds_all = ds_all + self._nodes = nodes + self._members = members + + self.combo_lc.blockSignals(True) + self.combo_lc.clear() + self.combo_lc.addItems(loadcases) + self.combo_lc.blockSignals(False) + + self.update_plot() + + def update_plot(self): + """Rebuild and redraw the current figure from the selected controls.""" + if self._ds_all is None: + return + + loadcase = self.combo_lc.currentText() + force_key = self.combo_force.currentText() + + ds = self._ds_all.sel(Loadcase=loadcase) + + plt.close(self._fig) + + if force_key in _SFD_KEYS: + self._fig = build_figure_sfd(ds, force_key, self._nodes, self._members) + else: + self._fig, _ = build_figure_bmd(ds, force_key, self._nodes, self._members) + + self._canvas.figure = self._fig + self._fig.set_canvas(self._canvas) + self._canvas.draw() + + # Internal slots + + def _on_controls_changed(self): + self.update_plot() diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 1bff32e3f..8ab920ab8 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -343,8 +343,8 @@ def mousePressEvent(self, event): self.cad_log_splitter.addWidget(self.cad_3d_widget) # Plots placeholder (mutually exclusive with dual view + 3d cad) - # from osdagbridge.desktop.ui.plots_ui import PlotWidget - self.plots_widget = CentralPlaceholderWidget("PlotWidget") + from osdagbridge.desktop.ui.mpl_plot_widget import MplPlotWidget + self.plots_widget = MplPlotWidget() self.plots_widget.setVisible(False) self.cad_log_splitter.addWidget(self.plots_widget) @@ -488,17 +488,17 @@ def common_design_func(self, trigger: str): # Collect all the values from input Dock and pass to backend self.backend.set_input(self.input_dict) - # self.backend.design() + self.backend.design() # Lock the input dock after design is triggered if self.input_dock and not self.input_dock.is_locked: self.input_dock.toggle_lock() # Wire up the plots widget with results from the completed analysis - # ds_all = self.backend.get_results_dataset() - # loadcases = self.backend.get_available_loadcases() - # nodes, members = self.backend.get_nodes_members() - # self.plots_widget.setup(ds_all, loadcases, nodes, members) + ds_all = self.backend.get_results_dataset() + loadcases = self.backend.get_available_loadcases() + nodes, members = self.backend.get_nodes_members() + self.plots_widget.setup(ds_all, loadcases, nodes, members) # Render 3D cad using the parameters from Backend self.cad_3d_widget.render_3d_cad(bridge_parameters) From bc41bbccc875e7ae24fae28f7277b97ab9253587 Mon Sep 17 00:00:00 2001 From: Aditya Donde Date: Sun, 12 Apr 2026 19:46:44 +0530 Subject: [PATCH 141/225] updated the matplotlib plots --- .../bridge_types/plate_girder/defaults.py | 2 +- .../plate_girder/plategirderbridge.py | 21 +- .../plate_girder/plot_generator.py | 190 +++++++++++++----- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 9 +- src/osdagbridge/desktop/ui/template_page.py | 3 +- 5 files changed, 165 insertions(+), 60 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/defaults.py b/src/osdagbridge/core/bridge_types/plate_girder/defaults.py index 1d6dfcf34..0ff2e7cdb 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/defaults.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/defaults.py @@ -30,7 +30,7 @@ DEFAULT_SPAN_M = 33.5 DEFAULT_CARRIAGEWAY_WIDTH_M = 10.0 DEFAULT_MEDIAN_WIDTH_M = 0.0 -DEFAULT_NO_OF_GIRDERS = 6 +DEFAULT_NO_OF_GIRDERS = 4 DEFAULT_DECK_THICKNESS_MM = float(IS_DEFAULT_DECK_THICKNESS_MM) DEFAULT_GIRDER_SYMMETRY = "Girder Symmetric" DEFAULT_SKEW_ANGLE_DEG = 0.0 diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index bc032a469..33a9d7f87 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -225,11 +225,16 @@ def _build_dtos(self, parsed: dict) -> None: # n_t: transverse grid lines — approx one division every 2 × girder spacings n_t = max(3, int(round(span / (DEFAULT_GIRDER_SPACING * 2)))) + deck_overhang = self.sizing_result.deck_overhang + # When there is an overhang, the two edge beams add 2 extra longitudinal + # grid lines on top of the structural girder count. + n_l = self.sizing_result.no_of_girders + (2 if deck_overhang > 0 else 0) + self.grillage_geometry = GrillageGeometry( L=span, - n_l=self.sizing_result.no_of_girders, + n_l=n_l, n_t=n_t, - edge_dist=self.sizing_result.deck_overhang, + edge_dist=deck_overhang, ext_to_int_dist=self.sizing_result.girder_spacing, angle=parsed["skew_angle"], ) @@ -586,20 +591,26 @@ def get_nodes_members(self) -> tuple[dict, dict]: """Return (nodes, members) dicts built from the active openseespy model.""" return build_nodes_members() + def get_edge_dist(self) -> float: + """Return the deck overhang distance (0.0 when no overhang).""" + if self.sizing_result is None: + return 0.0 + return self.sizing_result.deck_overhang or 0.0 + def build_figure_sfd(self, ds, force_key: str): """Build and return a matplotlib Figure for the SFD of the given dataset slice.""" nodes, members = self.get_nodes_members() - return build_figure_sfd(ds, force_key, nodes, members) + return build_figure_sfd(ds, force_key, nodes, members, edge_dist=self.get_edge_dist()) def build_figure_bmd(self, ds, force_key: str): """Build and return a matplotlib Figure for the BMD of the given dataset slice.""" nodes, members = self.get_nodes_members() - return build_figure_bmd(ds, force_key, nodes, members) + return build_figure_bmd(ds, force_key, nodes, members, edge_dist=self.get_edge_dist()) def build_figure_bmd_contour(self, ds, force_key: str): """Build and return a matplotlib Figure for the BMD contour plot of the given dataset slice.""" nodes, members = self.get_nodes_members() - return build_figure_bmd_contour(ds, force_key, nodes, members) + return build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=self.get_edge_dist()) # ───────────────────────────────────────────────────────────────────────── # Helpers diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index 49d7f9699..e8bd7c1a9 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -89,14 +89,14 @@ def find_component(name): n1, n2 = members[e] x1, y1, z1 = nodes[n1] xs.append(x1); ys.append(y1); zs.append(z1) - vals.append(round(get_force(e, comp_i), 3)) + vals.append(round(get_force(e, comp_i) / 1000, 3)) # N → kN node_ids.append(n1) last_e = elems[-1] n1, n2 = members[last_e] x2, y2, z2 = nodes[n2] xs.append(x2); ys.append(y2); zs.append(z2) - vals.append(round(get_force(last_e, comp_j), 3)) + vals.append(round(get_force(last_e, comp_j) / 1000, 3)) # N → kN node_ids.append(n2) return np.array(xs), np.array(ys), np.array(zs), np.array(vals), node_ids @@ -106,13 +106,42 @@ def find_component(name): # DRAWING HELPERS (matplotlib 3-D) # ============================================================================= -def _add_grillage_background(ax, nodes, members): - """Draw all elements as thin dark-grey lines (structural grid).""" - for ele, (n1, n2) in members.items(): - x1, _, z1 = nodes[n1] - x2, _, z2 = nodes[n2] - ax.plot([x1, x2], [z1, z2], [0, 0], - color="darkgrey", linewidth=0.8, alpha=0.6, zorder=1) +def _add_grillage_background(ax, nodes, members, x_tol=3, z_tol=3): + """ + Draw the structural grid by grouping nodes rather than tracing element tags. + + • Longitudinal lines — nodes sharing the same z-position connected in x-order. + • Transverse lines — nodes sharing the same x-position connected in z-order. + + This guarantees that transverse connections are visible regardless of how + ospgrillage numbers its elements or the current camera angle. + """ + from collections import defaultdict + + # round keys to avoid floating-point scatter + by_z = defaultdict(list) # z_key → [x, ...] + by_x = defaultdict(list) # x_key → [z, ...] + + for coord in nodes.values(): + rx = round(coord[0], x_tol) + rz = round(coord[2], z_tol) + by_z[rz].append(coord[0]) + by_x[rx].append(coord[2]) + + long_kw = dict(color="darkgrey", linewidth=0.8, alpha=0.5, zorder=1) + trans_kw = dict(color="slategrey", linewidth=1.8, alpha=0.8, zorder=1) + + # longitudinal lines (along span) + for z_val, x_vals in by_z.items(): + x_sorted = sorted(set(x_vals)) + if len(x_sorted) > 1: + ax.plot(x_sorted, [z_val] * len(x_sorted), [0] * len(x_sorted), **long_kw) + + # transverse lines (across width) + for x_val, z_vals in by_x.items(): + z_sorted = sorted(set(z_vals)) + if len(z_sorted) > 1: + ax.plot([x_val] * len(z_sorted), z_sorted, [0] * len(z_sorted), **trans_kw) def _add_coordinate_triad(ax, nodes, scale=0.10): @@ -151,7 +180,7 @@ def _add_coordinate_triad(ax, nodes, scale=0.10): # SFD PLOT # ============================================================================= -def build_figure_sfd(ds, force_key, nodes, members): +def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): """ Build a 3-D matplotlib figure showing the Shear Force Diagram. @@ -161,6 +190,10 @@ def build_figure_sfd(ds, force_key, nodes, members): force_key : str — one of FORCE_MAP keys, e.g. "Fy" nodes : dict — {tag: [x, y, z]} members : dict — {tag: [n1, n2]} + edge_dist : float — overhang distance; when > 0 the outermost two + girders are edge beams and are skipped in the + force diagram (their lines remain visible via + the grillage background). Returns ------- @@ -188,19 +221,45 @@ def build_figure_sfd(ds, force_key, nodes, members): base_color = "#388E3C" girder_items = list(girders.items()) + n_girders = len(girder_items) _scatter_objs = [] _scatter_data = {} for i, (z_val, elems) in enumerate(girder_items): - girder_name = f"G{i + 1}" + is_edge_beam = edge_dist > 0 and (i == 0 or i == n_girders - 1) + girder_name = f"G{i}" if edge_dist > 0 else f"G{i + 1}" xs, ys, zs, Vy, node_ids = _build_polyline( elems, members, nodes, comp_i_name, comp_j_name, ds ) + # The j-end force from OpenSees uses the opposite sign convention. + # Negate the last value so the rightmost node shows the correct shear. + Vy = Vy.copy() + Vy[-1] = -Vy[-1] + z_base = float(np.mean(zs)) z_arr = np.full_like(xs, z_base) + # baseline (solid) - grey for edge beams, green for structural + ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], + color="slategrey" if is_edge_beam else base_color, + linewidth=1.5, zorder=3) + + # edge beams: baseline only, no markers / label / force diagram + if is_edge_beam: + continue + + ax.scatter(xs, z_arr, np.zeros_like(xs), + color=base_color, s=18, zorder=4, depthshade=False) + + # girder label + ax.text(xs[0], z_base, 0, f" {girder_name}", + color="black", fontsize=11, fontweight="bold", + ha="left", va="bottom", zorder=6, + bbox=dict(boxstyle="round,pad=0.2", facecolor="white", + alpha=0.8, edgecolor="none")) + val_range = max(Vy) - min(Vy) if val_range == 0: shear_scale = 1.0 if max(Vy) == 0 else 0.25 * abs((max(xs) - min(xs)) / max(Vy)) @@ -219,13 +278,10 @@ def build_figure_sfd(ds, force_key, nodes, members): color=fill_color, alpha=0.25, linewidth=0, antialiased=False, zorder=2 ) + # shear step line ax.plot(x_step, z_step, y_step, color=shear_color, linewidth=2.0, zorder=4) - ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], - color=base_color, linewidth=1.5, zorder=3) - ax.scatter(xs, z_arr, np.zeros_like(xs), - color=base_color, s=18, zorder=4, depthshade=False) - + # vertical cliff lines for xi, vyi in zip(xs, Vy): ax.plot([xi, xi], [z_base, z_base], [0, vyi * shear_scale], color=shear_color, linewidth=1.2, alpha=0.7, zorder=3) @@ -235,10 +291,7 @@ def build_figure_sfd(ds, force_key, nodes, members): _scatter_objs.append(sc) _scatter_data[id(sc)] = (node_ids, xs, Vy) - ax.text(xs[0], z_base, 0, f" {girder_name}", - color="black", fontsize=8, fontweight="bold", - ha="left", va="bottom", zorder=6) - + # hover annotations if _MPLCURSORS and _scatter_objs: cursor = mplcursors.cursor(_scatter_objs, hover=True) @@ -247,13 +300,13 @@ def on_add(sel, _data=_scatter_data, _fk=force_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index sel.annotation.set_text( - f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f}" + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kN" ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) ax.set_xlabel("Span Length", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) - ax.set_zlabel(f"{force_key} (scaled)", fontsize=10, labelpad=8) + ax.set_zlabel(f"{force_key} (kN, scaled)", fontsize=10, labelpad=8) ax.set_title(f"Shear Force Diagram — {force_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False @@ -272,7 +325,7 @@ def on_add(sel, _data=_scatter_data, _fk=force_key): # BMD PLOT # ============================================================================= -def build_figure_bmd(ds, force_key, nodes, members): +def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): """ Build a 3-D matplotlib figure showing the Bending Moment Diagram. @@ -282,6 +335,10 @@ def build_figure_bmd(ds, force_key, nodes, members): force_key : str — one of FORCE_MAP keys, e.g. "Mz" nodes : dict — {tag: [x, y, z]} members : dict — {tag: [n1, n2]} + edge_dist : float — overhang distance; when > 0 the outermost two + girders are edge beams and are skipped in the + force diagram (their lines remain visible via + the grillage background). Returns ------- @@ -309,12 +366,15 @@ def build_figure_bmd(ds, force_key, nodes, members): fill_color = "#EF9A9A" base_color = "#388E3C" + girder_items_bmd = list(girders.items()) + n_girders_bmd = len(girder_items_bmd) summary_data = {} _scatter_objs = [] _scatter_data = {} - for i, (z_val, elems) in enumerate(girders.items()): - girder_name = f"G{i + 1}" + for i, (z_val, elems) in enumerate(girder_items_bmd): + is_edge_beam = edge_dist > 0 and (i == 0 or i == n_girders_bmd - 1) + girder_name = f"G{i}" if edge_dist > 0 else f"G{i + 1}" xs, ys, zs, Mz, node_ids = _build_polyline( elems, members, nodes, comp_i_name, comp_j_name, ds @@ -323,6 +383,25 @@ def build_figure_bmd(ds, force_key, nodes, members): z_base = float(np.mean(zs)) z_arr = np.full_like(xs, z_base) + # baseline (solid) - grey for edge beams, green for structural + ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], + color="slategrey" if is_edge_beam else base_color, + linewidth=1.5, zorder=3) + + # edge beams: baseline only, no markers / label / force diagram + if is_edge_beam: + continue + + ax.scatter(xs, z_arr, np.zeros_like(xs), + color=base_color, s=18, zorder=4, depthshade=False) + + # girder label + ax.text(xs[0], z_base, 0, f" {girder_name}", + color="black", fontsize=11, fontweight="bold", + ha="left", va="bottom", zorder=6, + bbox=dict(boxstyle="round,pad=0.2", facecolor="white", + alpha=0.8, edgecolor="none")) + val_range = max(Mz) - min(Mz) if val_range == 0: moment_scale = 1.0 if max(Mz) == 0 else 0.1 * abs((max(xs) - min(xs)) / max(Mz)) @@ -340,28 +419,19 @@ def build_figure_bmd(ds, force_key, nodes, members): ax.plot(xs, z_arr, y_plot, color=moment_color, linewidth=2.0, zorder=4) - ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], - color=base_color, linewidth=1.5, zorder=3) - ax.scatter(xs, z_arr, np.zeros_like(xs), - color=base_color, s=18, zorder=4, depthshade=False) - idx_max = int(np.argmax(Mz)) idx_min = int(np.argmin(Mz)) for idx, clr in ((idx_max, "#FF4136"), (idx_min, "#0074D9")): ax.plot([xs[idx], xs[idx]], [z_base, z_base], [0, y_plot[idx]], color=clr, linewidth=1.5, zorder=3) ax.text(xs[idx], z_base, y_plot[idx], - f" {Mz[idx]:.2f}", color=clr, fontsize=7, zorder=6) + f" {Mz[idx]:.2f} kN", color=clr, fontsize=7, zorder=6) sc = ax.scatter(xs, z_arr, y_plot, color=moment_color, s=30, zorder=5, depthshade=False) _scatter_objs.append(sc) _scatter_data[id(sc)] = (node_ids, xs, Mz) - ax.text(xs[0], z_base, 0, f" {girder_name}", - color="black", fontsize=8, fontweight="bold", - ha="left", va="bottom", zorder=6) - summary_data[girder_name] = {"max": float(max(Mz)), "min": float(min(Mz))} if _MPLCURSORS and _scatter_objs: @@ -372,13 +442,13 @@ def on_add(sel, _data=_scatter_data, _fk=force_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index sel.annotation.set_text( - f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f}" + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kN" ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) ax.set_xlabel("Span Length", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) - ax.set_zlabel(f"{force_key} (scaled)", fontsize=10, labelpad=8) + ax.set_zlabel(f"{force_key} (kN, scaled)", fontsize=10, labelpad=8) ax.set_title(f"Bending Moment Diagram — {force_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False @@ -397,7 +467,7 @@ def on_add(sel, _data=_scatter_data, _fk=force_key): # BMD CONTOUR PLOT # ============================================================================= -def build_figure_bmd_contour(ds, force_key, nodes, members): +def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): """ Build a 3-D matplotlib figure showing the BMD with a Jet colour-map scaled to the global moment range across all girders. @@ -408,6 +478,10 @@ def build_figure_bmd_contour(ds, force_key, nodes, members): force_key : str nodes : dict members : dict + edge_dist : float — overhang distance; when > 0 the outermost two + girders are edge beams and are skipped in the + force diagram (their lines remain visible via + the grillage background). Returns ------- @@ -416,9 +490,14 @@ def build_figure_bmd_contour(ds, force_key, nodes, members): comp_i_name, comp_j_name = FORCE_MAP[force_key] girders = _find_girders(nodes, members) - # Global moment range for a consistent colour scale + girder_items_cnt = list(girders.items()) + n_girders_cnt = len(girder_items_cnt) + + # Global moment range - exclude edge beams from colour scale all_vals = [] - for elems in girders.values(): + for i, (_, elems) in enumerate(girder_items_cnt): + if edge_dist > 0 and (i == 0 or i == n_girders_cnt - 1): + continue _, _, _, mz, _ = _build_polyline(elems, members, nodes, comp_i_name, comp_j_name, ds) all_vals.extend(mz.tolist()) vmin, vmax = min(all_vals), max(all_vals) @@ -444,8 +523,9 @@ def build_figure_bmd_contour(ds, force_key, nodes, members): base_color = "#388E3C" - for i, (z_val, elems) in enumerate(girders.items()): - girder_name = f"G{i + 1}" + for i, (z_val, elems) in enumerate(girder_items_cnt): + is_edge_beam = edge_dist > 0 and (i == 0 or i == n_girders_cnt - 1) + girder_name = f"G{i}" if edge_dist > 0 else f"G{i + 1}" xs, ys, zs, Mz, node_ids = _build_polyline( elems, members, nodes, comp_i_name, comp_j_name, ds @@ -454,6 +534,22 @@ def build_figure_bmd_contour(ds, force_key, nodes, members): z_base = float(np.mean(zs)) z_arr = np.full_like(xs, z_base) + # baseline - grey for edge beams, green for structural + ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], + color="slategrey" if is_edge_beam else base_color, + linewidth=1.5, linestyle="--", zorder=3) + + # edge beams: baseline only, no label or force diagram + if is_edge_beam: + continue + + # girder label + ax.text(xs[0], z_base, 0, f" {girder_name}", + color="black", fontsize=11, fontweight="bold", + ha="left", va="bottom", zorder=6, + bbox=dict(boxstyle="round,pad=0.2", facecolor="white", + alpha=0.8, edgecolor="none")) + val_range = max(Mz) - min(Mz) if val_range == 0: moment_scale = 1.0 if max(Mz) == 0 else 0.1 * abs((max(xs) - min(xs)) / max(Mz)) @@ -477,17 +573,11 @@ def build_figure_bmd_contour(ds, force_key, nodes, members): lc = Line3DCollection(segs, colors=seg_colors, linewidths=3, zorder=4) ax.add_collection3d(lc) - ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], - color=base_color, linewidth=1.5, linestyle="--", zorder=3) - + # coloured drop lines at each node for xi, zi, mzi, ypi in zip(xs, z_arr, Mz, y_plot): ax.plot([xi, xi], [zi, zi], [0, ypi], color=cmap(norm(mzi)), linewidth=1.0, alpha=0.7, zorder=3) - ax.text(xs[0], z_base, 0, f" {girder_name}", - color="black", fontsize=8, fontweight="bold", - ha="left", va="bottom", zorder=6) - sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm) sm.set_array([]) cbar = fig.colorbar(sm, ax=ax, shrink=0.5, pad=0.1, aspect=20) @@ -495,7 +585,7 @@ def build_figure_bmd_contour(ds, force_key, nodes, members): ax.set_xlabel("Span Length", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) - ax.set_zlabel(f"{force_key} (scaled)", fontsize=10, labelpad=8) + ax.set_zlabel(f"{force_key} (kN, scaled)", fontsize=10, labelpad=8) ax.set_title(f"BMD Contour — {force_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 72247294d..728d6e46e 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -35,6 +35,7 @@ def __init__(self, parent=None): self._ds_all = None self._nodes = {} self._members = {} + self._edge_dist = 0.0 # Top control bar top = QHBoxLayout() @@ -73,7 +74,7 @@ def __init__(self, parent=None): # Public API - def setup(self, ds_all, loadcases: list, nodes: dict, members: dict): + def setup(self, ds_all, loadcases: list, nodes: dict, members: dict, edge_dist: float = 0.0): """ Populate the widget after bridge analysis is complete. @@ -83,10 +84,12 @@ def setup(self, ds_all, loadcases: list, nodes: dict, members: dict): loadcases : list[str] — load case names for the combo box nodes : dict — {tag: [x, y, z]} members : dict — {tag: [n1, n2]} + edge_dist : float — deck overhang; > 0 means edge beams are present """ self._ds_all = ds_all self._nodes = nodes self._members = members + self._edge_dist = edge_dist self.combo_lc.blockSignals(True) self.combo_lc.clear() @@ -108,9 +111,9 @@ def update_plot(self): plt.close(self._fig) if force_key in _SFD_KEYS: - self._fig = build_figure_sfd(ds, force_key, self._nodes, self._members) + self._fig = build_figure_sfd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) else: - self._fig, _ = build_figure_bmd(ds, force_key, self._nodes, self._members) + self._fig, _ = build_figure_bmd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 8ab920ab8..44c550f84 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -498,7 +498,8 @@ def common_design_func(self, trigger: str): ds_all = self.backend.get_results_dataset() loadcases = self.backend.get_available_loadcases() nodes, members = self.backend.get_nodes_members() - self.plots_widget.setup(ds_all, loadcases, nodes, members) + edge_dist = self.backend.get_edge_dist() + self.plots_widget.setup(ds_all, loadcases, nodes, members, edge_dist=edge_dist) # Render 3D cad using the parameters from Backend self.cad_3d_widget.render_3d_cad(bridge_parameters) From b81e73527b6a36c7e47a38ceb817ef151b20c058 Mon Sep 17 00:00:00 2001 From: Aditya Donde Date: Sun, 12 Apr 2026 20:06:09 +0530 Subject: [PATCH 142/225] removed the mpl toolbar and connected the widget to the output dock --- .../plate_girder/plot_generator.py | 27 ++- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 183 +++++++++++------- src/osdagbridge/desktop/ui/template_page.py | 1 + 3 files changed, 135 insertions(+), 76 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index e8bd7c1a9..f7918a941 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -24,6 +24,12 @@ "Mz": ("Mz_i", "Mz_j"), } +# Human-readable labels shown in plot titles / axis labels +FORCE_DISPLAY = { + "Fx": "Vx", "Fy": "Vy", "Fz": "Vz", + "Mx": "Mx", "My": "My", "Mz": "Mz", +} + # View settings (elevation/azimuth for a near-front-elevation look) DEFAULT_ELEV = 10 DEFAULT_AZIM = -90 @@ -200,6 +206,7 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): fig : matplotlib.figure.Figure """ comp_i_name, comp_j_name = FORCE_MAP[force_key] + disp_key = FORCE_DISPLAY.get(force_key, force_key) girders = _find_girders(nodes, members) fig = plt.figure(figsize=(14, 6), dpi=110, facecolor="white") @@ -296,7 +303,7 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): cursor = mplcursors.cursor(_scatter_objs, hover=True) @cursor.connect("add") - def on_add(sel, _data=_scatter_data, _fk=force_key): + def on_add(sel, _data=_scatter_data, _fk=disp_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index sel.annotation.set_text( @@ -306,8 +313,8 @@ def on_add(sel, _data=_scatter_data, _fk=force_key): ax.set_xlabel("Span Length", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) - ax.set_zlabel(f"{force_key} (kN, scaled)", fontsize=10, labelpad=8) - ax.set_title(f"Shear Force Diagram — {force_key}", fontsize=12, fontweight="bold", pad=12) + ax.set_zlabel(f"{disp_key} (kN, scaled)", fontsize=10, labelpad=8) + ax.set_title(f"Shear Force Diagram — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False ax.yaxis.pane.fill = False @@ -346,6 +353,7 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): summary_data : dict — {girder_name: {"max": float, "min": float}} """ comp_i_name, comp_j_name = FORCE_MAP[force_key] + disp_key = FORCE_DISPLAY.get(force_key, force_key) girders = _find_girders(nodes, members) fig = plt.figure(figsize=(14, 6), dpi=110, facecolor="white") @@ -438,7 +446,7 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): cursor = mplcursors.cursor(_scatter_objs, hover=True) @cursor.connect("add") - def on_add(sel, _data=_scatter_data, _fk=force_key): + def on_add(sel, _data=_scatter_data, _fk=disp_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index sel.annotation.set_text( @@ -448,8 +456,8 @@ def on_add(sel, _data=_scatter_data, _fk=force_key): ax.set_xlabel("Span Length", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) - ax.set_zlabel(f"{force_key} (kN, scaled)", fontsize=10, labelpad=8) - ax.set_title(f"Bending Moment Diagram — {force_key}", fontsize=12, fontweight="bold", pad=12) + ax.set_zlabel(f"{disp_key} (kN, scaled)", fontsize=10, labelpad=8) + ax.set_title(f"Bending Moment Diagram — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False ax.yaxis.pane.fill = False @@ -488,6 +496,7 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): fig : matplotlib.figure.Figure """ comp_i_name, comp_j_name = FORCE_MAP[force_key] + disp_key = FORCE_DISPLAY.get(force_key, force_key) girders = _find_girders(nodes, members) girder_items_cnt = list(girders.items()) @@ -581,12 +590,12 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm) sm.set_array([]) cbar = fig.colorbar(sm, ax=ax, shrink=0.5, pad=0.1, aspect=20) - cbar.set_label(f"{force_key}", fontsize=10) + cbar.set_label(f"{disp_key}", fontsize=10) ax.set_xlabel("Span Length", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) - ax.set_zlabel(f"{force_key} (kN, scaled)", fontsize=10, labelpad=8) - ax.set_title(f"BMD Contour — {force_key}", fontsize=12, fontweight="bold", pad=12) + ax.set_zlabel(f"{disp_key} (kN, scaled)", fontsize=10, labelpad=8) + ax.set_title(f"BMD Contour — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False ax.yaxis.pane.fill = False diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 728d6e46e..4928673cf 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -1,12 +1,10 @@ import matplotlib matplotlib.use("QtAgg") -from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg, NavigationToolbar2QT +from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg import matplotlib.pyplot as plt -from PySide6.QtWidgets import ( - QWidget, QVBoxLayout, QHBoxLayout, QLabel, QComboBox, -) +from PySide6.QtWidgets import QWidget, QVBoxLayout, QComboBox, QSizePolicy from osdagbridge.core.bridge_types.plate_girder.plot_generator import ( build_figure_sfd, @@ -17,109 +15,160 @@ # Forces starting with "F" -> shear (SFD); starting with "M" -> moment (BMD) _SFD_KEYS = {k for k in FORCE_MAP if k.startswith("F")} +# Map from the HTML labels used in OutputDock's force checkbox grid -> FORCE_MAP keys +_RICH_LABEL_TO_FORCE = { + "Fx": "Fx", + "Vy": "Fy", + "Vz": "Fz", + "Tx": "Mx", + "My": "My", + "Mz": "Mz", +} + +_DEFAULT_FORCE_LABEL = "Vy" # pre-checked on first link + class MplPlotWidget(QWidget): """ PySide6 widget that renders matplotlib analysis plots. - - Fx / Fy / Fz -> Shear Force Diagram (step plot) - - Mx / My / Mz -> Bending Moment Diagram (curve plot) - - Call setup() after bridge.design() completes to populate the widget. + Controls (load-case combo + force radio buttons) live in the OutputDock. + Call setup() after bridge.design() completes, then link_output_dock() to + wire the dock controls to this widget. """ def __init__(self, parent=None): super().__init__(parent) # Data populated by setup() - self._ds_all = None - self._nodes = {} - self._members = {} + self._ds_all = None + self._loadcases = [] + self._nodes = {} + self._members = {} self._edge_dist = 0.0 - # Top control bar - top = QHBoxLayout() - top.setContentsMargins(4, 4, 4, 0) - top.setSpacing(8) + # Set by link_output_dock() + self._output_dock = None - top.addWidget(QLabel("Load case:")) - self.combo_lc = QComboBox() - self.combo_lc.currentTextChanged.connect(self._on_controls_changed) - top.addWidget(self.combo_lc) - - top.addWidget(QLabel("Force:")) - self.combo_force = QComboBox() - self.combo_force.addItems(list(FORCE_MAP.keys())) - self.combo_force.setCurrentText("Fy") - self.combo_force.currentTextChanged.connect(self._on_controls_changed) - top.addWidget(self.combo_force) - - top.addStretch() - - # Matplotlib canvas - self._fig = plt.figure(figsize=(14, 6), facecolor="white") + # matplotlib canvas + self._fig = plt.figure(figsize=(14, 6), facecolor="white") self._canvas = FigureCanvasQTAgg(self._fig) self._canvas.setMinimumHeight(300) + self._canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - # Navigation toolbar (zoom / pan / save) - self._toolbar = NavigationToolbar2QT(self._canvas, self) - - # Assemble layout + # layout root = QVBoxLayout(self) root.setContentsMargins(0, 0, 0, 0) root.setSpacing(0) - root.addLayout(top) - root.addWidget(self._toolbar) root.addWidget(self._canvas, stretch=1) - # Public API + # public API - def setup(self, ds_all, loadcases: list, nodes: dict, members: dict, edge_dist: float = 0.0): + def setup(self, ds_all, loadcases: list, nodes: dict, members: dict, + edge_dist: float = 0.0): """ - Populate the widget after bridge analysis is complete. - - Parameters - ---------- - ds_all : xarray.Dataset — full results dataset (all load cases) - loadcases : list[str] — load case names for the combo box - nodes : dict — {tag: [x, y, z]} - members : dict — {tag: [n1, n2]} - edge_dist : float — deck overhang; > 0 means edge beams are present + Store analysis results. Does NOT redraw - call link_output_dock() + (or update_plot() directly) after this. """ - self._ds_all = ds_all - self._nodes = nodes - self._members = members + self._ds_all = ds_all + self._loadcases = list(loadcases) + self._nodes = nodes + self._members = members self._edge_dist = edge_dist - self.combo_lc.blockSignals(True) - self.combo_lc.clear() - self.combo_lc.addItems(loadcases) - self.combo_lc.blockSignals(False) + def link_output_dock(self, output_dock): + """ + Wire the OutputDock's load-combination combobox and force checkboxes + to this widget, populate them with live data, and draw the first plot. + + Call once after setup() completes. + """ + self._output_dock = output_dock + + # populate & connect load-combination combobox + combo_lc = output_dock.output_widget.findChild( + QComboBox, "analysis.load_combination" + ) + if combo_lc is not None: + combo_lc.blockSignals(True) + combo_lc.clear() + combo_lc.addItems(self._loadcases) + combo_lc.blockSignals(False) + # Prevent long item text from widening the dock + combo_lc.setSizeAdjustPolicy( + QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon + ) + combo_lc.setMinimumContentsLength(12) + combo_lc.currentTextChanged.connect(self.update_plot) + + # pre-check default force + connect all force checkboxes + from osdagbridge.desktop.ui.utils.combobox_utils import RichCheckBox + force_cbs = [ + cb for cb in output_dock.output_widget.findChildren(RichCheckBox) + if cb.text() in _RICH_LABEL_TO_FORCE + ] + for cb in force_cbs: + cb.setChecked(cb.text() == _DEFAULT_FORCE_LABEL) + cb.stateChanged.connect(self.update_plot) self.update_plot() - def update_plot(self): - """Rebuild and redraw the current figure from the selected controls.""" - if self._ds_all is None: + def update_plot(self, *_args): + """Rebuild and redraw the current figure from the OutputDock controls.""" + if self._ds_all is None or self._output_dock is None: return - loadcase = self.combo_lc.currentText() - force_key = self.combo_force.currentText() + loadcase = self._current_loadcase() + force_key = self._current_force_key() - ds = self._ds_all.sel(Loadcase=loadcase) + if not loadcase or not force_key: + return + ds = self._ds_all.sel(Loadcase=loadcase) plt.close(self._fig) if force_key in _SFD_KEYS: - self._fig = build_figure_sfd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) + self._fig = build_figure_sfd( + ds, force_key, self._nodes, self._members, + edge_dist=self._edge_dist + ) else: - self._fig, _ = build_figure_bmd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) + self._fig, _ = build_figure_bmd( + ds, force_key, self._nodes, self._members, + edge_dist=self._edge_dist + ) self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) + self._fit_figure_to_canvas() self._canvas.draw() - # Internal slots - - def _on_controls_changed(self): - self.update_plot() + def resizeEvent(self, event): + super().resizeEvent(event) + self._fit_figure_to_canvas() + self._canvas.draw_idle() + + # private helpers + + def _fit_figure_to_canvas(self): + """Resize the matplotlib figure to match the current canvas widget size.""" + w_px = self._canvas.width() + h_px = self._canvas.height() + if w_px > 10 and h_px > 10: + dpi = self._fig.dpi + self._fig.set_size_inches(w_px / dpi, h_px / dpi, forward=False) + + def _current_loadcase(self) -> str: + """Read the selected load case from the OutputDock combobox.""" + combo = self._output_dock.output_widget.findChild( + QComboBox, "analysis.load_combination" + ) + return combo.currentText() if combo else (self._loadcases[0] if self._loadcases else "") + + def _current_force_key(self) -> str: + """Return the FORCE_MAP key for the currently checked force checkbox.""" + from osdagbridge.desktop.ui.utils.combobox_utils import RichCheckBox + for cb in self._output_dock.output_widget.findChildren(RichCheckBox): + if cb.isChecked() and cb.text() in _RICH_LABEL_TO_FORCE: + return _RICH_LABEL_TO_FORCE[cb.text()] + return "Fy" # fallback diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 44c550f84..841a28fb8 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -500,6 +500,7 @@ def common_design_func(self, trigger: str): nodes, members = self.backend.get_nodes_members() edge_dist = self.backend.get_edge_dist() self.plots_widget.setup(ds_all, loadcases, nodes, members, edge_dist=edge_dist) + self.plots_widget.link_output_dock(self.output_dock) # Render 3D cad using the parameters from Backend self.cad_3d_widget.render_3d_cad(bridge_parameters) From 1d1e2b26df354f39d7a4bf2cdc30aaade2edc8e5 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Mon, 13 Apr 2026 17:48:26 +0530 Subject: [PATCH 143/225] feat: Percent bar widget in output dock --- .../bridge_types/plate_girder/ui_fields.py | 26 ++ src/osdagbridge/core/utils/common.py | 10 + .../desktop/ui/dialogs/additional_inputs.py | 10 +- .../desktop/ui/docks/output_dock.py | 10 +- src/osdagbridge/desktop/ui/docks/tmp.py | 0 src/osdagbridge/desktop/ui/mpl_plot_widget.py | 4 +- .../desktop/ui/utils/combobox_utils.py | 176 --------- .../desktop/ui/utils/custom_widgets.py | 337 ++++++++++++++++++ 8 files changed, 388 insertions(+), 185 deletions(-) create mode 100644 src/osdagbridge/desktop/ui/docks/tmp.py delete mode 100644 src/osdagbridge/desktop/ui/utils/combobox_utils.py create mode 100644 src/osdagbridge/desktop/ui/utils/custom_widgets.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index bf83913d0..12e0bd36b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -271,6 +271,32 @@ def output_values(self, flag=None): TYPE_BUTTON, None, True, "No Validator", {"action": "open_deck_design", "button_label": "Here"}), + # ─── Percentage Bars ───────────────────────────────────────────────────────── + + (KEY_UTIL_FLEXURE, "Strength Limit State (Flexure)", + TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), + + (KEY_UTIL_SHEAR, "Strength Limit State (Shear)", + TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), + + (KEY_UTIL_INTERACTION, "Interaction", + TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), + + (KEY_UTIL_LTB, "Lateral Torsional Buckling", + TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), + + (KEY_UTIL_LONG_TRANS_SHEAR, "Resistance to Longitudinal and Transverse Shear", + TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), + + (KEY_UTIL_FATIGUE, "Resistance to Fatigue", + TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), + + (KEY_UTIL_STRESS_LIMITATION, "Stress Limitation", + TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), + + (KEY_UTIL_DEFLECTION_CRACK, "Deflection and Crack Control", + TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), + # ── Substructure ────────────────────────────────────────────────── (KEY_SECTION_OUTPUT_SUBSTRUCTURE, "Substructure", TYPE_TITLE, None, True, "No Validator", diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index 83a08e48e..98c2d41ab 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -26,6 +26,7 @@ TYPE_CHECKBOX = "checkbox" TYPE_CHECKBOX_ROW = "checkbox_row" TYPE_CHECKBOX_GRID = "checkbox_grid" +TYPE_PERCENT_BAR = "percent_bar" # Keys for inputs (consistent dot notation for object names) KEY_MODULE = "Module" @@ -59,6 +60,15 @@ KEY_BTN_STEEL_DESIGN = "btn.steel_design" KEY_BTN_DECK_DESIGN = "btn.deck_design" +KEY_UTIL_FLEXURE = "util.flexure" +KEY_UTIL_SHEAR = "util.shear" +KEY_UTIL_INTERACTION = "util.interaction" +KEY_UTIL_LTB = "util.ltb" +KEY_UTIL_LONG_TRANS_SHEAR = "util.long_trans_shear" +KEY_UTIL_FATIGUE = "util.fatigue" +KEY_UTIL_STRESS_LIMITATION = "util.stress_limitation" +KEY_UTIL_DEFLECTION_CRACK = "util.deflection_crack" + # Module + section identifiers (also used as UI keys) KEY_MODULE_PLATE_GIRDER = "module.plate_girder" KEY_SECTION_STRUCTURE = "section.structure" diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 252833c07..a216be49e 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -27,11 +27,11 @@ from osdagbridge.desktop.ui.dialogs.tabs.support_conditions_tab import SupportConditionsTab from osdagbridge.desktop.ui.dialogs.tabs.design_options_tab import DesignOptionsTab from osdagbridge.desktop.ui.dialogs.tabs.design_options_cont_tab import DesignOptionsContTab -from osdagbridge.desktop.ui.utils.combobox_utils import SmartCursorComboBoxView - - - - +from osdagbridge.desktop.ui.utils.custom_widgets import SmartCursorComboBoxView +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( + DESIGN_OPTIONS_SCHEMA, + DESIGN_OPTIONS_CONT_SCHEMA, +) # ================================================================================= # MAIN IMPLEMENTATION diff --git a/src/osdagbridge/desktop/ui/docks/output_dock.py b/src/osdagbridge/desktop/ui/docks/output_dock.py index e1bb6f748..5cd7844c2 100644 --- a/src/osdagbridge/desktop/ui/docks/output_dock.py +++ b/src/osdagbridge/desktop/ui/docks/output_dock.py @@ -29,12 +29,13 @@ from PySide6.QtGui import QIcon from osdagbridge.core.utils.common import ( - TYPE_TITLE, TYPE_BUTTON, TYPE_COMBOBOX, + TYPE_TITLE, TYPE_BUTTON, TYPE_COMBOBOX, TYPE_PERCENT_BAR, TYPE_CHECKBOX, TYPE_CHECKBOX_ROW, TYPE_CHECKBOX_GRID, ) from osdagbridge.desktop.ui.utils.custom_buttons import DockCustomButton from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style -from osdagbridge.desktop.ui.utils.combobox_utils import RichCheckBox +from osdagbridge.desktop.ui.utils.custom_widgets import RichCheckBox, PercentBarWidget + # ── Styles ──────────────────────────────────────────────────────────────────── @@ -270,6 +271,11 @@ def close_group(): cb = QCheckBox(label or "") cb.setObjectName(key) target.addWidget(cb) + + elif ftype == TYPE_PERCENT_BAR: + bar = PercentBarWidget(label=label or "", value=0.0) + bar.setObjectName(key) + target.addWidget(bar) # ── Close nested subgroup if group_end declared ──────────────── if meta.get("group_end"): diff --git a/src/osdagbridge/desktop/ui/docks/tmp.py b/src/osdagbridge/desktop/ui/docks/tmp.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 4928673cf..e344b0ed2 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -102,7 +102,7 @@ def link_output_dock(self, output_dock): combo_lc.currentTextChanged.connect(self.update_plot) # pre-check default force + connect all force checkboxes - from osdagbridge.desktop.ui.utils.combobox_utils import RichCheckBox + from osdagbridge.desktop.ui.utils.custom_widgets import RichCheckBox force_cbs = [ cb for cb in output_dock.output_widget.findChildren(RichCheckBox) if cb.text() in _RICH_LABEL_TO_FORCE @@ -167,7 +167,7 @@ def _current_loadcase(self) -> str: def _current_force_key(self) -> str: """Return the FORCE_MAP key for the currently checked force checkbox.""" - from osdagbridge.desktop.ui.utils.combobox_utils import RichCheckBox + from osdagbridge.desktop.ui.utils.custom_widgets import RichCheckBox for cb in self._output_dock.output_widget.findChildren(RichCheckBox): if cb.isChecked() and cb.text() in _RICH_LABEL_TO_FORCE: return _RICH_LABEL_TO_FORCE[cb.text()] diff --git a/src/osdagbridge/desktop/ui/utils/combobox_utils.py b/src/osdagbridge/desktop/ui/utils/combobox_utils.py deleted file mode 100644 index 2543dae74..000000000 --- a/src/osdagbridge/desktop/ui/utils/combobox_utils.py +++ /dev/null @@ -1,176 +0,0 @@ -""" -Combobox UI utilities. - -Provides enhanced combobox views with: -- Greyed-out disabled items -- Smart cursor behaviour -- Better UX feedback for selectable vs non-selectable items -""" - -from PySide6.QtWidgets import QListView, QStyledItemDelegate -from PySide6.QtCore import Qt -from PySide6.QtGui import QColor - - -# ================================================================================= -# ITEM DELEGATE FOR DISABLED ITEMS -# ================================================================================= - -class ComboBoxItemDelegate(QStyledItemDelegate): - """ - Custom delegate to render disabled combobox items in grey. - - This improves UX by visually distinguishing disabled options - from selectable ones in dropdown lists. - """ - - def paint(self, painter, option, index): - model = index.model() - item = model.item(index.row()) if hasattr(model, "item") else None - - if item and not item.isEnabled(): - # Draw background normally - painter.fillRect(option.rect, option.palette.base()) - - # Draw disabled text in grey - painter.setPen(QColor(120, 120, 120)) - text = index.data() - painter.drawText( - option.rect, - Qt.AlignLeft | Qt.AlignVCenter, - f" {text}", - ) - else: - super().paint(painter, option, index) - - -# ================================================================================= -# SMART COMBOBOX VIEW -# ================================================================================= - -class SmartCursorComboBoxView(QListView): - """ - Custom QListView used inside QComboBox. - - Features: - - Shows pointing hand cursor for enabled items - - Shows forbidden cursor for disabled items - - Uses ComboBoxItemDelegate for grey rendering - """ - - def __init__(self, parent=None): - super().__init__(parent) - - # Apply custom delegate - self.setItemDelegate(ComboBoxItemDelegate()) - - def mouseMoveEvent(self, event): - """ - Update cursor depending on whether hovered item is enabled. - """ - index = self.indexAt(event.pos()) - - if index.isValid(): - model = index.model() - item = model.item(index.row()) if hasattr(model, "item") else None - - if item and not item.isEnabled(): - self.setCursor(Qt.ForbiddenCursor) - else: - self.setCursor(Qt.PointingHandCursor) - else: - self.setCursor(Qt.PointingHandCursor) - - super().mouseMoveEvent(event) - - def leaveEvent(self, event): - """ - Reset cursor when leaving the dropdown. - """ - self.setCursor(Qt.ArrowCursor) - super().leaveEvent(event) - -from PySide6.QtWidgets import QCheckBox, QLabel, QHBoxLayout - -#---------------------------------------------------------------------------------- -# To create a checkbox with text that supports HTML formatting (e.g. subscripts) -#---------------------------------------------------------------------------------- -from PySide6.QtWidgets import QCheckBox, QStyleOptionButton, QStyle, QApplication -from PySide6.QtGui import QPainter, QTextDocument -from PySide6.QtCore import Qt, QSize, QPoint - - -class RichCheckBox(QCheckBox): - def __init__(self, text="", parent=None): - super().__init__("", parent) # Keep native text empty - self._rich_text = text - - def setText(self, text: str): - self._rich_text = text - self.updateGeometry() - self.update() - - def text(self) -> str: - return self._rich_text - - def _doc(self) -> QTextDocument: - """Build a QTextDocument from the rich text.""" - doc = QTextDocument() - doc.setDefaultFont(self.font()) - doc.setHtml(self._rich_text) - return doc - - def sizeHint(self) -> QSize: - doc = self._doc() - # Ideal (unconstrained) size of the HTML content - doc.setTextWidth(-1) - text_size = doc.size() - - opt = QStyleOptionButton() - self.initStyleOption(opt) - - # Width of the native checkbox indicator - indicator_w = self.style().pixelMetric( - QStyle.PM_IndicatorWidth, opt, self - ) - spacing = self.style().pixelMetric( - QStyle.PM_CheckBoxLabelSpacing, opt, self - ) - - w = indicator_w + spacing + int(text_size.width()) - h = max( - self.style().pixelMetric(QStyle.PM_IndicatorHeight, opt, self), - int(text_size.height()), - ) - return QSize(w + 4, h + 4) - - def paintEvent(self, event): - painter = QPainter(self) - painter.setRenderHint(QPainter.Antialiasing) - - opt = QStyleOptionButton() - self.initStyleOption(opt) - - # --- 1. Draw ONLY the checkbox indicator (no text) --- - opt.text = "" - indicator_rect = self.style().subElementRect( - QStyle.SE_CheckBoxIndicator, opt, self - ) - opt.rect = indicator_rect - self.style().drawControl(QStyle.CE_CheckBox, opt, painter, self) - - # --- 2. Draw rich text with QTextDocument --- - indicator_w = self.style().pixelMetric(QStyle.PM_IndicatorWidth, opt, self) - spacing = self.style().pixelMetric(QStyle.PM_CheckBoxLabelSpacing, opt, self) - - text_x = indicator_w + spacing - text_y = (self.height() - int(self._doc().size().height())) // 2 - - painter.save() - painter.translate(QPoint(text_x, text_y)) - - doc = self._doc() - doc.setTextWidth(self.width() - text_x) - doc.drawContents(painter) - - painter.restore() \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/utils/custom_widgets.py b/src/osdagbridge/desktop/ui/utils/custom_widgets.py new file mode 100644 index 000000000..0b2bc76d9 --- /dev/null +++ b/src/osdagbridge/desktop/ui/utils/custom_widgets.py @@ -0,0 +1,337 @@ +""" +Combobox UI utilities. + +Provides enhanced combobox views with: +- Greyed-out disabled items +- Smart cursor behaviour +- Better UX feedback for selectable vs non-selectable items +""" + +from PySide6.QtWidgets import QListView, QStyledItemDelegate, QWidget, QVBoxLayout, QSizePolicy +from PySide6.QtCore import Qt, QRectF +from PySide6.QtGui import QColor, QPainterPath + +# ================================================================================= +# ITEM DELEGATE FOR DISABLED ITEMS +# ================================================================================= + +class ComboBoxItemDelegate(QStyledItemDelegate): + """ + Custom delegate to render disabled combobox items in grey. + + This improves UX by visually distinguishing disabled options + from selectable ones in dropdown lists. + """ + + def paint(self, painter, option, index): + model = index.model() + item = model.item(index.row()) if hasattr(model, "item") else None + + if item and not item.isEnabled(): + # Draw background normally + painter.fillRect(option.rect, option.palette.base()) + + # Draw disabled text in grey + painter.setPen(QColor(120, 120, 120)) + text = index.data() + painter.drawText( + option.rect, + Qt.AlignLeft | Qt.AlignVCenter, + f" {text}", + ) + else: + super().paint(painter, option, index) + + +# ================================================================================= +# SMART COMBOBOX VIEW +# ================================================================================= + +class SmartCursorComboBoxView(QListView): + """ + Custom QListView used inside QComboBox. + + Features: + - Shows pointing hand cursor for enabled items + - Shows forbidden cursor for disabled items + - Uses ComboBoxItemDelegate for grey rendering + """ + + def __init__(self, parent=None): + super().__init__(parent) + + # Apply custom delegate + self.setItemDelegate(ComboBoxItemDelegate()) + + def mouseMoveEvent(self, event): + """ + Update cursor depending on whether hovered item is enabled. + """ + index = self.indexAt(event.pos()) + + if index.isValid(): + model = index.model() + item = model.item(index.row()) if hasattr(model, "item") else None + + if item and not item.isEnabled(): + self.setCursor(Qt.ForbiddenCursor) + else: + self.setCursor(Qt.PointingHandCursor) + else: + self.setCursor(Qt.PointingHandCursor) + + super().mouseMoveEvent(event) + + def leaveEvent(self, event): + """ + Reset cursor when leaving the dropdown. + """ + self.setCursor(Qt.ArrowCursor) + super().leaveEvent(event) + +from PySide6.QtWidgets import QCheckBox, QLabel, QHBoxLayout +from PySide6.QtWidgets import QCheckBox, QStyleOptionButton, QStyle, QApplication +from PySide6.QtGui import QPainter, QTextDocument +from PySide6.QtCore import Qt, QSize, QPoint + +#---------------------------------------------------------------------------------- +# To create a checkbox with text that supports HTML formatting (e.g. subscripts) +#---------------------------------------------------------------------------------- +class RichCheckBox(QCheckBox): + def __init__(self, text="", parent=None): + super().__init__("", parent) # Keep native text empty + self._rich_text = text + + def setText(self, text: str): + self._rich_text = text + self.updateGeometry() + self.update() + + def text(self) -> str: + return self._rich_text + + def _doc(self) -> QTextDocument: + """Build a QTextDocument from the rich text.""" + doc = QTextDocument() + doc.setDefaultFont(self.font()) + doc.setHtml(self._rich_text) + return doc + + def sizeHint(self) -> QSize: + doc = self._doc() + # Ideal (unconstrained) size of the HTML content + doc.setTextWidth(-1) + text_size = doc.size() + + opt = QStyleOptionButton() + self.initStyleOption(opt) + + # Width of the native checkbox indicator + indicator_w = self.style().pixelMetric( + QStyle.PM_IndicatorWidth, opt, self + ) + spacing = self.style().pixelMetric( + QStyle.PM_CheckBoxLabelSpacing, opt, self + ) + + w = indicator_w + spacing + int(text_size.width()) + h = max( + self.style().pixelMetric(QStyle.PM_IndicatorHeight, opt, self), + int(text_size.height()), + ) + return QSize(w + 4, h + 4) + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + + opt = QStyleOptionButton() + self.initStyleOption(opt) + + # --- 1. Draw ONLY the checkbox indicator (no text) --- + opt.text = "" + indicator_rect = self.style().subElementRect( + QStyle.SE_CheckBoxIndicator, opt, self + ) + opt.rect = indicator_rect + self.style().drawControl(QStyle.CE_CheckBox, opt, painter, self) + + # --- 2. Draw rich text with QTextDocument --- + indicator_w = self.style().pixelMetric(QStyle.PM_IndicatorWidth, opt, self) + spacing = self.style().pixelMetric(QStyle.PM_CheckBoxLabelSpacing, opt, self) + + text_x = indicator_w + spacing + text_y = (self.height() - int(self._doc().size().height())) // 2 + + painter.save() + painter.translate(QPoint(text_x, text_y)) + + doc = self._doc() + doc.setTextWidth(self.width() - text_x) + doc.drawContents(painter) + + painter.restore() + +#=================Percentage-bar widget (for OutputDock)============================================== +""" +Usage + bar = PercentBarWidget(label="Strength Limit State (Flexure)", value=80) + bar = PercentBarWidget(label="Strength Limit State (Shear)", value=120) + + # Update at runtime: + bar.set_value(95) + +Visual behaviour +---------------- + value < 100 → green fill, proportional width, "XX%" text to the right + value >= 100 → red fill, full width, "XX%" text to the right +""" + +# ── Colours ─────────────────────────────────────────────────────────────────── +COLOR_GREEN = QColor("#90AF13") # matches dock accent +COLOR_RED = QColor("#CC2222") +COLOR_TRACK = QColor("#D8D8D8") # unfilled portion + +BAR_HEIGHT = 8 # px — height of the progress track +PCT_LABEL_WIDTH = 46 # px — fixed width reserved for "120%" text +LABEL_STYLE = "QLabel { font-size:13px; font-weight:bold; color:#222; background:transparent; }" +PCT_LABEL_STYLE = "QLabel { font-size:12px; font-weight:bold; color:#444; background:transparent; }" + + +# ── Inner bar widget ────────────────────────────────────────────────────────── + +class _BarPainter(QWidget): + """Custom-painted progress track.""" + + def __init__(self, value: float, parent=None): + super().__init__(parent) + self._value = max(0.0, float(value)) + self.setFixedHeight(BAR_HEIGHT) + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + + def set_value(self, value: float): + self._value = max(0.0, float(value)) + self.update() + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + + w = self.width() + h = self.height() + radius = h / 2.0 + + exceeded = self._value >= 100.0 + fill_ratio = 1.0 if exceeded else self._value / 100.0 + fill_w = w * fill_ratio + + painter.setPen(Qt.NoPen) + + # ── Full rounded track pill ─────────────────────────────────────────── + track_path = QPainterPath() + track_path.addRoundedRect(QRectF(0, 0, w, h), radius, radius) + painter.setBrush(COLOR_TRACK) + painter.drawPath(track_path) + + # ── Fill clipped to track shape ─────────────────────────────────────── + if fill_w > 0: + fill_color = COLOR_RED if exceeded else COLOR_GREEN + fill_rect_path = QPainterPath() + fill_rect_path.addRect(QRectF(0, 0, fill_w, h)) + clipped = track_path.intersected(fill_rect_path) + painter.setBrush(fill_color) + painter.drawPath(clipped) + + painter.end() + + +# ── Public widget ───────────────────────────────────────────────────────────── + +class PercentBarWidget(QWidget): + """ + [Label (wraps, constrained to bar width)] + [bar ────────────────────────────────── ] XX% + """ + + def __init__(self, label: str = "", value: float = 0.0, parent=None): + super().__init__(parent) + self.setStyleSheet("background: transparent;") + + root = QVBoxLayout(self) + root.setContentsMargins(0, 0, 0, 0) + root.setSpacing(4) + + # ── Label — max-width kept in sync with bar via resizeEvent ─────────── + lbl = QLabel(label) + lbl.setStyleSheet(LABEL_STYLE) + lbl.setTextFormat(Qt.RichText) + lbl.setWordWrap(True) + lbl.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + self._lbl = lbl + root.addWidget(lbl) + + # ── Bar row ─────────────────────────────────────────────────────────── + bar_row = QHBoxLayout() + bar_row.setContentsMargins(0, 0, 0, 0) + bar_row.setSpacing(8) + + self._bar = _BarPainter(value) + bar_row.addWidget(self._bar, 1) + + self._pct_label = QLabel(self._fmt(value)) + self._pct_label.setStyleSheet(PCT_LABEL_STYLE) + self._pct_label.setFixedWidth(PCT_LABEL_WIDTH) + self._pct_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + bar_row.addWidget(self._pct_label) + + root.addLayout(bar_row) + + def resizeEvent(self, event): + """Keep label max-width aligned to the bar column (excludes pct label).""" + super().resizeEvent(event) + bar_w = self.width() - PCT_LABEL_WIDTH - 8 # 8 = bar_row spacing + if bar_w > 0: + self._lbl.setMaximumWidth(bar_w) + + # ── Public API ──────────────────────────────────────────────────────────── + + def set_value(self, value: float): + self._bar.set_value(value) + self._pct_label.setText(self._fmt(value)) + + @staticmethod + def _fmt(value: float) -> str: + return f"{int(round(value))}%" + + +#---------Standalone-Testing------------------------------------ +import sys +from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout + +if __name__ == "__main__": + app = QApplication(sys.argv) + + win = QWidget() + win.setWindowTitle("PercentBar Test") + win.setMinimumWidth(480) + win.setStyleSheet("background-color: white;") + + layout = QVBoxLayout(win) + layout.setContentsMargins(24, 24, 24, 24) + layout.setSpacing(16) + + layout.addWidget(PercentBarWidget("Strength Limit State (Flexure)", 80)) + layout.addWidget(PercentBarWidget( + "Strength Limit State (Shear) — Very Long Label That Should Wrap Here", 120 + )), + layout.addWidget(PercentBarWidget( + "Strength Limit State (Shear) — Very Long Label That Should Wrap Here", 100 + )), + layout.addWidget(PercentBarWidget("Strength Limit State (Flexure)", 99.9)) + layout.addWidget(PercentBarWidget("Strength Limit State (Flexure)", 99.4)) + layout.addStretch() + + win.show() + sys.exit(app.exec()) + +#------------- \ No newline at end of file From 977d3c8c778e9acad1891df163104e930cc81f02 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Mon, 13 Apr 2026 19:36:27 +0530 Subject: [PATCH 144/225] Restructured Output dock --- .../bridge_types/plate_girder/ui_fields.py | 33 ++++++++++++++----- src/osdagbridge/core/utils/common.py | 5 +++ .../desktop/ui/docks/output_dock.py | 23 ++++++++++++- .../desktop/ui/utils/custom_widgets.py | 8 ++--- 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 12e0bd36b..146512325 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -236,10 +236,10 @@ def output_values(self, flag=None): TYPE_TITLE, None, True, "No Validator", {"kind": "analysis"}), - (KEY_ANALYSIS_MEMBER, "Member:", + (KEY_ANALYSIS_MEMBER, "Member", TYPE_COMBOBOX, ["All"], True, "No Validator", {}), - (KEY_ANALYSIS_LOAD_COMBINATION, "Load Combination:", + (KEY_ANALYSIS_LOAD_COMBINATION, "Load Combination", TYPE_COMBOBOX, ["Envelope"], True, "No Validator", {}), (KEY_ANALYSIS_FORCES, None, # None = no label @@ -263,15 +263,14 @@ def output_values(self, flag=None): TYPE_TITLE, None, True, "No Validator", {"kind": "design"}), - (KEY_BTN_STEEL_DESIGN, "Steel Design", - TYPE_BUTTON, None, True, "No Validator", - {"action": "open_steel_design", "button_label": "Here"}), + # ─── Percentage Bars ───────────────────────────────────────────────────────── - (KEY_BTN_DECK_DESIGN, "Deck Design", - TYPE_BUTTON, None, True, "No Validator", - {"action": "open_deck_design", "button_label": "Here"}), + (KEY_STEELDESIGN_MEMBER_ID, "Member ID", + TYPE_COMBOBOX, ["All"], True, "No Validator", + {"group_title": "Steel Design"}), - # ─── Percentage Bars ───────────────────────────────────────────────────────── + (KEY_STEELDESIGN_LOAD_COMBINATION, "Load Case", + TYPE_COMBOBOX, ["Envelope"], True, "No Validator", {}), (KEY_UTIL_FLEXURE, "Strength Limit State (Flexure)", TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), @@ -297,6 +296,22 @@ def output_values(self, flag=None): (KEY_UTIL_DEFLECTION_CRACK, "Deflection and Crack Control", TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), + (KEY_BTN_STEEL_DESIGN, "Analysis & Design Results Summary", + TYPE_ONLY_BUTTON, None, True, "No Validator", + { + "action": "open_steel_design" + }), + + # ─── Deck Design ───────────────────────────────────────────────────────── + + (KEY_BTN_DECK_DESIGN, "Design Summary", + TYPE_ONLY_BUTTON, None, True, "No Validator", + { + "action": "open_deck_design", + "group_title": "Deck Design", + "group_end": True + }), + # ── Substructure ────────────────────────────────────────────────── (KEY_SECTION_OUTPUT_SUBSTRUCTURE, "Substructure", TYPE_TITLE, None, True, "No Validator", diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index 98c2d41ab..14a459fb7 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -27,6 +27,7 @@ TYPE_CHECKBOX_ROW = "checkbox_row" TYPE_CHECKBOX_GRID = "checkbox_grid" TYPE_PERCENT_BAR = "percent_bar" +TYPE_ONLY_BUTTON = "only_button" # Keys for inputs (consistent dot notation for object names) KEY_MODULE = "Module" @@ -49,6 +50,7 @@ KEY_SECTION_OUTPUT_ANALYSIS = "section.output.analysis" KEY_SECTION_OUTPUT_SUPERSTRUCTURE = "section.output.superstructure" KEY_SECTION_OUTPUT_SUBSTRUCTURE = "section.output.substructure" +KEY_SECTION_OUTPUT_STEELDESIGN = "section.output.superstructure.steeldesign" # ── Output field keys ───────────────────────────────────────────────────────── KEY_ANALYSIS_MEMBER = "analysis.member" @@ -57,6 +59,9 @@ KEY_ANALYSIS_DISPLAY_OPTIONS = "analysis.display_options" KEY_ANALYSIS_UTILIZATION = "analysis.utilization" +KEY_STEELDESIGN_MEMBER_ID = "steeldesign.member_id" +KEY_STEELDESIGN_LOAD_COMBINATION = "steeldesign.load_combination" + KEY_BTN_STEEL_DESIGN = "btn.steel_design" KEY_BTN_DECK_DESIGN = "btn.deck_design" diff --git a/src/osdagbridge/desktop/ui/docks/output_dock.py b/src/osdagbridge/desktop/ui/docks/output_dock.py index 5cd7844c2..0b5e1fb26 100644 --- a/src/osdagbridge/desktop/ui/docks/output_dock.py +++ b/src/osdagbridge/desktop/ui/docks/output_dock.py @@ -30,7 +30,7 @@ from osdagbridge.core.utils.common import ( TYPE_TITLE, TYPE_BUTTON, TYPE_COMBOBOX, TYPE_PERCENT_BAR, - TYPE_CHECKBOX, TYPE_CHECKBOX_ROW, TYPE_CHECKBOX_GRID, + TYPE_CHECKBOX, TYPE_CHECKBOX_ROW, TYPE_CHECKBOX_GRID, TYPE_ONLY_BUTTON ) from osdagbridge.desktop.ui.utils.custom_buttons import DockCustomButton from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style @@ -276,6 +276,9 @@ def close_group(): bar = PercentBarWidget(label=label or "", value=0.0) bar.setObjectName(key) target.addWidget(bar) + + elif ftype == TYPE_ONLY_BUTTON: + target.addLayout(self._make_only_button_row(label, meta)) # ── Close nested subgroup if group_end declared ──────────────── if meta.get("group_end"): @@ -373,6 +376,24 @@ def _make_button_row(self, label: str, meta: dict) -> QHBoxLayout: row.addWidget(btn, 1) return row + def _make_only_button_row(self, label: str, meta: dict) -> QHBoxLayout: + """Single button with no label.""" + row = QHBoxLayout() + row.setContentsMargins(0, 8, 0, 0) + row.setSpacing(8) + + btn = QPushButton(label) + btn.setCursor(Qt.CursorShape.PointingHandCursor) + btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + btn.setStyleSheet(ACTION_BTN_STYLE) + cb = getattr(self, meta.get("action", ""), None) + if callable(cb): + btn.clicked.connect(cb) + else: + btn.setEnabled(False) + row.addWidget(btn, 1) + return row + def _make_combobox_row(self, key: str, label: str, values, meta: dict) -> QHBoxLayout: """[Label | Dropdown] row.""" row = QHBoxLayout() diff --git a/src/osdagbridge/desktop/ui/utils/custom_widgets.py b/src/osdagbridge/desktop/ui/utils/custom_widgets.py index 0b2bc76d9..6b4fce588 100644 --- a/src/osdagbridge/desktop/ui/utils/custom_widgets.py +++ b/src/osdagbridge/desktop/ui/utils/custom_widgets.py @@ -192,9 +192,9 @@ def paintEvent(self, event): COLOR_RED = QColor("#CC2222") COLOR_TRACK = QColor("#D8D8D8") # unfilled portion -BAR_HEIGHT = 8 # px — height of the progress track +BAR_HEIGHT = 6 # px — height of the progress track PCT_LABEL_WIDTH = 46 # px — fixed width reserved for "120%" text -LABEL_STYLE = "QLabel { font-size:13px; font-weight:bold; color:#222; background:transparent; }" +LABEL_STYLE = "QLabel { font-size:13px; color:#222; background:transparent; }" PCT_LABEL_STYLE = "QLabel { font-size:12px; font-weight:bold; color:#444; background:transparent; }" @@ -258,7 +258,7 @@ def __init__(self, label: str = "", value: float = 0.0, parent=None): self.setStyleSheet("background: transparent;") root = QVBoxLayout(self) - root.setContentsMargins(0, 0, 0, 0) + root.setContentsMargins(0, 5, 0, 0) root.setSpacing(4) # ── Label — max-width kept in sync with bar via resizeEvent ─────────── @@ -281,7 +281,7 @@ def __init__(self, label: str = "", value: float = 0.0, parent=None): self._pct_label = QLabel(self._fmt(value)) self._pct_label.setStyleSheet(PCT_LABEL_STYLE) self._pct_label.setFixedWidth(PCT_LABEL_WIDTH) - self._pct_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + self._pct_label.setAlignment(Qt.AlignCenter) bar_row.addWidget(self._pct_label) root.addLayout(bar_row) From 7a3fe405d559548bf5edb80c23f6c21431002b01 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Wed, 15 Apr 2026 12:16:34 +0530 Subject: [PATCH 145/225] modified mpl plots added units in input dock added convert ifc in file dropdown --- .../plate_girder/plot_generator.py | 37 +++++++++---------- .../bridge_types/plate_girder/ui_fields.py | 4 +- src/osdagbridge/core/utils/common.py | 6 +-- src/osdagbridge/desktop/ui/template_page.py | 4 ++ 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index f7918a941..47809ad98 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -175,10 +175,11 @@ def _add_coordinate_triad(ax, nodes, scale=0.10): ax.text(ox, oz + L * 1.25, oy, "Z", color=colors["Z"], fontsize=9, fontweight="bold", zorder=5) - # Y arrow (upward = force direction) - ax.quiver(ox, oz, oy, 0, 0, L, + # Y arrow (upward = force direction) — scaled by 0.30 to match box_aspect + Ly = L * 0.30 + ax.quiver(ox, oz, oy, 0, 0, Ly, color=colors["Y"], linewidth=2, arrow_length_ratio=0.25, zorder=5) - ax.text(ox, oz, oy + L * 1.25, "Y", color=colors["Y"], + ax.text(ox, oz, oy + Ly * 1.25, "Y", color=colors["Y"], fontsize=9, fontweight="bold", zorder=5) @@ -262,7 +263,7 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): # girder label ax.text(xs[0], z_base, 0, f" {girder_name}", - color="black", fontsize=11, fontweight="bold", + color="black", fontsize=11, fontweight="normal", ha="left", va="bottom", zorder=6, bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) @@ -405,7 +406,7 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): # girder label ax.text(xs[0], z_base, 0, f" {girder_name}", - color="black", fontsize=11, fontweight="bold", + color="black", fontsize=11, fontweight="normal", ha="left", va="bottom", zorder=6, bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) @@ -428,12 +429,10 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): ax.plot(xs, z_arr, y_plot, color=moment_color, linewidth=2.0, zorder=4) idx_max = int(np.argmax(Mz)) - idx_min = int(np.argmin(Mz)) - for idx, clr in ((idx_max, "#FF4136"), (idx_min, "#0074D9")): - ax.plot([xs[idx], xs[idx]], [z_base, z_base], [0, y_plot[idx]], - color=clr, linewidth=1.5, zorder=3) - ax.text(xs[idx], z_base, y_plot[idx], - f" {Mz[idx]:.2f} kN", color=clr, fontsize=7, zorder=6) + ax.plot([xs[idx_max], xs[idx_max]], [z_base, z_base], [0, y_plot[idx_max]], + color="#FF4136", linewidth=1.5, zorder=3) + ax.text(xs[idx_max], z_base, y_plot[idx_max], + f" {Mz[idx_max]:.2f} kNm", color="#FF4136", fontsize=7, zorder=6) sc = ax.scatter(xs, z_arr, y_plot, color=moment_color, s=30, zorder=5, depthshade=False) @@ -450,13 +449,13 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index sel.annotation.set_text( - f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kN" + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kNm" ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) - ax.set_xlabel("Span Length", fontsize=10, labelpad=8) - ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) - ax.set_zlabel(f"{disp_key} (kN, scaled)", fontsize=10, labelpad=8) + ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) + ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) + ax.set_zlabel(f"{disp_key} (kNm, scaled)", fontsize=10, labelpad=8) ax.set_title(f"Bending Moment Diagram — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False @@ -554,7 +553,7 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): # girder label ax.text(xs[0], z_base, 0, f" {girder_name}", - color="black", fontsize=11, fontweight="bold", + color="black", fontsize=11, fontweight="normal", ha="left", va="bottom", zorder=6, bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) @@ -592,9 +591,9 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): cbar = fig.colorbar(sm, ax=ax, shrink=0.5, pad=0.1, aspect=20) cbar.set_label(f"{disp_key}", fontsize=10) - ax.set_xlabel("Span Length", fontsize=10, labelpad=8) - ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) - ax.set_zlabel(f"{disp_key} (kN, scaled)", fontsize=10, labelpad=8) + ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) + ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) + ax.set_zlabel(f"{disp_key} (kNm, scaled)", fontsize=10, labelpad=8) ax.set_title(f"BMD Contour — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 146512325..810e9216f 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -265,11 +265,11 @@ def output_values(self, flag=None): # ─── Percentage Bars ───────────────────────────────────────────────────────── - (KEY_STEELDESIGN_MEMBER_ID, "Member ID", + (KEY_STEELDESIGN_MEMBER_ID, "Member", TYPE_COMBOBOX, ["All"], True, "No Validator", {"group_title": "Steel Design"}), - (KEY_STEELDESIGN_LOAD_COMBINATION, "Load Case", + (KEY_STEELDESIGN_LOAD_COMBINATION, "Load Combination", TYPE_COMBOBOX, ["Envelope"], True, "No Validator", {}), (KEY_UTIL_FLEXURE, "Strength Limit State (Flexure)", diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index 14a459fb7..94428cdf8 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -89,10 +89,10 @@ DISP_TITLE_PROJECT = "Project Location" KEY_DISP_PROJECT_LOCATION = "City in India*" DISP_TITLE_GEOMETRIC = "Geometric Details" -KEY_DISP_SPAN = "Span" -KEY_DISP_CARRIAGEWAY_WIDTH = "Carriageway Width\n(Each way)" +KEY_DISP_SPAN = "Span (m)" +KEY_DISP_CARRIAGEWAY_WIDTH = "Carriageway Width\n(Each way) (m)" KEY_DISP_FOOTPATH = "Footpath" -KEY_DISP_SKEW_ANGLE = "Skew Angle" +KEY_DISP_SKEW_ANGLE = "Skew Angle (deg)" DISP_TITLE_MATERIAL = "Material Inputs" KEY_DISP_GIRDER = "Girder" KEY_DISP_CROSS_BRACING = "Cross Bracing" diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 841a28fb8..0830b857d 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -993,6 +993,10 @@ def create_menu_bar_items(self): save_cad_action.setShortcut(QKeySequence("Alt+I")) file_menu.addAction(save_cad_action) + export_ifc_action = QAction("Export IFC", self) + export_ifc_action.setShortcut(QKeySequence("Ctrl+E")) + file_menu.addAction(export_ifc_action) + file_menu.addSeparator() quit_action = QAction("Quit", self) From 2c538f6ae6f7b676b37ba5cb89b6cfe868f276e3 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Apr 2026 15:40:58 +0530 Subject: [PATCH 146/225] minor changes in output dock --- src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 810e9216f..4393873fd 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -239,7 +239,7 @@ def output_values(self, flag=None): (KEY_ANALYSIS_MEMBER, "Member", TYPE_COMBOBOX, ["All"], True, "No Validator", {}), - (KEY_ANALYSIS_LOAD_COMBINATION, "Load Combination", + (KEY_ANALYSIS_LOAD_COMBINATION, "Load Case /\nCombination", TYPE_COMBOBOX, ["Envelope"], True, "No Validator", {}), (KEY_ANALYSIS_FORCES, None, # None = no label @@ -269,7 +269,7 @@ def output_values(self, flag=None): TYPE_COMBOBOX, ["All"], True, "No Validator", {"group_title": "Steel Design"}), - (KEY_STEELDESIGN_LOAD_COMBINATION, "Load Combination", + (KEY_STEELDESIGN_LOAD_COMBINATION, "Load Case /\nCombination", TYPE_COMBOBOX, ["Envelope"], True, "No Validator", {}), (KEY_UTIL_FLEXURE, "Strength Limit State (Flexure)", @@ -296,7 +296,7 @@ def output_values(self, flag=None): (KEY_UTIL_DEFLECTION_CRACK, "Deflection and Crack Control", TYPE_PERCENT_BAR, 0.0, True, "No Validator", {}), - (KEY_BTN_STEEL_DESIGN, "Analysis & Design Results Summary", + (KEY_BTN_STEEL_DESIGN, "Analysis and Design Results Summary", TYPE_ONLY_BUTTON, None, True, "No Validator", { "action": "open_steel_design" From dd5dce01181e8cd6acf4941b7ebcde077135ecb3 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Thu, 16 Apr 2026 02:04:59 +0530 Subject: [PATCH 147/225] feat: radiobutton grid in output dock --- .../bridge_types/plate_girder/ui_fields.py | 9 +- src/osdagbridge/core/utils/common.py | 1 + .../desktop/ui/docks/output_dock.py | 51 +++++- .../desktop/ui/utils/custom_widgets.py | 172 ++++++++++++++++-- 4 files changed, 214 insertions(+), 19 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 4393873fd..0f1b6261e 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -243,17 +243,22 @@ def output_values(self, flag=None): TYPE_COMBOBOX, ["Envelope"], True, "No Validator", {}), (KEY_ANALYSIS_FORCES, None, # None = no label - TYPE_CHECKBOX_GRID, + TYPE_RADIO_GRID, [["Fx","Vy","Vz"], ["Tx","My","Mz"], ["Dx","Dy","Dz"]], - True, "No Validator", {"exclusive": True}), + True, "No Validator", {}), (KEY_ANALYSIS_DISPLAY_OPTIONS, None, # label goes on the groupbox title instead TYPE_CHECKBOX_ROW, ["Max", "Min"], True, "No Validator", {"exclusive": False, "group_title": "Display Options"}), + (KEY_ANALYSIS_DISPLAY_OPTIONS, None, # label goes on the groupbox title instead + TYPE_CHECKBOX_ROW, ["All ", "Summary"], + True, "No Validator", + {"exclusive": False}), + (KEY_ANALYSIS_UTILIZATION, "Controlling Utilization Ratio", TYPE_CHECKBOX, None, True, "No Validator", {"group_end": True}), # closes the Display Options box diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index 94428cdf8..a88d51454 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -28,6 +28,7 @@ TYPE_CHECKBOX_GRID = "checkbox_grid" TYPE_PERCENT_BAR = "percent_bar" TYPE_ONLY_BUTTON = "only_button" +TYPE_RADIO_GRID = "radio_button_grid" # Keys for inputs (consistent dot notation for object names) KEY_MODULE = "Module" diff --git a/src/osdagbridge/desktop/ui/docks/output_dock.py b/src/osdagbridge/desktop/ui/docks/output_dock.py index 0b5e1fb26..cab19e10c 100644 --- a/src/osdagbridge/desktop/ui/docks/output_dock.py +++ b/src/osdagbridge/desktop/ui/docks/output_dock.py @@ -29,12 +29,12 @@ from PySide6.QtGui import QIcon from osdagbridge.core.utils.common import ( - TYPE_TITLE, TYPE_BUTTON, TYPE_COMBOBOX, TYPE_PERCENT_BAR, + TYPE_TITLE, TYPE_BUTTON, TYPE_COMBOBOX, TYPE_PERCENT_BAR, TYPE_RADIO_GRID, TYPE_CHECKBOX, TYPE_CHECKBOX_ROW, TYPE_CHECKBOX_GRID, TYPE_ONLY_BUTTON ) from osdagbridge.desktop.ui.utils.custom_buttons import DockCustomButton from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style -from osdagbridge.desktop.ui.utils.custom_widgets import RichCheckBox, PercentBarWidget +from osdagbridge.desktop.ui.utils.custom_widgets import RichCheckBox, PercentBarWidget, CustomRadioButton # ── Styles ──────────────────────────────────────────────────────────────────── @@ -264,6 +264,9 @@ def close_group(): elif ftype == TYPE_CHECKBOX_GRID: target.addLayout(self._make_checkbox_grid(key, label, values, meta)) + elif ftype == TYPE_RADIO_GRID: + target.addLayout(self._make_radio_grid(key, label, values, meta)) + elif ftype == TYPE_CHECKBOX_ROW: target.addLayout(self._make_checkbox_row(key, label, values, meta)) @@ -421,7 +424,6 @@ def _make_checkbox_grid(self, key: str, label: str, values, meta: dict) -> QVBox N-column grid of checkboxes, aligned in rows using QGridLayout. values = [["Fx","Mx","Dx"], ["Fy","My","Dy"], ...] label = None means no label row is added. - exclusive : bool — if True only one checkbox can be checked at a time. """ from PySide6.QtWidgets import QGridLayout @@ -463,6 +465,49 @@ def _make_checkbox_grid(self, key: str, label: str, values, meta: dict) -> QVBox return outer + def _make_radio_grid(self, key: str, label: str, values, meta: dict): + """ + N-column grid of CustomRadioButtons, aligned in rows using QGridLayout. + + values = [["Fx","Mx","Dx"], ["Fy","My","Dy"], ...] (column-first list) + label = section label string, or None to skip the label row. + exclusive : bool (in meta) — when True, selecting one button unchecks all + others in the grid (standard radio behaviour). Defaults True. + """ + from PySide6.QtWidgets import QVBoxLayout, QGridLayout, QLabel + + outer = QVBoxLayout() + outer.setContentsMargins(0, 0, 0, 0) + outer.setSpacing(4) + + if label: + lbl = QLabel(label) + lbl.setStyleSheet(LABEL_STYLE) + outer.addWidget(lbl) + + columns = values if isinstance(values, list) else [] + all_rbs: list[CustomRadioButton] = [] + num_cols = len(columns) + + grid = QGridLayout() + grid.setContentsMargins(0, 0, 0, 0) + grid.setHorizontalSpacing(8) + grid.setVerticalSpacing(4) + + for c in range(num_cols): + grid.setColumnStretch(c, 1) + + num_rows = max((len(col) for col in columns), default=0) + for row in range(num_rows): + for col, col_items in enumerate(columns): + if row < len(col_items): + rb = CustomRadioButton(str(col_items[row])) + all_rbs.append(rb) + grid.addWidget(rb, row, col, alignment=Qt.AlignCenter) + + outer.addLayout(grid) + return outer + def _make_checkbox_row(self, key: str, label: str, values, meta: dict) -> QHBoxLayout: """ Horizontal row of checkboxes. diff --git a/src/osdagbridge/desktop/ui/utils/custom_widgets.py b/src/osdagbridge/desktop/ui/utils/custom_widgets.py index 6b4fce588..83d919da3 100644 --- a/src/osdagbridge/desktop/ui/utils/custom_widgets.py +++ b/src/osdagbridge/desktop/ui/utils/custom_widgets.py @@ -7,9 +7,12 @@ - Better UX feedback for selectable vs non-selectable items """ -from PySide6.QtWidgets import QListView, QStyledItemDelegate, QWidget, QVBoxLayout, QSizePolicy -from PySide6.QtCore import Qt, QRectF -from PySide6.QtGui import QColor, QPainterPath +from PySide6.QtWidgets import ( + QListView, QStyledItemDelegate, QWidget, QVBoxLayout, + QSizePolicy, QRadioButton +) +from PySide6.QtCore import Qt, QRectF, QRect +from PySide6.QtGui import QColor, QPainterPath, QPen, QFontMetrics # ================================================================================= # ITEM DELEGATE FOR DISABLED ITEMS @@ -187,7 +190,7 @@ def paintEvent(self, event): value >= 100 → red fill, full width, "XX%" text to the right """ -# ── Colours ─────────────────────────────────────────────────────────────────── +# -- Colours ------------------------------------------------------------------- COLOR_GREEN = QColor("#90AF13") # matches dock accent COLOR_RED = QColor("#CC2222") COLOR_TRACK = QColor("#D8D8D8") # unfilled portion @@ -198,7 +201,7 @@ def paintEvent(self, event): PCT_LABEL_STYLE = "QLabel { font-size:12px; font-weight:bold; color:#444; background:transparent; }" -# ── Inner bar widget ────────────────────────────────────────────────────────── +# -- Inner bar widget ---------------------------------------------------------- class _BarPainter(QWidget): """Custom-painted progress track.""" @@ -227,13 +230,13 @@ def paintEvent(self, event): painter.setPen(Qt.NoPen) - # ── Full rounded track pill ─────────────────────────────────────────── + # -- Full rounded track pill ------------------------------------------- track_path = QPainterPath() track_path.addRoundedRect(QRectF(0, 0, w, h), radius, radius) painter.setBrush(COLOR_TRACK) painter.drawPath(track_path) - # ── Fill clipped to track shape ─────────────────────────────────────── + # -- Fill clipped to track shape --------------------------------------- if fill_w > 0: fill_color = COLOR_RED if exceeded else COLOR_GREEN fill_rect_path = QPainterPath() @@ -245,12 +248,13 @@ def paintEvent(self, event): painter.end() -# ── Public widget ───────────────────────────────────────────────────────────── +# -- Public widget ------------------------------------------------------------- +#----Percentage Bar Widget with label------------------------------------------- class PercentBarWidget(QWidget): """ [Label (wraps, constrained to bar width)] - [bar ────────────────────────────────── ] XX% + [bar ---------------------------------- ] XX% """ def __init__(self, label: str = "", value: float = 0.0, parent=None): @@ -261,7 +265,7 @@ def __init__(self, label: str = "", value: float = 0.0, parent=None): root.setContentsMargins(0, 5, 0, 0) root.setSpacing(4) - # ── Label — max-width kept in sync with bar via resizeEvent ─────────── + # -- Label — max-width kept in sync with bar via resizeEvent ----------- lbl = QLabel(label) lbl.setStyleSheet(LABEL_STYLE) lbl.setTextFormat(Qt.RichText) @@ -270,7 +274,7 @@ def __init__(self, label: str = "", value: float = 0.0, parent=None): self._lbl = lbl root.addWidget(lbl) - # ── Bar row ─────────────────────────────────────────────────────────── + # -- Bar row ----------------------------------------------------------- bar_row = QHBoxLayout() bar_row.setContentsMargins(0, 0, 0, 0) bar_row.setSpacing(8) @@ -293,7 +297,7 @@ def resizeEvent(self, event): if bar_w > 0: self._lbl.setMaximumWidth(bar_w) - # ── Public API ──────────────────────────────────────────────────────────── + # -- Public API ------------------------------------------------------------ def set_value(self, value: float): self._bar.set_value(value) @@ -302,7 +306,135 @@ def set_value(self, value: float): @staticmethod def _fmt(value: float) -> str: return f"{int(round(value))}%" - + +# -- Custom Green Radio Button ----------------------------------------------- +class CustomRadioButton(QRadioButton): + + INDICATOR_SIZE = 15 + DOT_SIZE = 9 + SPACING = 8 + PEN_WIDTH = 2 + V_PADDING = 6 + + def __init__(self, text="", parent=None): + super().__init__("", parent) # always pass empty string to Qt + self._rich_text = text # store our own text (may contain HTML) + self.setStyleSheet(""" + QRadioButton::indicator { + width: 0px; + height: 0px; + image: none; + border: none; + background: none; + } + """) + + # ── Public text API (mirrors QAbstractButton) ──────────────────────────── + + def setText(self, text: str): + self._rich_text = text + self.updateGeometry() + self.update() + + def text(self) -> str: + return self._rich_text + + # ── Rich-text document helper ──────────────────────────────────────────── + + def _is_rich(self) -> bool: + """True when the stored text contains HTML tags.""" + return "<" in self._rich_text and ">" in self._rich_text + + def _doc(self) -> QTextDocument: + doc = QTextDocument() + doc.setDefaultFont(self.font()) + doc.setHtml(self._rich_text) + return doc + + # ── Paint ──────────────────────────────────────────────────────────────── + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + + s = self.INDICATOR_SIZE + pw = self.PEN_WIDTH + offset = pw // 2 + 1 + cy = self.height() // 2 + + circle_rect = QRect(offset, cy - s // 2, s, s) + + # ── Circle ─────────────────────────────────────────────────────────── + if self.isChecked(): + painter.setBrush(QColor("#2e7d32")) + painter.setPen(QPen(QColor("#2e7d32"), pw)) + painter.drawEllipse(circle_rect) + + d = self.DOT_SIZE + dot_rect = QRect( + circle_rect.x() + (s - d) // 2, + circle_rect.y() + (s - d) // 2, + d, d + ) + painter.setBrush(QColor("#ffffff")) + painter.setPen(Qt.NoPen) + painter.drawEllipse(dot_rect) + + else: + painter.setBrush(QColor("#ffffff")) + border = QColor("#2e7d32") if self.underMouse() else QColor("#9e9e9e") + painter.setPen(QPen(border, pw)) + painter.drawEllipse(circle_rect) + + # ── Text ───────────────────────────────────────────────────────────── + text_x = offset + s + self.SPACING + + if self._is_rich(): + doc = self._doc() + doc.setTextWidth(self.width() - text_x) + text_h = int(doc.size().height()) + text_y = (self.height() - text_h) // 2 + + painter.save() + painter.translate(QPoint(text_x, text_y)) + if not self.isEnabled(): + painter.setOpacity(0.4) + doc.drawContents(painter) + painter.restore() + + else: + text_rect = QRect(text_x, 0, self.width() - text_x, self.height()) + painter.setPen(QColor("#1a1a1a") if self.isEnabled() else QColor("#9e9e9e")) + painter.setFont(self.font()) + painter.drawText(text_rect, Qt.AlignVCenter | Qt.AlignLeft, self._rich_text) + + painter.end() + + # ── Size ───────────────────────────────────────────────────────────────── + + def sizeHint(self) -> QSize: + s = self.INDICATOR_SIZE + pw = self.PEN_WIDTH + offset = pw // 2 + 1 + + if self._is_rich(): + doc = self._doc() + doc.setTextWidth(-1) + text_size = doc.size() + text_w = int(text_size.width()) + text_h = int(text_size.height()) + else: + fm = QFontMetrics(self.font()) + text_w = fm.horizontalAdvance(self._rich_text) + text_h = fm.height() + + total_width = offset + s + self.SPACING + text_w + offset + total_height = max(s + pw * 2, text_h) + self.V_PADDING + return QSize(total_width, total_height) + + def minimumSizeHint(self) -> QSize: + return self.sizeHint() + #---------Standalone-Testing------------------------------------ import sys @@ -329,9 +461,21 @@ def _fmt(value: float) -> str: )), layout.addWidget(PercentBarWidget("Strength Limit State (Flexure)", 99.9)) layout.addWidget(PercentBarWidget("Strength Limit State (Flexure)", 99.4)) + + rb1 = CustomRadioButton("Option A", parent=win) + rb1.setChecked(True) + rb1.adjustSize() + rb1.move(20, 25) + layout.addWidget(rb1) + + rb2 = CustomRadioButton("Option A very long label here", parent=win) + rb2.adjustSize() + rb2.move(20, 65) + layout.addWidget(rb2) + layout.addStretch() win.show() sys.exit(app.exec()) -#------------- \ No newline at end of file +#-------------------------------------------------------------------- \ No newline at end of file From 026c08cb05a4546818c6e4fc38850aafc7030f78 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Thu, 16 Apr 2026 03:03:02 +0530 Subject: [PATCH 148/225] updated output plots view icon --- .../desktop/resources/resources_rc.py | 449 +++++++++++------- .../vectors/view_btn/plots_active.svg | 22 +- .../vectors/view_btn/plots_inactive.svg | 22 +- 3 files changed, 326 insertions(+), 167 deletions(-) diff --git a/src/osdagbridge/desktop/resources/resources_rc.py b/src/osdagbridge/desktop/resources/resources_rc.py index de7958227..0d9b50f92 100644 --- a/src/osdagbridge/desktop/resources/resources_rc.py +++ b/src/osdagbridge/desktop/resources/resources_rc.py @@ -1,91 +1,92 @@ # Resource object code (Python 3) # Created by: object code -# Created by: The Resource Compiler for Qt version 6.9.2 +# Created by: The Resource Compiler for Qt version 6.11.0 # WARNING! All changes made in this file will be lost! from PySide6 import QtCore qt_resource_data = b"\ -\x00\x00\x04\xd7\ -(\ -\xb5/\xfd`\xe8\x14m&\x00fl\x88'\xe0\xb2\xe8\ -\x01(=aa\x0f#s\xf3V\xc3\x15\x1d]%\x89\ -\xd8i\xef^\x0c\xde\x8dr\x9b\x08L\xec\xc7\xdc\x89\x18\ -C\x00\x84_\x86\x00{\x00x\x00\x08\x0f\x97\xe8\xa1J\ -k\xba[\x15#\x18\x951\xbe\xfa\xa9\x11;*1\xfb\ -4\x89\xd2y\x11\x83\x84\xa3\x9c~\xf9S)\x1d\xad7\ -T:\x12v\xd6\xa7C(\xd2\xcd-\xd6\x01\xdf\xc5\x22\ -\xec\xf1He\x06\x95/\xa2\x82\x00\xca\x8e\x84]9\xfc\ -\xf7u5\xc0\xd5e\x9a\xa84|@\x01\x08\x00\x08\x98\ -\x14\xb0\x86\xb5\xc1l\x1e6\x18\x8a\x82\xc3\x1a\x13g\xa8\ -\x8d\x8d\xc4Ec1\xc1\x10[\x14\x05\xc1\xa1*\x0d\x8b\ -\xc3\x9b\x0b\x0dk.\x19\xce\x043\x03\x048p\xc1$\ -\x09\x15\xfb.\x0e\x8d\xa3\xb1W9\xfa\xdf\xacZ\xbf\xc4\ -\xbei\xa3\x1dA\x80}\xdc\x83\xc9\x85\xfd1q\x03\xd3\ -n\xec\x1a{\x9a\x14\xe1\xd80\xa1?5\x9a\xa42B\xe2\ -\x98W\x92\xd9\xd7\xabx\xea\xf9\xd2\xd2\xfc\xef\x86\x91|\ -cQf@v\xff\xe9\xaf$pC\x9c~y\xe6\xd5\ -/3\x0f\xf5\xffm\xca\xeeF1\xfb\xa3+\xee\xfb&\ -\x89\x09\xcb\xba\x98\xb8\xbaXP\x12\x94\x84@i\xea\xb4\ -r\x99\xa9\xc7cu\x9bY\xf0\xb8\xb5\x0f\xd2\xfc\xdf\xaf\ -\x88]\xf5\xb7\xdf\xe9\x09E\xf6\xd5\xbe\xd1\x83\x85\xa2T\ -x\x81\xba\xb7m}\xd8\xb3\xaf{\xda\xf6\xd5K\x9f}\ -v\x11%L\xbb=\xdf\x17\xbf\xb6\xefN\xeav;J\ -\x88k\xbb\x06TN\x88\xa9\xdb\xee\xb0/\x13)D\x12\ -D\xa5\xa6uDt\xb1\x7f\xb9\xb3g\xeb\x1d\x06i\x8b\ -q\xc5\x0d\xd1|P\xbe\xed\x0fg\xdf4\xa7[\xc8i\ -\xa7\xae\xb1\x81\x80\xa7%\xd8\xb6\xb4\x9bc\x04\xd8\x81L\ -\xa9\xbd\xce\xc2\xcbH\xfd\xa7\xad\x11\x09\x81#\xc7\xec\x80\ -\x9e\x81nSYM\x17\x02\x83\x14A(\xc1\x8aB_\ -\x9f\x18\xeb\x7f\xdb\xe2\xf3,\x8f\xd2\xb1D\x01\x81!\xa8\ -\xd1\xa9\x224$\x22\x92\x14$Isa\x88B\x14\x92\ -\x18\xb2\xbc\x01\xa2`8ES\x1cC!\x0c\x85\x18\x81\ -!\x84`B\x142H \x12\xa8$\x125\xad\x01\x9e\ -\xa4b\x99dd\xe4\xf0\x0f\xe2\xdf\xd1\x0db\xd5\xc8\x8d\ -\xa6\xfb\xc4$4\xb5\x82I\xbe\x11(\xa4\x90\xd9\xcaN\ -\xd6)\x06\x14\x13\xcb\x7f\x90\xa8\x84P\xc0d,\xb5\x0b\ ->n\xf9\xd8\x14\xc54\xd9\xfb\xfa\xbbdY\xa4q\xe4\ -\xe0\x88\x16!\x196$q\xf8\xde\xb2\x00#L\xb6'\ -\x22u\x16\xd1\x86\xb79\xcf\x98\xc8\x1e\xd5n\xb9\xa4\x06\ -\xe5e\xc0t\xb1-\x04\xdd\x8e\xf8\xf6d\xde\xd6\x0a\x95\ -\xc6\x9f\xdbR~z\x9c\xa6\xf5\x9a\x17\xb4\x07\xe4@\x0a\ -z\xd4\x9b\xe3\x82I\x8f~\xe1\xca\x9bp\x0a\x81:S\ -w\xec6\x99o\xcc\x1a\xd2\xb9\xd1\xf3\x0f~\x80\x1a\x83\ -{\xb23}\xce\xda\x1c\xde\x11r1\x96\xc3\xfb\x9d\xf6\ -2\xdf\xac=^+\x07\x7f\x9d$\xb1\x09^!'\xb5\ -t\x0a\xe7\x8c\xfdQ\xd5\x8e\xb6\xc4\xe7\xa9\xad\x5c\x0c\xcd\ -a[\xcf+s\x06\x09z\xaa\xca\xe9\x98\x5c\x09\x14\xf3\ -\xd5\x14*\xb9e\x0d1W\xda\xb1\xb4d\xf3\xc47\xc1\ -\x0a\xecc\x1a\x5c\xa4{4\xb0AH\xf0\xf6\xe3\xd9!\ -\xaa%\xd8\xcdt\xd1\x83\xb0\x07\xe6\x03k\xdetg\xc1\ -\xd0\x16\xa5\x00\x02d^\xdf\xf0\x90\x04eR\xda\x07\xf7\ -\x9f\xb4\x90\xd3\x99\xb49\xa4\xf1mp\x83\xb2!\xe0_\ -\xf4\x04\x88\xd0e\xd4\x86i\x81@:y\xcc\xa6\xc0\x9d\ -C\xd1c\x9c\xcfJ\x86\xb3+\x83\x00\xc6UI2\xc8\ -M+\xd2\x00\xd48\xd4\x80\x12L\xf8\xad\xffb\x8a\xea\ -\x98d\xff\xfag\xbe\xbd9h\x88\xcbB\xc1I\xbe\x1a\ -\xbeb\x94\x090\xc5gj\xacB\xe6;/\xe1)u\ -\xbf]\x0a(\x8d\x06\x8e\xda\xceNZ-\x09\xc6\x1e\xa5\ -\xecx9\xabi\xf60\x0d\xe3\xcb\xc8\x8e=B\xa47\ -\xf7\xec\xf9\x84\x0dI\xc3\xe2*;\xe7Vvp\x0c\x02\ -\xa9\xdce\xdcH\xf6G\xb7d\xa6q\x80>\x1c\x04\x22\ -{\xc0S\xc6h\xdd\x169L\xf2>\xdf\xfd\xb6\x08\xc5\ -\xfe\xf4\xd5\xee\x16GuGk*\x9c\xdcV2\x11\x85\ -!\xbeqZ5p\xf2\xb6^\x953\x95}o\x97\x9e\ -o\x9c\xe9G`\xf0\x1c\x94<\xde\x09\xfb\x90\xebuL\ -\x04&G\x19n\xaf\x5c\xa45J\x89\xd2\xe6\x12a\xaf\ -\x1a\xfc\x95\xf1\x939\xe18\xc9\xb32)\x01$\xdd-\ -\x15$\x96\xff\x84\xd8\xa57\x17\x08\xda\x05\x9d\x83\xe8\xfd\ -\x0f\xc9\xdfkb\xbc+8\x1b\xf6\x0b7\xa0\xf3I0\ -\xf7\x05\x9a=\xbc\x91\xb7z\xd2\x8eE\xbd\x10&\x87\x83\ -\x02;7g\xc1\xd3bd\xb3\x08\x94\xba\xf2\x99\xf0\x00\ -Q\xd4\xfcH\x02t)\x0c\x9f\x1e?\xd1\xa8\xd5\xc3\x97\ -\xee\xd2r\x07\xe4\x01\ +\x00\x00\x04\xe6\ +\x00\ +\x00\x15\xe8x\xda\xd5X]O\xdb<\x14\xbeG\xe2?\ +X\xea\xc5>\xb4\xae)\x85\x8e\x05\xbd\x17\xfd\x82!\x15\ +\x18\xb4\xdb\xc4n\x90\x93\xb8\xad\x85\x1bg\x8eC\xe1\x9d\ +\xf8\xef\xef\xb1\x9b\xa4I\x9a\xb8\x81\xbd7\x8b5\xd4\xd9\ +\xce9\x8f\x1f?>\xe78\xad\xf7\xe8\x9f\x17=\xfb{\ +\x08\xa1\xab\xc9\xb0w\x86\xce\xbe\x9d\xa3\xc9\xf4v<\x9a\ +|\x19\x8d\xa6\xa8\x89\xaen\xcez\x97\xe7?GC\xd4\ +\xbfE\x93\xaf\xa3\xc1\xf9\xe9\xf9\xe0|z\xab\xdfy\x99\ +\x1b\xf4\xbe\xb5\xbf\xb7\xbf\xd7z\x15\xbc\xf6Gt6\xbe\ +\xea\xf7\xc61<\xf4vLp(\xd1$ .\x9dQ\ +\xf7\xddk\x01]_`\xea\xff\xa0\xbe\xc7W\xe8\xb76\ +\x82\x1c\xec\xde\xcf\x05\x8f|\xaf\xe9r\xc6\x85\x8d\x1a\xb3\ +C\xd5N\xe2q.<\x02\xbd\xed\xe0\x11\x85\x9cQ\x0f\ +5>[x\xd6\xee\xc4\xe3K,\xe6\xd4\xb7\x91\x15<\ +\xc6=\x01\xf6<\xea\xcf\x93\xaeg\xc5\xc3\xf5\x94s6\ +\xa5\x81\xc1\xeb\xa9~b\x1bI\xa7\xa5\x1f\x13\x94\xdei\ +\x0a%u|\x00\x13\x0eR<3\xee\xcbfH\xff%\ +\xf0\xe6\xa6wm\xac)\xb0G\xa30\x0b\xffW x\ +@\x84|jbF\xe7\xfe\x92\xf8\xd2F=\xf5\xf3\xfb\ +\x00~\x13\xb1^\xd3\xf5$`T\xc2\x7fm{\x81}\ +\x8f\x11\xc3\xd2\x86\x96j\x09\x17\xa0\x893\xc6\x1d\xcc\xd0\ +`A\xdc{\x87?\xa2\x89|\x02\x03z\x87t_\x1f\ +\xfa~\x9b\xd0'\x96;\x9dd\xf1a\x80]\xbd\xf8n\ +\xc2zj\xca\xb6a\xc7\xa9\x8b%\x17\x89\xd5\x15\xf5\xe4\ +\x02,vS\x8b\x0bB\xe7\x0b\x99\xeb*\xe1\xbb\xa3\x9f\ +r\x0a;\x9b\x17K4\xa5\x9fj`\xf6\x82?\x90\x14\ +^\x89\xe7#\xfd\x18\x0c\xb8\xaa\x8fx&]'\x18\xea\ +,\x8e.\xf1\x1c8\x8f\x04{k\xb7\x1e\x88\x0b.\xc2\ +V\xec\xe3c\xf80\x7f\x97J\xfb\x82\xf8Q\x1f\x8b\x86\ +$\xcb\x80aI\xee\x02x\xf3\x0et\x13\xdd9X\x98\ +\x14\x7f\xa8\x9aI\xf1\xdbGi\x877 \x04\x06\x12\x9f\ +\xe9\xebG\xb0\xc8\xb6U\xb2?6\x92\x02\xfb\xa0\x1d\x01\ +\xd26\x9d\x8c\xba\xae\xed\x900 \xabl\x1f\xb2g\xbc\ +\xb6\xb9@\x900\xac\xb06:V\xad\x965\xa4\xc7\xeb\ +F\x9f\x12m\xa4G\xb8\x84\xa1CC\xe8\xab\x85\xabz\ +\xd7L\xe2\xc8F\x86\xf6+\xfc\x19\xb6*\xa5e\xd4=\ +\xb5\x0a\xb4\x14\xce{}\x9f!\x01\x99e\x83P\x1ar\ +J\x85\xd9\x00\xcf\xd0ri\xa6\xc9\xc8L\xda\x99\xd8\x1e\ +w\x8b\xb5\xa1\xad~\xc9\x83lh\x8f{\x1d.%_\ +\xbe|\x93\xb4\x97&\x16b\x93=\xe38z\xbc\x15F\ +\x8f7\xb9\x0f\xe2\xfd\x10R\x0a\xe4\x5c\x1f)\x93(\xdc\ +D\xfbrU\xaecU\xcd\xac\x97\x95\xc1\xa19\x09\x1b\ +\xb4v\xac\x22D\xd7\x90_\x12\x18>\xf7I!\xf5\xb7\ +K]\x98#An\x09\x99\x00].\xb5\x83\x1c\x9b\xaf\ +\xa8\xa8:PQ\x8d.G7PR\xf5\xbfM\xa7W\ +\x97ie\xd5\xc7!Ac\xf2@\xd8\xeb\xab\xaa\xafQ\ +\xb8\xe8G *\xbf\xfa(\xad\x16@J~\xbd\x0e\x83\ +Y\xd9]\x5c\xc5\xe2q8\xf3NP)\x13G\x86\xec\ +\x9c\xb5\x97\x0f\xfd\x1b]H\xf2(\xd7\x85\x8d\x8d\xdcL\ +9\x93[E!\x19o\x87\x85\xdc\xee\xed\x12h\x81\x80\ +-g\x85\x10_B\x8e\x99\xcdj\x22\xd6\xae~Po\ +Ndc\x10\x85p\xea\xa7T2\xd2Wi\x19\xed\xae\ +\x7fUh\x18c\x87\xb0\x86~M\xff,\xc04\xe6k\ +s\xae\xddX\x1f\xf39\xcf\x197'\xe8\xd2zf;\ +\x0cl\x0a\xef5\xd1\x8d\x0b\xea\xd3%\xcc\xd8%\xd5j\ +\x8f\xa5\xe5\xb8\xb5\xbb\xa6\xce\x82\xeb\x9a\xa7\xef@\xbdS\ +\x9a\xb3\xb6j5\x0cUV\x16\xa9)\xdcU\xad\xd4\x14\ +~\xbc! '\xf1\xb7qY\xc0\xfd'l\x16M\xfd\ +\x09\x9f\x03\xc6\xc3\xbf\x8c\xca\x0c\xe4\x9d,\x92O\x87n\ +\xc7\xad:\xbdF\xd3\xbbYu\xad\xce\xe7\x03'\x8e'\ +q\xac\xeb\xeb\x0agL}R'\x88?\xab\xacZ\x91\ +\xe0 4\x85\xcd!w\xef\x0dIP\xe7\xc0\xd83\x83\ +\xf9w\x1e\xccG\xd7\x15\x11mSr\x1f\xa8V\xeb\xfa\ +\xd3\xc9oY.OV]\x93\x9fKAM!\xff\x8d\ +<*M\xb8\x8eU\xaby\x15\xd0~gxI\xd9\x93\ +\x8d\xde\x0cx$(H\xe1\x92\xac\xde|@K\xees\ +u-'\xc6\x0f\x11u\xca\xfd\xf2\xb5L\x5c\xc1\x19\x83\ +df\x83\xfc$\x5c\x83Y\xf95\xc9R\xed\x04A\xe5\ +4V\xbc\xa1\xb9 O\x00F \xb9 (\xd4FT\ +\x95\x0b\xe7\x0b\xac\xaa\xcd,\xadl3\x1fz\xd2\x7f\x9d\ +\xaaCc\xda\x82\x0d\xec\xf8\xcb\x89\x19~\xcfRM\xc3\ +\xbf `}Y\x85?\xfe\x0c\x93,`\x09\x95~R\ +\x8dw\xac\xff\x17h\xd5\x89\x07\xb8\x9f,\xd54\xdc!\ +\x16\xf70K\xc3\x85\xc0\xb6~'\xc1\x9dA\xbb\xd3;\ +(\xa4\xc9\xe00\xa7\xfe?\xe4\x86\xc3\xc8\xc9\x0f\x17/\ +Xj\xf5\x0a\xd0\x17\xea\x91P{\x8f\x82\x96\xbe\x8f\xe8\ +\xcbLX\x1f\x85\xba\x17\x19P\xe4\x86\xcb\xe8\xd1\xb7\x87\ +<\x14\x08\xe8\x189D\xae\x08\xf1\x13V\xe0o\x01\xda\ +\x7fd\xfa\x81\x81\ \x00\x00\x00\xb2\ <\ svg xmlns=\x22http:\ @@ -1939,25 +1940,84 @@ 5871V15H16.0456Z\ \x22 fill=\x22black\x22/>\ \x0d\x0a\x0d\x0a\ -\x00\x00\x01\x05\ +\x00\x00\x04\xbe\ <\ -svg xmlns=\x22http:\ -//www.w3.org/200\ -0/svg\x22 height=\x222\ -4px\x22 viewBox=\x220 \ --960 960 960\x22 wi\ -dth=\x2224px\x22 fill=\ -\x22#999999\x22>\ +svg width=\x2250\x22 h\ +eight=\x2250\x22 viewB\ +ox=\x220 0 50 50\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +g clip-path=\x22url\ +(#clip0_2153_34)\ +\x22>\x0a\x0a<\ +path d=\x22M4 20C10\ +.9571 32.074 29.\ +2971 48.9775 47 \ +20\x22 stroke=\x22#999\ +999\x22 stroke-widt\ +h=\x221.25\x22/>\x0a\x0a\x0a\ +\x0a<\ +path d=\x22M44.9 27\ +.6001L49.9 27.60\ +01\x22 stroke=\x22blac\ +k\x22/>\x0a\x0a\ +\x0a\x0a\ +\x0a\ +\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\ \x00\x00\x01T\ <\ svg xmlns=\x22http:\ @@ -2270,25 +2330,84 @@ 19 11-40 11t-40-\ 11L160-252Zm320-\ 228Z\x22/>\ -\x00\x00\x01\x05\ +\x00\x00\x04\xb8\ <\ -svg xmlns=\x22http:\ -//www.w3.org/200\ -0/svg\x22 height=\x222\ -4px\x22 viewBox=\x220 \ --960 960 960\x22 wi\ -dth=\x2224px\x22 fill=\ -\x22#000000\x22>\ +svg width=\x2250\x22 h\ +eight=\x2250\x22 viewB\ +ox=\x220 0 50 50\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +g clip-path=\x22url\ +(#clip0_2146_8)\x22\ +>\x0a\x0a\x0a\x0a\x0a\x0a\ +\x0a\x0a\x0a\x0a\x0a\x0a\x0a<\ +stop offset=\x220.9\ +51923\x22 stop-colo\ +r=\x22#991D1D\x22 stop\ +-opacity=\x220.6\x22/>\ +\x0a\x0a\x0a\ +\x0a\x0a\x0a\ +\x0a\ \x00\x00\x01\xa4\ <\ svg xmlns=\x22http:\ @@ -2659,74 +2778,74 @@ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x007\x17\ +\x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x007&\ \x00\x00\x01\x9b\x13E\x17;\ -\x00\x00\x00^\x00\x00\x00\x00\x00\x01\x00\x00\x04\xdb\ +\x00\x00\x00^\x00\x00\x00\x00\x00\x01\x00\x00\x04\xea\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x01\xee\x00\x00\x00\x00\x00\x01\x00\x009\xf9\ +\x00\x00\x01\xee\x00\x00\x00\x00\x00\x01\x00\x00:\x08\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x13\xd0\ +\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x13\xdf\ \x00\x00\x01\x9c\xcem|j\ -\x00\x00\x02t\x00\x00\x00\x00\x00\x01\x00\x00L\xad\ +\x00\x00\x02t\x00\x00\x00\x00\x00\x01\x00\x00L\xbc\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x02P\x00\x00\x00\x00\x00\x01\x00\x00F\x88\ +\x00\x00\x02P\x00\x00\x00\x00\x00\x01\x00\x00F\x97\ \x00\x00\x01\x9c\xcem|k\ -\x00\x00\x02\xc4\x00\x00\x00\x00\x00\x01\x00\x00T\xbf\ +\x00\x00\x02\xc4\x00\x00\x00\x00\x00\x01\x00\x00T\xce\ \x00\x00\x01\x9c\xcem|l\ -\x00\x00\x00z\x00\x00\x00\x00\x00\x01\x00\x00\x05\x91\ +\x00\x00\x00z\x00\x00\x00\x00\x00\x01\x00\x00\x05\xa0\ \x00\x00\x01\x9b\x13\xd0_\xa8\ -\x00\x00\x02\x9c\x00\x00\x00\x00\x00\x01\x00\x00R\x00\ +\x00\x00\x02\x9c\x00\x00\x00\x00\x00\x01\x00\x00R\x0f\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x02\xe8\x00\x00\x00\x00\x00\x01\x00\x00WX\ +\x00\x00\x02\xe8\x00\x00\x00\x00\x00\x01\x00\x00Wg\ \x00\x00\x01\x9b\x13E\x17;\ -\x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x00$\x08\ +\x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x00$\x17\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xfe\ +\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x0d\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x01*\x00\x00\x00\x00\x00\x01\x00\x00!\x0a\ +\x00\x00\x01*\x00\x00\x00\x00\x00\x01\x00\x00!\x19\ \x00\x00\x01\x9di#\xc4\x14\ -\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00<.\ +\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00<=\ \x00\x00\x01\x9b\x07\x002e\ -\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x18\xfc\ +\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x19\x0b\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x01|\x00\x00\x00\x00\x00\x01\x00\x00)[\ +\x00\x00\x01|\x00\x00\x00\x00\x00\x01\x00\x00)j\ \x00\x00\x01\x9b\x07\x002a\ \x00\x00\x00H\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x16\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x10\x00\x00\x00\x00\x00\x01\x00\x00\x1e3\ +\x00\x00\x01\x10\x00\x00\x00\x00\x00\x01\x00\x00\x1eB\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x001\x8a\ +\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x001\x99\ \x00\x00\x01\x9c\xcem|j\ -\x00\x00\x03l\x00\x00\x00\x00\x00\x01\x00\x00i\x00\ -\x00\x00\x01\x9di-($\ -\x00\x00\x02\xfe\x00\x00\x00\x00\x00\x01\x00\x00Y\x91\ -\x00\x00\x01\x9di-()\ -\x00\x00\x05j\x00\x00\x00\x00\x00\x01\x00\x00\x8dv\ -\x00\x00\x01\x9di-(1\ -\x00\x00\x03\x94\x00\x00\x00\x00\x00\x01\x00\x00j\xa2\ -\x00\x00\x01\x9di-()\ -\x00\x00\x04L\x00\x00\x00\x00\x00\x01\x00\x00w\xd3\ -\x00\x00\x01\x9di-(,\ -\x00\x00\x03\xc4\x00\x00\x00\x00\x00\x01\x00\x00l\xd3\ -\x00\x00\x01\x9di-(.\ -\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00ur\ -\x00\x00\x01\x9di-(.\ -\x00\x00\x04\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x89m\ -\x00\x00\x01\x9di-(.\ -\x00\x00\x05\x06\x00\x00\x00\x00\x00\x01\x00\x00\x8av\ -\x00\x00\x01\x9di-(,\ -\x00\x00\x05<\x00\x00\x00\x00\x00\x01\x00\x00\x8c\x1e\ -\x00\x00\x01\x9di-(+\ -\x00\x00\x04~\x00\x00\x00\x00\x00\x01\x00\x00z\x06\ -\x00\x00\x01\x9di-('\ -\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x87\xcb\ -\x00\x00\x01\x9di-($\ -\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x00v{\ -\x00\x00\x01\x9di-(+\ -\x00\x00\x032\x00\x00\x00\x00\x00\x01\x00\x00[7\ -\x00\x00\x01\x9di-('\ -\x00\x00\x00&\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x9di.\xb6\x9a\ +\x00\x00\x03l\x00\x00\x00\x00\x00\x01\x00\x00i\x0f\ +\x00\x00\x01\x9d\x91\x81\x92\xf7\ +\x00\x00\x02\xfe\x00\x00\x00\x00\x00\x01\x00\x00Y\xa0\ +\x00\x00\x01\x9d\x91\x81\x92\xfa\ +\x00\x00\x05j\x00\x00\x00\x00\x00\x01\x00\x00\x94\xf1\ +\x00\x00\x01\x9d\x91\x81\x92\xfc\ +\x00\x00\x03\x94\x00\x00\x00\x00\x00\x01\x00\x00j\xb1\ +\x00\x00\x01\x9d\x91\x81\x92\xfa\ +\x00\x00\x04L\x00\x00\x00\x00\x00\x01\x00\x00{\x9b\ +\x00\x00\x01\x9d\x93\x0b\xd2\x8c\ +\x00\x00\x03\xc4\x00\x00\x00\x00\x00\x01\x00\x00l\xe2\ +\x00\x00\x01\x9d\x91\x81\x92\xfc\ +\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00u\x81\ +\x00\x00\x01\x9d\x94\xe4\xda\x86\ +\x00\x00\x04\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x8d5\ +\x00\x00\x01\x9d\x94\xe5\x03\xa2\ +\x00\x00\x05\x06\x00\x00\x00\x00\x00\x01\x00\x00\x91\xf1\ +\x00\x00\x01\x9d\x91\x81\x92\xfb\ +\x00\x00\x05<\x00\x00\x00\x00\x00\x01\x00\x00\x93\x99\ +\x00\x00\x01\x9d\x91\x81\x92\xfa\ +\x00\x00\x04~\x00\x00\x00\x00\x00\x01\x00\x00}\xce\ +\x00\x00\x01\x9d\x91\x81\x92\xf9\ +\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x8b\x93\ +\x00\x00\x01\x9d\x91\x81\x92\xf9\ +\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x00zC\ +\x00\x00\x01\x9d\x91\x81\x92\xfb\ +\x00\x00\x032\x00\x00\x00\x00\x00\x01\x00\x00[F\ +\x00\x00\x01\x9d\x91\x81\x92\xfa\ +\x00\x00\x00&\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x9d\x91\x81\x94`\ " def qInitResources(): diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg index 5c8b76c17..703555a5f 100644 --- a/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg @@ -1 +1,21 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg index ce8b8299f..8e1177a0b 100644 --- a/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg @@ -1 +1,21 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + From a316c637b1ad743eeff1a1398e381c268503b1bf Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Thu, 16 Apr 2026 12:01:03 +0530 Subject: [PATCH 149/225] updated mpl plots, added zoom in/out and reset. added some temporary buttons in widget --- .../bridge_types/plate_girder/analyser.py | 2 +- .../plate_girder/plategirderbridge.py | 22 +- .../plate_girder/plot_generator.py | 235 +++++++++++++++++- src/osdagbridge/core/utils/common.py | 1 + src/osdagbridge/desktop/ui/mpl_plot_widget.py | 179 +++++++++++-- 5 files changed, 417 insertions(+), 22 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 645e2b4b8..ed139c1bb 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -924,7 +924,7 @@ def add_vehicle_load_cases_from_combinations(self, model=None): # Add to load case # ----------------------------- lc.add_load( - load_obj=vehicle, + load=vehicle, load_factor=lane_factor ) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 33a9d7f87..a00b25769 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -18,7 +18,10 @@ build_figure_sfd, build_figure_bmd, build_figure_bmd_contour, + build_figure_deflection, + build_figure_grillage, build_nodes_members, + figure_to_bytes, ) from osdagbridge.core.utils.common import ( @@ -37,6 +40,7 @@ DEFAULT_CRASH_BARRIER_WIDTH, DEFAULT_RAILING_WIDTH, DEFAULT_GIRDER_SPACING, + DEFAULT_CROSS_BRACING_SPACING, MPa, GPa, N, @@ -222,8 +226,8 @@ def _solve_bridge_layout(self, parsed: dict) -> None: def _build_dtos(self, parsed: dict) -> None: """Construct GrillageGeometry and DeckLayoutProperties DTOs from solved results.""" span = parsed["span"] - # n_t: transverse grid lines — approx one division every 2 × girder spacings - n_t = max(3, int(round(span / (DEFAULT_GIRDER_SPACING * 2)))) + # n_t: transverse grid lines — span divided by cross-bracing spacing, rounded to nearest odd integer with minimum of 3 (1 at each end + at least 1 internal for bracing) + n_t = max(3, (int(round(span / (DEFAULT_CROSS_BRACING_SPACING)*2) + 1))) deck_overhang = self.sizing_result.deck_overhang # When there is an overhang, the two edge beams add 2 extra longitudinal @@ -612,6 +616,20 @@ def build_figure_bmd_contour(self, ds, force_key: str): nodes, members = self.get_nodes_members() return build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=self.get_edge_dist()) + def build_figure_deflection(self, ds, disp_key: str): + """Build and return a matplotlib Figure for the deflection diagram of the given dataset slice.""" + nodes, members = self.get_nodes_members() + return build_figure_deflection(ds, disp_key, nodes, members, edge_dist=self.get_edge_dist()) + + def build_figure_grillage(self): + """Build and return a matplotlib Figure showing only the bridge grillage mesh.""" + nodes, members = self.get_nodes_members() + return build_figure_grillage(nodes, members) + + def figure_to_bytes(self, fig, fmt: str = "png", dpi: int = 150) -> bytes: + """Render a matplotlib Figure to raw bytes (PNG by default).""" + return figure_to_bytes(fig, fmt=fmt, dpi=dpi) + # ───────────────────────────────────────────────────────────────────────── # Helpers # ───────────────────────────────────────────────────────────────────────── diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index 47809ad98..e52ea4ec5 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -30,6 +30,17 @@ "Mx": "Mx", "My": "My", "Mz": "Mz", } +# Displacement component map key → component name in ds["displacements"] +DISP_MAP = { + "Dx": "dx", + "Dy": "dy", + "Dz": "dz", +} + +DISP_DISPLAY = { + "Dx": "Dx", "Dy": "Dy", "Dz": "Dz", +} + # View settings (elevation/azimuth for a near-front-elevation look) DEFAULT_ELEV = 10 DEFAULT_AZIM = -90 @@ -183,6 +194,61 @@ def _add_coordinate_triad(ax, nodes, scale=0.10): fontsize=9, fontweight="bold", zorder=5) +# ============================================================================= +# GRILLAGE PLOT +# ============================================================================= + +def build_figure_grillage(nodes, members): + """ + Build a 3-D matplotlib figure showing only the bridge grillage mesh. + + Parameters + ---------- + nodes : dict — {tag: [x, y, z]} + members : dict — {tag: [n1, n2]} + + Returns + ------- + fig : matplotlib.figure.Figure + """ + fig = plt.figure(figsize=(14, 6), dpi=110, facecolor="white") + ax = fig.add_subplot(111, projection="3d", facecolor="white") + + all_xs = [coord[0] for coord in nodes.values()] + all_zs = [coord[2] for coord in nodes.values()] + x_range = max(all_xs) - min(all_xs) or 1.0 + z_range = max(all_zs) - min(all_zs) or 1.0 + ax.set_xlim(min(all_xs), max(all_xs)) + ax.set_ylim(min(all_zs), max(all_zs)) + ax.set_zlim(-x_range * 0.05, x_range * 0.15) + ax.set_box_aspect([x_range, z_range, x_range * 0.30]) + + _add_grillage_background(ax, nodes, members) + _add_coordinate_triad(ax, nodes) + + # Draw node markers + xs = [coord[0] for coord in nodes.values()] + ys = [coord[2] for coord in nodes.values()] + ax.scatter(xs, ys, [0] * len(xs), + color="#388E3C", s=14, zorder=4, depthshade=False) + + ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) + ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) + ax.set_zlabel("", fontsize=10, labelpad=8) + ax.set_title("Bridge Grillage", fontsize=12, fontweight="bold", pad=12) + ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) + ax.xaxis.pane.fill = False + ax.yaxis.pane.fill = False + ax.zaxis.pane.fill = False + ax.xaxis.pane.set_edgecolor("lightgrey") + ax.yaxis.pane.set_edgecolor("lightgrey") + ax.zaxis.pane.set_edgecolor("lightgrey") + ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) + + plt.tight_layout() + return fig + + # ============================================================================= # SFD PLOT # ============================================================================= @@ -432,7 +498,7 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): ax.plot([xs[idx_max], xs[idx_max]], [z_base, z_base], [0, y_plot[idx_max]], color="#FF4136", linewidth=1.5, zorder=3) ax.text(xs[idx_max], z_base, y_plot[idx_max], - f" {Mz[idx_max]:.2f} kNm", color="#FF4136", fontsize=7, zorder=6) + f" {-Mz[idx_max]:.2f} kNm", color="#FF4136", fontsize=7, zorder=6) sc = ax.scatter(xs, z_arr, y_plot, color=moment_color, s=30, zorder=5, depthshade=False) @@ -449,7 +515,7 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index sel.annotation.set_text( - f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kNm" + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {-vals_g[idx]:.3f} kNm" ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) @@ -608,10 +674,173 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): return fig +# ============================================================================= +# DEFLECTION PLOT +# ============================================================================= + +def build_figure_deflection(ds, disp_key, nodes, members, edge_dist=0.0): + """ + Build a 3-D matplotlib figure showing the Deflection Diagram. + + Parameters + ---------- + ds : xarray.Dataset — analysis results for one load case + (must have 'displacements' DataArray keyed + by Node and Component) + disp_key : str — one of DISP_MAP keys: "Dx", "Dy", "Dz" + nodes : dict — {tag: [x, y, z]} + members : dict — {tag: [n1, n2]} + edge_dist : float — overhang distance; outermost girders are + shown as baselines only (no diagram). + + Returns + ------- + fig : matplotlib.figure.Figure + """ + comp_name = DISP_MAP[disp_key] + disp_label = DISP_DISPLAY.get(disp_key, disp_key) + girders = _find_girders(nodes, members) + + fig = plt.figure(figsize=(14, 6), dpi=110, facecolor="white") + ax = fig.add_subplot(111, projection="3d", facecolor="white") + + all_xs = [coord[0] for coord in nodes.values()] + all_zs = [coord[2] for coord in nodes.values()] + x_range = max(all_xs) - min(all_xs) or 1.0 + z_range = max(all_zs) - min(all_zs) or 1.0 + ax.set_xlim(min(all_xs), max(all_xs)) + ax.set_ylim(min(all_zs), max(all_zs)) + ax.set_box_aspect([x_range, z_range, x_range * 0.30]) + + _add_grillage_background(ax, nodes, members) + _add_coordinate_triad(ax, nodes) + + defl_color = "#6A1B9A" # deep purple + fill_color = "#CE93D8" # light purple + base_color = "#388E3C" + + # Resolve the actual component string in the dataset (case-insensitive) + actual_comp = None + try: + for c in ds["displacements"].coords["Component"].values: + if c.lower() == comp_name.lower(): + actual_comp = c + break + except Exception: + pass + + girder_items = list(girders.items()) + n_girders = len(girder_items) + _scatter_objs = [] + _scatter_data = {} + + for i, (z_val, elems) in enumerate(girder_items): + is_edge_beam = edge_dist > 0 and (i == 0 or i == n_girders - 1) + girder_name = f"G{i}" if edge_dist > 0 else f"G{i + 1}" + + # Node list in span order (mirrors _build_polyline ordering) + node_list = [members[e][0] for e in elems] + [members[elems[-1]][1]] + xs = np.array([nodes[n][0] for n in node_list]) + zs = np.array([nodes[n][2] for n in node_list]) + + # Fetch nodal displacement (m → mm); fall back to 0 on missing data + def _get(n, _comp=actual_comp): + if _comp is None: + return 0.0 + try: + return float( + ds["displacements"].sel(Node=n, Component=_comp).values + ) * 1000.0 + except Exception: + return 0.0 + + vals = np.array([_get(n) for n in node_list]) + z_base = float(np.mean(zs)) + z_arr = np.full_like(xs, z_base) + + # baseline + ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], + color="slategrey" if is_edge_beam else base_color, + linewidth=1.5, zorder=3) + + if is_edge_beam: + continue + + ax.scatter(xs, z_arr, np.zeros_like(xs), + color=base_color, s=18, zorder=4, depthshade=False) + + # girder label + ax.text(xs[0], z_base, 0, f" {girder_name}", + color="black", fontsize=11, fontweight="normal", + ha="left", va="bottom", zorder=6, + bbox=dict(boxstyle="round,pad=0.2", facecolor="white", + alpha=0.8, edgecolor="none")) + + val_range = max(vals) - min(vals) + if val_range == 0: + defl_scale = ( + 1.0 if np.max(np.abs(vals)) == 0 + else 0.1 * abs((max(xs) - min(xs)) / np.max(np.abs(vals))) + ) + else: + defl_scale = 0.1 * abs((max(xs) - min(xs)) / val_range) + + y_plot = vals * defl_scale + + ax.plot_surface( + np.vstack([xs, xs]), + np.vstack([z_arr, z_arr]), + np.vstack([np.zeros_like(y_plot), y_plot]), + color=fill_color, alpha=0.25, linewidth=0, antialiased=False, zorder=2 + ) + + ax.plot(xs, z_arr, y_plot, color=defl_color, linewidth=2.0, zorder=4) + + # annotate the node with maximum absolute deflection + idx_max = int(np.argmax(np.abs(vals))) + ax.plot([xs[idx_max], xs[idx_max]], [z_base, z_base], [0, y_plot[idx_max]], + color=defl_color, linewidth=1.5, zorder=3) + ax.text(xs[idx_max], z_base, y_plot[idx_max], + f" {vals[idx_max]:.3f} mm", color=defl_color, fontsize=7, zorder=6) + + sc = ax.scatter(xs, z_arr, y_plot, + color=defl_color, s=30, zorder=5, depthshade=False) + _scatter_objs.append(sc) + _scatter_data[id(sc)] = (node_list, xs, vals) + + if _MPLCURSORS and _scatter_objs: + cursor = mplcursors.cursor(_scatter_objs, hover=True) + + @cursor.connect("add") + def on_add(sel, _data=_scatter_data, _lbl=disp_label): + nids, xs_g, vals_g = _data[id(sel.artist)] + idx = sel.index + sel.annotation.set_text( + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_lbl}: {vals_g[idx]:.4f} mm" + ) + sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) + + ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) + ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) + ax.set_zlabel(f"{disp_label} (mm, scaled)", fontsize=10, labelpad=8) + ax.set_title(f"Deflection Diagram — {disp_label}", fontsize=12, fontweight="bold", pad=12) + ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) + ax.xaxis.pane.fill = False + ax.yaxis.pane.fill = False + ax.zaxis.pane.fill = False + ax.xaxis.pane.set_edgecolor("lightgrey") + ax.yaxis.pane.set_edgecolor("lightgrey") + ax.zaxis.pane.set_edgecolor("lightgrey") + ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) + + plt.tight_layout() + return fig + + def figure_to_bytes(fig, fmt="png", dpi=150): """Convenience helper — render a matplotlib figure to raw bytes.""" buf = io.BytesIO() - fig.savefig(buf, format=fmt, dpi=dpi, bbox_inches="tight", facecolor="white") + fig.savefig(buf, format=fmt, dpi=dpi, bbox_inches=None, facecolor="white") buf.seek(0) plt.close(fig) return buf.read() diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index a88d51454..bc947c0a0 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -313,6 +313,7 @@ DEFAULT_DECK_OVERHANG = 1.0 DEFAULT_CRASH_BARRIER_WIDTH = 0.5 DEFAULT_RAILING_WIDTH = 0.375 +DEFAULT_CROSS_BRACING_SPACING = 3.0 # IRC helper option constants KEY_VEHICLE = ["Class70R(W)", "Class70R(T)", "ClassA", "ClassB"] diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index e344b0ed2..6f49454cb 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -4,18 +4,25 @@ from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg import matplotlib.pyplot as plt -from PySide6.QtWidgets import QWidget, QVBoxLayout, QComboBox, QSizePolicy +from PySide6.QtWidgets import ( + QWidget, QVBoxLayout, QHBoxLayout, QComboBox, QSizePolicy, QPushButton +) +from PySide6.QtCore import Qt, QEvent from osdagbridge.core.bridge_types.plate_girder.plot_generator import ( build_figure_sfd, build_figure_bmd, + build_figure_deflection, + build_figure_grillage, FORCE_MAP, + DISP_MAP, ) # Forces starting with "F" -> shear (SFD); starting with "M" -> moment (BMD) -_SFD_KEYS = {k for k in FORCE_MAP if k.startswith("F")} +_SFD_KEYS = {k for k in FORCE_MAP if k.startswith("F")} +_DEFL_KEYS = set(DISP_MAP.keys()) # "Dx", "Dy", "Dz" -# Map from the HTML labels used in OutputDock's force checkbox grid -> FORCE_MAP keys +# Map from the HTML labels used in OutputDock's radio grid -> plot keys _RICH_LABEL_TO_FORCE = { "Fx": "Fx", "Vy": "Fy", @@ -23,6 +30,9 @@ "Tx": "Mx", "My": "My", "Mz": "Mz", + "Dx": "Dx", + "Dy": "Dy", + "Dz": "Dz", } _DEFAULT_FORCE_LABEL = "Vy" # pre-checked on first link @@ -50,16 +60,70 @@ def __init__(self, parent=None): # Set by link_output_dock() self._output_dock = None + # Grillage-only mode + self._grillage_mode = False + + # Zoom state + self._zoom_scale = 1.0 + self._orig_limits = None # {ax_index: {"x": (lo,hi), "y": ..., "z": ...}} + # matplotlib canvas self._fig = plt.figure(figsize=(14, 6), facecolor="white") self._canvas = FigureCanvasQTAgg(self._fig) self._canvas.setMinimumHeight(300) self._canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self._canvas.installEventFilter(self) + + # zoom toolbar + self._btn_zoom_in = QPushButton("+") + self._btn_zoom_out = QPushButton("−") + self._btn_zoom_reset = QPushButton("⟳") + for btn in (self._btn_zoom_in, self._btn_zoom_out, self._btn_zoom_reset): + btn.setFixedSize(28, 28) + btn.setFocusPolicy(Qt.NoFocus) + btn.setStyleSheet( + "QPushButton { font-size: 16px; border: 1px solid #bbb; border-radius: 4px;" + " background: #f5f5f5; }" + "QPushButton:hover { background: #e0e0e0; }" + "QPushButton:pressed { background: #bdbdbd; }" + ) + self._btn_zoom_in.setToolTip("Zoom In") + self._btn_zoom_out.setToolTip("Zoom Out") + self._btn_zoom_reset.setToolTip("Reset Zoom") + self._btn_zoom_in.clicked.connect(self._zoom_in) + self._btn_zoom_out.clicked.connect(self._zoom_out) + self._btn_zoom_reset.clicked.connect(self._zoom_reset) + + # grillage toggle button + self._btn_grillage = QPushButton("Grillage") + self._btn_grillage.setCheckable(True) + self._btn_grillage.setFixedHeight(28) + self._btn_grillage.setFocusPolicy(Qt.NoFocus) + self._btn_grillage.setToolTip("Show bridge grillage only") + self._btn_grillage.setStyleSheet( + "QPushButton { font-size: 12px; border: 1px solid #bbb; border-radius: 4px;" + " background: #f5f5f5; padding: 0 8px; }" + "QPushButton:hover { background: #e0e0e0; }" + "QPushButton:pressed { background: #bdbdbd; }" + "QPushButton:checked { background: #1565C0; color: white;" + " border: 1px solid #0D47A1; }" + ) + self._btn_grillage.toggled.connect(self._on_grillage_toggled) + + toolbar_row = QHBoxLayout() + toolbar_row.setContentsMargins(4, 2, 4, 2) + toolbar_row.setSpacing(4) + toolbar_row.addWidget(self._btn_grillage) + toolbar_row.addStretch() + toolbar_row.addWidget(self._btn_zoom_out) + toolbar_row.addWidget(self._btn_zoom_in) + toolbar_row.addWidget(self._btn_zoom_reset) # layout root = QVBoxLayout(self) root.setContentsMargins(0, 0, 0, 0) root.setSpacing(0) + root.addLayout(toolbar_row) root.addWidget(self._canvas, stretch=1) # public API @@ -101,20 +165,23 @@ def link_output_dock(self, output_dock): combo_lc.setMinimumContentsLength(12) combo_lc.currentTextChanged.connect(self.update_plot) - # pre-check default force + connect all force checkboxes - from osdagbridge.desktop.ui.utils.custom_widgets import RichCheckBox - force_cbs = [ - cb for cb in output_dock.output_widget.findChildren(RichCheckBox) - if cb.text() in _RICH_LABEL_TO_FORCE + # pre-check default force + connect all force radio buttons + from osdagbridge.desktop.ui.utils.custom_widgets import CustomRadioButton + force_rbs = [ + rb for rb in output_dock.output_widget.findChildren(CustomRadioButton) + if rb.text() in _RICH_LABEL_TO_FORCE ] - for cb in force_cbs: - cb.setChecked(cb.text() == _DEFAULT_FORCE_LABEL) - cb.stateChanged.connect(self.update_plot) + for rb in force_rbs: + rb.setChecked(rb.text() == _DEFAULT_FORCE_LABEL) + rb.toggled.connect(self.update_plot) self.update_plot() def update_plot(self, *_args): """Rebuild and redraw the current figure from the OutputDock controls.""" + if self._grillage_mode: + return + if self._ds_all is None or self._output_dock is None: return @@ -132,6 +199,11 @@ def update_plot(self, *_args): ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist ) + elif force_key in _DEFL_KEYS: + self._fig = build_figure_deflection( + ds, force_key, self._nodes, self._members, + edge_dist=self._edge_dist + ) else: self._fig, _ = build_figure_bmd( ds, force_key, self._nodes, self._members, @@ -143,6 +215,27 @@ def update_plot(self, *_args): self._fit_figure_to_canvas() self._canvas.draw() + # reset zoom and capture fresh axis limits + self._zoom_scale = 1.0 + self._store_orig_limits() + + def _on_grillage_toggled(self, checked: bool): + """Show grillage-only plot when checked; restore force diagram when unchecked.""" + self._grillage_mode = checked + if checked: + if not self._nodes: + return + plt.close(self._fig) + self._fig = build_figure_grillage(self._nodes, self._members) + self._canvas.figure = self._fig + self._fig.set_canvas(self._canvas) + self._fit_figure_to_canvas() + self._canvas.draw() + self._zoom_scale = 1.0 + self._store_orig_limits() + else: + self.update_plot() + def resizeEvent(self, event): super().resizeEvent(event) self._fit_figure_to_canvas() @@ -158,6 +251,60 @@ def _fit_figure_to_canvas(self): dpi = self._fig.dpi self._fig.set_size_inches(w_px / dpi, h_px / dpi, forward=False) + def _store_orig_limits(self): + """Snapshot current 3-D axis limits so zoom can scale relative to them.""" + self._orig_limits = {} + for i, ax in enumerate(self._fig.axes): + if hasattr(ax, "get_zlim"): + self._orig_limits[i] = { + "x": ax.get_xlim(), + "y": ax.get_ylim(), + "z": ax.get_zlim(), + } + + def _apply_zoom(self): + """Scale each 3-D axis uniformly around its centre by _zoom_scale.""" + if not self._orig_limits: + return + for i, ax in enumerate(self._fig.axes): + if i not in self._orig_limits: + continue + lims = self._orig_limits[i] + for axis_key, set_lim in [ + ("x", ax.set_xlim), + ("y", ax.set_ylim), + ("z", ax.set_zlim), + ]: + lo, hi = lims[axis_key] + centre = (lo + hi) / 2.0 + half = (hi - lo) / 2.0 * self._zoom_scale + set_lim(centre - half, centre + half) + self._canvas.draw_idle() + + def eventFilter(self, obj, event): + """Intercept scroll wheel on the canvas to zoom.""" + if obj is self._canvas and event.type() == QEvent.Type.Wheel: + delta = event.angleDelta().y() + if delta > 0: + self._zoom_scale = max(self._zoom_scale * 0.8, 0.05) + else: + self._zoom_scale = min(self._zoom_scale * 1.25, 20.0) + self._apply_zoom() + return True # consume — prevent parent scroll area from scrolling + return super().eventFilter(obj, event) + + def _zoom_in(self): + self._zoom_scale = max(self._zoom_scale * 0.8, 0.05) + self._apply_zoom() + + def _zoom_out(self): + self._zoom_scale = min(self._zoom_scale * 1.25, 20.0) + self._apply_zoom() + + def _zoom_reset(self): + self._zoom_scale = 1.0 + self._apply_zoom() + def _current_loadcase(self) -> str: """Read the selected load case from the OutputDock combobox.""" combo = self._output_dock.output_widget.findChild( @@ -166,9 +313,9 @@ def _current_loadcase(self) -> str: return combo.currentText() if combo else (self._loadcases[0] if self._loadcases else "") def _current_force_key(self) -> str: - """Return the FORCE_MAP key for the currently checked force checkbox.""" - from osdagbridge.desktop.ui.utils.custom_widgets import RichCheckBox - for cb in self._output_dock.output_widget.findChildren(RichCheckBox): - if cb.isChecked() and cb.text() in _RICH_LABEL_TO_FORCE: - return _RICH_LABEL_TO_FORCE[cb.text()] + """Return the FORCE_MAP key for the currently checked force radio button.""" + from osdagbridge.desktop.ui.utils.custom_widgets import CustomRadioButton + for rb in self._output_dock.output_widget.findChildren(CustomRadioButton): + if rb.isChecked() and rb.text() in _RICH_LABEL_TO_FORCE: + return _RICH_LABEL_TO_FORCE[rb.text()] return "Fy" # fallback From 02edbeb3445968d1124a713a6a0d2f6a83420fe6 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Fri, 17 Apr 2026 00:35:38 +0530 Subject: [PATCH 150/225] feat: Tool bar added --- .../desktop/resources/resources.qrc | 16 + .../desktop/resources/resources_rc.py | 1396 +++++++++++++++-- .../vectors/tool_bar/grillage_view_light.svg | 14 + .../vectors/tool_bar/node_element_light.svg | 13 + .../resources/vectors/tool_bar/node_light.svg | 11 + .../resources/vectors/tool_bar/pan_light.svg | 3 + .../vectors/tool_bar/rotate_light.svg | 3 + .../vectors/tool_bar/show_axis_light.svg | 8 + .../vectors/tool_bar/show_contour_light.svg | 15 + .../tool_bar/show_grid_lines_light.svg | 4 + .../vectors/tool_bar/show_load_light.svg | 6 + .../vectors/tool_bar/show_support_light.svg | 6 + .../vectors/tool_bar/zoom_fit_light.svg | 5 + .../vectors/tool_bar/zoom_in_light.svg | 5 + .../vectors/tool_bar/zoom_out_light.svg | 5 + .../vectors/tool_bar/zoom_window_light.svg | 24 + .../vectors/view_btn/plots_active.svg | 22 +- .../vectors/view_btn/plots_inactive.svg | 22 +- src/osdagbridge/desktop/ui/template_page.py | 14 +- .../desktop/ui/utils/custom_widgets.py | 183 ++- 20 files changed, 1568 insertions(+), 207 deletions(-) create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/grillage_view_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/node_element_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/node_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/pan_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/rotate_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/show_axis_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/show_contour_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/show_grid_lines_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/show_load_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/show_support_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_fit_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_in_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_out_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_window_light.svg diff --git a/src/osdagbridge/desktop/resources/resources.qrc b/src/osdagbridge/desktop/resources/resources.qrc index 247f7a713..c360742d7 100644 --- a/src/osdagbridge/desktop/resources/resources.qrc +++ b/src/osdagbridge/desktop/resources/resources.qrc @@ -45,5 +45,21 @@ vectors/msg_about.svg vectors/fit_to_screen.svg + + vectors/tool_bar/grillage_view_light.svg + vectors/tool_bar/node_element_light.svg + vectors/tool_bar/node_light.svg + vectors/tool_bar/pan_light.svg + vectors/tool_bar/rotate_light.svg + vectors/tool_bar/show_axis_light.svg + vectors/tool_bar/show_contour_light.svg + vectors/tool_bar/show_grid_lines_light.svg + vectors/tool_bar/show_load_light.svg + vectors/tool_bar/show_support_light.svg + vectors/tool_bar/zoom_fit_light.svg + vectors/tool_bar/zoom_in_light.svg + vectors/tool_bar/zoom_out_light.svg + vectors/tool_bar/zoom_window_light.svg + \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/resources_rc.py b/src/osdagbridge/desktop/resources/resources_rc.py index 0d9b50f92..7fa733894 100644 --- a/src/osdagbridge/desktop/resources/resources_rc.py +++ b/src/osdagbridge/desktop/resources/resources_rc.py @@ -1483,6 +1483,1054 @@ 66-76.67v466-586\ .66 120.66Z\x22/>\ +\x00\x00\x04z\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +path d=\x22M27.0562\ + 45.1123C22.1437\ + 45.1123 17.9156\ + 43.3404 14.3719\ + 39.7967C10.8281\ + 36.2529 9.05624\ + 32.0248 9.05624\ + 27.1123V24.5811\ +L4.55624 29.0811\ +L2.36249 26.8873\ +L10.7437 18.5061\ +L19.125 26.8873L\ +16.9312 29.0811L\ +12.4312 24.5811V\ +27.1123C12.4312 \ +31.1248 13.8656 \ +34.5654 16.7344 \ +37.4342C19.6031 \ +40.3029 23.0437 \ +41.7373 27.0562 \ +41.7373C28.1437 \ +41.7373 29.175 4\ +1.6436 30.15 41.\ +4561C31.125 41.2\ +686 32.0437 40.9\ +873 32.9062 40.6\ +123L35.325 43.03\ +11C33.975 43.781\ +1 32.6156 44.315\ +4 31.2469 44.634\ +2C29.8781 44.952\ +9 28.4812 45.112\ +3 27.0562 45.112\ +3ZM43.3125 35.60\ +61L34.9312 27.22\ +48L37.1812 24.97\ +48L41.625 29.418\ +6V27.1123C41.625\ + 23.0998 40.1906\ + 19.6592 37.3219\ + 16.7904C34.4531\ + 13.9217 31.0125\ + 12.4873 27 12.4\ +873C25.9125 12.4\ +873 24.8812 12.5\ +904 23.9062 12.7\ +967C22.9312 13.0\ +029 22.0125 13.2\ +561 21.15 13.556\ +1L18.7312 11.137\ +3C20.0812 10.387\ +3 21.4406 9.8623\ + 22.8094 9.5623C\ +24.1781 9.2623 2\ +5.575 9.1123 27 \ +9.1123C31.9125 9\ +.1123 36.1406 10\ +.8842 39.6844 14\ +.4279C43.2281 17\ +.9717 45 22.1998\ + 45 27.1123V29.5\ +311L49.5 25.0311\ +L51.6937 27.2248\ +L43.3125 35.6061\ +Z\x22 fill=\x22black\x22/\ +>\x0a\x0a\ +\x00\x00\x06F\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +rect x=\x228.5\x22 y=\x22\ +8.5\x22 width=\x2237\x22 \ +height=\x2237\x22 stro\ +ke=\x22#252525\x22 str\ +oke-width=\x223\x22/>\x0a\ +\x0a\x0a\ +\x00\x00\x06\x0e\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +path d=\x22M52.207 \ +49.159L40.6582 3\ +7.6207C43.9488 3\ +3.634 45.7418 28\ +.6875 45.7418 23\ +.4563C45.7418 17\ +.4973 43.4215 11\ +.9074 39.2133 7.\ +68867C35.0051 3.\ +48047 29.4047 1.\ +16016 23.4457 1.\ +16016C17.4867 1.\ +16016 11.8969 3.\ +48047 7.67813 7.\ +68867C-1.0125 16\ +.3793 -1.0125 30\ +.5227 7.67813 39\ +.2133C11.8863 43\ +.4215 17.4867 45\ +.7418 23.4457 45\ +.7418C28.677 45.\ +7418 33.634 43.9\ +488 37.6102 40.6\ +582L49.159 52.20\ +7C50.3719 53.314\ +5 51.6691 52.744\ +9 52.207 52.207C\ +53.0402 51.3633 \ +53.0402 50.0027 \ +52.207 49.159ZM3\ +6.1652 36.1758C3\ +2.7691 39.5719 2\ +8.2551 41.4492 2\ +3.4457 41.4492C1\ +8.6363 41.4492 1\ +4.1223 39.5824 1\ +0.7262 36.1758C3\ +.7125 29.1621 3.\ +7125 17.7504 10.\ +7262 10.7367C14.\ +1223 7.34063 18.\ +6363 5.47383 23.\ +4457 5.47383C28.\ +2551 5.47383 32.\ +7691 7.34063 36.\ +1652 10.7367C39.\ +5613 14.1328 41.\ +4387 18.6469 41.\ +4387 23.4563C41.\ +4387 28.2551 39.\ +5613 32.7797 36.\ +1652 36.1758Z\x22 f\ +ill=\x22black\x22/>\x0a\x0a\ +\x0a\x0a\ +\x00\x00\x00\xf5\ +\x00\ +\x00\x03Kx\xda\x9d\x93\xc1n\xc3 \x0c\x86\xef}\x0a\ +\xcb=/1\x18\x9al*=\xb4\x97\x1d\xba\x87\x98V\ +\x16\xa2eI\x95\xa0\xd2\xbe\xfd \xcb\xd4i\xb7!$\ +cY|\xffoa\xd8N\x97\x06B{\xf2\xce\xa0V\ +\x08\xce\xb6\x8d\xf3\xdf\xf9\xa5\xb5a?\x5c\x0d\x12\x10h\ +\x05\xa9\xf6\xdev\x9d\xc1~\xe8-\xc2\xf5\xb3\xeb'\x83\ +\xce\xfb\xf3SY\x86\x10\x8a\xc0\xc506\xa5$\xa22\ +\x0a\xe3n\xb5=\xbfz\x07'\x83/B\x83\xa0c\x8c\ +j\x830\xf9q\xf8\xb0\x06\xd7J\xf3\x81\x0f?\x85\x87\ +\xa5\x13QH,\x7f\xc3j\x03B\x1f\xeb\x182X\x0d\ +\x92\x22+)\xcbW&_\x99\xe7\xcb\xc9\x97)\x8f\xd5\ +\xcfuV\xc3\x8ar@)\xd2xb\xcc\x19\x8f\xacf\ +\xb8\x02\x95qO\xfc\x98\xe0\x18s\x9c\x99g\x98\xff\xe3\ +<\xda7\x0f\xf1Y\xd7Edn\xcb\xbe\x9c\xe1\xea\xfe\ +\x07R~\x97\xdc\xa7\xf5W\x92g\xc1\xf4\xd6w\xab/\ +\x84\xc1\xea\x82\ +\x00\x00\x07:\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +path d=\x22M25.6025\ + 9.77227V13.0729\ +C25.6025 13.5225\ + 25.9262 13.9272\ + 26.3668 13.9902\ +C26.9243 14.0711\ + 27.4009 13.6395\ + 27.4009 13.0999\ +V9.77227L30.7279\ + 6.55261C31.0876\ + 6.20186 31.0876\ + 5.63528 30.7459\ + 5.27551C30.4042\ + 4.91575 29.8287\ + 4.90681 29.469 \ +5.25756L26.5017 \ +8.13542L23.5344 \ +5.25756C23.1747 \ +4.90681 22.6082 \ +4.91584 22.2575 \ +5.27551C21.9068 \ +5.63528 21.9158 \ +6.20186 22.2754 \ +6.55261L25.6025 \ +9.77227Z\x22 fill=\x22\ +black\x22/>\x0a\ +\x0a\x0a\x0a\x0a\x0a\x0a\ +\x00\x00\x05\xa8\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +path fill-rule=\x22\ +evenodd\x22 clip-ru\ +le=\x22evenodd\x22 d=\x22\ +M30.3752 8.4375C\ +31.3072 8.4375 3\ +2.0627 9.19303 3\ +2.0627 10.125V16\ +.875V28.6875H35.\ +4377V16.875C35.4\ +377 15.943 36.19\ +3 15.1875 37.125\ +2 15.1875C38.057\ +2 15.1875 38.812\ +7 15.943 38.8127\ + 16.875V33.75C38\ +.8127 40.2739 33\ +.5241 45.5625 27\ +.0002 45.5625V48\ +.9375C35.388 48.\ +9375 42.1877 42.\ +1378 42.1877 33.\ +75V16.875C42.187\ +7 14.079 39.9211\ + 11.8125 37.1252\ + 11.8125C36.5335\ + 11.8125 35.9653\ + 11.914 35.4377 \ +12.1006V10.125C3\ +5.4377 7.32906 3\ +3.1711 5.0625 30\ +.3752 5.0625C28.\ +0406 5.0625 26.0\ +75 6.64279 25.49\ + 8.79203C24.9129\ + 8.56325 24.2836\ + 8.4375 23.6252 \ +8.4375C20.8291 8\ +.4375 18.5626 10\ +.7041 18.5626 13\ +.5V28.2024L17.49\ +09 26.03L17.4874\ + 26.0228C16.2388\ + 23.5213 13.1986\ + 22.5054 10.697 \ +23.7541C8.21731 \ +24.9919 7.19752 \ +27.9898 8.39587 \ +30.4785L11.3341 \ +37.7568L11.3896 \ +37.8796C13.8777 \ +42.8557 16.7832 \ +45.6737 19.6571 \ +47.2178C22.5216 \ +48.7566 25.1865 \ +48.9375 27.0002 \ +48.9375V45.5625C\ +25.4387 45.5625 \ +23.4155 45.4057 \ +21.2544 44.2447C\ +19.1124 43.0938 \ +16.6671 40.8641 \ +14.4381 36.4297L\ +11.5029 29.1593L\ +11.448 29.0374C1\ +1.0317 28.2035 1\ +1.3704 27.1901 1\ +2.2042 26.7739C1\ +3.0372 26.3581 1\ +4.0491 26.6953 1\ +4.4663 27.5272L1\ +8.7368 36.1841L2\ +1.9376 35.4375V3\ +2.0625V13.5C21.9\ +376 12.568 22.69\ +3 11.8125 23.625\ +2 11.8125C24.557\ +2 11.8125 25.312\ +7 12.568 25.3127\ + 13.5V28.6875H28\ +.6877V13.5V10.12\ +5C28.6877 9.1930\ +3 29.443 8.4375 \ +30.3752 8.4375Z\x22\ + fill=\x22black\x22/>\x0a\ +\x0a\ +\x00\x00\x05\xa2\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +line x1=\x228\x22 y1=\x22\ +35.25\x22 x2=\x2245.5\x22\ + y2=\x2235.25\x22 stro\ +ke=\x22black\x22 strok\ +e-width=\x227.5\x22/>\x0a\ +\x0a\x0a\x0a\ +\x0a\ +\x00\x00\x01\x81\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +circle cx=\x2214.86\ +84\x22 cy=\x2240.8684\x22\ + r=\x224.86842\x22 fil\ +l=\x22black\x22/>\x0a\x0a\x0a\x0a\x0a\ +\ +\x00\x00\x02?\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +g clip-path=\x22url\ +(#clip0_2155_8)\x22\ +>\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a<\ +/defs>\x0a\x0a\ +\x00\x00\x01\xc0\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +g clip-path=\x22url\ +(#clip0_2155_7)\x22\ +>\x0a\x0a\x0a<\ +/g>\x0a\x0a\x0a\x0a\x0a\ +\x0a\x0a\ +\x00\x00\x03\xbf\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +path d=\x22M11 44L4\ +5 10.5\x22 stroke=\x22\ +#38D00A\x22 stroke-\ +width=\x221.2\x22/>\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\ +\ +\x0a\x0a\ +\x0a\x0a\ +\x00\x00\x05$\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +path d=\x22M52.207 \ +49.159L40.6582 3\ +7.6207C43.9488 3\ +3.634 45.7418 28\ +.6875 45.7418 23\ +.4562C45.7418 17\ +.4973 43.4215 11\ +.9074 39.2133 7.\ +68867C35.0051 3.\ +48047 29.4047 1.\ +16016 23.4457 1.\ +16016C17.4867 1.\ +16016 11.8969 3.\ +48047 7.67813 7.\ +68867C-1.0125 16\ +.3793 -1.0125 30\ +.5227 7.67813 39\ +.2133C11.8863 43\ +.4215 17.4867 45\ +.7418 23.4457 45\ +.7418C28.677 45.\ +7418 33.634 43.9\ +488 37.6102 40.6\ +582L49.159 52.20\ +7C50.3719 53.314\ +5 51.6691 52.744\ +9 52.207 52.207C\ +53.0402 51.3633 \ +53.0402 50.0027 \ +52.207 49.159ZM3\ +6.1652 36.1652C3\ +2.7691 39.5613 2\ +8.2551 41.4387 2\ +3.4457 41.4387C1\ +8.6363 41.4387 1\ +4.1223 39.5719 1\ +0.7262 36.1652C3\ +.7125 29.1516 3.\ +7125 17.7398 10.\ +7262 10.7262C14.\ +1223 7.33008 18.\ +6363 5.46328 23.\ +4457 5.46328C28.\ +2551 5.46328 32.\ +7691 7.33008 36.\ +1652 10.7262C39.\ +5613 14.1223 41.\ +4387 18.6363 41.\ +4387 23.4457C41.\ +4387 28.2551 39.\ +5613 32.7691 36.\ +1652 36.1652Z\x22 f\ +ill=\x22black\x22/>\x0a\x0a\x0a\x0a\ +\x00\x00\x08\x10\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +g clip-path=\x22url\ +(#clip0_2155_89)\ +\x22>\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\ +\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\ +\x0a\x0a\x0a\x0a\ +\x0a\x0a\ +\x00\x00\x04\xa6\ +<\ +svg width=\x2254\x22 h\ +eight=\x2254\x22 viewB\ +ox=\x220 0 54 54\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +path d=\x22M52.207 \ +49.159L40.6582 3\ +7.6207C43.9488 3\ +3.634 45.7418 28\ +.6875 45.7418 23\ +.4563C45.7418 17\ +.4973 43.4215 11\ +.9074 39.2133 7.\ +68867C35.0051 3.\ +48047 29.4047 1.\ +16016 23.4457 1.\ +16016C17.4867 1.\ +16016 11.8969 3.\ +48047 7.67813 7.\ +68867C-1.0125 16\ +.3793 -1.0125 30\ +.5227 7.67813 39\ +.2133C11.8863 43\ +.4215 17.4867 45\ +.7418 23.4457 45\ +.7418C28.677 45.\ +7418 33.634 43.9\ +488 37.6102 40.6\ +582L49.159 52.20\ +7C50.3719 53.314\ +5 51.6691 52.744\ +9 52.207 52.207C\ +53.0402 51.3633 \ +53.0402 50.0027 \ +52.207 49.159ZM3\ +6.1652 36.1758C3\ +2.7691 39.5719 2\ +8.2551 41.4492 2\ +3.4457 41.4492C1\ +8.6363 41.4492 1\ +4.1223 39.5824 1\ +0.7262 36.1758C3\ +.7125 29.1621 3.\ +7125 17.7504 10.\ +7262 10.7367C14.\ +1223 7.34063 18.\ +6363 5.47383 23.\ +4457 5.47383C28.\ +2551 5.47383 32.\ +7691 7.34063 36.\ +1652 10.7367C39.\ +5613 14.1328 41.\ +4387 18.6469 41.\ +4387 23.4563C41.\ +4387 28.2551 39.\ +5613 32.7797 36.\ +1652 36.1758Z\x22 f\ +ill=\x22black\x22/>\x0a\x0a\x0a\x0a\ \x00\x00\x01\xa2\ <\ svg xmlns=\x22http:\ @@ -1940,7 +2988,7 @@ 5871V15H16.0456Z\ \x22 fill=\x22black\x22/>\ \x0d\x0a\x0d\x0a\ -\x00\x00\x04\xbe\ +\x00\x00\x02\x13\ <\ svg width=\x2250\x22 h\ eight=\x2250\x22 viewB\ @@ -1948,76 +2996,34 @@ ill=\x22none\x22 xmlns\ =\x22http://www.w3.\ org/2000/svg\x22>\x0a<\ -g clip-path=\x22url\ -(#clip0_2153_34)\ -\x22>\x0a\x0a<\ -path d=\x22M4 20C10\ -.9571 32.074 29.\ -2971 48.9775 47 \ -20\x22 stroke=\x22#999\ -999\x22 stroke-widt\ -h=\x221.25\x22/>\x0a\x0a<\ +path d=\x22M2.06665\ + 20C9.48758 32.0\ +74 29.0502 48.97\ +75 47.9334 20\x22 s\ +troke=\x22#999999\x22 \ +stroke-width=\x221.\ +25\x22/>\x0a\x0a\x0a\ -\x0a<\ -path d=\x22M44.9 27\ -.6001L49.9 27.60\ -01\x22 stroke=\x22blac\ -k\x22/>\x0a\x0a\ -\x0a\x0a\ -\x0a\ -\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\ +3.36134\x22/>\x0a\x0a\ \x00\x00\x01T\ <\ svg xmlns=\x22http:\ @@ -2330,7 +3336,7 @@ 19 11-40 11t-40-\ 11L160-252Zm320-\ 228Z\x22/>\ -\x00\x00\x04\xb8\ +\x00\x00\x02\x0e\ <\ svg width=\x2250\x22 h\ eight=\x2250\x22 viewB\ @@ -2338,76 +3344,33 @@ ill=\x22none\x22 xmlns\ =\x22http://www.w3.\ org/2000/svg\x22>\x0a<\ -g clip-path=\x22url\ -(#clip0_2146_8)\x22\ ->\x0a\x0a\x0a\x0a\x0a\x0a\ -\x0a\x0a\x0a\x0a\x0a\x0a\x0a<\ -stop offset=\x220.9\ -51923\x22 stop-colo\ -r=\x22#991D1D\x22 stop\ --opacity=\x220.6\x22/>\ -\x0a\x0a\x0a\ -\x0a\x0a\x0a\ -\x0a\ +path d=\x22M2.06665\ + 20C9.48758 32.0\ +74 29.0502 48.97\ +75 47.9334 20\x22 s\ +troke=\x22#333333\x22 \ +stroke-width=\x222\x22\ +/>\x0a\x0a\x0a\ \x00\x00\x01\xa4\ <\ svg xmlns=\x22http:\ @@ -2668,6 +3631,10 @@ \x005w\xc7\ \x00l\ \x00o\x00c\x00k\x00_\x00o\x00p\x00e\x00n\x00.\x00s\x00v\x00g\ +\x00\x08\ +\x06bW\xe2\ +\x00t\ +\x00o\x00o\x00l\x00_\x00b\x00a\x00r\ \x00\x14\ \x01\xd3}\xa7\ \x00a\ @@ -2700,6 +3667,73 @@ \x08\xc8U\xe7\ \x00s\ \x00a\x00v\x00e\x00.\x00s\x00v\x00g\ +\x00\x10\ +\x0c\xbeE\x87\ +\x00r\ +\x00o\x00t\x00a\x00t\x00e\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ +\x00\x19\ +\x08\x05\xbc\xe7\ +\x00s\ +\x00h\x00o\x00w\x00_\x00g\x00r\x00i\x00d\x00_\x00l\x00i\x00n\x00e\x00s\x00_\x00l\ +\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ +\x00\x11\ +\x07\xf2\x07\xe7\ +\x00z\ +\x00o\x00o\x00m\x00_\x00i\x00n\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ +\ +\x00\x17\ +\x08\xeeE\x87\ +\x00g\ +\x00r\x00i\x00l\x00l\x00a\x00g\x00e\x00_\x00v\x00i\x00e\x00w\x00_\x00l\x00i\x00g\ +\x00h\x00t\x00.\x00s\x00v\x00g\ +\x00\x13\ +\x04=J\xc7\ +\x00s\ +\x00h\x00o\x00w\x00_\x00a\x00x\x00i\x00s\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\ +\x00v\x00g\ +\x00\x0d\ +\x00\xff\x9e\xe7\ +\x00p\ +\x00a\x00n\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ +\x00\x13\ +\x00\xc7D'\ +\x00s\ +\x00h\x00o\x00w\x00_\x00l\x00o\x00a\x00d\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\ +\x00v\x00g\ +\x00\x16\ +\x05\x5c\xf9\x87\ +\x00s\ +\x00h\x00o\x00w\x00_\x00s\x00u\x00p\x00p\x00o\x00r\x00t\x00_\x00l\x00i\x00g\x00h\ +\x00t\x00.\x00s\x00v\x00g\ +\x00\x16\ +\x00\x19\x92\x87\ +\x00n\ +\x00o\x00d\x00e\x00_\x00e\x00l\x00e\x00m\x00e\x00n\x00t\x00_\x00l\x00i\x00g\x00h\ +\x00t\x00.\x00s\x00v\x00g\ +\x00\x0e\ +\x06\xa1\x82g\ +\x00n\ +\x00o\x00d\x00e\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ +\x00\x16\ +\x05\x18r\x87\ +\x00s\ +\x00h\x00o\x00w\x00_\x00c\x00o\x00n\x00t\x00o\x00u\x00r\x00_\x00l\x00i\x00g\x00h\ +\x00t\x00.\x00s\x00v\x00g\ +\x00\x12\ +\x00:\x12\xe7\ +\x00z\ +\x00o\x00o\x00m\x00_\x00o\x00u\x00t\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\ +\x00g\ +\x00\x15\ +\x03\xf1e'\ +\x00z\ +\x00o\x00o\x00m\x00_\x00w\x00i\x00n\x00d\x00o\x00w\x00_\x00l\x00i\x00g\x00h\x00t\ +\x00.\x00s\x00v\x00g\ +\x00\x12\ +\x07\xba\x12\x07\ +\x00z\ +\x00o\x00o\x00m\x00_\x00f\x00i\x00t\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\ +\x00g\ \x00\x17\ \x01\xa3I\xa7\ \x00i\ @@ -2774,29 +3808,31 @@ qt_resource_struct = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00$\ +\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x003\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x03\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x007&\ \x00\x00\x01\x9b\x13E\x17;\ \x00\x00\x00^\x00\x00\x00\x00\x00\x01\x00\x00\x04\xea\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x01\xee\x00\x00\x00\x00\x00\x01\x00\x00:\x08\ +\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00:\x08\ \x00\x00\x01\x9b\x13E\x179\ \x00\x00\x00\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x13\xdf\ \x00\x00\x01\x9c\xcem|j\ -\x00\x00\x02t\x00\x00\x00\x00\x00\x01\x00\x00L\xbc\ +\x00\x00\x02\x8a\x00\x00\x00\x00\x00\x01\x00\x00L\xbc\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x02P\x00\x00\x00\x00\x00\x01\x00\x00F\x97\ +\x00\x00\x01\xee\x00\x02\x00\x00\x00\x0e\x00\x00\x00%\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x02f\x00\x00\x00\x00\x00\x01\x00\x00F\x97\ \x00\x00\x01\x9c\xcem|k\ -\x00\x00\x02\xc4\x00\x00\x00\x00\x00\x01\x00\x00T\xce\ +\x00\x00\x02\xda\x00\x00\x00\x00\x00\x01\x00\x00T\xce\ \x00\x00\x01\x9c\xcem|l\ \x00\x00\x00z\x00\x00\x00\x00\x00\x01\x00\x00\x05\xa0\ \x00\x00\x01\x9b\x13\xd0_\xa8\ -\x00\x00\x02\x9c\x00\x00\x00\x00\x00\x01\x00\x00R\x0f\ +\x00\x00\x02\xb2\x00\x00\x00\x00\x00\x01\x00\x00R\x0f\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x02\xe8\x00\x00\x00\x00\x00\x01\x00\x00Wg\ +\x00\x00\x02\xfe\x00\x00\x00\x00\x00\x01\x00\x00Wg\ \x00\x00\x01\x9b\x13E\x17;\ \x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x00$\x17\ \x00\x00\x01\x9b\x13E\x179\ @@ -2804,46 +3840,74 @@ \x00\x00\x01\x9b\x13E\x179\ \x00\x00\x01*\x00\x00\x00\x00\x00\x01\x00\x00!\x19\ \x00\x00\x01\x9di#\xc4\x14\ -\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00<=\ +\x00\x00\x022\x00\x00\x00\x00\x00\x01\x00\x00<=\ \x00\x00\x01\x9b\x07\x002e\ \x00\x00\x00\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x19\x0b\ \x00\x00\x01\x9b\x13E\x179\ \x00\x00\x01|\x00\x00\x00\x00\x00\x01\x00\x00)j\ \x00\x00\x01\x9b\x07\x002a\ -\x00\x00\x00H\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x16\ +\x00\x00\x00H\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x17\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x10\x00\x00\x00\x00\x00\x01\x00\x00\x1eB\ \x00\x00\x01\x9b\x13E\x179\ \x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x001\x99\ \x00\x00\x01\x9c\xcem|j\ -\x00\x00\x03l\x00\x00\x00\x00\x00\x01\x00\x00i\x0f\ +\x00\x00\x05\xf0\x00\x00\x00\x00\x00\x01\x00\x00\xa8\xa7\ \x00\x00\x01\x9d\x91\x81\x92\xf7\ -\x00\x00\x02\xfe\x00\x00\x00\x00\x00\x01\x00\x00Y\xa0\ +\x00\x00\x05\x82\x00\x00\x00\x00\x00\x01\x00\x00\x998\ \x00\x00\x01\x9d\x91\x81\x92\xfa\ -\x00\x00\x05j\x00\x00\x00\x00\x00\x01\x00\x00\x94\xf1\ -\x00\x00\x01\x9d\x91\x81\x92\xfc\ -\x00\x00\x03\x94\x00\x00\x00\x00\x00\x01\x00\x00j\xb1\ +\x00\x00\x07\xee\x00\x00\x00\x00\x00\x01\x00\x00\xcf4\ +\x00\x00\x01\x9d\x97\xad\xeb\x0d\ +\x00\x00\x06\x18\x00\x00\x00\x00\x00\x01\x00\x00\xaaI\ \x00\x00\x01\x9d\x91\x81\x92\xfa\ -\x00\x00\x04L\x00\x00\x00\x00\x00\x01\x00\x00{\x9b\ +\x00\x00\x06\xd0\x00\x00\x00\x00\x00\x01\x00\x00\xb8\x88\ \x00\x00\x01\x9d\x93\x0b\xd2\x8c\ -\x00\x00\x03\xc4\x00\x00\x00\x00\x00\x01\x00\x00l\xe2\ +\x00\x00\x06H\x00\x00\x00\x00\x00\x01\x00\x00\xacz\ \x00\x00\x01\x9d\x91\x81\x92\xfc\ -\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00u\x81\ -\x00\x00\x01\x9d\x94\xe4\xda\x86\ -\x00\x00\x04\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x8d5\ -\x00\x00\x01\x9d\x94\xe5\x03\xa2\ -\x00\x00\x05\x06\x00\x00\x00\x00\x00\x01\x00\x00\x91\xf1\ +\x00\x00\x06t\x00\x00\x00\x00\x00\x01\x00\x00\xb5\x19\ +\x00\x00\x01\x9d\x97_w\xb6\ +\x00\x00\x07d\x00\x00\x00\x00\x00\x01\x00\x00\xca\x22\ +\x00\x00\x01\x9d\x97_T\xe6\ +\x00\x00\x07\x8a\x00\x00\x00\x00\x00\x01\x00\x00\xcc4\ \x00\x00\x01\x9d\x91\x81\x92\xfb\ -\x00\x00\x05<\x00\x00\x00\x00\x00\x01\x00\x00\x93\x99\ +\x00\x00\x07\xc0\x00\x00\x00\x00\x00\x01\x00\x00\xcd\xdc\ \x00\x00\x01\x9d\x91\x81\x92\xfa\ -\x00\x00\x04~\x00\x00\x00\x00\x00\x01\x00\x00}\xce\ +\x00\x00\x07\x02\x00\x00\x00\x00\x00\x01\x00\x00\xba\xbb\ \x00\x00\x01\x9d\x91\x81\x92\xf9\ -\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x8b\x93\ +\x00\x00\x078\x00\x00\x00\x00\x00\x01\x00\x00\xc8\x80\ \x00\x00\x01\x9d\x91\x81\x92\xf9\ -\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x00zC\ +\x00\x00\x06\x9e\x00\x00\x00\x00\x00\x01\x00\x00\xb70\ \x00\x00\x01\x9d\x91\x81\x92\xfb\ -\x00\x00\x032\x00\x00\x00\x00\x00\x01\x00\x00[F\ +\x00\x00\x05\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x9a\xde\ \x00\x00\x01\x9d\x91\x81\x92\xfa\ +\x00\x00\x04x\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x88\ +\x00\x00\x01\x9d\x96`\x0bN\ +\x00\x00\x04\xfe\x00\x00\x00\x00\x00\x01\x00\x00\x87R\ +\x00\x00\x01\x9d\x96^\xf79\ +\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x00x]\ +\x00\x00\x01\x9d\x96b\x7f\xea\ +\x00\x00\x03\xfa\x00\x00\x00\x00\x00\x01\x00\x00r\xb1\ +\x00\x00\x01\x9d\x96_CU\ +\x00\x00\x05(\x00\x00\x00\x00\x00\x01\x00\x00\x8cz\ +\x00\x00\x01\x9d\x96^s\x14\ +\x00\x00\x03\xce\x00\x00\x00\x00\x00\x01\x00\x00ks\ +\x00\x00\x01\x9d\x97!\x85\xfc\ +\x00\x00\x04\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x83\x8f\ +\x00\x00\x01\x9d\x96`\xb2o\ +\x00\x00\x04F\x00\x00\x00\x00\x00\x01\x00\x00~\x03\ +\x00\x00\x01\x9d\x96b5_\ +\x00\x00\x04\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x81\xcb\ +\x00\x00\x01\x9d\x96_\xbco\ +\x00\x00\x05X\x00\x00\x00\x00\x00\x01\x00\x00\x94\x8e\ +\x00\x00\x01\x9d\x96]\xcc'\ +\x00\x00\x03r\x00\x00\x00\x00\x00\x01\x00\x00dh\ +\x00\x00\x01\x9d\x96^\xb7\xaf\ +\x00\x00\x03:\x00\x00\x00\x00\x00\x01\x00\x00^\x1e\ +\x00\x00\x01\x9d\x96a\xc9M\ +\x00\x00\x03\x9a\x00\x01\x00\x00\x00\x01\x00\x00jz\ +\x00\x00\x01\x9d\x96`e\x08\ +\x00\x00\x03\x14\x00\x00\x00\x00\x00\x01\x00\x00Y\xa0\ +\x00\x00\x01\x9d\x96_~\x0a\ \x00\x00\x00&\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x01\x9d\x91\x81\x94`\ " diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/grillage_view_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/grillage_view_light.svg new file mode 100644 index 000000000..da136d2e3 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/grillage_view_light.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/node_element_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/node_element_light.svg new file mode 100644 index 000000000..f6824aad6 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/node_element_light.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/node_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/node_light.svg new file mode 100644 index 000000000..483b8bd9a --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/node_light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/pan_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/pan_light.svg new file mode 100644 index 000000000..58cb45171 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/pan_light.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/rotate_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/rotate_light.svg new file mode 100644 index 000000000..390baaf8d --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/rotate_light.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/show_axis_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/show_axis_light.svg new file mode 100644 index 000000000..3251e5d87 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/show_axis_light.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/show_contour_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/show_contour_light.svg new file mode 100644 index 000000000..bbafd2319 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/show_contour_light.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/show_grid_lines_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/show_grid_lines_light.svg new file mode 100644 index 000000000..4f7031d40 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/show_grid_lines_light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/show_load_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/show_load_light.svg new file mode 100644 index 000000000..ef0d5d05b --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/show_load_light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/show_support_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/show_support_light.svg new file mode 100644 index 000000000..0ad968f52 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/show_support_light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_fit_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_fit_light.svg new file mode 100644 index 000000000..d3492d1fe --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_fit_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_in_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_in_light.svg new file mode 100644 index 000000000..a2600b968 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_in_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_out_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_out_light.svg new file mode 100644 index 000000000..e25fb6b6e --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_out_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_window_light.svg b/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_window_light.svg new file mode 100644 index 000000000..668358559 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/tool_bar/zoom_window_light.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg index 703555a5f..82bc15e6a 100644 --- a/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg @@ -1,21 +1,5 @@ - - - - - - - - - - - - - - - - - - - + + + diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg index 8e1177a0b..b250035d2 100644 --- a/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg @@ -1,21 +1,5 @@ - - - - - - - - - - - - - - - - - - - + + + diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 0830b857d..aafa5e364 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -24,6 +24,7 @@ SectionDimsDTO, ISectionDimsDTO ) +from osdagbridge.desktop.ui.utils.custom_widgets import ToolBarWidget ''' Temporary DTO and will be removed once the backend is connected @@ -242,6 +243,7 @@ def mousePressEvent(self, event): self.input_dock_control = ClickableSvgWidget() self.input_dock_control.setFixedSize(18, 18) self.input_dock_control.load(":/vectors/view_btn/input_dock_active.svg") + self.input_dock_control.setToolTip("Toggle Input Dock") self.input_dock_control.clicked.connect(self.input_dock_toggle) self.input_dock_active = True control_button_layout.addWidget(self.input_dock_control) @@ -250,6 +252,7 @@ def mousePressEvent(self, event): self.cross_section_control = ClickableSvgWidget() self.cross_section_control.setFixedSize(18, 18) self.cross_section_control.load(":/vectors/view_btn/cross_section_active.svg") + self.cross_section_control.setToolTip("Toggle Cross-Section View") self.cross_section_control.clicked.connect(self.cross_section_toggle) self.cross_section_active = True control_button_layout.addWidget(self.cross_section_control) @@ -258,6 +261,7 @@ def mousePressEvent(self, event): self.top_view_control = ClickableSvgWidget() self.top_view_control.setFixedSize(18, 18) self.top_view_control.load(":/vectors/view_btn/top_view_active.svg") + self.top_view_control.setToolTip("Toggle Top View") self.top_view_control.clicked.connect(self.top_view_toggle) self.top_view_active = True control_button_layout.addWidget(self.top_view_control) @@ -266,6 +270,7 @@ def mousePressEvent(self, event): self.log_dock_control = ClickableSvgWidget() self.log_dock_control.load(":/vectors/view_btn/logs_dock_inactive.svg") self.log_dock_control.setFixedSize(18, 18) + self.log_dock_control.setToolTip("Toggle Logs Dock") self.log_dock_control.clicked.connect(self.logs_dock_toggle) self.log_dock_active = False control_button_layout.addWidget(self.log_dock_control) @@ -274,6 +279,7 @@ def mousePressEvent(self, event): self.cad_3d_control = ClickableSvgWidget() self.cad_3d_control.load(":/vectors/view_btn/3d_cad_inactive.svg") self.cad_3d_control.setFixedSize(18, 18) + self.cad_3d_control.setToolTip("Toggle 3D CAD View") self.cad_3d_control.clicked.connect(self.cad_3d_view_toggle) self.cad_3d_view_active = False control_button_layout.addWidget(self.cad_3d_control) @@ -282,6 +288,7 @@ def mousePressEvent(self, event): self.plots_control = ClickableSvgWidget() self.plots_control.load(":/vectors/view_btn/plots_inactive.svg") self.plots_control.setFixedSize(18, 18) + self.plots_control.setToolTip("Toggle 3D Plots View") self.plots_control.clicked.connect(self.plots_view_toggle) self.plots_view_active = False control_button_layout.addWidget(self.plots_control) @@ -289,6 +296,7 @@ def mousePressEvent(self, event): self.output_dock_control = ClickableSvgWidget() self.output_dock_control.load(":/vectors/view_btn/output_dock_inactive.svg") self.output_dock_control.setFixedSize(18, 18) + self.output_dock_control.setToolTip("Toggle Output Dock") self.output_dock_control.clicked.connect(self.output_dock_toggle) self.output_dock_active = False control_button_layout.addWidget(self.output_dock_control) @@ -323,11 +331,15 @@ def mousePressEvent(self, event): central_V_layout.setContentsMargins(0, 0, 0, 0) central_V_layout.setSpacing(0) + # Add Tool bar + self.tool_bar = ToolBarWidget() + central_V_layout.addWidget(self.tool_bar) + # ----------------- CAD + LOG SPLITTER (ADDED) ----------------- self.cad_log_splitter = QSplitter(Qt.Vertical) self.cad_log_splitter.setHandleWidth(4) - self.cad_log_splitter.setChildrenCollapsible(False) + self.cad_log_splitter.setChildrenCollapsible(False) # CAD widget self.cad_comp_widget = BridgeDualCADWidget(self) diff --git a/src/osdagbridge/desktop/ui/utils/custom_widgets.py b/src/osdagbridge/desktop/ui/utils/custom_widgets.py index 83d919da3..fd89a45c1 100644 --- a/src/osdagbridge/desktop/ui/utils/custom_widgets.py +++ b/src/osdagbridge/desktop/ui/utils/custom_widgets.py @@ -9,10 +9,10 @@ from PySide6.QtWidgets import ( QListView, QStyledItemDelegate, QWidget, QVBoxLayout, - QSizePolicy, QRadioButton + QSizePolicy, QRadioButton, QSpinBox, QPushButton, QScrollArea, QFrame ) from PySide6.QtCore import Qt, QRectF, QRect -from PySide6.QtGui import QColor, QPainterPath, QPen, QFontMetrics +from PySide6.QtGui import QColor, QPainterPath, QPen, QFontMetrics, QIcon, QCursor # ================================================================================= # ITEM DELEGATE FOR DISABLED ITEMS @@ -435,6 +435,185 @@ def sizeHint(self) -> QSize: def minimumSizeHint(self) -> QSize: return self.sizeHint() +#---Custom toolbar widget with scroll area (for main screen)-------------------------------------- +class ToolBarWidget(QWidget): + def __init__(self, parent=None): + super().__init__(parent) + + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + + main_layout = QHBoxLayout(self) + main_layout.setContentsMargins(0, 0, 0, 0) + main_layout.setSpacing(0) + + # Scroll Area + self.scroll_area = QScrollArea() + self.scroll_area.setWidgetResizable(True) + self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) + self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.scroll_area.setFrameShape(QScrollArea.NoFrame) + + # Your QSS + self.scroll_area.setStyleSheet(""" + QScrollArea { background:transparent; padding:0px 0px; + border-top:1px solid #909090; border-bottom:1px solid #909090; } + QScrollArea QScrollBar:vertical { border:none; background:#f0f0f0; width:8px; } + QScrollArea QScrollBar::handle:vertical { background:#c0c0c0; border-radius:4px; min-height:20px; } + QScrollArea QScrollBar::handle:vertical:hover { background:#a0a0a0; } + QScrollArea QScrollBar::add-line:vertical, + QScrollArea QScrollBar::sub-line:vertical { border:none; background:none; } + """) + + container = QWidget() + self.layout = QHBoxLayout(container) + self.layout.setContentsMargins(5, 0, 5, 0) + self.layout.setSpacing(6) + + icon_size = QSize(29, 29) + + # Button style with subtle hover + button_qss = """ + QPushButton { + border: none; + background: transparent; + border-radius: 4px; + } + QPushButton:hover { + background-color: rgba(150, 150, 150, 60); + } + """ + + def create_button(icon_path, tooltip): + btn = QPushButton() + btn.setIcon(QIcon(icon_path)) + btn.setIconSize(icon_size) + btn.setToolTip(tooltip) + btn.setFixedSize(32, 32) + btn.setCursor(QCursor(Qt.PointingHandCursor)) + btn.setStyleSheet(button_qss) + btn.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + return btn + + def add_separator(): + sep = QFrame() + sep.setFrameShape(QFrame.VLine) + sep.setFrameShadow(QFrame.Plain) + sep.setFixedHeight(32) + sep.setStyleSheet(""" + QFrame { + color: #999999; + margin-left: 10px; + margin-right: 10px; + } + """) + return sep + + # ---- Buttons ---- + # Zoom group + self.layout.addWidget(create_button(":/vectors/tool_bar/zoom_fit_light.svg", "Zoom Fit")) + self.layout.addWidget(create_button(":/vectors/tool_bar/zoom_window_light.svg", "Zoom Window")) + self.layout.addWidget(create_button(":/vectors/tool_bar/zoom_in_light.svg", "Zoom In")) + self.layout.addWidget(create_button(":/vectors/tool_bar/zoom_out_light.svg", "Zoom Out")) + + self.layout.addWidget(add_separator()) # after zoom + + # Navigation group + self.layout.addWidget(create_button(":/vectors/tool_bar/pan_light.svg", "Pan")) + self.layout.addWidget(create_button(":/vectors/tool_bar/rotate_light.svg", "Rotate")) + + self.layout.addWidget(add_separator()) # after rotate + + # Node group + self.layout.addWidget(create_button(":/vectors/tool_bar/node_light.svg", "Node")) + self.layout.addWidget(create_button(":/vectors/tool_bar/node_element_light.svg", "Node Element")) + + self.layout.addWidget(add_separator()) # after node element + + # Model display group + self.layout.addWidget(create_button(":/vectors/tool_bar/grillage_view_light.svg", "Grillage View")) + self.layout.addWidget(create_button(":/vectors/tool_bar/show_contour_light.svg", "Contour Plot")) + self.layout.addWidget(create_button(":/vectors/tool_bar/show_axis_light.svg", "Axis")) + self.layout.addWidget(create_button(":/vectors/tool_bar/show_grid_lines_light.svg", "Grid Lines")) + self.layout.addWidget(create_button(":/vectors/tool_bar/show_support_light.svg", "Supports")) + self.layout.addWidget(create_button(":/vectors/tool_bar/show_load_light.svg", "Loads")) + + self.layout.addWidget(add_separator()) # after load + + # Scale + scale_label = QLabel("Scale:") + scale_spin = QSpinBox() + scale_spin.setRange(1, 1000) + scale_spin.setValue(100) + scale_spin.setFixedWidth(70) + scale_spin.setStyleSheet(""" + QSpinBox { + border: 1px solid #aaa; + border-radius: 4px; + padding-right: 10px; /* space for BOTH buttons */ + background: #f8f8f8; + } + + QSpinBox:hover { + border: 1px solid #888; + background: #ffffff; + } + + QSpinBox:focus { + border: 1px solid #555; + background: #ffffff; + } + + /* UP BUTTON (right-top → shifted left) */ + QSpinBox::up-button { + subcontrol-origin: border; + subcontrol-position: top right; + width: 15px; + right: 18px; /* move LEFT */ + height: 20px; + border: none; + background: transparent; + } + + /* DOWN BUTTON (right-most) */ + QSpinBox::down-button { + subcontrol-origin: border; + subcontrol-position: top right; + width: 15px; + right: 3px; + height: 20px; + border: none; + background: transparent; + } + + QSpinBox::up-arrow { + image: url(:/vectors/arrow_up_light.svg); + width: 15px; + height: 15px; + } + + QSpinBox::down-arrow { + image: url(:/vectors/arrow_down_light.svg); + width: 15px; + height: 15px; + } + + QSpinBox::up-button:hover, + QSpinBox::down-button:hover { + background: rgba(150,150,150,60); + border-radius: 3px; + } + """) + + self.layout.addWidget(scale_label) + self.layout.addWidget(scale_spin) + + self.layout.addStretch() + + container.setLayout(self.layout) + self.scroll_area.setWidget(container) + + main_layout.addWidget(self.scroll_area) + #---------Standalone-Testing------------------------------------ import sys From d4d9223a081db2c8e3406e756abc4e9d5c6b0e15 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Thu, 16 Apr 2026 12:58:59 +0530 Subject: [PATCH 151/225] Fix ospgrillage API compatibility and wire designer into design pipeline --- .../bridge_types/plate_girder/designer.py | 233 ++++++++++++++++-- .../core/bridge_types/plate_girder/dto.py | 1 + .../plate_girder/plategirderbridge.py | 20 +- 3 files changed, 225 insertions(+), 29 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index 9cbcd9605..9717e268f 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -44,7 +44,10 @@ import os from dataclasses import dataclass, field from datetime import datetime -from typing import Dict, List, Optional +from typing import Dict, List, Optional, Any + +# Import for dynamic demand extraction +from osdagbridge.core.bridge_types.plate_girder.analysis_results import PlateGirderAnalysisResults # ====================================================================== @@ -249,6 +252,69 @@ class BridgeConfig: studs: ShearStudConfig = field(default_factory=ShearStudConfig) fatigue: FatigueConfig = field(default_factory=FatigueConfig) + @classmethod + def from_plate_girder_bridge(cls, bridge: Any) -> BridgeConfig: + """Extract BridgeConfig from a PlateGirderBridge instance.""" + from osdagbridge.core.utils.common import KEY_GIRDER, KEY_DECK_CONCRETE_GRADE_BASIC, KEY_DECK_THICKNESS + + # Ensure material/section props exist + if not hasattr(bridge, 'material_props') or not bridge.material_props: + bridge.material_props = bridge._build_material_props() + if not hasattr(bridge, 'section_props') or not bridge.section_props: + bridge.section_props = bridge._girder_section() + + sp = bridge.material_props.steel_prop + cp = bridge.material_props.concrete_prop + + # fu lookup handling + fu_val = sp.Fu / 1_000_000 if sp.Fu else (sp.Fy / 1_000_000 * 1.5) + + material = SteelProperties( + fy=sp.Fy / 1_000_000, + fu=fu_val, + Es=sp.E / 1_000_000, + fck=cp.fck, + fctm=cp.fctm, + Ecm=cp.Ecm * 1000, + steel_grade=str(bridge.basic_inputs.get(KEY_GIRDER, "")), + concrete_grade=str(bridge.basic_inputs.get(KEY_DECK_CONCRETE_GRADE_BASIC, "")) + ) + + props = bridge.section_props + section = SteelSection( + D=props["D"] * 1000, + bf_top=props["B_top"] * 1000, + tf_top=props["t_f_top"] * 1000, + bf_bot=props["B_bot"] * 1000, + tf_bot=props["t_f_bot"] * 1000, + tw=props["t_w"] * 1000, + ) + + geom = getattr(bridge, 'grillage_geometry', None) + deck = getattr(bridge, 'deck_layout', None) + sizing = getattr(bridge, 'sizing_result', None) + + from osdagbridge.core.utils.common import KEY_SPAN, KEY_CARRIAGEWAY_WIDTH + + span_L = geom.L if geom else float(bridge.basic_inputs.get(KEY_SPAN, 33.5)) + spacing = geom.ext_to_int_dist if geom else (sizing.girder_spacing if sizing else 2.2775) + edges = geom.edge_dist if geom else (sizing.deck_overhang if sizing else 1.05) + n_g = geom.n_l if geom else (sizing.no_of_girders if sizing else 7) + cw = deck.carriageway_width if deck else float(bridge.basic_inputs.get(KEY_CARRIAGEWAY_WIDTH, 10.0)) + + geometry = GeometryConfig( + span=span_L, + beam_spacing=spacing, + carriageway_width=cw, + n_girders=n_g, + edge_distance=edges, + ) + + thickness_val = float(bridge.basic_inputs.get(KEY_DECK_THICKNESS, 250.0)) + slab = SlabProperties(thickness=thickness_val) + + return cls(material=material, section=section, geometry=geometry, slab=slab) + @classmethod def example_33m_bridge(cls) -> "BridgeConfig": """ @@ -306,6 +372,7 @@ class DemandEnvelope: Mu_kNm: float = 0.0 Vu_kN: float = 0.0 Nu_kN: float = 0.0 + M_construction_kNm: float = 0.0 # -- SLS demands -- delta_live_mm: float = 0.0 @@ -337,6 +404,7 @@ def from_manual( Mu_kNm: float, Vu_kN: float, Nu_kN: float = 0.0, + M_construction_kNm: float = 0.0, delta_live_mm: float = 0.0, delta_total_mm: float = 0.0, stress_range_MPa: float = 0.0, @@ -348,13 +416,81 @@ def from_manual( ) -> DemandEnvelope: """Create demand envelope from user-supplied values.""" return DemandEnvelope( - Mu_kNm=Mu_kNm, Vu_kN=Vu_kN, Nu_kN=Nu_kN, + Mu_kNm=Mu_kNm, Vu_kN=Vu_kN, Nu_kN=Nu_kN, M_construction_kNm=M_construction_kNm, delta_live_mm=delta_live_mm, delta_total_mm=delta_total_mm, stress_range_MPa=stress_range_MPa, shear_range_MPa=shear_range_MPa, Nsc=Nsc, governing_combination=combination, location=location, member=member, source="manual", ) + @staticmethod + def from_analysis_results( + results: PlateGirderAnalysisResults, + element_ids: list[int], + delta_live_mm: float = 28.0, + delta_total_mm: float = 38.0, + stress_range_MPa: float = 55.0, + shear_range_MPa: float = 30.0, + Nsc: int = 2_000_000, + member_name: str = "interior_longitudinal_beam" + ) -> DemandEnvelope: + """ + Extract max factored forces directly from analysis results dataset for given elements. + """ + # Convert dataset variables N -> kN, Nm -> kNm (divide by 1000) + max_mz = 0.0 + max_vy = 0.0 + construction_mz = 0.0 + + # Loadcase names relevant to construction stage + c_cases = ["girder self weight", "deck slab load", "girder_self_weight", "deck_slab_load", "steel", "wet_concrete"] + + for lc in results.get_available_loadcases(): + try: + # Force arrays for the elements + mz_vals = results.ds.sel(Loadcase=lc, Element=element_ids, Component=["Mz_i", "Mz_j"])["forces"].values + vy_vals = results.ds.sel(Loadcase=lc, Element=element_ids, Component=["Vy_i", "Vy_j"])["forces"].values + + # Check maximum absolute magnitude for the loadcase across all elements/nodes + mz_abs_max = abs(mz_vals).max() + vy_abs_max = abs(vy_vals).max() + + if mz_abs_max > max_mz: + max_mz = mz_abs_max + if vy_abs_max > max_vy: + max_vy = vy_abs_max + + lc_str = str(lc).lower() + if any(c in lc_str for c in c_cases): + # For construction moment, we safely envelope the absolute maxima for those specific cases + construction_mz += mz_abs_max + except KeyError: + continue + + Mu_kNm = max_mz / 1000.0 + Vu_kN = max_vy / 1000.0 + + M_const_kNm = (construction_mz * 1.35) / 1000.0 + # Fallback if no construction cases identified, use 25% of composite moment + if M_const_kNm == 0: + M_const_kNm = Mu_kNm * 0.25 + + return DemandEnvelope( + Mu_kNm=round(Mu_kNm, 2), + Vu_kN=round(Vu_kN, 2), + Nu_kN=0.0, + M_construction_kNm=round(M_const_kNm, 2), + delta_live_mm=delta_live_mm, + delta_total_mm=delta_total_mm, + stress_range_MPa=stress_range_MPa, + shear_range_MPa=shear_range_MPa, + Nsc=Nsc, + governing_combination="Max Extracted (All LCs)", + location="critical element", + member=member_name, + source="grillage_analysis" + ) + @staticmethod def apply_load_factors( M_dead_kNm: float, @@ -639,7 +775,9 @@ def compute_buckling_resistance(self, beff_mm: float) -> dict: mat = self.mat fy, Es = mat.fy, mat.Es G = Es / (2.0 * (1.0 + 0.3)) - LLT_mm = self.geo.span * 1000.0 + # In reality, temporary or permanent cross-bracings are installed at 4m to 6m intervals. + # We clamp the unbraced length LLT to 6000 mm for accurate construction stage evaluation. + LLT_mm = min(self.geo.span * 1000.0, 6000.0) It = (sec.bf_top * sec.tf_top ** 3 + sec.dw * sec.tw ** 3 @@ -1025,7 +1163,7 @@ def run_all_checks(self) -> List[CheckResult]: note=f"beta={c.beta_interaction:.4f}") self._add_check(4, "LTB (Construction Stage)", "Cl.603.3.3.1", - d.Mu_kNm, c.Mb_kNm, "kNm", + d.M_construction_kNm if d.M_construction_kNm > 0 else d.Mu_kNm, c.Mb_kNm, "kNm", note=f"lambda_LT={c.lambda_LT:.4f}, chi_LT={c.chi_LT:.4f}") if d.delta_live_mm > 0: @@ -1296,17 +1434,6 @@ def save(self, filepath: str) -> str: def _example_demands(config: BridgeConfig) -> DemandEnvelope: """ Realistic factored demand values for the 33.5 m bridge. - - Dead Load Components (per girder): - Steel self-weight : ~3 kN/m - Deck slab : 25 kN/m3 x t_slab x beam_spacing - SDL (wearing, rail): distributed - - Live Load (IRC Class 70R + Class A): - M_LL ~ 1,800 kNm, V_LL ~ 350 kN (per interior girder) - - Factored (ULS Comb I): - gamma_DL = 1.35, gamma_LL = 1.50, Impact Factor = 1.10 """ L = config.geometry.span A_steel_m2 = config.section.A_steel * 1e-6 @@ -1317,6 +1444,11 @@ def _example_demands(config: BridgeConfig) -> DemandEnvelope: M_dl = w_total_dl * L ** 2 / 8.0 V_dl = w_total_dl * L / 2.0 + + # Construction moment: steel weight + wet concrete only + w_construction = w_sw + w_slab + M_construction = 1.35 * w_construction * L ** 2 / 8.0 + M_ll, V_ll = 1800.0, 350.0 gamma_dl, gamma_ll, impact = 1.35, 1.50, 1.10 @@ -1325,6 +1457,7 @@ def _example_demands(config: BridgeConfig) -> DemandEnvelope: return DemandExtractor.from_manual( Mu_kNm=round(Mu, 2), Vu_kN=round(Vu, 2), + M_construction_kNm=round(M_construction, 2), delta_live_mm=28.0, delta_total_mm=38.0, stress_range_MPa=config.fatigue.stress_range, shear_range_MPa=config.fatigue.shear_range, @@ -1334,12 +1467,60 @@ def _example_demands(config: BridgeConfig) -> DemandEnvelope: member="interior_longitudinal_beam", ) +def _extract_demands_from_analysis(analysis_results: PlateGirderAnalysisResults) -> DemandEnvelope: + """ + Extract demands from a full Grillage Analysis dynamically. + """ + # Get interior girders first + girders, _ = analysis_results.build_girders(verbose=False) + interior_g_name = None + + # 1. First try to find a named interior girder + for g_name in girders: + if "interior" in g_name.lower(): + interior_g_name = g_name + break + + # 2. If no explicit "interior" name, fall back to GrillageModel element member search + if interior_g_name is None: + try: + interior_elements = analysis_results.bridge.model.get_element(member="interior_main_beam", options="elements") + # Create a fallback envelope directly + if interior_elements: + return DemandExtractor.from_analysis_results( + results=analysis_results, + element_ids=interior_elements, + member_name="interior_main_beam" + ) + except Exception: + pass + + # 3. Use the elements from the found interior girder in the girder map + if interior_g_name is not None and "elements" in girders[interior_g_name]: + elements = list(girders[interior_g_name]["elements"]) + return DemandExtractor.from_analysis_results( + results=analysis_results, + element_ids=elements, + member_name=interior_g_name + ) + + print("WARNING: Could not identify interior girder. Using first available girder.") + first_g_name = list(girders.keys())[0] if girders else None + if first_g_name: + return DemandExtractor.from_analysis_results( + results=analysis_results, + element_ids=list(girders[first_g_name]["elements"]), + member_name=first_g_name + ) + + raise ValueError("Could not extract demand. No interior girder or any girder elements found.") + def run_design_check( + plate_girder_bridge: Any | None = None, + analysis_results: PlateGirderAnalysisResults | None = None, config: BridgeConfig | None = None, demand: DemandEnvelope | None = None, - save_report: bool = True, - report_path: str = "design_check_report.txt", print_report: bool = True, ) -> str: """ @@ -1355,10 +1536,10 @@ def run_design_check( Parameters ---------- + plate_girder_bridge : Solved PlateGirderBridge instance overriding config + analysis_results : Solved PlateGirderAnalysisResults instance config : BridgeConfig (default: 33.5 m example bridge) demand : DemandEnvelope (default: example demands) - save_report : save .txt report file - report_path : output file path print_report : print report to console """ print("=" * 60) @@ -1367,13 +1548,17 @@ def run_design_check( # -- Step 1: Configuration -- print("\n[Step 1/5] Loading bridge configuration ...") - if config is None: + if plate_girder_bridge is not None: + config = BridgeConfig.from_plate_girder_bridge(plate_girder_bridge) + elif config is None: config = BridgeConfig.example_33m_bridge() print(f" Config: {config.summary()}") # -- Step 2: Demand from Analyser -- print("\n[Step 2/5] Extracting design demands (Analyser) ...") - if demand is None: + if demand is None and analysis_results is not None: + demand = _extract_demands_from_analysis(analysis_results) + elif demand is None: demand = _example_demands(config) print(f" Mu = {demand.Mu_kNm:.2f} kNm") print(f" Vu = {demand.Vu_kN:.2f} kN") @@ -1405,12 +1590,6 @@ def run_design_check( if print_report: print("\n" + report_text) - if save_report: - base_dir = os.path.dirname(os.path.abspath(__file__)) - full_path = os.path.join(base_dir, report_path) - saved = reporter.save(full_path) - print(f"\n Report saved to: {saved}") - print("\n" + "=" * 60) print(f" PIPELINE COMPLETE - Overall: {engine.overall_status()}") print("=" * 60) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/dto.py b/src/osdagbridge/core/bridge_types/plate_girder/dto.py index a8731d31a..0836e26d1 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/dto.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/dto.py @@ -116,6 +116,7 @@ class SteelProperties: v: float rho: float Fy: Optional[float] = None + Fu: Optional[float] = None E0: Optional[float] = None b: Optional[float] = None diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index a00b25769..c7901a8a0 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -145,7 +145,7 @@ def design(self) -> None: self.setup_grillage() self.add_dead_loads() self.add_live_loads() - self.analyze() + dataset = self.analyze() print( f"[PlateGirderBridge.design] " @@ -156,6 +156,18 @@ def design(self) -> None: f"girder_depth={self.section_props['D']:.3f} m" ) + # Automatically run structural capacity pipeline after analysis completes + from .analysis_results import PlateGirderAnalysisResults + from .designer import run_design_check + + results = PlateGirderAnalysisResults(dataset=dataset, bridge=self.grillage_model) + + run_design_check( + plate_girder_bridge=self, + analysis_results=results, + print_report=True, + ) + def _parse_basic_inputs(self) -> dict: """Extract and normalise scalar values from ``self.basic_inputs``.""" span = self._to_float(KEY_SPAN, DEFAULT_SPAN_M) @@ -309,6 +321,8 @@ def _lookup_material(self, material_name: str, property: str) -> float: return float(row[0]) * N / m ** 3 elif property == "Yield Strength": # Yield strength (Pa) return float(row[0]) * MPa # DB stores MPa as integer → convert to Pa + elif property == "Ultimate Tensile Strength": + return float(row[0]) * MPa elif property in ("fck", "fctm", "Ecm"): # Concrete properties (MPa or GPa depending on property) return float(row[0]) else: @@ -326,13 +340,15 @@ def _build_material_props(self) -> MaterialProperties: v = self._lookup_material(steel_grade, "Poisson's Ratio") rho = self._lookup_material(steel_grade, "Density") fy = self._lookup_material(steel_grade, "Yield Strength") - # print(f"grade: {steel_grade}, e: {e}, v: {v}, rho: {rho}, fy: {fy}") + fu = self._lookup_material(steel_grade, "Ultimate Tensile Strength") + # print(f"grade: {steel_grade}, e: {e}, v: {v}, rho: {rho}, fy: {fy}, fu: {fu}") steel_prop = SteelProperties( grade=steel_grade, E=e, v=v, rho=rho, Fy=fy, + Fu=fu, E0=_STEEL_E0, b=_STEEL_B, ) From 9aabf5c453ed5e66b232f8d7fa476b668e924c53 Mon Sep 17 00:00:00 2001 From: VT <75622110+VT69@users.noreply.github.com> Date: Fri, 17 Apr 2026 06:56:18 +0530 Subject: [PATCH 152/225] feat: steel design analysis results tab with graph engine added GirderGraphEngine refactored SteelDesignAnalysisTab Added PlateGirdeBridge.get_result_handler() --- .../bridge_types/plate_girder/graph_engine.py | 1868 +++++++++++++++++ .../plate_girder/plategirderbridge.py | 111 + .../desktop/ui/dialogs/girder_2d_plots.py | 524 +++++ .../desktop/ui/dialogs/steel_design.py | 847 +++++++- .../ui/dialogs/tabs/steel_design_analysis.py | 572 +++-- .../ui/dialogs/tabs/steel_design_check.py | 96 +- .../ui/dialogs/tabs/steel_design_details.py | 157 +- 7 files changed, 3907 insertions(+), 268 deletions(-) create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py create mode 100644 src/osdagbridge/desktop/ui/dialogs/girder_2d_plots.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py b/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py new file mode 100644 index 000000000..25f52698d --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py @@ -0,0 +1,1868 @@ +""" +GirderGraphEngine — Data extraction and matplotlib rendering engine for the Steel Design dialog. + +Architecture +------------ +This module is the single source of truth for all structural data computation and +visualisation logic. It enforces a strict UI ↔ engine boundary: + + SteelDesign (PySide6 dialog) + │ injects a ready PlateGirderAnalysisResults instance at construction + ▼ + GirderGraphEngine (this module) + │ + ├── _DataAdapter (inner layer, private) + │ calls _get_*_df() methods on the injected handler + │ returns plain pandas DataFrames or None + │ all future query() migration happens HERE and nowhere else + │ + ├── _ArrayBuilder (inner layer, private) + │ converts DataFrames → numpy arrays + │ applies nodal smoothing + │ builds x-coordinate arrays + │ + └── Rendering layer (public) + draws on four matplotlib axes + calls canvas.draw() + knows nothing about DataFrames, numpy shapes, or xarray + ▼ + FigureCanvasQTAgg (owned by dialog, never imported here) + +Key design decisions +-------------------- +- Zero PySide6 imports. Only ``matplotlib``, ``numpy``, and + ``PlateGirderAnalysisResults`` (data source). +- No model access, no xarray, no openseespy, no ospgrillage. +- The sole data source is PlateGirderAnalysisResults._get_*_df() methods, + wrapped inside _DataAdapter._call_*() methods. +- When query() migration is instructed, only _call_*() bodies change. +""" + +from __future__ import annotations + +import logging +from typing import Optional + +import numpy as np + +from osdagbridge.core.bridge_types.plate_girder.analysis_results import ( + PlateGirderAnalysisResults, +) + +# ============================================================================= +# PENDING API — items required from analysis_results.py +# ============================================================================= +# +# The engine is intentionally blocked from extracting these values on its own. +# Each item below is a specific change request for the analysis_results.py +# maintainer. When implemented, replace the corresponding stub in the +# _DataAdapter section of this file. +# +# [PENDING-1] DISPLACEMENTS +# Needed: _get_displacements_df(load_case, girder_name, component) +# Columns: Node (int), (mm) — one row per node +# Impact: Deflection panel renders blank until this exists. +# show_blank_state() is called with the message defined in +# _MSG_DEFL_UNAVAILABLE at the top of this file. +# +# [PENDING-2] NODE COORDINATES +# Needed: _get_girder_paths_df() to include per-node x-coordinates, +# OR a new _get_node_coords_df(girder_name) returning +# columns: Node (int), X (m), Y (m), Z (m) +# Impact: x-axis array is currently approximated as +# np.linspace(0, length, n_nodes). On skewed or non-uniform +# meshes this is geometrically incorrect. +# +# [PENDING-3] GIRDER SELF-WEIGHT EXTRACTION +# Needed: _get_girder_sw_df() to accept (load_case_name) instead of +# (girder_map, nodes) so it can be called without model access. +# Impact: Girder self-weight panel is skipped entirely. +# +# MIGRATION NOTE +# When the mentor instructs, replace every _DataAdapter._call_*() method +# body with the equivalent result_handler.query(category, **kwargs) call. +# No other part of this file changes. +# +# ============================================================================= + + +# ============================================================================= +# MODULE-LEVEL CONSTANTS AND CONFIGURATION +# ============================================================================= + +logger = logging.getLogger(__name__) + +# Set to True during development to log extracted array shapes and values. +_DEBUG_EXTRACTION: bool = False + +# Message displayed in the deflection panel while PENDING-1 is unresolved. +_MSG_DEFL_UNAVAILABLE: str = ( + "Deflection unavailable — see PENDING-1 in graph_engine.py" +) + +# Visual style palette — all rendering methods read from this dict exclusively. +# No hex strings or magic numbers may appear inside any method. +_STYLE: dict = { + "line_color": "#4C72B0", + "bmd_line_color": "#FF0000", + "sfd_line_color": "#0000FF", + "line_width": 1.5, + "fill_alpha": 0.25, + "deflection_line_color": "#000000", + "zero_line_color": "#B0BEC5", + "zero_line_width": 1.0, + "grid_color": "#bfbfbf", + "grid_width": 0.5, + "cursor_color": "#1f4e79", + "cursor_width": 1.5, + "support_color": "#90A4AE", + "support_width": 3.0, + "label_color": "#2B2B2B", + "label_fontsize": 10, + "title_fontsize": 11, + "diagram_label_fontsize": 9, # matches visual weight of 11px UI labels at matplotlib dpi + "spine_color": "#cccccc", + "spine_width": 0.8, + "reaction_fontsize": 9, + "scale_fontsize": 8, + "load_arrow_color": "#2B2B2B", # dark — contrasts against green UDL fill + "load_arrow_lw": 1.5, + "load_fill_color": "#90AF13", # Osdag green — matches app primary accent + "load_fill_alpha": 0.40, # slightly more opaque so green reads well + "point_load_arrow_color": "#000000", # stays black — intentional + "fontfamily": "sans-serif", +} + + +# ============================================================================= +# RENDERING AND DATA ENGINE +# ============================================================================= + +class GirderGraphEngine: + """ + Combined data-extraction and rendering engine for the four-panel girder figure. + + The engine is structured as three clearly delineated internal layers: + + 1. **_DataAdapter** — wraps every ``_get_*_df()`` call in a ``_call_*()`` + method. This is the only layer that will change when ``query()`` + migration is instructed. + + 2. **_ArrayBuilder** — converts DataFrames into numpy arrays, applies + nodal smoothing, and builds x-coordinate arrays. + + 3. **Rendering layer** — draws on the four matplotlib axes. It calls + ``canvas.draw()`` and knows nothing about DataFrames or numpy shapes. + + Parameters + ---------- + figure : matplotlib.figure.Figure + Shared matplotlib Figure owned by the dialog. + ax_scheme : Axes + Top panel: girder support schematic. + ax_bmd : Axes + Bending moment diagram. + ax_sfd : Axes + Shear force diagram. + ax_defl : Axes + Deflection diagram (y-axis inverted). + result_handler : PlateGirderAnalysisResults + The sole data source. Must not be None. + """ + + def __init__( + self, + figure, + ax_scheme, + ax_bmd, + ax_sfd, + ax_defl, + result_handler: Optional[PlateGirderAnalysisResults] = None, + ) -> None: + """ + Initialise the engine with four matplotlib axes and a result handler. + + Parameters + ---------- + figure : matplotlib.figure.Figure + Matplotlib Figure shared with the dialog. + ax_scheme : Axes + Top panel: girder support schematic. + ax_bmd : Axes + Bending moment diagram. + ax_sfd : Axes + Shear force diagram. + ax_defl : Axes + Deflection diagram (y-axis inverted). + result_handler : PlateGirderAnalysisResults + Sole data source; never None. + """ + self.figure = figure # matplotlib Figure shared with the dialog + self.ax_scheme = ax_scheme # top panel: girder support schematic + self.ax_bmd = ax_bmd # bending moment diagram + self.ax_sfd = ax_sfd # shear force diagram + self.ax_defl = ax_defl # deflection diagram (y-axis inverted) + + self._result_handler = result_handler # sole data source; None only before injection + self._cursor_lines: list = [] # active Line2D cursor overlays; cleared before each redraw + + # ========================================================================= + # _DataAdapter — THE MIGRATION BOUNDARY + # + # All _get_*_df() calls live here. Each method wraps exactly one + # _get_*_df() call. All future query() migration touches only these + # bodies — nothing else in this file changes. + # + # Contract: return pd.DataFrame | None. + # None means data is unavailable — never an empty DataFrame, + # never a partial result. + # ========================================================================= + + def _require_handler(self, caller: str) -> bool: + """Return True if result_handler is ready; log and return False otherwise.""" + if self._result_handler is None: + logger.warning( + "%s: result_handler is None — inject PlateGirderAnalysisResults " + "before calling data methods.", caller + ) + return False + return True + + def _call_girder_paths(self, girder: Optional[str] = None): + """ + Fetch the girder path table from the result handler. + + Parameters + ---------- + girder : str, optional + If given, return only the row for this girder name. + If None, return all girders. + + Returns + ------- + pd.DataFrame or None + Columns: Girder, Start, End, Length, Nodes. + ``None`` if the call fails or the result is empty. + + Notes + ----- + Calls ``_result_handler._get_girder_paths_df(girder_filter=girder)``. + Replace body with ``result_handler.query('girder_paths', girder=girder)`` + on migration. + """ + try: + if not self._require_handler("_call_girder_paths"): return None + df = self._result_handler._get_girder_paths_df(girder_filter=girder) + if df is None or df.empty: + logger.warning( + "_call_girder_paths(girder=%r) returned empty/None", girder + ) + return None + return df + except Exception as exc: + logger.warning( + "_call_girder_paths(girder=%r) failed: %s", girder, exc, + exc_info=True, + ) + return None + + def _call_node_coords(self, girder: str): + """ + Fetch per-node coordinates for a girder. + + Parameters + ---------- + girder : str + Girder identifier, e.g. ``"G1"``. + + Returns + ------- + pd.DataFrame or None + Columns: Node (int), X (m), Y (m), Z (m). + ``None`` if the call fails or the result is empty. + """ + try: + if not self._require_handler("_call_node_coords"): return None + df = self._result_handler._get_node_coords_df(girder) + if df is None or df.empty: + logger.warning( + "_call_node_coords(girder=%r) returned empty/None", girder + ) + return None + return df + except Exception as exc: + logger.warning( + "_call_node_coords(girder=%r) failed: %s", girder, exc, + exc_info=True, + ) + return None + + def _call_forces(self, load_case: str, girder: str, component: str): + """ + Fetch element-wise force/moment values for one load case and one girder. + + Parameters + ---------- + load_case : str + Load case name as stored in the dataset. + girder : str + Girder identifier, e.g. ``"G1"``. + component : str + Force component, e.g. ``"Vy_i"`` or ``"Mz_j"``. + + Returns + ------- + pd.DataFrame or None + Columns: Element, `` (kN)`` or `` (kNm)``. + One row per element. + ``None`` if the call fails or the result is empty. + + Notes + ----- + Calls ``_result_handler._get_forces_df(load_case, girder, component)``. + Replace body with + ``result_handler.query('forces', name=load_case, girder=girder, component=component)`` + on migration. + """ + try: + if not self._require_handler("_call_forces"): return None + df = self._result_handler._get_forces_df(load_case, girder, component) + if df is None or df.empty: + logger.warning( + "_call_forces(lc=%r, girder=%r, comp=%r) returned empty/None", + load_case, girder, component, + ) + return None + return df + except Exception as exc: + logger.warning( + "_call_forces(lc=%r, girder=%r, comp=%r) failed: %s", + load_case, girder, component, exc, + exc_info=True, + ) + return None + + def _call_reactions(self, load_case: str, girder: Optional[str] = None): + """ + Fetch support reactions (Ra, Rb) for a load case. + + Parameters + ---------- + load_case : str + Load case name as stored in the dataset. + girder : str, optional + Filter to a specific girder. If None, returns all girders. + + Returns + ------- + pd.DataFrame or None + Columns: Girder, Ra (kN), Rb (kN). + ``None`` if the call fails or the result is empty. + + Notes + ----- + Calls ``_result_handler._get_reactions_df(load_case, girder_filter=girder)``. + Replace body with + ``result_handler.query('reactions', name=load_case, girder=girder)`` + on migration. + """ + try: + if not self._require_handler("_call_reactions"): return None + df = self._result_handler._get_reactions_df(load_case, girder_filter=girder) + if df is None or df.empty: + logger.warning( + "_call_reactions(lc=%r, girder=%r) returned empty/None", + load_case, girder, + ) + return None + return df + except Exception as exc: + logger.warning( + "_call_reactions(lc=%r, girder=%r) failed: %s", + load_case, girder, exc, + exc_info=True, + ) + return None + + def _call_loads(self, load_case: str) -> list[dict]: + """ + Fetch load descriptors for scheme overlay directly from the bridge object. + Tries multiple attribute conventions used by ospgrillage load-case objects. + """ + try: + if not self._require_handler("_call_loads"): + return [] + + bridge = getattr(self._result_handler, "bridge", None) + if not bridge: + return [] + + # ── Locate the load-case object ─────────────────────────────────── + lc_obj = None + + # 1) vehicle_load_cases_list + for lc in getattr(bridge, "vehicle_load_cases_list", []): + if getattr(lc, "name", "") == load_case: + lc_obj = lc + break + + # 2) Any *_load_case attribute on the bridge + if lc_obj is None: + lc_lower = load_case.lower() + for attr in dir(bridge): + if not attr.endswith("_load_case"): + continue + val = getattr(bridge, attr, None) + if val is None: + continue + name_match = getattr(val, "name", "") == load_case + sw_match = lc_lower in ("girder self weight", "self weight") \ + and attr == "self_weight_load_case" + if name_match or sw_match: + lc_obj = val + break + + # 3) Generic load_case_list + if lc_obj is None: + for lc in getattr(bridge, "load_case_list", []): + if getattr(lc, "name", "") == load_case: + lc_obj = lc + break + + if lc_obj is None: + logger.debug("_call_loads: load case %r not found on bridge", load_case) + return [] + + # ── Resolve load-group iterable (load_groups or loads) ──────────── + raw_groups = getattr(lc_obj, "load_groups", None) + if not raw_groups: + raw_groups = getattr(lc_obj, "loads", None) + if not raw_groups: + logger.debug("_call_loads: lc_obj %r has no load_groups/loads", lc_obj) + return [] + + # ── Parse each load group ───────────────────────────────────────── + def _px(p): + """Return x-coordinate of a load point using common attr names.""" + for a in ("x", "x_coord", "position"): + v = getattr(p, a, None) + if v is not None: + return float(v) + return None + + def _pp(p): + """Return load magnitude using common attr names.""" + for a in ("p", "load", "magnitude", "value", "force"): + v = getattr(p, a, None) + if v is not None: + return float(v) + return 0.0 + + loads_out = [] + for lg in raw_groups: + # Support both dict wrappers and direct load objects + load = lg.get("load", lg) if isinstance(lg, dict) else lg + cname = type(load).__name__.lower() + + # Collect defined point handles. + # ospgrillage stores points as load_point_1 … load_point_8; + # fall back to point1 … point4 for forward-compatibility. + pts = [] + for i in range(1, 9): + p = getattr(load, f"load_point_{i}", None) + if p is None: + p = getattr(load, f"point{i}", None) + if p is not None and _pp(p) != 0.0: + px = _px(p) + if px is not None: + pts.append((px, _pp(p))) + + if ("line" in cname or "udl" in cname or "uniform" in cname) and len(pts) >= 2: + x0, p0 = pts[0] + x1, _ = pts[1] + loads_out.append({ + "type": "line", + "x_start": min(x0, x1), + "x_end": max(x0, x1), + "val": abs(p0) , + }) + elif ("patch" in cname or "area" in cname) and len(pts) >= 4: + xs_pts = [p[0] for p in pts] + loads_out.append({ + "type": "line", + "x_start": min(xs_pts), + "x_end": max(xs_pts), + "val": abs(pts[0][1]), + }) + elif ("point" in cname or "nodal" in cname or "concentrated" in cname) and pts: + loads_out.append({"type": "point", "x": pts[0][0], "val": abs(pts[0][1])}) + elif hasattr(load, "compound_load_obj_list"): + gc = getattr(load, "global_coord", None) + gx = float(getattr(gc, "x", 0.0)) if gc else 0.0 + for sub in getattr(load, "compound_load_obj_list", []): + for i in range(1, 9): + p = getattr(sub, f"load_point_{i}", None) + if p is None: + p = getattr(sub, f"point{i}", None) + if p is not None and _pp(p) != 0.0: + px = _px(p) + if px is not None: + loads_out.append({ + "type": "point", + "x": gx + px, + "val": abs(_pp(p)), + }) + else: + # Last-resort: look for direct x_start/x_end or equivalent + x0 = getattr(load, "x_start", getattr(load, "start_x", None)) + x1 = getattr(load, "x_end", getattr(load, "end_x", None)) + w = getattr(load, "w", getattr(load, "load", getattr(load, "magnitude", None))) + if x0 is not None and x1 is not None: + loads_out.append({ + "type": "line", + "x_start": float(x0), + "x_end": float(x1), + "val": abs(float(w or 0)), + }) + + logger.debug("_call_loads: lc=%r → %d loads parsed", load_case, len(loads_out)) + return loads_out + + except Exception as exc: + logger.warning("_call_loads(lc=%r) failed: %s", load_case, exc, exc_info=True) + return [] + + + def _call_envelopes( + self, + lc_filter: Optional[str], + g_filter: Optional[str], + ): + """ + Fetch max/min envelope data for moving load cases. + + Parameters + ---------- + lc_filter : str or None + Substring filter applied to load-case names. + g_filter : str or None + Girder name filter. + + Returns + ------- + pd.DataFrame or None + Columns: LoadCase, Girder, Max Vy, Min Vy, Max Mz, Min Mz. + ``None`` if the call fails or the result is empty. + + Notes + ----- + Calls ``_result_handler._get_envelopes_df(lc_filter=lc_filter, g_filter=g_filter)``. + Replace body with + ``result_handler.query('envelopes', name=lc_filter, girder=g_filter)`` + on migration. + """ + try: + if not self._require_handler("_call_envelopes"): return None + df = self._result_handler._get_envelopes_df( + lc_filter=lc_filter, g_filter=g_filter + ) + if df is None or df.empty: + logger.warning( + "_call_envelopes(lc_filter=%r, g_filter=%r) returned empty/None", + lc_filter, g_filter, + ) + return None + return df + except Exception as exc: + logger.warning( + "_call_envelopes(lc_filter=%r, g_filter=%r) failed: %s", + lc_filter, g_filter, exc, + exc_info=True, + ) + return None + + def _call_moving_trace(self, category: str, girder: str, component: str): + """ + Fetch the moving load trace (force vs vehicle position) for a girder. + + Parameters + ---------- + category : str + Vehicle category name, e.g. ``"ClassA"``. + girder : str + Girder identifier, e.g. ``"G1"``. + component : str + Force component, e.g. ``"Mz_i"``. + + Returns + ------- + pd.DataFrame or None + Columns: X Pos, LoadCase, `` (kN/kNm)``. + ``None`` if the call fails or the result is empty. + + Notes + ----- + Calls ``_result_handler._get_moving_trace_df(category, girder, component)``. + Replace body with + ``result_handler.query('moving_trace', name=category, girder=girder, component=component)`` + on migration. + """ + try: + if not self._require_handler("_call_moving_trace"): return None + df = self._result_handler._get_moving_trace_df(category, girder, component) + if df is None or df.empty: + logger.warning( + "_call_moving_trace(cat=%r, girder=%r, comp=%r) returned empty/None", + category, girder, component, + ) + return None + return df + except Exception as exc: + logger.warning( + "_call_moving_trace(cat=%r, girder=%r, comp=%r) failed: %s", + category, girder, component, exc, + exc_info=True, + ) + return None + + def _call_critical_state(self, category: str, component: str): + """ + Fetch the governing critical-state row for a vehicle category and component. + + Parameters + ---------- + category : str + Vehicle category name, e.g. ``"ClassA"``. + component : str + Force component, e.g. ``"Mz_i"``. + + Returns + ------- + pd.DataFrame or None + Columns: Category, Component, Max Value, LoadCase, Girder. + ``None`` if the call fails or the result is empty. + + Notes + ----- + Calls ``_result_handler._get_critical_state_df(category, component)``. + Replace body with + ``result_handler.query('critical_state', name=category, component=component)`` + on migration. + """ + try: + if not self._require_handler("_call_critical_state"): return None + df = self._result_handler._get_critical_state_df(category, component) + if df is None or df.empty: + logger.warning( + "_call_critical_state(cat=%r, comp=%r) returned empty/None", + category, component, + ) + return None + return df + except Exception as exc: + logger.warning( + "_call_critical_state(cat=%r, comp=%r) failed: %s", + category, component, exc, + exc_info=True, + ) + return None + + def _call_classify_loadcases(self) -> dict | None: + """ + Notes + ----- + Calls _result_handler.classify_loadcases() directly (public method). + Replace with result_handler.query('classified_loadcases') on migration + once that category is supported. + """ + try: + if not self._require_handler("_call_classify_loadcases"): + return None + return self._result_handler.classify_loadcases() + except Exception as exc: + logger.warning("_call_classify_loadcases() failed: %s", exc, exc_info=True) + return None + + def _call_displacements( + self, load_case: str, girder: str, component: str + ): + """ + Fetch per-node displacement values for a load case and girder. + + .. note:: + **PENDING-1**: ``_get_displacements_df()`` does not yet exist in + ``analysis_results.py``. This method always returns ``None`` and + logs ``_MSG_DEFL_UNAVAILABLE`` until PENDING-1 is resolved. + + Parameters + ---------- + load_case : str + Load case name. + girder : str + Girder identifier. + component : str + Displacement component, e.g. ``"dy"``. + + Returns + ------- + pd.DataFrame or None + Columns: Node (int), ```` (mm). + ``None`` if the call fails or the result is empty. + + Notes + ----- + Replace body with + ``result_handler.query('displacements', name=load_case, girder=girder, component=component)`` + on migration. + """ + try: + if not self._require_handler("_call_displacements"): return None + df = self._result_handler._get_displacements_df(load_case, girder, component) + if df is None or df.empty: + logger.warning( + "_call_displacements(lc=%r, girder=%r, comp=%r) returned empty/None", + load_case, girder, component, + ) + return None + return df + except Exception as exc: + logger.warning( + "_call_displacements(lc=%r, girder=%r, comp=%r) failed: %s", + load_case, girder, component, exc, + exc_info=True, + ) + return None + + # ========================================================================= + # _ArrayBuilder — DATAFRAME → NUMPY CONVERSION + # ========================================================================= + + @staticmethod + def _smooth_nodal( + v_i: list[float], + v_j: list[float], + ) -> np.ndarray: + """ + Assemble a nodal-smoothed force array from per-element i-node and j-node values. + + Parameters + ---------- + v_i : list of float + i-node force values, one per element, in the unit already converted + (kN or kNm). + v_j : list of float + j-node force values, one per element, in the same unit as ``v_i``. + + Returns + ------- + np.ndarray + Nodal array of length ``n_elements + 1``. + + Notes + ----- + **Beam sign convention** — In openseespy / ospgrillage the j-node force + is returned in the *element's local frame*, where equilibrium requires + ``Vy_j = -Vy_i`` for a simply supported beam with no intermediate + loads. To obtain a *global* diagram value at the j-end we negate the + stored j value: ``v_global_j = -v_j``. + + **Boundary conditions** — the first node value equals ``v_i[0]`` + exactly (no smoothing at the support); the last node value equals + ``-v_j[-1]`` exactly. Interior nodes are the arithmetic mean of the + incoming right face value (``-v_j[k-1]``) and the outgoing left face + value (``v_i[k]``). + + **Single-element edge case** — when there is only one element the + array contains exactly two values: ``[v_i[0], -v_j[0]]``. No + averaging is performed because there is no interior node. + """ + if not v_i: + return np.zeros(1, dtype=float) + + if len(v_i) == 1: + return np.array([v_i[0], -v_j[0]], dtype=float) + + nodal: list[float] = [] + + # Start boundary: first element i-node, no smoothing + nodal.append(v_i[0]) + + # Interior nodes: average of right face of previous element and left + # face of next element (both expressed in the global sense) + for k in range(1, len(v_i)): + v_left = -v_j[k - 1] # flip j-node to global sense + v_right = v_i[k] + nodal.append((v_left + v_right) / 2.0) + + # End boundary: last element j-node, flipped to global sense + nodal.append(-v_j[-1]) + + return np.array(nodal, dtype=float) + + def _build_x_array(self, girder: str, n_nodes: int) -> np.ndarray: + """ + Build the x-coordinate array for a girder span. + + Parameters + ---------- + girder : str + Girder identifier used to look up span length. + n_nodes : int + Number of nodes (elements + 1) along the girder. + + Returns + ------- + np.ndarray + Equispaced x-coordinates from 0 to span length, shape ``(n_nodes,)``. + + Notes + ----- + Uses ``_get_node_coords_df()`` to retrieve exact mesh coordinates. + Falls back to a linear approximation over the span structure length + if nodal coordinates cannot be resolved. + """ + df = self._call_node_coords(girder=girder) + if df is not None and not df.empty: + xs = df["X (m)"].to_numpy() + if len(xs) == n_nodes: + return xs + else: + logger.warning( + "_build_x_array: node count mismatch (%d vs %d); " + "falling back to linspace", + len(xs), n_nodes, + ) + + # Fallback to older length approximation + path_df = self._call_girder_paths(girder=girder) + if path_df is None or path_df.empty: + logger.warning( + "_build_x_array: could not fetch span for girder=%r; " + "falling back to unit span", + girder, + ) + return np.linspace(0.0, 1.0, max(n_nodes, 2)) + + length = float(path_df["Length"].iloc[0]) + return np.linspace(0.0, length, max(n_nodes, 2)) + + def _build_force_arrays( + self, + load_case: str, + girder: str, + bmd_key: str, + sfd_key: str, + ): + """ + Extract all six force components for a girder / load case and assemble + nodal arrays via ``_smooth_nodal()``. + + Parameters + ---------- + load_case : str + Load case name. + girder : str + Girder identifier. + bmd_key : str + Component key for the bending moment trace, e.g. ``"Mz_i"``. + sfd_key : str + Component key for the shear force trace, e.g. ``"Vy_i"``. + + Returns + ------- + tuple[np.ndarray, np.ndarray, np.ndarray, dict] or None + ``(xs, bmd_values, sfd_values, all_data)`` where: + + - ``xs`` is the x-coordinate array (m). + - ``bmd_values`` is the nodal BMD array (kNm). + - ``sfd_values`` is the nodal SFD array (kN). + - ``all_data`` maps component string keys (``"Mz_i"``, ``"Vy_i"``, + etc.) to their nodal arrays. + + Returns ``None`` if no force data could be retrieved. + + Notes + ----- + Each component requires two ``_call_forces()`` calls — one for the + ``_i`` component and one for the ``_j`` component — so that + ``_smooth_nodal()`` can average interior nodes correctly. + """ + _COMPONENTS = [ + ("Mz_i", "Mz_j", "kNm"), + ("My_i", "My_j", "kNm"), + ("Mx_i", "Mx_j", "kNm"), + ("Vy_i", "Vy_j", "kN"), + ("Vz_i", "Vz_j", "kN"), + ("Fx_i", "Fx_j", "kN"), + ] + + # ── Extract i-node and j-node DataFrames for all components ────────── + raw: dict[str, list[float]] = {} # key → list of per-element values + + n_elements: Optional[int] = None + + for ci, cj, _unit in _COMPONENTS: + for comp in (ci, cj): + df = self._call_forces(load_case, girder, comp) + if df is None: + raw[comp] = [] + continue + + # The value column is the second column (index 1) + value_col = df.columns[1] + values = df[value_col].tolist() + raw[comp] = [float(v) for v in values] + + if n_elements is None: + n_elements = len(values) + + if n_elements is None or n_elements == 0: + logger.warning( + "_build_force_arrays(lc=%r, girder=%r): " + "no element data retrieved; returning None", + load_case, girder, + ) + return None + + n_nodes = n_elements + 1 + xs = self._build_x_array(girder, n_nodes) + + # ── Build nodal arrays for each component pair ──────────────────────── + all_data: dict[str, np.ndarray] = {} + + for ci, cj, _unit in _COMPONENTS: + v_i = raw.get(ci, [0.0] * n_elements) + v_j = raw.get(cj, [0.0] * n_elements) + + if raw.get(cj) == [] and raw.get(ci): + logger.warning( + "_build_force_arrays: j-component %r returned None for lc=%r, girder=%r. " + "Diagram will be incorrect — inform analysis_results.py maintainer.", + cj, load_case, girder, + ) + + # Pad if shorter than expected (graceful degradation) + if len(v_i) < n_elements: + v_i = v_i + [0.0] * (n_elements - len(v_i)) + if len(v_j) < n_elements: + v_j = v_j + [0.0] * (n_elements - len(v_j)) + + nodal = self._smooth_nodal(v_i[:n_elements], v_j[:n_elements]) + + # Trim or pad to match xs length + if len(nodal) > len(xs): + nodal = nodal[: len(xs)] + elif len(nodal) < len(xs): + nodal = np.concatenate( + [nodal, np.zeros(len(xs) - len(nodal), dtype=float)] + ) + + all_data[ci] = np.nan_to_num(nodal) + + # ── Select the traces the caller requested ──────────────────────────── + bmd_values = all_data.get(bmd_key, np.zeros(len(xs))) + sfd_values = all_data.get(sfd_key, np.zeros(len(xs))) + + if _DEBUG_EXTRACTION: + np.set_printoptions(precision=3, suppress=True, linewidth=120) + sep = "-" * 70 + logger.debug( + "\n%s\n" + " EXTRACTED RESULTS | girder=%s | loadcase=%s\n" + "%s\n" + " x-coords (m) : %s\n" + " n_nodes : %d n_elements: %d\n" + "%s\n" + " Mz_i [kNm] (BMD) : %s\n" + " My_i [kNm] : %s\n" + " Mx_i [kNm] (tor.) : %s\n" + " Vy_i [kN] (SFD) : %s\n" + " Vz_i [kN] : %s\n" + " Fx_i [kN] (axial): %s\n" + "%s\n" + " → PLOTTING: bmd_key=%r sfd_key=%r\n" + " max(|BMD|) = %.3f kNm max(|SFD|) = %.3f kN\n" + "%s", + sep, girder, load_case, sep, + xs, len(xs), n_elements, sep, + all_data.get("Mz_i"), + all_data.get("My_i"), + all_data.get("Mx_i"), + all_data.get("Vy_i"), + all_data.get("Vz_i"), + all_data.get("Fx_i"), + sep, bmd_key, sfd_key, + float(np.max(np.abs(bmd_values))), + float(np.max(np.abs(sfd_values))), + sep, + ) + + return xs, bmd_values, sfd_values, all_data + + # ========================================================================= + # PUBLIC API — DATA QUERIES + # ========================================================================= + + def get_girder_keys(self) -> list[str]: + """ + Return the ordered list of girder identifier keys. + + Returns + ------- + list[str] + Girder names in traversal order, e.g. ``["EB1", "G1", "G2", "EB2"]``. + Empty list if girder path data is unavailable. + + Notes + ----- + Delegates to ``_call_girder_paths()``. Parses the ``Girder`` + column of the returned DataFrame. + """ + df = self._call_girder_paths() + if df is None: + return [] + return df["Girder"].tolist() + + def get_classified_loadcases(self) -> dict: + """ + Return load cases grouped by category. + + Returns + ------- + dict + Keys ``"dead"``, ``"vehicle_static"``, ``"vehicle_moving"``, + ``"all"``; each value is a ``list[str]``. + All entries are guaranteed to be plain Python ``str``. + Returns an empty structure if the result handler fails. + + Notes + ----- + Delegates directly to + :meth:`PlateGirderAnalysisResults.classify_loadcases`. + """ + empty: dict = { + "dead": [], "vehicle_static": [], "vehicle_moving": [], "all": [] + } + try: + raw = self._call_classify_loadcases() + if not raw: + return empty + return {k: [str(lc) for lc in v] for k, v in raw.items()} + except Exception as exc: + logger.error( + "get_classified_loadcases() failed: %s", exc, exc_info=True + ) + return empty + + # ========================================================================= + # PUBLIC API — RESULT EXTRACTION + # ========================================================================= + + def extract_reactions(self, load_case: str, girder_key: str) -> dict: + """ + Return {'Ra': float, 'Rb': float} in kN for the given load case and girder. + Extracts directly from the real model reactions via _call_reactions(), + falling back to the SFD boundaries if extraction fails. + """ + try: + df = self._call_reactions(load_case, girder_key) + if df is not None and not df.empty: + row = df.iloc[0] + return { + "Ra": float(abs(row["Ra (kN)"])), + "Rb": float(abs(row["Rb (kN)"])), + } + except Exception as e: + logger.warning("extract_reactions via _call_reactions failed: %s", e) + + # Fallback to SFD boundaries + res = self.extract_member_results(girder_key, load_case) + if res is None: + return {"Ra": None, "Rb": None} + xs, bmd, sfd, defl, all_data = res + if len(sfd) == 0: + return {"Ra": None, "Rb": None} + + # Use abs() — the arrow already indicates upward direction. + # Use sfd[-2] for Rb: the last node is often zero-padded by _smooth_nodal. + rb_idx = -2 if len(sfd) > 2 else -1 + return { + "Ra": float(abs(sfd[0])), + "Rb": float(abs(sfd[rb_idx])), + } + + def extract_loads(self, load_case: str) -> list[dict]: + """ + Return load descriptors for the given load case. + Delegates to _call_loads() — the sole _DataAdapter entry point. + """ + return self._call_loads(load_case) + + def extract_member_results( + self, + member_key: str, + loadcase: str, + bmd_key: str = "Mz_i", + sfd_key: str = "Vy_i", + ): + """ + Extract x-coordinate, BMD, and SFD arrays for a girder / load case. + + Parameters + ---------- + member_key : str + Girder identifier, e.g. ``"G1"``. + loadcase : str + Load case label as stored in the dataset. + bmd_key : str + Force component key for the bending moment trace (default ``"Mz_i"``). + sfd_key : str + Force component key for the shear force trace (default ``"Vy_i"``). + + Returns + ------- + tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray, dict] or None + ``(xs, bmd_values, sfd_values, defl_values, all_data)`` where each + array is a ``np.ndarray``. Units: xs in metres, forces in kN/kNm, + deflection in mm. + Returns ``None`` on any failure. + """ + try: + result = self._build_force_arrays(loadcase, member_key, bmd_key, sfd_key) + if result is None: + return None + xs, bmd_values, sfd_values, all_data = result + + defl_df = self._call_displacements(loadcase, member_key, "dy") + if defl_df is not None and not defl_df.empty: + defl_values = defl_df["dy"].to_numpy() + all_data["dy"] = defl_values + else: + defl_values = np.zeros_like(xs) + + return xs, bmd_values, sfd_values, defl_values, all_data + except Exception as exc: + logger.error( + "extract_member_results(member=%r, lc=%r) failed: %s", + member_key, loadcase, exc, + exc_info=True, + ) + return None + + # ========================================================================= + # PUBLIC API — PEAK VALUE COMPUTATION + # ========================================================================= + + def compute_maximums( + self, + xs: np.ndarray, + bmd_values: np.ndarray, + sfd_values: np.ndarray, + all_data: dict, + ) -> dict: + """ + Find the peak absolute values for all components and their x-positions. + + Parameters + ---------- + xs : np.ndarray + x-coordinate array along the girder span (m). + bmd_values : np.ndarray + Active bending moment array (kNm). + sfd_values : np.ndarray + Active shear force array (kN). + all_data : dict + Dictionary mapping force component keys to nodal arrays. + + Returns + ------- + dict + Peak values and exact x-positions keyed by UI field identifiers. + Keys: ``M_max``, ``V_max``, ``D_max``, ``x_M``, ``x_V``, ``x_D``, + plus per-component peaks ``M_z``, ``M_y``, ``T_x``, ``V_y``, + ``V_z``, ``F_x``, ``D_y``, ``D_z``, ``D_x`` and their ``x_`` counterparts. + """ + idx_m = int(np.argmax(np.abs(bmd_values))) + idx_v = int(np.argmax(np.abs(sfd_values))) + + result: dict = { + "M_max": float(bmd_values[idx_m]), + "V_max": float(sfd_values[idx_v]), + "x_M": float(xs[idx_m]), + "x_V": float(xs[idx_v]), + } + + if "dy" in all_data: + idx_d = int(np.argmax(np.abs(all_data["dy"]))) + result["D_max"] = float(all_data["dy"][idx_d]) + result["x_D"] = float(xs[idx_d]) + + # Per-component peaks (used by left-panel summary fields) + comps = ["Mz_i", "My_i", "Mx_i", "Vy_i", "Vz_i", "Fx_i", "dy"] + ui_keys = ["M_z", "M_y", "T_x", "V_y", "V_z", "F_x", "D_y"] + + for comp, uik in zip(comps, ui_keys): + arr = all_data.get(comp, np.zeros(len(xs))) + idx_max = int(np.argmax(np.abs(arr))) + result[uik] = float(arr[idx_max]) + result[f"x_{uik}"] = float(xs[idx_max]) + + return result + + # ========================================================================= + # PUBLIC RENDERING API + # ========================================================================= + + def render_plots( + self, + xs: np.ndarray, + bmd_values: np.ndarray, + sfd_values: np.ndarray, + canvas, + reactions=None, + loads=None, + defl_values=None, + ) -> None: + """ + Draw the girder schematic and BMD / SFD / Deflection diagrams. + + Parameters + ---------- + xs : np.ndarray + x-coordinate array along the girder span (metres). + bmd_values : np.ndarray + Bending moment array (kNm). + sfd_values : np.ndarray + Shear force array (kN). + canvas : FigureCanvasQTAgg + The Qt canvas widget; ``canvas.draw()`` is called at the end. + + Raises + ------ + Exception + Any matplotlib drawing error is caught, logged at ERROR level, + and a blank state is displayed in its place. + """ + try: + self._render_scheme(xs, reactions=reactions, loads=loads) + self._render_diagram( + self.ax_bmd, xs, -bmd_values, "Bending Moment Diagram (kNm)", + show_xaxis=True, color=_STYLE["bmd_line_color"], + symmetric_ticks=True, + ) + self._render_diagram( + self.ax_sfd, xs, sfd_values, "Shear Force Diagram (kN)", + show_xaxis=True, color=_STYLE["sfd_line_color"], + symmetric_ticks=True, + ) + + if defl_values is not None: + self._render_deflection_diagram( + self.ax_defl, xs, defl_values, "Deflection (mm)", show_xaxis=True + ) + else: + _zero = np.zeros_like(xs) + self._render_deflection_diagram( + self.ax_defl, xs, _zero, "Deflection (mm) \u2014 unavailable", show_xaxis=True + ) + + # X-axis scale on all data panels — same nice intervals, aligned columns + for _ax in (self.ax_bmd, self.ax_sfd, self.ax_defl): + self._render_x_scale(_ax, xs) + + canvas.draw() + except Exception as exc: + logger.error("render_plots() failed: %s", exc, exc_info=True) + self.show_blank_state(canvas) + + def _render_scheme(self, xs: np.ndarray, reactions=None, loads=None) -> None: + """ + Draw the girder support schematic on ``ax_scheme``. + + Parameters + ---------- + xs : np.ndarray + x-coordinate array; xs[0] = start support, xs[-1] = end support. + reactions : dict or None + {'Ra': float, 'Rb': float} in kN — shown inline with A/B labels. + loads : list[dict] or None + Load descriptors from _call_loads(); drawn above the chord as + filled rectangles (UDL) or downward arrows (point loads). + """ + ax = self.ax_scheme + span = float(xs[-1] - xs[0]) + + # ── Girder chord ────────────────────────────────────────────────────── + ax.plot( + [xs[0], xs[-1]], [0, 0], + color=_STYLE["support_color"], + linewidth=_STYLE["support_width"], + zorder=3, + ) + + # ── Y-layout constants ──────────────────────────────────────────────── + # Visual stack (top → bottom): + # y_label (A / B text) + # arrow_top (top of UDL fill / point-load arrow base) + # y_chord (girder chord line) + # y_arrow_base (tip of upward support arrows) + # y_arrow_base - 0.06 (reaction value text) + y_chord = 0.0 + arrow_top = 0.50 # top of UDL fill block (raised for visual space) + y_label = 0.64 # A/B label sits above the entire load block + y_arrow_base = -0.55 # base of support arrows — longer shaft + arrow_bot = 0.15 # raised above chord — v-marker tip extends ~0.05 below center, stays above y=0 + + # ── Support upward arrows ───────────────────────────────────────────── + for x in (xs[0], xs[-1]): + ax.annotate( + "", xy=(x, y_chord), xytext=(x, y_arrow_base), + arrowprops=dict( + arrowstyle="-|>", + color=_STYLE["support_color"], + lw=2.0, + mutation_scale=10, # smaller head so shaft looks longer + ), + annotation_clip=False, + ) + + # ── A / B labels with separate reaction value line ──────────────────── + ra = reactions.get("Ra") if reactions else None + rb = reactions.get("Rb") if reactions else None + for x, label, val in ((xs[0], "A", ra), (xs[-1], "B", rb)): + # Line 1: "A" or "B" label (normal weight to match 11px UI text) + ax.text( + x, y_label, + label, + ha="center", va="bottom", + fontsize=_STYLE["label_fontsize"], + fontweight="normal", # was "bold" + color=_STYLE["label_color"], + fontfamily=_STYLE.get("fontfamily", "sans-serif"), + clip_on=False, + zorder=5, + ) + # Line 2: reaction value below the support arrow (only when available) + if val is not None: + ax.text( + x, y_arrow_base - 0.06, + f"{abs(val):.1f} kN", + ha="center", va="top", + fontsize=_STYLE["reaction_fontsize"], + fontweight="normal", + color=_STYLE["label_color"], + fontfamily=_STYLE.get("fontfamily", "sans-serif"), + clip_on=False, + zorder=5, + ) + + # ── Load overlays ───────────────────────────────────────────────────── + if loads: + fill_h = arrow_top - y_chord # height of UDL fill block + + # ── Separate point loads from line loads ────────────────────────── + point_loads = [ld for ld in loads if ld.get("type") == "point"] + line_loads = [ld for ld in loads + if ld.get("type") == "line" + and ld.get("x_start") is not None + and ld.get("x_end") is not None] + + # ── Draw ONE merged fill for all line loads ─────────────────────── + # Multiple overlapping load groups (e.g. girder self weight) used to + # stack transparent fills, producing a darker tint. Drawing a single + # fill_between for the overall envelope eliminates this artefact. + if line_loads: + merged_x0 = min(ld["x_start"] for ld in line_loads) + merged_x1 = max(ld["x_end"] for ld in line_loads) + + # Single fill — consistent colour regardless of how many + # load groups the bridge object returns. + ax.fill_between( + [merged_x0, merged_x1], + [y_chord, y_chord], + [arrow_top, arrow_top], + color=_STYLE["load_fill_color"], + alpha=_STYLE["load_fill_alpha"], + linewidth=0, + zorder=2, + ) + # Top border + ax.plot( + [merged_x0, merged_x1], + [arrow_top, arrow_top], + color=_STYLE["load_arrow_color"], + linewidth=1.2, + zorder=3, + ) + + # Downward arrows evenly spaced across the merged span + n_arr = max(2, min(10, int(abs(merged_x1 - merged_x0) / span * 12 + 0.5))) + for xi in np.linspace(merged_x0, merged_x1, n_arr): + ax.plot( + [xi, xi], [arrow_top, arrow_bot], + color=_STYLE["load_arrow_color"], + linewidth=0.8, + zorder=5, + clip_on=False, + ) + ax.plot( + xi, arrow_bot, + marker='v', + markersize=4, + color=_STYLE["load_arrow_color"], + zorder=5, + clip_on=False, + ) + + # ── Point loads (unchanged) ─────────────────────────────────────── + for ld in point_loads: + x = ld.get("x") + if x is None: + continue + ax.plot( + [x, x], [arrow_top, arrow_bot], + color=_STYLE["point_load_arrow_color"], + linewidth=_STYLE["load_arrow_lw"], + zorder=6, + clip_on=False, + ) + ax.plot( + x, arrow_bot, + marker='v', + markersize=6, + color=_STYLE["point_load_arrow_color"], + zorder=6, + clip_on=False, + ) + + # ── Axis limits and frame ───────────────────────────────────────────── + pad = span * 0.06 + ax.set_xlim(xs[0] - pad, xs[-1] + pad) + ax.set_ylim(-0.80, 0.82) + ax.axis("off") + + def _render_diagram( + self, + ax, + xs: np.ndarray, + values: np.ndarray, + title: str, + show_xaxis: bool = False, + color: str | None = None, + symmetric_ticks: bool = False, + ) -> None: + """ + Draw a single force/moment diagram (line + fill + zero line + title). + + Parameters + ---------- + ax : matplotlib.axes.Axes + Target axes. + xs : np.ndarray + x-coordinate array (m). + values : np.ndarray + Ordinate values (kN or kNm). + title : str + Subtitle displayed below the axes. + """ + _color = color or _STYLE["line_color"] + ax.plot( + xs, values, + color=_color, + linewidth=_STYLE["line_width"], + ) + ax.fill_between( + xs, values, 0, + color=_color, + alpha=_STYLE["fill_alpha"], + ) + ax.axhline( + 0, + color=_STYLE["zero_line_color"], + linewidth=_STYLE["zero_line_width"], + clip_on=True, + zorder=2, + ) + # Vertical node grid lines (restored — drawn at x-tick positions) + ax.xaxis.grid( + True, + color=_STYLE["grid_color"], + linewidth=_STYLE["grid_width"], + linestyle="--", + zorder=1, + ) + ax.set_axisbelow(True) + ax.set_xlabel( + title, + fontsize=_STYLE["diagram_label_fontsize"], + fontweight="normal", + color=_STYLE["label_color"], + labelpad=8, + ) + if not show_xaxis: + ax.get_xaxis().set_visible(False) + + # y-axis scaling — ensure a nonzero range + vmax = float(np.max(np.abs(values))) if values.size else 0.0 + if np.isnan(vmax) or vmax < 1e-4: + ax.set_ylim(-1.0, 1.0) + else: + lim = vmax * 1.15 + ax.set_ylim(-lim, lim) + + self._annotate_y_extremes(ax, values, symmetric=symmetric_ticks) + + def _render_deflection_diagram( + self, + ax, + xs: np.ndarray, + values: np.ndarray, + title: str, + show_xaxis: bool = False, + ) -> None: + ax.plot( + xs, values, + color=_STYLE["deflection_line_color"], + linewidth=_STYLE["line_width"], + ) + ax.axhline( + 0, + color=_STYLE["zero_line_color"], + linewidth=_STYLE["zero_line_width"], + clip_on=True, + zorder=2, + ) + # Vertical node grid lines + ax.xaxis.grid( + True, + color=_STYLE["grid_color"], + linewidth=_STYLE["grid_width"], + linestyle="--", + zorder=1, + ) + ax.set_axisbelow(True) + ax.set_xlabel( + title, + fontsize=_STYLE["diagram_label_fontsize"], + fontweight="normal", + color=_STYLE["label_color"], + labelpad=8, + ) + if not show_xaxis: + ax.get_xaxis().set_visible(False) + + # y-axis scaling — ensure a nonzero range + vmax = float(np.max(np.abs(values))) if values.size else 0.0 + if np.isnan(vmax) or vmax < 1e-4: + ax.set_ylim(-1.0, 1.0) + else: + lim = vmax * 1.15 + ax.set_ylim(-lim, lim) + + self._annotate_y_extremes(ax, values) + + def _annotate_y_extremes(self, ax, values: np.ndarray, symmetric: bool = False) -> None: + """ + Annotate the y-axis with three reference ticks: the data maximum, + zero, and the data minimum. Positioned in data space using + matplotlib's y-tick system so labels never clip and always align + with the actual plotted values. + + When *symmetric* is True (used for SFD), the min tick is forced + to be the negative of the max, and both are always displayed + regardless of the deduplication threshold. + """ + if values.size == 0: + return + + if symmetric: + abs_max = float(np.max(np.abs(values))) + vmax = abs_max + vmin = -abs_max + else: + vmax = float(np.max(values)) + vmin = float(np.min(values)) + + # Skip when range is effectively zero (all-zero deflection placeholder) + if abs(vmax - vmin) < 1e-6: + return + + if symmetric: + # Symmetric mode (SFD): always show +max, 0, -max — no dedup + ticks = [vmax, 0.0, vmin] + labels = [f"{vmax:.1f}", "0.0", f"{vmin:.1f}"] + else: + # Build tick list with deduplication for non-symmetric diagrams + ticks = [] + labels = [] + + def _add(val): + for existing in ticks: + if abs(existing - val) < abs(vmax - vmin) * 0.05: + return # skip near-duplicate + ticks.append(val) + labels.append(f"{val:.1f}") + + _add(vmax) + _add(0.0) + _add(vmin) + + ax.set_yticks(ticks) + ax.set_yticklabels( + labels, + fontsize=_STYLE["scale_fontsize"], + color=_STYLE["label_color"], + fontfamily=_STYLE.get("fontfamily", "sans-serif"), + ) + ax.tick_params( + axis="y", + direction="out", + length=3, + width=0.6, + color=_STYLE["spine_color"], + pad=3, + ) + ax.yaxis.set_visible(True) + + def _render_x_scale(self, ax, xs: np.ndarray) -> None: + """ + Place x-axis ticks at human-friendly round-number intervals. + Selects the interval from [1, 2, 5, 10, 20, 25, 50] m such that + 4–6 ticks appear for any span. First and last span positions are + always shown. Tick labels: '0 m', '10 m', etc. + """ + if len(xs) == 0: + return + + import math + + span = float(xs[-1] - xs[0]) + x_start = float(xs[0]) + x_end = float(xs[-1]) + + # Pick smallest "nice" step that produces at most 6 intervals + nice_steps = [1, 2, 5, 10, 20, 25, 50] + step = nice_steps[-1] # safe default + for s in nice_steps: + if span / s <= 6: + step = s + break + + # Build ticks from the first multiple of step >= x_start + first = math.ceil(x_start / step) * step + ticks = [] + t = first + while t <= x_end + 1e-9: + ticks.append(round(t, 9)) + t += step + + # Always include span endpoints + if not ticks or abs(ticks[0] - x_start) > 1e-6: + ticks.insert(0, x_start) + if not ticks or abs(ticks[-1] - x_end) > 1e-6: + ticks.append(x_end) + + # Deduplicate and sort + ticks = sorted(set(round(v, 6) for v in ticks)) + + # Format labels + all_int = all(abs(v - round(v)) < 1e-6 for v in ticks) + fmt = "{:.0f} m" if all_int else "{:.1f} m" + + ax.set_xticks(ticks) + ax.set_xticklabels( + [fmt.format(t) for t in ticks], + fontsize=_STYLE["scale_fontsize"], + color=_STYLE["label_color"], + fontfamily=_STYLE.get("fontfamily", "sans-serif"), + ) + ax.tick_params(axis="x", direction="out", length=4, + color=_STYLE["spine_color"]) + ax.xaxis.set_visible(True) + ax.set_xlim(x_start, x_end) + + def _render_blank_axis(self, ax, message: str, title: str = "") -> None: + """ + Render a single axis as a blank panel with a centred italic message. + + Parameters + ---------- + ax : matplotlib.axes.Axes + Target axes to blank out. + message : str + Text to display, centred in the axes. + title : str, optional + Subtitle shown below the axes. + """ + ax.axis("off") + ax.text( + 0.5, 0.5, + message, + ha="center", va="center", + transform=ax.transAxes, + color="#666666", + fontsize=_STYLE["title_fontsize"], + style="italic", + ) + if title: + ax.set_title( + title, + fontsize=_STYLE["title_fontsize"], + pad=5, + y=-0.4, + ) + + def clear_axes(self, canvas) -> None: + """ + Clear all four axes and restore baseline formatting before a re-render. + + Parameters + ---------- + canvas : FigureCanvasQTAgg + Qt canvas widget; ``canvas.draw()`` is called at the end. + """ + for ax in (self.ax_scheme, self.ax_bmd, self.ax_sfd, self.ax_defl): + ax.clear() + ax.set_facecolor("#ffffff") + # NOTE: do NOT call ax.grid(False) here — each _render_diagram + # call re-enables the x-axis grid; clearing is sufficient. + ax.set_yticks([]) + ax.set_ylabel("") + ax.axis("on") + + # Schematic: frameless + for spine in self.ax_scheme.spines.values(): + spine.set_visible(False) + + # Data axes: subtle frame + for ax in (self.ax_bmd, self.ax_sfd, self.ax_defl): + for spine in ax.spines.values(): + spine.set_visible(True) + spine.set_linewidth(_STYLE["spine_width"]) + spine.set_color(_STYLE["spine_color"]) + + canvas.draw() + + def show_blank_state(self, canvas, message: Optional[str] = None) -> None: + """ + Show a placeholder message on all axes when no data is available. + + Parameters + ---------- + canvas : FigureCanvasQTAgg + Qt canvas widget; ``canvas.draw()`` is called at the end. + message : str, optional + Custom message to display. Defaults to a generic instruction + to run the analysis first. + """ + self.clear_axes(canvas) + + display_message = ( + message + if message is not None + else "Run the analysis first to see results." + ) + + for ax in (self.ax_scheme, self.ax_bmd, self.ax_sfd, self.ax_defl): + ax.axis("off") + + self.ax_sfd.text( + 0.5, 0.5, + display_message, + ha="center", va="center", + transform=self.ax_sfd.transAxes, + color="#666666", + fontsize=_STYLE["title_fontsize"], + style="italic", + ) + canvas.draw() + + def draw_cursors( + self, + mode: str, + cursor_x, + current_x: Optional[np.ndarray], + max_dict: dict, + canvas, + ) -> None: + """ + Draw vertical dashed cursor lines on the diagram axes. + + **Maximum Values mode** — draws a separate cursor at the peak + absolute-value location for each of the three data diagrams + (BMD, SFD). The deflection axis receives no cursor because + deflection data is unavailable (PENDING-1). + + **Scroll for Values mode** — draws a single shared vertical line + across all four axes so the cursor runs continuously from the girder + schematic down through every diagram. + + Parameters + ---------- + mode : str + Either ``"Maximum Values"`` or ``"Scroll for Values"``. + cursor_x : float or None + Exact cursor x-position for Scroll for Values mode. + current_x : np.ndarray or None + Full x-coordinate array; used to derive the default cursor position + when ``cursor_x`` is not set. + max_dict : dict + Peak location dict from :meth:`compute_maximums`. + Expected keys: ``"x_M"`` (BMD peak x), ``"x_V"`` (SFD peak x). + canvas : FigureCanvasQTAgg + Qt canvas widget; ``canvas.draw()`` is called at the end. + + Raises + ------ + Exception + Any error removing a stale cursor line is silently ignored. + """ + # Remove previous cursor lines + for line in self._cursor_lines: + try: + line.remove() + except Exception: + pass + self._cursor_lines = [] + + if current_x is None or len(current_x) == 0: + canvas.draw() + return + + if mode == "Scroll for Values": + cx = cursor_x if cursor_x is not None else float(current_x[0]) + for ax in (self.ax_scheme, self.ax_bmd, self.ax_sfd, self.ax_defl): + self._cursor_lines.append( + ax.axvline( + cx, + color=_STYLE["cursor_color"], + linestyle="--", + linewidth=_STYLE["cursor_width"], + clip_on=True, + ) + ) + + elif mode == "Maximum Values" and max_dict: + # BMD peak cursor + self._cursor_lines.append( + self.ax_bmd.axvline( + max_dict.get("x_M", 0.0), + color=_STYLE["cursor_color"], + linestyle="--", + linewidth=_STYLE["cursor_width"], + clip_on=True, + ) + ) + # SFD peak cursor + self._cursor_lines.append( + self.ax_sfd.axvline( + max_dict.get("x_V", 0.0), + color=_STYLE["cursor_color"], + linestyle="--", + linewidth=_STYLE["cursor_width"], + clip_on=True, + ) + ) + # Deflection axis: no cursor (PENDING-1; data not available) + + canvas.draw() \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index c7901a8a0..3e3c0ef97 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -601,6 +601,117 @@ def get_results_dataset(self): """Return the xarray Dataset of analysis results.""" return self.grillage_model.model.get_results() + # ───────────────────────────────────────────────────────────────────────── + # 2-D analysis result factory + # ───────────────────────────────────────────────────────────────────────── + + def get_result_handler(self) -> PlateGirderAnalysisResults: + """ + Build and return a PlateGirderAnalysisResults bound to the current + analysis dataset and grillage model. + + This is the **canonical factory** for PlateGirderAnalysisResults in + the entire application. All callers — dialogs, widgets, scripts — + must obtain their handler from this method, never construct one + themselves. + + Returns + ------- + PlateGirderAnalysisResults + A fully initialised result handler ready to be injected into a + GirderGraphEngine. + + Raises + ------ + RuntimeError + Propagated from get_results_dataset() when analyze() has not yet + been called and no dataset is available. + + Notes + ----- + This method is safe to call multiple times; each call constructs a + fresh handler bound to the current dataset snapshot. If you need to + share one handler across several components (e.g. to avoid duplicate + construction), call this once, hold the reference, and pass it + explicitly to build_graph_engine(). + """ + results = self.get_results_dataset() + return PlateGirderAnalysisResults( + dataset=results, + bridge=self.grillage_model, + ) + + def build_graph_engine( + self, + figure, + ax_scheme, + ax_bmd, + ax_sfd, + ax_defl, + result_handler: PlateGirderAnalysisResults | None = None, + ): + """ + Construct and return a GirderGraphEngine wired to this bridge's + result handler. + + This keeps GirderGraphEngine construction out of dialogs and widgets. + The caller owns the matplotlib Figure and axes; this method assembles + the engine and injects the data source. + + Parameters + ---------- + figure : matplotlib.figure.Figure + Shared matplotlib Figure owned by the calling dialog or widget. + ax_scheme : matplotlib.axes.Axes + Top panel — girder support schematic. + ax_bmd : matplotlib.axes.Axes + Bending moment diagram panel. + ax_sfd : matplotlib.axes.Axes + Shear force diagram panel. + ax_defl : matplotlib.axes.Axes + Deflection diagram panel. + result_handler : PlateGirderAnalysisResults, optional + If provided, this handler is injected directly. If None, + ``get_result_handler()`` is called automatically. Pass an + explicit handler when you have already called + ``get_result_handler()`` and want to reuse the same instance + across multiple engines. + + Returns + ------- + GirderGraphEngine + Fully initialised engine, ready to call ``get_girder_keys()``, + ``extract_member_results()``, and ``render_plots()``. + + Raises + ------ + RuntimeError + Propagated from ``get_result_handler()`` if ``design()`` / + ``analyze()`` has not yet been called. + + Notes + ----- + GirderGraphEngine is imported inside this method body (deferred + import) to keep plategirderbridge.py's top-level import cost low. + The import only executes when a dialog actually requests a 2-D plot. + """ + from osdagbridge.core.bridge_types.plate_girder.graph_engine import ( + GirderGraphEngine, + ) + handler = ( + result_handler + if result_handler is not None + else self.get_result_handler() + ) + return GirderGraphEngine( + figure=figure, + ax_scheme=ax_scheme, + ax_bmd=ax_bmd, + ax_sfd=ax_sfd, + ax_defl=ax_defl, + result_handler=handler, + ) + def get_available_loadcases(self) -> list[str]: """Return sorted list of loadcase name strings from the results dataset.""" results = self.get_results_dataset() diff --git a/src/osdagbridge/desktop/ui/dialogs/girder_2d_plots.py b/src/osdagbridge/desktop/ui/dialogs/girder_2d_plots.py new file mode 100644 index 000000000..bc3e87a67 --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/girder_2d_plots.py @@ -0,0 +1,524 @@ +from __future__ import annotations + +import logging +from typing import Optional + +import numpy as np +from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas +from matplotlib.figure import Figure +import matplotlib.gridspec as gridspec + +from PySide6.QtWidgets import ( + QWidget, QVBoxLayout, QHBoxLayout, + QLabel, QLineEdit, QFrame, QComboBox, +) +from PySide6.QtCore import Qt +from PySide6.QtGui import QFont + +logger = logging.getLogger(__name__) + +class Girder2DPlotsWidget(QWidget): + """ + Standalone PySide6 widget — four-panel girder diagram (schematic, BMD, + SFD, deflection) with interactive girder selector and cursor overlay. + + Isolation contract + ------------------ + This widget has no knowledge of OpenSees, ospgrillage, xarray, or any + bridge model type. Its sole interface to the analysis layer is a + ``GirderGraphEngine`` instance injected via :meth:`set_engine`. No + other bridge between this widget and the analysis layer exists. + + Lifecycle + --------- + 1. Instantiate the widget — no engine is required at construction time. + The girder selector is disabled and the canvas shows a blank state. + 2. After ``PlateGirderBridge.design()`` completes, call + ``PlateGirderBridge.build_graph_engine(fig, axes...)`` to obtain an + engine, then pass it to :meth:`set_engine`. + 3. The widget auto-populates the girder combo and renders the first + available girder immediately. + + Parameters + ---------- + parent : QWidget, optional + Owning Qt parent widget. + """ + + def __init__(self, parent: Optional[QWidget] = None) -> None: + super().__init__(parent) + + # ── Engine reference — injected via set_engine() ────────────────── + self._engine = None # GirderGraphEngine; None until injected + self._loadcase: str = "" # active load case name + + # ── Cached plot data — empty arrays are the safe initial state ──── + self._x_data: np.ndarray = np.array([]) + self._bmd_data: np.ndarray = np.array([]) + self._sfd_data: np.ndarray = np.array([]) + self._defl_data: np.ndarray = np.array([]) # empty until PENDING-1 + self._all_data: dict = {} + self._reactions: dict | None = None + self._loads: list[dict] | None = None + + self.current_x_position: float = 0.0 + + self._init_ui() + + def _init_ui(self) -> None: + self.main_layout = QVBoxLayout(self) + self.main_layout.setContentsMargins(0,0,0,0) + + # Combo Box + def create_combo_box(): + combo = QComboBox() + combo.setStyleSheet(""" + QComboBox { + border: 1px solid #CCCCCC; + border-radius: 4px; + padding: 4px 8px; + background-color: white; + } + QComboBox:hover { + border-color: #0078D7; + } + QComboBox:disabled { + background-color: #F0F0F0; + color: #A0A0A0; + } + QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 20px; + border-left-width: 1px; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + """) + return combo + + top_layout = QHBoxLayout() + top_layout.setAlignment(Qt.AlignLeft) + + lbl1 = QLabel("Girder Element:") + font = QFont() + font.setBold(True) + lbl1.setFont(font) + + self.girder_combo = create_combo_box() + self.girder_combo.setMinimumWidth(100) + self.girder_combo.currentTextChanged.connect(self._on_girder_selected) + self.girder_combo.setEnabled(False) + + top_layout.addWidget(lbl1) + top_layout.addWidget(self.girder_combo) + top_layout.addSpacing(20) + + lbl2 = QLabel("Interaction:") + lbl2.setFont(font) + + self.mode_combo = create_combo_box() + self.mode_combo.addItems(["Scroll for Values", "Maximum Values"]) + self.mode_combo.setMinimumWidth(150) + self.mode_combo.currentTextChanged.connect(self._on_mode_changed) + + top_layout.addWidget(lbl2) + top_layout.addWidget(self.mode_combo) + + self.main_layout.addLayout(top_layout) + + # Plot Region + body_layout = QHBoxLayout() + + self.figure = Figure(figsize=(8, 6), dpi=100) + self.figure.patch.set_facecolor('#ffffff') + self.canvas = FigureCanvas(self.figure) + body_layout.addWidget(self.canvas, stretch=4) + + # Right Value Display + self.val_panel = QFrame() + self.val_panel.setFixedWidth(250) + self.val_panel.setStyleSheet("background-color: #FAFAFA; border: 1px solid #CCCCCC; border-radius: 4px;") + val_layout = QVBoxLayout(self.val_panel) + val_layout.setContentsMargins(15, 15, 15, 15) + + title = QLabel("Cursor Values") + title.setFont(font) + title.setAlignment(Qt.AlignCenter) + title.setStyleSheet("border: none; background: transparent; color: #333333;") + val_layout.addWidget(title) + + val_layout.addSpacing(10) + + def create_value_box(label_str, unit_str): + box = QFrame() + box.setStyleSheet("border: none; background: transparent;") + box_layout = QVBoxLayout(box) + box_layout.setContentsMargins(0,0,0,0) + box_layout.setSpacing(2) + + lbl = QLabel(label_str) + small_font = QFont() + small_font.setBold(True) + lbl.setFont(small_font) + lbl.setStyleSheet("color: #666666;") + + val = QLineEdit("-") + val.setReadOnly(True) + val.setAlignment(Qt.AlignCenter) + val.setStyleSheet(""" + QLineEdit { + background-color: #E8F0FE; + border: 1px solid #B0C4DE; + border-radius: 4px; + padding: 4px; + color: #000000; + font-weight: bold; + } + QLineEdit:read-only { + background-color: #F8F9FA; + } + """) + + box_layout.addWidget(lbl) + box_layout.addWidget(val) + return box, val + + box_x, self.field_x = create_value_box("Distance from Start", "m") + box_bmd, self.field_bmd = create_value_box("Bending Moment", "kNm") + box_sfd, self.field_sfd = create_value_box("Shear Force", "kN") + box_defl, self.field_defl = create_value_box("Deflection", "mm") + + self.field_x.setReadOnly(False) + self.field_x.setToolTip("Enter target position and press Enter") + self.field_x.editingFinished.connect(self._on_user_x_entered) + + # Setup fields dict + self.fields = { + "x": self.field_x, + "bmd": self.field_bmd, + "sfd": self.field_sfd, + "defl": self.field_defl + } + + # Align boxes precisely with the height ratios 1:3:3:3, hspace 0.4 + val_layout.addStretch(58) + val_layout.addWidget(box_x, stretch=80) + val_layout.addStretch(15) + val_layout.addWidget(box_bmd, stretch=300) + val_layout.addStretch(15) + val_layout.addWidget(box_sfd, stretch=300) + val_layout.addStretch(15) + val_layout.addWidget(box_defl, stretch=300) + val_layout.addStretch(15) + val_layout.addStretch(58) + + body_layout.addWidget(self.val_panel) + self.main_layout.addLayout(body_layout, stretch=1) + + self._setup_axes() + self._setup_event_handling() + + def _setup_axes(self) -> None: + """ + Create the four matplotlib axes inside a 4:1 height-ratio GridSpec. + + The engine is NOT created here. It is injected later via + :meth:`set_engine` once the analysis dataset is available. + """ + gs = gridspec.GridSpec( + 4, 1, figure=self.figure, + height_ratios=[1, 3, 3, 3], + hspace=0.4, + ) + self.figure.subplots_adjust(left=0.15, right=0.95, top=0.92, bottom=0.10) + + self.ax_girder = self.figure.add_subplot(gs[0]) + self.ax_bmd = self.figure.add_subplot(gs[1], sharex=self.ax_girder) + self.ax_sfd = self.figure.add_subplot(gs[2], sharex=self.ax_girder) + self.ax_defl = self.figure.add_subplot(gs[3], sharex=self.ax_girder) + + self.all_axes = [self.ax_girder, self.ax_bmd, self.ax_sfd, self.ax_defl] + self.plot_axes = [self.ax_bmd, self.ax_sfd, self.ax_defl] + # Engine injected via set_engine(); canvas shows blank state until then. + self.canvas.draw() + + def set_engine(self, engine, loadcase: str = "girder self weight") -> None: + """ + Inject a fully initialised GirderGraphEngine and trigger the initial plot. + + Call this once after ``PlateGirderBridge.build_graph_engine()`` returns. + The widget resets all state, re-populates the girder combo, and + auto-renders the first available girder immediately. + + Parameters + ---------- + engine : GirderGraphEngine + The fully initialised engine. Must already have a result handler + injected; if result_handler is None on the engine, + ``get_girder_keys()`` will return an empty list and the widget + will display the blank state with a logged warning. + loadcase : str + Load case name passed to ``engine.extract_member_results()``. + Defaults to ``"girder self weight"``. + + Notes + ----- + It is safe to call ``set_engine()`` more than once (e.g. after a + re-analysis). Each call fully resets widget state before + re-populating. + """ + self._engine = engine + self._loadcase = loadcase + self._reset_state() + + girders = self._engine.get_girder_keys() + if not girders: + logger.warning( + "set_engine: engine.get_girder_keys() returned an empty list. " + "result_handler may be uninitialised or the model contains no " + "continuous girders. Showing blank state." + ) + self._engine.show_blank_state( + self.canvas, "No girders found in model." + ) + return + + self.girder_combo.blockSignals(True) + self.girder_combo.clear() + self.girder_combo.addItems(girders) + self.girder_combo.blockSignals(False) + self.girder_combo.setEnabled(True) + + # Auto-plot the first girder immediately — no user action required. + self._on_girder_selected(self.girder_combo.currentText()) + + def _reset_state(self) -> None: + """ + Reset all cached plot arrays to empty and disable the girder selector. + + Called at the start of every :meth:`set_engine` call so that stale + data from a previous analysis cannot bleed into the new render. + """ + self._x_data = np.array([]) + self._bmd_data = np.array([]) + self._sfd_data = np.array([]) + self._defl_data = np.array([]) + self._all_data = {} + self._reactions = None + self._loads = None + self.current_x_position = 0.0 + + self.girder_combo.blockSignals(True) + self.girder_combo.clear() + self.girder_combo.blockSignals(False) + self.girder_combo.setEnabled(False) + + def _on_girder_selected(self, girder_name: str) -> None: + """ + Slot — called when the user picks a different girder from the combo. + + Extracts force arrays for the selected girder and re-renders all + diagram panels. Silently returns if no engine is injected or the + girder name is empty. + + Parameters + ---------- + girder_name : str + Girder identifier as returned by ``engine.get_girder_keys()``, + e.g. ``"G1"`` or ``"EB1"``. + """ + if not girder_name or self._engine is None: + return + + res = self._engine.extract_member_results(girder_name, self._loadcase) + if res is None: + logger.warning( + "_on_girder_selected: extract_member_results returned None " + "for girder=%r, loadcase=%r.", + girder_name, self._loadcase, + ) + self._engine.show_blank_state( + self.canvas, f"No data for girder {girder_name!r}." + ) + return + + x_array, bmd_array, sfd_array, defl_array, all_data = res + self._x_data = np.asarray(x_array) + self._bmd_data = np.asarray(bmd_array) + self._sfd_data = np.asarray(sfd_array) + self._defl_data = np.asarray(defl_array) + self._all_data = all_data + self._reactions = self._engine.extract_reactions(self._loadcase, girder_name) + self._loads = self._engine.extract_loads(self._loadcase) + + self._plot_current_data() + + def _plot_current_data(self) -> None: + """ + Clear all axes and re-render the current cached plot arrays. + + Delegates all drawing to the engine. After rendering, updates the + RHS value panel according to the active interaction mode. + """ + if self._engine is None: + return + self._engine.clear_axes(self.canvas) + self._engine.render_plots( + self._x_data, self._bmd_data, self._sfd_data, self.canvas, + reactions=self._reactions, loads=self._loads, defl_values=self._defl_data + ) + + if self.mode_combo.currentText() == "Maximum Values": + self._show_maximums() + else: + self.fields["x"].clear() + for k in ("bmd", "sfd", "defl"): + self.fields[k].setText("-") + + def _setup_event_handling(self) -> None: + self.canvas.mpl_connect('button_press_event', self._on_click) + self.canvas.setFocusPolicy(Qt.ClickFocus) + self.canvas.mpl_connect('key_press_event', self._on_key_press) + + def move_cursor_to_x(self, x_val: float) -> None: + """ + Move the scroll cursor to an x-position and update the RHS panel. + + Safe to call at any time — silently returns if no data is loaded. + Clamps ``x_val`` to the available span so out-of-range inputs are + handled gracefully. + + Parameters + ---------- + x_val : float + Target x-position in metres. + """ + if self._x_data is None or len(self._x_data) == 0: + return + + self.current_x_position = float( + np.clip(x_val, self._x_data[0], self._x_data[-1]) + ) + + m_x = float(np.interp(self.current_x_position, self._x_data, self._bmd_data)) + v_x = float(np.interp(self.current_x_position, self._x_data, self._sfd_data)) + + # Deflection: only interpolate when PENDING-1 has been resolved and + # _defl_data is populated to match _x_data length. + d_x = ( + float(np.interp(self.current_x_position, self._x_data, self._defl_data)) + if len(self._defl_data) == len(self._x_data) + else float("nan") + ) + + self.mode_combo.blockSignals(True) + self.mode_combo.setCurrentText("Scroll for Values") + self.mode_combo.blockSignals(False) + + if self._engine is not None: + self._engine.draw_cursors( + "Scroll for Values", self.current_x_position, self._x_data, {}, self.canvas + ) + self._update_rhs_display(self.current_x_position, m_x, v_x, d_x) + + def _update_rhs_display(self, x: float, m: float, v: float, d: float) -> None: + """ + Update the four read-only value fields in the RHS panel. + + Parameters + ---------- + x : float + Cursor x-position (m). + m : float + Bending moment at x (kNm). + v : float + Shear force at x (kN). + d : float + Deflection at x (mm), or ``float('nan')`` when unavailable. + """ + self.fields["x"].setText(f"{x:.3f}") + self.fields["bmd"].setText(f"{m:.2f} kNm") + self.fields["sfd"].setText(f"{v:.2f} kN") + # nan != nan is the standard float NaN check — no math import needed. + defl_text = ( + "Unavailable" + if d != d + else f"{d:.2f} mm" + ) + self.fields["defl"].setText(defl_text) + + def _on_click(self, event) -> None: + if event.button != 1: + return + if event.inaxes in self.plot_axes: + if event.xdata is not None: + self.move_cursor_to_x(event.xdata) + self.canvas.setFocus() + + def _on_key_press(self, event) -> None: + if self.mode_combo.currentText() != "Scroll for Values": + return + + if len(self._x_data) == 0: + return + + nearest_idx = int((np.abs(self._x_data - self.current_x_position)).argmin()) + + if event.key == 'right': + next_idx = min(len(self._x_data) - 1, nearest_idx + 1) + self.move_cursor_to_x(float(self._x_data[next_idx])) + elif event.key == 'left': + prev_idx = max(0, nearest_idx - 1) + self.move_cursor_to_x(float(self._x_data[prev_idx])) + + def _on_user_x_entered(self) -> None: + text = self.fields["x"].text() + try: + val = float(text) + self.move_cursor_to_x(val) + except ValueError: + pass + + def _on_mode_changed(self, mode_text: str) -> None: + if len(self._x_data) == 0 or self._engine is None: + return + + if mode_text == "Scroll for Values": + self._engine.draw_cursors("Scroll for Values", None, self._x_data, {}, self.canvas) + self.fields["x"].clear() + for k in ["bmd", "sfd", "defl"]: + self.fields[k].setText("-") + return + + if mode_text == "Maximum Values": + self._show_maximums() + + def _show_maximums(self) -> None: + if len(self._x_data) == 0 or self._engine is None: + return + + max_dict = self._engine.compute_maximums(self._x_data, self._bmd_data, self._sfd_data, self._all_data) + + self._engine.draw_cursors("Maximum Values", None, self._x_data, max_dict, self.canvas) + + x_bmd = max_dict.get("x_M", 0.0) + x_sfd = max_dict.get("x_V", 0.0) + x_defl = max_dict.get("x_D", 0.0) + + if abs(x_bmd - x_sfd) < 1e-4: + self.fields["x"].setText(f"{x_bmd:.2f}") + else: + self.fields["x"].setText("Multiple") + + self.fields["bmd"].setText(f"max = {max_dict.get('M_max', 0.0):.2f} kNm at x = {x_bmd:.2f} m") + self.fields["sfd"].setText(f"max = {max_dict.get('V_max', 0.0):.2f} kN at x = {x_sfd:.2f} m") + + if "D_max" in max_dict: + self.fields["defl"].setText(f"max = {max_dict.get('D_max', 0.0):.2f} mm at x = {x_defl:.2f} m") + else: + self.fields["defl"].setText("Unavailable") + + self.canvas.draw_idle() \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/steel_design.py b/src/osdagbridge/desktop/ui/dialogs/steel_design.py index 93c6a7d10..29bf9a5bf 100644 --- a/src/osdagbridge/desktop/ui/dialogs/steel_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/steel_design.py @@ -1,24 +1,61 @@ from PySide6.QtWidgets import ( - QDialog, QVBoxLayout, QHBoxLayout, QTabWidget, QWidget, QSizeGrip, QSizePolicy + QDialog, QVBoxLayout, QHBoxLayout, QTabWidget, QTabBar, QWidget, QSizeGrip, + QSizePolicy, QRadioButton, QLabel, QFrame ) from PySide6.QtCore import Qt +from PySide6.QtGui import QFont, QColor from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.steel_design_details import SteelDesignDetailsTab from osdagbridge.desktop.ui.dialogs.tabs.steel_design_analysis import SteelDesignAnalysisTab from osdagbridge.desktop.ui.dialogs.tabs.steel_design_check import SteelDesignCheckTab +import numpy as np +from matplotlib.figure import Figure +from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas + +from osdagbridge.core.bridge_types.plate_girder.graph_engine import GirderGraphEngine + + +# ============================================================================= +# DIALOG: Steel Design +# ============================================================================= class SteelDesign(QDialog): + """ + Main dialog window for the Steel Design module. + + Provides three tabs: + - Details : Girder geometry and section properties + - Analysis Results : Interactive BMD / SFD / Deflection plots + - Design Check : Code compliance results - def __init__(self, parent=None): - super().__init__(parent) - self._main_window = parent + The Analysis Results tab injects a matplotlib figure into the placeholder + defined by SteelDesignAnalysisTab, wires all signals, and manages the + full data pipeline from ospgrillage model discovery to plot rendering. + """ + + # ========================================================================= + # UI INITIALISATION + # ========================================================================= + + def __init__(self, parent=None, result_handler=None): + super().__init__(None) + self._main_window = parent + + # Auto-fetch if missing (handles legacy callers like output_dock) + if result_handler is None and hasattr(self._main_window, "backend"): + try: + result_handler = self._main_window.backend.get_result_handler() + except Exception: + pass + + self._result_handler = result_handler # PlateGirderAnalysisResults or None self.setObjectName("SteelDesign") self.resize(1024, 720) self.setMinimumSize(900, 520) - self.setSizeGripEnabled(True) self.init_ui() + self.setStyleSheet(""" QDialog { background-color: #ffffff; @@ -26,14 +63,19 @@ def __init__(self, parent=None): } """) + def setupWrapper(self): - self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) + """ + Configure a frameless window with a custom title bar and a resize grip. + The content_widget acts as the root container for the tab layout. + """ + self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint | Qt.Window) main_layout = QVBoxLayout(self) main_layout.setContentsMargins(1, 1, 1, 1) main_layout.setSpacing(0) - self.title_bar = CustomTitleBar(parent=self) + self.title_bar = CustomTitleBar() self.title_bar.setTitle("Steel Design") main_layout.addWidget(self.title_bar) @@ -50,46 +92,789 @@ def setupWrapper(self): main_layout.addLayout(overlay) def init_ui(self): + """ + Build the top-level layout: tab widget containing the three main sections. + Also triggers plot canvas injection and loads existing details data. + """ self.setupWrapper() main_layout = QVBoxLayout(self.content_widget) - main_layout.setContentsMargins(8, 8, 8, 8) - main_layout.setSpacing(2) + main_layout.setContentsMargins(5, 5, 5, 5) - - - # ── Tabs ────────────────────────────────────────────────────────────── + # ── Tab widget ──────────────────────────────────────────────────────── self.tabs = QTabWidget() self.tabs.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - self.tabs.setDocumentMode(True) - self.tabs.tabBar().setExpanding(True) - self.tabs.tabBar().setUsesScrollButtons(False) + self.stretching_tab_bar = QTabBar() + self.stretching_tab_bar.setElideMode(Qt.ElideRight) + self.tabs.setTabBar(self.stretching_tab_bar) self.tabs.setStyleSheet(""" - QTabWidget::pane { border: none; } - QTabBar { qproperty-drawBase: 0; } + QTabWidget::pane { + border: 1px solid #d1d1d1; + background-color: #ffffff; + border-radius: 6px; + } QTabBar::tab { - background: #E6E6E6; - color: black; - border: 1px solid #CCCCCC; - padding: 8px 0px; - border-radius: 8px; - margin-right: 2px; + font-weight: bold; + font-size: 12px; + background: #ffffff; + color: #3a3a3a; + border: 1px solid #d1d1d1; + padding: 10px 22px; } QTabBar::tab:selected { background: #90AF13; - color: white; - font-weight: bold; + color: #ffffff; border: 1px solid #90AF13; } - QTabBar::tab:hover { background: #DADADA; } + QTabBar::tab:hover { + background: #90AF13; + color: #ffffff; + } """) - self.details_tab = SteelDesignDetailsTab(self) - self.tabs.addTab(self.details_tab, "Details") - self.tabs.addTab(SteelDesignAnalysisTab(self), "Analysis Results") - self.tabs.addTab(SteelDesignCheckTab(self), "Design Check") + self.details_tab = SteelDesignDetailsTab(self) + self.analysis_tab = SteelDesignAnalysisTab(self) + self.check_tab = SteelDesignCheckTab(self) + + self.tabs.addTab(self.details_tab, "Details") + self.tabs.addTab(self.analysis_tab, "Analysis Results") + self.tabs.addTab(self.check_tab, "Design Check") main_layout.addWidget(self.tabs) if hasattr(self._main_window, "cad_state"): - self.details_tab.load_data(self._main_window.cad_state) \ No newline at end of file + self.details_tab.load_data(self._main_window.cad_state) + + # Inject the matplotlib canvas into the Analysis Results tab + self._setup_analysis_plots() + + def _setup_analysis_plots(self): + """ + Build and inject the matplotlib figure canvas into the Analysis Results tab. + + Responsibilities: + - Create a 4-panel figure (schematic + BMD + SFD + Deflection) + - Replace the diagram_placeholder with the canvas widget + - Replace QLineEdit side-fields with word-wrapping QLabels + - Wire all Qt and matplotlib event signals + - Initialise interaction state and data caches + """ + # ── Figure + canvas ─────────────────────────� + self.figure = Figure(figsize=(8, 6), dpi=100, facecolor='#ffffff') + self.canvas = FigureCanvas(self.figure) + + # ── Interaction mode: label + styled radio container ───────────────── + # radio_container visually matches the Component combo box: + # same border, radius, background, min-height, padding, font-size. + # ── Display Location titled card ────────────────────────────────────── + disp_card = QFrame() + disp_card.setObjectName("controlCard") + disp_card.setStyleSheet(""" + QFrame#controlCard { + background-color : white; + border : 1px solid #b0b0b0; + border-radius : 6px; + } + QLabel { + border : none; + background : transparent; + } + QRadioButton { + border : none; + background : transparent; + font-size : 11px; + color : #333333; + } + QRadioButton:focus { + outline: none; + } + QRadioButton::indicator { + width: 12px; + height: 12px; + border: 1px solid #b0b0b0; + border-radius: 6px; + background: white; + } + QRadioButton::indicator:checked { + background: #90AF13; + border: 1px solid #90AF13; + } + """) + disp_card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + + disp_card_layout = QVBoxLayout(disp_card) + disp_card_layout.setContentsMargins(23, 10, 14, 12) + disp_card_layout.setSpacing(4) + + disp_title = QLabel("Display Location") + disp_title.setStyleSheet( + "font-size: 13px; color: #2B2B2B; font-weight: bold;" + " background: transparent; border: none;" + ) + disp_card_layout.addWidget(disp_title) + + radio_row_widget = QWidget() + radio_row_widget.setStyleSheet( + "background: transparent; border: none;" + ) + radio_row_widget.setFixedHeight(28) # matches combo min-height so both cards are identical height + radio_row_layout = QHBoxLayout(radio_row_widget) + radio_row_layout.setContentsMargins(0, 0, 0, 0) + radio_row_layout.setSpacing(16) + + self.radio_max = QRadioButton("Maximum Values") + self.radio_scroll = QRadioButton("Scroll for Values") + self.radio_max.setChecked(True) + self.radio_max.toggled.connect(self._on_interaction_mode_changed) + self.radio_scroll.toggled.connect(self._on_interaction_mode_changed) + + radio_row_layout.addWidget(self.radio_max) + radio_row_layout.addWidget(self.radio_scroll) + radio_row_layout.addStretch() + + disp_card_layout.addWidget(radio_row_widget) + + # Add to controls_row with stretch=1 so it equals the Component card width + self.analysis_tab.controls_row.addWidget(disp_card, 1) + + # Canvas wrapper: expands to fill available space — canvas only, no extra row + canvas_wrapper = QWidget() + canvas_wrapper.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + vbox = QVBoxLayout(canvas_wrapper) + vbox.setContentsMargins(0, 0, 0, 0) + vbox.setSpacing(0) + vbox.addWidget(self.canvas, 1) # stretch=1 so canvas claims all height + + # ── Swap placeholder with canvas wrapper ────────────────────────────── + placeholder = self.analysis_tab.diagram_placeholder + diagram_layout = placeholder.parentWidget().layout() + diagram_layout.replaceWidget(placeholder, canvas_wrapper) + placeholder.hide() + + # Give canvas_wrapper vertical priority; lock the right panel to fixed + if diagram_layout is not None: + for i in range(diagram_layout.count()): + item = diagram_layout.itemAt(i) + if item and item.widget(): + widget = item.widget() + if widget is canvas_wrapper: + diagram_layout.setStretchFactor(widget, 1) + else: + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + diagram_layout.setStretchFactor(widget, 0) + + # ── Four stacked subplots ───────────────────────────────────────────── + gs = self.figure.add_gridspec(4, 1, height_ratios=[0.55, 1, 1, 1], hspace=0.70) + self.ax_scheme = self.figure.add_subplot(gs[0]) + self.ax_bmd = self.figure.add_subplot(gs[1]) + self.ax_sfd = self.figure.add_subplot(gs[2]) + self.ax_defl = self.figure.add_subplot(gs[3]) + self.figure.subplots_adjust(left=0.12, right=0.96, top=0.97, bottom=0.08) + + # ── Graph engine: owns all render/draw logic ────────────────────────── + if hasattr(self._main_window, "backend") and hasattr(self._main_window.backend, "build_graph_engine"): + self.graph_engine = self._main_window.backend.build_graph_engine( + self.figure, self.ax_scheme, self.ax_bmd, self.ax_sfd, self.ax_defl, + result_handler=self._result_handler, + ) + else: + self.graph_engine = GirderGraphEngine( + self.figure, self.ax_scheme, self.ax_bmd, self.ax_sfd, self.ax_defl, + result_handler=self._result_handler, + ) + + # Legacy compatibility shim for upstream output_dock._inject_and_plot + self.graph_engine._cached_model = None + self.graph_engine._cached_results = None + if not hasattr(self.graph_engine, "build_girder_map"): + self.graph_engine.build_girder_map = lambda: None + + # Schematic: frameless + self.ax_scheme.set_facecolor('#ffffff') + self.ax_scheme.grid(False) + for spine in self.ax_scheme.spines.values(): + spine.set_visible(False) + self.ax_scheme.set_yticks([]) + self.ax_scheme.set_ylabel("") + + # Data axes: show all four spines as a visible frame + for ax in (self.ax_bmd, self.ax_sfd, self.ax_defl): + ax.set_facecolor('#ffffff') + ax.grid(False) + for spine in ax.spines.values(): + spine.set_visible(True) + spine.set_linewidth(0.8) + spine.set_color('#cccccc') + ax.set_yticks([]) + ax.set_ylabel("") + ax.axhline(0, color='black', linewidth=0, clip_on=True) + + self.ax_defl.invert_yaxis() + + # ── Side-fields: swap QLineEdit → QLabel for multi-line HTML display ── + # Spacers are now baked as fixed addSpacing() in steel_design_analysis.py — + # this loop only performs the widget swap; no spacer manipulation needed. + _VALUE_LABEL_STYLE = """ + QLabel { + background-color: #f4f4f4; + border: 1px solid black; + border-radius: 5px; + color: #000000; + font-size: 11px; + padding: 1px 7px; + } + """ + + for key, field in list(self.analysis_tab.x_fields.items()): + lbl = QLabel() + lbl.setAlignment(Qt.AlignCenter) + lbl.setWordWrap(True) + lbl.setMinimumWidth(110) + lbl.setStyleSheet(_VALUE_LABEL_STYLE) + lbl.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + + parent_widget = field.parentWidget() + if parent_widget and parent_widget.layout(): + parent_layout = parent_widget.layout() + for i in range(parent_layout.count()): + item = parent_layout.itemAt(i) + if item and item.layout(): + sub_layout = item.layout() + for j in range(sub_layout.count()): + if sub_layout.itemAt(j).widget() == field: + sub_layout.replaceWidget(field, lbl) + field.hide() + field.deleteLater() + self.analysis_tab.x_fields[key] = lbl + break + + # Apply uniform alignment/policy to all result and position fields + all_rhs_fields = ( + list(self.analysis_tab.result_fields.values()) + + list(self.analysis_tab.x_fields.values()) + + [getattr(self.analysis_tab, "x_input", None)] + ) + for field in all_rhs_fields: + if field: + field.setAlignment(Qt.AlignCenter) + field.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + + # ── Signal wiring ───────────────────────────────────────────────────── + self.tabs.currentChanged.connect(self._on_tab_changed) + self.analysis_tab.member_combo.currentIndexChanged.connect(self._update_analysis_plots) + self.analysis_tab.load_combo.currentIndexChanged.connect(self._on_load_combo_changed) + if hasattr(self.analysis_tab, "component_combo"): + self.analysis_tab.component_combo.currentIndexChanged.connect(self._update_analysis_plots) + self.analysis_tab.component_combo.currentIndexChanged.connect( + self.analysis_tab.update_rhs_labels + ) + self.canvas.mpl_connect('button_press_event', self._on_canvas_click) + self.canvas.mpl_connect('key_press_event', self._on_key_press) + self.canvas.setFocusPolicy(Qt.StrongFocus) + + # ── Interactive cursor state ────────────────────────────────────────── + self._current_x = None + self._current_bmd = None + self._current_sfd = None + self._current_defl = None + self._cursor_lines = [] + self._cursor_x = None # exact x position (may be between nodes) + + # ── UI initialisation state ─────────────────────────────────────────── + self._data_initialized = False + + # ========================================================================= + # EVENT HANDLERS + # ========================================================================= + + def _on_tab_changed(self, index): + """ + Entry point for the Analysis Results tab (index 1). + Populates dropdowns on first visit, then triggers a plot render. + All data comes from the injected PlateGirderAnalysisResults instance. + """ + if index != 1: + return + + if self._result_handler is None: + self.graph_engine.show_blank_state( + self.canvas, + "Run Design first to see analysis results." + ) + return + + if not self._data_initialized: + self._populate_member_combo() + self._populate_load_combo() + self._data_initialized = True + + self._update_analysis_plots() + + @property + def _interaction_mode(self) -> str: + """Return the active display mode based on radio button selection.""" + return "Maximum Values" if getattr(self, "radio_max", None) and self.radio_max.isChecked() else "Scroll for Values" + + def _on_interaction_mode_changed(self, checked=None): + """ + Respond to radio button selection changes. + Resets cursor to position 0 when switching to Scroll for Values mode, + then refreshes the right-panel fields and redraws cursor lines. + """ + if checked is False: + return + if self._interaction_mode == "Scroll for Values": + self._cursor_idx = 0 + self._cursor_x = None + self._update_right_panel_for_mode() + self.graph_engine.draw_cursors( + self._interaction_mode, + getattr(self, '_cursor_x', None), + self._current_x, + getattr(self, '_current_max_dict', {}), + self.canvas, + ) + + def _on_canvas_click(self, event): + """ + Handle mouse clicks on the matplotlib canvas. + In Scroll for Values mode, moves the cursor to the exact click x-position + (clamped to the girder span) and interpolates BMD / SFD / Deflection values. + Works for any x, not just mesh node positions. + """ + if self._interaction_mode != "Scroll for Values": + return + if event.xdata is None or self._current_x is None: + return + + # Accept any x within the span; values are interpolated in _update_right_panel_for_mode + self._cursor_x = float(np.clip(event.xdata, self._current_x[0], self._current_x[-1])) + # Track nearest node index for arrow-key navigation continuity + idx = int(np.searchsorted(self._current_x, self._cursor_x, side='right')) - 1 + self._cursor_idx = max(0, min(len(self._current_x) - 1, idx)) + + self._update_right_panel_for_mode() + self.graph_engine.draw_cursors( + self._interaction_mode, + getattr(self, '_cursor_x', None), + self._current_x, + getattr(self, '_current_max_dict', {}), + self.canvas, + ) + + def _on_key_press(self, event): + """ + Move the interactive cursor left or right through structural nodes + using the arrow keys. Each step snaps to the next/previous node. + Only active in Scroll for Values mode. + """ + if self._interaction_mode != "Scroll for Values": + return + if self._current_x is None: + return + + idx = getattr(self, "_cursor_idx", 0) + if event.key == "left": + self._cursor_idx = max(0, idx - 1) + elif event.key == "right": + self._cursor_idx = min(len(self._current_x) - 1, idx + 1) + else: + return + + # Arrow keys snap exactly to node positions + self._cursor_x = float(self._current_x[self._cursor_idx]) + self._update_right_panel_for_mode() + self.graph_engine.draw_cursors( + self._interaction_mode, + getattr(self, '_cursor_x', None), + self._current_x, + getattr(self, '_current_max_dict', {}), + self.canvas, + ) + + + + # ========================================================================= + # LOAD COMBO CHANGE HANDLER + # ========================================================================= + + def _on_load_combo_changed(self, index: int) -> None: + """ + Called when the load combination dropdown selection changes. + + If the user navigates onto a category header item (which is + disabled / non-selectable), this handler automatically advances + the selection to the next real load case in the appropriate + direction, then delegates to ``_update_analysis_plots``. + """ + combo = self.analysis_tab.load_combo + model = combo.model() + n = combo.count() + + if n == 0: + return + + # Check whether the current item is a non-selectable header + item = model.item(index) if model and 0 <= index < n else None + if item and not item.isEnabled(): + # Try scanning forward first, then backward + for direction in (+1, -1): + candidate = index + direction + while 0 <= candidate < n: + cand_item = model.item(candidate) + if cand_item and cand_item.isEnabled(): + combo.blockSignals(True) + combo.setCurrentIndex(candidate) + combo.blockSignals(False) + break + candidate += direction + else: + continue + break # found a valid candidate — stop scanning + return # setCurrentIndex will re-trigger this slot + + self._update_analysis_plots() + + # ========================================================================= + # DROPDOWN POPULATION HELPERS + # ========================================================================= + + def _populate_member_combo(self): + """Populate the member dropdown with human-readable girder names.""" + def _girder_display_name(key: str, idx: int) -> str: + """ + Map raw BFS girder key to a human-readable dropdown label. + EB1/EB2 → 'Edge Beam 1' / 'Edge Beam 2' + G1…Gn → 'Girder 1' … 'Girder n' + Anything else → key as-is (safe fallback) + """ + if key == "EB1": + return "Edge Beam 1" + if key == "EB2": + return "Edge Beam 2" + if key.startswith("G") and key[1:].isdigit(): + return f"Girder {key[1:]}" + return key # fallback: show raw key + + combo = self.analysis_tab.member_combo + combo.blockSignals(True) + combo.clear() + for idx, key in enumerate(self.graph_engine.get_girder_keys()): + combo.addItem(_girder_display_name(key, idx), userData=key) + combo.blockSignals(False) + + # ── Category-header helper ──────────────────────────────────────────────── + @staticmethod + def _add_combo_header(combo, text: str) -> None: + """ + Add a non-selectable bold category header to *combo*. + The item is styled to look like a section separator. + """ + combo.addItem(text) + model = combo.model() + idx = combo.count() - 1 + item = model.item(idx) + if item: + item.setEnabled(False) + f = QFont() + f.setBold(True) + f.setPointSize(9) + item.setFont(f) + item.setForeground(QColor("#6c6c6c")) + + def _populate_load_combo(self): + """ + Populate the load combination dropdown from the actual load cases + present in the cached results, grouped into three categories: + + ── Dead Loads ── + girder self weight + Deck slab load + … + ── Static Vehicle Loads ── + Case1 ClassA L1 + … + ── Moving Vehicle Loads ── + Moving Case1 ClassA L1 at global position … + … + + Category headers are bold and non-selectable. Each group is only + added when it contains at least one item. The first real (selectable) + load case is selected after population. + """ + combo = self.analysis_tab.load_combo + classified = self.graph_engine.get_classified_loadcases() + + dead_lcs = classified.get("dead", []) + static_lcs = classified.get("vehicle_static", []) + moving_lcs = classified.get("vehicle_moving", []) + + # Ensure 'girder self weight' is first among dead loads + preferred = "girder self weight" + if preferred in dead_lcs: + dead_lcs.remove(preferred) + dead_lcs = [preferred] + dead_lcs + + combo.blockSignals(True) + combo.clear() + + first_selectable_idx = None + + # ── Dead Loads ──────────────────────────────────────────────────────── + if dead_lcs: + self._add_combo_header(combo, "── Dead Loads ──") + for lc in dead_lcs: + combo.addItem(lc) + if first_selectable_idx is None: + first_selectable_idx = combo.count() - 1 + + # ── Static Vehicle Loads ────────────────────────────────────────────── + if static_lcs: + self._add_combo_header(combo, "── Static Vehicle Loads ──") + for lc in static_lcs: + combo.addItem(lc) + if first_selectable_idx is None: + first_selectable_idx = combo.count() - 1 + + # ── Moving Vehicle Loads ────────────────────────────────────────────── + if moving_lcs: + self._add_combo_header(combo, "── Moving Vehicle Loads ──") + for lc in moving_lcs: + combo.addItem(lc) + if first_selectable_idx is None: + first_selectable_idx = combo.count() - 1 + + # Select the first real item so nothing tries to look up a header + if first_selectable_idx is not None: + combo.setCurrentIndex(first_selectable_idx) + elif combo.count() > 0: + combo.setCurrentIndex(0) + + combo.blockSignals(False) + + # ========================================================================= + # PLOT RENDERING + # ========================================================================= + + def _update_analysis_plots(self, *_args): + """ + Master orchestrator called when the girder, load combination, or component + selection changes. Delegates data extraction and peak computation to the + graph engine, then renders all plots and refreshes the right-hand panel. + """ + engine = self.graph_engine + + if self._result_handler is None: + engine.show_blank_state(self.canvas) + return + + combo = self.analysis_tab.member_combo + member_key = combo.currentData() or combo.currentText() + loadcase = self.analysis_tab.load_combo.currentText() + + # Reject header/separator items (they start with '──') + if not loadcase or loadcase.startswith("──"): + return + + if not member_key or not self.graph_engine.get_girder_keys(): + return + + # ── Determine active component ──────────────────────────────────────── + comp_idx = 0 + if hasattr(self.analysis_tab, "component_combo"): + comp_idx = self.analysis_tab.component_combo.currentIndex() + + # Maps: (bmd_force_key, sfd_force_key, defl_disp_key, rhs_labels, max_field_keys) + # rhs_labels use HTML subscripts for the side-row label text + _COMPONENT_CFG = [ + # Major + ("Mz_i", "Vy_i", "dy", + ("Mz (kNm)", "Vy (kN)", "Dy (mm)"), + ("M_z", "V_y", "D_y")), + # Minor + ("My_i", "Vz_i", "dz", + ("My (kNm)", "Vz (kN)", "Dz (mm)"), + ("M_y", "V_z", "D_z")), + # Axial + ("Mx_i", "Fx_i", "dx", + ("Mx (kNm)", "Fx (kN)", "Dx (mm)"), + ("M_x", "F_x", "D_x")), + ] + bmd_key, sfd_key, defl_key, rhs_labels, max_keys = _COMPONENT_CFG[min(comp_idx, 2)] + + result = engine.extract_member_results(member_key, loadcase, bmd_key, sfd_key) + if result is None: + engine.show_blank_state(self.canvas) + return + + xs, bmd_values, sfd_values, defl_values, all_data = result + self._current_x = xs + self._current_bmd = bmd_values + self._current_sfd = sfd_values + self._current_defl = defl_values + + self._current_max_dict = engine.compute_maximums( + xs, bmd_values, sfd_values, all_data + ) + + # ── Append support reactions to dict ────────────────────────────────── + try: + if len(sfd_values) >= 2: + # The first value is the shear strictly at the left support (x=0) + # The second-to-last value is the shear at the right support (x=L) + # (since the very last value at index -1 was padded with 0.0) + self._current_max_dict["R_A"] = float(abs(sfd_values[0])) + self._current_max_dict["R_B"] = float(abs(sfd_values[-2])) + except Exception: + pass + + # ── Update RHS field labels to match the active component ───────────── + # Rebuild x_fields mapping so that _update_right_panel_for_mode uses + # the correct keys regardless of which component is selected. + fields = list(self.analysis_tab.x_fields.values()) + new_keys = list(max_keys) # e.g. ["M_z", "V_y", "D_y"] + self.analysis_tab.x_fields = dict(zip(new_keys, fields)) + + # Update the side-row label widgets text + lbl_texts = list(rhs_labels) + for field, lbl_text in zip(fields, lbl_texts): + parent_widget = field.parentWidget() + if parent_widget and parent_widget.layout(): + sub = parent_widget.layout() + for j in range(sub.count()): + w = sub.itemAt(j).widget() if sub.itemAt(j) else None + if isinstance(w, QLabel) and w is not field: + w.setText(lbl_text) + break + + self._current_max_keys = max_keys + + engine.clear_axes(self.canvas) + + # ── Gather reactions for scheme label overlay ───────────────────────────── + _reactions = None + try: + _reactions = engine.extract_reactions(loadcase, member_key) + except Exception: + pass # Non-fatal: scheme renders without reaction labels + + # ── Gather load descriptors for scheme load overlay ─────────────────────── + _loads = None + try: + _loads = engine.extract_loads(loadcase) or None + except Exception: + pass # Non-fatal: scheme renders without load overlays + + engine.render_plots( + xs, bmd_values, sfd_values, self.canvas, + reactions=_reactions, + loads=_loads, + defl_values=defl_values, + ) + self._update_value_fields(self._current_max_dict, max_keys) + self._on_interaction_mode_changed() + + # ========================================================================= + # UI UPDATE HELPERS + # ========================================================================= + + def _update_value_fields(self, max_dict, max_keys=None): + """ + Populate the left-panel summary result fields with the computed maximum + values for all components. + """ + mapping = [ + # Units stripped from value text — unit is shown in the row label. + ("T_x", "T_x", "{:.2f}"), + ("M_y", "M_y", "{:.2f}"), + ("M_z", "M_z", "{:.2f}"), + ("F_x", "F_x", "{:.2f}"), + ("V_y", "V_y", "{:.2f}"), + ("V_z", "V_z", "{:.2f}"), + ("D_x", "D_x", "{:.2f}"), + ("D_y", "D_y", "{:.2f}"), + ("D_z", "D_z", "{:.2f}"), + ("R_A", "R_A", "{:.2f}"), + ("R_B", "R_B", "{:.2f}"), + ] + for dict_key, field_key, fmt in mapping: + if field_key in self.analysis_tab.result_fields: + val = max_dict.get(dict_key, 0.0) + self.analysis_tab.result_fields[field_key].setText(fmt.format(val)) + + def _update_right_panel_for_mode(self): + """ + Refresh the right-column position/value labels based on the active mode. + + Maximum Values mode : shows each diagram's peak value and x-position + on two lines; expands label height to 55 px. + Interactive mode : shows the value at the current cursor index + on a single line; compresses label height to 35 px. + + This method is component-agnostic: it reads x_fields keys that are + remapped by _update_analysis_plots whenever the component changes. + """ + if self._current_x is None: + return + + mode = self._interaction_mode + xf = self.analysis_tab.x_fields # {bmd_key: label, sfd_key: label, defl_key: label} + keys = list(xf.keys()) # [bmd_key, sfd_key, defl_key] + + # Unit suffix helpers for single-line interactive labels + def _unit(k): + if k.startswith("D"): + return "mm" + elif k.startswith("M"): + return "kNm" + return "kN" + + if mode == "Maximum Values": + max_d = getattr(self, "_current_max_dict", {}) + vals = [max_d.get("M_max", 0.0), max_d.get("V_max", 0.0), max_d.get("D_max", 0.0)] + x_pos = [max_d.get("x_M", 0.0), max_d.get("x_V", 0.0), max_d.get("x_D", 0.0)] + # Value unit stripped — shown in row label ("M_z (kNm)" etc.). + # Position '... at x = N.NN m' keeps 'm' (positional context, not force unit). + fmts = ["{:.2f}
at x = {x:.2f} m", + "{:.2f}
at x = {x:.2f} m", + "{:.2f}
at x = {x:.2f} m"] + + if hasattr(self.analysis_tab, "x_input"): + self.analysis_tab.x_input.setText("Multiple") + self.analysis_tab.x_input.setFixedHeight(55) + + for key, val, xp, fmt in zip(keys, vals, x_pos, fmts): + if key in xf: + xf[key].setFixedHeight(55) + xf[key].setText(fmt.format(val, x=xp)) + + else: # "Scroll for Values" + # Use the exact cursor x-position (set by click or arrow key). + # Fall back to node 0 if not yet set. + cx = getattr(self, "_cursor_x", None) + if cx is None: + self._cursor_idx = getattr(self, "_cursor_idx", 0) + self._cursor_idx = max(0, min(len(self._current_x) - 1, self._cursor_idx)) + cx = float(self._current_x[self._cursor_idx]) + self._cursor_x = cx + + # Linearly interpolate each diagram at the exact cursor x + interp_data = [self._current_bmd, self._current_sfd] + # Only include deflection if it's a real array, not None + if self._current_defl is not None and len(self._current_defl) == len(self._current_x): + interp_data.append(self._current_defl) + else: + interp_data.append(np.zeros_like(self._current_x)) + + # Value unit stripped — shown in row label. Precision unchanged. + fmts_scalar = ["{:.2f}", "{:.2f}", "{:.2f}"] + + if hasattr(self.analysis_tab, "x_input"): + self.analysis_tab.x_input.setText(f"{cx:.2f}") # numerical position only + self.analysis_tab.x_input.setFixedHeight(35) + + for key, data, fmt in zip(keys, interp_data, fmts_scalar): + if key in xf: + val = float(np.interp(cx, self._current_x, data)) + xf[key].setFixedHeight(35) + xf[key].setText(fmt.format(val)) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py index 7438384db..cb9248cf9 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py @@ -1,23 +1,23 @@ +from __future__ import annotations from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, - QGridLayout, QLabel, QLineEdit, QFrame, QSizePolicy, - QSpacerItem, + QGroupBox, ) from PySide6.QtCore import Qt from osdagbridge.desktop.ui.docks.output_dock import ( NoScrollComboBox, ) -from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea -# From load_combination_tab.py defaults + output_dock +# Fallback load combination labels used to pre-populate the dropdown before +# live load cases are discovered from the analyser results. LOAD_COMBINATIONS = [ "Envelope", "DL + LL", @@ -26,15 +26,146 @@ "WL", "EL", "IMF", "TL", ] +# Design tokens — copied verbatim from output_dock.apply_field_style() +# so every control matches the rest of the OsdagBridge application. + +# Read-only result fields (grey background, black border like main app) +_FIELD_STYLE = """ + QLineEdit { + padding: 1px 7px; + border: 1px solid black; + border-radius: 5px; + background-color: #f4f4f4; + color: #000000; + font-size: 11px; + font-weight: normal; + } +""" + +# Interactive field — e.g. the x-position field (white, editable) +_FIELD_STYLE_WHITE = """ + QLineEdit { + padding: 1px 7px; + border: 1px solid black; + border-radius: 5px; + background-color: white; + color: #000000; + font-size: 11px; + font-weight: normal; + } +""" + +# Combo box — exact match for output_dock.apply_field_style(QComboBox) +_COMBO_STYLE = """ + QComboBox { + padding: 1px 7px; + border: 1px solid black; + border-radius: 5px; + background-color: white; + color: black; + font-size: 11px; + min-height: 28px; + } + QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + border-left: 0px; + } + QComboBox::down-arrow { + image: url(:/vectors/arrow_down_light.svg); + width: 20px; + height: 20px; + margin-right: 8px; + } + QComboBox::down-arrow:on { + image: url(:/vectors/arrow_up_light.svg); + width: 20px; + height: 20px; + margin-right: 8px; + } + QComboBox QAbstractItemView { + background-color: white; + border: 1px solid black; + outline: none; + } + QComboBox QAbstractItemView::item { + color: black; + background-color: white; + border: 1px solid white; + border-radius: 0; + padding: 2px; + } + QComboBox QAbstractItemView::item:hover { + border: 1px solid #90AF13; + background-color: #90AF13; + color: black; + } + QComboBox QAbstractItemView::item:selected { + background-color: #90AF13; + color: black; + border: 1px solid #90AF13; + } +""" + +# Outer panel/card borders — same grey as input/output docks +_CARD_STYLE = ( + "QFrame#girderCard { " + "background-color: white; " + "border: 1px solid #b0b0b0; " + "border-radius: 6px; " + "}" +) + +# Inner QGroupBox (Support Reactions / Maximum Values) — matches _analysis_group_style +_GROUP_STYLE = """ + QGroupBox { + font-weight: bold; + font-size: 11px; + color: #000000; + border: 1px solid #b0b0b0; + border-radius: 6px; + margin-top: 8px; + padding-top: 14px; + background-color: white; + } + QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + left: 8px; + padding: 0 4px; + background-color: #f5f5f5; + } +""" + +# Fixed width for form-row labels — keeps all input fields left-aligned at the same x offset. +_LABEL_MIN_W = 130 + class SteelDesignAnalysisTab(QWidget): + """ + Analysis Results tab for the Steel Design dialog. + + Layout + ────── + QScrollArea + └── container (QVBoxLayout) + └── main_row (QHBoxLayout) + ├── left_panel (fixed 350 px) + │ ├── Selection card [Member ID | Load Combination] + │ └── Results card [Support Reactions | Maximum Values] + └── diagram_card (expanding) + ├── controls_row [Component card | Display Location card] + ├── separator + └── inner_row + ├── diagram_placeholder (FigureCanvas injected at runtime) + └── right_col [x_input | M_z | V_y | D_y] + """ def __init__(self, parent=None): self.result_fields = {} self.x_fields = {} super().__init__(parent) - self.setStyleSheet("background-color: white;") main_layout = QVBoxLayout(self) @@ -46,14 +177,12 @@ def __init__(self, parent=None): container = QWidget() container.setStyleSheet("background-color: white;") - # Same margins/spacing as girder_details_tab content_layout container_layout = QVBoxLayout(container) container_layout.setContentsMargins(10, 10, 10, 10) - container_layout.setSpacing(12) + container_layout.setSpacing(6) - # ── MAIN ROW ───────────────────────────────────────────────────────── main_row = QHBoxLayout() - main_row.setSpacing(12) + main_row.setSpacing(10) main_row.setContentsMargins(0, 0, 0, 0) main_row.addWidget(self._build_left_panel(), 0) @@ -65,230 +194,392 @@ def __init__(self, parent=None): scroll_area.setWidget(container) main_layout.addWidget(scroll_area) - # ── HELPERS — exact girder_details_tab pattern ─────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # WIDGET FACTORY HELPERS + # ───────────────────────────────────────────────────────────────────────── - def _create_card_frame(self): - """Outer card — same as GirderDetailsTab._create_card_frame.""" + def _card_frame(self): + """Outer panel card — consistent grey rounded border.""" frame = QFrame() frame.setObjectName("girderCard") - frame.setStyleSheet( - "QFrame#girderCard { background-color: white; border: 1px solid #cfcfcf; border-radius: 10px; }" - ) + frame.setStyleSheet(_CARD_STYLE) return frame - def _create_label(self, text): - """Section title — same as GirderDetailsTab._create_label.""" - label = QLabel(text) - label.setStyleSheet( - "font-size: 12px; color: #2f2f2f; font-weight: 600; background: transparent;" + def _section_title(self, text): + """Bold section header — matches label style in other docks.""" + lbl = QLabel(text) + lbl.setStyleSheet( + "font-size: 13px; color: #2B2B2B; font-weight: bold; background: transparent; border: none;" ) - label.setAutoFillBackground(False) - return label + return lbl - def _create_small_label(self, text): - """Row label — same as GirderDetailsTab._create_small_label.""" - label = QLabel(text) - label.setTextFormat(Qt.RichText) - label.setStyleSheet("font-size: 10px; color: #5a5a5a; background: transparent;") - label.setAutoFillBackground(False) - return label + def _row_label(self, text): + """Left-column label for a form row.""" + lbl = QLabel(text) + lbl.setTextFormat(Qt.RichText) + lbl.setStyleSheet("font-size: 11px; color: #333333; background: transparent;") + lbl.setFixedWidth(_LABEL_MIN_W) + lbl.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) + return lbl def _side_label(self, text): - """Short label beside diagram fields.""" + """Label shown beside RHS diagram value fields.""" lbl = QLabel(text) lbl.setTextFormat(Qt.RichText) - lbl.setStyleSheet("font-size: 10px; color: #5a5a5a; background: transparent;") - lbl.setFixedWidth(40) + lbl.setStyleSheet( + "font-size: 11px; color: #333333; background: transparent;" + ) + lbl.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + lbl.setAlignment(Qt.AlignRight | Qt.AlignVCenter) return lbl - def _make_grid(self): - grid = QGridLayout() - grid.setContentsMargins(0, 0, 0, 0) - grid.setHorizontalSpacing(16) - grid.setVerticalSpacing(12) - grid.setColumnMinimumWidth(0, 180) - grid.setColumnStretch(0, 0) - grid.setColumnStretch(1, 0) - grid.setColumnStretch(2, 1) - return grid - def _readonly_field(self): + """Read-only result field — fixed 28×160 px to match every other form field.""" field = QLineEdit() field.setReadOnly(True) - field.setFixedWidth(150) - field.setMinimumHeight(28) + field.setFixedHeight(28) + field.setFixedWidth(160) field.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - apply_field_style(field) + field.setStyleSheet(_FIELD_STYLE) + field.setAlignment(Qt.AlignCenter) return field def _side_field(self): + """Compact read-only field displayed beside the plots.""" field = QLineEdit() field.setReadOnly(True) - field.setFixedWidth(120) - field.setMinimumHeight(28) - field.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - apply_field_style(field) + field.setFixedHeight(28) + field.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + field.setAlignment(Qt.AlignCenter) + field.setStyleSheet(_FIELD_STYLE) return field - def _add_row(self, grid, row, text, widget): - grid.addWidget(self._create_small_label(text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) - grid.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) - return row + 1 + def _styled_combo(self, width=160): + """Combo box styled identically to output_dock.apply_field_style.""" + combo = NoScrollComboBox() + if width > 0: + combo.setFixedWidth(width) + combo.setFixedHeight(28) + combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + combo.setStyleSheet(_COMBO_STYLE) + return combo + + def _form_row(self, label_text, widget, layout): + """ + Append a (label, widget) row to *layout* as a QHBoxLayout. + Fixed-width label ensures all field widgets start at the same x offset. + """ + row = QHBoxLayout() + row.setSpacing(8) + row.setContentsMargins(0, 0, 0, 0) + row.addWidget(self._row_label(label_text)) + row.addWidget(widget) + row.addStretch() + layout.addLayout(row) + + def _diagram_side_row(self, label_widget, field_widget): + """Return a QHBoxLayout with a fixed-width right-aligned label + field.""" + row = QHBoxLayout() + row.setSpacing(4) + row.setContentsMargins(0, 2, 0, 2) + row.addWidget(label_widget, 0) # label: fixed to its natural size + row.addWidget(field_widget, 1) # widget: takes all remaining width + return row - # ── LEFT PANEL ──────────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # LEFT PANEL + # ───────────────────────────────────────────────────────────────────────── def _build_left_panel(self): + """Build the fixed-width left panel containing the selection and results cards.""" panel = QWidget() panel.setStyleSheet("background-color: transparent;") - panel.setFixedWidth(360) + # Width = 350: leaves 350-26(card margins)-22(groupbox border+margins)=302px + # for 130(label)+8(spacing)+160(field)=298px — 4px breathing room each side + panel.setFixedWidth(350) panel.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Preferred) layout = QVBoxLayout(panel) layout.setContentsMargins(0, 0, 0, 0) - layout.setSpacing(12) + layout.setSpacing(10) - # ── Selection card ──────────────────────────────────────────────────── - sel_card = self._create_card_frame() + # ── Selection card ──────────────────────────────────────────── + sel_card = self._card_frame() sel_layout = QVBoxLayout(sel_card) - sel_layout.setContentsMargins(18, 16, 18, 16) - sel_layout.setSpacing(10) - sel_layout.addWidget(self._create_label("Selection:")) - - sel_grid = self._make_grid() + # Left margin = 23 to match effective indent of Results group box fields: + # Results: card_L(12) + groupbox_border(1) + groupbox_margin_L(10) = 23px + sel_layout.setContentsMargins(23, 10, 14, 12) + sel_layout.setSpacing(8) + sel_layout.addWidget(self._section_title("Select Member")) - self.member_combo = NoScrollComboBox() - apply_field_style(self.member_combo) - self.member_combo.setFixedWidth(150) - self.member_combo.setMinimumHeight(28) - self.member_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.member_combo = self._styled_combo() self.member_combo.addItems(["All", "Girder 1", "Girder 2"]) - self.load_combo = NoScrollComboBox() - apply_field_style(self.load_combo) - self.load_combo.setFixedWidth(150) - self.load_combo.setMinimumHeight(28) - self.load_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.load_combo = self._styled_combo() self.load_combo.addItems(LOAD_COMBINATIONS) - r = 0 - r = self._add_row(sel_grid, r, "Member ID:", self.member_combo) - r = self._add_row(sel_grid, r, "Load Combination:", self.load_combo) - sel_layout.addLayout(sel_grid) + self._form_row("Member ID:", self.member_combo, sel_layout) + self._form_row("Load Combination:", self.load_combo, sel_layout) + layout.addWidget(sel_card) - # ── Results card ────────────────────────────────────────────────────── - res_card = self._create_card_frame() + # ── Results card ────────────────────────────────────────────── + res_card = self._card_frame() res_layout = QVBoxLayout(res_card) - res_layout.setContentsMargins(18, 16, 18, 16) - res_layout.setSpacing(10) - res_layout.addWidget(self._create_label("Results:")) - - res_grid = self._make_grid() - r = 0 + res_layout.setContentsMargins(12, 10, 14, 12) + res_layout.setSpacing(8) + res_layout.addWidget(self._section_title("Results")) + + # Support Reactions sub-group + reac_group = QGroupBox("Support Reactions") + reac_group.setStyleSheet(_GROUP_STYLE) + reac_inner = QVBoxLayout(reac_group) + reac_inner.setContentsMargins(10, 8, 10, 10) + reac_inner.setSpacing(8) + for key, label in [ + ("R_A", "RA (kN)"), + ("R_B", "RB (kN)"), + ]: + field = self._readonly_field() + self.result_fields[key] = field + # Build the row manually so we can force font-weight: normal + # on the label, overriding QGroupBox bold cascade. + row_lbl = self._row_label(label) + row_lbl.setStyleSheet( + "font-size: 11px; font-weight: normal; " + "color: #333333; background: transparent;" + ) + row = QHBoxLayout() + row.setSpacing(8) + row.setContentsMargins(0, 0, 0, 0) + row.addWidget(row_lbl) + row.addWidget(field) + row.addStretch() + reac_inner.addLayout(row) + + # Maximum Values sub-group + max_group = QGroupBox("Maximum Values") + max_group.setStyleSheet(_GROUP_STYLE) + max_inner = QVBoxLayout(max_group) + max_inner.setContentsMargins(8, 8, 8, 10) + max_inner.setSpacing(8) for key, label in [ - ("R_A", "RA"), - ("R_B", "RB"), - ("M_max", "Mmax"), - ("V_max", "Vmax"), - ("D_max", "Dmax"), + ("T_x", "Tx (kNm)"), + ("M_y", "My (kNm)"), + ("M_z", "Mz (kNm)"), + ("F_x", "Fx (kN)"), + ("V_y", "Vy (kN)"), + ("V_z", "Vz (kN)"), + ("D_x", "Dx (mm)"), + ("D_y", "Dy (mm)"), + ("D_z", "Dz (mm)"), ]: field = self._readonly_field() - r = self._add_row(res_grid, r, label, field) self.result_fields[key] = field + self._form_row(label, field, max_inner) - res_layout.addLayout(res_grid) + res_layout.addWidget(reac_group) + res_layout.addWidget(max_group) layout.addWidget(res_card) layout.addStretch() return panel - # ── DIAGRAM SECTION ─────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # DIAGRAM SECTION + # ───────────────────────────────────────────────────────────────────────── def _build_diagram_section(self): """ - Diagram and right-side fields sit side-by-side with NO outer card — - the diagram placeholder itself is the visual element. + Right-hand panel containing: + 1. top_bar — Component combo + Display Location group, both centered + 2. separator + 3. inner_row — FigureCanvas placeholder + RHS value column """ - wrapper = QWidget() - wrapper.setStyleSheet("background: transparent;") - wrapper.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + card = self._card_frame() + card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(12, 10, 24, 12) # 24px right margin keeps all content off the scrollbar + card_layout.setSpacing(6) + + # ── Component titled card ───────────────────────────────────── + comp_card = QFrame() + comp_card.setObjectName("controlCard") + comp_card.setStyleSheet(""" + QFrame#controlCard { + background-color : white; + border : 1px solid #b0b0b0; + border-radius : 6px; + } + QLabel { + border : none; + background : transparent; + } + """) + comp_card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + # Height is allowed to adapt; QHBoxLayout will ensure disp_card matches - inner_row = QHBoxLayout(wrapper) - inner_row.setSpacing(12) + comp_card_layout = QVBoxLayout(comp_card) + comp_card_layout.setContentsMargins(23, 10, 14, 12) + comp_card_layout.setSpacing(4) + + comp_title = QLabel("Component") + comp_title.setStyleSheet( + "font-size: 13px; color: #2B2B2B; font-weight: bold;" + " background: transparent; border: none;" + ) + comp_card_layout.addWidget(comp_title) + + self.component_combo = NoScrollComboBox() + self.component_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.component_combo.setStyleSheet(_COMBO_STYLE) + self.component_combo.addItems([ + "Major (Mz, Vy, Dy)", + "Minor (My, Vz, Dz)", + "Axial (Tx, Fx, Dx)", + ]) + comp_card_layout.addWidget(self.component_combo) + + # ── Display Location titled card placeholder ────────────────── + # SteelDesign._setup_analysis_plots() will build and inject this card. + # We store a reference point so SteelDesign knows where to insert it. + self.disp_card_placeholder = None # filled at runtime + + # ── Controls row: two equal cards side by side ──────────────── + self.controls_row = QHBoxLayout() + self.controls_row.setContentsMargins(0, 0, 0, 0) + self.controls_row.setSpacing(24) # Generous gap to prevent border merge + self.controls_row.addWidget(comp_card, 1) # stretch=1 + # SteelDesign appends the Display Location card with stretch=1 + + card_layout.addLayout(self.controls_row) + + # Create fixed-width labels for RHS diagram value column. + # These are initialised here so update_rhs_labels() can update them + # before the inner_row builds the right_col widget. + self.lbl_x = self._side_label("x (m)") + self.lbl_m = self._side_label("Mz (kNm)") + self.lbl_v = self._side_label("Vy (kN)") + self.lbl_d = self._side_label("Dy (mm)") + + for lbl in (self.lbl_x, self.lbl_m, self.lbl_v, self.lbl_d): + lbl.setFixedWidth(70) + # Separator + sep = QFrame() + sep.setFrameShape(QFrame.HLine) + sep.setStyleSheet("border: none; border-top: 1px solid #e0e0e0;") + sep.setMaximumHeight(1) + card_layout.addWidget(sep) + + # ── Inner row: plots + RHS value column ─────────────────────── + inner_row = QHBoxLayout() + inner_row.setSpacing(10) inner_row.setContentsMargins(0, 0, 0, 0) - # Diagram placeholder — standalone, no card around it + # Diagram placeholder — replaced at runtime with FigureCanvas self.diagram_placeholder = QLabel() - self.diagram_placeholder.setMinimumSize(260, 440) + self.diagram_placeholder.setMinimumSize(260, 300) self.diagram_placeholder.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.diagram_placeholder.setAlignment(Qt.AlignCenter) self.diagram_placeholder.setText("[BMD / SFD / Deflection Diagram]") self.diagram_placeholder.setStyleSheet(""" QLabel { - border: 1px solid #cfcfcf; - background-color: #F5F5F5; - color: #9a9a9a; + border: 1px dashed #b0b0b0; + background-color: #fafafa; + color: #999999; font-size: 10px; - border-radius: 10px; + border-radius: 6px; } """) inner_row.addWidget(self.diagram_placeholder, 1) - # Right column: x input + M_x / V_x / D_x spaced to diagram zones + # ── Right column: x(position) at top; M_z/V_y/D_y vertically centred + # with the 3 subplots via fixed pixel spacers. right_col = QWidget() right_col.setStyleSheet("background: transparent;") - right_col.setFixedWidth(170) - right_col.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) + right_col.setMinimumWidth(180) + right_col.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) right_layout = QVBoxLayout(right_col) - right_layout.setContentsMargins(0, 0, 0, 0) + right_layout.setContentsMargins(6, 0, 6, 0) # 6px padding each side right_layout.setSpacing(0) + # x-position (interactive, white background) self.x_input = QLineEdit() - self.x_input.setFixedWidth(120) - self.x_input.setMinimumHeight(28) - self.x_input.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - apply_field_style(self.x_input) - right_layout.addLayout(self._side_row("x", self.x_input)) - - right_layout.addSpacerItem(QSpacerItem(0, 100, QSizePolicy.Fixed, QSizePolicy.Fixed)) + self.x_input.setPlaceholderText("click plot…") + self.x_input.setFixedHeight(28) + self.x_input.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.x_input.setStyleSheet(_FIELD_STYLE_WHITE) + self.x_input.setAlignment(Qt.AlignCenter) # P3: centre-align position readout + right_layout.addSpacing(35) + right_layout.addLayout(self._diagram_side_row(self.lbl_x, self.x_input)) + + # Fixed spacers derived from gridspec maths so each label's vertical + # centre aligns with the midpoint of its corresponding subplot band. + # + # Gridspec: height_ratios=[0.45, 1, 1, 1], hspace=0.32 + # subplots_adjust: top=0.94, bottom=0.12 → usable height ≈ 475 px (at 580 px canvas) + # + # Subplot vertical centres from canvas top (px, ~580 px canvas): + # ax_scheme centre ≈ 50 px (x_input top-pad = 35 gets mid at ~49 px) + # ax_bmd centre ≈ 154 px → gap after x_input row ≈ 74 px + # ax_sfd centre ≈ 303 px → gap after M_z row ≈ 119 px + # ax_defl centre ≈ 451 px → gap after V_y row ≈ 119 px + # bottom pad ≈ 114 px + right_layout.addSpacing(74) self.mx_field = self._side_field() - right_layout.addLayout(self._side_row("Mx", self.mx_field)) + right_layout.addLayout(self._diagram_side_row(self.lbl_m, self.mx_field)) - right_layout.addSpacerItem(QSpacerItem(0, 100, QSizePolicy.Fixed, QSizePolicy.Fixed)) + right_layout.addSpacing(119) self.vx_field = self._side_field() - right_layout.addLayout(self._side_row("Vx", self.vx_field)) + right_layout.addLayout(self._diagram_side_row(self.lbl_v, self.vx_field)) - right_layout.addSpacerItem(QSpacerItem(0, 100, QSizePolicy.Fixed, QSizePolicy.Fixed)) + right_layout.addSpacing(119) self.dx_field = self._side_field() - right_layout.addLayout(self._side_row("Dx", self.dx_field)) + right_layout.addLayout(self._diagram_side_row(self.lbl_d, self.dx_field)) + right_layout.addSpacing(114) # bottom pad - right_layout.addStretch() - - self.x_fields["M_x"] = self.mx_field - self.x_fields["V_x"] = self.vx_field - self.x_fields["D_x"] = self.dx_field + self.x_fields["M_z"] = self.mx_field + self.x_fields["V_y"] = self.vx_field + self.x_fields["D_y"] = self.dx_field inner_row.addWidget(right_col, 0) - return wrapper + card_layout.addLayout(inner_row, 1) - def _side_row(self, label_text, widget): - row = QHBoxLayout() - row.setSpacing(6) - row.setContentsMargins(0, 0, 0, 0) - row.addWidget(self._side_label(label_text)) - row.addWidget(widget) - row.addStretch() - return row + return card - # ── PUBLIC API ──────────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # PUBLIC API + # ───────────────────────────────────────────────────────────────────────── + + def update_rhs_labels(self, component_index): + """ + Update right-hand panel labels for major (0), minor (1), or axial (2) components. + """ + if component_index == 0: # Major + self.lbl_m.setText("Mz (kNm)") + self.lbl_v.setText("Vy (kN)") + self.lbl_d.setText("Dy (mm)") + elif component_index == 1: # Minor + self.lbl_m.setText("My (kNm)") + self.lbl_v.setText("Vz (kN)") + self.lbl_d.setText("Dz (mm)") + elif component_index == 2: # Axial + self.lbl_m.setText("Mx (kNm)") + self.lbl_v.setText("Fx (kN)") + self.lbl_d.setText("Dx (mm)") def set_girder_count(self, count): - """Mirrors GirderDetailsTab.set_girder_count — no hardcoding.""" + """Repopulate member_combo with 'Girder 1' … 'Girder N' entries.""" self.member_combo.clear() self.member_combo.addItems(["All"] + [f"Girder {i}" for i in range(1, count + 1)]) def load_data(self, cad_state: dict): + """ + Pre-fill fields from a cad_state snapshot (e.g. on dialog open). + Silently ignores missing or invalid entries. + """ if not cad_state: return try: @@ -298,4 +589,5 @@ def load_data(self, cad_state: dict): for key, field in self.result_fields.items(): field.setText(str(cad_state.get(key, ""))) for key, field in self.x_fields.items(): - field.setText(str(cad_state.get(key, ""))) \ No newline at end of file + if hasattr(field, "setText"): + field.setText(str(cad_state.get(key, ""))) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py index 485b1c31b..548c0dcf8 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py @@ -1,3 +1,4 @@ +from __future__ import annotations from PySide6.QtWidgets import ( QWidget, QVBoxLayout, @@ -17,6 +18,8 @@ from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea +_UI_FONT = "font-family: 'Segoe UI', Arial, sans-serif; font-size: 11px;" + # From load_combination_tab.py defaults + output_dock LOAD_COMBINATIONS = [ "Envelope", @@ -26,7 +29,7 @@ "WL", "EL", "IMF", "TL", ] -# 8 design checks from the screenshot — 2 columns × 4 rows +# 8 design checks from the screenshot — 2 columns ├ù 4 rows DESIGN_CHECKS = [ ("flexure", "Strength Limit State (Flexure)"), ("shear_long_trans", "Resistance to Longitudinal and Transverse Shear"), @@ -40,13 +43,36 @@ class SteelDesignCheckTab(QWidget): + """ + Design Check tab for the Steel Design dialog. + + Displays eight IRC code compliance check cards in a two-column grid. + Each card shows a check title and a read-only output area that is + populated at runtime when design results are available. + + Public API + ---------- + set_check_result(key, text) + Write a result string into the named check card output area. + clear_results() + Clear all check output areas. + set_girder_count(count) + Repopulate the Member ID combo with the correct girder count. + load_data(cad_state) + Restore check results from a cad_state snapshot. + + Check keys (used by set_check_result / load_data) + -------------------------------------------------- + ``flexure``, ``shear_long_trans``, ``shear``, ``fatigue``, + ``interaction``, ``stress``, ``ltb``, ``deflection`` + """ def __init__(self, parent=None): - self.check_outputs = {} # key → QTextEdit for each check result + self.check_outputs = {} # key → QTextEdit super().__init__(parent) - # ── identical white bg to SteelDesignDetailsTab ─────────────────────── + # White background — consistent with SteelDesignDetailsTab and SteelDesignAnalysisTab. self.setStyleSheet("background-color: white;") main_layout = QVBoxLayout(self) @@ -62,10 +88,10 @@ def __init__(self, parent=None): container_layout.setContentsMargins(18, 6, 18, 12) container_layout.setSpacing(16) - # ── TOP BAR: Member ID (left) + Load Combination (right) ───────────── + # ── TOP BAR: Member ID (left) + Load Combination (right) ────── container_layout.addLayout(self._build_top_bar()) - # ── CHECK CARDS GRID: 2 columns ─────────────────────────────────────── + # ── CHECK CARDS GRID: 2 columns ─────────────────────────────── container_layout.addLayout(self._build_checks_grid()) container_layout.addStretch() @@ -73,9 +99,12 @@ def __init__(self, parent=None): scroll_area.setWidget(container) main_layout.addWidget(scroll_area) - # ── HELPERS — exact copy from steel_design_details.py ──────────────────── + # ───────────────────────────────────────────────────────────────────────── + # HELPERS — exact copy from steel_design_details.py + # ───────────────────────────────────────────────────────────────────────── def _section_card(self, title): + """Return a borderless card QFrame with a bold title label and a QVBoxLayout.""" card = QFrame() card.setObjectName("sectionCard") card.setStyleSheet(""" @@ -95,12 +124,14 @@ def _section_card(self, title): return card, card_layout def _row_label(self, text): + """Return a left-aligned row label with minimum width 180 px.""" lbl = QLabel(text) - lbl.setStyleSheet("font-size: 13px; color: #000;") + lbl.setStyleSheet(f"{_UI_FONT} color: #333333;") lbl.setMinimumWidth(180) return lbl def _make_grid(self): + """Return a three-column QGridLayout: label | field | stretch.""" grid = QGridLayout() grid.setContentsMargins(0, 0, 0, 0) grid.setHorizontalSpacing(24) @@ -111,6 +142,7 @@ def _make_grid(self): return grid def _readonly_field(self): + """Return a fixed 150×22 px read-only QLineEdit.""" field = QLineEdit() field.setReadOnly(True) field.setFixedWidth(150) @@ -120,20 +152,24 @@ def _readonly_field(self): return field def _add_row(self, grid, row, text, widget): + """Append a (label, widget) row to grid at the given row index; return the next row index.""" grid.addWidget(self._row_label(text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) grid.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) return row + 1 - # ── TOP BAR ─────────────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # TOP BAR + # ───────────────────────────────────────────────────────────────────────── def _build_top_bar(self): + """Build the Member ID and Load Combination selector row.""" bar = QHBoxLayout() bar.setSpacing(24) bar.setContentsMargins(0, 0, 0, 0) # Member ID member_lbl = QLabel("Member ID") - member_lbl.setStyleSheet("font-size: 11px; color: #000;") + member_lbl.setStyleSheet(f"{_UI_FONT} color: #000;") self.member_combo = NoScrollComboBox() apply_field_style(self.member_combo) @@ -149,7 +185,7 @@ def _build_top_bar(self): # Load Combination load_lbl = QLabel("Load Combination:") - load_lbl.setStyleSheet("font-size: 11px; color: #000;") + load_lbl.setStyleSheet(f"{_UI_FONT} color: #000;") self.load_combo = NoScrollComboBox() apply_field_style(self.load_combo) @@ -164,7 +200,9 @@ def _build_top_bar(self): return bar - # ── CHECK CARDS GRID ────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # CHECK CARDS GRID + # ───────────────────────────────────────────────────────────────────────── def _build_checks_grid(self): """ @@ -199,8 +237,8 @@ def _build_check_card(self, key, title): card.setStyleSheet(""" QFrame#checkCard { background-color: white; - border: 1px solid #CFCFCF; - border-radius: 8px; + border: 1px solid #b0b0b0; + border-radius: 6px; } """) card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) @@ -211,15 +249,7 @@ def _build_check_card(self, key, title): # Title title_lbl = QLabel(title) - title_lbl.setStyleSheet(""" - QLabel { - font-size: 11px; - font-weight: bold; - color: #000; - background: transparent; - border: none; - } - """) + title_lbl.setStyleSheet(f"{_UI_FONT.replace('11px','12px')} font-weight: bold; color: #2B2B2B; background: transparent; border: none;") title_lbl.setWordWrap(True) card_layout.addWidget(title_lbl) @@ -228,28 +258,30 @@ def _build_check_card(self, key, title): output.setReadOnly(True) output.setFixedHeight(60) output.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - output.setStyleSheet(""" - QTextEdit { + output.setStyleSheet(f""" + QTextEdit {{ background-color: white; border: none; - font-size: 10px; + {_UI_FONT} color: #333; - } + }} """) card_layout.addWidget(output) self.check_outputs[key] = output return card - # ── PUBLIC API ──────────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # PUBLIC API + # ───────────────────────────────────────────────────────────────────────── def set_girder_count(self, count): - """Mirrors GirderDetailsTab.set_girder_count.""" + """Repopulate the Member ID combo with 'All' plus one entry per girder.""" self.member_combo.clear() self.member_combo.addItems(["All"] + [f"Girder {i}" for i in range(1, count + 1)]) def load_data(self, cad_state: dict): - """Populate from cad_state — populate girder count if available.""" + """Populate check output areas and member combo from a cad_state snapshot.""" if not cad_state: return try: @@ -263,11 +295,11 @@ def load_data(self, cad_state: dict): output.setPlainText(str(result) if result else "") def set_check_result(self, key: str, text: str): - """Set result text for a specific check card.""" + """Write result text into the named check card output area; silently ignores unknown keys.""" if key in self.check_outputs: self.check_outputs[key].setPlainText(text) def clear_results(self): - """Clear all check output areas.""" + """Clear all eight check output areas.""" for output in self.check_outputs.values(): - output.clear() \ No newline at end of file + output.clear() diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py index d7f075ec8..1ff5019f4 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py @@ -1,3 +1,4 @@ +from __future__ import annotations from PySide6.QtWidgets import ( QWidget, QVBoxLayout, @@ -18,8 +19,6 @@ ) from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style - - from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea @@ -30,13 +29,26 @@ def wheelEvent(self, event): class SteelDesignDetailsTab(QWidget): + """ + Scrollable details tab for the Steel Design dialog. + + Displays four read-only information cards: + - Member Info : member ID combo, material grade, section type + - Dimensional Details: full cross-section geometry + - Shear Connector : connector material, geometry, and spacing + - Section Properties : mass, moments of area, moduli, torsion/warping + + Additionally renders a stiffener summary table and two CAD view placeholders + (populated at runtime when a model is mounted). + """ def __init__(self, parent=None): - self.member_fields = {} - self.dim_fields = {} - self.shear_fields = {} - self.section_fields = {} - self.stiffener_fields = {} + # Initialise field dicts before super().__init__ so slots set during + # construction can reference them safely. + self.member_fields = {} + self.dim_fields = {} + self.shear_fields = {} + self.section_fields = {} super().__init__(parent) @@ -56,15 +68,15 @@ def __init__(self, parent=None): container_layout.setContentsMargins(10, 10, 10, 10) container_layout.setSpacing(12) - # ── TOP ROW: Member Info card (left) + CAD placeholder (right) ─────── + # ── TOP ROW: Member Info card (left) + CAD placeholder (right) top_row = QHBoxLayout() top_row.setSpacing(12) top_row.setContentsMargins(0, 0, 0, 0) - top_row.addWidget(self._build_member_section(), 2) - top_row.addWidget(self._build_top_cad_placeholder(), 0) + top_row.addWidget(self._build_member_section(), 1) + top_row.addWidget(self._build_top_cad_placeholder(), 1) container_layout.addLayout(top_row) - # ── BODY: Dimensional + Shear (left) | Section Properties (right) ──── + # ── BODY: Dimensional + Shear (left) | Section Properties (right) body_row = QHBoxLayout() body_row.setSpacing(12) body_row.setContentsMargins(0, 0, 0, 0) @@ -82,14 +94,14 @@ def __init__(self, parent=None): right_col.addWidget(self._build_section_properties_section()) right_col.addStretch() - body_row.addLayout(left_col, 2) + body_row.addLayout(left_col, 1) body_row.addLayout(right_col, 1) container_layout.addLayout(body_row) - # ── STIFFENER TABLE ─────────────────────────────────────────────────── + # ── STIFFENER TABLE ─────────────────────────────────────────── container_layout.addWidget(self._build_stiffener_section()) - # ── BOTTOM CAD placeholder ──────────────────────────────────────────── + # ── BOTTOM CAD placeholder ──────────────────────────────────── container_layout.addWidget(self._build_bottom_cad_section()) container_layout.addStretch() @@ -97,14 +109,16 @@ def __init__(self, parent=None): scroll_area.setWidget(container) main_layout.addWidget(scroll_area) - # ── HELPERS: exact girder_details_tab pattern ───────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # HELPERS: exact girder_details_tab pattern + # ───────────────────────────────────────────────────────────────────────── def _create_card_frame(self): """Outer card — same as GirderDetailsTab._create_card_frame.""" frame = QFrame() frame.setObjectName("girderCard") frame.setStyleSheet( - "QFrame#girderCard { background-color: white; border: 1px solid #cfcfcf; border-radius: 10px; }" + "QFrame#girderCard { background-color: white; border: 1px solid #b0b0b0; border-radius: 6px; }" ) return frame @@ -112,25 +126,26 @@ def _create_label(self, text): """Section title label — same as GirderDetailsTab._create_label.""" label = QLabel(text) label.setStyleSheet( - "font-size: 12px; color: #2f2f2f; font-weight: 600; background: transparent;" + "font-size: 13px; color: #2B2B2B; font-weight: bold; background: transparent; border: none;" ) label.setAutoFillBackground(False) return label def _create_small_label(self, text): - """Row field label — same as GirderDetailsTab._create_small_label.""" + """Row field label — supports HTML rich text for subscripts/superscripts.""" label = QLabel(text) - label.setStyleSheet("font-size: 10px; color: #5a5a5a; background: transparent;") + label.setTextFormat(Qt.RichText) + label.setStyleSheet("font-size: 11px; color: #333333; background: transparent;") label.setAutoFillBackground(False) return label def _readonly_field(self): - """Readonly output field matching inner_box min-height.""" + """Readonly output field — expands to fill its grid column.""" field = QLineEdit() field.setReadOnly(True) - field.setFixedWidth(150) + field.setMinimumWidth(80) field.setMinimumHeight(28) - field.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + field.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) apply_field_style(field) return field @@ -140,18 +155,19 @@ def _make_grid(self): grid.setContentsMargins(0, 0, 0, 0) grid.setHorizontalSpacing(16) grid.setVerticalSpacing(12) - grid.setColumnMinimumWidth(0, 180) - grid.setColumnStretch(0, 0) - grid.setColumnStretch(1, 0) - grid.setColumnStretch(2, 1) + grid.setColumnMinimumWidth(0, 230) + grid.setColumnStretch(0, 0) # label: fits content, doesn't stretch + grid.setColumnStretch(1, 1) # field: fills all remaining width return grid def _add_row(self, grid, row, text, widget): grid.addWidget(self._create_small_label(text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) - grid.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) + grid.addWidget(widget, row, 1) return row + 1 - # ── SECTIONS ────────────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # SECTIONS + # ───────────────────────────────────────────────────────────────────────── def _build_member_section(self): card = self._create_card_frame() @@ -164,9 +180,9 @@ def _build_member_section(self): self.member_combo = NoScrollComboBox() apply_field_style(self.member_combo) - self.member_combo.setFixedWidth(150) + self.member_combo.setMinimumWidth(80) self.member_combo.setMinimumHeight(28) - self.member_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.member_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.grade_field = self._readonly_field() self.type_field = self._readonly_field() @@ -247,42 +263,48 @@ def _build_section_properties_section(self): card_layout.setSpacing(10) card_layout.addWidget(self._create_label("Section Properties:")) + # Reuse the shared grid + row helper so fields behave identically + # to Dimensional Details (left-aligned, same width, no fill-column expansion). grid = self._make_grid() - labels = { - "mass": "Mass, M (Kg/m)", - "area": "Sectional Area (cm\u00b2)", - "iz": "2nd Moment of Area, Iz (cm\u2074)", - "iv": "2nd Moment of Area, Iv (cm\u2074)", - "rz": "Radius of Gyration, rz (cm)", - "rv": "Radius of Gyration, rv (cm)", - "zz": "Elastic Modulus, Zz (cm\u00b3)", - "zv": "Elastic Modulus, Zv (cm\u00b3)", - "zuz": "Plastic Modulus, Zuz (cm\u00b3)", - "zuv": "Plastic Modulus, Zuv (cm\u00b3)", - "it": "Torsion Constant, It (cm\u2074)", - "iw": "Warping Constant, Iw (cm\u2076)", - } + section_prop_labels = [ + ("mass", "Mass, M (Kg/m)"), + ("area", "Sectional Area, a (cm2)"), + ("iz", "2nd Moment of Area, Iz (cm4)"), + ("iv", "2nd Moment of Area, Iy (cm4)"), + ("rz", "Radius of Gyration, rz (cm)"), + ("rv", "Radius of Gyration, ry (cm)"), + ("zz", "Elastic Modulus, Zz (cm3)"), + ("zv", "Elastic Modulus, Zy (cm3)"), + ("zuz", "Plastic Modulus, Zpz (cm3)"), + ("zuv", "Plastic Modulus, Zpy (cm3)"), + ("it", "Torsion Constant, It (cm4)"), + ("iw", "Warping Constant, Iw (cm6)"), + ] r = 0 - for key, text in labels.items(): + for key, html_label in section_prop_labels: field = self._readonly_field() - r = self._add_row(grid, r, text, field) + # _add_row creates labels with Qt.RichText enabled (via _create_small_label) + # and adds the field left-aligned — consistent with Dimensional Details. + r = self._add_row(grid, r, html_label, field) self.section_fields[key] = field card_layout.addLayout(grid) return card - # ── CAD PLACEHOLDERS ────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # CAD PLACEHOLDERS + # ───────────────────────────────────────────────────────────────────────── def _build_top_cad_placeholder(self): self.cad_placeholder = QLabel() - self.cad_placeholder.setFixedSize(385, 160) + self.cad_placeholder.setMinimumHeight(160) self.cad_placeholder.setAlignment(Qt.AlignCenter) - self.cad_placeholder.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.cad_placeholder.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self.cad_placeholder.setStyleSheet(""" QLabel { - border: 1px solid #cfcfcf; + border: 1px solid #b0b0b0; background-color: #F5F5F5; - border-radius: 10px; + border-radius: 6px; } """) return self.cad_placeholder @@ -298,7 +320,7 @@ def _build_bottom_cad_section(self): bottom_cad.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) bottom_cad.setStyleSheet(""" QLabel { - border: 1px solid #cfcfcf; + border: 1px solid #b0b0b0; background-color: #F5F5F5; border-radius: 6px; } @@ -306,7 +328,9 @@ def _build_bottom_cad_section(self): layout.addWidget(bottom_cad, alignment=Qt.AlignCenter) return card - # ── STIFFENER TABLE ─────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # STIFFENER TABLE + # ───────────────────────────────────────────────────────────────────────── def _build_stiffener_section(self): card = self._create_card_frame() @@ -316,7 +340,7 @@ def _build_stiffener_section(self): card_layout.addWidget(self._create_label("Stiffener Details:")) - # ── Wrap table in a QFrame so the border is drawn by the frame, + # ── Wrap table in a QFrame so the border is drawn by the frame, # not QAbstractScrollArea's viewport (which clips the left edge). table_frame = QFrame() table_frame.setStyleSheet(""" @@ -356,25 +380,25 @@ def _build_stiffener_section(self): self.stiffener_table.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.stiffener_table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # Use sizeHint-based height after headers/rows are configured - # header ~30px + 3 rows * 26px + 1px bottom = 109px; frame adds 2px - self.stiffener_table.setMinimumHeight(109) - self.stiffener_table.setMaximumHeight(109) + # header ~30px + 3 rows * 26px + 1px bottom = 109px; frame adds 2px. Plus OS scaling safety margin + self.stiffener_table.setMinimumHeight(120) + self.stiffener_table.setMaximumHeight(120) self.stiffener_table.setStyleSheet(""" QTableWidget { background-color: white; - gridline-color: #cfcfcf; + gridline-color: #e0e0e0; color: black; font-size: 10px; border: none; } QHeaderView::section { - background-color: #EAEAEA; + background-color: #f5f5f5; color: black; font-weight: bold; border: none; - border-right: 1px solid #cfcfcf; - border-bottom: 1px solid #cfcfcf; + border-right: 1px solid #b0b0b0; + border-bottom: 1px solid #b0b0b0; padding: 3px; font-size: 10px; } @@ -389,14 +413,17 @@ def _build_stiffener_section(self): # Pull right edge of viewport 1px left so last gridline sits under frame border self.stiffener_table.setViewportMargins(0, 0, -1, 0) table_frame_layout.addWidget(self.stiffener_table) - table_frame.setMinimumHeight(111) - table_frame.setMaximumHeight(111) + table_frame.setMinimumHeight(122) + table_frame.setMaximumHeight(122) card_layout.addWidget(table_frame) return card - # ── LOAD DATA (unchanged logic) ─────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # LOAD DATA (unchanged logic) + # ───────────────────────────────────────────────────────────────────────── def load_data(self, cad_state: dict): + """Populate all field widgets from a cad_state snapshot; silently ignores missing or invalid keys.""" if not cad_state: return @@ -428,4 +455,4 @@ def load_data(self, cad_state: dict): self.stiffener_table.setItem(row, 1, QTableWidgetItem(str(grade))) self.stiffener_table.setItem(row, 2, QTableWidgetItem(str(thickness))) self.stiffener_table.setItem(row, 3, QTableWidgetItem(str(width))) - self.stiffener_table.setItem(row, 4, QTableWidgetItem(str(spacing))) \ No newline at end of file + self.stiffener_table.setItem(row, 4, QTableWidgetItem(str(spacing))) From 9415fafa50ae8d21787fc7e65f74c8a617c3e91c Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Fri, 17 Apr 2026 06:56:59 +0530 Subject: [PATCH 153/225] =?UTF-8?q?fix:=20PR=20review=20=E2=80=94=20narrow?= =?UTF-8?q?=20exception=20scope,=20init=20cursor=5Fidx,=20remove=20dead=20?= =?UTF-8?q?shim,=20extract=20header=20sentinel,=20drop=20redundant=20axes?= =?UTF-8?q?=20setup,=20add=20EOF=20newlines?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bridge_types/plate_girder/graph_engine.py | 2 +- .../desktop/ui/dialogs/girder_2d_plots.py | 2 +- .../desktop/ui/dialogs/steel_design.py | 43 ++++--------------- 3 files changed, 11 insertions(+), 36 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py b/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py index 25f52698d..e563d5454 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py @@ -1865,4 +1865,4 @@ def draw_cursors( ) # Deflection axis: no cursor (PENDING-1; data not available) - canvas.draw() \ No newline at end of file + canvas.draw() diff --git a/src/osdagbridge/desktop/ui/dialogs/girder_2d_plots.py b/src/osdagbridge/desktop/ui/dialogs/girder_2d_plots.py index bc3e87a67..e5e432afc 100644 --- a/src/osdagbridge/desktop/ui/dialogs/girder_2d_plots.py +++ b/src/osdagbridge/desktop/ui/dialogs/girder_2d_plots.py @@ -521,4 +521,4 @@ def _show_maximums(self) -> None: else: self.fields["defl"].setText("Unavailable") - self.canvas.draw_idle() \ No newline at end of file + self.canvas.draw_idle() diff --git a/src/osdagbridge/desktop/ui/dialogs/steel_design.py b/src/osdagbridge/desktop/ui/dialogs/steel_design.py index 29bf9a5bf..d4b142ef8 100644 --- a/src/osdagbridge/desktop/ui/dialogs/steel_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/steel_design.py @@ -16,6 +16,8 @@ from osdagbridge.core.bridge_types.plate_girder.graph_engine import GirderGraphEngine +# Prefix used to identify non-selectable category header items in combo boxes. +_COMBO_HEADER_PREFIX = "──" # ============================================================================= # DIALOG: Steel Design @@ -47,7 +49,7 @@ def __init__(self, parent=None, result_handler=None): if result_handler is None and hasattr(self._main_window, "backend"): try: result_handler = self._main_window.backend.get_result_handler() - except Exception: + except (RuntimeError, AttributeError): pass self._result_handler = result_handler # PlateGirderAnalysisResults or None @@ -283,34 +285,6 @@ def _setup_analysis_plots(self): result_handler=self._result_handler, ) - # Legacy compatibility shim for upstream output_dock._inject_and_plot - self.graph_engine._cached_model = None - self.graph_engine._cached_results = None - if not hasattr(self.graph_engine, "build_girder_map"): - self.graph_engine.build_girder_map = lambda: None - - # Schematic: frameless - self.ax_scheme.set_facecolor('#ffffff') - self.ax_scheme.grid(False) - for spine in self.ax_scheme.spines.values(): - spine.set_visible(False) - self.ax_scheme.set_yticks([]) - self.ax_scheme.set_ylabel("") - - # Data axes: show all four spines as a visible frame - for ax in (self.ax_bmd, self.ax_sfd, self.ax_defl): - ax.set_facecolor('#ffffff') - ax.grid(False) - for spine in ax.spines.values(): - spine.set_visible(True) - spine.set_linewidth(0.8) - spine.set_color('#cccccc') - ax.set_yticks([]) - ax.set_ylabel("") - ax.axhline(0, color='black', linewidth=0, clip_on=True) - - self.ax_defl.invert_yaxis() - # ── Side-fields: swap QLineEdit → QLabel for multi-line HTML display ── # Spacers are now baked as fixed addSpacing() in steel_design_analysis.py — # this loop only performs the widget swap; no spacer manipulation needed. @@ -379,6 +353,7 @@ def _setup_analysis_plots(self): self._current_defl = None self._cursor_lines = [] self._cursor_x = None # exact x position (may be between nodes) + self._cursor_idx = 0 # nearest node index for arrow-key navigation # ── UI initialisation state ─────────────────────────────────────────── self._data_initialized = False @@ -622,7 +597,7 @@ def _populate_load_combo(self): # ── Dead Loads ──────────────────────────────────────────────────────── if dead_lcs: - self._add_combo_header(combo, "── Dead Loads ──") + self._add_combo_header(combo, f"{_COMBO_HEADER_PREFIX} Dead Loads {_COMBO_HEADER_PREFIX}") for lc in dead_lcs: combo.addItem(lc) if first_selectable_idx is None: @@ -630,7 +605,7 @@ def _populate_load_combo(self): # ── Static Vehicle Loads ────────────────────────────────────────────── if static_lcs: - self._add_combo_header(combo, "── Static Vehicle Loads ──") + self._add_combo_header(combo, f"{_COMBO_HEADER_PREFIX} Static Vehicle Loads {_COMBO_HEADER_PREFIX}") for lc in static_lcs: combo.addItem(lc) if first_selectable_idx is None: @@ -638,7 +613,7 @@ def _populate_load_combo(self): # ── Moving Vehicle Loads ────────────────────────────────────────────── if moving_lcs: - self._add_combo_header(combo, "── Moving Vehicle Loads ──") + self._add_combo_header(combo, f"{_COMBO_HEADER_PREFIX} Moving Vehicle Loads {_COMBO_HEADER_PREFIX}") for lc in moving_lcs: combo.addItem(lc) if first_selectable_idx is None: @@ -673,7 +648,7 @@ def _update_analysis_plots(self, *_args): loadcase = self.analysis_tab.load_combo.currentText() # Reject header/separator items (they start with '──') - if not loadcase or loadcase.startswith("──"): + if not loadcase or loadcase.startswith(_COMBO_HEADER_PREFIX): return if not member_key or not self.graph_engine.get_girder_keys(): @@ -877,4 +852,4 @@ def _unit(k): if key in xf: val = float(np.interp(cx, self._current_x, data)) xf[key].setFixedHeight(35) - xf[key].setText(fmt.format(val)) \ No newline at end of file + xf[key].setText(fmt.format(val)) From 92824b2a672b40b74bdbd2a1017b0687fd7ceeee Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sat, 21 Feb 2026 02:37:42 +0530 Subject: [PATCH 154/225] Add shear stud geometry, placement logic, and 3D display for plate girder --- .../super_structure/plate_girder/builder.py | 89 ++++++++++++++++++- .../plate_girder/cad_generator.py | 28 +++++- src/osdagbridge/desktop/ui/cad_3d.py | 9 +- 3 files changed, 122 insertions(+), 4 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py index d1933ac2b..9b5946587 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py @@ -18,6 +18,8 @@ BRepBuilderAPI_MakeFace, BRepBuilderAPI_Transform ) +from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse + # END STIFFENER SPACING @@ -118,6 +120,26 @@ def _create_stiffener_plate(position, width, height, thickness, chamfer, side): + +def create_shear_stud(base_dia, base_height, top_dia, top_height): + """Create stepped cylindrical shape""" + base_radius = base_dia / 2.0 + top_radius = top_dia / 2.0 + + # Base cylinder at origin + base_axis = gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)) + base_cyl = BRepPrimAPI_MakeCylinder(base_axis, base_radius, base_height).Shape() + + # Top cylinder placed on base + top_axis = gp_Ax2(gp_Pnt(0, 0, base_height), gp_Dir(0, 0, 1)) + top_cyl = BRepPrimAPI_MakeCylinder(top_axis, top_radius, top_height).Shape() + + # Fuse both + stepped_shape = BRepAlgoAPI_Fuse(base_cyl, top_cyl).Shape() + + return stepped_shape + + def build_plate_girder_geometry( *, D, # Total depth @@ -138,7 +160,14 @@ def build_plate_girder_geometry( include_longitudinal_stiffeners=False, # Whether to include longitudinal stiffeners num_longitudinal_stiffeners=1, # Number of longitudinal stiffeners (1 or 2) longitudinal_stiffener_thickness=20, # Thickness of longitudinal stiffeners (mm) - longitudinal_stiffener_outstand=None # Custom outstand for longitudinal stiffeners + longitudinal_stiffener_outstand=None, # Custom outstand for longitudinal stiffeners + shear_stud_base_diameter=16, # Diameter of the shear stud base (mm) + shear_stud_top_diameter=25, # Diameter of the shear stud top head (mm) + shear_stud_base_height=135, # Height of the shear stud base (mm) + shear_stud_top_height=15, # Height of the shear stud top head (mm) + num_shear_studs_per_section=2, # Number of shear studs in the transverse direction + shear_stud_transverse_spacing=100, # Spacing between shear studs in the transverse direction + shear_stud_pitch=200 # Pitch (longitudinal spacing) of shear stud rows ): """ Geometry-only Plate Girder builder for Osdag Bridge. @@ -295,6 +324,57 @@ def build_plate_girder_geometry( ) stiffeners.append(long_stiff) + # Shear Studs + shear_studs = [] + if num_shear_studs_per_section > 0 and shear_stud_pitch > 0: + base_stud = create_shear_stud(shear_stud_base_diameter, shear_stud_base_height, shear_stud_top_diameter, shear_stud_top_height) + z_stud = D / 2.0 + T_ft # Place ON TOP of the top flange + + # Longitudinal stud placement (Y direction) + min_edge = 50.0 + + if length > 2 * min_edge: + + # Maximum intervals ensuring edge ≥ 50 mm + max_intervals = int((length - 2 * min_edge) // shear_stud_pitch) + + # Compute symmetric edge distance + edge = (length - max_intervals * shear_stud_pitch) / 2.0 + + start_y = edge + num_rows = max_intervals + 1 + + else: + # Very short girder → single centered stud row + start_y = length / 2.0 + num_rows = 1 + + # Transverse stud placement (X direction) + transverse_positions = [] + if num_shear_studs_per_section == 1: + transverse_positions = [0.0] + else: + # Ensure the studs do not exceed the width of the top flange (B_ft) + min_edge_margin = max(50.0, shear_stud_base_diameter) + max_total_transverse_width = max(0.0, B_ft - 2 * min_edge_margin) + + desired_total_width = (num_shear_studs_per_section - 1) * shear_stud_transverse_spacing + actual_total_width = min(desired_total_width, max_total_transverse_width) + + actual_spacing = actual_total_width / (num_shear_studs_per_section - 1) + start_x = -actual_total_width / 2.0 + + for k in range(num_shear_studs_per_section): + transverse_positions.append(start_x + k * actual_spacing) + + for i in range(num_rows): + y_pos = start_y + i * shear_stud_pitch + for x_pos in transverse_positions: + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(x_pos, y_pos, z_stud)) + stud = BRepBuilderAPI_Transform(base_stud, trsf, True).Shape() + shear_studs.append(stud) + # SUPPORTS supports_tri = [] @@ -378,6 +458,10 @@ def build_plate_girder_geometry( _rotate_about_z(s, -90) for s in supports_cyl ] + shear_studs = [ + _rotate_about_z(s, -90) for s in shear_studs + ] + return { @@ -386,5 +470,6 @@ def build_plate_girder_geometry( "bottom_flange": bottom_flange, "stiffeners": stiffeners, "supports_tri": supports_tri, - "supports_cyl": supports_cyl + "supports_cyl": supports_cyl, + "shear_studs": shear_studs } diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 11ccf8094..8c46324bf 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -187,6 +187,15 @@ def _set_parameters(self, design_params: BridgeParametersDTO): self.longitudinal_stiffener_thickness = design_params.longitudinal_stiffener_thickness self.longitudinal_stiffener_outstand = design_params.longitudinal_stiffener_outstand + # SHEAR STUD PARAMETERS + self.shear_stud_base_diameter = 50 + self.shear_stud_top_diameter = 70 + self.shear_stud_base_height = 150 + self.shear_stud_top_height = 50 + self.num_shear_studs_per_section = 4 + self.shear_stud_transverse_spacing = 305 + self.shear_stud_pitch = 500 + # CROSS BRACING PARAMETERS self.cross_bracing_spacing = design_params.cross_bracing_spacing self.bracing_type = design_params.bracing_type @@ -355,13 +364,21 @@ def _calculate_skew_offset(lateral_position, reference_position=0): include_longitudinal_stiffeners=self.include_longitudinal_stiffeners, num_longitudinal_stiffeners=self.num_longitudinal_stiffeners, longitudinal_stiffener_thickness=self.longitudinal_stiffener_thickness, - longitudinal_stiffener_outstand=self.longitudinal_stiffener_outstand + longitudinal_stiffener_outstand=self.longitudinal_stiffener_outstand, + shear_stud_base_diameter=self.shear_stud_base_diameter, + shear_stud_top_diameter=self.shear_stud_top_diameter, + shear_stud_base_height=self.shear_stud_base_height, + shear_stud_top_height=self.shear_stud_top_height, + num_shear_studs_per_section=self.num_shear_studs_per_section, + shear_stud_transverse_spacing=self.shear_stud_transverse_spacing, + shear_stud_pitch=self.shear_stud_pitch ) # STEP 2: PLACE MULTIPLE GIRDERS WITH SKEW OFFSET girders = [] stiffeners = [] + shear_studs = [] girder_web = [] girder_flanges = [] @@ -396,6 +413,12 @@ def _calculate_skew_offset(lateral_position, reference_position=0): _translate(stiff, dx=x_offset, dy=y_offset) ) + # Place shear studs + for stud in pg.get("shear_studs", []): + shear_studs.append( + _translate(stud, dx=x_offset, dy=y_offset) + ) + # STEP 3: PLACE SUPPORT STRUCTURES supports_tri = [] @@ -673,6 +696,9 @@ def _calculate_skew_offset(lateral_position, reference_position=0): # Stiffeners "stiffeners": stiffeners, + # Shear Studs + "shear_studs": shear_studs, + # Support structures "supports": supports, "supports_tri": supports_tri, diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index 7d83c792f..55f7b0795 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -231,6 +231,13 @@ def display_and_register(shapes, key, label, color, transparency=None): STIFFENER_COLOR ) + display_and_register( + cad_data.get("shear_studs", []), + "Shear Stud", + "Shear Stud", + STIFFENER_COLOR + ) + display_and_register( cad_data.get("supports", []), "Support", @@ -423,7 +430,7 @@ def update_component_visibility(self, selected_components): component_map = { "Crash Barrier": ["Crash Barrier", "Crash Barrier W-Beam"], "Median": ["Median", "Median W-Beam"], - "Girder": ["Girder Web", "Girder Flange", "Support", "Stiffener"], + "Girder": ["Girder Web", "Girder Flange", "Support", "Stiffener", "Shear Stud"], "Deck": ["Deck"], "Cross Bracing": ["Cross Bracing"], "Railing": ["Railing"], From cb8e124644bd791a85f6707f166a2f5a73147726 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Mon, 23 Feb 2026 23:42:26 +0530 Subject: [PATCH 155/225] Add per-girder segment configuration - Add girder_segments_dict for custom segmentation per girder - Implement fallback to default single segment configuration - Add get_girder_depth_at() for depth lookup along span - Pass segment data to plate girder geometry builder - Support variable girder geometry in bridge assembly --- .../plate_girder/cad_generator.py | 149 +++++++++++------- 1 file changed, 96 insertions(+), 53 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 8c46324bf..5856f2f61 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -30,7 +30,7 @@ # Component builder imports from osdagbridge.core.bridge_components.super_structure.plate_girder.builder import ( - build_plate_girder_geometry + build_plate_girder_geometry, GirderSegment ) from osdagbridge.core.bridge_components.super_structure.deck.builder import ( build_deck @@ -150,6 +150,33 @@ def _set_parameters(self, design_params: BridgeParametersDTO): self.num_girders = design_params.num_girders self.girder_spacing = design_params.girder_spacing + self.girder_segments = [ + GirderSegment( + length=self.span_length_L, + D=self.girder_section_d, + tw=self.girder_section_tw, + T_ft=self.girder_section_tf, + T_fb=self.girder_section_tf_b, + B_ft=self.girder_section_bf, + B_fb=self.girder_section_bf_b + ) + ] + + # Example: Girder 1 (index 0) and Girder 2 (index 1) split into 3 segments + self.girder_segments_dict = { + 0: [ + GirderSegment(length=3000, D=500, tw=100, T_ft=260, T_fb=260, B_ft=500, B_fb=500), + GirderSegment(length=4000, D=1400, tw=100, T_ft=260, T_fb=260, B_ft=700, B_fb=700), + GirderSegment(length=3000, D=700, tw=100, T_ft=260, T_fb=260, B_ft=500, B_fb=500) + ], + 1: [ + GirderSegment(length=2000, D=900, tw=100, T_ft=260, T_fb=260, B_ft=500, B_fb=500), + GirderSegment(length=5000, D=300, tw=100, T_ft=260, T_fb=260, B_ft=700, B_fb=700), + GirderSegment(length=3000, D=600, tw=100, T_ft=260, T_fb=260, B_ft=500, B_fb=500) + ] + } + + # GEOMETRY PARAMETERS self.skew_angle = design_params.skew_angle @@ -343,49 +370,57 @@ def _calculate_skew_offset(lateral_position, reference_position=0): lateral_distance = lateral_position - reference_position return lateral_distance * math.tan(skew_rad) - # STEP 1: BUILD SINGLE PLATE GIRDER GEOMETRY - - pg = build_plate_girder_geometry( - D=self.girder_section_d, - tw=self.girder_section_tw, - length=self.span_length_L, - T_ft=self.girder_section_tf, - T_fb=self.girder_section_tf_b, - B_ft=self.girder_section_bf, - B_fb=self.girder_section_bf_b, - include_intermediate_stiffeners=self.include_intermediate_stiffeners, - intermediate_stiffener_spacing=self.intermediate_stiffener_spacing, - intermediate_stiffener_thickness=self.intermediate_stiffener_thickness, - chamfer_length=40, - num_end_stiffener_pairs=self.num_end_stiffener_pairs, - T_es=self.end_stiffener_thickness, - intermediate_stiffener_outstand=self.intermediate_stiffener_outstand, - end_stiffener_outstand=self.end_stiffener_outstand, - include_longitudinal_stiffeners=self.include_longitudinal_stiffeners, - num_longitudinal_stiffeners=self.num_longitudinal_stiffeners, - longitudinal_stiffener_thickness=self.longitudinal_stiffener_thickness, - longitudinal_stiffener_outstand=self.longitudinal_stiffener_outstand, - shear_stud_base_diameter=self.shear_stud_base_diameter, - shear_stud_top_diameter=self.shear_stud_top_diameter, - shear_stud_base_height=self.shear_stud_base_height, - shear_stud_top_height=self.shear_stud_top_height, - num_shear_studs_per_section=self.num_shear_studs_per_section, - shear_stud_transverse_spacing=self.shear_stud_transverse_spacing, - shear_stud_pitch=self.shear_stud_pitch - ) + # STEP 1: BUILD AND PLACE MULTIPLE GIRDERS WITH SKEW OFFSET - # STEP 2: PLACE MULTIPLE GIRDERS WITH SKEW OFFSET - girders = [] stiffeners = [] shear_studs = [] girder_web = [] girder_flanges = [] + supports_tri = [] + supports_cyl = [] total_width = (self.num_girders - 1) * self.girder_spacing reference_position = 0.0 # Centerline reference for skew for i in range(self.num_girders): + + # Fetch segments for this particular girder if defined + if self.girder_segments_dict and i in self.girder_segments_dict: + current_segments = self.girder_segments_dict[i] + else: + current_segments = self.girder_segments + + pg = build_plate_girder_geometry( + D=self.girder_section_d, + tw=self.girder_section_tw, + length=self.span_length_L, + T_ft=self.girder_section_tf, + T_fb=self.girder_section_tf_b, + B_ft=self.girder_section_bf, + B_fb=self.girder_section_bf_b, + segments=current_segments, + include_intermediate_stiffeners=self.include_intermediate_stiffeners, + intermediate_stiffener_spacing=self.intermediate_stiffener_spacing, + intermediate_stiffener_thickness=self.intermediate_stiffener_thickness, + chamfer_length=40, + num_end_stiffener_pairs=self.num_end_stiffener_pairs, + T_es=self.end_stiffener_thickness, + intermediate_stiffener_outstand=self.intermediate_stiffener_outstand, + end_stiffener_outstand=self.end_stiffener_outstand, + include_longitudinal_stiffeners=self.include_longitudinal_stiffeners, + num_longitudinal_stiffeners=self.num_longitudinal_stiffeners, + longitudinal_stiffener_thickness=self.longitudinal_stiffener_thickness, + longitudinal_stiffener_outstand=self.longitudinal_stiffener_outstand, + shear_stud_base_diameter=self.shear_stud_base_diameter, + shear_stud_top_diameter=self.shear_stud_top_diameter, + shear_stud_base_height=self.shear_stud_base_height, + shear_stud_top_height=self.shear_stud_top_height, + num_shear_studs_per_section=self.num_shear_studs_per_section, + shear_stud_transverse_spacing=self.shear_stud_transverse_spacing, + shear_stud_pitch=self.shear_stud_pitch + ) + # Calculate transverse offset (Y-direction) y_offset = (i * self.girder_spacing) - (total_width / 2) @@ -393,19 +428,22 @@ def _calculate_skew_offset(lateral_position, reference_position=0): x_offset = _calculate_skew_offset(y_offset, reference_position) # Place web - web = _translate(pg["web"], dx=x_offset, dy=y_offset) - girders.append(web) - girder_web.append(web) + for w in pg.get("web", []): + web = _translate(w, dx=x_offset, dy=y_offset) + girders.append(web) + girder_web.append(web) # Place top flange - top_flange = _translate(pg["top_flange"], dx=x_offset, dy=y_offset) - girders.append(top_flange) - girder_flanges.append(top_flange) + for tf in pg.get("top_flange", []): + top_flange = _translate(tf, dx=x_offset, dy=y_offset) + girders.append(top_flange) + girder_flanges.append(top_flange) # Place bottom flange - bottom_flange = _translate(pg["bottom_flange"], dx=x_offset, dy=y_offset) - girders.append(bottom_flange) - girder_flanges.append(bottom_flange) + for bf in pg.get("bottom_flange", []): + bottom_flange = _translate(bf, dx=x_offset, dy=y_offset) + girders.append(bottom_flange) + girder_flanges.append(bottom_flange) # Place stiffeners (follow parent girder's offset) for stiff in pg["stiffeners"]: @@ -419,16 +457,6 @@ def _calculate_skew_offset(lateral_position, reference_position=0): _translate(stud, dx=x_offset, dy=y_offset) ) - # STEP 3: PLACE SUPPORT STRUCTURES - - supports_tri = [] - supports_cyl = [] - - for i in range(self.num_girders): - # Calculate offsets (same as girders) - y_offset = (i * self.girder_spacing) - (total_width / 2) - x_offset = _calculate_skew_offset(y_offset, reference_position) - # Place triangular supports for s in pg["supports_tri"]: supports_tri.append(_translate(s, dx=x_offset, dy=y_offset)) @@ -448,11 +476,26 @@ def _calculate_skew_offset(lateral_position, reference_position=0): # STEP 5: BUILD CROSS BRACING SYSTEM + # Prepare per-frame, per-girder depths for bracing + n_internal = int(self.span_length_L / self.cross_bracing_spacing) - 1 + n_total = n_internal + 2 + spacing = self.span_length_L / (n_total - 1) + x_positions = [i * spacing for i in range(n_total)] + + girder_depths_matrix = [] + for x in x_positions: + frame_depths = [] + for i in range(self.num_girders): + depth = self.get_girder_depth_at(i, x) + frame_depths.append(depth) + girder_depths_matrix.append(frame_depths) + cross_bracings = build_cross_bracings( span_length_L=self.span_length_L, num_girders=self.num_girders, girder_spacing=self.girder_spacing, - girder_depth=bracing_girder_depth, + girder_depths=girder_depths_matrix, + reference_depth=self.girder_section_d, flange_thickness=self.girder_section_tf, flange_width=self.girder_section_bf, From 8663f04c6065b554906ab104ba9a632905373824 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Mon, 23 Feb 2026 23:45:58 +0530 Subject: [PATCH 156/225] Adapt bracing geometry to segmented girder depths - Use position-based girder depth for bracing placement - Support variable girder depth along span - Improve compatibility with segmented plate girders" --- .../super_structure/cross_bracing/builder.py | 123 +++++++++--------- 1 file changed, 60 insertions(+), 63 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py index b42ec2b8a..2a1fd159f 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py @@ -653,7 +653,8 @@ def build_cross_bracings( span_length_L, num_girders, girder_spacing, - girder_depth, + girder_depths, # Can be float (uniform) or List[List[float]] [panel_idx][girder_idx] + reference_depth, # Reference web depth for vertical alignment flange_thickness, flange_width, @@ -729,6 +730,29 @@ def build_cross_bracings( yL = (i * girder_spacing) - total_width / 2 yR = yL + girder_spacing + # Get girder depths for this bay + if isinstance(girder_depths, (int, float)): + d_L = girder_depths + d_R = girder_depths + else: + # depths[panel_idx][girder_idx] + d_L = girder_depths[idx_x][i] + d_R = girder_depths[idx_x][i+1] + + # The smaller girder depth controls the bracing height + eff_depth = min(d_L, d_R) + + # Calculate vertical offset to keep top flush with reference web top + # reference_depth/2 is the Z-coord of the top of the reference web + # eff_depth/2 is the Z-coord of the top of the bracing frame (at center) + z_offset = (reference_depth - eff_depth) / 2.0 + + def _apply_z_offset(shapes, dz): + if not dz: return shapes + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(0, 0, dz)) + return [BRepBuilderAPI_Transform(s, trsf, True).Shape() for s in shapes] + # Check if this is an end position (first or last frame) is_end = (x == x_positions[0] or x == x_positions[-1]) is_first = (x == x_positions[0]) @@ -761,10 +785,9 @@ def build_cross_bracings( if end_diaphragm_type == "Cross Bracing": # Use end diaphragm section configurations if end_diaphragm_bracing_type == "X": - bracings.extend( - _x_bracing( + frame = _x_bracing( x_eff, yL, yR, - girder_depth, flange_thickness, flange_width, + eff_depth, flange_thickness, flange_width, end_diaphragm_diagonal_thickness, end_diaphragm_diagonal_section_type, end_diaphragm_diagonal_section_dims, @@ -776,13 +799,12 @@ def build_cross_bracings( end_diaphragm_bottom_chord_section_dims, bracket_option, skew_angle=skew_angle - ) ) + bracings.extend(_apply_z_offset(frame, z_offset)) elif end_diaphragm_bracing_type == "K": - bracings.extend( - _k_bracing( + frame = _k_bracing( x_eff, yL, yR, - girder_depth, flange_thickness, flange_width, + eff_depth, flange_thickness, flange_width, end_diaphragm_diagonal_thickness, end_diaphragm_diagonal_section_type, end_diaphragm_diagonal_section_dims, @@ -794,87 +816,62 @@ def build_cross_bracings( end_diaphragm_bottom_chord_section_dims, top_bracket, skew_angle=skew_angle - ) ) + bracings.extend(_apply_z_offset(frame, z_offset)) - elif end_diaphragm_type == "Rolled Beam": + elif end_diaphragm_type == "Rolled Beam" or end_diaphragm_type == "Welded Beam": # Use I-section for rolled beam diaphragm diaphragm_dims = end_diaphragm_dims if end_diaphragm_dims is not None else { - "depth": girder_depth * 0.8, + "depth": eff_depth * 0.8, "flange_width": 200, "web_thickness": 10, "flange_thickness": 15 } - bracings.extend( - _diaphragm_bracing( - x_eff, yL, yR, - girder_depth, flange_thickness, - diagonal_thickness, - "I_SECTION", - diaphragm_dims, - skew_angle=skew_angle - ) - ) - - elif end_diaphragm_type == "Welded Beam": - # Use I-section for welded beam diaphragm - # Welded beams can have different proportions than rolled - diaphragm_dims = end_diaphragm_dims if end_diaphragm_dims is not None else { - "depth": girder_depth * 0.85, - "flange_width": 250, - "web_thickness": 12, - "flange_thickness": 20 - } - # Validate dimensions or use defaults (slightly larger than rolled) if "depth" not in diaphragm_dims or "flange_width" not in diaphragm_dims: diaphragm_dims = { - "depth": girder_depth * 0.85, + "depth": eff_depth * 0.85, "flange_width": 250, "web_thickness": 12, "flange_thickness": 20 } - - bracings.extend( - _diaphragm_bracing( - x_eff, yL, yR, - girder_depth, flange_thickness, - diagonal_thickness, - "I_SECTION", - diaphragm_dims, - skew_angle=skew_angle - ) + frame = _diaphragm_bracing( + x_eff, yL, yR, + eff_depth, flange_thickness, + end_diaphragm_thickness, + end_diaphragm_section, + end_diaphragm_dims, + skew_angle=skew_angle ) + bracings.extend(_apply_z_offset(frame, z_offset)) continue # INTERNAL BRACING HANDLING # Build normal X or K bracing for internal panels using separate sections if bracing_type == "X": - bracings.extend( - _x_bracing( - x, yL, yR, - girder_depth, flange_thickness, flange_width, - diagonal_thickness, diagonal_section_type, diagonal_section_dims, - top_chord_thickness, top_chord_section_type, top_chord_section_dims, - bottom_chord_thickness, bottom_chord_section_type, bottom_chord_section_dims, - bracket_option, - skew_angle=skew_angle - ) + frame = _x_bracing( + x, yL, yR, + eff_depth, flange_thickness, flange_width, + diagonal_thickness, diagonal_section_type, diagonal_section_dims, + top_chord_thickness, top_chord_section_type, top_chord_section_dims, + bottom_chord_thickness, bottom_chord_section_type, bottom_chord_section_dims, + bracket_option, + skew_angle=skew_angle ) + bracings.extend(_apply_z_offset(frame, z_offset)) elif bracing_type == "K": - bracings.extend( - _k_bracing( - x, yL, yR, - girder_depth, flange_thickness, flange_width, - diagonal_thickness, diagonal_section_type, diagonal_section_dims, - top_chord_thickness, top_chord_section_type, top_chord_section_dims, - bottom_chord_thickness, bottom_chord_section_type, bottom_chord_section_dims, - top_bracket, - skew_angle=skew_angle - ) + frame = _k_bracing( + x, yL, yR, + eff_depth, flange_thickness, flange_width, + diagonal_thickness, diagonal_section_type, diagonal_section_dims, + top_chord_thickness, top_chord_section_type, top_chord_section_dims, + bottom_chord_thickness, bottom_chord_section_type, bottom_chord_section_dims, + top_bracket, + skew_angle=skew_angle ) + bracings.extend(_apply_z_offset(frame, z_offset)) return bracings \ No newline at end of file From 0ea11e6994bcfb29d836cf15c5a4a5cb9ce71ab7 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Mon, 23 Feb 2026 23:47:25 +0530 Subject: [PATCH 157/225] Add parametric girder segmentation support - Introduce GirderSegment dataclass for segment properties - Support piecewise web and flange generation per segment - Align top flange across segments using reference Z level - Update stiffener, longitudinal stiffener and support placement to adapt to segment depth - Enable variable depth and tapered girder modeling --- .../super_structure/plate_girder/builder.py | 222 ++++++++++++------ 1 file changed, 146 insertions(+), 76 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py index 9b5946587..6707b0045 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py @@ -9,6 +9,7 @@ import math import numpy as np +from dataclasses import dataclass from OCC.Core.gp import gp_Pnt, gp_Vec, gp_Trsf, gp_Ax3, gp_Dir, gp_Ax2 from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism, BRepPrimAPI_MakeCylinder @@ -20,6 +21,16 @@ ) from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse +@dataclass +class GirderSegment: + length: float + D: float + tw: float + T_ft: float + T_fb: float + B_ft: float + B_fb: float + # END STIFFENER SPACING @@ -149,6 +160,7 @@ def build_plate_girder_geometry( T_fb, # Bottom flange thickness B_ft, # Top flange width B_fb, # Bottom flange width + segments=None, # Optional list of GirderSegment include_intermediate_stiffeners=True, # Whether to include intermediate stiffeners intermediate_stiffener_spacing=750, # Space between intermediate stiffeners (mm) intermediate_stiffener_thickness=20, # Intermediate stiffener thickness (mm) @@ -177,38 +189,78 @@ def build_plate_girder_geometry( u_dir = np.array([0., 0., 1.]) w_dir = np.array([0., 1., 0.]) - # Web plate - web = _make_plate( - origin=np.array([0., 0., 0.]), - length=tw, - width=length, - thickness=D, - u_dir=u_dir, - w_dir=w_dir - ) - - # Top flange - top_flange = _make_plate( - origin=np.array([0., 0., (D + T_ft) / 2]), - length=B_ft, - width=length, - thickness=T_ft, - u_dir=u_dir, - w_dir=w_dir - ) - - # Bottom flange - bottom_flange = _make_plate( - origin=np.array([0., 0., -(D + T_fb) / 2]), - length=B_fb, - width=length, - thickness=T_fb, - u_dir=u_dir, - w_dir=w_dir - ) + if segments is None: + segments = [ + GirderSegment( + length=length, + D=D, + tw=tw, + T_ft=T_ft, + T_fb=T_fb, + B_ft=B_ft, + B_fb=B_fb + ) + ] + + # Reference top of girder (used to keep top flanges flush) + Z_top = D / 2 + T_ft + + web_shapes = [] + top_flange_shapes = [] + bottom_flange_shapes = [] + + current_y = 0.0 + for seg in segments: + seg_z_web_center = Z_top - seg.T_ft - seg.D / 2 + + # Web plate + seg_web = _make_plate( + origin=np.array([0., current_y, seg_z_web_center]), + length=seg.tw, + width=seg.length, + thickness=seg.D, + u_dir=u_dir, + w_dir=w_dir + ) + web_shapes.append(seg_web) + + # Top flange + seg_tf_center = Z_top - seg.T_ft / 2 + seg_top_flange = _make_plate( + origin=np.array([0., current_y, seg_tf_center]), + length=seg.B_ft, + width=seg.length, + thickness=seg.T_ft, + u_dir=u_dir, + w_dir=w_dir + ) + top_flange_shapes.append(seg_top_flange) + + # Bottom flange + seg_bf_center = Z_top - seg.T_ft - seg.D - seg.T_fb / 2 + seg_bottom_flange = _make_plate( + origin=np.array([0., current_y, seg_bf_center]), + length=seg.B_fb, + width=seg.length, + thickness=seg.T_fb, + u_dir=u_dir, + w_dir=w_dir + ) + bottom_flange_shapes.append(seg_bottom_flange) + + current_y += seg.length # Stiffeners stiffeners = [] + + def get_segment_at(y): + curr = 0.0 + for s in segments: + if y <= curr + s.length + 1e-6: + return s, Z_top - s.T_ft - s.D / 2 + curr += s.length + return segments[-1], Z_top - segments[-1].T_ft - segments[-1].D / 2 + eff_depth = D - T_ft - T_fb # Calculate default outstand if not provided @@ -234,11 +286,13 @@ def build_plate_girder_geometry( if y <= start_y or y >= end_y: continue + seg, seg_z_center = get_segment_at(y) + stiffeners.append( _create_stiffener_plate( - position=[ tw / 2, y, 0 ], + position=[ seg.tw / 2, y, seg_z_center ], width=int_stiff_width, - height=D, + height=seg.D, thickness=intermediate_stiffener_thickness, chamfer=chamfer_length, side="right" @@ -247,9 +301,9 @@ def build_plate_girder_geometry( stiffeners.append( _create_stiffener_plate( - position=[ -tw / 2, y, 0 ], + position=[ -seg.tw / 2, y, seg_z_center ], width=int_stiff_width, - height=D, + height=seg.D, thickness=intermediate_stiffener_thickness, chamfer=chamfer_length, side="left" @@ -273,11 +327,12 @@ def build_plate_girder_geometry( end_positions.append(y_pos) for y in end_positions: + seg, seg_z_center = get_segment_at(y) stiffeners.append( _create_stiffener_plate( - position=[ tw / 2, y, 0 ], + position=[ seg.tw / 2, y, seg_z_center ], width=end_stiff_width, - height=D, + height=seg.D, thickness=T_es, chamfer=chamfer_length, side="right" @@ -286,9 +341,9 @@ def build_plate_girder_geometry( stiffeners.append( _create_stiffener_plate( - position=[ -tw / 2, y, 0 ], + position=[ -seg.tw / 2, y, seg_z_center ], width=end_stiff_width, - height=D, + height=seg.D, thickness=T_es, chamfer=chamfer_length, side="left" @@ -298,31 +353,38 @@ def build_plate_girder_geometry( # Longitudinal Stiffeners if include_longitudinal_stiffeners: long_stiff_width = longitudinal_stiffener_outstand if longitudinal_stiffener_outstand is not None else default_stiff_width - - # Start after the first end stiffener and end before the last one long_stiff_start = T_es - long_stiff_len = length - 2 * long_stiff_start - - # Calculate vertical positions from the web top (D/2) - heights = [] - if num_longitudinal_stiffeners == 1: - # 1/3 height from web top - heights.append(D / 2 - D / 3) - elif num_longitudinal_stiffeners == 2: - # 1/3 and 2/3 height from web top - heights.append(D / 2 - D / 3) - heights.append(D / 2 - 2 * D / 3) + + # We need to build longitudinal stiffeners segment by segment since their height/offset might change based on D + curr_y = 0.0 + for seg in segments: + # Calculate segment-specific start and length, considering exclusion zones + seg_start_y = max(curr_y, long_stiff_start) + seg_end_y = min(curr_y + seg.length, length - T_es) + seg_len = seg_end_y - seg_start_y - for h in heights: - long_stiff = _make_plate( - origin=np.array([tw / 2 + long_stiff_width / 2, long_stiff_start, h]), - length=long_stiff_width, - width=long_stiff_len, - thickness=longitudinal_stiffener_thickness, - u_dir=np.array([0., 0., 1.]), # Thickness along Z - w_dir=np.array([0., 1., 0.]) # Length along Y - ) - stiffeners.append(long_stiff) + if seg_len > 0: + seg_z_web_center = Z_top - seg.T_ft - seg.D / 2 + + heights = [] + if num_longitudinal_stiffeners == 1: + heights.append(seg_z_web_center + seg.D / 2 - seg.D / 3) + elif num_longitudinal_stiffeners == 2: + heights.append(seg_z_web_center + seg.D / 2 - seg.D / 3) + heights.append(seg_z_web_center + seg.D / 2 - 2 * seg.D / 3) + + for h in heights: + long_stiff = _make_plate( + origin=np.array([seg.tw / 2 + long_stiff_width / 2, seg_start_y, h]), + length=long_stiff_width, + width=seg_len, + thickness=longitudinal_stiffener_thickness, + u_dir=np.array([0., 0., 1.]), + w_dir=np.array([0., 1., 0.]) + ) + stiffeners.append(long_stiff) + + curr_y += seg.length # Shear Studs shear_studs = [] @@ -380,12 +442,20 @@ def build_plate_girder_geometry( supports_tri = [] supports_cyl = [] - # Contact level (bottom of bottom flange) - z_contact = -(D / 2.0 + T_fb) + # Calculate actual contact levels from the end segments + Z_top = D / 2 + T_ft + seg_left = segments[0] + seg_right = segments[-1] + + # Left support Z level + z_contact_left = Z_top - seg_left.T_ft - seg_left.D - seg_left.T_fb - # Support width spans flange width - support_width = max(B_ft, B_fb) + # Right support Z level + z_contact_right = Z_top - seg_right.T_ft - seg_right.D - seg_right.T_fb + # Support width spans flange width + support_width_left = max(seg_left.B_ft, seg_left.B_fb) + support_width_right = max(seg_right.B_ft, seg_right.B_fb) base_dim = min(0.10 * length, 0.75 * D) @@ -399,8 +469,8 @@ def build_plate_girder_geometry( # TRIANGULAR SUPPORT (LEFT) y_apex = w_supp - z_apex = z_contact - x_face = -support_width / 2.0 + z_apex = z_contact_left + x_face = -support_width_left / 2.0 p1 = gp_Pnt(x_face, y_apex, z_apex) p2 = gp_Pnt(x_face, y_apex - w_supp, z_apex - h_supp) @@ -419,7 +489,7 @@ def build_plate_girder_geometry( tri_support = BRepPrimAPI_MakePrism( face, - gp_Vec(support_width, 0, 0) + gp_Vec(support_width_left, 0, 0) ).Shape() supports_tri.append(tri_support) @@ -427,24 +497,24 @@ def build_plate_girder_geometry( # CYLINDRICAL SUPPORT (RIGHT) y_cyl = length - r_cyl - z_cyl_center = z_contact - r_cyl + z_cyl_center = z_contact_right - r_cyl - pt_cyl = gp_Pnt(-support_width / 2.0, y_cyl, z_cyl_center) + pt_cyl = gp_Pnt(-support_width_right / 2.0, y_cyl, z_cyl_center) axis = gp_Ax2(pt_cyl, gp_Dir(1, 0, 0)) cyl_support = BRepPrimAPI_MakeCylinder( axis, r_cyl, - support_width + support_width_right ).Shape() supports_cyl.append(cyl_support) - web = _rotate_about_z(web, -90) - top_flange = _rotate_about_z(top_flange, -90) - bottom_flange = _rotate_about_z(bottom_flange, -90) + web_shapes = [ _rotate_about_z(w, -90) for w in web_shapes ] + top_flange_shapes = [ _rotate_about_z(tf, -90) for tf in top_flange_shapes ] + bottom_flange_shapes = [ _rotate_about_z(bf, -90) for bf in bottom_flange_shapes ] stiffeners = [ _rotate_about_z(s, -90) for s in stiffeners @@ -465,9 +535,9 @@ def build_plate_girder_geometry( return { - "web": web, - "top_flange": top_flange, - "bottom_flange": bottom_flange, + "web": web_shapes, + "top_flange": top_flange_shapes, + "bottom_flange": bottom_flange_shapes, "stiffeners": stiffeners, "supports_tri": supports_tri, "supports_cyl": supports_cyl, From 896f055f9973cf2cae781a416bc1b534e0f90d94 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 16 Apr 2026 23:09:28 +0530 Subject: [PATCH 158/225] Add girder segmentation and shear stud param support with DTO integration and CAD updates --- .../plate_girder/cad_generator.py | 88 ++++++++++++++----- .../core/bridge_types/plate_girder/dto.py | 50 ++++++++++- src/osdagbridge/desktop/ui/cad_3d.py | 26 +++++- src/osdagbridge/desktop/ui/template_page.py | 26 +++++- 4 files changed, 164 insertions(+), 26 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 5856f2f61..073c40672 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -161,20 +161,39 @@ def _set_parameters(self, design_params: BridgeParametersDTO): B_fb=self.girder_section_bf_b ) ] - - # Example: Girder 1 (index 0) and Girder 2 (index 1) split into 3 segments - self.girder_segments_dict = { - 0: [ - GirderSegment(length=3000, D=500, tw=100, T_ft=260, T_fb=260, B_ft=500, B_fb=500), - GirderSegment(length=4000, D=1400, tw=100, T_ft=260, T_fb=260, B_ft=700, B_fb=700), - GirderSegment(length=3000, D=700, tw=100, T_ft=260, T_fb=260, B_ft=500, B_fb=500) - ], - 1: [ - GirderSegment(length=2000, D=900, tw=100, T_ft=260, T_fb=260, B_ft=500, B_fb=500), - GirderSegment(length=5000, D=300, tw=100, T_ft=260, T_fb=260, B_ft=700, B_fb=700), - GirderSegment(length=3000, D=600, tw=100, T_ft=260, T_fb=260, B_ft=500, B_fb=500) + + # Optional segmented girder definitions from DTO + self.girder_segments_dict = {} + if design_params.girder_segments: + self.girder_segments = [ + GirderSegment( + length=s.length, + D=s.D, + tw=s.tw, + T_ft=s.T_ft, + T_fb=s.T_fb, + B_ft=s.B_ft, + B_fb=s.B_fb, + ) + for s in design_params.girder_segments ] - } + + if design_params.girder_segments_dict: + self.girder_segments_dict = { + idx: [ + GirderSegment( + length=s.length, + D=s.D, + tw=s.tw, + T_ft=s.T_ft, + T_fb=s.T_fb, + B_ft=s.B_ft, + B_fb=s.B_fb, + ) + for s in segs + ] + for idx, segs in design_params.girder_segments_dict.items() + } # GEOMETRY PARAMETERS @@ -215,13 +234,14 @@ def _set_parameters(self, design_params: BridgeParametersDTO): self.longitudinal_stiffener_outstand = design_params.longitudinal_stiffener_outstand # SHEAR STUD PARAMETERS - self.shear_stud_base_diameter = 50 - self.shear_stud_top_diameter = 70 - self.shear_stud_base_height = 150 - self.shear_stud_top_height = 50 - self.num_shear_studs_per_section = 4 - self.shear_stud_transverse_spacing = 305 - self.shear_stud_pitch = 500 + ss = design_params.shear_stud_params + self.shear_stud_base_diameter = ss.base_diameter + self.shear_stud_top_diameter = ss.top_diameter + self.shear_stud_base_height = ss.base_height + self.shear_stud_top_height = ss.top_height + self.num_shear_studs_per_section = ss.num_per_section + self.shear_stud_transverse_spacing = ss.transverse_spacing + self.shear_stud_pitch = ss.pitch # CROSS BRACING PARAMETERS self.cross_bracing_spacing = design_params.cross_bracing_spacing @@ -290,6 +310,34 @@ def _set_parameters(self, design_params: BridgeParametersDTO): "flange_thickness": design_params.end_diaphragm_dims.flange_thickness, } + def get_girder_depth_at(self, girder_idx, x): + """ + Calculate the clear web depth of a specific girder at a longitudinal position. + + Args: + girder_idx: Index of the girder (0 to num_girders-1) + x: Longitudinal position (0 to span_length_L) + + Returns: + float: Web depth D at that position + """ + # Fetch segments for this girder if available, else use default segments. + if self.girder_segments_dict and girder_idx in self.girder_segments_dict: + segments = self.girder_segments_dict[girder_idx] + else: + segments = self.girder_segments + + if not segments: + return self.girder_section_d + + curr_x = 0.0 + for seg in segments: + if x <= curr_x + seg.length + 1e-6: + return seg.D + curr_x += seg.length + + return segments[-1].D + def generate(self, design_params: BridgeParametersDTO): """ Generate complete bridge CAD geometry. diff --git a/src/osdagbridge/core/bridge_types/plate_girder/dto.py b/src/osdagbridge/core/bridge_types/plate_girder/dto.py index 0836e26d1..1c3fdc79b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/dto.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/dto.py @@ -12,9 +12,11 @@ "MaterialProperties", "GrillageGeometry", "DeckLayoutProperties", - "SectionDimsDTO" - "ISectionDimsDTO" - "BridgeParametersDTO" + "SectionDimsDTO", + "ISectionDimsDTO", + "ShearStudParamsDTO", + "GirderSegmentDTO", + "BridgeParametersDTO", ] # ------------------------------------------------------------------ @@ -232,7 +234,7 @@ class DeckLayoutProperties: -from dataclasses import dataclass +from dataclasses import dataclass, field from typing import Optional @@ -255,6 +257,28 @@ class ISectionDimsDTO: flange_thickness: float +@dataclass +class ShearStudParamsDTO: + base_diameter: float + top_diameter: float + base_height: float + top_height: float + num_per_section: int + transverse_spacing: float + pitch: float + + +@dataclass +class GirderSegmentDTO: + length: float + D: float + tw: float + T_ft: float + T_fb: float + B_ft: float + B_fb: float + + # --------------------------------------------------------------------------- # Main DTO # --------------------------------------------------------------------------- @@ -350,4 +374,22 @@ class BridgeParametersDTO: end_diaphragm_section: str end_diaphragm_dims: ISectionDimsDTO + + shear_stud_params: ShearStudParamsDTO = field( + default_factory=lambda: ShearStudParamsDTO( + base_diameter=50, + top_diameter=70, + base_height=150, + top_height=50, + num_per_section=4, + transverse_spacing=305, + pitch=500, + ) + ) + + #while segment lists can + # remain empty to use the base girder section values. + girder_segments: list[GirderSegmentDTO] = field(default_factory=list) + girder_segments_dict: dict[int, list[GirderSegmentDTO]] = field(default_factory=dict) + diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index 55f7b0795..2c77f3d01 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -33,7 +33,9 @@ from osdagbridge.core.bridge_types.plate_girder.dto import ( BridgeParametersDTO, SectionDimsDTO, - ISectionDimsDTO + ISectionDimsDTO, + ShearStudParamsDTO, + GirderSegmentDTO, ) class CAD3DWindow(QWidget): @@ -674,6 +676,28 @@ def main(): end_diaphragm_section="I_SECTION", end_diaphragm_dims=ISectionDimsDTO(depth=800, flange_width=250, web_thickness=12, flange_thickness=100), + + shear_stud_params=ShearStudParamsDTO( + base_diameter=50, + top_diameter=70, + base_height=150, + top_height=50, + num_per_section=4, + transverse_spacing=305, + pitch=500, + ), + girder_segments=[ + GirderSegmentDTO( + length=25_000, + D=900, + tw=100, + T_ft=260, + T_fb=260, + B_ft=500, + B_fb=500, + ) + ], + girder_segments_dict=None, ) win = CAD3DWindow() diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index aafa5e364..dc93afc66 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -22,7 +22,9 @@ from osdagbridge.core.bridge_types.plate_girder.dto import( BridgeParametersDTO, SectionDimsDTO, - ISectionDimsDTO + ISectionDimsDTO, + ShearStudParamsDTO, + GirderSegmentDTO, ) from osdagbridge.desktop.ui.utils.custom_widgets import ToolBarWidget @@ -117,6 +119,28 @@ end_diaphragm_section="I_SECTION", end_diaphragm_dims=ISectionDimsDTO(depth=800, flange_width=250, web_thickness=12, flange_thickness=100), + + shear_stud_params=ShearStudParamsDTO( + base_diameter=50, + top_diameter=70, + base_height=150, + top_height=50, + num_per_section=4, + transverse_spacing=305, + pitch=500, + ), + girder_segments=[ + GirderSegmentDTO( + length=25_000, + D=900, + tw=100, + T_ft=260, + T_fb=260, + B_ft=500, + B_fb=500, + ) + ], + girder_segments_dict=None, ) From 8b7fb61345331fc6f5ad884176b1956084af9d5c Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Fri, 17 Apr 2026 10:08:23 +0530 Subject: [PATCH 159/225] connected dcr values to output dock --- .../bridge_types/plate_girder/designer.py | 2 +- .../plate_girder/plategirderbridge.py | 46 ++++++++++++++----- .../desktop/ui/docks/output_dock.py | 20 +++++++- src/osdagbridge/desktop/ui/template_page.py | 1 + 4 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index 9717e268f..39ecc2bce 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -1594,7 +1594,7 @@ def run_design_check( print(f" PIPELINE COMPLETE - Overall: {engine.overall_status()}") print("=" * 60) - return report_text + return report_text, engine # ====================================================================== diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 3e3c0ef97..57d940996 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -14,6 +14,7 @@ from .initial_sizing import BridgeConfigurationSolver, DEFAULT_FOOTPATH_WIDTH from .analyser import BridgeGrillageModel from .analysis_results import PlateGirderAnalysisResults +from .designer import run_design_check from .plot_generator import ( build_figure_sfd, build_figure_bmd, @@ -45,6 +46,14 @@ GPa, N, m, + KEY_UTIL_FLEXURE, + KEY_UTIL_SHEAR, + KEY_UTIL_INTERACTION, + KEY_UTIL_LTB, + KEY_UTIL_DEFLECTION_CRACK, + KEY_UTIL_FATIGUE, + KEY_UTIL_LONG_TRANS_SHEAR, + KEY_UTIL_STRESS_LIMITATION, ) # Default median width (m) used when user enables median but no additional-input @@ -156,17 +165,7 @@ def design(self) -> None: f"girder_depth={self.section_props['D']:.3f} m" ) - # Automatically run structural capacity pipeline after analysis completes - from .analysis_results import PlateGirderAnalysisResults - from .designer import run_design_check - - results = PlateGirderAnalysisResults(dataset=dataset, bridge=self.grillage_model) - - run_design_check( - plate_girder_bridge=self, - analysis_results=results, - print_report=True, - ) + self._run_dcr_checks(dataset) def _parse_basic_inputs(self) -> dict: """Extract and normalise scalar values from ``self.basic_inputs``.""" @@ -593,6 +592,31 @@ def analyze(self): return self.grillage_model.analyze() + # ───────────────────────────────────────────────────────────────────────── + # DCR checks + # ───────────────────────────────────────────────────────────────────────── + + def _run_dcr_checks(self, dataset) -> None: + """Run structural capacity checks and push DCR percentages to the output dock.""" + results = PlateGirderAnalysisResults(dataset=dataset, bridge=self.grillage_model) + _, engine = run_design_check( + plate_girder_bridge=self, + analysis_results=results, + print_report=True, + ) + + dcr_by_id: dict[int, float] = {c.check_id: c.dcr for c in engine.checks} + self._frontend.set_output_value(KEY_UTIL_FLEXURE, dcr_by_id.get(1, 0.0) * 100) + self._frontend.set_output_value(KEY_UTIL_SHEAR, dcr_by_id.get(2, 0.0) * 100) + self._frontend.set_output_value(KEY_UTIL_INTERACTION, dcr_by_id.get(3, 0.0) * 100) + self._frontend.set_output_value(KEY_UTIL_LTB, dcr_by_id.get(4, 0.0) * 100) + defl_dcr = max(dcr_by_id.get(5, 0.0), dcr_by_id.get(6, 0.0)) + self._frontend.set_output_value(KEY_UTIL_DEFLECTION_CRACK, defl_dcr * 100) + fatigue_dcr = max(dcr_by_id.get(7, 0.0), dcr_by_id.get(8, 0.0)) + self._frontend.set_output_value(KEY_UTIL_FATIGUE, fatigue_dcr * 100) + self._frontend.set_output_value(KEY_UTIL_LONG_TRANS_SHEAR, 0.0) + self._frontend.set_output_value(KEY_UTIL_STRESS_LIMITATION, 0.0) + # ───────────────────────────────────────────────────────────────────────── # Plotting # ───────────────────────────────────────────────────────────────────────── diff --git a/src/osdagbridge/desktop/ui/docks/output_dock.py b/src/osdagbridge/desktop/ui/docks/output_dock.py index cab19e10c..31118107c 100644 --- a/src/osdagbridge/desktop/ui/docks/output_dock.py +++ b/src/osdagbridge/desktop/ui/docks/output_dock.py @@ -30,7 +30,10 @@ from osdagbridge.core.utils.common import ( TYPE_TITLE, TYPE_BUTTON, TYPE_COMBOBOX, TYPE_PERCENT_BAR, TYPE_RADIO_GRID, - TYPE_CHECKBOX, TYPE_CHECKBOX_ROW, TYPE_CHECKBOX_GRID, TYPE_ONLY_BUTTON + TYPE_CHECKBOX, TYPE_CHECKBOX_ROW, TYPE_CHECKBOX_GRID, TYPE_ONLY_BUTTON, + KEY_UTIL_FLEXURE, KEY_UTIL_SHEAR, KEY_UTIL_INTERACTION, KEY_UTIL_LTB, + KEY_UTIL_LONG_TRANS_SHEAR, KEY_UTIL_FATIGUE, KEY_UTIL_STRESS_LIMITATION, + KEY_UTIL_DEFLECTION_CRACK, ) from osdagbridge.desktop.ui.utils.custom_buttons import DockCustomButton from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style @@ -572,6 +575,21 @@ def resizeEvent(self, event): # ── Action handlers (called by name from schema) ────────────────────────── + def refresh_utilization(self): + """Read utilization ratios from backend and update all PercentBarWidgets.""" + if not self.backend or not hasattr(self.backend, "_frontend"): + return + frontend = self.backend._frontend + for key in ( + KEY_UTIL_FLEXURE, KEY_UTIL_SHEAR, KEY_UTIL_INTERACTION, + KEY_UTIL_LTB, KEY_UTIL_LONG_TRANS_SHEAR, KEY_UTIL_FATIGUE, + KEY_UTIL_STRESS_LIMITATION, KEY_UTIL_DEFLECTION_CRACK, + ): + value = frontend.get_output_value(key, 0.0) + bar = self._w(key) + if bar is not None: + bar.set_value(float(value)) + def open_steel_design(self): from osdagbridge.desktop.ui.dialogs.steel_design import SteelDesign SteelDesign(parent=self.parent).exec() diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index dc93afc66..a7cc6bcdb 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -525,6 +525,7 @@ def common_design_func(self, trigger: str): # Collect all the values from input Dock and pass to backend self.backend.set_input(self.input_dict) self.backend.design() + self.output_dock.refresh_utilization() # Lock the input dock after design is triggered if self.input_dock and not self.input_dock.is_locked: From b0f7aa6655f7f4c0d0fa61b5a597d218cfc0aead Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Sun, 19 Apr 2026 00:51:22 +0530 Subject: [PATCH 160/225] updated toolbar size and visibility --- src/osdagbridge/desktop/ui/docks/tmp.py | 0 src/osdagbridge/desktop/ui/template_page.py | 17 +++++++++++++++++ .../desktop/ui/utils/custom_widgets.py | 9 ++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) delete mode 100644 src/osdagbridge/desktop/ui/docks/tmp.py diff --git a/src/osdagbridge/desktop/ui/docks/tmp.py b/src/osdagbridge/desktop/ui/docks/tmp.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index a7cc6bcdb..c8430b7f5 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -431,6 +431,20 @@ def mousePressEvent(self, event): # Initial CAD update to sync with starting UI values (e.g., footpath=None) self.update_cad_from_inputs() + + # Update tool bar visibility based on view rules + self._update_tool_bar_visibility() + + #-------View-Rules-of-Tool-bar-START---------------------------------------- + + def _update_tool_bar_visibility(self): + """Show/hide tool bar buttons based on rules defined here""" + if self.cad_3d_view_active or self.plots_view_active: + self.tool_bar.setVisible(True) + else: + self.tool_bar.setVisible(False) + + #-------View-Rules-of-Tool-bar-END---------------------------------------- #-------Common-Design-Save-Additional-Inputs-Functionality-START------- @@ -757,6 +771,9 @@ def _set_central_view(self, view: str): else: # plots self.cad_log_splitter.setSizes([0, 0, view_h, log_h]) + # Update tool bar visibility based on view rules + self._update_tool_bar_visibility() + def _position_log_dock(self): """Position log dock at bottom of central widget as overlay (max 1/5 height)""" if hasattr(self, 'logs_dock') and hasattr(self, 'cad_comp_widget'): diff --git a/src/osdagbridge/desktop/ui/utils/custom_widgets.py b/src/osdagbridge/desktop/ui/utils/custom_widgets.py index fd89a45c1..d08a4df8f 100644 --- a/src/osdagbridge/desktop/ui/utils/custom_widgets.py +++ b/src/osdagbridge/desktop/ui/utils/custom_widgets.py @@ -441,6 +441,7 @@ def __init__(self, parent=None): super().__init__(parent) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.setFixedHeight(30) main_layout = QHBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) @@ -469,7 +470,7 @@ def __init__(self, parent=None): self.layout.setContentsMargins(5, 0, 5, 0) self.layout.setSpacing(6) - icon_size = QSize(29, 29) + icon_size = QSize(20, 20) # Button style with subtle hover button_qss = """ @@ -488,7 +489,7 @@ def create_button(icon_path, tooltip): btn.setIcon(QIcon(icon_path)) btn.setIconSize(icon_size) btn.setToolTip(tooltip) - btn.setFixedSize(32, 32) + btn.setFixedSize(24, 24) btn.setCursor(QCursor(Qt.PointingHandCursor)) btn.setStyleSheet(button_qss) btn.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) @@ -498,10 +499,11 @@ def add_separator(): sep = QFrame() sep.setFrameShape(QFrame.VLine) sep.setFrameShadow(QFrame.Plain) - sep.setFixedHeight(32) + sep.setFixedHeight(24) sep.setStyleSheet(""" QFrame { color: #999999; + margin: 0px; margin-left: 10px; margin-right: 10px; } @@ -551,6 +553,7 @@ def add_separator(): border-radius: 4px; padding-right: 10px; /* space for BOTH buttons */ background: #f8f8f8; + margin: 0px; } QSpinBox:hover { From fb2693eea94a750effed9682604f9c040e605e74 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Sun, 19 Apr 2026 16:04:25 +0530 Subject: [PATCH 161/225] feat: updated viewcube to geompy::navcube --- .../desktop/ui/utils/custom_3dviewer.py | 483 +++++++++++------- 1 file changed, 300 insertions(+), 183 deletions(-) diff --git a/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py b/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py index c7b22b695..99727324c 100644 --- a/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py +++ b/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py @@ -1,32 +1,16 @@ """ Custom 3D CAD Viewer with stable hover highlighting for models and ViewCube. """ -from PySide6.QtCore import QTimer, QTime, Qt +import math +from PySide6.QtCore import QEvent, QPoint, QTimer, Qt from PySide6.QtWidgets import QToolTip, QApplication -from OCC.Display.backend import load_backend -# from osdag_gui.__config__ import CAD_BACKEND -try: - from osdag_gui.__config__ import CAD_BACKEND -except ImportError: - CAD_BACKEND = "OCC" - - -load_backend('pyside6') +from OCC.Display import backend +backend.load_backend("pyside6") from OCC.Display.qtDisplay import qtViewer3d -from OCC.Core.AIS import AIS_ViewCube -from OCC.Core.Prs3d import Prs3d_DatumAspect, Prs3d_Drawer -from OCC.Core.Quantity import ( - Quantity_Color, - Quantity_NOC_WHITE, - Quantity_NOC_GRAY50, - Quantity_NOC_BLACK, - Quantity_NOC_CYAN, -) -from OCC.Core.V3d import V3d_Zpos -from OCC.Core.Aspect import Aspect_GT_Rectangular, Aspect_GDM_Lines - +from navcube import NavCubeOverlay, NavCubeStyle +from navcube.connectors.occ import OCCNavCubeSync class CustomViewer3d(qtViewer3d): def __init__(self, parent=None): @@ -40,28 +24,168 @@ def __init__(self, parent=None): self.current_hovered_model = None self.current_highlighted_ais_list = [] + self.current_highlighted_owner = None self.hover_timer = QTimer(self) self.hover_timer.setSingleShot(True) self.hover_timer.timeout.connect(self.show_tooltip) self.hover_position = None - # ViewCube interaction state - self.view_cube = None - self.view_cube_active = False - self.is_interacting_with_cube = False - self.mouse_press_pos = None - self.mouse_press_time = 0 + # Host the overlay as a sibling widget instead of a child of the + # OCC/OpenGL canvas. This avoids corrupted transparent repaints on Linux. + overlay_parent = parent if parent is not None else self + self.navcube = NavCubeOverlay(overlay_parent) + self.navcube.hide() + self._overlay_anchor = overlay_parent + self._navcube_sync: OCCNavCubeSync | None = None # created once view is ready + if self._overlay_anchor is not None and self._overlay_anchor is not self: + self._overlay_anchor.installEventFilter(self) + self.destroyed.connect(self._teardown_navcube) + + # ---------------- Navigation state ---------------- + self.active_nav_mode = None # NavMode.ROTATE / PAN + self.is_dragging_nav = False + self.last_mouse_pos = None + + def resizeEvent(self, event): + super().resizeEvent(event) + self._resize_navcube() + self._position_navcube() + + def _resize_navcube(self): + """Scale the NavCube to a consistent 8% of the viewport in physical pixels. + + style.size is a 96-dpi-equivalent reference pixel value. _update_dpi + converts it via: target_phys = ref_size * physical_dpi / 96. + + To keep the cube at exactly vp_physical * 0.08 physical pixels on every + screen (regardless of OS zoom level or monitor DPI) we set: + ref_size = vp_physical * 0.08 * 96 / physical_dpi + + Then _update_dpi computes: + target_phys = ref_size * physical_dpi / 96 = vp_physical * 0.08 ✓ + new_size = target_phys / dpr = vp_logical * 0.08 ✓ + + Padding uses the same 96/physical_dpi factor so it stays proportional. + """ + if not hasattr(self, "navcube") or not self.navcube: + return + vp_logical = min(self.width(), self.height()) + if vp_logical < 10: + return + + nc = self.navcube + app = QApplication.instance() + screen = nc.screen() if nc.isVisible() else None + if screen is None and app: + screen = app.primaryScreen() + dpr = max(1.0, screen.devicePixelRatio()) if screen is not None else 1.0 + + # Use physical viewport size so the cube fraction is DPI-independent. + physical_dpi = max(72.0, min(screen.physicalDotsPerInch(), 400.0)) if screen else 96.0 + vp_physical = vp_logical * dpr + ref_size = max(40, min(round(vp_physical * 0.08 * 96.0 / physical_dpi), 90)) + ref_padding = round(10 * 96.0 / physical_dpi) # consistent logical pad across DPIs + ref_scale = round(25.0 * ref_size / 100.0, 2) + + if (nc._style.size == ref_size and nc._style.padding == ref_padding + and abs(nc._style.scale - ref_scale) < 0.05): + return + nc._style.size = ref_size + nc._style.padding = ref_padding + nc._style.scale = ref_scale + nc._update_dpi() + + def moveEvent(self, event): + super().moveEvent(event) + self._position_navcube() + + def showEvent(self, event): + super().showEvent(event) + self._resize_navcube() + self._position_navcube() + # Re-show the navcube when the tab is restored or the window is un-minimized. + # Only show it if OCC has already been initialised (_navcube_sync set). + if ( + hasattr(self, "navcube") and self.navcube + and getattr(self, "_navcube_sync", None) is not None + ): + self.navcube.show() + self.navcube.raise_() + + def hideEvent(self, event): + if hasattr(self, "navcube") and self.navcube: + self.navcube.hide() + super().hideEvent(event) + + def _position_navcube(self): + if not hasattr(self, "navcube") or not self.navcube: + return + + host = self.navcube.parentWidget() + if host is None: + return + + padding = 10 + local_pos = QPoint( + max(0, self.width() - self.navcube.width() - padding), + padding, + ) + + if host is self: + target_pos = local_pos + elif self.navcube.isWindow(): + target_pos = self.mapToGlobal(local_pos) + else: + global_pos = self.mapToGlobal(local_pos) + target_pos = host.mapFromGlobal(global_pos) + + self.navcube.move(target_pos) + if self.navcube.isVisible(): + self.navcube.raise_() + + def eventFilter(self, watched, event): + if watched is getattr(self, "_overlay_anchor", None): + if event.type() in ( + QEvent.Move, + QEvent.Resize, + QEvent.Show, + QEvent.WindowStateChange, + ): + self._position_navcube() + if hasattr(self, "navcube") and self.navcube and self.navcube.isVisible(): + self.navcube.raise_() + return super().eventFilter(watched, event) # ------------------------------------------------------------------ - # Mouse Move Event (FIXED) + # Mouse Move Event # ------------------------------------------------------------------ def mouseMoveEvent(self, event): - if not self.context or not self.view: - super().mouseMoveEvent(event) + + # ---------------- NAVIGATION MOVE ---------------- + if self.is_dragging_nav and self.active_nav_mode: + pixel_ratio = self.devicePixelRatioF() + + x = int(event.position().x() * pixel_ratio) + y = int(event.position().y() * pixel_ratio) + + last_x = int(self.last_mouse_pos.x() * pixel_ratio) + last_y = int(self.last_mouse_pos.y() * pixel_ratio) + + dx = x - last_x + dy = y - last_y + + if self.active_nav_mode == NavMode.ROTATE: + self.view.Rotation(x, y) + + elif self.active_nav_mode == NavMode.PAN: + self.view.Pan(dx, -dy) + + self.last_mouse_pos = event.position() + event.accept() return - if self.is_interacting_with_cube: + if not self.context or not self.view: super().mouseMoveEvent(event) return @@ -77,26 +201,6 @@ def mouseMoveEvent(self, event): if self.context.HasDetected(): detected = self.context.DetectedInteractive() - # ------------------------------------------------------ - # VIEW CUBE HOVER (STABLE – NO FLICKER) - # ------------------------------------------------------ - if self.view_cube and detected == self.view_cube: - if not self.view_cube_active: - self.context.SetAutomaticHilight(True) - self.view_cube_active = True - return - - # ------------------------------------------------------ - # LEFT VIEW CUBE → CLEANUP - # ------------------------------------------------------ - if self.view_cube_active: - self.context.SetAutomaticHilight(False) - self.view_cube_active = False - try: - self.context.Unhilight(self.view_cube, True) - except: - pass - # ------------------------------------------------------ # STANDARD MODEL HIGHLIGHTING # ------------------------------------------------------ @@ -137,14 +241,6 @@ def mouseMoveEvent(self, event): else: # Nothing detected → cleanup - if self.view_cube_active: - self.context.SetAutomaticHilight(False) - self.view_cube_active = False - try: - self.context.Unhilight(self.view_cube, True) - except: - pass - if self.current_highlighted_ais_list: for obj in self.current_highlighted_ais_list: try: @@ -189,14 +285,6 @@ def leaveEvent(self, event): self.hover_timer.stop() self.current_hovered_model = None - if self.view_cube_active: - self.context.SetAutomaticHilight(False) - self.view_cube_active = False - try: - self.context.Unhilight(self.view_cube, True) - except: - pass - if self.current_highlighted_ais_list: for obj in self.current_highlighted_ais_list: try: @@ -218,33 +306,22 @@ def cleanup_for_new_model(self): """ Clean up all internal state before displaying a new model. This prevents memory corruption from stale OCC object references. - """ - import gc - # Reset view cube state - if hasattr(self, 'view_cube') and self.view_cube: - try: - # Try to remove from context if possible - if self.context: - try: - self.context.Remove(self.view_cube, False) - except Exception: - pass # May already be removed by EraseAll - except Exception: - pass - self.view_cube = None - - # Reset View Cube interaction state - self.view_cube_active = False - self.is_interacting_with_cube = False + Uses IsDisplayed/IsHilighted checks for OS-independent safety: + - Windows requires explicit Remove before EraseAll for AIS_ViewCube + - Linux crashes with double-free if Remove is called on already-freed objects + - Checking first avoids both issues. + """ - # Clear highlighted objects list + # Clear highlighted objects list - use IsHilighted check for OS-independent safety if self.current_highlighted_ais_list and self.context: for obj in self.current_highlighted_ais_list: try: - self.context.Unhilight(obj, False) + # Only unhilight if confirmed still highlighted + if self.context.IsHilighted(obj): + self.context.Unhilight(obj, False) except Exception: - pass + pass # Object may already be unhighlighted or invalid self.current_highlighted_ais_list = [] elif self.current_highlighted_ais_list: # Context not available, just clear the list @@ -259,89 +336,102 @@ def cleanup_for_new_model(self): # Clear hover labels self.model_hover_labels.clear() - # Force garbage collection to clean up OCC shapes - gc.collect() + # NOTE: Do NOT call gc.collect() here! + # The gdb backtrace shows the crash happens during GC when trying to clean up + # Shiboken MetaObjectBuilder objects. Let Python handle GC naturally. + + # ------------------------------------------------------------------ + # NaviCube teardown + # ------------------------------------------------------------------ + + def _teardown_navcube(self): + """ + Called via self.destroyed signal when this viewer's C++ object is + being deleted. Tears down the OCC sync helper (stops its poll timer, + disconnects signals) then makes the navicube widget inert. + The widget itself is parented to the tab and is deleted by Qt; we + just ensure no OCC calls happen after this point. + """ + try: + sync = getattr(self, "_navcube_sync", None) + if sync is not None: + sync.teardown() + self._navcube_sync = None + except Exception: + pass + try: + nc = getattr(self, "navcube", None) + if nc is not None: + nc._tmr.stop() # stop navicube's own animation timer + nc.hide() + except Exception: + pass # ------------------------------------------------------------------ # View Cube Display # ------------------------------------------------------------------ def display_view_cube(self): - import gc + """Displays the custom Qt NaviCube overlay after CAD init.""" + if not (hasattr(self, "navcube") and self.navcube and self.view): + return - try: - # Force garbage collection before OCC operations to prevent heap corruption - gc.collect() - - # Remove existing view cube if it exists using safe method - if hasattr(self, 'view_cube') and self.view_cube: - try: - self.context.Remove(self.view_cube, False) - except Exception as remove_error: - # Object may have been displayed in a different context or already removed - # Just log and continue - we'll create a fresh one - print(f"Note: Could not remove old ViewCube (may already be removed): {remove_error}") - self.view_cube = None - - self.view_cube = AIS_ViewCube() - self.view_cube.SetSize(45) - self.view_cube.SetFontHeight(12) - self.view_cube.SetAxesLabels("", "", "") - self.view_cube.SetDrawAxes(False) - - # Make corner and edge pieces larger for better interaction - self.view_cube.SetBoxFacetExtension(12) - - # Configure Highlight Attributes - highlight_drawer = Prs3d_Drawer() - highlight_drawer.SetColor(Quantity_Color(Quantity_NOC_CYAN)) - self.view_cube.SetHilightAttributes(highlight_drawer) - - # Style - drawer = self.view_cube.Attributes() - drawer.SetDatumAspect(Prs3d_DatumAspect()) - - # Colors - color_white = Quantity_Color(Quantity_NOC_WHITE) - color_gray = Quantity_Color(Quantity_NOC_GRAY50) - color_black = Quantity_Color(Quantity_NOC_BLACK) - - self.view_cube.SetColor(color_white) - self.view_cube.SetBoxColor(color_gray) - self.view_cube.SetTextColor(color_black) - - # Display - self.context.Display(self.view_cube, False) - - try: - from OCC.Core.Graphic3d import Graphic3d_TransformPers, Graphic3d_TMF_TriedronPers, Graphic3d_Vec2i - from OCC.Core.Aspect import Aspect_TOTP_RIGHT_UPPER - - # Create transform persistence anchored to top-right corner - offset = Graphic3d_Vec2i(60, 70) - transform_pers = Graphic3d_TransformPers(Graphic3d_TMF_TriedronPers, Aspect_TOTP_RIGHT_UPPER, offset) - self.view_cube.SetTransformPersistence(transform_pers) - except Exception as e: - # Fallback to old method if Graphic3d classes not available - print(f"Using fallback positioning: {e}") - try: - # Try 2D persistence as fallback - from OCC.Core.Graphic3d import Graphic3d_TransformPers, Graphic3d_TMF_2d - from OCC.Core.gp import gp_Pnt2d - # Try explicit coordinates if corner persistence fails - offset = gp_Pnt2d(850, 40) - transform_pers = Graphic3d_TransformPers(Graphic3d_TMF_2d, offset) - self.view_cube.SetTransformPersistence(transform_pers) - except: - self.view_cube.SetTransformPersistence( - V3d_Zpos, - Aspect_GT_Rectangular, - Aspect_GDM_Lines - ) - - self.view.Redraw() - except Exception as e: - print(f"Error displaying View Cube: {e}") + # Engineering-neutral — matches Osdag's UI language + # faces → warm white / light grey (matches panel backgrounds) + # edges → slightly deeper grey bevel + # corners → lightest grey bevel + # hover → Osdag blue (#4A90C4) + # gizmo → standard CAD red/green/blue + style = NavCubeStyle( + # size=65: 96-dpi-reference pixels. _resize_navcube overrides this + # to exactly 9 % of the viewport, but 65 keeps the fallback small on + # screens whose physicalDotsPerInch > 96 (would inflate size=100 → 137px). + size=65, + theme="light", + face_color=(242, 244, 247), # warm white-grey — matches panel bg + edge_color=(218, 224, 232), # slightly darker bevel + corner_color=(228, 232, 238), # light corner bevel + text_color=(45, 55, 72), # dark slate — readable, not harsh + border_color=(30, 30, 30), # black lines + border_secondary_color=(80, 80, 80), + border_width_main=1.6, + border_width_secondary=0.9, + hover_color=(145, 176, 20, 235), # Osdag green #91b014 + hover_text_color=(255, 255, 255), + dot_color=(60, 60, 60, 180), + shadow_color=(20, 20, 20, 45), + shadow_offset_x=2.0, + shadow_offset_y=2.5, + # dark-theme mirrors + face_color_dark=(52, 62, 76), + edge_color_dark=(42, 52, 65), + corner_color_dark=(47, 57, 70), + text_color_dark=(210, 220, 232), + border_color_dark=(200, 200, 200), + border_secondary_color_dark=(130, 130, 130), + hover_color_dark=(145, 176, 20, 235), + show_gizmo=False, + # feel + inactive_opacity=0.70, + animation_ms=300, + light_direction=(-0.5, -1.0, -1.5), + ) + self.navcube.set_style(style) + self._resize_navcube() # set size from viewport (may return early if width=0) + + # Create the OCC sync bridge the first time the view is ready. + if self._navcube_sync is None: + self._navcube_sync = OCCNavCubeSync(self.view, self.navcube) + self._position_navcube() + self.navcube.show() + self.navcube.raise_() + QTimer.singleShot(150, self._show_navcube_when_ready) + + def _show_navcube_when_ready(self): + self._resize_navcube() + self._position_navcube() + self.navcube.mark_ready() + self.navcube.update() # ------------------------------------------------------------------ # Mouse Press @@ -351,17 +441,33 @@ def mousePressEvent(self, event): super().mousePressEvent(event) return + if self._navcube_sync is not None: + self._navcube_sync.set_interaction_active(True) + pixel_ratio = self.devicePixelRatioF() x = int(event.position().x() * pixel_ratio) y = int(event.position().y() * pixel_ratio) self.context.MoveTo(x, y, self.view, True) - if self.context.HasDetected(): - if self.context.DetectedInteractive() == self.view_cube: - self.is_interacting_with_cube = True - self.mouse_press_pos = event.position() - self.mouse_press_time = QTime.currentTime().msecsSinceStartOfDay() + # ---------------- NAVIGATION START ---------------- + if ( + event.button() == Qt.LeftButton + and self.active_nav_mode + and self._can_start_navigation() + ): + self.is_dragging_nav = True + self.last_mouse_pos = event.position() + + pixel_ratio = self.devicePixelRatioF() + x = int(event.position().x() * pixel_ratio) + y = int(event.position().y() * pixel_ratio) + + if self.active_nav_mode == NavMode.ROTATE: + self.view.StartRotation(x, y) + + event.accept() + return super().mousePressEvent(event) @@ -369,19 +475,14 @@ def mousePressEvent(self, event): # Mouse Release # ------------------------------------------------------------------ def mouseReleaseEvent(self, event): - if self.is_interacting_with_cube: - current_time = QTime.currentTime().msecsSinceStartOfDay() - dt = current_time - self.mouse_press_time - dist = (event.position() - self.mouse_press_pos).manhattanLength() - - if dt < 500 and dist < 10: - super().mouseReleaseEvent(event) - else: - self.context.MoveTo(-1, -1, self.view, True) - super().mouseReleaseEvent(event) - - self.is_interacting_with_cube = False - self.mouse_press_pos = None + if self._navcube_sync is not None: + self._navcube_sync.set_interaction_active(False) + + # ---------------- NAVIGATION END ---------------- + if self.is_dragging_nav and event.button() == Qt.LeftButton: + self.is_dragging_nav = False + self.last_mouse_pos = None + event.accept() return # restore holding cursor so cursor can update @@ -389,3 +490,19 @@ def mouseReleaseEvent(self, event): QApplication.restoreOverrideCursor() self.releaseMouse() super().mouseReleaseEvent(event) + + def set_navigation_mode(self, mode): + """ + mode: NavMode.ROTATE | NavMode.PAN | None + """ + self.active_nav_mode = mode + + def _can_start_navigation(self): + if not self.context.HasDetected(): + return False + return True + + +class NavMode: + ROTATE = "ROTATE" + PAN = "PAN" From c443a8140b1cb0b2c8f9a05ba197c5770ce013d0 Mon Sep 17 00:00:00 2001 From: nishikantmandal007 Date: Sun, 19 Apr 2026 10:21:41 +0530 Subject: [PATCH 162/225] refactor: source material, safety, and load factors from IRC modules in plate girder designer Route every steel/concrete/rebar property, partial safety factor, and load combination through irc22_2015, irc6_2017, and keyfile so no values are hardcoded in the designer pipeline. Add SteelProperties.from_grades() factory and thread stress_range_MPa into capacity.compute_all. Drop ReportGenerator.save (text file output) and the save_report/report_path kwargs on run_design_check; keep the (report_text, engine) tuple return. Fix unbound 'table' reference in cl_606_3_1_stud_connector_strength when caller supplies fck_cu_MPa/Ecm_MPa directly. --- .../bridge_types/plate_girder/designer.py | 1048 +++++++++-------- .../core/utils/codes/irc22_2015.py | 34 +- 2 files changed, 552 insertions(+), 530 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index 39ecc2bce..8afce249a 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -1,53 +1,37 @@ -""" -IRC 22:2015 Composite Bridge Design Checker — Single-File Pipeline -=================================================================== - -Automated limit-state verification of steel-concrete composite bridge -girders per IRC:22-2015 (Limit State Method for Composite Construction). - -Pipeline Flow -------------- - Step 1 - BridgeConfig : Material, section, geometry parameters - Step 2 - DemandExtractor : Factored force demands (Mu, Vu, deflections) - Step 3 - IRC22Capacity : Clause-by-clause capacity computation - Step 4 - DCREngine : Demand / Capacity ratios & PASS/WARN/FAIL - Step 5 - ReportGenerator : Formatted engineering report - -Clause Coverage (IRC 22:2015) ------------------------------ - Cl. 603.2.1 - Effective width of concrete flange - Cl. 603 - Section classification (web + flange) - Cl. 603.3.1 - Positive moment capacity (plastic) - Cl. 603.3.3.1 - Lateral-torsional buckling resistance - Cl. 603.3.3.2 - Plastic shear resistance - Cl. 603.3.3.3 - Combined bending + high shear - Cl. 604.3 - Modular ratio - Cl. 604.3.1 - SLS limiting stresses - Cl. 604.3.2 - Deflection limits - Cl. 605 - Fatigue assessment - Cl. 606.3.1 - Shear stud connector strength - Cl. 606.4.1 - Longitudinal shear & stud spacing - -Author : Karn Agarwal -Affiliation : Dayalbagh Educational Institute, Agra -License : MIT -Version : 1.0.0 - -Usage ------ - python main.py -""" +# IRC 22:2015 composite plate-girder design pipeline: Config -> Demand -> Capacity -> DCR -> Report. from __future__ import annotations import math -import os from dataclasses import dataclass, field from datetime import datetime from typing import Dict, List, Optional, Any -# Import for dynamic demand extraction from osdagbridge.core.bridge_types.plate_girder.analysis_results import PlateGirderAnalysisResults +from osdagbridge.core.utils.codes.irc22_2015 import IRC22_2014 +from osdagbridge.core.utils.codes.irc6_2017 import IRC6_2017 +from osdagbridge.core.utils.codes.keyfile import ( + E_STEEL_MPA, + G_STEEL_MPA, + POISSON_RATIO_STEEL, + GAMMA_M0_STEEL, + GAMMA_M1_STEEL_ULTIMATE, + GAMMA_M_REINFORCEMENT, + KEY_VEHICLE, +) + + +# IRC 22:2015 Cl.601.4 Table 1 — partial safety factors (pulled once at import). +_GAMMA_M = IRC22_2014.cl_601_4_material_safety_factors() +GAMMA_M0 = _GAMMA_M["structural_steel_yield"]["ULS"] # yielding / instability +GAMMA_M1 = _GAMMA_M["structural_steel_ultimate"]["ULS"] # ultimate stress +GAMMA_V = _GAMMA_M["bolts_rivets_shear_tension"]["ULS"] # shear connectors +GAMMA_MFT_FATIGUE = 1.35 # IRC 22:2015 Cl.605 Table 3 + +# IRC 22:2015 Cl.605.3 — fatigue strength at 5×10^6 cycles (rolled vs welded). +FATIGUE_STRENGTH_ROLLED_MPA = 118.0 +FATIGUE_STRENGTH_WELDED_MPA = 92.0 +FATIGUE_SHEAR_STRENGTH_MPA = 59.0 # ====================================================================== @@ -57,52 +41,66 @@ @dataclass class SteelProperties: - """ - Material strengths and partial safety factors. - - References - ---------- - IRC 22:2015 Annexure III - Steel, Concrete, Reinforcement properties - IRC 22:2015 Table 1 (Cl.601.4) - Partial safety factors - """ - # -- Structural steel (IS 2062 / IRC 22 Annex III) -- - steel_grade: str = "E350" - fy: float = 350.0 # MPa - characteristic yield strength - fu: float = 490.0 # MPa - ultimate tensile strength - Es: float = 200_000.0 # MPa - modulus of elasticity (Cl.602) + # Material lookup — structural steel (IRC 22:2015 Annex III + IS 2062), concrete (Annex III + # Table III.1), reinforcement (IS 1786 / Annex III), partial factors (Cl.601.4 Table 1). + steel_grade: str + fy: float # MPa — IS 2062 yield strength + fu: float # MPa — IS 2062 ultimate strength + concrete_grade: str + fck: float # MPa — IRC 22 Annex III cube strength + fctm: float # MPa — Annex III mean tensile strength + Ecm: float # MPa — Annex III 28-day secant modulus + rebar_grade: str = "Fe500" # default per common Indian practice + fy_rebar: float = 500.0 # MPa — looked up from IRC 22 Annex III + + # IRC 22:2015 Cl.602 Annex III — structural-steel elastic constants (grade-independent). + Es: float = E_STEEL_MPA + Gs: float = G_STEEL_MPA + nu: float = POISSON_RATIO_STEEL + + # IRC 22:2015 Cl.601.4 Table 1 — partial safety factors. + gamma_m0: float = GAMMA_M0 + gamma_m1: float = GAMMA_M1 + gamma_v: float = GAMMA_V + gamma_mft: float = GAMMA_MFT_FATIGUE - # -- Concrete (IRC 22 Annex III Table III.1) -- - concrete_grade: str = "M65" - fck: float = 65.0 # MPa - cube compressive strength - fctm: float = 4.1 # MPa - mean tensile strength - Ecm: float = 38_000.0 # MPa - secant modulus at 28 days - - # -- Reinforcement (IS 1786 / IRC 22 Annex III) -- - rebar_grade: str = "Fe500" - fy_rebar: float = 500.0 # MPa - characteristic yield strength - - # -- Partial safety factors (IRC 22 Table 1, Cl.601.4) -- - gamma_m0: float = 1.10 # yielding / instability - gamma_m1: float = 1.25 # ultimate stress - gamma_v: float = 1.25 # shear connectors - gamma_mft: float = 1.35 # fatigue strength + @classmethod + def from_grades( + cls, + steel_grade: str, + fy_struct_MPa: float, + fu_struct_MPa: float, + concrete_grade: str, + rebar_grade: str = "Fe500", + ) -> "SteelProperties": + # IRC 22:2015 Cl.602 Annex III — concrete properties by grade. + conc = IRC22_2014.cl_602_annexIII_concrete_properties(grade=concrete_grade) + # IRC 22:2015 Cl.602 Annex III — reinforcement properties by grade (IS 1786 Table 3). + rebar_table = IRC22_2014.cl_602_annexIII_reinforcement_steel_properties() + rebar_row = rebar_table.get(rebar_grade, rebar_table["Fe500"]) + return cls( + steel_grade=steel_grade, + fy=fy_struct_MPa, + fu=fu_struct_MPa, + concrete_grade=concrete_grade, + fck=float(conc["fck"]), + fctm=float(conc["fctm"]), + Ecm=float(conc["Ec"]) * 1000.0, # Annex III stores Ec in GPa + rebar_grade=rebar_grade, + fy_rebar=float(rebar_row["fy"]), + ) @dataclass class SteelSection: - """ - Plate girder / rolled I-section dimensions (all in mm). - - Depth relation : D = tf_top + dw + tf_bot - Shear area Av = dw x tw - """ - D: float # overall depth - bf_top: float # top flange width - tf_top: float # top flange thickness - bf_bot: float # bottom flange width - tf_bot: float # bottom flange thickness - tw: float # web thickness - fabrication: str = "welded" # "welded" or "rolled" + # Plate-girder I-section dimensions in mm. D = tf_top + dw + tf_bot; shear area = dw × tw. + D: float + bf_top: float + tf_top: float + bf_bot: float + tf_bot: float + tw: float + fabrication: str = "welded" @property def dw(self) -> float: @@ -126,7 +124,7 @@ def A_steel(self) -> float: @property def y_cg_from_bot(self) -> float: - """Steel centroid measured from bottom fibre (mm).""" + # Steel centroid measured from bottom fibre (mm). y_b = self.tf_bot / 2.0 y_w = self.tf_bot + self.dw / 2.0 y_t = self.tf_bot + self.dw + self.tf_top / 2.0 @@ -136,7 +134,7 @@ def y_cg_from_bot(self) -> float: @property def Iz_steel(self) -> float: - """Second moment of area about centroidal strong axis (mm^4).""" + # Second moment of area about centroidal strong axis (mm^4). yc = self.y_cg_from_bot y_b = self.tf_bot / 2.0 y_w = self.tf_bot + self.dw / 2.0 @@ -152,7 +150,7 @@ def Iz_steel(self) -> float: @property def Zp_steel(self) -> float: - """Plastic section modulus about strong axis (mm^3).""" + # Plastic section modulus about strong axis (mm^3). half_area = self.A_steel / 2.0 if self.Af_bot >= half_area: y_pna = half_area / self.bf_bot @@ -181,7 +179,7 @@ def rect_moment(b, t, y_bot_of_rect): @property def Ze_steel(self) -> float: - """Elastic section modulus about strong axis (mm^3).""" + # Elastic section modulus about strong axis (mm^3). yc = self.y_cg_from_bot y_top = self.D - yc return self.Iz_steel / max(yc, y_top) @@ -189,7 +187,7 @@ def Ze_steel(self) -> float: @dataclass class SlabProperties: - """Concrete slab dimensions and reinforcement (all mm).""" + # Concrete deck slab dimensions and reinforcement (all in mm). Covers per IRC 112-2020 durability table. thickness: float haunch_depth: float = 0.0 rebar_area_top: float = 0.0 @@ -200,19 +198,19 @@ class SlabProperties: @dataclass class GeometryConfig: - """Bridge-level geometry parameters (lengths in m).""" + # Bridge-level geometry (lengths in m). beam_type: "inner" or "outer" per IRC 22 Cl.603.2.1. span: float beam_spacing: float carriageway_width: float + n_girders: int + edge_distance: float beam_type: str = "inner" - n_girders: int = 7 - edge_distance: float = 1.05 support_type: str = "simply_supported" @dataclass class ShearStudConfig: - """Headed stud connector properties (Cl.606).""" + # Headed stud connector (IRC 22:2015 Cl.606). fu ≤ 500 MPa per Cl.606.3.1 recommendation. diameter: float = 22.0 height: float = 150.0 fu: float = 500.0 @@ -221,63 +219,46 @@ class ShearStudConfig: @dataclass class FatigueConfig: - """Fatigue design parameters (Cl.605).""" + # IRC 22:2015 Cl.605 — fatigue design parameters. Nsc defaults to Table 5 reference life 2×10^6. Nsc: int = 2_000_000 - stress_range: float = 55.0 - shear_range: float = 30.0 detail_category: str = "welded" - ffn: float = 92.0 - tfn: float = 59.0 + ffn: float = FATIGUE_STRENGTH_WELDED_MPA # Cl.605.3 — normal fatigue strength at 5e6 cycles + tfn: float = FATIGUE_SHEAR_STRENGTH_MPA # Cl.605.3 — shear fatigue strength at 5e6 cycles @dataclass class BridgeConfig: - """ - Master bridge configuration - single input to the entire pipeline. - - BridgeConfig - |-- DemandExtractor - |-- IRC22CapacityCalculator - |-- DCREngine - +-- ReportGenerator - """ - material: SteelProperties = field(default_factory=SteelProperties) - section: SteelSection = field(default_factory=lambda: SteelSection( - D=1500, bf_top=400, tf_top=20, bf_bot=500, tf_bot=25, tw=12, - )) - slab: SlabProperties = field(default_factory=lambda: SlabProperties(thickness=250)) - geometry: GeometryConfig = field(default_factory=lambda: GeometryConfig( - span=33.5, beam_spacing=2.2775, carriageway_width=10.0, - )) + # Single aggregate input consumed by DemandExtractor / IRC22CapacityCalculator / DCREngine / Report. + material: SteelProperties + section: SteelSection + slab: SlabProperties + geometry: GeometryConfig studs: ShearStudConfig = field(default_factory=ShearStudConfig) fatigue: FatigueConfig = field(default_factory=FatigueConfig) @classmethod - def from_plate_girder_bridge(cls, bridge: Any) -> BridgeConfig: - """Extract BridgeConfig from a PlateGirderBridge instance.""" - from osdagbridge.core.utils.common import KEY_GIRDER, KEY_DECK_CONCRETE_GRADE_BASIC, KEY_DECK_THICKNESS + def from_plate_girder_bridge(cls, bridge: Any) -> "BridgeConfig": + # Build a BridgeConfig from a solved PlateGirderBridge: materials from the project DB + # (which mirrors IS 2062 / IRC 22 Annex III), concrete/rebar resolved via IRC 22 Annex III. + from osdagbridge.core.utils.common import ( + KEY_GIRDER, KEY_DECK_CONCRETE_GRADE_BASIC, KEY_DECK_THICKNESS, + KEY_SPAN, KEY_CARRIAGEWAY_WIDTH, + ) - # Ensure material/section props exist - if not hasattr(bridge, 'material_props') or not bridge.material_props: + if not getattr(bridge, "material_props", None): bridge.material_props = bridge._build_material_props() - if not hasattr(bridge, 'section_props') or not bridge.section_props: + if not getattr(bridge, "section_props", None): bridge.section_props = bridge._girder_section() - sp = bridge.material_props.steel_prop - cp = bridge.material_props.concrete_prop - - # fu lookup handling - fu_val = sp.Fu / 1_000_000 if sp.Fu else (sp.Fy / 1_000_000 * 1.5) + steel_prop = bridge.material_props.steel_prop + fy_struct = steel_prop.Fy / 1_000_000.0 + fu_struct = (steel_prop.Fu / 1_000_000.0) if steel_prop.Fu else fy_struct * 1.5 - material = SteelProperties( - fy=sp.Fy / 1_000_000, - fu=fu_val, - Es=sp.E / 1_000_000, - fck=cp.fck, - fctm=cp.fctm, - Ecm=cp.Ecm * 1000, + material = SteelProperties.from_grades( steel_grade=str(bridge.basic_inputs.get(KEY_GIRDER, "")), - concrete_grade=str(bridge.basic_inputs.get(KEY_DECK_CONCRETE_GRADE_BASIC, "")) + fy_struct_MPa=fy_struct, + fu_struct_MPa=fu_struct, + concrete_grade=str(bridge.basic_inputs.get(KEY_DECK_CONCRETE_GRADE_BASIC, "")), ) props = bridge.section_props @@ -290,71 +271,45 @@ def from_plate_girder_bridge(cls, bridge: Any) -> BridgeConfig: tw=props["t_w"] * 1000, ) - geom = getattr(bridge, 'grillage_geometry', None) - deck = getattr(bridge, 'deck_layout', None) - sizing = getattr(bridge, 'sizing_result', None) - - from osdagbridge.core.utils.common import KEY_SPAN, KEY_CARRIAGEWAY_WIDTH - - span_L = geom.L if geom else float(bridge.basic_inputs.get(KEY_SPAN, 33.5)) - spacing = geom.ext_to_int_dist if geom else (sizing.girder_spacing if sizing else 2.2775) - edges = geom.edge_dist if geom else (sizing.deck_overhang if sizing else 1.05) - n_g = geom.n_l if geom else (sizing.no_of_girders if sizing else 7) - cw = deck.carriageway_width if deck else float(bridge.basic_inputs.get(KEY_CARRIAGEWAY_WIDTH, 10.0)) + geom = getattr(bridge, "grillage_geometry", None) + deck = getattr(bridge, "deck_layout", None) + sizing = getattr(bridge, "sizing_result", None) geometry = GeometryConfig( - span=span_L, - beam_spacing=spacing, - carriageway_width=cw, - n_girders=n_g, - edge_distance=edges, + span=geom.L if geom else float(bridge.basic_inputs[KEY_SPAN]), + beam_spacing=geom.ext_to_int_dist if geom else sizing.girder_spacing, + carriageway_width=deck.carriageway_width if deck else float(bridge.basic_inputs[KEY_CARRIAGEWAY_WIDTH]), + n_girders=geom.n_l if geom else sizing.no_of_girders, + edge_distance=geom.edge_dist if geom else sizing.deck_overhang, ) - thickness_val = float(bridge.basic_inputs.get(KEY_DECK_THICKNESS, 250.0)) - slab = SlabProperties(thickness=thickness_val) - + slab = SlabProperties(thickness=float(bridge.basic_inputs[KEY_DECK_THICKNESS])) return cls(material=material, section=section, geometry=geometry, slab=slab) @classmethod def example_33m_bridge(cls) -> "BridgeConfig": - """ - Factory: realistic 33.5 m simply-supported composite bridge - matching the ospgrillage analyser model. - """ + # Reference 33.5 m simply-supported composite bridge matching the ospgrillage analyser model. + # All material properties routed through IRC 22:2015 Annex III lookups. return cls( - material=SteelProperties( - steel_grade="E350", fy=350.0, fu=490.0, Es=200_000.0, - concrete_grade="M65", fck=65.0, fctm=4.1, Ecm=38_000.0, - rebar_grade="Fe500", fy_rebar=500.0, - ), - section=SteelSection( - D=1500, bf_top=400, tf_top=20, - bf_bot=500, tf_bot=25, tw=12, fabrication="welded", - ), - slab=SlabProperties( - thickness=250, haunch_depth=0, - rebar_area_top=1257.0, rebar_area_bot=1257.0, + material=SteelProperties.from_grades( + steel_grade="E350", + fy_struct_MPa=350.0, # IS 2062 — E350 yield strength + fu_struct_MPa=490.0, # IS 2062 — E350 ultimate strength + concrete_grade="M65", + rebar_grade="Fe500", ), + section=SteelSection(D=1500, bf_top=400, tf_top=20, bf_bot=500, tf_bot=25, tw=12), + slab=SlabProperties(thickness=250, rebar_area_top=1257.0, rebar_area_bot=1257.0), geometry=GeometryConfig( - span=33.5, beam_spacing=2.2775, - carriageway_width=10.0, beam_type="inner", + span=33.5, beam_spacing=2.2775, carriageway_width=10.0, n_girders=7, edge_distance=1.05, ), - studs=ShearStudConfig(diameter=22, height=150, fu=500, n_per_section=2), - fatigue=FatigueConfig( - Nsc=2_000_000, stress_range=55.0, shear_range=30.0, - detail_category="welded", ffn=92.0, tfn=59.0, - ), ) def summary(self) -> str: - s = self.section - g = self.geometry - m = self.material - return ( - f"L={g.span}m | {m.steel_grade}/{m.concrete_grade} | " - f"D={s.D}mm | {g.n_girders} girders @ {g.beam_spacing}m" - ) + s, g, m = self.section, self.geometry, self.material + return (f"L={g.span}m | {m.steel_grade}/{m.concrete_grade} | " + f"D={s.D}mm | {g.n_girders} girders @ {g.beam_spacing}m") # ====================================================================== @@ -364,26 +319,16 @@ def summary(self) -> str: @dataclass class DemandEnvelope: - """ - Factored force demands at the critical section. - Every field carries its unit in the name suffix for clarity. - """ - # -- ULS demands -- + # Factored force demands at the critical section. Unit suffix is part of each name for clarity. Mu_kNm: float = 0.0 Vu_kN: float = 0.0 Nu_kN: float = 0.0 M_construction_kNm: float = 0.0 - - # -- SLS demands -- delta_live_mm: float = 0.0 delta_total_mm: float = 0.0 - - # -- Fatigue demands -- stress_range_MPa: float = 0.0 shear_range_MPa: float = 0.0 Nsc: int = 2_000_000 - - # -- Metadata -- governing_combination: str = "ULS Combination I" location: str = "midspan" member: str = "" @@ -391,13 +336,7 @@ class DemandEnvelope: class DemandExtractor: - """ - Factory for DemandEnvelope objects. - - Two entry-points: - 1. from_manual(...) - user supplies demand values directly - 2. apply_load_factors(...) - builds envelope from unfactored DL/LL - """ + # Factory for DemandEnvelope: from_manual / from_analysis_results / apply_load_factors. @staticmethod def from_manual( @@ -414,7 +353,7 @@ def from_manual( location: str = "midspan", member: str = "interior_girder", ) -> DemandEnvelope: - """Create demand envelope from user-supplied values.""" + # Build a DemandEnvelope from directly supplied factored quantities. return DemandEnvelope( Mu_kNm=Mu_kNm, Vu_kN=Vu_kN, Nu_kN=Nu_kN, M_construction_kNm=M_construction_kNm, delta_live_mm=delta_live_mm, delta_total_mm=delta_total_mm, @@ -427,91 +366,220 @@ def from_manual( def from_analysis_results( results: PlateGirderAnalysisResults, element_ids: list[int], - delta_live_mm: float = 28.0, - delta_total_mm: float = 38.0, - stress_range_MPa: float = 55.0, - shear_range_MPa: float = 30.0, + node_ids: list[int], + Ze_steel_mm3: float, + Aw_mm2: float, Nsc: int = 2_000_000, - member_name: str = "interior_longitudinal_beam" + member_name: str = "interior_longitudinal_beam", ) -> DemandEnvelope: - """ - Extract max factored forces directly from analysis results dataset for given elements. - """ - # Convert dataset variables N -> kN, Nm -> kNm (divide by 1000) + # Extract ULS Mu/Vu envelopes, construction moment, deflections, and fatigue ranges + # directly from the grillage xarray dataset. forces→N/Nm, displacements→m. + import warnings + import numpy as np + + ds = results.ds + lc_groups = results.classify_loadcases() + dead_lcs = lc_groups["dead"] + live_static = lc_groups["vehicle_static"] + live_moving = lc_groups["vehicle_moving"] + all_live_lcs = live_static + live_moving + + def _as_float(arr): + """Cast xarray/object array to float, coercing non-numeric to NaN.""" + a = np.asarray(arr) + if a.dtype == object: + flat = np.empty(a.size, dtype=float) + for i, v in enumerate(a.flat): + try: + flat[i] = float(v) + except (TypeError, ValueError): + flat[i] = np.nan + return flat.reshape(a.shape) + return a.astype(float) + + # ------------------------------------------------------------------ + # (1) ULS Mu, Vu — absolute envelope across every LC + # ------------------------------------------------------------------ max_mz = 0.0 max_vy = 0.0 - construction_mz = 0.0 - - # Loadcase names relevant to construction stage - c_cases = ["girder self weight", "deck slab load", "girder_self_weight", "deck_slab_load", "steel", "wet_concrete"] - for lc in results.get_available_loadcases(): try: - # Force arrays for the elements - mz_vals = results.ds.sel(Loadcase=lc, Element=element_ids, Component=["Mz_i", "Mz_j"])["forces"].values - vy_vals = results.ds.sel(Loadcase=lc, Element=element_ids, Component=["Vy_i", "Vy_j"])["forces"].values - - # Check maximum absolute magnitude for the loadcase across all elements/nodes - mz_abs_max = abs(mz_vals).max() - vy_abs_max = abs(vy_vals).max() - - if mz_abs_max > max_mz: - max_mz = mz_abs_max - if vy_abs_max > max_vy: - max_vy = vy_abs_max - - lc_str = str(lc).lower() - if any(c in lc_str for c in c_cases): - # For construction moment, we safely envelope the absolute maxima for those specific cases - construction_mz += mz_abs_max + mz = _as_float( + ds.sel(Loadcase=lc, Element=element_ids, + Component=["Mz_i", "Mz_j"])["forces"].values + ) + vy = _as_float( + ds.sel(Loadcase=lc, Element=element_ids, + Component=["Vy_i", "Vy_j"])["forces"].values + ) + mz_finite = mz[~np.isnan(mz)] + vy_finite = vy[~np.isnan(vy)] + if mz_finite.size: + max_mz = max(max_mz, float(np.abs(mz_finite).max())) + if vy_finite.size: + max_vy = max(max_vy, float(np.abs(vy_finite).max())) except KeyError: continue Mu_kNm = max_mz / 1000.0 Vu_kN = max_vy / 1000.0 - M_const_kNm = (construction_mz * 1.35) / 1000.0 - # Fallback if no construction cases identified, use 25% of composite moment - if M_const_kNm == 0: - M_const_kNm = Mu_kNm * 0.25 + # ------------------------------------------------------------------ + # (2) Construction moment — steel self-wt + wet concrete only + # ------------------------------------------------------------------ + c_patterns = ("girder self weight", "deck slab load", + "girder_self_weight", "deck_slab_load", + "steel", "wet_concrete") + construction_mz = 0.0 + matched = 0 + for lc in dead_lcs: + lc_str = str(lc).lower() + if any(p in lc_str for p in c_patterns): + try: + mz = _as_float( + ds.sel(Loadcase=lc, Element=element_ids, + Component=["Mz_i", "Mz_j"])["forces"].values + ) + mz_finite = mz[~np.isnan(mz)] + if mz_finite.size: + construction_mz += float(np.abs(mz_finite).max()) + matched += 1 + except KeyError: + continue + + if matched == 0: + warnings.warn( + "No construction-stage load cases (girder SW / wet concrete) " + "identified in analysis results. M_construction = 0; the LTB " + "construction-stage check will be skipped.", + stacklevel=2, + ) + M_const_kNm = 0.0 + else: + # IRC 6:2017 Table B.2 — ULS partial factor for dead load (adding, basic combination). + gamma_dl = IRC6_2017.table_B2(load_type="dead_load", effect="adding", combination="basic") + M_const_kNm = (construction_mz * gamma_dl) / 1000.0 + + # ------------------------------------------------------------------ + # (3) Deflections from `displacements.Component="y"` + # live : max |y-disp| over live LCs × girder nodes + # total : max |Σ dead-LC y-disp + live-LC y-disp| per node + # ------------------------------------------------------------------ + delta_live_m = 0.0 + delta_dead_m = 0.0 + try: + disp_y = ds.displacements.sel(Component="y", Node=node_ids) + + if all_live_lcs: + live_vals = _as_float(disp_y.sel(Loadcase=all_live_lcs).values) + live_finite = live_vals[~np.isnan(live_vals)] + if live_finite.size: + delta_live_m = float(np.abs(live_finite).max()) + + if dead_lcs: + dead_vals = _as_float(disp_y.sel(Loadcase=dead_lcs).values) + dead_vals = np.nan_to_num(dead_vals, nan=0.0) + # sum across LCs for each node, then take |·|max + if dead_vals.ndim > 1: + per_node = dead_vals.sum(axis=0) + else: + per_node = dead_vals + if per_node.size: + delta_dead_m = float(np.abs(per_node).max()) + except (KeyError, ValueError) as e: + warnings.warn( + f"Could not extract vertical deflections from dataset: {e}. " + "delta_live / delta_total set to 0.", + stacklevel=2, + ) + + delta_live_mm = delta_live_m * 1000.0 + delta_total_mm = (delta_dead_m + delta_live_m) * 1000.0 + + # ------------------------------------------------------------------ + # (4) Fatigue ranges from moving-load envelope + # stress_range = (Mz_max - Mz_min) / Ze_steel [MPa] + # shear_range = (Vy_max - Vy_min) / Aw [MPa] + # ------------------------------------------------------------------ + stress_range_MPa = 0.0 + shear_range_MPa = 0.0 + + if live_moving and Ze_steel_mm3 > 0: + try: + mz_i = _as_float( + ds.forces.sel(Loadcase=live_moving, Element=element_ids, + Component="Mz_i").values + ).flatten() + mz_j = _as_float( + ds.forces.sel(Loadcase=live_moving, Element=element_ids, + Component="Mz_j").values + ).flatten() + mz_all = np.concatenate([mz_i, mz_j]) + mz_all = mz_all[~np.isnan(mz_all)] + if mz_all.size: + # Nm → Nmm : ×1000 ; σ = M/Ze + mz_range_Nmm = (mz_all.max() - mz_all.min()) * 1000.0 + stress_range_MPa = float(mz_range_Nmm / Ze_steel_mm3) + except (KeyError, ValueError): + pass + + if live_moving and Aw_mm2 > 0: + try: + vy_i = _as_float( + ds.forces.sel(Loadcase=live_moving, Element=element_ids, + Component="Vy_i").values + ).flatten() + vy_j = _as_float( + ds.forces.sel(Loadcase=live_moving, Element=element_ids, + Component="Vy_j").values + ).flatten() + vy_all = np.concatenate([vy_i, vy_j]) + vy_all = vy_all[~np.isnan(vy_all)] + if vy_all.size: + vy_range_N = vy_all.max() - vy_all.min() + shear_range_MPa = float(vy_range_N / Aw_mm2) + except (KeyError, ValueError): + pass return DemandEnvelope( Mu_kNm=round(Mu_kNm, 2), Vu_kN=round(Vu_kN, 2), Nu_kN=0.0, M_construction_kNm=round(M_const_kNm, 2), - delta_live_mm=delta_live_mm, - delta_total_mm=delta_total_mm, - stress_range_MPa=stress_range_MPa, - shear_range_MPa=shear_range_MPa, + delta_live_mm=round(delta_live_mm, 3), + delta_total_mm=round(delta_total_mm, 3), + stress_range_MPa=round(stress_range_MPa, 3), + shear_range_MPa=round(shear_range_MPa, 3), Nsc=Nsc, governing_combination="Max Extracted (All LCs)", location="critical element", member=member_name, - source="grillage_analysis" + source="grillage_analysis", ) - + @staticmethod def apply_load_factors( M_dead_kNm: float, M_live_kNm: float, V_dead_kN: float, V_live_kN: float, - gamma_dead: float = 1.35, - gamma_live: float = 1.50, - impact_factor: float = 1.10, + span_m: float, + vehicle_class: str = KEY_VEHICLE[0], # default Class 70R(W) ) -> DemandEnvelope: - """ - Build demand envelope from unfactored dead/live force components. - IRC:6-2017 load combination factors applied. - """ - Mu = gamma_dead * M_dead_kNm + gamma_live * impact_factor * M_live_kNm - Vu = gamma_dead * V_dead_kN + gamma_live * impact_factor * V_live_kN + # IRC 6:2017 Table B.2 (ULS basic) — γDL = 1.35, γLL(leading) = 1.50. + gamma_dl = IRC6_2017.table_B2(load_type="dead_load", effect="adding", combination="basic") + gamma_ll = IRC6_2017.table_B2(load_type="live_load", load_category="leading", combination="basic") + # IRC 6:2017 Cl.208.2 / 208.3 — impact factor by vehicle class. + if vehicle_class in (KEY_VEHICLE[0], KEY_VEHICLE[1]): # Class 70R(W) / 70R(T) + impact = 1.0 + IRC6_2017.cl_208_3_impact_factor(span_m) + else: # Class A / Class B + impact = 1.0 + IRC6_2017.cl_208_2_impact_factor(span_m) + + Mu = gamma_dl * M_dead_kNm + gamma_ll * impact * M_live_kNm + Vu = gamma_dl * V_dead_kN + gamma_ll * impact * V_live_kN return DemandEnvelope( Mu_kNm=round(Mu, 3), Vu_kN=round(Vu, 3), - governing_combination=( - f"gDL={gamma_dead} x DL + gLL={gamma_live} x IF={impact_factor} x LL" - ), + governing_combination=f"γDL={gamma_dl}·DL + γLL={gamma_ll}·IF={impact:.3f}·LL", location="midspan", source="factored_components", ) @@ -523,64 +591,35 @@ def apply_load_factors( @dataclass class CapacityResults: - """Aggregated capacity values from all IRC 22 checks.""" - - # Cl.603.2.1 - Effective width - beff_mm: float = 0.0 - - # Cl.603.3.1 - Positive moment capacity - xu_mm: float = 0.0 + # Aggregated IRC 22:2015 capacity values keyed by the clause that produced them. + beff_mm: float = 0.0 # Cl.603.2.1 + xu_mm: float = 0.0 # Cl.603.3.1 pna_location: str = "" Mp_kNm: float = 0.0 Md_kNm: float = 0.0 - - # Cl.603.3.3.1 - Buckling resistance moment - Mcr_kNm: float = 0.0 + Mcr_kNm: float = 0.0 # Cl.603.3.3.1 lambda_LT: float = 0.0 chi_LT: float = 0.0 Mb_kNm: float = 0.0 - - # Cl.603.3.3.2 - Shear - Av_mm2: float = 0.0 + Av_mm2: float = 0.0 # Cl.603.3.3.2 Vn_kN: float = 0.0 Vd_kN: float = 0.0 - - # Cl.603.3.3.3 - Combined bending + shear - Mdv_kNm: float = 0.0 + Mdv_kNm: float = 0.0 # Cl.603.3.3.3 beta_interaction: float = 0.0 - - # Cl.604.3.2 - Deflection limits - defl_limit_live_mm: float = 0.0 + defl_limit_live_mm: float = 0.0 # Cl.604.3.2 defl_limit_total_mm: float = 0.0 - - # Cl.604.3.1 - SLS stress limits - sigma_c_limit_MPa: float = 0.0 + sigma_c_limit_MPa: float = 0.0 # Cl.604.3.1 sigma_s_limit_MPa: float = 0.0 - - # Cl.605 - Fatigue - f_fd_MPa: float = 0.0 + f_fd_MPa: float = 0.0 # Cl.605 tau_fd_MPa: float = 0.0 - - # Cl.606 - Shear connectors - Qu_kN: float = 0.0 + Qu_kN: float = 0.0 # Cl.606 stud_spacing_mm: float = 0.0 - - # Meta source: str = "built-in" details: Dict[str, dict] = field(default_factory=dict) class IRC22CapacityCalculator: - """ - Clause-by-clause IRC 22:2015 capacity calculator. - Uses built-in formulas for all clause computations. - - Usage - ----- - config = BridgeConfig.example_33m_bridge() - calc = IRC22CapacityCalculator(config) - results = calc.compute_all(Vu_kN=850.0) - """ + # Clause-by-clause IRC 22:2015 capacity calculator driven by a single BridgeConfig. def __init__(self, config: BridgeConfig): self.cfg = config @@ -591,12 +630,8 @@ def __init__(self, config: BridgeConfig): self.studs = config.studs self.fatigue = config.fatigue - # --------------------------------------------------------- - # Cl.603.2.1 - Effective Width (Simply Supported) - # --------------------------------------------------------- - + # IRC 22:2015 Cl.603.2.1 — effective width of concrete flange for simply-supported girder. def compute_effective_width(self) -> dict: - """IRC 22:2015 Cl.603.2.1 - Effective width of concrete flange.""" Lo_mm = self.geo.span * 1000.0 B_mm = self.geo.beam_spacing * 1000.0 @@ -615,12 +650,8 @@ def compute_effective_width(self) -> dict: "clause": "IRC 22:2015 - Cl.603.2.1", "source": "built-in", } - # --------------------------------------------------------- - # Cl.603 - Section Classification - # --------------------------------------------------------- - + # IRC 22:2015 Cl.603 — section classification (web + flange governed by d/tw and b/tf ratios). def classify_section(self) -> dict: - """IRC 22:2015 Cl.603 - web & flange classification.""" fy = self.mat.fy epsilon = math.sqrt(250.0 / fy) sec = self.sec @@ -661,12 +692,8 @@ def _classify_flange(b_tf: float, epsilon: float, fab: str) -> str: return "Semi-Compact" return "Slender" - # --------------------------------------------------------- - # Cl.603.3.1 - Positive Moment Capacity (Plastic) - # --------------------------------------------------------- - + # IRC 22:2015 Cl.603.3.1 — plastic positive moment capacity (sagging, full shear interaction). def compute_moment_capacity(self, beff_mm: float) -> dict: - """IRC 22:2015 Cl.603.3.1 - Plastic moment capacity (sagging).""" sec = self.sec mat = self.mat slab = self.slab @@ -746,12 +773,8 @@ def _steel_elements(self, ds, h_haunch): (base + sec.tf_top + sec.dw, sec.tf_bot, sec.bf_bot), ] - # --------------------------------------------------------- - # Cl.603.3.3.2 - Plastic Shear Resistance - # --------------------------------------------------------- - + # IRC 22:2015 Cl.603.3.3.2 — plastic shear resistance of the web (Vd = Av·fy / (√3·γm0)). def compute_shear_capacity(self) -> dict: - """IRC 22:2015 Cl.603.3.3.2 - Plastic shear resistance.""" sec = self.sec fyw, gm0 = self.mat.fy, self.mat.gamma_m0 Av = sec.dw * sec.tw @@ -765,18 +788,13 @@ def compute_shear_capacity(self) -> dict: "clause": "IRC 22:2015 - Cl.603.3.3.2", "source": "built-in", } - # --------------------------------------------------------- - # Cl.603.3.3.1 - Lateral-Torsional Buckling Resistance - # --------------------------------------------------------- - + # IRC 22:2015 Cl.603.3.3.1 — lateral-torsional buckling resistance at construction stage. def compute_buckling_resistance(self, beff_mm: float) -> dict: - """IRC 22:2015 Cl.603.3.3.1 - Buckling resistance moment.""" sec = self.sec mat = self.mat fy, Es = mat.fy, mat.Es - G = Es / (2.0 * (1.0 + 0.3)) - # In reality, temporary or permanent cross-bracings are installed at 4m to 6m intervals. - # We clamp the unbraced length LLT to 6000 mm for accurate construction stage evaluation. + G = mat.Gs # IRC 22 Annex III — shear modulus. + # Cross-bracing at 4–6 m intervals in practice — clamp LLT to 6000 mm for the construction stage. LLT_mm = min(self.geo.span * 1000.0, 6000.0) It = (sec.bf_top * sec.tf_top ** 3 @@ -817,12 +835,8 @@ def compute_buckling_resistance(self, beff_mm: float) -> dict: "clause": "IRC 22:2015 - Cl.603.3.3.1", "source": "built-in", } - # --------------------------------------------------------- - # Cl.603.3.3.3 - Combined Bending + High Shear - # --------------------------------------------------------- - + # IRC 22:2015 Cl.603.3.3.3 — reduced bending resistance under high shear (V > 0.6·Vd). def compute_combined_bending_shear(self, Md_kNm: float, V_kN: float, Vd_kN: float) -> dict: - """IRC 22:2015 Cl.603.3.3.3 - Reduced bending under high shear.""" sec = self.sec fy, gm0 = self.mat.fy, self.mat.gamma_m0 hw = sec.dw + sec.tf_top / 2.0 + sec.tf_bot / 2.0 @@ -844,121 +858,110 @@ def compute_combined_bending_shear(self, Md_kNm: float, V_kN: float, Vd_kN: floa "clause": "IRC 22:2015 - Cl.603.3.3.3", "source": "built-in", } - # --------------------------------------------------------- - # Cl.604.3 - Modular Ratio - # --------------------------------------------------------- - + # IRC 22:2015 Cl.604.3 — short- and long-term modular ratio (min bounds 7.5 / 15.0). def compute_modular_ratio(self) -> dict: - """IRC 22:2015 Cl.604.3 - Short- and long-term modular ratio.""" - Es, Ecm = self.mat.Es, self.mat.Ecm - Kc = 0.5 - m_short = max(Es / Ecm, 7.5) - m_long = max(Es / (Kc * Ecm), 15.0) + res = IRC22_2014.cl_604_3_modular_ratio(Ecm=self.mat.Ecm, Kc=0.5) return { - "Es_MPa": Es, "Ecm_MPa": Ecm, "Kc": Kc, - "m_short": round(m_short, 3), "m_long": round(m_long, 3), - "clause": "IRC 22:2015 - Cl.604.3", "source": "built-in", + "Es_MPa": res["Es_MPa"], "Ecm_MPa": res["Ecm_MPa"], "Kc": res["Kc"], + "m_short": res["m_short_term"], "m_long": res["m_long_term"], + "clause": res["clause"], "source": "IRC22_2014", } - # --------------------------------------------------------- - # Cl.604.3.1 - SLS Limiting Stresses - # --------------------------------------------------------- - + # IRC 22:2015 Cl.604.3.1 — SLS allowable stresses (concrete k1·fck, rebar k3·fyk, steel 0.9·fy). def compute_sls_stress_limits(self) -> dict: - """IRC 22:2015 Cl.604.3.1 - Allowable stresses for serviceability.""" + res = IRC22_2014.cl_604_3_1_limiting_stresses( + f_ck_cu=self.mat.fck, + f_yk_reinf=self.mat.fy_rebar, + f_y_struct=self.mat.fy, + ) return { - "sigma_c_allow_MPa": round(0.48 * self.mat.fck, 2), - "sigma_rebar_allow_MPa": round(0.80 * self.mat.fy_rebar, 2), - "sigma_steel_allow_MPa": round(0.9 * self.mat.fy, 2), - "clause": "IRC 22:2015 - Cl.604.3.1", "source": "built-in", + "sigma_c_allow_MPa": res["concrete_allowable_stress_MPa"], + "sigma_rebar_allow_MPa": res["reinforcement_allowable_stress_MPa"], + "sigma_steel_allow_MPa": res["steel_equivalent_limit_0.9fy_MPa"], + "clause": res["clause"], "source": "IRC22_2014", } - # --------------------------------------------------------- - # Cl.604.3.2 - Deflection Limits - # --------------------------------------------------------- - + # IRC 22:2015 Cl.604.3.2 — deflection limits (live+impact ≤ L/800, total ≤ L/600). def compute_deflection_limits(self) -> dict: - """IRC 22:2015 Cl.604.3.2 - Deflection limits.""" - span_mm = self.geo.span * 1000.0 + res = IRC22_2014.cl_604_3_2_deflection_limits(span_m=self.geo.span) + main = res["main_girder_limits"] return { - "span_mm": span_mm, - "defl_limit_live_mm": round(span_mm / 800.0, 3), - "defl_limit_total_mm": round(span_mm / 600.0, 3), - "clause": "IRC 22:2015 - Cl.604.3.2", "source": "built-in", + "span_mm": res["span_mm"], + "defl_limit_live_mm": main["allow_live_impact_mm"], + "defl_limit_total_mm": main["allow_total_mm"], + "clause": res["clause"], "source": "IRC22_2014", } - # --------------------------------------------------------- - # Cl.605 - Fatigue Assessment - # --------------------------------------------------------- - - def compute_fatigue(self) -> dict: - """IRC 22:2015 Cl.605 - Fatigue design strength.""" + # IRC 22:2015 Cl.605.2 / 605.3 / 605.4 — thickness correction μr, f_f, τ_f, f_fd, τ_fd. + def compute_fatigue(self, stress_range_MPa: float = 0.0) -> dict: fat = self.fatigue mat = self.mat - Nsc, ffn, tfn = fat.Nsc, fat.ffn, fat.tfn - gamma_mft = mat.gamma_mft tp = max(self.sec.tf_top, self.sec.tf_bot) - if self.sec.fabrication == "welded" and tp > 25.0: - mu_r = min((25.0 / tp) ** 0.25, 1.0) - else: - mu_r = 1.0 + # Cl.605.2 — thickness correction factor μr (welded + tp>25 mm only). + design = IRC22_2014.cl_605_2_fatigue_design( + tp_mm=tp, + f_MPa=max(stress_range_MPa, 1e-6), + Nsc=fat.Nsc, + section_type=self.sec.fabrication, + gamma_mft=mat.gamma_mft, + ) + mu_r = design["mu_r"] - exponent = 1.0 / 3.0 if Nsc <= 5e6 else 1.0 / 5.0 - f_f = ffn * (5e6 / Nsc) ** exponent - tau_f = tfn * (5e6 / Nsc) ** (1.0 / 5.0) - f_fd = mu_r * f_f / gamma_mft - tau_fd = mu_r * tau_f / gamma_mft + # Cl.605.3 — design fatigue stress ranges f_f and τ_f for Nsc cycles. + strength = IRC22_2014.cl_605_3_fatigue_strength( + Nsc=fat.Nsc, section_type=self.sec.fabrication, ffn=fat.ffn, tfn=fat.tfn, + ) + + # Cl.605.4 — design fatigue strengths after μr and γmft. + assessment = IRC22_2014.cl_605_4_fatigue_assessment( + ff=strength["f_f_normal_MPa"], + tf=strength["tau_f_shear_MPa"], + mu_r=mu_r, + gamma_mft=mat.gamma_mft, + fy=mat.fy, + ) return { - "mu_r": round(mu_r, 4), - "f_f_MPa": round(f_f, 3), "tau_f_MPa": round(tau_f, 3), - "f_fd_MPa": round(f_fd, 3), "tau_fd_MPa": round(tau_fd, 3), - "Nsc": Nsc, - "exempt_stress_check": fat.stress_range < 27.0 / gamma_mft, + "mu_r": mu_r, + "f_f_MPa": strength["f_f_normal_MPa"], + "tau_f_MPa": strength["tau_f_shear_MPa"], + "f_fd_MPa": assessment["f_fd_MPa"], + "tau_fd_MPa": assessment["tau_fd_MPa"], + "Nsc": fat.Nsc, + "exempt_stress_check": design["stress_condition_ok"], "clause": "IRC 22:2015 - Cl.605.2 / 605.3 / 605.4", - "source": "built-in", + "source": "IRC22_2014", } - # --------------------------------------------------------- - # Cl.606.3.1 - Shear Stud Connector Strength - # --------------------------------------------------------- - + # IRC 22:2015 Cl.606.3.1 — headed-stud design strength Qu (Eq 6.1: min of steel and concrete modes). def compute_stud_capacity(self) -> dict: - """IRC 22:2015 Cl.606.3.1 - Design strength of headed stud.""" stud = self.studs mat = self.mat - gv = mat.gamma_v - d, hs, fu = stud.diameter, stud.height, stud.fu - fck_cu, Ecm = mat.fck, mat.Ecm - - fck_cyl = 0.8 * fck_cu - hd = hs / d - alpha = 1.0 if hd >= 4.0 else 0.2 * (hd + 1.0) - A_stud = math.pi * d ** 2 / 4.0 - - Qu_steel = 0.8 * fu * A_stud / gv - Qu_conc = 0.29 * alpha * d ** 2 * math.sqrt(fck_cyl * Ecm) / gv - Qu = min(Qu_steel, Qu_conc) - governs = "steel" if Qu_steel <= Qu_conc else "concrete" - + res = IRC22_2014.cl_606_3_1_stud_connector_strength( + d_mm=stud.diameter, + hs_mm=stud.height, + fu_MPa=stud.fu, + fck_cu_MPa=mat.fck, + Ecm_MPa=mat.Ecm, + gamma_v=mat.gamma_v, + use_table7_reference=False, + debug=True, + ) return { - "Qu_kN": round(Qu / 1e3, 3), - "Qu_steel_kN": round(Qu_steel / 1e3, 3), - "Qu_conc_kN": round(Qu_conc / 1e3, 3), - "governs": governs, "alpha": round(alpha, 4), - "fck_cyl_MPa": round(fck_cyl, 2), - "clause": "IRC 22:2015 - Cl.606.3.1 (Eq 6.1)", - "source": "built-in", + "Qu_kN": res["Qu_kN"], + "Qu_steel_kN": res["Qu_steel_kN"], + "Qu_conc_kN": res["Qu_concrete_kN"], + "governs": res["governing_mode"], + "alpha": res["alpha"], + "fck_cyl_MPa": res["fck_cyl_MPa"], + "clause": res["clause"], + "source": "IRC22_2014", } - # --------------------------------------------------------- - # Cl.606.4.1 - Longitudinal Shear & Stud Spacing - # --------------------------------------------------------- - + # IRC 22:2015 Cl.606.4.1 — required headed-stud spacing at ULS (longitudinal shear). def compute_stud_spacing(self, Vu_kN: float, beff_mm: float, xu_mm: float, Qu_kN: float) -> dict: - """IRC 22:2015 Cl.606.4.1 - Required stud spacing at ULS.""" sec, mat, slab = self.sec, self.mat, self.slab ds, h_haunch = slab.thickness, slab.haunch_depth n_studs = self.studs.n_per_section @@ -985,14 +988,10 @@ def compute_stud_spacing(self, Vu_kN: float, beff_mm: float, "clause": "IRC 22:2015 - Cl.606.4.1", "source": "built-in", } - # --------------------------------------------------------- - # Master: compute_all() - # --------------------------------------------------------- - - def compute_all(self, Vu_kN: float = 0.0) -> CapacityResults: - """Run every IRC 22 capacity computation and return aggregated results.""" + # Orchestrator — runs every IRC 22:2015 clause computation into one CapacityResults. + def compute_all(self, Vu_kN: float = 0.0, stress_range_MPa: float = 0.0) -> CapacityResults: results = CapacityResults() - results.source = "built-in" + results.source = "IRC22_2014" # 1. Effective width eff_w = self.compute_effective_width() @@ -1050,7 +1049,7 @@ def compute_all(self, Vu_kN: float = 0.0) -> CapacityResults: results.details["deflection_limits"] = defl # 10. Fatigue - fatigue = self.compute_fatigue() + fatigue = self.compute_fatigue(stress_range_MPa=stress_range_MPa) results.f_fd_MPa = fatigue["f_fd_MPa"] results.tau_fd_MPa = fatigue["tau_fd_MPa"] results.details["fatigue"] = fatigue @@ -1078,7 +1077,7 @@ def compute_all(self, Vu_kN: float = 0.0) -> CapacityResults: @dataclass class CheckResult: - """Single design-check output row.""" + # Single row of the design-check table (one IRC clause evaluated). check_id: int name: str clause: str @@ -1087,19 +1086,12 @@ class CheckResult: capacity: float capacity_unit: str dcr: float - status: str # "PASS" | "WARN" | "FAIL" | "INFO" + status: str # PASS | WARN | FAIL | INFO note: str = "" class DCREngine: - """ - Demand-to-Capacity Ratio engine. - - Classification: - PASS : DCR < 0.90 - WARN : 0.90 <= DCR < 1.00 - FAIL : DCR >= 1.00 - """ + # Demand/Capacity ratio engine — PASS < 0.90, WARN 0.90–1.00, FAIL ≥ 1.00. PASS_THRESHOLD = 0.90 FAIL_THRESHOLD = 1.00 @@ -1134,18 +1126,8 @@ def _add_check(self, check_id, name, clause, demand, capacity, unit, note=""): self.checks.append(result) return result + # Run all eight IRC 22:2015 design checks (flexure, shear, interaction, LTB, deflections, fatigue). def run_all_checks(self) -> List[CheckResult]: - """ - Execute all IRC 22 design checks: - 1. ULS Flexure (Cl.603.3.1) - 2. ULS Shear (Cl.603.3.3.2) - 3. Bending-Shear (Cl.603.3.3.3) - 4. LTB Construction (Cl.603.3.3.1) - 5. SLS Deflection Live (Cl.604.3.2) - 6. SLS Deflection Total (Cl.604.3.2) - 7. Fatigue Normal (Cl.605) - 8. Fatigue Shear (Cl.605) - """ self.checks.clear() d, c = self.demand, self.capacity @@ -1219,7 +1201,7 @@ def n_fail(self) -> int: class ReportGenerator: - """Generates formatted design-check reports.""" + # Text-report formatter for BridgeConfig + DemandEnvelope + CapacityResults + DCREngine. LINE_WIDTH = 78 BAR_WIDTH = 45 @@ -1409,22 +1391,14 @@ def _build_verdict(self) -> str: lines.append("") return "\n".join(lines) + # Assemble the full formatted report string. def generate(self) -> str: - """Build the complete formatted report string.""" return "\n".join([ self._build_header(), self._build_config(), self._build_demands(), self._build_capacity_summary(), self._build_dcr_table(), self._build_bar_chart(), self._build_verdict(), ]) - def save(self, filepath: str) -> str: - """Write the report to a text file.""" - report_text = self.generate() - os.makedirs(os.path.dirname(filepath) or ".", exist_ok=True) - with open(filepath, "w", encoding="utf-8") as f: - f.write(report_text) - return os.path.abspath(filepath) - # ====================================================================== # SECTION 6 -- MAIN PIPELINE @@ -1432,88 +1406,139 @@ def save(self, filepath: str) -> str: def _example_demands(config: BridgeConfig) -> DemandEnvelope: - """ - Realistic factored demand values for the 33.5 m bridge. - """ - L = config.geometry.span + # Reference factored demands for the 33.5 m example bridge. Dead loads computed from material + # unit weights (IRC 6:2017 Cl.203), partial factors from IRC 6:2017 Table B.2 (ULS basic), + # impact factor from IRC 6:2017 Cl.208.3 (Class 70R). Deflection placeholders are illustrative + # only — real runs should come from the grillage analyser via from_analysis_results(). + L_m = config.geometry.span + + # IRC 6:2017 Cl.203 — steel density = 7.8 t/m³ = 76.518 kN/m³. + unit_wts = IRC6_2017.cl_203_dead_load() + gamma_steel_kN_m3 = unit_wts["steel"] * 9.81 # 7.8 t/m³ → kN/m³ + gamma_concrete_kN_m3 = unit_wts["concrete_cement_reinforced"] * 9.81 + A_steel_m2 = config.section.A_steel * 1e-6 - w_sw = A_steel_m2 * 78.5 - w_slab = 25.0 * (config.slab.thickness / 1000.0) * config.geometry.beam_spacing - w_sdl = (4.32 * config.geometry.beam_spacing + 1.5 + 4.0 / config.geometry.n_girders) - w_total_dl = w_sw + w_slab + w_sdl + w_self_weight = A_steel_m2 * gamma_steel_kN_m3 + w_wet_slab = gamma_concrete_kN_m3 * (config.slab.thickness / 1000.0) * config.geometry.beam_spacing + # Illustrative SIDL (surfacing + railing share) — real bridges compute this from deck layout. + w_sidl = (4.32 * config.geometry.beam_spacing + 1.5 + 4.0 / config.geometry.n_girders) + w_dead_total = w_self_weight + w_wet_slab + w_sidl - M_dl = w_total_dl * L ** 2 / 8.0 - V_dl = w_total_dl * L / 2.0 + M_dead_kNm = w_dead_total * L_m ** 2 / 8.0 + V_dead_kN = w_dead_total * L_m / 2.0 - # Construction moment: steel weight + wet concrete only - w_construction = w_sw + w_slab - M_construction = 1.35 * w_construction * L ** 2 / 8.0 + # IRC 6:2017 Table B.2 (ULS basic) — partial safety factors. + gamma_dl = IRC6_2017.table_B2(load_type="dead_load", effect="adding", combination="basic") + gamma_ll = IRC6_2017.table_B2(load_type="live_load", load_category="leading", combination="basic") + # IRC 6:2017 Cl.208.3 — impact factor for Class 70R(W) wheel loading. + impact_fraction = IRC6_2017.cl_208_3_impact_factor(L_m) + impact_multiplier = 1.0 + impact_fraction - M_ll, V_ll = 1800.0, 350.0 - gamma_dl, gamma_ll, impact = 1.35, 1.50, 1.10 + # Construction stage — steel self-weight + wet concrete only; no SIDL, no live load. + w_construction = w_self_weight + w_wet_slab + M_construction_kNm = gamma_dl * w_construction * L_m ** 2 / 8.0 - Mu = gamma_dl * M_dl + gamma_ll * impact * M_ll - Vu = gamma_dl * V_dl + gamma_ll * impact * V_ll + # Placeholder unfactored live-load responses (typical Class 70R on 33.5 m span). + M_live_kNm, V_live_kN = 1800.0, 350.0 + + Mu_kNm = gamma_dl * M_dead_kNm + gamma_ll * impact_multiplier * M_live_kNm + Vu_kN = gamma_dl * V_dead_kN + gamma_ll * impact_multiplier * V_live_kN return DemandExtractor.from_manual( - Mu_kNm=round(Mu, 2), Vu_kN=round(Vu, 2), - M_construction_kNm=round(M_construction, 2), - delta_live_mm=28.0, delta_total_mm=38.0, - stress_range_MPa=config.fatigue.stress_range, - shear_range_MPa=config.fatigue.shear_range, + Mu_kNm=round(Mu_kNm, 2), + Vu_kN=round(Vu_kN, 2), + M_construction_kNm=round(M_construction_kNm, 2), Nsc=config.fatigue.Nsc, - combination=f"ULS Comb I: {gamma_dl}*DL + {gamma_ll}*{impact}*LL", + combination=( + f"ULS Basic: γDL={gamma_dl}·DL + γLL={gamma_ll}·IF={impact_multiplier:.3f}·LL" + ), location="midspan (interior girder)", member="interior_longitudinal_beam", ) -def _extract_demands_from_analysis(analysis_results: PlateGirderAnalysisResults) -> DemandEnvelope: +def _extract_demands_from_analysis( + analysis_results: PlateGirderAnalysisResults, + config: BridgeConfig, +) -> DemandEnvelope: """ - Extract demands from a full Grillage Analysis dynamically. + Extract every demand quantity from a solved grillage analysis. + Section properties (Ze_steel, Aw) come from the BridgeConfig so that + fatigue stress ranges are driven by the same section the capacity + calculator sees. """ - # Get interior girders first + # Section properties needed for stress-range conversions (mm units) + Ze_steel_mm3 = float(config.section.Ze_steel) + Aw_mm2 = float(config.section.Aw) + Nsc = int(config.fatigue.Nsc) + + # Build girder topology and pick an interior girder girders, _ = analysis_results.build_girders(verbose=False) - interior_g_name = None - # 1. First try to find a named interior girder - for g_name in girders: - if "interior" in g_name.lower(): - interior_g_name = g_name - break + def _pick_girder_info(name): + info = girders.get(name, {}) + return ( + list(info.get("elements", [])), + list(info.get("path", [])), + name, + ) + + interior_g_name = next( + (g for g in girders if "interior" in g.lower()), None + ) - # 2. If no explicit "interior" name, fall back to GrillageModel element member search if interior_g_name is None: + # Try the analyser's model-side tag lookup as a second option try: - interior_elements = analysis_results.bridge.model.get_element(member="interior_main_beam", options="elements") - # Create a fallback envelope directly - if interior_elements: + mdl = analysis_results.bridge.model + els = mdl.get_element(member="interior_main_beam", options="elements") + nodes = mdl.get_element(member="interior_main_beam", options="nodes") + if els: return DemandExtractor.from_analysis_results( results=analysis_results, - element_ids=interior_elements, - member_name="interior_main_beam" + element_ids=list(els), + node_ids=list(nodes) if nodes else [], + Ze_steel_mm3=Ze_steel_mm3, + Aw_mm2=Aw_mm2, + Nsc=Nsc, + member_name="interior_main_beam", ) except Exception: pass - # 3. Use the elements from the found interior girder in the girder map - if interior_g_name is not None and "elements" in girders[interior_g_name]: - elements = list(girders[interior_g_name]["elements"]) - return DemandExtractor.from_analysis_results( - results=analysis_results, - element_ids=elements, - member_name=interior_g_name - ) + if interior_g_name is not None: + elements, nodes, name = _pick_girder_info(interior_g_name) + if elements: + return DemandExtractor.from_analysis_results( + results=analysis_results, + element_ids=elements, + node_ids=nodes, + Ze_steel_mm3=Ze_steel_mm3, + Aw_mm2=Aw_mm2, + Nsc=Nsc, + member_name=name, + ) - print("WARNING: Could not identify interior girder. Using first available girder.") - first_g_name = list(girders.keys())[0] if girders else None - if first_g_name: - return DemandExtractor.from_analysis_results( - results=analysis_results, - element_ids=list(girders[first_g_name]["elements"]), - member_name=first_g_name + # Last-resort: first available girder + import warnings + warnings.warn( + "No interior girder identified — falling back to first available girder.", + stacklevel=2, + ) + first = next(iter(girders), None) + if first is None: + raise ValueError( + "Demand extraction failed: grillage analysis produced no girders." ) - - raise ValueError("Could not extract demand. No interior girder or any girder elements found.") + elements, nodes, name = _pick_girder_info(first) + return DemandExtractor.from_analysis_results( + results=analysis_results, + element_ids=elements, + node_ids=nodes, + Ze_steel_mm3=Ze_steel_mm3, + Aw_mm2=Aw_mm2, + Nsc=Nsc, + member_name=name, + ) def run_design_check( @@ -1557,17 +1582,22 @@ def run_design_check( # -- Step 2: Demand from Analyser -- print("\n[Step 2/5] Extracting design demands (Analyser) ...") if demand is None and analysis_results is not None: - demand = _extract_demands_from_analysis(analysis_results) + demand = _extract_demands_from_analysis(analysis_results, config) elif demand is None: demand = _example_demands(config) - print(f" Mu = {demand.Mu_kNm:.2f} kNm") - print(f" Vu = {demand.Vu_kN:.2f} kN") + print(f" Mu = {demand.Mu_kNm:.2f} kNm") + print(f" Vu = {demand.Vu_kN:.2f} kN") + print(f" M_construction = {demand.M_construction_kNm:.2f} kNm") + print(f" delta_live = {demand.delta_live_mm:.3f} mm") + print(f" delta_total = {demand.delta_total_mm:.3f} mm") + print(f" stress_range = {demand.stress_range_MPa:.3f} MPa") + print(f" shear_range = {demand.shear_range_MPa:.3f} MPa") print(f" Source: {demand.source}") # -- Step 3: IRC 22 Capacity -- print("\n[Step 3/5] Computing IRC 22:2015 capacities ...") calculator = IRC22CapacityCalculator(config) - capacity = calculator.compute_all(Vu_kN=demand.Vu_kN) + capacity = calculator.compute_all(Vu_kN=demand.Vu_kN, stress_range_MPa=demand.stress_range_MPa) print(f" beff = {capacity.beff_mm:.1f} mm (Cl.603.2.1)") print(f" Md = {capacity.Md_kNm:,.2f} kNm (Cl.603.3.1)") print(f" Vd = {capacity.Vd_kN:,.2f} kN (Cl.603.3.3.2)") diff --git a/src/osdagbridge/core/utils/codes/irc22_2015.py b/src/osdagbridge/core/utils/codes/irc22_2015.py index c37aa7d58..1f7c815b1 100644 --- a/src/osdagbridge/core/utils/codes/irc22_2015.py +++ b/src/osdagbridge/core/utils/codes/irc22_2015.py @@ -1413,33 +1413,25 @@ def cl_606_3_1_stud_connector_strength( (b) explicitly give fck_cu_MPa and Ecm_MPa """ - # Fetch concrete properties from IRC Table III.1 + # Fetch concrete properties from IRC Table III.1 only if not supplied directly. if (fck_cu_MPa is None or Ecm_MPa is None): if grade is None: raise ValueError("Provide either grade='Mxx' OR provide fck_cu_MPa and Ecm_MPa") - # Example expected function: cl_602_annexIII_concrete_properties() + row = IRC22_2014.cl_602_annexIII_concrete_properties(grade=grade) - table = IRC22_2014.cl_602_annexIII_concrete_properties() - - if grade not in table: - raise ValueError(f"{grade} not found in IRC22 Table III.1 concrete properties") - - row = table[grade] - - # Handles different possible keys safely - if "fck_cu" in row: - fck_cu_MPa = row["fck_cu"] - elif "fck" in row: - fck_cu_MPa = row["fck"] # cube strength from Annex III - else: - raise KeyError("Concrete table must provide fck or fck_cu") + if "fck_cu" in row: + fck_cu_MPa = row["fck_cu"] + elif "fck" in row: + fck_cu_MPa = row["fck"] # cube strength from Annex III + else: + raise KeyError("Concrete table must provide fck or fck_cu") - # Modulus of elasticity (usually stored in GPa) - if "Ec" in row: - Ecm_MPa = row["Ec"] * 1000 if row["Ec"] < 1000 else row["Ec"] - else: - raise KeyError("Concrete table must provide Ec") + # Modulus of elasticity (usually stored in GPa) + if "Ec" in row: + Ecm_MPa = row["Ec"] * 1000 if row["Ec"] < 1000 else row["Ec"] + else: + raise KeyError("Concrete table must provide Ec") if d_mm <= 0 or hs_mm <= 0: raise ValueError("Stud diameter and height must be positive") From 797e40a77fbe599ea8cf58ab6f0f570a140c460f Mon Sep 17 00:00:00 2001 From: nishikantmandal007 Date: Sun, 19 Apr 2026 16:35:53 +0530 Subject: [PATCH 163/225] refactor: replace hardcoded constants with IRC/IS code module references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every numeric constant that belonged to a code clause now comes from the module that owns that clause. No behaviour changes — all numbers are the same; they just have a single, authoritative source. analyser.py - STEEL_UNIT_WEIGHT_kN_m3 now reads DEFAULT_STEEL_DENSITY from keyfile instead of the bare literal 78.5. - WET_CONCRETE_DENSITY_kN_m3 now reads DEFAULT_CONCRETE_DENSITY (25.0). - Bituminous wearing-course default (24.0) now reads DEFAULT_BITUMINOUS_DENSITY from keyfile. - Lane reduction factors [1.0, 0.8, 0.4] now read LANE_REDUCTION_FACTORS from keyfile (IRC 6:2017 Cl.204.4 Table 6A). designer.py - GAMMA_MFT_FATIGUE (1.35) removed as a local literal; imported from keyfile where it is tagged to IRC 22:2015 Cl.605 Table 3. - Fatigue reference strengths (118, 92, 59 MPa) now derived at import time by calling IRC22_2014.cl_605_3_fatigue_strength() at Nsc = 5e6, so the values always track the IRC module. - Section classification limits (web: 84/105/126, flange: 8.4/9.4/13.6 welded, 10.5/15.7 rolled) moved out of inline literals into IS800_2007 class constants (WEB_LIMIT_*, FLANGE_OUTSTAND_*). - DCR pass/fail thresholds (0.90 / 1.00) replaced with DCR_PASS_THRESHOLD and DCR_FAIL_THRESHOLD imported from keyfile. keyfile.py - Added DEFAULT_STEEL_DENSITY, DEFAULT_CONCRETE_DENSITY, DEFAULT_BITUMINOUS_DENSITY, LANE_REDUCTION_FACTORS, GAMMA_MFT_FATIGUE, DCR_PASS_THRESHOLD, DCR_FAIL_THRESHOLD. is800_2007.py - Added class-level constants for all Table 2 section classification limits so callers no longer copy-paste the numbers. --- .../bridge_types/plate_girder/analyser.py | 161 +- .../bridge_types/plate_girder/designer.py | 219 +- .../plate_girder/plategirderbridge.py | 45 +- .../core/utils/codes/irc22_2015.py | 5 +- .../core/utils/codes/is800_2007.py | 2459 +++++++++++++++++ .../core/utils/codes/is800_common_compat.py | 38 + src/osdagbridge/core/utils/codes/keyfile.py | 15 + .../desktop/ui/dialogs/loading_popup.py | 26 +- 8 files changed, 2892 insertions(+), 76 deletions(-) create mode 100644 src/osdagbridge/core/utils/codes/is800_2007.py create mode 100644 src/osdagbridge/core/utils/codes/is800_common_compat.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index ed139c1bb..aa121cad7 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -1,7 +1,13 @@ import ospgrillage as og -# from math import sqrt, pi +# from math import sqrt, pi # import openseespy.opensees as ops from osdagbridge.core.utils.codes.irc6_2017 import IRC6_2017 +from osdagbridge.core.utils.codes.keyfile import ( + DEFAULT_STEEL_DENSITY, + DEFAULT_CONCRETE_DENSITY, + DEFAULT_BITUMINOUS_DENSITY, + LANE_REDUCTION_FACTORS, +) from osdagbridge.core.utils.common import * from osdagbridge.core.bridge_types.plate_girder.bridge_geometry import BridgeGeometry, CrossSectionLayout from osdagbridge.core.bridge_types.plate_girder.load_placement import LoadPlacementManager @@ -25,6 +31,12 @@ def __init__(self): self.transverse_section = None self.end_transverse_section = None + # Cross-section properties (DTO), stashed by create_sections() so that + # load magnitudes can be derived from actual geometry instead of + # hard-coded placeholder values. + self.longitudinal_props: SectionProperties | None = None + self.edge_longitudinal_props: SectionProperties | None = None + # -------------------- GRILLAGE MEMBERS -------------------- # Members are set via create_material() once sections and material are ready self.longitudinal_beam = None @@ -123,6 +135,9 @@ def create_sections(self, end_transverse : SectionProperties Properties for the end transverse slab. """ + self.longitudinal_props = longitudinal + self.edge_longitudinal_props = edge_longitudinal + self.longitudinal_section = og.create_section( A=longitudinal.A, J=longitudinal.J, @@ -268,17 +283,32 @@ def plot_model(self): # Dead Load # ============================================================ + # IS 875 (Part 1) / keyfile.DEFAULT_STEEL_DENSITY — structural steel unit weight (kN/m³). + STEEL_UNIT_WEIGHT_kN_m3 = DEFAULT_STEEL_DENSITY + def create_self_weight_load(self, model=None, L=None): - """Creates beam self weight distributed along length.""" + """Creates beam self weight distributed along length. + + Magnitude is derived from the interior longitudinal girder section + area (m²) × 78.5 kN/m³, so it tracks the actual section chosen by + initial sizing rather than a hard-coded placeholder. + """ model = model or self.model if model is None: raise ValueError("Model is not available. Create model before adding loads.") + if self.longitudinal_props is None: + raise ValueError( + "create_sections() must be called before create_self_weight_load(): " + "girder cross-section area is required to compute self weight." + ) + L = L or self.L start_beam = 0 end_beam = L - beam_mag = 22.4 * kN / 1.0 # kN/m + A_girder_m2 = self.longitudinal_props.A + beam_mag = A_girder_m2 * self.STEEL_UNIT_WEIGHT_kN_m3 * kN / 1.0 # kN/m DL_self_weight = og.create_load_case(name="girder self weight") @@ -301,9 +331,26 @@ def create_self_weight_load(self, model=None, L=None): model.add_load_case(DL_self_weight) return DL_self_weight - def create_deck_load(self, model=None): + # IRC 6:2017 / IS 875 Pt 1 — reinforced (wet) concrete unit weight (keyfile.DEFAULT_CONCRETE_DENSITY). + WET_CONCRETE_DENSITY_kN_m3 = DEFAULT_CONCRETE_DENSITY + + def create_deck_load(self, model=None, slab_thickness_m: float | None = None, + concrete_density_kN_m3: float | None = None): """ - Creates deck slab patch load over the full bridge deck. + Creates the wet-concrete deck slab patch load over the full bridge deck. + + This is the construction-stage slab load applied to the bare steel + girder (composite action has not developed yet). The magnitude is + computed as ``slab_thickness × ρ_concrete``; wearing-course and any + other superimposed dead loads are NOT included here — they belong to + separate load cases applied after hardening. + + Parameters + ---------- + slab_thickness_m : float + Deck slab thickness in metres (required). + concrete_density_kN_m3 : float, optional + Wet concrete density (defaults to 25 kN/m³). Geometry is obtained from load_manager. The created load case is stored on `self.deck_load_case`. @@ -312,10 +359,18 @@ def create_deck_load(self, model=None): if model is None: raise ValueError("Model is not available. Create model before adding loads.") + if slab_thickness_m is None: + raise ValueError( + "create_deck_load requires slab_thickness_m (in metres) so the " + "wet-concrete load magnitude can be derived from t × ρ_concrete." + ) + + rho_c = self.WET_CONCRETE_DENSITY_kN_m3 if concrete_density_kN_m3 is None else concrete_density_kN_m3 + # ------------------------------------------------- - # Load magnitude (UDL over area) + # Load magnitude (UDL over area): t × ρ_concrete [kN/m²] # ------------------------------------------------- - deck_mag = 25.0 * kN / (1.0 ** 2) # <-- update as per slab + wearing course if needed + deck_mag = slab_thickness_m * rho_c * kN / (1.0 ** 2) # ------------------------------------------------- # Get geometry from load manager @@ -362,9 +417,22 @@ def create_deck_load(self, model=None): return DL_deck - def create_wearing_course_load(self, model=None, edge_clearance=0.0): + def create_wearing_course_load(self, model=None, edge_clearance=0.0, + thickness_m: float | None = None, + density_kN_m3: float | None = None): """Creates wearing course load (patch). + The magnitude is computed as ``thickness × ρ``. Typical bituminous + wearing course: 50 mm at 24 kN/m³ → 1.20 kN/m². + + Parameters + ---------- + thickness_m : float + Wearing-course thickness in metres (required). + density_kN_m3 : float, optional + Unit weight of the wearing-course material. Defaults to + 24 kN/m³ (bituminous). Use 25 kN/m³ for concrete overlays. + If `model`, `L` or `w` are not provided they default to the instance values `self.model`, `self.L`, `self.w`. The created load case is stored on `self.overlay_load_case`. @@ -373,10 +441,17 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0): if model is None: raise ValueError("Model is not available. Create model before adding loads.") + if thickness_m is None: + raise ValueError( + "create_wearing_course_load requires thickness_m (in metres) " + "so the overlay load magnitude can be derived from t × ρ." + ) + rho_wc = DEFAULT_BITUMINOUS_DENSITY if density_kN_m3 is None else density_kN_m3 + # L = L or self.L # w = w or self.w - overlay_mag = 4.32 * kN / (1.0 ** 2) + overlay_mag = thickness_m * rho_wc * kN / (1.0 ** 2) # -------------------------------- # Get geometry from geometry module @@ -419,6 +494,11 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0): return DL_overlay + # IRC 5:2015 / IS 875 Pt 2 — standard SIDL intensities used when the user + # has not provided explicit load inputs via the Additional Inputs dialog. + RCC_CRASH_BARRIER_LOAD_kN_per_m = 6.54 # typical RCC crash barrier (IRC 5 Type P3/P4) + MEDIAN_LOAD_kN_per_m = 4.00 # raised-kerb / RCC median (nominal weight) + def create_footpath_load(self, model=None): """ Creates footpath patch loads on both sides of the bridge. @@ -436,9 +516,9 @@ def create_footpath_load(self, model=None): self.footpath_load_case = None return None # ------------------------------------------------- - # Load magnitude (UDL over area) + # Load magnitude — IRC 6:2017 Cl.206.1 (footway load) # ------------------------------------------------- - footpath_mag = 5.00 * kN / (1.0 ** 2) # <-- update as per IRC value + footpath_mag = IRC6_2017.cl_206_1_footway_load() * kN / (1.0 ** 2) # ------------------------------------------------- # Create load case @@ -488,10 +568,18 @@ def create_footpath_load(self, model=None): return DL_footpath - def create_crash_barrier_load(self, model=None): + def create_crash_barrier_load(self, model=None, barrier_load_kN_per_m: float | None = None): """ Creates crash (edge) barrier line loads on both sides of the bridge. + Parameters + ---------- + barrier_load_kN_per_m : float, optional + Barrier self-weight per unit length (kN/m). When provided (typically + from the Additional Inputs dialog), this value is used directly. + Defaults to ``RCC_CRASH_BARRIER_LOAD_kN_per_m`` (6.54 kN/m) when + not specified. + Geometry is obtained from load_manager. The created load case is stored on `self.crash_barrier_load_case`. """ @@ -505,9 +593,10 @@ def create_crash_barrier_load(self, model=None): self.crash_barrier_load_case = None return None # ------------------------------------------------- - # Load magnitude (UDL along length) + # Load magnitude — from input or code default # ------------------------------------------------- - barrier_load = 6.54 * kN / m + _mag = barrier_load_kN_per_m if barrier_load_kN_per_m is not None else self.RCC_CRASH_BARRIER_LOAD_kN_per_m + barrier_load = _mag * kN / m # ------------------------------------------------- # Create load case @@ -549,10 +638,18 @@ def create_crash_barrier_load(self, model=None): return DL_barrier - def create_railing_load(self, model=None): + def create_railing_load(self, model=None, railing_load_kN_per_m: float | None = None): """ Creates railing line loads on both sides of the bridge. + Parameters + ---------- + railing_load_kN_per_m : float, optional + Railing self-weight per unit length (kN/m). When provided (typically + from the Additional Inputs dialog), this value is used directly. + Defaults to ``IRC6_2017.cl_206_5_railing_load()`` (kg/m → kN/m) + per IRC 6:2017 Cl.206.5 when not specified. + Geometry is obtained from load_manager. The created load case is stored on `self.railing_load_case`. """ @@ -567,9 +664,14 @@ def create_railing_load(self, model=None): return None # ------------------------------------------------- - # Load magnitude (UDL along length) + # Load magnitude — from user input or IRC 6:2017 Cl.206.5 code value. + # cl_206_5_railing_load() returns kg/m; convert to kN/m via × 9.81/1000. # ------------------------------------------------- - railing_udl = 1.50 * kN / m # <-- update if code value differs + if railing_load_kN_per_m is not None: + _mag = railing_load_kN_per_m + else: + _mag = IRC6_2017.cl_206_5_railing_load() * 9.81 / 1000.0 + railing_udl = _mag * kN / m # ------------------------------------------------- # Create load case @@ -611,10 +713,18 @@ def create_railing_load(self, model=None): return DL_railing - def create_median_load(self, model=None): + def create_median_load(self, model=None, median_load_kN_per_m: float | None = None): """ Creates median line load acting along the centerline of the median. + Parameters + ---------- + median_load_kN_per_m : float, optional + Median self-weight per unit length (kN/m). When provided (typically + from the Additional Inputs dialog), this value is used directly. + Defaults to ``MEDIAN_LOAD_kN_per_m`` (4.00 kN/m) when not + specified. + Geometry is obtained from load_manager. The created load case is stored on `self.median_load_case`. """ @@ -623,9 +733,10 @@ def create_median_load(self, model=None): raise ValueError("Model is not available. Create model before adding loads.") # ------------------------------------------------- - # Load magnitude (UDL along length) + # Load magnitude — from input or code default # ------------------------------------------------- - median_udl = 4.00 * kN / m # <-- update as per IRC / project data + _mag = median_load_kN_per_m if median_load_kN_per_m is not None else self.MEDIAN_LOAD_kN_per_m + median_udl = _mag * kN / m # If there is no median component in the layout, skip creating median load if not self.layout.has_component("median"): @@ -872,8 +983,10 @@ def add_vehicle_load_cases_from_combinations(self, model=None): vehicle_cases = self.vehicle_lane_coordinates() - alf = [1.0, 0.8, 0.4] - dla = 1.3 + # IRC 6:2017 Cl.204.4 Table 6A — multi-lane live-load reduction factors (keyfile.LANE_REDUCTION_FACTORS). + alf = list(LANE_REDUCTION_FACTORS) + # IRC 6:2017 Cl.208.3 — dynamic load allowance computed from actual span. + dla = 1.0 + IRC6_2017.cl_208_3_impact_factor(self.L) # ------------------------------------------------- # Empty lists # ------------------------------------------------- @@ -1242,8 +1355,8 @@ def plot(self, model=None): # bridge.plot_model() # bridge.add_dead_loads() bridge.create_self_weight_load() - bridge.create_deck_load() - bridge.create_wearing_course_load() + bridge.create_deck_load(slab_thickness_m=0.200) # 200 mm RC slab + bridge.create_wearing_course_load(thickness_m=0.050) # 50 mm bituminous bridge.create_footpath_load() bridge.create_crash_barrier_load() bridge.create_railing_load() diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index 8afce249a..c0a2aa86c 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -18,7 +18,11 @@ GAMMA_M1_STEEL_ULTIMATE, GAMMA_M_REINFORCEMENT, KEY_VEHICLE, + GAMMA_MFT_FATIGUE, + DCR_PASS_THRESHOLD, + DCR_FAIL_THRESHOLD, ) +from osdagbridge.core.utils.codes.is800_2007 import IS800_2007 # IRC 22:2015 Cl.601.4 Table 1 — partial safety factors (pulled once at import). @@ -26,12 +30,14 @@ GAMMA_M0 = _GAMMA_M["structural_steel_yield"]["ULS"] # yielding / instability GAMMA_M1 = _GAMMA_M["structural_steel_ultimate"]["ULS"] # ultimate stress GAMMA_V = _GAMMA_M["bolts_rivets_shear_tension"]["ULS"] # shear connectors -GAMMA_MFT_FATIGUE = 1.35 # IRC 22:2015 Cl.605 Table 3 +# GAMMA_MFT_FATIGUE imported from keyfile (IRC 22:2015 Cl.605 Table 3). -# IRC 22:2015 Cl.605.3 — fatigue strength at 5×10^6 cycles (rolled vs welded). -FATIGUE_STRENGTH_ROLLED_MPA = 118.0 -FATIGUE_STRENGTH_WELDED_MPA = 92.0 -FATIGUE_SHEAR_STRENGTH_MPA = 59.0 +# IRC 22:2015 Cl.605.3 — fatigue strength at 5×10^6 cycles derived from IRC module defaults. +_fat_r = IRC22_2014.cl_605_3_fatigue_strength(5_000_000, "rolled") +_fat_w = IRC22_2014.cl_605_3_fatigue_strength(5_000_000, "welded") +FATIGUE_STRENGTH_ROLLED_MPA = _fat_r["ffn_MPa_used"] # 118.0 +FATIGUE_STRENGTH_WELDED_MPA = _fat_w["ffn_MPa_used"] # 92.0 +FATIGUE_SHEAR_STRENGTH_MPA = _fat_r["tfn_MPa_used"] # 59.0 # ====================================================================== @@ -206,6 +212,9 @@ class GeometryConfig: edge_distance: float beam_type: str = "inner" support_type: str = "simply_supported" + # Lateral unbraced length for LTB — equals the cross-bracing spacing (m). + # Defaults to 3.0 m (DEFAULT_CROSS_BRACING_SPACING); wired from Additional Inputs. + cross_bracing_spacing_m: float = 3.0 @dataclass @@ -242,7 +251,7 @@ def from_plate_girder_bridge(cls, bridge: Any) -> "BridgeConfig": # (which mirrors IS 2062 / IRC 22 Annex III), concrete/rebar resolved via IRC 22 Annex III. from osdagbridge.core.utils.common import ( KEY_GIRDER, KEY_DECK_CONCRETE_GRADE_BASIC, KEY_DECK_THICKNESS, - KEY_SPAN, KEY_CARRIAGEWAY_WIDTH, + KEY_SPAN, KEY_CARRIAGEWAY_WIDTH, KEY_CROSS_BRACING_SPACING, ) if not getattr(bridge, "material_props", None): @@ -275,16 +284,51 @@ def from_plate_girder_bridge(cls, bridge: Any) -> "BridgeConfig": deck = getattr(bridge, "deck_layout", None) sizing = getattr(bridge, "sizing_result", None) + def _req(value, key: str, source: str): + if value is None: + raise ValueError( + f"{key!r} required for design but not found in {source}; " + "populate the input dock and run initial sizing before design check." + ) + return value + + span = geom.L if geom else _req(bridge.basic_inputs.get(KEY_SPAN), KEY_SPAN, "basic_inputs") + beam_spacing = geom.ext_to_int_dist if geom else _req( + getattr(sizing, "girder_spacing", None), "girder_spacing", "sizing_result") + carriageway = deck.carriageway_width if deck else _req( + bridge.basic_inputs.get(KEY_CARRIAGEWAY_WIDTH), KEY_CARRIAGEWAY_WIDTH, "basic_inputs") + n_girders = geom.n_l if geom else _req( + getattr(sizing, "no_of_girders", None), "no_of_girders", "sizing_result") + edge_dist = geom.edge_dist if geom else _req( + getattr(sizing, "deck_overhang", None), "deck_overhang", "sizing_result") + + # Cross-bracing spacing drives the lateral unbraced length for LTB. + from osdagbridge.core.utils.common import DEFAULT_CROSS_BRACING_SPACING as _DEFAULT_CB_SPACING + cb_spacing = float(bridge.additional_inputs.get(KEY_CROSS_BRACING_SPACING, _DEFAULT_CB_SPACING)) + geometry = GeometryConfig( - span=geom.L if geom else float(bridge.basic_inputs[KEY_SPAN]), - beam_spacing=geom.ext_to_int_dist if geom else sizing.girder_spacing, - carriageway_width=deck.carriageway_width if deck else float(bridge.basic_inputs[KEY_CARRIAGEWAY_WIDTH]), - n_girders=geom.n_l if geom else sizing.no_of_girders, - edge_distance=geom.edge_dist if geom else sizing.deck_overhang, + span=float(span), + beam_spacing=float(beam_spacing), + carriageway_width=float(carriageway), + n_girders=int(n_girders), + edge_distance=float(edge_dist), + cross_bracing_spacing_m=cb_spacing, ) - slab = SlabProperties(thickness=float(bridge.basic_inputs[KEY_DECK_THICKNESS])) - return cls(material=material, section=section, geometry=geometry, slab=slab) + # Deck thickness lives in the Additional Inputs dialog; fall back to the initial-sizing + # default when the user has not opened that dialog. + from osdagbridge.core.bridge_types.plate_girder.initial_sizing import DEFAULT_DECK_THICKNESS + deck_t = bridge.additional_inputs.get(KEY_DECK_THICKNESS, DEFAULT_DECK_THICKNESS) + slab = SlabProperties(thickness=float(deck_t)) + + # Shear stud parameters from Additional Inputs; defaults match the UI field defaults. + stud_d = float(bridge.additional_inputs.get("shear_stud_diameter", 20.0)) + stud_h = float(bridge.additional_inputs.get("shear_stud_height", 100.0)) + stud_fu = float(bridge.additional_inputs.get("shear_stud_ultimate_strength", 495.0)) + stud_n = int(float(bridge.additional_inputs.get("shear_stud_count", 2))) + studs = ShearStudConfig(diameter=stud_d, height=stud_h, fu=stud_fu, n_per_section=stud_n) + + return cls(material=material, section=section, geometry=geometry, slab=slab, studs=studs) @classmethod def example_33m_bridge(cls) -> "BridgeConfig": @@ -371,9 +415,12 @@ def from_analysis_results( Aw_mm2: float, Nsc: int = 2_000_000, member_name: str = "interior_longitudinal_beam", + stiffness_ratio: float = 1.0, ) -> DemandEnvelope: # Extract ULS Mu/Vu envelopes, construction moment, deflections, and fatigue ranges # directly from the grillage xarray dataset. forces→N/Nm, displacements→m. + # stiffness_ratio = I_composite / I_bare_steel: deflections for SDL and live loads + # (applied after composite action) are divided by this ratio before checking limits. import warnings import numpy as np @@ -462,30 +509,49 @@ def _as_float(arr): # ------------------------------------------------------------------ # (3) Deflections from `displacements.Component="y"` - # live : max |y-disp| over live LCs × girder nodes - # total : max |Σ dead-LC y-disp + live-LC y-disp| per node + # + # The grillage model uses bare-steel section properties throughout. + # For loads applied after composite action is established (SDL + live), + # deflections must be scaled by I_bare / I_composite = 1 / stiffness_ratio. + # Construction-stage loads (girder SW + wet concrete) correctly use the + # bare-steel stiffness and require no correction. + # + # Split dead LCs into: + # construction_lcs — girder self-weight + wet deck concrete (bare steel ✓) + # sdl_lcs — wearing course, barriers, railings, etc. (composite) # ------------------------------------------------------------------ + _const_patterns = ("girder self weight", "deck slab load", + "girder_self_weight", "deck_slab_load", + "steel", "wet_concrete") + construction_lcs = [lc for lc in dead_lcs + if any(p in str(lc).lower() for p in _const_patterns)] + sdl_lcs = [lc for lc in dead_lcs if lc not in set(construction_lcs)] + + delta_construction_m = 0.0 + delta_sdl_m = 0.0 delta_live_m = 0.0 - delta_dead_m = 0.0 + try: disp_y = ds.displacements.sel(Component="y", Node=node_ids) + def _sum_defl(lcs: list) -> float: + """Sum deflections across additive LCs; return |max| across nodes.""" + if not lcs: + return 0.0 + vals = _as_float(disp_y.sel(Loadcase=lcs).values) + vals = np.nan_to_num(vals, nan=0.0) + per_node = vals.sum(axis=0) if vals.ndim > 1 else vals + return float(np.abs(per_node).max()) if per_node.size else 0.0 + + delta_construction_m = _sum_defl(construction_lcs) + delta_sdl_m = _sum_defl(sdl_lcs) + if all_live_lcs: live_vals = _as_float(disp_y.sel(Loadcase=all_live_lcs).values) live_finite = live_vals[~np.isnan(live_vals)] if live_finite.size: delta_live_m = float(np.abs(live_finite).max()) - if dead_lcs: - dead_vals = _as_float(disp_y.sel(Loadcase=dead_lcs).values) - dead_vals = np.nan_to_num(dead_vals, nan=0.0) - # sum across LCs for each node, then take |·|max - if dead_vals.ndim > 1: - per_node = dead_vals.sum(axis=0) - else: - per_node = dead_vals - if per_node.size: - delta_dead_m = float(np.abs(per_node).max()) except (KeyError, ValueError) as e: warnings.warn( f"Could not extract vertical deflections from dataset: {e}. " @@ -493,8 +559,11 @@ def _as_float(arr): stacklevel=2, ) - delta_live_mm = delta_live_m * 1000.0 - delta_total_mm = (delta_dead_m + delta_live_m) * 1000.0 + # Apply composite stiffness correction to post-composite loads (SDL + live). + # IRC 22:2015 Cl.604.3.2: deflection limits checked at SLS after composite action. + delta_live_mm = delta_live_m / stiffness_ratio * 1000.0 + delta_total_mm = (delta_construction_m + + (delta_sdl_m + delta_live_m) / stiffness_ratio) * 1000.0 # ------------------------------------------------------------------ # (4) Fatigue ranges from moving-load envelope @@ -673,22 +742,27 @@ def classify_section(self) -> dict: @staticmethod def _classify_web(d_tw: float, epsilon: float) -> str: - if d_tw <= 84.0 * epsilon: + # Limits from IS 800:2007 Table 2 (IS800_2007 class constants). + if d_tw <= IS800_2007.WEB_LIMIT_PLASTIC * epsilon: return "Plastic" - elif d_tw <= 105.0 * epsilon: + elif d_tw <= IS800_2007.WEB_LIMIT_COMPACT * epsilon: return "Compact" - elif d_tw <= 126.0 * epsilon: + elif d_tw <= IS800_2007.WEB_LIMIT_SEMI_COMPACT * epsilon: return "Semi-Compact" return "Slender" @staticmethod def _classify_flange(b_tf: float, epsilon: float, fab: str) -> str: - limits = [9.4, 13.6] if fab == "welded" else [10.5, 15.7] - if b_tf <= 8.4 * epsilon: + # Limits from IS 800:2007 Table 2 row (i) — outstanding flange element (IS800_2007 constants). + c_lim = (IS800_2007.FLANGE_OUTSTAND_COMPACT_WELDED if fab == "welded" + else IS800_2007.FLANGE_OUTSTAND_COMPACT_ROLLED) + sc_lim = (IS800_2007.FLANGE_OUTSTAND_SEMI_COMPACT_WELDED if fab == "welded" + else IS800_2007.FLANGE_OUTSTAND_SEMI_COMPACT_ROLLED) + if b_tf <= IS800_2007.FLANGE_OUTSTAND_PLASTIC * epsilon: return "Plastic" - elif b_tf <= limits[0] * epsilon: + elif b_tf <= c_lim * epsilon: return "Compact" - elif b_tf <= limits[1] * epsilon: + elif b_tf <= sc_lim * epsilon: return "Semi-Compact" return "Slender" @@ -794,8 +868,8 @@ def compute_buckling_resistance(self, beff_mm: float) -> dict: mat = self.mat fy, Es = mat.fy, mat.Es G = mat.Gs # IRC 22 Annex III — shear modulus. - # Cross-bracing at 4–6 m intervals in practice — clamp LLT to 6000 mm for the construction stage. - LLT_mm = min(self.geo.span * 1000.0, 6000.0) + # Lateral unbraced length = cross-bracing spacing, capped at the full span. + LLT_mm = min(self.geo.cross_bracing_spacing_m * 1000.0, self.geo.span * 1000.0) It = (sec.bf_top * sec.tf_top ** 3 + sec.dw * sec.tw ** 3 @@ -1091,10 +1165,10 @@ class CheckResult: class DCREngine: - # Demand/Capacity ratio engine — PASS < 0.90, WARN 0.90–1.00, FAIL ≥ 1.00. - - PASS_THRESHOLD = 0.90 - FAIL_THRESHOLD = 1.00 + # Demand/Capacity ratio engine — PASS < DCR_PASS_THRESHOLD, WARN to DCR_FAIL_THRESHOLD, FAIL ≥. + # Thresholds sourced from keyfile to avoid duplication. + PASS_THRESHOLD = DCR_PASS_THRESHOLD + FAIL_THRESHOLD = DCR_FAIL_THRESHOLD def __init__(self, demand: DemandEnvelope, capacity: CapacityResults): self.demand = demand @@ -1456,6 +1530,63 @@ def _example_demands(config: BridgeConfig) -> DemandEnvelope: member="interior_longitudinal_beam", ) +def _composite_stiffness_ratio(config: BridgeConfig) -> float: + """ + Compute I_composite_transformed / I_bare_steel (short-term modular ratio basis). + + The grillage model uses bare-steel section properties for all load cases. + Loads applied after composite action is established (SDL and live loads) + should deflect on the stiffer composite section. Dividing bare-steel-model + deflections by this ratio gives the physically correct SLS deflection. + + Formula per IRC 22:2015 Cl.603.2.1 (effective width) and Cl.604.3 (modular + ratio). Returns a value ≥ 1.0; if the composite section cannot be + computed (e.g. missing slab data) the ratio defaults to 1.0 (conservative). + """ + try: + sec = config.section # mm + mat = config.material + slab = config.slab # mm + geo = config.geometry # m (span, beam_spacing) + + # IRC 22:2015 Cl.604.3 — short-term modular ratio (Kc=1.0 for live loads); + # lower bound 7.5 as required by the clause. + n = mat.Es / mat.Ecm + n = max(n, 7.5) + + # Effective width (inner beam, simply supported) — IRC 22:2015 Cl.603.2.1. + Lo_mm = geo.span * 1000.0 + B_mm = geo.beam_spacing * 1000.0 + beff_mm = min(Lo_mm / 4.0, B_mm) + + t_slab = slab.thickness # mm + h_haunch = slab.haunch_depth # mm + + # Transformed concrete area (steel-equivalent). + Ac_trans = beff_mm * t_slab / n # mm² + + # Steel centroid and concrete slab centroid, both measured from bottom of steel. + y_steel = sec.y_cg_from_bot + y_conc = sec.D + h_haunch + t_slab / 2.0 + + # Composite neutral axis from bottom of steel. + A_total = sec.A_steel + Ac_trans + y_comp_na = (sec.A_steel * y_steel + Ac_trans * y_conc) / A_total + + # Composite Iz about the composite NA (all expressed in steel terms). + I_steel_shifted = (sec.Iz_steel + + sec.A_steel * (y_comp_na - y_steel) ** 2) + I_conc_trans = (beff_mm * t_slab ** 3 / (12.0 * n) + + Ac_trans * (y_comp_na - y_conc) ** 2) + I_composite = I_steel_shifted + I_conc_trans + + ratio = I_composite / sec.Iz_steel + return max(ratio, 1.0) + + except Exception: + return 1.0 # conservative fallback: no composite correction applied + + def _extract_demands_from_analysis( analysis_results: PlateGirderAnalysisResults, config: BridgeConfig, @@ -1471,6 +1602,9 @@ def _extract_demands_from_analysis( Aw_mm2 = float(config.section.Aw) Nsc = int(config.fatigue.Nsc) + # Composite-to-bare stiffness ratio for SLS deflection correction. + ratio = _composite_stiffness_ratio(config) + # Build girder topology and pick an interior girder girders, _ = analysis_results.build_girders(verbose=False) @@ -1501,6 +1635,7 @@ def _pick_girder_info(name): Aw_mm2=Aw_mm2, Nsc=Nsc, member_name="interior_main_beam", + stiffness_ratio=ratio, ) except Exception: pass @@ -1516,6 +1651,7 @@ def _pick_girder_info(name): Aw_mm2=Aw_mm2, Nsc=Nsc, member_name=name, + stiffness_ratio=ratio, ) # Last-resort: first available girder @@ -1538,6 +1674,7 @@ def _pick_girder_info(name): Aw_mm2=Aw_mm2, Nsc=Nsc, member_name=name, + stiffness_ratio=ratio, ) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 57d940996..1fe529a2b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -38,6 +38,9 @@ KEY_CROSS_BRACING, KEY_END_DIAPHRAGM, KEY_DECK_CONCRETE_GRADE_BASIC, + KEY_DECK_THICKNESS, + KEY_WEARING_COAT_THICKNESS, + KEY_WEARING_COAT_DENSITY, DEFAULT_CRASH_BARRIER_WIDTH, DEFAULT_RAILING_WIDTH, DEFAULT_GIRDER_SPACING, @@ -430,13 +433,47 @@ def add_dead_loads(self) -> None: Must be called after setup_grillage() has built and registered the model. """ + from osdagbridge.core.bridge_types.plate_girder.initial_sizing import ( + DEFAULT_DECK_THICKNESS as _DEFAULT_DECK_THICKNESS_MM, + ) + from osdagbridge.core.bridge_types.plate_girder.defaults import ( + DEFAULT_AI_WEARING_THICKNESS_MM as _DEFAULT_WC_THICKNESS_MM, + DEFAULT_AI_WEARING_DENSITY_KN_PER_M3 as _DEFAULT_WC_DENSITY_KN_M3, + ) + + # Deck thickness is a user input (mm); fall back to the initial-sizing + # default so the analysis can still run without the Additional Inputs + # dialog having been opened. + deck_t_mm = float(self.additional_inputs.get( + KEY_DECK_THICKNESS, _DEFAULT_DECK_THICKNESS_MM + )) + deck_t_m = deck_t_mm / 1000.0 + + # Wearing-course thickness + density from Additional Inputs, with + # sensible fallbacks (50 mm / 24 kN/m³ bituminous per AI_DEFAULTS). + wc_t_mm = float(self.additional_inputs.get( + KEY_WEARING_COAT_THICKNESS, _DEFAULT_WC_THICKNESS_MM + )) + wc_rho = float(self.additional_inputs.get( + KEY_WEARING_COAT_DENSITY, _DEFAULT_WC_DENSITY_KN_M3 + )) + wc_t_m = wc_t_mm / 1000.0 + + # Crash barrier and railing loads: use value from Additional Inputs when + # the user has explicitly set it; otherwise the analyser falls back to the + # IRC 5 code defaults stored as class constants. + _cb = self.additional_inputs.get("crash_barrier_load") + barrier_load_kN_m = float(_cb) if _cb is not None else None + _rl = self.additional_inputs.get("railing_load_value") + railing_load_kN_m = float(_rl) if _rl is not None else None + m = self.grillage_model m.create_self_weight_load() - m.create_deck_load() - m.create_wearing_course_load() + m.create_deck_load(slab_thickness_m=deck_t_m) + m.create_wearing_course_load(thickness_m=wc_t_m, density_kN_m3=wc_rho) m.create_footpath_load() - m.create_crash_barrier_load() - m.create_railing_load() + m.create_crash_barrier_load(barrier_load_kN_per_m=barrier_load_kN_m) + m.create_railing_load(railing_load_kN_per_m=railing_load_kN_m) # ───────────────────────────────────────────────────────────────────────── # Live loads — vehicle and moving loads applied after the grillage model diff --git a/src/osdagbridge/core/utils/codes/irc22_2015.py b/src/osdagbridge/core/utils/codes/irc22_2015.py index 1f7c815b1..27f7ccbf1 100644 --- a/src/osdagbridge/core/utils/codes/irc22_2015.py +++ b/src/osdagbridge/core/utils/codes/irc22_2015.py @@ -5,7 +5,10 @@ """ -from osdag_core.utils.common.is800_2007 import IS800_2007 +try: + from osdag_core.utils.common.is800_2007 import IS800_2007 +except ModuleNotFoundError: + from osdagbridge.core.utils.codes.is800_2007 import IS800_2007 from osdagbridge.core.utils.codes.keyfile import * import math diff --git a/src/osdagbridge/core/utils/codes/is800_2007.py b/src/osdagbridge/core/utils/codes/is800_2007.py new file mode 100644 index 000000000..e840c89d1 --- /dev/null +++ b/src/osdagbridge/core/utils/codes/is800_2007.py @@ -0,0 +1,2459 @@ +"""Module for Indian Standard, IS 800 : 2007 + +Started on 01 - Nov - 2018 + +@author: ajmalbabums +""" +import math +try: + from osdag_core.Common import * +except ModuleNotFoundError: + from osdagbridge.core.utils.codes.is800_common_compat import * +import pandas as pd +# from osdag_core.Common import KEY_DP_FAB_SHOP + + +class IS800_2007(object): + """Perform calculations on steel design as per IS 800:2007 + + """ + + # IS 800:2007 Table 2 — section classification limiting ratios (multiply by ε = √(250/fy)). + WEB_LIMIT_PLASTIC = 84.0 + WEB_LIMIT_COMPACT = 105.0 + WEB_LIMIT_SEMI_COMPACT = 126.0 + # Outstanding element of compression flange (Table 2 row i). + FLANGE_OUTSTAND_PLASTIC = 8.4 + FLANGE_OUTSTAND_COMPACT_WELDED = 9.4 + FLANGE_OUTSTAND_COMPACT_ROLLED = 10.5 + FLANGE_OUTSTAND_SEMI_COMPACT_WELDED = 13.6 + FLANGE_OUTSTAND_SEMI_COMPACT_ROLLED = 15.7 + + # ========================================================================== + """ SECTION 1 GENERAL """ + # ========================================================================== + """ SECTION 2 MATERIALS """ + # ------------------------------------------------------------- + # 5.4 Strength + # ------------------------------------------------------------- + + # Clause 3.7 - Classification of cross-section, Table 2, Limiting width to thickness ratio + @staticmethod + def Table2_web_OfI_H_box_section(depth, web_thickness, f_y, axial_load, load_type='Compression', section_class='Plastic'): + """ Calculate the limiting width to thickness ratio; for web of an I, H or Box section in accordance to Table 2 + + Args: + depth: depth of the web in mm (float or int) + web_thickness: thickness of the web in mm (float or int) + f_y: yield stress of the section material in N/MPa (float or int) + axial_load: Axial load (Tension or Compression) acting on the member (i.e. web) in N (float or int) + load_type: Type of axial load (Tension or Compression) (string) + section_class: Class of the section (Class1 - Plastic, Class2 - Compact or Class3 - Semi-compact) (string) + + Returns: + Results of the checks; 1. Neutral axis at mid-depth, 2. Generally (when there is axial tension or compression force acting on the section), + and 3. Axial compression, in the form of (list) + 'Pass', if the section qualifies as the required section_class, 'Fail' if it does not + + Reference: Table 2 and Cl.3.7.2, IS 800:2007 + + """ + gamma_m0 = IS800_2007.cl_5_4_1_Table_5["gamma_m0"]['yielding'] + epsilon = math.sqrt(250 / f_y) + + ratio = depth / web_thickness # ratio of the web/component + + # Check 1: Neutral axis at mid-depth + if section_class == 'Plastic': + if ratio <= (84 * epsilon): + check_1 = 'Pass' + else: + check_1 = 'Fail' + elif section_class == 'Compact': + if ratio <= (105 * epsilon): + check_1 = 'Pass' + else: + check_1 = 'Fail' + else: # 'Semi-compact' + if ratio <= (126 * epsilon): + check_1 = 'Pass' + else: + check_1 = 'Fail' + + # Check 2: Generally (when there is axial tension or compression force acting on the section) + actual_avg_stress = axial_load / (depth * web_thickness) # N/mm^2 or MPa + design_compressive_stress = f_y / gamma_m0 # N/mm^2 or MPa, design compressive stress only of web (cl. 7.1.2.1, IS 800:2007) + r_1 = actual_avg_stress / design_compressive_stress # stress ratio + + if load_type == 'Compression': + r_1 = r_1 + else: + r_1 = - r_1 # r_1 is negative for axial tension + + if section_class == 'Plastic': + if ratio <= (min(((84 * epsilon) / (1 + r_1)), 42 * epsilon)): + check_2 = 'Pass' + else: + check_2 = 'Fail' + elif section_class == 'Compact': + if r_1 < 0: + if ratio <= ((105 * epsilon) / (1 + r_1)): + check_2 = 'Pass' + else: + check_2 = 'Fail' + else: + if ratio <= (min(((105 * epsilon) / (1 + (1.5 * r_1))), 42 * epsilon)): + check_2 = 'Pass' + else: + check_2 = 'Fail' + else: # 'Semi-compact' + if ratio <= (min(((126 * epsilon) / (1 + (2 * r_1))), 42 * epsilon)): + check_2 = 'Pass' + else: + check_2 = 'Fail' + + # Check 3: Axial compression + if section_class == 'Semi-compact': + if ratio <= (42 * epsilon): + check_3 = 'Pass' + else: + check_3 = 'Fail' + else: + check_3 = 'Pass' # Not-applicable to Plastic and Compact sections (hence, Pass) + + return [check_1, check_2, check_3] + + @staticmethod + def Table2_hollow_tube(diameter, thickness, f_y, load='Axial Compression', section_class='Plastic'): + """ Calculate the limiting width to thickness ratio; for a hollow tube section in accordance to Table 2 + + Args: + diameter: diameter of the tube in mm (float or int) + thickness: thickness of the tube in mm (float or int) + f_y: yield stress of the section material in N/MPa (float or int) + load: Type of load ('Axial Compression' or 'Moment') (string) + section_class: Class of the section (Class1 - Plastic, Class2 - Compact or Class3 - Semi-compact) (string) + + Returns: + Results of the section classification check(s) + 'Pass', if the section qualifies as the required section_class, 'Fail' if it does not + + Reference: Table 2 and Cl.3.7.2, IS 800:2007 + + """ + epsilon = math.sqrt(250 / f_y) + + ratio = diameter / thickness # ratio of the web/component + + # Check 1: If the load acting is Moment + if load == 'Moment': + + if section_class == 'Plastic': + if ratio <= (42 * epsilon ** 2): + check = 'Pass' + else: + check = 'Fail' + elif section_class == 'Compact': + if ratio <= (52 * epsilon ** 2): + check = 'Pass' + else: + check = 'Fail' + else: + if ratio <= (146 * epsilon ** 2): + check = 'Pass' + else: + check = 'Fail' + + # Check 1: If the load acting is Axial Compression + elif load == 'Axial Compression': + + if section_class == 'Plastic': + check = 'Pass' + elif section_class == 'Compact': + check = 'Pass' + else: + if ratio <= (88 * epsilon ** 2): + check = 'Pass' + else: + check = 'Fail' + else: + pass + + return check + + @staticmethod + def Table2_i(width, thickness, f_y, section_type='Rolled'): + """ Calculate the limiting width to thickness ratio as per Table 2 for; + sr. no i) Outstanding element of compression flange + + Args: + width: width of the element in mm (float or int) + thickness: thickness of the element in mm (float or int) + f_y: yield stress of the section material in MPa (float or int) + section_type: Type of section ('Rolled' or 'Welded') (string) + + Returns: + A list of values with; + 1- The class of the section as Plastic, Compact, Semi-compact or Slender on account of the flange + 2- Ratio + + ['Section Class', 'Ratio'] + + Reference: Table 2 and Cl.3.7.2, IS 800:2007 + + """ + epsilon = math.sqrt(250 / f_y) + + ratio = width / thickness + + if section_type == 'Rolled': + if ratio <= (9.4 * epsilon): + section_class = 'Plastic' + elif ratio <= (10.5 * epsilon): + section_class = 'Compact' + elif ratio <= (15.7 * epsilon): + section_class = 'Semi-Compact' + else: + section_class = 'Slender' + else: + if ratio <= (8.4 * epsilon): + section_class = 'Plastic' + elif ratio <= (9.4 * epsilon): + section_class = 'Compact' + elif ratio <= (13.6 * epsilon): + section_class = 'Semi-Compact' + else: + section_class = 'Slender' + # print(f" flange_class" + # f" width {width}" + # f" thickness {thickness}" + # f" epsilon {epsilon}" + # ) + # print(f" section_type {section_type}" + # f" section_class {section_class}") + return [section_class, ratio] + + @staticmethod + def Table2_iii(depth, thickness, f_y, classification_type='Neutral axis at mid-depth'): + """ Calculate the limiting width to thickness ratio as per Table 2 for; + sr. no iii) Web of an I, H or box section for axial compression + + Args: + depth: width of the element in mm (float or int) + thickness: thickness of the element in mm (float or int) + f_y: yield stress of the section material in MPa (float or int) + classification_type: Type of classification required (Neutral axis at mid-depth, Generaly, Axial Compression) (string) + + Returns: + The class of the section as Plastic, Compact, Semi-compact or Slender on account of the web + + Reference: Table 2 and Cl.3.7.2, IS 800:2007 + + """ + epsilon = math.sqrt(250 / f_y) + + ratio = depth / thickness + + # print(f" web_class \n" + # f" depth {depth} \n" + # f" thickness {thickness} \n" + # f" epsilon {epsilon} \n" + # f" classification_type {classification_type}\n" + # ) + + if classification_type == 'Neutral axis at mid-depth': + if ratio < (84 * epsilon): + section_class = KEY_Plastic + elif ratio < (105 * epsilon): + section_class = KEY_Compact + elif ratio < (126 * epsilon): + section_class = KEY_SemiCompact + else: + section_class = 'Slender' + + elif classification_type == 'Generally': + pass + elif classification_type == 'Axial compression': + if ratio > (42 * epsilon): + section_class = 'Slender' + else: + section_class = 'Semi-Compact' + # print(f" section_class {section_class}") + + return section_class + + @staticmethod + def Table2_iv(depth, thickness_web, f_y): + """ Calculate the limiting width to thickness ratio as per Table 2 for; + sr. no i) Members subjected to Axial Compression + sr. no ii)Members subjected to Compression due to bending + + Args: + width(b): width of the element in mm (float or int) + depth(d): depth of the element in mm (float or int) + thickness(t): thickness of the element in mm (float or int) + f_y: yield stress of the section material in MPa (float or int) + force_type: Type of failure in member ('Axial') ('Compression') + section_type: Type of section ('Angle') (string) + + Returns: + A list of values with; + 1- The class of the section as Semi-compact or Slender on account of the + b/t, d/t, (b+d)/t Ratio + + ['Section Class', 'Ratio'] + + Reference: Table 2 and Cl.3.7.2, IS 800:2007 + + """ + epsilon = math.sqrt(250 / int(f_y)) + d_t = depth / thickness_web + + if d_t <= (42 * epsilon) : + section_class = KEY_SemiCompact + else: + section_class = 'Slender' + + return [section_class, d_t] + + @staticmethod + def Table2_vi(width, depth, thickness, f_y, force_type = "Axial Compression"): + """ Calculate the limiting width to thickness ratio as per Table 2 for; + sr. no i) Members subjected to Axial Compression + sr. no ii)Members subjected to Compression due to bending + + Args: + width(b): width of the element in mm (float or int) + depth(d): depth of the element in mm (float or int) + thickness(t): thickness of the element in mm (float or int) + f_y: yield stress of the section material in MPa (float or int) + force_type: Type of failure in member ('Axial') ('Compression') + section_type: Type of section ('Angle') (string) + + Returns: + A list of values with; + 1- The class of the section as Semi-compact or Slender on account of the + b/t, d/t, (b+d)/t Ratio + + ['Section Class', 'Ratio'] + + Reference: Table 2 and Cl.3.7.2, IS 800:2007 + + """ + epsilon = math.sqrt(250 / int(f_y)) + + b_t = width / thickness + d_t = depth / thickness + bd_t = (width + depth) / thickness + + + if force_type == 'Axial Compression': + if b_t <= (15.7 * epsilon) and d_t<= (15.7 * epsilon) and bd_t<= (25 * epsilon): + section_class = KEY_SemiCompact + else: + section_class = 'Slender' + else: + if b_t <= (9.4 * epsilon) and d_t<= (9.4 * epsilon): + section_class = KEY_Plastic + elif b_t <= (10.5 * epsilon) and d_t<= (10.5 * epsilon): + section_class = KEY_Compact + elif b_t <= (15.7 * epsilon) and d_t<= (15.7 * epsilon): + section_class = KEY_SemiCompact + else: + section_class = 'Slender' + + return [section_class, b_t,d_t, bd_t ] + + @staticmethod + def Table2_vii(width, depth, thickness, f_y, force_type = "Axial Compression"): + """ Calculate the limiting width to thickness ratio as per Table 2 for; + sr. no i) Members subjected to Axial Compression + sr. no ii)Members subjected to Compression due to bending + + Args: + width(b): width of the element in mm (float or int) + depth(d): depth of the element in mm (float or int) + thickness(t): thickness of the element in mm (float or int) + f_y: yield stress of the section material in MPa (float or int) + force_type: Type of failure in member ('Axial') ('Compression') + section_type: Type of section ('Angle') (string) + + Returns: + A list of values with; + 1- The class of the section as Semi-compact or Slender on account of the + b/t, d/t, (b+d)/t Ratio + + ['Section Class', 'Ratio'] + + Reference: Table 2 and Cl.3.7.2, IS 800:2007 + + """ + epsilon = math.sqrt(250 / int(f_y)) + + b_t = width / thickness + d_t = depth / thickness + bd_t = (width + depth) / thickness + + if force_type == 'Axial Compression': + if d_t<= (15.7 * epsilon) : + '''When adding more cases, you need to modify Strut angle''' + section_class = KEY_SemiCompact + else: + section_class = 'Slender' + else: + if b_t <= (9.4 * epsilon) and d_t<= (9.4 * epsilon): + section_class = KEY_Plastic + elif b_t <= (10.5 * epsilon) and d_t<= (10.5 * epsilon): + section_class = KEY_Compact + elif b_t <= (15.7 * epsilon) and d_t<= (15.7 * epsilon): + section_class = KEY_SemiCompact + else: + section_class = 'Slender' + + return [section_class, b_t,d_t, bd_t ] + + + @staticmethod + def Table2_x(outer_diameter, tube_thickness, f_y, load_type='axial compression'): + """ Calculate the limiting width to thickness ratio as per Table 2 for; + sr. no x) Circular hollow tube + + Args: + outer_diameter: outer diameter of the tube in mm (float or int) + tube_thickness: thickness of the tube in mm (float or int) + f_y: yield stress of the section material in MPa (float or int) + load_type: Type of loading (moment, axial compression) (string) + + Returns: + The class of the section as Plastic, Compact, Semi-compact or Slender + + Reference: Table 2 and Cl.3.7.2, IS 800:2007 + + """ + epsilon = math.sqrt(250 / f_y) + + ratio = outer_diameter / tube_thickness + + print(f"outer_diameter{outer_diameter},tube_thickness{tube_thickness}") + + if load_type == 'axial compression': + if ratio > (88 * epsilon**2): + section_class = 'Slender' + else: + section_class = 'Semi-Compact' + else: + if ratio <= (42 * epsilon**2): + section_class = 'Plastic' + elif (ratio > (42 * epsilon**2)) and (ratio <= (52 * epsilon**2)): + section_class = 'Compact' + elif ratio <= (146 * epsilon**2): + section_class = 'Semi-Compact' + else: + section_class = 'Slender' + + return section_class + + + # ========================================================================== + """ SECTION 3 GENERAL DESIGN REQUIREMENTS """ + + @staticmethod + def cl_3_8_max_slenderness_ratio(Type = 1): + """ + 1) A member carrying compressive loads + resulting from dead loads and imposed + loads + 2) A tension member in which a reversal + of direct stress occurs due to loads other + than wind or seismic forces + 3) A member subjected to compression + forces resulting only from combination + with wind/earthquake actions, provided + the deformation of such member does + not adversely affect tbe stress in any + part of the structure + 4) Compression flange of a beam against + lateral torsional buckling + 5) A member normally acting m a tie in a + roof truss or a bracing system not + considered effective when subject to + possible reversal of stress into + compression resulting from the action + of wind or earthquake forces]] + 6) Members always under tension’) (other + than pre-tensioned members) + """ + if Type == 1: + return 180 + elif Type == 2: + return 180 + elif Type == 3: + return 180 + elif Type == 4: + return 180 + elif Type == 5: + return 180 + elif Type == 6: + return 180 + # ========================================================================== + """ SECTION 4 METHODS OF STRUCTURAL ANALYSIS """ + # ========================================================================== + """ SECTION 5 LIMIT STATE DESIGN """ + # ------------------------------------------------------------- + # 5.4 Strength + # ------------------------------------------------------------- + + # Table 5 Partial Safety Factors for Materials, gamma_m (dict) + cl_5_4_1_Table_5 = {"gamma_m0": {'yielding': 1.10, 'buckling': 1.10}, + "gamma_m1": {'ultimate_stress': 1.25}, + "gamma_mf": {KEY_DP_FAB_SHOP: 1.25, KEY_DP_FAB_FIELD: 1.25}, + "gamma_mb": {KEY_DP_FAB_SHOP: 1.25, KEY_DP_FAB_FIELD: 1.25}, + "gamma_mr": {KEY_DP_FAB_SHOP: 1.25, KEY_DP_FAB_FIELD: 1.25}, + "gamma_mw": {KEY_DP_FAB_SHOP: 1.25, KEY_DP_FAB_FIELD: 1.50} + } + + # ------------------------------------------------------------ + # 5.6.1 Deflection + # ------------------------------------------------------------- + +# cl_5_6_1_vertical_deflection_Table_6 = { + +# Type of structure Load Type Member Supporting Deflection Limit +# Industrial building Live Load Purlins and Girts Elastic cladding Span/150 +# Industrial building Live Load Purlins and Girts Brittle cladding Span/180 +# Industrial building Live Load Simple span Elastic cladding Span/240 +# Industrial building Live Load Simple span Brittle cladding Span/300 +# Industrial building Live Load Cantilever span Elastic cladding Span/120 +# Industrial building Live Load Cantilever span Brittle cladding Span/150 +# Industrial building Live Load Rafter supporting Profiled Metal Sheeting Span/180 +# Industrial building Live Load Rafter supporting Plastered Sheeting Span/240 +# Industrial building Crane Load(Manual operation) Gantry Crane Span/500 +# Industrial building Crane load(Electric operation up to 50t) Gantry Crane Span/750 +# Industrial building Crane load(Electric operation over 50t) Gantry Crane Span/1000 +# Other buildings Live Load Floor and Roof Elements not susceptible to cracking Span/300 +# Other buildings Live Load Floor and Roof Element susceptible to cracking Span/360 +# Other buildings Live Load Cantilever Span Elements not susceptible to cracking Span/150 +# Other buildings Live Load Cantilever Span Element susceptible to cracking Span/180 +# Highway Bridges Live Load Simple span NA Span/600 +# Railway Bridges Live Load Simple span NA Span/600 +# Highway Bridges Dead Load Simple span NA Span/800 +# Railway Bridges Dead Load Simple span NA Span/800 +# Highway Bridges Live Load Cantilever span NA Span/400 +# Railway Bridges Live Load Cantilever span NA Span/400 +# Highway Bridges Dead Load Cantilever span NA Span/800 +# Railway Bridges Dead Load Cantilever span NA Span/800 + + + # } + + # ========================================================================== + """ SECTION 6 DESIGN OF TENSION MEMBERS """ + + # ------------------------------------------------------------ + # 6.2 Design Strength Due to Yielding of Gross Section + # ------------------------------------------------------------- + + @staticmethod + def cl_6_2_tension_yielding_strength(A_g, f_y): + """Calcualte the tension rupture capacity of plate as per clause 6.3.1 + :param A_g: gross area of cross section + :param f_y: yield stress of the material + :return: design strength in tension yielding + """ + gamma_m0 = IS800_2007.cl_5_4_1_Table_5["gamma_m0"]['yielding'] + T_dg = A_g * f_y / gamma_m0 + return T_dg + # ------------------------------------------------------------ + # 6.3 Design Strength Due to Rupture of Critical Section + # ------------------------------------------------------------- + + # cl.6.3.1 Plates + @staticmethod + def cl_6_3_1_tension_rupture_strength(A_n,f_u): + """Calcualte the tension rupture capacity of plate as per clause 6.3.1 + :param A_n: net effective area of member + :param f_u: ultimate stress of the material + :return: design strength in tension rupture + """ + gamma_m1 = IS800_2007.cl_5_4_1_Table_5["gamma_m1"]['ultimate_stress'] + T_dn = 0.9*A_n*f_u/gamma_m1 + return T_dn + # 6.4 Design Strength Due to Block Shear + # ------------------------------------------------------------- + + # cl. 6.4.1 Block shear strength of bolted connections + @staticmethod + def cl_6_4_1_block_shear_strength(A_vg, A_vn, A_tg, A_tn, f_u, f_y): + """Calculate the block shear strength of bolted connections as per cl. 6.4.1 + + Args: + A_vg: Minimum gross area in shear along bolt line parallel to external force [in sq. mm] (float) + A_vn: Minimum net area in shear along bolt line parallel to external force [in sq. mm] (float) + A_tg: Minimum gross area in tension from the bolt hole to the toe of the angle, + end bolt line, perpendicular to the line of force, respectively [in sq. mm] (float) + A_tn: Minimum net area in tension from the bolt hole to the toe of the angle, + end bolt line, perpendicular to the line of force, respectively [in sq. mm] (float) + f_u: Ultimate stress of the plate material in MPa (float) + f_y: Yield stress of the plate material in MPa (float) + + Return: + block shear strength of bolted connection in N (float) + + Note: + Reference: + IS 800:2007, cl. 6.4.1 + + """ + gamma_m0 = IS800_2007.cl_5_4_1_Table_5["gamma_m0"]['yielding'] + gamma_m1 = IS800_2007.cl_5_4_1_Table_5["gamma_m1"]['ultimate_stress'] + T_db1 = A_vg * f_y / (math.sqrt(3) * gamma_m0) + 0.9 * A_tn * f_u / gamma_m1 + T_db2 = 0.9 * A_vn * f_u / (math.sqrt(3) * gamma_m1) + A_tg * f_y / gamma_m0 + return min(T_db1, T_db2) + + # ========================================================================== + """ SECTION 7 DESIGN OF COMPRESS1ON MEMBERS """ + + # ------------------------------------------------------------- + # 7.4 Column Bases + # ------------------------------------------------------------- + + # cl. 7.4.1, General + @staticmethod + def cl_7_4_1_bearing_strength_concrete(concrete_grade): + """ + Args: + concrete_grade: grade of concrete used for pedestal/footing (str). + + Returns: + maximum permissible bearing strength of concrete pedestal/footing (float). + + Note: + cl 7.4.1 suggests the maximum bearing strength equal to 0.60 times f_ck, + but, the value is amended to 0.45 times f_ck (f_ck is the characteristic strength of concrete) + """ + f_ck = { + 'M10': 10, + 'M15': 15, + 'M20': 20, + 'M25': 25, + 'M30': 30, + 'M35': 35, + 'M40': 40, + 'M45': 45, + 'M50': 50, + 'M55': 55, + }[str(concrete_grade)] + + bearing_strength = 0.45 * f_ck # MPa (N/mm^2) + return bearing_strength + + # cl. 7.1, Design strength + @staticmethod + def cl_7_1_2_design_compressisive_strength_member( effective_area , design_compressive_stress , axial_load ): + """ + Args: + effective_area:effective sectional area as defined in 7.3.2 (float) + design_compressive_stress:design compressive stress, obtained as per 7.1.2.1 (float) + axial_load:Load acting on column (float) + + Returns: + Design compressive strength + 'Pass', if the section qualifies as the required section_class, 'Fail' if it does not + + Note: + Reference: IS 800 pg34 + @author:Rutvik Joshi + """ + design_compressive_strength= effective_area * design_compressive_stress #area in mm2,stress in kN/mm2 + if axial_load < design_compressive_strength: #kN + check = 'pass' + else: + check = 'fail' + return check #str + + # cl. 7.2.2 Effective Length of Prismatic Compression Members + @staticmethod + def cl_7_2_2_effective_length_of_prismatic_compression_members(unsupported_length, end_1='Fixed', end_2='Fixed'): + """ + Calculate the effective length of the member as per Cl. 7.2.2 (Table 11) of IS 800:2007 + + Args: + unsupported_length: unsupported length of the member about any axis in mm (float) + end_1: End condition at end 1 of the member (string) + end_2: End condition at end 2 of the member (string) + + Returns: + Effective length in mm + """ + + if end_1 == 'Fixed' and end_2 == 'Fixed': + effective_length = 0.65 * unsupported_length + elif end_1 == 'Fixed' and end_2 == 'Hinged': + effective_length = 0.8 * unsupported_length + elif end_1 == 'Fixed' and end_2 == 'Roller': + effective_length = 1.2 * unsupported_length + elif end_1 == 'Hinged' and end_2 == 'Hinged': + effective_length = 1.0 * unsupported_length + elif end_1 == 'Hinged' and end_2 == 'Roller': + effective_length = 2.0 * unsupported_length + elif end_1 == 'Fixed' and end_2 == 'Free': + effective_length = 2.0 * unsupported_length + else: + effective_length = 2.0 * unsupported_length + + return effective_length + + @staticmethod + def cl_7_2_4_effective_length_of_truss_compression_members(length, section_profile = 'Angles'): + """ + Calculate the effective length of the member as per Cl. 7.5.2.1 (Table 11) of IS 800:2007 + + Args: + unsupported_length: actual length of the member about any axis in mm (float) + end_1: End condition at end 1 of the member (string) + end_2: End condition at end 2 of the member (string) + + Returns: + Effective length in mm + """ + + if section_profile == 'Angles': + effective_length = 1 * length + elif section_profile == 'Back to Back Angles': + effective_length = 0.85 * length + elif section_profile == 'Channels': + print('NEED TO CHECK AGAIN') + effective_length = 1 * length + elif section_profile == 'Back to Back Channels': + print('NEED TO CHECK AGAIN') + effective_length = 0.85 * length + else: + effective_length = 1 * length + + return effective_length + + # cl. 7.1.2.1, Design stress + @staticmethod + def cl_7_1_2_1_design_compressisive_stress(f_y, gamma_mo, effective_slenderness_ratio , imperfection_factor, modulus_of_elasticity, check_type ): + """ + Args: + f_y:Yield stress (float) + gamma_mo:Effective length of member (float) + effective_slenderness_ratio:Euler buckling class (float) + imperfection_factor + modulus_of_elasticity + + Returns: + list of euler_buckling_stress, nondimensional_effective_slenderness_ratio, phi, stress_reduction_factor, design_compressive_stress_fr .design_compressive_stress, design_compressive_stress_min + Note: + Reference: IS 800 pg34 + @author:Rutvik Joshi + """ + # 2.4 - Euler buckling stress + euler_buckling_stress = (math.pi ** 2 * modulus_of_elasticity) / effective_slenderness_ratio ** 2 + if 'Concentric' in check_type: + # 2.5 - Non-dimensional effective slenderness ratio + nondimensional_effective_slenderness_ratio = math.sqrt(f_y / euler_buckling_stress) + elif 'Leg' in check_type: + nondimensional_effective_slenderness_ratio = check_type[1] + phi = 0.5 * (1 + imperfection_factor * (nondimensional_effective_slenderness_ratio - 0.2) + nondimensional_effective_slenderness_ratio ** 2) + # 2.6 - Design compressive stress + stress_reduction_factor = 1/(phi + math.sqrt(phi**2 - nondimensional_effective_slenderness_ratio**2)) + design_compressive_stress_fr = f_y * stress_reduction_factor / gamma_mo + design_compressive_stress_max = f_y / gamma_mo + design_compressive_stress = min(design_compressive_stress_fr , design_compressive_stress_max) + return [euler_buckling_stress, nondimensional_effective_slenderness_ratio, phi, stress_reduction_factor,design_compressive_stress_fr, design_compressive_stress, design_compressive_stress_max] #kN/cm2 + + # Cl. 7.1.1, Cl.7.1.2.1, Imperfection Factor + @staticmethod + def cl_7_1_2_1_imperfection_factor(buckling_class=''): + """ + Determine the Imperfection Factor of the cross-section as per Cl 7.1.1, Cl.7.1.2.1 (Table 7) of IS 800:2007 + + Args: + buckling_class (string) + + Returns: Imperfection factor value (string) + """ + imperfection_factor = { + 'a': 0.21, + 'b': 0.34, + 'c': 0.49, + 'd': 0.76 + }[buckling_class] + + return imperfection_factor + + # cl. 7.1.2.1, Buckling Class of Cross-Sections + @staticmethod + def cl_7_1_2_2_buckling_class_of_crosssections(b, h, t_f, cross_section='Rolled I-sections', section_type='Hot rolled'): + """ + Determine the buckling class of the cross-section as per Cl 7.1.2.2 (Table 10) of IS 800:2007 + + Args: + b: width of the flange + h: depth of the section + t_f: thickness of the flange + cross_section: type of cross-section + section_type: Hot rolled or Cold formed + + Returns: Buckling class values about z-z and y-y axis (dictionary) + """ + + if cross_section == 'Rolled I-sections': + if h / b > 1.2: + if t_f <= 40: + buckling_class = { + 'z-z': 'a', + 'y-y': 'b' + } + elif 40 <= t_f <= 100: + buckling_class = { + 'z-z': 'b', + 'y-y': 'c' + } + else: # this case if not derived from the code (for t_f >100mm, buckling class d is assumed about both the axis) + buckling_class = { + 'z-z': 'd', + 'y-y': 'd' + } + elif h / b <= 1.2: + if t_f <= 100: + buckling_class = { + 'z-z': 'b', + 'y-y': 'c' + } + if t_f > 100: + buckling_class = { + 'z-z': 'd', + 'y-y': 'd' + } + + elif cross_section == 'Welded I-section': + if t_f <= 40: + buckling_class = { + 'z-z': 'b', + 'y-y': 'c' + } + if t_f > 40: + buckling_class = { + 'z-z': 'c', + 'y-y': 'd' + } + + elif cross_section == 'Hollow Section': + if section_type == 'Hot rolled': + buckling_class = { + 'z-z': 'a', + 'y-y': 'a' + } + else: + buckling_class = { + 'z-z': 'b', + 'y-y': 'b' + } + + return buckling_class + + @staticmethod + def cl_7_1_2_1_design_compressisive_stress_plategirder(f_y, gamma_mo, effective_slenderness_ratio, + modulus_of_elasticity): + """ + Args: + f_y:Yield stress (float) + gamma_mo:Effective length of member (float) + effective_slenderness_ratio:Euler buckling class (float) + imperfection_factor + modulus_of_elasticity + + Returns: + list of euler_buckling_stress, nondimensional_effective_slenderness_ratio, phi, stress_reduction_factor, design_compressive_stress_fr .design_compressive_stress, design_compressive_stress_min + Note: + Reference: IS 800 pg34 + @author:Rutvik Joshi + """ + # 2.4 - Euler buckling stress + imperfection_factor = 0.49 + euler_buckling_stress = (math.pi ** 2 * modulus_of_elasticity) / effective_slenderness_ratio ** 2 + nondimensional_effective_slenderness_ratio = math.sqrt(f_y / euler_buckling_stress) + phi = 0.5 * (1 + imperfection_factor * ( + nondimensional_effective_slenderness_ratio - 0.2) + nondimensional_effective_slenderness_ratio ** 2) + # 2.6 - Design compressive stress + stress_reduction_factor = 1 / (phi + math.sqrt(phi ** 2 - nondimensional_effective_slenderness_ratio ** 2)) + design_compressive_stress_fr = f_y * stress_reduction_factor / gamma_mo + design_compressive_stress_max = f_y / gamma_mo + design_compressive_stress = min(design_compressive_stress_fr, design_compressive_stress_max) + # print(f"euler_buckling_stress {euler_buckling_stress} , nondimensional_effective_slenderness_ratio {nondimensional_effective_slenderness_ratio} , phi {phi} , stress_reduction_factor {stress_reduction_factor} , design_compressive_stress_fr {design_compressive_stress_fr} , design_compressive_stress_max {design_compressive_stress_max} , design_compressive_stress {design_compressive_stress}") + return design_compressive_stress + + @staticmethod + def cl_7_1_2_1_design_compressisive_stress_fcd_buckling_class_c(): + data = { + 200: [182.00, 182.00, 172.00, 163.00, 153.00, 142.00, 131.00, 120.00, 108.00, 97.50, 87.30, 78.20, 70.00, 62.90, + 56.60, 51.10, 46.40, 42.20, 38.50, 35.30, 32.40, 29.90, 27.60, 25.60, 23.80], + 210: [191.00, 190.00, 180.00, 170.00, 159.00, 148.00, 136.00, 123.00, 111.00, 100.00, 89.00, 79.40, 71.00, 63.60, + 57.20, 51.60, 46.80, 42.50, 38.80, 35.50, 32.60, 30.10, 27.80, 25.70, 23.90], + 220: [200.00, 199.00, 188.00, 177.00, 165.00, 153.00, 140.00, 127.00, 114.00, 102.00, 90.50, 80.60, 71.90, 64.40, + 57.80, 52.10, 47.10, 42.80, 39.00, 35.70, 32.80, 30.20, 27.90, 25.90, 24.00], + 230: [209.00, 207.00, 196.00, 184.00, 172.00, 158.00, 144.00, 130.00, 116.00, 104.00, 92.00, 81.70, 72.80, 65.00, + 58.30, 52.50, 47.50, 43.10, 39.30, 35.90, 33.00, 30.40, 28.00, 26.00, 24.10], + 240: [218.00, 216.00, 204.00, 191.00, 178.00, 163.00, 148.00, 133.00, 119.00, 105.00, 93.30, 82.70, 73.50, 65.60, + 58.80, 52.90, 47.80, 43.40, 39.50, 36.10, 33.10, 30.50, 28.20, 26.10, 24.20], + 250: [227.00, 224.00, 211.00, 198.00, 183.00, 168.00, 152.00, 136.00, 121.00, 107.00, 94.60, 83.70, 74.30, 66.20, + 59.20, 53.30, 48.10, 43.60, 39.70, 36.30, 33.30, 30.60, 28.30, 26.20, 24.30], + 260: [236.00, 233.00, 219.00, 205.00, 189.00, 173.00, 156.00, 139.00, 123.00, 109.00, 95.70, 84.60, 75.00, 66.70, + 59.70, 53.60, 48.40, 43.90, 39.90, 36.50, 33.40, 30.80, 28.40, 26.30, 24.40], + 280: [255.00, 250.00, 234.00, 218.00, 201.00, 182.00, 163.00, 145.00, 127.00, 112.00, 97.90, 86.20, 76.20, 67.70, + 60.40, 54.20, 48.90, 44.30, 40.30, 36.80, 33.70, 31.00, 28.60, 26.40, 24.50], + 300: [273.00, 266.00, 249.00, 231.00, 212.00, 191.00, 170.00, 149.00, 131.00, 114.00, 100.00, 87.60, 77.30, 68.60, + 61.10, 54.80, 49.30, 44.70, 40.60, 37.00, 33.90, 31.20, 28.80, 26.60, 24.70], + 320: [291.00, 283.00, 264.00, 244.00, 222.00, 199.00, 176.00, 154.00, 134.00, 116.00, 102.00, 88.90, 78.30, 69.30, + 61.70, 55.30, 49.80, 45.00, 40.90, 37.30, 34.10, 31.40, 28.90, 26.70, 24.80], + 340: [309.00, 299.00, 278.00, 256.00, 232.00, 207.00, 182.00, 158.00, 137.00, 119.00, 103.00, 90.10, 79.20, 70.00, + 62.30, 55.70, 50.10, 45.30, 41.10, 37.50, 34.30, 31.50, 29.10, 26.90, 24.90], + 360: [327.00, 316.00, 293.00, 268.00, 242.00, 215.00, 187.00, 162.00, 140.00, 120.00, 104.00, 91.10, 80.00, 70.70, + 62.80, 56.10, 50.50, 45.60, 41.40, 37.70, 34.50, 31.70, 29.20, 27.00, 25.00], + 380: [345.00, 332.00, 307.00, 280.00, 252.00, 222.00, 192.00, 165.00, 142.00, 122.00, 106.00, 92.10, 80.70, 71.20, + 63.30, 56.50, 50.80, 45.80, 41.60, 37.90, 34.70, 31.80, 29.30, 27.10, 25.10], + 400: [364.00, 348.00, 321.00, 292.00, 261.00, 228.00, 197.00, 169.00, 144.00, 124.00, 107.00, 93.00, 81.40, 71.80, + 63.70, 56.90, 51.10, 46.10, 41.80, 38.10, 34.80, 31.90, 29.40, 27.20, 25.20], + 420: [382.00, 364.00, 335.00, 304.00, 270.00, 235.00, 202.00, 172.00, 146.00, 125.00, 108.00, 93.80, 82.00, 72.30, + 64.10, 57.20, 51.30, 46.30, 42.00, 38.20, 34.90, 32.10, 29.50, 27.30, 25.30], + 450: [409.00, 388.00, 355.00, 320.00, 282.00, 244.00, 208.00, 176.00, 149.00, 127.00, 110.00, 94.90, 82.90, 72.90, + 64.60, 57.60, 51.70, 46.60, 42.20, 38.40, 35.10, 32.20, 29.70, 27.40, 25.40], + 480: [436.00, 412.00, 376.00, 337.00, 295.00, 252.00, 213.00, 180.00, 152.00, 129.00, 111.00, 95.90, 83.60, 73.50, + 65.10, 58.00, 52.00, 46.90, 42.50, 38.60, 35.30, 32.40, 29.80, 27.50, 25.50], + 510: [464.00, 435.00, 395.00, 352.00, 306.00, 260.00, 218.00, 183.00, 154.00, 131.00, 112.00, 96.80, 84.30, 74.10, + 65.50, 58.40, 52.30, 47.10, 42.70, 38.80, 35.40, 32.50, 29.90, 27.60, 25.60], + 540: [491.00, 458.00, 415.00, 367.00, 317.00, 267.00, 223.00, 186.00, 156.00, 132.00, 113.00, 97.60, 84.90, 74.60, + 65.90, 58.70, 52.60, 47.30, 42.90, 39.00, 35.60, 32.60, 30.00, 27.70, 25.70] +} + slenderness_ratios = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, + 220, 230, 240, 250] + df = pd.DataFrame(data, index=slenderness_ratios) + return df + + + + @staticmethod + def cl_7_5_1_2_equivalent_slenderness_ratio_of_truss_compression_members_loaded_one_leg(length, r_min, b1, b2, t, f_y, bolt_no = 2, fixity = 'Fixed'): + """ + Calculate the equivalent slenderness ratio of the member as per Cl. 7.5.1.2 (Table 12) of IS 800:2007 + + Args: + length: actual length of the member about any axis in mm (float) + end_1: End condition at end 1 of the member (string) + end_2: End condition at end 2 of the member (string) + r_min: minimum radius of gyration of the section(angle) + b1: leg of section(angle) (float) + b2: another leg of section(angle) (float) + t : thickness (float) + f_y: yield strength (float) + bolt_no: number of bolt in the connection (float) + fixity = depends on end_1 and end_2 (string) + + Returns: + list of + equivalent_slenderness_ratio + lambda_vv, lambda_psi defined in clause + k1, k2, k3 + """ + e = math.sqrt(250/f_y ) + E = 2 * 10 ** 5 + if bolt_no >= 2: + if fixity == 'Fixed': + k1 = 0.2 + k2 = 0.35 + k3 = 20 + elif fixity == 'Hinged': + k1 = 0.7 + k2 = 0.6 + k3 = 5 + elif fixity == 'Partial': + # For partial fixity, interpolate between Fixed and Hinged cases using + # recursive calls to this same staticmethod. We must qualify the call + # with the class name; an unqualified name here would look for a + # module-level function and raise NameError. + temp = IS800_2007.cl_7_5_1_2_equivalent_slenderness_ratio_of_truss_compression_members_loaded_one_leg( + length, r_min, b1, b2, t, f_y, bolt_no, fixity='Fixed' + ) + temp2 = IS800_2007.cl_7_5_1_2_equivalent_slenderness_ratio_of_truss_compression_members_loaded_one_leg( + length, r_min, b1, b2, t, f_y, bolt_no, fixity='Hinged' + ) + k1 = (temp[3] + temp2[3]) / 2 + k2 = (temp[4] + temp2[4]) / 2 + k3 = (temp[5] + temp2[5]) / 2 + + elif bolt_no == 1: + if fixity == 'Fixed': + k1 = 0.75 + k2 = 0.35 + k3 = 20 + elif fixity == 'Hinged': + k1 = 1.25 + k2 = 0.5 + k3 = 60 + elif fixity == 'Partial': + temp = IS800_2007.cl_7_5_1_2_equivalent_slenderness_ratio_of_truss_compression_members_loaded_one_leg( + length, r_min, b1, b2, t, f_y, bolt_no, fixity='Fixed' + ) + temp2 = IS800_2007.cl_7_5_1_2_equivalent_slenderness_ratio_of_truss_compression_members_loaded_one_leg( + length, r_min, b1, b2, t, f_y, bolt_no, fixity='Hinged' + ) + k1 = (temp[3] + temp2[3]) / 2 + k2 = (temp[4] + temp2[4]) / 2 + k3 = (temp[5] + temp2[5]) / 2 + + lambda_vv = (length/ r_min)/(e* math.sqrt(math.pi**2 * E/250)) + lambda_psi = ((b1 + b2)/(2 * t) )/(e* math.sqrt(math.pi**2 * E/250)) + equivalent_slenderness_ratio = math.sqrt(k1 + k2 * lambda_vv **2 + k3 * lambda_psi**2) + return [equivalent_slenderness_ratio, lambda_vv, lambda_psi, k1, k2, k3] + # ========================================================================== + """ SECTION 8 DESIGN OF MEMBERS SUBJECTED TO BENDING """ + + # ------------------------------------------------------------- + # 8.4 Shear + # ------------------------------------------------------------- + @staticmethod + def cl_8_2_1_web_buckling(d, tw, e): + d_tw = d / tw + if d_tw <= 67*e: + return False + return True + + @staticmethod + def cl_8_2_1_2_design_bending_strength(section_class, Zp, Ze, fy, gamma_mo, support): + beta_b = 1.0 if section_class == KEY_Plastic or KEY_Compact else Ze/Zp + Md = beta_b * Zp * fy / gamma_mo + if support == KEY_DISP_SUPPORT1 : + if Md < 1.2 * Ze * fy / gamma_mo: + return Md + else: + return 1.2 * Ze * fy / gamma_mo + elif support == KEY_DISP_SUPPORT2 : + if Md < 1.5 * Ze * fy / gamma_mo: + return Md + else: + return 1.5 * Ze * fy / gamma_mo + + + @staticmethod + def cl_8_2_1_2_high_shear_check(V, Vd): + if V > 0.6 * Vd : + print('High shear') + return True + else: + print('Low shear') + return False + + @staticmethod + def cl_8_2_1_4_holes_tension_zone(Anf_Agf, fy, fu, gamma_mo, gamma_m1): + if Anf_Agf > (fy/fu) * (gamma_m1/gamma_mo) / 0.9 : + return Anf_Agf + else : + return (fy/fu) * (gamma_m1/gamma_mo) / 0.9 + + @staticmethod + def cl_8_2_1_5_shear_lag(b0,b1, L0, type): + if type == 'outstand': + if b0<= L0/20 : + return b0 + else : + return L0/20 + else: + if b1<= L0/10 : + return b1 + else : + return L0/10 + + @staticmethod + def cl_8_2_2_Unsupported_beam_bending_strength(Zp, Ze, fcd, section_class): + if section_class == KEY_Plastic or section_class == KEY_Compact: + return Zp * fcd + else: + return Ze * fcd + + @staticmethod + def cl_8_2_2_Unsupported_beam_bending_compressive_stress(X_lt, fy, gamma_mo): + return X_lt * fy / gamma_mo + + @staticmethod + def cl_8_2_2_Unsupported_beam_bending_stress_reduction_factor(phi_lt, lambda_lt): + si = 1 / ( phi_lt + (phi_lt **2 - lambda_lt **2) ** 0.5) + if si > 1.0: + si = 1.0 + return si + + @staticmethod + def cl_8_2_2_Unsupported_beam_bending_phi_lt(alpha_lt, lambda_lt): + a = 0.5 * ( 1 + alpha_lt * ( lambda_lt - 0.2) + lambda_lt ** 2) + # print(alpha_lt, lambda_lt, a) + return a + + @staticmethod + def cl_8_2_2_Unsupported_beam_bending_non_slenderness( E, meu,Iy, It, Iw, Llt,beta_b, Zp, hf,ry, tf): + ''' Author : Rutvik Joshi + Clauses: 8.2.2.1 and Annex E + ''' + G = E/(2+2*meu) + fcrb = (1.1 * math.pi**2 * E/(Llt/ry)**2) * math.sqrt(1 + (((Llt/ry)/(hf/tf))**2) / 20) + _ = math.sqrt((math.pi**2 * E * Iy/Llt**2)*(G *It + (math.pi**2 * E * Iw/Llt**2) )) + __ = beta_b * Zp * fcrb + ___ = (math.pi**2 * E * Iy * hf/Llt**2)/2 * math.sqrt(1 + (((Llt/ry)/(hf/tf))**2) / 20 ) + return [min(_,__,___), fcrb] + + @staticmethod + def cl_8_2_2_Unsupported_beam_bending_fcrb(E, Llt_ry, hf_tf): + ''' Author : Rutvik Joshi + Clauses: 8.2.2.1 and Annex E + ''' + fcrb = 1.1 * math.pi**2 * E * (1 + (Llt_ry/hf_tf)**2/20)**0.5 / Llt_ry + return fcrb + @staticmethod + def cl_8_2_2_1_elastic_buckling_moment(betab, Zp, Ze, fy, Mcr, fcrb = 0): + if (betab * Zp * fy / Mcr) ** 0.5 <= (1.2 * Ze * fy / Mcr) ** 0.5: + return (betab * Zp * fy / Mcr) ** 0.5 + else: + return (1.2 * Ze * fy / Mcr) ** 0.5 + + @staticmethod + def cl_8_2_2_1_elastic_buckling_moment_fcrb( fy, fcrb=0): + + return math.sqrt(fy/fcrb) + @staticmethod + def cl_8_3_1_EffLen_Simply_Supported(Torsional, Warping, length, depth, load) : + """ Calculate the Effective Length for Simply Supported Beams as per Table 15 Cl 8.3.1 + + Args: + Torsional Restraint: Type of Restraint (string) + Warping Restraint: Type of Restraint (string) + depth(d): depth of the element in mm (float or int) + length(l): length of span in mm (float or int) + f_y: yield stress of the section material in MPa (float or int) + load: Type of load in member ('Normal') ('Destabilizing') + + + Returns: + Effective length (float) + + Reference: Table 15 Cl 8.3.1, IS 800:2007 + + """ + if load == KEY_DISP_LOAD1: + if Torsional == Torsion_Restraint1: + if Warping == Warping_Restraint1 : + length = 0.80 * length + elif Warping == Warping_Restraint2 : + length = 0.75 * length + # elif Warping ==Warping_Restraint1 : + # length = 0.80 * length + elif Warping == Warping_Restraint4 : + length = 0.85 * length + elif Warping == Warping_Restraint5 : + length = 1.00 * length + elif Torsional == Torsion_Restraint2 and Warping == Warping_Restraint5 : + length = length + 2 * depth + elif Torsional == Torsion_Restraint3 and Warping == Warping_Restraint5 : + length = 1.2 * length + 2 * depth + elif load == KEY_DISP_LOAD2: + if Torsional == Torsion_Restraint1: + if Warping == Warping_Restraint1 : + length = 0.85 * length + if Warping == Warping_Restraint2 : + length = 0.9 * length + if Warping == Warping_Restraint1 : + length = 0.95 * length + if Warping == Warping_Restraint4 : + length = 1.00 * length + if Warping == Warping_Restraint5 : + length = 1.20 * length + elif Torsional == Torsion_Restraint2 and Warping == Warping_Restraint5 : + length = 1.2 * length + 2 * depth + elif Torsional == Torsion_Restraint3 and Warping == Warping_Restraint5 : + length = 1.4 * length + 2 * depth + return length + + @staticmethod + def cl_8_3_3_EffLen_Cantilever(Support, Top, length, load) -> float: + """ Calculate the Effective Length for Simply Supported Beams as per Table 16 Cl 8.3.3 + + Args: + Support Restraint: Type of Restraint (string) + Warping Restraint: Type of Restraint (string) + depth(d): depth of the element in mm (float or int) + length(l): length of span in mm (float or int) + f_y: yield stress of the section material in MPa (float or int) + load: Type of load in member ('Normal') ('Destabilizing') + + + Returns: + Effective length (float) + + Reference: Table 15 Cl 8.3.1, IS 800:2007 + + """ + if load == KEY_DISP_LOAD1: + if Support == Support1: + if Top == Top1: + length = 3.00 * length + if Top == Top2: + length = 2.7 * length + if Top == Top3: + length = 2.40 * length + if Top == Top4: + length = 2.1 * length + + elif Support == Support2: + if Top == Top1: + length = 2.00 * length + if Top == Top2: + length = 1.8 * length + if Top == Top3: + length = 1.60 * length + if Top == Top4: + length = 1.4 * length + + + elif Support == Support3: + + if Top == Top1: + length = 1.00 * length + + if Top == Top2: + length = 0.9 * length + + if Top == Top3: + length = 0.80 * length + + if Top == Top4: + length = 0.7 * length + + elif Support == Support4: + if Top == Top1: + length = 0.80 * length + if Top == Top2: + length = 0.7 * length + if Top == Top3: + length = 0.6 * length + if Top == Top4: + length = 0.5 * length + elif load == KEY_DISP_LOAD2: + if Support == Support1: + if Top == Top1: + length = 7.50 * length + if Top == Top2: + length = 7.5 * length + if Top == Top3: + length = 4.50 * length + if Top == Top4: + length = 3.6 * length + + elif Support == Support2: + if Top == Top1: + length = 5.00 * length + if Top == Top2: + length = 5 * length + if Top == Top3: + length = 3.0 * length + if Top == Top4: + length = 2.4 * length + + + elif Support == Support3: + + if Top == Top1: + length = 2.50 * length + + if Top == Top2: + length = 2.5 * length + + if Top == Top3: + length = 1.50 * length + + if Top == Top4: + length = 1.2 * length + + elif Support == Support4: + if Top == Top1: + length = 1.40 * length + if Top == Top2: + length = 1.4 * length + if Top == Top3: + length = 0.6 * length + if Top == Top4: + length = 0.5 * length + return length + # cl. 8.4.1 shear strength of bolted connections + @staticmethod + def cl_8_4_design_shear_strength(A_vg, f_y): + """ Calculate the design shear strength in yielding as per cl. 8.4 + + Args: + A_vg: Gross area of the component in square mm (float) + f_y: Yield stress of the component material in MPa (float) + + Returns: + Design shear strength in yielding of the component in N + + """ + gamma_m0 = IS800_2007.cl_5_4_1_Table_5["gamma_m0"]['yielding'] + V_d = ((A_vg * f_y) / (math.sqrt(3) * gamma_m0)) # N + + return V_d + + # cl 8.2.1.2 design bending strength of the cross-section + @staticmethod + def cl_8_2_1_2_design_moment_strength(Z_e, Z_p, f_y, section_class=''): + """ Calculate the design bending strength as per cl. 8.2.1.2 + Args: + Z_e: Elastic section modulus of the cross-section in cubic mm (float) + Z_p: Plastic section modulus of the cross-section in cubic mm (float) + f_y: Yield stress of the component material in MPa (float) + section_class: Classification of the section (plastic, compact or semi-compact) as per Table 2 (str) + Returns: + Design bending strength of the cross-section in N-mm (float) + """ + gamma_m0 = IS800_2007.cl_5_4_1_Table_5["gamma_m0"]['yielding'] + + if section_class == 'semi-compact': + M_d = (Z_e * f_y) / gamma_m0 # N-mm + else: # 'compact' + M_d = (1.0 * Z_p * f_y) / gamma_m0 # N-mm + + return M_d + + @staticmethod + def cl_8_4_2_1_web_buckling_stiff(d, tw, e,type = 1, kv = None): + '''nominal shear strength, Vn,of webs with or without + intermediate stiffeners as governed by buckling + + Author: Rutvik Joshi ''' + d_tw = d / tw + if type == 1 and d_tw <= 67 * e: + return False + elif type == 2 and d_tw <= 67 * e * math.sqrt(kv/5.35): + return False + return True + + # @staticmethod + # def cl_8_4_2_2_ShearBuckling_Simple_postcritical(d, tw,c,mu,fyw,A_v,support): + # '''based on the shear + # buckling strength can be used for webs of Isection + # girders, with or without intermediate + # transverse stiffener, provided that the web has + # transverse stiffeners at the supports. + # + # Author: Rutvik Joshi ''' + + @staticmethod + def cl_8_4_2_2_K_v_Simple_postcritical(support, c = 0, d = 1): + + if support == 'only support': + K_v = 5.35 + else: + if c/d < 1: + K_v = 4 + 5.35/(c/d)**2 + else: + K_v = 5.35 + 4/(c/d)**2 + return K_v + + @staticmethod + def cl_8_4_2_2_tau_crc_Simple_postcritical(K_v, E,mu, d, tw): + # print('K_v',K_v,'\n E',E,'\nmu',mu,' d',d,' tw',tw) + tau_crc = (K_v * math.pi**2 * E)/(12*(1-mu**2)*(d/tw)**2) + + return tau_crc + + @staticmethod + def cl_8_4_2_2_lambda_w_Simple_postcritical(fyw, tau_crc): + # print('fyw',fyw,'\n tau_crc',tau_crc) + + lambda_w = math.sqrt(fyw/(math.sqrt(3) * tau_crc)) + + return lambda_w + + @staticmethod + def cl_8_4_2_2_tau_b_Simple_postcritical(lambda_w, fyw): + # print('fyw',fyw,' lambda_w',lambda_w) + if lambda_w <= 0.8: + tau_b = fyw / math.sqrt(3) + elif lambda_w < 1.2 and lambda_w > 0.8: + tau_b = (1 - 0.8*(lambda_w - 0.8)) * fyw / math.sqrt(3) + elif lambda_w >= 1.2: + tau_b = fyw / (math.sqrt(3) * lambda_w ** 2) + + return tau_b + + @staticmethod + def cl_8_4_2_2_Vcr_Simple_postcritical(tau_b, A_v): + # print('tau_b',tau_b,'\n A_v',A_v) + + V_cr = A_v * tau_b + + return V_cr + + @staticmethod + def cl_8_4_2_2_Mfr_TensionField(bf, tf, fyf, Nf, gamma_mo): + '''based on the post-shear buckling + strength, may be used for webs with + intermediate transverse stiffeners, in addition + to the transverse stiffeners at supports, provided + the panels adjacent to the panel under tension + field action, or the end posts provide anchorage + for the tension fields + + Author: Rutvik Joshi ''' + + M_fr = 0.25 * bf * tf ** 2 * fyf * (1 - (Nf / (bf * tf * fyf / gamma_mo)) ** 2) + print(M_fr, 'M_fr') + return M_fr + @staticmethod + def cl_8_4_2_2_TensionField( c, d, tw, fyw, bf,tf, fyf,Nf, gamma_mo, A_v,tau_b,V_p): + '''based on the post-shear buckling + strength, may be used for webs with + intermediate transverse stiffeners, in addition + to the transverse stiffeners at supports, provided + the panels adjacent to the panel under tension + field action, or the end posts provide anchorage + for the tension fields + + Author: Rutvik Joshi ''' + + if c == 0: + phi = 90 + else: + phi = math.atan(d/c) * 180/math.pi + M_fr = 0.25 * bf * tf**2 * fyf*(1-(Nf/(bf * tf * fyf / gamma_mo))**2) + print('phi',phi,'\n Nf',Nf,M_fr,'M_fr',phi*math.pi/180) + s = 2 * math.sqrt(M_fr / (fyw * tw)) / math.sin(phi*math.pi/180) + if s <= c: + pass + else: + s == c + w_tf = d * math.cos(phi*math.pi/180) + (c-2*s)*math.sin(phi*math.pi/180) + sai = 1.5 * tau_b * math.sin(2*phi*math.pi/180) + fv = math.sqrt(fyw**2 - 3 * tau_b**2 + sai**2) - sai + V_tf = A_v * tau_b + 0.9 * w_tf * tw * fv * math.sin(phi*math.pi/180)/ 10 ** 3 + if V_tf <= V_p: + pass + else: + V_tf == V_p + print('phi',phi,'\n M_fr',M_fr,'\n s',s, '\n c',c, '\n w_tf', w_tf, '\n sai',sai,'\n fv',fv,'\n V_tf',V_tf,'\n V_p',V_p) + return phi,M_fr,s, w_tf,sai,fv,V_tf + + @staticmethod + def cl_8_4_2_2_TensionField_unequal_Isection( + c, d, tw, fyw, + bf_top, tf_top, bf_bot, tf_bot, + Nf, gamma_m0, A_v, tau_b): + """ + Tension‐field method per IS 800:2007 Cl. 8.4.2.2 for unequal flanges. + + Parameters: + c : float : panel width (mm) + d : float : web depth (mm) + tw : float : web thickness (mm) + fyw : float : web yield stress (N/mm²) + bf_top : float : top flange width (mm) + tf_top : float : top flange thickness (mm) + bf_bot : float : bottom flange width (mm) + tf_bot : float : bottom flange thickness (mm) + Nf : float : axial force in each flange (kN → N·mm units consistent) + gamma_m0: float : partial safety factor + A_v : float : gross web area = d*tw (mm²) + tau_b : float : post‐buckling shear stress of web (N/mm²) + V_p : float : plastic shear strength V_np (kN) + + Returns: + tuple: (phi, Mfr_top, Mfr_bot, s_top, s_bot, w_tf, psi, fv, V_tf) + """ + + # 1) Tension‐field angle φ + if c == 0: + phi = 90.0 + else: + phi = math.degrees(math.atan((d / c) / 1.5)) + + # 2) Reduced plastic moment of each flange + def Mfr(bf, tf): + Mp = 0.25 * bf * tf**2 * fyw + ratio = Nf / (bf * tf * fyw / gamma_m0) + if ratio >= 1: + return 0 + else: + return Mp * (1 - ratio**2) + + Mfr_t = Mfr(bf_top, tf_top) + Mfr_b = Mfr(bf_bot, tf_bot) + + # 3) s‐values for each flange, limited to c + + sinφ = math.sin(math.radians(phi)) + if sinφ == 0: + s_t= 0 + s_b= 0 + else: + s_t = min(2 * math.sqrt(Mfr_t / (fyw * tw)) / sinφ, c) + s_b = min(2 * math.sqrt(Mfr_b / (fyw * tw)) / sinφ, c) + + + # 4) Width of the tension field w_tf + w_tf = d * math.cos(math.radians(phi)) - (c - s_t - s_b) * sinφ + + # 5) Field yield strength f_v + psi = 1.5 * tau_b * math.sin(2 * math.radians(phi)) + fv = math.sqrt(fyw**2 - 3 * tau_b**2 + psi**2) - psi + + # 6) Nominal shear resistance V_tf (kN) + V_tf = (A_v * tau_b + 0.9 * w_tf * tw * fv * sinφ) + V_p = d * tw * fyw / (math.sqrt(3) * gamma_m0) # Plastic shear strength + V_tf = min(V_tf, V_p) + + return phi, Mfr_t, Mfr_b, s_t, s_b, w_tf, psi, fv, V_tf + + @staticmethod + def cl_8_5_1_EndPanel(c, d, tw, fyw, bf, tf, fyf, Nf, gamma_mo, A_v, tau_b, V_p): + '''The design of end panels in girders in which the interior + panel (panel A) is designed using tension field action + shall be carried in accordance with the provisions given + herein. + only simple post critical method design + Author: Rutvik Joshi ''' + + phi = math.atan(d / c) * 180 / math.pi + M_fr = 0.25 * bf * tf ** 3 * fyf * (1 - (Nf / (bf * tf * fyf / gamma_mo)) ** 2) + print('phi', phi, '\n Nf', Nf, M_fr, 'M_fr', phi * math.pi / 180) + s = 2 * math.sqrt(M_fr / (fyw * tw)) / math.sin(phi * math.pi / 180) + if s <= c: + pass + else: + s == c + w_tf = d * math.cos(phi * math.pi / 180) + (c - 2 * s) * math.sin(phi * math.pi / 180) + sai = 1.5 * tau_b * math.sin(2 * phi * math.pi / 180) + fv = math.sqrt(fyw ** 2 - 3 * tau_b ** 2 + sai ** 2) - sai + V_tf = A_v * tau_b + 0.9 * w_tf * tw * fv * math.sin(phi * math.pi / 180) / 10 ** 3 + if V_tf <= V_p: + pass + else: + V_tf == V_p + return phi, M_fr, s, w_tf, sai, fv, V_tf + + + @staticmethod + def cl_8_6_1_1_plate_girder_minimum_web_a(D,tw,epsilon,tf_top,tf_bot): + d = D - (tf_top + tf_bot) + if d/tw < 200 * epsilon: + return True + else: + return False + + @staticmethod + def cl_8_6_1_1_and_8_6_1_2_web_thickness_check(d, tw, eps, stiffener_type, c=None): + """ + Check minimum web thickness requirements as per IS 800:2007 Cl. 8.6.1.1 & 8.6.1.2 + + Parameters: + d (float): Depth of web (mm) + tw (float): Thickness of web (mm) + eps (float): ε = sqrt(250/fy) where fy is yield strength of steel (N/mm^2) + stiffener_type (str): Type of stiffening provided. Options: + - "no_stiffener" + - "transverse_only" + - "transverse_and_two_longitudinal_neutral" + - "transverse_and_one_longitudinal_compression" + c (float): Spacing of transverse stiffeners (mm), required for some types + + Returns: + dict: Dictionary with result of the web thickness check. + """ + + results = {} + # print(stiffener_type) + if stiffener_type == "no_stiffener" or c > 3 * d: + ratio = d / tw + # print("Web Ratio:", ratio) + limit_serv = 200 * eps + limit_buckling = 345 * (eps ** 2) + limit = min(limit_serv, limit_buckling) + results["Limit"] = limit + if ratio <= limit: + return True + else: + return False + + elif stiffener_type == "transverse_only": + if c is None: + + return False #{"Error": "Spacing 'c' is required for 'transverse_only' stiffeners."} + # print("c:", c, "d:", d, "tw:", tw, "eps:", eps) + if 3 * d >= c and c >= 1.5 * d: + ratio_serv = d / tw + ratio_buckling = d / tw + limit_serv = 200 * eps + limit_buckling = 345 * (eps ** 2) + elif 1.5 * d > c and c >= d: + ratio_serv = d / tw + ratio_buckling = d / tw + limit_serv = 200 * eps + limit_buckling = 345 * eps + elif 0.74 * d <= c and c < d: + ratio_serv = c / tw + ratio_buckling = d / tw + limit_serv = 200 * eps + limit_buckling = 345 * eps + elif c < 0.74 * d: + ratio_serv = d / tw + ratio_buckling = d / tw + limit_serv = 270 * eps + limit_buckling = 345 * eps + else: + # print('Transverse only') + return False #{"Error": "Invalid range for spacing 'c'."} + + + if ratio_serv <= limit_serv and ratio_buckling <= limit_buckling: + return True + else: + return False + + elif stiffener_type == "transverse_and_two_longitudinal_neutral": + if c >= 1.5 * d : + ratio = d / tw + limit_serv = 400 * eps + limit_buckling = 345 * (eps ** 2) + limit = min(limit_serv, limit_buckling) + + else: + ratio = d / tw + limit_serv = 400 * eps + limit_buckling = 345 * eps + limit = min(limit_serv, limit_buckling) + + if ratio <= limit: + return True + else: + return False + + elif stiffener_type == "transverse_and_one_longitudinal_compression": + if c is None: + return False #{"Error": "Spacing 'c' is required for compression flange restraint."} + + if 2.4 * d >= c and c >= 1.5 * d: + ratio_serv = d / tw + ratio_buckling = d / tw + limit_serv = 250 * eps + limit_buckling = 345 * (eps ** 2) + elif 1.5 * d > c and c >= d: + ratio_serv = d / tw + ratio_buckling = d / tw + limit_serv = 250 * eps + limit_buckling = 345 * eps + elif 0.74 * d <= c and c < d: + ratio_serv = c / tw + ratio_buckling = d / tw + limit_serv = 250 * eps + limit_buckling = 345 * eps + elif c < 0.74 * d: + ratio_serv = d / tw + ratio_buckling = d / tw + limit_serv = 340 * eps + limit_buckling = 345 * eps + else: + return False #{"Error": "Invalid range for spacing 'c'."} + + if ratio_serv <= limit_serv and ratio_buckling <= limit_buckling: + return True + else: + return False + + else: + return False #{"Error": "Invalid stiffener_type provided."} + + # ========================================================================== + """ SECTION 9 MEMBER SUBJECTED TO COMBINED FORCES """ + + @staticmethod + def cl_9_2_2_high_shear_moment(Md, Mfd, b, Ze, fy, gamma_mo): + Mdv=Md - b(Md-Mfd) + if Mdv <= 1.2*Ze*fy/gamma_mo: + return Mdv + else: + print('Reduced elastic buckling moment error') + return 0 + # ========================================================================== + """ SECTION 10 CONNECTIONS """ + + # ------------------------------------------------------------- + # 10.1 General + # ------------------------------------------------------------- + # ------------------------------------------------------------- + # 10.2 Location Details of Fasteners + # ------------------------------------------------------------- + + # cl. 10.2.1 Clearances for Holes for Fasteners + + @staticmethod + def cl_8_7_1_3_stiff_bearing_length(shear_force, web_thickness, flange_thickness, root_radius, fy): + # This function returns the stiff bearing length, b1 for web local yielding and web crippling check + # Minimum value of b1 is not defined in IS 800, reference has been made to AISC for such cases (CL. J10-2) + gamma_m0 = IS800_2007.cl_5_4_1_Table_5['gamma_m0']['yielding'] + bearing_length = round((float(shear_force) * 1000) * gamma_m0 / web_thickness / fy, 3) + b1_req = bearing_length - (flange_thickness + root_radius) + k = flange_thickness + root_radius + b1 = max(b1_req, k) + return b1 + + # ========================================================================== + """ SECTION 9 MEMBER SUBJECTED TO COMBINED FORCES """ + + # ------------------------------------------------------------- + # 10.1 General + # ------------------------------------------------------------- + + + + + + + # ========================================================================== + """ SECTION 10 CONNECTIONS """ + + # ------------------------------------------------------------- + # 10.1 General + # ------------------------------------------------------------- + # ------------------------------------------------------------- + # 10.2 Location Details of Fasteners + # ------------------------------------------------------------- + + # cl. 10.2.1 Clearances for Holes for Fasteners + @staticmethod + def cl_10_2_1_bolt_hole_size(d, bolt_hole_type='Standard'): + """Calculate bolt hole diameter as per Table 19 of IS 800:2007 + Args: + d - Nominal diameter of fastener in mm (float) + bolt_hole_type - Either 'Standard' or 'Over-sized' or 'short_slot' or 'long_slot' (str) + Returns: + bolt_hole_size - Diameter of the bolt hole in mm (float) + Note: + Reference: + IS 800, Table 19 (Cl 10.2.1) + TODO:ADD KEY_DISP for for Standard/oversize etc and replace these strings + """ + table_19 = { + "12-14": {'Standard': 1.0, 'Over-sized': 3.0, 'short_slot': 4.0, 'long_slot': 2.5}, + "16-22": {'Standard': 2.0, 'Over-sized': 4.0, 'short_slot': 6.0, 'long_slot': 2.5}, + "24": {'Standard': 2.0, 'Over-sized': 6.0, 'short_slot': 8.0, 'long_slot': 2.5}, + "24+": {'Standard': 3.0, 'Over-sized': 8.0, 'short_slot': 10.0, 'long_slot': 2.5} + } + import re + # d = str(re.sub("[^0-9]", "", str(d))) + d = int(d) + + if d < 12: + clearance = 0 + elif d <= 14: + clearance = table_19["12-14"][bolt_hole_type] + elif d <= 22: + clearance = table_19["16-22"][bolt_hole_type] + elif d <= 24: + clearance = table_19["24"][bolt_hole_type] + else: + clearance = table_19["24+"][bolt_hole_type] + if bolt_hole_type == 'long_slot': + bolt_hole_size = (clearance + 1) * d + else: + bolt_hole_size = clearance + d + return bolt_hole_size + + # cl. 10.2.2 Minimum Spacing + @staticmethod + def cl_10_2_2_min_spacing(d): + """Calculate minimum distance between centre of fasteners + Args: + d - Nominal diameter of fastener in mm (float) + Returns: + Minimum distance between centre of fasteners in mm (float) + Note: + Reference: + IS 800:2007, cl. 10.2.2 + """ + return 2.5 * d + + # cl. 10.2.3.1 Maximum Spacing + @staticmethod + def cl_10_2_3_1_max_spacing(plate_thicknesses): + """Calculate maximum distance between centre of fasteners + Args: + plate_thicknesses- List of thicknesses in mm of connected plates (list or tuple) + Returns: + Maximum distance between centres of adjacent fasteners in mm (float) + Note: + Reference: + IS 800:2007, cl. 10.2.3.1 + """ + # print(plate_thicknesses) + t = min(plate_thicknesses) + return min(32 * t, 300.0) + + # cl. 10.2.3.2 Maximum pitch in tension and compression members + @staticmethod + def cl_10_2_3_2_max_pitch_tension_compression(d, plate_thicknesses, member_type): + """Calculate maximum pitch between centre of fasteners lying in the direction of stress + Args: + d - Nominal diameter of fastener in mm (float) + plate_thicknesses - List of thicknesses in mm of connected plates (list or tuple) + member_type - Either 'tension' or 'compression' or 'compression_butting' (str) + Returns: + Maximum distance between centres of adjacent fasteners in mm (float) + Note: + Reference: + IS 800:2007, cl. 10.2.3.2 + """ + t = min(plate_thicknesses) + if member_type == 'tension': + return min(16 * t, 200.0) + elif member_type == 'compression': + return min(12 * t, 200.0) + else: + # TODO compression members wherein forces are transferred through butting faces is given in else + return 4.5 * d + + # cl. 10.2.4.2 Minimum Edge and End Distances + @staticmethod + def cl_10_2_4_2_min_edge_end_dist(d, bolt_hole_type='Standard', edge_type='Sheared or hand flame cut'): + """Calculate minimum end and edge distance + Args: + d - Nominal diameter of fastener in mm (float) + edge_type - Either 'hand_flame_cut' or 'machine_flame_cut' (str) + Returns: + Minimum edge and end distances from the centre of any hole to the nearest edge of a plate in mm (float) + Note: + Reference: + IS 800:2007, cl. 10.2.4.2 + """ + + d_0 = IS800_2007.cl_10_2_1_bolt_hole_size(d, bolt_hole_type) + if edge_type == 'Sheared or hand flame cut': + return 1.7 * d_0 + else: + # TODO : bolt_hole_type == 'machine_flame_cut' is given in else + return 1.5 * d_0 + + # cl. 10.2.4.3 Maximum Edge Distance + @staticmethod + def cl_10_2_4_3_max_edge_dist(conn_plates_t_fu_fy, corrosive_influences=False): + """Calculate maximum end and edge distance + Args: + conn_plates_t_fu_fy - List of tuples with plate thicknesses in mm, fu in MPa, fy in MPa (list of tuples) + example:- [ (12, 410, 250), (10, 440, 300) ] + corrosive_influences - Whether the members are exposed to corrosive influences or not (Boolean) + Returns: + Maximum edge distance to the nearest line of fasteners from an edge of any un-stiffened part in mm (float) + Note: + Reference: + IS 800:2007, cl. 10.2.4.3 + """ + # TODO : Differentiate outer plates and connected plates. + t_epsilon_considered = conn_plates_t_fu_fy[0][0] * math.sqrt(250 / float(conn_plates_t_fu_fy[0][2])) + t_considered = conn_plates_t_fu_fy[0][0] + t_min = t_considered + for i in conn_plates_t_fu_fy: + t = i[0] + f_y = i[2] + if f_y > 0: + epsilon = math.sqrt(250 / f_y) + if t * epsilon <= t_epsilon_considered: + t_epsilon_considered = t * epsilon + t_considered = t + if t < t_min: + t_min = t + + # epsilon = math.sqrt(250 / f_y) + + if corrosive_influences is True: + return 40.0 + (4 * t_min) + else: + return 12 * t_epsilon_considered + + # ------------------------------------------------------------- + # 10.3 Bearing Type Bolts + # ------------------------------------------------------------- + + # cl. 10.3.2 Design strength of bearing type bolt + @staticmethod + def cl_10_3_2_bolt_design_strength(V_dsb, V_dpb): + """Calculate design strength of bearing type bolt + Args: + V_dsb - Design shear strength of bearing bolt in N (float) + V_dpb - Design bearing strength of bolt on the plate in N (float) + Returns: + V_db - Design strength of bearing bolt in N (float) + Note: + Reference: + IS 800:2007, cl 10.3.2 + """ + V_db = min(V_dsb, V_dpb) + return V_db + + # cl. 10.3.3 Shear Capacity of Bearing Bolt + + @staticmethod + def cl_10_3_3_bolt_shear_capacity(f_ub, A_nb, A_sb, n_n, n_s=0, safety_factor_parameter=None): + """Calculate design shear strength of bearing bolt + Args: + f_ub - Ultimate tensile strength of the bolt in MPa (float) + A_nb - Net shear area of the bolt at threads in sq. mm (float) + A_sb - Nominal plain shank area of the bolt in sq. mm (float) + n_n - Number of shear planes with threads intercepting the shear plane (int) + n_s - Number of shear planes without threads intercepting the shear plane (int) + safety_factor_parameter - Either 'field' or 'shop' (str) + return: + V_dsb - Design shear strength of bearing bolt in N (float) + Note: + Reference: + IS 800:2007, cl 10.3.3 + """ + V_nsb = f_ub / math.sqrt(3) * (n_n * A_nb + n_s * A_sb) + gamma_mb = IS800_2007.cl_5_4_1_Table_5['gamma_mb'][KEY_DP_FAB_SHOP] + V_dsb = V_nsb / gamma_mb + return V_dsb + + # cl. 10.3.3.1 Long joints + @staticmethod + def cl_10_3_3_1_bolt_long_joint(d, l_j): + """ Calculate reduction factor for long joints. + Args: + l_j = Length of joint of a splice or end connection as defined in cl. 10.3.3.1 (float) + d = Nominal diameter of the fastener (float) + Return: + beta_lj = Reduction factor for long joints (float) + Note: + Reference: + IS 800:2007, cl 10.3.3.1 + """ + beta_lj = 1.075 - 0.005 * l_j / d + if beta_lj <= 0.75: + beta_lj = 0.75 + elif beta_lj >= 1.0: + beta_lj = 1.0 + if l_j >= 15.0 * d: + return beta_lj + else: + return 1.0 + + # 10.3.3.2 Large grip lengths + @staticmethod + def cl_10_3_3_2_bolt_large_grip(d, l_g, l_j=0.0): + """ Calculate reduction factor for large grip lengths. + Args: + l_g = Grip length equal to the total thickness of the connected plates as defined in cl. 10.3.3.2 (float) + d = Nominal diameter of the fastener (float) + Return: + beta_lg = Reduction factor for large grip lengths (float) if applicable + Note: + Reference: + IS 800:2007, cl 10.3.3.2 + """ + beta_lg = 8.0 / (3.0 + l_g / d) + if l_j != 0.0: + if beta_lg >= IS800_2007.cl_10_3_3_1_bolt_long_joint(d, l_j): + beta_lg = IS800_2007.cl_10_3_3_1_bolt_long_joint(d, l_j) + else: + pass + if l_g <= 5.0 * d: + beta_lg = 1.0 + # TODO: Check the maximum limit of 8d in each individual modules + # elif l_g > 8.0 * d: + # return "GRIP LENGTH TOO LARGE" + return round(beta_lg,2) + + # 10.3.3.3 Packing Plates + @staticmethod + def cl_10_3_3_3_packing_plates(t=0.0): + """ Calculate reduction factor for packing plates. + Args: + t = thickness of the thickest packing plate, in mm + Return: + beta_pk = Reduction factor for packing plates (float) if applicable + Note: + Reference: + IS 800:2007, cl 10.3.3.3 + """ + if t > 6.0: + beta_pk = (1.0 - 0.0125 * t) + else: + beta_pk = 1.0 + return beta_pk + + # cl. 10.3.4 Bearing Capacity of the Bolt + @staticmethod + def cl_10_3_4_bolt_bearing_capacity(f_u, f_ub, t, d, e, p, bolt_hole_type='Standard', + safety_factor_parameter=KEY_DP_FAB_FIELD): + + """Calculate design bearing strength of a bolt on any plate. + Args: + f_u - Ultimate tensile strength of the plate in MPa (float) + f_ub - Ultimate tensile strength of the bolt in MPa (float) + t - Summation of thicknesses of the connected plates in mm as defined in cl. 10.3.4 (float) + d - Diameter of the bolt in mm (float) + e - End distance of the fastener along bearing direction in mm (float) + p - Pitch distance of the fastener along bearing direction in mm (float) + bolt_hole_type - Either 'Standard' or 'Over-sized' or 'short_slot' or 'long_slot' (str) + safety_factor_parameter - Either 'Field' or 'Shop' (str) + return: + V_dpb - Design bearing strength of bearing bolt in N (float) + Note: + Reference: + IS 800:2007, cl 10.3.4 + """ + d_0 = IS800_2007.cl_10_2_1_bolt_hole_size(d, bolt_hole_type) + + if p > 0.0: + k_b = min(e / (3.0 * d_0), p / (3.0 * d_0) - 0.25, f_ub / f_u, 1.0) + else: + k_b = min(e / (3.0 * d_0), f_ub / f_u, 1.0) # calculate k_b when there is no pitch (p = 0) + + k_b = round(k_b, 2) + V_npb = 2.5 * k_b * d * t * f_u + gamma_mb = IS800_2007.cl_5_4_1_Table_5['gamma_mb'][safety_factor_parameter] + V_dpb = V_npb / gamma_mb + + if bolt_hole_type == 'Over-sized' or bolt_hole_type == 'short_slot': + V_dpb *= 0.7 + elif bolt_hole_type == 'long_slot': + V_dpb *= 0.5 + + return V_dpb + + @staticmethod + def cl_10_3_5_bearing_bolt_tension_resistance(f_ub, f_yb, A_sb, A_n, safety_factor_parameter=KEY_DP_FAB_FIELD): + """Calculate design tensile strength of bearing bolt + Args: + f_ub - Ultimate tensile strength of the bolt in MPa (float) + f_yb - Yield strength of the bolt in MPa (float) + A_sb - Shank area of bolt in sq. mm (float) + A_n - Net tensile stress area of the bolts as per IS 1367 in sq. mm (float) + return: + T_db - Design tensile strength of bearing bolt in N (float) + Note: + Reference: + IS 800:2007, cl 10.3.5 + """ + gamma_mb = IS800_2007.cl_5_4_1_Table_5['gamma_mb'][safety_factor_parameter] + gamma_m0 = IS800_2007.cl_5_4_1_Table_5['gamma_m0']['yielding'] + T_nb = min(0.90 * f_ub * A_n, f_yb * A_sb * gamma_mb / gamma_m0) + return T_nb / gamma_mb + + # cl. 10.3.6 Bolt subjected to combined shear and tension of bearing bolts + + @staticmethod + def cl_10_3_6_bearing_bolt_combined_shear_and_tension(V_sb, V_db, T_b, T_db): + """Check for bolt subjected to combined shear and tension + Args: + V_sb - factored shear force acting on the bolt, + V_db - design shear capacity, + T_b - factored tensile force acting on the bolt, + T_db - design tension capacity. + return: combined shear and friction value + Note: + Reference: + IS 800:2007, cl 10.3.6 + """ + return (V_sb / V_db) ** 2 + (T_b / T_db) ** 2 + + # ------------------------------------------------------------- + # 10.4 Friction Grip Type Bolting + # ------------------------------------------------------------- + + # cl. 10.4.3 Slip Resistance + @staticmethod + def cl_10_4_3_bolt_slip_resistance(f_ub, A_nb, n_e, mu_f, bolt_hole_type='Standard', slip_resistance='ultimate_load'): + # TODO : Ensure default slip_resistance = 'service_load' or 'ultimate_load' + """Calculate design shear strength of friction grip bolt as governed by slip + Args: + f_ub - Ultimate tensile strength of the bolt in MPa (float) + A_nb - Net area of the bolt at threads in sq. mm (float) + n_e - Number of effective interfaces offering frictional resistance to slip (int) + mu_f - coefficient of friction (slip factor) as specified in Table 20 + bolt_hole_type - Either 'Standard' or 'Over-sized' or 'short_slot' or 'long_slot' (str) + slip_resistance - whether slip resistance is required at service load or ultimate load + Either 'service_load' or 'ultimate_load' (str) + return: + V_dsf - Design shear strength of friction grip bolt as governed by slip in N (float) + Note: + Reference: + IS 800:2007, cl 10.4.3 + AMENDMENT NO. 1 (JANUARY 2012) to IS 800:2007 + """ + f_0 = 0.70 * f_ub + F_0 = A_nb * f_0 + if slip_resistance == 'service_load': + gamma_mf = 1.10 + else: + # TODO : slip _resistance for 'ultimate_load' is given in else + gamma_mf = 1.25 + if bolt_hole_type == 'Standard': + K_h = 1.0 + elif bolt_hole_type == 'Over-sized' or bolt_hole_type == 'short_slot' or bolt_hole_type == 'long_slot': + K_h = 0.85 + else: + # TODO : long_slot bolt loaded parallel to slot is given in else + K_h = 0.7 + if mu_f >= 0.55: + mu_f = 0.55 + V_nsf = mu_f * n_e * K_h * F_0 + V_dsf = V_nsf / gamma_mf + return V_dsf, K_h, gamma_mf + + # Table 20 Typical Average Values for Coefficient of Friction, mu_f (list) + cl_10_4_3_Table_20 = [0.20, 0.50, 0.10, 0.25, 0.30, 0.52, 0.30, 0.30, 0.50, 0.33, 0.48, 0.1] + + # cl. 10.4.5 Tension Resistance + @staticmethod + def cl_10_4_5_friction_bolt_tension_resistance(f_ub, f_yb, A_sb, A_n, + safety_factor_parameter=KEY_DP_FAB_FIELD): + """Calculate design tensile strength of friction grip bolt + Args: + f_ub - Ultimate tensile strength of the bolt in MPa (float) + f_yb - Yield strength of the bolt in MPa (float) + A_sb - Shank area of bolt in sq. mm (float) + A_n - Net tensile stress area of the bolts as per IS 1367 in sq. mm (float) + return: + T_df - Design tensile strength of friction grip bolt in N (float) + Note: + Reference: + IS 800:2007, cl 10.4.5 + AMENDMENT NO. 1 (JANUARY 2012) to IS 800:2007 + """ + gamma_mf = IS800_2007.cl_5_4_1_Table_5['gamma_mf'][safety_factor_parameter] + gamma_m0 = IS800_2007.cl_5_4_1_Table_5['gamma_m0']['yielding'] + gamma_m1 = IS800_2007.cl_5_4_1_Table_5['gamma_m1']['ultimate_stress'] + + T_nf = min(0.9 * f_ub * A_n, f_yb * A_sb * gamma_m1 / gamma_m0) + return T_nf / gamma_mf + + # cl. 10.4.6 Combined shear and Tension for friction grip bolts + @staticmethod + def cl_10_4_6_friction_bolt_combined_shear_and_tension(V_sf, V_df, T_f, T_df): + """Calculate combined shear and tension of friction grip bolt + Args: + V_sf - applied factored shear at design load + V_df - design shear strength + T_f - externally applied factored tension at design load + T_df - design tension strength + return: + combined shear and friction value + Note: + Reference: + IS 800:2007, cl 10.4.6 + """ + return (V_sf / V_df) ** 2 + (T_f / T_df) ** 2 + + @staticmethod + def cl_10_4_7_bolt_prying_force(T_e, l_v, f_o, b_e, t, f_y, end_dist, pre_tensioned='', eta=1.5): + """Calculate prying force of friction grip bolt + Args: + 2 * T_e - Force in 2 bolts on either sides of the web/plate + l_v - distance from the bolt centre line to the toe of the fillet weld or to half + the root radius for a rolled section, + beta - 2 for non pre-tensioned bolt and 1 for pre-tensioned bolt + eta - 1.5 + b_e - effective width of flange per pair of bolts + f_o - proof stress in consistent units + t - thickness of the end plate + return: + Prying force of friction grip bolt + Note: + Reference: + IS 800:2007, cl 10.4.7 + """ + if pre_tensioned == 'Pre-tensioned': + beta = 1 + else: + beta = 2 + + le_1 = end_dist + le_2 = (1.1 * t) * math.sqrt((beta * f_o) / f_y) # here f_o is taken as N/mm^2 + l_e = min(le_1, le_2) + + # # Note: In the below equation of Q, f_o is taken as kN since the value of T_e is in kN + # Q = (l_v / (2 * l_e)) * (T_e - ((beta * eta * f_o * b_e * 1e-3 * t ** 4) / (27 * l_e * l_v ** 2))) # kN + + # All Calculations are in N-mm. Please pass arguments accordingly. + Q = (l_v / (2 * l_e)) * (T_e - ((beta * eta * f_o * b_e * t ** 4) / (27 * l_e * l_v ** 2))) # N + + if Q < 0: + Q = 0.0 + + return round(Q, 2) # N + + # ------------------------------------------------------------- + # 10.5 Welds and Welding + # ------------------------------------------------------------- + + # cl. 10.5.2.3 Minimum Size of First Run or of a Single Run Fillet Weld + @staticmethod + def cl_10_5_2_3_min_weld_size(part1_thickness, part2_thickness): + """Calculate minimum size of fillet weld as per Table 21 of IS 800:2007 + Args: + part1_thickness - Thickness of either plate element being welded in mm (float) + part2_thickness - Thickness of other plate element being welded in mm (float) + Returns: + min_weld_size - Minimum size of first run or of a single run fillet weld in mm (float) + Note: + Reference: + IS 800, Table 21 (Cl 10.5.2.3) : Minimum Size of First Run or of a Single Run Fillet Weld + """ + thicker_part_thickness = max(part1_thickness, part2_thickness) + thinner_part_thickness = min(part1_thickness, part2_thickness) + + if thicker_part_thickness <= 10.0: + min_weld_size = 3 + elif thicker_part_thickness <= 20.0: + min_weld_size = 5 + elif thicker_part_thickness <= 32.0: + min_weld_size = 6 + else: # thicker_part_thickness <= 50.0: + min_weld_size = 10 + # TODO else: + if min_weld_size > thinner_part_thickness: + min_weld_size = thinner_part_thickness + return min_weld_size + + @staticmethod + def cl_10_5_3_1_max_weld_throat_thickness(part1_thickness, part2_thickness, special_circumstance=False): + + """Calculate maximum effective throat thickness of fillet weld + Args: + part1_thickness - Thickness of either plate element being welded in mm (float) + part2_thickness - Thickness of other plate element being welded in mm (float) + special_circumstance - (Boolean) + Returns: + maximum effective throat thickness of fillet weld in mm (float) + Note: + Reference: + IS 800:2007, cl 10.5.3.1 + """ + + if special_circumstance is True: + return min(part1_thickness, part2_thickness) + else: + return 0.7 * min(part1_thickness, part2_thickness) + + @staticmethod + def cl_10_5_3_2_factor_for_throat_thickness(fusion_face_angle=90): + + table_22 = {'60-90': 0.70, '91-100': 0.65, '101-106': 0.60, '107-113': 0.55, '114-120': 0.50} + fusion_face_angle = int(round(fusion_face_angle)) + if 60 <= fusion_face_angle <= 90: + K = table_22['60-90'] + elif 91 <= fusion_face_angle <= 100: + K = table_22['91-100'] + elif 101 <= fusion_face_angle <= 106: + K = table_22['101-106'] + elif 107 <= fusion_face_angle <= 113: + K = table_22['107-113'] + elif 114 <= fusion_face_angle <= 120: + K = table_22['114-120'] + else: + K = "NOT DEFINED" + try: + K = float(K) + except ValueError: + return + + return K + + + @staticmethod + def cl_10_5_3_2_fillet_weld_effective_throat_thickness(fillet_size, fusion_face_angle=90): + + """Calculate effective throat thickness of fillet weld for stress calculation + Args: + fillet_size - Size of fillet weld in mm (float) + fusion_face_angle - Angle between fusion faces in degrees (int) + Returns: + Effective throat thickness of fillet weld for stress calculation in mm (float) + Note: + Reference: + + IS 800:2007, cl 10.5.3.2 + + """ + K = IS800_2007.cl_10_5_3_2_factor_for_throat_thickness(fusion_face_angle) + + throat = max(round((K * fillet_size),2), 3) + + return throat + + @staticmethod + def cl_10_5_3_2_fillet_weld_effective_throat_thickness_constant(fusion_face_angle=90): + + """Calculate effective throat thickness of fillet weld for stress calculation + + Args: + fusion_face_angle - Angle between fusion faces in degrees (int) + + Returns: + Effective throat thickness of fillet weld constant + + Note: + Reference: + IS 800:2007, cl 10.5.3.2zzz + + """ + table_22 = {'60-90': 0.70, '91-100': 0.65, '101-106': 0.60, '107-113': 0.55, '114-120': 0.50} + fusion_face_angle = int(round(fusion_face_angle)) + if 60 <= fusion_face_angle <= 90: + K = table_22['60-90'] + elif 91 <= fusion_face_angle <= 100: + K = table_22['91-100'] + elif 101 <= fusion_face_angle <= 106: + K = table_22['101-106'] + elif 107 <= fusion_face_angle <= 113: + K = table_22['107-113'] + elif 114 <= fusion_face_angle <= 120: + K = table_22['114-120'] + else: + K = "NOT DEFINED" + try: + K = float(K) + except ValueError: + return + + return K + + # Cl. 10.5.3.3 Effective throat size of groove (butt) welds + + @staticmethod + def cl_10_5_3_3_groove_weld_effective_throat_thickness(*args): + + """Calculate effective throat thickness of complete penetration butt welds + *args: + Thicknesses of each plate element being welded in mm (tuple of float) + Returns: + Effective throat thickness of CJP butt weld in mm (float) + Note: + Reference: + IS 800:2007, cl 10.5.3.3 + """ + return min(*args) + + @staticmethod + def cl_10_5_4_1_fillet_weld_effective_length(fillet_size, available_length): + + """Calculate effective length of fillet weld from available length to weld in practice + Args: + #fillet_size - Size of fillet weld in mm (float) + available_length - Available length in mm to weld the plates in practice (float) + Returns: + Effective length of fillet weld in mm (float) + Note: + Reference: + IS 800:2007, cl 10.5.4.1 + """ + if available_length <= 4 * fillet_size: + effective_length = 0 + else: + effective_length = available_length - 2 * fillet_size + return effective_length + + # cl. 10.5.7.1.1 Design stresses in fillet welds + @staticmethod + def cl_10_5_7_1_1_fillet_weld_design_stress(ultimate_stresses, fabrication=KEY_DP_FAB_SHOP): + + """Calculate the design strength of fillet weld + Args: + ultimate_stresses - Ultimate stresses of weld and parent metal in MPa (list or tuple) + fabrication - Either 'shop' or 'field' (str) + Returns: + Design strength of fillet weld in MPa (float) + Note: + Reference: + IS 800:2007, cl 10.5.7.1.1 + """ + f_u = min(ultimate_stresses) + f_wn = (f_u / math.sqrt(3)) + gamma_mw = IS800_2007.cl_5_4_1_Table_5['gamma_mw'][fabrication] + f_wd = f_wn / gamma_mw + return f_wd + + # cl. 10.5.7.3 Long joints + @staticmethod + def cl_10_5_7_3_weld_long_joint(l_j, t_t): + + """Calculate the reduction factor for long joints in welds + Args: + l_j - length of joints in the direction of force transfer in mm (float) + t_t - throat size of the weld in mm (float) + Returns: + Reduction factor, beta_lw for long joints in welds (float) + Note: + Reference: + IS 800:2007, cl 10.5.7.3 + """ + if l_j <= 150 * t_t: + return 1.0 + beta_lw = 1.2 - ((0.2 * l_j) / (150 * t_t)) + if beta_lw >= 1.0: + beta_lw = 1.0 + elif beta_lw <= 0.6: + beta_lw = 0.6 + return beta_lw + + + # ------------------------------------------------------------- + # 10.6 Design of Connections + # ------------------------------------------------------------- + # ------------------------------------------------------------- + # 10.7 Minimum Design Action on Connection + # ------------------------------------------------------------- + # ------------------------------------------------------------- + # 10.8 Intersections + # ------------------------------------------------------------- + # ------------------------------------------------------------- + # 10.9 Choice of Fasteners + # ------------------------------------------------------------- + # ------------------------------------------------------------- + # 10.10 Connection Components + # ------------------------------------------------------------- + # ------------------------------------------------------------- + # 10.11 Analysis of a Bolt/Weld Group + # ------------------------------------------------------------- + # ------------------------------------------------------------- + # 10.12 Lug Angles + # ------------------------------------------------------------- + # ------------------------------------------------------------- + # ========================================================================== + """ SECTION 11 WORKING STRESS DESIGN """ + # ========================================================================== + """ SECTION 12 DESIGN AND DETAILING FOR EARTHQUAKE """ + # ========================================================================== + """ SECTION 13 FATIGUE """ + # ========================================================================== + """ SECTION 14 DESIGN ASSISTED BY TESTING """ + # ========================================================================== + """ SECTION 15 DURABILITY """ + # ========================================================================== + """ SECTION 16 FIRE RESISTANCE """ + # ========================================================================== + """ SECTION 17 FABRICATION AND ERECTION """ + # ========================================================================== + """ ANNEX A LIST OF REFERRED INDIAN STANDARDS """ + # ========================================================================== + """ ANNEX B ANALYSIS AND DESIGN METHODS """ + # ========================================================================== + """ ANNEX C DESIGN AGAINST FLOOR VIBRATION """ + # ========================================================================== + """ ANNEX D DETERMINATION OF EFFECTIVE LENGTH OF COLUMNS """ + # ========================================================================== + """ ANNEX E ELASTIC LATERAL TORSIONAL BUCKLING """ + # ========================================================================== + """ ANNEX F CONNECTIONS """ + # ========================================================================== + """ ANNEX G GENERAL RECOMMENDATIONS FOR STEELWORK TENDERS AND CONTRACTS """ + # ========================================================================== + """ ANNEX H PLASTIC PROPERTIES OF BEAMS """ + # ========================================================================== + """ ------------------END------------------ """ + diff --git a/src/osdagbridge/core/utils/codes/is800_common_compat.py b/src/osdagbridge/core/utils/codes/is800_common_compat.py new file mode 100644 index 000000000..040351a94 --- /dev/null +++ b/src/osdagbridge/core/utils/codes/is800_common_compat.py @@ -0,0 +1,38 @@ +"""Minimal compatibility constants for the copied IS 800 helper module. + +These values mirror the corresponding names from ``osdag_core.Common`` closely +enough for the local fallback copy of ``is800_2007.py`` to import and run in a +standalone OsdagBridge checkout. +""" + +KEY_Plastic = "Plastic" +KEY_Compact = "Compact" +KEY_SemiCompact = "Semi-Compact" + +KEY_DISP_SUPPORT1 = "Simply Supported" +KEY_DISP_SUPPORT2 = "Cantilever" + +KEY_DISP_LOAD1 = "Normal" +KEY_DISP_LOAD2 = "Destabilizing" + +Torsion_Restraint1 = "Fully Restrained" +Torsion_Restraint2 = "Partially Restrained-support connection" +Torsion_Restraint3 = "Partially Restrained-bearing support" + +Warping_Restraint1 = "Both flanges fully restrained" +Warping_Restraint2 = "Compression flange fully restrained" +Warping_Restraint4 = "Compression flange partially restrained" +Warping_Restraint5 = "Warping not restrained in both flanges" + +Support1 = "Continous, with lateral restraint to top flange" +Support2 = "Continous, with partial torsional restraint" +Support3 = "Continous, with lateral and torsional restraint" +Support4 = "Restrained laterally, torsionally and against rotation on flange" + +Top1 = "Free" +Top2 = "Lateral restraint to top flange" +Top3 = "Torsional rwstraint" +Top4 = "Lateral and Torsional restraint" + +KEY_DP_FAB_SHOP = "Shop Weld" +KEY_DP_FAB_FIELD = "Field weld" diff --git a/src/osdagbridge/core/utils/codes/keyfile.py b/src/osdagbridge/core/utils/codes/keyfile.py index 8b2c2d44c..4740c7899 100644 --- a/src/osdagbridge/core/utils/codes/keyfile.py +++ b/src/osdagbridge/core/utils/codes/keyfile.py @@ -110,3 +110,18 @@ MIN_EDGE_DISTANCE_MM = 25 MIN_STUD_HEAD_FACTOR = 1.5 +# IS 875 Pt 1 / IRC 6:2017 Cl.203 — material densities (kN/m³) for dead-load calculation. +DEFAULT_STEEL_DENSITY = 78.5 # structural steel (rolled / welded plate) +DEFAULT_CONCRETE_DENSITY = 25.0 # reinforced / wet concrete +DEFAULT_BITUMINOUS_DENSITY = 24.0 # bituminous wearing course + +# IRC 6:2017 Cl.204.4 Table 6A — multi-lane live-load reduction factors (1st, 2nd, 3rd+ lanes). +LANE_REDUCTION_FACTORS = [1.0, 0.8, 0.4] + +# IRC 22:2015 Cl.605 Table 3 — partial safety factor for fatigue strength. +GAMMA_MFT_FATIGUE = 1.35 + +# Design Capacity Ratio thresholds (PASS < DCR_PASS_THRESHOLD ≤ WARN < DCR_FAIL_THRESHOLD ≤ FAIL). +DCR_PASS_THRESHOLD = 0.90 +DCR_FAIL_THRESHOLD = 1.00 + diff --git a/src/osdagbridge/desktop/ui/dialogs/loading_popup.py b/src/osdagbridge/desktop/ui/dialogs/loading_popup.py index 30f1c7225..42319fa16 100644 --- a/src/osdagbridge/desktop/ui/dialogs/loading_popup.py +++ b/src/osdagbridge/desktop/ui/dialogs/loading_popup.py @@ -230,12 +230,26 @@ def hide(self): self.process = None self.stop_event = None else: - # Linux - close in-process dialog + # Linux - close in-process dialog; tolerate already-deleted Qt C++ object. if self._dialog is not None: - self._dialog.hide() - self._dialog.circular_progress.stop_animation() + try: + self._dialog.hide() + self._dialog.circular_progress.stop_animation() + except RuntimeError: + pass self._dialog = None - + def __del__(self): - """Cleanup when manager is destroyed""" - self.hide() \ No newline at end of file + # Only tear down the multiprocessing side here. Qt widgets are owned by + # the Qt parent/child tree and may already be destroyed during GC/shutdown; + # touching them from __del__ causes shiboken errors and native heap corruption. + if self._use_process and self.process is not None: + try: + if self.process.is_alive(): + if self.stop_event is not None: + self.stop_event.set() + self.process.join(timeout=2) + if self.process.is_alive(): + self.process.terminate() + except Exception: + pass \ No newline at end of file From e41429c9c5d99d1a3afc134d5a26272e47de6ecc Mon Sep 17 00:00:00 2001 From: nishikantmandal007 Date: Tue, 21 Apr 2026 19:29:00 +0530 Subject: [PATCH 164/225] fix: correct load unit conversion and revert loading_popup changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IRC/keyfile constants are in kN (e.g. 78.5 kN/m³, 4.905 kN/m²). ospgrillage expects SI units (N, m) — confirmed by the material density rho = 78.5 * kN / m**3 = 78500 N/m³. The * kN / m (or * kN / m**2) factor is the required conversion between the two, not a double-count. Without it every load would be 1000x too small. Changes: - beam_mag: restore * kN / m, fix denominator from 1.0 to m - footpath_mag: restore * kN / m**2, fix denominator from 1.0**2 to m**2 - railing_udl: restore * kN / m - deck_mag: fix denominator from 1.0**2 to m**2 (no numerical change) - overlay_mag: fix denominator from 1.0**2 to m**2 (no numerical change) - Update comments from kN/m to N/m to reflect actual SI values passed - Revert loading_popup.py changes as requested --- .../bridge_types/plate_girder/analyser.py | 10 ++++---- .../desktop/ui/dialogs/loading_popup.py | 24 ++++--------------- 2 files changed, 10 insertions(+), 24 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index aa121cad7..6c5012345 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -308,7 +308,7 @@ def create_self_weight_load(self, model=None, L=None): start_beam = 0 end_beam = L A_girder_m2 = self.longitudinal_props.A - beam_mag = A_girder_m2 * self.STEEL_UNIT_WEIGHT_kN_m3 * kN / 1.0 # kN/m + beam_mag = A_girder_m2 * self.STEEL_UNIT_WEIGHT_kN_m3 * kN / m # N/m DL_self_weight = og.create_load_case(name="girder self weight") @@ -370,7 +370,7 @@ def create_deck_load(self, model=None, slab_thickness_m: float | None = None, # ------------------------------------------------- # Load magnitude (UDL over area): t × ρ_concrete [kN/m²] # ------------------------------------------------- - deck_mag = slab_thickness_m * rho_c * kN / (1.0 ** 2) + deck_mag = slab_thickness_m * rho_c * kN / m**2 # N/m² # ------------------------------------------------- # Get geometry from load manager @@ -451,7 +451,7 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0, # L = L or self.L # w = w or self.w - overlay_mag = thickness_m * rho_wc * kN / (1.0 ** 2) + overlay_mag = thickness_m * rho_wc * kN / m**2 # N/m² # -------------------------------- # Get geometry from geometry module @@ -518,7 +518,7 @@ def create_footpath_load(self, model=None): # ------------------------------------------------- # Load magnitude — IRC 6:2017 Cl.206.1 (footway load) # ------------------------------------------------- - footpath_mag = IRC6_2017.cl_206_1_footway_load() * kN / (1.0 ** 2) + footpath_mag = IRC6_2017.cl_206_1_footway_load() * kN / m**2 # N/m² # ------------------------------------------------- # Create load case @@ -671,7 +671,7 @@ def create_railing_load(self, model=None, railing_load_kN_per_m: float | None = _mag = railing_load_kN_per_m else: _mag = IRC6_2017.cl_206_5_railing_load() * 9.81 / 1000.0 - railing_udl = _mag * kN / m + railing_udl = _mag * kN / m # N/m # ------------------------------------------------- # Create load case diff --git a/src/osdagbridge/desktop/ui/dialogs/loading_popup.py b/src/osdagbridge/desktop/ui/dialogs/loading_popup.py index 42319fa16..480918356 100644 --- a/src/osdagbridge/desktop/ui/dialogs/loading_popup.py +++ b/src/osdagbridge/desktop/ui/dialogs/loading_popup.py @@ -230,26 +230,12 @@ def hide(self): self.process = None self.stop_event = None else: - # Linux - close in-process dialog; tolerate already-deleted Qt C++ object. + # Linux - close in-process dialog if self._dialog is not None: - try: - self._dialog.hide() - self._dialog.circular_progress.stop_animation() - except RuntimeError: - pass + self._dialog.hide() + self._dialog.circular_progress.stop_animation() self._dialog = None def __del__(self): - # Only tear down the multiprocessing side here. Qt widgets are owned by - # the Qt parent/child tree and may already be destroyed during GC/shutdown; - # touching them from __del__ causes shiboken errors and native heap corruption. - if self._use_process and self.process is not None: - try: - if self.process.is_alive(): - if self.stop_event is not None: - self.stop_event.set() - self.process.join(timeout=2) - if self.process.is_alive(): - self.process.terminate() - except Exception: - pass \ No newline at end of file + """Cleanup when manager is destroyed""" + self.hide() From b536fd8d580711730b58962ac52467790fc4bbe2 Mon Sep 17 00:00:00 2001 From: nishikantmandal007 Date: Thu, 23 Apr 2026 10:41:56 +0530 Subject: [PATCH 165/225] refactor: move dead load calculations into bridge component files Each bridge component now owns its dead load logic. Input extraction (reading user inputs, unit conversions) lives in the component geometry file; the load intensity formula (area x density, thickness x density, IRC code defaults) also lives there. analyser.py imports and calls these functions instead of computing inline, and plategirderbridge.py delegates all parameter extraction to the components before calling the model. Components updated: - plate_girder/geometry.py: girder self-weight (A x rho) - deck/geometry.py: slab and wearing-course dead loads, input extraction - footpath/geometry.py: IRC 6:2017 Cl.206.1 footway load (new file) - crash_barrier/geometry.py: barrier line load + input extraction - railing/geometry.py: railing line load + input extraction - median/geometry.py: median line load --- .../super_structure/crash_barrier/geometry.py | 38 ++++++- .../super_structure/deck/geometry.py | 106 +++++++++++++++++- .../super_structure/footpath/__init__.py | 1 + .../super_structure/footpath/geometry.py | 15 +++ .../super_structure/median/geometry.py | 25 ++++- .../super_structure/plate_girder/geometry.py | 27 ++++- .../super_structure/railing/geometry.py | 37 ++++++ .../bridge_types/plate_girder/analyser.py | 74 ++++++------ .../plate_girder/plategirderbridge.py | 44 +++----- 9 files changed, 295 insertions(+), 72 deletions(-) create mode 100644 src/osdagbridge/core/bridge_components/super_structure/footpath/__init__.py create mode 100644 src/osdagbridge/core/bridge_components/super_structure/footpath/geometry.py diff --git a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/geometry.py b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/geometry.py index c8baa21bb..23d022d8e 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/geometry.py +++ b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/geometry.py @@ -284,4 +284,40 @@ def seg_area(R, theta): return { "type": "High Containment Crash Barrier (Fig 3)", "barrier_area": round(total, 3) - } \ No newline at end of file + } + + +# ─── Dead load ─────────────────────────────────────────────────────────────── + +# IRC 5:2015 / IS 875 Pt 2 — typical RCC edge barrier self-weight (Type P3/P4). +DEFAULT_CRASH_BARRIER_LOAD_kN_m = 6.54 + + +def crash_barrier_dead_load_kN_m(load_kN_per_m: float | None = None) -> float: + """Dead load intensity for a crash barrier (kN/m). + + Parameters + ---------- + load_kN_per_m : float, optional + User-specified barrier self-weight per unit length (kN/m). When + ``None`` the IRC 5:2015 default for an RCC edge barrier is used. + + Returns + ------- + float + Line load in kN/m. + """ + return load_kN_per_m if load_kN_per_m is not None else DEFAULT_CRASH_BARRIER_LOAD_kN_m + + +_KEY_CRASH_BARRIER_LOAD = "crash_barrier_load" + + +def crash_barrier_load_from_inputs(additional_inputs: dict) -> float | None: + """Extract user-specified crash barrier load (kN/m) from additional-inputs dict. + + Returns ``None`` when the key is absent, in which case + ``crash_barrier_dead_load_kN_m()`` will apply the IRC 5 default. + """ + val = additional_inputs.get(_KEY_CRASH_BARRIER_LOAD) + return float(val) if val is not None else None \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_components/super_structure/deck/geometry.py b/src/osdagbridge/core/bridge_components/super_structure/deck/geometry.py index 08868e092..6bff87da0 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/deck/geometry.py +++ b/src/osdagbridge/core/bridge_components/super_structure/deck/geometry.py @@ -1 +1,105 @@ -"""Deck geometry stub.""" +"""Deck slab and wearing course dead load calculations.""" +from osdagbridge.core.utils.codes.keyfile import DEFAULT_CONCRETE_DENSITY, DEFAULT_BITUMINOUS_DENSITY +from osdagbridge.core.utils.common import ( + KEY_DECK_THICKNESS, + KEY_WEARING_COAT_THICKNESS, + KEY_WEARING_COAT_DENSITY, +) + + +# IRC 6:2017 / IS 875 Pt 1 — wet reinforced concrete unit weight. +WET_CONCRETE_DENSITY_kN_m3 = DEFAULT_CONCRETE_DENSITY + +# IRC 6:2017 / IS 875 Pt 1 — bituminous wearing course unit weight. +BITUMINOUS_DENSITY_kN_m3 = DEFAULT_BITUMINOUS_DENSITY + + +def slab_dead_load_kN_m2( + thickness_m: float, + density_kN_m3: float = WET_CONCRETE_DENSITY_kN_m3, +) -> float: + """Dead load intensity for the concrete deck slab (kN/m²). + + Parameters + ---------- + thickness_m : float + Slab thickness in metres. + density_kN_m3 : float + Unit weight of concrete in kN/m³ (default: 25 kN/m³). + + Returns + ------- + float + Uniform patch load in kN/m². + """ + return thickness_m * density_kN_m3 + + +def wearing_course_dead_load_kN_m2( + thickness_m: float, + density_kN_m3: float = BITUMINOUS_DENSITY_kN_m3, +) -> float: + """Dead load intensity for the wearing course / overlay (kN/m²). + + Parameters + ---------- + thickness_m : float + Wearing course thickness in metres. + density_kN_m3 : float + Unit weight of the wearing course material in kN/m³ + (default: 24 kN/m³ for bituminous; use 25 kN/m³ for concrete overlays). + + Returns + ------- + float + Uniform patch load in kN/m². + """ + return thickness_m * density_kN_m3 + + +# ─── Input extraction ──────────────────────────────────────────────────────── + +def deck_thickness_from_inputs(additional_inputs: dict, default_mm: float) -> float: + """Extract deck slab thickness (m) from the additional-inputs dict. + + Parameters + ---------- + additional_inputs : dict + The bridge's additional-inputs dictionary (keyed by KEY_DECK_THICKNESS). + default_mm : float + Fallback thickness in mm when the key is absent. + + Returns + ------- + float + Deck slab thickness in metres. + """ + t_mm = float(additional_inputs.get(KEY_DECK_THICKNESS, default_mm)) + return t_mm / 1000.0 + + +def wearing_course_params_from_inputs( + additional_inputs: dict, + default_t_mm: float, + default_rho_kN_m3: float, +) -> tuple[float, float]: + """Extract wearing-course thickness and density from the additional-inputs dict. + + Parameters + ---------- + additional_inputs : dict + The bridge's additional-inputs dictionary. + default_t_mm : float + Fallback thickness in mm (e.g. 50 mm bituminous default). + default_rho_kN_m3 : float + Fallback unit weight in kN/m³ (e.g. 24 kN/m³ for bituminous). + + Returns + ------- + tuple[float, float] + ``(thickness_m, density_kN_m3)`` ready to pass to + ``create_wearing_course_load()``. + """ + t_mm = float(additional_inputs.get(KEY_WEARING_COAT_THICKNESS, default_t_mm)) + rho = float(additional_inputs.get(KEY_WEARING_COAT_DENSITY, default_rho_kN_m3)) + return t_mm / 1000.0, rho diff --git a/src/osdagbridge/core/bridge_components/super_structure/footpath/__init__.py b/src/osdagbridge/core/bridge_components/super_structure/footpath/__init__.py new file mode 100644 index 000000000..dd771d570 --- /dev/null +++ b/src/osdagbridge/core/bridge_components/super_structure/footpath/__init__.py @@ -0,0 +1 @@ +"""Footpath component package.""" diff --git a/src/osdagbridge/core/bridge_components/super_structure/footpath/geometry.py b/src/osdagbridge/core/bridge_components/super_structure/footpath/geometry.py new file mode 100644 index 000000000..fe32e70f7 --- /dev/null +++ b/src/osdagbridge/core/bridge_components/super_structure/footpath/geometry.py @@ -0,0 +1,15 @@ +"""Footpath dead load calculations per IRC 6:2017.""" +from osdagbridge.core.utils.codes.irc6_2017 import IRC6_2017 + + +def footpath_dead_load_kN_m2() -> float: + """Dead load intensity for the footpath / footway (kN/m²). + + Value is taken directly from IRC 6:2017 Cl.206.1 (footway / kerb load). + + Returns + ------- + float + Uniform patch load in kN/m². + """ + return IRC6_2017.cl_206_1_footway_load() diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/geometry.py b/src/osdagbridge/core/bridge_components/super_structure/median/geometry.py index 001a0ff75..4ab7bdbf8 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/geometry.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/geometry.py @@ -179,4 +179,27 @@ def median_metallic_barrier_area(barrier_type): "type": f"Median Metallic Barrier ({barrier_type})", "steel_area": post_area + beam_area, "kerb_area": kerb_area - } \ No newline at end of file + } + + +# ─── Dead load ─────────────────────────────────────────────────────────────── + +# Nominal self-weight for a raised-kerb / RCC median (IRC 5 / IS 875 Pt 2). +DEFAULT_MEDIAN_LOAD_kN_m = 4.00 + + +def median_dead_load_kN_m(load_kN_per_m: float | None = None) -> float: + """Dead load intensity for the median barrier (kN/m). + + Parameters + ---------- + load_kN_per_m : float, optional + User-specified median self-weight per unit length (kN/m). When + ``None`` the nominal default of 4.00 kN/m is used. + + Returns + ------- + float + Line load in kN/m. + """ + return load_kN_per_m if load_kN_per_m is not None else DEFAULT_MEDIAN_LOAD_kN_m \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/geometry.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/geometry.py index 3cd8cf904..e232384dd 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/geometry.py +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/geometry.py @@ -1,3 +1,28 @@ -"""Parametric girder geometry (stub).""" +"""Plate girder geometry and dead load calculations.""" +from osdagbridge.core.utils.codes.keyfile import DEFAULT_STEEL_DENSITY + + def make_girder(): return {} + + +# IS 875 (Part 1) — structural steel unit weight used for self-weight dead load. +STEEL_UNIT_WEIGHT_kN_m3 = DEFAULT_STEEL_DENSITY + + +def girder_self_weight_kN_m(area_m2: float, density_kN_m3: float = STEEL_UNIT_WEIGHT_kN_m3) -> float: + """Dead load intensity for a steel plate girder (kN/m). + + Parameters + ---------- + area_m2 : float + Cross-sectional area of the girder in m². + density_kN_m3 : float + Unit weight of steel in kN/m³ (default: IS 875 Pt.1 = 78.5 kN/m³). + + Returns + ------- + float + Line load in kN/m. + """ + return area_m2 * density_kN_m3 diff --git a/src/osdagbridge/core/bridge_components/super_structure/railing/geometry.py b/src/osdagbridge/core/bridge_components/super_structure/railing/geometry.py index 3644941cf..0cf60bd22 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/railing/geometry.py +++ b/src/osdagbridge/core/bridge_components/super_structure/railing/geometry.py @@ -115,3 +115,40 @@ def segment_area(R, theta): "barrier_area": round(total_area, 3) } + +# ─── Dead load ─────────────────────────────────────────────────────────────── + +from osdagbridge.core.utils.codes.irc6_2017 import IRC6_2017 # noqa: E402 + + +def railing_dead_load_kN_m(load_kN_per_m: float | None = None) -> float: + """Dead load intensity for a railing (kN/m). + + Parameters + ---------- + load_kN_per_m : float, optional + User-specified railing self-weight per unit length (kN/m). When + ``None`` the IRC 6:2017 Cl.206.5 default is used + (cl_206_5_railing_load() returns kg/m, converted here to kN/m). + + Returns + ------- + float + Line load in kN/m. + """ + if load_kN_per_m is not None: + return load_kN_per_m + return IRC6_2017.cl_206_5_railing_load() * 9.81 / 1000.0 + + +_KEY_RAILING_LOAD = "railing_load_value" + + +def railing_load_from_inputs(additional_inputs: dict) -> float | None: + """Extract user-specified railing load (kN/m) from the additional-inputs dict. + + Returns ``None`` when the key is absent, in which case + ``railing_dead_load_kN_m()`` will apply the IRC 6:2017 Cl.206.5 default. + """ + val = additional_inputs.get(_KEY_RAILING_LOAD) + return float(val) if val is not None else None diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 6c5012345..52e4a3049 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -2,13 +2,29 @@ # from math import sqrt, pi # import openseespy.opensees as ops from osdagbridge.core.utils.codes.irc6_2017 import IRC6_2017 -from osdagbridge.core.utils.codes.keyfile import ( - DEFAULT_STEEL_DENSITY, - DEFAULT_CONCRETE_DENSITY, - DEFAULT_BITUMINOUS_DENSITY, - LANE_REDUCTION_FACTORS, -) +from osdagbridge.core.utils.codes.keyfile import LANE_REDUCTION_FACTORS from osdagbridge.core.utils.common import * +from osdagbridge.core.bridge_components.super_structure.plate_girder.geometry import ( + girder_self_weight_kN_m, + STEEL_UNIT_WEIGHT_kN_m3, +) +from osdagbridge.core.bridge_components.super_structure.deck.geometry import ( + slab_dead_load_kN_m2, + wearing_course_dead_load_kN_m2, + WET_CONCRETE_DENSITY_kN_m3, +) +from osdagbridge.core.bridge_components.super_structure.footpath.geometry import ( + footpath_dead_load_kN_m2, +) +from osdagbridge.core.bridge_components.super_structure.crash_barrier.geometry import ( + crash_barrier_dead_load_kN_m, +) +from osdagbridge.core.bridge_components.super_structure.railing.geometry import ( + railing_dead_load_kN_m, +) +from osdagbridge.core.bridge_components.super_structure.median.geometry import ( + median_dead_load_kN_m, +) from osdagbridge.core.bridge_types.plate_girder.bridge_geometry import BridgeGeometry, CrossSectionLayout from osdagbridge.core.bridge_types.plate_girder.load_placement import LoadPlacementManager import warnings @@ -283,9 +299,6 @@ def plot_model(self): # Dead Load # ============================================================ - # IS 875 (Part 1) / keyfile.DEFAULT_STEEL_DENSITY — structural steel unit weight (kN/m³). - STEEL_UNIT_WEIGHT_kN_m3 = DEFAULT_STEEL_DENSITY - def create_self_weight_load(self, model=None, L=None): """Creates beam self weight distributed along length. @@ -308,7 +321,7 @@ def create_self_weight_load(self, model=None, L=None): start_beam = 0 end_beam = L A_girder_m2 = self.longitudinal_props.A - beam_mag = A_girder_m2 * self.STEEL_UNIT_WEIGHT_kN_m3 * kN / m # N/m + beam_mag = girder_self_weight_kN_m(A_girder_m2, STEEL_UNIT_WEIGHT_kN_m3) * kN / m # N/m DL_self_weight = og.create_load_case(name="girder self weight") @@ -331,9 +344,6 @@ def create_self_weight_load(self, model=None, L=None): model.add_load_case(DL_self_weight) return DL_self_weight - # IRC 6:2017 / IS 875 Pt 1 — reinforced (wet) concrete unit weight (keyfile.DEFAULT_CONCRETE_DENSITY). - WET_CONCRETE_DENSITY_kN_m3 = DEFAULT_CONCRETE_DENSITY - def create_deck_load(self, model=None, slab_thickness_m: float | None = None, concrete_density_kN_m3: float | None = None): """ @@ -365,12 +375,12 @@ def create_deck_load(self, model=None, slab_thickness_m: float | None = None, "wet-concrete load magnitude can be derived from t × ρ_concrete." ) - rho_c = self.WET_CONCRETE_DENSITY_kN_m3 if concrete_density_kN_m3 is None else concrete_density_kN_m3 + rho_c = WET_CONCRETE_DENSITY_kN_m3 if concrete_density_kN_m3 is None else concrete_density_kN_m3 # ------------------------------------------------- # Load magnitude (UDL over area): t × ρ_concrete [kN/m²] # ------------------------------------------------- - deck_mag = slab_thickness_m * rho_c * kN / m**2 # N/m² + deck_mag = slab_dead_load_kN_m2(slab_thickness_m, rho_c) * kN / m**2 # N/m² # ------------------------------------------------- # Get geometry from load manager @@ -446,12 +456,8 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0, "create_wearing_course_load requires thickness_m (in metres) " "so the overlay load magnitude can be derived from t × ρ." ) - rho_wc = DEFAULT_BITUMINOUS_DENSITY if density_kN_m3 is None else density_kN_m3 - - # L = L or self.L - # w = w or self.w - - overlay_mag = thickness_m * rho_wc * kN / m**2 # N/m² + overlay_kw = {} if density_kN_m3 is None else {"density_kN_m3": density_kN_m3} + overlay_mag = wearing_course_dead_load_kN_m2(thickness_m, **overlay_kw) * kN / m**2 # N/m² # -------------------------------- # Get geometry from geometry module @@ -494,11 +500,6 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0, return DL_overlay - # IRC 5:2015 / IS 875 Pt 2 — standard SIDL intensities used when the user - # has not provided explicit load inputs via the Additional Inputs dialog. - RCC_CRASH_BARRIER_LOAD_kN_per_m = 6.54 # typical RCC crash barrier (IRC 5 Type P3/P4) - MEDIAN_LOAD_kN_per_m = 4.00 # raised-kerb / RCC median (nominal weight) - def create_footpath_load(self, model=None): """ Creates footpath patch loads on both sides of the bridge. @@ -518,7 +519,7 @@ def create_footpath_load(self, model=None): # ------------------------------------------------- # Load magnitude — IRC 6:2017 Cl.206.1 (footway load) # ------------------------------------------------- - footpath_mag = IRC6_2017.cl_206_1_footway_load() * kN / m**2 # N/m² + footpath_mag = footpath_dead_load_kN_m2() * kN / m**2 # N/m² # ------------------------------------------------- # Create load case @@ -593,10 +594,9 @@ def create_crash_barrier_load(self, model=None, barrier_load_kN_per_m: float | N self.crash_barrier_load_case = None return None # ------------------------------------------------- - # Load magnitude — from input or code default + # Load magnitude — from input or IRC 5:2015 default (crash_barrier.geometry) # ------------------------------------------------- - _mag = barrier_load_kN_per_m if barrier_load_kN_per_m is not None else self.RCC_CRASH_BARRIER_LOAD_kN_per_m - barrier_load = _mag * kN / m + barrier_load = crash_barrier_dead_load_kN_m(barrier_load_kN_per_m) * kN / m # ------------------------------------------------- # Create load case @@ -664,14 +664,9 @@ def create_railing_load(self, model=None, railing_load_kN_per_m: float | None = return None # ------------------------------------------------- - # Load magnitude — from user input or IRC 6:2017 Cl.206.5 code value. - # cl_206_5_railing_load() returns kg/m; convert to kN/m via × 9.81/1000. + # Load magnitude — from user input or IRC 6:2017 Cl.206.5 default (railing.geometry) # ------------------------------------------------- - if railing_load_kN_per_m is not None: - _mag = railing_load_kN_per_m - else: - _mag = IRC6_2017.cl_206_5_railing_load() * 9.81 / 1000.0 - railing_udl = _mag * kN / m # N/m + railing_udl = railing_dead_load_kN_m(railing_load_kN_per_m) * kN / m # N/m # ------------------------------------------------- # Create load case @@ -733,10 +728,9 @@ def create_median_load(self, model=None, median_load_kN_per_m: float | None = No raise ValueError("Model is not available. Create model before adding loads.") # ------------------------------------------------- - # Load magnitude — from input or code default + # Load magnitude — from input or default (median.geometry) # ------------------------------------------------- - _mag = median_load_kN_per_m if median_load_kN_per_m is not None else self.MEDIAN_LOAD_kN_per_m - median_udl = _mag * kN / m + median_udl = median_dead_load_kN_m(median_load_kN_per_m) * kN / m # If there is no median component in the layout, skip creating median load if not self.layout.has_component("median"): diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 1fe529a2b..f3f9135bb 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -38,9 +38,6 @@ KEY_CROSS_BRACING, KEY_END_DIAPHRAGM, KEY_DECK_CONCRETE_GRADE_BASIC, - KEY_DECK_THICKNESS, - KEY_WEARING_COAT_THICKNESS, - KEY_WEARING_COAT_DENSITY, DEFAULT_CRASH_BARRIER_WIDTH, DEFAULT_RAILING_WIDTH, DEFAULT_GIRDER_SPACING, @@ -440,32 +437,23 @@ def add_dead_loads(self) -> None: DEFAULT_AI_WEARING_THICKNESS_MM as _DEFAULT_WC_THICKNESS_MM, DEFAULT_AI_WEARING_DENSITY_KN_PER_M3 as _DEFAULT_WC_DENSITY_KN_M3, ) + from osdagbridge.core.bridge_components.super_structure.deck.geometry import ( + deck_thickness_from_inputs, + wearing_course_params_from_inputs, + ) + from osdagbridge.core.bridge_components.super_structure.crash_barrier.geometry import ( + crash_barrier_load_from_inputs, + ) + from osdagbridge.core.bridge_components.super_structure.railing.geometry import ( + railing_load_from_inputs, + ) - # Deck thickness is a user input (mm); fall back to the initial-sizing - # default so the analysis can still run without the Additional Inputs - # dialog having been opened. - deck_t_mm = float(self.additional_inputs.get( - KEY_DECK_THICKNESS, _DEFAULT_DECK_THICKNESS_MM - )) - deck_t_m = deck_t_mm / 1000.0 - - # Wearing-course thickness + density from Additional Inputs, with - # sensible fallbacks (50 mm / 24 kN/m³ bituminous per AI_DEFAULTS). - wc_t_mm = float(self.additional_inputs.get( - KEY_WEARING_COAT_THICKNESS, _DEFAULT_WC_THICKNESS_MM - )) - wc_rho = float(self.additional_inputs.get( - KEY_WEARING_COAT_DENSITY, _DEFAULT_WC_DENSITY_KN_M3 - )) - wc_t_m = wc_t_mm / 1000.0 - - # Crash barrier and railing loads: use value from Additional Inputs when - # the user has explicitly set it; otherwise the analyser falls back to the - # IRC 5 code defaults stored as class constants. - _cb = self.additional_inputs.get("crash_barrier_load") - barrier_load_kN_m = float(_cb) if _cb is not None else None - _rl = self.additional_inputs.get("railing_load_value") - railing_load_kN_m = float(_rl) if _rl is not None else None + deck_t_m = deck_thickness_from_inputs(self.additional_inputs, _DEFAULT_DECK_THICKNESS_MM) + wc_t_m, wc_rho = wearing_course_params_from_inputs( + self.additional_inputs, _DEFAULT_WC_THICKNESS_MM, _DEFAULT_WC_DENSITY_KN_M3 + ) + barrier_load_kN_m = crash_barrier_load_from_inputs(self.additional_inputs) + railing_load_kN_m = railing_load_from_inputs(self.additional_inputs) m = self.grillage_model m.create_self_weight_load() From 2b9b9cc097b301a3f945f9c1342da27fbe6d631c Mon Sep 17 00:00:00 2001 From: nishikantmandal007 Date: Fri, 24 Apr 2026 21:15:50 +0530 Subject: [PATCH 166/225] 1. Moved the deadload functional imports on top of file 2. Loading popup in clean state --- .../plate_girder/plategirderbridge.py | 35 +++++++++---------- .../desktop/ui/dialogs/loading_popup.py | 4 +-- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index f3f9135bb..c7b09dd97 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -55,6 +55,23 @@ KEY_UTIL_LONG_TRANS_SHEAR, KEY_UTIL_STRESS_LIMITATION, ) +from osdagbridge.core.bridge_types.plate_girder.initial_sizing import ( + DEFAULT_DECK_THICKNESS as _DEFAULT_DECK_THICKNESS_MM, +) +from osdagbridge.core.bridge_types.plate_girder.defaults import ( + DEFAULT_AI_WEARING_THICKNESS_MM as _DEFAULT_WC_THICKNESS_MM, + DEFAULT_AI_WEARING_DENSITY_KN_PER_M3 as _DEFAULT_WC_DENSITY_KN_M3, +) +from osdagbridge.core.bridge_components.super_structure.deck.geometry import ( + deck_thickness_from_inputs, + wearing_course_params_from_inputs, +) +from osdagbridge.core.bridge_components.super_structure.crash_barrier.geometry import ( + crash_barrier_load_from_inputs, +) +from osdagbridge.core.bridge_components.super_structure.railing.geometry import ( + railing_load_from_inputs, +) # Default median width (m) used when user enables median but no additional-input # width has been supplied yet. @@ -430,24 +447,6 @@ def add_dead_loads(self) -> None: Must be called after setup_grillage() has built and registered the model. """ - from osdagbridge.core.bridge_types.plate_girder.initial_sizing import ( - DEFAULT_DECK_THICKNESS as _DEFAULT_DECK_THICKNESS_MM, - ) - from osdagbridge.core.bridge_types.plate_girder.defaults import ( - DEFAULT_AI_WEARING_THICKNESS_MM as _DEFAULT_WC_THICKNESS_MM, - DEFAULT_AI_WEARING_DENSITY_KN_PER_M3 as _DEFAULT_WC_DENSITY_KN_M3, - ) - from osdagbridge.core.bridge_components.super_structure.deck.geometry import ( - deck_thickness_from_inputs, - wearing_course_params_from_inputs, - ) - from osdagbridge.core.bridge_components.super_structure.crash_barrier.geometry import ( - crash_barrier_load_from_inputs, - ) - from osdagbridge.core.bridge_components.super_structure.railing.geometry import ( - railing_load_from_inputs, - ) - deck_t_m = deck_thickness_from_inputs(self.additional_inputs, _DEFAULT_DECK_THICKNESS_MM) wc_t_m, wc_rho = wearing_course_params_from_inputs( self.additional_inputs, _DEFAULT_WC_THICKNESS_MM, _DEFAULT_WC_DENSITY_KN_M3 diff --git a/src/osdagbridge/desktop/ui/dialogs/loading_popup.py b/src/osdagbridge/desktop/ui/dialogs/loading_popup.py index 480918356..30f1c7225 100644 --- a/src/osdagbridge/desktop/ui/dialogs/loading_popup.py +++ b/src/osdagbridge/desktop/ui/dialogs/loading_popup.py @@ -235,7 +235,7 @@ def hide(self): self._dialog.hide() self._dialog.circular_progress.stop_animation() self._dialog = None - + def __del__(self): """Cleanup when manager is destroyed""" - self.hide() + self.hide() \ No newline at end of file From 8721aaaeb47feb06b8907772e450b60a62b5797a Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Fri, 24 Apr 2026 01:08:42 +0530 Subject: [PATCH 167/225] Change map provider and overlay correct border of India --- .../data/project_location/india-osm.geojson | 7 ++ .../desktop/ui/dialogs/project_location.py | 18 ++- .../desktop/ui/widgets/native_map.py | 104 +++++++++++++++++- 3 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 src/osdagbridge/core/data/project_location/india-osm.geojson diff --git a/src/osdagbridge/core/data/project_location/india-osm.geojson b/src/osdagbridge/core/data/project_location/india-osm.geojson new file mode 100644 index 000000000..893707950 --- /dev/null +++ b/src/osdagbridge/core/data/project_location/india-osm.geojson @@ -0,0 +1,7 @@ +{ +"type": "FeatureCollection", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "name": "India", "admin_level": 2 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 77.9240974, 35.4972106 ], [ 77.9272354, 35.5021932 ], [ 77.9278654, 35.5037834 ], [ 77.9288255, 35.5057036 ], [ 77.9294856, 35.5076538 ], [ 77.9312258, 35.5110742 ], [ 77.9302657, 35.5120643 ], [ 77.9308658, 35.5137144 ], [ 77.9314658, 35.5160547 ], [ 77.9323359, 35.5173748 ], [ 77.9325759, 35.518635 ], [ 77.932816, 35.5205852 ], [ 77.9338061, 35.5224453 ], [ 77.9353362, 35.5239455 ], [ 77.9366564, 35.5248456 ], [ 77.9351262, 35.5267958 ], [ 77.9339261, 35.5278159 ], [ 77.9325759, 35.5279359 ], [ 77.9308473, 35.5281532 ], [ 77.9311023, 35.531312 ], [ 77.9311058, 35.5329164 ], [ 77.9316321, 35.5346082 ], [ 77.9330643, 35.5379632 ], [ 77.9325159, 35.538527 ], [ 77.9283455, 35.5412573 ], [ 77.9287955, 35.5435375 ], [ 77.9295156, 35.5457278 ], [ 77.9307457, 35.548278 ], [ 77.9320359, 35.5505283 ], [ 77.933566, 35.5525085 ], [ 77.9348862, 35.5546987 ], [ 77.9378503, 35.559317 ], [ 77.9391066, 35.5589173 ], [ 77.940877, 35.5586317 ], [ 77.9423046, 35.5580036 ], [ 77.9437894, 35.5568043 ], [ 77.9451029, 35.555548 ], [ 77.9461879, 35.5546914 ], [ 77.9484151, 35.5522929 ], [ 77.9497857, 35.5519502 ], [ 77.9506423, 35.5520644 ], [ 77.9512133, 35.55235 ], [ 77.9519557, 35.5533208 ], [ 77.953155, 35.5541774 ], [ 77.9540687, 35.5541774 ], [ 77.9553092, 35.5537227 ], [ 77.9575067, 35.5558155 ], [ 77.9599919, 35.5590855 ], [ 77.9607767, 35.5605243 ], [ 77.9628632, 35.5634573 ], [ 77.9648619, 35.5651705 ], [ 77.9662325, 35.5660842 ], [ 77.9666894, 35.5675119 ], [ 77.9672604, 35.5681972 ], [ 77.9684026, 35.5683114 ], [ 77.9728963, 35.5685988 ], [ 77.9742864, 35.5690159 ], [ 77.9758989, 35.5702948 ], [ 77.9776227, 35.5721854 ], [ 77.9782343, 35.5708786 ], [ 77.9789294, 35.5697387 ], [ 77.9805419, 35.5678204 ], [ 77.9818487, 35.5669029 ], [ 77.9844621, 35.5656518 ], [ 77.9861858, 35.5645675 ], [ 77.9874091, 35.5640392 ], [ 77.9883544, 35.5633442 ], [ 77.9887159, 35.561676 ], [ 77.9891607, 35.5612034 ], [ 77.9899114, 35.5606473 ], [ 77.9907454, 35.5602303 ], [ 77.9944432, 35.5599523 ], [ 77.9960279, 35.5592294 ], [ 77.9978907, 35.5603415 ], [ 77.999809, 35.5627325 ], [ 78.0009489, 35.5643173 ], [ 78.0029229, 35.5672365 ], [ 78.0036458, 35.5676536 ], [ 78.0043964, 35.5685154 ], [ 78.0046745, 35.5693773 ], [ 78.0054807, 35.5694607 ], [ 78.0066206, 35.5693495 ], [ 78.0078161, 35.5689047 ], [ 78.0090672, 35.5699056 ], [ 78.0100959, 35.5700446 ], [ 78.0114861, 35.5705728 ], [ 78.0122645, 35.5711567 ], [ 78.0155276, 35.5699655 ], [ 78.019668, 35.5669717 ], [ 78.0209598, 35.5644967 ], [ 78.0224262, 35.5642328 ], [ 78.0257112, 35.5669311 ], [ 78.0266497, 35.5679283 ], [ 78.0285562, 35.5690429 ], [ 78.0323397, 35.5723278 ], [ 78.0322811, 35.5737063 ], [ 78.0323104, 35.5750848 ], [ 78.0320171, 35.576082 ], [ 78.0315478, 35.5767566 ], [ 78.0309612, 35.5773432 ], [ 78.030228, 35.579543 ], [ 78.0294654, 35.5803349 ], [ 78.027471, 35.5819187 ], [ 78.0279488, 35.5827052 ], [ 78.033618, 35.5841702 ], [ 78.0370577, 35.5853805 ], [ 78.04037, 35.5868456 ], [ 78.0418351, 35.5860175 ], [ 78.0445741, 35.5853168 ], [ 78.0455933, 35.5830237 ], [ 78.0474405, 35.5817497 ], [ 78.0476316, 35.5799661 ], [ 78.0482686, 35.5782463 ], [ 78.0515172, 35.5772908 ], [ 78.0536193, 35.5764627 ], [ 78.0559761, 35.5748066 ], [ 78.0568042, 35.5732141 ], [ 78.0582056, 35.5724497 ], [ 78.0599254, 35.5725771 ], [ 78.0619638, 35.5726408 ], [ 78.0650213, 35.5725771 ], [ 78.0661042, 35.5720675 ], [ 78.0681425, 35.570284 ], [ 78.069735, 35.5678634 ], [ 78.0705631, 35.5657614 ], [ 78.0714549, 35.5651244 ], [ 78.0729836, 35.56436 ], [ 78.0754042, 35.5616847 ], [ 78.0766144, 35.5599648 ], [ 78.0766144, 35.5585635 ], [ 78.0762959, 35.5569073 ], [ 78.0775062, 35.5544868 ], [ 78.0761685, 35.5528943 ], [ 78.0752768, 35.5513655 ], [ 78.0752131, 35.5501553 ], [ 78.0747672, 35.5486902 ], [ 78.073748, 35.5469066 ], [ 78.0725377, 35.5444861 ], [ 78.073458, 35.5438512 ], [ 78.0749448, 35.5430251 ], [ 78.0770099, 35.542323 ], [ 78.0787033, 35.5414144 ], [ 78.0800663, 35.5404231 ], [ 78.0821727, 35.5396797 ], [ 78.08399, 35.539721 ], [ 78.0851877, 35.5395558 ], [ 78.0860551, 35.5389362 ], [ 78.0868398, 35.537119 ], [ 78.0876246, 35.5363342 ], [ 78.0892353, 35.5340626 ], [ 78.0905157, 35.5334018 ], [ 78.092746, 35.5361277 ], [ 78.0950176, 35.5385232 ], [ 78.0941503, 35.5395971 ], [ 78.0926634, 35.5410426 ], [ 78.0918374, 35.5419513 ], [ 78.0943981, 35.5454207 ], [ 78.0952654, 35.5471966 ], [ 78.0968349, 35.5485183 ], [ 78.1030736, 35.5560904 ], [ 78.1044871, 35.555472 ], [ 78.1061657, 35.5551186 ], [ 78.1074025, 35.5543235 ], [ 78.1084626, 35.5528216 ], [ 78.1098762, 35.5512314 ], [ 78.1128799, 35.5497296 ], [ 78.1140284, 35.5497296 ], [ 78.116237, 35.5511431 ], [ 78.1187107, 35.5517615 ], [ 78.1218028, 35.5501713 ], [ 78.1246298, 35.5476976 ], [ 78.1297226, 35.5455394 ], [ 78.1325627, 35.5464731 ], [ 78.1347803, 35.5466676 ], [ 78.1388264, 35.5496633 ], [ 78.1401103, 35.5488074 ], [ 78.142717, 35.5481849 ], [ 78.1462184, 35.5495077 ], [ 78.1487862, 35.5511028 ], [ 78.154194, 35.5507138 ], [ 78.1571897, 35.5509472 ], [ 78.1590572, 35.5527368 ], [ 78.1594073, 35.5554213 ], [ 78.1609635, 35.5597398 ], [ 78.1620918, 35.563358 ], [ 78.1622474, 35.5688825 ], [ 78.1627066, 35.5743779 ], [ 78.1614698, 35.5753497 ], [ 78.1580243, 35.5817989 ], [ 78.1600562, 35.5853327 ], [ 78.1616465, 35.587718 ], [ 78.1612931, 35.5901917 ], [ 78.1617348, 35.5929304 ], [ 78.1642085, 35.5955807 ], [ 78.1680073, 35.597701 ], [ 78.1702159, 35.5981427 ], [ 78.1724246, 35.5981427 ], [ 78.1755167, 35.597436 ], [ 78.1794038, 35.5999096 ], [ 78.1812591, 35.6007931 ], [ 78.1811707, 35.602295 ], [ 78.1806407, 35.6046803 ], [ 78.1803756, 35.6066239 ], [ 78.1788738, 35.607684 ], [ 78.1762588, 35.6085518 ], [ 78.1745959, 35.6117263 ], [ 78.172933, 35.6167149 ], [ 78.1741424, 35.617773 ], [ 78.1767123, 35.6209476 ], [ 78.1774681, 35.6229128 ], [ 78.1798868, 35.6271455 ], [ 78.1786774, 35.6286572 ], [ 78.1783751, 35.6298665 ], [ 78.180038, 35.6344016 ], [ 78.1817008, 35.6350063 ], [ 78.184573, 35.6365179 ], [ 78.1874452, 35.6384831 ], [ 78.1912244, 35.6381808 ], [ 78.1954571, 35.6389366 ], [ 78.1974223, 35.6398436 ], [ 78.1959107, 35.6416577 ], [ 78.1942478, 35.642867 ], [ 78.1924338, 35.6457392 ], [ 78.1937943, 35.6475532 ], [ 78.1960618, 35.6496696 ], [ 78.1957595, 35.6523906 ], [ 78.194399, 35.6532976 ], [ 78.1945501, 35.6548093 ], [ 78.194399, 35.658135 ], [ 78.1915268, 35.659949 ], [ 78.1889569, 35.6620654 ], [ 78.1853289, 35.6643329 ], [ 78.1817008, 35.6673563 ], [ 78.1859335, 35.6752171 ], [ 78.1906198, 35.6735542 ], [ 78.1933408, 35.6729495 ], [ 78.195306, 35.6712867 ], [ 78.1992364, 35.6700773 ], [ 78.2045273, 35.6693215 ], [ 78.2083065, 35.6676586 ], [ 78.2084576, 35.6696238 ], [ 78.2093646, 35.6740077 ], [ 78.2125392, 35.6762752 ], [ 78.2143532, 35.6779381 ], [ 78.2193418, 35.679601 ], [ 78.2196441, 35.6803568 ], [ 78.2194929, 35.6847407 ], [ 78.2217605, 35.6874617 ], [ 78.2237257, 35.6891246 ], [ 78.2252373, 35.6919968 ], [ 78.2276703, 35.6952004 ], [ 78.2285877, 35.6980442 ], [ 78.2323947, 35.6998331 ], [ 78.2360183, 35.7033191 ], [ 78.23822, 35.7046492 ], [ 78.2401006, 35.7062087 ], [ 78.2404675, 35.7100617 ], [ 78.2417518, 35.7122175 ], [ 78.2431279, 35.7156117 ], [ 78.2436324, 35.7252899 ], [ 78.2457962, 35.7258585 ], [ 78.2510871, 35.7282772 ], [ 78.2607619, 35.7260097 ], [ 78.2668087, 35.7260097 ], [ 78.2731577, 35.7261608 ], [ 78.2824707, 35.7239067 ], [ 78.2866868, 35.7271133 ], [ 78.288587, 35.7269352 ], [ 78.2917937, 35.7250349 ], [ 78.2947034, 35.7240848 ], [ 78.2974944, 35.7254506 ], [ 78.2998103, 35.7261038 ], [ 78.3018887, 35.7269945 ], [ 78.3043828, 35.726757 ], [ 78.3068174, 35.7261038 ], [ 78.3096084, 35.7234316 ], [ 78.3137652, 35.7217095 ], [ 78.3179813, 35.7207594 ], [ 78.3195253, 35.7210563 ], [ 78.3212293, 35.7238933 ], [ 78.3250085, 35.7238933 ], [ 78.3281831, 35.7234398 ], [ 78.3319623, 35.7216258 ], [ 78.3349195, 35.7209121 ], [ 78.3402916, 35.7198221 ], [ 78.3423159, 35.7199 ], [ 78.3439769, 35.7210678 ], [ 78.3468057, 35.7228326 ], [ 78.3499459, 35.7234814 ], [ 78.3550066, 35.7228585 ], [ 78.3561492, 35.7234398 ], [ 78.3593238, 35.7240445 ], [ 78.3653705, 35.7246492 ], [ 78.3668822, 35.726312 ], [ 78.3686962, 35.7284284 ], [ 78.3708126, 35.7288819 ], [ 78.3729289, 35.7287307 ], [ 78.3745918, 35.7279749 ], [ 78.3767081, 35.7284284 ], [ 78.3786733, 35.7293354 ], [ 78.3815455, 35.7293354 ], [ 78.3848712, 35.7284284 ], [ 78.3884993, 35.7273702 ], [ 78.3946972, 35.7314517 ], [ 78.4010463, 35.7311494 ], [ 78.4087559, 35.7306959 ], [ 78.4104187, 35.7322076 ], [ 78.4119304, 35.7349286 ], [ 78.4146514, 35.7384055 ], [ 78.4167678, 35.7417312 ], [ 78.4182795, 35.7465686 ], [ 78.4190353, 35.7517083 ], [ 78.4190353, 35.7557899 ], [ 78.4168549, 35.7608704 ], [ 78.4171939, 35.7623959 ], [ 78.4211347, 35.767396 ], [ 78.4232957, 35.7690062 ], [ 78.4266009, 35.7705317 ], [ 78.4298637, 35.7713368 ], [ 78.4316858, 35.7721843 ], [ 78.4365709, 35.777407 ], [ 78.4383849, 35.7795233 ], [ 78.4405012, 35.7807327 ], [ 78.4435246, 35.7802792 ], [ 78.4454898, 35.7787675 ], [ 78.448362, 35.7787675 ], [ 78.4516877, 35.7786163 ], [ 78.4568274, 35.7768023 ], [ 78.4603043, 35.7749883 ], [ 78.461816, 35.7719649 ], [ 78.4613625, 35.7690927 ], [ 78.462723, 35.7644065 ], [ 78.4681651, 35.763953 ], [ 78.4696768, 35.7650111 ], [ 78.4742118, 35.7678833 ], [ 78.4781422, 35.7687903 ], [ 78.4825261, 35.7668252 ], [ 78.487817, 35.7681857 ], [ 78.4940149, 35.7692439 ], [ 78.5005151, 35.7706044 ], [ 78.5053525, 35.771209 ], [ 78.5101899, 35.7701509 ], [ 78.5151785, 35.7695462 ], [ 78.5182018, 35.7654646 ], [ 78.5225857, 35.7627436 ], [ 78.5262138, 35.7624413 ], [ 78.5301441, 35.7630459 ], [ 78.5355862, 35.7634995 ], [ 78.5390631, 35.7671275 ], [ 78.543447, 35.7701509 ], [ 78.5458657, 35.771209 ], [ 78.5537264, 35.7724184 ], [ 78.5587882, 35.7733295 ], [ 78.5617383, 35.7754418 ], [ 78.5662978, 35.7813154 ], [ 78.5664939, 35.7830527 ], [ 78.568182, 35.7849223 ], [ 78.5714056, 35.7859539 ], [ 78.5741135, 35.7871574 ], [ 78.5749731, 35.7916275 ], [ 78.5758757, 35.7953669 ], [ 78.5767354, 35.7972152 ], [ 78.5797871, 35.7990204 ], [ 78.5861914, 35.8021151 ], [ 78.5898449, 35.8034905 ], [ 78.5946159, 35.8059835 ], [ 78.5975927, 35.807087 ], [ 78.6023517, 35.81137 ], [ 78.6075865, 35.8151771 ], [ 78.6116316, 35.8151771 ], [ 78.618532, 35.815891 ], [ 78.6259083, 35.8151771 ], [ 78.6313811, 35.8139874 ], [ 78.6401851, 35.8168428 ], [ 78.649227, 35.8194602 ], [ 78.6566034, 35.8220776 ], [ 78.6585069, 35.8249329 ], [ 78.6601726, 35.829216 ], [ 78.6601726, 35.8323093 ], [ 78.6642176, 35.8351646 ], [ 78.6673109, 35.8387338 ], [ 78.6673109, 35.8430168 ], [ 78.6682627, 35.8461101 ], [ 78.6734975, 35.8520588 ], [ 78.676115, 35.8530106 ], [ 78.6815877, 35.851107 ], [ 78.6851569, 35.8503932 ], [ 78.6894399, 35.851107 ], [ 78.6946747, 35.8496793 ], [ 78.6982439, 35.8525347 ], [ 78.7015752, 35.8565798 ], [ 78.7072859, 35.8568177 ], [ 78.7127499, 35.8572943 ], [ 78.7169267, 35.8581736 ], [ 78.7217629, 35.8630099 ], [ 78.7250603, 35.8630099 ], [ 78.7305561, 35.8621305 ], [ 78.7356121, 35.8612512 ], [ 78.7404484, 35.8614711 ], [ 78.7455044, 35.8594926 ], [ 78.7503407, 35.8597124 ], [ 78.7573752, 35.8630099 ], [ 78.7628709, 35.8634495 ], [ 78.7685865, 35.86279 ], [ 78.7734227, 35.8638892 ], [ 78.7784788, 35.8658676 ], [ 78.783315, 35.866747 ], [ 78.7881512, 35.8682858 ], [ 78.7932073, 35.8693849 ], [ 78.8002418, 35.8698246 ], [ 78.8015608, 35.8733418 ], [ 78.8035393, 35.8770789 ], [ 78.8072764, 35.8790574 ], [ 78.8110135, 35.8803764 ], [ 78.8138712, 35.8860919 ], [ 78.8165092, 35.8904885 ], [ 78.8277205, 35.9085145 ], [ 78.8288196, 35.9122516 ], [ 78.8272808, 35.9195059 ], [ 78.8285998, 35.9241223 ], [ 78.8329963, 35.9289586 ], [ 78.8345351, 35.9377517 ], [ 78.836074, 35.9419285 ], [ 78.8380524, 35.9436871 ], [ 78.8420093, 35.9465449 ], [ 78.8450869, 35.9480837 ], [ 78.8466257, 35.9507216 ], [ 78.8483844, 35.9559975 ], [ 78.8503628, 35.9632519 ], [ 78.8510223, 35.9663295 ], [ 78.8536603, 35.9707261 ], [ 78.8558586, 35.9742433 ], [ 78.8626733, 35.9724847 ], [ 78.8657509, 35.9705062 ], [ 78.8705871, 35.9691873 ], [ 78.8756432, 35.9691873 ], [ 78.8787208, 35.966989 ], [ 78.8815785, 35.9654502 ], [ 78.884876, 35.9617131 ], [ 78.8868544, 35.9586355 ], [ 78.89257, 35.9559975 ], [ 78.8965269, 35.9540191 ], [ 78.901583, 35.9527001 ], [ 78.9072985, 35.9516009 ], [ 78.9114753, 35.9518208 ], [ 78.9141132, 35.9527001 ], [ 78.9174107, 35.9513811 ], [ 78.9200486, 35.9500621 ], [ 78.9222469, 35.9478638 ], [ 78.9264237, 35.9452259 ], [ 78.9310401, 35.9467647 ], [ 78.9358763, 35.9478638 ], [ 78.9407125, 35.9494026 ], [ 78.9446695, 35.9461052 ], [ 78.9479669, 35.9447862 ], [ 78.9523635, 35.9467647 ], [ 78.9547816, 35.9485233 ], [ 78.9574195, 35.9447862 ], [ 78.960717, 35.9406095 ], [ 78.9635747, 35.9370922 ], [ 78.9659929, 35.9353336 ], [ 78.9723794, 35.9340761 ], [ 78.9745617, 35.9375868 ], [ 78.9764594, 35.9397691 ], [ 78.9810137, 35.9332222 ], [ 78.983799, 35.9313767 ], [ 78.9884154, 35.9291784 ], [ 78.991493, 35.9291784 ], [ 78.9932517, 35.9307172 ], [ 78.9943508, 35.9331353 ], [ 78.9969888, 35.933575 ], [ 78.9994069, 35.9311568 ], [ 79.0022646, 35.9298379 ], [ 79.0035836, 35.9282991 ], [ 79.0051224, 35.9280792 ], [ 79.0068811, 35.9300577 ], [ 79.0103983, 35.9313767 ], [ 79.0114975, 35.9311568 ], [ 79.0145751, 35.9267603 ], [ 79.0176527, 35.9250016 ], [ 79.0194113, 35.9223637 ], [ 79.0231484, 35.9179671 ], [ 79.0257863, 35.9151093 ], [ 79.0284243, 35.91423 ], [ 79.0341398, 35.9166481 ], [ 79.0361183, 35.9177473 ], [ 79.0400752, 35.9184068 ], [ 79.0418339, 35.9217042 ], [ 79.0424933, 35.9252215 ], [ 79.0424933, 35.9278594 ], [ 79.0449115, 35.9304974 ], [ 79.0479891, 35.9331353 ], [ 79.0515063, 35.9355534 ], [ 79.0543641, 35.938631 ], [ 79.0572219, 35.9414888 ], [ 79.0618383, 35.9417086 ], [ 79.0653556, 35.9432474 ], [ 79.0701918, 35.9445664 ], [ 79.0730496, 35.9465449 ], [ 79.077666, 35.9469845 ], [ 79.0838212, 35.9445664 ], [ 79.086679, 35.9450061 ], [ 79.0893169, 35.9465449 ], [ 79.0912954, 35.9474242 ], [ 79.0959118, 35.9465449 ], [ 79.0974506, 35.9456656 ], [ 79.0987696, 35.9452259 ], [ 79.1011877, 35.9452259 ], [ 79.1044851, 35.9454457 ], [ 79.1071231, 35.9454457 ], [ 79.1102007, 35.9458854 ], [ 79.1126188, 35.9467647 ], [ 79.1165757, 35.9452259 ], [ 79.1185542, 35.9441267 ], [ 79.1209723, 35.9441267 ], [ 79.1233904, 35.9447862 ], [ 79.1288861, 35.9430276 ], [ 79.1306448, 35.9423681 ], [ 79.132843, 35.9434673 ], [ 79.1361405, 35.9445664 ], [ 79.1407569, 35.9443466 ], [ 79.1451535, 35.9447862 ], [ 79.1499897, 35.9441267 ], [ 79.1559251, 35.9434673 ], [ 79.1620803, 35.9443466 ], [ 79.1644984, 35.9447862 ], [ 79.1666967, 35.9432474 ], [ 79.1706536, 35.9397302 ], [ 79.1750502, 35.9379715 ], [ 79.1816451, 35.9364327 ], [ 79.1862615, 35.9331353 ], [ 79.1913175, 35.932256 ], [ 79.1939555, 35.9324758 ], [ 79.1968133, 35.9333551 ], [ 79.1985719, 35.9326956 ], [ 79.2018693, 35.932256 ], [ 79.2062659, 35.932256 ], [ 79.2150591, 35.9313767 ], [ 79.2201151, 35.9302775 ], [ 79.225391, 35.9282991 ], [ 79.2313264, 35.9291784 ], [ 79.2350635, 35.929618 ], [ 79.2398997, 35.9304974 ], [ 79.2695767, 35.9274197 ], [ 79.2726543, 35.9289586 ], [ 79.2772707, 35.9313767 ], [ 79.2825466, 35.9340146 ], [ 79.2944173, 35.938631 ], [ 79.2974949, 35.9408293 ], [ 79.3001329, 35.9445664 ], [ 79.3045295, 35.9516009 ], [ 79.3080467, 35.9544587 ], [ 79.3131028, 35.9568768 ], [ 79.320577, 35.9570967 ], [ 79.3254132, 35.9584156 ], [ 79.3306891, 35.9612734 ], [ 79.3331072, 35.9628122 ], [ 79.3383831, 35.9634717 ], [ 79.3390426, 35.9658898 ], [ 79.3392624, 35.9685278 ], [ 79.337284, 35.9713855 ], [ 79.3361848, 35.9766614 ], [ 79.338603, 35.9792994 ], [ 79.3403616, 35.983696 ], [ 79.3434392, 35.9878727 ], [ 79.3476159, 35.9867736 ], [ 79.3504737, 35.9861141 ], [ 79.3542108, 35.9863339 ], [ 79.3619048, 35.9858943 ], [ 79.3667411, 35.9856744 ], [ 79.3700385, 35.9847951 ], [ 79.3746549, 35.9830365 ], [ 79.3805903, 35.9799589 ], [ 79.386086, 35.9782002 ], [ 79.3920214, 35.9762218 ], [ 79.4069698, 35.973364 ], [ 79.4111465, 35.9740235 ], [ 79.4146638, 35.9751226 ], [ 79.4195, 35.9749028 ], [ 79.4252156, 35.9735838 ], [ 79.4324699, 35.9727045 ], [ 79.4369169, 35.9722297 ], [ 79.4388712, 35.9702755 ], [ 79.4417273, 35.9683213 ], [ 79.4445835, 35.9653148 ], [ 79.4429299, 35.9620076 ], [ 79.4414267, 35.9593018 ], [ 79.4403744, 35.9565959 ], [ 79.4396228, 35.9544914 ], [ 79.4396228, 35.9517855 ], [ 79.4412764, 35.9486287 ], [ 79.4396228, 35.9430667 ], [ 79.4394725, 35.9409622 ], [ 79.4400738, 35.9378053 ], [ 79.4396228, 35.9341975 ], [ 79.4412764, 35.9329949 ], [ 79.4447338, 35.931642 ], [ 79.4497336, 35.9275052 ], [ 79.4542687, 35.9253948 ], [ 79.4563342, 35.9240926 ], [ 79.457367, 35.9222516 ], [ 79.4587589, 35.9186594 ], [ 79.4605999, 35.9156061 ], [ 79.4638329, 35.9141243 ], [ 79.4641023, 35.9116996 ], [ 79.4639676, 35.9084217 ], [ 79.4643268, 35.9051888 ], [ 79.466078, 35.9028538 ], [ 79.468368, 35.9003393 ], [ 79.4666168, 35.8973309 ], [ 79.4645767, 35.8946621 ], [ 79.464727, 35.8912046 ], [ 79.4644264, 35.8886491 ], [ 79.4620212, 35.8881981 ], [ 79.4593153, 35.8878975 ], [ 79.4552566, 35.8845903 ], [ 79.4522501, 35.8827864 ], [ 79.4545049, 35.8769238 ], [ 79.4555572, 35.8758715 ], [ 79.4560082, 35.873767 ], [ 79.4564592, 35.8719631 ], [ 79.4584134, 35.8698585 ], [ 79.4608186, 35.8683553 ], [ 79.4621715, 35.8671527 ], [ 79.4645092, 35.8645528 ], [ 79.469459, 35.8605286 ], [ 79.4717125, 35.8586372 ], [ 79.4750124, 35.8566654 ], [ 79.4780708, 35.8554179 ], [ 79.4799622, 35.8552166 ], [ 79.4828999, 35.8556191 ], [ 79.4848315, 35.852118 ], [ 79.4869643, 35.8502266 ], [ 79.4888959, 35.8492206 ], [ 79.4915519, 35.8488181 ], [ 79.4938457, 35.8488181 ], [ 79.4969846, 35.8476511 ], [ 79.5013308, 35.8465243 ], [ 79.5025708, 35.8473839 ], [ 79.5041709, 35.8476678 ], [ 79.5062871, 35.8482356 ], [ 79.5095389, 35.8495001 ], [ 79.5119906, 35.8497324 ], [ 79.5144846, 35.8498653 ], [ 79.5173407, 35.8503163 ], [ 79.5204975, 35.8525712 ], [ 79.5217001, 35.8582835 ], [ 79.5227524, 35.8615906 ], [ 79.523955, 35.8638455 ], [ 79.5253079, 35.8657997 ], [ 79.5280138, 35.8670023 ], [ 79.5302687, 35.8674533 ], [ 79.5341771, 35.867754 ], [ 79.5380856, 35.8679043 ], [ 79.5389875, 35.8715121 ], [ 79.5406411, 35.8743683 ], [ 79.5436476, 35.8761722 ], [ 79.5462113, 35.88107 ], [ 79.5500438, 35.8813298 ], [ 79.5540712, 35.8806802 ], [ 79.5578387, 35.8803554 ], [ 79.5601772, 35.8834734 ], [ 79.5610866, 35.8858118 ], [ 79.5606968, 35.8910084 ], [ 79.5608917, 35.8926973 ], [ 79.5631652, 35.8967896 ], [ 79.5648541, 35.897829 ], [ 79.5664131, 35.8982187 ], [ 79.5687515, 35.8976341 ], [ 79.5721293, 35.8965298 ], [ 79.5733635, 35.8921127 ], [ 79.5751823, 35.8900341 ], [ 79.5778456, 35.88867 ], [ 79.5799892, 35.8869811 ], [ 79.5821328, 35.8847725 ], [ 79.5842114, 35.8832136 ], [ 79.5852507, 35.8817845 ], [ 79.5883037, 35.877887 ], [ 79.5884336, 35.8769776 ], [ 79.5881088, 35.8747691 ], [ 79.5873943, 35.8726255 ], [ 79.5853806, 35.8698323 ], [ 79.5837567, 35.8684682 ], [ 79.5821328, 35.8667144 ], [ 79.5816131, 35.8652853 ], [ 79.5820029, 35.8622323 ], [ 79.5822627, 35.8595691 ], [ 79.5829123, 35.8576853 ], [ 79.5844712, 35.8552819 ], [ 79.5840165, 35.8539178 ], [ 79.5825817, 35.8521953 ], [ 79.5801765, 35.851594 ], [ 79.5777713, 35.8496398 ], [ 79.5749151, 35.8487379 ], [ 79.5728106, 35.8455811 ], [ 79.5704054, 35.8430255 ], [ 79.5678499, 35.8389668 ], [ 79.565595, 35.8343067 ], [ 79.56427, 35.8297913 ], [ 79.5680262, 35.8260088 ], [ 79.5699962, 35.8236185 ], [ 79.5715197, 35.8197836 ], [ 79.5717298, 35.8179712 ], [ 79.5713358, 35.8146878 ], [ 79.5719086, 35.8126599 ], [ 79.5734119, 35.8101044 ], [ 79.5758171, 35.8099541 ], [ 79.577621, 35.8102547 ], [ 79.5792746, 35.8119083 ], [ 79.5840849, 35.8149148 ], [ 79.5867908, 35.8156664 ], [ 79.5884125, 35.8149615 ], [ 79.5882061, 35.8115893 ], [ 79.5875179, 35.8091118 ], [ 79.5861415, 35.8054644 ], [ 79.5849027, 35.8025051 ], [ 79.5844898, 35.7996835 ], [ 79.5853156, 35.7974124 ], [ 79.5875179, 35.7949349 ], [ 79.59089, 35.7912875 ], [ 79.5925417, 35.7888788 ], [ 79.596258, 35.7882594 ], [ 79.599699, 35.7881218 ], [ 79.6023829, 35.7879153 ], [ 79.6056863, 35.7858507 ], [ 79.607338, 35.7862636 ], [ 79.6098155, 35.7871583 ], [ 79.6129812, 35.7857131 ], [ 79.6153899, 35.7852313 ], [ 79.6178674, 35.7846119 ], [ 79.6198632, 35.7828226 ], [ 79.6224784, 35.7812398 ], [ 79.6246806, 35.7806204 ], [ 79.6264011, 35.7794505 ], [ 79.6295668, 35.7782117 ], [ 79.6317002, 35.77773 ], [ 79.6349348, 35.7774547 ], [ 79.6385822, 35.77773 ], [ 79.6380317, 35.775046 ], [ 79.6367241, 35.7713297 ], [ 79.6354165, 35.770848 ], [ 79.632939, 35.769678 ], [ 79.6293818, 35.7670846 ], [ 79.630674, 35.7648463 ], [ 79.6317816, 35.7631619 ], [ 79.6329584, 35.7605544 ], [ 79.6339968, 35.758616 ], [ 79.635589, 35.7572546 ], [ 79.6372132, 35.7560816 ], [ 79.6393849, 35.7549182 ], [ 79.6406258, 35.7537549 ], [ 79.6426423, 35.7510403 ], [ 79.6424872, 35.7501872 ], [ 79.6396951, 35.7477053 ], [ 79.638144, 35.7458439 ], [ 79.6357396, 35.7440601 ], [ 79.6341109, 35.7415782 ], [ 79.636205, 35.7384759 ], [ 79.6367479, 35.7366145 ], [ 79.6378337, 35.7347531 ], [ 79.6396951, 35.7324263 ], [ 79.6415565, 35.7287811 ], [ 79.6451242, 35.7238949 ], [ 79.6477612, 35.7232744 ], [ 79.6503982, 35.7238949 ], [ 79.6535005, 35.7243602 ], [ 79.6543537, 35.7228091 ], [ 79.6548966, 35.7203272 ], [ 79.6576111, 35.7202496 ], [ 79.6597052, 35.7199394 ], [ 79.6612563, 35.7193189 ], [ 79.6645914, 35.7185434 ], [ 79.6644362, 35.7159839 ], [ 79.6650567, 35.714045 ], [ 79.6664528, 35.7114855 ], [ 79.6678488, 35.708771 ], [ 79.6691673, 35.7052809 ], [ 79.6703307, 35.7034195 ], [ 79.6718818, 35.7022561 ], [ 79.6742862, 35.7010927 ], [ 79.6764578, 35.7004722 ], [ 79.6786294, 35.7002396 ], [ 79.6790948, 35.697525 ], [ 79.6789397, 35.6955861 ], [ 79.6782416, 35.6931818 ], [ 79.6775436, 35.6910877 ], [ 79.6773885, 35.6887609 ], [ 79.6779314, 35.6865117 ], [ 79.6772334, 35.6842625 ], [ 79.6769231, 35.6829441 ], [ 79.676768, 35.6778252 ], [ 79.6776212, 35.6756536 ], [ 79.6787845, 35.6730166 ], [ 79.679405, 35.6706898 ], [ 79.6808786, 35.6682855 ], [ 79.6832829, 35.6661914 ], [ 79.6865404, 35.6635545 ], [ 79.6884018, 35.6646403 ], [ 79.690651, 35.6658037 ], [ 79.6931157, 35.6666387 ], [ 79.6960121, 35.6660344 ], [ 79.6982418, 35.6634505 ], [ 79.7004922, 35.6594497 ], [ 79.7018969, 35.6552557 ], [ 79.702595, 35.6506798 ], [ 79.7025174, 35.6466467 ], [ 79.7029247, 35.6441562 ], [ 79.7036763, 35.640849 ], [ 79.7042776, 35.6390451 ], [ 79.7059312, 35.6382935 ], [ 79.709539, 35.6375419 ], [ 79.7108919, 35.6379929 ], [ 79.7125455, 35.6381432 ], [ 79.7154017, 35.6372412 ], [ 79.7181075, 35.636189 ], [ 79.721114, 35.6360386 ], [ 79.7227676, 35.6367903 ], [ 79.7244212, 35.6394961 ], [ 79.7260747, 35.6405484 ], [ 79.7292316, 35.6416006 ], [ 79.7340147, 35.642769 ], [ 79.7368384, 35.6410502 ], [ 79.7383729, 35.6402522 ], [ 79.739662, 35.6393929 ], [ 79.7427926, 35.6377355 ], [ 79.7450024, 35.6373058 ], [ 79.7491151, 35.6347277 ], [ 79.7524299, 35.6324565 ], [ 79.7543941, 35.6322723 ], [ 79.7574019, 35.6328862 ], [ 79.7591462, 35.6321302 ], [ 79.7611004, 35.6321302 ], [ 79.763205, 35.6286727 ], [ 79.7651592, 35.6277708 ], [ 79.7690676, 35.6267185 ], [ 79.7714728, 35.6256662 ], [ 79.7762832, 35.6252152 ], [ 79.7816949, 35.624163 ], [ 79.7875576, 35.623712 ], [ 79.7890608, 35.624163 ], [ 79.7916164, 35.6279211 ], [ 79.7947732, 35.6294243 ], [ 79.7962764, 35.6294243 ], [ 79.7992829, 35.6259669 ], [ 79.8009365, 35.6238623 ], [ 79.8042437, 35.6235617 ], [ 79.8089037, 35.6247643 ], [ 79.8123612, 35.6265682 ], [ 79.816842, 35.6269739 ], [ 79.8223708, 35.6225131 ], [ 79.8250724, 35.6190262 ], [ 79.8266117, 35.6147225 ], [ 79.8279311, 35.6122408 ], [ 79.8309154, 35.6095706 ], [ 79.8341583, 35.6073266 ], [ 79.8346093, 35.6053724 ], [ 79.8358119, 35.6035685 ], [ 79.8392693, 35.6016142 ], [ 79.838668, 35.5981568 ], [ 79.838668, 35.5956012 ], [ 79.8388184, 35.5928954 ], [ 79.8379164, 35.5888366 ], [ 79.8367138, 35.5862811 ], [ 79.8371648, 35.5849282 ], [ 79.838668, 35.5823727 ], [ 79.8433281, 35.5799675 ], [ 79.844681, 35.5775623 ], [ 79.8457333, 35.5745558 ], [ 79.8514456, 35.5751571 ], [ 79.8535502, 35.5748564 ], [ 79.8555044, 35.5750067 ], [ 79.8583606, 35.5762093 ], [ 79.8607658, 35.5766603 ], [ 79.8625697, 35.5801178 ], [ 79.8640729, 35.5808694 ], [ 79.8652755, 35.5819217 ], [ 79.8669291, 35.5843269 ], [ 79.8661775, 35.5888366 ], [ 79.8657265, 35.5922941 ], [ 79.8661775, 35.5951503 ], [ 79.8675304, 35.5974051 ], [ 79.8690337, 35.5983071 ], [ 79.8712885, 35.5987581 ], [ 79.873844, 35.5978561 ], [ 79.8765499, 35.5977058 ], [ 79.8800074, 35.5986077 ], [ 79.8830139, 35.6002613 ], [ 79.8851184, 35.6016142 ], [ 79.8894778, 35.6014639 ], [ 79.891883, 35.6023659 ], [ 79.8944385, 35.6035685 ], [ 79.8968006, 35.603364 ], [ 79.9005898, 35.6022588 ], [ 79.9041421, 35.6011536 ], [ 79.9071419, 35.6004432 ], [ 79.9091154, 35.600601 ], [ 79.913694, 35.6022588 ], [ 79.9185883, 35.6036797 ], [ 79.9209565, 35.604706 ], [ 79.9222196, 35.6071531 ], [ 79.923009, 35.6107844 ], [ 79.9237194, 35.6137052 ], [ 79.9244299, 35.6161524 ], [ 79.9245878, 35.6189942 ], [ 79.9245878, 35.620652 ], [ 79.9262455, 35.6213625 ], [ 79.9283769, 35.6218361 ], [ 79.9297979, 35.6216782 ], [ 79.930982, 35.6224676 ], [ 79.9329555, 35.6227834 ], [ 79.935008, 35.6226255 ], [ 79.9380077, 35.6209678 ], [ 79.9406128, 35.6234939 ], [ 79.9421916, 35.6247569 ], [ 79.9436915, 35.6254674 ], [ 79.9450335, 35.6267304 ], [ 79.9468491, 35.6287829 ], [ 79.94827, 35.6309932 ], [ 79.9499278, 35.6324931 ], [ 79.9541906, 35.633914 ], [ 79.9558483, 35.6332825 ], [ 79.957585, 35.6328089 ], [ 79.9584534, 35.6294934 ], [ 79.9584534, 35.627283 ], [ 79.9580587, 35.6242833 ], [ 79.9571903, 35.6216782 ], [ 79.9554536, 35.6195468 ], [ 79.9548221, 35.6182838 ], [ 79.9545853, 35.6162313 ], [ 79.9566378, 35.6151261 ], [ 79.9597164, 35.614021 ], [ 79.96169, 35.6137841 ], [ 79.9638214, 35.6144157 ], [ 79.9700577, 35.609916 ], [ 79.9718733, 35.6084162 ], [ 79.9739258, 35.6054954 ], [ 79.9758993, 35.6052585 ], [ 79.978978, 35.605969 ], [ 79.981662, 35.6074689 ], [ 79.9859248, 35.6051796 ], [ 79.9884509, 35.6042323 ], [ 79.9911349, 35.6030482 ], [ 79.9938978, 35.6026535 ], [ 79.9953977, 35.6026535 ], [ 79.9972133, 35.6030482 ], [ 79.99895, 35.6024167 ], [ 80.000292, 35.5989433 ], [ 80.0010814, 35.5924701 ], [ 79.9998184, 35.5897861 ], [ 79.9966607, 35.5862338 ], [ 79.9953187, 35.5841024 ], [ 79.9929505, 35.5822868 ], [ 79.9906612, 35.5821289 ], [ 79.9848196, 35.579366 ], [ 79.9811094, 35.5788923 ], [ 79.9781886, 35.5789713 ], [ 79.973689, 35.5805501 ], [ 79.971005, 35.5803922 ], [ 79.9678473, 35.5783397 ], [ 79.9653212, 35.5747085 ], [ 79.9645318, 35.5714719 ], [ 79.9643739, 35.5678406 ], [ 79.9643739, 35.5640514 ], [ 79.9647687, 35.5591571 ], [ 79.9656605, 35.5557366 ], [ 79.9663197, 35.5535653 ], [ 79.9681808, 35.5518206 ], [ 79.970701, 35.5507349 ], [ 79.9732213, 35.5501145 ], [ 79.9753538, 35.5482922 ], [ 79.9783005, 35.5487963 ], [ 79.9801616, 35.5460434 ], [ 79.981131, 35.542864 ], [ 79.9816279, 35.5395315 ], [ 79.9821037, 35.5357243 ], [ 79.9823417, 35.5331069 ], [ 79.9837694, 35.5309654 ], [ 79.9866247, 35.5290619 ], [ 79.9901939, 35.5273962 ], [ 79.9930493, 35.5254927 ], [ 79.9947149, 35.5231132 ], [ 79.9954287, 35.5202578 ], [ 79.9954287, 35.5166887 ], [ 79.994239, 35.5138333 ], [ 79.994001, 35.5097882 ], [ 79.9951908, 35.5081226 ], [ 79.9978082, 35.5055052 ], [ 79.9999497, 35.5028878 ], [ 80.0018533, 35.4988427 ], [ 80.0035189, 35.497415 ], [ 80.0068501, 35.4962253 ], [ 80.0092296, 35.4912284 ], [ 80.0099434, 35.4881351 ], [ 80.0116091, 35.4836141 ], [ 80.0135126, 35.479807 ], [ 80.0149403, 35.475286 ], [ 80.016368, 35.4698133 ], [ 80.0168439, 35.4657682 ], [ 80.0189854, 35.4638646 ], [ 80.0225546, 35.4605334 ], [ 80.0258858, 35.457916 ], [ 80.0280273, 35.4550606 ], [ 80.0308827, 35.4507776 ], [ 80.033976, 35.4469704 ], [ 80.033976, 35.4412597 ], [ 80.0349278, 35.4386423 ], [ 80.0368313, 35.4374526 ], [ 80.0394488, 35.4360249 ], [ 80.0432559, 35.4341214 ], [ 80.0456354, 35.4317419 ], [ 80.0499184, 35.4272209 ], [ 80.0549152, 35.4234138 ], [ 80.0572947, 35.422462 ], [ 80.0587224, 35.422462 ], [ 80.0627675, 35.4253174 ], [ 80.064671, 35.4253174 ], [ 80.06943, 35.4238897 ], [ 80.0722853, 35.4231758 ], [ 80.0741889, 35.4260312 ], [ 80.0772822, 35.4303142 ], [ 80.0796616, 35.4317419 ], [ 80.0879898, 35.4324557 ], [ 80.0884656, 35.4350731 ], [ 80.0884656, 35.4381664 ], [ 80.0809961, 35.4504084 ], [ 80.0834795, 35.453699 ], [ 80.085342, 35.4551269 ], [ 80.0886325, 35.4560582 ], [ 80.0928543, 35.456679 ], [ 80.0957723, 35.4583553 ], [ 80.0993732, 35.4650605 ], [ 80.1012358, 35.4677302 ], [ 80.1044642, 35.4722624 ], [ 80.1078583, 35.4767137 ], [ 80.1099998, 35.4783793 ], [ 80.113331, 35.4779034 ], [ 80.1202315, 35.4774275 ], [ 80.1271319, 35.4783793 ], [ 80.1324345, 35.482331 ], [ 80.1366114, 35.4849995 ], [ 80.1386998, 35.4875521 ], [ 80.1403241, 35.4918449 ], [ 80.1419485, 35.4979942 ], [ 80.149606, 35.4997345 ], [ 80.1558713, 35.5012428 ], [ 80.1607408, 35.5022433 ], [ 80.168008, 35.5025978 ], [ 80.1681409, 35.5069847 ], [ 80.1774021, 35.5088015 ], [ 80.1825866, 35.5088458 ], [ 80.1799279, 35.5138087 ], [ 80.1774907, 35.5188603 ], [ 80.1715344, 35.527116 ], [ 80.1715344, 35.53721 ], [ 80.1686338, 35.5408068 ], [ 80.1668935, 35.5439394 ], [ 80.1659653, 35.5466079 ], [ 80.1661973, 35.5496245 ], [ 80.1661973, 35.5527572 ], [ 80.1678217, 35.5554257 ], [ 80.1713024, 35.557166 ], [ 80.174319, 35.5575141 ], [ 80.1776836, 35.5582102 ], [ 80.1791919, 35.5589064 ], [ 80.1816284, 35.5602987 ], [ 80.1860373, 35.561807 ], [ 80.1880097, 35.562039 ], [ 80.1891699, 35.5627352 ], [ 80.1905622, 35.5648236 ], [ 80.1919545, 35.5681883 ], [ 80.1926506, 35.5694645 ], [ 80.1961313, 35.5702767 ], [ 80.19938, 35.5714369 ], [ 80.2027447, 35.5736413 ], [ 80.2054132, 35.5751497 ], [ 80.2064574, 35.5751497 ], [ 80.2081978, 35.5739894 ], [ 80.2101702, 35.571901 ], [ 80.2129547, 35.5702767 ], [ 80.214463, 35.566912 ], [ 80.2166675, 35.5643595 ], [ 80.2188719, 35.5615749 ], [ 80.2210764, 35.5582102 ], [ 80.2238609, 35.5550776 ], [ 80.2248833, 35.5546909 ], [ 80.2271791, 35.5550735 ], [ 80.2288371, 35.5564765 ], [ 80.2326634, 35.5600477 ], [ 80.2350867, 35.55941 ], [ 80.2384027, 35.5572417 ], [ 80.2417188, 35.554946 ], [ 80.2475857, 35.5567316 ], [ 80.250009, 35.5568591 ], [ 80.2554933, 35.5632362 ], [ 80.2637835, 35.5683378 ], [ 80.2674822, 35.5665523 ], [ 80.2707982, 35.5633637 ], [ 80.273094, 35.5595375 ], [ 80.2744969, 35.5557113 ], [ 80.2767927, 35.5529053 ], [ 80.2799812, 35.5539257 ], [ 80.2826596, 35.5545634 ], [ 80.286996, 35.5562214 ], [ 80.2904396, 35.5569867 ], [ 80.2936281, 35.5569867 ], [ 80.2974544, 35.5560939 ], [ 80.3002603, 35.5522676 ], [ 80.3024285, 35.5479312 ], [ 80.303959, 35.5451253 ], [ 80.3042141, 35.542702 ], [ 80.3034488, 35.5397686 ], [ 80.3014082, 35.5356873 ], [ 80.3021734, 35.5340292 ], [ 80.3047242, 35.5324987 ], [ 80.3074026, 35.5309682 ], [ 80.3103361, 35.5300754 ], [ 80.3132695, 35.5265043 ], [ 80.3146725, 35.5242085 ], [ 80.3158203, 35.5238259 ], [ 80.3177335, 35.525739 ], [ 80.319519, 35.5276522 ], [ 80.3214322, 35.5286725 ], [ 80.3224525, 35.5296928 ], [ 80.3237532, 35.5339773 ], [ 80.3275603, 35.534929 ], [ 80.3294639, 35.534929 ], [ 80.333271, 35.5327875 ], [ 80.3396144, 35.5313418 ], [ 80.3435042, 35.5255337 ], [ 80.3465947, 35.5246279 ], [ 80.3488859, 35.5246812 ], [ 80.3503246, 35.5258534 ], [ 80.3518699, 35.5280914 ], [ 80.3537881, 35.5288907 ], [ 80.3584239, 35.5290505 ], [ 80.3628465, 35.5264929 ], [ 80.3664698, 35.5251075 ], [ 80.3649246, 35.5182338 ], [ 80.3650311, 35.5157294 ], [ 80.3660968, 35.5134914 ], [ 80.3686545, 35.5109871 ], [ 80.3711668, 35.5065918 ], [ 80.3748347, 35.5034022 ], [ 80.3780243, 35.5022859 ], [ 80.3817636, 35.502133 ], [ 80.3846189, 35.5009432 ], [ 80.3870457, 35.4975875 ], [ 80.3894676, 35.4937345 ], [ 80.3894676, 35.4876797 ], [ 80.3929904, 35.4860283 ], [ 80.4002562, 35.4832762 ], [ 80.4054303, 35.4789827 ], [ 80.4115952, 35.4771112 ], [ 80.4117053, 35.4725977 ], [ 80.4146777, 35.4698455 ], [ 80.4162189, 35.4644512 ], [ 80.420182, 35.4601578 ], [ 80.4217233, 35.451681 ], [ 80.4208426, 35.4430942 ], [ 80.4177601, 35.4371495 ], [ 80.4148978, 35.435278 ], [ 80.412586, 35.4307644 ], [ 80.4119255, 35.4260306 ], [ 80.4086229, 35.424049 ], [ 80.4054303, 35.4232784 ], [ 80.401247, 35.4197556 ], [ 80.394972, 35.4146916 ], [ 80.3868255, 35.4055543 ], [ 80.3827523, 35.3994995 ], [ 80.3769176, 35.3923438 ], [ 80.3689913, 35.3879403 ], [ 80.3607348, 35.3867294 ], [ 80.3514874, 35.3889311 ], [ 80.3467536, 35.3910228 ], [ 80.3345339, 35.3826561 ], [ 80.3277085, 35.3789131 ], [ 80.3235252, 35.3783627 ], [ 80.3197822, 35.3773719 ], [ 80.3146081, 35.3723079 ], [ 80.3108651, 35.369996 ], [ 80.3055809, 35.3693355 ], [ 80.3013976, 35.3695557 ], [ 80.2987555, 35.3684548 ], [ 80.2949024, 35.3631706 ], [ 80.2925906, 35.3604184 ], [ 80.2878568, 35.3577763 ], [ 80.2858752, 35.3542535 ], [ 80.2842239, 35.3487491 ], [ 80.2829028, 35.3455566 ], [ 80.281678, 35.3430841 ], [ 80.2800124, 35.334994 ], [ 80.2764432, 35.3283315 ], [ 80.2769191, 35.3221449 ], [ 80.2771571, 35.3161962 ], [ 80.2747776, 35.3114373 ], [ 80.2750155, 35.3050128 ], [ 80.2735879, 35.3004918 ], [ 80.2690669, 35.2985882 ], [ 80.2662115, 35.2964467 ], [ 80.2709705, 35.2924016 ], [ 80.2723981, 35.2893083 ], [ 80.2771571, 35.286453 ], [ 80.2809642, 35.2824079 ], [ 80.2869128, 35.2745557 ], [ 80.2911959, 35.273128 ], [ 80.2942892, 35.2678932 ], [ 80.2923856, 35.2636101 ], [ 80.2919097, 35.2576615 ], [ 80.2854852, 35.2329151 ], [ 80.277395, 35.2269664 ], [ 80.2745397, 35.2167348 ], [ 80.2852472, 35.211262 ], [ 80.2838801, 35.203971 ], [ 80.2800124, 35.2031718 ], [ 80.2712084, 35.2038857 ], [ 80.264308, 35.2048374 ], [ 80.2600249, 35.2041236 ], [ 80.2563285, 35.2041814 ], [ 80.2541827, 35.1994123 ], [ 80.2538394, 35.1943623 ], [ 80.2468013, 35.1856643 ], [ 80.2312659, 35.1815255 ], [ 80.2223395, 35.1780178 ], [ 80.2254294, 35.1702302 ], [ 80.2237987, 35.1655994 ], [ 80.224333, 35.1629589 ], [ 80.2290919, 35.1608174 ], [ 80.2344417, 35.157951 ], [ 80.2374457, 35.1543721 ], [ 80.2349567, 35.148828 ], [ 80.2298068, 35.1485473 ], [ 80.2247428, 35.1430029 ], [ 80.2214777, 35.1422576 ], [ 80.2162429, 35.1391643 ], [ 80.211246, 35.1282188 ], [ 80.2079147, 35.1239358 ], [ 80.1998246, 35.1222702 ], [ 80.1967313, 35.1220322 ], [ 80.1936721, 35.1184343 ], [ 80.1964933, 35.1134661 ], [ 80.2173653, 35.0025938 ], [ 80.2169074, 34.998381 ], [ 80.2164495, 34.9954504 ], [ 80.2160831, 34.9927029 ], [ 80.2195633, 34.9915123 ], [ 80.2237761, 34.9914207 ], [ 80.2261572, 34.9912376 ], [ 80.229271, 34.9910544 ], [ 80.2335754, 34.9895891 ], [ 80.2333007, 34.9871163 ], [ 80.2319269, 34.984552 ], [ 80.2296374, 34.9824456 ], [ 80.2262488, 34.981713 ], [ 80.224879, 34.9804086 ], [ 80.224879, 34.9780292 ], [ 80.2255928, 34.974222 ], [ 80.226635, 34.9724685 ], [ 80.2248861, 34.9704136 ], [ 80.2227001, 34.9696704 ], [ 80.2202954, 34.967222 ], [ 80.2177595, 34.9649484 ], [ 80.2155735, 34.9638991 ], [ 80.2127753, 34.9629372 ], [ 80.2115948, 34.9613196 ], [ 80.209365, 34.9607949 ], [ 80.2068292, 34.9604014 ], [ 80.2045119, 34.9599205 ], [ 80.2012328, 34.9601828 ], [ 80.1975165, 34.96062 ], [ 80.1968169, 34.9590898 ], [ 80.1933629, 34.9586963 ], [ 80.1924885, 34.9575158 ], [ 80.1921922, 34.9556723 ], [ 80.1921922, 34.9524223 ], [ 80.1888008, 34.9494548 ], [ 80.1862573, 34.9464874 ], [ 80.1869638, 34.9440852 ], [ 80.1886595, 34.9421069 ], [ 80.191203, 34.9411177 ], [ 80.1928987, 34.9368785 ], [ 80.1938879, 34.9344763 ], [ 80.1957249, 34.9334872 ], [ 80.1960075, 34.9305197 ], [ 80.1972792, 34.9282588 ], [ 80.1999641, 34.9268458 ], [ 80.2013771, 34.9244435 ], [ 80.2034967, 34.9206283 ], [ 80.2047685, 34.9161064 ], [ 80.2060403, 34.9114433 ], [ 80.2034967, 34.905791 ], [ 80.202225, 34.9009866 ], [ 80.202225, 34.8985844 ], [ 80.2050511, 34.8912364 ], [ 80.2019424, 34.8895408 ], [ 80.1969966, 34.8871385 ], [ 80.1904965, 34.8857255 ], [ 80.1841377, 34.8841711 ], [ 80.1759419, 34.8819102 ], [ 80.1674635, 34.8800732 ], [ 80.16817, 34.8728665 ], [ 80.1654036, 34.8713178 ], [ 80.1604067, 34.8708419 ], [ 80.1570755, 34.8684624 ], [ 80.1532683, 34.8679865 ], [ 80.1477956, 34.8672727 ], [ 80.13685, 34.8689383 ], [ 80.1361362, 34.8551375 ], [ 80.1332809, 34.8506165 ], [ 80.1288433, 34.8466453 ], [ 80.1259205, 34.8445392 ], [ 80.1241153, 34.8414445 ], [ 80.1204618, 34.837705 ], [ 80.1229978, 34.8357708 ], [ 80.1214504, 34.8328481 ], [ 80.120118, 34.8310858 ], [ 80.1184847, 34.8297963 ], [ 80.1161636, 34.8294525 ], [ 80.1144443, 34.8292376 ], [ 80.1118222, 34.8262979 ], [ 80.1130119, 34.8241564 ], [ 80.1134878, 34.8201113 ], [ 80.1120601, 34.8139247 ], [ 80.1104154, 34.8044273 ], [ 80.1092731, 34.8016667 ], [ 80.106798, 34.7976685 ], [ 80.1056557, 34.7941464 ], [ 80.103847, 34.7899578 ], [ 80.1029902, 34.7865308 ], [ 80.1006104, 34.7848173 ], [ 80.0994681, 34.7818663 ], [ 80.1003248, 34.7775826 ], [ 80.0989921, 34.7745363 ], [ 80.0928997, 34.7703478 ], [ 80.091091, 34.7685391 ], [ 80.083761, 34.7688247 ], [ 80.0780494, 34.7708238 ], [ 80.0754791, 34.7693959 ], [ 80.0722425, 34.7686343 ], [ 80.0697675, 34.7651121 ], [ 80.0669116, 34.7622563 ], [ 80.0686251, 34.7597812 ], [ 80.0684347, 34.757211 ], [ 80.0713466, 34.7520811 ], [ 80.0727185, 34.7466444 ], [ 80.0768296, 34.7423946 ], [ 80.0773779, 34.7400186 ], [ 80.0771951, 34.7363633 ], [ 80.0792055, 34.733439 ], [ 80.0774782, 34.724369 ], [ 80.0790965, 34.7215132 ], [ 80.0793821, 34.7172294 ], [ 80.0760503, 34.7082812 ], [ 80.0741464, 34.7058061 ], [ 80.0687883, 34.7051245 ], [ 80.0679588, 34.7053302 ], [ 80.0662655, 34.7050096 ], [ 80.0646163, 34.7045794 ], [ 80.061533, 34.7038623 ], [ 80.0583063, 34.7024999 ], [ 80.0552231, 34.7019263 ], [ 80.0520681, 34.7014244 ], [ 80.0485546, 34.7005639 ], [ 80.0456147, 34.6997752 ], [ 80.0432485, 34.6982694 ], [ 80.0415276, 34.6975523 ], [ 80.038014, 34.6970504 ], [ 80.0323494, 34.6966919 ], [ 80.0279038, 34.6965485 ], [ 80.0243902, 34.6956163 ], [ 80.0220957, 34.695688 ], [ 80.0187256, 34.6950427 ], [ 80.0152838, 34.6936803 ], [ 80.013061, 34.6940388 ], [ 80.0083285, 34.6943256 ], [ 80.0032375, 34.6944691 ], [ 79.9999391, 34.6939671 ], [ 79.997286, 34.6926047 ], [ 79.9947764, 34.6920311 ], [ 79.9917648, 34.6920311 ], [ 79.9893269, 34.6923179 ], [ 79.9858851, 34.6947559 ], [ 79.9816545, 34.6971938 ], [ 79.9787146, 34.6979826 ], [ 79.9750577, 34.6992732 ], [ 79.9721896, 34.6997035 ], [ 79.9696799, 34.6987713 ], [ 79.9680307, 34.696907 ], [ 79.9664532, 34.6940388 ], [ 79.9658796, 34.6901668 ], [ 79.9642304, 34.6875854 ], [ 79.961649, 34.6858645 ], [ 79.9587809, 34.6836417 ], [ 79.955841, 34.6803433 ], [ 79.9536182, 34.6766147 ], [ 79.9515387, 34.6737465 ], [ 79.9480252, 34.6748938 ], [ 79.9437947, 34.6761128 ], [ 79.9414284, 34.678479 ], [ 79.9399944, 34.6817774 ], [ 79.9377715, 34.6860797 ], [ 79.9351902, 34.6895215 ], [ 79.9323937, 34.6918877 ], [ 79.9288085, 34.6927482 ], [ 79.9252233, 34.6926764 ], [ 79.9227853, 34.6915292 ], [ 79.9195586, 34.6887327 ], [ 79.9178377, 34.6882308 ], [ 79.9139657, 34.6909555 ], [ 79.9099503, 34.6936086 ], [ 79.9079287, 34.6946378 ], [ 79.9060065, 34.6956163 ], [ 79.9011307, 34.6962617 ], [ 79.8984776, 34.69619 ], [ 79.8944622, 34.6943256 ], [ 79.8906618, 34.6926764 ], [ 79.8867181, 34.6901668 ], [ 79.8823441, 34.687944 ], [ 79.8783287, 34.6865816 ], [ 79.8744567, 34.6854343 ], [ 79.8701544, 34.6829247 ], [ 79.8644181, 34.6804867 ], [ 79.859829, 34.6778337 ], [ 79.8561004, 34.6750372 ], [ 79.8533756, 34.6737465 ], [ 79.8486432, 34.6722407 ], [ 79.8452731, 34.6690141 ], [ 79.8436239, 34.6647118 ], [ 79.8426917, 34.6604812 ], [ 79.838246, 34.6591189 ], [ 79.8352345, 34.6559639 ], [ 79.8319361, 34.6508729 ], [ 79.8297132, 34.6460687 ], [ 79.8259129, 34.6454951 ], [ 79.8249091, 34.6448497 ], [ 79.8231164, 34.6427703 ], [ 79.819818, 34.6421967 ], [ 79.8158743, 34.6416947 ], [ 79.8131496, 34.6396153 ], [ 79.8104965, 34.6381812 ], [ 79.8071264, 34.6360301 ], [ 79.8033261, 34.631441 ], [ 79.8004579, 34.6290748 ], [ 79.7937177, 34.6279275 ], [ 79.7896306, 34.6281426 ], [ 79.7865473, 34.6273539 ], [ 79.7856868, 34.6252028 ], [ 79.7874794, 34.620542 ], [ 79.7881965, 34.6159529 ], [ 79.787838, 34.6120809 ], [ 79.7858302, 34.6086391 ], [ 79.787018, 34.605969 ], [ 79.7895237, 34.603344 ], [ 79.794363, 34.5973098 ], [ 79.7989499, 34.5928439 ], [ 79.8018136, 34.5892643 ], [ 79.8016943, 34.5865199 ], [ 79.8006204, 34.5836563 ], [ 79.7965635, 34.5810313 ], [ 79.7915521, 34.5774517 ], [ 79.7888078, 34.5743494 ], [ 79.7874794, 34.5700622 ], [ 79.7882498, 34.5640188 ], [ 79.7923003, 34.5597434 ], [ 79.7952256, 34.556368 ], [ 79.7982259, 34.5541928 ], [ 79.8020513, 34.5517926 ], [ 79.8041515, 34.5481172 ], [ 79.8066268, 34.5452669 ], [ 79.8088368, 34.5445466 ], [ 79.8107404, 34.5402635 ], [ 79.8114542, 34.5340769 ], [ 79.8105024, 34.5271765 ], [ 79.8090748, 34.5224176 ], [ 79.8088368, 34.5171828 ], [ 79.8055056, 34.5131377 ], [ 79.8026502, 34.5036198 ], [ 79.7986051, 34.4960056 ], [ 79.7967016, 34.4900569 ], [ 79.7967052, 34.4822221 ], [ 79.7786177, 34.4791114 ], [ 79.7762382, 34.4781596 ], [ 79.7700516, 34.4736386 ], [ 79.7655306, 34.4705453 ], [ 79.759582, 34.4703074 ], [ 79.7555369, 34.472211 ], [ 79.7526815, 34.4776837 ], [ 79.7457811, 34.4767319 ], [ 79.7403083, 34.4776837 ], [ 79.737453, 34.4750663 ], [ 79.7280541, 34.4726869 ], [ 79.7216296, 34.4717351 ], [ 79.7163948, 34.4753043 ], [ 79.7144912, 34.4783976 ], [ 79.7099702, 34.4817288 ], [ 79.7033077, 34.4862498 ], [ 79.70188, 34.4860118 ], [ 79.6997385, 34.4833944 ], [ 79.6940278, 34.4781596 ], [ 79.6849859, 34.4767319 ], [ 79.6854618, 34.4714971 ], [ 79.6823685, 34.4667382 ], [ 79.6809408, 34.4617413 ], [ 79.6771336, 34.458648 ], [ 79.6735645, 34.454603 ], [ 79.670947, 34.4555547 ], [ 79.6664261, 34.4536512 ], [ 79.6609533, 34.4534132 ], [ 79.6576221, 34.4517476 ], [ 79.6561944, 34.4515097 ], [ 79.6531011, 34.4538891 ], [ 79.6488181, 34.4541271 ], [ 79.6454868, 34.4562686 ], [ 79.6388243, 34.4538891 ], [ 79.6304962, 34.4526994 ], [ 79.6288306, 34.450082 ], [ 79.6233578, 34.449844 ], [ 79.6188369, 34.4517476 ], [ 79.6126503, 34.4553168 ], [ 79.604798, 34.4653105 ], [ 79.600515, 34.4662623 ], [ 79.5929007, 34.4665003 ], [ 79.5890936, 34.4629311 ], [ 79.5850485, 34.4607895 ], [ 79.577324, 34.4601153 ], [ 79.5757731, 34.4586419 ], [ 79.5631331, 34.457944 ], [ 79.5611169, 34.4584093 ], [ 79.5580926, 34.4608132 ], [ 79.5560764, 34.4651558 ], [ 79.5516563, 34.4673271 ], [ 79.5499503, 34.469731 ], [ 79.5479341, 34.4749266 ], [ 79.5442894, 34.4779509 ], [ 79.5381633, 34.4788814 ], [ 79.5356818, 34.4732981 ], [ 79.5338207, 34.4695759 ], [ 79.5296333, 34.4655435 ], [ 79.5255233, 34.4607357 ], [ 79.5218787, 34.4593398 ], [ 79.5177687, 34.4586419 ], [ 79.5124956, 34.4563155 ], [ 79.5088509, 34.453679 ], [ 79.5091611, 34.4511975 ], [ 79.5120303, 34.4501894 ], [ 79.5152873, 34.4494139 ], [ 79.5189231, 34.447527 ], [ 79.5227303, 34.4446716 ], [ 79.5296307, 34.4437199 ], [ 79.5305915, 34.4426436 ], [ 79.5303651, 34.4347186 ], [ 79.5308179, 34.4291712 ], [ 79.5287801, 34.4262276 ], [ 79.5292329, 34.4231708 ], [ 79.5325161, 34.420114 ], [ 79.5362522, 34.4159251 ], [ 79.5376108, 34.4120758 ], [ 79.5341011, 34.4087926 ], [ 79.5347804, 34.4007544 ], [ 79.5387429, 34.3978109 ], [ 79.5416865, 34.3937352 ], [ 79.5425922, 34.3883009 ], [ 79.5464415, 34.3824138 ], [ 79.5514229, 34.377772 ], [ 79.5571968, 34.3741491 ], [ 79.5590171, 34.3716222 ], [ 79.5587791, 34.3644838 ], [ 79.5604447, 34.3604387 ], [ 79.5623483, 34.3580593 ], [ 79.5630621, 34.3528245 ], [ 79.5630621, 34.3468758 ], [ 79.5644898, 34.3430687 ], [ 79.5661554, 34.3387856 ], [ 79.5675831, 34.3330749 ], [ 79.5730559, 34.3309334 ], [ 79.5740077, 34.3249848 ], [ 79.5732938, 34.3214156 ], [ 79.5747215, 34.3190361 ], [ 79.5790045, 34.3161808 ], [ 79.5840014, 34.3157049 ], [ 79.585905, 34.3114218 ], [ 79.5929228, 34.3110086 ], [ 79.5986411, 34.3096517 ], [ 79.6013549, 34.3084887 ], [ 79.6028087, 34.3065503 ], [ 79.6030995, 34.3039334 ], [ 79.6033902, 34.3017042 ], [ 79.6051348, 34.2982151 ], [ 79.6063947, 34.2919153 ], [ 79.6076547, 34.2875539 ], [ 79.6087208, 34.2858093 ], [ 79.6100777, 34.2841617 ], [ 79.6074609, 34.2719497 ], [ 79.6083332, 34.2635177 ], [ 79.6089147, 34.259544 ], [ 79.6110469, 34.2542134 ], [ 79.6079455, 34.2454905 ], [ 79.6073639, 34.2382215 ], [ 79.6053286, 34.2373492 ], [ 79.6032933, 34.2374462 ], [ 79.5898311, 34.2409898 ], [ 79.5876896, 34.2388483 ], [ 79.5807891, 34.2336135 ], [ 79.5760302, 34.2302822 ], [ 79.5703195, 34.2233818 ], [ 79.5665124, 34.2195746 ], [ 79.5648467, 34.2160054 ], [ 79.5619914, 34.2126742 ], [ 79.5586601, 34.209343 ], [ 79.5546151, 34.2088671 ], [ 79.55057, 34.2076773 ], [ 79.5484285, 34.2067255 ], [ 79.5472387, 34.2041081 ], [ 79.5448593, 34.2029184 ], [ 79.541528, 34.2029184 ], [ 79.5367691, 34.2036322 ], [ 79.5317722, 34.200301 ], [ 79.5296307, 34.2000631 ], [ 79.5251097, 34.1981595 ], [ 79.5205888, 34.1979215 ], [ 79.515354, 34.1998251 ], [ 79.5078221, 34.1983763 ], [ 79.5052545, 34.197719 ], [ 79.503488, 34.1969179 ], [ 79.5015367, 34.1948228 ], [ 79.5003659, 34.1942066 ], [ 79.4985378, 34.1940423 ], [ 79.4946146, 34.1937342 ], [ 79.4905886, 34.1908996 ], [ 79.4929303, 34.1865861 ], [ 79.4934629, 34.1850725 ], [ 79.4953665, 34.1800756 ], [ 79.497508, 34.1741269 ], [ 79.4979839, 34.1684162 ], [ 79.4956044, 34.160564 ], [ 79.4946526, 34.1546154 ], [ 79.4958424, 34.1496185 ], [ 79.4903696, 34.1450975 ], [ 79.4906076, 34.1374832 ], [ 79.4913214, 34.134152 ], [ 79.4896558, 34.1305828 ], [ 79.4856107, 34.1255859 ], [ 79.4815656, 34.1234444 ], [ 79.4758549, 34.1203511 ], [ 79.4701442, 34.1160681 ], [ 79.4639576, 34.1151163 ], [ 79.4575331, 34.1158301 ], [ 79.4503947, 34.1160681 ], [ 79.4463496, 34.116306 ], [ 79.4415907, 34.1160681 ], [ 79.4382594, 34.116544 ], [ 79.4344523, 34.1158301 ], [ 79.4275518, 34.1134507 ], [ 79.4249344, 34.112023 ], [ 79.4242206, 34.1101194 ], [ 79.4232688, 34.1060743 ], [ 79.4216032, 34.1034569 ], [ 79.4185099, 34.1022672 ], [ 79.4161304, 34.1001257 ], [ 79.4170822, 34.0975083 ], [ 79.4177961, 34.0951288 ], [ 79.4175581, 34.0922735 ], [ 79.4168443, 34.0891802 ], [ 79.418272, 34.0870387 ], [ 79.4199376, 34.0844213 ], [ 79.4194617, 34.0799003 ], [ 79.4273139, 34.0758552 ], [ 79.427076, 34.0734757 ], [ 79.4261242, 34.0710963 ], [ 79.4261242, 34.0682409 ], [ 79.427076, 34.0663374 ], [ 79.4289795, 34.0651476 ], [ 79.4304072, 34.0639579 ], [ 79.4304072, 34.0613405 ], [ 79.4294554, 34.0596749 ], [ 79.427076, 34.0587231 ], [ 79.4246965, 34.0580092 ], [ 79.4232688, 34.0565816 ], [ 79.4213652, 34.0556298 ], [ 79.4185099, 34.05444 ], [ 79.418034, 34.0525365 ], [ 79.4192237, 34.0508709 ], [ 79.4211273, 34.0480155 ], [ 79.4220791, 34.0446843 ], [ 79.4201755, 34.0420668 ], [ 79.4166063, 34.0392115 ], [ 79.4101818, 34.0363561 ], [ 79.4089921, 34.0330249 ], [ 79.4070885, 34.0311213 ], [ 79.4044711, 34.0273142 ], [ 79.4082782, 34.0225553 ], [ 79.4082782, 34.0204138 ], [ 79.4085162, 34.0132754 ], [ 79.4101818, 34.0101821 ], [ 79.4073264, 34.0066129 ], [ 79.4032813, 34.0023299 ], [ 79.3970947, 33.9992366 ], [ 79.3906702, 33.997095 ], [ 79.382818, 33.9982848 ], [ 79.3771073, 34.0006642 ], [ 79.3710267, 33.9982525 ], [ 79.3674407, 33.9946664 ], [ 79.3665102, 33.9943369 ], [ 79.3651727, 33.9948409 ], [ 79.3635443, 33.9956674 ], [ 79.3587854, 33.9961433 ], [ 79.3559301, 33.9997124 ], [ 79.3537886, 34.0004263 ], [ 79.3464122, 34.0004263 ], [ 79.3421292, 34.0023299 ], [ 79.338798, 34.0051852 ], [ 79.3366564, 34.0054231 ], [ 79.3338011, 34.0042334 ], [ 79.3316596, 34.0044714 ], [ 79.3276145, 34.0063749 ], [ 79.3211899, 34.0099441 ], [ 79.3183346, 34.0137513 ], [ 79.3161931, 34.014941 ], [ 79.3111962, 34.0130374 ], [ 79.3061993, 34.0099441 ], [ 79.3004886, 34.0085164 ], [ 79.2969194, 34.0094682 ], [ 79.2935882, 34.0135133 ], [ 79.2909708, 34.014941 ], [ 79.2893052, 34.0154169 ], [ 79.2859739, 34.0142272 ], [ 79.2824047, 34.0123236 ], [ 79.2788355, 34.0123236 ], [ 79.2736007, 34.014703 ], [ 79.268128, 34.0189861 ], [ 79.2597998, 34.019224 ], [ 79.254565, 34.0204138 ], [ 79.2488543, 34.0239829 ], [ 79.245999, 34.0213655 ], [ 79.2421918, 34.0175584 ], [ 79.2383847, 34.0151789 ], [ 79.2341017, 34.0120856 ], [ 79.2295807, 34.010658 ], [ 79.2252977, 34.010658 ], [ 79.2212526, 34.0118477 ], [ 79.2167316, 34.0139892 ], [ 79.2126865, 34.0173205 ], [ 79.2084035, 34.0163687 ], [ 79.2050722, 34.0175584 ], [ 79.2015031, 34.0208896 ], [ 79.1976959, 34.0218414 ], [ 79.1938888, 34.0249347 ], [ 79.1896058, 34.0251727 ], [ 79.1824674, 34.0239829 ], [ 79.1772326, 34.023745 ], [ 79.171046, 34.0218414 ], [ 79.1691424, 34.0180343 ], [ 79.1674768, 34.0161307 ], [ 79.1615281, 34.0123236 ], [ 79.1546277, 34.010658 ], [ 79.1508205, 34.0092303 ], [ 79.1477272, 34.006137 ], [ 79.1472513, 34.001854 ], [ 79.1472513, 33.9989986 ], [ 79.144396, 33.9968571 ], [ 79.1389232, 33.9944776 ], [ 79.1284536, 33.9956674 ], [ 79.1201255, 33.9925741 ], [ 79.1087041, 33.9901946 ], [ 79.0994242, 33.9899567 ], [ 79.091572, 33.9911464 ], [ 79.0520729, 34.0025678 ], [ 79.0489796, 34.0063749 ], [ 79.0408894, 34.0066129 ], [ 79.0347028, 34.0087544 ], [ 79.029468, 34.01042 ], [ 79.0239953, 34.0137513 ], [ 79.0189984, 34.0161307 ], [ 79.0104323, 34.0235071 ], [ 79.0068632, 34.0273142 ], [ 79.003056, 34.028028 ], [ 78.9994868, 34.0301695 ], [ 78.9952038, 34.036832 ], [ 78.9923484, 34.0351664 ], [ 78.9885413, 34.0346905 ], [ 78.9825926, 34.0330249 ], [ 78.9780717, 34.0301695 ], [ 78.9706953, 34.028028 ], [ 78.9618913, 34.0261245 ], [ 78.9540391, 34.023745 ], [ 78.9466628, 34.0218414 ], [ 78.9354793, 34.0204138 ], [ 78.9295307, 34.0182722 ], [ 78.9250097, 34.0154169 ], [ 78.9214405, 34.0127995 ], [ 78.9169195, 34.010658 ], [ 78.9116847, 34.0097062 ], [ 78.9054981, 34.0051852 ], [ 78.9026428, 34.001616 ], [ 78.8997874, 33.9942397 ], [ 78.8969321, 33.9849598 ], [ 78.8933629, 33.979725 ], [ 78.8871763, 33.9725866 ], [ 78.8876522, 33.9699692 ], [ 78.8919352, 33.9623549 ], [ 78.8995495, 33.9552165 ], [ 78.9090673, 33.9473643 ], [ 78.9157298, 33.9373706 ], [ 78.9231061, 33.9254733 ], [ 78.9309583, 33.9173831 ], [ 78.9371449, 33.9126242 ], [ 78.9400003, 33.9050099 ], [ 78.9421418, 33.8931126 ], [ 78.9447592, 33.8885916 ], [ 78.9483284, 33.8843086 ], [ 78.9495181, 33.8771702 ], [ 78.9488043, 33.8681283 ], [ 78.949994, 33.8633693 ], [ 78.9561806, 33.8524238 ], [ 78.9599878, 33.8367194 ], [ 78.9652226, 33.8212529 ], [ 78.9714092, 33.8131627 ], [ 78.9759302, 33.8088797 ], [ 78.9885413, 33.8000757 ], [ 78.9933002, 33.7946029 ], [ 78.9954417, 33.7884163 ], [ 78.9968694, 33.7800882 ], [ 79.0004386, 33.7734257 ], [ 79.0051975, 33.7724739 ], [ 79.0111462, 33.7691427 ], [ 79.0130497, 33.7641458 ], [ 79.0282783, 33.7536762 ], [ 79.0272228, 33.7459569 ], [ 79.0191193, 33.7302266 ], [ 79.0102114, 33.7143904 ], [ 79.0075724, 33.6933017 ], [ 79.0118554, 33.6852115 ], [ 79.0218492, 33.6780732 ], [ 79.0220871, 33.674266 ], [ 79.0344606, 33.669851 ], [ 79.0557405, 33.6653971 ], [ 79.0639656, 33.6664138 ], [ 79.0695972, 33.657479 ], [ 79.0825254, 33.6492817 ], [ 79.0903822, 33.6371889 ], [ 79.0908771, 33.6292708 ], [ 79.0870464, 33.6223938 ], [ 79.0851428, 33.6195384 ], [ 79.0784804, 33.6185866 ], [ 79.0753871, 33.6207281 ], [ 79.062538, 33.6216799 ], [ 79.0544478, 33.6207281 ], [ 79.0454058, 33.621204 ], [ 79.0344603, 33.6195384 ], [ 79.0251804, 33.6190625 ], [ 79.0187559, 33.6131139 ], [ 79.0118554, 33.6131139 ], [ 79.0035273, 33.6074032 ], [ 78.9890126, 33.6102585 ], [ 78.9773533, 33.6100206 ], [ 78.9646824, 33.6154141 ], [ 78.9499895, 33.6176348 ], [ 78.9380922, 33.6143036 ], [ 78.9288123, 33.6200143 ], [ 78.9176288, 33.6216799 ], [ 78.9073971, 33.6204902 ], [ 78.9052966, 33.6055165 ], [ 78.8912168, 33.5871777 ], [ 78.885744, 33.5762322 ], [ 78.8883614, 33.572663 ], [ 78.8969275, 33.5693318 ], [ 78.9097505, 33.5654311 ], [ 78.9135169, 33.5546389 ], [ 78.9152493, 33.5479166 ], [ 78.9142975, 33.5410162 ], [ 78.9314297, 33.4867645 ], [ 78.9309538, 33.4805779 ], [ 78.9290502, 33.4746292 ], [ 78.9273846, 33.4551177 ], [ 78.9290502, 33.444886 ], [ 78.9273846, 33.440603 ], [ 78.9321435, 33.4284677 ], [ 78.9311917, 33.4251365 ], [ 78.9340471, 33.4170463 ], [ 78.9304779, 33.4122874 ], [ 78.9318639, 33.4068533 ], [ 78.9377294, 33.4028867 ], [ 78.9380248, 33.3991734 ], [ 78.9401346, 33.395882 ], [ 78.9398814, 33.3903119 ], [ 78.9366127, 33.3869223 ], [ 78.937375, 33.385545 ], [ 78.938039, 33.384775 ], [ 78.939341, 33.383845 ], [ 78.939766, 33.383287 ], [ 78.939952, 33.380922 ], [ 78.940111, 33.380019 ], [ 78.941227, 33.379727 ], [ 78.942768, 33.379647 ], [ 78.944708, 33.3797 ], [ 78.945213, 33.379647 ], [ 78.946275, 33.379036 ], [ 78.94771, 33.378292 ], [ 78.94864, 33.377522 ], [ 78.949517, 33.376512 ], [ 78.950447, 33.375316 ], [ 78.952944, 33.372473 ], [ 78.95406, 33.371464 ], [ 78.95321, 33.370375 ], [ 78.951509, 33.367718 ], [ 78.950872, 33.366841 ], [ 78.950499, 33.365247 ], [ 78.950447, 33.364317 ], [ 78.950553, 33.363972 ], [ 78.951802, 33.363015 ], [ 78.952466, 33.362245 ], [ 78.95313, 33.361926 ], [ 78.954458, 33.360704 ], [ 78.955255, 33.359933 ], [ 78.95576, 33.359189 ], [ 78.956345, 33.357728 ], [ 78.955123, 33.356931 ], [ 78.954697, 33.356479 ], [ 78.954087, 33.356081 ], [ 78.953608, 33.355629 ], [ 78.954087, 33.354487 ], [ 78.954618, 33.353583 ], [ 78.955282, 33.352786 ], [ 78.956637, 33.350926 ], [ 78.957248, 33.34981 ], [ 78.95762, 33.34896 ], [ 78.957939, 33.348004 ], [ 78.959028, 33.347871 ], [ 78.959692, 33.347552 ], [ 78.959879, 33.345985 ], [ 78.960144, 33.344789 ], [ 78.960729, 33.342717 ], [ 78.960994, 33.342079 ], [ 78.962243, 33.34006 ], [ 78.962535, 33.339475 ], [ 78.963013, 33.33913 ], [ 78.963943, 33.338705 ], [ 78.965856, 33.338359 ], [ 78.968354, 33.337217 ], [ 78.969018, 33.336818 ], [ 78.969231, 33.336473 ], [ 78.969629, 33.336128 ], [ 78.970931, 33.335596 ], [ 78.971383, 33.335277 ], [ 78.971781, 33.335224 ], [ 78.972445, 33.335357 ], [ 78.974385, 33.334879 ], [ 78.975714, 33.334693 ], [ 78.976643, 33.334454 ], [ 78.976962, 33.334241 ], [ 78.977228, 33.333577 ], [ 78.977334, 33.331186 ], [ 78.977547, 33.330628 ], [ 78.977919, 33.329964 ], [ 78.978317, 33.329512 ], [ 78.978902, 33.328981 ], [ 78.97946, 33.328263 ], [ 78.98015, 33.327626 ], [ 78.980814, 33.327147 ], [ 78.981824, 33.326696 ], [ 78.984269, 33.326217 ], [ 78.985251, 33.325952 ], [ 78.986314, 33.325766 ], [ 78.989449, 33.325713 ], [ 78.991681, 33.325553 ], [ 78.99285, 33.325659 ], [ 78.995241, 33.324889 ], [ 78.99564, 33.324703 ], [ 78.997101, 33.325314 ], [ 78.999147, 33.325952 ], [ 79.000077, 33.326403 ], [ 79.000847, 33.326589 ], [ 79.001511, 33.327041 ], [ 79.001963, 33.327147 ], [ 79.003611, 33.327307 ], [ 79.004487, 33.327254 ], [ 79.005151, 33.327041 ], [ 79.007117, 33.325261 ], [ 79.009163, 33.324012 ], [ 79.00996, 33.32364 ], [ 79.011076, 33.323454 ], [ 79.012378, 33.323454 ], [ 79.012989, 33.323375 ], [ 79.013813, 33.323135 ], [ 79.014451, 33.323056 ], [ 79.015965, 33.323348 ], [ 79.016815, 33.323321 ], [ 79.01732, 33.323428 ], [ 79.018117, 33.323773 ], [ 79.018701, 33.324198 ], [ 79.020322, 33.324783 ], [ 79.022448, 33.323242 ], [ 79.023192, 33.322524 ], [ 79.023856, 33.322099 ], [ 79.024546, 33.32186 ], [ 79.02622, 33.320744 ], [ 79.026725, 33.320346 ], [ 79.026885, 33.320054 ], [ 79.026778, 33.318008 ], [ 79.026513, 33.316998 ], [ 79.026114, 33.315935 ], [ 79.025689, 33.314979 ], [ 79.025052, 33.313863 ], [ 79.026141, 33.312428 ], [ 79.027071, 33.311605 ], [ 79.027496, 33.31094 ], [ 79.027947, 33.309957 ], [ 79.028426, 33.309134 ], [ 79.029063, 33.307832 ], [ 79.031587, 33.307752 ], [ 79.03257, 33.307593 ], [ 79.03358, 33.307088 ], [ 79.034324, 33.307114 ], [ 79.036449, 33.307672 ], [ 79.036768, 33.307566 ], [ 79.037459, 33.306371 ], [ 79.037778, 33.305414 ], [ 79.03722, 33.304484 ], [ 79.036768, 33.303448 ], [ 79.03621, 33.302465 ], [ 79.035227, 33.301296 ], [ 79.035015, 33.300579 ], [ 79.034855, 33.299038 ], [ 79.034404, 33.298294 ], [ 79.033793, 33.297629 ], [ 79.032862, 33.295398 ], [ 79.032491, 33.29492 ], [ 79.032198, 33.294441 ], [ 79.032331, 33.29383 ], [ 79.033128, 33.293033 ], [ 79.03358, 33.292475 ], [ 79.034005, 33.29213 ], [ 79.035573, 33.291838 ], [ 79.036795, 33.291492 ], [ 79.038495, 33.291147 ], [ 79.038761, 33.289925 ], [ 79.038947, 33.288702 ], [ 79.038947, 33.287932 ], [ 79.03916, 33.286736 ], [ 79.039292, 33.286311 ], [ 79.038548, 33.285222 ], [ 79.037751, 33.284186 ], [ 79.036928, 33.283229 ], [ 79.036449, 33.282432 ], [ 79.035785, 33.281529 ], [ 79.035201, 33.280865 ], [ 79.034802, 33.280307 ], [ 79.034404, 33.279563 ], [ 79.033926, 33.279031 ], [ 79.033607, 33.27842 ], [ 79.033474, 33.277942 ], [ 79.033978, 33.277411 ], [ 79.034217, 33.276906 ], [ 79.034775, 33.276507 ], [ 79.035147, 33.275923 ], [ 79.035254, 33.27502 ], [ 79.03528, 33.273558 ], [ 79.035201, 33.272681 ], [ 79.036502, 33.271114 ], [ 79.038309, 33.2696 ], [ 79.039133, 33.269068 ], [ 79.039611, 33.268431 ], [ 79.040886, 33.266385 ], [ 79.041471, 33.265667 ], [ 79.042587, 33.263675 ], [ 79.043171, 33.262984 ], [ 79.043942, 33.262267 ], [ 79.044712, 33.261098 ], [ 79.045137, 33.260779 ], [ 79.046439, 33.261044 ], [ 79.048086, 33.261443 ], [ 79.049468, 33.261629 ], [ 79.051009, 33.261762 ], [ 79.052417, 33.261815 ], [ 79.052736, 33.261629 ], [ 79.054038, 33.260247 ], [ 79.055127, 33.258919 ], [ 79.056084, 33.258547 ], [ 79.056801, 33.258016 ], [ 79.057518, 33.257086 ], [ 79.058262, 33.256448 ], [ 79.059086, 33.25589 ], [ 79.060069, 33.255412 ], [ 79.061637, 33.254774 ], [ 79.062965, 33.254137 ], [ 79.064054, 33.253844 ], [ 79.067429, 33.253446 ], [ 79.068863, 33.252728 ], [ 79.069899, 33.25233 ], [ 79.070803, 33.251905 ], [ 79.071573, 33.251001 ], [ 79.072503, 33.250125 ], [ 79.073938, 33.248956 ], [ 79.074894, 33.248105 ], [ 79.075771, 33.247521 ], [ 79.07686, 33.247069 ], [ 79.078853, 33.245821 ], [ 79.079491, 33.245369 ], [ 79.079942, 33.244917 ], [ 79.078959, 33.244067 ], [ 79.077365, 33.242526 ], [ 79.074575, 33.240321 ], [ 79.072078, 33.239125 ], [ 79.070563, 33.238567 ], [ 79.069155, 33.238222 ], [ 79.068199, 33.238142 ], [ 79.067481, 33.23793 ], [ 79.066924, 33.236707 ], [ 79.066632, 33.235724 ], [ 79.066472, 33.234369 ], [ 79.066445, 33.233652 ], [ 79.066578, 33.232802 ], [ 79.066844, 33.232005 ], [ 79.067854, 33.230756 ], [ 79.068757, 33.229348 ], [ 79.069421, 33.228631 ], [ 79.070431, 33.226957 ], [ 79.071387, 33.224938 ], [ 79.071653, 33.224247 ], [ 79.07253, 33.223662 ], [ 79.072848, 33.223237 ], [ 79.073592, 33.222865 ], [ 79.074575, 33.2226 ], [ 79.076143, 33.222414 ], [ 79.076834, 33.222201 ], [ 79.077392, 33.221856 ], [ 79.077897, 33.221431 ], [ 79.078348, 33.221191 ], [ 79.079836, 33.220926 ], [ 79.080819, 33.220846 ], [ 79.08159, 33.220873 ], [ 79.082413, 33.220766 ], [ 79.083662, 33.220527 ], [ 79.084645, 33.219863 ], [ 79.085416, 33.218933 ], [ 79.085867, 33.218109 ], [ 79.086505, 33.217179 ], [ 79.087727, 33.216382 ], [ 79.088498, 33.215957 ], [ 79.089587, 33.215453 ], [ 79.090756, 33.215001 ], [ 79.091951, 33.21439 ], [ 79.092377, 33.214071 ], [ 79.092881, 33.213194 ], [ 79.093492, 33.211866 ], [ 79.094369, 33.210989 ], [ 79.095485, 33.210617 ], [ 79.097664, 33.210458 ], [ 79.097982, 33.209501 ], [ 79.099125, 33.208146 ], [ 79.099444, 33.207641 ], [ 79.100506, 33.207296 ], [ 79.10319, 33.206977 ], [ 79.103482, 33.206153 ], [ 79.103535, 33.205489 ], [ 79.104864, 33.202992 ], [ 79.105076, 33.20246 ], [ 79.105528, 33.201584 ], [ 79.106086, 33.200946 ], [ 79.107388, 33.19975 ], [ 79.10853, 33.199936 ], [ 79.109726, 33.200308 ], [ 79.111904, 33.201212 ], [ 79.113206, 33.201637 ], [ 79.114375, 33.201823 ], [ 79.115757, 33.201823 ], [ 79.117856, 33.201637 ], [ 79.120486, 33.201637 ], [ 79.122107, 33.201796 ], [ 79.122904, 33.201929 ], [ 79.123834, 33.202195 ], [ 79.124365, 33.20262 ], [ 79.125029, 33.201477 ], [ 79.129679, 33.200229 ], [ 79.130636, 33.199697 ], [ 79.131406, 33.198741 ], [ 79.132495, 33.196615 ], [ 79.133027, 33.195925 ], [ 79.13385, 33.194623 ], [ 79.135444, 33.19348 ], [ 79.136241, 33.193002 ], [ 79.136826, 33.192736 ], [ 79.137464, 33.192657 ], [ 79.13927, 33.192736 ], [ 79.140147, 33.191992 ], [ 79.14113, 33.191275 ], [ 79.142007, 33.190903 ], [ 79.142831, 33.190398 ], [ 79.143521, 33.189814 ], [ 79.144053, 33.18915 ], [ 79.144265, 33.188406 ], [ 79.144451, 33.186413 ], [ 79.146444, 33.184766 ], [ 79.14732, 33.184341 ], [ 79.148065, 33.184155 ], [ 79.149499, 33.183304 ], [ 79.150934, 33.182561 ], [ 79.151971, 33.181869 ], [ 79.153395, 33.183595 ], [ 79.154122, 33.185616 ], [ 79.154785, 33.186185 ], [ 79.157091, 33.187796 ], [ 79.159522, 33.188964 ], [ 79.160406, 33.189596 ], [ 79.161828, 33.190322 ], [ 79.163154, 33.191333 ], [ 79.16407, 33.191143 ], [ 79.164133, 33.193481 ], [ 79.164323, 33.194238 ], [ 79.165018, 33.194839 ], [ 79.166881, 33.197302 ], [ 79.167955, 33.198249 ], [ 79.168744, 33.199702 ], [ 79.169566, 33.199576 ], [ 79.170608, 33.199797 ], [ 79.171271, 33.200144 ], [ 79.171808, 33.200681 ], [ 79.172471, 33.201534 ], [ 79.172945, 33.202324 ], [ 79.17364, 33.203018 ], [ 79.174461, 33.203966 ], [ 79.174998, 33.204945 ], [ 79.174587, 33.205766 ], [ 79.173924, 33.207503 ], [ 79.173766, 33.208609 ], [ 79.173829, 33.209588 ], [ 79.174208, 33.210282 ], [ 79.176293, 33.210661 ], [ 79.178219, 33.210882 ], [ 79.180335, 33.211546 ], [ 79.181093, 33.212114 ], [ 79.182293, 33.212241 ], [ 79.182041, 33.213062 ], [ 79.181914, 33.213914 ], [ 79.181946, 33.214578 ], [ 79.182104, 33.215336 ], [ 79.182514, 33.21622 ], [ 79.182514, 33.217104 ], [ 79.182862, 33.22001 ], [ 79.184346, 33.220073 ], [ 79.187157, 33.220547 ], [ 79.187978, 33.220515 ], [ 79.190568, 33.219694 ], [ 79.192273, 33.218936 ], [ 79.192873, 33.218589 ], [ 79.19559, 33.216157 ], [ 79.197169, 33.21483 ], [ 79.198716, 33.214009 ], [ 79.199127, 33.21363 ], [ 79.200011, 33.21044 ], [ 79.20058, 33.209714 ], [ 79.201148, 33.209588 ], [ 79.204401, 33.20984 ], [ 79.205854, 33.210567 ], [ 79.20658, 33.210661 ], [ 79.209644, 33.212651 ], [ 79.210465, 33.213662 ], [ 79.210623, 33.214388 ], [ 79.210465, 33.215272 ], [ 79.209738, 33.217989 ], [ 79.209612, 33.219189 ], [ 79.20977, 33.220199 ], [ 79.210275, 33.221115 ], [ 79.210939, 33.221842 ], [ 79.213086, 33.223452 ], [ 79.213497, 33.223989 ], [ 79.213623, 33.224526 ], [ 79.213623, 33.22541 ], [ 79.213971, 33.226232 ], [ 79.213465, 33.227811 ], [ 79.213023, 33.22879 ], [ 79.212865, 33.229927 ], [ 79.212992, 33.230906 ], [ 79.213497, 33.232769 ], [ 79.214255, 33.234285 ], [ 79.215739, 33.235959 ], [ 79.216971, 33.237886 ], [ 79.218518, 33.23738 ], [ 79.220129, 33.23678 ], [ 79.222214, 33.235706 ], [ 79.223287, 33.235454 ], [ 79.224551, 33.234601 ], [ 79.226762, 33.234317 ], [ 79.228151, 33.23378 ], [ 79.229857, 33.233243 ], [ 79.231815, 33.233559 ], [ 79.232667, 33.233811 ], [ 79.234341, 33.233938 ], [ 79.235352, 33.233906 ], [ 79.236742, 33.23359 ], [ 79.238447, 33.233117 ], [ 79.239142, 33.231885 ], [ 79.240058, 33.230685 ], [ 79.2411, 33.230116 ], [ 79.242142, 33.228979 ], [ 79.242805, 33.227621 ], [ 79.243343, 33.226074 ], [ 79.2447, 33.225347 ], [ 79.245588, 33.224986 ], [ 79.246293, 33.224387 ], [ 79.247101, 33.223326 ], [ 79.248269, 33.222915 ], [ 79.249596, 33.222284 ], [ 79.25127, 33.221747 ], [ 79.251396, 33.220263 ], [ 79.251933, 33.218146 ], [ 79.252533, 33.217483 ], [ 79.253376, 33.216176 ], [ 79.255818, 33.215399 ], [ 79.257839, 33.215272 ], [ 79.259323, 33.215241 ], [ 79.260302, 33.21543 ], [ 79.261376, 33.216176 ], [ 79.262362, 33.217128 ], [ 79.263737, 33.218079 ], [ 79.265217, 33.218784 ], [ 79.266461, 33.218715 ], [ 79.267754, 33.218995 ], [ 79.269375, 33.2197 ], [ 79.271032, 33.220898 ], [ 79.27223, 33.221216 ], [ 79.273674, 33.219841 ], [ 79.273815, 33.217691 ], [ 79.273216, 33.216211 ], [ 79.273377, 33.214514 ], [ 79.272758, 33.213216 ], [ 79.273322, 33.212617 ], [ 79.275049, 33.211278 ], [ 79.276071, 33.210573 ], [ 79.277136, 33.210219 ], [ 79.279347, 33.207156 ], [ 79.280199, 33.206777 ], [ 79.283863, 33.205861 ], [ 79.285189, 33.205892 ], [ 79.285537, 33.205103 ], [ 79.286295, 33.204313 ], [ 79.288063, 33.203113 ], [ 79.289358, 33.20286 ], [ 79.290937, 33.202924 ], [ 79.292737, 33.203303 ], [ 79.293464, 33.203018 ], [ 79.295864, 33.202703 ], [ 79.297096, 33.200871 ], [ 79.297317, 33.200334 ], [ 79.297601, 33.199987 ], [ 79.298012, 33.199071 ], [ 79.298612, 33.198028 ], [ 79.298549, 33.197239 ], [ 79.299275, 33.19626 ], [ 79.300349, 33.195091 ], [ 79.300949, 33.193575 ], [ 79.301739, 33.192565 ], [ 79.302497, 33.19067 ], [ 79.30451, 33.190733 ], [ 79.306476, 33.190196 ], [ 79.308529, 33.190417 ], [ 79.310361, 33.190827 ], [ 79.312761, 33.190543 ], [ 79.31434, 33.190891 ], [ 79.315382, 33.190796 ], [ 79.316235, 33.190227 ], [ 79.317309, 33.189943 ], [ 79.318477, 33.18988 ], [ 79.319646, 33.189691 ], [ 79.320846, 33.189848 ], [ 79.322109, 33.190133 ], [ 79.323878, 33.190291 ], [ 79.324226, 33.192817 ], [ 79.324036, 33.194428 ], [ 79.324447, 33.195218 ], [ 79.325299, 33.195849 ], [ 79.326594, 33.196449 ], [ 79.327944, 33.197816 ], [ 79.328773, 33.197965 ], [ 79.329437, 33.198597 ], [ 79.330415, 33.200492 ], [ 79.330921, 33.201187 ], [ 79.331931, 33.201629 ], [ 79.334111, 33.202324 ], [ 79.334679, 33.202987 ], [ 79.33569, 33.204029 ], [ 79.337553, 33.20425 ], [ 79.338438, 33.203555 ], [ 79.339638, 33.202987 ], [ 79.343175, 33.202766 ], [ 79.345291, 33.20245 ], [ 79.347375, 33.201755 ], [ 79.35006, 33.20065 ], [ 79.351102, 33.200681 ], [ 79.352176, 33.200966 ], [ 79.353408, 33.200997 ], [ 79.354734, 33.201092 ], [ 79.35584, 33.200523 ], [ 79.356787, 33.200239 ], [ 79.357103, 33.199418 ], [ 79.357703, 33.198881 ], [ 79.359061, 33.198028 ], [ 79.360766, 33.197523 ], [ 79.362314, 33.19727 ], [ 79.363546, 33.197428 ], [ 79.364588, 33.197618 ], [ 79.36623, 33.197555 ], [ 79.367209, 33.197586 ], [ 79.368757, 33.198249 ], [ 79.369515, 33.198249 ], [ 79.372989, 33.197965 ], [ 79.375768, 33.19787 ], [ 79.377979, 33.197902 ], [ 79.378768, 33.198028 ], [ 79.379242, 33.198439 ], [ 79.379969, 33.198723 ], [ 79.380569, 33.199039 ], [ 79.381232, 33.199955 ], [ 79.381864, 33.200397 ], [ 79.38319, 33.200871 ], [ 79.384264, 33.201471 ], [ 79.38518, 33.201913 ], [ 79.386506, 33.201408 ], [ 79.38777, 33.200776 ], [ 79.389001, 33.200397 ], [ 79.390012, 33.200113 ], [ 79.391686, 33.199923 ], [ 79.392286, 33.199797 ], [ 79.393644, 33.198976 ], [ 79.395065, 33.198028 ], [ 79.39655, 33.19727 ], [ 79.39835, 33.196228 ], [ 79.399581, 33.195881 ], [ 79.400813, 33.195312 ], [ 79.401571, 33.194744 ], [ 79.402689, 33.194045 ], [ 79.404839, 33.191649 ], [ 79.405262, 33.190592 ], [ 79.406107, 33.190204 ], [ 79.407067, 33.189501 ], [ 79.408298, 33.188838 ], [ 79.408646, 33.188396 ], [ 79.409498, 33.185143 ], [ 79.409814, 33.184258 ], [ 79.410383, 33.183753 ], [ 79.411425, 33.182395 ], [ 79.411425, 33.179616 ], [ 79.411741, 33.17851 ], [ 79.412751, 33.176773 ], [ 79.41253, 33.176142 ], [ 79.412372, 33.174784 ], [ 79.411298, 33.172352 ], [ 79.410951, 33.171152 ], [ 79.410256, 33.170362 ], [ 79.409119, 33.170109 ], [ 79.408362, 33.169193 ], [ 79.407098, 33.168846 ], [ 79.404003, 33.168783 ], [ 79.402771, 33.16872 ], [ 79.401097, 33.168814 ], [ 79.399676, 33.169162 ], [ 79.397971, 33.169888 ], [ 79.39715, 33.169983 ], [ 79.395886, 33.169414 ], [ 79.396012, 33.167393 ], [ 79.39636, 33.166541 ], [ 79.396234, 33.165435 ], [ 79.395539, 33.164298 ], [ 79.394244, 33.161708 ], [ 79.393897, 33.160603 ], [ 79.393802, 33.158929 ], [ 79.393612, 33.157729 ], [ 79.392949, 33.155992 ], [ 79.392918, 33.155329 ], [ 79.393486, 33.154129 ], [ 79.39497, 33.152549 ], [ 79.397844, 33.151444 ], [ 79.399044, 33.151223 ], [ 79.400371, 33.14857 ], [ 79.400529, 33.148002 ], [ 79.399866, 33.146612 ], [ 79.399613, 33.14557 ], [ 79.399961, 33.143548 ], [ 79.399518, 33.141243 ], [ 79.398981, 33.13998 ], [ 79.397971, 33.138653 ], [ 79.396202, 33.138179 ], [ 79.394618, 33.138031 ], [ 79.393446, 33.138324 ], [ 79.391512, 33.138089 ], [ 79.390398, 33.138851 ], [ 79.387324, 33.13389 ], [ 79.386514, 33.133221 ], [ 79.383871, 33.13086 ], [ 79.383014, 33.128361 ], [ 79.382838, 33.127013 ], [ 79.381959, 33.126309 ], [ 79.38003, 33.125891 ], [ 79.379395, 33.125397 ], [ 79.378618, 33.123789 ], [ 79.378162, 33.122543 ], [ 79.376224, 33.120851 ], [ 79.373109, 33.118749 ], [ 79.372171, 33.114529 ], [ 79.371527, 33.11283 ], [ 79.370472, 33.110778 ], [ 79.369241, 33.108962 ], [ 79.368153, 33.10746 ], [ 79.366145, 33.106473 ], [ 79.364312, 33.106121 ], [ 79.364665, 33.104923 ], [ 79.366039, 33.102703 ], [ 79.367131, 33.101293 ], [ 79.366545, 33.099174 ], [ 79.366076, 33.096947 ], [ 79.365432, 33.094954 ], [ 79.365168, 33.09302 ], [ 79.365461, 33.091379 ], [ 79.366515, 33.089035 ], [ 79.367864, 33.08716 ], [ 79.368157, 33.085343 ], [ 79.367453, 33.082823 ], [ 79.366574, 33.081123 ], [ 79.366574, 33.080127 ], [ 79.36464, 33.078369 ], [ 79.363351, 33.076903 ], [ 79.361886, 33.075966 ], [ 79.36171, 33.073152 ], [ 79.361358, 33.071922 ], [ 79.360831, 33.071336 ], [ 79.359659, 33.070691 ], [ 79.358311, 33.068874 ], [ 79.358662, 33.065827 ], [ 79.359082, 33.063018 ], [ 79.358511, 33.061133 ], [ 79.357405, 33.060591 ], [ 79.355643, 33.060485 ], [ 79.35152, 33.060943 ], [ 79.347891, 33.060414 ], [ 79.344684, 33.059287 ], [ 79.341829, 33.058018 ], [ 79.340579, 33.057364 ], [ 79.337667, 33.054737 ], [ 79.335611, 33.051139 ], [ 79.334526, 33.046 ], [ 79.331385, 33.039889 ], [ 79.328358, 33.034464 ], [ 79.329329, 33.032694 ], [ 79.330928, 33.031552 ], [ 79.334183, 33.030352 ], [ 79.337667, 33.028468 ], [ 79.340636, 33.023499 ], [ 79.341436, 33.01973 ], [ 79.341835, 33.014705 ], [ 79.341378, 33.012592 ], [ 79.340865, 33.010593 ], [ 79.338866, 33.006139 ], [ 79.339068, 33.003825 ], [ 79.338468, 33.002309 ], [ 79.337426, 33.001203 ], [ 79.336573, 33.000856 ], [ 79.335278, 33.000951 ], [ 79.333667, 33.000982 ], [ 79.331457, 33.000793 ], [ 79.331993, 32.999782 ], [ 79.33253, 32.99915 ], [ 79.333825, 32.998329 ], [ 79.334741, 32.997603 ], [ 79.335752, 32.995961 ], [ 79.336668, 32.994792 ], [ 79.337804, 32.992897 ], [ 79.338025, 32.991571 ], [ 79.338089, 32.990276 ], [ 79.338305, 32.988524 ], [ 79.338798, 32.987079 ], [ 79.340394, 32.986233 ], [ 79.341563, 32.986075 ], [ 79.342321, 32.985823 ], [ 79.343173, 32.984654 ], [ 79.343805, 32.982159 ], [ 79.343932, 32.97998 ], [ 79.347343, 32.979664 ], [ 79.351131, 32.978677 ], [ 79.352596, 32.977857 ], [ 79.354355, 32.976567 ], [ 79.355234, 32.975513 ], [ 79.356171, 32.974575 ], [ 79.357101, 32.972716 ], [ 79.357481, 32.970631 ], [ 79.357954, 32.967536 ], [ 79.360386, 32.965199 ], [ 79.361744, 32.963999 ], [ 79.36345, 32.962988 ], [ 79.362913, 32.961567 ], [ 79.362123, 32.960398 ], [ 79.361334, 32.958946 ], [ 79.359376, 32.958219 ], [ 79.358144, 32.957525 ], [ 79.357354, 32.95784 ], [ 79.355933, 32.956798 ], [ 79.354101, 32.956198 ], [ 79.353248, 32.955566 ], [ 79.352869, 32.954682 ], [ 79.353059, 32.953861 ], [ 79.353438, 32.953198 ], [ 79.35369, 32.95184 ], [ 79.353722, 32.950734 ], [ 79.354259, 32.949629 ], [ 79.354859, 32.948902 ], [ 79.355459, 32.948271 ], [ 79.356249, 32.947797 ], [ 79.356533, 32.947386 ], [ 79.357354, 32.94666 ], [ 79.358775, 32.945997 ], [ 79.359818, 32.945207 ], [ 79.361365, 32.942333 ], [ 79.362218, 32.941038 ], [ 79.362786, 32.940501 ], [ 79.363323, 32.939901 ], [ 79.363607, 32.939049 ], [ 79.364081, 32.938164 ], [ 79.364808, 32.938038 ], [ 79.365629, 32.938038 ], [ 79.36645, 32.938986 ], [ 79.368187, 32.940154 ], [ 79.369166, 32.94047 ], [ 79.369829, 32.940501 ], [ 79.37103, 32.940186 ], [ 79.371787, 32.940533 ], [ 79.373335, 32.940754 ], [ 79.374377, 32.940975 ], [ 79.375072, 32.941291 ], [ 79.375451, 32.941954 ], [ 79.375483, 32.943944 ], [ 79.377251, 32.944923 ], [ 79.378293, 32.945397 ], [ 79.379557, 32.945744 ], [ 79.382589, 32.945681 ], [ 79.383662, 32.945365 ], [ 79.385052, 32.944576 ], [ 79.386252, 32.943723 ], [ 79.388179, 32.943565 ], [ 79.390579, 32.943818 ], [ 79.392063, 32.943818 ], [ 79.39339, 32.943533 ], [ 79.394779, 32.942965 ], [ 79.396011, 32.942396 ], [ 79.398222, 32.942239 ], [ 79.399706, 32.94167 ], [ 79.40078, 32.940565 ], [ 79.399769, 32.939365 ], [ 79.39898, 32.937122 ], [ 79.39898, 32.934848 ], [ 79.398633, 32.933806 ], [ 79.398696, 32.931816 ], [ 79.397496, 32.931343 ], [ 79.39658, 32.930521 ], [ 79.396453, 32.928247 ], [ 79.395822, 32.927963 ], [ 79.395096, 32.926005 ], [ 79.394243, 32.925026 ], [ 79.393579, 32.923668 ], [ 79.392821, 32.923131 ], [ 79.391653, 32.922089 ], [ 79.390769, 32.920889 ], [ 79.390263, 32.920004 ], [ 79.390358, 32.919089 ], [ 79.389758, 32.918015 ], [ 79.390484, 32.917004 ], [ 79.39159, 32.916215 ], [ 79.392411, 32.915962 ], [ 79.393295, 32.916151 ], [ 79.394558, 32.914888 ], [ 79.397401, 32.913151 ], [ 79.398506, 32.912772 ], [ 79.399264, 32.912077 ], [ 79.400148, 32.912046 ], [ 79.401475, 32.911635 ], [ 79.402423, 32.910561 ], [ 79.403433, 32.909866 ], [ 79.404539, 32.909709 ], [ 79.406023, 32.908887 ], [ 79.406276, 32.907687 ], [ 79.407634, 32.905603 ], [ 79.408455, 32.905034 ], [ 79.409465, 32.904876 ], [ 79.410603, 32.90494 ], [ 79.411518, 32.904782 ], [ 79.412434, 32.904339 ], [ 79.413287, 32.903297 ], [ 79.413578, 32.901798 ], [ 79.414248, 32.901093 ], [ 79.416414, 32.900613 ], [ 79.417108, 32.900265 ], [ 79.417772, 32.899507 ], [ 79.418593, 32.897991 ], [ 79.419066, 32.89777 ], [ 79.419793, 32.897202 ], [ 79.420646, 32.896381 ], [ 79.421025, 32.895212 ], [ 79.421467, 32.894991 ], [ 79.422446, 32.895402 ], [ 79.423804, 32.895559 ], [ 79.42472, 32.895149 ], [ 79.425762, 32.894422 ], [ 79.427025, 32.893254 ], [ 79.428162, 32.893222 ], [ 79.429204, 32.892938 ], [ 79.430184, 32.892275 ], [ 79.431036, 32.891422 ], [ 79.432142, 32.890948 ], [ 79.4329, 32.890948 ], [ 79.433658, 32.891233 ], [ 79.434195, 32.891549 ], [ 79.435268, 32.891549 ], [ 79.436247, 32.891454 ], [ 79.437258, 32.890917 ], [ 79.437574, 32.891012 ], [ 79.438237, 32.890791 ], [ 79.438743, 32.89098 ], [ 79.438995, 32.891738 ], [ 79.43969, 32.892149 ], [ 79.440259, 32.892306 ], [ 79.440827, 32.891706 ], [ 79.44103, 32.889852 ], [ 79.441735, 32.88964 ], [ 79.444396, 32.89098 ], [ 79.44528, 32.891201 ], [ 79.446354, 32.89098 ], [ 79.446701, 32.890001 ], [ 79.447365, 32.889053 ], [ 79.449417, 32.88839 ], [ 79.450681, 32.889275 ], [ 79.45207, 32.888832 ], [ 79.452734, 32.887601 ], [ 79.45286, 32.883653 ], [ 79.455323, 32.88021 ], [ 79.456618, 32.879358 ], [ 79.457471, 32.879768 ], [ 79.458229, 32.879642 ], [ 79.459366, 32.879863 ], [ 79.460282, 32.881189 ], [ 79.461324, 32.8822 ], [ 79.462651, 32.881537 ], [ 79.463819, 32.880716 ], [ 79.465051, 32.880242 ], [ 79.466725, 32.879673 ], [ 79.467704, 32.879989 ], [ 79.468525, 32.879831 ], [ 79.470167, 32.87901 ], [ 79.471241, 32.878789 ], [ 79.472568, 32.876263 ], [ 79.472441, 32.875947 ], [ 79.471146, 32.874494 ], [ 79.470894, 32.873704 ], [ 79.471083, 32.871525 ], [ 79.470894, 32.87083 ], [ 79.469441, 32.868714 ], [ 79.468998, 32.867577 ], [ 79.469157, 32.866819 ], [ 79.469662, 32.86644 ], [ 79.470672, 32.866061 ], [ 79.471904, 32.865524 ], [ 79.47162, 32.863377 ], [ 79.471683, 32.862619 ], [ 79.472157, 32.861608 ], [ 79.472346, 32.860503 ], [ 79.472188, 32.859334 ], [ 79.470514, 32.854439 ], [ 79.471999, 32.851502 ], [ 79.47282, 32.849512 ], [ 79.471209, 32.843575 ], [ 79.470847, 32.84268 ], [ 79.469283, 32.841553 ], [ 79.464545, 32.838932 ], [ 79.463661, 32.839027 ], [ 79.462556, 32.838458 ], [ 79.462556, 32.837132 ], [ 79.462113, 32.835742 ], [ 79.460914, 32.833437 ], [ 79.461324, 32.832552 ], [ 79.462208, 32.831794 ], [ 79.463061, 32.83151 ], [ 79.464545, 32.831289 ], [ 79.465588, 32.830942 ], [ 79.466409, 32.830341 ], [ 79.467356, 32.829489 ], [ 79.468177, 32.828668 ], [ 79.468209, 32.828068 ], [ 79.467799, 32.827088 ], [ 79.467799, 32.825383 ], [ 79.467988, 32.824909 ], [ 79.468272, 32.824688 ], [ 79.468714, 32.822193 ], [ 79.468872, 32.821877 ], [ 79.470704, 32.819509 ], [ 79.471209, 32.819193 ], [ 79.472346, 32.818182 ], [ 79.47361, 32.817235 ], [ 79.475427, 32.815476 ], [ 79.476385, 32.814667 ], [ 79.47744, 32.814149 ], [ 79.478504, 32.813314 ], [ 79.479365, 32.812857 ], [ 79.480323, 32.811529 ], [ 79.480147, 32.810918 ], [ 79.48021, 32.810381 ], [ 79.480747, 32.809781 ], [ 79.481284, 32.809276 ], [ 79.481379, 32.808581 ], [ 79.481221, 32.807002 ], [ 79.480937, 32.805991 ], [ 79.481104, 32.804624 ], [ 79.481508, 32.803814 ], [ 79.481711, 32.80314 ], [ 79.481576, 32.802296 ], [ 79.4808, 32.800677 ], [ 79.482925, 32.798889 ], [ 79.486366, 32.796326 ], [ 79.488221, 32.794842 ], [ 79.490346, 32.794336 ], [ 79.49146, 32.794201 ], [ 79.492741, 32.79356 ], [ 79.49372, 32.792953 ], [ 79.494563, 32.792008 ], [ 79.495743, 32.791367 ], [ 79.496722, 32.79103 ], [ 79.497194, 32.790693 ], [ 79.4977, 32.78995 ], [ 79.498577, 32.788804 ], [ 79.499488, 32.788028 ], [ 79.502018, 32.786746 ], [ 79.502962, 32.786004 ], [ 79.505323, 32.783541 ], [ 79.506672, 32.783676 ], [ 79.508089, 32.783609 ], [ 79.509101, 32.783035 ], [ 79.510248, 32.782226 ], [ 79.511901, 32.781686 ], [ 79.514296, 32.781956 ], [ 79.515477, 32.781889 ], [ 79.516859, 32.781315 ], [ 79.517467, 32.780809 ], [ 79.518006, 32.77973 ], [ 79.518984, 32.778752 ], [ 79.519828, 32.779156 ], [ 79.520401, 32.779089 ], [ 79.520806, 32.778954 ], [ 79.521413, 32.778482 ], [ 79.522189, 32.778414 ], [ 79.523302, 32.778482 ], [ 79.526372, 32.778009 ], [ 79.527721, 32.777908 ], [ 79.528497, 32.778009 ], [ 79.529441, 32.777908 ], [ 79.530049, 32.777672 ], [ 79.53069, 32.776862 ], [ 79.531398, 32.776154 ], [ 79.532848, 32.775918 ], [ 79.534366, 32.775817 ], [ 79.535749, 32.775345 ], [ 79.537234, 32.775007 ], [ 79.53892, 32.774737 ], [ 79.540236, 32.774434 ], [ 79.541585, 32.774366 ], [ 79.543541, 32.773557 ], [ 79.5447607, 32.7730679 ], [ 79.5429, 32.768531 ], [ 79.541146, 32.763977 ], [ 79.541686, 32.76391 ], [ 79.542867, 32.763876 ], [ 79.544081, 32.764179 ], [ 79.545329, 32.764719 ], [ 79.546274, 32.764685 ], [ 79.547488, 32.764787 ], [ 79.548948, 32.764418 ], [ 79.549985, 32.764609 ], [ 79.551435, 32.763876 ], [ 79.551738, 32.762223 ], [ 79.552581, 32.761009 ], [ 79.553965, 32.761009 ], [ 79.555482, 32.760064 ], [ 79.557271, 32.759179 ], [ 79.556889, 32.758006 ], [ 79.55609, 32.757062 ], [ 79.555212, 32.755443 ], [ 79.554943, 32.753959 ], [ 79.55447, 32.752576 ], [ 79.553222, 32.751597 ], [ 79.551738, 32.750585 ], [ 79.550051, 32.750046 ], [ 79.546914, 32.74873 ], [ 79.546847, 32.74222 ], [ 79.543609, 32.731088 ], [ 79.543035, 32.730346 ], [ 79.542972, 32.729545 ], [ 79.545093, 32.729031 ], [ 79.545464, 32.727041 ], [ 79.545768, 32.726096 ], [ 79.546442, 32.725556 ], [ 79.546679, 32.725017 ], [ 79.546712, 32.72414 ], [ 79.547184, 32.723263 ], [ 79.547724, 32.722588 ], [ 79.548331, 32.72215 ], [ 79.548972, 32.721812 ], [ 79.550355, 32.721475 ], [ 79.551165, 32.721542 ], [ 79.552008, 32.72134 ], [ 79.553054, 32.720834 ], [ 79.554099, 32.720699 ], [ 79.555516, 32.7208 ], [ 79.556326, 32.719586 ], [ 79.556865, 32.719114 ], [ 79.55835, 32.718608 ], [ 79.560036, 32.717124 ], [ 79.560913, 32.715471 ], [ 79.561282, 32.714367 ], [ 79.558677, 32.710917 ], [ 79.558049, 32.710243 ], [ 79.557135, 32.709129 ], [ 79.556494, 32.709433 ], [ 79.555381, 32.709332 ], [ 79.554842, 32.708724 ], [ 79.554234, 32.708252 ], [ 79.553087, 32.708016 ], [ 79.552649, 32.707814 ], [ 79.552008, 32.706937 ], [ 79.550722, 32.704904 ], [ 79.55004, 32.705641 ], [ 79.54914, 32.706214 ], [ 79.547557, 32.706841 ], [ 79.546442, 32.707071 ], [ 79.545228, 32.70697 ], [ 79.544486, 32.706768 ], [ 79.543878, 32.706093 ], [ 79.543575, 32.705857 ], [ 79.542732, 32.705722 ], [ 79.541787, 32.703968 ], [ 79.540843, 32.703226 ], [ 79.540741, 32.702383 ], [ 79.540067, 32.700696 ], [ 79.539966, 32.700089 ], [ 79.54064, 32.699178 ], [ 79.539729, 32.696716 ], [ 79.539527, 32.694085 ], [ 79.539864, 32.692466 ], [ 79.540573, 32.691083 ], [ 79.539999, 32.689396 ], [ 79.539021, 32.686832 ], [ 79.539224, 32.686428 ], [ 79.539561, 32.685314 ], [ 79.539595, 32.684674 ], [ 79.538583, 32.682818 ], [ 79.539628, 32.682414 ], [ 79.539589, 32.682064 ], [ 79.543541, 32.681267 ], [ 79.545194, 32.680322 ], [ 79.54651, 32.679411 ], [ 79.548129, 32.677151 ], [ 79.548375, 32.676552 ], [ 79.546356, 32.675024 ], [ 79.545346, 32.675352 ], [ 79.541956, 32.67361 ], [ 79.541518, 32.672732 ], [ 79.540876, 32.671957 ], [ 79.538552, 32.671231 ], [ 79.538525, 32.669539 ], [ 79.538347, 32.667841 ], [ 79.537369, 32.665581 ], [ 79.53639, 32.664772 ], [ 79.535513, 32.663929 ], [ 79.535243, 32.663052 ], [ 79.534366, 32.66204 ], [ 79.533422, 32.661601 ], [ 79.53214, 32.660589 ], [ 79.529499, 32.659192 ], [ 79.528399, 32.65812 ], [ 79.527664, 32.657601 ], [ 79.526842, 32.656519 ], [ 79.526236, 32.655179 ], [ 79.525414, 32.653146 ], [ 79.524636, 32.651546 ], [ 79.513174, 32.646572 ], [ 79.51192, 32.646269 ], [ 79.510882, 32.646096 ], [ 79.510234, 32.64588 ], [ 79.509585, 32.645447 ], [ 79.50846, 32.644452 ], [ 79.507163, 32.644193 ], [ 79.506514, 32.643933 ], [ 79.504957, 32.643674 ], [ 79.503876, 32.643285 ], [ 79.502924, 32.643717 ], [ 79.499075, 32.64056 ], [ 79.497085, 32.634807 ], [ 79.494317, 32.631564 ], [ 79.492933, 32.630872 ], [ 79.48968, 32.630873 ], [ 79.488806, 32.630191 ], [ 79.488261, 32.628744 ], [ 79.487483, 32.627931 ], [ 79.48515, 32.62678 ], [ 79.483103, 32.623914 ], [ 79.482421, 32.622741 ], [ 79.481412, 32.621759 ], [ 79.48002, 32.620285 ], [ 79.478655, 32.619139 ], [ 79.477424, 32.61851 ], [ 79.475813, 32.618148 ], [ 79.473907, 32.617951 ], [ 79.471705, 32.617655 ], [ 79.470226, 32.617327 ], [ 79.469798, 32.617097 ], [ 79.467715, 32.614654 ], [ 79.466405, 32.612157 ], [ 79.464903, 32.608944 ], [ 79.464117, 32.607574 ], [ 79.46295, 32.606116 ], [ 79.461784, 32.6053 ], [ 79.458752, 32.6046 ], [ 79.455574, 32.604338 ], [ 79.452456, 32.603784 ], [ 79.452268, 32.603149 ], [ 79.452323, 32.601948 ], [ 79.453155, 32.599294 ], [ 79.453251, 32.597636 ], [ 79.453251, 32.596681 ], [ 79.452572, 32.595971 ], [ 79.452134, 32.595708 ], [ 79.45175, 32.595317 ], [ 79.451668, 32.59256 ], [ 79.450658, 32.591742 ], [ 79.448748, 32.59005 ], [ 79.447438, 32.588986 ], [ 79.446019, 32.588741 ], [ 79.445196, 32.586554 ], [ 79.444963, 32.5853 ], [ 79.444963, 32.584105 ], [ 79.445079, 32.582181 ], [ 79.44333, 32.581394 ], [ 79.442397, 32.581044 ], [ 79.441173, 32.580344 ], [ 79.439919, 32.579528 ], [ 79.439832, 32.579353 ], [ 79.439511, 32.577167 ], [ 79.439161, 32.576438 ], [ 79.438316, 32.575155 ], [ 79.437615, 32.574496 ], [ 79.437015, 32.573378 ], [ 79.436687, 32.572532 ], [ 79.436741, 32.571832 ], [ 79.436596, 32.571044 ], [ 79.436333, 32.570753 ], [ 79.436087, 32.56893 ], [ 79.436304, 32.568421 ], [ 79.435678, 32.568139 ], [ 79.434695, 32.566883 ], [ 79.433767, 32.566065 ], [ 79.432649, 32.565273 ], [ 79.432294, 32.564646 ], [ 79.431229, 32.563581 ], [ 79.429183, 32.562954 ], [ 79.42801, 32.562135 ], [ 79.427937, 32.561745 ], [ 79.427628, 32.560989 ], [ 79.427628, 32.558806 ], [ 79.427529, 32.557663 ], [ 79.427616, 32.556934 ], [ 79.427879, 32.556176 ], [ 79.428054, 32.55536 ], [ 79.428374, 32.554864 ], [ 79.428841, 32.554923 ], [ 79.429599, 32.554748 ], [ 79.430707, 32.554281 ], [ 79.433593, 32.552415 ], [ 79.435295, 32.551138 ], [ 79.434992, 32.549908 ], [ 79.434642, 32.548917 ], [ 79.434264, 32.547576 ], [ 79.43404, 32.546036 ], [ 79.433549, 32.544753 ], [ 79.433113, 32.543962 ], [ 79.432758, 32.543716 ], [ 79.432281, 32.542649 ], [ 79.430182, 32.541133 ], [ 79.429366, 32.540463 ], [ 79.428841, 32.539967 ], [ 79.427904, 32.539716 ], [ 79.426853, 32.539833 ], [ 79.425043, 32.541001 ], [ 79.422415, 32.541001 ], [ 79.420137, 32.540884 ], [ 79.416692, 32.542169 ], [ 79.416108, 32.542285 ], [ 79.4148053, 32.5422657 ], [ 79.413656, 32.540534 ], [ 79.413831, 32.538957 ], [ 79.413597, 32.538081 ], [ 79.41424, 32.537147 ], [ 79.41459, 32.536446 ], [ 79.415291, 32.535862 ], [ 79.416576, 32.53411 ], [ 79.417806, 32.533497 ], [ 79.418054, 32.532358 ], [ 79.418287, 32.5309 ], [ 79.418317, 32.529967 ], [ 79.417967, 32.527023 ], [ 79.415838, 32.524982 ], [ 79.414818, 32.524341 ], [ 79.413215, 32.523437 ], [ 79.413127, 32.521484 ], [ 79.413331, 32.520026 ], [ 79.41167, 32.519501 ], [ 79.410124, 32.519093 ], [ 79.409075, 32.519093 ], [ 79.407384, 32.519239 ], [ 79.405751, 32.519472 ], [ 79.404679, 32.520003 ], [ 79.404024, 32.520549 ], [ 79.403342, 32.521941 ], [ 79.403041, 32.523196 ], [ 79.40195, 32.524205 ], [ 79.401159, 32.525297 ], [ 79.400176, 32.525406 ], [ 79.399576, 32.525843 ], [ 79.398539, 32.525925 ], [ 79.39742, 32.525897 ], [ 79.394555, 32.524451 ], [ 79.393846, 32.524315 ], [ 79.392891, 32.524587 ], [ 79.391291, 32.52472 ], [ 79.389863, 32.525274 ], [ 79.388334, 32.525406 ], [ 79.387187, 32.525925 ], [ 79.38626, 32.525734 ], [ 79.384936, 32.526061 ], [ 79.383799, 32.52644 ], [ 79.382749, 32.527052 ], [ 79.382303, 32.527535 ], [ 79.380747, 32.527535 ], [ 79.378974, 32.527917 ], [ 79.378319, 32.527971 ], [ 79.377255, 32.528353 ], [ 79.376656, 32.528743 ], [ 79.375869, 32.529355 ], [ 79.375208, 32.529608 ], [ 79.373391, 32.529763 ], [ 79.372516, 32.529792 ], [ 79.371963, 32.530084 ], [ 79.370476, 32.530492 ], [ 79.369951, 32.530813 ], [ 79.369455, 32.531279 ], [ 79.368872, 32.531454 ], [ 79.368202, 32.531746 ], [ 79.367269, 32.532445 ], [ 79.366094, 32.532501 ], [ 79.364184, 32.532501 ], [ 79.363202, 32.53201 ], [ 79.362488, 32.531979 ], [ 79.362109, 32.532037 ], [ 79.361438, 32.531979 ], [ 79.361046, 32.531764 ], [ 79.358836, 32.529226 ], [ 79.358426, 32.52849 ], [ 79.356953, 32.527835 ], [ 79.356516, 32.526852 ], [ 79.356025, 32.526552 ], [ 79.354606, 32.52718 ], [ 79.353625, 32.527285 ], [ 79.352167, 32.527927 ], [ 79.350972, 32.528539 ], [ 79.350126, 32.529064 ], [ 79.349223, 32.52988 ], [ 79.34864, 32.530521 ], [ 79.347999, 32.531658 ], [ 79.347036, 32.532329 ], [ 79.345258, 32.533232 ], [ 79.342722, 32.534603 ], [ 79.340972, 32.53606 ], [ 79.340215, 32.536848 ], [ 79.339661, 32.537547 ], [ 79.339194, 32.537722 ], [ 79.337736, 32.538363 ], [ 79.336774, 32.538947 ], [ 79.335783, 32.53988 ], [ 79.334967, 32.540958 ], [ 79.334355, 32.541774 ], [ 79.333917, 32.542562 ], [ 79.333772, 32.543203 ], [ 79.333801, 32.544078 ], [ 79.333743, 32.544544 ], [ 79.333859, 32.545535 ], [ 79.333917, 32.546585 ], [ 79.334005, 32.547722 ], [ 79.334238, 32.54883 ], [ 79.334529, 32.549675 ], [ 79.33485, 32.549908 ], [ 79.335608, 32.550316 ], [ 79.336658, 32.550783 ], [ 79.337532, 32.551133 ], [ 79.338757, 32.551862 ], [ 79.339515, 32.552357 ], [ 79.339894, 32.552969 ], [ 79.34004, 32.553552 ], [ 79.34001, 32.554136 ], [ 79.33864, 32.555098 ], [ 79.337766, 32.555651 ], [ 79.337008, 32.556264 ], [ 79.336425, 32.55673 ], [ 79.335375, 32.557459 ], [ 79.334734, 32.557751 ], [ 79.333859, 32.558304 ], [ 79.33348, 32.558858 ], [ 79.333363, 32.5595 ], [ 79.333218, 32.56087 ], [ 79.333072, 32.561803 ], [ 79.332809, 32.562852 ], [ 79.33246, 32.563581 ], [ 79.331789, 32.564135 ], [ 79.331527, 32.56466 ], [ 79.331177, 32.565447 ], [ 79.330886, 32.56533 ], [ 79.329865, 32.564951 ], [ 79.328232, 32.56431 ], [ 79.326366, 32.56364 ], [ 79.325259, 32.561978 ], [ 79.3252, 32.561395 ], [ 79.324821, 32.560666 ], [ 79.324064, 32.559937 ], [ 79.323247, 32.5595 ], [ 79.321614, 32.559004 ], [ 79.319078, 32.558509 ], [ 79.316833, 32.558392 ], [ 79.315317, 32.558625 ], [ 79.313743, 32.559004 ], [ 79.312577, 32.559383 ], [ 79.311149, 32.560112 ], [ 79.309953, 32.559092 ], [ 79.30835, 32.55708 ], [ 79.307854, 32.556672 ], [ 79.307971, 32.554485 ], [ 79.308175, 32.551162 ], [ 79.30765, 32.550987 ], [ 79.305085, 32.550375 ], [ 79.304233, 32.55002 ], [ 79.303987, 32.549556 ], [ 79.303578, 32.548655 ], [ 79.303394, 32.548276 ], [ 79.301994, 32.547343 ], [ 79.299983, 32.546322 ], [ 79.29913, 32.545435 ], [ 79.298639, 32.544071 ], [ 79.298421, 32.542897 ], [ 79.297913, 32.542387 ], [ 79.29632, 32.541615 ], [ 79.294437, 32.540633 ], [ 79.294006, 32.53988 ], [ 79.293452, 32.539559 ], [ 79.292461, 32.539413 ], [ 79.291157, 32.541717 ], [ 79.290572, 32.542403 ], [ 79.289522, 32.542962 ], [ 79.288708, 32.543496 ], [ 79.28803, 32.543699 ], [ 79.286805, 32.543874 ], [ 79.286193, 32.544078 ], [ 79.28526, 32.544923 ], [ 79.284211, 32.545623 ], [ 79.282928, 32.546235 ], [ 79.282549, 32.54676 ], [ 79.282432, 32.547226 ], [ 79.282782, 32.548159 ], [ 79.283103, 32.549063 ], [ 79.283482, 32.550054 ], [ 79.282637, 32.551191 ], [ 79.281791, 32.551774 ], [ 79.280712, 32.552503 ], [ 79.279634, 32.553465 ], [ 79.278351, 32.55434 ], [ 79.276039, 32.556002 ], [ 79.27499, 32.553338 ], [ 79.273594, 32.550315 ], [ 79.272764, 32.548754 ], [ 79.272099, 32.547757 ], [ 79.270937, 32.546461 ], [ 79.269475, 32.545564 ], [ 79.269209, 32.545133 ], [ 79.268844, 32.544003 ], [ 79.268578, 32.542043 ], [ 79.268213, 32.541179 ], [ 79.268047, 32.539984 ], [ 79.267449, 32.538588 ], [ 79.266917, 32.538123 ], [ 79.265894, 32.537596 ], [ 79.265462, 32.53713 ], [ 79.264698, 32.536765 ], [ 79.262206, 32.536067 ], [ 79.261143, 32.536034 ], [ 79.259482, 32.5364 ], [ 79.25905, 32.536732 ], [ 79.258585, 32.53723 ], [ 79.258253, 32.537463 ], [ 79.257855, 32.537529 ], [ 79.256958, 32.536865 ], [ 79.256193, 32.5362 ], [ 79.255994, 32.535503 ], [ 79.255695, 32.535071 ], [ 79.254832, 32.534174 ], [ 79.2543, 32.533343 ], [ 79.253735, 32.531317 ], [ 79.253536, 32.529191 ], [ 79.253636, 32.52846 ], [ 79.252705, 32.528161 ], [ 79.252008, 32.527763 ], [ 79.25151, 32.527264 ], [ 79.251111, 32.526766 ], [ 79.251078, 32.526334 ], [ 79.251211, 32.52547 ], [ 79.251178, 32.524939 ], [ 79.251011, 32.524507 ], [ 79.251211, 32.523976 ], [ 79.251676, 32.523178 ], [ 79.25224, 32.522414 ], [ 79.252573, 32.521418 ], [ 79.251344, 32.520687 ], [ 79.250513, 32.519757 ], [ 79.250048, 32.519325 ], [ 79.249583, 32.519026 ], [ 79.248819, 32.518029 ], [ 79.248321, 32.5169 ], [ 79.248154, 32.5167 ], [ 79.247357, 32.516667 ], [ 79.245298, 32.517265 ], [ 79.244434, 32.517365 ], [ 79.242939, 32.517199 ], [ 79.241743, 32.517232 ], [ 79.240481, 32.517464 ], [ 79.239384, 32.517863 ], [ 79.238521, 32.518328 ], [ 79.237225, 32.518195 ], [ 79.235365, 32.518395 ], [ 79.233671, 32.518793 ], [ 79.23181, 32.519391 ], [ 79.227293, 32.521916 ], [ 79.224502, 32.523743 ], [ 79.223373, 32.524706 ], [ 79.22211, 32.524075 ], [ 79.221546, 32.523311 ], [ 79.220715, 32.522447 ], [ 79.220582, 32.521418 ], [ 79.220748, 32.520122 ], [ 79.220815, 32.516933 ], [ 79.220781, 32.515006 ], [ 79.220881, 32.514109 ], [ 79.221213, 32.513046 ], [ 79.221712, 32.51009 ], [ 79.221612, 32.509791 ], [ 79.220914, 32.509591 ], [ 79.219851, 32.509525 ], [ 79.217725, 32.509625 ], [ 79.216695, 32.50989 ], [ 79.215134, 32.510488 ], [ 79.211115, 32.511418 ], [ 79.210517, 32.511086 ], [ 79.208756, 32.510422 ], [ 79.207128, 32.509924 ], [ 79.204504, 32.510322 ], [ 79.203308, 32.51092 ], [ 79.202917, 32.511392 ], [ 79.202385, 32.511691 ], [ 79.20093, 32.5132 ], [ 79.20048, 32.514365 ], [ 79.196683, 32.5138 ], [ 79.19456, 32.514538 ], [ 79.189852, 32.515692 ], [ 79.188294, 32.515877 ], [ 79.188248, 32.515415 ], [ 79.188029, 32.514896 ], [ 79.187521, 32.514423 ], [ 79.185155, 32.513084 ], [ 79.184059, 32.51268 ], [ 79.183782, 32.512519 ], [ 79.183401, 32.512046 ], [ 79.182709, 32.510799 ], [ 79.182605, 32.510211 ], [ 79.182674, 32.509115 ], [ 79.183113, 32.508157 ], [ 79.183124, 32.507095 ], [ 79.183269, 32.505566 ], [ 79.183169, 32.505068 ], [ 79.182969, 32.504537 ], [ 79.181973, 32.503573 ], [ 79.181242, 32.503341 ], [ 79.181608, 32.502411 ], [ 79.182039, 32.501514 ], [ 79.183501, 32.498923 ], [ 79.183966, 32.497826 ], [ 79.182272, 32.497262 ], [ 79.180777, 32.497129 ], [ 79.179647, 32.496929 ], [ 79.178352, 32.496996 ], [ 79.177621, 32.496929 ], [ 79.17689, 32.496664 ], [ 79.174133, 32.496464 ], [ 79.171143, 32.495501 ], [ 79.168918, 32.495235 ], [ 79.167124, 32.494837 ], [ 79.16543, 32.494338 ], [ 79.1643, 32.494239 ], [ 79.162705, 32.494737 ], [ 79.15955, 32.496796 ], [ 79.15842, 32.495866 ], [ 79.156859, 32.494936 ], [ 79.155563, 32.494538 ], [ 79.154633, 32.491647 ], [ 79.153205, 32.489787 ], [ 79.152241, 32.489023 ], [ 79.150813, 32.488159 ], [ 79.15078, 32.486963 ], [ 79.150846, 32.486465 ], [ 79.150481, 32.485336 ], [ 79.150381, 32.484339 ], [ 79.150547, 32.483044 ], [ 79.150713, 32.48228 ], [ 79.150713, 32.480519 ], [ 79.15058, 32.479456 ], [ 79.150115, 32.478492 ], [ 79.149152, 32.476865 ], [ 79.148056, 32.476865 ], [ 79.146129, 32.477297 ], [ 79.141843, 32.478891 ], [ 79.139751, 32.479755 ], [ 79.138821, 32.480087 ], [ 79.138189, 32.48022 ], [ 79.13706, 32.480253 ], [ 79.135034, 32.480153 ], [ 79.133971, 32.480253 ], [ 79.131546, 32.480951 ], [ 79.130781, 32.480054 ], [ 79.129984, 32.478924 ], [ 79.129519, 32.477994 ], [ 79.12932, 32.477297 ], [ 79.129253, 32.476599 ], [ 79.129585, 32.474971 ], [ 79.130781, 32.473111 ], [ 79.131678, 32.471849 ], [ 79.132144, 32.470985 ], [ 79.132177, 32.470254 ], [ 79.132044, 32.469457 ], [ 79.131412, 32.468693 ], [ 79.130449, 32.468062 ], [ 79.129685, 32.467331 ], [ 79.128556, 32.466799 ], [ 79.12819, 32.466268 ], [ 79.127958, 32.464872 ], [ 79.127725, 32.461351 ], [ 79.126795, 32.461119 ], [ 79.1253, 32.460654 ], [ 79.124038, 32.460089 ], [ 79.122709, 32.459856 ], [ 79.120151, 32.459225 ], [ 79.119553, 32.45886 ], [ 79.120085, 32.457298 ], [ 79.119553, 32.455704 ], [ 79.118058, 32.45484 ], [ 79.117527, 32.454475 ], [ 79.117859, 32.453545 ], [ 79.118291, 32.45298 ], [ 79.118789, 32.452515 ], [ 79.118955, 32.45205 ], [ 79.119154, 32.450223 ], [ 79.119454, 32.449359 ], [ 79.120184, 32.448495 ], [ 79.121115, 32.447665 ], [ 79.121081, 32.447033 ], [ 79.120583, 32.445904 ], [ 79.119852, 32.444542 ], [ 79.118158, 32.442516 ], [ 79.117925, 32.442117 ], [ 79.117793, 32.440921 ], [ 79.117394, 32.438928 ], [ 79.117261, 32.437931 ], [ 79.117959, 32.437134 ], [ 79.119055, 32.436337 ], [ 79.12045, 32.435772 ], [ 79.122211, 32.434809 ], [ 79.122211, 32.433712 ], [ 79.122277, 32.432948 ], [ 79.122642, 32.43162 ], [ 79.122676, 32.430025 ], [ 79.122842, 32.429294 ], [ 79.123805, 32.427866 ], [ 79.124138, 32.426769 ], [ 79.124702, 32.425407 ], [ 79.125267, 32.424278 ], [ 79.125998, 32.423248 ], [ 79.126131, 32.422451 ], [ 79.12643, 32.421654 ], [ 79.1254, 32.41976 ], [ 79.125134, 32.419096 ], [ 79.123971, 32.41883 ], [ 79.122609, 32.418597 ], [ 79.121214, 32.418265 ], [ 79.118025, 32.417833 ], [ 79.116862, 32.417833 ], [ 79.115932, 32.418033 ], [ 79.115268, 32.418298 ], [ 79.114869, 32.418398 ], [ 79.114537, 32.418431 ], [ 79.114338, 32.418298 ], [ 79.113275, 32.416405 ], [ 79.112511, 32.415309 ], [ 79.112112, 32.414412 ], [ 79.112145, 32.414146 ], [ 79.113009, 32.412319 ], [ 79.113075, 32.41192 ], [ 79.113009, 32.411688 ], [ 79.112643, 32.411289 ], [ 79.111481, 32.41089 ], [ 79.109155, 32.409894 ], [ 79.10786, 32.409429 ], [ 79.107528, 32.409163 ], [ 79.107029, 32.408598 ], [ 79.105435, 32.407469 ], [ 79.105435, 32.407236 ], [ 79.105933, 32.40531 ], [ 79.105933, 32.405077 ], [ 79.105435, 32.404346 ], [ 79.105036, 32.403549 ], [ 79.104538, 32.40232 ], [ 79.103874, 32.401057 ], [ 79.10384, 32.400592 ], [ 79.10394, 32.399529 ], [ 79.103741, 32.399097 ], [ 79.102877, 32.398533 ], [ 79.100319, 32.397071 ], [ 79.10012, 32.394945 ], [ 79.100419, 32.394281 ], [ 79.101415, 32.393218 ], [ 79.102545, 32.392155 ], [ 79.103408, 32.391557 ], [ 79.104172, 32.391125 ], [ 79.104505, 32.390826 ], [ 79.104438, 32.389431 ], [ 79.102744, 32.387637 ], [ 79.101581, 32.386607 ], [ 79.103043, 32.378069 ], [ 79.104272, 32.377172 ], [ 79.104571, 32.376807 ], [ 79.104671, 32.375013 ], [ 79.104438, 32.374316 ], [ 79.10384, 32.373552 ], [ 79.102877, 32.372588 ], [ 79.100153, 32.370628 ], [ 79.098924, 32.369997 ], [ 79.097661, 32.370063 ], [ 79.097363, 32.370296 ], [ 79.096133, 32.370628 ], [ 79.093941, 32.370828 ], [ 79.092811, 32.371127 ], [ 79.091881, 32.371592 ], [ 79.090752, 32.372389 ], [ 79.089822, 32.372322 ], [ 79.08826, 32.372322 ], [ 79.087895, 32.372256 ], [ 79.087264, 32.372289 ], [ 79.086832, 32.372389 ], [ 79.086068, 32.374282 ], [ 79.085703, 32.374781 ], [ 79.084573, 32.375445 ], [ 79.083709, 32.376342 ], [ 79.083244, 32.376608 ], [ 79.08135, 32.379498 ], [ 79.079723, 32.379963 ], [ 79.078128, 32.380362 ], [ 79.076633, 32.380827 ], [ 79.075803, 32.381192 ], [ 79.074275, 32.382089 ], [ 79.072713, 32.383385 ], [ 79.072115, 32.38375 ], [ 79.070986, 32.384082 ], [ 79.068827, 32.38458 ], [ 79.0668, 32.385112 ], [ 79.063512, 32.386241 ], [ 79.061917, 32.386839 ], [ 79.060389, 32.387138 ], [ 79.05916, 32.387172 ], [ 79.057864, 32.387039 ], [ 79.056569, 32.386607 ], [ 79.054542, 32.385776 ], [ 79.046802, 32.383219 ], [ 79.042882, 32.382388 ], [ 79.03961, 32.382845 ], [ 79.037418, 32.383211 ], [ 79.036521, 32.383144 ], [ 79.034959, 32.382546 ], [ 79.032767, 32.381517 ], [ 79.031106, 32.380819 ], [ 79.029678, 32.380055 ], [ 79.028182, 32.37969 ], [ 79.026156, 32.380686 ], [ 79.024694, 32.381317 ], [ 79.023864, 32.382015 ], [ 79.022801, 32.383311 ], [ 79.02031, 32.382945 ], [ 79.018349, 32.382181 ], [ 79.01619, 32.381782 ], [ 79.013599, 32.381218 ], [ 79.012004, 32.38042 ], [ 79.008816, 32.379058 ], [ 79.005128, 32.377298 ], [ 79.002736, 32.376268 ], [ 79.000809, 32.375504 ], [ 78.999547, 32.374906 ], [ 78.997587, 32.374175 ], [ 78.995195, 32.373179 ], [ 78.993634, 32.372581 ], [ 78.99101, 32.371351 ], [ 78.990179, 32.37082 ], [ 78.989415, 32.369956 ], [ 78.987522, 32.367232 ], [ 78.986824, 32.364575 ], [ 78.985661, 32.362283 ], [ 78.982605, 32.3571 ], [ 78.981941, 32.355838 ], [ 78.981276, 32.354277 ], [ 78.980579, 32.352184 ], [ 78.979482, 32.350257 ], [ 78.978386, 32.347566 ], [ 78.977788, 32.346636 ], [ 78.97729, 32.345639 ], [ 78.976759, 32.345042 ], [ 78.976493, 32.34441 ], [ 78.976227, 32.34348 ], [ 78.975828, 32.342816 ], [ 78.974832, 32.34162 ], [ 78.973137, 32.338763 ], [ 78.972307, 32.337733 ], [ 78.971809, 32.337368 ], [ 78.970181, 32.336504 ], [ 78.968287, 32.33574 ], [ 78.966926, 32.336305 ], [ 78.964534, 32.3378 ], [ 78.962939, 32.338497 ], [ 78.961776, 32.339394 ], [ 78.960414, 32.341288 ], [ 78.958488, 32.341852 ], [ 78.957524, 32.34245 ], [ 78.956694, 32.343314 ], [ 78.956262, 32.344012 ], [ 78.955996, 32.344543 ], [ 78.95593, 32.34544 ], [ 78.953405, 32.347599 ], [ 78.952807, 32.348297 ], [ 78.952143, 32.348729 ], [ 78.950681, 32.349227 ], [ 78.947359, 32.350024 ], [ 78.946196, 32.350722 ], [ 78.945964, 32.351386 ], [ 78.945798, 32.352084 ], [ 78.943871, 32.353147 ], [ 78.941911, 32.354144 ], [ 78.940749, 32.354542 ], [ 78.939619, 32.354808 ], [ 78.939486, 32.356768 ], [ 78.93932, 32.357599 ], [ 78.93849, 32.358396 ], [ 78.93736, 32.359127 ], [ 78.936264, 32.359492 ], [ 78.93231, 32.359592 ], [ 78.931247, 32.360788 ], [ 78.930417, 32.36215 ], [ 78.92962, 32.363346 ], [ 78.92859, 32.363545 ], [ 78.92663, 32.363611 ], [ 78.925667, 32.363811 ], [ 78.923142, 32.365073 ], [ 78.921248, 32.36587 ], [ 78.919986, 32.366236 ], [ 78.917827, 32.366601 ], [ 78.917295, 32.366601 ], [ 78.916764, 32.367265 ], [ 78.915203, 32.367531 ], [ 78.913907, 32.367897 ], [ 78.913143, 32.368229 ], [ 78.912644, 32.369126 ], [ 78.911781, 32.370355 ], [ 78.910983, 32.371119 ], [ 78.907529, 32.372514 ], [ 78.9062, 32.375271 ], [ 78.906466, 32.376235 ], [ 78.905835, 32.37856 ], [ 78.901981, 32.380985 ], [ 78.90228, 32.382048 ], [ 78.902313, 32.383277 ], [ 78.902147, 32.386367 ], [ 78.902811, 32.386965 ], [ 78.904373, 32.388127 ], [ 78.905203, 32.388925 ], [ 78.905502, 32.389323 ], [ 78.904938, 32.39032 ], [ 78.904373, 32.390818 ], [ 78.903808, 32.392147 ], [ 78.903243, 32.392944 ], [ 78.902712, 32.393841 ], [ 78.90218, 32.394605 ], [ 78.901848, 32.394672 ], [ 78.900121, 32.394638 ], [ 78.897629, 32.394838 ], [ 78.896035, 32.394805 ], [ 78.895503, 32.394904 ], [ 78.895304, 32.395868 ], [ 78.895171, 32.39703 ], [ 78.894972, 32.397761 ], [ 78.89444, 32.398492 ], [ 78.893012, 32.399954 ], [ 78.892347, 32.400518 ], [ 78.891118, 32.400186 ], [ 78.886733, 32.398658 ], [ 78.885571, 32.398359 ], [ 78.88464, 32.398326 ], [ 78.882813, 32.39816 ], [ 78.881983, 32.398193 ], [ 78.881617, 32.398625 ], [ 78.880787, 32.398957 ], [ 78.880455, 32.399356 ], [ 78.879857, 32.399854 ], [ 78.878362, 32.400884 ], [ 78.877299, 32.401548 ], [ 78.876668, 32.40188 ], [ 78.876302, 32.402445 ], [ 78.875671, 32.403674 ], [ 78.875007, 32.404305 ], [ 78.874309, 32.405269 ], [ 78.873744, 32.406431 ], [ 78.872615, 32.408325 ], [ 78.872083, 32.409089 ], [ 78.871784, 32.410019 ], [ 78.869691, 32.412677 ], [ 78.869027, 32.413308 ], [ 78.868629, 32.413507 ], [ 78.866868, 32.413441 ], [ 78.863978, 32.413408 ], [ 78.860855, 32.413109 ], [ 78.859725, 32.413341 ], [ 78.857035, 32.414471 ], [ 78.85637, 32.414637 ], [ 78.855507, 32.414404 ], [ 78.854543, 32.414437 ], [ 78.853779, 32.414039 ], [ 78.853082, 32.413474 ], [ 78.852351, 32.412976 ], [ 78.851952, 32.413109 ], [ 78.851686, 32.41271 ], [ 78.849992, 32.413175 ], [ 78.849361, 32.413308 ], [ 78.848697, 32.413308 ], [ 78.847534, 32.412909 ], [ 78.846371, 32.412378 ], [ 78.843581, 32.410551 ], [ 78.841255, 32.411348 ], [ 78.840126, 32.411979 ], [ 78.838598, 32.41271 ], [ 78.837967, 32.413208 ], [ 78.836871, 32.414603 ], [ 78.836405, 32.414869 ], [ 78.835774, 32.415135 ], [ 78.835176, 32.4155 ], [ 78.83398, 32.417028 ], [ 78.833382, 32.41756 ], [ 78.83305, 32.418457 ], [ 78.83295, 32.419919 ], [ 78.83305, 32.420616 ], [ 78.833216, 32.421181 ], [ 78.833615, 32.422211 ], [ 78.833748, 32.423074 ], [ 78.833715, 32.423739 ], [ 78.833449, 32.42447 ], [ 78.832519, 32.426529 ], [ 78.832187, 32.427891 ], [ 78.830891, 32.428024 ], [ 78.829629, 32.428257 ], [ 78.827071, 32.42829 ], [ 78.825376, 32.428423 ], [ 78.824081, 32.428722 ], [ 78.822453, 32.429486 ], [ 78.821689, 32.430117 ], [ 78.820759, 32.430748 ], [ 78.819995, 32.431213 ], [ 78.819031, 32.431712 ], [ 78.818102, 32.431778 ], [ 78.816872, 32.431745 ], [ 78.815975, 32.432442 ], [ 78.815344, 32.43304 ], [ 78.814779, 32.433339 ], [ 78.81375, 32.433672 ], [ 78.813118, 32.433971 ], [ 78.812222, 32.434834 ], [ 78.811557, 32.435565 ], [ 78.809963, 32.436861 ], [ 78.8087, 32.438256 ], [ 78.808434, 32.439618 ], [ 78.807969, 32.440216 ], [ 78.807637, 32.441046 ], [ 78.807239, 32.441345 ], [ 78.806707, 32.441511 ], [ 78.806475, 32.443538 ], [ 78.806441, 32.444734 ], [ 78.806475, 32.446494 ], [ 78.806275, 32.448089 ], [ 78.805843, 32.449783 ], [ 78.805345, 32.450879 ], [ 78.803983, 32.452673 ], [ 78.803651, 32.45347 ], [ 78.802721, 32.454999 ], [ 78.802289, 32.455497 ], [ 78.802322, 32.457291 ], [ 78.802222, 32.458719 ], [ 78.801657, 32.460015 ], [ 78.80086, 32.461177 ], [ 78.799897, 32.462174 ], [ 78.798502, 32.463868 ], [ 78.797838, 32.4644 ], [ 78.798303, 32.465994 ], [ 78.798435, 32.46729 ], [ 78.798369, 32.468785 ], [ 78.797904, 32.469914 ], [ 78.797273, 32.470678 ], [ 78.796342, 32.471575 ], [ 78.79621, 32.472306 ], [ 78.796342, 32.473303 ], [ 78.79621, 32.474133 ], [ 78.795711, 32.47493 ], [ 78.795014, 32.475495 ], [ 78.794648, 32.475728 ], [ 78.793154, 32.47586 ], [ 78.792356, 32.476359 ], [ 78.789898, 32.476824 ], [ 78.788038, 32.477322 ], [ 78.787141, 32.477654 ], [ 78.783719, 32.478385 ], [ 78.781095, 32.478584 ], [ 78.779367, 32.479016 ], [ 78.779799, 32.479814 ], [ 78.78053, 32.480478 ], [ 78.780962, 32.480943 ], [ 78.781294, 32.481674 ], [ 78.781327, 32.483667 ], [ 78.781693, 32.484797 ], [ 78.781792, 32.485727 ], [ 78.780164, 32.487687 ], [ 78.780065, 32.489082 ], [ 78.779766, 32.490377 ], [ 78.7794, 32.491441 ], [ 78.778902, 32.492603 ], [ 78.778637, 32.4936 ], [ 78.778603, 32.494596 ], [ 78.778803, 32.495792 ], [ 78.778603, 32.496457 ], [ 78.777939, 32.497121 ], [ 78.777607, 32.497354 ], [ 78.778504, 32.49928 ], [ 78.778935, 32.499945 ], [ 78.779367, 32.500775 ], [ 78.779866, 32.502303 ], [ 78.780065, 32.503267 ], [ 78.780032, 32.504164 ], [ 78.779434, 32.505924 ], [ 78.779367, 32.507419 ], [ 78.779168, 32.508216 ], [ 78.778637, 32.509811 ], [ 78.777939, 32.511273 ], [ 78.778371, 32.511771 ], [ 78.778703, 32.512435 ], [ 78.778935, 32.513067 ], [ 78.779201, 32.513465 ], [ 78.779998, 32.514096 ], [ 78.78043, 32.514761 ], [ 78.780829, 32.515658 ], [ 78.778005, 32.51795 ], [ 78.776577, 32.519212 ], [ 78.773687, 32.521571 ], [ 78.772557, 32.522434 ], [ 78.771494, 32.523431 ], [ 78.770796, 32.524195 ], [ 78.770132, 32.524826 ], [ 78.770431, 32.526288 ], [ 78.770564, 32.527351 ], [ 78.770465, 32.527982 ], [ 78.770165, 32.528547 ], [ 78.768737, 32.530009 ], [ 78.768405, 32.530573 ], [ 78.768139, 32.531537 ], [ 78.768139, 32.5326 ], [ 78.768338, 32.533962 ], [ 78.768338, 32.534593 ], [ 78.767674, 32.535756 ], [ 78.767342, 32.536752 ], [ 78.767973, 32.537284 ], [ 78.7698, 32.538313 ], [ 78.771029, 32.538878 ], [ 78.768073, 32.543994 ], [ 78.767209, 32.545157 ], [ 78.765714, 32.546718 ], [ 78.763987, 32.547681 ], [ 78.763721, 32.548313 ], [ 78.763289, 32.549608 ], [ 78.762492, 32.551336 ], [ 78.762159, 32.553163 ], [ 78.761296, 32.555056 ], [ 78.760665, 32.555521 ], [ 78.760233, 32.556019 ], [ 78.759967, 32.55685 ], [ 78.760034, 32.557282 ], [ 78.76113, 32.557614 ], [ 78.761495, 32.558112 ], [ 78.761528, 32.558976 ], [ 78.761263, 32.559773 ], [ 78.760698, 32.560537 ], [ 78.760332, 32.561135 ], [ 78.760067, 32.561899 ], [ 78.759602, 32.562763 ], [ 78.758937, 32.563361 ], [ 78.758373, 32.563959 ], [ 78.758107, 32.565587 ], [ 78.757874, 32.56645 ], [ 78.757475, 32.567181 ], [ 78.759768, 32.571101 ], [ 78.7601, 32.571865 ], [ 78.761296, 32.57728 ], [ 78.761927, 32.579439 ], [ 78.76299, 32.579074 ], [ 78.763854, 32.578974 ], [ 78.764585, 32.579107 ], [ 78.766312, 32.579871 ], [ 78.767342, 32.580237 ], [ 78.768537, 32.580768 ], [ 78.770298, 32.581266 ], [ 78.77073, 32.581765 ], [ 78.771228, 32.582529 ], [ 78.771893, 32.58326 ], [ 78.772491, 32.583858 ], [ 78.774085, 32.585054 ], [ 78.774384, 32.585419 ], [ 78.774584, 32.585917 ], [ 78.77465, 32.586781 ], [ 78.774551, 32.587711 ], [ 78.774285, 32.589073 ], [ 78.77475, 32.58997 ], [ 78.774982, 32.590933 ], [ 78.775015, 32.591332 ], [ 78.775846, 32.591996 ], [ 78.776411, 32.592295 ], [ 78.777141, 32.592594 ], [ 78.777208, 32.594953 ], [ 78.777507, 32.595916 ], [ 78.77754, 32.59688 ], [ 78.778005, 32.598773 ], [ 78.778371, 32.599371 ], [ 78.778371, 32.599936 ], [ 78.778039, 32.600833 ], [ 78.777972, 32.601663 ], [ 78.778404, 32.604155 ], [ 78.777939, 32.605052 ], [ 78.777673, 32.605849 ], [ 78.777673, 32.60668 ], [ 78.777839, 32.607842 ], [ 78.777806, 32.608374 ], [ 78.7796, 32.609237 ], [ 78.780098, 32.611828 ], [ 78.78043, 32.61329 ], [ 78.780762, 32.61432 ], [ 78.781062, 32.614885 ], [ 78.78136, 32.616313 ], [ 78.779533, 32.617044 ], [ 78.77857, 32.617609 ], [ 78.777407, 32.617908 ], [ 78.776444, 32.61824 ], [ 78.775613, 32.618672 ], [ 78.774717, 32.618971 ], [ 78.773919, 32.619104 ], [ 78.773687, 32.620001 ], [ 78.773687, 32.620565 ], [ 78.773388, 32.621562 ], [ 78.772923, 32.622326 ], [ 78.772524, 32.622791 ], [ 78.772424, 32.623555 ], [ 78.772225, 32.624319 ], [ 78.77186, 32.625116 ], [ 78.771694, 32.625847 ], [ 78.77166, 32.626412 ], [ 78.771328, 32.626877 ], [ 78.771129, 32.627276 ], [ 78.771129, 32.627608 ], [ 78.771228, 32.628173 ], [ 78.77073, 32.628937 ], [ 78.770697, 32.629535 ], [ 78.770498, 32.629867 ], [ 78.770431, 32.630133 ], [ 78.770465, 32.630432 ], [ 78.770033, 32.630631 ], [ 78.768969, 32.630996 ], [ 78.768471, 32.631229 ], [ 78.768206, 32.631495 ], [ 78.768206, 32.631694 ], [ 78.767441, 32.632358 ], [ 78.766578, 32.633255 ], [ 78.766345, 32.633521 ], [ 78.766079, 32.633986 ], [ 78.765681, 32.634185 ], [ 78.765016, 32.634418 ], [ 78.762658, 32.634883 ], [ 78.762226, 32.635381 ], [ 78.760997, 32.635747 ], [ 78.760897, 32.636079 ], [ 78.760399, 32.636212 ], [ 78.7601, 32.636245 ], [ 78.759701, 32.63661 ], [ 78.759103, 32.636943 ], [ 78.756147, 32.638338 ], [ 78.754818, 32.639069 ], [ 78.754187, 32.6396 ], [ 78.753124, 32.640298 ], [ 78.75216, 32.64053 ], [ 78.751711, 32.640886 ], [ 78.751315, 32.641352 ], [ 78.751512, 32.642666 ], [ 78.751776, 32.643488 ], [ 78.751874, 32.644671 ], [ 78.751874, 32.64569 ], [ 78.751776, 32.64615 ], [ 78.751447, 32.646479 ], [ 78.750789, 32.646906 ], [ 78.750329, 32.647071 ], [ 78.750099, 32.647531 ], [ 78.749573, 32.647925 ], [ 78.748324, 32.649043 ], [ 78.74747, 32.649601 ], [ 78.747108, 32.650094 ], [ 78.747043, 32.650817 ], [ 78.746648, 32.651442 ], [ 78.744577, 32.653447 ], [ 78.743328, 32.654926 ], [ 78.742145, 32.655287 ], [ 78.741816, 32.657095 ], [ 78.741718, 32.658541 ], [ 78.741455, 32.659593 ], [ 78.740896, 32.66048 ], [ 78.7406, 32.661598 ], [ 78.740502, 32.662222 ], [ 78.740502, 32.662847 ], [ 78.740666, 32.663471 ], [ 78.741291, 32.664293 ], [ 78.743263, 32.666167 ], [ 78.743821, 32.666955 ], [ 78.74415, 32.667843 ], [ 78.74415, 32.668862 ], [ 78.744084, 32.669322 ], [ 78.743624, 32.670867 ], [ 78.743591, 32.671491 ], [ 78.743887, 32.672313 ], [ 78.744906, 32.674515 ], [ 78.744939, 32.674975 ], [ 78.744643, 32.676355 ], [ 78.745366, 32.677604 ], [ 78.745859, 32.678623 ], [ 78.745958, 32.680694 ], [ 78.746319, 32.681384 ], [ 78.748259, 32.683422 ], [ 78.74908, 32.685164 ], [ 78.749869, 32.686577 ], [ 78.749573, 32.687892 ], [ 78.749245, 32.688779 ], [ 78.74862, 32.689634 ], [ 78.748127, 32.690751 ], [ 78.747305, 32.691146 ], [ 78.746385, 32.691705 ], [ 78.745497, 32.692066 ], [ 78.744742, 32.692329 ], [ 78.742737, 32.692822 ], [ 78.742145, 32.693348 ], [ 78.741915, 32.693677 ], [ 78.740633, 32.694597 ], [ 78.740173, 32.69509 ], [ 78.739976, 32.695517 ], [ 78.739516, 32.695747 ], [ 78.738793, 32.695451 ], [ 78.737905, 32.694926 ], [ 78.737248, 32.6944 ], [ 78.736821, 32.693972 ], [ 78.73636, 32.693216 ], [ 78.735375, 32.69016 ], [ 78.735013, 32.688779 ], [ 78.73452, 32.687662 ], [ 78.734027, 32.687136 ], [ 78.733139, 32.68661 ], [ 78.732318, 32.685986 ], [ 78.731529, 32.685164 ], [ 78.731135, 32.684441 ], [ 78.73051, 32.683783 ], [ 78.729853, 32.683192 ], [ 78.729261, 32.682403 ], [ 78.727618, 32.679576 ], [ 78.726862, 32.678558 ], [ 78.725251, 32.676783 ], [ 78.724561, 32.675928 ], [ 78.723739, 32.675106 ], [ 78.723049, 32.674252 ], [ 78.722425, 32.673923 ], [ 78.720485, 32.673397 ], [ 78.719467, 32.673036 ], [ 78.718415, 32.672444 ], [ 78.717593, 32.672181 ], [ 78.716772, 32.672214 ], [ 78.715983, 32.67205 ], [ 78.714536, 32.67113 ], [ 78.713288, 32.670209 ], [ 78.711513, 32.66873 ], [ 78.710461, 32.667744 ], [ 78.709639, 32.667941 ], [ 78.708587, 32.668007 ], [ 78.708029, 32.667974 ], [ 78.706944, 32.667744 ], [ 78.70655, 32.66781 ], [ 78.705991, 32.668171 ], [ 78.705005, 32.668171 ], [ 78.703624, 32.667876 ], [ 78.702014, 32.667087 ], [ 78.701192, 32.666988 ], [ 78.699943, 32.666594 ], [ 78.698859, 32.666167 ], [ 78.698004, 32.665904 ], [ 78.696821, 32.665411 ], [ 78.696197, 32.664983 ], [ 78.695868, 32.664655 ], [ 78.695255, 32.664278 ], [ 78.693647, 32.664058 ], [ 78.691599, 32.663711 ], [ 78.688604, 32.663396 ], [ 78.687028, 32.662954 ], [ 78.685515, 32.66245 ], [ 78.683655, 32.661284 ], [ 78.681669, 32.660212 ], [ 78.674986, 32.657438 ], [ 78.672528, 32.656587 ], [ 78.671141, 32.656492 ], [ 78.669438, 32.656871 ], [ 78.668272, 32.656839 ], [ 78.666665, 32.656713 ], [ 78.665624, 32.65706 ], [ 78.664301, 32.657343 ], [ 78.663733, 32.657217 ], [ 78.662517, 32.6574964 ], [ 78.6613798, 32.6578396 ], [ 78.6596632, 32.6577493 ], [ 78.657217, 32.6577674 ], [ 78.6539554, 32.6576951 ], [ 78.6524749, 32.6559066 ], [ 78.6499429, 32.654913 ], [ 78.6470675, 32.6533051 ], [ 78.6446857, 32.6531425 ], [ 78.6441064, 32.6525644 ], [ 78.6440635, 32.6518598 ], [ 78.6444497, 32.651119 ], [ 78.6441064, 32.6502699 ], [ 78.6432266, 32.6496556 ], [ 78.6420035, 32.6498363 ], [ 78.6410808, 32.6495111 ], [ 78.6408877, 32.6484993 ], [ 78.6388492, 32.6476682 ], [ 78.6374116, 32.647614 ], [ 78.6364031, 32.6483006 ], [ 78.6350083, 32.6481922 ], [ 78.6342358, 32.6472346 ], [ 78.634103, 32.645428 ], [ 78.6333132, 32.643079 ], [ 78.6321544, 32.6416877 ], [ 78.6319613, 32.6397905 ], [ 78.6314678, 32.6379113 ], [ 78.6312961, 32.6356345 ], [ 78.631419, 32.634728 ], [ 78.632022, 32.633824 ], [ 78.632842, 32.632756 ], [ 78.63426, 32.631464 ], [ 78.634859, 32.630455 ], [ 78.635048, 32.628942 ], [ 78.636309, 32.625254 ], [ 78.636656, 32.623741 ], [ 78.637444, 32.622386 ], [ 78.638421, 32.621062 ], [ 78.638894, 32.619832 ], [ 78.63965, 32.618319 ], [ 78.6397444, 32.6171403 ], [ 78.6400372, 32.6163382 ], [ 78.6403485, 32.6155629 ], [ 78.6406328, 32.6148376 ], [ 78.6406586, 32.6140993 ], [ 78.6405191, 32.6128166 ], [ 78.6408189, 32.6114667 ], [ 78.6406536, 32.6103222 ], [ 78.6391394, 32.6089188 ], [ 78.6374175, 32.6076747 ], [ 78.63507, 32.6063159 ], [ 78.6315421, 32.6047579 ], [ 78.6270808, 32.6035886 ], [ 78.6237662, 32.6033485 ], [ 78.619308, 32.603521 ], [ 78.6168048, 32.6035081 ], [ 78.610934, 32.6003567 ], [ 78.608948, 32.599974 ], [ 78.60816, 32.600005 ], [ 78.607088, 32.600131 ], [ 78.606174, 32.600415 ], [ 78.605607, 32.600762 ], [ 78.605071, 32.601235 ], [ 78.604062, 32.601171 ], [ 78.603526, 32.600856 ], [ 78.602707, 32.600762 ], [ 78.601793, 32.600762 ], [ 78.600689, 32.600509 ], [ 78.599429, 32.600478 ], [ 78.598325, 32.600573 ], [ 78.597632, 32.600825 ], [ 78.597127, 32.601077 ], [ 78.596207, 32.60201 ], [ 78.595593, 32.603106 ], [ 78.595363, 32.603738 ], [ 78.591304, 32.604025 ], [ 78.590156, 32.603719 ], [ 78.589371, 32.60368 ], [ 78.585906, 32.60437 ], [ 78.584565, 32.60437 ], [ 78.583014, 32.603738 ], [ 78.582536, 32.60458 ], [ 78.581981, 32.606035 ], [ 78.580928, 32.605767 ], [ 78.580334, 32.605557 ], [ 78.578822, 32.608141 ], [ 78.579013, 32.609615 ], [ 78.578037, 32.613061 ], [ 78.577041, 32.613444 ], [ 78.574706, 32.614191 ], [ 78.5735, 32.614306 ], [ 78.570781, 32.614938 ], [ 78.569843, 32.615378 ], [ 78.5688972, 32.6158639 ], [ 78.5657859, 32.6156831 ], [ 78.5634255, 32.6158458 ], [ 78.562696, 32.6167133 ], [ 78.5623526, 32.6192075 ], [ 78.5616311, 32.6214319 ], [ 78.5613896, 32.6218892 ], [ 78.56093, 32.6221077 ], [ 78.5601005, 32.622312 ], [ 78.5595417, 32.6229666 ], [ 78.5587048, 32.6233071 ], [ 78.5583231, 32.6228799 ], [ 78.5580601, 32.6218939 ], [ 78.5575341, 32.6211379 ], [ 78.5573041, 32.6203159 ], [ 78.5568111, 32.6193959 ], [ 78.556158, 32.617101 ], [ 78.555303, 32.617101 ], [ 78.555073, 32.617232 ], [ 78.553627, 32.617659 ], [ 78.550866, 32.61835 ], [ 78.550012, 32.618514 ], [ 78.54919, 32.618612 ], [ 78.547974, 32.618875 ], [ 78.546528, 32.618875 ], [ 78.546396, 32.617791 ], [ 78.546528, 32.615457 ], [ 78.546429, 32.614438 ], [ 78.546199, 32.61388 ], [ 78.545969, 32.613551 ], [ 78.544687, 32.614044 ], [ 78.543246, 32.614123 ], [ 78.541979, 32.61255 ], [ 78.5402512, 32.6124478 ], [ 78.5384792, 32.6122526 ], [ 78.5355504, 32.6126099 ], [ 78.5340919, 32.613066 ], [ 78.5329771, 32.6137854 ], [ 78.5314077, 32.6135166 ], [ 78.5301017, 32.6129744 ], [ 78.5292006, 32.6123756 ], [ 78.5283037, 32.6118582 ], [ 78.5271835, 32.611508 ], [ 78.5265827, 32.6133877 ], [ 78.5261106, 32.6151952 ], [ 78.5260677, 32.6179062 ], [ 78.5255241, 32.6180584 ], [ 78.5250341, 32.6179245 ], [ 78.5248231, 32.6163157 ], [ 78.5225915, 32.6154121 ], [ 78.5215187, 32.6135685 ], [ 78.5199094, 32.6133516 ], [ 78.5189008, 32.6135865 ], [ 78.5181713, 32.6141288 ], [ 78.5174417, 32.6146529 ], [ 78.5169911, 32.6148337 ], [ 78.5164332, 32.6145806 ], [ 78.5157885, 32.6136404 ], [ 78.5154891, 32.6123394 ], [ 78.5163826, 32.6109554 ], [ 78.5170919, 32.6098997 ], [ 78.5175397, 32.6086829 ], [ 78.5175417, 32.6066103 ], [ 78.5181021, 32.6060259 ], [ 78.5180006, 32.6050475 ], [ 78.5174345, 32.6038344 ], [ 78.5171136, 32.6029335 ], [ 78.5163297, 32.6024813 ], [ 78.5159299, 32.6015043 ], [ 78.5154842, 32.6007495 ], [ 78.5146899, 32.600784 ], [ 78.5137504, 32.6008561 ], [ 78.5128498, 32.5999394 ], [ 78.5121388, 32.5990662 ], [ 78.510801, 32.5972396 ], [ 78.5097169, 32.5960347 ], [ 78.5085153, 32.5945884 ], [ 78.507142, 32.5934676 ], [ 78.5062837, 32.5914428 ], [ 78.50564, 32.5901411 ], [ 78.505268, 32.588957 ], [ 78.503385, 32.586409 ], [ 78.502757, 32.585856 ], [ 78.50224, 32.585191 ], [ 78.502093, 32.584526 ], [ 78.501465, 32.583936 ], [ 78.500948, 32.583603 ], [ 78.499988, 32.583234 ], [ 78.497847, 32.583123 ], [ 78.494782, 32.584194 ], [ 78.493822, 32.584563 ], [ 78.49253, 32.585191 ], [ 78.492345, 32.585228 ], [ 78.491791, 32.5846 ], [ 78.491053, 32.584157 ], [ 78.490167, 32.583714 ], [ 78.489576, 32.583086 ], [ 78.48869, 32.581794 ], [ 78.488062, 32.581462 ], [ 78.487029, 32.581129 ], [ 78.485958, 32.580908 ], [ 78.485145, 32.580428 ], [ 78.484444, 32.579726 ], [ 78.483595, 32.578323 ], [ 78.482856, 32.577474 ], [ 78.480936, 32.57692 ], [ 78.479829, 32.576477 ], [ 78.479127, 32.576293 ], [ 78.478241, 32.576256 ], [ 78.476075, 32.576317 ], [ 78.474693, 32.576495 ], [ 78.473205, 32.577876 ], [ 78.472243, 32.578429 ], [ 78.47141, 32.578988 ], [ 78.470487, 32.57932 ], [ 78.468215, 32.580719 ], [ 78.466593, 32.581289 ], [ 78.465354, 32.580184 ], [ 78.464793, 32.579792 ], [ 78.464445, 32.579659 ], [ 78.463866, 32.579659 ], [ 78.463358, 32.579792 ], [ 78.462814, 32.579864 ], [ 78.461513, 32.57989 ], [ 78.460239, 32.580051 ], [ 78.458492, 32.58014 ], [ 78.45802, 32.58022 ], [ 78.457396, 32.580416 ], [ 78.455936, 32.580679 ], [ 78.453766, 32.581337 ], [ 78.453635, 32.581304 ], [ 78.453372, 32.580712 ], [ 78.453175, 32.579463 ], [ 78.452912, 32.578642 ], [ 78.452583, 32.577853 ], [ 78.452189, 32.577327 ], [ 78.451959, 32.5769 ], [ 78.451762, 32.576308 ], [ 78.4514, 32.575946 ], [ 78.45071, 32.575683 ], [ 78.448672, 32.573974 ], [ 78.448245, 32.573876 ], [ 78.44739, 32.57381 ], [ 78.445977, 32.573514 ], [ 78.443676, 32.573416 ], [ 78.442854, 32.573218 ], [ 78.442394, 32.573186 ], [ 78.439568, 32.573218 ], [ 78.438319, 32.57312 ], [ 78.437103, 32.572594 ], [ 78.436413, 32.572495 ], [ 78.434178, 32.572397 ], [ 78.433652, 32.5722 ], [ 78.432929, 32.571706 ], [ 78.432337, 32.571213 ], [ 78.431745, 32.57049 ], [ 78.430825, 32.570195 ], [ 78.42997, 32.569965 ], [ 78.429018, 32.569866 ], [ 78.425928, 32.5698 ], [ 78.424186, 32.569669 ], [ 78.423134, 32.569537 ], [ 78.422674, 32.569636 ], [ 78.421688, 32.569702 ], [ 78.420998, 32.569636 ], [ 78.420012, 32.56934 ], [ 78.418106, 32.56819 ], [ 78.41712, 32.567894 ], [ 78.416068, 32.567467 ], [ 78.415147, 32.566744 ], [ 78.414654, 32.566086 ], [ 78.413767, 32.563818 ], [ 78.413044, 32.562306 ], [ 78.412945, 32.560564 ], [ 78.412748, 32.559743 ], [ 78.412353, 32.559053 ], [ 78.411795, 32.558527 ], [ 78.410809, 32.557902 ], [ 78.409954, 32.557212 ], [ 78.409067, 32.556423 ], [ 78.408311, 32.555569 ], [ 78.407523, 32.554955 ], [ 78.406774, 32.554856 ], [ 78.405547, 32.554865 ], [ 78.405312, 32.554792 ], [ 78.405393, 32.553366 ], [ 78.405384, 32.552554 ], [ 78.405655, 32.550938 ], [ 78.405438, 32.549837 ], [ 78.40532, 32.548272 ], [ 78.405024, 32.547483 ], [ 78.404597, 32.546924 ], [ 78.403348, 32.546004 ], [ 78.402263, 32.545051 ], [ 78.401606, 32.544591 ], [ 78.4010745, 32.5441632 ], [ 78.4005559, 32.5437942 ], [ 78.3999434, 32.5434718 ], [ 78.3987384, 32.5425941 ], [ 78.3975583, 32.5419369 ], [ 78.3969921, 32.5415693 ], [ 78.3957045, 32.5412894 ], [ 78.3942681, 32.5407509 ], [ 78.3935079, 32.540113 ], [ 78.3928427, 32.5392422 ], [ 78.3923198, 32.5380324 ], [ 78.3928898, 32.5369986 ], [ 78.3928214, 32.5362545 ], [ 78.392839, 32.5353372 ], [ 78.394688, 32.533041 ], [ 78.394688, 32.53241 ], [ 78.395049, 32.531676 ], [ 78.395139, 32.531123 ], [ 78.3950661, 32.5305093 ], [ 78.3960559, 32.5293697 ], [ 78.3968794, 32.528879 ], [ 78.397237, 32.528639 ], [ 78.397842, 32.528536 ], [ 78.398704, 32.527944 ], [ 78.399374, 32.527841 ], [ 78.399554, 32.527236 ], [ 78.399914, 32.527094 ], [ 78.40088, 32.527043 ], [ 78.401652, 32.527094 ], [ 78.402077, 32.526978 ], [ 78.402965, 32.526528 ], [ 78.405311, 32.526146 ], [ 78.406109, 32.526175 ], [ 78.406966, 32.526057 ], [ 78.407734, 32.525495 ], [ 78.408532, 32.524254 ], [ 78.409212, 32.523604 ], [ 78.409774, 32.523249 ], [ 78.410483, 32.522954 ], [ 78.410867, 32.522717 ], [ 78.410365, 32.521949 ], [ 78.4104509, 32.5195577 ], [ 78.4102639, 32.5181553 ], [ 78.412316, 32.517752 ], [ 78.4136917, 32.5173731 ], [ 78.4153496, 32.5168889 ], [ 78.417004, 32.5164531 ], [ 78.4179577, 32.5156936 ], [ 78.417961, 32.514648 ], [ 78.418788, 32.514087 ], [ 78.419734, 32.513259 ], [ 78.421478, 32.511574 ], [ 78.42266, 32.509446 ], [ 78.42334, 32.508796 ], [ 78.424138, 32.508175 ], [ 78.427596, 32.504924 ], [ 78.428039, 32.504126 ], [ 78.42736, 32.503003 ], [ 78.42671, 32.501643 ], [ 78.426089, 32.5012 ], [ 78.426266, 32.500077 ], [ 78.426739, 32.498629 ], [ 78.427389, 32.49718 ], [ 78.428305, 32.495437 ], [ 78.429547, 32.4939 ], [ 78.429902, 32.493309 ], [ 78.430256, 32.492511 ], [ 78.431084, 32.491565 ], [ 78.431882, 32.490796 ], [ 78.432946, 32.490294 ], [ 78.433862, 32.489969 ], [ 78.434778, 32.489378 ], [ 78.435576, 32.488668 ], [ 78.436167, 32.487811 ], [ 78.436581, 32.487427 ], [ 78.437557, 32.486983 ], [ 78.438502, 32.486245 ], [ 78.439035, 32.485565 ], [ 78.43933, 32.484826 ], [ 78.439508, 32.483939 ], [ 78.439655, 32.482727 ], [ 78.439862, 32.482136 ], [ 78.43998, 32.481486 ], [ 78.440039, 32.480363 ], [ 78.440424, 32.479831 ], [ 78.441015, 32.479328 ], [ 78.441695, 32.479062 ], [ 78.442286, 32.478678 ], [ 78.443054, 32.477998 ], [ 78.443734, 32.477525 ], [ 78.445123, 32.476225 ], [ 78.445744, 32.475782 ], [ 78.446512, 32.475545 ], [ 78.447606, 32.475397 ], [ 78.449734, 32.475309 ], [ 78.45065, 32.475013 ], [ 78.4513, 32.474688 ], [ 78.451773, 32.474186 ], [ 78.452099, 32.473506 ], [ 78.45263, 32.472856 ], [ 78.453458, 32.472176 ], [ 78.454404, 32.471555 ], [ 78.454965, 32.471319 ], [ 78.455261, 32.469043 ], [ 78.455143, 32.468511 ], [ 78.45467, 32.467654 ], [ 78.45399, 32.466797 ], [ 78.453458, 32.465378 ], [ 78.453162, 32.465053 ], [ 78.452601, 32.4644352 ], [ 78.4516709, 32.4632224 ], [ 78.4508474, 32.4611741 ], [ 78.4501987, 32.4609954 ], [ 78.4523109, 32.4595416 ], [ 78.4538385, 32.4582329 ], [ 78.4541421, 32.4575231 ], [ 78.4550663, 32.4569387 ], [ 78.4564005, 32.4567994 ], [ 78.456798, 32.456629 ], [ 78.457478, 32.456659 ], [ 78.458364, 32.45657 ], [ 78.460286, 32.45592 ], [ 78.461054, 32.455831 ], [ 78.461645, 32.455476 ], [ 78.462266, 32.454944 ], [ 78.4619864, 32.4544343 ], [ 78.4620134, 32.4539155 ], [ 78.4619976, 32.452734 ], [ 78.4621058, 32.450602 ], [ 78.4617032, 32.4498807 ], [ 78.4623122, 32.4485724 ], [ 78.4626112, 32.4475534 ], [ 78.4635827, 32.4471506 ], [ 78.4641651, 32.4465071 ], [ 78.4647432, 32.4460288 ], [ 78.4653079, 32.4455544 ], [ 78.4654731, 32.4448179 ], [ 78.4663873, 32.4445559 ], [ 78.4677495, 32.4445767 ], [ 78.468558, 32.4443285 ], [ 78.4693965, 32.4443701 ], [ 78.4724284, 32.4434269 ], [ 78.4720945, 32.4427552 ], [ 78.4720832, 32.4418673 ], [ 78.472197, 32.441319 ], [ 78.47202, 32.440817 ], [ 78.471546, 32.439989 ], [ 78.471458, 32.439516 ], [ 78.471665, 32.438866 ], [ 78.471931, 32.437654 ], [ 78.471931, 32.436413 ], [ 78.472108, 32.435349 ], [ 78.47202, 32.434521 ], [ 78.471931, 32.432009 ], [ 78.471753, 32.430915 ], [ 78.471753, 32.429851 ], [ 78.471635, 32.428403 ], [ 78.471606, 32.42728 ], [ 78.471458, 32.426068 ], [ 78.47128, 32.425211 ], [ 78.470955, 32.424295 ], [ 78.46998, 32.422758 ], [ 78.469803, 32.422226 ], [ 78.469951, 32.421575 ], [ 78.469951, 32.420452 ], [ 78.469773, 32.419772 ], [ 78.469862, 32.418649 ], [ 78.471162, 32.415782 ], [ 78.47131, 32.41528 ], [ 78.471339, 32.414452 ], [ 78.472817, 32.41194 ], [ 78.47199, 32.411172 ], [ 78.471399, 32.410314 ], [ 78.471073, 32.40993 ], [ 78.47128, 32.408866 ], [ 78.471399, 32.407832 ], [ 78.471339, 32.406502 ], [ 78.471073, 32.404462 ], [ 78.471073, 32.403812 ], [ 78.470601, 32.403073 ], [ 78.470098, 32.402718 ], [ 78.470128, 32.402039 ], [ 78.470512, 32.399379 ], [ 78.470837, 32.398315 ], [ 78.470955, 32.397635 ], [ 78.470926, 32.397103 ], [ 78.470601, 32.396452 ], [ 78.47001, 32.395654 ], [ 78.468384, 32.393881 ], [ 78.465753, 32.393852 ], [ 78.464483, 32.393526 ], [ 78.463212, 32.393054 ], [ 78.460729, 32.392581 ], [ 78.459399, 32.392078 ], [ 78.458305, 32.391812 ], [ 78.457478, 32.391694 ], [ 78.456946, 32.391044 ], [ 78.456591, 32.389891 ], [ 78.456147, 32.389359 ], [ 78.455379, 32.38865 ], [ 78.454463, 32.388206 ], [ 78.454315, 32.38729 ], [ 78.454345, 32.386462 ], [ 78.454759, 32.385191 ], [ 78.45529, 32.383802 ], [ 78.455941, 32.38262 ], [ 78.45736, 32.380315 ], [ 78.458098, 32.379517 ], [ 78.459369, 32.378541 ], [ 78.460551, 32.377773 ], [ 78.46132, 32.377211 ], [ 78.462236, 32.376118 ], [ 78.462916, 32.375497 ], [ 78.464778, 32.374551 ], [ 78.465162, 32.374256 ], [ 78.46534, 32.373369 ], [ 78.465931, 32.372689 ], [ 78.466256, 32.371832 ], [ 78.466788, 32.36997 ], [ 78.466936, 32.369202 ], [ 78.467143, 32.368758 ], [ 78.467645, 32.368256 ], [ 78.468177, 32.367399 ], [ 78.468768, 32.365803 ], [ 78.469419, 32.364916 ], [ 78.469862, 32.364709 ], [ 78.471546, 32.364679 ], [ 78.472729, 32.364561 ], [ 78.474088, 32.36465 ], [ 78.475832, 32.364975 ], [ 78.477546, 32.365507 ], [ 78.480975, 32.366482 ], [ 78.482571, 32.363941 ], [ 78.483546, 32.362492 ], [ 78.484108, 32.361458 ], [ 78.485231, 32.358946 ], [ 78.485674, 32.357763 ], [ 78.485674, 32.356108 ], [ 78.484817, 32.355842 ], [ 78.484132, 32.355505 ], [ 78.484115, 32.354906 ], [ 78.483072, 32.353811 ], [ 78.482131, 32.352357 ], [ 78.480865, 32.351502 ], [ 78.480163, 32.351228 ], [ 78.479616, 32.349808 ], [ 78.480403, 32.348936 ], [ 78.482011, 32.347464 ], [ 78.481327, 32.346079 ], [ 78.48107, 32.344299 ], [ 78.481036, 32.34341 ], [ 78.480916, 32.343102 ], [ 78.48018, 32.342503 ], [ 78.479633, 32.341904 ], [ 78.478897, 32.34134 ], [ 78.478042, 32.340399 ], [ 78.477939, 32.33992 ], [ 78.478145, 32.338654 ], [ 78.478093, 32.337833 ], [ 78.477746, 32.336767 ], [ 78.477351, 32.335814 ], [ 78.477187, 32.335025 ], [ 78.476792, 32.333776 ], [ 78.475938, 32.33233 ], [ 78.476786, 32.331284 ], [ 78.477699, 32.330393 ], [ 78.477226, 32.329435 ], [ 78.476907, 32.328455 ], [ 78.477017, 32.327927 ], [ 78.478106, 32.326815 ], [ 78.478349, 32.326265 ], [ 78.478536, 32.325593 ], [ 78.478811, 32.325087 ], [ 78.47946, 32.324668 ], [ 78.479945, 32.324723 ], [ 78.480209, 32.324811 ], [ 78.480705, 32.324767 ], [ 78.481376, 32.324569 ], [ 78.482999, 32.324394 ], [ 78.483755, 32.324559 ], [ 78.484478, 32.324559 ], [ 78.485135, 32.324263 ], [ 78.485924, 32.324 ], [ 78.486647, 32.323934 ], [ 78.487502, 32.323967 ], [ 78.488217, 32.324167 ], [ 78.488752, 32.324763 ], [ 78.48944, 32.324747 ], [ 78.490158, 32.32464 ], [ 78.490586, 32.324411 ], [ 78.491259, 32.323953 ], [ 78.491962, 32.323876 ], [ 78.492466, 32.323769 ], [ 78.493017, 32.323632 ], [ 78.493506, 32.323402 ], [ 78.493949, 32.323402 ], [ 78.495416, 32.323815 ], [ 78.49615, 32.324075 ], [ 78.496746, 32.324426 ], [ 78.497358, 32.324564 ], [ 78.497877, 32.323586 ], [ 78.498504, 32.322592 ], [ 78.499116, 32.321736 ], [ 78.499589, 32.321354 ], [ 78.500568, 32.320238 ], [ 78.501087, 32.320009 ], [ 78.501378, 32.319841 ], [ 78.501638, 32.319596 ], [ 78.502356, 32.319238 ], [ 78.502279, 32.31842 ], [ 78.503135, 32.315149 ], [ 78.503447, 32.311917 ], [ 78.503797, 32.309775 ], [ 78.504693, 32.308374 ], [ 78.506601, 32.306699 ], [ 78.507652, 32.30557 ], [ 78.509015, 32.304713 ], [ 78.509956, 32.304188 ], [ 78.510376, 32.303065 ], [ 78.509916, 32.302697 ], [ 78.506834, 32.29934 ], [ 78.50551, 32.298911 ], [ 78.504693, 32.297977 ], [ 78.504108, 32.296964 ], [ 78.503213, 32.296536 ], [ 78.501733, 32.296303 ], [ 78.500487, 32.295952 ], [ 78.499631, 32.295446 ], [ 78.499164, 32.295018 ], [ 78.498783, 32.293832 ], [ 78.498804, 32.293183 ], [ 78.499223, 32.292575 ], [ 78.499348, 32.292177 ], [ 78.498908, 32.291527 ], [ 78.498741, 32.290773 ], [ 78.498426, 32.289725 ], [ 78.496959, 32.286728 ], [ 78.496834, 32.286058 ], [ 78.494948, 32.284235 ], [ 78.49303, 32.283197 ], [ 78.492767, 32.281685 ], [ 78.491781, 32.280074 ], [ 78.490894, 32.278957 ], [ 78.489908, 32.278004 ], [ 78.489086, 32.277609 ], [ 78.48856, 32.27659 ], [ 78.488363, 32.275637 ], [ 78.489546, 32.274947 ], [ 78.490565, 32.274487 ], [ 78.491309, 32.273919 ], [ 78.492411, 32.275145 ], [ 78.493153, 32.275485 ], [ 78.49439, 32.275732 ], [ 78.495597, 32.275887 ], [ 78.496741, 32.275949 ], [ 78.497731, 32.275732 ], [ 78.498535, 32.275299 ], [ 78.500144, 32.273845 ], [ 78.501226, 32.273196 ], [ 78.501752, 32.272763 ], [ 78.503423, 32.271649 ], [ 78.504351, 32.271123 ], [ 78.505278, 32.270474 ], [ 78.505835, 32.269855 ], [ 78.506423, 32.269329 ], [ 78.50763, 32.268896 ], [ 78.508558, 32.268277 ], [ 78.509424, 32.267782 ], [ 78.511342, 32.266576 ], [ 78.512239, 32.266267 ], [ 78.513692, 32.266019 ], [ 78.514713, 32.265772 ], [ 78.515796, 32.265308 ], [ 78.516847, 32.264689 ], [ 78.517095, 32.263916 ], [ 78.517621, 32.263142 ], [ 78.518363, 32.262493 ], [ 78.518982, 32.262122 ], [ 78.520003, 32.26206 ], [ 78.520188, 32.261967 ], [ 78.520374, 32.261163 ], [ 78.520714, 32.26042 ], [ 78.521023, 32.259585 ], [ 78.521333, 32.258534 ], [ 78.521302, 32.256739 ], [ 78.521518, 32.256121 ], [ 78.521921, 32.255409 ], [ 78.52257, 32.254419 ], [ 78.523684, 32.252378 ], [ 78.523777, 32.252068 ], [ 78.523653, 32.250553 ], [ 78.523746, 32.249903 ], [ 78.524179, 32.249192 ], [ 78.524488, 32.24848 ], [ 78.525045, 32.246593 ], [ 78.525385, 32.246253 ], [ 78.526189, 32.24582 ], [ 78.527148, 32.245573 ], [ 78.52755, 32.24517 ], [ 78.528262, 32.244706 ], [ 78.529035, 32.244459 ], [ 78.529901, 32.244583 ], [ 78.531077, 32.244335 ], [ 78.531788, 32.243809 ], [ 78.532283, 32.243253 ], [ 78.533025, 32.241458 ], [ 78.533582, 32.240561 ], [ 78.534139, 32.239788 ], [ 78.534882, 32.239077 ], [ 78.535686, 32.238458 ], [ 78.536459, 32.237994 ], [ 78.537232, 32.237375 ], [ 78.537604, 32.237159 ], [ 78.537789, 32.236757 ], [ 78.53782, 32.23521 ], [ 78.538068, 32.234189 ], [ 78.539027, 32.232302 ], [ 78.539614, 32.231343 ], [ 78.540028, 32.230109 ], [ 78.541762, 32.229448 ], [ 78.542226, 32.228844 ], [ 78.542737, 32.228427 ], [ 78.542783, 32.227266 ], [ 78.543154, 32.226477 ], [ 78.543194, 32.225255 ], [ 78.543039, 32.222471 ], [ 78.543256, 32.221883 ], [ 78.54573, 32.220151 ], [ 78.547277, 32.21913 ], [ 78.548854, 32.217954 ], [ 78.550401, 32.216439 ], [ 78.551948, 32.215263 ], [ 78.552845, 32.214923 ], [ 78.553618, 32.214304 ], [ 78.554206, 32.213284 ], [ 78.554639, 32.213098 ], [ 78.554979, 32.211551 ], [ 78.555412, 32.210778 ], [ 78.555938, 32.210376 ], [ 78.556475, 32.209229 ], [ 78.557434, 32.208196 ], [ 78.55795, 32.207434 ], [ 78.558762, 32.205761 ], [ 78.559057, 32.205393 ], [ 78.559205, 32.203893 ], [ 78.559549, 32.202933 ], [ 78.559918, 32.202245 ], [ 78.560828, 32.202712 ], [ 78.56127, 32.203179 ], [ 78.562328, 32.203524 ], [ 78.563828, 32.203745 ], [ 78.565008, 32.203647 ], [ 78.56614, 32.203106 ], [ 78.568353, 32.202343 ], [ 78.570812, 32.202245 ], [ 78.571869, 32.202048 ], [ 78.572877, 32.202048 ], [ 78.573714, 32.202196 ], [ 78.57455, 32.20254 ], [ 78.575558, 32.203302 ], [ 78.57605, 32.203573 ], [ 78.57728, 32.203696 ], [ 78.577624, 32.203499 ], [ 78.578362, 32.20345 ], [ 78.579444, 32.203843 ], [ 78.580108, 32.203893 ], [ 78.58087, 32.20372 ], [ 78.581927, 32.203179 ], [ 78.582813, 32.202884 ], [ 78.584903, 32.201851 ], [ 78.586944, 32.201433 ], [ 78.588075, 32.20104 ], [ 78.588936, 32.201015 ], [ 78.591149, 32.201089 ], [ 78.592354, 32.200696 ], [ 78.593535, 32.199982 ], [ 78.59469, 32.199048 ], [ 78.595748, 32.197991 ], [ 78.596584, 32.19681 ], [ 78.597297, 32.195531 ], [ 78.597814, 32.194818 ], [ 78.598527, 32.194105 ], [ 78.599019, 32.193908 ], [ 78.598945, 32.193072 ], [ 78.598797, 32.192679 ], [ 78.598625, 32.189974 ], [ 78.598699, 32.189359 ], [ 78.598945, 32.188695 ], [ 78.599117, 32.187883 ], [ 78.599338, 32.186236 ], [ 78.599658, 32.185941 ], [ 78.600027, 32.185473 ], [ 78.600199, 32.184613 ], [ 78.600297, 32.183309 ], [ 78.600199, 32.181096 ], [ 78.600125, 32.180432 ], [ 78.599854, 32.179276 ], [ 78.599805, 32.177973 ], [ 78.600027, 32.176866 ], [ 78.600076, 32.176325 ], [ 78.600076, 32.175268 ], [ 78.599978, 32.174481 ], [ 78.599682, 32.173915 ], [ 78.597863, 32.17362 ], [ 78.597076, 32.173104 ], [ 78.596461, 32.172612 ], [ 78.59619, 32.171948 ], [ 78.595846, 32.171825 ], [ 78.595428, 32.171481 ], [ 78.594813, 32.170792 ], [ 78.594198, 32.170251 ], [ 78.593387, 32.169317 ], [ 78.591444, 32.167915 ], [ 78.591592, 32.167153 ], [ 78.592576, 32.165751 ], [ 78.593141, 32.164202 ], [ 78.593756, 32.163316 ], [ 78.594371, 32.16221 ], [ 78.595133, 32.161275 ], [ 78.595699, 32.160218 ], [ 78.596117, 32.159111 ], [ 78.59675, 32.158104 ], [ 78.597801, 32.157857 ], [ 78.600029, 32.157083 ], [ 78.600431, 32.156898 ], [ 78.600833, 32.156434 ], [ 78.601451, 32.156062 ], [ 78.602163, 32.156032 ], [ 78.602534, 32.15566 ], [ 78.603277, 32.155413 ], [ 78.603617, 32.155073 ], [ 78.603803, 32.154578 ], [ 78.604081, 32.154206 ], [ 78.605071, 32.153711 ], [ 78.605906, 32.153124 ], [ 78.607607, 32.15167 ], [ 78.60835, 32.150804 ], [ 78.609587, 32.150958 ], [ 78.610577, 32.151237 ], [ 78.611319, 32.151299 ], [ 78.612185, 32.150247 ], [ 78.612897, 32.149195 ], [ 78.613453, 32.148546 ], [ 78.614351, 32.147834 ], [ 78.615774, 32.14737 ], [ 78.616176, 32.14669 ], [ 78.616794, 32.145824 ], [ 78.618527, 32.143782 ], [ 78.619393, 32.143194 ], [ 78.620506, 32.142204 ], [ 78.622641, 32.140534 ], [ 78.623569, 32.139977 ], [ 78.624651, 32.139513 ], [ 78.625455, 32.138987 ], [ 78.62626, 32.138276 ], [ 78.626817, 32.137936 ], [ 78.627157, 32.1371 ], [ 78.627652, 32.136389 ], [ 78.628332, 32.135554 ], [ 78.629508, 32.133698 ], [ 78.629879, 32.132522 ], [ 78.630838, 32.128872 ], [ 78.631055, 32.127418 ], [ 78.630931, 32.126552 ], [ 78.630683, 32.125593 ], [ 78.631766, 32.125624 ], [ 78.633096, 32.12547 ], [ 78.634426, 32.125593 ], [ 78.635354, 32.125624 ], [ 78.636406, 32.125408 ], [ 78.638107, 32.124944 ], [ 78.639808, 32.124634 ], [ 78.641231, 32.124232 ], [ 78.642778, 32.123676 ], [ 78.644108, 32.122778 ], [ 78.645284, 32.121789 ], [ 78.647294, 32.120242 ], [ 78.647975, 32.119562 ], [ 78.649429, 32.119159 ], [ 78.651408, 32.11851 ], [ 78.653079, 32.118015 ], [ 78.655863, 32.116561 ], [ 78.656729, 32.116004 ], [ 78.657997, 32.116097 ], [ 78.65877, 32.116035 ], [ 78.659574, 32.115726 ], [ 78.660224, 32.115602 ], [ 78.661121, 32.115602 ], [ 78.662111, 32.115819 ], [ 78.662792, 32.116066 ], [ 78.663596, 32.116623 ], [ 78.664431, 32.116808 ], [ 78.666442, 32.116468 ], [ 78.667772, 32.116561 ], [ 78.669133, 32.116778 ], [ 78.670803, 32.11687 ], [ 78.672567, 32.11718 ], [ 78.673587, 32.117149 ], [ 78.675103, 32.115571 ], [ 78.674794, 32.11421 ], [ 78.675404, 32.113632 ], [ 78.676619, 32.113468 ], [ 78.679611, 32.113384 ], [ 78.68193, 32.113477 ], [ 78.682828, 32.113632 ], [ 78.685519, 32.109548 ], [ 78.68623, 32.107847 ], [ 78.686478, 32.106703 ], [ 78.686478, 32.105867 ], [ 78.687561, 32.104475 ], [ 78.688241, 32.1033 ], [ 78.688705, 32.103022 ], [ 78.689602, 32.102032 ], [ 78.690499, 32.101475 ], [ 78.690777, 32.101196 ], [ 78.691149, 32.100516 ], [ 78.691582, 32.100176 ], [ 78.692046, 32.098815 ], [ 78.692664, 32.096526 ], [ 78.691767, 32.095443 ], [ 78.692262, 32.093401 ], [ 78.691767, 32.093061 ], [ 78.691334, 32.092535 ], [ 78.691087, 32.090494 ], [ 78.690716, 32.089566 ], [ 78.690499, 32.089164 ], [ 78.690808, 32.08839 ], [ 78.690747, 32.088112 ], [ 78.69053, 32.087988 ], [ 78.689942, 32.087493 ], [ 78.689509, 32.087277 ], [ 78.689231, 32.08706 ], [ 78.688612, 32.086132 ], [ 78.688334, 32.086008 ], [ 78.687313, 32.086008 ], [ 78.682642, 32.0801 ], [ 78.684312, 32.079203 ], [ 78.684838, 32.078677 ], [ 78.68524, 32.078059 ], [ 78.686106, 32.075151 ], [ 78.68654, 32.074594 ], [ 78.687499, 32.073604 ], [ 78.691533, 32.07049 ], [ 78.69444, 32.068521 ], [ 78.695143, 32.068193 ], [ 78.698331, 32.068099 ], [ 78.699128, 32.067958 ], [ 78.700253, 32.067865 ], [ 78.701801, 32.067208 ], [ 78.703864, 32.065989 ], [ 78.705739, 32.064442 ], [ 78.706443, 32.062895 ], [ 78.706583, 32.059753 ], [ 78.707427, 32.056753 ], [ 78.708318, 32.05605 ], [ 78.709068, 32.055581 ], [ 78.709443, 32.055065 ], [ 78.709537, 32.054502 ], [ 78.710006, 32.054315 ], [ 78.710944, 32.054174 ], [ 78.711178, 32.052955 ], [ 78.710944, 32.051736 ], [ 78.710944, 32.050939 ], [ 78.71158, 32.049557 ], [ 78.712384, 32.048272 ], [ 78.712705, 32.046626 ], [ 78.713307, 32.045863 ], [ 78.71423, 32.045381 ], [ 78.715475, 32.04498 ], [ 78.716519, 32.044819 ], [ 78.716759, 32.044659 ], [ 78.717, 32.043936 ], [ 78.717362, 32.043495 ], [ 78.718004, 32.043254 ], [ 78.718245, 32.042451 ], [ 78.718566, 32.04209 ], [ 78.719329, 32.041568 ], [ 78.720252, 32.041246 ], [ 78.720894, 32.040885 ], [ 78.721376, 32.040444 ], [ 78.721938, 32.039761 ], [ 78.722059, 32.039038 ], [ 78.722139, 32.038115 ], [ 78.722059, 32.03679 ], [ 78.721416, 32.035947 ], [ 78.721215, 32.034783 ], [ 78.720814, 32.031371 ], [ 78.720894, 32.029805 ], [ 78.721698, 32.029002 ], [ 78.722902, 32.027958 ], [ 78.724588, 32.026272 ], [ 78.724788, 32.022859 ], [ 78.72519, 32.021454 ], [ 78.726796, 32.019126 ], [ 78.727559, 32.016918 ], [ 78.728281, 32.016356 ], [ 78.730048, 32.015553 ], [ 78.731092, 32.01475 ], [ 78.732055, 32.014268 ], [ 78.733741, 32.013546 ], [ 78.734263, 32.013224 ], [ 78.734062, 32.011659 ], [ 78.733661, 32.010976 ], [ 78.73354, 32.010334 ], [ 78.7335, 32.009651 ], [ 78.733621, 32.008728 ], [ 78.7333, 32.007885 ], [ 78.733621, 32.007243 ], [ 78.733741, 32.006239 ], [ 78.734384, 32.004954 ], [ 78.735548, 32.003951 ], [ 78.738197, 32.001863 ], [ 78.73896, 32.001582 ], [ 78.739803, 32.001422 ], [ 78.741891, 32.001703 ], [ 78.7443, 32.002104 ], [ 78.746106, 32.002144 ], [ 78.74731, 32.002265 ], [ 78.747792, 32.002746 ], [ 78.748796, 32.003228 ], [ 78.75, 32.003389 ], [ 78.751044, 32.003188 ], [ 78.752489, 32.002746 ], [ 78.753654, 32.002265 ], [ 78.754577, 32.002024 ], [ 78.758379, 32.003043 ], [ 78.765553, 32.003881 ], [ 78.766863, 32.003567 ], [ 78.767544, 32.001743 ], [ 78.768224, 31.998906 ], [ 78.769672, 31.996925 ], [ 78.7713394, 31.9955779 ], [ 78.773987, 31.9951119 ], [ 78.7788651, 31.9935742 ], [ 78.7769368, 31.9914396 ], [ 78.7752529, 31.9893307 ], [ 78.7752993, 31.9865588 ], [ 78.775135, 31.9851151 ], [ 78.7747246, 31.9840094 ], [ 78.7749832, 31.981846 ], [ 78.775304, 31.97819 ], [ 78.7750467, 31.9756364 ], [ 78.773303, 31.974044 ], [ 78.774314, 31.972666 ], [ 78.776683, 31.969479 ], [ 78.77807, 31.968374 ], [ 78.778908, 31.967117 ], [ 78.779118, 31.966646 ], [ 78.777243, 31.964525 ], [ 78.775821, 31.963233 ], [ 78.77496, 31.96306 ], [ 78.773107, 31.963017 ], [ 78.771524, 31.963137 ], [ 78.767806, 31.962246 ], [ 78.767387, 31.961461 ], [ 78.766548, 31.961147 ], [ 78.765816, 31.959837 ], [ 78.764768, 31.958738 ], [ 78.765449, 31.9568 ], [ 78.764297, 31.954181 ], [ 78.764401, 31.951667 ], [ 78.763982, 31.951039 ], [ 78.763721, 31.949782 ], [ 78.763302, 31.949049 ], [ 78.763404, 31.947689 ], [ 78.767908, 31.945556 ], [ 78.7689624, 31.9439402 ], [ 78.769541, 31.9420346 ], [ 78.7688305, 31.9373513 ], [ 78.7681652, 31.9363925 ], [ 78.7688994, 31.9352199 ], [ 78.7698817, 31.9314608 ], [ 78.7693776, 31.9285752 ], [ 78.7669738, 31.9258333 ], [ 78.7658578, 31.9244309 ], [ 78.7644752, 31.9237394 ], [ 78.7629295, 31.9235001 ], [ 78.7616323, 31.9244771 ], [ 78.7603952, 31.9241221 ], [ 78.759861, 31.9234596 ], [ 78.7597582, 31.9229244 ], [ 78.759692, 31.9220733 ], [ 78.7587307, 31.9208262 ], [ 78.7577493, 31.9196562 ], [ 78.7570227, 31.917597 ], [ 78.7558961, 31.9161038 ], [ 78.7535325, 31.9149243 ], [ 78.751296, 31.913689 ], [ 78.7510057, 31.9124492 ], [ 78.750607, 31.9119992 ], [ 78.7504088, 31.9116326 ], [ 78.749843, 31.910815 ], [ 78.749622, 31.910215 ], [ 78.749906, 31.908857 ], [ 78.750159, 31.908004 ], [ 78.74918, 31.907025 ], [ 78.746969, 31.905794 ], [ 78.7427484, 31.9022342 ], [ 78.744948, 31.897298 ], [ 78.745895, 31.895371 ], [ 78.745958, 31.894898 ], [ 78.746761, 31.8919462 ], [ 78.7452439, 31.8895833 ], [ 78.7425244, 31.886779 ], [ 78.741466, 31.8856479 ], [ 78.7450194, 31.8788834 ], [ 78.7465928, 31.8770371 ], [ 78.7483987, 31.8754174 ], [ 78.7489956, 31.8733883 ], [ 78.7473664, 31.870869 ], [ 78.745346, 31.867962 ], [ 78.743499, 31.865054 ], [ 78.7415563, 31.8610171 ], [ 78.739152, 31.8423404 ], [ 78.735384, 31.8325607 ], [ 78.727496, 31.828978 ], [ 78.725948, 31.82822 ], [ 78.723959, 31.827367 ], [ 78.722411, 31.826419 ], [ 78.720895, 31.825345 ], [ 78.717958, 31.823072 ], [ 78.7166, 31.821777 ], [ 78.715684, 31.820798 ], [ 78.715337, 31.819976 ], [ 78.715179, 31.818966 ], [ 78.714768, 31.81846 ], [ 78.713789, 31.817734 ], [ 78.708799, 31.814323 ], [ 78.705009, 31.811039 ], [ 78.703461, 31.80848 ], [ 78.702672, 31.807722 ], [ 78.702198, 31.807091 ], [ 78.702103, 31.806491 ], [ 78.702451, 31.805543 ], [ 78.703019, 31.804722 ], [ 78.704188, 31.802764 ], [ 78.704535, 31.801722 ], [ 78.704599, 31.800774 ], [ 78.704409, 31.7997 ], [ 78.70343, 31.795405 ], [ 78.703651, 31.794142 ], [ 78.704061, 31.792689 ], [ 78.70422, 31.791678 ], [ 78.704903, 31.790362 ], [ 78.705554, 31.788323 ], [ 78.707245, 31.784897 ], [ 78.707245, 31.784116 ], [ 78.706682, 31.783206 ], [ 78.705901, 31.782685 ], [ 78.7052822, 31.7814079 ], [ 78.705132, 31.7811343 ], [ 78.7053251, 31.7801311 ], [ 78.7049603, 31.7790184 ], [ 78.7052178, 31.7776321 ], [ 78.705647, 31.7764829 ], [ 78.7057113, 31.774002 ], [ 78.706595, 31.773274 ], [ 78.707202, 31.772667 ], [ 78.707722, 31.772667 ], [ 78.707809, 31.772407 ], [ 78.708156, 31.77206 ], [ 78.709153, 31.771973 ], [ 78.709631, 31.771105 ], [ 78.709977, 31.770802 ], [ 78.711472, 31.770456 ], [ 78.712133, 31.770257 ], [ 78.712595, 31.769894 ], [ 78.71309, 31.769366 ], [ 78.714015, 31.769036 ], [ 78.715005, 31.768573 ], [ 78.71626, 31.76788 ], [ 78.716393, 31.767186 ], [ 78.716756, 31.766922 ], [ 78.71702, 31.766493 ], [ 78.717483, 31.765931 ], [ 78.71811, 31.765403 ], [ 78.718704, 31.765172 ], [ 78.719332, 31.763421 ], [ 78.71953, 31.761341 ], [ 78.721412, 31.761275 ], [ 78.722073, 31.761176 ], [ 78.722997, 31.760152 ], [ 78.724054, 31.759987 ], [ 78.725474, 31.758071 ], [ 78.726003, 31.755661 ], [ 78.726168, 31.754307 ], [ 78.725805, 31.752721 ], [ 78.725442, 31.752259 ], [ 78.724946, 31.752028 ], [ 78.724351, 31.751929 ], [ 78.724748, 31.750872 ], [ 78.725144, 31.750145 ], [ 78.725838, 31.749122 ], [ 78.726267, 31.748263 ], [ 78.72696, 31.747768 ], [ 78.728083, 31.746447 ], [ 78.729438, 31.745456 ], [ 78.729074, 31.744696 ], [ 78.728579, 31.744168 ], [ 78.727225, 31.74321 ], [ 78.727621, 31.741427 ], [ 78.728183, 31.740667 ], [ 78.72848, 31.740007 ], [ 78.728942, 31.738587 ], [ 78.729503, 31.737266 ], [ 78.729966, 31.736308 ], [ 78.730461, 31.735615 ], [ 78.730989, 31.735284 ], [ 78.731188, 31.734657 ], [ 78.731122, 31.734426 ], [ 78.730725, 31.733897 ], [ 78.729999, 31.733204 ], [ 78.730131, 31.73294 ], [ 78.730626, 31.732444 ], [ 78.731155, 31.731817 ], [ 78.731716, 31.730793 ], [ 78.73274, 31.730199 ], [ 78.732641, 31.72934 ], [ 78.732674, 31.728647 ], [ 78.733004, 31.727392 ], [ 78.733334, 31.726962 ], [ 78.733995, 31.726302 ], [ 78.734391, 31.72574 ], [ 78.734424, 31.724882 ], [ 78.734325, 31.723825 ], [ 78.735217, 31.723495 ], [ 78.736339, 31.723164 ], [ 78.737, 31.723065 ], [ 78.737462, 31.722537 ], [ 78.737859, 31.721943 ], [ 78.738321, 31.721051 ], [ 78.738849, 31.720357 ], [ 78.739246, 31.720159 ], [ 78.740699, 31.71973 ], [ 78.741029, 31.719532 ], [ 78.741326, 31.719201 ], [ 78.741525, 31.719069 ], [ 78.742845, 31.718904 ], [ 78.743076, 31.718211 ], [ 78.743274, 31.717319 ], [ 78.743274, 31.716064 ], [ 78.743374, 31.714743 ], [ 78.744365, 31.712597 ], [ 78.744761, 31.711276 ], [ 78.745058, 31.709889 ], [ 78.74519, 31.708435 ], [ 78.745157, 31.706982 ], [ 78.745025, 31.705628 ], [ 78.745487, 31.705001 ], [ 78.746313, 31.704175 ], [ 78.747072, 31.702854 ], [ 78.747535, 31.701632 ], [ 78.748096, 31.701137 ], [ 78.748658, 31.700444 ], [ 78.749979, 31.699453 ], [ 78.752059, 31.697636 ], [ 78.753347, 31.696051 ], [ 78.753644, 31.695325 ], [ 78.753743, 31.694598 ], [ 78.753711, 31.694004 ], [ 78.753281, 31.69298 ], [ 78.752984, 31.691758 ], [ 78.753017, 31.6908 ], [ 78.753677, 31.688951 ], [ 78.752488, 31.687564 ], [ 78.75163, 31.686936 ], [ 78.750342, 31.686243 ], [ 78.749384, 31.685417 ], [ 78.748856, 31.684757 ], [ 78.74945, 31.683205 ], [ 78.74978, 31.682511 ], [ 78.750144, 31.681851 ], [ 78.75087, 31.680827 ], [ 78.751134, 31.680167 ], [ 78.752191, 31.679869 ], [ 78.752819, 31.679539 ], [ 78.753545, 31.679044 ], [ 78.754206, 31.678119 ], [ 78.757277, 31.676633 ], [ 78.757806, 31.67627 ], [ 78.760348, 31.675114 ], [ 78.761009, 31.674916 ], [ 78.762396, 31.674817 ], [ 78.763486, 31.674784 ], [ 78.764642, 31.674883 ], [ 78.767779, 31.674651 ], [ 78.767911, 31.674817 ], [ 78.769166, 31.674949 ], [ 78.770421, 31.675345 ], [ 78.772402, 31.675807 ], [ 78.773591, 31.676699 ], [ 78.774879, 31.676699 ], [ 78.775176, 31.676468 ], [ 78.775573, 31.676369 ], [ 78.77587, 31.676567 ], [ 78.77696, 31.676699 ], [ 78.777323, 31.67693 ], [ 78.777818, 31.677095 ], [ 78.779007, 31.677161 ], [ 78.779701, 31.67726 ], [ 78.779998, 31.677458 ], [ 78.780526, 31.677624 ], [ 78.781121, 31.677723 ], [ 78.782409, 31.677624 ], [ 78.783102, 31.677624 ], [ 78.784027, 31.677888 ], [ 78.785117, 31.67802 ], [ 78.785645, 31.677789 ], [ 78.786239, 31.677657 ], [ 78.786933, 31.677723 ], [ 78.788089, 31.677921 ], [ 78.788749, 31.678185 ], [ 78.789245, 31.678647 ], [ 78.790037, 31.679671 ], [ 78.795817, 31.68195 ], [ 78.796774, 31.682247 ], [ 78.797897, 31.682181 ], [ 78.798063, 31.681719 ], [ 78.798426, 31.681587 ], [ 78.798756, 31.681553 ], [ 78.798822, 31.681487 ], [ 78.799317, 31.680332 ], [ 78.799681, 31.6801 ], [ 78.799912, 31.679671 ], [ 78.800836, 31.677756 ], [ 78.800836, 31.677458 ], [ 78.800737, 31.676963 ], [ 78.799747, 31.67551 ], [ 78.799218, 31.673727 ], [ 78.798459, 31.672042 ], [ 78.798227, 31.671151 ], [ 78.798194, 31.669566 ], [ 78.798063, 31.668839 ], [ 78.798822, 31.667221 ], [ 78.798921, 31.666296 ], [ 78.798888, 31.665074 ], [ 78.798921, 31.66448 ], [ 78.799251, 31.663588 ], [ 78.799549, 31.662597 ], [ 78.799648, 31.662102 ], [ 78.799515, 31.661541 ], [ 78.799218, 31.661012 ], [ 78.798822, 31.660649 ], [ 78.798459, 31.660154 ], [ 78.798393, 31.659427 ], [ 78.798261, 31.658932 ], [ 78.798888, 31.657082 ], [ 78.799846, 31.655464 ], [ 78.799713, 31.654705 ], [ 78.799747, 31.654044 ], [ 78.799614, 31.653516 ], [ 78.799681, 31.653086 ], [ 78.799945, 31.652525 ], [ 78.800539, 31.651897 ], [ 78.801464, 31.650643 ], [ 78.801596, 31.649916 ], [ 78.801596, 31.649024 ], [ 78.801662, 31.648067 ], [ 78.801893, 31.647571 ], [ 78.802488, 31.647109 ], [ 78.803379, 31.646515 ], [ 78.804436, 31.644929 ], [ 78.805163, 31.643674 ], [ 78.805658, 31.642948 ], [ 78.806186, 31.642419 ], [ 78.80688, 31.642023 ], [ 78.808102, 31.639579 ], [ 78.808432, 31.639117 ], [ 78.809126, 31.638787 ], [ 78.810017, 31.638489 ], [ 78.810975, 31.638225 ], [ 78.811933, 31.638027 ], [ 78.812659, 31.637796 ], [ 78.813683, 31.637763 ], [ 78.814542, 31.637829 ], [ 78.815731, 31.637631 ], [ 78.816886, 31.637664 ], [ 78.817547, 31.638093 ], [ 78.81791, 31.637961 ], [ 78.819033, 31.637235 ], [ 78.819495, 31.636112 ], [ 78.82009, 31.635352 ], [ 78.820717, 31.635154 ], [ 78.820982, 31.634725 ], [ 78.822203, 31.63314 ], [ 78.822798, 31.632743 ], [ 78.823458, 31.631951 ], [ 78.823854, 31.631885 ], [ 78.824878, 31.631852 ], [ 78.824845, 31.631686 ], [ 78.824977, 31.630795 ], [ 78.825341, 31.630398 ], [ 78.826166, 31.629837 ], [ 78.826761, 31.629573 ], [ 78.827454, 31.629375 ], [ 78.827586, 31.62845 ], [ 78.828379, 31.627162 ], [ 78.828577, 31.626436 ], [ 78.828346, 31.625907 ], [ 78.828379, 31.625049 ], [ 78.82894, 31.624916 ], [ 78.830393, 31.623959 ], [ 78.831879, 31.624124 ], [ 78.832606, 31.624124 ], [ 78.833729, 31.624025 ], [ 78.834257, 31.623893 ], [ 78.834819, 31.623629 ], [ 78.83538, 31.623265 ], [ 78.836338, 31.622935 ], [ 78.837196, 31.62277 ], [ 78.838385, 31.622803 ], [ 78.83898, 31.622968 ], [ 78.839673, 31.622935 ], [ 78.83997, 31.622572 ], [ 78.841391, 31.622076 ], [ 78.841622, 31.621911 ], [ 78.841952, 31.620788 ], [ 78.842249, 31.620623 ], [ 78.842579, 31.619566 ], [ 78.842877, 31.618972 ], [ 78.843141, 31.618642 ], [ 78.843141, 31.617585 ], [ 78.843273, 31.616991 ], [ 78.843471, 31.616561 ], [ 78.843834, 31.616 ], [ 78.844132, 31.615141 ], [ 78.84433, 31.61425 ], [ 78.844726, 31.61316 ], [ 78.844759, 31.611905 ], [ 78.845518, 31.611343 ], [ 78.846179, 31.610716 ], [ 78.846641, 31.609164 ], [ 78.846609, 31.606852 ], [ 78.846146, 31.606092 ], [ 78.84499, 31.604871 ], [ 78.844693, 31.604243 ], [ 78.844297, 31.603616 ], [ 78.844198, 31.603153 ], [ 78.843669, 31.601997 ], [ 78.843108, 31.601304 ], [ 78.842117, 31.600577 ], [ 78.841556, 31.600016 ], [ 78.841225, 31.599388 ], [ 78.841027, 31.598365 ], [ 78.840697, 31.59744 ], [ 78.839838, 31.597341 ], [ 78.838914, 31.597308 ], [ 78.838022, 31.59744 ], [ 78.835545, 31.597605 ], [ 78.832936, 31.597968 ], [ 78.832771, 31.59744 ], [ 78.831978, 31.596086 ], [ 78.831814, 31.594798 ], [ 78.831384, 31.594336 ], [ 78.830559, 31.593741 ], [ 78.83003, 31.593246 ], [ 78.829237, 31.592123 ], [ 78.828313, 31.590934 ], [ 78.827454, 31.590109 ], [ 78.827157, 31.58958 ], [ 78.826563, 31.5875 ], [ 78.826232, 31.586971 ], [ 78.825109, 31.586113 ], [ 78.824911, 31.58565 ], [ 78.82326, 31.585089 ], [ 78.823128, 31.584164 ], [ 78.822864, 31.583537 ], [ 78.822401, 31.582942 ], [ 78.822236, 31.582414 ], [ 78.822435, 31.581621 ], [ 78.822401, 31.578649 ], [ 78.821477, 31.578484 ], [ 78.820288, 31.578022 ], [ 78.818901, 31.577559 ], [ 78.817316, 31.577295 ], [ 78.816094, 31.577229 ], [ 78.814905, 31.577262 ], [ 78.813716, 31.576502 ], [ 78.813188, 31.576436 ], [ 78.811735, 31.5768 ], [ 78.81081, 31.576767 ], [ 78.810215, 31.576602 ], [ 78.809588, 31.576701 ], [ 78.808465, 31.576998 ], [ 78.807739, 31.577262 ], [ 78.807177, 31.577394 ], [ 78.806451, 31.577229 ], [ 78.806715, 31.574323 ], [ 78.806583, 31.573233 ], [ 78.806253, 31.57211 ], [ 78.804832, 31.568312 ], [ 78.803412, 31.565571 ], [ 78.801926, 31.565043 ], [ 78.801332, 31.564713 ], [ 78.800638, 31.564019 ], [ 78.800143, 31.563689 ], [ 78.798723, 31.56326 ], [ 78.797204, 31.562566 ], [ 78.795024, 31.561906 ], [ 78.792415, 31.560981 ], [ 78.788948, 31.559495 ], [ 78.783069, 31.556225 ], [ 78.782277, 31.556093 ], [ 78.781187, 31.556093 ], [ 78.78013, 31.555862 ], [ 78.779436, 31.554673 ], [ 78.779139, 31.554046 ], [ 78.778776, 31.552461 ], [ 78.777389, 31.550017 ], [ 78.777158, 31.54896 ], [ 78.777059, 31.546846 ], [ 78.776861, 31.545889 ], [ 78.776497, 31.545195 ], [ 78.775209, 31.543577 ], [ 78.772138, 31.543676 ], [ 78.770454, 31.543775 ], [ 78.769397, 31.543907 ], [ 78.768472, 31.544469 ], [ 78.767911, 31.544634 ], [ 78.766887, 31.545195 ], [ 78.765599, 31.546285 ], [ 78.764212, 31.547573 ], [ 78.763023, 31.548134 ], [ 78.761636, 31.548597 ], [ 78.761009, 31.546648 ], [ 78.760348, 31.545294 ], [ 78.759556, 31.544204 ], [ 78.758763, 31.543346 ], [ 78.758136, 31.542454 ], [ 78.756914, 31.542091 ], [ 78.756055, 31.541959 ], [ 78.755098, 31.541695 ], [ 78.754767, 31.541331 ], [ 78.754206, 31.5411 ], [ 78.753083, 31.540803 ], [ 78.752026, 31.540836 ], [ 78.750771, 31.541034 ], [ 78.749582, 31.5411 ], [ 78.74846, 31.541067 ], [ 78.747006, 31.540902 ], [ 78.746214, 31.540968 ], [ 78.745553, 31.541199 ], [ 78.744298, 31.54219 ], [ 78.743143, 31.541034 ], [ 78.742581, 31.540308 ], [ 78.742317, 31.539713 ], [ 78.741392, 31.538887 ], [ 78.7406, 31.538029 ], [ 78.740203, 31.537236 ], [ 78.739543, 31.53684 ], [ 78.738486, 31.536411 ], [ 78.736538, 31.53651 ], [ 78.735283, 31.536477 ], [ 78.734292, 31.53509 ], [ 78.733565, 31.534561 ], [ 78.7334, 31.534198 ], [ 78.732971, 31.534033 ], [ 78.732476, 31.533471 ], [ 78.731914, 31.533042 ], [ 78.730924, 31.53258 ], [ 78.730824, 31.532018 ], [ 78.730692, 31.530631 ], [ 78.730527, 31.530103 ], [ 78.730395, 31.529112 ], [ 78.730164, 31.528914 ], [ 78.729503, 31.527164 ], [ 78.729272, 31.526371 ], [ 78.729338, 31.525678 ], [ 78.729107, 31.525116 ], [ 78.728909, 31.523366 ], [ 78.728414, 31.521781 ], [ 78.727984, 31.520658 ], [ 78.727456, 31.519799 ], [ 78.727456, 31.519337 ], [ 78.727258, 31.518346 ], [ 78.726829, 31.517719 ], [ 78.726762, 31.517356 ], [ 78.726333, 31.516893 ], [ 78.725838, 31.516233 ], [ 78.72564, 31.51544 ], [ 78.724351, 31.514482 ], [ 78.72313, 31.513756 ], [ 78.722172, 31.51336 ], [ 78.721776, 31.512402 ], [ 78.72171, 31.512006 ], [ 78.72171, 31.51118 ], [ 78.721446, 31.510453 ], [ 78.720983, 31.509892 ], [ 78.720455, 31.508868 ], [ 78.72029, 31.508142 ], [ 78.720323, 31.507745 ], [ 78.721379, 31.504014 ], [ 78.721842, 31.501207 ], [ 78.72237, 31.500876 ], [ 78.7227, 31.500546 ], [ 78.723328, 31.499852 ], [ 78.723988, 31.498928 ], [ 78.723328, 31.496748 ], [ 78.723658, 31.49589 ], [ 78.723691, 31.494337 ], [ 78.723889, 31.493743 ], [ 78.724418, 31.492917 ], [ 78.724781, 31.492455 ], [ 78.726135, 31.491299 ], [ 78.727291, 31.490176 ], [ 78.727027, 31.489285 ], [ 78.726729, 31.488492 ], [ 78.726201, 31.487534 ], [ 78.725673, 31.486676 ], [ 78.725375, 31.486279 ], [ 78.725078, 31.485256 ], [ 78.725045, 31.484826 ], [ 78.725838, 31.483803 ], [ 78.726795, 31.483076 ], [ 78.72739, 31.483109 ], [ 78.72848, 31.483307 ], [ 78.72947, 31.483538 ], [ 78.729999, 31.483803 ], [ 78.731419, 31.48377 ], [ 78.732442, 31.483571 ], [ 78.733499, 31.483538 ], [ 78.734259, 31.483571 ], [ 78.73482, 31.483307 ], [ 78.735481, 31.483175 ], [ 78.736009, 31.483175 ], [ 78.736438, 31.482581 ], [ 78.737165, 31.481986 ], [ 78.737693, 31.481623 ], [ 78.738354, 31.481359 ], [ 78.739179, 31.481161 ], [ 78.739906, 31.481128 ], [ 78.741855, 31.481458 ], [ 78.742647, 31.481854 ], [ 78.743274, 31.482316 ], [ 78.744365, 31.483538 ], [ 78.74486, 31.48367 ], [ 78.745487, 31.483968 ], [ 78.747171, 31.484562 ], [ 78.74846, 31.484892 ], [ 78.74912, 31.485124 ], [ 78.749252, 31.485024 ], [ 78.749582, 31.484232 ], [ 78.751828, 31.483076 ], [ 78.752786, 31.482746 ], [ 78.753611, 31.482614 ], [ 78.757541, 31.482878 ], [ 78.757707, 31.482746 ], [ 78.758532, 31.481821 ], [ 78.759193, 31.48126 ], [ 78.760018, 31.48083 ], [ 78.76048, 31.480434 ], [ 78.76091, 31.479608 ], [ 78.761372, 31.478948 ], [ 78.762528, 31.477726 ], [ 78.762528, 31.476141 ], [ 78.762693, 31.475447 ], [ 78.763155, 31.474919 ], [ 78.763717, 31.474589 ], [ 78.764675, 31.474159 ], [ 78.766359, 31.473598 ], [ 78.767779, 31.47307 ], [ 78.768902, 31.470163 ], [ 78.769265, 31.469041 ], [ 78.769826, 31.468116 ], [ 78.770057, 31.467389 ], [ 78.770355, 31.46696 ], [ 78.770916, 31.466333 ], [ 78.770883, 31.464516 ], [ 78.770982, 31.464285 ], [ 78.771775, 31.463327 ], [ 78.773294, 31.461247 ], [ 78.773921, 31.460223 ], [ 78.774186, 31.459199 ], [ 78.774285, 31.457416 ], [ 78.774549, 31.455765 ], [ 78.774846, 31.45484 ], [ 78.775276, 31.454213 ], [ 78.776134, 31.45342 ], [ 78.779569, 31.45058 ], [ 78.781121, 31.450613 ], [ 78.781946, 31.450547 ], [ 78.782673, 31.450349 ], [ 78.783531, 31.449952 ], [ 78.784687, 31.449754 ], [ 78.785711, 31.449688 ], [ 78.786702, 31.449325 ], [ 78.787792, 31.448797 ], [ 78.790698, 31.446848 ], [ 78.792151, 31.446022 ], [ 78.79367, 31.445032 ], [ 78.793901, 31.444669 ], [ 78.795189, 31.444239 ], [ 78.796345, 31.444173 ], [ 78.796741, 31.444074 ], [ 78.796708, 31.443777 ], [ 78.796741, 31.443314 ], [ 78.797336, 31.440739 ], [ 78.797303, 31.439715 ], [ 78.79684, 31.439352 ], [ 78.796609, 31.438955 ], [ 78.796345, 31.438361 ], [ 78.796114, 31.437568 ], [ 78.795784, 31.437271 ], [ 78.794727, 31.436478 ], [ 78.794067, 31.436115 ], [ 78.793307, 31.435818 ], [ 78.790797, 31.435124 ], [ 78.789707, 31.434992 ], [ 78.788816, 31.434992 ], [ 78.788056, 31.434167 ], [ 78.787362, 31.433077 ], [ 78.786801, 31.431591 ], [ 78.786438, 31.430435 ], [ 78.786207, 31.429907 ], [ 78.785876, 31.429609 ], [ 78.785216, 31.429444 ], [ 78.784159, 31.428982 ], [ 78.783565, 31.428817 ], [ 78.782541, 31.428652 ], [ 78.781616, 31.426769 ], [ 78.781121, 31.425646 ], [ 78.780526, 31.425184 ], [ 78.779998, 31.424557 ], [ 78.779436, 31.423731 ], [ 78.779337, 31.422905 ], [ 78.77904, 31.422443 ], [ 78.77871, 31.421089 ], [ 78.778446, 31.42066 ], [ 78.778347, 31.420263 ], [ 78.778148, 31.420098 ], [ 78.777191, 31.41957 ], [ 78.776894, 31.41924 ], [ 78.77663, 31.419041 ], [ 78.775936, 31.419008 ], [ 78.775771, 31.418942 ], [ 78.775375, 31.417919 ], [ 78.774648, 31.417456 ], [ 78.773492, 31.416598 ], [ 78.772303, 31.415211 ], [ 78.77227, 31.412866 ], [ 78.772171, 31.412337 ], [ 78.770751, 31.411149 ], [ 78.770057, 31.410422 ], [ 78.769199, 31.408606 ], [ 78.768802, 31.407582 ], [ 78.768737, 31.406921 ], [ 78.768836, 31.406195 ], [ 78.768472, 31.405733 ], [ 78.767878, 31.405138 ], [ 78.767118, 31.404478 ], [ 78.766887, 31.404147 ], [ 78.766656, 31.403685 ], [ 78.766161, 31.403322 ], [ 78.765269, 31.402397 ], [ 78.764741, 31.402166 ], [ 78.763915, 31.401902 ], [ 78.762165, 31.401109 ], [ 78.761537, 31.40068 ], [ 78.761273, 31.40025 ], [ 78.76091, 31.399161 ], [ 78.76124, 31.398302 ], [ 78.76124, 31.397047 ], [ 78.761174, 31.396189 ], [ 78.760778, 31.395363 ], [ 78.760216, 31.394471 ], [ 78.759589, 31.393613 ], [ 78.758796, 31.393018 ], [ 78.758202, 31.392655 ], [ 78.757442, 31.392358 ], [ 78.757013, 31.391565 ], [ 78.756782, 31.390541 ], [ 78.756848, 31.389881 ], [ 78.756716, 31.389551 ], [ 78.756286, 31.389121 ], [ 78.755692, 31.388626 ], [ 78.755163, 31.387866 ], [ 78.754338, 31.387206 ], [ 78.754008, 31.386677 ], [ 78.753942, 31.386215 ], [ 78.753843, 31.385951 ], [ 78.753446, 31.385588 ], [ 78.753479, 31.38529 ], [ 78.753017, 31.384927 ], [ 78.753578, 31.384002 ], [ 78.754107, 31.383474 ], [ 78.754272, 31.381327 ], [ 78.754338, 31.379412 ], [ 78.754998, 31.378421 ], [ 78.756683, 31.377397 ], [ 78.757343, 31.376506 ], [ 78.757541, 31.374921 ], [ 78.757442, 31.373831 ], [ 78.757145, 31.37284 ], [ 78.756683, 31.372081 ], [ 78.755857, 31.371255 ], [ 78.754866, 31.370495 ], [ 78.75414, 31.370099 ], [ 78.753446, 31.369868 ], [ 78.752654, 31.369802 ], [ 78.751564, 31.369637 ], [ 78.75087, 31.369406 ], [ 78.750276, 31.36891 ], [ 78.749814, 31.368745 ], [ 78.749681, 31.368118 ], [ 78.749516, 31.367787 ], [ 78.749549, 31.367028 ], [ 78.749681, 31.366136 ], [ 78.749814, 31.365608 ], [ 78.750243, 31.36498 ], [ 78.750441, 31.364452 ], [ 78.750573, 31.363659 ], [ 78.750738, 31.363395 ], [ 78.751795, 31.362536 ], [ 78.753215, 31.361843 ], [ 78.753743, 31.36148 ], [ 78.754239, 31.361083 ], [ 78.754569, 31.360621 ], [ 78.754701, 31.360192 ], [ 78.755197, 31.359894 ], [ 78.755527, 31.358342 ], [ 78.758697, 31.357153 ], [ 78.759126, 31.356922 ], [ 78.759589, 31.356559 ], [ 78.759952, 31.356394 ], [ 78.760348, 31.356493 ], [ 78.760448, 31.356097 ], [ 78.760811, 31.356031 ], [ 78.76091, 31.356196 ], [ 78.761108, 31.356361 ], [ 78.761306, 31.356394 ], [ 78.761735, 31.355998 ], [ 78.762627, 31.354941 ], [ 78.764278, 31.353158 ], [ 78.765038, 31.352596 ], [ 78.766788, 31.35187 ], [ 78.767713, 31.35144 ], [ 78.768373, 31.350879 ], [ 78.769529, 31.349029 ], [ 78.769694, 31.348501 ], [ 78.769661, 31.348105 ], [ 78.769232, 31.34642 ], [ 78.768902, 31.345991 ], [ 78.767977, 31.345364 ], [ 78.767118, 31.345 ], [ 78.765665, 31.344538 ], [ 78.764344, 31.343019 ], [ 78.763288, 31.341071 ], [ 78.765335, 31.339452 ], [ 78.766161, 31.338594 ], [ 78.767184, 31.337933 ], [ 78.768703, 31.337603 ], [ 78.769925, 31.336909 ], [ 78.770751, 31.336315 ], [ 78.771577, 31.335621 ], [ 78.772039, 31.334994 ], [ 78.772798, 31.33364 ], [ 78.773591, 31.333475 ], [ 78.773822, 31.333343 ], [ 78.774219, 31.332154 ], [ 78.774021, 31.331559 ], [ 78.773261, 31.330536 ], [ 78.772832, 31.330272 ], [ 78.772666, 31.329974 ], [ 78.772006, 31.32971 ], [ 78.771444, 31.329545 ], [ 78.770619, 31.329512 ], [ 78.769001, 31.329248 ], [ 78.768836, 31.328984 ], [ 78.768638, 31.328455 ], [ 78.768638, 31.327299 ], [ 78.768505, 31.326837 ], [ 78.768439, 31.326309 ], [ 78.769595, 31.324228 ], [ 78.770289, 31.323733 ], [ 78.770553, 31.323369 ], [ 78.77085, 31.323204 ], [ 78.771643, 31.322907 ], [ 78.772501, 31.322709 ], [ 78.773558, 31.322577 ], [ 78.774186, 31.322445 ], [ 78.775606, 31.32185 ], [ 78.776266, 31.321256 ], [ 78.777818, 31.320199 ], [ 78.778049, 31.319902 ], [ 78.778413, 31.318779 ], [ 78.779073, 31.317722 ], [ 78.779106, 31.317326 ], [ 78.779073, 31.316665 ], [ 78.779172, 31.315774 ], [ 78.778446, 31.313726 ], [ 78.778182, 31.312339 ], [ 78.779734, 31.311117 ], [ 78.78079, 31.31016 ], [ 78.78122, 31.31006 ], [ 78.781847, 31.309829 ], [ 78.783333, 31.309598 ], [ 78.783961, 31.309334 ], [ 78.784555, 31.308839 ], [ 78.785348, 31.308046 ], [ 78.785744, 31.307782 ], [ 78.786933, 31.307683 ], [ 78.787792, 31.307518 ], [ 78.788782, 31.307154 ], [ 78.79083, 31.305965 ], [ 78.791557, 31.305239 ], [ 78.791755, 31.304843 ], [ 78.791953, 31.304182 ], [ 78.792184, 31.304116 ], [ 78.792812, 31.30405 ], [ 78.793604, 31.304017 ], [ 78.795685, 31.30405 ], [ 78.800176, 31.3058 ], [ 78.80077, 31.305965 ], [ 78.802058, 31.305767 ], [ 78.803181, 31.305734 ], [ 78.80546, 31.3058 ], [ 78.806847, 31.305998 ], [ 78.80721, 31.306362 ], [ 78.809357, 31.306923 ], [ 78.810281, 31.307022 ], [ 78.811371, 31.307022 ], [ 78.81223, 31.306758 ], [ 78.813022, 31.306428 ], [ 78.814277, 31.305668 ], [ 78.814806, 31.305008 ], [ 78.814608, 31.303786 ], [ 78.814872, 31.303621 ], [ 78.81474, 31.301045 ], [ 78.814872, 31.301045 ], [ 78.816358, 31.300516 ], [ 78.817349, 31.299228 ], [ 78.817976, 31.2987 ], [ 78.818802, 31.298568 ], [ 78.820222, 31.298172 ], [ 78.822203, 31.297313 ], [ 78.823425, 31.296884 ], [ 78.824581, 31.296322 ], [ 78.827025, 31.295563 ], [ 78.828081, 31.295332 ], [ 78.829039, 31.295199 ], [ 78.829997, 31.295166 ], [ 78.830724, 31.295067 ], [ 78.831913, 31.294506 ], [ 78.832771, 31.294242 ], [ 78.833828, 31.294176 ], [ 78.836041, 31.294242 ], [ 78.83756, 31.294209 ], [ 78.838914, 31.293977 ], [ 78.83898, 31.294275 ], [ 78.839376, 31.295232 ], [ 78.840895, 31.29553 ], [ 78.841655, 31.295596 ], [ 78.84182, 31.295827 ], [ 78.84215, 31.296091 ], [ 78.84291, 31.296091 ], [ 78.844164, 31.295794 ], [ 78.846212, 31.295497 ], [ 78.848128, 31.295034 ], [ 78.852388, 31.294407 ], [ 78.853411, 31.294407 ], [ 78.853973, 31.294737 ], [ 78.854567, 31.294902 ], [ 78.855492, 31.294968 ], [ 78.85569, 31.295299 ], [ 78.85602, 31.295596 ], [ 78.856152, 31.29761 ], [ 78.856681, 31.299724 ], [ 78.856549, 31.300318 ], [ 78.855954, 31.301012 ], [ 78.854237, 31.302663 ], [ 78.853445, 31.303125 ], [ 78.852718, 31.30329 ], [ 78.851992, 31.303522 ], [ 78.851958, 31.305371 ], [ 78.852091, 31.305998 ], [ 78.851992, 31.307121 ], [ 78.851793, 31.307386 ], [ 78.851661, 31.308508 ], [ 78.85143, 31.308706 ], [ 78.851397, 31.308905 ], [ 78.852553, 31.310622 ], [ 78.852842, 31.311339 ], [ 78.853209, 31.311951 ], [ 78.853904, 31.312441 ], [ 78.855252, 31.312931 ], [ 78.856477, 31.313503 ], [ 78.858151, 31.313871 ], [ 78.858682, 31.314197 ], [ 78.859295, 31.314361 ], [ 78.859173, 31.314851 ], [ 78.860765, 31.3153 ], [ 78.861582, 31.3153 ], [ 78.862521, 31.314973 ], [ 78.863338, 31.314116 ], [ 78.863951, 31.313381 ], [ 78.864155, 31.312523 ], [ 78.865666, 31.311094 ], [ 78.867177, 31.308766 ], [ 78.868239, 31.307499 ], [ 78.870894, 31.305866 ], [ 78.871956, 31.305539 ], [ 78.873222, 31.305008 ], [ 78.875958, 31.303701 ], [ 78.876162, 31.303211 ], [ 78.876979, 31.302394 ], [ 78.877183, 31.301782 ], [ 78.877306, 31.301087 ], [ 78.877878, 31.30023 ], [ 78.878409, 31.298147 ], [ 78.878776, 31.297616 ], [ 78.879185, 31.297248 ], [ 78.879879, 31.296391 ], [ 78.880818, 31.293858 ], [ 78.881472, 31.29006 ], [ 78.881853, 31.288873 ], [ 78.882084, 31.28775 ], [ 78.882348, 31.286957 ], [ 78.88339, 31.286193 ], [ 78.887983, 31.286991 ], [ 78.89264, 31.287453 ], [ 78.893663, 31.287718 ], [ 78.894819, 31.288213 ], [ 78.895678, 31.288774 ], [ 78.899509, 31.289732 ], [ 78.900235, 31.292077 ], [ 78.900731, 31.292903 ], [ 78.901424, 31.293695 ], [ 78.90182, 31.294389 ], [ 78.901919, 31.295115 ], [ 78.901853, 31.29571 ], [ 78.900962, 31.297361 ], [ 78.900433, 31.299375 ], [ 78.899872, 31.300003 ], [ 78.899476, 31.300267 ], [ 78.898881, 31.300366 ], [ 78.898386, 31.301126 ], [ 78.897428, 31.30172 ], [ 78.897494, 31.302645 ], [ 78.899343, 31.304362 ], [ 78.900268, 31.305485 ], [ 78.900697, 31.305749 ], [ 78.901259, 31.305815 ], [ 78.901919, 31.306013 ], [ 78.902481, 31.306343 ], [ 78.903174, 31.306938 ], [ 78.904099, 31.307962 ], [ 78.904561, 31.308556 ], [ 78.905585, 31.309018 ], [ 78.906015, 31.309283 ], [ 78.906312, 31.309283 ], [ 78.907137, 31.308985 ], [ 78.907996, 31.308787 ], [ 78.909119, 31.308655 ], [ 78.909911, 31.308655 ], [ 78.910506, 31.308721 ], [ 78.911265, 31.309085 ], [ 78.912322, 31.309778 ], [ 78.912752, 31.30991 ], [ 78.912917, 31.31024 ], [ 78.913214, 31.310372 ], [ 78.914271, 31.311429 ], [ 78.914931, 31.312222 ], [ 78.915823, 31.313477 ], [ 78.916648, 31.314302 ], [ 78.917144, 31.31493 ], [ 78.917606, 31.315689 ], [ 78.91787, 31.316515 ], [ 78.917936, 31.317076 ], [ 78.917804, 31.31777 ], [ 78.917309, 31.318331 ], [ 78.917144, 31.318662 ], [ 78.917144, 31.319256 ], [ 78.917243, 31.319652 ], [ 78.917144, 31.320148 ], [ 78.917144, 31.321039 ], [ 78.917474, 31.321271 ], [ 78.917573, 31.321766 ], [ 78.918597, 31.322294 ], [ 78.919323, 31.32279 ], [ 78.919885, 31.323318 ], [ 78.92038, 31.324144 ], [ 78.920875, 31.324507 ], [ 78.921536, 31.324738 ], [ 78.922065, 31.325134 ], [ 78.922692, 31.326356 ], [ 78.923551, 31.326687 ], [ 78.924673, 31.327017 ], [ 78.925301, 31.327248 ], [ 78.925796, 31.328074 ], [ 78.92649, 31.328833 ], [ 78.926985, 31.329461 ], [ 78.927183, 31.33098 ], [ 78.927976, 31.331805 ], [ 78.928834, 31.332961 ], [ 78.929396, 31.334084 ], [ 78.929825, 31.336891 ], [ 78.930189, 31.33742 ], [ 78.931047, 31.338146 ], [ 78.931311, 31.33884 ], [ 78.931608, 31.33983 ], [ 78.931939, 31.341581 ], [ 78.93217, 31.341944 ], [ 78.933425, 31.343034 ], [ 78.933656, 31.343166 ], [ 78.934416, 31.34343 ], [ 78.936232, 31.343562 ], [ 78.937091, 31.343925 ], [ 78.937916, 31.344619 ], [ 78.938841, 31.345742 ], [ 78.939039, 31.346534 ], [ 78.940294, 31.348417 ], [ 78.940624, 31.349176 ], [ 78.941318, 31.350167 ], [ 78.941582, 31.350662 ], [ 78.941813, 31.351257 ], [ 78.941912, 31.351785 ], [ 78.941879, 31.352347 ], [ 78.941747, 31.353172 ], [ 78.942176, 31.353767 ], [ 78.942407, 31.354493 ], [ 78.942441, 31.355055 ], [ 78.942342, 31.355484 ], [ 78.942176, 31.35588 ], [ 78.942144, 31.35631 ], [ 78.942275, 31.356739 ], [ 78.942308, 31.357201 ], [ 78.942176, 31.357862 ], [ 78.942144, 31.358456 ], [ 78.942176, 31.358952 ], [ 78.94254, 31.359645 ], [ 78.942903, 31.360107 ], [ 78.943332, 31.360471 ], [ 78.94353, 31.360702 ], [ 78.94363, 31.3645 ], [ 78.943729, 31.365259 ], [ 78.943861, 31.365656 ], [ 78.944818, 31.36625 ], [ 78.946767, 31.365689 ], [ 78.947427, 31.365623 ], [ 78.948352, 31.365788 ], [ 78.949079, 31.365788 ], [ 78.950631, 31.365457 ], [ 78.952282, 31.364929 ], [ 78.953636, 31.364302 ], [ 78.955122, 31.363443 ], [ 78.956377, 31.362551 ], [ 78.958788, 31.360966 ], [ 78.960208, 31.360801 ], [ 78.963048, 31.35948 ], [ 78.96569, 31.358522 ], [ 78.966912, 31.357961 ], [ 78.967803, 31.357465 ], [ 78.968266, 31.357135 ], [ 78.969686, 31.356904 ], [ 78.972526, 31.358159 ], [ 78.974607, 31.359282 ], [ 78.975729, 31.360008 ], [ 78.97672, 31.360768 ], [ 78.977381, 31.361957 ], [ 78.978074, 31.362551 ], [ 78.978603, 31.36341 ], [ 78.979362, 31.363938 ], [ 78.980188, 31.362981 ], [ 78.981145, 31.36156 ], [ 78.981872, 31.361032 ], [ 78.982499, 31.36024 ], [ 78.983391, 31.359744 ], [ 78.98458, 31.358985 ], [ 78.985604, 31.358423 ], [ 78.986892, 31.357499 ], [ 78.989203, 31.356211 ], [ 78.989401, 31.354956 ], [ 78.989368, 31.353866 ], [ 78.989203, 31.352215 ], [ 78.988873, 31.351752 ], [ 78.987552, 31.350695 ], [ 78.986528, 31.349969 ], [ 78.987222, 31.348516 ], [ 78.987651, 31.347954 ], [ 78.989137, 31.347129 ], [ 78.989864, 31.346567 ], [ 78.990359, 31.346105 ], [ 78.99069, 31.345973 ], [ 78.991284, 31.345907 ], [ 78.991746, 31.345742 ], [ 78.99234, 31.345279 ], [ 78.993001, 31.345048 ], [ 78.994223, 31.344256 ], [ 78.995313, 31.343859 ], [ 78.99888, 31.34277 ], [ 78.999837, 31.342373 ], [ 79.000465, 31.341845 ], [ 79.002512, 31.342637 ], [ 79.007268, 31.343958 ], [ 79.008225, 31.344421 ], [ 79.009943, 31.345544 ], [ 79.011957, 31.346105 ], [ 79.013278, 31.347162 ], [ 79.014368, 31.347525 ], [ 79.015689, 31.347723 ], [ 79.01635, 31.347954 ], [ 79.017274, 31.348549 ], [ 79.017968, 31.348813 ], [ 79.018694, 31.349011 ], [ 79.018133, 31.35479 ], [ 79.018199, 31.35588 ], [ 79.01843, 31.357003 ], [ 79.018959, 31.357895 ], [ 79.018265, 31.358753 ], [ 79.017836, 31.360273 ], [ 79.017472, 31.361329 ], [ 79.01668, 31.361957 ], [ 79.015986, 31.362683 ], [ 79.015491, 31.363608 ], [ 79.015425, 31.364335 ], [ 79.015326, 31.36483 ], [ 79.015028, 31.365259 ], [ 79.015062, 31.365523 ], [ 79.014764, 31.365821 ], [ 79.014236, 31.366085 ], [ 79.014038, 31.366613 ], [ 79.014071, 31.367208 ], [ 79.014005, 31.368099 ], [ 79.012948, 31.369519 ], [ 79.011561, 31.371105 ], [ 79.010768, 31.376289 ], [ 79.010108, 31.382168 ], [ 79.010504, 31.382993 ], [ 79.010933, 31.383126 ], [ 79.011297, 31.383522 ], [ 79.011528, 31.384149 ], [ 79.012585, 31.38448 ], [ 79.013741, 31.385041 ], [ 79.01483, 31.385767 ], [ 79.015689, 31.386626 ], [ 79.016283, 31.387584 ], [ 79.016548, 31.388575 ], [ 79.018034, 31.390985 ], [ 79.018067, 31.391646 ], [ 79.017968, 31.392537 ], [ 79.017704, 31.392967 ], [ 79.017274, 31.393231 ], [ 79.017076, 31.393858 ], [ 79.017043, 31.394552 ], [ 79.017208, 31.396203 ], [ 79.017043, 31.396699 ], [ 79.016911, 31.399341 ], [ 79.016614, 31.400364 ], [ 79.016449, 31.402148 ], [ 79.016184, 31.403171 ], [ 79.016085, 31.404162 ], [ 79.016151, 31.405417 ], [ 79.016647, 31.406606 ], [ 79.01668, 31.407266 ], [ 79.016415, 31.40829 ], [ 79.016052, 31.410305 ], [ 79.015788, 31.411295 ], [ 79.015953, 31.412583 ], [ 79.016415, 31.414334 ], [ 79.016449, 31.415192 ], [ 79.01625, 31.416414 ], [ 79.016217, 31.41724 ], [ 79.016283, 31.418066 ], [ 79.016581, 31.419122 ], [ 79.017142, 31.420311 ], [ 79.017439, 31.421236 ], [ 79.017571, 31.422953 ], [ 79.0181, 31.423548 ], [ 79.018529, 31.424307 ], [ 79.018793, 31.425067 ], [ 79.018892, 31.426718 ], [ 79.019322, 31.426883 ], [ 79.02018, 31.426751 ], [ 79.021369, 31.426817 ], [ 79.021765, 31.426652 ], [ 79.022228, 31.42619 ], [ 79.022789, 31.425991 ], [ 79.023318, 31.425958 ], [ 79.023747, 31.425991 ], [ 79.024209, 31.426388 ], [ 79.023912, 31.427312 ], [ 79.023945, 31.428006 ], [ 79.02411, 31.428666 ], [ 79.025266, 31.429723 ], [ 79.025894, 31.430086 ], [ 79.026983, 31.430219 ], [ 79.029031, 31.430252 ], [ 79.030946, 31.430516 ], [ 79.032763, 31.430978 ], [ 79.033819, 31.431903 ], [ 79.037122, 31.433224 ], [ 79.041646, 31.432431 ], [ 79.042802, 31.432563 ], [ 79.044783, 31.43329 ], [ 79.04868, 31.427114 ], [ 79.049737, 31.425628 ], [ 79.050167, 31.426057 ], [ 79.050596, 31.426718 ], [ 79.051521, 31.427246 ], [ 79.052214, 31.428072 ], [ 79.053007, 31.428699 ], [ 79.053667, 31.428898 ], [ 79.05446, 31.429492 ], [ 79.057432, 31.429855 ], [ 79.058951, 31.429855 ], [ 79.060767, 31.429558 ], [ 79.061659, 31.432563 ], [ 79.062188, 31.433785 ], [ 79.063277, 31.434611 ], [ 79.064433, 31.435007 ], [ 79.06516, 31.435304 ], [ 79.065358, 31.436031 ], [ 79.066646, 31.437814 ], [ 79.068, 31.439432 ], [ 79.068925, 31.440819 ], [ 79.069816, 31.4429 ], [ 79.069156, 31.445014 ], [ 79.068561, 31.447688 ], [ 79.068462, 31.448745 ], [ 79.068627, 31.450165 ], [ 79.069552, 31.451751 ], [ 79.07051, 31.452972 ], [ 79.071831, 31.453864 ], [ 79.072821, 31.454855 ], [ 79.073449, 31.455779 ], [ 79.075166, 31.459016 ], [ 79.077082, 31.457827 ], [ 79.078204, 31.457629 ], [ 79.078964, 31.457563 ], [ 79.079657, 31.45677 ], [ 79.079889, 31.454789 ], [ 79.080285, 31.453996 ], [ 79.081011, 31.453071 ], [ 79.081771, 31.452345 ], [ 79.084215, 31.450991 ], [ 79.086036, 31.450417 ], [ 79.087753, 31.451143 ], [ 79.089702, 31.451606 ], [ 79.09165, 31.451837 ], [ 79.092939, 31.452068 ], [ 79.094326, 31.452696 ], [ 79.097199, 31.454116 ], [ 79.098123, 31.454446 ], [ 79.099114, 31.454677 ], [ 79.099444, 31.454512 ], [ 79.100204, 31.453554 ], [ 79.100468, 31.452696 ], [ 79.100963, 31.452299 ], [ 79.103011, 31.451441 ], [ 79.105091, 31.450351 ], [ 79.10562, 31.449955 ], [ 79.106148, 31.449789 ], [ 79.106379, 31.448303 ], [ 79.106842, 31.447247 ], [ 79.107469, 31.44619 ], [ 79.107832, 31.445661 ], [ 79.108493, 31.445397 ], [ 79.109121, 31.444902 ], [ 79.112027, 31.443746 ], [ 79.11305, 31.443482 ], [ 79.114206, 31.44325 ], [ 79.115098, 31.442854 ], [ 79.116287, 31.442095 ], [ 79.117277, 31.441269 ], [ 79.118169, 31.440675 ], [ 79.118929, 31.440377 ], [ 79.12167, 31.439783 ], [ 79.123783, 31.439486 ], [ 79.125963, 31.439387 ], [ 79.128737, 31.438858 ], [ 79.133526, 31.436613 ], [ 79.1363, 31.435424 ], [ 79.137092, 31.434433 ], [ 79.139965, 31.432947 ], [ 79.141352, 31.432385 ], [ 79.142343, 31.432088 ], [ 79.142706, 31.427366 ], [ 79.143004, 31.425979 ], [ 79.14373, 31.424261 ], [ 79.144424, 31.423238 ], [ 79.147099, 31.421752 ], [ 79.147726, 31.421289 ], [ 79.149113, 31.419836 ], [ 79.150467, 31.418581 ], [ 79.15126, 31.417557 ], [ 79.15192, 31.415972 ], [ 79.152449, 31.413198 ], [ 79.152944, 31.411877 ], [ 79.153737, 31.41049 ], [ 79.154661, 31.40907 ], [ 79.155982, 31.407584 ], [ 79.157766, 31.405801 ], [ 79.159615, 31.403819 ], [ 79.160936, 31.402036 ], [ 79.163248, 31.39979 ], [ 79.165361, 31.397445 ], [ 79.167673, 31.397677 ], [ 79.169027, 31.398139 ], [ 79.170909, 31.399064 ], [ 79.171405, 31.397974 ], [ 79.171603, 31.397016 ], [ 79.171405, 31.395002 ], [ 79.171504, 31.393615 ], [ 79.172693, 31.391468 ], [ 79.175665, 31.388628 ], [ 79.17616, 31.387373 ], [ 79.176755, 31.386217 ], [ 79.17725, 31.385491 ], [ 79.176259, 31.384203 ], [ 79.174707, 31.38275 ], [ 79.173584, 31.381296 ], [ 79.172957, 31.380075 ], [ 79.172197, 31.378919 ], [ 79.170777, 31.377466 ], [ 79.169423, 31.37522 ], [ 79.168664, 31.374394 ], [ 79.168697, 31.372281 ], [ 79.168961, 31.370464 ], [ 79.169324, 31.368912 ], [ 79.17048, 31.364586 ], [ 79.170612, 31.363133 ], [ 79.172561, 31.362109 ], [ 79.173882, 31.361515 ], [ 79.174509, 31.360953 ], [ 79.176259, 31.360392 ], [ 79.177613, 31.360194 ], [ 79.180751, 31.36026 ], [ 79.181246, 31.36059 ], [ 79.182699, 31.359864 ], [ 79.183921, 31.359005 ], [ 79.186233, 31.357915 ], [ 79.187257, 31.357387 ], [ 79.188082, 31.356759 ], [ 79.18937, 31.356462 ], [ 79.190229, 31.356099 ], [ 79.191121, 31.355471 ], [ 79.192276, 31.354877 ], [ 79.193366, 31.354877 ], [ 79.194819, 31.355075 ], [ 79.196503, 31.355207 ], [ 79.19756, 31.355174 ], [ 79.198881, 31.35491 ], [ 79.200103, 31.354481 ], [ 79.202778, 31.353226 ], [ 79.204033, 31.352961 ], [ 79.205916, 31.352796 ], [ 79.207303, 31.352994 ], [ 79.208722, 31.353259 ], [ 79.211067, 31.353853 ], [ 79.212058, 31.353952 ], [ 79.213412, 31.353985 ], [ 79.214072, 31.352433 ], [ 79.214832, 31.350914 ], [ 79.214964, 31.350187 ], [ 79.215294, 31.349428 ], [ 79.215856, 31.348833 ], [ 79.217969, 31.347611 ], [ 79.21939, 31.347182 ], [ 79.220512, 31.346786 ], [ 79.222031, 31.346489 ], [ 79.223286, 31.346191 ], [ 79.224442, 31.345564 ], [ 79.2254, 31.344639 ], [ 79.226589, 31.34279 ], [ 79.227943, 31.341535 ], [ 79.228867, 31.340907 ], [ 79.229924, 31.339421 ], [ 79.231245, 31.337242 ], [ 79.232104, 31.33635 ], [ 79.232863, 31.335921 ], [ 79.235538, 31.335161 ], [ 79.236496, 31.334996 ], [ 79.235241, 31.33351 ], [ 79.233986, 31.332552 ], [ 79.231774, 31.331694 ], [ 79.230618, 31.330604 ], [ 79.229957, 31.330274 ], [ 79.22933, 31.330274 ], [ 79.22824, 31.330175 ], [ 79.227613, 31.329745 ], [ 79.22715, 31.328986 ], [ 79.225994, 31.327698 ], [ 79.225268, 31.327169 ], [ 79.224343, 31.326674 ], [ 79.223914, 31.326377 ], [ 79.223584, 31.325287 ], [ 79.223319, 31.324593 ], [ 79.223022, 31.324098 ], [ 79.222659, 31.323041 ], [ 79.22256, 31.322216 ], [ 79.222626, 31.321357 ], [ 79.22256, 31.320399 ], [ 79.222262, 31.319309 ], [ 79.22147, 31.317658 ], [ 79.220942, 31.316899 ], [ 79.220248, 31.316502 ], [ 79.221008, 31.315016 ], [ 79.221767, 31.314125 ], [ 79.222593, 31.312969 ], [ 79.223451, 31.312143 ], [ 79.224211, 31.311879 ], [ 79.225367, 31.311582 ], [ 79.225895, 31.311119 ], [ 79.226457, 31.309864 ], [ 79.22682, 31.308874 ], [ 79.227282, 31.308246 ], [ 79.227513, 31.307189 ], [ 79.22791, 31.306034 ], [ 79.228537, 31.304448 ], [ 79.228967, 31.303689 ], [ 79.231774, 31.302929 ], [ 79.232963, 31.302467 ], [ 79.236595, 31.301245 ], [ 79.237949, 31.300452 ], [ 79.238841, 31.299495 ], [ 79.239501, 31.298636 ], [ 79.240228, 31.297943 ], [ 79.244422, 31.297381 ], [ 79.246536, 31.296688 ], [ 79.24713, 31.296027 ], [ 79.248814, 31.294607 ], [ 79.24964, 31.294112 ], [ 79.250069, 31.293649 ], [ 79.250201, 31.293253 ], [ 79.249574, 31.29114 ], [ 79.249045, 31.28863 ], [ 79.248913, 31.287441 ], [ 79.24888, 31.286318 ], [ 79.249211, 31.284667 ], [ 79.248946, 31.283907 ], [ 79.248517, 31.283015 ], [ 79.247031, 31.281265 ], [ 79.246569, 31.280506 ], [ 79.246569, 31.279746 ], [ 79.246965, 31.278722 ], [ 79.247064, 31.278095 ], [ 79.246965, 31.277566 ], [ 79.246569, 31.276939 ], [ 79.245578, 31.276212 ], [ 79.245082, 31.275585 ], [ 79.244422, 31.275023 ], [ 79.243233, 31.274099 ], [ 79.242771, 31.273802 ], [ 79.24254, 31.273075 ], [ 79.242209, 31.272613 ], [ 79.238544, 31.270697 ], [ 79.237817, 31.270103 ], [ 79.236859, 31.269574 ], [ 79.236001, 31.269541 ], [ 79.235373, 31.269607 ], [ 79.234878, 31.270268 ], [ 79.233986, 31.269905 ], [ 79.232203, 31.268947 ], [ 79.229924, 31.267032 ], [ 79.229033, 31.266173 ], [ 79.228273, 31.265314 ], [ 79.226721, 31.261814 ], [ 79.226325, 31.260592 ], [ 79.227481, 31.259865 ], [ 79.228075, 31.259568 ], [ 79.229759, 31.259832 ], [ 79.230519, 31.2597 ], [ 79.231972, 31.258875 ], [ 79.233887, 31.257653 ], [ 79.235835, 31.256794 ], [ 79.237619, 31.256167 ], [ 79.239072, 31.25544 ], [ 79.239931, 31.254812 ], [ 79.240954, 31.253723 ], [ 79.242474, 31.252501 ], [ 79.243332, 31.251609 ], [ 79.244389, 31.25075 ], [ 79.245578, 31.250024 ], [ 79.247196, 31.249396 ], [ 79.249574, 31.248901 ], [ 79.250664, 31.247778 ], [ 79.251324, 31.247349 ], [ 79.252084, 31.247052 ], [ 79.252678, 31.246655 ], [ 79.25324, 31.246028 ], [ 79.254627, 31.244212 ], [ 79.25608, 31.242593 ], [ 79.25674, 31.242131 ], [ 79.258292, 31.241603 ], [ 79.258986, 31.241537 ], [ 79.259646, 31.240744 ], [ 79.260175, 31.240017 ], [ 79.260604, 31.239786 ], [ 79.262024, 31.239522 ], [ 79.265128, 31.238498 ], [ 79.266284, 31.238267 ], [ 79.270214, 31.238333 ], [ 79.271568, 31.23863 ], [ 79.272658, 31.238796 ], [ 79.275993, 31.238564 ], [ 79.278305, 31.238201 ], [ 79.279296, 31.238201 ], [ 79.28032, 31.238267 ], [ 79.282697, 31.238895 ], [ 79.285042, 31.23721 ], [ 79.286264, 31.236154 ], [ 79.286528, 31.235559 ], [ 79.286925, 31.234205 ], [ 79.287783, 31.232059 ], [ 79.287981, 31.230969 ], [ 79.288708, 31.23011 ], [ 79.289401, 31.229152 ], [ 79.289633, 31.228459 ], [ 79.289468, 31.227699 ], [ 79.289236, 31.22694 ], [ 79.28884, 31.226444 ], [ 79.290095, 31.225784 ], [ 79.291449, 31.225289 ], [ 79.293365, 31.224364 ], [ 79.294983, 31.222283 ], [ 79.29627, 31.221227 ], [ 79.297426, 31.220467 ], [ 79.299111, 31.219641 ], [ 79.300465, 31.219245 ], [ 79.300861, 31.219047 ], [ 79.300828, 31.218089 ], [ 79.300696, 31.217032 ], [ 79.300266, 31.215084 ], [ 79.30162, 31.214291 ], [ 79.30281, 31.213499 ], [ 79.303107, 31.21264 ], [ 79.303272, 31.211947 ], [ 79.30347, 31.209965 ], [ 79.303932, 31.208512 ], [ 79.304428, 31.207686 ], [ 79.304692, 31.207059 ], [ 79.304692, 31.206465 ], [ 79.303899, 31.205342 ], [ 79.303635, 31.20478 ], [ 79.30347, 31.204153 ], [ 79.303635, 31.20369 ], [ 79.304064, 31.203129 ], [ 79.304361, 31.202171 ], [ 79.304791, 31.199794 ], [ 79.304923, 31.198803 ], [ 79.304923, 31.198241 ], [ 79.305187, 31.197977 ], [ 79.30565, 31.197746 ], [ 79.306079, 31.197317 ], [ 79.306211, 31.196425 ], [ 79.306277, 31.195566 ], [ 79.306145, 31.194774 ], [ 79.305616, 31.193717 ], [ 79.304824, 31.189985 ], [ 79.30489, 31.189391 ], [ 79.305517, 31.18873 ], [ 79.306244, 31.1884 ], [ 79.306442, 31.187971 ], [ 79.306574, 31.187046 ], [ 79.306277, 31.184966 ], [ 79.305848, 31.183314 ], [ 79.305782, 31.182258 ], [ 79.305782, 31.181102 ], [ 79.306277, 31.18054 ], [ 79.306871, 31.179682 ], [ 79.307202, 31.178724 ], [ 79.307664, 31.177733 ], [ 79.308391, 31.176544 ], [ 79.308622, 31.175223 ], [ 79.308853, 31.172879 ], [ 79.30773, 31.172185 ], [ 79.305881, 31.170666 ], [ 79.304725, 31.169576 ], [ 79.305154, 31.168123 ], [ 79.305551, 31.167264 ], [ 79.306112, 31.16667 ], [ 79.306905, 31.166175 ], [ 79.307829, 31.165448 ], [ 79.308622, 31.164523 ], [ 79.309018, 31.163136 ], [ 79.309051, 31.162245 ], [ 79.308853, 31.161584 ], [ 79.30849, 31.161155 ], [ 79.308721, 31.159933 ], [ 79.308754, 31.158777 ], [ 79.309249, 31.156531 ], [ 79.309282, 31.155673 ], [ 79.309447, 31.15488 ], [ 79.309778, 31.153989 ], [ 79.311, 31.151413 ], [ 79.311528, 31.150554 ], [ 79.311462, 31.149695 ], [ 79.312353, 31.148275 ], [ 79.313113, 31.147549 ], [ 79.314137, 31.146987 ], [ 79.316151, 31.145237 ], [ 79.317406, 31.144279 ], [ 79.318232, 31.143454 ], [ 79.319025, 31.142331 ], [ 79.319652, 31.141175 ], [ 79.321237, 31.138566 ], [ 79.323681, 31.137212 ], [ 79.325695, 31.135429 ], [ 79.327611, 31.134339 ], [ 79.328965, 31.13348 ], [ 79.330352, 31.13249 ], [ 79.331144, 31.132457 ], [ 79.335405, 31.132655 ], [ 79.337881, 31.132853 ], [ 79.338608, 31.132787 ], [ 79.339929, 31.130079 ], [ 79.340589, 31.129055 ], [ 79.341613, 31.127701 ], [ 79.342075, 31.126974 ], [ 79.345048, 31.126545 ], [ 79.346303, 31.126149 ], [ 79.349539, 31.124927 ], [ 79.35053, 31.124167 ], [ 79.351356, 31.123177 ], [ 79.352082, 31.12245 ], [ 79.353073, 31.122351 ], [ 79.354196, 31.122516 ], [ 79.356507, 31.122549 ], [ 79.358588, 31.122979 ], [ 79.361791, 31.123243 ], [ 79.364103, 31.123639 ], [ 79.364994, 31.123837 ], [ 79.365589, 31.122384 ], [ 79.367141, 31.119016 ], [ 79.367703, 31.11819 ], [ 79.368297, 31.117761 ], [ 79.370491, 31.116968 ], [ 79.373001, 31.116341 ], [ 79.374883, 31.115945 ], [ 79.375213, 31.11568 ], [ 79.375411, 31.115218 ], [ 79.375544, 31.114326 ], [ 79.375973, 31.113798 ], [ 79.376666, 31.113468 ], [ 79.377459, 31.113402 ], [ 79.378087, 31.1136 ], [ 79.378615, 31.114128 ], [ 79.378945, 31.114822 ], [ 79.37987, 31.114987 ], [ 79.380728, 31.115251 ], [ 79.381092, 31.115416 ], [ 79.382512, 31.115779 ], [ 79.383437, 31.115548 ], [ 79.384526, 31.11535 ], [ 79.385418, 31.11535 ], [ 79.386475, 31.115515 ], [ 79.387366, 31.115746 ], [ 79.388291, 31.116176 ], [ 79.389414, 31.116902 ], [ 79.390008, 31.117398 ], [ 79.3909, 31.117464 ], [ 79.392056, 31.117464 ], [ 79.393674, 31.117365 ], [ 79.394467, 31.117133 ], [ 79.39516, 31.116836 ], [ 79.395457, 31.116407 ], [ 79.395854, 31.116143 ], [ 79.396481, 31.116044 ], [ 79.397901, 31.115945 ], [ 79.398297, 31.116011 ], [ 79.398529, 31.115713 ], [ 79.399189, 31.115416 ], [ 79.399916, 31.115251 ], [ 79.402095, 31.115317 ], [ 79.402954, 31.115251 ], [ 79.403449, 31.115053 ], [ 79.404044, 31.114524 ], [ 79.404638, 31.114227 ], [ 79.405398, 31.114029 ], [ 79.406223, 31.113897 ], [ 79.407775, 31.113501 ], [ 79.408766, 31.11175 ], [ 79.409658, 31.110793 ], [ 79.410979, 31.109835 ], [ 79.411937, 31.108976 ], [ 79.412762, 31.108019 ], [ 79.41339, 31.107127 ], [ 79.413852, 31.106566 ], [ 79.413918, 31.105707 ], [ 79.413786, 31.105013 ], [ 79.414149, 31.103891 ], [ 79.414611, 31.102834 ], [ 79.414975, 31.101645 ], [ 79.415866, 31.098078 ], [ 79.416527, 31.094347 ], [ 79.416857, 31.091969 ], [ 79.417254, 31.087775 ], [ 79.417254, 31.08576 ], [ 79.417088, 31.084076 ], [ 79.416626, 31.081335 ], [ 79.415602, 31.078693 ], [ 79.41514, 31.077273 ], [ 79.414744, 31.076282 ], [ 79.414215, 31.075357 ], [ 79.413951, 31.074697 ], [ 79.413753, 31.073937 ], [ 79.413291, 31.073244 ], [ 79.412381, 31.07234 ], [ 79.4147938, 31.0697322 ], [ 79.416512, 31.068126 ], [ 79.417669, 31.066721 ], [ 79.418289, 31.065606 ], [ 79.41957, 31.06292 ], [ 79.420644, 31.05821 ], [ 79.420892, 31.055565 ], [ 79.420892, 31.053045 ], [ 79.420107, 31.05102 ], [ 79.418578, 31.048996 ], [ 79.419446, 31.047343 ], [ 79.419692, 31.045921 ], [ 79.419757, 31.044913 ], [ 79.419659, 31.04423 ], [ 79.419562, 31.043417 ], [ 79.419464, 31.042636 ], [ 79.420017, 31.041693 ], [ 79.420538, 31.040619 ], [ 79.42083, 31.039969 ], [ 79.421058, 31.039123 ], [ 79.421286, 31.037919 ], [ 79.421806, 31.037074 ], [ 79.422587, 31.036196 ], [ 79.423075, 31.03535 ], [ 79.42353, 31.034341 ], [ 79.423888, 31.033138 ], [ 79.424181, 31.031739 ], [ 79.424343, 31.030731 ], [ 79.424343, 31.030243 ], [ 79.424376, 31.029495 ], [ 79.424766, 31.028714 ], [ 79.425059, 31.028129 ], [ 79.425905, 31.026958 ], [ 79.426263, 31.026112 ], [ 79.426653, 31.025364 ], [ 79.426815, 31.024648 ], [ 79.427011, 31.023835 ], [ 79.427108, 31.023282 ], [ 79.427466, 31.022924 ], [ 79.428409, 31.022599 ], [ 79.429255, 31.022501 ], [ 79.430686, 31.022501 ], [ 79.431922, 31.022534 ], [ 79.434297, 31.022762 ], [ 79.436118, 31.023054 ], [ 79.437582, 31.023477 ], [ 79.438818, 31.023705 ], [ 79.439729, 31.024095 ], [ 79.441192, 31.024909 ], [ 79.443046, 31.02608 ], [ 79.44386, 31.026535 ], [ 79.4449, 31.026925 ], [ 79.445876, 31.027283 ], [ 79.446592, 31.027771 ], [ 79.447112, 31.028064 ], [ 79.447926, 31.028389 ], [ 79.449389, 31.028682 ], [ 79.450593, 31.029039 ], [ 79.451666, 31.029625 ], [ 79.45287, 31.030276 ], [ 79.453911, 31.030601 ], [ 79.455537, 31.030991 ], [ 79.456578, 31.031089 ], [ 79.458074, 31.031219 ], [ 79.459115, 31.031154 ], [ 79.459766, 31.031024 ], [ 79.460676, 31.031089 ], [ 79.461717, 31.031414 ], [ 79.462856, 31.031577 ], [ 79.464189, 31.031804 ], [ 79.46523, 31.032065 ], [ 79.466206, 31.032325 ], [ 79.46767, 31.032813 ], [ 79.468548, 31.033138 ], [ 79.469459, 31.033496 ], [ 79.470109, 31.034049 ], [ 79.470662, 31.034472 ], [ 79.471443, 31.034764 ], [ 79.472549, 31.034699 ], [ 79.473427, 31.034569 ], [ 79.4745, 31.034407 ], [ 79.475411, 31.034179 ], [ 79.476322, 31.033756 ], [ 79.477721, 31.03317 ], [ 79.478566, 31.03304 ], [ 79.47964, 31.033073 ], [ 79.48068, 31.033431 ], [ 79.481982, 31.033723 ], [ 79.483478, 31.033984 ], [ 79.484454, 31.033268 ], [ 79.485495, 31.032683 ], [ 79.486958, 31.032195 ], [ 79.488455, 31.031804 ], [ 79.490244, 31.031479 ], [ 79.492098, 31.031251 ], [ 79.494179, 31.031219 ], [ 79.495838, 31.031316 ], [ 79.497172, 31.031121 ], [ 79.498213, 31.030796 ], [ 79.500002, 31.031642 ], [ 79.500457, 31.032162 ], [ 79.501303, 31.032487 ], [ 79.502246, 31.032715 ], [ 79.5030688, 31.0327493 ], [ 79.5043672, 31.0325774 ], [ 79.505304, 31.03239 ], [ 79.505662, 31.03239 ], [ 79.506865, 31.03239 ], [ 79.508524, 31.027673 ], [ 79.509435, 31.026405 ], [ 79.50989, 31.025527 ], [ 79.509988, 31.024486 ], [ 79.509402, 31.023282 ], [ 79.508556, 31.022339 ], [ 79.507938, 31.021721 ], [ 79.507613, 31.021005 ], [ 79.507873, 31.018858 ], [ 79.508459, 31.01733 ], [ 79.509077, 31.015118 ], [ 79.510541, 31.014825 ], [ 79.512232, 31.014272 ], [ 79.514216, 31.013459 ], [ 79.516363, 31.012516 ], [ 79.516558, 31.010401 ], [ 79.516884, 31.009165 ], [ 79.517339, 31.008287 ], [ 79.517989, 31.007246 ], [ 79.518802, 31.006628 ], [ 79.51929, 31.006108 ], [ 79.519518, 31.005522 ], [ 79.519616, 31.004969 ], [ 79.519518, 31.004416 ], [ 79.519258, 31.003636 ], [ 79.518867, 31.002985 ], [ 79.518347, 31.002205 ], [ 79.517696, 31.001424 ], [ 79.517241, 31.000741 ], [ 79.516884, 31.00022 ], [ 79.516688, 30.999765 ], [ 79.516688, 30.999147 ], [ 79.516558, 30.998496 ], [ 79.516331, 30.998009 ], [ 79.516038, 30.997456 ], [ 79.516753, 30.996707 ], [ 79.517306, 30.996415 ], [ 79.518119, 30.996057 ], [ 79.5189, 30.995471 ], [ 79.519193, 30.994788 ], [ 79.519583, 30.994268 ], [ 79.520104, 30.993747 ], [ 79.521047, 30.993064 ], [ 79.521697, 30.992642 ], [ 79.522706, 30.990332 ], [ 79.524137, 30.9903 ], [ 79.527455, 30.989747 ], [ 79.5300661, 30.9888344 ], [ 79.5301963, 30.9871842 ], [ 79.5315008, 30.9847859 ], [ 79.534037, 30.982781 ], [ 79.537148, 30.981159 ], [ 79.538254, 30.980346 ], [ 79.538644, 30.978557 ], [ 79.539295, 30.977874 ], [ 79.53936, 30.975923 ], [ 79.540075, 30.975239 ], [ 79.540205, 30.975109 ], [ 79.540205, 30.974589 ], [ 79.540824, 30.974231 ], [ 79.540921, 30.973776 ], [ 79.541084, 30.973255 ], [ 79.541409, 30.972735 ], [ 79.542352, 30.972182 ], [ 79.543523, 30.971727 ], [ 79.544434, 30.971434 ], [ 79.545052, 30.971109 ], [ 79.54593, 30.970425 ], [ 79.54619, 30.970003 ], [ 79.546544, 30.969361 ], [ 79.546886, 30.968676 ], [ 79.547514, 30.967762 ], [ 79.547971, 30.967077 ], [ 79.548599, 30.966448 ], [ 79.549342, 30.965991 ], [ 79.550451, 30.965124 ], [ 79.550777, 30.964375 ], [ 79.550972, 30.963139 ], [ 79.551069, 30.962229 ], [ 79.551297, 30.961058 ], [ 79.551557, 30.959887 ], [ 79.552143, 30.958878 ], [ 79.552631, 30.957968 ], [ 79.553249, 30.957382 ], [ 79.555011, 30.957012 ], [ 79.556366, 30.956915 ], [ 79.557527, 30.956722 ], [ 79.558398, 30.956238 ], [ 79.5602858, 30.9563594 ], [ 79.5629292, 30.9561223 ], [ 79.5650576, 30.9557477 ], [ 79.5658479, 30.9552247 ], [ 79.5669535, 30.9535268 ], [ 79.56759, 30.9516086 ], [ 79.5685212, 30.9502 ], [ 79.5711076, 30.9496643 ], [ 79.5732807, 30.9496091 ], [ 79.5764342, 30.9493657 ], [ 79.5791285, 30.9489048 ], [ 79.5813231, 30.9486718 ], [ 79.5829681, 30.9482094 ], [ 79.5850213, 30.9478909 ], [ 79.586365, 30.947722 ], [ 79.58772, 30.947335 ], [ 79.589268, 30.946174 ], [ 79.591591, 30.944045 ], [ 79.593236, 30.942883 ], [ 79.595424, 30.941835 ], [ 79.596595, 30.941477 ], [ 79.597826, 30.941093 ], [ 79.598682, 30.940293 ], [ 79.599938, 30.939323 ], [ 79.600909, 30.938809 ], [ 79.60268, 30.939722 ], [ 79.604679, 30.940236 ], [ 79.605897, 30.940794 ], [ 79.607296, 30.941867 ], [ 79.608272, 30.94229 ], [ 79.609769, 30.942453 ], [ 79.611297, 30.942778 ], [ 79.613054, 30.943201 ], [ 79.614712, 30.943851 ], [ 79.616614, 30.946118 ], [ 79.616899, 30.947603 ], [ 79.617699, 30.948745 ], [ 79.620155, 30.950915 ], [ 79.621639, 30.950858 ], [ 79.623923, 30.950915 ], [ 79.625808, 30.951087 ], [ 79.628378, 30.9516 ], [ 79.630548, 30.951886 ], [ 79.632889, 30.952457 ], [ 79.635117, 30.953085 ], [ 79.637287, 30.954113 ], [ 79.639, 30.95537 ], [ 79.640999, 30.956683 ], [ 79.641969, 30.957083 ], [ 79.643283, 30.957254 ], [ 79.645225, 30.957711 ], [ 79.646138, 30.958282 ], [ 79.647908, 30.959938 ], [ 79.649051, 30.960452 ], [ 79.65202, 30.96148 ], [ 79.65419, 30.962108 ], [ 79.655732, 30.962394 ], [ 79.656417, 30.962565 ], [ 79.658073, 30.963193 ], [ 79.660986, 30.964792 ], [ 79.663156, 30.96445 ], [ 79.664355, 30.965706 ], [ 79.665497, 30.966734 ], [ 79.665783, 30.967248 ], [ 79.665783, 30.968047 ], [ 79.66544, 30.968733 ], [ 79.664241, 30.969818 ], [ 79.663499, 30.970846 ], [ 79.662985, 30.971874 ], [ 79.662985, 30.974786 ], [ 79.663099, 30.976499 ], [ 79.663613, 30.978783 ], [ 79.664469, 30.980782 ], [ 79.665555, 30.982895 ], [ 79.668353, 30.982724 ], [ 79.670637, 30.982495 ], [ 79.67315, 30.982438 ], [ 79.674578, 30.982438 ], [ 79.677204, 30.980668 ], [ 79.678918, 30.97964 ], [ 79.681716, 30.978612 ], [ 79.684057, 30.977299 ], [ 79.687027, 30.975357 ], [ 79.689425, 30.974386 ], [ 79.692623, 30.973244 ], [ 79.694051, 30.973073 ], [ 79.695479, 30.972844 ], [ 79.696507, 30.971931 ], [ 79.69742, 30.97136 ], [ 79.698848, 30.971017 ], [ 79.700733, 30.970731 ], [ 79.703531, 30.974101 ], [ 79.705587, 30.975186 ], [ 79.707585, 30.976042 ], [ 79.710726, 30.976785 ], [ 79.713068, 30.976042 ], [ 79.714552, 30.975585 ], [ 79.715809, 30.975014 ], [ 79.716577, 30.974674 ], [ 79.718694, 30.975683 ], [ 79.720342, 30.976321 ], [ 79.722627, 30.976523 ], [ 79.723872, 30.976926 ], [ 79.725115, 30.977599 ], [ 79.725687, 30.977901 ], [ 79.727637, 30.978204 ], [ 79.729149, 30.978473 ], [ 79.731133, 30.978675 ], [ 79.733015, 30.978977 ], [ 79.734932, 30.979515 ], [ 79.735974, 30.980019 ], [ 79.737016, 30.980759 ], [ 79.73826, 30.981902 ], [ 79.738764, 30.982574 ], [ 79.739134, 30.98328 ], [ 79.739537, 30.98449 ], [ 79.740008, 30.985566 ], [ 79.740647, 30.986676 ], [ 79.741655, 30.988894 ], [ 79.742159, 30.990474 ], [ 79.74263, 30.991315 ], [ 79.743168, 30.992054 ], [ 79.744008, 30.992827 ], [ 79.744411, 30.993399 ], [ 79.74495, 30.994172 ], [ 79.745454, 30.994744 ], [ 79.74579, 30.995483 ], [ 79.746328, 30.996189 ], [ 79.746664, 30.996828 ], [ 79.747134, 30.997904 ], [ 79.747471, 30.998879 ], [ 79.747874, 30.99982 ], [ 79.747941, 31.000223 ], [ 79.748009, 31.001097 ], [ 79.748177, 31.002106 ], [ 79.748479, 31.00261 ], [ 79.749488, 31.003585 ], [ 79.751135, 31.004862 ], [ 79.752312, 31.005804 ], [ 79.753757, 31.004224 ], [ 79.754833, 31.003047 ], [ 79.756077, 31.001871 ], [ 79.757052, 31.000996 ], [ 79.757993, 31.000425 ], [ 79.758934, 31.000055 ], [ 79.760346, 30.999786 ], [ 79.761288, 30.999753 ], [ 79.762296, 30.99982 ], [ 79.762531, 30.999887 ], [ 79.762565, 30.999013 ], [ 79.762666, 30.998206 ], [ 79.762968, 30.9975 ], [ 79.763405, 30.996929 ], [ 79.76391, 30.996593 ], [ 79.764683, 30.996156 ], [ 79.764918, 30.995954 ], [ 79.765221, 30.995214 ], [ 79.765557, 30.994643 ], [ 79.76596, 30.99387 ], [ 79.766632, 30.992996 ], [ 79.767406, 30.992088 ], [ 79.768112, 30.991516 ], [ 79.768784, 30.990911 ], [ 79.769524, 30.990441 ], [ 79.77023, 30.990037 ], [ 79.77181, 30.98923 ], [ 79.772583, 30.988827 ], [ 79.773558, 30.988592 ], [ 79.774264, 30.988356 ], [ 79.774566, 30.987785 ], [ 79.775003, 30.987079 ], [ 79.775642, 30.986541 ], [ 79.776213, 30.986239 ], [ 79.777356, 30.986239 ], [ 79.778802, 30.986272 ], [ 79.779777, 30.986306 ], [ 79.780617, 30.986642 ], [ 79.782197, 30.986709 ], [ 79.783542, 30.986709 ], [ 79.786265, 30.98681 ], [ 79.789627, 30.986642 ], [ 79.792081, 30.986171 ], [ 79.793022, 30.985633 ], [ 79.793358, 30.984255 ], [ 79.793594, 30.982877 ], [ 79.79393, 30.981667 ], [ 79.794468, 30.980793 ], [ 79.795274, 30.980019 ], [ 79.796417, 30.979246 ], [ 79.797392, 30.97854 ], [ 79.798367, 30.97817 ], [ 79.799914, 30.977666 ], [ 79.801931, 30.9777 ], [ 79.803712, 30.977901 ], [ 79.806099, 30.979347 ], [ 79.807141, 30.979683 ], [ 79.808217, 30.980288 ], [ 79.809091, 30.978809 ], [ 79.8101, 30.978271 ], [ 79.811411, 30.977834 ], [ 79.812083, 30.97733 ], [ 79.812554, 30.976859 ], [ 79.813125, 30.97575 ], [ 79.81326, 30.974909 ], [ 79.813562, 30.974136 ], [ 79.814134, 30.973262 ], [ 79.814739, 30.97259 ], [ 79.815646, 30.972086 ], [ 79.816588, 30.971682 ], [ 79.818168, 30.971447 ], [ 79.819714, 30.97148 ], [ 79.821361, 30.971548 ], [ 79.822975, 30.971817 ], [ 79.824622, 30.972186 ], [ 79.826404, 30.972086 ], [ 79.827413, 30.972623 ], [ 79.828219, 30.972792 ], [ 79.829799, 30.97296 ], [ 79.830942, 30.973094 ], [ 79.831884, 30.973397 ], [ 79.832926, 30.972455 ], [ 79.833531, 30.972321 ], [ 79.834607, 30.972321 ], [ 79.835581, 30.972018 ], [ 79.837061, 30.971447 ], [ 79.837733, 30.971144 ], [ 79.839515, 30.971682 ], [ 79.841162, 30.972724 ], [ 79.842708, 30.973329 ], [ 79.843851, 30.973632 ], [ 79.844524, 30.973901 ], [ 79.845297, 30.973968 ], [ 79.846205, 30.973632 ], [ 79.847314, 30.973195 ], [ 79.848591, 30.972993 ], [ 79.849903, 30.972825 ], [ 79.850507, 30.97296 ], [ 79.85313, 30.974573 ], [ 79.854105, 30.975246 ], [ 79.854844, 30.975683 ], [ 79.855718, 30.975884 ], [ 79.856256, 30.975817 ], [ 79.857231, 30.975582 ], [ 79.857466, 30.975481 ], [ 79.858071, 30.974909 ], [ 79.858811, 30.974472 ], [ 79.85982, 30.974035 ], [ 79.860996, 30.973598 ], [ 79.861635, 30.973464 ], [ 79.862139, 30.972892 ], [ 79.862778, 30.97259 ], [ 79.863686, 30.972455 ], [ 79.864694, 30.97222 ], [ 79.866039, 30.971783 ], [ 79.866846, 30.971279 ], [ 79.867854, 30.970741 ], [ 79.869299, 30.9698 ], [ 79.870779, 30.968959 ], [ 79.871686, 30.968556 ], [ 79.872829, 30.968052 ], [ 79.873939, 30.967615 ], [ 79.875014, 30.966942 ], [ 79.876393, 30.965766 ], [ 79.877267, 30.96432 ], [ 79.877939, 30.962572 ], [ 79.877973, 30.960723 ], [ 79.878122, 30.959214 ], [ 79.87822, 30.958578 ], [ 79.878399, 30.957876 ], [ 79.878824, 30.957208 ], [ 79.879286, 30.956841 ], [ 79.879839, 30.956516 ], [ 79.880261, 30.956516 ], [ 79.880619, 30.956549 ], [ 79.88101, 30.956549 ], [ 79.88166, 30.955768 ], [ 79.882148, 30.955117 ], [ 79.882311, 30.953198 ], [ 79.882613, 30.952918 ], [ 79.882851, 30.952297 ], [ 79.882905, 30.951292 ], [ 79.882668, 30.950251 ], [ 79.881974, 30.9491 ], [ 79.8817, 30.948662 ], [ 79.882577, 30.947329 ], [ 79.883398, 30.945922 ], [ 79.883946, 30.944863 ], [ 79.88422, 30.943876 ], [ 79.884275, 30.94247 ], [ 79.884019, 30.940661 ], [ 79.883782, 30.939803 ], [ 79.884696, 30.939638 ], [ 79.885609, 30.939602 ], [ 79.886924, 30.93909 ], [ 79.888404, 30.937885 ], [ 79.888589, 30.937365 ], [ 79.888427, 30.936649 ], [ 79.887874, 30.935446 ], [ 79.887353, 30.934372 ], [ 79.886996, 30.933299 ], [ 79.886735, 30.931705 ], [ 79.886605, 30.930014 ], [ 79.886833, 30.928257 ], [ 79.887191, 30.926175 ], [ 79.887613, 30.924451 ], [ 79.888134, 30.922825 ], [ 79.888361, 30.921166 ], [ 79.888557, 30.919312 ], [ 79.888687, 30.918141 ], [ 79.888784, 30.917653 ], [ 79.890281, 30.916938 ], [ 79.891419, 30.916905 ], [ 79.892655, 30.9171 ], [ 79.894444, 30.91736 ], [ 79.895095, 30.916873 ], [ 79.895843, 30.916645 ], [ 79.896786, 30.916677 ], [ 79.897469, 30.91671 ], [ 79.898543, 30.916352 ], [ 79.899714, 30.916255 ], [ 79.90095, 30.916287 ], [ 79.901958, 30.915669 ], [ 79.902966, 30.915181 ], [ 79.903975, 30.914791 ], [ 79.905048, 30.914531 ], [ 79.906121, 30.914563 ], [ 79.908398, 30.914693 ], [ 79.909699, 30.913197 ], [ 79.910805, 30.912026 ], [ 79.911879, 30.91105 ], [ 79.912529, 30.908936 ], [ 79.91292, 30.907797 ], [ 79.913603, 30.907082 ], [ 79.914221, 30.906204 ], [ 79.914871, 30.904903 ], [ 79.915749, 30.903374 ], [ 79.916335, 30.902138 ], [ 79.917018, 30.901097 ], [ 79.917961, 30.900088 ], [ 79.918905, 30.899373 ], [ 79.91949, 30.898657 ], [ 79.919848, 30.897551 ], [ 79.920401, 30.896543 ], [ 79.921149, 30.895665 ], [ 79.922515, 30.894721 ], [ 79.923296, 30.894071 ], [ 79.923816, 30.893258 ], [ 79.924369, 30.892054 ], [ 79.92502, 30.891144 ], [ 79.925833, 30.890395 ], [ 79.926484, 30.889647 ], [ 79.926971, 30.887891 ], [ 79.927459, 30.886329 ], [ 79.928175, 30.88428 ], [ 79.928858, 30.882589 ], [ 79.930972, 30.88054 ], [ 79.932501, 30.879954 ], [ 79.93403, 30.879206 ], [ 79.935103, 30.879629 ], [ 79.936339, 30.880735 ], [ 79.938063, 30.882133 ], [ 79.938811, 30.882784 ], [ 79.939787, 30.883988 ], [ 79.942032, 30.884215 ], [ 79.943333, 30.883825 ], [ 79.944211, 30.883792 ], [ 79.945252, 30.88363 ], [ 79.94652, 30.883272 ], [ 79.947301, 30.882979 ], [ 79.948081, 30.882751 ], [ 79.94883, 30.882817 ], [ 79.950196, 30.883142 ], [ 79.951757, 30.883792 ], [ 79.953741, 30.884605 ], [ 79.955303, 30.885224 ], [ 79.957189, 30.886004 ], [ 79.958263, 30.886655 ], [ 79.960409, 30.887956 ], [ 79.961515, 30.888541 ], [ 79.962361, 30.887468 ], [ 79.963207, 30.885972 ], [ 79.963922, 30.884671 ], [ 79.964508, 30.883532 ], [ 79.965711, 30.882621 ], [ 79.967435, 30.881483 ], [ 79.968964, 30.880605 ], [ 79.970656, 30.880052 ], [ 79.972867, 30.879434 ], [ 79.97485, 30.879395 ], [ 79.976346, 30.879135 ], [ 79.97781, 30.87855 ], [ 79.979339, 30.878257 ], [ 79.980543, 30.878062 ], [ 79.982364, 30.878322 ], [ 79.98399, 30.878192 ], [ 79.984901, 30.878127 ], [ 79.986365, 30.877639 ], [ 79.987471, 30.877379 ], [ 79.988707, 30.876923 ], [ 79.98978, 30.876143 ], [ 79.992122, 30.874614 ], [ 79.993358, 30.873475 ], [ 79.994009, 30.872109 ], [ 79.994854, 30.870255 ], [ 79.995115, 30.869605 ], [ 79.99492, 30.868726 ], [ 79.994985, 30.867621 ], [ 79.99531, 30.867003 ], [ 79.996644, 30.865864 ], [ 79.998107, 30.865734 ], [ 79.999311, 30.865929 ], [ 80.000514, 30.866287 ], [ 80.001718, 30.866352 ], [ 80.003051, 30.866417 ], [ 80.004548, 30.865994 ], [ 80.006304, 30.865506 ], [ 80.00689, 30.865506 ], [ 80.008171, 30.866245 ], [ 80.008722, 30.865078 ], [ 80.009118, 30.864109 ], [ 80.0098, 30.863317 ], [ 80.011297, 30.861842 ], [ 80.012662, 30.860235 ], [ 80.013256, 30.859223 ], [ 80.013653, 30.858276 ], [ 80.013983, 30.857858 ], [ 80.014731, 30.85733 ], [ 80.015325, 30.856669 ], [ 80.015898, 30.85559 ], [ 80.016382, 30.85515 ], [ 80.017174, 30.854424 ], [ 80.018275, 30.853389 ], [ 80.018892, 30.852795 ], [ 80.020124, 30.851738 ], [ 80.021621, 30.850726 ], [ 80.02314, 30.849933 ], [ 80.024285, 30.849317 ], [ 80.025833, 30.849157 ], [ 80.027199, 30.846848 ], [ 80.028077, 30.845189 ], [ 80.028891, 30.843432 ], [ 80.029574, 30.842554 ], [ 80.03068, 30.841643 ], [ 80.031916, 30.84083 ], [ 80.032956, 30.84044 ], [ 80.03364, 30.840505 ], [ 80.035168, 30.841383 ], [ 80.036632, 30.84018 ], [ 80.037966, 30.838944 ], [ 80.039007, 30.83826 ], [ 80.040373, 30.837577 ], [ 80.041251, 30.837187 ], [ 80.042194, 30.836927 ], [ 80.043008, 30.836894 ], [ 80.044992, 30.837968 ], [ 80.046586, 30.838846 ], [ 80.047724, 30.839464 ], [ 80.048277, 30.840212 ], [ 80.048732, 30.840993 ], [ 80.049285, 30.84122 ], [ 80.050229, 30.84122 ], [ 80.051465, 30.840537 ], [ 80.052863, 30.839529 ], [ 80.054002, 30.838813 ], [ 80.054327, 30.838065 ], [ 80.054945, 30.837024 ], [ 80.055595, 30.836146 ], [ 80.056474, 30.835593 ], [ 80.057124, 30.835073 ], [ 80.057287, 30.834617 ], [ 80.057287, 30.833707 ], [ 80.061385, 30.830096 ], [ 80.063955, 30.827819 ], [ 80.066655, 30.825607 ], [ 80.067988, 30.824469 ], [ 80.068932, 30.823591 ], [ 80.070168, 30.822452 ], [ 80.071209, 30.821769 ], [ 80.071762, 30.821509 ], [ 80.073095, 30.821021 ], [ 80.074006, 30.820566 ], [ 80.074331, 30.820045 ], [ 80.074657, 30.81933 ], [ 80.074949, 30.818484 ], [ 80.07547, 30.817378 ], [ 80.076023, 30.816565 ], [ 80.076478, 30.815947 ], [ 80.077617, 30.815329 ], [ 80.078072, 30.814808 ], [ 80.079048, 30.812629 ], [ 80.079601, 30.81123 ], [ 80.080577, 30.809767 ], [ 80.081812, 30.8084 ], [ 80.082463, 30.807685 ], [ 80.083504, 30.806481 ], [ 80.084252, 30.804985 ], [ 80.084545, 30.803717 ], [ 80.084838, 30.801862 ], [ 80.085456, 30.800724 ], [ 80.086041, 30.799488 ], [ 80.086431, 30.798154 ], [ 80.087049, 30.796626 ], [ 80.087505, 30.795617 ], [ 80.088513, 30.795064 ], [ 80.0904, 30.794674 ], [ 80.091278, 30.794544 ], [ 80.092872, 30.793991 ], [ 80.093685, 30.793828 ], [ 80.096287, 30.792918 ], [ 80.100516, 30.79051 ], [ 80.101589, 30.789762 ], [ 80.102435, 30.788917 ], [ 80.103216, 30.788461 ], [ 80.104321, 30.78742 ], [ 80.105785, 30.7842 ], [ 80.106566, 30.783224 ], [ 80.107704, 30.782541 ], [ 80.108517, 30.7815 ], [ 80.109656, 30.780947 ], [ 80.110827, 30.780525 ], [ 80.112388, 30.779679 ], [ 80.113104, 30.779614 ], [ 80.113657, 30.779646 ], [ 80.114665, 30.779939 ], [ 80.115836, 30.780752 ], [ 80.116584, 30.780947 ], [ 80.11691, 30.780655 ], [ 80.117527, 30.780492 ], [ 80.118211, 30.780167 ], [ 80.119186, 30.779289 ], [ 80.119642, 30.779093 ], [ 80.121171, 30.779191 ], [ 80.122146, 30.779321 ], [ 80.122569, 30.779549 ], [ 80.123025, 30.779874 ], [ 80.123285, 30.780134 ], [ 80.124521, 30.779939 ], [ 80.126277, 30.779842 ], [ 80.12696, 30.780004 ], [ 80.127513, 30.78124 ], [ 80.127643, 30.781988 ], [ 80.127936, 30.782802 ], [ 80.128587, 30.783973 ], [ 80.128684, 30.784786 ], [ 80.128847, 30.785436 ], [ 80.129205, 30.785827 ], [ 80.129985, 30.786184 ], [ 80.130603, 30.786412 ], [ 80.130994, 30.786802 ], [ 80.131221, 30.786965 ], [ 80.131839, 30.78703 ], [ 80.132978, 30.786835 ], [ 80.134116, 30.78677 ], [ 80.135905, 30.787063 ], [ 80.137337, 30.787616 ], [ 80.138573, 30.787778 ], [ 80.139841, 30.788168 ], [ 80.139646, 30.789177 ], [ 80.140004, 30.789958 ], [ 80.140492, 30.790706 ], [ 80.140914, 30.791129 ], [ 80.142769, 30.792104 ], [ 80.143712, 30.792202 ], [ 80.145111, 30.792202 ], [ 80.146151, 30.791551 ], [ 80.14729, 30.791389 ], [ 80.149079, 30.791356 ], [ 80.14999, 30.790803 ], [ 80.150835, 30.790153 ], [ 80.151746, 30.790023 ], [ 80.15282, 30.78999 ], [ 80.15347, 30.789795 ], [ 80.153795, 30.789567 ], [ 80.154251, 30.789567 ], [ 80.154901, 30.79038 ], [ 80.154901, 30.791486 ], [ 80.154999, 30.792104 ], [ 80.155227, 30.792755 ], [ 80.154283, 30.793178 ], [ 80.153373, 30.793796 ], [ 80.152754, 30.794284 ], [ 80.153242, 30.794967 ], [ 80.154706, 30.796203 ], [ 80.155259, 30.796821 ], [ 80.155845, 30.797797 ], [ 80.156365, 30.798967 ], [ 80.156495, 30.799455 ], [ 80.156528, 30.801407 ], [ 80.156462, 30.801895 ], [ 80.156332, 30.80222 ], [ 80.156462, 30.803033 ], [ 80.15643, 30.803847 ], [ 80.156462, 30.804725 ], [ 80.156885, 30.80492 ], [ 80.157211, 30.805701 ], [ 80.157633, 30.806286 ], [ 80.158219, 30.806937 ], [ 80.159227, 30.807782 ], [ 80.159878, 30.807913 ], [ 80.161504, 30.80736 ], [ 80.161862, 30.807034 ], [ 80.162252, 30.806872 ], [ 80.162968, 30.806774 ], [ 80.163846, 30.806449 ], [ 80.164269, 30.806156 ], [ 80.164822, 30.806091 ], [ 80.166676, 30.806286 ], [ 80.167326, 30.806481 ], [ 80.167815, 30.806742 ], [ 80.168725, 30.807034 ], [ 80.169669, 30.807034 ], [ 80.170612, 30.806969 ], [ 80.170905, 30.807099 ], [ 80.171783, 30.807847 ], [ 80.172791, 30.809018 ], [ 80.17484, 30.808433 ], [ 80.175361, 30.808173 ], [ 80.176044, 30.807685 ], [ 80.178223, 30.806774 ], [ 80.179362, 30.806026 ], [ 80.179817, 30.804595 ], [ 80.180207, 30.803619 ], [ 80.180305, 30.803066 ], [ 80.180175, 30.802415 ], [ 80.180142, 30.801082 ], [ 80.180402, 30.800626 ], [ 80.180793, 30.800106 ], [ 80.181606, 30.799586 ], [ 80.182224, 30.799098 ], [ 80.182875, 30.798382 ], [ 80.18333, 30.798057 ], [ 80.183558, 30.797764 ], [ 80.183493, 30.796788 ], [ 80.183493, 30.795747 ], [ 80.183427, 30.795194 ], [ 80.18359, 30.794934 ], [ 80.184241, 30.794609 ], [ 80.185022, 30.794316 ], [ 80.185347, 30.793763 ], [ 80.185412, 30.792787 ], [ 80.185509, 30.792527 ], [ 80.185314, 30.791942 ], [ 80.185509, 30.791226 ], [ 80.185867, 30.790738 ], [ 80.186127, 30.790608 ], [ 80.186388, 30.790608 ], [ 80.186648, 30.790445 ], [ 80.187038, 30.78973 ], [ 80.188632, 30.789242 ], [ 80.191592, 30.787908 ], [ 80.192373, 30.786477 ], [ 80.192633, 30.784948 ], [ 80.193186, 30.783973 ], [ 80.194194, 30.782574 ], [ 80.194845, 30.781208 ], [ 80.195658, 30.779711 ], [ 80.196829, 30.778248 ], [ 80.198162, 30.777044 ], [ 80.199333, 30.776068 ], [ 80.200472, 30.775873 ], [ 80.200309, 30.77519 ], [ 80.199724, 30.774475 ], [ 80.199008, 30.773954 ], [ 80.198227, 30.773531 ], [ 80.197382, 30.773304 ], [ 80.197187, 30.773076 ], [ 80.197252, 30.77171 ], [ 80.196959, 30.767676 ], [ 80.196992, 30.766538 ], [ 80.197187, 30.76566 ], [ 80.19774, 30.764911 ], [ 80.2007, 30.763025 ], [ 80.201643, 30.762505 ], [ 80.202424, 30.762472 ], [ 80.203302, 30.762082 ], [ 80.2047, 30.761138 ], [ 80.205188, 30.759902 ], [ 80.206002, 30.75961 ], [ 80.206717, 30.759545 ], [ 80.207758, 30.759805 ], [ 80.207986, 30.759642 ], [ 80.208246, 30.758796 ], [ 80.208571, 30.758504 ], [ 80.208701, 30.757886 ], [ 80.208799, 30.75678 ], [ 80.209124, 30.756162 ], [ 80.20958, 30.755967 ], [ 80.209905, 30.755609 ], [ 80.210263, 30.755414 ], [ 80.210588, 30.754731 ], [ 80.211043, 30.754243 ], [ 80.211596, 30.753527 ], [ 80.21254, 30.752681 ], [ 80.213613, 30.752844 ], [ 80.214036, 30.752811 ], [ 80.215565, 30.752226 ], [ 80.216118, 30.752063 ], [ 80.216443, 30.752031 ], [ 80.216898, 30.751771 ], [ 80.217483, 30.751771 ], [ 80.217972, 30.751836 ], [ 80.21885, 30.751543 ], [ 80.219208, 30.751966 ], [ 80.219533, 30.752746 ], [ 80.220281, 30.753137 ], [ 80.22101, 30.75343 ], [ 80.221683, 30.75364 ], [ 80.222343, 30.753739 ], [ 80.223059, 30.754202 ], [ 80.223831, 30.755086 ], [ 80.224631, 30.75649 ], [ 80.226639, 30.75708 ], [ 80.228955, 30.758147 ], [ 80.2337, 30.761586 ], [ 80.23634, 30.762308 ], [ 80.238638, 30.762319 ], [ 80.240553, 30.756008 ], [ 80.240746, 30.753266 ], [ 80.240812, 30.751476 ], [ 80.240812, 30.75063 ], [ 80.240649, 30.749297 ], [ 80.241625, 30.748126 ], [ 80.242471, 30.746955 ], [ 80.242991, 30.746044 ], [ 80.244357, 30.744678 ], [ 80.245268, 30.74419 ], [ 80.246211, 30.743865 ], [ 80.248098, 30.743572 ], [ 80.247968, 30.741165 ], [ 80.248456, 30.739506 ], [ 80.248554, 30.738758 ], [ 80.248521, 30.73814 ], [ 80.248716, 30.737359 ], [ 80.248749, 30.736871 ], [ 80.248456, 30.735603 ], [ 80.249237, 30.733066 ], [ 80.249302, 30.732708 ], [ 80.248976, 30.731081 ], [ 80.248879, 30.72926 ], [ 80.248521, 30.728024 ], [ 80.248131, 30.727016 ], [ 80.247708, 30.726788 ], [ 80.247643, 30.725747 ], [ 80.24748, 30.724999 ], [ 80.247187, 30.724088 ], [ 80.247252, 30.72373 ], [ 80.247675, 30.722982 ], [ 80.248293, 30.721453 ], [ 80.248684, 30.720933 ], [ 80.248781, 30.720413 ], [ 80.248456, 30.719827 ], [ 80.247578, 30.718461 ], [ 80.246439, 30.717713 ], [ 80.245691, 30.717453 ], [ 80.244813, 30.716054 ], [ 80.244357, 30.715761 ], [ 80.243089, 30.715599 ], [ 80.242764, 30.715111 ], [ 80.242373, 30.714135 ], [ 80.241723, 30.713809 ], [ 80.241267, 30.713126 ], [ 80.240487, 30.712313 ], [ 80.239803, 30.711923 ], [ 80.238828, 30.711533 ], [ 80.237624, 30.710719 ], [ 80.236909, 30.710297 ], [ 80.235673, 30.709809 ], [ 80.234794, 30.709646 ], [ 80.234046, 30.709353 ], [ 80.233266, 30.708963 ], [ 80.233103, 30.7088 ], [ 80.233168, 30.707239 ], [ 80.233363, 30.706198 ], [ 80.233428, 30.704734 ], [ 80.233396, 30.703759 ], [ 80.233136, 30.7021 ], [ 80.233103, 30.701384 ], [ 80.233201, 30.700603 ], [ 80.233559, 30.699237 ], [ 80.233786, 30.698034 ], [ 80.233786, 30.697286 ], [ 80.233656, 30.696635 ], [ 80.233623, 30.69605 ], [ 80.233689, 30.694976 ], [ 80.23294, 30.691951 ], [ 80.232908, 30.691333 ], [ 80.233038, 30.690715 ], [ 80.232973, 30.690488 ], [ 80.231704, 30.690455 ], [ 80.230501, 30.690357 ], [ 80.229492, 30.690065 ], [ 80.228159, 30.689577 ], [ 80.227183, 30.689089 ], [ 80.226565, 30.688894 ], [ 80.225947, 30.688861 ], [ 80.225329, 30.688894 ], [ 80.224744, 30.689089 ], [ 80.224451, 30.689512 ], [ 80.224028, 30.689772 ], [ 80.223605, 30.69026 ], [ 80.223085, 30.689869 ], [ 80.222564, 30.689284 ], [ 80.222304, 30.688764 ], [ 80.221881, 30.688373 ], [ 80.221491, 30.688178 ], [ 80.220352, 30.687983 ], [ 80.218238, 30.687105 ], [ 80.217522, 30.686909 ], [ 80.216677, 30.686844 ], [ 80.215376, 30.686975 ], [ 80.215148, 30.687397 ], [ 80.21453, 30.687105 ], [ 80.213294, 30.686844 ], [ 80.212026, 30.686682 ], [ 80.211115, 30.687137 ], [ 80.210464, 30.687788 ], [ 80.210236, 30.68808 ], [ 80.209423, 30.688406 ], [ 80.207927, 30.687755 ], [ 80.206951, 30.687462 ], [ 80.205878, 30.687462 ], [ 80.204577, 30.687625 ], [ 80.204251, 30.687918 ], [ 80.203666, 30.688113 ], [ 80.203145, 30.687365 ], [ 80.202723, 30.687007 ], [ 80.202137, 30.686779 ], [ 80.201357, 30.686649 ], [ 80.200804, 30.686844 ], [ 80.200283, 30.686584 ], [ 80.199503, 30.686422 ], [ 80.198527, 30.686357 ], [ 80.197811, 30.686161 ], [ 80.197616, 30.685608 ], [ 80.197486, 30.685055 ], [ 80.198006, 30.68395 ], [ 80.198266, 30.682714 ], [ 80.198071, 30.68164 ], [ 80.197844, 30.681022 ], [ 80.197583, 30.680534 ], [ 80.196673, 30.680144 ], [ 80.19664, 30.678745 ], [ 80.196347, 30.678095 ], [ 80.195664, 30.677509 ], [ 80.195859, 30.676631 ], [ 80.195827, 30.676273 ], [ 80.195599, 30.675362 ], [ 80.195631, 30.674874 ], [ 80.195469, 30.674419 ], [ 80.196412, 30.673346 ], [ 80.196803, 30.672663 ], [ 80.196412, 30.671882 ], [ 80.195859, 30.671362 ], [ 80.195111, 30.670809 ], [ 80.194786, 30.670321 ], [ 80.194493, 30.66967 ], [ 80.193875, 30.669085 ], [ 80.193615, 30.668499 ], [ 80.19342, 30.667718 ], [ 80.193225, 30.667231 ], [ 80.192574, 30.666027 ], [ 80.192672, 30.664986 ], [ 80.192997, 30.664693 ], [ 80.193582, 30.66388 ], [ 80.194493, 30.66362 ], [ 80.194819, 30.663425 ], [ 80.195241, 30.663425 ], [ 80.195436, 30.663327 ], [ 80.195567, 30.662937 ], [ 80.195631, 30.662091 ], [ 80.195925, 30.661701 ], [ 80.197518, 30.660432 ], [ 80.198689, 30.659424 ], [ 80.19921, 30.659131 ], [ 80.199503, 30.658481 ], [ 80.19986, 30.657407 ], [ 80.200251, 30.656627 ], [ 80.200511, 30.655781 ], [ 80.201877, 30.654935 ], [ 80.202625, 30.654577 ], [ 80.203601, 30.654187 ], [ 80.204349, 30.653732 ], [ 80.204414, 30.653309 ], [ 80.204642, 30.652496 ], [ 80.205162, 30.651585 ], [ 80.206268, 30.650804 ], [ 80.207211, 30.649698 ], [ 80.207667, 30.649471 ], [ 80.208577, 30.649536 ], [ 80.209976, 30.648658 ], [ 80.212188, 30.646771 ], [ 80.212513, 30.646934 ], [ 80.213196, 30.646283 ], [ 80.213717, 30.645697 ], [ 80.214595, 30.644364 ], [ 80.214855, 30.644527 ], [ 80.215278, 30.644331 ], [ 80.216352, 30.644071 ], [ 80.217913, 30.643388 ], [ 80.218726, 30.643193 ], [ 80.219409, 30.64277 ], [ 80.219669, 30.640753 ], [ 80.219734, 30.639875 ], [ 80.219344, 30.638802 ], [ 80.219376, 30.638346 ], [ 80.219051, 30.637501 ], [ 80.218954, 30.636948 ], [ 80.218986, 30.636232 ], [ 80.219214, 30.634443 ], [ 80.219214, 30.633662 ], [ 80.217815, 30.632752 ], [ 80.216514, 30.631646 ], [ 80.216352, 30.63119 ], [ 80.216059, 30.630605 ], [ 80.215148, 30.629466 ], [ 80.21453, 30.629076 ], [ 80.213944, 30.628523 ], [ 80.213457, 30.62797 ], [ 80.212318, 30.627222 ], [ 80.21196, 30.626864 ], [ 80.211668, 30.626376 ], [ 80.212123, 30.625693 ], [ 80.212611, 30.625108 ], [ 80.212838, 30.624327 ], [ 80.213034, 30.623904 ], [ 80.213554, 30.623449 ], [ 80.213814, 30.623091 ], [ 80.213912, 30.622636 ], [ 80.213847, 30.622148 ], [ 80.214075, 30.621757 ], [ 80.214432, 30.621562 ], [ 80.21427, 30.620261 ], [ 80.214009, 30.619773 ], [ 80.213944, 30.619155 ], [ 80.213944, 30.617757 ], [ 80.21388, 30.616683 ], [ 80.213619, 30.61535 ], [ 80.214725, 30.614634 ], [ 80.215441, 30.614049 ], [ 80.215734, 30.613463 ], [ 80.216156, 30.611511 ], [ 80.216319, 30.609918 ], [ 80.215701, 30.609625 ], [ 80.215213, 30.609169 ], [ 80.214562, 30.608681 ], [ 80.214237, 30.608226 ], [ 80.214172, 30.607446 ], [ 80.214172, 30.606502 ], [ 80.214335, 30.605559 ], [ 80.214497, 30.603867 ], [ 80.214367, 30.603152 ], [ 80.213912, 30.602469 ], [ 80.213554, 30.601818 ], [ 80.213164, 30.601395 ], [ 80.212676, 30.600615 ], [ 80.212123, 30.599476 ], [ 80.211863, 30.598663 ], [ 80.211537, 30.59798 ], [ 80.21118, 30.597037 ], [ 80.210952, 30.595931 ], [ 80.209814, 30.593394 ], [ 80.209228, 30.591605 ], [ 80.208773, 30.589588 ], [ 80.208447, 30.588872 ], [ 80.207926, 30.588318 ], [ 80.208522, 30.588054 ], [ 80.211384, 30.584509 ], [ 80.213596, 30.583663 ], [ 80.214767, 30.582947 ], [ 80.215613, 30.582134 ], [ 80.216718, 30.581256 ], [ 80.218345, 30.58015 ], [ 80.219744, 30.579304 ], [ 80.221272, 30.578654 ], [ 80.222346, 30.578556 ], [ 80.223419, 30.578524 ], [ 80.22459, 30.578654 ], [ 80.22781, 30.579597 ], [ 80.228884, 30.579337 ], [ 80.230673, 30.578816 ], [ 80.232202, 30.577938 ], [ 80.233242, 30.577873 ], [ 80.234901, 30.578101 ], [ 80.23656, 30.578621 ], [ 80.238187, 30.57732 ], [ 80.239846, 30.57667 ], [ 80.241179, 30.575076 ], [ 80.241927, 30.574458 ], [ 80.242838, 30.57384 ], [ 80.243781, 30.572701 ], [ 80.247424, 30.57088 ], [ 80.249376, 30.569806 ], [ 80.250352, 30.56844 ], [ 80.25136, 30.566456 ], [ 80.251848, 30.56574 ], [ 80.252824, 30.565155 ], [ 80.254515, 30.564569 ], [ 80.256759, 30.56561 ], [ 80.259232, 30.567237 ], [ 80.260728, 30.56779 ], [ 80.26224, 30.56818 ], [ 80.263086, 30.567985 ], [ 80.264127, 30.567497 ], [ 80.26481, 30.567562 ], [ 80.266469, 30.568147 ], [ 80.267347, 30.567985 ], [ 80.268225, 30.567497 ], [ 80.269689, 30.567139 ], [ 80.270925, 30.566781 ], [ 80.27317, 30.567237 ], [ 80.276097, 30.568408 ], [ 80.278699, 30.568993 ], [ 80.280618, 30.569253 ], [ 80.281692, 30.569579 ], [ 80.283286, 30.569839 ], [ 80.284164, 30.569806 ], [ 80.285465, 30.569644 ], [ 80.287286, 30.568765 ], [ 80.28901, 30.569156 ], [ 80.290962, 30.568896 ], [ 80.292231, 30.568993 ], [ 80.293922, 30.568928 ], [ 80.294995, 30.56844 ], [ 80.296069, 30.567887 ], [ 80.298378, 30.567172 ], [ 80.300037, 30.566879 ], [ 80.300753, 30.566976 ], [ 80.301696, 30.567594 ], [ 80.302964, 30.567107 ], [ 80.304233, 30.566749 ], [ 80.305469, 30.566293 ], [ 80.30638, 30.565643 ], [ 80.307291, 30.565513 ], [ 80.308494, 30.56574 ], [ 80.309991, 30.565805 ], [ 80.311161, 30.56548 ], [ 80.312072, 30.56483 ], [ 80.31308, 30.564537 ], [ 80.314447, 30.564472 ], [ 80.31539, 30.564537 ], [ 80.316528, 30.563268 ], [ 80.317407, 30.561674 ], [ 80.317504, 30.555852 ], [ 80.318448, 30.552795 ], [ 80.319554, 30.551038 ], [ 80.320692, 30.548761 ], [ 80.320757, 30.54746 ], [ 80.319131, 30.545443 ], [ 80.322611, 30.543167 ], [ 80.323815, 30.542093 ], [ 80.326417, 30.539263 ], [ 80.327458, 30.539198 ], [ 80.328889, 30.539328 ], [ 80.330385, 30.538905 ], [ 80.333117, 30.536401 ], [ 80.333963, 30.536141 ], [ 80.335069, 30.53536 ], [ 80.335004, 30.533636 ], [ 80.335134, 30.530904 ], [ 80.336142, 30.529212 ], [ 80.337216, 30.527618 ], [ 80.338549, 30.525374 ], [ 80.339493, 30.52404 ], [ 80.340696, 30.523065 ], [ 80.342745, 30.522154 ], [ 80.344242, 30.521341 ], [ 80.345478, 30.520332 ], [ 80.347884, 30.521081 ], [ 80.349088, 30.521503 ], [ 80.351105, 30.521568 ], [ 80.353143, 30.52268 ], [ 80.354607, 30.523265 ], [ 80.355941, 30.524111 ], [ 80.357437, 30.523656 ], [ 80.358901, 30.523428 ], [ 80.359714, 30.523656 ], [ 80.361048, 30.524534 ], [ 80.361666, 30.525672 ], [ 80.362609, 30.526453 ], [ 80.363943, 30.527234 ], [ 80.36456, 30.527527 ], [ 80.365536, 30.527201 ], [ 80.366512, 30.526583 ], [ 80.367813, 30.525868 ], [ 80.369147, 30.525575 ], [ 80.372302, 30.525347 ], [ 80.373733, 30.525054 ], [ 80.375067, 30.524697 ], [ 80.377019, 30.523753 ], [ 80.377929, 30.522517 ], [ 80.37871, 30.520078 ], [ 80.379165, 30.519492 ], [ 80.379653, 30.519134 ], [ 80.380564, 30.518874 ], [ 80.381605, 30.518809 ], [ 80.382841, 30.518549 ], [ 80.383882, 30.518094 ], [ 80.3856152, 30.5172278 ], [ 80.387004, 30.517931 ], [ 80.38824, 30.518191 ], [ 80.389314, 30.518289 ], [ 80.391298, 30.518289 ], [ 80.393087, 30.518029 ], [ 80.394843, 30.517833 ], [ 80.396177, 30.517898 ], [ 80.397933, 30.518256 ], [ 80.399592, 30.518907 ], [ 80.400406, 30.51946 ], [ 80.401089, 30.520045 ], [ 80.402292, 30.520305 ], [ 80.404081, 30.520468 ], [ 80.404829, 30.520696 ], [ 80.405838, 30.521184 ], [ 80.407171, 30.52255 ], [ 80.40844, 30.52281 ], [ 80.409318, 30.5232 ], [ 80.409871, 30.523688 ], [ 80.410424, 30.524664 ], [ 80.411887, 30.524241 ], [ 80.413286, 30.524014 ], [ 80.414978, 30.523818 ], [ 80.416181, 30.523948 ], [ 80.41719, 30.523851 ], [ 80.418295, 30.523591 ], [ 80.417645, 30.52255 ], [ 80.416116, 30.521184 ], [ 80.415401, 30.520078 ], [ 80.415465, 30.519362 ], [ 80.415693, 30.518289 ], [ 80.416051, 30.517345 ], [ 80.418588, 30.515784 ], [ 80.419434, 30.515036 ], [ 80.420442, 30.514938 ], [ 80.421125, 30.514743 ], [ 80.423142, 30.514711 ], [ 80.424183, 30.514483 ], [ 80.425419, 30.514093 ], [ 80.426687, 30.513572 ], [ 80.428249, 30.513084 ], [ 80.428639, 30.512857 ], [ 80.428737, 30.511978 ], [ 80.429225, 30.510873 ], [ 80.430461, 30.508856 ], [ 80.430656, 30.508368 ], [ 80.431794, 30.507782 ], [ 80.433193, 30.507295 ], [ 80.43612, 30.506124 ], [ 80.436706, 30.505993 ], [ 80.438202, 30.505018 ], [ 80.439601, 30.50466 ], [ 80.440251, 30.504009 ], [ 80.442235, 30.502741 ], [ 80.442724, 30.502383 ], [ 80.443146, 30.50183 ], [ 80.443569, 30.500952 ], [ 80.444155, 30.499065 ], [ 80.444317, 30.498122 ], [ 80.444447, 30.497666 ], [ 80.444968, 30.497341 ], [ 80.445976, 30.496886 ], [ 80.447505, 30.496691 ], [ 80.451701, 30.496463 ], [ 80.452417, 30.496496 ], [ 80.453392, 30.495975 ], [ 80.454141, 30.49565 ], [ 80.455929, 30.495129 ], [ 80.45658, 30.494706 ], [ 80.457296, 30.494414 ], [ 80.457751, 30.494284 ], [ 80.458109, 30.493633 ], [ 80.458759, 30.493243 ], [ 80.459377, 30.493015 ], [ 80.460256, 30.492983 ], [ 80.460809, 30.493015 ], [ 80.46263, 30.492039 ], [ 80.464419, 30.490933 ], [ 80.465102, 30.490706 ], [ 80.465916, 30.490641 ], [ 80.467021, 30.490901 ], [ 80.468062, 30.491291 ], [ 80.469331, 30.491519 ], [ 80.470176, 30.491454 ], [ 80.471185, 30.491129 ], [ 80.472486, 30.490445 ], [ 80.473819, 30.4896 ], [ 80.474568, 30.489274 ], [ 80.475088, 30.489274 ], [ 80.476227, 30.489632 ], [ 80.477528, 30.49025 ], [ 80.478666, 30.49038 ], [ 80.480878, 30.490348 ], [ 80.483415, 30.490218 ], [ 80.483838, 30.490088 ], [ 80.484944, 30.488396 ], [ 80.48592, 30.487681 ], [ 80.487611, 30.485599 ], [ 80.488522, 30.484623 ], [ 80.489562, 30.484688 ], [ 80.490766, 30.485339 ], [ 80.491612, 30.485957 ], [ 80.493206, 30.486022 ], [ 80.494084, 30.486282 ], [ 80.496296, 30.487355 ], [ 80.497044, 30.487941 ], [ 80.498377, 30.487908 ], [ 80.499158, 30.487941 ], [ 80.499614, 30.486217 ], [ 80.50085, 30.484395 ], [ 80.501435, 30.48381 ], [ 80.502118, 30.483289 ], [ 80.504037, 30.480947 ], [ 80.505046, 30.479614 ], [ 80.505631, 30.478573 ], [ 80.506574, 30.476394 ], [ 80.507225, 30.475678 ], [ 80.508006, 30.475093 ], [ 80.508819, 30.474832 ], [ 80.509925, 30.474605 ], [ 80.511193, 30.474214 ], [ 80.511974, 30.473824 ], [ 80.512787, 30.473043 ], [ 80.513633, 30.47262 ], [ 80.515064, 30.472295 ], [ 80.516332, 30.47223 ], [ 80.517471, 30.47223 ], [ 80.518284, 30.472425 ], [ 80.519358, 30.47145 ], [ 80.520008, 30.470441 ], [ 80.520691, 30.469563 ], [ 80.521439, 30.468945 ], [ 80.522058, 30.468522 ], [ 80.523228, 30.468197 ], [ 80.523944, 30.467872 ], [ 80.524432, 30.467221 ], [ 80.52544, 30.46566 ], [ 80.526058, 30.463383 ], [ 80.526676, 30.461594 ], [ 80.527164, 30.45961 ], [ 80.527782, 30.458536 ], [ 80.528953, 30.457528 ], [ 80.530222, 30.456585 ], [ 80.531328, 30.456227 ], [ 80.532596, 30.455511 ], [ 80.533507, 30.454796 ], [ 80.5345107, 30.4536394 ], [ 80.535003, 30.453072 ], [ 80.535296, 30.452909 ], [ 80.53715, 30.452356 ], [ 80.538418, 30.451901 ], [ 80.539752, 30.450795 ], [ 80.540468, 30.450047 ], [ 80.540747, 30.449059 ], [ 80.544275, 30.44862 ], [ 80.548699, 30.448685 ], [ 80.549447, 30.449401 ], [ 80.551106, 30.449986 ], [ 80.552179, 30.450539 ], [ 80.552862, 30.450962 ], [ 80.553253, 30.452654 ], [ 80.554163, 30.452556 ], [ 80.554749, 30.452361 ], [ 80.555529, 30.452263 ], [ 80.558912, 30.453825 ], [ 80.559791, 30.454443 ], [ 80.559888, 30.454833 ], [ 80.559921, 30.455679 ], [ 80.561059, 30.456264 ], [ 80.561742, 30.456719 ], [ 80.562588, 30.457825 ], [ 80.564052, 30.458899 ], [ 80.56493, 30.459387 ], [ 80.565548, 30.460037 ], [ 80.565157, 30.46381 ], [ 80.56558, 30.463941 ], [ 80.566914, 30.464136 ], [ 80.567662, 30.464136 ], [ 80.568931, 30.464396 ], [ 80.569971, 30.464428 ], [ 80.571012, 30.464233 ], [ 80.572053, 30.464201 ], [ 80.573452, 30.464331 ], [ 80.575078, 30.464754 ], [ 80.576151, 30.463941 ], [ 80.57755, 30.464331 ], [ 80.578461, 30.465567 ], [ 80.5796, 30.466673 ], [ 80.580543, 30.467323 ], [ 80.581909, 30.468039 ], [ 80.583633, 30.468267 ], [ 80.585162, 30.468592 ], [ 80.5863, 30.468494 ], [ 80.587764, 30.468267 ], [ 80.588479, 30.468267 ], [ 80.590398, 30.468397 ], [ 80.591309, 30.468364 ], [ 80.59183, 30.468267 ], [ 80.59248, 30.468364 ], [ 80.593098, 30.468657 ], [ 80.593684, 30.468689 ], [ 80.5944, 30.468462 ], [ 80.595538, 30.467974 ], [ 80.596156, 30.467876 ], [ 80.596871, 30.467974 ], [ 80.597425, 30.468624 ], [ 80.5978489, 30.4696485 ], [ 80.5988574, 30.4714609 ], [ 80.601946, 30.471097 ], [ 80.603019, 30.471031 ], [ 80.604548, 30.471162 ], [ 80.605719, 30.471389 ], [ 80.60663, 30.471487 ], [ 80.606727, 30.471227 ], [ 80.607605, 30.466901 ], [ 80.608158, 30.465307 ], [ 80.608484, 30.465046 ], [ 80.609232, 30.463908 ], [ 80.609655, 30.46316 ], [ 80.610207, 30.462542 ], [ 80.610728, 30.462119 ], [ 80.611671, 30.461013 ], [ 80.611997, 30.46072 ], [ 80.612322, 30.46059 ], [ 80.613005, 30.459777 ], [ 80.613623, 30.459289 ], [ 80.615119, 30.458996 ], [ 80.616811, 30.459517 ], [ 80.619218, 30.46072 ], [ 80.62156, 30.461631 ], [ 80.622405, 30.461794 ], [ 80.623186, 30.462282 ], [ 80.623869, 30.462867 ], [ 80.624585, 30.462054 ], [ 80.625138, 30.461241 ], [ 80.625821, 30.459289 ], [ 80.626406, 30.458508 ], [ 80.627122, 30.45776 ], [ 80.627837, 30.457142 ], [ 80.628325, 30.45698 ], [ 80.628781, 30.456524 ], [ 80.629626, 30.456329 ], [ 80.63109, 30.456101 ], [ 80.632066, 30.455386 ], [ 80.634115, 30.453142 ], [ 80.635026, 30.452068 ], [ 80.635904, 30.451255 ], [ 80.636717, 30.450604 ], [ 80.636913, 30.450377 ], [ 80.637498, 30.450247 ], [ 80.63932, 30.450572 ], [ 80.640328, 30.4508 ], [ 80.641239, 30.45093 ], [ 80.6428, 30.449856 ], [ 80.644914, 30.448913 ], [ 80.645955, 30.448197 ], [ 80.646768, 30.446603 ], [ 80.647451, 30.446408 ], [ 80.648037, 30.446116 ], [ 80.64833, 30.445823 ], [ 80.648752, 30.445758 ], [ 80.649566, 30.44579 ], [ 80.650639, 30.44527 ], [ 80.653371, 30.444392 ], [ 80.654184, 30.444196 ], [ 80.654673, 30.443709 ], [ 80.655128, 30.443091 ], [ 80.655843, 30.442798 ], [ 80.658315, 30.44218 ], [ 80.659194, 30.440814 ], [ 80.659909, 30.440131 ], [ 80.660853, 30.439643 ], [ 80.662023, 30.439252 ], [ 80.663162, 30.438764 ], [ 80.664723, 30.437984 ], [ 80.665797, 30.437041 ], [ 80.66674, 30.436065 ], [ 80.667553, 30.435414 ], [ 80.667976, 30.434959 ], [ 80.668171, 30.433885 ], [ 80.669114, 30.4333 ], [ 80.670773, 30.432096 ], [ 80.671684, 30.431673 ], [ 80.67292, 30.431251 ], [ 80.673831, 30.43099 ], [ 80.674872, 30.43047 ], [ 80.67523, 30.43021 ], [ 80.676661, 30.429657 ], [ 80.677571, 30.429201 ], [ 80.678287, 30.428486 ], [ 80.678547, 30.427673 ], [ 80.678482, 30.427087 ], [ 80.677799, 30.425461 ], [ 80.677409, 30.423997 ], [ 80.677474, 30.423574 ], [ 80.677734, 30.423216 ], [ 80.67806, 30.422989 ], [ 80.678547, 30.422468 ], [ 80.679133, 30.421948 ], [ 80.679751, 30.421753 ], [ 80.680759, 30.42159 ], [ 80.681865, 30.421525 ], [ 80.683882, 30.421558 ], [ 80.684402, 30.42146 ], [ 80.685313, 30.421005 ], [ 80.6858458, 30.4206091 ], [ 80.686321, 30.420256 ], [ 80.687134, 30.419248 ], [ 80.687525, 30.418207 ], [ 80.687623, 30.417264 ], [ 80.687687, 30.415442 ], [ 80.688435, 30.41502 ], [ 80.6891351, 30.414897 ], [ 80.690843, 30.414597 ], [ 80.691461, 30.414369 ], [ 80.692859, 30.413263 ], [ 80.693119, 30.413003 ], [ 80.695819, 30.413165 ], [ 80.696828, 30.413263 ], [ 80.698259, 30.413523 ], [ 80.69917, 30.413491 ], [ 80.699723, 30.413556 ], [ 80.700926, 30.415085 ], [ 80.701642, 30.415573 ], [ 80.702553, 30.416093 ], [ 80.703301, 30.416841 ], [ 80.703626, 30.417427 ], [ 80.704309, 30.417622 ], [ 80.706195, 30.417589 ], [ 80.707301, 30.417394 ], [ 80.707952, 30.417166 ], [ 80.710034, 30.41567 ], [ 80.71114, 30.415117 ], [ 80.713417, 30.414499 ], [ 80.713904, 30.414434 ], [ 80.715108, 30.413979 ], [ 80.716116, 30.413328 ], [ 80.716539, 30.412873 ], [ 80.717255, 30.411409 ], [ 80.717775, 30.410726 ], [ 80.718523, 30.410238 ], [ 80.719402, 30.409295 ], [ 80.720377, 30.409067 ], [ 80.721256, 30.408254 ], [ 80.722232, 30.407603 ], [ 80.72311, 30.406693 ], [ 80.724671, 30.405229 ], [ 80.728542, 30.401781 ], [ 80.729485, 30.401195 ], [ 80.730493, 30.40074 ], [ 80.731502, 30.400545 ], [ 80.732933, 30.40061 ], [ 80.734136, 30.40061 ], [ 80.734819, 30.399049 ], [ 80.73547, 30.398073 ], [ 80.736543, 30.397292 ], [ 80.737747, 30.396512 ], [ 80.738463, 30.395763 ], [ 80.739308, 30.394983 ], [ 80.739861, 30.394072 ], [ 80.740999, 30.392478 ], [ 80.741292, 30.39147 ], [ 80.742203, 30.390949 ], [ 80.742756, 30.390461 ], [ 80.743114, 30.389908 ], [ 80.744708, 30.388965 ], [ 80.745326, 30.388412 ], [ 80.745423, 30.387989 ], [ 80.746464, 30.387957 ], [ 80.747603, 30.387827 ], [ 80.748253, 30.387567 ], [ 80.749034, 30.387176 ], [ 80.749684, 30.386656 ], [ 80.75014, 30.385843 ], [ 80.750237, 30.384932 ], [ 80.750465, 30.384249 ], [ 80.750693, 30.383891 ], [ 80.750725, 30.383143 ], [ 80.750433, 30.382004 ], [ 80.750562, 30.380833 ], [ 80.7504, 30.380215 ], [ 80.7504, 30.379858 ], [ 80.751343, 30.379402 ], [ 80.752937, 30.378752 ], [ 80.755149, 30.378004 ], [ 80.759182, 30.375922 ], [ 80.759833, 30.375206 ], [ 80.760191, 30.374003 ], [ 80.760744, 30.372506 ], [ 80.761362, 30.372441 ], [ 80.76198, 30.372734 ], [ 80.762435, 30.373059 ], [ 80.762858, 30.372929 ], [ 80.763671, 30.373059 ], [ 80.764094, 30.373222 ], [ 80.764387, 30.372767 ], [ 80.765298, 30.372409 ], [ 80.765395, 30.371693 ], [ 80.765851, 30.370913 ], [ 80.766566, 30.370099 ], [ 80.766794, 30.369319 ], [ 80.767086, 30.368603 ], [ 80.767607, 30.367758 ], [ 80.76816, 30.367335 ], [ 80.769006, 30.366847 ], [ 80.770177, 30.366587 ], [ 80.771836, 30.365058 ], [ 80.773137, 30.364017 ], [ 80.77395, 30.363269 ], [ 80.774796, 30.362456 ], [ 80.775218, 30.361935 ], [ 80.775478, 30.360699 ], [ 80.776617, 30.35878 ], [ 80.776975, 30.357804 ], [ 80.777137, 30.356828 ], [ 80.777918, 30.3553 ], [ 80.779902, 30.354942 ], [ 80.781333, 30.354389 ], [ 80.7827, 30.353999 ], [ 80.784163, 30.353771 ], [ 80.785464, 30.353478 ], [ 80.785269, 30.351591 ], [ 80.784944, 30.350551 ], [ 80.784716, 30.34951 ], [ 80.784684, 30.348599 ], [ 80.785107, 30.346615 ], [ 80.78605, 30.343557 ], [ 80.786635, 30.342159 ], [ 80.787188, 30.341248 ], [ 80.787383, 30.3405 ], [ 80.787904, 30.340012 ], [ 80.789107, 30.339459 ], [ 80.790213, 30.339134 ], [ 80.794214, 30.337214 ], [ 80.796329, 30.336369 ], [ 80.798605, 30.335198 ], [ 80.800069, 30.334189 ], [ 80.801305, 30.333409 ], [ 80.801956, 30.332921 ], [ 80.802021, 30.331522 ], [ 80.801077, 30.326708 ], [ 80.800915, 30.325049 ], [ 80.801175, 30.324106 ], [ 80.801598, 30.323033 ], [ 80.803549, 30.32339 ], [ 80.805176, 30.323488 ], [ 80.813178, 30.323423 ], [ 80.814966, 30.32326 ], [ 80.816463, 30.322935 ], [ 80.818382, 30.322707 ], [ 80.819553, 30.322219 ], [ 80.820464, 30.321309 ], [ 80.821309, 30.31991 ], [ 80.822025, 30.318576 ], [ 80.82235, 30.317731 ], [ 80.823001, 30.31695 ], [ 80.82453, 30.315649 ], [ 80.825505, 30.314933 ], [ 80.826058, 30.314771 ], [ 80.826872, 30.314836 ], [ 80.829084, 30.315193 ], [ 80.830059, 30.314868 ], [ 80.831458, 30.31425 ], [ 80.832531, 30.313535 ], [ 80.833344, 30.313242 ], [ 80.836077, 30.314153 ], [ 80.838516, 30.315259 ], [ 80.841281, 30.316625 ], [ 80.846648, 30.316852 ], [ 80.847982, 30.316852 ], [ 80.851397, 30.316267 ], [ 80.852405, 30.315746 ], [ 80.853772, 30.315389 ], [ 80.855463, 30.315031 ], [ 80.858846, 30.314575 ], [ 80.860895, 30.31425 ], [ 80.861773, 30.313892 ], [ 80.862912, 30.312721 ], [ 80.864701, 30.311225 ], [ 80.866229, 30.310054 ], [ 80.86753, 30.309241 ], [ 80.868051, 30.308558 ], [ 80.869222, 30.307875 ], [ 80.870751, 30.307224 ], [ 80.871922, 30.306509 ], [ 80.872605, 30.305826 ], [ 80.873093, 30.304817 ], [ 80.873613, 30.301174 ], [ 80.875142, 30.301109 ], [ 80.877646, 30.301369 ], [ 80.87898, 30.301434 ], [ 80.879891, 30.301272 ], [ 80.881095, 30.300751 ], [ 80.881908, 30.300556 ], [ 80.883078, 30.300556 ], [ 80.883794, 30.300231 ], [ 80.88477, 30.299873 ], [ 80.885421, 30.299873 ], [ 80.886071, 30.300361 ], [ 80.886657, 30.300686 ], [ 80.88812, 30.300881 ], [ 80.888576, 30.301272 ], [ 80.888836, 30.301597 ], [ 80.889389, 30.301792 ], [ 80.892446, 30.301922 ], [ 80.893682, 30.30202 ], [ 80.895374, 30.302215 ], [ 80.896317, 30.302475 ], [ 80.899667, 30.302313 ], [ 80.90227, 30.302671 ], [ 80.904449, 30.303158 ], [ 80.906368, 30.303711 ], [ 80.907084, 30.303679 ], [ 80.907897, 30.303223 ], [ 80.908613, 30.302508 ], [ 80.909035, 30.301695 ], [ 80.908873, 30.301207 ], [ 80.908385, 30.300263 ], [ 80.907018, 30.298214 ], [ 80.906986, 30.297824 ], [ 80.907051, 30.296946 ], [ 80.908996, 30.293834 ], [ 80.910364, 30.292424 ], [ 80.911688, 30.29174 ], [ 80.911902, 30.290843 ], [ 80.912329, 30.289989 ], [ 80.912799, 30.289476 ], [ 80.912928, 30.28892 ], [ 80.913227, 30.288578 ], [ 80.913825, 30.288365 ], [ 80.913996, 30.288108 ], [ 80.914594, 30.286827 ], [ 80.915619, 30.286827 ], [ 80.916431, 30.286613 ], [ 80.9172, 30.286314 ], [ 80.917756, 30.286271 ], [ 80.918354, 30.286143 ], [ 80.919892, 30.28516 ], [ 80.920448, 30.284904 ], [ 80.921644, 30.284818 ], [ 80.9222, 30.28469 ], [ 80.923054, 30.284305 ], [ 80.925148, 30.283579 ], [ 80.927156, 30.283195 ], [ 80.927327, 30.28187 ], [ 80.927925, 30.281229 ], [ 80.928353, 30.280289 ], [ 80.928908, 30.279605 ], [ 80.929549, 30.27905 ], [ 80.930361, 30.278452 ], [ 80.930447, 30.277597 ], [ 80.930703, 30.276785 ], [ 80.930447, 30.276059 ], [ 80.929891, 30.275461 ], [ 80.929036, 30.274948 ], [ 80.928523, 30.27482 ], [ 80.927883, 30.274221 ], [ 80.927114, 30.273623 ], [ 80.926473, 30.273452 ], [ 80.925875, 30.273153 ], [ 80.925533, 30.272726 ], [ 80.925618, 30.272042 ], [ 80.925533, 30.271487 ], [ 80.925661, 30.27123 ], [ 80.925661, 30.270974 ], [ 80.925917, 30.270547 ], [ 80.925917, 30.270119 ], [ 80.925704, 30.269863 ], [ 80.925661, 30.269479 ], [ 80.925789, 30.268838 ], [ 80.926601, 30.267727 ], [ 80.9269, 30.267171 ], [ 80.928054, 30.26653 ], [ 80.929421, 30.265847 ], [ 80.93066, 30.265419 ], [ 80.931942, 30.26512 ], [ 80.933395, 30.264479 ], [ 80.934292, 30.264009 ], [ 80.935916, 30.263411 ], [ 80.936557, 30.263454 ], [ 80.937369, 30.263881 ], [ 80.937668, 30.264607 ], [ 80.937753, 30.265035 ], [ 80.938522, 30.266188 ], [ 80.938992, 30.266317 ], [ 80.939676, 30.266274 ], [ 80.940146, 30.266445 ], [ 80.940659, 30.266915 ], [ 80.941299, 30.266958 ], [ 80.942795, 30.267427 ], [ 80.943308, 30.26747 ], [ 80.943992, 30.267684 ], [ 80.945145, 30.268325 ], [ 80.946, 30.268966 ], [ 80.946598, 30.269265 ], [ 80.949974, 30.269607 ], [ 80.950956, 30.270077 ], [ 80.952751, 30.270162 ], [ 80.956639, 30.269778 ], [ 80.958519, 30.269735 ], [ 80.963519, 30.269949 ], [ 80.965954, 30.269906 ], [ 80.968518, 30.270034 ], [ 80.971936, 30.269949 ], [ 80.97544, 30.270162 ], [ 80.977363, 30.270162 ], [ 80.980867, 30.270632 ], [ 80.981721, 30.270504 ], [ 80.98326, 30.269521 ], [ 80.98514, 30.268752 ], [ 80.987447, 30.268325 ], [ 80.989583, 30.268282 ], [ 80.991293, 30.267812 ], [ 80.993386, 30.267342 ], [ 80.995095, 30.266445 ], [ 80.997189, 30.265889 ], [ 80.999667, 30.265376 ], [ 81.002103, 30.264778 ], [ 81.004624, 30.263625 ], [ 81.005906, 30.262471 ], [ 81.006889, 30.261915 ], [ 81.007658, 30.260975 ], [ 81.008513, 30.260078 ], [ 81.008683, 30.258625 ], [ 81.00894, 30.257002 ], [ 81.009581, 30.255891 ], [ 81.010734, 30.25478 ], [ 81.012358, 30.253711 ], [ 81.013768, 30.253455 ], [ 81.015648, 30.252985 ], [ 81.018297, 30.252301 ], [ 81.019707, 30.251831 ], [ 81.02069, 30.250763 ], [ 81.021587, 30.249524 ], [ 81.022186, 30.24914 ], [ 81.024237, 30.248926 ], [ 81.026801, 30.248499 ], [ 81.028125, 30.248328 ], [ 81.029492, 30.247986 ], [ 81.030433, 30.247601 ], [ 81.03086, 30.247088 ], [ 81.028766, 30.242089 ], [ 81.028296, 30.241192 ], [ 81.028125, 30.240124 ], [ 81.028083, 30.238543 ], [ 81.028766, 30.237816 ], [ 81.029322, 30.237004 ], [ 81.029364, 30.236022 ], [ 81.029022, 30.235082 ], [ 81.028509, 30.233372 ], [ 81.0283004, 30.2329835 ], [ 81.02727, 30.231065 ], [ 81.026672, 30.22957 ], [ 81.026416, 30.228288 ], [ 81.02633, 30.227219 ], [ 81.02663, 30.226536 ], [ 81.029492, 30.226151 ], [ 81.029962, 30.225639 ], [ 81.030048, 30.224485 ], [ 81.029535, 30.220426 ], [ 81.029791, 30.219528 ], [ 81.030347, 30.219272 ], [ 81.034748, 30.218204 ], [ 81.035474, 30.217819 ], [ 81.036073, 30.216665 ], [ 81.036671, 30.216153 ], [ 81.039064, 30.215127 ], [ 81.039833, 30.214913 ], [ 81.041286, 30.214999 ], [ 81.04167, 30.2147 ], [ 81.041841, 30.213589 ], [ 81.042268, 30.212222 ], [ 81.042738, 30.211538 ], [ 81.043251, 30.211239 ], [ 81.044448, 30.210897 ], [ 81.044789, 30.210512 ], [ 81.044362, 30.205812 ], [ 81.044063, 30.205043 ], [ 81.039406, 30.20265 ], [ 81.03838, 30.202223 ], [ 81.034449, 30.201625 ], [ 81.03415, 30.201155 ], [ 81.034107, 30.200727 ], [ 81.034663, 30.200215 ], [ 81.035126, 30.199795 ], [ 81.035178, 30.199682 ], [ 81.035532, 30.19883 ], [ 81.035541, 30.198751 ], [ 81.035344, 30.198289 ], [ 81.035204, 30.198 ], [ 81.035143, 30.197909 ], [ 81.034768, 30.197529 ], [ 81.0344298, 30.1971995 ], [ 81.0321819, 30.196677 ], [ 81.030237, 30.196851 ], [ 81.0286951, 30.1953671 ], [ 81.025554, 30.1951381 ], [ 81.0237269, 30.19628 ], [ 81.0208, 30.195555 ], [ 81.0120769, 30.193482 ], [ 81.0023549, 30.1865959 ], [ 80.994977, 30.185542 ], [ 80.9860179, 30.186069 ], [ 80.973369, 30.189231 ], [ 80.968626, 30.186069 ], [ 80.95914, 30.185542 ], [ 80.950708, 30.182907 ], [ 80.9414633, 30.1790676 ], [ 80.931735, 30.182907 ], [ 80.9259379, 30.18765 ], [ 80.923303, 30.1945011 ], [ 80.923303, 30.200825 ], [ 80.9248689, 30.2081139 ], [ 80.927782, 30.2128541 ], [ 80.9281656, 30.2160316 ], [ 80.9244295, 30.2183341 ], [ 80.9228437, 30.2209591 ], [ 80.9219341, 30.2230778 ], [ 80.9205438, 30.2254866 ], [ 80.920244, 30.226617 ], [ 80.9192656, 30.2275457 ], [ 80.9188642, 30.2272126 ], [ 80.9187288, 30.2270172 ], [ 80.918168, 30.2267571 ], [ 80.9179148, 30.2265038 ], [ 80.9174034, 30.2263662 ], [ 80.9170121, 30.2260889 ], [ 80.9167312, 30.2258899 ], [ 80.9167153, 30.2257372 ], [ 80.9166069, 30.2254743 ], [ 80.9162629, 30.2250187 ], [ 80.9156894, 30.2247062 ], [ 80.9155524, 30.2244406 ], [ 80.9153453, 30.2243112 ], [ 80.9151064, 30.2243071 ], [ 80.9147989, 30.2241804 ], [ 80.9143943, 30.2240951 ], [ 80.9138177, 30.2237689 ], [ 80.9136759, 30.2237207 ], [ 80.9134003, 30.2238446 ], [ 80.913241, 30.2238818 ], [ 80.9128603, 30.2237579 ], [ 80.912666, 30.2237469 ], [ 80.912349, 30.2238308 ], [ 80.9121849, 30.2238446 ], [ 80.9118966, 30.2237909 ], [ 80.9116194, 30.223784 ], [ 80.9113374, 30.2236725 ], [ 80.9111479, 30.2235198 ], [ 80.9107289, 30.2233629 ], [ 80.9101523, 30.223378 ], [ 80.9100376, 30.2232968 ], [ 80.9097573, 30.2227966 ], [ 80.9093023, 30.2223246 ], [ 80.9090252, 30.2221007 ], [ 80.9088765, 30.2217659 ], [ 80.9087954, 30.2217153 ], [ 80.9084597, 30.2217016 ], [ 80.9082863, 30.2216413 ], [ 80.9081308, 30.2213766 ], [ 80.9076397, 30.2211157 ], [ 80.9071644, 30.2209288 ], [ 80.9069594, 30.2207945 ], [ 80.9068603, 30.2204325 ], [ 80.9065742, 30.2201463 ], [ 80.9064075, 30.2199049 ], [ 80.9064435, 30.2197492 ], [ 80.9064142, 30.2196674 ], [ 80.9062227, 30.2196013 ], [ 80.9061506, 30.2193326 ], [ 80.9057249, 30.219025 ], [ 80.905441, 30.218916 ], [ 80.9052383, 30.2187564 ], [ 80.9051797, 30.2186046 ], [ 80.9049026, 30.2182075 ], [ 80.9044453, 30.2180478 ], [ 80.9040488, 30.2177441 ], [ 80.9036501, 30.21731 ], [ 80.903605, 30.2168681 ], [ 80.9034383, 30.2164282 ], [ 80.9029832, 30.2160642 ], [ 80.9029517, 30.2157254 ], [ 80.9028548, 30.2154042 ], [ 80.9029134, 30.2151278 ], [ 80.902874, 30.2148836 ], [ 80.902627, 30.2146977 ], [ 80.9024996, 30.2143233 ], [ 80.902181, 30.214165 ], [ 80.902092, 30.2139759 ], [ 80.9018216, 30.2138046 ], [ 80.9011863, 30.2136781 ], [ 80.900675, 30.2136731 ], [ 80.8998211, 30.2135685 ], [ 80.899431, 30.2134593 ], [ 80.8991521, 30.2133813 ], [ 80.8989068, 30.2130812 ], [ 80.8984225, 30.21296 ], [ 80.8979669, 30.2129821 ], [ 80.8978172, 30.2129325 ], [ 80.8976292, 30.2127701 ], [ 80.8971322, 30.2124672 ], [ 80.8969347, 30.2122002 ], [ 80.8965142, 30.2119331 ], [ 80.8959853, 30.2113026 ], [ 80.8957846, 30.2109888 ], [ 80.895689, 30.210361 ], [ 80.8954851, 30.2099838 ], [ 80.8951633, 30.2095048 ], [ 80.8951952, 30.209224 ], [ 80.8950996, 30.2087669 ], [ 80.8950901, 30.2084696 ], [ 80.8950008, 30.2081337 ], [ 80.8943188, 30.2061679 ], [ 80.8924496, 30.2048588 ], [ 80.8910888, 30.203746 ], [ 80.8905739, 30.202322 ], [ 80.8899217, 30.201877 ], [ 80.8896814, 30.2008831 ], [ 80.8869266, 30.1967571 ], [ 80.883907, 30.1946885 ], [ 80.8840518, 30.1912999 ], [ 80.8856308, 30.1880065 ], [ 80.881747, 30.1831158 ], [ 80.8801753, 30.1809444 ], [ 80.8754896, 30.1790007 ], [ 80.8741509, 30.1775912 ], [ 80.8670452, 30.1750094 ], [ 80.8654146, 30.1721309 ], [ 80.8641011, 30.1705641 ], [ 80.8630559, 30.1688197 ], [ 80.8638509, 30.1672773 ], [ 80.8660233, 30.1661913 ], [ 80.8669639, 30.1645596 ], [ 80.8687419, 30.1635785 ], [ 80.8694276, 30.1626656 ], [ 80.8705927, 30.1621567 ], [ 80.871719, 30.1605758 ], [ 80.871509, 30.1588145 ], [ 80.8720653, 30.1578644 ], [ 80.871515, 30.1565741 ], [ 80.8716764, 30.1554236 ], [ 80.8718539, 30.1543081 ], [ 80.8714057, 30.1533379 ], [ 80.8715028, 30.1522403 ], [ 80.8719669, 30.1513384 ], [ 80.8720634, 30.1499927 ], [ 80.8735317, 30.1464623 ], [ 80.8738011, 30.1446641 ], [ 80.8753084, 30.142515 ], [ 80.8761082, 30.1412064 ], [ 80.8765196, 30.1402193 ], [ 80.8761103, 30.1387972 ], [ 80.8765947, 30.1377811 ], [ 80.87641, 30.1365305 ], [ 80.8773672, 30.1358896 ], [ 80.8781543, 30.1342036 ], [ 80.8790284, 30.1324616 ], [ 80.8782972, 30.1306746 ], [ 80.8778549, 30.1300069 ], [ 80.8778472, 30.1283129 ], [ 80.875622, 30.1269213 ], [ 80.874568, 30.1264142 ], [ 80.8740753, 30.1258155 ], [ 80.8734109, 30.1260162 ], [ 80.8726933, 30.1255954 ], [ 80.8707058, 30.1257377 ], [ 80.8689515, 30.125644 ], [ 80.8669243, 30.1246423 ], [ 80.862578, 30.1214718 ], [ 80.8597033, 30.1220251 ], [ 80.856922, 30.121276 ], [ 80.8550168, 30.1206352 ], [ 80.854175, 30.1195157 ], [ 80.8527203, 30.119275 ], [ 80.8518292, 30.1184935 ], [ 80.8507256, 30.1182119 ], [ 80.8493623, 30.1182177 ], [ 80.8468934, 30.1176498 ], [ 80.8459506, 30.116533 ], [ 80.8446622, 30.116234 ], [ 80.8435597, 30.1150923 ], [ 80.8426254, 30.1134595 ], [ 80.8417599, 30.1116705 ], [ 80.841646, 30.1102656 ], [ 80.8423811, 30.108998 ], [ 80.8431131, 30.1086029 ], [ 80.8439471, 30.1074948 ], [ 80.844913, 30.1074323 ], [ 80.8454307, 30.1069948 ], [ 80.8457649, 30.1062369 ], [ 80.8454439, 30.1038739 ], [ 80.8454338, 30.1022608 ], [ 80.8439533, 30.1016915 ], [ 80.8423568, 30.1010825 ], [ 80.840509, 30.0995757 ], [ 80.8393218, 30.0987047 ], [ 80.8385838, 30.0986599 ], [ 80.8359456, 30.0970117 ], [ 80.8332245, 30.0978447 ], [ 80.8316846, 30.0971166 ], [ 80.8292014, 30.0970427 ], [ 80.8276973, 30.0976934 ], [ 80.8260678, 30.1000172 ], [ 80.8244937, 30.0994249 ], [ 80.8232988, 30.0998418 ], [ 80.8220206, 30.0998785 ], [ 80.8205347, 30.0995369 ], [ 80.8195281, 30.0969683 ], [ 80.8187686, 30.0965846 ], [ 80.8167, 30.0970546 ], [ 80.8162266, 30.0968138 ], [ 80.8157975, 30.0964018 ], [ 80.8157228, 30.0963811 ], [ 80.8152256, 30.0962432 ], [ 80.8148433, 30.0960043 ], [ 80.8140957, 30.0953602 ], [ 80.8139276, 30.0946504 ], [ 80.8141481, 30.093624 ], [ 80.8136381, 30.0929035 ], [ 80.8112977, 30.0924275 ], [ 80.8103818, 30.0915596 ], [ 80.8093184, 30.090721 ], [ 80.807987, 30.0905065 ], [ 80.8067918, 30.0900829 ], [ 80.8056212, 30.0899108 ], [ 80.8051027, 30.0895563 ], [ 80.8047631, 30.0886977 ], [ 80.8039271, 30.0880078 ], [ 80.8017113, 30.0858824 ], [ 80.8009769, 30.0848416 ], [ 80.8009136, 30.0838556 ], [ 80.8000273, 30.0825408 ], [ 80.7997108, 30.0813356 ], [ 80.7990562, 30.0806991 ], [ 80.7970898, 30.0799058 ], [ 80.7960832, 30.0787718 ], [ 80.7945195, 30.0776597 ], [ 80.7939813, 30.0763997 ], [ 80.7929177, 30.0753314 ], [ 80.7910881, 30.0731564 ], [ 80.7897966, 30.0733481 ], [ 80.7895051, 30.0729783 ], [ 80.7889673, 30.0722962 ], [ 80.7887416, 30.0714526 ], [ 80.7890639, 30.0694846 ], [ 80.787524, 30.067625 ], [ 80.7863243, 30.0671136 ], [ 80.7841218, 30.0633168 ], [ 80.7835115, 30.0615319 ], [ 80.7819802, 30.06066 ], [ 80.7809594, 30.0593696 ], [ 80.7802405, 30.0575936 ], [ 80.779173, 30.0566841 ], [ 80.7781384, 30.0557697 ], [ 80.7764632, 30.0544443 ], [ 80.7749529, 30.0539807 ], [ 80.7729832, 30.0541512 ], [ 80.7716959, 30.0536826 ], [ 80.7634485, 30.0508557 ], [ 80.7607206, 30.0493672 ], [ 80.760546, 30.0480071 ], [ 80.7592361, 30.0459356 ], [ 80.7580884, 30.0449497 ], [ 80.7581885, 30.0443427 ], [ 80.7590598, 30.0437174 ], [ 80.7579735, 30.0415754 ], [ 80.7558592, 30.0399842 ], [ 80.7555961, 30.0387499 ], [ 80.7562082, 30.03506 ], [ 80.7551876, 30.031231 ], [ 80.7564947, 30.0290606 ], [ 80.7578556, 30.0280529 ], [ 80.7573542, 30.026053 ], [ 80.7573148, 30.0236639 ], [ 80.7557964, 30.0226732 ], [ 80.7538958, 30.0200841 ], [ 80.7530343, 30.0175297 ], [ 80.7516063, 30.0141923 ], [ 80.7495469, 30.00967 ], [ 80.7479713, 30.0070751 ], [ 80.7462262, 30.0052664 ], [ 80.7442647, 30.0036637 ], [ 80.7418444, 30.0021892 ], [ 80.7405311, 30.0005671 ], [ 80.7383421, 29.9990814 ], [ 80.7327873, 29.9993821 ], [ 80.7293441, 30.000238 ], [ 80.7244698, 29.9996314 ], [ 80.7201917, 30.0008948 ], [ 80.7163956, 29.9959501 ], [ 80.7158717, 29.9939469 ], [ 80.7146781, 29.9928307 ], [ 80.7138161, 29.991319 ], [ 80.7127305, 29.9899689 ], [ 80.7097621, 29.9885089 ], [ 80.7069815, 29.9860774 ], [ 80.7038923, 29.9840705 ], [ 80.7021735, 29.9819595 ], [ 80.7011328, 29.9811666 ], [ 80.7003762, 29.9799975 ], [ 80.6991643, 29.9795506 ], [ 80.6978872, 29.9796408 ], [ 80.6970757, 29.9796204 ], [ 80.6965493, 29.9790216 ], [ 80.6959204, 29.9777191 ], [ 80.6937173, 29.9772119 ], [ 80.692182, 29.9755276 ], [ 80.6911965, 29.9753222 ], [ 80.6894079, 29.9730575 ], [ 80.6884589, 29.9723827 ], [ 80.6874113, 29.9700482 ], [ 80.6868363, 29.9696139 ], [ 80.6847433, 29.9677989 ], [ 80.6836241, 29.9666045 ], [ 80.6827062, 29.9628115 ], [ 80.6823707, 29.9623152 ], [ 80.6802488, 29.9616171 ], [ 80.6798907, 29.960981 ], [ 80.6774185, 29.9586434 ], [ 80.6760497, 29.9585841 ], [ 80.6752171, 29.9574284 ], [ 80.6742607, 29.9571005 ], [ 80.6722803, 29.9575093 ], [ 80.6699525, 29.9572145 ], [ 80.6684125, 29.9574627 ], [ 80.666604, 29.9567336 ], [ 80.6647059, 29.9572455 ], [ 80.6616081, 29.9562371 ], [ 80.6588326, 29.9563612 ], [ 80.6563078, 29.9551046 ], [ 80.6528519, 29.9558493 ], [ 80.6482744, 29.9558235 ], [ 80.6452238, 29.9572766 ], [ 80.6421976, 29.959433 ], [ 80.6404249, 29.9595571 ], [ 80.6395635, 29.960314 ], [ 80.639402, 29.9609124 ], [ 80.6391427, 29.9618731 ], [ 80.6377192, 29.9633003 ], [ 80.6347825, 29.9639906 ], [ 80.6315236, 29.9652084 ], [ 80.6285538, 29.9652398 ], [ 80.6264382, 29.9646034 ], [ 80.6243431, 29.9637967 ], [ 80.6232956, 29.9642698 ], [ 80.6191951, 29.9637036 ], [ 80.6162495, 29.961811 ], [ 80.6149692, 29.9610353 ], [ 80.6133128, 29.9609345 ], [ 80.6095077, 29.95891 ], [ 80.6071799, 29.9587005 ], [ 80.6046372, 29.9593521 ], [ 80.6012729, 29.9578935 ], [ 80.5956927, 29.9535039 ], [ 80.5906436, 29.9489595 ], [ 80.5851435, 29.9404628 ], [ 80.5816741, 29.9372353 ], [ 80.580546, 29.9344072 ], [ 80.5794064, 29.9327918 ], [ 80.5783614, 29.9306286 ], [ 80.5778421, 29.927618 ], [ 80.5750591, 29.925075 ], [ 80.5740102, 29.9234357 ], [ 80.5738446, 29.9219574 ], [ 80.5727077, 29.9186723 ], [ 80.5707549, 29.9150676 ], [ 80.5703347, 29.9117486 ], [ 80.569686, 29.9098771 ], [ 80.5690633, 29.908722 ], [ 80.5690186, 29.9076898 ], [ 80.5700482, 29.9049812 ], [ 80.5706839, 29.903328 ], [ 80.5699945, 29.9010928 ], [ 80.5704511, 29.9001925 ], [ 80.5705854, 29.8983064 ], [ 80.5710599, 29.8977786 ], [ 80.5720158, 29.8951381 ], [ 80.5719292, 29.8943973 ], [ 80.5718209, 29.8934708 ], [ 80.5705943, 29.8923143 ], [ 80.5700354, 29.8907129 ], [ 80.5685978, 29.887587 ], [ 80.567783, 29.8848391 ], [ 80.5657406, 29.8789737 ], [ 80.5640585, 29.8774255 ], [ 80.5624917, 29.8757175 ], [ 80.5598505, 29.874654 ], [ 80.5580581, 29.8719968 ], [ 80.5566368, 29.8700319 ], [ 80.557642, 29.8683898 ], [ 80.559081, 29.8675707 ], [ 80.5611623, 29.8670268 ], [ 80.5612476, 29.8664605 ], [ 80.5610033, 29.8657381 ], [ 80.5592055, 29.8645397 ], [ 80.5564666, 29.8630364 ], [ 80.5543063, 29.8614057 ], [ 80.5544039, 29.8592207 ], [ 80.5512719, 29.8560733 ], [ 80.5513723, 29.8552097 ], [ 80.5533217, 29.8527964 ], [ 80.5528943, 29.8507059 ], [ 80.552259, 29.8502411 ], [ 80.5516336, 29.8497836 ], [ 80.5485828, 29.8504176 ], [ 80.5472538, 29.8494789 ], [ 80.5463227, 29.8478016 ], [ 80.5434164, 29.8462884 ], [ 80.5404315, 29.8473357 ], [ 80.5385207, 29.8473353 ], [ 80.5377634, 29.8444779 ], [ 80.5360802, 29.8415113 ], [ 80.5360293, 29.8386553 ], [ 80.5338599, 29.8382185 ], [ 80.5316345, 29.8386337 ], [ 80.5297056, 29.8361837 ], [ 80.5281144, 29.8334928 ], [ 80.5239318, 29.8324522 ], [ 80.5232593, 29.8316169 ], [ 80.5236174, 29.8306072 ], [ 80.5239294, 29.8289342 ], [ 80.5213612, 29.8269412 ], [ 80.517561, 29.8254462 ], [ 80.5125152, 29.8247544 ], [ 80.5088549, 29.8237261 ], [ 80.5071436, 29.8231041 ], [ 80.5060468, 29.821833 ], [ 80.5050908, 29.8194972 ], [ 80.5017165, 29.817763 ], [ 80.5003997, 29.8158844 ], [ 80.4993298, 29.8140498 ], [ 80.498817, 29.8125228 ], [ 80.4976118, 29.8108442 ], [ 80.4979876, 29.8102981 ], [ 80.4985004, 29.8101827 ], [ 80.4990639, 29.8098751 ], [ 80.4995703, 29.8095236 ], [ 80.5000919, 29.8088296 ], [ 80.4989562, 29.8068538 ], [ 80.4965885, 29.8055244 ], [ 80.4953223, 29.804607 ], [ 80.4953856, 29.8032776 ], [ 80.4947393, 29.8020707 ], [ 80.4923342, 29.801701 ], [ 80.4923468, 29.8010143 ], [ 80.4934421, 29.8001463 ], [ 80.4944107, 29.7986849 ], [ 80.4942854, 29.7975391 ], [ 80.4942461, 29.7971796 ], [ 80.4940941, 29.7958281 ], [ 80.4931207, 29.7951791 ], [ 80.4883331, 29.795938 ], [ 80.48594, 29.7958831 ], [ 80.4828505, 29.7964215 ], [ 80.481327, 29.7958453 ], [ 80.4801536, 29.7952568 ], [ 80.4792926, 29.7956194 ], [ 80.4787102, 29.7964215 ], [ 80.476659, 29.7979048 ], [ 80.4711258, 29.7993771 ], [ 80.4668968, 29.8014867 ], [ 80.4642252, 29.8023437 ], [ 80.4600573, 29.8018498 ], [ 80.4581475, 29.8025415 ], [ 80.4557671, 29.8026294 ], [ 80.4528043, 29.8017834 ], [ 80.4497275, 29.799476 ], [ 80.4465405, 29.7987374 ], [ 80.4431687, 29.7992783 ], [ 80.4414756, 29.8003862 ], [ 80.4408516, 29.8007945 ], [ 80.4391043, 29.8021679 ], [ 80.4380166, 29.8045231 ], [ 80.4364833, 29.8061891 ], [ 80.4350146, 29.8061672 ], [ 80.4339257, 29.8052113 ], [ 80.4329127, 29.8024865 ], [ 80.4306463, 29.8014208 ], [ 80.4302918, 29.8004209 ], [ 80.4302406, 29.7988555 ], [ 80.428823, 29.7980367 ], [ 80.4261387, 29.7973884 ], [ 80.4214539, 29.795938 ], [ 80.4174655, 29.7961907 ], [ 80.4159334, 29.7957622 ], [ 80.4140468, 29.7938283 ], [ 80.4141101, 29.7927075 ], [ 80.4138949, 29.7917955 ], [ 80.4122924, 29.7918422 ], [ 80.4101723, 29.7924218 ], [ 80.4096297, 29.7929731 ], [ 80.4094886, 29.7937624 ], [ 80.4086149, 29.7947183 ], [ 80.4073108, 29.795059 ], [ 80.4067537, 29.7948392 ], [ 80.4065511, 29.7942788 ], [ 80.4077792, 29.7934108 ], [ 80.407602, 29.7913779 ], [ 80.4066144, 29.7903121 ], [ 80.4061712, 29.7893561 ], [ 80.4063105, 29.7877957 ], [ 80.406817, 29.7865979 ], [ 80.4072854, 29.7840814 ], [ 80.4068043, 29.783499 ], [ 80.4047279, 29.7832409 ], [ 80.4035103, 29.7815936 ], [ 80.4036452, 29.7807407 ], [ 80.4048712, 29.7796664 ], [ 80.4051398, 29.7791225 ], [ 80.4039401, 29.7766357 ], [ 80.4027582, 29.7766668 ], [ 80.3997125, 29.7731712 ], [ 80.3994854, 29.7704717 ], [ 80.3984978, 29.7670645 ], [ 80.3960541, 29.7654928 ], [ 80.3962516, 29.7633947 ], [ 80.3973076, 29.7615249 ], [ 80.3977381, 29.7597332 ], [ 80.3970164, 29.758766 ], [ 80.3963263, 29.7583785 ], [ 80.3959953, 29.7581926 ], [ 80.3944334, 29.7581614 ], [ 80.3933065, 29.7586341 ], [ 80.3910147, 29.7605906 ], [ 80.3867097, 29.7596893 ], [ 80.385279, 29.7585901 ], [ 80.3848485, 29.7574799 ], [ 80.3853423, 29.7539514 ], [ 80.3865198, 29.7516429 ], [ 80.3862919, 29.7510163 ], [ 80.3856212, 29.7504221 ], [ 80.38086, 29.7506646 ], [ 80.3795938, 29.750027 ], [ 80.3778085, 29.7496203 ], [ 80.3757154, 29.7500236 ], [ 80.375159, 29.7497923 ], [ 80.3739808, 29.7494668 ], [ 80.3731106, 29.7493854 ], [ 80.371745, 29.7493738 ], [ 80.3710087, 29.7495482 ], [ 80.3705802, 29.749955 ], [ 80.3697903, 29.7504548 ], [ 80.3692563, 29.750861 ], [ 80.3685717, 29.7508131 ], [ 80.3677286, 29.7501526 ], [ 80.36726, 29.7498388 ], [ 80.3666307, 29.7493506 ], [ 80.3655554, 29.7478027 ], [ 80.3650981, 29.7465949 ], [ 80.3648694, 29.7450175 ], [ 80.3649329, 29.7437325 ], [ 80.3651679, 29.7423867 ], [ 80.3651679, 29.7418462 ], [ 80.3648581, 29.7409951 ], [ 80.3646841, 29.7404255 ], [ 80.3646305, 29.7399605 ], [ 80.3648179, 29.7392863 ], [ 80.3658921, 29.7379136 ], [ 80.3675357, 29.7365079 ], [ 80.368647, 29.7357174 ], [ 80.3693833, 29.7349269 ], [ 80.3695841, 29.7344619 ], [ 80.3697046, 29.7339387 ], [ 80.3697046, 29.7335086 ], [ 80.3693565, 29.7328692 ], [ 80.3680177, 29.7319856 ], [ 80.3669467, 29.731102 ], [ 80.3662505, 29.7299278 ], [ 80.3658488, 29.7279514 ], [ 80.3657819, 29.7262307 ], [ 80.3663308, 29.7243821 ], [ 80.3674561, 29.7225626 ], [ 80.3680355, 29.7220633 ], [ 80.3687003, 29.7216615 ], [ 80.3697314, 29.7214754 ], [ 80.370856, 29.721487 ], [ 80.3733656, 29.7213946 ], [ 80.3742739, 29.7212843 ], [ 80.374979, 29.7210801 ], [ 80.375538, 29.7207712 ], [ 80.3761351, 29.7200761 ], [ 80.3762622, 29.719701 ], [ 80.3762876, 29.7191935 ], [ 80.3760081, 29.7185977 ], [ 80.375646, 29.7183163 ], [ 80.3727973, 29.7168594 ], [ 80.3721814, 29.716185 ], [ 80.3720877, 29.715592 ], [ 80.3723153, 29.7148827 ], [ 80.3728776, 29.714406 ], [ 80.3735872, 29.7139176 ], [ 80.3740692, 29.7129409 ], [ 80.3743503, 29.7118595 ], [ 80.374293, 29.7101953 ], [ 80.3748647, 29.7081926 ], [ 80.376784, 29.7037907 ], [ 80.3775204, 29.7024883 ], [ 80.3783906, 29.7017789 ], [ 80.3788592, 29.7012091 ], [ 80.3793144, 29.7001741 ], [ 80.3796625, 29.6988018 ], [ 80.3802984, 29.6936498 ], [ 80.3803319, 29.6922018 ], [ 80.3801913, 29.6901432 ], [ 80.3803118, 29.6894919 ], [ 80.3808406, 29.6883172 ], [ 80.3814096, 29.6877124 ], [ 80.3835863, 29.6864742 ], [ 80.3844708, 29.6858129 ], [ 80.3848586, 29.685005 ], [ 80.3847916, 29.6837023 ], [ 80.3840687, 29.6812015 ], [ 80.3839438, 29.6805352 ], [ 80.3836938, 29.6792009 ], [ 80.3835867, 29.6784099 ], [ 80.383726, 29.6763196 ], [ 80.384158, 29.6751772 ], [ 80.3846535, 29.674112 ], [ 80.3849901, 29.673698 ], [ 80.3863749, 29.6730357 ], [ 80.3874484, 29.6727377 ], [ 80.389767, 29.6717994 ], [ 80.3902053, 29.6712696 ], [ 80.3902244, 29.6709715 ], [ 80.390091, 29.6706128 ], [ 80.3900529, 29.6700829 ], [ 80.3900783, 29.6695034 ], [ 80.3896781, 29.6685044 ], [ 80.3893922, 29.6680738 ], [ 80.3892842, 29.6673121 ], [ 80.3894049, 29.6662082 ], [ 80.3897924, 29.6650767 ], [ 80.3901481, 29.6645247 ], [ 80.3905737, 29.6642708 ], [ 80.3914631, 29.6639176 ], [ 80.3970151, 29.6627987 ], [ 80.3978853, 29.6621472 ], [ 80.3982066, 29.6613561 ], [ 80.39822, 29.660437 ], [ 80.3984074, 29.6595528 ], [ 80.3987823, 29.659134 ], [ 80.3996124, 29.6589362 ], [ 80.4009512, 29.6592038 ], [ 80.4032807, 29.6596342 ], [ 80.4047936, 29.6596691 ], [ 80.4057843, 29.659483 ], [ 80.4070294, 29.6589944 ], [ 80.4075516, 29.6583428 ], [ 80.4079666, 29.6578077 ], [ 80.4084486, 29.6571212 ], [ 80.4089707, 29.6562836 ], [ 80.4090377, 29.6554575 ], [ 80.4091314, 29.6550503 ], [ 80.4098103, 29.6539076 ], [ 80.410473, 29.6537102 ], [ 80.4112966, 29.6537184 ], [ 80.4123474, 29.6538912 ], [ 80.4132373, 29.6541791 ], [ 80.4140041, 29.6542367 ], [ 80.4144112, 29.6540804 ], [ 80.4149792, 29.6535045 ], [ 80.4162573, 29.6518673 ], [ 80.416333, 29.6512256 ], [ 80.4162857, 29.6507319 ], [ 80.4157839, 29.6496459 ], [ 80.4150266, 29.6486504 ], [ 80.414771, 29.6478606 ], [ 80.414629, 29.6469309 ], [ 80.4144302, 29.6459024 ], [ 80.4140692, 29.6446007 ], [ 80.4139675, 29.6441424 ], [ 80.4140755, 29.6436621 ], [ 80.4143042, 29.6432094 ], [ 80.4169023, 29.6407305 ], [ 80.418052, 29.6401784 ], [ 80.419476, 29.6395998 ], [ 80.4199304, 29.6390321 ], [ 80.420063, 29.638382 ], [ 80.4201008, 29.6376662 ], [ 80.4200954, 29.6368115 ], [ 80.4196748, 29.6350331 ], [ 80.4195991, 29.6337741 ], [ 80.4197221, 29.6332639 ], [ 80.4198358, 29.6329924 ], [ 80.4201766, 29.6326961 ], [ 80.4206026, 29.6322353 ], [ 80.4207635, 29.6318897 ], [ 80.4209244, 29.631215 ], [ 80.4209434, 29.630713 ], [ 80.4208203, 29.6302769 ], [ 80.4207635, 29.6297831 ], [ 80.419902, 29.6282196 ], [ 80.4189921, 29.6271866 ], [ 80.4184332, 29.6266399 ], [ 80.417043, 29.6262611 ], [ 80.4157525, 29.6262921 ], [ 80.41311, 29.6262921 ], [ 80.4120746, 29.6261651 ], [ 80.4112996, 29.6258172 ], [ 80.4105882, 29.6250441 ], [ 80.4082759, 29.6211015 ], [ 80.4079266, 29.6200136 ], [ 80.4077805, 29.6191356 ], [ 80.4077078, 29.6173866 ], [ 80.4078695, 29.615317 ], [ 80.4076988, 29.6143954 ], [ 80.4074563, 29.6142392 ], [ 80.4061962, 29.6137509 ], [ 80.4058341, 29.6131324 ], [ 80.4058468, 29.6121217 ], [ 80.4061772, 29.6114369 ], [ 80.4076405, 29.6097285 ], [ 80.4084926, 29.6047242 ], [ 80.4088144, 29.6005921 ], [ 80.4081896, 29.5970691 ], [ 80.4072808, 29.5951428 ], [ 80.4061258, 29.5932824 ], [ 80.403972, 29.5906582 ], [ 80.4021483, 29.5882991 ], [ 80.4015734, 29.5878694 ], [ 80.4010434, 29.5876194 ], [ 80.3989412, 29.5874866 ], [ 80.3983124, 29.5871585 ], [ 80.3977824, 29.586682 ], [ 80.3973332, 29.5860023 ], [ 80.396884, 29.5850258 ], [ 80.39639, 29.5844399 ], [ 80.3957252, 29.583979 ], [ 80.39259, 29.5824087 ], [ 80.3912175, 29.5812819 ], [ 80.3908293, 29.5805367 ], [ 80.3906406, 29.578229 ], [ 80.3905282, 29.5761535 ], [ 80.389677, 29.5739216 ], [ 80.3888131, 29.5726288 ], [ 80.3883211, 29.572254 ], [ 80.3869055, 29.5717476 ], [ 80.3849706, 29.5714485 ], [ 80.3833803, 29.5713789 ], [ 80.3814039, 29.5713945 ], [ 80.3793603, 29.5715782 ], [ 80.37903, 29.5714843 ], [ 80.3785726, 29.571208 ], [ 80.3784964, 29.570976 ], [ 80.3784837, 29.5699594 ], [ 80.3785567, 29.5676587 ], [ 80.3792574, 29.5639785 ], [ 80.3794461, 29.5620719 ], [ 80.3794101, 29.5612748 ], [ 80.378934, 29.560806 ], [ 80.3779189, 29.5606497 ], [ 80.3762763, 29.5611023 ], [ 80.3737326, 29.5621854 ], [ 80.3709177, 29.5629101 ], [ 80.3687379, 29.5627517 ], [ 80.367815, 29.5628026 ], [ 80.3658624, 29.5632065 ], [ 80.3652092, 29.5637006 ], [ 80.3639406, 29.5640958 ], [ 80.3633537, 29.5639147 ], [ 80.3628881, 29.5637225 ], [ 80.3622745, 29.563083 ], [ 80.3621325, 29.5623172 ], [ 80.362123, 29.5613126 ], [ 80.3626437, 29.5596163 ], [ 80.3634484, 29.5587434 ], [ 80.3642436, 29.5580764 ], [ 80.3644329, 29.5575329 ], [ 80.3643666, 29.5572117 ], [ 80.3640164, 29.5568164 ], [ 80.3631738, 29.5562811 ], [ 80.3619242, 29.5560176 ], [ 80.3606935, 29.5558859 ], [ 80.3593303, 29.5557788 ], [ 80.3584877, 29.5554741 ], [ 80.3570393, 29.5551118 ], [ 80.3557518, 29.5551118 ], [ 80.3544737, 29.5552024 ], [ 80.352817, 29.5553835 ], [ 80.3487086, 29.5553642 ], [ 80.3476861, 29.5550925 ], [ 80.3471749, 29.5547548 ], [ 80.3466637, 29.5543431 ], [ 80.345717, 29.553956 ], [ 80.3443525, 29.5537434 ], [ 80.3436496, 29.553656 ], [ 80.3425718, 29.5528699 ], [ 80.3423509, 29.5524856 ], [ 80.3424389, 29.5519661 ], [ 80.3435655, 29.5508379 ], [ 80.3454872, 29.5494955 ], [ 80.3457334, 29.5490755 ], [ 80.3458659, 29.5486225 ], [ 80.3457239, 29.5480213 ], [ 80.3427986, 29.5441258 ], [ 80.341407, 29.5424127 ], [ 80.3411987, 29.5414903 ], [ 80.3413786, 29.5410949 ], [ 80.3417573, 29.5405019 ], [ 80.342117, 29.5402054 ], [ 80.3428365, 29.5399995 ], [ 80.3436033, 29.5399171 ], [ 80.3446258, 29.5399254 ], [ 80.3458754, 29.5402795 ], [ 80.3472007, 29.5404196 ], [ 80.3484072, 29.5403614 ], [ 80.3490398, 29.5401591 ], [ 80.3497003, 29.5398272 ], [ 80.3502399, 29.539293 ], [ 80.350733, 29.538427 ], [ 80.3515168, 29.5365164 ], [ 80.3519247, 29.53611 ], [ 80.3538389, 29.5354118 ], [ 80.3565675, 29.5344833 ], [ 80.357082, 29.5342099 ], [ 80.3575753, 29.5337005 ], [ 80.3578648, 29.5331396 ], [ 80.3579371, 29.5325329 ], [ 80.357845, 29.5317831 ], [ 80.3576937, 29.5310505 ], [ 80.3572596, 29.530501 ], [ 80.3566412, 29.5297055 ], [ 80.3562005, 29.5287324 ], [ 80.3559439, 29.5282574 ], [ 80.3556413, 29.5278052 ], [ 80.354431, 29.5269981 ], [ 80.3528917, 29.5263342 ], [ 80.3508442, 29.5257948 ], [ 80.3495368, 29.5253554 ], [ 80.349004, 29.5250348 ], [ 80.3484054, 29.5243537 ], [ 80.3482409, 29.5239416 ], [ 80.3482277, 29.5235409 ], [ 80.3487014, 29.5222186 ], [ 80.3494776, 29.5208334 ], [ 80.3499747, 29.5197802 ], [ 80.3499714, 29.5192965 ], [ 80.3497741, 29.5188557 ], [ 80.3495866, 29.5186039 ], [ 80.3482282, 29.5176164 ], [ 80.3476428, 29.5169352 ], [ 80.3466429, 29.5153954 ], [ 80.3458345, 29.5142266 ], [ 80.343834, 29.5122068 ], [ 80.3418474, 29.510289 ], [ 80.3413672, 29.5099169 ], [ 80.3407686, 29.5097909 ], [ 80.3400384, 29.5098367 ], [ 80.3393345, 29.5099398 ], [ 80.3372019, 29.5113797 ], [ 80.3358349, 29.5123785 ], [ 80.3346301, 29.5130799 ], [ 80.3339885, 29.5132292 ], [ 80.3331437, 29.5132458 ], [ 80.3324132, 29.5131297 ], [ 80.3319939, 29.5129749 ], [ 80.3315874, 29.5127151 ], [ 80.3314604, 29.512494 ], [ 80.3310723, 29.5108214 ], [ 80.3307895, 29.5089723 ], [ 80.3304343, 29.5075983 ], [ 80.3297501, 29.5063274 ], [ 80.3291778, 29.5056804 ], [ 80.3287108, 29.5053312 ], [ 80.327553, 29.5049591 ], [ 80.3254348, 29.5042435 ], [ 80.320192, 29.5021137 ], [ 80.3169885, 29.5008541 ], [ 80.3152781, 29.5000297 ], [ 80.3143835, 29.4995373 ], [ 80.3136862, 29.498793 ], [ 80.3133639, 29.4983464 ], [ 80.3130021, 29.497562 ], [ 80.3129079, 29.496841 ], [ 80.3129206, 29.4959122 ], [ 80.3131271, 29.4952088 ], [ 80.3135481, 29.4941839 ], [ 80.3141188, 29.4927374 ], [ 80.3143704, 29.4920998 ], [ 80.3146006, 29.4914413 ], [ 80.3146401, 29.4905939 ], [ 80.3144953, 29.4889792 ], [ 80.3141533, 29.4867804 ], [ 80.3134231, 29.4847476 ], [ 80.3131008, 29.4844212 ], [ 80.3128442, 29.4842837 ], [ 80.3123509, 29.4842837 ], [ 80.3120417, 29.4844441 ], [ 80.3116786, 29.4847419 ], [ 80.3113623, 29.4849781 ], [ 80.3109529, 29.4851644 ], [ 80.3100877, 29.4853749 ], [ 80.308331, 29.4854607 ], [ 80.3061154, 29.4856098 ], [ 80.3043385, 29.4860632 ], [ 80.303678, 29.4865734 ], [ 80.3031385, 29.4870026 ], [ 80.3015569, 29.4898773 ], [ 80.300943, 29.4904118 ], [ 80.3003848, 29.4905575 ], [ 80.2997708, 29.4905494 ], [ 80.2990359, 29.4904118 ], [ 80.2981335, 29.4900069 ], [ 80.2973799, 29.4894481 ], [ 80.2968683, 29.4889137 ], [ 80.2965334, 29.488363 ], [ 80.296338, 29.4879501 ], [ 80.2962357, 29.487116 ], [ 80.2966713, 29.485589 ], [ 80.2966264, 29.4851077 ], [ 80.296431, 29.4845489 ], [ 80.2961426, 29.4837229 ], [ 80.2947055, 29.4814296 ], [ 80.2936573, 29.4794942 ], [ 80.2932, 29.4790242 ], [ 80.2920866, 29.4784428 ], [ 80.2910911, 29.4782889 ], [ 80.28932, 29.4780646 ], [ 80.2879106, 29.4777852 ], [ 80.2874734, 29.4775382 ], [ 80.2871757, 29.4771981 ], [ 80.2868454, 29.4767243 ], [ 80.2866454, 29.4761412 ], [ 80.2873115, 29.4735218 ], [ 80.2881713, 29.4721432 ], [ 80.2902357, 29.4700085 ], [ 80.290756, 29.4693488 ], [ 80.2920159, 29.4667967 ], [ 80.2931275, 29.4647836 ], [ 80.2937056, 29.4639872 ], [ 80.2953127, 29.4621012 ], [ 80.2978409, 29.4596068 ], [ 80.2991939, 29.4584453 ], [ 80.3013448, 29.4567416 ], [ 80.3024236, 29.4555273 ], [ 80.3027394, 29.4544046 ], [ 80.3023183, 29.4527091 ], [ 80.3017658, 29.4517468 ], [ 80.3003449, 29.4512198 ], [ 80.2980294, 29.4515864 ], [ 80.2965032, 29.4525258 ], [ 80.295556, 29.4532132 ], [ 80.2938617, 29.4534916 ], [ 80.2918459, 29.4528466 ], [ 80.2899777, 29.4519301 ], [ 80.2876096, 29.451449 ], [ 80.2851888, 29.4514719 ], [ 80.2833206, 29.4512657 ], [ 80.2815576, 29.4512657 ], [ 80.2804525, 29.4516094 ], [ 80.2795052, 29.4523196 ], [ 80.2792421, 29.4537631 ], [ 80.2793155, 29.4540047 ], [ 80.2796481, 29.455099 ], [ 80.2806454, 29.4569962 ], [ 80.2805882, 29.4575659 ], [ 80.2800928, 29.4581079 ], [ 80.2793369, 29.4584951 ], [ 80.2784793, 29.458661 ], [ 80.2770945, 29.4586776 ], [ 80.2757987, 29.4585006 ], [ 80.2749221, 29.4582296 ], [ 80.2721547, 29.4573315 ], [ 80.2716274, 29.4571545 ], [ 80.2711574, 29.4568392 ], [ 80.2695312, 29.4557938 ], [ 80.2692136, 29.455379 ], [ 80.2691119, 29.4546931 ], [ 80.2692072, 29.4543281 ], [ 80.269455, 29.4538468 ], [ 80.26969, 29.4536311 ], [ 80.2706047, 29.4536643 ], [ 80.2715575, 29.4538468 ], [ 80.2722182, 29.4537196 ], [ 80.2739587, 29.4526078 ], [ 80.2747337, 29.4517892 ], [ 80.2748311, 29.4505525 ], [ 80.27458, 29.4498315 ], [ 80.2742357, 29.4495642 ], [ 80.273538, 29.4496371 ], [ 80.2726729, 29.4497829 ], [ 80.2718821, 29.4500097 ], [ 80.2709797, 29.4502042 ], [ 80.2701797, 29.4502204 ], [ 80.2689982, 29.449872 ], [ 80.2686168, 29.4496047 ], [ 80.2678987, 29.4488465 ], [ 80.2673968, 29.4486474 ], [ 80.26666, 29.4485423 ], [ 80.2659358, 29.4485921 ], [ 80.2642588, 29.4492171 ], [ 80.2622246, 29.4501292 ], [ 80.2606721, 29.450674 ], [ 80.2598627, 29.451071 ], [ 80.259258, 29.4513464 ], [ 80.2586626, 29.4515003 ], [ 80.2581137, 29.4515084 ], [ 80.2576393, 29.451476 ], [ 80.257323, 29.4513626 ], [ 80.2567617, 29.4508095 ], [ 80.2564758, 29.4503725 ], [ 80.2563615, 29.4490671 ], [ 80.2562154, 29.4486467 ], [ 80.2559105, 29.448265 ], [ 80.2554976, 29.4479885 ], [ 80.2543478, 29.4476898 ], [ 80.2532204, 29.4474822 ], [ 80.2514957, 29.4470924 ], [ 80.2506953, 29.4469928 ], [ 80.2483386, 29.44686 ], [ 80.2460264, 29.4468877 ], [ 80.2454189, 29.4466091 ], [ 80.2448663, 29.4462826 ], [ 80.2441822, 29.445641 ], [ 80.2428455, 29.4440344 ], [ 80.2424883, 29.4425452 ], [ 80.2430695, 29.4414173 ], [ 80.2452024, 29.4395568 ], [ 80.2469511, 29.4377696 ], [ 80.2474048, 29.4352262 ], [ 80.2473647, 29.4329925 ], [ 80.2473986, 29.4322538 ], [ 80.2470305, 29.4316452 ], [ 80.2466064, 29.4300006 ], [ 80.2455643, 29.4275262 ], [ 80.2447157, 29.4260155 ], [ 80.2440687, 29.4236377 ], [ 80.2442082, 29.4218925 ], [ 80.2444448, 29.4197407 ], [ 80.2458056, 29.4167662 ], [ 80.2453366, 29.4147176 ], [ 80.2438819, 29.4137673 ], [ 80.2419874, 29.412192 ], [ 80.2421156, 29.4112329 ], [ 80.2433278, 29.4105994 ], [ 80.2446872, 29.4088494 ], [ 80.2463384, 29.4073167 ], [ 80.2473627, 29.4069411 ], [ 80.2483931, 29.4060887 ], [ 80.2515839, 29.4051147 ], [ 80.2545407, 29.4036749 ], [ 80.2570604, 29.4013138 ], [ 80.259205, 29.4005283 ], [ 80.2633206, 29.3974666 ], [ 80.2670784, 29.3961842 ], [ 80.2699271, 29.3955354 ], [ 80.2709237, 29.3953644 ], [ 80.2721697, 29.3951506 ], [ 80.2743604, 29.3933627 ], [ 80.2748279, 29.392631 ], [ 80.275642, 29.3920464 ], [ 80.2755033, 29.3907751 ], [ 80.2738495, 29.3891606 ], [ 80.2730356, 29.3880214 ], [ 80.2728888, 29.38647 ], [ 80.2749751, 29.3826497 ], [ 80.2777978, 29.3806955 ], [ 80.2789135, 29.3794318 ], [ 80.2791053, 29.3782736 ], [ 80.2756938, 29.3771644 ], [ 80.2723751, 29.3748954 ], [ 80.2711913, 29.3733389 ], [ 80.2717887, 29.3717619 ], [ 80.2717415, 29.3711332 ], [ 80.2716614, 29.3700651 ], [ 80.2716329, 29.3688794 ], [ 80.2720658, 29.3674005 ], [ 80.2710322, 29.3644934 ], [ 80.2716345, 29.3628529 ], [ 80.2749838, 29.3616276 ], [ 80.2798, 29.3594216 ], [ 80.2795036, 29.3571827 ], [ 80.2797807, 29.3546319 ], [ 80.2790707, 29.352232 ], [ 80.2791108, 29.3505588 ], [ 80.279391, 29.3476734 ], [ 80.2806008, 29.3455459 ], [ 80.2816069, 29.3447093 ], [ 80.2827066, 29.3424677 ], [ 80.2855653, 29.3397273 ], [ 80.2864847, 29.3388786 ], [ 80.2878412, 29.3385503 ], [ 80.2892006, 29.3377879 ], [ 80.2911909, 29.3360327 ], [ 80.2911834, 29.3351536 ], [ 80.2901812, 29.3332516 ], [ 80.2908803, 29.3308962 ], [ 80.2923381, 29.3290854 ], [ 80.2947075, 29.3256196 ], [ 80.2964363, 29.3237219 ], [ 80.2987066, 29.3236039 ], [ 80.3000845, 29.3239059 ], [ 80.3023271, 29.3230982 ], [ 80.3068469, 29.3230227 ], [ 80.3091129, 29.3223134 ], [ 80.3109337, 29.3207277 ], [ 80.3129252, 29.3183421 ], [ 80.3163973, 29.3151787 ], [ 80.3168133, 29.3144376 ], [ 80.316847, 29.3141355 ], [ 80.3165028, 29.3114433 ], [ 80.3154662, 29.3088057 ], [ 80.316587, 29.3059291 ], [ 80.3181342, 29.304449 ], [ 80.318593, 29.3033524 ], [ 80.3182022, 29.3020187 ], [ 80.3170466, 29.301011 ], [ 80.3132796, 29.2947036 ], [ 80.3104701, 29.290622 ], [ 80.3092805, 29.2901626 ], [ 80.3071393, 29.2900292 ], [ 80.305372, 29.2877615 ], [ 80.3045434, 29.2852828 ], [ 80.3044943, 29.2767159 ], [ 80.3030043, 29.2708461 ], [ 80.3022833, 29.2659824 ], [ 80.2993994, 29.2620828 ], [ 80.2988707, 29.2591895 ], [ 80.3001204, 29.255667 ], [ 80.2988226, 29.2517671 ], [ 80.2990849, 29.2481652 ], [ 80.3003607, 29.2460636 ], [ 80.3009262, 29.2422309 ], [ 80.2982459, 29.2387242 ], [ 80.2956345, 29.2381383 ], [ 80.2934874, 29.234488 ], [ 80.2902382, 29.2314553 ], [ 80.2912379, 29.229234 ], [ 80.2926716, 29.2271766 ], [ 80.2951299, 29.2232927 ], [ 80.2962478, 29.2217131 ], [ 80.2963931, 29.2191877 ], [ 80.2946103, 29.2158657 ], [ 80.2938982, 29.2135242 ], [ 80.2938299, 29.2113048 ], [ 80.2945832, 29.2099579 ], [ 80.2955708, 29.2089429 ], [ 80.2978256, 29.2068573 ], [ 80.2977293, 29.2052583 ], [ 80.2939302, 29.1990548 ], [ 80.2926787, 29.1965368 ], [ 80.2909666, 29.1955536 ], [ 80.289143, 29.1950888 ], [ 80.2843434, 29.1967728 ], [ 80.2801954, 29.2017645 ], [ 80.2773536, 29.206422 ], [ 80.2759515, 29.2074683 ], [ 80.2714793, 29.2078363 ], [ 80.2693283, 29.2075765 ], [ 80.2665457, 29.2058044 ], [ 80.2619279, 29.2058854 ], [ 80.2586078, 29.2084832 ], [ 80.2576026, 29.2112535 ], [ 80.2570619, 29.213672 ], [ 80.256743, 29.217513 ], [ 80.2559539, 29.2201419 ], [ 80.2525897, 29.2219837 ], [ 80.2481183, 29.2217136 ], [ 80.2471931, 29.220373 ], [ 80.248016, 29.2167091 ], [ 80.2472848, 29.215009 ], [ 80.2440327, 29.212559 ], [ 80.2439056, 29.2113715 ], [ 80.2438721, 29.2094437 ], [ 80.2432523, 29.2076944 ], [ 80.2419534, 29.2050309 ], [ 80.2409094, 29.2022671 ], [ 80.2414402, 29.2011655 ], [ 80.2435001, 29.1997697 ], [ 80.2473974, 29.1975868 ], [ 80.2517789, 29.1945652 ], [ 80.258583, 29.1863662 ], [ 80.2584584, 29.1836894 ], [ 80.2592342, 29.1811898 ], [ 80.2598973, 29.1750587 ], [ 80.2594144, 29.1717484 ], [ 80.2584007, 29.1698404 ], [ 80.2579368, 29.1670841 ], [ 80.2586935, 29.1644012 ], [ 80.2603935, 29.1617021 ], [ 80.2669126, 29.1514317 ], [ 80.2713355, 29.1464041 ], [ 80.2726801, 29.1428445 ], [ 80.2716966, 29.1387019 ], [ 80.2680445, 29.1384757 ], [ 80.2643489, 29.1391436 ], [ 80.2571766, 29.1398124 ], [ 80.2542308, 29.1386853 ], [ 80.2515552, 29.1360875 ], [ 80.251262, 29.1319309 ], [ 80.25006, 29.1282765 ], [ 80.2466829, 29.1274416 ], [ 80.2427779, 29.1261365 ], [ 80.2398013, 29.1234896 ], [ 80.2375172, 29.1200325 ], [ 80.2356136, 29.1175206 ], [ 80.2337286, 29.1161987 ], [ 80.2315117, 29.1162821 ], [ 80.2290028, 29.1181399 ], [ 80.2244071, 29.1202761 ], [ 80.2212292, 29.1201578 ], [ 80.2180114, 29.1211528 ], [ 80.2167939, 29.1215072 ], [ 80.2137596, 29.1221332 ], [ 80.210617, 29.1217101 ], [ 80.208826, 29.1221332 ], [ 80.2059434, 29.1248725 ], [ 80.2040839, 29.1284208 ], [ 80.2032137, 29.1295859 ], [ 80.2021127, 29.1300446 ], [ 80.2005227, 29.1304121 ], [ 80.19888, 29.1303788 ], [ 80.197258, 29.1304579 ], [ 80.1947721, 29.1313722 ], [ 80.1914908, 29.1330845 ], [ 80.1878526, 29.1354852 ], [ 80.1862981, 29.1367839 ], [ 80.1850266, 29.1372014 ], [ 80.1838534, 29.1373258 ], [ 80.1830495, 29.1370421 ], [ 80.1811852, 29.1354137 ], [ 80.1792422, 29.1317734 ], [ 80.178755, 29.1290598 ], [ 80.1771084, 29.1277105 ], [ 80.1747434, 29.1265588 ], [ 80.1730401, 29.1265741 ], [ 80.1697831, 29.1271259 ], [ 80.1679673, 29.1262236 ], [ 80.1663268, 29.1249637 ], [ 80.1670094, 29.1222492 ], [ 80.1652025, 29.1165852 ], [ 80.1579229, 29.1128303 ], [ 80.1501075, 29.1072773 ], [ 80.1452582, 29.1046446 ], [ 80.1333553, 29.0733745 ], [ 80.1286848, 29.0618742 ], [ 80.1334008, 29.0607512 ], [ 80.1362122, 29.0592311 ], [ 80.132044, 29.0465412 ], [ 80.1293577, 29.0409058 ], [ 80.1282575, 29.036136 ], [ 80.1276839, 29.0347514 ], [ 80.1269431, 29.0340747 ], [ 80.1265314, 29.0316433 ], [ 80.1314048, 29.0304489 ], [ 80.1297939, 29.0260321 ], [ 80.1290201, 29.0239675 ], [ 80.1279295, 29.0217855 ], [ 80.1262002, 29.0172521 ], [ 80.1254357, 29.0152729 ], [ 80.1248895, 29.0140993 ], [ 80.124902, 29.01297 ], [ 80.1268411, 29.0123692 ], [ 80.1289585, 29.011747 ], [ 80.1319231, 29.010884 ], [ 80.1363484, 29.009583 ], [ 80.135308, 29.0073086 ], [ 80.1267623, 29.0060784 ], [ 80.1215139, 28.9913024 ], [ 80.1208956, 28.9893882 ], [ 80.1198639, 28.9866236 ], [ 80.1192785, 28.9845144 ], [ 80.1175646, 28.9811566 ], [ 80.1084031, 28.9836458 ], [ 80.1003072, 28.985913 ], [ 80.0963099, 28.9749592 ], [ 80.0588755, 28.9161234 ], [ 80.0586226, 28.9123827 ], [ 80.0598003, 28.8999176 ], [ 80.0604288, 28.892261 ], [ 80.0612424, 28.8823494 ], [ 80.0630885, 28.8579883 ], [ 80.0640671, 28.8461922 ], [ 80.0646167, 28.8430988 ], [ 80.064428, 28.8398587 ], [ 80.0647488, 28.8376944 ], [ 80.0683308, 28.8331709 ], [ 80.0709171, 28.8295572 ], [ 80.0742257, 28.8254772 ], [ 80.0755414, 28.8234637 ], [ 80.0802633, 28.8237092 ], [ 80.0857117, 28.8244379 ], [ 80.0947272, 28.8256734 ], [ 80.0991151, 28.826015 ], [ 80.1024858, 28.8264141 ], [ 80.104608, 28.8265978 ], [ 80.1060806, 28.8267253 ], [ 80.1161585, 28.8278697 ], [ 80.1187259, 28.8279032 ], [ 80.1235397, 28.8243562 ], [ 80.1294764, 28.8203995 ], [ 80.1324896, 28.8183226 ], [ 80.1365879, 28.8149609 ], [ 80.142118, 28.8101634 ], [ 80.1455894, 28.8074563 ], [ 80.1489845, 28.8037938 ], [ 80.1535316, 28.7988347 ], [ 80.1578061, 28.7951185 ], [ 80.162816, 28.7903443 ], [ 80.1696957, 28.7837084 ], [ 80.1778913, 28.7785251 ], [ 80.1877836, 28.7725945 ], [ 80.1987175, 28.7659971 ], [ 80.2054229, 28.7620916 ], [ 80.2107187, 28.758288 ], [ 80.2159235, 28.7554264 ], [ 80.2192893, 28.7565636 ], [ 80.2227062, 28.7568429 ], [ 80.2245014, 28.7572772 ], [ 80.2278648, 28.7576959 ], [ 80.2346348, 28.7587986 ], [ 80.2366022, 28.7570693 ], [ 80.2388485, 28.7565777 ], [ 80.2443958, 28.75526 ], [ 80.2506018, 28.7577841 ], [ 80.2563138, 28.7540166 ], [ 80.2614708, 28.7485752 ], [ 80.2634511, 28.7466445 ], [ 80.2653908, 28.7425283 ], [ 80.2644758, 28.7374837 ], [ 80.2618107, 28.7318481 ], [ 80.2566311, 28.7291944 ], [ 80.2644283, 28.7226443 ], [ 80.2677155, 28.7199712 ], [ 80.2722945, 28.714568 ], [ 80.2751723, 28.7110371 ], [ 80.2773832, 28.7103449 ], [ 80.2789341, 28.7102405 ], [ 80.2809964, 28.7098034 ], [ 80.2869605, 28.7104652 ], [ 80.2933391, 28.7112119 ], [ 80.2963053, 28.7099721 ], [ 80.2989602, 28.7061651 ], [ 80.3010981, 28.7061882 ], [ 80.3062859, 28.7049121 ], [ 80.3080142, 28.7043219 ], [ 80.3103084, 28.7030498 ], [ 80.3115094, 28.7024474 ], [ 80.3125356, 28.7019676 ], [ 80.3159091, 28.7005622 ], [ 80.3207432, 28.6941691 ], [ 80.3215158, 28.6910121 ], [ 80.3224423, 28.687807 ], [ 80.3226611, 28.6868816 ], [ 80.3223981, 28.6847717 ], [ 80.3214286, 28.6822571 ], [ 80.3209168, 28.6809994 ], [ 80.3215285, 28.6801154 ], [ 80.3227984, 28.6771624 ], [ 80.3235675, 28.6748539 ], [ 80.3246435, 28.6728853 ], [ 80.3253747, 28.6707952 ], [ 80.325743, 28.6664896 ], [ 80.3349453, 28.6621721 ], [ 80.3400051, 28.6589481 ], [ 80.3454534, 28.6554074 ], [ 80.3508983, 28.6517926 ], [ 80.353214, 28.6500708 ], [ 80.3558109, 28.6467297 ], [ 80.3577201, 28.6464792 ], [ 80.3602665, 28.6460887 ], [ 80.3607223, 28.6456256 ], [ 80.3608182, 28.6449835 ], [ 80.3600139, 28.6443859 ], [ 80.3589076, 28.6442246 ], [ 80.3581444, 28.6432439 ], [ 80.3569008, 28.6415598 ], [ 80.3574177, 28.6400953 ], [ 80.35773, 28.6392879 ], [ 80.3580868, 28.6386325 ], [ 80.3589876, 28.6377897 ], [ 80.3592898, 28.6376038 ], [ 80.3601952, 28.6370995 ], [ 80.3605804, 28.6360729 ], [ 80.3630915, 28.6344762 ], [ 80.36416, 28.6345734 ], [ 80.3650743, 28.6353503 ], [ 80.3656567, 28.6360863 ], [ 80.3664429, 28.635335 ], [ 80.3674684, 28.6352457 ], [ 80.3694157, 28.6347986 ], [ 80.3711947, 28.6332856 ], [ 80.3714613, 28.6320681 ], [ 80.3709788, 28.6309751 ], [ 80.3707527, 28.6300818 ], [ 80.371125, 28.6294364 ], [ 80.3719869, 28.6289915 ], [ 80.3733112, 28.6308468 ], [ 80.3749901, 28.6295062 ], [ 80.3751266, 28.6289291 ], [ 80.3763574, 28.6288535 ], [ 80.3768728, 28.6287924 ], [ 80.3779236, 28.6296877 ], [ 80.3791459, 28.6301876 ], [ 80.380811, 28.630395 ], [ 80.3833267, 28.6308523 ], [ 80.3842458, 28.6305093 ], [ 80.3845915, 28.6304613 ], [ 80.3851014, 28.6297942 ], [ 80.3858702, 28.6295591 ], [ 80.3867612, 28.6300498 ], [ 80.388217, 28.6310057 ], [ 80.393149, 28.63208 ], [ 80.4006973, 28.6339857 ], [ 80.404446, 28.6348938 ], [ 80.4073466, 28.636271 ], [ 80.4150391, 28.6394494 ], [ 80.4179567, 28.6390103 ], [ 80.4205689, 28.6378044 ], [ 80.4226977, 28.6377225 ], [ 80.4240064, 28.6371417 ], [ 80.4253528, 28.6374269 ], [ 80.4262059, 28.6375827 ], [ 80.4275133, 28.6377946 ], [ 80.4313631, 28.6375044 ], [ 80.432955, 28.6370523 ], [ 80.4347272, 28.6365282 ], [ 80.4372871, 28.6357066 ], [ 80.4385626, 28.634699 ], [ 80.4401891, 28.6313844 ], [ 80.4409949, 28.6297616 ], [ 80.4425978, 28.6286896 ], [ 80.4461959, 28.6287042 ], [ 80.4515031, 28.6290034 ], [ 80.4568076, 28.6235339 ], [ 80.4605446, 28.6219561 ], [ 80.4620549, 28.6202455 ], [ 80.4620549, 28.618877 ], [ 80.4603497, 28.6181927 ], [ 80.4605894, 28.6173717 ], [ 80.4632972, 28.6171021 ], [ 80.463419, 28.61537 ], [ 80.4625275, 28.6155838 ], [ 80.4607964, 28.6141625 ], [ 80.4621249, 28.6129897 ], [ 80.464167, 28.606944 ], [ 80.466667, 28.600833 ], [ 80.469167, 28.595 ], [ 80.470959, 28.5924918 ], [ 80.4721359, 28.5914066 ], [ 80.4721882, 28.5906492 ], [ 80.4709581, 28.5898471 ], [ 80.4712382, 28.5879755 ], [ 80.4708972, 28.5870772 ], [ 80.4712138, 28.5850879 ], [ 80.4695805, 28.5839184 ], [ 80.4705074, 28.5829168 ], [ 80.4743806, 28.5831948 ], [ 80.4773768, 28.5841146 ], [ 80.4811354, 28.5856858 ], [ 80.485833, 28.581389 ], [ 80.4910432, 28.5789853 ], [ 80.4948803, 28.576369 ], [ 80.499113, 28.5726069 ], [ 80.4986183, 28.5701778 ], [ 80.4995927, 28.5696964 ], [ 80.5011274, 28.5706164 ], [ 80.5034018, 28.5694654 ], [ 80.5062307, 28.568937 ], [ 80.5084161, 28.5666124 ], [ 80.512999, 28.5592357 ], [ 80.5184017, 28.5507014 ], [ 80.5227197, 28.5527057 ], [ 80.5256416, 28.5597311 ], [ 80.5307159, 28.572464 ], [ 80.529799, 28.574934 ], [ 80.5256287, 28.573299 ], [ 80.5215763, 28.5768249 ], [ 80.5212826, 28.579355 ], [ 80.521111, 28.580833 ], [ 80.52, 28.587222 ], [ 80.5195866, 28.5939326 ], [ 80.5182508, 28.6023695 ], [ 80.5175179, 28.6061392 ], [ 80.5171919, 28.607816 ], [ 80.5155196, 28.6155943 ], [ 80.5125543, 28.6214573 ], [ 80.5110206, 28.6268992 ], [ 80.5099171, 28.632404 ], [ 80.5079241, 28.6413718 ], [ 80.5068799, 28.6465624 ], [ 80.5060236, 28.6522862 ], [ 80.5054934, 28.6558448 ], [ 80.5046208, 28.6602658 ], [ 80.5035898, 28.6648644 ], [ 80.5064196, 28.6712922 ], [ 80.5111131, 28.6741477 ], [ 80.522264, 28.6806508 ], [ 80.5396515, 28.6907478 ], [ 80.5406297, 28.6908359 ], [ 80.5442489, 28.6911619 ], [ 80.5464165, 28.6913571 ], [ 80.5470977, 28.6914185 ], [ 80.5491793, 28.691606 ], [ 80.5503463, 28.6917111 ], [ 80.5530822, 28.6916125 ], [ 80.5553876, 28.6907689 ], [ 80.5630881, 28.6890929 ], [ 80.5678442, 28.6882622 ], [ 80.5698325, 28.6875095 ], [ 80.5735446, 28.6862824 ], [ 80.58099, 28.6836438 ], [ 80.5822182, 28.6829517 ], [ 80.5862364, 28.6812926 ], [ 80.5905639, 28.679968 ], [ 80.5893168, 28.6777049 ], [ 80.5881457, 28.6755796 ], [ 80.5870559, 28.6733599 ], [ 80.5860622, 28.6718735 ], [ 80.5849654, 28.669856 ], [ 80.5822958, 28.6651272 ], [ 80.5801427, 28.6609981 ], [ 80.5878133, 28.6590369 ], [ 80.5975941, 28.6560903 ], [ 80.5935076, 28.6518402 ], [ 80.5898962, 28.6481175 ], [ 80.5901967, 28.6477521 ], [ 80.5973204, 28.649968 ], [ 80.6022772, 28.651324 ], [ 80.603173, 28.6515691 ], [ 80.6037769, 28.6517343 ], [ 80.6063128, 28.6524281 ], [ 80.6073461, 28.6497421 ], [ 80.6077054, 28.6488083 ], [ 80.6092595, 28.6452009 ], [ 80.6112629, 28.6412375 ], [ 80.6115483, 28.6391522 ], [ 80.614167, 28.639167 ], [ 80.6181164, 28.6387972 ], [ 80.6197682, 28.6386426 ], [ 80.6254914, 28.6380016 ], [ 80.6296371, 28.6377087 ], [ 80.6300541, 28.6376792 ], [ 80.6334942, 28.6374361 ], [ 80.6360986, 28.6397051 ], [ 80.6415008, 28.6431318 ], [ 80.6431883, 28.6424764 ], [ 80.6482156, 28.6369956 ], [ 80.650556, 28.634444 ], [ 80.6524926, 28.6346969 ], [ 80.660838, 28.6385479 ], [ 80.6676122, 28.6417542 ], [ 80.6691395, 28.6367799 ], [ 80.6697334, 28.6335429 ], [ 80.6707665, 28.6279115 ], [ 80.673012, 28.6258529 ], [ 80.6796156, 28.6204443 ], [ 80.6785576, 28.6134192 ], [ 80.6779075, 28.6077437 ], [ 80.6775386, 28.6045227 ], [ 80.6858605, 28.6038474 ], [ 80.6941161, 28.6033797 ], [ 80.6955943, 28.603296 ], [ 80.693563, 28.596443 ], [ 80.6919065, 28.5917597 ], [ 80.6901343, 28.5871642 ], [ 80.6938007, 28.58517 ], [ 80.7, 28.581389 ], [ 80.7021932, 28.5800658 ], [ 80.7043896, 28.5787407 ], [ 80.7071931, 28.5757277 ], [ 80.7077515, 28.5751649 ], [ 80.7101813, 28.5727157 ], [ 80.7146672, 28.5683948 ], [ 80.7238172, 28.5748882 ], [ 80.7244442, 28.5753332 ], [ 80.727222, 28.573611 ], [ 80.7338161, 28.5687828 ], [ 80.7385341, 28.5662026 ], [ 80.7385341, 28.5744088 ], [ 80.7410915, 28.5737778 ], [ 80.7459653, 28.5722789 ], [ 80.7506447, 28.5710403 ], [ 80.7522405, 28.5704993 ], [ 80.756944, 28.568889 ], [ 80.7682195, 28.5656789 ], [ 80.769114, 28.5595436 ], [ 80.7695672, 28.5553104 ], [ 80.770278, 28.549722 ], [ 80.773358, 28.5488631 ], [ 80.7814273, 28.5466055 ], [ 80.7853192, 28.54588 ], [ 80.7887498, 28.5452232 ], [ 80.787877, 28.5406643 ], [ 80.7877162, 28.5353713 ], [ 80.7868988, 28.5319714 ], [ 80.7856347, 28.5285541 ], [ 80.7864842, 28.5265483 ], [ 80.7877981, 28.5250243 ], [ 80.792266, 28.5228729 ], [ 80.7982445, 28.5226295 ], [ 80.803611, 28.522222 ], [ 80.8083278, 28.5217746 ], [ 80.8157576, 28.5212495 ], [ 80.8236942, 28.5160369 ], [ 80.828133, 28.5131171 ], [ 80.8315631, 28.5104305 ], [ 80.8352346, 28.5071754 ], [ 80.8391322, 28.5051837 ], [ 80.8425457, 28.5023513 ], [ 80.845495, 28.4955138 ], [ 80.8486906, 28.4961287 ], [ 80.8522214, 28.4970001 ], [ 80.8554028, 28.4972622 ], [ 80.8602251, 28.4944369 ], [ 80.8658565, 28.4895756 ], [ 80.861695, 28.5045043 ], [ 80.8666254, 28.5063958 ], [ 80.8727084, 28.5095373 ], [ 80.8761722, 28.5108687 ], [ 80.8815913, 28.5090795 ], [ 80.887222, 28.508056 ], [ 80.8910405, 28.507237 ], [ 80.8961435, 28.5069615 ], [ 80.9000002, 28.5009114 ], [ 80.9063991, 28.498808 ], [ 80.9087007, 28.4977767 ], [ 80.9077299, 28.4938535 ], [ 80.9062446, 28.4895889 ], [ 80.904022, 28.4880231 ], [ 80.9014816, 28.4860361 ], [ 80.902074, 28.4837159 ], [ 80.9028982, 28.4780483 ], [ 80.9045406, 28.4711972 ], [ 80.9055609, 28.466139 ], [ 80.9095357, 28.4623823 ], [ 80.9120162, 28.4602058 ], [ 80.9157352, 28.4580715 ], [ 80.9141586, 28.4683753 ], [ 80.9192556, 28.4642836 ], [ 80.9189792, 28.4599391 ], [ 80.9231607, 28.4598388 ], [ 80.9276797, 28.4576555 ], [ 80.9310604, 28.4576392 ], [ 80.933288, 28.4639542 ], [ 80.9365855, 28.4660444 ], [ 80.9408403, 28.4678046 ], [ 80.9440189, 28.4682007 ], [ 80.9453454, 28.4671666 ], [ 80.9435183, 28.4648123 ], [ 80.9399807, 28.4630974 ], [ 80.9335641, 28.4594027 ], [ 80.9336142, 28.4586105 ], [ 80.9373673, 28.4565552 ], [ 80.9425243, 28.4555045 ], [ 80.9457305, 28.4551902 ], [ 80.9517662, 28.45498 ], [ 80.9521759, 28.4522738 ], [ 80.952251, 28.4479288 ], [ 80.9546318, 28.4474951 ], [ 80.9579984, 28.4482904 ], [ 80.9619868, 28.4490282 ], [ 80.9643582, 28.4502065 ], [ 80.9682454, 28.4566617 ], [ 80.9796074, 28.4555414 ], [ 80.9719973, 28.4499398 ], [ 80.9682694, 28.4469542 ], [ 80.9647871, 28.444498 ], [ 80.9677214, 28.4427396 ], [ 80.9668704, 28.4368635 ], [ 80.9709635, 28.4362839 ], [ 80.9757356, 28.4349173 ], [ 80.9788841, 28.4341014 ], [ 80.9777799, 28.4421979 ], [ 80.9846083, 28.44187 ], [ 80.9887754, 28.4415504 ], [ 80.9910739, 28.4438105 ], [ 80.9964251, 28.4496913 ], [ 80.9998991, 28.453914 ], [ 81.0139346, 28.4524236 ], [ 81.0169327, 28.4520222 ], [ 81.017859, 28.4518934 ], [ 81.0169951, 28.4481256 ], [ 81.0147298, 28.4432239 ], [ 81.0131795, 28.4384751 ], [ 81.0155146, 28.435907 ], [ 81.019184, 28.4317972 ], [ 81.0255588, 28.4357605 ], [ 81.0296466, 28.4382757 ], [ 81.0309764, 28.4369213 ], [ 81.0316272, 28.435086 ], [ 81.0326577, 28.4331396 ], [ 81.0335425, 28.4277546 ], [ 81.0244105, 28.4207507 ], [ 81.0208709, 28.4187584 ], [ 81.0176296, 28.4160792 ], [ 81.0201466, 28.410472 ], [ 81.024007, 28.4073364 ], [ 81.0260389, 28.4054279 ], [ 81.0286207, 28.4045104 ], [ 81.0336375, 28.3990962 ], [ 81.0347266, 28.4072651 ], [ 81.0358242, 28.4137158 ], [ 81.0392045, 28.4129375 ], [ 81.0452394, 28.4109917 ], [ 81.0483477, 28.4092996 ], [ 81.0483975, 28.4092009 ], [ 81.0506403, 28.4072771 ], [ 81.0522416, 28.4058497 ], [ 81.0542689, 28.4044297 ], [ 81.0573342, 28.4016319 ], [ 81.0634167, 28.3974396 ], [ 81.0674764, 28.3943233 ], [ 81.0695208, 28.3929557 ], [ 81.0719859, 28.3912857 ], [ 81.073575, 28.390122 ], [ 81.0777503, 28.3867744 ], [ 81.0813668, 28.3843444 ], [ 81.0882806, 28.3825901 ], [ 81.0967849, 28.3809422 ], [ 81.1001421, 28.3802724 ], [ 81.1040388, 28.3795161 ], [ 81.1095415, 28.3785076 ], [ 81.1156896, 28.3772906 ], [ 81.1208445, 28.3763759 ], [ 81.1275536, 28.3750005 ], [ 81.1342405, 28.3738587 ], [ 81.139458, 28.3729077 ], [ 81.1400745, 28.3727953 ], [ 81.1459449, 28.3718499 ], [ 81.1487047, 28.3713963 ], [ 81.1505223, 28.3712763 ], [ 81.1566009, 28.3704701 ], [ 81.1624723, 28.369709 ], [ 81.1675548, 28.3688437 ], [ 81.1729027, 28.3680826 ], [ 81.1781969, 28.3668916 ], [ 81.1832829, 28.3658075 ], [ 81.1880513, 28.3645906 ], [ 81.1895021, 28.3643079 ], [ 81.1928431, 28.363657 ], [ 81.197778, 28.363056 ], [ 81.2049982, 28.3622714 ], [ 81.2109315, 28.3607932 ], [ 81.2135128, 28.3580993 ], [ 81.2175439, 28.3499115 ], [ 81.2205338, 28.3436485 ], [ 81.2239214, 28.3392016 ], [ 81.2289695, 28.3324456 ], [ 81.2345774, 28.3248756 ], [ 81.2343932, 28.3169982 ], [ 81.2343048, 28.3132162 ], [ 81.2337728, 28.3029518 ], [ 81.2334544, 28.2968578 ], [ 81.2329899, 28.2918053 ], [ 81.2326763, 28.2891834 ], [ 81.2341259, 28.2873803 ], [ 81.2396028, 28.2811233 ], [ 81.2454921, 28.2735188 ], [ 81.2502772, 28.2685649 ], [ 81.2589189, 28.2586251 ], [ 81.2656335, 28.2509557 ], [ 81.2743006, 28.2416876 ], [ 81.2804879, 28.2349424 ], [ 81.2871315, 28.2275795 ], [ 81.2920659, 28.2228781 ], [ 81.2993408, 28.2200386 ], [ 81.3035115, 28.2162667 ], [ 81.3090563, 28.2103951 ], [ 81.3155096, 28.2035861 ], [ 81.3161686, 28.2025746 ], [ 81.3194816, 28.1989329 ], [ 81.3207739, 28.1977168 ], [ 81.3207844, 28.1971011 ], [ 81.320034, 28.1955167 ], [ 81.3187204, 28.1871946 ], [ 81.3184629, 28.1826835 ], [ 81.3235399, 28.1767626 ], [ 81.3246948, 28.1754704 ], [ 81.3226999, 28.171326 ], [ 81.3219754, 28.1696149 ], [ 81.3214176, 28.168901 ], [ 81.3209066, 28.168772 ], [ 81.3199554, 28.1686335 ], [ 81.3176294, 28.1682439 ], [ 81.3134998, 28.1678832 ], [ 81.3115582, 28.1678832 ], [ 81.3096272, 28.1680836 ], [ 81.3094166, 28.1681054 ], [ 81.3052991, 28.168753 ], [ 81.3038652, 28.1687015 ], [ 81.3026048, 28.1684287 ], [ 81.3016795, 28.167859 ], [ 81.3012736, 28.1669499 ], [ 81.3011744, 28.1655696 ], [ 81.3013011, 28.1648752 ], [ 81.3015, 28.164338 ], [ 81.3019168, 28.1633347 ], [ 81.3029174, 28.1625911 ], [ 81.3044202, 28.1619299 ], [ 81.3068407, 28.1615622 ], [ 81.3078794, 28.1607884 ], [ 81.3101378, 28.1601283 ], [ 81.3108042, 28.1587321 ], [ 81.3105574, 28.1575624 ], [ 81.3107376, 28.1558911 ], [ 81.312823, 28.1562911 ], [ 81.3144521, 28.1571498 ], [ 81.3152514, 28.1575565 ], [ 81.3160807, 28.1579064 ], [ 81.3204055, 28.1602607 ], [ 81.323281, 28.1557517 ], [ 81.3263368, 28.1509674 ], [ 81.3280473, 28.148333 ], [ 81.3243395, 28.1470053 ], [ 81.3205375, 28.1458309 ], [ 81.3194659, 28.1455307 ], [ 81.3184063, 28.1454037 ], [ 81.3156612, 28.1380293 ], [ 81.3159941, 28.1360062 ], [ 81.3181365, 28.1336567 ], [ 81.3197638, 28.1338902 ], [ 81.3200909, 28.1339526 ], [ 81.3204511, 28.1339283 ], [ 81.3206545, 28.1335778 ], [ 81.3219482, 28.1342678 ], [ 81.3242635, 28.1351566 ], [ 81.3263724, 28.1362469 ], [ 81.3311783, 28.1385294 ], [ 81.3339319, 28.1399369 ], [ 81.3346496, 28.1402332 ], [ 81.3352481, 28.1401625 ], [ 81.3374016, 28.1399067 ], [ 81.3381039, 28.1398704 ], [ 81.3389813, 28.1398251 ], [ 81.3417571, 28.1396245 ], [ 81.3438073, 28.1397402 ], [ 81.3447514, 28.1399978 ], [ 81.3466974, 28.1401216 ], [ 81.349465, 28.1402801 ], [ 81.3522028, 28.1406384 ], [ 81.3535986, 28.1406447 ], [ 81.3550916, 28.1408661 ], [ 81.3611545, 28.141152 ], [ 81.3679625, 28.140926 ], [ 81.3704483, 28.1416782 ], [ 81.3735113, 28.1449733 ], [ 81.3754677, 28.1494451 ], [ 81.3779231, 28.1558155 ], [ 81.3753166, 28.1591701 ], [ 81.3689125, 28.1606041 ], [ 81.3668618, 28.1627352 ], [ 81.3672021, 28.1658509 ], [ 81.3684751, 28.1690497 ], [ 81.3709545, 28.1712975 ], [ 81.3736953, 28.1740628 ], [ 81.3742164, 28.1756679 ], [ 81.3747155, 28.1772053 ], [ 81.3804809, 28.1757424 ], [ 81.3882981, 28.1742902 ], [ 81.394167, 28.173611 ], [ 81.4006359, 28.1741487 ], [ 81.4039947, 28.1740876 ], [ 81.4083451, 28.1744774 ], [ 81.4108392, 28.1746694 ], [ 81.4128712, 28.1745856 ], [ 81.4173042, 28.1738625 ], [ 81.4183076, 28.1734717 ], [ 81.4232905, 28.1716162 ], [ 81.4250506, 28.1712432 ], [ 81.4267287, 28.1706316 ], [ 81.4287183, 28.1692007 ], [ 81.4317632, 28.1678586 ], [ 81.4409182, 28.1636652 ], [ 81.444172, 28.1622252 ], [ 81.4470539, 28.1609498 ], [ 81.4474452, 28.1584071 ], [ 81.4469489, 28.1565719 ], [ 81.4465074, 28.155498 ], [ 81.4473197, 28.1541707 ], [ 81.4481858, 28.1528936 ], [ 81.4495525, 28.1514555 ], [ 81.4502408, 28.1508667 ], [ 81.4500594, 28.1451719 ], [ 81.4499563, 28.1408192 ], [ 81.4539722, 28.1377048 ], [ 81.4604702, 28.1327311 ], [ 81.4677353, 28.1272233 ], [ 81.470068, 28.126496 ], [ 81.4736887, 28.1254289 ], [ 81.4748404, 28.1247346 ], [ 81.4775422, 28.1229516 ], [ 81.4796864, 28.121463 ], [ 81.4828047, 28.1194125 ], [ 81.4840147, 28.118548 ], [ 81.4822465, 28.1150021 ], [ 81.4798639, 28.1103329 ], [ 81.479526, 28.1069512 ], [ 81.4791491, 28.1024957 ], [ 81.4788069, 28.097482 ], [ 81.4784863, 28.0928885 ], [ 81.4783823, 28.089277 ], [ 81.478339, 28.0826498 ], [ 81.4799549, 28.0816446 ], [ 81.4852962, 28.0785067 ], [ 81.4878261, 28.0769625 ], [ 81.492522, 28.0747456 ], [ 81.4999303, 28.0712611 ], [ 81.5067111, 28.0680002 ], [ 81.5091755, 28.0669423 ], [ 81.5151493, 28.0641824 ], [ 81.5224704, 28.0607152 ], [ 81.5268371, 28.0587158 ], [ 81.5299153, 28.0572985 ], [ 81.5334931, 28.0556225 ], [ 81.5373834, 28.0538762 ], [ 81.5378502, 28.0536644 ], [ 81.5406304, 28.0524029 ], [ 81.5476197, 28.0492528 ], [ 81.5495583, 28.0480733 ], [ 81.5506435, 28.0474597 ], [ 81.5518001, 28.0465 ], [ 81.5539488, 28.0450357 ], [ 81.5549841, 28.0444864 ], [ 81.556972, 28.043574 ], [ 81.5591562, 28.0424243 ], [ 81.5602038, 28.0418349 ], [ 81.5628381, 28.0400451 ], [ 81.5642258, 28.0390556 ], [ 81.5674023, 28.0368737 ], [ 81.5697235, 28.0352062 ], [ 81.5727494, 28.0333097 ], [ 81.5741026, 28.0322774 ], [ 81.5757487, 28.0309964 ], [ 81.5761668, 28.0308186 ], [ 81.5791627, 28.0290882 ], [ 81.582379, 28.0270224 ], [ 81.5833194, 28.0262328 ], [ 81.5844834, 28.0255866 ], [ 81.5862954, 28.0250902 ], [ 81.5870705, 28.024742 ], [ 81.5888573, 28.0239392 ], [ 81.5924473, 28.0222113 ], [ 81.5937277, 28.022049 ], [ 81.5945456, 28.0218868 ], [ 81.5966684, 28.0210214 ], [ 81.5977222, 28.0204671 ], [ 81.5984502, 28.0198887 ], [ 81.6004534, 28.0188622 ], [ 81.6027524, 28.0176841 ], [ 81.6067745, 28.0156165 ], [ 81.6076904, 28.0150918 ], [ 81.6082601, 28.014624 ], [ 81.6097739, 28.0136084 ], [ 81.6128494, 28.0120183 ], [ 81.6139429, 28.0115748 ], [ 81.6153765, 28.0108122 ], [ 81.6164149, 28.0103578 ], [ 81.6178455, 28.0095952 ], [ 81.6188134, 28.0090083 ], [ 81.6190493, 28.0086703 ], [ 81.619469, 28.007867 ], [ 81.6200173, 28.0075101 ], [ 81.6208304, 28.0062716 ], [ 81.6219301, 28.0044731 ], [ 81.6221078, 28.0040484 ], [ 81.6222977, 28.0038023 ], [ 81.6227847, 28.0033696 ], [ 81.6232473, 28.002688 ], [ 81.6240529, 28.0017414 ], [ 81.624785, 28.0013357 ], [ 81.6255324, 28.0012113 ], [ 81.626577, 28.0009652 ], [ 81.6267455, 28.0010626 ], [ 81.6272662, 28.0018172 ], [ 81.6273489, 28.0018848 ], [ 81.6274806, 28.0018686 ], [ 81.6276859, 28.0017036 ], [ 81.6279922, 28.0015061 ], [ 81.6289908, 28.0010707 ], [ 81.6328902, 27.9992413 ], [ 81.6350692, 27.9982506 ], [ 81.6361132, 27.9974971 ], [ 81.6366374, 27.9973058 ], [ 81.6371009, 27.9972982 ], [ 81.6376337, 27.9974818 ], [ 81.6391003, 27.9973642 ], [ 81.6399334, 27.9969369 ], [ 81.6407176, 27.9957252 ], [ 81.6437992, 27.9936803 ], [ 81.6509215, 27.9930351 ], [ 81.6748422, 27.9910776 ], [ 81.6931258, 27.9895814 ], [ 81.6984631, 27.9882002 ], [ 81.7026443, 27.9848945 ], [ 81.7264791, 27.9660483 ], [ 81.756998, 27.9418228 ], [ 81.762386, 27.9375453 ], [ 81.7703823, 27.9311968 ], [ 81.7731085, 27.9291697 ], [ 81.77672, 27.9263712 ], [ 81.7796117, 27.924049 ], [ 81.7825616, 27.9217052 ], [ 81.7848344, 27.9198836 ], [ 81.7875852, 27.9177155 ], [ 81.7897907, 27.9159832 ], [ 81.7916991, 27.914462 ], [ 81.793004, 27.913444 ], [ 81.7952585, 27.9116388 ], [ 81.7976938, 27.9097873 ], [ 81.7985423, 27.9090754 ], [ 81.799449, 27.9084014 ], [ 81.7999973, 27.9078112 ], [ 81.8006528, 27.9073186 ], [ 81.8029913, 27.9054863 ], [ 81.804761, 27.904089 ], [ 81.80497, 27.9033871 ], [ 81.8064558, 27.9032875 ], [ 81.8084649, 27.9031054 ], [ 81.8094353, 27.9033236 ], [ 81.8107176, 27.9038308 ], [ 81.8116013, 27.9041543 ], [ 81.8128462, 27.9044442 ], [ 81.8134353, 27.9044595 ], [ 81.8154411, 27.9039197 ], [ 81.8163941, 27.9038125 ], [ 81.8198077, 27.9034067 ], [ 81.8205702, 27.9033875 ], [ 81.8210943, 27.9036785 ], [ 81.823075, 27.9026569 ], [ 81.8243304, 27.9020093 ], [ 81.8246206, 27.9012704 ], [ 81.8250538, 27.900677 ], [ 81.8265657, 27.900141 ], [ 81.8300789, 27.8993294 ], [ 81.8316688, 27.8985177 ], [ 81.8323229, 27.8982268 ], [ 81.8339723, 27.8973015 ], [ 81.8348423, 27.895864 ], [ 81.8351486, 27.8956826 ], [ 81.8365638, 27.894402 ], [ 81.839578, 27.8914402 ], [ 81.8414438, 27.8902763 ], [ 81.8453383, 27.8887486 ], [ 81.8469893, 27.8875628 ], [ 81.8478194, 27.8870701 ], [ 81.8490049, 27.8862064 ], [ 81.8520742, 27.8839266 ], [ 81.8558572, 27.8810133 ], [ 81.8575665, 27.8799167 ], [ 81.8590667, 27.8789965 ], [ 81.8612814, 27.8775208 ], [ 81.8614937, 27.8774182 ], [ 81.8624301, 27.8769658 ], [ 81.8630428, 27.8764919 ], [ 81.8635451, 27.876213 ], [ 81.8645499, 27.8758204 ], [ 81.8661152, 27.8749458 ], [ 81.8669055, 27.8744015 ], [ 81.8679316, 27.8734971 ], [ 81.8700789, 27.8718047 ], [ 81.8716105, 27.870551 ], [ 81.8732279, 27.8695274 ], [ 81.8738102, 27.8690514 ], [ 81.8741224, 27.8687962 ], [ 81.8758823, 27.867361 ], [ 81.8767119, 27.866643 ], [ 81.8775676, 27.8661992 ], [ 81.8781558, 27.865273 ], [ 81.8790104, 27.8638269 ], [ 81.8795649, 27.8628195 ], [ 81.8802357, 27.86172 ], [ 81.8811761, 27.8605474 ], [ 81.8832162, 27.8584567 ], [ 81.8839912, 27.8580099 ], [ 81.8849591, 27.8569699 ], [ 81.8862059, 27.8567099 ], [ 81.8889107, 27.8565853 ], [ 81.8898603, 27.8564499 ], [ 81.892789, 27.855985 ], [ 81.8970231, 27.8550124 ], [ 81.8977881, 27.8548367 ], [ 81.89822, 27.8547148 ], [ 81.8988204, 27.8544467 ], [ 81.9000426, 27.8536315 ], [ 81.9020797, 27.8538563 ], [ 81.9035352, 27.8545342 ], [ 81.9063164, 27.8551777 ], [ 81.9078283, 27.8553883 ], [ 81.9087207, 27.8556602 ], [ 81.9104535, 27.8560739 ], [ 81.9119623, 27.8563913 ], [ 81.9131631, 27.8566946 ], [ 81.9136501, 27.8569546 ], [ 81.9142107, 27.8570548 ], [ 81.9155279, 27.8571117 ], [ 81.9162263, 27.8572065 ], [ 81.9173689, 27.8574936 ], [ 81.9190423, 27.8581017 ], [ 81.9202097, 27.8582645 ], [ 81.9215416, 27.8585973 ], [ 81.9250245, 27.859392 ], [ 81.9258888, 27.8600718 ], [ 81.9261288, 27.8620188 ], [ 81.9261375, 27.8637422 ], [ 81.9259734, 27.8655266 ], [ 81.9259347, 27.8661705 ], [ 81.9259216, 27.8668172 ], [ 81.9260072, 27.8691906 ], [ 81.9259705, 27.8703983 ], [ 81.9257407, 27.871912 ], [ 81.9256427, 27.8736748 ], [ 81.9253587, 27.8756241 ], [ 81.9299977, 27.8827398 ], [ 81.9380745, 27.8878659 ], [ 81.938324, 27.8938599 ], [ 81.9475525, 27.9033289 ], [ 81.950954, 27.9103492 ], [ 81.9594188, 27.9165123 ], [ 81.9618065, 27.9233927 ], [ 81.9682829, 27.9290536 ], [ 81.9703882, 27.9290115 ], [ 81.9787534, 27.9285953 ], [ 81.9912631, 27.9292144 ], [ 82.0252468, 27.9251107 ], [ 82.0379228, 27.9248546 ], [ 82.0445442, 27.9246954 ], [ 82.0484227, 27.9240307 ], [ 82.06225, 27.9217355 ], [ 82.0674957, 27.923028 ], [ 82.0700183, 27.9237103 ], [ 82.0803695, 27.9087782 ], [ 82.0899071, 27.8996954 ], [ 82.0909143, 27.8945907 ], [ 82.094591, 27.8914162 ], [ 82.1005489, 27.8860001 ], [ 82.1144792, 27.8770441 ], [ 82.121095, 27.8658719 ], [ 82.1291519, 27.8634825 ], [ 82.1446711, 27.8591146 ], [ 82.1489734, 27.8583703 ], [ 82.1540961, 27.8666457 ], [ 82.1784452, 27.8547372 ], [ 82.1954877, 27.8485238 ], [ 82.1989824, 27.84729 ], [ 82.2069789, 27.8438995 ], [ 82.2076515, 27.843173 ], [ 82.2082306, 27.8429833 ], [ 82.2091444, 27.8427974 ], [ 82.2133402, 27.8385183 ], [ 82.2176732, 27.8341935 ], [ 82.2219805, 27.8297698 ], [ 82.2265709, 27.8247845 ], [ 82.2301443, 27.8210096 ], [ 82.2334105, 27.8197004 ], [ 82.237791, 27.8174949 ], [ 82.2429323, 27.8149558 ], [ 82.2526182, 27.8103485 ], [ 82.2640719, 27.8018429 ], [ 82.281264, 27.7891851 ], [ 82.2900346, 27.7827305 ], [ 82.3033657, 27.7728746 ], [ 82.3151724, 27.7664969 ], [ 82.3154201, 27.7663603 ], [ 82.3368421, 27.7545419 ], [ 82.3679788, 27.7427076 ], [ 82.3768144, 27.7296759 ], [ 82.3822921, 27.720581 ], [ 82.3927164, 27.7109743 ], [ 82.4022422, 27.7032968 ], [ 82.4131752, 27.6988427 ], [ 82.4183011, 27.6950947 ], [ 82.4280311, 27.6890799 ], [ 82.4369168, 27.6853948 ], [ 82.4488049, 27.6794928 ], [ 82.4655633, 27.6773921 ], [ 82.4731982, 27.676435 ], [ 82.4821925, 27.6829176 ], [ 82.4841098, 27.6807792 ], [ 82.490082, 27.6814197 ], [ 82.4923694, 27.6843908 ], [ 82.5007785, 27.6850972 ], [ 82.5165691, 27.690548 ], [ 82.5245916, 27.6881775 ], [ 82.5273375, 27.6879422 ], [ 82.5283414, 27.687361 ], [ 82.5307353, 27.68651 ], [ 82.5321529, 27.6866999 ], [ 82.538851, 27.6877099 ], [ 82.5413082, 27.685689 ], [ 82.5440367, 27.6872542 ], [ 82.5495881, 27.6888725 ], [ 82.5545046, 27.6885838 ], [ 82.5631192, 27.6924509 ], [ 82.5655388, 27.692998 ], [ 82.568262, 27.6937421 ], [ 82.5784488, 27.6964819 ], [ 82.5852501, 27.6990658 ], [ 82.5937428, 27.6969031 ], [ 82.5972405, 27.7002221 ], [ 82.6003142, 27.7043561 ], [ 82.6032556, 27.7054566 ], [ 82.6050248, 27.7061185 ], [ 82.6107822, 27.7047815 ], [ 82.6159025, 27.7035694 ], [ 82.6189057, 27.7025228 ], [ 82.6231529, 27.7053715 ], [ 82.6273108, 27.709074 ], [ 82.6273794, 27.7115124 ], [ 82.6379411, 27.7092758 ], [ 82.6551233, 27.7135084 ], [ 82.6643697, 27.7226712 ], [ 82.6660199, 27.7159469 ], [ 82.6709465, 27.7144645 ], [ 82.6806904, 27.7140026 ], [ 82.6890925, 27.7152117 ], [ 82.6952617, 27.7181968 ], [ 82.6993716, 27.7222832 ], [ 82.7021259, 27.7163131 ], [ 82.7052062, 27.716746 ], [ 82.7078232, 27.7217363 ], [ 82.7077717, 27.7229288 ], [ 82.7080939, 27.7227841 ], [ 82.708454, 27.7226064 ], [ 82.70883, 27.7221466 ], [ 82.7089001, 27.7218617 ], [ 82.7088109, 27.7215824 ], [ 82.7087886, 27.7213342 ], [ 82.7088587, 27.7209026 ], [ 82.70883, 27.7204258 ], [ 82.7087408, 27.7201071 ], [ 82.7084603, 27.7197686 ], [ 82.7082532, 27.7192918 ], [ 82.7081735, 27.7188969 ], [ 82.7082978, 27.7181606 ], [ 82.7082946, 27.7175259 ], [ 82.7079266, 27.7162844 ], [ 82.7076427, 27.7158376 ], [ 82.7073363, 27.7152192 ], [ 82.7073092, 27.7143215 ], [ 82.7072461, 27.712614 ], [ 82.7069532, 27.7117682 ], [ 82.7064177, 27.7109011 ], [ 82.7058887, 27.7102946 ], [ 82.7054681, 27.7096146 ], [ 82.7047718, 27.7089504 ], [ 82.704633, 27.7086951 ], [ 82.704591, 27.7084089 ], [ 82.704749, 27.707829 ], [ 82.7047576, 27.7072085 ], [ 82.7045249, 27.7067449 ], [ 82.705, 27.7058242 ], [ 82.70506, 27.7054862 ], [ 82.705018, 27.7051473 ], [ 82.7044132, 27.7043829 ], [ 82.7043357, 27.7039206 ], [ 82.7044106, 27.7037846 ], [ 82.7054332, 27.7031889 ], [ 82.7057114, 27.7025839 ], [ 82.7058241, 27.7019122 ], [ 82.7065951, 27.7011693 ], [ 82.7066378, 27.7008194 ], [ 82.7074443, 27.6998445 ], [ 82.708211, 27.6992028 ], [ 82.7081978, 27.6990432 ], [ 82.7075852, 27.6986843 ], [ 82.7074784, 27.6984215 ], [ 82.7075359, 27.6979064 ], [ 82.7081057, 27.6958789 ], [ 82.7084691, 27.6957386 ], [ 82.7090767, 27.6952394 ], [ 82.7094907, 27.6951018 ], [ 82.7098102, 27.6948747 ], [ 82.710338, 27.6942162 ], [ 82.7115167, 27.6940975 ], [ 82.7125891, 27.6935646 ], [ 82.7135719, 27.6927945 ], [ 82.7140832, 27.692131 ], [ 82.7146446, 27.6921869 ], [ 82.7151047, 27.6920378 ], [ 82.7162618, 27.6912362 ], [ 82.7174995, 27.690252 ], [ 82.717862, 27.689682 ], [ 82.7181373, 27.6894353 ], [ 82.7180612, 27.6891705 ], [ 82.7177775, 27.6888779 ], [ 82.7173093, 27.688575 ], [ 82.7162728, 27.6881387 ], [ 82.715848, 27.6875618 ], [ 82.7158514, 27.6872305 ], [ 82.7161168, 27.6868836 ], [ 82.716832, 27.6867203 ], [ 82.717328, 27.6864606 ], [ 82.718064, 27.6862668 ], [ 82.7184987, 27.6856867 ], [ 82.7185725, 27.6853984 ], [ 82.7182729, 27.684532 ], [ 82.7183547, 27.6829986 ], [ 82.717609, 27.6816014 ], [ 82.7175253, 27.6812354 ], [ 82.7175389, 27.6805526 ], [ 82.7176228, 27.680256 ], [ 82.7177669, 27.6801156 ], [ 82.7192413, 27.6789579 ], [ 82.7192943, 27.6786587 ], [ 82.7188996, 27.6782243 ], [ 82.7179133, 27.6773679 ], [ 82.7174606, 27.6772122 ], [ 82.7170358, 27.6772638 ], [ 82.7158167, 27.6779258 ], [ 82.7153645, 27.6781145 ], [ 82.714938, 27.678185 ], [ 82.7141757, 27.6779796 ], [ 82.7137919, 27.6777237 ], [ 82.7137331, 27.6774267 ], [ 82.7138963, 27.6766885 ], [ 82.7138352, 27.6761697 ], [ 82.7136985, 27.6759154 ], [ 82.7131875, 27.6754227 ], [ 82.7130392, 27.6751445 ], [ 82.7132615, 27.6738866 ], [ 82.7136176, 27.6734005 ], [ 82.7136068, 27.6726112 ], [ 82.7138384, 27.6722681 ], [ 82.7138766, 27.6720468 ], [ 82.7138284, 27.671912 ], [ 82.7132084, 27.6712536 ], [ 82.7128599, 27.6698972 ], [ 82.7128616, 27.669541 ], [ 82.7131246, 27.6690574 ], [ 82.7133874, 27.6689281 ], [ 82.7140475, 27.669124 ], [ 82.7151271, 27.669144 ], [ 82.7154964, 27.6690413 ], [ 82.7157428, 27.668872 ], [ 82.7164321, 27.6687672 ], [ 82.7169988, 27.6688491 ], [ 82.7181283, 27.6684962 ], [ 82.718351, 27.6682671 ], [ 82.7184667, 27.6672839 ], [ 82.718353, 27.6671191 ], [ 82.7173095, 27.6665063 ], [ 82.7170268, 27.6660445 ], [ 82.7162901, 27.6651834 ], [ 82.7159922, 27.6649387 ], [ 82.7159877, 27.6645457 ], [ 82.7156073, 27.6641422 ], [ 82.7153164, 27.66402 ], [ 82.7147983, 27.664006 ], [ 82.7137902, 27.6643183 ], [ 82.71339, 27.6642932 ], [ 82.7126018, 27.6636915 ], [ 82.7124524, 27.6634369 ], [ 82.7123703, 27.6629677 ], [ 82.71284, 27.6628437 ], [ 82.7131561, 27.6624786 ], [ 82.7137899, 27.6622174 ], [ 82.714741, 27.6623568 ], [ 82.7153406, 27.6623121 ], [ 82.7172404, 27.6620356 ], [ 82.7190028, 27.6619205 ], [ 82.7195623, 27.6617844 ], [ 82.7199522, 27.661606 ], [ 82.7203615, 27.6617242 ], [ 82.7212839, 27.6623647 ], [ 82.7214725, 27.6623471 ], [ 82.7216144, 27.6622407 ], [ 82.7225214, 27.6607044 ], [ 82.7222399, 27.6598231 ], [ 82.7214597, 27.6590346 ], [ 82.7208214, 27.6589467 ], [ 82.7203019, 27.658982 ], [ 82.7199957, 27.6588582 ], [ 82.7197676, 27.6586356 ], [ 82.7195374, 27.6580442 ], [ 82.7192064, 27.6575355 ], [ 82.7184492, 27.6568295 ], [ 82.7182998, 27.6565905 ], [ 82.7184059, 27.6562808 ], [ 82.7186776, 27.6558884 ], [ 82.7193228, 27.6551303 ], [ 82.7196055, 27.6549373 ], [ 82.7203881, 27.6547438 ], [ 82.7209529, 27.6548665 ], [ 82.7212215, 27.6550433 ], [ 82.7216201, 27.6562231 ], [ 82.7219205, 27.656509 ], [ 82.7228967, 27.656831 ], [ 82.7231224, 27.6570199 ], [ 82.7234419, 27.6575378 ], [ 82.7237571, 27.6583136 ], [ 82.7244415, 27.6590376 ], [ 82.7246063, 27.6590698 ], [ 82.7253647, 27.6587315 ], [ 82.7257727, 27.6583808 ], [ 82.7266167, 27.6581126 ], [ 82.7270193, 27.6578608 ], [ 82.7273607, 27.6575052 ], [ 82.7274329, 27.6572948 ], [ 82.727401, 27.6567938 ], [ 82.7271408, 27.6560077 ], [ 82.7274338, 27.6554867 ], [ 82.7278151, 27.6550432 ], [ 82.7280178, 27.6541533 ], [ 82.7279182, 27.6538 ], [ 82.7275007, 27.65317 ], [ 82.7274826, 27.6516916 ], [ 82.7276161, 27.651481 ], [ 82.7281009, 27.6512964 ], [ 82.7282895, 27.6512948 ], [ 82.7288918, 27.6515201 ], [ 82.7292818, 27.6517856 ], [ 82.7295749, 27.6521105 ], [ 82.7305005, 27.6525094 ], [ 82.730787, 27.6530612 ], [ 82.7313977, 27.6539031 ], [ 82.731532, 27.6539301 ], [ 82.7316735, 27.6538482 ], [ 82.7318562, 27.6532091 ], [ 82.7316794, 27.6526637 ], [ 82.7319108, 27.6522696 ], [ 82.7320479, 27.6516906 ], [ 82.7317395, 27.6507864 ], [ 82.7315751, 27.6505563 ], [ 82.7316008, 27.6502726 ], [ 82.7314663, 27.6497388 ], [ 82.7310134, 27.649146 ], [ 82.7309913, 27.6489554 ], [ 82.7312973, 27.6482706 ], [ 82.7318249, 27.6478525 ], [ 82.7319275, 27.647146 ], [ 82.7324043, 27.646528 ], [ 82.7324915, 27.6462406 ], [ 82.7323213, 27.645925 ], [ 82.731703, 27.6456291 ], [ 82.7312481, 27.6453171 ], [ 82.7308083, 27.6452048 ], [ 82.730453, 27.6452801 ], [ 82.7302284, 27.6451227 ], [ 82.7298985, 27.6441719 ], [ 82.729806, 27.6435471 ], [ 82.7298986, 27.6430237 ], [ 82.7302067, 27.6427245 ], [ 82.7304299, 27.6426801 ], [ 82.7314362, 27.6429749 ], [ 82.7318658, 27.6432246 ], [ 82.7320963, 27.6436429 ], [ 82.7321253, 27.644246 ], [ 82.732326, 27.6446248 ], [ 82.7323877, 27.6450563 ], [ 82.7327399, 27.6454527 ], [ 82.7338248, 27.6463563 ], [ 82.7346665, 27.6466756 ], [ 82.7353433, 27.6464924 ], [ 82.7359811, 27.646083 ], [ 82.7361362, 27.6458503 ], [ 82.7361843, 27.6454142 ], [ 82.7360702, 27.6449178 ], [ 82.7358709, 27.6445244 ], [ 82.7363154, 27.6438347 ], [ 82.7363221, 27.6436492 ], [ 82.7361297, 27.6430249 ], [ 82.735776, 27.6425901 ], [ 82.7355543, 27.6425209 ], [ 82.7352922, 27.6422654 ], [ 82.7352809, 27.6418366 ], [ 82.7355016, 27.6412545 ], [ 82.7356735, 27.6411497 ], [ 82.7361008, 27.6411447 ], [ 82.736337, 27.6409867 ], [ 82.7369922, 27.6398315 ], [ 82.7369871, 27.6391146 ], [ 82.7371024, 27.6388004 ], [ 82.7377695, 27.6380673 ], [ 82.7383506, 27.6378274 ], [ 82.7384346, 27.6377181 ], [ 82.7384698, 27.6374099 ], [ 82.7382429, 27.6367549 ], [ 82.7377959, 27.6362351 ], [ 82.7358855, 27.6348834 ], [ 82.7348578, 27.6343974 ], [ 82.7343164, 27.6342228 ], [ 82.7331359, 27.634087 ], [ 82.7326628, 27.6339553 ], [ 82.7313241, 27.6331858 ], [ 82.7309532, 27.6326036 ], [ 82.7312069, 27.6315336 ], [ 82.7314662, 27.631176 ], [ 82.7317729, 27.6309275 ], [ 82.7324673, 27.6306001 ], [ 82.7327644, 27.6305798 ], [ 82.7331479, 27.6308691 ], [ 82.7333431, 27.6313112 ], [ 82.7333484, 27.6316989 ], [ 82.7335626, 27.6321299 ], [ 82.7343645, 27.632608 ], [ 82.7362777, 27.6329561 ], [ 82.7369932, 27.6328093 ], [ 82.737782, 27.6322745 ], [ 82.7389452, 27.6324273 ], [ 82.7395401, 27.63235 ], [ 82.7398148, 27.6322271 ], [ 82.7400159, 27.6318026 ], [ 82.7399507, 27.631365 ], [ 82.7397824, 27.631134 ], [ 82.7388933, 27.6306553 ], [ 82.7383556, 27.630136 ], [ 82.7373761, 27.6296773 ], [ 82.7367341, 27.6295219 ], [ 82.7356439, 27.6295416 ], [ 82.7349809, 27.6297783 ], [ 82.7342999, 27.6302355 ], [ 82.733927, 27.6303181 ], [ 82.7330724, 27.629834 ], [ 82.7328289, 27.6295148 ], [ 82.7328251, 27.6284622 ], [ 82.7331919, 27.6281251 ], [ 82.7337435, 27.6279943 ], [ 82.7339496, 27.6278763 ], [ 82.7348922, 27.6266496 ], [ 82.735569, 27.6261894 ], [ 82.7361927, 27.625477 ], [ 82.7366101, 27.6253017 ], [ 82.7377885, 27.6250065 ], [ 82.7382278, 27.6250605 ], [ 82.7390093, 27.6255483 ], [ 82.7394512, 27.6256407 ], [ 82.739979, 27.6256119 ], [ 82.7404262, 27.6253431 ], [ 82.7404355, 27.6248775 ], [ 82.7403582, 27.6246947 ], [ 82.7398805, 27.6242942 ], [ 82.7395613, 27.6237512 ], [ 82.7383233, 27.6229262 ], [ 82.7373599, 27.6226131 ], [ 82.7367909, 27.6220507 ], [ 82.736643, 27.6216165 ], [ 82.736604, 27.6202937 ], [ 82.7363224, 27.6198286 ], [ 82.7360661, 27.619677 ], [ 82.7351349, 27.6195517 ], [ 82.7338223, 27.6189236 ], [ 82.7330752, 27.6188276 ], [ 82.7326787, 27.6187041 ], [ 82.7324289, 27.6182861 ], [ 82.7323787, 27.6180227 ], [ 82.7324709, 27.6178021 ], [ 82.7333909, 27.6171388 ], [ 82.7337213, 27.6168096 ], [ 82.7341274, 27.616698 ], [ 82.7347764, 27.6168632 ], [ 82.7352306, 27.6168902 ], [ 82.7360766, 27.6167234 ], [ 82.7365905, 27.6163601 ], [ 82.7368943, 27.615975 ], [ 82.7377333, 27.6157137 ], [ 82.737941, 27.6155839 ], [ 82.738247, 27.6149678 ], [ 82.7381869, 27.6145171 ], [ 82.7379884, 27.6142184 ], [ 82.7373929, 27.6138167 ], [ 82.7371016, 27.6137865 ], [ 82.7368147, 27.6136404 ], [ 82.7363132, 27.6129979 ], [ 82.7360577, 27.6122983 ], [ 82.7355624, 27.6118825 ], [ 82.7349399, 27.6114941 ], [ 82.7349179, 27.6113153 ], [ 82.7350215, 27.6110081 ], [ 82.7354212, 27.6103322 ], [ 82.7355447, 27.6099567 ], [ 82.735789, 27.6096222 ], [ 82.7358665, 27.6089249 ], [ 82.7359514, 27.6087694 ], [ 82.736573, 27.6082688 ], [ 82.736761, 27.6080015 ], [ 82.7371304, 27.6077823 ], [ 82.7383343, 27.6067142 ], [ 82.738389, 27.6061765 ], [ 82.7382385, 27.6058275 ], [ 82.7382612, 27.6057089 ], [ 82.7387741, 27.6048014 ], [ 82.7392759, 27.6042792 ], [ 82.7405126, 27.6035837 ], [ 82.7407867, 27.603353 ], [ 82.741447, 27.6030491 ], [ 82.7421414, 27.6029271 ], [ 82.7423542, 27.6027694 ], [ 82.7436858, 27.602591 ], [ 82.7448009, 27.6026827 ], [ 82.7464946, 27.6023485 ], [ 82.7476953, 27.6016003 ], [ 82.7485197, 27.6005992 ], [ 82.7486088, 27.6001275 ], [ 82.7485279, 27.5996955 ], [ 82.748407, 27.5995683 ], [ 82.7481597, 27.5996559 ], [ 82.7477399, 27.5996228 ], [ 82.7458518, 27.5989968 ], [ 82.7451927, 27.5989602 ], [ 82.7444411, 27.5985304 ], [ 82.7437477, 27.597865 ], [ 82.7436648, 27.5976843 ], [ 82.7436072, 27.5965087 ], [ 82.7446629, 27.5951887 ], [ 82.7456445, 27.5944092 ], [ 82.746365, 27.5942279 ], [ 82.7468336, 27.5936071 ], [ 82.7470558, 27.5935589 ], [ 82.7490989, 27.5935365 ], [ 82.7499142, 27.5936108 ], [ 82.7503549, 27.5935491 ], [ 82.7513579, 27.5938263 ], [ 82.7517715, 27.5938528 ], [ 82.7521997, 27.5940616 ], [ 82.7526477, 27.5944307 ], [ 82.7530023, 27.5944758 ], [ 82.7539471, 27.5944067 ], [ 82.7546088, 27.5940538 ], [ 82.755187, 27.5939661 ], [ 82.7558824, 27.5930522 ], [ 82.7560426, 27.5924351 ], [ 82.7561236, 27.5908628 ], [ 82.7560257, 27.5903402 ], [ 82.7556158, 27.5892466 ], [ 82.7556457, 27.5888861 ], [ 82.7560716, 27.5884183 ], [ 82.7570092, 27.5878356 ], [ 82.7577245, 27.5869086 ], [ 82.7579063, 27.5863731 ], [ 82.7580205, 27.5858026 ], [ 82.7579548, 27.5853035 ], [ 82.7575577, 27.5840614 ], [ 82.7572128, 27.5832766 ], [ 82.7569679, 27.583064 ], [ 82.7563032, 27.5827477 ], [ 82.7538268, 27.5825103 ], [ 82.7532325, 27.582366 ], [ 82.7530522, 27.5822401 ], [ 82.752683, 27.5819823 ], [ 82.7519999, 27.5812054 ], [ 82.7518699, 27.580954 ], [ 82.751754, 27.5800629 ], [ 82.7518338, 27.5791487 ], [ 82.7517421, 27.5787275 ], [ 82.7513564, 27.5779241 ], [ 82.7513121, 27.5770463 ], [ 82.7510003, 27.5763176 ], [ 82.750534, 27.5758077 ], [ 82.749175, 27.575041 ], [ 82.7482171, 27.5747345 ], [ 82.7478967, 27.574559 ], [ 82.747682, 27.5742509 ], [ 82.7474821, 27.5738822 ], [ 82.747414, 27.5720746 ], [ 82.7475556, 27.5712874 ], [ 82.7479969, 27.5698201 ], [ 82.748275, 27.5676719 ], [ 82.7483908, 27.5665319 ], [ 82.7483338, 27.5659307 ], [ 82.7481051, 27.5652831 ], [ 82.7476295, 27.5647746 ], [ 82.7465935, 27.5640389 ], [ 82.7442351, 27.5626601 ], [ 82.7434542, 27.5620792 ], [ 82.7426879, 27.5612093 ], [ 82.7423845, 27.5604413 ], [ 82.7424092, 27.5600864 ], [ 82.7425829, 27.5596973 ], [ 82.7434207, 27.5587964 ], [ 82.7437748, 27.5585438 ], [ 82.7448451, 27.5579906 ], [ 82.748674, 27.5567783 ], [ 82.7488836, 27.5564313 ], [ 82.7488613, 27.5560693 ], [ 82.7485673, 27.5557506 ], [ 82.7479263, 27.5556004 ], [ 82.7468024, 27.555148 ], [ 82.7461187, 27.5545037 ], [ 82.7444758, 27.5535404 ], [ 82.7437615, 27.5528962 ], [ 82.7432788, 27.552915 ], [ 82.743078, 27.5530396 ], [ 82.7428184, 27.5533635 ], [ 82.7425606, 27.5538302 ], [ 82.7422494, 27.5538916 ], [ 82.7419117, 27.5538457 ], [ 82.7415624, 27.5537552 ], [ 82.7413148, 27.5536069 ], [ 82.7411522, 27.5534393 ], [ 82.7409998, 27.5530248 ], [ 82.740953, 27.5528933 ], [ 82.7409571, 27.5527167 ], [ 82.7410567, 27.5524499 ], [ 82.7411278, 27.5521994 ], [ 82.7410851, 27.5519471 ], [ 82.740951, 27.5518084 ], [ 82.7408026, 27.5517165 ], [ 82.7406888, 27.5516984 ], [ 82.7405749, 27.5517038 ], [ 82.7404774, 27.5517579 ], [ 82.7403859, 27.5517687 ], [ 82.7403208, 27.5517399 ], [ 82.740266, 27.5516444 ], [ 82.7402151, 27.5515308 ], [ 82.740144, 27.551466 ], [ 82.7400464, 27.5514299 ], [ 82.7399163, 27.5514209 ], [ 82.7396927, 27.5515056 ], [ 82.7393126, 27.5516948 ], [ 82.7389447, 27.5519129 ], [ 82.738776, 27.5519616 ], [ 82.7384284, 27.5519868 ], [ 82.7382882, 27.551985 ], [ 82.7382211, 27.5519435 ], [ 82.7381886, 27.5518318 ], [ 82.7382211, 27.551684 ], [ 82.7383878, 27.5515146 ], [ 82.7385544, 27.5513867 ], [ 82.7386906, 27.55121 ], [ 82.738713, 27.5510641 ], [ 82.738654, 27.5509163 ], [ 82.7386134, 27.5508694 ], [ 82.7384609, 27.5507883 ], [ 82.7383817, 27.550682 ], [ 82.7383715, 27.550491 ], [ 82.738402, 27.5503738 ], [ 82.7385219, 27.5502405 ], [ 82.7387475, 27.5501504 ], [ 82.7390159, 27.5501053 ], [ 82.7395383, 27.5500855 ], [ 82.7398554, 27.5500855 ], [ 82.7403737, 27.5501522 ], [ 82.7405607, 27.5501684 ], [ 82.7408046, 27.5501089 ], [ 82.7408859, 27.5500621 ], [ 82.7409347, 27.5499107 ], [ 82.7408371, 27.5492421 ], [ 82.7407904, 27.5491339 ], [ 82.7407314, 27.5490727 ], [ 82.740392, 27.5489645 ], [ 82.7399712, 27.5486293 ], [ 82.7398208, 27.5485644 ], [ 82.7396419, 27.5485428 ], [ 82.7394691, 27.5485428 ], [ 82.7392557, 27.5484869 ], [ 82.7389508, 27.5483229 ], [ 82.7385687, 27.5481229 ], [ 82.7384264, 27.5480274 ], [ 82.7382841, 27.5477877 ], [ 82.7378491, 27.5468992 ], [ 82.7377556, 27.5466919 ], [ 82.7377515, 27.5465387 ], [ 82.7378125, 27.5463747 ], [ 82.7379487, 27.5461458 ], [ 82.7381073, 27.5460503 ], [ 82.7383898, 27.5458827 ], [ 82.7385321, 27.5457241 ], [ 82.7387516, 27.5453619 ], [ 82.7388512, 27.545187 ], [ 82.7389915, 27.5450843 ], [ 82.7391216, 27.5450681 ], [ 82.7392943, 27.5451186 ], [ 82.739522, 27.5453276 ], [ 82.7399692, 27.5456592 ], [ 82.7409001, 27.5461076 ], [ 82.7412111, 27.5462806 ], [ 82.7414022, 27.5463382 ], [ 82.7415465, 27.54634 ], [ 82.7417741, 27.5462553 ], [ 82.7418981, 27.546131 ], [ 82.7419957, 27.5459129 ], [ 82.7419998, 27.5457417 ], [ 82.7419063, 27.5455272 ], [ 82.7417985, 27.5454047 ], [ 82.7416034, 27.5452677 ], [ 82.7413148, 27.5451307 ], [ 82.7409672, 27.5449703 ], [ 82.7406948, 27.5447126 ], [ 82.7406663, 27.5445918 ], [ 82.7406968, 27.5444711 ], [ 82.7407436, 27.5444134 ], [ 82.7409103, 27.5442584 ], [ 82.7410139, 27.5441773 ], [ 82.741205, 27.5439322 ], [ 82.7413066, 27.5437322 ], [ 82.7413798, 27.5435411 ], [ 82.7415201, 27.5433951 ], [ 82.7416705, 27.5433375 ], [ 82.7418819, 27.5433122 ], [ 82.7421522, 27.5433645 ], [ 82.7423657, 27.5434276 ], [ 82.7424978, 27.5434041 ], [ 82.7426014, 27.5433284 ], [ 82.742638, 27.5431464 ], [ 82.742634, 27.5430148 ], [ 82.7425628, 27.5428869 ], [ 82.7424327, 27.5427445 ], [ 82.7422986, 27.5426976 ], [ 82.7420912, 27.5427085 ], [ 82.7418941, 27.542786 ], [ 82.7417477, 27.5428202 ], [ 82.7414977, 27.5428671 ], [ 82.7412538, 27.5428472 ], [ 82.7411887, 27.5427842 ], [ 82.741146, 27.5426616 ], [ 82.7411765, 27.5424796 ], [ 82.7412721, 27.5422831 ], [ 82.7416258, 27.541701 ], [ 82.741705, 27.5414811 ], [ 82.7417071, 27.5413081 ], [ 82.7417254, 27.5411224 ], [ 82.7418168, 27.5410071 ], [ 82.7419063, 27.5409548 ], [ 82.7420343, 27.5409296 ], [ 82.7421461, 27.5409584 ], [ 82.7422213, 27.5412179 ], [ 82.7423006, 27.5413621 ], [ 82.7424144, 27.5414703 ], [ 82.7425872, 27.5415117 ], [ 82.7428393, 27.5414757 ], [ 82.7430425, 27.5414144 ], [ 82.7431564, 27.5413261 ], [ 82.7432519, 27.5411116 ], [ 82.74326, 27.5410035 ], [ 82.7431584, 27.5408665 ], [ 82.7429429, 27.5406989 ], [ 82.7421725, 27.5401798 ], [ 82.741579, 27.5398391 ], [ 82.7414286, 27.5397058 ], [ 82.7413453, 27.5395904 ], [ 82.7413107, 27.5394931 ], [ 82.7413331, 27.5393994 ], [ 82.7414144, 27.5393075 ], [ 82.7415302, 27.5392318 ], [ 82.7418453, 27.5391651 ], [ 82.7420221, 27.53912 ], [ 82.742136, 27.5390407 ], [ 82.7422742, 27.5388713 ], [ 82.7423006, 27.5387001 ], [ 82.7421924, 27.5383555 ], [ 82.7419708, 27.5378382 ], [ 82.7418773, 27.537521 ], [ 82.7418834, 27.5372759 ], [ 82.7419342, 27.5370596 ], [ 82.7418976, 27.5369388 ], [ 82.7418732, 27.536883 ], [ 82.7417655, 27.5368415 ], [ 82.7416456, 27.5368469 ], [ 82.7415257, 27.5368992 ], [ 82.7414443, 27.5369605 ], [ 82.7413935, 27.5370199 ], [ 82.7412817, 27.5371173 ], [ 82.7412187, 27.5371822 ], [ 82.7410805, 27.537229 ], [ 82.7408122, 27.5372236 ], [ 82.7406963, 27.5371515 ], [ 82.7406597, 27.5370794 ], [ 82.7406191, 27.5368721 ], [ 82.7406089, 27.536645 ], [ 82.740678, 27.5364828 ], [ 82.7408264, 27.5363494 ], [ 82.7410825, 27.5361692 ], [ 82.7412594, 27.5359727 ], [ 82.7413102, 27.5358303 ], [ 82.7413834, 27.5356267 ], [ 82.7414423, 27.5355275 ], [ 82.7415948, 27.5354699 ], [ 82.7417553, 27.5354753 ], [ 82.7418793, 27.5355005 ], [ 82.7419972, 27.5355744 ], [ 82.7421273, 27.5357619 ], [ 82.7422025, 27.5358358 ], [ 82.7424363, 27.5359709 ], [ 82.7427046, 27.5360466 ], [ 82.7430888, 27.5360466 ], [ 82.7434567, 27.5360052 ], [ 82.7437087, 27.5359006 ], [ 82.7438632, 27.5358105 ], [ 82.7440624, 27.5355672 ], [ 82.7443409, 27.5346065 ], [ 82.7444812, 27.5338585 ], [ 82.7444568, 27.5337287 ], [ 82.7443938, 27.5336728 ], [ 82.7442474, 27.5336386 ], [ 82.74391, 27.5336061 ], [ 82.7431559, 27.5335737 ], [ 82.7428489, 27.5335232 ], [ 82.7427351, 27.5334746 ], [ 82.7426518, 27.533361 ], [ 82.7426477, 27.5332619 ], [ 82.7426985, 27.5330942 ], [ 82.7427351, 27.5329663 ], [ 82.7426944, 27.5328635 ], [ 82.7425745, 27.5327554 ], [ 82.7423794, 27.5326616 ], [ 82.7422066, 27.5325012 ], [ 82.7420582, 27.5321678 ], [ 82.7420155, 27.5318758 ], [ 82.7420582, 27.5317153 ], [ 82.7421192, 27.5316523 ], [ 82.7421924, 27.5316198 ], [ 82.7423672, 27.5316378 ], [ 82.74254, 27.5316847 ], [ 82.7427981, 27.5318163 ], [ 82.7430624, 27.5320146 ], [ 82.7431396, 27.532157 ], [ 82.7432006, 27.5323174 ], [ 82.7432961, 27.5323696 ], [ 82.7434486, 27.5323408 ], [ 82.7436173, 27.5322182 ], [ 82.7436925, 27.532056 ], [ 82.7437067, 27.5317424 ], [ 82.7437026, 27.531591 ], [ 82.743725, 27.5314594 ], [ 82.7437738, 27.5314143 ], [ 82.7438998, 27.5314089 ], [ 82.7440604, 27.5314774 ], [ 82.7442068, 27.5315946 ], [ 82.7443003, 27.531773 ], [ 82.7443023, 27.5321786 ], [ 82.7443511, 27.5323192 ], [ 82.7444181, 27.5323769 ], [ 82.7445706, 27.5324309 ], [ 82.7447495, 27.5324003 ], [ 82.7448633, 27.5323246 ], [ 82.74503, 27.5321732 ], [ 82.7452312, 27.5319605 ], [ 82.7454629, 27.5315081 ], [ 82.7455199, 27.531326 ], [ 82.7455178, 27.5311764 ], [ 82.7454609, 27.5310646 ], [ 82.7453227, 27.5309259 ], [ 82.7450849, 27.5307889 ], [ 82.7448674, 27.5306699 ], [ 82.7447861, 27.5306014 ], [ 82.744656, 27.5303797 ], [ 82.7445808, 27.5303004 ], [ 82.7444283, 27.5302049 ], [ 82.7442027, 27.5300282 ], [ 82.7441356, 27.5298858 ], [ 82.7441356, 27.5297704 ], [ 82.7442007, 27.5296695 ], [ 82.7443145, 27.5296208 ], [ 82.7444852, 27.5296136 ], [ 82.744782, 27.5296929 ], [ 82.745154, 27.5298642 ], [ 82.7455016, 27.5299886 ], [ 82.7456825, 27.5300318 ], [ 82.7459386, 27.5300877 ], [ 82.7461459, 27.5302175 ], [ 82.7462699, 27.5304266 ], [ 82.746402, 27.5309817 ], [ 82.7464793, 27.5312503 ], [ 82.7465525, 27.5314125 ], [ 82.7466907, 27.5315081 ], [ 82.7468431, 27.5315333 ], [ 82.7470078, 27.5314828 ], [ 82.7471155, 27.5314107 ], [ 82.7472009, 27.5311728 ], [ 82.7472253, 27.5307312 ], [ 82.7472375, 27.5303671 ], [ 82.7471887, 27.5300949 ], [ 82.7470464, 27.5299128 ], [ 82.7467293, 27.5296533 ], [ 82.7462313, 27.5293811 ], [ 82.745902, 27.5292423 ], [ 82.7457008, 27.5291774 ], [ 82.745406, 27.5290639 ], [ 82.7452658, 27.5289395 ], [ 82.7451804, 27.5287394 ], [ 82.7451641, 27.5285033 ], [ 82.7452231, 27.5283735 ], [ 82.745341, 27.528305 ], [ 82.7455382, 27.5281626 ], [ 82.7458776, 27.527921 ], [ 82.7461053, 27.5278598 ], [ 82.7462719, 27.5278399 ], [ 82.7466744, 27.5278742 ], [ 82.7468513, 27.5278706 ], [ 82.7469671, 27.5278291 ], [ 82.7470484, 27.5276939 ], [ 82.747012, 27.5275738 ], [ 82.7469449, 27.5275035 ], [ 82.7467294, 27.5274224 ], [ 82.746581, 27.5273683 ], [ 82.7464672, 27.52728 ], [ 82.7464205, 27.5271051 ], [ 82.7464469, 27.5267807 ], [ 82.7464083, 27.5265067 ], [ 82.7463696, 27.5263589 ], [ 82.7462335, 27.5262273 ], [ 82.7461725, 27.5261263 ], [ 82.7461908, 27.5259479 ], [ 82.7462558, 27.5257694 ], [ 82.7463452, 27.5256829 ], [ 82.7464733, 27.5256144 ], [ 82.7465871, 27.5256018 ], [ 82.7467477, 27.5256414 ], [ 82.7469144, 27.5257406 ], [ 82.7470526, 27.525901 ], [ 82.7472701, 27.5262056 ], [ 82.7473311, 27.5263787 ], [ 82.74739, 27.5266797 ], [ 82.7474388, 27.5267735 ], [ 82.7475445, 27.5268744 ], [ 82.7476523, 27.5269321 ], [ 82.7478006, 27.5269753 ], [ 82.7478982, 27.5269447 ], [ 82.7480059, 27.5268636 ], [ 82.7480934, 27.5267266 ], [ 82.7482621, 27.5266076 ], [ 82.7483596, 27.5265481 ], [ 82.7484897, 27.5264382 ], [ 82.7485466, 27.5263282 ], [ 82.7485446, 27.526175 ], [ 82.74851, 27.5258469 ], [ 82.7484918, 27.5255765 ], [ 82.7485365, 27.5252701 ], [ 82.7486198, 27.5250916 ], [ 82.7487133, 27.5249817 ], [ 82.7488536, 27.5248934 ], [ 82.7492012, 27.5247365 ], [ 82.7492662, 27.5246662 ], [ 82.7492804, 27.5245653 ], [ 82.7492662, 27.5244427 ], [ 82.7492154, 27.5243436 ], [ 82.7491077, 27.5242408 ], [ 82.7490081, 27.5241849 ], [ 82.7487763, 27.5241056 ], [ 82.7485527, 27.5240912 ], [ 82.7481543, 27.524102 ], [ 82.7479348, 27.524066 ], [ 82.7477742, 27.523983 ], [ 82.747634, 27.5238929 ], [ 82.747575, 27.5236712 ], [ 82.7475831, 27.5235036 ], [ 82.7475811, 27.5233377 ], [ 82.7475242, 27.5231917 ], [ 82.747447, 27.5230637 ], [ 82.747449, 27.5229393 ], [ 82.7474835, 27.5228384 ], [ 82.7475649, 27.5227735 ], [ 82.7476767, 27.5227122 ], [ 82.7479165, 27.5227374 ], [ 82.7483373, 27.5229159 ], [ 82.7485263, 27.5229538 ], [ 82.7487194, 27.5229501 ], [ 82.7488963, 27.5229069 ], [ 82.7491646, 27.5228258 ], [ 82.749439, 27.5227699 ], [ 82.7496483, 27.5226888 ], [ 82.7496951, 27.5225914 ], [ 82.7496849, 27.5225175 ], [ 82.7496382, 27.5224454 ], [ 82.7495366, 27.5223643 ], [ 82.7494369, 27.5222579 ], [ 82.7493252, 27.5221534 ], [ 82.7491646, 27.5220759 ], [ 82.7489816, 27.5219966 ], [ 82.7488759, 27.5219172 ], [ 82.7487438, 27.5217965 ], [ 82.7486706, 27.5215819 ], [ 82.7485975, 27.5213891 ], [ 82.748508, 27.5212304 ], [ 82.7483007, 27.5209744 ], [ 82.7482214, 27.5208483 ], [ 82.7481096, 27.5205815 ], [ 82.7479144, 27.5203605 ], [ 82.7477534, 27.5202012 ], [ 82.7476097, 27.5201068 ], [ 82.7475119, 27.5199768 ], [ 82.7473869, 27.5196862 ], [ 82.7472776, 27.5194695 ], [ 82.7471727, 27.5193611 ], [ 82.7470836, 27.5193356 ], [ 82.7469456, 27.5193458 ], [ 82.7468335, 27.5193917 ], [ 82.7467171, 27.5194351 ], [ 82.7466581, 27.5194963 ], [ 82.746569, 27.519704 ], [ 82.7464885, 27.5199602 ], [ 82.7464799, 27.5200622 ], [ 82.7465302, 27.5202088 ], [ 82.7466007, 27.5202993 ], [ 82.7466754, 27.5203975 ], [ 82.746674, 27.5205479 ], [ 82.7466538, 27.5206167 ], [ 82.7465374, 27.5206855 ], [ 82.7463966, 27.5207301 ], [ 82.7462773, 27.5207174 ], [ 82.7461925, 27.5206881 ], [ 82.7461407, 27.5206396 ], [ 82.7461134, 27.520595 ], [ 82.7460573, 27.5205058 ], [ 82.7459424, 27.5204128 ], [ 82.7457684, 27.5203337 ], [ 82.7455083, 27.5202241 ], [ 82.7453301, 27.5201005 ], [ 82.7451806, 27.5199896 ], [ 82.7450426, 27.5198468 ], [ 82.7450124, 27.5197984 ], [ 82.744942, 27.5197652 ], [ 82.7448083, 27.5197652 ], [ 82.7447393, 27.5197767 ], [ 82.7446358, 27.5197945 ], [ 82.7445439, 27.5198149 ], [ 82.7444993, 27.5198519 ], [ 82.7444763, 27.5199156 ], [ 82.7444792, 27.5199768 ], [ 82.7444979, 27.5200393 ], [ 82.7445539, 27.5201221 ], [ 82.7445999, 27.5201897 ], [ 82.7445898, 27.5202534 ], [ 82.7445683, 27.5202917 ], [ 82.7444533, 27.5203324 ], [ 82.7442995, 27.5203873 ], [ 82.7440192, 27.5204357 ], [ 82.743887, 27.5204306 ], [ 82.7437016, 27.5203975 ], [ 82.7434299, 27.5203873 ], [ 82.7433049, 27.5204051 ], [ 82.7431108, 27.5204701 ], [ 82.7430318, 27.5205275 ], [ 82.7429973, 27.5205848 ], [ 82.7429915, 27.5206256 ], [ 82.7430275, 27.5207123 ], [ 82.7430778, 27.5207493 ], [ 82.7432071, 27.5208742 ], [ 82.7432388, 27.5209698 ], [ 82.7432057, 27.5210654 ], [ 82.7431396, 27.5211457 ], [ 82.7430419, 27.5212043 ], [ 82.7429182, 27.5212426 ], [ 82.7427846, 27.5212732 ], [ 82.742602, 27.5212566 ], [ 82.7425129, 27.5212056 ], [ 82.7423634, 27.5211215 ], [ 82.7421076, 27.5209481 ], [ 82.7419351, 27.5208117 ], [ 82.7418388, 27.5206881 ], [ 82.7417957, 27.520544 ], [ 82.7418101, 27.5203592 ], [ 82.7418647, 27.5201769 ], [ 82.7419567, 27.5200189 ], [ 82.7420903, 27.5199207 ], [ 82.7422283, 27.5198493 ], [ 82.7423476, 27.5197117 ], [ 82.7424094, 27.5195906 ], [ 82.7424296, 27.5194414 ], [ 82.7424094, 27.5193242 ], [ 82.7423563, 27.5191381 ], [ 82.7423419, 27.5190335 ], [ 82.7423462, 27.518785 ], [ 82.7422691, 27.5184189 ], [ 82.7422365, 27.5181395 ], [ 82.742265, 27.5179502 ], [ 82.7423544, 27.5177104 ], [ 82.7425069, 27.5174905 ], [ 82.7426126, 27.5173949 ], [ 82.742763, 27.5173445 ], [ 82.7429276, 27.5173282 ], [ 82.7431045, 27.5173625 ], [ 82.7432935, 27.5173445 ], [ 82.7433687, 27.5173084 ], [ 82.7434033, 27.5172471 ], [ 82.7433992, 27.5171534 ], [ 82.7433423, 27.5170344 ], [ 82.7432773, 27.5169172 ], [ 82.7432468, 27.5168073 ], [ 82.7432041, 27.5166558 ], [ 82.7431289, 27.5165459 ], [ 82.7430049, 27.5165224 ], [ 82.7428463, 27.5165152 ], [ 82.7427, 27.5165296 ], [ 82.742578, 27.5165999 ], [ 82.7423869, 27.5168289 ], [ 82.7423219, 27.5169244 ], [ 82.7421755, 27.5169965 ], [ 82.7419784, 27.5170128 ], [ 82.7418239, 27.5169857 ], [ 82.7416023, 27.5168866 ], [ 82.741393, 27.5168487 ], [ 82.7412141, 27.5168812 ], [ 82.7411023, 27.5169172 ], [ 82.7409661, 27.5170074 ], [ 82.7408624, 27.5171209 ], [ 82.740834, 27.5171804 ], [ 82.7408137, 27.5172579 ], [ 82.7408502, 27.5174022 ], [ 82.7409376, 27.5176924 ], [ 82.74096, 27.5178528 ], [ 82.7409356, 27.5179754 ], [ 82.7408807, 27.5180367 ], [ 82.7407852, 27.5180836 ], [ 82.7406165, 27.5180728 ], [ 82.7403604, 27.5179592 ], [ 82.7401429, 27.5179033 ], [ 82.7399335, 27.5179267 ], [ 82.7396916, 27.5179916 ], [ 82.7394965, 27.5180836 ], [ 82.7393644, 27.5181809 ], [ 82.7392668, 27.518336 ], [ 82.7390534, 27.5185036 ], [ 82.7388745, 27.5185847 ], [ 82.7385757, 27.5186172 ], [ 82.7383846, 27.518619 ], [ 82.7381366, 27.5185523 ], [ 82.7378378, 27.5183558 ], [ 82.7376325, 27.5181124 ], [ 82.7375553, 27.5180349 ], [ 82.7374374, 27.5180007 ], [ 82.7372544, 27.5180025 ], [ 82.7370817, 27.5180151 ], [ 82.7369312, 27.517997 ], [ 82.736793, 27.5179466 ], [ 82.7366975, 27.5178366 ], [ 82.7365898, 27.5175968 ], [ 82.7365776, 27.517312 ], [ 82.7366487, 27.5170723 ], [ 82.7367503, 27.5169298 ], [ 82.7368743, 27.5167694 ], [ 82.7369211, 27.5166612 ], [ 82.7369109, 27.5165332 ], [ 82.7368073, 27.5163638 ], [ 82.7367198, 27.5162178 ], [ 82.7366345, 27.5159347 ], [ 82.7364902, 27.5156517 ], [ 82.7363133, 27.5153488 ], [ 82.736291, 27.5151487 ], [ 82.7363235, 27.5149811 ], [ 82.7365288, 27.5147359 ], [ 82.7366711, 27.5145845 ], [ 82.7368743, 27.5145286 ], [ 82.7370126, 27.5144348 ], [ 82.7371467, 27.5142113 ], [ 82.7374679, 27.5137858 ], [ 82.7375451, 27.5136398 ], [ 82.737539, 27.513492 ], [ 82.7374638, 27.5134036 ], [ 82.7373479, 27.513355 ], [ 82.7371609, 27.5133063 ], [ 82.7369292, 27.5131999 ], [ 82.7366711, 27.5131242 ], [ 82.7365755, 27.5130341 ], [ 82.7365735, 27.5129205 ], [ 82.7366812, 27.5127492 ], [ 82.7368316, 27.512596 ], [ 82.7369983, 27.5124734 ], [ 82.7371691, 27.5124229 ], [ 82.7373581, 27.5123544 ], [ 82.7374333, 27.5122499 ], [ 82.737411, 27.5121237 ], [ 82.7373195, 27.5120119 ], [ 82.7372707, 27.5118172 ], [ 82.7372321, 27.5115864 ], [ 82.7371345, 27.5113142 ], [ 82.7371792, 27.5108545 ], [ 82.7372016, 27.5105083 ], [ 82.7371487, 27.5102397 ], [ 82.7370126, 27.5099224 ], [ 82.7368438, 27.5097187 ], [ 82.7367727, 27.5096538 ], [ 82.7365959, 27.5095835 ], [ 82.736541, 27.509524 ], [ 82.7365511, 27.5094465 ], [ 82.736606, 27.5093707 ], [ 82.736854, 27.5092463 ], [ 82.7372565, 27.5091147 ], [ 82.7374557, 27.5089182 ], [ 82.7376447, 27.5087163 ], [ 82.7376732, 27.5085486 ], [ 82.7376224, 27.5083882 ], [ 82.7374923, 27.5082782 ], [ 82.7372809, 27.5082151 ], [ 82.7369995, 27.50815 ], [ 82.7367779, 27.5081248 ], [ 82.7365889, 27.508159 ], [ 82.7364303, 27.5082185 ], [ 82.7361884, 27.5083574 ], [ 82.7359892, 27.5084547 ], [ 82.7358327, 27.5085034 ], [ 82.7356721, 27.5084998 ], [ 82.7354973, 27.5084186 ], [ 82.7352941, 27.5083051 ], [ 82.7351457, 27.5081969 ], [ 82.7350969, 27.5080887 ], [ 82.7351233, 27.5079409 ], [ 82.7352005, 27.5078706 ], [ 82.7354058, 27.5077137 ], [ 82.7354794, 27.5075334 ], [ 82.7354995, 27.5073625 ], [ 82.7354478, 27.507156 ], [ 82.7352207, 27.5067965 ], [ 82.7350827, 27.5064141 ], [ 82.7350769, 27.5061744 ], [ 82.7351316, 27.5059755 ], [ 82.7351603, 27.5057129 ], [ 82.7351431, 27.5055293 ], [ 82.7350769, 27.505231 ], [ 82.7351541, 27.5047465 ], [ 82.7352272, 27.5042948 ], [ 82.73523, 27.5039753 ], [ 82.7351963, 27.5035834 ], [ 82.735085, 27.5031591 ], [ 82.7351606, 27.5028608 ], [ 82.735473, 27.5024418 ], [ 82.7355705, 27.502349 ], [ 82.7356978, 27.5023261 ], [ 82.7358889, 27.502319 ], [ 82.736056, 27.5023331 ], [ 82.736243, 27.5023755 ], [ 82.7364512, 27.5024161 ], [ 82.745755, 27.5019782 ], [ 82.752955, 27.501591 ], [ 82.7551691, 27.5014604 ], [ 82.756298, 27.5013938 ], [ 82.758236, 27.5011913 ], [ 82.7585721, 27.5011562 ], [ 82.7689661, 27.5007748 ], [ 82.7724268, 27.5006022 ], [ 82.7753426, 27.5004764 ], [ 82.7850479, 27.5000575 ], [ 82.7932813, 27.4982362 ], [ 82.8014442, 27.4964312 ], [ 82.8167674, 27.4988742 ], [ 82.8204027, 27.4996032 ], [ 82.8219906, 27.4999142 ], [ 82.8325636, 27.5019968 ], [ 82.835011, 27.501588 ], [ 82.8372452, 27.5012148 ], [ 82.8424482, 27.5003887 ], [ 82.8479354, 27.499475 ], [ 82.8512343, 27.4993154 ], [ 82.8593048, 27.498886 ], [ 82.8659177, 27.498594 ], [ 82.8705631, 27.4985726 ], [ 82.8794572, 27.4985887 ], [ 82.8927677, 27.4997548 ], [ 82.8975316, 27.5001721 ], [ 82.9133601, 27.5013866 ], [ 82.9166807, 27.5013769 ], [ 82.925838, 27.5012764 ], [ 82.9293481, 27.5012379 ], [ 82.9311232, 27.499499 ], [ 82.9396135, 27.4910884 ], [ 82.9406779, 27.4881024 ], [ 82.9446468, 27.4769985 ], [ 82.9541429, 27.4677793 ], [ 82.9600722, 27.4660552 ], [ 82.961306, 27.4656964 ], [ 82.965042, 27.4646267 ], [ 82.9662276, 27.4642226 ], [ 82.9680229, 27.4639305 ], [ 82.9737465, 27.4629445 ], [ 82.9813965, 27.4615808 ], [ 82.9892051, 27.4600624 ], [ 82.9986794, 27.4580563 ], [ 83.0047513, 27.4567204 ], [ 83.0096912, 27.4557126 ], [ 83.0152817, 27.4546981 ], [ 83.0188691, 27.4539781 ], [ 83.0230983, 27.452585 ], [ 83.0271789, 27.4512408 ], [ 83.0346267, 27.4487825 ], [ 83.0400257, 27.4492334 ], [ 83.0513473, 27.4501205 ], [ 83.0668611, 27.4511834 ], [ 83.0697847, 27.4516471 ], [ 83.0726766, 27.4521057 ], [ 83.0771273, 27.4528249 ], [ 83.0778953, 27.4529167 ], [ 83.0788822, 27.4529908 ], [ 83.0832399, 27.4530509 ], [ 83.1032869, 27.4540516 ], [ 83.1119083, 27.4544871 ], [ 83.1209229, 27.4549524 ], [ 83.1324273, 27.4556124 ], [ 83.1342096, 27.4557147 ], [ 83.1461302, 27.4564084 ], [ 83.1529775, 27.4568129 ], [ 83.1606506, 27.4572648 ], [ 83.1651575, 27.4574837 ], [ 83.166027, 27.4574313 ], [ 83.1672624, 27.4572415 ], [ 83.1691251, 27.4567838 ], [ 83.1729463, 27.4558408 ], [ 83.1741431, 27.4556235 ], [ 83.1761233, 27.455264 ], [ 83.1817503, 27.4548522 ], [ 83.1878974, 27.4543758 ], [ 83.195914, 27.4464153 ], [ 83.196747, 27.4450992 ], [ 83.2005188, 27.4390644 ], [ 83.2060036, 27.4308365 ], [ 83.2111298, 27.423513 ], [ 83.2170217, 27.4178941 ], [ 83.2184708, 27.4166065 ], [ 83.2195515, 27.4158353 ], [ 83.2202397, 27.4153691 ], [ 83.2206885, 27.4150915 ], [ 83.2228139, 27.4136761 ], [ 83.2257675, 27.4117375 ], [ 83.2336434, 27.4088343 ], [ 83.2401301, 27.4064099 ], [ 83.2436562, 27.4038202 ], [ 83.2535869, 27.3967162 ], [ 83.2570302, 27.3942525 ], [ 83.2625459, 27.3903058 ], [ 83.2677242, 27.3866068 ], [ 83.2722019, 27.3834518 ], [ 83.2713377, 27.3811663 ], [ 83.2704991, 27.3789487 ], [ 83.2680927, 27.3727177 ], [ 83.2665884, 27.3688134 ], [ 83.2659496, 27.3671556 ], [ 83.2653135, 27.3654862 ], [ 83.2675822, 27.3613953 ], [ 83.2724657, 27.3526667 ], [ 83.2767236, 27.3491295 ], [ 83.2842832, 27.342994 ], [ 83.2893635, 27.3388483 ], [ 83.2925033, 27.336286 ], [ 83.2927098, 27.3359986 ], [ 83.2922466, 27.3357335 ], [ 83.2921609, 27.3356751 ], [ 83.2917797, 27.3354154 ], [ 83.2916221, 27.3352297 ], [ 83.2915935, 27.3351304 ], [ 83.2916021, 27.3349828 ], [ 83.2921674, 27.3350558 ], [ 83.2932419, 27.3349076 ], [ 83.2938348, 27.3350311 ], [ 83.2943782, 27.3349323 ], [ 83.2945017, 27.3346605 ], [ 83.2944029, 27.3341541 ], [ 83.2941065, 27.3338454 ], [ 83.2943906, 27.3334872 ], [ 83.2950699, 27.3333266 ], [ 83.2964656, 27.3336107 ], [ 83.2983306, 27.3342035 ], [ 83.2993928, 27.3346729 ], [ 83.300208, 27.3347223 ], [ 83.300949, 27.3343023 ], [ 83.301863, 27.3336107 ], [ 83.3029375, 27.3326967 ], [ 83.3040368, 27.3321903 ], [ 83.3047408, 27.3314863 ], [ 83.3053213, 27.331721 ], [ 83.306013, 27.3321533 ], [ 83.3066799, 27.3325361 ], [ 83.3070134, 27.3329561 ], [ 83.3073963, 27.3335489 ], [ 83.3080879, 27.3336724 ], [ 83.3089649, 27.3332155 ], [ 83.3103111, 27.3326226 ], [ 83.3110152, 27.3323015 ], [ 83.3118674, 27.3323015 ], [ 83.3123985, 27.3320421 ], [ 83.3130901, 27.3321162 ], [ 83.3139177, 27.3319803 ], [ 83.3150663, 27.3316345 ], [ 83.3157086, 27.3315234 ], [ 83.3162644, 27.3311405 ], [ 83.3168943, 27.3303871 ], [ 83.3171907, 27.3301647 ], [ 83.3176724, 27.3303376 ], [ 83.3178206, 27.3308564 ], [ 83.3176353, 27.3312763 ], [ 83.3172154, 27.3316345 ], [ 83.316499, 27.3319186 ], [ 83.3159309, 27.3320792 ], [ 83.3157086, 27.3322644 ], [ 83.315548, 27.3329684 ], [ 83.3155356, 27.3334501 ], [ 83.3158691, 27.3340059 ], [ 83.3167708, 27.334957 ], [ 83.3175242, 27.3353769 ], [ 83.3183887, 27.3358215 ], [ 83.3187346, 27.3361674 ], [ 83.3183023, 27.3364144 ], [ 83.3177465, 27.3366861 ], [ 83.3177218, 27.3372543 ], [ 83.318117, 27.3374519 ], [ 83.3187222, 27.3372172 ], [ 83.3191422, 27.3373531 ], [ 83.3195374, 27.3373037 ], [ 83.319982, 27.3369578 ], [ 83.3207725, 27.3369084 ], [ 83.3218347, 27.3365996 ], [ 83.322057, 27.3366491 ], [ 83.3227857, 27.3365502 ], [ 83.3235392, 27.3365132 ], [ 83.323922, 27.3366491 ], [ 83.3244037, 27.3368467 ], [ 83.3248731, 27.3365626 ], [ 83.3249719, 27.3358462 ], [ 83.3249348, 27.3354633 ], [ 83.3251695, 27.3352534 ], [ 83.3255894, 27.3352287 ], [ 83.3262317, 27.3352163 ], [ 83.3265899, 27.3349446 ], [ 83.3267504, 27.3344629 ], [ 83.3269851, 27.3341541 ], [ 83.3278373, 27.3341541 ], [ 83.3286525, 27.3345247 ], [ 83.3293071, 27.3344012 ], [ 83.3300605, 27.3337095 ], [ 83.3308139, 27.3332896 ], [ 83.3316291, 27.3327585 ], [ 83.3323084, 27.3327338 ], [ 83.3332471, 27.3332155 ], [ 83.3340376, 27.3336107 ], [ 83.3351492, 27.3338083 ], [ 83.3359149, 27.3334501 ], [ 83.3368413, 27.3327585 ], [ 83.3376441, 27.3327461 ], [ 83.3382863, 27.3331166 ], [ 83.3386075, 27.333376 ], [ 83.3393115, 27.3339689 ], [ 83.3404972, 27.3347223 ], [ 83.3417941, 27.3345741 ], [ 83.3425722, 27.3346482 ], [ 83.3432263, 27.3352338 ], [ 83.343663, 27.33587 ], [ 83.3439125, 27.3364688 ], [ 83.3437877, 27.3371425 ], [ 83.3436879, 27.3378162 ], [ 83.3438875, 27.3382279 ], [ 83.3445612, 27.3384275 ], [ 83.3453721, 27.3384026 ], [ 83.345946, 27.3382154 ], [ 83.3468443, 27.3384525 ], [ 83.3475678, 27.3390263 ], [ 83.3486907, 27.3396252 ], [ 83.3493519, 27.3399121 ], [ 83.3503499, 27.3397749 ], [ 83.3509737, 27.3395753 ], [ 83.3519094, 27.3397499 ], [ 83.3525207, 27.3400244 ], [ 83.3527203, 27.340486 ], [ 83.3524583, 27.3409601 ], [ 83.3518595, 27.341272 ], [ 83.3509986, 27.341509 ], [ 83.3507117, 27.3417959 ], [ 83.3507242, 27.3422825 ], [ 83.3511526, 27.3424845 ], [ 83.3515975, 27.3426942 ], [ 83.3530322, 27.3434178 ], [ 83.3542049, 27.344054 ], [ 83.3552778, 27.3445156 ], [ 83.3563632, 27.3445032 ], [ 83.3572739, 27.344316 ], [ 83.3578234, 27.3438911 ], [ 83.3582998, 27.3432736 ], [ 83.3589614, 27.3429295 ], [ 83.3590554, 27.3430085 ], [ 83.359182, 27.3431148 ], [ 83.3592967, 27.3437852 ], [ 83.3592349, 27.3447732 ], [ 83.3590055, 27.3461406 ], [ 83.3590496, 27.3472256 ], [ 83.3591555, 27.3482401 ], [ 83.3585645, 27.349087 ], [ 83.3580352, 27.3496869 ], [ 83.3577352, 27.3502514 ], [ 83.3579205, 27.3509307 ], [ 83.3589438, 27.3512747 ], [ 83.3603111, 27.3518482 ], [ 83.3613256, 27.352448 ], [ 83.3619872, 27.3530744 ], [ 83.3625959, 27.3536389 ], [ 83.3634869, 27.3542829 ], [ 83.3636192, 27.3548387 ], [ 83.3638751, 27.3554209 ], [ 83.3646161, 27.3556679 ], [ 83.3653306, 27.3553415 ], [ 83.3663186, 27.3552356 ], [ 83.3671832, 27.3553415 ], [ 83.3679683, 27.3556944 ], [ 83.3685505, 27.3561796 ], [ 83.3690092, 27.3568765 ], [ 83.3692033, 27.3577233 ], [ 83.3701031, 27.3581203 ], [ 83.3706148, 27.3581115 ], [ 83.3711, 27.3578204 ], [ 83.3719998, 27.3575204 ], [ 83.3727496, 27.3570264 ], [ 83.373226, 27.3569118 ], [ 83.3737553, 27.357247 ], [ 83.3739052, 27.357988 ], [ 83.3739582, 27.3596906 ], [ 83.3738347, 27.3608021 ], [ 83.3736759, 27.3616931 ], [ 83.3730054, 27.3625311 ], [ 83.3724761, 27.3631486 ], [ 83.3722115, 27.3641102 ], [ 83.3723791, 27.3652217 ], [ 83.372679, 27.3665626 ], [ 83.3727761, 27.3668625 ], [ 83.3727339, 27.3672828 ], [ 83.373077, 27.3679286 ], [ 83.373679, 27.3686281 ], [ 83.3745119, 27.3699969 ], [ 83.3754225, 27.3699148 ], [ 83.3774074, 27.3697031 ], [ 83.3795246, 27.3700383 ], [ 83.381386, 27.3703206 ], [ 83.3825592, 27.3707881 ], [ 83.383265, 27.3713792 ], [ 83.3842353, 27.3720055 ], [ 83.3850557, 27.372623 ], [ 83.3857438, 27.373664 ], [ 83.3862467, 27.3743697 ], [ 83.3867583, 27.3748461 ], [ 83.3874288, 27.3751901 ], [ 83.3878345, 27.3755694 ], [ 83.3879489, 27.3758961 ], [ 83.3880198, 27.3760987 ], [ 83.3879139, 27.3768221 ], [ 83.3874552, 27.3776337 ], [ 83.3868995, 27.3786394 ], [ 83.3864937, 27.3797509 ], [ 83.3862996, 27.3802802 ], [ 83.3863613, 27.3809859 ], [ 83.3867495, 27.3815505 ], [ 83.3873229, 27.3823709 ], [ 83.3877904, 27.3830325 ], [ 83.3879051, 27.3835001 ], [ 83.3877552, 27.38395 ], [ 83.3874552, 27.3843028 ], [ 83.3859732, 27.3850174 ], [ 83.3850822, 27.3855202 ], [ 83.3847382, 27.3861201 ], [ 83.3847117, 27.3867464 ], [ 83.3847823, 27.3877168 ], [ 83.3846941, 27.3882461 ], [ 83.3844206, 27.3888636 ], [ 83.3843324, 27.389684 ], [ 83.3845529, 27.3903104 ], [ 83.3852057, 27.3908838 ], [ 83.3860349, 27.3911749 ], [ 83.3871288, 27.3912543 ], [ 83.3878698, 27.3914483 ], [ 83.3884344, 27.3918277 ], [ 83.3888667, 27.3921276 ], [ 83.3893078, 27.3925334 ], [ 83.3900841, 27.3935832 ], [ 83.3909221, 27.39443 ], [ 83.3915925, 27.3950211 ], [ 83.3919895, 27.3954886 ], [ 83.39236, 27.395718 ], [ 83.3930834, 27.3958944 ], [ 83.3937362, 27.395965 ], [ 83.3949536, 27.3958062 ], [ 83.3960739, 27.3957268 ], [ 83.3964091, 27.3959562 ], [ 83.3965856, 27.3961679 ], [ 83.3966032, 27.3967501 ], [ 83.3967708, 27.3973853 ], [ 83.3970267, 27.3977911 ], [ 83.3974413, 27.3979499 ], [ 83.3980676, 27.3979322 ], [ 83.3989762, 27.3982233 ], [ 83.3996202, 27.3985409 ], [ 83.3999201, 27.3989291 ], [ 83.400176, 27.3995819 ], [ 83.4003612, 27.3998289 ], [ 83.4009523, 27.4001641 ], [ 83.4018521, 27.4005699 ], [ 83.4024872, 27.4009227 ], [ 83.4029901, 27.4014432 ], [ 83.4034753, 27.4022989 ], [ 83.4038369, 27.4035428 ], [ 83.4040487, 27.4042044 ], [ 83.4045956, 27.4046984 ], [ 83.4053807, 27.4053424 ], [ 83.4054866, 27.4057658 ], [ 83.4054954, 27.4066391 ], [ 83.405566, 27.4072743 ], [ 83.4058394, 27.4081388 ], [ 83.4064217, 27.4089945 ], [ 83.4063952, 27.4095679 ], [ 83.4059365, 27.4103883 ], [ 83.4058659, 27.4110147 ], [ 83.4062011, 27.4118262 ], [ 83.4064922, 27.4121879 ], [ 83.4072068, 27.4123379 ], [ 83.4078331, 27.4121703 ], [ 83.4083536, 27.412135 ], [ 83.4089799, 27.4123114 ], [ 83.4094034, 27.412479 ], [ 83.4096063, 27.4129201 ], [ 83.4094916, 27.4135024 ], [ 83.4094916, 27.4141728 ], [ 83.4093857, 27.4147374 ], [ 83.4091211, 27.4150373 ], [ 83.4088211, 27.4154607 ], [ 83.4083801, 27.4154607 ], [ 83.4078949, 27.4150991 ], [ 83.407542, 27.4149138 ], [ 83.4070651, 27.4153518 ], [ 83.405935, 27.4171538 ], [ 83.4057364, 27.4178298 ], [ 83.4054881, 27.4186527 ], [ 83.4051073, 27.4189025 ], [ 83.4036009, 27.4192919 ], [ 83.4028724, 27.4195638 ], [ 83.401755, 27.4196593 ], [ 83.4009604, 27.419505 ], [ 83.4002444, 27.4192001 ], [ 83.3997436, 27.4190421 ], [ 83.3994084, 27.4191523 ], [ 83.3992263, 27.4194205 ], [ 83.3991601, 27.4197989 ], [ 83.3992801, 27.4201846 ], [ 83.3994994, 27.4203316 ], [ 83.399843, 27.4202728 ], [ 83.400472, 27.4200891 ], [ 83.4008445, 27.4201479 ], [ 83.4010307, 27.4203316 ], [ 83.4011135, 27.4206108 ], [ 83.40089, 27.4210002 ], [ 83.4002692, 27.4212757 ], [ 83.3987842, 27.4218602 ], [ 83.3969873, 27.4224161 ], [ 83.3962498, 27.4224421 ], [ 83.3955475, 27.4225356 ], [ 83.395355, 27.4226885 ], [ 83.3952139, 27.4228006 ], [ 83.3948159, 27.4238033 ], [ 83.3945701, 27.4241306 ], [ 83.3939204, 27.4243799 ], [ 83.3931478, 27.424728 ], [ 83.3927791, 27.4252579 ], [ 83.3921352, 27.4267022 ], [ 83.3915031, 27.4282191 ], [ 83.3917841, 27.4290243 ], [ 83.3917606, 27.429388 ], [ 83.3915499, 27.4297776 ], [ 83.3910817, 27.4300166 ], [ 83.3897063, 27.4304581 ], [ 83.3892439, 27.4309153 ], [ 83.3883894, 27.4320166 ], [ 83.3878684, 27.4322504 ], [ 83.3872012, 27.4324841 ], [ 83.3865925, 27.433014 ], [ 83.3855273, 27.4341049 ], [ 83.3845615, 27.4353412 ], [ 83.3843508, 27.435736 ], [ 83.3840406, 27.4366814 ], [ 83.3844737, 27.4376892 ], [ 83.3855858, 27.4377983 ], [ 83.3859077, 27.4380112 ], [ 83.3862413, 27.4387073 ], [ 83.3862296, 27.4394969 ], [ 83.3859194, 27.4400423 ], [ 83.3854278, 27.4406968 ], [ 83.3851878, 27.4408163 ], [ 83.3848483, 27.4407955 ], [ 83.3845908, 27.4407332 ], [ 83.3842923, 27.4407695 ], [ 83.3839762, 27.4409669 ], [ 83.3837831, 27.441211 ], [ 83.3836368, 27.4416785 ], [ 83.3836075, 27.4422084 ], [ 83.3838533, 27.4426914 ], [ 83.3858609, 27.4437095 ], [ 83.3874353, 27.4442134 ], [ 83.3884713, 27.4443744 ], [ 83.3891737, 27.4445614 ], [ 83.3898526, 27.4448263 ], [ 83.3901921, 27.4451171 ], [ 83.3903852, 27.445756 ], [ 83.3905901, 27.4462703 ], [ 83.3910759, 27.4465455 ], [ 83.3913277, 27.4466125 ], [ 83.3918367, 27.4467481 ], [ 83.3926796, 27.4467533 ], [ 83.3933409, 27.446639 ], [ 83.3944003, 27.4464105 ], [ 83.3948569, 27.4464053 ], [ 83.395448, 27.4465196 ], [ 83.3961094, 27.446987 ], [ 83.397678, 27.4484206 ], [ 83.3984974, 27.4489868 ], [ 83.3986964, 27.4491737 ], [ 83.3989012, 27.4495477 ], [ 83.3996204, 27.4518165 ], [ 83.4001253, 27.4539613 ], [ 83.4008082, 27.455008 ], [ 83.4015614, 27.4565468 ], [ 83.4017808, 27.4570352 ], [ 83.4018098, 27.4573584 ], [ 83.4017435, 27.457722 ], [ 83.4013628, 27.4580488 ], [ 83.4008579, 27.4582471 ], [ 83.4004978, 27.4584785 ], [ 83.4002288, 27.4587943 ], [ 83.3999515, 27.4593782 ], [ 83.3997653, 27.4601861 ], [ 83.3997204, 27.4607747 ], [ 83.3996385, 27.462421 ], [ 83.3996561, 27.4637401 ], [ 83.3999838, 27.4642595 ], [ 83.4004638, 27.4645918 ], [ 83.4011837, 27.4648567 ], [ 83.4018122, 27.4651201 ], [ 83.4021764, 27.465368 ], [ 83.4023875, 27.4655663 ], [ 83.4024641, 27.4658601 ], [ 83.4023978, 27.4661796 ], [ 83.4018085, 27.4670662 ], [ 83.4015064, 27.4673526 ], [ 83.401345, 27.467404 ], [ 83.4010097, 27.4673526 ], [ 83.4007449, 27.4672314 ], [ 83.4004965, 27.4670221 ], [ 83.3996978, 27.4659168 ], [ 83.3994453, 27.4657001 ], [ 83.3991349, 27.4655532 ], [ 83.3988866, 27.4654835 ], [ 83.3982741, 27.465421 ], [ 83.3977568, 27.4654651 ], [ 83.3974588, 27.465634 ], [ 83.3964489, 27.4661738 ], [ 83.3958944, 27.4663905 ], [ 83.3954184, 27.4665337 ], [ 83.3951908, 27.4666365 ], [ 83.3950625, 27.4668422 ], [ 83.3949921, 27.4670809 ], [ 83.395526, 27.4691336 ], [ 83.395526, 27.46942 ], [ 83.3954267, 27.4696293 ], [ 83.3953025, 27.4697248 ], [ 83.3950997, 27.4697431 ], [ 83.3949342, 27.4697174 ], [ 83.3947355, 27.4695228 ], [ 83.3944914, 27.4694824 ], [ 83.3940734, 27.4694751 ], [ 83.3934857, 27.4694824 ], [ 83.3931918, 27.4696109 ], [ 83.3924841, 27.4701434 ], [ 83.39087, 27.4709475 ], [ 83.3903155, 27.4711128 ], [ 83.3899844, 27.4711165 ], [ 83.3897029, 27.4710907 ], [ 83.3894174, 27.4709402 ], [ 83.3891939, 27.470786 ], [ 83.3890118, 27.4705767 ], [ 83.3888835, 27.4705179 ], [ 83.3887221, 27.4704922 ], [ 83.3885069, 27.4705693 ], [ 83.3883662, 27.4707346 ], [ 83.3881882, 27.4710247 ], [ 83.3881758, 27.4713037 ], [ 83.3882668, 27.4718068 ], [ 83.3887055, 27.4732021 ], [ 83.3889972, 27.4734595 ], [ 83.3894159, 27.4735587 ], [ 83.3898008, 27.4736138 ], [ 83.3899167, 27.4737534 ], [ 83.3900119, 27.4739847 ], [ 83.3899705, 27.4743188 ], [ 83.3899539, 27.4746052 ], [ 83.3901402, 27.4747815 ], [ 83.3907202, 27.4749167 ], [ 83.3913377, 27.4751374 ], [ 83.3917562, 27.4754308 ], [ 83.3920469, 27.4757682 ], [ 83.3921545, 27.4761391 ], [ 83.3921379, 27.476844 ], [ 83.3920137, 27.4774352 ], [ 83.3917654, 27.4780264 ], [ 83.3914757, 27.4781953 ], [ 83.3905487, 27.4784156 ], [ 83.3893485, 27.4788011 ], [ 83.3889553, 27.4790214 ], [ 83.3887649, 27.4792087 ], [ 83.3889139, 27.4797631 ], [ 83.3897474, 27.4798055 ], [ 83.3908646, 27.4796942 ], [ 83.3972937, 27.4794131 ], [ 83.4040565, 27.4792114 ], [ 83.4062476, 27.4789391 ], [ 83.4078975, 27.4788487 ], [ 83.4155675, 27.4785433 ], [ 83.4260764, 27.4779438 ], [ 83.4412451, 27.4771292 ], [ 83.4544467, 27.4766671 ], [ 83.4600581, 27.4763763 ], [ 83.4649956, 27.4761755 ], [ 83.4703334, 27.4759521 ], [ 83.4775174, 27.4756423 ], [ 83.4798166, 27.4755456 ], [ 83.4887448, 27.4751701 ], [ 83.4891836, 27.475157 ], [ 83.49953, 27.4746426 ], [ 83.5071209, 27.4743261 ], [ 83.5121629, 27.4741159 ], [ 83.521839, 27.4737171 ], [ 83.530833, 27.473333 ], [ 83.5373024, 27.4729847 ], [ 83.5436489, 27.4726687 ], [ 83.5488379, 27.4724334 ], [ 83.551019, 27.47233 ], [ 83.5531235, 27.4722302 ], [ 83.5583045, 27.4719454 ], [ 83.56573, 27.4716244 ], [ 83.5724736, 27.4712789 ], [ 83.5795827, 27.4709505 ], [ 83.5853459, 27.4707348 ], [ 83.5919813, 27.4704083 ], [ 83.5985414, 27.4701606 ], [ 83.6051084, 27.4698654 ], [ 83.6122, 27.4694415 ], [ 83.6145262, 27.4692222 ], [ 83.6149352, 27.4691044 ], [ 83.6159603, 27.4686734 ], [ 83.6178615, 27.4680196 ], [ 83.623908, 27.4654162 ], [ 83.6294529, 27.4630457 ], [ 83.6356687, 27.4601836 ], [ 83.6388033, 27.4586962 ], [ 83.640448, 27.4579158 ], [ 83.6457124, 27.4554541 ], [ 83.6507629, 27.453077 ], [ 83.6532438, 27.4519234 ], [ 83.6607067, 27.4483774 ], [ 83.6654117, 27.4461778 ], [ 83.6684162, 27.4447732 ], [ 83.6752375, 27.4416099 ], [ 83.6795965, 27.4396544 ], [ 83.6830973, 27.4380637 ], [ 83.6862324, 27.4366463 ], [ 83.6929663, 27.4336403 ], [ 83.6936445, 27.4333375 ], [ 83.7022147, 27.4293276 ], [ 83.7086066, 27.4263451 ], [ 83.7116191, 27.4249394 ], [ 83.7222216, 27.4200373 ], [ 83.7288849, 27.4169622 ], [ 83.7336777, 27.4147957 ], [ 83.7384311, 27.4124898 ], [ 83.7429485, 27.4103595 ], [ 83.744328, 27.4097089 ], [ 83.7479642, 27.407994 ], [ 83.7525, 27.405833 ], [ 83.7573583, 27.4036212 ], [ 83.7595611, 27.4025946 ], [ 83.7625952, 27.4011806 ], [ 83.767348, 27.3989403 ], [ 83.772222, 27.396667 ], [ 83.782222, 27.392222 ], [ 83.7872286, 27.3897804 ], [ 83.791944, 27.3875 ], [ 83.7964194, 27.385673 ], [ 83.7972042, 27.3853526 ], [ 83.8019335, 27.3831672 ], [ 83.8072132, 27.3807007 ], [ 83.8116646, 27.3786467 ], [ 83.8123467, 27.3783929 ], [ 83.817176, 27.3761839 ], [ 83.8227614, 27.3734952 ], [ 83.8294304, 27.3704778 ], [ 83.8323605, 27.3686952 ], [ 83.8359622, 27.3659997 ], [ 83.839722, 27.363056 ], [ 83.8440095, 27.3601929 ], [ 83.8487186, 27.3567307 ], [ 83.8528873, 27.3537351 ], [ 83.8552607, 27.3520171 ], [ 83.8566258, 27.3509744 ], [ 83.8574725, 27.3560207 ], [ 83.859908, 27.3626459 ], [ 83.8601513, 27.365479 ], [ 83.8565016, 27.3720575 ], [ 83.8544199, 27.3794517 ], [ 83.8547443, 27.3864614 ], [ 83.8569882, 27.3929666 ], [ 83.8600437, 27.3961554 ], [ 83.8612056, 27.4010555 ], [ 83.8611516, 27.4138717 ], [ 83.86226, 27.4245988 ], [ 83.8674461, 27.4256327 ], [ 83.8761019, 27.4273584 ], [ 83.8830769, 27.4306698 ], [ 83.883888, 27.4338131 ], [ 83.8851705, 27.4350643 ], [ 83.8870232, 27.4356334 ], [ 83.8896418, 27.4365744 ], [ 83.8957002, 27.4375008 ], [ 83.896566, 27.4375743 ], [ 83.9022695, 27.438058 ], [ 83.902989, 27.4385089 ], [ 83.9042147, 27.4388475 ], [ 83.906076, 27.4394757 ], [ 83.908458, 27.4404277 ], [ 83.9099365, 27.441179 ], [ 83.9129286, 27.4418625 ], [ 83.9145339, 27.4423023 ], [ 83.9167, 27.4430287 ], [ 83.9254349, 27.4466585 ], [ 83.9312613, 27.4491912 ], [ 83.9323361, 27.4497447 ], [ 83.9346251, 27.4487628 ], [ 83.9355509, 27.448319 ], [ 83.9363384, 27.448149 ], [ 83.9377217, 27.4483284 ], [ 83.9395629, 27.4492462 ], [ 83.9402251, 27.449353 ], [ 83.9408797, 27.4492796 ], [ 83.9420083, 27.4485384 ], [ 83.9424222, 27.4477972 ], [ 83.942377, 27.4472563 ], [ 83.9420008, 27.4463548 ], [ 83.9419482, 27.445814 ], [ 83.9420309, 27.4453399 ], [ 83.9423846, 27.4448257 ], [ 83.9423545, 27.4441179 ], [ 83.9426479, 27.4432498 ], [ 83.9434831, 27.4427089 ], [ 83.944815, 27.4422882 ], [ 83.945763, 27.4419543 ], [ 83.9463349, 27.4419676 ], [ 83.9465983, 27.4420878 ], [ 83.9468842, 27.4423416 ], [ 83.9471099, 27.442395 ], [ 83.948201, 27.4422322 ], [ 83.9489566, 27.4422794 ], [ 83.9498611, 27.4424683 ], [ 83.9513721, 27.4428649 ], [ 83.952266, 27.4429688 ], [ 83.9530428, 27.442931 ], [ 83.9555328, 27.4424683 ], [ 83.9565437, 27.4423549 ], [ 83.9575333, 27.4423833 ], [ 83.9582144, 27.4426666 ], [ 83.9590231, 27.4433749 ], [ 83.9594807, 27.4438848 ], [ 83.960183, 27.4443759 ], [ 83.9610769, 27.4446214 ], [ 83.9623432, 27.4449142 ], [ 83.9655366, 27.4463546 ], [ 83.9664471, 27.4467485 ], [ 83.9671995, 27.4468954 ], [ 83.9677865, 27.446842 ], [ 83.9685539, 27.4465148 ], [ 83.9699159, 27.4455733 ], [ 83.9701567, 27.4453129 ], [ 83.970262, 27.4449055 ], [ 83.9700814, 27.444378 ], [ 83.9700438, 27.4438505 ], [ 83.9705479, 27.4430759 ], [ 83.9712176, 27.4426752 ], [ 83.9719324, 27.4425082 ], [ 83.9726999, 27.4425817 ], [ 83.9733395, 27.4430491 ], [ 83.9745359, 27.4431827 ], [ 83.9762063, 27.4430491 ], [ 83.9776661, 27.4426952 ], [ 83.97811, 27.4423947 ], [ 83.9783132, 27.4418138 ], [ 83.977809, 27.4407186 ], [ 83.9773199, 27.439944 ], [ 83.9771394, 27.4394565 ], [ 83.9773576, 27.4391626 ], [ 83.977636, 27.4390224 ], [ 83.9781251, 27.4390224 ], [ 83.9788248, 27.4396368 ], [ 83.9800814, 27.4410458 ], [ 83.9821958, 27.4427754 ], [ 83.983791, 27.4437369 ], [ 83.9851303, 27.4441309 ], [ 83.9868459, 27.4436969 ], [ 83.9876736, 27.4437102 ], [ 83.9882153, 27.4439306 ], [ 83.9892161, 27.4443914 ], [ 83.9907436, 27.4444247 ], [ 83.9919926, 27.4444515 ], [ 83.9933621, 27.4451326 ], [ 83.9944305, 27.4459472 ], [ 83.995025, 27.4462878 ], [ 83.9957398, 27.4464147 ], [ 83.9961386, 27.4463212 ], [ 83.9966202, 27.4460941 ], [ 83.9968158, 27.4458337 ], [ 83.9968835, 27.4451125 ], [ 83.9969061, 27.4447319 ], [ 83.9969061, 27.4444715 ], [ 83.9972823, 27.4435299 ], [ 83.9975833, 27.4432161 ], [ 83.9976585, 27.4428288 ], [ 83.9974178, 27.4423747 ], [ 83.9972372, 27.441934 ], [ 83.9975306, 27.4416067 ], [ 83.9979294, 27.4413997 ], [ 83.9981401, 27.4413463 ], [ 83.9985163, 27.4416001 ], [ 83.9985991, 27.4418939 ], [ 83.9986518, 27.4422612 ], [ 83.9990355, 27.4423547 ], [ 83.9994644, 27.4422478 ], [ 84.0003899, 27.4409456 ], [ 84.0008865, 27.4404915 ], [ 84.0012026, 27.4405049 ], [ 84.0014283, 27.4408388 ], [ 84.0015186, 27.4414264 ], [ 84.0019625, 27.4420742 ], [ 84.0023839, 27.4424281 ], [ 84.0029031, 27.4425617 ], [ 84.0031363, 27.4424415 ], [ 84.0032567, 27.4420608 ], [ 84.0033621, 27.4415066 ], [ 84.0036405, 27.441373 ], [ 84.0040393, 27.4416201 ], [ 84.004408, 27.4419139 ], [ 84.0047842, 27.4423613 ], [ 84.0049497, 27.4424815 ], [ 84.0056495, 27.4422011 ], [ 84.0059129, 27.4410525 ], [ 84.0056871, 27.440565 ], [ 84.0051604, 27.4401577 ], [ 84.0051303, 27.4400041 ], [ 84.0052883, 27.4397703 ], [ 84.005642, 27.4398304 ], [ 84.0063794, 27.4400975 ], [ 84.0072071, 27.4403847 ], [ 84.0082003, 27.4406184 ], [ 84.0085088, 27.4404782 ], [ 84.0087722, 27.4401577 ], [ 84.0087345, 27.4398438 ], [ 84.0085013, 27.4392094 ], [ 84.0084035, 27.4385216 ], [ 84.0084411, 27.4380942 ], [ 84.0087646, 27.4376534 ], [ 84.0092763, 27.437413 ], [ 84.0105479, 27.4372527 ], [ 84.0114734, 27.437413 ], [ 84.0128354, 27.43758 ], [ 84.0132041, 27.4375599 ], [ 84.0139264, 27.4373529 ], [ 84.0142725, 27.4370257 ], [ 84.0146111, 27.4361041 ], [ 84.0151303, 27.4352293 ], [ 84.0156269, 27.4346816 ], [ 84.0161837, 27.4344746 ], [ 84.0168534, 27.434508 ], [ 84.0175156, 27.4347551 ], [ 84.0180573, 27.4350489 ], [ 84.0183207, 27.4356767 ], [ 84.0183357, 27.4361642 ], [ 84.0185765, 27.4363445 ], [ 84.0188775, 27.4363445 ], [ 84.0190957, 27.4361508 ], [ 84.0193139, 27.43565 ], [ 84.019514, 27.4353127 ], [ 84.0202749, 27.4350813 ], [ 84.0205515, 27.4347413 ], [ 84.0207324, 27.4342407 ], [ 84.0208122, 27.4338677 ], [ 84.0209878, 27.4336599 ], [ 84.0212858, 27.4336363 ], [ 84.021621, 27.4335985 ], [ 84.022036, 27.433301 ], [ 84.0222914, 27.433098 ], [ 84.023297, 27.4326871 ], [ 84.0238929, 27.4326729 ], [ 84.0241589, 27.4328382 ], [ 84.02426, 27.4331074 ], [ 84.0245116, 27.4336504 ], [ 84.0248148, 27.434151 ], [ 84.0252192, 27.4345099 ], [ 84.0255597, 27.4345429 ], [ 84.0260865, 27.4342879 ], [ 84.0263153, 27.4340802 ], [ 84.0263259, 27.433844 ], [ 84.0264217, 27.4335654 ], [ 84.0265813, 27.4333718 ], [ 84.0268792, 27.4333718 ], [ 84.0270232, 27.4334562 ], [ 84.0271453, 27.4335277 ], [ 84.0272517, 27.4339715 ], [ 84.0272357, 27.4347035 ], [ 84.0273953, 27.4354921 ], [ 84.0271123, 27.4361316 ], [ 84.0269242, 27.4367994 ], [ 84.0268113, 27.436933 ], [ 84.0264878, 27.4370599 ], [ 84.025931, 27.4372068 ], [ 84.0255848, 27.437741 ], [ 84.025472, 27.4381751 ], [ 84.0257203, 27.4387027 ], [ 84.0262545, 27.4391167 ], [ 84.0275713, 27.4397645 ], [ 84.028098, 27.4398313 ], [ 84.0286247, 27.4397378 ], [ 84.0293546, 27.4393438 ], [ 84.0297985, 27.438903 ], [ 84.0301748, 27.4386159 ], [ 84.0304306, 27.4386225 ], [ 84.0309046, 27.4388162 ], [ 84.031341, 27.4392703 ], [ 84.0313862, 27.4399448 ], [ 84.0312959, 27.4404389 ], [ 84.0312658, 27.440853 ], [ 84.0314238, 27.4413805 ], [ 84.0317925, 27.4416476 ], [ 84.0326352, 27.4417011 ], [ 84.0332748, 27.441681 ], [ 84.0344863, 27.4412731 ], [ 84.0362223, 27.4414107 ], [ 84.0373077, 27.4429595 ], [ 84.039585, 27.443375 ], [ 84.040415, 27.4429784 ], [ 84.0424794, 27.4429784 ], [ 84.0435435, 27.4436583 ], [ 84.0440117, 27.4434128 ], [ 84.0454802, 27.4438094 ], [ 84.0460548, 27.4433561 ], [ 84.0471189, 27.4433183 ], [ 84.0480553, 27.4430161 ], [ 84.0518649, 27.4434317 ], [ 84.0525885, 27.446227 ], [ 84.0537377, 27.4473413 ], [ 84.053867, 27.448737 ], [ 84.0542583, 27.4496184 ], [ 84.0555525, 27.4506601 ], [ 84.0562297, 27.4506734 ], [ 84.0582763, 27.4523561 ], [ 84.0582162, 27.454012 ], [ 84.0598565, 27.4547598 ], [ 84.0611657, 27.4558816 ], [ 84.0611958, 27.457257 ], [ 84.0586225, 27.4591532 ], [ 84.0585924, 27.4609292 ], [ 84.0582312, 27.4613432 ], [ 84.0581861, 27.4621711 ], [ 84.0606541, 27.4622245 ], [ 84.0605788, 27.4629589 ], [ 84.0617978, 27.4647882 ], [ 84.0617827, 27.4660968 ], [ 84.0621289, 27.4670849 ], [ 84.0630017, 27.4682733 ], [ 84.0654998, 27.4690077 ], [ 84.0668241, 27.4701025 ], [ 84.0669897, 27.4722389 ], [ 84.0682237, 27.4733871 ], [ 84.0678475, 27.4767918 ], [ 84.0685999, 27.4781002 ], [ 84.0702402, 27.4808505 ], [ 84.0702854, 27.4815848 ], [ 84.0711281, 27.4820254 ], [ 84.0713839, 27.4818919 ], [ 84.0714592, 27.4809039 ], [ 84.0719709, 27.4806369 ], [ 84.0731748, 27.4806235 ], [ 84.0753719, 27.482733 ], [ 84.0765608, 27.4829733 ], [ 84.0777496, 27.484335 ], [ 84.0800521, 27.4844685 ], [ 84.0808949, 27.4837076 ], [ 84.0816323, 27.4836809 ], [ 84.0822192, 27.4833738 ], [ 84.0838683, 27.4832973 ], [ 84.0860805, 27.4848993 ], [ 84.0884733, 27.4853532 ], [ 84.0895869, 27.4861275 ], [ 84.0911068, 27.486982 ], [ 84.0910466, 27.4889711 ], [ 84.0947336, 27.4892381 ], [ 84.0959225, 27.4906532 ], [ 84.095787, 27.4922952 ], [ 84.0961633, 27.4940306 ], [ 84.0970511, 27.4955791 ], [ 84.0974424, 27.4980353 ], [ 84.0978186, 27.4984892 ], [ 84.0977735, 27.4997973 ], [ 84.0985259, 27.5009987 ], [ 84.0984888, 27.5027107 ], [ 84.0975099, 27.5046739 ], [ 84.0988719, 27.5055234 ], [ 84.0984463, 27.5079396 ], [ 84.0997019, 27.5087324 ], [ 84.0995317, 27.5124132 ], [ 84.0972309, 27.5163153 ], [ 84.0986036, 27.5173251 ], [ 84.1004126, 27.5174384 ], [ 84.102211, 27.5182783 ], [ 84.1027537, 27.5189012 ], [ 84.1034206, 27.5189373 ], [ 84.1056177, 27.5211661 ], [ 84.1074312, 27.521182 ], [ 84.1081655, 27.521635 ], [ 84.1089104, 27.5216067 ], [ 84.1093147, 27.5213236 ], [ 84.1093999, 27.5203798 ], [ 84.1105704, 27.5198231 ], [ 84.1128902, 27.5198419 ], [ 84.1141458, 27.5190586 ], [ 84.1156675, 27.5192663 ], [ 84.1173169, 27.5188322 ], [ 84.1173499, 27.5145772 ], [ 84.1177543, 27.513926 ], [ 84.1177968, 27.5133786 ], [ 84.1190844, 27.5126236 ], [ 84.1203081, 27.5127274 ], [ 84.1208083, 27.5121706 ], [ 84.1225322, 27.5119158 ], [ 84.1236282, 27.5111513 ], [ 84.1255117, 27.5116138 ], [ 84.128289, 27.5116704 ], [ 84.1288211, 27.5119913 ], [ 84.1302683, 27.5120385 ], [ 84.1333649, 27.5146716 ], [ 84.134131, 27.5146338 ], [ 84.1353441, 27.5150302 ], [ 84.135972, 27.5157191 ], [ 84.1369513, 27.5158871 ], [ 84.1378618, 27.5173419 ], [ 84.1389302, 27.517769 ], [ 84.1393516, 27.5173419 ], [ 84.1397128, 27.5173152 ], [ 84.1403298, 27.5177957 ], [ 84.1419551, 27.517809 ], [ 84.1426925, 27.5170616 ], [ 84.1440017, 27.5171817 ], [ 84.1455518, 27.5187032 ], [ 84.1494344, 27.516461 ], [ 84.150864, 27.5165811 ], [ 84.1509055, 27.5142474 ], [ 84.1504842, 27.5138336 ], [ 84.1504992, 27.5130995 ], [ 84.150138, 27.5127792 ], [ 84.1500628, 27.5122587 ], [ 84.1505443, 27.5117515 ], [ 84.1504089, 27.5098428 ], [ 84.1493254, 27.5092289 ], [ 84.149205, 27.508121 ], [ 84.1497016, 27.5076005 ], [ 84.1496866, 27.5068797 ], [ 84.1488589, 27.5059453 ], [ 84.1492652, 27.504437 ], [ 84.1486322, 27.5029103 ], [ 84.1486641, 27.5023156 ], [ 84.1495048, 27.5017682 ], [ 84.1497602, 27.500947 ], [ 84.145055, 27.4974579 ], [ 84.1446932, 27.4966462 ], [ 84.1456935, 27.4952397 ], [ 84.1458638, 27.4942203 ], [ 84.1456616, 27.4935784 ], [ 84.1470449, 27.4913601 ], [ 84.1474812, 27.4904067 ], [ 84.1489996, 27.4889144 ], [ 84.1491166, 27.4875834 ], [ 84.1486378, 27.4871209 ], [ 84.1489145, 27.4862902 ], [ 84.1520962, 27.4863846 ], [ 84.1539903, 27.4845437 ], [ 84.1560653, 27.4846193 ], [ 84.1567357, 27.4842794 ], [ 84.1577998, 27.4842605 ], [ 84.1593641, 27.4848741 ], [ 84.1622585, 27.4846004 ], [ 84.1641846, 27.4840812 ], [ 84.1669921, 27.4819237 ], [ 84.1672901, 27.4803188 ], [ 84.1680243, 27.4796674 ], [ 84.1700249, 27.4796202 ], [ 84.1713869, 27.4787989 ], [ 84.1713231, 27.4762876 ], [ 84.173164, 27.4761649 ], [ 84.1759946, 27.474305 ], [ 84.177612, 27.4741256 ], [ 84.1780909, 27.474541 ], [ 84.1786229, 27.4745316 ], [ 84.1796126, 27.4749376 ], [ 84.1811981, 27.473984 ], [ 84.1823593, 27.4741099 ], [ 84.1839093, 27.4724543 ], [ 84.1845263, 27.4724276 ], [ 84.1852788, 27.4728415 ], [ 84.1863472, 27.4728415 ], [ 84.1880628, 27.4725344 ], [ 84.1889657, 27.4718801 ], [ 84.1895075, 27.4709054 ], [ 84.1908017, 27.4695302 ], [ 84.1913886, 27.4696103 ], [ 84.1923644, 27.4707938 ], [ 84.1932795, 27.4726443 ], [ 84.1941521, 27.4732108 ], [ 84.1948332, 27.4729275 ], [ 84.1953439, 27.4722478 ], [ 84.1960362, 27.4726138 ], [ 84.1988654, 27.4722666 ], [ 84.2026878, 27.470878 ], [ 84.2045238, 27.4704241 ], [ 84.2057578, 27.4695695 ], [ 84.2071122, 27.4679405 ], [ 84.2072326, 27.466899 ], [ 84.2087977, 27.465911 ], [ 84.2087977, 27.4651365 ], [ 84.2059685, 27.462733 ], [ 84.2041325, 27.4592077 ], [ 84.207691, 27.4568717 ], [ 84.2076458, 27.4559102 ], [ 84.2072245, 27.4554294 ], [ 84.2072846, 27.4544546 ], [ 84.2077813, 27.4541475 ], [ 84.2081575, 27.4534664 ], [ 84.2075706, 27.452999 ], [ 84.2075555, 27.4494601 ], [ 84.2072696, 27.4482982 ], [ 84.2063065, 27.4468559 ], [ 84.2063065, 27.4458676 ], [ 84.2076007, 27.4441982 ], [ 84.2075405, 27.44329 ], [ 84.2078114, 27.442836 ], [ 84.2091056, 27.4426623 ], [ 84.209542, 27.4421148 ], [ 84.2106255, 27.4421815 ], [ 84.213846, 27.4419278 ], [ 84.2156217, 27.4423017 ], [ 84.2162387, 27.4418877 ], [ 84.2170062, 27.4419144 ], [ 84.2183907, 27.440886 ], [ 84.2193087, 27.4409261 ], [ 84.2210544, 27.4428894 ], [ 84.2209039, 27.4460412 ], [ 84.2203922, 27.4472031 ], [ 84.2202418, 27.4480578 ], [ 84.221235, 27.4484318 ], [ 84.2233719, 27.4507688 ], [ 84.2249972, 27.4513965 ], [ 84.2264419, 27.45153 ], [ 84.2278866, 27.4526384 ], [ 84.228925, 27.4538003 ], [ 84.2296624, 27.4546549 ], [ 84.2299032, 27.4553627 ], [ 84.2309114, 27.4563909 ], [ 84.2318746, 27.4563642 ], [ 84.2336202, 27.4544279 ], [ 84.2394592, 27.4527853 ], [ 84.240618, 27.453827 ], [ 84.2421379, 27.4548152 ], [ 84.2442158, 27.4551946 ], [ 84.2451416, 27.4544392 ], [ 84.2457481, 27.4536082 ], [ 84.2464717, 27.4532116 ], [ 84.247206, 27.4533061 ], [ 84.2483233, 27.453731 ], [ 84.2508027, 27.4537593 ], [ 84.2511964, 27.453476 ], [ 84.2523669, 27.4534288 ], [ 84.2540802, 27.4528339 ], [ 84.2546654, 27.4522012 ], [ 84.25441, 27.4510114 ], [ 84.2546442, 27.4501615 ], [ 84.2562723, 27.4486317 ], [ 84.2591773, 27.4470059 ], [ 84.2597519, 27.445986 ], [ 84.2596029, 27.4446261 ], [ 84.2586665, 27.4429263 ], [ 84.2586027, 27.4397531 ], [ 84.2599647, 27.4375999 ], [ 84.2623271, 27.4355221 ], [ 84.2642851, 27.4355032 ], [ 84.2663067, 27.4345815 ], [ 84.2676902, 27.432651 ], [ 84.2692864, 27.4311587 ], [ 84.270308, 27.4308376 ], [ 84.2726703, 27.4292509 ], [ 84.2726703, 27.4267007 ], [ 84.2723085, 27.4261151 ], [ 84.2728619, 27.4253217 ], [ 84.2732024, 27.4225826 ], [ 84.2742452, 27.4208257 ], [ 84.2753306, 27.41956 ], [ 84.2776078, 27.4171607 ], [ 84.2784591, 27.4149126 ], [ 84.2782463, 27.4121354 ], [ 84.2776717, 27.4103783 ], [ 84.2781612, 27.4087346 ], [ 84.2789486, 27.4075255 ], [ 84.278076, 27.4046536 ], [ 84.2766927, 27.4029909 ], [ 84.2751816, 27.4015549 ], [ 84.2751178, 27.4006102 ], [ 84.2756711, 27.4002512 ], [ 84.2757988, 27.3987396 ], [ 84.2762245, 27.3981161 ], [ 84.276267, 27.3966989 ], [ 84.2766501, 27.3960754 ], [ 84.2774589, 27.3960943 ], [ 84.2779909, 27.3965667 ], [ 84.2800766, 27.3969257 ], [ 84.2810499, 27.3974352 ], [ 84.2829461, 27.3968607 ], [ 84.2830665, 27.3961659 ], [ 84.2846466, 27.3936807 ], [ 84.2848422, 27.392545 ], [ 84.2877015, 27.3899795 ], [ 84.289989, 27.3870532 ], [ 84.2922162, 27.3856368 ], [ 84.2939619, 27.3849153 ], [ 84.2957076, 27.3860243 ], [ 84.2960687, 27.3871601 ], [ 84.2968964, 27.3879752 ], [ 84.2969115, 27.3887903 ], [ 84.2972576, 27.3890175 ], [ 84.2974382, 27.3897123 ], [ 84.2989431, 27.3898994 ], [ 84.2992892, 27.3905674 ], [ 84.3002523, 27.3911153 ], [ 84.3027956, 27.3898325 ], [ 84.3057452, 27.3882558 ], [ 84.3080176, 27.3880554 ], [ 84.3105458, 27.3871201 ], [ 84.3127279, 27.386345 ], [ 84.3150003, 27.384314 ], [ 84.3158881, 27.384167 ], [ 84.3169115, 27.3830311 ], [ 84.3197858, 27.3821492 ], [ 84.3220431, 27.3820289 ], [ 84.3239393, 27.3813207 ], [ 84.327235, 27.3812272 ], [ 84.3289957, 27.3805189 ], [ 84.3310725, 27.3795301 ], [ 84.3324269, 27.3782873 ], [ 84.3370921, 27.3784209 ], [ 84.3385368, 27.378314 ], [ 84.3412606, 27.3769509 ], [ 84.3470432, 27.3755501 ], [ 84.347614, 27.3755719 ], [ 84.3505122, 27.3756824 ], [ 84.3534279, 27.3749832 ], [ 84.3560882, 27.3756635 ], [ 84.3600041, 27.3745674 ], [ 84.3623522, 27.375591 ], [ 84.3634207, 27.3753504 ], [ 84.3643086, 27.3745753 ], [ 84.3668067, 27.3745085 ], [ 84.3677398, 27.3749896 ], [ 84.3696811, 27.3754841 ], [ 84.3720889, 27.3766467 ], [ 84.377356, 27.3763661 ], [ 84.3804109, 27.3755509 ], [ 84.383511, 27.3745753 ], [ 84.3849106, 27.3738671 ], [ 84.3864004, 27.373827 ], [ 84.3877699, 27.3729583 ], [ 84.3894403, 27.3716754 ], [ 84.3912311, 27.3691362 ], [ 84.3924802, 27.3692565 ], [ 84.3953696, 27.3711007 ], [ 84.3966638, 27.3715417 ], [ 84.3979881, 27.3705929 ], [ 84.3989361, 27.3704459 ], [ 84.3994478, 27.3709003 ], [ 84.4012988, 27.3712611 ], [ 84.4021566, 27.3709003 ], [ 84.4038571, 27.3709136 ], [ 84.4058586, 27.3717021 ], [ 84.4072431, 27.3706597 ], [ 84.4103733, 27.3694836 ], [ 84.412435, 27.3706998 ], [ 84.4130671, 27.3717422 ], [ 84.415821, 27.3718758 ], [ 84.4172808, 27.3707533 ], [ 84.4202604, 27.3707399 ], [ 84.4209376, 27.3714749 ], [ 84.4234207, 27.3730652 ], [ 84.4251513, 27.3728514 ], [ 84.4276495, 27.3720897 ], [ 84.4307796, 27.3722233 ], [ 84.4316374, 27.3714749 ], [ 84.4326307, 27.3714749 ], [ 84.4339249, 27.3707132 ], [ 84.4361069, 27.3704325 ], [ 84.4371303, 27.3708067 ], [ 84.4393274, 27.3707265 ], [ 84.440125, 27.3711542 ], [ 84.4409828, 27.3711943 ], [ 84.4424726, 27.3705795 ], [ 84.4437668, 27.3694436 ], [ 84.4440076, 27.3680804 ], [ 84.4449858, 27.3657416 ], [ 84.4460543, 27.3650733 ], [ 84.4481461, 27.3642313 ], [ 84.4510204, 27.3642714 ], [ 84.4526156, 27.3637368 ], [ 84.4550836, 27.3638037 ], [ 84.4574463, 27.3633492 ], [ 84.4586954, 27.3618657 ], [ 84.4608624, 27.3612776 ], [ 84.4618105, 27.3604624 ], [ 84.4635712, 27.3609301 ], [ 84.4643237, 27.3609702 ], [ 84.4649106, 27.3605292 ], [ 84.4660242, 27.3580699 ], [ 84.4691694, 27.3563324 ], [ 84.4698767, 27.3561319 ], [ 84.4720738, 27.3567333 ], [ 84.4729166, 27.3577358 ], [ 84.4728173, 27.3591846 ], [ 84.4736149, 27.3598395 ], [ 84.4756013, 27.3629537 ], [ 84.4772717, 27.3630339 ], [ 84.4787164, 27.361978 ], [ 84.4813349, 27.3614568 ], [ 84.4862269, 27.3589062 ], [ 84.4901694, 27.3577544 ], [ 84.4930856, 27.3576775 ], [ 84.4965793, 27.3566517 ], [ 84.5020377, 27.3559389 ], [ 84.5040863, 27.3545753 ], [ 84.5106982, 27.354524 ], [ 84.5132102, 27.3531136 ], [ 84.5163559, 27.353211 ], [ 84.5180306, 27.353211 ], [ 84.5201561, 27.3533964 ], [ 84.5227806, 27.3523986 ], [ 84.5256391, 27.3523217 ], [ 84.5273137, 27.3512189 ], [ 84.5312693, 27.3513472 ], [ 84.5338539, 27.3503701 ], [ 84.538387, 27.3508573 ], [ 84.5415919, 27.3498059 ], [ 84.5451136, 27.3498515 ], [ 84.5475967, 27.3490052 ], [ 84.5510326, 27.349236 ], [ 84.5549579, 27.3491398 ], [ 84.5619466, 27.34771 ], [ 84.5652381, 27.3480434 ], [ 84.5670572, 27.3470176 ], [ 84.571749, 27.3456327 ], [ 84.5782744, 27.3443632 ], [ 84.5807863, 27.3431834 ], [ 84.5840779, 27.3429782 ], [ 84.5866476, 27.341542 ], [ 84.5885243, 27.3413111 ], [ 84.5901846, 27.3411957 ], [ 84.5919458, 27.3405289 ], [ 84.5935627, 27.3406828 ], [ 84.5950641, 27.3401185 ], [ 84.5974028, 27.339721 ], [ 84.5986155, 27.3390285 ], [ 84.6001747, 27.3388746 ], [ 84.6022202, 27.3387665 ], [ 84.6041303, 27.3377717 ], [ 84.6061779, 27.3369431 ], [ 84.6067291, 27.336526 ], [ 84.6077091, 27.3365441 ], [ 84.6086891, 27.3374691 ], [ 84.6104679, 27.337222 ], [ 84.6122122, 27.3368696 ], [ 84.6138622, 27.3375738 ], [ 84.6166719, 27.3382671 ], [ 84.6174957, 27.3378931 ], [ 84.6186503, 27.3375099 ], [ 84.6195475, 27.3375264 ], [ 84.6221253, 27.3364549 ], [ 84.6226899, 27.3359209 ], [ 84.6353486, 27.3184336 ], [ 84.63687, 27.3162654 ], [ 84.6371361, 27.3158861 ], [ 84.6391993, 27.3124895 ], [ 84.6474792, 27.2988701 ], [ 84.6487838, 27.2965928 ], [ 84.655046, 27.2856605 ], [ 84.6784689, 27.2430328 ], [ 84.6798956, 27.2398106 ], [ 84.6805412, 27.2380015 ], [ 84.6811478, 27.2374796 ], [ 84.6820282, 27.2367142 ], [ 84.6820673, 27.2359488 ], [ 84.6825956, 27.2354269 ], [ 84.6833977, 27.2322608 ], [ 84.6845521, 27.2314084 ], [ 84.6848651, 27.2302776 ], [ 84.6852173, 27.229547 ], [ 84.6853542, 27.2288511 ], [ 84.684689, 27.2277899 ], [ 84.684689, 27.2271636 ], [ 84.6858238, 27.2262241 ], [ 84.6860977, 27.2252673 ], [ 84.6866455, 27.2243452 ], [ 84.687477, 27.224208 ], [ 84.6883136, 27.22407 ], [ 84.6893337, 27.2229126 ], [ 84.6892985, 27.2217865 ], [ 84.6889467, 27.2213173 ], [ 84.6890672, 27.2194155 ], [ 84.6894081, 27.2189825 ], [ 84.6895299, 27.2173368 ], [ 84.6900169, 27.2171311 ], [ 84.6900656, 27.2162216 ], [ 84.6905891, 27.2157777 ], [ 84.6908813, 27.2149332 ], [ 84.6894446, 27.2149765 ], [ 84.6882013, 27.2153276 ], [ 84.687349, 27.215297 ], [ 84.6872457, 27.2147381 ], [ 84.6869874, 27.2145084 ], [ 84.6868376, 27.2138838 ], [ 84.6861231, 27.2132867 ], [ 84.6856668, 27.2130493 ], [ 84.6852708, 27.2130876 ], [ 84.6849695, 27.2135163 ], [ 84.6844067, 27.2130586 ], [ 84.6844919, 27.212279 ], [ 84.6850515, 27.2120417 ], [ 84.6858608, 27.2107478 ], [ 84.6867389, 27.2106483 ], [ 84.6870932, 27.2094918 ], [ 84.6867097, 27.2089558 ], [ 84.685836, 27.2089794 ], [ 84.6856466, 27.2087459 ], [ 84.6856466, 27.2081755 ], [ 84.6859393, 27.2078195 ], [ 84.6853539, 27.207295 ], [ 84.6853754, 27.2070577 ], [ 84.6856036, 27.2068012 ], [ 84.6858333, 27.2062533 ], [ 84.6855, 27.2059736 ], [ 84.6847696, 27.2057895 ], [ 84.6841608, 27.2057732 ], [ 84.6840423, 27.2056932 ], [ 84.6838097, 27.2047883 ], [ 84.6831542, 27.2033361 ], [ 84.6824987, 27.2025623 ], [ 84.6818313, 27.2020959 ], [ 84.6811162, 27.2017037 ], [ 84.6807348, 27.2008663 ], [ 84.6809494, 27.2000925 ], [ 84.6816645, 27.1994352 ], [ 84.6829975, 27.1985017 ], [ 84.6835832, 27.1973864 ], [ 84.6836987, 27.196682 ], [ 84.6835997, 27.1958821 ], [ 84.68308, 27.1944146 ], [ 84.6825602, 27.192991 ], [ 84.6827604, 27.191 ], [ 84.6826614, 27.1902442 ], [ 84.6824551, 27.1898479 ], [ 84.6820986, 27.1892046 ], [ 84.6817481, 27.1884742 ], [ 84.68176, 27.1880607 ], [ 84.6814739, 27.1875306 ], [ 84.6796076, 27.1865709 ], [ 84.6796195, 27.1855214 ], [ 84.6803108, 27.1855744 ], [ 84.6806921, 27.1858606 ], [ 84.6810974, 27.1862635 ], [ 84.6812761, 27.1862741 ], [ 84.6815264, 27.1860196 ], [ 84.6814907, 27.1852987 ], [ 84.6813, 27.1850549 ], [ 84.6812285, 27.1839311 ], [ 84.6815398, 27.1836039 ], [ 84.6835302, 27.1844573 ], [ 84.6837745, 27.1839007 ], [ 84.68443, 27.1832752 ], [ 84.6844062, 27.1827928 ], [ 84.683709, 27.1827186 ], [ 84.6833455, 27.182284 ], [ 84.6837619, 27.1818254 ], [ 84.6844247, 27.1816559 ], [ 84.6850444, 27.1814439 ], [ 84.6855092, 27.1804261 ], [ 84.6850682, 27.180002 ], [ 84.6841625, 27.1800762 ], [ 84.6837692, 27.1804579 ], [ 84.6816239, 27.1802034 ], [ 84.6813498, 27.1795461 ], [ 84.6821602, 27.1787403 ], [ 84.6829945, 27.1786025 ], [ 84.68365, 27.1782526 ], [ 84.6835546, 27.1776059 ], [ 84.6829945, 27.1775953 ], [ 84.6822436, 27.1770439 ], [ 84.6803367, 27.1750189 ], [ 84.6760819, 27.1721773 ], [ 84.6754145, 27.1713609 ], [ 84.6753907, 27.1708626 ], [ 84.6756529, 27.1702158 ], [ 84.6766182, 27.1700355 ], [ 84.6773572, 27.1701203 ], [ 84.6781914, 27.1703324 ], [ 84.6797986, 27.170365 ], [ 84.6803785, 27.1699441 ], [ 84.6805885, 27.1679483 ], [ 84.6804069, 27.1672442 ], [ 84.6796639, 27.1668131 ], [ 84.6782472, 27.1668539 ], [ 84.6776415, 27.1664803 ], [ 84.6773912, 27.1642098 ], [ 84.6768339, 27.1632757 ], [ 84.6769069, 27.1625865 ], [ 84.6773295, 27.1620124 ], [ 84.6784773, 27.1614586 ], [ 84.6787229, 27.1615246 ], [ 84.6796776, 27.1604111 ], [ 84.6807325, 27.159767 ], [ 84.681314, 27.159731 ], [ 84.6816047, 27.1592137 ], [ 84.6821458, 27.1591778 ], [ 84.6832684, 27.1606292 ], [ 84.6842779, 27.1606867 ], [ 84.6864988, 27.1589478 ], [ 84.6864953, 27.1581013 ], [ 84.6859946, 27.1574258 ], [ 84.6853404, 27.1572246 ], [ 84.684767, 27.1564055 ], [ 84.6847509, 27.1557947 ], [ 84.6822796, 27.1537036 ], [ 84.6829257, 27.152791 ], [ 84.6824126, 27.1523476 ], [ 84.6806763, 27.1523835 ], [ 84.6807651, 27.1511403 ], [ 84.6811608, 27.150896 ], [ 84.6814354, 27.1508816 ], [ 84.6820654, 27.1503714 ], [ 84.6822834, 27.1500912 ], [ 84.6825661, 27.1500337 ], [ 84.6830264, 27.1504074 ], [ 84.683509, 27.1501348 ], [ 84.6831279, 27.1448457 ], [ 84.6836757, 27.1440299 ], [ 84.6837987, 27.1429347 ], [ 84.6830376, 27.1415232 ], [ 84.6827412, 27.140828 ], [ 84.6814996, 27.1396108 ], [ 84.6813283, 27.1388782 ], [ 84.6809532, 27.1380381 ], [ 84.6805223, 27.1372431 ], [ 84.6802772, 27.1366099 ], [ 84.6800182, 27.1361446 ], [ 84.6794843, 27.1356063 ], [ 84.6791048, 27.1354234 ], [ 84.6785926, 27.1353534 ], [ 84.6784496, 27.1351033 ], [ 84.6783792, 27.1349636 ], [ 84.6780522, 27.1346184 ], [ 84.6776861, 27.1343622 ], [ 84.6774513, 27.1339766 ], [ 84.6773451, 27.133596 ], [ 84.6773507, 27.1332677 ], [ 84.6773793, 27.132946 ], [ 84.6774519, 27.1327121 ], [ 84.6776392, 27.1325728 ], [ 84.6778684, 27.1325455 ], [ 84.6781172, 27.1326052 ], [ 84.6782234, 27.1326898 ], [ 84.6783659, 27.1329062 ], [ 84.6785029, 27.1330256 ], [ 84.6785979, 27.1330878 ], [ 84.6787293, 27.1331176 ], [ 84.6789976, 27.1331002 ], [ 84.6792101, 27.1329485 ], [ 84.679252, 27.1328639 ], [ 84.6792716, 27.1326176 ], [ 84.6791989, 27.1324186 ], [ 84.6790228, 27.1321823 ], [ 84.678707, 27.1320156 ], [ 84.6785169, 27.1318813 ], [ 84.6784079, 27.1316724 ], [ 84.6783299, 27.1310753 ], [ 84.6780405, 27.1303861 ], [ 84.6778741, 27.1295561 ], [ 84.6778659, 27.1290818 ], [ 84.6779644, 27.1285144 ], [ 84.6780793, 27.1283123 ], [ 84.6783283, 27.1281419 ], [ 84.6787935, 27.1279008 ], [ 84.6788537, 27.1277668 ], [ 84.6788729, 27.1275428 ], [ 84.6788482, 27.1272822 ], [ 84.6787333, 27.1271142 ], [ 84.6785609, 27.1270631 ], [ 84.6783612, 27.1270704 ], [ 84.6781286, 27.1271142 ], [ 84.6778851, 27.1270898 ], [ 84.6777756, 27.1270631 ], [ 84.6776662, 27.1269194 ], [ 84.6776333, 27.126766 ], [ 84.6776881, 27.1266345 ], [ 84.6778221, 27.126576 ], [ 84.6781642, 27.1264908 ], [ 84.6783776, 27.1263739 ], [ 84.6784515, 27.1262521 ], [ 84.6784542, 27.1261036 ], [ 84.6783694, 27.1260378 ], [ 84.6780657, 27.1260086 ], [ 84.6777647, 27.125899 ], [ 84.6773941, 27.1256647 ], [ 84.6772436, 27.1254918 ], [ 84.6771971, 27.1253579 ], [ 84.6772107, 27.1251704 ], [ 84.6772792, 27.1250632 ], [ 84.6773585, 27.1250121 ], [ 84.6776677, 27.1249268 ], [ 84.6777635, 27.124866 ], [ 84.6777936, 27.1247515 ], [ 84.6777306, 27.1246151 ], [ 84.6774105, 27.1244934 ], [ 84.6764282, 27.1242036 ], [ 84.675911, 27.123982 ], [ 84.6756018, 27.1238431 ], [ 84.675424, 27.1234681 ], [ 84.675319, 27.1230842 ], [ 84.6753464, 27.1226531 ], [ 84.6755434, 27.1221368 ], [ 84.675516, 27.1217033 ], [ 84.675412, 27.1212065 ], [ 84.6754038, 27.1208193 ], [ 84.6754859, 27.1206659 ], [ 84.6759264, 27.1205514 ], [ 84.6761891, 27.1204759 ], [ 84.6762575, 27.1203858 ], [ 84.6762329, 27.1201544 ], [ 84.6761618, 27.1199133 ], [ 84.6761481, 27.1197599 ], [ 84.6761973, 27.1196357 ], [ 84.6762876, 27.1195772 ], [ 84.6768185, 27.1194332 ], [ 84.6768841, 27.1193107 ], [ 84.6767564, 27.1190592 ], [ 84.6766945, 27.1186735 ], [ 84.676831, 27.1176672 ], [ 84.6769049, 27.1169633 ], [ 84.6769104, 27.116391 ], [ 84.676883, 27.1156993 ], [ 84.6767284, 27.1151731 ], [ 84.6763118, 27.1147753 ], [ 84.6756265, 27.1144609 ], [ 84.6747104, 27.1141175 ], [ 84.6734676, 27.1139726 ], [ 84.6725109, 27.1139419 ], [ 84.6719486, 27.1138074 ], [ 84.6711804, 27.1134556 ], [ 84.6711586, 27.1119955 ], [ 84.6701774, 27.1112648 ], [ 84.6698613, 27.1107975 ], [ 84.6693204, 27.1103507 ], [ 84.6689292, 27.1096253 ], [ 84.6688274, 27.109239 ], [ 84.6688783, 27.1090125 ], [ 84.669039, 27.1086906 ], [ 84.6694393, 27.1081446 ], [ 84.6694847, 27.1076827 ], [ 84.669712, 27.1072544 ], [ 84.6698332, 27.1070218 ], [ 84.6704416, 27.1071341 ], [ 84.6718325, 27.1081419 ], [ 84.6722932, 27.1087332 ], [ 84.6727968, 27.1092005 ], [ 84.6734289, 27.1093913 ], [ 84.6737825, 27.109315 ], [ 84.6740341, 27.1089812 ], [ 84.6740448, 27.1083613 ], [ 84.6735198, 27.1077509 ], [ 84.6732091, 27.1071786 ], [ 84.6727753, 27.1063489 ], [ 84.6727539, 27.1057766 ], [ 84.6731396, 27.1053475 ], [ 84.6736333, 27.10503 ], [ 84.6749705, 27.1036345 ], [ 84.6751322, 27.1007773 ], [ 84.6745066, 27.1002207 ], [ 84.6743287, 27.0998484 ], [ 84.6742448, 27.0994002 ], [ 84.6745175, 27.09898 ], [ 84.6744126, 27.0973647 ], [ 84.6745018, 27.0965617 ], [ 84.6743549, 27.0961416 ], [ 84.6740403, 27.0959735 ], [ 84.6736732, 27.0959642 ], [ 84.6734005, 27.0960949 ], [ 84.6732642, 27.0961883 ], [ 84.6731173, 27.096375 ], [ 84.6724321, 27.0965647 ], [ 84.6719811, 27.0968425 ], [ 84.6705075, 27.0980936 ], [ 84.6700854, 27.0982454 ], [ 84.669755, 27.0983084 ], [ 84.6695483, 27.0982885 ], [ 84.669404, 27.0981578 ], [ 84.6693437, 27.0978567 ], [ 84.6694486, 27.0967572 ], [ 84.6693883, 27.0965471 ], [ 84.6691969, 27.0962017 ], [ 84.6691943, 27.0960126 ], [ 84.6691864, 27.0957652 ], [ 84.6690133, 27.0954127 ], [ 84.668777, 27.0951116 ], [ 84.668523, 27.0948178 ], [ 84.6682004, 27.0946082 ], [ 84.6679835, 27.0945537 ], [ 84.6676071, 27.0945487 ], [ 84.6670249, 27.0944282 ], [ 84.6668405, 27.0943599 ], [ 84.6667776, 27.0942805 ], [ 84.6667435, 27.0941265 ], [ 84.6667881, 27.0939911 ], [ 84.6670529, 27.093746 ], [ 84.6671473, 27.0936036 ], [ 84.6671683, 27.0934565 ], [ 84.6671158, 27.0933911 ], [ 84.6669874, 27.0933911 ], [ 84.6667645, 27.0934378 ], [ 84.6654613, 27.0939631 ], [ 84.6647887, 27.0943684 ], [ 84.664398, 27.0945831 ], [ 84.6643324, 27.0945925 ], [ 84.6641987, 27.0944804 ], [ 84.6641279, 27.0941419 ], [ 84.664076, 27.093877 ], [ 84.6639371, 27.0936692 ], [ 84.6637116, 27.093193 ], [ 84.6636242, 27.0927502 ], [ 84.6636399, 27.0925448 ], [ 84.6637317, 27.0924795 ], [ 84.6638418, 27.0924538 ], [ 84.664049, 27.0924584 ], [ 84.6644108, 27.0926242 ], [ 84.6648382, 27.0927689 ], [ 84.6657437, 27.0929461 ], [ 84.6661256, 27.0929692 ], [ 84.6668265, 27.0928768 ], [ 84.6669952, 27.0928075 ], [ 84.66701, 27.092698 ], [ 84.6670601, 27.0925445 ], [ 84.6671305, 27.0924636 ], [ 84.6672696, 27.0924421 ], [ 84.6673975, 27.0924999 ], [ 84.6676367, 27.0926534 ], [ 84.667861, 27.0927327 ], [ 84.667976, 27.0927277 ], [ 84.6681225, 27.0926518 ], [ 84.6682189, 27.0925593 ], [ 84.6682263, 27.092419 ], [ 84.6681744, 27.0922012 ], [ 84.6682356, 27.0920097 ], [ 84.6683969, 27.0918529 ], [ 84.6686453, 27.0916977 ], [ 84.6688085, 27.0916482 ], [ 84.6689476, 27.0916762 ], [ 84.6690069, 27.091701 ], [ 84.6690199, 27.0917753 ], [ 84.6689642, 27.0918512 ], [ 84.6689438, 27.0919684 ], [ 84.6689828, 27.0920427 ], [ 84.6690365, 27.0920774 ], [ 84.6691886, 27.0921038 ], [ 84.6694092, 27.0920311 ], [ 84.6700586, 27.0915511 ], [ 84.670271, 27.0913691 ], [ 84.6703365, 27.091236 ], [ 84.6703077, 27.091131 ], [ 84.6701242, 27.0910072 ], [ 84.669584, 27.0908088 ], [ 84.6693008, 27.0906477 ], [ 84.669112, 27.090419 ], [ 84.6689862, 27.0900921 ], [ 84.6688262, 27.0897957 ], [ 84.6687114, 27.0897162 ], [ 84.6685042, 27.0896906 ], [ 84.6682184, 27.0896906 ], [ 84.6679641, 27.0897559 ], [ 84.6676337, 27.0899707 ], [ 84.6673662, 27.0902041 ], [ 84.6670857, 27.0904563 ], [ 84.6667972, 27.0905753 ], [ 84.6666478, 27.0905776 ], [ 84.6665167, 27.0905403 ], [ 84.6663567, 27.0904002 ], [ 84.6663698, 27.0902065 ], [ 84.6664485, 27.0897956 ], [ 84.6663593, 27.089233 ], [ 84.6663121, 27.0887474 ], [ 84.66632, 27.0880821 ], [ 84.6661934, 27.0878253 ], [ 84.6661266, 27.087718 ], [ 84.6660191, 27.087685 ], [ 84.6659264, 27.0876751 ], [ 84.6657911, 27.0877214 ], [ 84.664775, 27.0884411 ], [ 84.6644114, 27.0887228 ], [ 84.6639739, 27.08919 ], [ 84.6636531, 27.0894178 ], [ 84.663336, 27.0894376 ], [ 84.663082, 27.0893864 ], [ 84.6629319, 27.0893105 ], [ 84.6627854, 27.0891124 ], [ 84.6627557, 27.0889523 ], [ 84.6627909, 27.0888103 ], [ 84.6629578, 27.0886387 ], [ 84.663082, 27.0884884 ], [ 84.663197, 27.0882821 ], [ 84.6632526, 27.088089 ], [ 84.6632786, 27.0878364 ], [ 84.6634157, 27.0875996 ], [ 84.6636994, 27.0873207 ], [ 84.6639794, 27.0870698 ], [ 84.6644448, 27.0868089 ], [ 84.6646339, 27.0866851 ], [ 84.6646821, 27.0865861 ], [ 84.6646969, 27.0864474 ], [ 84.6646654, 27.0864029 ], [ 84.6645949, 27.0863731 ], [ 84.6644874, 27.0863632 ], [ 84.6644095, 27.0863616 ], [ 84.6642723, 27.0863566 ], [ 84.6642056, 27.0863154 ], [ 84.6641462, 27.0862147 ], [ 84.6641055, 27.086076 ], [ 84.6640628, 27.0860248 ], [ 84.6639627, 27.0859819 ], [ 84.6637392, 27.085998 ], [ 84.6636212, 27.0860237 ], [ 84.6634587, 27.0861754 ], [ 84.6632882, 27.0863388 ], [ 84.6631204, 27.0863808 ], [ 84.6629342, 27.0864672 ], [ 84.662714, 27.0865349 ], [ 84.6625803, 27.0865302 ], [ 84.6623679, 27.0864252 ], [ 84.6621502, 27.0863295 ], [ 84.6619641, 27.0861404 ], [ 84.6617515, 27.0857385 ], [ 84.6616881, 27.0855784 ], [ 84.6616028, 27.0854877 ], [ 84.6614062, 27.0853407 ], [ 84.6609279, 27.0851674 ], [ 84.6603168, 27.0849699 ], [ 84.6600461, 27.0849138 ], [ 84.659794, 27.0849171 ], [ 84.6595603, 27.0849518 ], [ 84.6592952, 27.0849055 ], [ 84.6586073, 27.0846068 ], [ 84.6581092, 27.0841251 ], [ 84.6579991, 27.0838754 ], [ 84.6579912, 27.0834388 ], [ 84.6579545, 27.0831633 ], [ 84.6576477, 27.0828411 ], [ 84.6574327, 27.0827384 ], [ 84.6573121, 27.0827361 ], [ 84.6572387, 27.0827664 ], [ 84.6572151, 27.0828388 ], [ 84.6572203, 27.0829602 ], [ 84.6571862, 27.0830372 ], [ 84.657063, 27.0831096 ], [ 84.6567877, 27.0831026 ], [ 84.6565359, 27.0831166 ], [ 84.6563393, 27.0832263 ], [ 84.6559682, 27.0835728 ], [ 84.6555325, 27.0841582 ], [ 84.6552804, 27.0843232 ], [ 84.6551673, 27.0843364 ], [ 84.6549666, 27.0842486 ], [ 84.6547423, 27.084059 ], [ 84.6545272, 27.083846 ], [ 84.6542813, 27.0833629 ], [ 84.6541201, 27.0831341 ], [ 84.6538353, 27.0828721 ], [ 84.6537016, 27.082718 ], [ 84.6536859, 27.0825709 ], [ 84.6539009, 27.0820947 ], [ 84.6540582, 27.0819079 ], [ 84.6542365, 27.0818659 ], [ 84.654622, 27.0819616 ], [ 84.6549996, 27.0821997 ], [ 84.6551071, 27.0822348 ], [ 84.6552696, 27.0822394 ], [ 84.6555292, 27.082097 ], [ 84.6559435, 27.0817725 ], [ 84.6562083, 27.0814784 ], [ 84.6564469, 27.0813009 ], [ 84.6567144, 27.0812402 ], [ 84.6568875, 27.0812402 ], [ 84.6571549, 27.0812869 ], [ 84.65764, 27.0812916 ], [ 84.6580622, 27.0812449 ], [ 84.6582457, 27.0811562 ], [ 84.6585918, 27.0809134 ], [ 84.658736, 27.0807383 ], [ 84.6587859, 27.0805375 ], [ 84.6587806, 27.0803181 ], [ 84.6587203, 27.0801266 ], [ 84.6586416, 27.0800005 ], [ 84.6585001, 27.0798745 ], [ 84.6583585, 27.0797624 ], [ 84.6580753, 27.0796037 ], [ 84.6579127, 27.079564 ], [ 84.657661, 27.0795686 ], [ 84.6573988, 27.079655 ], [ 84.657189, 27.0796503 ], [ 84.6566361, 27.0794235 ], [ 84.6560989, 27.0792425 ], [ 84.6556705, 27.0792425 ], [ 84.655097, 27.0793976 ], [ 84.6544871, 27.0796271 ], [ 84.6538773, 27.0801798 ], [ 84.6533836, 27.0805806 ], [ 84.6530832, 27.0807017 ], [ 84.652806, 27.0807086 ], [ 84.652571, 27.0805959 ], [ 84.6523133, 27.0804505 ], [ 84.6522262, 27.0801887 ], [ 84.6522589, 27.079998 ], [ 84.6523569, 27.0798461 ], [ 84.6523787, 27.0796619 ], [ 84.6526691, 27.0793645 ], [ 84.6529849, 27.0791318 ], [ 84.6531603, 27.0788849 ], [ 84.6532347, 27.0786723 ], [ 84.6532245, 27.0784209 ], [ 84.6531758, 27.0779665 ], [ 84.6530433, 27.0776724 ], [ 84.6528727, 27.0775415 ], [ 84.6527275, 27.077535 ], [ 84.6526403, 27.0775835 ], [ 84.6525296, 27.0777532 ], [ 84.6524225, 27.0780085 ], [ 84.6522555, 27.0782687 ], [ 84.6520636, 27.0784625 ], [ 84.6518222, 27.0784625 ], [ 84.6514087, 27.0781025 ], [ 84.6511008, 27.0777839 ], [ 84.65101, 27.0775447 ], [ 84.6510499, 27.0773443 ], [ 84.6508612, 27.0771083 ], [ 84.6506361, 27.0770696 ], [ 84.6502949, 27.0771374 ], [ 84.6500263, 27.0772376 ], [ 84.6496705, 27.0772441 ], [ 84.6492095, 27.0770114 ], [ 84.6486904, 27.0765783 ], [ 84.6483354, 27.0748318 ], [ 84.6481155, 27.074887 ], [ 84.647964, 27.0750196 ], [ 84.6475302, 27.0753533 ], [ 84.6474829, 27.0755657 ], [ 84.6474752, 27.0757348 ], [ 84.647506, 27.0760616 ], [ 84.6474187, 27.0762399 ], [ 84.6472929, 27.0763587 ], [ 84.6471389, 27.0764182 ], [ 84.6470799, 27.0764067 ], [ 84.6470568, 27.0763176 ], [ 84.6471286, 27.0760433 ], [ 84.6470927, 27.0758834 ], [ 84.6469592, 27.0758056 ], [ 84.6468258, 27.0757874 ], [ 84.6464715, 27.0758674 ], [ 84.6462873, 27.0758729 ], [ 84.6461974, 27.0757952 ], [ 84.6461641, 27.0755598 ], [ 84.6461852, 27.0749941 ], [ 84.6462723, 27.0745513 ], [ 84.6464516, 27.0742165 ], [ 84.646662, 27.0728474 ], [ 84.6468109, 27.0724223 ], [ 84.6471035, 27.0719401 ], [ 84.6473166, 27.0714327 ], [ 84.647373, 27.0711561 ], [ 84.647314, 27.0710167 ], [ 84.6471112, 27.070907 ], [ 84.6466877, 27.0708773 ], [ 84.6464541, 27.0708635 ], [ 84.6462539, 27.0707675 ], [ 84.6457166, 27.070063 ], [ 84.6455959, 27.0697019 ], [ 84.6456704, 27.0687922 ], [ 84.6455754, 27.0684539 ], [ 84.6452956, 27.0683054 ], [ 84.6449927, 27.0678642 ], [ 84.6448541, 27.0675831 ], [ 84.6448336, 27.0671762 ], [ 84.6447771, 27.0669339 ], [ 84.644582, 27.0666277 ], [ 84.6443356, 27.0664059 ], [ 84.6431112, 27.0660197 ], [ 84.6433987, 27.0652494 ], [ 84.6437786, 27.0650757 ], [ 84.6439121, 27.0649614 ], [ 84.6441945, 27.0645728 ], [ 84.6444845, 27.0643259 ], [ 84.6449825, 27.0641316 ], [ 84.6452494, 27.0639808 ], [ 84.645311, 27.0638573 ], [ 84.6452879, 27.0637065 ], [ 84.6448901, 27.063439 ], [ 84.64431, 27.0631328 ], [ 84.644025, 27.0628082 ], [ 84.6439557, 27.0625682 ], [ 84.6439968, 27.0623487 ], [ 84.6442253, 27.0621567 ], [ 84.644464, 27.0618824 ], [ 84.6444819, 27.0617567 ], [ 84.644428, 27.0616378 ], [ 84.6442715, 27.061535 ], [ 84.6440019, 27.0613727 ], [ 84.6431421, 27.0604652 ], [ 84.6428674, 27.0601612 ], [ 84.6427596, 27.0597795 ], [ 84.6427801, 27.0595623 ], [ 84.6429316, 27.0593566 ], [ 84.6432884, 27.0591257 ], [ 84.6435989, 27.0589474 ], [ 84.6439763, 27.0585634 ], [ 84.6442843, 27.0584834 ], [ 84.644618, 27.0585885 ], [ 84.6452674, 27.0588468 ], [ 84.6454034, 27.0588514 ], [ 84.6455292, 27.058792 ], [ 84.6456601, 27.0586297 ], [ 84.6457038, 27.0584605 ], [ 84.6456242, 27.0582365 ], [ 84.6451467, 27.0577702 ], [ 84.644677, 27.0572901 ], [ 84.6444101, 27.0568147 ], [ 84.644369, 27.0563392 ], [ 84.6444768, 27.05601 ], [ 84.6451134, 27.0554797 ], [ 84.6454471, 27.0551597 ], [ 84.6452528, 27.0544841 ], [ 84.6451749, 27.0541551 ], [ 84.6454513, 27.0536606 ], [ 84.646195, 27.0525059 ], [ 84.6463006, 27.0520851 ], [ 84.6462302, 27.0515883 ], [ 84.6461329, 27.0512171 ], [ 84.6459143, 27.0511433 ], [ 84.6454545, 27.0512216 ], [ 84.6448741, 27.0513872 ], [ 84.6437308, 27.0511858 ], [ 84.6431654, 27.0509217 ], [ 84.6430624, 27.050604 ], [ 84.6431302, 27.0501295 ], [ 84.6434343, 27.0497357 ], [ 84.6442157, 27.0492948 ], [ 84.6444394, 27.0489569 ], [ 84.6444394, 27.0487756 ], [ 84.6442961, 27.048666 ], [ 84.6426503, 27.0486704 ], [ 84.6425545, 27.0480331 ], [ 84.6427204, 27.0470261 ], [ 84.6430043, 27.0467978 ], [ 84.6432983, 27.0461682 ], [ 84.6441476, 27.0459308 ], [ 84.6462157, 27.0450129 ], [ 84.6497018, 27.0437026 ], [ 84.6524569, 27.0427006 ], [ 84.6582061, 27.0405155 ], [ 84.6592104, 27.0401388 ], [ 84.6650534, 27.0379474 ], [ 84.6723808, 27.0351051 ], [ 84.6758828, 27.0338255 ], [ 84.677614, 27.033193 ], [ 84.6800711, 27.0321902 ], [ 84.6826967, 27.0314024 ], [ 84.6857131, 27.0306613 ], [ 84.6893149, 27.0298721 ], [ 84.6932948, 27.0289825 ], [ 84.6991303, 27.0276273 ], [ 84.7001057, 27.0274539 ], [ 84.7004188, 27.0271 ], [ 84.7008113, 27.0268039 ], [ 84.7012086, 27.0266495 ], [ 84.7014734, 27.0266517 ], [ 84.7021443, 27.0267033 ], [ 84.7025416, 27.0266862 ], [ 84.7030689, 27.0264674 ], [ 84.7035433, 27.0259247 ], [ 84.7038955, 27.0253351 ], [ 84.7057121, 27.0240907 ], [ 84.7070437, 27.0231362 ], [ 84.7083948, 27.0222146 ], [ 84.7095024, 27.0214274 ], [ 84.7098973, 27.0214531 ], [ 84.710483, 27.0216504 ], [ 84.7110224, 27.0213458 ], [ 84.7116172, 27.0212235 ], [ 84.7117833, 27.0212235 ], [ 84.7119759, 27.0216825 ], [ 84.7128895, 27.0218685 ], [ 84.7131789, 27.0218382 ], [ 84.7142414, 27.0212648 ], [ 84.7146953, 27.0207444 ], [ 84.7143615, 27.0197828 ], [ 84.714543, 27.0195893 ], [ 84.7148271, 27.019651 ], [ 84.7154301, 27.0199328 ], [ 84.716472, 27.0198103 ], [ 84.716677, 27.0192601 ], [ 84.7171461, 27.0188779 ], [ 84.7171791, 27.01867 ], [ 84.7169033, 27.0181115 ], [ 84.717106, 27.0173723 ], [ 84.7172663, 27.0172694 ], [ 84.7174196, 27.0172841 ], [ 84.7175044, 27.0173954 ], [ 84.7175374, 27.0175424 ], [ 84.7176953, 27.0176495 ], [ 84.7178344, 27.0176642 ], [ 84.7180277, 27.0176096 ], [ 84.7181833, 27.0175487 ], [ 84.7183577, 27.0175508 ], [ 84.7186005, 27.0176621 ], [ 84.7187772, 27.0175566 ], [ 84.7188574, 27.0175088 ], [ 84.7190955, 27.0172526 ], [ 84.7190778, 27.0161306 ], [ 84.7191068, 27.0158907 ], [ 84.7191355, 27.0156531 ], [ 84.7193146, 27.0153654 ], [ 84.7196965, 27.0151428 ], [ 84.7207266, 27.0146199 ], [ 84.721264, 27.0141453 ], [ 84.7219901, 27.0140697 ], [ 84.7231645, 27.0136656 ], [ 84.7247413, 27.0136953 ], [ 84.725808, 27.0138646 ], [ 84.7264281, 27.0138527 ], [ 84.7278151, 27.0135091 ], [ 84.7285788, 27.0147733 ], [ 84.7292059, 27.0149707 ], [ 84.7297716, 27.0149329 ], [ 84.7307333, 27.0142567 ], [ 84.7314216, 27.0141055 ], [ 84.7319119, 27.0141391 ], [ 84.7322938, 27.0143491 ], [ 84.7329868, 27.0142441 ], [ 84.7333308, 27.0137292 ], [ 84.7372343, 27.0118098 ], [ 84.7377621, 27.01156 ], [ 84.7410954, 27.0099827 ], [ 84.7434223, 27.0089955 ], [ 84.7482216, 27.0068072 ], [ 84.7542812, 27.0039815 ], [ 84.755281, 27.0035344 ], [ 84.756684, 27.0028865 ], [ 84.7571066, 27.00309 ], [ 84.7578506, 27.0028691 ], [ 84.7580724, 27.0028806 ], [ 84.7580193, 27.0031068 ], [ 84.7580816, 27.0033782 ], [ 84.7582155, 27.0036208 ], [ 84.7585016, 27.0038593 ], [ 84.758887, 27.0040649 ], [ 84.7593431, 27.0043445 ], [ 84.7598184, 27.0048577 ], [ 84.7599881, 27.0049857 ], [ 84.7601447, 27.005134 ], [ 84.7602622, 27.0055061 ], [ 84.7603927, 27.0056253 ], [ 84.7605983, 27.0056689 ], [ 84.7608496, 27.0056718 ], [ 84.7610062, 27.0057358 ], [ 84.7610748, 27.0059277 ], [ 84.760954, 27.0063115 ], [ 84.7609671, 27.0065703 ], [ 84.7612184, 27.0069802 ], [ 84.7616785, 27.0075472 ], [ 84.7619037, 27.0078146 ], [ 84.7619787, 27.008181 ], [ 84.7620374, 27.0088875 ], [ 84.762181, 27.0090765 ], [ 84.7625563, 27.0093207 ], [ 84.7626738, 27.0094922 ], [ 84.7629577, 27.0097975 ], [ 84.7632645, 27.0099981 ], [ 84.7636593, 27.010222 ], [ 84.7638754, 27.0104862 ], [ 84.763833, 27.0113671 ], [ 84.7639799, 27.0117422 ], [ 84.7641855, 27.0119515 ], [ 84.7643095, 27.0123149 ], [ 84.7643682, 27.0129952 ], [ 84.7644335, 27.0131842 ], [ 84.7647272, 27.0133441 ], [ 84.7650307, 27.0133674 ], [ 84.7653342, 27.0134837 ], [ 84.7656344, 27.0137773 ], [ 84.765729, 27.0139285 ], [ 84.7658204, 27.0140448 ], [ 84.765964, 27.0141058 ], [ 84.7661402, 27.0141204 ], [ 84.7663131, 27.0140709 ], [ 84.7664633, 27.0139576 ], [ 84.7665905, 27.0139401 ], [ 84.7667733, 27.0140361 ], [ 84.7670507, 27.0144285 ], [ 84.7672693, 27.014728 ], [ 84.7675108, 27.0148414 ], [ 84.7677621, 27.014885 ], [ 84.7678795, 27.0148704 ], [ 84.7681112, 27.0148443 ], [ 84.768232, 27.014885 ], [ 84.7683331, 27.0150972 ], [ 84.7685812, 27.0154839 ], [ 84.768839, 27.0157048 ], [ 84.7694623, 27.0161758 ], [ 84.7701639, 27.0166322 ], [ 84.7705522, 27.0171003 ], [ 84.7707154, 27.0171991 ], [ 84.7713368, 27.0172992 ], [ 84.7715583, 27.0174719 ], [ 84.7716806, 27.0176528 ], [ 84.7717937, 27.0177576 ], [ 84.7719091, 27.0177802 ], [ 84.7720937, 27.01777 ], [ 84.7722714, 27.0177062 ], [ 84.7728161, 27.017672 ], [ 84.7731473, 27.017643 ], [ 84.7733137, 27.01773 ], [ 84.7747884, 27.0172211 ], [ 84.7765252, 27.0165578 ], [ 84.7777182, 27.0161022 ], [ 84.7788544, 27.0155077 ], [ 84.7825249, 27.0142611 ], [ 84.7824157, 27.0139303 ], [ 84.7824438, 27.0135926 ], [ 84.7824637, 27.0133526 ], [ 84.7822784, 27.0124475 ], [ 84.7821921, 27.0118299 ], [ 84.782633, 27.0111554 ], [ 84.7829812, 27.0103357 ], [ 84.783532, 27.0096968 ], [ 84.7837258, 27.0092427 ], [ 84.783779, 27.0087077 ], [ 84.7838259, 27.0081728 ], [ 84.7838619, 27.0081207 ], [ 84.7841699, 27.007674 ], [ 84.7843544, 27.007532 ], [ 84.784639, 27.0074121 ], [ 84.7848767, 27.0073954 ], [ 84.7851956, 27.0074289 ], [ 84.7854302, 27.0075375 ], [ 84.7855709, 27.0076378 ], [ 84.785671, 27.0077855 ], [ 84.7858023, 27.0083316 ], [ 84.7858117, 27.0088693 ], [ 84.7857679, 27.0091981 ], [ 84.7856397, 27.0096132 ], [ 84.7853207, 27.0103599 ], [ 84.7853113, 27.0106246 ], [ 84.7853895, 27.0108335 ], [ 84.7855553, 27.0110174 ], [ 84.7858492, 27.0110676 ], [ 84.7860025, 27.011062 ], [ 84.7861932, 27.010945 ], [ 84.7863152, 27.0106051 ], [ 84.7865399, 27.009755 ], [ 84.7868185, 27.0092211 ], [ 84.7870551, 27.0088409 ], [ 84.7872917, 27.0086971 ], [ 84.7874332, 27.0086656 ], [ 84.7876212, 27.0087404 ], [ 84.7878092, 27.0090399 ], [ 84.7884173, 27.0094792 ], [ 84.7885743, 27.009556 ], [ 84.7887445, 27.0095462 ], [ 84.7888485, 27.0093906 ], [ 84.7889679, 27.0091364 ], [ 84.7890629, 27.0088685 ], [ 84.789032, 27.0086734 ], [ 84.7889347, 27.0085493 ], [ 84.7885765, 27.00837 ], [ 84.7878843, 27.007846 ], [ 84.7877627, 27.0076096 ], [ 84.7877848, 27.0074894 ], [ 84.7879064, 27.007381 ], [ 84.7881165, 27.0069752 ], [ 84.7883841, 27.0066836 ], [ 84.7885787, 27.0061458 ], [ 84.7885278, 27.0059625 ], [ 84.7883708, 27.0058719 ], [ 84.7881784, 27.0058227 ], [ 84.7876588, 27.0057675 ], [ 84.7873094, 27.0057044 ], [ 84.7867313, 27.005374 ], [ 84.7871448, 27.0048973 ], [ 84.7871625, 27.0044422 ], [ 84.7873615, 27.004255 ], [ 84.7873726, 27.0040658 ], [ 84.7876357, 27.0038215 ], [ 84.7875959, 27.0035969 ], [ 84.7876512, 27.0033054 ], [ 84.7873305, 27.002602 ], [ 84.7861763, 26.9986239 ], [ 84.7865438, 26.9984131 ], [ 84.7873058, 26.9989763 ], [ 84.7882709, 26.9987786 ], [ 84.788375, 26.9986067 ], [ 84.7883719, 26.9984294 ], [ 84.7882587, 26.9979903 ], [ 84.7882342, 26.9977311 ], [ 84.7882709, 26.9972947 ], [ 84.7882832, 26.9971283 ], [ 84.7884362, 26.9970274 ], [ 84.7887913, 26.9971092 ], [ 84.7891801, 26.9972811 ], [ 84.7894495, 26.9973847 ], [ 84.7895475, 26.9975484 ], [ 84.7895291, 26.9979194 ], [ 84.7896363, 26.9981976 ], [ 84.7896454, 26.9990241 ], [ 84.789774, 26.9991632 ], [ 84.7901414, 26.9991986 ], [ 84.7903404, 26.9992532 ], [ 84.7906842, 26.9996983 ], [ 84.7912102, 26.9996732 ], [ 84.7915804, 26.9993858 ], [ 84.7915436, 26.9992701 ], [ 84.7914917, 26.9992006 ], [ 84.7912038, 26.9991563 ], [ 84.7911496, 26.9990733 ], [ 84.7911453, 26.998919 ], [ 84.7911826, 26.9986247 ], [ 84.7909653, 26.9984611 ], [ 84.7905306, 26.9977301 ], [ 84.7905796, 26.9971818 ], [ 84.7906989, 26.9970754 ], [ 84.7913663, 26.9969527 ], [ 84.7916051, 26.9968599 ], [ 84.7922357, 26.9967699 ], [ 84.7924653, 26.9966499 ], [ 84.7926061, 26.9964126 ], [ 84.7927653, 26.9961452 ], [ 84.792998, 26.9960552 ], [ 84.7932429, 26.9958807 ], [ 84.7935766, 26.9958534 ], [ 84.7938429, 26.9959979 ], [ 84.7943893, 26.9974172 ], [ 84.7944825, 26.9979767 ], [ 84.794357, 26.9982849 ], [ 84.7946172, 26.9992559 ], [ 84.7947764, 26.9993269 ], [ 84.7951223, 26.999245 ], [ 84.795355, 26.9993296 ], [ 84.7954744, 26.9998915 ], [ 84.7958815, 27.0003306 ], [ 84.7961203, 27.0004561 ], [ 84.7962519, 27.0007125 ], [ 84.7961723, 27.0011844 ], [ 84.7964387, 27.0017026 ], [ 84.7963652, 27.0019836 ], [ 84.796008, 27.0025607 ], [ 84.795855, 27.0028062 ], [ 84.795904, 27.0030544 ], [ 84.7960876, 27.0032889 ], [ 84.7962652, 27.0033353 ], [ 84.7964397, 27.0033244 ], [ 84.7965468, 27.0032098 ], [ 84.7967121, 27.0030926 ], [ 84.7968683, 27.0031198 ], [ 84.7970397, 27.0032589 ], [ 84.7971836, 27.0034908 ], [ 84.7971986, 27.0037476 ], [ 84.79706, 27.0040041 ], [ 84.7970795, 27.0041565 ], [ 84.7972657, 27.0042626 ], [ 84.7974107, 27.0043127 ], [ 84.7978501, 27.0043031 ], [ 84.7982982, 27.0040196 ], [ 84.7986229, 27.0038132 ], [ 84.7988886, 27.00339 ], [ 84.7990863, 27.0027982 ], [ 84.799488, 27.0014589 ], [ 84.7995646, 27.0011589 ], [ 84.7997758, 27.0009189 ], [ 84.8001125, 27.0008479 ], [ 84.8002656, 27.000867 ], [ 84.8004646, 27.0009379 ], [ 84.8005932, 27.0011889 ], [ 84.8006373, 27.0014901 ], [ 84.8007628, 27.0018392 ], [ 84.8008509, 27.0022889 ], [ 84.8008846, 27.0026469 ], [ 84.8009798, 27.0027857 ], [ 84.8010729, 27.002859 ], [ 84.8011508, 27.0029632 ], [ 84.8011681, 27.0030885 ], [ 84.8011119, 27.0033624 ], [ 84.800956, 27.0036189 ], [ 84.8008543, 27.0038793 ], [ 84.8008911, 27.0040683 ], [ 84.8011009, 27.0046377 ], [ 84.8013585, 27.0049752 ], [ 84.8016421, 27.0052375 ], [ 84.8020079, 27.0054131 ], [ 84.8025546, 27.0056139 ], [ 84.8041932, 27.0062156 ], [ 84.8045024, 27.0062428 ], [ 84.8048116, 27.0061965 ], [ 84.8050994, 27.0061665 ], [ 84.8054422, 27.0062647 ], [ 84.8056229, 27.0064556 ], [ 84.805678, 27.0066738 ], [ 84.8056841, 27.006862 ], [ 84.8058341, 27.0069602 ], [ 84.8060759, 27.0069793 ], [ 84.8064464, 27.0069547 ], [ 84.8066147, 27.0069575 ], [ 84.8068811, 27.0070065 ], [ 84.8071168, 27.0071266 ], [ 84.8072056, 27.0072984 ], [ 84.8073188, 27.007593 ], [ 84.8073188, 27.0077239 ], [ 84.8073181, 27.0080228 ], [ 84.8072538, 27.008211 ], [ 84.8062836, 27.008693 ], [ 84.8061244, 27.0095549 ], [ 84.8060999, 27.0102422 ], [ 84.8065408, 27.0114859 ], [ 84.8073367, 27.0122495 ], [ 84.8077041, 27.0122277 ], [ 84.8081082, 27.0118786 ], [ 84.8083531, 27.0112131 ], [ 84.8088061, 27.0110277 ], [ 84.809247, 27.0111804 ], [ 84.8094674, 27.0116604 ], [ 84.8100307, 27.0127404 ], [ 84.8101041, 27.0140059 ], [ 84.8098937, 27.0150807 ], [ 84.8095289, 27.014708 ], [ 84.8091749, 27.0142014 ], [ 84.8084346, 27.0135323 ], [ 84.8078982, 27.0133125 ], [ 84.807233, 27.0133507 ], [ 84.8067824, 27.0136279 ], [ 84.8065678, 27.0142014 ], [ 84.8068253, 27.0148513 ], [ 84.8073419, 27.015605 ], [ 84.8082216, 27.0162932 ], [ 84.8090676, 27.0168585 ], [ 84.8099581, 27.0173078 ], [ 84.8108073, 27.0175262 ], [ 84.8116532, 27.0178717 ], [ 84.8125116, 27.0184929 ], [ 84.8145178, 27.0188561 ], [ 84.8159035, 27.019323 ], [ 84.8169442, 27.0197054 ], [ 84.8175859, 27.0199817 ], [ 84.8178407, 27.0201274 ], [ 84.8181464, 27.0203616 ], [ 84.8182417, 27.0204228 ], [ 84.8183771, 27.0205097 ], [ 84.8189672, 27.0210235 ], [ 84.8193105, 27.021487 ], [ 84.8194473, 27.0216328 ], [ 84.8197102, 27.0216805 ], [ 84.8199677, 27.0216519 ], [ 84.820488, 27.0214631 ], [ 84.8208984, 27.0214464 ], [ 84.8217889, 27.0215467 ], [ 84.8223682, 27.021573 ], [ 84.8228054, 27.0215013 ], [ 84.8253891, 27.0209814 ], [ 84.8279033, 27.0197691 ], [ 84.829324, 27.0196751 ], [ 84.8296974, 27.0194977 ], [ 84.8311274, 27.0181323 ], [ 84.8328582, 27.0169458 ], [ 84.8349866, 27.0158913 ], [ 84.8378368, 27.0144609 ], [ 84.8393952, 27.0138628 ], [ 84.8435303, 27.0123725 ], [ 84.846103, 27.0113643 ], [ 84.8463626, 27.0112626 ], [ 84.854125, 27.0083967 ], [ 84.8542808, 27.0081792 ], [ 84.8541504, 27.0076293 ], [ 84.8541547, 27.0073664 ], [ 84.8546423, 27.0065714 ], [ 84.8545953, 27.0063739 ], [ 84.8544369, 27.0061993 ], [ 84.8540875, 27.0060797 ], [ 84.8537305, 27.0060894 ], [ 84.8534144, 27.0062192 ], [ 84.852832, 27.006205 ], [ 84.8525621, 27.0060488 ], [ 84.8522545, 27.005646 ], [ 84.8519953, 27.0051079 ], [ 84.8519751, 27.0046105 ], [ 84.8519923, 27.004226 ], [ 84.8518778, 27.0040465 ], [ 84.8517502, 27.0039363 ], [ 84.8513767, 27.003711 ], [ 84.8511773, 27.0034531 ], [ 84.8509909, 27.0031395 ], [ 84.8509091, 27.0028862 ], [ 84.8509936, 27.0025208 ], [ 84.8512052, 27.0024493 ], [ 84.8516769, 27.0025296 ], [ 84.8519396, 27.0024854 ], [ 84.8523948, 27.0022156 ], [ 84.8524968, 27.002023 ], [ 84.8525021, 27.0016382 ], [ 84.852472, 27.0011933 ], [ 84.8523076, 27.001037 ], [ 84.8518771, 27.0009193 ], [ 84.8514288, 27.0008703 ], [ 84.851164, 27.0007469 ], [ 84.8507474, 26.9994444 ], [ 84.8503916, 26.9986398 ], [ 84.8502707, 26.9981316 ], [ 84.8503378, 26.9979827 ], [ 84.8504993, 26.997947 ], [ 84.8507891, 26.9980419 ], [ 84.8512053, 26.9983827 ], [ 84.8513631, 26.9985656 ], [ 84.8516379, 26.9986826 ], [ 84.8518786, 26.9987045 ], [ 84.8520893, 26.998653 ], [ 84.8523229, 26.9982862 ], [ 84.8526033, 26.9979754 ], [ 84.8528013, 26.9978354 ], [ 84.8529445, 26.9977851 ], [ 84.8531039, 26.9978266 ], [ 84.8532955, 26.9979885 ], [ 84.853374, 26.9980937 ], [ 84.8533457, 26.9982258 ], [ 84.8529275, 26.998761 ], [ 84.8528874, 26.9989133 ], [ 84.8529764, 26.9990624 ], [ 84.8531399, 26.9991878 ], [ 84.8535091, 26.9992549 ], [ 84.8538056, 26.9992552 ], [ 84.8539924, 26.9991805 ], [ 84.8542848, 26.998667 ], [ 84.8545975, 26.9982978 ], [ 84.8548204, 26.998092 ], [ 84.8549637, 26.9980431 ], [ 84.855201, 26.9981091 ], [ 84.8553491, 26.9982424 ], [ 84.8555245, 26.9984906 ], [ 84.8557587, 26.9986721 ], [ 84.8561897, 26.9987802 ], [ 84.8567672, 26.9987753 ], [ 84.8571024, 26.9987057 ], [ 84.8572607, 26.9985835 ], [ 84.8574867, 26.9979782 ], [ 84.8575362, 26.9976887 ], [ 84.8573587, 26.9972157 ], [ 84.8571899, 26.9971891 ], [ 84.8568156, 26.997178 ], [ 84.8562924, 26.9969179 ], [ 84.8557886, 26.9967062 ], [ 84.8555627, 26.9964848 ], [ 84.855468, 26.9963519 ], [ 84.8554848, 26.9961716 ], [ 84.8556943, 26.9960443 ], [ 84.8559629, 26.9960584 ], [ 84.8564283, 26.9962539 ], [ 84.8570664, 26.9964882 ], [ 84.8573602, 26.996556 ], [ 84.8575673, 26.9965376 ], [ 84.8578383, 26.9964247 ], [ 84.8580493, 26.9961459 ], [ 84.8581326, 26.9958353 ], [ 84.8581003, 26.9956732 ], [ 84.8579431, 26.9956608 ], [ 84.8575842, 26.9959065 ], [ 84.8573501, 26.9959168 ], [ 84.85717, 26.9957066 ], [ 84.8571403, 26.9954015 ], [ 84.8573319, 26.9950077 ], [ 84.857445, 26.9949098 ], [ 84.8576825, 26.994925 ], [ 84.8578789, 26.9948417 ], [ 84.8579339, 26.9946625 ], [ 84.8578549, 26.9943459 ], [ 84.8577008, 26.9938501 ], [ 84.8573703, 26.9932615 ], [ 84.8572174, 26.9928189 ], [ 84.857251, 26.9918865 ], [ 84.8571405, 26.9917132 ], [ 84.8567466, 26.9919072 ], [ 84.8565743, 26.9921426 ], [ 84.8563618, 26.9929359 ], [ 84.8558449, 26.9933863 ], [ 84.8552245, 26.9938367 ], [ 84.855035, 26.9938622 ], [ 84.854811, 26.9937599 ], [ 84.8547191, 26.9934682 ], [ 84.8547306, 26.9929461 ], [ 84.855012, 26.9921273 ], [ 84.8553222, 26.9915643 ], [ 84.855707, 26.9912009 ], [ 84.8568926, 26.9908385 ], [ 84.8574802, 26.9905596 ], [ 84.8576707, 26.9903309 ], [ 84.8576515, 26.9902017 ], [ 84.857562, 26.9900861 ], [ 84.8572667, 26.9898209 ], [ 84.857039, 26.9897044 ], [ 84.8562759, 26.9894571 ], [ 84.8556325, 26.9890843 ], [ 84.8554076, 26.9887443 ], [ 84.8552704, 26.9880841 ], [ 84.8552587, 26.9873141 ], [ 84.8551376, 26.986068 ], [ 84.8552315, 26.9858648 ], [ 84.8552869, 26.9856764 ], [ 84.8554825, 26.9855591 ], [ 84.8558519, 26.9854271 ], [ 84.8560767, 26.9853636 ], [ 84.856318, 26.9854205 ], [ 84.8567342, 26.9856901 ], [ 84.8572353, 26.9862354 ], [ 84.8575848, 26.9866164 ], [ 84.8578204, 26.9867241 ], [ 84.8579975, 26.9868244 ], [ 84.8581167, 26.9869884 ], [ 84.8581374, 26.9871932 ], [ 84.8580452, 26.9877106 ], [ 84.8578052, 26.9881941 ], [ 84.8576157, 26.9884082 ], [ 84.8571957, 26.9887017 ], [ 84.8571998, 26.988793 ], [ 84.8573502, 26.9889478 ], [ 84.8574676, 26.9891951 ], [ 84.8576749, 26.9894529 ], [ 84.8580159, 26.9896482 ], [ 84.85841, 26.9895634 ], [ 84.8586589, 26.9893531 ], [ 84.8587717, 26.9890642 ], [ 84.8589045, 26.9883734 ], [ 84.8592226, 26.9878285 ], [ 84.859431, 26.9876112 ], [ 84.859775, 26.9875832 ], [ 84.8601289, 26.9876326 ], [ 84.8602897, 26.9875928 ], [ 84.8611077, 26.987724 ], [ 84.8619262, 26.9873993 ], [ 84.8630196, 26.9863329 ], [ 84.8643435, 26.9849512 ], [ 84.8643713, 26.9846394 ], [ 84.8646536, 26.984441 ], [ 84.8657763, 26.9840755 ], [ 84.8662103, 26.9839847 ], [ 84.8663673, 26.9835546 ], [ 84.8666318, 26.9832842 ], [ 84.8669819, 26.9832842 ], [ 84.8672853, 26.9830208 ], [ 84.8678999, 26.9836309 ], [ 84.8686623, 26.9839567 ], [ 84.8713569, 26.982132 ], [ 84.8751256, 26.9807864 ], [ 84.8755939, 26.9808238 ], [ 84.8772618, 26.9805285 ], [ 84.8774217, 26.9800229 ], [ 84.88389, 26.9787893 ], [ 84.8850552, 26.978528 ], [ 84.886506, 26.9779579 ], [ 84.8886708, 26.9762951 ], [ 84.8892261, 26.9739076 ], [ 84.8899903, 26.971754 ], [ 84.8905073, 26.9710328 ], [ 84.8919684, 26.9696505 ], [ 84.8919796, 26.9705621 ], [ 84.8915076, 26.971143 ], [ 84.8915638, 26.9722148 ], [ 84.8923471, 26.97258 ], [ 84.8934156, 26.9726539 ], [ 84.8939211, 26.9728754 ], [ 84.8961184, 26.9731609 ], [ 84.8966185, 26.9731458 ], [ 84.8970681, 26.9729205 ], [ 84.8970456, 26.972029 ], [ 84.898794, 26.9703193 ], [ 84.8990003, 26.9701175 ], [ 84.9006264, 26.9697881 ], [ 84.9011469, 26.9700077 ], [ 84.9016317, 26.9703158 ], [ 84.903996, 26.9697704 ], [ 84.9082403, 26.9684866 ], [ 84.9093193, 26.9680884 ], [ 84.9103785, 26.9679657 ], [ 84.9109995, 26.9679332 ], [ 84.9115081, 26.9679207 ], [ 84.9117834, 26.9679657 ], [ 84.9119239, 26.9680934 ], [ 84.912351, 26.9684415 ], [ 84.9128764, 26.9685342 ], [ 84.9135564, 26.9688372 ], [ 84.9140846, 26.9689404 ], [ 84.9153774, 26.9688408 ], [ 84.9164475, 26.969087 ], [ 84.9174176, 26.9690906 ], [ 84.9189845, 26.9686529 ], [ 84.9202468, 26.9682767 ], [ 84.9210993, 26.9681898 ], [ 84.922114, 26.9680922 ], [ 84.9224185, 26.9679691 ], [ 84.9230964, 26.9677051 ], [ 84.9236525, 26.9676146 ], [ 84.9239975, 26.9676291 ], [ 84.9245333, 26.9682007 ], [ 84.9252599, 26.9682296 ], [ 84.9258241, 26.9679619 ], [ 84.9275126, 26.9678746 ], [ 84.9286816, 26.9686343 ], [ 84.9292986, 26.9687682 ], [ 84.9298082, 26.9686249 ], [ 84.9306966, 26.9682381 ], [ 84.9323322, 26.9679501 ], [ 84.9335285, 26.9678247 ], [ 84.9353434, 26.9671269 ], [ 84.9358213, 26.9668421 ], [ 84.9367244, 26.9665755 ], [ 84.9371991, 26.9665065 ], [ 84.9379512, 26.9660174 ], [ 84.9395934, 26.9654886 ], [ 84.9428567, 26.9642764 ], [ 84.9437614, 26.9639221 ], [ 84.9465294, 26.9628381 ], [ 84.9483619, 26.9620724 ], [ 84.9493881, 26.9616359 ], [ 84.9498103, 26.9614399 ], [ 84.9502267, 26.9613772 ], [ 84.9507105, 26.9613145 ], [ 84.9512148, 26.961108 ], [ 84.9521442, 26.9606925 ], [ 84.9526368, 26.9604521 ], [ 84.9534666, 26.9600731 ], [ 84.954182, 26.9599059 ], [ 84.9549292, 26.9598545 ], [ 84.9552858, 26.9598471 ], [ 84.9557917, 26.9599136 ], [ 84.9561276, 26.9600726 ], [ 84.9564012, 26.9605382 ], [ 84.9566542, 26.9607896 ], [ 84.9569486, 26.9608894 ], [ 84.9573218, 26.9609115 ], [ 84.9588228, 26.9608098 ], [ 84.9594033, 26.9608961 ], [ 84.9596291, 26.960998 ], [ 84.9602316, 26.9609588 ], [ 84.9619607, 26.9606299 ], [ 84.9624956, 26.9605153 ], [ 84.9628025, 26.9602455 ], [ 84.963006, 26.9599142 ], [ 84.963006, 26.959504 ], [ 84.963006, 26.9592046 ], [ 84.963055, 26.9590129 ], [ 84.9631388, 26.9589274 ], [ 84.9641938, 26.9582983 ], [ 84.9644945, 26.9581011 ], [ 84.9647906, 26.9580279 ], [ 84.9651395, 26.9580279 ], [ 84.9654327, 26.9580515 ], [ 84.9658278, 26.9583728 ], [ 84.9662632, 26.958273 ], [ 84.9661958, 26.9571407 ], [ 84.9658889, 26.9567181 ], [ 84.9660751, 26.9564033 ], [ 84.9669558, 26.9559736 ], [ 84.9678328, 26.9549211 ], [ 84.9686349, 26.9534723 ], [ 84.9695705, 26.952248 ], [ 84.9699109, 26.9518025 ], [ 84.9719229, 26.9491492 ], [ 84.9749908, 26.9448677 ], [ 84.9768978, 26.942383 ], [ 84.9780788, 26.9407873 ], [ 84.9784027, 26.9401139 ], [ 84.9778445, 26.9398478 ], [ 84.9765464, 26.9399596 ], [ 84.975906, 26.9399519 ], [ 84.9754344, 26.9397706 ], [ 84.9749896, 26.9391394 ], [ 84.9750655, 26.9387823 ], [ 84.9765935, 26.9377271 ], [ 84.9771982, 26.9373096 ], [ 84.9772632, 26.9369694 ], [ 84.977477, 26.936905 ], [ 84.9786416, 26.9365545 ], [ 84.9783593, 26.9346541 ], [ 84.9772947, 26.9339454 ], [ 84.9772835, 26.9320712 ], [ 84.9766361, 26.9314266 ], [ 84.976122, 26.9318031 ], [ 84.974476, 26.9317867 ], [ 84.9734785, 26.9310666 ], [ 84.9732093, 26.9304064 ], [ 84.9725484, 26.9298008 ], [ 84.972634, 26.9295171 ], [ 84.9721935, 26.9292443 ], [ 84.9711565, 26.9293025 ], [ 84.970361, 26.9288878 ], [ 84.9714502, 26.9278076 ], [ 84.9716827, 26.9271092 ], [ 84.9699326, 26.9246104 ], [ 84.9716582, 26.9225044 ], [ 84.9706669, 26.9210312 ], [ 84.9701243, 26.9190648 ], [ 84.9695932, 26.9181429 ], [ 84.9692321, 26.9170352 ], [ 84.9687193, 26.9167894 ], [ 84.9691569, 26.9164442 ], [ 84.9701084, 26.9158473 ], [ 84.9727911, 26.9154692 ], [ 84.9747555, 26.9153805 ], [ 84.9768888, 26.9151181 ], [ 84.978745, 26.9149985 ], [ 84.9818794, 26.9145316 ], [ 84.9839131, 26.9143233 ], [ 84.9844257, 26.9142259 ], [ 84.985946, 26.913937 ], [ 84.9888955, 26.9134678 ], [ 84.9913098, 26.9134321 ], [ 84.9948276, 26.9128611 ], [ 84.9969199, 26.912646 ], [ 84.9992477, 26.9121652 ], [ 84.9993768, 26.9121385 ], [ 84.9999173, 26.9119232 ], [ 85.0003239, 26.9114148 ], [ 85.0006466, 26.9110167 ], [ 85.0006864, 26.9106146 ], [ 85.0007704, 26.9103506 ], [ 85.001124, 26.9101968 ], [ 85.0012654, 26.9099958 ], [ 85.0011991, 26.90985 ], [ 85.0011991, 26.9096135 ], [ 85.0012345, 26.9094519 ], [ 85.0011815, 26.9092824 ], [ 85.0010489, 26.9091917 ], [ 85.0005139, 26.908925 ], [ 85.0003263, 26.9087048 ], [ 85.0003076, 26.9084623 ], [ 85.0003982, 26.9082728 ], [ 85.0006295, 26.9081083 ], [ 85.0008045, 26.9078241 ], [ 85.000892, 26.9075676 ], [ 85.0008639, 26.9072555 ], [ 85.0007295, 26.9070018 ], [ 85.0005732, 26.9067984 ], [ 85.0004982, 26.9062911 ], [ 85.0005295, 26.906057 ], [ 85.0006639, 26.9059009 ], [ 85.0007451, 26.9058591 ], [ 85.0009639, 26.9058535 ], [ 85.0014328, 26.9058396 ], [ 85.0015609, 26.9057755 ], [ 85.0016297, 26.9057142 ], [ 85.001639, 26.9055191 ], [ 85.0015953, 26.905062 ], [ 85.0017359, 26.9047972 ], [ 85.002086, 26.9045408 ], [ 85.0022673, 26.9043958 ], [ 85.0024048, 26.9042425 ], [ 85.0024642, 26.9038746 ], [ 85.0023767, 26.903568 ], [ 85.0021798, 26.9033562 ], [ 85.0019266, 26.9032419 ], [ 85.0016734, 26.9032809 ], [ 85.0015328, 26.9034565 ], [ 85.0014421, 26.9036321 ], [ 85.0014234, 26.9039136 ], [ 85.0013265, 26.9040781 ], [ 85.0010921, 26.9042035 ], [ 85.0007983, 26.9042648 ], [ 85.000517, 26.9043373 ], [ 84.9999606, 26.9045073 ], [ 84.9993262, 26.9045268 ], [ 84.9984416, 26.9048028 ], [ 84.9974341, 26.9052075 ], [ 84.9970341, 26.9056646 ], [ 84.996909, 26.9061273 ], [ 84.996609, 26.9065175 ], [ 84.9962527, 26.9066847 ], [ 84.9957964, 26.906707 ], [ 84.9955838, 26.9066624 ], [ 84.9946782, 26.9063203 ], [ 84.9944351, 26.906143 ], [ 84.9943025, 26.9059104 ], [ 84.9940638, 26.9057409 ], [ 84.9937234, 26.9056818 ], [ 84.9934538, 26.9057409 ], [ 84.993193, 26.9057291 ], [ 84.9930958, 26.905666 ], [ 84.9929543, 26.9054413 ], [ 84.9928659, 26.9042391 ], [ 84.9928129, 26.9032182 ], [ 84.9928306, 26.9030526 ], [ 84.9929808, 26.9029068 ], [ 84.9938074, 26.902556 ], [ 84.9948815, 26.9018543 ], [ 84.9963623, 26.9008058 ], [ 84.9984751, 26.8993237 ], [ 85.0000221, 26.8981292 ], [ 85.001274, 26.8971242 ], [ 85.0025382, 26.8960599 ], [ 85.0032485, 26.895486 ], [ 85.0041458, 26.8950484 ], [ 85.0050873, 26.8947528 ], [ 85.0067007, 26.8946188 ], [ 85.0114833, 26.894197 ], [ 85.0148519, 26.8938165 ], [ 85.0191789, 26.893242 ], [ 85.0196342, 26.8929857 ], [ 85.0205713, 26.8923353 ], [ 85.0211636, 26.8920909 ], [ 85.0218773, 26.8918615 ], [ 85.0223149, 26.8917195 ], [ 85.0227588, 26.8917182 ], [ 85.0236984, 26.8917156 ], [ 85.02624, 26.8918575 ], [ 85.0284943, 26.8917747 ], [ 85.0302414, 26.8917545 ], [ 85.031974, 26.8917344 ], [ 85.0349488, 26.8915097 ], [ 85.0392444, 26.8911923 ], [ 85.0421074, 26.890841 ], [ 85.0432197, 26.8906426 ], [ 85.0445237, 26.8902839 ], [ 85.0465614, 26.8901814 ], [ 85.0495198, 26.8898018 ], [ 85.0508637, 26.8894617 ], [ 85.0509639, 26.8882751 ], [ 85.0519703, 26.8869785 ], [ 85.0528908, 26.8865938 ], [ 85.0542867, 26.8866943 ], [ 85.0551482, 26.8866704 ], [ 85.0564135, 26.8855403 ], [ 85.0570267, 26.8850284 ], [ 85.0584096, 26.8847724 ], [ 85.0592315, 26.8846095 ], [ 85.0597403, 26.8849934 ], [ 85.0601317, 26.8856567 ], [ 85.0603143, 26.8860407 ], [ 85.0605491, 26.8861571 ], [ 85.0608362, 26.8857614 ], [ 85.0605445, 26.8848322 ], [ 85.0600357, 26.8837152 ], [ 85.0592007, 26.8832148 ], [ 85.0588581, 26.8826177 ], [ 85.0573286, 26.8810496 ], [ 85.0563456, 26.8807251 ], [ 85.0548414, 26.8832972 ], [ 85.053722, 26.8840614 ], [ 85.0531871, 26.884201 ], [ 85.0524696, 26.8838868 ], [ 85.0515694, 26.8830374 ], [ 85.0509562, 26.8828745 ], [ 85.0505257, 26.8830839 ], [ 85.050056, 26.883817 ], [ 85.0495603, 26.8843872 ], [ 85.0487645, 26.8846432 ], [ 85.0485554, 26.8843852 ], [ 85.0488019, 26.8837801 ], [ 85.0495864, 26.8820832 ], [ 85.0502387, 26.8815828 ], [ 85.051178, 26.8814898 ], [ 85.0520391, 26.8815479 ], [ 85.0527436, 26.8816527 ], [ 85.0532785, 26.8806985 ], [ 85.0516346, 26.8798374 ], [ 85.0493776, 26.8794766 ], [ 85.0470163, 26.8780569 ], [ 85.0457899, 26.8785922 ], [ 85.0446549, 26.879721 ], [ 85.0436112, 26.8794883 ], [ 85.0431285, 26.878953 ], [ 85.0420065, 26.8773005 ], [ 85.042373, 26.8752389 ], [ 85.0425119, 26.8744574 ], [ 85.041737, 26.8741777 ], [ 85.0405562, 26.8741941 ], [ 85.039726, 26.8749841 ], [ 85.0389326, 26.8770412 ], [ 85.0381208, 26.8775679 ], [ 85.0369584, 26.8773375 ], [ 85.0370138, 26.876745 ], [ 85.037844, 26.876169 ], [ 85.0375673, 26.8752145 ], [ 85.0354824, 26.874441 ], [ 85.0338035, 26.8746549 ], [ 85.0316263, 26.8745397 ], [ 85.029523, 26.8756259 ], [ 85.028988, 26.8755765 ], [ 85.0288404, 26.8727294 ], [ 85.027881, 26.8709355 ], [ 85.0308514, 26.8679895 ], [ 85.0302979, 26.8674792 ], [ 85.0277149, 26.8676438 ], [ 85.027143, 26.8668703 ], [ 85.0275304, 26.8657675 ], [ 85.0276227, 26.8633316 ], [ 85.0282223, 26.8621795 ], [ 85.029892, 26.8616692 ], [ 85.0299566, 26.8599328 ], [ 85.0294585, 26.8589863 ], [ 85.0282223, 26.8591098 ], [ 85.0275212, 26.8585337 ], [ 85.0271061, 26.8575379 ], [ 85.0259437, 26.8572251 ], [ 85.0242463, 26.857077 ], [ 85.0236131, 26.8570189 ], [ 85.0233733, 26.8568626 ], [ 85.0231703, 26.856591 ], [ 85.022829, 26.8561177 ], [ 85.0226998, 26.8558503 ], [ 85.0228151, 26.8554388 ], [ 85.0234194, 26.8549491 ], [ 85.0240928, 26.8543976 ], [ 85.0245494, 26.8543191 ], [ 85.0265588, 26.854158 ], [ 85.0274799, 26.8538961 ], [ 85.0283243, 26.8537793 ], [ 85.0298066, 26.8538593 ], [ 85.0311603, 26.8536827 ], [ 85.0326737, 26.8531984 ], [ 85.0348252, 26.8527276 ], [ 85.0376157, 26.8523449 ], [ 85.0407629, 26.8517084 ], [ 85.0438739, 26.8511888 ], [ 85.0443721, 26.8511144 ], [ 85.0467863, 26.8507537 ], [ 85.0495542, 26.8504274 ], [ 85.0516899, 26.8500527 ], [ 85.0542321, 26.8496539 ], [ 85.055985, 26.8494576 ], [ 85.057308, 26.8491797 ], [ 85.0580395, 26.8496451 ], [ 85.0585794, 26.8505509 ], [ 85.0574909, 26.8506813 ], [ 85.056909, 26.8512815 ], [ 85.0570524, 26.8522957 ], [ 85.0570876, 26.8526797 ], [ 85.0567981, 26.8530026 ], [ 85.0569927, 26.8534264 ], [ 85.0575049, 26.8536559 ], [ 85.0574581, 26.853899 ], [ 85.0572367, 26.8540054 ], [ 85.0570919, 26.8542675 ], [ 85.0572595, 26.8546888 ], [ 85.0576199, 26.8546512 ], [ 85.0579392, 26.8548221 ], [ 85.0581196, 26.8553713 ], [ 85.0585058, 26.855305 ], [ 85.058666, 26.8548521 ], [ 85.058974, 26.8540506 ], [ 85.0599093, 26.853691 ], [ 85.0604559, 26.8542946 ], [ 85.0612563, 26.8552974 ], [ 85.06221, 26.8545605 ], [ 85.0618183, 26.8541198 ], [ 85.0617798, 26.8527831 ], [ 85.0627098, 26.8516374 ], [ 85.0629477, 26.8508415 ], [ 85.0622932, 26.8501906 ], [ 85.0630056, 26.8497045 ], [ 85.0638596, 26.8495014 ], [ 85.0638785, 26.849997 ], [ 85.0646921, 26.8502684 ], [ 85.0658805, 26.8504536 ], [ 85.0659625, 26.8530239 ], [ 85.0665187, 26.8534239 ], [ 85.0679939, 26.8541841 ], [ 85.0710943, 26.854214 ], [ 85.0727917, 26.8554979 ], [ 85.0752087, 26.8559259 ], [ 85.076371, 26.8556625 ], [ 85.0772197, 26.8567159 ], [ 85.0776256, 26.8558765 ], [ 85.078622, 26.8566007 ], [ 85.0772751, 26.8587405 ], [ 85.0781976, 26.8587734 ], [ 85.0802456, 26.8567818 ], [ 85.0808913, 26.8571439 ], [ 85.0815186, 26.8571274 ], [ 85.0818507, 26.8562386 ], [ 85.0825518, 26.8557613 ], [ 85.0831053, 26.8566007 ], [ 85.0837511, 26.8566007 ], [ 85.0836446, 26.8561516 ], [ 85.0833452, 26.8548889 ], [ 85.0837142, 26.8541975 ], [ 85.0849323, 26.8535602 ], [ 85.0853323, 26.853509 ], [ 85.0857197, 26.8533608 ], [ 85.0860288, 26.8531098 ], [ 85.0862317, 26.8529164 ], [ 85.0864531, 26.8528465 ], [ 85.0869098, 26.8528341 ], [ 85.0873055, 26.8528119 ], [ 85.087415, 26.8530883 ], [ 85.0874085, 26.853292 ], [ 85.0871541, 26.8537866 ], [ 85.086854, 26.8540078 ], [ 85.0862017, 26.8540602 ], [ 85.0853472, 26.8542115 ], [ 85.0850341, 26.8545606 ], [ 85.0848477, 26.8548595 ], [ 85.0848412, 26.8552669 ], [ 85.084939, 26.8555579 ], [ 85.0851543, 26.8558547 ], [ 85.0853891, 26.8559245 ], [ 85.086731, 26.8562016 ], [ 85.0872937, 26.8565061 ], [ 85.0876904, 26.8570329 ], [ 85.0877642, 26.8573621 ], [ 85.0873952, 26.8578394 ], [ 85.0871603, 26.8581567 ], [ 85.0870723, 26.8582756 ], [ 85.0870354, 26.8586459 ], [ 85.087755, 26.8592879 ], [ 85.0890762, 26.859651 ], [ 85.0892792, 26.8600708 ], [ 85.0893171, 26.860455 ], [ 85.0892453, 26.8609497 ], [ 85.0890888, 26.8612523 ], [ 85.0886061, 26.8614327 ], [ 85.0881233, 26.8616887 ], [ 85.0877254, 26.862131 ], [ 85.0873797, 26.8625965 ], [ 85.0869166, 26.8627653 ], [ 85.0864534, 26.863097 ], [ 85.0856576, 26.8643946 ], [ 85.0854684, 26.8649591 ], [ 85.085475, 26.8653664 ], [ 85.085775, 26.8660007 ], [ 85.0862653, 26.866907 ], [ 85.0863957, 26.867099 ], [ 85.0865784, 26.8671921 ], [ 85.0868328, 26.8671979 ], [ 85.087172, 26.8670408 ], [ 85.0876808, 26.8669535 ], [ 85.088157, 26.8670059 ], [ 85.0886397, 26.8672328 ], [ 85.0887832, 26.8674307 ], [ 85.0887636, 26.8676518 ], [ 85.0886853, 26.8679078 ], [ 85.0886984, 26.8680824 ], [ 85.0888549, 26.8680941 ], [ 85.0890572, 26.8680359 ], [ 85.0894029, 26.8678729 ], [ 85.0897029, 26.8678555 ], [ 85.0898791, 26.868001 ], [ 85.0899247, 26.8683384 ], [ 85.0899036, 26.8685215 ], [ 85.0901058, 26.8685564 ], [ 85.0903732, 26.8684226 ], [ 85.0905689, 26.8681258 ], [ 85.0907581, 26.8678174 ], [ 85.0909864, 26.8677592 ], [ 85.0916126, 26.8677825 ], [ 85.0922323, 26.8675323 ], [ 85.0934073, 26.8672559 ], [ 85.0958449, 26.867217 ], [ 85.0961124, 26.8675254 ], [ 85.0965233, 26.8680026 ], [ 85.0975018, 26.8688114 ], [ 85.0980954, 26.8695737 ], [ 85.0986499, 26.8706618 ], [ 85.0992304, 26.871232 ], [ 85.0996533, 26.8712265 ], [ 85.1000709, 26.871221 ], [ 85.1047397, 26.8709272 ], [ 85.1050528, 26.8717535 ], [ 85.1081122, 26.8715091 ], [ 85.1093795, 26.8712506 ], [ 85.110076, 26.8713123 ], [ 85.1104957, 26.8715509 ], [ 85.1108601, 26.8723738 ], [ 85.113355, 26.8724199 ], [ 85.1137399, 26.872158 ], [ 85.1168435, 26.8720533 ], [ 85.1214874, 26.871688 ], [ 85.1238624, 26.8714934 ], [ 85.1240445, 26.8714785 ], [ 85.1242271, 26.8711759 ], [ 85.125173, 26.870274 ], [ 85.1281932, 26.8694768 ], [ 85.1327188, 26.8683077 ], [ 85.1343147, 26.8679558 ], [ 85.1349409, 26.8678918 ], [ 85.1353323, 26.8679034 ], [ 85.1360042, 26.8693872 ], [ 85.1398528, 26.8711911 ], [ 85.1411851, 26.8711564 ], [ 85.1436888, 26.8710911 ], [ 85.1484832, 26.8708874 ], [ 85.1521036, 26.8708176 ], [ 85.1539887, 26.8706896 ], [ 85.1557369, 26.870323 ], [ 85.160427, 26.869264 ], [ 85.1642666, 26.8687773 ], [ 85.1656964, 26.8686909 ], [ 85.1676106, 26.868695 ], [ 85.1700461, 26.8688802 ], [ 85.1717942, 26.8689213 ], [ 85.1734455, 26.8690283 ], [ 85.1762574, 26.8691934 ], [ 85.181423, 26.8697075 ], [ 85.1820139, 26.8698354 ], [ 85.1845494, 26.8700708 ], [ 85.1863506, 26.8700555 ], [ 85.1884329, 26.8700913 ], [ 85.188963, 26.8701112 ], [ 85.1895229, 26.8701322 ], [ 85.1902801, 26.8700299 ], [ 85.1907447, 26.8698969 ], [ 85.1912989, 26.8694469 ], [ 85.1919398, 26.8687377 ], [ 85.1921508, 26.8681081 ], [ 85.1929013, 26.8662822 ], [ 85.1930054, 26.8651489 ], [ 85.1930955, 26.8639345 ], [ 85.1930616, 26.8619332 ], [ 85.1929007, 26.860468 ], [ 85.1923547, 26.857398 ], [ 85.1916351, 26.8543694 ], [ 85.1912119, 26.8523377 ], [ 85.1909452, 26.8507214 ], [ 85.1908351, 26.8491844 ], [ 85.1907589, 26.8470506 ], [ 85.1913261, 26.8447129 ], [ 85.1917171, 26.8425406 ], [ 85.1918849, 26.8416085 ], [ 85.1921896, 26.8401544 ], [ 85.1926468, 26.8388099 ], [ 85.1926425, 26.8382773 ], [ 85.1923505, 26.8372764 ], [ 85.1916213, 26.8355724 ], [ 85.1914789, 26.8347142 ], [ 85.1913139, 26.8327049 ], [ 85.1911615, 26.8313904 ], [ 85.190789, 26.8305972 ], [ 85.1896207, 26.8285727 ], [ 85.1887742, 26.8270656 ], [ 85.1868144, 26.8257964 ], [ 85.1856292, 26.823496 ], [ 85.1849308, 26.8224761 ], [ 85.1843866, 26.8219457 ], [ 85.1839709, 26.8215405 ], [ 85.1821338, 26.819954 ], [ 85.1805804, 26.8186432 ], [ 85.1785275, 26.8167809 ], [ 85.1776323, 26.8158729 ], [ 85.1771354, 26.8152559 ], [ 85.176908, 26.8146362 ], [ 85.1767972, 26.813541 ], [ 85.1766246, 26.8111548 ], [ 85.1765049, 26.8102599 ], [ 85.1765976, 26.8098886 ], [ 85.1772441, 26.8087907 ], [ 85.1780104, 26.8074363 ], [ 85.1785641, 26.8065734 ], [ 85.1793243, 26.8055209 ], [ 85.1816345, 26.8020157 ], [ 85.1823439, 26.8007868 ], [ 85.1823319, 26.8004341 ], [ 85.182025, 26.8001505 ], [ 85.1807001, 26.7993609 ], [ 85.1796123, 26.7988471 ], [ 85.1792398, 26.798439 ], [ 85.1792102, 26.7981745 ], [ 85.1798578, 26.7969013 ], [ 85.1803065, 26.7958963 ], [ 85.1809117, 26.7953409 ], [ 85.1818498, 26.794976 ], [ 85.183041, 26.794821 ], [ 85.1835349, 26.7948557 ], [ 85.1845795, 26.7952618 ], [ 85.1851541, 26.7955744 ], [ 85.1856989, 26.7956572 ], [ 85.1860401, 26.7956038 ], [ 85.1864407, 26.7954149 ], [ 85.1866799, 26.79509 ], [ 85.1867193, 26.7946842 ], [ 85.1866685, 26.7943744 ], [ 85.1864507, 26.7939901 ], [ 85.1862436, 26.7936246 ], [ 85.185795, 26.7927707 ], [ 85.1857018, 26.7921246 ], [ 85.1858161, 26.7916447 ], [ 85.1861167, 26.7912518 ], [ 85.1864172, 26.7909949 ], [ 85.1867346, 26.7909495 ], [ 85.1871283, 26.7909911 ], [ 85.188178, 26.7914218 ], [ 85.1888426, 26.7915427 ], [ 85.1906415, 26.7914483 ], [ 85.1915262, 26.7913954 ], [ 85.1922458, 26.791146 ], [ 85.1926606, 26.7907379 ], [ 85.1928553, 26.7902581 ], [ 85.1928087, 26.7892832 ], [ 85.1929145, 26.7883877 ], [ 85.1931812, 26.7878436 ], [ 85.193922, 26.7870841 ], [ 85.1943368, 26.786249 ], [ 85.194578, 26.7853044 ], [ 85.1945272, 26.7845411 ], [ 85.1943368, 26.7837967 ], [ 85.193778, 26.7829011 ], [ 85.1931262, 26.782493 ], [ 85.1922839, 26.7822436 ], [ 85.1916659, 26.7823079 ], [ 85.1914669, 26.7820811 ], [ 85.1930244, 26.7789237 ], [ 85.1951464, 26.7745307 ], [ 85.1964724, 26.7719441 ], [ 85.1969944, 26.7710796 ], [ 85.197047, 26.7699334 ], [ 85.1972864, 26.7696608 ], [ 85.1975797, 26.7695379 ], [ 85.1991481, 26.7693669 ], [ 85.2002376, 26.7690729 ], [ 85.2009379, 26.7687362 ], [ 85.2013031, 26.7681483 ], [ 85.2021052, 26.7662723 ], [ 85.2032306, 26.7645513 ], [ 85.2045835, 26.7628303 ], [ 85.2059244, 26.7614406 ], [ 85.2075286, 26.7604518 ], [ 85.2096749, 26.7591692 ], [ 85.2105875, 26.7586238 ], [ 85.2120062, 26.7581802 ], [ 85.2130478, 26.7581535 ], [ 85.2160349, 26.758704 ], [ 85.2184592, 26.7589071 ], [ 85.2197343, 26.7592225 ], [ 85.2225238, 26.7602273 ], [ 85.2246369, 26.7607992 ], [ 85.2291881, 26.7617614 ], [ 85.2309266, 26.762247 ], [ 85.2324949, 26.762557 ], [ 85.2340274, 26.7625731 ], [ 85.2383912, 26.7620867 ], [ 85.2403128, 26.7619584 ], [ 85.2417614, 26.7615736 ], [ 85.2438253, 26.7611211 ], [ 85.2488211, 26.760061 ], [ 85.2498021, 26.7598528 ], [ 85.2515224, 26.7592569 ], [ 85.2518853, 26.7591312 ], [ 85.2538427, 26.7582867 ], [ 85.2574943, 26.7561433 ], [ 85.2582144, 26.7560843 ], [ 85.2605551, 26.7555136 ], [ 85.2662349, 26.7547516 ], [ 85.2721777, 26.7541998 ], [ 85.2806873, 26.7536111 ], [ 85.2842784, 26.7534469 ], [ 85.2853624, 26.7533973 ], [ 85.2872361, 26.7532476 ], [ 85.2917675, 26.7531835 ], [ 85.2951317, 26.7530338 ], [ 85.3019439, 26.75251 ], [ 85.3033201, 26.7523842 ], [ 85.3052183, 26.7522106 ], [ 85.3061472, 26.7521999 ], [ 85.3067191, 26.7520949 ], [ 85.3070517, 26.7519609 ], [ 85.3078914, 26.7514683 ], [ 85.3090069, 26.7512872 ], [ 85.3097978, 26.7510336 ], [ 85.3117773, 26.7504432 ], [ 85.3129009, 26.7503744 ], [ 85.3138825, 26.7501534 ], [ 85.3146289, 26.7497224 ], [ 85.3153225, 26.7494978 ], [ 85.3159593, 26.7495159 ], [ 85.3169299, 26.7496064 ], [ 85.319274, 26.7493118 ], [ 85.3194059, 26.7487099 ], [ 85.3201316, 26.7483846 ], [ 85.3202664, 26.7476751 ], [ 85.320579, 26.7475086 ], [ 85.3211756, 26.7475086 ], [ 85.3213707, 26.7473114 ], [ 85.3215227, 26.7469682 ], [ 85.3218669, 26.7464841 ], [ 85.3220103, 26.7458412 ], [ 85.3231375, 26.7450702 ], [ 85.3237819, 26.7454552 ], [ 85.3255948, 26.744739 ], [ 85.3340743, 26.7419078 ], [ 85.3443963, 26.7508972 ], [ 85.3520587, 26.7576097 ], [ 85.3542943, 26.7597207 ], [ 85.3555683, 26.7604043 ], [ 85.3570599, 26.7608241 ], [ 85.3573543, 26.7609644 ], [ 85.3614383, 26.7629107 ], [ 85.3619261, 26.762534 ], [ 85.3624315, 26.7618702 ], [ 85.36338, 26.7606701 ], [ 85.364238, 26.7600747 ], [ 85.3661937, 26.7592212 ], [ 85.3680217, 26.758764 ], [ 85.3706054, 26.7585174 ], [ 85.3730889, 26.7601967 ], [ 85.3739156, 26.7609948 ], [ 85.3747014, 26.7609678 ], [ 85.3752325, 26.7612196 ], [ 85.3763751, 26.7624 ], [ 85.377046, 26.7627954 ], [ 85.3778785, 26.764543 ], [ 85.3787609, 26.7661204 ], [ 85.3796947, 26.767481 ], [ 85.3804445, 26.7684088 ], [ 85.3823448, 26.7712988 ], [ 85.3843245, 26.7743926 ], [ 85.3885696, 26.774971 ], [ 85.3913572, 26.7753875 ], [ 85.3924335, 26.7756331 ], [ 85.3947085, 26.7767655 ], [ 85.3978166, 26.7788266 ], [ 85.4000322, 26.7806265 ], [ 85.4023116, 26.7827714 ], [ 85.4046502, 26.7858059 ], [ 85.4051275, 26.7868287 ], [ 85.4052547, 26.7878848 ], [ 85.4054832, 26.7887088 ], [ 85.4058193, 26.7892658 ], [ 85.4058878, 26.7893792 ], [ 85.4067301, 26.7900756 ], [ 85.4075605, 26.7914216 ], [ 85.4101719, 26.7912708 ], [ 85.4150206, 26.7908083 ], [ 85.4159074, 26.7909033 ], [ 85.4168715, 26.7908432 ], [ 85.4173579, 26.7908129 ], [ 85.4183723, 26.7904762 ], [ 85.4194637, 26.7898223 ], [ 85.4204432, 26.7890336 ], [ 85.4209616, 26.7885277 ], [ 85.4222733, 26.7872764 ], [ 85.4228806, 26.7869813 ], [ 85.4240672, 26.7865138 ], [ 85.4250963, 26.7862 ], [ 85.4261725, 26.7861 ], [ 85.4274547, 26.7861691 ], [ 85.4283454, 26.7863893 ], [ 85.4291173, 26.786772 ], [ 85.429678, 26.7872074 ], [ 85.4302363, 26.7874113 ], [ 85.4305358, 26.7879386 ], [ 85.4313058, 26.7888945 ], [ 85.431861, 26.7897292 ], [ 85.4323744, 26.7902371 ], [ 85.4353089, 26.7890352 ], [ 85.4375545, 26.7878942 ], [ 85.4398004, 26.7870306 ], [ 85.4412949, 26.7863591 ], [ 85.44463, 26.7847845 ], [ 85.4516347, 26.7814461 ], [ 85.4528396, 26.7826292 ], [ 85.4532089, 26.7825489 ], [ 85.4537032, 26.7821951 ], [ 85.4542352, 26.7818459 ], [ 85.4550709, 26.782477 ], [ 85.4550587, 26.7828392 ], [ 85.4554043, 26.7830955 ], [ 85.4560974, 26.7831742 ], [ 85.4571109, 26.783576 ], [ 85.4574888, 26.7838091 ], [ 85.4579011, 26.7836097 ], [ 85.4580935, 26.7837324 ], [ 85.4582, 26.7842323 ], [ 85.4575059, 26.7846821 ], [ 85.4598834, 26.7861295 ], [ 85.4607069, 26.786342 ], [ 85.4611078, 26.7865437 ], [ 85.4612926, 26.7868032 ], [ 85.4618643, 26.7871229 ], [ 85.4620417, 26.7870427 ], [ 85.4621753, 26.7871707 ], [ 85.4621996, 26.7875176 ], [ 85.4624692, 26.7878191 ], [ 85.4629988, 26.7881227 ], [ 85.4635139, 26.7883005 ], [ 85.4639004, 26.7887005 ], [ 85.4644008, 26.7886073 ], [ 85.464685, 26.7889369 ], [ 85.4648616, 26.7889699 ], [ 85.465013, 26.7888083 ], [ 85.4645355, 26.7881796 ], [ 85.464721, 26.7879588 ], [ 85.4656933, 26.7883667 ], [ 85.4660952, 26.7889985 ], [ 85.4663804, 26.7892684 ], [ 85.4669507, 26.7889065 ], [ 85.4677718, 26.7892223 ], [ 85.4689387, 26.7893722 ], [ 85.4696442, 26.7892591 ], [ 85.470912, 26.7898112 ], [ 85.4723016, 26.7900342 ], [ 85.4732646, 26.7902668 ], [ 85.4745741, 26.7909292 ], [ 85.4759657, 26.7917999 ], [ 85.4773042, 26.7927726 ], [ 85.4781517, 26.7934931 ], [ 85.4785486, 26.7942196 ], [ 85.4786562, 26.794868 ], [ 85.4787168, 26.796297 ], [ 85.4784813, 26.7988427 ], [ 85.4786212, 26.8001604 ], [ 85.4789574, 26.8014181 ], [ 85.4795182, 26.8024744 ], [ 85.487217, 26.7998051 ], [ 85.4949799, 26.7973112 ], [ 85.4953792, 26.7973102 ], [ 85.4957166, 26.7990468 ], [ 85.4962222, 26.7994422 ], [ 85.4962665, 26.8000374 ], [ 85.4959999, 26.8007739 ], [ 85.494771, 26.802554 ], [ 85.4965417, 26.8023661 ], [ 85.4968222, 26.8029251 ], [ 85.4965646, 26.8040952 ], [ 85.4972407, 26.8059526 ], [ 85.4974753, 26.8068315 ], [ 85.4979394, 26.8074673 ], [ 85.4979233, 26.8078901 ], [ 85.4974302, 26.8084971 ], [ 85.4967467, 26.8089926 ], [ 85.4964708, 26.8094703 ], [ 85.4964976, 26.8098115 ], [ 85.4971164, 26.8103228 ], [ 85.4974479, 26.8104759 ], [ 85.4979819, 26.8103919 ], [ 85.4982738, 26.8104595 ], [ 85.4984499, 26.8112401 ], [ 85.497658, 26.8119814 ], [ 85.4978632, 26.8122865 ], [ 85.4997577, 26.8128566 ], [ 85.4998737, 26.8134376 ], [ 85.5009166, 26.8137112 ], [ 85.501329, 26.8139859 ], [ 85.501748, 26.8145619 ], [ 85.5029534, 26.8150248 ], [ 85.5034307, 26.8152081 ], [ 85.5046218, 26.815526 ], [ 85.5061417, 26.8162768 ], [ 85.5074905, 26.8167993 ], [ 85.5083468, 26.8166695 ], [ 85.5102493, 26.8163812 ], [ 85.5114286, 26.8160733 ], [ 85.5135776, 26.8156546 ], [ 85.5186534, 26.8147302 ], [ 85.5196457, 26.8145088 ], [ 85.5216957, 26.8166685 ], [ 85.5233852, 26.818066 ], [ 85.5251567, 26.8200552 ], [ 85.529444, 26.824444 ], [ 85.5298861, 26.8248913 ], [ 85.5309635, 26.8259814 ], [ 85.5349675, 26.8301417 ], [ 85.5400551, 26.8352828 ], [ 85.5429275, 26.8381318 ], [ 85.543102, 26.8383049 ], [ 85.5534711, 26.8345515 ], [ 85.5575997, 26.8442743 ], [ 85.5657649, 26.8411053 ], [ 85.5663096, 26.8430936 ], [ 85.5686378, 26.8492939 ], [ 85.5692838, 26.8512089 ], [ 85.5719885, 26.8573501 ], [ 85.5733841, 26.8586618 ], [ 85.5737711, 26.8592714 ], [ 85.5753717, 26.8610553 ], [ 85.576332, 26.8606239 ], [ 85.5764222, 26.8602182 ], [ 85.5766229, 26.8598892 ], [ 85.5769876, 26.859648 ], [ 85.5780366, 26.8594433 ], [ 85.578266, 26.859107 ], [ 85.5779445, 26.8585946 ], [ 85.5781647, 26.856545 ], [ 85.5792394, 26.8567859 ], [ 85.5800156, 26.8570307 ], [ 85.580298, 26.857449 ], [ 85.5803489, 26.8580789 ], [ 85.5815634, 26.8584771 ], [ 85.5818767, 26.8579722 ], [ 85.5824725, 26.8577735 ], [ 85.5836857, 26.8575228 ], [ 85.5860567, 26.8552667 ], [ 85.5862507, 26.8550821 ], [ 85.5865063, 26.8528779 ], [ 85.5873258, 26.8510216 ], [ 85.5893041, 26.8495513 ], [ 85.5936929, 26.8513019 ], [ 85.599445, 26.8540293 ], [ 85.5999649, 26.8542549 ], [ 85.6063191, 26.8570121 ], [ 85.6118171, 26.8621905 ], [ 85.6156813, 26.8660669 ], [ 85.6193242, 26.8695412 ], [ 85.6238726, 26.873879 ], [ 85.6285677, 26.8731862 ], [ 85.6344089, 26.8721927 ], [ 85.6358744, 26.8687484 ], [ 85.6361822, 26.8680213 ], [ 85.6391102, 26.8611036 ], [ 85.6422349, 26.8532324 ], [ 85.6445677, 26.8526448 ], [ 85.6523677, 26.8506629 ], [ 85.6543872, 26.8501498 ], [ 85.6659636, 26.8474572 ], [ 85.6768129, 26.8445152 ], [ 85.6802344, 26.8433811 ], [ 85.6804997, 26.8432324 ], [ 85.689524, 26.8388134 ], [ 85.6990626, 26.8343953 ], [ 85.7024241, 26.8329333 ], [ 85.7040435, 26.832229 ], [ 85.7207008, 26.8204391 ], [ 85.7248258, 26.8142331 ], [ 85.7287604, 26.8081752 ], [ 85.7287882, 26.8077592 ], [ 85.7285533, 26.8043177 ], [ 85.7285466, 26.8031362 ], [ 85.728729, 26.8026258 ], [ 85.7290938, 26.8023133 ], [ 85.729503, 26.8013936 ], [ 85.7309863, 26.799844 ], [ 85.7311996, 26.7995911 ], [ 85.7319157, 26.7987418 ], [ 85.7336161, 26.7966612 ], [ 85.7341747, 26.7960199 ], [ 85.7345384, 26.7874865 ], [ 85.7347231, 26.7841539 ], [ 85.7349805, 26.7795075 ], [ 85.7334967, 26.7706209 ], [ 85.7333383, 26.769868 ], [ 85.7322149, 26.7645299 ], [ 85.7304468, 26.7575951 ], [ 85.7285754, 26.7497083 ], [ 85.7337797, 26.7375308 ], [ 85.7325782, 26.7374233 ], [ 85.7324079, 26.7361 ], [ 85.7304494, 26.7361761 ], [ 85.7292272, 26.7334956 ], [ 85.73066, 26.7329282 ], [ 85.7301193, 26.732059 ], [ 85.7301126, 26.731232 ], [ 85.731025, 26.7315398 ], [ 85.7313156, 26.7306464 ], [ 85.729876, 26.7300911 ], [ 85.7285012, 26.7287905 ], [ 85.729123, 26.7270519 ], [ 85.7293528, 26.7252289 ], [ 85.7279199, 26.725084 ], [ 85.7280551, 26.7242871 ], [ 85.7271089, 26.7236714 ], [ 85.7255138, 26.7212445 ], [ 85.7256291, 26.7205013 ], [ 85.7258247, 26.7192403 ], [ 85.7279199, 26.7176223 ], [ 85.7265141, 26.7143622 ], [ 85.7259852, 26.7113505 ], [ 85.7246964, 26.7101399 ], [ 85.7248838, 26.7070924 ], [ 85.7262553, 26.7068498 ], [ 85.7242243, 26.7029229 ], [ 85.7246535, 26.7003351 ], [ 85.7231499, 26.6998609 ], [ 85.7252183, 26.6972071 ], [ 85.7248037, 26.6962902 ], [ 85.7251578, 26.69537 ], [ 85.7239347, 26.6942869 ], [ 85.7243531, 26.6936639 ], [ 85.7249968, 26.6932804 ], [ 85.7250183, 26.6929929 ], [ 85.7242978, 26.6925096 ], [ 85.7244926, 26.6917084 ], [ 85.7243209, 26.6909416 ], [ 85.7236654, 26.6885296 ], [ 85.7232387, 26.6869615 ], [ 85.7238202, 26.6860614 ], [ 85.7245133, 26.6865176 ], [ 85.7249265, 26.6859299 ], [ 85.7251573, 26.6855149 ], [ 85.7253119, 26.6847611 ], [ 85.7248869, 26.6843823 ], [ 85.7239706, 26.6823902 ], [ 85.7242852, 26.6800386 ], [ 85.7242531, 26.6785099 ], [ 85.7244665, 26.6774406 ], [ 85.7244916, 26.6768587 ], [ 85.7241935, 26.6760141 ], [ 85.7235011, 26.6742996 ], [ 85.7241634, 26.6739724 ], [ 85.7250556, 26.6746307 ], [ 85.7257469, 26.6745118 ], [ 85.726178, 26.6742301 ], [ 85.7266074, 26.6740438 ], [ 85.7256655, 26.6719535 ], [ 85.7254338, 26.6710623 ], [ 85.7261236, 26.670207 ], [ 85.7277116, 26.6689517 ], [ 85.7301134, 26.6671111 ], [ 85.729933, 26.6668241 ], [ 85.7300169, 26.6662647 ], [ 85.7306506, 26.665985 ], [ 85.731979, 26.6650162 ], [ 85.7365626, 26.6643488 ], [ 85.7355176, 26.6610146 ], [ 85.7349263, 26.657594 ], [ 85.7332082, 26.6559254 ], [ 85.7322628, 26.6558127 ], [ 85.7322349, 26.6546026 ], [ 85.7320124, 26.6540222 ], [ 85.7335734, 26.6538544 ], [ 85.7342493, 26.6535667 ], [ 85.7338953, 26.6529578 ], [ 85.7338717, 26.6526359 ], [ 85.7342493, 26.6525264 ], [ 85.7351076, 26.6519405 ], [ 85.7366311, 26.6508291 ], [ 85.7370281, 26.6499997 ], [ 85.7374626, 26.6496593 ], [ 85.7374251, 26.6490935 ], [ 85.7400503, 26.6464837 ], [ 85.7456998, 26.6414646 ], [ 85.7459578, 26.6412779 ], [ 85.7471608, 26.640858 ], [ 85.7471777, 26.6405499 ], [ 85.7469682, 26.6400666 ], [ 85.7472115, 26.6399277 ], [ 85.7477455, 26.6400394 ], [ 85.7482287, 26.6396135 ], [ 85.748611, 26.638977 ], [ 85.7521538, 26.6381355 ], [ 85.753069, 26.6379136 ], [ 85.7593298, 26.636396 ], [ 85.7609326, 26.635354 ], [ 85.7646791, 26.6330726 ], [ 85.7654377, 26.6325721 ], [ 85.7687233, 26.6304043 ], [ 85.7695345, 26.6300306 ], [ 85.7701875, 26.6299742 ], [ 85.7711374, 26.6298923 ], [ 85.7751203, 26.6290844 ], [ 85.7784051, 26.6285208 ], [ 85.7812703, 26.6282968 ], [ 85.7841868, 26.627556 ], [ 85.787052, 26.6267061 ], [ 85.7904311, 26.6258332 ], [ 85.7932384, 26.6257872 ], [ 85.7961807, 26.6253967 ], [ 85.797761, 26.6249086 ], [ 85.7997848, 26.6245925 ], [ 85.8014816, 26.6243275 ], [ 85.8033203, 26.6149187 ], [ 85.8046244, 26.6137757 ], [ 85.8076759, 26.6115357 ], [ 85.8096394, 26.6097517 ], [ 85.8104447, 26.60902 ], [ 85.8173215, 26.6029188 ], [ 85.8303519, 26.601676 ], [ 85.8308745, 26.6056256 ], [ 85.831057, 26.6113036 ], [ 85.8328964, 26.6110493 ], [ 85.8341791, 26.6108719 ], [ 85.8374407, 26.6107856 ], [ 85.8402232, 26.6099 ], [ 85.8407022, 26.610047 ], [ 85.8411623, 26.6099652 ], [ 85.8431275, 26.6100203 ], [ 85.8441056, 26.6098414 ], [ 85.845139, 26.6095326 ], [ 85.8466302, 26.6091406 ], [ 85.8479223, 26.6088733 ], [ 85.8489023, 26.6090667 ], [ 85.8509701, 26.6086712 ], [ 85.8528919, 26.6036589 ], [ 85.8542329, 26.5999889 ], [ 85.8539878, 26.5989414 ], [ 85.8543955, 26.5972913 ], [ 85.85667, 26.5950464 ], [ 85.8562087, 26.5938472 ], [ 85.8565841, 26.5927134 ], [ 85.8571501, 26.5919939 ], [ 85.8578429, 26.590086 ], [ 85.8566804, 26.5884178 ], [ 85.8549502, 26.5858189 ], [ 85.8502056, 26.5795208 ], [ 85.8484077, 26.5771151 ], [ 85.8483672, 26.5751445 ], [ 85.8490195, 26.5704891 ], [ 85.8492191, 26.5688675 ], [ 85.8506011, 26.5686333 ], [ 85.8515846, 26.5680212 ], [ 85.8521389, 26.5682993 ], [ 85.8523822, 26.5685773 ], [ 85.8520442, 26.5691214 ], [ 85.8517874, 26.5696775 ], [ 85.8520983, 26.5701853 ], [ 85.8549775, 26.570959 ], [ 85.855356, 26.571902 ], [ 85.8550451, 26.5727241 ], [ 85.8555993, 26.5730264 ], [ 85.8566131, 26.5727241 ], [ 85.857625, 26.5720101 ], [ 85.8582527, 26.5716695 ], [ 85.8582849, 26.5711033 ], [ 85.8582634, 26.5706571 ], [ 85.8584941, 26.5703885 ], [ 85.8588374, 26.5702973 ], [ 85.8610422, 26.5704412 ], [ 85.8616591, 26.5707723 ], [ 85.861879, 26.5715783 ], [ 85.8629036, 26.5722452 ], [ 85.8640141, 26.5717414 ], [ 85.864352, 26.5723316 ], [ 85.8644539, 26.573152 ], [ 85.864749, 26.5735502 ], [ 85.8657092, 26.5739868 ], [ 85.8665568, 26.5740492 ], [ 85.8674795, 26.5749463 ], [ 85.8688259, 26.5758051 ], [ 85.8696306, 26.576021 ], [ 85.8698666, 26.5762897 ], [ 85.8697057, 26.5769661 ], [ 85.8688957, 26.5777625 ], [ 85.8690942, 26.578084 ], [ 85.8695072, 26.5782663 ], [ 85.8701188, 26.5787604 ], [ 85.8707464, 26.5797391 ], [ 85.8711408, 26.579912 ], [ 85.8715457, 26.5798878 ], [ 85.871653, 26.5795328 ], [ 85.8715296, 26.5792498 ], [ 85.8715296, 26.5787796 ], [ 85.8719588, 26.5784342 ], [ 85.8724845, 26.5783766 ], [ 85.8728332, 26.5783526 ], [ 85.8731443, 26.5785157 ], [ 85.8736415, 26.5797065 ], [ 85.8746148, 26.5800208 ], [ 85.8750086, 26.58081 ], [ 85.8753663, 26.5811299 ], [ 85.8760901, 26.5813736 ], [ 85.8771035, 26.5812669 ], [ 85.8778699, 26.5812593 ], [ 85.8786448, 26.5817924 ], [ 85.8790961, 26.5818914 ], [ 85.8794197, 26.5824854 ], [ 85.8793601, 26.5829271 ], [ 85.8785596, 26.5831099 ], [ 85.8783978, 26.5834678 ], [ 85.8786022, 26.5837876 ], [ 85.87959, 26.584077 ], [ 85.8808673, 26.5840846 ], [ 85.8819658, 26.5842978 ], [ 85.8828003, 26.5835744 ], [ 85.8843501, 26.5829956 ], [ 85.8851421, 26.5822189 ], [ 85.8856871, 26.582493 ], [ 85.885934, 26.5829195 ], [ 85.8871688, 26.5829728 ], [ 85.8882162, 26.5835515 ], [ 85.8884035, 26.5843892 ], [ 85.8885227, 26.5868413 ], [ 85.8893402, 26.587283 ], [ 85.8895872, 26.587618 ], [ 85.888693, 26.5886003 ], [ 85.8888293, 26.5891029 ], [ 85.8895446, 26.589339 ], [ 85.8918182, 26.5891562 ], [ 85.8923036, 26.5901157 ], [ 85.8914407, 26.5921282 ], [ 85.8908324, 26.5935666 ], [ 85.8912883, 26.594432 ], [ 85.8917111, 26.5946062 ], [ 85.893474, 26.5951725 ], [ 85.8947255, 26.5949204 ], [ 85.8951986, 26.5949352 ], [ 85.8954334, 26.5939295 ], [ 85.8957218, 26.5935754 ], [ 85.8968799, 26.5946719 ], [ 85.8977315, 26.5948089 ], [ 85.8996901, 26.5942759 ], [ 85.9011036, 26.5954638 ], [ 85.901375, 26.5968923 ], [ 85.9009408, 26.5988035 ], [ 85.9006087, 26.5993289 ], [ 85.9000977, 26.5999685 ], [ 85.9000807, 26.6003263 ], [ 85.9005405, 26.6004558 ], [ 85.9011196, 26.600372 ], [ 85.9017753, 26.6001055 ], [ 85.9025757, 26.6000675 ], [ 85.9027546, 26.600273 ], [ 85.9024906, 26.6006842 ], [ 85.9021414, 26.6009507 ], [ 85.9022947, 26.6013162 ], [ 85.9035124, 26.6018263 ], [ 85.9053092, 26.6016284 ], [ 85.9056328, 26.6020471 ], [ 85.9055987, 26.6028466 ], [ 85.9058372, 26.6031207 ], [ 85.9073103, 26.6035395 ], [ 85.9081108, 26.6042323 ], [ 85.9088602, 26.6043618 ], [ 85.9094903, 26.6047653 ], [ 85.9103674, 26.6050013 ], [ 85.9107847, 26.6049556 ], [ 85.9117469, 26.6043465 ], [ 85.9122664, 26.6042628 ], [ 85.9128454, 26.6044988 ], [ 85.9131179, 26.604948 ], [ 85.9131775, 26.6052754 ], [ 85.9128795, 26.6056104 ], [ 85.9124281, 26.6058236 ], [ 85.9124111, 26.6064175 ], [ 85.912888, 26.6069961 ], [ 85.9134926, 26.6072931 ], [ 85.913433, 26.6077575 ], [ 85.9136288, 26.608831 ], [ 85.9149828, 26.6085722 ], [ 85.9164404, 26.6089647 ], [ 85.9171031, 26.6091432 ], [ 85.918079, 26.6090791 ], [ 85.9190191, 26.6091508 ], [ 85.9196152, 26.610034 ], [ 85.920322, 26.610407 ], [ 85.9210969, 26.610072 ], [ 85.9219144, 26.6091279 ], [ 85.9224764, 26.6091279 ], [ 85.9237623, 26.6100568 ], [ 85.9245848, 26.6101145 ], [ 85.9256186, 26.6094249 ], [ 85.9263339, 26.6094325 ], [ 85.9265809, 26.6097903 ], [ 85.9265809, 26.6104375 ], [ 85.9269351, 26.610952 ], [ 85.9268789, 26.6118383 ], [ 85.9265264, 26.6123376 ], [ 85.9265093, 26.6134187 ], [ 85.9277356, 26.6137994 ], [ 85.9288937, 26.6130685 ], [ 85.9292684, 26.6141953 ], [ 85.9288766, 26.6151698 ], [ 85.9277356, 26.6157179 ], [ 85.9278718, 26.616601 ], [ 85.9288596, 26.6168751 ], [ 85.9298815, 26.6157331 ], [ 85.9313972, 26.6161595 ], [ 85.93184, 26.6157179 ], [ 85.931806, 26.6131599 ], [ 85.9341222, 26.614713 ], [ 85.9348906, 26.615539 ], [ 85.9362675, 26.6161695 ], [ 85.9369656, 26.6166814 ], [ 85.9380814, 26.6166046 ], [ 85.9388646, 26.6147534 ], [ 85.9410854, 26.6135736 ], [ 85.9441743, 26.6130536 ], [ 85.9452643, 26.6133658 ], [ 85.9457667, 26.6132211 ], [ 85.9466779, 26.6127567 ], [ 85.9478871, 26.6137921 ], [ 85.9487471, 26.6148656 ], [ 85.9482703, 26.6153148 ], [ 85.9477849, 26.6153148 ], [ 85.9471121, 26.6150788 ], [ 85.9466183, 26.6144164 ], [ 85.946218, 26.6143555 ], [ 85.9460988, 26.6145458 ], [ 85.9459796, 26.615094 ], [ 85.9462776, 26.6155508 ], [ 85.9473761, 26.6160761 ], [ 85.9474187, 26.6164567 ], [ 85.947044, 26.6166623 ], [ 85.9461073, 26.617081 ], [ 85.945639, 26.6174464 ], [ 85.9455879, 26.6179565 ], [ 85.9461073, 26.618634 ], [ 85.9460733, 26.618969 ], [ 85.9454687, 26.6198826 ], [ 85.9454942, 26.6208951 ], [ 85.9465075, 26.6216107 ], [ 85.9468482, 26.6226003 ], [ 85.9474953, 26.6231104 ], [ 85.9486378, 26.6226016 ], [ 85.9489174, 26.6228744 ], [ 85.9487301, 26.6248993 ], [ 85.9493517, 26.6251962 ], [ 85.9499734, 26.6248841 ], [ 85.9504502, 26.6236661 ], [ 85.9511229, 26.6237803 ], [ 85.9521099, 26.6256209 ], [ 85.9523724, 26.6266103 ], [ 85.9535968, 26.6277689 ], [ 85.9538091, 26.6285673 ], [ 85.9545704, 26.6291797 ], [ 85.9554573, 26.629893 ], [ 85.9555472, 26.6304471 ], [ 85.9543455, 26.6332475 ], [ 85.953337, 26.6340915 ], [ 85.9531439, 26.6348395 ], [ 85.9530152, 26.6363931 ], [ 85.952232, 26.6373426 ], [ 85.9533692, 26.6381769 ], [ 85.9537018, 26.6405936 ], [ 85.9535087, 26.6423964 ], [ 85.9532297, 26.6435951 ], [ 85.9552468, 26.6451295 ], [ 85.9554238, 26.6459437 ], [ 85.9560817, 26.6489708 ], [ 85.9577252, 26.6487121 ], [ 85.9588401, 26.6486545 ], [ 85.9598114, 26.6493361 ], [ 85.9594538, 26.6503027 ], [ 85.9599075, 26.6509616 ], [ 85.9610159, 26.6507164 ], [ 85.9615425, 26.6504699 ], [ 85.9619341, 26.6502685 ], [ 85.9621326, 26.6501679 ], [ 85.9622721, 26.6501103 ], [ 85.9624008, 26.6500624 ], [ 85.9625135, 26.650048 ], [ 85.9626208, 26.6500576 ], [ 85.9627042, 26.6500947 ], [ 85.9628193, 26.6501822 ], [ 85.9629534, 26.6503596 ], [ 85.9632216, 26.6507336 ], [ 85.9633664, 26.6509685 ], [ 85.9634713, 26.6510776 ], [ 85.9635732, 26.6511927 ], [ 85.9636454, 26.6513281 ], [ 85.9636615, 26.6514576 ], [ 85.9636239, 26.6515535 ], [ 85.963522, 26.6519658 ], [ 85.9634898, 26.6521 ], [ 85.9635006, 26.6521767 ], [ 85.9635274, 26.6522343 ], [ 85.9636186, 26.6523158 ], [ 85.9637205, 26.6523493 ], [ 85.9638063, 26.6523541 ], [ 85.9639941, 26.6523493 ], [ 85.9643267, 26.652311 ], [ 85.9644769, 26.652311 ], [ 85.9645895, 26.6523637 ], [ 85.964732, 26.6524632 ], [ 85.9647773, 26.6525939 ], [ 85.9648148, 26.6527233 ], [ 85.9648524, 26.6527904 ], [ 85.9649573, 26.6528372 ], [ 85.965024, 26.6528288 ], [ 85.9651582, 26.6527521 ], [ 85.9652738, 26.6526262 ], [ 85.9653298, 26.6525219 ], [ 85.9653459, 26.6524452 ], [ 85.9653566, 26.652335 ], [ 85.9653298, 26.6521576 ], [ 85.9652869, 26.6520473 ], [ 85.9652601, 26.6519226 ], [ 85.9652815, 26.6518507 ], [ 85.9653298, 26.6517932 ], [ 85.9653835, 26.65175 ], [ 85.9655015, 26.6517021 ], [ 85.9656731, 26.6516733 ], [ 85.9658233, 26.6516637 ], [ 85.9659092, 26.6516733 ], [ 85.9660141, 26.6517201 ], [ 85.9662632, 26.6519274 ], [ 85.9664939, 26.6520952 ], [ 85.9666173, 26.6521719 ], [ 85.9667031, 26.6521911 ], [ 85.966805, 26.6521863 ], [ 85.9669231, 26.6521384 ], [ 85.9671215, 26.6519898 ], [ 85.9671859, 26.6518651 ], [ 85.9672396, 26.6516877 ], [ 85.9672825, 26.6515535 ], [ 85.96732, 26.6514911 ], [ 85.9673522, 26.6514576 ], [ 85.9674112, 26.6514432 ], [ 85.9674839, 26.651466 ], [ 85.9675292, 26.6515199 ], [ 85.9675561, 26.6516158 ], [ 85.9675561, 26.6517644 ], [ 85.9675185, 26.6519993 ], [ 85.9675239, 26.6521288 ], [ 85.9675721, 26.652287 ], [ 85.9676097, 26.6523925 ], [ 85.9676151, 26.6525795 ], [ 85.9676151, 26.6527665 ], [ 85.9676151, 26.6528815 ], [ 85.9676419, 26.6529918 ], [ 85.9676741, 26.6530445 ], [ 85.9678189, 26.6531212 ], [ 85.9681676, 26.6532027 ], [ 85.9682886, 26.6532687 ], [ 85.9684358, 26.6534089 ], [ 85.9685753, 26.6535575 ], [ 85.9686694, 26.6536235 ], [ 85.9688167, 26.653663 ], [ 85.9689937, 26.653639 ], [ 85.9691225, 26.6535671 ], [ 85.9692619, 26.6535 ], [ 85.9693531, 26.6534568 ], [ 85.9694604, 26.6534233 ], [ 85.9696214, 26.6533897 ], [ 85.9698198, 26.6534521 ], [ 85.9699033, 26.6535467 ], [ 85.9699486, 26.6536918 ], [ 85.9699593, 26.6538164 ], [ 85.9699539, 26.6539555 ], [ 85.9698788, 26.6541137 ], [ 85.969675, 26.654502 ], [ 85.9695033, 26.6547993 ], [ 85.9693907, 26.6550054 ], [ 85.9693692, 26.6551349 ], [ 85.9694068, 26.655226 ], [ 85.9694687, 26.6553111 ], [ 85.9695492, 26.6553542 ], [ 85.9696672, 26.6553734 ], [ 85.9698711, 26.6553686 ], [ 85.9699808, 26.6553075 ], [ 85.9700451, 26.6552116 ], [ 85.9701417, 26.6550869 ], [ 85.9702275, 26.6549958 ], [ 85.9703187, 26.6549191 ], [ 85.9704207, 26.654876 ], [ 85.9705548, 26.654852 ], [ 85.9707211, 26.6548424 ], [ 85.9709088, 26.6548664 ], [ 85.9711478, 26.6549083 ], [ 85.9713731, 26.6548987 ], [ 85.9716008, 26.6548472 ], [ 85.97181, 26.6548136 ], [ 85.972148, 26.6547273 ], [ 85.9724055, 26.6546602 ], [ 85.9726362, 26.6546075 ], [ 85.9727595, 26.6546123 ], [ 85.9729127, 26.6546638 ], [ 85.9731916, 26.6548604 ], [ 85.9733657, 26.6550342 ], [ 85.973433, 26.6552008 ], [ 85.9734569, 26.6553698 ], [ 85.9734891, 26.6555568 ], [ 85.9735213, 26.6556862 ], [ 85.9735642, 26.6557725 ], [ 85.9736393, 26.655878 ], [ 85.9739236, 26.6561321 ], [ 85.9740148, 26.6562807 ], [ 85.9740363, 26.6563574 ], [ 85.9740363, 26.6564821 ], [ 85.9740041, 26.656693 ], [ 85.973929, 26.6568704 ], [ 85.9738968, 26.656995 ], [ 85.9738968, 26.6570478 ], [ 85.9739129, 26.6571101 ], [ 85.9739773, 26.6571628 ], [ 85.9741114, 26.6572204 ], [ 85.9742162, 26.6572719 ], [ 85.9743825, 26.6573678 ], [ 85.9744684, 26.6574013 ], [ 85.9748034, 26.6574217 ], [ 85.974919, 26.6574205 ], [ 85.9750394, 26.6574601 ], [ 85.9751521, 26.657508 ], [ 85.9752111, 26.6576327 ], [ 85.975195, 26.6577333 ], [ 85.9750931, 26.6577957 ], [ 85.9749214, 26.6578388 ], [ 85.9747497, 26.6579395 ], [ 85.9746854, 26.6580402 ], [ 85.9746693, 26.6581648 ], [ 85.9746907, 26.6582607 ], [ 85.9747527, 26.6583506 ], [ 85.9748248, 26.6584189 ], [ 85.9749589, 26.6584717 ], [ 85.9750662, 26.658486 ], [ 85.9751789, 26.6584717 ], [ 85.9754096, 26.6583902 ], [ 85.9757797, 26.6582799 ], [ 85.9762303, 26.658045 ], [ 85.9764717, 26.6579011 ], [ 85.9766058, 26.6578196 ], [ 85.9767346, 26.6577765 ], [ 85.9769331, 26.6577477 ], [ 85.9771637, 26.6577477 ], [ 85.9773461, 26.6578005 ], [ 85.9775475, 26.6579239 ], [ 85.9777377, 26.6580498 ], [ 85.9778611, 26.6580929 ], [ 85.9780143, 26.6581397 ], [ 85.9782127, 26.6581397 ], [ 85.9783385, 26.6581121 ], [ 85.9784887, 26.6580689 ], [ 85.9786389, 26.658045 ], [ 85.9787194, 26.6580546 ], [ 85.9788189, 26.6580965 ], [ 85.9790442, 26.658178 ], [ 85.979173, 26.658202 ], [ 85.979291, 26.6582116 ], [ 85.9794412, 26.6581972 ], [ 85.9796045, 26.6581265 ], [ 85.979744, 26.6580402 ], [ 85.9798728, 26.6579539 ], [ 85.9802805, 26.6578532 ], [ 85.980436, 26.6578292 ], [ 85.980597, 26.6577717 ], [ 85.9807042, 26.6576998 ], [ 85.9808759, 26.6576039 ], [ 85.9809564, 26.6575512 ], [ 85.98101, 26.6575032 ], [ 85.9810154, 26.6574553 ], [ 85.9810154, 26.6573882 ], [ 85.9809725, 26.6573067 ], [ 85.9809617, 26.6572539 ], [ 85.9809564, 26.6571868 ], [ 85.9809778, 26.6571197 ], [ 85.9810154, 26.6570813 ], [ 85.9811012, 26.6570526 ], [ 85.9812168, 26.6570514 ], [ 85.9813295, 26.6570562 ], [ 85.9814338, 26.6570574 ], [ 85.9815465, 26.6570382 ], [ 85.9816537, 26.6570382 ], [ 85.9817533, 26.6570466 ], [ 85.9819005, 26.6571197 ], [ 85.9820346, 26.6571868 ], [ 85.9821449, 26.6572144 ], [ 85.9822063, 26.6572204 ], [ 85.9822576, 26.6572017 ], [ 85.9823511, 26.6571676 ], [ 85.9825228, 26.6570622 ], [ 85.9826193, 26.6570142 ], [ 85.982732, 26.656995 ], [ 85.9828393, 26.656995 ], [ 85.9829334, 26.6570034 ], [ 85.9830568, 26.657061 ], [ 85.983207, 26.6571185 ], [ 85.9833787, 26.6571664 ], [ 85.9834991, 26.657182 ], [ 85.9836386, 26.6571437 ], [ 85.9839873, 26.6570526 ], [ 85.9841375, 26.6570094 ], [ 85.9842394, 26.6570094 ], [ 85.9843252, 26.6570142 ], [ 85.9845857, 26.6570705 ], [ 85.9848402, 26.6570909 ], [ 85.9850923, 26.6570957 ], [ 85.9852479, 26.6570765 ], [ 85.9854142, 26.6570382 ], [ 85.9855751, 26.6570046 ], [ 85.9857927, 26.656989 ], [ 85.9859482, 26.6570034 ], [ 85.9860823, 26.6570226 ], [ 85.9862779, 26.6570286 ], [ 85.9864739, 26.6570178 ], [ 85.9865783, 26.6569855 ], [ 85.9866802, 26.6569279 ], [ 85.9867607, 26.6568608 ], [ 85.9868358, 26.6567889 ], [ 85.9869592, 26.6567266 ], [ 85.9870718, 26.6566978 ], [ 85.9872113, 26.6566786 ], [ 85.9873698, 26.6566774 ], [ 85.9875761, 26.6567218 ], [ 85.9877721, 26.6567685 ], [ 85.9879599, 26.6568165 ], [ 85.9881315, 26.6568356 ], [ 85.9883217, 26.6568272 ], [ 85.988547, 26.6567793 ], [ 85.9887562, 26.6567649 ], [ 85.9892712, 26.6567218 ], [ 85.9899308, 26.6566976 ], [ 85.9901885, 26.6566882 ], [ 85.9906499, 26.6566163 ], [ 85.991079, 26.6564677 ], [ 85.9912829, 26.6563766 ], [ 85.9914063, 26.6562615 ], [ 85.9915886, 26.6561129 ], [ 85.9917281, 26.6560745 ], [ 85.9919427, 26.6560602 ], [ 85.9920768, 26.656041 ], [ 85.9922753, 26.6559978 ], [ 85.992463, 26.6559595 ], [ 85.9926776, 26.6558924 ], [ 85.9931175, 26.6557054 ], [ 85.9933106, 26.6556526 ], [ 85.9935091, 26.6556191 ], [ 85.9936379, 26.6555711 ], [ 85.993713, 26.6554944 ], [ 85.9937612, 26.6554081 ], [ 85.9938578, 26.6552116 ], [ 85.9939973, 26.6550294 ], [ 85.9941528, 26.6549383 ], [ 85.9942923, 26.6549047 ], [ 85.9944079, 26.6549035 ], [ 85.9945498, 26.6549335 ], [ 85.994703, 26.6549755 ], [ 85.9948073, 26.6550486 ], [ 85.9948341, 26.6551636 ], [ 85.9948395, 26.6552499 ], [ 85.9947697, 26.6555088 ], [ 85.9947537, 26.6556047 ], [ 85.9947537, 26.6556862 ], [ 85.994818, 26.6557965 ], [ 85.9948824, 26.655854 ], [ 85.9949414, 26.6558828 ], [ 85.9950272, 26.655902 ], [ 85.995215, 26.6558828 ], [ 85.9953491, 26.6558396 ], [ 85.9954778, 26.6557725 ], [ 85.995612, 26.6557294 ], [ 85.9957461, 26.6556862 ], [ 85.9960036, 26.6556431 ], [ 85.9961913, 26.655667 ], [ 85.9963791, 26.655667 ], [ 85.9965805, 26.6556562 ], [ 85.9967278, 26.6556095 ], [ 85.996819, 26.6555616 ], [ 85.9969423, 26.6555136 ], [ 85.9970443, 26.6554848 ], [ 85.9971945, 26.6554705 ], [ 85.9973315, 26.6554693 ], [ 85.9975217, 26.6554896 ], [ 85.9976748, 26.6555076 ], [ 85.9978489, 26.6554609 ], [ 85.9979294, 26.6554225 ], [ 85.9980528, 26.6553602 ], [ 85.9981332, 26.6553266 ], [ 85.9982191, 26.6553266 ], [ 85.9983424, 26.6553266 ], [ 85.9984473, 26.6553686 ], [ 85.9985868, 26.6554453 ], [ 85.9987316, 26.6554932 ], [ 85.9988443, 26.6555076 ], [ 85.9990551, 26.6552996 ], [ 85.9994951, 26.6549173 ], [ 85.9998551, 26.6548266 ], [ 86.0003012, 26.6548706 ], [ 86.0005689, 26.6550191 ], [ 86.0017627, 26.6552721 ], [ 86.0020335, 26.6556983 ], [ 86.0024427, 26.6562675 ], [ 86.0026365, 26.6563637 ], [ 86.0029073, 26.6562812 ], [ 86.0032796, 26.6556378 ], [ 86.0038303, 26.6553765 ], [ 86.0043811, 26.6553133 ], [ 86.0046241, 26.6556048 ], [ 86.0045749, 26.6559925 ], [ 86.0045472, 26.656372 ], [ 86.0047164, 26.6566827 ], [ 86.0049872, 26.6567019 ], [ 86.0054979, 26.6564105 ], [ 86.0063071, 26.6561382 ], [ 86.0073071, 26.655613 ], [ 86.0078055, 26.6550466 ], [ 86.0084209, 26.6549146 ], [ 86.0086885, 26.6550411 ], [ 86.0092701, 26.6554233 ], [ 86.0095716, 26.6556515 ], [ 86.0097254, 26.6555883 ], [ 86.0100669, 26.6547303 ], [ 86.0111346, 26.6545874 ], [ 86.0115961, 26.6552528 ], [ 86.0116146, 26.655503 ], [ 86.0113777, 26.6564022 ], [ 86.0114484, 26.6568147 ], [ 86.0118146, 26.6572519 ], [ 86.0123807, 26.6578953 ], [ 86.012753, 26.6581235 ], [ 86.0128422, 26.6582308 ], [ 86.0128207, 26.6584645 ], [ 86.0126299, 26.658613 ], [ 86.0119161, 26.658943 ], [ 86.011553, 26.6592399 ], [ 86.0115161, 26.6596496 ], [ 86.0117253, 26.6599686 ], [ 86.0120392, 26.6599933 ], [ 86.0123099, 26.6596936 ], [ 86.0126945, 26.6596029 ], [ 86.0129776, 26.6597789 ], [ 86.0130607, 26.6599741 ], [ 86.0129868, 26.6602848 ], [ 86.013116, 26.660524 ], [ 86.0134237, 26.6606533 ], [ 86.0139375, 26.6605433 ], [ 86.014356, 26.6603755 ], [ 86.014759, 26.6604113 ], [ 86.015759, 26.6609612 ], [ 86.0162574, 26.660975 ], [ 86.0165866, 26.6610877 ], [ 86.0170635, 26.6612884 ], [ 86.017522, 26.6612252 ], [ 86.0181896, 26.661019 ], [ 86.0186481, 26.6611509 ], [ 86.0192081, 26.6615634 ], [ 86.0195588, 26.6620116 ], [ 86.0198142, 26.6621573 ], [ 86.0205557, 26.6622865 ], [ 86.0206603, 26.6625093 ], [ 86.0207834, 26.6629602 ], [ 86.0209464, 26.6630784 ], [ 86.021251, 26.6630427 ], [ 86.0216572, 26.6632434 ], [ 86.0221772, 26.6638016 ], [ 86.0224233, 26.6640408 ], [ 86.0229248, 26.6642525 ], [ 86.0232417, 26.6642882 ], [ 86.0235156, 26.6641535 ], [ 86.0237155, 26.6639198 ], [ 86.0239432, 26.6638318 ], [ 86.0241186, 26.6638786 ], [ 86.0242878, 26.664038 ], [ 86.0243094, 26.6643515 ], [ 86.0251401, 26.6646044 ], [ 86.0258616, 26.6644235 ], [ 86.0259838, 26.6647749 ], [ 86.0263277, 26.6651819 ], [ 86.0268539, 26.6653413 ], [ 86.0270723, 26.6656328 ], [ 86.0270323, 26.6659077 ], [ 86.02678, 26.6662762 ], [ 86.0266908, 26.6665291 ], [ 86.0268816, 26.6667628 ], [ 86.0273061, 26.6667161 ], [ 86.0279985, 26.6665382 ], [ 86.0497711, 26.6612164 ], [ 86.0547145, 26.6599285 ], [ 86.0582932, 26.6594692 ], [ 86.0680258, 26.6578287 ], [ 86.0691612, 26.6574955 ], [ 86.0697867, 26.6569676 ], [ 86.0727888, 26.6512126 ], [ 86.0752541, 26.6492503 ], [ 86.0870658, 26.6436751 ], [ 86.0877069, 26.6433828 ], [ 86.0983843, 26.6385147 ], [ 86.1025687, 26.6365 ], [ 86.1173062, 26.6306761 ], [ 86.1190358, 26.6299926 ], [ 86.1387378, 26.6289394 ], [ 86.1399865, 26.6228967 ], [ 86.1409295, 26.6168344 ], [ 86.1396084, 26.6167427 ], [ 86.1389418, 26.6156496 ], [ 86.1384679, 26.6139529 ], [ 86.1377289, 26.6112615 ], [ 86.1360176, 26.6074853 ], [ 86.1357955, 26.6064042 ], [ 86.1423455, 26.6052492 ], [ 86.1438921, 26.6059892 ], [ 86.1454825, 26.6086676 ], [ 86.1460955, 26.6088777 ], [ 86.1469923, 26.6086971 ], [ 86.1483099, 26.6087189 ], [ 86.1494339, 26.6100512 ], [ 86.1520737, 26.6100741 ], [ 86.1550552, 26.6098644 ], [ 86.1557524, 26.610272 ], [ 86.1561697, 26.6109192 ], [ 86.1566405, 26.6128914 ], [ 86.1613986, 26.6155433 ], [ 86.1633905, 26.6141847 ], [ 86.1679548, 26.6138931 ], [ 86.1697465, 26.6159803 ], [ 86.1708052, 26.6169421 ], [ 86.1715856, 26.6170048 ], [ 86.1724146, 26.616401 ], [ 86.1727847, 26.6151018 ], [ 86.1741274, 26.6138865 ], [ 86.1749535, 26.614926 ], [ 86.1755002, 26.6153445 ], [ 86.1760087, 26.6155363 ], [ 86.1778632, 26.6150802 ], [ 86.1797188, 26.6146227 ], [ 86.1829481, 26.6139335 ], [ 86.1849721, 26.614181 ], [ 86.1866904, 26.6150543 ], [ 86.1893795, 26.6153387 ], [ 86.1911884, 26.615215 ], [ 86.1925108, 26.6147589 ], [ 86.1933017, 26.6141072 ], [ 86.1938864, 26.6133878 ], [ 86.1941761, 26.6125341 ], [ 86.1939293, 26.6118147 ], [ 86.1935002, 26.611244 ], [ 86.1928779, 26.611431 ], [ 86.1925078, 26.6119397 ], [ 86.1919498, 26.6125725 ], [ 86.1911505, 26.6128075 ], [ 86.1902815, 26.6125005 ], [ 86.1901098, 26.6118195 ], [ 86.1907214, 26.6106924 ], [ 86.1918079, 26.6098743 ], [ 86.1934465, 26.6093255 ], [ 86.1951363, 26.6085533 ], [ 86.1954796, 26.6076228 ], [ 86.195088, 26.6061072 ], [ 86.1955494, 26.6041598 ], [ 86.1963272, 26.602788 ], [ 86.1966383, 26.6011668 ], [ 86.1964077, 26.6002411 ], [ 86.1958122, 26.5993297 ], [ 86.1951202, 26.5984567 ], [ 86.1960429, 26.5983464 ], [ 86.1966813, 26.5979675 ], [ 86.1966813, 26.5971904 ], [ 86.1954152, 26.5961927 ], [ 86.1954152, 26.5949647 ], [ 86.1958444, 26.5940437 ], [ 86.1967993, 26.5932954 ], [ 86.1978185, 26.593257 ], [ 86.1987734, 26.5942164 ], [ 86.1994171, 26.5955691 ], [ 86.2002218, 26.5969889 ], [ 86.2008642, 26.5972354 ], [ 86.2016058, 26.596893 ], [ 86.2017453, 26.5961063 ], [ 86.2016594, 26.5947248 ], [ 86.202625, 26.5948304 ], [ 86.2033439, 26.5951853 ], [ 86.2039179, 26.5961303 ], [ 86.204524, 26.5966627 ], [ 86.20536, 26.5966579 ], [ 86.2054617, 26.59649 ], [ 86.2058377, 26.5961829 ], [ 86.2076376, 26.5933672 ], [ 86.2093926, 26.5925124 ], [ 86.2096619, 26.5923126 ], [ 86.2116422, 26.5927719 ], [ 86.2128223, 26.5926782 ], [ 86.2127439, 26.5917747 ], [ 86.2133116, 26.5906203 ], [ 86.2145993, 26.5901966 ], [ 86.2151912, 26.5899425 ], [ 86.2156569, 26.5895868 ], [ 86.2160962, 26.5893753 ], [ 86.2166504, 26.5892242 ], [ 86.2172941, 26.5885714 ], [ 86.2205248, 26.5897452 ], [ 86.222012, 26.5904028 ], [ 86.2229508, 26.5911367 ], [ 86.2236321, 26.5914581 ], [ 86.2239915, 26.5908633 ], [ 86.2251127, 26.5908058 ], [ 86.2264216, 26.5909353 ], [ 86.2276173, 26.5910873 ], [ 86.2281537, 26.5916736 ], [ 86.2286647, 26.5921838 ], [ 86.2295503, 26.5922143 ], [ 86.2304955, 26.5914299 ], [ 86.2307339, 26.5915289 ], [ 86.2309553, 26.5921762 ], [ 86.231032, 26.5931965 ], [ 86.2320368, 26.5930138 ], [ 86.233246, 26.5922904 ], [ 86.2336796, 26.5917076 ], [ 86.2337643, 26.5907808 ], [ 86.2341893, 26.5907722 ], [ 86.2342858, 26.5909545 ], [ 86.2345111, 26.5916548 ], [ 86.2344575, 26.5924223 ], [ 86.2342697, 26.5937079 ], [ 86.2344146, 26.5953388 ], [ 86.2348974, 26.5967203 ], [ 86.2351549, 26.5975837 ], [ 86.234597, 26.5979195 ], [ 86.2348122, 26.5983381 ], [ 86.2361291, 26.5991237 ], [ 86.2372241, 26.5994561 ], [ 86.2374403, 26.5999879 ], [ 86.2369807, 26.6010153 ], [ 86.2375407, 26.6018278 ], [ 86.2381686, 26.6013459 ], [ 86.2388462, 26.6011663 ], [ 86.2396437, 26.601396 ], [ 86.2399343, 26.6018251 ], [ 86.2394544, 26.6027376 ], [ 86.2399749, 26.6033782 ], [ 86.2408218, 26.6037372 ], [ 86.2415226, 26.6036682 ], [ 86.2419111, 26.6034521 ], [ 86.2424013, 26.6030216 ], [ 86.2429352, 26.602792 ], [ 86.2431312, 26.603638 ], [ 86.2425026, 26.6045868 ], [ 86.2426108, 26.6052274 ], [ 86.2425162, 26.6057592 ], [ 86.2430907, 26.6063574 ], [ 86.244118, 26.6062486 ], [ 86.2441045, 26.6067683 ], [ 86.2436196, 26.6078525 ], [ 86.2439355, 26.6088229 ], [ 86.2446452, 26.6092762 ], [ 86.2451588, 26.609397 ], [ 86.2453616, 26.6089861 ], [ 86.2454159, 26.6083937 ], [ 86.245321, 26.6080192 ], [ 86.2457604, 26.6076567 ], [ 86.2462673, 26.607566 ], [ 86.2464565, 26.6080071 ], [ 86.2464565, 26.608684 ], [ 86.247254, 26.6087021 ], [ 86.2476123, 26.6089619 ], [ 86.2482003, 26.60869 ], [ 86.2484233, 26.6087746 ], [ 86.2485044, 26.609119 ], [ 86.2490451, 26.6095783 ], [ 86.2487883, 26.6101886 ], [ 86.2477745, 26.6123398 ], [ 86.247984, 26.6126782 ], [ 86.2487883, 26.6125755 ], [ 86.2492073, 26.6127205 ], [ 86.2494439, 26.6130589 ], [ 86.2494033, 26.6137538 ], [ 86.2495588, 26.6142614 ], [ 86.2499373, 26.6144548 ], [ 86.2505523, 26.6144729 ], [ 86.2508497, 26.6148838 ], [ 86.2511403, 26.6153128 ], [ 86.2512349, 26.6160681 ], [ 86.2514715, 26.6165153 ], [ 86.2519784, 26.6170108 ], [ 86.2524245, 26.617186 ], [ 86.2527692, 26.617192 ], [ 86.2531341, 26.6169564 ], [ 86.2533301, 26.6164851 ], [ 86.253249, 26.6159412 ], [ 86.2525461, 26.6157418 ], [ 86.252411, 26.6155424 ], [ 86.2526272, 26.6152887 ], [ 86.2530125, 26.6148959 ], [ 86.254544, 26.6151013 ], [ 86.2606441, 26.615673 ], [ 86.2652299, 26.6161027 ], [ 86.2759394, 26.6173113 ], [ 86.2871038, 26.614519 ], [ 86.2928524, 26.6130812 ], [ 86.3057865, 26.6199702 ], [ 86.3061551, 26.6201665 ], [ 86.3140367, 26.6195115 ], [ 86.3217023, 26.6197972 ], [ 86.3272628, 26.6194662 ], [ 86.3330643, 26.6191208 ], [ 86.3440855, 26.6167203 ], [ 86.343066, 26.6147267 ], [ 86.3420462, 26.6127512 ], [ 86.3388491, 26.6097642 ], [ 86.3413381, 26.6060864 ], [ 86.356734, 26.6040969 ], [ 86.3720149, 26.5998683 ], [ 86.3910878, 26.5946475 ], [ 86.3939094, 26.5936024 ], [ 86.3956963, 26.5935878 ], [ 86.3971948, 26.5930924 ], [ 86.3948873, 26.5851543 ], [ 86.4029075, 26.582235 ], [ 86.4045117, 26.5816511 ], [ 86.4132007, 26.5789004 ], [ 86.417845, 26.5771227 ], [ 86.420047, 26.5762798 ], [ 86.4290593, 26.5732899 ], [ 86.4303646, 26.5730586 ], [ 86.4333701, 26.5725261 ], [ 86.4467228, 26.5696395 ], [ 86.4558921, 26.5676189 ], [ 86.4734467, 26.5570304 ], [ 86.4858863, 26.5498972 ], [ 86.4914033, 26.5469412 ], [ 86.4960017, 26.5433228 ], [ 86.4977365, 26.5423624 ], [ 86.5003589, 26.5418787 ], [ 86.5053157, 26.540799 ], [ 86.5156364, 26.5391078 ], [ 86.5169478, 26.5407686 ], [ 86.5213589, 26.5437244 ], [ 86.5248161, 26.543252 ], [ 86.5281793, 26.54285 ], [ 86.5285119, 26.5428102 ], [ 86.5306578, 26.5410733 ], [ 86.5323924, 26.5407536 ], [ 86.5364923, 26.5399819 ], [ 86.5386146, 26.5393289 ], [ 86.5405915, 26.5390698 ], [ 86.5417837, 26.5387041 ], [ 86.5427374, 26.5374547 ], [ 86.5438955, 26.5365558 ], [ 86.5445681, 26.535423 ], [ 86.5447641, 26.535093 ], [ 86.5464501, 26.5344226 ], [ 86.5473868, 26.531878 ], [ 86.548545, 26.530979 ], [ 86.5509293, 26.5302933 ], [ 86.5513551, 26.5288457 ], [ 86.5506398, 26.5276724 ], [ 86.5511531, 26.5250186 ], [ 86.5526898, 26.5237906 ], [ 86.5543136, 26.5243573 ], [ 86.555254, 26.523877 ], [ 86.5546317, 26.5230994 ], [ 86.5545351, 26.5219763 ], [ 86.5554042, 26.5213235 ], [ 86.555136, 26.5204307 ], [ 86.5554256, 26.5196243 ], [ 86.555726, 26.5182131 ], [ 86.5556617, 26.5174259 ], [ 86.5549857, 26.5174067 ], [ 86.5547175, 26.5184627 ], [ 86.5542562, 26.5188179 ], [ 86.5534515, 26.5182227 ], [ 86.5541596, 26.5174163 ], [ 86.5549403, 26.5155592 ], [ 86.559966, 26.5110517 ], [ 86.5603151, 26.5109007 ], [ 86.5603388, 26.5104743 ], [ 86.5614928, 26.5098166 ], [ 86.5615603, 26.5086663 ], [ 86.5616199, 26.5080262 ], [ 86.5622415, 26.5081558 ], [ 86.5623397, 26.5075899 ], [ 86.5627439, 26.5073518 ], [ 86.5626417, 26.5066812 ], [ 86.5627993, 26.5063955 ], [ 86.5633911, 26.5060678 ], [ 86.5636264, 26.5057212 ], [ 86.5637176, 26.5053468 ], [ 86.5639912, 26.5051979 ], [ 86.563723, 26.5049003 ], [ 86.5637874, 26.5043722 ], [ 86.5633046, 26.5037626 ], [ 86.563326, 26.5035081 ], [ 86.5639537, 26.5035993 ], [ 86.5641897, 26.5029609 ], [ 86.5642487, 26.5022551 ], [ 86.5650319, 26.5020055 ], [ 86.5651338, 26.5015782 ], [ 86.5646725, 26.5009253 ], [ 86.5648038, 26.5002885 ], [ 86.566373, 26.5003252 ], [ 86.5674827, 26.4995538 ], [ 86.5685733, 26.4994013 ], [ 86.5691342, 26.4988085 ], [ 86.5695938, 26.4977439 ], [ 86.5700779, 26.4965203 ], [ 86.5785709, 26.4945828 ], [ 86.5795858, 26.4943513 ], [ 86.5848871, 26.4937416 ], [ 86.5857588, 26.4936632 ], [ 86.5875947, 26.4937639 ], [ 86.5900448, 26.4931062 ], [ 86.595978, 26.4910526 ], [ 86.599214, 26.4899326 ], [ 86.6088696, 26.4868004 ], [ 86.6115713, 26.4861677 ], [ 86.6128714, 26.4866885 ], [ 86.6142672, 26.4872477 ], [ 86.6160764, 26.4842988 ], [ 86.6195298, 26.4837729 ], [ 86.6219392, 26.4839 ], [ 86.6220934, 26.4809465 ], [ 86.6245341, 26.4806467 ], [ 86.6272773, 26.4793308 ], [ 86.6275476, 26.4765297 ], [ 86.6274915, 26.4754093 ], [ 86.6274617, 26.4748137 ], [ 86.626106, 26.4712229 ], [ 86.626135, 26.4686873 ], [ 86.6295034, 26.4683111 ], [ 86.6311987, 26.4676698 ], [ 86.632862, 26.4647182 ], [ 86.6333957, 26.4652533 ], [ 86.633892, 26.4665902 ], [ 86.6361178, 26.4661985 ], [ 86.6381987, 26.4658377 ], [ 86.6390206, 26.4633976 ], [ 86.6568244, 26.4589803 ], [ 86.6772539, 26.4541236 ], [ 86.6809164, 26.4532529 ], [ 86.6871347, 26.4517551 ], [ 86.6905141, 26.4510895 ], [ 86.691753, 26.4515145 ], [ 86.6933808, 26.4512259 ], [ 86.6938773, 26.4512215 ], [ 86.6936735, 26.4503426 ], [ 86.6940365, 26.4495097 ], [ 86.6948191, 26.4493519 ], [ 86.6951681, 26.4492815 ], [ 86.6963807, 26.4488384 ], [ 86.6959211, 26.4465752 ], [ 86.6952865, 26.4455477 ], [ 86.6960292, 26.4438641 ], [ 86.6980465, 26.4433366 ], [ 86.6998412, 26.4396038 ], [ 86.6998141, 26.4374009 ], [ 86.7031224, 26.437164 ], [ 86.719929, 26.4349507 ], [ 86.7244055, 26.4272498 ], [ 86.7254896, 26.4261376 ], [ 86.7268958, 26.4246949 ], [ 86.7289054, 26.4269979 ], [ 86.7306426, 26.4263726 ], [ 86.7295526, 26.423185 ], [ 86.730881, 26.4224377 ], [ 86.733061, 26.4246034 ], [ 86.7370207, 26.4231987 ], [ 86.7375912, 26.4255795 ], [ 86.739158, 26.4259456 ], [ 86.7409633, 26.4246644 ], [ 86.7427878, 26.4270543 ], [ 86.7446201, 26.42796 ], [ 86.7451338, 26.4283655 ], [ 86.7467221, 26.4283534 ], [ 86.7473351, 26.4287929 ], [ 86.7458619, 26.4310424 ], [ 86.7461429, 26.4332614 ], [ 86.744542, 26.43394 ], [ 86.743795, 26.4357278 ], [ 86.7453162, 26.4363785 ], [ 86.7455663, 26.4364208 ], [ 86.7457623, 26.4355221 ], [ 86.7460596, 26.4356401 ], [ 86.7472965, 26.436675 ], [ 86.7482887, 26.4378442 ], [ 86.7487091, 26.4404938 ], [ 86.7496688, 26.4418857 ], [ 86.7503259, 26.4422736 ], [ 86.7517046, 26.4423221 ], [ 86.7521237, 26.4416927 ], [ 86.7527387, 26.4416745 ], [ 86.7534078, 26.441959 ], [ 86.7537255, 26.4423826 ], [ 86.7536647, 26.4436413 ], [ 86.7527772, 26.4440943 ], [ 86.7523535, 26.4446459 ], [ 86.7533732, 26.4470146 ], [ 86.7552969, 26.4474756 ], [ 86.7589748, 26.4486581 ], [ 86.7601575, 26.44818 ], [ 86.7602947, 26.4520539 ], [ 86.7624672, 26.4510365 ], [ 86.763288, 26.4506997 ], [ 86.7633561, 26.4503794 ], [ 86.7645951, 26.4511075 ], [ 86.7643984, 26.4513727 ], [ 86.7643567, 26.4522168 ], [ 86.7638362, 26.4527316 ], [ 86.763322, 26.4537759 ], [ 86.763859, 26.4541285 ], [ 86.7643482, 26.4541571 ], [ 86.7647739, 26.4545917 ], [ 86.7647526, 26.4550224 ], [ 86.7634713, 26.4548495 ], [ 86.762863, 26.4551884 ], [ 86.7632144, 26.4574393 ], [ 86.7641201, 26.4578387 ], [ 86.7649181, 26.4587667 ], [ 86.7654313, 26.4593635 ], [ 86.7663667, 26.4594869 ], [ 86.7689033, 26.4592789 ], [ 86.7694998, 26.4586288 ], [ 86.7765574, 26.4560343 ], [ 86.7800262, 26.4546797 ], [ 86.7861628, 26.4522834 ], [ 86.7913062, 26.4505146 ], [ 86.7975001, 26.4487396 ], [ 86.8004053, 26.4479019 ], [ 86.8029328, 26.4471732 ], [ 86.8073155, 26.4458427 ], [ 86.8121327, 26.4445939 ], [ 86.8180121, 26.4430425 ], [ 86.8232907, 26.441736 ], [ 86.8271775, 26.4408463 ], [ 86.8334002, 26.4388673 ], [ 86.8354138, 26.4412875 ], [ 86.8430025, 26.4403083 ], [ 86.8454621, 26.4433918 ], [ 86.8460582, 26.4488814 ], [ 86.8566175, 26.4486401 ], [ 86.8592657, 26.454754 ], [ 86.863056, 26.458333 ], [ 86.8676047, 26.4546621 ], [ 86.8705027, 26.4553264 ], [ 86.8731278, 26.4544481 ], [ 86.8765655, 26.4572941 ], [ 86.8796027, 26.4576672 ], [ 86.8823062, 26.4593009 ], [ 86.8847421, 26.4613577 ], [ 86.8941021, 26.4619734 ], [ 86.8953571, 26.4681014 ], [ 86.8924448, 26.4687722 ], [ 86.8927485, 26.4723777 ], [ 86.8931642, 26.4768061 ], [ 86.8903977, 26.4825708 ], [ 86.8941007, 26.4879638 ], [ 86.8959718, 26.4880209 ], [ 86.9038504, 26.4882278 ], [ 86.9292177, 26.4890348 ], [ 86.9290744, 26.4901976 ], [ 86.9276896, 26.5014346 ], [ 86.930221, 26.5080907 ], [ 86.9303792, 26.5085067 ], [ 86.9318441, 26.515929 ], [ 86.9333044, 26.5160385 ], [ 86.9367851, 26.5178575 ], [ 86.9438831, 26.5173387 ], [ 86.9459522, 26.5209521 ], [ 86.949386, 26.5209225 ], [ 86.9523574, 26.5209434 ], [ 86.9534034, 26.5207805 ], [ 86.9548077, 26.5205617 ], [ 86.9574757, 26.5205038 ], [ 86.9593442, 26.5205375 ], [ 86.9599678, 26.521454 ], [ 86.9612002, 26.5239822 ], [ 86.9622034, 26.5237466 ], [ 86.9640845, 26.5238027 ], [ 86.9657618, 26.5237325 ], [ 86.9658778, 26.5224225 ], [ 86.9670065, 26.5221043 ], [ 86.9705207, 26.5212677 ], [ 86.9725691, 26.5208471 ], [ 86.974848, 26.5201727 ], [ 86.9765683, 26.5215216 ], [ 86.9771714, 26.5223254 ], [ 86.9779852, 26.5234101 ], [ 86.9785021, 26.5240991 ], [ 86.9792976, 26.5251593 ], [ 86.9808804, 26.5251669 ], [ 86.9901185, 26.5231519 ], [ 86.9906636, 26.5232996 ], [ 86.9932558, 26.5240017 ], [ 86.9938384, 26.5242212 ], [ 86.9945172, 26.5244769 ], [ 87.003309, 26.5280495 ], [ 87.0042205, 26.5283813 ], [ 87.0074669, 26.5295631 ], [ 87.0117165, 26.53111 ], [ 87.0151705, 26.5319823 ], [ 87.0181802, 26.5366147 ], [ 87.0265201, 26.5484792 ], [ 87.0287642, 26.551243 ], [ 87.0312403, 26.554567 ], [ 87.0320062, 26.5555951 ], [ 87.0336873, 26.5577148 ], [ 87.0339324, 26.5580238 ], [ 87.0350768, 26.5592664 ], [ 87.0370513, 26.5618303 ], [ 87.0398453, 26.5650518 ], [ 87.0422565, 26.5683181 ], [ 87.0425997, 26.5698849 ], [ 87.0432981, 26.5770578 ], [ 87.043726, 26.5815348 ], [ 87.0446154, 26.5873071 ], [ 87.0464121, 26.5872095 ], [ 87.0481234, 26.5871166 ], [ 87.0539245, 26.5868017 ], [ 87.0565004, 26.58658 ], [ 87.0604845, 26.586533 ], [ 87.0611472, 26.5865191 ], [ 87.0635996, 26.5864676 ], [ 87.0650068, 26.5864586 ], [ 87.0670495, 26.5862488 ], [ 87.068991, 26.5859997 ], [ 87.0693119, 26.5860021 ], [ 87.0711578, 26.5860156 ], [ 87.0713772, 26.5857692 ], [ 87.0713948, 26.5856947 ], [ 87.0716791, 26.5844943 ], [ 87.0720157, 26.583073 ], [ 87.0724364, 26.5810128 ], [ 87.0729065, 26.5787106 ], [ 87.0730155, 26.5781768 ], [ 87.0728851, 26.5763724 ], [ 87.0726962, 26.5698966 ], [ 87.0723051, 26.5652045 ], [ 87.0722112, 26.5640785 ], [ 87.0720573, 26.5586981 ], [ 87.0720729, 26.5583343 ], [ 87.0723475, 26.5519452 ], [ 87.0723885, 26.5509924 ], [ 87.0724469, 26.5492248 ], [ 87.0724889, 26.5482146 ], [ 87.0725358, 26.5470799 ], [ 87.0725585, 26.5461212 ], [ 87.0726602, 26.5427705 ], [ 87.0730975, 26.5412901 ], [ 87.0734234, 26.54087 ], [ 87.0735468, 26.540711 ], [ 87.073678, 26.5405418 ], [ 87.0740775, 26.5400271 ], [ 87.075539, 26.5381429 ], [ 87.0767736, 26.5349428 ], [ 87.0784525, 26.5291811 ], [ 87.0788836, 26.5275031 ], [ 87.0789944, 26.5270723 ], [ 87.0790259, 26.5269495 ], [ 87.0799454, 26.5234007 ], [ 87.0800246, 26.5230624 ], [ 87.0807538, 26.5192536 ], [ 87.0813923, 26.5152457 ], [ 87.0818267, 26.511795 ], [ 87.0821346, 26.5087332 ], [ 87.0821605, 26.5084757 ], [ 87.082652, 26.5052825 ], [ 87.082678, 26.5051136 ], [ 87.0833978, 26.5007699 ], [ 87.0834102, 26.5006948 ], [ 87.0834609, 26.5003891 ], [ 87.0835112, 26.5000476 ], [ 87.0837629, 26.4983379 ], [ 87.0838308, 26.4978763 ], [ 87.0841059, 26.4958816 ], [ 87.0844038, 26.4937219 ], [ 87.0846171, 26.4921328 ], [ 87.085008, 26.4892198 ], [ 87.0850722, 26.4887417 ], [ 87.0855752, 26.4853709 ], [ 87.0856234, 26.4850477 ], [ 87.0859686, 26.4814285 ], [ 87.0866367, 26.4773338 ], [ 87.0869962, 26.4749421 ], [ 87.0871028, 26.4742327 ], [ 87.0876851, 26.4702624 ], [ 87.0880392, 26.4686026 ], [ 87.0882911, 26.4674221 ], [ 87.0883116, 26.4673063 ], [ 87.0884772, 26.4663699 ], [ 87.0889038, 26.4639584 ], [ 87.0894143, 26.4611756 ], [ 87.0899661, 26.458411 ], [ 87.0901592, 26.4574437 ], [ 87.0908171, 26.4540955 ], [ 87.0914995, 26.450408 ], [ 87.0941326, 26.4483326 ], [ 87.0985487, 26.4451012 ], [ 87.1028374, 26.4419066 ], [ 87.1050569, 26.440264 ], [ 87.1070897, 26.4387361 ], [ 87.1088877, 26.4373376 ], [ 87.1109859, 26.4357056 ], [ 87.1151379, 26.4327477 ], [ 87.1195551, 26.4294325 ], [ 87.1231309, 26.426759 ], [ 87.1268552, 26.4240223 ], [ 87.1300354, 26.4216423 ], [ 87.1301623, 26.4215473 ], [ 87.1303708, 26.4213913 ], [ 87.1313708, 26.4206429 ], [ 87.1350224, 26.4178204 ], [ 87.1391889, 26.4147691 ], [ 87.1392984, 26.4147246 ], [ 87.1402445, 26.4143402 ], [ 87.1435263, 26.4126045 ], [ 87.1441729, 26.4122625 ], [ 87.1461365, 26.4112416 ], [ 87.1471637, 26.4107075 ], [ 87.1509802, 26.4088528 ], [ 87.1512973, 26.4086987 ], [ 87.1518249, 26.4084423 ], [ 87.1540848, 26.4074751 ], [ 87.1551656, 26.4070125 ], [ 87.1561609, 26.4065865 ], [ 87.1616609, 26.4042328 ], [ 87.162451, 26.4040432 ], [ 87.1630778, 26.4038928 ], [ 87.1637172, 26.4038605 ], [ 87.1670643, 26.403682 ], [ 87.1686652, 26.4036011 ], [ 87.1709224, 26.4034062 ], [ 87.171617, 26.4033462 ], [ 87.1727739, 26.4034008 ], [ 87.1737254, 26.4035405 ], [ 87.1743164, 26.4036067 ], [ 87.1751283, 26.4036985 ], [ 87.1759853, 26.4037982 ], [ 87.1770972, 26.403987 ], [ 87.177228, 26.4040055 ], [ 87.1784677, 26.4041807 ], [ 87.1796147, 26.4043334 ], [ 87.1800231, 26.4043818 ], [ 87.181308, 26.4045357 ], [ 87.1869748, 26.4052143 ], [ 87.1879038, 26.4053256 ], [ 87.1885674, 26.4055013 ], [ 87.1889407, 26.4057485 ], [ 87.1874938, 26.4097917 ], [ 87.1868123, 26.4127778 ], [ 87.1868542, 26.4142558 ], [ 87.1910791, 26.4140379 ], [ 87.1953277, 26.4138486 ], [ 87.2014349, 26.413635 ], [ 87.2075309, 26.4134232 ], [ 87.2112868, 26.4132927 ], [ 87.2116935, 26.413136 ], [ 87.2119456, 26.4129006 ], [ 87.211833, 26.4125451 ], [ 87.2112149, 26.4120017 ], [ 87.2112098, 26.41187 ], [ 87.2112049, 26.4117804 ], [ 87.21131, 26.4115157 ], [ 87.2114977, 26.4113404 ], [ 87.2119312, 26.4109639 ], [ 87.211982, 26.4108659 ], [ 87.211432, 26.4099918 ], [ 87.2113209, 26.4089922 ], [ 87.2136521, 26.4083743 ], [ 87.2143052, 26.4080974 ], [ 87.2155398, 26.4075739 ], [ 87.2170435, 26.4068932 ], [ 87.2170553, 26.40683 ], [ 87.2170231, 26.4066499 ], [ 87.2170284, 26.4065682 ], [ 87.217066, 26.4064625 ], [ 87.217125, 26.4063448 ], [ 87.2174227, 26.4059988 ], [ 87.2175676, 26.4057538 ], [ 87.2178867, 26.4050955 ], [ 87.2179243, 26.4049394 ], [ 87.2179055, 26.4044877 ], [ 87.2179645, 26.4043412 ], [ 87.2180262, 26.4042571 ], [ 87.2181067, 26.4041778 ], [ 87.2185117, 26.4038823 ], [ 87.2188014, 26.4034883 ], [ 87.22018, 26.4034115 ], [ 87.220298, 26.4035364 ], [ 87.2204751, 26.4038679 ], [ 87.2204965, 26.4039688 ], [ 87.220577, 26.4040409 ], [ 87.220636, 26.4041226 ], [ 87.2206521, 26.4042187 ], [ 87.2206521, 26.4045214 ], [ 87.2206628, 26.4046175 ], [ 87.2207487, 26.4048 ], [ 87.2208077, 26.4048865 ], [ 87.2208828, 26.4049682 ], [ 87.2209901, 26.4049874 ], [ 87.2211027, 26.4049874 ], [ 87.22121, 26.4049778 ], [ 87.2214031, 26.4048721 ], [ 87.2214729, 26.4048 ], [ 87.221564, 26.4047328 ], [ 87.2217786, 26.404752 ], [ 87.2219717, 26.4048529 ], [ 87.2220522, 26.404925 ], [ 87.2221434, 26.4049874 ], [ 87.2222131, 26.4050595 ], [ 87.2222561, 26.4051508 ], [ 87.2222668, 26.4052469 ], [ 87.2222185, 26.4053334 ], [ 87.2221434, 26.4054151 ], [ 87.2221166, 26.4055111 ], [ 87.2221219, 26.405612 ], [ 87.2221863, 26.4056937 ], [ 87.2222722, 26.4057466 ], [ 87.2224116, 26.4059099 ], [ 87.2225296, 26.4059051 ], [ 87.2226262, 26.4058619 ], [ 87.2227442, 26.4058667 ], [ 87.222932, 26.4059532 ], [ 87.2230339, 26.4059916 ], [ 87.2231358, 26.405958 ], [ 87.2232377, 26.4059099 ], [ 87.2234255, 26.4057994 ], [ 87.2235328, 26.405761 ], [ 87.2236401, 26.4057562 ], [ 87.2237366, 26.405809 ], [ 87.2237796, 26.4058955 ], [ 87.2237849, 26.4059964 ], [ 87.223683, 26.4061934 ], [ 87.223447, 26.4064096 ], [ 87.2233558, 26.4064817 ], [ 87.2232968, 26.406573 ], [ 87.2232807, 26.4066739 ], [ 87.2233021, 26.4067748 ], [ 87.2233987, 26.4068228 ], [ 87.224037, 26.4069958 ], [ 87.2241336, 26.4070342 ], [ 87.2242033, 26.4071111 ], [ 87.2242141, 26.4072072 ], [ 87.2241497, 26.4072889 ], [ 87.2240263, 26.4073465 ], [ 87.2239083, 26.4073658 ], [ 87.2238117, 26.407409 ], [ 87.2237635, 26.4074955 ], [ 87.2237903, 26.4075964 ], [ 87.2238976, 26.4078895 ], [ 87.2239459, 26.407976 ], [ 87.2239619, 26.4080769 ], [ 87.2239673, 26.4081777 ], [ 87.223919, 26.408269 ], [ 87.2237849, 26.4084324 ], [ 87.2237366, 26.4085285 ], [ 87.2237205, 26.4086246 ], [ 87.2237205, 26.4087303 ], [ 87.2237581, 26.4088216 ], [ 87.2238976, 26.4089849 ], [ 87.223978, 26.4090522 ], [ 87.2240692, 26.4090954 ], [ 87.2241819, 26.4091195 ], [ 87.2242892, 26.4091098 ], [ 87.2243482, 26.4090234 ], [ 87.2243321, 26.4089321 ], [ 87.2242194, 26.4087447 ], [ 87.2242248, 26.4086486 ], [ 87.2242892, 26.4085621 ], [ 87.224375, 26.4085045 ], [ 87.2244823, 26.4084756 ], [ 87.2245949, 26.4084612 ], [ 87.2247988, 26.4084516 ], [ 87.2249061, 26.4084804 ], [ 87.2249812, 26.4085477 ], [ 87.2250241, 26.4086438 ], [ 87.2250831, 26.4087255 ], [ 87.2251743, 26.4087879 ], [ 87.2252762, 26.4088023 ], [ 87.2253782, 26.4087687 ], [ 87.2254586, 26.4086966 ], [ 87.2255605, 26.4087063 ], [ 87.2256464, 26.4087783 ], [ 87.2257, 26.40886 ], [ 87.2258127, 26.4088888 ], [ 87.2260272, 26.408884 ], [ 87.2262365, 26.4089369 ], [ 87.226333, 26.4089849 ], [ 87.2264242, 26.4090378 ], [ 87.2264886, 26.4091195 ], [ 87.2265208, 26.4092155 ], [ 87.2264725, 26.409302 ], [ 87.2263759, 26.4093501 ], [ 87.2261774, 26.4094366 ], [ 87.2260863, 26.409499 ], [ 87.2260863, 26.4096047 ], [ 87.2262526, 26.409893 ], [ 87.2262418, 26.4099891 ], [ 87.2261721, 26.410066 ], [ 87.2261506, 26.4101668 ], [ 87.2261989, 26.4102581 ], [ 87.2263867, 26.4103686 ], [ 87.2264349, 26.4104551 ], [ 87.2264135, 26.4105608 ], [ 87.2263437, 26.4106425 ], [ 87.2261667, 26.4107722 ], [ 87.2261399, 26.4108683 ], [ 87.2262365, 26.4109116 ], [ 87.2263384, 26.4109019 ], [ 87.2264457, 26.4108683 ], [ 87.2265476, 26.4108539 ], [ 87.2266549, 26.4108731 ], [ 87.2267461, 26.4109452 ], [ 87.2270679, 26.4116178 ], [ 87.2273147, 26.4116563 ], [ 87.2274435, 26.4117571 ], [ 87.2277224, 26.4122808 ], [ 87.2277921, 26.4123625 ], [ 87.2278941, 26.4124106 ], [ 87.227996, 26.4124154 ], [ 87.2281033, 26.4124154 ], [ 87.2283071, 26.4124057 ], [ 87.2284627, 26.412425 ], [ 87.2286183, 26.4124874 ], [ 87.2287148, 26.4126123 ], [ 87.2287255, 26.4133474 ], [ 87.2287631, 26.4134435 ], [ 87.2288221, 26.41353 ], [ 87.229203, 26.4136789 ], [ 87.2300935, 26.413751 ], [ 87.2317253, 26.4138236 ], [ 87.232891, 26.4138756 ], [ 87.2349173, 26.4139176 ], [ 87.2355899, 26.4139315 ], [ 87.2380554, 26.4140172 ], [ 87.2385311, 26.4140337 ], [ 87.2388619, 26.4140452 ], [ 87.2453079, 26.4142044 ], [ 87.2468355, 26.414274 ], [ 87.2475713, 26.4140014 ], [ 87.2479424, 26.4113694 ], [ 87.2491857, 26.4109028 ], [ 87.2498, 26.4093602 ], [ 87.2530627, 26.410676 ], [ 87.254469, 26.4103296 ], [ 87.2554922, 26.4108081 ], [ 87.2561361, 26.4111091 ], [ 87.2606873, 26.4094151 ], [ 87.2660797, 26.4056639 ], [ 87.2654381, 26.3986818 ], [ 87.2654591, 26.3954285 ], [ 87.265628, 26.3924966 ], [ 87.2656527, 26.3906328 ], [ 87.2642694, 26.3876766 ], [ 87.2643649, 26.386571 ], [ 87.264449, 26.38555 ], [ 87.265144, 26.3794959 ], [ 87.2654219, 26.3772729 ], [ 87.2658365, 26.3739558 ], [ 87.2675369, 26.3736066 ], [ 87.270929, 26.3729324 ], [ 87.2733551, 26.3727 ], [ 87.2733864, 26.372697 ], [ 87.2752501, 26.3728106 ], [ 87.2790575, 26.3729324 ], [ 87.2816532, 26.3727346 ], [ 87.2829905, 26.3727429 ], [ 87.2853076, 26.3732266 ], [ 87.2893642, 26.3737567 ], [ 87.2924627, 26.3717559 ], [ 87.2942219, 26.3705951 ], [ 87.2954103, 26.3697908 ], [ 87.2965897, 26.3690545 ], [ 87.2977277, 26.3683441 ], [ 87.2982272, 26.3681268 ], [ 87.3011321, 26.3663107 ], [ 87.3014909, 26.36623 ], [ 87.3035944, 26.3672634 ], [ 87.3094094, 26.3701637 ], [ 87.3122259, 26.3715997 ], [ 87.3128046, 26.3696402 ], [ 87.3132733, 26.3677337 ], [ 87.3147916, 26.3662934 ], [ 87.3162384, 26.3651788 ], [ 87.3168582, 26.3646184 ], [ 87.3176301, 26.3639013 ], [ 87.3183096, 26.3633301 ], [ 87.3192694, 26.3627119 ], [ 87.3205389, 26.3615201 ], [ 87.321816, 26.3603071 ], [ 87.3220825, 26.3601046 ], [ 87.3232312, 26.3594215 ], [ 87.32836, 26.3563598 ], [ 87.3323344, 26.3540904 ], [ 87.3356024, 26.3523126 ], [ 87.3367957, 26.3514939 ], [ 87.3383204, 26.3504479 ], [ 87.3388489, 26.349743 ], [ 87.3392744, 26.3486892 ], [ 87.340579, 26.347984 ], [ 87.3409384, 26.3477581 ], [ 87.3415006, 26.3479467 ], [ 87.341601, 26.3479732 ], [ 87.3420261, 26.3482087 ], [ 87.3421615, 26.3484239 ], [ 87.342656, 26.3486965 ], [ 87.3432702, 26.348995 ], [ 87.3437426, 26.3493638 ], [ 87.3444973, 26.3496167 ], [ 87.3478308, 26.3517636 ], [ 87.3487454, 26.3525318 ], [ 87.3531148, 26.3562021 ], [ 87.3582201, 26.3610975 ], [ 87.3562682, 26.3653627 ], [ 87.3552881, 26.3676615 ], [ 87.3533262, 26.3721222 ], [ 87.3542738, 26.3773365 ], [ 87.3547992, 26.3802284 ], [ 87.3551944, 26.3827904 ], [ 87.355818, 26.3865066 ], [ 87.3564723, 26.3883599 ], [ 87.3567165, 26.3894176 ], [ 87.3569646, 26.3895295 ], [ 87.3572727, 26.3899871 ], [ 87.3582978, 26.3916907 ], [ 87.3584158, 26.3918868 ], [ 87.3589115, 26.3928798 ], [ 87.3592438, 26.3935345 ], [ 87.3597369, 26.3943924 ], [ 87.3610179, 26.3963301 ], [ 87.3614912, 26.3971261 ], [ 87.3628802, 26.3994622 ], [ 87.3632895, 26.4002385 ], [ 87.3635316, 26.4006978 ], [ 87.3647336, 26.4024075 ], [ 87.3686008, 26.4081549 ], [ 87.3758537, 26.4070006 ], [ 87.3794569, 26.4103439 ], [ 87.3823693, 26.413371 ], [ 87.3860967, 26.4170849 ], [ 87.38843, 26.4191275 ], [ 87.3889473, 26.4191906 ], [ 87.3951565, 26.4199412 ], [ 87.4015929, 26.4207053 ], [ 87.4086452, 26.4212961 ], [ 87.4137585, 26.4219067 ], [ 87.4138565, 26.4220534 ], [ 87.4155136, 26.4222562 ], [ 87.4188966, 26.4227543 ], [ 87.4243125, 26.4226056 ], [ 87.427438, 26.4224961 ], [ 87.4315157, 26.4250302 ], [ 87.4326603, 26.4257415 ], [ 87.433934, 26.4267734 ], [ 87.4366319, 26.4286466 ], [ 87.4375662, 26.4292999 ], [ 87.4395271, 26.4306709 ], [ 87.4397365, 26.4308781 ], [ 87.4432073, 26.4331234 ], [ 87.4434911, 26.4331034 ], [ 87.4446075, 26.4330249 ], [ 87.4480122, 26.4342159 ], [ 87.4513435, 26.4354742 ], [ 87.4558592, 26.4371281 ], [ 87.4588215, 26.4382532 ], [ 87.4622854, 26.4392963 ], [ 87.4628626, 26.4394983 ], [ 87.4639078, 26.4398641 ], [ 87.4664904, 26.4402823 ], [ 87.4686198, 26.4399614 ], [ 87.4761825, 26.4384989 ], [ 87.4765971, 26.4384192 ], [ 87.479496, 26.4378621 ], [ 87.4799501, 26.4377011 ], [ 87.4811691, 26.4376012 ], [ 87.4825241, 26.4373556 ], [ 87.4889692, 26.4367781 ], [ 87.4940206, 26.4359095 ], [ 87.4954661, 26.4356 ], [ 87.4973172, 26.4352037 ], [ 87.5018563, 26.4341022 ], [ 87.5085371, 26.4325981 ], [ 87.5139056, 26.4313535 ], [ 87.5160757, 26.4308732 ], [ 87.5165767, 26.4302402 ], [ 87.5172127, 26.429793 ], [ 87.5177989, 26.4294927 ], [ 87.520581, 26.4281597 ], [ 87.5254197, 26.4258997 ], [ 87.5294746, 26.4238215 ], [ 87.529718, 26.4237084 ], [ 87.5314689, 26.4228953 ], [ 87.5337781, 26.4218229 ], [ 87.5368476, 26.4210764 ], [ 87.5370055, 26.4210316 ], [ 87.5391808, 26.4204456 ], [ 87.5402775, 26.4201491 ], [ 87.5468018, 26.4186405 ], [ 87.54751, 26.4184768 ], [ 87.5484388, 26.4160167 ], [ 87.5498289, 26.4136004 ], [ 87.5504261, 26.4117088 ], [ 87.5514516, 26.4090398 ], [ 87.5524372, 26.4067324 ], [ 87.5528258, 26.4058227 ], [ 87.5551311, 26.4047279 ], [ 87.5584668, 26.4031437 ], [ 87.5630489, 26.4009664 ], [ 87.567513, 26.3987512 ], [ 87.5689246, 26.3980722 ], [ 87.57065, 26.3973783 ], [ 87.5713651, 26.396949 ], [ 87.5735115, 26.395988 ], [ 87.5751653, 26.3955566 ], [ 87.5781206, 26.3948774 ], [ 87.5828217, 26.393632 ], [ 87.5876368, 26.3929387 ], [ 87.5884835, 26.3890971 ], [ 87.5871777, 26.3850866 ], [ 87.5872673, 26.3817481 ], [ 87.5940638, 26.3815266 ], [ 87.5956973, 26.3814157 ], [ 87.5966849, 26.3813532 ], [ 87.5971786, 26.3813 ], [ 87.5976942, 26.3812567 ], [ 87.5982292, 26.3812306 ], [ 87.599716, 26.3811916 ], [ 87.601014, 26.381022 ], [ 87.6012562, 26.3810152 ], [ 87.6019013, 26.3809647 ], [ 87.6022354, 26.3808464 ], [ 87.6034959, 26.3804653 ], [ 87.6046294, 26.3804001 ], [ 87.6057945, 26.3805202 ], [ 87.6060674, 26.3806258 ], [ 87.6071019, 26.3811844 ], [ 87.6076411, 26.3818543 ], [ 87.6089923, 26.38452 ], [ 87.6101949, 26.3864527 ], [ 87.6111773, 26.3886501 ], [ 87.6116256, 26.3892315 ], [ 87.6120215, 26.3902937 ], [ 87.616505, 26.3912234 ], [ 87.6195356, 26.3918285 ], [ 87.6198772, 26.3918967 ], [ 87.6202802, 26.3919772 ], [ 87.6216985, 26.39253 ], [ 87.6231643, 26.3928554 ], [ 87.6245244, 26.3931929 ], [ 87.6273988, 26.3938389 ], [ 87.62881, 26.3938127 ], [ 87.6294769, 26.3937983 ], [ 87.6319064, 26.3938949 ], [ 87.6368412, 26.3938862 ], [ 87.64049, 26.3938312 ], [ 87.6440975, 26.3938138 ], [ 87.6473285, 26.3936678 ], [ 87.6516462, 26.3935775 ], [ 87.6508792, 26.3998449 ], [ 87.650167, 26.4048611 ], [ 87.6501367, 26.4050745 ], [ 87.6500934, 26.4053797 ], [ 87.6500098, 26.4060072 ], [ 87.6534468, 26.4072223 ], [ 87.6567045, 26.4083741 ], [ 87.6609841, 26.4095908 ], [ 87.6666853, 26.4119538 ], [ 87.6671022, 26.4120901 ], [ 87.6701235, 26.4130774 ], [ 87.6747976, 26.414696 ], [ 87.6770269, 26.4155999 ], [ 87.6779435, 26.4159333 ], [ 87.6778814, 26.4182178 ], [ 87.6778637, 26.4188684 ], [ 87.677732, 26.4237173 ], [ 87.6776721, 26.4259218 ], [ 87.6775617, 26.4299849 ], [ 87.6774084, 26.4356246 ], [ 87.6792475, 26.4356587 ], [ 87.6921402, 26.4356957 ], [ 87.6929501, 26.4346727 ], [ 87.6936781, 26.4337515 ], [ 87.6937114, 26.4337109 ], [ 87.6980226, 26.4285812 ], [ 87.6984439, 26.4284662 ], [ 87.7015872, 26.4282201 ], [ 87.7082342, 26.4278663 ], [ 87.709505, 26.4276842 ], [ 87.7100506, 26.4268927 ], [ 87.7103537, 26.4268134 ], [ 87.7111675, 26.4271738 ], [ 87.7115398, 26.4267903 ], [ 87.7124397, 26.4269126 ], [ 87.7125241, 26.4268443 ], [ 87.7126064, 26.4267777 ], [ 87.7126321, 26.426757 ], [ 87.712629, 26.4266817 ], [ 87.7126232, 26.4265386 ], [ 87.7126196, 26.4264513 ], [ 87.712613, 26.426387 ], [ 87.7125638, 26.4259067 ], [ 87.7138236, 26.4250786 ], [ 87.7141423, 26.4243881 ], [ 87.7139291, 26.4237393 ], [ 87.7140904, 26.423278 ], [ 87.7141307, 26.4232416 ], [ 87.7143572, 26.423037 ], [ 87.7148103, 26.4226278 ], [ 87.7152572, 26.4218886 ], [ 87.7158904, 26.4217894 ], [ 87.7160019, 26.4217719 ], [ 87.7162004, 26.4223388 ], [ 87.7170631, 26.4225055 ], [ 87.7175435, 26.4222417 ], [ 87.7179133, 26.4220387 ], [ 87.7184733, 26.4222804 ], [ 87.7189559, 26.4215273 ], [ 87.7188255, 26.4208827 ], [ 87.7195516, 26.4209104 ], [ 87.7203884, 26.4208266 ], [ 87.7212589, 26.419505 ], [ 87.7225985, 26.4169912 ], [ 87.724266, 26.4168261 ], [ 87.7238097, 26.415537 ], [ 87.7233972, 26.4146803 ], [ 87.7235952, 26.4138024 ], [ 87.7228969, 26.412613 ], [ 87.7273214, 26.4106285 ], [ 87.727965, 26.4103088 ], [ 87.7301637, 26.4092167 ], [ 87.7336941, 26.40762 ], [ 87.7353033, 26.4105848 ], [ 87.7371514, 26.4139898 ], [ 87.739077, 26.4177455 ], [ 87.745877, 26.4179095 ], [ 87.7480241, 26.4173126 ], [ 87.749396, 26.4163694 ], [ 87.7504487, 26.4124945 ], [ 87.7512946, 26.4108815 ], [ 87.7530065, 26.4108418 ], [ 87.7533817, 26.4099987 ], [ 87.7533295, 26.4082391 ], [ 87.7533254, 26.4080993 ], [ 87.7535359, 26.4081313 ], [ 87.7554524, 26.4084228 ], [ 87.757816, 26.4087902 ], [ 87.7588474, 26.4088392 ], [ 87.7599646, 26.4089857 ], [ 87.7581987, 26.4116807 ], [ 87.7577261, 26.4143387 ], [ 87.762218, 26.4204358 ], [ 87.7681511, 26.4212356 ], [ 87.769351, 26.4215912 ], [ 87.7697712, 26.422075 ], [ 87.7727882, 26.4255479 ], [ 87.7747032, 26.4268778 ], [ 87.7751846, 26.4285635 ], [ 87.7764754, 26.4292526 ], [ 87.7769346, 26.4307864 ], [ 87.7761651, 26.43162 ], [ 87.7756438, 26.4319756 ], [ 87.7755569, 26.4326425 ], [ 87.7766119, 26.4333315 ], [ 87.7779028, 26.4339095 ], [ 87.778151, 26.4348097 ], [ 87.7776421, 26.4351098 ], [ 87.7762644, 26.4346652 ], [ 87.7745394, 26.4346557 ], [ 87.7741889, 26.4361431 ], [ 87.7739053, 26.4373467 ], [ 87.7738488, 26.4375863 ], [ 87.774046, 26.4382298 ], [ 87.7736502, 26.438731 ], [ 87.773088, 26.439446 ], [ 87.7728062, 26.4402869 ], [ 87.7737777, 26.4402199 ], [ 87.7747427, 26.4398995 ], [ 87.7753276, 26.4401742 ], [ 87.7756122, 26.4405569 ], [ 87.7758843, 26.4414135 ], [ 87.7757526, 26.4428594 ], [ 87.7760854, 26.4444106 ], [ 87.7766127, 26.4458219 ], [ 87.7766039, 26.4473228 ], [ 87.7776308, 26.4481872 ], [ 87.777543, 26.4490515 ], [ 87.7767093, 26.4494994 ], [ 87.7755595, 26.4492716 ], [ 87.7751997, 26.4486194 ], [ 87.7757614, 26.4476764 ], [ 87.7752831, 26.4474183 ], [ 87.7750178, 26.4472751 ], [ 87.7734167, 26.4475529 ], [ 87.7733813, 26.4476049 ], [ 87.7724858, 26.4489197 ], [ 87.772461, 26.450131 ], [ 87.7740247, 26.4503058 ], [ 87.776667, 26.450278 ], [ 87.7769125, 26.4509978 ], [ 87.7765385, 26.4514969 ], [ 87.7756784, 26.4523063 ], [ 87.7762137, 26.4531785 ], [ 87.7779251, 26.4536578 ], [ 87.779696, 26.4521098 ], [ 87.780508, 26.4523535 ], [ 87.7802504, 26.4529034 ], [ 87.7810728, 26.4537791 ], [ 87.7803103, 26.4539567 ], [ 87.7801336, 26.4551206 ], [ 87.7806, 26.4557419 ], [ 87.7813164, 26.456226 ], [ 87.7813941, 26.4566253 ], [ 87.7827498, 26.458085 ], [ 87.7831043, 26.4579906 ], [ 87.7845292, 26.4574104 ], [ 87.7849806, 26.4576196 ], [ 87.7851418, 26.457981 ], [ 87.7849561, 26.4588234 ], [ 87.7851246, 26.4593946 ], [ 87.7856846, 26.4597584 ], [ 87.7861692, 26.4600152 ], [ 87.7862785, 26.4600731 ], [ 87.7868806, 26.4594697 ], [ 87.7891864, 26.4593184 ], [ 87.7892379, 26.4593361 ], [ 87.7901255, 26.4596406 ], [ 87.7900465, 26.4612277 ], [ 87.7898167, 26.4618836 ], [ 87.7894848, 26.4622334 ], [ 87.7892504, 26.4624516 ], [ 87.7886949, 26.4622805 ], [ 87.7872686, 26.4621014 ], [ 87.7859171, 26.4631385 ], [ 87.7848112, 26.4655112 ], [ 87.7860224, 26.4656684 ], [ 87.7864658, 26.4655733 ], [ 87.7874025, 26.4660954 ], [ 87.7876828, 26.4669942 ], [ 87.7909097, 26.4661841 ], [ 87.791017, 26.4663439 ], [ 87.7919995, 26.4678076 ], [ 87.7923701, 26.4683597 ], [ 87.7924509, 26.46848 ], [ 87.792803, 26.4690046 ], [ 87.8007714, 26.4663158 ], [ 87.8036617, 26.4647455 ], [ 87.8055188, 26.4642901 ], [ 87.8078069, 26.4632051 ], [ 87.8109459, 26.4620293 ], [ 87.8116151, 26.461858 ], [ 87.8155154, 26.4602628 ], [ 87.8160143, 26.4600588 ], [ 87.8170755, 26.4591172 ], [ 87.8175886, 26.4586618 ], [ 87.8214133, 26.4552679 ], [ 87.8227812, 26.4542306 ], [ 87.8229499, 26.4536652 ], [ 87.8295338, 26.4498447 ], [ 87.8295256, 26.4497886 ], [ 87.8288352, 26.4450519 ], [ 87.8281886, 26.4410479 ], [ 87.8291358, 26.4402359 ], [ 87.8339639, 26.4391603 ], [ 87.8376648, 26.4384449 ], [ 87.8415062, 26.4377605 ], [ 87.8486506, 26.4368904 ], [ 87.8509392, 26.4453237 ], [ 87.861303, 26.4489596 ], [ 87.8614481, 26.4491764 ], [ 87.8606389, 26.4500027 ], [ 87.8606576, 26.4513069 ], [ 87.8616183, 26.4517447 ], [ 87.8619955, 26.4531814 ], [ 87.8611797, 26.4538319 ], [ 87.8593223, 26.4548496 ], [ 87.8581736, 26.4566737 ], [ 87.8584814, 26.4582792 ], [ 87.8585249, 26.4593755 ], [ 87.8593504, 26.4595134 ], [ 87.8594134, 26.459753 ], [ 87.8590286, 26.4602146 ], [ 87.8588086, 26.4607909 ], [ 87.8582208, 26.4612512 ], [ 87.8579754, 26.4641024 ], [ 87.8598091, 26.463744 ], [ 87.8606576, 26.4637848 ], [ 87.8625203, 26.4643518 ], [ 87.8633734, 26.4659616 ], [ 87.8632132, 26.4679773 ], [ 87.8674936, 26.4700928 ], [ 87.8715352, 26.4713977 ], [ 87.8792276, 26.4743199 ], [ 87.8841935, 26.4759687 ], [ 87.8856851, 26.4764446 ], [ 87.8875006, 26.4842824 ], [ 87.887693, 26.4851129 ], [ 87.8881188, 26.4869511 ], [ 87.900005, 26.477433 ], [ 87.9036145, 26.4700609 ], [ 87.9046757, 26.4678456 ], [ 87.9059994, 26.4650823 ], [ 87.9065168, 26.4645288 ], [ 87.9065642, 26.4644781 ], [ 87.9075979, 26.4633725 ], [ 87.9088256, 26.4608978 ], [ 87.9088639, 26.4608205 ], [ 87.9094432, 26.4578132 ], [ 87.9073328, 26.4558688 ], [ 87.8983782, 26.4489376 ], [ 87.9083779, 26.4480797 ], [ 87.9134943, 26.447674 ], [ 87.9161587, 26.4474627 ], [ 87.9196151, 26.4471388 ], [ 87.9233817, 26.4467859 ], [ 87.9235762, 26.4466172 ], [ 87.925556, 26.445 ], [ 87.9252797, 26.4404207 ], [ 87.9247584, 26.4398462 ], [ 87.9224575, 26.4373105 ], [ 87.9206014, 26.4364111 ], [ 87.918579, 26.436243 ], [ 87.9171219, 26.435308 ], [ 87.9162139, 26.4342021 ], [ 87.9159766, 26.4316439 ], [ 87.9167976, 26.4301869 ], [ 87.9235774, 26.4286962 ], [ 87.9247903, 26.4282815 ], [ 87.9255418, 26.4276878 ], [ 87.9255824, 26.4276557 ], [ 87.9258798, 26.4274207 ], [ 87.9264273, 26.4253761 ], [ 87.9262078, 26.4207179 ], [ 87.9263559, 26.4182197 ], [ 87.9269206, 26.4175272 ], [ 87.9275717, 26.4174 ], [ 87.9294174, 26.4174918 ], [ 87.9304719, 26.4181565 ], [ 87.931977, 26.4181941 ], [ 87.9343506, 26.4167898 ], [ 87.9381842, 26.4146074 ], [ 87.9394686, 26.4137656 ], [ 87.9397382, 26.4135889 ], [ 87.9401972, 26.413288 ], [ 87.9416581, 26.4124678 ], [ 87.9439478, 26.4111823 ], [ 87.9462239, 26.4097512 ], [ 87.9484501, 26.4086059 ], [ 87.952945, 26.4059034 ], [ 87.960801, 26.4006707 ], [ 87.9657277, 26.3973093 ], [ 87.9688606, 26.3967657 ], [ 87.9782146, 26.3950518 ], [ 87.9788502, 26.3949367 ], [ 87.9908094, 26.3928661 ], [ 87.9916822, 26.3927155 ], [ 87.9917899, 26.3840935 ], [ 87.9918251, 26.3782879 ], [ 87.9918653, 26.375548 ], [ 87.9918822, 26.3735599 ], [ 87.9919263, 26.3713819 ], [ 87.9917193, 26.3710692 ], [ 87.9915148, 26.3709908 ], [ 87.9913499, 26.3708613 ], [ 87.9913143, 26.3706408 ], [ 87.9914234, 26.3703657 ], [ 87.9916746, 26.3700452 ], [ 87.9919994, 26.369736 ], [ 87.9922455, 26.3696451 ], [ 87.9926768, 26.369586 ], [ 87.9927758, 26.3695019 ], [ 87.9928671, 26.3694223 ], [ 87.9929737, 26.3694041 ], [ 87.9931132, 26.36942 ], [ 87.9931741, 26.3695633 ], [ 87.9931691, 26.3697656 ], [ 87.9931589, 26.3700406 ], [ 87.9931995, 26.370102 ], [ 87.9933847, 26.3701247 ], [ 87.9934811, 26.3700406 ], [ 87.9934839, 26.369759 ], [ 87.9935048, 26.3697017 ], [ 87.9936131, 26.3696883 ], [ 87.9936917, 26.3696428 ], [ 87.9937805, 26.369395 ], [ 87.9938414, 26.3691814 ], [ 87.9936892, 26.3691473 ], [ 87.9935699, 26.3692132 ], [ 87.9934076, 26.3691973 ], [ 87.9933568, 26.368979 ], [ 87.9933314, 26.3688131 ], [ 87.993367, 26.3687131 ], [ 87.9935623, 26.3685835 ], [ 87.9938719, 26.3685858 ], [ 87.9939759, 26.3686608 ], [ 87.9941154, 26.3687335 ], [ 87.9942144, 26.3687108 ], [ 87.9943184, 26.3685949 ], [ 87.9943489, 26.3684039 ], [ 87.9942829, 26.3682198 ], [ 87.9942068, 26.3679674 ], [ 87.9942476, 26.3678828 ], [ 87.9944224, 26.3678303 ], [ 87.9945314, 26.3678381 ], [ 87.9945863, 26.3678755 ], [ 87.9946838, 26.3680084 ], [ 87.9948309, 26.3680402 ], [ 87.9949502, 26.3679902 ], [ 87.9950415, 26.3677606 ], [ 87.9950285, 26.3676098 ], [ 87.9949223, 26.3673355 ], [ 87.9950948, 26.3673014 ], [ 87.9952267, 26.36734 ], [ 87.995275, 26.3674219 ], [ 87.9954957, 26.3673991 ], [ 87.9956048, 26.3670945 ], [ 87.9955667, 26.3669399 ], [ 87.9956149, 26.3667831 ], [ 87.9958002, 26.3665785 ], [ 87.9958052, 26.3663671 ], [ 87.9956657, 26.3662602 ], [ 87.9954576, 26.3661625 ], [ 87.9953764, 26.3659215 ], [ 87.9954881, 26.3657396 ], [ 87.9957443, 26.3656123 ], [ 87.9960869, 26.3656169 ], [ 87.9963786, 26.3656828 ], [ 87.996574, 26.3656669 ], [ 87.9967288, 26.3656055 ], [ 87.9967618, 26.3653918 ], [ 87.996848, 26.365219 ], [ 87.9972971, 26.3651713 ], [ 87.9983399, 26.3650235 ], [ 87.998652, 26.3650736 ], [ 87.9989311, 26.3652645 ], [ 87.99903, 26.3654737 ], [ 87.9991629, 26.3656032 ], [ 87.9993376, 26.3656509 ], [ 87.9995936, 26.3655122 ], [ 87.9996884, 26.365518 ], [ 87.9997338, 26.365685 ], [ 87.9997149, 26.3658584 ], [ 87.999627, 26.3661903 ], [ 87.9994877, 26.3664099 ], [ 87.9994809, 26.3665406 ], [ 87.9995567, 26.3666128 ], [ 87.9996576, 26.3666512 ], [ 87.9998251, 26.3666603 ], [ 88.0001169, 26.366924 ], [ 88.0002666, 26.366899 ], [ 88.0006472, 26.3667308 ], [ 88.0007892, 26.3665966 ], [ 88.0007969, 26.3664989 ], [ 88.0007487, 26.3663488 ], [ 88.0007836, 26.3662395 ], [ 88.0009037, 26.3661605 ], [ 88.0011008, 26.3661092 ], [ 88.0012637, 26.3661488 ], [ 88.0013348, 26.366217 ], [ 88.0013271, 26.3663216 ], [ 88.0012573, 26.3664302 ], [ 88.0012434, 26.3665375 ], [ 88.0013297, 26.3666012 ], [ 88.0015174, 26.3665762 ], [ 88.0016443, 26.3663193 ], [ 88.0017991, 26.3661715 ], [ 88.0016448, 26.3659811 ], [ 88.0015662, 26.3658991 ], [ 88.0015791, 26.365712 ], [ 88.0017948, 26.3655497 ], [ 88.0020112, 26.3655658 ], [ 88.0021157, 26.3657052 ], [ 88.0020669, 26.3659081 ], [ 88.0021746, 26.3659674 ], [ 88.0023243, 26.3659533 ], [ 88.0024156, 26.365976 ], [ 88.0025374, 26.3659056 ], [ 88.0026034, 26.3655327 ], [ 88.0025475, 26.365244 ], [ 88.0025805, 26.3650963 ], [ 88.0028216, 26.3648598 ], [ 88.0032199, 26.3646939 ], [ 88.0036665, 26.3646598 ], [ 88.0039684, 26.3647007 ], [ 88.0041435, 26.3648848 ], [ 88.0043084, 26.364928 ], [ 88.0045266, 26.3648667 ], [ 88.004623, 26.3647121 ], [ 88.0045773, 26.3643188 ], [ 88.0043743, 26.3640005 ], [ 88.0044417, 26.363877 ], [ 88.0046289, 26.3636827 ], [ 88.0047143, 26.3635845 ], [ 88.0048463, 26.3636732 ], [ 88.0049909, 26.3636572 ], [ 88.0051228, 26.3634708 ], [ 88.0052192, 26.3632776 ], [ 88.0053309, 26.3632299 ], [ 88.0053512, 26.3631276 ], [ 88.0053283, 26.3628434 ], [ 88.0050975, 26.362757 ], [ 88.0051076, 26.3626797 ], [ 88.0052167, 26.3625388 ], [ 88.0053516, 26.3623564 ], [ 88.0053811, 26.3622573 ], [ 88.0055069, 26.3622553 ], [ 88.0056237, 26.362334 ], [ 88.005745, 26.3621723 ], [ 88.0057357, 26.3621117 ], [ 88.0057039, 26.3620591 ], [ 88.00561, 26.3618295 ], [ 88.0056277, 26.3616885 ], [ 88.0057394, 26.361568 ], [ 88.0058834, 26.3616177 ], [ 88.0059221, 26.3616635 ], [ 88.0058662, 26.3617203 ], [ 88.0058358, 26.3618681 ], [ 88.0059068, 26.3619272 ], [ 88.006092, 26.3619363 ], [ 88.0062874, 26.361884 ], [ 88.006328, 26.3617635 ], [ 88.0063331, 26.3614748 ], [ 88.0062809, 26.3612507 ], [ 88.0062926, 26.3611325 ], [ 88.006412, 26.3610778 ], [ 88.0065593, 26.3610964 ], [ 88.0066536, 26.3611236 ], [ 88.0067465, 26.3612093 ], [ 88.0068724, 26.3612615 ], [ 88.0070205, 26.3610705 ], [ 88.0072089, 26.3610329 ], [ 88.0078433, 26.3611357 ], [ 88.0148327, 26.3623374 ], [ 88.0190385, 26.3631081 ], [ 88.0209717, 26.3633612 ], [ 88.0258534, 26.3642194 ], [ 88.0270577, 26.3644451 ], [ 88.0301876, 26.3650361 ], [ 88.0299271, 26.3659502 ], [ 88.0295506, 26.3665928 ], [ 88.0291383, 26.3670586 ], [ 88.0283364, 26.3673867 ], [ 88.0277873, 26.3679723 ], [ 88.0274309, 26.3684145 ], [ 88.0272675, 26.3689754 ], [ 88.0271608, 26.3693023 ], [ 88.0268898, 26.3694031 ], [ 88.0264648, 26.3702736 ], [ 88.0260411, 26.3708457 ], [ 88.0260943, 26.3713984 ], [ 88.0265146, 26.3722392 ], [ 88.0266839, 26.3727463 ], [ 88.0268867, 26.3731818 ], [ 88.0270165, 26.3736905 ], [ 88.0273531, 26.3741923 ], [ 88.0284584, 26.3753536 ], [ 88.0285769, 26.3757302 ], [ 88.0290506, 26.3761081 ], [ 88.0296187, 26.3762227 ], [ 88.0300965, 26.3761061 ], [ 88.0304915, 26.3760727 ], [ 88.0308665, 26.3763675 ], [ 88.0314653, 26.3769333 ], [ 88.0316824, 26.3774049 ], [ 88.0315903, 26.3776819 ], [ 88.0314653, 26.3780297 ], [ 88.03111, 26.3784188 ], [ 88.0307481, 26.3786251 ], [ 88.0303862, 26.3787901 ], [ 88.0300638, 26.3788078 ], [ 88.0297941, 26.3787135 ], [ 88.0294388, 26.3785366 ], [ 88.0292019, 26.3783893 ], [ 88.028919, 26.378295 ], [ 88.0287677, 26.3782478 ], [ 88.0284782, 26.3784305 ], [ 88.0281229, 26.3787547 ], [ 88.0280571, 26.3791084 ], [ 88.0282281, 26.3792852 ], [ 88.0283795, 26.3794739 ], [ 88.0284255, 26.3795858 ], [ 88.0284255, 26.3797509 ], [ 88.0283005, 26.3798629 ], [ 88.028011, 26.3799218 ], [ 88.0277742, 26.3799572 ], [ 88.027557, 26.3800044 ], [ 88.027432, 26.3801281 ], [ 88.0273399, 26.3802755 ], [ 88.0271886, 26.3805113 ], [ 88.0271754, 26.3808472 ], [ 88.0272215, 26.3814131 ], [ 88.0271491, 26.3817903 ], [ 88.0270636, 26.3820615 ], [ 88.0268859, 26.3822737 ], [ 88.0267017, 26.3824387 ], [ 88.0266096, 26.3826037 ], [ 88.0265964, 26.3827806 ], [ 88.0267017, 26.3829515 ], [ 88.0268464, 26.3829869 ], [ 88.0273136, 26.383093 ], [ 88.0278531, 26.3830163 ], [ 88.0283663, 26.382981 ], [ 88.0288269, 26.383034 ], [ 88.029044, 26.3830694 ], [ 88.0292151, 26.3831932 ], [ 88.0293527, 26.3833471 ], [ 88.0295534, 26.3835652 ], [ 88.0296521, 26.3835888 ], [ 88.0298857, 26.38358 ], [ 88.030037, 26.3835122 ], [ 88.0301587, 26.3833972 ], [ 88.0301982, 26.3832499 ], [ 88.0301949, 26.3830996 ], [ 88.0301883, 26.3828019 ], [ 88.0301784, 26.3825485 ], [ 88.0302903, 26.3823422 ], [ 88.0303725, 26.3822538 ], [ 88.0305074, 26.3821889 ], [ 88.0306291, 26.3822272 ], [ 88.0307344, 26.3823068 ], [ 88.0308298, 26.3824748 ], [ 88.0309022, 26.3826664 ], [ 88.0309384, 26.3828373 ], [ 88.0310371, 26.383241 ], [ 88.0311324, 26.3837225 ], [ 88.0312673, 26.3841652 ], [ 88.031491, 26.3847841 ], [ 88.0315739, 26.3850352 ], [ 88.0316035, 26.3854207 ], [ 88.0316002, 26.3857449 ], [ 88.0314983, 26.3859924 ], [ 88.03137, 26.3862459 ], [ 88.0312384, 26.3864286 ], [ 88.0310772, 26.3867351 ], [ 88.0309721, 26.3870527 ], [ 88.0309392, 26.387368 ], [ 88.0309853, 26.387869 ], [ 88.0310379, 26.3883553 ], [ 88.0312353, 26.3886058 ], [ 88.0315083, 26.3887796 ], [ 88.0319261, 26.3888946 ], [ 88.0321104, 26.3889152 ], [ 88.0323801, 26.3888415 ], [ 88.0326894, 26.3885969 ], [ 88.033015, 26.3881991 ], [ 88.0331006, 26.387925 ], [ 88.0332091, 26.3876922 ], [ 88.0333539, 26.3875537 ], [ 88.0334888, 26.3874889 ], [ 88.0337388, 26.3874889 ], [ 88.0338704, 26.387589 ], [ 88.0340645, 26.3879456 ], [ 88.0341138, 26.3881578 ], [ 88.0341171, 26.388479 ], [ 88.0340579, 26.3888356 ], [ 88.0341281, 26.3894138 ], [ 88.0340445, 26.3898435 ], [ 88.0340906, 26.390371 ], [ 88.0341827, 26.390701 ], [ 88.0343735, 26.3909957 ], [ 88.0344196, 26.3912138 ], [ 88.0344623, 26.3913317 ], [ 88.0344426, 26.3914849 ], [ 88.034433, 26.391679 ], [ 88.0345386, 26.3919454 ], [ 88.0346084, 26.3920871 ], [ 88.0346968, 26.3922205 ], [ 88.0347759, 26.392308 ], [ 88.0349294, 26.3924122 ], [ 88.0351713, 26.3924205 ], [ 88.0353202, 26.392408 ], [ 88.0355296, 26.3923205 ], [ 88.0355994, 26.3921496 ], [ 88.035376, 26.3918496 ], [ 88.0352876, 26.391662 ], [ 88.0352551, 26.3914661 ], [ 88.0353202, 26.3913078 ], [ 88.0354784, 26.3911327 ], [ 88.0356133, 26.3910827 ], [ 88.0357901, 26.3910661 ], [ 88.0359622, 26.3911161 ], [ 88.036153, 26.3912286 ], [ 88.0362693, 26.3913286 ], [ 88.0364368, 26.391487 ], [ 88.0366854, 26.3915643 ], [ 88.0369041, 26.3916018 ], [ 88.0370912, 26.3915995 ], [ 88.0373425, 26.3916287 ], [ 88.0376588, 26.3916453 ], [ 88.0378542, 26.3917329 ], [ 88.037924, 26.3919246 ], [ 88.038045, 26.3920746 ], [ 88.0380962, 26.3923122 ], [ 88.0379705, 26.3926247 ], [ 88.0378775, 26.3929081 ], [ 88.0375472, 26.3932123 ], [ 88.0375425, 26.3934624 ], [ 88.0376635, 26.3935999 ], [ 88.0377844, 26.3937458 ], [ 88.0379891, 26.3939041 ], [ 88.0381334, 26.3940292 ], [ 88.0383381, 26.3941542 ], [ 88.0387242, 26.3942584 ], [ 88.0390313, 26.3942792 ], [ 88.0395477, 26.3942 ], [ 88.0398408, 26.3941458 ], [ 88.0401589, 26.3941356 ], [ 88.0403498, 26.3942332 ], [ 88.0403918, 26.3944305 ], [ 88.0405169, 26.3946972 ], [ 88.0405411, 26.3948601 ], [ 88.0408614, 26.3951383 ], [ 88.0411843, 26.3953484 ], [ 88.0415891, 26.3954192 ], [ 88.041845, 26.3956068 ], [ 88.0420776, 26.3957068 ], [ 88.042259, 26.3957735 ], [ 88.0423521, 26.3957818 ], [ 88.0425661, 26.395761 ], [ 88.0427103, 26.3957235 ], [ 88.0430639, 26.3956109 ], [ 88.0432919, 26.3956901 ], [ 88.0434733, 26.3957818 ], [ 88.0435599, 26.395965 ], [ 88.0437059, 26.3961782 ], [ 88.0438075, 26.3962974 ], [ 88.0438611, 26.3964978 ], [ 88.0438004, 26.3966755 ], [ 88.043779, 26.3968813 ], [ 88.0438824, 26.3970207 ], [ 88.0439382, 26.3971996 ], [ 88.0441211, 26.3974502 ], [ 88.0445495, 26.3978781 ], [ 88.0448061, 26.3979606 ], [ 88.0449804, 26.3979223 ], [ 88.0452107, 26.3978368 ], [ 88.0453357, 26.3977513 ], [ 88.0456274, 26.3974635 ], [ 88.0457063, 26.3973256 ], [ 88.0457741, 26.3972852 ], [ 88.0459279, 26.3972357 ], [ 88.0461869, 26.3972404 ], [ 88.0465573, 26.3972408 ], [ 88.0469316, 26.3973664 ], [ 88.0472298, 26.3976325 ], [ 88.0474977, 26.3979391 ], [ 88.0474683, 26.3980813 ], [ 88.0472075, 26.3981814 ], [ 88.047088, 26.3982427 ], [ 88.0468621, 26.3984553 ], [ 88.0466277, 26.3985928 ], [ 88.0463921, 26.398672 ], [ 88.0461314, 26.398752 ], [ 88.0458062, 26.3987444 ], [ 88.0455561, 26.3988357 ], [ 88.0453884, 26.3989683 ], [ 88.0453074, 26.3990934 ], [ 88.0452242, 26.399317 ], [ 88.0451649, 26.3994981 ], [ 88.0451083, 26.3997398 ], [ 88.0450758, 26.3999496 ], [ 88.0451581, 26.4000292 ], [ 88.0452593, 26.4000721 ], [ 88.0454376, 26.4000959 ], [ 88.0458127, 26.3999466 ], [ 88.0460891, 26.3999673 ], [ 88.0462667, 26.3999908 ], [ 88.0465794, 26.4000428 ], [ 88.0466338, 26.4002028 ], [ 88.0467148, 26.4004826 ], [ 88.0469426, 26.4005675 ], [ 88.0470297, 26.4008445 ], [ 88.0470692, 26.4009388 ], [ 88.0471219, 26.4011304 ], [ 88.0472151, 26.4014189 ], [ 88.0472863, 26.4015223 ], [ 88.0474245, 26.4016048 ], [ 88.0476482, 26.4016195 ], [ 88.0477634, 26.4014633 ], [ 88.047862, 26.4012364 ], [ 88.0478851, 26.4010626 ], [ 88.0478851, 26.4008917 ], [ 88.0478949, 26.400706 ], [ 88.0479015, 26.4005882 ], [ 88.0479015, 26.4004291 ], [ 88.0479542, 26.4002611 ], [ 88.0480167, 26.4001609 ], [ 88.0481384, 26.4000755 ], [ 88.0483656, 26.4000133 ], [ 88.0485068, 26.400046 ], [ 88.0486925, 26.400119 ], [ 88.0489352, 26.3999796 ], [ 88.0490631, 26.4000208 ], [ 88.0494469, 26.4001904 ], [ 88.0496566, 26.4002545 ], [ 88.0504241, 26.4001904 ], [ 88.0507361, 26.4001354 ], [ 88.0508999, 26.4000666 ], [ 88.0510527, 26.39982 ], [ 88.0511506, 26.3996405 ], [ 88.0514519, 26.3994061 ], [ 88.051944, 26.400833 ], [ 88.0526444, 26.4013817 ], [ 88.054476, 26.4009287 ], [ 88.0558155, 26.4035119 ], [ 88.0557244, 26.4048776 ], [ 88.0556429, 26.4052124 ], [ 88.0553098, 26.4057851 ], [ 88.0556514, 26.405832 ], [ 88.0556935, 26.4058378 ], [ 88.0561855, 26.4058799 ], [ 88.056232, 26.4058746 ], [ 88.0564388, 26.4058508 ], [ 88.0566005, 26.40587 ], [ 88.0567262, 26.4058849 ], [ 88.0568476, 26.4059804 ], [ 88.0570538, 26.4062392 ], [ 88.0574228, 26.4067289 ], [ 88.0576579, 26.4068844 ], [ 88.0583169, 26.4071807 ], [ 88.0587469, 26.4076362 ], [ 88.058997, 26.408239 ], [ 88.059394, 26.409339 ], [ 88.0596224, 26.4095641 ], [ 88.0601325, 26.4098071 ], [ 88.061178, 26.4100922 ], [ 88.0624528, 26.4103607 ], [ 88.0632783, 26.4107121 ], [ 88.0637052, 26.4104721 ], [ 88.0640488, 26.410279 ], [ 88.0644035, 26.4085221 ], [ 88.065574, 26.4081672 ], [ 88.0683635, 26.4076675 ], [ 88.0687176, 26.4077421 ], [ 88.0705522, 26.4081288 ], [ 88.0703586, 26.4090721 ], [ 88.0694793, 26.4133561 ], [ 88.0775474, 26.419006 ], [ 88.0837701, 26.4262696 ], [ 88.0842656, 26.4285328 ], [ 88.0846284, 26.4301895 ], [ 88.0848821, 26.4304715 ], [ 88.088362, 26.4343399 ], [ 88.0932394, 26.4367192 ], [ 88.0951105, 26.4378984 ], [ 88.0956374, 26.439488 ], [ 88.0957942, 26.4407808 ], [ 88.0958479, 26.4432679 ], [ 88.0962695, 26.4471545 ], [ 88.0968376, 26.4501861 ], [ 88.0969153, 26.4526458 ], [ 88.096399, 26.4536957 ], [ 88.0954878, 26.4556924 ], [ 88.0919771, 26.463039 ], [ 88.0939702, 26.4649017 ], [ 88.1008314, 26.4646655 ], [ 88.1036949, 26.4662891 ], [ 88.1038776, 26.4678171 ], [ 88.1015343, 26.4701673 ], [ 88.0996824, 26.4703367 ], [ 88.0980088, 26.4718083 ], [ 88.0977301, 26.4726417 ], [ 88.0995337, 26.4726599 ], [ 88.1019263, 26.4714499 ], [ 88.105139, 26.4722388 ], [ 88.1068602, 26.4732407 ], [ 88.1072818, 26.4755594 ], [ 88.1069818, 26.4765682 ], [ 88.1053886, 26.4777378 ], [ 88.1047074, 26.4779036 ], [ 88.1014064, 26.4787073 ], [ 88.100207, 26.4798143 ], [ 88.10059, 26.4817935 ], [ 88.1010384, 26.4841104 ], [ 88.1046028, 26.4871187 ], [ 88.1058058, 26.4891391 ], [ 88.1053868, 26.4902764 ], [ 88.1033321, 26.4904094 ], [ 88.1031257, 26.491128 ], [ 88.1030888, 26.4927202 ], [ 88.10171, 26.4927807 ], [ 88.1005881, 26.4937848 ], [ 88.0999776, 26.4959288 ], [ 88.0997905, 26.4975351 ], [ 88.1005475, 26.4988174 ], [ 88.1003143, 26.4996595 ], [ 88.0993296, 26.501458 ], [ 88.0991687, 26.5042327 ], [ 88.0983784, 26.5061311 ], [ 88.0948985, 26.5044301 ], [ 88.0923344, 26.5046707 ], [ 88.0905556, 26.5064419 ], [ 88.0909016, 26.5079975 ], [ 88.0925697, 26.5093198 ], [ 88.095371, 26.5112812 ], [ 88.0972829, 26.5124755 ], [ 88.0992634, 26.5143035 ], [ 88.1012418, 26.5162879 ], [ 88.1030617, 26.5185501 ], [ 88.1042845, 26.5208901 ], [ 88.1041807, 26.5227315 ], [ 88.1017214, 26.5260067 ], [ 88.1015348, 26.5266284 ], [ 88.1008942, 26.5287627 ], [ 88.1009393, 26.531843 ], [ 88.1013856, 26.5341045 ], [ 88.1021516, 26.536197 ], [ 88.1024338, 26.537179 ], [ 88.1025035, 26.5379459 ], [ 88.1027267, 26.5385899 ], [ 88.1027224, 26.5390228 ], [ 88.1028557, 26.5396437 ], [ 88.1038767, 26.5407909 ], [ 88.1066305, 26.5412192 ], [ 88.1085654, 26.5435678 ], [ 88.1115355, 26.5452872 ], [ 88.1101181, 26.5481073 ], [ 88.1078245, 26.5504285 ], [ 88.1056112, 26.5505812 ], [ 88.1056319, 26.5525405 ], [ 88.1054556, 26.5545691 ], [ 88.1054215, 26.5549666 ], [ 88.1053117, 26.5562487 ], [ 88.1054581, 26.5582865 ], [ 88.1056479, 26.5608332 ], [ 88.1076136, 26.5604785 ], [ 88.1081768, 26.5583981 ], [ 88.108193, 26.5583384 ], [ 88.1090725, 26.557152 ], [ 88.1102167, 26.5570298 ], [ 88.1104385, 26.5570353 ], [ 88.1114225, 26.5570287 ], [ 88.1132464, 26.5580652 ], [ 88.1138043, 26.5595047 ], [ 88.1131873, 26.5599747 ], [ 88.1106327, 26.5619207 ], [ 88.1107724, 26.5625236 ], [ 88.1126822, 26.5630994 ], [ 88.1127526, 26.5631492 ], [ 88.1134609, 26.5636503 ], [ 88.1150268, 26.5653815 ], [ 88.1152848, 26.5661405 ], [ 88.1150082, 26.5663338 ], [ 88.1144265, 26.5667403 ], [ 88.1133423, 26.565156 ], [ 88.112431, 26.5645716 ], [ 88.1116847, 26.5649208 ], [ 88.1115727, 26.5655504 ], [ 88.1128137, 26.5664633 ], [ 88.1113843, 26.5684426 ], [ 88.1119255, 26.569675 ], [ 88.1125187, 26.5717055 ], [ 88.1136757, 26.5726861 ], [ 88.114525, 26.5722524 ], [ 88.1146178, 26.5701406 ], [ 88.1165304, 26.5697556 ], [ 88.1175529, 26.5687499 ], [ 88.119062, 26.5682536 ], [ 88.1194307, 26.5702136 ], [ 88.1185483, 26.5709187 ], [ 88.1184105, 26.5727837 ], [ 88.1176018, 26.5745543 ], [ 88.1189629, 26.575157 ], [ 88.120808, 26.5759551 ], [ 88.1221875, 26.574465 ], [ 88.122917, 26.5722772 ], [ 88.124183, 26.5730065 ], [ 88.1249233, 26.574062 ], [ 88.1251701, 26.5750215 ], [ 88.1244942, 26.5757316 ], [ 88.1230994, 26.5765184 ], [ 88.1233033, 26.5773052 ], [ 88.1240221, 26.5775642 ], [ 88.1251272, 26.5777753 ], [ 88.1257494, 26.577689 ], [ 88.1270584, 26.5763169 ], [ 88.1277236, 26.5751942 ], [ 88.1278952, 26.5740812 ], [ 88.1285711, 26.5727378 ], [ 88.1298801, 26.5733231 ], [ 88.1301697, 26.5737837 ], [ 88.1301805, 26.5745034 ], [ 88.1302663, 26.5750887 ], [ 88.1304272, 26.575981 ], [ 88.1304701, 26.5770845 ], [ 88.1304058, 26.5777561 ], [ 88.1299659, 26.5782455 ], [ 88.1298371, 26.5796752 ], [ 88.1285389, 26.5803852 ], [ 88.1272783, 26.5818628 ], [ 88.129127, 26.5833798 ], [ 88.1300624, 26.585432 ], [ 88.1296654, 26.5880513 ], [ 88.1300974, 26.589877 ], [ 88.1320902, 26.5931936 ], [ 88.1317337, 26.597993 ], [ 88.1299166, 26.6012854 ], [ 88.1312974, 26.6026309 ], [ 88.1331415, 26.6041424 ], [ 88.1356447, 26.6059037 ], [ 88.1390862, 26.6064687 ], [ 88.1394931, 26.6087737 ], [ 88.1395401, 26.6090399 ], [ 88.1395981, 26.6093687 ], [ 88.1391982, 26.6108815 ], [ 88.1397012, 26.6117565 ], [ 88.1401586, 26.612552 ], [ 88.1406158, 26.6133473 ], [ 88.1402309, 26.618024 ], [ 88.1412318, 26.6209225 ], [ 88.1409628, 26.6226359 ], [ 88.1426718, 26.6259947 ], [ 88.1444693, 26.6271565 ], [ 88.1448769, 26.6283457 ], [ 88.14722, 26.6297838 ], [ 88.1489019, 26.6297352 ], [ 88.1549343, 26.6306582 ], [ 88.1570705, 26.6322783 ], [ 88.1581151, 26.6330038 ], [ 88.1585346, 26.6361768 ], [ 88.1609316, 26.6367948 ], [ 88.1603065, 26.6379308 ], [ 88.1584726, 26.6402885 ], [ 88.1584115, 26.6403681 ], [ 88.159581, 26.6426395 ], [ 88.1610857, 26.6427843 ], [ 88.1621347, 26.6441182 ], [ 88.1636837, 26.6461319 ], [ 88.1636922, 26.6476931 ], [ 88.1638735, 26.6492733 ], [ 88.1643605, 26.66188 ], [ 88.165371, 26.6675677 ], [ 88.1652617, 26.674363 ], [ 88.1652821, 26.6756525 ], [ 88.1650079, 26.6769313 ], [ 88.1649164, 26.678269 ], [ 88.1648755, 26.6788673 ], [ 88.166787, 26.6817924 ], [ 88.1678152, 26.6828567 ], [ 88.1684375, 26.6844229 ], [ 88.167665, 26.6863461 ], [ 88.1682658, 26.6879757 ], [ 88.1680123, 26.6893745 ], [ 88.1681585, 26.692481 ], [ 88.167901, 26.6959892 ], [ 88.168652, 26.6975228 ], [ 88.1684388, 26.6982213 ], [ 88.1681371, 26.6992098 ], [ 88.1676283, 26.6996173 ], [ 88.1702399, 26.7021235 ], [ 88.1735441, 26.708274 ], [ 88.1774602, 26.7110093 ], [ 88.178797, 26.7130832 ], [ 88.1797622, 26.7149272 ], [ 88.1802633, 26.7169323 ], [ 88.1811284, 26.7180673 ], [ 88.1825566, 26.7196429 ], [ 88.1830943, 26.7217168 ], [ 88.1828784, 26.7222242 ], [ 88.1827615, 26.7238057 ], [ 88.1823618, 26.7275668 ], [ 88.1830211, 26.7286415 ], [ 88.183081, 26.7287392 ], [ 88.1848543, 26.7316299 ], [ 88.185906, 26.7346187 ], [ 88.1858421, 26.7374402 ], [ 88.1862849, 26.7410906 ], [ 88.1878893, 26.7437788 ], [ 88.1892819, 26.746749 ], [ 88.189666, 26.7495485 ], [ 88.1897862, 26.7526219 ], [ 88.1897754, 26.7567836 ], [ 88.1883721, 26.7617555 ], [ 88.1876474, 26.7660314 ], [ 88.1879276, 26.7701201 ], [ 88.1877064, 26.7731519 ], [ 88.185404, 26.7791589 ], [ 88.1847152, 26.7833546 ], [ 88.1844914, 26.7839521 ], [ 88.1839432, 26.7855135 ], [ 88.1837172, 26.7860208 ], [ 88.1835767, 26.7864123 ], [ 88.1834647, 26.786763 ], [ 88.1832676, 26.7872723 ], [ 88.1830985, 26.7876888 ], [ 88.1828593, 26.7883249 ], [ 88.1826783, 26.7889897 ], [ 88.1824978, 26.7897042 ], [ 88.182387, 26.7901722 ], [ 88.1823052, 26.7906534 ], [ 88.1821819, 26.791302 ], [ 88.182142, 26.7916408 ], [ 88.1820143, 26.7918742 ], [ 88.1818146, 26.7921354 ], [ 88.1813315, 26.7929449 ], [ 88.1811619, 26.7933209 ], [ 88.1811221, 26.7936596 ], [ 88.1811291, 26.7943342 ], [ 88.1811218, 26.7944645 ], [ 88.1810544, 26.7955013 ], [ 88.1809134, 26.7958409 ], [ 88.1806725, 26.79631 ], [ 88.180546, 26.7966607 ], [ 88.1805805, 26.7972065 ], [ 88.1801647, 26.7975348 ], [ 88.1802647, 26.7979922 ], [ 88.1802554, 26.7997637 ], [ 88.1794156, 26.8003389 ], [ 88.1792201, 26.8006354 ], [ 88.1788803, 26.8023528 ], [ 88.1784744, 26.8044059 ], [ 88.178248, 26.804955 ], [ 88.1781275, 26.8057568 ], [ 88.1780973, 26.8063199 ], [ 88.1780663, 26.8067979 ], [ 88.1781746, 26.8073486 ], [ 88.1782682, 26.8080417 ], [ 88.1782126, 26.8086812 ], [ 88.1779612, 26.8095407 ], [ 88.1778932, 26.8099564 ], [ 88.1779691, 26.8103055 ], [ 88.1780008, 26.8105783 ], [ 88.1780763, 26.810889 ], [ 88.1783019, 26.811731 ], [ 88.1781786, 26.8121342 ], [ 88.1782244, 26.8126251 ], [ 88.1783981, 26.8130799 ], [ 88.1786902, 26.8136775 ], [ 88.1788044, 26.8140358 ], [ 88.1789108, 26.814438 ], [ 88.1788771, 26.8151035 ], [ 88.1787949, 26.8157543 ], [ 88.1785076, 26.8161472 ], [ 88.1784305, 26.8167267 ], [ 88.1782789, 26.8170548 ], [ 88.1780366, 26.8174302 ], [ 88.1778515, 26.8177785 ], [ 88.1776766, 26.8180333 ], [ 88.1774265, 26.8182602 ], [ 88.1771333, 26.8187944 ], [ 88.1768238, 26.8195652 ], [ 88.1765492, 26.820046 ], [ 88.1763748, 26.8205261 ], [ 88.1760679, 26.820946 ], [ 88.175652, 26.8221874 ], [ 88.1750083, 26.822962 ], [ 88.1743749, 26.8235119 ], [ 88.1742035, 26.8237187 ], [ 88.1739691, 26.824032 ], [ 88.1737332, 26.8242573 ], [ 88.1734714, 26.824537 ], [ 88.1727571, 26.825389 ], [ 88.1726517, 26.8257757 ], [ 88.1725971, 26.8258416 ], [ 88.1725073, 26.8259732 ], [ 88.1723809, 26.8261548 ], [ 88.1720853, 26.8267574 ], [ 88.1719858, 26.8268642 ], [ 88.1719509, 26.8270202 ], [ 88.1718189, 26.8275064 ], [ 88.1716871, 26.8280242 ], [ 88.1716173, 26.8283857 ], [ 88.1716211, 26.8287535 ], [ 88.1716079, 26.8292477 ], [ 88.1716474, 26.829543 ], [ 88.171826, 26.8299747 ], [ 88.1720957, 26.8303989 ], [ 88.1723634, 26.8306855 ], [ 88.1726878, 26.8310505 ], [ 88.172937, 26.8313192 ], [ 88.173141, 26.8315883 ], [ 88.1735851, 26.8320381 ], [ 88.1737975, 26.8322642 ], [ 88.173939, 26.8326331 ], [ 88.1740435, 26.833018 ], [ 88.174111, 26.8334033 ], [ 88.1741051, 26.8336831 ], [ 88.1738991, 26.8341361 ], [ 88.1736917, 26.8343837 ], [ 88.1735098, 26.8344913 ], [ 88.1732838, 26.8347639 ], [ 88.1730671, 26.8350365 ], [ 88.1727041, 26.8353192 ], [ 88.1723398, 26.8354779 ], [ 88.1720219, 26.8356859 ], [ 88.1716672, 26.8358603 ], [ 88.1712756, 26.8360598 ], [ 88.1707836, 26.8362692 ], [ 88.1705278, 26.8362804 ], [ 88.1701261, 26.8363582 ], [ 88.1695771, 26.8363447 ], [ 88.169011, 26.8364486 ], [ 88.1685646, 26.8366328 ], [ 88.1684465, 26.8367082 ], [ 88.1682019, 26.8369562 ], [ 88.1677303, 26.8373211 ], [ 88.1675767, 26.837487 ], [ 88.1674869, 26.8376841 ], [ 88.1674069, 26.8379059 ], [ 88.1674655, 26.8382258 ], [ 88.1675608, 26.8386266 ], [ 88.1677299, 26.8390606 ], [ 88.1677694, 26.8393469 ], [ 88.1680565, 26.8396897 ], [ 88.1682246, 26.8400245 ], [ 88.168291, 26.8402383 ], [ 88.1683935, 26.8404247 ], [ 88.168479, 26.8407354 ], [ 88.1684998, 26.8409834 ], [ 88.1683388, 26.8413457 ], [ 88.1682589, 26.8415833 ], [ 88.1682787, 26.8417388 ], [ 88.1683357, 26.8419594 ], [ 88.1684844, 26.8421726 ], [ 88.168604, 26.842246 ], [ 88.1687693, 26.8423011 ], [ 88.1691085, 26.8423885 ], [ 88.1693205, 26.8425267 ], [ 88.1694593, 26.8426902 ], [ 88.1695547, 26.8430414 ], [ 88.1695863, 26.8434834 ], [ 88.1696147, 26.8435576 ], [ 88.1696625, 26.8437377 ], [ 88.1697834, 26.843942 ], [ 88.1701536, 26.8443496 ], [ 88.1702836, 26.8445786 ], [ 88.1703588, 26.8447337 ], [ 88.1704804, 26.8450035 ], [ 88.170501, 26.8452334 ], [ 88.1705302, 26.8453798 ], [ 88.170423, 26.8456605 ], [ 88.1702956, 26.8457428 ], [ 88.1701693, 26.8458747 ], [ 88.1699976, 26.8461153 ], [ 88.1697348, 26.8463634 ], [ 88.1693527, 26.8465718 ], [ 88.1691983, 26.8466634 ], [ 88.168925, 26.8467469 ], [ 88.1686061, 26.8469232 ], [ 88.1680774, 26.8470585 ], [ 88.1678593, 26.8471911 ], [ 88.1675969, 26.8474798 ], [ 88.1674261, 26.8478174 ], [ 88.1672929, 26.8481885 ], [ 88.1673773, 26.8483932 ], [ 88.1674212, 26.8484447 ], [ 88.1676275, 26.8486867 ], [ 88.1676569, 26.8489166 ], [ 88.1676047, 26.8491629 ], [ 88.1673876, 26.8493949 ], [ 88.1672891, 26.849601 ], [ 88.1672455, 26.8498225 ], [ 88.1672748, 26.8499869 ], [ 88.1675972, 26.8502122 ], [ 88.1677912, 26.8503595 ], [ 88.1680479, 26.8504386 ], [ 88.1684146, 26.850501 ], [ 88.1690388, 26.8507259 ], [ 88.1692416, 26.85088 ], [ 88.1694743, 26.8512481 ], [ 88.1697428, 26.8515504 ], [ 88.1698441, 26.851615 ], [ 88.1701831, 26.8516776 ], [ 88.1705032, 26.8516818 ], [ 88.1708323, 26.8516475 ], [ 88.1714468, 26.8517732 ], [ 88.1716933, 26.8517712 ], [ 88.1720594, 26.8517839 ], [ 88.1725372, 26.8519537 ], [ 88.1728401, 26.8520572 ], [ 88.173181, 26.8523094 ], [ 88.1735484, 26.8524372 ], [ 88.1738896, 26.8527209 ], [ 88.1741667, 26.8529397 ], [ 88.1743883, 26.8531522 ], [ 88.1745095, 26.8533723 ], [ 88.1745756, 26.8535681 ], [ 88.1746141, 26.8537573 ], [ 88.1745152, 26.8539228 ], [ 88.1743703, 26.8540887 ], [ 88.1742262, 26.8543178 ], [ 88.1740361, 26.8544841 ], [ 88.1738194, 26.8547566 ], [ 88.1736469, 26.8549137 ], [ 88.1735117, 26.8551044 ], [ 88.1734131, 26.8552947 ], [ 88.1733068, 26.8555979 ], [ 88.173345, 26.8557714 ], [ 88.1733647, 26.8559088 ], [ 88.1734314, 26.8561542 ], [ 88.1735058, 26.8563025 ], [ 88.1736737, 26.8566034 ], [ 88.1737665, 26.8567606 ], [ 88.1737903, 26.8572929 ], [ 88.1737565, 26.8574331 ], [ 88.1736588, 26.8578355 ], [ 88.1735786, 26.8580505 ], [ 88.1734736, 26.8584778 ], [ 88.1734936, 26.8586491 ], [ 88.1735681, 26.8588042 ], [ 88.1736973, 26.8588866 ], [ 88.1739096, 26.8590473 ], [ 88.1741863, 26.8592841 ], [ 88.1742981, 26.8594547 ], [ 88.174363, 26.859594 ], [ 88.1743646, 26.8597497 ], [ 88.1742835, 26.8598654 ], [ 88.1742474, 26.8599063 ], [ 88.1739656, 26.8600824 ], [ 88.1731088, 26.860367 ], [ 88.1729167, 26.8604025 ], [ 88.1727431, 26.8603949 ], [ 88.1726242, 26.8603959 ], [ 88.1722294, 26.8602841 ], [ 88.1718454, 26.8603121 ], [ 88.1717189, 26.8604282 ], [ 88.1716736, 26.860485 ], [ 88.1716658, 26.860643 ], [ 88.1716964, 26.8609293 ], [ 88.171795, 26.8616505 ], [ 88.1719747, 26.8621747 ], [ 88.1720315, 26.8623795 ], [ 88.1721538, 26.8627147 ], [ 88.172257, 26.8629598 ], [ 88.1723691, 26.8631641 ], [ 88.1724167, 26.8633849 ], [ 88.1726409, 26.8637778 ], [ 88.1726781, 26.8638497 ], [ 88.1729183, 26.8640937 ], [ 88.1730674, 26.8643384 ], [ 88.1731626, 26.8647234 ], [ 88.1732755, 26.8650022 ], [ 88.1734433, 26.8652964 ], [ 88.1734532, 26.8654024 ], [ 88.173383, 26.8656669 ], [ 88.1732291, 26.8658058 ], [ 88.1730189, 26.8658572 ], [ 88.1725247, 26.8658704 ], [ 88.1724528, 26.865977 ], [ 88.1723811, 26.8660927 ], [ 88.172366, 26.8663974 ], [ 88.1723788, 26.8667831 ], [ 88.1723996, 26.8670356 ], [ 88.1723656, 26.8672751 ], [ 88.1722579, 26.8675061 ], [ 88.1721697, 26.8677934 ], [ 88.1722018, 26.8682285 ], [ 88.1721959, 26.8685715 ], [ 88.1721702, 26.8687613 ], [ 88.1720727, 26.8690667 ], [ 88.1718644, 26.8692309 ], [ 88.171693, 26.869503 ], [ 88.1714742, 26.8695725 ], [ 88.1713006, 26.869574 ], [ 88.1710893, 26.8695171 ], [ 88.1707604, 26.8695198 ], [ 88.1705124, 26.8694406 ], [ 88.1702549, 26.8693525 ], [ 88.1700072, 26.8692395 ], [ 88.1696407, 26.8692019 ], [ 88.1694944, 26.8692279 ], [ 88.1691119, 26.8694026 ], [ 88.1686107, 26.8695872 ], [ 88.1682094, 26.8697124 ], [ 88.1675812, 26.8700312 ], [ 88.1673641, 26.8702631 ], [ 88.1671002, 26.8704119 ], [ 88.1667246, 26.8703993 ], [ 88.1664804, 26.8706314 ], [ 88.1666008, 26.8707771 ], [ 88.1667509, 26.871121 ], [ 88.1667437, 26.8713422 ], [ 88.1666275, 26.8716049 ], [ 88.1662921, 26.8718965 ], [ 88.1659472, 26.8721768 ], [ 88.1655548, 26.8723109 ], [ 88.1652907, 26.8724372 ], [ 88.1651461, 26.8725692 ], [ 88.1646397, 26.8731736 ], [ 88.1643963, 26.8735434 ], [ 88.1642988, 26.8738488 ], [ 88.1642643, 26.8740453 ], [ 88.1642138, 26.8744564 ], [ 88.1642298, 26.8751534 ], [ 88.1641419, 26.8760296 ], [ 88.1640851, 26.8761993 ], [ 88.163986, 26.8765295 ], [ 88.1639432, 26.8766472 ], [ 88.1637706, 26.8769915 ], [ 88.1635689, 26.8773226 ], [ 88.1635138, 26.8776502 ], [ 88.1634289, 26.8779668 ], [ 88.1633452, 26.8783894 ], [ 88.163171, 26.8785736 ], [ 88.1629396, 26.8788914 ], [ 88.1626934, 26.8791709 ], [ 88.1623446, 26.8795145 ], [ 88.1621121, 26.8797149 ], [ 88.1620133, 26.8800835 ], [ 88.161958, 26.8804517 ], [ 88.1618301, 26.8808093 ], [ 88.1615396, 26.8811253 ], [ 88.1611745, 26.8812862 ], [ 88.1607634, 26.8814814 ], [ 88.1607514, 26.8814883 ], [ 88.1604884, 26.8815423 ], [ 88.1601671, 26.8816758 ], [ 88.1598748, 26.8818249 ], [ 88.1596418, 26.8819825 ], [ 88.1594258, 26.8823272 ], [ 88.1593094, 26.8824477 ], [ 88.1592219, 26.8825003 ], [ 88.15915, 26.8826047 ], [ 88.158947, 26.8828704 ], [ 88.1588012, 26.8829505 ], [ 88.1583039, 26.883099 ], [ 88.1580407, 26.8831282 ], [ 88.1576891, 26.8831965 ], [ 88.1573816, 26.8832645 ], [ 88.157252, 26.8834506 ], [ 88.1570937, 26.883779 ], [ 88.157125, 26.8839502 ], [ 88.1572452, 26.8842651 ], [ 88.1573496, 26.8844493 ], [ 88.1573964, 26.8847242 ], [ 88.1572679, 26.885014 ], [ 88.1571512, 26.8851075 ], [ 88.1570927, 26.885108 ], [ 88.1569182, 26.8852673 ], [ 88.1566863, 26.8855332 ], [ 88.1564383, 26.885639 ], [ 88.1563646, 26.8856261 ], [ 88.1563054, 26.8855611 ], [ 88.156289, 26.8854304 ], [ 88.1559945, 26.885302 ], [ 88.1556887, 26.8854737 ], [ 88.1553665, 26.8855305 ], [ 88.1551183, 26.8856769 ], [ 88.1549139, 26.885744 ], [ 88.154694, 26.8857729 ], [ 88.1544732, 26.8857092 ], [ 88.1538554, 26.8855157 ], [ 88.1534139, 26.8853366 ], [ 88.1527237, 26.8852632 ], [ 88.152592, 26.8853027 ], [ 88.1522701, 26.8853843 ], [ 88.1520519, 26.8855711 ], [ 88.1518766, 26.8856515 ], [ 88.1517891, 26.8856522 ], [ 88.1517193, 26.8857768 ], [ 88.1515586, 26.8860602 ], [ 88.1513693, 26.8862467 ], [ 88.1510516, 26.8866825 ], [ 88.150745, 26.886843 ], [ 88.1504229, 26.8868997 ], [ 88.150292, 26.8870181 ], [ 88.1502929, 26.8871106 ], [ 88.1503091, 26.887282 ], [ 88.1501492, 26.8873871 ], [ 88.1499887, 26.8875079 ], [ 88.1494185, 26.8876705 ], [ 88.1487901, 26.8878584 ], [ 88.1485133, 26.8880457 ], [ 88.1483388, 26.888205 ], [ 88.1483541, 26.8882839 ], [ 88.1483566, 26.888532 ], [ 88.1482708, 26.8887583 ], [ 88.1481253, 26.8888633 ], [ 88.1479933, 26.8888779 ], [ 88.1476112, 26.8887885 ], [ 88.1473907, 26.888752 ], [ 88.147112, 26.8887542 ], [ 88.1467619, 26.8889015 ], [ 88.1466434, 26.8888235 ], [ 88.1463519, 26.8889838 ], [ 88.1458571, 26.8893826 ], [ 88.1455519, 26.889622 ], [ 88.1454067, 26.8898195 ], [ 88.1453368, 26.8901224 ], [ 88.1454852, 26.8903062 ], [ 88.1455315, 26.8905292 ], [ 88.1454016, 26.8907536 ], [ 88.1452126, 26.8909131 ], [ 88.145024, 26.8911109 ], [ 88.1447468, 26.8912575 ], [ 88.1445265, 26.891248 ], [ 88.1442765, 26.8911576 ], [ 88.1439535, 26.8911331 ], [ 88.1434566, 26.8913221 ], [ 88.143236, 26.8912833 ], [ 88.1428409, 26.8913407 ], [ 88.1426365, 26.8914732 ], [ 88.1424478, 26.8916575 ], [ 88.1422902, 26.8919362 ], [ 88.1421159, 26.8921881 ], [ 88.1422357, 26.892397 ], [ 88.1422081, 26.8925935 ], [ 88.1420066, 26.8929516 ], [ 88.1418611, 26.893122 ], [ 88.1417913, 26.8934384 ], [ 88.1417816, 26.8939123 ], [ 88.1417102, 26.8941363 ], [ 88.1414904, 26.8941651 ], [ 88.1413302, 26.8942589 ], [ 88.1410252, 26.8945773 ], [ 88.1407217, 26.8949858 ], [ 88.140562, 26.8951857 ], [ 88.1402707, 26.8953708 ], [ 88.1400809, 26.8954513 ], [ 88.1400095, 26.8956752 ], [ 88.1396757, 26.8960073 ], [ 88.1394142, 26.896287 ], [ 88.1391827, 26.8966025 ], [ 88.1390962, 26.8967498 ], [ 88.1389969, 26.8970778 ], [ 88.1388962, 26.8972636 ], [ 88.1387946, 26.8973569 ], [ 88.138634, 26.897462 ], [ 88.1379911, 26.8977176 ], [ 88.1377877, 26.8978907 ], [ 88.1375691, 26.8980504 ], [ 88.1373501, 26.8981695 ], [ 88.1371157, 26.8981985 ], [ 88.1368372, 26.8982143 ], [ 88.1364605, 26.898664 ], [ 88.1362424, 26.8988756 ], [ 88.1362412, 26.8988869 ], [ 88.1362164, 26.8991522 ], [ 88.1362637, 26.8995342 ], [ 88.1363241, 26.8997279 ], [ 88.136476, 26.9001121 ], [ 88.1365928, 26.9003605 ], [ 88.1365963, 26.9005095 ], [ 88.1366131, 26.900726 ], [ 88.1368518, 26.9009472 ], [ 88.1372029, 26.9011167 ], [ 88.1376163, 26.9013894 ], [ 88.1381178, 26.9016481 ], [ 88.1383532, 26.9017533 ], [ 88.1386904, 26.9017246 ], [ 88.1389428, 26.9019308 ], [ 88.139015, 26.9020129 ], [ 88.1390237, 26.9026431 ], [ 88.1389271, 26.9032047 ], [ 88.1389299, 26.9040039 ], [ 88.1387608, 26.904153 ], [ 88.1386871, 26.904287 ], [ 88.1386294, 26.904409 ], [ 88.1385443, 26.9046828 ], [ 88.1385308, 26.904797 ], [ 88.138547, 26.9049558 ], [ 88.1386065, 26.9052089 ], [ 88.138671, 26.9054853 ], [ 88.1387716, 26.9055768 ], [ 88.1391236, 26.9056228 ], [ 88.1393655, 26.9058756 ], [ 88.1394073, 26.9060055 ], [ 88.1395246, 26.9061975 ], [ 88.139764, 26.9064761 ], [ 88.1399758, 26.9070026 ], [ 88.1400349, 26.9072242 ], [ 88.1399824, 26.9075243 ], [ 88.1400282, 26.9078006 ], [ 88.1399999, 26.9079622 ], [ 88.1399873, 26.9081062 ], [ 88.1400926, 26.9082497 ], [ 88.1402524, 26.9083113 ], [ 88.1408269, 26.9085164 ], [ 88.1410499, 26.9087793 ], [ 88.1411837, 26.9088965 ], [ 88.1414057, 26.9090666 ], [ 88.141513, 26.9094977 ], [ 88.1417648, 26.9098273 ], [ 88.1417666, 26.9101077 ], [ 88.1419184, 26.910335 ], [ 88.1420251, 26.9108638 ], [ 88.1419692, 26.911126 ], [ 88.1419859, 26.9113492 ], [ 88.1427615, 26.9125794 ], [ 88.1432935, 26.9129834 ], [ 88.1442627, 26.9145389 ], [ 88.1443107, 26.9149865 ], [ 88.1444164, 26.9152103 ], [ 88.144669, 26.9155489 ], [ 88.1448761, 26.9157458 ], [ 88.144848, 26.915825 ], [ 88.1447435, 26.9158506 ], [ 88.1443659, 26.9160658 ], [ 88.1442792, 26.9161974 ], [ 88.1442658, 26.9163035 ], [ 88.1443571, 26.9166299 ], [ 88.1442863, 26.916908 ], [ 88.144201, 26.9171185 ], [ 88.1439821, 26.9172512 ], [ 88.1438376, 26.9174622 ], [ 88.1438696, 26.9177665 ], [ 88.1439754, 26.917911 ], [ 88.1441817, 26.9181451 ], [ 88.1442417, 26.9182892 ], [ 88.1442306, 26.9186165 ], [ 88.1445441, 26.9191019 ], [ 88.1446184, 26.9192586 ], [ 88.144651, 26.919534 ], [ 88.1446815, 26.9197184 ], [ 88.1449927, 26.9200046 ], [ 88.1451697, 26.920096 ], [ 88.1455977, 26.9203427 ], [ 88.1458502, 26.92067 ], [ 88.1459263, 26.9209176 ], [ 88.1458994, 26.9211818 ], [ 88.1457084, 26.9214081 ], [ 88.1453913, 26.9216837 ], [ 88.1446655, 26.9224937 ], [ 88.1444938, 26.9228764 ], [ 88.1442331, 26.923312 ], [ 88.1441611, 26.9233912 ], [ 88.1440309, 26.9235254 ], [ 88.1439, 26.9235781 ], [ 88.1434904, 26.923778 ], [ 88.1430977, 26.9241512 ], [ 88.1427213, 26.9246393 ], [ 88.1426205, 26.9248626 ], [ 88.142448, 26.9251157 ], [ 88.142376, 26.9252738 ], [ 88.1422072, 26.9259999 ], [ 88.1421215, 26.9262483 ], [ 88.1420217, 26.9264601 ], [ 88.1418613, 26.9266588 ], [ 88.1417311, 26.9267381 ], [ 88.1415402, 26.9268329 ], [ 88.1413209, 26.9268595 ], [ 88.1408242, 26.9270891 ], [ 88.1406353, 26.927287 ], [ 88.1402011, 26.9278951 ], [ 88.1400421, 26.9280674 ], [ 88.1398238, 26.928293 ], [ 88.1397089, 26.9285038 ], [ 88.1392436, 26.9289814 ], [ 88.1391722, 26.9291399 ], [ 88.1391597, 26.9293363 ], [ 88.1390438, 26.9295497 ], [ 88.1389587, 26.9298487 ], [ 88.1388009, 26.9301424 ], [ 88.1386617, 26.9309467 ], [ 88.138561, 26.9311313 ], [ 88.138533, 26.9311837 ], [ 88.138373, 26.9314209 ], [ 88.1382589, 26.9317235 ], [ 88.1381576, 26.9318455 ], [ 88.1379857, 26.9322525 ], [ 88.1379167, 26.9327149 ], [ 88.1378598, 26.9328593 ], [ 88.137817, 26.9329905 ], [ 88.1376163, 26.9335047 ], [ 88.1373412, 26.9337974 ], [ 88.1371952, 26.933916 ], [ 88.137079, 26.9340235 ], [ 88.1365831, 26.9342506 ], [ 88.1360712, 26.9344919 ], [ 88.1357067, 26.9347317 ], [ 88.1354607, 26.9348498 ], [ 88.1350355, 26.9350778 ], [ 88.1348313, 26.9352374 ], [ 88.1346433, 26.9354371 ], [ 88.1342221, 26.9358071 ], [ 88.1340901, 26.9359405 ], [ 88.1339604, 26.9361114 ], [ 88.1337426, 26.9363765 ], [ 88.1336819, 26.9364994 ], [ 88.1335983, 26.9366687 ], [ 88.1333375, 26.9369596 ], [ 88.1330613, 26.9371986 ], [ 88.1328142, 26.9374236 ], [ 88.1325521, 26.9376496 ], [ 88.1324511, 26.9378737 ], [ 88.1320299, 26.938299 ], [ 88.1319718, 26.9383378 ], [ 88.1315315, 26.938303 ], [ 88.1311216, 26.9384101 ], [ 88.130846, 26.9385696 ], [ 88.1303191, 26.9389039 ], [ 88.1297889, 26.9395284 ], [ 88.1295666, 26.9394495 ], [ 88.129296, 26.9393204 ], [ 88.1288429, 26.9394279 ], [ 88.1286808, 26.939521 ], [ 88.1285661, 26.9396286 ], [ 88.1284534, 26.939968 ], [ 88.1282825, 26.9406688 ], [ 88.1281252, 26.9410513 ], [ 88.127849, 26.9413175 ], [ 88.1277759, 26.9414375 ], [ 88.1277054, 26.941621 ], [ 88.1275021, 26.9418731 ], [ 88.1273578, 26.9419635 ], [ 88.1270651, 26.9421109 ], [ 88.126802, 26.9422848 ], [ 88.126759, 26.9424181 ], [ 88.1265138, 26.9428015 ], [ 88.1262212, 26.9429483 ], [ 88.1261196, 26.943028 ], [ 88.1260043, 26.9431316 ], [ 88.1257126, 26.9434113 ], [ 88.1255117, 26.9437314 ], [ 88.1253203, 26.9439968 ], [ 88.1252355, 26.9441128 ], [ 88.1250617, 26.9443767 ], [ 88.1249614, 26.9446008 ], [ 88.1246994, 26.9448398 ], [ 88.1242941, 26.945344 ], [ 88.1241356, 26.945661 ], [ 88.1240065, 26.945978 ], [ 88.1233675, 26.9466667 ], [ 88.123267, 26.9468774 ], [ 88.1232266, 26.9472455 ], [ 88.1230091, 26.9474834 ], [ 88.1227187, 26.9478158 ], [ 88.1226916, 26.9480529 ], [ 88.1226208, 26.9482904 ], [ 88.1224024, 26.9484496 ], [ 88.1222596, 26.9485482 ], [ 88.1220399, 26.9486109 ], [ 88.1218066, 26.9489408 ], [ 88.1214562, 26.9494165 ], [ 88.1212869, 26.9496074 ], [ 88.1211299, 26.9497034 ], [ 88.1208972, 26.9501046 ], [ 88.1206616, 26.9503078 ], [ 88.120388, 26.9504854 ], [ 88.1203725, 26.9505143 ], [ 88.1203237, 26.9506055 ], [ 88.1203121, 26.9507703 ], [ 88.1206886, 26.9516044 ], [ 88.120771, 26.9519805 ], [ 88.1208786, 26.9522279 ], [ 88.1208945, 26.9524985 ], [ 88.1208042, 26.9526639 ], [ 88.1207795, 26.9528401 ], [ 88.1208112, 26.9533701 ], [ 88.120961, 26.9538765 ], [ 88.1209617, 26.9540517 ], [ 88.1210719, 26.9544431 ], [ 88.1211282, 26.954807 ], [ 88.1210784, 26.9551834 ], [ 88.1210685, 26.955455 ], [ 88.1212352, 26.9563382 ], [ 88.1213852, 26.9568672 ], [ 88.1215852, 26.9571612 ], [ 88.1217872, 26.9576063 ], [ 88.1218354, 26.9579872 ], [ 88.1218863, 26.9583252 ], [ 88.1219684, 26.9586788 ], [ 88.1222592, 26.9590744 ], [ 88.1227272, 26.9597828 ], [ 88.1228406, 26.9600083 ], [ 88.1229742, 26.9602592 ], [ 88.1229636, 26.9603388 ], [ 88.1228856, 26.9604675 ], [ 88.122685, 26.960686 ], [ 88.1225466, 26.9608695 ], [ 88.1224883, 26.9611041 ], [ 88.1224019, 26.9615115 ], [ 88.1223217, 26.9616204 ], [ 88.1222596, 26.9623973 ], [ 88.1222595, 26.9624557 ], [ 88.1223417, 26.9625496 ], [ 88.1224239, 26.9627139 ], [ 88.1224864, 26.96293 ], [ 88.122489, 26.9631917 ], [ 88.1224601, 26.9633806 ], [ 88.1223827, 26.9636438 ], [ 88.1222594, 26.9638388 ], [ 88.1221002, 26.9639687 ], [ 88.1220624, 26.9641483 ], [ 88.1220419, 26.964759 ], [ 88.1220179, 26.9650072 ], [ 88.1218898, 26.9652776 ], [ 88.1218255, 26.965469 ], [ 88.1218812, 26.9657396 ], [ 88.1220046, 26.9662685 ], [ 88.1221528, 26.966608 ], [ 88.122168, 26.9668918 ], [ 88.1221462, 26.9672585 ], [ 88.1221475, 26.9674113 ], [ 88.1222597, 26.9676135 ], [ 88.122421, 26.9685237 ], [ 88.1229968, 26.9696198 ], [ 88.1230789, 26.9698 ], [ 88.12309, 26.9699263 ], [ 88.1231121, 26.9700998 ], [ 88.1232657, 26.9703698 ], [ 88.1234196, 26.9706922 ], [ 88.1235757, 26.9710798 ], [ 88.1237796, 26.9713219 ], [ 88.1241872, 26.9716823 ], [ 88.1243087, 26.9717982 ], [ 88.124442, 26.9720318 ], [ 88.1246776, 26.9723204 ], [ 88.1250552, 26.9727941 ], [ 88.1251681, 26.9730465 ], [ 88.125322, 26.9732883 ], [ 88.1255468, 26.9735505 ], [ 88.1257216, 26.9739101 ], [ 88.1261412, 26.9745114 ], [ 88.1263338, 26.9747341 ], [ 88.1264777, 26.9748883 ], [ 88.1267943, 26.9752936 ], [ 88.1270002, 26.9756718 ], [ 88.1271556, 26.9759458 ], [ 88.1272763, 26.9761214 ], [ 88.1276161, 26.9767762 ], [ 88.1282481, 26.9774593 ], [ 88.1288073, 26.977915 ], [ 88.1289192, 26.9780762 ], [ 88.1291142, 26.9783277 ], [ 88.1293302, 26.9787694 ], [ 88.129669, 26.9793454 ], [ 88.1299139, 26.9796424 ], [ 88.1301593, 26.9799641 ], [ 88.1302321, 26.9801716 ], [ 88.1302748, 26.9804325 ], [ 88.1304191, 26.9807585 ], [ 88.1305722, 26.9809017 ], [ 88.1312721, 26.9813202 ], [ 88.1314956, 26.981508 ], [ 88.1316188, 26.9816785 ], [ 88.1316811, 26.9818854 ], [ 88.1317025, 26.9819937 ], [ 88.1326586, 26.9827824 ], [ 88.1331765, 26.9831393 ], [ 88.1337434, 26.9833605 ], [ 88.1339259, 26.9834671 ], [ 88.1342414, 26.9837263 ], [ 88.1344043, 26.9838878 ], [ 88.134527, 26.984076 ], [ 88.1346096, 26.9842489 ], [ 88.1347022, 26.9844108 ], [ 88.1347238, 26.984555 ], [ 88.1348356, 26.9846534 ], [ 88.1350071, 26.9847154 ], [ 88.135291, 26.9848031 ], [ 88.1354334, 26.9849374 ], [ 88.1354044, 26.9850549 ], [ 88.1351442, 26.9852285 ], [ 88.1345343, 26.985811 ], [ 88.1343972, 26.9862212 ], [ 88.1343399, 26.9865187 ], [ 88.1341503, 26.9867008 ], [ 88.1338883, 26.9867934 ], [ 88.1337681, 26.9868212 ], [ 88.1332643, 26.9867623 ], [ 88.1329097, 26.9867378 ], [ 88.1317735, 26.9869179 ], [ 88.1314297, 26.9870024 ], [ 88.1310264, 26.9870327 ], [ 88.1307455, 26.9871523 ], [ 88.1303769, 26.987416 ], [ 88.1301035, 26.9875545 ], [ 88.1296132, 26.9877204 ], [ 88.129189, 26.9878349 ], [ 88.1288783, 26.9879003 ], [ 88.1286352, 26.9879296 ], [ 88.1281517, 26.9878973 ], [ 88.1276561, 26.9878562 ], [ 88.126991, 26.9878528 ], [ 88.1260924, 26.9878417 ], [ 88.1255302, 26.9878104 ], [ 88.1243901, 26.987821 ], [ 88.1237048, 26.9877283 ], [ 88.1233771, 26.9876535 ], [ 88.1228426, 26.9876577 ], [ 88.1223396, 26.9875376 ], [ 88.1218063, 26.9875349 ], [ 88.1215309, 26.9875125 ], [ 88.1211089, 26.9874346 ], [ 88.1195963, 26.9874692 ], [ 88.11851, 26.9875729 ], [ 88.1180845, 26.9875873 ], [ 88.1173376, 26.9878887 ], [ 88.1164133, 26.9883403 ], [ 88.1160021, 26.988583 ], [ 88.1154455, 26.988807 ], [ 88.1149399, 26.9889682 ], [ 88.1144956, 26.9892424 ], [ 88.113856, 26.9897664 ], [ 88.1138129, 26.989796 ], [ 88.1133068, 26.9901363 ], [ 88.1128527, 26.9906338 ], [ 88.112448, 26.9910974 ], [ 88.1120413, 26.9912315 ], [ 88.111483, 26.9912494 ], [ 88.1110682, 26.9912617 ], [ 88.1101259, 26.9917994 ], [ 88.1092796, 26.9926905 ], [ 88.1089658, 26.9929276 ], [ 88.1089151, 26.9930814 ], [ 88.1091424, 26.9935932 ], [ 88.1091707, 26.993657 ], [ 88.1091481, 26.9940475 ], [ 88.108931, 26.9947081 ], [ 88.1086733, 26.9952651 ], [ 88.1084512, 26.995409 ], [ 88.1076893, 26.9955436 ], [ 88.1073733, 26.9955461 ], [ 88.1068106, 26.9958935 ], [ 88.1066813, 26.9961291 ], [ 88.1067239, 26.9964354 ], [ 88.1067404, 26.9967649 ], [ 88.1066888, 26.9968962 ], [ 88.1064831, 26.9969558 ], [ 88.1060071, 26.996994 ], [ 88.1053494, 26.9971414 ], [ 88.1048931, 26.9973809 ], [ 88.1042486, 26.9976464 ], [ 88.1040016, 26.9979529 ], [ 88.1033651, 26.9986174 ], [ 88.102855, 26.9991171 ], [ 88.102205, 26.999878 ], [ 88.1017484, 27.000317 ], [ 88.1016257, 27.0004988 ], [ 88.1014607, 27.0006954 ], [ 88.1010744, 27.0012835 ], [ 88.1006356, 27.0019254 ], [ 88.1003276, 27.0021715 ], [ 88.100076, 27.0025463 ], [ 88.0995016, 27.0032974 ], [ 88.0990258, 27.0039031 ], [ 88.0987543, 27.0040812 ], [ 88.0984631, 27.0041264 ], [ 88.0978632, 27.0040483 ], [ 88.0975106, 27.0040165 ], [ 88.0968248, 27.0041482 ], [ 88.0962125, 27.0041191 ], [ 88.0959207, 27.004162 ], [ 88.0956309, 27.0043425 ], [ 88.0953017, 27.0044217 ], [ 88.0943038, 27.0044453 ], [ 88.093966, 27.0045494 ], [ 88.0933452, 27.004622 ], [ 88.0927901, 27.0045678 ], [ 88.0923465, 27.004562 ], [ 88.0921216, 27.0046811 ], [ 88.0916078, 27.0051408 ], [ 88.0915259, 27.0053098 ], [ 88.0911629, 27.0058279 ], [ 88.0905285, 27.0064488 ], [ 88.0902975, 27.0069221 ], [ 88.0899993, 27.0072787 ], [ 88.0897098, 27.007484 ], [ 88.0888838, 27.0077769 ], [ 88.0883175, 27.0083431 ], [ 88.088162, 27.0084995 ], [ 88.0882301, 27.0087454 ], [ 88.0884174, 27.0089479 ], [ 88.0885949, 27.0092299 ], [ 88.0886082, 27.0094261 ], [ 88.0883175, 27.0098801 ], [ 88.0880811, 27.0102808 ], [ 88.0880077, 27.0106333 ], [ 88.0881427, 27.0110542 ], [ 88.0879807, 27.0112314 ], [ 88.0875791, 27.0114489 ], [ 88.0876565, 27.0116722 ], [ 88.0881354, 27.012635 ], [ 88.0883483, 27.0131058 ], [ 88.0884178, 27.0135273 ], [ 88.0885088, 27.0138874 ], [ 88.0885268, 27.0146409 ], [ 88.0884592, 27.0155326 ], [ 88.0883745, 27.0158266 ], [ 88.0878613, 27.0169451 ], [ 88.0876354, 27.0172988 ], [ 88.087505, 27.0174262 ], [ 88.0871182, 27.0180654 ], [ 88.0866528, 27.0185293 ], [ 88.0865816, 27.0186152 ], [ 88.0862434, 27.0190209 ], [ 88.0853793, 27.0200347 ], [ 88.0848815, 27.0205871 ], [ 88.0847433, 27.0209514 ], [ 88.0847463, 27.0212628 ], [ 88.0845092, 27.0216279 ], [ 88.084173, 27.0219035 ], [ 88.0835609, 27.0229641 ], [ 88.0834898, 27.0234949 ], [ 88.0835057, 27.024078 ], [ 88.0834997, 27.0245304 ], [ 88.0835713, 27.0251661 ], [ 88.083496, 27.0253224 ], [ 88.0832225, 27.026421 ], [ 88.0831861, 27.0272022 ], [ 88.0831081, 27.0280544 ], [ 88.083067, 27.0283987 ], [ 88.0830158, 27.0287803 ], [ 88.0828777, 27.0291537 ], [ 88.0825124, 27.0298108 ], [ 88.0821767, 27.0301473 ], [ 88.0818675, 27.0309416 ], [ 88.0812974, 27.0318462 ], [ 88.0806839, 27.0325618 ], [ 88.080563, 27.0327115 ], [ 88.0802615, 27.0329576 ], [ 88.0798385, 27.0333715 ], [ 88.0796099, 27.0335514 ], [ 88.0794594, 27.0338255 ], [ 88.0792096, 27.0339831 ], [ 88.0791563, 27.0341415 ], [ 88.078887, 27.0343394 ], [ 88.0783857, 27.034637 ], [ 88.0777356, 27.0352286 ], [ 88.077487, 27.0355148 ], [ 88.0772482, 27.0356339 ], [ 88.0769303, 27.0355281 ], [ 88.0765699, 27.0356579 ], [ 88.0763426, 27.0357875 ], [ 88.0758617, 27.0357619 ], [ 88.0754767, 27.0354805 ], [ 88.0751557, 27.0350896 ], [ 88.0749021, 27.034799 ], [ 88.0745633, 27.0347429 ], [ 88.0741941, 27.0346126 ], [ 88.0734237, 27.0343997 ], [ 88.0728418, 27.0340814 ], [ 88.0726763, 27.0338977 ], [ 88.0720835, 27.033627 ], [ 88.0713896, 27.032987 ], [ 88.0709915, 27.0325207 ], [ 88.0697606, 27.0317088 ], [ 88.0691575, 27.0314787 ], [ 88.0684538, 27.0314924 ], [ 88.0679887, 27.0314966 ], [ 88.0675185, 27.0314032 ], [ 88.0674411, 27.0313451 ], [ 88.066774, 27.0312621 ], [ 88.0661307, 27.0313731 ], [ 88.0651269, 27.0314709 ], [ 88.0643063, 27.0313485 ], [ 88.0639985, 27.0311658 ], [ 88.0629082, 27.0302355 ], [ 88.0627224, 27.0302369 ], [ 88.0622521, 27.0301231 ], [ 88.0604111, 27.02953 ], [ 88.0601597, 27.0295207 ], [ 88.0595565, 27.0292725 ], [ 88.0593383, 27.0293125 ], [ 88.0592084, 27.0294308 ], [ 88.0590515, 27.0301562 ], [ 88.0587328, 27.0310972 ], [ 88.0583858, 27.0313936 ], [ 88.0578806, 27.0317745 ], [ 88.0577246, 27.0319261 ], [ 88.0569381, 27.0321886 ], [ 88.0565264, 27.0323164 ], [ 88.0562648, 27.032359 ], [ 88.0561242, 27.0324773 ], [ 88.0557538, 27.0326155 ], [ 88.0555574, 27.0326467 ], [ 88.0552296, 27.0326691 ], [ 88.0547175, 27.0327992 ], [ 88.0542606, 27.0329696 ], [ 88.0540434, 27.0331179 ], [ 88.0535313, 27.0332504 ], [ 88.0526692, 27.0333448 ], [ 88.0523453, 27.0334819 ], [ 88.0519731, 27.0336726 ], [ 88.0514881, 27.0341311 ], [ 88.0511172, 27.0344326 ], [ 88.0508773, 27.0345111 ], [ 88.0503853, 27.0345945 ], [ 88.0496711, 27.0346874 ], [ 88.0492286, 27.0347206 ], [ 88.0483246, 27.0348731 ], [ 88.0481105, 27.034969 ], [ 88.0476719, 27.0351916 ], [ 88.0471994, 27.0356017 ], [ 88.0466417, 27.0360007 ], [ 88.0461769, 27.0363846 ], [ 88.0456338, 27.0368583 ], [ 88.0452526, 27.0369785 ], [ 88.0438982, 27.0370291 ], [ 88.0431854, 27.0367208 ], [ 88.0430542, 27.0367015 ], [ 88.0424612, 27.0363945 ], [ 88.0421985, 27.0363265 ], [ 88.0416524, 27.0363306 ], [ 88.0412297, 27.0364623 ], [ 88.0409603, 27.0366222 ], [ 88.0405887, 27.0366927 ], [ 88.0402399, 27.0364688 ], [ 88.040053, 27.0363943 ], [ 88.0395268, 27.0362312 ], [ 88.0391289, 27.0361822 ], [ 88.0383265, 27.0363235 ], [ 88.0378716, 27.0365232 ], [ 88.037493, 27.0367855 ], [ 88.0373528, 27.0371655 ], [ 88.0375079, 27.0374509 ], [ 88.0373747, 27.0376956 ], [ 88.0372577, 27.0378476 ], [ 88.0367942, 27.0380631 ], [ 88.0365679, 27.0382611 ], [ 88.0364599, 27.0384965 ], [ 88.0364884, 27.0388596 ], [ 88.0366111, 27.0393212 ], [ 88.0366507, 27.0399346 ], [ 88.0366011, 27.0401292 ], [ 88.0365277, 27.0403213 ], [ 88.036261, 27.0407791 ], [ 88.0360885, 27.0413399 ], [ 88.0358542, 27.0416214 ], [ 88.0353748, 27.0419588 ], [ 88.0352672, 27.0421548 ], [ 88.0350247, 27.0425232 ], [ 88.0349627, 27.0431148 ], [ 88.0348337, 27.0433978 ], [ 88.0344308, 27.0436377 ], [ 88.0341042, 27.0436268 ], [ 88.0338154, 27.0435745 ], [ 88.0334648, 27.0436673 ], [ 88.0333246, 27.0438376 ], [ 88.0330083, 27.0440407 ], [ 88.0326743, 27.0444425 ], [ 88.0325481, 27.0446916 ], [ 88.0324314, 27.0452182 ], [ 88.0321326, 27.0455263 ], [ 88.0317549, 27.0458459 ], [ 88.0313207, 27.0463815 ], [ 88.0311074, 27.0467531 ], [ 88.0308659, 27.0469354 ], [ 88.0303931, 27.0469705 ], [ 88.0302181, 27.0470507 ], [ 88.0300091, 27.0478261 ], [ 88.0300116, 27.0481036 ], [ 88.0300883, 27.048358 ], [ 88.0300514, 27.0487396 ], [ 88.0299517, 27.0489208 ], [ 88.029176, 27.0491093 ], [ 88.0289881, 27.0492257 ], [ 88.0288142, 27.0494323 ], [ 88.0287888, 27.0496197 ], [ 88.0288393, 27.0499059 ], [ 88.0287851, 27.0501071 ], [ 88.0286188, 27.0503249 ], [ 88.0283046, 27.0506115 ], [ 88.0276537, 27.0509502 ], [ 88.0274323, 27.0511865 ], [ 88.0271956, 27.0518403 ], [ 88.0268858, 27.0526773 ], [ 88.0267566, 27.0528114 ], [ 88.0265472, 27.0533409 ], [ 88.0262324, 27.0537064 ], [ 88.0258997, 27.0546745 ], [ 88.0257507, 27.0548471 ], [ 88.0258517, 27.0555226 ], [ 88.0259211, 27.0561184 ], [ 88.0258702, 27.0566242 ], [ 88.025928, 27.0568787 ], [ 88.0259179, 27.0575038 ], [ 88.0257467, 27.0579405 ], [ 88.0253968, 27.0587372 ], [ 88.0251536, 27.0590165 ], [ 88.0243895, 27.059726 ], [ 88.024019, 27.0599995 ], [ 88.0237673, 27.0603082 ], [ 88.023629, 27.0608349 ], [ 88.0231904, 27.0614427 ], [ 88.0228552, 27.0621333 ], [ 88.0226009, 27.0629971 ], [ 88.0224525, 27.0633095 ], [ 88.0224387, 27.0635239 ], [ 88.0224496, 27.0638217 ], [ 88.0225637, 27.0641774 ], [ 88.0227733, 27.064503 ], [ 88.0228473, 27.064807 ], [ 88.0228102, 27.0650916 ], [ 88.0226247, 27.0656186 ], [ 88.0222298, 27.0667017 ], [ 88.0221203, 27.0669738 ], [ 88.0218929, 27.0674783 ], [ 88.0218414, 27.067593 ], [ 88.0217068, 27.0678169 ], [ 88.0214424, 27.0683731 ], [ 88.0213346, 27.0687845 ], [ 88.0211545, 27.0690701 ], [ 88.021071, 27.0694475 ], [ 88.0209216, 27.0696562 ], [ 88.0200491, 27.0697392 ], [ 88.0197956, 27.0697997 ], [ 88.0193131, 27.0699881 ], [ 88.0189005, 27.0700905 ], [ 88.0186234, 27.0702554 ], [ 88.0184102, 27.070428 ], [ 88.0180652, 27.0711615 ], [ 88.0177971, 27.0716003 ], [ 88.017316, 27.0724146 ], [ 88.0168834, 27.0729498 ], [ 88.0165007, 27.073466 ], [ 88.0162442, 27.0737445 ], [ 88.0161241, 27.0739778 ], [ 88.0161712, 27.0744585 ], [ 88.0162645, 27.0752222 ], [ 88.0162572, 27.0760255 ], [ 88.0161813, 27.0763351 ], [ 88.0160476, 27.076625 ], [ 88.0159091, 27.0771787 ], [ 88.0161479, 27.0773129 ], [ 88.016969, 27.0777419 ], [ 88.0174393, 27.0781175 ], [ 88.017584, 27.0783284 ], [ 88.0180075, 27.0790701 ], [ 88.018083, 27.0794756 ], [ 88.0180345, 27.0796881 ], [ 88.0182683, 27.0801106 ], [ 88.0184208, 27.080239 ], [ 88.0186002, 27.0803699 ], [ 88.0192458, 27.0811053 ], [ 88.0197747, 27.0816091 ], [ 88.0202514, 27.0819916 ], [ 88.0205623, 27.0822261 ], [ 88.0207881, 27.0825967 ], [ 88.0208282, 27.0838238 ], [ 88.0206721, 27.0848155 ], [ 88.0207264, 27.085316 ], [ 88.0207087, 27.0857138 ], [ 88.0207074, 27.0863495 ], [ 88.0208636, 27.0869643 ], [ 88.0209652, 27.0878841 ], [ 88.0200719, 27.087498 ], [ 88.0194903, 27.087509 ], [ 88.0190536, 27.0875753 ], [ 88.018688, 27.0878203 ], [ 88.0181321, 27.0881167 ], [ 88.0175457, 27.0883646 ], [ 88.017182, 27.0886358 ], [ 88.01691, 27.0887028 ], [ 88.0166663, 27.0887433 ], [ 88.0163488, 27.088547 ], [ 88.0160258, 27.0885155 ], [ 88.0158324, 27.0885891 ], [ 88.0156836, 27.0887887 ], [ 88.0154671, 27.0894514 ], [ 88.0153678, 27.0896191 ], [ 88.0152501, 27.0900576 ], [ 88.015158, 27.0901937 ], [ 88.0143067, 27.0905473 ], [ 88.013915, 27.0908637 ], [ 88.0136979, 27.0914564 ], [ 88.0136433, 27.0917616 ], [ 88.0135736, 27.0919863 ], [ 88.0135219, 27.092401 ], [ 88.0134312, 27.0929159 ], [ 88.0132253, 27.0932129 ], [ 88.0124912, 27.0937845 ], [ 88.012505, 27.0953255 ], [ 88.0124505, 27.0956417 ], [ 88.0123031, 27.095997 ], [ 88.012081, 27.0968831 ], [ 88.0119199, 27.0973287 ], [ 88.0117355, 27.0975669 ], [ 88.0115856, 27.0976515 ], [ 88.0110987, 27.0977453 ], [ 88.0109122, 27.0978233 ], [ 88.0104717, 27.0983274 ], [ 88.0094173, 27.0983936 ], [ 88.0090597, 27.0985112 ], [ 88.0089656, 27.0984803 ], [ 88.0088307, 27.0986234 ], [ 88.0085449, 27.0987992 ], [ 88.0083871, 27.0989555 ], [ 88.0080609, 27.0992269 ], [ 88.0079485, 27.0994826 ], [ 88.0079656, 27.0997781 ], [ 88.0082932, 27.1003217 ], [ 88.0083236, 27.100484 ], [ 88.0082383, 27.1005996 ], [ 88.0080841, 27.1010385 ], [ 88.0075286, 27.101505 ], [ 88.0069216, 27.1018545 ], [ 88.0064706, 27.1020315 ], [ 88.0057571, 27.1025194 ], [ 88.0055224, 27.1027432 ], [ 88.0050734, 27.1031019 ], [ 88.0040631, 27.1035243 ], [ 88.0038682, 27.1037404 ], [ 88.0037327, 27.1039491 ], [ 88.0032679, 27.1046062 ], [ 88.0018491, 27.1051374 ], [ 88.001594, 27.1051079 ], [ 88.0014923, 27.1050972 ], [ 88.0010194, 27.1045085 ], [ 88.000593, 27.1040454 ], [ 88.0002688, 27.1039462 ], [ 87.9998073, 27.1040193 ], [ 87.9994934, 27.1040691 ], [ 87.999152, 27.103882 ], [ 87.9986977, 27.1037543 ], [ 87.9980822, 27.1037158 ], [ 87.9972719, 27.1038885 ], [ 87.9951097, 27.1036422 ], [ 87.9948787, 27.1036776 ], [ 87.9944457, 27.1038883 ], [ 87.9933927, 27.1047689 ], [ 87.9930807, 27.1049787 ], [ 87.991479, 27.1056109 ], [ 87.9908064, 27.1065591 ], [ 87.9906741, 27.1077514 ], [ 87.9907174, 27.1085241 ], [ 87.9909512, 27.1091565 ], [ 87.9910748, 27.10974 ], [ 87.99104, 27.1102975 ], [ 87.9909068, 27.1107745 ], [ 87.990555, 27.1111944 ], [ 87.989916, 27.111576 ], [ 87.989654, 27.11181 ], [ 87.9895198, 27.1120997 ], [ 87.989512, 27.112718 ], [ 87.9897886, 27.1137765 ], [ 87.989758, 27.1141016 ], [ 87.9896114, 27.1144952 ], [ 87.9890693, 27.1155685 ], [ 87.9890326, 27.1158327 ], [ 87.9890676, 27.1160852 ], [ 87.989273, 27.1165102 ], [ 87.9891848, 27.1168763 ], [ 87.9890583, 27.1171773 ], [ 87.9884706, 27.1178019 ], [ 87.988385, 27.1181093 ], [ 87.9884819, 27.118869 ], [ 87.9884506, 27.1190384 ], [ 87.9882463, 27.1191746 ], [ 87.9873927, 27.1193843 ], [ 87.9872898, 27.1195069 ], [ 87.9873786, 27.1197905 ], [ 87.9881501, 27.1206425 ], [ 87.9884939, 27.1207438 ], [ 87.9890297, 27.1210198 ], [ 87.9890612, 27.1213039 ], [ 87.9887274, 27.1216334 ], [ 87.9886743, 27.1218233 ], [ 87.9888849, 27.1222641 ], [ 87.9888846, 27.1226657 ], [ 87.9886829, 27.123089 ], [ 87.9886208, 27.1234211 ], [ 87.988666, 27.123748 ], [ 87.9887943, 27.1239343 ], [ 87.9896774, 27.1244967 ], [ 87.9898839, 27.1246825 ], [ 87.9901075, 27.1250848 ], [ 87.9901763, 27.1254588 ], [ 87.9904414, 27.1254908 ], [ 87.9906937, 27.1261189 ], [ 87.9908374, 27.1271464 ], [ 87.9909632, 27.1275471 ], [ 87.9909825, 27.1278305 ], [ 87.9910654, 27.1281691 ], [ 87.991252, 27.129202 ], [ 87.9911201, 27.1301136 ], [ 87.9910115, 27.130455 ], [ 87.9910728, 27.130969 ], [ 87.9911787, 27.131045 ], [ 87.9916247, 27.1312201 ], [ 87.9920279, 27.1314699 ], [ 87.9927707, 27.131837 ], [ 87.9931104, 27.1319722 ], [ 87.9934281, 27.1321843 ], [ 87.993768, 27.1323398 ], [ 87.9942777, 27.1325145 ], [ 87.9945328, 27.1325533 ], [ 87.995129, 27.13254 ], [ 87.9956393, 27.1326379 ], [ 87.995872, 27.132792 ], [ 87.996147, 27.1331555 ], [ 87.9963594, 27.1332149 ], [ 87.996785, 27.1332931 ], [ 87.99708, 27.1331466 ], [ 87.9972717, 27.1331498 ], [ 87.9982266, 27.1336258 ], [ 87.9985107, 27.1338156 ], [ 87.9986605, 27.1340672 ], [ 87.9987432, 27.1342945 ], [ 87.9989203, 27.1345708 ], [ 87.9990427, 27.1347256 ], [ 87.9992587, 27.1348324 ], [ 87.9993666, 27.1348429 ], [ 87.9995823, 27.1349271 ], [ 87.9996644, 27.1350822 ], [ 87.9996525, 27.1353101 ], [ 87.9995902, 27.135816 ], [ 87.9994844, 27.1360446 ], [ 87.9991648, 27.1363357 ], [ 87.9989797, 27.1367093 ], [ 87.9990749, 27.136853 ], [ 87.9993876, 27.1372118 ], [ 87.9996736, 27.137679 ], [ 87.9997563, 27.1379063 ], [ 88.0002418, 27.1380473 ], [ 88.000527, 27.138431 ], [ 88.0004087, 27.1387432 ], [ 88.0006984, 27.1395467 ], [ 88.0004887, 27.1401506 ], [ 88.0005313, 27.140403 ], [ 88.0009238, 27.1407228 ], [ 88.0022058, 27.1413048 ], [ 88.0023007, 27.1414124 ], [ 88.0032698, 27.1415612 ], [ 88.0035786, 27.1415454 ], [ 88.0038592, 27.1414126 ], [ 88.0041547, 27.1413856 ], [ 88.0043195, 27.1417703 ], [ 88.0042303, 27.1422989 ], [ 88.0043961, 27.1427918 ], [ 88.0047888, 27.1431252 ], [ 88.0052206, 27.1433251 ], [ 88.0057057, 27.1435022 ], [ 88.0062431, 27.1434509 ], [ 88.0068742, 27.1433742 ], [ 88.0072646, 27.1434549 ], [ 88.007213, 27.1437576 ], [ 88.0072951, 27.1439127 ], [ 88.0074469, 27.1443087 ], [ 88.0076782, 27.1446545 ], [ 88.007748, 27.144918 ], [ 88.0077396, 27.1455204 ], [ 88.0078231, 27.1458312 ], [ 88.007949, 27.1463718 ], [ 88.007916, 27.147191 ], [ 88.0082865, 27.1480051 ], [ 88.0085316, 27.1484117 ], [ 88.0085898, 27.1488558 ], [ 88.0085402, 27.1493728 ], [ 88.0084221, 27.1496264 ], [ 88.0082879, 27.1497131 ], [ 88.0081694, 27.1499305 ], [ 88.0082914, 27.1500966 ], [ 88.008482, 27.1503367 ], [ 88.0086871, 27.1507075 ], [ 88.0093504, 27.1512555 ], [ 88.0093514, 27.151375 ], [ 88.0091926, 27.151665 ], [ 88.009076, 27.1521599 ], [ 88.0091908, 27.1529398 ], [ 88.0094794, 27.1536822 ], [ 88.0096425, 27.1538751 ], [ 88.0098752, 27.1542931 ], [ 88.0101621, 27.1548573 ], [ 88.0101918, 27.1551437 ], [ 88.0098617, 27.1558094 ], [ 88.0094666, 27.1567486 ], [ 88.0093629, 27.1571351 ], [ 88.0094062, 27.157471 ], [ 88.0094763, 27.1578315 ], [ 88.0096404, 27.1581304 ], [ 88.0097906, 27.1583459 ], [ 88.010291, 27.1587394 ], [ 88.0105353, 27.1589768 ], [ 88.0108867, 27.1592044 ], [ 88.0109689, 27.1593708 ], [ 88.0109839, 27.1595624 ], [ 88.0107732, 27.1600468 ], [ 88.0107243, 27.1605751 ], [ 88.0107825, 27.1610801 ], [ 88.0109191, 27.1612596 ], [ 88.0111089, 27.1614748 ], [ 88.0112183, 27.1617132 ], [ 88.01136, 27.1624702 ], [ 88.0114027, 27.1627226 ], [ 88.011408, 27.1633115 ], [ 88.0113609, 27.164106 ], [ 88.0112834, 27.1644653 ], [ 88.011314, 27.1648509 ], [ 88.0113704, 27.1651641 ], [ 88.0112514, 27.1653928 ], [ 88.0109191, 27.1657427 ], [ 88.0108403, 27.1659599 ], [ 88.0110305, 27.1662112 ], [ 88.0114748, 27.1663163 ], [ 88.0117981, 27.1663613 ], [ 88.0118932, 27.1664938 ], [ 88.0119493, 27.1667709 ], [ 88.0120722, 27.166973 ], [ 88.012235, 27.1671163 ], [ 88.0127885, 27.1673763 ], [ 88.0130039, 27.1674108 ], [ 88.0133401, 27.1674219 ], [ 88.0137277, 27.167189 ], [ 88.0141971, 27.167066 ], [ 88.0146863, 27.1676762 ], [ 88.0148108, 27.1680588 ], [ 88.01507, 27.1684789 ], [ 88.0153975, 27.1689819 ], [ 88.0155866, 27.1691114 ], [ 88.0157217, 27.1691961 ], [ 88.0163428, 27.1694669 ], [ 88.0165197, 27.1697183 ], [ 88.0167642, 27.1700414 ], [ 88.0171952, 27.1700744 ], [ 88.0173705, 27.170134 ], [ 88.0176132, 27.1702631 ], [ 88.0179528, 27.1706465 ], [ 88.0182116, 27.1710169 ], [ 88.0184406, 27.1710987 ], [ 88.0192216, 27.1711901 ], [ 88.0192085, 27.1712736 ], [ 88.0189708, 27.1716973 ], [ 88.0188254, 27.1720097 ], [ 88.0185483, 27.1729525 ], [ 88.0185385, 27.1729865 ], [ 88.01811, 27.1731701 ], [ 88.0178835, 27.1733635 ], [ 88.0175924, 27.1738823 ], [ 88.0174062, 27.1740754 ], [ 88.0171643, 27.174102 ], [ 88.0168418, 27.1741517 ], [ 88.016414, 27.1744075 ], [ 88.0162281, 27.1746254 ], [ 88.016029, 27.174927 ], [ 88.0154826, 27.1754611 ], [ 88.0152692, 27.1756432 ], [ 88.0149096, 27.1759819 ], [ 88.0145902, 27.1763678 ], [ 88.0142032, 27.1766729 ], [ 88.0138554, 27.176856 ], [ 88.013467, 27.1770032 ], [ 88.0131726, 27.177161 ], [ 88.012812, 27.1774524 ], [ 88.0123307, 27.1777311 ], [ 88.012361, 27.1780806 ], [ 88.0126621, 27.1786673 ], [ 88.0129341, 27.1790376 ], [ 88.0134098, 27.1796118 ], [ 88.0134128, 27.1799366 ], [ 88.013309, 27.1803931 ], [ 88.0133401, 27.1808261 ], [ 88.0134104, 27.1811392 ], [ 88.0132651, 27.1814629 ], [ 88.0131195, 27.1816806 ], [ 88.0128842, 27.1824516 ], [ 88.012835, 27.1829348 ], [ 88.0129058, 27.1833788 ], [ 88.0130824, 27.1835806 ], [ 88.013326, 27.1837367 ], [ 88.0133814, 27.1839394 ], [ 88.0133838, 27.1842034 ], [ 88.0130917, 27.1846161 ], [ 88.0135179, 27.1856351 ], [ 88.0135471, 27.185874 ], [ 88.0135508, 27.1862824 ], [ 88.0134458, 27.1865968 ], [ 88.0133408, 27.1868367 ], [ 88.0133829, 27.1870304 ], [ 88.0134512, 27.1871969 ], [ 88.0134263, 27.1873663 ], [ 88.0133077, 27.1876424 ], [ 88.0134056, 27.1880749 ], [ 88.0136911, 27.1883977 ], [ 88.013842, 27.1887689 ], [ 88.0138715, 27.1890349 ], [ 88.0138904, 27.1896597 ], [ 88.0138038, 27.1904771 ], [ 88.0137527, 27.190755 ], [ 88.0137678, 27.190958 ], [ 88.0140804, 27.1913415 ], [ 88.0144471, 27.1917224 ], [ 88.0147197, 27.1921423 ], [ 88.0149505, 27.1924159 ], [ 88.0152756, 27.192655 ], [ 88.015398, 27.1927985 ], [ 88.0156415, 27.1930133 ], [ 88.0158741, 27.1934065 ], [ 88.0158124, 27.1940454 ], [ 88.0157485, 27.1943708 ], [ 88.0157157, 27.1952126 ], [ 88.0156237, 27.1955021 ], [ 88.0158603, 27.1963419 ], [ 88.0158115, 27.1969424 ], [ 88.0157357, 27.1974236 ], [ 88.015378, 27.1980398 ], [ 88.0153826, 27.1985452 ], [ 88.0153204, 27.1990623 ], [ 88.0153016, 27.1999875 ], [ 88.0151693, 27.2002163 ], [ 88.014769, 27.2005938 ], [ 88.014065, 27.2014991 ], [ 88.0136752, 27.2015019 ], [ 88.0133661, 27.2015763 ], [ 88.0127543, 27.2022779 ], [ 88.0122393, 27.2033037 ], [ 88.0120257, 27.2034745 ], [ 88.0116645, 27.203705 ], [ 88.0115323, 27.2039473 ], [ 88.0117098, 27.2042574 ], [ 88.012307, 27.2048555 ], [ 88.0128776, 27.2055237 ], [ 88.0131785, 27.2060743 ], [ 88.0139837, 27.2074267 ], [ 88.0143263, 27.208135 ], [ 88.0145051, 27.2085781 ], [ 88.0144939, 27.2088061 ], [ 88.0150237, 27.209416 ], [ 88.0152297, 27.2098702 ], [ 88.0152468, 27.210292 ], [ 88.0154377, 27.2105433 ], [ 88.0154956, 27.2110235 ], [ 88.0153775, 27.2113492 ], [ 88.015163, 27.211423 ], [ 88.0144016, 27.2119925 ], [ 88.0143358, 27.2121013 ], [ 88.0139214, 27.2123931 ], [ 88.0135479, 27.2129746 ], [ 88.0135268, 27.213391 ], [ 88.0133959, 27.213863 ], [ 88.0128799, 27.2148256 ], [ 88.0126421, 27.2152046 ], [ 88.0124025, 27.2154828 ], [ 88.0120438, 27.2159534 ], [ 88.0120333, 27.2162057 ], [ 88.0121831, 27.2165157 ], [ 88.0124005, 27.2169549 ], [ 88.0127473, 27.2174352 ], [ 88.0129344, 27.2177384 ], [ 88.0131134, 27.2181116 ], [ 88.0133045, 27.2185667 ], [ 88.0135792, 27.2191281 ], [ 88.0137306, 27.2195489 ], [ 88.0140428, 27.2199546 ], [ 88.0143832, 27.2203361 ], [ 88.0146943, 27.2205505 ], [ 88.0152673, 27.2214954 ], [ 88.0155301, 27.2220368 ], [ 88.0157467, 27.2223591 ], [ 88.0159894, 27.2224769 ], [ 88.0164857, 27.2223041 ], [ 88.0167843, 27.2226043 ], [ 88.0172038, 27.2228406 ], [ 88.0175007, 27.2230435 ], [ 88.0178692, 27.2236049 ], [ 88.0179379, 27.2238097 ], [ 88.0179263, 27.2239903 ], [ 88.0180792, 27.2244946 ], [ 88.0182405, 27.2246747 ], [ 88.0184584, 27.2248393 ], [ 88.0187445, 27.225223 ], [ 88.0185481, 27.2258246 ], [ 88.0185388, 27.2262578 ], [ 88.0188616, 27.2277581 ], [ 88.0188768, 27.2279497 ], [ 88.0188668, 27.2283221 ], [ 88.018923, 27.2285381 ], [ 88.0190883, 27.2290199 ], [ 88.0189839, 27.2293433 ], [ 88.0189735, 27.2297077 ], [ 88.0189792, 27.2303429 ], [ 88.0190908, 27.2307504 ], [ 88.0192011, 27.2309302 ], [ 88.0194042, 27.2311577 ], [ 88.0195953, 27.23148 ], [ 88.0196223, 27.2316973 ], [ 88.0196421, 27.2321881 ], [ 88.0193144, 27.2331291 ], [ 88.0191951, 27.2333351 ], [ 88.0188927, 27.234082 ], [ 88.0188735, 27.2349706 ], [ 88.0189036, 27.2352845 ], [ 88.0190988, 27.2360637 ], [ 88.019317, 27.2363983 ], [ 88.0197383, 27.2368533 ], [ 88.0202535, 27.2373053 ], [ 88.0204966, 27.2374614 ], [ 88.0209426, 27.2376499 ], [ 88.0215897, 27.2378257 ], [ 88.022062, 27.2379051 ], [ 88.0226272, 27.2380347 ], [ 88.0234078, 27.2381125 ], [ 88.0237953, 27.2380017 ], [ 88.0242132, 27.2379261 ], [ 88.0243734, 27.2377793 ], [ 88.0246794, 27.2374309 ], [ 88.0248229, 27.2384158 ], [ 88.0243499, 27.2396195 ], [ 88.0243528, 27.2399331 ], [ 88.0244083, 27.2401848 ], [ 88.0244959, 27.2408819 ], [ 88.0243794, 27.2413995 ], [ 88.0240777, 27.2422184 ], [ 88.0242278, 27.2424113 ], [ 88.0247345, 27.2434523 ], [ 88.0248851, 27.2436926 ], [ 88.0250916, 27.2442551 ], [ 88.0255107, 27.244956 ], [ 88.0259798, 27.2455933 ], [ 88.0262563, 27.2458823 ], [ 88.0267468, 27.2465849 ], [ 88.0268474, 27.2472339 ], [ 88.0269892, 27.2477586 ], [ 88.0273333, 27.2485367 ], [ 88.0274422, 27.2489217 ], [ 88.0274776, 27.2493366 ], [ 88.0275526, 27.2495323 ], [ 88.0277968, 27.2497291 ], [ 88.0281037, 27.249887 ], [ 88.0289382, 27.250181 ], [ 88.0293171, 27.2502075 ], [ 88.0303271, 27.2501708 ], [ 88.0307175, 27.2502062 ], [ 88.030667, 27.2504796 ], [ 88.0308481, 27.2518478 ], [ 88.0310165, 27.2526588 ], [ 88.0308871, 27.253138 ], [ 88.0304667, 27.2539534 ], [ 88.0301788, 27.2546233 ], [ 88.0300498, 27.2550778 ], [ 88.0301342, 27.2555329 ], [ 88.0304342, 27.2562459 ], [ 88.0307453, 27.2575409 ], [ 88.0308317, 27.2581517 ], [ 88.0307545, 27.2585313 ], [ 88.0306164, 27.2588211 ], [ 88.0306411, 27.2593083 ], [ 88.0305886, 27.2601908 ], [ 88.0306318, 27.2604973 ], [ 88.0309823, 27.2613408 ], [ 88.0310287, 27.2619903 ], [ 88.0308725, 27.262569 ], [ 88.0305548, 27.2630925 ], [ 88.0304975, 27.2634539 ], [ 88.0306426, 27.26385 ], [ 88.0309076, 27.264191 ], [ 88.0315368, 27.2645834 ], [ 88.0316626, 27.2648848 ], [ 88.0317472, 27.2655723 ], [ 88.0317324, 27.26615 ], [ 88.0316367, 27.2666538 ], [ 88.03114, 27.2674878 ], [ 88.0310225, 27.2678857 ], [ 88.0310307, 27.2687678 ], [ 88.0311174, 27.269417 ], [ 88.0309431, 27.2702282 ], [ 88.0309279, 27.2707698 ], [ 88.0308318, 27.271294 ], [ 88.0305945, 27.2717808 ], [ 88.0301536, 27.2720909 ], [ 88.0301348, 27.2722354 ], [ 88.0303661, 27.2732964 ], [ 88.0308585, 27.2741952 ], [ 88.0311122, 27.2754185 ], [ 88.0310009, 27.2764842 ], [ 88.0310691, 27.2773117 ], [ 88.0319876, 27.2784782 ], [ 88.0321535, 27.278944 ], [ 88.0323001, 27.2795746 ], [ 88.0324527, 27.2807805 ], [ 88.0329035, 27.2815353 ], [ 88.0329063, 27.2818421 ], [ 88.03162, 27.2845365 ], [ 88.0314863, 27.2853677 ], [ 88.0314691, 27.2859077 ], [ 88.0315767, 27.2864117 ], [ 88.0319838, 27.2868057 ], [ 88.0324508, 27.2871272 ], [ 88.0334422, 27.2874245 ], [ 88.0337263, 27.2875668 ], [ 88.0341968, 27.2882672 ], [ 88.0346246, 27.2887153 ], [ 88.03467, 27.2892542 ], [ 88.0349355, 27.2896312 ], [ 88.0351595, 27.2898281 ], [ 88.0357053, 27.2899324 ], [ 88.0361695, 27.289947 ], [ 88.0366143, 27.290052 ], [ 88.0370218, 27.2905002 ], [ 88.037536, 27.291541 ], [ 88.0379831, 27.2918987 ], [ 88.038368, 27.2920763 ], [ 88.0389332, 27.2920902 ], [ 88.0396177, 27.2919046 ], [ 88.0405226, 27.291591 ], [ 88.0410601, 27.2914765 ], [ 88.0417379, 27.2916519 ], [ 88.042836, 27.2918062 ], [ 88.0433549, 27.292619 ], [ 88.0444239, 27.2935744 ], [ 88.044665, 27.2938998 ], [ 88.0445383, 27.2940632 ], [ 88.0441199, 27.2942784 ], [ 88.0438871, 27.2947697 ], [ 88.0438897, 27.2950472 ], [ 88.0436982, 27.2960458 ], [ 88.0434479, 27.2966839 ], [ 88.0433957, 27.2969776 ], [ 88.0430367, 27.2976166 ], [ 88.0423729, 27.2990091 ], [ 88.0421055, 27.299715 ], [ 88.0415486, 27.3007299 ], [ 88.0408996, 27.3016823 ], [ 88.0409732, 27.3036898 ], [ 88.0413827, 27.3045373 ], [ 88.0417163, 27.304959 ], [ 88.0422919, 27.3059496 ], [ 88.0427592, 27.3070404 ], [ 88.0430366, 27.307397 ], [ 88.0440517, 27.3084521 ], [ 88.0442207, 27.308972 ], [ 88.044279, 27.3093303 ], [ 88.044576, 27.30982 ], [ 88.0449275, 27.3102731 ], [ 88.0465803, 27.3110459 ], [ 88.0469875, 27.3115798 ], [ 88.0483887, 27.3128598 ], [ 88.0485572, 27.3133165 ], [ 88.0487298, 27.3141478 ], [ 88.0486426, 27.3146042 ], [ 88.0487364, 27.3148494 ], [ 88.0488834, 27.3149633 ], [ 88.0494338, 27.3151374 ], [ 88.0495478, 27.3156442 ], [ 88.0495036, 27.3167207 ], [ 88.0492961, 27.3180286 ], [ 88.0492863, 27.3189266 ], [ 88.0495299, 27.3195137 ], [ 88.0505105, 27.3207788 ], [ 88.050848, 27.3216742 ], [ 88.0512177, 27.3221136 ], [ 88.0519003, 27.3227763 ], [ 88.0520855, 27.3230524 ], [ 88.0522186, 27.3235771 ], [ 88.0522046, 27.324033 ], [ 88.0523757, 27.3246995 ], [ 88.0527613, 27.3249425 ], [ 88.0531465, 27.3250705 ], [ 88.0538465, 27.325636 ], [ 88.0543424, 27.3258443 ], [ 88.055515, 27.3260972 ], [ 88.0558084, 27.32621 ], [ 88.0565994, 27.3267749 ], [ 88.0567676, 27.3271323 ], [ 88.0570637, 27.3275227 ], [ 88.0577801, 27.327876 ], [ 88.0582387, 27.3280191 ], [ 88.0590263, 27.3281598 ], [ 88.0594107, 27.328272 ], [ 88.0599998, 27.3286601 ], [ 88.0600251, 27.3293931 ], [ 88.0599561, 27.3298359 ], [ 88.0600509, 27.3301781 ], [ 88.0607564, 27.3313143 ], [ 88.0615229, 27.3318266 ], [ 88.0623493, 27.3327333 ], [ 88.0629403, 27.3336105 ], [ 88.0632946, 27.3341633 ], [ 88.0638066, 27.3346513 ], [ 88.0651456, 27.3356233 ], [ 88.0654437, 27.3358537 ], [ 88.0658635, 27.3360416 ], [ 88.0663958, 27.3360229 ], [ 88.0664692, 27.3361035 ], [ 88.0663448, 27.3364316 ], [ 88.0653027, 27.3383505 ], [ 88.0648056, 27.3399381 ], [ 88.0647195, 27.3404442 ], [ 88.0646727, 27.3412928 ], [ 88.0645833, 27.3415236 ], [ 88.063949, 27.3420993 ], [ 88.0633541, 27.3429702 ], [ 88.0630314, 27.3436404 ], [ 88.0628299, 27.343642 ], [ 88.0623711, 27.343483 ], [ 88.0621343, 27.3435502 ], [ 88.0616486, 27.3443526 ], [ 88.061344, 27.3450588 ], [ 88.0612396, 27.3455823 ], [ 88.0611858, 27.3456963 ], [ 88.0611704, 27.3460055 ], [ 88.0613375, 27.3462998 ], [ 88.0615597, 27.3465575 ], [ 88.0615071, 27.3468039 ], [ 88.0612759, 27.3471933 ], [ 88.0610009, 27.3476919 ], [ 88.0607173, 27.3482613 ], [ 88.0605729, 27.3485256 ], [ 88.060158, 27.3491166 ], [ 88.0598519, 27.3496253 ], [ 88.0596719, 27.3500826 ], [ 88.0595675, 27.3504758 ], [ 88.0593702, 27.3509173 ], [ 88.0589176, 27.3513471 ], [ 88.0586825, 27.351658 ], [ 88.0585945, 27.3520354 ], [ 88.0585601, 27.3524024 ], [ 88.0585447, 27.3527199 ], [ 88.0584611, 27.3533585 ], [ 88.0582108, 27.3540141 ], [ 88.0578714, 27.3547821 ], [ 88.0577297, 27.3552908 ], [ 88.057479, 27.3558319 ], [ 88.0568071, 27.3563266 ], [ 88.0560417, 27.3566099 ], [ 88.0554971, 27.3570698 ], [ 88.0546254, 27.357681 ], [ 88.0534422, 27.3582788 ], [ 88.0530048, 27.3583791 ], [ 88.0517976, 27.3583236 ], [ 88.0512487, 27.3583269 ], [ 88.0506827, 27.358462 ], [ 88.0500097, 27.3588416 ], [ 88.0493034, 27.3595666 ], [ 88.048798, 27.3601562 ], [ 88.0478929, 27.361258 ], [ 88.0474599, 27.3618344 ], [ 88.0471357, 27.362358 ], [ 88.0471384, 27.3626323 ], [ 88.0471084, 27.3632701 ], [ 88.047109, 27.3634208 ], [ 88.0470205, 27.3637464 ], [ 88.046516, 27.3645827 ], [ 88.0460096, 27.3651415 ], [ 88.045375, 27.3656694 ], [ 88.0448658, 27.366048 ], [ 88.0447041, 27.3663267 ], [ 88.0445261, 27.3668667 ], [ 88.0443299, 27.3673763 ], [ 88.0440601, 27.3678156 ], [ 88.0435904, 27.3684919 ], [ 88.0430834, 27.3690665 ], [ 88.0421026, 27.3697755 ], [ 88.0418492, 27.3700391 ], [ 88.0416691, 27.3703676 ], [ 88.041637, 27.3707758 ], [ 88.0415529, 27.3716077 ], [ 88.0415404, 27.3722141 ], [ 88.0416948, 27.3731109 ], [ 88.0418464, 27.3736467 ], [ 88.0420891, 27.3741999 ], [ 88.0421475, 27.3745604 ], [ 88.0422784, 27.3747381 ], [ 88.0427022, 27.3751752 ], [ 88.04285, 27.3753697 ], [ 88.0428876, 27.3755337 ], [ 88.0429088, 27.3759076 ], [ 88.0429688, 27.3763164 ], [ 88.0432139, 27.3768252 ], [ 88.0435653, 27.377537 ], [ 88.0437718, 27.3780899 ], [ 88.044033, 27.3786277 ], [ 88.0443494, 27.3792119 ], [ 88.0446644, 27.3796518 ], [ 88.0448713, 27.380221 ], [ 88.0448018, 27.3806299 ], [ 88.0447932, 27.3816588 ], [ 88.0449295, 27.3825873 ], [ 88.0448054, 27.382965 ], [ 88.0446066, 27.3833577 ], [ 88.0443558, 27.3838009 ], [ 88.0439626, 27.384783 ], [ 88.0439823, 27.3849802 ], [ 88.0440401, 27.3852404 ], [ 88.0442613, 27.3855964 ], [ 88.0446147, 27.3860686 ], [ 88.044692, 27.3864922 ], [ 88.0446415, 27.3869968 ], [ 88.0446445, 27.3872935 ], [ 88.0447199, 27.3874565 ], [ 88.0448872, 27.3877655 ], [ 88.0449821, 27.3881388 ], [ 88.0450211, 27.3884323 ], [ 88.0448425, 27.3888578 ], [ 88.0446855, 27.3896887 ], [ 88.0446526, 27.3901001 ], [ 88.0448586, 27.3905723 ], [ 88.0451226, 27.3914367 ], [ 88.0452726, 27.3917943 ], [ 88.0454945, 27.3920701 ], [ 88.0456446, 27.392413 ], [ 88.0457008, 27.3926394 ], [ 88.0456543, 27.3934389 ], [ 88.0455873, 27.3941428 ], [ 88.0455936, 27.3949409 ], [ 88.045619, 27.395564 ], [ 88.0457137, 27.3958904 ], [ 88.0461202, 27.3963769 ], [ 88.0463447, 27.39688 ], [ 88.0467005, 27.3977443 ], [ 88.0471093, 27.3984091 ], [ 88.0473343, 27.399012 ], [ 88.0473552, 27.3992894 ], [ 88.0478717, 27.3997751 ], [ 88.0479486, 27.3999912 ], [ 88.0481706, 27.4003775 ], [ 88.0482859, 27.4010128 ], [ 88.0482896, 27.4014054 ], [ 88.0479297, 27.4020443 ], [ 88.0476268, 27.4027624 ], [ 88.0473938, 27.4033862 ], [ 88.0474359, 27.403959 ], [ 88.0473504, 27.4046116 ], [ 88.0469891, 27.4051043 ], [ 88.046827, 27.4053353 ], [ 88.0467745, 27.4055951 ], [ 88.0469763, 27.4058228 ], [ 88.0476972, 27.4064703 ], [ 88.0478799, 27.4065677 ], [ 88.0492581, 27.4070632 ], [ 88.0494069, 27.4073554 ], [ 88.0495843, 27.4086762 ], [ 88.0498114, 27.4094315 ], [ 88.0499625, 27.4099796 ], [ 88.0502245, 27.4106161 ], [ 88.0503021, 27.4110713 ], [ 88.0505473, 27.4118704 ], [ 88.0505507, 27.4122291 ], [ 88.0503164, 27.4125738 ], [ 88.0502826, 27.4128854 ], [ 88.0504131, 27.4131123 ], [ 88.0510564, 27.4134345 ], [ 88.0514637, 27.4139368 ], [ 88.0520725, 27.4144067 ], [ 88.0525149, 27.4148111 ], [ 88.0529228, 27.4154442 ], [ 88.053419, 27.4159936 ], [ 88.0538294, 27.4164662 ], [ 88.0539272, 27.4171174 ], [ 88.0542051, 27.4174921 ], [ 88.0552376, 27.4183326 ], [ 88.0555829, 27.4184757 ], [ 88.0561001, 27.4186374 ], [ 88.0563766, 27.4187978 ], [ 88.0567609, 27.4187949 ], [ 88.0569964, 27.4187442 ], [ 88.0574717, 27.4185774 ], [ 88.0578192, 27.418559 ], [ 88.0579851, 27.4186547 ], [ 88.0593179, 27.4202938 ], [ 88.0597048, 27.4206977 ], [ 88.0600577, 27.4211207 ], [ 88.0602971, 27.4212994 ], [ 88.0615099, 27.4218113 ], [ 88.0625555, 27.4220989 ], [ 88.0629418, 27.422308 ], [ 88.063073, 27.4224212 ], [ 88.0653184, 27.4240203 ], [ 88.0658711, 27.4243748 ], [ 88.0664406, 27.4246322 ], [ 88.0667172, 27.4248737 ], [ 88.066885, 27.4252647 ], [ 88.0669972, 27.4254604 ], [ 88.0676569, 27.425505 ], [ 88.068154, 27.4258599 ], [ 88.0684106, 27.4259234 ], [ 88.0691274, 27.4258366 ], [ 88.06938, 27.4258347 ], [ 88.0701511, 27.4261537 ], [ 88.070299, 27.4262834 ], [ 88.0707193, 27.4262148 ], [ 88.0712129, 27.426211 ], [ 88.0715957, 27.4260771 ], [ 88.0717971, 27.4260282 ], [ 88.072219, 27.4261874 ], [ 88.0725508, 27.4263812 ], [ 88.0726971, 27.4264116 ], [ 88.0733371, 27.4263751 ], [ 88.0737033, 27.4264039 ], [ 88.0741443, 27.426581 ], [ 88.0744193, 27.4266443 ], [ 88.0747466, 27.4265937 ], [ 88.0751864, 27.4264917 ], [ 88.0756628, 27.4265377 ], [ 88.0764344, 27.4269062 ], [ 88.0774956, 27.426898 ], [ 88.0782076, 27.4267301 ], [ 88.0786619, 27.4266937 ], [ 88.0788842, 27.426691 ], [ 88.0795624, 27.4267512 ], [ 88.0799292, 27.426895 ], [ 88.0799859, 27.427075 ], [ 88.0800081, 27.4274652 ], [ 88.0798681, 27.4280867 ], [ 88.0798354, 27.4284953 ], [ 88.0799313, 27.429031 ], [ 88.0800473, 27.4296226 ], [ 88.0800856, 27.4297839 ], [ 88.0800878, 27.4300117 ], [ 88.0799795, 27.4301773 ], [ 88.079233, 27.4305102 ], [ 88.0788516, 27.4308064 ], [ 88.0786542, 27.4312479 ], [ 88.0786385, 27.4315083 ], [ 88.0786057, 27.4319183 ], [ 88.0784809, 27.4322126 ], [ 88.0780454, 27.4326085 ], [ 88.0772074, 27.4330234 ], [ 88.0763691, 27.4333389 ], [ 88.0757663, 27.4334248 ], [ 88.075163, 27.4333988 ], [ 88.0746125, 27.4333221 ], [ 88.0743923, 27.4333226 ], [ 88.073557, 27.4337208 ], [ 88.0726618, 27.4341346 ], [ 88.0716989, 27.4348459 ], [ 88.0709014, 27.4355853 ], [ 88.0699562, 27.4362948 ], [ 88.0688667, 27.4371847 ], [ 88.0680879, 27.4379758 ], [ 88.0679443, 27.4382697 ], [ 88.0678352, 27.4384812 ], [ 88.0678183, 27.4385144 ], [ 88.0676079, 27.439224 ], [ 88.0677904, 27.4394273 ], [ 88.0679385, 27.4395923 ], [ 88.0687001, 27.4407619 ], [ 88.0689576, 27.4409066 ], [ 88.0691072, 27.4412168 ], [ 88.0691839, 27.4415591 ], [ 88.0694621, 27.4419653 ], [ 88.0698871, 27.4423704 ], [ 88.0702229, 27.4430357 ], [ 88.0708127, 27.4434891 ], [ 88.0709068, 27.4437501 ], [ 88.0709282, 27.444059 ], [ 88.0710571, 27.4441889 ], [ 88.0717556, 27.4445107 ], [ 88.0720324, 27.4446868 ], [ 88.0722734, 27.4450278 ], [ 88.0723693, 27.4454693 ], [ 88.0723348, 27.4456974 ], [ 88.0720442, 27.4459117 ], [ 88.0712613, 27.4463419 ], [ 88.0707882, 27.4466569 ], [ 88.0705175, 27.4470335 ], [ 88.0704835, 27.4473112 ], [ 88.0703056, 27.4478044 ], [ 88.0701793, 27.4480175 ], [ 88.0698346, 27.4483292 ], [ 88.0689258, 27.4489566 ], [ 88.0671036, 27.4498031 ], [ 88.0668877, 27.4502289 ], [ 88.0665229, 27.4521923 ], [ 88.0662339, 27.4526502 ], [ 88.0655242, 27.453082 ], [ 88.0645974, 27.4537411 ], [ 88.0643802, 27.4539707 ], [ 88.0645281, 27.4541658 ], [ 88.0649702, 27.4544399 ], [ 88.0657059, 27.4548111 ], [ 88.0659461, 27.4550687 ], [ 88.0660611, 27.4555912 ], [ 88.066202, 27.4568965 ], [ 88.0669215, 27.4574798 ], [ 88.0670156, 27.4578039 ], [ 88.0669089, 27.4580823 ], [ 88.0664736, 27.4585097 ], [ 88.0657279, 27.4590073 ], [ 88.0652349, 27.4591577 ], [ 88.0647596, 27.4591771 ], [ 88.0641184, 27.4591008 ], [ 88.0636062, 27.4591702 ], [ 88.0628037, 27.4594854 ], [ 88.0623129, 27.4598005 ], [ 88.0616601, 27.4604259 ], [ 88.0610419, 27.4609044 ], [ 88.0603142, 27.461316 ], [ 88.0595015, 27.4624818 ], [ 88.0592694, 27.4630724 ], [ 88.0592912, 27.463431 ], [ 88.0591661, 27.4637749 ], [ 88.0578612, 27.4651227 ], [ 88.0572817, 27.4658129 ], [ 88.0570836, 27.4661258 ], [ 88.0570876, 27.4665499 ], [ 88.0570362, 27.4669271 ], [ 88.0569294, 27.4672685 ], [ 88.0565857, 27.4676975 ], [ 88.0560779, 27.4681571 ], [ 88.0555861, 27.4684384 ], [ 88.0546928, 27.4687881 ], [ 88.0536358, 27.4692856 ], [ 88.0533998, 27.4694679 ], [ 88.0519832, 27.4706541 ], [ 88.0513517, 27.4716718 ], [ 88.0510435, 27.4719832 ], [ 88.050333, 27.4723473 ], [ 88.0496928, 27.472386 ], [ 88.048834, 27.4725075 ], [ 88.0483228, 27.4726896 ], [ 88.0479081, 27.4733628 ], [ 88.0475324, 27.4742951 ], [ 88.0471166, 27.4747901 ], [ 88.0459505, 27.4754012 ], [ 88.0454975, 27.4759123 ], [ 88.0452653, 27.4765006 ], [ 88.0449053, 27.4771576 ], [ 88.0445085, 27.4777968 ], [ 88.0438213, 27.4786841 ], [ 88.0438229, 27.4788623 ], [ 88.0440664, 27.4794651 ], [ 88.0445135, 27.4802627 ], [ 88.0446079, 27.4805553 ], [ 88.0451298, 27.4815801 ], [ 88.0451325, 27.4818576 ], [ 88.0445566, 27.4828907 ], [ 88.044235, 27.4837256 ], [ 88.0440066, 27.4847223 ], [ 88.0438088, 27.4851479 ], [ 88.0437267, 27.4860961 ], [ 88.0436569, 27.4884159 ], [ 88.0437316, 27.4905045 ], [ 88.0439241, 27.4915319 ], [ 88.0441667, 27.4919722 ], [ 88.0443168, 27.4923953 ], [ 88.044434, 27.4931615 ], [ 88.044351, 27.4940758 ], [ 88.0439196, 27.4949454 ], [ 88.0435947, 27.4954374 ], [ 88.0435438, 27.4958777 ], [ 88.0436016, 27.4961706 ], [ 88.044104, 27.4969993 ], [ 88.0442551, 27.4975216 ], [ 88.0444303, 27.4985987 ], [ 88.0447094, 27.4990862 ], [ 88.0450986, 27.4995728 ], [ 88.0454298, 27.4997508 ], [ 88.0455974, 27.500009 ], [ 88.0456218, 27.5004533 ], [ 88.0455427, 27.5005148 ], [ 88.0464087, 27.5016589 ], [ 88.0467474, 27.5019564 ], [ 88.0477372, 27.5024182 ], [ 88.0482407, 27.5022859 ], [ 88.0487943, 27.5024328 ], [ 88.0494999, 27.5033277 ], [ 88.0495744, 27.5035843 ], [ 88.0494817, 27.5039483 ], [ 88.0496271, 27.5040758 ], [ 88.050207, 27.504394 ], [ 88.0506898, 27.5046047 ], [ 88.0511943, 27.5046438 ], [ 88.0524712, 27.5049545 ], [ 88.0532159, 27.5049714 ], [ 88.0537442, 27.5049245 ], [ 88.054175, 27.5047272 ], [ 88.054705, 27.5048518 ], [ 88.0546417, 27.505775 ], [ 88.0559972, 27.5068342 ], [ 88.0563134, 27.5072175 ], [ 88.0564615, 27.5076248 ], [ 88.0570948, 27.5084976 ], [ 88.0574424, 27.5096523 ], [ 88.0580239, 27.5102052 ], [ 88.0585807, 27.510607 ], [ 88.0591119, 27.5108602 ], [ 88.0596656, 27.5110071 ], [ 88.0602186, 27.5110232 ], [ 88.0607501, 27.5112989 ], [ 88.0610424, 27.5117028 ], [ 88.0610683, 27.5118966 ], [ 88.0614087, 27.5123001 ], [ 88.0614365, 27.5126857 ], [ 88.0610576, 27.5132887 ], [ 88.0607244, 27.5136342 ], [ 88.0602227, 27.5139584 ], [ 88.0598891, 27.514261 ], [ 88.0592923, 27.514631 ], [ 88.0584779, 27.5149372 ], [ 88.0578812, 27.5153908 ], [ 88.0571692, 27.516276 ], [ 88.0570525, 27.5166402 ], [ 88.0570808, 27.5170912 ], [ 88.0572827, 27.5180958 ], [ 88.0579685, 27.5194826 ], [ 88.0588794, 27.521725 ], [ 88.0594666, 27.5227922 ], [ 88.0598367, 27.5238407 ], [ 88.0605418, 27.5246701 ], [ 88.0610758, 27.5252007 ], [ 88.061271, 27.5254993 ], [ 88.0620939, 27.526136 ], [ 88.0625523, 27.526304 ], [ 88.0630577, 27.5263655 ], [ 88.0635885, 27.5265532 ], [ 88.0641414, 27.5266144 ], [ 88.0655597, 27.5266036 ], [ 88.0660169, 27.5266429 ], [ 88.0664954, 27.5264678 ], [ 88.0670487, 27.5265064 ], [ 88.0668155, 27.5272572 ], [ 88.0659157, 27.5286155 ], [ 88.0657741, 27.5288941 ], [ 88.0651333, 27.5297563 ], [ 88.0646067, 27.529995 ], [ 88.0639593, 27.5301082 ], [ 88.0631189, 27.5302207 ], [ 88.0624451, 27.5301627 ], [ 88.0614618, 27.5303417 ], [ 88.0606966, 27.5307762 ], [ 88.0596961, 27.531684 ], [ 88.0592922, 27.5321789 ], [ 88.0589145, 27.5329105 ], [ 88.0589188, 27.5333594 ], [ 88.0587805, 27.5339831 ], [ 88.0588652, 27.5352888 ], [ 88.0590885, 27.5360158 ], [ 88.0595293, 27.5368472 ], [ 88.0596577, 27.5377035 ], [ 88.059925, 27.538067 ], [ 88.0603223, 27.5393702 ], [ 88.0607635, 27.5402467 ], [ 88.0610304, 27.5405019 ], [ 88.0616598, 27.540946 ], [ 88.0625535, 27.541431 ], [ 88.0629415, 27.541771 ], [ 88.063431, 27.5426674 ], [ 88.0637521, 27.5435448 ], [ 88.0650147, 27.5448843 ], [ 88.0656162, 27.5449225 ], [ 88.0664838, 27.5451302 ], [ 88.0670387, 27.5453832 ], [ 88.0673291, 27.5455727 ], [ 88.068397, 27.5465933 ], [ 88.0684963, 27.5469151 ], [ 88.0684556, 27.547687 ], [ 88.0685703, 27.5495925 ], [ 88.0683594, 27.5501717 ], [ 88.0679783, 27.5505401 ], [ 88.0679837, 27.5510973 ], [ 88.0682287, 27.551567 ], [ 88.0683777, 27.5520576 ], [ 88.0687442, 27.5527181 ], [ 88.0689676, 27.5534451 ], [ 88.068977, 27.5544106 ], [ 88.0688132, 27.5548834 ], [ 88.0687467, 27.5553983 ], [ 88.0690887, 27.5560161 ], [ 88.0695723, 27.5562899 ], [ 88.0701499, 27.5563283 ], [ 88.0708028, 27.5567091 ], [ 88.0720543, 27.5568709 ], [ 88.0726328, 27.5570176 ], [ 88.0730897, 27.557014 ], [ 88.0739125, 27.5576078 ], [ 88.0745442, 27.5582662 ], [ 88.0749304, 27.5584144 ], [ 88.0758908, 27.5589055 ], [ 88.0766782, 27.5595672 ], [ 88.0771929, 27.5599129 ], [ 88.0780417, 27.5607095 ], [ 88.0786513, 27.5615621 ], [ 88.0790459, 27.5619877 ], [ 88.0797839, 27.5636695 ], [ 88.079788, 27.5640958 ], [ 88.0804227, 27.5644677 ], [ 88.0805767, 27.5648139 ], [ 88.0809091, 27.5650256 ], [ 88.080974, 27.5655079 ], [ 88.0807098, 27.5661259 ], [ 88.0804126, 27.5664756 ], [ 88.0799682, 27.5671762 ], [ 88.079763, 27.5676854 ], [ 88.0794073, 27.5681981 ], [ 88.0792613, 27.5686008 ], [ 88.0787536, 27.5689792 ], [ 88.0777366, 27.5694429 ], [ 88.0769914, 27.5700645 ], [ 88.0764861, 27.5706302 ], [ 88.076247, 27.5707674 ], [ 88.0757715, 27.5713329 ], [ 88.0751164, 27.5719809 ], [ 88.0750589, 27.5722499 ], [ 88.0753336, 27.5726493 ], [ 88.0753961, 27.572888 ], [ 88.076277, 27.5738467 ], [ 88.0765214, 27.5742464 ], [ 88.0766455, 27.5747012 ], [ 88.0768298, 27.5751013 ], [ 88.0768324, 27.5753698 ], [ 88.0770781, 27.5759026 ], [ 88.0774722, 27.5761951 ], [ 88.0777737, 27.5763529 ], [ 88.0782336, 27.5772337 ], [ 88.0782979, 27.5776596 ], [ 88.0782725, 27.5781697 ], [ 88.0783384, 27.578758 ], [ 88.0785568, 27.5795324 ], [ 88.0789783, 27.5796645 ], [ 88.0796777, 27.5804351 ], [ 88.0798623, 27.5808624 ], [ 88.0800811, 27.581745 ], [ 88.0804811, 27.5827053 ], [ 88.0812442, 27.5839041 ], [ 88.0818284, 27.5851855 ], [ 88.0820106, 27.5853713 ], [ 88.0826509, 27.5863048 ], [ 88.0827436, 27.5865974 ], [ 88.0829879, 27.5869723 ], [ 88.0831722, 27.5873724 ], [ 88.0834778, 27.5878776 ], [ 88.083721, 27.5881442 ], [ 88.0839663, 27.5886251 ], [ 88.0840591, 27.5889176 ], [ 88.0846398, 27.5899058 ], [ 88.0849452, 27.5903839 ], [ 88.0854922, 27.5909685 ], [ 88.0865874, 27.5923271 ], [ 88.0875876, 27.5930953 ], [ 88.0884977, 27.5939726 ], [ 88.0888628, 27.5943984 ], [ 88.089016, 27.5947175 ], [ 88.0895029, 27.5953025 ], [ 88.091044, 27.5960958 ], [ 88.0914375, 27.596386 ], [ 88.0918324, 27.5967574 ], [ 88.0922286, 27.5973183 ], [ 88.0927442, 27.5977948 ], [ 88.0935308, 27.5982714 ], [ 88.094164, 27.5984808 ], [ 88.0947066, 27.5986096 ], [ 88.0953071, 27.59858 ], [ 88.0966037, 27.5989714 ], [ 88.0969957, 27.5990472 ], [ 88.0974488, 27.599285 ], [ 88.0978107, 27.5993905 ], [ 88.098204, 27.5996536 ], [ 88.0990799, 27.6000753 ], [ 88.0998362, 27.6005521 ], [ 88.1002002, 27.6008696 ], [ 88.1006845, 27.6011884 ], [ 88.1011975, 27.6013986 ], [ 88.1021925, 27.601684 ], [ 88.1028551, 27.601787 ], [ 88.1037, 27.6020736 ], [ 88.1041815, 27.6021781 ], [ 88.1054796, 27.6027024 ], [ 88.1057228, 27.6029689 ], [ 88.1061168, 27.6032343 ], [ 88.1065718, 27.6036593 ], [ 88.1070853, 27.6039214 ], [ 88.1082406, 27.6057937 ], [ 88.1084377, 27.6062546 ], [ 88.1087487, 27.606577 ], [ 88.1095024, 27.606862 ], [ 88.1099695, 27.6074088 ], [ 88.1105904, 27.607952 ], [ 88.1109621, 27.6085311 ], [ 88.1114851, 27.6089037 ], [ 88.1125001, 27.609769 ], [ 88.1135028, 27.6108535 ], [ 88.1136024, 27.6114278 ], [ 88.1133226, 27.6117338 ], [ 88.1132307, 27.6121632 ], [ 88.1136836, 27.6131883 ], [ 88.1140279, 27.6148663 ], [ 88.1141661, 27.6151901 ], [ 88.1143049, 27.6175194 ], [ 88.1147396, 27.6186146 ], [ 88.1151376, 27.6199651 ], [ 88.1151794, 27.6202738 ], [ 88.1151499, 27.621181 ], [ 88.1154242, 27.6216255 ], [ 88.1157937, 27.6220331 ], [ 88.1168321, 27.6238431 ], [ 88.1176331, 27.6250188 ], [ 88.1179084, 27.6255648 ], [ 88.1186303, 27.6265697 ], [ 88.119038, 27.6269274 ], [ 88.1193509, 27.6274392 ], [ 88.1192408, 27.6279364 ], [ 88.1187806, 27.6280778 ], [ 88.1182838, 27.6284247 ], [ 88.1177278, 27.6286683 ], [ 88.1174411, 27.6288759 ], [ 88.1171398, 27.6295146 ], [ 88.1171059, 27.6299773 ], [ 88.1177438, 27.6321131 ], [ 88.1181908, 27.6344761 ], [ 88.1183295, 27.6348518 ], [ 88.1187582, 27.6353446 ], [ 88.1192113, 27.6363697 ], [ 88.1197189, 27.6370853 ], [ 88.1203126, 27.6386755 ], [ 88.1204955, 27.6396509 ], [ 88.1204232, 27.6400801 ], [ 88.1201627, 27.6409914 ], [ 88.120186, 27.6413499 ], [ 88.1203063, 27.6418475 ], [ 88.1202529, 27.6422586 ], [ 88.1201393, 27.6424828 ], [ 88.1199915, 27.6430841 ], [ 88.1199036, 27.643906 ], [ 88.1197203, 27.6448167 ], [ 88.1197059, 27.6452635 ], [ 88.1199225, 27.6457581 ], [ 88.1208882, 27.6460594 ], [ 88.1216237, 27.646446 ], [ 88.1220307, 27.646736 ], [ 88.1222264, 27.6470412 ], [ 88.1222122, 27.6475737 ], [ 88.1234975, 27.6490207 ], [ 88.123964, 27.6494275 ], [ 88.1242367, 27.6497682 ], [ 88.1256544, 27.6509727 ], [ 88.1261383, 27.6512779 ], [ 88.1264494, 27.6515325 ], [ 88.1269916, 27.651853 ], [ 88.1272455, 27.6522119 ], [ 88.1274778, 27.6523815 ], [ 88.1278456, 27.6525499 ], [ 88.1286177, 27.6527331 ], [ 88.1291393, 27.65295 ], [ 88.1296088, 27.6537019 ], [ 88.1300546, 27.6540051 ], [ 88.1306582, 27.6546183 ], [ 88.1308953, 27.6552503 ], [ 88.1311293, 27.6555237 ], [ 88.131844, 27.6557908 ], [ 88.1322492, 27.6558394 ], [ 88.1327129, 27.6560251 ], [ 88.1332723, 27.6561559 ], [ 88.1340081, 27.6565627 ], [ 88.1349341, 27.6567424 ], [ 88.1357445, 27.6569591 ], [ 88.1365766, 27.6573629 ], [ 88.1370613, 27.657686 ], [ 88.1382464, 27.6587208 ], [ 88.1384818, 27.6591295 ], [ 88.13887, 27.6594873 ], [ 88.1392663, 27.6605647 ], [ 88.1396179, 27.6610581 ], [ 88.1407073, 27.6621455 ], [ 88.1411532, 27.6624509 ], [ 88.1414841, 27.6627731 ], [ 88.1419104, 27.6630787 ], [ 88.1423203, 27.6635739 ], [ 88.1428246, 27.6639464 ], [ 88.1439536, 27.6651193 ], [ 88.1444803, 27.6658166 ], [ 88.1447994, 27.6668945 ], [ 88.1450341, 27.6690516 ], [ 88.1452351, 27.6698576 ], [ 88.145258, 27.6702342 ], [ 88.1454169, 27.6707111 ], [ 88.1455397, 27.671432 ], [ 88.1457605, 27.6722514 ], [ 88.1459575, 27.6726784 ], [ 88.1462591, 27.6738942 ], [ 88.1463614, 27.6745272 ], [ 88.146469, 27.6774389 ], [ 88.1466414, 27.6792039 ], [ 88.147428, 27.6807563 ], [ 88.147915, 27.6812847 ], [ 88.1481496, 27.6816595 ], [ 88.1486493, 27.6834037 ], [ 88.1486905, 27.6836425 ], [ 88.1486578, 27.684209 ], [ 88.1489121, 27.6846017 ], [ 88.1493567, 27.6847695 ], [ 88.1502672, 27.6852583 ], [ 88.1504615, 27.68548 ], [ 88.1507754, 27.6859918 ], [ 88.1514667, 27.6876825 ], [ 88.1519956, 27.6885174 ], [ 88.1523071, 27.6888577 ], [ 88.1530043, 27.6892467 ], [ 88.1537442, 27.6900121 ], [ 88.1545013, 27.6906059 ], [ 88.1546389, 27.6908619 ], [ 88.1543933, 27.6913084 ], [ 88.1540694, 27.691654 ], [ 88.1538048, 27.6921029 ], [ 88.1535813, 27.6928424 ], [ 88.1531678, 27.6937708 ], [ 88.1528631, 27.6941321 ], [ 88.1520861, 27.695323 ], [ 88.1511907, 27.6962215 ], [ 88.1506937, 27.6965686 ], [ 88.1509149, 27.6974736 ], [ 88.1507851, 27.6979733 ], [ 88.1508096, 27.6984356 ], [ 88.150642, 27.6990032 ], [ 88.1505103, 27.6992615 ], [ 88.1502612, 27.6994328 ], [ 88.1499538, 27.6994872 ], [ 88.1496701, 27.6999881 ], [ 88.1494046, 27.700349 ], [ 88.1492355, 27.7007791 ], [ 88.148939, 27.7013081 ], [ 88.1485153, 27.7018469 ], [ 88.1482567, 27.7021634 ], [ 88.147849, 27.7025909 ], [ 88.1473712, 27.7029535 ], [ 88.1473138, 27.7031638 ], [ 88.147686, 27.7036029 ], [ 88.1484253, 27.7043164 ], [ 88.1489778, 27.7055797 ], [ 88.1490199, 27.7059065 ], [ 88.14897, 27.7066446 ], [ 88.1492285, 27.7074298 ], [ 88.149257, 27.7083388 ], [ 88.1495501, 27.7087289 ], [ 88.1508138, 27.7098847 ], [ 88.1511456, 27.7102768 ], [ 88.1516566, 27.7112674 ], [ 88.1522603, 27.7119121 ], [ 88.153378, 27.713755 ], [ 88.153936, 27.7155325 ], [ 88.1540016, 27.7162855 ], [ 88.1540999, 27.7164742 ], [ 88.1545687, 27.7171222 ], [ 88.1552672, 27.7176127 ], [ 88.1553292, 27.7180228 ], [ 88.1552609, 27.718813 ], [ 88.1554144, 27.7205759 ], [ 88.1552249, 27.7208707 ], [ 88.1545564, 27.7214245 ], [ 88.1544255, 27.7218182 ], [ 88.154411, 27.7222469 ], [ 88.1546539, 27.7233436 ], [ 88.1547233, 27.7244552 ], [ 88.154612, 27.7249028 ], [ 88.1542505, 27.7253006 ], [ 88.1541399, 27.725746 ], [ 88.1543501, 27.7274768 ], [ 88.1545275, 27.7296343 ], [ 88.1550727, 27.7320459 ], [ 88.1552314, 27.7324913 ], [ 88.1555063, 27.7329515 ], [ 88.1555587, 27.7342527 ], [ 88.1558387, 27.7352633 ], [ 88.1559599, 27.7358105 ], [ 88.1560036, 27.7362907 ], [ 88.1561243, 27.7367341 ], [ 88.1563396, 27.7370752 ], [ 88.1567291, 27.7374667 ], [ 88.1571952, 27.7378396 ], [ 88.1573322, 27.7380279 ], [ 88.1575849, 27.7382469 ], [ 88.1578388, 27.7385877 ], [ 88.1582512, 27.73934 ], [ 88.1582819, 27.7409844 ], [ 88.1586153, 27.7409816 ], [ 88.1588671, 27.7411171 ], [ 88.1591565, 27.7411485 ], [ 88.1597135, 27.7410062 ], [ 88.1601925, 27.740745 ], [ 88.1623869, 27.7405551 ], [ 88.1628305, 27.7406033 ], [ 88.1631394, 27.7406864 ], [ 88.1640447, 27.7406968 ], [ 88.164647, 27.7411182 ], [ 88.1649759, 27.7412868 ], [ 88.1654781, 27.7414202 ], [ 88.1659041, 27.7416061 ], [ 88.1665585, 27.7415668 ], [ 88.1670004, 27.7414593 ], [ 88.1672895, 27.7414568 ], [ 88.1676161, 27.7413503 ], [ 88.1679438, 27.7413475 ], [ 88.168639, 27.7415131 ], [ 88.1688139, 27.7416831 ], [ 88.1695859, 27.7417984 ], [ 88.170011, 27.7419482 ], [ 88.1704571, 27.7422355 ], [ 88.1712883, 27.7424856 ], [ 88.1719657, 27.7427551 ], [ 88.1725272, 27.7430414 ], [ 88.1736886, 27.7435278 ], [ 88.1742924, 27.7441408 ], [ 88.1743533, 27.7444471 ], [ 88.1746275, 27.7448915 ], [ 88.1761075, 27.7463521 ], [ 88.1775766, 27.7467862 ], [ 88.1779423, 27.7467831 ], [ 88.1784098, 27.7472236 ], [ 88.178649, 27.7480111 ], [ 88.1786951, 27.7486965 ], [ 88.1786232, 27.7491416 ], [ 88.1784547, 27.7496235 ], [ 88.1784573, 27.7498649 ], [ 88.1785896, 27.7504345 ], [ 88.177423, 27.7525515 ], [ 88.17751, 27.7530922 ], [ 88.1774855, 27.7534692 ], [ 88.1771719, 27.7549021 ], [ 88.1769661, 27.756165 ], [ 88.1768307, 27.7564233 ], [ 88.1766684, 27.7571308 ], [ 88.1766446, 27.7575709 ], [ 88.1765378, 27.7581268 ], [ 88.1766018, 27.7585414 ], [ 88.1766605, 27.758692 ], [ 88.1768325, 27.7588868 ], [ 88.1772033, 27.759116 ], [ 88.177425, 27.7593285 ], [ 88.1786778, 27.7602811 ], [ 88.1803668, 27.7616338 ], [ 88.1806677, 27.7619583 ], [ 88.1814401, 27.7629737 ], [ 88.1817235, 27.7636142 ], [ 88.1819366, 27.7643298 ], [ 88.1821555, 27.764637 ], [ 88.182291, 27.7653848 ], [ 88.1827076, 27.7659114 ], [ 88.183219, 27.7663605 ], [ 88.1832627, 27.7664729 ], [ 88.1832121, 27.7670711 ], [ 88.183109, 27.7673247 ], [ 88.1825902, 27.767839 ], [ 88.1819743, 27.7681714 ], [ 88.181743, 27.7684125 ], [ 88.1815058, 27.7687055 ], [ 88.181369, 27.769185 ], [ 88.181309, 27.7695058 ], [ 88.1812406, 27.7707472 ], [ 88.1814467, 27.7717989 ], [ 88.1814652, 27.7721688 ], [ 88.1815027, 27.7723512 ], [ 88.1817751, 27.7726827 ], [ 88.182082, 27.7732103 ], [ 88.18217, 27.773487 ], [ 88.1821878, 27.7738455 ], [ 88.1821492, 27.7742046 ], [ 88.1818986, 27.7746038 ], [ 88.1813697, 27.7751249 ], [ 88.1810876, 27.7758966 ], [ 88.1811251, 27.7760767 ], [ 88.1812395, 27.7762156 ], [ 88.1816601, 27.7764692 ], [ 88.1818397, 27.7766572 ], [ 88.1821095, 27.7767496 ], [ 88.1834178, 27.7768828 ], [ 88.1843758, 27.7771025 ], [ 88.1849805, 27.7773116 ], [ 88.1851019, 27.7773985 ], [ 88.1852587, 27.7775348 ], [ 88.1857319, 27.7783632 ], [ 88.1858745, 27.7784748 ], [ 88.1862153, 27.7785666 ], [ 88.1863015, 27.7786719 ], [ 88.1870837, 27.7799375 ], [ 88.1874993, 27.7803626 ], [ 88.1876862, 27.7806385 ], [ 88.1878098, 27.7809284 ], [ 88.1880119, 27.7816125 ], [ 88.1894266, 27.7827215 ], [ 88.1905038, 27.7838019 ], [ 88.1916688, 27.7847484 ], [ 88.192452, 27.7850958 ], [ 88.1946431, 27.7863289 ], [ 88.1952138, 27.7867278 ], [ 88.1953016, 27.786991 ], [ 88.1953357, 27.7878479 ], [ 88.1955137, 27.7885209 ], [ 88.1954942, 27.7887106 ], [ 88.1955346, 27.7888659 ], [ 88.1959893, 27.7896177 ], [ 88.1971486, 27.7910131 ], [ 88.1971214, 27.7911397 ], [ 88.1971801, 27.79134 ], [ 88.1967994, 27.7924284 ], [ 88.196653, 27.7926688 ], [ 88.1962046, 27.7931261 ], [ 88.195646, 27.7931986 ], [ 88.1954839, 27.7932767 ], [ 88.1951966, 27.793568 ], [ 88.1949796, 27.7941316 ], [ 88.1946949, 27.7946619 ], [ 88.1941592, 27.7955486 ], [ 88.1939914, 27.7957531 ], [ 88.1936407, 27.7963923 ], [ 88.1934647, 27.7964751 ], [ 88.1932517, 27.7964273 ], [ 88.1917969, 27.7968414 ], [ 88.1916365, 27.7970187 ], [ 88.1913084, 27.7978157 ], [ 88.1911405, 27.7979998 ], [ 88.190858, 27.798097 ], [ 88.1902495, 27.7981271 ], [ 88.1899951, 27.7981812 ], [ 88.1897132, 27.7983212 ], [ 88.1893562, 27.7987394 ], [ 88.1891969, 27.7990746 ], [ 88.1889489, 27.7993678 ], [ 88.1882422, 27.799525 ], [ 88.1879886, 27.7996535 ], [ 88.1877831, 27.800296 ], [ 88.1875466, 27.8007086 ], [ 88.1866888, 27.8016093 ], [ 88.1864502, 27.8024754 ], [ 88.1861627, 27.8030441 ], [ 88.1860225, 27.8032168 ], [ 88.1859413, 27.8035626 ], [ 88.1858948, 27.8038405 ], [ 88.1858966, 27.8043571 ], [ 88.1860178, 27.8050622 ], [ 88.1861101, 27.8060247 ], [ 88.1860653, 27.8065169 ], [ 88.1860931, 27.8074348 ], [ 88.1859987, 27.8078575 ], [ 88.1856562, 27.8082642 ], [ 88.1853749, 27.8084742 ], [ 88.185138, 27.8088552 ], [ 88.1851249, 27.8099246 ], [ 88.1851682, 27.810001 ], [ 88.1851726, 27.8104048 ], [ 88.1851095, 27.8107888 ], [ 88.1850116, 27.8108844 ], [ 88.1842851, 27.811211 ], [ 88.1825749, 27.8125499 ], [ 88.1820471, 27.8128928 ], [ 88.1809726, 27.8137728 ], [ 88.1808034, 27.8138419 ], [ 88.1800563, 27.8145048 ], [ 88.1794332, 27.8151891 ], [ 88.1790986, 27.8156905 ], [ 88.1787932, 27.8159571 ], [ 88.1783064, 27.8161688 ], [ 88.1775567, 27.8162903 ], [ 88.1759865, 27.8168563 ], [ 88.1754727, 27.8171517 ], [ 88.1750863, 27.817437 ], [ 88.1748111, 27.8175657 ], [ 88.174415, 27.8175939 ], [ 88.1736921, 27.8175572 ], [ 88.1734939, 27.8175904 ], [ 88.1733811, 27.8176613 ], [ 88.1732988, 27.8179124 ], [ 88.1733006, 27.8180839 ], [ 88.1735166, 27.8186979 ], [ 88.173493, 27.8191651 ], [ 88.1730418, 27.8203849 ], [ 88.1729883, 27.8206628 ], [ 88.173018, 27.8207618 ], [ 88.1730615, 27.820863 ], [ 88.174158, 27.8213635 ], [ 88.1746047, 27.8214296 ], [ 88.1751961, 27.8217449 ], [ 88.17773, 27.8224746 ], [ 88.1791287, 27.8230537 ], [ 88.1795686, 27.8231379 ], [ 88.1806577, 27.8229527 ], [ 88.1815679, 27.8229449 ], [ 88.1822934, 27.8232161 ], [ 88.1824783, 27.8232394 ], [ 88.1827353, 27.8234267 ], [ 88.1853104, 27.8247333 ], [ 88.1857662, 27.824937 ], [ 88.1867902, 27.8252936 ], [ 88.1874207, 27.8255837 ], [ 88.1885369, 27.8266006 ], [ 88.1891641, 27.8279194 ], [ 88.1893363, 27.8281187 ], [ 88.1896077, 27.8282856 ], [ 88.1897654, 27.828494 ], [ 88.1899508, 27.8289143 ], [ 88.1905242, 27.8294823 ], [ 88.1907695, 27.8299337 ], [ 88.1911705, 27.8312702 ], [ 88.1912385, 27.8316306 ], [ 88.1912778, 27.8323228 ], [ 88.1914449, 27.8326981 ], [ 88.1929866, 27.8337496 ], [ 88.1934231, 27.8341564 ], [ 88.1938587, 27.8347685 ], [ 88.1942413, 27.8357556 ], [ 88.1946918, 27.8361104 ], [ 88.1950766, 27.8363078 ], [ 88.1956805, 27.8364154 ], [ 88.1961644, 27.836639 ], [ 88.1964271, 27.8366932 ], [ 88.1970477, 27.8367645 ], [ 88.1992654, 27.8367317 ], [ 88.1996742, 27.8365274 ], [ 88.1997911, 27.8365376 ], [ 88.1998918, 27.8366383 ], [ 88.2001087, 27.8370334 ], [ 88.2005, 27.8371924 ], [ 88.2011179, 27.8376473 ], [ 88.2012702, 27.8379415 ], [ 88.2013878, 27.8383691 ], [ 88.2015257, 27.8395974 ], [ 88.2014248, 27.8401081 ], [ 88.2014898, 27.8415175 ], [ 88.2014136, 27.842319 ], [ 88.2012919, 27.8428502 ], [ 88.2010844, 27.84331 ], [ 88.2008482, 27.843691 ], [ 88.2002028, 27.8443193 ], [ 88.1996358, 27.844622 ], [ 88.1991476, 27.8447187 ], [ 88.1989857, 27.8448216 ], [ 88.1986485, 27.845084 ], [ 88.1978635, 27.8458781 ], [ 88.1978367, 27.8463318 ], [ 88.1975405, 27.8470946 ], [ 88.1974526, 27.8474608 ], [ 88.1969705, 27.848399 ], [ 88.1968748, 27.8487585 ], [ 88.1968626, 27.8489165 ], [ 88.1970144, 27.849222 ], [ 88.1971254, 27.8496249 ], [ 88.197234, 27.8501473 ], [ 88.1972222, 27.8503482 ], [ 88.1970604, 27.851094 ], [ 88.1967341, 27.8520669 ], [ 88.196595, 27.8532705 ], [ 88.1962277, 27.8540227 ], [ 88.1958857, 27.8544926 ], [ 88.1955831, 27.8547276 ], [ 88.1947948, 27.8548856 ], [ 88.1926549, 27.8549289 ], [ 88.1919134, 27.8548406 ], [ 88.1910272, 27.8547986 ], [ 88.1897396, 27.8543879 ], [ 88.1888636, 27.8543007 ], [ 88.1884859, 27.8541144 ], [ 88.1882442, 27.8540556 ], [ 88.1875254, 27.854425 ], [ 88.1871809, 27.8546558 ], [ 88.1861263, 27.855768 ], [ 88.1854285, 27.8567756 ], [ 88.185239, 27.8569217 ], [ 88.185105, 27.8569657 ], [ 88.1843535, 27.8569473 ], [ 88.183741, 27.8569909 ], [ 88.1831203, 27.8572737 ], [ 88.182511, 27.8573286 ], [ 88.1820784, 27.8572827 ], [ 88.1814814, 27.8571231 ], [ 88.1799524, 27.8569737 ], [ 88.1791008, 27.8568479 ], [ 88.1784412, 27.8568287 ], [ 88.1782008, 27.856894 ], [ 88.1779449, 27.8571105 ], [ 88.1776451, 27.8576161 ], [ 88.1774759, 27.857692 ], [ 88.1770868, 27.8577472 ], [ 88.1768266, 27.8579186 ], [ 88.1765107, 27.8582236 ], [ 88.1761804, 27.8587814 ], [ 88.1760906, 27.8589829 ], [ 88.1760102, 27.8594122 ], [ 88.1757941, 27.8597976 ], [ 88.1754857, 27.8600912 ], [ 88.1742565, 27.8607943 ], [ 88.1741661, 27.8609462 ], [ 88.1739185, 27.8619951 ], [ 88.1738001, 27.8621968 ], [ 88.1736739, 27.8623175 ], [ 88.1732798, 27.8625532 ], [ 88.1723963, 27.8634879 ], [ 88.1721003, 27.8636348 ], [ 88.171276, 27.8637614 ], [ 88.1709654, 27.863852 ], [ 88.170817, 27.8639164 ], [ 88.1706284, 27.8641459 ], [ 88.1702555, 27.8643994 ], [ 88.1698884, 27.8645537 ], [ 88.169344, 27.8646779 ], [ 88.1690407, 27.8648 ], [ 88.167725, 27.8653842 ], [ 88.1669711, 27.8657944 ], [ 88.166654, 27.8659933 ], [ 88.1662554, 27.8664614 ], [ 88.1661377, 27.8667286 ], [ 88.1659942, 27.8669058 ], [ 88.165405, 27.8674702 ], [ 88.1650272, 27.8679269 ], [ 88.1646333, 27.8682392 ], [ 88.1640627, 27.8685915 ], [ 88.1630782, 27.8689901 ], [ 88.1627199, 27.8692503 ], [ 88.1624234, 27.869361 ], [ 88.1612744, 27.8696279 ], [ 88.159897, 27.8700817 ], [ 88.1589567, 27.8702903 ], [ 88.1581843, 27.8706442 ], [ 88.1570248, 27.870936 ], [ 88.1558925, 27.8711102 ], [ 88.1553004, 27.8711151 ], [ 88.1541357, 27.8708609 ], [ 88.1537676, 27.8709249 ], [ 88.1535993, 27.871091 ], [ 88.1533724, 27.8717742 ], [ 88.1529805, 27.8722309 ], [ 88.1526038, 27.8731522 ], [ 88.1523801, 27.8734248 ], [ 88.1517265, 27.8739785 ], [ 88.1509375, 27.8747476 ], [ 88.15056, 27.8752357 ], [ 88.1503163, 27.8756596 ], [ 88.1499997, 27.8759149 ], [ 88.149637, 27.8761255 ], [ 88.1486251, 27.8769461 ], [ 88.1481227, 27.877027 ], [ 88.1474759, 27.8768993 ], [ 88.1473346, 27.8769253 ], [ 88.1469573, 27.8771427 ], [ 88.1463919, 27.877267 ], [ 88.1461737, 27.8774019 ], [ 88.1456433, 27.8775394 ], [ 88.1439896, 27.8783517 ], [ 88.1428149, 27.878551 ], [ 88.1418865, 27.8785587 ], [ 88.1411167, 27.8785086 ], [ 88.140059, 27.8783595 ], [ 88.1398459, 27.8783116 ], [ 88.1396319, 27.878187 ], [ 88.1392738, 27.8778629 ], [ 88.1391965, 27.8778748 ], [ 88.1389987, 27.8779644 ], [ 88.1388726, 27.8781053 ], [ 88.1387959, 27.8782368 ], [ 88.1385911, 27.878983 ], [ 88.1376616, 27.8795661 ], [ 88.1361985, 27.8808264 ], [ 88.1355421, 27.881395 ], [ 88.1353629, 27.881452 ], [ 88.1351808, 27.8815306 ], [ 88.1349848, 27.8815995 ], [ 88.1353595, 27.8831129 ], [ 88.1361863, 27.8851762 ], [ 88.1368369, 27.8863831 ], [ 88.1378514, 27.8886887 ], [ 88.137892, 27.8899691 ], [ 88.1372547, 27.8910162 ], [ 88.1356414, 27.8926305 ], [ 88.1345408, 27.893699 ], [ 88.1334484, 27.8952939 ], [ 88.1326126, 27.896266 ], [ 88.132223, 27.8967649 ], [ 88.1318861, 27.8971811 ], [ 88.1315569, 27.8975809 ], [ 88.1312713, 27.8982091 ], [ 88.1306431, 27.898723 ], [ 88.1297865, 27.899237 ], [ 88.1291013, 27.899751 ], [ 88.1280733, 27.9017497 ], [ 88.1275594, 27.9026634 ], [ 88.126817, 27.9031203 ], [ 88.125789, 27.9034058 ], [ 88.1247611, 27.9036913 ], [ 88.1239045, 27.9057472 ], [ 88.1228766, 27.907232 ], [ 88.12202, 27.9080886 ], [ 88.1215679, 27.9084074 ], [ 88.1213775, 27.9088357 ], [ 88.1214251, 27.9096923 ], [ 88.1213299, 27.9109773 ], [ 88.1210444, 27.9118339 ], [ 88.1201402, 27.9136422 ], [ 88.1187601, 27.9160217 ], [ 88.1181415, 27.9169259 ], [ 88.1179987, 27.918068 ], [ 88.118427, 27.9189722 ], [ 88.1195215, 27.9203047 ], [ 88.120283, 27.9218276 ], [ 88.1207113, 27.9226842 ], [ 88.1217582, 27.9237312 ], [ 88.1230907, 27.9245878 ], [ 88.1243756, 27.9251113 ], [ 88.1259461, 27.9256823 ], [ 88.1268979, 27.9258727 ], [ 88.1277545, 27.9255871 ], [ 88.1285635, 27.9256823 ], [ 88.1297532, 27.9262058 ], [ 88.1303243, 27.9269672 ], [ 88.1300864, 27.9283473 ], [ 88.1299912, 27.9297274 ], [ 88.1301815, 27.9308695 ], [ 88.1312761, 27.9328207 ], [ 88.132561, 27.9352002 ], [ 88.1339887, 27.9360092 ], [ 88.1350832, 27.9365803 ], [ 88.1357019, 27.9367706 ], [ 88.1361778, 27.9371037 ], [ 88.1367488, 27.9373417 ], [ 88.1365585, 27.9393404 ], [ 88.1361778, 27.9416247 ], [ 88.1354639, 27.9434331 ], [ 88.1347977, 27.9453843 ], [ 88.1340838, 27.946574 ], [ 88.1330845, 27.9475258 ], [ 88.1317044, 27.9486679 ], [ 88.1308478, 27.9495721 ], [ 88.1300864, 27.9501908 ], [ 88.1308002, 27.9506191 ], [ 88.1319899, 27.950857 ], [ 88.1332272, 27.9514757 ], [ 88.1342742, 27.951904 ], [ 88.1350832, 27.9532365 ], [ 88.1353212, 27.9541883 ], [ 88.1359874, 27.9549497 ], [ 88.136844, 27.9557111 ], [ 88.1373675, 27.9569008 ], [ 88.1382241, 27.9582809 ], [ 88.1389855, 27.9596134 ], [ 88.1401753, 27.9617549 ], [ 88.141365, 27.9636109 ], [ 88.1424595, 27.9652766 ], [ 88.1441252, 27.9648482 ], [ 88.1453149, 27.9645151 ], [ 88.1465046, 27.9639441 ], [ 88.1483606, 27.9630399 ], [ 88.1504545, 27.9616122 ], [ 88.1518346, 27.9601369 ], [ 88.1527388, 27.95909 ], [ 88.1535478, 27.9586141 ], [ 88.155261, 27.9583285 ], [ 88.156546, 27.9583285 ], [ 88.1583068, 27.9586141 ], [ 88.1594965, 27.9585189 ], [ 88.1612573, 27.9587568 ], [ 88.1625898, 27.9587092 ], [ 88.1631133, 27.9586141 ], [ 88.163494, 27.9575671 ], [ 88.1643506, 27.9566629 ], [ 88.1649692, 27.9559015 ], [ 88.1661114, 27.9552352 ], [ 88.1673011, 27.954569 ], [ 88.1683005, 27.9544262 ], [ 88.1692523, 27.95376 ], [ 88.1699185, 27.9532841 ], [ 88.171251, 27.9521895 ], [ 88.1718221, 27.9514757 ], [ 88.1723932, 27.9505239 ], [ 88.1727739, 27.9490486 ], [ 88.1750582, 27.9493818 ], [ 88.1767714, 27.9495245 ], [ 88.177628, 27.9495721 ], [ 88.178437, 27.9493818 ], [ 88.1789605, 27.949239 ], [ 88.1796267, 27.949001 ], [ 88.1801026, 27.9486679 ], [ 88.1805309, 27.9482396 ], [ 88.180864, 27.9476685 ], [ 88.181102, 27.9470499 ], [ 88.1813875, 27.946574 ], [ 88.1817207, 27.9462409 ], [ 88.1821014, 27.945765 ], [ 88.1824821, 27.9452415 ], [ 88.1828152, 27.9449084 ], [ 88.1833387, 27.944718 ], [ 88.1841001, 27.9442897 ], [ 88.1848615, 27.9439566 ], [ 88.185385, 27.9438138 ], [ 88.1858609, 27.9433855 ], [ 88.1874314, 27.9426717 ], [ 88.1898584, 27.942862 ], [ 88.191762, 27.9431952 ], [ 88.1931421, 27.9433379 ], [ 88.1936655, 27.9433379 ], [ 88.1941414, 27.9431952 ], [ 88.1946173, 27.9434807 ], [ 88.1954263, 27.9435759 ], [ 88.196045, 27.9435283 ], [ 88.1973775, 27.9436235 ], [ 88.1981865, 27.9427669 ], [ 88.1985196, 27.9426241 ], [ 88.1989004, 27.9423861 ], [ 88.1992811, 27.9420054 ], [ 88.1996142, 27.9416723 ], [ 88.2009467, 27.9414819 ], [ 88.2023268, 27.9411488 ], [ 88.2037545, 27.9408633 ], [ 88.2069905, 27.9406729 ], [ 88.2070857, 27.9422434 ], [ 88.2059912, 27.9459553 ], [ 88.2057056, 27.9462885 ], [ 88.2059436, 27.9517136 ], [ 88.2055153, 27.9529985 ], [ 88.2054201, 27.9545214 ], [ 88.2053725, 27.9559491 ], [ 88.2053249, 27.9567581 ], [ 88.2060387, 27.9585189 ], [ 88.2066098, 27.9600417 ], [ 88.2070381, 27.9606604 ], [ 88.2073712, 27.9608983 ], [ 88.2078947, 27.9609459 ], [ 88.2082278, 27.9609459 ], [ 88.2084182, 27.9613266 ], [ 88.208561, 27.9619453 ], [ 88.2088465, 27.9623736 ], [ 88.2096555, 27.9629447 ], [ 88.2107977, 27.9634682 ], [ 88.2116543, 27.9636109 ], [ 88.2125585, 27.9635158 ], [ 88.212844, 27.9638013 ], [ 88.2129868, 27.9640392 ], [ 88.2135578, 27.9638489 ], [ 88.2148903, 27.9635633 ], [ 88.2156518, 27.9632778 ], [ 88.2161277, 27.9630874 ], [ 88.2170794, 27.9629923 ], [ 88.2176981, 27.9629923 ], [ 88.2183168, 27.9628495 ], [ 88.2189354, 27.9623736 ], [ 88.22003, 27.9621833 ], [ 88.2204583, 27.9621833 ], [ 88.2210769, 27.9619929 ], [ 88.2218384, 27.9619453 ], [ 88.2224094, 27.9618025 ], [ 88.2229805, 27.9612315 ], [ 88.223504, 27.9609459 ], [ 88.2239323, 27.9612791 ], [ 88.2244082, 27.9621833 ], [ 88.2250268, 27.9630399 ], [ 88.2260738, 27.964182 ], [ 88.2272159, 27.9650862 ], [ 88.2284057, 27.966038 ], [ 88.2306424, 27.9672753 ], [ 88.2320225, 27.9680367 ], [ 88.2335453, 27.9684174 ], [ 88.234973, 27.9687506 ], [ 88.2356392, 27.9690837 ], [ 88.2369717, 27.9694644 ], [ 88.237638, 27.969512 ], [ 88.2382566, 27.9680843 ], [ 88.2386374, 27.967656 ], [ 88.2390181, 27.9661332 ], [ 88.2393036, 27.9643724 ], [ 88.2398747, 27.9632302 ], [ 88.2413499, 27.9609459 ], [ 88.2423493, 27.9579002 ], [ 88.2427776, 27.9573292 ], [ 88.2428728, 27.9568533 ], [ 88.2429204, 27.9563298 ], [ 88.2431583, 27.9561394 ], [ 88.243539, 27.9552828 ], [ 88.2439674, 27.9542359 ], [ 88.2444432, 27.9535696 ], [ 88.2450143, 27.9529034 ], [ 88.2455378, 27.9525702 ], [ 88.2458233, 27.951904 ], [ 88.2463944, 27.9503811 ], [ 88.2467751, 27.9495721 ], [ 88.2474746, 27.9485774 ], [ 88.2481304, 27.9475117 ], [ 88.248349, 27.9463093 ], [ 88.2483763, 27.9449704 ], [ 88.2485949, 27.9445878 ], [ 88.249524, 27.943932 ], [ 88.2499339, 27.9436041 ], [ 88.2504257, 27.9433855 ], [ 88.2509722, 27.9431122 ], [ 88.2511635, 27.9428936 ], [ 88.2512728, 27.9425384 ], [ 88.2513275, 27.941664 ], [ 88.2515461, 27.9417459 ], [ 88.2517647, 27.9418826 ], [ 88.2520653, 27.9418826 ], [ 88.2522839, 27.9419099 ], [ 88.2536228, 27.9437954 ], [ 88.254224, 27.9445878 ], [ 88.2547978, 27.9449431 ], [ 88.255481, 27.9452163 ], [ 88.2566013, 27.9454622 ], [ 88.2573665, 27.9456535 ], [ 88.2582955, 27.9457082 ], [ 88.2592519, 27.9457628 ], [ 88.2602903, 27.9458448 ], [ 88.2629136, 27.9508181 ], [ 88.2632688, 27.9540152 ], [ 88.2632961, 27.9551082 ], [ 88.2634874, 27.9557367 ], [ 88.2638973, 27.9561193 ], [ 88.2647171, 27.9565292 ], [ 88.2680781, 27.9570483 ], [ 88.2695264, 27.9558733 ], [ 88.2706468, 27.9548623 ], [ 88.2714392, 27.9544251 ], [ 88.2721224, 27.9543704 ], [ 88.2735979, 27.9545617 ], [ 88.276877, 27.9548623 ], [ 88.2778061, 27.9548076 ], [ 88.2786805, 27.954753 ], [ 88.2792544, 27.9547803 ], [ 88.2795276, 27.9550262 ], [ 88.2809212, 27.9566385 ], [ 88.2811945, 27.9567751 ], [ 88.2815224, 27.9572123 ], [ 88.2819323, 27.9580047 ], [ 88.2820962, 27.9584693 ], [ 88.2820962, 27.9602181 ], [ 88.2822329, 27.96071 ], [ 88.2826974, 27.9620216 ], [ 88.282998, 27.9627048 ], [ 88.2831619, 27.9633606 ], [ 88.2835445, 27.9644809 ], [ 88.284173, 27.9651641 ], [ 88.2852934, 27.9655466 ], [ 88.2864137, 27.9657926 ], [ 88.2875067, 27.9657926 ], [ 88.2880532, 27.9657106 ], [ 88.2881626, 27.965492 ], [ 88.2884358, 27.9648089 ], [ 88.2886271, 27.9647542 ], [ 88.2905126, 27.9647815 ], [ 88.2908131, 27.9657379 ], [ 88.291105, 27.9660804 ], [ 88.2929167, 27.9671403 ], [ 88.2940875, 27.9677072 ], [ 88.2943464, 27.9677196 ], [ 88.2945435, 27.9674115 ], [ 88.2949133, 27.9670417 ], [ 88.2952707, 27.9668322 ], [ 88.2957267, 27.966709 ], [ 88.2964045, 27.9666966 ], [ 88.2972303, 27.9667213 ], [ 88.2974644, 27.9667213 ], [ 88.2979081, 27.966635 ], [ 88.2986845, 27.9664009 ], [ 88.299424, 27.9661174 ], [ 88.2999786, 27.9659695 ], [ 88.3007427, 27.9658093 ], [ 88.3010385, 27.9657723 ], [ 88.3016054, 27.9656984 ], [ 88.3028748, 27.9651807 ], [ 88.3035034, 27.9652177 ], [ 88.3041689, 27.9654519 ], [ 88.3044647, 27.9657107 ], [ 88.3045633, 27.9660804 ], [ 88.3046619, 27.967091 ], [ 88.3047482, 27.9672266 ], [ 88.3048467, 27.9672636 ], [ 88.3050439, 27.9672882 ], [ 88.3052288, 27.9673622 ], [ 88.3055492, 27.9673252 ], [ 88.3059066, 27.9672759 ], [ 88.3059929, 27.9675347 ], [ 88.3060792, 27.9676703 ], [ 88.3062394, 27.9677812 ], [ 88.3065475, 27.9679414 ], [ 88.3066954, 27.9679537 ], [ 88.3070651, 27.9676826 ], [ 88.307669, 27.9678428 ], [ 88.3079895, 27.968114 ], [ 88.3084208, 27.9682988 ], [ 88.3088892, 27.9684097 ], [ 88.3094068, 27.9686562 ], [ 88.3099737, 27.968952 ], [ 88.3104913, 27.969371 ], [ 88.3107132, 27.9696422 ], [ 88.3109227, 27.9699873 ], [ 88.3115178, 27.970554 ], [ 88.3123934, 27.9713946 ], [ 88.313339, 27.972025 ], [ 88.3142496, 27.9726554 ], [ 88.31481, 27.9729356 ], [ 88.3147543, 27.9738259 ], [ 88.3148089, 27.974701 ], [ 88.3151809, 27.9754885 ], [ 88.3151371, 27.9769214 ], [ 88.3154215, 27.9775121 ], [ 88.3159575, 27.9778293 ], [ 88.3172591, 27.9781903 ], [ 88.3178498, 27.9784966 ], [ 88.3184952, 27.9789669 ], [ 88.3191843, 27.979306 ], [ 88.3199062, 27.9796451 ], [ 88.3205079, 27.9797436 ], [ 88.3211642, 27.9798092 ], [ 88.3218642, 27.9799951 ], [ 88.3225424, 27.9798201 ], [ 88.3234359, 27.9792118 ], [ 88.3242064, 27.9786865 ], [ 88.3252221, 27.9781961 ], [ 88.3263078, 27.9780911 ], [ 88.3271665, 27.9779869 ], [ 88.3281272, 27.977583 ], [ 88.3290441, 27.9770044 ], [ 88.3297428, 27.9764477 ], [ 88.3304523, 27.9760984 ], [ 88.3314457, 27.9759455 ], [ 88.3318612, 27.975937 ], [ 88.3323577, 27.9779754 ], [ 88.3330633, 27.9803535 ], [ 88.3336382, 27.9819476 ], [ 88.3348665, 27.9842081 ], [ 88.3358253, 27.9843117 ], [ 88.3369017, 27.9845509 ], [ 88.3385164, 27.9848799 ], [ 88.339563, 27.9851041 ], [ 88.3398321, 27.9852536 ], [ 88.3402059, 27.9856125 ], [ 88.3404003, 27.9858068 ], [ 88.3412375, 27.9856723 ], [ 88.342329, 27.9855826 ], [ 88.3456331, 27.9855676 ], [ 88.3480104, 27.985747 ], [ 88.3489373, 27.9862255 ], [ 88.3498643, 27.9870029 ], [ 88.3506118, 27.9877056 ], [ 88.3516136, 27.9882289 ], [ 88.3527199, 27.9885578 ], [ 88.3546636, 27.9890064 ], [ 88.3559045, 27.9893652 ], [ 88.3570408, 27.9894399 ], [ 88.3583266, 27.9892755 ], [ 88.3591937, 27.9891409 ], [ 88.3598366, 27.9888718 ], [ 88.3607337, 27.9888269 ], [ 88.3615411, 27.9888718 ], [ 88.3624531, 27.9890363 ], [ 88.3632006, 27.9891559 ], [ 88.3637389, 27.9891858 ], [ 88.3642621, 27.9891409 ], [ 88.3649947, 27.9890512 ], [ 88.3662697, 27.9895075 ], [ 88.3667222, 27.9893975 ], [ 88.3670402, 27.9893608 ], [ 88.367615, 27.9888716 ], [ 88.3679085, 27.9886148 ], [ 88.3684034, 27.988559 ], [ 88.3689443, 27.9885847 ], [ 88.3694852, 27.9886233 ], [ 88.3700776, 27.988559 ], [ 88.3706699, 27.9885976 ], [ 88.3713138, 27.9888294 ], [ 88.3716486, 27.9889582 ], [ 88.372138, 27.9890612 ], [ 88.3722925, 27.9893574 ], [ 88.3725887, 27.9896664 ], [ 88.373057, 27.9897521 ], [ 88.3740954, 27.9896536 ], [ 88.3752029, 27.9894218 ], [ 88.3759884, 27.9893187 ], [ 88.376877, 27.9893187 ], [ 88.3773277, 27.9892672 ], [ 88.3776883, 27.9889968 ], [ 88.378139, 27.9880181 ], [ 88.3786026, 27.9869621 ], [ 88.3789632, 27.9862667 ], [ 88.3794268, 27.9852751 ], [ 88.3798002, 27.9845926 ], [ 88.3803025, 27.9836397 ], [ 88.3806373, 27.9831761 ], [ 88.3810236, 27.9829314 ], [ 88.3817705, 27.9827382 ], [ 88.3827235, 27.9825579 ], [ 88.3834575, 27.9824935 ], [ 88.3840628, 27.9824678 ], [ 88.3845393, 27.9824034 ], [ 88.3850801, 27.9820686 ], [ 88.385724, 27.9814762 ], [ 88.3862262, 27.9810255 ], [ 88.3869474, 27.9807164 ], [ 88.3873724, 27.9804073 ], [ 88.3877458, 27.9798665 ], [ 88.3880162, 27.9792226 ], [ 88.3881837, 27.9783083 ], [ 88.3883253, 27.9777932 ], [ 88.3887889, 27.977175 ], [ 88.3892911, 27.976647 ], [ 88.3898449, 27.9765054 ], [ 88.3910039, 27.9765054 ], [ 88.3919826, 27.9766599 ], [ 88.392884, 27.9770462 ], [ 88.3934378, 27.9774197 ], [ 88.3941976, 27.9777803 ], [ 88.3953823, 27.9781409 ], [ 88.3963353, 27.9784757 ], [ 88.3968633, 27.978656 ], [ 88.3973269, 27.9786173 ], [ 88.3981639, 27.9783211 ], [ 88.3987305, 27.9779477 ], [ 88.3994259, 27.9776 ], [ 88.4001342, 27.9773038 ], [ 88.4004561, 27.9772394 ], [ 88.4009584, 27.9782439 ], [ 88.401422, 27.9792355 ], [ 88.4018212, 27.9799309 ], [ 88.402259, 27.9803687 ], [ 88.4025552, 27.9806005 ], [ 88.4027613, 27.9807164 ], [ 88.4044483, 27.9808194 ], [ 88.4046157, 27.9808581 ], [ 88.4047573, 27.9809611 ], [ 88.4051436, 27.9807937 ], [ 88.4055686, 27.9805619 ], [ 88.4062898, 27.9804331 ], [ 88.406895, 27.9803945 ], [ 88.4079639, 27.9804331 ], [ 88.4093804, 27.9802399 ], [ 88.4094706, 27.9806263 ], [ 88.4097281, 27.9811156 ], [ 88.4107712, 27.9813989 ], [ 88.4118787, 27.9812701 ], [ 88.4135914, 27.981077 ], [ 88.413643, 27.9814633 ], [ 88.4137331, 27.9817981 ], [ 88.4129282, 27.9849663 ], [ 88.4128525, 27.9861389 ], [ 88.4130416, 27.9875763 ], [ 88.4135712, 27.9901863 ], [ 88.4138738, 27.9913589 ], [ 88.4141764, 27.9927585 ], [ 88.4141386, 27.9937041 ], [ 88.4142142, 27.9945741 ], [ 88.414706, 27.9957089 ], [ 88.4149708, 27.9966167 ], [ 88.4152734, 27.9974489 ], [ 88.4159164, 27.9981298 ], [ 88.4162947, 27.9985837 ], [ 88.4167486, 27.999378 ], [ 88.4173538, 27.9999832 ], [ 88.4181482, 28.0003993 ], [ 88.4195477, 28.0006263 ], [ 88.4209473, 28.0008154 ], [ 88.4217795, 28.0010046 ], [ 88.4230656, 28.0011937 ], [ 88.423633, 28.0013828 ], [ 88.4241625, 28.0018367 ], [ 88.4248434, 28.0025933 ], [ 88.4254108, 28.003085 ], [ 88.4265077, 28.0039172 ], [ 88.4273399, 28.0046737 ], [ 88.4280964, 28.005468 ], [ 88.4289286, 28.0067163 ], [ 88.4313117, 28.0075107 ], [ 88.4326356, 28.0076998 ], [ 88.4334299, 28.0073215 ], [ 88.434073, 28.0071324 ], [ 88.4353969, 28.0069811 ], [ 88.4366452, 28.0078133 ], [ 88.4372882, 28.0081915 ], [ 88.4383095, 28.0083807 ], [ 88.4391417, 28.008532 ], [ 88.4403521, 28.0088724 ], [ 88.4412599, 28.0091372 ], [ 88.4422813, 28.009175 ], [ 88.4433404, 28.0090615 ], [ 88.4439078, 28.0090237 ], [ 88.4457991, 28.0110663 ], [ 88.4465934, 28.0114824 ], [ 88.4480687, 28.0120498 ], [ 88.4496952, 28.0125794 ], [ 88.4509434, 28.0131468 ], [ 88.4522295, 28.0136385 ], [ 88.45344, 28.0141302 ], [ 88.4543478, 28.0143194 ], [ 88.4546504, 28.0145085 ], [ 88.4550665, 28.0150381 ], [ 88.4558987, 28.0157189 ], [ 88.4566174, 28.0158702 ], [ 88.4576387, 28.0158324 ], [ 88.4590382, 28.0157189 ], [ 88.4598704, 28.0155676 ], [ 88.4603622, 28.0153407 ], [ 88.4610052, 28.0149246 ], [ 88.4617239, 28.0157189 ], [ 88.4625183, 28.0163241 ], [ 88.4632369, 28.0167402 ], [ 88.4642583, 28.0169294 ], [ 88.4655443, 28.0169672 ], [ 88.4669061, 28.0169672 ], [ 88.4681543, 28.0168915 ], [ 88.4685326, 28.0181398 ], [ 88.468873, 28.018745 ], [ 88.4695539, 28.0197285 ], [ 88.4700457, 28.0205229 ], [ 88.4703483, 28.0210902 ], [ 88.47084, 28.0216955 ], [ 88.4709913, 28.0218089 ], [ 88.4711426, 28.0220359 ], [ 88.4713317, 28.0228302 ], [ 88.4715965, 28.0233598 ], [ 88.4720883, 28.0241542 ], [ 88.4724665, 28.0246081 ], [ 88.4727313, 28.0249107 ], [ 88.4728826, 28.0260455 ], [ 88.4732231, 28.0269533 ], [ 88.4737526, 28.0279746 ], [ 88.4739796, 28.0289203 ], [ 88.4743578, 28.0297903 ], [ 88.4745091, 28.030509 ], [ 88.474547, 28.0313033 ], [ 88.4744713, 28.0319464 ], [ 88.4743957, 28.0330055 ], [ 88.4748508, 28.0347617 ], [ 88.4754597, 28.0362638 ], [ 88.4774084, 28.0384155 ], [ 88.4798443, 28.040486 ], [ 88.4813059, 28.041298 ], [ 88.4820532, 28.042053 ], [ 88.4839753, 28.0442609 ], [ 88.485326, 28.0450921 ], [ 88.487378, 28.0456895 ], [ 88.489482, 28.046157 ], [ 88.4901314, 28.0463648 ], [ 88.4911964, 28.0470662 ], [ 88.4922354, 28.048261 ], [ 88.4933263, 28.0505208 ], [ 88.4949108, 28.0551184 ], [ 88.4967031, 28.0546768 ], [ 88.4973005, 28.0543651 ], [ 88.4984954, 28.0538197 ], [ 88.4994305, 28.0531963 ], [ 88.5004695, 28.0523391 ], [ 88.5013266, 28.0518975 ], [ 88.5022098, 28.0511183 ], [ 88.503067, 28.0505208 ], [ 88.5037683, 28.0498195 ], [ 88.5045995, 28.0487286 ], [ 88.5049891, 28.0480013 ], [ 88.5057164, 28.047248 ], [ 88.5066775, 28.0463648 ], [ 88.5072489, 28.0453258 ], [ 88.5077425, 28.0443128 ], [ 88.5083399, 28.0439751 ], [ 88.5091451, 28.0434816 ], [ 88.5100542, 28.0429621 ], [ 88.5110153, 28.0421829 ], [ 88.5121582, 28.0423647 ], [ 88.5135868, 28.0425465 ], [ 88.5151973, 28.0428582 ], [ 88.5164441, 28.0429361 ], [ 88.5176649, 28.0429881 ], [ 88.5185221, 28.043092 ], [ 88.519613, 28.043118 ], [ 88.5207559, 28.0417153 ], [ 88.521717, 28.0408062 ], [ 88.5227041, 28.0397932 ], [ 88.5229898, 28.0389879 ], [ 88.5231976, 28.0377671 ], [ 88.5231716, 28.0363904 ], [ 88.5246262, 28.0353255 ], [ 88.5251977, 28.0355592 ], [ 88.5257431, 28.0360787 ], [ 88.5267042, 28.036884 ], [ 88.5273796, 28.0373255 ], [ 88.5280549, 28.0376892 ], [ 88.5288861, 28.0378191 ], [ 88.5296654, 28.0377152 ], [ 88.5304966, 28.0372476 ], [ 88.5313278, 28.0363645 ], [ 88.5320031, 28.0355852 ], [ 88.5327304, 28.0349099 ], [ 88.5343928, 28.0340007 ], [ 88.5362371, 28.0341566 ], [ 88.5387047, 28.0335592 ], [ 88.5447828, 28.0341046 ], [ 88.5459517, 28.0340007 ], [ 88.5468868, 28.0350397 ], [ 88.5480297, 28.035767 ], [ 88.5484973, 28.0361826 ], [ 88.5489648, 28.0367801 ], [ 88.5495882, 28.0372736 ], [ 88.5505493, 28.037923 ], [ 88.5517182, 28.0386503 ], [ 88.5520299, 28.038884 ], [ 88.5531208, 28.0392217 ], [ 88.5533286, 28.0394035 ], [ 88.5535624, 28.0394295 ], [ 88.5535104, 28.0397932 ], [ 88.5533546, 28.0401308 ], [ 88.5528091, 28.0405724 ], [ 88.5526533, 28.0414036 ], [ 88.5517441, 28.0422348 ], [ 88.5513285, 28.0429621 ], [ 88.5509909, 28.0438193 ], [ 88.5506532, 28.0448063 ], [ 88.5503415, 28.0458713 ], [ 88.5502636, 28.0468064 ], [ 88.5502376, 28.0476116 ], [ 88.5502895, 28.0485727 ], [ 88.5504714, 28.0495078 ], [ 88.550887, 28.0505208 ], [ 88.5514584, 28.0517936 ], [ 88.5526792, 28.0540534 ], [ 88.5534325, 28.0549885 ], [ 88.5541338, 28.055508 ], [ 88.553978, 28.0567808 ], [ 88.5538221, 28.0575601 ], [ 88.5537962, 28.0585211 ], [ 88.5538741, 28.0596121 ], [ 88.5542118, 28.0614823 ], [ 88.5547832, 28.063872 ], [ 88.5549131, 28.0652227 ], [ 88.554991, 28.0669371 ], [ 88.5550949, 28.06808 ], [ 88.5553547, 28.069093 ], [ 88.5556923, 28.0702619 ], [ 88.5562118, 28.0716905 ], [ 88.5564716, 28.0726516 ], [ 88.5569391, 28.0739503 ], [ 88.5573028, 28.075301 ], [ 88.5573028, 28.0755088 ], [ 88.5564196, 28.0766777 ], [ 88.5559001, 28.0777167 ], [ 88.5553806, 28.0791453 ], [ 88.554965, 28.0804441 ], [ 88.5546274, 28.0814051 ], [ 88.5544196, 28.0820285 ], [ 88.5544455, 28.0822883 ], [ 88.5555625, 28.0828597 ], [ 88.5567313, 28.0834052 ], [ 88.5579522, 28.0837948 ], [ 88.5590951, 28.0841325 ], [ 88.5600302, 28.0844962 ], [ 88.5607315, 28.0850936 ], [ 88.5621082, 28.0862625 ], [ 88.5626796, 28.0868599 ], [ 88.5635108, 28.0882366 ], [ 88.5644719, 28.0900288 ], [ 88.565381, 28.0901327 ], [ 88.5662901, 28.0903146 ], [ 88.567459, 28.0906782 ], [ 88.5681863, 28.090912 ], [ 88.5691474, 28.0909639 ], [ 88.5701345, 28.0907561 ], [ 88.5711215, 28.0904185 ], [ 88.5717449, 28.089899 ], [ 88.5739287, 28.0879215 ], [ 88.5754122, 28.0859434 ], [ 88.576834, 28.0851398 ], [ 88.579096, 28.0849126 ], [ 88.5806168, 28.0846844 ], [ 88.5820616, 28.0842662 ], [ 88.5832783, 28.0841521 ], [ 88.5856357, 28.0847605 ], [ 88.5866242, 28.0847985 ], [ 88.5872326, 28.0858631 ], [ 88.5890196, 28.0884486 ], [ 88.5913008, 28.0889048 ], [ 88.5924795, 28.0890569 ], [ 88.5943426, 28.0896653 ], [ 88.5957113, 28.0896653 ], [ 88.5973082, 28.089209 ], [ 88.5988671, 28.0890189 ], [ 88.6006541, 28.089247 ], [ 88.6023651, 28.0896272 ], [ 88.6023651, 28.091034 ], [ 88.6025172, 28.0922887 ], [ 88.6028974, 28.0934674 ], [ 88.603505, 28.0950983 ], [ 88.6038078, 28.0961661 ], [ 88.6041425, 28.0971541 ], [ 88.6048597, 28.0986044 ], [ 88.6056246, 28.1001662 ], [ 88.6064334, 28.1020222 ], [ 88.6076881, 28.1044176 ], [ 88.6089428, 28.1070791 ], [ 88.6108439, 28.1093223 ], [ 88.6124788, 28.1107291 ], [ 88.614608, 28.1120218 ], [ 88.6157486, 28.1125161 ], [ 88.6172695, 28.1128583 ], [ 88.6180679, 28.1128583 ], [ 88.6186763, 28.1130104 ], [ 88.6223991, 28.1140407 ], [ 88.6266013, 28.1156076 ], [ 88.6270465, 28.1158569 ], [ 88.6333677, 28.1226411 ], [ 88.6347593, 28.1214892 ], [ 88.6360901, 28.1202345 ], [ 88.6374208, 28.1179152 ], [ 88.6379531, 28.1173829 ], [ 88.6390557, 28.1168886 ], [ 88.6398162, 28.1161662 ], [ 88.6403104, 28.1151396 ], [ 88.6405386, 28.1135047 ], [ 88.6408427, 28.1121359 ], [ 88.641337, 28.1109572 ], [ 88.6422495, 28.1100067 ], [ 88.6432001, 28.1084098 ], [ 88.6436943, 28.1057103 ], [ 88.6443787, 28.103467 ], [ 88.6454814, 28.1013378 ], [ 88.646698, 28.0997409 ], [ 88.6485611, 28.0987904 ], [ 88.6495496, 28.0983722 ], [ 88.6503101, 28.0973836 ], [ 88.6510325, 28.0965091 ], [ 88.6522111, 28.096319 ], [ 88.6540362, 28.0954065 ], [ 88.6557091, 28.0949122 ], [ 88.6571539, 28.0935815 ], [ 88.6582565, 28.0915663 ], [ 88.659055, 28.0907679 ], [ 88.6607279, 28.0904257 ], [ 88.6622868, 28.0897793 ], [ 88.6638077, 28.0887147 ], [ 88.664416, 28.0880303 ], [ 88.6646822, 28.0877262 ], [ 88.6648343, 28.087422 ], [ 88.6653665, 28.0849886 ], [ 88.6654806, 28.08381 ], [ 88.6652905, 28.0826693 ], [ 88.6655947, 28.0817948 ], [ 88.6663551, 28.0805781 ], [ 88.6668494, 28.0788672 ], [ 88.6670395, 28.0765859 ], [ 88.6671536, 28.0763578 ], [ 88.6686364, 28.0752171 ], [ 88.6706135, 28.0741145 ], [ 88.6736552, 28.073316 ], [ 88.6765829, 28.0727077 ], [ 88.6771532, 28.0725176 ], [ 88.6791303, 28.0718332 ], [ 88.6795105, 28.0718712 ], [ 88.6808793, 28.0762437 ], [ 88.6819583, 28.077062 ], [ 88.6834718, 28.0776107 ], [ 88.6842853, 28.0784053 ], [ 88.6855907, 28.0789161 ], [ 88.6879366, 28.0791998 ], [ 88.6896203, 28.0792566 ], [ 88.6913986, 28.0786134 ], [ 88.6927986, 28.0783296 ], [ 88.6944067, 28.0785566 ], [ 88.6957499, 28.077762 ], [ 88.6969228, 28.0766269 ], [ 88.6985877, 28.0765134 ], [ 88.7003849, 28.0772134 ], [ 88.7018038, 28.0775918 ], [ 88.7028633, 28.0776296 ], [ 88.7038281, 28.0775539 ], [ 88.7049443, 28.0772891 ], [ 88.705474, 28.0772891 ], [ 88.7060794, 28.0774026 ], [ 88.7068172, 28.0775728 ], [ 88.7075361, 28.0776674 ], [ 88.7082739, 28.0778188 ], [ 88.7088037, 28.0779701 ], [ 88.7094469, 28.0780269 ], [ 88.7104874, 28.0781215 ], [ 88.7115279, 28.0780836 ], [ 88.7124739, 28.0780836 ], [ 88.7134198, 28.0780458 ], [ 88.7143657, 28.078008 ], [ 88.7155954, 28.0778377 ], [ 88.7164278, 28.0776296 ], [ 88.7173927, 28.0771756 ], [ 88.7184899, 28.0763431 ], [ 88.7190953, 28.075908 ], [ 88.7195494, 28.0757567 ], [ 88.7204196, 28.0756432 ], [ 88.7218007, 28.075454 ], [ 88.7230871, 28.0750567 ], [ 88.724052, 28.0745459 ], [ 88.7248844, 28.0742999 ], [ 88.7257925, 28.0743189 ], [ 88.7268519, 28.0742621 ], [ 88.7270411, 28.0741108 ], [ 88.7273249, 28.0737513 ], [ 88.7276465, 28.0733918 ], [ 88.728006, 28.0729756 ], [ 88.7285357, 28.0726919 ], [ 88.7294816, 28.0726729 ], [ 88.7304464, 28.0726351 ], [ 88.7311464, 28.0728243 ], [ 88.7320923, 28.0731081 ], [ 88.732868, 28.0733162 ], [ 88.7341355, 28.0732783 ], [ 88.7353463, 28.0732594 ], [ 88.7359139, 28.0734864 ], [ 88.7366517, 28.0740729 ], [ 88.7371058, 28.0741864 ], [ 88.7378436, 28.0742053 ], [ 88.7381841, 28.0742432 ], [ 88.7386192, 28.0745459 ], [ 88.7390544, 28.0749432 ], [ 88.7394895, 28.0750188 ], [ 88.7401516, 28.0749999 ], [ 88.7409651, 28.0748486 ], [ 88.7417975, 28.0748675 ], [ 88.7423462, 28.074981 ], [ 88.7427056, 28.0751702 ], [ 88.7431029, 28.0755486 ], [ 88.7434624, 28.0760026 ], [ 88.7438975, 28.0764756 ], [ 88.7443137, 28.0768918 ], [ 88.7446542, 28.0770053 ], [ 88.7453542, 28.0770999 ], [ 88.7458083, 28.0771188 ], [ 88.7466028, 28.0773837 ], [ 88.7473785, 28.0776485 ], [ 88.749149, 28.0783355 ], [ 88.7512476, 28.0791482 ], [ 88.7525577, 28.0796698 ], [ 88.7547412, 28.0803006 ], [ 88.7559421, 28.0789178 ], [ 88.7567063, 28.0776926 ], [ 88.7570459, 28.0770497 ], [ 88.7578708, 28.0759822 ], [ 88.7589747, 28.0745872 ], [ 88.7602362, 28.0735076 ], [ 88.7610083, 28.0729033 ], [ 88.7616841, 28.0722839 ], [ 88.7621909, 28.0720023 ], [ 88.7626987, 28.0716759 ], [ 88.7633537, 28.0712877 ], [ 88.7639967, 28.070657 ], [ 88.7642271, 28.0699534 ], [ 88.7643363, 28.0693469 ], [ 88.7645789, 28.0688253 ], [ 88.7651248, 28.0684614 ], [ 88.7659739, 28.068061 ], [ 88.7665683, 28.0676607 ], [ 88.7672355, 28.0671877 ], [ 88.7676843, 28.066848 ], [ 88.7679269, 28.0665084 ], [ 88.7681574, 28.0659018 ], [ 88.7685092, 28.0652832 ], [ 88.7690672, 28.0645918 ], [ 88.7694311, 28.0639003 ], [ 88.7695888, 28.0633181 ], [ 88.7697222, 28.0631361 ], [ 88.770353, 28.0626509 ], [ 88.7709595, 28.062105 ], [ 88.7715175, 28.0614742 ], [ 88.7719785, 28.0607949 ], [ 88.772306, 28.0601399 ], [ 88.7725486, 28.059497 ], [ 88.7728519, 28.0590482 ], [ 88.7735069, 28.0584295 ], [ 88.7742832, 28.0577017 ], [ 88.7754842, 28.0564765 ], [ 88.7766002, 28.0552271 ], [ 88.7771945, 28.0544507 ], [ 88.7778738, 28.0538442 ], [ 88.7785531, 28.0534075 ], [ 88.7794583, 28.0532705 ], [ 88.7805159, 28.0532956 ], [ 88.7821022, 28.0533712 ], [ 88.782782, 28.0534467 ], [ 88.7833863, 28.0533964 ], [ 88.7840158, 28.0532201 ], [ 88.7844187, 28.0529179 ], [ 88.7853, 28.0518352 ], [ 88.7862317, 28.0509791 ], [ 88.7870878, 28.0504251 ], [ 88.7880698, 28.0498964 ], [ 88.7886489, 28.0497453 ], [ 88.7891273, 28.0496949 ], [ 88.7897568, 28.0497453 ], [ 88.7901345, 28.0497453 ], [ 88.7909403, 28.0495438 ], [ 88.7914942, 28.049141 ], [ 88.7919978, 28.0488892 ], [ 88.7925518, 28.0486122 ], [ 88.7929043, 28.0481338 ], [ 88.7931057, 28.0475546 ], [ 88.793282, 28.0462201 ], [ 88.7934583, 28.0452633 ], [ 88.7938863, 28.0442057 ], [ 88.7942892, 28.043677 ], [ 88.7950194, 28.0430978 ], [ 88.7960014, 28.0424431 ], [ 88.7965554, 28.0420403 ], [ 88.7971597, 28.0413101 ], [ 88.7975877, 28.0405295 ], [ 88.7980158, 28.0397489 ], [ 88.7986705, 28.0390187 ], [ 88.7992748, 28.0382885 ], [ 88.7996273, 28.037659 ], [ 88.8001309, 28.0365511 ], [ 88.8006093, 28.0360475 ], [ 88.8013395, 28.0354683 ], [ 88.8017424, 28.0349899 ], [ 88.8022208, 28.0345115 ], [ 88.8025482, 28.0338317 ], [ 88.8030014, 28.0327741 ], [ 88.8032784, 28.031918 ], [ 88.8035805, 28.031213 ], [ 88.8038827, 28.0304072 ], [ 88.8042856, 28.0300043 ], [ 88.8048647, 28.0298533 ], [ 88.8057712, 28.0295259 ], [ 88.8067532, 28.0290727 ], [ 88.8075086, 28.0288209 ], [ 88.8079366, 28.028418 ], [ 88.8084654, 28.0279648 ], [ 88.8091453, 28.027436 ], [ 88.8097748, 28.0268317 ], [ 88.8100266, 28.0263533 ], [ 88.8105553, 28.0255979 ], [ 88.8112855, 28.0247669 ], [ 88.8119654, 28.0239864 ], [ 88.8125445, 28.0234828 ], [ 88.8133251, 28.0229792 ], [ 88.8144078, 28.022249 ], [ 88.815264, 28.0217454 ], [ 88.8159438, 28.0215439 ], [ 88.816674, 28.0214432 ], [ 88.8174798, 28.0215439 ], [ 88.8183359, 28.0216698 ], [ 88.8192927, 28.021972 ], [ 88.8196956, 28.0220475 ], [ 88.8205265, 28.0219468 ], [ 88.8214834, 28.0216195 ], [ 88.8220625, 28.0213173 ], [ 88.8225409, 28.0212166 ], [ 88.8234222, 28.0211411 ], [ 88.8240769, 28.0208641 ], [ 88.8246057, 28.0205367 ], [ 88.8252855, 28.0201339 ], [ 88.8259654, 28.0197813 ], [ 88.8267208, 28.0192526 ], [ 88.8274006, 28.0186231 ], [ 88.8281308, 28.0182454 ], [ 88.8290121, 28.0179432 ], [ 88.8299186, 28.0177166 ], [ 88.8309258, 28.0174648 ], [ 88.8317819, 28.0173893 ], [ 88.8324617, 28.017213 ], [ 88.8330157, 28.016936 ], [ 88.8343139, 28.0164256 ], [ 88.8354425, 28.0158237 ], [ 88.836082, 28.015297 ], [ 88.8364582, 28.0146199 ], [ 88.8367591, 28.0138299 ], [ 88.8366873, 28.0128353 ], [ 88.8365439, 28.0120893 ], [ 88.8365439, 28.0110278 ], [ 88.836716, 28.0084455 ], [ 88.8370603, 28.0057485 ], [ 88.8374907, 28.0031375 ], [ 88.8379498, 28.0008422 ], [ 88.8385523, 27.998346 ], [ 88.839327, 27.9961368 ], [ 88.8397287, 27.9947882 ], [ 88.8401017, 27.9923208 ], [ 88.8404173, 27.991087 ], [ 88.8409911, 27.9897672 ], [ 88.8418519, 27.9879309 ], [ 88.8425118, 27.9863529 ], [ 88.8423683, 27.9852913 ], [ 88.8423396, 27.9847174 ], [ 88.8420814, 27.9842584 ], [ 88.841278, 27.9835124 ], [ 88.8410772, 27.9831394 ], [ 88.8409911, 27.9826229 ], [ 88.8409624, 27.9817335 ], [ 88.8409624, 27.9810162 ], [ 88.8410772, 27.9804424 ], [ 88.841278, 27.9794095 ], [ 88.8416223, 27.9780897 ], [ 88.8419092, 27.9769707 ], [ 88.8420527, 27.9760812 ], [ 88.8420527, 27.97545 ], [ 88.842024, 27.9748188 ], [ 88.8413641, 27.9730399 ], [ 88.8397861, 27.9697691 ], [ 88.8401877, 27.9682484 ], [ 88.8409337, 27.9657235 ], [ 88.8413354, 27.9637725 ], [ 88.8418232, 27.9616206 ], [ 88.841651, 27.9607025 ], [ 88.8421962, 27.9596122 ], [ 88.842397, 27.9588949 ], [ 88.8424257, 27.9576898 ], [ 88.8425118, 27.9565709 ], [ 88.8426839, 27.9561118 ], [ 88.8429995, 27.9559396 ], [ 88.8432004, 27.9558249 ], [ 88.8432577, 27.9554519 ], [ 88.8433151, 27.9548494 ], [ 88.8433151, 27.9545051 ], [ 88.843143, 27.9543042 ], [ 88.8429421, 27.9541895 ], [ 88.8428561, 27.954046 ], [ 88.8428561, 27.9538452 ], [ 88.8429134, 27.953673 ], [ 88.8430282, 27.9533287 ], [ 88.8430747, 27.951173 ], [ 88.8422339, 27.9498896 ], [ 88.8419684, 27.9492258 ], [ 88.8419684, 27.9479425 ], [ 88.8417028, 27.947677 ], [ 88.840685, 27.9474114 ], [ 88.8405965, 27.9472787 ], [ 88.8405522, 27.9469689 ], [ 88.840331, 27.9468361 ], [ 88.8398884, 27.9467476 ], [ 88.8383396, 27.9460838 ], [ 88.8382953, 27.9457741 ], [ 88.8381625, 27.9455528 ], [ 88.8379855, 27.9454643 ], [ 88.8374102, 27.9437384 ], [ 88.837012, 27.9418797 ], [ 88.8367907, 27.9405964 ], [ 88.8364367, 27.9388705 ], [ 88.8361269, 27.9362595 ], [ 88.8360384, 27.93564 ], [ 88.8354912, 27.9345186 ], [ 88.8352011, 27.9329024 ], [ 88.8340822, 27.9305816 ], [ 88.8366516, 27.9294213 ], [ 88.837729, 27.9294627 ], [ 88.8384336, 27.9297113 ], [ 88.8390137, 27.9296285 ], [ 88.8405885, 27.928924 ], [ 88.8418318, 27.9284267 ], [ 88.842909, 27.9279408 ], [ 88.8435435, 27.9277776 ], [ 88.844178, 27.9277414 ], [ 88.8452113, 27.9276507 ], [ 88.8466071, 27.9274876 ], [ 88.8479486, 27.9271975 ], [ 88.8489276, 27.9269619 ], [ 88.8499065, 27.926835 ], [ 88.8508129, 27.9268168 ], [ 88.852245, 27.9269256 ], [ 88.8539853, 27.9273426 ], [ 88.854783, 27.9275238 ], [ 88.8574116, 27.9275782 ], [ 88.8583724, 27.9275964 ], [ 88.8596414, 27.9277958 ], [ 88.8597864, 27.9276145 ], [ 88.8614542, 27.9262911 ], [ 88.8640284, 27.9232456 ], [ 88.8658412, 27.9213965 ], [ 88.8676359, 27.9197106 ], [ 88.8677266, 27.9186047 ], [ 88.8679622, 27.9182422 ], [ 88.8682341, 27.9174989 ], [ 88.8683248, 27.9167013 ], [ 88.8686148, 27.9161756 ], [ 88.8687236, 27.9156498 ], [ 88.8687236, 27.9154686 ], [ 88.8690137, 27.9152329 ], [ 88.8694125, 27.9148884 ], [ 88.8697569, 27.9141452 ], [ 88.8697388, 27.913982 ], [ 88.8695575, 27.9132932 ], [ 88.8693037, 27.9127856 ], [ 88.8690318, 27.9121148 ], [ 88.8690318, 27.9118973 ], [ 88.8693762, 27.910864 ], [ 88.8696663, 27.9097038 ], [ 88.8698294, 27.908888 ], [ 88.8698657, 27.908471 ], [ 88.8696663, 27.907329 ], [ 88.8696663, 27.9071296 ], [ 88.8698294, 27.9064951 ], [ 88.8700288, 27.9061325 ], [ 88.8703008, 27.9055343 ], [ 88.8705546, 27.9050086 ], [ 88.8706815, 27.9042834 ], [ 88.8707902, 27.9034133 ], [ 88.870754, 27.9023981 ], [ 88.8707177, 27.9008209 ], [ 88.8708084, 27.9007122 ], [ 88.8719323, 27.900549 ], [ 88.8721499, 27.900404 ], [ 88.8747059, 27.8982286 ], [ 88.8752317, 27.8976122 ], [ 88.8759387, 27.8971228 ], [ 88.8787667, 27.8953099 ], [ 88.8788573, 27.8952193 ], [ 88.8791836, 27.8933521 ], [ 88.8793286, 27.8932433 ], [ 88.8800175, 27.8929895 ], [ 88.8813227, 27.8917205 ], [ 88.8814315, 27.891503 ], [ 88.8813046, 27.889382 ], [ 88.8807608, 27.8885662 ], [ 88.8808695, 27.8875692 ], [ 88.8796549, 27.8862639 ], [ 88.8797637, 27.8858107 ], [ 88.8798544, 27.8855569 ], [ 88.8798906, 27.88514 ], [ 88.8798544, 27.8843786 ], [ 88.8788392, 27.8839254 ], [ 88.8787667, 27.8838529 ], [ 88.8782047, 27.8827108 ], [ 88.8782047, 27.8825295 ], [ 88.878386, 27.8820401 ], [ 88.8785673, 27.8814962 ], [ 88.8786579, 27.8809886 ], [ 88.8787304, 27.8798465 ], [ 88.8783497, 27.8783781 ], [ 88.8780053, 27.8752057 ], [ 88.8780597, 27.8749157 ], [ 88.8784585, 27.8746437 ], [ 88.8786216, 27.8744806 ], [ 88.8787485, 27.8739911 ], [ 88.879238, 27.8724683 ], [ 88.8794918, 27.8712175 ], [ 88.8797275, 27.8700573 ], [ 88.8800175, 27.8688789 ], [ 88.8802532, 27.8679907 ], [ 88.880507, 27.8674106 ], [ 88.8807426, 27.866903 ], [ 88.8809964, 27.8661235 ], [ 88.881359, 27.8653621 ], [ 88.8818666, 27.864782 ], [ 88.8826642, 27.8639662 ], [ 88.883335, 27.863368 ], [ 88.8840782, 27.8627879 ], [ 88.8848034, 27.862244 ], [ 88.8852747, 27.8618452 ], [ 88.8856917, 27.8612651 ], [ 88.8860723, 27.8604312 ], [ 88.886453, 27.859706 ], [ 88.8868519, 27.8590716 ], [ 88.8872869, 27.8582558 ], [ 88.8878127, 27.8572406 ], [ 88.8880302, 27.8568418 ], [ 88.8881208, 27.8564067 ], [ 88.8875045, 27.8558991 ], [ 88.8871963, 27.8556453 ], [ 88.8867068, 27.8552102 ], [ 88.8861449, 27.8546301 ], [ 88.8858548, 27.8543038 ], [ 88.8852928, 27.8540138 ], [ 88.884749, 27.8537962 ], [ 88.8832262, 27.8525635 ], [ 88.8821023, 27.8517477 ], [ 88.8820116, 27.851639 ], [ 88.880652, 27.8439163 ], [ 88.8805614, 27.8429737 ], [ 88.8804707, 27.842031 ], [ 88.8805251, 27.8411427 ], [ 88.8806701, 27.8402726 ], [ 88.8809421, 27.8398556 ], [ 88.8815403, 27.8394749 ], [ 88.8817216, 27.8390761 ], [ 88.8819391, 27.8386591 ], [ 88.8821385, 27.8381334 ], [ 88.8824286, 27.8374989 ], [ 88.8825555, 27.8368282 ], [ 88.8826099, 27.8360124 ], [ 88.882773, 27.8353779 ], [ 88.8829362, 27.8349066 ], [ 88.8828818, 27.8345984 ], [ 88.8825011, 27.8341271 ], [ 88.881776, 27.8333294 ], [ 88.8813046, 27.8324955 ], [ 88.8810871, 27.8319517 ], [ 88.8804345, 27.8304652 ], [ 88.8791836, 27.8293956 ], [ 88.8753767, 27.8284167 ], [ 88.8725849, 27.8267489 ], [ 88.8678172, 27.8234314 ], [ 88.8672734, 27.8228332 ], [ 88.8662944, 27.8220537 ], [ 88.8656599, 27.8217092 ], [ 88.8608197, 27.8183374 ], [ 88.85917, 27.8176304 ], [ 88.8570853, 27.8155275 ], [ 88.8579554, 27.8141679 ], [ 88.8594238, 27.8118293 ], [ 88.8594057, 27.8094908 ], [ 88.8585899, 27.8065721 ], [ 88.8587893, 27.8050131 ], [ 88.8601308, 27.8045599 ], [ 88.8602033, 27.8042336 ], [ 88.8608378, 27.8043242 ], [ 88.8608197, 27.8024208 ], [ 88.8604753, 27.8010068 ], [ 88.8601308, 27.800336 ], [ 88.8601489, 27.7993934 ], [ 88.8602033, 27.7967104 ], [ 88.8598045, 27.7919789 ], [ 88.8579917, 27.7885527 ], [ 88.8569946, 27.7864135 ], [ 88.856487, 27.7849995 ], [ 88.8561789, 27.7841656 ], [ 88.85578, 27.7832955 ], [ 88.8555262, 27.7826791 ], [ 88.8554175, 27.7824616 ], [ 88.8554537, 27.7817183 ], [ 88.85549, 27.7808844 ], [ 88.8555806, 27.7797423 ], [ 88.8555444, 27.779271 ], [ 88.8553087, 27.7785277 ], [ 88.8552181, 27.778002 ], [ 88.8553087, 27.7774763 ], [ 88.85578, 27.7768056 ], [ 88.8563239, 27.7757541 ], [ 88.8562514, 27.7747571 ], [ 88.8562695, 27.774177 ], [ 88.8564689, 27.7735243 ], [ 88.8566865, 27.7726179 ], [ 88.8552543, 27.7712039 ], [ 88.8549461, 27.7706963 ], [ 88.8548192, 27.7700075 ], [ 88.8548555, 27.7688835 ], [ 88.8548374, 27.7682309 ], [ 88.8547649, 27.767687 ], [ 88.8546198, 27.7671069 ], [ 88.8543298, 27.7660918 ], [ 88.8542391, 27.7652941 ], [ 88.8542029, 27.7645871 ], [ 88.8544567, 27.7639164 ], [ 88.8550549, 27.7628468 ], [ 88.8552362, 27.7622304 ], [ 88.8554537, 27.7609252 ], [ 88.8555625, 27.759765 ], [ 88.8555806, 27.7588223 ], [ 88.8556894, 27.7574265 ], [ 88.8559069, 27.7565019 ], [ 88.8562514, 27.7552692 ], [ 88.8564689, 27.754109 ], [ 88.8566502, 27.7534564 ], [ 88.8573028, 27.7536195 ], [ 88.8582636, 27.7542178 ], [ 88.8590975, 27.7544715 ], [ 88.8599677, 27.7544534 ], [ 88.861001, 27.754109 ], [ 88.8619255, 27.753692 ], [ 88.8628682, 27.7526768 ], [ 88.8633214, 27.7515166 ], [ 88.863829, 27.7501389 ], [ 88.8643728, 27.7484348 ], [ 88.8646266, 27.747329 ], [ 88.8647354, 27.7464407 ], [ 88.8649711, 27.7458425 ], [ 88.8654061, 27.7450992 ], [ 88.8659681, 27.7445554 ], [ 88.8663488, 27.7440478 ], [ 88.866947, 27.7429238 ], [ 88.8670014, 27.7427063 ], [ 88.8664032, 27.7424163 ], [ 88.8657324, 27.7420899 ], [ 88.8652249, 27.7418724 ], [ 88.8646991, 27.741528 ], [ 88.864119, 27.7410385 ], [ 88.8637746, 27.7408935 ], [ 88.8626688, 27.7405853 ], [ 88.8616536, 27.7402046 ], [ 88.8608016, 27.7398239 ], [ 88.8591156, 27.7383737 ], [ 88.8590069, 27.7381017 ], [ 88.8589344, 27.7377029 ], [ 88.8590975, 27.7345123 ], [ 88.859025, 27.7342948 ], [ 88.8584449, 27.7337691 ], [ 88.8575929, 27.733044 ], [ 88.8575022, 27.7328445 ], [ 88.8574297, 27.7317931 ], [ 88.8575566, 27.7313762 ], [ 88.8581911, 27.730361 ], [ 88.8584449, 27.7300528 ], [ 88.8585174, 27.7290557 ], [ 88.8588437, 27.7274605 ], [ 88.8587531, 27.7273517 ], [ 88.8578467, 27.7267897 ], [ 88.8573572, 27.7263546 ], [ 88.8569584, 27.7259558 ], [ 88.8566321, 27.7253938 ], [ 88.8565233, 27.7250494 ], [ 88.8565052, 27.7245237 ], [ 88.8565414, 27.7240342 ], [ 88.8565596, 27.7236173 ], [ 88.8566139, 27.7232547 ], [ 88.8566865, 27.7228921 ], [ 88.8567091, 27.7227054 ], [ 88.8565426, 27.7225389 ], [ 88.8561856, 27.7223485 ], [ 88.8555908, 27.7219678 ], [ 88.8558763, 27.7210874 ], [ 88.8558763, 27.7204449 ], [ 88.8560905, 27.7199215 ], [ 88.8565426, 27.7188983 ], [ 88.8567329, 27.7181844 ], [ 88.8567805, 27.7176372 ], [ 88.8567329, 27.7171851 ], [ 88.8562094, 27.7171137 ], [ 88.8558525, 27.7170185 ], [ 88.8551863, 27.7166378 ], [ 88.8548769, 27.7164474 ], [ 88.8546866, 27.7161619 ], [ 88.8545438, 27.7157336 ], [ 88.854401, 27.7155908 ], [ 88.8541869, 27.7150911 ], [ 88.8540917, 27.7149722 ], [ 88.8536872, 27.7149722 ], [ 88.853473, 27.7149246 ], [ 88.8531399, 27.7149484 ], [ 88.8529734, 27.7150911 ], [ 88.8522595, 27.7152101 ], [ 88.8517122, 27.7152815 ], [ 88.8515695, 27.7153529 ], [ 88.8509746, 27.7150674 ], [ 88.850356, 27.7149008 ], [ 88.8496183, 27.714758 ], [ 88.849071, 27.7144725 ], [ 88.848262, 27.714068 ], [ 88.847453, 27.71383 ], [ 88.846763, 27.7135207 ], [ 88.8462157, 27.7134017 ], [ 88.8457874, 27.7134493 ], [ 88.8454543, 27.7133541 ], [ 88.8449546, 27.7132352 ], [ 88.8438124, 27.7130448 ], [ 88.8432414, 27.712902 ], [ 88.843051, 27.7127831 ], [ 88.8423848, 27.7125689 ], [ 88.8416947, 27.712331 ], [ 88.8408143, 27.712093 ], [ 88.8406478, 27.7114744 ], [ 88.8404574, 27.7109271 ], [ 88.8402195, 27.7106416 ], [ 88.8399577, 27.7103322 ], [ 88.8398863, 27.7099991 ], [ 88.8398387, 27.7095232 ], [ 88.8397198, 27.7092853 ], [ 88.8390297, 27.7071913 ], [ 88.838887, 27.7068344 ], [ 88.8387918, 27.7062158 ], [ 88.838649, 27.7058113 ], [ 88.8385062, 27.7054067 ], [ 88.8387204, 27.7043598 ], [ 88.8391011, 27.7045025 ], [ 88.8399577, 27.7043122 ], [ 88.8409333, 27.7041932 ], [ 88.8415282, 27.7039791 ], [ 88.8421706, 27.7039791 ], [ 88.8426941, 27.7038839 ], [ 88.8431938, 27.7036935 ], [ 88.8433128, 27.7034318 ], [ 88.8435983, 27.702361 ], [ 88.8439552, 27.7015758 ], [ 88.8445263, 27.7007192 ], [ 88.8447642, 27.7005526 ], [ 88.8448832, 27.7002433 ], [ 88.8451449, 27.7001481 ], [ 88.8454067, 27.7001957 ], [ 88.8456208, 27.7000292 ], [ 88.8459064, 27.6999102 ], [ 88.8460967, 27.699815 ], [ 88.8462871, 27.6995057 ], [ 88.8463823, 27.698768 ], [ 88.8465726, 27.6985539 ], [ 88.8467868, 27.6984111 ], [ 88.8468581, 27.6979828 ], [ 88.8469057, 27.6978163 ], [ 88.8470961, 27.6974118 ], [ 88.8476196, 27.6968883 ], [ 88.8477385, 27.6964124 ], [ 88.8479527, 27.6961268 ], [ 88.8480241, 27.6957461 ], [ 88.8479765, 27.6949609 ], [ 88.8480717, 27.6945564 ], [ 88.8483334, 27.6940329 ], [ 88.8482858, 27.6934856 ], [ 88.8480717, 27.6929146 ], [ 88.8477385, 27.6924625 ], [ 88.8471352, 27.6918898 ], [ 88.8463624, 27.6912459 ], [ 88.8459761, 27.6900867 ], [ 88.8454287, 27.6891208 ], [ 88.8448169, 27.6881226 ], [ 88.8445915, 27.6877362 ], [ 88.8440442, 27.687382 ], [ 88.8434324, 27.6868025 ], [ 88.843046, 27.6861585 ], [ 88.842724, 27.6849994 ], [ 88.842563, 27.6840656 ], [ 88.8424664, 27.6832607 ], [ 88.8425308, 27.6830997 ], [ 88.842402, 27.6826167 ], [ 88.8426274, 27.6816507 ], [ 88.8433358, 27.6811034 ], [ 88.8438832, 27.6807492 ], [ 88.8443661, 27.6804272 ], [ 88.8446559, 27.6795257 ], [ 88.8449135, 27.6786885 ], [ 88.8452677, 27.6778191 ], [ 88.8458151, 27.6770786 ], [ 88.8460726, 27.6768854 ], [ 88.8467488, 27.6767888 ], [ 88.8475216, 27.67666 ], [ 88.847908, 27.676499 ], [ 88.8482621, 27.6763702 ], [ 88.8483909, 27.6749857 ], [ 88.8484553, 27.6740841 ], [ 88.8484553, 27.6732792 ], [ 88.8485841, 27.6727318 ], [ 88.8484875, 27.6724742 ], [ 88.8482943, 27.671959 ], [ 88.8482621, 27.6712185 ], [ 88.8482943, 27.6705101 ], [ 88.8483909, 27.6696408 ], [ 88.8485519, 27.6689646 ], [ 88.8482299, 27.6681918 ], [ 88.8478114, 27.6673869 ], [ 88.8476182, 27.6667751 ], [ 88.8473284, 27.6661311 ], [ 88.8469742, 27.6657126 ], [ 88.8464912, 27.6651652 ], [ 88.846137, 27.664489 ], [ 88.8456541, 27.6636197 ], [ 88.8450101, 27.6625893 ], [ 88.8444949, 27.6618488 ], [ 88.8437866, 27.661076 ], [ 88.843046, 27.660432 ], [ 88.8420157, 27.6596915 ], [ 88.8414039, 27.6591119 ], [ 88.8406955, 27.6584679 ], [ 88.8402125, 27.6580172 ], [ 88.8398584, 27.657824 ], [ 88.8395042, 27.6572766 ], [ 88.839472, 27.6567292 ], [ 88.8389246, 27.6561175 ], [ 88.8382806, 27.6555379 ], [ 88.8377333, 27.6550227 ], [ 88.8374113, 27.6547329 ], [ 88.8368317, 27.6545397 ], [ 88.8364453, 27.6543465 ], [ 88.8360912, 27.6539602 ], [ 88.836059, 27.653445 ], [ 88.8362522, 27.6529298 ], [ 88.8363165, 27.6523824 ], [ 88.8363165, 27.6521249 ], [ 88.8361234, 27.6518351 ], [ 88.8354794, 27.6514809 ], [ 88.8343846, 27.6509013 ], [ 88.8337085, 27.6503217 ], [ 88.8330323, 27.649549 ], [ 88.8325171, 27.6487118 ], [ 88.832163, 27.6479391 ], [ 88.8318732, 27.6473273 ], [ 88.8317444, 27.6472307 ], [ 88.8310682, 27.6472951 ], [ 88.830553, 27.6471985 ], [ 88.8300057, 27.6470375 ], [ 88.8292973, 27.6465867 ], [ 88.8289753, 27.6464257 ], [ 88.8282348, 27.6462326 ], [ 88.8275908, 27.6461038 ], [ 88.826657, 27.645975 ], [ 88.8259809, 27.6457174 ], [ 88.8255945, 27.645331 ], [ 88.8251437, 27.6447836 ], [ 88.8247895, 27.6444616 ], [ 88.8243388, 27.6442685 ], [ 88.8238236, 27.6440431 ], [ 88.8233084, 27.6438821 ], [ 88.8230547, 27.6439872 ], [ 88.8227454, 27.6439158 ], [ 88.8224123, 27.643773 ], [ 88.8220554, 27.644011 ], [ 88.8218412, 27.6443917 ], [ 88.8217222, 27.6446297 ], [ 88.8214843, 27.6451293 ], [ 88.8210322, 27.6458194 ], [ 88.8203897, 27.6463905 ], [ 88.8197473, 27.6468901 ], [ 88.8190335, 27.6473184 ], [ 88.8187241, 27.6476278 ], [ 88.8184148, 27.6479371 ], [ 88.8180817, 27.6481988 ], [ 88.8176296, 27.6482226 ], [ 88.8171775, 27.6482226 ], [ 88.8168443, 27.6483178 ], [ 88.8166064, 27.6483892 ], [ 88.8162971, 27.6483892 ], [ 88.8148218, 27.6469139 ], [ 88.8143221, 27.6459859 ], [ 88.814279, 27.645605 ], [ 88.8142983, 27.6442489 ], [ 88.8142507, 27.643892 ], [ 88.8140366, 27.6428451 ], [ 88.8137273, 27.6419409 ], [ 88.8135369, 27.6414412 ], [ 88.813299, 27.6410367 ], [ 88.8129658, 27.6407987 ], [ 88.8126327, 27.640537 ], [ 88.8124661, 27.6402752 ], [ 88.8123472, 27.6398469 ], [ 88.8120854, 27.6395138 ], [ 88.8117285, 27.6391093 ], [ 88.8093253, 27.6372771 ], [ 88.8090159, 27.6369202 ], [ 88.8087066, 27.6363015 ], [ 88.8084449, 27.6356829 ], [ 88.8083259, 27.6351118 ], [ 88.8080879, 27.6345169 ], [ 88.8078024, 27.6340886 ], [ 88.8077548, 27.6335652 ], [ 88.8077548, 27.6328513 ], [ 88.8077548, 27.6321613 ], [ 88.8076834, 27.631614 ], [ 88.8075407, 27.6311381 ], [ 88.8072075, 27.6307098 ], [ 88.8067316, 27.6301625 ], [ 88.8064937, 27.6297818 ], [ 88.8062082, 27.6292821 ], [ 88.8058274, 27.6287824 ], [ 88.8055181, 27.6283066 ], [ 88.8052564, 27.6277593 ], [ 88.805066, 27.627093 ], [ 88.8049708, 27.6265695 ], [ 88.8048281, 27.6260699 ], [ 88.8045425, 27.6252846 ], [ 88.804257, 27.6243329 ], [ 88.805066, 27.6235952 ], [ 88.8055895, 27.6230004 ], [ 88.8060178, 27.6226434 ], [ 88.8066127, 27.6225483 ], [ 88.8072789, 27.6224293 ], [ 88.8078262, 27.6223817 ], [ 88.8081355, 27.6222627 ], [ 88.8083735, 27.6219772 ], [ 88.8087304, 27.6214299 ], [ 88.8092539, 27.6211444 ], [ 88.8097773, 27.6207637 ], [ 88.8102057, 27.6204543 ], [ 88.8104198, 27.620026 ], [ 88.810634, 27.6197643 ], [ 88.8112288, 27.6193598 ], [ 88.8111336, 27.6188839 ], [ 88.8109433, 27.6183128 ], [ 88.810634, 27.6176704 ], [ 88.8100867, 27.6170041 ], [ 88.8097298, 27.6162427 ], [ 88.8094442, 27.6157192 ], [ 88.8091349, 27.614934 ], [ 88.8088018, 27.6141726 ], [ 88.8085162, 27.6138632 ], [ 88.8079452, 27.6136491 ], [ 88.8078024, 27.6135301 ], [ 88.8075645, 27.6128163 ], [ 88.8074931, 27.6114124 ], [ 88.8073979, 27.6107699 ], [ 88.8071124, 27.6100323 ], [ 88.8068982, 27.6095802 ], [ 88.8065175, 27.6092471 ], [ 88.8062795, 27.6089853 ], [ 88.8065889, 27.6079622 ], [ 88.8067792, 27.6073911 ], [ 88.8069934, 27.6065107 ], [ 88.8071837, 27.6054875 ], [ 88.8074931, 27.6044168 ], [ 88.8077548, 27.6038933 ], [ 88.8082545, 27.6034412 ], [ 88.8087542, 27.6030605 ], [ 88.8085638, 27.6024656 ], [ 88.8080641, 27.6015376 ], [ 88.8076596, 27.6006572 ], [ 88.8071837, 27.5994913 ], [ 88.806922, 27.5980636 ], [ 88.8067078, 27.5967311 ], [ 88.8053991, 27.5951131 ], [ 88.8036859, 27.5942327 ], [ 88.8029721, 27.5936854 ], [ 88.8023772, 27.5933999 ], [ 88.801592, 27.5931381 ], [ 88.8005926, 27.5930191 ], [ 88.8000454, 27.5929716 ], [ 88.799736, 27.5928526 ], [ 88.7994029, 27.5925195 ], [ 88.7989032, 27.5923529 ], [ 88.7985939, 27.5921625 ], [ 88.798118, 27.5920912 ], [ 88.7978563, 27.591877 ], [ 88.7976897, 27.5916391 ], [ 88.7973328, 27.5914011 ], [ 88.7966189, 27.5912108 ], [ 88.7961906, 27.590949 ], [ 88.7958337, 27.5909252 ], [ 88.7953102, 27.5907825 ], [ 88.7949533, 27.5905445 ], [ 88.7945488, 27.5900686 ], [ 88.7941919, 27.5898069 ], [ 88.7935256, 27.5892596 ], [ 88.7929546, 27.5886409 ], [ 88.7926928, 27.5879985 ], [ 88.7924311, 27.5876178 ], [ 88.7918124, 27.5870943 ], [ 88.7913127, 27.5868801 ], [ 88.7905275, 27.5866422 ], [ 88.7898375, 27.5867612 ], [ 88.7893378, 27.5867136 ], [ 88.7888619, 27.586547 ], [ 88.7885288, 27.5862615 ], [ 88.7882194, 27.585857 ], [ 88.7879101, 27.5852859 ], [ 88.7884574, 27.5846196 ], [ 88.788505, 27.5841676 ], [ 88.7886477, 27.5837868 ], [ 88.7890285, 27.5833823 ], [ 88.789314, 27.5827161 ], [ 88.7895995, 27.5823116 ], [ 88.7900992, 27.5817643 ], [ 88.7904561, 27.5812646 ], [ 88.7906465, 27.5807173 ], [ 88.79117, 27.5792421 ], [ 88.7911938, 27.5787186 ], [ 88.79117, 27.5783141 ], [ 88.7910986, 27.5779096 ], [ 88.7910272, 27.5774337 ], [ 88.7910272, 27.5771006 ], [ 88.7912413, 27.576696 ], [ 88.7915745, 27.5758394 ], [ 88.7918362, 27.5751732 ], [ 88.791924, 27.5749383 ], [ 88.7918651, 27.5744086 ], [ 88.7918063, 27.5742321 ], [ 88.7911982, 27.5745852 ], [ 88.7909627, 27.5746636 ], [ 88.7908058, 27.5747029 ], [ 88.7906489, 27.5746636 ], [ 88.7904135, 27.5745459 ], [ 88.7901388, 27.5743694 ], [ 88.7895699, 27.5742713 ], [ 88.7888048, 27.5740555 ], [ 88.7879221, 27.5738201 ], [ 88.786902, 27.5736239 ], [ 88.7859211, 27.5734081 ], [ 88.7853326, 27.5732708 ], [ 88.7848029, 27.5731139 ], [ 88.7840378, 27.5728785 ], [ 88.7830177, 27.5721919 ], [ 88.7827235, 27.5718191 ], [ 88.7822134, 27.5712698 ], [ 88.7817622, 27.5705636 ], [ 88.7813503, 27.5696808 ], [ 88.7812326, 27.5693866 ], [ 88.7809187, 27.5694454 ], [ 88.7801732, 27.5696024 ], [ 88.7796828, 27.5697789 ], [ 88.7789962, 27.5700143 ], [ 88.7783881, 27.5702105 ], [ 88.778035, 27.5702105 ], [ 88.7776622, 27.5701517 ], [ 88.7774072, 27.5701713 ], [ 88.777368, 27.5703282 ], [ 88.777368, 27.5705244 ], [ 88.7766225, 27.5706617 ], [ 88.7757986, 27.5707794 ], [ 88.7752101, 27.5708383 ], [ 88.7744842, 27.5709756 ], [ 88.7737584, 27.5711521 ], [ 88.7733072, 27.5712698 ], [ 88.7727775, 27.5713287 ], [ 88.7723263, 27.5713483 ], [ 88.7717574, 27.5714072 ], [ 88.7711885, 27.5713679 ], [ 88.7705804, 27.571211 ], [ 88.7702665, 27.5710737 ], [ 88.7695407, 27.5708579 ], [ 88.7689522, 27.5705244 ], [ 88.7684225, 27.5703282 ], [ 88.7679909, 27.5701713 ], [ 88.7674416, 27.5698966 ], [ 88.7669512, 27.5696612 ], [ 88.7665, 27.5692689 ], [ 88.7660292, 27.5687 ], [ 88.7653622, 27.5682292 ], [ 88.7645383, 27.5674445 ], [ 88.7633024, 27.5664244 ], [ 88.7650483, 27.5646784 ], [ 88.765166, 27.5644038 ], [ 88.7652445, 27.5638349 ], [ 88.7653033, 27.5634818 ], [ 88.7654995, 27.5633052 ], [ 88.765833, 27.5631091 ], [ 88.7661665, 27.5626971 ], [ 88.7665785, 27.5622851 ], [ 88.7669512, 27.5619516 ], [ 88.7673632, 27.5616181 ], [ 88.7675986, 27.5612454 ], [ 88.767834, 27.5608531 ], [ 88.7681086, 27.5606373 ], [ 88.7686579, 27.5601468 ], [ 88.769011, 27.5597153 ], [ 88.7695603, 27.5594406 ], [ 88.77009, 27.5591856 ], [ 88.7703842, 27.5589306 ], [ 88.7709139, 27.5585775 ], [ 88.7714436, 27.5580478 ], [ 88.7716593, 27.5576751 ], [ 88.7718555, 27.557165 ], [ 88.7723459, 27.556243 ], [ 88.7727971, 27.5554191 ], [ 88.7730129, 27.5547717 ], [ 88.7731503, 27.5542813 ], [ 88.773268, 27.5537516 ], [ 88.7736211, 27.5527707 ], [ 88.7737584, 27.5521626 ], [ 88.7738369, 27.5515937 ], [ 88.7738369, 27.5511817 ], [ 88.7737388, 27.5506128 ], [ 88.7736407, 27.5500243 ], [ 88.773366, 27.5496712 ], [ 88.773111, 27.5491808 ], [ 88.7729345, 27.5488473 ], [ 88.7729345, 27.5484746 ], [ 88.7730326, 27.5481607 ], [ 88.7732483, 27.547631 ], [ 88.7734838, 27.5472583 ], [ 88.7736211, 27.5469052 ], [ 88.7736603, 27.5466109 ], [ 88.7736995, 27.5462186 ], [ 88.773778, 27.5459243 ], [ 88.7739742, 27.5455712 ], [ 88.7742096, 27.5450023 ], [ 88.7745627, 27.5444923 ], [ 88.7747589, 27.5440607 ], [ 88.7742881, 27.5434329 ], [ 88.7739742, 27.5431387 ], [ 88.7738565, 27.5429229 ], [ 88.7738172, 27.542609 ], [ 88.773778, 27.5421578 ], [ 88.7736799, 27.5418047 ], [ 88.7733072, 27.5412946 ], [ 88.7733072, 27.5409415 ], [ 88.773366, 27.5401961 ], [ 88.7736603, 27.5391956 ], [ 88.7739938, 27.5387444 ], [ 88.7744254, 27.5383128 ], [ 88.7748177, 27.5376458 ], [ 88.7751512, 27.53692 ], [ 88.7756613, 27.5360176 ], [ 88.7763086, 27.5345659 ], [ 88.7766814, 27.5336243 ], [ 88.7768383, 27.533075 ], [ 88.7771129, 27.5325649 ], [ 88.7775838, 27.5320353 ], [ 88.7781919, 27.5316233 ], [ 88.7786823, 27.5312506 ], [ 88.7790747, 27.5309563 ], [ 88.7794866, 27.5307994 ], [ 88.779879, 27.5307994 ], [ 88.7802517, 27.5307405 ], [ 88.7805656, 27.530564 ], [ 88.7809776, 27.5302893 ], [ 88.7812914, 27.530152 ], [ 88.7817819, 27.5300147 ], [ 88.7821742, 27.5297793 ], [ 88.7826646, 27.5295635 ], [ 88.7829785, 27.5294262 ], [ 88.7833905, 27.5293869 ], [ 88.7837828, 27.5294654 ], [ 88.7839986, 27.5296027 ], [ 88.7843321, 27.5298774 ], [ 88.7847048, 27.5301716 ], [ 88.7849599, 27.5304855 ], [ 88.7851953, 27.5306425 ], [ 88.7854699, 27.5307013 ], [ 88.7858819, 27.5306032 ], [ 88.7863527, 27.5305444 ], [ 88.7868824, 27.5305051 ], [ 88.7871962, 27.5306032 ], [ 88.7877847, 27.5308582 ], [ 88.7883733, 27.5310544 ], [ 88.789001, 27.5311917 ], [ 88.7894915, 27.5314468 ], [ 88.7898053, 27.5315645 ], [ 88.7902369, 27.5316429 ], [ 88.7907273, 27.5315448 ], [ 88.7911393, 27.5313683 ], [ 88.7917671, 27.5310544 ], [ 88.792434, 27.530152 ], [ 88.7927283, 27.528975 ], [ 88.7927479, 27.5282491 ], [ 88.7927675, 27.5279353 ], [ 88.792846, 27.5275822 ], [ 88.793101, 27.527229 ], [ 88.7935718, 27.5269348 ], [ 88.7935915, 27.5267582 ], [ 88.7935326, 27.5265621 ], [ 88.7933364, 27.5262482 ], [ 88.7929245, 27.5258951 ], [ 88.7928068, 27.5258166 ], [ 88.7927479, 27.5257185 ], [ 88.7926891, 27.5255616 ], [ 88.7924733, 27.5254831 ], [ 88.7920809, 27.5253458 ], [ 88.7918651, 27.5252477 ], [ 88.7921986, 27.5243453 ], [ 88.7920809, 27.5240903 ], [ 88.7918063, 27.5238156 ], [ 88.7912962, 27.5236195 ], [ 88.7906489, 27.5233056 ], [ 88.7901388, 27.5231487 ], [ 88.7897269, 27.5228936 ], [ 88.7893345, 27.5225601 ], [ 88.7882359, 27.5220108 ], [ 88.7884125, 27.5215597 ], [ 88.788746, 27.5208338 ], [ 88.7889618, 27.5201472 ], [ 88.7891187, 27.519186 ], [ 88.789158, 27.518362 ], [ 88.7892168, 27.5177735 ], [ 88.7893737, 27.5171261 ], [ 88.7896876, 27.5165572 ], [ 88.7904527, 27.5157137 ], [ 88.7902369, 27.5147721 ], [ 88.7899819, 27.5139874 ], [ 88.7898446, 27.5133596 ], [ 88.7895503, 27.5127711 ], [ 88.7891776, 27.5124965 ], [ 88.7886871, 27.5121826 ], [ 88.7880986, 27.5117902 ], [ 88.7876082, 27.5114764 ], [ 88.7872747, 27.5111429 ], [ 88.7871178, 27.5107898 ], [ 88.7867843, 27.5099658 ], [ 88.7866077, 27.5091027 ], [ 88.7863919, 27.5081218 ], [ 88.7861369, 27.5072979 ], [ 88.7859996, 27.5070232 ], [ 88.7858426, 27.5067878 ], [ 88.7858426, 27.5065328 ], [ 88.7859407, 27.5061601 ], [ 88.7861369, 27.5056108 ], [ 88.7862546, 27.5050419 ], [ 88.7864115, 27.5045515 ], [ 88.7866077, 27.5041787 ], [ 88.7868039, 27.5039237 ], [ 88.7868039, 27.5035902 ], [ 88.7867058, 27.5032371 ], [ 88.7864312, 27.5028644 ], [ 88.7862154, 27.502629 ], [ 88.7859015, 27.502472 ], [ 88.7850383, 27.5021582 ], [ 88.7845087, 27.5019424 ], [ 88.7839594, 27.50155 ], [ 88.7836063, 27.5011577 ], [ 88.7833905, 27.5008634 ], [ 88.7833905, 27.5001964 ], [ 88.7836259, 27.4990586 ], [ 88.7836847, 27.4975873 ], [ 88.783567, 27.4968811 ], [ 88.7831943, 27.4966653 ], [ 88.7824685, 27.4964299 ], [ 88.7824292, 27.4961945 ], [ 88.7824685, 27.4959199 ], [ 88.7827627, 27.4955079 ], [ 88.7830374, 27.4953313 ], [ 88.7832335, 27.4952725 ], [ 88.7832924, 27.4949586 ], [ 88.7835082, 27.4948017 ], [ 88.7836651, 27.4945663 ], [ 88.7837632, 27.4942132 ], [ 88.7838024, 27.4938012 ], [ 88.7837436, 27.4934285 ], [ 88.7836259, 27.492683 ], [ 88.7834689, 27.4921337 ], [ 88.7833316, 27.4917806 ], [ 88.7836847, 27.4910744 ], [ 88.7839005, 27.4905055 ], [ 88.7839986, 27.4899954 ], [ 88.7840378, 27.4893677 ], [ 88.784391, 27.4886222 ], [ 88.7847048, 27.4881122 ], [ 88.7844694, 27.4877395 ], [ 88.7843321, 27.4874256 ], [ 88.7843321, 27.4868763 ], [ 88.7843517, 27.4858562 ], [ 88.7843517, 27.4856404 ], [ 88.7842144, 27.4853265 ], [ 88.7838417, 27.4848361 ], [ 88.7834689, 27.4843653 ], [ 88.7831747, 27.4837571 ], [ 88.7828804, 27.4835217 ], [ 88.7821938, 27.4831686 ], [ 88.7817034, 27.4828351 ], [ 88.7811541, 27.4823839 ], [ 88.7808402, 27.481972 ], [ 88.7804871, 27.4814619 ], [ 88.7805852, 27.4809519 ], [ 88.7810364, 27.4801476 ], [ 88.781468, 27.4794806 ], [ 88.7819192, 27.4789509 ], [ 88.7819976, 27.4786567 ], [ 88.7819584, 27.4783035 ], [ 88.7819388, 27.478127 ], [ 88.7821154, 27.4777935 ], [ 88.7822331, 27.4774011 ], [ 88.7822134, 27.477048 ], [ 88.7820761, 27.4767734 ], [ 88.7820173, 27.4766361 ], [ 88.7821546, 27.4764791 ], [ 88.7825469, 27.4761064 ], [ 88.782645, 27.4755964 ], [ 88.7826646, 27.4751452 ], [ 88.782645, 27.4748901 ], [ 88.78239, 27.4747332 ], [ 88.7818799, 27.4744586 ], [ 88.7814091, 27.4740466 ], [ 88.7810364, 27.4737523 ], [ 88.7805067, 27.4735169 ], [ 88.779879, 27.473105 ], [ 88.7792905, 27.4726145 ], [ 88.7785531, 27.4720936 ], [ 88.7780052, 27.4715017 ], [ 88.7771215, 27.4704707 ], [ 88.7768269, 27.4692925 ], [ 88.7771951, 27.4684088 ], [ 88.7780052, 27.4676723 ], [ 88.7782261, 27.4665677 ], [ 88.778447, 27.4655367 ], [ 88.7789625, 27.464653 ], [ 88.7788889, 27.463622 ], [ 88.7791098, 27.4628119 ], [ 88.7800671, 27.4624437 ], [ 88.7808036, 27.4614127 ], [ 88.7812454, 27.4604554 ], [ 88.7822028, 27.4591298 ], [ 88.7826446, 27.4580988 ], [ 88.7826929, 27.4576594 ], [ 88.7825042, 27.4568261 ], [ 88.7824099, 27.4564331 ], [ 88.7823784, 27.4559614 ], [ 88.7824813, 27.4554451 ], [ 88.7826319, 27.4545412 ], [ 88.7826696, 27.4539951 ], [ 88.7828391, 27.453449 ], [ 88.7836865, 27.4533737 ], [ 88.7844021, 27.4532042 ], [ 88.7851553, 27.4530347 ], [ 88.7856638, 27.4527711 ], [ 88.7872644, 27.4511892 ], [ 88.7877729, 27.4507184 ], [ 88.7878858, 27.4501535 ], [ 88.7879047, 27.4490048 ], [ 88.7879423, 27.4482139 ], [ 88.7881307, 27.4475171 ], [ 88.7886956, 27.4475171 ], [ 88.7890534, 27.4473288 ], [ 88.7897125, 27.44731 ], [ 88.790993, 27.4471782 ], [ 88.7918028, 27.4470463 ], [ 88.79233, 27.4470087 ], [ 88.7933281, 27.4471405 ], [ 88.7934787, 27.4471593 ], [ 88.7938177, 27.4449372 ], [ 88.7939684, 27.4432047 ], [ 88.7939307, 27.4418489 ], [ 88.7937989, 27.4406437 ], [ 88.7934976, 27.4396833 ], [ 88.7930268, 27.4390054 ], [ 88.7924807, 27.4387041 ], [ 88.7919722, 27.4384593 ], [ 88.7916333, 27.4380261 ], [ 88.7914638, 27.43748 ], [ 88.7915203, 27.4371976 ], [ 88.7923112, 27.4365385 ], [ 88.7926878, 27.4359924 ], [ 88.7931021, 27.4356534 ], [ 88.7931963, 27.4352768 ], [ 88.7933658, 27.4345047 ], [ 88.7935729, 27.4341657 ], [ 88.7937989, 27.4335631 ], [ 88.7939495, 27.4330923 ], [ 88.7941378, 27.432791 ], [ 88.7942885, 27.4322261 ], [ 88.7943262, 27.4316423 ], [ 88.794345, 27.4308891 ], [ 88.7943262, 27.4302488 ], [ 88.7944203, 27.4297027 ], [ 88.7945898, 27.4292884 ], [ 88.7947216, 27.4290813 ], [ 88.7951924, 27.4287611 ], [ 88.7956255, 27.4283092 ], [ 88.7959268, 27.4278384 ], [ 88.796247, 27.4273488 ], [ 88.7974333, 27.4277066 ], [ 88.7983372, 27.4280267 ], [ 88.7989963, 27.4281774 ], [ 88.799373, 27.428102 ], [ 88.7996931, 27.4277631 ], [ 88.7997307, 27.4271416 ], [ 88.7995613, 27.4264825 ], [ 88.7996178, 27.4258988 ], [ 88.7995048, 27.425428 ], [ 88.800258, 27.4242981 ], [ 88.8006911, 27.4232247 ], [ 88.8011808, 27.4227728 ], [ 88.8018963, 27.4227163 ], [ 88.8027061, 27.4228104 ], [ 88.803384, 27.4227351 ], [ 88.8041184, 27.4225091 ], [ 88.8048905, 27.4226033 ], [ 88.8057003, 27.4229611 ], [ 88.8066042, 27.4236013 ], [ 88.8070373, 27.423639 ], [ 88.8082425, 27.4231494 ], [ 88.8076022, 27.4220007 ], [ 88.806962, 27.4204377 ], [ 88.806736, 27.419402 ], [ 88.806284, 27.4182344 ], [ 88.8059262, 27.417161 ], [ 88.8052672, 27.41605 ], [ 88.804834, 27.4153156 ], [ 88.8053749, 27.4143433 ], [ 88.8059208, 27.4133378 ], [ 88.8068114, 27.4123036 ], [ 88.8070412, 27.4111831 ], [ 88.8066964, 27.409718 ], [ 88.8061219, 27.4087412 ], [ 88.8058346, 27.4080517 ], [ 88.8056909, 27.4070462 ], [ 88.8067539, 27.4054374 ], [ 88.807702, 27.4044606 ], [ 88.8085925, 27.4044032 ], [ 88.8099141, 27.404633 ], [ 88.8109483, 27.4047479 ], [ 88.81204, 27.4048341 ], [ 88.8130168, 27.404949 ], [ 88.8142521, 27.4049203 ], [ 88.8158322, 27.4050639 ], [ 88.8172112, 27.4052938 ], [ 88.8181879, 27.4052363 ], [ 88.8192509, 27.4048341 ], [ 88.8199978, 27.4046905 ], [ 88.8210895, 27.4046617 ], [ 88.8207161, 27.4033977 ], [ 88.8203139, 27.402306 ], [ 88.8200266, 27.4016739 ], [ 88.8199691, 27.4009845 ], [ 88.8199691, 27.4002088 ], [ 88.8200553, 27.3987436 ], [ 88.8208022, 27.3983989 ], [ 88.8210608, 27.3971061 ], [ 88.8212332, 27.3958995 ], [ 88.8214343, 27.3952674 ], [ 88.8214343, 27.394463 ], [ 88.8216354, 27.3937735 ], [ 88.8223249, 27.3930266 ], [ 88.8238742, 27.3924233 ], [ 88.8249679, 27.3913316 ], [ 88.8260021, 27.3904697 ], [ 88.8267204, 27.3905272 ], [ 88.8285877, 27.3906996 ], [ 88.8298231, 27.3905559 ], [ 88.8308286, 27.390125 ], [ 88.8311733, 27.3894068 ], [ 88.8311733, 27.388746 ], [ 88.8309598, 27.3877793 ], [ 88.8309337, 27.3868093 ], [ 88.8312775, 27.3856588 ], [ 88.8318081, 27.3854795 ], [ 88.8325523, 27.38504 ], [ 88.8332444, 27.3846551 ], [ 88.8342717, 27.3838906 ], [ 88.8350804, 27.383345 ], [ 88.8355113, 27.3830003 ], [ 88.8368616, 27.3826555 ], [ 88.8374936, 27.382081 ], [ 88.8377522, 27.3813915 ], [ 88.8377809, 27.3805296 ], [ 88.8378958, 27.3796103 ], [ 88.8386428, 27.3799263 ], [ 88.8397057, 27.3804147 ], [ 88.8407687, 27.3811616 ], [ 88.842004, 27.3823683 ], [ 88.8426361, 27.3831727 ], [ 88.8435267, 27.3839196 ], [ 88.8445322, 27.3842643 ], [ 88.84571, 27.3850113 ], [ 88.8466868, 27.3852124 ], [ 88.8480658, 27.3852986 ], [ 88.8489851, 27.3849826 ], [ 88.8498757, 27.3845516 ], [ 88.8511685, 27.3846665 ], [ 88.8532657, 27.3849538 ], [ 88.8546447, 27.3848964 ], [ 88.8561673, 27.3848964 ], [ 88.8576037, 27.3850687 ], [ 88.8589252, 27.3854997 ], [ 88.8600571, 27.3856891 ], [ 88.8603697, 27.3860334 ], [ 88.8611373, 27.3863041 ], [ 88.861281, 27.3851549 ], [ 88.8615396, 27.3829141 ], [ 88.8618843, 27.3818224 ], [ 88.8628898, 27.381018 ], [ 88.8640389, 27.3805583 ], [ 88.8644986, 27.3797827 ], [ 88.8645561, 27.3787197 ], [ 88.8644394, 27.3780489 ], [ 88.8640585, 27.3776831 ], [ 88.8635506, 27.3765363 ], [ 88.8631771, 27.3758468 ], [ 88.8630622, 27.3747839 ], [ 88.8631782, 27.3743906 ], [ 88.8638909, 27.3735727 ], [ 88.8633387, 27.371903 ], [ 88.8630199, 27.3701298 ], [ 88.863647, 27.3692243 ], [ 88.8648807, 27.3683929 ], [ 88.8650526, 27.3675318 ], [ 88.8660798, 27.3666257 ], [ 88.8674577, 27.3662514 ], [ 88.8682333, 27.3655045 ], [ 88.8690665, 27.3648725 ], [ 88.8699283, 27.3643554 ], [ 88.8704167, 27.3641255 ], [ 88.8709051, 27.364183 ], [ 88.8719393, 27.3644128 ], [ 88.8726001, 27.3644128 ], [ 88.8741515, 27.3634935 ], [ 88.8750133, 27.3629189 ], [ 88.8755304, 27.3622582 ], [ 88.8758464, 27.3613676 ], [ 88.8762486, 27.3609654 ], [ 88.8766796, 27.3607643 ], [ 88.8775702, 27.360793 ], [ 88.8783458, 27.3605632 ], [ 88.8793226, 27.3603621 ], [ 88.8801845, 27.360477 ], [ 88.8811325, 27.3605632 ], [ 88.8813624, 27.3605344 ], [ 88.8816496, 27.3596438 ], [ 88.8820806, 27.3583511 ], [ 88.8823104, 27.3574892 ], [ 88.8823391, 27.3568284 ], [ 88.8820231, 27.3558804 ], [ 88.8815347, 27.3550185 ], [ 88.8809602, 27.3538406 ], [ 88.8808165, 27.353697 ], [ 88.8812474, 27.3528639 ], [ 88.8816784, 27.3518584 ], [ 88.8824828, 27.3510827 ], [ 88.8836032, 27.3507954 ], [ 88.8847236, 27.3507667 ], [ 88.8846949, 27.3502496 ], [ 88.8844363, 27.3492153 ], [ 88.8835745, 27.3481811 ], [ 88.8828563, 27.3473767 ], [ 88.882569, 27.3468021 ], [ 88.8825088, 27.3462212 ], [ 88.8829074, 27.3454543 ], [ 88.8834308, 27.3443602 ], [ 88.8848098, 27.3430099 ], [ 88.8858728, 27.3421193 ], [ 88.8869932, 27.3418033 ], [ 88.8882572, 27.3413149 ], [ 88.8897511, 27.3407116 ], [ 88.8910727, 27.3399072 ], [ 88.8926565, 27.3391174 ], [ 88.8933281, 27.3384239 ], [ 88.8938306, 27.3365747 ], [ 88.8942615, 27.334851 ], [ 88.8944914, 27.3339604 ], [ 88.895066, 27.3329549 ], [ 88.8956405, 27.3326963 ], [ 88.8977377, 27.3329836 ], [ 88.8990592, 27.3330411 ], [ 88.900668, 27.3326389 ], [ 88.9022194, 27.3319781 ], [ 88.9035409, 27.3310875 ], [ 88.9045852, 27.330398 ], [ 88.9054094, 27.329536 ], [ 88.9056917, 27.3290524 ], [ 88.9059606, 27.3288366 ], [ 88.9066417, 27.3288 ], [ 88.9076905, 27.3290004 ], [ 88.908904, 27.3288746 ], [ 88.9094733, 27.3289197 ], [ 88.9103114, 27.3291168 ], [ 88.9105799, 27.3292925 ], [ 88.9114128, 27.3293046 ], [ 88.912217, 27.3297947 ], [ 88.9133733, 27.329952 ], [ 88.9139674, 27.3300153 ], [ 88.9147481, 27.3305302 ], [ 88.9154276, 27.3308322 ], [ 88.9156549, 27.3309776 ], [ 88.9157941, 27.3310256 ], [ 88.9168885, 27.3305535 ], [ 88.9177684, 27.3301243 ], [ 88.9189486, 27.3296522 ], [ 88.9194207, 27.3289226 ], [ 88.9200001, 27.3284076 ], [ 88.920086, 27.3279999 ], [ 88.9203649, 27.3277638 ], [ 88.9209443, 27.3276136 ], [ 88.9210996, 27.3274631 ], [ 88.9213678, 27.3272875 ], [ 88.9212536, 27.3268785 ], [ 88.9209866, 27.3262184 ], [ 88.9201175, 27.3258895 ], [ 88.9198821, 27.3258113 ], [ 88.9198133, 27.3257025 ], [ 88.9198265, 27.3255757 ], [ 88.919589, 27.325394 ], [ 88.9195901, 27.3232659 ], [ 88.9196213, 27.322686 ], [ 88.9196432, 27.3224604 ], [ 88.9197766, 27.3220619 ], [ 88.9198217, 27.3217944 ], [ 88.9197701, 27.321485 ], [ 88.9197548, 27.321296 ], [ 88.9197277, 27.3210664 ], [ 88.9196853, 27.3207582 ], [ 88.919676, 27.3205344 ], [ 88.9196911, 27.3203486 ], [ 88.9196419, 27.3201381 ], [ 88.9195398, 27.3198561 ], [ 88.9194583, 27.3195794 ], [ 88.9195807, 27.3192295 ], [ 88.9196129, 27.3190084 ], [ 88.9193547, 27.3188602 ], [ 88.9191759, 27.3187217 ], [ 88.9190803, 27.3185319 ], [ 88.9190172, 27.3184026 ], [ 88.9187806, 27.3180282 ], [ 88.9183463, 27.3178507 ], [ 88.9182511, 27.3175081 ], [ 88.9179248, 27.3174145 ], [ 88.9176845, 27.3172165 ], [ 88.9170782, 27.3170492 ], [ 88.9164443, 27.3169238 ], [ 88.91625, 27.3168244 ], [ 88.9161857, 27.3166826 ], [ 88.9163077, 27.3159984 ], [ 88.9161097, 27.315385 ], [ 88.9159548, 27.3152349 ], [ 88.9158586, 27.3144002 ], [ 88.9157162, 27.314056 ], [ 88.9156391, 27.3137557 ], [ 88.9155911, 27.3135828 ], [ 88.9154334, 27.3131229 ], [ 88.9151039, 27.3126207 ], [ 88.9149592, 27.3123145 ], [ 88.9148033, 27.3119867 ], [ 88.91476, 27.3118324 ], [ 88.9146363, 27.3117282 ], [ 88.9146404, 27.3113323 ], [ 88.9145979, 27.3110524 ], [ 88.9145139, 27.3103908 ], [ 88.9144088, 27.3101041 ], [ 88.9139383, 27.30927 ], [ 88.9138437, 27.3090764 ], [ 88.9134262, 27.3084076 ], [ 88.9129047, 27.3072735 ], [ 88.9126534, 27.3071222 ], [ 88.9123873, 27.3069743 ], [ 88.9122573, 27.3068573 ], [ 88.912162, 27.3067772 ], [ 88.9121094, 27.3066852 ], [ 88.9120175, 27.3066458 ], [ 88.9119124, 27.3066064 ], [ 88.9116909, 27.3064561 ], [ 88.9115596, 27.3063392 ], [ 88.9109052, 27.3061277 ], [ 88.9105251, 27.3056747 ], [ 88.9100457, 27.3054431 ], [ 88.9094884, 27.3053208 ], [ 88.9092036, 27.3051312 ], [ 88.9088763, 27.3047929 ], [ 88.9083108, 27.3044476 ], [ 88.9080527, 27.3036523 ], [ 88.9078233, 27.3030654 ], [ 88.9077379, 27.3024671 ], [ 88.9078749, 27.3015539 ], [ 88.908323, 27.3011374 ], [ 88.908823, 27.3006433 ], [ 88.9091779, 27.3002296 ], [ 88.909687, 27.2998466 ], [ 88.9105942, 27.2991507 ], [ 88.9110615, 27.2985684 ], [ 88.9112665, 27.2982689 ], [ 88.9114354, 27.2979339 ], [ 88.9117622, 27.2972857 ], [ 88.9124087, 27.2957493 ], [ 88.9128487, 27.2947134 ], [ 88.9132036, 27.2934937 ], [ 88.9135538, 27.2922998 ], [ 88.913684, 27.2914256 ], [ 88.9137152, 27.2910444 ], [ 88.9137397, 27.2907451 ], [ 88.9136408, 27.2896378 ], [ 88.9135058, 27.289177 ], [ 88.9131976, 27.2885645 ], [ 88.9127598, 27.2877297 ], [ 88.9126074, 27.2874189 ], [ 88.912254, 27.2868467 ], [ 88.9116365, 27.2857825 ], [ 88.9110978, 27.2849942 ], [ 88.9107299, 27.2847051 ], [ 88.9105723, 27.2844161 ], [ 88.9103095, 27.2841796 ], [ 88.9096395, 27.2830103 ], [ 88.9087461, 27.2819593 ], [ 88.908641, 27.2816046 ], [ 88.9086016, 27.2809871 ], [ 88.9086278, 27.2807506 ], [ 88.9087461, 27.2804747 ], [ 88.90893, 27.2801199 ], [ 88.9090745, 27.2796995 ], [ 88.9091796, 27.2793973 ], [ 88.9092847, 27.2790689 ], [ 88.9092847, 27.2789506 ], [ 88.90893, 27.2781098 ], [ 88.9085753, 27.2773478 ], [ 88.9082468, 27.2768223 ], [ 88.9079578, 27.2762311 ], [ 88.9077739, 27.2758895 ], [ 88.9074585, 27.2756004 ], [ 88.9070907, 27.2752326 ], [ 88.9066308, 27.2747727 ], [ 88.9062893, 27.2743654 ], [ 88.9059739, 27.2741684 ], [ 88.9055535, 27.2740895 ], [ 88.9054353, 27.2739713 ], [ 88.904936, 27.2734983 ], [ 88.9044893, 27.2729728 ], [ 88.9039244, 27.2726443 ], [ 88.9034251, 27.2725655 ], [ 88.9031492, 27.2726312 ], [ 88.9024334, 27.2730316 ], [ 88.902348, 27.2730588 ], [ 88.9013405, 27.2736999 ], [ 88.9006594, 27.2738815 ], [ 88.9001775, 27.2740218 ], [ 88.900035, 27.2740218 ], [ 88.899675, 27.2738793 ], [ 88.8993674, 27.2736843 ], [ 88.8991124, 27.2732568 ], [ 88.8989924, 27.2726342 ], [ 88.8988574, 27.2715391 ], [ 88.8987749, 27.270834 ], [ 88.8976573, 27.270384 ], [ 88.8963671, 27.2705115 ], [ 88.8957296, 27.2705115 ], [ 88.8954145, 27.2704365 ], [ 88.8949645, 27.2701215 ], [ 88.8942294, 27.2696189 ], [ 88.8938244, 27.2694389 ], [ 88.8932468, 27.2692739 ], [ 88.8927143, 27.2691539 ], [ 88.8920842, 27.2689138 ], [ 88.8915217, 27.2686738 ], [ 88.890632, 27.2682909 ], [ 88.8898706, 27.268624 ], [ 88.889014, 27.2682671 ], [ 88.8878718, 27.2679578 ], [ 88.8868963, 27.2675532 ], [ 88.8859445, 27.2673153 ], [ 88.8843978, 27.2665539 ], [ 88.883446, 27.2661494 ], [ 88.8823991, 27.2655783 ], [ 88.8806859, 27.2639127 ], [ 88.8797111, 27.2630681 ], [ 88.8792125, 27.2627246 ], [ 88.8644247, 27.2650727 ], [ 88.8308688, 27.264185 ], [ 88.8265465, 27.2568286 ], [ 88.8022839, 27.2483656 ], [ 88.8025319, 27.2474353 ], [ 88.8030792, 27.2461028 ], [ 88.8032934, 27.2452699 ], [ 88.8032696, 27.2441278 ], [ 88.8033647, 27.2431998 ], [ 88.8036027, 27.2424384 ], [ 88.8039834, 27.2411773 ], [ 88.8041024, 27.2401065 ], [ 88.804031, 27.2393451 ], [ 88.8039834, 27.2382267 ], [ 88.8040786, 27.2375367 ], [ 88.8043641, 27.2368942 ], [ 88.8044593, 27.2358235 ], [ 88.8042927, 27.2356807 ], [ 88.8039834, 27.2353714 ], [ 88.8037217, 27.2350621 ], [ 88.8034123, 27.2346338 ], [ 88.8031506, 27.2337772 ], [ 88.8029602, 27.2330871 ], [ 88.8026747, 27.2325636 ], [ 88.8024367, 27.2318498 ], [ 88.8022226, 27.2310646 ], [ 88.8019609, 27.2304935 ], [ 88.8016515, 27.2300176 ], [ 88.8013184, 27.2294941 ], [ 88.8015326, 27.2291848 ], [ 88.8019371, 27.2286851 ], [ 88.8020084, 27.2283044 ], [ 88.8019609, 27.2275668 ], [ 88.802056, 27.2268529 ], [ 88.8022226, 27.2261867 ], [ 88.8023654, 27.2253777 ], [ 88.8025319, 27.2248066 ], [ 88.8029126, 27.2242355 ], [ 88.8031506, 27.2235931 ], [ 88.8031506, 27.2230934 ], [ 88.8030316, 27.2223082 ], [ 88.8030078, 27.2217609 ], [ 88.8032458, 27.2207139 ], [ 88.803222, 27.2200477 ], [ 88.8030316, 27.2190959 ], [ 88.8027937, 27.2186021 ], [ 88.8022583, 27.2178883 ], [ 88.8016515, 27.2171745 ], [ 88.8014017, 27.2163179 ], [ 88.8012589, 27.2154256 ], [ 88.8011518, 27.2148188 ], [ 88.800902, 27.2140693 ], [ 88.8004737, 27.2132127 ], [ 88.8001525, 27.2126059 ], [ 88.799974, 27.2118564 ], [ 88.7998669, 27.2109641 ], [ 88.7999377, 27.2100236 ], [ 88.7997466, 27.2091028 ], [ 88.7994686, 27.20846 ], [ 88.7990864, 27.2080257 ], [ 88.7986174, 27.2075566 ], [ 88.7981657, 27.2070007 ], [ 88.7979572, 27.2064274 ], [ 88.7975229, 27.2060279 ], [ 88.7967933, 27.2056804 ], [ 88.7961505, 27.2049855 ], [ 88.7960462, 27.2046728 ], [ 88.7961505, 27.2035436 ], [ 88.7960085, 27.2031868 ], [ 88.7953782, 27.2024706 ], [ 88.7948338, 27.2020982 ], [ 88.7943181, 27.2018117 ], [ 88.7938024, 27.2012673 ], [ 88.7936592, 27.2005797 ], [ 88.7934873, 27.2000067 ], [ 88.7928857, 27.1991473 ], [ 88.7926278, 27.198517 ], [ 88.7921981, 27.1978867 ], [ 88.7916537, 27.1971705 ], [ 88.7910807, 27.1967694 ], [ 88.7907656, 27.1961391 ], [ 88.7902499, 27.1953369 ], [ 88.7896769, 27.1945347 ], [ 88.7890753, 27.1938185 ], [ 88.7888174, 27.1928157 ], [ 88.7888747, 27.1920708 ], [ 88.7891612, 27.1916125 ], [ 88.7898202, 27.1910968 ], [ 88.7903932, 27.1904951 ], [ 88.7903359, 27.1895783 ], [ 88.790164, 27.1887762 ], [ 88.7899634, 27.1877161 ], [ 88.7896196, 27.1866274 ], [ 88.7894477, 27.1861404 ], [ 88.7890753, 27.1853096 ], [ 88.7888174, 27.1848512 ], [ 88.788359, 27.184536 ], [ 88.7879006, 27.1843355 ], [ 88.7876428, 27.1840203 ], [ 88.7870698, 27.182989 ], [ 88.7866974, 27.1827025 ], [ 88.786153, 27.1827598 ], [ 88.7856087, 27.182903 ], [ 88.7848638, 27.182903 ], [ 88.783947, 27.1828457 ], [ 88.7829156, 27.1828457 ], [ 88.7826578, 27.1833328 ], [ 88.7824572, 27.1838771 ], [ 88.7819129, 27.1844501 ], [ 88.7813686, 27.1844501 ], [ 88.7803372, 27.1842495 ], [ 88.7794204, 27.1840203 ], [ 88.7785323, 27.1837911 ], [ 88.7779593, 27.1834474 ], [ 88.7774722, 27.1828744 ], [ 88.776756, 27.1822441 ], [ 88.7761257, 27.1818716 ], [ 88.77561, 27.181757 ], [ 88.775123, 27.1818716 ], [ 88.7741775, 27.1829603 ], [ 88.7730316, 27.1822154 ], [ 88.772344, 27.1820435 ], [ 88.7713699, 27.1816711 ], [ 88.7701666, 27.1811267 ], [ 88.7687628, 27.1805538 ], [ 88.7684763, 27.1801527 ], [ 88.7679606, 27.1796943 ], [ 88.7672444, 27.1794078 ], [ 88.7664708, 27.1791213 ], [ 88.7656973, 27.1783764 ], [ 88.765067, 27.1777748 ], [ 88.7646946, 27.1771445 ], [ 88.764494, 27.1766574 ], [ 88.7644367, 27.1761131 ], [ 88.7642362, 27.1756547 ], [ 88.7636918, 27.1749385 ], [ 88.7633194, 27.1742509 ], [ 88.7627178, 27.1732195 ], [ 88.7622307, 27.1726751 ], [ 88.7614285, 27.172446 ], [ 88.7610847, 27.1722168 ], [ 88.7607982, 27.1715292 ], [ 88.7605404, 27.1711567 ], [ 88.7602826, 27.1703545 ], [ 88.7598242, 27.1693805 ], [ 88.7596236, 27.1682918 ], [ 88.7593085, 27.1674323 ], [ 88.7585063, 27.1664869 ], [ 88.757303, 27.1652549 ], [ 88.7574749, 27.1647392 ], [ 88.7576182, 27.1641949 ], [ 88.7575895, 27.1635646 ], [ 88.7573317, 27.1629916 ], [ 88.7571025, 27.1623327 ], [ 88.7570738, 27.1616737 ], [ 88.7570165, 27.1607283 ], [ 88.7569879, 27.160184 ], [ 88.7569592, 27.1594391 ], [ 88.7567587, 27.1586083 ], [ 88.7569592, 27.1582645 ], [ 88.7574463, 27.1580353 ], [ 88.7579046, 27.1578347 ], [ 88.7582771, 27.1575482 ], [ 88.7587641, 27.1568606 ], [ 88.7590793, 27.1564309 ], [ 88.7593371, 27.155772 ], [ 88.7594804, 27.155199 ], [ 88.7599961, 27.1547119 ], [ 88.7601393, 27.1542535 ], [ 88.760082, 27.152993 ], [ 88.759595, 27.1527638 ], [ 88.7589933, 27.1525059 ], [ 88.7585349, 27.1519902 ], [ 88.7576468, 27.1512167 ], [ 88.7569879, 27.1508156 ], [ 88.7563862, 27.1505578 ], [ 88.7556127, 27.1504432 ], [ 88.7547532, 27.1504432 ], [ 88.7536932, 27.1506151 ], [ 88.7525185, 27.1506437 ], [ 88.7519742, 27.1505291 ], [ 88.7515158, 27.150128 ], [ 88.7508569, 27.1494691 ], [ 88.7503125, 27.1488674 ], [ 88.7498255, 27.1482658 ], [ 88.7495103, 27.1475782 ], [ 88.7489374, 27.1466614 ], [ 88.7481352, 27.1458879 ], [ 88.7472184, 27.1448279 ], [ 88.7466168, 27.1436532 ], [ 88.7464735, 27.1429656 ], [ 88.7464724, 27.1418502 ], [ 88.7473616, 27.1418483 ], [ 88.7493385, 27.1415905 ], [ 88.7501693, 27.1415045 ], [ 88.7510001, 27.1413326 ], [ 88.7516877, 27.1411034 ], [ 88.7527191, 27.1406164 ], [ 88.753464, 27.1403585 ], [ 88.7545813, 27.1403585 ], [ 88.7553835, 27.1403299 ], [ 88.7565868, 27.1401866 ], [ 88.7575895, 27.1401866 ], [ 88.7586782, 27.1400434 ], [ 88.7595377, 27.1402153 ], [ 88.7601393, 27.1404158 ], [ 88.7607696, 27.1404731 ], [ 88.7617437, 27.1403872 ], [ 88.7627751, 27.1404731 ], [ 88.7632334, 27.1405591 ], [ 88.7637491, 27.1404731 ], [ 88.7645513, 27.1403585 ], [ 88.7654968, 27.1399861 ], [ 88.7665854, 27.1392126 ], [ 88.7676455, 27.1383244 ], [ 88.7683904, 27.1377514 ], [ 88.7694217, 27.1372644 ], [ 88.7698228, 27.1371498 ], [ 88.7700807, 27.1371211 ], [ 88.7707686, 27.1371803 ], [ 88.7710544, 27.1371299 ], [ 88.7719467, 27.1368086 ], [ 88.7730888, 27.1365945 ], [ 88.7735885, 27.136309 ], [ 88.7738384, 27.1359163 ], [ 88.7739811, 27.1357379 ], [ 88.7747307, 27.1356665 ], [ 88.775623, 27.1356308 ], [ 88.7765153, 27.1356308 ], [ 88.7769436, 27.1355594 ], [ 88.7777288, 27.1353453 ], [ 88.7783355, 27.1351668 ], [ 88.7791565, 27.135024 ], [ 88.7811909, 27.1348813 ], [ 88.7822973, 27.1348456 ], [ 88.783261, 27.1348456 ], [ 88.7844746, 27.1348456 ], [ 88.7855453, 27.1349884 ], [ 88.7873299, 27.1352025 ], [ 88.7885434, 27.1352382 ], [ 88.789864, 27.135381 ], [ 88.7913631, 27.1355951 ], [ 88.7924338, 27.1357379 ], [ 88.7935046, 27.135952 ], [ 88.7951107, 27.136309 ], [ 88.7961101, 27.1365588 ], [ 88.7967169, 27.13688 ], [ 88.7981089, 27.1374154 ], [ 88.7990725, 27.137808 ], [ 88.7998935, 27.1380935 ], [ 88.8005716, 27.1382006 ], [ 88.8008928, 27.1383434 ], [ 88.8012854, 27.1388074 ], [ 88.8016424, 27.1390572 ], [ 88.8023919, 27.1393428 ], [ 88.8031771, 27.1394498 ], [ 88.803534, 27.1389145 ], [ 88.8040337, 27.1382363 ], [ 88.8043193, 27.1375939 ], [ 88.8044263, 27.13688 ], [ 88.8045691, 27.1360591 ], [ 88.8046405, 27.135845 ], [ 88.8051045, 27.1354167 ], [ 88.8057112, 27.1349884 ], [ 88.8066392, 27.1346314 ], [ 88.8071032, 27.1341674 ], [ 88.8073174, 27.1339533 ], [ 88.8076743, 27.1334179 ], [ 88.8079241, 27.1330253 ], [ 88.8079955, 27.1324542 ], [ 88.8081383, 27.1319545 ], [ 88.8083524, 27.131669 ], [ 88.8086737, 27.1311336 ], [ 88.8087807, 27.130741 ], [ 88.8091377, 27.1302413 ], [ 88.8094589, 27.1296703 ], [ 88.8098515, 27.1293133 ], [ 88.8101013, 27.1289207 ], [ 88.8103155, 27.1284567 ], [ 88.8107795, 27.1281355 ], [ 88.810958, 27.1279214 ], [ 88.8110293, 27.1275287 ], [ 88.8111721, 27.1270291 ], [ 88.8115647, 27.1267435 ], [ 88.8120287, 27.1266364 ], [ 88.8125284, 27.1264937 ], [ 88.8132779, 27.125994 ], [ 88.8142416, 27.1252088 ], [ 88.814777, 27.125066 ], [ 88.8195954, 27.1216753 ], [ 88.8204163, 27.1213184 ], [ 88.8231289, 27.1214611 ], [ 88.8280544, 27.1189627 ], [ 88.8295891, 27.1180704 ], [ 88.8303387, 27.117535 ], [ 88.8309097, 27.1170353 ], [ 88.8315879, 27.1165356 ], [ 88.8321233, 27.1161073 ], [ 88.8330156, 27.1153935 ], [ 88.8338722, 27.1147867 ], [ 88.8343718, 27.1147153 ], [ 88.8349072, 27.1147153 ], [ 88.8354916, 27.114803 ], [ 88.8356211, 27.1148224 ], [ 88.8363349, 27.1150723 ], [ 88.8372272, 27.1153935 ], [ 88.8377269, 27.115679 ], [ 88.8385121, 27.1157861 ], [ 88.839333, 27.1157861 ], [ 88.8398684, 27.1157147 ], [ 88.840261, 27.1154649 ], [ 88.8408321, 27.1150009 ], [ 88.8412604, 27.1148938 ], [ 88.8415816, 27.1145726 ], [ 88.8419028, 27.114287 ], [ 88.8421884, 27.1139301 ], [ 88.8424739, 27.1135375 ], [ 88.8426167, 27.1122883 ], [ 88.8424739, 27.1120741 ], [ 88.8422955, 27.1117172 ], [ 88.8420456, 27.1114674 ], [ 88.8422241, 27.1113603 ], [ 88.8427238, 27.1112175 ], [ 88.8432948, 27.1111105 ], [ 88.8438302, 27.1110748 ], [ 88.8447225, 27.1111818 ], [ 88.8465071, 27.1120028 ], [ 88.8467926, 27.1120028 ], [ 88.8469711, 27.11186 ], [ 88.8473994, 27.1114317 ], [ 88.8477206, 27.1110391 ], [ 88.8480419, 27.1107892 ], [ 88.8485772, 27.1103609 ], [ 88.8487557, 27.1101111 ], [ 88.8490412, 27.10954 ], [ 88.8495409, 27.108612 ], [ 88.8498621, 27.1082908 ], [ 88.8503261, 27.108148 ], [ 88.85104, 27.1080766 ], [ 88.8518966, 27.108148 ], [ 88.852896, 27.1083265 ], [ 88.8542166, 27.108612 ], [ 88.8545867, 27.1087138 ], [ 88.8555499, 27.1089787 ], [ 88.8556442, 27.1090046 ], [ 88.8569192, 27.1092649 ], [ 88.8573931, 27.1093616 ], [ 88.8582479, 27.1094226 ], [ 88.8593919, 27.1095043 ], [ 88.8600827, 27.109529 ], [ 88.8603913, 27.10954 ], [ 88.8616161, 27.1095706 ], [ 88.8618189, 27.1095757 ], [ 88.8627112, 27.1097185 ], [ 88.8636749, 27.1099683 ], [ 88.8643887, 27.1100397 ], [ 88.8648665, 27.1100146 ], [ 88.8650669, 27.110004 ], [ 88.8658521, 27.1098612 ], [ 88.8663875, 27.1097899 ], [ 88.8669586, 27.1099683 ], [ 88.8676724, 27.1101468 ], [ 88.8682098, 27.1103164 ], [ 88.8683506, 27.1103609 ], [ 88.8692785, 27.1103609 ], [ 88.8699924, 27.1098612 ], [ 88.8704921, 27.1091474 ], [ 88.8709204, 27.108148 ], [ 88.8710274, 27.1075056 ], [ 88.8710988, 27.1066847 ], [ 88.8709918, 27.1061136 ], [ 88.8707776, 27.1046859 ], [ 88.8707776, 27.1035081 ], [ 88.8709561, 27.1020804 ], [ 88.8711702, 27.100974 ], [ 88.8716342, 27.1004743 ], [ 88.8722053, 27.1001174 ], [ 88.8726693, 27.0996177 ], [ 88.8731333, 27.0991894 ], [ 88.8733117, 27.0987254 ], [ 88.8735973, 27.0978331 ], [ 88.8737757, 27.0972977 ], [ 88.8739542, 27.0965482 ], [ 88.8739899, 27.0961912 ], [ 88.8738114, 27.0956916 ], [ 88.873633, 27.0949063 ], [ 88.8734188, 27.0942282 ], [ 88.8733117, 27.0936928 ], [ 88.8734188, 27.0931574 ], [ 88.8735973, 27.0928005 ], [ 88.8741326, 27.0922294 ], [ 88.8747037, 27.0914799 ], [ 88.8752748, 27.0909088 ], [ 88.8758102, 27.0903735 ], [ 88.87606, 27.0900522 ], [ 88.87606, 27.0896953 ], [ 88.8759172, 27.0891599 ], [ 88.8757031, 27.0888387 ], [ 88.8751677, 27.088339 ], [ 88.8750249, 27.0880535 ], [ 88.8750249, 27.0875895 ], [ 88.8749892, 27.0870898 ], [ 88.8748465, 27.0867686 ], [ 88.8746323, 27.086376 ], [ 88.874668, 27.0860904 ], [ 88.8748108, 27.085448 ], [ 88.875132, 27.0849483 ], [ 88.8753462, 27.0844129 ], [ 88.8752748, 27.0839846 ], [ 88.8750606, 27.083592 ], [ 88.8747394, 27.0833065 ], [ 88.8740969, 27.0827354 ], [ 88.8738828, 27.0823071 ], [ 88.8739185, 27.0814505 ], [ 88.8738828, 27.0801299 ], [ 88.8739185, 27.0789164 ], [ 88.8740969, 27.0775601 ], [ 88.8743468, 27.0767748 ], [ 88.8745609, 27.0763465 ], [ 88.8750963, 27.0757755 ], [ 88.8756674, 27.0754185 ], [ 88.8763098, 27.075133 ], [ 88.8767025, 27.074669 ], [ 88.8769523, 27.0742407 ], [ 88.876988, 27.0738124 ], [ 88.8765954, 27.073277 ], [ 88.8764494, 27.0730779 ], [ 88.8762028, 27.0727417 ], [ 88.8752034, 27.071885 ], [ 88.8749892, 27.0712783 ], [ 88.875132, 27.0706715 ], [ 88.8755246, 27.0698506 ], [ 88.87606, 27.0691368 ], [ 88.8770951, 27.0684229 ], [ 88.8779517, 27.0679232 ], [ 88.87838, 27.0672451 ], [ 88.8791295, 27.0667454 ], [ 88.8795221, 27.0663528 ], [ 88.8798077, 27.0657103 ], [ 88.879879, 27.0651393 ], [ 88.8798433, 27.0646753 ], [ 88.8798077, 27.0641042 ], [ 88.8798433, 27.0635331 ], [ 88.8800218, 27.0629978 ], [ 88.8802717, 27.0625695 ], [ 88.8804501, 27.0622482 ], [ 88.8805929, 27.0618913 ], [ 88.8805215, 27.0614987 ], [ 88.8803787, 27.0613559 ], [ 88.8798433, 27.0609276 ], [ 88.8792009, 27.0603566 ], [ 88.8790938, 27.060071 ], [ 88.8791295, 27.0596784 ], [ 88.8790938, 27.0590717 ], [ 88.8788797, 27.0580009 ], [ 88.8785227, 27.0570729 ], [ 88.8783161, 27.0560856 ], [ 88.8782015, 27.0555382 ], [ 88.8781658, 27.0545745 ], [ 88.8782015, 27.053468 ], [ 88.8782729, 27.0526471 ], [ 88.8783086, 27.051505 ], [ 88.8784514, 27.0509696 ], [ 88.8785941, 27.0504699 ], [ 88.8786655, 27.0497918 ], [ 88.8786655, 27.0494348 ], [ 88.8787726, 27.0491493 ], [ 88.878844, 27.0488638 ], [ 88.8787726, 27.0483641 ], [ 88.8785227, 27.0480428 ], [ 88.8779874, 27.0478287 ], [ 88.8774163, 27.0474004 ], [ 88.876988, 27.0469007 ], [ 88.8764526, 27.0461512 ], [ 88.8762742, 27.0455444 ], [ 88.8762742, 27.0450804 ], [ 88.8764526, 27.0445807 ], [ 88.8768095, 27.0441167 ], [ 88.8770951, 27.0436884 ], [ 88.8771308, 27.0434029 ], [ 88.8768809, 27.0431174 ], [ 88.8765954, 27.0428675 ], [ 88.8763812, 27.0426177 ], [ 88.8763098, 27.0420466 ], [ 88.8764883, 27.0415469 ], [ 88.8767738, 27.04119 ], [ 88.8770951, 27.0408331 ], [ 88.8775591, 27.0406546 ], [ 88.8783086, 27.0404048 ], [ 88.8791295, 27.0401549 ], [ 88.8798077, 27.0400479 ], [ 88.880343, 27.0399765 ], [ 88.8804858, 27.039798 ], [ 88.8806286, 27.0394411 ], [ 88.8807, 27.0391199 ], [ 88.8806643, 27.038763 ], [ 88.8805215, 27.0380848 ], [ 88.8805572, 27.037371 ], [ 88.8806643, 27.0367642 ], [ 88.8807, 27.0363359 ], [ 88.8805215, 27.0358719 ], [ 88.880236, 27.0355507 ], [ 88.8798077, 27.0354079 ], [ 88.8790581, 27.0351581 ], [ 88.8784514, 27.0348368 ], [ 88.8779874, 27.0344442 ], [ 88.8776304, 27.0339089 ], [ 88.8774163, 27.0333021 ], [ 88.8773319, 27.0327284 ], [ 88.8772378, 27.0320886 ], [ 88.8772021, 27.0311963 ], [ 88.8773092, 27.0302326 ], [ 88.8773806, 27.0294831 ], [ 88.8772735, 27.0285194 ], [ 88.8772378, 27.0272345 ], [ 88.8771665, 27.026592 ], [ 88.8768095, 27.0258782 ], [ 88.8766668, 27.0251643 ], [ 88.8766668, 27.0245219 ], [ 88.8767382, 27.023808 ], [ 88.8768809, 27.0231656 ], [ 88.8768452, 27.0228444 ], [ 88.8768452, 27.0222376 ], [ 88.8770237, 27.0214167 ], [ 88.8769523, 27.0208099 ], [ 88.8767382, 27.0204887 ], [ 88.8759172, 27.0203816 ], [ 88.8748108, 27.0203816 ], [ 88.8743825, 27.0201318 ], [ 88.8740256, 27.0196321 ], [ 88.8738471, 27.0187041 ], [ 88.8739185, 27.0179903 ], [ 88.8744182, 27.0173478 ], [ 88.8754532, 27.0164555 ], [ 88.8756317, 27.0158844 ], [ 88.8756763, 27.0152606 ], [ 88.8757031, 27.0148851 ], [ 88.8755603, 27.0137429 ], [ 88.8752391, 27.0127435 ], [ 88.8745966, 27.0117799 ], [ 88.8737757, 27.0108519 ], [ 88.8733117, 27.0089602 ], [ 88.873169, 27.0074611 ], [ 88.873276, 27.0055338 ], [ 88.8732403, 27.0038206 ], [ 88.873169, 27.0025 ], [ 88.8727763, 27.000644 ], [ 88.8718841, 26.9981456 ], [ 88.8704564, 26.9963253 ], [ 88.8702065, 26.9953616 ], [ 88.8702422, 26.9947905 ], [ 88.8710988, 26.9921136 ], [ 88.8721696, 26.9902219 ], [ 88.872705, 26.9895438 ], [ 88.8735259, 26.9887586 ], [ 88.8740613, 26.9875094 ], [ 88.874204, 26.9864029 ], [ 88.873904, 26.9839013 ], [ 88.8730112, 26.9775619 ], [ 88.8723862, 26.9702403 ], [ 88.872628, 26.964686 ], [ 88.8723862, 26.9630081 ], [ 88.8733683, 26.957383 ], [ 88.8746183, 26.9541686 ], [ 88.8759576, 26.9525614 ], [ 88.8771184, 26.9518471 ], [ 88.881047, 26.9524722 ], [ 88.8853328, 26.9572937 ], [ 88.892711, 26.9615391 ], [ 88.8986597, 26.9686775 ], [ 88.9069878, 26.9789091 ], [ 88.9116726, 26.9847942 ], [ 88.9164941, 26.9894371 ], [ 88.9201549, 26.9914907 ], [ 88.921972, 26.9931848 ], [ 88.9467625, 26.9748833 ], [ 88.9506911, 26.9716689 ], [ 88.9520304, 26.9697046 ], [ 88.9521112, 26.9689773 ], [ 88.9522983, 26.9672939 ], [ 88.9518519, 26.9665796 ], [ 88.9518519, 26.9662883 ], [ 88.9518519, 26.9659545 ], [ 88.9521197, 26.9654188 ], [ 88.9522983, 26.9647938 ], [ 88.9522983, 26.9646149 ], [ 88.9522983, 26.9641688 ], [ 88.9520304, 26.9639902 ], [ 88.9517626, 26.9636331 ], [ 88.951584, 26.9630081 ], [ 88.9517626, 26.9627402 ], [ 88.9519925, 26.9625103 ], [ 88.9522983, 26.9622045 ], [ 88.9529461, 26.9618806 ], [ 88.9531912, 26.961758 ], [ 88.953459, 26.9605973 ], [ 88.9535483, 26.9597937 ], [ 88.9536376, 26.959258 ], [ 88.9539948, 26.9584544 ], [ 88.954084, 26.9577401 ], [ 88.9538162, 26.9572937 ], [ 88.9535483, 26.9564901 ], [ 88.953459, 26.9558651 ], [ 88.9539055, 26.9534543 ], [ 88.954084, 26.9528293 ], [ 88.9538162, 26.9523829 ], [ 88.9532805, 26.9519364 ], [ 88.9529233, 26.9514007 ], [ 88.9529233, 26.9509543 ], [ 88.9532805, 26.9505078 ], [ 88.9536376, 26.9497043 ], [ 88.953459, 26.9492578 ], [ 88.9533697, 26.9489007 ], [ 88.9532805, 26.9481864 ], [ 88.9529233, 26.9473828 ], [ 88.9523876, 26.9460435 ], [ 88.9516733, 26.945597 ], [ 88.9513161, 26.9452399 ], [ 88.9507568, 26.944331 ], [ 88.9506018, 26.9440791 ], [ 88.9504233, 26.9433649 ], [ 88.9495304, 26.9427398 ], [ 88.949084, 26.9422934 ], [ 88.9487268, 26.9407755 ], [ 88.9479232, 26.9396148 ], [ 88.9472214, 26.938046 ], [ 88.9464053, 26.9362219 ], [ 88.9453339, 26.9347933 ], [ 88.945066, 26.9329182 ], [ 88.946614, 26.9321672 ], [ 88.947782, 26.9314998 ], [ 88.970873, 26.9205175 ], [ 88.979321, 26.9185463 ], [ 88.9863609, 26.9196727 ], [ 88.993964, 26.923615 ], [ 88.9984696, 26.9281206 ], [ 89.0038199, 26.9303734 ], [ 89.0097335, 26.9334709 ], [ 89.0139574, 26.9379765 ], [ 89.0162102, 26.9382581 ], [ 89.0193078, 26.9326262 ], [ 89.0221238, 26.9284022 ], [ 89.0266293, 26.9247414 ], [ 89.0328245, 26.9238966 ], [ 89.0418535, 26.9264003 ], [ 89.0447586, 26.92204 ], [ 89.0492796, 26.9160914 ], [ 89.0499934, 26.9106186 ], [ 89.0489072, 26.9047034 ], [ 89.0467643, 26.898364 ], [ 89.0526108, 26.900149 ], [ 89.0561971, 26.9002424 ], [ 89.0621106, 26.9013688 ], [ 89.0677468, 26.9032748 ], [ 89.0701576, 26.9040784 ], [ 89.0756978, 26.897794 ], [ 89.0956044, 26.8909532 ], [ 89.0947116, 26.8865781 ], [ 89.0924794, 26.880328 ], [ 89.0923901, 26.8783637 ], [ 89.093283, 26.8728279 ], [ 89.092658, 26.8715778 ], [ 89.1042316, 26.8636867 ], [ 89.103787, 26.861382 ], [ 89.1035054, 26.8591292 ], [ 89.1018158, 26.8503997 ], [ 89.1012526, 26.8391358 ], [ 89.1020974, 26.8357566 ], [ 89.1057582, 26.8323775 ], [ 89.1099822, 26.8278719 ], [ 89.1139245, 26.8256191 ], [ 89.1204013, 26.8236479 ], [ 89.1246252, 26.82224 ], [ 89.126878, 26.819424 ], [ 89.131102, 26.8121025 ], [ 89.1353259, 26.8112577 ], [ 89.1412395, 26.8118209 ], [ 89.1575721, 26.8154816 ], [ 89.1767208, 26.8211136 ], [ 89.1803815, 26.8211136 ], [ 89.1829159, 26.8199872 ], [ 89.1888294, 26.8157632 ], [ 89.1924902, 26.8135104 ], [ 89.1943659, 26.813799 ], [ 89.196151, 26.8140736 ], [ 89.2037541, 26.8177344 ], [ 89.212202, 26.8199872 ], [ 89.2214947, 26.8216768 ], [ 89.2310691, 26.8216768 ], [ 89.2417698, 26.819424 ], [ 89.2581024, 26.8154816 ], [ 89.2623264, 26.8154816 ], [ 89.2651423, 26.8177344 ], [ 89.2692328, 26.823125 ], [ 89.2742297, 26.8285977 ], [ 89.2755615, 26.8295615 ], [ 89.2811934, 26.8304063 ], [ 89.2854174, 26.8326591 ], [ 89.2927389, 26.8380094 ], [ 89.304566, 26.8442046 ], [ 89.3118875, 26.8473021 ], [ 89.3175195, 26.8515261 ], [ 89.3211802, 26.8515261 ], [ 89.3242778, 26.8506813 ], [ 89.3239962, 26.8470205 ], [ 89.3254042, 26.845331 ], [ 89.3265306, 26.845331 ], [ 89.3301914, 26.8461757 ], [ 89.3621162, 26.8568644 ], [ 89.370894, 26.8598876 ], [ 89.5053937, 26.8083637 ], [ 89.5075066, 26.8107622 ], [ 89.5089707, 26.8110901 ], [ 89.5090268, 26.8117639 ], [ 89.5103744, 26.8119885 ], [ 89.5113851, 26.8128307 ], [ 89.5126204, 26.8130834 ], [ 89.5161017, 26.8130272 ], [ 89.5168878, 26.8127184 ], [ 89.5178704, 26.8117919 ], [ 89.5193022, 26.8112866 ], [ 89.519583, 26.8117077 ], [ 89.5197795, 26.812943 ], [ 89.5200041, 26.8131395 ], [ 89.5211271, 26.8130834 ], [ 89.5233169, 26.8133922 ], [ 89.5257033, 26.8128588 ], [ 89.5263771, 26.8124657 ], [ 89.5283507, 26.8124754 ], [ 89.5286362, 26.8125896 ], [ 89.5293215, 26.8134462 ], [ 89.5297213, 26.8136175 ], [ 89.530635, 26.8137317 ], [ 89.5316629, 26.8137888 ], [ 89.5322911, 26.8141315 ], [ 89.532748, 26.8144741 ], [ 89.5334332, 26.814417 ], [ 89.5342898, 26.8141315 ], [ 89.5352036, 26.8137317 ], [ 89.5358317, 26.8132178 ], [ 89.5364028, 26.8127038 ], [ 89.537545, 26.8127038 ], [ 89.5382873, 26.8128751 ], [ 89.5396579, 26.8127609 ], [ 89.5410285, 26.8123612 ], [ 89.542913, 26.811733 ], [ 89.5458893, 26.8105729 ], [ 89.5492742, 26.8115393 ], [ 89.5534981, 26.8129472 ], [ 89.5571589, 26.8135104 ], [ 89.5594117, 26.8126656 ], [ 89.5615673, 26.8112939 ], [ 89.5625092, 26.8106945 ], [ 89.5622276, 26.8098497 ], [ 89.5623523, 26.8093509 ], [ 89.563354, 26.8053441 ], [ 89.5664516, 26.7999938 ], [ 89.5692676, 26.7983042 ], [ 89.5748995, 26.7968962 ], [ 89.5833474, 26.794925 ], [ 89.5870082, 26.7929538 ], [ 89.5898242, 26.792109 ], [ 89.5957377, 26.7918274 ], [ 89.5996801, 26.7890115 ], [ 89.6024961, 26.7870403 ], [ 89.6072832, 26.7870403 ], [ 89.6193919, 26.7814083 ], [ 89.6224895, 26.7811267 ], [ 89.6306558, 26.7836611 ], [ 89.6334718, 26.7828163 ], [ 89.6385405, 26.7794372 ], [ 89.6419197, 26.777466 ], [ 89.6447357, 26.7771844 ], [ 89.6467069, 26.7754948 ], [ 89.6492412, 26.7707076 ], [ 89.6481148, 26.7662021 ], [ 89.6452397, 26.7623514 ], [ 89.643269, 26.7562553 ], [ 89.6417449, 26.7532861 ], [ 89.6373305, 26.746901 ], [ 89.6370678, 26.7467959 ], [ 89.6365422, 26.7464017 ], [ 89.6362532, 26.7458762 ], [ 89.6342825, 26.7455083 ], [ 89.6316549, 26.7440106 ], [ 89.626242, 26.7418822 ], [ 89.6253486, 26.7412253 ], [ 89.6249281, 26.7398852 ], [ 89.6235618, 26.7397013 ], [ 89.6216436, 26.7384137 ], [ 89.6215648, 26.737389 ], [ 89.6216173, 26.7362328 ], [ 89.6213283, 26.7352606 ], [ 89.6213808, 26.7340519 ], [ 89.6196466, 26.7327118 ], [ 89.6190685, 26.7325016 ], [ 89.619016, 26.7320549 ], [ 89.6185956, 26.7310827 ], [ 89.6179387, 26.7302155 ], [ 89.6179649, 26.7290857 ], [ 89.6176759, 26.728166 ], [ 89.6210926, 26.7259582 ], [ 89.6231484, 26.724245 ], [ 89.6241791, 26.7236809 ], [ 89.6254327, 26.7228744 ], [ 89.6315432, 26.7252158 ], [ 89.6328566, 26.7255013 ], [ 89.6339417, 26.7257297 ], [ 89.635198, 26.7259011 ], [ 89.6363402, 26.7255584 ], [ 89.6372539, 26.7247589 ], [ 89.6381676, 26.7239594 ], [ 89.6387387, 26.7235026 ], [ 89.6397095, 26.7229315 ], [ 89.6410229, 26.7228173 ], [ 89.6451347, 26.7228173 ], [ 89.6459913, 26.7225317 ], [ 89.6471905, 26.7219036 ], [ 89.6481613, 26.721047 ], [ 89.6486182, 26.720533 ], [ 89.6488466, 26.7195051 ], [ 89.6490179, 26.7175063 ], [ 89.652273, 26.7179632 ], [ 89.6545002, 26.7179632 ], [ 89.6563276, 26.7181916 ], [ 89.6577553, 26.7185914 ], [ 89.6590688, 26.7196764 ], [ 89.6606107, 26.722132 ], [ 89.6614673, 26.7238452 ], [ 89.6626094, 26.7251016 ], [ 89.6631805, 26.7261295 ], [ 89.6644368, 26.7271574 ], [ 89.6656932, 26.7282996 ], [ 89.6676348, 26.730127 ], [ 89.6690054, 26.731726 ], [ 89.6695194, 26.7332108 ], [ 89.6698049, 26.7364659 ], [ 89.6699191, 26.7384075 ], [ 89.6702047, 26.7395497 ], [ 89.6705473, 26.7398923 ], [ 89.6747161, 26.7400636 ], [ 89.6771146, 26.7398352 ], [ 89.6788278, 26.7393783 ], [ 89.6812263, 26.7379507 ], [ 89.6835106, 26.736523 ], [ 89.6859091, 26.7355522 ], [ 89.6887645, 26.7345242 ], [ 89.6904777, 26.7342387 ], [ 89.6953318, 26.736523 ], [ 89.6978445, 26.7371512 ], [ 89.6988153, 26.7375509 ], [ 89.6996719, 26.7370369 ], [ 89.7005285, 26.7357806 ], [ 89.7011567, 26.7348098 ], [ 89.7030412, 26.7338961 ], [ 89.7051542, 26.733325 ], [ 89.7070387, 26.7327539 ], [ 89.7085235, 26.7318973 ], [ 89.7102367, 26.7314976 ], [ 89.7124639, 26.7309265 ], [ 89.7142913, 26.7306981 ], [ 89.7166327, 26.7300128 ], [ 89.7180604, 26.7295559 ], [ 89.7186886, 26.7286422 ], [ 89.7190312, 26.7277856 ], [ 89.7197165, 26.7268719 ], [ 89.720516, 26.7261295 ], [ 89.7217723, 26.7255584 ], [ 89.7233142, 26.7245305 ], [ 89.7239995, 26.7241879 ], [ 89.7257698, 26.7233884 ], [ 89.727997, 26.7235597 ], [ 89.7302813, 26.7246447 ], [ 89.7307381, 26.7247018 ], [ 89.7313092, 26.7243592 ], [ 89.7323371, 26.7246447 ], [ 89.7330224, 26.7250445 ], [ 89.7335364, 26.7255584 ], [ 89.7338219, 26.7261866 ], [ 89.7341075, 26.7267577 ], [ 89.7348499, 26.726929 ], [ 89.735992, 26.7270432 ], [ 89.7367344, 26.7272716 ], [ 89.7373055, 26.7280711 ], [ 89.7377623, 26.7283567 ], [ 89.7385047, 26.7284709 ], [ 89.7393042, 26.729042 ], [ 89.7398182, 26.7293275 ], [ 89.7410745, 26.7294417 ], [ 89.7438728, 26.729613 ], [ 89.7452433, 26.7299557 ], [ 89.7464997, 26.7306981 ], [ 89.74827, 26.7319544 ], [ 89.7504972, 26.7338389 ], [ 89.7516393, 26.734924 ], [ 89.7535239, 26.7342387 ], [ 89.754666, 26.7333821 ], [ 89.7554655, 26.7324684 ], [ 89.7562079, 26.731212 ], [ 89.756779, 26.730127 ], [ 89.7574643, 26.7285851 ], [ 89.7579211, 26.7263008 ], [ 89.7579211, 26.7244734 ], [ 89.7576356, 26.7211612 ], [ 89.7572929, 26.7184771 ], [ 89.7578346, 26.7163654 ], [ 89.7670918, 26.7109341 ], [ 89.768219, 26.7093628 ], [ 89.7687314, 26.7078939 ], [ 89.769278, 26.7048538 ], [ 89.7696195, 26.7039315 ], [ 89.770625, 26.7027013 ], [ 89.7708535, 26.702016 ], [ 89.8107142, 26.7111532 ], [ 89.8625674, 26.70253 ], [ 89.8624532, 26.7064704 ], [ 89.8626245, 26.7106392 ], [ 89.8630814, 26.7137801 ], [ 89.8637096, 26.7170352 ], [ 89.8638809, 26.7197192 ], [ 89.8630814, 26.7231456 ], [ 89.8623961, 26.7253728 ], [ 89.8614253, 26.7280569 ], [ 89.8610255, 26.7297701 ], [ 89.8608542, 26.7321686 ], [ 89.8603404, 26.7350824 ], [ 89.8605957, 26.7366285 ], [ 89.8649555, 26.735659 ], [ 89.9021157, 26.7228361 ], [ 89.9685727, 26.7219913 ], [ 89.9966368, 26.7279344 ], [ 90.0164443, 26.7321288 ], [ 90.0449532, 26.7298078 ], [ 90.0735158, 26.7360978 ], [ 90.1216701, 26.7490386 ], [ 90.1906371, 26.7679982 ], [ 90.1899745, 26.7714949 ], [ 90.1904799, 26.773348 ], [ 90.1923331, 26.7750327 ], [ 90.1940739, 26.7774474 ], [ 90.1942423, 26.7780089 ], [ 90.1942423, 26.7798059 ], [ 90.1950285, 26.7807606 ], [ 90.195197, 26.7811536 ], [ 90.195197, 26.7813221 ], [ 90.1930631, 26.7836245 ], [ 90.1925015, 26.7844668 ], [ 90.1923047, 26.7852315 ], [ 90.1914907, 26.7862076 ], [ 90.1909292, 26.78705 ], [ 90.1853698, 26.789577 ], [ 90.1836851, 26.7992918 ], [ 90.1918277, 26.8159138 ], [ 90.2004194, 26.8350067 ], [ 90.2197576, 26.8495549 ], [ 90.2478708, 26.8597712 ], [ 90.302173, 26.8498879 ], [ 90.3438965, 26.8731362 ], [ 90.3453565, 26.8756632 ], [ 90.3464796, 26.8777971 ], [ 90.3474904, 26.8796502 ], [ 90.3474904, 26.8810541 ], [ 90.3477712, 26.8823457 ], [ 90.3474343, 26.8836934 ], [ 90.3473781, 26.8874558 ], [ 90.348052, 26.8879051 ], [ 90.3518706, 26.8922852 ], [ 90.3529375, 26.8946437 ], [ 90.3533868, 26.8964968 ], [ 90.3550153, 26.898013 ], [ 90.3551837, 26.8989115 ], [ 90.3546783, 26.90127 ], [ 90.4178532, 26.9046394 ], [ 90.4308251, 26.8957107 ], [ 90.4835352, 26.8596683 ], [ 90.4953476, 26.8523025 ], [ 90.5264577, 26.8307389 ], [ 90.5399524, 26.820291 ], [ 90.5465613, 26.8165877 ], [ 90.5857578, 26.8035035 ], [ 90.6338268, 26.7948556 ], [ 90.6462372, 26.7781774 ], [ 90.6786945, 26.785848 ], [ 90.6996971, 26.769361 ], [ 90.7252656, 26.7686589 ], [ 90.7423558, 26.7743982 ], [ 90.8221725, 26.7763569 ], [ 90.962346, 26.7885299 ], [ 90.9578986, 26.7843387 ], [ 90.9571687, 26.782587 ], [ 90.9580383, 26.7827767 ], [ 90.9955263, 26.7906932 ], [ 91.0104723, 26.7883451 ], [ 91.0555972, 26.7812553 ], [ 91.1015113, 26.8241085 ], [ 91.1492109, 26.8125024 ], [ 91.1818609, 26.8149256 ], [ 91.2395086, 26.8140329 ], [ 91.2829994, 26.8008963 ], [ 91.2952212, 26.7943297 ], [ 91.3049361, 26.7890352 ], [ 91.3414123, 26.7822756 ], [ 91.3802206, 26.7943618 ], [ 91.4143647, 26.840561 ], [ 91.4377044, 26.8237258 ], [ 91.4680587, 26.8049776 ], [ 91.4978718, 26.7928296 ], [ 91.4997217, 26.7920729 ], [ 91.5008671, 26.7921763 ], [ 91.5013733, 26.7924528 ], [ 91.5016546, 26.7927585 ], [ 91.50185, 26.7927115 ], [ 91.5022516, 26.7926224 ], [ 91.5022928, 26.7926218 ], [ 91.5029561, 26.7926113 ], [ 91.5030901, 26.792607 ], [ 91.5036535, 26.792729 ], [ 91.5037981, 26.792762 ], [ 91.5039947, 26.7928359 ], [ 91.5043484, 26.792893 ], [ 91.5044436, 26.7929029 ], [ 91.5047604, 26.7929525 ], [ 91.5050145, 26.7929895 ], [ 91.506217, 26.7932037 ], [ 91.5064121, 26.7932728 ], [ 91.5065442, 26.7933308 ], [ 91.5070486, 26.7934843 ], [ 91.5084845, 26.7936663 ], [ 91.5087535, 26.7935882 ], [ 91.5094745, 26.7933816 ], [ 91.5098447, 26.7932755 ], [ 91.5646058, 26.801534 ], [ 91.5927919, 26.8057428 ], [ 91.607653, 26.8123924 ], [ 91.6304159, 26.822578 ], [ 91.6953334, 26.8090588 ], [ 91.7107967, 26.8154081 ], [ 91.7242847, 26.8139053 ], [ 91.7712191, 26.8375001 ], [ 91.8247855, 26.8639007 ], [ 91.8593486, 26.9133858 ], [ 91.8782244, 26.9158091 ], [ 91.8937842, 26.9196352 ], [ 91.9712004, 26.8841794 ], [ 91.9737512, 26.8728284 ], [ 91.9870631, 26.8608188 ], [ 92.0187725, 26.8533149 ], [ 92.0565241, 26.8496163 ], [ 92.1036444, 26.8692667 ], [ 92.1046063, 26.8872403 ], [ 92.1157063, 26.8937385 ], [ 92.1183187, 26.905398 ], [ 92.1186393, 26.9064655 ], [ 92.1189963, 26.9074292 ], [ 92.119139, 26.9080003 ], [ 92.1189249, 26.9085356 ], [ 92.1185323, 26.9089996 ], [ 92.1183181, 26.9094993 ], [ 92.1183399, 26.9100837 ], [ 92.1184427, 26.910649 ], [ 92.1186482, 26.9115739 ], [ 92.1186739, 26.9118308 ], [ 92.1184941, 26.9122162 ], [ 92.1182115, 26.9124988 ], [ 92.1175692, 26.913064 ], [ 92.1162332, 26.9141945 ], [ 92.1147687, 26.9159159 ], [ 92.1142805, 26.9164811 ], [ 92.115411, 26.9194614 ], [ 92.1155908, 26.9205662 ], [ 92.1155652, 26.9213627 ], [ 92.1155138, 26.9220564 ], [ 92.1153853, 26.9231097 ], [ 92.1155395, 26.9238291 ], [ 92.1158221, 26.9250624 ], [ 92.1163102, 26.9263213 ], [ 92.1167984, 26.9284024 ], [ 92.1168498, 26.9291731 ], [ 92.1164387, 26.9298411 ], [ 92.1160533, 26.930355 ], [ 92.1156679, 26.9310487 ], [ 92.1151541, 26.9321534 ], [ 92.1148201, 26.9333096 ], [ 92.1148972, 26.9339262 ], [ 92.1151541, 26.9344658 ], [ 92.1153596, 26.9349796 ], [ 92.1156165, 26.9355191 ], [ 92.1157707, 26.9361101 ], [ 92.1161561, 26.9364441 ], [ 92.1168755, 26.9367781 ], [ 92.1176205, 26.937035 ], [ 92.1178518, 26.9372662 ], [ 92.1179802, 26.9378571 ], [ 92.1180573, 26.9382168 ], [ 92.118083, 26.9385251 ], [ 92.1178775, 26.9390133 ], [ 92.1179289, 26.9392959 ], [ 92.1180573, 26.9399125 ], [ 92.1181087, 26.9407347 ], [ 92.1181601, 26.9411715 ], [ 92.1182885, 26.9416596 ], [ 92.1185198, 26.9422762 ], [ 92.1183656, 26.9425845 ], [ 92.1181087, 26.9428928 ], [ 92.1176976, 26.9431241 ], [ 92.1172352, 26.9436379 ], [ 92.1167984, 26.9440747 ], [ 92.1162332, 26.9444344 ], [ 92.1157193, 26.9446656 ], [ 92.1148201, 26.9448711 ], [ 92.1144861, 26.9454878 ], [ 92.1139722, 26.9461044 ], [ 92.1142548, 26.9464384 ], [ 92.1145118, 26.9467981 ], [ 92.1149485, 26.9473633 ], [ 92.1146916, 26.9478772 ], [ 92.114409, 26.9483653 ], [ 92.1140236, 26.9487764 ], [ 92.1138181, 26.9492902 ], [ 92.1137153, 26.9498041 ], [ 92.1134327, 26.9502408 ], [ 92.1127904, 26.9509088 ], [ 92.1129959, 26.9513713 ], [ 92.1133042, 26.951731 ], [ 92.1136896, 26.9521935 ], [ 92.1140493, 26.9526045 ], [ 92.114409, 26.9531441 ], [ 92.1147173, 26.9537864 ], [ 92.115077, 26.9538892 ], [ 92.1158478, 26.9539662 ], [ 92.116747, 26.9542232 ], [ 92.1171067, 26.954403 ], [ 92.1173636, 26.9546085 ], [ 92.1174921, 26.9548655 ], [ 92.1175435, 26.9553536 ], [ 92.1176462, 26.9561501 ], [ 92.1179802, 26.9573319 ], [ 92.1181601, 26.9579229 ], [ 92.1182629, 26.9588221 ], [ 92.1185712, 26.9590533 ], [ 92.1193162, 26.959413 ], [ 92.1201898, 26.9598241 ], [ 92.1213459, 26.9606719 ], [ 92.1209605, 26.9614427 ], [ 92.1206522, 26.9623419 ], [ 92.1203953, 26.9631127 ], [ 92.1198558, 26.9639606 ], [ 92.1195989, 26.964757 ], [ 92.1195732, 26.9659646 ], [ 92.1196759, 26.9674804 ], [ 92.1198815, 26.9690476 ], [ 92.120087, 26.970435 ], [ 92.1199585, 26.9715912 ], [ 92.1195989, 26.9721307 ], [ 92.1188795, 26.9729529 ], [ 92.118417, 26.9732612 ], [ 92.1175949, 26.9736466 ], [ 92.1171581, 26.9741347 ], [ 92.1167984, 26.9748284 ], [ 92.1163102, 26.9755221 ], [ 92.1153339, 26.9762929 ], [ 92.1145118, 26.9760873 ], [ 92.113741, 26.9759075 ], [ 92.1132272, 26.9758818 ], [ 92.112739, 26.9759589 ], [ 92.1120453, 26.9762415 ], [ 92.1109148, 26.9765755 ], [ 92.1099128, 26.977038 ], [ 92.108731, 26.9778601 ], [ 92.1075491, 26.978708 ], [ 92.1064187, 26.9795815 ], [ 92.1052625, 26.980378 ], [ 92.1051084, 26.9808661 ], [ 92.1049285, 26.9816112 ], [ 92.1047744, 26.9824847 ], [ 92.1046973, 26.9838978 ], [ 92.1046716, 26.9871607 ], [ 92.105057, 26.9873149 ], [ 92.1055451, 26.9876489 ], [ 92.1066242, 26.9883426 ], [ 92.1076519, 26.989062 ], [ 92.1073179, 26.9900126 ], [ 92.1069325, 26.9910146 ], [ 92.1065985, 26.9919909 ], [ 92.106393, 26.9927617 ], [ 92.1062388, 26.9933269 ], [ 92.1059819, 26.993738 ], [ 92.1054938, 26.9942004 ], [ 92.1051855, 26.9948427 ], [ 92.105057, 26.9955107 ], [ 92.1050056, 26.9961274 ], [ 92.1048771, 26.9967697 ], [ 92.1044661, 26.9975918 ], [ 92.1041064, 26.9983883 ], [ 92.1038238, 26.999082 ], [ 92.1037724, 27.0001097 ], [ 92.1037981, 27.0008291 ], [ 92.103721, 27.0014457 ], [ 92.1034898, 27.0020109 ], [ 92.1034127, 27.002422 ], [ 92.103387, 27.0040149 ], [ 92.1029759, 27.0043232 ], [ 92.1025134, 27.0046829 ], [ 92.1019482, 27.0051711 ], [ 92.101049, 27.0057877 ], [ 92.100047, 27.0065071 ], [ 92.0993276, 27.0069952 ], [ 92.0986853, 27.0076632 ], [ 92.0980687, 27.0081 ], [ 92.0972979, 27.0085111 ], [ 92.0965014, 27.0086909 ], [ 92.0955765, 27.009102 ], [ 92.0949856, 27.0095645 ], [ 92.0948314, 27.0099498 ], [ 92.0948571, 27.0103866 ], [ 92.0950627, 27.0108748 ], [ 92.0953967, 27.0114914 ], [ 92.094369, 27.0119795 ], [ 92.0935725, 27.0125962 ], [ 92.0928788, 27.0129815 ], [ 92.0922108, 27.0132128 ], [ 92.091363, 27.0133926 ], [ 92.090438, 27.0135725 ], [ 92.0895645, 27.0136495 ], [ 92.088768, 27.0138551 ], [ 92.0881, 27.0141377 ], [ 92.0875348, 27.0142662 ], [ 92.0869439, 27.0144974 ], [ 92.0866099, 27.0149598 ], [ 92.0861474, 27.0153709 ], [ 92.0856593, 27.0156022 ], [ 92.0849656, 27.0156022 ], [ 92.083758, 27.0156279 ], [ 92.0831157, 27.0158591 ], [ 92.0824734, 27.0161674 ], [ 92.0819082, 27.0164243 ], [ 92.0813687, 27.0166042 ], [ 92.0809062, 27.0167069 ], [ 92.0801868, 27.0171437 ], [ 92.0795445, 27.0173492 ], [ 92.0787223, 27.0176575 ], [ 92.0779516, 27.0179659 ], [ 92.0780286, 27.0186852 ], [ 92.0781057, 27.0190706 ], [ 92.0786967, 27.0202268 ], [ 92.0785939, 27.0208434 ], [ 92.0784397, 27.0213315 ], [ 92.0782599, 27.0217169 ], [ 92.0777974, 27.0222822 ], [ 92.0776176, 27.0225648 ], [ 92.0776946, 27.022796 ], [ 92.0781571, 27.0230529 ], [ 92.0783627, 27.0234383 ], [ 92.0784397, 27.0238237 ], [ 92.0785425, 27.024466 ], [ 92.0784654, 27.0248257 ], [ 92.0778231, 27.0253652 ], [ 92.0779259, 27.0258534 ], [ 92.0779516, 27.0262645 ], [ 92.0779516, 27.0268811 ], [ 92.0780286, 27.0274206 ], [ 92.0782856, 27.02814 ], [ 92.0785682, 27.0289879 ], [ 92.0789536, 27.0295788 ], [ 92.0794674, 27.0300413 ], [ 92.0799299, 27.0308634 ], [ 92.0802639, 27.0316342 ], [ 92.0805979, 27.0322508 ], [ 92.0811631, 27.0328674 ], [ 92.081754, 27.0333556 ], [ 92.0824477, 27.0337923 ], [ 92.0824477, 27.0345374 ], [ 92.0824991, 27.0352825 ], [ 92.082422, 27.0369011 ], [ 92.0822422, 27.0374663 ], [ 92.0819853, 27.0378774 ], [ 92.0819853, 27.0383399 ], [ 92.0821137, 27.0389308 ], [ 92.0821137, 27.0394446 ], [ 92.0820367, 27.03983 ], [ 92.0817027, 27.0405751 ], [ 92.080675, 27.0407293 ], [ 92.0796987, 27.0408834 ], [ 92.078748, 27.0409605 ], [ 92.0779773, 27.0409862 ], [ 92.0768982, 27.0408834 ], [ 92.076667, 27.0411147 ], [ 92.0763586, 27.0413716 ], [ 92.0758448, 27.0416285 ], [ 92.075331, 27.0417056 ], [ 92.0749199, 27.0419368 ], [ 92.0745088, 27.0424507 ], [ 92.0739693, 27.0429131 ], [ 92.0732242, 27.0432728 ], [ 92.072325, 27.0437353 ], [ 92.0714257, 27.0426305 ], [ 92.0711688, 27.0426819 ], [ 92.0708862, 27.0427333 ], [ 92.0703466, 27.043093 ], [ 92.0696016, 27.0435811 ], [ 92.0691391, 27.0440436 ], [ 92.068728, 27.0446088 ], [ 92.0682913, 27.0450199 ], [ 92.0675462, 27.0454053 ], [ 92.0666726, 27.0457136 ], [ 92.0659019, 27.0462788 ], [ 92.0648228, 27.047101 ], [ 92.0640777, 27.047512 ], [ 92.063384, 27.0476919 ], [ 92.0627674, 27.0477176 ], [ 92.0619709, 27.0476662 ], [ 92.0612516, 27.0476662 ], [ 92.060712, 27.0480259 ], [ 92.0599156, 27.048771 ], [ 92.0588365, 27.0493362 ], [ 92.0578345, 27.0500042 ], [ 92.0569352, 27.0503639 ], [ 92.0560617, 27.0506465 ], [ 92.0545715, 27.0511347 ], [ 92.0533897, 27.0515971 ], [ 92.052362, 27.0518027 ], [ 92.051694, 27.0517256 ], [ 92.0510003, 27.0513916 ], [ 92.0499212, 27.0505951 ], [ 92.048354, 27.0510833 ], [ 92.0473777, 27.051443 ], [ 92.0462215, 27.0516742 ], [ 92.0447057, 27.0519825 ], [ 92.0446543, 27.0522137 ], [ 92.0445258, 27.0531387 ], [ 92.0443974, 27.0536782 ], [ 92.0442175, 27.0543205 ], [ 92.0439092, 27.0550142 ], [ 92.0435752, 27.0557593 ], [ 92.0431898, 27.0563759 ], [ 92.0425218, 27.0568127 ], [ 92.0419309, 27.0575321 ], [ 92.0413143, 27.0585597 ], [ 92.0408005, 27.0590222 ], [ 92.0401581, 27.0592791 ], [ 92.0394388, 27.0598187 ], [ 92.0387708, 27.0603325 ], [ 92.0382312, 27.0610262 ], [ 92.0377431, 27.0619511 ], [ 92.0372806, 27.0626448 ], [ 92.0365612, 27.0633899 ], [ 92.0367924, 27.0643919 ], [ 92.0368695, 27.065137 ], [ 92.0370237, 27.0658564 ], [ 92.0371521, 27.0664987 ], [ 92.037332, 27.0669868 ], [ 92.0375632, 27.0673722 ], [ 92.0380514, 27.0679631 ], [ 92.0382055, 27.0686568 ], [ 92.0381284, 27.0693762 ], [ 92.0375375, 27.0700185 ], [ 92.0371778, 27.0704039 ], [ 92.0368438, 27.0712004 ], [ 92.0359189, 27.0723565 ], [ 92.0355335, 27.0724336 ], [ 92.0351481, 27.0729218 ], [ 92.0346857, 27.0734356 ], [ 92.0341204, 27.0740779 ], [ 92.0335809, 27.0747973 ], [ 92.0326046, 27.0761076 ], [ 92.0322192, 27.0765701 ], [ 92.0320137, 27.077161 ], [ 92.0318595, 27.0779061 ], [ 92.0318081, 27.0785741 ], [ 92.0318081, 27.0791136 ], [ 92.0317567, 27.0793705 ], [ 92.0314484, 27.0797302 ], [ 92.0311915, 27.0800385 ], [ 92.0311658, 27.0805781 ], [ 92.0312172, 27.0813232 ], [ 92.0311915, 27.0817599 ], [ 92.0311658, 27.0822481 ], [ 92.0312686, 27.0826592 ], [ 92.0314998, 27.0830702 ], [ 92.0315769, 27.0835327 ], [ 92.0314998, 27.0839181 ], [ 92.0312429, 27.0844062 ], [ 92.0312686, 27.0848687 ], [ 92.0314227, 27.0855367 ], [ 92.0315255, 27.0867699 ], [ 92.0316797, 27.0878747 ], [ 92.0318338, 27.0892107 ], [ 92.0319366, 27.0899815 ], [ 92.0319366, 27.0904182 ], [ 92.0318338, 27.0907779 ], [ 92.0316797, 27.0913432 ], [ 92.0314998, 27.0920369 ], [ 92.0314741, 27.0926278 ], [ 92.0307547, 27.0933986 ], [ 92.0302152, 27.0939381 ], [ 92.0297784, 27.0944776 ], [ 92.0293931, 27.0950686 ], [ 92.0288535, 27.0958136 ], [ 92.028648, 27.0962504 ], [ 92.0286737, 27.0964816 ], [ 92.0289306, 27.096867 ], [ 92.0292389, 27.0973552 ], [ 92.0294444, 27.0977406 ], [ 92.0295472, 27.098126 ], [ 92.0296757, 27.098537 ], [ 92.0298041, 27.0989224 ], [ 92.0300097, 27.0993849 ], [ 92.0302923, 27.099873 ], [ 92.0294958, 27.1002327 ], [ 92.0287764, 27.1006438 ], [ 92.0282112, 27.101209 ], [ 92.0277487, 27.1016201 ], [ 92.0275175, 27.1020312 ], [ 92.027312, 27.1026478 ], [ 92.0271321, 27.103136 ], [ 92.0266183, 27.103804 ], [ 92.02631, 27.104215 ], [ 92.0257447, 27.1046775 ], [ 92.0251024, 27.1051913 ], [ 92.0246657, 27.1058593 ], [ 92.0245115, 27.1063989 ], [ 92.024383, 27.1070926 ], [ 92.0241775, 27.107478 ], [ 92.0238692, 27.1079147 ], [ 92.0234067, 27.1084029 ], [ 92.0232269, 27.1095334 ], [ 92.0230984, 27.1102014 ], [ 92.0231755, 27.1106124 ], [ 92.0235352, 27.1112034 ], [ 92.0237407, 27.1117429 ], [ 92.0238949, 27.1122054 ], [ 92.0243574, 27.1126678 ], [ 92.0244344, 27.1130018 ], [ 92.02464, 27.1135927 ], [ 92.0251024, 27.1143121 ], [ 92.0261301, 27.1153398 ], [ 92.0258475, 27.1162647 ], [ 92.0264384, 27.1172924 ], [ 92.0271835, 27.1183972 ], [ 92.0275689, 27.1191423 ], [ 92.0280314, 27.1199644 ], [ 92.0284938, 27.1203498 ], [ 92.0293674, 27.1209407 ], [ 92.0300354, 27.1214546 ], [ 92.0304721, 27.1221483 ], [ 92.0310631, 27.1229961 ], [ 92.0314227, 27.1234843 ], [ 92.0319623, 27.1244606 ], [ 92.0324247, 27.1251543 ], [ 92.0327074, 27.1257452 ], [ 92.0329386, 27.1262591 ], [ 92.0331698, 27.1267472 ], [ 92.0334524, 27.1272611 ], [ 92.0334781, 27.1276464 ], [ 92.0334267, 27.1281603 ], [ 92.0334781, 27.1285971 ], [ 92.0336837, 27.1289825 ], [ 92.0338892, 27.1296761 ], [ 92.0340434, 27.1302157 ], [ 92.0341718, 27.1309094 ], [ 92.0341975, 27.1316031 ], [ 92.0342489, 27.1323995 ], [ 92.0343517, 27.1330418 ], [ 92.0344801, 27.1337098 ], [ 92.0347371, 27.1343778 ], [ 92.0348398, 27.1349945 ], [ 92.0350197, 27.1354312 ], [ 92.0354821, 27.1359708 ], [ 92.0358675, 27.1367158 ], [ 92.0359703, 27.1372554 ], [ 92.0358932, 27.1376922 ], [ 92.035662, 27.1381803 ], [ 92.0354308, 27.1385657 ], [ 92.0353794, 27.1390795 ], [ 92.0354821, 27.1394135 ], [ 92.0357391, 27.1397218 ], [ 92.0357904, 27.14021 ], [ 92.0357134, 27.140878 ], [ 92.0355335, 27.1415717 ], [ 92.0350711, 27.1420085 ], [ 92.0345315, 27.1427022 ], [ 92.0342232, 27.1432674 ], [ 92.033992, 27.1439097 ], [ 92.0337351, 27.1445777 ], [ 92.0335038, 27.144886 ], [ 92.0330671, 27.1454255 ], [ 92.032656, 27.1461192 ], [ 92.0320651, 27.1468129 ], [ 92.0320394, 27.147224 ], [ 92.0321935, 27.1477636 ], [ 92.0325789, 27.1482517 ], [ 92.0334524, 27.1490739 ], [ 92.0330414, 27.1497676 ], [ 92.0327587, 27.1504099 ], [ 92.0323477, 27.1510008 ], [ 92.0319623, 27.1519514 ], [ 92.0315769, 27.1536471 ], [ 92.0312429, 27.1544693 ], [ 92.0307291, 27.1550859 ], [ 92.0300867, 27.1554456 ], [ 92.0289049, 27.1559594 ], [ 92.0282883, 27.1562934 ], [ 92.0284424, 27.157244 ], [ 92.028648, 27.1578349 ], [ 92.0287764, 27.1583745 ], [ 92.0288278, 27.1586828 ], [ 92.0286994, 27.1592223 ], [ 92.0285195, 27.1598133 ], [ 92.0282112, 27.1607125 ], [ 92.0278515, 27.1615346 ], [ 92.027389, 27.1623054 ], [ 92.0275175, 27.1631276 ], [ 92.0275432, 27.1639497 ], [ 92.0274661, 27.1646691 ], [ 92.0273634, 27.1653114 ], [ 92.027312, 27.1661593 ], [ 92.0272863, 27.1669557 ], [ 92.0271321, 27.1678807 ], [ 92.0269266, 27.1685743 ], [ 92.0274404, 27.1687285 ], [ 92.0278001, 27.1691653 ], [ 92.0280571, 27.1697048 ], [ 92.0281855, 27.1702957 ], [ 92.0284167, 27.1708353 ], [ 92.0287764, 27.1712977 ], [ 92.0295215, 27.171863 ], [ 92.0302409, 27.1723768 ], [ 92.0307547, 27.1727622 ], [ 92.0314227, 27.1731733 ], [ 92.0318338, 27.17361 ], [ 92.0323734, 27.1739697 ], [ 92.0331441, 27.1744065 ], [ 92.033992, 27.1750745 ], [ 92.0348655, 27.175871 ], [ 92.035662, 27.1765904 ], [ 92.0365098, 27.1779264 ], [ 92.0365612, 27.1783374 ], [ 92.0365612, 27.1791853 ], [ 92.0364373, 27.1803888 ], [ 92.0373865, 27.1805471 ], [ 92.0381459, 27.1808318 ], [ 92.0386522, 27.1811166 ], [ 92.0394432, 27.181433 ], [ 92.0402659, 27.1816545 ], [ 92.0408038, 27.1817178 ], [ 92.0414683, 27.1815912 ], [ 92.0421011, 27.1816545 ], [ 92.042639, 27.1817811 ], [ 92.0433668, 27.1817494 ], [ 92.0443793, 27.1817178 ], [ 92.0448223, 27.1817811 ], [ 92.045297, 27.1822241 ], [ 92.0458665, 27.1824456 ], [ 92.0469423, 27.1826354 ], [ 92.0475119, 27.1827303 ], [ 92.048208, 27.1831417 ], [ 92.0490358, 27.1834839 ], [ 92.0499045, 27.1838268 ], [ 92.0510247, 27.1841011 ], [ 92.0520762, 27.1843526 ], [ 92.0528764, 27.1851984 ], [ 92.053425, 27.1856556 ], [ 92.0542023, 27.1864557 ], [ 92.0547738, 27.1867986 ], [ 92.0554596, 27.1871415 ], [ 92.0561454, 27.1875301 ], [ 92.0569226, 27.1882845 ], [ 92.0571512, 27.1886732 ], [ 92.0574027, 27.1894275 ], [ 92.0576542, 27.1902505 ], [ 92.0579056, 27.1909135 ], [ 92.05818, 27.1914621 ], [ 92.05834, 27.1919422 ], [ 92.0584086, 27.1924908 ], [ 92.0585686, 27.1929709 ], [ 92.0589572, 27.1935653 ], [ 92.0591172, 27.1939768 ], [ 92.0591858, 27.1947311 ], [ 92.0593458, 27.1956227 ], [ 92.0595287, 27.1961256 ], [ 92.0598259, 27.19672 ], [ 92.0598259, 27.1972458 ], [ 92.0595744, 27.1976573 ], [ 92.0589801, 27.1983888 ], [ 92.0586372, 27.1990746 ], [ 92.0584086, 27.1998747 ], [ 92.0583857, 27.2006063 ], [ 92.0586372, 27.2014064 ], [ 92.0589572, 27.2022065 ], [ 92.0595059, 27.2032809 ], [ 92.0598716, 27.2038067 ], [ 92.0601917, 27.204241 ], [ 92.0605574, 27.2048811 ], [ 92.0607403, 27.2054069 ], [ 92.0608546, 27.2060927 ], [ 92.0609232, 27.2065957 ], [ 92.0609232, 27.2070757 ], [ 92.0610146, 27.2074644 ], [ 92.0612432, 27.2078301 ], [ 92.0615404, 27.2084931 ], [ 92.0616319, 27.209156 ], [ 92.0615862, 27.2099104 ], [ 92.0616319, 27.2101162 ], [ 92.0621348, 27.2106191 ], [ 92.0628892, 27.2110077 ], [ 92.0636436, 27.2114649 ], [ 92.0641236, 27.2115792 ], [ 92.0651066, 27.2120136 ], [ 92.0657696, 27.2124708 ], [ 92.0664097, 27.2132709 ], [ 92.0671641, 27.213751 ], [ 92.0677356, 27.2139796 ], [ 92.0682385, 27.2140253 ], [ 92.0683757, 27.2145282 ], [ 92.0684443, 27.215054 ], [ 92.0689472, 27.2155798 ], [ 92.0691986, 27.2161284 ], [ 92.0694044, 27.2166771 ], [ 92.0693815, 27.2170886 ], [ 92.0691529, 27.217843 ], [ 92.0691072, 27.2184602 ], [ 92.0693041, 27.218825 ], [ 92.0697681, 27.219289 ], [ 92.0700537, 27.2197887 ], [ 92.0700894, 27.2202527 ], [ 92.0700537, 27.2210022 ], [ 92.0699109, 27.2214662 ], [ 92.0694469, 27.2219659 ], [ 92.0696968, 27.2226084 ], [ 92.0700894, 27.2233936 ], [ 92.0704106, 27.2241431 ], [ 92.0707318, 27.2247142 ], [ 92.0707675, 27.2251425 ], [ 92.0707318, 27.2256779 ], [ 92.0705891, 27.2265345 ], [ 92.0707318, 27.2270699 ], [ 92.071053, 27.2277123 ], [ 92.0712315, 27.2284618 ], [ 92.0712315, 27.2289615 ], [ 92.0711244, 27.230068 ], [ 92.0711244, 27.2310317 ], [ 92.0718383, 27.2347793 ], [ 92.0716241, 27.2354932 ], [ 92.0714814, 27.2365996 ], [ 92.0713029, 27.238063 ], [ 92.0705534, 27.2382771 ], [ 92.0696968, 27.238634 ], [ 92.0694112, 27.2392765 ], [ 92.0690186, 27.2400617 ], [ 92.0685903, 27.2408112 ], [ 92.0674482, 27.2420248 ], [ 92.0661989, 27.2433097 ], [ 92.0653067, 27.2441306 ], [ 92.0645928, 27.2443091 ], [ 92.0633793, 27.2448444 ], [ 92.062487, 27.2449515 ], [ 92.0616304, 27.24513 ], [ 92.0607738, 27.2462007 ], [ 92.0604882, 27.2470573 ], [ 92.0604169, 27.2502339 ], [ 92.0600242, 27.2514117 ], [ 92.0593461, 27.2520899 ], [ 92.058668, 27.252304 ], [ 92.0579898, 27.2526253 ], [ 92.0572046, 27.2529822 ], [ 92.0560981, 27.2530179 ], [ 92.0549203, 27.2529108 ], [ 92.0537782, 27.2530536 ], [ 92.0526003, 27.2530536 ], [ 92.0509942, 27.2533748 ], [ 92.0498045, 27.2538685 ], [ 92.0488765, 27.2540351 ], [ 92.0479723, 27.254273 ], [ 92.0473774, 27.2546538 ], [ 92.0464494, 27.2555104 ], [ 92.0460687, 27.2557007 ], [ 92.045688, 27.2556769 ], [ 92.0452597, 27.2554866 ], [ 92.0447362, 27.2552962 ], [ 92.0440938, 27.25532 ], [ 92.0434037, 27.255558 ], [ 92.0428802, 27.2556293 ], [ 92.0419998, 27.2555342 ], [ 92.038621, 27.2549393 ], [ 92.0381689, 27.2560814 ], [ 92.037931, 27.2566763 ], [ 92.0378358, 27.2572712 ], [ 92.037693, 27.2584847 ], [ 92.0379785, 27.2589606 ], [ 92.0385734, 27.2594841 ], [ 92.0392159, 27.2599362 ], [ 92.0399297, 27.2601741 ], [ 92.0406197, 27.2603883 ], [ 92.0414526, 27.2605548 ], [ 92.0421664, 27.2608879 ], [ 92.0425667, 27.2612766 ], [ 92.0457159, 27.2661898 ], [ 92.045956, 27.2665315 ], [ 92.0461315, 27.2669933 ], [ 92.0463254, 27.2675104 ], [ 92.0464732, 27.2678614 ], [ 92.0465379, 27.2682954 ], [ 92.046621, 27.2687664 ], [ 92.046741, 27.2692744 ], [ 92.0470273, 27.2693021 ], [ 92.0473044, 27.2693575 ], [ 92.0475815, 27.2694776 ], [ 92.0478955, 27.2696161 ], [ 92.0479786, 27.2696161 ], [ 92.0480894, 27.2695699 ], [ 92.0482002, 27.269496 ], [ 92.0482833, 27.2694406 ], [ 92.048468, 27.269496 ], [ 92.0486435, 27.2695514 ], [ 92.048662, 27.2695976 ], [ 92.0486805, 27.2697454 ], [ 92.0492992, 27.2700502 ], [ 92.0495763, 27.2700594 ], [ 92.0496779, 27.2701517 ], [ 92.0497518, 27.2702626 ], [ 92.0499088, 27.2703364 ], [ 92.0500473, 27.2704011 ], [ 92.0501489, 27.2704657 ], [ 92.0502874, 27.270475 ], [ 92.0504813, 27.2704934 ], [ 92.0506106, 27.2705304 ], [ 92.0507584, 27.270595 ], [ 92.0509154, 27.2706227 ], [ 92.0510262, 27.2706043 ], [ 92.0512202, 27.2705581 ], [ 92.0513956, 27.2705581 ], [ 92.0520883, 27.2706227 ], [ 92.0528825, 27.2706597 ], [ 92.0530857, 27.270595 ], [ 92.0533628, 27.2705119 ], [ 92.0535844, 27.2705212 ], [ 92.0536675, 27.2704934 ], [ 92.0537968, 27.2704473 ], [ 92.0541478, 27.2704288 ], [ 92.0546003, 27.2705027 ], [ 92.0550344, 27.2706135 ], [ 92.0551729, 27.2706135 ], [ 92.0553299, 27.2706966 ], [ 92.0554407, 27.2708167 ], [ 92.0555885, 27.2709552 ], [ 92.055764, 27.2710014 ], [ 92.0560225, 27.2710568 ], [ 92.0563458, 27.2710845 ], [ 92.0567983, 27.27126 ], [ 92.0569276, 27.27138 ], [ 92.0571031, 27.2715001 ], [ 92.0573155, 27.2715463 ], [ 92.0574817, 27.271537 ], [ 92.0576941, 27.2715278 ], [ 92.0578604, 27.2715278 ], [ 92.0586731, 27.2719619 ], [ 92.0589963, 27.2720635 ], [ 92.0592364, 27.2721373 ], [ 92.0596613, 27.2721743 ], [ 92.0598552, 27.272202 ], [ 92.0599291, 27.2722482 ], [ 92.0600491, 27.2723128 ], [ 92.0602523, 27.2723313 ], [ 92.0606217, 27.2723036 ], [ 92.060788, 27.2722574 ], [ 92.0611851, 27.2720265 ], [ 92.0613698, 27.2719526 ], [ 92.0615545, 27.2719434 ], [ 92.061693, 27.2720173 ], [ 92.06185, 27.272165 ], [ 92.0619332, 27.272322 ], [ 92.0619609, 27.2726545 ], [ 92.0619886, 27.272793 ], [ 92.0621179, 27.2729131 ], [ 92.0622379, 27.272987 ], [ 92.0625704, 27.2730978 ], [ 92.0627828, 27.2732086 ], [ 92.0631799, 27.2734118 ], [ 92.0636694, 27.2736612 ], [ 92.0640019, 27.2738366 ], [ 92.0641404, 27.2739382 ], [ 92.0641773, 27.2740398 ], [ 92.0642143, 27.2741968 ], [ 92.0642143, 27.2742799 ], [ 92.0641681, 27.2744185 ], [ 92.0640942, 27.2747786 ], [ 92.0640942, 27.2750834 ], [ 92.0642143, 27.2752496 ], [ 92.0658397, 27.2765149 ], [ 92.0660706, 27.2766904 ], [ 92.0664677, 27.2768381 ], [ 92.0668648, 27.2769766 ], [ 92.0671881, 27.277069 ], [ 92.0674928, 27.2770782 ], [ 92.0677976, 27.2770321 ], [ 92.0681024, 27.2769674 ], [ 92.0682039, 27.2768935 ], [ 92.0683332, 27.2768196 ], [ 92.0685826, 27.276755 ], [ 92.0687765, 27.2766257 ], [ 92.0689705, 27.2765611 ], [ 92.069109, 27.2765149 ], [ 92.0692106, 27.2764041 ], [ 92.0693676, 27.2763209 ], [ 92.0694969, 27.2762471 ], [ 92.0697001, 27.2762286 ], [ 92.069894, 27.2762286 ], [ 92.0701064, 27.2761732 ], [ 92.0702357, 27.276127 ], [ 92.0704389, 27.2760346 ], [ 92.0705867, 27.2760346 ], [ 92.0707252, 27.2761362 ], [ 92.0708637, 27.2762471 ], [ 92.0709838, 27.2763948 ], [ 92.0711038, 27.2768751 ], [ 92.0711315, 27.2769489 ], [ 92.0712424, 27.2770228 ], [ 92.071501, 27.2772445 ], [ 92.0717965, 27.2774661 ], [ 92.0721012, 27.2777062 ], [ 92.0725722, 27.2779925 ], [ 92.0728031, 27.2781403 ], [ 92.0731171, 27.2782973 ], [ 92.0733388, 27.2783804 ], [ 92.0736805, 27.2784635 ], [ 92.0740591, 27.2785374 ], [ 92.0747241, 27.2786298 ], [ 92.0750288, 27.2786205 ], [ 92.0753059, 27.2785744 ], [ 92.0756568, 27.2783342 ], [ 92.0759247, 27.2782142 ], [ 92.0763126, 27.2780295 ], [ 92.0766081, 27.2778448 ], [ 92.0767466, 27.2777155 ], [ 92.0768205, 27.2775123 ], [ 92.0769683, 27.277226 ], [ 92.0770514, 27.2770228 ], [ 92.0770606, 27.2767827 ], [ 92.0771068, 27.2764687 ], [ 92.0772269, 27.2762194 ], [ 92.0773931, 27.2759608 ], [ 92.077587, 27.275813 ], [ 92.0778179, 27.2757299 ], [ 92.0780119, 27.2756468 ], [ 92.0782612, 27.275499 ], [ 92.0784459, 27.2753789 ], [ 92.0786491, 27.2752404 ], [ 92.078723, 27.2751481 ], [ 92.0789816, 27.2750372 ], [ 92.0793048, 27.2749079 ], [ 92.0794249, 27.2748156 ], [ 92.0795911, 27.2745847 ], [ 92.0796742, 27.2743908 ], [ 92.0797112, 27.2741691 ], [ 92.0798405, 27.2738828 ], [ 92.0802191, 27.2733564 ], [ 92.0804777, 27.2731994 ], [ 92.0809118, 27.2730701 ], [ 92.081355, 27.2730055 ], [ 92.081706, 27.2729223 ], [ 92.0822139, 27.2727653 ], [ 92.0825279, 27.2725899 ], [ 92.0826942, 27.2724144 ], [ 92.0828235, 27.2722482 ], [ 92.0830082, 27.2718418 ], [ 92.0830543, 27.2718141 ], [ 92.0835253, 27.271731 ], [ 92.0842365, 27.271694 ], [ 92.084689, 27.2715925 ], [ 92.0850861, 27.2713708 ], [ 92.0853817, 27.2711399 ], [ 92.0855571, 27.2708998 ], [ 92.0856864, 27.2704565 ], [ 92.0857511, 27.2702256 ], [ 92.0858711, 27.2700686 ], [ 92.086102, 27.2698654 ], [ 92.0865268, 27.2696807 ], [ 92.0868778, 27.2695053 ], [ 92.0870255, 27.2694222 ], [ 92.0870994, 27.2694129 ], [ 92.0874042, 27.2694222 ], [ 92.087709, 27.2694406 ], [ 92.0880322, 27.2695514 ], [ 92.0881984, 27.26969 ], [ 92.0883092, 27.2698008 ], [ 92.0884108, 27.2698654 ], [ 92.0885494, 27.2698193 ], [ 92.0886971, 27.2697546 ], [ 92.0888177, 27.2697583 ], [ 92.0890019, 27.2697639 ], [ 92.0891497, 27.2697731 ], [ 92.0892697, 27.2697546 ], [ 92.0894083, 27.2697823 ], [ 92.0894729, 27.2698008 ], [ 92.0895837, 27.2697546 ], [ 92.089713, 27.2696992 ], [ 92.0898146, 27.2697084 ], [ 92.0899993, 27.2696807 ], [ 92.0901471, 27.2696438 ], [ 92.0903318, 27.269653 ], [ 92.0904241, 27.2697177 ], [ 92.0905811, 27.2697823 ], [ 92.090655, 27.2698193 ], [ 92.0908028, 27.2697916 ], [ 92.0910706, 27.2696438 ], [ 92.0912738, 27.2695145 ], [ 92.0914677, 27.2693298 ], [ 92.0916247, 27.2691636 ], [ 92.0918556, 27.2689142 ], [ 92.0920311, 27.2688403 ], [ 92.0921604, 27.268868 ], [ 92.0922527, 27.2689604 ], [ 92.0924929, 27.2689973 ], [ 92.0926868, 27.2689973 ], [ 92.0928069, 27.2691266 ], [ 92.0929639, 27.2693021 ], [ 92.0930839, 27.2693667 ], [ 92.0933056, 27.2694868 ], [ 92.0935364, 27.2696069 ], [ 92.0938597, 27.2698285 ], [ 92.0941183, 27.2699393 ], [ 92.0942383, 27.2700594 ], [ 92.0943584, 27.2701148 ], [ 92.0944692, 27.2702533 ], [ 92.0945523, 27.2703457 ], [ 92.094774, 27.2704657 ], [ 92.0948202, 27.2705027 ], [ 92.0948756, 27.270595 ], [ 92.094931, 27.2706135 ], [ 92.0951342, 27.2706597 ], [ 92.0953558, 27.2707243 ], [ 92.0955128, 27.2707059 ], [ 92.0959192, 27.2705766 ], [ 92.0959469, 27.2705212 ], [ 92.0959653, 27.2700409 ], [ 92.095993, 27.2698285 ], [ 92.0960577, 27.2696715 ], [ 92.0962701, 27.2695237 ], [ 92.0965749, 27.2694499 ], [ 92.0969258, 27.2694406 ], [ 92.0971567, 27.2694776 ], [ 92.0978032, 27.2693021 ], [ 92.0980802, 27.2690712 ], [ 92.0983758, 27.2687203 ], [ 92.0989206, 27.2685263 ], [ 92.0991885, 27.2684801 ], [ 92.0994932, 27.2684524 ], [ 92.0997703, 27.2684709 ], [ 92.1000381, 27.268554 ], [ 92.1005184, 27.2686371 ], [ 92.1009155, 27.2686926 ], [ 92.1012572, 27.2686279 ], [ 92.1018482, 27.2684524 ], [ 92.1026425, 27.2681477 ], [ 92.1037507, 27.2680091 ], [ 92.1039447, 27.2680276 ], [ 92.1042494, 27.2682862 ], [ 92.1047389, 27.2686187 ], [ 92.1050898, 27.2687757 ], [ 92.1055331, 27.2689881 ], [ 92.1057455, 27.2691174 ], [ 92.1061057, 27.2693021 ], [ 92.1065398, 27.2694868 ], [ 92.1068538, 27.2695884 ], [ 92.1069461, 27.269653 ], [ 92.1072324, 27.2698008 ], [ 92.1075926, 27.2699301 ], [ 92.1080729, 27.2700594 ], [ 92.1083961, 27.2702072 ], [ 92.1085623, 27.2702533 ], [ 92.1090056, 27.2702533 ], [ 92.1094766, 27.2701887 ], [ 92.1098737, 27.2701702 ], [ 92.1102986, 27.2701056 ], [ 92.1106865, 27.2699301 ], [ 92.1110743, 27.2697177 ], [ 92.1117023, 27.2695514 ], [ 92.1120071, 27.2694868 ], [ 92.1123211, 27.2694591 ], [ 92.1128475, 27.2694591 ], [ 92.1133832, 27.2694591 ], [ 92.1138634, 27.2695699 ], [ 92.1146115, 27.2699763 ], [ 92.1151471, 27.2702072 ], [ 92.1161999, 27.270632 ], [ 92.1164401, 27.2707797 ], [ 92.1167079, 27.2709275 ], [ 92.1169942, 27.2709737 ], [ 92.1174929, 27.2711492 ], [ 92.1178623, 27.2712507 ], [ 92.1182687, 27.2713616 ], [ 92.118518, 27.2714077 ], [ 92.1186196, 27.2713708 ], [ 92.118675, 27.2712323 ], [ 92.1187951, 27.2710383 ], [ 92.1188412, 27.2709737 ], [ 92.1193861, 27.2708998 ], [ 92.1195247, 27.2708906 ], [ 92.119617, 27.2709829 ], [ 92.1196909, 27.2711307 ], [ 92.119931, 27.27138 ], [ 92.1200603, 27.2715001 ], [ 92.1202912, 27.2716109 ], [ 92.120559, 27.271731 ], [ 92.1206237, 27.2718603 ], [ 92.1209284, 27.2723867 ], [ 92.1211131, 27.2727099 ], [ 92.1211685, 27.2728854 ], [ 92.1211685, 27.2730978 ], [ 92.1212147, 27.2733841 ], [ 92.1213348, 27.2736981 ], [ 92.1214825, 27.2739105 ], [ 92.121815, 27.2741691 ], [ 92.1225169, 27.2745108 ], [ 92.1226185, 27.2746032 ], [ 92.1230156, 27.2752866 ], [ 92.1230526, 27.2754343 ], [ 92.1230248, 27.2755452 ], [ 92.1229417, 27.2757576 ], [ 92.1229325, 27.2759331 ], [ 92.1229602, 27.276127 ], [ 92.1230248, 27.2762932 ], [ 92.1231634, 27.2764318 ], [ 92.123856, 27.2768104 ], [ 92.1241793, 27.2769397 ], [ 92.1243363, 27.2770413 ], [ 92.1243824, 27.2771059 ], [ 92.1244656, 27.2775492 ], [ 92.124521, 27.2778355 ], [ 92.1245394, 27.2780295 ], [ 92.1246595, 27.2781126 ], [ 92.1246964, 27.2781588 ], [ 92.1246595, 27.2782881 ], [ 92.1245302, 27.278482 ], [ 92.1244009, 27.2786205 ], [ 92.1243824, 27.278833 ], [ 92.1244379, 27.2789715 ], [ 92.124521, 27.27911 ], [ 92.1246872, 27.2794332 ], [ 92.1247426, 27.279618 ], [ 92.1247519, 27.2797288 ], [ 92.1246318, 27.2799504 ], [ 92.1245856, 27.2801905 ], [ 92.1245671, 27.2805692 ], [ 92.1245856, 27.2808463 ], [ 92.1246318, 27.2811048 ], [ 92.1247426, 27.2813634 ], [ 92.1249735, 27.2816682 ], [ 92.1252321, 27.2817698 ], [ 92.1252136, 27.2818898 ], [ 92.1251305, 27.2819268 ], [ 92.1250566, 27.2819453 ], [ 92.1250012, 27.2820099 ], [ 92.1247888, 27.28225 ], [ 92.1246964, 27.2824255 ], [ 92.1245487, 27.2827118 ], [ 92.1244471, 27.2828041 ], [ 92.1243086, 27.2828873 ], [ 92.1242531, 27.2829242 ], [ 92.1241239, 27.2831181 ], [ 92.1239022, 27.2832013 ], [ 92.1236621, 27.2832105 ], [ 92.1235974, 27.2832567 ], [ 92.1235882, 27.2834137 ], [ 92.1236067, 27.2835245 ], [ 92.1236344, 27.283663 ], [ 92.1236898, 27.2837739 ], [ 92.1236898, 27.2839031 ], [ 92.1236898, 27.284134 ], [ 92.1236621, 27.2843372 ], [ 92.1234589, 27.284605 ], [ 92.1232465, 27.2847528 ], [ 92.1230987, 27.2848359 ], [ 92.1229879, 27.2848729 ], [ 92.1228678, 27.2849375 ], [ 92.1226924, 27.2850483 ], [ 92.1226462, 27.2851592 ], [ 92.1226924, 27.2853346 ], [ 92.1227755, 27.2854732 ], [ 92.1229417, 27.2856024 ], [ 92.1230341, 27.2856671 ], [ 92.1230895, 27.2857779 ], [ 92.1231819, 27.2859349 ], [ 92.1232557, 27.2860365 ], [ 92.123265, 27.2862951 ], [ 92.1233204, 27.2863782 ], [ 92.1233111, 27.286526 ], [ 92.1232834, 27.2866091 ], [ 92.1232096, 27.2867107 ], [ 92.1230156, 27.2868862 ], [ 92.1228032, 27.2869877 ], [ 92.1227386, 27.2870893 ], [ 92.1226739, 27.2872002 ], [ 92.1225908, 27.2873017 ], [ 92.1224892, 27.2873941 ], [ 92.1223784, 27.2875511 ], [ 92.1222953, 27.2876342 ], [ 92.1220828, 27.2877543 ], [ 92.1218889, 27.2879205 ], [ 92.1216857, 27.2881976 ], [ 92.1213994, 27.2886778 ], [ 92.1212424, 27.288881 ], [ 92.1211316, 27.2889641 ], [ 92.1210115, 27.2889826 ], [ 92.1208545, 27.2890103 ], [ 92.1207068, 27.2890934 ], [ 92.1203004, 27.2894074 ], [ 92.1200695, 27.2896013 ], [ 92.119931, 27.289823 ], [ 92.1198387, 27.2899523 ], [ 92.1196262, 27.290137 ], [ 92.1194415, 27.2902663 ], [ 92.1193122, 27.2903032 ], [ 92.119183, 27.2903309 ], [ 92.1188597, 27.2905895 ], [ 92.1184811, 27.2908851 ], [ 92.1182871, 27.291079 ], [ 92.1181394, 27.2915408 ], [ 92.118047, 27.2916516 ], [ 92.1178992, 27.2917162 ], [ 92.1177238, 27.2917347 ], [ 92.1174098, 27.2917439 ], [ 92.1173174, 27.2917624 ], [ 92.1172712, 27.2918178 ], [ 92.1173082, 27.2920302 ], [ 92.1172528, 27.2922519 ], [ 92.1170681, 27.2923535 ], [ 92.1169757, 27.2924366 ], [ 92.1168557, 27.2925566 ], [ 92.1167448, 27.2925844 ], [ 92.1165786, 27.2926675 ], [ 92.1164585, 27.2927414 ], [ 92.1163846, 27.2928706 ], [ 92.1162646, 27.2929261 ], [ 92.1161261, 27.292963 ], [ 92.1158213, 27.2930092 ], [ 92.1154057, 27.2931015 ], [ 92.1151286, 27.2931847 ], [ 92.1148239, 27.2933047 ], [ 92.11475, 27.2933694 ], [ 92.1146115, 27.2934894 ], [ 92.1145099, 27.2935448 ], [ 92.1143436, 27.2935725 ], [ 92.1142143, 27.2935818 ], [ 92.1140758, 27.2936095 ], [ 92.1138819, 27.293748 ], [ 92.113651, 27.2939697 ], [ 92.1135217, 27.2940435 ], [ 92.113337, 27.2942005 ], [ 92.1131892, 27.2943391 ], [ 92.113143, 27.2945422 ], [ 92.1131892, 27.2946715 ], [ 92.1131708, 27.2948008 ], [ 92.1130784, 27.2949486 ], [ 92.1129122, 27.2951241 ], [ 92.112709, 27.2952626 ], [ 92.112358, 27.2953734 ], [ 92.1119055, 27.2954935 ], [ 92.111259, 27.2956228 ], [ 92.1111482, 27.2957428 ], [ 92.1109727, 27.295946 ], [ 92.1106957, 27.29614 ], [ 92.1104925, 27.2962508 ], [ 92.1101785, 27.2963247 ], [ 92.1099569, 27.2963431 ], [ 92.1097629, 27.2963431 ], [ 92.1095505, 27.2964263 ], [ 92.1094397, 27.2964909 ], [ 92.1093566, 27.2965278 ], [ 92.1091164, 27.296611 ], [ 92.1088394, 27.2967125 ], [ 92.1085069, 27.2968234 ], [ 92.1079436, 27.2971189 ], [ 92.1076111, 27.2972667 ], [ 92.1072786, 27.2975437 ], [ 92.1070847, 27.2977192 ], [ 92.1068723, 27.2978947 ], [ 92.1066506, 27.2980886 ], [ 92.106392, 27.2982087 ], [ 92.106078, 27.2982271 ], [ 92.1057917, 27.2983472 ], [ 92.1054685, 27.2985966 ], [ 92.1051822, 27.2987905 ], [ 92.1049605, 27.298929 ], [ 92.1048405, 27.2990676 ], [ 92.1047112, 27.2992338 ], [ 92.1045727, 27.2994462 ], [ 92.1044249, 27.2996124 ], [ 92.1043233, 27.299871 ], [ 92.1041571, 27.3000742 ], [ 92.104037, 27.3002497 ], [ 92.1039354, 27.3003974 ], [ 92.1039077, 27.3005452 ], [ 92.1038708, 27.3008592 ], [ 92.1038154, 27.3009146 ], [ 92.1035568, 27.3009516 ], [ 92.1033444, 27.30097 ], [ 92.103095, 27.3009977 ], [ 92.1029103, 27.3010532 ], [ 92.1027995, 27.301127 ], [ 92.1026425, 27.3012194 ], [ 92.1024762, 27.3012563 ], [ 92.10231, 27.3014041 ], [ 92.1020884, 27.3017181 ], [ 92.1018113, 27.3019397 ], [ 92.1014788, 27.3020967 ], [ 92.1009524, 27.3023276 ], [ 92.1006107, 27.3024477 ], [ 92.1003152, 27.3025955 ], [ 92.0998811, 27.3027986 ], [ 92.0995025, 27.3029649 ], [ 92.0991792, 27.3029926 ], [ 92.0989299, 27.3029649 ], [ 92.0978216, 27.3032512 ], [ 92.0973599, 27.3035375 ], [ 92.0972583, 27.3037129 ], [ 92.0970551, 27.3037776 ], [ 92.0968058, 27.3039807 ], [ 92.0965102, 27.3039992 ], [ 92.0960115, 27.3039715 ], [ 92.0955497, 27.3038976 ], [ 92.0951065, 27.3039069 ], [ 92.0947925, 27.3040362 ], [ 92.0945523, 27.30411 ], [ 92.0943953, 27.3041193 ], [ 92.0942476, 27.30411 ], [ 92.0939336, 27.3040639 ], [ 92.0935457, 27.3039807 ], [ 92.0932317, 27.3039992 ], [ 92.0930377, 27.3041285 ], [ 92.092853, 27.3042578 ], [ 92.092539, 27.3043225 ], [ 92.0921973, 27.3043963 ], [ 92.0919203, 27.3044056 ], [ 92.0916063, 27.3043409 ], [ 92.0912461, 27.3042486 ], [ 92.090969, 27.3041839 ], [ 92.0908674, 27.3042116 ], [ 92.0906735, 27.3043594 ], [ 92.0905165, 27.3044333 ], [ 92.0903226, 27.3044333 ], [ 92.0901378, 27.3044979 ], [ 92.0898515, 27.3047011 ], [ 92.0896391, 27.3048027 ], [ 92.0894729, 27.3048212 ], [ 92.0892051, 27.3048396 ], [ 92.0888818, 27.3048489 ], [ 92.0887064, 27.3048581 ], [ 92.0884755, 27.304895 ], [ 92.0883647, 27.3049874 ], [ 92.0883, 27.3051075 ], [ 92.0882446, 27.3051813 ], [ 92.0880784, 27.3052552 ], [ 92.0878475, 27.3053476 ], [ 92.0876351, 27.3055508 ], [ 92.0874134, 27.3057909 ], [ 92.0873026, 27.3059294 ], [ 92.0872841, 27.306031 ], [ 92.0873026, 27.3060864 ], [ 92.0872841, 27.3062157 ], [ 92.0872287, 27.3063081 ], [ 92.0871179, 27.3063635 ], [ 92.0870717, 27.3063819 ], [ 92.0869332, 27.3064004 ], [ 92.0867023, 27.3064004 ], [ 92.0865915, 27.3064651 ], [ 92.0865361, 27.3065482 ], [ 92.0864529, 27.3066959 ], [ 92.0863237, 27.3068529 ], [ 92.0862036, 27.3069822 ], [ 92.0861297, 27.3070561 ], [ 92.0860374, 27.3070838 ], [ 92.0859358, 27.3070931 ], [ 92.0858157, 27.3070931 ], [ 92.0856864, 27.3070469 ], [ 92.0855571, 27.3071023 ], [ 92.0854832, 27.3071762 ], [ 92.0853632, 27.3072593 ], [ 92.0852154, 27.3073609 ], [ 92.0850861, 27.3074163 ], [ 92.0849938, 27.3074625 ], [ 92.0849291, 27.3075548 ], [ 92.0848275, 27.3076934 ], [ 92.0847075, 27.3078042 ], [ 92.0845505, 27.3080351 ], [ 92.0844581, 27.3082013 ], [ 92.0844674, 27.3084876 ], [ 92.0843842, 27.3086908 ], [ 92.0841534, 27.3089401 ], [ 92.0837839, 27.3091895 ], [ 92.083276, 27.3094758 ], [ 92.0827865, 27.3096512 ], [ 92.0826018, 27.3097528 ], [ 92.0823155, 27.3099929 ], [ 92.0821031, 27.3101038 ], [ 92.0819092, 27.3101869 ], [ 92.0816229, 27.3102054 ], [ 92.0813643, 27.3102423 ], [ 92.0812073, 27.3105471 ], [ 92.0809487, 27.3108888 ], [ 92.0807086, 27.3110827 ], [ 92.0804685, 27.311212 ], [ 92.0802653, 27.3114244 ], [ 92.0801274, 27.3116555 ], [ 92.0800898, 27.3118215 ], [ 92.0797204, 27.3120063 ], [ 92.0791478, 27.3120801 ], [ 92.0788615, 27.3120247 ], [ 92.0788338, 27.3121078 ], [ 92.0785752, 27.3122279 ], [ 92.0783905, 27.3128836 ], [ 92.0781504, 27.3133638 ], [ 92.0776332, 27.3137979 ], [ 92.0769683, 27.3143797 ], [ 92.0762849, 27.314823 ], [ 92.076017, 27.3152109 ], [ 92.075857, 27.3155347 ], [ 92.0755922, 27.3158204 ], [ 92.0754167, 27.3161806 ], [ 92.0751674, 27.3163284 ], [ 92.0744836, 27.3172085 ], [ 92.0742161, 27.3176398 ], [ 92.0739021, 27.3180369 ], [ 92.0734773, 27.3184525 ], [ 92.0732741, 27.3185541 ], [ 92.0732372, 27.3187757 ], [ 92.073034, 27.3190159 ], [ 92.0729694, 27.3193853 ], [ 92.0729694, 27.3196808 ], [ 92.0728863, 27.3198563 ], [ 92.0725907, 27.3202349 ], [ 92.0723807, 27.3203845 ], [ 92.0721659, 27.3205305 ], [ 92.0719627, 27.3208168 ], [ 92.0719258, 27.3210753 ], [ 92.0718334, 27.3211862 ], [ 92.0714732, 27.3214355 ], [ 92.0713624, 27.3216018 ], [ 92.0712331, 27.3216756 ], [ 92.0707344, 27.3217957 ], [ 92.070522, 27.322082 ], [ 92.0702819, 27.3224145 ], [ 92.070051, 27.3226915 ], [ 92.0699309, 27.3227654 ], [ 92.0689151, 27.3229963 ], [ 92.0686565, 27.3232179 ], [ 92.0683332, 27.323809 ], [ 92.0679731, 27.3241507 ], [ 92.0674189, 27.3244739 ], [ 92.0672435, 27.3247602 ], [ 92.0669849, 27.324908 ], [ 92.0665693, 27.3254714 ], [ 92.0664031, 27.3260532 ], [ 92.0663846, 27.3264134 ], [ 92.0662091, 27.3267366 ], [ 92.064913, 27.3272942 ], [ 92.0649988, 27.3280239 ], [ 92.064913, 27.3294831 ], [ 92.0647842, 27.3303414 ], [ 92.0642263, 27.3311569 ], [ 92.06384, 27.331629 ], [ 92.0636683, 27.3321869 ], [ 92.0634537, 27.3341182 ], [ 92.0634537, 27.3348478 ], [ 92.0637113, 27.3353199 ], [ 92.0639258, 27.3357062 ], [ 92.0639258, 27.3363499 ], [ 92.0637113, 27.3370366 ], [ 92.0632821, 27.3378091 ], [ 92.0625525, 27.342058 ], [ 92.0619945, 27.3429164 ], [ 92.0610503, 27.3438606 ], [ 92.0604495, 27.344676 ], [ 92.0600632, 27.3454056 ], [ 92.0592907, 27.3463069 ], [ 92.0584753, 27.3472511 ], [ 92.0574023, 27.3480236 ], [ 92.0564581, 27.3489249 ], [ 92.052338, 27.35253 ], [ 92.0524668, 27.3537746 ], [ 92.0525955, 27.3545471 ], [ 92.0521825, 27.3549701 ], [ 92.0514925, 27.3554222 ], [ 92.0507073, 27.3561598 ], [ 92.0503266, 27.3568499 ], [ 92.0499459, 27.3577303 ], [ 92.0495176, 27.3587296 ], [ 92.0491606, 27.3591103 ], [ 92.0484706, 27.3594435 ], [ 92.047733, 27.3618943 ], [ 92.0476854, 27.3622512 ], [ 92.0482088, 27.3644879 ], [ 92.0484944, 27.366677 ], [ 92.0485658, 27.3675336 ], [ 92.0484706, 27.3687472 ], [ 92.0485182, 27.3689851 ], [ 92.0487799, 27.370151 ], [ 92.0487799, 27.372126 ], [ 92.048423, 27.3728636 ], [ 92.0488989, 27.3746482 ], [ 92.0485896, 27.3755762 ], [ 92.048542, 27.37629 ], [ 92.0488989, 27.3765756 ], [ 92.0491606, 27.3770277 ], [ 92.0496603, 27.377456 ], [ 92.0498983, 27.3777891 ], [ 92.0500172, 27.3781936 ], [ 92.0502314, 27.3785029 ], [ 92.0506121, 27.3788123 ], [ 92.0511118, 27.3790978 ], [ 92.0522777, 27.3792168 ], [ 92.0524681, 27.3792882 ], [ 92.0533606, 27.381082 ], [ 92.0543421, 27.382438 ], [ 92.0547425, 27.3845044 ], [ 92.054962, 27.3852792 ], [ 92.0541097, 27.3866482 ], [ 92.053606, 27.3875264 ], [ 92.0536189, 27.3877459 ], [ 92.0541484, 27.3891278 ], [ 92.0546714, 27.3903208 ], [ 92.0547428, 27.3912963 ], [ 92.054838, 27.392843 ], [ 92.0548618, 27.3939613 ], [ 92.0548856, 27.3951035 ], [ 92.0549331, 27.3954842 ], [ 92.0552425, 27.396317 ], [ 92.0556232, 27.3972926 ], [ 92.0559087, 27.3980064 ], [ 92.0560515, 27.3988154 ], [ 92.0561467, 27.3999338 ], [ 92.0557897, 27.4003383 ], [ 92.0552663, 27.4008618 ], [ 92.0547904, 27.4015756 ], [ 92.0545286, 27.4026702 ], [ 92.0543621, 27.4035506 ], [ 92.0540765, 27.4038361 ], [ 92.0528154, 27.4044072 ], [ 92.0521968, 27.4047879 ], [ 92.0514591, 27.4053352 ], [ 92.0507453, 27.4057635 ], [ 92.0500552, 27.4062156 ], [ 92.0496031, 27.4065725 ], [ 92.0492462, 27.4070246 ], [ 92.0486752, 27.407786 ], [ 92.0481517, 27.4083809 ], [ 92.0477948, 27.4089757 ], [ 92.0476282, 27.4094754 ], [ 92.0474616, 27.4103082 ], [ 92.0470809, 27.4108317 ], [ 92.0465812, 27.4113076 ], [ 92.0458674, 27.4118073 ], [ 92.0452011, 27.4126163 ], [ 92.0445349, 27.4136157 ], [ 92.0439638, 27.4143057 ], [ 92.0433214, 27.4153289 ], [ 92.0430596, 27.4153289 ], [ 92.0422982, 27.4153289 ], [ 92.041513, 27.4154479 ], [ 92.0407278, 27.4155668 ], [ 92.0396808, 27.4156144 ], [ 92.0393477, 27.4162093 ], [ 92.038848, 27.4169469 ], [ 92.0383245, 27.4173752 ], [ 92.0378486, 27.4177797 ], [ 92.0371348, 27.4182556 ], [ 92.0372062, 27.4184936 ], [ 92.0374203, 27.4187791 ], [ 92.0376345, 27.4190647 ], [ 92.0377534, 27.419374 ], [ 92.03792, 27.4196595 ], [ 92.0381817, 27.4200878 ], [ 92.0382531, 27.4204209 ], [ 92.0382055, 27.4206351 ], [ 92.0380628, 27.4210396 ], [ 92.0380152, 27.4214441 ], [ 92.0381341, 27.4219676 ], [ 92.0383721, 27.4224911 ], [ 92.0387528, 27.4231097 ], [ 92.0392763, 27.4237046 ], [ 92.039776, 27.4242995 ], [ 92.040466, 27.4247754 ], [ 92.0414654, 27.4254178 ], [ 92.0420841, 27.4259175 ], [ 92.0425837, 27.4261316 ], [ 92.0433452, 27.4262506 ], [ 92.0440114, 27.4265362 ], [ 92.04394, 27.4271548 ], [ 92.0437259, 27.4278211 ], [ 92.0435355, 27.4282732 ], [ 92.043131, 27.4288204 ], [ 92.0426075, 27.4295105 ], [ 92.0424172, 27.430034 ], [ 92.0423934, 27.4305812 ], [ 92.0424172, 27.4313427 ], [ 92.0424886, 27.4320089 ], [ 92.0424648, 27.4327703 ], [ 92.0424172, 27.4341504 ], [ 92.0423696, 27.4354115 ], [ 92.0421078, 27.4359112 ], [ 92.0417509, 27.4363633 ], [ 92.0413702, 27.4366727 ], [ 92.0408705, 27.4368392 ], [ 92.0403708, 27.4369582 ], [ 92.039657, 27.4370534 ], [ 92.0391811, 27.4372675 ], [ 92.0387766, 27.4377672 ], [ 92.0384435, 27.4381717 ], [ 92.0379438, 27.4382193 ], [ 92.0374679, 27.4383621 ], [ 92.0370158, 27.4384573 ], [ 92.0362782, 27.4383859 ], [ 92.035136, 27.4382907 ], [ 92.0342794, 27.4382907 ], [ 92.0337797, 27.4384573 ], [ 92.0331849, 27.4389569 ], [ 92.0324948, 27.4397422 ], [ 92.0320903, 27.4401229 ], [ 92.0316382, 27.4401943 ], [ 92.030972, 27.4401943 ], [ 92.0299012, 27.4402894 ], [ 92.0284497, 27.4403608 ], [ 92.0267841, 27.4403132 ], [ 92.0268317, 27.4407177 ], [ 92.0267365, 27.4411223 ], [ 92.0263558, 27.4419789 ], [ 92.0258085, 27.4426213 ], [ 92.0252137, 27.4433827 ], [ 92.0247378, 27.4442156 ], [ 92.0244522, 27.4448342 ], [ 92.0243095, 27.4451673 ], [ 92.0240239, 27.4455243 ], [ 92.0236432, 27.4458336 ], [ 92.0232863, 27.4460239 ], [ 92.0227628, 27.4463095 ], [ 92.0224773, 27.4465712 ], [ 92.0222631, 27.4470233 ], [ 92.0221442, 27.4475944 ], [ 92.0220728, 27.4481179 ], [ 92.022049, 27.4486414 ], [ 92.0219538, 27.4494266 ], [ 92.021811, 27.450069 ], [ 92.0215731, 27.4508305 ], [ 92.0219776, 27.450997 ], [ 92.0220966, 27.4510922 ], [ 92.0220966, 27.4514967 ], [ 92.0221442, 27.4522581 ], [ 92.022168, 27.4528768 ], [ 92.0221204, 27.4534479 ], [ 92.0220728, 27.4539 ], [ 92.0221918, 27.4542569 ], [ 92.0224059, 27.4544948 ], [ 92.0223345, 27.4559225 ], [ 92.0222869, 27.4562794 ], [ 92.0227628, 27.4566601 ], [ 92.023096, 27.4571122 ], [ 92.0231673, 27.4574692 ], [ 92.0231673, 27.4580402 ], [ 92.0229532, 27.4585637 ], [ 92.0228342, 27.4590634 ], [ 92.0227866, 27.4593489 ], [ 92.0227628, 27.4597296 ], [ 92.0228818, 27.4606338 ], [ 92.0229294, 27.4612763 ], [ 92.0228818, 27.4620377 ], [ 92.0228342, 27.462466 ], [ 92.0226439, 27.4630371 ], [ 92.0221918, 27.4636082 ], [ 92.0215493, 27.4641792 ], [ 92.0208831, 27.4649169 ], [ 92.0206927, 27.4653928 ], [ 92.0202406, 27.4663207 ], [ 92.0201692, 27.4668442 ], [ 92.0202406, 27.4676057 ], [ 92.0203596, 27.4683433 ], [ 92.0203596, 27.4691047 ], [ 92.0202168, 27.4698423 ], [ 92.0199789, 27.470461 ], [ 92.0197171, 27.4708893 ], [ 92.019384, 27.4714366 ], [ 92.0189319, 27.4718649 ], [ 92.0188129, 27.472198 ], [ 92.0186939, 27.4732212 ], [ 92.0186939, 27.4737209 ], [ 92.0188843, 27.4742206 ], [ 92.0190033, 27.4745775 ], [ 92.0190033, 27.4749582 ], [ 92.0191223, 27.4755531 ], [ 92.0192888, 27.4761479 ], [ 92.0193602, 27.4766238 ], [ 92.0193364, 27.4769569 ], [ 92.019265, 27.477409 ], [ 92.0190509, 27.4779087 ], [ 92.0187891, 27.4784322 ], [ 92.0183608, 27.4786701 ], [ 92.0183846, 27.4789557 ], [ 92.0180753, 27.4792174 ], [ 92.0179087, 27.4795743 ], [ 92.0177422, 27.4799551 ], [ 92.0175756, 27.4801216 ], [ 92.0168856, 27.4803834 ], [ 92.0162907, 27.4800978 ], [ 92.0158386, 27.4797885 ], [ 92.0157196, 27.4795505 ], [ 92.0151486, 27.4790509 ], [ 92.014744, 27.4786701 ], [ 92.0144585, 27.478575 ], [ 92.0139588, 27.4786226 ], [ 92.0133402, 27.4786464 ], [ 92.0126501, 27.4786701 ], [ 92.0121504, 27.4787415 ], [ 92.0116983, 27.4789557 ], [ 92.0114842, 27.4791698 ], [ 92.0109845, 27.4793364 ], [ 92.0107941, 27.479265 ], [ 92.0103658, 27.4789557 ], [ 92.0100565, 27.4784322 ], [ 92.0096044, 27.4779801 ], [ 92.0089382, 27.4773614 ], [ 92.0084861, 27.4770283 ], [ 92.0079388, 27.4767904 ], [ 92.0074629, 27.4764335 ], [ 92.0069156, 27.475672 ], [ 92.0061066, 27.4759576 ], [ 92.0052024, 27.4763383 ], [ 92.0047503, 27.4767428 ], [ 92.0039889, 27.4773139 ], [ 92.0032988, 27.4777422 ], [ 92.0025612, 27.4780039 ], [ 92.0020615, 27.4780753 ], [ 92.0017046, 27.4781467 ], [ 92.0013715, 27.4784084 ], [ 92.0006576, 27.4788367 ], [ 91.9995393, 27.4791936 ], [ 91.9988017, 27.4793126 ], [ 91.9986589, 27.4792174 ], [ 91.998064, 27.4789557 ], [ 91.9972788, 27.4787415 ], [ 91.996446, 27.4785036 ], [ 91.9955418, 27.4783846 ], [ 91.9945186, 27.4782894 ], [ 91.9941855, 27.4780991 ], [ 91.9939, 27.4775756 ], [ 91.9933051, 27.4766952 ], [ 91.9928292, 27.47591 ], [ 91.9921154, 27.4751248 ], [ 91.9918774, 27.4746727 ], [ 91.9918298, 27.474054 ], [ 91.9919012, 27.4731974 ], [ 91.9918536, 27.4722932 ], [ 91.9916157, 27.4711511 ], [ 91.9914015, 27.4708893 ], [ 91.990997, 27.4698423 ], [ 91.9907591, 27.4692475 ], [ 91.990426, 27.4689619 ], [ 91.9900928, 27.4687716 ], [ 91.9899025, 27.4686764 ], [ 91.9897597, 27.4685574 ], [ 91.9896169, 27.4680578 ], [ 91.9893076, 27.4677722 ], [ 91.9888793, 27.4673439 ], [ 91.9881179, 27.4670108 ], [ 91.9875706, 27.4667728 ], [ 91.9866664, 27.4666777 ], [ 91.9859288, 27.4667253 ], [ 91.9855719, 27.4665111 ], [ 91.9851911, 27.4660114 ], [ 91.9845249, 27.4656069 ], [ 91.9836207, 27.46525 ], [ 91.9825499, 27.4649407 ], [ 91.9818361, 27.4646551 ], [ 91.9810747, 27.4643696 ], [ 91.9801229, 27.4639889 ], [ 91.9794328, 27.463632 ], [ 91.9788142, 27.4632037 ], [ 91.9783859, 27.463513 ], [ 91.9777672, 27.4639413 ], [ 91.9768392, 27.4644886 ], [ 91.9758161, 27.4650358 ], [ 91.9749357, 27.4655117 ], [ 91.974198, 27.4658449 ], [ 91.97327, 27.4661304 ], [ 91.9722707, 27.4663921 ], [ 91.9717472, 27.4659162 ], [ 91.9710571, 27.4653928 ], [ 91.9704861, 27.4649407 ], [ 91.9700578, 27.4643934 ], [ 91.9697246, 27.4639413 ], [ 91.9692963, 27.4637033 ], [ 91.9687967, 27.4635368 ], [ 91.9682018, 27.4634178 ], [ 91.9676307, 27.4634416 ], [ 91.9672262, 27.4632988 ], [ 91.9666313, 27.4631085 ], [ 91.9658699, 27.4630371 ], [ 91.9652751, 27.4630609 ], [ 91.9647516, 27.4631561 ], [ 91.9645612, 27.4630133 ], [ 91.9637046, 27.4621805 ], [ 91.9628718, 27.4614904 ], [ 91.962158, 27.4608718 ], [ 91.9614441, 27.4603483 ], [ 91.9611348, 27.4601579 ], [ 91.9606351, 27.4601104 ], [ 91.9601592, 27.4601817 ], [ 91.9591836, 27.4603245 ], [ 91.9582081, 27.4604673 ], [ 91.9573752, 27.4605149 ], [ 91.9566614, 27.4604911 ], [ 91.9555431, 27.4604197 ], [ 91.9546864, 27.4603007 ], [ 91.9542344, 27.4601579 ], [ 91.9539012, 27.4599914 ], [ 91.9533777, 27.4599438 ], [ 91.951379, 27.4599438 ], [ 91.95057, 27.4600152 ], [ 91.9497134, 27.4603483 ], [ 91.9487378, 27.4607528 ], [ 91.9478336, 27.4612287 ], [ 91.9467866, 27.4618474 ], [ 91.9460252, 27.4614429 ], [ 91.9453352, 27.4609432 ], [ 91.9443834, 27.4603245 ], [ 91.943503, 27.4598248 ], [ 91.9428605, 27.4602531 ], [ 91.9420991, 27.4607052 ], [ 91.9405287, 27.4615618 ], [ 91.9398386, 27.4620853 ], [ 91.9388392, 27.4626326 ], [ 91.9383633, 27.4630133 ], [ 91.9381016, 27.4636082 ], [ 91.9376495, 27.4642744 ], [ 91.9371498, 27.4648931 ], [ 91.9364122, 27.4655117 ], [ 91.935627, 27.4659876 ], [ 91.9351749, 27.4661066 ], [ 91.9345562, 27.4657973 ], [ 91.9338186, 27.465369 ], [ 91.9330571, 27.4651072 ], [ 91.9324861, 27.4649407 ], [ 91.9319626, 27.4649169 ], [ 91.9314153, 27.4650358 ], [ 91.9310346, 27.4652024 ], [ 91.9306063, 27.4655593 ], [ 91.9301304, 27.4661304 ], [ 91.9295355, 27.4670346 ], [ 91.9288931, 27.4679864 ], [ 91.9281555, 27.4690333 ], [ 91.9273464, 27.4700565 ], [ 91.926466, 27.4711273 ], [ 91.9258236, 27.4719363 ], [ 91.9250146, 27.4727929 ], [ 91.9238724, 27.4737447 ], [ 91.9232538, 27.4740778 ], [ 91.9231586, 27.4739826 ], [ 91.9229206, 27.4736733 ], [ 91.9223496, 27.4734353 ], [ 91.9213264, 27.4731736 ], [ 91.920565, 27.4729356 ], [ 91.9199225, 27.4728643 ], [ 91.9190421, 27.4729594 ], [ 91.9186852, 27.4724598 ], [ 91.9181617, 27.4724598 ], [ 91.9173765, 27.4724835 ], [ 91.9163771, 27.4724598 ], [ 91.914997, 27.4723884 ], [ 91.9140453, 27.4723408 ], [ 91.9134266, 27.4721504 ], [ 91.9126414, 27.4718411 ], [ 91.911761, 27.4716983 ], [ 91.9110233, 27.4716507 ], [ 91.9107854, 27.4717459 ], [ 91.9101191, 27.4719601 ], [ 91.9093815, 27.4722932 ], [ 91.9086677, 27.4723646 ], [ 91.9081442, 27.4723646 ], [ 91.9074304, 27.4722218 ], [ 91.9069069, 27.4721028 ], [ 91.9060741, 27.4717221 ], [ 91.905384, 27.4714842 ], [ 91.903766, 27.471389 ], [ 91.9013627, 27.4712224 ], [ 91.9005299, 27.4710559 ], [ 91.8999826, 27.4709369 ], [ 91.8994116, 27.4707227 ], [ 91.8988881, 27.4706752 ], [ 91.8982932, 27.4707227 ], [ 91.8976746, 27.4708179 ], [ 91.8968893, 27.4708417 ], [ 91.8960803, 27.4709607 ], [ 91.8954141, 27.4711748 ], [ 91.8947716, 27.471508 ], [ 91.8938912, 27.472079 ], [ 91.8931774, 27.4724122 ], [ 91.8922732, 27.4726739 ], [ 91.8907979, 27.4733639 ], [ 91.8901317, 27.4737447 ], [ 91.8893227, 27.4741968 ], [ 91.8884423, 27.4745775 ], [ 91.887776, 27.4748868 ], [ 91.8874191, 27.4748392 ], [ 91.8868718, 27.4746489 ], [ 91.8864435, 27.4742919 ], [ 91.8861104, 27.474173 ], [ 91.8858486, 27.4743633 ], [ 91.8855393, 27.4745775 ], [ 91.8846589, 27.4748154 ], [ 91.884064, 27.4748154 ], [ 91.8831123, 27.474744 ], [ 91.8817798, 27.4743633 ], [ 91.880947, 27.4741968 ], [ 91.8801855, 27.4740778 ], [ 91.8797334, 27.4739112 ], [ 91.8791386, 27.4735543 ], [ 91.8786389, 27.4729594 ], [ 91.8780916, 27.4722932 ], [ 91.8775205, 27.4718649 ], [ 91.8771636, 27.4716507 ], [ 91.8767115, 27.4712462 ], [ 91.8763784, 27.4707465 ], [ 91.8756646, 27.4706514 ], [ 91.8753314, 27.4705324 ], [ 91.8745462, 27.4703182 ], [ 91.8740227, 27.4702231 ], [ 91.8733803, 27.4701993 ], [ 91.8727616, 27.4702231 ], [ 91.8722381, 27.470342 ], [ 91.8717622, 27.4706514 ], [ 91.8710722, 27.4713414 ], [ 91.8705487, 27.4718173 ], [ 91.8703584, 27.4723408 ], [ 91.870287, 27.4728405 ], [ 91.8701442, 27.4730546 ], [ 91.8700014, 27.4737923 ], [ 91.8698111, 27.4744585 ], [ 91.86993, 27.4748392 ], [ 91.870049, 27.4752675 ], [ 91.8700252, 27.475672 ], [ 91.8698825, 27.4762907 ], [ 91.8695493, 27.4770997 ], [ 91.86924, 27.4780515 ], [ 91.8689545, 27.4788843 ], [ 91.8687879, 27.4790033 ], [ 91.8680741, 27.4794078 ], [ 91.8676696, 27.4796457 ], [ 91.8672175, 27.4799551 ], [ 91.8667416, 27.4802644 ], [ 91.866456, 27.4805261 ], [ 91.8661943, 27.480883 ], [ 91.8658374, 27.481121 ], [ 91.8654329, 27.4811924 ], [ 91.8648142, 27.4812162 ], [ 91.8646476, 27.4814541 ], [ 91.8643621, 27.4819062 ], [ 91.8641004, 27.4822631 ], [ 91.8637672, 27.4826438 ], [ 91.8631248, 27.4832863 ], [ 91.8628631, 27.4836908 ], [ 91.862411, 27.4847616 ], [ 91.8621492, 27.4847378 ], [ 91.8617209, 27.4844998 ], [ 91.861245, 27.4842143 ], [ 91.8606977, 27.4838336 ], [ 91.8601505, 27.4834291 ], [ 91.8595556, 27.4830722 ], [ 91.8590083, 27.4829056 ], [ 91.8580803, 27.4826676 ], [ 91.8575093, 27.4824773 ], [ 91.856843, 27.482049 ], [ 91.8563433, 27.4816445 ], [ 91.8559864, 27.4815731 ], [ 91.8556771, 27.4815969 ], [ 91.8554629, 27.4817634 ], [ 91.8552012, 27.4820014 ], [ 91.8549157, 27.4821442 ], [ 91.8546777, 27.4825963 ], [ 91.8545111, 27.4830484 ], [ 91.8544636, 27.4835956 ], [ 91.8545349, 27.4840715 ], [ 91.854416, 27.4841905 ], [ 91.8535594, 27.4846188 ], [ 91.8531311, 27.4846664 ], [ 91.8528217, 27.4846188 ], [ 91.8524886, 27.484714 ], [ 91.8522982, 27.4849519 ], [ 91.8520127, 27.4851185 ], [ 91.8515606, 27.485285 ], [ 91.8509657, 27.485523 ], [ 91.8507754, 27.4856658 ], [ 91.8506088, 27.4858561 ], [ 91.8502281, 27.4859989 ], [ 91.8498236, 27.4861654 ], [ 91.849657, 27.4863082 ], [ 91.8494905, 27.4863796 ], [ 91.8492049, 27.4863558 ], [ 91.8489908, 27.4860227 ], [ 91.8487291, 27.4856182 ], [ 91.8485863, 27.4850947 ], [ 91.8481104, 27.4843333 ], [ 91.8478249, 27.4841429 ], [ 91.8475631, 27.4840239 ], [ 91.8469445, 27.4838574 ], [ 91.8463496, 27.4831911 ], [ 91.8460165, 27.4825011 ], [ 91.8458499, 27.4818824 ], [ 91.8455882, 27.4812876 ], [ 91.8452788, 27.4809306 ], [ 91.8448505, 27.4805261 ], [ 91.844565, 27.4799789 ], [ 91.8442795, 27.4793364 ], [ 91.8441101, 27.478549 ], [ 91.843875, 27.4779087 ], [ 91.8433753, 27.4773376 ], [ 91.842709, 27.4767904 ], [ 91.8422093, 27.4763859 ], [ 91.8416383, 27.4761003 ], [ 91.8407579, 27.47591 ], [ 91.840163, 27.4756482 ], [ 91.8397585, 27.4751961 ], [ 91.8392588, 27.4746964 ], [ 91.8382832, 27.4742681 ], [ 91.837617, 27.4739112 ], [ 91.8370935, 27.4733164 ], [ 91.8366652, 27.4727215 ], [ 91.8359989, 27.472436 ], [ 91.8349996, 27.4720077 ], [ 91.8338574, 27.4717221 ], [ 91.8321204, 27.4714842 ], [ 91.8314304, 27.4702231 ], [ 91.8308831, 27.4695092 ], [ 91.8303596, 27.4691761 ], [ 91.8295982, 27.4689857 ], [ 91.8290033, 27.4685336 ], [ 91.8283609, 27.4681767 ], [ 91.8279326, 27.4681291 ], [ 91.8273139, 27.4683195 ], [ 91.826957, 27.4684385 ], [ 91.8264811, 27.4683909 ], [ 91.82591, 27.4681529 ], [ 91.8255293, 27.4681529 ], [ 91.825101, 27.4682957 ], [ 91.8242206, 27.4687954 ], [ 91.823245, 27.4695092 ], [ 91.8222457, 27.4702707 ], [ 91.821508, 27.4709607 ], [ 91.8208894, 27.4717935 ], [ 91.8202945, 27.4721266 ], [ 91.8196758, 27.4723408 ], [ 91.819081, 27.4724122 ], [ 91.8183671, 27.4725549 ], [ 91.8176771, 27.4725311 ], [ 91.8171298, 27.4725787 ], [ 91.8162732, 27.473007 ], [ 91.815488, 27.4735305 ], [ 91.8145362, 27.474054 ], [ 91.8138462, 27.4742206 ], [ 91.8132513, 27.4742919 ], [ 91.8122519, 27.4742206 ], [ 91.8114667, 27.4740778 ], [ 91.8109194, 27.4741254 ], [ 91.8103483, 27.4744347 ], [ 91.8097773, 27.4746964 ], [ 91.8078737, 27.4751961 ], [ 91.8063033, 27.4755768 ], [ 91.8052087, 27.4750058 ], [ 91.8044298, 27.4745538 ], [ 91.803805, 27.4738874 ], [ 91.8025555, 27.4727628 ], [ 91.8018057, 27.4723879 ], [ 91.8009727, 27.4723463 ], [ 91.799973, 27.4727211 ], [ 91.7992233, 27.4732626 ], [ 91.7981404, 27.4738041 ], [ 91.7976822, 27.4738041 ], [ 91.7970991, 27.4735125 ], [ 91.7965992, 27.473096 ], [ 91.7958078, 27.4716798 ], [ 91.7945999, 27.4710967 ], [ 91.793392, 27.4705552 ], [ 91.7921841, 27.4704303 ], [ 91.7912261, 27.4704303 ], [ 91.7904347, 27.4706385 ], [ 91.7886437, 27.4704303 ], [ 91.787644, 27.4701804 ], [ 91.7869776, 27.4698472 ], [ 91.7862695, 27.469389 ], [ 91.7849783, 27.4688475 ], [ 91.783937, 27.4680145 ], [ 91.7825625, 27.4673897 ], [ 91.7801883, 27.4663484 ], [ 91.7781057, 27.4654737 ], [ 91.777356, 27.4652654 ], [ 91.7759815, 27.4653071 ], [ 91.7741904, 27.465432 ], [ 91.7731075, 27.465557 ], [ 91.7720245, 27.4658069 ], [ 91.7708166, 27.4660985 ], [ 91.7694837, 27.46639 ], [ 91.7688173, 27.4667233 ], [ 91.7675677, 27.4669732 ], [ 91.7661099, 27.4671814 ], [ 91.7662349, 27.468306 ], [ 91.7664431, 27.4695972 ], [ 91.7664015, 27.4701804 ], [ 91.7664848, 27.4705552 ], [ 91.7663182, 27.4709718 ], [ 91.7663182, 27.4718048 ], [ 91.7662349, 27.4724712 ], [ 91.7663182, 27.4736791 ], [ 91.7656934, 27.4738874 ], [ 91.7648603, 27.4739707 ], [ 91.764069, 27.4741373 ], [ 91.763111, 27.4742623 ], [ 91.7623612, 27.4744289 ], [ 91.7614449, 27.4744289 ], [ 91.760237, 27.4747621 ], [ 91.759279, 27.475012 ], [ 91.7586542, 27.475012 ], [ 91.7578628, 27.4753452 ], [ 91.7572797, 27.4753036 ], [ 91.7566549, 27.475012 ], [ 91.7559052, 27.4752203 ], [ 91.7551971, 27.4753869 ], [ 91.7544473, 27.4754702 ], [ 91.7536976, 27.4754702 ], [ 91.7531145, 27.4753452 ], [ 91.7526146, 27.4753452 ], [ 91.7519899, 27.4755118 ], [ 91.7514067, 27.4755118 ], [ 91.7507403, 27.4753452 ], [ 91.7498656, 27.4749287 ], [ 91.7497406, 27.4747621 ], [ 91.7493241, 27.4738458 ], [ 91.7485744, 27.4727211 ], [ 91.7476997, 27.4720547 ], [ 91.7464501, 27.4714716 ], [ 91.7454505, 27.4712217 ], [ 91.7437427, 27.4710551 ], [ 91.7426598, 27.4709718 ], [ 91.7415768, 27.4707635 ], [ 91.7407438, 27.470347 ], [ 91.7388278, 27.4699721 ], [ 91.7370784, 27.4698472 ], [ 91.7352041, 27.4698472 ], [ 91.7332464, 27.4697222 ], [ 91.7308306, 27.4696389 ], [ 91.729831, 27.4695972 ], [ 91.7287064, 27.4698472 ], [ 91.72779, 27.470347 ], [ 91.726957, 27.4709301 ], [ 91.7262072, 27.4710967 ], [ 91.7251659, 27.4710551 ], [ 91.7242912, 27.4709718 ], [ 91.7232083, 27.47118 ], [ 91.7218338, 27.4719298 ], [ 91.7208758, 27.4721797 ], [ 91.7197095, 27.4724712 ], [ 91.71821, 27.473221 ], [ 91.7165439, 27.4738458 ], [ 91.7147529, 27.4746371 ], [ 91.7133784, 27.4754702 ], [ 91.71367, 27.477053 ], [ 91.7137949, 27.478011 ], [ 91.7139615, 27.4789273 ], [ 91.7142531, 27.4800936 ], [ 91.7144666, 27.4814351 ], [ 91.7144666, 27.4823067 ], [ 91.7144939, 27.4830967 ], [ 91.7144121, 27.4842951 ], [ 91.7144666, 27.4853302 ], [ 91.7147118, 27.4864197 ], [ 91.7149024, 27.4875092 ], [ 91.7149841, 27.4885987 ], [ 91.7150659, 27.4893069 ], [ 91.7152293, 27.4900696 ], [ 91.715311, 27.4906144 ], [ 91.7152565, 27.4912136 ], [ 91.7152021, 27.4921125 ], [ 91.7152565, 27.4927117 ], [ 91.7155017, 27.4931748 ], [ 91.7154744, 27.4943732 ], [ 91.7154472, 27.4950542 ], [ 91.7155017, 27.4954628 ], [ 91.7156923, 27.4958713 ], [ 91.7163461, 27.4966612 ], [ 91.7167001, 27.4973422 ], [ 91.7170542, 27.4982955 ], [ 91.716455, 27.4982955 ], [ 91.7156923, 27.4983228 ], [ 91.714848, 27.4983228 ], [ 91.7141942, 27.4982955 ], [ 91.713595, 27.4981321 ], [ 91.713132, 27.4979142 ], [ 91.7128596, 27.497778 ], [ 91.7121514, 27.497778 ], [ 91.7114977, 27.4975873 ], [ 91.7110619, 27.4974511 ], [ 91.7103264, 27.4975601 ], [ 91.7098361, 27.497669 ], [ 91.7090462, 27.4978597 ], [ 91.7082836, 27.4980776 ], [ 91.707875, 27.4981048 ], [ 91.7073575, 27.4979687 ], [ 91.7070306, 27.4979414 ], [ 91.7066765, 27.4980776 ], [ 91.7064041, 27.4983772 ], [ 91.7059139, 27.4988675 ], [ 91.7052601, 27.4994123 ], [ 91.7046609, 27.4998208 ], [ 91.7040344, 27.5000115 ], [ 91.7031628, 27.5001477 ], [ 91.702618, 27.5001477 ], [ 91.7022367, 27.5001749 ], [ 91.7016375, 27.5003111 ], [ 91.7007659, 27.500638 ], [ 91.7000577, 27.5009104 ], [ 91.6994857, 27.5013189 ], [ 91.6991316, 27.501782 ], [ 91.698614, 27.5021361 ], [ 91.698151, 27.5025174 ], [ 91.6977152, 27.5029532 ], [ 91.6975518, 27.5032801 ], [ 91.6975245, 27.5037159 ], [ 91.6974428, 27.5042879 ], [ 91.6972521, 27.5047782 ], [ 91.6970615, 27.5052957 ], [ 91.696898, 27.5053502 ], [ 91.6965167, 27.5053774 ], [ 91.6961354, 27.5054047 ], [ 91.6952638, 27.5055136 ], [ 91.6945283, 27.5055681 ], [ 91.6937384, 27.5055136 ], [ 91.6930847, 27.5054864 ], [ 91.6925944, 27.5053229 ], [ 91.6924038, 27.5051595 ], [ 91.6922131, 27.5047782 ], [ 91.6919952, 27.5043424 ], [ 91.6918318, 27.5041517 ], [ 91.691287, 27.5039338 ], [ 91.6906605, 27.5036887 ], [ 91.6897889, 27.5034435 ], [ 91.6890262, 27.5031167 ], [ 91.688318, 27.5027626 ], [ 91.6876643, 27.5022995 ], [ 91.6870378, 27.501782 ], [ 91.6866565, 27.5014824 ], [ 91.6854308, 27.5003928 ], [ 91.6853491, 27.5002567 ], [ 91.6854853, 27.500066 ], [ 91.6856759, 27.4997664 ], [ 91.6857849, 27.4993578 ], [ 91.6857849, 27.4991399 ], [ 91.6851857, 27.4978052 ], [ 91.6845319, 27.4963888 ], [ 91.6839872, 27.4953538 ], [ 91.6830066, 27.4943732 ], [ 91.6819988, 27.4936923 ], [ 91.6811272, 27.4932837 ], [ 91.6799832, 27.4929841 ], [ 91.6786213, 27.4928751 ], [ 91.676878, 27.4928751 ], [ 91.6751076, 27.4929024 ], [ 91.6737457, 27.4929568 ], [ 91.6719479, 27.4927662 ], [ 91.6706677, 27.4924666 ], [ 91.6698234, 27.492058 ], [ 91.668979, 27.4915949 ], [ 91.6679167, 27.4908323 ], [ 91.6664186, 27.4894976 ], [ 91.6649477, 27.4882719 ], [ 91.6625508, 27.4864197 ], [ 91.6610799, 27.4853029 ], [ 91.6598815, 27.484622 ], [ 91.6587375, 27.4841317 ], [ 91.6577569, 27.4839955 ], [ 91.6565856, 27.4839138 ], [ 91.6553519, 27.4840948 ], [ 91.6543246, 27.4843259 ], [ 91.6536055, 27.48448 ], [ 91.6532459, 27.48448 ], [ 91.6522186, 27.4842489 ], [ 91.6515251, 27.4840691 ], [ 91.6514737, 27.4854303 ], [ 91.651294, 27.486021 ], [ 91.6511912, 27.4865347 ], [ 91.6512683, 27.4871511 ], [ 91.6513196, 27.4877161 ], [ 91.6512683, 27.4881271 ], [ 91.6510371, 27.4884866 ], [ 91.6505748, 27.4890003 ], [ 91.6502153, 27.4893855 ], [ 91.6496245, 27.4901047 ], [ 91.6492393, 27.4908238 ], [ 91.6490852, 27.4914659 ], [ 91.648854, 27.4922621 ], [ 91.6486999, 27.4929555 ], [ 91.6485458, 27.494214 ], [ 91.648289, 27.4952671 ], [ 91.6479808, 27.4960889 ], [ 91.647801, 27.4968594 ], [ 91.6476212, 27.497784 ], [ 91.6474671, 27.4990682 ], [ 91.6472103, 27.4998644 ], [ 91.6469791, 27.5004037 ], [ 91.6461316, 27.5007376 ], [ 91.6454125, 27.5009174 ], [ 91.6449758, 27.5011742 ], [ 91.6446676, 27.501842 ], [ 91.6442824, 27.5027666 ], [ 91.6439485, 27.5032032 ], [ 91.6436917, 27.5033317 ], [ 91.6430239, 27.5035114 ], [ 91.6417397, 27.5037683 ], [ 91.6403528, 27.5041022 ], [ 91.6394539, 27.5042819 ], [ 91.6384522, 27.5045131 ], [ 91.6378101, 27.5045901 ], [ 91.6373222, 27.5046672 ], [ 91.6364746, 27.5050011 ], [ 91.6356527, 27.5056175 ], [ 91.6353445, 27.5060798 ], [ 91.6349079, 27.5069017 ], [ 91.634574, 27.5077749 ], [ 91.634086, 27.5086995 ], [ 91.6332899, 27.5104203 ], [ 91.6330587, 27.5106258 ], [ 91.6317489, 27.510934 ], [ 91.6312095, 27.5114219 ], [ 91.6301308, 27.5118329 ], [ 91.6295914, 27.5120127 ], [ 91.6290778, 27.5128602 ], [ 91.6275111, 27.5133996 ], [ 91.6262012, 27.5142471 ], [ 91.6250455, 27.5141187 ], [ 91.6248812, 27.5140869 ], [ 91.6242493, 27.5139646 ], [ 91.6238284, 27.513886 ], [ 91.6237637, 27.5140391 ], [ 91.6235731, 27.5145839 ], [ 91.6235458, 27.5152376 ], [ 91.6236003, 27.515619 ], [ 91.6238727, 27.5160275 ], [ 91.6238999, 27.5163271 ], [ 91.623682, 27.5167085 ], [ 91.6234096, 27.5170898 ], [ 91.6234096, 27.5172805 ], [ 91.6235186, 27.5178797 ], [ 91.6234641, 27.518261 ], [ 91.6233007, 27.5184245 ], [ 91.6227014, 27.51837 ], [ 91.6223201, 27.5183972 ], [ 91.6218843, 27.5186969 ], [ 91.6216936, 27.5191599 ], [ 91.6216936, 27.5197319 ], [ 91.6215847, 27.5201677 ], [ 91.6206858, 27.521693 ], [ 91.6207403, 27.5224012 ], [ 91.6206313, 27.523055 ], [ 91.6196508, 27.5240628 ], [ 91.6190788, 27.5247437 ], [ 91.6185612, 27.525343 ], [ 91.6180982, 27.5260511 ], [ 91.6177169, 27.5269228 ], [ 91.61739, 27.527522 ], [ 91.6172811, 27.5281485 ], [ 91.6171449, 27.5286115 ], [ 91.6166818, 27.5291835 ], [ 91.6161643, 27.52981 ], [ 91.6158102, 27.5305999 ], [ 91.6148841, 27.5316894 ], [ 91.6143938, 27.5324521 ], [ 91.6139852, 27.5332965 ], [ 91.6136584, 27.5341681 ], [ 91.6136312, 27.5348218 ], [ 91.6137673, 27.5361565 ], [ 91.6139852, 27.5371098 ], [ 91.6142756, 27.5381486 ], [ 91.614228, 27.5384103 ], [ 91.6141091, 27.5386482 ], [ 91.6137045, 27.5389814 ], [ 91.6135856, 27.5393383 ], [ 91.6134666, 27.5397428 ], [ 91.6130621, 27.540409 ], [ 91.6124672, 27.5412419 ], [ 91.6120865, 27.5418129 ], [ 91.6123245, 27.5424316 ], [ 91.6124196, 27.5428599 ], [ 91.6124672, 27.5436689 ], [ 91.6123007, 27.5436213 ], [ 91.6119913, 27.5435975 ], [ 91.610992, 27.5433596 ], [ 91.6099212, 27.5431216 ], [ 91.6090408, 27.5430027 ], [ 91.6079225, 27.5428599 ], [ 91.60728, 27.5427885 ], [ 91.6065662, 27.5427171 ], [ 91.605662, 27.5426457 ], [ 91.6051385, 27.5425981 ], [ 91.6045674, 27.5425981 ], [ 91.6039012, 27.5425268 ], [ 91.6034491, 27.5422888 ], [ 91.602997, 27.5418605 ], [ 91.6028066, 27.5415512 ], [ 91.6023069, 27.541456 ], [ 91.6016883, 27.5414084 ], [ 91.6007841, 27.5413846 ], [ 91.599285, 27.5414322 ], [ 91.5984046, 27.541456 ], [ 91.5977384, 27.5413132 ], [ 91.5970721, 27.5411467 ], [ 91.5963821, 27.5411943 ], [ 91.5960251, 27.5413608 ], [ 91.5957158, 27.5415988 ], [ 91.5952875, 27.5419319 ], [ 91.5949068, 27.5420747 ], [ 91.5943595, 27.542146 ], [ 91.5934553, 27.5430027 ], [ 91.5934791, 27.5434548 ], [ 91.5935029, 27.5440258 ], [ 91.5934791, 27.5444779 ], [ 91.5934077, 27.5449538 ], [ 91.593146, 27.5455011 ], [ 91.5928605, 27.5459294 ], [ 91.5924322, 27.5463815 ], [ 91.5920752, 27.5465718 ], [ 91.5918135, 27.5468336 ], [ 91.5915042, 27.5474285 ], [ 91.5911235, 27.5479281 ], [ 91.5910283, 27.5483326 ], [ 91.5909331, 27.5487134 ], [ 91.5906, 27.5491655 ], [ 91.5902906, 27.5495462 ], [ 91.5901241, 27.5499031 ], [ 91.5899099, 27.5504266 ], [ 91.5895768, 27.5509976 ], [ 91.5892199, 27.5515211 ], [ 91.5890533, 27.5519256 ], [ 91.588744, 27.5524491 ], [ 91.5884347, 27.5527346 ], [ 91.5877446, 27.553044 ], [ 91.5872687, 27.5533533 ], [ 91.586769, 27.5537578 ], [ 91.5861504, 27.5541385 ], [ 91.5855317, 27.5544479 ], [ 91.5845799, 27.5548524 ], [ 91.5841278, 27.5550427 ], [ 91.5838899, 27.5552331 ], [ 91.5835806, 27.5557804 ], [ 91.583295, 27.5560897 ], [ 91.5828905, 27.5562563 ], [ 91.5822481, 27.5566846 ], [ 91.5819625, 27.5570177 ], [ 91.5821529, 27.5575174 ], [ 91.5821291, 27.5579219 ], [ 91.5821529, 27.5585405 ], [ 91.5822957, 27.5591592 ], [ 91.5827953, 27.5598492 ], [ 91.5832474, 27.5604441 ], [ 91.5834616, 27.5608724 ], [ 91.5834854, 27.5613721 ], [ 91.5835092, 27.5620383 ], [ 91.5835806, 27.5625856 ], [ 91.5837947, 27.5632519 ], [ 91.5838899, 27.5638943 ], [ 91.5836995, 27.5645368 ], [ 91.583414, 27.5650841 ], [ 91.5831999, 27.5657265 ], [ 91.5826764, 27.5664879 ], [ 91.5820101, 27.567178 ], [ 91.5815818, 27.5679632 ], [ 91.5813439, 27.5687722 ], [ 91.5811535, 27.5690578 ], [ 91.5808442, 27.5694147 ], [ 91.5802969, 27.5697954 ], [ 91.5798448, 27.5701285 ], [ 91.5785837, 27.5705092 ], [ 91.5771084, 27.5708186 ], [ 91.5761567, 27.5711517 ], [ 91.5748004, 27.5718893 ], [ 91.5741579, 27.5722224 ], [ 91.5738724, 27.5725794 ], [ 91.5735868, 27.5732694 ], [ 91.5730871, 27.5741736 ], [ 91.5724209, 27.5749826 ], [ 91.5719688, 27.5756251 ], [ 91.5717784, 27.5762675 ], [ 91.5717546, 27.5768386 ], [ 91.5718736, 27.5773383 ], [ 91.5722305, 27.5782187 ], [ 91.5723019, 27.5787897 ], [ 91.5722305, 27.5793846 ], [ 91.5720164, 27.5796939 ], [ 91.5713977, 27.5800509 ], [ 91.5704935, 27.5806457 ], [ 91.5695655, 27.5812168 ], [ 91.5686138, 27.581883 ], [ 91.5679475, 27.5824065 ], [ 91.5669957, 27.583049 ], [ 91.5663771, 27.5835249 ], [ 91.5659726, 27.5839056 ], [ 91.5659726, 27.5841435 ], [ 91.5660677, 27.5843101 ], [ 91.5663771, 27.5849526 ], [ 91.5666626, 27.5855236 ], [ 91.5668768, 27.5860233 ], [ 91.5669481, 27.5864754 ], [ 91.5670195, 27.5869751 ], [ 91.5672337, 27.5874272 ], [ 91.567543, 27.5880221 ], [ 91.5677809, 27.5886407 ], [ 91.5681141, 27.589188 ], [ 91.5684948, 27.5899256 ], [ 91.5687327, 27.5904729 ], [ 91.5688517, 27.5909726 ], [ 91.5691372, 27.5914247 ], [ 91.5694704, 27.5918768 ], [ 91.5696607, 27.5923051 ], [ 91.5698749, 27.5929713 ], [ 91.5700652, 27.5936138 ], [ 91.570208, 27.5941611 ], [ 91.570327, 27.5945656 ], [ 91.5704935, 27.5948511 ], [ 91.5707553, 27.5952556 ], [ 91.5710408, 27.5956839 ], [ 91.5714453, 27.5963026 ], [ 91.571826, 27.5967547 ], [ 91.5722781, 27.5970878 ], [ 91.5732299, 27.5975875 ], [ 91.5739913, 27.5979444 ], [ 91.5745624, 27.5983251 ], [ 91.5749669, 27.5987296 ], [ 91.5756332, 27.5993007 ], [ 91.5765374, 27.6000145 ], [ 91.5775843, 27.6007998 ], [ 91.5781792, 27.6012757 ], [ 91.5788454, 27.6017278 ], [ 91.5797258, 27.6022036 ], [ 91.5803207, 27.6027033 ], [ 91.5805349, 27.6030365 ], [ 91.5807966, 27.6035599 ], [ 91.5814153, 27.60425 ], [ 91.5817484, 27.6046069 ], [ 91.5820815, 27.6050352 ], [ 91.5825098, 27.6056063 ], [ 91.5831999, 27.6062487 ], [ 91.5835092, 27.6065819 ], [ 91.5838661, 27.6071291 ], [ 91.5841516, 27.6076288 ], [ 91.5842468, 27.6080333 ], [ 91.5844848, 27.6084378 ], [ 91.5841516, 27.608652 ], [ 91.5835568, 27.6092231 ], [ 91.5830333, 27.6096752 ], [ 91.5824146, 27.610389 ], [ 91.5819625, 27.6108649 ], [ 91.581677, 27.6113646 ], [ 91.5812249, 27.6120546 ], [ 91.5807014, 27.6126257 ], [ 91.5797496, 27.6133871 ], [ 91.5788216, 27.6141723 ], [ 91.5778223, 27.6149813 ], [ 91.5772988, 27.6155048 ], [ 91.5768943, 27.6161711 ], [ 91.5764898, 27.6168849 ], [ 91.5759901, 27.6174084 ], [ 91.5754904, 27.6177415 ], [ 91.5748242, 27.6183364 ], [ 91.5742055, 27.6189313 ], [ 91.5736582, 27.6195499 ], [ 91.572992, 27.6200496 ], [ 91.5723971, 27.6204541 ], [ 91.5719212, 27.6205731 ], [ 91.5714929, 27.6207158 ], [ 91.5708505, 27.6211679 ], [ 91.5700652, 27.621739 ], [ 91.5694942, 27.6220959 ], [ 91.5689707, 27.6222387 ], [ 91.5683282, 27.6224053 ], [ 91.5680189, 27.6226432 ], [ 91.5675906, 27.6232619 ], [ 91.5669481, 27.6239757 ], [ 91.5662819, 27.6245944 ], [ 91.5656632, 27.625213 ], [ 91.5650208, 27.6258079 ], [ 91.5650446, 27.6263552 ], [ 91.5650922, 27.62695 ], [ 91.5650684, 27.6276639 ], [ 91.5649018, 27.6286395 ], [ 91.5645211, 27.6288536 ], [ 91.5641404, 27.6290916 ], [ 91.5633076, 27.6295199 ], [ 91.5627841, 27.629853 ], [ 91.5624985, 27.6303051 ], [ 91.5624034, 27.6308286 ], [ 91.562332, 27.6314472 ], [ 91.5623082, 27.6322086 ], [ 91.5624272, 27.6326845 ], [ 91.5626175, 27.633208 ], [ 91.5628793, 27.633446 ], [ 91.563141, 27.6337791 ], [ 91.5632124, 27.6341598 ], [ 91.5632838, 27.6348498 ], [ 91.56326, 27.6354209 ], [ 91.5631886, 27.6360158 ], [ 91.5631172, 27.6366582 ], [ 91.5630934, 27.6372293 ], [ 91.5631172, 27.6378956 ], [ 91.5631886, 27.6383714 ], [ 91.5634027, 27.6389663 ], [ 91.5635693, 27.6397753 ], [ 91.5638072, 27.6405843 ], [ 91.5640452, 27.6412268 ], [ 91.5643307, 27.6418217 ], [ 91.5648542, 27.6425355 ], [ 91.5655205, 27.6432493 ], [ 91.5661153, 27.6437966 ], [ 91.5666626, 27.644677 ], [ 91.5672813, 27.6454622 ], [ 91.5675668, 27.6459143 ], [ 91.5678047, 27.6464378 ], [ 91.5679475, 27.6468899 ], [ 91.5680189, 27.6473658 ], [ 91.5683282, 27.6478655 ], [ 91.5688041, 27.6483652 ], [ 91.5690421, 27.6487221 ], [ 91.5693038, 27.6492456 ], [ 91.5696607, 27.6497453 ], [ 91.5700652, 27.6501974 ], [ 91.5703746, 27.6506971 ], [ 91.5707791, 27.6516964 ], [ 91.571017, 27.6524341 ], [ 91.5713263, 27.6532669 ], [ 91.5716833, 27.6539569 ], [ 91.5720878, 27.6552656 ], [ 91.5723495, 27.6561936 ], [ 91.5727064, 27.657193 ], [ 91.5727778, 27.6579306 ], [ 91.5727302, 27.6584065 ], [ 91.5726113, 27.6592393 ], [ 91.5725875, 27.6598104 ], [ 91.572635, 27.6603815 ], [ 91.5728492, 27.6608336 ], [ 91.5730871, 27.6610239 ], [ 91.5735392, 27.6612143 ], [ 91.5741817, 27.6613808 ], [ 91.5750621, 27.6617378 ], [ 91.5756332, 27.6620471 ], [ 91.5764184, 27.6625944 ], [ 91.5770133, 27.6629513 ], [ 91.5775843, 27.6630227 ], [ 91.5782506, 27.6629751 ], [ 91.5789882, 27.6628799 ], [ 91.5797258, 27.6626895 ], [ 91.5804635, 27.6624754 ], [ 91.5810345, 27.6623564 ], [ 91.581558, 27.6624992 ], [ 91.5820339, 27.6628561 ], [ 91.5830095, 27.6636413 ], [ 91.5839851, 27.664379 ], [ 91.5848179, 27.6651642 ], [ 91.585151, 27.6654735 ], [ 91.5854128, 27.665878 ], [ 91.5862932, 27.6661873 ], [ 91.5877684, 27.6671867 ], [ 91.5888154, 27.6678768 ], [ 91.5895292, 27.6683527 ], [ 91.5902669, 27.6685668 ], [ 91.5910283, 27.6687334 ], [ 91.5920752, 27.6691141 ], [ 91.5930032, 27.6694948 ], [ 91.593955, 27.6700183 ], [ 91.5946689, 27.670399 ], [ 91.5946451, 27.6706607 ], [ 91.5945023, 27.6710652 ], [ 91.5942168, 27.6717315 ], [ 91.5941454, 27.6722074 ], [ 91.5944309, 27.6729212 ], [ 91.5947878, 27.6737064 ], [ 91.5952637, 27.674682 ], [ 91.5956682, 27.6759669 ], [ 91.5959538, 27.6768711 ], [ 91.5960014, 27.6772994 ], [ 91.5959062, 27.6778229 ], [ 91.5959538, 27.6788223 ], [ 91.5960489, 27.6792744 ], [ 91.5963583, 27.6798692 ], [ 91.5969056, 27.6804879 ], [ 91.5978811, 27.6808448 ], [ 91.5985712, 27.6809638 ], [ 91.5993802, 27.6810352 ], [ 91.6000464, 27.6810352 ], [ 91.6011886, 27.68163 ], [ 91.6020452, 27.6821297 ], [ 91.6028542, 27.6827246 ], [ 91.603925, 27.6832957 ], [ 91.6044246, 27.6834622 ], [ 91.6047816, 27.683605 ], [ 91.6048054, 27.6838429 ], [ 91.6048767, 27.6841047 ], [ 91.6049957, 27.6844854 ], [ 91.6050909, 27.6846996 ], [ 91.6053288, 27.6850803 ], [ 91.6055192, 27.68558 ], [ 91.6056144, 27.6860558 ], [ 91.6056382, 27.6865793 ], [ 91.6057096, 27.6870076 ], [ 91.6060665, 27.688007 ], [ 91.6062092, 27.6884591 ], [ 91.606471, 27.689054 ], [ 91.6067327, 27.6891491 ], [ 91.6070658, 27.6892205 ], [ 91.6072324, 27.6892681 ], [ 91.6073276, 27.6895299 ], [ 91.6074466, 27.689863 ], [ 91.6076131, 27.6903151 ], [ 91.6077797, 27.6906244 ], [ 91.6078749, 27.6907196 ], [ 91.6085054, 27.6907077 ], [ 91.6094334, 27.6908267 ], [ 91.6101948, 27.6909218 ], [ 91.6110514, 27.691136 ], [ 91.6118605, 27.6915405 ], [ 91.6124791, 27.6919926 ], [ 91.6129074, 27.6923019 ], [ 91.6134547, 27.6925161 ], [ 91.6142399, 27.6926826 ], [ 91.6144779, 27.6926826 ], [ 91.6150014, 27.6926351 ], [ 91.6153821, 27.6926113 ], [ 91.6161197, 27.6927778 ], [ 91.6167384, 27.6929206 ], [ 91.617357, 27.6931347 ], [ 91.6180471, 27.6933489 ], [ 91.6185943, 27.6936344 ], [ 91.6193082, 27.6938724 ], [ 91.6199982, 27.6940151 ], [ 91.6207121, 27.6942769 ], [ 91.6213545, 27.6945862 ], [ 91.6219256, 27.6948718 ], [ 91.6226156, 27.6952049 ], [ 91.6232581, 27.6954428 ], [ 91.6238054, 27.6956332 ], [ 91.6243526, 27.6959425 ], [ 91.624662, 27.696228 ], [ 91.6249237, 27.6965612 ], [ 91.6256613, 27.6968229 ], [ 91.6265417, 27.6973702 ], [ 91.6276601, 27.6981554 ], [ 91.6283025, 27.6987027 ], [ 91.628826, 27.6993451 ], [ 91.6290878, 27.699821 ], [ 91.6293257, 27.7004635 ], [ 91.6295399, 27.7011773 ], [ 91.6292543, 27.7025336 ], [ 91.6290878, 27.7032475 ], [ 91.629064, 27.7039613 ], [ 91.6290878, 27.70458 ], [ 91.6291591, 27.7051748 ], [ 91.6295637, 27.7059838 ], [ 91.6299444, 27.7067215 ], [ 91.6302537, 27.7076733 ], [ 91.6303727, 27.7082205 ], [ 91.6302061, 27.7086488 ], [ 91.629754, 27.7090533 ], [ 91.6293019, 27.7095768 ], [ 91.6291116, 27.7101241 ], [ 91.629064, 27.7107903 ], [ 91.6288022, 27.7115756 ], [ 91.6283263, 27.7124084 ], [ 91.6279456, 27.7131936 ], [ 91.6276839, 27.714074 ], [ 91.6271604, 27.7153827 ], [ 91.627208, 27.7156682 ], [ 91.6291591, 27.7161679 ], [ 91.6304203, 27.7165724 ], [ 91.6320383, 27.7174052 ], [ 91.6319312, 27.717899 ], [ 91.6318241, 27.7188627 ], [ 91.6317171, 27.7194337 ], [ 91.6321097, 27.7199691 ], [ 91.6325023, 27.7205045 ], [ 91.6328592, 27.7209685 ], [ 91.6337515, 27.7215396 ], [ 91.6346438, 27.7218965 ], [ 91.6344296, 27.7236097 ], [ 91.6345724, 27.7241808 ], [ 91.6353933, 27.7258583 ], [ 91.6361429, 27.7273573 ], [ 91.6375348, 27.7302127 ], [ 91.6379988, 27.7310336 ], [ 91.638213, 27.7318545 ], [ 91.6383558, 27.7328896 ], [ 91.6384628, 27.7338176 ], [ 91.6388554, 27.734924 ], [ 91.6392481, 27.7356379 ], [ 91.6392124, 27.7359948 ], [ 91.6385699, 27.7368871 ], [ 91.6376419, 27.7381363 ], [ 91.636821, 27.7396354 ], [ 91.6362856, 27.7407418 ], [ 91.635893, 27.7419553 ], [ 91.6355718, 27.7430261 ], [ 91.6352863, 27.7440612 ], [ 91.6352863, 27.7446679 ], [ 91.635429, 27.7452747 ], [ 91.6353219, 27.7460956 ], [ 91.6352506, 27.7465239 ], [ 91.635429, 27.7469879 ], [ 91.6358216, 27.7474459 ], [ 91.6363213, 27.7478742 ], [ 91.6367734, 27.7482788 ], [ 91.6371779, 27.7486119 ], [ 91.6374159, 27.7491354 ], [ 91.6376062, 27.7495399 ], [ 91.6382011, 27.7500158 ], [ 91.638796, 27.7503965 ], [ 91.6392243, 27.7508248 ], [ 91.6396288, 27.7512293 ], [ 91.6402712, 27.7513721 ], [ 91.6409851, 27.7516814 ], [ 91.6418893, 27.7523238 ], [ 91.6419131, 27.7524904 ], [ 91.6417227, 27.7528711 ], [ 91.6416275, 27.7530853 ], [ 91.6415323, 27.7533708 ], [ 91.6415085, 27.7537039 ], [ 91.6415799, 27.7541798 ], [ 91.6417465, 27.7548699 ], [ 91.6419606, 27.7552268 ], [ 91.6424365, 27.755893 ], [ 91.6427697, 27.7563451 ], [ 91.6430076, 27.7572493 ], [ 91.6431742, 27.757987 ], [ 91.6432456, 27.7582487 ], [ 91.6432456, 27.7585342 ], [ 91.6430314, 27.7598191 ], [ 91.643099, 27.7608824 ], [ 91.6433129, 27.761923 ], [ 91.6437848, 27.762288 ], [ 91.644471, 27.762652 ], [ 91.6447928, 27.763124 ], [ 91.6447928, 27.763596 ], [ 91.6446431, 27.764196 ], [ 91.644664, 27.765032 ], [ 91.6446859, 27.766019 ], [ 91.6446859, 27.766962 ], [ 91.6447709, 27.768056 ], [ 91.644836, 27.769364 ], [ 91.644836, 27.770221 ], [ 91.6439782, 27.77035 ], [ 91.6432492, 27.770843 ], [ 91.6423909, 27.771551 ], [ 91.641469, 27.772365 ], [ 91.6402691, 27.773159 ], [ 91.6397971, 27.773523 ], [ 91.6394321, 27.774252 ], [ 91.6393039, 27.77481 ], [ 91.639111, 27.775603 ], [ 91.6388111, 27.776332 ], [ 91.6384252, 27.776911 ], [ 91.6379741, 27.777468 ], [ 91.6379528, 27.777747 ], [ 91.6379741, 27.778305 ], [ 91.6380821, 27.778691 ], [ 91.6380821, 27.778969 ], [ 91.6378891, 27.779312 ], [ 91.6378459, 27.779677 ], [ 91.637824, 27.780041 ], [ 91.6375241, 27.780685 ], [ 91.6374809, 27.781071 ], [ 91.6378672, 27.782421 ], [ 91.6380389, 27.783279 ], [ 91.6381249, 27.783922 ], [ 91.6380821, 27.78478 ], [ 91.637996, 27.785659 ], [ 91.6377811, 27.786324 ], [ 91.6373311, 27.786774 ], [ 91.636817, 27.787139 ], [ 91.636645, 27.78761 ], [ 91.6365809, 27.788039 ], [ 91.6364092, 27.78909 ], [ 91.6363451, 27.789819 ], [ 91.6361309, 27.790784 ], [ 91.6359592, 27.791513 ], [ 91.6360448, 27.791984 ], [ 91.6363879, 27.792456 ], [ 91.636645, 27.792799 ], [ 91.6367738, 27.793271 ], [ 91.636731, 27.793957 ], [ 91.636452, 27.794729 ], [ 91.636195, 27.795029 ], [ 91.6358299, 27.7952 ], [ 91.6352939, 27.795222 ], [ 91.6347578, 27.795458 ], [ 91.634737, 27.795908 ], [ 91.6346941, 27.796894 ], [ 91.6345649, 27.797773 ], [ 91.6345649, 27.798674 ], [ 91.6345868, 27.799189 ], [ 91.634823, 27.799424 ], [ 91.6348871, 27.799725 ], [ 91.634908, 27.800132 ], [ 91.6350581, 27.800432 ], [ 91.6351229, 27.800797 ], [ 91.634994, 27.801354 ], [ 91.6348439, 27.801976 ], [ 91.634544, 27.802555 ], [ 91.634458, 27.802919 ], [ 91.6344371, 27.803434 ], [ 91.6344371, 27.80382 ], [ 91.6343291, 27.804142 ], [ 91.6327642, 27.805149 ], [ 91.632164, 27.805685 ], [ 91.6316489, 27.806264 ], [ 91.6312201, 27.806564 ], [ 91.6310059, 27.807036 ], [ 91.6307921, 27.807529 ], [ 91.6302769, 27.807637 ], [ 91.6299979, 27.807808 ], [ 91.6299551, 27.80873 ], [ 91.6298269, 27.80933 ], [ 91.6286051, 27.810553 ], [ 91.6276831, 27.811153 ], [ 91.6265459, 27.812011 ], [ 91.6258169, 27.812525 ], [ 91.6250242, 27.813233 ], [ 91.624037, 27.813855 ], [ 91.6229009, 27.814262 ], [ 91.6218079, 27.814562 ], [ 91.6209068, 27.814841 ], [ 91.6200281, 27.815291 ], [ 91.6195781, 27.81572 ], [ 91.619149, 27.816578 ], [ 91.6183559, 27.817628 ], [ 91.6175189, 27.818572 ], [ 91.616962, 27.819022 ], [ 91.616018, 27.819815 ], [ 91.6152469, 27.82078 ], [ 91.6147321, 27.821466 ], [ 91.6140668, 27.821788 ], [ 91.6131449, 27.821852 ], [ 91.611923, 27.822109 ], [ 91.610572, 27.822817 ], [ 91.6096079, 27.823182 ], [ 91.6085351, 27.823503 ], [ 91.608021, 27.82346 ], [ 91.6068629, 27.823417 ], [ 91.605384, 27.823096 ], [ 91.603625, 27.822731 ], [ 91.601653, 27.822131 ], [ 91.6003451, 27.82138 ], [ 91.599466, 27.819236 ], [ 91.5986509, 27.818121 ], [ 91.598351, 27.817928 ], [ 91.597257, 27.818164 ], [ 91.596335, 27.818229 ], [ 91.5955628, 27.818379 ], [ 91.5941272, 27.818765 ], [ 91.5921331, 27.818915 ], [ 91.589517, 27.8184 ], [ 91.5882728, 27.818078 ], [ 91.586772, 27.817714 ], [ 91.586151, 27.817114 ], [ 91.5858079, 27.816492 ], [ 91.585615, 27.815784 ], [ 91.585507, 27.815506 ], [ 91.5851639, 27.815355 ], [ 91.5845429, 27.814626 ], [ 91.583964, 27.813919 ], [ 91.5836422, 27.813447 ], [ 91.581669, 27.812182 ], [ 91.5813691, 27.811818 ], [ 91.5804472, 27.811174 ], [ 91.5802538, 27.81126 ], [ 91.5766729, 27.811367 ], [ 91.5764371, 27.811475 ], [ 91.5761588, 27.812182 ], [ 91.5759871, 27.812632 ], [ 91.5758798, 27.813619 ], [ 91.5758161, 27.813726 ], [ 91.5756232, 27.813855 ], [ 91.574744, 27.814391 ], [ 91.573843, 27.815227 ], [ 91.572921, 27.815977 ], [ 91.572021, 27.816556 ], [ 91.571013, 27.817114 ], [ 91.569919, 27.817564 ], [ 91.5692853, 27.8174054 ], [ 91.568633, 27.818893 ], [ 91.5680542, 27.819965 ], [ 91.567454, 27.821166 ], [ 91.567368, 27.821466 ], [ 91.567368, 27.822517 ], [ 91.567003, 27.822946 ], [ 91.5670462, 27.824061 ], [ 91.5663391, 27.825347 ], [ 91.5658459, 27.826655 ], [ 91.5769184, 27.8327587 ], [ 91.5908445, 27.8312786 ], [ 91.5929902, 27.8337833 ], [ 91.6124952, 27.8388306 ], [ 91.6220439, 27.8363829 ], [ 91.6309703, 27.8323602 ], [ 91.6465271, 27.8316012 ], [ 91.6606892, 27.8289256 ], [ 91.6811813, 27.817862 ], [ 91.690451, 27.8120166 ], [ 91.6945065, 27.8060761 ], [ 91.6998923, 27.8007995 ], [ 91.7012871, 27.7955796 ], [ 91.7102993, 27.790929 ], [ 91.71605, 27.7876639 ], [ 91.7190111, 27.7843038 ], [ 91.7219508, 27.782937 ], [ 91.7289675, 27.7844937 ], [ 91.7340744, 27.7891066 ], [ 91.7414344, 27.7900178 ], [ 91.7623342, 27.7867717 ], [ 91.7727626, 27.7800324 ], [ 91.7774618, 27.7719067 ], [ 91.7802513, 27.7716219 ], [ 91.7824435, 27.7753733 ], [ 91.7855548, 27.7766073 ], [ 91.7880868, 27.7724495 ], [ 91.7914557, 27.7690889 ], [ 91.7939662, 27.7691269 ], [ 91.7994594, 27.7713483 ], [ 91.8013262, 27.7726773 ], [ 91.8023347, 27.7746898 ], [ 91.802678, 27.7775186 ], [ 91.7971054, 27.7865643 ], [ 91.8012337, 27.7886796 ], [ 91.8065949, 27.7877046 ], [ 91.8089156, 27.7853648 ], [ 91.8103961, 27.7831816 ], [ 91.8133144, 27.7819287 ], [ 91.8164687, 27.7817009 ], [ 91.8220262, 27.7846434 ], [ 91.8254594, 27.7876238 ], [ 91.8290429, 27.7877567 ], [ 91.8328838, 27.7844535 ], [ 91.8373041, 27.7812832 ], [ 91.8326907, 27.7760434 ], [ 91.8323903, 27.7720944 ], [ 91.8358755, 27.7663805 ], [ 91.8393087, 27.7666084 ], [ 91.8422845, 27.7660842 ], [ 91.8434539, 27.764062 ], [ 91.8457177, 27.762543 ], [ 91.8482282, 27.760967 ], [ 91.850245, 27.761111 ], [ 91.850288, 27.76108 ], [ 91.852297, 27.75959 ], [ 91.853384, 27.754663 ], [ 91.853831, 27.753941 ], [ 91.854664, 27.753637 ], [ 91.855652, 27.749444 ], [ 91.8573, 27.746275 ], [ 91.860143, 27.740808 ], [ 91.860143, 27.736302 ], [ 91.860988, 27.734471 ], [ 91.866339, 27.732641 ], [ 91.869156, 27.730106 ], [ 91.871268, 27.723628 ], [ 91.87676, 27.721657 ], [ 91.888308, 27.723628 ], [ 91.893236, 27.723769 ], [ 91.895771, 27.725459 ], [ 91.899996, 27.729824 ], [ 91.902108, 27.730388 ], [ 91.909149, 27.726304 ], [ 91.9181204, 27.7189519 ], [ 91.919288, 27.717995 ], [ 91.923372, 27.717573 ], [ 91.927174, 27.721657 ], [ 91.931821, 27.722924 ], [ 91.933652, 27.725036 ], [ 91.943087, 27.729402 ], [ 91.947593, 27.733486 ], [ 91.951959, 27.736865 ], [ 91.958718, 27.738133 ], [ 91.964492, 27.740808 ], [ 91.9659, 27.745878 ], [ 91.966886, 27.751792 ], [ 91.971392, 27.756158 ], [ 91.974912, 27.761509 ], [ 91.977447, 27.767283 ], [ 91.977447, 27.773197 ], [ 91.982376, 27.77714 ], [ 91.98815, 27.780238 ], [ 91.994768, 27.782914 ], [ 91.998148, 27.781224 ], [ 91.999697, 27.781787 ], [ 92.001669, 27.781928 ], [ 92.007161, 27.781646 ], [ 92.010399, 27.782491 ], [ 92.01223, 27.780661 ], [ 92.016877, 27.777703 ], [ 92.023637, 27.777422 ], [ 92.029833, 27.776154 ], [ 92.03617, 27.77545 ], [ 92.041944, 27.778971 ], [ 92.047436, 27.781646 ], [ 92.054477, 27.779816 ], [ 92.057434, 27.780379 ], [ 92.058983, 27.783195 ], [ 92.060814, 27.787983 ], [ 92.062222, 27.788828 ], [ 92.072502, 27.792067 ], [ 92.078135, 27.793616 ], [ 92.084472, 27.795025 ], [ 92.090386, 27.797278 ], [ 92.096864, 27.798404 ], [ 92.099258, 27.798968 ], [ 92.101652, 27.800376 ], [ 92.10813, 27.80277 ], [ 92.112354, 27.805727 ], [ 92.11686, 27.809247 ], [ 92.122775, 27.813613 ], [ 92.127281, 27.816993 ], [ 92.131224, 27.82164 ], [ 92.130943, 27.826005 ], [ 92.137843, 27.830652 ], [ 92.142349, 27.834173 ], [ 92.148123, 27.831356 ], [ 92.152066, 27.830934 ], [ 92.160515, 27.829526 ], [ 92.164036, 27.829667 ], [ 92.166711, 27.833328 ], [ 92.16995, 27.83882 ], [ 92.172203, 27.844312 ], [ 92.174457, 27.84741 ], [ 92.1782112, 27.8460774 ], [ 92.184033, 27.845579 ], [ 92.185863, 27.846143 ], [ 92.189243, 27.848959 ], [ 92.194172, 27.853465 ], [ 92.199241, 27.856845 ], [ 92.205296, 27.860506 ], [ 92.211915, 27.861774 ], [ 92.210929, 27.867407 ], [ 92.212901, 27.872617 ], [ 92.21966, 27.87318 ], [ 92.22473, 27.875152 ], [ 92.228814, 27.878532 ], [ 92.233602, 27.880503 ], [ 92.241065, 27.885713 ], [ 92.245431, 27.885432 ], [ 92.2505, 27.880785 ], [ 92.256274, 27.87825 ], [ 92.261484, 27.881911 ], [ 92.268244, 27.88515 ], [ 92.27458, 27.883319 ], [ 92.283593, 27.875856 ], [ 92.2881, 27.872899 ], [ 92.293451, 27.870505 ], [ 92.294436, 27.865154 ], [ 92.296267, 27.861915 ], [ 92.303027, 27.852902 ], [ 92.302886, 27.849663 ], [ 92.301196, 27.84403 ], [ 92.298098, 27.838679 ], [ 92.297394, 27.833469 ], [ 92.3019, 27.829385 ], [ 92.306124, 27.825301 ], [ 92.311898, 27.822485 ], [ 92.316405, 27.816993 ], [ 92.317954, 27.811782 ], [ 92.320488, 27.809811 ], [ 92.319784, 27.805727 ], [ 92.318376, 27.798827 ], [ 92.31908, 27.797418 ], [ 92.324713, 27.797278 ], [ 92.331332, 27.796855 ], [ 92.33795, 27.796292 ], [ 92.340485, 27.797137 ], [ 92.349498, 27.801925 ], [ 92.355412, 27.805023 ], [ 92.361186, 27.803474 ], [ 92.364847, 27.8046 ], [ 92.3671, 27.806149 ], [ 92.370621, 27.809107 ], [ 92.373156, 27.810233 ], [ 92.379915, 27.81136 ], [ 92.384421, 27.81319 ], [ 92.395405, 27.81995 ], [ 92.397518, 27.820372 ], [ 92.405122, 27.819668 ], [ 92.407798, 27.820795 ], [ 92.410192, 27.825724 ], [ 92.41174, 27.828399 ], [ 92.420472, 27.833187 ], [ 92.423851, 27.834877 ], [ 92.425682, 27.83375 ], [ 92.426386, 27.831356 ], [ 92.425119, 27.828681 ], [ 92.422866, 27.823189 ], [ 92.425541, 27.815162 ], [ 92.424274, 27.811782 ], [ 92.42371, 27.809107 ], [ 92.426809, 27.803474 ], [ 92.429625, 27.80277 ], [ 92.435539, 27.804741 ], [ 92.437511, 27.804319 ], [ 92.445678, 27.800235 ], [ 92.451311, 27.796996 ], [ 92.455818, 27.793335 ], [ 92.456663, 27.798968 ], [ 92.458353, 27.801502 ], [ 92.468069, 27.80967 ], [ 92.470745, 27.816289 ], [ 92.473139, 27.821358 ], [ 92.4768, 27.826005 ], [ 92.475955, 27.831779 ], [ 92.477645, 27.834314 ], [ 92.48018, 27.835581 ], [ 92.483137, 27.837271 ], [ 92.491727, 27.842059 ], [ 92.496656, 27.846424 ], [ 92.500317, 27.851212 ], [ 92.505809, 27.848537 ], [ 92.511724, 27.84741 ], [ 92.517357, 27.850086 ], [ 92.523553, 27.853465 ], [ 92.527073, 27.853888 ], [ 92.53158, 27.857972 ], [ 92.532988, 27.860366 ], [ 92.532706, 27.865998 ], [ 92.545239, 27.866562 ], [ 92.550731, 27.870082 ], [ 92.555519, 27.873744 ], [ 92.561997, 27.875011 ], [ 92.567066, 27.877968 ], [ 92.569602, 27.882193 ], [ 92.576079, 27.88163 ], [ 92.580304, 27.88163 ], [ 92.582135, 27.883319 ], [ 92.581149, 27.888812 ], [ 92.589175, 27.89881 ], [ 92.592274, 27.904161 ], [ 92.594668, 27.910357 ], [ 92.597625, 27.912751 ], [ 92.606919, 27.916835 ], [ 92.609876, 27.916131 ], [ 92.615368, 27.914582 ], [ 92.619171, 27.914441 ], [ 92.622691, 27.913737 ], [ 92.627056, 27.910216 ], [ 92.633534, 27.911202 ], [ 92.640153, 27.911061 ], [ 92.646349, 27.91261 ], [ 92.651559, 27.91599 ], [ 92.655643, 27.920496 ], [ 92.6586, 27.925848 ], [ 92.663388, 27.92965 ], [ 92.666768, 27.934297 ], [ 92.668881, 27.940071 ], [ 92.672401, 27.944577 ], [ 92.676766, 27.949083 ], [ 92.683103, 27.95021 ], [ 92.68944, 27.952604 ], [ 92.693242, 27.955983 ], [ 92.696481, 27.960912 ], [ 92.698171, 27.96232 ], [ 92.702396, 27.962461 ], [ 92.707888, 27.963165 ], [ 92.714084, 27.966545 ], [ 92.719717, 27.970488 ], [ 92.721125, 27.973023 ], [ 92.724364, 27.975135 ], [ 92.729574, 27.978233 ], [ 92.73225, 27.982739 ], [ 92.732391, 27.985697 ], [ 92.730138, 27.987527 ], [ 92.724223, 27.990062 ], [ 92.723238, 27.991752 ], [ 92.720855, 27.99941 ], [ 92.721642, 28.005528 ], [ 92.724613, 28.016278 ], [ 92.727935, 28.024319 ], [ 92.732042, 28.031485 ], [ 92.736325, 28.037778 ], [ 92.736063, 28.04075 ], [ 92.732829, 28.045994 ], [ 92.730993, 28.050364 ], [ 92.731518, 28.054471 ], [ 92.725924, 28.05788 ], [ 92.717971, 28.062425 ], [ 92.711853, 28.065571 ], [ 92.701802, 28.068193 ], [ 92.69516, 28.066795 ], [ 92.688517, 28.067319 ], [ 92.68205, 28.068543 ], [ 92.668328, 28.068106 ], [ 92.663347, 28.070203 ], [ 92.65854, 28.074748 ], [ 92.656442, 28.079992 ], [ 92.656704, 28.085498 ], [ 92.659851, 28.091004 ], [ 92.663434, 28.095986 ], [ 92.6648928, 28.1054673 ], [ 92.665357, 28.108484 ], [ 92.66658, 28.11364 ], [ 92.667717, 28.118972 ], [ 92.66728, 28.12474 ], [ 92.668066, 28.126925 ], [ 92.670863, 28.135665 ], [ 92.671912, 28.138025 ], [ 92.675932, 28.14659 ], [ 92.67733, 28.15096 ], [ 92.684585, 28.150348 ], [ 92.691664, 28.150173 ], [ 92.697432, 28.15262 ], [ 92.702152, 28.155592 ], [ 92.705997, 28.159525 ], [ 92.709668, 28.164157 ], [ 92.712902, 28.166779 ], [ 92.715786, 28.167915 ], [ 92.72068, 28.16538 ], [ 92.725749, 28.161098 ], [ 92.731168, 28.159787 ], [ 92.735189, 28.15533 ], [ 92.738597, 28.155679 ], [ 92.741481, 28.157078 ], [ 92.74489, 28.161098 ], [ 92.746463, 28.16171 ], [ 92.757213, 28.16171 ], [ 92.763681, 28.163021 ], [ 92.769187, 28.165643 ], [ 92.770236, 28.168002 ], [ 92.770061, 28.171498 ], [ 92.767002, 28.176655 ], [ 92.771809, 28.180413 ], [ 92.777577, 28.184171 ], [ 92.784394, 28.186706 ], [ 92.790512, 28.187929 ], [ 92.793746, 28.18758 ], [ 92.797417, 28.186356 ], [ 92.807905, 28.180675 ], [ 92.810352, 28.180151 ], [ 92.815858, 28.179364 ], [ 92.818305, 28.178053 ], [ 92.826258, 28.175169 ], [ 92.832726, 28.175169 ], [ 92.835785, 28.177005 ], [ 92.841291, 28.1812 ], [ 92.846972, 28.182423 ], [ 92.849943, 28.184259 ], [ 92.852478, 28.185657 ], [ 92.855275, 28.186531 ], [ 92.860606, 28.188192 ], [ 92.867336, 28.189677 ], [ 92.869433, 28.190988 ], [ 92.872754, 28.195358 ], [ 92.875464, 28.196495 ], [ 92.878086, 28.19833 ], [ 92.882893, 28.201564 ], [ 92.88735, 28.201564 ], [ 92.89443, 28.201564 ], [ 92.904043, 28.201651 ], [ 92.911123, 28.201564 ], [ 92.917503, 28.200253 ], [ 92.921611, 28.20069 ], [ 92.92397, 28.203049 ], [ 92.927291, 28.205497 ], [ 92.930001, 28.20672 ], [ 92.93271, 28.211527 ], [ 92.935857, 28.217033 ], [ 92.934283, 28.219743 ], [ 92.9307, 28.222539 ], [ 92.928253, 28.225598 ], [ 92.928078, 28.228045 ], [ 92.928777, 28.235387 ], [ 92.930962, 28.242641 ], [ 92.932273, 28.248759 ], [ 92.937255, 28.252954 ], [ 92.941712, 28.257586 ], [ 92.946869, 28.261607 ], [ 92.951938, 28.261956 ], [ 92.958056, 28.263704 ], [ 92.959105, 28.266588 ], [ 92.963212, 28.267987 ], [ 92.972826, 28.269735 ], [ 92.984712, 28.27192 ], [ 92.991267, 28.273143 ], [ 92.994676, 28.278387 ], [ 92.999483, 28.288001 ], [ 93.000532, 28.292371 ], [ 93.00228, 28.294469 ], [ 93.004814, 28.295343 ], [ 93.010495, 28.296304 ], [ 93.017312, 28.297178 ], [ 93.024916, 28.298402 ], [ 93.030597, 28.300412 ], [ 93.040036, 28.305044 ], [ 93.046766, 28.308977 ], [ 93.050611, 28.31055 ], [ 93.053146, 28.309676 ], [ 93.057603, 28.305394 ], [ 93.060225, 28.304607 ], [ 93.063109, 28.30618 ], [ 93.067566, 28.311424 ], [ 93.071499, 28.318066 ], [ 93.075432, 28.323572 ], [ 93.077093, 28.324971 ], [ 93.080414, 28.325845 ], [ 93.084435, 28.326981 ], [ 93.088455, 28.329953 ], [ 93.093437, 28.333623 ], [ 93.098331, 28.337906 ], [ 93.102177, 28.340615 ], [ 93.10541, 28.341402 ], [ 93.111004, 28.3428 ], [ 93.115636, 28.345247 ], [ 93.122366, 28.349967 ], [ 93.131979, 28.357221 ], [ 93.136699, 28.361504 ], [ 93.142293, 28.364388 ], [ 93.147537, 28.366223 ], [ 93.149228, 28.378057 ], [ 93.1730231, 28.4173653 ], [ 93.1729781, 28.4354315 ], [ 93.174233, 28.471361 ], [ 93.185057, 28.494128 ], [ 93.205584, 28.513162 ], [ 93.253729, 28.554589 ], [ 93.308219, 28.592657 ], [ 93.349646, 28.616543 ], [ 93.372764, 28.628508 ], [ 93.378674, 28.631768 ], [ 93.383826, 28.633755 ], [ 93.387365, 28.635555 ], [ 93.38888, 28.636496 ], [ 93.395312, 28.640481 ], [ 93.400644, 28.643715 ], [ 93.411044, 28.651406 ], [ 93.4169, 28.654639 ], [ 93.423105, 28.657174 ], [ 93.425727, 28.66268 ], [ 93.431758, 28.663729 ], [ 93.437701, 28.664253 ], [ 93.441525, 28.666657 ], [ 93.444147, 28.668099 ], [ 93.448342, 28.669017 ], [ 93.451947, 28.669017 ], [ 93.458305, 28.669148 ], [ 93.464794, 28.67059 ], [ 93.469711, 28.670524 ], [ 93.47207, 28.67118 ], [ 93.476069, 28.673277 ], [ 93.478101, 28.673605 ], [ 93.482624, 28.673474 ], [ 93.488458, 28.671573 ], [ 93.494161, 28.66941 ], [ 93.498356, 28.669279 ], [ 93.508778, 28.66882 ], [ 93.515202, 28.671114 ], [ 93.520708, 28.674326 ], [ 93.536636, 28.674719 ], [ 93.544043, 28.675244 ], [ 93.551319, 28.676555 ], [ 93.564626, 28.677079 ], [ 93.573541, 28.678062 ], [ 93.584946, 28.678915 ], [ 93.59196, 28.680816 ], [ 93.598515, 28.68311 ], [ 93.602382, 28.684945 ], [ 93.612149, 28.684617 ], [ 93.619359, 28.686649 ], [ 93.622965, 28.688354 ], [ 93.625783, 28.684552 ], [ 93.62834, 28.679439 ], [ 93.628274, 28.674654 ], [ 93.628995, 28.666264 ], [ 93.634829, 28.656366 ], [ 93.637254, 28.65453 ], [ 93.64276, 28.657283 ], [ 93.655281, 28.666198 ], [ 93.657116, 28.667443 ], [ 93.660328, 28.668623 ], [ 93.665703, 28.669476 ], [ 93.67075, 28.669279 ], [ 93.672389, 28.67 ], [ 93.682877, 28.675572 ], [ 93.688514, 28.678325 ], [ 93.689956, 28.676555 ], [ 93.69402, 28.67354 ], [ 93.703344, 28.666526 ], [ 93.705507, 28.664756 ], [ 93.706933, 28.664461 ], [ 93.712243, 28.664707 ], [ 93.716176, 28.666477 ], [ 93.7184, 28.667574 ], [ 93.723688, 28.670289 ], [ 93.726974, 28.673576 ], [ 93.730404, 28.680864 ], [ 93.733976, 28.68415 ], [ 93.738977, 28.687294 ], [ 93.7396028, 28.6875927 ], [ 93.745265, 28.690295 ], [ 93.750695, 28.693867 ], [ 93.754696, 28.698583 ], [ 93.766413, 28.704155 ], [ 93.772272, 28.707013 ], [ 93.778131, 28.710014 ], [ 93.784275, 28.713301 ], [ 93.786133, 28.71673 ], [ 93.786419, 28.728448 ], [ 93.787276, 28.733163 ], [ 93.789848, 28.737021 ], [ 93.79142, 28.737307 ], [ 93.796707, 28.735021 ], [ 93.804138, 28.735592 ], [ 93.808567, 28.737736 ], [ 93.810568, 28.740308 ], [ 93.816855, 28.739879 ], [ 93.823, 28.740451 ], [ 93.82943, 28.742451 ], [ 93.83586, 28.745452 ], [ 93.841147, 28.748739 ], [ 93.847006, 28.747453 ], [ 93.853293, 28.745595 ], [ 93.859867, 28.742308 ], [ 93.862582, 28.74288 ], [ 93.866583, 28.745595 ], [ 93.8773, 28.74931 ], [ 93.885731, 28.752311 ], [ 93.896591, 28.757455 ], [ 93.899877, 28.754598 ], [ 93.905879, 28.745452 ], [ 93.910023, 28.740165 ], [ 93.914596, 28.741022 ], [ 93.9179402, 28.7422267 ], [ 93.919311, 28.746452 ], [ 93.917453, 28.752454 ], [ 93.912595, 28.769744 ], [ 93.912166, 28.773174 ], [ 93.915167, 28.77546 ], [ 93.920454, 28.779175 ], [ 93.92617, 28.783748 ], [ 93.932743, 28.78632 ], [ 93.939031, 28.789464 ], [ 93.943318, 28.794751 ], [ 93.94589, 28.80061 ], [ 93.947604, 28.803182 ], [ 93.950891, 28.804611 ], [ 93.95675, 28.807754 ], [ 93.967038, 28.815328 ], [ 93.974898, 28.821472 ], [ 93.97847, 28.818472 ], [ 93.987044, 28.808326 ], [ 93.987615, 28.806183 ], [ 93.986043, 28.801753 ], [ 93.985329, 28.79718 ], [ 93.988044, 28.795037 ], [ 93.995474, 28.790607 ], [ 93.999424, 28.791167 ], [ 94.004649, 28.791941 ], [ 94.014229, 28.79407 ], [ 94.019745, 28.793489 ], [ 94.020132, 28.795328 ], [ 94.018197, 28.822908 ], [ 94.018584, 28.828327 ], [ 94.020035, 28.833649 ], [ 94.021487, 28.839358 ], [ 94.023326, 28.844971 ], [ 94.025939, 28.850003 ], [ 94.028261, 28.852809 ], [ 94.03339, 28.856293 ], [ 94.036874, 28.857358 ], [ 94.04655, 28.858325 ], [ 94.049937, 28.858422 ], [ 94.058163, 28.858712 ], [ 94.057679, 28.86268 ], [ 94.057679, 28.870228 ], [ 94.059228, 28.87497 ], [ 94.062421, 28.875647 ], [ 94.067937, 28.876228 ], [ 94.072194, 28.877873 ], [ 94.078678, 28.882711 ], [ 94.085258, 28.881647 ], [ 94.09271, 28.883002 ], [ 94.099, 28.883969 ], [ 94.108677, 28.886873 ], [ 94.115934, 28.889292 ], [ 94.118838, 28.889098 ], [ 94.131708, 28.888905 ], [ 94.135869, 28.890453 ], [ 94.139159, 28.893743 ], [ 94.144191, 28.897904 ], [ 94.150868, 28.900227 ], [ 94.1619, 28.904485 ], [ 94.170029, 28.909033 ], [ 94.174771, 28.911839 ], [ 94.171384, 28.913484 ], [ 94.167029, 28.919097 ], [ 94.166448, 28.923839 ], [ 94.168384, 28.927032 ], [ 94.172932, 28.931774 ], [ 94.178641, 28.935935 ], [ 94.185125, 28.935161 ], [ 94.192673, 28.935064 ], [ 94.196931, 28.93458 ], [ 94.206027, 28.931774 ], [ 94.212124, 28.932354 ], [ 94.218801, 28.93158 ], [ 94.224897, 28.929451 ], [ 94.230994, 28.927613 ], [ 94.237768, 28.928484 ], [ 94.251122, 28.928871 ], [ 94.257702, 28.930225 ], [ 94.260509, 28.931677 ], [ 94.262444, 28.934096 ], [ 94.266509, 28.939419 ], [ 94.267283, 28.945612 ], [ 94.270379, 28.948128 ], [ 94.274734, 28.952483 ], [ 94.27396, 28.967869 ], [ 94.281121, 28.970288 ], [ 94.29341, 28.977836 ], [ 94.302991, 28.98461 ], [ 94.306861, 28.991868 ], [ 94.309474, 28.993997 ], [ 94.314893, 28.99361 ], [ 94.322151, 28.993416 ], [ 94.335506, 28.999416 ], [ 94.341892, 29.001932 ], [ 94.347311, 29.006383 ], [ 94.35244, 29.012577 ], [ 94.357569, 29.017028 ], [ 94.362408, 29.021092 ], [ 94.366375, 29.025931 ], [ 94.363859, 29.030479 ], [ 94.360375, 29.034253 ], [ 94.357085, 29.035318 ], [ 94.350505, 29.035705 ], [ 94.342182, 29.035705 ], [ 94.33686, 29.037156 ], [ 94.330377, 29.038704 ], [ 94.32757, 29.040543 ], [ 94.32728, 29.043737 ], [ 94.325925, 29.048865 ], [ 94.324087, 29.054962 ], [ 94.319925, 29.060962 ], [ 94.313345, 29.066187 ], [ 94.313539, 29.067832 ], [ 94.315474, 29.072284 ], [ 94.315571, 29.075864 ], [ 94.312377, 29.079058 ], [ 94.306184, 29.080799 ], [ 94.301346, 29.081961 ], [ 94.292733, 29.083122 ], [ 94.284604, 29.086412 ], [ 94.276863, 29.093863 ], [ 94.27454, 29.099669 ], [ 94.27454, 29.105863 ], [ 94.275992, 29.112733 ], [ 94.28683, 29.119798 ], [ 94.29012, 29.121346 ], [ 94.291282, 29.123572 ], [ 94.295249, 29.134507 ], [ 94.294862, 29.140216 ], [ 94.293701, 29.147667 ], [ 94.293217, 29.152312 ], [ 94.300475, 29.151925 ], [ 94.313732, 29.154054 ], [ 94.3177, 29.15599 ], [ 94.320506, 29.154925 ], [ 94.322151, 29.153183 ], [ 94.326409, 29.152603 ], [ 94.333086, 29.155603 ], [ 94.339957, 29.154248 ], [ 94.346053, 29.151732 ], [ 94.353117, 29.152699 ], [ 94.356601, 29.15299 ], [ 94.359504, 29.152312 ], [ 94.366182, 29.151925 ], [ 94.37281, 29.154707 ], [ 94.378907, 29.154127 ], [ 94.380648, 29.155361 ], [ 94.385439, 29.160368 ], [ 94.388414, 29.17844 ], [ 94.390519, 29.184174 ], [ 94.393205, 29.184609 ], [ 94.404599, 29.182722 ], [ 94.41055, 29.180545 ], [ 94.417373, 29.178948 ], [ 94.420784, 29.181198 ], [ 94.429203, 29.18744 ], [ 94.439436, 29.185625 ], [ 94.445315, 29.182069 ], [ 94.448073, 29.183376 ], [ 94.451992, 29.188964 ], [ 94.453807, 29.195351 ], [ 94.451992, 29.203407 ], [ 94.453662, 29.208923 ], [ 94.456855, 29.213132 ], [ 94.47079, 29.211245 ], [ 94.474637, 29.209503 ], [ 94.481967, 29.208778 ], [ 94.491982, 29.207762 ], [ 94.495176, 29.209794 ], [ 94.5012, 29.21531 ], [ 94.503377, 29.220898 ], [ 94.505917, 29.226995 ], [ 94.510635, 29.231204 ], [ 94.516223, 29.22714 ], [ 94.528489, 29.222495 ], [ 94.540972, 29.219737 ], [ 94.546706, 29.224527 ], [ 94.552802, 29.228519 ], [ 94.556068, 29.228301 ], [ 94.55723, 29.231277 ], [ 94.559988, 29.236792 ], [ 94.562963, 29.238607 ], [ 94.566156, 29.23955 ], [ 94.568406, 29.24122 ], [ 94.571745, 29.247171 ], [ 94.571092, 29.25305 ], [ 94.571527, 29.256243 ], [ 94.577478, 29.258058 ], [ 94.583285, 29.262122 ], [ 94.586769, 29.26713 ], [ 94.58822, 29.26967 ], [ 94.590688, 29.272138 ], [ 94.59243, 29.273009 ], [ 94.59751, 29.274533 ], [ 94.600994, 29.274896 ], [ 94.605276, 29.276492 ], [ 94.610864, 29.279541 ], [ 94.619065, 29.283895 ], [ 94.620735, 29.286871 ], [ 94.623348, 29.292677 ], [ 94.626468, 29.295798 ], [ 94.629299, 29.296016 ], [ 94.636049, 29.295798 ], [ 94.644323, 29.296524 ], [ 94.647226, 29.298048 ], [ 94.653032, 29.303491 ], [ 94.655862, 29.305741 ], [ 94.659056, 29.306467 ], [ 94.66283, 29.305015 ], [ 94.665733, 29.304652 ], [ 94.670813, 29.306394 ], [ 94.675531, 29.30937 ], [ 94.681337, 29.313797 ], [ 94.687361, 29.315975 ], [ 94.691643, 29.317716 ], [ 94.693603, 29.317934 ], [ 94.697159, 29.315394 ], [ 94.701296, 29.31133 ], [ 94.705142, 29.306394 ], [ 94.710005, 29.302185 ], [ 94.712037, 29.299717 ], [ 94.712981, 29.296741 ], [ 94.713561, 29.294492 ], [ 94.715521, 29.291516 ], [ 94.718932, 29.290935 ], [ 94.723359, 29.291226 ], [ 94.728875, 29.289193 ], [ 94.7349261, 29.2869657 ], [ 94.734899, 29.281428 ], [ 94.735697, 29.275912 ], [ 94.738455, 29.270614 ], [ 94.742447, 29.266186 ], [ 94.745713, 29.261759 ], [ 94.747745, 29.256171 ], [ 94.749197, 29.2508 ], [ 94.745568, 29.245937 ], [ 94.744842, 29.243252 ], [ 94.746366, 29.240712 ], [ 94.749777, 29.235341 ], [ 94.751664, 29.22968 ], [ 94.756963, 29.226414 ], [ 94.770752, 29.218285 ], [ 94.776268, 29.216906 ], [ 94.780405, 29.217269 ], [ 94.786937, 29.218358 ], [ 94.790929, 29.218648 ], [ 94.79434, 29.217705 ], [ 94.800291, 29.211826 ], [ 94.803702, 29.208415 ], [ 94.800509, 29.205729 ], [ 94.799711, 29.201157 ], [ 94.798985, 29.19506 ], [ 94.797388, 29.186061 ], [ 94.797679, 29.183956 ], [ 94.80109, 29.174376 ], [ 94.804065, 29.16661 ], [ 94.807259, 29.164868 ], [ 94.809726, 29.164941 ], [ 94.821847, 29.172199 ], [ 94.824968, 29.172561 ], [ 94.827871, 29.17307 ], [ 94.830048, 29.175029 ], [ 94.832588, 29.17815 ], [ 94.834475, 29.178077 ], [ 94.838032, 29.177061 ], [ 94.840427, 29.177932 ], [ 94.845144, 29.181561 ], [ 94.847539, 29.182577 ], [ 94.851821, 29.182722 ], [ 94.861256, 29.1804 ], [ 94.864377, 29.181198 ], [ 94.871417, 29.180472 ], [ 94.877514, 29.180037 ], [ 94.884191, 29.179093 ], [ 94.893336, 29.176698 ], [ 94.897545, 29.174957 ], [ 94.899505, 29.173723 ], [ 94.902335, 29.170529 ], [ 94.905311, 29.169658 ], [ 94.90698, 29.167771 ], [ 94.908795, 29.161747 ], [ 94.910174, 29.160514 ], [ 94.914601, 29.158627 ], [ 94.917577, 29.157465 ], [ 94.92106, 29.157175 ], [ 94.924326, 29.156594 ], [ 94.927665, 29.157683 ], [ 94.933907, 29.159788 ], [ 94.940293, 29.161167 ], [ 94.942906, 29.160659 ], [ 94.947115, 29.160078 ], [ 94.953865, 29.159498 ], [ 94.96105, 29.159933 ], [ 94.964824, 29.158844 ], [ 94.97005, 29.156522 ], [ 94.975276, 29.154127 ], [ 94.980501, 29.152095 ], [ 94.986525, 29.148901 ], [ 94.992331, 29.145998 ], [ 94.994291, 29.143966 ], [ 94.997685, 29.136824 ], [ 94.999581, 29.132322 ], [ 95.00277, 29.130909 ], [ 95.007973, 29.129452 ], [ 95.013177, 29.127579 ], [ 95.018381, 29.126226 ], [ 95.01963, 29.12685 ], [ 95.021816, 29.127475 ], [ 95.022128, 29.127995 ], [ 95.019526, 29.129556 ], [ 95.017549, 29.13143 ], [ 95.015988, 29.133511 ], [ 95.015155, 29.13653 ], [ 95.014738, 29.140485 ], [ 95.014114, 29.145585 ], [ 95.012761, 29.149227 ], [ 95.009847, 29.153703 ], [ 95.006516, 29.157554 ], [ 95.004331, 29.160156 ], [ 95.001, 29.16255 ], [ 94.998502, 29.164839 ], [ 94.997045, 29.166921 ], [ 94.994964, 29.169003 ], [ 94.993506, 29.169939 ], [ 94.990904, 29.170772 ], [ 94.988094, 29.17098 ], [ 94.987157, 29.171605 ], [ 94.986221, 29.173062 ], [ 94.986346, 29.173107 ], [ 94.987366, 29.173478 ], [ 94.994651, 29.173582 ], [ 94.997878, 29.172333 ], [ 94.999751, 29.171605 ], [ 95.000792, 29.169731 ], [ 95.001416, 29.168274 ], [ 95.002457, 29.167858 ], [ 95.00381, 29.167858 ], [ 95.005163, 29.167441 ], [ 95.005788, 29.166505 ], [ 95.006282, 29.165521 ], [ 95.023041, 29.157915 ], [ 95.029794, 29.155663 ], [ 95.042117, 29.150687 ], [ 95.048633, 29.151398 ], [ 95.052899, 29.153649 ], [ 95.054795, 29.153412 ], [ 95.065695, 29.147014 ], [ 95.072923, 29.146066 ], [ 95.079084, 29.144763 ], [ 95.085482, 29.143222 ], [ 95.089866, 29.142038 ], [ 95.091525, 29.142275 ], [ 95.097212, 29.142038 ], [ 95.100174, 29.130545 ], [ 95.101003, 29.128293 ], [ 95.116881, 29.11609 ], [ 95.119368, 29.112416 ], [ 95.114985, 29.108151 ], [ 95.108231, 29.104715 ], [ 95.100885, 29.101397 ], [ 95.10207, 29.097014 ], [ 95.103847, 29.096066 ], [ 95.110719, 29.096895 ], [ 95.123753, 29.099265 ], [ 95.13015, 29.09808 ], [ 95.130743, 29.092156 ], [ 95.135957, 29.088483 ], [ 95.142591, 29.08943 ], [ 95.149819, 29.090023 ], [ 95.155506, 29.093696 ], [ 95.159179, 29.098791 ], [ 95.166644, 29.09808 ], [ 95.172331, 29.101042 ], [ 95.178966, 29.10436 ], [ 95.186786, 29.101753 ], [ 95.192829, 29.101634 ], [ 95.199227, 29.103767 ], [ 95.205033, 29.106729 ], [ 95.211549, 29.107559 ], [ 95.218303, 29.10507 ], [ 95.224701, 29.104478 ], [ 95.230389, 29.103649 ], [ 95.235128, 29.089904 ], [ 95.23655, 29.085757 ], [ 95.242711, 29.082321 ], [ 95.250531, 29.082795 ], [ 95.253493, 29.082558 ], [ 95.258825, 29.080307 ], [ 95.259536, 29.074501 ], [ 95.260721, 29.071065 ], [ 95.262616, 29.06834 ], [ 95.268659, 29.071065 ], [ 95.271384, 29.073198 ], [ 95.271147, 29.080781 ], [ 95.272095, 29.088127 ], [ 95.272569, 29.093933 ], [ 95.272569, 29.100213 ], [ 95.271858, 29.103175 ], [ 95.273043, 29.105307 ], [ 95.278967, 29.107914 ], [ 95.282996, 29.109928 ], [ 95.281218, 29.112535 ], [ 95.278375, 29.113957 ], [ 95.277545, 29.11609 ], [ 95.278493, 29.117393 ], [ 95.281929, 29.119289 ], [ 95.284536, 29.119644 ], [ 95.289038, 29.122725 ], [ 95.293422, 29.127109 ], [ 95.297688, 29.131611 ], [ 95.299347, 29.136469 ], [ 95.305626, 29.138365 ], [ 95.311787, 29.138839 ], [ 95.314631, 29.13718 ], [ 95.317238, 29.136943 ], [ 95.32411, 29.136469 ], [ 95.332759, 29.13635 ], [ 95.338565, 29.137061 ], [ 95.344845, 29.135047 ], [ 95.352546, 29.135284 ], [ 95.372214, 29.135995 ], [ 95.37885, 29.136824 ], [ 95.385366, 29.135995 ], [ 95.391646, 29.134455 ], [ 95.396148, 29.129478 ], [ 95.397333, 29.124857 ], [ 95.403139, 29.124028 ], [ 95.406101, 29.124502 ], [ 95.412736, 29.125924 ], [ 95.413447, 29.132796 ], [ 95.410248, 29.137772 ], [ 95.409419, 29.144289 ], [ 95.414988, 29.147962 ], [ 95.414988, 29.155782 ], [ 95.41404, 29.162299 ], [ 95.41404, 29.163957 ], [ 95.418423, 29.165261 ], [ 95.420556, 29.170355 ], [ 95.419727, 29.176635 ], [ 95.419016, 29.180664 ], [ 95.420438, 29.182559 ], [ 95.426836, 29.183863 ], [ 95.433945, 29.192749 ], [ 95.435722, 29.192749 ], [ 95.438685, 29.18955 ], [ 95.439988, 29.189194 ], [ 95.445438, 29.185758 ], [ 95.446623, 29.179479 ], [ 95.452429, 29.176991 ], [ 95.45385, 29.176398 ], [ 95.453021, 29.169289 ], [ 95.45468, 29.164668 ], [ 95.448756, 29.160758 ], [ 95.450178, 29.157322 ], [ 95.45385, 29.152464 ], [ 95.451125, 29.146895 ], [ 95.456339, 29.139668 ], [ 95.457879, 29.136824 ], [ 95.463685, 29.134929 ], [ 95.467832, 29.134929 ], [ 95.474111, 29.141445 ], [ 95.480509, 29.14109 ], [ 95.486671, 29.137061 ], [ 95.500178, 29.129478 ], [ 95.502666, 29.12782 ], [ 95.503614, 29.126042 ], [ 95.509538, 29.126398 ], [ 95.509775, 29.13244 ], [ 95.51096, 29.137891 ], [ 95.515344, 29.143222 ], [ 95.513329, 29.148317 ], [ 95.514988, 29.153412 ], [ 95.5125, 29.157915 ], [ 95.513922, 29.163839 ], [ 95.512145, 29.166564 ], [ 95.507524, 29.169289 ], [ 95.506576, 29.170948 ], [ 95.506457, 29.17545 ], [ 95.505391, 29.177701 ], [ 95.500415, 29.18173 ], [ 95.502074, 29.192157 ], [ 95.506221, 29.194882 ], [ 95.508353, 29.194882 ], [ 95.521505, 29.190142 ], [ 95.529088, 29.189194 ], [ 95.531339, 29.19346 ], [ 95.532287, 29.194763 ], [ 95.541174, 29.195356 ], [ 95.546742, 29.196304 ], [ 95.548875, 29.197014 ], [ 95.550771, 29.202109 ], [ 95.555629, 29.204834 ], [ 95.560131, 29.206612 ], [ 95.56333, 29.199384 ], [ 95.570913, 29.195474 ], [ 95.578496, 29.192749 ], [ 95.583473, 29.190616 ], [ 95.589041, 29.187773 ], [ 95.595676, 29.18801 ], [ 95.601601, 29.191327 ], [ 95.603496, 29.19583 ], [ 95.597691, 29.202702 ], [ 95.59461, 29.20673 ], [ 95.596743, 29.214313 ], [ 95.59615, 29.220474 ], [ 95.596269, 29.223792 ], [ 95.596861, 29.226043 ], [ 95.601719, 29.232323 ], [ 95.605629, 29.235996 ], [ 95.612146, 29.234811 ], [ 95.618425, 29.232323 ], [ 95.624942, 29.229835 ], [ 95.63608, 29.223318 ], [ 95.637501, 29.221304 ], [ 95.63762, 29.216446 ], [ 95.640819, 29.213365 ], [ 95.648046, 29.210403 ], [ 95.651838, 29.213602 ], [ 95.655393, 29.21609 ], [ 95.657762, 29.217275 ], [ 95.661435, 29.220237 ], [ 95.66416, 29.223555 ], [ 95.668663, 29.224384 ], [ 95.68845, 29.223792 ], [ 95.694255, 29.223792 ], [ 95.698284, 29.22474 ], [ 95.702076, 29.218934 ], [ 95.705748, 29.213247 ], [ 95.703379, 29.205427 ], [ 95.708829, 29.204005 ], [ 95.716057, 29.211825 ], [ 95.722218, 29.215735 ], [ 95.727905, 29.217512 ], [ 95.735251, 29.217512 ], [ 95.740701, 29.220948 ], [ 95.743189, 29.225688 ], [ 95.737621, 29.227346 ], [ 95.734422, 29.230072 ], [ 95.730512, 29.235166 ], [ 95.730275, 29.239669 ], [ 95.73146, 29.242986 ], [ 95.734659, 29.248555 ], [ 95.736081, 29.251517 ], [ 95.735962, 29.255427 ], [ 95.739635, 29.259337 ], [ 95.742716, 29.261825 ], [ 95.745796, 29.267039 ], [ 95.752431, 29.276162 ], [ 95.749351, 29.279717 ], [ 95.748285, 29.284338 ], [ 95.748403, 29.288366 ], [ 95.746389, 29.290854 ], [ 95.738924, 29.297015 ], [ 95.737147, 29.297963 ], [ 95.740701, 29.302584 ], [ 95.745678, 29.308271 ], [ 95.757408, 29.322608 ], [ 95.764635, 29.322608 ], [ 95.771507, 29.323201 ], [ 95.776839, 29.322964 ], [ 95.781934, 29.32557 ], [ 95.785607, 29.328532 ], [ 95.791294, 29.332679 ], [ 95.79421, 29.335178 ], [ 95.797092, 29.337854 ], [ 95.802651, 29.340119 ], [ 95.808003, 29.343515 ], [ 95.812326, 29.34753 ], [ 95.818811, 29.348868 ], [ 95.82509, 29.350927 ], [ 95.831369, 29.351647 ], [ 95.837751, 29.352265 ], [ 95.838883, 29.353088 ], [ 95.842486, 29.342692 ], [ 95.842383, 29.340016 ], [ 95.837442, 29.334663 ], [ 95.837275, 29.333012 ], [ 95.838584, 29.327777 ], [ 95.839536, 29.323017 ], [ 95.841083, 29.321233 ], [ 95.844533, 29.3204 ], [ 95.849888, 29.316949 ], [ 95.856313, 29.316354 ], [ 95.862024, 29.315164 ], [ 95.867379, 29.317901 ], [ 95.875589, 29.314926 ], [ 95.877492, 29.314569 ], [ 95.88011, 29.318258 ], [ 95.883442, 29.323017 ], [ 95.886536, 29.326706 ], [ 95.889272, 29.327896 ], [ 95.892604, 29.331228 ], [ 95.9001, 29.333012 ], [ 95.902717, 29.33389 ], [ 95.907399, 29.337093 ], [ 95.913436, 29.338941 ], [ 95.922184, 29.341529 ], [ 95.926373, 29.343746 ], [ 95.930562, 29.347319 ], [ 95.938816, 29.348921 ], [ 95.940664, 29.361118 ], [ 95.941527, 29.3658 ], [ 95.948796, 29.366293 ], [ 95.955326, 29.367402 ], [ 95.962472, 29.372823 ], [ 95.965675, 29.37578 ], [ 95.971096, 29.373439 ], [ 95.976148, 29.369866 ], [ 95.978242, 29.363829 ], [ 95.980953, 29.361981 ], [ 95.98391, 29.362843 ], [ 95.991056, 29.366662 ], [ 95.994629, 29.368634 ], [ 95.999759, 29.368369 ], [ 96.011739, 29.365523 ], [ 96.016531, 29.362545 ], [ 96.023783, 29.366041 ], [ 96.032978, 29.372646 ], [ 96.038029, 29.376532 ], [ 96.047095, 29.380676 ], [ 96.0536283, 29.3823784 ], [ 96.057584, 29.380935 ], [ 96.060045, 29.377309 ], [ 96.061858, 29.374459 ], [ 96.065355, 29.373812 ], [ 96.070794, 29.372517 ], [ 96.075974, 29.36902 ], [ 96.085817, 29.364746 ], [ 96.090609, 29.365523 ], [ 96.093587, 29.364746 ], [ 96.101487, 29.360602 ], [ 96.105502, 29.358789 ], [ 96.113013, 29.356588 ], [ 96.117028, 29.354256 ], [ 96.121949, 29.351148 ], [ 96.12687, 29.349206 ], [ 96.13218, 29.347781 ], [ 96.136324, 29.34558 ], [ 96.139173, 29.34286 ], [ 96.141375, 29.335608 ], [ 96.142373, 29.332966 ], [ 96.143606, 29.328804 ], [ 96.142527, 29.323254 ], [ 96.139907, 29.317396 ], [ 96.140678, 29.31493 ], [ 96.144223, 29.31308 ], [ 96.146689, 29.309535 ], [ 96.148848, 29.300131 ], [ 96.149618, 29.29489 ], [ 96.153781, 29.293811 ], [ 96.162259, 29.294274 ], [ 96.166729, 29.294274 ], [ 96.170737, 29.287953 ], [ 96.173204, 29.283945 ], [ 96.176441, 29.282095 ], [ 96.179062, 29.280554 ], [ 96.180911, 29.277317 ], [ 96.182761, 29.271767 ], [ 96.18754, 29.267451 ], [ 96.195864, 29.263597 ], [ 96.200489, 29.263135 ], [ 96.213592, 29.263905 ], [ 96.219141, 29.262364 ], [ 96.223766, 29.254965 ], [ 96.237485, 29.249723 ], [ 96.244731, 29.248644 ], [ 96.250743, 29.247874 ], [ 96.257217, 29.246024 ], [ 96.260763, 29.244636 ], [ 96.262612, 29.242632 ], [ 96.261841, 29.23662 ], [ 96.258758, 29.230454 ], [ 96.261687, 29.226755 ], [ 96.262766, 29.221205 ], [ 96.256754, 29.216735 ], [ 96.253209, 29.213806 ], [ 96.257217, 29.213806 ], [ 96.260763, 29.214731 ], [ 96.263846, 29.213652 ], [ 96.270628, 29.209952 ], [ 96.276486, 29.209335 ], [ 96.284039, 29.209644 ], [ 96.28296, 29.206715 ], [ 96.283115, 29.20209 ], [ 96.288818, 29.198082 ], [ 96.294522, 29.194691 ], [ 96.299455, 29.190837 ], [ 96.301459, 29.183284 ], [ 96.301305, 29.178818 ], [ 96.302005, 29.177412 ], [ 96.300563, 29.174287 ], [ 96.299722, 29.163592 ], [ 96.297799, 29.159026 ], [ 96.293593, 29.156743 ], [ 96.271241, 29.157944 ], [ 96.265473, 29.158786 ], [ 96.259825, 29.157824 ], [ 96.255139, 29.15506 ], [ 96.253216, 29.153378 ], [ 96.245405, 29.150975 ], [ 96.243963, 29.138837 ], [ 96.240478, 29.13379 ], [ 96.23483, 29.129705 ], [ 96.226779, 29.128022 ], [ 96.211998, 29.123456 ], [ 96.193131, 29.117207 ], [ 96.182917, 29.110958 ], [ 96.189286, 29.096658 ], [ 96.196015, 29.084281 ], [ 96.197698, 29.075028 ], [ 96.196977, 29.071062 ], [ 96.191088, 29.064453 ], [ 96.184479, 29.059165 ], [ 96.183037, 29.054839 ], [ 96.187003, 29.053517 ], [ 96.187123, 29.049552 ], [ 96.184119, 29.047629 ], [ 96.182677, 29.045947 ], [ 96.182917, 29.043183 ], [ 96.186282, 29.040299 ], [ 96.193372, 29.036814 ], [ 96.195895, 29.032247 ], [ 96.198539, 29.023355 ], [ 96.204908, 29.024076 ], [ 96.21344, 29.027681 ], [ 96.216864, 29.0313097 ], [ 96.221491, 29.036213 ], [ 96.230143, 29.046788 ], [ 96.237594, 29.061088 ], [ 96.243122, 29.073826 ], [ 96.252855, 29.08392 ], [ 96.261868, 29.088967 ], [ 96.269319, 29.096658 ], [ 96.280855, 29.099782 ], [ 96.295756, 29.098581 ], [ 96.309455, 29.101345 ], [ 96.323035, 29.101345 ], [ 96.34154, 29.100143 ], [ 96.34815, 29.100984 ], [ 96.359085, 29.106151 ], [ 96.367377, 29.109276 ], [ 96.368338, 29.108675 ], [ 96.363291, 29.100984 ], [ 96.358004, 29.093774 ], [ 96.354158, 29.081877 ], [ 96.352356, 29.074667 ], [ 96.353077, 29.070461 ], [ 96.354879, 29.068298 ], [ 96.361969, 29.069139 ], [ 96.361609, 29.05568 ], [ 96.361969, 29.04811 ], [ 96.365894, 29.038997 ], [ 96.368053, 29.038072 ], [ 96.373602, 29.033447 ], [ 96.379923, 29.031752 ], [ 96.386551, 29.031598 ], [ 96.393025, 29.030056 ], [ 96.399808, 29.027281 ], [ 96.422006, 29.013099 ], [ 96.428018, 29.009862 ], [ 96.434492, 29.006316 ], [ 96.435263, 29.001384 ], [ 96.429559, 28.998301 ], [ 96.428172, 28.995526 ], [ 96.428943, 28.991055 ], [ 96.428789, 28.984581 ], [ 96.433259, 28.97934 ], [ 96.43588, 28.972403 ], [ 96.436805, 28.963 ], [ 96.440967, 28.952671 ], [ 96.446825, 28.946197 ], [ 96.454224, 28.936331 ], [ 96.460082, 28.934327 ], [ 96.463627, 28.934173 ], [ 96.472722, 28.927853 ], [ 96.475651, 28.933865 ], [ 96.479659, 28.940647 ], [ 96.481817, 28.947893 ], [ 96.488754, 28.947122 ], [ 96.497541, 28.946505 ], [ 96.508177, 28.946505 ], [ 96.518352, 28.935869 ], [ 96.521435, 28.930628 ], [ 96.523747, 28.921995 ], [ 96.524826, 28.916291 ], [ 96.517426, 28.909817 ], [ 96.515731, 28.905038 ], [ 96.516656, 28.892089 ], [ 96.517735, 28.886694 ], [ 96.524055, 28.878986 ], [ 96.521126, 28.873591 ], [ 96.519122, 28.867733 ], [ 96.521435, 28.860951 ], [ 96.527292, 28.858484 ], [ 96.532533, 28.852935 ], [ 96.536696, 28.848156 ], [ 96.544403, 28.847848 ], [ 96.547332, 28.849543 ], [ 96.549799, 28.843223 ], [ 96.557506, 28.832124 ], [ 96.566601, 28.824108 ], [ 96.576621, 28.818559 ], [ 96.589261, 28.817788 ], [ 96.585099, 28.811622 ], [ 96.578471, 28.806381 ], [ 96.577238, 28.802219 ], [ 96.578009, 28.798519 ], [ 96.574, 28.793432 ], [ 96.570917, 28.787882 ], [ 96.572921, 28.782641 ], [ 96.578163, 28.778941 ], [ 96.591882, 28.780791 ], [ 96.598356, 28.780637 ], [ 96.600669, 28.778633 ], [ 96.602673, 28.763372 ], [ 96.602827, 28.758285 ], [ 96.607914, 28.752427 ], [ 96.611922, 28.746261 ], [ 96.617009, 28.737783 ], [ 96.621435, 28.735253 ], [ 96.620124, 28.727725 ], [ 96.610136, 28.708205 ], [ 96.6031, 28.699579 ], [ 96.596972, 28.696629 ], [ 96.556797, 28.690954 ], [ 96.544086, 28.687323 ], [ 96.535914, 28.681194 ], [ 96.535007, 28.673931 ], [ 96.53705, 28.661674 ], [ 96.536822, 28.654411 ], [ 96.512309, 28.626039 ], [ 96.505726, 28.623996 ], [ 96.49574, 28.626039 ], [ 96.494604, 28.622407 ], [ 96.495058, 28.609469 ], [ 96.489384, 28.606518 ], [ 96.46419, 28.601752 ], [ 96.460785, 28.60039 ], [ 96.450571, 28.591765 ], [ 96.448074, 28.587225 ], [ 96.450798, 28.582913 ], [ 96.473042, 28.57111 ], [ 96.480078, 28.56657 ], [ 96.482348, 28.560669 ], [ 96.48144, 28.554994 ], [ 96.466913, 28.543192 ], [ 96.458061, 28.533658 ], [ 96.451252, 28.530027 ], [ 96.431505, 28.524806 ], [ 96.411758, 28.516862 ], [ 96.408126, 28.509372 ], [ 96.409488, 28.507556 ], [ 96.433775, 28.50574 ], [ 96.442173, 28.499839 ], [ 96.446031, 28.489625 ], [ 96.474403, 28.490987 ], [ 96.478262, 28.490306 ], [ 96.483255, 28.447407 ], [ 96.489157, 28.434469 ], [ 96.495966, 28.42993 ], [ 96.5055, 28.438782 ], [ 96.510947, 28.458983 ], [ 96.511401, 28.477368 ], [ 96.512763, 28.512323 ], [ 96.514125, 28.5298 ], [ 96.524793, 28.552952 ], [ 96.538184, 28.572245 ], [ 96.552484, 28.582913 ], [ 96.577678, 28.591765 ], [ 96.594929, 28.601071 ], [ 96.609001, 28.611285 ], [ 96.613541, 28.613555 ], [ 96.620577, 28.61242 ], [ 96.630791, 28.611058 ], [ 96.642594, 28.611058 ], [ 96.648269, 28.610604 ], [ 96.654851, 28.609015 ], [ 96.664838, 28.600163 ], [ 96.692075, 28.587452 ], [ 96.705921, 28.585863 ], [ 96.714319, 28.584048 ], [ 96.720448, 28.580643 ], [ 96.727257, 28.574968 ], [ 96.745415, 28.571337 ], [ 96.759034, 28.558853 ], [ 96.749955, 28.543192 ], [ 96.766751, 28.514819 ], [ 96.782186, 28.513684 ], [ 96.813282, 28.503697 ], [ 96.861174, 28.485312 ], [ 96.865604, 28.448257 ], [ 96.871545, 28.441902 ], [ 96.87627, 28.437024 ], [ 96.880537, 28.433366 ], [ 96.888463, 28.428946 ], [ 96.889987, 28.423611 ], [ 96.892883, 28.418581 ], [ 96.891817, 28.414314 ], [ 96.887701, 28.408979 ], [ 96.884348, 28.405626 ], [ 96.883128, 28.400139 ], [ 96.886939, 28.391451 ], [ 96.889683, 28.385811 ], [ 96.894712, 28.383068 ], [ 96.9002, 28.380476 ], [ 96.909192, 28.374227 ], [ 96.911936, 28.36935 ], [ 96.916508, 28.365692 ], [ 96.921691, 28.364015 ], [ 96.92352, 28.353041 ], [ 96.929617, 28.350907 ], [ 96.935104, 28.348773 ], [ 96.945316, 28.347706 ], [ 96.952632, 28.346029 ], [ 96.958119, 28.342371 ], [ 96.963301, 28.338866 ], [ 96.968179, 28.334141 ], [ 96.976867, 28.329568 ], [ 96.983878, 28.328806 ], [ 96.989365, 28.328044 ], [ 97.000034, 28.326215 ], [ 97.002463, 28.324848 ], [ 97.010978, 28.326216 ], [ 97.020557, 28.328649 ], [ 97.027247, 28.329865 ], [ 97.027247, 28.329866 ], [ 97.03196, 28.333667 ], [ 97.038954, 28.343854 ], [ 97.042755, 28.348871 ], [ 97.047621, 28.352064 ], [ 97.050814, 28.356321 ], [ 97.055831, 28.360122 ], [ 97.062217, 28.361947 ], [ 97.068147, 28.364684 ], [ 97.078334, 28.371374 ], [ 97.085784, 28.370309 ], [ 97.092778, 28.369093 ], [ 97.09886, 28.366204 ], [ 97.106006, 28.365748 ], [ 97.113304, 28.364684 ], [ 97.119842, 28.363011 ], [ 97.125772, 28.361187 ], [ 97.131398, 28.357842 ], [ 97.138544, 28.352976 ], [ 97.142193, 28.35176 ], [ 97.145994, 28.352976 ], [ 97.148883, 28.345222 ], [ 97.15238, 28.340509 ], [ 97.156941, 28.335491 ], [ 97.162871, 28.332906 ], [ 97.168193, 28.330169 ], [ 97.171993, 28.333971 ], [ 97.178531, 28.333971 ], [ 97.187198, 28.324392 ], [ 97.191151, 28.31983 ], [ 97.196625, 28.316181 ], [ 97.199058, 28.310404 ], [ 97.203163, 28.306146 ], [ 97.208484, 28.301889 ], [ 97.213502, 28.305082 ], [ 97.218367, 28.308579 ], [ 97.220952, 28.302497 ], [ 97.226426, 28.300065 ], [ 97.232508, 28.29748 ], [ 97.238133, 28.294135 ], [ 97.237069, 28.288509 ], [ 97.235548, 28.28334 ], [ 97.241022, 28.272848 ], [ 97.243607, 28.272392 ], [ 97.245887, 28.265246 ], [ 97.24832, 28.263878 ], [ 97.260332, 28.26403 ], [ 97.265197, 28.262509 ], [ 97.269606, 28.255972 ], [ 97.271583, 28.245024 ], [ 97.278121, 28.243808 ], [ 97.284051, 28.245632 ], [ 97.283443, 28.239855 ], [ 97.284507, 28.233621 ], [ 97.289068, 28.232557 ], [ 97.297887, 28.233013 ], [ 97.3026, 28.228908 ], [ 97.30853, 28.226323 ], [ 97.3137, 28.223434 ], [ 97.318869, 28.221457 ], [ 97.325103, 28.217656 ], [ 97.329664, 28.214919 ], [ 97.335442, 28.214767 ], [ 97.341372, 28.215832 ], [ 97.345948, 28.214658 ], [ 97.3475146, 28.2133002 ], [ 97.3477721, 28.2126951 ], [ 97.3468709, 28.2103504 ], [ 97.3469567, 28.2082515 ], [ 97.3464203, 28.2066442 ], [ 97.3466348, 28.2065497 ], [ 97.3487592, 28.207533 ], [ 97.3523426, 28.2079301 ], [ 97.3563552, 28.2068522 ], [ 97.3578143, 28.2060202 ], [ 97.358458, 28.2051504 ], [ 97.3602175, 28.2047533 ], [ 97.3612475, 28.2036187 ], [ 97.361741, 28.2022949 ], [ 97.3619556, 28.2001959 ], [ 97.3630285, 28.1985128 ], [ 97.3614192, 28.197189 ], [ 97.3608398, 28.1915155 ], [ 97.3577499, 28.1874872 ], [ 97.3574495, 28.1850285 ], [ 97.3577499, 28.1814349 ], [ 97.3544025, 28.1784464 ], [ 97.3540163, 28.1758362 ], [ 97.3553466, 28.1720531 ], [ 97.36103, 28.165617 ], [ 97.3589515, 28.1630489 ], [ 97.3558616, 28.1620652 ], [ 97.356677, 28.1612328 ], [ 97.3569774, 28.1606274 ], [ 97.3559475, 28.1600977 ], [ 97.3525571, 28.15726 ], [ 97.353115, 28.1566168 ], [ 97.35363, 28.1547628 ], [ 97.353115, 28.1520385 ], [ 97.3492527, 28.1512438 ], [ 97.346034, 28.1496168 ], [ 97.3418283, 28.1497681 ], [ 97.327827, 28.141006 ], [ 97.3257994, 28.1396646 ], [ 97.3250484, 28.1348206 ], [ 97.3316574, 28.1305441 ], [ 97.3344898, 28.1275164 ], [ 97.3374938, 28.1213471 ], [ 97.3443603, 28.1168808 ], [ 97.3385238, 28.1076448 ], [ 97.328104, 28.10082 ], [ 97.3109721, 28.0896248 ], [ 97.3065948, 28.0793263 ], [ 97.3066806, 28.0698598 ], [ 97.312325, 28.060671 ], [ 97.323142, 28.05897 ], [ 97.3382248, 28.0601013 ], [ 97.3448333, 28.0625609 ], [ 97.3480311, 28.065904 ], [ 97.3548626, 28.0666308 ], [ 97.3586417, 28.0631423 ], [ 97.3592231, 28.0574736 ], [ 97.3618394, 28.0525317 ], [ 97.3676535, 28.0474444 ], [ 97.3677989, 28.0420664 ], [ 97.3755025, 28.0326185 ], [ 97.3772467, 28.0318918 ], [ 97.3942528, 28.0185194 ], [ 97.395561, 28.0122693 ], [ 97.3936714, 28.0073274 ], [ 97.3900376, 28.003839 ], [ 97.3872759, 27.9993331 ], [ 97.3846596, 27.9974435 ], [ 97.3820587, 27.9930794 ], [ 97.3760839, 27.9830537 ], [ 97.3753571, 27.9781117 ], [ 97.3718687, 27.9768036 ], [ 97.3675082, 27.9770943 ], [ 97.3631476, 27.9653208 ], [ 97.3646011, 27.9597975 ], [ 97.374485, 27.9548555 ], [ 97.3771013, 27.9497682 ], [ 97.3670721, 27.9390122 ], [ 97.3669267, 27.9365412 ], [ 97.3709966, 27.9295644 ], [ 97.3702698, 27.9284015 ], [ 97.3701245, 27.9252038 ], [ 97.3689617, 27.9222968 ], [ 97.3791363, 27.8920637 ], [ 97.3704152, 27.8861043 ], [ 97.3669267, 27.8824705 ], [ 97.3662, 27.8772378 ], [ 97.3602406, 27.873168 ], [ 97.3536998, 27.8754936 ], [ 97.3425077, 27.8855229 ], [ 97.3323331, 27.8852322 ], [ 97.3256469, 27.8865403 ], [ 97.3191061, 27.8885753 ], [ 97.3199782, 27.8939533 ], [ 97.318234, 27.8962789 ], [ 97.317798, 27.8997673 ], [ 97.3143095, 27.9060174 ], [ 97.3082048, 27.9127036 ], [ 97.3040545, 27.915622 ], [ 97.3031822, 27.9158216 ], [ 97.298772, 27.915464 ], [ 97.292989, 27.913454 ], [ 97.287198, 27.91028 ], [ 97.283337, 27.907827 ], [ 97.271272, 27.902937 ], [ 97.255136, 27.893805 ], [ 97.249585, 27.888956 ], [ 97.248135, 27.884416 ], [ 97.242993, 27.879309 ], [ 97.237241, 27.875151 ], [ 97.230054, 27.869688 ], [ 97.219739, 27.860456 ], [ 97.213861, 27.855024 ], [ 97.205121, 27.847364 ], [ 97.201917, 27.843043 ], [ 97.198781, 27.836485 ], [ 97.196202, 27.835489 ], [ 97.189847, 27.834497 ], [ 97.185361, 27.833223 ], [ 97.181889, 27.831343 ], [ 97.179624, 27.828653 ], [ 97.179593, 27.824739 ], [ 97.179685, 27.82287 ], [ 97.179548, 27.820639 ], [ 97.176469, 27.818365 ], [ 97.173139, 27.815355 ], [ 97.168538, 27.812223 ], [ 97.162835, 27.811571 ], [ 97.15735, 27.811091 ], [ 97.150739, 27.809805 ], [ 97.149179, 27.808554 ], [ 97.14663, 27.805128 ], [ 97.145837, 27.800581 ], [ 97.145994, 27.799235 ], [ 97.144227, 27.797095 ], [ 97.14132, 27.796343 ], [ 97.137715, 27.795046 ], [ 97.134798, 27.791639 ], [ 97.131803, 27.78892 ], [ 97.129552, 27.788782 ], [ 97.123006, 27.788553 ], [ 97.118218, 27.788606 ], [ 97.113061, 27.787679 ], [ 97.108636, 27.786383 ], [ 97.105809, 27.78472 ], [ 97.103715, 27.7828 ], [ 97.103136, 27.780874 ], [ 97.104188, 27.777376 ], [ 97.107617, 27.774237 ], [ 97.111329, 27.771715 ], [ 97.112714, 27.769671 ], [ 97.111318, 27.768076 ], [ 97.108651, 27.765356 ], [ 97.107007, 27.76267 ], [ 97.10708, 27.760195 ], [ 97.108583, 27.756845 ], [ 97.107751, 27.752737 ], [ 97.105492, 27.749216 ], [ 97.103559, 27.74584 ], [ 97.103708, 27.741835 ], [ 97.102597, 27.739111 ], [ 97.101285, 27.738825 ], [ 97.099858, 27.739813 ], [ 97.095941, 27.743135 ], [ 97.092229, 27.746278 ], [ 97.085736, 27.748773 ], [ 97.080869, 27.749479 ], [ 97.076703, 27.751204 ], [ 97.074456, 27.751902 ], [ 97.070199, 27.751226 ], [ 97.0662332, 27.7496646 ], [ 97.0646783, 27.7485817 ], [ 97.0614331, 27.7490265 ], [ 97.0547838, 27.748173 ], [ 97.0526939, 27.746336 ], [ 97.051042, 27.7451 ], [ 97.048547, 27.744963 ], [ 97.045026, 27.743918 ], [ 97.042367, 27.743017 ], [ 97.03663, 27.739725 ], [ 97.030862, 27.738321 ], [ 97.027952, 27.73662 ], [ 97.026151, 27.735353 ], [ 97.025658, 27.734263 ], [ 97.023397, 27.730341 ], [ 97.021554, 27.728708 ], [ 97.02073, 27.726236 ], [ 97.020189, 27.722711 ], [ 97.020104, 27.720926 ], [ 97.020745, 27.71525 ], [ 97.019963, 27.713179 ], [ 97.018609, 27.711584 ], [ 97.017129, 27.708422 ], [ 97.015614, 27.707044 ], [ 97.008931, 27.699167 ], [ 97.000791, 27.689253 ], [ 97.000268, 27.686357 ], [ 97.000196, 27.679754 ], [ 96.997563, 27.674479 ], [ 96.99495, 27.671163 ], [ 96.984525, 27.670996 ], [ 96.981206, 27.670187 ], [ 96.981084, 27.666632 ], [ 96.979707, 27.664106 ], [ 96.977113, 27.662237 ], [ 96.971662, 27.661013 ], [ 96.969014, 27.661577 ], [ 96.962907, 27.663805 ], [ 96.959642, 27.664446 ], [ 96.953874, 27.664003 ], [ 96.949968, 27.66184 ], [ 96.946484, 27.660814 ], [ 96.939668, 27.661813 ], [ 96.937612, 27.660776 ], [ 96.936921, 27.657335 ], [ 96.937692, 27.65265 ], [ 96.941575, 27.645037 ], [ 96.942239, 27.642275 ], [ 96.941465, 27.638361 ], [ 96.938569, 27.635046 ], [ 96.934301, 27.633448 ], [ 96.925549, 27.632646 ], [ 96.924519, 27.631853 ], [ 96.925591, 27.628981 ], [ 96.928811, 27.624277 ], [ 96.924257, 27.622534 ], [ 96.916715, 27.620088 ], [ 96.912068, 27.618658 ], [ 96.904176, 27.61767 ], [ 96.899491, 27.613833 ], [ 96.8983732, 27.6109122 ], [ 96.899801, 27.608354 ], [ 96.910497, 27.59865 ], [ 96.91245, 27.596174 ], [ 96.914926, 27.58959 ], [ 96.915555, 27.584116 ], [ 96.908624, 27.580015 ], [ 96.905637, 27.574709 ], [ 96.905553, 27.57012 ], [ 96.913461, 27.564981 ], [ 96.920114, 27.561976 ], [ 96.9222, 27.558298 ], [ 96.920789, 27.552248 ], [ 96.91525, 27.543619 ], [ 96.917424, 27.542623 ], [ 96.924955, 27.540571 ], [ 96.926717, 27.537218 ], [ 96.92706, 27.534822 ], [ 96.925812, 27.528589 ], [ 96.923089, 27.521864 ], [ 96.923009, 27.518309 ], [ 96.925355, 27.512087 ], [ 96.928803, 27.510137 ], [ 96.933721, 27.507956 ], [ 96.934365, 27.507154 ], [ 96.934247, 27.503782 ], [ 96.932985, 27.500272 ], [ 96.93073, 27.495463 ], [ 96.925267, 27.49206 ], [ 96.922742, 27.488485 ], [ 96.921487, 27.485594 ], [ 96.917672, 27.47579 ], [ 96.916093, 27.469416 ], [ 96.914719, 27.460752 ], [ 96.915456, 27.454908 ], [ 96.918321, 27.451803 ], [ 96.921853, 27.450144 ], [ 96.928254, 27.445883 ], [ 96.933626, 27.440798 ], [ 96.938253, 27.434557 ], [ 96.944673, 27.428156 ], [ 96.944273, 27.425295 ], [ 96.9437, 27.421236 ], [ 96.944737, 27.418905 ], [ 96.948548, 27.416807 ], [ 96.951333, 27.413919 ], [ 96.955484, 27.409277 ], [ 96.95828, 27.407694 ], [ 96.964971, 27.407785 ], [ 96.970598, 27.406729 ], [ 96.973619, 27.404234 ], [ 96.971509, 27.401346 ], [ 96.970449, 27.397474 ], [ 96.972871, 27.395529 ], [ 96.976373, 27.391077 ], [ 96.977605, 27.384535 ], [ 96.976914, 27.380804 ], [ 96.975751, 27.378961 ], [ 96.974012, 27.376581 ], [ 96.973138, 27.37499 ], [ 96.978612, 27.372045 ], [ 96.981954, 27.368208 ], [ 96.984887, 27.364156 ], [ 96.988229, 27.360246 ], [ 96.990507, 27.356272 ], [ 96.992574, 27.351538 ], [ 96.996942, 27.348307 ], [ 97.00176, 27.345408 ], [ 97.004121, 27.341391 ], [ 97.004956, 27.335687 ], [ 97.007261, 27.334924 ], [ 97.008073, 27.333574 ], [ 97.007905, 27.331938 ], [ 97.008588, 27.326948 ], [ 97.008626, 27.325094 ], [ 97.010816, 27.320539 ], [ 97.012601, 27.317476 ], [ 97.015527, 27.314448 ], [ 97.02086, 27.311887 ], [ 97.024724, 27.310457 ], [ 97.029859, 27.30924 ], [ 97.033399, 27.30821 ], [ 97.037347, 27.306269 ], [ 97.040605, 27.305315 ], [ 97.043244, 27.302576 ], [ 97.045884, 27.299841 ], [ 97.046937, 27.296705 ], [ 97.048474, 27.292261 ], [ 97.049642, 27.287745 ], [ 97.050775, 27.284285 ], [ 97.052438, 27.281771 ], [ 97.054388, 27.280527 ], [ 97.057645, 27.279425 ], [ 97.060048, 27.279307 ], [ 97.062123, 27.278536 ], [ 97.064237, 27.276892 ], [ 97.065049, 27.275507 ], [ 97.065206, 27.273977 ], [ 97.066007, 27.26848 ], [ 97.066693, 27.267061 ], [ 97.068517, 27.264105 ], [ 97.070386, 27.262243 ], [ 97.074086, 27.259684 ], [ 97.076402, 27.257929 ], [ 97.078065, 27.25625 ], [ 97.082334, 27.252596 ], [ 97.083672, 27.251211 ], [ 97.086877, 27.246942 ], [ 97.087808, 27.245047 ], [ 97.090611, 27.243181 ], [ 97.094727, 27.242239 ], [ 97.097814, 27.241388 ], [ 97.099485, 27.240465 ], [ 97.100411, 27.237612 ], [ 97.102017, 27.233045 ], [ 97.103536, 27.227079 ], [ 97.102639, 27.221487 ], [ 97.101598, 27.214285 ], [ 97.103586, 27.212423 ], [ 97.107362, 27.208952 ], [ 97.109544, 27.203268 ], [ 97.111696, 27.202242 ], [ 97.118291, 27.202036 ], [ 97.122213, 27.199297 ], [ 97.126699, 27.196436 ], [ 97.133321, 27.192591 ], [ 97.132623, 27.190485 ], [ 97.133611, 27.182474 ], [ 97.135953, 27.176497 ], [ 97.14066, 27.172514 ], [ 97.144563, 27.170789 ], [ 97.151788, 27.165994 ], [ 97.157163, 27.16641 ], [ 97.159887, 27.166472 ], [ 97.162324, 27.153982 ], [ 97.165521, 27.148474 ], [ 97.17048, 27.147909 ], [ 97.173768, 27.145857 ], [ 97.174901, 27.143377 ], [ 97.176678, 27.139986 ], [ 97.175141, 27.131548 ], [ 97.173085, 27.125845 ], [ 97.170591, 27.122942 ], [ 97.163053, 27.119295 ], [ 97.160592, 27.113882 ], [ 97.157438, 27.107855 ], [ 97.153425, 27.100443 ], [ 97.148439, 27.093329 ], [ 97.145589, 27.092577 ], [ 97.144756, 27.092834 ], [ 97.138234, 27.094862 ], [ 97.129136, 27.098207 ], [ 97.124181, 27.100588 ], [ 97.121022, 27.104059 ], [ 97.114888, 27.106554 ], [ 97.111939, 27.106546 ], [ 97.110128, 27.106825 ], [ 97.107354, 27.104143 ], [ 97.102071, 27.105837 ], [ 97.097642, 27.106833 ], [ 97.095952, 27.106367 ], [ 97.09528, 27.105908 ], [ 97.084642, 27.098653 ], [ 97.0761431, 27.0957071 ], [ 97.076337, 27.096323 ], [ 97.073972, 27.098078 ], [ 97.070897, 27.10235 ], [ 97.069875, 27.102614 ], [ 97.069375, 27.103521 ], [ 97.064851, 27.105795 ], [ 97.06334, 27.106252 ], [ 97.06133, 27.108065 ], [ 97.05982, 27.108522 ], [ 97.059323, 27.109877 ], [ 97.058316, 27.110334 ], [ 97.055799, 27.111246 ], [ 97.054292, 27.112604 ], [ 97.052781, 27.113062 ], [ 97.050271, 27.115328 ], [ 97.049775, 27.117136 ], [ 97.045758, 27.12031 ], [ 97.045259, 27.121668 ], [ 97.044251, 27.121671 ], [ 97.043752, 27.122576 ], [ 97.040734, 27.124392 ], [ 97.040235, 27.125746 ], [ 97.038728, 27.127107 ], [ 97.037217, 27.127565 ], [ 97.036718, 27.128469 ], [ 97.0342, 27.129381 ], [ 97.032693, 27.130739 ], [ 97.031182, 27.131197 ], [ 97.030179, 27.132555 ], [ 97.023637, 27.135286 ], [ 97.023134, 27.13619 ], [ 97.020616, 27.136652 ], [ 97.02062, 27.137556 ], [ 97.019612, 27.13801 ], [ 97.018102, 27.138468 ], [ 97.016095, 27.14073 ], [ 97.014581, 27.141187 ], [ 97.010564, 27.144812 ], [ 97.007036, 27.145727 ], [ 97.000482, 27.146654 ], [ 97.000486, 27.147554 ], [ 96.990907, 27.148493 ], [ 96.98536, 27.148962 ], [ 96.983346, 27.149873 ], [ 96.981836, 27.151232 ], [ 96.980325, 27.151686 ], [ 96.980329, 27.15259 ], [ 96.978818, 27.153047 ], [ 96.977311, 27.154406 ], [ 96.975797, 27.154863 ], [ 96.974294, 27.156672 ], [ 96.970765, 27.157587 ], [ 96.970769, 27.158487 ], [ 96.967744, 27.159403 ], [ 96.962701, 27.159868 ], [ 96.960687, 27.16078 ], [ 96.950605, 27.162615 ], [ 96.944551, 27.163088 ], [ 96.940518, 27.164003 ], [ 96.932447, 27.16448 ], [ 96.930432, 27.165388 ], [ 96.92085, 27.165869 ], [ 96.919843, 27.166773 ], [ 96.909757, 27.168157 ], [ 96.90976, 27.169058 ], [ 96.907742, 27.169065 ], [ 96.900182, 27.171343 ], [ 96.900186, 27.172247 ], [ 96.894136, 27.174067 ], [ 96.892625, 27.175425 ], [ 96.890107, 27.176336 ], [ 96.890111, 27.17724 ], [ 96.888597, 27.177694 ], [ 96.8886, 27.178598 ], [ 96.88759, 27.178599 ], [ 96.885579, 27.180861 ], [ 96.884069, 27.181318 ], [ 96.882058, 27.18358 ], [ 96.880544, 27.184034 ], [ 96.880548, 27.184935 ], [ 96.878537, 27.186747 ], [ 96.877023, 27.187201 ], [ 96.877027, 27.188105 ], [ 96.875513, 27.188559 ], [ 96.873502, 27.190371 ], [ 96.870984, 27.191732 ], [ 96.870481, 27.193087 ], [ 96.868974, 27.194445 ], [ 96.867459, 27.194899 ], [ 96.865949, 27.196257 ], [ 96.865449, 27.197611 ], [ 96.860417, 27.202139 ], [ 96.858408, 27.205301 ], [ 96.857919, 27.209364 ], [ 96.856916, 27.212076 ], [ 96.857934, 27.215231 ], [ 96.858945, 27.215681 ], [ 96.859456, 27.217032 ], [ 96.860975, 27.218382 ], [ 96.862489, 27.218828 ], [ 96.863, 27.219732 ], [ 96.864515, 27.220179 ], [ 96.869069, 27.22423 ], [ 96.870587, 27.224676 ], [ 96.871602, 27.226026 ], [ 96.87362, 27.226473 ], [ 96.875646, 27.228273 ], [ 96.879186, 27.230066 ], [ 96.883229, 27.230959 ], [ 96.883737, 27.231859 ], [ 96.886266, 27.233206 ], [ 96.887304, 27.241778 ], [ 96.888315, 27.241777 ], [ 96.888837, 27.246286 ], [ 96.886819, 27.247645 ], [ 96.886319, 27.249002 ], [ 96.884305, 27.25036 ], [ 96.883805, 27.251715 ], [ 96.88028, 27.254434 ], [ 96.875745, 27.257154 ], [ 96.874231, 27.257608 ], [ 96.874234, 27.258512 ], [ 96.871713, 27.25942 ], [ 96.864648, 27.260793 ], [ 96.864145, 27.262148 ], [ 96.863138, 27.262602 ], [ 96.860612, 27.26306 ], [ 96.860112, 27.263964 ], [ 96.858598, 27.264418 ], [ 96.858095, 27.265322 ], [ 96.855073, 27.267134 ], [ 96.85407, 27.269392 ], [ 96.853059, 27.269846 ], [ 96.852056, 27.272108 ], [ 96.850041, 27.273466 ], [ 96.849542, 27.27482 ], [ 96.847524, 27.276178 ], [ 96.847024, 27.277533 ], [ 96.84551, 27.27844 ], [ 96.844514, 27.282053 ], [ 96.843507, 27.282957 ], [ 96.84049, 27.287931 ], [ 96.83949, 27.291994 ], [ 96.836476, 27.296514 ], [ 96.835477, 27.301027 ], [ 96.833967, 27.302836 ], [ 96.830953, 27.30871 ], [ 96.829449, 27.311873 ], [ 96.826425, 27.314588 ], [ 96.825925, 27.315943 ], [ 96.824914, 27.316397 ], [ 96.824415, 27.318201 ], [ 96.822396, 27.319563 ], [ 96.821897, 27.320917 ], [ 96.820383, 27.322275 ], [ 96.81685, 27.323637 ], [ 96.81635, 27.324991 ], [ 96.814328, 27.325445 ], [ 96.813828, 27.326349 ], [ 96.812311, 27.326803 ], [ 96.811307, 27.328611 ], [ 96.809793, 27.329065 ], [ 96.807778, 27.331327 ], [ 96.806268, 27.334039 ], [ 96.805768, 27.335394 ], [ 96.804757, 27.335848 ], [ 96.804257, 27.337202 ], [ 96.7977, 27.34263 ], [ 96.7972, 27.343985 ], [ 96.795686, 27.344892 ], [ 96.794171, 27.345346 ], [ 96.793668, 27.346701 ], [ 96.792661, 27.347154 ], [ 96.791143, 27.347609 ], [ 96.789632, 27.348966 ], [ 96.787107, 27.349874 ], [ 96.78711, 27.350775 ], [ 96.785596, 27.351682 ], [ 96.783071, 27.35259 ], [ 96.781557, 27.353945 ], [ 96.777517, 27.354856 ], [ 96.776509, 27.356211 ], [ 96.769941, 27.357126 ], [ 96.760339, 27.357145 ], [ 96.747705, 27.358072 ], [ 96.74265, 27.35853 ], [ 96.739622, 27.360342 ], [ 96.737096, 27.360796 ], [ 96.735078, 27.362604 ], [ 96.733563, 27.363058 ], [ 96.732049, 27.364416 ], [ 96.730534, 27.36487 ], [ 96.728013, 27.367132 ], [ 96.725995, 27.369841 ], [ 96.724481, 27.370295 ], [ 96.72347, 27.371649 ], [ 96.721956, 27.372103 ], [ 96.720948, 27.37346 ], [ 96.717412, 27.374368 ], [ 96.715391, 27.376177 ], [ 96.708821, 27.376638 ], [ 96.707807, 27.375735 ], [ 96.706796, 27.375738 ], [ 96.704267, 27.374388 ], [ 96.703759, 27.373034 ], [ 96.700722, 27.370332 ], [ 96.700212, 27.368075 ], [ 96.699201, 27.368078 ], [ 96.698182, 27.364469 ], [ 96.697671, 27.360407 ], [ 96.696657, 27.359056 ], [ 96.696145, 27.355898 ], [ 96.694627, 27.353193 ], [ 96.693609, 27.350035 ], [ 96.692598, 27.350035 ], [ 96.691079, 27.34733 ], [ 96.690568, 27.345976 ], [ 96.689557, 27.345526 ], [ 96.68905, 27.344175 ], [ 96.688039, 27.343725 ], [ 96.687532, 27.342371 ], [ 96.68551, 27.34102 ], [ 96.683485, 27.340571 ], [ 96.682981, 27.33967 ], [ 96.681462, 27.33922 ], [ 96.680955, 27.338319 ], [ 96.676404, 27.335615 ], [ 96.673371, 27.335169 ], [ 96.671346, 27.333818 ], [ 96.663766, 27.333826 ], [ 96.66377, 27.33473 ], [ 96.658716, 27.336088 ], [ 96.657708, 27.337443 ], [ 96.656194, 27.337896 ], [ 96.654679, 27.339251 ], [ 96.653672, 27.341509 ], [ 96.652661, 27.341963 ], [ 96.652158, 27.343767 ], [ 96.651147, 27.344221 ], [ 96.650644, 27.345575 ], [ 96.648625, 27.34693 ], [ 96.648122, 27.348284 ], [ 96.645093, 27.350546 ], [ 96.644589, 27.3528 ], [ 96.642571, 27.354608 ], [ 96.641054, 27.355062 ], [ 96.639539, 27.356417 ], [ 96.638025, 27.35687 ], [ 96.63651, 27.358225 ], [ 96.634992, 27.358679 ], [ 96.634489, 27.360033 ], [ 96.633481, 27.360483 ], [ 96.630952, 27.361387 ], [ 96.630956, 27.362291 ], [ 96.627923, 27.363649 ], [ 96.625398, 27.364553 ], [ 96.624894, 27.365908 ], [ 96.620343, 27.366812 ], [ 96.610742, 27.366823 ], [ 96.606187, 27.362764 ], [ 96.605176, 27.360506 ], [ 96.604158, 27.353739 ], [ 96.603147, 27.353739 ], [ 96.601625, 27.348326 ], [ 96.601117, 27.345167 ], [ 96.599599, 27.343363 ], [ 96.599092, 27.340204 ], [ 96.597573, 27.33795 ], [ 96.597066, 27.335695 ], [ 96.596055, 27.335695 ], [ 96.59403, 27.332086 ], [ 96.593526, 27.330732 ], [ 96.591501, 27.329378 ], [ 96.590997, 27.328027 ], [ 96.588975, 27.326674 ], [ 96.587457, 27.323969 ], [ 96.584924, 27.318102 ], [ 96.583913, 27.318102 ], [ 96.583409, 27.317201 ], [ 96.581891, 27.314043 ], [ 96.57734, 27.309984 ], [ 96.575826, 27.309534 ], [ 96.571779, 27.305925 ], [ 96.569253, 27.305025 ], [ 96.567738, 27.303671 ], [ 96.566221, 27.303221 ], [ 96.562177, 27.300516 ], [ 96.55763, 27.299162 ], [ 96.550054, 27.299166 ], [ 96.545003, 27.299619 ], [ 96.54197, 27.298716 ], [ 96.53793, 27.297815 ], [ 96.53338, 27.293303 ], [ 96.531865, 27.292852 ], [ 96.530855, 27.291498 ], [ 96.528833, 27.291048 ], [ 96.526308, 27.289244 ], [ 96.519742, 27.289244 ], [ 96.519235, 27.290148 ], [ 96.51671, 27.291052 ], [ 96.516206, 27.291952 ], [ 96.514185, 27.295111 ], [ 96.511659, 27.296465 ], [ 96.499032, 27.296468 ], [ 96.484384, 27.295111 ], [ 96.478826, 27.296015 ], [ 96.470743, 27.296465 ], [ 96.468721, 27.297365 ], [ 96.458619, 27.299169 ], [ 96.458112, 27.30007 ], [ 96.450029, 27.30097 ], [ 96.448514, 27.301874 ], [ 96.444471, 27.302324 ], [ 96.442956, 27.303224 ], [ 96.43942, 27.303675 ], [ 96.438409, 27.304575 ], [ 96.433355, 27.305025 ], [ 96.430326, 27.303671 ], [ 96.4278, 27.302767 ], [ 96.424268, 27.299154 ], [ 96.42275, 27.298701 ], [ 96.422246, 27.2978 ], [ 96.420732, 27.297346 ], [ 96.419217, 27.295542 ], [ 96.417703, 27.295541 ], [ 96.413156, 27.29328 ], [ 96.410631, 27.292829 ], [ 96.409623, 27.291925 ], [ 96.404572, 27.291018 ], [ 96.400026, 27.28921 ], [ 96.396997, 27.289209 ], [ 96.385381, 27.288298 ], [ 96.376791, 27.289194 ], [ 96.366689, 27.290087 ], [ 96.361638, 27.290079 ], [ 96.35507, 27.289622 ], [ 96.351033, 27.287813 ], [ 96.339921, 27.287351 ], [ 96.336385, 27.288248 ], [ 96.336381, 27.289152 ], [ 96.326276, 27.291845 ], [ 96.326272, 27.292749 ], [ 96.314149, 27.293635 ], [ 96.308091, 27.291372 ], [ 96.307588, 27.290468 ], [ 96.306073, 27.290465 ], [ 96.302541, 27.288656 ], [ 96.300016, 27.287749 ], [ 96.296484, 27.28549 ], [ 96.295473, 27.285486 ], [ 96.292447, 27.283678 ], [ 96.290933, 27.283224 ], [ 96.287908, 27.280061 ], [ 96.285893, 27.277349 ], [ 96.28539, 27.275995 ], [ 96.283876, 27.275541 ], [ 96.282365, 27.272379 ], [ 96.278837, 27.269667 ], [ 96.274797, 27.269659 ], [ 96.268227, 27.271906 ], [ 96.264184, 27.272352 ], [ 96.264184, 27.273253 ], [ 96.261659, 27.273699 ], [ 96.254586, 27.274591 ], [ 96.239434, 27.274564 ], [ 96.237416, 27.273657 ], [ 96.23388, 27.273649 ], [ 96.232366, 27.272745 ], [ 96.230852, 27.272291 ], [ 96.22783, 27.269125 ], [ 96.226316, 27.268671 ], [ 96.22632, 27.267771 ], [ 96.224805, 27.266413 ], [ 96.222787, 27.265958 ], [ 96.221277, 27.26415 ], [ 96.216737, 27.262785 ], [ 96.213201, 27.262778 ], [ 96.207647, 27.261865 ], [ 96.20664, 27.260961 ], [ 96.204118, 27.260504 ], [ 96.203614, 27.2596 ], [ 96.202604, 27.259599 ], [ 96.198068, 27.255979 ], [ 96.197568, 27.254622 ], [ 96.194547, 27.251909 ], [ 96.191518, 27.251451 ], [ 96.188493, 27.249639 ], [ 96.178903, 27.248263 ], [ 96.168805, 27.247789 ], [ 96.16073, 27.246416 ], [ 96.155683, 27.245501 ], [ 96.152154, 27.243688 ], [ 96.151144, 27.243685 ], [ 96.146608, 27.241869 ], [ 96.146104, 27.240965 ], [ 96.14459, 27.240511 ], [ 96.14409, 27.239607 ], [ 96.142576, 27.239149 ], [ 96.142076, 27.238245 ], [ 96.141065, 27.238245 ], [ 96.138044, 27.235979 ], [ 96.136529, 27.235525 ], [ 96.132501, 27.232805 ], [ 96.128465, 27.231893 ], [ 96.126954, 27.230535 ], [ 96.124429, 27.230078 ], [ 96.122415, 27.228719 ], [ 96.120397, 27.228712 ], [ 96.118886, 27.227804 ], [ 96.114343, 27.227343 ], [ 96.112325, 27.226435 ], [ 96.106775, 27.225966 ], [ 96.105264, 27.225061 ], [ 96.101732, 27.224149 ], [ 96.100728, 27.222792 ], [ 96.099218, 27.222334 ], [ 96.098211, 27.22098 ], [ 96.0967, 27.220522 ], [ 96.096196, 27.219618 ], [ 96.094686, 27.219164 ], [ 96.094182, 27.21826 ], [ 96.092668, 27.217806 ], [ 96.090154, 27.21554 ], [ 96.088136, 27.215082 ], [ 96.087636, 27.214178 ], [ 96.086122, 27.213724 ], [ 96.083608, 27.211458 ], [ 96.08008, 27.209643 ], [ 96.077055, 27.208731 ], [ 96.075547, 27.207373 ], [ 96.074033, 27.206919 ], [ 96.072526, 27.205561 ], [ 96.071012, 27.205103 ], [ 96.069505, 27.203745 ], [ 96.068494, 27.203741 ], [ 96.06648, 27.202383 ], [ 96.063959, 27.201471 ], [ 96.063459, 27.200567 ], [ 96.061948, 27.200113 ], [ 96.059934, 27.198301 ], [ 96.056409, 27.196485 ], [ 96.053888, 27.195574 ], [ 96.052381, 27.194216 ], [ 96.049859, 27.193754 ], [ 96.049359, 27.19285 ], [ 96.047845, 27.192846 ], [ 96.045327, 27.191034 ], [ 96.043828, 27.187868 ], [ 96.042829, 27.184709 ], [ 96.041822, 27.184705 ], [ 96.041826, 27.183351 ], [ 96.038816, 27.178827 ], [ 96.037816, 27.176569 ], [ 96.035802, 27.175657 ], [ 96.035302, 27.174303 ], [ 96.033795, 27.173395 ], [ 96.033296, 27.172041 ], [ 96.027261, 27.167055 ], [ 96.02575, 27.166601 ], [ 96.02223, 27.163428 ], [ 96.021733, 27.162073 ], [ 96.020223, 27.160715 ], [ 96.019731, 27.158457 ], [ 96.01872, 27.158453 ], [ 96.018224, 27.156195 ], [ 96.016721, 27.153933 ], [ 96.015726, 27.15077 ], [ 96.014718, 27.150767 ], [ 96.014722, 27.149866 ], [ 96.013711, 27.149862 ], [ 96.013715, 27.148958 ], [ 96.012208, 27.1476 ], [ 96.011209, 27.145342 ], [ 96.010221, 27.140825 ], [ 96.00921, 27.140821 ], [ 96.00673, 27.131788 ], [ 96.005719, 27.131784 ], [ 96.00522, 27.13088 ], [ 96.004724, 27.128622 ], [ 96.003221, 27.12681 ], [ 96.002229, 27.123197 ], [ 96.001218, 27.123194 ], [ 96.001226, 27.121839 ], [ 95.997708, 27.118666 ], [ 95.996198, 27.118212 ], [ 95.994191, 27.115946 ], [ 95.992681, 27.115492 ], [ 95.992177, 27.114588 ], [ 95.990163, 27.114126 ], [ 95.983636, 27.108236 ], [ 95.983136, 27.106882 ], [ 95.982129, 27.106878 ], [ 95.981626, 27.105974 ], [ 95.980116, 27.105516 ], [ 95.979115, 27.104158 ], [ 95.978616, 27.102804 ], [ 95.975607, 27.09918 ], [ 95.97461, 27.096922 ], [ 95.9736, 27.096918 ], [ 95.972604, 27.094659 ], [ 95.971597, 27.094202 ], [ 95.971101, 27.092848 ], [ 95.968594, 27.089678 ], [ 95.968095, 27.088323 ], [ 95.965585, 27.086058 ], [ 95.962087, 27.079275 ], [ 95.960577, 27.078817 ], [ 95.960084, 27.076559 ], [ 95.958581, 27.074297 ], [ 95.958093, 27.071135 ], [ 95.95709, 27.07023 ], [ 95.956094, 27.067969 ], [ 95.95461, 27.062097 ], [ 95.9521, 27.059832 ], [ 95.950098, 27.056665 ], [ 95.948099, 27.053045 ], [ 95.946591, 27.052588 ], [ 95.943578, 27.049871 ], [ 95.942067, 27.049414 ], [ 95.940564, 27.048052 ], [ 95.93855, 27.047594 ], [ 95.936544, 27.045782 ], [ 95.931009, 27.043501 ], [ 95.928491, 27.043039 ], [ 95.921952, 27.040758 ], [ 95.918928, 27.040743 ], [ 95.912893, 27.038462 ], [ 95.91089, 27.036199 ], [ 95.908372, 27.035738 ], [ 95.905862, 27.033468 ], [ 95.902864, 27.028494 ], [ 95.902368, 27.027136 ], [ 95.901361, 27.027132 ], [ 95.901365, 27.026231 ], [ 95.900358, 27.026224 ], [ 95.899358, 27.024866 ], [ 95.897847, 27.024862 ], [ 95.890798, 27.023477 ], [ 95.889795, 27.02257 ], [ 95.887281, 27.021658 ], [ 95.885278, 27.019392 ], [ 95.883264, 27.018931 ], [ 95.881761, 27.017119 ], [ 95.878244, 27.015299 ], [ 95.876737, 27.014841 ], [ 95.873216, 27.013922 ], [ 95.863641, 27.01388 ], [ 95.862123, 27.014776 ], [ 95.85708, 27.015657 ], [ 95.849527, 27.014719 ], [ 95.848527, 27.013811 ], [ 95.846009, 27.013349 ], [ 95.843499, 27.01153 ], [ 95.840478, 27.011065 ], [ 95.837968, 27.009699 ], [ 95.826883, 27.009649 ], [ 95.826375, 27.010549 ], [ 95.821325, 27.012781 ], [ 95.8188, 27.01322 ], [ 95.816777, 27.014563 ], [ 95.81022, 27.015886 ], [ 95.808213, 27.014521 ], [ 95.807717, 27.013166 ], [ 95.806207, 27.012705 ], [ 95.805215, 27.009993 ], [ 95.803762, 27.000963 ], [ 95.797246, 26.995512 ], [ 95.794225, 26.995047 ], [ 95.793222, 26.994139 ], [ 95.790712, 26.993223 ], [ 95.790716, 26.992323 ], [ 95.789213, 26.990961 ], [ 95.787244, 26.983732 ], [ 95.78576, 26.979212 ], [ 95.784253, 26.97875 ], [ 95.782251, 26.976935 ], [ 95.778226, 26.976011 ], [ 95.772699, 26.97373 ], [ 95.770707, 26.97056 ], [ 95.770215, 26.968752 ], [ 95.769205, 26.968748 ], [ 95.76922, 26.96694 ], [ 95.767236, 26.961966 ], [ 95.765233, 26.96015 ], [ 95.763223, 26.959688 ], [ 95.760717, 26.957419 ], [ 95.758203, 26.956957 ], [ 95.756197, 26.955591 ], [ 95.755723, 26.951075 ], [ 95.756757, 26.94702 ], [ 95.756791, 26.942057 ], [ 95.757821, 26.938452 ], [ 95.758416, 26.924463 ], [ 95.757471, 26.914984 ], [ 95.7555001, 26.9100045 ], [ 95.753988, 26.908647 ], [ 95.751993, 26.905928 ], [ 95.750486, 26.90547 ], [ 95.745485, 26.90048 ], [ 95.743978, 26.900019 ], [ 95.741979, 26.897753 ], [ 95.739969, 26.897291 ], [ 95.734967, 26.892752 ], [ 95.734472, 26.891394 ], [ 95.731969, 26.889124 ], [ 95.729459, 26.888208 ], [ 95.728963, 26.887304 ], [ 95.72244, 26.884558 ], [ 95.719923, 26.884546 ], [ 95.715906, 26.883169 ], [ 95.713392, 26.883154 ], [ 95.710362, 26.884493 ], [ 95.709848, 26.885843 ], [ 95.7058, 26.888979 ], [ 95.705289, 26.89033 ], [ 95.704278, 26.890776 ], [ 95.702764, 26.891218 ], [ 95.701245, 26.892565 ], [ 95.699731, 26.893007 ], [ 95.699727, 26.893908 ], [ 95.698213, 26.894354 ], [ 95.696694, 26.895697 ], [ 95.69518, 26.896139 ], [ 95.69164, 26.898375 ], [ 95.690126, 26.898817 ], [ 95.690122, 26.899721 ], [ 95.688604, 26.900614 ], [ 95.68406, 26.902845 ], [ 95.680524, 26.904177 ], [ 95.675992, 26.904604 ], [ 95.672479, 26.90323 ], [ 95.67098, 26.901865 ], [ 95.669473, 26.901407 ], [ 95.668974, 26.9005 ], [ 95.667467, 26.900041 ], [ 95.664968, 26.897768 ], [ 95.664475, 26.896414 ], [ 95.660474, 26.892778 ], [ 95.658967, 26.89232 ], [ 95.658975, 26.891416 ], [ 95.657968, 26.891409 ], [ 95.65748, 26.889601 ], [ 95.654985, 26.886427 ], [ 95.654004, 26.883264 ], [ 95.652501, 26.881902 ], [ 95.652017, 26.879641 ], [ 95.650025, 26.876921 ], [ 95.64953, 26.875566 ], [ 95.648031, 26.874201 ], [ 95.646524, 26.873743 ], [ 95.646532, 26.872839 ], [ 95.644029, 26.871019 ], [ 95.643537, 26.869661 ], [ 95.642533, 26.869204 ], [ 95.642041, 26.867849 ], [ 95.640542, 26.866484 ], [ 95.64005, 26.865129 ], [ 95.639043, 26.865122 ], [ 95.638551, 26.863764 ], [ 95.637547, 26.86331 ], [ 95.635584, 26.856527 ], [ 95.634652, 26.847044 ], [ 95.633645, 26.84704 ], [ 95.632676, 26.842069 ], [ 95.631681, 26.840708 ], [ 95.631196, 26.838449 ], [ 95.630189, 26.838442 ], [ 95.629205, 26.835279 ], [ 95.627709, 26.833914 ], [ 95.627214, 26.832559 ], [ 95.624711, 26.83119 ], [ 95.624219, 26.829832 ], [ 95.622209, 26.82937 ], [ 95.616719, 26.823919 ], [ 95.616231, 26.822111 ], [ 95.615232, 26.821203 ], [ 95.61474, 26.819845 ], [ 95.613736, 26.819387 ], [ 95.613244, 26.81803 ], [ 95.611242, 26.816664 ], [ 95.610749, 26.815309 ], [ 95.60925, 26.813944 ], [ 95.599695, 26.813883 ], [ 95.595159, 26.81521 ], [ 95.595151, 26.816111 ], [ 95.591112, 26.817892 ], [ 95.585565, 26.819658 ], [ 95.585057, 26.820559 ], [ 95.582536, 26.820994 ], [ 95.579004, 26.822775 ], [ 95.575475, 26.823656 ], [ 95.575467, 26.82456 ], [ 95.570928, 26.825884 ], [ 95.565892, 26.826753 ], [ 95.565885, 26.827654 ], [ 95.559842, 26.828516 ], [ 95.557817, 26.829859 ], [ 95.549764, 26.830255 ], [ 95.547258, 26.829336 ], [ 95.545751, 26.829325 ], [ 95.544751, 26.828417 ], [ 95.543245, 26.827955 ], [ 95.541749, 26.82659 ], [ 95.540243, 26.826128 ], [ 95.539247, 26.82477 ], [ 95.536745, 26.823397 ], [ 95.536252, 26.822039 ], [ 95.534749, 26.821577 ], [ 95.534757, 26.820677 ], [ 95.530252, 26.817938 ], [ 95.528249, 26.817022 ], [ 95.523229, 26.815634 ], [ 95.520216, 26.815161 ], [ 95.519723, 26.814256 ], [ 95.518216, 26.813795 ], [ 95.516221, 26.811975 ], [ 95.514215, 26.81151 ], [ 95.513215, 26.810599 ], [ 95.511709, 26.810137 ], [ 95.510213, 26.808775 ], [ 95.503694, 26.806471 ], [ 95.499242, 26.798319 ], [ 95.497758, 26.795149 ], [ 95.496797, 26.790178 ], [ 95.496385, 26.779795 ], [ 95.494939, 26.773016 ], [ 95.493943, 26.771654 ], [ 95.493459, 26.769846 ], [ 95.49246, 26.768938 ], [ 95.490476, 26.765764 ], [ 95.489503, 26.762148 ], [ 95.488503, 26.76169 ], [ 95.486066, 26.753099 ], [ 95.485101, 26.748579 ], [ 95.482107, 26.745848 ], [ 95.4801, 26.745382 ], [ 95.478605, 26.74402 ], [ 95.477102, 26.743555 ], [ 95.476606, 26.742651 ], [ 95.475103, 26.742189 ], [ 95.471616, 26.738554 ], [ 95.470113, 26.738092 ], [ 95.468622, 26.736276 ], [ 95.467119, 26.735811 ], [ 95.464628, 26.733538 ], [ 95.464135, 26.73218 ], [ 95.461141, 26.729902 ], [ 95.460652, 26.728544 ], [ 95.459646, 26.728537 ], [ 95.459157, 26.727182 ], [ 95.45815, 26.727174 ], [ 95.458158, 26.726271 ], [ 95.456663, 26.724905 ], [ 95.456174, 26.723547 ], [ 95.453691, 26.720373 ], [ 95.453199, 26.719015 ], [ 95.451204, 26.717646 ], [ 95.450219, 26.715383 ], [ 95.449212, 26.715376 ], [ 95.44922, 26.714472 ], [ 95.447725, 26.713106 ], [ 95.446248, 26.709936 ], [ 95.445246, 26.709478 ], [ 95.442781, 26.704496 ], [ 95.4397428, 26.7023519 ], [ 95.4347944, 26.7025376 ], [ 95.431756, 26.701254 ], [ 95.420205, 26.700716 ], [ 95.416692, 26.700239 ], [ 95.409192, 26.69657 ], [ 95.406182, 26.696096 ], [ 95.404188, 26.694277 ], [ 95.402685, 26.693812 ], [ 95.402192, 26.692907 ], [ 95.39969, 26.691984 ], [ 95.399194, 26.69108 ], [ 95.397191, 26.690611 ], [ 95.395696, 26.689245 ], [ 95.393193, 26.688326 ], [ 95.391198, 26.686956 ], [ 95.388688, 26.686483 ], [ 95.385182, 26.685553 ], [ 95.384187, 26.684644 ], [ 95.380177, 26.68371 ], [ 95.378678, 26.682795 ], [ 95.374662, 26.682314 ], [ 95.373666, 26.681402 ], [ 95.37116, 26.680929 ], [ 95.366122, 26.674303 ], [ 95.358798, 26.669908 ], [ 95.342684, 26.67401 ], [ 95.331552, 26.671959 ], [ 95.3251985, 26.6650911 ], [ 95.315145, 26.664341 ], [ 95.307236, 26.657016 ], [ 95.302841, 26.650863 ], [ 95.293588, 26.653219 ], [ 95.282626, 26.656136 ], [ 95.272958, 26.65848 ], [ 95.265872, 26.656793 ], [ 95.260653, 26.65555 ], [ 95.257137, 26.657894 ], [ 95.256551, 26.663168 ], [ 95.257137, 26.673129 ], [ 95.253328, 26.677524 ], [ 95.248048, 26.684412 ], [ 95.232527, 26.68016 ], [ 95.22198, 26.668733 ], [ 95.213777, 26.661116 ], [ 95.211236, 26.652044 ], [ 95.210748, 26.650686 ], [ 95.205778, 26.646128 ], [ 95.204278, 26.645662 ], [ 95.202787, 26.644296 ], [ 95.202299, 26.642938 ], [ 95.199319, 26.640203 ], [ 95.197816, 26.639738 ], [ 95.197324, 26.63883 ], [ 95.194322, 26.6379 ], [ 95.190808, 26.637869 ], [ 95.18881, 26.636946 ], [ 95.180284, 26.635965 ], [ 95.175279, 26.634565 ], [ 95.174287, 26.633654 ], [ 95.171781, 26.63318 ], [ 95.169797, 26.630903 ], [ 95.168298, 26.630438 ], [ 95.167806, 26.629534 ], [ 95.166303, 26.629068 ], [ 95.16084, 26.624052 ], [ 95.160352, 26.622694 ], [ 95.158857, 26.621778 ], [ 95.158868, 26.620874 ], [ 95.157369, 26.620409 ], [ 95.155393, 26.617682 ], [ 95.153405, 26.615858 ], [ 95.153417, 26.614958 ], [ 95.151914, 26.614492 ], [ 95.150937, 26.612226 ], [ 95.149938, 26.611765 ], [ 95.149007, 26.60544 ], [ 95.147275, 26.592849 ], [ 95.153134, 26.582595 ], [ 95.143467, 26.570582 ], [ 95.138021, 26.558405 ], [ 95.136521, 26.55794 ], [ 95.125595, 26.558862 ], [ 95.122959, 26.551831 ], [ 95.113291, 26.546264 ], [ 95.108018, 26.543334 ], [ 95.10626, 26.539818 ], [ 95.110948, 26.537474 ], [ 95.113292, 26.529857 ], [ 95.115636, 26.523411 ], [ 95.112706, 26.517258 ], [ 95.104796, 26.508469 ], [ 95.100108, 26.503195 ], [ 95.096007, 26.494112 ], [ 95.086925, 26.488838 ], [ 95.082531, 26.483564 ], [ 95.0818, 26.478438 ], [ 95.0726706, 26.4736765 ], [ 95.069348, 26.464227 ], [ 95.063196, 26.452215 ], [ 95.063782, 26.443718 ], [ 95.072571, 26.445476 ], [ 95.080188, 26.448406 ], [ 95.089563, 26.439324 ], [ 95.098646, 26.425554 ], [ 95.104095, 26.417523 ], [ 95.104234, 26.406008 ], [ 95.103238, 26.40555 ], [ 95.102823, 26.398325 ], [ 95.101347, 26.396055 ], [ 95.100873, 26.393793 ], [ 95.111537, 26.39274 ], [ 95.124428, 26.387173 ], [ 95.132925, 26.383072 ], [ 95.129702, 26.369009 ], [ 95.123843, 26.356703 ], [ 95.12648, 26.343812 ], [ 95.126481, 26.332385 ], [ 95.125602, 26.319494 ], [ 95.122673, 26.306603 ], [ 95.128239, 26.299864 ], [ 95.126775, 26.291954 ], [ 95.125603, 26.283164 ], [ 95.123845, 26.276132 ], [ 95.121209, 26.26705 ], [ 95.121209, 26.25826 ], [ 95.125311, 26.255331 ], [ 95.125311, 26.249178 ], [ 95.120916, 26.242732 ], [ 95.116229, 26.236872 ], [ 95.120917, 26.227497 ], [ 95.130878, 26.219587 ], [ 95.142011, 26.213727 ], [ 95.137031, 26.206988 ], [ 95.131143, 26.205912 ], [ 95.131181, 26.202753 ], [ 95.129685, 26.202288 ], [ 95.128698, 26.200922 ], [ 95.120918, 26.1856 ], [ 95.125899, 26.176811 ], [ 95.118868, 26.167435 ], [ 95.117158, 26.161554 ], [ 95.118169, 26.160662 ], [ 95.118696, 26.158411 ], [ 95.120721, 26.156172 ], [ 95.121248, 26.153921 ], [ 95.12277, 26.152132 ], [ 95.1233, 26.149427 ], [ 95.124818, 26.148088 ], [ 95.126355, 26.144945 ], [ 95.125913, 26.139975 ], [ 95.124482, 26.134096 ], [ 95.123991, 26.133188 ], [ 95.122991, 26.13318 ], [ 95.122034, 26.12956 ], [ 95.121045, 26.128649 ], [ 95.120572, 26.126387 ], [ 95.119584, 26.125475 ], [ 95.1196, 26.124121 ], [ 95.1186, 26.124113 ], [ 95.119188, 26.116446 ], [ 95.116233, 26.113233 ], [ 95.117405, 26.104443 ], [ 95.120042, 26.099463 ], [ 95.131468, 26.095068 ], [ 95.140843, 26.095069 ], [ 95.147288, 26.088916 ], [ 95.152982, 26.09014 ], [ 95.165745, 26.09126 ], [ 95.179086, 26.080004 ], [ 95.184789, 26.075147 ], [ 95.184705, 26.069223 ], [ 95.183209, 26.068758 ], [ 95.181726, 26.067392 ], [ 95.179238, 26.066465 ], [ 95.17727, 26.063742 ], [ 95.17679, 26.06193 ], [ 95.174833, 26.058302 ], [ 95.173837, 26.057844 ], [ 95.170903, 26.052401 ], [ 95.170434, 26.049688 ], [ 95.169435, 26.04968 ], [ 95.167016, 26.042437 ], [ 95.16604, 26.040621 ], [ 95.165044, 26.040163 ], [ 95.164582, 26.036997 ], [ 95.162625, 26.033369 ], [ 95.162145, 26.031561 ], [ 95.161157, 26.030649 ], [ 95.159231, 26.024313 ], [ 95.157758, 26.022043 ], [ 95.156289, 26.019323 ], [ 95.154324, 26.016596 ], [ 95.152841, 26.015227 ], [ 95.152356, 26.013868 ], [ 95.150868, 26.012953 ], [ 95.149896, 26.010687 ], [ 95.148412, 26.009321 ], [ 95.147928, 26.007963 ], [ 95.146447, 26.006594 ], [ 95.145963, 26.005236 ], [ 95.143487, 26.003408 ], [ 95.143003, 26.00205 ], [ 95.140023, 26.000666 ], [ 95.136548, 25.998831 ], [ 95.13606, 25.997923 ], [ 95.134565, 25.997457 ], [ 95.133577, 25.996546 ], [ 95.132081, 25.996531 ], [ 95.130602, 25.994711 ], [ 95.13062, 25.993357 ], [ 95.129621, 25.993349 ], [ 95.129136, 25.991991 ], [ 95.124689, 25.987886 ], [ 95.123692, 25.987879 ], [ 95.123208, 25.986517 ], [ 95.122216, 25.986059 ], [ 95.120786, 25.980177 ], [ 95.119802, 25.978815 ], [ 95.118803, 25.978804 ], [ 95.118322, 25.977446 ], [ 95.115358, 25.97471 ], [ 95.113866, 25.974245 ], [ 95.113374, 25.973337 ], [ 95.110887, 25.972864 ], [ 95.109903, 25.971499 ], [ 95.108411, 25.971033 ], [ 95.104936, 25.969195 ], [ 95.103955, 25.967832 ], [ 95.102464, 25.967367 ], [ 95.099981, 25.96599 ], [ 95.0995, 25.964628 ], [ 95.098016, 25.963262 ], [ 95.096525, 25.962797 ], [ 95.095544, 25.961432 ], [ 95.094052, 25.960966 ], [ 95.092077, 25.959143 ], [ 95.092088, 25.958239 ], [ 95.090596, 25.957773 ], [ 95.089124, 25.955503 ], [ 95.087148, 25.95368 ], [ 95.08716, 25.952776 ], [ 95.085668, 25.952311 ], [ 95.083703, 25.949583 ], [ 95.082711, 25.949122 ], [ 95.082227, 25.947764 ], [ 95.081239, 25.946852 ], [ 95.078751, 25.946378 ], [ 95.074785, 25.944082 ], [ 95.070802, 25.94314 ], [ 95.064847, 25.940374 ], [ 95.062356, 25.939897 ], [ 95.061369, 25.938986 ], [ 95.057382, 25.938494 ], [ 95.055898, 25.937578 ], [ 95.040929, 25.936975 ], [ 95.036943, 25.936483 ], [ 95.036455, 25.935576 ], [ 95.028974, 25.935049 ], [ 95.029508, 25.932348 ], [ 95.03106, 25.927851 ], [ 95.03063, 25.92243 ], [ 95.02868, 25.918802 ], [ 95.027692, 25.917887 ], [ 95.027337, 25.906153 ], [ 95.025869, 25.903879 ], [ 95.025399, 25.901621 ], [ 95.023427, 25.899794 ], [ 95.022455, 25.897528 ], [ 95.019517, 25.892985 ], [ 95.019536, 25.89163 ], [ 95.018537, 25.891622 ], [ 95.017591, 25.887552 ], [ 95.017698, 25.878977 ], [ 95.019258, 25.874029 ], [ 95.019784, 25.871778 ], [ 95.022821, 25.8682 ], [ 95.023336, 25.86685 ], [ 95.026353, 25.865076 ], [ 95.026872, 25.863276 ], [ 95.028386, 25.861937 ], [ 95.029886, 25.861502 ], [ 95.031927, 25.857912 ], [ 95.032071, 25.846182 ], [ 95.033601, 25.843489 ], [ 95.033212, 25.834459 ], [ 95.033281, 25.829046 ], [ 95.035364, 25.821844 ], [ 95.036371, 25.820952 ], [ 95.036897, 25.818701 ], [ 95.038449, 25.814203 ], [ 95.040494, 25.810163 ], [ 95.041513, 25.80837 ], [ 95.042516, 25.807928 ], [ 95.043031, 25.806578 ], [ 95.044034, 25.806139 ], [ 95.044553, 25.804338 ], [ 95.046575, 25.802103 ], [ 95.048074, 25.801664 ], [ 95.050092, 25.799879 ], [ 95.050607, 25.798532 ], [ 95.05161, 25.79809 ], [ 95.051675, 25.792677 ], [ 95.050687, 25.791765 ], [ 95.050214, 25.789953 ], [ 95.048272, 25.785421 ], [ 95.04733, 25.780901 ], [ 95.046357, 25.779085 ], [ 95.046621, 25.757425 ], [ 95.0447134, 25.7523991 ], [ 95.0418469, 25.7497689 ], [ 95.0415653, 25.7468901 ], [ 95.0410489, 25.7448865 ], [ 95.0409976, 25.743878 ], [ 95.0410136, 25.7425829 ], [ 95.0378059, 25.7398546 ], [ 95.0332327, 25.7395386 ], [ 95.0303097, 25.7394596 ], [ 95.0273371, 25.7380986 ], [ 95.0239369, 25.73494 ], [ 95.023032, 25.7321792 ], [ 95.0213826, 25.7313797 ], [ 95.0180563, 25.7318 ], [ 95.0111093, 25.7324184 ], [ 95.0075479, 25.7308388 ], [ 94.997703, 25.724831 ], [ 94.991844, 25.719752 ], [ 94.990672, 25.711549 ], [ 94.987547, 25.707252 ], [ 94.977, 25.70022 ], [ 94.967235, 25.690063 ], [ 94.95161, 25.679906 ], [ 94.940282, 25.672092 ], [ 94.933251, 25.663498 ], [ 94.923876, 25.648263 ], [ 94.91997, 25.633027 ], [ 94.918018, 25.614276 ], [ 94.912939, 25.606854 ], [ 94.899658, 25.597869 ], [ 94.883979, 25.594346 ], [ 94.880908, 25.588884 ], [ 94.886768, 25.583415 ], [ 94.894581, 25.573649 ], [ 94.896143, 25.56818 ], [ 94.885596, 25.565836 ], [ 94.867237, 25.564663 ], [ 94.844971, 25.560366 ], [ 94.828956, 25.545521 ], [ 94.82544, 25.535755 ], [ 94.825831, 25.526379 ], [ 94.824269, 25.523254 ], [ 94.812941, 25.511534 ], [ 94.807863, 25.495518 ], [ 94.797719, 25.492551 ], [ 94.790285, 25.490048 ], [ 94.782863, 25.481845 ], [ 94.762941, 25.481453 ], [ 94.76033, 25.485225 ], [ 94.7570616, 25.49161 ], [ 94.7537395, 25.4935668 ], [ 94.7512791, 25.4939069 ], [ 94.749269, 25.49161 ], [ 94.74267, 25.482874 ], [ 94.725385, 25.474996 ], [ 94.72392, 25.473173 ], [ 94.716066, 25.470905 ], [ 94.702003, 25.469733 ], [ 94.686378, 25.466217 ], [ 94.6816482, 25.4568074 ], [ 94.674269, 25.44434 ], [ 94.673879, 25.426371 ], [ 94.666848, 25.415823 ], [ 94.660207, 25.405275 ], [ 94.650832, 25.405275 ], [ 94.635598, 25.395509 ], [ 94.633255, 25.375976 ], [ 94.634427, 25.357616 ], [ 94.625443, 25.347459 ], [ 94.609818, 25.316988 ], [ 94.597319, 25.293549 ], [ 94.5856, 25.267766 ], [ 94.588726, 25.259172 ], [ 94.58521, 25.249015 ], [ 94.584429, 25.231436 ], [ 94.577399, 25.21581 ], [ 94.59029, 25.195888 ], [ 94.603572, 25.184559 ], [ 94.610212, 25.183778 ], [ 94.618416, 25.186122 ], [ 94.627791, 25.175575 ], [ 94.638729, 25.16659 ], [ 94.648885, 25.167372 ], [ 94.672323, 25.157215 ], [ 94.681698, 25.152137 ], [ 94.687557, 25.157216 ], [ 94.701621, 25.148622 ], [ 94.725449, 25.133778 ], [ 94.737559, 25.13495 ], [ 94.740684, 25.125574 ], [ 94.73795, 25.113855 ], [ 94.742638, 25.087682 ], [ 94.740295, 25.066587 ], [ 94.745244, 25.06278 ], [ 94.743909, 25.051932 ], [ 94.743028, 25.044252 ], [ 94.742097, 25.040178 ], [ 94.741685, 25.034307 ], [ 94.740812, 25.026174 ], [ 94.739873, 25.022551 ], [ 94.739949, 25.017138 ], [ 94.738958, 25.017126 ], [ 94.738599, 25.007646 ], [ 94.737641, 25.005377 ], [ 94.73721, 25.00086 ], [ 94.728253, 25.000652 ], [ 94.722452, 24.993914 ], [ 94.710516, 24.989812 ], [ 94.703619, 24.982667 ], [ 94.701648, 24.97774 ], [ 94.70017, 24.97232 ], [ 94.69746, 24.9669 ], [ 94.697214, 24.960987 ], [ 94.702141, 24.95335 ], [ 94.706329, 24.949901 ], [ 94.7083, 24.944727 ], [ 94.709039, 24.940539 ], [ 94.71101, 24.937336 ], [ 94.714376, 24.936056 ], [ 94.71372, 24.930192 ], [ 94.708074, 24.926954 ], [ 94.702142, 24.923786 ], [ 94.697215, 24.916149 ], [ 94.694505, 24.908019 ], [ 94.690071, 24.897179 ], [ 94.688821, 24.889715 ], [ 94.686418, 24.884722 ], [ 94.68448, 24.881991 ], [ 94.682515, 24.881064 ], [ 94.682039, 24.879705 ], [ 94.68057, 24.878786 ], [ 94.680093, 24.877424 ], [ 94.6786297, 24.876053 ], [ 94.6762357, 24.8750221 ], [ 94.6742542, 24.8736353 ], [ 94.66829, 24.87277 ], [ 94.663343, 24.872709 ], [ 94.66089, 24.871324 ], [ 94.65894, 24.869494 ], [ 94.657041, 24.864057 ], [ 94.656053, 24.864042 ], [ 94.655664, 24.856817 ], [ 94.654214, 24.854544 ], [ 94.651308, 24.850447 ], [ 94.647412, 24.846338 ], [ 94.644952, 24.845404 ], [ 94.642515, 24.843118 ], [ 94.641038, 24.842649 ], [ 94.633165, 24.835094 ], [ 94.633165, 24.82179 ], [ 94.631195, 24.811936 ], [ 94.628732, 24.802574 ], [ 94.624298, 24.795429 ], [ 94.622081, 24.787053 ], [ 94.622574, 24.779662 ], [ 94.624545, 24.770054 ], [ 94.62824, 24.76217 ], [ 94.62951, 24.754053 ], [ 94.626585, 24.75131 ], [ 94.616169, 24.743693 ], [ 94.609518, 24.736794 ], [ 94.6101278, 24.7270848 ], [ 94.609272, 24.717825 ], [ 94.606808, 24.711173 ], [ 94.602128, 24.707723 ], [ 94.598085, 24.708082 ], [ 94.591684, 24.706644 ], [ 94.586361, 24.704767 ], [ 94.578779, 24.710543 ], [ 94.581188, 24.716839 ], [ 94.580695, 24.722012 ], [ 94.574782, 24.718809 ], [ 94.572073, 24.714128 ], [ 94.571908, 24.707747 ], [ 94.569363, 24.705013 ], [ 94.564436, 24.708462 ], [ 94.562467, 24.711237 ], [ 94.558522, 24.710733 ], [ 94.556074, 24.709348 ], [ 94.552137, 24.708395 ], [ 94.550176, 24.707464 ], [ 94.5482, 24.707441 ], [ 94.546724, 24.706968 ], [ 94.543742, 24.703288 ], [ 94.543989, 24.697129 ], [ 94.549163, 24.68284 ], [ 94.541034, 24.642682 ], [ 94.509656, 24.59267 ], [ 94.475998, 24.580105 ], [ 94.466637, 24.57296 ], [ 94.455551, 24.570742 ], [ 94.448161, 24.548323 ], [ 94.441264, 24.52689 ], [ 94.435926, 24.505133 ], [ 94.429604, 24.49478 ], [ 94.423938, 24.484925 ], [ 94.422483, 24.483471 ], [ 94.421967, 24.482954 ], [ 94.412852, 24.481722 ], [ 94.401761, 24.483454 ], [ 94.394376, 24.482707 ], [ 94.394622, 24.479012 ], [ 94.398071, 24.467433 ], [ 94.401674, 24.459085 ], [ 94.401039, 24.457973 ], [ 94.400515, 24.457056 ], [ 94.398564, 24.453637 ], [ 94.403492, 24.445753 ], [ 94.408403, 24.439772 ], [ 94.396102, 24.408799 ], [ 94.380693, 24.401307 ], [ 94.368813, 24.395531 ], [ 94.364816, 24.393587 ], [ 94.362106, 24.391799 ], [ 94.378119, 24.380466 ], [ 94.379597, 24.377264 ], [ 94.361642, 24.347967 ], [ 94.355528, 24.339353 ], [ 94.355228, 24.33893 ], [ 94.352907, 24.33566 ], [ 94.350888, 24.332815 ], [ 94.325136, 24.328011 ], [ 94.323115, 24.327707 ], [ 94.322365, 24.327595 ], [ 94.32292, 24.275905 ], [ 94.3079628, 24.2468126 ], [ 94.307562, 24.246033 ], [ 94.302073, 24.237441 ], [ 94.29585, 24.235337 ], [ 94.292235, 24.234115 ], [ 94.287662, 24.229541 ], [ 94.286969, 24.223583 ], [ 94.27824, 24.174248 ], [ 94.276855, 24.171061 ], [ 94.260365, 24.164131 ], [ 94.252467, 24.124498 ], [ 94.255378, 24.080845 ], [ 94.241867, 24.055804 ], [ 94.240274, 24.052852 ], [ 94.237325, 24.052416 ], [ 94.233207, 24.058949 ], [ 94.228357, 24.055485 ], [ 94.238196, 24.033173 ], [ 94.23681, 24.031095 ], [ 94.202445, 23.982037 ], [ 94.198288, 23.966516 ], [ 94.19427, 23.952381 ], [ 94.190189, 23.936182 ], [ 94.188661, 23.930351 ], [ 94.177821, 23.926081 ], [ 94.171754, 23.927106 ], [ 94.169076, 23.927559 ], [ 94.168341, 23.907459 ], [ 94.168337, 23.907357 ], [ 94.167598, 23.901198 ], [ 94.161194, 23.868185 ], [ 94.157892, 23.852682 ], [ 94.156096, 23.847133 ], [ 94.154543, 23.847244 ], [ 94.150355, 23.849215 ], [ 94.14592, 23.848968 ], [ 94.142225, 23.846751 ], [ 94.141979, 23.84207 ], [ 94.142718, 23.839606 ], [ 94.144287, 23.836257 ], [ 94.1399703, 23.8336205 ], [ 94.124311, 23.837728 ], [ 94.116851, 23.837881 ], [ 94.11217, 23.844779 ], [ 94.112909, 23.849214 ], [ 94.113648, 23.853895 ], [ 94.112909, 23.8603 ], [ 94.107982, 23.867445 ], [ 94.105518, 23.874343 ], [ 94.099851, 23.880995 ], [ 94.094924, 23.885429 ], [ 94.088519, 23.885183 ], [ 94.074477, 23.88469 ], [ 94.068564, 23.887399 ], [ 94.063779, 23.890024 ], [ 94.060927, 23.891587 ], [ 94.051702, 23.890284 ], [ 94.046393, 23.892326 ], [ 94.043436, 23.90834 ], [ 94.038034, 23.911732 ], [ 94.037277, 23.911542 ], [ 94.028901, 23.914499 ], [ 94.025159, 23.918284 ], [ 94.023084, 23.924116 ], [ 94.022069, 23.925905 ], [ 94.015598, 23.925092 ], [ 94.003773, 23.92115 ], [ 93.996382, 23.921396 ], [ 93.988992, 23.926077 ], [ 93.986484, 23.928732 ], [ 93.984804, 23.930511 ], [ 93.979877, 23.930019 ], [ 93.976636, 23.926518 ], [ 93.973718, 23.923367 ], [ 93.968556, 23.926386 ], [ 93.966077, 23.927698 ], [ 93.964078, 23.929468 ], [ 93.956498, 23.933894 ], [ 93.950393, 23.939475 ], [ 93.944085, 23.947637 ], [ 93.932078, 23.950813 ], [ 93.921438, 23.951336 ], [ 93.913588, 23.951336 ], [ 93.903646, 23.951336 ], [ 93.894053, 23.951685 ], [ 93.888297, 23.945928 ], [ 93.881494, 23.942614 ], [ 93.875215, 23.94209 ], [ 93.86789, 23.938776 ], [ 93.860215, 23.933368 ], [ 93.84975, 23.931798 ], [ 93.838063, 23.929879 ], [ 93.827947, 23.926216 ], [ 93.815039, 23.923948 ], [ 93.810853, 23.925344 ], [ 93.804748, 23.929007 ], [ 93.801608, 23.932495 ], [ 93.801608, 23.938949 ], [ 93.796898, 23.949415 ], [ 93.791142, 23.955346 ], [ 93.783468, 23.960927 ], [ 93.776316, 23.966509 ], [ 93.773002, 23.975056 ], [ 93.767943, 23.986045 ], [ 93.761489, 23.996686 ], [ 93.760324, 24.00176 ], [ 93.756605, 24.006105 ], [ 93.751198, 24.006453 ], [ 93.745965, 24.005232 ], [ 93.7443085, 24.0059642 ], [ 93.742128, 24.001395 ], [ 93.734334, 23.999941 ], [ 93.72648, 23.999796 ], [ 93.722574, 23.998823 ], [ 93.720098, 23.999682 ], [ 93.720079, 24.000585 ], [ 93.716623, 24.001425 ], [ 93.714631, 24.002741 ], [ 93.712167, 24.003145 ], [ 93.710183, 24.004011 ], [ 93.698696, 24.006104 ], [ 93.689626, 24.00715 ], [ 93.681602, 24.007324 ], [ 93.67434, 24.003809 ], [ 93.670934, 24.00239 ], [ 93.659973, 24.002606 ], [ 93.659867, 24.002608 ], [ 93.659143, 24.002623 ], [ 93.657651, 24.0035 ], [ 93.654043, 24.004358 ], [ 93.650031, 24.009417 ], [ 93.64288, 24.008893 ], [ 93.633112, 24.010638 ], [ 93.626484, 24.011684 ], [ 93.620728, 24.009765 ], [ 93.616367, 24.006625 ], [ 93.611658, 24.001043 ], [ 93.611484, 23.995636 ], [ 93.614275, 23.990578 ], [ 93.612879, 23.9836 ], [ 93.607472, 23.978193 ], [ 93.603112, 23.974181 ], [ 93.600844, 23.972262 ], [ 93.598926, 23.965633 ], [ 93.59474, 23.96197 ], [ 93.586408, 23.961561 ], [ 93.584897, 23.963339 ], [ 93.583414, 23.963762 ], [ 93.575029, 23.969645 ], [ 93.569099, 23.973657 ], [ 93.56394, 23.978274 ], [ 93.56125, 23.979238 ], [ 93.555842, 23.97889 ], [ 93.55218, 23.973831 ], [ 93.548517, 23.968598 ], [ 93.540319, 23.961795 ], [ 93.532296, 23.958306 ], [ 93.526016, 23.951852 ], [ 93.519563, 23.948189 ], [ 93.509795, 23.94627 ], [ 93.502778, 23.948225 ], [ 93.501787, 23.948656 ], [ 93.501245, 23.950899 ], [ 93.500253, 23.95133 ], [ 93.500015, 23.951941 ], [ 93.499995, 23.951995 ], [ 93.499731, 23.952673 ], [ 93.497235, 23.954431 ], [ 93.493291, 23.955255 ], [ 93.49278, 23.956148 ], [ 93.490316, 23.956549 ], [ 93.487329, 23.958296 ], [ 93.485761, 23.962324 ], [ 93.483789, 23.962736 ], [ 93.48377, 23.963637 ], [ 93.477861, 23.964422 ], [ 93.472642, 23.96755 ], [ 93.465316, 23.972085 ], [ 93.461653, 23.977667 ], [ 93.462002, 23.984295 ], [ 93.466362, 23.990226 ], [ 93.464822, 23.997095 ], [ 93.457399, 23.999651 ], [ 93.456674, 24.009561 ], [ 93.455682, 24.009993 ], [ 93.455148, 24.011786 ], [ 93.449705, 24.013483 ], [ 93.44626, 24.013864 ], [ 93.438628, 24.019356 ], [ 93.431476, 24.028426 ], [ 93.426941, 24.041508 ], [ 93.424499, 24.050404 ], [ 93.422929, 24.057905 ], [ 93.418568, 24.066103 ], [ 93.412986, 24.073778 ], [ 93.407766, 24.080059 ], [ 93.406835, 24.081179 ], [ 93.395509, 24.0823 ], [ 93.391035, 24.084467 ], [ 93.391015, 24.085367 ], [ 93.388536, 24.086218 ], [ 93.387029, 24.087542 ], [ 93.378171, 24.088263 ], [ 93.370737, 24.090818 ], [ 93.362752, 24.093488 ], [ 93.357345, 24.094709 ], [ 93.354902, 24.098023 ], [ 93.35246, 24.10186 ], [ 93.349495, 24.104651 ], [ 93.344262, 24.106396 ], [ 93.340425, 24.104826 ], [ 93.340251, 24.101337 ], [ 93.344611, 24.097848 ], [ 93.349321, 24.095755 ], [ 93.352635, 24.093662 ], [ 93.354554, 24.092267 ], [ 93.35415, 24.089574 ], [ 93.349645, 24.08948 ], [ 93.34815, 24.090353 ], [ 93.341821, 24.091918 ], [ 93.337809, 24.091045 ], [ 93.334669, 24.088603 ], [ 93.332402, 24.086684 ], [ 93.331355, 24.083021 ], [ 93.3327, 24.07921 ], [ 93.33278, 24.076052 ], [ 93.335193, 24.070113 ], [ 93.337286, 24.064532 ], [ 93.337112, 24.061043 ], [ 93.335019, 24.058426 ], [ 93.3300576, 24.0542413 ], [ 93.3246627, 24.0487143 ], [ 93.325677, 24.045237 ], [ 93.326727, 24.042555 ], [ 93.328233, 24.041231 ], [ 93.332639, 24.041773 ], [ 93.335584, 24.041834 ], [ 93.337102, 24.04006 ], [ 93.336667, 24.037798 ], [ 93.334745, 24.035955 ], [ 93.332303, 24.035452 ], [ 93.331334, 24.034983 ], [ 93.331434, 24.030924 ], [ 93.332925, 24.030054 ], [ 93.336374, 24.029673 ], [ 93.337377, 24.028792 ], [ 93.337411, 24.027441 ], [ 93.338895, 24.027021 ], [ 93.33991, 24.025686 ], [ 93.34089, 24.025709 ], [ 93.340978, 24.022101 ], [ 93.34002, 24.021181 ], [ 93.338067, 24.020689 ], [ 93.33365, 24.020597 ], [ 93.332647, 24.021479 ], [ 93.331174, 24.021448 ], [ 93.331251, 24.018293 ], [ 93.332757, 24.01697 ], [ 93.33328, 24.015627 ], [ 93.335275, 24.014318 ], [ 93.335801, 24.012976 ], [ 93.336133, 23.999452 ], [ 93.335892, 23.993363 ], [ 93.336764, 23.990747 ], [ 93.333625, 23.988305 ], [ 93.331532, 23.984816 ], [ 93.334323, 23.981327 ], [ 93.338858, 23.977839 ], [ 93.342695, 23.973827 ], [ 93.344614, 23.96999 ], [ 93.344614, 23.966501 ], [ 93.347928, 23.961617 ], [ 93.351243, 23.956558 ], [ 93.353685, 23.950628 ], [ 93.354731, 23.94365 ], [ 93.356999, 23.940336 ], [ 93.360662, 23.937371 ], [ 93.365546, 23.933185 ], [ 93.369558, 23.930917 ], [ 93.375036, 23.933497 ], [ 93.383163, 23.933185 ], [ 93.391725, 23.929777 ], [ 93.392233, 23.926557 ], [ 93.393977, 23.922545 ], [ 93.393803, 23.91801 ], [ 93.392757, 23.912777 ], [ 93.391885, 23.904229 ], [ 93.390315, 23.895159 ], [ 93.387873, 23.886786 ], [ 93.386652, 23.878937 ], [ 93.386304, 23.873006 ], [ 93.388571, 23.865854 ], [ 93.387002, 23.859575 ], [ 93.387176, 23.855039 ], [ 93.386479, 23.84719 ], [ 93.388921, 23.838817 ], [ 93.389619, 23.827828 ], [ 93.392235, 23.821897 ], [ 93.397119, 23.813699 ], [ 93.400085, 23.810559 ], [ 93.402178, 23.807769 ], [ 93.404271, 23.79957 ], [ 93.401132, 23.792767 ], [ 93.395376, 23.786662 ], [ 93.395376, 23.774801 ], [ 93.394679, 23.763986 ], [ 93.393458, 23.758927 ], [ 93.394504, 23.754218 ], [ 93.399912, 23.747938 ], [ 93.404272, 23.74445 ], [ 93.40497, 23.735902 ], [ 93.410203, 23.728751 ], [ 93.410378, 23.723169 ], [ 93.410029, 23.717064 ], [ 93.407587, 23.712529 ], [ 93.408983, 23.70747 ], [ 93.414564, 23.703284 ], [ 93.42032, 23.701191 ], [ 93.423111, 23.694562 ], [ 93.427123, 23.688981 ], [ 93.436281, 23.687105 ], [ 93.4368024, 23.6839231 ], [ 93.4365734, 23.6826492 ], [ 93.4367355, 23.6823936 ], [ 93.4373696, 23.6821729 ], [ 93.4372637, 23.6820292 ], [ 93.4366409, 23.6818452 ], [ 93.4355267, 23.6817848 ], [ 93.4352897, 23.6815677 ], [ 93.4353177, 23.6812338 ], [ 93.4358194, 23.680841 ], [ 93.435914, 23.6804944 ], [ 93.4358299, 23.6801154 ], [ 93.4354101, 23.6796397 ], [ 93.435286, 23.6792684 ], [ 93.4354747, 23.6789052 ], [ 93.4360643, 23.6787509 ], [ 93.4362877, 23.6785767 ], [ 93.4362877, 23.6783459 ], [ 93.4355032, 23.6777871 ], [ 93.4347064, 23.6771884 ], [ 93.433487, 23.6759872 ], [ 93.4332639, 23.6756063 ], [ 93.4329334, 23.6752777 ], [ 93.4325662, 23.6751538 ], [ 93.4316568, 23.6747613 ], [ 93.4314384, 23.6744724 ], [ 93.4314765, 23.674176 ], [ 93.4309698, 23.6738484 ], [ 93.430826, 23.6723053 ], [ 93.4305164, 23.6718389 ], [ 93.4303224, 23.6711842 ], [ 93.4298239, 23.6702058 ], [ 93.4296658, 23.6694004 ], [ 93.4294399, 23.6692304 ], [ 93.4289314, 23.6692662 ], [ 93.4286801, 23.6691857 ], [ 93.4283157, 23.6687163 ], [ 93.4283848, 23.668221 ], [ 93.4287424, 23.6678024 ], [ 93.4287304, 23.667681 ], [ 93.4282677, 23.6674515 ], [ 93.4279763, 23.6670373 ], [ 93.4270542, 23.6666726 ], [ 93.4270433, 23.6662735 ], [ 93.4267914, 23.6659769 ], [ 93.4262263, 23.6656903 ], [ 93.4256902, 23.6651306 ], [ 93.4255453, 23.6643723 ], [ 93.4253172, 23.66385 ], [ 93.4253632, 23.6634292 ], [ 93.4256429, 23.6631272 ], [ 93.4256338, 23.6626339 ], [ 93.4253665, 23.6621612 ], [ 93.4252414, 23.662113 ], [ 93.4246874, 23.6622949 ], [ 93.4241526, 23.6618867 ], [ 93.423703, 23.6614292 ], [ 93.4232291, 23.6611948 ], [ 93.4225958, 23.6611487 ], [ 93.4218521, 23.6608701 ], [ 93.4218521, 23.6605061 ], [ 93.4223945, 23.6601262 ], [ 93.4227472, 23.6596416 ], [ 93.4234684, 23.6593842 ], [ 93.423377, 23.6591484 ], [ 93.423475, 23.6588903 ], [ 93.4239742, 23.6583305 ], [ 93.4240613, 23.6581469 ], [ 93.4240415, 23.6576568 ], [ 93.4242973, 23.656242 ], [ 93.424147, 23.656133 ], [ 93.4238351, 23.6562718 ], [ 93.4233471, 23.6563512 ], [ 93.4229673, 23.6562793 ], [ 93.4227647, 23.6549155 ], [ 93.4221204, 23.6548043 ], [ 93.4217505, 23.6546303 ], [ 93.4210192, 23.6545838 ], [ 93.419812, 23.6539761 ], [ 93.4200231, 23.6530501 ], [ 93.4201925, 23.6528113 ], [ 93.4206039, 23.6527991 ], [ 93.4209545, 23.6531688 ], [ 93.4212428, 23.6532844 ], [ 93.4217124, 23.6533097 ], [ 93.4220598, 23.6531188 ], [ 93.4222015, 23.6526887 ], [ 93.4219297, 23.6520329 ], [ 93.4211099, 23.6519281 ], [ 93.4206943, 23.651833 ], [ 93.4204825, 23.6514063 ], [ 93.419134, 23.6504941 ], [ 93.4192022, 23.6502132 ], [ 93.4200194, 23.6500674 ], [ 93.4204818, 23.6496927 ], [ 93.4203719, 23.6493054 ], [ 93.4199063, 23.6488875 ], [ 93.4192645, 23.6486109 ], [ 93.4188113, 23.6487257 ], [ 93.4180172, 23.6487448 ], [ 93.4165709, 23.6484568 ], [ 93.4161652, 23.647954 ], [ 93.4164058, 23.6475989 ], [ 93.416795, 23.6475395 ], [ 93.417085, 23.6473735 ], [ 93.4174148, 23.646916 ], [ 93.4174534, 23.6465539 ], [ 93.4175301, 23.6461521 ], [ 93.417918, 23.645786 ], [ 93.4182269, 23.6458118 ], [ 93.4183226, 23.6455959 ], [ 93.4182739, 23.6450961 ], [ 93.4181943, 23.6439018 ], [ 93.4177728, 23.643305 ], [ 93.4172452, 23.6425468 ], [ 93.4170686, 23.6416238 ], [ 93.4170051, 23.6407615 ], [ 93.4172429, 23.6404457 ], [ 93.4176604, 23.6402778 ], [ 93.417793, 23.6401158 ], [ 93.4175377, 23.639596 ], [ 93.4173624, 23.6386231 ], [ 93.4173305, 23.6380576 ], [ 93.4176013, 23.6375154 ], [ 93.4173968, 23.6364941 ], [ 93.4176878, 23.6361117 ], [ 93.4181246, 23.6361717 ], [ 93.4184322, 23.6360436 ], [ 93.4191722, 23.6357235 ], [ 93.4201909, 23.6355368 ], [ 93.4208257, 23.6353316 ], [ 93.4209354, 23.634966 ], [ 93.4213059, 23.6348018 ], [ 93.4219514, 23.6347548 ], [ 93.4230321, 23.634434 ], [ 93.4236512, 23.6342439 ], [ 93.4236912, 23.6340832 ], [ 93.4235746, 23.6337215 ], [ 93.4229967, 23.6329692 ], [ 93.4227131, 23.6320841 ], [ 93.4227869, 23.6313797 ], [ 93.4229037, 23.6310371 ], [ 93.4236441, 23.6307029 ], [ 93.4247729, 23.6302911 ], [ 93.4248762, 23.6301897 ], [ 93.4248921, 23.6299638 ], [ 93.4240899, 23.6288613 ], [ 93.4228865, 23.6281233 ], [ 93.42125, 23.6274643 ], [ 93.4212172, 23.6271195 ], [ 93.4215661, 23.627051 ], [ 93.4217909, 23.6269085 ], [ 93.4220748, 23.6263102 ], [ 93.4220569, 23.6259998 ], [ 93.4217606, 23.6255316 ], [ 93.4217831, 23.6250051 ], [ 93.4221265, 23.6245701 ], [ 93.4221265, 23.6244688 ], [ 93.4220335, 23.6243442 ], [ 93.4216023, 23.6242564 ], [ 93.4211374, 23.6240341 ], [ 93.4208096, 23.6239773 ], [ 93.4203096, 23.6242152 ], [ 93.4199837, 23.6243465 ], [ 93.4197697, 23.6240943 ], [ 93.4198783, 23.6234175 ], [ 93.4201511, 23.6226583 ], [ 93.4202231, 23.621924 ], [ 93.4208326, 23.6209747 ], [ 93.4210843, 23.6193327 ], [ 93.421323, 23.6185719 ], [ 93.4219887, 23.6175803 ], [ 93.4222071, 23.6170802 ], [ 93.4221227, 23.6155727 ], [ 93.4219063, 23.6148588 ], [ 93.4219752, 23.6136714 ], [ 93.4203848, 23.6130395 ], [ 93.4202105, 23.61272 ], [ 93.420392, 23.6119161 ], [ 93.4208153, 23.6111542 ], [ 93.4218488, 23.6107447 ], [ 93.4218395, 23.6100997 ], [ 93.4215708, 23.6089396 ], [ 93.4212815, 23.6082439 ], [ 93.4212578, 23.6079036 ], [ 93.4215781, 23.6070733 ], [ 93.4218827, 23.6070348 ], [ 93.4224507, 23.6074011 ], [ 93.4226584, 23.6073222 ], [ 93.4227761, 23.6070705 ], [ 93.4232452, 23.6064795 ], [ 93.4240002, 23.6057614 ], [ 93.4243225, 23.6054118 ], [ 93.4242687, 23.6049408 ], [ 93.4237681, 23.6047779 ], [ 93.4229872, 23.6042461 ], [ 93.4215987, 23.6038018 ], [ 93.4214772, 23.6034042 ], [ 93.4216038, 23.6030019 ], [ 93.4221386, 23.602742 ], [ 93.423462, 23.602842 ], [ 93.4239991, 23.602788 ], [ 93.4242632, 23.6024734 ], [ 93.4255431, 23.6012104 ], [ 93.4255324, 23.6009669 ], [ 93.4253364, 23.6008573 ], [ 93.4243673, 23.6014537 ], [ 93.4239067, 23.6013194 ], [ 93.424194, 23.6006725 ], [ 93.4243729, 23.5999055 ], [ 93.4245301, 23.5995157 ], [ 93.4249492, 23.5996468 ], [ 93.4251475, 23.5999714 ], [ 93.425607, 23.6000767 ], [ 93.4259103, 23.6000535 ], [ 93.4262982, 23.5998204 ], [ 93.4263894, 23.5995645 ], [ 93.4259429, 23.5987974 ], [ 93.4257016, 23.5975241 ], [ 93.4257841, 23.5966374 ], [ 93.4265404, 23.5958057 ], [ 93.4266337, 23.5953781 ], [ 93.427362, 23.5946038 ], [ 93.4276547, 23.5941687 ], [ 93.4275864, 23.5940121 ], [ 93.4268984, 23.5936969 ], [ 93.4265233, 23.5932744 ], [ 93.426415, 23.5924344 ], [ 93.426005, 23.5918346 ], [ 93.4259515, 23.5910637 ], [ 93.4261558, 23.5907232 ], [ 93.4268734, 23.5908271 ], [ 93.4271562, 23.5906975 ], [ 93.4278271, 23.5899353 ], [ 93.4284783, 23.5889729 ], [ 93.4285174, 23.5885723 ], [ 93.428322, 23.5880299 ], [ 93.4269643, 23.5871307 ], [ 93.4262317, 23.5867671 ], [ 93.4254883, 23.5862009 ], [ 93.4252981, 23.5858349 ], [ 93.4248341, 23.5857613 ], [ 93.424351, 23.5857176 ], [ 93.4236496, 23.5855744 ], [ 93.4227597, 23.5836683 ], [ 93.4223369, 23.5824397 ], [ 93.4226921, 23.5787937 ], [ 93.422442, 23.5776198 ], [ 93.421918, 23.5757452 ], [ 93.421455, 23.5748494 ], [ 93.4215592, 23.5735125 ], [ 93.4222131, 23.5719358 ], [ 93.4221428, 23.5716056 ], [ 93.421144, 23.5706448 ], [ 93.4204175, 23.5701297 ], [ 93.4197184, 23.5701426 ], [ 93.4193016, 23.5699516 ], [ 93.4186118, 23.5690226 ], [ 93.4183655, 23.5690079 ], [ 93.4180229, 23.5692418 ], [ 93.4162565, 23.5701066 ], [ 93.4156611, 23.5710422 ], [ 93.4150058, 23.5715933 ], [ 93.4144075, 23.571498 ], [ 93.4141807, 23.5708964 ], [ 93.4143912, 23.569379 ], [ 93.4144811, 23.5686313 ], [ 93.4138487, 23.5674981 ], [ 93.4136705, 23.5661344 ], [ 93.4136609, 23.565474 ], [ 93.4134124, 23.5652776 ], [ 93.4123857, 23.5648863 ], [ 93.4118215, 23.5643503 ], [ 93.4115473, 23.5641744 ], [ 93.4112612, 23.5641537 ], [ 93.4109147, 23.5649652 ], [ 93.4104455, 23.5651614 ], [ 93.4103312, 23.5650249 ], [ 93.4102859, 23.5648548 ], [ 93.4099514, 23.5644295 ], [ 93.4096277, 23.564032 ], [ 93.4094875, 23.5638085 ], [ 93.4095004, 23.5635949 ], [ 93.4096515, 23.5631202 ], [ 93.4098931, 23.5628967 ], [ 93.4107926, 23.5623603 ], [ 93.4115003, 23.5623366 ], [ 93.4120053, 23.56221 ], [ 93.4127346, 23.5618421 ], [ 93.413369, 23.5613278 ], [ 93.4136409, 23.5609124 ], [ 93.4136496, 23.5605089 ], [ 93.4135503, 23.5601846 ], [ 93.4132525, 23.5597375 ], [ 93.4128382, 23.5594962 ], [ 93.4122815, 23.5593617 ], [ 93.4101188, 23.5594754 ], [ 93.4097951, 23.5593924 ], [ 93.409424, 23.5591946 ], [ 93.4090916, 23.5588781 ], [ 93.4089492, 23.5584943 ], [ 93.4088586, 23.5580631 ], [ 93.4089794, 23.5576992 ], [ 93.4092902, 23.5571018 ], [ 93.4096872, 23.5567814 ], [ 93.4102008, 23.556635 ], [ 93.4109644, 23.5567693 ], [ 93.4118186, 23.5567248 ], [ 93.412258, 23.5565193 ], [ 93.4124579, 23.5561089 ], [ 93.4126391, 23.5555669 ], [ 93.4125269, 23.5545462 ], [ 93.4126737, 23.5537708 ], [ 93.4133814, 23.5526394 ], [ 93.4137267, 23.5516662 ], [ 93.4143309, 23.5505426 ], [ 93.4149264, 23.5489997 ], [ 93.4147901, 23.5479133 ], [ 93.4148203, 23.546857 ], [ 93.4151613, 23.5454564 ], [ 93.4154418, 23.5446612 ], [ 93.4159338, 23.5440875 ], [ 93.417206, 23.5433255 ], [ 93.4178718, 23.5425536 ], [ 93.4183065, 23.5414032 ], [ 93.4183164, 23.5402034 ], [ 93.4180628, 23.5391927 ], [ 93.417128, 23.5384269 ], [ 93.4157543, 23.536829 ], [ 93.4150945, 23.5337977 ], [ 93.4147251, 23.5333594 ], [ 93.4146212, 23.5320677 ], [ 93.4144948, 23.531354 ], [ 93.4122957, 23.5281633 ], [ 93.4108414, 23.5253946 ], [ 93.4103738, 23.5249033 ], [ 93.4088151, 23.5240136 ], [ 93.4087207, 23.5226573 ], [ 93.4086498, 23.5199276 ], [ 93.4085605, 23.5179439 ], [ 93.4080371, 23.5175325 ], [ 93.406904, 23.5170847 ], [ 93.4041033, 23.517576 ], [ 93.4035078, 23.5173803 ], [ 93.4030994, 23.5167224 ], [ 93.403277, 23.5154384 ], [ 93.4036268, 23.514599 ], [ 93.4041676, 23.5135612 ], [ 93.4042128, 23.5131222 ], [ 93.4036114, 23.5124623 ], [ 93.4029684, 23.510988 ], [ 93.4026585, 23.5107828 ], [ 93.4006112, 23.5110392 ], [ 93.3995705, 23.5109558 ], [ 93.3983536, 23.5111511 ], [ 93.3977652, 23.5110798 ], [ 93.3974362, 23.5107261 ], [ 93.3966802, 23.5088525 ], [ 93.396282, 23.5076726 ], [ 93.3961461, 23.50658 ], [ 93.3965771, 23.5057801 ], [ 93.3966404, 23.5053821 ], [ 93.3963154, 23.5049268 ], [ 93.39509, 23.5045796 ], [ 93.394236, 23.5040475 ], [ 93.3943196, 23.503624 ], [ 93.394837, 23.5032444 ], [ 93.3951213, 23.5027056 ], [ 93.3951213, 23.5020054 ], [ 93.3947387, 23.5007959 ], [ 93.3945238, 23.4994819 ], [ 93.3946255, 23.4973176 ], [ 93.3947771, 23.4957512 ], [ 93.3947669, 23.4949499 ], [ 93.3952414, 23.4921629 ], [ 93.3951353, 23.4916056 ], [ 93.3940277, 23.4895833 ], [ 93.3940582, 23.4876729 ], [ 93.3936559, 23.4865186 ], [ 93.3939188, 23.4860593 ], [ 93.3952532, 23.4862111 ], [ 93.3958294, 23.4858252 ], [ 93.395919, 23.4854309 ], [ 93.3955868, 23.4838704 ], [ 93.395617, 23.4822634 ], [ 93.3952887, 23.4815019 ], [ 93.3944841, 23.4808617 ], [ 93.3929549, 23.4805087 ], [ 93.3924378, 23.4800849 ], [ 93.3921625, 23.4789391 ], [ 93.3924937, 23.4778809 ], [ 93.3933441, 23.477411 ], [ 93.3938119, 23.4766259 ], [ 93.3951308, 23.475191 ], [ 93.3958981, 23.4746528 ], [ 93.3965426, 23.4752925 ], [ 93.3974444, 23.4752054 ], [ 93.3981713, 23.4749716 ], [ 93.3983413, 23.4745817 ], [ 93.3980942, 23.4741121 ], [ 93.3973381, 23.4738713 ], [ 93.3973381, 23.4730034 ], [ 93.3977591, 23.4725635 ], [ 93.3990364, 23.4726627 ], [ 93.3991542, 23.4720917 ], [ 93.3983156, 23.4709878 ], [ 93.3978495, 23.4702942 ], [ 93.397644, 23.4693515 ], [ 93.3973788, 23.4683224 ], [ 93.397339, 23.4665135 ], [ 93.3969403, 23.4661885 ], [ 93.3963276, 23.4661528 ], [ 93.3948357, 23.4658202 ], [ 93.3938744, 23.4649576 ], [ 93.3935744, 23.4644367 ], [ 93.3935099, 23.463677 ], [ 93.3939151, 23.4629908 ], [ 93.3942525, 23.4621596 ], [ 93.3939863, 23.4616544 ], [ 93.39351, 23.4612934 ], [ 93.3933792, 23.4606634 ], [ 93.3934751, 23.4598912 ], [ 93.3941079, 23.4591516 ], [ 93.3942611, 23.4586555 ], [ 93.3939978, 23.4583516 ], [ 93.3934729, 23.4582129 ], [ 93.3927576, 23.4586348 ], [ 93.3922643, 23.4584361 ], [ 93.3918723, 23.4577786 ], [ 93.3922114, 23.4569802 ], [ 93.393372, 23.4567467 ], [ 93.394152, 23.4553797 ], [ 93.3956426, 23.4544742 ], [ 93.3958158, 23.4539808 ], [ 93.3956363, 23.4533395 ], [ 93.3951124, 23.4527966 ], [ 93.3933862, 23.4516508 ], [ 93.3928491, 23.4509165 ], [ 93.3927131, 23.450241 ], [ 93.3931392, 23.4499395 ], [ 93.3936627, 23.449921 ], [ 93.3942584, 23.4494526 ], [ 93.3947395, 23.4484888 ], [ 93.3948042, 23.4480565 ], [ 93.3946069, 23.4477089 ], [ 93.3943829, 23.4477951 ], [ 93.3940701, 23.4479732 ], [ 93.3932358, 23.4479363 ], [ 93.3920844, 23.4487599 ], [ 93.3906716, 23.4509482 ], [ 93.3900384, 23.451003 ], [ 93.3894913, 23.450471 ], [ 93.3883834, 23.4486482 ], [ 93.3877592, 23.4460377 ], [ 93.388056, 23.4451934 ], [ 93.3886209, 23.4441906 ], [ 93.3910622, 23.4424797 ], [ 93.3911873, 23.4417363 ], [ 93.3909649, 23.4413399 ], [ 93.3902384, 23.4409739 ], [ 93.3895009, 23.4398735 ], [ 93.3895169, 23.4394549 ], [ 93.3905618, 23.4372945 ], [ 93.3905894, 23.4365243 ], [ 93.3900239, 23.4346372 ], [ 93.3890712, 23.4331074 ], [ 93.3891449, 23.4316604 ], [ 93.3898, 23.4302073 ], [ 93.3904806, 23.4277158 ], [ 93.3903569, 23.4269719 ], [ 93.3897184, 23.4257605 ], [ 93.389638, 23.4248486 ], [ 93.3895828, 23.4233882 ], [ 93.3880765, 23.422847 ], [ 93.3878244, 23.4217885 ], [ 93.3881435, 23.4205765 ], [ 93.3888116, 23.4199221 ], [ 93.390109, 23.4193923 ], [ 93.3905856, 23.4188051 ], [ 93.3904761, 23.4185095 ], [ 93.3904333, 23.4177691 ], [ 93.3900683, 23.4168956 ], [ 93.3900379, 23.4163862 ], [ 93.3902896, 23.4156338 ], [ 93.3903217, 23.4146031 ], [ 93.3909095, 23.4121294 ], [ 93.3912661, 23.4097738 ], [ 93.391338, 23.4075693 ], [ 93.392114, 23.4058284 ], [ 93.3930014, 23.4019012 ], [ 93.3938596, 23.400024 ], [ 93.3940837, 23.3989184 ], [ 93.3939235, 23.3978887 ], [ 93.3943231, 23.3973165 ], [ 93.3949545, 23.3972006 ], [ 93.3967435, 23.3975028 ], [ 93.3973468, 23.3973944 ], [ 93.3977841, 23.3968593 ], [ 93.3980055, 23.3959575 ], [ 93.3979346, 23.3946807 ], [ 93.39792, 23.3932366 ], [ 93.398401, 23.3924503 ], [ 93.4015746, 23.3903151 ], [ 93.4023155, 23.3896885 ], [ 93.4023562, 23.3891433 ], [ 93.4022873, 23.3888424 ], [ 93.4017169, 23.3878366 ], [ 93.4012245, 23.3858956 ], [ 93.4014543, 23.3842741 ], [ 93.4013712, 23.3834984 ], [ 93.4010472, 23.3828666 ], [ 93.4003569, 23.3824766 ], [ 93.3995056, 23.3825728 ], [ 93.3990979, 23.3831465 ], [ 93.3985177, 23.3837884 ], [ 93.3977601, 23.3840013 ], [ 93.3968105, 23.3837342 ], [ 93.3959471, 23.3825181 ], [ 93.3958752, 23.3813962 ], [ 93.395145, 23.3800557 ], [ 93.395087, 23.3788194 ], [ 93.3948458, 23.377243 ], [ 93.3945295, 23.3764099 ], [ 93.3926897, 23.3751336 ], [ 93.3918802, 23.3748566 ], [ 93.3894595, 23.3750918 ], [ 93.3871997, 23.374851 ], [ 93.3867069, 23.3744424 ], [ 93.3864118, 23.372587 ], [ 93.3868769, 23.3715262 ], [ 93.3881014, 23.3714291 ], [ 93.3895452, 23.3714805 ], [ 93.3905651, 23.3707467 ], [ 93.3913135, 23.3698144 ], [ 93.3909905, 23.3694521 ], [ 93.388073, 23.3683307 ], [ 93.3876309, 23.367403 ], [ 93.3879745, 23.3670709 ], [ 93.3887354, 23.3670445 ], [ 93.3890055, 23.3668074 ], [ 93.3889716, 23.3661915 ], [ 93.3890931, 23.3650827 ], [ 93.3890518, 23.3645388 ], [ 93.3883244, 23.3627844 ], [ 93.3878941, 23.3607828 ], [ 93.3879858, 23.3604959 ], [ 93.3875892, 23.3596379 ], [ 93.3871916, 23.3594076 ], [ 93.3868822, 23.3594563 ], [ 93.3860261, 23.3599928 ], [ 93.3855854, 23.3612454 ], [ 93.3849535, 23.3618117 ], [ 93.3839072, 23.3621959 ], [ 93.3831996, 23.362066 ], [ 93.3825063, 23.3612496 ], [ 93.3824049, 23.3598948 ], [ 93.3819261, 23.3586846 ], [ 93.3809283, 23.3583891 ], [ 93.3805099, 23.3586353 ], [ 93.3796811, 23.3603839 ], [ 93.3791791, 23.3609744 ], [ 93.3785086, 23.3609293 ], [ 93.3777835, 23.3603569 ], [ 93.3762061, 23.3598742 ], [ 93.3745857, 23.3590851 ], [ 93.3732103, 23.3593686 ], [ 93.3710228, 23.3594484 ], [ 93.3699332, 23.3590969 ], [ 93.3667449, 23.3569706 ], [ 93.364163, 23.3562543 ], [ 93.362145, 23.3559394 ], [ 93.3622764, 23.3562735 ], [ 93.362366, 23.3566519 ], [ 93.3618017, 23.3568874 ], [ 93.3612793, 23.3568729 ], [ 93.360182, 23.3562058 ], [ 93.3594384, 23.3552213 ], [ 93.3580877, 23.3544204 ], [ 93.3562554, 23.3536713 ], [ 93.3556377, 23.353284 ], [ 93.3553657, 23.3526817 ], [ 93.3558614, 23.3518383 ], [ 93.3558187, 23.3508197 ], [ 93.3560817, 23.3502027 ], [ 93.3563674, 23.3492321 ], [ 93.3569631, 23.347698 ], [ 93.3581296, 23.3466924 ], [ 93.3583215, 23.345673 ], [ 93.3580529, 23.3441935 ], [ 93.3577006, 23.3428055 ], [ 93.3581517, 23.3421913 ], [ 93.3592195, 23.3416217 ], [ 93.3600136, 23.3409181 ], [ 93.3619009, 23.3372686 ], [ 93.3638278, 23.3353929 ], [ 93.3674354, 23.3339579 ], [ 93.3678146, 23.3338071 ], [ 93.369554, 23.3333526 ], [ 93.370388, 23.3325241 ], [ 93.3705746, 23.3314315 ], [ 93.3706144, 23.3311987 ], [ 93.3714067, 23.3296358 ], [ 93.3723926, 23.3291698 ], [ 93.3728487, 23.3286912 ], [ 93.3726366, 23.3278023 ], [ 93.3716579, 23.3269166 ], [ 93.3710717, 23.3257875 ], [ 93.3696908, 23.3245712 ], [ 93.3675693, 23.3234224 ], [ 93.3666152, 23.32167 ], [ 93.366777, 23.3202645 ], [ 93.3671938, 23.319458 ], [ 93.3687089, 23.3183477 ], [ 93.3701855, 23.3178261 ], [ 93.3713979, 23.3165229 ], [ 93.371203, 23.3152824 ], [ 93.371272, 23.3136721 ], [ 93.3701703, 23.313282 ], [ 93.3674952, 23.313386 ], [ 93.364387, 23.3137824 ], [ 93.3634139, 23.3133932 ], [ 93.3634632, 23.3126094 ], [ 93.3646379, 23.3117328 ], [ 93.3664551, 23.3102626 ], [ 93.3673487, 23.3100787 ], [ 93.3682617, 23.3106377 ], [ 93.3693027, 23.3107006 ], [ 93.3704869, 23.3103465 ], [ 93.3712033, 23.3095645 ], [ 93.3712033, 23.3090023 ], [ 93.3702785, 23.3084403 ], [ 93.3684484, 23.3074965 ], [ 93.3665069, 23.307562 ], [ 93.365405, 23.3070287 ], [ 93.3647546, 23.3061395 ], [ 93.3649265, 23.3053355 ], [ 93.3657032, 23.3047836 ], [ 93.3683604, 23.3017071 ], [ 93.3683604, 23.3002533 ], [ 93.3674239, 23.2967213 ], [ 93.3660578, 23.2946301 ], [ 93.3654838, 23.2935351 ], [ 93.3656549, 23.2928637 ], [ 93.3675426, 23.2910641 ], [ 93.3679826, 23.2896952 ], [ 93.3695466, 23.2874489 ], [ 93.3695598, 23.2867591 ], [ 93.3680468, 23.2850576 ], [ 93.367149, 23.2833816 ], [ 93.3668794, 23.2814262 ], [ 93.3662938, 23.2808272 ], [ 93.3657387, 23.2807404 ], [ 93.3655151, 23.2813688 ], [ 93.3651544, 23.2817151 ], [ 93.3638529, 23.2816464 ], [ 93.3628412, 23.2813185 ], [ 93.36208, 23.2804095 ], [ 93.3626439, 23.2784739 ], [ 93.3635316, 23.2778519 ], [ 93.3670261, 23.2772517 ], [ 93.3676267, 23.2763535 ], [ 93.3687822, 23.2755121 ], [ 93.3688716, 23.2750196 ], [ 93.3682931, 23.2736911 ], [ 93.3667858, 23.2727812 ], [ 93.3664095, 23.271252 ], [ 93.3651535, 23.2694351 ], [ 93.3653713, 23.2686064 ], [ 93.3660826, 23.2681014 ], [ 93.3672436, 23.2688213 ], [ 93.3680263, 23.2685738 ], [ 93.3684017, 23.2676871 ], [ 93.3682448, 23.2660755 ], [ 93.3690575, 23.2637822 ], [ 93.3704051, 23.2624365 ], [ 93.3733529, 23.2616944 ], [ 93.3735836, 23.2610468 ], [ 93.3730812, 23.2596995 ], [ 93.371163, 23.2591078 ], [ 93.3701137, 23.258619 ], [ 93.3697607, 23.2579705 ], [ 93.3697316, 23.2560987 ], [ 93.3698891, 23.2556213 ], [ 93.3715637, 23.2546084 ], [ 93.3711298, 23.2537144 ], [ 93.3692207, 23.2512087 ], [ 93.3691064, 23.2502032 ], [ 93.3702309, 23.2502457 ], [ 93.3716252, 23.2494175 ], [ 93.3721501, 23.2491983 ], [ 93.3731405, 23.2497522 ], [ 93.3758359, 23.2488841 ], [ 93.3766656, 23.2476516 ], [ 93.3769247, 23.2464616 ], [ 93.3762794, 23.2457269 ], [ 93.3761149, 23.2446692 ], [ 93.3769827, 23.2425428 ], [ 93.3790502, 23.2388221 ], [ 93.3793577, 23.2372937 ], [ 93.3786011, 23.2349065 ], [ 93.3786943, 23.2343075 ], [ 93.3794271, 23.233606 ], [ 93.3806078, 23.2335134 ], [ 93.3820096, 23.2325662 ], [ 93.3822142, 23.2312131 ], [ 93.3807745, 23.228528 ], [ 93.3807745, 23.2265529 ], [ 93.3813449, 23.2245102 ], [ 93.3818659, 23.2242322 ], [ 93.382718, 23.2245773 ], [ 93.3836892, 23.2242472 ], [ 93.3852409, 23.2215896 ], [ 93.3862943, 23.219269 ], [ 93.3883974, 23.218112 ], [ 93.3889082, 23.2171731 ], [ 93.3885371, 23.2162962 ], [ 93.3875808, 23.2158382 ], [ 93.3840701, 23.2161362 ], [ 93.3819799, 23.2170765 ], [ 93.3793482, 23.2145899 ], [ 93.3797471, 23.2133406 ], [ 93.3797853, 23.2129194 ], [ 93.3790145, 23.2122368 ], [ 93.3787335, 23.2113671 ], [ 93.3784183, 23.2091545 ], [ 93.3781925, 23.2076241 ], [ 93.377718, 23.206914 ], [ 93.3761714, 23.2062164 ], [ 93.3753689, 23.2047685 ], [ 93.3754856, 23.204324 ], [ 93.3768055, 23.2034273 ], [ 93.3773608, 23.2020924 ], [ 93.3779746, 23.2015833 ], [ 93.3798294, 23.2007834 ], [ 93.3803955, 23.200263 ], [ 93.3805563, 23.1994132 ], [ 93.379863, 23.1980877 ], [ 93.3783129, 23.1966896 ], [ 93.3784732, 23.1953237 ], [ 93.3782075, 23.1944111 ], [ 93.3769116, 23.191076 ], [ 93.3773895, 23.1897995 ], [ 93.3784969, 23.1890226 ], [ 93.3799323, 23.1879231 ], [ 93.3802899, 23.187022 ], [ 93.3798679, 23.1865492 ], [ 93.3786232, 23.1851389 ], [ 93.3779931, 23.1817823 ], [ 93.3766959, 23.1796463 ], [ 93.3763581, 23.1785853 ], [ 93.3754977, 23.1779073 ], [ 93.3714481, 23.176993 ], [ 93.3687016, 23.1763285 ], [ 93.3682319, 23.1757816 ], [ 93.3682319, 23.1751763 ], [ 93.3692616, 23.1751622 ], [ 93.3719987, 23.1738331 ], [ 93.3726441, 23.1726338 ], [ 93.3724745, 23.1708151 ], [ 93.3725595, 23.1680562 ], [ 93.3713175, 23.1664813 ], [ 93.3713175, 23.1656113 ], [ 93.3723727, 23.1624602 ], [ 93.3726507, 23.160817 ], [ 93.3719579, 23.1589787 ], [ 93.3712348, 23.1582253 ], [ 93.3699641, 23.1579953 ], [ 93.3695304, 23.1577151 ], [ 93.3695822, 23.1562 ], [ 93.369131, 23.1540502 ], [ 93.3696825, 23.15345 ], [ 93.3708, 23.1533753 ], [ 93.3712443, 23.1529913 ], [ 93.3711313, 23.152082 ], [ 93.370432, 23.1511084 ], [ 93.3692163, 23.1484349 ], [ 93.3681393, 23.146062 ], [ 93.3679975, 23.1441371 ], [ 93.3696706, 23.1429184 ], [ 93.370166, 23.1420007 ], [ 93.3708539, 23.1412457 ], [ 93.3713371, 23.1410749 ], [ 93.372156, 23.1409107 ], [ 93.3733718, 23.141226 ], [ 93.3750267, 23.1420518 ], [ 93.3754498, 23.1421449 ], [ 93.3761204, 23.1419137 ], [ 93.3766439, 23.1412101 ], [ 93.3772335, 23.1409692 ], [ 93.3782617, 23.1409692 ], [ 93.379483, 23.1413879 ], [ 93.3815255, 23.1427802 ], [ 93.3840565, 23.1445995 ], [ 93.3850972, 23.1448589 ], [ 93.3861294, 23.1446888 ], [ 93.387078, 23.1441792 ], [ 93.3868974, 23.1430249 ], [ 93.3856016, 23.1403161 ], [ 93.3855964, 23.1387413 ], [ 93.3850541, 23.1348809 ], [ 93.3844938, 23.1336196 ], [ 93.3838158, 23.1328674 ], [ 93.3826814, 23.1327905 ], [ 93.3808121, 23.1329384 ], [ 93.3777801, 23.1329945 ], [ 93.3762345, 23.1324183 ], [ 93.3757205, 23.1315322 ], [ 93.375785, 23.130307 ], [ 93.377829, 23.1292355 ], [ 93.3782383, 23.1286196 ], [ 93.3779937, 23.127789 ], [ 93.3769984, 23.1268916 ], [ 93.376048, 23.1265883 ], [ 93.3730746, 23.1267557 ], [ 93.3713651, 23.126036 ], [ 93.3685416, 23.123925 ], [ 93.3669508, 23.1222028 ], [ 93.3646503, 23.1209296 ], [ 93.364047, 23.1190737 ], [ 93.3642513, 23.1181157 ], [ 93.3642122, 23.1174148 ], [ 93.3637996, 23.1162944 ], [ 93.3629673, 23.1155111 ], [ 93.3618979, 23.1153003 ], [ 93.3598732, 23.1159197 ], [ 93.3589335, 23.1159279 ], [ 93.3579397, 23.1159996 ], [ 93.3561345, 23.116779 ], [ 93.3556333, 23.1166331 ], [ 93.3552083, 23.1161313 ], [ 93.3550433, 23.1152093 ], [ 93.3551131, 23.113628 ], [ 93.3553542, 23.1126477 ], [ 93.3557539, 23.1120408 ], [ 93.3567182, 23.1113523 ], [ 93.3574669, 23.1112998 ], [ 93.3583594, 23.111199 ], [ 93.3585074, 23.1109321 ], [ 93.3585581, 23.110407 ], [ 93.3582599, 23.1092691 ], [ 93.3577714, 23.1085105 ], [ 93.3566929, 23.1078102 ], [ 93.3562868, 23.1072734 ], [ 93.3559823, 23.1062347 ], [ 93.3551067, 23.1042331 ], [ 93.3549862, 23.1034628 ], [ 93.3550877, 23.102745 ], [ 93.3551512, 23.1017996 ], [ 93.3548974, 23.1009243 ], [ 93.3541995, 23.1001948 ], [ 93.3540345, 23.0997046 ], [ 93.3540853, 23.0989518 ], [ 93.3542185, 23.0977554 ], [ 93.3540345, 23.0969501 ], [ 93.353178, 23.0958879 ], [ 93.3515856, 23.0946215 ], [ 93.3509321, 23.0935185 ], [ 93.3506212, 23.0922171 ], [ 93.3503865, 23.0917619 ], [ 93.3499297, 23.0916451 ], [ 93.3494856, 23.0918027 ], [ 93.348274, 23.0931386 ], [ 93.3474173, 23.0934835 ], [ 93.3465544, 23.093501 ], [ 93.3458438, 23.0933259 ], [ 93.3447463, 23.0926548 ], [ 93.3443148, 23.0921762 ], [ 93.3443466, 23.0915401 ], [ 93.3446067, 23.0908106 ], [ 93.345533, 23.0900752 ], [ 93.3461357, 23.0893048 ], [ 93.3462626, 23.0884236 ], [ 93.3458629, 23.0876707 ], [ 93.3450191, 23.0868769 ], [ 93.3436867, 23.0865501 ], [ 93.3432997, 23.08627 ], [ 93.3430396, 23.0853828 ], [ 93.3427604, 23.08477 ], [ 93.3427478, 23.0838887 ], [ 93.3431284, 23.0828556 ], [ 93.343433, 23.0819393 ], [ 93.3434647, 23.0811981 ], [ 93.3431475, 23.0802467 ], [ 93.3414725, 23.0778362 ], [ 93.3395946, 23.07584 ], [ 93.3389918, 23.0749178 ], [ 93.3388776, 23.0743107 ], [ 93.3390172, 23.073873 ], [ 93.3394042, 23.0734877 ], [ 93.3398297, 23.0732549 ], [ 93.3406008, 23.0734581 ], [ 93.3410348, 23.0736161 ], [ 93.3433435, 23.0756064 ], [ 93.3438504, 23.0758334 ], [ 93.3443618, 23.0758746 ], [ 93.3451469, 23.0754949 ], [ 93.3475343, 23.0737467 ], [ 93.3510779, 23.0732506 ], [ 93.3520752, 23.0729459 ], [ 93.3523084, 23.0724796 ], [ 93.3523383, 23.0717543 ], [ 93.3522232, 23.0711836 ], [ 93.3517028, 23.0708988 ], [ 93.3503652, 23.071068 ], [ 93.3487023, 23.070984 ], [ 93.3472558, 23.0706863 ], [ 93.3460059, 23.0710307 ], [ 93.3454953, 23.071165 ], [ 93.3450004, 23.071019 ], [ 93.3446007, 23.0706717 ], [ 93.3441816, 23.0700605 ], [ 93.3435283, 23.0689083 ], [ 93.3431425, 23.0686277 ], [ 93.3421824, 23.0685369 ], [ 93.3412179, 23.0681613 ], [ 93.3404149, 23.0678723 ], [ 93.3400515, 23.0674307 ], [ 93.3398631, 23.0670138 ], [ 93.3398272, 23.0660521 ], [ 93.3399663, 23.0653752 ], [ 93.3402579, 23.0647189 ], [ 93.3412493, 23.0635467 ], [ 93.3423125, 23.0615819 ], [ 93.343147, 23.060228 ], [ 93.3431963, 23.0595676 ], [ 93.3431335, 23.0587049 ], [ 93.3428599, 23.0582384 ], [ 93.3423529, 23.0578298 ], [ 93.3417473, 23.0576151 ], [ 93.3409577, 23.0577142 ], [ 93.3405629, 23.0581559 ], [ 93.3402758, 23.0587214 ], [ 93.3396433, 23.059031 ], [ 93.3385217, 23.0596047 ], [ 93.3368708, 23.0602693 ], [ 93.3360498, 23.0604881 ], [ 93.3353186, 23.0604303 ], [ 93.3347084, 23.0601455 ], [ 93.3343406, 23.059712 ], [ 93.3342958, 23.0588468 ], [ 93.3341019, 23.0575364 ], [ 93.3332993, 23.0559549 ], [ 93.3326252, 23.0538794 ], [ 93.3334982, 23.0503117 ], [ 93.3332781, 23.0491416 ], [ 93.3322837, 23.0485613 ], [ 93.3304638, 23.0484218 ], [ 93.3284465, 23.0483504 ], [ 93.326845, 23.0476627 ], [ 93.3265486, 23.0461998 ], [ 93.3276541, 23.0436685 ], [ 93.3276032, 23.0419362 ], [ 93.3277304, 23.0405547 ], [ 93.3274828, 23.0396886 ], [ 93.3267991, 23.0387898 ], [ 93.3253786, 23.0386031 ], [ 93.3248081, 23.0381781 ], [ 93.3235538, 23.036482 ], [ 93.3226038, 23.0358701 ], [ 93.3209572, 23.0371289 ], [ 93.3199922, 23.03692 ], [ 93.3196229, 23.036188 ], [ 93.320321, 23.0341893 ], [ 93.3202721, 23.0335591 ], [ 93.3195259, 23.0317596 ], [ 93.3197559, 23.0290087 ], [ 93.3192523, 23.0282805 ], [ 93.3181426, 23.0278947 ], [ 93.3152933, 23.0277293 ], [ 93.3139711, 23.0271696 ], [ 93.3128277, 23.0256767 ], [ 93.3134012, 23.0236134 ], [ 93.3137071, 23.02115 ], [ 93.3136075, 23.0198209 ], [ 93.3125321, 23.0187412 ], [ 93.3112281, 23.0187634 ], [ 93.308576, 23.0209697 ], [ 93.3074589, 23.0213858 ], [ 93.3059725, 23.0211904 ], [ 93.3029896, 23.0191373 ], [ 93.3013992, 23.0168 ], [ 93.3001262, 23.0158627 ], [ 93.2980389, 23.0139652 ], [ 93.2962582, 23.0115186 ], [ 93.2947458, 23.0078379 ], [ 93.2940727, 23.0069429 ], [ 93.2925924, 23.0061482 ], [ 93.2914702, 23.0065218 ], [ 93.2905916, 23.0084247 ], [ 93.2896966, 23.0084762 ], [ 93.2874425, 23.007981 ], [ 93.2829787, 23.0084085 ], [ 93.2823293, 23.0078367 ], [ 93.282252, 23.0068172 ], [ 93.2804759, 23.0049292 ], [ 93.2775803, 23.0044849 ], [ 93.2755839, 23.0038724 ], [ 93.2748469, 23.0038088 ], [ 93.274747, 23.0040366 ], [ 93.2742916, 23.0050753 ], [ 93.2743175, 23.0070964 ], [ 93.2733785, 23.0081287 ], [ 93.2724254, 23.0098596 ], [ 93.2709733, 23.0109289 ], [ 93.2690737, 23.0109774 ], [ 93.2664742, 23.0099725 ], [ 93.2646644, 23.0084006 ], [ 93.2630104, 23.0082188 ], [ 93.2620649, 23.0087127 ], [ 93.2605057, 23.0086397 ], [ 93.2590171, 23.0080255 ], [ 93.2536197, 23.0076017 ], [ 93.247319, 23.006588 ], [ 93.2433932, 23.0067522 ], [ 93.2397939, 23.0077321 ], [ 93.2376951, 23.0102058 ], [ 93.2350198, 23.0112338 ], [ 93.2319621, 23.0116631 ], [ 93.2307542, 23.0113556 ], [ 93.2297, 23.0114459 ], [ 93.2282903, 23.0125386 ], [ 93.2281203, 23.0136112 ], [ 93.2288456, 23.0150614 ], [ 93.2306567, 23.0169189 ], [ 93.230577, 23.0189235 ], [ 93.229068, 23.0204099 ], [ 93.227717, 23.0206088 ], [ 93.2264925, 23.0199044 ], [ 93.2249299, 23.0203248 ], [ 93.2247602, 23.0216634 ], [ 93.2252854, 23.0233069 ], [ 93.2241293, 23.0241936 ], [ 93.2222788, 23.0240719 ], [ 93.2200524, 23.023177 ], [ 93.2187044, 23.0231999 ], [ 93.2175651, 23.0235569 ], [ 93.217133, 23.0252646 ], [ 93.2148788, 23.0267026 ], [ 93.2145842, 23.0281487 ], [ 93.2161034, 23.0312245 ], [ 93.2174314, 23.0325665 ], [ 93.2170632, 23.0350113 ], [ 93.2159182, 23.036604 ], [ 93.2133548, 23.0365087 ], [ 93.2124063, 23.0370458 ], [ 93.2113201, 23.0393474 ], [ 93.2107083, 23.0420215 ], [ 93.210348, 23.0476333 ], [ 93.2094411, 23.0487379 ], [ 93.2077418, 23.0492998 ], [ 93.2057497, 23.0487123 ], [ 93.2030578, 23.0500318 ], [ 93.2016745, 23.0514435 ], [ 93.201204, 23.052993 ], [ 93.2019029, 23.0542077 ], [ 93.2013934, 23.0550412 ], [ 93.2004357, 23.0552174 ], [ 93.1981442, 23.0549094 ], [ 93.1953567, 23.0548198 ], [ 93.192979, 23.0540033 ], [ 93.1901651, 23.0524028 ], [ 93.1887871, 23.0520858 ], [ 93.1871615, 23.0531283 ], [ 93.1865866, 23.0552902 ], [ 93.1873081, 23.0576846 ], [ 93.186814, 23.0585433 ], [ 93.1840414, 23.0598429 ], [ 93.1825225, 23.0596432 ], [ 93.1818227, 23.0582363 ], [ 93.1803584, 23.0574855 ], [ 93.1789634, 23.0561179 ], [ 93.1750888, 23.0542527 ], [ 93.1704395, 23.0484383 ], [ 93.1687248, 23.0468837 ], [ 93.1674506, 23.0467258 ], [ 93.1654415, 23.0475215 ], [ 93.1618592, 23.0482566 ], [ 93.1600687, 23.0482812 ], [ 93.1595681, 23.0473086 ], [ 93.1599239, 23.0448758 ], [ 93.1590164, 23.0441286 ], [ 93.1568361, 23.0441519 ], [ 93.1541748, 23.0434989 ], [ 93.1527548, 23.0444069 ], [ 93.1529977, 23.0452784 ], [ 93.1529204, 23.0490955 ], [ 93.1520423, 23.0538957 ], [ 93.1513775, 23.0545075 ], [ 93.1492971, 23.0545559 ], [ 93.1442651, 23.0531149 ], [ 93.1423757, 23.0529063 ], [ 93.1398118, 23.0538454 ], [ 93.1396679, 23.0549488 ], [ 93.1403273, 23.0564188 ], [ 93.1406935, 23.0576944 ], [ 93.1404026, 23.0591301 ], [ 93.1393151, 23.0602771 ], [ 93.1373103, 23.060811 ], [ 93.1350526, 23.0601347 ], [ 93.1333724, 23.0584439 ], [ 93.1329048, 23.0539739 ], [ 93.1353931, 23.0500555 ], [ 93.1353442, 23.0489973 ], [ 93.1345073, 23.0477968 ], [ 93.1321646, 23.0472344 ], [ 93.1302373, 23.0457725 ], [ 93.1283893, 23.0428437 ], [ 93.126075, 23.0407614 ], [ 93.125497, 23.0392382 ], [ 93.1257303, 23.0355889 ], [ 93.1268401, 23.0338623 ], [ 93.1281004, 23.0335839 ], [ 93.128368, 23.0322407 ], [ 93.1281414, 23.0309201 ], [ 93.1269933, 23.0281258 ], [ 93.125243, 23.0250226 ], [ 93.1250107, 23.0215067 ], [ 93.1251132, 23.0194082 ], [ 93.1248323, 23.016753 ], [ 93.1240844, 23.0134346 ], [ 93.122652, 23.0115099 ], [ 93.1231591, 23.0075583 ], [ 93.1216417, 23.0055651 ], [ 93.1194304, 23.0049646 ], [ 93.119474, 23.0030556 ], [ 93.120849, 23.001546 ], [ 93.1227914, 23.0017876 ], [ 93.1254769, 23.0026934 ], [ 93.1265001, 23.0018117 ], [ 93.1263569, 22.9994694 ], [ 93.1270151, 22.9966039 ], [ 93.1299779, 22.9934306 ], [ 93.1310946, 22.991347 ], [ 93.1335654, 22.9905348 ], [ 93.1375169, 22.9916418 ], [ 93.1410273, 22.9907185 ], [ 93.1411926, 22.987826 ], [ 93.1394833, 22.9865671 ], [ 93.1389607, 22.9820764 ], [ 93.1412334, 22.9783746 ], [ 93.1436223, 22.9782175 ], [ 93.1442812, 22.9762459 ], [ 93.1431028, 22.9720612 ], [ 93.1395528, 22.9715942 ], [ 93.1355348, 22.9703075 ], [ 93.1353573, 22.9678573 ], [ 93.1382979, 22.961009 ], [ 93.1411994, 22.9597518 ], [ 93.1415359, 22.9554149 ], [ 93.1375492, 22.9511056 ], [ 93.1405519, 22.9488285 ], [ 93.1448204, 22.9467846 ], [ 93.1465113, 22.9428916 ], [ 93.1451428, 22.9383231 ], [ 93.1453151, 22.9334052 ], [ 93.1460059, 22.9276789 ], [ 93.1503322, 22.9236945 ], [ 93.1538712, 22.921987 ], [ 93.1530345, 22.9201375 ], [ 93.1537489, 22.9176698 ], [ 93.1575852, 22.9176698 ], [ 93.1618187, 22.9164219 ], [ 93.1650146, 22.9091402 ], [ 93.1584517, 22.9085202 ], [ 93.1502615, 22.9082059 ], [ 93.1478712, 22.9107222 ], [ 93.1392285, 22.9132696 ], [ 93.1353895, 22.911823 ], [ 93.1296938, 22.9032378 ], [ 93.1296938, 22.9006404 ], [ 93.1317699, 22.8990467 ], [ 93.1348345, 22.8919886 ], [ 93.1300488, 22.8830136 ], [ 93.1274713, 22.8790557 ], [ 93.1262482, 22.8759969 ], [ 93.1277914, 22.8741012 ], [ 93.1250786, 22.8681647 ], [ 93.120082, 22.865307 ], [ 93.1199096, 22.8581615 ], [ 93.1180239, 22.8548443 ], [ 93.1166458, 22.8454772 ], [ 93.1174982, 22.842649 ], [ 93.1149348, 22.8387117 ], [ 93.1144271, 22.8355919 ], [ 93.1102961, 22.8347987 ], [ 93.1102961, 22.8327774 ], [ 93.1130738, 22.8311774 ], [ 93.1142254, 22.8298127 ], [ 93.1123917, 22.8267398 ], [ 93.1046459, 22.8257879 ], [ 93.1041137, 22.8231717 ], [ 93.104824, 22.8208802 ], [ 93.1108111, 22.8200919 ], [ 93.1108111, 22.8173772 ], [ 93.1084467, 22.8162876 ], [ 93.1034696, 22.8115416 ], [ 93.0990119, 22.8096452 ], [ 93.0953615, 22.806921 ], [ 93.0953615, 22.8036862 ], [ 93.0974076, 22.800857 ], [ 93.0963897, 22.7988239 ], [ 93.0965673, 22.7968593 ], [ 93.0982726, 22.7957588 ], [ 93.0977653, 22.7923294 ], [ 93.0972354, 22.7868551 ], [ 93.0964031, 22.7854141 ], [ 93.0969819, 22.7823653 ], [ 93.0973194, 22.7800318 ], [ 93.1002618, 22.7766806 ], [ 93.0994012, 22.7741414 ], [ 93.1016034, 22.7711737 ], [ 93.1028195, 22.7678098 ], [ 93.1028195, 22.7658573 ], [ 93.1017895, 22.7637996 ], [ 93.1017895, 22.7613576 ], [ 93.1045038, 22.7590112 ], [ 93.1065814, 22.755818 ], [ 93.1079707, 22.752455 ], [ 93.107625, 22.7459189 ], [ 93.1064055, 22.7420629 ], [ 93.1043431, 22.7404779 ], [ 93.102639, 22.7357629 ], [ 93.1009203, 22.7316413 ], [ 93.0990398, 22.7275417 ], [ 93.0986964, 22.724533 ], [ 93.098195, 22.7234539 ], [ 93.0994025, 22.7201126 ], [ 93.0981846, 22.7185077 ], [ 93.0981846, 22.7155863 ], [ 93.0945797, 22.7149529 ], [ 93.0945797, 22.7137695 ], [ 93.0923481, 22.709494 ], [ 93.0923481, 22.706071 ], [ 93.0935617, 22.7035122 ], [ 93.0930378, 22.7022236 ], [ 93.0931938, 22.7009287 ], [ 93.0967628, 22.7001447 ], [ 93.099555, 22.6951538 ], [ 93.0999055, 22.6911122 ], [ 93.0973089, 22.6880778 ], [ 93.0966585, 22.6864275 ], [ 93.0970511, 22.6859445 ], [ 93.0995836, 22.6870349 ], [ 93.1019451, 22.6858618 ], [ 93.1026534, 22.6824308 ], [ 93.101555, 22.6798971 ], [ 93.0976671, 22.6810385 ], [ 93.0954335, 22.6810385 ], [ 93.0952668, 22.6759619 ], [ 93.0961127, 22.6719031 ], [ 93.0988462, 22.6695385 ], [ 93.1000418, 22.6670167 ], [ 93.1019749, 22.6658816 ], [ 93.1012869, 22.6619132 ], [ 93.1070434, 22.6578509 ], [ 93.1098606, 22.6563886 ], [ 93.1096865, 22.6515682 ], [ 93.1107159, 22.6469762 ], [ 93.1107159, 22.6445381 ], [ 93.1077934, 22.6410476 ], [ 93.107628, 22.6392158 ], [ 93.1093005, 22.6345849 ], [ 93.1121746, 22.6345849 ], [ 93.1157668, 22.6311115 ], [ 93.1175277, 22.6314366 ], [ 93.1190969, 22.6275743 ], [ 93.1224334, 22.6260345 ], [ 93.1255233, 22.6265098 ], [ 93.127326, 22.6256778 ], [ 93.1294228, 22.6221295 ], [ 93.129604, 22.6206244 ], [ 93.1280537, 22.6185574 ], [ 93.1280537, 22.6169439 ], [ 93.1345768, 22.6139331 ], [ 93.1345768, 22.611813 ], [ 93.137479, 22.6048788 ], [ 93.1392234, 22.6024632 ], [ 93.1386808, 22.6004594 ], [ 93.1373683, 22.5993992 ], [ 93.1412768, 22.5935943 ], [ 93.140412, 22.5868871 ], [ 93.1398883, 22.5836638 ], [ 93.1362175, 22.5807586 ], [ 93.1292021, 22.5787047 ], [ 93.1265071, 22.5748163 ], [ 93.1263351, 22.5706886 ], [ 93.1223537, 22.5658932 ], [ 93.1204269, 22.5639521 ], [ 93.1158199, 22.5631643 ], [ 93.1125971, 22.5565854 ], [ 93.1107101, 22.5488222 ], [ 93.1095303, 22.5458648 ], [ 93.1108876, 22.5438278 ], [ 93.1108876, 22.5393162 ], [ 93.1098627, 22.5374231 ], [ 93.1100109, 22.5364653 ], [ 93.1118575, 22.5363102 ], [ 93.1136467, 22.5335008 ], [ 93.1130968, 22.5318078 ], [ 93.1077871, 22.5286437 ], [ 93.1074634, 22.526401 ], [ 93.1094155, 22.5247481 ], [ 93.1160465, 22.5253763 ], [ 93.1255298, 22.5258541 ], [ 93.1292851, 22.5242023 ], [ 93.1277111, 22.5191944 ], [ 93.1278844, 22.5145522 ], [ 93.1249472, 22.512158 ], [ 93.1241107, 22.5092218 ], [ 93.1253035, 22.5051291 ], [ 93.1258136, 22.5026156 ], [ 93.1304188, 22.4964699 ], [ 93.1349013, 22.4929656 ], [ 93.1357915, 22.4901693 ], [ 93.1340686, 22.4876223 ], [ 93.134402, 22.4856202 ], [ 93.1354365, 22.4822747 ], [ 93.135261, 22.4796802 ], [ 93.1333818, 22.476681 ], [ 93.1340658, 22.4727306 ], [ 93.1321861, 22.4675196 ], [ 93.1342096, 22.4639354 ], [ 93.1383455, 22.4591578 ], [ 93.1390277, 22.45506 ], [ 93.1411645, 22.4538447 ], [ 93.1533473, 22.4536861 ], [ 93.1562182, 22.4522814 ], [ 93.1572114, 22.4528933 ], [ 93.1595601, 22.4528933 ], [ 93.1610774, 22.4511794 ], [ 93.1625896, 22.4518005 ], [ 93.1657904, 22.4499928 ], [ 93.1688781, 22.4426998 ], [ 93.1737732, 22.4403596 ], [ 93.176199, 22.4403596 ], [ 93.1786863, 22.4382248 ], [ 93.1790402, 22.4354444 ], [ 93.178049, 22.4328485 ], [ 93.1818782, 22.4316174 ], [ 93.1860679, 22.4285515 ], [ 93.186598, 22.4238149 ], [ 93.1841569, 22.4220419 ], [ 93.1821353, 22.4181484 ], [ 93.1843461, 22.4095015 ], [ 93.1876124, 22.406005 ], [ 93.1881443, 22.4025627 ], [ 93.1868818, 22.4013955 ], [ 93.1848569, 22.3999914 ], [ 93.184006, 22.3966874 ], [ 93.1828429, 22.3948438 ], [ 93.1860832, 22.390744 ], [ 93.1855672, 22.3877226 ], [ 93.1872348, 22.3852556 ], [ 93.1907101, 22.3833275 ], [ 93.1907101, 22.3817302 ], [ 93.1868938, 22.3801262 ], [ 93.184192, 22.3751295 ], [ 93.1850362, 22.3695086 ], [ 93.1881188, 22.3669747 ], [ 93.1891749, 22.3632306 ], [ 93.1871125, 22.3595748 ], [ 93.1881352, 22.354688 ], [ 93.1881352, 22.3475379 ], [ 93.188482, 22.3446512 ], [ 93.1869336, 22.3413094 ], [ 93.1869336, 22.3390282 ], [ 93.1928887, 22.3350937 ], [ 93.1967047, 22.3315639 ], [ 93.1977672, 22.3273048 ], [ 93.1924797, 22.323881 ], [ 93.1909792, 22.3241894 ], [ 93.1895398, 22.3218222 ], [ 93.1918677, 22.3192072 ], [ 93.1954913, 22.3164936 ], [ 93.1965529, 22.3140383 ], [ 93.1960135, 22.3117096 ], [ 93.1926494, 22.3100716 ], [ 93.1910534, 22.3102192 ], [ 93.1910534, 22.3085134 ], [ 93.1934176, 22.3055451 ], [ 93.1962033, 22.30329 ], [ 93.1962033, 22.3017551 ], [ 93.1950699, 22.3001822 ], [ 93.1913776, 22.3021343 ], [ 93.1906429, 22.3021343 ], [ 93.189876, 22.300999 ], [ 93.191531, 22.2982428 ], [ 93.1938775, 22.2968471 ], [ 93.1985443, 22.2960475 ], [ 93.2001685, 22.2938768 ], [ 93.1990774, 22.2910164 ], [ 93.1957945, 22.2910164 ], [ 93.1948315, 22.2895313 ], [ 93.1949998, 22.2853278 ], [ 93.1970533, 22.2827943 ], [ 93.1980915, 22.2771898 ], [ 93.1980915, 22.2718099 ], [ 93.2004752, 22.2673983 ], [ 93.2023861, 22.2646652 ], [ 93.2022042, 22.2621402 ], [ 93.1999264, 22.2614916 ], [ 93.1987939, 22.2598445 ], [ 93.1999884, 22.256686 ], [ 93.1990758, 22.2541522 ], [ 93.1937024, 22.2546335 ], [ 93.1911637, 22.2524405 ], [ 93.1880235, 22.2508259 ], [ 93.1861296, 22.2508259 ], [ 93.1810597, 22.2486361 ], [ 93.1798519, 22.2462406 ], [ 93.1766551, 22.2454187 ], [ 93.1709852, 22.24685 ], [ 93.1667907, 22.2460411 ], [ 93.1643936, 22.2501614 ], [ 93.1592115, 22.2486143 ], [ 93.156616, 22.2470128 ], [ 93.1520296, 22.2470128 ], [ 93.1503281, 22.2492175 ], [ 93.1458243, 22.2481368 ], [ 93.1426258, 22.2457996 ], [ 93.1419691, 22.2436725 ], [ 93.1435061, 22.2409853 ], [ 93.1433279, 22.2388407 ], [ 93.1407566, 22.2355086 ], [ 93.1407566, 22.2338776 ], [ 93.1460351, 22.2304101 ], [ 93.1491535, 22.2264008 ], [ 93.150876, 22.2214578 ], [ 93.1524276, 22.217787 ], [ 93.1526079, 22.2154506 ], [ 93.1499749, 22.2141505 ], [ 93.148848, 22.2128093 ], [ 93.1499898, 22.2103932 ], [ 93.1536034, 22.2089594 ], [ 93.1546478, 22.2058976 ], [ 93.1567032, 22.2030431 ], [ 93.1578906, 22.2005304 ], [ 93.1608212, 22.1989342 ], [ 93.161709, 22.1956461 ], [ 93.158248, 22.1897175 ], [ 93.153889, 22.186667 ], [ 93.148056, 22.184722 ], [ 93.140833, 22.183889 ], [ 93.134722, 22.184722 ], [ 93.128611, 22.185278 ], [ 93.123889, 22.1875 ], [ 93.120556, 22.191389 ], [ 93.117222, 22.195278 ], [ 93.114444, 22.199722 ], [ 93.110833, 22.203333 ], [ 93.106111, 22.205556 ], [ 93.100833, 22.207222 ], [ 93.094167, 22.207222 ], [ 93.088056, 22.208056 ], [ 93.082778, 22.209444 ], [ 93.078056, 22.211667 ], [ 93.071389, 22.211667 ], [ 93.064722, 22.211667 ], [ 93.058056, 22.210278 ], [ 93.052222, 22.208333 ], [ 93.0475, 22.205833 ], [ 93.044167, 22.201944 ], [ 93.045556, 22.195833 ], [ 93.047778, 22.190556 ], [ 93.048611, 22.183889 ], [ 93.048611, 22.177778 ], [ 93.045278, 22.173889 ], [ 93.043056, 22.169444 ], [ 93.041389, 22.164444 ], [ 93.040556, 22.158889 ], [ 93.041389, 22.152222 ], [ 93.042222, 22.145278 ], [ 93.044444, 22.14 ], [ 93.047222, 22.135556 ], [ 93.049167, 22.130278 ], [ 93.051389, 22.125 ], [ 93.052778, 22.118889 ], [ 93.048056, 22.116389 ], [ 93.040556, 22.115556 ], [ 93.035278, 22.117222 ], [ 93.028611, 22.117222 ], [ 93.021944, 22.117222 ], [ 93.016111, 22.115 ], [ 93.013056, 22.111389 ], [ 93.009722, 22.1075 ], [ 93.008889, 22.101944 ], [ 93.008056, 22.096389 ], [ 93.006389, 22.091389 ], [ 93.004167, 22.086944 ], [ 93.001667, 22.0825 ], [ 92.999167, 22.078333 ], [ 92.996667, 22.073889 ], [ 92.993611, 22.07 ], [ 92.991111, 22.065556 ], [ 92.989444, 22.060833 ], [ 92.989444, 22.054444 ], [ 92.990833, 22.048611 ], [ 92.993056, 22.043333 ], [ 92.995833, 22.038611 ], [ 92.998056, 22.033333 ], [ 93.0, 22.028056 ], [ 93.002222, 22.022778 ], [ 93.003611, 22.016944 ], [ 93.005278, 22.010833 ], [ 93.006111, 22.003889 ], [ 93.003611, 21.999722 ], [ 93.000278, 21.995833 ], [ 92.996389, 21.992778 ], [ 92.990556, 21.990833 ], [ 92.984722, 21.991389 ], [ 92.980556, 21.994444 ], [ 92.976944, 21.998333 ], [ 92.973611, 22.001944 ], [ 92.970833, 22.006389 ], [ 92.968056, 22.011111 ], [ 92.965278, 22.015556 ], [ 92.9625, 22.02 ], [ 92.959722, 22.024722 ], [ 92.955556, 22.0275 ], [ 92.950278, 22.029167 ], [ 92.943056, 22.028333 ], [ 92.938056, 22.025833 ], [ 92.933333, 22.023056 ], [ 92.93, 22.019444 ], [ 92.9275, 22.015 ], [ 92.925833, 22.01 ], [ 92.924444, 22.005 ], [ 92.923611, 21.999444 ], [ 92.921944, 21.994444 ], [ 92.921111, 21.988889 ], [ 92.919444, 21.983889 ], [ 92.916944, 21.979444 ], [ 92.915556, 21.974444 ], [ 92.913889, 21.969444 ], [ 92.911389, 21.965278 ], [ 92.908333, 21.961389 ], [ 92.904167, 21.9575 ], [ 92.901111, 21.953611 ], [ 92.896389, 21.954722 ], [ 92.893611, 21.959167 ], [ 92.890833, 21.963611 ], [ 92.89, 21.970556 ], [ 92.889167, 21.977222 ], [ 92.889167, 21.983333 ], [ 92.888333, 21.990278 ], [ 92.8875, 21.996944 ], [ 92.886667, 22.003889 ], [ 92.885833, 22.010556 ], [ 92.884444, 22.016667 ], [ 92.882222, 22.021944 ], [ 92.88, 22.027222 ], [ 92.877222, 22.031667 ], [ 92.874444, 22.036111 ], [ 92.871667, 22.040833 ], [ 92.868333, 22.044444 ], [ 92.865556, 22.048889 ], [ 92.861944, 22.052778 ], [ 92.858611, 22.056389 ], [ 92.854444, 22.059444 ], [ 92.849722, 22.061667 ], [ 92.844444, 22.063333 ], [ 92.839722, 22.065556 ], [ 92.835556, 22.068611 ], [ 92.831667, 22.071389 ], [ 92.828056, 22.075278 ], [ 92.824722, 22.078889 ], [ 92.821944, 22.083611 ], [ 92.819167, 22.088056 ], [ 92.815556, 22.091944 ], [ 92.812778, 22.096389 ], [ 92.809444, 22.1 ], [ 92.805833, 22.103889 ], [ 92.801944, 22.106944 ], [ 92.797778, 22.109722 ], [ 92.793611, 22.112778 ], [ 92.788889, 22.115 ], [ 92.785, 22.118056 ], [ 92.78, 22.120278 ], [ 92.775278, 22.123333 ], [ 92.77, 22.124722 ], [ 92.765278, 22.126944 ], [ 92.760556, 22.129167 ], [ 92.755833, 22.131389 ], [ 92.751667, 22.134444 ], [ 92.746667, 22.1375 ], [ 92.742778, 22.140556 ], [ 92.738611, 22.143333 ], [ 92.734444, 22.146389 ], [ 92.731111, 22.150833 ], [ 92.7275, 22.154722 ], [ 92.723333, 22.1575 ], [ 92.718611, 22.159722 ], [ 92.711944, 22.159722 ], [ 92.705556, 22.158333 ], [ 92.700556, 22.155833 ], [ 92.6975, 22.152222 ], [ 92.696667, 22.146389 ], [ 92.696667, 22.140278 ], [ 92.6975, 22.133611 ], [ 92.6975, 22.127222 ], [ 92.698333, 22.120556 ], [ 92.699167, 22.113611 ], [ 92.7, 22.106944 ], [ 92.700833, 22.100278 ], [ 92.699444, 22.095 ], [ 92.695833, 22.094167 ], [ 92.691667, 22.097222 ], [ 92.686944, 22.099444 ], [ 92.682222, 22.101667 ], [ 92.678056, 22.099722 ], [ 92.678889, 22.093056 ], [ 92.679722, 22.086111 ], [ 92.681111, 22.08 ], [ 92.682778, 22.074167 ], [ 92.683611, 22.067222 ], [ 92.684444, 22.060556 ], [ 92.684444, 22.054444 ], [ 92.684444, 22.048056 ], [ 92.684444, 22.041944 ], [ 92.683611, 22.036389 ], [ 92.682222, 22.031389 ], [ 92.679722, 22.026944 ], [ 92.675833, 22.023889 ], [ 92.670833, 22.021111 ], [ 92.665, 22.020556 ], [ 92.658889, 22.021944 ], [ 92.652778, 22.022778 ], [ 92.647222, 22.020833 ], [ 92.643056, 22.0175 ], [ 92.64, 22.013611 ], [ 92.636667, 22.01 ], [ 92.634167, 22.005556 ], [ 92.630833, 22.001667 ], [ 92.626944, 21.998611 ], [ 92.623611, 21.994722 ], [ 92.619722, 21.991667 ], [ 92.615556, 21.988333 ], [ 92.610833, 21.985833 ], [ 92.605833, 21.983333 ], [ 92.600833, 21.981944 ], [ 92.600556, 21.984722 ], [ 92.600556, 21.990833 ], [ 92.598889, 21.996944 ], [ 92.5975, 22.002778 ], [ 92.595833, 22.008889 ], [ 92.594444, 22.015 ], [ 92.592222, 22.020278 ], [ 92.590833, 22.026389 ], [ 92.589167, 22.032222 ], [ 92.588333, 22.039167 ], [ 92.5875, 22.045833 ], [ 92.586667, 22.052778 ], [ 92.585833, 22.059444 ], [ 92.585, 22.066111 ], [ 92.583611, 22.072222 ], [ 92.581944, 22.078333 ], [ 92.581111, 22.085 ], [ 92.579722, 22.091111 ], [ 92.578611, 22.098056 ], [ 92.577222, 22.103889 ], [ 92.575833, 22.11 ], [ 92.573611, 22.115278 ], [ 92.570833, 22.119722 ], [ 92.568056, 22.124167 ], [ 92.565278, 22.128889 ], [ 92.562222, 22.133333 ], [ 92.5625, 22.138056 ], [ 92.566667, 22.141389 ], [ 92.573889, 22.141944 ], [ 92.580556, 22.142222 ], [ 92.585833, 22.140556 ], [ 92.59, 22.137778 ], [ 92.595278, 22.136111 ], [ 92.598889, 22.137222 ], [ 92.601389, 22.141667 ], [ 92.603056, 22.146667 ], [ 92.604444, 22.151667 ], [ 92.605278, 22.157222 ], [ 92.606111, 22.162778 ], [ 92.604722, 22.168889 ], [ 92.601944, 22.173333 ], [ 92.596944, 22.175556 ], [ 92.593611, 22.179444 ], [ 92.592222, 22.185278 ], [ 92.590556, 22.191389 ], [ 92.589167, 22.1975 ], [ 92.588333, 22.204167 ], [ 92.588333, 22.210556 ], [ 92.587222, 22.217222 ], [ 92.587222, 22.223333 ], [ 92.588056, 22.228889 ], [ 92.588056, 22.235278 ], [ 92.587222, 22.241944 ], [ 92.587222, 22.248333 ], [ 92.585556, 22.254167 ], [ 92.583611, 22.259444 ], [ 92.580556, 22.263889 ], [ 92.577778, 22.268611 ], [ 92.576389, 22.274444 ], [ 92.576389, 22.280833 ], [ 92.577222, 22.286389 ], [ 92.576944, 22.2925 ], [ 92.578611, 22.2975 ], [ 92.578611, 22.303611 ], [ 92.578611, 22.31 ], [ 92.578611, 22.316111 ], [ 92.578333, 22.322222 ], [ 92.5775, 22.329167 ], [ 92.576667, 22.335833 ], [ 92.575278, 22.341944 ], [ 92.573611, 22.348056 ], [ 92.571667, 22.353333 ], [ 92.568611, 22.357778 ], [ 92.566667, 22.363056 ], [ 92.564444, 22.368333 ], [ 92.562222, 22.373611 ], [ 92.56, 22.378889 ], [ 92.558056, 22.384167 ], [ 92.556389, 22.390278 ], [ 92.555, 22.396111 ], [ 92.553333, 22.402222 ], [ 92.551944, 22.408333 ], [ 92.551111, 22.415 ], [ 92.550833, 22.421111 ], [ 92.55, 22.428056 ], [ 92.549167, 22.434722 ], [ 92.548333, 22.441667 ], [ 92.5475, 22.448333 ], [ 92.546667, 22.455278 ], [ 92.546667, 22.461389 ], [ 92.546667, 22.4675 ], [ 92.545556, 22.474444 ], [ 92.545556, 22.480556 ], [ 92.544722, 22.4875 ], [ 92.544722, 22.493611 ], [ 92.543889, 22.500556 ], [ 92.543889, 22.506667 ], [ 92.543056, 22.513333 ], [ 92.541944, 22.520278 ], [ 92.54, 22.525556 ], [ 92.536944, 22.53 ], [ 92.533611, 22.533889 ], [ 92.530278, 22.5375 ], [ 92.527222, 22.541944 ], [ 92.525278, 22.547222 ], [ 92.524167, 22.554167 ], [ 92.524167, 22.560278 ], [ 92.525833, 22.565278 ], [ 92.5275, 22.570278 ], [ 92.53, 22.574722 ], [ 92.531389, 22.579722 ], [ 92.533056, 22.584722 ], [ 92.533056, 22.590833 ], [ 92.533056, 22.596944 ], [ 92.532222, 22.603889 ], [ 92.531111, 22.610556 ], [ 92.529722, 22.616667 ], [ 92.528889, 22.623611 ], [ 92.528056, 22.630278 ], [ 92.527222, 22.637222 ], [ 92.526389, 22.643889 ], [ 92.524722, 22.65 ], [ 92.523889, 22.656667 ], [ 92.522222, 22.662778 ], [ 92.521389, 22.669722 ], [ 92.520556, 22.676389 ], [ 92.519722, 22.683333 ], [ 92.518056, 22.689167 ], [ 92.517222, 22.696111 ], [ 92.516389, 22.702778 ], [ 92.516389, 22.709167 ], [ 92.515556, 22.715833 ], [ 92.516389, 22.714444 ], [ 92.516389, 22.715833 ], [ 92.514722, 22.721944 ], [ 92.511944, 22.726389 ], [ 92.509167, 22.731111 ], [ 92.505, 22.733889 ], [ 92.5026678, 22.7355988 ], [ 92.500833, 22.736944 ], [ 92.495556, 22.738611 ], [ 92.490556, 22.740833 ], [ 92.485278, 22.742222 ], [ 92.480556, 22.744444 ], [ 92.476389, 22.7475 ], [ 92.473611, 22.751944 ], [ 92.470556, 22.756389 ], [ 92.468611, 22.761667 ], [ 92.466944, 22.767778 ], [ 92.465556, 22.773889 ], [ 92.463889, 22.78 ], [ 92.4625, 22.785833 ], [ 92.460833, 22.791944 ], [ 92.458611, 22.797222 ], [ 92.456667, 22.8025 ], [ 92.454444, 22.807778 ], [ 92.452222, 22.813056 ], [ 92.451389, 22.82 ], [ 92.449722, 22.825833 ], [ 92.450556, 22.831667 ], [ 92.452222, 22.836389 ], [ 92.455278, 22.840278 ], [ 92.459444, 22.843611 ], [ 92.461944, 22.848056 ], [ 92.459722, 22.853333 ], [ 92.456944, 22.857778 ], [ 92.453333, 22.861389 ], [ 92.45, 22.865278 ], [ 92.447778, 22.870556 ], [ 92.446944, 22.877222 ], [ 92.446111, 22.884167 ], [ 92.443889, 22.889444 ], [ 92.439722, 22.8925 ], [ 92.433611, 22.893056 ], [ 92.428056, 22.894722 ], [ 92.423333, 22.896944 ], [ 92.42, 22.900556 ], [ 92.416944, 22.905278 ], [ 92.413056, 22.908056 ], [ 92.4075, 22.909722 ], [ 92.402778, 22.911944 ], [ 92.397222, 22.913333 ], [ 92.394444, 22.917778 ], [ 92.393611, 22.924722 ], [ 92.389444, 22.927778 ], [ 92.384722, 22.93 ], [ 92.379722, 22.931944 ], [ 92.376389, 22.935833 ], [ 92.374722, 22.941944 ], [ 92.375556, 22.9475 ], [ 92.376389, 22.953056 ], [ 92.376389, 22.959444 ], [ 92.376389, 22.965556 ], [ 92.376111, 22.971667 ], [ 92.376111, 22.978056 ], [ 92.376944, 22.983611 ], [ 92.376944, 22.989722 ], [ 92.377778, 22.995278 ], [ 92.378333, 23.001111 ], [ 92.378333, 23.007222 ], [ 92.379167, 23.012778 ], [ 92.38, 23.018333 ], [ 92.380556, 23.023889 ], [ 92.381389, 23.029722 ], [ 92.383056, 23.034722 ], [ 92.383889, 23.040278 ], [ 92.383889, 23.046389 ], [ 92.383611, 23.052778 ], [ 92.382778, 23.059444 ], [ 92.381944, 23.066389 ], [ 92.380278, 23.072222 ], [ 92.378056, 23.0775 ], [ 92.376111, 23.082778 ], [ 92.373056, 23.0875 ], [ 92.369722, 23.091111 ], [ 92.366111, 23.095 ], [ 92.363333, 23.099444 ], [ 92.361111, 23.104722 ], [ 92.360278, 23.111389 ], [ 92.359444, 23.118333 ], [ 92.359444, 23.124722 ], [ 92.358333, 23.131389 ], [ 92.358333, 23.1375 ], [ 92.3575, 23.144444 ], [ 92.356667, 23.151111 ], [ 92.355, 23.157222 ], [ 92.354167, 23.164167 ], [ 92.353333, 23.170833 ], [ 92.3525, 23.177778 ], [ 92.352222, 23.183889 ], [ 92.352222, 23.19 ], [ 92.352222, 23.196389 ], [ 92.351389, 23.203056 ], [ 92.350556, 23.21 ], [ 92.349444, 23.216667 ], [ 92.348611, 23.223611 ], [ 92.349444, 23.229167 ], [ 92.351111, 23.234167 ], [ 92.354444, 23.238056 ], [ 92.358333, 23.241111 ], [ 92.361667, 23.245 ], [ 92.365833, 23.248333 ], [ 92.368333, 23.252778 ], [ 92.369722, 23.257778 ], [ 92.372222, 23.261944 ], [ 92.375556, 23.265833 ], [ 92.378611, 23.269722 ], [ 92.381944, 23.273611 ], [ 92.384444, 23.277778 ], [ 92.383611, 23.284722 ], [ 92.381944, 23.290833 ], [ 92.381111, 23.2975 ], [ 92.380278, 23.304444 ], [ 92.378056, 23.309722 ], [ 92.375833, 23.315 ], [ 92.373611, 23.320278 ], [ 92.371389, 23.325556 ], [ 92.37, 23.331667 ], [ 92.370833, 23.337222 ], [ 92.371389, 23.342778 ], [ 92.371389, 23.349167 ], [ 92.370556, 23.355833 ], [ 92.368889, 23.361944 ], [ 92.366667, 23.367222 ], [ 92.363333, 23.370833 ], [ 92.360556, 23.375556 ], [ 92.3575, 23.38 ], [ 92.354722, 23.384444 ], [ 92.353333, 23.390556 ], [ 92.351111, 23.395833 ], [ 92.348889, 23.401111 ], [ 92.347222, 23.407222 ], [ 92.345833, 23.413333 ], [ 92.342778, 23.417778 ], [ 92.339444, 23.421667 ], [ 92.335833, 23.425278 ], [ 92.331667, 23.428333 ], [ 92.3275, 23.431389 ], [ 92.324722, 23.435833 ], [ 92.323889, 23.442778 ], [ 92.324444, 23.448333 ], [ 92.324444, 23.454444 ], [ 92.323611, 23.461389 ], [ 92.322778, 23.468056 ], [ 92.321667, 23.475 ], [ 92.320833, 23.481667 ], [ 92.32, 23.488611 ], [ 92.319167, 23.495278 ], [ 92.318333, 23.502222 ], [ 92.316667, 23.508333 ], [ 92.315, 23.514444 ], [ 92.313611, 23.520278 ], [ 92.311944, 23.526389 ], [ 92.311111, 23.533333 ], [ 92.309722, 23.539444 ], [ 92.308611, 23.546111 ], [ 92.307778, 23.553056 ], [ 92.306389, 23.558889 ], [ 92.304167, 23.564167 ], [ 92.301944, 23.569722 ], [ 92.299722, 23.575 ], [ 92.2975, 23.580278 ], [ 92.294722, 23.584722 ], [ 92.291667, 23.589167 ], [ 92.288056, 23.593056 ], [ 92.284722, 23.596667 ], [ 92.281111, 23.600556 ], [ 92.278333, 23.605 ], [ 92.2775, 23.610556 ], [ 92.279167, 23.615556 ], [ 92.280833, 23.620556 ], [ 92.28, 23.626111 ], [ 92.276667, 23.629722 ], [ 92.273056, 23.633611 ], [ 92.273056, 23.639722 ], [ 92.274444, 23.644722 ], [ 92.275278, 23.650278 ], [ 92.276944, 23.655278 ], [ 92.278611, 23.660278 ], [ 92.281111, 23.664722 ], [ 92.283611, 23.669167 ], [ 92.285833, 23.673611 ], [ 92.2875, 23.678611 ], [ 92.289167, 23.683611 ], [ 92.29, 23.689444 ], [ 92.288889, 23.696111 ], [ 92.286111, 23.700556 ], [ 92.283333, 23.705278 ], [ 92.279722, 23.708889 ], [ 92.276111, 23.712778 ], [ 92.272778, 23.716389 ], [ 92.269702, 23.7186441 ], [ 92.268611, 23.719444 ], [ 92.263611, 23.721667 ], [ 92.258056, 23.723056 ], [ 92.252222, 23.7225 ], [ 92.248889, 23.718611 ], [ 92.2475, 23.713611 ], [ 92.245833, 23.708611 ], [ 92.245, 23.703056 ], [ 92.243333, 23.698056 ], [ 92.241944, 23.692222 ], [ 92.239444, 23.687778 ], [ 92.237778, 23.683056 ], [ 92.236111, 23.677778 ], [ 92.233889, 23.673333 ], [ 92.232222, 23.668333 ], [ 92.229722, 23.663889 ], [ 92.227222, 23.659722 ], [ 92.224167, 23.655833 ], [ 92.219167, 23.653056 ], [ 92.211667, 23.652222 ], [ 92.206944, 23.654444 ], [ 92.203333, 23.658333 ], [ 92.2025, 23.665 ], [ 92.203056, 23.670833 ], [ 92.203889, 23.676389 ], [ 92.205556, 23.681389 ], [ 92.205556, 23.6875 ], [ 92.205278, 23.693889 ], [ 92.204444, 23.700556 ], [ 92.203056, 23.706667 ], [ 92.2, 23.711111 ], [ 92.197222, 23.715833 ], [ 92.194444, 23.720278 ], [ 92.190833, 23.724167 ], [ 92.186667, 23.726944 ], [ 92.183056, 23.730833 ], [ 92.1809881, 23.7318063 ], [ 92.178333, 23.733056 ], [ 92.174722, 23.736667 ], [ 92.171667, 23.736389 ], [ 92.165556, 23.737222 ], [ 92.158333, 23.736389 ], [ 92.151667, 23.735 ], [ 92.145833, 23.732778 ], [ 92.140833, 23.730278 ], [ 92.136667, 23.726944 ], [ 92.133333, 23.723056 ], [ 92.130278, 23.719444 ], [ 92.126944, 23.715556 ], [ 92.124444, 23.711111 ], [ 92.121111, 23.707222 ], [ 92.118889, 23.702778 ], [ 92.115556, 23.699167 ], [ 92.113056, 23.694722 ], [ 92.109722, 23.690833 ], [ 92.105833, 23.6875 ], [ 92.101667, 23.684444 ], [ 92.096667, 23.681667 ], [ 92.091667, 23.679167 ], [ 92.086667, 23.676389 ], [ 92.082778, 23.673056 ], [ 92.079444, 23.669444 ], [ 92.076111, 23.665556 ], [ 92.074722, 23.660556 ], [ 92.072222, 23.656111 ], [ 92.0697614, 23.6519046 ], [ 92.064722, 23.649167 ], [ 92.058056, 23.648889 ], [ 92.050556, 23.648056 ], [ 92.043056, 23.647222 ], [ 92.037222, 23.645278 ], [ 92.030556, 23.645278 ], [ 92.026389, 23.648056 ], [ 92.023611, 23.652778 ], [ 92.021389, 23.658056 ], [ 92.018333, 23.6625 ], [ 92.015556, 23.666944 ], [ 92.011944, 23.670833 ], [ 92.008333, 23.674444 ], [ 92.005, 23.678333 ], [ 92.000833, 23.681389 ], [ 91.997222, 23.685 ], [ 91.993056, 23.688056 ], [ 91.988889, 23.691111 ], [ 91.984722, 23.693889 ], [ 91.981111, 23.697778 ], [ 91.9775, 23.701389 ], [ 91.975278, 23.706667 ], [ 91.973056, 23.712222 ], [ 91.971667, 23.718056 ], [ 91.969444, 23.723333 ], [ 91.966389, 23.728056 ], [ 91.962778, 23.731667 ], [ 91.9575, 23.733056 ], [ 91.95, 23.732222 ], [ 91.9475, 23.727778 ], [ 91.945833, 23.722778 ], [ 91.946111, 23.716667 ], [ 91.945278, 23.711111 ], [ 91.945556, 23.704722 ], [ 91.943889, 23.699722 ], [ 91.941389, 23.695278 ], [ 91.939722, 23.690278 ], [ 91.938333, 23.685278 ], [ 91.9375, 23.679722 ], [ 91.936667, 23.673889 ], [ 91.9375, 23.667222 ], [ 91.939167, 23.661111 ], [ 91.940833, 23.655 ], [ 91.9425, 23.649167 ], [ 91.943333, 23.642222 ], [ 91.945, 23.636111 ], [ 91.946389, 23.63 ], [ 91.948056, 23.624167 ], [ 91.949722, 23.618056 ], [ 91.951111, 23.611944 ], [ 91.952778, 23.605833 ], [ 91.954167, 23.6 ], [ 91.956389, 23.594722 ], [ 91.958056, 23.588611 ], [ 91.960278, 23.583333 ], [ 91.961111, 23.576389 ], [ 91.962222, 23.569722 ], [ 91.963056, 23.562778 ], [ 91.963056, 23.556667 ], [ 91.963333, 23.550278 ], [ 91.963333, 23.544167 ], [ 91.963333, 23.538056 ], [ 91.965, 23.531944 ], [ 91.965833, 23.525 ], [ 91.9675, 23.519167 ], [ 91.9675, 23.512778 ], [ 91.966667, 23.507222 ], [ 91.966111, 23.501667 ], [ 91.964444, 23.496667 ], [ 91.961944, 23.492222 ], [ 91.958889, 23.4875 ], [ 91.955556, 23.483889 ], [ 91.9525, 23.48 ], [ 91.948333, 23.476667 ], [ 91.945, 23.472778 ], [ 91.942778, 23.468333 ], [ 91.941111, 23.463333 ], [ 91.939444, 23.458333 ], [ 91.937778, 23.453333 ], [ 91.935556, 23.448889 ], [ 91.933056, 23.444444 ], [ 91.928056, 23.441944 ], [ 91.921389, 23.441944 ], [ 91.913889, 23.440833 ], [ 91.906389, 23.440278 ], [ 91.9, 23.438611 ], [ 91.893333, 23.437222 ], [ 91.886667, 23.435833 ], [ 91.880833, 23.433611 ], [ 91.877778, 23.43 ], [ 91.873611, 23.426667 ], [ 91.869444, 23.423611 ], [ 91.865556, 23.420278 ], [ 91.859722, 23.418056 ], [ 91.853889, 23.416111 ], [ 91.849167, 23.413611 ], [ 91.845, 23.410278 ], [ 91.8425, 23.405833 ], [ 91.840833, 23.400833 ], [ 91.839444, 23.395833 ], [ 91.837778, 23.390833 ], [ 91.835278, 23.386389 ], [ 91.832222, 23.3825 ], [ 91.829722, 23.378056 ], [ 91.826389, 23.374167 ], [ 91.823333, 23.370556 ], [ 91.82, 23.366667 ], [ 91.816667, 23.362778 ], [ 91.813611, 23.358889 ], [ 91.810278, 23.355 ], [ 91.806944, 23.351389 ], [ 91.804722, 23.346944 ], [ 91.801389, 23.343056 ], [ 91.798889, 23.338611 ], [ 91.796389, 23.334167 ], [ 91.793333, 23.330278 ], [ 91.790833, 23.325833 ], [ 91.788611, 23.321389 ], [ 91.786111, 23.316944 ], [ 91.783611, 23.3125 ], [ 91.782222, 23.3075 ], [ 91.780556, 23.3025 ], [ 91.778056, 23.298056 ], [ 91.775833, 23.293889 ], [ 91.774167, 23.288611 ], [ 91.771667, 23.284167 ], [ 91.770278, 23.279167 ], [ 91.768611, 23.274167 ], [ 91.767778, 23.268611 ], [ 91.767222, 23.263056 ], [ 91.767222, 23.256667 ], [ 91.768056, 23.25 ], [ 91.769722, 23.243889 ], [ 91.7725, 23.239444 ], [ 91.775556, 23.235 ], [ 91.778333, 23.230556 ], [ 91.781944, 23.226667 ], [ 91.784167, 23.221389 ], [ 91.7863558, 23.2161898 ], [ 91.786389, 23.216111 ], [ 91.788611, 23.210833 ], [ 91.790833, 23.205556 ], [ 91.793056, 23.200278 ], [ 91.795278, 23.195 ], [ 91.7958953, 23.1900594 ], [ 91.796111, 23.188333 ], [ 91.797778, 23.182222 ], [ 91.799444, 23.176111 ], [ 91.800833, 23.17 ], [ 91.803056, 23.164722 ], [ 91.804722, 23.158889 ], [ 91.805556, 23.151944 ], [ 91.807222, 23.145833 ], [ 91.808889, 23.14 ], [ 91.809722, 23.133056 ], [ 91.810556, 23.126389 ], [ 91.812222, 23.120278 ], [ 91.813056, 23.113333 ], [ 91.815278, 23.108333 ], [ 91.818333, 23.103611 ], [ 91.820556, 23.097778 ], [ 91.819722, 23.092222 ], [ 91.818333, 23.087222 ], [ 91.815833, 23.082778 ], [ 91.813333, 23.078333 ], [ 91.81, 23.074444 ], [ 91.806111, 23.071111 ], [ 91.801111, 23.07 ], [ 91.795, 23.070556 ], [ 91.788889, 23.071389 ], [ 91.783056, 23.069167 ], [ 91.78, 23.065278 ], [ 91.779167, 23.059722 ], [ 91.78, 23.053056 ], [ 91.781667, 23.046944 ], [ 91.781667, 23.040833 ], [ 91.778611, 23.036944 ], [ 91.773611, 23.034167 ], [ 91.768611, 23.031667 ], [ 91.763056, 23.029444 ], [ 91.758056, 23.026944 ], [ 91.753889, 23.023611 ], [ 91.75, 23.020556 ], [ 91.746667, 23.016667 ], [ 91.743333, 23.012778 ], [ 91.740278, 23.008889 ], [ 91.736389, 23.005 ], [ 91.733056, 23.001111 ], [ 91.728889, 22.998056 ], [ 91.725, 22.994722 ], [ 91.72, 22.992222 ], [ 91.7186824, 22.9917201 ], [ 91.714167, 22.99 ], [ 91.708333, 22.990833 ], [ 91.702222, 22.991389 ], [ 91.696111, 22.991944 ], [ 91.689444, 22.990556 ], [ 91.685278, 22.9875 ], [ 91.681389, 22.984167 ], [ 91.676389, 22.981667 ], [ 91.669722, 22.981389 ], [ 91.664167, 22.982778 ], [ 91.659444, 22.985 ], [ 91.653889, 22.986389 ], [ 91.647222, 22.986389 ], [ 91.6425, 22.983889 ], [ 91.639167, 22.98 ], [ 91.636667, 22.975556 ], [ 91.635278, 22.970556 ], [ 91.632778, 22.966111 ], [ 91.630556, 22.961667 ], [ 91.627222, 22.957778 ], [ 91.623056, 22.954444 ], [ 91.62, 22.950833 ], [ 91.619167, 22.945278 ], [ 91.613611, 22.943056 ], [ 91.609444, 22.946111 ], [ 91.605833, 22.949722 ], [ 91.602222, 22.953611 ], [ 91.600556, 22.959444 ], [ 91.602222, 22.964444 ], [ 91.604722, 22.968889 ], [ 91.601667, 22.973611 ], [ 91.596389, 22.975 ], [ 91.589746510886158, 22.974734109147064 ], [ 91.5900069, 22.9762712 ], [ 91.5887636, 22.975488 ], [ 91.5886304, 22.974972 ], [ 91.588282874437482, 22.974888017267126 ], [ 91.583611, 22.975556 ], [ 91.5775, 22.976111 ], [ 91.571944, 22.9775 ], [ 91.567778, 22.980556 ], [ 91.563611, 22.983611 ], [ 91.56, 22.987222 ], [ 91.556667, 22.991111 ], [ 91.553056, 22.994722 ], [ 91.549444, 22.998333 ], [ 91.546667, 23.003056 ], [ 91.545, 23.008889 ], [ 91.542778, 23.014167 ], [ 91.541111, 23.020278 ], [ 91.540278, 23.026944 ], [ 91.541944, 23.032222 ], [ 91.543333, 23.037222 ], [ 91.5425, 23.0425 ], [ 91.537778, 23.044722 ], [ 91.532222, 23.046111 ], [ 91.528056, 23.049167 ], [ 91.524722, 23.052778 ], [ 91.521111, 23.056667 ], [ 91.5175, 23.060278 ], [ 91.5175, 23.066667 ], [ 91.52, 23.071111 ], [ 91.523056, 23.074722 ], [ 91.526389, 23.078611 ], [ 91.524167, 23.083889 ], [ 91.521111, 23.088333 ], [ 91.518333, 23.092778 ], [ 91.516111, 23.098333 ], [ 91.513333, 23.102778 ], [ 91.510833, 23.108056 ], [ 91.508611, 23.113333 ], [ 91.505833, 23.117778 ], [ 91.504167, 23.123889 ], [ 91.503333, 23.130556 ], [ 91.504167, 23.136111 ], [ 91.5025, 23.142222 ], [ 91.500278, 23.1475 ], [ 91.497222, 23.151944 ], [ 91.494444, 23.156389 ], [ 91.492778, 23.1625 ], [ 91.491944, 23.169444 ], [ 91.4925, 23.175 ], [ 91.493333, 23.180556 ], [ 91.493333, 23.186667 ], [ 91.488333, 23.188889 ], [ 91.482222, 23.189722 ], [ 91.4775, 23.191667 ], [ 91.4725, 23.193889 ], [ 91.469722, 23.197778 ], [ 91.471389, 23.202778 ], [ 91.473889, 23.207222 ], [ 91.476111, 23.211667 ], [ 91.476111, 23.218056 ], [ 91.473056, 23.2225 ], [ 91.468889, 23.225278 ], [ 91.464722, 23.228333 ], [ 91.460833, 23.225 ], [ 91.461389, 23.219722 ], [ 91.456111, 23.221111 ], [ 91.4525, 23.224722 ], [ 91.453333, 23.230556 ], [ 91.455556, 23.235 ], [ 91.454167, 23.239444 ], [ 91.450556, 23.243333 ], [ 91.447222, 23.246944 ], [ 91.443056, 23.25 ], [ 91.438889, 23.253056 ], [ 91.434722, 23.255833 ], [ 91.430556, 23.258889 ], [ 91.426111, 23.261944 ], [ 91.421389, 23.264167 ], [ 91.416667, 23.266111 ], [ 91.410556, 23.266944 ], [ 91.404444, 23.2675 ], [ 91.396944, 23.266667 ], [ 91.392778, 23.263333 ], [ 91.392222, 23.257778 ], [ 91.391389, 23.252222 ], [ 91.39, 23.247222 ], [ 91.3875, 23.242778 ], [ 91.385, 23.238333 ], [ 91.382778, 23.233889 ], [ 91.381111, 23.228889 ], [ 91.379722, 23.223889 ], [ 91.378889, 23.218056 ], [ 91.378056, 23.2125 ], [ 91.3775, 23.206944 ], [ 91.378333, 23.2 ], [ 91.379167, 23.194722 ], [ 91.380278, 23.187778 ], [ 91.381111, 23.181111 ], [ 91.382778, 23.175 ], [ 91.383611, 23.168333 ], [ 91.384722, 23.161389 ], [ 91.386389, 23.155278 ], [ 91.387222, 23.148611 ], [ 91.388889, 23.1425 ], [ 91.389722, 23.135833 ], [ 91.391389, 23.129722 ], [ 91.393611, 23.124444 ], [ 91.395833, 23.119167 ], [ 91.3975, 23.113056 ], [ 91.399722, 23.108056 ], [ 91.401944, 23.1025 ], [ 91.404167, 23.0975 ], [ 91.405833, 23.091389 ], [ 91.405833, 23.085278 ], [ 91.405278, 23.079444 ], [ 91.403611, 23.074444 ], [ 91.402222, 23.069444 ], [ 91.398056, 23.066111 ], [ 91.392222, 23.064167 ], [ 91.385556, 23.064167 ], [ 91.379444, 23.064722 ], [ 91.374722, 23.066944 ], [ 91.3800444, 23.0669579 ], [ 91.3761742, 23.0683555 ], [ 91.3706599, 23.071454 ], [ 91.368814, 23.0743809 ], [ 91.3653423, 23.0796148 ], [ 91.3629382, 23.0827778 ], [ 91.3598417, 23.0872875 ], [ 91.3566254, 23.0922058 ], [ 91.352695, 23.0980974 ], [ 91.3483684, 23.1028705 ], [ 91.3484589, 23.1048326 ], [ 91.3487866, 23.114882 ], [ 91.3491585, 23.1196938 ], [ 91.3434876, 23.1194679 ], [ 91.3421522, 23.1220721 ], [ 91.3399281, 23.1275427 ], [ 91.3373801, 23.1344648 ], [ 91.3357569, 23.1425404 ], [ 91.3351101, 23.1490575 ], [ 91.3344175, 23.1554245 ], [ 91.3304747, 23.1573964 ], [ 91.3259017, 23.166667 ], [ 91.3260381, 23.1733092 ], [ 91.3257293, 23.1800668 ], [ 91.3256063, 23.1863311 ], [ 91.3255321, 23.1903987 ], [ 91.3251761, 23.1979461 ], [ 91.3253279, 23.2047941 ], [ 91.3252365, 23.2100603 ], [ 91.3253563, 23.2160463 ], [ 91.3252211, 23.223532 ], [ 91.324979, 23.2316832 ], [ 91.3249995, 23.2381075 ], [ 91.3205834, 23.2405137 ], [ 91.3200807, 23.2443464 ], [ 91.3257308, 23.2458615 ], [ 91.3274944, 23.2529737 ], [ 91.3189892, 23.2549715 ], [ 91.3153834, 23.2648107 ], [ 91.3129286, 23.2717604 ], [ 91.3113961, 23.2758468 ], [ 91.306111, 23.274444 ], [ 91.303889, 23.279722 ], [ 91.301667, 23.285 ], [ 91.3, 23.291111 ], [ 91.3, 23.297222 ], [ 91.301389, 23.302222 ], [ 91.302222, 23.308056 ], [ 91.302778, 23.313611 ], [ 91.300556, 23.318889 ], [ 91.297222, 23.3225 ], [ 91.293056, 23.325556 ], [ 91.288611, 23.328333 ], [ 91.289444, 23.334167 ], [ 91.292778, 23.338056 ], [ 91.295833, 23.341667 ], [ 91.3, 23.345 ], [ 91.304167, 23.348333 ], [ 91.307222, 23.352222 ], [ 91.311389, 23.355278 ], [ 91.314444, 23.359167 ], [ 91.314722, 23.364167 ], [ 91.310278, 23.366944 ], [ 91.305, 23.368333 ], [ 91.298889, 23.369167 ], [ 91.292778, 23.369722 ], [ 91.286667, 23.370556 ], [ 91.282222, 23.373333 ], [ 91.28, 23.378611 ], [ 91.280833, 23.384444 ], [ 91.282222, 23.389444 ], [ 91.2825, 23.394167 ], [ 91.278889, 23.397778 ], [ 91.275278, 23.401667 ], [ 91.271667, 23.405278 ], [ 91.269444, 23.410556 ], [ 91.266667, 23.415 ], [ 91.264444, 23.420278 ], [ 91.262778, 23.426389 ], [ 91.264167, 23.431389 ], [ 91.262778, 23.4375 ], [ 91.259167, 23.441111 ], [ 91.256944, 23.446389 ], [ 91.254722, 23.451667 ], [ 91.253611, 23.458611 ], [ 91.253611, 23.464722 ], [ 91.253333, 23.470833 ], [ 91.251111, 23.476389 ], [ 91.248889, 23.481389 ], [ 91.245278, 23.485278 ], [ 91.240556, 23.4875 ], [ 91.235556, 23.489722 ], [ 91.2341804, 23.4934199 ], [ 91.231689, 23.4960873 ], [ 91.2317277, 23.4979198 ], [ 91.218056, 23.501389 ], [ 91.213889, 23.504444 ], [ 91.210278, 23.508056 ], [ 91.2075, 23.5125 ], [ 91.205278, 23.517778 ], [ 91.205833, 23.523333 ], [ 91.206667, 23.529167 ], [ 91.206389, 23.535278 ], [ 91.208056, 23.540278 ], [ 91.207778, 23.546667 ], [ 91.206111, 23.5525 ], [ 91.203333, 23.556944 ], [ 91.199722, 23.560833 ], [ 91.196111, 23.564444 ], [ 91.193333, 23.569167 ], [ 91.190278, 23.573611 ], [ 91.186667, 23.577222 ], [ 91.184444, 23.5825 ], [ 91.182222, 23.587778 ], [ 91.18, 23.593056 ], [ 91.177778, 23.598333 ], [ 91.174722, 23.602778 ], [ 91.171944, 23.607222 ], [ 91.169722, 23.6125 ], [ 91.166667, 23.616944 ], [ 91.164444, 23.6225 ], [ 91.162778, 23.628333 ], [ 91.161111, 23.634444 ], [ 91.159444, 23.640556 ], [ 91.159444, 23.646667 ], [ 91.159167, 23.653056 ], [ 91.160833, 23.658056 ], [ 91.162222, 23.663056 ], [ 91.166389, 23.666389 ], [ 91.173333, 23.666389 ], [ 91.176667, 23.662778 ], [ 91.179722, 23.658056 ], [ 91.184722, 23.656111 ], [ 91.19, 23.654444 ], [ 91.193333, 23.658333 ], [ 91.196389, 23.662222 ], [ 91.198056, 23.667222 ], [ 91.199722, 23.672222 ], [ 91.200278, 23.678056 ], [ 91.198611, 23.683889 ], [ 91.195833, 23.688611 ], [ 91.191667, 23.691389 ], [ 91.186667, 23.693611 ], [ 91.181111, 23.695 ], [ 91.174444, 23.695 ], [ 91.167778, 23.694722 ], [ 91.162778, 23.696944 ], [ 91.159167, 23.700833 ], [ 91.1575, 23.706667 ], [ 91.156667, 23.713611 ], [ 91.156389, 23.719722 ], [ 91.157222, 23.725556 ], [ 91.156944, 23.731667 ], [ 91.158611, 23.736667 ], [ 91.161111, 23.741111 ], [ 91.164167, 23.745 ], [ 91.168333, 23.748333 ], [ 91.173333, 23.750833 ], [ 91.18, 23.751111 ], [ 91.186667, 23.751111 ], [ 91.193056, 23.750556 ], [ 91.199167, 23.749722 ], [ 91.206667, 23.750833 ], [ 91.212222, 23.752778 ], [ 91.216389, 23.756111 ], [ 91.219722, 23.76 ], [ 91.222778, 23.763889 ], [ 91.224444, 23.768889 ], [ 91.225833, 23.773889 ], [ 91.2275, 23.778889 ], [ 91.23, 23.783333 ], [ 91.231389, 23.788333 ], [ 91.232222, 23.794167 ], [ 91.233611, 23.799167 ], [ 91.235278, 23.804167 ], [ 91.2344333, 23.8107603 ], [ 91.2381637, 23.8129875 ], [ 91.2416481, 23.8189392 ], [ 91.2445706, 23.823329 ], [ 91.2478762, 23.8295301 ], [ 91.2499859, 23.8316462 ], [ 91.2508831, 23.8328173 ], [ 91.253896, 23.8369639 ], [ 91.2540794, 23.8374098 ], [ 91.2540696, 23.8379589 ], [ 91.2528103, 23.8404707 ], [ 91.252778, 23.840833 ], [ 91.2507993, 23.8462952 ], [ 91.2495123, 23.8513238 ], [ 91.2457012, 23.8562603 ], [ 91.2475296, 23.8618238 ], [ 91.2454752, 23.8621596 ], [ 91.2423214, 23.8605895 ], [ 91.2397012, 23.8662805 ], [ 91.2389242, 23.8718762 ], [ 91.2344084, 23.8781125 ], [ 91.2318775, 23.879576 ], [ 91.2297933, 23.8810977 ], [ 91.2290519, 23.8964243 ], [ 91.237222, 23.902222 ], [ 91.237778, 23.907778 ], [ 91.241111, 23.911667 ], [ 91.244444, 23.915556 ], [ 91.245833, 23.920556 ], [ 91.2475, 23.925556 ], [ 91.249722, 23.93 ], [ 91.254722, 23.9325 ], [ 91.259722, 23.935278 ], [ 91.262778, 23.939167 ], [ 91.264444, 23.944167 ], [ 91.265278, 23.949722 ], [ 91.265833, 23.955556 ], [ 91.265833, 23.961667 ], [ 91.2677592, 23.966356 ], [ 91.2706645, 23.9707434 ], [ 91.273889, 23.974444 ], [ 91.281389, 23.975278 ], [ 91.286111, 23.978056 ], [ 91.288611, 23.9825 ], [ 91.291111, 23.986944 ], [ 91.295, 23.99 ], [ 91.298333, 23.993889 ], [ 91.303333, 23.996667 ], [ 91.309167, 23.998611 ], [ 91.316389, 23.999722 ], [ 91.323333, 23.999722 ], [ 91.328889, 23.998333 ], [ 91.333056, 23.995278 ], [ 91.338611, 23.993889 ], [ 91.344167, 23.9925 ], [ 91.349722, 23.991111 ], [ 91.356111, 23.9925 ], [ 91.361111, 23.995278 ], [ 91.363611, 23.999722 ], [ 91.366944, 24.003611 ], [ 91.368333, 24.008611 ], [ 91.37, 24.013611 ], [ 91.371389, 24.018611 ], [ 91.373056, 24.023611 ], [ 91.374722, 24.028611 ], [ 91.376111, 24.033889 ], [ 91.376944, 24.039444 ], [ 91.378611, 24.044444 ], [ 91.379167, 24.05 ], [ 91.379167, 24.056389 ], [ 91.379722, 24.061944 ], [ 91.378056, 24.068056 ], [ 91.376667, 24.074167 ], [ 91.375, 24.08 ], [ 91.372778, 24.085278 ], [ 91.371111, 24.091389 ], [ 91.370833, 24.097778 ], [ 91.373333, 24.101944 ], [ 91.378333, 24.104722 ], [ 91.384167, 24.106944 ], [ 91.390833, 24.108333 ], [ 91.397222, 24.109722 ], [ 91.404722, 24.110556 ], [ 91.411667, 24.110833 ], [ 91.417778, 24.11 ], [ 91.423333, 24.108611 ], [ 91.429444, 24.108056 ], [ 91.434444, 24.105833 ], [ 91.44, 24.104444 ], [ 91.444722, 24.102222 ], [ 91.450278, 24.100833 ], [ 91.455, 24.098611 ], [ 91.46, 24.096389 ], [ 91.465556, 24.095 ], [ 91.470556, 24.092778 ], [ 91.475833, 24.091111 ], [ 91.482222, 24.090556 ], [ 91.489444, 24.091389 ], [ 91.495833, 24.090833 ], [ 91.501944, 24.090278 ], [ 91.508056, 24.089444 ], [ 91.514167, 24.088889 ], [ 91.520556, 24.088333 ], [ 91.527222, 24.088333 ], [ 91.533333, 24.0875 ], [ 91.539722, 24.086944 ], [ 91.546389, 24.086944 ], [ 91.553889, 24.088056 ], [ 91.561389, 24.088889 ], [ 91.568056, 24.090278 ], [ 91.573889, 24.092222 ], [ 91.580278, 24.093889 ], [ 91.586944, 24.095278 ], [ 91.593611, 24.096667 ], [ 91.599444, 24.098889 ], [ 91.605278, 24.100833 ], [ 91.611944, 24.102222 ], [ 91.616944, 24.105 ], [ 91.6225, 24.106944 ], [ 91.6275, 24.109722 ], [ 91.631667, 24.113056 ], [ 91.634167, 24.1175 ], [ 91.635556, 24.1225 ], [ 91.637222, 24.1275 ], [ 91.638889, 24.1325 ], [ 91.638611, 24.138611 ], [ 91.638611, 24.145 ], [ 91.639444, 24.150556 ], [ 91.64, 24.156111 ], [ 91.641667, 24.161389 ], [ 91.643333, 24.166389 ], [ 91.645556, 24.170833 ], [ 91.647222, 24.175833 ], [ 91.649722, 24.180278 ], [ 91.650556, 24.185833 ], [ 91.651111, 24.191389 ], [ 91.651111, 24.197778 ], [ 91.650833, 24.203889 ], [ 91.650833, 24.210278 ], [ 91.651667, 24.215833 ], [ 91.653889, 24.220278 ], [ 91.657222, 24.224167 ], [ 91.662778, 24.2225 ], [ 91.665833, 24.218056 ], [ 91.668056, 24.212778 ], [ 91.670278, 24.2075 ], [ 91.671944, 24.201389 ], [ 91.673333, 24.195278 ], [ 91.675, 24.189444 ], [ 91.676667, 24.183333 ], [ 91.678889, 24.178056 ], [ 91.681111, 24.172778 ], [ 91.684722, 24.168889 ], [ 91.6875, 24.164444 ], [ 91.691111, 24.160833 ], [ 91.694722, 24.156944 ], [ 91.698889, 24.153889 ], [ 91.703889, 24.151667 ], [ 91.709444, 24.150278 ], [ 91.714722, 24.148889 ], [ 91.721111, 24.148056 ], [ 91.727222, 24.1475 ], [ 91.734722, 24.148333 ], [ 91.740556, 24.150556 ], [ 91.746389, 24.1525 ], [ 91.751944, 24.154444 ], [ 91.755278, 24.158333 ], [ 91.757778, 24.162778 ], [ 91.7575, 24.169167 ], [ 91.756667, 24.175833 ], [ 91.755, 24.181944 ], [ 91.754167, 24.188889 ], [ 91.753333, 24.195556 ], [ 91.752222, 24.2025 ], [ 91.751389, 24.209167 ], [ 91.749722, 24.215278 ], [ 91.748056, 24.221389 ], [ 91.748056, 24.2275 ], [ 91.748889, 24.233333 ], [ 91.753056, 24.236389 ], [ 91.757778, 24.239167 ], [ 91.764167, 24.238333 ], [ 91.769722, 24.236944 ], [ 91.774444, 24.234722 ], [ 91.779444, 24.2325 ], [ 91.784167, 24.230278 ], [ 91.789167, 24.228056 ], [ 91.793333, 24.225 ], [ 91.798889, 24.223611 ], [ 91.804167, 24.222222 ], [ 91.811667, 24.223056 ], [ 91.819167, 24.223889 ], [ 91.825, 24.226111 ], [ 91.831944, 24.226111 ], [ 91.833889, 24.222222 ], [ 91.834167, 24.215833 ], [ 91.833333, 24.210278 ], [ 91.8325, 24.204722 ], [ 91.833611, 24.197778 ], [ 91.835833, 24.1925 ], [ 91.838611, 24.188056 ], [ 91.842222, 24.184167 ], [ 91.846389, 24.181389 ], [ 91.851389, 24.179167 ], [ 91.856111, 24.176944 ], [ 91.860278, 24.173889 ], [ 91.863889, 24.17 ], [ 91.866111, 24.164722 ], [ 91.869167, 24.160278 ], [ 91.871944, 24.155833 ], [ 91.875556, 24.151944 ], [ 91.880278, 24.149722 ], [ 91.885833, 24.148333 ], [ 91.8925, 24.149722 ], [ 91.896667, 24.153056 ], [ 91.9, 24.156944 ], [ 91.901389, 24.161944 ], [ 91.903056, 24.166944 ], [ 91.904722, 24.171944 ], [ 91.906389, 24.176944 ], [ 91.907778, 24.181944 ], [ 91.909444, 24.186944 ], [ 91.910278, 24.192778 ], [ 91.911944, 24.197778 ], [ 91.913333, 24.202778 ], [ 91.914167, 24.208333 ], [ 91.915, 24.214167 ], [ 91.916389, 24.219167 ], [ 91.917222, 24.224722 ], [ 91.918889, 24.229722 ], [ 91.920556, 24.234722 ], [ 91.921944, 24.239722 ], [ 91.922778, 24.245556 ], [ 91.924444, 24.250556 ], [ 91.926944, 24.255 ], [ 91.928333, 24.26 ], [ 91.93, 24.265 ], [ 91.931667, 24.27 ], [ 91.9325, 24.275556 ], [ 91.932222, 24.281944 ], [ 91.931389, 24.288611 ], [ 91.929722, 24.294722 ], [ 91.9275, 24.3 ], [ 91.925278, 24.305278 ], [ 91.9225, 24.31 ], [ 91.920278, 24.315278 ], [ 91.918056, 24.320556 ], [ 91.917778, 24.326667 ], [ 91.920278, 24.331111 ], [ 91.923611, 24.335 ], [ 91.927778, 24.338333 ], [ 91.931944, 24.341389 ], [ 91.935833, 24.344722 ], [ 91.940833, 24.347222 ], [ 91.946667, 24.349444 ], [ 91.948333, 24.349722 ], [ 91.953611, 24.348056 ], [ 91.957222, 24.344444 ], [ 91.960833, 24.340556 ], [ 91.963889, 24.336111 ], [ 91.966667, 24.331389 ], [ 91.970278, 24.327778 ], [ 91.973056, 24.323333 ], [ 91.9775, 24.319444 ], [ 91.982778, 24.318056 ], [ 91.989444, 24.319444 ], [ 91.992906, 24.3223934 ], [ 91.99596, 24.3222563 ], [ 91.9960544, 24.3241055 ], [ 91.9962266, 24.324348 ], [ 91.997778, 24.332222 ], [ 91.995, 24.336944 ], [ 91.991944, 24.341389 ], [ 91.988333, 24.345 ], [ 91.985, 24.348889 ], [ 91.980556, 24.351944 ], [ 91.977222, 24.355556 ], [ 91.974167, 24.36 ], [ 91.9725, 24.361944 ], [ 91.969444, 24.366667 ], [ 91.967222, 24.371944 ], [ 91.970556, 24.375556 ], [ 91.974722, 24.378889 ], [ 91.982222, 24.379722 ], [ 91.989167, 24.379722 ], [ 91.995833, 24.38 ], [ 92.002222, 24.379167 ], [ 92.008333, 24.378611 ], [ 92.014444, 24.377778 ], [ 92.021389, 24.377778 ], [ 92.0275, 24.377222 ], [ 92.033611, 24.376667 ], [ 92.039722, 24.375833 ], [ 92.046111, 24.375 ], [ 92.053611, 24.376111 ], [ 92.060278, 24.376111 ], [ 92.067222, 24.376111 ], [ 92.073333, 24.375556 ], [ 92.079444, 24.374722 ], [ 92.082423, 24.374722 ], [ 92.086389, 24.374722 ], [ 92.092222, 24.376944 ], [ 92.098056, 24.378889 ], [ 92.103056, 24.381389 ], [ 92.108056, 24.384167 ], [ 92.113056, 24.386667 ], [ 92.117222, 24.39 ], [ 92.121389, 24.393333 ], [ 92.124444, 24.396944 ], [ 92.126944, 24.401389 ], [ 92.130278, 24.405278 ], [ 92.132778, 24.409722 ], [ 92.135278, 24.414167 ], [ 92.135833, 24.419722 ], [ 92.136667, 24.425556 ], [ 92.136667, 24.431667 ], [ 92.1375, 24.437222 ], [ 92.136667, 24.444167 ], [ 92.135556, 24.451111 ], [ 92.134722, 24.457778 ], [ 92.133056, 24.463889 ], [ 92.132222, 24.470833 ], [ 92.131389, 24.4775 ], [ 92.130278, 24.484444 ], [ 92.130278, 24.490556 ], [ 92.130278, 24.496944 ], [ 92.131111, 24.5025 ], [ 92.131667, 24.508056 ], [ 92.1325, 24.513889 ], [ 92.135, 24.518333 ], [ 92.1375, 24.522778 ], [ 92.140833, 24.526667 ], [ 92.145, 24.529722 ], [ 92.148889, 24.533056 ], [ 92.153056, 24.536111 ], [ 92.158889, 24.538333 ], [ 92.163889, 24.540833 ], [ 92.168889, 24.543611 ], [ 92.173889, 24.546111 ], [ 92.178056, 24.549444 ], [ 92.182222, 24.5525 ], [ 92.185556, 24.556389 ], [ 92.188056, 24.560833 ], [ 92.191111, 24.565278 ], [ 92.192778, 24.570556 ], [ 92.194444, 24.575556 ], [ 92.195278, 24.581944 ], [ 92.195833, 24.5875 ], [ 92.196667, 24.593056 ], [ 92.196667, 24.599167 ], [ 92.1975, 24.605 ], [ 92.198056, 24.610556 ], [ 92.198889, 24.616111 ], [ 92.199722, 24.621944 ], [ 92.201389, 24.626944 ], [ 92.201944, 24.6325 ], [ 92.203611, 24.6375 ], [ 92.206111, 24.641944 ], [ 92.207778, 24.646944 ], [ 92.209444, 24.652222 ], [ 92.211111, 24.657222 ], [ 92.213611, 24.661667 ], [ 92.215833, 24.665833 ], [ 92.2175, 24.671111 ], [ 92.22, 24.676111 ], [ 92.221667, 24.681111 ], [ 92.224167, 24.685556 ], [ 92.225556, 24.690556 ], [ 92.228056, 24.695 ], [ 92.229722, 24.7 ], [ 92.232222, 24.704444 ], [ 92.234722, 24.708889 ], [ 92.236389, 24.713889 ], [ 92.238611, 24.718333 ], [ 92.241111, 24.722778 ], [ 92.242778, 24.728056 ], [ 92.245278, 24.732222 ], [ 92.246944, 24.7375 ], [ 92.248611, 24.7425 ], [ 92.249444, 24.748056 ], [ 92.251111, 24.753056 ], [ 92.2525, 24.758056 ], [ 92.253333, 24.763889 ], [ 92.255, 24.768889 ], [ 92.256667, 24.773889 ], [ 92.2575, 24.779444 ], [ 92.258889, 24.784444 ], [ 92.259722, 24.790278 ], [ 92.261389, 24.795278 ], [ 92.262222, 24.800833 ], [ 92.263056, 24.806389 ], [ 92.263889, 24.812222 ], [ 92.263611, 24.818333 ], [ 92.262222, 24.824444 ], [ 92.26, 24.829722 ], [ 92.256389, 24.833611 ], [ 92.253333, 24.838056 ], [ 92.250556, 24.8425 ], [ 92.248889, 24.848611 ], [ 92.2475, 24.854722 ], [ 92.245833, 24.860833 ], [ 92.245833, 24.867222 ], [ 92.245556, 24.873333 ], [ 92.245556, 24.879444 ], [ 92.244722, 24.886389 ], [ 92.245556, 24.891944 ], [ 92.248056, 24.896389 ], [ 92.251389, 24.900278 ], [ 92.255278, 24.903611 ], [ 92.262222, 24.905 ], [ 92.268889, 24.906389 ], [ 92.275556, 24.907778 ], [ 92.281667, 24.907222 ], [ 92.287222, 24.905556 ], [ 92.293611, 24.905 ], [ 92.297778, 24.901944 ], [ 92.301944, 24.898889 ], [ 92.306111, 24.895833 ], [ 92.311667, 24.894444 ], [ 92.317222, 24.893056 ], [ 92.322222, 24.890833 ], [ 92.327222, 24.888611 ], [ 92.331944, 24.886111 ], [ 92.3375, 24.884722 ], [ 92.3425, 24.8825 ], [ 92.346667, 24.879444 ], [ 92.350833, 24.876389 ], [ 92.354444, 24.872778 ], [ 92.359444, 24.870556 ], [ 92.364722, 24.868889 ], [ 92.369167, 24.865833 ], [ 92.373333, 24.863056 ], [ 92.378056, 24.860833 ], [ 92.383056, 24.858611 ], [ 92.389444, 24.857778 ], [ 92.396944, 24.858611 ], [ 92.403611, 24.86 ], [ 92.409444, 24.861944 ], [ 92.416111, 24.863333 ], [ 92.423056, 24.863611 ], [ 92.429167, 24.862778 ], [ 92.436667, 24.863611 ], [ 92.443333, 24.865 ], [ 92.4475, 24.868889 ], [ 92.450833, 24.872778 ], [ 92.455, 24.875833 ], [ 92.4625, 24.876667 ], [ 92.468056, 24.875278 ], [ 92.473056, 24.873056 ], [ 92.478611, 24.871667 ], [ 92.483611, 24.874167 ], [ 92.487865, 24.8769419 ], [ 92.493119, 24.879781 ], [ 92.4949018, 24.8847478 ], [ 92.496944, 24.889444 ], [ 92.495278, 24.89 ], [ 92.493056, 24.895278 ], [ 92.4978856, 24.9025787 ], [ 92.4985051, 24.9063919 ], [ 92.4931885, 24.9116239 ], [ 92.4948584, 24.9178322 ], [ 92.488889, 24.921944 ], [ 92.486363, 24.9244665 ], [ 92.4857231, 24.927222 ], [ 92.484444, 24.9325 ], [ 92.4885471, 24.9450678 ], [ 92.4880149, 24.9484327 ], [ 92.4822727, 24.9477195 ], [ 92.477458, 24.9432023 ], [ 92.471667, 24.941667 ], [ 92.466111, 24.9423428 ], [ 92.4605506, 24.941464 ], [ 92.4514872, 24.9395153 ], [ 92.4480552, 24.9419423 ], [ 92.449444, 24.9475 ], [ 92.451111, 24.9525 ], [ 92.4553093, 24.9546774 ], [ 92.4632367, 24.9551367 ], [ 92.4712603, 24.9609756 ], [ 92.4596259, 24.9704268 ], [ 92.454348, 24.9701837 ], [ 92.447778, 24.966111 ], [ 92.440833, 24.966111 ], [ 92.434167, 24.966111 ], [ 92.427222, 24.966111 ], [ 92.422778, 24.968889 ], [ 92.419444, 24.972778 ], [ 92.416389, 24.9775 ], [ 92.414167, 24.982778 ], [ 92.413333, 24.989444 ], [ 92.4125, 24.996389 ], [ 92.411667, 25.001944 ], [ 92.411667, 25.008056 ], [ 92.4125, 25.013611 ], [ 92.411389, 25.020556 ], [ 92.4095396, 25.0249482 ], [ 92.409167, 25.025833 ], [ 92.406389, 25.030556 ], [ 92.402222, 25.033333 ], [ 92.397222, 25.035833 ], [ 92.391667, 25.037222 ], [ 92.386944, 25.039444 ], [ 92.381944, 25.041667 ], [ 92.376944, 25.043889 ], [ 92.372222, 25.046111 ], [ 92.366667, 25.0475 ], [ 92.360278, 25.048333 ], [ 92.354167, 25.049167 ], [ 92.347778, 25.049722 ], [ 92.342222, 25.051389 ], [ 92.338056, 25.054444 ], [ 92.336667, 25.058889 ], [ 92.336667, 25.065278 ], [ 92.3375, 25.070833 ], [ 92.336667, 25.076389 ], [ 92.3325, 25.079444 ], [ 92.326944, 25.080833 ], [ 92.32, 25.080833 ], [ 92.3125, 25.08 ], [ 92.306111, 25.080833 ], [ 92.3, 25.081389 ], [ 92.293611, 25.082222 ], [ 92.2875, 25.082778 ], [ 92.281944, 25.084167 ], [ 92.276389, 25.085833 ], [ 92.27, 25.086389 ], [ 92.264722, 25.088056 ], [ 92.258333, 25.088611 ], [ 92.252778, 25.090278 ], [ 92.247222, 25.091667 ], [ 92.241667, 25.093056 ], [ 92.236667, 25.095278 ], [ 92.2325, 25.098333 ], [ 92.228333, 25.101389 ], [ 92.224722, 25.105 ], [ 92.221667, 25.109722 ], [ 92.218889, 25.114167 ], [ 92.216667, 25.119444 ], [ 92.213611, 25.124167 ], [ 92.21, 25.127778 ], [ 92.206667, 25.131667 ], [ 92.202222, 25.134722 ], [ 92.1975, 25.136944 ], [ 92.193056, 25.14 ], [ 92.186944, 25.140556 ], [ 92.181944, 25.138056 ], [ 92.178611, 25.134167 ], [ 92.172222, 25.134722 ], [ 92.168611, 25.138611 ], [ 92.165278, 25.1425 ], [ 92.158889, 25.143056 ], [ 92.152222, 25.141667 ], [ 92.146111, 25.142222 ], [ 92.141111, 25.144444 ], [ 92.138056, 25.149167 ], [ 92.135833, 25.154444 ], [ 92.133056, 25.158889 ], [ 92.128611, 25.162778 ], [ 92.124444, 25.165556 ], [ 92.120278, 25.168611 ], [ 92.115278, 25.170833 ], [ 92.109722, 25.1725 ], [ 92.104167, 25.173889 ], [ 92.098611, 25.175278 ], [ 92.093611, 25.1775 ], [ 92.0875, 25.178333 ], [ 92.081944, 25.179722 ], [ 92.075556, 25.180556 ], [ 92.069444, 25.181111 ], [ 92.063611, 25.1825 ], [ 92.058056, 25.184167 ], [ 92.0525, 25.185556 ], [ 92.046944, 25.186944 ], [ 92.040833, 25.187778 ], [ 92.034444, 25.188333 ], [ 92.0319951, 25.1837836 ], [ 92.0318403, 25.183496 ], [ 92.0213461, 25.1833219 ], [ 92.0159277, 25.1836337 ], [ 92.0132365, 25.1837885 ], [ 92.0084812, 25.1826908 ], [ 92.003056, 25.181944 ], [ 91.998056, 25.179444 ], [ 91.992222, 25.1775 ], [ 91.986389, 25.175278 ], [ 91.979722, 25.173889 ], [ 91.972778, 25.173889 ], [ 91.966389, 25.174444 ], [ 91.961667, 25.176667 ], [ 91.955278, 25.1775 ], [ 91.950556, 25.179722 ], [ 91.945, 25.181111 ], [ 91.939167, 25.1825 ], [ 91.933056, 25.183333 ], [ 91.925556, 25.1825 ], [ 91.918056, 25.181667 ], [ 91.911944, 25.179444 ], [ 91.905278, 25.178056 ], [ 91.899444, 25.176111 ], [ 91.891944, 25.175278 ], [ 91.885, 25.174444 ], [ 91.8775, 25.173611 ], [ 91.870556, 25.173611 ], [ 91.863056, 25.1725 ], [ 91.856111, 25.1725 ], [ 91.849167, 25.1725 ], [ 91.841667, 25.171667 ], [ 91.835, 25.170278 ], [ 91.8275, 25.169167 ], [ 91.819722, 25.168333 ], [ 91.812222, 25.1675 ], [ 91.806389, 25.166944 ], [ 91.798611, 25.166111 ], [ 91.791111, 25.165278 ], [ 91.785, 25.165833 ], [ 91.778611, 25.166667 ], [ 91.773611, 25.168611 ], [ 91.768889, 25.171111 ], [ 91.763889, 25.173333 ], [ 91.7575, 25.173889 ], [ 91.7525, 25.171111 ], [ 91.749444, 25.167222 ], [ 91.748611, 25.161667 ], [ 91.748611, 25.155556 ], [ 91.746944, 25.150556 ], [ 91.741111, 25.148333 ], [ 91.735556, 25.149722 ], [ 91.731389, 25.152778 ], [ 91.727222, 25.155833 ], [ 91.722222, 25.158056 ], [ 91.717222, 25.160278 ], [ 91.711111, 25.159444 ], [ 91.706944, 25.156389 ], [ 91.703056, 25.153056 ], [ 91.699722, 25.149167 ], [ 91.697222, 25.144722 ], [ 91.697222, 25.138333 ], [ 91.694722, 25.134167 ], [ 91.688056, 25.1325 ], [ 91.681111, 25.1325 ], [ 91.674167, 25.1325 ], [ 91.6663276, 25.129784 ], [ 91.660556, 25.130833 ], [ 91.654722, 25.128611 ], [ 91.648889, 25.126667 ], [ 91.642222, 25.126667 ], [ 91.635833, 25.127222 ], [ 91.630278, 25.128611 ], [ 91.625278, 25.130833 ], [ 91.621111, 25.133889 ], [ 91.616111, 25.136111 ], [ 91.611111, 25.138333 ], [ 91.605556, 25.139722 ], [ 91.600833, 25.141944 ], [ 91.597778, 25.146667 ], [ 91.598611, 25.152222 ], [ 91.598333, 25.158333 ], [ 91.5975, 25.165278 ], [ 91.595278, 25.170556 ], [ 91.590278, 25.172778 ], [ 91.584444, 25.170833 ], [ 91.578611, 25.168611 ], [ 91.573611, 25.166111 ], [ 91.570278, 25.162222 ], [ 91.566944, 25.158333 ], [ 91.562778, 25.155 ], [ 91.558611, 25.151667 ], [ 91.553611, 25.149167 ], [ 91.546944, 25.1475 ], [ 91.54, 25.1475 ], [ 91.533056, 25.1475 ], [ 91.526111, 25.147222 ], [ 91.519444, 25.147222 ], [ 91.511667, 25.146389 ], [ 91.506667, 25.143611 ], [ 91.501667, 25.141111 ], [ 91.495833, 25.138889 ], [ 91.488333, 25.138056 ], [ 91.482222, 25.138611 ], [ 91.4661251, 25.135378 ], [ 91.470278, 25.140833 ], [ 91.465278, 25.143056 ], [ 91.4609109, 25.1519277 ], [ 91.456111, 25.148056 ], [ 91.4528642, 25.1529571 ], [ 91.444444, 25.150278 ], [ 91.4402257, 25.1509953 ], [ 91.4368354, 25.1548217 ], [ 91.4325867, 25.1578322 ], [ 91.4252911, 25.1580846 ], [ 91.4239664, 25.1627482 ], [ 91.4217779, 25.1651299 ], [ 91.4158002, 25.1718392 ], [ 91.4157465, 25.1723635 ], [ 91.4155105, 25.1726743 ], [ 91.415017, 25.1727131 ], [ 91.4141694, 25.1724704 ], [ 91.4125418, 25.1714141 ], [ 91.4103923, 25.1715556 ], [ 91.410189, 25.1710915 ], [ 91.4110258, 25.1704992 ], [ 91.4106932, 25.1693728 ], [ 91.4114657, 25.1677901 ], [ 91.4099959, 25.1651246 ], [ 91.4070682, 25.1673552 ], [ 91.3984999, 25.1663742 ], [ 91.3900147, 25.1681061 ], [ 91.3873969, 25.1701064 ], [ 91.3821612, 25.1690577 ], [ 91.3762174, 25.168611 ], [ 91.3685571, 25.17166 ], [ 91.3636003, 25.1789811 ], [ 91.3542233, 25.1732718 ], [ 91.3500176, 25.1763984 ], [ 91.3473354, 25.1751167 ], [ 91.3442026, 25.1749807 ], [ 91.3368212, 25.1742622 ], [ 91.3327013, 25.1777189 ], [ 91.3281523, 25.1763401 ], [ 91.3251482, 25.1792335 ], [ 91.3216291, 25.1829813 ], [ 91.3171445, 25.1843988 ], [ 91.3131963, 25.1849619 ], [ 91.3110076, 25.1848066 ], [ 91.3045488, 25.1833891 ], [ 91.301389, 25.187222 ], [ 91.296667, 25.189167 ], [ 91.292222, 25.192222 ], [ 91.287222, 25.194444 ], [ 91.2825, 25.196667 ], [ 91.278056, 25.199722 ], [ 91.273333, 25.201944 ], [ 91.268889, 25.204722 ], [ 91.263333, 25.206111 ], [ 91.257778, 25.207778 ], [ 91.251667, 25.206944 ], [ 91.2491411, 25.2006493 ], [ 91.2462025, 25.1990119 ], [ 91.2383501, 25.1981315 ], [ 91.2376508, 25.1995436 ], [ 91.2365599, 25.2001201 ], [ 91.2328193, 25.2000938 ], [ 91.230083, 25.1981447 ], [ 91.2261678, 25.2000806 ], [ 91.2206661, 25.2007918 ], [ 91.2110549, 25.2020103 ], [ 91.2047635, 25.2018824 ], [ 91.199939, 25.2016745 ], [ 91.1902015, 25.1983485 ], [ 91.184511, 25.197517 ], [ 91.179444, 25.195556 ], [ 91.1725, 25.195556 ], [ 91.165833, 25.195278 ], [ 91.158889, 25.195278 ], [ 91.151944, 25.195 ], [ 91.145, 25.195 ], [ 91.138056, 25.194722 ], [ 91.131111, 25.194722 ], [ 91.124167, 25.194444 ], [ 91.118056, 25.195278 ], [ 91.111944, 25.195833 ], [ 91.105556, 25.196389 ], [ 91.0990656, 25.1976428 ], [ 91.090954, 25.1979786 ], [ 91.0880014, 25.1979471 ], [ 91.0819588, 25.1978827 ], [ 91.076111, 25.193611 ], [ 91.069167, 25.192222 ], [ 91.0629787, 25.1921739 ], [ 91.0532714, 25.1932189 ], [ 91.0494542, 25.1915558 ], [ 91.0419257, 25.1894289 ], [ 91.0371896, 25.1875579 ], [ 91.0266215, 25.1870781 ], [ 91.0172375, 25.1848552 ], [ 91.0085791, 25.1838025 ], [ 90.9992834, 25.1813077 ], [ 90.9928507, 25.1789887 ], [ 90.991837, 25.178903 ], [ 90.9843137, 25.1760919 ], [ 90.973675, 25.1754682 ], [ 90.9692241, 25.1738855 ], [ 90.9662375, 25.1733417 ], [ 90.9586207, 25.169727 ], [ 90.9536018, 25.1659203 ], [ 90.9465328, 25.1639369 ], [ 90.941944, 25.158611 ], [ 90.935, 25.158611 ], [ 90.9275, 25.1575 ], [ 90.920556, 25.1575 ], [ 90.910255, 25.1659782 ], [ 90.9008886, 25.1671938 ], [ 90.8938374, 25.1678336 ], [ 90.8858495, 25.1677057 ], [ 90.8795051, 25.1647946 ], [ 90.8735318, 25.163515 ], [ 90.87, 25.150556 ], [ 90.8625, 25.149722 ], [ 90.855556, 25.149722 ], [ 90.8412445, 25.1539975 ], [ 90.8327264, 25.1543974 ], [ 90.8290682, 25.1544614 ], [ 90.8241906, 25.1544614 ], [ 90.821667, 25.149722 ], [ 90.816111, 25.151111 ], [ 90.811944, 25.153889 ], [ 90.806944, 25.156111 ], [ 90.8025, 25.159167 ], [ 90.798889, 25.162778 ], [ 90.794722, 25.165833 ], [ 90.789722, 25.168056 ], [ 90.785556, 25.171111 ], [ 90.780556, 25.173056 ], [ 90.776111, 25.176111 ], [ 90.769444, 25.175833 ], [ 90.762778, 25.174444 ], [ 90.758611, 25.171111 ], [ 90.7552128, 25.1683929 ], [ 90.754444, 25.167778 ], [ 90.750278, 25.164444 ], [ 90.746111, 25.161111 ], [ 90.741111, 25.158611 ], [ 90.733611, 25.1575 ], [ 90.726111, 25.156667 ], [ 90.719722, 25.157222 ], [ 90.714722, 25.159444 ], [ 90.71, 25.161667 ], [ 90.703056, 25.161389 ], [ 90.695556, 25.160556 ], [ 90.688889, 25.159167 ], [ 90.6834851, 25.1596364 ], [ 90.6825, 25.159722 ], [ 90.676944, 25.161111 ], [ 90.6736975, 25.1643575 ], [ 90.673333, 25.164722 ], [ 90.669722, 25.168611 ], [ 90.666111, 25.172222 ], [ 90.6625, 25.176111 ], [ 90.658056, 25.178889 ], [ 90.653056, 25.181111 ], [ 90.646111, 25.180833 ], [ 90.641111, 25.178333 ], [ 90.636389, 25.175556 ], [ 90.631389, 25.172778 ], [ 90.625556, 25.170833 ], [ 90.618889, 25.169167 ], [ 90.6171055, 25.1687389 ], [ 90.611944, 25.1675 ], [ 90.604444, 25.166667 ], [ 90.597778, 25.166667 ], [ 90.590833, 25.166389 ], [ 90.584444, 25.166944 ], [ 90.578333, 25.1675 ], [ 90.570556, 25.166667 ], [ 90.565, 25.168056 ], [ 90.558889, 25.168611 ], [ 90.553333, 25.17 ], [ 90.546944, 25.170833 ], [ 90.541389, 25.171944 ], [ 90.535833, 25.173611 ], [ 90.529444, 25.174167 ], [ 90.523333, 25.174722 ], [ 90.516667, 25.173056 ], [ 90.51, 25.171667 ], [ 90.503333, 25.17 ], [ 90.4975, 25.168056 ], [ 90.491667, 25.165833 ], [ 90.483889, 25.165 ], [ 90.476389, 25.163889 ], [ 90.469722, 25.1625 ], [ 90.464722, 25.159722 ], [ 90.460556, 25.156389 ], [ 90.456667, 25.153056 ], [ 90.450833, 25.150833 ], [ 90.444722, 25.148889 ], [ 90.438333, 25.147222 ], [ 90.431944, 25.148056 ], [ 90.425556, 25.148611 ], [ 90.418889, 25.148333 ], [ 90.4125, 25.148889 ], [ 90.406944, 25.150278 ], [ 90.400833, 25.150833 ], [ 90.395, 25.152222 ], [ 90.388889, 25.153056 ], [ 90.383333, 25.154167 ], [ 90.378333, 25.156389 ], [ 90.372778, 25.157778 ], [ 90.367778, 25.16 ], [ 90.362222, 25.161389 ], [ 90.357222, 25.163611 ], [ 90.352778, 25.166389 ], [ 90.348611, 25.169444 ], [ 90.345, 25.173056 ], [ 90.341389, 25.176944 ], [ 90.336944, 25.179722 ], [ 90.332778, 25.182778 ], [ 90.327778, 25.185 ], [ 90.322222, 25.186389 ], [ 90.317222, 25.188333 ], [ 90.311667, 25.189722 ], [ 90.305833, 25.191111 ], [ 90.300278, 25.1925 ], [ 90.294722, 25.193889 ], [ 90.289167, 25.195278 ], [ 90.282778, 25.195833 ], [ 90.279436, 25.1966685 ], [ 90.277222, 25.197222 ], [ 90.271667, 25.198611 ], [ 90.265278, 25.199167 ], [ 90.259722, 25.200556 ], [ 90.253611, 25.201111 ], [ 90.247222, 25.201944 ], [ 90.240556, 25.201667 ], [ 90.234167, 25.202222 ], [ 90.228611, 25.203611 ], [ 90.222222, 25.204167 ], [ 90.216667, 25.205556 ], [ 90.211111, 25.206944 ], [ 90.204722, 25.2075 ], [ 90.198611, 25.208056 ], [ 90.192222, 25.208889 ], [ 90.186111, 25.209444 ], [ 90.180556, 25.210833 ], [ 90.175, 25.212222 ], [ 90.169167, 25.213611 ], [ 90.163611, 25.214722 ], [ 90.1575, 25.215556 ], [ 90.151667, 25.216944 ], [ 90.145556, 25.218056 ], [ 90.139722, 25.219444 ], [ 90.133611, 25.22 ], [ 90.128056, 25.221389 ], [ 90.121667, 25.221944 ], [ 90.116111, 25.223333 ], [ 90.110556, 25.224722 ], [ 90.106111, 25.227778 ], [ 90.1025, 25.231389 ], [ 90.098056, 25.234167 ], [ 90.093889, 25.237222 ], [ 90.089444, 25.240278 ], [ 90.084722, 25.242222 ], [ 90.080278, 25.245278 ], [ 90.075278, 25.2475 ], [ 90.070278, 25.249444 ], [ 90.065278, 25.251667 ], [ 90.059722, 25.253056 ], [ 90.054722, 25.255278 ], [ 90.0508444, 25.2626018 ], [ 90.0472618, 25.2634171 ], [ 90.0447073, 25.2637247 ], [ 90.039167, 25.260833 ], [ 90.033611, 25.262222 ], [ 90.028056, 25.264167 ], [ 90.022222, 25.265556 ], [ 90.017222, 25.267778 ], [ 90.011667, 25.269167 ], [ 90.006667, 25.271389 ], [ 90.001944, 25.273611 ], [ 89.996111, 25.274722 ], [ 89.991944, 25.277778 ], [ 89.986944, 25.28 ], [ 89.9825, 25.282778 ], [ 89.978333, 25.285833 ], [ 89.974722, 25.289444 ], [ 89.970278, 25.2925 ], [ 89.966111, 25.295278 ], [ 89.960278, 25.296667 ], [ 89.954722, 25.298056 ], [ 89.949167, 25.299444 ], [ 89.943611, 25.300833 ], [ 89.937222, 25.301389 ], [ 89.931667, 25.302778 ], [ 89.927222, 25.305556 ], [ 89.922222, 25.307778 ], [ 89.917222, 25.31 ], [ 89.909722, 25.308889 ], [ 89.904153, 25.3106161 ], [ 89.9030588, 25.3085198 ], [ 89.90074, 25.3062705 ], [ 89.8975353, 25.3046335 ], [ 89.8944219, 25.3016892 ], [ 89.890833, 25.296667 ], [ 89.886944, 25.293333 ], [ 89.8840542, 25.2897757 ], [ 89.8771105, 25.2868725 ], [ 89.8701272, 25.287559 ], [ 89.8652555, 25.2886888 ], [ 89.861491, 25.2886817 ], [ 89.8552478, 25.2891391 ], [ 89.8491324, 25.2904002 ], [ 89.8425878, 25.2929999 ], [ 89.837778, 25.296111 ], [ 89.8345194, 25.2963573 ], [ 89.8352865, 25.2978269 ], [ 89.8369173, 25.2993352 ], [ 89.8382959, 25.3011103 ], [ 89.8415149, 25.3084612 ], [ 89.841472, 25.3164142 ], [ 89.839176, 25.3228732 ], [ 89.8340262, 25.3298555 ], [ 89.828056, 25.333056 ], [ 89.825556, 25.338333 ], [ 89.823889, 25.344444 ], [ 89.8223246, 25.3477468 ], [ 89.821389, 25.349722 ], [ 89.819722, 25.355833 ], [ 89.817222, 25.360833 ], [ 89.815556, 25.366944 ], [ 89.814444, 25.373889 ], [ 89.815278, 25.379444 ], [ 89.815833, 25.385278 ], [ 89.816389, 25.390833 ], [ 89.816944, 25.396667 ], [ 89.818611, 25.401667 ], [ 89.82, 25.406667 ], [ 89.822222, 25.4125 ], [ 89.823611, 25.4175 ], [ 89.826111, 25.422222 ], [ 89.8275, 25.427222 ], [ 89.83, 25.431667 ], [ 89.830556, 25.437222 ], [ 89.831944, 25.4425 ], [ 89.833611, 25.4475 ], [ 89.8338639, 25.4500277 ], [ 89.834167, 25.453056 ], [ 89.835833, 25.458333 ], [ 89.836389, 25.463889 ], [ 89.837778, 25.468889 ], [ 89.839444, 25.474167 ], [ 89.840833, 25.479167 ], [ 89.842222, 25.484167 ], [ 89.843889, 25.489444 ], [ 89.846111, 25.494444 ], [ 89.8475, 25.499722 ], [ 89.849167, 25.504722 ], [ 89.850556, 25.509722 ], [ 89.851389, 25.515556 ], [ 89.851111, 25.521667 ], [ 89.85, 25.528611 ], [ 89.848889, 25.535278 ], [ 89.848611, 25.541667 ], [ 89.85, 25.546667 ], [ 89.8525, 25.551111 ], [ 89.854722, 25.555556 ], [ 89.856389, 25.560833 ], [ 89.857778, 25.565833 ], [ 89.858611, 25.571389 ], [ 89.86, 25.576667 ], [ 89.860556, 25.582222 ], [ 89.861389, 25.587778 ], [ 89.861944, 25.593611 ], [ 89.8625, 25.599167 ], [ 89.863333, 25.605 ], [ 89.863056, 25.611111 ], [ 89.863611, 25.616667 ], [ 89.864167, 25.6225 ], [ 89.864167, 25.628611 ], [ 89.864722, 25.634444 ], [ 89.864444, 25.640556 ], [ 89.863333, 25.6475 ], [ 89.8622522, 25.6514646 ], [ 89.861667, 25.653611 ], [ 89.8613161, 25.6543519 ], [ 89.8600535, 25.6570175 ], [ 89.8592193, 25.6587786 ], [ 89.859167, 25.658889 ], [ 89.8590607, 25.6590436 ], [ 89.8574765, 25.6613473 ], [ 89.856111, 25.663333 ], [ 89.853056, 25.667778 ], [ 89.850556, 25.673056 ], [ 89.848889, 25.679167 ], [ 89.847778, 25.685833 ], [ 89.846111, 25.691944 ], [ 89.843611, 25.697222 ], [ 89.8416037, 25.7019901 ], [ 89.8415422, 25.7021363 ], [ 89.841389, 25.7025 ], [ 89.839497, 25.7052513 ], [ 89.838333, 25.706944 ], [ 89.8352397, 25.7100373 ], [ 89.834444, 25.710833 ], [ 89.830278, 25.713611 ], [ 89.826667, 25.7175 ], [ 89.822222, 25.720278 ], [ 89.819722, 25.725556 ], [ 89.819444, 25.731944 ], [ 89.820278, 25.7375 ], [ 89.821667, 25.7425 ], [ 89.822222, 25.748333 ], [ 89.823889, 25.753333 ], [ 89.825278, 25.758333 ], [ 89.826111, 25.764167 ], [ 89.824167, 25.77 ], [ 89.8225, 25.776111 ], [ 89.820833, 25.782222 ], [ 89.818333, 25.7875 ], [ 89.817222, 25.794444 ], [ 89.815556, 25.800278 ], [ 89.813611, 25.806389 ], [ 89.811217, 25.8098715 ], [ 89.810556, 25.810833 ], [ 89.809991, 25.8121531 ], [ 89.8099616, 25.8122489 ], [ 89.8094976, 25.8133459 ], [ 89.808333, 25.816111 ], [ 89.807222, 25.823056 ], [ 89.807778, 25.828889 ], [ 89.808333, 25.834444 ], [ 89.810833, 25.838889 ], [ 89.813333, 25.843333 ], [ 89.815556, 25.848056 ], [ 89.818056, 25.8525 ], [ 89.821111, 25.856389 ], [ 89.823611, 25.860833 ], [ 89.825833, 25.865278 ], [ 89.828333, 25.869722 ], [ 89.830556, 25.874444 ], [ 89.833889, 25.878333 ], [ 89.836389, 25.882778 ], [ 89.839722, 25.886667 ], [ 89.841944, 25.891111 ], [ 89.843611, 25.896111 ], [ 89.846667, 25.900278 ], [ 89.848333, 25.905278 ], [ 89.851389, 25.909167 ], [ 89.854722, 25.913056 ], [ 89.858056, 25.916944 ], [ 89.860278, 25.921389 ], [ 89.862778, 25.926111 ], [ 89.865, 25.930556 ], [ 89.865833, 25.936111 ], [ 89.863333, 25.941389 ], [ 89.858333, 25.943611 ], [ 89.851944, 25.944167 ], [ 89.845833, 25.944722 ], [ 89.839444, 25.945278 ], [ 89.833056, 25.945833 ], [ 89.826111, 25.945556 ], [ 89.820556, 25.946944 ], [ 89.818889, 25.951667 ], [ 89.821389, 25.956111 ], [ 89.825556, 25.959444 ], [ 89.829722, 25.962778 ], [ 89.833889, 25.966111 ], [ 89.838889, 25.968889 ], [ 89.843889, 25.971667 ], [ 89.848611, 25.974444 ], [ 89.853611, 25.977222 ], [ 89.856944, 25.981111 ], [ 89.855833, 25.988056 ], [ 89.851389, 25.990833 ], [ 89.847778, 25.994444 ], [ 89.844167, 25.998333 ], [ 89.840556, 26.001944 ], [ 89.834167, 26.0025 ], [ 89.83, 25.999167 ], [ 89.826667, 25.995278 ], [ 89.823333, 25.991389 ], [ 89.816111, 25.989722 ], [ 89.812222, 25.993333 ], [ 89.809167, 25.998056 ], [ 89.8075, 26.004167 ], [ 89.805, 26.009167 ], [ 89.8025, 26.014722 ], [ 89.800278, 26.019722 ], [ 89.798333, 26.025833 ], [ 89.796111, 26.031111 ], [ 89.793056, 26.035556 ], [ 89.788611, 26.038611 ], [ 89.783611, 26.040833 ], [ 89.778056, 26.041944 ], [ 89.775, 26.046667 ], [ 89.775556, 26.052222 ], [ 89.7759528, 26.0561945 ], [ 89.776111, 26.057778 ], [ 89.778611, 26.0625 ], [ 89.780833, 26.066944 ], [ 89.783333, 26.071389 ], [ 89.7831081, 26.0765763 ], [ 89.783056, 26.077778 ], [ 89.781389, 26.083889 ], [ 89.778889, 26.088889 ], [ 89.775278, 26.092778 ], [ 89.771389, 26.096389 ], [ 89.767778, 26.100278 ], [ 89.763333, 26.103889 ], [ 89.759444, 26.1075 ], [ 89.755833, 26.111111 ], [ 89.753333, 26.116389 ], [ 89.751111, 26.121667 ], [ 89.75, 26.128611 ], [ 89.748056, 26.134722 ], [ 89.746944, 26.141389 ], [ 89.745278, 26.1475 ], [ 89.742222, 26.151944 ], [ 89.739167, 26.156389 ], [ 89.734167, 26.158611 ], [ 89.728333, 26.16 ], [ 89.720373, 26.1563577 ], [ 89.7205203, 26.1588688 ], [ 89.720445, 26.1595467 ], [ 89.7202755, 26.1602688 ], [ 89.7200778, 26.1616716 ], [ 89.7194752, 26.1635565 ], [ 89.7191363, 26.1651288 ], [ 89.7191457, 26.1654395 ], [ 89.7193152, 26.166381 ], [ 89.7184019, 26.1659667 ], [ 89.7173663, 26.1656184 ], [ 89.7169332, 26.1653171 ], [ 89.7167449, 26.1654677 ], [ 89.7164813, 26.1658726 ], [ 89.7168861, 26.1666634 ], [ 89.7170085, 26.1670118 ], [ 89.7169426, 26.1673978 ], [ 89.7168014, 26.1676238 ], [ 89.7167072, 26.1680004 ], [ 89.7166302, 26.1685967 ], [ 89.7153642, 26.1690778 ], [ 89.7148577, 26.1690947 ], [ 89.714326, 26.1690356 ], [ 89.7136634, 26.1687993 ], [ 89.7131654, 26.1685292 ], [ 89.7126253, 26.1681494 ], [ 89.7120091, 26.1671576 ], [ 89.7116799, 26.1663642 ], [ 89.7115111, 26.1657312 ], [ 89.7110553, 26.1648618 ], [ 89.7104645, 26.163546 ], [ 89.7102535, 26.1626429 ], [ 89.7106333, 26.160921 ], [ 89.7107346, 26.1602374 ], [ 89.710608, 26.1592929 ], [ 89.7104645, 26.158643 ], [ 89.7099328, 26.1568705 ], [ 89.7094348, 26.1559716 ], [ 89.7089706, 26.1553723 ], [ 89.7085232, 26.1548912 ], [ 89.7075357, 26.1542498 ], [ 89.7051893, 26.1531103 ], [ 89.7040076, 26.1526039 ], [ 89.703172, 26.1521903 ], [ 89.7020073, 26.1519371 ], [ 89.7003487, 26.1554247 ], [ 89.6998423, 26.155872 ], [ 89.6992599, 26.1566232 ], [ 89.6985256, 26.1571971 ], [ 89.698188, 26.1575348 ], [ 89.6971588, 26.1590207 ], [ 89.6970317, 26.1593748 ], [ 89.6965675, 26.1596955 ], [ 89.6960273, 26.1599993 ], [ 89.6949385, 26.1597546 ], [ 89.6945164, 26.1595267 ], [ 89.6919032, 26.1599304 ], [ 89.690331, 26.160282 ], [ 89.6879903, 26.1608786 ], [ 89.6862367, 26.1611411 ], [ 89.6837308, 26.1616901 ], [ 89.6829187, 26.1621982 ], [ 89.6821385, 26.1629554 ], [ 89.6815189, 26.1638275 ], [ 89.6810599, 26.1648601 ], [ 89.681014, 26.1656404 ], [ 89.6811123, 26.166319 ], [ 89.6813353, 26.1666271 ], [ 89.6831482, 26.1682794 ], [ 89.6842236, 26.1690924 ], [ 89.6855751, 26.1695992 ], [ 89.6862086, 26.1696836 ], [ 89.6903424, 26.169335 ], [ 89.6958076, 26.1697434 ], [ 89.6965734, 26.1698262 ], [ 89.6974978, 26.1700125 ], [ 89.6979669, 26.170109 ], [ 89.6986912, 26.1705864 ], [ 89.7000433, 26.1715108 ], [ 89.7011126, 26.1723386 ], [ 89.7012367, 26.1725249 ], [ 89.7011471, 26.1732009 ], [ 89.700989, 26.1737791 ], [ 89.6993246, 26.1745855 ], [ 89.6968757, 26.1754113 ], [ 89.6949413, 26.17622 ], [ 89.6920778, 26.1775155 ], [ 89.6910242, 26.1781704 ], [ 89.6903408, 26.1787969 ], [ 89.6897998, 26.1795087 ], [ 89.6885469, 26.1804769 ], [ 89.6878621, 26.1812589 ], [ 89.6873958, 26.1816697 ], [ 89.6865908, 26.1830742 ], [ 89.6859191, 26.1841123 ], [ 89.6849584, 26.1862884 ], [ 89.6844108, 26.1877353 ], [ 89.6837739, 26.1887869 ], [ 89.6828479, 26.1911095 ], [ 89.6821134, 26.1924182 ], [ 89.6821117, 26.1926896 ], [ 89.6819124, 26.1934015 ], [ 89.6824303, 26.1941375 ], [ 89.6834058, 26.1960997 ], [ 89.686304, 26.1982705 ], [ 89.6855002, 26.1985554 ], [ 89.6846175, 26.1986408 ], [ 89.6836493, 26.1988686 ], [ 89.6827239, 26.198954 ], [ 89.6822683, 26.1981567 ], [ 89.6816631, 26.1977102 ], [ 89.6808446, 26.197274 ], [ 89.6800758, 26.1970747 ], [ 89.6793639, 26.1970462 ], [ 89.678652, 26.1970462 ], [ 89.6777978, 26.1972171 ], [ 89.6770894, 26.1974797 ], [ 89.6749219, 26.1984699 ], [ 89.6740676, 26.2004916 ], [ 89.6738114, 26.2013174 ], [ 89.6735551, 26.2018014 ], [ 89.6735266, 26.2022286 ], [ 89.6738114, 26.2033391 ], [ 89.6738114, 26.2037377 ], [ 89.6735693, 26.2043499 ], [ 89.6735409, 26.2050618 ], [ 89.6737687, 26.2055743 ], [ 89.6741958, 26.2060014 ], [ 89.6746229, 26.2063431 ], [ 89.6749931, 26.2068557 ], [ 89.6751354, 26.2073682 ], [ 89.6751924, 26.2079947 ], [ 89.6754771, 26.2083933 ], [ 89.6760751, 26.2089913 ], [ 89.676787, 26.2095038 ], [ 89.6778975, 26.209817 ], [ 89.6786948, 26.2102157 ], [ 89.6799192, 26.2102157 ], [ 89.6805741, 26.2099879 ], [ 89.6813144, 26.2095323 ], [ 89.6825958, 26.2085072 ], [ 89.6853863, 26.2068842 ], [ 89.6856425, 26.2069126 ], [ 89.6859273, 26.2071119 ], [ 89.6862405, 26.2077953 ], [ 89.6863848, 26.2084117 ], [ 89.6871517, 26.2096462 ], [ 89.6877212, 26.2101302 ], [ 89.6884046, 26.2105574 ], [ 89.6899991, 26.2112977 ], [ 89.6909717, 26.2114096 ], [ 89.6913944, 26.2116109 ], [ 89.69185, 26.2130631 ], [ 89.6916791, 26.2134902 ], [ 89.6913374, 26.2135472 ], [ 89.690711, 26.2134048 ], [ 89.6900276, 26.2131201 ], [ 89.6895151, 26.2128353 ], [ 89.6886039, 26.2122374 ], [ 89.6878636, 26.211497 ], [ 89.6870663, 26.2108421 ], [ 89.6865537, 26.2101872 ], [ 89.6853578, 26.2089058 ], [ 89.6847314, 26.2085926 ], [ 89.683991, 26.2087065 ], [ 89.6835924, 26.2089913 ], [ 89.6831083, 26.2097316 ], [ 89.6828805, 26.2103011 ], [ 89.6825673, 26.2108848 ], [ 89.6818997, 26.2118667 ], [ 89.6807164, 26.2130774 ], [ 89.6800046, 26.214017 ], [ 89.6793399, 26.2157634 ], [ 89.6788667, 26.218299 ], [ 89.6786969, 26.2198518 ], [ 89.6784179, 26.2205191 ], [ 89.6785635, 26.2232973 ], [ 89.6789274, 26.2236491 ], [ 89.6796068, 26.2238068 ], [ 89.6803711, 26.2236976 ], [ 89.6807836, 26.2233094 ], [ 89.6811606, 26.2225386 ], [ 89.6813538, 26.2218778 ], [ 89.6817298, 26.2213562 ], [ 89.6830522, 26.220422 ], [ 89.6840713, 26.2201066 ], [ 89.6857223, 26.2200482 ], [ 89.6876259, 26.2203371 ], [ 89.688099, 26.2206647 ], [ 89.6883902, 26.2213077 ], [ 89.6884023, 26.2220113 ], [ 89.6881354, 26.2225572 ], [ 89.6875773, 26.2227149 ], [ 89.6872862, 26.2226785 ], [ 89.6853694, 26.22189 ], [ 89.6844474, 26.2220113 ], [ 89.6838893, 26.2224116 ], [ 89.6836467, 26.2228726 ], [ 89.6836588, 26.2234307 ], [ 89.6835739, 26.2238432 ], [ 89.6836588, 26.2241707 ], [ 89.6839257, 26.2245347 ], [ 89.6851753, 26.2250928 ], [ 89.6860487, 26.2255416 ], [ 89.6870678, 26.2261604 ], [ 89.6870557, 26.2263787 ], [ 89.6865825, 26.2265243 ], [ 89.6862671, 26.2265243 ], [ 89.6865098, 26.2293389 ], [ 89.6861337, 26.2298484 ], [ 89.6856241, 26.2310616 ], [ 89.6855331, 26.2309524 ], [ 89.6850115, 26.2295451 ], [ 89.6843078, 26.228247 ], [ 89.6837983, 26.2278467 ], [ 89.683034, 26.227507 ], [ 89.6824395, 26.2275191 ], [ 89.6820271, 26.2277375 ], [ 89.6816146, 26.2283319 ], [ 89.6813477, 26.2289143 ], [ 89.6808018, 26.2307607 ], [ 89.6802409, 26.233375 ], [ 89.6800496, 26.2347642 ], [ 89.6798341, 26.2371303 ], [ 89.6794427, 26.2377958 ], [ 89.6792665, 26.238246 ], [ 89.6788532, 26.2384482 ], [ 89.6783615, 26.2380794 ], [ 89.678196, 26.2377484 ], [ 89.6779832, 26.236694 ], [ 89.6781629, 26.2361034 ], [ 89.6783378, 26.2352145 ], [ 89.678196, 26.23451 ], [ 89.677988, 26.2342074 ], [ 89.6776617, 26.2340986 ], [ 89.6771912, 26.2341085 ], [ 89.6769548, 26.2337776 ], [ 89.6762266, 26.2329927 ], [ 89.6758106, 26.2327184 ], [ 89.6742147, 26.2320319 ], [ 89.6731317, 26.2309903 ], [ 89.6726737, 26.2298344 ], [ 89.6719385, 26.2271757 ], [ 89.67183, 26.2269136 ], [ 89.6716131, 26.2259916 ], [ 89.6723543, 26.2256662 ], [ 89.6725532, 26.225395 ], [ 89.6726797, 26.2249159 ], [ 89.672065, 26.2245001 ], [ 89.6717035, 26.224012 ], [ 89.6714865, 26.2233431 ], [ 89.6714504, 26.2228188 ], [ 89.6715408, 26.2224211 ], [ 89.67183, 26.2218787 ], [ 89.6723001, 26.2213183 ], [ 89.6728605, 26.2208844 ], [ 89.6725532, 26.220559 ], [ 89.6721554, 26.2205229 ], [ 89.6718481, 26.2203782 ], [ 89.6690821, 26.2208302 ], [ 89.6648337, 26.2213002 ], [ 89.6641467, 26.2206675 ], [ 89.6636947, 26.220324 ], [ 89.6630255, 26.2201578 ], [ 89.6618831, 26.219346 ], [ 89.660019, 26.2192558 ], [ 89.6599889, 26.2197369 ], [ 89.6584255, 26.2197369 ], [ 89.6584255, 26.2194362 ], [ 89.6553288, 26.2195865 ], [ 89.6552321, 26.2205052 ], [ 89.6545571, 26.2206386 ], [ 89.6526815, 26.2206687 ], [ 89.6502207, 26.2215089 ], [ 89.6486721, 26.2228564 ], [ 89.6470997, 26.2240297 ], [ 89.6463194, 26.224765 ], [ 89.6460343, 26.2254252 ], [ 89.6458243, 26.2256202 ], [ 89.6450915, 26.2258762 ], [ 89.6428066, 26.2262671 ], [ 89.6403713, 26.2262971 ], [ 89.6394092, 26.2266579 ], [ 89.6385373, 26.2281311 ], [ 89.6380262, 26.2287926 ], [ 89.6373647, 26.2293037 ], [ 89.6353503, 26.2295442 ], [ 89.6342379, 26.2296043 ], [ 89.6339974, 26.2287024 ], [ 89.6336366, 26.2278605 ], [ 89.6336968, 26.227139 ], [ 89.634268, 26.2249682 ], [ 89.6352902, 26.2234048 ], [ 89.6352902, 26.2227735 ], [ 89.6350196, 26.2219316 ], [ 89.6345987, 26.2209695 ], [ 89.6342379, 26.220278 ], [ 89.6336066, 26.2195865 ], [ 89.633366, 26.2192558 ], [ 89.633366, 26.2183839 ], [ 89.6336366, 26.2179329 ], [ 89.6343883, 26.2175721 ], [ 89.6357412, 26.2173016 ], [ 89.6360118, 26.217061 ], [ 89.6357713, 26.2166401 ], [ 89.6352301, 26.2160689 ], [ 89.6345987, 26.2155277 ], [ 89.6337869, 26.2146558 ], [ 89.633336, 26.2135735 ], [ 89.6327347, 26.2123949 ], [ 89.6321334, 26.2116433 ], [ 89.632068, 26.207666 ], [ 89.6354468, 26.2070698 ], [ 89.6369705, 26.2072023 ], [ 89.6379974, 26.2069704 ], [ 89.6382292, 26.2065398 ], [ 89.6381738, 26.2057317 ], [ 89.6376762, 26.2050052 ], [ 89.6378965, 26.2043156 ], [ 89.6385256, 26.203555 ], [ 89.6387247, 26.203228 ], [ 89.6389379, 26.2026096 ], [ 89.6393715, 26.2007479 ], [ 89.6393218, 26.1998735 ], [ 89.6395137, 26.1994812 ], [ 89.6401606, 26.1991911 ], [ 89.6409887, 26.1989906 ], [ 89.6412517, 26.1988414 ], [ 89.6414934, 26.1985997 ], [ 89.6417422, 26.1981732 ], [ 89.6420479, 26.1971922 ], [ 89.6424104, 26.1967444 ], [ 89.6431383, 26.1960011 ], [ 89.6438783, 26.1950177 ], [ 89.6442503, 26.1948992 ], [ 89.6458403, 26.1948897 ], [ 89.6464694, 26.194577 ], [ 89.6467822, 26.1942073 ], [ 89.6471376, 26.1936315 ], [ 89.6474362, 26.1930131 ], [ 89.6477063, 26.1928425 ], [ 89.6480404, 26.1925013 ], [ 89.6482181, 26.1921892 ], [ 89.6482923, 26.1918196 ], [ 89.6485593, 26.1910945 ], [ 89.6486091, 26.1906253 ], [ 89.6483987, 26.1900894 ], [ 89.6477845, 26.1894595 ], [ 89.6473987, 26.1891741 ], [ 89.6474042, 26.1877663 ], [ 89.6466862, 26.1877876 ], [ 89.646608, 26.18788 ], [ 89.6463663, 26.1886975 ], [ 89.6460811, 26.1888431 ], [ 89.6458261, 26.1888823 ], [ 89.645695, 26.1888036 ], [ 89.6456484, 26.1887757 ], [ 89.6455773, 26.1886122 ], [ 89.6456555, 26.1884061 ], [ 89.6457271, 26.1883693 ], [ 89.6460191, 26.1882191 ], [ 89.6461531, 26.1881502 ], [ 89.646281, 26.1880009 ], [ 89.6464303, 26.1876668 ], [ 89.6467573, 26.1871763 ], [ 89.6470914, 26.1863517 ], [ 89.6473076, 26.1853188 ], [ 89.6443336, 26.185108 ], [ 89.6434671, 26.185307 ], [ 89.6401419, 26.1867121 ], [ 89.6390588, 26.1867004 ], [ 89.6379933, 26.1868409 ], [ 89.6379465, 26.1881405 ], [ 89.6371392, 26.1881351 ], [ 89.6371269, 26.1885621 ], [ 89.6379465, 26.1886089 ], [ 89.6378879, 26.1896521 ], [ 89.6373611, 26.1896638 ], [ 89.6360848, 26.1898746 ], [ 89.6350662, 26.1899448 ], [ 89.6351364, 26.1916801 ], [ 89.6353706, 26.1924528 ], [ 89.636038, 26.193694 ], [ 89.6349725, 26.1943613 ], [ 89.6345861, 26.1947946 ], [ 89.6342231, 26.195743 ], [ 89.6324142, 26.1959654 ], [ 89.6301075, 26.1960708 ], [ 89.6289942, 26.1940606 ], [ 89.6288445, 26.1936897 ], [ 89.6285405, 26.1924345 ], [ 89.6300556, 26.1918421 ], [ 89.6310059, 26.1915626 ], [ 89.6324791, 26.1912319 ], [ 89.6323764, 26.1903974 ], [ 89.6299536, 26.1901796 ], [ 89.6271858, 26.1898542 ], [ 89.627368, 26.1886462 ], [ 89.6275784, 26.1877443 ], [ 89.627849, 26.18576 ], [ 89.6276987, 26.1845213 ], [ 89.6281497, 26.1838598 ], [ 89.6301641, 26.1821762 ], [ 89.6314869, 26.1815448 ], [ 89.63187, 26.1815636 ], [ 89.6318273, 26.1825985 ], [ 89.6322085, 26.1829278 ], [ 89.6327497, 26.1827474 ], [ 89.6327497, 26.1822363 ], [ 89.6325994, 26.181184 ], [ 89.6334171, 26.1804859 ], [ 89.6340726, 26.1801618 ], [ 89.6357863, 26.1801543 ], [ 89.6366883, 26.1800415 ], [ 89.6378452, 26.1791628 ], [ 89.6383467, 26.1790561 ], [ 89.6389432, 26.1790193 ], [ 89.6391536, 26.1795905 ], [ 89.6392739, 26.1804925 ], [ 89.6398301, 26.1811239 ], [ 89.6408221, 26.1820864 ], [ 89.6415903, 26.1821611 ], [ 89.6423556, 26.1825069 ], [ 89.6433778, 26.1826873 ], [ 89.6443105, 26.1823764 ], [ 89.6453321, 26.1821461 ], [ 89.6465347, 26.1817252 ], [ 89.6473464, 26.1813343 ], [ 89.6483687, 26.1805226 ], [ 89.6492105, 26.1801016 ], [ 89.6500223, 26.1801016 ], [ 89.6502628, 26.1810337 ], [ 89.6524876, 26.1810337 ], [ 89.6524876, 26.1817252 ], [ 89.653119, 26.1819056 ], [ 89.654051, 26.1819056 ], [ 89.6555543, 26.1812742 ], [ 89.6554473, 26.178716 ], [ 89.6564957, 26.1785176 ], [ 89.657223, 26.1781946 ], [ 89.6574969, 26.1779774 ], [ 89.6577331, 26.1775334 ], [ 89.6582242, 26.17691 ], [ 89.6583753, 26.1765417 ], [ 89.6582903, 26.1763055 ], [ 89.6576669, 26.17606 ], [ 89.656543, 26.1753138 ], [ 89.6560707, 26.174936 ], [ 89.6555795, 26.1744259 ], [ 89.6545972, 26.1732557 ], [ 89.6542761, 26.1722828 ], [ 89.6542289, 26.1717066 ], [ 89.6543516, 26.1712627 ], [ 89.6546822, 26.1708377 ], [ 89.6550367, 26.1701583 ], [ 89.6539985, 26.1701285 ], [ 89.6536795, 26.1699439 ], [ 89.6531353, 26.1699546 ], [ 89.6528365, 26.1702 ], [ 89.6520043, 26.1706268 ], [ 89.651204, 26.1709149 ], [ 89.650834, 26.1709858 ], [ 89.6507044, 26.1706229 ], [ 89.6506536, 26.1702342 ], [ 89.6503229, 26.1702342 ], [ 89.6499922, 26.1699937 ], [ 89.6506837, 26.1689414 ], [ 89.6505334, 26.1685806 ], [ 89.6500223, 26.1682499 ], [ 89.6496915, 26.1679192 ], [ 89.6497216, 26.1665963 ], [ 89.6493909, 26.1665662 ], [ 89.6492105, 26.1661754 ], [ 89.6491874, 26.1645129 ], [ 89.6472561, 26.1645129 ], [ 89.6465347, 26.164612 ], [ 89.645753, 26.1651832 ], [ 89.6452419, 26.1657544 ], [ 89.6446099, 26.1658253 ], [ 89.6435003, 26.1656759 ], [ 89.642764, 26.1656866 ], [ 89.6408434, 26.1664121 ], [ 89.6399504, 26.1666865 ], [ 89.6388379, 26.1671946 ], [ 89.6379059, 26.1679763 ], [ 89.6374249, 26.1686978 ], [ 89.637558, 26.1705698 ], [ 89.6375752, 26.1722155 ], [ 89.6367035, 26.1722166 ], [ 89.6327975, 26.1719059 ], [ 89.6324291, 26.1719626 ], [ 89.6321835, 26.1722743 ], [ 89.6320513, 26.1722743 ], [ 89.6318624, 26.1724821 ], [ 89.6317679, 26.1733888 ], [ 89.6317681, 26.1735727 ], [ 89.6318152, 26.1736722 ], [ 89.6324286, 26.1736109 ], [ 89.6332758, 26.1736586 ], [ 89.6335164, 26.1746809 ], [ 89.6336968, 26.1751018 ], [ 89.6347791, 26.1754024 ], [ 89.6352, 26.1754024 ], [ 89.6357713, 26.1755828 ], [ 89.636102, 26.1761841 ], [ 89.6361621, 26.1765148 ], [ 89.6370039, 26.1767253 ], [ 89.6371843, 26.1770861 ], [ 89.6371089, 26.1776844 ], [ 89.6368198, 26.1781959 ], [ 89.6367334, 26.1785226 ], [ 89.6356791, 26.1785653 ], [ 89.6343582, 26.1787698 ], [ 89.6332758, 26.1791907 ], [ 89.6323739, 26.1796717 ], [ 89.6320412, 26.1803814 ], [ 89.6318036, 26.1804594 ], [ 89.6314325, 26.179867 ], [ 89.6302843, 26.1796116 ], [ 89.629832, 26.1781278 ], [ 89.6278367, 26.1777864 ], [ 89.6272392, 26.1774876 ], [ 89.6265136, 26.1770288 ], [ 89.625692, 26.1762606 ], [ 89.6255764, 26.1758586 ], [ 89.6255269, 26.1750539 ], [ 89.6253924, 26.1740066 ], [ 89.6249559, 26.1718558 ], [ 89.624602, 26.171524 ], [ 89.6229484, 26.1716443 ], [ 89.622687, 26.1719057 ], [ 89.6213901, 26.1720641 ], [ 89.6214388, 26.1730121 ], [ 89.6218961, 26.1732979 ], [ 89.6221366, 26.1739894 ], [ 89.6229784, 26.1752521 ], [ 89.622798, 26.1775671 ], [ 89.6233092, 26.1779279 ], [ 89.6235497, 26.1784691 ], [ 89.6234853, 26.1792056 ], [ 89.6209439, 26.1794189 ], [ 89.6194607, 26.1794616 ], [ 89.6186285, 26.1793762 ], [ 89.6147766, 26.178608 ], [ 89.6148458, 26.1782887 ], [ 89.614966, 26.1768155 ], [ 89.6147255, 26.1766351 ], [ 89.6134928, 26.1766952 ], [ 89.6126209, 26.1772364 ], [ 89.6125111, 26.1776483 ], [ 89.6123503, 26.1780181 ], [ 89.6117637, 26.1782287 ], [ 89.6103059, 26.1785292 ], [ 89.609885, 26.1790103 ], [ 89.6101555, 26.1800626 ], [ 89.6101128, 26.1802463 ], [ 89.6089071, 26.1804975 ], [ 89.6078706, 26.1794011 ], [ 89.6077203, 26.17889 ], [ 89.6079608, 26.1784992 ], [ 89.6082614, 26.1782586 ], [ 89.6082614, 26.177026 ], [ 89.608532, 26.1766351 ], [ 89.6091033, 26.1764247 ], [ 89.6097046, 26.1763946 ], [ 89.6099674, 26.1764417 ], [ 89.6121699, 26.1763345 ], [ 89.6127111, 26.1754926 ], [ 89.6133425, 26.1754024 ], [ 89.6142444, 26.1758835 ], [ 89.61441, 26.1762343 ], [ 89.6148119, 26.1762152 ], [ 89.6152366, 26.1757031 ], [ 89.6153569, 26.1746809 ], [ 89.6151765, 26.1729972 ], [ 89.6144549, 26.1726364 ], [ 89.6136431, 26.1726665 ], [ 89.6132222, 26.172907 ], [ 89.6132122, 26.1735056 ], [ 89.613102, 26.1741397 ], [ 89.6128013, 26.1747711 ], [ 89.6122301, 26.1749514 ], [ 89.6117189, 26.1747109 ], [ 89.6110274, 26.1741697 ], [ 89.6108507, 26.1739268 ], [ 89.611078, 26.1722932 ], [ 89.6111347, 26.171479 ], [ 89.6113236, 26.1710351 ], [ 89.6113519, 26.1700055 ], [ 89.6111252, 26.1687021 ], [ 89.6118714, 26.1682487 ], [ 89.6122839, 26.1678709 ], [ 89.6124759, 26.1676348 ], [ 89.6125758, 26.1677087 ], [ 89.6165444, 26.1693022 ], [ 89.6176268, 26.1693022 ], [ 89.6178373, 26.168791 ], [ 89.618168, 26.168761 ], [ 89.6185588, 26.1680995 ], [ 89.6189797, 26.167829 ], [ 89.6185889, 26.1672878 ], [ 89.6181379, 26.1668368 ], [ 89.6171234, 26.1667308 ], [ 89.6162739, 26.1665061 ], [ 89.6158609, 26.1665847 ], [ 89.6145019, 26.1664654 ], [ 89.6137841, 26.1663426 ], [ 89.6133591, 26.1662199 ], [ 89.613548, 26.1659365 ], [ 89.6138124, 26.1653887 ], [ 89.6139163, 26.1648881 ], [ 89.6139258, 26.1645764 ], [ 89.6136613, 26.163476 ], [ 89.6134535, 26.1623426 ], [ 89.6132835, 26.1621253 ], [ 89.6123578, 26.1621725 ], [ 89.6118667, 26.1621555 ], [ 89.6101193, 26.1619855 ], [ 89.6099115, 26.16174 ], [ 89.6097887, 26.1613999 ], [ 89.6097982, 26.1611355 ], [ 89.6098832, 26.1608804 ], [ 89.6098643, 26.1605404 ], [ 89.6097226, 26.1600965 ], [ 89.6093266, 26.1594937 ], [ 89.6086233, 26.1592076 ], [ 89.6082801, 26.1591586 ], [ 89.6080841, 26.1588767 ], [ 89.6080595, 26.1584233 ], [ 89.6081698, 26.1580802 ], [ 89.6083537, 26.1577248 ], [ 89.6087703, 26.1575042 ], [ 89.609138, 26.1574184 ], [ 89.6095482, 26.1574026 ], [ 89.6100081, 26.1575409 ], [ 89.6103145, 26.1577003 ], [ 89.610566, 26.157912 ], [ 89.6108537, 26.1580311 ], [ 89.6112214, 26.1580066 ], [ 89.6113194, 26.1579086 ], [ 89.6112949, 26.15759 ], [ 89.6110154, 26.1571159 ], [ 89.6109027, 26.1567934 ], [ 89.6107066, 26.1556291 ], [ 89.6103022, 26.1546365 ], [ 89.609763, 26.1543791 ], [ 89.6096282, 26.1542076 ], [ 89.6095424, 26.1538276 ], [ 89.6093463, 26.1535335 ], [ 89.6089664, 26.1533252 ], [ 89.6081944, 26.1533865 ], [ 89.6077654, 26.153509 ], [ 89.6070546, 26.1540115 ], [ 89.6067973, 26.1542933 ], [ 89.6064786, 26.1549674 ], [ 89.6064051, 26.1553963 ], [ 89.6060742, 26.1565213 ], [ 89.6058744, 26.1568668 ], [ 89.6057924, 26.1578694 ], [ 89.6057066, 26.1583106 ], [ 89.6052041, 26.1591194 ], [ 89.6048977, 26.1593155 ], [ 89.6045423, 26.1592174 ], [ 89.6043585, 26.1590091 ], [ 89.604334, 26.1587027 ], [ 89.604432, 26.1583596 ], [ 89.6046404, 26.1579919 ], [ 89.6048242, 26.1570973 ], [ 89.6049958, 26.1567419 ], [ 89.6050203, 26.1564968 ], [ 89.6047874, 26.1563007 ], [ 89.6044811, 26.156264 ], [ 89.604095, 26.1563988 ], [ 89.6023671, 26.1573792 ], [ 89.6020239, 26.1573792 ], [ 89.601546, 26.1575998 ], [ 89.601019, 26.1581145 ], [ 89.600296, 26.1592419 ], [ 89.6000999, 26.1596341 ], [ 89.6001366, 26.1607493 ], [ 89.6000386, 26.1608228 ], [ 89.5996955, 26.1609209 ], [ 89.5993278, 26.1609086 ], [ 89.5983597, 26.1606635 ], [ 89.5974405, 26.1601733 ], [ 89.5969626, 26.1600385 ], [ 89.5964846, 26.160014 ], [ 89.5959944, 26.1600998 ], [ 89.5955532, 26.1601121 ], [ 89.5951243, 26.1600875 ], [ 89.5946096, 26.1599527 ], [ 89.5942297, 26.1597076 ], [ 89.5939478, 26.159389 ], [ 89.5935924, 26.158813 ], [ 89.5932125, 26.1583718 ], [ 89.5929919, 26.1582125 ], [ 89.5923424, 26.1582468 ], [ 89.5920115, 26.1580262 ], [ 89.5916439, 26.1578547 ], [ 89.5914478, 26.1578424 ], [ 89.5910801, 26.1576096 ], [ 89.590835, 26.1573032 ], [ 89.5908963, 26.1570336 ], [ 89.5910924, 26.1569233 ], [ 89.5915949, 26.1567517 ], [ 89.5935066, 26.1563963 ], [ 89.5945299, 26.156139 ], [ 89.5949589, 26.1561022 ], [ 89.5952976, 26.1561421 ], [ 89.5955349, 26.1562615 ], [ 89.5959515, 26.1563718 ], [ 89.5962579, 26.1562983 ], [ 89.5966465, 26.1559999 ], [ 89.5969197, 26.1556488 ], [ 89.5974467, 26.15446 ], [ 89.597606, 26.1538718 ], [ 89.5976918, 26.1520556 ], [ 89.597802, 26.1515531 ], [ 89.5979614, 26.1511732 ], [ 89.598378, 26.1505359 ], [ 89.5983045, 26.1502786 ], [ 89.597753, 26.1500335 ], [ 89.5966501, 26.1501805 ], [ 89.5966256, 26.1500212 ], [ 89.5966746, 26.1496536 ], [ 89.5968952, 26.1492124 ], [ 89.597704, 26.14833 ], [ 89.5979246, 26.1478888 ], [ 89.5980962, 26.1473374 ], [ 89.5981942, 26.1467614 ], [ 89.5981452, 26.1463459 ], [ 89.597655, 26.1448508 ], [ 89.596981, 26.1437356 ], [ 89.5967849, 26.1432699 ], [ 89.5967113, 26.1428655 ], [ 89.5964785, 26.1424182 ], [ 89.5955226, 26.1409721 ], [ 89.5953878, 26.1406534 ], [ 89.5952775, 26.1401265 ], [ 89.5954123, 26.1399304 ], [ 89.5959883, 26.1396853 ], [ 89.5966501, 26.1395627 ], [ 89.5977898, 26.1391338 ], [ 89.5982065, 26.1388152 ], [ 89.5983658, 26.1382392 ], [ 89.5983168, 26.1374549 ], [ 89.5977285, 26.136548 ], [ 89.5972873, 26.1359965 ], [ 89.596454, 26.1354426 ], [ 89.5963682, 26.1352465 ], [ 89.5963682, 26.1349891 ], [ 89.5964908, 26.1347563 ], [ 89.5966868, 26.1345235 ], [ 89.5970913, 26.1343151 ], [ 89.5976795, 26.1341068 ], [ 89.5978878, 26.133923 ], [ 89.5981329, 26.1335798 ], [ 89.5981329, 26.1331754 ], [ 89.5980226, 26.1327832 ], [ 89.5978174, 26.1326305 ], [ 89.5998803, 26.1310833 ], [ 89.6005733, 26.1303742 ], [ 89.6010568, 26.1297295 ], [ 89.6016209, 26.1287625 ], [ 89.6020077, 26.1278439 ], [ 89.6021478, 26.1273604 ], [ 89.6026757, 26.1273374 ], [ 89.6027416, 26.1276226 ], [ 89.6032572, 26.1289392 ], [ 89.6043434, 26.1289732 ], [ 89.6051772, 26.1287099 ], [ 89.6057916, 26.1281394 ], [ 89.6066694, 26.1264509 ], [ 89.6071302, 26.1257158 ], [ 89.607207, 26.1250356 ], [ 89.6070753, 26.1243663 ], [ 89.6069985, 26.1236093 ], [ 89.6067791, 26.1231814 ], [ 89.6060879, 26.1227096 ], [ 89.6052979, 26.1227425 ], [ 89.6050017, 26.1229729 ], [ 89.6047823, 26.1238835 ], [ 89.6043215, 26.124081 ], [ 89.6039155, 26.1241139 ], [ 89.6035534, 26.1238835 ], [ 89.6033669, 26.1234776 ], [ 89.6035534, 26.1231704 ], [ 89.6037838, 26.1229839 ], [ 89.6038168, 26.1224243 ], [ 89.6035534, 26.1225011 ], [ 89.6026538, 26.12215 ], [ 89.6014798, 26.1237958 ], [ 89.6012069, 26.1234829 ], [ 89.6021135, 26.1219245 ], [ 89.602458, 26.1212446 ], [ 89.6027299, 26.1204377 ], [ 89.6032557, 26.1192501 ], [ 89.6035096, 26.1184796 ], [ 89.6034824, 26.1181532 ], [ 89.603573, 26.1179646 ], [ 89.6039085, 26.1175386 ], [ 89.604398, 26.1171578 ], [ 89.6048966, 26.1169221 ], [ 89.6052502, 26.116913 ], [ 89.6058938, 26.1172122 ], [ 89.6074894, 26.1183635 ], [ 89.6078882, 26.1192601 ], [ 89.6080242, 26.1197043 ], [ 89.6084684, 26.120076 ], [ 89.6086769, 26.1203389 ], [ 89.6087404, 26.1206381 ], [ 89.6086588, 26.1220976 ], [ 89.6085319, 26.122977 ], [ 89.608691, 26.1241142 ], [ 89.6090464, 26.1244574 ], [ 89.6098308, 26.1258668 ], [ 89.6108235, 26.1271047 ], [ 89.611375, 26.1275949 ], [ 89.6119266, 26.1279013 ], [ 89.6123433, 26.1279504 ], [ 89.61276, 26.1279136 ], [ 89.6130419, 26.1278523 ], [ 89.6134708, 26.1276685 ], [ 89.6135934, 26.1274111 ], [ 89.6134831, 26.126737 ], [ 89.6135321, 26.1264183 ], [ 89.6138263, 26.1254869 ], [ 89.6145739, 26.1243838 ], [ 89.6154318, 26.1236583 ], [ 89.6155911, 26.1234744 ], [ 89.6155544, 26.1227145 ], [ 89.6156892, 26.1222488 ], [ 89.6159343, 26.1218566 ], [ 89.6164246, 26.1213296 ], [ 89.6169393, 26.1209742 ], [ 89.6173315, 26.120631 ], [ 89.6181772, 26.1202633 ], [ 89.6189983, 26.1199937 ], [ 89.6198318, 26.1198344 ], [ 89.6203098, 26.1199079 ], [ 89.6204936, 26.1200795 ], [ 89.620751, 26.1204717 ], [ 89.6213517, 26.1212111 ], [ 89.6215998, 26.1218037 ], [ 89.6217927, 26.1229272 ], [ 89.6218386, 26.123754 ], [ 89.6221969, 26.1256781 ], [ 89.6223025, 26.126018 ], [ 89.6225689, 26.1265003 ], [ 89.6230466, 26.1269872 ], [ 89.6235427, 26.1278278 ], [ 89.6240112, 26.1282871 ], [ 89.6246313, 26.1286178 ], [ 89.6249253, 26.1286729 ], [ 89.6254995, 26.1286408 ], [ 89.6256143, 26.1287051 ], [ 89.6257682, 26.1287235 ], [ 89.6260024, 26.12865 ], [ 89.6263286, 26.1286638 ], [ 89.6263653, 26.1285903 ], [ 89.6263148, 26.1283973 ], [ 89.6267006, 26.1281815 ], [ 89.6274728, 26.1274409 ], [ 89.6275963, 26.1272628 ], [ 89.6278076, 26.1270974 ], [ 89.627984, 26.1270316 ], [ 89.6280171, 26.1267757 ], [ 89.6280607, 26.1264387 ], [ 89.6280779, 26.1263059 ], [ 89.6282401, 26.1257339 ], [ 89.6283682, 26.1254693 ], [ 89.6285304, 26.1252814 ], [ 89.6288965, 26.1251083 ], [ 89.6292888, 26.1242525 ], [ 89.62946, 26.1232476 ], [ 89.6294172, 26.1224702 ], [ 89.6291604, 26.1218062 ], [ 89.6292032, 26.1215145 ], [ 89.6299806, 26.1192687 ], [ 89.6300876, 26.1185128 ], [ 89.6300519, 26.1179921 ], [ 89.6298379, 26.1174287 ], [ 89.6294635, 26.1166977 ], [ 89.6289072, 26.1158918 ], [ 89.6276663, 26.1145225 ], [ 89.6257514, 26.1132516 ], [ 89.6231519, 26.1119957 ], [ 89.6225385, 26.1116177 ], [ 89.6218824, 26.1111755 ], [ 89.6206343, 26.1100737 ], [ 89.6184163, 26.1085617 ], [ 89.6176532, 26.1078407 ], [ 89.617425, 26.1074912 ], [ 89.6171611, 26.1072274 ], [ 89.6167546, 26.1070205 ], [ 89.6158132, 26.1066925 ], [ 89.614722, 26.1066925 ], [ 89.6137343, 26.1067781 ], [ 89.6129926, 26.1071204 ], [ 89.6125361, 26.1074057 ], [ 89.6116375, 26.108126 ], [ 89.6112667, 26.1083043 ], [ 89.6103181, 26.1085539 ], [ 89.6097904, 26.1085967 ], [ 89.6093625, 26.108504 ], [ 89.6089702, 26.1083257 ], [ 89.607244, 26.1073323 ], [ 89.6060103, 26.1064548 ], [ 89.605516, 26.1062853 ], [ 89.6051347, 26.1062712 ], [ 89.6047252, 26.1064689 ], [ 89.6045134, 26.106709 ], [ 89.6043157, 26.107867 ], [ 89.6043483, 26.1090779 ], [ 89.6035937, 26.1094513 ], [ 89.603133, 26.1099739 ], [ 89.60299, 26.1103393 ], [ 89.6029344, 26.1108239 ], [ 89.6030218, 26.111237 ], [ 89.6030456, 26.1116341 ], [ 89.6026961, 26.1118327 ], [ 89.6016872, 26.1120234 ], [ 89.6011312, 26.1123332 ], [ 89.6008373, 26.1128018 ], [ 89.6004083, 26.1132387 ], [ 89.5991612, 26.113199 ], [ 89.5992486, 26.1124126 ], [ 89.5991692, 26.1112465 ], [ 89.5990579, 26.1106984 ], [ 89.5988435, 26.1102694 ], [ 89.5984622, 26.1097531 ], [ 89.5999397, 26.1091415 ], [ 89.6002733, 26.1084678 ], [ 89.5996537, 26.1082613 ], [ 89.5992327, 26.1080151 ], [ 89.5972309, 26.1082772 ], [ 89.5966828, 26.108031 ], [ 89.5966749, 26.1072604 ], [ 89.5974375, 26.1072684 ], [ 89.597644, 26.1073955 ], [ 89.5981842, 26.1072763 ], [ 89.5986449, 26.1070618 ], [ 89.5986369, 26.106895 ], [ 89.5993598, 26.1066488 ], [ 89.599757, 26.107038 ], [ 89.6006387, 26.106903 ], [ 89.6004657, 26.104624 ], [ 89.6001817, 26.1035407 ], [ 89.6000194, 26.1033379 ], [ 89.5997516, 26.1031756 ], [ 89.5995163, 26.1031431 ], [ 89.5985875, 26.1037899 ], [ 89.5981287, 26.103987 ], [ 89.5976581, 26.1041656 ], [ 89.5970089, 26.1043278 ], [ 89.5965261, 26.1042873 ], [ 89.5960149, 26.1041574 ], [ 89.5949682, 26.1037436 ], [ 89.5944732, 26.103419 ], [ 89.5939376, 26.1029484 ], [ 89.5939295, 26.1024291 ], [ 89.5943433, 26.101999 ], [ 89.5944975, 26.1016663 ], [ 89.5950818, 26.100936 ], [ 89.5960027, 26.099008 ], [ 89.5962786, 26.0985617 ], [ 89.5965708, 26.0982209 ], [ 89.597301, 26.0976205 ], [ 89.599496, 26.0966183 ], [ 89.6001938, 26.0963911 ], [ 89.6018532, 26.0957501 ], [ 89.6033138, 26.0953525 ], [ 89.6037114, 26.0951902 ], [ 89.604174, 26.0949224 ], [ 89.6046608, 26.0945329 ], [ 89.6059591, 26.0933709 ], [ 89.6063324, 26.0929733 ], [ 89.6065677, 26.0926001 ], [ 89.6067949, 26.0920483 ], [ 89.6069491, 26.0915046 ], [ 89.6072088, 26.0900643 ], [ 89.6076307, 26.088977 ], [ 89.6078417, 26.0887011 ], [ 89.6080608, 26.0886443 ], [ 89.6083935, 26.0886605 ], [ 89.6092779, 26.0888634 ], [ 89.6095295, 26.0891028 ], [ 89.6097567, 26.0894192 ], [ 89.6100326, 26.0902144 ], [ 89.6100407, 26.0907662 ], [ 89.6099839, 26.0912693 ], [ 89.6098459, 26.0916669 ], [ 89.6091481, 26.0925838 ], [ 89.608783, 26.0935592 ], [ 89.608645, 26.094111 ], [ 89.608718, 26.0946546 ], [ 89.6093591, 26.095604 ], [ 89.6098216, 26.0959935 ], [ 89.610487, 26.0963506 ], [ 89.6111077, 26.0965372 ], [ 89.6116271, 26.0965778 ], [ 89.6120652, 26.0964966 ], [ 89.6126901, 26.0963181 ], [ 89.6132094, 26.0960016 ], [ 89.6142074, 26.0952064 ], [ 89.6147673, 26.094679 ], [ 89.6150392, 26.0945167 ], [ 89.61538, 26.0944761 ], [ 89.6158019, 26.0944761 ], [ 89.6164024, 26.0945735 ], [ 89.6167259, 26.0948391 ], [ 89.6169055, 26.0952064 ], [ 89.6169785, 26.0955797 ], [ 89.6167513, 26.0964479 ], [ 89.6155058, 26.0985974 ], [ 89.6145969, 26.0996523 ], [ 89.614102, 26.1001392 ], [ 89.6138504, 26.100325 ], [ 89.6135177, 26.100682 ], [ 89.6133311, 26.1010066 ], [ 89.6130227, 26.1021426 ], [ 89.6130471, 26.1025727 ], [ 89.6132337, 26.1030677 ], [ 89.6135258, 26.1035464 ], [ 89.6140289, 26.104082 ], [ 89.6151934, 26.104439 ], [ 89.6155991, 26.1044309 ], [ 89.6161427, 26.1043092 ], [ 89.616727, 26.1040657 ], [ 89.6172869, 26.1037412 ], [ 89.6184391, 26.1029662 ], [ 89.6189666, 26.1022603 ], [ 89.6195265, 26.1013271 ], [ 89.619851, 26.1008727 ], [ 89.6203541, 26.1005806 ], [ 89.6206949, 26.1005238 ], [ 89.6210885, 26.100536 ], [ 89.6215348, 26.1006496 ], [ 89.6219555, 26.1009067 ], [ 89.6226302, 26.1018667 ], [ 89.6230846, 26.1027269 ], [ 89.6232469, 26.1031894 ], [ 89.6234254, 26.1042686 ], [ 89.6234579, 26.1051044 ], [ 89.6233199, 26.1061698 ], [ 89.6232794, 26.1072328 ], [ 89.623604, 26.1079063 ], [ 89.6240016, 26.1081822 ], [ 89.624318, 26.1083364 ], [ 89.6255433, 26.108596 ], [ 89.6261438, 26.1085555 ], [ 89.6277017, 26.1082715 ], [ 89.6282779, 26.1080686 ], [ 89.629775, 26.1072815 ], [ 89.6304485, 26.1067143 ], [ 89.6310246, 26.1058623 ], [ 89.6311869, 26.1054971 ], [ 89.6313897, 26.1044098 ], [ 89.6314465, 26.1038012 ], [ 89.6316332, 26.103264 ], [ 89.6317955, 26.1028746 ], [ 89.6323472, 26.1020875 ], [ 89.6337754, 26.1011705 ], [ 89.6345868, 26.1004727 ], [ 89.6356985, 26.0999031 ], [ 89.6362422, 26.0995541 ], [ 89.6363152, 26.0993026 ], [ 89.636234, 26.0989618 ], [ 89.6360636, 26.0986129 ], [ 89.635877, 26.0984506 ], [ 89.6354794, 26.0982883 ], [ 89.6351629, 26.0982153 ], [ 89.6348384, 26.0980611 ], [ 89.633962, 26.0978014 ], [ 89.6331668, 26.0977852 ], [ 89.6328098, 26.0977122 ], [ 89.6325339, 26.0975823 ], [ 89.6323148, 26.0974119 ], [ 89.6321931, 26.0970792 ], [ 89.6322093, 26.0968196 ], [ 89.6326394, 26.0961282 ], [ 89.6328584, 26.0958848 ], [ 89.6329964, 26.0950571 ], [ 89.6331262, 26.0946595 ], [ 89.633321, 26.0943268 ], [ 89.6336374, 26.0939941 ], [ 89.6348708, 26.0930853 ], [ 89.6354307, 26.0927283 ], [ 89.6364166, 26.0923047 ], [ 89.6369359, 26.0921343 ], [ 89.6381288, 26.091899 ], [ 89.6386968, 26.0916312 ], [ 89.6391025, 26.0913391 ], [ 89.6394108, 26.0909821 ], [ 89.6395731, 26.0906575 ], [ 89.6396462, 26.0901625 ], [ 89.6395731, 26.0898866 ], [ 89.639281, 26.0896756 ], [ 89.63864, 26.0896675 ], [ 89.638145, 26.0897649 ], [ 89.637577, 26.0897811 ], [ 89.6371307, 26.0894809 ], [ 89.6368061, 26.0891401 ], [ 89.6366519, 26.0886889 ], [ 89.6365708, 26.0881453 ], [ 89.636514, 26.0870579 ], [ 89.6365708, 26.0866197 ], [ 89.6367169, 26.0860923 ], [ 89.6367169, 26.0858245 ], [ 89.6366033, 26.0856298 ], [ 89.6364653, 26.0856704 ], [ 89.6360839, 26.0861816 ], [ 89.6357837, 26.0862952 ], [ 89.635589, 26.0862384 ], [ 89.6353617, 26.0859868 ], [ 89.6351345, 26.0855811 ], [ 89.6339823, 26.083929 ], [ 89.633609, 26.0830364 ], [ 89.6335441, 26.0824846 ], [ 89.6335035, 26.0812026 ], [ 89.6336739, 26.0807546 ], [ 89.6338606, 26.0803976 ], [ 89.6341284, 26.0801055 ], [ 89.6343556, 26.0797241 ], [ 89.6347045, 26.0792859 ], [ 89.635167, 26.0788315 ], [ 89.6354672, 26.0783041 ], [ 89.6359135, 26.0772411 ], [ 89.6361975, 26.0760028 ], [ 89.6372443, 26.075021 ], [ 89.6376176, 26.07481 ], [ 89.6381937, 26.0746071 ], [ 89.6388023, 26.0744286 ], [ 89.6399707, 26.074169 ], [ 89.6404819, 26.0739823 ], [ 89.6410824, 26.0736496 ], [ 89.6416139, 26.0733372 ], [ 89.643107, 26.0723148 ], [ 89.6439103, 26.0718442 ], [ 89.6451112, 26.0710165 ], [ 89.646085, 26.0701807 ], [ 89.6473021, 26.069573 ], [ 89.6482191, 26.0687291 ], [ 89.6484381, 26.0684207 ], [ 89.648641, 26.0677878 ], [ 89.6488439, 26.0675362 ], [ 89.6493713, 26.0671711 ], [ 89.6495174, 26.0669926 ], [ 89.6497283, 26.066595 ], [ 89.6500935, 26.0651676 ], [ 89.6501178, 26.0628307 ], [ 89.6500042, 26.0623844 ], [ 89.6498419, 26.0621004 ], [ 89.649631, 26.0618975 ], [ 89.6493632, 26.0616784 ], [ 89.6491198, 26.0615973 ], [ 89.6485193, 26.0618245 ], [ 89.6473508, 26.0624169 ], [ 89.6470181, 26.062498 ], [ 89.6463122, 26.062782 ], [ 89.6446974, 26.0631553 ], [ 89.6437155, 26.0631958 ], [ 89.6430583, 26.063066 ], [ 89.6427864, 26.0629199 ], [ 89.6422184, 26.0627414 ], [ 89.6396299, 26.0620192 ], [ 89.6382545, 26.0615243 ], [ 89.6371266, 26.0613457 ], [ 89.6357715, 26.06094 ], [ 89.6353171, 26.0609157 ], [ 89.6349682, 26.0609806 ], [ 89.6346842, 26.0611429 ], [ 89.6343596, 26.0614107 ], [ 89.6338078, 26.0619868 ], [ 89.6331425, 26.0624818 ], [ 89.6327854, 26.0626765 ], [ 89.6318441, 26.0630335 ], [ 89.6315196, 26.0630903 ], [ 89.6305174, 26.0628794 ], [ 89.6294707, 26.0624169 ], [ 89.6282616, 26.0617352 ], [ 89.6280344, 26.0615088 ], [ 89.6278478, 26.0611762 ], [ 89.6277342, 26.0607136 ], [ 89.6277098, 26.058823 ], [ 89.627791, 26.058255 ], [ 89.6277342, 26.0579791 ], [ 89.6275699, 26.0578523 ], [ 89.6268158, 26.0576713 ], [ 89.6260691, 26.0575582 ], [ 89.625677, 26.0575431 ], [ 89.6247342, 26.0573471 ], [ 89.6239424, 26.056608 ], [ 89.6217628, 26.0540649 ], [ 89.6213857, 26.0537783 ], [ 89.620624, 26.0534766 ], [ 89.619176, 26.0535973 ], [ 89.6182219, 26.0538469 ], [ 89.6176714, 26.0541109 ], [ 89.6171812, 26.0544503 ], [ 89.6167664, 26.0549178 ], [ 89.6163214, 26.0559284 ], [ 89.6161555, 26.0566449 ], [ 89.6162611, 26.056878 ], [ 89.6173244, 26.058243 ], [ 89.6178599, 26.0589896 ], [ 89.6180258, 26.0592989 ], [ 89.6180258, 26.0595477 ], [ 89.6179504, 26.0599097 ], [ 89.6178297, 26.0601737 ], [ 89.6175809, 26.0603019 ], [ 89.6172566, 26.0603019 ], [ 89.6166834, 26.0601737 ], [ 89.6160499, 26.0599022 ], [ 89.6153334, 26.0597137 ], [ 89.6147263, 26.0595854 ], [ 89.6135875, 26.0595025 ], [ 89.6120942, 26.0594799 ], [ 89.6108762, 26.0597778 ], [ 89.6105368, 26.0598909 ], [ 89.6102427, 26.0600945 ], [ 89.6099788, 26.0604414 ], [ 89.6096695, 26.061271 ], [ 89.6096545, 26.0624476 ], [ 89.6094659, 26.0633299 ], [ 89.6092208, 26.0639748 ], [ 89.6087608, 26.0646761 ], [ 89.6079462, 26.0650306 ], [ 89.6075164, 26.0650985 ], [ 89.6066792, 26.0648873 ], [ 89.6063248, 26.0647139 ], [ 89.605563, 26.0641784 ], [ 89.6050804, 26.063649 ], [ 89.6048466, 26.0631437 ], [ 89.6047787, 26.0627213 ], [ 89.6047787, 26.0615976 ], [ 89.6048692, 26.0610772 ], [ 89.6050276, 26.0605719 ], [ 89.6052538, 26.060188 ], [ 89.6057139, 26.0595093 ], [ 89.6062795, 26.0589286 ], [ 89.606996, 26.0583554 ], [ 89.6074334, 26.057835 ], [ 89.6075918, 26.0577671 ], [ 89.6082555, 26.0577294 ], [ 89.6099373, 26.0579029 ], [ 89.6108498, 26.0579104 ], [ 89.6113325, 26.0578501 ], [ 89.6119886, 26.0576277 ], [ 89.6124487, 26.0572694 ], [ 89.6129992, 26.0565212 ], [ 89.6132255, 26.0560008 ], [ 89.6133763, 26.0553749 ], [ 89.6133763, 26.054764 ], [ 89.6132783, 26.0540626 ], [ 89.6130219, 26.053414 ], [ 89.6127269, 26.0528603 ], [ 89.611411, 26.0514567 ], [ 89.6103778, 26.0507159 ], [ 89.609403, 26.0503113 ], [ 89.6080287, 26.0498825 ], [ 89.6041784, 26.0488882 ], [ 89.6034668, 26.0485471 ], [ 89.6029307, 26.047699 ], [ 89.602112, 26.046929 ], [ 89.6016295, 26.0465859 ], [ 89.6005085, 26.0454942 ], [ 89.5998359, 26.0449386 ], [ 89.5992121, 26.0445876 ], [ 89.5986662, 26.0444122 ], [ 89.5982958, 26.0444317 ], [ 89.595547, 26.0449678 ], [ 89.5945528, 26.0449191 ], [ 89.5930809, 26.0449678 ], [ 89.5920852, 26.0449055 ], [ 89.5921305, 26.0431329 ], [ 89.5925426, 26.0431452 ], [ 89.5925694, 26.0429289 ], [ 89.5931915, 26.0428877 ], [ 89.593377, 26.0428383 ], [ 89.5934305, 26.0427229 ], [ 89.5935088, 26.0416269 ], [ 89.5936876, 26.0410126 ], [ 89.5949875, 26.0410534 ], [ 89.5953754, 26.0409649 ], [ 89.5959334, 26.0407199 ], [ 89.5962329, 26.0404817 ], [ 89.5968658, 26.0398556 ], [ 89.5970631, 26.0395494 ], [ 89.5971312, 26.0392431 ], [ 89.5971108, 26.0384809 ], [ 89.596927, 26.0379644 ], [ 89.5956612, 26.0365556 ], [ 89.5952188, 26.0361405 ], [ 89.5948513, 26.0358887 ], [ 89.5943818, 26.0357458 ], [ 89.5937557, 26.0357322 ], [ 89.5930887, 26.0356505 ], [ 89.5924286, 26.0356641 ], [ 89.5918841, 26.0358274 ], [ 89.5914826, 26.0360997 ], [ 89.5911151, 26.0365434 ], [ 89.5908429, 26.037081 ], [ 89.5905298, 26.0375438 ], [ 89.5903529, 26.0379045 ], [ 89.5902304, 26.0383877 ], [ 89.5896315, 26.0389661 ], [ 89.5889374, 26.0392179 ], [ 89.5885426, 26.0390954 ], [ 89.5880183, 26.0390139 ], [ 89.5874589, 26.0385571 ], [ 89.5868157, 26.0381842 ], [ 89.5868918, 26.0378951 ], [ 89.5871047, 26.037086 ], [ 89.5872072, 26.0362376 ], [ 89.5871326, 26.0357155 ], [ 89.5868343, 26.035268 ], [ 89.5860093, 26.034732 ], [ 89.5854312, 26.0344337 ], [ 89.5840142, 26.0338277 ], [ 89.5836693, 26.0335666 ], [ 89.5832963, 26.0330632 ], [ 89.5831379, 26.0325878 ], [ 89.5829887, 26.0310383 ], [ 89.5830073, 26.0302832 ], [ 89.5834362, 26.0296399 ], [ 89.5839769, 26.0290712 ], [ 89.5852448, 26.0274752 ], [ 89.5853753, 26.0265802 ], [ 89.5852075, 26.0263472 ], [ 89.5843312, 26.0256013 ], [ 89.5834082, 26.0244546 ], [ 89.5831845, 26.0243521 ], [ 89.5828489, 26.0244174 ], [ 89.5825785, 26.0246784 ], [ 89.5821683, 26.0253123 ], [ 89.5818513, 26.0256573 ], [ 89.5814598, 26.0258158 ], [ 89.5791011, 26.0263751 ], [ 89.5785977, 26.0263472 ], [ 89.5785325, 26.0262166 ], [ 89.5785138, 26.0252844 ], [ 89.5786816, 26.0230665 ], [ 89.5785418, 26.0226004 ], [ 89.5781968, 26.0217706 ], [ 89.5785977, 26.0204748 ], [ 89.5788681, 26.0197942 ], [ 89.5791757, 26.0169145 ], [ 89.5793342, 26.0162619 ], [ 89.579474, 26.0160102 ], [ 89.5799122, 26.0156559 ], [ 89.5802199, 26.0153389 ], [ 89.5805182, 26.0148262 ], [ 89.5807233, 26.0141829 ], [ 89.5808911, 26.0131798 ], [ 89.5807885, 26.0122102 ], [ 89.5809377, 26.0113525 ], [ 89.5808724, 26.0101406 ], [ 89.5807326, 26.0098656 ], [ 89.5805275, 26.0095672 ], [ 89.5797537, 26.0090918 ], [ 89.5790918, 26.0084765 ], [ 89.5789613, 26.0078985 ], [ 89.578607, 26.0072459 ], [ 89.578607, 26.0068543 ], [ 89.5791198, 26.0063323 ], [ 89.5793901, 26.0059873 ], [ 89.5795766, 26.0056517 ], [ 89.5800614, 26.0037126 ], [ 89.5800614, 26.0034143 ], [ 89.5798749, 26.0028083 ], [ 89.5798749, 26.0026125 ], [ 89.5799215, 26.0024447 ], [ 89.5801627, 26.002223 ], [ 89.5801863, 26.0020178 ], [ 89.5813069, 26.0019784 ], [ 89.5813227, 26.0015917 ], [ 89.58152, 26.0015601 ], [ 89.58152, 26.0013549 ], [ 89.5829089, 26.0012839 ], [ 89.5828931, 26.0008736 ], [ 89.5833982, 26.0006881 ], [ 89.5837375, 26.0004435 ], [ 89.5840769, 25.9999542 ], [ 89.5841479, 25.9996464 ], [ 89.5841242, 25.9992203 ], [ 89.5838559, 25.9986008 ], [ 89.5845491, 25.998022 ], [ 89.5850281, 25.9974194 ], [ 89.5853989, 25.9967396 ], [ 89.585847, 25.9956395 ], [ 89.5859242, 25.9950215 ], [ 89.5859397, 25.9943726 ], [ 89.5858161, 25.9933837 ], [ 89.5854916, 25.9926112 ], [ 89.5849354, 25.9920859 ], [ 89.5841165, 25.9915142 ], [ 89.5827433, 25.9901571 ], [ 89.5838813, 25.9881431 ], [ 89.58463, 25.9864698 ], [ 89.5848246, 25.9858559 ], [ 89.5850792, 25.985474 ], [ 89.585184, 25.9849185 ], [ 89.585169, 25.9841324 ], [ 89.5849444, 25.9830168 ], [ 89.5851166, 25.9825376 ], [ 89.5853562, 25.9824104 ], [ 89.5859552, 25.9819237 ], [ 89.5862996, 25.9813607 ], [ 89.5863969, 25.9810238 ], [ 89.5864044, 25.9807243 ], [ 89.5863145, 25.9803874 ], [ 89.5861124, 25.980043 ], [ 89.5855359, 25.9792943 ], [ 89.5850855, 25.9789798 ], [ 89.5852247, 25.9789359 ], [ 89.5852173, 25.9787308 ], [ 89.5851368, 25.9786649 ], [ 89.58521, 25.9783646 ], [ 89.584961, 25.9783646 ], [ 89.5849464, 25.9782694 ], [ 89.5849684, 25.9775371 ], [ 89.5850416, 25.9772734 ], [ 89.5850636, 25.9758527 ], [ 89.5849244, 25.9758234 ], [ 89.584507, 25.9755597 ], [ 89.5843019, 25.9755451 ], [ 89.5840163, 25.9756403 ], [ 89.5837673, 25.9757794 ], [ 89.5834597, 25.9760431 ], [ 89.5833352, 25.9763067 ], [ 89.5833425, 25.9765631 ], [ 89.583467, 25.9769951 ], [ 89.5838918, 25.9779618 ], [ 89.5837772, 25.9785196 ], [ 89.5833352, 25.978804 ], [ 89.5829764, 25.9788626 ], [ 89.5825113, 25.979053 ], [ 89.5814934, 25.9791629 ], [ 89.5809295, 25.9791775 ], [ 89.5802191, 25.979075 ], [ 89.5795087, 25.9790311 ], [ 89.578886, 25.9791296 ], [ 89.5779512, 25.9790739 ], [ 89.577212, 25.9793532 ], [ 89.576637, 25.9799774 ], [ 89.5764728, 25.980996 ], [ 89.5764892, 25.9816859 ], [ 89.5762921, 25.9820637 ], [ 89.5749614, 25.9809138 ], [ 89.5741072, 25.9806674 ], [ 89.5737951, 25.9795175 ], [ 89.5734172, 25.9787454 ], [ 89.5732858, 25.9782197 ], [ 89.5737787, 25.9777597 ], [ 89.5742551, 25.9774312 ], [ 89.5748955, 25.9774312 ], [ 89.5750929, 25.9774312 ], [ 89.5754871, 25.9772341 ], [ 89.5759471, 25.9768726 ], [ 89.5765056, 25.9761137 ], [ 89.5768506, 25.9754073 ], [ 89.5774091, 25.9747831 ], [ 89.5780991, 25.9741095 ], [ 89.5783619, 25.9735674 ], [ 89.5784276, 25.9730253 ], [ 89.5783619, 25.9723354 ], [ 89.5780498, 25.9715468 ], [ 89.5776063, 25.9709719 ], [ 89.5774913, 25.9706433 ], [ 89.5775898, 25.9701998 ], [ 89.5775406, 25.9697727 ], [ 89.5773763, 25.9693784 ], [ 89.5770477, 25.9690827 ], [ 89.5761606, 25.968672 ], [ 89.5732858, 25.9683106 ], [ 89.5714542, 25.9679821 ], [ 89.5698771, 25.9678835 ], [ 89.5690393, 25.9681792 ], [ 89.5685136, 25.9686227 ], [ 89.5677415, 25.969707 ], [ 89.5673473, 25.9705448 ], [ 89.5674458, 25.9731567 ], [ 89.5675608, 25.9737843 ], [ 89.567758, 25.9744742 ], [ 89.5680701, 25.9752792 ], [ 89.5685301, 25.9769548 ], [ 89.5684151, 25.9786468 ], [ 89.5684643, 25.9789754 ], [ 89.5682836, 25.9795011 ], [ 89.5671207, 25.979807 ], [ 89.5663945, 25.9805196 ], [ 89.5659509, 25.9805524 ], [ 89.5656717, 25.9804703 ], [ 89.5635689, 25.9789425 ], [ 89.5633882, 25.978614 ], [ 89.5633283, 25.9780735 ], [ 89.5632916, 25.9771563 ], [ 89.5630225, 25.9762513 ], [ 89.5628268, 25.9759578 ], [ 89.5628268, 25.9756031 ], [ 89.5628758, 25.9752362 ], [ 89.5633038, 25.9747226 ], [ 89.5634995, 25.974588 ], [ 89.5636218, 25.9744413 ], [ 89.5636707, 25.9742921 ], [ 89.5624477, 25.9733137 ], [ 89.5618118, 25.9729223 ], [ 89.5611758, 25.9721274 ], [ 89.5607722, 25.9713936 ], [ 89.5604482, 25.9704874 ], [ 89.5594209, 25.9703406 ], [ 89.5582223, 25.9699615 ], [ 89.5578799, 25.9700104 ], [ 89.5576598, 25.9701327 ], [ 89.5574396, 25.9687752 ], [ 89.5574886, 25.967699 ], [ 89.5576109, 25.9664516 ], [ 89.557354, 25.9656933 ], [ 89.557195, 25.9655588 ], [ 89.5562656, 25.965461 ], [ 89.5557152, 25.9653387 ], [ 89.5547736, 25.9654121 ], [ 89.5531103, 25.9657056 ], [ 89.552083, 25.965779 ], [ 89.5514715, 25.9659624 ], [ 89.5505665, 25.9660602 ], [ 89.5501446, 25.9661458 ], [ 89.5498511, 25.9663048 ], [ 89.5491051, 25.9669775 ], [ 89.5485792, 25.9673444 ], [ 89.5475152, 25.9678458 ], [ 89.5463778, 25.9680292 ], [ 89.5452649, 25.968017 ], [ 89.5447024, 25.9681246 ], [ 89.5427456, 25.9687606 ], [ 89.5413514, 25.9694577 ], [ 89.5409024, 25.9697163 ], [ 89.5402263, 25.9701058 ], [ 89.5395659, 25.970913 ], [ 89.5384163, 25.9727866 ], [ 89.5381839, 25.9734715 ], [ 89.5380616, 25.9740096 ], [ 89.5381839, 25.9748534 ], [ 89.5381228, 25.975416 ], [ 89.538135, 25.9762109 ], [ 89.5384163, 25.9769569 ], [ 89.5393457, 25.9780919 ], [ 89.5402997, 25.9796573 ], [ 89.540263, 25.9804767 ], [ 89.540422, 25.9814795 ], [ 89.5411924, 25.9825557 ], [ 89.5417305, 25.9833996 ], [ 89.5400795, 25.9842251 ], [ 89.5392112, 25.9845161 ], [ 89.5373034, 25.9852499 ], [ 89.5366674, 25.9856657 ], [ 89.5363005, 25.9863384 ], [ 89.5362394, 25.989276 ], [ 89.5364106, 25.9898263 ], [ 89.536912, 25.9903277 ], [ 89.5378293, 25.990878 ], [ 89.5380494, 25.9912572 ], [ 89.537707, 25.9927737 ], [ 89.5375724, 25.9940822 ], [ 89.5377559, 25.9944614 ], [ 89.5382573, 25.9948038 ], [ 89.5387587, 25.9949995 ], [ 89.5402018, 25.9951511 ], [ 89.5408622, 25.9953407 ], [ 89.5417183, 25.9954874 ], [ 89.5422564, 25.9957198 ], [ 89.5430024, 25.9962701 ], [ 89.5434916, 25.9967104 ], [ 89.5443355, 25.9970162 ], [ 89.5450998, 25.9971384 ], [ 89.5463106, 25.9975665 ], [ 89.5474724, 25.9978845 ], [ 89.5475847, 25.9979326 ], [ 89.5480717, 25.9981413 ], [ 89.5484141, 25.9987772 ], [ 89.5488299, 25.9990218 ], [ 89.5488703, 26.000605 ], [ 89.5488752, 26.0007984 ], [ 89.5486489, 26.0009577 ], [ 89.5478338, 26.001344 ], [ 89.5476804, 26.0015094 ], [ 89.5461883, 26.0025028 ], [ 89.5451917, 26.003618 ], [ 89.5442845, 26.0049175 ], [ 89.5440516, 26.0054079 ], [ 89.5438706, 26.0056548 ], [ 89.5424801, 26.0057938 ], [ 89.5418311, 26.0059329 ], [ 89.5410431, 26.0062574 ], [ 89.5404405, 26.0062574 ], [ 89.5395598, 26.0059329 ], [ 89.5385401, 26.0058865 ], [ 89.5380766, 26.005423 ], [ 89.5375667, 26.0052376 ], [ 89.5368714, 26.0051449 ], [ 89.5371958, 26.0043569 ], [ 89.537613, 26.0041251 ], [ 89.5398843, 26.0044496 ], [ 89.540626, 26.0050985 ], [ 89.5413212, 26.0051913 ], [ 89.5421556, 26.0048668 ], [ 89.5424801, 26.0043105 ], [ 89.5424337, 26.0038007 ], [ 89.5416457, 26.0036616 ], [ 89.5411822, 26.0032908 ], [ 89.540765, 26.0025491 ], [ 89.5406723, 26.0019929 ], [ 89.5403478, 26.0019929 ], [ 89.539838, 26.0023637 ], [ 89.5390963, 26.0026419 ], [ 89.5379375, 26.0028736 ], [ 89.5369177, 26.0030127 ], [ 89.5365469, 26.00292 ], [ 89.5358053, 26.00292 ], [ 89.5350173, 26.0032908 ], [ 89.5349502, 26.0034128 ], [ 89.5345074, 26.0042178 ], [ 89.5336267, 26.0045423 ], [ 89.5328387, 26.0050522 ], [ 89.5324333, 26.0048831 ], [ 89.531872, 26.0048831 ], [ 89.5312171, 26.0049767 ], [ 89.5305756, 26.0052172 ], [ 89.5298673, 26.0057251 ], [ 89.5292993, 26.0063265 ], [ 89.5292391, 26.0065248 ], [ 89.5281747, 26.0064805 ], [ 89.5265928, 26.0066135 ], [ 89.5263266, 26.0064065 ], [ 89.5257442, 26.0062998 ], [ 89.5249423, 26.0064334 ], [ 89.523098, 26.0070482 ], [ 89.5226703, 26.0073021 ], [ 89.5215007, 26.0087467 ], [ 89.5193157, 26.0089995 ], [ 89.5185806, 26.0094138 ], [ 89.5178522, 26.0096677 ], [ 89.5167162, 26.0095474 ], [ 89.5158341, 26.0088658 ], [ 89.5142303, 26.0077699 ], [ 89.5133884, 26.0070616 ], [ 89.5126533, 26.006233 ], [ 89.5112366, 26.004271 ], [ 89.5110361, 26.0036562 ], [ 89.5104882, 26.0029612 ], [ 89.5097798, 26.0024667 ], [ 89.509165, 26.002146 ], [ 89.5086973, 26.0020257 ], [ 89.5071094, 26.0020265 ], [ 89.5064653, 26.0019054 ], [ 89.5051623, 26.0019856 ], [ 89.5042267, 26.0021593 ], [ 89.5029036, 26.0029479 ], [ 89.5010741, 26.0037779 ], [ 89.5003678, 26.0038849 ], [ 89.499212, 26.0041418 ], [ 89.4977779, 26.0047197 ], [ 89.4969217, 26.0054047 ], [ 89.4958301, 26.0054047 ], [ 89.4951879, 26.0052548 ], [ 89.4937752, 26.005105 ], [ 89.4931331, 26.0052548 ], [ 89.4927264, 26.0054903 ], [ 89.491806, 26.0062394 ], [ 89.4912188, 26.0062376 ], [ 89.4910017, 26.0060204 ], [ 89.4909086, 26.0051519 ], [ 89.4909396, 26.0044695 ], [ 89.4905674, 26.0042214 ], [ 89.4894947, 26.0037239 ], [ 89.4882411, 26.0028123 ], [ 89.488136, 26.002481 ], [ 89.4881251, 26.0022961 ], [ 89.4881115, 26.0020637 ], [ 89.4878415, 26.0013642 ], [ 89.4874365, 26.000726 ], [ 89.4867212, 26.000189 ], [ 89.4821455, 25.9984512 ], [ 89.4811689, 25.9977696 ], [ 89.4803703, 25.9975439 ], [ 89.4797202, 25.997434 ], [ 89.4787692, 25.9975862 ], [ 89.4751555, 25.9979666 ], [ 89.4731394, 25.9982328 ], [ 89.4664732, 25.998259 ], [ 89.463594, 25.9981728 ], [ 89.461354, 25.9987564 ], [ 89.4598936, 25.9998316 ], [ 89.4591875, 26.0001365 ], [ 89.4579037, 26.0009871 ], [ 89.4565268, 26.0017172 ], [ 89.4551788, 26.0026961 ], [ 89.4523545, 26.005007 ], [ 89.4489524, 26.0071413 ], [ 89.4474278, 26.0078795 ], [ 89.4458231, 26.0084251 ], [ 89.4451812, 26.0085214 ], [ 89.4410569, 26.0088103 ], [ 89.4393559, 26.009051 ], [ 89.437382, 26.0094361 ], [ 89.4365797, 26.0094522 ], [ 89.4360982, 26.0095164 ], [ 89.4331294, 26.0102546 ], [ 89.4310823, 26.0110685 ], [ 89.4300876, 26.0115746 ], [ 89.4284876, 26.0125032 ], [ 89.4273651, 26.0132325 ], [ 89.4269114, 26.0139655 ], [ 89.4266496, 26.0152569 ], [ 89.4271538, 26.0157291 ], [ 89.4277121, 26.0151398 ], [ 89.4280457, 26.0151697 ], [ 89.4279759, 26.0154838 ], [ 89.4274349, 26.0167578 ], [ 89.4272779, 26.0177176 ], [ 89.4272953, 26.0189218 ], [ 89.4276501, 26.0202113 ], [ 89.4281153, 26.0211418 ], [ 89.4286737, 26.0224136 ], [ 89.4293561, 26.0236233 ], [ 89.4302246, 26.024895 ], [ 89.4308139, 26.0260737 ], [ 89.4317081, 26.0275781 ], [ 89.4330325, 26.0299837 ], [ 89.4335187, 26.031241 ], [ 89.4337617, 26.0321044 ], [ 89.43346, 26.033127 ], [ 89.4329487, 26.0353064 ], [ 89.4326218, 26.036966 ], [ 89.4326637, 26.0383155 ], [ 89.4323748, 26.0391593 ], [ 89.4319368, 26.0399699 ], [ 89.4302928, 26.0427305 ], [ 89.4285558, 26.0440643 ], [ 89.427284, 26.0444365 ], [ 89.4263225, 26.0447777 ], [ 89.4256401, 26.045243 ], [ 89.4249887, 26.0458013 ], [ 89.4242443, 26.04698 ], [ 89.423717, 26.0475073 ], [ 89.4232207, 26.0474763 ], [ 89.4229105, 26.0470265 ], [ 89.4230966, 26.0462821 ], [ 89.4236239, 26.0453826 ], [ 89.423779, 26.0442969 ], [ 89.423717, 26.0439247 ], [ 89.4229105, 26.0439867 ], [ 89.4211362, 26.0439247 ], [ 89.4202367, 26.0430872 ], [ 89.4195233, 26.0425599 ], [ 89.418965, 26.0422497 ], [ 89.4181895, 26.0420016 ], [ 89.4169178, 26.0420326 ], [ 89.4158631, 26.0420016 ], [ 89.4145294, 26.0418775 ], [ 89.4134747, 26.0413502 ], [ 89.412234, 26.041102 ], [ 89.4112104, 26.041009 ], [ 89.4096843, 26.0414432 ], [ 89.4088158, 26.0417534 ], [ 89.407467, 26.0419263 ], [ 89.4071854, 26.0419135 ], [ 89.4069607, 26.0417865 ], [ 89.4068589, 26.0415053 ], [ 89.4065798, 26.0412095 ], [ 89.4065548, 26.0406867 ], [ 89.4067186, 26.0404528 ], [ 89.4069407, 26.0402891 ], [ 89.4073032, 26.0402891 ], [ 89.4077476, 26.0400319 ], [ 89.4077944, 26.0396343 ], [ 89.4075956, 26.0392016 ], [ 89.4071863, 26.0388391 ], [ 89.4068491, 26.0386715 ], [ 89.4067419, 26.0384123 ], [ 89.4065431, 26.0382135 ], [ 89.4065081, 26.0374768 ], [ 89.4066016, 26.0371376 ], [ 89.4067419, 26.0368453 ], [ 89.406929, 26.0366231 ], [ 89.4072214, 26.0365763 ], [ 89.4075605, 26.0362021 ], [ 89.4074202, 26.0360267 ], [ 89.4068121, 26.0359215 ], [ 89.4064379, 26.0357929 ], [ 89.4059117, 26.0353134 ], [ 89.4055866, 26.0349743 ], [ 89.4053293, 26.034565 ], [ 89.4050954, 26.034296 ], [ 89.4049434, 26.0340271 ], [ 89.4049083, 26.0336996 ], [ 89.4051539, 26.0333137 ], [ 89.4053995, 26.0330916 ], [ 89.4056334, 26.032998 ], [ 89.4059608, 26.032998 ], [ 89.406756, 26.0331617 ], [ 89.4070366, 26.0331617 ], [ 89.4070483, 26.0329512 ], [ 89.406935, 26.0327193 ], [ 89.4069237, 26.0324014 ], [ 89.4066755, 26.031595 ], [ 89.4065572, 26.0313667 ], [ 89.4061245, 26.0311328 ], [ 89.4056801, 26.0310042 ], [ 89.4045692, 26.0308639 ], [ 89.4042301, 26.0307353 ], [ 89.4036254, 26.0298817 ], [ 89.4035285, 26.0292267 ], [ 89.4033287, 26.0287504 ], [ 89.4031557, 26.0284982 ], [ 89.4031267, 26.0274081 ], [ 89.4028151, 26.0271452 ], [ 89.4025579, 26.0268295 ], [ 89.4022655, 26.0266073 ], [ 89.4012365, 26.0262097 ], [ 89.4009909, 26.0262916 ], [ 89.4000203, 26.0263384 ], [ 89.3991071, 26.0261513 ], [ 89.3979594, 26.0258101 ], [ 89.3974011, 26.0254689 ], [ 89.396336, 26.024623 ], [ 89.3956914, 26.0241692 ], [ 89.3944087, 26.0233404 ], [ 89.3937102, 26.0230345 ], [ 89.3924867, 26.0227582 ], [ 89.3920723, 26.0227319 ], [ 89.3916645, 26.022778 ], [ 89.3911044, 26.0229095 ], [ 89.3911044, 26.0216691 ], [ 89.3909183, 26.0202113 ], [ 89.3907012, 26.0192187 ], [ 89.3920202, 26.018639 ], [ 89.3918586, 26.018208 ], [ 89.3917662, 26.0182388 ], [ 89.390981, 26.0164991 ], [ 89.3925283, 26.0159602 ], [ 89.3929055, 26.0157601 ], [ 89.3934597, 26.0152674 ], [ 89.3934597, 26.0138279 ], [ 89.3947222, 26.0136778 ], [ 89.3947683, 26.0133468 ], [ 89.3947025, 26.012953 ], [ 89.3942993, 26.0125498 ], [ 89.393683, 26.0123577 ], [ 89.3934161, 26.0095482 ], [ 89.393426, 26.0088215 ], [ 89.3935591, 26.0082767 ], [ 89.3935591, 26.0080023 ], [ 89.3935258, 26.0076447 ], [ 89.3933844, 26.0072871 ], [ 89.3933844, 26.0071624 ], [ 89.3932846, 26.007021 ], [ 89.3932582, 26.0066801 ], [ 89.3928635, 26.0069301 ], [ 89.3927319, 26.0071143 ], [ 89.3926398, 26.0074695 ], [ 89.3927188, 26.0085878 ], [ 89.3926267, 26.0087852 ], [ 89.392482, 26.0088904 ], [ 89.3920873, 26.0089694 ], [ 89.3906589, 26.0090616 ], [ 89.3903861, 26.0088707 ], [ 89.3901543, 26.0086389 ], [ 89.3898407, 26.0085162 ], [ 89.3895953, 26.0085844 ], [ 89.3895953, 26.0087343 ], [ 89.3896089, 26.0089389 ], [ 89.389868, 26.0093207 ], [ 89.3885726, 26.0097025 ], [ 89.3882317, 26.0097298 ], [ 89.3877408, 26.0095934 ], [ 89.3873044, 26.0096343 ], [ 89.3871408, 26.0097298 ], [ 89.3870044, 26.0098798 ], [ 89.3867863, 26.0103298 ], [ 89.3863635, 26.0105616 ], [ 89.3858863, 26.0106707 ], [ 89.385409, 26.0106979 ], [ 89.38455, 26.0106434 ], [ 89.3843891, 26.0107797 ], [ 89.3840754, 26.0108752 ], [ 89.3838027, 26.0108888 ], [ 89.3834891, 26.0109843 ], [ 89.38233, 26.0111479 ], [ 89.3820573, 26.0111206 ], [ 89.3814682, 26.0109434 ], [ 89.3804728, 26.0109434 ], [ 89.3798592, 26.0105343 ], [ 89.3792592, 26.0103979 ], [ 89.3789456, 26.0103843 ], [ 89.3785774, 26.0101388 ], [ 89.3779502, 26.0094434 ], [ 89.3774729, 26.0094843 ], [ 89.3766956, 26.0094298 ], [ 89.3760957, 26.0092525 ], [ 89.3759457, 26.0092525 ], [ 89.3757684, 26.009348 ], [ 89.3756048, 26.0095389 ], [ 89.375373, 26.0101525 ], [ 89.3741594, 26.0117343 ], [ 89.3738594, 26.0120206 ], [ 89.373573, 26.012007 ], [ 89.3733412, 26.0118433 ], [ 89.3732185, 26.0116252 ], [ 89.3732457, 26.011407 ], [ 89.373573, 26.0109297 ], [ 89.3733548, 26.0108479 ], [ 89.372973, 26.0109979 ], [ 89.3729458, 26.0112979 ], [ 89.3730548, 26.0116933 ], [ 89.3727685, 26.0118161 ], [ 89.3724412, 26.0118161 ], [ 89.3721685, 26.011707 ], [ 89.371814, 26.0115024 ], [ 89.3716503, 26.0113525 ], [ 89.3716231, 26.0111343 ], [ 89.3717049, 26.0109843 ], [ 89.3717322, 26.0107661 ], [ 89.3718276, 26.0106161 ], [ 89.372264, 26.0104388 ], [ 89.372373, 26.0102343 ], [ 89.372373, 26.0095798 ], [ 89.3722094, 26.0094161 ], [ 89.371964, 26.0093071 ], [ 89.3720212, 26.0090207 ], [ 89.3719667, 26.0088025 ], [ 89.3717485, 26.0087071 ], [ 89.3715167, 26.008748 ], [ 89.3712713, 26.0089389 ], [ 89.3708349, 26.0094298 ], [ 89.3706985, 26.0094298 ], [ 89.3705076, 26.009348 ], [ 89.3703304, 26.0091843 ], [ 89.3700986, 26.008748 ], [ 89.3698804, 26.0086253 ], [ 89.3696895, 26.0085844 ], [ 89.3695804, 26.0086253 ], [ 89.3694577, 26.0088434 ], [ 89.369294, 26.0089252 ], [ 89.369185, 26.0088843 ], [ 89.3688168, 26.0084889 ], [ 89.3685577, 26.008448 ], [ 89.3683123, 26.0084889 ], [ 89.3679577, 26.0090616 ], [ 89.367985, 26.0097434 ], [ 89.3678759, 26.009907 ], [ 89.3676168, 26.0100161 ], [ 89.3674641, 26.0099207 ], [ 89.3672596, 26.0101116 ], [ 89.3672459, 26.010657 ], [ 89.3671641, 26.010957 ], [ 89.3663596, 26.0108752 ], [ 89.3661141, 26.0107525 ], [ 89.3661687, 26.0105616 ], [ 89.3666459, 26.0103979 ], [ 89.3669459, 26.0102343 ], [ 89.3673277, 26.009757 ], [ 89.3672759, 26.0095661 ], [ 89.3671123, 26.009348 ], [ 89.366935, 26.0093071 ], [ 89.3664714, 26.0096752 ], [ 89.3661987, 26.0096889 ], [ 89.3659941, 26.009648 ], [ 89.3658714, 26.0095389 ], [ 89.3656396, 26.0089662 ], [ 89.3653532, 26.0084207 ], [ 89.3651487, 26.0082707 ], [ 89.3648869, 26.0083525 ], [ 89.3646831, 26.0083623 ], [ 89.3643295, 26.008268 ], [ 89.3640278, 26.0084071 ], [ 89.3637142, 26.0083934 ], [ 89.3633869, 26.0084753 ], [ 89.3632915, 26.0085707 ], [ 89.3633869, 26.0092116 ], [ 89.3632779, 26.0096616 ], [ 89.3631279, 26.0098798 ], [ 89.3629779, 26.0098934 ], [ 89.3626915, 26.0095525 ], [ 89.3625961, 26.0092661 ], [ 89.3625688, 26.0089116 ], [ 89.3624597, 26.008598 ], [ 89.362217, 26.0089662 ], [ 89.3620397, 26.0091162 ], [ 89.3618079, 26.0092252 ], [ 89.3610852, 26.0092389 ], [ 89.3608397, 26.0093071 ], [ 89.360267, 26.009648 ], [ 89.3600516, 26.0096867 ], [ 89.3599992, 26.0083699 ], [ 89.3598496, 26.0079284 ], [ 89.3597448, 26.0077863 ], [ 89.3595129, 26.0078611 ], [ 89.3593782, 26.008108 ], [ 89.3593558, 26.0083325 ], [ 89.3594456, 26.0095745 ], [ 89.3591773, 26.0094405 ], [ 89.3589564, 26.009144 ], [ 89.3589215, 26.0088301 ], [ 89.3589564, 26.0084174 ], [ 89.3588518, 26.0082779 ], [ 89.3587006, 26.0081965 ], [ 89.3584448, 26.0082837 ], [ 89.3582879, 26.0084174 ], [ 89.3582175, 26.0085563 ], [ 89.3581295, 26.0083075 ], [ 89.356959, 26.0082676 ], [ 89.3568925, 26.0084405 ], [ 89.35656, 26.0084938 ], [ 89.3565068, 26.0088529 ], [ 89.3567114, 26.0091378 ], [ 89.3567728, 26.0094781 ], [ 89.3566531, 26.009784 ], [ 89.3564632, 26.0100683 ], [ 89.3561841, 26.0099753 ], [ 89.355988, 26.0093983 ], [ 89.3557772, 26.0084485 ], [ 89.3550968, 26.0084805 ], [ 89.3552165, 26.0092386 ], [ 89.3553529, 26.0096207 ], [ 89.3549744, 26.0100993 ], [ 89.3545711, 26.0102234 ], [ 89.3539446, 26.0105956 ], [ 89.3542141, 26.0107646 ], [ 89.3542451, 26.011364 ], [ 89.3541521, 26.0115294 ], [ 89.3539557, 26.0117051 ], [ 89.3536974, 26.0117671 ], [ 89.353253, 26.0117361 ], [ 89.3530167, 26.0115621 ], [ 89.353105, 26.0112072 ], [ 89.353054, 26.0110541 ], [ 89.3527053, 26.0105523 ], [ 89.3521864, 26.0100674 ], [ 89.3520758, 26.0098548 ], [ 89.3518717, 26.0096761 ], [ 89.3516761, 26.0096251 ], [ 89.3515655, 26.0096506 ], [ 89.3514379, 26.0098548 ], [ 89.3512848, 26.010127 ], [ 89.3510381, 26.0108414 ], [ 89.3507659, 26.0112327 ], [ 89.3504767, 26.0114624 ], [ 89.3502641, 26.0115559 ], [ 89.3500684, 26.0114879 ], [ 89.3499238, 26.0113603 ], [ 89.3498303, 26.0111647 ], [ 89.3498502, 26.0109058 ], [ 89.3499834, 26.0107224 ], [ 89.350094, 26.0103226 ], [ 89.3500259, 26.0100929 ], [ 89.3495751, 26.0096251 ], [ 89.3493369, 26.0096081 ], [ 89.3488606, 26.0098463 ], [ 89.3485119, 26.0101695 ], [ 89.3484523, 26.0103821 ], [ 89.3485119, 26.0105693 ], [ 89.3492859, 26.0107649 ], [ 89.349371, 26.01085 ], [ 89.3493284, 26.0109435 ], [ 89.3489202, 26.0112157 ], [ 89.3487926, 26.0113773 ], [ 89.3486395, 26.0120408 ], [ 89.3485704, 26.0121662 ], [ 89.3479059, 26.0122088 ], [ 89.3477525, 26.0121747 ], [ 89.3472073, 26.0116295 ], [ 89.346858, 26.0116039 ], [ 89.3465343, 26.0117573 ], [ 89.3456227, 26.0120384 ], [ 89.3447111, 26.0124048 ], [ 89.3443533, 26.0126944 ], [ 89.344234, 26.0128648 ], [ 89.3442, 26.01318 ], [ 89.3443363, 26.0132993 ], [ 89.3445492, 26.013393 ], [ 89.3450093, 26.0134186 ], [ 89.3454693, 26.0133845 ], [ 89.3458868, 26.0134952 ], [ 89.3465087, 26.0136997 ], [ 89.3469505, 26.0139157 ], [ 89.3471753, 26.0140656 ], [ 89.3473064, 26.0142248 ], [ 89.347269, 26.0144121 ], [ 89.3471589, 26.0145822 ], [ 89.3472373, 26.014889 ], [ 89.3473221, 26.0150457 ], [ 89.3476942, 26.0153459 ], [ 89.3480923, 26.0153851 ], [ 89.3483143, 26.0152545 ], [ 89.3486798, 26.0148303 ], [ 89.3487516, 26.0146671 ], [ 89.348856, 26.0145953 ], [ 89.348967, 26.0146018 ], [ 89.3490519, 26.0146671 ], [ 89.3491237, 26.0149739 ], [ 89.3491694, 26.0155809 ], [ 89.3493782, 26.015966 ], [ 89.3493913, 26.0163055 ], [ 89.3491955, 26.0163773 ], [ 89.3481446, 26.016312 ], [ 89.3479422, 26.0162532 ], [ 89.3472438, 26.015829 ], [ 89.347048, 26.0156462 ], [ 89.3468391, 26.0153394 ], [ 89.3468007, 26.0161541 ], [ 89.3466789, 26.0162664 ], [ 89.3463231, 26.0162664 ], [ 89.3461545, 26.0160791 ], [ 89.3459297, 26.0155266 ], [ 89.3458173, 26.0154142 ], [ 89.3453772, 26.0154423 ], [ 89.3447684, 26.0150958 ], [ 89.3445905, 26.0150583 ], [ 89.3443189, 26.0152924 ], [ 89.3442908, 26.0156202 ], [ 89.3443657, 26.0157232 ], [ 89.3447778, 26.0160136 ], [ 89.3448527, 26.0162009 ], [ 89.3447778, 26.0163601 ], [ 89.3446654, 26.0164163 ], [ 89.3437663, 26.0160979 ], [ 89.3435166, 26.0161292 ], [ 89.3436145, 26.0163642 ], [ 89.3439931, 26.016795 ], [ 89.3439866, 26.0169778 ], [ 89.3436341, 26.0171606 ], [ 89.3429814, 26.0168472 ], [ 89.3429096, 26.0166971 ], [ 89.3429096, 26.0164556 ], [ 89.3430401, 26.0162337 ], [ 89.3430077, 26.0160698 ], [ 89.3437476, 26.0155547 ], [ 89.343785, 26.0154236 ], [ 89.3437476, 26.0153112 ], [ 89.3434853, 26.015152 ], [ 89.342708, 26.0150583 ], [ 89.3422678, 26.015077 ], [ 89.3420805, 26.0151613 ], [ 89.3417621, 26.0154142 ], [ 89.3415373, 26.0154236 ], [ 89.3412657, 26.0154236 ], [ 89.3407413, 26.0152831 ], [ 89.3404978, 26.0152737 ], [ 89.340273, 26.0153486 ], [ 89.3400014, 26.0157139 ], [ 89.3400108, 26.015948 ], [ 89.3403105, 26.0169314 ], [ 89.3403292, 26.0171843 ], [ 89.3401887, 26.0174652 ], [ 89.3400164, 26.0175747 ], [ 89.3397283, 26.0171907 ], [ 89.339396, 26.0170725 ], [ 89.3390489, 26.0170947 ], [ 89.3389603, 26.017139 ], [ 89.3389603, 26.017235 ], [ 89.3390711, 26.017427 ], [ 89.3394329, 26.0176559 ], [ 89.3395437, 26.0178479 ], [ 89.3394477, 26.0179439 ], [ 89.3392188, 26.0179365 ], [ 89.3390637, 26.0178627 ], [ 89.3389603, 26.0177445 ], [ 89.337823, 26.0179292 ], [ 89.3375793, 26.0180252 ], [ 89.3374169, 26.0181507 ], [ 89.3374833, 26.0183206 ], [ 89.3377049, 26.0183944 ], [ 89.3380446, 26.0183575 ], [ 89.3388052, 26.0181212 ], [ 89.3392557, 26.0180916 ], [ 89.3389455, 26.0182836 ], [ 89.3388569, 26.0184092 ], [ 89.3387314, 26.0187784 ], [ 89.3383848, 26.0192258 ], [ 89.337805, 26.0191563 ], [ 89.337529, 26.0188712 ], [ 89.3373753, 26.0189096 ], [ 89.337197, 26.0193036 ], [ 89.3369591, 26.0196458 ], [ 89.3369909, 26.0197803 ], [ 89.3370808, 26.0198379 ], [ 89.3376314, 26.0195626 ], [ 89.3378423, 26.0195463 ], [ 89.3381564, 26.0194474 ], [ 89.3383098, 26.0194962 ], [ 89.3384768, 26.0203727 ], [ 89.3387439, 26.0209905 ], [ 89.3388077, 26.0213745 ], [ 89.3387773, 26.0215748 ], [ 89.3386103, 26.0216082 ], [ 89.3384267, 26.0215581 ], [ 89.338243, 26.0214245 ], [ 89.3380152, 26.0202197 ], [ 89.3375927, 26.0200644 ], [ 89.3372374, 26.0202629 ], [ 89.3373188, 26.0209092 ], [ 89.3374102, 26.0212898 ], [ 89.3374679, 26.0216263 ], [ 89.3375063, 26.0218593 ], [ 89.3375063, 26.022144 ], [ 89.337642, 26.0223261 ], [ 89.3378924, 26.0225598 ], [ 89.3382597, 26.0227769 ], [ 89.3386938, 26.0228771 ], [ 89.3389609, 26.0230774 ], [ 89.3388941, 26.0234948 ], [ 89.3383098, 26.0241793 ], [ 89.3379091, 26.0244631 ], [ 89.3377088, 26.0245299 ], [ 89.3375224, 26.0244582 ], [ 89.3371461, 26.0236237 ], [ 89.3368176, 26.023564 ], [ 89.3365433, 26.0237318 ], [ 89.3363773, 26.0239121 ], [ 89.3367282, 26.0247861 ], [ 89.3366014, 26.0251242 ], [ 89.3366225, 26.0253566 ], [ 89.3367, 26.02542 ], [ 89.3370592, 26.0254904 ], [ 89.337186, 26.0258003 ], [ 89.3371719, 26.0260539 ], [ 89.3368268, 26.0268357 ], [ 89.3366648, 26.0268428 ], [ 89.3365309, 26.0267723 ], [ 89.3362703, 26.0265047 ], [ 89.3360238, 26.0261455 ], [ 89.3355449, 26.0257088 ], [ 89.3354251, 26.0256313 ], [ 89.335073, 26.0255961 ], [ 89.3346701, 26.025744 ], [ 89.3345292, 26.0258567 ], [ 89.3344799, 26.0261032 ], [ 89.334494, 26.0263497 ], [ 89.3347616, 26.0270823 ], [ 89.3347546, 26.0275401 ], [ 89.3346701, 26.0276809 ], [ 89.3343602, 26.0277936 ], [ 89.3342052, 26.027695 ], [ 89.3337826, 26.027202 ], [ 89.3335009, 26.0270189 ], [ 89.3331487, 26.0269766 ], [ 89.3328669, 26.0268639 ], [ 89.3324655, 26.0269203 ], [ 89.3323598, 26.0270259 ], [ 89.3323246, 26.0271668 ], [ 89.3323149, 26.0272429 ], [ 89.3323528, 26.0272795 ], [ 89.3325782, 26.0274556 ], [ 89.3330642, 26.0275682 ], [ 89.3334375, 26.0278852 ], [ 89.3335149, 26.0280754 ], [ 89.3333529, 26.0284487 ], [ 89.3330994, 26.0287093 ], [ 89.33255, 26.0290826 ], [ 89.3320781, 26.0293009 ], [ 89.3315991, 26.0296602 ], [ 89.3314019, 26.0297517 ], [ 89.3312681, 26.0297095 ], [ 89.330517, 26.0289554 ], [ 89.3308214, 26.0278729 ], [ 89.3308045, 26.0275009 ], [ 89.3306777, 26.0272979 ], [ 89.330517, 26.0272641 ], [ 89.3301872, 26.0273402 ], [ 89.3298574, 26.0276954 ], [ 89.328978, 26.028338 ], [ 89.3290202, 26.0288201 ], [ 89.3294145, 26.029262 ], [ 89.3294145, 26.0294287 ], [ 89.3295408, 26.029666 ], [ 89.329975, 26.030075 ], [ 89.3300154, 26.0301962 ], [ 89.3298892, 26.030378 ], [ 89.3297579, 26.0304235 ], [ 89.3293287, 26.0304386 ], [ 89.3287379, 26.0302871 ], [ 89.3282127, 26.0299942 ], [ 89.3279753, 26.0296105 ], [ 89.3276926, 26.0296105 ], [ 89.3274855, 26.029772 ], [ 89.3273542, 26.0299336 ], [ 89.3273896, 26.0302114 ], [ 89.3277087, 26.0304361 ], [ 89.3279208, 26.0307088 ], [ 89.3280571, 26.0308047 ], [ 89.328249, 26.0307643 ], [ 89.3285268, 26.0306078 ], [ 89.328653, 26.0305876 ], [ 89.3287591, 26.030628 ], [ 89.3292186, 26.0313551 ], [ 89.3292034, 26.0315117 ], [ 89.329057, 26.0316733 ], [ 89.3288601, 26.0317793 ], [ 89.3283349, 26.0319207 ], [ 89.3279693, 26.031951 ], [ 89.3272623, 26.0317945 ], [ 89.3259443, 26.0319965 ], [ 89.325813, 26.0321076 ], [ 89.3258181, 26.0322742 ], [ 89.3259494, 26.0323903 ], [ 89.3261312, 26.0324964 ], [ 89.3270553, 26.0328398 ], [ 89.3273482, 26.0328448 ], [ 89.327636, 26.0326782 ], [ 89.327838, 26.0326277 ], [ 89.3279895, 26.0326782 ], [ 89.3280753, 26.0328145 ], [ 89.32804, 26.0330822 ], [ 89.3279895, 26.0332034 ], [ 89.3278632, 26.0333145 ], [ 89.3274643, 26.03337 ], [ 89.3272522, 26.0334457 ], [ 89.3266392, 26.0338826 ], [ 89.3260635, 26.0341956 ], [ 89.3259171, 26.0343219 ], [ 89.3258211, 26.0344784 ], [ 89.3258363, 26.0349279 ], [ 89.3256908, 26.0355111 ], [ 89.325706, 26.0356878 ], [ 89.325908, 26.0361272 ], [ 89.3259181, 26.036314 ], [ 89.3258171, 26.0364605 ], [ 89.3255747, 26.036511 ], [ 89.3254535, 26.0364453 ], [ 89.3246253, 26.0352637 ], [ 89.3243829, 26.0352788 ], [ 89.3242011, 26.0354253 ], [ 89.3241658, 26.0355262 ], [ 89.324186, 26.0358191 ], [ 89.3243678, 26.0361322 ], [ 89.3248273, 26.0366826 ], [ 89.3247364, 26.0367887 ], [ 89.3244284, 26.0368594 ], [ 89.3236305, 26.0368947 ], [ 89.323373, 26.0368392 ], [ 89.3232013, 26.0368543 ], [ 89.3230801, 26.03692 ], [ 89.3230599, 26.0370866 ], [ 89.3231609, 26.0372331 ], [ 89.323474, 26.0373745 ], [ 89.3236558, 26.0373947 ], [ 89.3238729, 26.0374805 ], [ 89.3240143, 26.0378592 ], [ 89.3239891, 26.0381117 ], [ 89.3238578, 26.0381723 ], [ 89.323276, 26.038055 ], [ 89.3226548, 26.0378583 ], [ 89.322251, 26.0378583 ], [ 89.322163, 26.0379256 ], [ 89.321987, 26.0384639 ], [ 89.3217282, 26.0385934 ], [ 89.3214228, 26.0383656 ], [ 89.3212001, 26.0382569 ], [ 89.3210241, 26.0381896 ], [ 89.3207291, 26.0381947 ], [ 89.3203667, 26.0388108 ], [ 89.3201855, 26.0389402 ], [ 89.3195953, 26.0396287 ], [ 89.3194504, 26.0397167 ], [ 89.3193158, 26.0397064 ], [ 89.3191553, 26.0396598 ], [ 89.3191191, 26.0394268 ], [ 89.3191708, 26.039287 ], [ 89.3193469, 26.0390593 ], [ 89.3194142, 26.0388237 ], [ 89.3194038, 26.0386425 ], [ 89.3193572, 26.0385442 ], [ 89.3190414, 26.0383112 ], [ 89.318325, 26.0380213 ], [ 89.3177814, 26.0376952 ], [ 89.3175795, 26.0376382 ], [ 89.3173155, 26.0376486 ], [ 89.3171239, 26.0376072 ], [ 89.3168962, 26.0374726 ], [ 89.3168496, 26.0373587 ], [ 89.3167305, 26.0372759 ], [ 89.3164758, 26.0372189 ], [ 89.3159478, 26.0372189 ], [ 89.3151868, 26.0370326 ], [ 89.3147416, 26.0370947 ], [ 89.3144724, 26.0374363 ], [ 89.314462, 26.0376175 ], [ 89.3145552, 26.0377935 ], [ 89.3147261, 26.037866 ], [ 89.3150108, 26.0379385 ], [ 89.3157096, 26.0379747 ], [ 89.3164344, 26.0381197 ], [ 89.3167916, 26.03813 ], [ 89.3171177, 26.0379903 ], [ 89.317418, 26.0379954 ], [ 89.3174777, 26.0381111 ], [ 89.3174883, 26.0383375 ], [ 89.3169302, 26.0389482 ], [ 89.3166564, 26.0393326 ], [ 89.3164142, 26.0394537 ], [ 89.3156866, 26.0395247 ], [ 89.3154602, 26.0394194 ], [ 89.3153655, 26.0391772 ], [ 89.3152812, 26.0390825 ], [ 89.3151496, 26.0390246 ], [ 89.3148074, 26.0390035 ], [ 89.3143967, 26.0392352 ], [ 89.3137112, 26.0397564 ], [ 89.3132216, 26.0400091 ], [ 89.3125951, 26.0402723 ], [ 89.3118159, 26.0404829 ], [ 89.3115505, 26.0406304 ], [ 89.3113768, 26.0407988 ], [ 89.3107555, 26.0412358 ], [ 89.3101027, 26.0416202 ], [ 89.3097352, 26.0420229 ], [ 89.3096193, 26.0420756 ], [ 89.3092297, 26.0420756 ], [ 89.3090718, 26.0421598 ], [ 89.308977, 26.0422493 ], [ 89.308977, 26.0425336 ], [ 89.3092034, 26.0433365 ], [ 89.309214, 26.0436945 ], [ 89.309156, 26.0438262 ], [ 89.3083926, 26.0445922 ], [ 89.3079398, 26.0449028 ], [ 89.3074976, 26.0454609 ], [ 89.3070869, 26.0456189 ], [ 89.3069922, 26.0456031 ], [ 89.3066868, 26.0452766 ], [ 89.3065604, 26.0449449 ], [ 89.3065446, 26.0448028 ], [ 89.3066236, 26.0444922 ], [ 89.3065499, 26.0443132 ], [ 89.306313, 26.0443289 ], [ 89.3059655, 26.044708 ], [ 89.3058813, 26.0449502 ], [ 89.3059129, 26.0451977 ], [ 89.3060024, 26.0453556 ], [ 89.3064867, 26.0456478 ], [ 89.3066026, 26.0459637 ], [ 89.3063235, 26.0468851 ], [ 89.3061866, 26.0470219 ], [ 89.3060708, 26.047043 ], [ 89.3058813, 26.0469746 ], [ 89.3057075, 26.0468377 ], [ 89.3055496, 26.0466008 ], [ 89.3055601, 26.0461901 ], [ 89.3051337, 26.0461927 ], [ 89.3041807, 26.0457136 ], [ 89.3035594, 26.0456083 ], [ 89.3034805, 26.0456504 ], [ 89.3034594, 26.0458347 ], [ 89.3036384, 26.0460716 ], [ 89.3042149, 26.046619 ], [ 89.3044282, 26.0467824 ], [ 89.3045492, 26.0468614 ], [ 89.305002, 26.0470088 ], [ 89.305081, 26.0470825 ], [ 89.3050915, 26.0471878 ], [ 89.3049441, 26.0473457 ], [ 89.3047177, 26.0473879 ], [ 89.3045756, 26.0472826 ], [ 89.3043597, 26.0470193 ], [ 89.3041807, 26.0469245 ], [ 89.3037332, 26.0469035 ], [ 89.3036068, 26.0469403 ], [ 89.3035215, 26.0470483 ], [ 89.3034004, 26.04738 ], [ 89.3032109, 26.0475695 ], [ 89.3026318, 26.0477432 ], [ 89.3022685, 26.047759 ], [ 89.3016841, 26.0476327 ], [ 89.3013366, 26.0474063 ], [ 89.301067, 26.0474484 ], [ 89.3006564, 26.0476432 ], [ 89.3005037, 26.0476748 ], [ 89.2997824, 26.047559 ], [ 89.2994402, 26.047559 ], [ 89.2993612, 26.0476221 ], [ 89.2993823, 26.0477617 ], [ 89.2996087, 26.0478828 ], [ 89.2999246, 26.0479459 ], [ 89.3002615, 26.0480881 ], [ 89.3007827, 26.0486146 ], [ 89.3007933, 26.0487251 ], [ 89.3006669, 26.0488357 ], [ 89.2999667, 26.0488936 ], [ 89.2998614, 26.0489357 ], [ 89.2996455, 26.0491463 ], [ 89.2996192, 26.0492753 ], [ 89.2997245, 26.0494754 ], [ 89.3001825, 26.0498229 ], [ 89.3006564, 26.0500124 ], [ 89.3007722, 26.0501756 ], [ 89.3007196, 26.0503494 ], [ 89.3004932, 26.0505863 ], [ 89.2999772, 26.0509654 ], [ 89.2998719, 26.0509706 ], [ 89.2996813, 26.050739 ], [ 89.2995128, 26.0498071 ], [ 89.2994075, 26.0497492 ], [ 89.2992496, 26.049786 ], [ 89.2992127, 26.049865 ], [ 89.2992022, 26.0504705 ], [ 89.2990706, 26.0505758 ], [ 89.2988073, 26.0505863 ], [ 89.2984757, 26.0503257 ], [ 89.2980755, 26.0496728 ], [ 89.2979439, 26.0496412 ], [ 89.2978457, 26.049671 ], [ 89.2977922, 26.0497044 ], [ 89.2977514, 26.0497411 ], [ 89.297732, 26.0497662 ], [ 89.2977106, 26.0497951 ], [ 89.2976461, 26.0498936 ], [ 89.2976307, 26.0499666 ], [ 89.2975538, 26.0503204 ], [ 89.2974482, 26.0505274 ], [ 89.2974482, 26.0508725 ], [ 89.2976019, 26.0513642 ], [ 89.2980052, 26.0517869 ], [ 89.2975442, 26.0520026 ], [ 89.2972274, 26.0519595 ], [ 89.2971619, 26.0519412 ], [ 89.2968433, 26.0516662 ], [ 89.2964592, 26.0513729 ], [ 89.2962959, 26.0513125 ], [ 89.2961903, 26.0511486 ], [ 89.2955085, 26.0507345 ], [ 89.2952684, 26.0505188 ], [ 89.2949419, 26.0500961 ], [ 89.2946827, 26.0494145 ], [ 89.2941833, 26.0488279 ], [ 89.2940105, 26.0482499 ], [ 89.2935304, 26.0480169 ], [ 89.2928582, 26.048224 ], [ 89.292042, 26.0485432 ], [ 89.2910433, 26.0489659 ], [ 89.2897085, 26.0494922 ], [ 89.2879801, 26.0497251 ], [ 89.2859923, 26.0498372 ], [ 89.2855314, 26.049889 ], [ 89.2850033, 26.0499149 ], [ 89.2844751, 26.0499408 ], [ 89.2839182, 26.049958 ], [ 89.2837357, 26.0499839 ], [ 89.2833996, 26.0500184 ], [ 89.2830155, 26.0500443 ], [ 89.2818513, 26.0501107 ], [ 89.2812598, 26.0501384 ], [ 89.2811672, 26.0501495 ], [ 89.2810619, 26.0501819 ], [ 89.2809798, 26.05026 ], [ 89.2807013, 26.0505533 ], [ 89.2806533, 26.0515109 ], [ 89.2808166, 26.0523132 ], [ 89.2811719, 26.0529688 ], [ 89.2818536, 26.0533915 ], [ 89.2820553, 26.053935 ], [ 89.2827755, 26.0550996 ], [ 89.2832652, 26.0568767 ], [ 89.2832652, 26.0572822 ], [ 89.2831596, 26.0577394 ], [ 89.2829579, 26.058188 ], [ 89.2829387, 26.0586624 ], [ 89.2827083, 26.0597666 ], [ 89.2825066, 26.0606723 ], [ 89.2826602, 26.0610778 ], [ 89.2827371, 26.0614142 ], [ 89.2827851, 26.0616126 ], [ 89.2830155, 26.0623717 ], [ 89.2834477, 26.062941 ], [ 89.2831404, 26.0639848 ], [ 89.2828235, 26.0644075 ], [ 89.2826699, 26.0649078 ], [ 89.2822089, 26.0656065 ], [ 89.2816912, 26.0655173 ], [ 89.281287, 26.065399 ], [ 89.2811237, 26.0652547 ], [ 89.2808923, 26.0652399 ], [ 89.2808234, 26.0652842 ], [ 89.2806314, 26.0656141 ], [ 89.2805034, 26.0656879 ], [ 89.2799275, 26.0657864 ], [ 89.2797404, 26.0660276 ], [ 89.2795464, 26.0661703 ], [ 89.2784142, 26.0665297 ], [ 89.278237, 26.0664854 ], [ 89.2780745, 26.0658159 ], [ 89.2777142, 26.0653975 ], [ 89.2774976, 26.0653089 ], [ 89.2771382, 26.0653039 ], [ 89.2768429, 26.065235 ], [ 89.2765672, 26.0650873 ], [ 89.2762915, 26.0648117 ], [ 89.2758042, 26.0644425 ], [ 89.2757303, 26.0641914 ], [ 89.2757549, 26.0636351 ], [ 89.2756959, 26.0634973 ], [ 89.2756712, 26.0631871 ], [ 89.2757254, 26.0630838 ], [ 89.2762964, 26.0627146 ], [ 89.276385, 26.0625866 ], [ 89.27639, 26.0623257 ], [ 89.2760848, 26.0621583 ], [ 89.2758583, 26.0620894 ], [ 89.2757726, 26.0621091 ], [ 89.2755708, 26.0625324 ], [ 89.2754231, 26.0626506 ], [ 89.2752262, 26.0626703 ], [ 89.2751622, 26.0626309 ], [ 89.2751475, 26.0625127 ], [ 89.2752164, 26.0620795 ], [ 89.2751492, 26.0618349 ], [ 89.2751654, 26.0617378 ], [ 89.2753758, 26.0616811 ], [ 89.2757885, 26.0616811 ], [ 89.2762173, 26.0615678 ], [ 89.2762093, 26.061406 ], [ 89.2760856, 26.0613493 ], [ 89.2759752, 26.0611885 ], [ 89.2756266, 26.061236 ], [ 89.2749388, 26.0611066 ], [ 89.2740648, 26.0608314 ], [ 89.2737518, 26.0619009 ], [ 89.2728564, 26.0619466 ], [ 89.2727432, 26.0619269 ], [ 89.2726693, 26.0618482 ], [ 89.2717666, 26.0618268 ], [ 89.27082, 26.0620043 ], [ 89.2701239, 26.0621343 ], [ 89.2697193, 26.0614707 ], [ 89.2696464, 26.0612603 ], [ 89.2697516, 26.0608233 ], [ 89.2698488, 26.0607505 ], [ 89.2700025, 26.0607262 ], [ 89.2710251, 26.0606839 ], [ 89.2703901, 26.0602458 ], [ 89.2699559, 26.0598126 ], [ 89.2696212, 26.0596501 ], [ 89.2695129, 26.0596501 ], [ 89.2693898, 26.0597338 ], [ 89.2693061, 26.0601424 ], [ 89.2692815, 26.060679 ], [ 89.2692569, 26.0607331 ], [ 89.2691141, 26.0607922 ], [ 89.2686661, 26.0608464 ], [ 89.2677702, 26.0607824 ], [ 89.2675044, 26.0606938 ], [ 89.2672129, 26.0606938 ], [ 89.2668831, 26.0607627 ], [ 89.2663958, 26.0610088 ], [ 89.2660928, 26.0613791 ], [ 89.2658957, 26.0614079 ], [ 89.2653324, 26.0610876 ], [ 89.2647712, 26.0610728 ], [ 89.2645743, 26.0612599 ], [ 89.2645054, 26.0614519 ], [ 89.2644906, 26.0616192 ], [ 89.2646108, 26.0620008 ], [ 89.264532, 26.0621386 ], [ 89.2642612, 26.0621386 ], [ 89.2641579, 26.0620844 ], [ 89.2635967, 26.0619958 ], [ 89.2627352, 26.0621214 ], [ 89.2622971, 26.0622887 ], [ 89.2610811, 26.062402 ], [ 89.2607661, 26.0624955 ], [ 89.2604018, 26.0627564 ], [ 89.2601606, 26.0628942 ], [ 89.2600375, 26.0629189 ], [ 89.2599243, 26.062909 ], [ 89.25988, 26.0628647 ], [ 89.2598111, 26.0624266 ], [ 89.2597224, 26.0623724 ], [ 89.259624, 26.0623724 ], [ 89.2594222, 26.0624512 ], [ 89.2591514, 26.0627466 ], [ 89.258797, 26.0630173 ], [ 89.2586345, 26.0630518 ], [ 89.2581865, 26.0628992 ], [ 89.2578124, 26.063037 ], [ 89.2575584, 26.0633201 ], [ 89.257455, 26.0637926 ], [ 89.2571104, 26.0640929 ], [ 89.2569283, 26.0641865 ], [ 89.2560816, 26.0642948 ], [ 89.256208, 26.0635174 ], [ 89.2560442, 26.0634048 ], [ 89.2557985, 26.063456 ], [ 89.2554096, 26.0636198 ], [ 89.2550207, 26.0636914 ], [ 89.2540688, 26.0640906 ], [ 89.2543554, 26.0657077 ], [ 89.2543145, 26.0663014 ], [ 89.2546481, 26.0674221 ], [ 89.2547812, 26.0681386 ], [ 89.2554976, 26.0690598 ], [ 89.2558763, 26.0699656 ], [ 89.2560033, 26.0708889 ], [ 89.2559992, 26.0715981 ], [ 89.2558763, 26.071639 ], [ 89.2558149, 26.0719461 ], [ 89.2555969, 26.072301 ], [ 89.2550268, 26.0740647 ], [ 89.2550473, 26.0750268 ], [ 89.2552418, 26.0754362 ], [ 89.2555386, 26.0758866 ], [ 89.2558559, 26.0761936 ], [ 89.2561834, 26.076429 ], [ 89.2563893, 26.0768522 ], [ 89.25643, 26.0771976 ], [ 89.2566738, 26.0781932 ], [ 89.2567525, 26.0802979 ], [ 89.2578681, 26.080257 ], [ 89.2579248, 26.0807614 ], [ 89.2580181, 26.0807754 ], [ 89.2581221, 26.0811568 ], [ 89.259324, 26.0812146 ], [ 89.2593151, 26.0817895 ], [ 89.2596265, 26.0830819 ], [ 89.2609059, 26.0831484 ], [ 89.260998, 26.0839621 ], [ 89.2608445, 26.0845864 ], [ 89.2607319, 26.0848321 ], [ 89.2610901, 26.0852006 ], [ 89.2613063, 26.0855585 ], [ 89.2616724, 26.0860167 ], [ 89.2652559, 26.0876335 ], [ 89.2659786, 26.0878955 ], [ 89.2662745, 26.0891547 ], [ 89.2668554, 26.091103 ], [ 89.266919, 26.0914613 ], [ 89.2669995, 26.0916394 ], [ 89.2672285, 26.0918005 ], [ 89.2673854, 26.0918556 ], [ 89.2674871, 26.0921058 ], [ 89.2673644, 26.0920361 ], [ 89.2669325, 26.0920008 ], [ 89.2661174, 26.0923227 ], [ 89.2658818, 26.0922835 ], [ 89.2654813, 26.0920165 ], [ 89.2653399, 26.0920008 ], [ 89.2651907, 26.0920479 ], [ 89.2650337, 26.0921264 ], [ 89.2650101, 26.0925505 ], [ 89.2650487, 26.0928304 ], [ 89.2650729, 26.0930059 ], [ 89.2649708, 26.0932023 ], [ 89.2647274, 26.093273 ], [ 89.2644997, 26.0932023 ], [ 89.2643347, 26.0930374 ], [ 89.2638871, 26.0927625 ], [ 89.2635965, 26.0927311 ], [ 89.2634552, 26.0928096 ], [ 89.2633295, 26.0930217 ], [ 89.26294, 26.094019 ], [ 89.2621469, 26.0940111 ], [ 89.2616286, 26.0938698 ], [ 89.2614951, 26.0935792 ], [ 89.2611495, 26.0932011 ], [ 89.2609139, 26.0930452 ], [ 89.2609532, 26.0928332 ], [ 89.2610484, 26.0926729 ], [ 89.2610632, 26.0924798 ], [ 89.2609722, 26.0923291 ], [ 89.2603328, 26.0918437 ], [ 89.2597203, 26.0916631 ], [ 89.2594925, 26.0917652 ], [ 89.259359, 26.0919615 ], [ 89.2593041, 26.0922364 ], [ 89.2592098, 26.092417 ], [ 89.2588156, 26.0922992 ], [ 89.25869, 26.0923384 ], [ 89.2585565, 26.0926683 ], [ 89.2583837, 26.0935164 ], [ 89.2582816, 26.0937127 ], [ 89.2581324, 26.0937598 ], [ 89.257834, 26.0932887 ], [ 89.257457, 26.093273 ], [ 89.2569701, 26.0936106 ], [ 89.2562241, 26.0937913 ], [ 89.2558786, 26.094019 ], [ 89.2554388, 26.0941761 ], [ 89.2552189, 26.0941289 ], [ 89.2550775, 26.0939954 ], [ 89.2549912, 26.0938148 ], [ 89.2548781, 26.0932415 ], [ 89.2544854, 26.0926918 ], [ 89.2542498, 26.0925348 ], [ 89.2539985, 26.0924327 ], [ 89.2535509, 26.092417 ], [ 89.2529227, 26.0925034 ], [ 89.2529619, 26.0922206 ], [ 89.2531426, 26.0921971 ], [ 89.2530752, 26.0920908 ], [ 89.2529855, 26.0915767 ], [ 89.2529305, 26.0915139 ], [ 89.2523572, 26.0914667 ], [ 89.2520824, 26.0913804 ], [ 89.2514384, 26.0912783 ], [ 89.2512343, 26.0914039 ], [ 89.25114, 26.0918751 ], [ 89.2511322, 26.0924484 ], [ 89.250873, 26.0927389 ], [ 89.2508652, 26.0929274 ], [ 89.2509201, 26.0930531 ], [ 89.2512542, 26.0930599 ], [ 89.2513756, 26.0936892 ], [ 89.2513423, 26.0941733 ], [ 89.2509662, 26.0942987 ], [ 89.2506139, 26.0943253 ], [ 89.250394, 26.0945451 ], [ 89.250339, 26.0946983 ], [ 89.2503469, 26.0948946 ], [ 89.2503861, 26.0949967 ], [ 89.2506374, 26.0949967 ], [ 89.2509594, 26.094926 ], [ 89.2512028, 26.0949574 ], [ 89.2512421, 26.0951773 ], [ 89.2511871, 26.0955543 ], [ 89.2512735, 26.0957717 ], [ 89.25133, 26.0962404 ], [ 89.251085, 26.0966498 ], [ 89.2509908, 26.0969796 ], [ 89.2510379, 26.097121 ], [ 89.2511165, 26.0971838 ], [ 89.2517604, 26.0973723 ], [ 89.2518546, 26.0974979 ], [ 89.2519096, 26.0978591 ], [ 89.2518122, 26.0985777 ], [ 89.2516395, 26.0988761 ], [ 89.2511919, 26.0991353 ], [ 89.2510112, 26.0993394 ], [ 89.2508463, 26.0997164 ], [ 89.2507756, 26.1001326 ], [ 89.2508306, 26.1003132 ], [ 89.2511447, 26.1005331 ], [ 89.2521499, 26.1006823 ], [ 89.2522756, 26.1007609 ], [ 89.2522442, 26.1009022 ], [ 89.2517211, 26.1011849 ], [ 89.2515327, 26.1013969 ], [ 89.2513678, 26.1014912 ], [ 89.2511714, 26.1015226 ], [ 89.2510458, 26.101499 ], [ 89.2506688, 26.1011928 ], [ 89.2505039, 26.1008551 ], [ 89.2503626, 26.1008237 ], [ 89.2502055, 26.1008472 ], [ 89.2500092, 26.1006431 ], [ 89.2497893, 26.1005017 ], [ 89.2494673, 26.1005017 ], [ 89.2492867, 26.1006038 ], [ 89.2491532, 26.1007687 ], [ 89.2491296, 26.1013341 ], [ 89.2497045, 26.1022097 ], [ 89.2495082, 26.1022883 ], [ 89.2491469, 26.1021074 ], [ 89.2488956, 26.1020684 ], [ 89.2485669, 26.1021481 ], [ 89.2484244, 26.1022961 ], [ 89.2483852, 26.1027987 ], [ 89.2484323, 26.10305 ], [ 89.2485815, 26.1034191 ], [ 89.2484529, 26.1038625 ], [ 89.2481731, 26.1036979 ], [ 89.2479768, 26.1034859 ], [ 89.2478355, 26.1032503 ], [ 89.2476705, 26.1031639 ], [ 89.2475056, 26.1031953 ], [ 89.2474035, 26.1033602 ], [ 89.2473957, 26.1035173 ], [ 89.2474978, 26.1039728 ], [ 89.2476548, 26.1043261 ], [ 89.2476156, 26.1046874 ], [ 89.247137, 26.1050461 ], [ 89.2470479, 26.105098 ], [ 89.246803, 26.1051277 ], [ 89.2465062, 26.1050758 ], [ 89.2460313, 26.1048606 ], [ 89.2456603, 26.104868 ], [ 89.2456454, 26.1049571 ], [ 89.2456974, 26.1050461 ], [ 89.2459126, 26.1052465 ], [ 89.2459808, 26.1053763 ], [ 89.245966, 26.1058958 ], [ 89.245736, 26.1064152 ], [ 89.2456989, 26.1066007 ], [ 89.2455505, 26.1067714 ], [ 89.2454466, 26.1067788 ], [ 89.2452611, 26.1066898 ], [ 89.245083, 26.1064523 ], [ 89.2448307, 26.1062816 ], [ 89.2444448, 26.1061852 ], [ 89.2435692, 26.1062297 ], [ 89.2434282, 26.1062816 ], [ 89.2430423, 26.106571 ], [ 89.2428049, 26.1066081 ], [ 89.2426787, 26.1063855 ], [ 89.2427381, 26.1054728 ], [ 89.2426713, 26.1053466 ], [ 89.2425674, 26.1053095 ], [ 89.2420034, 26.1057473 ], [ 89.2410907, 26.1059329 ], [ 89.2408681, 26.1060145 ], [ 89.2407494, 26.1061184 ], [ 89.2406306, 26.1064152 ], [ 89.2406306, 26.1065265 ], [ 89.2407048, 26.1066155 ], [ 89.2408162, 26.1066378 ], [ 89.2412317, 26.1064523 ], [ 89.2413504, 26.1064375 ], [ 89.2416324, 26.1065117 ], [ 89.2419718, 26.1067083 ], [ 89.2425251, 26.107119 ], [ 89.2425899, 26.1073697 ], [ 89.2425553, 26.1074691 ], [ 89.2423824, 26.1075945 ], [ 89.2420617, 26.1077025 ], [ 89.2416856, 26.1081651 ], [ 89.2414003, 26.1081305 ], [ 89.2412965, 26.1080527 ], [ 89.2412101, 26.1079489 ], [ 89.2411496, 26.107521 ], [ 89.2410804, 26.1074345 ], [ 89.2409593, 26.1074216 ], [ 89.2407432, 26.1075729 ], [ 89.2406351, 26.107936 ], [ 89.2404614, 26.1081392 ], [ 89.2401674, 26.1082753 ], [ 89.2392855, 26.1084309 ], [ 89.2389873, 26.1085909 ], [ 89.2389354, 26.1087033 ], [ 89.2390435, 26.1088676 ], [ 89.2393201, 26.1089454 ], [ 89.2396703, 26.1091529 ], [ 89.2399469, 26.1093971 ], [ 89.2401242, 26.1096824 ], [ 89.240042, 26.1097862 ], [ 89.2399123, 26.1098251 ], [ 89.2395536, 26.1097516 ], [ 89.2394066, 26.1097732 ], [ 89.2393374, 26.1099591 ], [ 89.2392466, 26.110936 ], [ 89.2391602, 26.1111263 ], [ 89.2389224, 26.111351 ], [ 89.2388187, 26.1116623 ], [ 89.2389873, 26.1118049 ], [ 89.2391256, 26.111792 ], [ 89.2397524, 26.1111522 ], [ 89.2398691, 26.111109 ], [ 89.2399815, 26.1111738 ], [ 89.2401242, 26.1114656 ], [ 89.2404311, 26.1118719 ], [ 89.2404397, 26.1120189 ], [ 89.2400464, 26.1123129 ], [ 89.2397005, 26.1128078 ], [ 89.2393504, 26.1131883 ], [ 89.2391731, 26.1137156 ], [ 89.2390296, 26.1138799 ], [ 89.2381175, 26.1141393 ], [ 89.2379446, 26.1141393 ], [ 89.2378192, 26.1141177 ], [ 89.2374639, 26.1138497 ], [ 89.236876, 26.1135341 ], [ 89.2364869, 26.1135168 ], [ 89.2362881, 26.1135773 ], [ 89.2361584, 26.1136465 ], [ 89.2360244, 26.1139621 ], [ 89.2360979, 26.1146018 ], [ 89.2357857, 26.114952 ], [ 89.2355004, 26.115086 ], [ 89.2353708, 26.1151033 ], [ 89.2347266, 26.1150644 ], [ 89.2345537, 26.1150168 ], [ 89.2343808, 26.1148871 ], [ 89.2343419, 26.1146105 ], [ 89.2345062, 26.1144851 ], [ 89.2347742, 26.1145024 ], [ 89.2348952, 26.1144592 ], [ 89.2349687, 26.1143554 ], [ 89.2349558, 26.1141998 ], [ 89.2345235, 26.1138669 ], [ 89.2342114, 26.1135082 ], [ 89.2339909, 26.1134087 ], [ 89.2337272, 26.1134217 ], [ 89.2336815, 26.113483 ], [ 89.233671, 26.1135989 ], [ 89.2337445, 26.1137027 ], [ 89.2340514, 26.1139642 ], [ 89.2340212, 26.1141976 ], [ 89.2339131, 26.1142582 ], [ 89.2337099, 26.1143187 ], [ 89.2335543, 26.1142971 ], [ 89.2332301, 26.1141458 ], [ 89.2327805, 26.1140593 ], [ 89.2323136, 26.1140853 ], [ 89.2320024, 26.1142538 ], [ 89.2319419, 26.1143879 ], [ 89.2319419, 26.1145392 ], [ 89.2319721, 26.1146515 ], [ 89.2320672, 26.1146948 ], [ 89.2325082, 26.1146688 ], [ 89.2328756, 26.1145564 ], [ 89.2331825, 26.1145953 ], [ 89.2332906, 26.1146818 ], [ 89.2331929, 26.1153713 ], [ 89.2329984, 26.1155831 ], [ 89.2326223, 26.1156653 ], [ 89.2319047, 26.1156739 ], [ 89.231788, 26.1156998 ], [ 89.2316626, 26.1158339 ], [ 89.2316367, 26.1160284 ], [ 89.2316972, 26.116305 ], [ 89.2321338, 26.1168778 ], [ 89.23219, 26.1171891 ], [ 89.2321381, 26.1173663 ], [ 89.2320508, 26.1174657 ], [ 89.2318476, 26.1174917 ], [ 89.231705, 26.1173922 ], [ 89.2314413, 26.1169124 ], [ 89.2313246, 26.1168389 ], [ 89.2312251, 26.1168389 ], [ 89.2310609, 26.1169556 ], [ 89.2310522, 26.1172366 ], [ 89.2309182, 26.1174744 ], [ 89.2306459, 26.1176819 ], [ 89.230434, 26.1177165 ], [ 89.2303, 26.1177856 ], [ 89.230179, 26.118045 ], [ 89.2301531, 26.1181574 ], [ 89.2302352, 26.1182438 ], [ 89.2305248, 26.118326 ], [ 89.2306545, 26.1184384 ], [ 89.2306804, 26.1186848 ], [ 89.2305897, 26.118875 ], [ 89.2304989, 26.1189614 ], [ 89.2296732, 26.119411 ], [ 89.2296343, 26.119545 ], [ 89.2294052, 26.1198433 ], [ 89.2291674, 26.1200638 ], [ 89.2289297, 26.1201848 ], [ 89.2284931, 26.1202583 ], [ 89.2281948, 26.1204744 ], [ 89.2281602, 26.1205912 ], [ 89.2281602, 26.1206949 ], [ 89.2282207, 26.1207641 ], [ 89.2285017, 26.1208635 ], [ 89.2288043, 26.1208808 ], [ 89.2294009, 26.1207943 ], [ 89.2295046, 26.1208376 ], [ 89.2296689, 26.1210753 ], [ 89.2296213, 26.1214817 ], [ 89.2293291, 26.1218297 ], [ 89.2290352, 26.1220285 ], [ 89.2288622, 26.1222792 ], [ 89.2288968, 26.1224824 ], [ 89.2291432, 26.1227548 ], [ 89.2295064, 26.1233816 ], [ 89.2297571, 26.1235761 ], [ 89.2298306, 26.1236928 ], [ 89.229809, 26.1238052 ], [ 89.229636, 26.1239392 ], [ 89.2294674, 26.1240041 ], [ 89.2291821, 26.1240127 ], [ 89.2287326, 26.1241208 ], [ 89.2282864, 26.1243542 ], [ 89.2281222, 26.1243672 ], [ 89.2277072, 26.124298 ], [ 89.2275127, 26.1241424 ], [ 89.2275516, 26.1239392 ], [ 89.2277331, 26.1236626 ], [ 89.2280314, 26.1233989 ], [ 89.2282994, 26.1228736 ], [ 89.2281308, 26.1226488 ], [ 89.227504, 26.1222295 ], [ 89.2268988, 26.121888 ], [ 89.2267605, 26.1219053 ], [ 89.226687, 26.122048 ], [ 89.2266913, 26.1222555 ], [ 89.2269636, 26.1227742 ], [ 89.2270371, 26.123146 ], [ 89.2270026, 26.1233405 ], [ 89.226808, 26.1233837 ], [ 89.2266265, 26.1232454 ], [ 89.2263481, 26.122878 ], [ 89.2260282, 26.1227353 ], [ 89.2258423, 26.123012 ], [ 89.2257256, 26.1235458 ], [ 89.2257213, 26.1238917 ], [ 89.2258293, 26.1241554 ], [ 89.2258207, 26.1242894 ], [ 89.2257645, 26.1244018 ], [ 89.2255916, 26.1245574 ], [ 89.2255138, 26.1245963 ], [ 89.2253625, 26.1245704 ], [ 89.2253149, 26.1244666 ], [ 89.2254014, 26.1240386 ], [ 89.2252976, 26.1237922 ], [ 89.2249824, 26.123876 ], [ 89.2248881, 26.1239759 ], [ 89.2245748, 26.124151 ], [ 89.224242, 26.1241381 ], [ 89.2239048, 26.1239695 ], [ 89.2236973, 26.1239306 ], [ 89.223399, 26.1239219 ], [ 89.223252, 26.1239522 ], [ 89.2231526, 26.1240343 ], [ 89.2230834, 26.1242029 ], [ 89.223144, 26.1244753 ], [ 89.2232564, 26.124566 ], [ 89.2236843, 26.1247606 ], [ 89.2238227, 26.1250221 ], [ 89.2237665, 26.1253377 ], [ 89.2236886, 26.1255019 ], [ 89.2236065, 26.125623 ], [ 89.2233731, 26.1257743 ], [ 89.2231742, 26.1258045 ], [ 89.2229062, 26.1257613 ], [ 89.2222837, 26.1254803 ], [ 89.221899, 26.1254025 ], [ 89.2217805, 26.1254241 ], [ 89.2211537, 26.125731 ], [ 89.2206307, 26.1258737 ], [ 89.2205938, 26.1258208 ], [ 89.220488, 26.1258348 ], [ 89.2204145, 26.1258002 ], [ 89.2203453, 26.1256403 ], [ 89.2202364, 26.1247303 ], [ 89.2199252, 26.1246006 ], [ 89.2196312, 26.1242116 ], [ 89.2191211, 26.1240646 ], [ 89.2189568, 26.1240559 ], [ 89.2188661, 26.1241597 ], [ 89.2188661, 26.1242807 ], [ 89.2191514, 26.1249248 ], [ 89.2196226, 26.1251928 ], [ 89.2199554, 26.1255862 ], [ 89.2200505, 26.1259731 ], [ 89.2202278, 26.1262411 ], [ 89.2202191, 26.1263708 ], [ 89.2201413, 26.1264227 ], [ 89.2198128, 26.1264443 ], [ 89.2196788, 26.1265005 ], [ 89.2194842, 26.1266648 ], [ 89.2192638, 26.1267296 ], [ 89.2187407, 26.1266691 ], [ 89.2181735, 26.126976 ], [ 89.2178493, 26.1270711 ], [ 89.2178191, 26.1269717 ], [ 89.2179761, 26.1267193 ], [ 89.2179487, 26.1265524 ], [ 89.2177931, 26.1265524 ], [ 89.2177397, 26.1266089 ], [ 89.2175121, 26.1266388 ], [ 89.2173219, 26.1265351 ], [ 89.2172044, 26.1263579 ], [ 89.2170228, 26.1262239 ], [ 89.2169018, 26.1262152 ], [ 89.2161971, 26.1264573 ], [ 89.2160415, 26.1264443 ], [ 89.2154398, 26.1262282 ], [ 89.215323, 26.1262282 ], [ 89.2152496, 26.1263579 ], [ 89.2155219, 26.1267599 ], [ 89.215496, 26.1268766 ], [ 89.2152885, 26.1269933 ], [ 89.2149253, 26.1269025 ], [ 89.214506, 26.1264184 ], [ 89.2143893, 26.1260574 ], [ 89.2144066, 26.125798 ], [ 89.2145017, 26.1255733 ], [ 89.2147308, 26.1253225 ], [ 89.2147049, 26.1252447 ], [ 89.2145968, 26.1251885 ], [ 89.2144369, 26.1251972 ], [ 89.2141775, 26.1253225 ], [ 89.2141299, 26.1257505 ], [ 89.213983, 26.1258283 ], [ 89.2138446, 26.1257851 ], [ 89.2138273, 26.1255084 ], [ 89.2137495, 26.1252707 ], [ 89.213676, 26.1252188 ], [ 89.2132178, 26.1253744 ], [ 89.2130579, 26.1253701 ], [ 89.2128374, 26.1252447 ], [ 89.2126117, 26.1251928 ], [ 89.2124821, 26.1251928 ], [ 89.2122486, 26.1253182 ], [ 89.2122184, 26.1252577 ], [ 89.2122832, 26.1249335 ], [ 89.2122313, 26.1248254 ], [ 89.2119331, 26.1245833 ], [ 89.2117022, 26.1242959 ], [ 89.2114342, 26.1241143 ], [ 89.2114169, 26.1239587 ], [ 89.2112699, 26.1238938 ], [ 89.2111662, 26.1239025 ], [ 89.2110495, 26.1240322 ], [ 89.2110884, 26.124285 ], [ 89.2112094, 26.1245704 ], [ 89.2112094, 26.1246827 ], [ 89.2110495, 26.1250156 ], [ 89.2110192, 26.1252058 ], [ 89.2110192, 26.1255387 ], [ 89.2110884, 26.125798 ], [ 89.2110235, 26.1258542 ], [ 89.2106725, 26.1257289 ], [ 89.2104564, 26.1257332 ], [ 89.2101408, 26.1259234 ], [ 89.2099679, 26.1261958 ], [ 89.2098339, 26.1265805 ], [ 89.2098339, 26.1266583 ], [ 89.2099506, 26.1268442 ], [ 89.2101624, 26.1270517 ], [ 89.2101365, 26.1272505 ], [ 89.210037, 26.1273543 ], [ 89.209795, 26.1273716 ], [ 89.2095183, 26.127324 ], [ 89.2093843, 26.1274105 ], [ 89.2092416, 26.1276396 ], [ 89.2090679, 26.1276958 ], [ 89.209003, 26.1276569 ], [ 89.2089771, 26.1275704 ], [ 89.209016, 26.1274018 ], [ 89.2091586, 26.1271468 ], [ 89.2091111, 26.126935 ], [ 89.2088949, 26.1268312 ], [ 89.2084972, 26.1269306 ], [ 89.208333, 26.126922 ], [ 89.2078445, 26.1267231 ], [ 89.2077494, 26.126788 ], [ 89.2077796, 26.1271295 ], [ 89.2077148, 26.1276785 ], [ 89.207567, 26.1276915 ], [ 89.2074675, 26.1273543 ], [ 89.2072211, 26.1270906 ], [ 89.2070136, 26.1270214 ], [ 89.206845, 26.1270257 ], [ 89.2065597, 26.1271922 ], [ 89.2065079, 26.1272657 ], [ 89.2064646, 26.1274645 ], [ 89.2065079, 26.1280178 ], [ 89.2063436, 26.1281994 ], [ 89.2062182, 26.1282642 ], [ 89.2051364, 26.1284446 ], [ 89.2039784, 26.128416 ], [ 89.2033207, 26.1292738 ], [ 89.2022357, 26.1293058 ], [ 89.2011374, 26.1284806 ], [ 89.1995281, 26.1276005 ], [ 89.1983265, 26.1267593 ], [ 89.1981636, 26.1267865 ], [ 89.1980731, 26.1267322 ], [ 89.1979827, 26.1266643 ], [ 89.1979456, 26.1265693 ], [ 89.1978913, 26.126411 ], [ 89.1978144, 26.1263341 ], [ 89.1977511, 26.1262798 ], [ 89.1976515, 26.1262798 ], [ 89.1975023, 26.1263613 ], [ 89.1973756, 26.126506 ], [ 89.1971585, 26.1267096 ], [ 89.1969685, 26.1268272 ], [ 89.1968418, 26.1268272 ], [ 89.1967333, 26.1267639 ], [ 89.196679, 26.1266824 ], [ 89.1966745, 26.1265603 ], [ 89.1966835, 26.1264472 ], [ 89.1967468, 26.1263251 ], [ 89.1968418, 26.1261396 ], [ 89.1968599, 26.1260537 ], [ 89.1968192, 26.1259315 ], [ 89.1967604, 26.1258275 ], [ 89.1966745, 26.1257325 ], [ 89.1965297, 26.1256465 ], [ 89.1964347, 26.1255606 ], [ 89.1963072, 26.1254566 ], [ 89.1962031, 26.1254113 ], [ 89.1961081, 26.1254068 ], [ 89.1960267, 26.1254792 ], [ 89.1959588, 26.1256465 ], [ 89.1959724, 26.1257913 ], [ 89.1959543, 26.1260401 ], [ 89.1959543, 26.1261351 ], [ 89.1958412, 26.1262437 ], [ 89.1956829, 26.1262934 ], [ 89.1955653, 26.1262617 ], [ 89.1954658, 26.1261713 ], [ 89.1953843, 26.1260401 ], [ 89.1952803, 26.1258592 ], [ 89.195217, 26.1256827 ], [ 89.1951763, 26.1255561 ], [ 89.1951491, 26.125452 ], [ 89.1950451, 26.1253932 ], [ 89.1949275, 26.1253977 ], [ 89.1947782, 26.1254927 ], [ 89.1946199, 26.1256239 ], [ 89.1944751, 26.1257506 ], [ 89.1943801, 26.1258365 ], [ 89.1942806, 26.1259044 ], [ 89.1941992, 26.1259361 ], [ 89.1941585, 26.1259315 ], [ 89.1940635, 26.125927 ], [ 89.1940273, 26.1258592 ], [ 89.1940228, 26.1257687 ], [ 89.1940635, 26.1256692 ], [ 89.1941313, 26.1255742 ], [ 89.1942019, 26.1255199 ], [ 89.1942788, 26.125443 ], [ 89.1943512, 26.1253525 ], [ 89.1943647, 26.1252801 ], [ 89.1943602, 26.1252078 ], [ 89.1943557, 26.1251309 ], [ 89.1943195, 26.1250947 ], [ 89.1942471, 26.1250856 ], [ 89.1941702, 26.1250947 ], [ 89.1940526, 26.1251309 ], [ 89.1938852, 26.1252123 ], [ 89.1937179, 26.1252394 ], [ 89.1935098, 26.1252756 ], [ 89.1933696, 26.1252439 ], [ 89.1932519, 26.1251444 ], [ 89.1931977, 26.1250359 ], [ 89.1931705, 26.1248821 ], [ 89.193166, 26.1247599 ], [ 89.1931389, 26.1246785 ], [ 89.1930981, 26.1245609 ], [ 89.1930032, 26.1244704 ], [ 89.1928584, 26.1243845 ], [ 89.1927625, 26.1243483 ], [ 89.1926132, 26.1243211 ], [ 89.1925001, 26.1243211 ], [ 89.192387, 26.1243528 ], [ 89.1922513, 26.1244433 ], [ 89.1921925, 26.1245473 ], [ 89.1921654, 26.1246468 ], [ 89.192188, 26.1247735 ], [ 89.192188, 26.1249002 ], [ 89.1922061, 26.1250223 ], [ 89.192179, 26.1251897 ], [ 89.1921066, 26.1253299 ], [ 89.1920523, 26.125452 ], [ 89.1919302, 26.1255063 ], [ 89.1918533, 26.1254656 ], [ 89.1917628, 26.1254023 ], [ 89.1916949, 26.1253118 ], [ 89.1916271, 26.1251806 ], [ 89.1915638, 26.1250766 ], [ 89.1914914, 26.1249454 ], [ 89.1914009, 26.1248052 ], [ 89.1912471, 26.124769 ], [ 89.1911376, 26.1247712 ], [ 89.1909612, 26.1248165 ], [ 89.19083, 26.1248753 ], [ 89.1906446, 26.1249703 ], [ 89.1904048, 26.1250924 ], [ 89.1902284, 26.1251919 ], [ 89.1901017, 26.1252145 ], [ 89.1898801, 26.1252914 ], [ 89.1897037, 26.1253322 ], [ 89.1896358, 26.1254498 ], [ 89.189663, 26.1255357 ], [ 89.1897761, 26.1256036 ], [ 89.1899118, 26.1256759 ], [ 89.1900113, 26.1257031 ], [ 89.1900927, 26.1257755 ], [ 89.1901515, 26.1259383 ], [ 89.1901606, 26.1260265 ], [ 89.1901696, 26.1261713 ], [ 89.1901696, 26.1263296 ], [ 89.1901289, 26.1265784 ], [ 89.1900656, 26.126782 ], [ 89.1899299, 26.1269312 ], [ 89.1897715, 26.1270307 ], [ 89.189596, 26.1271574 ], [ 89.1894829, 26.1272524 ], [ 89.1892613, 26.1274062 ], [ 89.1891165, 26.1274786 ], [ 89.1889582, 26.1275645 ], [ 89.1887546, 26.1276414 ], [ 89.1885511, 26.1277183 ], [ 89.1882978, 26.1278088 ], [ 89.1881032, 26.1278586 ], [ 89.1879947, 26.1278631 ], [ 89.1879178, 26.1278405 ], [ 89.1878336, 26.1278043 ], [ 89.1877115, 26.1276414 ], [ 89.1876029, 26.1275148 ], [ 89.187517, 26.1273926 ], [ 89.1873994, 26.1273429 ], [ 89.1872863, 26.1273203 ], [ 89.1871551, 26.1273112 ], [ 89.1870058, 26.1273293 ], [ 89.1868792, 26.1274424 ], [ 89.1868339, 26.1275645 ], [ 89.1868294, 26.1277274 ], [ 89.1867751, 26.1278631 ], [ 89.1866847, 26.12794 ], [ 89.1865263, 26.12794 ], [ 89.1863997, 26.1278857 ], [ 89.1863273, 26.1278133 ], [ 89.1861952, 26.12775 ], [ 89.1860459, 26.1276912 ], [ 89.1859148, 26.1276686 ], [ 89.1857067, 26.1276369 ], [ 89.1855936, 26.127551 ], [ 89.1854941, 26.1274469 ], [ 89.1853674, 26.1273745 ], [ 89.1852769, 26.1273293 ], [ 89.1852, 26.1272931 ], [ 89.1850553, 26.1273157 ], [ 89.1849648, 26.1273972 ], [ 89.1849331, 26.1275283 ], [ 89.1849603, 26.1276731 ], [ 89.1849965, 26.1277771 ], [ 89.1850779, 26.1278676 ], [ 89.1852046, 26.1279038 ], [ 89.1852679, 26.1279807 ], [ 89.1852679, 26.1281028 ], [ 89.185286, 26.1282114 ], [ 89.1852996, 26.12832 ], [ 89.1853222, 26.1284421 ], [ 89.1853448, 26.1286095 ], [ 89.1853312, 26.1287949 ], [ 89.1852498, 26.1289894 ], [ 89.1851638, 26.1291071 ], [ 89.1850372, 26.1291025 ], [ 89.1849286, 26.1290573 ], [ 89.1848472, 26.1289442 ], [ 89.1847522, 26.1288583 ], [ 89.1846753, 26.1288447 ], [ 89.1845975, 26.1288583 ], [ 89.1844437, 26.1289261 ], [ 89.1842492, 26.1289487 ], [ 89.1840773, 26.1289171 ], [ 89.1839868, 26.1288492 ], [ 89.1838285, 26.1287542 ], [ 89.1836792, 26.1286411 ], [ 89.1834847, 26.1285914 ], [ 89.1833173, 26.1285914 ], [ 89.1832269, 26.1286411 ], [ 89.1832223, 26.1287226 ], [ 89.183245, 26.1288492 ], [ 89.1833173, 26.129003 ], [ 89.1833354, 26.1291161 ], [ 89.1833264, 26.1292066 ], [ 89.1832359, 26.1292699 ], [ 89.1830595, 26.1293604 ], [ 89.1827564, 26.1294508 ], [ 89.1824217, 26.1295368 ], [ 89.1821684, 26.1296001 ], [ 89.18201, 26.1295911 ], [ 89.1819105, 26.1294916 ], [ 89.1818336, 26.1292654 ], [ 89.1817567, 26.1290392 ], [ 89.1817522, 26.1288718 ], [ 89.181716, 26.1287271 ], [ 89.1816255, 26.1286502 ], [ 89.1815667, 26.1286049 ], [ 89.1814753, 26.1286321 ], [ 89.1813442, 26.1286502 ], [ 89.1811994, 26.1286638 ], [ 89.1810501, 26.1286592 ], [ 89.1809687, 26.1286321 ], [ 89.180824, 26.1285371 ], [ 89.180729, 26.1284738 ], [ 89.1805842, 26.1283923 ], [ 89.1804259, 26.1283154 ], [ 89.1802449, 26.1282476 ], [ 89.1801047, 26.1281481 ], [ 89.1799871, 26.1280124 ], [ 89.1798604, 26.1278857 ], [ 89.1797338, 26.127759 ], [ 89.1796116, 26.1276957 ], [ 89.1794352, 26.1277002 ], [ 89.1793357, 26.1277771 ], [ 89.179295, 26.1278902 ], [ 89.1792814, 26.1280576 ], [ 89.1792724, 26.1281888 ], [ 89.1792407, 26.128286 ], [ 89.1791502, 26.1284579 ], [ 89.1790779, 26.1285846 ], [ 89.1789783, 26.1287067 ], [ 89.1789331, 26.1288334 ], [ 89.1788517, 26.1290731 ], [ 89.1787703, 26.1291907 ], [ 89.1786934, 26.129245 ], [ 89.1785893, 26.129288 ], [ 89.1785169, 26.1293106 ], [ 89.1784762, 26.1293694 ], [ 89.17844, 26.1294599 ], [ 89.1784491, 26.1295277 ], [ 89.1785396, 26.1296046 ], [ 89.178621, 26.1296906 ], [ 89.1787386, 26.1297765 ], [ 89.17882, 26.1298263 ], [ 89.1788743, 26.1299077 ], [ 89.1789195, 26.130066 ], [ 89.1789241, 26.1301972 ], [ 89.1788426, 26.1303013 ], [ 89.1787522, 26.1303691 ], [ 89.1786391, 26.130446 ], [ 89.1784853, 26.1305275 ], [ 89.1783812, 26.1305365 ], [ 89.1782935, 26.1305275 ], [ 89.1782256, 26.1304822 ], [ 89.178194, 26.1303737 ], [ 89.1781623, 26.1302244 ], [ 89.1781352, 26.130066 ], [ 89.1780854, 26.1299575 ], [ 89.1779949, 26.1298987 ], [ 89.1778864, 26.1298761 ], [ 89.1778004, 26.1299122 ], [ 89.1777099, 26.1299756 ], [ 89.1775788, 26.1300977 ], [ 89.1775019, 26.1301882 ], [ 89.177425, 26.1303013 ], [ 89.1773481, 26.1304008 ], [ 89.1772621, 26.1305048 ], [ 89.1770857, 26.1305863 ], [ 89.1769183, 26.1306948 ], [ 89.1767917, 26.1307853 ], [ 89.1766867, 26.1308712 ], [ 89.176637, 26.1309074 ], [ 89.1764967, 26.1309255 ], [ 89.1763475, 26.130921 ], [ 89.1761846, 26.1308712 ], [ 89.1760444, 26.1308893 ], [ 89.1758453, 26.1309775 ], [ 89.1757503, 26.1310771 ], [ 89.1756915, 26.1311494 ], [ 89.1756011, 26.131258 ], [ 89.1755694, 26.131344 ], [ 89.1755513, 26.1314616 ], [ 89.1755965, 26.1315837 ], [ 89.1756508, 26.131742 ], [ 89.1756825, 26.1318732 ], [ 89.1756291, 26.1319637 ], [ 89.1755794, 26.1320225 ], [ 89.1754889, 26.1320632 ], [ 89.1753441, 26.132113 ], [ 89.1751994, 26.1321175 ], [ 89.1751044, 26.1320949 ], [ 89.1750139, 26.1320225 ], [ 89.1750003, 26.1319546 ], [ 89.1750003, 26.1318642 ], [ 89.1750094, 26.1317737 ], [ 89.1750727, 26.1316787 ], [ 89.1751632, 26.1315747 ], [ 89.1752265, 26.1315339 ], [ 89.1753351, 26.1314254 ], [ 89.1753894, 26.131353 ], [ 89.1753894, 26.1312625 ], [ 89.1753803, 26.131154 ], [ 89.1753487, 26.1310544 ], [ 89.1752944, 26.130973 ], [ 89.175136, 26.1309097 ], [ 89.1750275, 26.1309233 ], [ 89.1749099, 26.1309323 ], [ 89.1747787, 26.1309549 ], [ 89.1746882, 26.1310137 ], [ 89.1745706, 26.1310997 ], [ 89.1745027, 26.1311856 ], [ 89.1743851, 26.1312987 ], [ 89.174263, 26.1313349 ], [ 89.1741771, 26.131353 ], [ 89.174064, 26.1313575 ], [ 89.1739464, 26.1313349 ], [ 89.1738333, 26.1312942 ], [ 89.1737654, 26.131249 ], [ 89.173598, 26.131163 ], [ 89.1735076, 26.1310952 ], [ 89.1734035, 26.1310273 ], [ 89.1733131, 26.1309866 ], [ 89.1732271, 26.130973 ], [ 89.1731095, 26.1309504 ], [ 89.1729647, 26.1309142 ], [ 89.1728517, 26.1308825 ], [ 89.1727205, 26.1308418 ], [ 89.1725802, 26.1307876 ], [ 89.1724174, 26.1307333 ], [ 89.1722319, 26.1306835 ], [ 89.1720962, 26.1306473 ], [ 89.1719967, 26.1305749 ], [ 89.1719017, 26.130498 ], [ 89.1718022, 26.1304121 ], [ 89.1717117, 26.1303533 ], [ 89.1716167, 26.1303352 ], [ 89.1715308, 26.1303352 ], [ 89.1714041, 26.1303533 ], [ 89.1713182, 26.130385 ], [ 89.1712449, 26.1304031 ], [ 89.1711816, 26.1304257 ], [ 89.1710639, 26.1304573 ], [ 89.1709328, 26.1304709 ], [ 89.1708152, 26.1304483 ], [ 89.1707202, 26.1304211 ], [ 89.1706116, 26.1303759 ], [ 89.1704804, 26.1303171 ], [ 89.1703492, 26.1302493 ], [ 89.170209, 26.1302176 ], [ 89.1701095, 26.1302085 ], [ 89.1700281, 26.1302131 ], [ 89.1699512, 26.1302493 ], [ 89.1699014, 26.1303352 ], [ 89.1698788, 26.1304121 ], [ 89.1698607, 26.1305252 ], [ 89.1698788, 26.1306066 ], [ 89.1698788, 26.1306926 ], [ 89.1699195, 26.1307876 ], [ 89.1699693, 26.1308916 ], [ 89.17001, 26.1309911 ], [ 89.1700235, 26.1311313 ], [ 89.1700235, 26.1312173 ], [ 89.1699738, 26.1312806 ], [ 89.1699285, 26.1313168 ], [ 89.1698697, 26.1313394 ], [ 89.1698109, 26.1313485 ], [ 89.169725, 26.1313168 ], [ 89.1696616, 26.1312716 ], [ 89.1696119, 26.1311811 ], [ 89.1695395, 26.1310861 ], [ 89.1694219, 26.1310092 ], [ 89.1692545, 26.1309459 ], [ 89.1691098, 26.1309142 ], [ 89.1689605, 26.1309142 ], [ 89.1688067, 26.1309278 ], [ 89.1686439, 26.1309278 ], [ 89.1685489, 26.1309685 ], [ 89.1684765, 26.1310364 ], [ 89.1684584, 26.1311133 ], [ 89.1684358, 26.1312444 ], [ 89.1684041, 26.1313575 ], [ 89.1683724, 26.1314389 ], [ 89.1683046, 26.1314842 ], [ 89.1682358, 26.1315113 ], [ 89.1680956, 26.1315113 ], [ 89.1679599, 26.1314842 ], [ 89.1678468, 26.1314299 ], [ 89.1677744, 26.131353 ], [ 89.1677292, 26.1312942 ], [ 89.1677428, 26.1311856 ], [ 89.1678242, 26.1310725 ], [ 89.1678875, 26.1309006 ], [ 89.1679101, 26.130783 ], [ 89.1678966, 26.1307107 ], [ 89.1678332, 26.130593 ], [ 89.1677292, 26.1304754 ], [ 89.1676297, 26.130394 ], [ 89.1675211, 26.130299 ], [ 89.1673311, 26.1302447 ], [ 89.1671999, 26.1301814 ], [ 89.1670914, 26.1300909 ], [ 89.167028, 26.130005 ], [ 89.1669466, 26.1299145 ], [ 89.1668381, 26.1298738 ], [ 89.1667476, 26.1299145 ], [ 89.1666074, 26.1300186 ], [ 89.1664716, 26.1301181 ], [ 89.1662997, 26.1302221 ], [ 89.1662274, 26.1303171 ], [ 89.1661776, 26.1304392 ], [ 89.1661776, 26.1305297 ], [ 89.16625, 26.1306383 ], [ 89.1663359, 26.1307695 ], [ 89.1664264, 26.1309006 ], [ 89.1665621, 26.1310318 ], [ 89.1666254, 26.1311494 ], [ 89.1667114, 26.1312263 ], [ 89.1668019, 26.1312263 ], [ 89.1668833, 26.1311992 ], [ 89.1669557, 26.131163 ], [ 89.1670145, 26.131163 ], [ 89.1670914, 26.1311992 ], [ 89.1671637, 26.1313032 ], [ 89.1671818, 26.1314389 ], [ 89.1671457, 26.1316018 ], [ 89.1670507, 26.1317194 ], [ 89.1669846, 26.1318167 ], [ 89.1668308, 26.1319795 ], [ 89.1667087, 26.1321062 ], [ 89.1665051, 26.1322328 ], [ 89.166383, 26.1323007 ], [ 89.1662835, 26.1323866 ], [ 89.1662337, 26.132459 ], [ 89.1662337, 26.1325902 ], [ 89.1662111, 26.1327123 ], [ 89.1661568, 26.1328028 ], [ 89.1660799, 26.132839 ], [ 89.1660075, 26.132839 ], [ 89.1659578, 26.1328073 ], [ 89.1659216, 26.1327168 ], [ 89.165908, 26.1326603 ], [ 89.1658944, 26.1324929 ], [ 89.1658854, 26.1323346 ], [ 89.1658356, 26.1322125 ], [ 89.1657804, 26.1321265 ], [ 89.1656628, 26.1320134 ], [ 89.1654774, 26.1319003 ], [ 89.1653371, 26.131837 ], [ 89.165111, 26.1317782 ], [ 89.16493, 26.1316968 ], [ 89.1647943, 26.1316108 ], [ 89.1646722, 26.1315701 ], [ 89.1645184, 26.1315158 ], [ 89.1643374, 26.1314978 ], [ 89.1642108, 26.1314978 ], [ 89.1641339, 26.131543 ], [ 89.1640796, 26.1316425 ], [ 89.1640117, 26.1317873 ], [ 89.1639801, 26.1319184 ], [ 89.1639665, 26.1320406 ], [ 89.163971, 26.1321039 ], [ 89.1640163, 26.1321718 ], [ 89.1640886, 26.1322351 ], [ 89.1641836, 26.132321 ], [ 89.164256, 26.132416 ], [ 89.1643058, 26.1325156 ], [ 89.1643239, 26.1326128 ], [ 89.1643601, 26.1327123 ], [ 89.1643284, 26.1328526 ], [ 89.1642786, 26.1329973 ], [ 89.1642334, 26.1331421 ], [ 89.1642108, 26.1332778 ], [ 89.1641646, 26.1333456 ], [ 89.1641058, 26.133427 ], [ 89.1639927, 26.1334949 ], [ 89.1639068, 26.1335311 ], [ 89.1638299, 26.1335266 ], [ 89.1637575, 26.1334632 ], [ 89.1637304, 26.1333728 ], [ 89.1637304, 26.1332687 ], [ 89.1637349, 26.1331692 ], [ 89.163753, 26.1330561 ], [ 89.1638073, 26.1329385 ], [ 89.1638435, 26.132848 ], [ 89.1638525, 26.1327711 ], [ 89.1637937, 26.132744 ], [ 89.1637259, 26.132753 ], [ 89.163649, 26.1327621 ], [ 89.1635494, 26.1328118 ], [ 89.1634047, 26.1328706 ], [ 89.1633278, 26.1329068 ], [ 89.1632192, 26.1328887 ], [ 89.163079, 26.1328526 ], [ 89.1629568, 26.1328118 ], [ 89.1628302, 26.1327757 ], [ 89.1627216, 26.1327802 ], [ 89.1625995, 26.1327757 ], [ 89.1624819, 26.1327757 ], [ 89.1623959, 26.1327983 ], [ 89.1623145, 26.1328299 ], [ 89.1621969, 26.1329114 ], [ 89.1620657, 26.1329973 ], [ 89.1619752, 26.1330516 ], [ 89.1619164, 26.1331194 ], [ 89.1618169, 26.1332416 ], [ 89.1616993, 26.1333637 ], [ 89.1616179, 26.1334768 ], [ 89.16155, 26.1335899 ], [ 89.1615093, 26.1336985 ], [ 89.1615093, 26.1338206 ], [ 89.1614822, 26.1339608 ], [ 89.1615229, 26.1340513 ], [ 89.1615862, 26.1341282 ], [ 89.1616722, 26.1342639 ], [ 89.1618667, 26.1344132 ], [ 89.1620521, 26.1344765 ], [ 89.162215, 26.1344856 ], [ 89.1623552, 26.1345444 ], [ 89.1624547, 26.1346394 ], [ 89.162509, 26.1347932 ], [ 89.1625226, 26.1350148 ], [ 89.1625181, 26.1352184 ], [ 89.1625181, 26.135345 ], [ 89.1624638, 26.13544 ], [ 89.1623733, 26.135526 ], [ 89.1622828, 26.1355712 ], [ 89.1621969, 26.1355983 ], [ 89.1621245, 26.1356029 ], [ 89.1619843, 26.1356029 ], [ 89.1619164, 26.1355893 ], [ 89.1617717, 26.1356029 ], [ 89.1617083, 26.1355712 ], [ 89.1615953, 26.1355169 ], [ 89.1615093, 26.13544 ], [ 89.1613962, 26.1353541 ], [ 89.1613058, 26.1352907 ], [ 89.1612108, 26.135241 ], [ 89.1611293, 26.1351822 ], [ 89.1610298, 26.1351369 ], [ 89.1609167, 26.1351053 ], [ 89.1608263, 26.1350646 ], [ 89.1606634, 26.1350374 ], [ 89.1605413, 26.1350148 ], [ 89.1604327, 26.1350148 ], [ 89.160306, 26.1350374 ], [ 89.160202, 26.1350827 ], [ 89.1601342, 26.1351369 ], [ 89.1600799, 26.1351958 ], [ 89.1600256, 26.1352546 ], [ 89.1599577, 26.1353496 ], [ 89.1598989, 26.1354129 ], [ 89.1598627, 26.1354853 ], [ 89.1598582, 26.1355486 ], [ 89.1598627, 26.1356164 ], [ 89.1598627, 26.1356707 ], [ 89.1599125, 26.1357024 ], [ 89.1599894, 26.1357431 ], [ 89.1600844, 26.1357657 ], [ 89.1602111, 26.1357793 ], [ 89.1603603, 26.13582 ], [ 89.1605096, 26.1358562 ], [ 89.160686, 26.1359014 ], [ 89.1607901, 26.1360055 ], [ 89.1608534, 26.1360733 ], [ 89.1609213, 26.1361819 ], [ 89.1609982, 26.1363085 ], [ 89.1610751, 26.1363945 ], [ 89.161152, 26.1364804 ], [ 89.1612153, 26.1365257 ], [ 89.1612741, 26.1366478 ], [ 89.1612877, 26.1367383 ], [ 89.1612786, 26.1368695 ], [ 89.1612877, 26.1369735 ], [ 89.1612469, 26.1371092 ], [ 89.1612062, 26.1372133 ], [ 89.1611565, 26.1372856 ], [ 89.161066, 26.1373173 ], [ 89.1609891, 26.137349 ], [ 89.1609348, 26.1373806 ], [ 89.1608624, 26.1373897 ], [ 89.1607765, 26.1373851 ], [ 89.160677, 26.137349 ], [ 89.1605956, 26.1372992 ], [ 89.1605322, 26.1372404 ], [ 89.1604644, 26.1371771 ], [ 89.1603965, 26.1371318 ], [ 89.1603468, 26.1370595 ], [ 89.160288, 26.1369871 ], [ 89.1602111, 26.1369102 ], [ 89.1601794, 26.1369554 ], [ 89.160107, 26.137073 ], [ 89.1600392, 26.1371318 ], [ 89.1599125, 26.1371952 ], [ 89.1597994, 26.1372178 ], [ 89.1597044, 26.1372223 ], [ 89.1596004, 26.1372404 ], [ 89.1595597, 26.1373128 ], [ 89.1595144, 26.1373716 ], [ 89.1594828, 26.1374801 ], [ 89.1594692, 26.1375797 ], [ 89.159424, 26.1376611 ], [ 89.1593606, 26.1377335 ], [ 89.1593516, 26.1378058 ], [ 89.1593652, 26.1378646 ], [ 89.1594104, 26.1379189 ], [ 89.1594692, 26.1379415 ], [ 89.1595642, 26.1379687 ], [ 89.1596094, 26.1379687 ], [ 89.1596501, 26.1379235 ], [ 89.1596908, 26.1378601 ], [ 89.159718, 26.1377742 ], [ 89.1597406, 26.1377108 ], [ 89.1597949, 26.1376385 ], [ 89.1598944, 26.1376249 ], [ 89.1599894, 26.1376339 ], [ 89.1600708, 26.1376747 ], [ 89.1601296, 26.1377335 ], [ 89.1602291, 26.1378149 ], [ 89.160306, 26.1378963 ], [ 89.1604056, 26.1379732 ], [ 89.1604598, 26.1380139 ], [ 89.1605277, 26.1380863 ], [ 89.160591, 26.1381315 ], [ 89.1606182, 26.1382084 ], [ 89.1606182, 26.1382944 ], [ 89.1605865, 26.1383532 ], [ 89.1605368, 26.1384482 ], [ 89.1604598, 26.1384979 ], [ 89.160392, 26.1385748 ], [ 89.1603332, 26.1386201 ], [ 89.160288, 26.1386834 ], [ 89.1602337, 26.1387648 ], [ 89.1602201, 26.1388463 ], [ 89.1601975, 26.1389232 ], [ 89.1601975, 26.1389955 ], [ 89.160202, 26.1390498 ], [ 89.1602337, 26.1391131 ], [ 89.1602744, 26.1391629 ], [ 89.1602744, 26.1392172 ], [ 89.1602744, 26.1392986 ], [ 89.1602472, 26.1393891 ], [ 89.160202, 26.1394569 ], [ 89.1601522, 26.1395157 ], [ 89.160107, 26.13957 ], [ 89.1600618, 26.1396198 ], [ 89.160012, 26.139656 ], [ 89.1599442, 26.1396424 ], [ 89.1598311, 26.1396198 ], [ 89.1597487, 26.1395994 ], [ 89.1596854, 26.1395497 ], [ 89.1596311, 26.1394863 ], [ 89.1595904, 26.1394321 ], [ 89.1595904, 26.1393778 ], [ 89.1595678, 26.1392692 ], [ 89.1595407, 26.1391697 ], [ 89.1594909, 26.1391018 ], [ 89.1594276, 26.1390295 ], [ 89.1593507, 26.1389933 ], [ 89.1592828, 26.1389571 ], [ 89.1592104, 26.138939 ], [ 89.1591426, 26.1389254 ], [ 89.1590521, 26.1389345 ], [ 89.1589436, 26.1389435 ], [ 89.1588893, 26.138948 ], [ 89.1588305, 26.1389209 ], [ 89.1587626, 26.1388847 ], [ 89.1586902, 26.1388395 ], [ 89.1586314, 26.1388123 ], [ 89.1585455, 26.1388123 ], [ 89.1584867, 26.1388304 ], [ 89.1584233, 26.1388711 ], [ 89.1583645, 26.1389209 ], [ 89.1582967, 26.1389797 ], [ 89.1582424, 26.1390566 ], [ 89.1581836, 26.139138 ], [ 89.1581429, 26.1391968 ], [ 89.1580841, 26.1392556 ], [ 89.15798, 26.1393235 ], [ 89.1578896, 26.1394185 ], [ 89.1578127, 26.1394999 ], [ 89.1577584, 26.1395587 ], [ 89.1577132, 26.1395768 ], [ 89.1576317, 26.1395859 ], [ 89.1575684, 26.1395813 ], [ 89.1575096, 26.1395678 ], [ 89.1574644, 26.1395451 ], [ 89.1574055, 26.139518 ], [ 89.1573377, 26.1395135 ], [ 89.1572834, 26.1395135 ], [ 89.157202, 26.139518 ], [ 89.157107, 26.139527 ], [ 89.157003, 26.1395361 ], [ 89.1569532, 26.139518 ], [ 89.1568853, 26.1394863 ], [ 89.156822, 26.1394321 ], [ 89.1567496, 26.1393823 ], [ 89.1567044, 26.1393416 ], [ 89.1566863, 26.1392737 ], [ 89.1566456, 26.1392014 ], [ 89.1566094, 26.1391109 ], [ 89.1565777, 26.139034 ], [ 89.15649, 26.1389526 ], [ 89.1564583, 26.1389073 ], [ 89.1563995, 26.1388485 ], [ 89.1563498, 26.1387942 ], [ 89.1562548, 26.1387445 ], [ 89.156196, 26.1387264 ], [ 89.1561236, 26.1387264 ], [ 89.1560376, 26.1387535 ], [ 89.1559743, 26.1387807 ], [ 89.1559291, 26.1387761 ], [ 89.1558476, 26.1387897 ], [ 89.1557481, 26.1388123 ], [ 89.1556984, 26.1388123 ], [ 89.1556486, 26.138758 ], [ 89.1556169, 26.1387128 ], [ 89.1556169, 26.1386495 ], [ 89.1556169, 26.1385409 ], [ 89.1556169, 26.1384143 ], [ 89.1555988, 26.1383554 ], [ 89.15554, 26.1383147 ], [ 89.1554134, 26.1383193 ], [ 89.1553274, 26.1383238 ], [ 89.1553139, 26.1384323 ], [ 89.155332, 26.1384821 ], [ 89.1553139, 26.1385454 ], [ 89.1552867, 26.1386178 ], [ 89.155246, 26.1386585 ], [ 89.1551917, 26.1386766 ], [ 89.155142, 26.1387309 ], [ 89.1551148, 26.1388033 ], [ 89.1550741, 26.1388485 ], [ 89.1550379, 26.1389254 ], [ 89.1550108, 26.1390114 ], [ 89.1550198, 26.1391064 ], [ 89.1550289, 26.1391833 ], [ 89.155047, 26.1392669 ], [ 89.1550605, 26.139371 ], [ 89.1550605, 26.139466 ], [ 89.1550424, 26.1395338 ], [ 89.1550379, 26.1396017 ], [ 89.1550334, 26.1396786 ], [ 89.1550244, 26.1397555 ], [ 89.1550244, 26.1398505 ], [ 89.1550244, 26.1399229 ], [ 89.1550379, 26.1400314 ], [ 89.1550515, 26.1401219 ], [ 89.1550651, 26.1401807 ], [ 89.1551194, 26.1402078 ], [ 89.1551691, 26.1402395 ], [ 89.1552234, 26.1402938 ], [ 89.1552958, 26.1403616 ], [ 89.1553093, 26.140425 ], [ 89.1553093, 26.1405335 ], [ 89.1553093, 26.1406104 ], [ 89.155275, 26.1406602 ], [ 89.1552342, 26.1406964 ], [ 89.1551845, 26.1407235 ], [ 89.1551257, 26.1407416 ], [ 89.1550488, 26.1407461 ], [ 89.1550171, 26.1407461 ], [ 89.154895, 26.1407507 ], [ 89.1547955, 26.1407688 ], [ 89.1547231, 26.1408004 ], [ 89.1546688, 26.1408592 ], [ 89.1546326, 26.1409588 ], [ 89.1546145, 26.1410583 ], [ 89.1545783, 26.1411623 ], [ 89.1545602, 26.1412528 ], [ 89.1545241, 26.1413523 ], [ 89.1544833, 26.141488 ], [ 89.1544652, 26.1415672 ], [ 89.1544652, 26.1416169 ], [ 89.1544698, 26.1416938 ], [ 89.1544969, 26.1417617 ], [ 89.1545286, 26.1417888 ], [ 89.1545602, 26.1418748 ], [ 89.1545602, 26.1419562 ], [ 89.1545557, 26.1420331 ], [ 89.1545376, 26.1420964 ], [ 89.154515, 26.1421507 ], [ 89.1544833, 26.1422005 ], [ 89.1544291, 26.1422774 ], [ 89.1543748, 26.1423588 ], [ 89.1543431, 26.1424266 ], [ 89.1542934, 26.1425126 ], [ 89.1542617, 26.1425623 ], [ 89.1542165, 26.1427252 ], [ 89.1542119, 26.1428066 ], [ 89.1541395, 26.1428926 ], [ 89.1540265, 26.1429514 ], [ 89.1539405, 26.1430102 ], [ 89.15385, 26.1430554 ], [ 89.153755, 26.1431187 ], [ 89.1537053, 26.143173 ], [ 89.1536736, 26.1432454 ], [ 89.1536374, 26.1433178 ], [ 89.1535922, 26.1434037 ], [ 89.153547, 26.1434987 ], [ 89.1534882, 26.1435756 ], [ 89.1534429, 26.1436729 ], [ 89.1534248, 26.1437498 ], [ 89.1534248, 26.1438131 ], [ 89.1534429, 26.1438855 ], [ 89.1534701, 26.1439352 ], [ 89.1534927, 26.1439669 ], [ 89.1534972, 26.1440393 ], [ 89.1534972, 26.1441117 ], [ 89.1534836, 26.1441479 ], [ 89.1534429, 26.144175 ], [ 89.1533932, 26.1441976 ], [ 89.1533344, 26.1442338 ], [ 89.153262, 26.1442836 ], [ 89.1532258, 26.1443378 ], [ 89.1531941, 26.1444147 ], [ 89.1531851, 26.1444645 ], [ 89.1531806, 26.1445369 ], [ 89.1531896, 26.1446319 ], [ 89.153176, 26.1447133 ], [ 89.1531534, 26.1448083 ], [ 89.1531263, 26.1448897 ], [ 89.1530946, 26.1449711 ], [ 89.1530539, 26.1450345 ], [ 89.1530041, 26.1451249 ], [ 89.1529137, 26.1452606 ], [ 89.152873, 26.1453149 ], [ 89.152873, 26.1453873 ], [ 89.1529046, 26.1454371 ], [ 89.1529408, 26.1454913 ], [ 89.1529815, 26.1455366 ], [ 89.1530539, 26.1455909 ], [ 89.1530991, 26.1456316 ], [ 89.1531308, 26.1456904 ], [ 89.1531218, 26.1457582 ], [ 89.1530792, 26.1458261 ], [ 89.1530069, 26.1459166 ], [ 89.1529435, 26.146007 ], [ 89.1528666, 26.1460161 ], [ 89.1527897, 26.1460477 ], [ 89.1527083, 26.1460477 ], [ 89.1526269, 26.1460477 ], [ 89.1524686, 26.1460161 ], [ 89.1523555, 26.1460206 ], [ 89.1522605, 26.1460477 ], [ 89.1521564, 26.1460568 ], [ 89.1520479, 26.1460839 ], [ 89.1519529, 26.1461156 ], [ 89.151885, 26.1461427 ], [ 89.1518443, 26.1461563 ], [ 89.1518172, 26.1462015 ], [ 89.1518172, 26.1462603 ], [ 89.1518262, 26.1463553 ], [ 89.1518488, 26.1463915 ], [ 89.1519031, 26.1464322 ], [ 89.1519981, 26.1464639 ], [ 89.152075, 26.1464865 ], [ 89.1521655, 26.1465046 ], [ 89.1522514, 26.1465182 ], [ 89.1523102, 26.1465227 ], [ 89.1523736, 26.1465589 ], [ 89.1524278, 26.1466087 ], [ 89.1524866, 26.146672 ], [ 89.1525002, 26.1467512 ], [ 89.1525002, 26.1468054 ], [ 89.1524776, 26.1468597 ], [ 89.1524233, 26.1468823 ], [ 89.1523826, 26.1469276 ], [ 89.1523328, 26.1469683 ], [ 89.1523057, 26.1470135 ], [ 89.1522695, 26.1470949 ], [ 89.1522695, 26.1471628 ], [ 89.1522695, 26.1472397 ], [ 89.1522786, 26.1473302 ], [ 89.1522876, 26.1474071 ], [ 89.1522876, 26.147493 ], [ 89.1523057, 26.1475654 ], [ 89.1523464, 26.1476287 ], [ 89.1524097, 26.1476649 ], [ 89.1524776, 26.1476785 ], [ 89.1525767, 26.1477075 ], [ 89.1526857, 26.147741 ], [ 89.1527359, 26.1477913 ], [ 89.1527443, 26.1478834 ], [ 89.1527192, 26.147984 ], [ 89.1526605, 26.1480594 ], [ 89.1526354, 26.1481348 ], [ 89.1526102, 26.148227 ], [ 89.1526144, 26.1484384 ], [ 89.1526119, 26.1484951 ], [ 89.1525198, 26.1484867 ], [ 89.152436, 26.148428 ], [ 89.1523271, 26.1483778 ], [ 89.1522265, 26.1483945 ], [ 89.1521679, 26.1484113 ], [ 89.1521092, 26.1484699 ], [ 89.1520338, 26.1485705 ], [ 89.1520087, 26.1486542 ], [ 89.1519752, 26.1487799 ], [ 89.1519249, 26.1489475 ], [ 89.1518998, 26.1490899 ], [ 89.1518495, 26.1493329 ], [ 89.1518327, 26.1494837 ], [ 89.1518244, 26.1496261 ], [ 89.1518244, 26.1497518 ], [ 89.1518244, 26.1498691 ], [ 89.1518411, 26.149978 ], [ 89.151883, 26.1500869 ], [ 89.15195, 26.1501875 ], [ 89.1520171, 26.1502545 ], [ 89.1520757, 26.150355 ], [ 89.1520171, 26.1504597 ], [ 89.1519836, 26.1505435 ], [ 89.1519333, 26.1506692 ], [ 89.1519082, 26.1507781 ], [ 89.1518914, 26.1508787 ], [ 89.1518914, 26.1509792 ], [ 89.1519249, 26.1510797 ], [ 89.1520003, 26.151197 ], [ 89.152059, 26.1513395 ], [ 89.152059, 26.1514149 ], [ 89.1520254, 26.1515405 ], [ 89.1519919, 26.1516662 ], [ 89.1519417, 26.1517919 ], [ 89.151883, 26.1518505 ], [ 89.1517825, 26.1519176 ], [ 89.1516568, 26.1519343 ], [ 89.1515646, 26.1519176 ], [ 89.1513971, 26.1519008 ], [ 89.1512882, 26.1519008 ], [ 89.1512463, 26.1519427 ], [ 89.1511977, 26.1520432 ], [ 89.1511223, 26.1520432 ], [ 89.1510301, 26.1520181 ], [ 89.1508793, 26.1519594 ], [ 89.1507453, 26.151884 ], [ 89.1505944, 26.1518757 ], [ 89.1504604, 26.1518757 ], [ 89.1503682, 26.1519092 ], [ 89.1502928, 26.1519762 ], [ 89.1502258, 26.1520516 ], [ 89.1501755, 26.1522024 ], [ 89.1501336, 26.1523616 ], [ 89.150075, 26.152504 ], [ 89.1500164, 26.1525962 ], [ 89.1499074, 26.1526632 ], [ 89.1498404, 26.152747 ], [ 89.149832, 26.1528685 ], [ 89.1498488, 26.1529858 ], [ 89.1499158, 26.1530696 ], [ 89.1499828, 26.1531869 ], [ 89.150008, 26.1532958 ], [ 89.1500582, 26.153455 ], [ 89.1500582, 26.1536225 ], [ 89.1500834, 26.153765 ], [ 89.1501169, 26.1538487 ], [ 89.1502342, 26.1539409 ], [ 89.1503599, 26.1540247 ], [ 89.1504688, 26.1541336 ], [ 89.1505693, 26.1542844 ], [ 89.1506615, 26.1544687 ], [ 89.1506866, 26.1546279 ], [ 89.1506615, 26.1546949 ], [ 89.1505442, 26.1547033 ], [ 89.150452, 26.1547033 ], [ 89.1503515, 26.1546949 ], [ 89.1502258, 26.1546866 ], [ 89.1500834, 26.154653 ], [ 89.1499577, 26.154586 ], [ 89.1498907, 26.1544939 ], [ 89.1498153, 26.1544268 ], [ 89.1497231, 26.1543682 ], [ 89.1495974, 26.1543766 ], [ 89.1494634, 26.1544226 ], [ 89.1493712, 26.1545064 ], [ 89.1492539, 26.1546572 ], [ 89.1491785, 26.1548164 ], [ 89.1491702, 26.1549672 ], [ 89.1491366, 26.155227 ], [ 89.1491534, 26.1553694 ], [ 89.1491869, 26.1554532 ], [ 89.1492623, 26.1555202 ], [ 89.1493293, 26.1555872 ], [ 89.149388, 26.1556542 ], [ 89.1494383, 26.155738 ], [ 89.149388, 26.1558888 ], [ 89.1493042, 26.1560313 ], [ 89.1491953, 26.1561904 ], [ 89.1491283, 26.1563496 ], [ 89.1491366, 26.1565004 ], [ 89.1490361, 26.1567267 ], [ 89.1489775, 26.1568858 ], [ 89.1489272, 26.1570283 ], [ 89.1489104, 26.1571539 ], [ 89.1489523, 26.1572461 ], [ 89.1490193, 26.1573466 ], [ 89.149078, 26.1574388 ], [ 89.1491031, 26.1575561 ], [ 89.1491031, 26.1577237 ], [ 89.1490864, 26.157908 ], [ 89.1490864, 26.1580923 ], [ 89.1490947, 26.1582682 ], [ 89.1490529, 26.1585866 ], [ 89.1491115, 26.1587374 ], [ 89.1491534, 26.1589217 ], [ 89.1491618, 26.1591144 ], [ 89.1491283, 26.1592988 ], [ 89.1490816, 26.1595114 ], [ 89.1523306, 26.1598305 ], [ 89.1553037, 26.1596414 ], [ 89.1556602, 26.1609589 ], [ 89.1561247, 26.1617474 ], [ 89.1566108, 26.1624496 ], [ 89.1572183, 26.1632945 ], [ 89.1562376, 26.1636465 ], [ 89.1548546, 26.1639483 ], [ 89.1531973, 26.1643616 ], [ 89.152573, 26.1649703 ], [ 89.1518623, 26.1654067 ], [ 89.1515661, 26.1675375 ], [ 89.1505723, 26.169201 ], [ 89.1492422, 26.1699329 ], [ 89.1476328, 26.1703604 ], [ 89.146597, 26.1703893 ], [ 89.1461493, 26.1701844 ], [ 89.1454703, 26.1698072 ], [ 89.1448417, 26.1694551 ], [ 89.1436599, 26.169254 ], [ 89.1412067, 26.1694819 ], [ 89.140861, 26.1697411 ], [ 89.1402993, 26.1716856 ], [ 89.1404664, 26.1737047 ], [ 89.141003, 26.1761725 ], [ 89.1394103, 26.1762696 ], [ 89.1375015, 26.1763414 ], [ 89.1373071, 26.1771623 ], [ 89.1372639, 26.1779077 ], [ 89.1373483, 26.1791739 ], [ 89.1364934, 26.1799282 ], [ 89.1355139, 26.1800681 ], [ 89.135341, 26.1819045 ], [ 89.1363244, 26.1819228 ], [ 89.1368957, 26.1838509 ], [ 89.1366895, 26.1855483 ], [ 89.1354059, 26.1858582 ], [ 89.1354815, 26.1873705 ], [ 89.1361404, 26.1873813 ], [ 89.137117, 26.1879622 ], [ 89.1386006, 26.1889932 ], [ 89.1384246, 26.1917843 ], [ 89.1395058, 26.1924381 ], [ 89.1390029, 26.193708 ], [ 89.1393298, 26.1947138 ], [ 89.1402602, 26.1951916 ], [ 89.1397576, 26.1970431 ], [ 89.1396363, 26.197482 ], [ 89.1394567, 26.1981188 ], [ 89.138895, 26.1988102 ], [ 89.1404829, 26.1988642 ], [ 89.1405043, 26.1996797 ], [ 89.1423409, 26.1995555 ], [ 89.1425138, 26.2009814 ], [ 89.1438533, 26.2010462 ], [ 89.1438857, 26.2034876 ], [ 89.1472348, 26.2049123 ], [ 89.14723, 26.2049551 ], [ 89.1472196, 26.2049864 ], [ 89.1471936, 26.2051269 ], [ 89.1472196, 26.2052518 ], [ 89.1472664, 26.2053455 ], [ 89.1473341, 26.2055173 ], [ 89.1474122, 26.205637 ], [ 89.1474695, 26.2057099 ], [ 89.1475683, 26.2058348 ], [ 89.1476829, 26.2059597 ], [ 89.1476985, 26.2061523 ], [ 89.1476256, 26.2062825 ], [ 89.1476048, 26.2063709 ], [ 89.1475944, 26.2064542 ], [ 89.1476464, 26.2065167 ], [ 89.1477453, 26.2065219 ], [ 89.1478442, 26.2065115 ], [ 89.1479744, 26.2064594 ], [ 89.1480993, 26.2064178 ], [ 89.148193, 26.2064178 ], [ 89.1483127, 26.2064802 ], [ 89.148422, 26.2065896 ], [ 89.1485521, 26.2066989 ], [ 89.1487031, 26.2067874 ], [ 89.1488176, 26.2068967 ], [ 89.148828, 26.2070242 ], [ 89.1488332, 26.2071179 ], [ 89.1487499, 26.2072064 ], [ 89.1486927, 26.207248 ], [ 89.1485886, 26.207248 ], [ 89.1484897, 26.207248 ], [ 89.1482867, 26.2072116 ], [ 89.1481878, 26.2072532 ], [ 89.1481617, 26.2073469 ], [ 89.1481097, 26.2075083 ], [ 89.1481097, 26.207628 ], [ 89.1481201, 26.2077998 ], [ 89.1481305, 26.2079351 ], [ 89.1480733, 26.2080496 ], [ 89.1479587, 26.2081433 ], [ 89.1478859, 26.2082526 ], [ 89.1478026, 26.2084244 ], [ 89.1477401, 26.2084947 ], [ 89.1476464, 26.2085779 ], [ 89.1476256, 26.208682 ], [ 89.1476725, 26.2087914 ], [ 89.1478338, 26.2089059 ], [ 89.1479171, 26.2089007 ], [ 89.1480993, 26.2089111 ], [ 89.1482034, 26.2088851 ], [ 89.1483908, 26.208807 ], [ 89.1485469, 26.2088018 ], [ 89.1487187, 26.2088122 ], [ 89.1488853, 26.2088018 ], [ 89.1491351, 26.2087705 ], [ 89.149234, 26.208807 ], [ 89.14926, 26.2089007 ], [ 89.1492288, 26.209036 ], [ 89.1492236, 26.2091609 ], [ 89.1491611, 26.2092598 ], [ 89.1491299, 26.2094056 ], [ 89.1490727, 26.2095253 ], [ 89.1490674, 26.2096658 ], [ 89.1490622, 26.209796 ], [ 89.1490674, 26.2099209 ], [ 89.1490518, 26.2099938 ], [ 89.1489842, 26.2100849 ], [ 89.1489009, 26.2101525 ], [ 89.1488072, 26.2101629 ], [ 89.1486979, 26.2101473 ], [ 89.148599, 26.2101265 ], [ 89.1485053, 26.2100849 ], [ 89.1484012, 26.2100849 ], [ 89.1483179, 26.2101317 ], [ 89.1482294, 26.2101733 ], [ 89.1481565, 26.2101838 ], [ 89.1480368, 26.2101942 ], [ 89.1479525, 26.210189 ], [ 89.1478224, 26.2101577 ], [ 89.147687, 26.2101525 ], [ 89.1475725, 26.2101629 ], [ 89.1474632, 26.2102306 ], [ 89.1474372, 26.2103659 ], [ 89.147432, 26.2104752 ], [ 89.1473851, 26.2105221 ], [ 89.1473383, 26.2105533 ], [ 89.147255, 26.2105533 ], [ 89.1471717, 26.2105533 ], [ 89.147052, 26.2105533 ], [ 89.1469115, 26.2105689 ], [ 89.1467657, 26.2105741 ], [ 89.1467189, 26.2106106 ], [ 89.146698, 26.2106834 ], [ 89.1467032, 26.2107615 ], [ 89.1467501, 26.2108552 ], [ 89.1467917, 26.2109541 ], [ 89.1467813, 26.2110322 ], [ 89.1467345, 26.2110895 ], [ 89.1466408, 26.2111051 ], [ 89.146495, 26.2111623 ], [ 89.1463597, 26.2111988 ], [ 89.146214, 26.2112508 ], [ 89.1460942, 26.2113133 ], [ 89.1460266, 26.2113393 ], [ 89.1459225, 26.2113393 ], [ 89.1458912, 26.2112196 ], [ 89.1458808, 26.2111259 ], [ 89.14586, 26.2110114 ], [ 89.1458444, 26.2109489 ], [ 89.1458288, 26.2109177 ], [ 89.1456882, 26.2109958 ], [ 89.1456049, 26.2111103 ], [ 89.1455373, 26.2112352 ], [ 89.1455217, 26.2113133 ], [ 89.1455425, 26.2113914 ], [ 89.1455893, 26.2114746 ], [ 89.1456466, 26.21161 ], [ 89.1456414, 26.2116776 ], [ 89.1455373, 26.2117141 ], [ 89.1453967, 26.2117401 ], [ 89.1452978, 26.2117505 ], [ 89.1451989, 26.211787 ], [ 89.1451729, 26.2118911 ], [ 89.1451625, 26.2120264 ], [ 89.1452354, 26.2121201 ], [ 89.1453187, 26.2121825 ], [ 89.1453759, 26.2122502 ], [ 89.1453603, 26.2123283 ], [ 89.1453343, 26.2123803 ], [ 89.1452614, 26.2124584 ], [ 89.1452041, 26.2124792 ], [ 89.1451365, 26.212474 ], [ 89.1450636, 26.2124532 ], [ 89.1449543, 26.212448 ], [ 89.1437554, 26.2139124 ], [ 89.1429759, 26.2139627 ], [ 89.1429759, 26.21522 ], [ 89.1423724, 26.21522 ], [ 89.1421712, 26.2181117 ], [ 89.1420183, 26.2210946 ], [ 89.1431892, 26.2211829 ], [ 89.1437526, 26.2213486 ], [ 89.1429241, 26.2226521 ], [ 89.1420802, 26.2236021 ], [ 89.1413732, 26.2243864 ], [ 89.1405226, 26.2256678 ], [ 89.1403569, 26.2257783 ], [ 89.1402796, 26.225966 ], [ 89.1402796, 26.2260876 ], [ 89.1402796, 26.2262753 ], [ 89.1403238, 26.2265626 ], [ 89.1404453, 26.2268608 ], [ 89.140622, 26.2272474 ], [ 89.140622, 26.2275346 ], [ 89.1404895, 26.2277666 ], [ 89.1402686, 26.2280538 ], [ 89.140147, 26.2282858 ], [ 89.1399151, 26.2285123 ], [ 89.1397936, 26.2287995 ], [ 89.1396168, 26.2291309 ], [ 89.1394622, 26.2294843 ], [ 89.1394843, 26.2298268 ], [ 89.139661, 26.2300146 ], [ 89.1400255, 26.2302907 ], [ 89.1404343, 26.2305448 ], [ 89.1407767, 26.2307989 ], [ 89.1410087, 26.2311192 ], [ 89.1411633, 26.231539 ], [ 89.1412296, 26.2320085 ], [ 89.1412738, 26.2323067 ], [ 89.141318, 26.2327265 ], [ 89.1411854, 26.2332457 ], [ 89.1410639, 26.2336323 ], [ 89.1410087, 26.2339747 ], [ 89.1408872, 26.2344497 ], [ 89.1409092, 26.234748 ], [ 89.1409534, 26.2352782 ], [ 89.1409092, 26.2357422 ], [ 89.1407215, 26.2359962 ], [ 89.1404122, 26.2363166 ], [ 89.1399482, 26.2366811 ], [ 89.1397383, 26.2370456 ], [ 89.1396941, 26.2374985 ], [ 89.1394732, 26.2377637 ], [ 89.1391529, 26.237852 ], [ 89.1387, 26.2377526 ], [ 89.1384569, 26.2375648 ], [ 89.1382338, 26.2372776 ], [ 89.1379687, 26.2370898 ], [ 89.1376262, 26.2368137 ], [ 89.1372838, 26.2366369 ], [ 89.1367315, 26.236659 ], [ 89.1363338, 26.2367363 ], [ 89.1360466, 26.2368799 ], [ 89.1353838, 26.2371451 ], [ 89.1347431, 26.2372555 ], [ 89.1340693, 26.2375759 ], [ 89.1336495, 26.2379514 ], [ 89.1335832, 26.2383712 ], [ 89.1336606, 26.2386584 ], [ 89.1340361, 26.2391224 ], [ 89.1343013, 26.2393323 ], [ 89.1348425, 26.2394206 ], [ 89.1354501, 26.2396084 ], [ 89.1357042, 26.2400834 ], [ 89.1356268, 26.2406468 ], [ 89.1353065, 26.2408235 ], [ 89.1350524, 26.2406468 ], [ 89.1345995, 26.2403264 ], [ 89.1341687, 26.2398956 ], [ 89.134014, 26.2395311 ], [ 89.1337489, 26.2393985 ], [ 89.1331524, 26.2392881 ], [ 89.1324455, 26.2393433 ], [ 89.1319815, 26.2393875 ], [ 89.1317274, 26.2394427 ], [ 89.1316832, 26.2397299 ], [ 89.1316832, 26.2401884 ], [ 89.1316832, 26.2404093 ], [ 89.131871, 26.2406854 ], [ 89.1320588, 26.2409506 ], [ 89.1322135, 26.2412599 ], [ 89.132335, 26.2414918 ], [ 89.132346, 26.2418343 ], [ 89.1321803, 26.2420442 ], [ 89.1319484, 26.2421988 ], [ 89.131628, 26.2423093 ], [ 89.1312082, 26.2424639 ], [ 89.1309763, 26.2425965 ], [ 89.1308106, 26.2428506 ], [ 89.1307112, 26.2431599 ], [ 89.1307995, 26.2434747 ], [ 89.1308769, 26.2437508 ], [ 89.1310536, 26.2441043 ], [ 89.1312966, 26.244491 ], [ 89.1314844, 26.2447008 ], [ 89.1317385, 26.2451537 ], [ 89.1319484, 26.2456398 ], [ 89.1321141, 26.2460706 ], [ 89.1320809, 26.2464241 ], [ 89.1319417, 26.2467334 ], [ 89.1316545, 26.2470648 ], [ 89.131301, 26.247363 ], [ 89.1309586, 26.2476281 ], [ 89.1306162, 26.2479154 ], [ 89.1302185, 26.2482136 ], [ 89.1301412, 26.2485229 ], [ 89.1300557, 26.2488741 ], [ 89.1294313, 26.2488879 ], [ 89.1294392, 26.2505825 ], [ 89.1292792, 26.2519725 ], [ 89.1282807, 26.2519012 ], [ 89.1272501, 26.251889 ], [ 89.1259323, 26.2509517 ], [ 89.1246306, 26.2508426 ], [ 89.124046, 26.2504476 ], [ 89.1235447, 26.2500729 ], [ 89.1232071, 26.250267 ], [ 89.1227024, 26.2507163 ], [ 89.1207158, 26.2521321 ], [ 89.1197368, 26.2527651 ], [ 89.1200828, 26.2530225 ], [ 89.1203444, 26.2531406 ], [ 89.1199741, 26.2539201 ], [ 89.1196524, 26.2545838 ], [ 89.1200567, 26.2547469 ], [ 89.1208677, 26.2550902 ], [ 89.1207388, 26.2554289 ], [ 89.1206736, 26.2556303 ], [ 89.1215036, 26.255801 ], [ 89.121855, 26.2559457 ], [ 89.1218136, 26.2563177 ], [ 89.1217103, 26.2566691 ], [ 89.1214003, 26.2568965 ], [ 89.1210489, 26.2572892 ], [ 89.1210489, 26.2576819 ], [ 89.1210489, 26.258023 ], [ 89.1209662, 26.2586637 ], [ 89.1214829, 26.2586637 ], [ 89.1223717, 26.2588291 ], [ 89.1228471, 26.2590358 ], [ 89.1229298, 26.2594078 ], [ 89.1230952, 26.2601106 ], [ 89.1233019, 26.2602966 ], [ 89.1236946, 26.2605033 ], [ 89.1237359, 26.2610407 ], [ 89.1237393, 26.2611124 ], [ 89.124149, 26.2611625 ], [ 89.1248073, 26.26123 ], [ 89.1253305, 26.2613481 ], [ 89.1253305, 26.2623862 ], [ 89.1250037, 26.2624599 ], [ 89.1249676, 26.2626858 ], [ 89.1250605, 26.2632934 ], [ 89.1247747, 26.2640712 ], [ 89.1246737, 26.2641318 ], [ 89.1240877, 26.2645427 ], [ 89.1234815, 26.2649873 ], [ 89.1232255, 26.265186 ], [ 89.1226462, 26.2654824 ], [ 89.1221007, 26.2658259 ], [ 89.1217908, 26.2660212 ], [ 89.1214554, 26.2661627 ], [ 89.1210916, 26.2662974 ], [ 89.1207818, 26.2664725 ], [ 89.1203238, 26.2666342 ], [ 89.1200813, 26.2667487 ], [ 89.1197378, 26.2668969 ], [ 89.1190036, 26.2676108 ], [ 89.1186735, 26.2679207 ], [ 89.1182963, 26.2682036 ], [ 89.1178518, 26.2685 ], [ 89.117286, 26.2688435 ], [ 89.1169236, 26.2689647 ], [ 89.1165733, 26.2691533 ], [ 89.1163712, 26.2693217 ], [ 89.1161624, 26.2695844 ], [ 89.1159334, 26.269773 ], [ 89.1153878, 26.2699751 ], [ 89.1150578, 26.2702075 ], [ 89.1149365, 26.2705106 ], [ 89.114822, 26.2707867 ], [ 89.1145526, 26.2711033 ], [ 89.1143034, 26.2712582 ], [ 89.1141821, 26.2712582 ], [ 89.1139733, 26.2713256 ], [ 89.1137174, 26.2713727 ], [ 89.1134816, 26.2714334 ], [ 89.1131314, 26.2715613 ], [ 89.1128552, 26.2716691 ], [ 89.1126114, 26.2716354 ], [ 89.1124093, 26.2715613 ], [ 89.1122544, 26.2716826 ], [ 89.1120523, 26.2719116 ], [ 89.1118435, 26.2722349 ], [ 89.1116886, 26.2724774 ], [ 89.111601, 26.2726256 ], [ 89.1115269, 26.2726727 ], [ 89.1113248, 26.2727199 ], [ 89.1110824, 26.2727334 ], [ 89.1108318, 26.2727266 ], [ 89.1106028, 26.2726458 ], [ 89.1104074, 26.2725111 ], [ 89.1099966, 26.2722484 ], [ 89.1095385, 26.2721137 ], [ 89.1092556, 26.2721137 ], [ 89.1090334, 26.2723629 ], [ 89.1088852, 26.2726323 ], [ 89.1087639, 26.2728613 ], [ 89.1086629, 26.273124 ], [ 89.108508, 26.2734137 ], [ 89.1085147, 26.2736764 ], [ 89.1085888, 26.2739256 ], [ 89.1086831, 26.2741479 ], [ 89.1087235, 26.2743971 ], [ 89.1088111, 26.2747204 ], [ 89.1088919, 26.2749561 ], [ 89.1089188, 26.2751178 ], [ 89.1089121, 26.2752593 ], [ 89.1088852, 26.2753872 ], [ 89.1087639, 26.275495 ], [ 89.1086292, 26.2755624 ], [ 89.1085147, 26.275623 ], [ 89.1083261, 26.2756836 ], [ 89.108151, 26.2756297 ], [ 89.1079691, 26.2756095 ], [ 89.1078142, 26.2755556 ], [ 89.1075986, 26.2754815 ], [ 89.10741, 26.275394 ], [ 89.1072753, 26.2753064 ], [ 89.1071406, 26.2751582 ], [ 89.1070261, 26.2749764 ], [ 89.1069023, 26.2747638 ], [ 89.1068181, 26.2746269 ], [ 89.1067234, 26.2744901 ], [ 89.1065866, 26.2743323 ], [ 89.1063866, 26.2741007 ], [ 89.1062288, 26.2739639 ], [ 89.1059456, 26.2739603 ], [ 89.1057886, 26.2740388 ], [ 89.1056316, 26.2741644 ], [ 89.105663, 26.274269 ], [ 89.1052704, 26.2746654 ], [ 89.1053442, 26.2752557 ], [ 89.1054285, 26.2757089 ], [ 89.1049436, 26.2757392 ], [ 89.1049648, 26.2759303 ], [ 89.1049858, 26.2761938 ], [ 89.105028, 26.276647 ], [ 89.1050713, 26.2773387 ], [ 89.1053337, 26.2777221 ], [ 89.1057447, 26.2779645 ], [ 89.1058154, 26.2782999 ], [ 89.1058713, 26.2811695 ], [ 89.1047118, 26.2813268 ], [ 89.1043534, 26.2813901 ], [ 89.1039213, 26.2813795 ], [ 89.1036497, 26.2813586 ], [ 89.1033544, 26.2813413 ], [ 89.1032994, 26.2808525 ], [ 89.1031729, 26.2803571 ], [ 89.1032151, 26.2793663 ], [ 89.1032362, 26.2786602 ], [ 89.1022454, 26.2787339 ], [ 89.1015708, 26.2784915 ], [ 89.1007066, 26.2792082 ], [ 89.1000531, 26.2795034 ], [ 89.1001932, 26.2800981 ], [ 89.1006066, 26.2806769 ], [ 89.1011234, 26.2811316 ], [ 89.1017641, 26.2813796 ], [ 89.1023015, 26.2815863 ], [ 89.1024462, 26.2823304 ], [ 89.1019295, 26.2825371 ], [ 89.1017641, 26.2828678 ], [ 89.1017435, 26.2835086 ], [ 89.1019502, 26.284108 ], [ 89.1022725, 26.2843675 ], [ 89.1022602, 26.2853895 ], [ 89.1023127, 26.2862874 ], [ 89.1025136, 26.2863969 ], [ 89.1025136, 26.2873313 ], [ 89.1024131, 26.2880546 ], [ 89.1025036, 26.2886775 ], [ 89.1033475, 26.2886675 ], [ 89.1034279, 26.2890292 ], [ 89.1034982, 26.2892803 ], [ 89.1045531, 26.2892803 ], [ 89.1044225, 26.2897224 ], [ 89.1044024, 26.2899032 ], [ 89.1050353, 26.2901142 ], [ 89.1053568, 26.2902348 ], [ 89.1063615, 26.2903955 ], [ 89.1066835, 26.2908773 ], [ 89.1072209, 26.2918695 ], [ 89.1071176, 26.2920555 ], [ 89.1063114, 26.2922829 ], [ 89.1051539, 26.2927996 ], [ 89.1039551, 26.2934403 ], [ 89.1035831, 26.2941224 ], [ 89.103521, 26.2951973 ], [ 89.1035624, 26.2961687 ], [ 89.103521, 26.2967992 ], [ 89.1036864, 26.2973159 ], [ 89.1039551, 26.2977706 ], [ 89.1045959, 26.2981427 ], [ 89.10565, 26.2984734 ], [ 89.1067042, 26.2988248 ], [ 89.1072002, 26.2994655 ], [ 89.1076343, 26.2998789 ], [ 89.1074896, 26.3006644 ], [ 89.1070142, 26.3011604 ], [ 89.1062494, 26.3015118 ], [ 89.1050093, 26.3019252 ], [ 89.1041205, 26.3022973 ], [ 89.1026116, 26.3026073 ], [ 89.1003793, 26.3036201 ], [ 89.0998419, 26.3040129 ], [ 89.0996765, 26.3047363 ], [ 89.0997799, 26.3054597 ], [ 89.0999659, 26.3057594 ], [ 89.1004413, 26.3061315 ], [ 89.101082, 26.3066276 ], [ 89.1015988, 26.3070616 ], [ 89.1020783, 26.3077851 ], [ 89.1027811, 26.3082811 ], [ 89.1028844, 26.3087565 ], [ 89.1025124, 26.30948 ], [ 89.1024504, 26.3099554 ], [ 89.1025124, 26.3105548 ], [ 89.1025744, 26.3112575 ], [ 89.1028431, 26.3121463 ], [ 89.1033805, 26.3126838 ], [ 89.1038559, 26.3133658 ], [ 89.1046827, 26.3136139 ], [ 89.1049953, 26.3139098 ], [ 89.1049789, 26.3145715 ], [ 89.1049871, 26.315078 ], [ 89.1046522, 26.3150535 ], [ 89.1046849, 26.3159112 ], [ 89.1054556, 26.315833 ], [ 89.1063039, 26.315747 ], [ 89.106286, 26.3153966 ], [ 89.1055589, 26.3153067 ], [ 89.1055426, 26.3149881 ], [ 89.1055671, 26.3138445 ], [ 89.1063523, 26.3136829 ], [ 89.1062937, 26.3133754 ], [ 89.1072453, 26.3132437 ], [ 89.1082563, 26.3131476 ], [ 89.1081657, 26.3121183 ], [ 89.1080751, 26.311509 ], [ 89.1078857, 26.3096357 ], [ 89.1089582, 26.3096112 ], [ 89.1089406, 26.3091803 ], [ 89.1088786, 26.3086842 ], [ 89.1086926, 26.3080848 ], [ 89.1084094, 26.3074165 ], [ 89.1093734, 26.3072102 ], [ 89.1089476, 26.3064143 ], [ 89.1090023, 26.3058396 ], [ 89.1089776, 26.3052221 ], [ 89.1090435, 26.3045304 ], [ 89.1100151, 26.3045716 ], [ 89.1111399, 26.304881 ], [ 89.1119046, 26.3049016 ], [ 89.1125678, 26.3049339 ], [ 89.1128642, 26.304868 ], [ 89.1132265, 26.3047115 ], [ 89.1136053, 26.3045221 ], [ 89.1138853, 26.3042339 ], [ 89.1140088, 26.3040034 ], [ 89.1141405, 26.3038469 ], [ 89.1143023, 26.3037441 ], [ 89.1142558, 26.3034105 ], [ 89.1140956, 26.3030724 ], [ 89.1139182, 26.30304 ], [ 89.1137865, 26.3023236 ], [ 89.1137947, 26.301319 ], [ 89.1139096, 26.2999926 ], [ 89.1137856, 26.2986904 ], [ 89.1143643, 26.2985871 ], [ 89.114385, 26.298277 ], [ 89.1143629, 26.2977823 ], [ 89.1147364, 26.2976776 ], [ 89.1155632, 26.2976776 ], [ 89.1162453, 26.2976776 ], [ 89.1163651, 26.2958167 ], [ 89.1166499, 26.2953635 ], [ 89.1169607, 26.2947549 ], [ 89.1172067, 26.2940946 ], [ 89.1174009, 26.293486 ], [ 89.1174786, 26.2928969 ], [ 89.1176599, 26.2917963 ], [ 89.117621, 26.2909935 ], [ 89.11788, 26.2906569 ], [ 89.118139, 26.2899318 ], [ 89.1182166, 26.2891743 ], [ 89.1182166, 26.2884751 ], [ 89.1185274, 26.2876335 ], [ 89.1192784, 26.2871415 ], [ 89.1202495, 26.287012 ], [ 89.1209875, 26.2870379 ], [ 89.1215754, 26.2871544 ], [ 89.1223264, 26.2871026 ], [ 89.1232457, 26.2871544 ], [ 89.1238413, 26.287271 ], [ 89.1243074, 26.2878925 ], [ 89.1245405, 26.2883327 ], [ 89.1248512, 26.2889607 ], [ 89.125162, 26.2896858 ], [ 89.1253044, 26.2906569 ], [ 89.1253303, 26.2913561 ], [ 89.1252267, 26.2919517 ], [ 89.12448, 26.2931613 ], [ 89.124356, 26.2939054 ], [ 89.1245834, 26.2946082 ], [ 89.1258236, 26.2956417 ], [ 89.1268896, 26.2961682 ], [ 89.1282574, 26.2962252 ], [ 89.1282118, 26.2979445 ], [ 89.130463, 26.2980071 ], [ 89.130786, 26.2973555 ], [ 89.1315839, 26.2973572 ], [ 89.1314509, 26.297878 ], [ 89.1312134, 26.2978685 ], [ 89.1312018, 26.2987628 ], [ 89.132351, 26.2988351 ], [ 89.1323717, 26.3005094 ], [ 89.1300856, 26.3005714 ], [ 89.1301606, 26.2997275 ], [ 89.1305817, 26.2997032 ], [ 89.130623, 26.2991245 ], [ 89.1285354, 26.2992072 ], [ 89.1281054, 26.3008368 ], [ 89.1280187, 26.3015222 ], [ 89.1273159, 26.3017702 ], [ 89.127298, 26.3020764 ], [ 89.127336, 26.3025134 ], [ 89.1274215, 26.3025514 ], [ 89.1274405, 26.3028933 ], [ 89.1274813, 26.3030931 ], [ 89.1277293, 26.3031344 ], [ 89.1288568, 26.3032122 ], [ 89.1289075, 26.3028657 ], [ 89.1288248, 26.3023283 ], [ 89.1288868, 26.3016048 ], [ 89.1294035, 26.3013568 ], [ 89.1302923, 26.3011088 ], [ 89.1311398, 26.3010261 ], [ 89.1311398, 26.3015635 ], [ 89.1309951, 26.3019149 ], [ 89.1307264, 26.3022663 ], [ 89.1304783, 26.3025143 ], [ 89.1302096, 26.3027623 ], [ 89.1300443, 26.3032377 ], [ 89.1299387, 26.3037862 ], [ 89.1308886, 26.3038717 ], [ 89.1310121, 26.3053013 ], [ 89.1284527, 26.3045606 ], [ 89.12806, 26.3049326 ], [ 89.1276673, 26.3053254 ], [ 89.1270885, 26.3053874 ], [ 89.1271841, 26.3045604 ], [ 89.1256358, 26.3042184 ], [ 89.125025, 26.3054063 ], [ 89.1263007, 26.3057667 ], [ 89.1264052, 26.3059282 ], [ 89.1274934, 26.3061897 ], [ 89.1276259, 26.3060488 ], [ 89.1282047, 26.3058628 ], [ 89.1289223, 26.3058997 ], [ 89.1304516, 26.3060612 ], [ 89.1314775, 26.3061087 ], [ 89.1325866, 26.3061522 ], [ 89.1334548, 26.3062142 ], [ 89.1334754, 26.3069583 ], [ 89.1337235, 26.3073303 ], [ 89.1341369, 26.3076404 ], [ 89.1359695, 26.3075109 ], [ 89.1361832, 26.3081778 ], [ 89.1364105, 26.3087772 ], [ 89.1363692, 26.3092526 ], [ 89.1353357, 26.3093353 ], [ 89.135191, 26.3099967 ], [ 89.135067, 26.3101207 ], [ 89.1350257, 26.3109888 ], [ 89.1350257, 26.3115883 ], [ 89.1328213, 26.3114959 ], [ 89.1327909, 26.3119751 ], [ 89.1348293, 26.3121653 ], [ 89.1347685, 26.3132529 ], [ 89.1295126, 26.312538 ], [ 89.1294746, 26.3131541 ], [ 89.135091, 26.3138729 ], [ 89.1351337, 26.3151002 ], [ 89.1358483, 26.3150814 ], [ 89.135879, 26.3160064 ], [ 89.1358409, 26.316478 ], [ 89.1359779, 26.3171283 ], [ 89.1360311, 26.3175162 ], [ 89.1360387, 26.3183681 ], [ 89.1361604, 26.3188663 ], [ 89.1362137, 26.3196498 ], [ 89.136206, 26.3201974 ], [ 89.1352409, 26.3203656 ], [ 89.1355589, 26.3215923 ], [ 89.1344593, 26.321737 ], [ 89.1337321, 26.3207302 ], [ 89.1322862, 26.3206799 ], [ 89.1306265, 26.3206548 ], [ 89.130461, 26.3189649 ], [ 89.1281952, 26.3188902 ], [ 89.1280931, 26.3198768 ], [ 89.1280517, 26.3198768 ], [ 89.1274523, 26.3198768 ], [ 89.1266049, 26.3199595 ], [ 89.1260468, 26.3199595 ], [ 89.1257987, 26.3201868 ], [ 89.1253233, 26.3205589 ], [ 89.1249513, 26.3207242 ], [ 89.1244759, 26.3205382 ], [ 89.1241865, 26.3212616 ], [ 89.1250133, 26.321427 ], [ 89.1260261, 26.3212616 ], [ 89.1267082, 26.3209516 ], [ 89.1275557, 26.3208689 ], [ 89.1284651, 26.3207862 ], [ 89.1288165, 26.3207862 ], [ 89.1294573, 26.3208069 ], [ 89.1294573, 26.321365 ], [ 89.1288372, 26.321365 ], [ 89.1285682, 26.3213528 ], [ 89.128494, 26.3220897 ], [ 89.1284815, 26.3223885 ], [ 89.1280831, 26.3223761 ], [ 89.1273611, 26.3223761 ], [ 89.1266515, 26.3222889 ], [ 89.1262948, 26.3223571 ], [ 89.1259045, 26.3222765 ], [ 89.1255933, 26.3222516 ], [ 89.1249832, 26.3222391 ], [ 89.123452, 26.3222267 ], [ 89.1234146, 26.3220648 ], [ 89.123207, 26.32204 ], [ 89.1228849, 26.3220061 ], [ 89.1221389, 26.3219468 ], [ 89.1213341, 26.3218197 ], [ 89.1207318, 26.3218281 ], [ 89.1198872, 26.321489 ], [ 89.1193912, 26.3211583 ], [ 89.1193292, 26.3207862 ], [ 89.1191307, 26.3204762 ], [ 89.118738, 26.3204349 ], [ 89.1178803, 26.3203914 ], [ 89.117331, 26.3203151 ], [ 89.1167716, 26.3202557 ], [ 89.1160087, 26.3201201 ], [ 89.1154068, 26.3200099 ], [ 89.1156866, 26.319442 ], [ 89.1158222, 26.3194335 ], [ 89.1158815, 26.319264 ], [ 89.1159663, 26.3192724 ], [ 89.1161528, 26.3189334 ], [ 89.1158029, 26.318864 ], [ 89.1147901, 26.3187813 ], [ 89.1126316, 26.3185901 ], [ 89.1116897, 26.3200215 ], [ 89.1114455, 26.3204488 ], [ 89.1116161, 26.3205524 ], [ 89.1112177, 26.3212899 ], [ 89.1111075, 26.3212899 ], [ 89.1107854, 26.3217222 ], [ 89.1105226, 26.3221248 ], [ 89.1114003, 26.3223778 ], [ 89.111845, 26.3222774 ], [ 89.1117602, 26.3232607 ], [ 89.1115036, 26.3234113 ], [ 89.1111316, 26.3235766 ], [ 89.1111729, 26.3238453 ], [ 89.1111936, 26.3241967 ], [ 89.1109662, 26.3243827 ], [ 89.1106149, 26.3245894 ], [ 89.1099121, 26.3246928 ], [ 89.1096641, 26.3250442 ], [ 89.109602, 26.3255816 ], [ 89.10923, 26.3255196 ], [ 89.1087546, 26.3254989 ], [ 89.1084528, 26.3258503 ], [ 89.1080808, 26.3256436 ], [ 89.1076467, 26.3256849 ], [ 89.1076054, 26.326181 ], [ 89.107502, 26.3268218 ], [ 89.1072953, 26.3270285 ], [ 89.1067579, 26.3270698 ], [ 89.1063238, 26.3267804 ], [ 89.1054971, 26.3267804 ], [ 89.1052284, 26.3265531 ], [ 89.1053937, 26.3262637 ], [ 89.1056211, 26.3259536 ], [ 89.1054144, 26.3251889 ], [ 89.1043169, 26.3253301 ], [ 89.1039675, 26.32368 ], [ 89.1028568, 26.3237868 ], [ 89.1027235, 26.3231059 ], [ 89.1014054, 26.3232798 ], [ 89.1004349, 26.3233522 ], [ 89.1005797, 26.3239751 ], [ 89.0991746, 26.3241199 ], [ 89.0985107, 26.3242174 ], [ 89.0985107, 26.3250235 ], [ 89.0984281, 26.3256539 ], [ 89.0985727, 26.3262533 ], [ 89.0986554, 26.3270595 ], [ 89.0988621, 26.3278242 ], [ 89.0992755, 26.3285477 ], [ 89.0989863, 26.3287335 ], [ 89.098291, 26.3288928 ], [ 89.0977406, 26.3290377 ], [ 89.0975088, 26.3291101 ], [ 89.0971322, 26.3293419 ], [ 89.0968135, 26.3293564 ], [ 89.0965746, 26.3293277 ], [ 89.0965885, 26.3290231 ], [ 89.0965678, 26.3285683 ], [ 89.0965058, 26.3280723 ], [ 89.0962578, 26.3276589 ], [ 89.0957203, 26.3272455 ], [ 89.0955568, 26.3272618 ], [ 89.0953853, 26.3264738 ], [ 89.0952115, 26.3257785 ], [ 89.0948638, 26.3257061 ], [ 89.0939947, 26.3258219 ], [ 89.0933718, 26.3258799 ], [ 89.0931446, 26.3259193 ], [ 89.0930953, 26.3250958 ], [ 89.0930305, 26.3247052 ], [ 89.0927616, 26.3244608 ], [ 89.0921749, 26.3245749 ], [ 89.0919998, 26.3239797 ], [ 89.0918345, 26.3230082 ], [ 89.0917024, 26.3222079 ], [ 89.0913592, 26.3209872 ], [ 89.0912894, 26.3213643 ], [ 89.0908563, 26.3218952 ], [ 89.0903954, 26.3222863 ], [ 89.0897891, 26.3226355 ], [ 89.089398, 26.3228031 ], [ 89.0888672, 26.3228311 ], [ 89.0884761, 26.3226634 ], [ 89.088071, 26.3222723 ], [ 89.0876923, 26.3218921 ], [ 89.0870448, 26.3215923 ], [ 89.0865344, 26.3212247 ], [ 89.0859757, 26.3210012 ], [ 89.0855147, 26.3209173 ], [ 89.0851472, 26.321024 ], [ 89.0847185, 26.3212526 ], [ 89.084495, 26.3215599 ], [ 89.0841877, 26.3220348 ], [ 89.0837686, 26.3227612 ], [ 89.083587, 26.323278 ], [ 89.0835312, 26.3236622 ], [ 89.0839083, 26.3240952 ], [ 89.0842436, 26.3244584 ], [ 89.0848163, 26.324626 ], [ 89.0853471, 26.3245701 ], [ 89.0862551, 26.3243047 ], [ 89.0868557, 26.3241371 ], [ 89.0872412, 26.324179 ], [ 89.0876463, 26.3250032 ], [ 89.0881017, 26.3257575 ], [ 89.0885766, 26.3261486 ], [ 89.0890516, 26.3263861 ], [ 89.0896383, 26.3264839 ], [ 89.0903088, 26.3265956 ], [ 89.0910072, 26.3269309 ], [ 89.0917336, 26.327294 ], [ 89.091999, 26.3276153 ], [ 89.0920828, 26.3279785 ], [ 89.0920025, 26.3283347 ], [ 89.091916, 26.3287276 ], [ 89.0916231, 26.3289745 ], [ 89.091476, 26.3292226 ], [ 89.0911774, 26.3295447 ], [ 89.0909889, 26.329694 ], [ 89.0906931, 26.3297727 ], [ 89.0907596, 26.3298809 ], [ 89.0914624, 26.3299222 ], [ 89.0930164, 26.3296331 ], [ 89.0930864, 26.3299689 ], [ 89.0948216, 26.329871 ], [ 89.0951664, 26.3318031 ], [ 89.0959518, 26.3318031 ], [ 89.0959312, 26.3326919 ], [ 89.0960759, 26.3338701 ], [ 89.0962619, 26.3341388 ], [ 89.097068, 26.3342835 ], [ 89.0974194, 26.3345729 ], [ 89.0978534, 26.3349036 ], [ 89.0979568, 26.335503 ], [ 89.0981406, 26.3360545 ], [ 89.0987931, 26.3360423 ], [ 89.0996327, 26.3363781 ], [ 89.1001925, 26.336658 ], [ 89.1006823, 26.336658 ], [ 89.1010572, 26.3371772 ], [ 89.1009456, 26.3374873 ], [ 89.1003462, 26.3375493 ], [ 89.0999948, 26.3376733 ], [ 89.0999948, 26.337942 ], [ 89.1001395, 26.3387068 ], [ 89.1000775, 26.3392649 ], [ 89.0996228, 26.3392649 ], [ 89.0990233, 26.3393269 ], [ 89.0988373, 26.3396783 ], [ 89.0986306, 26.3398643 ], [ 89.0981346, 26.340009 ], [ 89.0975971, 26.3401537 ], [ 89.0976385, 26.3407737 ], [ 89.0976385, 26.3413938 ], [ 89.0977418, 26.3420759 ], [ 89.0983412, 26.3420966 ], [ 89.0985686, 26.3421586 ], [ 89.0986513, 26.3425927 ], [ 89.0986926, 26.3434195 ], [ 89.0984859, 26.3438018 ], [ 89.0984446, 26.3443806 ], [ 89.0982172, 26.3449387 ], [ 89.0980932, 26.3454347 ], [ 89.0979485, 26.3461788 ], [ 89.0979279, 26.3463649 ], [ 89.0981346, 26.3467989 ], [ 89.0982999, 26.3473363 ], [ 89.0983826, 26.3479358 ], [ 89.0982792, 26.3481425 ], [ 89.0979692, 26.3485972 ], [ 89.0978038, 26.3489692 ], [ 89.0976798, 26.3494446 ], [ 89.0976798, 26.3499407 ], [ 89.0961089, 26.3500234 ], [ 89.0957782, 26.3502301 ], [ 89.0957782, 26.3508708 ], [ 89.0956542, 26.3514289 ], [ 89.0954866, 26.3515872 ], [ 89.0955241, 26.3517925 ], [ 89.0950348, 26.3520139 ], [ 89.0958348, 26.3538356 ], [ 89.0948894, 26.3542607 ], [ 89.0946, 26.3535166 ], [ 89.094414, 26.3531032 ], [ 89.0940213, 26.3528551 ], [ 89.0934426, 26.3530618 ], [ 89.0933857, 26.3531497 ], [ 89.0937077, 26.3543393 ], [ 89.0938353, 26.3550668 ], [ 89.0958882, 26.3546917 ], [ 89.0963445, 26.3572384 ], [ 89.0973825, 26.357544 ], [ 89.0974385, 26.3576699 ], [ 89.0977184, 26.3580477 ], [ 89.0980542, 26.3581037 ], [ 89.0979563, 26.3592582 ], [ 89.096375, 26.3592862 ], [ 89.0964029, 26.3603777 ], [ 89.0940833, 26.3606579 ], [ 89.0940833, 26.3609266 ], [ 89.0935459, 26.3609679 ], [ 89.0935418, 26.3601825 ], [ 89.0923843, 26.3602652 ], [ 89.0923016, 26.3610093 ], [ 89.0896972, 26.3608853 ], [ 89.089448, 26.3621899 ], [ 89.0888462, 26.3623999 ], [ 89.0881745, 26.3626238 ], [ 89.0874608, 26.3626797 ], [ 89.087041, 26.3627217 ], [ 89.0856416, 26.3628477 ], [ 89.0858279, 26.3642441 ], [ 89.0853731, 26.3642441 ], [ 89.0847944, 26.3643681 ], [ 89.0842156, 26.3643888 ], [ 89.0838022, 26.3640994 ], [ 89.0833062, 26.363686 ], [ 89.0830995, 26.3632519 ], [ 89.0828514, 26.3624872 ], [ 89.0815493, 26.3624045 ], [ 89.0804583, 26.3622599 ], [ 89.0794787, 26.3629596 ], [ 89.0796063, 26.3632933 ], [ 89.0796326, 26.364485 ], [ 89.0796886, 26.3651846 ], [ 89.0797166, 26.3660103 ], [ 89.0797586, 26.3662902 ], [ 89.0798845, 26.366738 ], [ 89.0804723, 26.366738 ], [ 89.0815906, 26.3666624 ], [ 89.0825207, 26.3665177 ], [ 89.0833268, 26.3663937 ], [ 89.0841743, 26.3662284 ], [ 89.0848771, 26.366125 ], [ 89.0855884, 26.3660243 ], [ 89.0855604, 26.3656325 ], [ 89.0864108, 26.3656703 ], [ 89.0870298, 26.3656703 ], [ 89.0871977, 26.3655065 ], [ 89.0875616, 26.3655625 ], [ 89.0883033, 26.3657724 ], [ 89.0883452, 26.3670878 ], [ 89.0884712, 26.3676476 ], [ 89.0887051, 26.3680976 ], [ 89.0887231, 26.368921 ], [ 89.088863, 26.3699566 ], [ 89.088961, 26.371314 ], [ 89.0898986, 26.371279 ], [ 89.0901645, 26.3728463 ], [ 89.0904303, 26.3741198 ], [ 89.0899545, 26.3741478 ], [ 89.0896887, 26.3745256 ], [ 89.0894243, 26.3748547 ], [ 89.0889531, 26.375199 ], [ 89.0887051, 26.3784028 ], [ 89.0887445, 26.3810052 ], [ 89.0900889, 26.3809488 ], [ 89.0902553, 26.3820819 ], [ 89.0915782, 26.3824747 ], [ 89.0916002, 26.3833698 ], [ 89.0915722, 26.3839855 ], [ 89.0915862, 26.3846432 ], [ 89.0916002, 26.3854129 ], [ 89.0898419, 26.3854511 ], [ 89.0901313, 26.3860298 ], [ 89.090338, 26.3866499 ], [ 89.0906274, 26.3873734 ], [ 89.0905653, 26.3878798 ], [ 89.090772, 26.3883345 ], [ 89.0911648, 26.3886859 ], [ 89.0918055, 26.389244 ], [ 89.0925496, 26.3896367 ], [ 89.093211, 26.3897194 ], [ 89.0938309, 26.3894991 ], [ 89.0940408, 26.3894151 ], [ 89.0945132, 26.3901741 ], [ 89.0947613, 26.3903808 ], [ 89.095278, 26.3905461 ], [ 89.095734, 26.3906396 ], [ 89.0960559, 26.3908635 ], [ 89.0960839, 26.3911994 ], [ 89.095804, 26.3914093 ], [ 89.0954227, 26.3917863 ], [ 89.0947199, 26.3922617 ], [ 89.0939965, 26.3926544 ], [ 89.0934798, 26.3927991 ], [ 89.0931469, 26.3938346 ], [ 89.0928877, 26.3938232 ], [ 89.0922859, 26.3938652 ], [ 89.0916402, 26.3939566 ], [ 89.0911234, 26.3936673 ], [ 89.09071, 26.3932332 ], [ 89.0903793, 26.3927991 ], [ 89.0900693, 26.3920137 ], [ 89.0891598, 26.3921377 ], [ 89.0877129, 26.3926131 ], [ 89.0862247, 26.3926751 ], [ 89.0856873, 26.3924891 ], [ 89.0856253, 26.3920757 ], [ 89.0859147, 26.391745 ], [ 89.0852386, 26.3918431 ], [ 89.0844409, 26.3917871 ], [ 89.083302, 26.391559 ], [ 89.0834809, 26.3903737 ], [ 89.0812419, 26.3902898 ], [ 89.0811937, 26.3908355 ], [ 89.0810697, 26.3911869 ], [ 89.0803463, 26.3912414 ], [ 89.0799965, 26.3911994 ], [ 89.0801189, 26.3924684 ], [ 89.0802484, 26.3931865 ], [ 89.0808269, 26.3930239 ], [ 89.0815485, 26.3926003 ], [ 89.0820288, 26.3925163 ], [ 89.0826241, 26.3927785 ], [ 89.0832657, 26.3931287 ], [ 89.0838901, 26.3934289 ], [ 89.0847667, 26.3937171 ], [ 89.0853671, 26.3939453 ], [ 89.0855112, 26.3946538 ], [ 89.0858835, 26.3948819 ], [ 89.0862557, 26.394978 ], [ 89.0865199, 26.3950981 ], [ 89.0865673, 26.3954931 ], [ 89.0868613, 26.3958376 ], [ 89.0875046, 26.396389 ], [ 89.0876881, 26.396747 ], [ 89.0876007, 26.3970975 ], [ 89.0874926, 26.3974817 ], [ 89.0873725, 26.3976258 ], [ 89.0870963, 26.3976618 ], [ 89.086544, 26.3974217 ], [ 89.0859435, 26.3973256 ], [ 89.0857034, 26.3974817 ], [ 89.0854678, 26.3977336 ], [ 89.0851029, 26.397926 ], [ 89.0849468, 26.3981542 ], [ 89.0848748, 26.3984424 ], [ 89.0842983, 26.398566 ], [ 89.0837816, 26.398628 ], [ 89.0829755, 26.3983593 ], [ 89.0826117, 26.3980492 ], [ 89.0821363, 26.3978632 ], [ 89.0813107, 26.3973977 ], [ 89.0804749, 26.3969654 ], [ 89.0798985, 26.3967612 ], [ 89.0789138, 26.3963169 ], [ 89.0781573, 26.3960767 ], [ 89.0771967, 26.3958486 ], [ 89.076212, 26.3959807 ], [ 89.0751086, 26.396251 ], [ 89.0746317, 26.392186 ], [ 89.0744515, 26.3911053 ], [ 89.0738391, 26.3912734 ], [ 89.0739952, 26.3933388 ], [ 89.0742354, 26.3946958 ], [ 89.0744756, 26.3963349 ], [ 89.0738891, 26.3965403 ], [ 89.0721942, 26.3975325 ], [ 89.070813, 26.3984664 ], [ 89.0702366, 26.3984184 ], [ 89.0687424, 26.3982559 ], [ 89.067955, 26.397878 ], [ 89.0675347, 26.3986345 ], [ 89.0673966, 26.3992312 ], [ 89.0668142, 26.4000995 ], [ 89.0650839, 26.3996614 ], [ 89.0642613, 26.399259 ], [ 89.0643811, 26.3982559 ], [ 89.0644844, 26.3976978 ], [ 89.0644294, 26.3972295 ], [ 89.0642973, 26.3968933 ], [ 89.0639264, 26.3969331 ], [ 89.0627689, 26.3975738 ], [ 89.0617974, 26.3982559 ], [ 89.0621982, 26.3987426 ], [ 89.0629908, 26.3999314 ], [ 89.0632298, 26.4006753 ], [ 89.0622102, 26.40076 ], [ 89.0614537, 26.4000275 ], [ 89.0613427, 26.3993514 ], [ 89.0609913, 26.398628 ], [ 89.0605986, 26.3987933 ], [ 89.0600007, 26.3988747 ], [ 89.0591001, 26.3989708 ], [ 89.0583916, 26.3988627 ], [ 89.058113, 26.3981482 ], [ 89.0579809, 26.3968033 ], [ 89.0578488, 26.3958376 ], [ 89.0576221, 26.3958376 ], [ 89.0557305, 26.3959146 ], [ 89.0556705, 26.3969834 ], [ 89.0554183, 26.3970194 ], [ 89.0554063, 26.3974517 ], [ 89.0550821, 26.3975117 ], [ 89.0551782, 26.397908 ], [ 89.0547338, 26.3980041 ], [ 89.0547098, 26.3982563 ], [ 89.0541262, 26.3982683 ], [ 89.0541022, 26.3987366 ], [ 89.0521472, 26.3988447 ], [ 89.0496975, 26.3989527 ], [ 89.0482469, 26.3998414 ], [ 89.0477612, 26.4000478 ], [ 89.0473463, 26.4000095 ], [ 89.0473463, 26.4002256 ], [ 89.0460758, 26.4001776 ], [ 89.0445868, 26.4001416 ], [ 89.0437222, 26.4001656 ], [ 89.0431578, 26.4003337 ], [ 89.0412642, 26.4003849 ], [ 89.0405325, 26.4003229 ], [ 89.0404199, 26.4003697 ], [ 89.0401677, 26.4003577 ], [ 89.0393992, 26.4003697 ], [ 89.0392191, 26.4002737 ], [ 89.0385689, 26.4001368 ], [ 89.0375979, 26.3998774 ], [ 89.037706, 26.3992289 ], [ 89.0378141, 26.3977639 ], [ 89.0377901, 26.3974757 ], [ 89.0374418, 26.3972956 ], [ 89.0373818, 26.3967432 ], [ 89.0379822, 26.3966351 ], [ 89.0379222, 26.3962749 ], [ 89.0374779, 26.3962148 ], [ 89.0373338, 26.3952422 ], [ 89.0365772, 26.3953743 ], [ 89.0365292, 26.3949299 ], [ 89.034812, 26.3951701 ], [ 89.0334671, 26.3955424 ], [ 89.0336952, 26.3962869 ], [ 89.0337553, 26.3972115 ], [ 89.0338874, 26.3977459 ], [ 89.0340675, 26.3984664 ], [ 89.0342596, 26.3995592 ], [ 89.0333808, 26.3998371 ], [ 89.0328186, 26.3999198 ], [ 89.0320405, 26.3996913 ], [ 89.0317042, 26.3995952 ], [ 89.0316447, 26.400894 ], [ 89.0317231, 26.4018834 ], [ 89.0312448, 26.4019414 ], [ 89.0312719, 26.402183 ], [ 89.03132, 26.4026513 ], [ 89.0312891, 26.4033303 ], [ 89.0312064, 26.4038884 ], [ 89.0303796, 26.4039711 ], [ 89.0299391, 26.4039868 ], [ 89.029927, 26.4042724 ], [ 89.0297189, 26.4046707 ], [ 89.0292065, 26.4049449 ], [ 89.0289183, 26.405017 ], [ 89.0290361, 26.4055626 ], [ 89.0291394, 26.4060173 ], [ 89.0295115, 26.4063481 ], [ 89.0298215, 26.4067201 ], [ 89.0298215, 26.4070103 ], [ 89.0293914, 26.4070464 ], [ 89.0290912, 26.4071785 ], [ 89.028731, 26.4072625 ], [ 89.0282987, 26.4073586 ], [ 89.0277463, 26.4073226 ], [ 89.027302, 26.4072385 ], [ 89.0266535, 26.4072025 ], [ 89.0256208, 26.4070344 ], [ 89.0248283, 26.4073466 ], [ 89.0239816, 26.4078111 ], [ 89.0235214, 26.4073815 ], [ 89.022922, 26.4065961 ], [ 89.0223846, 26.4061827 ], [ 89.0219092, 26.4057693 ], [ 89.0219092, 26.4055419 ], [ 89.0221572, 26.4050872 ], [ 89.0221572, 26.4047565 ], [ 89.0220539, 26.4044051 ], [ 89.0215578, 26.4041364 ], [ 89.0208964, 26.4041571 ], [ 89.0199042, 26.4043224 ], [ 89.0193048, 26.4045705 ], [ 89.0189394, 26.405101 ], [ 89.0189328, 26.4061 ], [ 89.0197802, 26.4062654 ], [ 89.0198009, 26.4069888 ], [ 89.0209997, 26.4071955 ], [ 89.0211031, 26.4084564 ], [ 89.0232384, 26.4082712 ], [ 89.0228781, 26.4088836 ], [ 89.0226019, 26.409412 ], [ 89.0221576, 26.4101325 ], [ 89.0222056, 26.410853 ], [ 89.0223858, 26.4116936 ], [ 89.0221963, 26.4121997 ], [ 89.0224259, 26.4122596 ], [ 89.0226435, 26.4123004 ], [ 89.0225827, 26.4125942 ], [ 89.0224386, 26.4135309 ], [ 89.0219343, 26.4139752 ], [ 89.0215165, 26.4143265 ], [ 89.0210617, 26.4144919 ], [ 89.0206734, 26.4147918 ], [ 89.0203612, 26.414755 ], [ 89.020181, 26.4145636 ], [ 89.0200249, 26.4145756 ], [ 89.0198512, 26.414695 ], [ 89.019638, 26.4146699 ], [ 89.0192444, 26.4146236 ], [ 89.018692, 26.4144915 ], [ 89.0182957, 26.4148638 ], [ 89.0179235, 26.4148878 ], [ 89.017263, 26.4148518 ], [ 89.0167827, 26.41508 ], [ 89.0163624, 26.415116 ], [ 89.0155458, 26.4148758 ], [ 89.0148133, 26.4144795 ], [ 89.0140808, 26.4140833 ], [ 89.012868, 26.4136269 ], [ 89.0116191, 26.4131826 ], [ 89.010118, 26.4129064 ], [ 89.0087131, 26.4128584 ], [ 89.0078004, 26.4128344 ], [ 89.007152, 26.4127984 ], [ 89.0073201, 26.4142514 ], [ 89.0066716, 26.4143114 ], [ 89.0065806, 26.4145746 ], [ 89.005988, 26.415535 ], [ 89.005956, 26.4162928 ], [ 89.0058599, 26.4167131 ], [ 89.0049953, 26.4168272 ], [ 89.0049593, 26.4175717 ], [ 89.0048392, 26.4178239 ], [ 89.0048272, 26.418064 ], [ 89.0049472, 26.4187485 ], [ 89.0051754, 26.419529 ], [ 89.0053795, 26.4202375 ], [ 89.0055717, 26.4206098 ], [ 89.0057745, 26.4211888 ], [ 89.0058141, 26.4213643 ], [ 89.0050673, 26.4216425 ], [ 89.0042321, 26.4218833 ], [ 89.0037584, 26.4218827 ], [ 89.0032349, 26.4219547 ], [ 89.0022742, 26.4222189 ], [ 89.0020869, 26.4216545 ], [ 89.000778, 26.4217626 ], [ 88.9997813, 26.4218346 ], [ 88.9987349, 26.4217306 ], [ 88.998284, 26.4204545 ], [ 88.997186, 26.420545 ], [ 88.9956693, 26.4207714 ], [ 88.9953785, 26.4236481 ], [ 88.9931534, 26.4239352 ], [ 88.9931226, 26.4214619 ], [ 88.9931339, 26.4212128 ], [ 88.9930367, 26.420955 ], [ 88.9928623, 26.4207488 ], [ 88.9928736, 26.4205224 ], [ 88.9929981, 26.4204092 ], [ 88.9926925, 26.4191528 ], [ 88.9937395, 26.4189649 ], [ 88.9953411, 26.4186774 ], [ 88.9957825, 26.4186095 ], [ 88.9959099, 26.4157752 ], [ 88.996368, 26.4149354 ], [ 88.9974369, 26.4145536 ], [ 88.9982768, 26.4147063 ], [ 88.9982004, 26.4128739 ], [ 88.9983532, 26.4118814 ], [ 88.9970389, 26.4108449 ], [ 88.996605, 26.4113199 ], [ 88.9962748, 26.4113544 ], [ 88.9949756, 26.4114097 ], [ 88.9938485, 26.4114232 ], [ 88.9935104, 26.4124878 ], [ 88.9937672, 26.4125288 ], [ 88.9937316, 26.413013 ], [ 88.993773, 26.4138838 ], [ 88.9939804, 26.4141741 ], [ 88.9943845, 26.4142129 ], [ 88.994243, 26.4149619 ], [ 88.9941462, 26.4156392 ], [ 88.992847, 26.4156945 ], [ 88.9914095, 26.4158465 ], [ 88.9919157, 26.4168523 ], [ 88.9924158, 26.4176738 ], [ 88.9914514, 26.4179596 ], [ 88.9900687, 26.4185004 ], [ 88.9878848, 26.4189703 ], [ 88.9879177, 26.4193323 ], [ 88.9876294, 26.4194241 ], [ 88.9859359, 26.4195232 ], [ 88.9843947, 26.4198287 ], [ 88.9830907, 26.4200243 ], [ 88.9829299, 26.4207469 ], [ 88.9829408, 26.4212251 ], [ 88.983082, 26.421638 ], [ 88.9835602, 26.4244741 ], [ 88.9827886, 26.4246914 ], [ 88.9820932, 26.424887 ], [ 88.9816368, 26.4249631 ], [ 88.9813325, 26.4250935 ], [ 88.9809848, 26.4252239 ], [ 88.9807675, 26.4252782 ], [ 88.9810283, 26.4256586 ], [ 88.9812108, 26.4259364 ], [ 88.980974, 26.4267235 ], [ 88.9813325, 26.4270929 ], [ 88.981539, 26.4274515 ], [ 88.9820063, 26.4282176 ], [ 88.9824627, 26.4289239 ], [ 88.9827452, 26.4297606 ], [ 88.982919, 26.4309668 ], [ 88.9818867, 26.4313145 ], [ 88.9809196, 26.431521 ], [ 88.9801997, 26.4316938 ], [ 88.9803002, 26.432249 ], [ 88.9799066, 26.4322911 ], [ 88.9799221, 26.4325004 ], [ 88.9797895, 26.4324881 ], [ 88.9797864, 26.4328562 ], [ 88.9792353, 26.4328011 ], [ 88.9788066, 26.4328725 ], [ 88.9789605, 26.4360624 ], [ 88.9801572, 26.4362748 ], [ 88.9807556, 26.4364485 ], [ 88.9814118, 26.4367573 ], [ 88.9821067, 26.4374329 ], [ 88.982319, 26.4377417 ], [ 88.9825893, 26.438012 ], [ 88.9828595, 26.4383594 ], [ 88.9831297, 26.4388999 ], [ 88.9830911, 26.4394982 ], [ 88.9830911, 26.4397105 ], [ 88.983149, 26.4399615 ], [ 88.9832648, 26.4401738 ], [ 88.9833227, 26.4403089 ], [ 88.9833806, 26.4404808 ], [ 88.9826286, 26.4404808 ], [ 88.9814499, 26.440588 ], [ 88.9808069, 26.4409809 ], [ 88.9805212, 26.4418381 ], [ 88.980664, 26.4425883 ], [ 88.9809141, 26.4431241 ], [ 88.9819499, 26.4430883 ], [ 88.9827358, 26.4431598 ], [ 88.9826472, 26.4437254 ], [ 88.9828209, 26.4446326 ], [ 88.9831297, 26.4450959 ], [ 88.9833386, 26.4456505 ], [ 88.9826429, 26.4457494 ], [ 88.9817142, 26.4459995 ], [ 88.9811223, 26.4462347 ], [ 88.9803116, 26.4453275 ], [ 88.9795075, 26.44451 ], [ 88.9779726, 26.4444887 ], [ 88.9779597, 26.4455721 ], [ 88.9779953, 26.4462347 ], [ 88.9795009, 26.4461382 ], [ 88.9806204, 26.4464856 ], [ 88.9808135, 26.446891 ], [ 88.9805432, 26.4471419 ], [ 88.979571, 26.4470353 ], [ 88.9780725, 26.4471998 ], [ 88.9776064, 26.4471425 ], [ 88.9776064, 26.4463891 ], [ 88.9771847, 26.4464084 ], [ 88.9769723, 26.4463505 ], [ 88.9766442, 26.4463119 ], [ 88.9764898, 26.4463119 ], [ 88.9762795, 26.4464386 ], [ 88.9757563, 26.4465821 ], [ 88.9758205, 26.4473925 ], [ 88.9756984, 26.4482807 ], [ 88.974408, 26.4502354 ], [ 88.972086, 26.4501778 ], [ 88.9713664, 26.4502258 ], [ 88.9712742, 26.450979 ], [ 88.9711303, 26.4509886 ], [ 88.9710536, 26.4514108 ], [ 88.9703051, 26.4514587 ], [ 88.9692976, 26.4514587 ], [ 88.9684264, 26.4514875 ], [ 88.968033, 26.4514779 ], [ 88.9677931, 26.4514971 ], [ 88.9674861, 26.4515931 ], [ 88.9671477, 26.4516789 ], [ 88.9671407, 26.4512668 ], [ 88.9664251, 26.4513089 ], [ 88.9657488, 26.4513212 ], [ 88.9656259, 26.4525754 ], [ 88.9655177, 26.4537619 ], [ 88.9654931, 26.4551144 ], [ 88.9654562, 26.4567621 ], [ 88.9655054, 26.4576596 ], [ 88.9647922, 26.4572539 ], [ 88.9640545, 26.4571063 ], [ 88.9631569, 26.4570326 ], [ 88.9624093, 26.4570326 ], [ 88.9615486, 26.4572662 ], [ 88.9605896, 26.4575121 ], [ 88.9598272, 26.4576105 ], [ 88.9590157, 26.4579424 ], [ 88.958396, 26.4584199 ], [ 88.9570607, 26.4589753 ], [ 88.9573215, 26.4576977 ], [ 88.9573482, 26.4563625 ], [ 88.9572547, 26.4548536 ], [ 88.9578964, 26.4548579 ], [ 88.9581039, 26.4538922 ], [ 88.9587048, 26.4534916 ], [ 88.9588762, 26.453291 ], [ 88.959773, 26.4530777 ], [ 88.9597538, 26.4522861 ], [ 88.9597874, 26.451832 ], [ 88.9604273, 26.4517157 ], [ 88.9610754, 26.4513931 ], [ 88.9621872, 26.451255 ], [ 88.9631352, 26.4512417 ], [ 88.9652316, 26.451255 ], [ 88.9650981, 26.4505473 ], [ 88.9641284, 26.4504943 ], [ 88.963389, 26.4504539 ], [ 88.9633355, 26.4503204 ], [ 88.96304, 26.4491428 ], [ 88.9625042, 26.4492142 ], [ 88.9621827, 26.4489642 ], [ 88.9617541, 26.4482498 ], [ 88.9613887, 26.4481706 ], [ 88.9607611, 26.4482774 ], [ 88.9598398, 26.4485311 ], [ 88.9593324, 26.4487581 ], [ 88.9588036, 26.4491186 ], [ 88.9568541, 26.4506809 ], [ 88.9557592, 26.451255 ], [ 88.9551476, 26.451442 ], [ 88.9540661, 26.4518426 ], [ 88.9533717, 26.4519761 ], [ 88.9532516, 26.4522031 ], [ 88.9511151, 26.4520829 ], [ 88.9518781, 26.4504985 ], [ 88.9518362, 26.4502269 ], [ 88.9518495, 26.4497061 ], [ 88.9518762, 26.449172 ], [ 88.9517961, 26.448451 ], [ 88.9507679, 26.4484376 ], [ 88.9501537, 26.4483441 ], [ 88.9499401, 26.4483308 ], [ 88.9499267, 26.4481171 ], [ 88.9483778, 26.4479569 ], [ 88.948044, 26.4479169 ], [ 88.9476568, 26.4478501 ], [ 88.9461345, 26.4479836 ], [ 88.9460144, 26.4462211 ], [ 88.9459743, 26.4449392 ], [ 88.9461345, 26.4449258 ], [ 88.9462681, 26.4447923 ], [ 88.9463215, 26.4441647 ], [ 88.9469491, 26.4441113 ], [ 88.9468689, 26.443417 ], [ 88.947608, 26.4432526 ], [ 88.9478704, 26.4419749 ], [ 88.9495538, 26.4418547 ], [ 88.9494522, 26.4389449 ], [ 88.9480949, 26.4390163 ], [ 88.9475948, 26.4388734 ], [ 88.9474391, 26.4387696 ], [ 88.9477502, 26.4384498 ], [ 88.9479772, 26.4382495 ], [ 88.9481375, 26.4381159 ], [ 88.9485247, 26.4377421 ], [ 88.9488719, 26.437435 ], [ 88.9492737, 26.4371589 ], [ 88.9498094, 26.4370517 ], [ 88.9499166, 26.4359801 ], [ 88.9505953, 26.4353193 ], [ 88.951774, 26.434462 ], [ 88.9520241, 26.4338905 ], [ 88.951774, 26.4332833 ], [ 88.9513454, 26.4329261 ], [ 88.9505596, 26.4325332 ], [ 88.9498094, 26.4322474 ], [ 88.9484521, 26.4322117 ], [ 88.9471305, 26.4321403 ], [ 88.946166, 26.4321403 ], [ 88.9455231, 26.4316045 ], [ 88.9448444, 26.4308901 ], [ 88.9448087, 26.4302829 ], [ 88.9448444, 26.4296399 ], [ 88.945916, 26.4295327 ], [ 88.9457862, 26.4282344 ], [ 88.9443787, 26.428295 ], [ 88.9445088, 26.4272535 ], [ 88.9431727, 26.427211 ], [ 88.9433156, 26.4263537 ], [ 88.9441729, 26.4261751 ], [ 88.9447444, 26.4255679 ], [ 88.9450659, 26.4249249 ], [ 88.9442086, 26.424532 ], [ 88.9432085, 26.4244248 ], [ 88.9407438, 26.4244606 ], [ 88.9381363, 26.4246749 ], [ 88.9385292, 26.4270681 ], [ 88.9374219, 26.4283183 ], [ 88.9366003, 26.4293541 ], [ 88.9359931, 26.4293899 ], [ 88.9346715, 26.4307472 ], [ 88.9330723, 26.4309418 ], [ 88.9329298, 26.4309627 ], [ 88.9311304, 26.431227 ], [ 88.9300279, 26.4316045 ], [ 88.9287247, 26.4318141 ], [ 88.9286235, 26.4305615 ], [ 88.927863, 26.4303714 ], [ 88.927478, 26.4303714 ], [ 88.9272383, 26.4303714 ], [ 88.9267766, 26.4306159 ], [ 88.926084, 26.4306838 ], [ 88.9258477, 26.4286535 ], [ 88.925807, 26.4277097 ], [ 88.9296529, 26.4277097 ], [ 88.933917, 26.4275468 ], [ 88.9342701, 26.4271122 ], [ 88.9344873, 26.4270036 ], [ 88.934596, 26.4267999 ], [ 88.9346503, 26.4259036 ], [ 88.9326948, 26.4253875 ], [ 88.9316355, 26.425048 ], [ 88.93078, 26.4246678 ], [ 88.9298566, 26.4245727 ], [ 88.9284388, 26.4245456 ], [ 88.9263068, 26.4244369 ], [ 88.9251932, 26.424369 ], [ 88.9250845, 26.4229431 ], [ 88.9252339, 26.4228888 ], [ 88.9255055, 26.4225901 ], [ 88.9257771, 26.422074 ], [ 88.9259808, 26.4217753 ], [ 88.9260623, 26.4213814 ], [ 88.9259808, 26.421137 ], [ 88.9258315, 26.4208654 ], [ 88.9256413, 26.4205259 ], [ 88.9253018, 26.4202136 ], [ 88.9250302, 26.4200642 ], [ 88.9246771, 26.4199012 ], [ 88.9240117, 26.4197926 ], [ 88.9233871, 26.4198741 ], [ 88.9227895, 26.4197926 ], [ 88.9223007, 26.4197926 ], [ 88.9220019, 26.4196704 ], [ 88.9218118, 26.4194802 ], [ 88.9218118, 26.4191679 ], [ 88.9218118, 26.4188691 ], [ 88.9218661, 26.4185296 ], [ 88.9220019, 26.4180408 ], [ 88.9222463, 26.417579 ], [ 88.922776, 26.4171173 ], [ 88.9232377, 26.4169 ], [ 88.9236586, 26.4167371 ], [ 88.924134, 26.416642 ], [ 88.9250031, 26.4164519 ], [ 88.9258722, 26.4163433 ], [ 88.9268635, 26.416126 ], [ 88.9276648, 26.4159494 ], [ 88.9283899, 26.4157933 ], [ 88.9291776, 26.415576 ], [ 88.9294899, 26.4153723 ], [ 88.9296936, 26.41506 ], [ 88.9297615, 26.4146118 ], [ 88.9298566, 26.414055 ], [ 88.929843, 26.4135118 ], [ 88.929585, 26.4129551 ], [ 88.9294084, 26.412602 ], [ 88.9292998, 26.4122353 ], [ 88.9290961, 26.4115971 ], [ 88.9288109, 26.4109181 ], [ 88.9287973, 26.4106465 ], [ 88.9288652, 26.4103613 ], [ 88.9290282, 26.4096415 ], [ 88.9291776, 26.4088946 ], [ 88.9292455, 26.4084669 ], [ 88.9293813, 26.4079916 ], [ 88.9289739, 26.4077064 ], [ 88.9285529, 26.4074891 ], [ 88.9280912, 26.4071632 ], [ 88.9272899, 26.4069323 ], [ 88.9263413, 26.4067556 ], [ 88.9260639, 26.4068347 ], [ 88.9252178, 26.4069305 ], [ 88.9237074, 26.4071226 ], [ 88.9236137, 26.4071345 ], [ 88.9226051, 26.4072262 ], [ 88.9216652, 26.407593 ], [ 88.9194738, 26.4078222 ], [ 88.9193134, 26.4075242 ], [ 88.9181902, 26.4077305 ], [ 88.9179609, 26.4075471 ], [ 88.9165627, 26.4077764 ], [ 88.9165168, 26.4080743 ], [ 88.9156733, 26.4082348 ], [ 88.915742, 26.4084411 ], [ 88.9132434, 26.4087162 ], [ 88.9121432, 26.4086474 ], [ 88.9122119, 26.4080514 ], [ 88.9113867, 26.4079368 ], [ 88.9106532, 26.4077764 ], [ 88.9099197, 26.4076388 ], [ 88.9087735, 26.4073179 ], [ 88.9080858, 26.4071574 ], [ 88.9072606, 26.4070887 ], [ 88.9064624, 26.4069465 ], [ 88.9059132, 26.4076787 ], [ 88.9050895, 26.4088381 ], [ 88.9047234, 26.4086703 ], [ 88.9051099, 26.4067793 ], [ 88.9052573, 26.4057871 ], [ 88.9056691, 26.4048719 ], [ 88.9059742, 26.4038803 ], [ 88.9061878, 26.4031023 ], [ 88.9088962, 26.4031002 ], [ 88.9092891, 26.4023501 ], [ 88.9095392, 26.4015643 ], [ 88.9100015, 26.4006006 ], [ 88.9105659, 26.4005548 ], [ 88.9115727, 26.4009209 ], [ 88.9109625, 26.4017141 ], [ 88.9102303, 26.4016989 ], [ 88.9100625, 26.4028277 ], [ 88.9118473, 26.4028888 ], [ 88.9125338, 26.4029803 ], [ 88.9127992, 26.4030108 ], [ 88.9130738, 26.4032244 ], [ 88.9134094, 26.4033006 ], [ 88.9150111, 26.4032549 ], [ 88.9172383, 26.4032549 ], [ 88.9173451, 26.401348 ], [ 88.9175404, 26.4012071 ], [ 88.9176807, 26.4008217 ], [ 88.9179858, 26.4008217 ], [ 88.918076, 26.4004928 ], [ 88.9181833, 26.4003498 ], [ 88.9182146, 26.3997387 ], [ 88.9181231, 26.3989912 ], [ 88.9181688, 26.3982284 ], [ 88.9183262, 26.3982066 ], [ 88.9183262, 26.3974923 ], [ 88.9184587, 26.3967182 ], [ 88.9185197, 26.396047 ], [ 88.918779, 26.395025 ], [ 88.9189691, 26.3940989 ], [ 88.9188977, 26.3922772 ], [ 88.9185057, 26.3922528 ], [ 88.9184612, 26.3897084 ], [ 88.9176654, 26.3898002 ], [ 88.917101, 26.3898307 ], [ 88.9168818, 26.3884965 ], [ 88.9167013, 26.3870859 ], [ 88.9162749, 26.3867578 ], [ 88.9160124, 26.3865118 ], [ 88.9161272, 26.385708 ], [ 88.9164717, 26.3848879 ], [ 88.9165188, 26.3841688 ], [ 88.9149114, 26.3839902 ], [ 88.914447, 26.3833473 ], [ 88.9145854, 26.3829031 ], [ 88.9126356, 26.3828422 ], [ 88.9123396, 26.3819542 ], [ 88.9111965, 26.3820971 ], [ 88.9111608, 26.3816327 ], [ 88.9099106, 26.3817756 ], [ 88.9098035, 26.3812755 ], [ 88.9093748, 26.3812755 ], [ 88.909282, 26.3810434 ], [ 88.9089345, 26.3801884 ], [ 88.9123176, 26.380332 ], [ 88.9125432, 26.3794708 ], [ 88.9129533, 26.3795118 ], [ 88.9133586, 26.3784428 ], [ 88.9137488, 26.3778575 ], [ 88.9139829, 26.3779356 ], [ 88.9143146, 26.3780526 ], [ 88.9146853, 26.3779746 ], [ 88.9149194, 26.3780331 ], [ 88.9153097, 26.3780916 ], [ 88.9161291, 26.3781307 ], [ 88.9179241, 26.3783258 ], [ 88.9206361, 26.3785794 ], [ 88.9212842, 26.3771822 ], [ 88.9194693, 26.376921 ], [ 88.9196254, 26.3755358 ], [ 88.9198205, 26.3746773 ], [ 88.9191962, 26.3745992 ], [ 88.9175183, 26.3745992 ], [ 88.916133, 26.3745797 ], [ 88.9146697, 26.3743846 ], [ 88.9132259, 26.3743066 ], [ 88.9136612, 26.3728993 ], [ 88.9129111, 26.372685 ], [ 88.9125539, 26.3722206 ], [ 88.9121253, 26.3721492 ], [ 88.9114466, 26.3721849 ], [ 88.9111608, 26.3713455 ], [ 88.9109465, 26.3704168 ], [ 88.9109108, 26.3698453 ], [ 88.9111965, 26.3698453 ], [ 88.9115537, 26.3691309 ], [ 88.9114466, 26.3687022 ], [ 88.9109822, 26.3680593 ], [ 88.9111608, 26.3677735 ], [ 88.9116609, 26.3673092 ], [ 88.9117681, 26.3677021 ], [ 88.9118038, 26.3682379 ], [ 88.9121967, 26.368345 ], [ 88.9126968, 26.3682379 ], [ 88.9131968, 26.3679164 ], [ 88.9130182, 26.3674163 ], [ 88.9122681, 26.3665233 ], [ 88.9120421, 26.3661124 ], [ 88.9125565, 26.3660085 ], [ 88.9131162, 26.3659865 ], [ 88.9132259, 26.365778 ], [ 88.9133686, 26.3657121 ], [ 88.913501, 26.3656368 ], [ 88.9139112, 26.3656661 ], [ 88.9142327, 26.3653803 ], [ 88.9145972, 26.3653077 ], [ 88.9165073, 26.3655464 ], [ 88.9163788, 26.3657485 ], [ 88.9173155, 26.3658219 ], [ 88.9185093, 26.3659138 ], [ 88.9201765, 26.3658447 ], [ 88.9199236, 26.3650505 ], [ 88.9217602, 26.3641689 ], [ 88.9217124, 26.3633443 ], [ 88.9215695, 26.3628085 ], [ 88.9215338, 26.3620584 ], [ 88.9209888, 26.3617078 ], [ 88.9208235, 26.3613404 ], [ 88.9204622, 26.3612011 ], [ 88.9204011, 26.3606241 ], [ 88.919593, 26.3601099 ], [ 88.9188548, 26.3598081 ], [ 88.9188121, 26.3592246 ], [ 88.9189055, 26.3590262 ], [ 88.9190456, 26.3589094 ], [ 88.9193025, 26.3588861 ], [ 88.919536, 26.3589561 ], [ 88.9198045, 26.3590612 ], [ 88.9201665, 26.3592246 ], [ 88.9206965, 26.3593881 ], [ 88.9211869, 26.3593414 ], [ 88.9215488, 26.3594465 ], [ 88.9217473, 26.3595982 ], [ 88.9218174, 26.3599018 ], [ 88.9218174, 26.3602404 ], [ 88.921759, 26.3606257 ], [ 88.9217823, 26.3608942 ], [ 88.9217823, 26.3612912 ], [ 88.9218641, 26.3616531 ], [ 88.9220042, 26.3620734 ], [ 88.9221326, 26.3622952 ], [ 88.9223194, 26.3625171 ], [ 88.9227164, 26.3627739 ], [ 88.9229148, 26.3630658 ], [ 88.9230666, 26.3634044 ], [ 88.9232184, 26.3636146 ], [ 88.9235803, 26.3638948 ], [ 88.9239423, 26.3641516 ], [ 88.9242855, 26.3643267 ], [ 88.9245657, 26.3644318 ], [ 88.9248693, 26.3645836 ], [ 88.9253013, 26.364677 ], [ 88.9256515, 26.3645953 ], [ 88.9259784, 26.3645486 ], [ 88.9263404, 26.3645486 ], [ 88.926714, 26.3645836 ], [ 88.9272511, 26.3644669 ], [ 88.9276247, 26.36428 ], [ 88.9279632, 26.3640582 ], [ 88.9280683, 26.363813 ], [ 88.928045, 26.3635562 ], [ 88.9280333, 26.3633343 ], [ 88.92808, 26.3630133 ], [ 88.9281734, 26.3628031 ], [ 88.9281734, 26.362628 ], [ 88.928115, 26.3623945 ], [ 88.9279983, 26.3620909 ], [ 88.9279866, 26.3618224 ], [ 88.9280683, 26.3616706 ], [ 88.9283228, 26.3615772 ], [ 88.9286031, 26.3615305 ], [ 88.9288599, 26.3615072 ], [ 88.9292102, 26.3615422 ], [ 88.9296889, 26.3615655 ], [ 88.9300975, 26.3614955 ], [ 88.9302142, 26.3614138 ], [ 88.9302843, 26.3612737 ], [ 88.9303076, 26.3610401 ], [ 88.930331, 26.3607249 ], [ 88.9303894, 26.3604097 ], [ 88.9304828, 26.3601178 ], [ 88.9306112, 26.3598901 ], [ 88.9307513, 26.359715 ], [ 88.9308914, 26.3594231 ], [ 88.9310782, 26.3591779 ], [ 88.9312533, 26.3590495 ], [ 88.9314985, 26.3589561 ], [ 88.9319305, 26.3588977 ], [ 88.9321337, 26.3589328 ], [ 88.9325773, 26.3588861 ], [ 88.9328926, 26.358816 ], [ 88.9331728, 26.3587343 ], [ 88.9333829, 26.3586058 ], [ 88.9336748, 26.3585591 ], [ 88.93399, 26.3585475 ], [ 88.9343286, 26.3586058 ], [ 88.9346789, 26.3585591 ], [ 88.9348423, 26.3583957 ], [ 88.9349474, 26.3582206 ], [ 88.9349591, 26.3580454 ], [ 88.9349007, 26.3577419 ], [ 88.9347956, 26.3573683 ], [ 88.934784, 26.3569947 ], [ 88.9348307, 26.3568779 ], [ 88.9349941, 26.3567144 ], [ 88.9353327, 26.3566327 ], [ 88.9355195, 26.3566327 ], [ 88.9367941, 26.3567297 ], [ 88.9377523, 26.3569444 ], [ 88.9390739, 26.357027 ], [ 88.9402138, 26.3571757 ], [ 88.9412867, 26.3571112 ], [ 88.9417154, 26.3570398 ], [ 88.9422623, 26.3571096 ], [ 88.9426084, 26.357147 ], [ 88.9433526, 26.3568784 ], [ 88.9438812, 26.3566966 ], [ 88.9445586, 26.3566471 ], [ 88.9450211, 26.3564984 ], [ 88.9453588, 26.3566826 ], [ 88.9460603, 26.3566124 ], [ 88.9465199, 26.3560832 ], [ 88.9468071, 26.355589 ], [ 88.9476091, 26.355745 ], [ 88.9476091, 26.3562128 ], [ 88.9476091, 26.3565754 ], [ 88.9474592, 26.3577296 ], [ 88.9472876, 26.3582007 ], [ 88.9474309, 26.359048 ], [ 88.9474305, 26.360201 ], [ 88.9479306, 26.3602724 ], [ 88.9483098, 26.3605223 ], [ 88.9485021, 26.3608439 ], [ 88.9485378, 26.3617369 ], [ 88.9485735, 26.3623799 ], [ 88.948895, 26.3627014 ], [ 88.948976, 26.3628755 ], [ 88.9490611, 26.363315 ], [ 88.9490379, 26.3635586 ], [ 88.9491093, 26.3638087 ], [ 88.9493951, 26.3644873 ], [ 88.949788, 26.3651303 ], [ 88.9503238, 26.3655946 ], [ 88.951324, 26.3656304 ], [ 88.9526099, 26.3654875 ], [ 88.9527185, 26.3652004 ], [ 88.9533256, 26.3651126 ], [ 88.9535029, 26.3643445 ], [ 88.9537766, 26.3637057 ], [ 88.9540227, 26.3636127 ], [ 88.9542779, 26.3635701 ], [ 88.955015, 26.3634709 ], [ 88.9549442, 26.3624786 ], [ 88.9550859, 26.3624077 ], [ 88.9551001, 26.3618548 ], [ 88.9551001, 26.3616564 ], [ 88.9553411, 26.3615997 ], [ 88.9557947, 26.3615571 ], [ 88.9565744, 26.3614721 ], [ 88.9566169, 26.3612453 ], [ 88.9571246, 26.3612378 ], [ 88.9571556, 26.360905 ], [ 88.9574675, 26.3609334 ], [ 88.9575525, 26.3607916 ], [ 88.9576518, 26.3596859 ], [ 88.9581479, 26.3596434 ], [ 88.9581479, 26.3594733 ], [ 88.9583794, 26.359489 ], [ 88.9583607, 26.3590401 ], [ 88.9583607, 26.3583257 ], [ 88.9584456, 26.3563971 ], [ 88.9577935, 26.3563262 ], [ 88.9571981, 26.3562978 ], [ 88.9566878, 26.3562411 ], [ 88.9560074, 26.3562411 ], [ 88.9547315, 26.3560001 ], [ 88.9537501, 26.355842 ], [ 88.9526902, 26.3554756 ], [ 88.9517545, 26.3550645 ], [ 88.9515136, 26.3549653 ], [ 88.9515026, 26.3544323 ], [ 88.9508189, 26.3543841 ], [ 88.950681, 26.3540751 ], [ 88.9506096, 26.3533964 ], [ 88.9503952, 26.3525748 ], [ 88.9501668, 26.3514638 ], [ 88.9491887, 26.3519033 ], [ 88.948895, 26.351414 ], [ 88.9492879, 26.3511639 ], [ 88.9496094, 26.3509853 ], [ 88.9498595, 26.3509853 ], [ 88.9493872, 26.3500604 ], [ 88.9493446, 26.349465 ], [ 88.9492879, 26.3488696 ], [ 88.949217, 26.3485577 ], [ 88.9491093, 26.3483063 ], [ 88.9484515, 26.3482459 ], [ 88.948409, 26.3478915 ], [ 88.9480121, 26.3477781 ], [ 88.9481449, 26.3473062 ], [ 88.9481255, 26.3470976 ], [ 88.9470339, 26.3470409 ], [ 88.9470339, 26.3464172 ], [ 88.9462968, 26.3463463 ], [ 88.9462117, 26.3457509 ], [ 88.9461834, 26.3450421 ], [ 88.9461125, 26.3440214 ], [ 88.9463251, 26.3436954 ], [ 88.9466654, 26.3436245 ], [ 88.9471757, 26.3436387 ], [ 88.9483949, 26.3435914 ], [ 88.9494665, 26.3434842 ], [ 88.9509465, 26.3429866 ], [ 88.9518113, 26.3431283 ], [ 88.9520741, 26.3434842 ], [ 88.9522507, 26.3438229 ], [ 88.9523358, 26.3442482 ], [ 88.9523216, 26.344716 ], [ 88.952435, 26.3452264 ], [ 88.9528745, 26.3463037 ], [ 88.9532941, 26.3461336 ], [ 88.9538753, 26.3457651 ], [ 88.9543856, 26.3455524 ], [ 88.9551653, 26.345439 ], [ 88.9559166, 26.3454248 ], [ 88.9567388, 26.3454957 ], [ 88.9571216, 26.3450208 ], [ 88.9575469, 26.3444963 ], [ 88.9579438, 26.3440427 ], [ 88.9582273, 26.3438159 ], [ 88.9589503, 26.3435749 ], [ 88.9584322, 26.3425555 ], [ 88.9578606, 26.3421269 ], [ 88.9573249, 26.341984 ], [ 88.9567176, 26.3415911 ], [ 88.9557947, 26.3412146 ], [ 88.9551568, 26.3412571 ], [ 88.9545756, 26.341654 ], [ 88.95364, 26.3424904 ], [ 88.9528319, 26.3429724 ], [ 88.9526813, 26.3419483 ], [ 88.952727, 26.3416611 ], [ 88.9528599, 26.341091 ], [ 88.9527885, 26.3407695 ], [ 88.9522884, 26.3408052 ], [ 88.9520026, 26.3406624 ], [ 88.9518623, 26.3400025 ], [ 88.951824, 26.3390907 ], [ 88.9521175, 26.3384857 ], [ 88.9521458, 26.338032 ], [ 88.9522734, 26.3375784 ], [ 88.9523159, 26.3372665 ], [ 88.9523868, 26.3370681 ], [ 88.9523726, 26.3362175 ], [ 88.9523017, 26.3355796 ], [ 88.9523726, 26.3347857 ], [ 88.952467, 26.3342685 ], [ 88.9521812, 26.3336256 ], [ 88.9520466, 26.3328578 ], [ 88.9522025, 26.3324467 ], [ 88.952245, 26.3320923 ], [ 88.9522855, 26.3316826 ], [ 88.9525569, 26.331908 ], [ 88.9529538, 26.3322766 ], [ 88.9539672, 26.3315539 ], [ 88.9540386, 26.3325183 ], [ 88.9548245, 26.3314467 ], [ 88.9543601, 26.3305894 ], [ 88.9563247, 26.3304823 ], [ 88.9557175, 26.3295893 ], [ 88.9574524, 26.3300941 ], [ 88.9584325, 26.3301047 ], [ 88.9598129, 26.3300098 ], [ 88.9597708, 26.3307791 ], [ 88.9596812, 26.3313547 ], [ 88.9596022, 26.3319383 ], [ 88.9595395, 26.3324468 ], [ 88.9595233, 26.3329494 ], [ 88.9595073, 26.3334452 ], [ 88.9594652, 26.3339405 ], [ 88.9594504, 26.3342986 ], [ 88.9594065, 26.3348808 ], [ 88.959402, 26.3354685 ], [ 88.959971, 26.3354791 ], [ 88.9605084, 26.3354896 ], [ 88.9611723, 26.3355001 ], [ 88.9622999, 26.3356055 ], [ 88.9628795, 26.3357004 ], [ 88.9628268, 26.3365118 ], [ 88.9628163, 26.337123 ], [ 88.9627443, 26.3375387 ], [ 88.9626898, 26.3377237 ], [ 88.9626828, 26.3380191 ], [ 88.9626477, 26.3387459 ], [ 88.9623104, 26.3391252 ], [ 88.9620154, 26.3392411 ], [ 88.9617941, 26.3396416 ], [ 88.9617625, 26.3402739 ], [ 88.9616877, 26.3406008 ], [ 88.9617991, 26.3411351 ], [ 88.9620365, 26.3420232 ], [ 88.9621524, 26.3426449 ], [ 88.9619943, 26.3430137 ], [ 88.9619311, 26.343646 ], [ 88.9619327, 26.3443593 ], [ 88.9622894, 26.3449106 ], [ 88.9628479, 26.3456483 ], [ 88.9618468, 26.3462068 ], [ 88.9608878, 26.3468812 ], [ 88.9597919, 26.3475451 ], [ 88.9591385, 26.3479982 ], [ 88.9597538, 26.3484314 ], [ 88.9602181, 26.3483956 ], [ 88.9605039, 26.3483956 ], [ 88.9604325, 26.3489314 ], [ 88.9605295, 26.3498529 ], [ 88.9606454, 26.3505063 ], [ 88.9605084, 26.3514863 ], [ 88.9611091, 26.3519605 ], [ 88.9615398, 26.3517533 ], [ 88.9625001, 26.3513704 ], [ 88.9628795, 26.351265 ], [ 88.9630586, 26.3512439 ], [ 88.9632694, 26.3510859 ], [ 88.9632273, 26.3501374 ], [ 88.9643232, 26.3498635 ], [ 88.9648396, 26.3496422 ], [ 88.964486, 26.3487067 ], [ 88.9648426, 26.3483501 ], [ 88.9655667, 26.3485884 ], [ 88.9657564, 26.3490942 ], [ 88.9658723, 26.3494841 ], [ 88.9661884, 26.3507381 ], [ 88.9665257, 26.351402 ], [ 88.967212, 26.3510389 ], [ 88.9674621, 26.3504674 ], [ 88.9675391, 26.3502234 ], [ 88.9680642, 26.3501691 ], [ 88.96857, 26.3501164 ], [ 88.9692339, 26.3499583 ], [ 88.969529, 26.3498318 ], [ 88.9694868, 26.3495262 ], [ 88.9708884, 26.3494946 ], [ 88.9712484, 26.3495387 ], [ 88.9713198, 26.3503245 ], [ 88.9717841, 26.3507174 ], [ 88.9726414, 26.3504317 ], [ 88.9736773, 26.3500745 ], [ 88.9744274, 26.349753 ], [ 88.9747132, 26.3493601 ], [ 88.9751457, 26.3490836 ], [ 88.9756516, 26.3488518 ], [ 88.9764277, 26.3483599 ], [ 88.9767492, 26.3481456 ], [ 88.9771064, 26.3475741 ], [ 88.9774636, 26.3466454 ], [ 88.9777276, 26.3465967 ], [ 88.9780168, 26.3465417 ], [ 88.9781491, 26.346681 ], [ 88.9783177, 26.346976 ], [ 88.9786971, 26.3469339 ], [ 88.9789162, 26.3468486 ], [ 88.9792661, 26.3465967 ], [ 88.9797139, 26.3465382 ], [ 88.9798211, 26.3470383 ], [ 88.9802251, 26.3475029 ], [ 88.9808257, 26.3474397 ], [ 88.9819642, 26.3472883 ], [ 88.9823572, 26.3478241 ], [ 88.9826277, 26.3482617 ], [ 88.9826429, 26.34861 ], [ 88.9834784, 26.3481983 ], [ 88.9838791, 26.3479956 ], [ 88.9844008, 26.3479561 ], [ 88.9853933, 26.347967 ], [ 88.9853134, 26.348532 ], [ 88.984913, 26.3489657 ], [ 88.984129, 26.3498164 ], [ 88.9850965, 26.3499666 ], [ 88.9858138, 26.3489824 ], [ 88.9864477, 26.3482317 ], [ 88.9863935, 26.347717 ], [ 88.9868935, 26.3471455 ], [ 88.9870816, 26.3465468 ], [ 88.9865006, 26.3466097 ], [ 88.9856791, 26.3466097 ], [ 88.9863935, 26.3457524 ], [ 88.9866078, 26.3452166 ], [ 88.9866792, 26.3446094 ], [ 88.9868981, 26.3432439 ], [ 88.987065, 26.3425099 ], [ 88.9872507, 26.3415018 ], [ 88.987432, 26.3405915 ], [ 88.9883161, 26.3406248 ], [ 88.9883995, 26.3396239 ], [ 88.9886081, 26.3396443 ], [ 88.988751, 26.3396443 ], [ 88.9886795, 26.33893 ], [ 88.9888938, 26.3387871 ], [ 88.989251, 26.3386799 ], [ 88.989251, 26.3384299 ], [ 88.9892153, 26.3381441 ], [ 88.9891898, 26.3377356 ], [ 88.9892002, 26.3374386 ], [ 88.9887999, 26.3374053 ], [ 88.9881159, 26.3374887 ], [ 88.9873579, 26.3375369 ], [ 88.9869816, 26.337472 ], [ 88.9869816, 26.3380225 ], [ 88.9875008, 26.3380012 ], [ 88.9874653, 26.3383561 ], [ 88.9882016, 26.3384067 ], [ 88.9881826, 26.33899 ], [ 88.9876822, 26.3389567 ], [ 88.9870149, 26.3388899 ], [ 88.9867647, 26.3388399 ], [ 88.9855273, 26.3386232 ], [ 88.9853933, 26.3391085 ], [ 88.9853041, 26.3394268 ], [ 88.9859291, 26.339659 ], [ 88.9859291, 26.3399 ], [ 88.9862782, 26.3399725 ], [ 88.9861702, 26.3403554 ], [ 88.9858041, 26.3403197 ], [ 88.9852326, 26.3402572 ], [ 88.9851076, 26.3404447 ], [ 88.9847951, 26.3403554 ], [ 88.9840362, 26.3399893 ], [ 88.9832712, 26.3405327 ], [ 88.9824714, 26.3409036 ], [ 88.9821353, 26.3412397 ], [ 88.9817876, 26.3410775 ], [ 88.9819721, 26.340704 ], [ 88.982089, 26.3403936 ], [ 88.9822396, 26.3401155 ], [ 88.9824251, 26.3398141 ], [ 88.9825062, 26.3396634 ], [ 88.9827032, 26.3393041 ], [ 88.982796, 26.3391534 ], [ 88.9832132, 26.3383769 ], [ 88.9834219, 26.3379712 ], [ 88.984013, 26.337299 ], [ 88.9841868, 26.3371367 ], [ 88.9843143, 26.3370671 ], [ 88.9843955, 26.3369628 ], [ 88.984523, 26.3366615 ], [ 88.9845809, 26.3361399 ], [ 88.9846505, 26.3356531 ], [ 88.9846157, 26.3351547 ], [ 88.9846968, 26.3346679 ], [ 88.9848475, 26.3346563 ], [ 88.9849518, 26.334042 ], [ 88.9851304, 26.334114 ], [ 88.9853343, 26.3338334 ], [ 88.9854038, 26.33359 ], [ 88.9854618, 26.3327902 ], [ 88.985995, 26.3328134 ], [ 88.9862283, 26.3318054 ], [ 88.9865513, 26.3319905 ], [ 88.9872236, 26.3321759 ], [ 88.9880813, 26.3323266 ], [ 88.9890549, 26.3324077 ], [ 88.9890201, 26.3329409 ], [ 88.9897155, 26.3329525 ], [ 88.9897305, 26.3334779 ], [ 88.9897665, 26.3346331 ], [ 88.9914356, 26.3343897 ], [ 88.9915772, 26.3341783 ], [ 88.9918904, 26.3339932 ], [ 88.9917949, 26.333335 ], [ 88.9919224, 26.3332886 ], [ 88.9919455, 26.3327671 ], [ 88.9925135, 26.3327323 ], [ 88.9931162, 26.3326164 ], [ 88.9935334, 26.3325352 ], [ 88.9936331, 26.332373 ], [ 88.994514, 26.33206 ], [ 88.994769, 26.3320137 ], [ 88.9949081, 26.3318398 ], [ 88.9952906, 26.3318978 ], [ 88.9967528, 26.3320859 ], [ 88.9980604, 26.3319717 ], [ 88.9983143, 26.3303595 ], [ 88.9993301, 26.3302873 ], [ 88.9994187, 26.330131 ], [ 88.9996345, 26.3299913 ], [ 88.9999519, 26.3299151 ], [ 89.0002692, 26.3299278 ], [ 89.0003962, 26.3298644 ], [ 89.0008786, 26.3298263 ], [ 89.0007897, 26.3290138 ], [ 89.0007135, 26.3282648 ], [ 89.000485, 26.3282268 ], [ 89.0004216, 26.3276174 ], [ 89.0002565, 26.3275666 ], [ 89.0000788, 26.3264495 ], [ 88.9997868, 26.3254594 ], [ 88.9994822, 26.3255482 ], [ 88.9993044, 26.3249135 ], [ 88.9985859, 26.324412 ], [ 88.9982381, 26.3238218 ], [ 88.9979238, 26.3231267 ], [ 88.9972227, 26.3227372 ], [ 88.9969306, 26.3221334 ], [ 88.9966513, 26.3217652 ], [ 88.9964101, 26.3214606 ], [ 88.9961689, 26.3210416 ], [ 88.9958756, 26.3205622 ], [ 88.9953482, 26.3203362 ], [ 88.9950091, 26.32029 ], [ 88.9948648, 26.3204252 ], [ 88.9947826, 26.3207745 ], [ 88.9949743, 26.3212538 ], [ 88.9950497, 26.3215689 ], [ 88.9950154, 26.3218017 ], [ 88.9949401, 26.3222263 ], [ 88.9947552, 26.3224044 ], [ 88.9944539, 26.322466 ], [ 88.993858, 26.3224797 ], [ 88.9935019, 26.3224592 ], [ 88.9930677, 26.3224181 ], [ 88.9924377, 26.3223427 ], [ 88.9919446, 26.322377 ], [ 88.9915474, 26.3225139 ], [ 88.9914721, 26.3224318 ], [ 88.9914584, 26.3223701 ], [ 88.991431, 26.3222948 ], [ 88.9914104, 26.3221921 ], [ 88.9914378, 26.3220893 ], [ 88.9914652, 26.322014 ], [ 88.9914995, 26.3219387 ], [ 88.9915611, 26.3219113 ], [ 88.9916227, 26.3218565 ], [ 88.9916364, 26.3218154 ], [ 88.9916585, 26.3217463 ], [ 88.9916775, 26.321651 ], [ 88.9916912, 26.32161 ], [ 88.9917203, 26.3215586 ], [ 88.9917289, 26.3215158 ], [ 88.9917289, 26.3214473 ], [ 88.9916604, 26.3213061 ], [ 88.9916433, 26.3210064 ], [ 88.9919001, 26.3209722 ], [ 88.991883, 26.3204843 ], [ 88.9920799, 26.32045 ], [ 88.992174, 26.3204586 ], [ 88.9922853, 26.3204671 ], [ 88.9924565, 26.3204928 ], [ 88.9926449, 26.3205099 ], [ 88.9928845, 26.3204671 ], [ 88.9930729, 26.3203302 ], [ 88.9931585, 26.3202018 ], [ 88.9932612, 26.3199621 ], [ 88.993304, 26.3198165 ], [ 88.9932612, 26.3196111 ], [ 88.9932355, 26.3193885 ], [ 88.9931522, 26.3184654 ], [ 88.9932083, 26.3181448 ], [ 88.9933526, 26.3181367 ], [ 88.9933446, 26.3176958 ], [ 88.9937133, 26.3174794 ], [ 88.9940099, 26.3171748 ], [ 88.9943183, 26.3164831 ], [ 88.9945222, 26.3164151 ], [ 88.9953378, 26.3160413 ], [ 88.9961874, 26.3159054 ], [ 88.9963233, 26.3156675 ], [ 88.9962214, 26.3148519 ], [ 88.9961534, 26.3141722 ], [ 88.9960855, 26.3134925 ], [ 88.9958816, 26.3130847 ], [ 88.9954058, 26.3127448 ], [ 88.994998, 26.3127109 ], [ 88.9944202, 26.3129148 ], [ 88.9936386, 26.3135265 ], [ 88.9931288, 26.3140702 ], [ 88.9926894, 26.3144933 ], [ 88.9917184, 26.31456 ], [ 88.9917355, 26.3142116 ], [ 88.9907839, 26.3142709 ], [ 88.9907771, 26.3146267 ], [ 88.9901722, 26.3146934 ], [ 88.9901841, 26.3156348 ], [ 88.9891983, 26.3156644 ], [ 88.9892354, 26.3163315 ], [ 88.9877254, 26.3165171 ], [ 88.9869777, 26.316619 ], [ 88.9866379, 26.316789 ], [ 88.9866245, 26.3174915 ], [ 88.9863967, 26.3175379 ], [ 88.9860027, 26.3176103 ], [ 88.9857937, 26.3176183 ], [ 88.9854881, 26.3176987 ], [ 88.9851022, 26.3178354 ], [ 88.9848127, 26.317956 ], [ 88.9846278, 26.3178676 ], [ 88.9844589, 26.3177068 ], [ 88.9843383, 26.3174495 ], [ 88.984282, 26.3171922 ], [ 88.9842579, 26.3169349 ], [ 88.9842579, 26.3167499 ], [ 88.984274, 26.3165167 ], [ 88.9843753, 26.3163318 ], [ 88.9844798, 26.3162112 ], [ 88.9846004, 26.3161388 ], [ 88.9847854, 26.3162032 ], [ 88.9849462, 26.3163157 ], [ 88.9851633, 26.3163559 ], [ 88.9853562, 26.3163157 ], [ 88.9854527, 26.3162032 ], [ 88.9855331, 26.3160504 ], [ 88.9855733, 26.3158413 ], [ 88.9856377, 26.3157207 ], [ 88.9857985, 26.3156564 ], [ 88.985895, 26.3155277 ], [ 88.9859271, 26.3153991 ], [ 88.985895, 26.3152624 ], [ 88.9858226, 26.3150533 ], [ 88.9857811, 26.3148862 ], [ 88.9856146, 26.3143554 ], [ 88.9855001, 26.3138662 ], [ 88.9852815, 26.3133979 ], [ 88.9846668, 26.3127448 ], [ 88.9840118, 26.3120032 ], [ 88.9834914, 26.3113683 ], [ 88.9832323, 26.310774 ], [ 88.9830575, 26.3106065 ], [ 88.9829086, 26.3102547 ], [ 88.9829398, 26.3100361 ], [ 88.9828773, 26.3099008 ], [ 88.9826796, 26.3096094 ], [ 88.9826692, 26.3091203 ], [ 88.9823899, 26.3088367 ], [ 88.9826373, 26.3080022 ], [ 88.9829645, 26.3072901 ], [ 88.9831185, 26.3069244 ], [ 88.983311, 26.3065587 ], [ 88.9835612, 26.3061352 ], [ 88.9837729, 26.3057695 ], [ 88.9839871, 26.3053703 ], [ 88.984157, 26.3047246 ], [ 88.984312, 26.3036891 ], [ 88.9850282, 26.3032653 ], [ 88.985262, 26.3029437 ], [ 88.9854082, 26.3025783 ], [ 88.9855632, 26.3022391 ], [ 88.9847808, 26.3013757 ], [ 88.9852041, 26.3007773 ], [ 88.986364, 26.3013686 ], [ 88.9871649, 26.3010553 ], [ 88.9881399, 26.3006374 ], [ 88.9889407, 26.3003589 ], [ 88.9901722, 26.2998309 ], [ 88.9912937, 26.2999328 ], [ 88.9917219, 26.299593 ], [ 88.9926395, 26.2993211 ], [ 88.993727, 26.2990832 ], [ 88.9938629, 26.2987434 ], [ 88.9938289, 26.2976899 ], [ 88.9938289, 26.2967044 ], [ 88.9941688, 26.2962626 ], [ 88.9944066, 26.2962626 ], [ 88.9945426, 26.2967044 ], [ 88.9946105, 26.2972141 ], [ 88.9945766, 26.2979957 ], [ 88.9946785, 26.2989133 ], [ 88.9947125, 26.299559 ], [ 88.9952223, 26.299627 ], [ 88.9952223, 26.2991512 ], [ 88.9950863, 26.2983356 ], [ 88.9950184, 26.2972821 ], [ 88.9952902, 26.2969083 ], [ 88.9955621, 26.2966704 ], [ 88.995732, 26.2969762 ], [ 88.995732, 26.2977918 ], [ 88.995732, 26.2983356 ], [ 88.9960379, 26.2992871 ], [ 88.9966156, 26.299491 ], [ 88.9969555, 26.299491 ], [ 88.9971254, 26.2992192 ], [ 88.9971254, 26.2981997 ], [ 88.9969555, 26.2970102 ], [ 88.9966496, 26.2964665 ], [ 88.9960379, 26.2961266 ], [ 88.994857, 26.2951884 ], [ 88.994805, 26.2949541 ], [ 88.9947269, 26.2944595 ], [ 88.9945533, 26.2938693 ], [ 88.9944752, 26.293366 ], [ 88.9943537, 26.2929234 ], [ 88.994857, 26.2924591 ], [ 88.9951521, 26.2922335 ], [ 88.9954472, 26.2919731 ], [ 88.995855, 26.2917128 ], [ 88.9962282, 26.2916347 ], [ 88.9963931, 26.2915479 ], [ 88.9966274, 26.291357 ], [ 88.9967576, 26.2912181 ], [ 88.9970353, 26.2911487 ], [ 88.9971762, 26.2911668 ], [ 88.9976472, 26.2911173 ], [ 88.9980072, 26.2910919 ], [ 88.9989471, 26.2909421 ], [ 88.9999824, 26.2907786 ], [ 89.0000364, 26.2914785 ], [ 89.0001753, 26.2922564 ], [ 89.0003976, 26.2928398 ], [ 89.000639, 26.2933396 ], [ 89.0007208, 26.2943749 ], [ 89.0009796, 26.2943613 ], [ 89.0011403, 26.2949198 ], [ 89.001331, 26.2963025 ], [ 89.0017125, 26.2962616 ], [ 89.0017942, 26.2961526 ], [ 89.0022029, 26.2962071 ], [ 89.002271, 26.2965477 ], [ 89.0024481, 26.2967248 ], [ 89.0027478, 26.2967248 ], [ 89.003497, 26.2968065 ], [ 89.0035815, 26.29697 ], [ 89.0036768, 26.2974877 ], [ 89.0037994, 26.2981007 ], [ 89.0048347, 26.2979031 ], [ 89.0047815, 26.2983683 ], [ 89.0044124, 26.2988295 ], [ 89.0041536, 26.2994425 ], [ 89.0043307, 26.3001645 ], [ 89.0044124, 26.3009137 ], [ 89.0041128, 26.3015267 ], [ 89.0040719, 26.3018128 ], [ 89.0043716, 26.3029434 ], [ 89.0043171, 26.3031886 ], [ 89.0043698, 26.3037562 ], [ 89.0046333, 26.3037562 ], [ 89.0050726, 26.3037562 ], [ 89.0054591, 26.3037211 ], [ 89.0057403, 26.3034926 ], [ 89.0060214, 26.3032291 ], [ 89.0061795, 26.3031939 ], [ 89.0064607, 26.3032115 ], [ 89.0066891, 26.3032467 ], [ 89.0069175, 26.3032994 ], [ 89.0070756, 26.3033872 ], [ 89.0070756, 26.3036508 ], [ 89.0069526, 26.3039143 ], [ 89.0067066, 26.3041427 ], [ 89.0065836, 26.3042833 ], [ 89.0065485, 26.3045117 ], [ 89.0066364, 26.3047577 ], [ 89.0068999, 26.3047577 ], [ 89.0070932, 26.3046523 ], [ 89.0072162, 26.3045469 ], [ 89.0074973, 26.304459 ], [ 89.0077784, 26.3043184 ], [ 89.007919, 26.3041779 ], [ 89.0078663, 26.3040197 ], [ 89.0077609, 26.3038616 ], [ 89.0075852, 26.3037035 ], [ 89.00755, 26.3035629 ], [ 89.0076379, 26.3034224 ], [ 89.007919, 26.3033169 ], [ 89.008042, 26.3031939 ], [ 89.008165, 26.3030358 ], [ 89.0083055, 26.3028074 ], [ 89.0084285, 26.302579 ], [ 89.0085691, 26.3022979 ], [ 89.0089205, 26.3022979 ], [ 89.0094125, 26.3023857 ], [ 89.0098517, 26.3023857 ], [ 89.0101153, 26.302333 ], [ 89.0103086, 26.3021749 ], [ 89.0104489, 26.3011742 ], [ 89.0105878, 26.300563 ], [ 89.010699, 26.3001741 ], [ 89.0106156, 26.2999518 ], [ 89.0106156, 26.2993406 ], [ 89.0108657, 26.2989517 ], [ 89.0112373, 26.2988295 ], [ 89.0117958, 26.2985979 ], [ 89.012477, 26.2984239 ], [ 89.0127494, 26.2980666 ], [ 89.0127826, 26.2977015 ], [ 89.0125326, 26.2974237 ], [ 89.0121714, 26.297007 ], [ 89.0121992, 26.2965069 ], [ 89.0126159, 26.2961458 ], [ 89.0128937, 26.2959235 ], [ 89.0132549, 26.2955901 ], [ 89.013366, 26.2951179 ], [ 89.0130048, 26.2949512 ], [ 89.0126715, 26.2947567 ], [ 89.0123103, 26.2943955 ], [ 89.0122998, 26.2939662 ], [ 89.012227, 26.2937566 ], [ 89.0126715, 26.2930065 ], [ 89.0128937, 26.2924786 ], [ 89.0131993, 26.2920619 ], [ 89.0136772, 26.2916729 ], [ 89.0139618, 26.2914733 ], [ 89.0141389, 26.291378 ], [ 89.014602, 26.291378 ], [ 89.0151469, 26.2913371 ], [ 89.01576, 26.2912826 ], [ 89.0160324, 26.291269 ], [ 89.0162367, 26.2911192 ], [ 89.0163457, 26.2909148 ], [ 89.0164275, 26.2906424 ], [ 89.0164547, 26.2903699 ], [ 89.0165501, 26.2901247 ], [ 89.0168498, 26.2899612 ], [ 89.017095, 26.289934 ], [ 89.0173538, 26.2900157 ], [ 89.0176126, 26.2901656 ], [ 89.0178442, 26.2903018 ], [ 89.018103, 26.2903427 ], [ 89.0183347, 26.2902724 ], [ 89.0183445, 26.290395 ], [ 89.0183445, 26.2911173 ], [ 89.0184266, 26.2916959 ], [ 89.0185009, 26.292328 ], [ 89.0186223, 26.2927286 ], [ 89.0189279, 26.2933815 ], [ 89.0192074, 26.2936665 ], [ 89.0197047, 26.2938126 ], [ 89.0198488, 26.2941871 ], [ 89.0202206, 26.2950887 ], [ 89.0200626, 26.295507 ], [ 89.0187241, 26.2955256 ], [ 89.0181571, 26.2955256 ], [ 89.0180944, 26.2961319 ], [ 89.0179669, 26.2966424 ], [ 89.0178166, 26.2966875 ], [ 89.0171904, 26.2966131 ], [ 89.0171776, 26.2973265 ], [ 89.0168998, 26.2979932 ], [ 89.0169301, 26.2985744 ], [ 89.0163164, 26.2991323 ], [ 89.015983, 26.2996046 ], [ 89.0153964, 26.299727 ], [ 89.0152601, 26.2995934 ], [ 89.0152068, 26.2995044 ], [ 89.0152848, 26.2994109 ], [ 89.0151454, 26.2991693 ], [ 89.0148573, 26.2989648 ], [ 89.014455, 26.2991601 ], [ 89.0143161, 26.2996879 ], [ 89.014205, 26.3003825 ], [ 89.0148015, 26.3003312 ], [ 89.0154615, 26.300359 ], [ 89.0154708, 26.3009353 ], [ 89.0156102, 26.3011027 ], [ 89.015676, 26.3014449 ], [ 89.0162422, 26.3014931 ], [ 89.0163259, 26.3018463 ], [ 89.0163631, 26.3022088 ], [ 89.0158333, 26.3022088 ], [ 89.01548, 26.3021902 ], [ 89.0153871, 26.3028501 ], [ 89.0153871, 26.3030732 ], [ 89.0154893, 26.3031941 ], [ 89.0160099, 26.3031662 ], [ 89.0172461, 26.3031383 ], [ 89.0172368, 26.3035101 ], [ 89.0174227, 26.303696 ], [ 89.0177852, 26.3041979 ], [ 89.0181849, 26.3047928 ], [ 89.0184, 26.3050775 ], [ 89.0189657, 26.3048486 ], [ 89.0194212, 26.3048579 ], [ 89.0200068, 26.305081 ], [ 89.0198447, 26.3057721 ], [ 89.0194835, 26.3057999 ], [ 89.0191779, 26.3057443 ], [ 89.0188763, 26.3057468 ], [ 89.0186691, 26.3072203 ], [ 89.0189378, 26.3072282 ], [ 89.0198116, 26.3071724 ], [ 89.020453, 26.3071166 ], [ 89.0204836, 26.3077446 ], [ 89.0205948, 26.308578 ], [ 89.0210393, 26.3092448 ], [ 89.0215116, 26.3093003 ], [ 89.0215949, 26.3086891 ], [ 89.0215949, 26.3081057 ], [ 89.021706, 26.3077168 ], [ 89.0222894, 26.3077446 ], [ 89.022595, 26.3081335 ], [ 89.0227895, 26.3084113 ], [ 89.0232618, 26.3081057 ], [ 89.0237063, 26.3078835 ], [ 89.0240318, 26.3078631 ], [ 89.024264, 26.3073676 ], [ 89.0250676, 26.3073278 ], [ 89.0262439, 26.3072932 ], [ 89.0262903, 26.3068192 ], [ 89.02629, 26.3062166 ], [ 89.0265785, 26.3061406 ], [ 89.026532, 26.3054993 ], [ 89.026281, 26.3050252 ], [ 89.0260765, 26.3045047 ], [ 89.0258999, 26.3039935 ], [ 89.0255399, 26.3033273 ], [ 89.0254909, 26.3028873 ], [ 89.0253236, 26.3025062 ], [ 89.0250912, 26.3024876 ], [ 89.0247009, 26.3024969 ], [ 89.0242689, 26.3026704 ], [ 89.0239008, 26.3024105 ], [ 89.0235483, 26.3017626 ], [ 89.0233809, 26.3011584 ], [ 89.023234, 26.3005769 ], [ 89.0231229, 26.299938 ], [ 89.0227617, 26.2994934 ], [ 89.0225117, 26.2990767 ], [ 89.0218727, 26.2986878 ], [ 89.0214282, 26.2983822 ], [ 89.0211226, 26.2976599 ], [ 89.0210393, 26.2971876 ], [ 89.0213732, 26.2968734 ], [ 89.0217822, 26.2966038 ], [ 89.0222339, 26.296493 ], [ 89.0224538, 26.2964747 ], [ 89.0225395, 26.2956596 ], [ 89.0226931, 26.295098 ], [ 89.0229006, 26.2944094 ], [ 89.0231432, 26.2936996 ], [ 89.0229534, 26.2934806 ], [ 89.022595, 26.2933537 ], [ 89.0219561, 26.2933259 ], [ 89.0215949, 26.2931593 ], [ 89.0216056, 26.2927184 ], [ 89.0212802, 26.2926162 ], [ 89.0214004, 26.2920202 ], [ 89.021336, 26.2916588 ], [ 89.020567, 26.2915565 ], [ 89.0204808, 26.2910174 ], [ 89.0203169, 26.2906034 ], [ 89.019928, 26.2903533 ], [ 89.019928, 26.2897421 ], [ 89.0200558, 26.289381 ], [ 89.0203892, 26.2889087 ], [ 89.0207781, 26.2883253 ], [ 89.0210837, 26.2879641 ], [ 89.0218338, 26.2877974 ], [ 89.0223339, 26.2875474 ], [ 89.0226395, 26.2877696 ], [ 89.023084, 26.2882141 ], [ 89.0235563, 26.2882697 ], [ 89.0240286, 26.2882141 ], [ 89.024612, 26.2879641 ], [ 89.0245008, 26.2873251 ], [ 89.0245842, 26.286575 ], [ 89.0248898, 26.2863528 ], [ 89.0251954, 26.2862694 ], [ 89.0260844, 26.2859916 ], [ 89.0264266, 26.285759 ], [ 89.0267789, 26.2855279 ], [ 89.0269535, 26.2848993 ], [ 89.0271846, 26.2842985 ], [ 89.0273325, 26.283901 ], [ 89.0273418, 26.2835774 ], [ 89.0272678, 26.2830967 ], [ 89.0272401, 26.2827547 ], [ 89.0274989, 26.2825791 ], [ 89.02773, 26.282653 ], [ 89.0279981, 26.2828934 ], [ 89.0282015, 26.2832077 ], [ 89.0285897, 26.2836606 ], [ 89.0291166, 26.2842522 ], [ 89.029696, 26.2848526 ], [ 89.0301961, 26.2848526 ], [ 89.0309462, 26.2851582 ], [ 89.0318066, 26.2852321 ], [ 89.0322503, 26.2850102 ], [ 89.0326075, 26.2848248 ], [ 89.0328853, 26.284547 ], [ 89.0330823, 26.2843816 ], [ 89.034626, 26.2843077 ], [ 89.0345927, 26.2841038 ], [ 89.0352916, 26.2840674 ], [ 89.035384, 26.2832631 ], [ 89.0357168, 26.2832816 ], [ 89.0364009, 26.2833001 ], [ 89.0371081, 26.2833802 ], [ 89.0375804, 26.2834357 ], [ 89.0379971, 26.2836857 ], [ 89.038525, 26.283908 ], [ 89.0387472, 26.2844081 ], [ 89.0387472, 26.2850748 ], [ 89.0388583, 26.2857416 ], [ 89.0391093, 26.285722 ], [ 89.0398396, 26.2856296 ], [ 89.0404312, 26.2855556 ], [ 89.0407197, 26.2854915 ], [ 89.0406919, 26.2848526 ], [ 89.0406364, 26.2842136 ], [ 89.040348, 26.2842522 ], [ 89.0396917, 26.2842522 ], [ 89.0394418, 26.2839636 ], [ 89.0391362, 26.2835191 ], [ 89.038775, 26.2832968 ], [ 89.0382681, 26.2828564 ], [ 89.0376645, 26.282715 ], [ 89.0373908, 26.2825984 ], [ 89.0377749, 26.2821717 ], [ 89.0382472, 26.2816438 ], [ 89.0390446, 26.2811463 ], [ 89.0398119, 26.2812387 ], [ 89.0402279, 26.2812479 ], [ 89.0401919, 26.2805325 ], [ 89.0402371, 26.2799168 ], [ 89.0396362, 26.2796158 ], [ 89.0393312, 26.2790571 ], [ 89.0388861, 26.2784767 ], [ 89.0383051, 26.2783823 ], [ 89.0385177, 26.2775226 ], [ 89.0388413, 26.2775504 ], [ 89.0393312, 26.277763 ], [ 89.0401363, 26.2781155 ], [ 89.039969, 26.2774857 ], [ 89.0398673, 26.2769772 ], [ 89.0398026, 26.276626 ], [ 89.0407548, 26.2763949 ], [ 89.0411707, 26.2762562 ], [ 89.0411523, 26.2761176 ], [ 89.0413556, 26.2760806 ], [ 89.0420767, 26.2759604 ], [ 89.0429826, 26.2758402 ], [ 89.0437036, 26.2755814 ], [ 89.0444154, 26.2753596 ], [ 89.0450532, 26.2752209 ], [ 89.0452426, 26.2760913 ], [ 89.0444986, 26.2763671 ], [ 89.0441103, 26.2765428 ], [ 89.044286, 26.2771899 ], [ 89.0443969, 26.2777352 ], [ 89.0445633, 26.2782529 ], [ 89.0446465, 26.2786689 ], [ 89.0444523, 26.2787243 ], [ 89.0445171, 26.2793657 ], [ 89.0439201, 26.2793657 ], [ 89.0432506, 26.2792605 ], [ 89.0430842, 26.2801202 ], [ 89.0434725, 26.2801757 ], [ 89.0435002, 26.2803143 ], [ 89.043833, 26.280416 ], [ 89.0448591, 26.2801387 ], [ 89.0455154, 26.2800185 ], [ 89.0458574, 26.2807026 ], [ 89.0460534, 26.2811971 ], [ 89.0464416, 26.28104 ], [ 89.0471349, 26.280587 ], [ 89.0475873, 26.2802131 ], [ 89.0481333, 26.2800139 ], [ 89.0482818, 26.2804909 ], [ 89.0483551, 26.2812064 ], [ 89.0483089, 26.2815761 ], [ 89.0479854, 26.2816593 ], [ 89.0479669, 26.2818442 ], [ 89.0478375, 26.2818349 ], [ 89.0477635, 26.2822001 ], [ 89.0478005, 26.283032 ], [ 89.0481985, 26.2840747 ], [ 89.0485319, 26.2849637 ], [ 89.0484763, 26.285436 ], [ 89.0485597, 26.2859638 ], [ 89.0492333, 26.2859208 ], [ 89.0488913, 26.2864662 ], [ 89.0488728, 26.2872149 ], [ 89.0491963, 26.2879452 ], [ 89.0492888, 26.2882687 ], [ 89.0497972, 26.2882225 ], [ 89.0498249, 26.2885923 ], [ 89.0498527, 26.2887402 ], [ 89.0496955, 26.2888881 ], [ 89.0493535, 26.289073 ], [ 89.0489841, 26.2891877 ], [ 89.0486417, 26.2890267 ], [ 89.048198, 26.2887402 ], [ 89.0476617, 26.288341 ], [ 89.0477081, 26.2881439 ], [ 89.0475694, 26.2877095 ], [ 89.0475047, 26.2874876 ], [ 89.0473291, 26.2873674 ], [ 89.0470872, 26.2871029 ], [ 89.0470039, 26.2859916 ], [ 89.0469316, 26.285038 ], [ 89.0471984, 26.2837413 ], [ 89.0472921, 26.282727 ], [ 89.0467652, 26.2826438 ], [ 89.0466265, 26.2832169 ], [ 89.0465064, 26.2836699 ], [ 89.0463862, 26.2843169 ], [ 89.0460996, 26.2843077 ], [ 89.0456189, 26.2840581 ], [ 89.0446945, 26.2836791 ], [ 89.0446298, 26.2842337 ], [ 89.0446761, 26.2849409 ], [ 89.0451475, 26.2849779 ], [ 89.0452399, 26.2856434 ], [ 89.0452769, 26.2865124 ], [ 89.0458038, 26.2869746 ], [ 89.0456426, 26.2871584 ], [ 89.0453878, 26.2877049 ], [ 89.0453046, 26.2880654 ], [ 89.0453693, 26.2888696 ], [ 89.0457815, 26.289117 ], [ 89.0463649, 26.2892004 ], [ 89.046307, 26.2895093 ], [ 89.0461551, 26.2896276 ], [ 89.0459703, 26.289883 ], [ 89.0456375, 26.2900347 ], [ 89.0451937, 26.2900251 ], [ 89.0443063, 26.289831 ], [ 89.0433634, 26.2896831 ], [ 89.0431145, 26.2897282 ], [ 89.0427672, 26.2896992 ], [ 89.0427048, 26.2904272 ], [ 89.0426562, 26.2911136 ], [ 89.0433079, 26.291169 ], [ 89.0434397, 26.2912591 ], [ 89.0436962, 26.2912661 ], [ 89.044029, 26.2911205 ], [ 89.0444935, 26.2911552 ], [ 89.0447202, 26.2912242 ], [ 89.0448748, 26.2911413 ], [ 89.0452908, 26.2910997 ], [ 89.0454434, 26.2919156 ], [ 89.0454778, 26.2924248 ], [ 89.0455397, 26.2929202 ], [ 89.0456842, 26.2935807 ], [ 89.0456302, 26.2939532 ], [ 89.0458631, 26.2939729 ], [ 89.0458562, 26.2947641 ], [ 89.0457186, 26.2955898 ], [ 89.0463585, 26.2956999 ], [ 89.0468951, 26.2957824 ], [ 89.0481611, 26.2959476 ], [ 89.048168, 26.2960233 ], [ 89.0484295, 26.2960508 ], [ 89.0494871, 26.2961273 ], [ 89.0496404, 26.2955279 ], [ 89.0500602, 26.2955485 ], [ 89.0505624, 26.295521 ], [ 89.0505487, 26.2958402 ], [ 89.0507266, 26.2958402 ], [ 89.0512918, 26.2958788 ], [ 89.0522963, 26.2961265 ], [ 89.0525234, 26.2953627 ], [ 89.0526059, 26.2948123 ], [ 89.0527229, 26.294544 ], [ 89.0528123, 26.2935394 ], [ 89.0528886, 26.2935415 ], [ 89.0529491, 26.2931176 ], [ 89.0529761, 26.2920739 ], [ 89.0541419, 26.2920636 ], [ 89.0541114, 26.2926725 ], [ 89.0545435, 26.2927138 ], [ 89.0549026, 26.2927069 ], [ 89.0553567, 26.2926862 ], [ 89.0554118, 26.2931885 ], [ 89.0559897, 26.2931747 ], [ 89.0562374, 26.2939178 ], [ 89.0563902, 26.2941931 ], [ 89.0566379, 26.294255 ], [ 89.0569475, 26.2942619 ], [ 89.0572778, 26.2941862 ], [ 89.0574635, 26.2937596 ], [ 89.0577831, 26.2933398 ], [ 89.0584254, 26.293216 ], [ 89.0584635, 26.293091 ], [ 89.0586181, 26.2928789 ], [ 89.0590103, 26.2927757 ], [ 89.0591685, 26.2926105 ], [ 89.0592924, 26.2926105 ], [ 89.0592855, 26.2923766 ], [ 89.0593794, 26.2921602 ], [ 89.0594263, 26.2920061 ], [ 89.0595133, 26.2918922 ], [ 89.0597612, 26.2918453 ], [ 89.0601028, 26.2918051 ], [ 89.0603105, 26.2917917 ], [ 89.0605248, 26.2917114 ], [ 89.060699, 26.2915975 ], [ 89.0608664, 26.2914099 ], [ 89.0609736, 26.2911822 ], [ 89.0610138, 26.2909477 ], [ 89.0609803, 26.2908205 ], [ 89.0609066, 26.2907133 ], [ 89.0608196, 26.2906463 ], [ 89.0607258, 26.2905659 ], [ 89.0606387, 26.2904922 ], [ 89.0605449, 26.2903784 ], [ 89.060498, 26.290231 ], [ 89.0605248, 26.2900501 ], [ 89.0606052, 26.2898827 ], [ 89.0607057, 26.2897353 ], [ 89.0608932, 26.2895008 ], [ 89.0610004, 26.2893401 ], [ 89.0610138, 26.2891391 ], [ 89.0608999, 26.2890152 ], [ 89.0607928, 26.2889415 ], [ 89.0606454, 26.2887741 ], [ 89.0604578, 26.2885865 ], [ 89.0603306, 26.2883989 ], [ 89.0602703, 26.2882114 ], [ 89.0601899, 26.288054 ], [ 89.0601028, 26.2878597 ], [ 89.0600224, 26.2877391 ], [ 89.0599287, 26.2876588 ], [ 89.0597545, 26.287632 ], [ 89.0595401, 26.2876119 ], [ 89.0593727, 26.2876855 ], [ 89.059232, 26.2877123 ], [ 89.0590444, 26.2877726 ], [ 89.0588703, 26.2878262 ], [ 89.0587363, 26.2878262 ], [ 89.0586358, 26.2877793 ], [ 89.0585889, 26.2876655 ], [ 89.0585822, 26.2875315 ], [ 89.058609, 26.2873171 ], [ 89.058609, 26.2871564 ], [ 89.0585086, 26.2869889 ], [ 89.0584014, 26.286875 ], [ 89.058254, 26.2868415 ], [ 89.0580933, 26.2868348 ], [ 89.057966, 26.286875 ], [ 89.0578119, 26.2869353 ], [ 89.0574987, 26.2865819 ], [ 89.0574825, 26.2862494 ], [ 89.0574662, 26.2856494 ], [ 89.0577095, 26.2854467 ], [ 89.0582203, 26.2850899 ], [ 89.0588666, 26.2849081 ], [ 89.0590717, 26.2843926 ], [ 89.0593636, 26.2840358 ], [ 89.0600285, 26.2839709 ], [ 89.0604583, 26.2840844 ], [ 89.0607178, 26.284052 ], [ 89.0610989, 26.2839142 ], [ 89.0614333, 26.2839474 ], [ 89.0615059, 26.2838247 ], [ 89.0618681, 26.2833331 ], [ 89.0619668, 26.2832724 ], [ 89.062111, 26.2830447 ], [ 89.0622173, 26.2827448 ], [ 89.0622932, 26.2823653 ], [ 89.0623463, 26.2820237 ], [ 89.0624071, 26.2816898 ], [ 89.0625057, 26.2813709 ], [ 89.0625133, 26.2810597 ], [ 89.0625589, 26.2807068 ], [ 89.0626575, 26.2804791 ], [ 89.0628094, 26.2802893 ], [ 89.062946, 26.2800464 ], [ 89.0629156, 26.2798263 ], [ 89.0628018, 26.2796821 ], [ 89.0627259, 26.2795986 ], [ 89.0625741, 26.2795378 ], [ 89.0623539, 26.2795606 ], [ 89.0620958, 26.2795986 ], [ 89.0619061, 26.2796137 ], [ 89.061777, 26.2796061 ], [ 89.0617163, 26.2795682 ], [ 89.061648, 26.2794847 ], [ 89.0616328, 26.2793481 ], [ 89.061686, 26.2792114 ], [ 89.061777, 26.2790824 ], [ 89.0619138, 26.2788838 ], [ 89.0618398, 26.2788368 ], [ 89.0616584, 26.278736 ], [ 89.0614635, 26.2785814 ], [ 89.0611611, 26.2784067 ], [ 89.0607914, 26.2782521 ], [ 89.0604957, 26.2781446 ], [ 89.0600387, 26.2779698 ], [ 89.0597363, 26.2778489 ], [ 89.0593976, 26.2780572 ], [ 89.0591489, 26.2783193 ], [ 89.058954, 26.278568 ], [ 89.0586516, 26.2788166 ], [ 89.0584298, 26.2788233 ], [ 89.0582215, 26.2787024 ], [ 89.0580736, 26.2785612 ], [ 89.0579459, 26.2783327 ], [ 89.0579392, 26.278158 ], [ 89.0578586, 26.27799 ], [ 89.0576771, 26.2779698 ], [ 89.057536, 26.2780034 ], [ 89.0572134, 26.2779295 ], [ 89.0568639, 26.2778085 ], [ 89.0564741, 26.2777413 ], [ 89.0561851, 26.2777279 ], [ 89.0559499, 26.2777279 ], [ 89.0557483, 26.2778354 ], [ 89.05538, 26.2779631 ], [ 89.055091, 26.2780706 ], [ 89.0547752, 26.2780706 ], [ 89.0543786, 26.2780102 ], [ 89.0541569, 26.2779631 ], [ 89.0540695, 26.2778085 ], [ 89.0539821, 26.2775666 ], [ 89.053962, 26.2773515 ], [ 89.0539351, 26.2770962 ], [ 89.0540023, 26.2769147 ], [ 89.0541905, 26.2767736 ], [ 89.0543921, 26.2765988 ], [ 89.0545157, 26.2765383 ], [ 89.0547846, 26.2763771 ], [ 89.0551676, 26.2762561 ], [ 89.0556045, 26.2761889 ], [ 89.0559203, 26.2761889 ], [ 89.056458, 26.2762426 ], [ 89.0566757, 26.2762158 ], [ 89.056837, 26.275873 ], [ 89.0571932, 26.2757252 ], [ 89.0574016, 26.275705 ], [ 89.0577443, 26.2758327 ], [ 89.0580467, 26.2759537 ], [ 89.0582752, 26.2758932 ], [ 89.0585978, 26.2758058 ], [ 89.0588868, 26.2758058 ], [ 89.0590683, 26.2759268 ], [ 89.0592575, 26.2760954 ], [ 89.0595045, 26.2762052 ], [ 89.0596784, 26.2762327 ], [ 89.0598522, 26.2762327 ], [ 89.0600261, 26.2761412 ], [ 89.0601633, 26.275949 ], [ 89.0602365, 26.275702 ], [ 89.0602365, 26.2755098 ], [ 89.0602365, 26.2752994 ], [ 89.0602365, 26.2751347 ], [ 89.0600993, 26.2747687 ], [ 89.059898, 26.2744942 ], [ 89.0596784, 26.2741648 ], [ 89.0595686, 26.2738628 ], [ 89.0595686, 26.2737164 ], [ 89.0596875, 26.2735975 ], [ 89.0598797, 26.2735609 ], [ 89.0600901, 26.2735609 ], [ 89.060447, 26.2734694 ], [ 89.0607032, 26.2733596 ], [ 89.0608862, 26.27314 ], [ 89.0609502, 26.2729021 ], [ 89.0609777, 26.2727054 ], [ 89.0610143, 26.2725224 ], [ 89.0611058, 26.2722204 ], [ 89.0611881, 26.2719917 ], [ 89.0613803, 26.2717812 ], [ 89.0616273, 26.2715983 ], [ 89.0619201, 26.2715617 ], [ 89.0622129, 26.2715708 ], [ 89.0624325, 26.27158 ], [ 89.0626612, 26.2714519 ], [ 89.062771, 26.271278 ], [ 89.0627802, 26.2711225 ], [ 89.0626795, 26.2708937 ], [ 89.0624325, 26.2707107 ], [ 89.0621671, 26.2704271 ], [ 89.0619476, 26.2702624 ], [ 89.0617097, 26.2700977 ], [ 89.0615175, 26.2699055 ], [ 89.0614718, 26.2696859 ], [ 89.0615084, 26.2694206 ], [ 89.0616365, 26.2692193 ], [ 89.0617829, 26.268899 ], [ 89.061792, 26.2686977 ], [ 89.0615907, 26.2684324 ], [ 89.0614333, 26.2681533 ], [ 89.0614608, 26.2672932 ], [ 89.061534, 26.2665887 ], [ 89.0616529, 26.2658842 ], [ 89.0619091, 26.2654175 ], [ 89.0621013, 26.264713 ], [ 89.0621287, 26.2643104 ], [ 89.0621379, 26.263862 ], [ 89.0621745, 26.2632582 ], [ 89.0623117, 26.2629928 ], [ 89.0626228, 26.2626543 ], [ 89.0629339, 26.2624255 ], [ 89.0631261, 26.2622379 ], [ 89.0633731, 26.261936 ], [ 89.0635286, 26.2616341 ], [ 89.0637025, 26.2613504 ], [ 89.0637574, 26.2610942 ], [ 89.0637574, 26.2608472 ], [ 89.0636842, 26.2605818 ], [ 89.0635561, 26.2600969 ], [ 89.0634737, 26.25974 ], [ 89.0633091, 26.2597583 ], [ 89.0631627, 26.2597766 ], [ 89.0631169, 26.2596211 ], [ 89.0628241, 26.2597034 ], [ 89.0627509, 26.2594472 ], [ 89.0625323, 26.2594069 ], [ 89.0623426, 26.2593003 ], [ 89.0619273, 26.2589888 ], [ 89.0614575, 26.2591575 ], [ 89.0608994, 26.2591575 ], [ 89.0606593, 26.2590797 ], [ 89.0605295, 26.2586968 ], [ 89.0604062, 26.2583464 ], [ 89.0603113, 26.2578767 ], [ 89.0600948, 26.2568733 ], [ 89.0603478, 26.2567825 ], [ 89.0609643, 26.2565294 ], [ 89.0610033, 26.2563088 ], [ 89.0610941, 26.2562439 ], [ 89.0620156, 26.2560751 ], [ 89.0628174, 26.2558336 ], [ 89.062756, 26.2554041 ], [ 89.0626386, 26.2546799 ], [ 89.0626321, 26.2541348 ], [ 89.0625607, 26.2536027 ], [ 89.0622038, 26.2537066 ], [ 89.0615336, 26.2540151 ], [ 89.0607558, 26.2543207 ], [ 89.0600753, 26.2545696 ], [ 89.0598936, 26.2541284 ], [ 89.0594865, 26.2543574 ], [ 89.0593858, 26.2542999 ], [ 89.059063, 26.2546475 ], [ 89.0585633, 26.2551017 ], [ 89.0581415, 26.255582 ], [ 89.0578365, 26.2559129 ], [ 89.057525, 26.2558675 ], [ 89.0570837, 26.2558934 ], [ 89.0566035, 26.2559518 ], [ 89.0563006, 26.2559785 ], [ 89.0565353, 26.2566953 ], [ 89.0564282, 26.2568248 ], [ 89.0562455, 26.256945 ], [ 89.0562552, 26.2570155 ], [ 89.0556739, 26.2572776 ], [ 89.0553628, 26.2573414 ], [ 89.054589, 26.2575089 ], [ 89.0544774, 26.2570143 ], [ 89.0543382, 26.2563765 ], [ 89.0536079, 26.256448 ], [ 89.05313, 26.2564609 ], [ 89.0527825, 26.2562654 ], [ 89.0524213, 26.2560153 ], [ 89.0520324, 26.2560153 ], [ 89.0517823, 26.2552652 ], [ 89.0511433, 26.2550985 ], [ 89.0515879, 26.2541817 ], [ 89.0514063, 26.2535285 ], [ 89.0512067, 26.2527232 ], [ 89.0508933, 26.2524593 ], [ 89.0501988, 26.2520426 ], [ 89.0496709, 26.2515981 ], [ 89.0488097, 26.2516814 ], [ 89.0487541, 26.2509591 ], [ 89.0485121, 26.2494999 ], [ 89.0483714, 26.2485552 ], [ 89.048291, 26.2479523 ], [ 89.0482005, 26.2473091 ], [ 89.0479593, 26.245872 ], [ 89.0491954, 26.2456509 ], [ 89.0502105, 26.2453997 ], [ 89.049909, 26.2443645 ], [ 89.0496577, 26.2438721 ], [ 89.0494567, 26.2432189 ], [ 89.0510546, 26.2425757 ], [ 89.0509139, 26.2420833 ], [ 89.0507129, 26.2415507 ], [ 89.0495874, 26.2418823 ], [ 89.0489342, 26.2420732 ], [ 89.0479906, 26.2416954 ], [ 89.0473786, 26.241378 ], [ 89.0466305, 26.2411513 ], [ 89.0455273, 26.2410482 ], [ 89.044844, 26.2414502 ], [ 89.0434571, 26.242224 ], [ 89.0421708, 26.2429878 ], [ 89.0404523, 26.2440329 ], [ 89.0388443, 26.2449575 ], [ 89.0378092, 26.2455378 ], [ 89.0376509, 26.2452665 ], [ 89.0375077, 26.2442264 ], [ 89.0371309, 26.2431033 ], [ 89.0370027, 26.2423797 ], [ 89.0360034, 26.2425114 ], [ 89.0348473, 26.2428061 ], [ 89.0339803, 26.2429677 ], [ 89.0340765, 26.2436222 ], [ 89.0339632, 26.2447557 ], [ 89.0338272, 26.2459118 ], [ 89.0330512, 26.2466673 ], [ 89.0322857, 26.2468412 ], [ 89.030581, 26.2472488 ], [ 89.0299178, 26.2473995 ], [ 89.0287403, 26.2474986 ], [ 89.0274606, 26.247701 ], [ 89.0274456, 26.244151 ], [ 89.0264808, 26.2441284 ], [ 89.0255763, 26.2441887 ], [ 89.0244231, 26.2441962 ], [ 89.0244231, 26.2449876 ], [ 89.023986, 26.2449952 ], [ 89.0238805, 26.2448896 ], [ 89.0228931, 26.2449801 ], [ 89.022878, 26.2449123 ], [ 89.0222147, 26.2449424 ], [ 89.0215439, 26.2450555 ], [ 89.0207601, 26.2451459 ], [ 89.0206545, 26.2447087 ], [ 89.0204133, 26.2442264 ], [ 89.0200892, 26.243857 ], [ 89.0199713, 26.2427197 ], [ 89.0195315, 26.2428772 ], [ 89.0190642, 26.2429149 ], [ 89.0186873, 26.2430807 ], [ 89.0184914, 26.2431636 ], [ 89.0182652, 26.2431335 ], [ 89.0180617, 26.2431485 ], [ 89.0175944, 26.2432315 ], [ 89.0172553, 26.2435706 ], [ 89.0166397, 26.2438716 ], [ 89.0163734, 26.2441133 ], [ 89.0161548, 26.2443846 ], [ 89.0160191, 26.2443394 ], [ 89.0158156, 26.2447163 ], [ 89.0148283, 26.244769 ], [ 89.0134414, 26.2446711 ], [ 89.0124767, 26.2446635 ], [ 89.011135, 26.2446183 ], [ 89.0104416, 26.2446334 ], [ 89.0099442, 26.2446032 ], [ 89.0094241, 26.2446183 ], [ 89.0087102, 26.244665 ], [ 89.0079091, 26.2445806 ], [ 89.0069896, 26.2445429 ], [ 89.0054595, 26.2445429 ], [ 89.0036883, 26.2445505 ], [ 89.001608, 26.244558 ], [ 88.9997086, 26.2445354 ], [ 88.9987589, 26.2445052 ], [ 88.9972429, 26.2448806 ], [ 88.9959622, 26.245149 ], [ 88.9949173, 26.2453216 ], [ 88.9943996, 26.245475 ], [ 88.993604, 26.2455804 ], [ 88.9927987, 26.2455325 ], [ 88.9908336, 26.245427 ], [ 88.9892135, 26.2453599 ], [ 88.9877256, 26.2453967 ], [ 88.9855571, 26.2452568 ], [ 88.9833605, 26.244942 ], [ 88.9821713, 26.2448371 ], [ 88.9808772, 26.2447672 ], [ 88.979688, 26.2446273 ], [ 88.9791983, 26.2442425 ], [ 88.9786387, 26.2433681 ], [ 88.9781141, 26.2429484 ], [ 88.9772047, 26.2427735 ], [ 88.9763303, 26.2426336 ], [ 88.9754209, 26.2423538 ], [ 88.9751411, 26.2416892 ], [ 88.9738469, 26.2416543 ], [ 88.9727976, 26.2414794 ], [ 88.9717483, 26.2411996 ], [ 88.9714685, 26.2399404 ], [ 88.9703563, 26.2400803 ], [ 88.9691671, 26.2400803 ], [ 88.9682227, 26.2394158 ], [ 88.9670685, 26.2392758 ], [ 88.9655645, 26.2392758 ], [ 88.9638506, 26.2396256 ], [ 88.9624166, 26.2397655 ], [ 88.960318, 26.2401852 ], [ 88.9585692, 26.240535 ], [ 88.9572051, 26.2410072 ], [ 88.9572751, 26.2429309 ], [ 88.9549316, 26.2428609 ], [ 88.9532528, 26.2420565 ], [ 88.9523434, 26.24419 ], [ 88.9531478, 26.2446098 ], [ 88.9522734, 26.2459738 ], [ 88.951364, 26.247303 ], [ 88.9507694, 26.2478276 ], [ 88.9501049, 26.248702 ], [ 88.9485644, 26.2502828 ], [ 88.9476616, 26.2514005 ], [ 88.9467588, 26.2524538 ], [ 88.946028, 26.2531631 ], [ 88.9452972, 26.253765 ], [ 88.9445062, 26.2543776 ], [ 88.9439903, 26.2550654 ], [ 88.9436464, 26.2557962 ], [ 88.9434744, 26.2566131 ], [ 88.9433669, 26.2573654 ], [ 88.9428295, 26.2580532 ], [ 88.9422707, 26.2586873 ], [ 88.9420127, 26.2593107 ], [ 88.9414539, 26.2604069 ], [ 88.9408735, 26.2612022 ], [ 88.9404221, 26.2619116 ], [ 88.9402501, 26.2626854 ], [ 88.9399277, 26.2631798 ], [ 88.9391324, 26.2636742 ], [ 88.9381135, 26.2642116 ], [ 88.9367808, 26.2650714 ], [ 88.9367808, 26.2653938 ], [ 88.9362865, 26.2653938 ], [ 88.9360715, 26.2659097 ], [ 88.9358136, 26.2670059 ], [ 88.9348678, 26.2669844 ], [ 88.9348463, 26.2675218 ], [ 88.9348463, 26.2682741 ], [ 88.9346958, 26.2687577 ], [ 88.9344164, 26.269725 ], [ 88.9340295, 26.2711867 ], [ 88.9337071, 26.2720465 ], [ 88.9329762, 26.2729278 ], [ 88.9323314, 26.2739595 ], [ 88.9317295, 26.2750988 ], [ 88.931463, 26.2755824 ], [ 88.9314845, 26.2763777 ], [ 88.9313985, 26.2770656 ], [ 88.9309256, 26.2772805 ], [ 88.9304527, 26.2777319 ], [ 88.9296359, 26.2781833 ], [ 88.9288836, 26.2787422 ], [ 88.9284752, 26.279387 ], [ 88.9279593, 26.2799889 ], [ 88.9272929, 26.2811174 ], [ 88.9270565, 26.2816548 ], [ 88.9265191, 26.2825361 ], [ 88.9257453, 26.2831594 ], [ 88.924993, 26.2835893 ], [ 88.9247049, 26.2838258 ], [ 88.9241676, 26.2836538 ], [ 88.9238881, 26.2838043 ], [ 88.9238021, 26.2842127 ], [ 88.9235012, 26.2842557 ], [ 88.9228134, 26.2844276 ], [ 88.9225984, 26.285137 ], [ 88.9225984, 26.2853949 ], [ 88.922233, 26.2855024 ], [ 88.9213732, 26.2854809 ], [ 88.9210508, 26.2852659 ], [ 88.9207713, 26.2847286 ], [ 88.9203844, 26.2847071 ], [ 88.9199975, 26.2852014 ], [ 88.9198686, 26.2854594 ], [ 88.9197912, 26.2859753 ], [ 88.9193183, 26.2862117 ], [ 88.918523, 26.2863407 ], [ 88.9185015, 26.2868781 ], [ 88.9182865, 26.2878023 ], [ 88.9172333, 26.2878883 ], [ 88.9159006, 26.2876949 ], [ 88.9143744, 26.2874369 ], [ 88.9127623, 26.2873509 ], [ 88.911974, 26.287614 ], [ 88.9113037, 26.2876422 ], [ 88.9101818, 26.287593 ], [ 88.9101327, 26.2873064 ], [ 88.9095022, 26.2872737 ], [ 88.9089208, 26.2873146 ], [ 88.9086997, 26.2876176 ], [ 88.9084704, 26.2877077 ], [ 88.9084244, 26.2881464 ], [ 88.9068766, 26.2881464 ], [ 88.9052809, 26.2881464 ], [ 88.9038748, 26.2882118 ], [ 88.9029483, 26.2882554 ], [ 88.9018212, 26.2883317 ], [ 88.9004369, 26.288408 ], [ 88.8996739, 26.288517 ], [ 88.8983441, 26.2887677 ], [ 88.8976138, 26.2886478 ], [ 88.8962731, 26.2884516 ], [ 88.8954011, 26.2883208 ], [ 88.8944623, 26.2881627 ], [ 88.8935371, 26.2880818 ], [ 88.8917279, 26.2879393 ], [ 88.8901365, 26.2878086 ], [ 88.8884361, 26.2877977 ], [ 88.8873897, 26.287656 ], [ 88.8857388, 26.2874369 ], [ 88.8835965, 26.2872309 ], [ 88.8825145, 26.2871145 ], [ 88.8810241, 26.2870347 ], [ 88.879727, 26.2869257 ], [ 88.8786712, 26.2867706 ], [ 88.8769911, 26.2866968 ], [ 88.8757486, 26.2865878 ], [ 88.8752581, 26.2861191 ], [ 88.8746731, 26.2856851 ], [ 88.8740264, 26.2851817 ], [ 88.8733189, 26.2846318 ], [ 88.872955, 26.2845181 ], [ 88.8726311, 26.2844169 ], [ 88.8717541, 26.2841589 ], [ 88.870473, 26.2840481 ], [ 88.8702709, 26.2838365 ], [ 88.870099, 26.2835141 ], [ 88.8699389, 26.282969 ], [ 88.8697536, 26.2826311 ], [ 88.8690124, 26.2820207 ], [ 88.8682276, 26.2817155 ], [ 88.8679551, 26.2815956 ], [ 88.8677044, 26.2815193 ], [ 88.8675191, 26.2813231 ], [ 88.8672186, 26.2808487 ], [ 88.8668215, 26.2801895 ], [ 88.8664018, 26.2797095 ], [ 88.8662617, 26.2794175 ], [ 88.866222, 26.2791213 ], [ 88.8664618, 26.2783365 ], [ 88.8666689, 26.2778133 ], [ 88.8668106, 26.2772138 ], [ 88.8670037, 26.2765282 ], [ 88.867094, 26.2762546 ], [ 88.8668869, 26.2760257 ], [ 88.8666144, 26.2754698 ], [ 88.8661784, 26.2749466 ], [ 88.8653936, 26.2743798 ], [ 88.8644017, 26.2741618 ], [ 88.8634534, 26.2740746 ], [ 88.8627558, 26.2739765 ], [ 88.8623198, 26.2738893 ], [ 88.8620037, 26.2738566 ], [ 88.8618426, 26.2736911 ], [ 88.8617421, 26.2734751 ], [ 88.8616331, 26.2730391 ], [ 88.8614805, 26.2727339 ], [ 88.8615568, 26.2723742 ], [ 88.8618075, 26.2718946 ], [ 88.8621345, 26.2714586 ], [ 88.8631518, 26.2705956 ], [ 88.8638676, 26.2698454 ], [ 88.8642382, 26.2692569 ], [ 88.8645216, 26.2687337 ], [ 88.8644756, 26.2683572 ], [ 88.8642927, 26.2678726 ], [ 88.8638131, 26.2674584 ], [ 88.863061, 26.2668371 ], [ 88.8625705, 26.2663357 ], [ 88.8620691, 26.2658125 ], [ 88.8617966, 26.2653983 ], [ 88.8614042, 26.2640467 ], [ 88.8613279, 26.2632292 ], [ 88.8614107, 26.2623845 ], [ 88.8614752, 26.2612667 ], [ 88.8616985, 26.2602317 ], [ 88.861753, 26.259545 ], [ 88.8618293, 26.2588038 ], [ 88.8617748, 26.2581825 ], [ 88.8616113, 26.2556646 ], [ 88.8615182, 26.2537542 ], [ 88.8613824, 26.2530159 ], [ 88.8614186, 26.2520418 ], [ 88.8618184, 26.2515772 ], [ 88.8624711, 26.2511776 ], [ 88.8639426, 26.2506935 ], [ 88.8649839, 26.2504768 ], [ 88.8661624, 26.2501723 ], [ 88.8673276, 26.2497552 ], [ 88.8676852, 26.249391 ], [ 88.8679963, 26.2490666 ], [ 88.8677447, 26.2484112 ], [ 88.8674799, 26.2475438 ], [ 88.8674931, 26.2471135 ], [ 88.8675658, 26.2467939 ], [ 88.8676653, 26.2464382 ], [ 88.8678714, 26.2461487 ], [ 88.868142, 26.2457165 ], [ 88.868527, 26.2456023 ], [ 88.8695804, 26.2454012 ], [ 88.8712372, 26.2452958 ], [ 88.8721661, 26.2452575 ], [ 88.8723879, 26.2449262 ], [ 88.872252, 26.244281 ], [ 88.8719267, 26.2432656 ], [ 88.8716968, 26.2425091 ], [ 88.8714574, 26.241628 ], [ 88.8715245, 26.2409098 ], [ 88.8715819, 26.2406799 ], [ 88.871716, 26.2403543 ], [ 88.872214, 26.2398947 ], [ 88.87253, 26.2398372 ], [ 88.8731429, 26.2397893 ], [ 88.8737123, 26.2398494 ], [ 88.8742556, 26.2402229 ], [ 88.8748329, 26.241004 ], [ 88.8753762, 26.241785 ], [ 88.875641, 26.2424272 ], [ 88.8761014, 26.2424124 ], [ 88.8765902, 26.2424843 ], [ 88.8771267, 26.242442 ], [ 88.8774862, 26.2423679 ], [ 88.8777109, 26.2422601 ], [ 88.8778354, 26.2418483 ], [ 88.8778354, 26.2415897 ], [ 88.877414, 26.240814 ], [ 88.8768681, 26.2397414 ], [ 88.876667, 26.239186 ], [ 88.8765042, 26.2383528 ], [ 88.876395, 26.237744 ], [ 88.8763908, 26.2372655 ], [ 88.8765552, 26.2366629 ], [ 88.8766976, 26.2362356 ], [ 88.8770062, 26.2355706 ], [ 88.8771906, 26.2349976 ], [ 88.8774317, 26.2346032 ], [ 88.8776175, 26.2344839 ], [ 88.8780014, 26.2343402 ], [ 88.8780452, 26.234132 ], [ 88.8779466, 26.2337814 ], [ 88.8778151, 26.2335514 ], [ 88.8776667, 26.2334005 ], [ 88.8769496, 26.2333651 ], [ 88.8757992, 26.2333541 ], [ 88.8754486, 26.2333761 ], [ 88.875098, 26.233387 ], [ 88.8744406, 26.2332665 ], [ 88.8740789, 26.2330492 ], [ 88.8729177, 26.2329597 ], [ 88.8724137, 26.233146 ], [ 88.8715591, 26.2341211 ], [ 88.8702334, 26.2339677 ], [ 88.868853, 26.2335514 ], [ 88.8674615, 26.2332555 ], [ 88.8664864, 26.232894 ], [ 88.8652703, 26.2324996 ], [ 88.8638789, 26.2324777 ], [ 88.8631119, 26.2325105 ], [ 88.8612275, 26.2323571 ], [ 88.8600661, 26.2324448 ], [ 88.8600677, 26.232005 ], [ 88.8596262, 26.2314956 ], [ 88.8586528, 26.2315464 ], [ 88.8586089, 26.2322585 ], [ 88.8581597, 26.2324229 ], [ 88.8573271, 26.2329049 ], [ 88.8568121, 26.2335404 ], [ 88.8567376, 26.2338077 ], [ 88.8558151, 26.233902 ], [ 88.8554645, 26.2339567 ], [ 88.8549496, 26.234143 ], [ 88.8545332, 26.2345812 ], [ 88.8544017, 26.2348332 ], [ 88.8542265, 26.23514 ], [ 88.8518837, 26.2352989 ], [ 88.850589, 26.2350524 ], [ 88.8497368, 26.234734 ], [ 88.8497103, 26.2341783 ], [ 88.8482841, 26.2339066 ], [ 88.8470955, 26.2337029 ], [ 88.845744, 26.2332954 ], [ 88.8447931, 26.2331596 ], [ 88.8443132, 26.2329968 ], [ 88.8437195, 26.2327954 ], [ 88.8437304, 26.2325434 ], [ 88.8438142, 26.2319883 ], [ 88.8438423, 26.2314277 ], [ 88.8438996, 26.2307968 ], [ 88.8436866, 26.2308233 ], [ 88.8434894, 26.2308342 ], [ 88.8427225, 26.2307575 ], [ 88.8417029, 26.2307824 ], [ 88.8409558, 26.231156 ], [ 88.8400601, 26.2314806 ], [ 88.839326, 26.2319408 ], [ 88.8382523, 26.2323243 ], [ 88.8384714, 26.2327296 ], [ 88.8386126, 26.2335331 ], [ 88.8386126, 26.2343073 ], [ 88.8383948, 26.2343621 ], [ 88.8382742, 26.2353153 ], [ 88.8382961, 26.2359398 ], [ 88.8384386, 26.2367506 ], [ 88.8380661, 26.2375065 ], [ 88.838088, 26.2379448 ], [ 88.8380551, 26.2382194 ], [ 88.8373539, 26.238131 ], [ 88.8359844, 26.237901 ], [ 88.8342424, 26.2377366 ], [ 88.8341657, 26.2382077 ], [ 88.8335959, 26.2381858 ], [ 88.8334754, 26.2384597 ], [ 88.8331467, 26.2384488 ], [ 88.8324455, 26.2383721 ], [ 88.8319196, 26.2382844 ], [ 88.8318539, 26.2387884 ], [ 88.8315362, 26.2397635 ], [ 88.8313718, 26.2403442 ], [ 88.8310103, 26.2402675 ], [ 88.8298818, 26.2399279 ], [ 88.828589, 26.2398293 ], [ 88.8275286, 26.2397815 ], [ 88.8274946, 26.2404946 ], [ 88.827329, 26.2409468 ], [ 88.8271975, 26.2414069 ], [ 88.8270441, 26.2417575 ], [ 88.827077, 26.242897 ], [ 88.8266716, 26.2429408 ], [ 88.826584, 26.2431161 ], [ 88.8267264, 26.2440583 ], [ 88.8268594, 26.245159 ], [ 88.8277323, 26.2454186 ], [ 88.8286152, 26.2455884 ], [ 88.8292944, 26.245928 ], [ 88.8298377, 26.2463694 ], [ 88.8298377, 26.2468109 ], [ 88.8296, 26.2472524 ], [ 88.8291925, 26.2477278 ], [ 88.8289396, 26.2478273 ], [ 88.8289209, 26.2484749 ], [ 88.8289176, 26.2494707 ], [ 88.8289505, 26.2500952 ], [ 88.8277963, 26.2500483 ], [ 88.8277782, 26.2494597 ], [ 88.8260344, 26.2493578 ], [ 88.8243704, 26.249188 ], [ 88.8233177, 26.2490522 ], [ 88.823347, 26.250733 ], [ 88.8232794, 26.2512061 ], [ 88.8240905, 26.2512737 ], [ 88.8239105, 26.2525149 ], [ 88.823634, 26.2527709 ], [ 88.8228063, 26.2537069 ], [ 88.8216884, 26.2538563 ], [ 88.8205928, 26.2538563 ], [ 88.8195484, 26.2538563 ], [ 88.8191937, 26.2553459 ], [ 88.8180022, 26.255423 ], [ 88.8164048, 26.2554844 ], [ 88.8148496, 26.2552323 ], [ 88.8146135, 26.2542992 ], [ 88.8137668, 26.2543222 ], [ 88.8137946, 26.2546239 ], [ 88.8135322, 26.2546614 ], [ 88.8133897, 26.2551413 ], [ 88.8132173, 26.2553437 ], [ 88.8130973, 26.2555462 ], [ 88.8129548, 26.2559286 ], [ 88.8128949, 26.2562135 ], [ 88.8128574, 26.2563822 ], [ 88.8127974, 26.2565284 ], [ 88.8128199, 26.2569858 ], [ 88.8128706, 26.257154 ], [ 88.8130148, 26.2580917 ], [ 88.8131798, 26.2581217 ], [ 88.8132173, 26.2582792 ], [ 88.8133223, 26.2584367 ], [ 88.8135997, 26.2585341 ], [ 88.8137346, 26.2587703 ], [ 88.8131498, 26.2590178 ], [ 88.8131573, 26.2598125 ], [ 88.8130898, 26.2601012 ], [ 88.8131346, 26.2617915 ], [ 88.8130051, 26.2623855 ], [ 88.8129738, 26.263001 ], [ 88.8130336, 26.2636795 ], [ 88.8121203, 26.2636034 ], [ 88.8121203, 26.2648878 ], [ 88.8132429, 26.2649258 ], [ 88.8131482, 26.2651304 ], [ 88.8140612, 26.2652683 ], [ 88.814594, 26.2652303 ], [ 88.814628, 26.2656027 ], [ 88.8150634, 26.2658748 ], [ 88.8150601, 26.2668525 ], [ 88.8150887, 26.2676421 ], [ 88.8151687, 26.268678 ], [ 88.814927, 26.2695688 ], [ 88.8143371, 26.2695688 ], [ 88.8140612, 26.2696401 ], [ 88.8140897, 26.2706677 ], [ 88.8142229, 26.2716096 ], [ 88.8134618, 26.2716857 ], [ 88.8135284, 26.2720615 ], [ 88.8136045, 26.2724421 ], [ 88.8136817, 26.2726658 ], [ 88.8137091, 26.2729273 ], [ 88.8136806, 26.2731366 ], [ 88.8137472, 26.2734601 ], [ 88.8125008, 26.2735933 ], [ 88.8112485, 26.2738824 ], [ 88.8105695, 26.2739691 ], [ 88.8105029, 26.2741879 ], [ 88.8104363, 26.2745494 ], [ 88.8103506, 26.2753582 ], [ 88.8100652, 26.2754723 ], [ 88.8100557, 26.2765284 ], [ 88.8099701, 26.2766331 ], [ 88.809951, 26.2770992 ], [ 88.8112164, 26.2772562 ], [ 88.8116255, 26.2787785 ], [ 88.8120118, 26.2802437 ], [ 88.812126, 26.2811761 ], [ 88.8123067, 26.282451 ], [ 88.8124285, 26.2837639 ], [ 88.8124571, 26.2848581 ], [ 88.8126378, 26.2858095 ], [ 88.8127996, 26.2870796 ], [ 88.813066, 26.2881738 ], [ 88.8132086, 26.2885258 ], [ 88.813437, 26.2886495 ], [ 88.8138937, 26.2893155 ], [ 88.814594, 26.290029 ], [ 88.8154978, 26.2907426 ], [ 88.8158555, 26.2912326 ], [ 88.8162171, 26.2916322 ], [ 88.8169782, 26.292379 ], [ 88.817863, 26.2933875 ], [ 88.8186833, 26.2941592 ], [ 88.8191225, 26.2946716 ], [ 88.8187935, 26.294886 ], [ 88.8186603, 26.2949241 ], [ 88.8182988, 26.2950763 ], [ 88.8175947, 26.2953617 ], [ 88.8169668, 26.2955996 ], [ 88.8163389, 26.2959041 ], [ 88.8154796, 26.2963897 ], [ 88.814436, 26.2969887 ], [ 88.8137223, 26.2974711 ], [ 88.8132753, 26.2976832 ], [ 88.8129708, 26.2979781 ], [ 88.8126854, 26.2982636 ], [ 88.8123999, 26.2983854 ], [ 88.8120463, 26.2984072 ], [ 88.8116843, 26.2984295 ], [ 88.8115152, 26.2986061 ], [ 88.81142, 26.2988915 ], [ 88.8111441, 26.2991484 ], [ 88.8109633, 26.2993577 ], [ 88.8106874, 26.2997097 ], [ 88.8103069, 26.2998239 ], [ 88.8101071, 26.300214 ], [ 88.8099358, 26.3005184 ], [ 88.8099643, 26.3006421 ], [ 88.8098502, 26.3006897 ], [ 88.8095077, 26.3007563 ], [ 88.8092318, 26.3011083 ], [ 88.809089, 26.301213 ], [ 88.8086324, 26.3014223 ], [ 88.8082613, 26.301546 ], [ 88.8079473, 26.3016601 ], [ 88.8077095, 26.3017363 ], [ 88.8074431, 26.3017458 ], [ 88.8071386, 26.3016411 ], [ 88.807072, 26.3018409 ], [ 88.8068151, 26.3020407 ], [ 88.8059874, 26.3027828 ], [ 88.8052548, 26.3035154 ], [ 88.8046079, 26.3042004 ], [ 88.8040655, 26.3047047 ], [ 88.8035137, 26.3052755 ], [ 88.8031427, 26.3056656 ], [ 88.8021247, 26.3062936 ], [ 88.8012018, 26.3066646 ], [ 88.800336, 26.3069691 ], [ 88.7997271, 26.3072069 ], [ 88.7991753, 26.3074828 ], [ 88.7985854, 26.3076826 ], [ 88.7980621, 26.3076921 ], [ 88.7971107, 26.3079585 ], [ 88.7965018, 26.3081203 ], [ 88.7961973, 26.3081012 ], [ 88.7959404, 26.3081203 ], [ 88.7957597, 26.3082725 ], [ 88.7948748, 26.3090051 ], [ 88.7939805, 26.3096996 ], [ 88.7934488, 26.3100595 ], [ 88.7929812, 26.3095641 ], [ 88.7925582, 26.309308 ], [ 88.7922019, 26.3089852 ], [ 88.7915896, 26.3083785 ], [ 88.7907269, 26.3075547 ], [ 88.7901368, 26.3070927 ], [ 88.7893798, 26.306614 ], [ 88.7889623, 26.3063189 ], [ 88.7886451, 26.3061575 ], [ 88.7882053, 26.3060406 ], [ 88.7873871, 26.3058569 ], [ 88.7870907, 26.305763 ], [ 88.7869765, 26.3056584 ], [ 88.7863796, 26.3052112 ], [ 88.7858174, 26.304816 ], [ 88.7848822, 26.3042093 ], [ 88.7837801, 26.3037028 ], [ 88.7826705, 26.3032241 ], [ 88.7817354, 26.3030905 ], [ 88.780778, 26.3030905 ], [ 88.7794569, 26.3032092 ], [ 88.7778093, 26.3035135 ], [ 88.7764363, 26.3036842 ], [ 88.7762804, 26.3036842 ], [ 88.7759464, 26.303276 ], [ 88.7752488, 26.302801 ], [ 88.7740762, 26.3020811 ], [ 88.7731781, 26.3015468 ], [ 88.7722133, 26.3009233 ], [ 88.7715676, 26.3006116 ], [ 88.7705795, 26.300351 ], [ 88.7701079, 26.3001975 ], [ 88.7693403, 26.2999453 ], [ 88.767531, 26.2998576 ], [ 88.7665551, 26.2997589 ], [ 88.7654037, 26.2995505 ], [ 88.7635967, 26.2994747 ], [ 88.7629988, 26.299548 ], [ 88.761785, 26.2998466 ], [ 88.7611271, 26.3001756 ], [ 88.7600968, 26.3009182 ], [ 88.7599616, 26.3018644 ], [ 88.7599616, 26.3031486 ], [ 88.7599616, 26.3041625 ], [ 88.7597588, 26.3049735 ], [ 88.7594209, 26.3059198 ], [ 88.7589478, 26.3067309 ], [ 88.7580691, 26.3078123 ], [ 88.7573256, 26.308691 ], [ 88.7569201, 26.309502 ], [ 88.7557641, 26.3093758 ], [ 88.753032, 26.3090776 ], [ 88.7513929, 26.3093756 ], [ 88.7490835, 26.3092266 ], [ 88.7465624, 26.3082718 ], [ 88.7457994, 26.3051157 ], [ 88.7440918, 26.2980515 ], [ 88.7418569, 26.2938794 ], [ 88.7433642, 26.2929671 ], [ 88.7434214, 26.2923389 ], [ 88.744221, 26.2922818 ], [ 88.744221, 26.2916537 ], [ 88.7462525, 26.2913464 ], [ 88.7461667, 26.2909889 ], [ 88.7461461, 26.2909031 ], [ 88.7458054, 26.2894838 ], [ 88.7455343, 26.2893123 ], [ 88.7439355, 26.2897691 ], [ 88.7413354, 26.2898434 ], [ 88.7399377, 26.2898834 ], [ 88.7393239, 26.2910484 ], [ 88.736677, 26.2917661 ], [ 88.7318737, 26.2930599 ], [ 88.7300856, 26.2923149 ], [ 88.7301467, 26.2919963 ], [ 88.7301522, 26.2919671 ], [ 88.7303437, 26.2909684 ], [ 88.7300014, 26.2890838 ], [ 88.72943, 26.2887412 ], [ 88.7290304, 26.2877133 ], [ 88.7285164, 26.2875991 ], [ 88.7273291, 26.2883663 ], [ 88.7273172, 26.2898834 ], [ 88.727538, 26.2905272 ], [ 88.7275626, 26.2906272 ], [ 88.7277168, 26.2910826 ], [ 88.7264608, 26.2925673 ], [ 88.7210924, 26.2930243 ], [ 88.7206241, 26.2915699 ], [ 88.7217415, 26.2900798 ], [ 88.7218906, 26.2862059 ], [ 88.7237194, 26.2844582 ], [ 88.7213779, 26.2814315 ], [ 88.7153686, 26.2812349 ], [ 88.7147384, 26.2812143 ], [ 88.7141426, 26.2800967 ], [ 88.7098961, 26.2800967 ], [ 88.7099566, 26.2828591 ], [ 88.709705, 26.282872 ], [ 88.7085869, 26.2829294 ], [ 88.7077296, 26.2829734 ], [ 88.7076618, 26.2813152 ], [ 88.7000832, 26.2803938 ], [ 88.6960373, 26.279477 ], [ 88.6958989, 26.2790142 ], [ 88.6958989, 26.2783199 ], [ 88.6958989, 26.2775331 ], [ 88.6958989, 26.2772091 ], [ 88.6945104, 26.2770703 ], [ 88.6930293, 26.2766537 ], [ 88.6920574, 26.2765149 ], [ 88.6914094, 26.2765149 ], [ 88.6914094, 26.2768851 ], [ 88.6914094, 26.277348 ], [ 88.691178, 26.2777182 ], [ 88.690854, 26.2780422 ], [ 88.6905763, 26.2781811 ], [ 88.6902061, 26.2782736 ], [ 88.6900672, 26.278505 ], [ 88.6870943, 26.278059 ], [ 88.6850754, 26.2780638 ], [ 88.6856007, 26.2772593 ], [ 88.6857648, 26.276931 ], [ 88.6856992, 26.275782 ], [ 88.6856992, 26.2747643 ], [ 88.6862573, 26.2746658 ], [ 88.6870124, 26.2745673 ], [ 88.6871765, 26.2735824 ], [ 88.6873735, 26.2729914 ], [ 88.6887196, 26.2729586 ], [ 88.6887524, 26.2739107 ], [ 88.6901313, 26.2739107 ], [ 88.6902297, 26.2733197 ], [ 88.6918384, 26.2734182 ], [ 88.6920354, 26.2733854 ], [ 88.6920682, 26.2728601 ], [ 88.6920026, 26.2719409 ], [ 88.6920026, 26.2713171 ], [ 88.6922324, 26.2710216 ], [ 88.6925279, 26.2705292 ], [ 88.6921667, 26.2699546 ], [ 88.6925279, 26.2697248 ], [ 88.6925935, 26.2693637 ], [ 88.6920682, 26.2691667 ], [ 88.6920354, 26.2687399 ], [ 88.6915758, 26.2686414 ], [ 88.6915101, 26.268149 ], [ 88.6910505, 26.2682803 ], [ 88.6910505, 26.2686086 ], [ 88.690558, 26.2686086 ], [ 88.6901641, 26.2685101 ], [ 88.6899999, 26.2673939 ], [ 88.6899014, 26.2668686 ], [ 88.6893105, 26.2667701 ], [ 88.6887852, 26.2668358 ], [ 88.6882599, 26.2668358 ], [ 88.6879973, 26.2661135 ], [ 88.6870452, 26.266409 ], [ 88.6871765, 26.2669999 ], [ 88.6867169, 26.2677222 ], [ 88.6859947, 26.2677222 ], [ 88.6860275, 26.2670656 ], [ 88.6856992, 26.2670328 ], [ 88.6857977, 26.2659822 ], [ 88.6848456, 26.2657196 ], [ 88.6849438, 26.2654772 ], [ 88.6860603, 26.2632245 ], [ 88.6837294, 26.2616486 ], [ 88.6835981, 26.2621082 ], [ 88.6831384, 26.2619769 ], [ 88.6832041, 26.2611233 ], [ 88.6794943, 26.2591535 ], [ 88.6780169, 26.2645048 ], [ 88.6765396, 26.2643407 ], [ 88.6765396, 26.264669 ], [ 88.6755875, 26.264669 ], [ 88.6755219, 26.2635856 ], [ 88.6724293, 26.2632901 ], [ 88.6722323, 26.2640781 ], [ 88.6706236, 26.2640452 ], [ 88.6705908, 26.2634215 ], [ 88.6676032, 26.2635856 ], [ 88.6675704, 26.2629947 ], [ 88.666487, 26.2629947 ], [ 88.6666183, 26.265063 ], [ 88.6675376, 26.2653256 ], [ 88.6672421, 26.2658509 ], [ 88.6673734, 26.2663433 ], [ 88.6674719, 26.2668358 ], [ 88.6682598, 26.2668358 ], [ 88.668313, 26.267421 ], [ 88.6683255, 26.267558 ], [ 88.6687414, 26.267558 ], [ 88.6689493, 26.267558 ], [ 88.6690806, 26.2668686 ], [ 88.6694089, 26.266803 ], [ 88.6694417, 26.2670328 ], [ 88.6717398, 26.2669671 ], [ 88.6716413, 26.2686743 ], [ 88.6721994, 26.2688056 ], [ 88.6717727, 26.2722528 ], [ 88.6674391, 26.2720229 ], [ 88.6674391, 26.2730078 ], [ 88.6667168, 26.2730407 ], [ 88.6667168, 26.2738614 ], [ 88.6677345, 26.2739599 ], [ 88.6677674, 26.274518 ], [ 88.6672093, 26.2745837 ], [ 88.6667168, 26.2757656 ], [ 88.6672749, 26.2758312 ], [ 88.6672421, 26.2781293 ], [ 88.6680957, 26.2781293 ], [ 88.6681285, 26.2795739 ], [ 88.6693761, 26.279541 ], [ 88.6696059, 26.279738 ], [ 88.6696059, 26.2803618 ], [ 88.6696059, 26.2809199 ], [ 88.6693104, 26.2812154 ], [ 88.6688179, 26.2816093 ], [ 88.6682927, 26.2819705 ], [ 88.6676361, 26.2826763 ], [ 88.6669795, 26.2833001 ], [ 88.6664213, 26.2838582 ], [ 88.6657976, 26.2848103 ], [ 88.6665527, 26.2848103 ], [ 88.6659946, 26.2867473 ], [ 88.6664213, 26.2866816 ], [ 88.6662244, 26.2892423 ], [ 88.6687195, 26.289111 ], [ 88.6687195, 26.2896035 ], [ 88.6696059, 26.2900631 ], [ 88.6692447, 26.2908182 ], [ 88.6683255, 26.2917703 ], [ 88.6690149, 26.2926238 ], [ 88.6689821, 26.2935103 ], [ 88.6681613, 26.2935103 ], [ 88.6681613, 26.2941669 ], [ 88.6691462, 26.2945936 ], [ 88.6690478, 26.2948235 ], [ 88.668424, 26.2959725 ], [ 88.6680957, 26.2965635 ], [ 88.66803, 26.2971872 ], [ 88.6683255, 26.2974827 ], [ 88.6689493, 26.2976797 ], [ 88.6694745, 26.2976797 ], [ 88.670164, 26.2975812 ], [ 88.6702953, 26.2979751 ], [ 88.6713787, 26.2980736 ], [ 88.6726591, 26.2982706 ], [ 88.6734142, 26.2983363 ], [ 88.6735783, 26.2986318 ], [ 88.6743662, 26.2983035 ], [ 88.6746289, 26.2979423 ], [ 88.6746945, 26.2972529 ], [ 88.6758764, 26.2970887 ], [ 88.6763689, 26.2969902 ], [ 88.6766315, 26.2966619 ], [ 88.6770911, 26.296465 ], [ 88.6776164, 26.2961367 ], [ 88.6780432, 26.296071 ], [ 88.6785685, 26.2959069 ], [ 88.6788968, 26.2956442 ], [ 88.6791594, 26.2952831 ], [ 88.6793284, 26.2949873 ], [ 88.6807315, 26.2956881 ], [ 88.6808933, 26.2952026 ], [ 88.6806775, 26.2943397 ], [ 88.6805697, 26.293207 ], [ 88.6804618, 26.2924522 ], [ 88.68086, 26.2924597 ], [ 88.6810617, 26.2924138 ], [ 88.6810823, 26.2924041 ], [ 88.6813853, 26.2923284 ], [ 88.6822717, 26.2922955 ], [ 88.6829612, 26.292197 ], [ 88.6843072, 26.2921314 ], [ 88.6844713, 26.2911137 ], [ 88.6850295, 26.291048 ], [ 88.6850295, 26.2904571 ], [ 88.6854234, 26.2904571 ], [ 88.6856532, 26.2902929 ], [ 88.6857189, 26.2900303 ], [ 88.6854891, 26.2895706 ], [ 88.6854891, 26.2888484 ], [ 88.686474, 26.2888812 ], [ 88.686474, 26.2883888 ], [ 88.6869664, 26.2883231 ], [ 88.6869664, 26.287568 ], [ 88.6842415, 26.2874039 ], [ 88.6841759, 26.2882574 ], [ 88.6834536, 26.2882574 ], [ 88.6834536, 26.2874695 ], [ 88.6815495, 26.2873054 ], [ 88.6814313, 26.2861071 ], [ 88.6814641, 26.2852863 ], [ 88.6820472, 26.2852835 ], [ 88.6821104, 26.2852886 ], [ 88.6821535, 26.2852863 ], [ 88.6824162, 26.283809 ], [ 88.6838279, 26.283809 ], [ 88.6839264, 26.2832508 ], [ 88.6841439, 26.2828853 ], [ 88.6847767, 26.2827434 ], [ 88.6854778, 26.2826895 ], [ 88.6862869, 26.2821501 ], [ 88.6874889, 26.2817728 ], [ 88.6877295, 26.2839302 ], [ 88.6899708, 26.2842775 ], [ 88.6911764, 26.2830718 ], [ 88.6906285, 26.2824141 ], [ 88.6913957, 26.2809891 ], [ 88.6928818, 26.2816599 ], [ 88.6956228, 26.2819454 ], [ 88.6965476, 26.2828526 ], [ 88.6955612, 26.283839 ], [ 88.6955612, 26.2844968 ], [ 88.6995072, 26.2851544 ], [ 88.7001912, 26.2844011 ], [ 88.7020758, 26.2848008 ], [ 88.7024668, 26.2860313 ], [ 88.7054263, 26.2865794 ], [ 88.7059742, 26.2877851 ], [ 88.7097852, 26.2873706 ], [ 88.7095076, 26.2883008 ], [ 88.7095915, 26.2885523 ], [ 88.7062446, 26.2889696 ], [ 88.7061877, 26.2895407 ], [ 88.7059591, 26.2904544 ], [ 88.7040745, 26.2915965 ], [ 88.7019185, 26.2915119 ], [ 88.7000202, 26.2929671 ], [ 88.6976215, 26.2929671 ], [ 88.6976788, 26.2923961 ], [ 88.6992206, 26.2917108 ], [ 88.698992, 26.2908542 ], [ 88.6957805, 26.290635 ], [ 88.6941382, 26.291311 ], [ 88.6913399, 26.2909684 ], [ 88.6917247, 26.2917311 ], [ 88.6931496, 26.2921696 ], [ 88.6931496, 26.2932657 ], [ 88.6921093, 26.2931914 ], [ 88.6921415, 26.2948268 ], [ 88.6906377, 26.2950206 ], [ 88.6893736, 26.2950206 ], [ 88.6878223, 26.294446 ], [ 88.687535, 26.2949057 ], [ 88.6855815, 26.2946758 ], [ 88.6853517, 26.2952504 ], [ 88.6844324, 26.2950206 ], [ 88.68426, 26.2957101 ], [ 88.6847771, 26.2959973 ], [ 88.6846622, 26.2968017 ], [ 88.6843749, 26.2972614 ], [ 88.6840877, 26.2975487 ], [ 88.6835705, 26.2974912 ], [ 88.6832258, 26.2974338 ], [ 88.6832833, 26.2980658 ], [ 88.682996, 26.2982956 ], [ 88.6824214, 26.2986978 ], [ 88.6840877, 26.300364 ], [ 88.6843749, 26.3006513 ], [ 88.6845473, 26.3012259 ], [ 88.6834556, 26.3015706 ], [ 88.6824214, 26.3019154 ], [ 88.6820767, 26.3019154 ], [ 88.6817894, 26.3022026 ], [ 88.6815021, 26.3020303 ], [ 88.6813297, 26.3015706 ], [ 88.6800657, 26.3015132 ], [ 88.6798359, 26.3022026 ], [ 88.6798359, 26.3026623 ], [ 88.6790889, 26.3026623 ], [ 88.6786293, 26.3034092 ], [ 88.6781696, 26.3040987 ], [ 88.6778824, 26.3047882 ], [ 88.6778824, 26.3057649 ], [ 88.6777675, 26.3066842 ], [ 88.678342, 26.306598 ], [ 88.6783995, 26.3070002 ], [ 88.6784569, 26.3076897 ], [ 88.6798359, 26.3079195 ], [ 88.680985, 26.3082068 ], [ 88.6824789, 26.3083792 ], [ 88.6827087, 26.3097581 ], [ 88.6826512, 26.3101029 ], [ 88.682364, 26.3110222 ], [ 88.6822491, 26.3123437 ], [ 88.6811574, 26.3122288 ], [ 88.6811574, 26.3117117 ], [ 88.6808126, 26.3115393 ], [ 88.680353, 26.3121139 ], [ 88.6798933, 26.3129182 ], [ 88.6794337, 26.3133204 ], [ 88.678974, 26.3137801 ], [ 88.6786293, 26.3144121 ], [ 88.6773653, 26.3144696 ], [ 88.6773653, 26.3140099 ], [ 88.6779973, 26.3140099 ], [ 88.6781696, 26.3134354 ], [ 88.6777675, 26.3132055 ], [ 88.6771354, 26.3128033 ], [ 88.6767332, 26.3122862 ], [ 88.6767907, 26.3115393 ], [ 88.6752394, 26.3113669 ], [ 88.6748372, 26.312631 ], [ 88.675699, 26.3127459 ], [ 88.675699, 26.3131481 ], [ 88.6744924, 26.313263 ], [ 88.6745499, 26.3142397 ], [ 88.6754692, 26.3141823 ], [ 88.6756416, 26.3160784 ], [ 88.6759863, 26.3160209 ], [ 88.6760438, 26.3173999 ], [ 88.6751876, 26.3174588 ], [ 88.6751876, 26.3176611 ], [ 88.674864, 26.317742 ], [ 88.6747426, 26.3180251 ], [ 88.6751471, 26.3180655 ], [ 88.6751471, 26.3201688 ], [ 88.6777761, 26.3201688 ], [ 88.677857, 26.3214226 ], [ 88.6789087, 26.3214631 ], [ 88.6794021, 26.3222316 ], [ 88.6806155, 26.3220293 ], [ 88.6820716, 26.3221102 ], [ 88.6835681, 26.3221102 ], [ 88.6847815, 26.3223529 ], [ 88.6870061, 26.3225956 ], [ 88.6887857, 26.322636 ], [ 88.6895542, 26.3227169 ], [ 88.6899182, 26.3236472 ], [ 88.6902823, 26.3244157 ], [ 88.6904845, 26.3251033 ], [ 88.6906867, 26.326802 ], [ 88.6908101, 26.3287762 ], [ 88.6922465, 26.3287188 ], [ 88.6922465, 26.328374 ], [ 88.6956938, 26.3283166 ], [ 88.6956938, 26.3275696 ], [ 88.6964982, 26.3275696 ], [ 88.6965557, 26.3268802 ], [ 88.6958662, 26.3267652 ], [ 88.6959237, 26.3263056 ], [ 88.6967281, 26.326363 ], [ 88.6967855, 26.3258459 ], [ 88.694832, 26.3257885 ], [ 88.693568, 26.3255587 ], [ 88.6924763, 26.3255587 ], [ 88.6917294, 26.3249266 ], [ 88.6910973, 26.3238924 ], [ 88.6904079, 26.3232604 ], [ 88.6903504, 26.3225709 ], [ 88.6906377, 26.3225135 ], [ 88.6913846, 26.3225709 ], [ 88.6919592, 26.3223411 ], [ 88.6923039, 26.3218814 ], [ 88.6926487, 26.3213643 ], [ 88.6925912, 26.3207898 ], [ 88.6919017, 26.3199279 ], [ 88.6912122, 26.3192385 ], [ 88.6910973, 26.3187213 ], [ 88.6914995, 26.3176871 ], [ 88.6922465, 26.3170551 ], [ 88.6923614, 26.3163082 ], [ 88.6924763, 26.3156187 ], [ 88.6926487, 26.3151016 ], [ 88.6930509, 26.3150441 ], [ 88.6931658, 26.3146994 ], [ 88.6933381, 26.3140674 ], [ 88.6942574, 26.3140674 ], [ 88.6950618, 26.3145845 ], [ 88.696096, 26.3145845 ], [ 88.6969004, 26.3141823 ], [ 88.6970728, 26.3134928 ], [ 88.6964982, 26.3125161 ], [ 88.6960386, 26.3117117 ], [ 88.696015, 26.3115109 ], [ 88.698992, 26.3123835 ], [ 88.699392, 26.3140967 ], [ 88.7015048, 26.3141538 ], [ 88.7051596, 26.3139825 ], [ 88.7066446, 26.3146678 ], [ 88.7080568, 26.3147497 ], [ 88.7082433, 26.3159813 ], [ 88.7115557, 26.3159813 ], [ 88.7121839, 26.3170663 ], [ 88.7161684, 26.3171612 ], [ 88.7174834, 26.3165035 ], [ 88.7183604, 26.314092 ], [ 88.7184702, 26.3117902 ], [ 88.7189224, 26.3116411 ], [ 88.7198107, 26.3130847 ], [ 88.719836, 26.3131259 ], [ 88.7215493, 26.3134114 ], [ 88.7220061, 26.3136398 ], [ 88.7240048, 26.3135828 ], [ 88.724462, 26.3139254 ], [ 88.7251471, 26.3139825 ], [ 88.7271293, 26.3163939 ], [ 88.7312948, 26.3168323 ], [ 88.7321714, 26.3177093 ], [ 88.7318287, 26.3212922 ], [ 88.7336561, 26.3215778 ], [ 88.7364464, 26.3224226 ], [ 88.7370242, 26.3223349 ], [ 88.7378869, 26.3222039 ], [ 88.7393436, 26.3216771 ], [ 88.7395154, 26.3217649 ], [ 88.7401642, 26.3217957 ], [ 88.7416942, 26.3213027 ], [ 88.741717, 26.3212953 ], [ 88.7418796, 26.3212429 ], [ 88.7427468, 26.3210994 ], [ 88.7466766, 26.3212351 ], [ 88.747533, 26.3214635 ], [ 88.747933, 26.3219204 ], [ 88.7485612, 26.3250613 ], [ 88.7500458, 26.331343 ], [ 88.7482184, 26.331286 ], [ 88.7466406, 26.3307531 ], [ 88.7441195, 26.3298762 ], [ 88.7409407, 26.3285609 ], [ 88.7385103, 26.3274598 ], [ 88.735198, 26.3272995 ], [ 88.734627, 26.3279738 ], [ 88.734627, 26.3290588 ], [ 88.7368849, 26.3329454 ], [ 88.738094, 26.333172 ], [ 88.739406, 26.3334934 ], [ 88.7401732, 26.3353568 ], [ 88.7435712, 26.3356856 ], [ 88.7446674, 26.3375491 ], [ 88.7431327, 26.3425912 ], [ 88.7436497, 26.3431643 ], [ 88.7451916, 26.3429929 ], [ 88.7457629, 26.3429929 ], [ 88.7459641, 26.3453366 ], [ 88.7460484, 26.3474473 ], [ 88.7438783, 26.3488749 ], [ 88.7398236, 26.3488178 ], [ 88.738339, 26.3491605 ], [ 88.7370826, 26.3491034 ], [ 88.7369684, 26.3507024 ], [ 88.7374253, 26.3509308 ], [ 88.7372596, 26.354641 ], [ 88.7370912, 26.3545308 ], [ 88.734228, 26.3532346 ], [ 88.7338274, 26.3516161 ], [ 88.7338274, 26.3511592 ], [ 88.7330851, 26.3511021 ], [ 88.733142, 26.3496744 ], [ 88.735198, 26.3491034 ], [ 88.7360548, 26.348932 ], [ 88.7359403, 26.3471617 ], [ 88.7317715, 26.3467048 ], [ 88.7295445, 26.3468191 ], [ 88.7294873, 26.3449916 ], [ 88.7296586, 26.3438495 ], [ 88.7296014, 26.3436211 ], [ 88.7265176, 26.3436782 ], [ 88.7261749, 26.340937 ], [ 88.7246903, 26.3408228 ], [ 88.7241193, 26.3425931 ], [ 88.7200074, 26.3432213 ], [ 88.7166382, 26.3431643 ], [ 88.7138971, 26.3431071 ], [ 88.7123082, 26.3422152 ], [ 88.7122584, 26.341643 ], [ 88.7117721, 26.3407617 ], [ 88.711681, 26.3400019 ], [ 88.7118025, 26.339394 ], [ 88.7121663, 26.3388991 ], [ 88.7122344, 26.3384054 ], [ 88.7120641, 26.3379118 ], [ 88.7115875, 26.337384 ], [ 88.7103788, 26.3372819 ], [ 88.7103958, 26.3367371 ], [ 88.7103788, 26.3360222 ], [ 88.7101745, 26.3352221 ], [ 88.7098027, 26.3345313 ], [ 88.7093404, 26.3337921 ], [ 88.7086254, 26.3333835 ], [ 88.7073146, 26.3330941 ], [ 88.7063442, 26.3329239 ], [ 88.705241, 26.3327653 ], [ 88.7046265, 26.332605 ], [ 88.7045145, 26.3328901 ], [ 88.7040121, 26.3333932 ], [ 88.7037582, 26.3340077 ], [ 88.7036781, 26.3342214 ], [ 88.7032359, 26.3343679 ], [ 88.7028098, 26.3345286 ], [ 88.7025026, 26.3348492 ], [ 88.7023263, 26.3351999 ], [ 88.7021136, 26.3358078 ], [ 88.7021744, 26.3362333 ], [ 88.7025391, 26.3366587 ], [ 88.7030557, 26.3368715 ], [ 88.7031469, 26.3372362 ], [ 88.7030557, 26.3377225 ], [ 88.7027214, 26.3380264 ], [ 88.70228, 26.3383899 ], [ 88.7015408, 26.3382957 ], [ 88.7015408, 26.3388434 ], [ 88.7024491, 26.3389235 ], [ 88.703077, 26.3389636 ], [ 88.7036332, 26.3396068 ], [ 88.7040587, 26.3403666 ], [ 88.7041194, 26.3408832 ], [ 88.7036692, 26.3415868 ], [ 88.7032068, 26.3415766 ], [ 88.7025046, 26.3415281 ], [ 88.701536, 26.3414676 ], [ 88.7005916, 26.3414676 ], [ 88.6999547, 26.3414313 ], [ 88.6988408, 26.341395 ], [ 88.6984776, 26.3414071 ], [ 88.6984292, 26.3419519 ], [ 88.6981798, 26.3420367 ], [ 88.698095, 26.342412 ], [ 88.6981444, 26.343117 ], [ 88.6978709, 26.3437857 ], [ 88.6974848, 26.3437277 ], [ 88.6973807, 26.3445187 ], [ 88.6969569, 26.3444824 ], [ 88.6956009, 26.3443008 ], [ 88.6950076, 26.3442947 ], [ 88.6950163, 26.3457867 ], [ 88.6942424, 26.3457597 ], [ 88.6940766, 26.3469675 ], [ 88.6943029, 26.3469463 ], [ 88.6946189, 26.3470376 ], [ 88.6952875, 26.3470376 ], [ 88.6957922, 26.347031 ], [ 88.696567, 26.3470431 ], [ 88.6966518, 26.3476364 ], [ 88.6965792, 26.3480844 ], [ 88.6970635, 26.3481086 ], [ 88.6971213, 26.3488857 ], [ 88.6973904, 26.3489258 ], [ 88.6973904, 26.3496765 ], [ 88.6977778, 26.3496886 ], [ 88.697572, 26.3510083 ], [ 88.697572, 26.3519164 ], [ 88.6977797, 26.3519155 ], [ 88.6978868, 26.3537023 ], [ 88.6978747, 26.3540776 ], [ 88.6977778, 26.3556153 ], [ 88.6976234, 26.3556531 ], [ 88.6975962, 26.356039 ], [ 88.6975962, 26.3564023 ], [ 88.6985164, 26.3564507 ], [ 88.6984679, 26.357274 ], [ 88.6972326, 26.3573253 ], [ 88.6963817, 26.3573253 ], [ 88.6950052, 26.3573224 ], [ 88.694981, 26.3569955 ], [ 88.6944676, 26.356935 ], [ 88.6944797, 26.3564144 ], [ 88.6938017, 26.356487 ], [ 88.6934869, 26.3573345 ], [ 88.6926999, 26.3572377 ], [ 88.6922787, 26.3583282 ], [ 88.6920582, 26.3589933 ], [ 88.6919977, 26.3594413 ], [ 88.6918039, 26.3594534 ], [ 88.6917797, 26.3600587 ], [ 88.6914407, 26.360083 ], [ 88.691477, 26.360652 ], [ 88.6914528, 26.3612211 ], [ 88.692603, 26.3612574 ], [ 88.6926624, 26.3616278 ], [ 88.6935111, 26.3617659 ], [ 88.6936464, 26.3615194 ], [ 88.6936564, 26.3607247 ], [ 88.6947097, 26.3607973 ], [ 88.6950488, 26.3608578 ], [ 88.6955088, 26.360991 ], [ 88.6956905, 26.3611363 ], [ 88.6956662, 26.3613906 ], [ 88.6955331, 26.3616327 ], [ 88.6952667, 26.3619838 ], [ 88.6949761, 26.3627163 ], [ 88.6948429, 26.3632249 ], [ 88.694855, 26.3636244 ], [ 88.6937679, 26.3636772 ], [ 88.6937775, 26.3637939 ], [ 88.6926434, 26.363586 ], [ 88.6913584, 26.3634549 ], [ 88.6904624, 26.3634065 ], [ 88.6904624, 26.3641208 ], [ 88.6902203, 26.3647988 ], [ 88.6896149, 26.3647383 ], [ 88.6894827, 26.364984 ], [ 88.6887229, 26.3654399 ], [ 88.6886317, 26.365835 ], [ 88.6884494, 26.3667924 ], [ 88.6882395, 26.3680437 ], [ 88.6881305, 26.3686611 ], [ 88.6879935, 26.3696492 ], [ 88.6879935, 26.370223 ], [ 88.6878278, 26.3701867 ], [ 88.6876704, 26.3707073 ], [ 88.6876704, 26.3712522 ], [ 88.6875251, 26.3717001 ], [ 88.6874404, 26.3717365 ], [ 88.6873072, 26.3721966 ], [ 88.6871861, 26.3722208 ], [ 88.6870045, 26.3727898 ], [ 88.6867745, 26.3738311 ], [ 88.6861396, 26.3740864 ], [ 88.6856229, 26.3745119 ], [ 88.6855621, 26.3751198 ], [ 88.6856837, 26.3757732 ], [ 88.6857445, 26.3765026 ], [ 88.6860484, 26.3772016 ], [ 88.6862307, 26.3779918 ], [ 88.6862307, 26.3788124 ], [ 88.685152, 26.3785772 ], [ 88.6849462, 26.3785893 ], [ 88.6840195, 26.3784155 ], [ 88.6840382, 26.3782503 ], [ 88.6838081, 26.3781414 ], [ 88.6829243, 26.378214 ], [ 88.6822583, 26.3780808 ], [ 88.6818588, 26.3780687 ], [ 88.6815077, 26.3780808 ], [ 88.6812776, 26.3780082 ], [ 88.6811929, 26.3787952 ], [ 88.6810355, 26.37934 ], [ 88.6809531, 26.3797918 ], [ 88.6810113, 26.3800301 ], [ 88.6810234, 26.380236 ], [ 88.6826337, 26.3805265 ], [ 88.6821978, 26.3813741 ], [ 88.6820162, 26.382149 ], [ 88.6819557, 26.3828996 ], [ 88.6827184, 26.383057 ], [ 88.6835873, 26.3831001 ], [ 88.6835417, 26.3832507 ], [ 88.6844135, 26.3834445 ], [ 88.6847108, 26.383372 ], [ 88.6849946, 26.3834202 ], [ 88.6858543, 26.3835655 ], [ 88.6870345, 26.3836784 ], [ 88.687174, 26.3833839 ], [ 88.6873798, 26.3833476 ], [ 88.6880036, 26.3834402 ], [ 88.6891583, 26.3836938 ], [ 88.6900556, 26.3838561 ], [ 88.6905399, 26.3838198 ], [ 88.6908668, 26.3840498 ], [ 88.6910032, 26.3845376 ], [ 88.6913148, 26.3847158 ], [ 88.6925013, 26.3848247 ], [ 88.6932324, 26.3849737 ], [ 88.6940081, 26.385084 ], [ 88.6947654, 26.3852848 ], [ 88.6962305, 26.3854059 ], [ 88.6981991, 26.3855898 ], [ 88.6994756, 26.3856202 ], [ 88.7008798, 26.3857207 ], [ 88.7017999, 26.3858418 ], [ 88.701755, 26.3874133 ], [ 88.7018157, 26.3883859 ], [ 88.7017246, 26.3888417 ], [ 88.7012325, 26.3895187 ], [ 88.7006305, 26.3897839 ], [ 88.6999309, 26.3900829 ], [ 88.6990846, 26.3904355 ], [ 88.6986246, 26.3906045 ], [ 88.6977749, 26.3901333 ], [ 88.6977043, 26.3897857 ], [ 88.6969689, 26.3897152 ], [ 88.6969689, 26.3889193 ], [ 88.6958808, 26.3888286 ], [ 88.6948632, 26.3887077 ], [ 88.6940774, 26.3886976 ], [ 88.6940573, 26.3879118 ], [ 88.6932674, 26.3878388 ], [ 88.6932775, 26.387529 ], [ 88.6927536, 26.387529 ], [ 88.692534, 26.3874133 ], [ 88.6917965, 26.3873879 ], [ 88.6910107, 26.3872972 ], [ 88.6910144, 26.3874741 ], [ 88.6901644, 26.3874786 ], [ 88.6894037, 26.3872917 ], [ 88.6881272, 26.3871094 ], [ 88.6873031, 26.387136 ], [ 88.6872154, 26.3875349 ], [ 88.6870027, 26.3880515 ], [ 88.6869115, 26.3885682 ], [ 88.6870331, 26.3890241 ], [ 88.6874282, 26.3895407 ], [ 88.6879076, 26.3901837 ], [ 88.6877968, 26.3907176 ], [ 88.6875498, 26.3915466 ], [ 88.6873066, 26.3917594 ], [ 88.6868811, 26.3913035 ], [ 88.6865468, 26.3908476 ], [ 88.6859027, 26.3903449 ], [ 88.6852076, 26.3903046 ], [ 88.6849859, 26.390627 ], [ 88.6850934, 26.3909177 ], [ 88.6856106, 26.3911206 ], [ 88.6856811, 26.3912919 ], [ 88.6857315, 26.3915135 ], [ 88.6858966, 26.3917374 ], [ 88.6860539, 26.3918158 ], [ 88.6864971, 26.3920374 ], [ 88.6871117, 26.3923397 ], [ 88.6869606, 26.3927527 ], [ 88.6873434, 26.3929039 ], [ 88.6872125, 26.3931759 ], [ 88.6877263, 26.3932464 ], [ 88.687686, 26.3936192 ], [ 88.6881897, 26.3937703 ], [ 88.6881273, 26.3939121 ], [ 88.6880575, 26.3945702 ], [ 88.6882488, 26.3947378 ], [ 88.688925, 26.3948244 ], [ 88.6896428, 26.394954 ], [ 88.6891383, 26.3957616 ], [ 88.6889888, 26.3961804 ], [ 88.6884902, 26.3961704 ], [ 88.6885002, 26.3960907 ], [ 88.6875929, 26.395971 ], [ 88.6867653, 26.3958215 ], [ 88.6859925, 26.3956894 ], [ 88.6857566, 26.3954064 ], [ 88.6856958, 26.3948289 ], [ 88.6853196, 26.3945751 ], [ 88.6848449, 26.3944946 ], [ 88.6840547, 26.3945858 ], [ 88.6832645, 26.394525 ], [ 88.6818665, 26.3944035 ], [ 88.6805596, 26.3945858 ], [ 88.6799822, 26.3946162 ], [ 88.679271, 26.3941603 ], [ 88.6786631, 26.3938868 ], [ 88.6780739, 26.3935922 ], [ 88.678061, 26.3939968 ], [ 88.6781308, 26.3947746 ], [ 88.678071, 26.3957018 ], [ 88.6771238, 26.3956719 ], [ 88.6766651, 26.3956221 ], [ 88.6763261, 26.3955921 ], [ 88.676366, 26.3948942 ], [ 88.6756543, 26.395224 ], [ 88.6748034, 26.3954368 ], [ 88.674074, 26.3956191 ], [ 88.6734745, 26.395991 ], [ 88.6731014, 26.3960446 ], [ 88.6726968, 26.3958414 ], [ 88.6722282, 26.3958015 ], [ 88.6719161, 26.3964549 ], [ 88.6716122, 26.3969412 ], [ 88.6711813, 26.3974766 ], [ 88.6707916, 26.3973971 ], [ 88.669566, 26.3971974 ], [ 88.6700347, 26.3979153 ], [ 88.6703537, 26.3983241 ], [ 88.6705132, 26.3985036 ], [ 88.6713607, 26.3983241 ], [ 88.6716499, 26.3982543 ], [ 88.6716997, 26.3981646 ], [ 88.6729361, 26.3982643 ], [ 88.6736739, 26.3984338 ], [ 88.6749553, 26.3987951 ], [ 88.6759583, 26.3990078 ], [ 88.6765975, 26.3990698 ], [ 88.6756057, 26.4012265 ], [ 88.6776724, 26.4018951 ], [ 88.6786753, 26.4021686 ], [ 88.6787057, 26.400801 ], [ 88.6789184, 26.4006186 ], [ 88.679891, 26.4006186 ], [ 88.6805369, 26.4005533 ], [ 88.6809775, 26.4005337 ], [ 88.6811146, 26.4014736 ], [ 88.681289, 26.4023352 ], [ 88.6818293, 26.4021492 ], [ 88.6821426, 26.4021002 ], [ 88.6826027, 26.4019729 ], [ 88.6829552, 26.4018848 ], [ 88.6840713, 26.4014638 ], [ 88.6848644, 26.4013757 ], [ 88.685677, 26.4013267 ], [ 88.6862644, 26.4012974 ], [ 88.6866854, 26.4012191 ], [ 88.6866076, 26.402199 ], [ 88.6865468, 26.4027764 ], [ 88.6865468, 26.4032627 ], [ 88.6864695, 26.4040937 ], [ 88.6860302, 26.4041745 ], [ 88.6858017, 26.4042225 ], [ 88.6853916, 26.4043514 ], [ 88.6853799, 26.4049606 ], [ 88.6853682, 26.4053472 ], [ 88.6858174, 26.4058004 ], [ 88.6863055, 26.4062845 ], [ 88.6858134, 26.4063314 ], [ 88.6854854, 26.4063197 ], [ 88.6850576, 26.4059524 ], [ 88.6843282, 26.4058612 ], [ 88.6837812, 26.4059828 ], [ 88.6833557, 26.4064691 ], [ 88.6832949, 26.4072896 ], [ 88.6834165, 26.4083534 ], [ 88.6834187, 26.4083653 ], [ 88.6835988, 26.4093259 ], [ 88.6841505, 26.4093993 ], [ 88.6841909, 26.4096514 ], [ 88.6843691, 26.4100214 ], [ 88.6844055, 26.4105322 ], [ 88.6850989, 26.4109147 ], [ 88.6856047, 26.4117877 ], [ 88.6860282, 26.4121705 ], [ 88.6859193, 26.413016 ], [ 88.6856598, 26.4129825 ], [ 88.6855761, 26.413217 ], [ 88.685191, 26.4132086 ], [ 88.6849398, 26.4131584 ], [ 88.684538, 26.4130914 ], [ 88.6845713, 26.4126994 ], [ 88.6846321, 26.4120004 ], [ 88.6842538, 26.4108699 ], [ 88.6837098, 26.4108031 ], [ 88.6834235, 26.4110321 ], [ 88.6833853, 26.4114139 ], [ 88.6833262, 26.4120819 ], [ 88.6832498, 26.4127786 ], [ 88.683288, 26.4131842 ], [ 88.6833262, 26.4137568 ], [ 88.6830112, 26.413795 ], [ 88.6827536, 26.4137282 ], [ 88.6824004, 26.4137473 ], [ 88.682318, 26.4136658 ], [ 88.6820092, 26.4136232 ], [ 88.6804822, 26.4137854 ], [ 88.6804249, 26.4135755 ], [ 88.6801673, 26.4130697 ], [ 88.6799668, 26.4126736 ], [ 88.6810739, 26.4125495 ], [ 88.6810262, 26.4119865 ], [ 88.6810548, 26.4119006 ], [ 88.6810644, 26.4112516 ], [ 88.6811371, 26.4104504 ], [ 88.6813411, 26.4101923 ], [ 88.6814175, 26.4093238 ], [ 88.681532, 26.4085413 ], [ 88.6809607, 26.4085957 ], [ 88.6807303, 26.4086176 ], [ 88.6801577, 26.4086844 ], [ 88.6802818, 26.4099251 ], [ 88.68032, 26.4101159 ], [ 88.6802627, 26.4102877 ], [ 88.6802054, 26.4103736 ], [ 88.680215, 26.4113757 ], [ 88.6800814, 26.4115856 ], [ 88.6797569, 26.4117002 ], [ 88.6795565, 26.411767 ], [ 88.6792947, 26.4113475 ], [ 88.6790984, 26.4106504 ], [ 88.6788514, 26.4102594 ], [ 88.6783063, 26.4086844 ], [ 88.6780104, 26.4080927 ], [ 88.6763021, 26.4080068 ], [ 88.6761494, 26.408045 ], [ 88.6751951, 26.4081213 ], [ 88.6740212, 26.4082645 ], [ 88.6733246, 26.4084267 ], [ 88.67321, 26.4076442 ], [ 88.6718793, 26.4075995 ], [ 88.6708337, 26.4076155 ], [ 88.670032, 26.4075965 ], [ 88.6693544, 26.4073483 ], [ 88.6685528, 26.4072433 ], [ 88.6679325, 26.4073006 ], [ 88.6677686, 26.4072368 ], [ 88.6676175, 26.4077492 ], [ 88.6675984, 26.4080164 ], [ 88.6676271, 26.4085222 ], [ 88.6674648, 26.4085126 ], [ 88.6674648, 26.4088371 ], [ 88.6674457, 26.4092284 ], [ 88.6674553, 26.4094288 ], [ 88.6676271, 26.4094384 ], [ 88.6676019, 26.4096297 ], [ 88.6667111, 26.4096901 ], [ 88.6656995, 26.4098863 ], [ 88.6648842, 26.4099769 ], [ 88.6647936, 26.4102034 ], [ 88.6643027, 26.4102997 ], [ 88.6637367, 26.4103846 ], [ 88.6629325, 26.4106221 ], [ 88.6620608, 26.4111697 ], [ 88.66194, 26.4116377 ], [ 88.6618041, 26.4127581 ], [ 88.661119, 26.4137253 ], [ 88.6602822, 26.4153045 ], [ 88.6595454, 26.4163785 ], [ 88.6592139, 26.4163955 ], [ 88.6571077, 26.416455 ], [ 88.6571077, 26.4165994 ], [ 88.6563434, 26.4165909 ], [ 88.6562499, 26.4168541 ], [ 88.6552393, 26.4168117 ], [ 88.6551714, 26.4162342 ], [ 88.6543306, 26.4162002 ], [ 88.6543221, 26.4156821 ], [ 88.6536378, 26.4156419 ], [ 88.652518, 26.4156017 ], [ 88.6513177, 26.4156017 ], [ 88.6508886, 26.4155883 ], [ 88.6504594, 26.4155816 ], [ 88.6503115, 26.4175036 ], [ 88.6484848, 26.4175227 ], [ 88.6485434, 26.4170987 ], [ 88.6480506, 26.4170886 ], [ 88.6480355, 26.4169679 ], [ 88.6477477, 26.4169385 ], [ 88.6477589, 26.4168623 ], [ 88.6471737, 26.4168798 ], [ 88.6471681, 26.4169819 ], [ 88.6467965, 26.4170294 ], [ 88.6467106, 26.4170724 ], [ 88.6468204, 26.4172108 ], [ 88.6469252, 26.4174205 ], [ 88.646965, 26.4174842 ], [ 88.6470049, 26.4176197 ], [ 88.6470049, 26.4177631 ], [ 88.6470049, 26.4179384 ], [ 88.646965, 26.4180977 ], [ 88.6469093, 26.4182013 ], [ 88.6468216, 26.4182889 ], [ 88.6467021, 26.4183447 ], [ 88.6465906, 26.4183845 ], [ 88.6464551, 26.4184164 ], [ 88.6462719, 26.4184562 ], [ 88.6460648, 26.418512 ], [ 88.6458576, 26.4185837 ], [ 88.6456584, 26.4186315 ], [ 88.6453637, 26.4186873 ], [ 88.6451486, 26.418743 ], [ 88.6449574, 26.4187669 ], [ 88.6447661, 26.4187749 ], [ 88.6446307, 26.4188147 ], [ 88.644551, 26.4188705 ], [ 88.6444395, 26.41899 ], [ 88.6443912, 26.4191919 ], [ 88.6450182, 26.4198607 ], [ 88.6461995, 26.4200122 ], [ 88.6477188, 26.4201032 ], [ 88.6484964, 26.4202035 ], [ 88.6493659, 26.4203206 ], [ 88.6510799, 26.4204962 ], [ 88.651033, 26.4216737 ], [ 88.6510722, 26.4223139 ], [ 88.6510918, 26.4232285 ], [ 88.6510853, 26.4245318 ], [ 88.6512944, 26.4245645 ], [ 88.6517059, 26.4246233 ], [ 88.6516667, 26.4251361 ], [ 88.6516079, 26.4255673 ], [ 88.6514446, 26.4257894 ], [ 88.6512356, 26.4261291 ], [ 88.6510396, 26.4265244 ], [ 88.6507783, 26.4267073 ], [ 88.6506019, 26.4270927 ], [ 88.6504843, 26.4272757 ], [ 88.6503471, 26.4272822 ], [ 88.6498702, 26.4287064 ], [ 88.6498506, 26.4292225 ], [ 88.6497787, 26.4295034 ], [ 88.6483676, 26.4293139 ], [ 88.6478816, 26.4292195 ], [ 88.6474517, 26.4291458 ], [ 88.6468866, 26.4290107 ], [ 88.646247, 26.4289353 ], [ 88.6452283, 26.4288756 ], [ 88.6443439, 26.428851 ], [ 88.6435209, 26.428851 ], [ 88.6429927, 26.4288387 ], [ 88.6429435, 26.4300917 ], [ 88.6420837, 26.4300057 ], [ 88.64115, 26.429808 ], [ 88.6397336, 26.4296573 ], [ 88.6383573, 26.4295569 ], [ 88.6382037, 26.4295481 ], [ 88.638126, 26.4296549 ], [ 88.6378833, 26.429718 ], [ 88.637529, 26.4296549 ], [ 88.6372669, 26.4295869 ], [ 88.6370339, 26.4297423 ], [ 88.6368835, 26.4298588 ], [ 88.6367098, 26.4300391 ], [ 88.6362693, 26.4300472 ], [ 88.6359066, 26.4300472 ], [ 88.6356648, 26.4301439 ], [ 88.6351167, 26.4320597 ], [ 88.6336659, 26.4319076 ], [ 88.6326412, 26.4317268 ], [ 88.6315663, 26.4315158 ], [ 88.6309937, 26.4314656 ], [ 88.6301187, 26.4315389 ], [ 88.6300278, 26.4317196 ], [ 88.6299095, 26.4326565 ], [ 88.6297813, 26.433899 ], [ 88.6296531, 26.4348062 ], [ 88.628805, 26.4347569 ], [ 88.6279175, 26.4345893 ], [ 88.6279767, 26.4342047 ], [ 88.6280161, 26.4337116 ], [ 88.626961, 26.4336919 ], [ 88.6260735, 26.4336327 ], [ 88.6257678, 26.433682 ], [ 88.6257481, 26.4342737 ], [ 88.6255706, 26.4351514 ], [ 88.623766, 26.4350626 ], [ 88.623153, 26.4383131 ], [ 88.6251071, 26.4388 ], [ 88.6249296, 26.4405454 ], [ 88.6256396, 26.4403384 ], [ 88.6264646, 26.440146 ], [ 88.6264778, 26.440289 ], [ 88.626718, 26.4404247 ], [ 88.6272168, 26.4403552 ], [ 88.6279175, 26.4403285 ], [ 88.6283243, 26.4404544 ], [ 88.628308, 26.4407956 ], [ 88.6278205, 26.4431765 ], [ 88.6272842, 26.4475644 ], [ 88.6269917, 26.4492952 ], [ 88.6267479, 26.4510992 ], [ 88.625659, 26.4510911 ], [ 88.6254477, 26.4526512 ], [ 88.625236, 26.4539804 ], [ 88.6252043, 26.4542178 ], [ 88.6249986, 26.4555315 ], [ 88.6248878, 26.4562041 ], [ 88.6248007, 26.4570905 ], [ 88.6246741, 26.4580876 ], [ 88.6245792, 26.4587682 ], [ 88.6243813, 26.4601175 ], [ 88.6242927, 26.4607664 ], [ 88.6242215, 26.4615737 ], [ 88.624079, 26.4625866 ], [ 88.6239935, 26.4632435 ], [ 88.6238353, 26.4642643 ], [ 88.623764, 26.4647629 ], [ 88.6236295, 26.4658194 ], [ 88.6235504, 26.4663971 ], [ 88.6234317, 26.4672518 ], [ 88.6232655, 26.4684745 ], [ 88.6231499, 26.4693015 ], [ 88.6229758, 26.4705598 ], [ 88.6228888, 26.4710188 ], [ 88.6224377, 26.4710188 ], [ 88.62164, 26.4710132 ], [ 88.6212474, 26.4710132 ], [ 88.6203215, 26.4710425 ], [ 88.6189604, 26.471003 ], [ 88.6177337, 26.4710188 ], [ 88.6163963, 26.4710109 ], [ 88.6148214, 26.4710346 ], [ 88.6131769, 26.4710109 ], [ 88.6119424, 26.4710188 ], [ 88.6104799, 26.470995 ], [ 88.6091267, 26.470995 ], [ 88.6080203, 26.4709792 ], [ 88.6070469, 26.4709476 ], [ 88.6059311, 26.4709555 ], [ 88.604228, 26.4709001 ], [ 88.60331, 26.4708368 ], [ 88.6034858, 26.4706564 ], [ 88.6036834, 26.4704537 ], [ 88.6036754, 26.4703015 ], [ 88.6036273, 26.4702133 ], [ 88.6035072, 26.4701492 ], [ 88.6034298, 26.4701281 ], [ 88.6033309, 26.4701012 ], [ 88.6030746, 26.4700691 ], [ 88.6027701, 26.4700852 ], [ 88.6025378, 26.4701252 ], [ 88.6022912, 26.470203 ], [ 88.6021821, 26.4702374 ], [ 88.6019338, 26.4702934 ], [ 88.6016934, 26.4704136 ], [ 88.6015172, 26.4705258 ], [ 88.6013409, 26.470662 ], [ 88.6011326, 26.4707501 ], [ 88.6008683, 26.4709664 ], [ 88.6005639, 26.4712147 ], [ 88.6003636, 26.4713669 ], [ 88.6000992, 26.471391 ], [ 88.5998268, 26.4713029 ], [ 88.5995673, 26.4711907 ], [ 88.5992949, 26.4710705 ], [ 88.5990546, 26.4709744 ], [ 88.5987982, 26.4709183 ], [ 88.5985899, 26.4709183 ], [ 88.5984056, 26.4709343 ], [ 88.5980932, 26.4709824 ], [ 88.5978849, 26.4710465 ], [ 88.5976927, 26.4711026 ], [ 88.5974363, 26.4711506 ], [ 88.5971639, 26.4711987 ], [ 88.5969524, 26.4711987 ], [ 88.5967281, 26.4711907 ], [ 88.5965679, 26.4711667 ], [ 88.5963356, 26.4711506 ], [ 88.5961113, 26.4711106 ], [ 88.5958229, 26.4710946 ], [ 88.5955345, 26.4710625 ], [ 88.5952621, 26.4710225 ], [ 88.5950458, 26.4709904 ], [ 88.5947013, 26.4709584 ], [ 88.594509, 26.4709183 ], [ 88.5943408, 26.4708622 ], [ 88.594171, 26.4707261 ], [ 88.5940348, 26.4706379 ], [ 88.5939947, 26.4705178 ], [ 88.5939867, 26.4703575 ], [ 88.5940027, 26.4701973 ], [ 88.5940908, 26.4700451 ], [ 88.594179, 26.4699329 ], [ 88.5943632, 26.4697567 ], [ 88.5945074, 26.4696606 ], [ 88.5946596, 26.4696285 ], [ 88.5948359, 26.4695885 ], [ 88.5950842, 26.4695805 ], [ 88.5952765, 26.4695805 ], [ 88.5955889, 26.4695724 ], [ 88.5958693, 26.4695484 ], [ 88.5959464, 26.4695346 ], [ 88.5960936, 26.4695084 ], [ 88.5962058, 26.4694282 ], [ 88.5962458, 26.4693401 ], [ 88.5962138, 26.4691398 ], [ 88.5961934, 26.4690889 ], [ 88.5961497, 26.4689796 ], [ 88.5960456, 26.4688424 ], [ 88.5959154, 26.4687122 ], [ 88.5957051, 26.468532 ], [ 88.5955048, 26.4683217 ], [ 88.5953045, 26.4681515 ], [ 88.5951043, 26.4679011 ], [ 88.5949941, 26.4677209 ], [ 88.5949941, 26.4675606 ], [ 88.5950942, 26.4674605 ], [ 88.5952244, 26.4672903 ], [ 88.5953846, 26.4670499 ], [ 88.5955449, 26.4668096 ], [ 88.5956851, 26.4665092 ], [ 88.5958152, 26.4662588 ], [ 88.5958052, 26.4660986 ], [ 88.5957451, 26.4658783 ], [ 88.595665, 26.465698 ], [ 88.5955549, 26.4655378 ], [ 88.5954247, 26.4653275 ], [ 88.5952845, 26.4651373 ], [ 88.5951643, 26.4648769 ], [ 88.5951343, 26.4646366 ], [ 88.5951243, 26.4644463 ], [ 88.5951443, 26.4641859 ], [ 88.5952044, 26.4639156 ], [ 88.5952945, 26.4636552 ], [ 88.5954247, 26.4633648 ], [ 88.5954748, 26.4631595 ], [ 88.5954948, 26.4628791 ], [ 88.5954547, 26.4624285 ], [ 88.5953974, 26.4621174 ], [ 88.5953846, 26.462048 ], [ 88.5953145, 26.4617375 ], [ 88.5951944, 26.4612969 ], [ 88.5950454, 26.4609245 ], [ 88.5950141, 26.4608463 ], [ 88.594904, 26.4604658 ], [ 88.5948639, 26.4601653 ], [ 88.5948539, 26.4597448 ], [ 88.5948639, 26.4593843 ], [ 88.594894, 26.4590438 ], [ 88.5949641, 26.4588034 ], [ 88.5950442, 26.4585631 ], [ 88.5951143, 26.4582226 ], [ 88.5951083, 26.4580597 ], [ 88.5951043, 26.4579523 ], [ 88.5950742, 26.4575817 ], [ 88.5950542, 26.4571762 ], [ 88.5951043, 26.4568958 ], [ 88.5950942, 26.4565153 ], [ 88.5949841, 26.4562549 ], [ 88.5948138, 26.4559845 ], [ 88.5947137, 26.4556941 ], [ 88.5947137, 26.4552936 ], [ 88.5947299, 26.4551577 ], [ 88.5947638, 26.454873 ], [ 88.5948339, 26.4545125 ], [ 88.594934, 26.454172 ], [ 88.5949941, 26.4538816 ], [ 88.5949841, 26.4533809 ], [ 88.594934, 26.4529903 ], [ 88.5948839, 26.4525297 ], [ 88.5947734, 26.4522242 ], [ 88.5942572, 26.452278 ], [ 88.5934419, 26.4522618 ], [ 88.5926679, 26.4522542 ], [ 88.5926314, 26.4516687 ], [ 88.5925911, 26.4510239 ], [ 88.5925508, 26.4502179 ], [ 88.5922316, 26.4498788 ], [ 88.5919059, 26.4495328 ], [ 88.5908178, 26.4495328 ], [ 88.5900414, 26.4494858 ], [ 88.5898985, 26.4500576 ], [ 88.5898759, 26.4503209 ], [ 88.5896653, 26.4503133 ], [ 88.5891838, 26.4502532 ], [ 88.5886271, 26.4502983 ], [ 88.5885368, 26.4503961 ], [ 88.5885669, 26.4505165 ], [ 88.5886346, 26.4506745 ], [ 88.5885744, 26.450855 ], [ 88.5880284, 26.4508491 ], [ 88.5879181, 26.4507802 ], [ 88.58612, 26.4506562 ], [ 88.586058, 26.4503392 ], [ 88.5858031, 26.4503255 ], [ 88.5850452, 26.4503186 ], [ 88.584308, 26.450353 ], [ 88.5842391, 26.4508422 ], [ 88.5843995, 26.4508753 ], [ 88.5846318, 26.450918 ], [ 88.5846732, 26.4509869 ], [ 88.5847076, 26.4517309 ], [ 88.5849212, 26.4517378 ], [ 88.5849074, 26.4518825 ], [ 88.5850245, 26.4518894 ], [ 88.5850452, 26.4524199 ], [ 88.5850177, 26.4529435 ], [ 88.584997, 26.4534119 ], [ 88.584749, 26.4534808 ], [ 88.5847076, 26.453722 ], [ 88.5845009, 26.4541285 ], [ 88.5834174, 26.4542084 ], [ 88.5833642, 26.4544936 ], [ 88.5826063, 26.4557061 ], [ 88.5823239, 26.4556717 ], [ 88.5821723, 26.4557888 ], [ 88.5819105, 26.4557957 ], [ 88.5817823, 26.4557539 ], [ 88.5817314, 26.4556235 ], [ 88.5815385, 26.4555683 ], [ 88.5812498, 26.455586 ], [ 88.5808837, 26.4556085 ], [ 88.5804549, 26.4555896 ], [ 88.5793297, 26.4563193 ], [ 88.5787717, 26.4567327 ], [ 88.5777451, 26.456712 ], [ 88.5770355, 26.4567809 ], [ 88.5761743, 26.456898 ], [ 88.5741902, 26.4569669 ], [ 88.5735288, 26.4570082 ], [ 88.5727847, 26.4568911 ], [ 88.5710183, 26.4567809 ], [ 88.5691842, 26.4571295 ], [ 88.5684416, 26.4572356 ], [ 88.568315, 26.4572047 ], [ 88.5682211, 26.4571047 ], [ 88.5678767, 26.4570978 ], [ 88.5668064, 26.457331 ], [ 88.5659821, 26.4573872 ], [ 88.564959, 26.4573939 ], [ 88.564928, 26.4575939 ], [ 88.5637499, 26.4576696 ], [ 88.5624942, 26.457734 ], [ 88.5612046, 26.4576131 ], [ 88.5598929, 26.4575762 ], [ 88.5597964, 26.4576253 ], [ 88.5595759, 26.4577421 ], [ 88.5592063, 26.4578782 ], [ 88.5588238, 26.4580468 ], [ 88.558519, 26.458157 ], [ 88.5582532, 26.458264 ], [ 88.5581056, 26.4584029 ], [ 88.5580327, 26.4584715 ], [ 88.5578382, 26.4587049 ], [ 88.5577669, 26.4589643 ], [ 88.557702, 26.4591847 ], [ 88.5576956, 26.4593015 ], [ 88.5577604, 26.4594441 ], [ 88.5579225, 26.4595738 ], [ 88.5581819, 26.4595673 ], [ 88.5582467, 26.4595543 ], [ 88.5584866, 26.4595154 ], [ 88.5587654, 26.45947 ], [ 88.5588458, 26.4594247 ], [ 88.5591246, 26.4593015 ], [ 88.5593451, 26.4591653 ], [ 88.5595007, 26.4590032 ], [ 88.5597017, 26.4588605 ], [ 88.5600972, 26.4587309 ], [ 88.5604733, 26.4586401 ], [ 88.5608688, 26.4585558 ], [ 88.5611801, 26.4585234 ], [ 88.5614135, 26.4585299 ], [ 88.5616339, 26.4585623 ], [ 88.5617805, 26.458666 ], [ 88.5619815, 26.4587763 ], [ 88.562189, 26.4589708 ], [ 88.5624289, 26.459068 ], [ 88.5626234, 26.4591134 ], [ 88.5630384, 26.4592301 ], [ 88.5633172, 26.4593079 ], [ 88.5635571, 26.4594571 ], [ 88.5636803, 26.4596581 ], [ 88.5637386, 26.459872 ], [ 88.5637646, 26.4600082 ], [ 88.5636764, 26.4601995 ], [ 88.5635921, 26.4603162 ], [ 88.56343, 26.4605237 ], [ 88.5631836, 26.4607182 ], [ 88.5630215, 26.4607895 ], [ 88.562827, 26.4608609 ], [ 88.5625482, 26.4609257 ], [ 88.5622499, 26.4609451 ], [ 88.5619192, 26.4610294 ], [ 88.5617506, 26.4610294 ], [ 88.5615302, 26.4610035 ], [ 88.5612968, 26.460984 ], [ 88.561136, 26.4609387 ], [ 88.5608377, 26.4609322 ], [ 88.5606043, 26.4609322 ], [ 88.5603384, 26.4609646 ], [ 88.5600531, 26.4610943 ], [ 88.5598781, 26.4612434 ], [ 88.5596511, 26.4614898 ], [ 88.5595279, 26.4617556 ], [ 88.5594761, 26.4619372 ], [ 88.5594696, 26.4621382 ], [ 88.5594696, 26.4623392 ], [ 88.5594501, 26.4625856 ], [ 88.5594436, 26.4628385 ], [ 88.5594177, 26.4630395 ], [ 88.5593788, 26.4632664 ], [ 88.5593075, 26.4635582 ], [ 88.5592621, 26.4639018 ], [ 88.5592556, 26.4640348 ], [ 88.5593204, 26.4642812 ], [ 88.5593464, 26.4644108 ], [ 88.5594436, 26.4645275 ], [ 88.5596057, 26.4645665 ], [ 88.5597938, 26.4645275 ], [ 88.5599883, 26.4644692 ], [ 88.5601245, 26.4644044 ], [ 88.5604098, 26.4644044 ], [ 88.5605317, 26.4644173 ], [ 88.5607327, 26.4645211 ], [ 88.5609466, 26.4646248 ], [ 88.5611412, 26.464761 ], [ 88.5614005, 26.4648907 ], [ 88.5617636, 26.4650787 ], [ 88.5620684, 26.4652797 ], [ 88.5624185, 26.4654937 ], [ 88.5625611, 26.4656104 ], [ 88.5627816, 26.4658438 ], [ 88.5628983, 26.4662199 ], [ 88.5628789, 26.4666348 ], [ 88.5627946, 26.4669979 ], [ 88.5626649, 26.4673286 ], [ 88.5624833, 26.4675167 ], [ 88.5623277, 26.467575 ], [ 88.5621267, 26.4675815 ], [ 88.5617895, 26.4675426 ], [ 88.5615665, 26.4674972 ], [ 88.561346, 26.4675037 ], [ 88.56097, 26.4674778 ], [ 88.5607819, 26.4674518 ], [ 88.5605355, 26.4673416 ], [ 88.560354, 26.4672443 ], [ 88.5601595, 26.4671276 ], [ 88.5599714, 26.4669785 ], [ 88.5598223, 26.4668488 ], [ 88.5595565, 26.4666802 ], [ 88.5593425, 26.4665635 ], [ 88.5591687, 26.4664727 ], [ 88.5589612, 26.4664014 ], [ 88.5587019, 26.4664014 ], [ 88.5585074, 26.4664338 ], [ 88.5584036, 26.4665246 ], [ 88.5583258, 26.4666608 ], [ 88.5583128, 26.4668812 ], [ 88.5583777, 26.4671406 ], [ 88.5584555, 26.4673546 ], [ 88.5585463, 26.4675523 ], [ 88.5586111, 26.4677468 ], [ 88.5586241, 26.4679089 ], [ 88.5586357, 26.4679806 ], [ 88.558637, 26.4681683 ], [ 88.5585981, 26.4683239 ], [ 88.5584685, 26.468499 ], [ 88.5583582, 26.4687065 ], [ 88.5582545, 26.468901 ], [ 88.5581313, 26.469102 ], [ 88.5580664, 26.4692965 ], [ 88.5578525, 26.4695429 ], [ 88.5577098, 26.469718 ], [ 88.5575542, 26.4700422 ], [ 88.5575126, 26.4702239 ], [ 88.5575023, 26.4702691 ], [ 88.5575348, 26.4704312 ], [ 88.5575866, 26.4705609 ], [ 88.5576774, 26.4706387 ], [ 88.5577941, 26.4706452 ], [ 88.5580794, 26.4706257 ], [ 88.5583388, 26.4706063 ], [ 88.5585074, 26.4706063 ], [ 88.5586435, 26.4706711 ], [ 88.5587732, 26.4707619 ], [ 88.5589029, 26.4709305 ], [ 88.5589937, 26.4711542 ], [ 88.5591039, 26.4713228 ], [ 88.5592206, 26.4715043 ], [ 88.5593438, 26.471647 ], [ 88.5594151, 26.4718545 ], [ 88.5595249, 26.471844 ], [ 88.5595961, 26.4718033 ], [ 88.5596979, 26.471732 ], [ 88.5598404, 26.4716913 ], [ 88.559932, 26.4716913 ], [ 88.5600643, 26.4717829 ], [ 88.5601661, 26.4719254 ], [ 88.5602577, 26.4721188 ], [ 88.5603696, 26.4723427 ], [ 88.5605223, 26.4726378 ], [ 88.5605935, 26.4729126 ], [ 88.5605833, 26.4730958 ], [ 88.5606546, 26.4733197 ], [ 88.5606037, 26.4735232 ], [ 88.5605019, 26.4736657 ], [ 88.5602169, 26.4737777 ], [ 88.5599625, 26.4738591 ], [ 88.5596775, 26.47391 ], [ 88.5593519, 26.4739609 ], [ 88.5590974, 26.473971 ], [ 88.5589142, 26.4739507 ], [ 88.5587209, 26.4738693 ], [ 88.5586191, 26.4737879 ], [ 88.558558, 26.4736963 ], [ 88.5585275, 26.4735639 ], [ 88.5585987, 26.4732383 ], [ 88.5586089, 26.472994 ], [ 88.558558, 26.4726785 ], [ 88.558436, 26.4724575 ], [ 88.558235, 26.4723407 ], [ 88.5578979, 26.4722111 ], [ 88.5576126, 26.472036 ], [ 88.5573143, 26.4718545 ], [ 88.5571068, 26.4717118 ], [ 88.5568669, 26.471647 ], [ 88.5565959, 26.4715886 ], [ 88.5562911, 26.4716145 ], [ 88.5559993, 26.4716081 ], [ 88.5556492, 26.4716145 ], [ 88.5554871, 26.4715627 ], [ 88.5550916, 26.4715821 ], [ 88.554722, 26.471621 ], [ 88.5544237, 26.4716275 ], [ 88.5542422, 26.4717118 ], [ 88.5541838, 26.4718091 ], [ 88.5541968, 26.4719582 ], [ 88.5542746, 26.4721073 ], [ 88.554534, 26.4721916 ], [ 88.5547479, 26.4722629 ], [ 88.55491, 26.4722824 ], [ 88.5551499, 26.4724315 ], [ 88.5558113, 26.4729373 ], [ 88.555941, 26.4730929 ], [ 88.5560901, 26.4732874 ], [ 88.5562328, 26.4734819 ], [ 88.5563884, 26.4736635 ], [ 88.556557, 26.4738839 ], [ 88.5567061, 26.4741109 ], [ 88.5568034, 26.4743573 ], [ 88.5569395, 26.4745777 ], [ 88.5569914, 26.4747463 ], [ 88.5570627, 26.4749149 ], [ 88.5570498, 26.47509 ], [ 88.5569849, 26.4752132 ], [ 88.5569136, 26.4752974 ], [ 88.5568098, 26.4753817 ], [ 88.5566607, 26.475466 ], [ 88.5564532, 26.4755698 ], [ 88.5561225, 26.4756476 ], [ 88.5559669, 26.4756541 ], [ 88.5558632, 26.4756346 ], [ 88.5557011, 26.4755503 ], [ 88.5555325, 26.4754336 ], [ 88.5551889, 26.4752585 ], [ 88.5548517, 26.475077 ], [ 88.5546416, 26.4750057 ], [ 88.5544147, 26.4749149 ], [ 88.5541488, 26.4747722 ], [ 88.5538959, 26.474675 ], [ 88.5536171, 26.4746426 ], [ 88.5533383, 26.4746426 ], [ 88.5531049, 26.4746815 ], [ 88.5529623, 26.4747982 ], [ 88.552878, 26.4749538 ], [ 88.5528131, 26.4751613 ], [ 88.5527742, 26.4753817 ], [ 88.5527612, 26.4755503 ], [ 88.5527418, 26.4757384 ], [ 88.5526834, 26.4759069 ], [ 88.5525927, 26.4760561 ], [ 88.5524889, 26.4762506 ], [ 88.5523852, 26.476377 ], [ 88.5522944, 26.4765521 ], [ 88.5522231, 26.4767401 ], [ 88.5521388, 26.4769476 ], [ 88.5521453, 26.4770903 ], [ 88.5521582, 26.4772524 ], [ 88.5522231, 26.4773756 ], [ 88.5523268, 26.4775441 ], [ 88.5524824, 26.4776673 ], [ 88.5526899, 26.4777646 ], [ 88.5528909, 26.4778619 ], [ 88.553079, 26.4779073 ], [ 88.5532475, 26.4779526 ], [ 88.553468, 26.4780175 ], [ 88.5536496, 26.4780369 ], [ 88.5538181, 26.4780629 ], [ 88.5539595, 26.4780791 ], [ 88.5541929, 26.478105 ], [ 88.5544652, 26.4781439 ], [ 88.5546533, 26.4782088 ], [ 88.5547959, 26.4782412 ], [ 88.5550812, 26.4783644 ], [ 88.5551785, 26.4784033 ], [ 88.5552693, 26.4784876 ], [ 88.5552822, 26.4785978 ], [ 88.5552822, 26.4786951 ], [ 88.5552239, 26.4788961 ], [ 88.5550942, 26.4791489 ], [ 88.5550293, 26.4793045 ], [ 88.5549321, 26.4794796 ], [ 88.5547959, 26.4797455 ], [ 88.5546273, 26.4799594 ], [ 88.5544782, 26.4801864 ], [ 88.5543874, 26.4804133 ], [ 88.5543356, 26.4806532 ], [ 88.5543356, 26.4808802 ], [ 88.5543874, 26.4810034 ], [ 88.5545041, 26.4810423 ], [ 88.5547246, 26.4810682 ], [ 88.5548867, 26.4810812 ], [ 88.554971, 26.4810941 ], [ 88.5550488, 26.481159 ], [ 88.555159, 26.4812886 ], [ 88.5552757, 26.4814702 ], [ 88.5553574, 26.4815966 ], [ 88.5555066, 26.4817328 ], [ 88.5556881, 26.4818625 ], [ 88.5559086, 26.4819857 ], [ 88.556142, 26.4821348 ], [ 88.556356, 26.4822645 ], [ 88.5565375, 26.4824655 ], [ 88.5566672, 26.4826438 ], [ 88.5566672, 26.4827929 ], [ 88.5566218, 26.4829615 ], [ 88.5566024, 26.4831496 ], [ 88.5566024, 26.4832857 ], [ 88.5566218, 26.4833895 ], [ 88.5566931, 26.4835775 ], [ 88.5567709, 26.4837461 ], [ 88.5568617, 26.4839017 ], [ 88.5569201, 26.4840573 ], [ 88.556946, 26.4842778 ], [ 88.556933, 26.4845631 ], [ 88.5569071, 26.484803 ], [ 88.5568878, 26.4849721 ], [ 88.5568812, 26.4850299 ], [ 88.5568617, 26.4852374 ], [ 88.5567888, 26.4854319 ], [ 88.5549408, 26.485038 ], [ 88.5533459, 26.4847357 ], [ 88.5519757, 26.4845342 ], [ 88.5501919, 26.4843525 ], [ 88.5483083, 26.4840909 ], [ 88.5464651, 26.4837791 ], [ 88.5445082, 26.4834675 ], [ 88.5427133, 26.4832307 ], [ 88.541604, 26.4830064 ], [ 88.5400949, 26.4828416 ], [ 88.539161, 26.4826823 ], [ 88.5390488, 26.4835797 ], [ 88.5385129, 26.4835299 ], [ 88.5374659, 26.4834052 ], [ 88.5367055, 26.4833304 ], [ 88.5363815, 26.4832182 ], [ 88.5364438, 26.4822211 ], [ 88.5359078, 26.4821504 ], [ 88.5344414, 26.4819291 ], [ 88.5324377, 26.4816326 ], [ 88.5311725, 26.4814465 ], [ 88.5302442, 26.481265 ], [ 88.5289853, 26.4810714 ], [ 88.5278143, 26.4809 ], [ 88.5272838, 26.4808224 ], [ 88.5263154, 26.4806979 ], [ 88.5262313, 26.4816729 ], [ 88.526191, 26.4822371 ], [ 88.5261104, 26.4832849 ], [ 88.5265538, 26.4836879 ], [ 88.526991, 26.4839345 ], [ 88.5273473, 26.4840091 ], [ 88.5275243, 26.4842352 ], [ 88.527367, 26.4844221 ], [ 88.5272883, 26.4846286 ], [ 88.5273276, 26.4848548 ], [ 88.5266884, 26.4848843 ], [ 88.5253707, 26.4848548 ], [ 88.5243372, 26.4848969 ], [ 88.5236891, 26.4848548 ], [ 88.5236694, 26.4857103 ], [ 88.5241513, 26.4857103 ], [ 88.525469, 26.485789 ], [ 88.5268064, 26.4858381 ], [ 88.5273375, 26.4858873 ], [ 88.5273403, 26.4860751 ], [ 88.5279373, 26.4861332 ], [ 88.5277406, 26.4868215 ], [ 88.527485, 26.4874116 ], [ 88.5272792, 26.4875568 ], [ 88.5270424, 26.4875001 ], [ 88.5262575, 26.4873873 ], [ 88.5260492, 26.4871657 ], [ 88.525351, 26.4870969 ], [ 88.5242791, 26.486969 ], [ 88.5234236, 26.4868707 ], [ 88.5228336, 26.4868215 ], [ 88.5228434, 26.4879033 ], [ 88.5228391, 26.4882139 ], [ 88.5228336, 26.4886113 ], [ 88.5228237, 26.4893685 ], [ 88.5234039, 26.4893095 ], [ 88.5237088, 26.4892898 ], [ 88.5245643, 26.4893587 ], [ 88.5245151, 26.4899192 ], [ 88.524407, 26.4905289 ], [ 88.5242791, 26.4910697 ], [ 88.5240148, 26.491204 ], [ 88.5239745, 26.4915668 ], [ 88.5243372, 26.4916071 ], [ 88.5246725, 26.4916598 ], [ 88.5245151, 26.4923481 ], [ 88.5244561, 26.4930562 ], [ 88.5242988, 26.4931447 ], [ 88.524053, 26.4931545 ], [ 88.5235715, 26.4938236 ], [ 88.5231685, 26.4941863 ], [ 88.5227252, 26.4943072 ], [ 88.5228058, 26.494952 ], [ 88.5228864, 26.4955566 ], [ 88.5226446, 26.4961611 ], [ 88.5222415, 26.4968865 ], [ 88.5214758, 26.4978537 ], [ 88.5208668, 26.4981698 ], [ 88.5202265, 26.4982567 ], [ 88.5194605, 26.4982567 ], [ 88.5194704, 26.4985533 ], [ 88.5194015, 26.4986811 ], [ 88.5194409, 26.4989073 ], [ 88.5194704, 26.4993695 ], [ 88.5197026, 26.4998285 ], [ 88.5199239, 26.5005179 ], [ 88.5195788, 26.5009239 ], [ 88.51899, 26.5011879 ], [ 88.5188017, 26.5014248 ], [ 88.5187623, 26.50171 ], [ 88.5186339, 26.5020634 ], [ 88.5189315, 26.5022057 ], [ 88.5197725, 26.5026586 ], [ 88.5204065, 26.5029173 ], [ 88.5208723, 26.5031502 ], [ 88.5213044, 26.5043752 ], [ 88.5214465, 26.5049944 ], [ 88.5215886, 26.5054411 ], [ 88.5222664, 26.5054356 ], [ 88.5222601, 26.5058231 ], [ 88.5222789, 26.5062386 ], [ 88.5220726, 26.506926 ], [ 88.5220477, 26.5080008 ], [ 88.5215865, 26.508007 ], [ 88.5214553, 26.5088631 ], [ 88.5213065, 26.5088551 ], [ 88.5214115, 26.5093412 ], [ 88.5213803, 26.5099348 ], [ 88.5213653, 26.5105774 ], [ 88.5209796, 26.510618 ], [ 88.5199393, 26.5105535 ], [ 88.5198018, 26.5113283 ], [ 88.5194918, 26.5112908 ], [ 88.5191644, 26.5111908 ], [ 88.5182458, 26.5108659 ], [ 88.5172898, 26.5107972 ], [ 88.5160837, 26.5107159 ], [ 88.5150664, 26.5106534 ], [ 88.514254, 26.5106159 ], [ 88.5133105, 26.5106972 ], [ 88.5124844, 26.5106534 ], [ 88.5120594, 26.5106597 ], [ 88.5120219, 26.5107159 ], [ 88.5106222, 26.5107597 ], [ 88.5106584, 26.5113596 ], [ 88.5100735, 26.5114345 ], [ 88.5100673, 26.5122656 ], [ 88.5100486, 26.5126843 ], [ 88.5086113, 26.5129468 ], [ 88.5083776, 26.5132217 ], [ 88.5083401, 26.5136529 ], [ 88.5084026, 26.5140247 ], [ 88.5083519, 26.5145769 ], [ 88.5083589, 26.5147558 ], [ 88.5080402, 26.5148308 ], [ 88.5080402, 26.5155307 ], [ 88.50813, 26.5155158 ], [ 88.5081214, 26.5157931 ], [ 88.5080277, 26.5159306 ], [ 88.5080402, 26.516318 ], [ 88.5076527, 26.5163305 ], [ 88.5071947, 26.5164446 ], [ 88.506403, 26.5162931 ], [ 88.506003, 26.5161806 ], [ 88.505641, 26.5163583 ], [ 88.5047585, 26.5164446 ], [ 88.5043908, 26.5163305 ], [ 88.5039596, 26.5161931 ], [ 88.5034847, 26.5159306 ], [ 88.5027405, 26.5155513 ], [ 88.5018066, 26.5156528 ], [ 88.4995427, 26.5157885 ], [ 88.4992351, 26.5150407 ], [ 88.5008967, 26.5141283 ], [ 88.5011817, 26.5134764 ], [ 88.5007903, 26.5126299 ], [ 88.4995245, 26.511987 ], [ 88.4969419, 26.511855 ], [ 88.4964403, 26.5116085 ], [ 88.4960359, 26.5112596 ], [ 88.4955513, 26.5112614 ], [ 88.4949578, 26.5118778 ], [ 88.4932014, 26.5117193 ], [ 88.4925442, 26.5119716 ], [ 88.491436, 26.5109386 ], [ 88.4910639, 26.5106714 ], [ 88.4902757, 26.5106148 ], [ 88.4899022, 26.5100993 ], [ 88.4890723, 26.5101743 ], [ 88.4907783, 26.5118016 ], [ 88.4909025, 26.5127832 ], [ 88.4905078, 26.5140018 ], [ 88.4890218, 26.5157368 ], [ 88.4891576, 26.5161923 ], [ 88.4889623, 26.5169268 ], [ 88.4884494, 26.5196041 ], [ 88.4901918, 26.5221376 ], [ 88.4903367, 26.5235208 ], [ 88.489377, 26.5245022 ], [ 88.4890153, 26.5252933 ], [ 88.4894899, 26.5289217 ], [ 88.4903058, 26.5310307 ], [ 88.4896577, 26.5319972 ], [ 88.4875475, 26.5317777 ], [ 88.486338, 26.530455 ], [ 88.4842074, 26.5295953 ], [ 88.4824585, 26.5299778 ], [ 88.4824162, 26.5330831 ], [ 88.4819062, 26.5346042 ], [ 88.4823725, 26.5353342 ], [ 88.4850328, 26.537516 ], [ 88.4856335, 26.5397068 ], [ 88.4851379, 26.5411257 ], [ 88.4838689, 26.5413195 ], [ 88.4835576, 26.541367 ], [ 88.4831452, 26.54143 ], [ 88.4814647, 26.5407574 ], [ 88.479998, 26.5408511 ], [ 88.4770833, 26.5418097 ], [ 88.4776331, 26.5434531 ], [ 88.4771637, 26.5437429 ], [ 88.4770267, 26.5437519 ], [ 88.4765514, 26.5438898 ], [ 88.4757312, 26.5440696 ], [ 88.4757742, 26.5446118 ], [ 88.4744835, 26.5445343 ], [ 88.4731927, 26.5444655 ], [ 88.4714571, 26.5444287 ], [ 88.4706163, 26.544346 ], [ 88.4700003, 26.5443218 ], [ 88.4696017, 26.5442735 ], [ 88.4692031, 26.5442011 ], [ 88.4684561, 26.5440067 ], [ 88.4677882, 26.5440938 ], [ 88.4671831, 26.5442149 ], [ 88.4666322, 26.5444287 ], [ 88.4658363, 26.5444472 ], [ 88.4649912, 26.5445021 ], [ 88.464379, 26.5445021 ], [ 88.4631299, 26.5439633 ], [ 88.4624325, 26.5438968 ], [ 88.462425, 26.5447054 ], [ 88.4623645, 26.5452353 ], [ 88.4622558, 26.5456769 ], [ 88.4622083, 26.5458943 ], [ 88.4621607, 26.5461457 ], [ 88.4621267, 26.5463427 ], [ 88.4620928, 26.5464989 ], [ 88.4619909, 26.5466484 ], [ 88.4618754, 26.5469066 ], [ 88.4617667, 26.5469134 ], [ 88.4617191, 26.5469949 ], [ 88.4616036, 26.5470357 ], [ 88.4615628, 26.547158 ], [ 88.4615592, 26.5472751 ], [ 88.4597845, 26.5473125 ], [ 88.4587195, 26.5473087 ], [ 88.4586381, 26.5466574 ], [ 88.4585616, 26.5461575 ], [ 88.4582643, 26.5461236 ], [ 88.4582643, 26.5457584 ], [ 88.4582453, 26.5450513 ], [ 88.4577888, 26.5450026 ], [ 88.4577718, 26.5441448 ], [ 88.4577378, 26.5436862 ], [ 88.4576784, 26.5434314 ], [ 88.4577548, 26.5433465 ], [ 88.4581435, 26.5433214 ], [ 88.4581237, 26.5427877 ], [ 88.4577563, 26.541955 ], [ 88.4577319, 26.5413182 ], [ 88.4582462, 26.5410488 ], [ 88.4582217, 26.540363 ], [ 88.4579768, 26.540265 ], [ 88.4570706, 26.5401671 ], [ 88.4570499, 26.5395079 ], [ 88.456379, 26.5394824 ], [ 88.4557323, 26.5394649 ], [ 88.4557506, 26.5391937 ], [ 88.4548418, 26.5391629 ], [ 88.4553005, 26.5380981 ], [ 88.4555977, 26.5381066 ], [ 88.4556911, 26.5374697 ], [ 88.4562686, 26.5375376 ], [ 88.4563073, 26.5370695 ], [ 88.4559034, 26.5370026 ], [ 88.4558949, 26.5367393 ], [ 88.4555276, 26.5367137 ], [ 88.4549862, 26.5365865 ], [ 88.4544682, 26.5365695 ], [ 88.4534831, 26.5364931 ], [ 88.4524215, 26.5363572 ], [ 88.4503238, 26.5356608 ], [ 88.4498907, 26.5356353 ], [ 88.4493217, 26.5355674 ], [ 88.4486097, 26.5355727 ], [ 88.4480054, 26.535457 ], [ 88.4477366, 26.5356955 ], [ 88.4465764, 26.5366837 ], [ 88.4459001, 26.5372201 ], [ 88.4455736, 26.5375349 ], [ 88.4450839, 26.537873 ], [ 88.4447901, 26.5380946 ], [ 88.4432629, 26.5394804 ], [ 88.4433123, 26.5399985 ], [ 88.4433524, 26.540756 ], [ 88.4433426, 26.5412627 ], [ 88.4433561, 26.5417061 ], [ 88.4429243, 26.5417541 ], [ 88.4429658, 26.5421239 ], [ 88.4430026, 26.5424059 ], [ 88.4429793, 26.5427207 ], [ 88.442956, 26.5429656 ], [ 88.4429815, 26.5436353 ], [ 88.4429425, 26.5442953 ], [ 88.4399801, 26.5443062 ], [ 88.4384954, 26.5443677 ], [ 88.4371628, 26.5442228 ], [ 88.4357721, 26.5452658 ], [ 88.4348172, 26.5463023 ], [ 88.434312, 26.5467433 ], [ 88.4333994, 26.5473662 ], [ 88.4325592, 26.548076 ], [ 88.4320522, 26.5486409 ], [ 88.4315163, 26.5496405 ], [ 88.4310701, 26.5504951 ], [ 88.430985, 26.5507309 ], [ 88.4307271, 26.5514456 ], [ 88.4304478, 26.551882 ], [ 88.4301865, 26.5525521 ], [ 88.4299982, 26.5529577 ], [ 88.4294878, 26.5539682 ], [ 88.4290959, 26.5548989 ], [ 88.4285081, 26.556197 ], [ 88.4279064, 26.557651 ], [ 88.4272786, 26.5590013 ], [ 88.4265684, 26.5604953 ], [ 88.4257357, 26.5624792 ], [ 88.4247544, 26.5646331 ], [ 88.4242908, 26.5653718 ], [ 88.423066, 26.5660133 ], [ 88.4224772, 26.5663134 ], [ 88.4225786, 26.5672695 ], [ 88.4225207, 26.5675302 ], [ 88.4222744, 26.5681241 ], [ 88.4217385, 26.5694568 ], [ 88.4213763, 26.5704418 ], [ 88.4213329, 26.5706591 ], [ 88.4214343, 26.5727161 ], [ 88.4215646, 26.5737952 ], [ 88.4216371, 26.5748382 ], [ 88.421753, 26.5758812 ], [ 88.4218688, 26.5763592 ], [ 88.4220572, 26.5766575 ], [ 88.4223068, 26.5778845 ], [ 88.4222744, 26.5783437 ], [ 88.4223324, 26.5792708 ], [ 88.4223562, 26.5795122 ], [ 88.4224782, 26.5807501 ], [ 88.4224906, 26.5815742 ], [ 88.422458, 26.5828474 ], [ 88.4224571, 26.5829368 ], [ 88.4215936, 26.5830226 ], [ 88.421666, 26.5841669 ], [ 88.421695, 26.585094 ], [ 88.4215791, 26.5854417 ], [ 88.4208767, 26.5855568 ], [ 88.4209852, 26.5864267 ], [ 88.4209852, 26.5868468 ], [ 88.4209418, 26.5871655 ], [ 88.420652, 26.5879767 ], [ 88.4204492, 26.5885271 ], [ 88.4204331, 26.5885602 ], [ 88.4201885, 26.5890631 ], [ 88.4200192, 26.5892488 ], [ 88.4195294, 26.5896162 ], [ 88.41926, 26.590106 ], [ 88.41926, 26.5908407 ], [ 88.419254, 26.5920788 ], [ 88.4194413, 26.593431 ], [ 88.4195453, 26.5943048 ], [ 88.4197325, 26.595241 ], [ 88.4198365, 26.596302 ], [ 88.4197325, 26.5971133 ], [ 88.4197533, 26.5979455 ], [ 88.4198157, 26.5987568 ], [ 88.4196701, 26.5995474 ], [ 88.4192956, 26.6011284 ], [ 88.4194365, 26.6015473 ], [ 88.4190886, 26.6027071 ], [ 88.4186674, 26.604249 ], [ 88.4193188, 26.6081753 ], [ 88.418554, 26.6116975 ], [ 88.4181542, 26.6134595 ], [ 88.4181507, 26.6139988 ], [ 88.41834, 26.6150773 ], [ 88.4195413, 26.6218944 ], [ 88.4194475, 26.6221916 ], [ 88.4191389, 26.6225652 ], [ 88.4180672, 26.622949 ], [ 88.4171302, 26.623285 ], [ 88.4167823, 26.6235358 ], [ 88.416541, 26.6238895 ], [ 88.4165216, 26.6241521 ], [ 88.4171246, 26.6267987 ], [ 88.4176957, 26.6307105 ], [ 88.4177518, 26.6331877 ], [ 88.4177887, 26.6346302 ], [ 88.417721, 26.634922 ], [ 88.4175331, 26.6352028 ], [ 88.4170342, 26.6355579 ], [ 88.4163752, 26.635858 ], [ 88.415713, 26.6360039 ], [ 88.4153804, 26.6347871 ], [ 88.4152671, 26.6343879 ], [ 88.4151575, 26.63442 ], [ 88.4143137, 26.6346941 ], [ 88.4138628, 26.6348967 ], [ 88.4136903, 26.6351653 ], [ 88.4132961, 26.6366387 ], [ 88.4131483, 26.6373257 ], [ 88.4129389, 26.6375284 ], [ 88.4127098, 26.6376363 ], [ 88.4113794, 26.6380194 ], [ 88.4108373, 26.6380349 ], [ 88.4103175, 26.6380172 ], [ 88.409286, 26.6380616 ], [ 88.4085016, 26.6382534 ], [ 88.4094904, 26.6323566 ], [ 88.4073482, 26.6304863 ], [ 88.4039971, 26.6290103 ], [ 88.3993013, 26.6281169 ], [ 88.3981179, 26.6273794 ], [ 88.3976158, 26.6269136 ], [ 88.3973317, 26.6263903 ], [ 88.3971168, 26.6258536 ], [ 88.3970861, 26.6251726 ], [ 88.3971186, 26.624505 ], [ 88.397361, 26.623232 ], [ 88.3973848, 26.6209952 ], [ 88.3977176, 26.6194518 ], [ 88.3971912, 26.6178306 ], [ 88.3959988, 26.6163364 ], [ 88.3928564, 26.6153334 ], [ 88.3904385, 26.6142559 ], [ 88.3893335, 26.6137187 ], [ 88.387928, 26.6122991 ], [ 88.3873701, 26.6111193 ], [ 88.3871019, 26.6095749 ], [ 88.3872199, 26.6078291 ], [ 88.3877563, 26.606841 ], [ 88.3889258, 26.6061983 ], [ 88.3914471, 26.6060832 ], [ 88.3943546, 26.6051431 ], [ 88.3957413, 26.6046016 ], [ 88.3970293, 26.6040197 ], [ 88.3976732, 26.6034518 ], [ 88.3977926, 26.6026605 ], [ 88.3976091, 26.6019491 ], [ 88.3974489, 26.6016729 ], [ 88.3971497, 26.6014278 ], [ 88.3964009, 26.6010048 ], [ 88.3957363, 26.6009005 ], [ 88.3945205, 26.6007097 ], [ 88.3930766, 26.6005518 ], [ 88.3915575, 26.6004094 ], [ 88.3883563, 26.6006345 ], [ 88.3852473, 26.6004532 ], [ 88.3810568, 26.5988215 ], [ 88.3795665, 26.5968537 ], [ 88.3785869, 26.5928504 ], [ 88.3768314, 26.5902134 ], [ 88.3770227, 26.5888655 ], [ 88.3764428, 26.5876541 ], [ 88.3758688, 26.5863205 ], [ 88.3742702, 26.5847278 ], [ 88.3738625, 26.5831063 ], [ 88.3737337, 26.5810242 ], [ 88.3731544, 26.5793451 ], [ 88.3716309, 26.5776852 ], [ 88.3694851, 26.5759197 ], [ 88.3689058, 26.5747491 ], [ 88.3688092, 26.5734249 ], [ 88.3694744, 26.571573 ], [ 88.3707075, 26.568666 ], [ 88.3709335, 26.5652397 ], [ 88.371104, 26.5614214 ], [ 88.3707297, 26.55905 ], [ 88.3695817, 26.5571019 ], [ 88.3673715, 26.5548178 ], [ 88.3651507, 26.5531095 ], [ 88.3636165, 26.5525721 ], [ 88.3596682, 26.5494337 ], [ 88.3584452, 26.5481573 ], [ 88.3579945, 26.545729 ], [ 88.3567822, 26.5439055 ], [ 88.3564925, 26.5422642 ], [ 88.3575868, 26.5400374 ], [ 88.3574903, 26.5376282 ], [ 88.3570933, 26.5340864 ], [ 88.3568132, 26.5325158 ], [ 88.3566561, 26.531635 ], [ 88.3566105, 26.5313795 ], [ 88.3556127, 26.5293733 ], [ 88.3522188, 26.5242575 ], [ 88.3507955, 26.5205417 ], [ 88.3500767, 26.5137832 ], [ 88.3498406, 26.5107398 ], [ 88.3490682, 26.5093381 ], [ 88.3469441, 26.5075876 ], [ 88.3463538, 26.5071011 ], [ 88.343457, 26.50472 ], [ 88.3422553, 26.5030974 ], [ 88.3421484, 26.5030677 ], [ 88.3392191, 26.5022525 ], [ 88.3369553, 26.5012539 ], [ 88.3363545, 26.5006874 ], [ 88.3360004, 26.4996889 ], [ 88.3352165, 26.4991229 ], [ 88.3347237, 26.4987671 ], [ 88.3345236, 26.4984994 ], [ 88.3341094, 26.4979451 ], [ 88.3336401, 26.4973172 ], [ 88.3330285, 26.4961362 ], [ 88.3319878, 26.4950704 ], [ 88.3319916, 26.4929994 ], [ 88.3316942, 26.4915547 ], [ 88.3314392, 26.49011 ], [ 88.3315879, 26.4899825 ], [ 88.331418, 26.488644 ], [ 88.3307666, 26.4855616 ], [ 88.3312912, 26.4854549 ], [ 88.3311072, 26.4845916 ], [ 88.3319534, 26.4844058 ], [ 88.3315922, 26.4819499 ], [ 88.3323899, 26.4818708 ], [ 88.3324161, 26.4815152 ], [ 88.3330472, 26.4815061 ], [ 88.3333568, 26.4814649 ], [ 88.3337386, 26.4817022 ], [ 88.3340378, 26.4818054 ], [ 88.3343268, 26.4816506 ], [ 88.3344403, 26.4815061 ], [ 88.3344652, 26.4812306 ], [ 88.3342075, 26.4805392 ], [ 88.3340227, 26.4798885 ], [ 88.3339404, 26.4792887 ], [ 88.3335166, 26.4787156 ], [ 88.3341512, 26.4786272 ], [ 88.3344967, 26.4786272 ], [ 88.3349305, 26.4782256 ], [ 88.3352518, 26.4779926 ], [ 88.3355491, 26.4779444 ], [ 88.3356876, 26.4780983 ], [ 88.3359106, 26.4783461 ], [ 88.3364729, 26.4787236 ], [ 88.3368665, 26.4788281 ], [ 88.3371557, 26.478804 ], [ 88.3373566, 26.4786915 ], [ 88.3377984, 26.4786272 ], [ 88.3378225, 26.4787799 ], [ 88.3406182, 26.4784585 ], [ 88.3408672, 26.4779283 ], [ 88.3407628, 26.4759762 ], [ 88.3406664, 26.4745221 ], [ 88.3406182, 26.4721603 ], [ 88.3404977, 26.4700395 ], [ 88.3404013, 26.4690514 ], [ 88.341293, 26.4691397 ], [ 88.3419035, 26.4691076 ], [ 88.3425309, 26.4689476 ], [ 88.3448839, 26.4688184 ], [ 88.3462095, 26.4686256 ], [ 88.3462014, 26.468481 ], [ 88.3470048, 26.4683364 ], [ 88.3470128, 26.4675411 ], [ 88.346812, 26.4675491 ], [ 88.3466272, 26.4669225 ], [ 88.3464665, 26.4660147 ], [ 88.3472699, 26.465854 ], [ 88.3476876, 26.4658701 ], [ 88.3481403, 26.4658603 ], [ 88.3481315, 26.4656932 ], [ 88.3483337, 26.4655701 ], [ 88.3483337, 26.4653855 ], [ 88.3482194, 26.4652008 ], [ 88.3481315, 26.4650953 ], [ 88.3480172, 26.4649898 ], [ 88.3478589, 26.4647964 ], [ 88.3478501, 26.4646382 ], [ 88.3477974, 26.4645678 ], [ 88.3476303, 26.4644711 ], [ 88.347604, 26.464392 ], [ 88.34756, 26.4641546 ], [ 88.3475512, 26.4638645 ], [ 88.3476303, 26.4635919 ], [ 88.3476303, 26.463504 ], [ 88.3476831, 26.4633721 ], [ 88.3477095, 26.4632314 ], [ 88.3477095, 26.4630908 ], [ 88.3476743, 26.4630204 ], [ 88.3477183, 26.462783 ], [ 88.3477798, 26.4626863 ], [ 88.3476831, 26.4625281 ], [ 88.3475336, 26.4623698 ], [ 88.3475336, 26.4621588 ], [ 88.3475952, 26.4620006 ], [ 88.3476919, 26.4618863 ], [ 88.3479205, 26.4616225 ], [ 88.3479556, 26.4614994 ], [ 88.3479293, 26.4613851 ], [ 88.3478501, 26.4612181 ], [ 88.347771, 26.4610422 ], [ 88.3477974, 26.4609367 ], [ 88.3478414, 26.4606466 ], [ 88.3478238, 26.4602861 ], [ 88.3477534, 26.4600751 ], [ 88.3477534, 26.4599872 ], [ 88.347771, 26.4599081 ], [ 88.3478414, 26.4598289 ], [ 88.3480172, 26.4597498 ], [ 88.3481667, 26.4596179 ], [ 88.3483249, 26.4595916 ], [ 88.348448, 26.4596091 ], [ 88.3487481, 26.4596059 ], [ 88.3490158, 26.4595333 ], [ 88.3492666, 26.4594277 ], [ 88.3496462, 26.4592362 ], [ 88.3496759, 26.4590646 ], [ 88.3496759, 26.4587115 ], [ 88.3496495, 26.458586 ], [ 88.3496793, 26.4583163 ], [ 88.3496297, 26.4577873 ], [ 88.3496495, 26.4575893 ], [ 88.3498671, 26.45744 ], [ 88.3499766, 26.4574087 ], [ 88.3501018, 26.4573149 ], [ 88.3501957, 26.4571584 ], [ 88.3502113, 26.4570176 ], [ 88.3502896, 26.4568611 ], [ 88.3502739, 26.4567046 ], [ 88.3502896, 26.4563917 ], [ 88.350204, 26.4562328 ], [ 88.3502304, 26.456081 ], [ 88.3502106, 26.4558697 ], [ 88.3502238, 26.4556849 ], [ 88.3503492, 26.4554737 ], [ 88.3505274, 26.4552492 ], [ 88.3508944, 26.4544472 ], [ 88.3509935, 26.4541436 ], [ 88.3512905, 26.4537607 ], [ 88.3514225, 26.4536419 ], [ 88.3514819, 26.4534175 ], [ 88.3514687, 26.4531072 ], [ 88.3515215, 26.4529092 ], [ 88.3515743, 26.452599 ], [ 88.3516602, 26.4523085 ], [ 88.3517658, 26.4521369 ], [ 88.3519374, 26.4519389 ], [ 88.3521948, 26.4518266 ], [ 88.3523137, 26.4516154 ], [ 88.3523071, 26.4514999 ], [ 88.3525777, 26.4512623 ], [ 88.3528285, 26.4510906 ], [ 88.3530596, 26.4509124 ], [ 88.3531916, 26.4507672 ], [ 88.3532774, 26.4506022 ], [ 88.3532774, 26.4504833 ], [ 88.3532246, 26.4503348 ], [ 88.353086, 26.4502292 ], [ 88.3526899, 26.4499982 ], [ 88.3524985, 26.4498529 ], [ 88.3524193, 26.4497143 ], [ 88.3524061, 26.4496087 ], [ 88.3523995, 26.4488958 ], [ 88.3523797, 26.4487836 ], [ 88.3522476, 26.4486648 ], [ 88.3521156, 26.4486186 ], [ 88.3518378, 26.4484391 ], [ 88.3518378, 26.4482796 ], [ 88.3519442, 26.4480668 ], [ 88.3521037, 26.4478718 ], [ 88.3523696, 26.4477655 ], [ 88.3526533, 26.4477655 ], [ 88.3529547, 26.4478364 ], [ 88.3534511, 26.4478896 ], [ 88.3538234, 26.4480314 ], [ 88.354302, 26.4483505 ], [ 88.3547062, 26.4488292 ], [ 88.355114, 26.4493787 ], [ 88.3552913, 26.449946 ], [ 88.3553267, 26.4504956 ], [ 88.3556281, 26.4513998 ], [ 88.3560004, 26.4519316 ], [ 88.3564081, 26.4524457 ], [ 88.3567982, 26.452623 ], [ 88.3587469, 26.452739 ], [ 88.3596371, 26.4530032 ], [ 88.3603179, 26.4533046 ], [ 88.360566, 26.4540708 ], [ 88.3601869, 26.4544829 ], [ 88.3591906, 26.4552478 ], [ 88.3588611, 26.4559304 ], [ 88.3589788, 26.4575515 ], [ 88.3591738, 26.4579415 ], [ 88.359422, 26.4585443 ], [ 88.3597411, 26.458952 ], [ 88.3603119, 26.4601753 ], [ 88.3605069, 26.4607071 ], [ 88.360631, 26.4621786 ], [ 88.360631, 26.4626395 ], [ 88.3602765, 26.46326 ], [ 88.3601169, 26.4636855 ], [ 88.3600815, 26.4641641 ], [ 88.3601524, 26.4646605 ], [ 88.3605601, 26.4656533 ], [ 88.3608083, 26.466132 ], [ 88.3612161, 26.466522 ], [ 88.362067, 26.4670184 ], [ 88.3625812, 26.467107 ], [ 88.3639462, 26.467568 ], [ 88.3644426, 26.4676389 ], [ 88.3646022, 26.4677453 ], [ 88.3647263, 26.4679226 ], [ 88.3647263, 26.4686494 ], [ 88.3647795, 26.4691813 ], [ 88.3649745, 26.470307 ], [ 88.3652404, 26.4707502 ], [ 88.3654, 26.4711225 ], [ 88.365595, 26.4712643 ], [ 88.3656659, 26.4716544 ], [ 88.3654886, 26.4720267 ], [ 88.3650986, 26.4722217 ], [ 88.3646199, 26.4725053 ], [ 88.3639285, 26.4727181 ], [ 88.3631307, 26.4729131 ], [ 88.3626875, 26.4732854 ], [ 88.3622266, 26.4737818 ], [ 88.3621734, 26.4741009 ], [ 88.3621911, 26.4744023 ], [ 88.362333, 26.4747214 ], [ 88.3621025, 26.4748809 ], [ 88.3623152, 26.4752709 ], [ 88.3624571, 26.475661 ], [ 88.3624925, 26.4761928 ], [ 88.3624571, 26.476441 ], [ 88.3622975, 26.4769906 ], [ 88.3621911, 26.4772565 ], [ 88.3620138, 26.4775579 ], [ 88.3618366, 26.4779125 ], [ 88.3618011, 26.4783379 ], [ 88.3615884, 26.4787102 ], [ 88.3612161, 26.479118 ], [ 88.3609094, 26.4797947 ], [ 88.3605984, 26.4801793 ], [ 88.3603397, 26.4804208 ], [ 88.3602167, 26.4807028 ], [ 88.3601406, 26.4813214 ], [ 88.3602767, 26.4825504 ], [ 88.3602168, 26.4830144 ], [ 88.3602168, 26.4834635 ], [ 88.3601869, 26.4837329 ], [ 88.3602767, 26.4840323 ], [ 88.3604114, 26.4842867 ], [ 88.3607258, 26.4845412 ], [ 88.3612197, 26.4847507 ], [ 88.3616688, 26.4849004 ], [ 88.3622376, 26.4851998 ], [ 88.3624172, 26.4854692 ], [ 88.3626268, 26.4858584 ], [ 88.3628064, 26.4863823 ], [ 88.362986, 26.4867266 ], [ 88.3648421, 26.4870259 ], [ 88.3671283, 26.4873212 ], [ 88.3676074, 26.4873596 ], [ 88.371997, 26.4880288 ], [ 88.3743171, 26.4881336 ], [ 88.3746764, 26.4880737 ], [ 88.374377, 26.4866368 ], [ 88.374856, 26.486547 ], [ 88.3749009, 26.4862177 ], [ 88.3751853, 26.4862027 ], [ 88.3753649, 26.486068 ], [ 88.3754098, 26.4858584 ], [ 88.375305, 26.4854842 ], [ 88.3752901, 26.4852597 ], [ 88.37532, 26.4849154 ], [ 88.3752751, 26.4846909 ], [ 88.3752751, 26.4844663 ], [ 88.375814, 26.4838377 ], [ 88.3762331, 26.4838676 ], [ 88.3764876, 26.4839574 ], [ 88.3767133, 26.4838229 ], [ 88.3775952, 26.4843017 ], [ 88.3779245, 26.484152 ], [ 88.3783586, 26.4838676 ], [ 88.3790172, 26.4836281 ], [ 88.3794813, 26.4837029 ], [ 88.3799752, 26.483688 ], [ 88.3806488, 26.4835682 ], [ 88.3813373, 26.4833736 ], [ 88.3813823, 26.4836431 ], [ 88.3825797, 26.4833886 ], [ 88.3825947, 26.4831791 ], [ 88.3838371, 26.4830294 ], [ 88.383867, 26.4831192 ], [ 88.3845107, 26.4830294 ], [ 88.3846154, 26.4831341 ], [ 88.3858578, 26.4829246 ], [ 88.3862769, 26.482745 ], [ 88.3863831, 26.4823475 ], [ 88.3865613, 26.4819666 ], [ 88.386741, 26.4815026 ], [ 88.3868457, 26.4809188 ], [ 88.3870104, 26.480335 ], [ 88.3871601, 26.4800656 ], [ 88.3874744, 26.4797064 ], [ 88.3877738, 26.4792274 ], [ 88.3879983, 26.4787783 ], [ 88.388163, 26.4783891 ], [ 88.3882666, 26.4778654 ], [ 88.388355, 26.477859 ], [ 88.3884687, 26.4778969 ], [ 88.3885382, 26.4779538 ], [ 88.3886329, 26.4780674 ], [ 88.3887213, 26.4782569 ], [ 88.3888223, 26.4785221 ], [ 88.3889676, 26.4787179 ], [ 88.3892404, 26.4789484 ], [ 88.3894424, 26.4792136 ], [ 88.3896508, 26.4794283 ], [ 88.3897519, 26.4796114 ], [ 88.3898403, 26.4797314 ], [ 88.3900171, 26.4798135 ], [ 88.3901876, 26.479763 ], [ 88.3904465, 26.4795798 ], [ 88.3905349, 26.4794977 ], [ 88.3906928, 26.4794093 ], [ 88.3907875, 26.4793778 ], [ 88.3909643, 26.4793841 ], [ 88.3910275, 26.4794346 ], [ 88.3911032, 26.4795419 ], [ 88.391198, 26.4798387 ], [ 88.3912359, 26.4801419 ], [ 88.3912472, 26.4804702 ], [ 88.3912725, 26.4807165 ], [ 88.3913546, 26.480887 ], [ 88.3915124, 26.4809817 ], [ 88.3916893, 26.4810259 ], [ 88.3918787, 26.4810386 ], [ 88.3920871, 26.480988 ], [ 88.3923713, 26.480887 ], [ 88.3924912, 26.4808744 ], [ 88.3926213, 26.4808996 ], [ 88.392735, 26.4808996 ], [ 88.3930255, 26.4810764 ], [ 88.3931581, 26.4811017 ], [ 88.3934991, 26.4811396 ], [ 88.3937896, 26.4812027 ], [ 88.3941053, 26.4813985 ], [ 88.3944211, 26.4814995 ], [ 88.3946421, 26.4814869 ], [ 88.3952167, 26.4815059 ], [ 88.395362, 26.4816574 ], [ 88.3954946, 26.4817142 ], [ 88.3956524, 26.4817648 ], [ 88.3957851, 26.4817837 ], [ 88.3959366, 26.4818342 ], [ 88.3961179, 26.4817927 ], [ 88.3962892, 26.4817816 ], [ 88.3964424, 26.4817452 ], [ 88.3965982, 26.4817328 ], [ 88.3967614, 26.4817392 ], [ 88.3969975, 26.4817458 ], [ 88.3971743, 26.4817711 ], [ 88.3973511, 26.4818216 ], [ 88.3975532, 26.4818405 ], [ 88.3978475, 26.48179 ], [ 88.3979654, 26.4818264 ], [ 88.3980697, 26.4818976 ], [ 88.3982172, 26.4819323 ], [ 88.39834, 26.4818658 ], [ 88.3983779, 26.4817395 ], [ 88.3983138, 26.4816226 ], [ 88.3983284, 26.4814569 ], [ 88.398433, 26.4813858 ], [ 88.398532, 26.4813747 ], [ 88.3986411, 26.4814158 ], [ 88.3987126, 26.481468 ], [ 88.3987631, 26.4815248 ], [ 88.3987768, 26.4816353 ], [ 88.3987378, 26.4817775 ], [ 88.3987373, 26.4819922 ], [ 88.3988417, 26.4820696 ], [ 88.398988, 26.482079 ], [ 88.3993567, 26.4818911 ], [ 88.3995967, 26.4818216 ], [ 88.3998872, 26.4817806 ], [ 88.3999945, 26.4817806 ], [ 88.4001271, 26.4818311 ], [ 88.400386, 26.4820142 ], [ 88.4004997, 26.4821216 ], [ 88.4005818, 26.4822289 ], [ 88.4006197, 26.4823552 ], [ 88.4006197, 26.4825762 ], [ 88.4005755, 26.4826583 ], [ 88.4004555, 26.4827088 ], [ 88.4004355, 26.4827973 ], [ 88.400439, 26.4828763 ], [ 88.4005028, 26.4829741 ], [ 88.4006134, 26.4830688 ], [ 88.4007207, 26.4831446 ], [ 88.4009102, 26.483214 ], [ 88.4011186, 26.4833087 ], [ 88.401308, 26.4833593 ], [ 88.4014217, 26.4834035 ], [ 88.4014459, 26.4835382 ], [ 88.4013478, 26.4836565 ], [ 88.4011459, 26.483723 ], [ 88.4009224, 26.4837195 ], [ 88.4007622, 26.4837497 ], [ 88.4006794, 26.4838772 ], [ 88.4006875, 26.4839739 ], [ 88.400711, 26.484128 ], [ 88.400728, 26.4843979 ], [ 88.4008132, 26.4846362 ], [ 88.4009799, 26.4847313 ], [ 88.4012235, 26.4848621 ], [ 88.4013751, 26.4849396 ], [ 88.4014222, 26.4850867 ], [ 88.4015537, 26.4851607 ], [ 88.402038, 26.4853569 ], [ 88.4022091, 26.4853847 ], [ 88.4023397, 26.4854853 ], [ 88.4024659, 26.4856496 ], [ 88.4025643, 26.4858016 ], [ 88.4026752, 26.485886 ], [ 88.4028892, 26.4859076 ], [ 88.4029615, 26.4859225 ], [ 88.4031306, 26.485904 ], [ 88.4033776, 26.485903 ], [ 88.4039562, 26.4860337 ], [ 88.4041851, 26.4860395 ], [ 88.4043519, 26.4859459 ], [ 88.4047555, 26.4860146 ], [ 88.4056316, 26.4860818 ], [ 88.4057434, 26.485255 ], [ 88.4057136, 26.4851702 ], [ 88.4055196, 26.4851199 ], [ 88.4055317, 26.4845917 ], [ 88.40547, 26.4840803 ], [ 88.4053669, 26.4829559 ], [ 88.4052721, 26.4823978 ], [ 88.4051455, 26.4822576 ], [ 88.4060133, 26.481895 ], [ 88.4059139, 26.4815303 ], [ 88.4058682, 26.4814084 ], [ 88.4055658, 26.480602 ], [ 88.4071571, 26.4799224 ], [ 88.4085993, 26.479508 ], [ 88.408334, 26.4783642 ], [ 88.4089474, 26.4780493 ], [ 88.4087934, 26.477184 ], [ 88.4104061, 26.4769718 ], [ 88.4101574, 26.4750324 ], [ 88.4116162, 26.4748998 ], [ 88.4116991, 26.4736068 ], [ 88.41258, 26.4736362 ], [ 88.4122295, 26.4730764 ], [ 88.4131412, 26.4720983 ], [ 88.413854, 26.4715845 ], [ 88.415379, 26.4713193 ], [ 88.4153127, 26.4696119 ], [ 88.415379, 26.4692638 ], [ 88.4187109, 26.4693798 ], [ 88.4185783, 26.4667607 ], [ 88.4194568, 26.4667607 ], [ 88.4195065, 26.465849 ], [ 88.4207995, 26.4656998 ], [ 88.4223652, 26.4659677 ], [ 88.4219985, 26.4670046 ], [ 88.421366, 26.4680396 ], [ 88.422855, 26.4692472 ], [ 88.4229213, 26.4699268 ], [ 88.4229339, 26.470675 ], [ 88.4227787, 26.4727614 ], [ 88.4240551, 26.4728111 ], [ 88.4240717, 26.4729603 ], [ 88.4270223, 26.4729769 ], [ 88.4283153, 26.4729437 ], [ 88.4291706, 26.4716011 ], [ 88.4296182, 26.471054 ], [ 88.4302149, 26.4704904 ], [ 88.4305796, 26.4703412 ], [ 88.4308612, 26.4703683 ], [ 88.4315895, 26.4709625 ], [ 88.431877, 26.4711733 ], [ 88.4323533, 26.4716508 ], [ 88.4331158, 26.4717171 ], [ 88.4343656, 26.4715347 ], [ 88.4341502, 26.470938 ], [ 88.4339512, 26.4706893 ], [ 88.4336363, 26.4701257 ], [ 88.4334374, 26.4696948 ], [ 88.433255, 26.4690649 ], [ 88.4330727, 26.4686504 ], [ 88.433139, 26.4684184 ], [ 88.4333711, 26.4681532 ], [ 88.4337689, 26.4678382 ], [ 88.4341667, 26.4676061 ], [ 88.4345811, 26.4672746 ], [ 88.4349292, 26.4669099 ], [ 88.4352442, 26.4665287 ], [ 88.4355592, 26.4663463 ], [ 88.4358907, 26.4662469 ], [ 88.4362056, 26.4661971 ], [ 88.4365703, 26.4660977 ], [ 88.4369018, 26.4661474 ], [ 88.4372168, 26.4663463 ], [ 88.4374489, 26.4663795 ], [ 88.4378301, 26.4666115 ], [ 88.4387252, 26.4665287 ], [ 88.4396038, 26.4663795 ], [ 88.4401011, 26.4663961 ], [ 88.4414769, 26.4662469 ], [ 88.4430053, 26.4660977 ], [ 88.4441756, 26.4660977 ], [ 88.4449215, 26.4660811 ], [ 88.4464333, 26.4661037 ], [ 88.4461681, 26.466711 ], [ 88.4479749, 26.4666447 ], [ 88.4505774, 26.4667442 ], [ 88.4519532, 26.4666944 ], [ 88.4550862, 26.4667773 ], [ 88.4560333, 26.4667589 ], [ 88.4567935, 26.4667442 ], [ 88.4581362, 26.4666944 ], [ 88.4600425, 26.4664624 ], [ 88.4618792, 26.4661143 ], [ 88.4631887, 26.4659816 ], [ 88.4640275, 26.4656833 ], [ 88.4643756, 26.4653849 ], [ 88.4648151, 26.4651172 ], [ 88.465337, 26.4650368 ], [ 88.4668952, 26.464871 ], [ 88.4671439, 26.4647218 ], [ 88.4684865, 26.4647053 ], [ 88.4684534, 26.464208 ], [ 88.4695309, 26.4642743 ], [ 88.4709067, 26.4641417 ], [ 88.4716526, 26.4636278 ], [ 88.4728793, 26.4628819 ], [ 88.473791, 26.4626001 ], [ 88.4752995, 26.4622685 ], [ 88.4771892, 26.4619867 ], [ 88.4788468, 26.461821 ], [ 88.4795927, 26.4614397 ], [ 88.4806868, 26.4608595 ], [ 88.4823643, 26.4606772 ], [ 88.4832263, 26.4604451 ], [ 88.4845657, 26.460412 ], [ 88.4854774, 26.4603125 ], [ 88.4862941, 26.4601153 ], [ 88.4855148, 26.4597004 ], [ 88.485467, 26.459675 ], [ 88.485434, 26.4594459 ], [ 88.48541, 26.4592794 ], [ 88.4850592, 26.4591344 ], [ 88.4845585, 26.4587807 ], [ 88.4844359, 26.4581381 ], [ 88.4842024, 26.4577535 ], [ 88.483824, 26.4568712 ], [ 88.483298, 26.4560564 ], [ 88.4829553, 26.4556217 ], [ 88.4824767, 26.4551673 ], [ 88.4816044, 26.4549573 ], [ 88.480795, 26.4547631 ], [ 88.4799856, 26.4545688 ], [ 88.4797104, 26.4544069 ], [ 88.4789496, 26.4539213 ], [ 88.4786582, 26.4535975 ], [ 88.478642, 26.4531766 ], [ 88.4786744, 26.4527234 ], [ 88.4789496, 26.4521082 ], [ 88.4793057, 26.4516226 ], [ 88.4798237, 26.4511046 ], [ 88.480536, 26.4506837 ], [ 88.4810605, 26.4504571 ], [ 88.4819346, 26.4503923 ], [ 88.4832297, 26.4504247 ], [ 88.4843143, 26.4506675 ], [ 88.485496, 26.4506837 ], [ 88.4864349, 26.4506675 ], [ 88.4872119, 26.4504571 ], [ 88.4875194, 26.450101 ], [ 88.4876004, 26.4495344 ], [ 88.4875356, 26.4491459 ], [ 88.4872928, 26.4486441 ], [ 88.4868719, 26.4477375 ], [ 88.486532, 26.4472033 ], [ 88.4862406, 26.4467501 ], [ 88.4859978, 26.446313 ], [ 88.4861111, 26.4458597 ], [ 88.4863215, 26.4455846 ], [ 88.486668, 26.4453417 ], [ 88.4873155, 26.444937 ], [ 88.4880439, 26.4445485 ], [ 88.4888371, 26.4443381 ], [ 88.4894037, 26.444241 ], [ 88.4902779, 26.4443381 ], [ 88.4909577, 26.4443543 ], [ 88.4916538, 26.4442571 ], [ 88.49201, 26.4439172 ], [ 88.4921071, 26.4435287 ], [ 88.4920747, 26.4430592 ], [ 88.4920261, 26.4426222 ], [ 88.4919128, 26.4423308 ], [ 88.4918804, 26.4417723 ], [ 88.4918481, 26.4415942 ], [ 88.4917509, 26.4409467 ], [ 88.4917509, 26.4402992 ], [ 88.4918481, 26.4399107 ], [ 88.4921783, 26.4396193 ], [ 88.4924211, 26.4394736 ], [ 88.492842, 26.4392632 ], [ 88.49336, 26.4388909 ], [ 88.4940561, 26.4383729 ], [ 88.4947845, 26.4379034 ], [ 88.4954365, 26.4375692 ], [ 88.495884, 26.4373014 ], [ 88.496439, 26.4369902 ], [ 88.4967369, 26.4366401 ], [ 88.4968677, 26.4361188 ], [ 88.4969527, 26.4355337 ], [ 88.4968728, 26.4350625 ], [ 88.4966623, 26.4345121 ], [ 88.4963871, 26.4339293 ], [ 88.4961443, 26.4333789 ], [ 88.4957073, 26.4328771 ], [ 88.4952864, 26.4324724 ], [ 88.4947036, 26.4321325 ], [ 88.4940723, 26.431922 ], [ 88.4932629, 26.4319058 ], [ 88.4925021, 26.4318087 ], [ 88.4915955, 26.4317925 ], [ 88.4908833, 26.4316792 ], [ 88.4904948, 26.4313393 ], [ 88.4898311, 26.4307889 ], [ 88.4894911, 26.4303518 ], [ 88.4897663, 26.4295748 ], [ 88.490171, 26.4290568 ], [ 88.4908185, 26.4287168 ], [ 88.491466, 26.4284093 ], [ 88.4920974, 26.4284254 ], [ 88.4926639, 26.4285549 ], [ 88.49336, 26.4286521 ], [ 88.4943151, 26.4288139 ], [ 88.494995, 26.4288139 ], [ 88.4957396, 26.4286844 ], [ 88.4962253, 26.4284416 ], [ 88.4967595, 26.4281422 ], [ 88.497407, 26.4275918 ], [ 88.4980707, 26.4267014 ], [ 88.4983782, 26.4258759 ], [ 88.4983621, 26.4251312 ], [ 88.4982487, 26.4245485 ], [ 88.497844, 26.4236257 ], [ 88.4972937, 26.4232372 ], [ 88.4963548, 26.4226545 ], [ 88.495772, 26.4220555 ], [ 88.4952378, 26.4214404 ], [ 88.4947684, 26.4210195 ], [ 88.4942018, 26.4207281 ], [ 88.4937647, 26.4202991 ], [ 88.4937161, 26.4195059 ], [ 88.493959, 26.4188908 ], [ 88.4945741, 26.4182271 ], [ 88.495513, 26.4176929 ], [ 88.4966623, 26.4174501 ], [ 88.4976822, 26.4174177 ], [ 88.498282, 26.4174314 ], [ 88.5004237, 26.4179605 ], [ 88.502137, 26.4182629 ], [ 88.5030693, 26.4180613 ], [ 88.5033464, 26.4177338 ], [ 88.5033464, 26.4171794 ], [ 88.5031197, 26.4165243 ], [ 88.5025401, 26.4157181 ], [ 88.5015071, 26.4148614 ], [ 88.5004993, 26.4144079 ], [ 88.4998694, 26.4138284 ], [ 88.49896, 26.4130794 ], [ 88.4982979, 26.412616 ], [ 88.4975697, 26.4121526 ], [ 88.4968746, 26.4114575 ], [ 88.4964774, 26.4108616 ], [ 88.4959147, 26.4101665 ], [ 88.4958154, 26.40967 ], [ 88.4958154, 26.4091404 ], [ 88.4962126, 26.4088094 ], [ 88.4968746, 26.408677 ], [ 88.4978676, 26.4085446 ], [ 88.4986951, 26.4086439 ], [ 88.4993241, 26.4088756 ], [ 88.4998537, 26.4089749 ], [ 88.5002221, 26.4089908 ], [ 88.5009024, 26.4087892 ], [ 88.5011544, 26.4086128 ], [ 88.5014567, 26.4078317 ], [ 88.5015575, 26.407227 ], [ 88.5016331, 26.4064964 ], [ 88.5017843, 26.4055137 ], [ 88.5019102, 26.4045563 ], [ 88.5020362, 26.4041531 ], [ 88.5021622, 26.4039264 ], [ 88.5024646, 26.4035988 ], [ 88.5026409, 26.4034728 ], [ 88.5028939, 26.4034133 ], [ 88.5030693, 26.4033721 ], [ 88.5035228, 26.4033973 ], [ 88.5039007, 26.4035484 ], [ 88.5042535, 26.4038256 ], [ 88.5046314, 26.4041783 ], [ 88.5049842, 26.4045815 ], [ 88.5053621, 26.4054129 ], [ 88.5056896, 26.4059672 ], [ 88.5060424, 26.4066223 ], [ 88.5064707, 26.4071766 ], [ 88.506899, 26.4076806 ], [ 88.5075541, 26.4080081 ], [ 88.5083825, 26.4083899 ], [ 88.5092596, 26.4083323 ], [ 88.5098638, 26.4081162 ], [ 88.510038, 26.4077118 ], [ 88.5102727, 26.407257 ], [ 88.5103509, 26.4065971 ], [ 88.5104013, 26.4059924 ], [ 88.5104013, 26.4056145 ], [ 88.5103509, 26.4043547 ], [ 88.5101493, 26.4035232 ], [ 88.5099478, 26.4028681 ], [ 88.5094942, 26.4014824 ], [ 88.5089399, 26.4005753 ], [ 88.5085116, 26.4002226 ], [ 88.5078313, 26.3999202 ], [ 88.5073778, 26.3998446 ], [ 88.5068235, 26.3999706 ], [ 88.5060424, 26.400273 ], [ 88.5056644, 26.4004745 ], [ 88.5054713, 26.4004383 ], [ 88.5052613, 26.4003989 ], [ 88.5050849, 26.4002226 ], [ 88.504707, 26.399895 ], [ 88.5044802, 26.3994163 ], [ 88.5044046, 26.3988872 ], [ 88.5045306, 26.39861 ], [ 88.5047826, 26.3982573 ], [ 88.5053117, 26.39764 ], [ 88.505992, 26.3970857 ], [ 88.5065211, 26.3967329 ], [ 88.5072266, 26.3964306 ], [ 88.5082596, 26.3959518 ], [ 88.5090155, 26.3954227 ], [ 88.5093683, 26.3948432 ], [ 88.509595, 26.3942889 ], [ 88.5098218, 26.393533 ], [ 88.5102249, 26.3917189 ], [ 88.5102501, 26.3907615 ], [ 88.510628, 26.3899048 ], [ 88.5114595, 26.3888718 ], [ 88.5123918, 26.3880907 ], [ 88.5130217, 26.3877128 ], [ 88.5136768, 26.3875112 ], [ 88.514609, 26.3875364 ], [ 88.5151129, 26.3879899 ], [ 88.5153901, 26.388645 ], [ 88.515768, 26.3894261 ], [ 88.5160452, 26.3900056 ], [ 88.5167759, 26.3905851 ], [ 88.5177081, 26.3909379 ], [ 88.5181868, 26.3911268 ], [ 88.5187411, 26.391026 ], [ 88.5192199, 26.3907993 ], [ 88.519623, 26.3904213 ], [ 88.5198246, 26.3900686 ], [ 88.5196986, 26.3894513 ], [ 88.5195222, 26.3890482 ], [ 88.5192199, 26.3883679 ], [ 88.5187915, 26.3877632 ], [ 88.5178593, 26.3869821 ], [ 88.5165995, 26.386201 ], [ 88.5155413, 26.3856467 ], [ 88.514735, 26.3850924 ], [ 88.5146594, 26.3845885 ], [ 88.5147098, 26.3838074 ], [ 88.514735, 26.3830011 ], [ 88.514735, 26.3817665 ], [ 88.514735, 26.3811618 ], [ 88.5143067, 26.3803304 ], [ 88.5139791, 26.3796249 ], [ 88.513324, 26.3785162 ], [ 88.5128957, 26.3776848 ], [ 88.5129209, 26.3768029 ], [ 88.513198, 26.3759715 ], [ 88.5135911, 26.3751148 ], [ 88.5140698, 26.3743085 ], [ 88.5149013, 26.3728724 ], [ 88.5156824, 26.3719653 ], [ 88.5163123, 26.3712346 ], [ 88.5169422, 26.3708819 ], [ 88.5175973, 26.3707055 ], [ 88.5185547, 26.3708063 ], [ 88.5192854, 26.3709827 ], [ 88.5197137, 26.3712598 ], [ 88.5202176, 26.3717889 ], [ 88.5208223, 26.3725448 ], [ 88.5213011, 26.3734771 ], [ 88.5217798, 26.3742077 ], [ 88.5223089, 26.3749384 ], [ 88.5230144, 26.3754171 ], [ 88.5237955, 26.3755431 ], [ 88.5245513, 26.3753668 ], [ 88.5248789, 26.3746865 ], [ 88.5250553, 26.3741322 ], [ 88.5245513, 26.3731747 ], [ 88.5239718, 26.3724188 ], [ 88.5233167, 26.3717385 ], [ 88.5226364, 26.3711086 ], [ 88.5222081, 26.3705543 ], [ 88.5219813, 26.3699622 ], [ 88.5220317, 26.3691811 ], [ 88.5220317, 26.3688284 ], [ 88.5221073, 26.3682237 ], [ 88.5221073, 26.367493 ], [ 88.5220317, 26.3669135 ], [ 88.5217546, 26.3666112 ], [ 88.5216286, 26.3663592 ], [ 88.5212507, 26.3661576 ], [ 88.5206712, 26.3659813 ], [ 88.5199405, 26.3659561 ], [ 88.519235, 26.3658553 ], [ 88.5184791, 26.3659057 ], [ 88.5178492, 26.3659813 ], [ 88.5169674, 26.3660065 ], [ 88.5162871, 26.3660065 ], [ 88.5160099, 26.3658805 ], [ 88.5156068, 26.3656033 ], [ 88.5153548, 26.3653262 ], [ 88.5152036, 26.3648978 ], [ 88.5151784, 26.3644191 ], [ 88.5152036, 26.3640664 ], [ 88.5154052, 26.363638 ], [ 88.5158083, 26.3628822 ], [ 88.5163878, 26.3622523 ], [ 88.5170429, 26.3619499 ], [ 88.5178996, 26.3617483 ], [ 88.5187563, 26.3618491 ], [ 88.5194366, 26.3620759 ], [ 88.5201168, 26.362605 ], [ 88.5210239, 26.3632601 ], [ 88.5220821, 26.3635373 ], [ 88.5227624, 26.3634869 ], [ 88.5233671, 26.3630837 ], [ 88.5240474, 26.3621515 ], [ 88.5241482, 26.3614964 ], [ 88.524123, 26.3607405 ], [ 88.5240474, 26.360287 ], [ 88.523871, 26.3597579 ], [ 88.5234427, 26.3591532 ], [ 88.5229388, 26.3588004 ], [ 88.5222333, 26.3585233 ], [ 88.5215278, 26.3582209 ], [ 88.5208979, 26.3580193 ], [ 88.5199657, 26.3577674 ], [ 88.5193106, 26.3576162 ], [ 88.5186051, 26.3573642 ], [ 88.5180004, 26.3568603 ], [ 88.5175469, 26.356432 ], [ 88.5171437, 26.3552478 ], [ 88.5172193, 26.3540636 ], [ 88.5174965, 26.3529801 ], [ 88.5178996, 26.3524762 ], [ 88.5182272, 26.3520983 ], [ 88.5182422, 26.3516427 ], [ 88.5172408, 26.3518648 ], [ 88.5156349, 26.3520775 ], [ 88.5156243, 26.3525029 ], [ 88.5154009, 26.3525348 ], [ 88.513476, 26.3528538 ], [ 88.5129516, 26.3528568 ], [ 88.511896, 26.3528733 ], [ 88.5115159, 26.3528792 ], [ 88.5103449, 26.3528972 ], [ 88.509645, 26.3528299 ], [ 88.5093175, 26.352776 ], [ 88.5092339, 26.3527151 ], [ 88.5092726, 26.3522825 ], [ 88.509361, 26.3519463 ], [ 88.5094887, 26.3518088 ], [ 88.5095869, 26.3514946 ], [ 88.5098489, 26.3505236 ], [ 88.509703, 26.3504733 ], [ 88.5095924, 26.3506594 ], [ 88.5093962, 26.3508304 ], [ 88.5092503, 26.3509662 ], [ 88.5091447, 26.3510316 ], [ 88.5090441, 26.3510769 ], [ 88.508858, 26.3511372 ], [ 88.5086166, 26.3511775 ], [ 88.5084657, 26.3512328 ], [ 88.508355, 26.3512429 ], [ 88.5082343, 26.3512026 ], [ 88.5079476, 26.3512077 ], [ 88.5074899, 26.3511825 ], [ 88.5073675, 26.3501001 ], [ 88.5072398, 26.3493931 ], [ 88.5071613, 26.3488922 ], [ 88.5061792, 26.3488235 ], [ 88.5059828, 26.3488431 ], [ 88.5056686, 26.348794 ], [ 88.5055704, 26.3487449 ], [ 88.5053552, 26.3487315 ], [ 88.5051088, 26.3487449 ], [ 88.5048633, 26.348794 ], [ 88.5046571, 26.3487744 ], [ 88.5043625, 26.3487449 ], [ 88.5039304, 26.3486762 ], [ 88.5038715, 26.3494913 ], [ 88.5037635, 26.3502671 ], [ 88.5036638, 26.3505733 ], [ 88.5045361, 26.3506873 ], [ 88.505757, 26.3507777 ], [ 88.5056882, 26.3513571 ], [ 88.5056686, 26.3515928 ], [ 88.5057079, 26.3518776 ], [ 88.5057079, 26.3521329 ], [ 88.5057079, 26.3524079 ], [ 88.5056588, 26.3527123 ], [ 88.5056293, 26.3530855 ], [ 88.5055802, 26.3532131 ], [ 88.5055802, 26.3534979 ], [ 88.5055345, 26.3537909 ], [ 88.5055258, 26.3539402 ], [ 88.5055213, 26.3540184 ], [ 88.5055016, 26.3544407 ], [ 88.5055409, 26.3548531 ], [ 88.505482, 26.3550888 ], [ 88.5054918, 26.3552852 ], [ 88.5055213, 26.3555602 ], [ 88.5054918, 26.3556682 ], [ 88.5054502, 26.3559099 ], [ 88.5055115, 26.3561985 ], [ 88.5055311, 26.3563753 ], [ 88.5064247, 26.356336 ], [ 88.5064444, 26.3565422 ], [ 88.5070532, 26.3565127 ], [ 88.50723, 26.3569154 ], [ 88.5071514, 26.3571707 ], [ 88.506584, 26.3572303 ], [ 88.5064247, 26.3572198 ], [ 88.5063167, 26.3572493 ], [ 88.5063756, 26.358467 ], [ 88.5077505, 26.3585259 ], [ 88.5077112, 26.3588892 ], [ 88.5076326, 26.3591544 ], [ 88.5076916, 26.3592624 ], [ 88.5079665, 26.3592919 ], [ 88.507996, 26.3602543 ], [ 88.5081924, 26.3603034 ], [ 88.5080745, 26.3606078 ], [ 88.5077701, 26.3609711 ], [ 88.5077603, 26.3613247 ], [ 88.5081629, 26.3614229 ], [ 88.5085852, 26.3615603 ], [ 88.5078389, 26.3622281 ], [ 88.5074233, 26.3625444 ], [ 88.5070816, 26.362557 ], [ 88.506572, 26.3627388 ], [ 88.5063594, 26.3630145 ], [ 88.5059741, 26.3632964 ], [ 88.5056784, 26.3636913 ], [ 88.5051426, 26.3633327 ], [ 88.5046372, 26.3628086 ], [ 88.5041505, 26.3623406 ], [ 88.5039821, 26.3619849 ], [ 88.5041505, 26.3615731 ], [ 88.5045062, 26.3614982 ], [ 88.5042179, 26.3608992 ], [ 88.5032071, 26.3601692 ], [ 88.5018737, 26.3597314 ], [ 88.5001933, 26.3597012 ], [ 88.4986818, 26.3594597 ], [ 88.4973009, 26.3594145 ], [ 88.496418, 26.3593692 ], [ 88.4957615, 26.3593466 ], [ 88.4949918, 26.3593918 ], [ 88.4942674, 26.3594597 ], [ 88.4934751, 26.3595503 ], [ 88.4930306, 26.3595984 ], [ 88.4927183, 26.3595984 ], [ 88.4925502, 26.3599938 ], [ 88.4917397, 26.3600729 ], [ 88.4908303, 26.3602212 ], [ 88.4894695, 26.3603502 ], [ 88.4882146, 26.3603589 ], [ 88.4880664, 26.3597925 ], [ 88.4880228, 26.3593916 ], [ 88.4880403, 26.3591301 ], [ 88.488258, 26.3590057 ], [ 88.4884673, 26.3588861 ], [ 88.4884764, 26.3585676 ], [ 88.4886167, 26.3581667 ], [ 88.4887462, 26.3580582 ], [ 88.4889117, 26.357849 ], [ 88.488964, 26.3576224 ], [ 88.4891383, 26.3571911 ], [ 88.4893475, 26.3565636 ], [ 88.4896646, 26.3554846 ], [ 88.4898704, 26.3541539 ], [ 88.4901754, 26.3535177 ], [ 88.4904107, 26.3530297 ], [ 88.4908116, 26.3524414 ], [ 88.4911951, 26.3520318 ], [ 88.4918138, 26.3514392 ], [ 88.4921973, 26.3511255 ], [ 88.4913828, 26.3506594 ], [ 88.4910616, 26.3504025 ], [ 88.4905414, 26.3502365 ], [ 88.4900185, 26.3501755 ], [ 88.4896351, 26.3502191 ], [ 88.4890948, 26.3503498 ], [ 88.4882407, 26.3506287 ], [ 88.4881361, 26.3501668 ], [ 88.488476, 26.3501407 ], [ 88.4884282, 26.3495996 ], [ 88.4884521, 26.3493609 ], [ 88.4883976, 26.3491036 ], [ 88.4883923, 26.3489293 ], [ 88.487913, 26.3490077 ], [ 88.4872071, 26.3491559 ], [ 88.4864838, 26.3492605 ], [ 88.4853369, 26.3493433 ], [ 88.4853805, 26.349657 ], [ 88.4845351, 26.3497703 ], [ 88.4845438, 26.3498662 ], [ 88.48362, 26.3500143 ], [ 88.4835416, 26.3496657 ], [ 88.4823389, 26.3498313 ], [ 88.4823825, 26.3505111 ], [ 88.4821298, 26.3505634 ], [ 88.481694, 26.3506331 ], [ 88.4813454, 26.3506505 ], [ 88.4809533, 26.3507202 ], [ 88.4807489, 26.3507069 ], [ 88.4807866, 26.3510769 ], [ 88.4808749, 26.3521293 ], [ 88.4802888, 26.3522491 ], [ 88.4803106, 26.3526205 ], [ 88.4801828, 26.3526906 ], [ 88.4801434, 26.3528817 ], [ 88.4801852, 26.3532475 ], [ 88.4794433, 26.3532788 ], [ 88.4788685, 26.3533206 ], [ 88.4780952, 26.3534147 ], [ 88.4775518, 26.3534774 ], [ 88.4772283, 26.3535738 ], [ 88.4772592, 26.3540103 ], [ 88.477301, 26.354606 ], [ 88.4772801, 26.3550344 ], [ 88.4772697, 26.3557764 ], [ 88.47751, 26.3557973 ], [ 88.4776668, 26.3562989 ], [ 88.4774682, 26.3563825 ], [ 88.4775936, 26.3567796 ], [ 88.4777399, 26.3575006 ], [ 88.47542, 26.3578873 ], [ 88.4753782, 26.3577828 ], [ 88.4750124, 26.3578455 ], [ 88.4749184, 26.3580127 ], [ 88.474166, 26.3580545 ], [ 88.4740928, 26.357741 ], [ 88.4740211, 26.3573991 ], [ 88.4737286, 26.3574307 ], [ 88.4735456, 26.3574046 ], [ 88.4735369, 26.3572738 ], [ 88.4733451, 26.3572913 ], [ 88.4732841, 26.357056 ], [ 88.4726305, 26.3571431 ], [ 88.4726305, 26.3568817 ], [ 88.4722645, 26.3569427 ], [ 88.471881, 26.356995 ], [ 88.4717584, 26.3567307 ], [ 88.4711724, 26.3568556 ], [ 88.4705479, 26.3569997 ], [ 88.4705864, 26.3572783 ], [ 88.470058, 26.3574224 ], [ 88.469789, 26.3575473 ], [ 88.4699235, 26.3578547 ], [ 88.4698947, 26.358066 ], [ 88.4698755, 26.3582485 ], [ 88.4696737, 26.3584119 ], [ 88.4690109, 26.358556 ], [ 88.4686074, 26.358604 ], [ 88.4682039, 26.3587097 ], [ 88.4678773, 26.3587001 ], [ 88.4677236, 26.3585079 ], [ 88.4676371, 26.3583734 ], [ 88.4674354, 26.3583446 ], [ 88.4673681, 26.3580276 ], [ 88.4652892, 26.3582851 ], [ 88.4647886, 26.3582715 ], [ 88.4646939, 26.3581498 ], [ 88.4643152, 26.3580821 ], [ 88.4638417, 26.3579875 ], [ 88.4634629, 26.3579739 ], [ 88.4629082, 26.3579604 ], [ 88.4629894, 26.358488 ], [ 88.4630841, 26.3585692 ], [ 88.4631247, 26.3589344 ], [ 88.4633195, 26.3588486 ], [ 88.4633351, 26.3592815 ], [ 88.4631243, 26.3596188 ], [ 88.4628819, 26.3599245 ], [ 88.4626395, 26.3603566 ], [ 88.4625236, 26.3606517 ], [ 88.4624076, 26.3608098 ], [ 88.4620387, 26.3609679 ], [ 88.4617331, 26.3610312 ], [ 88.4616277, 26.3610839 ], [ 88.4615961, 26.3611787 ], [ 88.4612166, 26.3612525 ], [ 88.4607739, 26.3614001 ], [ 88.460384, 26.3615266 ], [ 88.4600572, 26.3616214 ], [ 88.4599202, 26.3616952 ], [ 88.4597305, 26.3616636 ], [ 88.459467, 26.3617479 ], [ 88.4591613, 26.3618428 ], [ 88.4589821, 26.3620114 ], [ 88.4588674, 26.3621321 ], [ 88.4587397, 26.3622538 ], [ 88.4590454, 26.36335 ], [ 88.4594143, 26.3640561 ], [ 88.4590348, 26.3642248 ], [ 88.4580862, 26.3643723 ], [ 88.4573801, 26.364541 ], [ 88.4575382, 26.3651418 ], [ 88.4576312, 26.3660799 ], [ 88.4580639, 26.3661868 ], [ 88.4584814, 26.366524 ], [ 88.4586332, 26.3669384 ], [ 88.459364, 26.3673463 ], [ 88.4597095, 26.3677905 ], [ 88.4599151, 26.3684157 ], [ 88.460039, 26.3691172 ], [ 88.4600229, 26.3705463 ], [ 88.4592782, 26.3705948 ], [ 88.457429, 26.3707313 ], [ 88.4574574, 26.3715563 ], [ 88.4576281, 26.3721111 ], [ 88.458967, 26.3720946 ], [ 88.4590273, 26.3732118 ], [ 88.4591189, 26.3743501 ], [ 88.4584418, 26.3744696 ], [ 88.4585954, 26.3749874 ], [ 88.4586295, 26.3751694 ], [ 88.4587149, 26.3757441 ], [ 88.4588563, 26.3764504 ], [ 88.4589596, 26.376626 ], [ 88.4580751, 26.3766244 ], [ 88.4579526, 26.3766373 ], [ 88.4578431, 26.3766373 ], [ 88.4577078, 26.376605 ], [ 88.457624, 26.3765599 ], [ 88.4575853, 26.3764568 ], [ 88.457566, 26.3763473 ], [ 88.4575531, 26.3761926 ], [ 88.4575467, 26.3759993 ], [ 88.4575338, 26.3758575 ], [ 88.4574887, 26.3757028 ], [ 88.4574564, 26.375561 ], [ 88.4574564, 26.3753999 ], [ 88.4574693, 26.3752066 ], [ 88.4574887, 26.3750713 ], [ 88.457508, 26.3749746 ], [ 88.4574629, 26.3748006 ], [ 88.4574242, 26.3746331 ], [ 88.4573855, 26.3745171 ], [ 88.4572695, 26.3745428 ], [ 88.4571664, 26.3745751 ], [ 88.4570569, 26.3745364 ], [ 88.4569216, 26.374472 ], [ 88.4567669, 26.3743882 ], [ 88.4566767, 26.3743495 ], [ 88.4566638, 26.37424 ], [ 88.4566638, 26.3741497 ], [ 88.4566316, 26.3740402 ], [ 88.4565864, 26.3739435 ], [ 88.4564898, 26.373834 ], [ 88.4564253, 26.3737502 ], [ 88.4563867, 26.3736729 ], [ 88.4563609, 26.3735569 ], [ 88.45629, 26.373428 ], [ 88.4563158, 26.3733829 ], [ 88.4563802, 26.3733378 ], [ 88.4563996, 26.3732411 ], [ 88.4564511, 26.3731831 ], [ 88.4564447, 26.3730607 ], [ 88.4564318, 26.3729189 ], [ 88.4563931, 26.3727835 ], [ 88.4563287, 26.3726675 ], [ 88.4563093, 26.372558 ], [ 88.4563093, 26.3724162 ], [ 88.4563029, 26.3722809 ], [ 88.4562481, 26.3722164 ], [ 88.4562245, 26.3721219 ], [ 88.4562245, 26.3720275 ], [ 88.456254, 26.3719389 ], [ 88.4562363, 26.3718917 ], [ 88.4561182, 26.3718563 ], [ 88.4559942, 26.3718091 ], [ 88.4559057, 26.3717736 ], [ 88.4558053, 26.3717441 ], [ 88.4556341, 26.3717028 ], [ 88.4555338, 26.3717146 ], [ 88.4554157, 26.3717087 ], [ 88.4553331, 26.3717441 ], [ 88.4552209, 26.3717028 ], [ 88.4551264, 26.3716615 ], [ 88.4550379, 26.3716083 ], [ 88.454973, 26.3715257 ], [ 88.4549021, 26.3714726 ], [ 88.454784, 26.371443 ], [ 88.4546896, 26.371443 ], [ 88.4545751, 26.3714489 ], [ 88.4544452, 26.371443 ], [ 88.4542799, 26.3714194 ], [ 88.4541913, 26.3714371 ], [ 88.4540969, 26.3714844 ], [ 88.4540379, 26.3714785 ], [ 88.4539257, 26.3714371 ], [ 88.4538194, 26.371384 ], [ 88.4537368, 26.3713663 ], [ 88.4536895, 26.3712955 ], [ 88.4536069, 26.3711597 ], [ 88.4534888, 26.371077 ], [ 88.453418, 26.3710888 ], [ 88.453359, 26.3710711 ], [ 88.4532173, 26.3710298 ], [ 88.4530697, 26.3709767 ], [ 88.4529811, 26.370959 ], [ 88.452869, 26.3709117 ], [ 88.4527332, 26.370835 ], [ 88.4525679, 26.370776 ], [ 88.4524085, 26.37077 ], [ 88.4521913, 26.3707346 ], [ 88.4519846, 26.370652 ], [ 88.4518371, 26.3705634 ], [ 88.451654, 26.3705162 ], [ 88.4515183, 26.3704808 ], [ 88.4514297, 26.3704336 ], [ 88.4513353, 26.370345 ], [ 88.4512821, 26.370286 ], [ 88.4512172, 26.370221 ], [ 88.4511404, 26.3701443 ], [ 88.4511227, 26.3700675 ], [ 88.4510814, 26.3699849 ], [ 88.4510755, 26.3699022 ], [ 88.4511227, 26.3698609 ], [ 88.45117, 26.3698255 ], [ 88.4511759, 26.3697488 ], [ 88.4511641, 26.3696425 ], [ 88.4511995, 26.3695628 ], [ 88.4512644, 26.3694447 ], [ 88.4513471, 26.3693385 ], [ 88.4514297, 26.3692558 ], [ 88.4515006, 26.369244 ], [ 88.4516068, 26.3692735 ], [ 88.4517013, 26.369244 ], [ 88.4517072, 26.3692027 ], [ 88.4517072, 26.3691141 ], [ 88.4517013, 26.3690551 ], [ 88.4516954, 26.3689784 ], [ 88.4516954, 26.3688957 ], [ 88.451654, 26.3688249 ], [ 88.4515891, 26.3687835 ], [ 88.4515891, 26.3686832 ], [ 88.4515537, 26.3686182 ], [ 88.4514651, 26.368636 ], [ 88.4513766, 26.368636 ], [ 88.4513116, 26.3686773 ], [ 88.4512349, 26.3687304 ], [ 88.4511168, 26.3687363 ], [ 88.4510047, 26.3687186 ], [ 88.4509043, 26.3686891 ], [ 88.4508689, 26.3686005 ], [ 88.4508689, 26.3685002 ], [ 88.4508571, 26.3684234 ], [ 88.4508276, 26.3682995 ], [ 88.4507567, 26.3681873 ], [ 88.4507036, 26.3681165 ], [ 88.4506682, 26.3680397 ], [ 88.4506623, 26.3679689 ], [ 88.4507154, 26.3679098 ], [ 88.4507921, 26.3679098 ], [ 88.4508453, 26.3679039 ], [ 88.450863, 26.3678567 ], [ 88.4508984, 26.3677504 ], [ 88.4508512, 26.3676737 ], [ 88.4508099, 26.367597 ], [ 88.4507567, 26.367532 ], [ 88.4507272, 26.3675261 ], [ 88.4506682, 26.3675615 ], [ 88.4505973, 26.3676147 ], [ 88.4505088, 26.3676265 ], [ 88.450432, 26.3675438 ], [ 88.4504261, 26.3674612 ], [ 88.4503907, 26.3673549 ], [ 88.4503612, 26.3672723 ], [ 88.4502195, 26.3672368 ], [ 88.4501487, 26.3672073 ], [ 88.4501133, 26.3671601 ], [ 88.4500896, 26.3670479 ], [ 88.4500778, 26.3669476 ], [ 88.4500778, 26.3668472 ], [ 88.4501073, 26.3667941 ], [ 88.4501723, 26.3667646 ], [ 88.4502254, 26.3667705 ], [ 88.4503258, 26.3667882 ], [ 88.4504143, 26.3668472 ], [ 88.450497, 26.3668944 ], [ 88.4505737, 26.3668944 ], [ 88.4507036, 26.3668413 ], [ 88.4507862, 26.3667764 ], [ 88.450922, 26.3666465 ], [ 88.4510224, 26.366493 ], [ 88.4510814, 26.3663277 ], [ 88.451105, 26.3662274 ], [ 88.4510519, 26.3661152 ], [ 88.4510165, 26.3660325 ], [ 88.4509043, 26.3659853 ], [ 88.4508217, 26.365885 ], [ 88.4507154, 26.3657728 ], [ 88.450615, 26.3656961 ], [ 88.4504557, 26.3656311 ], [ 88.4503199, 26.3655839 ], [ 88.4501428, 26.3655603 ], [ 88.4499751, 26.3655189 ], [ 88.4496977, 26.3654068 ], [ 88.4494674, 26.3653537 ], [ 88.4493789, 26.3653537 ], [ 88.4492431, 26.3653655 ], [ 88.4491368, 26.3653359 ], [ 88.449066, 26.365271 ], [ 88.4489774, 26.3652474 ], [ 88.4488535, 26.3652651 ], [ 88.4487236, 26.3653241 ], [ 88.4485996, 26.3653418 ], [ 88.4485052, 26.3653182 ], [ 88.4484284, 26.3652356 ], [ 88.4483989, 26.3651116 ], [ 88.4484579, 26.3649876 ], [ 88.4485583, 26.3648991 ], [ 88.4486823, 26.3648401 ], [ 88.4487, 26.3647574 ], [ 88.4486527, 26.364663 ], [ 88.4485642, 26.3645567 ], [ 88.4484697, 26.3643973 ], [ 88.4483812, 26.3643087 ], [ 88.4483044, 26.3643206 ], [ 88.4482159, 26.3644032 ], [ 88.4481982, 26.3644563 ], [ 88.448145, 26.3645036 ], [ 88.4480919, 26.3645272 ], [ 88.4479561, 26.3644977 ], [ 88.4478145, 26.3644858 ], [ 88.4477613, 26.3644091 ], [ 88.4477731, 26.3643442 ], [ 88.4478499, 26.3642615 ], [ 88.4478086, 26.3641966 ], [ 88.4477436, 26.3641848 ], [ 88.4476551, 26.3641848 ], [ 88.4475724, 26.3642202 ], [ 88.4475134, 26.3642733 ], [ 88.4474366, 26.3643442 ], [ 88.4473717, 26.3643619 ], [ 88.4473127, 26.3643324 ], [ 88.4472891, 26.3642733 ], [ 88.4472891, 26.3641966 ], [ 88.4473127, 26.3640726 ], [ 88.4473068, 26.3640313 ], [ 88.4472359, 26.3639841 ], [ 88.447171, 26.3640077 ], [ 88.4470612, 26.364049 ], [ 88.4469313, 26.3640726 ], [ 88.4467955, 26.3640431 ], [ 88.4467365, 26.3640077 ], [ 88.4467365, 26.363925 ], [ 88.4467365, 26.3638365 ], [ 88.4467247, 26.3637892 ], [ 88.4467011, 26.3637361 ], [ 88.4466479, 26.3637243 ], [ 88.4465712, 26.3637597 ], [ 88.446459, 26.3638188 ], [ 88.4463705, 26.3638188 ], [ 88.4463351, 26.3637597 ], [ 88.4463173, 26.36368 ], [ 88.4463941, 26.3635561 ], [ 88.4464649, 26.3634616 ], [ 88.4464649, 26.3633967 ], [ 88.4464354, 26.3632845 ], [ 88.4465122, 26.3631546 ], [ 88.446583, 26.3630543 ], [ 88.4465771, 26.363007 ], [ 88.446524, 26.3629421 ], [ 88.4464708, 26.362889 ], [ 88.4463882, 26.362824 ], [ 88.4463173, 26.3627414 ], [ 88.4462819, 26.3626233 ], [ 88.4462878, 26.3625289 ], [ 88.446217, 26.3624285 ], [ 88.4461402, 26.3623577 ], [ 88.4460635, 26.3623754 ], [ 88.4459927, 26.362399 ], [ 88.44591, 26.362399 ], [ 88.4458038, 26.3623518 ], [ 88.4456975, 26.3622455 ], [ 88.4456148, 26.3621865 ], [ 88.4455617, 26.3621865 ], [ 88.4454909, 26.3622101 ], [ 88.4454082, 26.3622514 ], [ 88.4453315, 26.3622455 ], [ 88.4452252, 26.3621983 ], [ 88.4451957, 26.3620979 ], [ 88.4452075, 26.3620271 ], [ 88.4452252, 26.3619621 ], [ 88.4452311, 26.3618854 ], [ 88.4452134, 26.3618145 ], [ 88.4451626, 26.3617791 ], [ 88.4450623, 26.3617319 ], [ 88.4449501, 26.3617024 ], [ 88.444832, 26.3616906 ], [ 88.444714, 26.3616611 ], [ 88.4445841, 26.3615961 ], [ 88.444466, 26.3615194 ], [ 88.4443952, 26.3614131 ], [ 88.4443952, 26.3613364 ], [ 88.4444129, 26.3612124 ], [ 88.444466, 26.3611238 ], [ 88.4445074, 26.3610117 ], [ 88.4445015, 26.3609054 ], [ 88.4444542, 26.3608346 ], [ 88.444348, 26.3607755 ], [ 88.4442712, 26.3607224 ], [ 88.4442299, 26.3605689 ], [ 88.4441886, 26.3604331 ], [ 88.4441059, 26.3603328 ], [ 88.444041, 26.3603033 ], [ 88.4439347, 26.3603682 ], [ 88.4438698, 26.3603564 ], [ 88.4438108, 26.3603092 ], [ 88.4437163, 26.360197 ], [ 88.4436868, 26.3601203 ], [ 88.4436573, 26.3600376 ], [ 88.4436573, 26.3599432 ], [ 88.443675, 26.3598428 ], [ 88.4436986, 26.3597011 ], [ 88.4437246, 26.3596155 ], [ 88.4437659, 26.3595034 ], [ 88.4437659, 26.3594325 ], [ 88.4437305, 26.3593204 ], [ 88.4436596, 26.3592259 ], [ 88.4436183, 26.359096 ], [ 88.4436183, 26.3590075 ], [ 88.4437128, 26.3588953 ], [ 88.4438544, 26.3587772 ], [ 88.4439843, 26.3586946 ], [ 88.4441142, 26.3586296 ], [ 88.4442441, 26.3586237 ], [ 88.4442972, 26.3586237 ], [ 88.4444271, 26.3586237 ], [ 88.4445097, 26.3586119 ], [ 88.444616, 26.3585647 ], [ 88.4447045, 26.3585175 ], [ 88.4447695, 26.3584585 ], [ 88.4448108, 26.3583286 ], [ 88.4448344, 26.35824 ], [ 88.4448167, 26.3580983 ], [ 88.4447872, 26.3579803 ], [ 88.4447104, 26.3578799 ], [ 88.4445924, 26.3577559 ], [ 88.4444448, 26.3575611 ], [ 88.4443232, 26.3573988 ], [ 88.4442169, 26.3572276 ], [ 88.4441047, 26.3570328 ], [ 88.4440103, 26.3569029 ], [ 88.4439808, 26.3567966 ], [ 88.4439749, 26.3567081 ], [ 88.4439749, 26.356655 ], [ 88.443904, 26.3566195 ], [ 88.4438568, 26.3566018 ], [ 88.443786, 26.3566313 ], [ 88.4437682, 26.3566904 ], [ 88.4437328, 26.3567553 ], [ 88.4436915, 26.3568084 ], [ 88.4436443, 26.3568498 ], [ 88.4435557, 26.3568557 ], [ 88.4434967, 26.3568439 ], [ 88.4434377, 26.3567789 ], [ 88.4434022, 26.356714 ], [ 88.4434022, 26.3566313 ], [ 88.4434318, 26.3565723 ], [ 88.4434672, 26.3565015 ], [ 88.4434731, 26.3563598 ], [ 88.4434731, 26.3562594 ], [ 88.4434318, 26.3560646 ], [ 88.4434199, 26.3559229 ], [ 88.4433491, 26.3558226 ], [ 88.443296, 26.3557576 ], [ 88.4432369, 26.3557045 ], [ 88.4432015, 26.3556691 ], [ 88.4431248, 26.3556455 ], [ 88.4430657, 26.3556455 ], [ 88.4430126, 26.3556632 ], [ 88.4429418, 26.3556691 ], [ 88.4428414, 26.3556809 ], [ 88.4427647, 26.3556986 ], [ 88.4426938, 26.3556573 ], [ 88.4426572, 26.3555923 ], [ 88.4426513, 26.3554979 ], [ 88.4426513, 26.355368 ], [ 88.4426218, 26.3551968 ], [ 88.4425805, 26.355126 ], [ 88.4425805, 26.3550374 ], [ 88.4426041, 26.3549193 ], [ 88.4426277, 26.3547718 ], [ 88.4426159, 26.3546537 ], [ 88.4425746, 26.3545888 ], [ 88.4424919, 26.3545592 ], [ 88.4424034, 26.3545888 ], [ 88.4423089, 26.354636 ], [ 88.4422853, 26.3545061 ], [ 88.4422617, 26.3543998 ], [ 88.442185, 26.35427 ], [ 88.4421318, 26.3540929 ], [ 88.4420374, 26.3538981 ], [ 88.4419689, 26.3537564 ], [ 88.4419099, 26.3536265 ], [ 88.4418508, 26.3535379 ], [ 88.4417741, 26.353414 ], [ 88.441715, 26.35329 ], [ 88.4416442, 26.3531955 ], [ 88.4415261, 26.3531129 ], [ 88.4413963, 26.3530243 ], [ 88.4412369, 26.3529181 ], [ 88.4410716, 26.3528236 ], [ 88.4409004, 26.3527292 ], [ 88.4408, 26.3526701 ], [ 88.4407705, 26.3526111 ], [ 88.4407764, 26.3524635 ], [ 88.4408118, 26.3523632 ], [ 88.4408531, 26.3523159 ], [ 88.4409417, 26.3522864 ], [ 88.4410598, 26.352251 ], [ 88.4411483, 26.3522038 ], [ 88.4412251, 26.3521034 ], [ 88.4412723, 26.3520267 ], [ 88.4413136, 26.3519027 ], [ 88.4412841, 26.3518378 ], [ 88.4412487, 26.3517138 ], [ 88.4412192, 26.3515898 ], [ 88.4412369, 26.3514658 ], [ 88.4413018, 26.3513301 ], [ 88.4413785, 26.3512887 ], [ 88.4413903, 26.3511884 ], [ 88.4413785, 26.3510939 ], [ 88.4413608, 26.3510172 ], [ 88.4413254, 26.3509936 ], [ 88.44129, 26.3509818 ], [ 88.4411837, 26.3509995 ], [ 88.4410598, 26.3509936 ], [ 88.4409417, 26.3509581 ], [ 88.4409122, 26.3508873 ], [ 88.4409476, 26.3507988 ], [ 88.4409948, 26.3507043 ], [ 88.4409653, 26.3506512 ], [ 88.4409594, 26.3505685 ], [ 88.4409771, 26.3504977 ], [ 88.4410125, 26.3504386 ], [ 88.4410775, 26.3504209 ], [ 88.4412014, 26.3504268 ], [ 88.4412841, 26.3504327 ], [ 88.4413667, 26.3503914 ], [ 88.4414081, 26.3503206 ], [ 88.4413963, 26.3502615 ], [ 88.4413372, 26.3502379 ], [ 88.4412841, 26.3501789 ], [ 88.4411837, 26.350114 ], [ 88.4410893, 26.3500667 ], [ 88.4410066, 26.3500608 ], [ 88.4409476, 26.3500785 ], [ 88.4408768, 26.3501022 ], [ 88.4408177, 26.3501376 ], [ 88.440741, 26.3501789 ], [ 88.4406465, 26.3502084 ], [ 88.4405555, 26.3502334 ], [ 88.4405207, 26.3502542 ], [ 88.4404395, 26.3502594 ], [ 88.4403802, 26.350249 ], [ 88.4403398, 26.3502414 ], [ 88.4403069, 26.3502137 ], [ 88.4402854, 26.3501647 ], [ 88.4402888, 26.3501434 ], [ 88.4402861, 26.3501268 ], [ 88.4402848, 26.3501108 ], [ 88.4402987, 26.350092 ], [ 88.4403206, 26.3500201 ], [ 88.4403755, 26.3499768 ], [ 88.4404038, 26.3499379 ], [ 88.4404517, 26.3499073 ], [ 88.4405166, 26.3498719 ], [ 88.4406052, 26.3498424 ], [ 88.4406878, 26.3498424 ], [ 88.4407351, 26.3498424 ], [ 88.4407823, 26.3497716 ], [ 88.4407764, 26.3497184 ], [ 88.4407185, 26.349686 ], [ 88.4405946, 26.349621 ], [ 88.4405237, 26.3495797 ], [ 88.4404588, 26.3495148 ], [ 88.4404116, 26.3494144 ], [ 88.4403525, 26.3493318 ], [ 88.440323, 26.3492314 ], [ 88.440323, 26.3491547 ], [ 88.4403348, 26.3490838 ], [ 88.4403761, 26.3490189 ], [ 88.4403761, 26.3489421 ], [ 88.4403643, 26.3488831 ], [ 88.4403171, 26.3488063 ], [ 88.4402286, 26.3487473 ], [ 88.4401341, 26.3486883 ], [ 88.4400337, 26.3486233 ], [ 88.4399275, 26.3485997 ], [ 88.4398035, 26.3485997 ], [ 88.4397032, 26.3486056 ], [ 88.4396618, 26.3485525 ], [ 88.43965, 26.3484699 ], [ 88.4396441, 26.3484049 ], [ 88.4396146, 26.3483105 ], [ 88.4395674, 26.3482337 ], [ 88.4395201, 26.3481452 ], [ 88.4393962, 26.3480802 ], [ 88.4393253, 26.3479917 ], [ 88.4392604, 26.3479208 ], [ 88.4391777, 26.3478382 ], [ 88.4390951, 26.347726 ], [ 88.4390892, 26.3476139 ], [ 88.4391128, 26.347543 ], [ 88.4391482, 26.3474958 ], [ 88.4392132, 26.3474958 ], [ 88.4393017, 26.3474722 ], [ 88.4393548, 26.3474013 ], [ 88.4393371, 26.347301 ], [ 88.4392899, 26.347236 ], [ 88.4392132, 26.3471652 ], [ 88.439101, 26.3471416 ], [ 88.438977, 26.3471416 ], [ 88.4388767, 26.3471062 ], [ 88.4388472, 26.3470412 ], [ 88.4388235, 26.3469291 ], [ 88.4388412, 26.346811 ], [ 88.438918, 26.3466811 ], [ 88.4389888, 26.3465808 ], [ 88.4390006, 26.3464391 ], [ 88.4389593, 26.3463387 ], [ 88.4388944, 26.346262 ], [ 88.4388294, 26.3461144 ], [ 88.4387881, 26.3460081 ], [ 88.4386937, 26.3459314 ], [ 88.4386346, 26.345896 ], [ 88.4385874, 26.3459432 ], [ 88.4384989, 26.3460199 ], [ 88.4384044, 26.3460731 ], [ 88.4383454, 26.3460849 ], [ 88.4382863, 26.3460672 ], [ 88.4382037, 26.3460081 ], [ 88.4381505, 26.3459373 ], [ 88.4380915, 26.3458723 ], [ 88.438003, 26.3458192 ], [ 88.4379026, 26.3457661 ], [ 88.4378908, 26.3457011 ], [ 88.4379498, 26.3456303 ], [ 88.4380148, 26.3455772 ], [ 88.4380974, 26.3455358 ], [ 88.4381565, 26.3455477 ], [ 88.4382037, 26.3455949 ], [ 88.4382627, 26.3456067 ], [ 88.438369, 26.3456067 ], [ 88.4384634, 26.3455713 ], [ 88.4385402, 26.3455536 ], [ 88.4386169, 26.3455181 ], [ 88.438735, 26.3454945 ], [ 88.4389121, 26.3455004 ], [ 88.4389947, 26.3454945 ], [ 88.4390656, 26.3454473 ], [ 88.439101, 26.3453647 ], [ 88.4390632, 26.3452879 ], [ 88.4390278, 26.3452112 ], [ 88.4389865, 26.3451108 ], [ 88.4389333, 26.3450636 ], [ 88.4388743, 26.3450104 ], [ 88.4388035, 26.3449514 ], [ 88.4386972, 26.3449514 ], [ 88.4386559, 26.3449573 ], [ 88.4385732, 26.3449868 ], [ 88.4385437, 26.3450459 ], [ 88.4384965, 26.3451108 ], [ 88.4384434, 26.3451344 ], [ 88.4383784, 26.3451344 ], [ 88.438284, 26.3451108 ], [ 88.4381659, 26.345099 ], [ 88.4380655, 26.3450754 ], [ 88.438036, 26.3449986 ], [ 88.438036, 26.3449219 ], [ 88.4380655, 26.3448451 ], [ 88.4380951, 26.3447979 ], [ 88.4381659, 26.3447861 ], [ 88.4382899, 26.3447507 ], [ 88.4384197, 26.3446976 ], [ 88.4384965, 26.3446267 ], [ 88.4385791, 26.3445205 ], [ 88.438585, 26.3444614 ], [ 88.4385319, 26.3443965 ], [ 88.4384729, 26.3443493 ], [ 88.4383784, 26.3443138 ], [ 88.4382958, 26.3442843 ], [ 88.4382131, 26.3441958 ], [ 88.4381718, 26.3441604 ], [ 88.4381246, 26.3440423 ], [ 88.4381246, 26.3439832 ], [ 88.4381246, 26.3438711 ], [ 88.4380596, 26.3438534 ], [ 88.4379829, 26.3438475 ], [ 88.4378648, 26.3438652 ], [ 88.4377231, 26.3438652 ], [ 88.4376641, 26.3438475 ], [ 88.4376464, 26.3437884 ], [ 88.4377113, 26.3437235 ], [ 88.4377999, 26.3436527 ], [ 88.4378884, 26.3436054 ], [ 88.4379534, 26.3435405 ], [ 88.4379534, 26.3434874 ], [ 88.4379061, 26.3434342 ], [ 88.4378648, 26.3434165 ], [ 88.4377999, 26.3433988 ], [ 88.4377113, 26.3433988 ], [ 88.4376464, 26.343387 ], [ 88.4375637, 26.3433634 ], [ 88.4374988, 26.3433103 ], [ 88.4374752, 26.3432571 ], [ 88.4374339, 26.3431538 ], [ 88.4373985, 26.3430062 ], [ 88.4373807, 26.3429 ], [ 88.4373217, 26.3427701 ], [ 88.4372981, 26.3426402 ], [ 88.4372981, 26.3425044 ], [ 88.4372981, 26.3423746 ], [ 88.437245, 26.3422388 ], [ 88.43718, 26.3420912 ], [ 88.4370915, 26.34192 ], [ 88.4370147, 26.3417252 ], [ 88.436997, 26.3416189 ], [ 88.4370029, 26.3415422 ], [ 88.437062, 26.3414891 ], [ 88.4371446, 26.3414359 ], [ 88.4372154, 26.3413651 ], [ 88.4372922, 26.341306 ], [ 88.4374044, 26.3412411 ], [ 88.4374988, 26.341188 ], [ 88.4375519, 26.3411348 ], [ 88.4376405, 26.3410433 ], [ 88.4376818, 26.3409784 ], [ 88.4377527, 26.3408544 ], [ 88.4377822, 26.3407718 ], [ 88.4377704, 26.3406773 ], [ 88.4377231, 26.3406242 ], [ 88.4376228, 26.3406242 ], [ 88.4374929, 26.3406242 ], [ 88.4373512, 26.3406773 ], [ 88.4372154, 26.3407423 ], [ 88.4370974, 26.3407423 ], [ 88.4370147, 26.3406773 ], [ 88.4369616, 26.3405652 ], [ 88.4369144, 26.3404648 ], [ 88.436814, 26.3403526 ], [ 88.4366782, 26.3402582 ], [ 88.4365247, 26.3401578 ], [ 88.4363654, 26.3400752 ], [ 88.4362473, 26.3400457 ], [ 88.4360938, 26.3400161 ], [ 88.4359639, 26.3399984 ], [ 88.4358754, 26.3399689 ], [ 88.4358104, 26.339904 ], [ 88.4357691, 26.3398095 ], [ 88.4357691, 26.3397446 ], [ 88.4358281, 26.3396915 ], [ 88.4359285, 26.3396915 ], [ 88.4360525, 26.3396915 ], [ 88.4361469, 26.3396915 ], [ 88.4362532, 26.3396383 ], [ 88.4363122, 26.3395498 ], [ 88.4363476, 26.3394553 ], [ 88.4363949, 26.3393373 ], [ 88.4364067, 26.3392487 ], [ 88.4364008, 26.3391542 ], [ 88.4363476, 26.339048 ], [ 88.4362709, 26.338983 ], [ 88.4361764, 26.3389358 ], [ 88.436082, 26.3388679 ], [ 88.4360171, 26.338803 ], [ 88.4359875, 26.3387144 ], [ 88.4359816, 26.3386082 ], [ 88.4359816, 26.3385314 ], [ 88.4360052, 26.3384606 ], [ 88.4360289, 26.3384311 ], [ 88.4361174, 26.3384016 ], [ 88.4362001, 26.3383838 ], [ 88.4362827, 26.3383012 ], [ 88.4363122, 26.3382363 ], [ 88.4363063, 26.3381359 ], [ 88.4362945, 26.3379824 ], [ 88.4362709, 26.3378643 ], [ 88.4362532, 26.3377168 ], [ 88.4362532, 26.3375987 ], [ 88.4362709, 26.3374393 ], [ 88.4363181, 26.3373212 ], [ 88.436389, 26.3372327 ], [ 88.4364834, 26.3371677 ], [ 88.4366251, 26.3371441 ], [ 88.4367373, 26.3371264 ], [ 88.4367904, 26.3370733 ], [ 88.4367904, 26.3370143 ], [ 88.4367786, 26.336967 ], [ 88.4367314, 26.3369434 ], [ 88.4366487, 26.3369434 ], [ 88.436572, 26.3369493 ], [ 88.4365011, 26.3369493 ], [ 88.4363831, 26.3369493 ], [ 88.4362532, 26.3369257 ], [ 88.4361705, 26.3369139 ], [ 88.4360702, 26.3368608 ], [ 88.4360289, 26.3367899 ], [ 88.4359639, 26.3366837 ], [ 88.4359226, 26.336601 ], [ 88.4358612, 26.3365361 ], [ 88.435814, 26.3364652 ], [ 88.4357667, 26.3364357 ], [ 88.4357077, 26.3364357 ], [ 88.435631, 26.3364888 ], [ 88.4355601, 26.3365184 ], [ 88.4355011, 26.3365656 ], [ 88.4354421, 26.3366364 ], [ 88.4353476, 26.336666 ], [ 88.4352768, 26.3366364 ], [ 88.4352295, 26.3365774 ], [ 88.435265, 26.3364534 ], [ 88.4353358, 26.3364003 ], [ 88.4354243, 26.336294 ], [ 88.4354421, 26.3362291 ], [ 88.4354362, 26.3360992 ], [ 88.435383, 26.3360638 ], [ 88.4352886, 26.3360579 ], [ 88.4351764, 26.3360402 ], [ 88.4350819, 26.3360225 ], [ 88.4349816, 26.3360107 ], [ 88.434958, 26.3359457 ], [ 88.4349875, 26.3358513 ], [ 88.4350642, 26.3357627 ], [ 88.4351528, 26.3356978 ], [ 88.4352118, 26.335621 ], [ 88.4352059, 26.335562 ], [ 88.4351528, 26.3355266 ], [ 88.4350524, 26.3355148 ], [ 88.4349107, 26.3354971 ], [ 88.4348281, 26.3354971 ], [ 88.43471, 26.3355207 ], [ 88.4345624, 26.3355443 ], [ 88.4344562, 26.3355266 ], [ 88.4344031, 26.3354912 ], [ 88.4343735, 26.3354262 ], [ 88.4343617, 26.3353495 ], [ 88.4343617, 26.3352255 ], [ 88.4343912, 26.3351252 ], [ 88.4343794, 26.3350366 ], [ 88.4343322, 26.3349599 ], [ 88.4342449, 26.3349188 ], [ 88.433943, 26.3349737 ], [ 88.433591, 26.3350196 ], [ 88.4329102, 26.3351481 ], [ 88.4320913, 26.3353086 ], [ 88.4310957, 26.3355334 ], [ 88.4305498, 26.3357101 ], [ 88.4297324, 26.3358356 ], [ 88.4290792, 26.3358795 ], [ 88.4283875, 26.3359344 ], [ 88.4276354, 26.3359893 ], [ 88.4265923, 26.3360826 ], [ 88.4254853, 26.3362239 ], [ 88.4245387, 26.336342 ], [ 88.4245227, 26.3358191 ], [ 88.4245117, 26.335605 ], [ 88.4245062, 26.3351988 ], [ 88.4237761, 26.3352482 ], [ 88.4226175, 26.335405 ], [ 88.4218307, 26.3355495 ], [ 88.4212205, 26.3355977 ], [ 88.4203534, 26.3358064 ], [ 88.4193899, 26.3359349 ], [ 88.4183751, 26.3361597 ], [ 88.4176847, 26.3363042 ], [ 88.4166409, 26.3364166 ], [ 88.4159025, 26.336608 ], [ 88.4151244, 26.3367963 ], [ 88.4143769, 26.3371392 ], [ 88.4135792, 26.337392 ], [ 88.4135947, 26.3373507 ], [ 88.4136051, 26.3373042 ], [ 88.4135431, 26.337206 ], [ 88.413419, 26.337144 ], [ 88.4132692, 26.3371905 ], [ 88.4130832, 26.3372628 ], [ 88.4129488, 26.3373558 ], [ 88.4127679, 26.3374437 ], [ 88.4126749, 26.337454 ], [ 88.4126181, 26.3373662 ], [ 88.4126181, 26.3372112 ], [ 88.4126801, 26.3370716 ], [ 88.4127679, 26.3369967 ], [ 88.4128248, 26.336883 ], [ 88.4128455, 26.3368055 ], [ 88.4128403, 26.3367125 ], [ 88.4127576, 26.3366247 ], [ 88.4126956, 26.3365472 ], [ 88.412601, 26.336542 ], [ 88.4125339, 26.3365575 ], [ 88.4123323, 26.3366143 ], [ 88.412167, 26.3365782 ], [ 88.4121618, 26.3364851 ], [ 88.4121618, 26.3363663 ], [ 88.4120998, 26.3362733 ], [ 88.412012, 26.3362836 ], [ 88.4118724, 26.3363198 ], [ 88.4117329, 26.3363818 ], [ 88.4116399, 26.3363818 ], [ 88.4115211, 26.3362733 ], [ 88.4113609, 26.3361389 ], [ 88.4112007, 26.3359374 ], [ 88.4110457, 26.3357669 ], [ 88.4109216, 26.335648 ], [ 88.4108441, 26.3355447 ], [ 88.41087, 26.3354568 ], [ 88.4109992, 26.3353742 ], [ 88.4112058, 26.335307 ], [ 88.4113919, 26.3352863 ], [ 88.4115107, 26.3353483 ], [ 88.4116141, 26.3354207 ], [ 88.4117536, 26.3354465 ], [ 88.4119603, 26.335431 ], [ 88.4121825, 26.3353948 ], [ 88.4124202, 26.3353121 ], [ 88.4125597, 26.3352295 ], [ 88.4125649, 26.3351571 ], [ 88.4125235, 26.3350641 ], [ 88.4124305, 26.3349711 ], [ 88.4123272, 26.3348833 ], [ 88.4122652, 26.3347799 ], [ 88.4121411, 26.3346972 ], [ 88.4119965, 26.3346404 ], [ 88.4118569, 26.3346507 ], [ 88.4117278, 26.3346145 ], [ 88.4116967, 26.334537 ], [ 88.4117123, 26.3344182 ], [ 88.4117123, 26.3342683 ], [ 88.4117123, 26.3341805 ], [ 88.4116709, 26.3340926 ], [ 88.4115366, 26.3340875 ], [ 88.411428, 26.334134 ], [ 88.411335, 26.3341908 ], [ 88.4112343, 26.3342528 ], [ 88.4110844, 26.3343252 ], [ 88.4109346, 26.334382 ], [ 88.4108519, 26.3343923 ], [ 88.4107692, 26.3343407 ], [ 88.4107589, 26.3342322 ], [ 88.4108002, 26.3340901 ], [ 88.4108725, 26.3339764 ], [ 88.4109707, 26.3338627 ], [ 88.4110224, 26.3337128 ], [ 88.4110224, 26.3335837 ], [ 88.4110017, 26.3334338 ], [ 88.4109501, 26.3333356 ], [ 88.410826, 26.3332374 ], [ 88.4106917, 26.3332374 ], [ 88.410547, 26.3332581 ], [ 88.4104385, 26.3333046 ], [ 88.4103816, 26.3334183 ], [ 88.4103351, 26.333532 ], [ 88.4102731, 26.333625 ], [ 88.4102266, 26.3336818 ], [ 88.4101233, 26.3336663 ], [ 88.4100664, 26.3335837 ], [ 88.4099786, 26.333439 ], [ 88.4099734, 26.3332891 ], [ 88.4099941, 26.3331599 ], [ 88.4100354, 26.3329687 ], [ 88.4100303, 26.3328499 ], [ 88.4099683, 26.3327879 ], [ 88.4098701, 26.332762 ], [ 88.4096634, 26.3328395 ], [ 88.4095445, 26.3328964 ], [ 88.409436, 26.3329739 ], [ 88.4092898, 26.3330721 ], [ 88.4091813, 26.3331703 ], [ 88.4090262, 26.3333046 ], [ 88.4088867, 26.3334131 ], [ 88.408773, 26.3333925 ], [ 88.4087007, 26.3332478 ], [ 88.408649, 26.3330979 ], [ 88.4085922, 26.3329687 ], [ 88.4085767, 26.3328034 ], [ 88.4086025, 26.3326432 ], [ 88.4086335, 26.3325502 ], [ 88.4086852, 26.3324546 ], [ 88.4087885, 26.3323461 ], [ 88.4087679, 26.3322324 ], [ 88.408711, 26.33216 ], [ 88.408618, 26.332036 ], [ 88.4084785, 26.3319068 ], [ 88.4084113, 26.3318603 ], [ 88.4082925, 26.3318552 ], [ 88.408184, 26.3318655 ], [ 88.4080703, 26.3319172 ], [ 88.4079928, 26.3319688 ], [ 88.4078998, 26.3320412 ], [ 88.4077706, 26.3321704 ], [ 88.4076192, 26.3322272 ], [ 88.4074951, 26.3322479 ], [ 88.4072936, 26.3322479 ], [ 88.4070818, 26.332222 ], [ 88.4068802, 26.3321497 ], [ 88.4068079, 26.3320515 ], [ 88.4068182, 26.3319482 ], [ 88.4068285, 26.3318242 ], [ 88.4068285, 26.3316691 ], [ 88.4068079, 26.3315555 ], [ 88.4067562, 26.3314779 ], [ 88.406658, 26.3313953 ], [ 88.406534, 26.3313126 ], [ 88.4064255, 26.3312299 ], [ 88.4063531, 26.3311162 ], [ 88.406317, 26.3310025 ], [ 88.4063738, 26.3309147 ], [ 88.4064823, 26.3308604 ], [ 88.4066134, 26.3308205 ], [ 88.40672, 26.3307881 ], [ 88.4069267, 26.3307519 ], [ 88.4069732, 26.3306486 ], [ 88.4069732, 26.3305401 ], [ 88.4069061, 26.3304005 ], [ 88.4068285, 26.3302869 ], [ 88.40672, 26.330199 ], [ 88.4065857, 26.330199 ], [ 88.4064152, 26.3301938 ], [ 88.4062756, 26.3302404 ], [ 88.4061645, 26.3303075 ], [ 88.4059992, 26.3304057 ], [ 88.4058907, 26.3304936 ], [ 88.4058338, 26.3306434 ], [ 88.4057718, 26.3307881 ], [ 88.405684, 26.3308863 ], [ 88.4054979, 26.3308759 ], [ 88.4053946, 26.3308191 ], [ 88.4052861, 26.3306951 ], [ 88.4051776, 26.3305452 ], [ 88.4051724, 26.330447 ], [ 88.4051982, 26.3303282 ], [ 88.4051982, 26.3301783 ], [ 88.405211, 26.3300789 ], [ 88.4052241, 26.3299768 ], [ 88.4052189, 26.3298115 ], [ 88.4051724, 26.3297184 ], [ 88.4051052, 26.3296409 ], [ 88.4050148, 26.3296203 ], [ 88.4048443, 26.3295944 ], [ 88.4047151, 26.3296409 ], [ 88.4046169, 26.3296874 ], [ 88.4044567, 26.3297236 ], [ 88.4043224, 26.3297288 ], [ 88.4042294, 26.3296926 ], [ 88.4041725, 26.3296099 ], [ 88.4041725, 26.3295066 ], [ 88.404219, 26.329212 ], [ 88.4042397, 26.3290544 ], [ 88.404281, 26.3288064 ], [ 88.4042345, 26.3286824 ], [ 88.4041518, 26.3285842 ], [ 88.4040227, 26.3285894 ], [ 88.4039761, 26.3286824 ], [ 88.403816, 26.3288116 ], [ 88.4036868, 26.3289252 ], [ 88.4035266, 26.3289666 ], [ 88.4034077, 26.3289924 ], [ 88.4033457, 26.3289511 ], [ 88.4033096, 26.3288684 ], [ 88.4033147, 26.3287341 ], [ 88.4033664, 26.32861 ], [ 88.4034336, 26.3284705 ], [ 88.4034956, 26.3283258 ], [ 88.4035608, 26.328172 ], [ 88.4041339, 26.328115 ], [ 88.4045835, 26.328115 ], [ 88.40529, 26.3280829 ], [ 88.4059163, 26.3280026 ], [ 88.4066389, 26.3279223 ], [ 88.407119, 26.3278999 ], [ 88.407883, 26.327722 ], [ 88.4078097, 26.3273034 ], [ 88.4077574, 26.326958 ], [ 88.4077051, 26.3265499 ], [ 88.4075795, 26.3258173 ], [ 88.4073388, 26.3250115 ], [ 88.4072237, 26.324551 ], [ 88.40696, 26.3237394 ], [ 88.407433, 26.3236091 ], [ 88.4080504, 26.3235045 ], [ 88.4088772, 26.3232847 ], [ 88.4093795, 26.3232428 ], [ 88.4101644, 26.3231696 ], [ 88.4101644, 26.3233684 ], [ 88.4110435, 26.3233056 ], [ 88.4114432, 26.3233058 ], [ 88.4121738, 26.3234312 ], [ 88.4122156, 26.3235777 ], [ 88.4123936, 26.3235986 ], [ 88.412875, 26.3236928 ], [ 88.4132831, 26.3237766 ], [ 88.4135761, 26.3238289 ], [ 88.4139529, 26.3239231 ], [ 88.4144657, 26.3240801 ], [ 88.4151364, 26.3242532 ], [ 88.4156117, 26.3243977 ], [ 88.4156438, 26.324205 ], [ 88.415692, 26.3233058 ], [ 88.4157739, 26.322751 ], [ 88.4161401, 26.3227091 ], [ 88.4160878, 26.3218195 ], [ 88.4164627, 26.3216519 ], [ 88.4164332, 26.3211079 ], [ 88.4163494, 26.3206736 ], [ 88.4160613, 26.3200462 ], [ 88.4157634, 26.3194596 ], [ 88.4154494, 26.3186747 ], [ 88.4153657, 26.3182142 ], [ 88.4152506, 26.3178375 ], [ 88.4151669, 26.3173142 ], [ 88.4150844, 26.3168766 ], [ 88.4151669, 26.3163514 ], [ 88.4152715, 26.3158386 ], [ 88.415282, 26.3155351 ], [ 88.4151355, 26.3153049 ], [ 88.414796, 26.3151808 ], [ 88.4146675, 26.3151005 ], [ 88.4142982, 26.3152451 ], [ 88.4138807, 26.315518 ], [ 88.4134953, 26.3158552 ], [ 88.4130618, 26.31608 ], [ 88.4128595, 26.3160334 ], [ 88.4126764, 26.3159034 ], [ 88.412275, 26.3157428 ], [ 88.4120502, 26.3156465 ], [ 88.4116857, 26.3157214 ], [ 88.4113142, 26.3159888 ], [ 88.4106323, 26.3161764 ], [ 88.4103112, 26.3162888 ], [ 88.4097973, 26.3160479 ], [ 88.4095997, 26.3161225 ], [ 88.4092514, 26.3160479 ], [ 88.4089608, 26.3159888 ], [ 88.4086636, 26.3161077 ], [ 88.4083664, 26.3161522 ], [ 88.408203, 26.3161522 ], [ 88.4076978, 26.3160928 ], [ 88.4072224, 26.3162562 ], [ 88.4068807, 26.3161968 ], [ 88.4065389, 26.3161671 ], [ 88.4061636, 26.3162567 ], [ 88.4056497, 26.3160961 ], [ 88.4053125, 26.3161443 ], [ 88.4052965, 26.3165136 ], [ 88.4052965, 26.3168187 ], [ 88.4050556, 26.3169792 ], [ 88.404606, 26.3168347 ], [ 88.404317, 26.3166581 ], [ 88.4039637, 26.3166581 ], [ 88.4036586, 26.3167544 ], [ 88.4032572, 26.3170435 ], [ 88.4030484, 26.3171559 ], [ 88.4025186, 26.317204 ], [ 88.4015005, 26.31718 ], [ 88.4008101, 26.317196 ], [ 88.4002802, 26.317196 ], [ 88.3998787, 26.3170676 ], [ 88.3995094, 26.3167785 ], [ 88.3993488, 26.3166501 ], [ 88.3992204, 26.3165698 ], [ 88.3986744, 26.3167946 ], [ 88.3982854, 26.3169351 ], [ 88.3979813, 26.3168031 ], [ 88.3977913, 26.3165377 ], [ 88.3976391, 26.3164197 ], [ 88.3975367, 26.3163172 ], [ 88.3974343, 26.3161124 ], [ 88.3973026, 26.3158782 ], [ 88.3971855, 26.3156002 ], [ 88.3969075, 26.3156441 ], [ 88.3967465, 26.3159221 ], [ 88.396481, 26.316072 ], [ 88.3961117, 26.3160559 ], [ 88.3957075, 26.3159442 ], [ 88.3954373, 26.3158954 ], [ 88.3950359, 26.3156063 ], [ 88.3947418, 26.315127 ], [ 88.3943555, 26.3147259 ], [ 88.3938354, 26.3145773 ], [ 88.3934789, 26.3146367 ], [ 88.3931966, 26.3146813 ], [ 88.392736, 26.3145476 ], [ 88.3922605, 26.314503 ], [ 88.391577, 26.3143693 ], [ 88.3911165, 26.3141613 ], [ 88.3907153, 26.3138641 ], [ 88.3904708, 26.3135028 ], [ 88.3902547, 26.3131212 ], [ 88.3901507, 26.3128092 ], [ 88.3897198, 26.3124675 ], [ 88.3892146, 26.3128389 ], [ 88.3889026, 26.3130321 ], [ 88.3886203, 26.3134184 ], [ 88.388754, 26.3137898 ], [ 88.3891701, 26.3139978 ], [ 88.3896358, 26.3141451 ], [ 88.3898387, 26.314503 ], [ 88.3897347, 26.3148299 ], [ 88.3894524, 26.3150379 ], [ 88.3889621, 26.314919 ], [ 88.3883994, 26.3147232 ], [ 88.3879071, 26.3143099 ], [ 88.38761, 26.3140127 ], [ 88.3873075, 26.3135992 ], [ 88.3871345, 26.3132698 ], [ 88.3868225, 26.3131807 ], [ 88.3863491, 26.3131399 ], [ 88.3855745, 26.3131361 ], [ 88.3851287, 26.3132401 ], [ 88.3845344, 26.313463 ], [ 88.3842967, 26.3132698 ], [ 88.3841266, 26.3126973 ], [ 88.3841481, 26.3119177 ], [ 88.3842818, 26.3112343 ], [ 88.3845047, 26.3108331 ], [ 88.3843561, 26.3103577 ], [ 88.3841332, 26.3100308 ], [ 88.3837024, 26.3103428 ], [ 88.3834795, 26.3111154 ], [ 88.3834498, 26.3116206 ], [ 88.3831675, 26.3117097 ], [ 88.3829446, 26.3115017 ], [ 88.383004, 26.3112343 ], [ 88.3832269, 26.3105954 ], [ 88.383481, 26.3100104 ], [ 88.3835934, 26.3094484 ], [ 88.3837861, 26.3090469 ], [ 88.3838407, 26.3088623 ], [ 88.3832948, 26.3086857 ], [ 88.382276, 26.308441 ], [ 88.3816223, 26.3085747 ], [ 88.3814588, 26.308857 ], [ 88.3811913, 26.3092958 ], [ 88.3808645, 26.3096445 ], [ 88.3803296, 26.3096742 ], [ 88.3798906, 26.3095046 ], [ 88.3796462, 26.3094216 ], [ 88.3795273, 26.3092433 ], [ 88.3793639, 26.308961 ], [ 88.3792599, 26.3086787 ], [ 88.3790155, 26.3082521 ], [ 88.3790816, 26.3076832 ], [ 88.3788884, 26.3067918 ], [ 88.3784214, 26.3063734 ], [ 88.3783411, 26.3060523 ], [ 88.3774472, 26.3057517 ], [ 88.3762883, 26.3058557 ], [ 88.3755311, 26.3063734 ], [ 88.3749851, 26.3063413 ], [ 88.3747764, 26.3057311 ], [ 88.3747282, 26.3052815 ], [ 88.37468, 26.3048319 ], [ 88.3749144, 26.3046842 ], [ 88.3750754, 26.3044208 ], [ 88.3747388, 26.3040257 ], [ 88.3742587, 26.3038316 ], [ 88.3740075, 26.3036504 ], [ 88.3736706, 26.303177 ], [ 88.3732902, 26.3027965 ], [ 88.3729536, 26.3026795 ], [ 88.372661, 26.302899 ], [ 88.3724415, 26.3033526 ], [ 88.372339, 26.3037769 ], [ 88.3722513, 26.3042452 ], [ 88.3722659, 26.304611 ], [ 88.3725439, 26.3048598 ], [ 88.3727927, 26.304889 ], [ 88.3731146, 26.3049037 ], [ 88.3734072, 26.3050061 ], [ 88.3733048, 26.3054451 ], [ 88.3731585, 26.3056353 ], [ 88.3728366, 26.3057816 ], [ 88.3725439, 26.3058548 ], [ 88.3719278, 26.3057151 ], [ 88.3713258, 26.3054991 ], [ 88.3706914, 26.3053939 ], [ 88.3704046, 26.305202 ], [ 88.3700331, 26.3048157 ], [ 88.3698697, 26.3039093 ], [ 88.3694982, 26.3037162 ], [ 88.3691714, 26.303211 ], [ 88.3689931, 26.3029139 ], [ 88.3689931, 26.3022601 ], [ 88.3691427, 26.3017908 ], [ 88.3692661, 26.3013712 ], [ 88.3692661, 26.3008775 ], [ 88.3691427, 26.3004825 ], [ 88.368649, 26.3000135 ], [ 88.3684021, 26.2995939 ], [ 88.368254, 26.2993223 ], [ 88.367785, 26.2991496 ], [ 88.3671185, 26.2993223 ], [ 88.3665754, 26.2994458 ], [ 88.3658596, 26.2996433 ], [ 88.3654262, 26.3002636 ], [ 88.3650697, 26.3001616 ], [ 88.3648228, 26.2999395 ], [ 88.3644772, 26.2995692 ], [ 88.3640082, 26.2991742 ], [ 88.3636873, 26.2987793 ], [ 88.3635639, 26.2984584 ], [ 88.3633664, 26.2980634 ], [ 88.3630527, 26.2976679 ], [ 88.3629665, 26.297076 ], [ 88.3632264, 26.2960807 ], [ 88.3632264, 26.2954384 ], [ 88.3635837, 26.2948297 ], [ 88.3638305, 26.2943854 ], [ 88.3637811, 26.2940645 ], [ 88.3635837, 26.2936942 ], [ 88.3631887, 26.2935214 ], [ 88.362695, 26.2934227 ], [ 88.3623741, 26.2931265 ], [ 88.3620532, 26.2926575 ], [ 88.3617732, 26.2923393 ], [ 88.3616582, 26.2919416 ], [ 88.3612139, 26.2916701 ], [ 88.3607202, 26.2914726 ], [ 88.3603499, 26.2913492 ], [ 88.360029, 26.2912504 ], [ 88.3597328, 26.2909542 ], [ 88.3595353, 26.2905346 ], [ 88.3594366, 26.2902384 ], [ 88.3593132, 26.2898681 ], [ 88.3592391, 26.2895225 ], [ 88.3591651, 26.2892016 ], [ 88.359091, 26.2888807 ], [ 88.3589676, 26.2886338 ], [ 88.3589429, 26.288387 ], [ 88.3587454, 26.2881895 ], [ 88.3583752, 26.2877946 ], [ 88.3581283, 26.2873749 ], [ 88.3578321, 26.2871774 ], [ 88.357289, 26.2870787 ], [ 88.3570422, 26.2870293 ], [ 88.3566472, 26.2869553 ], [ 88.3562029, 26.2868319 ], [ 88.3559561, 26.2866097 ], [ 88.3557339, 26.2862394 ], [ 88.3552491, 26.2861653 ], [ 88.3548798, 26.2860369 ], [ 88.3544944, 26.2859887 ], [ 88.3542536, 26.2861653 ], [ 88.3546231, 26.2865356 ], [ 88.354475, 26.2869553 ], [ 88.3541572, 26.2872268 ], [ 88.353756, 26.2871706 ], [ 88.3537097, 26.2869059 ], [ 88.3536851, 26.286511 ], [ 88.3536604, 26.2860419 ], [ 88.3533395, 26.2858198 ], [ 88.3529939, 26.2855482 ], [ 88.352673, 26.2853014 ], [ 88.3523813, 26.2850252 ], [ 88.3522528, 26.2845275 ], [ 88.3522368, 26.2840458 ], [ 88.3523768, 26.2836228 ], [ 88.3523521, 26.2830551 ], [ 88.3520559, 26.2826108 ], [ 88.3514634, 26.2825614 ], [ 88.3508398, 26.2827772 ], [ 88.3502778, 26.2827451 ], [ 88.3497479, 26.2827451 ], [ 88.3495412, 26.2824716 ], [ 88.3494973, 26.2821936 ], [ 88.3494107, 26.2820145 ], [ 88.3494589, 26.281886 ], [ 88.3496194, 26.2816291 ], [ 88.3499085, 26.2809708 ], [ 88.3500209, 26.2806015 ], [ 88.350069, 26.2800555 ], [ 88.350053, 26.2796862 ], [ 88.3499566, 26.2795096 ], [ 88.3495231, 26.2791081 ], [ 88.3493144, 26.2790921 ], [ 88.3490896, 26.2789636 ], [ 88.3490729, 26.2783891 ], [ 88.348945, 26.2780644 ], [ 88.348945, 26.2778075 ], [ 88.3491217, 26.277663 ], [ 88.3493304, 26.2775506 ], [ 88.3496355, 26.2774382 ], [ 88.3499245, 26.2771491 ], [ 88.3502778, 26.2767959 ], [ 88.350615, 26.2765229 ], [ 88.3512894, 26.2761857 ], [ 88.3513857, 26.275993 ], [ 88.3512573, 26.2756879 ], [ 88.3507916, 26.2754952 ], [ 88.3503099, 26.275415 ], [ 88.3496676, 26.2752062 ], [ 88.349202, 26.2749172 ], [ 88.3487845, 26.2745479 ], [ 88.3487202, 26.2742428 ], [ 88.348656, 26.2739698 ], [ 88.3486399, 26.2736647 ], [ 88.3488326, 26.273472 ], [ 88.349218, 26.2732472 ], [ 88.3494589, 26.2728619 ], [ 88.3496194, 26.2725728 ], [ 88.3495231, 26.2721874 ], [ 88.3496368, 26.2718235 ], [ 88.349538, 26.2714779 ], [ 88.3493405, 26.2710583 ], [ 88.3490443, 26.2707127 ], [ 88.3485791, 26.2706593 ], [ 88.3483815, 26.2704618 ], [ 88.3482608, 26.2702972 ], [ 88.3482498, 26.2700338 ], [ 88.3482706, 26.2696424 ], [ 88.3480743, 26.2691668 ], [ 88.3482059, 26.2688266 ], [ 88.3483925, 26.2685193 ], [ 88.3484254, 26.2683108 ], [ 88.3484005, 26.2680449 ], [ 88.3486998, 26.267762 ], [ 88.3489742, 26.2676194 ], [ 88.3492485, 26.2675864 ], [ 88.3497424, 26.2677072 ], [ 88.3501375, 26.2678498 ], [ 88.350357, 26.2679925 ], [ 88.3504887, 26.2683547 ], [ 88.3505476, 26.2686456 ], [ 88.3509204, 26.2686392 ], [ 88.3510932, 26.268417 ], [ 88.3513894, 26.2681702 ], [ 88.3515128, 26.267948 ], [ 88.3517103, 26.2677258 ], [ 88.3519078, 26.267479 ], [ 88.3519078, 26.2671334 ], [ 88.3517596, 26.2666644 ], [ 88.3515375, 26.2658498 ], [ 88.3511185, 26.2656715 ], [ 88.3510646, 26.2651865 ], [ 88.3511837, 26.2646385 ], [ 88.3512906, 26.2641466 ], [ 88.3513153, 26.2635788 ], [ 88.3512413, 26.2630851 ], [ 88.3510438, 26.2627642 ], [ 88.3507969, 26.2626161 ], [ 88.3503526, 26.2622458 ], [ 88.3501551, 26.2619496 ], [ 88.3500317, 26.2615053 ], [ 88.3502786, 26.2606413 ], [ 88.350402, 26.2599748 ], [ 88.3502786, 26.2594565 ], [ 88.350007, 26.2590615 ], [ 88.3499577, 26.258395 ], [ 88.3498589, 26.2578766 ], [ 88.3498836, 26.2574076 ], [ 88.3499083, 26.2570127 ], [ 88.3496861, 26.2564696 ], [ 88.349538, 26.2559018 ], [ 88.348995, 26.2554822 ], [ 88.3483778, 26.2550626 ], [ 88.3482544, 26.2546429 ], [ 88.3481422, 26.2543157 ], [ 88.3482544, 26.2540999 ], [ 88.3484954, 26.2539062 ], [ 88.3486399, 26.2534406 ], [ 88.3490253, 26.2528304 ], [ 88.3489771, 26.252156 ], [ 88.3488647, 26.2519633 ], [ 88.348656, 26.2517064 ], [ 88.3485753, 26.2513845 ], [ 88.3485259, 26.2510883 ], [ 88.3484571, 26.2506149 ], [ 88.3488513, 26.2504628 ], [ 88.3493283, 26.2502442 ], [ 88.3499642, 26.2501051 ], [ 88.350402, 26.2504712 ], [ 88.3511425, 26.2504959 ], [ 88.3519078, 26.2501256 ], [ 88.3527068, 26.2494095 ], [ 88.3532644, 26.2490088 ], [ 88.3539389, 26.2483344 ], [ 88.3544527, 26.2478205 ], [ 88.3547096, 26.247403 ], [ 88.3546133, 26.2471622 ], [ 88.3540031, 26.2468892 ], [ 88.3534571, 26.246841 ], [ 88.352667, 26.2472135 ], [ 88.3519156, 26.2473709 ], [ 88.3512252, 26.2476439 ], [ 88.3508873, 26.247991 ], [ 88.3504865, 26.2482059 ], [ 88.3501333, 26.2480774 ], [ 88.3499888, 26.2478687 ], [ 88.3500209, 26.2474512 ], [ 88.3503617, 26.2470147 ], [ 88.3507435, 26.2470016 ], [ 88.3509361, 26.2464075 ], [ 88.3511609, 26.2459579 ], [ 88.3515938, 26.2456832 ], [ 88.3519435, 26.2455809 ], [ 88.3524087, 26.2454447 ], [ 88.3527346, 26.2456849 ], [ 88.3530878, 26.2457812 ], [ 88.3534411, 26.2456528 ], [ 88.3542867, 26.245405 ], [ 88.3550022, 26.2450472 ], [ 88.3557772, 26.24461 ], [ 88.3564331, 26.2442722 ], [ 88.3569958, 26.2440988 ], [ 88.3574072, 26.2438704 ], [ 88.3577235, 26.2438746 ], [ 88.3582583, 26.2437099 ], [ 88.3584028, 26.243469 ], [ 88.3586597, 26.2432281 ], [ 88.3589117, 26.2430818 ], [ 88.3591575, 26.2429391 ], [ 88.3596923, 26.2423941 ], [ 88.3599507, 26.2418575 ], [ 88.3599507, 26.241321 ], [ 88.3596128, 26.2406055 ], [ 88.358957, 26.2398901 ], [ 88.3582416, 26.2393734 ], [ 88.3575658, 26.2390752 ], [ 88.3568703, 26.2390355 ], [ 88.3560753, 26.2389361 ], [ 88.3556779, 26.2388268 ], [ 88.3550817, 26.2382107 ], [ 88.3546444, 26.237694 ], [ 88.3545252, 26.2373562 ], [ 88.3545252, 26.2367004 ], [ 88.3548829, 26.2362035 ], [ 88.3553798, 26.2359253 ], [ 88.3559362, 26.2356868 ], [ 88.356277, 26.2353148 ], [ 88.3565126, 26.2349912 ], [ 88.3566966, 26.2346236 ], [ 88.3564013, 26.2339479 ], [ 88.3559314, 26.2332659 ], [ 88.3559314, 26.2328216 ], [ 88.3559442, 26.2322785 ], [ 88.3557057, 26.2321195 ], [ 88.3550697, 26.2319406 ], [ 88.3546325, 26.2318214 ], [ 88.3541357, 26.2314835 ], [ 88.3537978, 26.2312252 ], [ 88.3533209, 26.2309867 ], [ 88.3529035, 26.2308277 ], [ 88.3523272, 26.2305892 ], [ 88.352049, 26.2303706 ], [ 88.3517906, 26.2301719 ], [ 88.3514329, 26.2298539 ], [ 88.3510821, 26.2298691 ], [ 88.3507274, 26.2298845 ], [ 88.3506471, 26.2296276 ], [ 88.3506471, 26.2292744 ], [ 88.3508559, 26.2286481 ], [ 88.3510485, 26.2282306 ], [ 88.3513931, 26.2276082 ], [ 88.3519098, 26.2274293 ], [ 88.3532414, 26.2267934 ], [ 88.3534275, 26.2266338 ], [ 88.3536587, 26.2264357 ], [ 88.3536587, 26.226132 ], [ 88.3532901, 26.2259345 ], [ 88.3530926, 26.2257371 ], [ 88.3526236, 26.2253915 ], [ 88.3521881, 26.2250445 ], [ 88.3516515, 26.2252035 ], [ 88.3513215, 26.22526 ], [ 88.3508719, 26.2254527 ], [ 88.3505783, 26.2257202 ], [ 88.3504062, 26.2259344 ], [ 88.3501493, 26.2261914 ], [ 88.3498924, 26.2260468 ], [ 88.3497479, 26.2257899 ], [ 88.3498282, 26.2252761 ], [ 88.3499566, 26.2247783 ], [ 88.3501808, 26.2243092 ], [ 88.3504193, 26.2239515 ], [ 88.350615, 26.2235901 ], [ 88.350904, 26.223285 ], [ 88.3512858, 26.2228783 ], [ 88.3514981, 26.2225464 ], [ 88.3515303, 26.2220807 ], [ 88.3514981, 26.2217274 ], [ 88.3512659, 26.2212089 ], [ 88.3510685, 26.2209482 ], [ 88.3509697, 26.2207014 ], [ 88.3507229, 26.2204792 ], [ 88.3503773, 26.2203805 ], [ 88.3498487, 26.2202786 ], [ 88.3495171, 26.2205531 ], [ 88.3491677, 26.2206026 ], [ 88.3486987, 26.2207507 ], [ 88.348131, 26.2208988 ], [ 88.3478348, 26.2209976 ], [ 88.3475297, 26.2211692 ], [ 88.3472316, 26.2209108 ], [ 88.3469931, 26.2206326 ], [ 88.3466751, 26.2203146 ], [ 88.3462379, 26.2198178 ], [ 88.3459199, 26.219619 ], [ 88.3455026, 26.2196389 ], [ 88.344966, 26.2195793 ], [ 88.3444294, 26.2195395 ], [ 88.3439326, 26.2195395 ], [ 88.3432728, 26.2195395 ], [ 88.342776, 26.2195197 ], [ 88.3423785, 26.2195197 ], [ 88.3420406, 26.2194402 ], [ 88.3417028, 26.2192216 ], [ 88.3413252, 26.2189433 ], [ 88.3410072, 26.2185856 ], [ 88.3408085, 26.2182478 ], [ 88.34038, 26.2181095 ], [ 88.3400097, 26.2178873 ], [ 88.3395654, 26.2175664 ], [ 88.339047, 26.2174924 ], [ 88.3384792, 26.2175664 ], [ 88.3377387, 26.2173689 ], [ 88.337171, 26.2172455 ], [ 88.3367266, 26.2170974 ], [ 88.3362823, 26.2169246 ], [ 88.3359614, 26.2168259 ], [ 88.3354183, 26.2166284 ], [ 88.3348506, 26.2162334 ], [ 88.3342004, 26.2156666 ], [ 88.3335069, 26.2157139 ], [ 88.3327771, 26.2156904 ], [ 88.3321599, 26.2159866 ], [ 88.3319036, 26.2164513 ], [ 88.3318392, 26.216568 ], [ 88.3317183, 26.2167871 ], [ 88.3312413, 26.2166082 ], [ 88.3311221, 26.216171 ], [ 88.331142, 26.2155748 ], [ 88.3313208, 26.2148196 ], [ 88.3316786, 26.2141041 ], [ 88.3317779, 26.2132496 ], [ 88.3315428, 26.2128269 ], [ 88.3312811, 26.2124944 ], [ 88.3309035, 26.2124546 ], [ 88.3304861, 26.2124745 ], [ 88.3300291, 26.2126335 ], [ 88.3294726, 26.2130707 ], [ 88.328936, 26.2133291 ], [ 88.3287174, 26.2130508 ], [ 88.3283736, 26.212713 ], [ 88.3279562, 26.2124149 ], [ 88.3274197, 26.2120373 ], [ 88.3270023, 26.2118783 ], [ 88.3268831, 26.2113218 ], [ 88.3267638, 26.2108647 ], [ 88.326426, 26.2104871 ], [ 88.3259093, 26.2102288 ], [ 88.3255913, 26.2102089 ], [ 88.3249951, 26.2102089 ], [ 88.324538, 26.2101692 ], [ 88.3238027, 26.2100102 ], [ 88.3233257, 26.2098512 ], [ 88.3232462, 26.2095531 ], [ 88.3232462, 26.208937 ], [ 88.3234648, 26.2083607 ], [ 88.3238822, 26.2077048 ], [ 88.32422, 26.2072676 ], [ 88.3248162, 26.2067907 ], [ 88.3251342, 26.2067112 ], [ 88.3256907, 26.2066118 ], [ 88.3258894, 26.2064329 ], [ 88.325949, 26.2060752 ], [ 88.3260285, 26.2058367 ], [ 88.3258894, 26.2052405 ], [ 88.3256509, 26.2049822 ], [ 88.3253329, 26.2047039 ], [ 88.3248758, 26.2043661 ], [ 88.3243194, 26.2041872 ], [ 88.3235244, 26.2041872 ], [ 88.3230077, 26.2041674 ], [ 88.3224473, 26.2041872 ], [ 88.3220896, 26.2041674 ], [ 88.3214536, 26.2041475 ], [ 88.3207978, 26.2038692 ], [ 88.3202866, 26.2036195 ], [ 88.319941, 26.203348 ], [ 88.3196448, 26.2031999 ], [ 88.3193073, 26.2030346 ], [ 88.3185093, 26.202879 ], [ 88.3181143, 26.2030764 ], [ 88.3177934, 26.2034714 ], [ 88.3174972, 26.2036689 ], [ 88.3171763, 26.2038417 ], [ 88.3169224, 26.204227 ], [ 88.3164111, 26.2045082 ], [ 88.3157939, 26.2046069 ], [ 88.3153249, 26.2044094 ], [ 88.3149547, 26.2042119 ], [ 88.3144363, 26.2039157 ], [ 88.3141648, 26.2036936 ], [ 88.3139673, 26.2034467 ], [ 88.3132656, 26.2029018 ], [ 88.3128565, 26.2027555 ], [ 88.3122147, 26.2026815 ], [ 88.3114988, 26.2027802 ], [ 88.3108076, 26.2032492 ], [ 88.3103139, 26.2035701 ], [ 88.3097242, 26.2038891 ], [ 88.3091877, 26.2038891 ], [ 88.308663, 26.2038891 ], [ 88.3082457, 26.2039686 ], [ 88.3078084, 26.2037898 ], [ 88.3076296, 26.203432 ], [ 88.3074048, 26.203101 ], [ 88.3072764, 26.2028441 ], [ 88.3069539, 26.2025178 ], [ 88.306616, 26.2022794 ], [ 88.3061391, 26.2018223 ], [ 88.3058211, 26.2015043 ], [ 88.3054459, 26.2009975 ], [ 88.3051795, 26.2004599 ], [ 88.3050561, 26.2000649 ], [ 88.3048339, 26.199744 ], [ 88.3047845, 26.1995959 ], [ 88.3046117, 26.1994231 ], [ 88.3043035, 26.199286 ], [ 88.3039453, 26.1992009 ], [ 88.303649, 26.199275 ], [ 88.3033775, 26.1994231 ], [ 88.3029332, 26.1998921 ], [ 88.3026617, 26.2004352 ], [ 88.302637, 26.200682 ], [ 88.3025876, 26.2009042 ], [ 88.3025382, 26.2011017 ], [ 88.3023407, 26.2012498 ], [ 88.3021186, 26.2013979 ], [ 88.3019211, 26.2014966 ], [ 88.3017236, 26.2015213 ], [ 88.3014768, 26.2014473 ], [ 88.3012641, 26.2015242 ], [ 88.3007856, 26.2010029 ], [ 88.3007856, 26.2001636 ], [ 88.3009831, 26.199275 ], [ 88.301125, 26.1985829 ], [ 88.3014274, 26.1977199 ], [ 88.3012052, 26.1973743 ], [ 88.3006375, 26.1970534 ], [ 88.299971, 26.1970781 ], [ 88.2992305, 26.1968312 ], [ 88.2987861, 26.1967325 ], [ 88.2982678, 26.1970287 ], [ 88.2978234, 26.1977199 ], [ 88.2974038, 26.1982629 ], [ 88.2971323, 26.1987072 ], [ 88.2969348, 26.1990775 ], [ 88.2966386, 26.1993737 ], [ 88.2961696, 26.199744 ], [ 88.2956265, 26.1997934 ], [ 88.2952225, 26.1997554 ], [ 88.2947992, 26.1993778 ], [ 88.2945607, 26.1992387 ], [ 88.2941036, 26.1989804 ], [ 88.293724, 26.1987816 ], [ 88.2931139, 26.1985889 ], [ 88.2920701, 26.1986852 ], [ 88.2913636, 26.1992954 ], [ 88.2916205, 26.1997932 ], [ 88.2919577, 26.2000822 ], [ 88.2923431, 26.2004997 ], [ 88.2927767, 26.200869 ], [ 88.2929854, 26.2011741 ], [ 88.2930336, 26.201431 ], [ 88.2928409, 26.2016398 ], [ 88.2926482, 26.2018806 ], [ 88.2921986, 26.2020251 ], [ 88.2917169, 26.201993 ], [ 88.2912673, 26.2017843 ], [ 88.2906571, 26.2014631 ], [ 88.2902235, 26.2011259 ], [ 88.2901272, 26.2007727 ], [ 88.2901914, 26.2004515 ], [ 88.2901504, 26.2000176 ], [ 88.2895725, 26.1995766 ], [ 88.2892147, 26.1993381 ], [ 88.2888292, 26.1990698 ], [ 88.2885708, 26.1987121 ], [ 88.2882529, 26.1982152 ], [ 88.2880144, 26.1977581 ], [ 88.287542, 26.1973525 ], [ 88.2871406, 26.1971277 ], [ 88.2867231, 26.1973364 ], [ 88.2864983, 26.1974488 ], [ 88.2862092, 26.1976415 ], [ 88.285872, 26.1978663 ], [ 88.2856793, 26.1982677 ], [ 88.2857917, 26.1986692 ], [ 88.2860326, 26.1991509 ], [ 88.2864019, 26.199729 ], [ 88.2864533, 26.2001043 ], [ 88.2862413, 26.2003712 ], [ 88.2857757, 26.20058 ], [ 88.2853742, 26.2004515 ], [ 88.2850049, 26.2000983 ], [ 88.2845553, 26.199456 ], [ 88.2841589, 26.1987319 ], [ 88.2837614, 26.1981556 ], [ 88.2837018, 26.1975793 ], [ 88.2835031, 26.1970626 ], [ 88.2834633, 26.1965657 ], [ 88.2835826, 26.1960689 ], [ 88.2837614, 26.195572 ], [ 88.28398, 26.1950553 ], [ 88.2840794, 26.1945982 ], [ 88.283831, 26.1945486 ], [ 88.2835528, 26.1943101 ], [ 88.2831354, 26.1941511 ], [ 88.282681, 26.1940758 ], [ 88.2823826, 26.1940281 ], [ 88.2820483, 26.1940878 ], [ 88.281726, 26.194243 ], [ 88.2814037, 26.1945175 ], [ 88.2811172, 26.194816 ], [ 88.2806695, 26.1952169 ], [ 88.280268, 26.1953614 ], [ 88.2797221, 26.1951847 ], [ 88.2792725, 26.1946388 ], [ 88.2789032, 26.1940447 ], [ 88.2786944, 26.193563 ], [ 88.2786784, 26.1929367 ], [ 88.2787908, 26.1924389 ], [ 88.2788133, 26.192142 ], [ 88.2784671, 26.1918555 ], [ 88.2782164, 26.1917242 ], [ 88.2779896, 26.1914974 ], [ 88.2777616, 26.1913092 ], [ 88.2774238, 26.1911104 ], [ 88.2771654, 26.1907924 ], [ 88.2768872, 26.1903155 ], [ 88.2767878, 26.1899379 ], [ 88.2766288, 26.1895404 ], [ 88.2764698, 26.1888647 ], [ 88.2762711, 26.1885666 ], [ 88.2758935, 26.1882884 ], [ 88.2755954, 26.1881095 ], [ 88.2751979, 26.1879108 ], [ 88.2748004, 26.1878114 ], [ 88.2743235, 26.1876723 ], [ 88.2738465, 26.1876127 ], [ 88.2733497, 26.1876127 ], [ 88.2729423, 26.1877319 ], [ 88.2726839, 26.1878114 ], [ 88.2725883, 26.188275 ], [ 88.2719369, 26.1883452 ], [ 88.2718066, 26.188427 ], [ 88.2710902, 26.188614 ], [ 88.2701783, 26.1888712 ], [ 88.2691882, 26.1885556 ], [ 88.2684196, 26.1877724 ], [ 88.2682242, 26.1871411 ], [ 88.2680028, 26.1866969 ], [ 88.2679898, 26.1865917 ], [ 88.2679507, 26.1865216 ], [ 88.2677813, 26.1864281 ], [ 88.2672783, 26.1862414 ], [ 88.2670994, 26.1863606 ], [ 88.266853, 26.1864998 ], [ 88.2666742, 26.1866389 ], [ 88.2663363, 26.1869171 ], [ 88.2661574, 26.1871158 ], [ 88.2658792, 26.1874139 ], [ 88.2654022, 26.1878114 ], [ 88.2650644, 26.1880102 ], [ 88.2647663, 26.1881095 ], [ 88.2644483, 26.1880896 ], [ 88.2638919, 26.1880896 ], [ 88.2633553, 26.18803 ], [ 88.2628783, 26.1879307 ], [ 88.2625206, 26.1877518 ], [ 88.2622026, 26.1875729 ], [ 88.2616356, 26.1878953 ], [ 88.2613878, 26.1872748 ], [ 88.2608313, 26.1871158 ], [ 88.2604935, 26.1871158 ], [ 88.2596727, 26.1871556 ], [ 88.259315, 26.1872152 ], [ 88.2588579, 26.1873941 ], [ 88.2584803, 26.1876723 ], [ 88.2579437, 26.1879108 ], [ 88.2573872, 26.1880896 ], [ 88.2568308, 26.1882884 ], [ 88.2564134, 26.1883679 ], [ 88.2559365, 26.1883877 ], [ 88.2555787, 26.1883877 ], [ 88.2552011, 26.1883877 ], [ 88.2549627, 26.1883281 ], [ 88.2547043, 26.1882288 ], [ 88.2544658, 26.1879505 ], [ 88.2543466, 26.1877518 ], [ 88.2540803, 26.1873742 ], [ 88.2538418, 26.1868774 ], [ 88.2533648, 26.1864004 ], [ 88.2530469, 26.1861619 ], [ 88.25255, 26.1858439 ], [ 88.2520134, 26.1858241 ], [ 88.2513377, 26.1859234 ], [ 88.2511787, 26.1862017 ], [ 88.2510794, 26.186778 ], [ 88.2509403, 26.1872152 ], [ 88.2507217, 26.1876922 ], [ 88.2505229, 26.1884474 ], [ 88.250046, 26.1889045 ], [ 88.2496286, 26.1893417 ], [ 88.2492908, 26.1895404 ], [ 88.2486945, 26.1897988 ], [ 88.2480785, 26.1900174 ], [ 88.2478002, 26.1901167 ], [ 88.2473419, 26.1901504 ], [ 88.2463215, 26.1897288 ], [ 88.2456927, 26.1890999 ], [ 88.2455541, 26.187324 ], [ 88.2450305, 26.1869613 ], [ 88.2445588, 26.1868434 ], [ 88.2441002, 26.1868958 ], [ 88.2437693, 26.1871025 ], [ 88.2436953, 26.1874724 ], [ 88.2436953, 26.1880273 ], [ 88.2448471, 26.1890053 ], [ 88.2444933, 26.1891888 ], [ 88.2441133, 26.1890446 ], [ 88.2435106, 26.1885729 ], [ 88.2427336, 26.188804 ], [ 88.2419121, 26.1888088 ], [ 88.2416979, 26.1884711 ], [ 88.241365, 26.1874724 ], [ 88.241365, 26.1867696 ], [ 88.2417349, 26.1859929 ], [ 88.241476, 26.1856969 ], [ 88.2409026, 26.185438 ], [ 88.2399039, 26.1851051 ], [ 88.2389422, 26.1849202 ], [ 88.2382024, 26.1845133 ], [ 88.2378695, 26.1836995 ], [ 88.2370927, 26.1830337 ], [ 88.2365009, 26.1826268 ], [ 88.2357668, 26.1818381 ], [ 88.2353869, 26.1821787 ], [ 88.2349843, 26.1832926 ], [ 88.2341336, 26.1839584 ], [ 88.2335788, 26.1841804 ], [ 88.2332828, 26.1837735 ], [ 88.2333938, 26.1827008 ], [ 88.2333568, 26.1808883 ], [ 88.2337267, 26.1804075 ], [ 88.2343185, 26.1798896 ], [ 88.2351619, 26.1795937 ], [ 88.2367524, 26.1788539 ], [ 88.2371963, 26.1783361 ], [ 88.2371593, 26.1775593 ], [ 88.2366415, 26.1763757 ], [ 88.2360237, 26.1761537 ], [ 88.2346551, 26.1762647 ], [ 88.2336564, 26.1762647 ], [ 88.2333235, 26.1754509 ], [ 88.2332865, 26.1734905 ], [ 88.2329167, 26.1727877 ], [ 88.2319179, 26.1726028 ], [ 88.2305863, 26.1725658 ], [ 88.2294027, 26.1726028 ], [ 88.2285149, 26.1730096 ], [ 88.2276272, 26.1732686 ], [ 88.2267025, 26.1728617 ], [ 88.2261846, 26.1725843 ], [ 88.2258147, 26.1722514 ], [ 88.2258147, 26.1714376 ], [ 88.2260736, 26.1708828 ], [ 88.2268134, 26.1704759 ], [ 88.2281081, 26.1702539 ], [ 88.228367, 26.1698471 ], [ 88.2282065, 26.1689711 ], [ 88.2274072, 26.1681849 ], [ 88.2264769, 26.1682505 ], [ 88.224816, 26.1692182 ], [ 88.2242205, 26.1696251 ], [ 88.2236656, 26.1687744 ], [ 88.2236656, 26.1676647 ], [ 88.2231108, 26.166518 ], [ 88.222593, 26.1659262 ], [ 88.2209344, 26.1659444 ], [ 88.2196111, 26.1660492 ], [ 88.2184502, 26.1662221 ], [ 88.2178953, 26.1668879 ], [ 88.2176475, 26.167106 ], [ 88.2174753, 26.1677086 ], [ 88.2172171, 26.1683326 ], [ 88.217129, 26.168817 ], [ 88.2168943, 26.1692365 ], [ 88.2168512, 26.1697745 ], [ 88.2160459, 26.170143 ], [ 88.2148622, 26.170143 ], [ 88.2135676, 26.1696621 ], [ 88.2121949, 26.1680539 ], [ 88.212088, 26.1674058 ], [ 88.2128369, 26.1670843 ], [ 88.214501, 26.1661147 ], [ 88.2155099, 26.1654464 ], [ 88.2162678, 26.1646686 ], [ 88.2163048, 26.1640028 ], [ 88.215713, 26.163078 ], [ 88.2144183, 26.1620793 ], [ 88.2124579, 26.1611546 ], [ 88.2117144, 26.1606367 ], [ 88.2106787, 26.1603778 ], [ 88.209828, 26.1604888 ], [ 88.2086443, 26.1605258 ], [ 88.2076826, 26.1604518 ], [ 88.2070538, 26.159712 ], [ 88.206351, 26.1591942 ], [ 88.2055002, 26.1590462 ], [ 88.2047975, 26.1588613 ], [ 88.2040577, 26.1587503 ], [ 88.2032069, 26.1588613 ], [ 88.2021712, 26.1589352 ], [ 88.2011355, 26.1588613 ], [ 88.2006547, 26.1595271 ], [ 88.2003957, 26.1605628 ], [ 88.2002848, 26.1614875 ], [ 88.199323, 26.1626342 ], [ 88.1982504, 26.163226 ], [ 88.1975106, 26.1634109 ], [ 88.1968041, 26.163337 ], [ 88.1960643, 26.163115 ], [ 88.1956944, 26.1624862 ], [ 88.1959533, 26.1617834 ], [ 88.1962862, 26.1611731 ], [ 88.1963232, 26.1602114 ], [ 88.1962123, 26.1591757 ], [ 88.1954725, 26.1587688 ], [ 88.1946217, 26.1585099 ], [ 88.1939929, 26.157955 ], [ 88.1931421, 26.1575112 ], [ 88.1922544, 26.1574742 ], [ 88.1916256, 26.1568823 ], [ 88.1915886, 26.1554768 ], [ 88.1921065, 26.1549219 ], [ 88.1931421, 26.1543671 ], [ 88.193512, 26.1543671 ], [ 88.1950304, 26.1547538 ], [ 88.1958912, 26.154926 ], [ 88.196214, 26.1547323 ], [ 88.1964507, 26.154388 ], [ 88.1965798, 26.1540437 ], [ 88.1966013, 26.1534841 ], [ 88.1958794, 26.1521847 ], [ 88.1952938, 26.1518224 ], [ 88.1943998, 26.1514079 ], [ 88.1935886, 26.151655 ], [ 88.1928734, 26.1521071 ], [ 88.1919585, 26.1536273 ], [ 88.1912187, 26.154589 ], [ 88.1906639, 26.1548479 ], [ 88.1898501, 26.1548109 ], [ 88.1889254, 26.154663 ], [ 88.1878527, 26.1541451 ], [ 88.1870389, 26.1538122 ], [ 88.1860032, 26.1535163 ], [ 88.1852487, 26.1534423 ], [ 88.183954, 26.1531834 ], [ 88.1830293, 26.1528505 ], [ 88.1825114, 26.1518888 ], [ 88.1822155, 26.1505572 ], [ 88.1816607, 26.1494475 ], [ 88.1801441, 26.1487447 ], [ 88.1801072, 26.1491146 ], [ 88.1802921, 26.1498914 ], [ 88.1802921, 26.1501873 ], [ 88.1797742, 26.1500024 ], [ 88.1789975, 26.1492996 ], [ 88.1778508, 26.1485228 ], [ 88.1773699, 26.147894 ], [ 88.1773699, 26.1468953 ], [ 88.177222, 26.1455636 ], [ 88.1766672, 26.144306 ], [ 88.1766302, 26.1432148 ], [ 88.1768151, 26.1418462 ], [ 88.1769631, 26.1411434 ], [ 88.1779248, 26.1406996 ], [ 88.1791084, 26.1400338 ], [ 88.1800702, 26.139368 ], [ 88.1800332, 26.1386652 ], [ 88.1796633, 26.1377034 ], [ 88.1789605, 26.1368157 ], [ 88.1755945, 26.1319331 ], [ 88.1748917, 26.1311194 ], [ 88.1740409, 26.1300097 ], [ 88.1741889, 26.129085 ], [ 88.1742259, 26.1280123 ], [ 88.1744478, 26.1269026 ], [ 88.1748547, 26.1263847 ], [ 88.1756315, 26.1259409 ], [ 88.1775179, 26.125423 ], [ 88.1779248, 26.1250901 ], [ 88.1782947, 26.1246462 ], [ 88.1785166, 26.1239065 ], [ 88.1782947, 26.1230187 ], [ 88.1780727, 26.1224269 ], [ 88.177333, 26.1218351 ], [ 88.1764822, 26.1213172 ], [ 88.1743368, 26.1201336 ], [ 88.1734861, 26.1193198 ], [ 88.1733011, 26.1184321 ], [ 88.1733381, 26.1143632 ], [ 88.1733011, 26.1128467 ], [ 88.1731902, 26.111885 ], [ 88.1730422, 26.1114966 ], [ 88.1718586, 26.110091 ], [ 88.1703642, 26.1091293 ], [ 88.1691805, 26.1090553 ], [ 88.1677749, 26.1087224 ], [ 88.1664433, 26.1088334 ], [ 88.1652597, 26.1087964 ], [ 88.16415, 26.1083525 ], [ 88.1636322, 26.1073168 ], [ 88.1631143, 26.1061331 ], [ 88.1631513, 26.1033959 ], [ 88.1634102, 26.1005108 ], [ 88.1632253, 26.1002149 ], [ 88.1618012, 26.099808 ], [ 88.1609874, 26.0993641 ], [ 88.1599887, 26.0984764 ], [ 88.1592489, 26.0976256 ], [ 88.1586571, 26.0967379 ], [ 88.1584722, 26.0951843 ], [ 88.1594339, 26.0932979 ], [ 88.1601515, 26.0923732 ], [ 88.1608173, 26.0916704 ], [ 88.1613351, 26.0910415 ], [ 88.1610762, 26.0903387 ], [ 88.1610022, 26.0896729 ], [ 88.1613351, 26.0890071 ], [ 88.161742, 26.0887852 ], [ 88.1626297, 26.0891181 ], [ 88.1635175, 26.0893031 ], [ 88.1645902, 26.0890071 ], [ 88.1649971, 26.0885263 ], [ 88.1649971, 26.0880824 ], [ 88.165219, 26.0874906 ], [ 88.165145, 26.0864919 ], [ 88.1641833, 26.0854562 ], [ 88.163536, 26.0851788 ], [ 88.1622044, 26.0850308 ], [ 88.1604659, 26.0839951 ], [ 88.1595411, 26.0831074 ], [ 88.1591713, 26.0823676 ], [ 88.1586904, 26.0812209 ], [ 88.1586904, 26.0800373 ], [ 88.1590973, 26.0793714 ], [ 88.16017, 26.0784097 ], [ 88.1611317, 26.0777439 ], [ 88.1624633, 26.077448 ], [ 88.1632771, 26.0778179 ], [ 88.1639059, 26.0784837 ], [ 88.1649786, 26.0793714 ], [ 88.1655704, 26.0802962 ], [ 88.1658293, 26.0812949 ], [ 88.1666801, 26.0825155 ], [ 88.1674088, 26.0830334 ], [ 88.1684445, 26.0831443 ], [ 88.1689993, 26.0825155 ], [ 88.1689623, 26.0818497 ], [ 88.1689993, 26.080851 ], [ 88.1692212, 26.0801482 ], [ 88.1697021, 26.0793714 ], [ 88.1703309, 26.0788166 ], [ 88.1711077, 26.0780398 ], [ 88.1718105, 26.0770411 ], [ 88.1724763, 26.0763383 ], [ 88.173253, 26.0757465 ], [ 88.1743997, 26.0752656 ], [ 88.1765451, 26.0751177 ], [ 88.1775438, 26.0747848 ], [ 88.1779877, 26.0743039 ], [ 88.1788569, 26.0741005 ], [ 88.1813722, 26.0741375 ], [ 88.1823339, 26.0737306 ], [ 88.1828148, 26.0730648 ], [ 88.1830737, 26.072214 ], [ 88.1829627, 26.0713633 ], [ 88.1824449, 26.0705125 ], [ 88.1816311, 26.0696618 ], [ 88.1811872, 26.068885 ], [ 88.1811872, 26.0679973 ], [ 88.1815571, 26.0671465 ], [ 88.1821859, 26.0662218 ], [ 88.1831847, 26.065519 ], [ 88.1844423, 26.0652971 ], [ 88.1851821, 26.0652971 ], [ 88.1858849, 26.0648162 ], [ 88.1858849, 26.0640764 ], [ 88.185515, 26.0634476 ], [ 88.1850341, 26.0631147 ], [ 88.1845902, 26.0625968 ], [ 88.1838505, 26.061968 ], [ 88.1828887, 26.0616351 ], [ 88.1822229, 26.0612652 ], [ 88.1811133, 26.0603775 ], [ 88.1806694, 26.0594158 ], [ 88.1805584, 26.0583061 ], [ 88.1799629, 26.0583431 ], [ 88.1783724, 26.0594528 ], [ 88.1771916, 26.0593088 ], [ 88.1760937, 26.0586469 ], [ 88.1757461, 26.0577143 ], [ 88.1770038, 26.0554579 ], [ 88.1778545, 26.0531831 ], [ 88.1778175, 26.0513336 ], [ 88.1776696, 26.0491883 ], [ 88.1781504, 26.0481156 ], [ 88.1788162, 26.0471908 ], [ 88.1792971, 26.0463031 ], [ 88.1789642, 26.0461551 ], [ 88.1785203, 26.046488 ], [ 88.1764489, 26.0485594 ], [ 88.1756352, 26.0491143 ], [ 88.1745625, 26.0496321 ], [ 88.1738227, 26.0497431 ], [ 88.172861, 26.0495212 ], [ 88.1717883, 26.0488184 ], [ 88.1709005, 26.0480416 ], [ 88.1698648, 26.0469319 ], [ 88.1695319, 26.0459702 ], [ 88.1697378, 26.0450072 ], [ 88.1702717, 26.0440467 ], [ 88.1712334, 26.0436029 ], [ 88.172898, 26.0424932 ], [ 88.1738967, 26.0417349 ], [ 88.1746734, 26.0410691 ], [ 88.1751173, 26.0402184 ], [ 88.1751913, 26.0394046 ], [ 88.1741926, 26.038147 ], [ 88.1734898, 26.0375551 ], [ 88.172602, 26.0371483 ], [ 88.1717513, 26.0371483 ], [ 88.1713074, 26.0365564 ], [ 88.1709005, 26.0351508 ], [ 88.170948, 26.0342937 ], [ 88.1714819, 26.0328344 ], [ 88.1718734, 26.0321937 ], [ 88.1724073, 26.0319445 ], [ 88.1730836, 26.0314818 ], [ 88.1756463, 26.0305564 ], [ 88.17707, 26.0303428 ], [ 88.1779955, 26.0305208 ], [ 88.1792638, 26.0306567 ], [ 88.1802625, 26.0306567 ], [ 88.1817051, 26.0302498 ], [ 88.1822229, 26.029436 ], [ 88.1825188, 26.0283263 ], [ 88.1825558, 26.0272536 ], [ 88.182271, 26.0254777 ], [ 88.1811305, 26.0242829 ], [ 88.1798371, 26.0233883 ], [ 88.1789864, 26.0226485 ], [ 88.1774328, 26.0216868 ], [ 88.1766191, 26.0215388 ], [ 88.1751765, 26.0215018 ], [ 88.1744737, 26.0210949 ], [ 88.173549, 26.020947 ], [ 88.1721804, 26.021021 ], [ 88.1707341, 26.0215388 ], [ 88.1696244, 26.0216128 ], [ 88.1679229, 26.0218717 ], [ 88.1671461, 26.0218717 ], [ 88.1655926, 26.0215018 ], [ 88.1636322, 26.0198003 ], [ 88.1624485, 26.0188756 ], [ 88.1612279, 26.0184687 ], [ 88.1601922, 26.0184687 ], [ 88.1590825, 26.0188016 ], [ 88.1579728, 26.0193565 ], [ 88.157196, 26.0193565 ], [ 88.1567152, 26.0195784 ], [ 88.1559754, 26.0200223 ], [ 88.1552726, 26.0200592 ], [ 88.1544218, 26.0199483 ], [ 88.1534971, 26.0196154 ], [ 88.150353, 26.0186167 ], [ 88.1494283, 26.0180988 ], [ 88.1485775, 26.017507 ], [ 88.1480893, 26.017359 ], [ 88.1479043, 26.0169891 ], [ 88.1479413, 26.0160644 ], [ 88.1482372, 26.0152876 ], [ 88.1482372, 26.0143259 ], [ 88.1476084, 26.013882 ], [ 88.1469426, 26.013919 ], [ 88.1461658, 26.014104 ], [ 88.145685, 26.014104 ], [ 88.1447233, 26.0144369 ], [ 88.1439465, 26.0148438 ], [ 88.1431697, 26.0148438 ], [ 88.1416706, 26.0143455 ], [ 88.1394478, 26.0130068 ], [ 88.1396246, 26.0121227 ], [ 88.1402561, 26.0114912 ], [ 88.1417969, 26.0104051 ], [ 88.1427315, 26.0094705 ], [ 88.1432807, 26.0087221 ], [ 88.1437615, 26.0073165 ], [ 88.1439465, 26.0057999 ], [ 88.1439465, 26.0029517 ], [ 88.1437985, 26.0013242 ], [ 88.1435192, 26.0003168 ], [ 88.1429511, 25.9996856 ], [ 88.1420674, 25.9990123 ], [ 88.1411417, 25.9979814 ], [ 88.1401739, 25.9970135 ], [ 88.1384276, 25.9982759 ], [ 88.1377333, 25.9989492 ], [ 88.1367654, 25.9997487 ], [ 88.1357134, 26.0004851 ], [ 88.1350822, 25.9986336 ], [ 88.1345773, 25.9980866 ], [ 88.1339251, 25.9984232 ], [ 88.1329572, 25.9987177 ], [ 88.1322208, 25.9986125 ], [ 88.131758, 25.9984653 ], [ 88.1314424, 25.9975816 ], [ 88.1313582, 25.9968662 ], [ 88.1305377, 25.9968031 ], [ 88.1295067, 25.9968662 ], [ 88.1293805, 25.9959826 ], [ 88.1292332, 25.995667 ], [ 88.129149, 25.9950358 ], [ 88.1287493, 25.9942784 ], [ 88.1287493, 25.9935209 ], [ 88.1288966, 25.9923427 ], [ 88.129107, 25.9915853 ], [ 88.1293594, 25.9910172 ], [ 88.1298223, 25.9904281 ], [ 88.1304114, 25.9900494 ], [ 88.1309585, 25.9896286 ], [ 88.1309374, 25.9892814 ], [ 88.1308322, 25.9885661 ], [ 88.1304535, 25.9877876 ], [ 88.1298644, 25.9861676 ], [ 88.1295067, 25.9855364 ], [ 88.1288966, 25.9849893 ], [ 88.1285179, 25.9848 ], [ 88.1277394, 25.9842319 ], [ 88.1272555, 25.9827486 ], [ 88.126982, 25.9813179 ], [ 88.127003, 25.9802449 ], [ 88.12755, 25.9802238 ], [ 88.1290859, 25.9799503 ], [ 88.1280971, 25.9789825 ], [ 88.1277183, 25.9781619 ], [ 88.1276552, 25.9764788 ], [ 88.1268136, 25.9760474 ], [ 88.1242258, 25.9750165 ], [ 88.1230475, 25.9747219 ], [ 88.1220587, 25.9745747 ], [ 88.1212171, 25.9745536 ], [ 88.120317, 25.9740609 ], [ 88.1196358, 25.9730877 ], [ 88.1193195, 25.9725281 ], [ 88.1191762, 25.9716712 ], [ 88.1192183, 25.9709348 ], [ 88.1195549, 25.9695041 ], [ 88.1197233, 25.9691464 ], [ 88.1202492, 25.9687887 ], [ 88.1216552, 25.9683191 ], [ 88.1226284, 25.9679298 ], [ 88.1235529, 25.9678325 ], [ 88.1240785, 25.9676526 ], [ 88.1244782, 25.9677578 ], [ 88.1241837, 25.9666006 ], [ 88.1235314, 25.9658011 ], [ 88.1230054, 25.9648754 ], [ 88.1223953, 25.9645177 ], [ 88.1215747, 25.9644335 ], [ 88.1205228, 25.9644546 ], [ 88.1192604, 25.9637603 ], [ 88.118503, 25.9632553 ], [ 88.1180611, 25.9628976 ], [ 88.1156626, 25.9629187 ], [ 88.1150314, 25.9624558 ], [ 88.1150104, 25.9621823 ], [ 88.1152208, 25.9615721 ], [ 88.1153049, 25.9608357 ], [ 88.1150104, 25.9597732 ], [ 88.114295, 25.9587423 ], [ 88.114295, 25.9582584 ], [ 88.1146948, 25.9576903 ], [ 88.1166304, 25.9562806 ], [ 88.117493, 25.9560071 ], [ 88.1175982, 25.955418 ], [ 88.1172195, 25.9550393 ], [ 88.1172616, 25.9546185 ], [ 88.1182715, 25.9540715 ], [ 88.1191131, 25.9537453 ], [ 88.1197022, 25.9533035 ], [ 88.1202703, 25.9526513 ], [ 88.1207332, 25.9520201 ], [ 88.1213012, 25.9510312 ], [ 88.121722, 25.9500634 ], [ 88.1219535, 25.9488431 ], [ 88.1219324, 25.9482119 ], [ 88.1215747, 25.9474755 ], [ 88.1207542, 25.9463183 ], [ 88.1200599, 25.9459186 ], [ 88.1183557, 25.9451401 ], [ 88.1173037, 25.9443196 ], [ 88.1167777, 25.944004 ], [ 88.1159361, 25.9438356 ], [ 88.115347, 25.9438567 ], [ 88.1147158, 25.9437304 ], [ 88.113769, 25.9436884 ], [ 88.1128433, 25.943499 ], [ 88.1124651, 25.9432048 ], [ 88.1121122, 25.9427146 ], [ 88.1119357, 25.9420871 ], [ 88.1118769, 25.94144 ], [ 88.1123475, 25.9403223 ], [ 88.1127789, 25.9398125 ], [ 88.1126808, 25.9392047 ], [ 88.112191, 25.9386493 ], [ 88.1115632, 25.9374399 ], [ 88.1109847, 25.9366426 ], [ 88.1108445, 25.9360194 ], [ 88.1106341, 25.9355776 ], [ 88.1106972, 25.934778 ], [ 88.1108235, 25.9341086 ], [ 88.1113867, 25.9334398 ], [ 88.1113671, 25.9332241 ], [ 88.1101121, 25.9334202 ], [ 88.1093082, 25.9335967 ], [ 88.1080673, 25.9335367 ], [ 88.1053742, 25.93421 ], [ 88.1049113, 25.9335157 ], [ 88.1045957, 25.9332211 ], [ 88.1038593, 25.9334736 ], [ 88.1030388, 25.9340206 ], [ 88.1023865, 25.9345676 ], [ 88.1014818, 25.9350936 ], [ 88.0997556, 25.9344687 ], [ 88.098705, 25.9341685 ], [ 88.0979846, 25.9338083 ], [ 88.0962435, 25.9324575 ], [ 88.0949528, 25.9311367 ], [ 88.0940338, 25.9304965 ], [ 88.0933184, 25.9297601 ], [ 88.0926451, 25.9288343 ], [ 88.0918877, 25.9274667 ], [ 88.0909409, 25.9256152 ], [ 88.0902676, 25.9247947 ], [ 88.0890694, 25.9210809 ], [ 88.0869981, 25.9182592 ], [ 88.0861649, 25.9176307 ], [ 88.085681, 25.916747 ], [ 88.085681, 25.9158423 ], [ 88.0855127, 25.9153584 ], [ 88.0855127, 25.9144958 ], [ 88.0858283, 25.914117 ], [ 88.0865226, 25.9135279 ], [ 88.0870486, 25.9132334 ], [ 88.0876587, 25.9130651 ], [ 88.0889842, 25.9130861 ], [ 88.0893629, 25.9133175 ], [ 88.0898258, 25.9138225 ], [ 88.0904991, 25.9147482 ], [ 88.0907726, 25.9148324 ], [ 88.0912565, 25.9144958 ], [ 88.0914669, 25.9141802 ], [ 88.0913828, 25.9133806 ], [ 88.091488, 25.9129073 ], [ 88.0918667, 25.9124233 ], [ 88.0925189, 25.9117922 ], [ 88.0929818, 25.9114766 ], [ 88.093613, 25.911182 ], [ 88.0933394, 25.9108243 ], [ 88.0933184, 25.9102773 ], [ 88.0938654, 25.9096461 ], [ 88.0939917, 25.9088887 ], [ 88.0940127, 25.9081733 ], [ 88.0940758, 25.9077315 ], [ 88.0933394, 25.9073738 ], [ 88.0929187, 25.9070582 ], [ 88.0921823, 25.9068268 ], [ 88.0913828, 25.9066795 ], [ 88.0909409, 25.906406 ], [ 88.0903308, 25.9042599 ], [ 88.0902045, 25.9034815 ], [ 88.0902887, 25.9025768 ], [ 88.0906464, 25.901651 ], [ 88.0910251, 25.9009567 ], [ 88.0917194, 25.9002729 ], [ 88.0922243, 25.9000415 ], [ 88.0928345, 25.8995996 ], [ 88.0929607, 25.8992209 ], [ 88.0923584, 25.899098 ], [ 88.091509, 25.8988212 ], [ 88.0909261, 25.8983708 ], [ 88.0903312, 25.8980623 ], [ 88.089544, 25.8975035 ], [ 88.0891654, 25.8965299 ], [ 88.0895981, 25.8957187 ], [ 88.090842, 25.894637 ], [ 88.0917074, 25.8941502 ], [ 88.0928972, 25.8937716 ], [ 88.0940871, 25.8935553 ], [ 88.0951688, 25.8937716 ], [ 88.0962009, 25.8943187 ], [ 88.0970635, 25.8940451 ], [ 88.0981786, 25.8939189 ], [ 88.0987677, 25.8940872 ], [ 88.0991043, 25.8934981 ], [ 88.0993778, 25.8932246 ], [ 88.0999038, 25.8920253 ], [ 88.100514, 25.8914152 ], [ 88.1017764, 25.890279 ], [ 88.1021972, 25.8894585 ], [ 88.1018816, 25.888659 ], [ 88.1014608, 25.887344 ], [ 88.1010821, 25.8870284 ], [ 88.1007875, 25.8865445 ], [ 88.1006613, 25.8860395 ], [ 88.1007454, 25.8855556 ], [ 88.1011241, 25.8849455 ], [ 88.1009137, 25.8847982 ], [ 88.1003246, 25.8846088 ], [ 88.0996281, 25.8845072 ], [ 88.0988961, 25.8839137 ], [ 88.0986506, 25.8835816 ], [ 88.0982417, 25.8833254 ], [ 88.0979359, 25.8829608 ], [ 88.0975268, 25.8825941 ], [ 88.0973865, 25.8820511 ], [ 88.0970356, 25.8815248 ], [ 88.0968797, 25.880901 ], [ 88.0970941, 25.879595 ], [ 88.097367, 25.8786984 ], [ 88.0973475, 25.8785035 ], [ 88.0966263, 25.8784645 ], [ 88.0960805, 25.8781916 ], [ 88.0955152, 25.8778017 ], [ 88.0950864, 25.8771195 ], [ 88.0943651, 25.8763788 ], [ 88.0943456, 25.8755211 ], [ 88.0940338, 25.8750143 ], [ 88.0938023, 25.8742889 ], [ 88.0938778, 25.8736303 ], [ 88.0943067, 25.873065 ], [ 88.0948525, 25.8726557 ], [ 88.0954177, 25.8723633 ], [ 88.0959273, 25.8720376 ], [ 88.0963481, 25.8713012 ], [ 88.0969577, 25.870648 ], [ 88.0979323, 25.8711548 ], [ 88.0983416, 25.871759 ], [ 88.0988308, 25.8723532 ], [ 88.0995462, 25.872753 ], [ 88.1004078, 25.8728896 ], [ 88.1008562, 25.8726167 ], [ 88.1012293, 25.872248 ], [ 88.1018185, 25.8718062 ], [ 88.1021427, 25.8705895 ], [ 88.1022401, 25.8694979 ], [ 88.1020842, 25.8687377 ], [ 88.1020452, 25.8677241 ], [ 88.1020647, 25.8656384 ], [ 88.1018503, 25.8649172 ], [ 88.1011875, 25.8636112 ], [ 88.1013977, 25.8630536 ], [ 88.101587, 25.8623173 ], [ 88.1020257, 25.8621492 ], [ 88.1023376, 25.8619348 ], [ 88.1028444, 25.8618373 ], [ 88.1034097, 25.8618373 ], [ 88.1037995, 25.8620128 ], [ 88.1041114, 25.8622077 ], [ 88.1047157, 25.8628509 ], [ 88.105164, 25.8636696 ], [ 88.1054174, 25.8644493 ], [ 88.1056123, 25.8660477 ], [ 88.1055344, 25.8678605 ], [ 88.1058268, 25.8686987 ], [ 88.1060685, 25.8691657 ], [ 88.1070158, 25.8696344 ], [ 88.1081074, 25.8696733 ], [ 88.1087896, 25.8695369 ], [ 88.1094914, 25.8692835 ], [ 88.1101712, 25.8685976 ], [ 88.1106551, 25.8680295 ], [ 88.1109918, 25.8672721 ], [ 88.1109497, 25.865894 ], [ 88.1112232, 25.8653259 ], [ 88.1111601, 25.8641056 ], [ 88.1104027, 25.8631588 ], [ 88.1098556, 25.8626329 ], [ 88.1098135, 25.8614651 ], [ 88.1098977, 25.8606867 ], [ 88.1102764, 25.8593822 ], [ 88.1105289, 25.8588562 ], [ 88.1108866, 25.8583933 ], [ 88.1113494, 25.8579305 ], [ 88.1118754, 25.8571941 ], [ 88.1129274, 25.8559001 ], [ 88.1136007, 25.8552269 ], [ 88.1137269, 25.8545746 ], [ 88.1136007, 25.8532912 ], [ 88.1133693, 25.8526811 ], [ 88.1128222, 25.8515449 ], [ 88.111623, 25.849746 ], [ 88.111118, 25.8490938 ], [ 88.1102343, 25.8483364 ], [ 88.1093296, 25.8474317 ], [ 88.1080673, 25.8462955 ], [ 88.1071205, 25.8453698 ], [ 88.1065524, 25.8450542 ], [ 88.1052058, 25.8450331 ], [ 88.1039014, 25.8451594 ], [ 88.103186, 25.8451594 ], [ 88.1025338, 25.8449279 ], [ 88.1014608, 25.8441915 ], [ 88.101061, 25.8434762 ], [ 88.1010189, 25.8428871 ], [ 88.1012714, 25.8422138 ], [ 88.1024286, 25.8410777 ], [ 88.1033964, 25.8403413 ], [ 88.104238, 25.8400678 ], [ 88.1064051, 25.8400678 ], [ 88.1070573, 25.8400257 ], [ 88.1074992, 25.8397942 ], [ 88.1079621, 25.8394155 ], [ 88.1083197, 25.8384056 ], [ 88.1083197, 25.8377534 ], [ 88.1073519, 25.836491 ], [ 88.1059633, 25.8343239 ], [ 88.105816, 25.8336927 ], [ 88.1053952, 25.8324724 ], [ 88.1049955, 25.8319885 ], [ 88.1039435, 25.831168 ], [ 88.1034806, 25.831189 ], [ 88.102113, 25.8309365 ], [ 88.1020709, 25.8305578 ], [ 88.1017553, 25.8297793 ], [ 88.1014187, 25.8294637 ], [ 88.1010189, 25.8292323 ], [ 88.1017974, 25.8290219 ], [ 88.1019868, 25.8287484 ], [ 88.1019447, 25.8283171 ], [ 88.1040276, 25.8264866 ], [ 88.1049113, 25.8269074 ], [ 88.1058581, 25.8264866 ], [ 88.1054373, 25.8254978 ], [ 88.1060895, 25.824046 ], [ 88.1074744, 25.8231799 ], [ 88.1072533, 25.8221882 ], [ 88.107986, 25.8218408 ], [ 88.1088519, 25.8232122 ], [ 88.1102975, 25.8222156 ], [ 88.1114967, 25.8217737 ], [ 88.1109287, 25.8211846 ], [ 88.1106762, 25.8210584 ], [ 88.1100871, 25.8209953 ], [ 88.1098767, 25.8204693 ], [ 88.1097504, 25.8199853 ], [ 88.1093507, 25.81927 ], [ 88.1086143, 25.818239 ], [ 88.1081724, 25.8169556 ], [ 88.1069942, 25.815567 ], [ 88.1075202, 25.8146833 ], [ 88.1084674, 25.8156174 ], [ 88.1090938, 25.8153368 ], [ 88.1103932, 25.8150292 ], [ 88.1120653, 25.8150869 ], [ 88.1124646, 25.8152304 ], [ 88.1130747, 25.8150831 ], [ 88.1139584, 25.8150831 ], [ 88.1151322, 25.8149864 ], [ 88.1176358, 25.813886 ], [ 88.1181103, 25.8135428 ], [ 88.1196953, 25.8127049 ], [ 88.1199779, 25.8124636 ], [ 88.1189658, 25.8098652 ], [ 88.1182715, 25.8091078 ], [ 88.117493, 25.8080979 ], [ 88.1163359, 25.8062254 ], [ 88.1158099, 25.8050366 ], [ 88.1151366, 25.8028064 ], [ 88.1150104, 25.8014809 ], [ 88.1149683, 25.7998609 ], [ 88.1145054, 25.798346 ], [ 88.1159782, 25.7984933 ], [ 88.1166515, 25.7984933 ], [ 88.1181032, 25.7983039 ], [ 88.1196181, 25.7974413 ], [ 88.1249246, 25.7963606 ], [ 88.1251871, 25.7970975 ], [ 88.126449, 25.7968048 ], [ 88.1270661, 25.7971888 ], [ 88.1274869, 25.7977148 ], [ 88.1277815, 25.798325 ], [ 88.1283285, 25.7982408 ], [ 88.1294015, 25.797841 ], [ 88.1306008, 25.7975675 ], [ 88.1313582, 25.7983039 ], [ 88.1319263, 25.7979883 ], [ 88.1323892, 25.797841 ], [ 88.1329572, 25.7977569 ], [ 88.1334411, 25.7977358 ], [ 88.133904, 25.7974834 ], [ 88.134409, 25.7975254 ], [ 88.1347246, 25.7976306 ], [ 88.1350191, 25.7975675 ], [ 88.1353137, 25.7973782 ], [ 88.1358186, 25.7973782 ], [ 88.13868, 25.7968943 ], [ 88.13868, 25.7960106 ], [ 88.1392902, 25.7958423 ], [ 88.1400055, 25.795716 ], [ 88.140763, 25.7954846 ], [ 88.1414573, 25.7952111 ], [ 88.1422147, 25.7944326 ], [ 88.1430984, 25.7939697 ], [ 88.1436454, 25.7938435 ], [ 88.1441924, 25.7937804 ], [ 88.1445291, 25.7928336 ], [ 88.1446343, 25.7923497 ], [ 88.1446343, 25.7918868 ], [ 88.144466, 25.7914029 ], [ 88.1445712, 25.7910663 ], [ 88.1449709, 25.7906665 ], [ 88.1450551, 25.7903509 ], [ 88.1451182, 25.789888 ], [ 88.145034, 25.7894357 ], [ 88.1448657, 25.7889097 ], [ 88.1445922, 25.7883627 ], [ 88.144466, 25.7879419 ], [ 88.1444239, 25.7867005 ], [ 88.1442135, 25.7863008 ], [ 88.14394, 25.785922 ], [ 88.1436033, 25.7856485 ], [ 88.1433447, 25.7852931 ], [ 88.1430489, 25.7843781 ], [ 88.1428038, 25.7838602 ], [ 88.1424041, 25.7833447 ], [ 88.1420674, 25.7827766 ], [ 88.1420043, 25.7816825 ], [ 88.1416257, 25.7803024 ], [ 88.1435018, 25.7799697 ], [ 88.1440933, 25.7797941 ], [ 88.1451468, 25.7796093 ], [ 88.1454548, 25.7804622 ], [ 88.1457283, 25.7805885 ], [ 88.1464437, 25.7804202 ], [ 88.1469276, 25.7805254 ], [ 88.1472817, 25.7807645 ], [ 88.1475981, 25.7816045 ], [ 88.1479009, 25.7815316 ], [ 88.1485897, 25.7810724 ], [ 88.1485056, 25.7807568 ], [ 88.1481269, 25.7803991 ], [ 88.1474111, 25.7789439 ], [ 88.1468224, 25.7772221 ], [ 88.1468936, 25.776706 ], [ 88.147864, 25.7764393 ], [ 88.1494945, 25.776086 ], [ 88.1510724, 25.7758335 ], [ 88.151801, 25.7757646 ], [ 88.1520823, 25.7758125 ], [ 88.1528044, 25.776316 ], [ 88.1531764, 25.7773904 ], [ 88.1542917, 25.7772835 ], [ 88.1546528, 25.7775145 ], [ 88.1551726, 25.7780777 ], [ 88.1556636, 25.7783232 ], [ 88.1560824, 25.7784532 ], [ 88.1564867, 25.7789153 ], [ 88.1567466, 25.7793052 ], [ 88.1571654, 25.7797673 ], [ 88.157151, 25.7800994 ], [ 88.1568794, 25.7806516 ], [ 88.156648, 25.7813459 ], [ 88.1565217, 25.7818298 ], [ 88.1565638, 25.7819981 ], [ 88.1571529, 25.7821244 ], [ 88.1580155, 25.7821244 ], [ 88.1586257, 25.7822717 ], [ 88.1587519, 25.7826083 ], [ 88.1588361, 25.7830712 ], [ 88.158815, 25.7835025 ], [ 88.1589413, 25.7841126 ], [ 88.1588782, 25.7845965 ], [ 88.1586467, 25.7847438 ], [ 88.1585205, 25.7851015 ], [ 88.1585415, 25.7855854 ], [ 88.1587098, 25.78588 ], [ 88.1590886, 25.7860272 ], [ 88.159299, 25.7860272 ], [ 88.1596987, 25.7866374 ], [ 88.159808, 25.7870164 ], [ 88.1599524, 25.7872619 ], [ 88.1619476, 25.7880191 ], [ 88.1622485, 25.7883449 ], [ 88.1625373, 25.7887637 ], [ 88.1629272, 25.7891536 ], [ 88.1634904, 25.7895724 ], [ 88.1644537, 25.7898144 ], [ 88.1650218, 25.7897934 ], [ 88.1654215, 25.7897092 ], [ 88.1661579, 25.7893726 ], [ 88.1675886, 25.7886151 ], [ 88.1681567, 25.7883837 ], [ 88.1687879, 25.7882364 ], [ 88.1705342, 25.7875211 ], [ 88.1712495, 25.7873107 ], [ 88.1718176, 25.7870792 ], [ 88.1721542, 25.7868688 ], [ 88.172575, 25.7870161 ], [ 88.1729537, 25.7874579 ], [ 88.1731641, 25.7877946 ], [ 88.1732062, 25.7885099 ], [ 88.1733114, 25.7890254 ], [ 88.1735849, 25.7891727 ], [ 88.1744686, 25.7903299 ], [ 88.1746159, 25.7914029 ], [ 88.1750367, 25.7914029 ], [ 88.1754154, 25.7913187 ], [ 88.1758572, 25.7912977 ], [ 88.1760887, 25.7913819 ], [ 88.1759414, 25.7921182 ], [ 88.1756047, 25.7930019 ], [ 88.1753733, 25.7932544 ], [ 88.1753102, 25.7935069 ], [ 88.1753733, 25.793591 ], [ 88.1766567, 25.7936541 ], [ 88.1768671, 25.7937383 ], [ 88.1768882, 25.7940329 ], [ 88.1769723, 25.7943274 ], [ 88.1773721, 25.7941801 ], [ 88.177835, 25.7939277 ], [ 88.1788869, 25.7937383 ], [ 88.1796023, 25.7936962 ], [ 88.1803597, 25.7937173 ], [ 88.1806543, 25.7939697 ], [ 88.1808647, 25.7943485 ], [ 88.1811592, 25.7953373 ], [ 88.1803597, 25.7952742 ], [ 88.1800441, 25.7952952 ], [ 88.1798337, 25.7955688 ], [ 88.1795392, 25.7963893 ], [ 88.1797075, 25.796768 ], [ 88.1799389, 25.7970205 ], [ 88.1809278, 25.7966839 ], [ 88.1814327, 25.7965576 ], [ 88.1817694, 25.7965576 ], [ 88.1821271, 25.7972099 ], [ 88.1812644, 25.797799 ], [ 88.181033, 25.797841 ], [ 88.1808226, 25.7980304 ], [ 88.1812644, 25.7985564 ], [ 88.1810961, 25.7989141 ], [ 88.1810751, 25.799419 ], [ 88.1811382, 25.7995873 ], [ 88.1815379, 25.7997557 ], [ 88.1819167, 25.7996505 ], [ 88.1820219, 25.8003027 ], [ 88.1828424, 25.80045 ], [ 88.183179, 25.801018 ], [ 88.1834315, 25.8012916 ], [ 88.183705, 25.801502 ], [ 88.1837892, 25.8019017 ], [ 88.18421, 25.801544 ], [ 88.1846518, 25.8010812 ], [ 88.1849464, 25.8013547 ], [ 88.185262, 25.8017965 ], [ 88.1855565, 25.8018176 ], [ 88.1858511, 25.8017334 ], [ 88.1875132, 25.801018 ], [ 88.1885442, 25.8008918 ], [ 88.1883937, 25.8023795 ], [ 88.1888808, 25.8023225 ], [ 88.1891117, 25.8024394 ], [ 88.1892806, 25.802596 ], [ 88.1893716, 25.8027781 ], [ 88.1915449, 25.8022 ], [ 88.1922662, 25.802145 ], [ 88.1929111, 25.801841 ], [ 88.1933325, 25.8017033 ], [ 88.1931729, 25.8012705 ], [ 88.1931098, 25.8001133 ], [ 88.1932003, 25.7993779 ], [ 88.1935792, 25.7994577 ], [ 88.1939681, 25.7993879 ], [ 88.1944841, 25.7991916 ], [ 88.1945963, 25.7989292 ], [ 88.1942074, 25.7981115 ], [ 88.1944984, 25.7979252 ], [ 88.1949402, 25.7977358 ], [ 88.1960343, 25.7975886 ], [ 88.1966445, 25.7973782 ], [ 88.1969811, 25.7969784 ], [ 88.1973598, 25.7966628 ], [ 88.1978016, 25.7963893 ], [ 88.1981804, 25.7958844 ], [ 88.1986012, 25.7955056 ], [ 88.1989588, 25.7950638 ], [ 88.1992744, 25.7941591 ], [ 88.1993375, 25.7937383 ], [ 88.1994638, 25.79357 ], [ 88.1990828, 25.7927198 ], [ 88.1992744, 25.7925601 ], [ 88.1997163, 25.7923286 ], [ 88.1999477, 25.7920972 ], [ 88.1999267, 25.7917395 ], [ 88.1997794, 25.7915291 ], [ 88.1999056, 25.7911083 ], [ 88.1997829, 25.790929 ], [ 88.1995449, 25.7903448 ], [ 88.2005618, 25.7899662 ], [ 88.2003242, 25.7896164 ], [ 88.205052, 25.7879315 ], [ 88.2056052, 25.7878058 ], [ 88.2063345, 25.7875543 ], [ 88.20812, 25.787152 ], [ 88.210182, 25.7863472 ], [ 88.2099342, 25.7869311 ], [ 88.2099098, 25.7872232 ], [ 88.2101119, 25.7877353 ], [ 88.2101469, 25.7883479 ], [ 88.2099999, 25.7887889 ], [ 88.2099299, 25.7892089 ], [ 88.2098949, 25.7899369 ], [ 88.2097759, 25.7907454 ], [ 88.2098039, 25.7913334 ], [ 88.2099089, 25.7914874 ], [ 88.2100629, 25.7916064 ], [ 88.2104409, 25.7916274 ], [ 88.2106159, 25.7915644 ], [ 88.2108049, 25.7913824 ], [ 88.2109729, 25.7910744 ], [ 88.2111759, 25.7908364 ], [ 88.2114139, 25.7906754 ], [ 88.2115609, 25.7905984 ], [ 88.212226, 25.7905004 ], [ 88.212898, 25.7905704 ], [ 88.213038, 25.7907034 ], [ 88.213108, 25.7909134 ], [ 88.213143, 25.7912634 ], [ 88.213122, 25.7916204 ], [ 88.212863, 25.7925339 ], [ 88.212765, 25.7932339 ], [ 88.212765, 25.7934229 ], [ 88.212821, 25.7935699 ], [ 88.2130832, 25.7939114 ], [ 88.2124309, 25.7944523 ], [ 88.2121605, 25.7945637 ], [ 88.2117819, 25.7945648 ], [ 88.211605, 25.7943526 ], [ 88.2116355, 25.7934501 ], [ 88.2112536, 25.7928773 ], [ 88.2108877, 25.7923841 ], [ 88.2104264, 25.7925432 ], [ 88.2102195, 25.7930364 ], [ 88.21014, 25.7935932 ], [ 88.2104582, 25.7947546 ], [ 88.2103834, 25.795432 ], [ 88.2104423, 25.7960114 ], [ 88.2105695, 25.7963614 ], [ 88.2113968, 25.7971251 ], [ 88.2119377, 25.7973955 ], [ 88.2126537, 25.7974115 ], [ 88.2134889, 25.7972921 ], [ 88.213811, 25.7973757 ], [ 88.2153145, 25.7974353 ], [ 88.2155173, 25.7976024 ], [ 88.2155889, 25.7978768 ], [ 88.215565, 25.7981751 ], [ 88.2154577, 25.7984734 ], [ 88.2152429, 25.7989029 ], [ 88.2147059, 25.7995473 ], [ 88.2145866, 25.7999052 ], [ 88.2146105, 25.8000961 ], [ 88.2147537, 25.8002512 ], [ 88.2154457, 25.8005973 ], [ 88.2156605, 25.8007762 ], [ 88.2160065, 25.8008478 ], [ 88.2164003, 25.8008001 ], [ 88.2172355, 25.8004422 ], [ 88.2175457, 25.8002035 ], [ 88.2179753, 25.7999649 ], [ 88.2191923, 25.7996069 ], [ 88.2203259, 25.7994041 ], [ 88.2214355, 25.7989984 ], [ 88.2216145, 25.7988194 ], [ 88.2219844, 25.798199 ], [ 88.2221276, 25.7977455 ], [ 88.2223424, 25.7973279 ], [ 88.2226407, 25.7969342 ], [ 88.2228316, 25.7969222 ], [ 88.2233327, 25.7970416 ], [ 88.2237503, 25.7972742 ], [ 88.2238816, 25.7974294 ], [ 88.224156, 25.7979663 ], [ 88.2246691, 25.7987777 ], [ 88.2259219, 25.7997561 ], [ 88.2261725, 25.7998396 ], [ 88.2263515, 25.7998157 ], [ 88.2267214, 25.7993743 ], [ 88.2269719, 25.7989447 ], [ 88.2273538, 25.7979663 ], [ 88.2274134, 25.7975129 ], [ 88.2274969, 25.7973458 ], [ 88.2277475, 25.7972384 ], [ 88.2280339, 25.7971907 ], [ 88.2286305, 25.7973339 ], [ 88.2288333, 25.7972862 ], [ 88.2300026, 25.7964867 ], [ 88.2303367, 25.7963555 ], [ 88.2305992, 25.7964151 ], [ 88.2306947, 25.7965583 ], [ 88.2306589, 25.796797 ], [ 88.2304799, 25.7969401 ], [ 88.229931, 25.7972384 ], [ 88.2298952, 25.7974055 ], [ 88.2299788, 25.7975845 ], [ 88.2301816, 25.7977992 ], [ 88.2312316, 25.7980677 ], [ 88.2318521, 25.7983063 ], [ 88.2319953, 25.7985092 ], [ 88.2319953, 25.7987478 ], [ 88.2319117, 25.7989029 ], [ 88.2315061, 25.798891 ], [ 88.2308379, 25.7986762 ], [ 88.230456, 25.7987001 ], [ 88.2302174, 25.7988194 ], [ 88.23011, 25.7989984 ], [ 88.2301458, 25.7992848 ], [ 88.2308259, 25.8003586 ], [ 88.2310407, 25.8004541 ], [ 88.2312913, 25.800466 ], [ 88.2316134, 25.8003825 ], [ 88.2318521, 25.8002393 ], [ 88.2320549, 25.7999052 ], [ 88.2323294, 25.7996308 ], [ 88.2326038, 25.7994518 ], [ 88.2329975, 25.7992728 ], [ 88.2332242, 25.7992251 ], [ 88.2334987, 25.799249 ], [ 88.2337254, 25.799416 ], [ 88.233797, 25.7996427 ], [ 88.233797, 25.7998694 ], [ 88.2336777, 25.80012 ], [ 88.2331169, 25.8006808 ], [ 88.2329498, 25.8009314 ], [ 88.2324129, 25.8012177 ], [ 88.2311004, 25.8014623 ], [ 88.2307424, 25.8014862 ], [ 88.2303725, 25.8016413 ], [ 88.2300981, 25.8018561 ], [ 88.2299668, 25.8020828 ], [ 88.2300384, 25.8023334 ], [ 88.2303606, 25.8023692 ], [ 88.2306589, 25.8022976 ], [ 88.2308975, 25.8023334 ], [ 88.2310884, 25.8024288 ], [ 88.2311839, 25.8025959 ], [ 88.2312197, 25.8028226 ], [ 88.2311481, 25.8033356 ], [ 88.2312793, 25.8034192 ], [ 88.2314703, 25.8034192 ], [ 88.2317089, 25.8033237 ], [ 88.2318998, 25.8033237 ], [ 88.2321742, 25.8033953 ], [ 88.2322936, 25.8035623 ], [ 88.2325799, 25.8042723 ], [ 88.2329379, 25.8049405 ], [ 88.2335345, 25.8058712 ], [ 88.2336777, 25.8060621 ], [ 88.2342862, 25.8066109 ], [ 88.2347277, 25.8071002 ], [ 88.2353839, 25.808526 ], [ 88.2354316, 25.8089078 ], [ 88.235539, 25.8091107 ], [ 88.235718, 25.8093493 ], [ 88.2366248, 25.8100414 ], [ 88.2370186, 25.8100891 ], [ 88.2372334, 25.8100414 ], [ 88.2373885, 25.8099817 ], [ 88.237651, 25.8097789 ], [ 88.2380209, 25.8096476 ], [ 88.2386533, 25.8096476 ], [ 88.2397749, 25.8094448 ], [ 88.2398584, 25.8094567 ], [ 88.2403103, 25.8101203 ], [ 88.2407016, 25.8102019 ], [ 88.2409751, 25.8102019 ], [ 88.2415011, 25.8099494 ], [ 88.2418799, 25.8098652 ], [ 88.2432685, 25.8093813 ], [ 88.2444888, 25.8094024 ], [ 88.2441521, 25.8087922 ], [ 88.2438997, 25.8084345 ], [ 88.2438576, 25.8079506 ], [ 88.2440469, 25.807614 ], [ 88.2448465, 25.8069197 ], [ 88.2458353, 25.8062675 ], [ 88.2463403, 25.8061412 ], [ 88.2470135, 25.8061202 ], [ 88.2472029, 25.806541 ], [ 88.2473923, 25.8066672 ], [ 88.2473712, 25.8069197 ], [ 88.2472239, 25.8072142 ], [ 88.2473603, 25.8075237 ], [ 88.2481898, 25.8085654 ], [ 88.2484406, 25.8093563 ], [ 88.2484599, 25.8106487 ], [ 88.2481126, 25.8106294 ], [ 88.2481126, 25.8112274 ], [ 88.2484792, 25.8112467 ], [ 88.2484984, 25.8124813 ], [ 88.2488457, 25.8131758 ], [ 88.2492122, 25.8132722 ], [ 88.2493086, 25.8128092 ], [ 88.249135, 25.8120376 ], [ 88.2503889, 25.8115939 ], [ 88.2529352, 25.8114975 ], [ 88.2536297, 25.8120183 ], [ 88.2540348, 25.8119412 ], [ 88.2544206, 25.8117483 ], [ 88.2550306, 25.8116444 ], [ 88.2560347, 25.8115393 ], [ 88.257284, 25.8115393 ], [ 88.2586462, 25.8113273 ], [ 88.2589887, 25.8127186 ], [ 88.2595374, 25.8138861 ], [ 88.260273, 25.8135242 ], [ 88.2668931, 25.8096829 ], [ 88.2692283, 25.8083869 ], [ 88.2696792, 25.8078613 ], [ 88.2699878, 25.8072247 ], [ 88.2699685, 25.8066267 ], [ 88.2698704, 25.80597 ], [ 88.2703024, 25.8058766 ], [ 88.2703024, 25.8055847 ], [ 88.2707695, 25.805538 ], [ 88.2708746, 25.8043821 ], [ 88.2709446, 25.8041311 ], [ 88.2710964, 25.8029635 ], [ 88.2711314, 25.800173 ], [ 88.2717406, 25.7920196 ], [ 88.2717152, 25.7915213 ], [ 88.2718011, 25.7896898 ], [ 88.2715889, 25.7893233 ], [ 88.2711067, 25.7892847 ], [ 88.2705473, 25.7889375 ], [ 88.2701807, 25.788571 ], [ 88.2704315, 25.787973 ], [ 88.2705473, 25.7875679 ], [ 88.2707209, 25.7866034 ], [ 88.2705473, 25.7856485 ], [ 88.2703351, 25.7850698 ], [ 88.2699107, 25.7846454 ], [ 88.2695635, 25.7846454 ], [ 88.2691391, 25.7845297 ], [ 88.2677394, 25.7836535 ], [ 88.2672544, 25.7838787 ], [ 88.2668821, 25.7839317 ], [ 88.2664749, 25.7832898 ], [ 88.2679431, 25.7821955 ], [ 88.2686182, 25.7814432 ], [ 88.2691776, 25.7810188 ], [ 88.2696985, 25.7809995 ], [ 88.2704894, 25.7808259 ], [ 88.2712036, 25.7803452 ], [ 88.2720523, 25.7799121 ], [ 88.2731089, 25.779202 ], [ 88.2744439, 25.7782217 ], [ 88.2754856, 25.7771801 ], [ 88.2771243, 25.776373 ], [ 88.2768949, 25.7763865 ], [ 88.2762743, 25.7762246 ], [ 88.2762203, 25.7761032 ], [ 88.2762743, 25.7759143 ], [ 88.2763687, 25.7757659 ], [ 88.276652, 25.775496 ], [ 88.2769084, 25.7753476 ], [ 88.2770568, 25.7751992 ], [ 88.2783212, 25.7742865 ], [ 88.2786299, 25.7742479 ], [ 88.2791314, 25.774518 ], [ 88.2802503, 25.7756561 ], [ 88.2807711, 25.7757912 ], [ 88.2812727, 25.7757912 ], [ 88.2818005, 25.7756561 ], [ 88.2821618, 25.7754529 ], [ 88.2826586, 25.7750465 ], [ 88.2832231, 25.7747755 ], [ 88.2836747, 25.77464 ], [ 88.2838961, 25.7747977 ], [ 88.2847449, 25.7744698 ], [ 88.2852658, 25.7744119 ], [ 88.2862881, 25.7745469 ], [ 88.2875132, 25.7744142 ], [ 88.2878068, 25.7742788 ], [ 88.2882558, 25.7742383 ], [ 88.2885065, 25.7741611 ], [ 88.2887959, 25.7742383 ], [ 88.289336, 25.7742383 ], [ 88.2907249, 25.7737946 ], [ 88.2896447, 25.7713447 ], [ 88.290069, 25.7711711 ], [ 88.290397, 25.7708432 ], [ 88.2904163, 25.7702645 ], [ 88.2903005, 25.7697437 ], [ 88.2897218, 25.7691842 ], [ 88.2887766, 25.7680075 ], [ 88.2900648, 25.7674371 ], [ 88.2916679, 25.7669629 ], [ 88.294355, 25.7658565 ], [ 88.2996387, 25.764163 ], [ 88.2982867, 25.7635611 ], [ 88.3002157, 25.7629438 ], [ 88.2994248, 25.7608219 ], [ 88.3031093, 25.7593076 ], [ 88.3045753, 25.7588639 ], [ 88.3061379, 25.7582081 ], [ 88.3104396, 25.7565684 ], [ 88.3110569, 25.7561054 ], [ 88.3116163, 25.7558546 ], [ 88.3126966, 25.7556135 ], [ 88.3134489, 25.7552856 ], [ 88.3134489, 25.7544947 ], [ 88.3143382, 25.7540133 ], [ 88.3150833, 25.7537198 ], [ 88.3160994, 25.7532456 ], [ 88.3166639, 25.7529295 ], [ 88.3170026, 25.7526359 ], [ 88.3170252, 25.7524553 ], [ 88.3167994, 25.7514166 ], [ 88.3150204, 25.7467374 ], [ 88.3163346, 25.7462394 ], [ 88.3189508, 25.7454983 ], [ 88.3207043, 25.7451727 ], [ 88.3206687, 25.7437579 ], [ 88.3199341, 25.7438778 ], [ 88.3188216, 25.7442201 ], [ 88.3188216, 25.7433215 ], [ 88.3191639, 25.7427653 ], [ 88.3200197, 25.7423374 ], [ 88.3202869, 25.7419053 ], [ 88.3202308, 25.7401537 ], [ 88.3211627, 25.7399292 ], [ 88.3203192, 25.738786 ], [ 88.3210876, 25.7375306 ], [ 88.323186, 25.7378019 ], [ 88.325275, 25.7375685 ], [ 88.3259066, 25.7377895 ], [ 88.3270055, 25.7387937 ], [ 88.328406, 25.7403264 ], [ 88.3300464, 25.739742 ], [ 88.3338411, 25.7386801 ], [ 88.337211, 25.7379013 ], [ 88.3377348, 25.7377314 ], [ 88.3373525, 25.7365137 ], [ 88.3377348, 25.736358 ], [ 88.3377765, 25.7360048 ], [ 88.337749, 25.735296 ], [ 88.3387401, 25.7349987 ], [ 88.3414021, 25.7348146 ], [ 88.3414021, 25.7344182 ], [ 88.3415418, 25.7335232 ], [ 88.3418551, 25.7325492 ], [ 88.3424074, 25.7316855 ], [ 88.3431861, 25.7314306 ], [ 88.3432852, 25.7307651 ], [ 88.3435528, 25.730742 ], [ 88.3435401, 25.730397 ], [ 88.3441091, 25.7301429 ], [ 88.3441631, 25.7296607 ], [ 88.3454783, 25.7301002 ], [ 88.3464624, 25.730528 ], [ 88.3475321, 25.730742 ], [ 88.3481161, 25.7306746 ], [ 88.3480993, 25.7301421 ], [ 88.3494444, 25.7303262 ], [ 88.3506196, 25.7302696 ], [ 88.3509979, 25.7298434 ], [ 88.3513402, 25.7288593 ], [ 88.3517681, 25.7283459 ], [ 88.3521959, 25.7280891 ], [ 88.3544209, 25.7274473 ], [ 88.355405, 25.7272762 ], [ 88.3560992, 25.7292643 ], [ 88.359149, 25.7279464 ], [ 88.3588708, 25.7272334 ], [ 88.3589136, 25.7265916 ], [ 88.3585285, 25.7250298 ], [ 88.3579761, 25.7235857 ], [ 88.3570335, 25.7213759 ], [ 88.3580599, 25.7209883 ], [ 88.3596099, 25.7206427 ], [ 88.3610958, 25.7204943 ], [ 88.3628462, 25.7202133 ], [ 88.3646043, 25.7198097 ], [ 88.3648183, 25.719553 ], [ 88.3641449, 25.7182758 ], [ 88.3651608, 25.718192 ], [ 88.3652446, 25.7174379 ], [ 88.365674, 25.7174136 ], [ 88.3657787, 25.717019 ], [ 88.3679781, 25.7164534 ], [ 88.3704603, 25.7158355 ], [ 88.372135, 25.7156379 ], [ 88.3728063, 25.7165162 ], [ 88.373508, 25.716223 ], [ 88.3742316, 25.7170499 ], [ 88.374745, 25.7164937 ], [ 88.3751301, 25.7158091 ], [ 88.37488, 25.7149557 ], [ 88.3754875, 25.7147043 ], [ 88.3751419, 25.7139712 ], [ 88.3748734, 25.7130707 ], [ 88.3749219, 25.7121384 ], [ 88.3742516, 25.7121384 ], [ 88.3739748, 25.7117443 ], [ 88.3738893, 25.7108457 ], [ 88.3732357, 25.7094572 ], [ 88.3727225, 25.7096353 ], [ 88.3716647, 25.7097924 ], [ 88.3699261, 25.7102218 ], [ 88.3698738, 25.7094886 ], [ 88.3696957, 25.7087974 ], [ 88.3702927, 25.7086193 ], [ 88.3703137, 25.7083366 ], [ 88.370748, 25.7082312 ], [ 88.3713086, 25.7082109 ], [ 88.3713191, 25.7078129 ], [ 88.3720082, 25.707714 ], [ 88.3720922, 25.7072944 ], [ 88.3720494, 25.7066525 ], [ 88.3719638, 25.7063102 ], [ 88.3707658, 25.704941 ], [ 88.3708941, 25.7031012 ], [ 88.370509, 25.702331 ], [ 88.3702718, 25.7011728 ], [ 88.3707326, 25.7000312 ], [ 88.3714931, 25.6999349 ], [ 88.3717071, 25.6992503 ], [ 88.3716333, 25.6983555 ], [ 88.3711829, 25.6982612 ], [ 88.3711725, 25.696774 ], [ 88.3715914, 25.6966379 ], [ 88.3721255, 25.6967321 ], [ 88.3722175, 25.6972076 ], [ 88.3735604, 25.6976642 ], [ 88.3767988, 25.6975816 ], [ 88.3777829, 25.6973676 ], [ 88.3794944, 25.6974532 ], [ 88.3805641, 25.6973249 ], [ 88.3822756, 25.6973249 ], [ 88.3831742, 25.6967686 ], [ 88.3834472, 25.6956743 ], [ 88.3843479, 25.6957686 ], [ 88.3854188, 25.6957651 ], [ 88.3855275, 25.6951855 ], [ 88.3859126, 25.694672 ], [ 88.3872818, 25.6941158 ], [ 88.3885687, 25.6939881 ], [ 88.3914384, 25.6935378 ], [ 88.3912079, 25.6927837 ], [ 88.3905586, 25.6916421 ], [ 88.3899774, 25.6901365 ], [ 88.3898062, 25.6888529 ], [ 88.3895923, 25.6881683 ], [ 88.3902769, 25.6873126 ], [ 88.3902769, 25.6848737 ], [ 88.3907904, 25.684403 ], [ 88.3918173, 25.6843602 ], [ 88.3928014, 25.6839751 ], [ 88.3934004, 25.6842746 ], [ 88.3945175, 25.6849706 ], [ 88.3957537, 25.6853015 ], [ 88.3973796, 25.6853443 ], [ 88.3989582, 25.6854838 ], [ 88.4006743, 25.6859861 ], [ 88.4023858, 25.6861145 ], [ 88.4034983, 25.6860717 ], [ 88.4042257, 25.6853015 ], [ 88.4049103, 25.6843602 ], [ 88.405167, 25.6834189 ], [ 88.4047814, 25.6823208 ], [ 88.4035455, 25.679692 ], [ 88.4030847, 25.6786028 ], [ 88.4025569, 25.676744 ], [ 88.4021719, 25.6748614 ], [ 88.4019151, 25.6732354 ], [ 88.4022146, 25.6728076 ], [ 88.4030276, 25.672508 ], [ 88.4034555, 25.6722513 ], [ 88.4056377, 25.6719946 ], [ 88.4075203, 25.6718662 ], [ 88.4082477, 25.6716951 ], [ 88.4089751, 25.6711816 ], [ 88.4099164, 25.6708393 ], [ 88.4134994, 25.6701337 ], [ 88.4140653, 25.6699669 ], [ 88.4148425, 25.6694163 ], [ 88.4161559, 25.6686998 ], [ 88.4176186, 25.6682371 ], [ 88.4185142, 25.6677595 ], [ 88.419073, 25.6686144 ], [ 88.4199287, 25.6693846 ], [ 88.4207417, 25.6704115 ], [ 88.4216402, 25.6705826 ], [ 88.4227527, 25.6706254 ], [ 88.4245498, 25.670497 ], [ 88.4249349, 25.6699836 ], [ 88.4256195, 25.6697696 ], [ 88.4275449, 25.6696841 ], [ 88.4286136, 25.6692313 ], [ 88.4291835, 25.6688893 ], [ 88.4292022, 25.6688781 ], [ 88.4295946, 25.6688127 ], [ 88.4309251, 25.6688711 ], [ 88.4323371, 25.6687855 ], [ 88.4349899, 25.6683576 ], [ 88.4366587, 25.6680153 ], [ 88.4386269, 25.6679726 ], [ 88.4394399, 25.6677158 ], [ 88.4403812, 25.6669884 ], [ 88.4428629, 25.6658332 ], [ 88.4438898, 25.665063 ], [ 88.4446172, 25.6652342 ], [ 88.4455585, 25.6653625 ], [ 88.4475267, 25.665063 ], [ 88.4489815, 25.6647207 ], [ 88.4508214, 25.6645496 ], [ 88.4517199, 25.6651058 ], [ 88.4524473, 25.6650202 ], [ 88.4534742, 25.6649774 ], [ 88.4542444, 25.6645068 ], [ 88.4544155, 25.6638222 ], [ 88.4544155, 25.6631804 ], [ 88.4543727, 25.6616828 ], [ 88.4541588, 25.6603136 ], [ 88.4541588, 25.6581314 ], [ 88.4543299, 25.6571045 ], [ 88.4548434, 25.656805 ], [ 88.4553996, 25.6551149 ], [ 88.4549717, 25.6513924 ], [ 88.4539448, 25.64583 ], [ 88.4539448, 25.6448887 ], [ 88.4544155, 25.6443752 ], [ 88.4549717, 25.6442468 ], [ 88.4555098, 25.6440606 ], [ 88.4560842, 25.6438618 ], [ 88.4561216, 25.6437651 ], [ 88.4559508, 25.6435372 ], [ 88.4559304, 25.6433379 ], [ 88.4561867, 25.6430002 ], [ 88.4562274, 25.6426504 ], [ 88.4562925, 25.6425527 ], [ 88.4562071, 25.6424754 ], [ 88.4560972, 25.6422313 ], [ 88.4561501, 25.6416781 ], [ 88.4565325, 25.6409905 ], [ 88.4565325, 25.6408888 ], [ 88.4564186, 25.6406264 ], [ 88.4562518, 25.6404108 ], [ 88.4561867, 25.6401749 ], [ 88.455906, 25.6397518 ], [ 88.4559264, 25.6394426 ], [ 88.4558898, 25.6393206 ], [ 88.4557067, 25.6390561 ], [ 88.455548, 25.638987 ], [ 88.4554423, 25.6388812 ], [ 88.4555318, 25.6386249 ], [ 88.455365, 25.6384235 ], [ 88.4553405, 25.6381347 ], [ 88.4552592, 25.6379313 ], [ 88.4553161, 25.6376831 ], [ 88.4554829, 25.6374309 ], [ 88.4554667, 25.6373536 ], [ 88.4551534, 25.6373292 ], [ 88.4550558, 25.6372478 ], [ 88.4549663, 25.6369712 ], [ 88.4549663, 25.6364789 ], [ 88.4548117, 25.6360762 ], [ 88.4548198, 25.635887 ], [ 88.4549703, 25.635586 ], [ 88.4548483, 25.6351385 ], [ 88.4549717, 25.6341704 ], [ 88.4556564, 25.6331862 ], [ 88.4555708, 25.6323733 ], [ 88.4553568, 25.6316459 ], [ 88.4548434, 25.6305334 ], [ 88.454715, 25.6296349 ], [ 88.4549164, 25.6290536 ], [ 88.4561824, 25.6286387 ], [ 88.4559091, 25.6284285 ], [ 88.4554467, 25.6282236 ], [ 88.4553311, 25.6278978 ], [ 88.4550579, 25.6276981 ], [ 88.4549002, 25.6274088 ], [ 88.4540385, 25.6274459 ], [ 88.4536391, 25.6274039 ], [ 88.453513, 25.6273618 ], [ 88.4534394, 25.627036 ], [ 88.4530821, 25.6268048 ], [ 88.4527353, 25.6264475 ], [ 88.4525146, 25.6263319 ], [ 88.4520522, 25.6263844 ], [ 88.4517789, 25.6263424 ], [ 88.4516213, 25.6262373 ], [ 88.4514846, 25.625675 ], [ 88.4512324, 25.6251075 ], [ 88.4504127, 25.6251391 ], [ 88.4497716, 25.6250445 ], [ 88.4495404, 25.6248238 ], [ 88.449162, 25.6240198 ], [ 88.4490569, 25.6239567 ], [ 88.4486891, 25.6238832 ], [ 88.448605, 25.6235889 ], [ 88.4483108, 25.6233262 ], [ 88.4483108, 25.6231055 ], [ 88.4484264, 25.6228427 ], [ 88.4484054, 25.6225905 ], [ 88.4482057, 25.6223383 ], [ 88.4481952, 25.6222542 ], [ 88.4484474, 25.6217182 ], [ 88.4481636, 25.6212558 ], [ 88.4482162, 25.6209405 ], [ 88.4481847, 25.6206778 ], [ 88.4479534, 25.6206673 ], [ 88.4477012, 25.620888 ], [ 88.4475961, 25.6207513 ], [ 88.4475226, 25.6205201 ], [ 88.4476066, 25.6201733 ], [ 88.4480901, 25.6197424 ], [ 88.4481111, 25.6194902 ], [ 88.447985, 25.6190173 ], [ 88.4482897, 25.6186494 ], [ 88.4482792, 25.6184865 ], [ 88.4482162, 25.6183814 ], [ 88.447985, 25.6182448 ], [ 88.4471757, 25.6182343 ], [ 88.4470601, 25.6180136 ], [ 88.4470601, 25.6178139 ], [ 88.4471442, 25.6176878 ], [ 88.4474595, 25.6176037 ], [ 88.4475751, 25.6175302 ], [ 88.4475541, 25.617299 ], [ 88.4473859, 25.6171203 ], [ 88.4472808, 25.6170888 ], [ 88.4465452, 25.6170888 ], [ 88.4463455, 25.6170467 ], [ 88.4461878, 25.6168576 ], [ 88.4461773, 25.6166684 ], [ 88.4462824, 25.6162585 ], [ 88.4462194, 25.6160904 ], [ 88.4459251, 25.6158907 ], [ 88.4455573, 25.6157225 ], [ 88.4451684, 25.615691 ], [ 88.4450003, 25.6155228 ], [ 88.4449267, 25.6150814 ], [ 88.4449267, 25.6144509 ], [ 88.4450213, 25.6138939 ], [ 88.4450738, 25.6138308 ], [ 88.445305, 25.6137678 ], [ 88.4456624, 25.6138729 ], [ 88.44582, 25.61402 ], [ 88.4459777, 25.6140936 ], [ 88.446892, 25.6150814 ], [ 88.4470496, 25.6151655 ], [ 88.4471968, 25.6151655 ], [ 88.4473229, 25.6150814 ], [ 88.4475436, 25.6147136 ], [ 88.4476276, 25.6142932 ], [ 88.4475856, 25.6140725 ], [ 88.4473439, 25.6137625 ], [ 88.4463455, 25.6131319 ], [ 88.446335, 25.6129743 ], [ 88.4463455, 25.6127956 ], [ 88.4465557, 25.6123122 ], [ 88.4465872, 25.6121125 ], [ 88.4465557, 25.6117972 ], [ 88.4464716, 25.6115765 ], [ 88.4465031, 25.6114399 ], [ 88.446913, 25.6105886 ], [ 88.4472913, 25.6100526 ], [ 88.4475331, 25.6098319 ], [ 88.4479114, 25.6096428 ], [ 88.4480165, 25.6095482 ], [ 88.4480585, 25.6094116 ], [ 88.448069, 25.6088756 ], [ 88.4479324, 25.6084867 ], [ 88.447964, 25.6083501 ], [ 88.4483738, 25.6079297 ], [ 88.4483423, 25.6074988 ], [ 88.4479429, 25.6066476 ], [ 88.4475856, 25.6063428 ], [ 88.4476171, 25.6055651 ], [ 88.4477012, 25.605502 ], [ 88.448006, 25.6054179 ], [ 88.4482897, 25.6052498 ], [ 88.4485525, 25.6051762 ], [ 88.4495614, 25.6051132 ], [ 88.449677, 25.6050186 ], [ 88.4496139, 25.6046718 ], [ 88.449677, 25.6045772 ], [ 88.4499818, 25.6045351 ], [ 88.4499228, 25.6043688 ], [ 88.4489815, 25.6033847 ], [ 88.4479546, 25.6028284 ], [ 88.4475695, 25.6013309 ], [ 88.4453873, 25.6005179 ], [ 88.4451734, 25.5994482 ], [ 88.4445316, 25.5982502 ], [ 88.4445316, 25.5971377 ], [ 88.4477406, 25.5971805 ], [ 88.4486051, 25.5972628 ], [ 88.4535454, 25.5981341 ], [ 88.4544515, 25.5982474 ], [ 88.4555929, 25.5984913 ], [ 88.4569608, 25.5987179 ], [ 88.4575524, 25.5986269 ], [ 88.4580499, 25.5984129 ], [ 88.4582329, 25.5981689 ], [ 88.4581719, 25.5977769 ], [ 88.4582155, 25.59762 ], [ 88.4581022, 25.5973935 ], [ 88.457562, 25.5968359 ], [ 88.4573679, 25.5964959 ], [ 88.4577102, 25.5961964 ], [ 88.4625452, 25.5947844 ], [ 88.4625879, 25.594057 ], [ 88.4629302, 25.5930729 ], [ 88.4634437, 25.5923883 ], [ 88.4640427, 25.5921315 ], [ 88.4647701, 25.5921743 ], [ 88.4657782, 25.5918819 ], [ 88.465741, 25.5915759 ], [ 88.4662457, 25.5910857 ], [ 88.466909, 25.5902638 ], [ 88.4671397, 25.5897447 ], [ 88.4671541, 25.5892688 ], [ 88.4670532, 25.5887497 ], [ 88.4669956, 25.5885666 ], [ 88.4666927, 25.5876034 ], [ 88.4667359, 25.5873871 ], [ 88.4668369, 25.5872573 ], [ 88.4677453, 25.5877332 ], [ 88.4686249, 25.5880216 ], [ 88.4691296, 25.5882811 ], [ 88.469317, 25.5882667 ], [ 88.4694035, 25.5881802 ], [ 88.4693747, 25.5879062 ], [ 88.4692449, 25.5877909 ], [ 88.4688844, 25.5876034 ], [ 88.4686393, 25.5873439 ], [ 88.4685528, 25.5859019 ], [ 88.4686249, 25.5854982 ], [ 88.46887, 25.5850367 ], [ 88.4688989, 25.5847339 ], [ 88.4688123, 25.5844888 ], [ 88.4683798, 25.5838688 ], [ 88.4683798, 25.5837823 ], [ 88.4684374, 25.5836525 ], [ 88.4685816, 25.5835804 ], [ 88.469317, 25.5833929 ], [ 88.4698794, 25.5831766 ], [ 88.4700668, 25.5831766 ], [ 88.4702543, 25.5832487 ], [ 88.4703696, 25.5833641 ], [ 88.4705427, 25.5836813 ], [ 88.4707157, 25.5837967 ], [ 88.4709753, 25.5840706 ], [ 88.4712288, 25.5844261 ], [ 88.471764, 25.5850311 ], [ 88.4718803, 25.5852637 ], [ 88.4720664, 25.5854499 ], [ 88.4723689, 25.5854266 ], [ 88.4728998, 25.585093 ], [ 88.4736271, 25.585906 ], [ 88.4741834, 25.5860343 ], [ 88.4755098, 25.585692 ], [ 88.4764083, 25.5855637 ], [ 88.477554, 25.5852645 ], [ 88.4796602, 25.5853069 ], [ 88.4812005, 25.5855209 ], [ 88.480901, 25.5841517 ], [ 88.4808582, 25.5831248 ], [ 88.4810189, 25.5820744 ], [ 88.4817256, 25.5821701 ], [ 88.4826125, 25.5824402 ], [ 88.4828265, 25.583082 ], [ 88.4829548, 25.5840233 ], [ 88.4833399, 25.5847507 ], [ 88.4838534, 25.5864194 ], [ 88.4853509, 25.5862055 ], [ 88.4877898, 25.5856064 ], [ 88.4911273, 25.5846223 ], [ 88.4914268, 25.5842372 ], [ 88.4915124, 25.5833387 ], [ 88.4918119, 25.5829964 ], [ 88.4931383, 25.5829964 ], [ 88.4937801, 25.5830392 ], [ 88.4938229, 25.5833815 ], [ 88.4934806, 25.5838949 ], [ 88.4931811, 25.5841944 ], [ 88.4932239, 25.584494 ], [ 88.493994, 25.584494 ], [ 88.4966469, 25.5843656 ], [ 88.4995327, 25.5840526 ], [ 88.4995327, 25.582102 ], [ 88.4992326, 25.5782384 ], [ 88.4990826, 25.5753126 ], [ 88.4987825, 25.5726868 ], [ 88.497223, 25.5705991 ], [ 88.4954916, 25.5678282 ], [ 88.4949354, 25.5665018 ], [ 88.4941652, 25.5650898 ], [ 88.4937373, 25.5637634 ], [ 88.4937373, 25.5617951 ], [ 88.4938229, 25.561025 ], [ 88.4940796, 25.5606827 ], [ 88.4940796, 25.5599981 ], [ 88.4937801, 25.5593135 ], [ 88.4940368, 25.5589284 ], [ 88.4960051, 25.5588428 ], [ 88.4972031, 25.5588428 ], [ 88.4977595, 25.5574391 ], [ 88.4975657, 25.5556947 ], [ 88.4978758, 25.554997 ], [ 88.4985736, 25.5539503 ], [ 88.4988837, 25.5527486 ], [ 88.4994264, 25.551857 ], [ 88.500473, 25.5508879 ], [ 88.5016747, 25.5500739 ], [ 88.5027214, 25.5499188 ], [ 88.5035354, 25.5496862 ], [ 88.5062102, 25.5483682 ], [ 88.5072181, 25.5475542 ], [ 88.5078383, 25.5468952 ], [ 88.5081484, 25.5459648 ], [ 88.5089237, 25.5446856 ], [ 88.5093501, 25.5447631 ], [ 88.509699, 25.5456547 ], [ 88.5099704, 25.5460036 ], [ 88.5111721, 25.5458873 ], [ 88.5118311, 25.5460036 ], [ 88.512335, 25.5463912 ], [ 88.5129165, 25.5472441 ], [ 88.513808, 25.5473216 ], [ 88.5143895, 25.5472053 ], [ 88.5151648, 25.5469727 ], [ 88.5164053, 25.5467401 ], [ 88.5180334, 25.5458873 ], [ 88.5190413, 25.5450732 ], [ 88.5193901, 25.5445305 ], [ 88.5193514, 25.5422434 ], [ 88.5184598, 25.5389484 ], [ 88.5191576, 25.5381732 ], [ 88.5219098, 25.5360799 ], [ 88.5230728, 25.5355372 ], [ 88.5235767, 25.5357698 ], [ 88.5241582, 25.5363512 ], [ 88.5248559, 25.5371653 ], [ 88.5252824, 25.5385608 ], [ 88.5259026, 25.5401114 ], [ 88.5264841, 25.5411968 ], [ 88.5272981, 25.5431738 ], [ 88.5327252, 25.5421271 ], [ 88.5328802, 25.5404603 ], [ 88.5328414, 25.5341416 ], [ 88.5329577, 25.5326686 ], [ 88.5333841, 25.5327849 ], [ 88.5339269, 25.5334826 ], [ 88.5347021, 25.5339091 ], [ 88.5366791, 25.5342967 ], [ 88.5377645, 25.5346068 ], [ 88.5386561, 25.5349557 ], [ 88.5391213, 25.5346843 ], [ 88.5395865, 25.5338703 ], [ 88.5399354, 25.5329399 ], [ 88.5400904, 25.5318545 ], [ 88.5400904, 25.5306141 ], [ 88.539664, 25.5282494 ], [ 88.5399354, 25.5275904 ], [ 88.5408269, 25.5269314 ], [ 88.5413696, 25.5263887 ], [ 88.5407106, 25.5259623 ], [ 88.5393539, 25.5262337 ], [ 88.5384235, 25.5255747 ], [ 88.5379196, 25.5251483 ], [ 88.5379971, 25.5244117 ], [ 88.5374157, 25.5221246 ], [ 88.5371055, 25.5211943 ], [ 88.5399354, 25.5199926 ], [ 88.5401292, 25.5192561 ], [ 88.5398966, 25.518442 ], [ 88.5393927, 25.5172403 ], [ 88.5393151, 25.5166976 ], [ 88.5393927, 25.5141004 ], [ 88.540982, 25.5123947 ], [ 88.5409045, 25.511697 ], [ 88.5403618, 25.5113093 ], [ 88.5396252, 25.5110767 ], [ 88.5391213, 25.5107666 ], [ 88.5389275, 25.5100689 ], [ 88.5389662, 25.5093711 ], [ 88.5392764, 25.5090222 ], [ 88.5398226, 25.5087153 ], [ 88.5411795, 25.5082764 ], [ 88.5415339, 25.5083552 ], [ 88.5421451, 25.5082923 ], [ 88.5428733, 25.5083102 ], [ 88.5438352, 25.5088496 ], [ 88.5440779, 25.5089215 ], [ 88.5443296, 25.5088856 ], [ 88.544851, 25.5086518 ], [ 88.5454353, 25.508517 ], [ 88.5457319, 25.508535 ], [ 88.5459747, 25.508499 ], [ 88.5458937, 25.5090294 ], [ 88.545714, 25.5092991 ], [ 88.5454892, 25.5094429 ], [ 88.5450667, 25.5095508 ], [ 88.5447161, 25.5099238 ], [ 88.5444375, 25.5100767 ], [ 88.5442756, 25.5102295 ], [ 88.5442756, 25.5104093 ], [ 88.5445363, 25.510625 ], [ 88.5450757, 25.5109576 ], [ 88.5452375, 25.5111284 ], [ 88.545669, 25.5111464 ], [ 88.5461544, 25.5108767 ], [ 88.5463073, 25.5108947 ], [ 88.5464151, 25.5110026 ], [ 88.5467118, 25.5117217 ], [ 88.5468376, 25.512378 ], [ 88.5469275, 25.5126207 ], [ 88.5470804, 25.5128095 ], [ 88.5473411, 25.5129263 ], [ 88.5478535, 25.5130252 ], [ 88.5479883, 25.5131241 ], [ 88.5483389, 25.5136725 ], [ 88.5486147, 25.5143734 ], [ 88.5485636, 25.5142882 ], [ 88.5484917, 25.5147018 ], [ 88.5481771, 25.5152321 ], [ 88.5480372, 25.5166976 ], [ 88.5479984, 25.5176667 ], [ 88.5481922, 25.5181706 ], [ 88.5488124, 25.5188296 ], [ 88.5504018, 25.5197212 ], [ 88.5524563, 25.5210005 ], [ 88.5537355, 25.5211555 ], [ 88.5547822, 25.5208066 ], [ 88.5548597, 25.5197988 ], [ 88.5547822, 25.5187521 ], [ 88.5542007, 25.5180544 ], [ 88.5534642, 25.5174729 ], [ 88.5532704, 25.5166201 ], [ 88.5533867, 25.5159998 ], [ 88.5537743, 25.5155347 ], [ 88.5547047, 25.5147981 ], [ 88.5557901, 25.5141779 ], [ 88.5582322, 25.5134801 ], [ 88.5594727, 25.5133251 ], [ 88.5626514, 25.5135189 ], [ 88.5652098, 25.5137515 ], [ 88.5657526, 25.5137515 ], [ 88.5670318, 25.5139065 ], [ 88.5678458, 25.5137515 ], [ 88.5678846, 25.51317 ], [ 88.5676133, 25.5124335 ], [ 88.5681172, 25.511852 ], [ 88.5690863, 25.5115031 ], [ 88.5701717, 25.5113869 ], [ 88.5711408, 25.5109217 ], [ 88.5716448, 25.5101464 ], [ 88.5723813, 25.5093711 ], [ 88.5731566, 25.5089834 ], [ 88.5740094, 25.5089834 ], [ 88.575056, 25.5087121 ], [ 88.5754536, 25.5086706 ], [ 88.577342, 25.5094153 ], [ 88.5780335, 25.5097877 ], [ 88.578855, 25.5101076 ], [ 88.5800179, 25.5100301 ], [ 88.5820833, 25.5097595 ], [ 88.5825627, 25.5096476 ], [ 88.583889, 25.5096276 ], [ 88.5850475, 25.5097595 ], [ 88.585451, 25.5096656 ], [ 88.5858106, 25.5094219 ], [ 88.5860623, 25.5090583 ], [ 88.5865417, 25.5086069 ], [ 88.5866735, 25.5084052 ], [ 88.5874445, 25.5080097 ], [ 88.5879679, 25.5076141 ], [ 88.5882795, 25.5075023 ], [ 88.5885432, 25.5076181 ], [ 88.5887229, 25.5078139 ], [ 88.5889546, 25.5082813 ], [ 88.5891104, 25.5089005 ], [ 88.5897816, 25.5089045 ], [ 88.5899654, 25.5089445 ], [ 88.5900972, 25.5090404 ], [ 88.5903569, 25.5090923 ], [ 88.5911359, 25.5091083 ], [ 88.5913636, 25.5090563 ], [ 88.5917511, 25.5090523 ], [ 88.5921786, 25.5089285 ], [ 88.5923943, 25.5087327 ], [ 88.5924023, 25.5086089 ], [ 88.5925062, 25.508545 ], [ 88.5927699, 25.508509 ], [ 88.5929337, 25.5084091 ], [ 88.5929496, 25.5080456 ], [ 88.5928817, 25.5079238 ], [ 88.5929337, 25.5078319 ], [ 88.5930974, 25.5077959 ], [ 88.5932532, 25.507692 ], [ 88.5935289, 25.5076561 ], [ 88.5936448, 25.5075802 ], [ 88.5936128, 25.5072686 ], [ 88.5936527, 25.5071128 ], [ 88.5940123, 25.5070449 ], [ 88.5943918, 25.5067812 ], [ 88.5950031, 25.5065695 ], [ 88.5953386, 25.506166 ], [ 88.5954625, 25.506102 ], [ 88.595834, 25.5061939 ], [ 88.5959539, 25.5062778 ], [ 88.5963933, 25.5061939 ], [ 88.5964173, 25.5063258 ], [ 88.5968328, 25.5063298 ], [ 88.59742, 25.5065215 ], [ 88.597416, 25.5068012 ], [ 88.5971404, 25.5070509 ], [ 88.5972203, 25.5072626 ], [ 88.5971603, 25.5074184 ], [ 88.5973122, 25.5075223 ], [ 88.5973321, 25.5076621 ], [ 88.5975878, 25.5078339 ], [ 88.5977077, 25.5084471 ], [ 88.5978595, 25.508523 ], [ 88.5981271, 25.5084751 ], [ 88.5980952, 25.5087907 ], [ 88.598223, 25.5095238 ], [ 88.5981271, 25.5096716 ], [ 88.5981351, 25.5098793 ], [ 88.5981871, 25.5099592 ], [ 88.5984108, 25.5100711 ], [ 88.5988782, 25.510107 ], [ 88.5988782, 25.5103188 ], [ 88.5995374, 25.5103907 ], [ 88.5993993, 25.5116707 ], [ 88.5995123, 25.5117084 ], [ 88.6007936, 25.5117008 ], [ 88.6008345, 25.5123172 ], [ 88.6012996, 25.5132863 ], [ 88.6021525, 25.5147594 ], [ 88.6028115, 25.5160386 ], [ 88.6044008, 25.5162324 ], [ 88.6062227, 25.5163875 ], [ 88.608028, 25.5163806 ], [ 88.6088975, 25.5165038 ], [ 88.6088975, 25.5152245 ], [ 88.6091301, 25.5142942 ], [ 88.6092076, 25.5132863 ], [ 88.6092392, 25.5115745 ], [ 88.6087586, 25.5104018 ], [ 88.6081818, 25.5097866 ], [ 88.6068042, 25.5095262 ], [ 88.6071437, 25.5087485 ], [ 88.6083548, 25.5091714 ], [ 88.6090469, 25.5097674 ], [ 88.6102388, 25.5099596 ], [ 88.611456, 25.5100689 ], [ 88.6128903, 25.5097975 ], [ 88.613588, 25.509216 ], [ 88.6142858, 25.5083632 ], [ 88.6148285, 25.5075492 ], [ 88.6149835, 25.5065025 ], [ 88.6152161, 25.5060373 ], [ 88.6157976, 25.5053396 ], [ 88.6167279, 25.5047193 ], [ 88.6175808, 25.5043317 ], [ 88.6185886, 25.5040991 ], [ 88.6192864, 25.5040604 ], [ 88.6200229, 25.5028586 ], [ 88.6207595, 25.5020446 ], [ 88.6213022, 25.5008817 ], [ 88.6216889, 25.5004516 ], [ 88.6219247, 25.4998621 ], [ 88.6225928, 25.4985652 ], [ 88.6229858, 25.4976613 ], [ 88.6233788, 25.497229 ], [ 88.6249508, 25.4972683 ], [ 88.6263262, 25.4974648 ], [ 88.6306885, 25.4983687 ], [ 88.6345791, 25.4989189 ], [ 88.6370942, 25.4993512 ], [ 88.641142, 25.4997835 ], [ 88.642321, 25.4997835 ], [ 88.6451505, 25.4989189 ], [ 88.6452291, 25.4985652 ], [ 88.6456594, 25.4975486 ], [ 88.6461224, 25.4967918 ], [ 88.6477155, 25.4970004 ], [ 88.6486089, 25.4967968 ], [ 88.6488322, 25.4957951 ], [ 88.6481232, 25.4954228 ], [ 88.6482827, 25.4947138 ], [ 88.6483004, 25.4941112 ], [ 88.6479408, 25.493417 ], [ 88.6464393, 25.4933313 ], [ 88.6459252, 25.4932249 ], [ 88.6441288, 25.493024 ], [ 88.6433821, 25.493024 ], [ 88.6433035, 25.4925917 ], [ 88.6433821, 25.4918844 ], [ 88.6442467, 25.4912556 ], [ 88.644679, 25.4900373 ], [ 88.6451112, 25.488426 ], [ 88.6452684, 25.4864218 ], [ 88.6458186, 25.4852035 ], [ 88.6462215, 25.4829291 ], [ 88.646457, 25.4811719 ], [ 88.646426, 25.4794437 ], [ 88.6466552, 25.4780939 ], [ 88.6468639, 25.4779373 ], [ 88.6470858, 25.477846 ], [ 88.6473076, 25.4778199 ], [ 88.6476338, 25.4778851 ], [ 88.6478034, 25.4779634 ], [ 88.6484819, 25.478942 ], [ 88.648769, 25.4795423 ], [ 88.6489386, 25.479738 ], [ 88.6491866, 25.4798685 ], [ 88.6497607, 25.479999 ], [ 88.6514309, 25.480012 ], [ 88.6518093, 25.4803252 ], [ 88.6520181, 25.4806253 ], [ 88.6522269, 25.4810689 ], [ 88.6525922, 25.4812255 ], [ 88.653349, 25.4812255 ], [ 88.6536361, 25.4811864 ], [ 88.6540667, 25.4808602 ], [ 88.6543277, 25.4807427 ], [ 88.6547191, 25.4807297 ], [ 88.6550163, 25.4808032 ], [ 88.6552345, 25.4810102 ], [ 88.655626, 25.4811276 ], [ 88.6557043, 25.4814669 ], [ 88.6557826, 25.4815321 ], [ 88.6561871, 25.4816496 ], [ 88.6570874, 25.4818062 ], [ 88.6574006, 25.4817279 ], [ 88.6586924, 25.4817409 ], [ 88.6592796, 25.4816365 ], [ 88.6597493, 25.4817018 ], [ 88.6599719, 25.4818342 ], [ 88.660158, 25.4805161 ], [ 88.6603955, 25.4796611 ], [ 88.6608503, 25.4783607 ], [ 88.6631003, 25.4731532 ], [ 88.6646852, 25.4733513 ], [ 88.6669493, 25.4738607 ], [ 88.6677559, 25.4739173 ], [ 88.6687465, 25.4742003 ], [ 88.6707276, 25.4741437 ], [ 88.671888, 25.4740588 ], [ 88.6734729, 25.4737758 ], [ 88.6748879, 25.4736343 ], [ 88.6756804, 25.4736626 ], [ 88.6797983, 25.4742003 ], [ 88.6819492, 25.4745966 ], [ 88.6827983, 25.4751626 ], [ 88.6838454, 25.4754456 ], [ 88.6847511, 25.4755305 ], [ 88.6872416, 25.4755588 ], [ 88.6876661, 25.4755022 ], [ 88.6910623, 25.473889 ], [ 88.6931, 25.4731815 ], [ 88.6938925, 25.472757 ], [ 88.6944868, 25.4722192 ], [ 88.6957038, 25.4714268 ], [ 88.6962698, 25.4712004 ], [ 88.6994113, 25.4713136 ], [ 88.699666, 25.4717947 ], [ 88.6999207, 25.4724739 ], [ 88.7002604, 25.4731249 ], [ 88.7006849, 25.4737192 ], [ 88.7018736, 25.4749928 ], [ 88.7037132, 25.4764928 ], [ 88.7047603, 25.4765777 ], [ 88.7060905, 25.4765777 ], [ 88.7071943, 25.4767475 ], [ 88.7077603, 25.4769456 ], [ 88.7087792, 25.4779079 ], [ 88.7099112, 25.4797475 ], [ 88.7101942, 25.4805116 ], [ 88.7102508, 25.4814173 ], [ 88.7098829, 25.4833984 ], [ 88.7093452, 25.4870776 ], [ 88.7084112, 25.4919879 ], [ 88.7084395, 25.4925257 ], [ 88.7087792, 25.4932332 ], [ 88.7091471, 25.4938275 ], [ 88.7101093, 25.4942521 ], [ 88.7117508, 25.4948464 ], [ 88.7138734, 25.4956954 ], [ 88.7155432, 25.4971671 ], [ 88.715798, 25.4977049 ], [ 88.7158263, 25.4984407 ], [ 88.7159678, 25.4988935 ], [ 88.7164206, 25.4993463 ], [ 88.7172315, 25.5000001 ], [ 88.7181104, 25.5002069 ], [ 88.7188874, 25.5003897 ], [ 88.721274, 25.5015586 ], [ 88.7225404, 25.5020457 ], [ 88.7252192, 25.5025328 ], [ 88.7266316, 25.5033607 ], [ 88.7285798, 25.5035069 ], [ 88.7323302, 25.5036043 ], [ 88.7344732, 25.5040913 ], [ 88.7374487, 25.5042567 ], [ 88.7396138, 25.5048227 ], [ 88.7414251, 25.5050491 ], [ 88.7421892, 25.5008746 ], [ 88.7423024, 25.4989501 ], [ 88.7426138, 25.4964596 ], [ 88.7425572, 25.4957803 ], [ 88.7398685, 25.489271 ], [ 88.7403496, 25.4891012 ], [ 88.744081, 25.4881127 ], [ 88.7447194, 25.4898683 ], [ 88.7459163, 25.4921026 ], [ 88.7473595, 25.4939085 ], [ 88.748658, 25.4950834 ], [ 88.7495855, 25.4952689 ], [ 88.7512565, 25.4951304 ], [ 88.7526462, 25.4948051 ], [ 88.7543466, 25.4942486 ], [ 88.7562634, 25.4936921 ], [ 88.7583348, 25.4935376 ], [ 88.761612, 25.4936303 ], [ 88.7637452, 25.4947742 ], [ 88.7655074, 25.4960727 ], [ 88.7664855, 25.4971147 ], [ 88.7672078, 25.4985151 ], [ 88.7680735, 25.4999372 ], [ 88.7690937, 25.5013285 ], [ 88.7692566, 25.5017038 ], [ 88.7697097, 25.5027478 ], [ 88.7701804, 25.5033754 ], [ 88.7694333, 25.5039692 ], [ 88.7688212, 25.5041278 ], [ 88.7681931, 25.504003 ], [ 88.7666242, 25.5041598 ], [ 88.7653352, 25.5043457 ], [ 88.7644537, 25.5046529 ], [ 88.7631048, 25.5054275 ], [ 88.7614354, 25.5065628 ], [ 88.7606474, 25.5072439 ], [ 88.7590314, 25.508486 ], [ 88.7584704, 25.5091938 ], [ 88.7583102, 25.5102756 ], [ 88.7584838, 25.5111705 ], [ 88.7587643, 25.511718 ], [ 88.7590581, 25.5129868 ], [ 88.7600347, 25.5143317 ], [ 88.7608344, 25.5153107 ], [ 88.7607275, 25.5162322 ], [ 88.7604008, 25.5174172 ], [ 88.7596057, 25.5209468 ], [ 88.7593252, 25.5218683 ], [ 88.7591456, 25.5222809 ], [ 88.758413, 25.5227108 ], [ 88.7583325, 25.5231591 ], [ 88.7585088, 25.5239433 ], [ 88.7591287, 25.5252056 ], [ 88.7593451, 25.526607 ], [ 88.7606623, 25.5263078 ], [ 88.7628588, 25.525628 ], [ 88.7641662, 25.5254711 ], [ 88.7664673, 25.5254188 ], [ 88.7666765, 25.5246604 ], [ 88.7673041, 25.5229346 ], [ 88.7677224, 25.5220979 ], [ 88.7685069, 25.5215749 ], [ 88.7709126, 25.5202152 ], [ 88.7724815, 25.5195353 ], [ 88.7732965, 25.5192262 ], [ 88.7737576, 25.5191921 ], [ 88.7738286, 25.5189795 ], [ 88.7740157, 25.518801 ], [ 88.7740281, 25.5187374 ], [ 88.7744075, 25.5186894 ], [ 88.7746305, 25.518653 ], [ 88.7751903, 25.5186356 ], [ 88.7758019, 25.518678 ], [ 88.776131, 25.5187243 ], [ 88.7761946, 25.5184226 ], [ 88.7761583, 25.5182309 ], [ 88.7761165, 25.5180228 ], [ 88.7761195, 25.5178117 ], [ 88.77602, 25.5176096 ], [ 88.7760598, 25.5174351 ], [ 88.7759533, 25.5172099 ], [ 88.7758623, 25.5170372 ], [ 88.7759657, 25.5165498 ], [ 88.7761331, 25.5165727 ], [ 88.7763163, 25.5165543 ], [ 88.7767052, 25.5165823 ], [ 88.7777901, 25.516498 ], [ 88.7781412, 25.5162996 ], [ 88.7783376, 25.5162469 ], [ 88.7783399, 25.5161727 ], [ 88.7789343, 25.516094 ], [ 88.7789579, 25.5159529 ], [ 88.778893, 25.5159338 ], [ 88.7789154, 25.5155541 ], [ 88.779271, 25.5155006 ], [ 88.7796082, 25.5154223 ], [ 88.7798828, 25.5154085 ], [ 88.7802239, 25.5153572 ], [ 88.7805806, 25.5155145 ], [ 88.7806217, 25.5157753 ], [ 88.7807977, 25.5157637 ], [ 88.7810372, 25.5159639 ], [ 88.7810636, 25.5162455 ], [ 88.7820006, 25.5161965 ], [ 88.7820063, 25.5159478 ], [ 88.7821566, 25.515943 ], [ 88.782063, 25.515273 ], [ 88.7823319, 25.5152431 ], [ 88.7823632, 25.5155795 ], [ 88.7826039, 25.5155601 ], [ 88.7828002, 25.5166081 ], [ 88.783574, 25.5165394 ], [ 88.7850284, 25.5164941 ], [ 88.7863093, 25.5165322 ], [ 88.7863993, 25.5173554 ], [ 88.7864079, 25.5176959 ], [ 88.785859, 25.5177561 ], [ 88.7849767, 25.5183099 ], [ 88.7849834, 25.5185227 ], [ 88.7853488, 25.5187852 ], [ 88.7862071, 25.5190062 ], [ 88.7870743, 25.5192106 ], [ 88.7882686, 25.5197179 ], [ 88.7896206, 25.520003 ], [ 88.7897519, 25.5201702 ], [ 88.7914635, 25.5207299 ], [ 88.7924743, 25.5210227 ], [ 88.7923317, 25.5228782 ], [ 88.7934666, 25.5229261 ], [ 88.7940978, 25.5229848 ], [ 88.7955827, 25.5231838 ], [ 88.7963703, 25.5232691 ], [ 88.7979304, 25.5234774 ], [ 88.7989984, 25.5236274 ], [ 88.7989649, 25.5239215 ], [ 88.7996894, 25.5241071 ], [ 88.8013416, 25.5242683 ], [ 88.8026327, 25.5243472 ], [ 88.8029849, 25.5243371 ], [ 88.8032638, 25.5244443 ], [ 88.8034385, 25.5242048 ], [ 88.8040467, 25.5241495 ], [ 88.8040381, 25.5235013 ], [ 88.8046134, 25.5235836 ], [ 88.8046376, 25.5232708 ], [ 88.8091796, 25.5234054 ], [ 88.8099976, 25.5233937 ], [ 88.8102511, 25.5233229 ], [ 88.8103853, 25.5233387 ], [ 88.8104608, 25.5231597 ], [ 88.8107948, 25.522937 ], [ 88.8107948, 25.5227223 ], [ 88.8107232, 25.5226189 ], [ 88.8109618, 25.5222133 ], [ 88.8109141, 25.5221099 ], [ 88.8107948, 25.5220145 ], [ 88.8106596, 25.5219747 ], [ 88.8106596, 25.5217839 ], [ 88.810755, 25.5214498 ], [ 88.8106198, 25.5210204 ], [ 88.8103971, 25.5207023 ], [ 88.8104846, 25.5203206 ], [ 88.8098882, 25.5193941 ], [ 88.8094587, 25.519076 ], [ 88.8094269, 25.5183443 ], [ 88.8090293, 25.5183125 ], [ 88.8089418, 25.517891 ], [ 88.8088702, 25.5178195 ], [ 88.8081784, 25.5178433 ], [ 88.8080432, 25.5176843 ], [ 88.8079636, 25.5175014 ], [ 88.8082658, 25.5170481 ], [ 88.8083056, 25.5162926 ], [ 88.8079955, 25.5160381 ], [ 88.8076933, 25.5158631 ], [ 88.807741, 25.5152547 ], [ 88.8079398, 25.5146344 ], [ 88.8079, 25.5140778 ], [ 88.8079795, 25.5136483 ], [ 88.8078762, 25.5132268 ], [ 88.8079398, 25.5126463 ], [ 88.8079875, 25.5125668 ], [ 88.8083454, 25.5127179 ], [ 88.8087191, 25.5126383 ], [ 88.8087828, 25.512527 ], [ 88.8088623, 25.5118272 ], [ 88.8092679, 25.5115727 ], [ 88.8093554, 25.5114295 ], [ 88.8093792, 25.5111234 ], [ 88.8092917, 25.5109086 ], [ 88.8093633, 25.5107655 ], [ 88.8097212, 25.5107973 ], [ 88.8097132, 25.5105428 ], [ 88.8098007, 25.5104951 ], [ 88.8102381, 25.5104315 ], [ 88.8103097, 25.5103758 ], [ 88.8103812, 25.5100895 ], [ 88.8103892, 25.5098112 ], [ 88.8103097, 25.5095567 ], [ 88.8103415, 25.5094533 ], [ 88.8105721, 25.5091829 ], [ 88.8107153, 25.5087932 ], [ 88.8106993, 25.5086222 ], [ 88.810596, 25.5084791 ], [ 88.810429, 25.508336 ], [ 88.8103892, 25.5082405 ], [ 88.8101109, 25.5080258 ], [ 88.8101427, 25.5074691 ], [ 88.8100949, 25.5073419 ], [ 88.8095224, 25.5066977 ], [ 88.8093315, 25.5062245 ], [ 88.8093394, 25.5060973 ], [ 88.8098166, 25.5060257 ], [ 88.8098643, 25.5059462 ], [ 88.8097848, 25.505644 ], [ 88.8096496, 25.5056201 ], [ 88.8096257, 25.5055327 ], [ 88.8098007, 25.505302 ], [ 88.80992, 25.5050157 ], [ 88.8098166, 25.5044829 ], [ 88.8097689, 25.5038904 ], [ 88.8098882, 25.5034848 ], [ 88.8097291, 25.5028407 ], [ 88.8097291, 25.5018864 ], [ 88.8098882, 25.5015683 ], [ 88.8101983, 25.5011547 ], [ 88.8103256, 25.5010513 ], [ 88.8103733, 25.5009321 ], [ 88.8103745, 25.5005169 ], [ 88.8103072, 25.5003284 ], [ 88.809863, 25.499965 ], [ 88.8096746, 25.4996958 ], [ 88.8098361, 25.4993324 ], [ 88.8097823, 25.498794 ], [ 88.8099034, 25.4986728 ], [ 88.8101053, 25.4985988 ], [ 88.8105091, 25.4983565 ], [ 88.8106302, 25.4982354 ], [ 88.810711, 25.498047 ], [ 88.8109264, 25.4978047 ], [ 88.8110879, 25.497697 ], [ 88.8111417, 25.4975355 ], [ 88.8111821, 25.4970509 ], [ 88.8112763, 25.4969163 ], [ 88.8114109, 25.4964722 ], [ 88.8116263, 25.4961895 ], [ 88.8116397, 25.4957588 ], [ 88.8115051, 25.4952742 ], [ 88.8114648, 25.495005 ], [ 88.8114984, 25.4948368 ], [ 88.8117541, 25.4942311 ], [ 88.8120637, 25.4937869 ], [ 88.8124406, 25.4933562 ], [ 88.8125348, 25.4931543 ], [ 88.8125079, 25.492737 ], [ 88.8124406, 25.4924948 ], [ 88.8121714, 25.491916 ], [ 88.8121983, 25.4915526 ], [ 88.8122791, 25.4914314 ], [ 88.8127906, 25.4910545 ], [ 88.8128713, 25.4908526 ], [ 88.8128579, 25.4904892 ], [ 88.8129386, 25.4902066 ], [ 88.8135039, 25.4891298 ], [ 88.8136385, 25.489049 ], [ 88.8142442, 25.4891298 ], [ 88.8144596, 25.4890086 ], [ 88.8143788, 25.4884299 ], [ 88.8145, 25.4881876 ], [ 88.8150922, 25.4883087 ], [ 88.8176823, 25.488335 ], [ 88.8186228, 25.4884604 ], [ 88.8218206, 25.4892128 ], [ 88.823639, 25.4892128 ], [ 88.8253319, 25.4896517 ], [ 88.8265859, 25.4897771 ], [ 88.8276518, 25.490216 ], [ 88.8289686, 25.4903414 ], [ 88.8295971, 25.4886387 ], [ 88.8302483, 25.4873846 ], [ 88.8311406, 25.4862511 ], [ 88.8320409, 25.4848864 ], [ 88.8332323, 25.4821276 ], [ 88.8333834, 25.4809938 ], [ 88.833504, 25.4786545 ], [ 88.8338899, 25.4774245 ], [ 88.8347371, 25.4762336 ], [ 88.8358657, 25.4748542 ], [ 88.8366181, 25.4736002 ], [ 88.8373079, 25.4725969 ], [ 88.8375587, 25.471531 ], [ 88.8376214, 25.4704651 ], [ 88.8376214, 25.4693992 ], [ 88.8369944, 25.4682705 ], [ 88.8359998, 25.4671367 ], [ 88.8353211, 25.4653391 ], [ 88.8351193, 25.464367 ], [ 88.8351377, 25.4634865 ], [ 88.8355229, 25.4626611 ], [ 88.8366418, 25.4614688 ], [ 88.8381857, 25.4605896 ], [ 88.838898, 25.4595795 ], [ 88.839595, 25.4583322 ], [ 88.838953, 25.4572317 ], [ 88.8382743, 25.4556542 ], [ 88.8379808, 25.4543152 ], [ 88.8378708, 25.453398 ], [ 88.837271, 25.453023 ], [ 88.8368906, 25.453014 ], [ 88.8367255, 25.4528902 ], [ 88.8364882, 25.4526116 ], [ 88.8362818, 25.4525187 ], [ 88.8358485, 25.4524878 ], [ 88.8353635, 25.4523846 ], [ 88.8347754, 25.4521886 ], [ 88.8345278, 25.4522401 ], [ 88.8344246, 25.452364 ], [ 88.8341357, 25.4520441 ], [ 88.8340016, 25.4516881 ], [ 88.8338262, 25.4514715 ], [ 88.8337746, 25.4512342 ], [ 88.8336508, 25.451131 ], [ 88.8334135, 25.4510794 ], [ 88.8330936, 25.450646 ], [ 88.8327892, 25.4506151 ], [ 88.8324384, 25.4506873 ], [ 88.831871, 25.4503675 ], [ 88.831644, 25.4502849 ], [ 88.831644, 25.4501611 ], [ 88.8317368, 25.4501095 ], [ 88.8324281, 25.4500889 ], [ 88.8325726, 25.4499444 ], [ 88.8325107, 25.4497484 ], [ 88.8319741, 25.4494492 ], [ 88.8317162, 25.4493873 ], [ 88.8314376, 25.4495524 ], [ 88.83119, 25.4495627 ], [ 88.8307721, 25.4492016 ], [ 88.8303594, 25.4491706 ], [ 88.8302666, 25.449119 ], [ 88.8302046, 25.4490262 ], [ 88.8301634, 25.4487579 ], [ 88.8295546, 25.4485206 ], [ 88.8296578, 25.4482317 ], [ 88.8308856, 25.4486341 ], [ 88.8310377, 25.4482374 ], [ 88.8300396, 25.4474372 ], [ 88.8287178, 25.4466072 ], [ 88.8276518, 25.4462937 ], [ 88.8268994, 25.4459175 ], [ 88.8263978, 25.4454159 ], [ 88.8259589, 25.4442246 ], [ 88.8258962, 25.4428451 ], [ 88.8260216, 25.4421554 ], [ 88.8264605, 25.441403 ], [ 88.8273383, 25.4403998 ], [ 88.8275891, 25.4397728 ], [ 88.8275264, 25.4389576 ], [ 88.8279026, 25.4373274 ], [ 88.8285924, 25.4369512 ], [ 88.8321586, 25.4369311 ], [ 88.8326027, 25.4361366 ], [ 88.8327429, 25.4351317 ], [ 88.8326961, 25.432491 ], [ 88.8326027, 25.4315562 ], [ 88.8335458, 25.4315589 ], [ 88.8341101, 25.4314962 ], [ 88.8347371, 25.4308692 ], [ 88.8348625, 25.4296151 ], [ 88.8347371, 25.428173 ], [ 88.8342982, 25.4276714 ], [ 88.8332323, 25.4274206 ], [ 88.8311318, 25.4272952 ], [ 88.8300031, 25.4274206 ], [ 88.8291253, 25.4264801 ], [ 88.8290626, 25.4253514 ], [ 88.8296896, 25.4243482 ], [ 88.8309437, 25.4235958 ], [ 88.8313199, 25.4226553 ], [ 88.8313199, 25.4211504 ], [ 88.8308183, 25.4195829 ], [ 88.8303167, 25.4177019 ], [ 88.8294388, 25.4169494 ], [ 88.8271816, 25.4170121 ], [ 88.8250077, 25.4151044 ], [ 88.8204507, 25.4151511 ], [ 88.8204725, 25.4173257 ], [ 88.8204098, 25.4178273 ], [ 88.8200336, 25.4181408 ], [ 88.8190018, 25.4182592 ], [ 88.8187796, 25.4173257 ], [ 88.8187169, 25.4164792 ], [ 88.8178391, 25.4140965 ], [ 88.8162715, 25.4123409 ], [ 88.8142024, 25.4112123 ], [ 88.8138262, 25.4105853 ], [ 88.8143905, 25.410209 ], [ 88.8155191, 25.4100836 ], [ 88.8169055, 25.4098109 ], [ 88.8199134, 25.4095821 ], [ 88.8232155, 25.4095494 ], [ 88.8232941, 25.408955 ], [ 88.8232646, 25.408356 ], [ 88.8233299, 25.4065251 ], [ 88.8236405, 25.4025364 ], [ 88.8236732, 25.4011632 ], [ 88.8248993, 25.4013267 ], [ 88.8281197, 25.4013757 ], [ 88.8299718, 25.4012427 ], [ 88.8318528, 25.4012427 ], [ 88.8353641, 25.4017444 ], [ 88.8366808, 25.4017444 ], [ 88.8374333, 25.4013054 ], [ 88.8378722, 25.4004276 ], [ 88.8380603, 25.3994244 ], [ 88.8384365, 25.398045 ], [ 88.8391262, 25.3976688 ], [ 88.8401294, 25.3976688 ], [ 88.8410699, 25.3976061 ], [ 88.8414462, 25.396352 ], [ 88.8415089, 25.3952861 ], [ 88.8415089, 25.3930916 ], [ 88.8408818, 25.3922137 ], [ 88.8398159, 25.391524 ], [ 88.838123, 25.3912105 ], [ 88.8379349, 25.3903327 ], [ 88.8379349, 25.3903046 ], [ 88.8379349, 25.3850031 ], [ 88.8378627, 25.3841457 ], [ 88.8387945, 25.3839986 ], [ 88.8391051, 25.383786 ], [ 88.8395465, 25.3838351 ], [ 88.8401294, 25.3840626 ], [ 88.840568, 25.3836163 ], [ 88.8406744, 25.3835081 ], [ 88.8411812, 25.3828869 ], [ 88.8414264, 25.3823965 ], [ 88.8416343, 25.3815859 ], [ 88.840609, 25.3813013 ], [ 88.8389089, 25.3811868 ], [ 88.8388754, 25.3780746 ], [ 88.8390008, 25.3765697 ], [ 88.838958, 25.3743373 ], [ 88.8393572, 25.3739725 ], [ 88.8391214, 25.3724247 ], [ 88.8388599, 25.3712804 ], [ 88.8381896, 25.369286 ], [ 88.8392516, 25.3682932 ], [ 88.8401921, 25.3681678 ], [ 88.840609, 25.3682234 ], [ 88.8406908, 25.3678801 ], [ 88.8407562, 25.3671445 ], [ 88.8408379, 25.3639731 ], [ 88.8412139, 25.3638587 ], [ 88.8423745, 25.3638424 ], [ 88.8461344, 25.3639241 ], [ 88.8462488, 25.3622403 ], [ 88.8472951, 25.362273 ], [ 88.8482596, 25.3625509 ], [ 88.8495633, 25.3630495 ], [ 88.8519418, 25.363074 ], [ 88.8541118, 25.3632143 ], [ 88.8544303, 25.3631863 ], [ 88.8543571, 25.3625713 ], [ 88.8543937, 25.3624469 ], [ 88.85465, 25.3621613 ], [ 88.8546792, 25.3620735 ], [ 88.8544889, 25.3617441 ], [ 88.8545841, 25.3612023 ], [ 88.8546646, 25.3610559 ], [ 88.8547671, 25.3610046 ], [ 88.8552576, 25.3609241 ], [ 88.8553162, 25.3607996 ], [ 88.8553235, 25.3605507 ], [ 88.8549355, 25.3601408 ], [ 88.8549355, 25.3600236 ], [ 88.8550453, 25.3599577 ], [ 88.8551624, 25.3599504 ], [ 88.8553381, 25.3600017 ], [ 88.855404, 25.3598699 ], [ 88.8553381, 25.3597967 ], [ 88.8551624, 25.3597235 ], [ 88.8549355, 25.3597967 ], [ 88.8547891, 25.3597894 ], [ 88.8547744, 25.3593794 ], [ 88.8548916, 25.359416 ], [ 88.8550087, 25.359233 ], [ 88.8548037, 25.3587278 ], [ 88.8548037, 25.3585082 ], [ 88.8550965, 25.3580104 ], [ 88.855631, 25.3576224 ], [ 88.8557115, 25.3575272 ], [ 88.8557261, 25.3574247 ], [ 88.8556822, 25.3571611 ], [ 88.8555578, 25.3569561 ], [ 88.8552064, 25.3567219 ], [ 88.8550526, 25.3567072 ], [ 88.8548989, 25.3565242 ], [ 88.8547598, 25.3560191 ], [ 88.8547891, 25.3558287 ], [ 88.8546353, 25.3554187 ], [ 88.8546646, 25.355265 ], [ 88.8548476, 25.35506 ], [ 88.8548623, 25.3548184 ], [ 88.8549282, 25.3547525 ], [ 88.8552869, 25.354855 ], [ 88.8554187, 25.3547525 ], [ 88.8555212, 25.3545915 ], [ 88.8555431, 25.3544524 ], [ 88.8554899, 25.354316 ], [ 88.856902, 25.3544361 ], [ 88.859465, 25.3547713 ], [ 88.8610403, 25.3550632 ], [ 88.8622741, 25.3551488 ], [ 88.8636065, 25.3551488 ], [ 88.8639063, 25.3552265 ], [ 88.8643061, 25.3551599 ], [ 88.864195, 25.3541939 ], [ 88.8643616, 25.3540606 ], [ 88.8644328, 25.3530154 ], [ 88.8644615, 25.352595 ], [ 88.8644262, 25.3523043 ], [ 88.8651159, 25.3521162 ], [ 88.8658683, 25.3521162 ], [ 88.8668089, 25.3521789 ], [ 88.8671994, 25.35209 ], [ 88.8672296, 25.3520397 ], [ 88.8672145, 25.3517881 ], [ 88.8671139, 25.3516321 ], [ 88.8670937, 25.3515089 ], [ 88.8671038, 25.3498585 ], [ 88.8672246, 25.349476 ], [ 88.867446, 25.3493553 ], [ 88.8673403, 25.3490131 ], [ 88.8674007, 25.3488924 ], [ 88.8675768, 25.3487414 ], [ 88.8676422, 25.348364 ], [ 88.8677529, 25.3481678 ], [ 88.8677479, 25.3475866 ], [ 88.8679894, 25.3470482 ], [ 88.8679038, 25.3465602 ], [ 88.8679994, 25.34613 ], [ 88.86809, 25.3459538 ], [ 88.8681605, 25.3452897 ], [ 88.8679693, 25.3445324 ], [ 88.8681353, 25.3442959 ], [ 88.8681655, 25.3440091 ], [ 88.8680699, 25.3439235 ], [ 88.8677982, 25.343843 ], [ 88.8670334, 25.3437676 ], [ 88.8669176, 25.3436191 ], [ 88.8665855, 25.3436644 ], [ 88.866349, 25.3434883 ], [ 88.866339, 25.3433625 ], [ 88.8664648, 25.3432216 ], [ 88.8665151, 25.3430505 ], [ 88.8664044, 25.3429449 ], [ 88.8663324, 25.3429397 ], [ 88.8669161, 25.3426066 ], [ 88.8696477, 25.3405532 ], [ 88.8706904, 25.339884 ], [ 88.8711085, 25.3397687 ], [ 88.8716635, 25.339809 ], [ 88.8718048, 25.3397242 ], [ 88.8725207, 25.3387258 ], [ 88.8741449, 25.3369738 ], [ 88.8756439, 25.3368782 ], [ 88.8758608, 25.3364837 ], [ 88.8762827, 25.3336612 ], [ 88.8780286, 25.3318717 ], [ 88.8804778, 25.3295123 ], [ 88.8821605, 25.3277835 ], [ 88.8838336, 25.3263868 ], [ 88.8840809, 25.3263577 ], [ 88.8842119, 25.3256884 ], [ 88.8854631, 25.3258048 ], [ 88.8865397, 25.3259794 ], [ 88.8884456, 25.3261976 ], [ 88.8883468, 25.3270043 ], [ 88.8883468, 25.3280702 ], [ 88.8881587, 25.3285718 ], [ 88.8880333, 25.3294183 ], [ 88.8869047, 25.3306723 ], [ 88.8860895, 25.3332431 ], [ 88.8860895, 25.3341836 ], [ 88.8864031, 25.3350614 ], [ 88.8870301, 25.3361273 ], [ 88.8879706, 25.3370052 ], [ 88.8891619, 25.3371933 ], [ 88.8903532, 25.3371933 ], [ 88.8916048, 25.3369892 ], [ 88.8925039, 25.3366773 ], [ 88.8932746, 25.3366406 ], [ 88.8963099, 25.3367544 ], [ 88.8985044, 25.3370679 ], [ 88.9031054, 25.3375118 ], [ 88.9055062, 25.3379158 ], [ 88.9061191, 25.3377469 ], [ 88.9063266, 25.3374472 ], [ 88.9066724, 25.3371475 ], [ 88.9067301, 25.3369976 ], [ 88.906684, 25.3368823 ], [ 88.9066033, 25.3368247 ], [ 88.9063381, 25.3367555 ], [ 88.9062459, 25.3366864 ], [ 88.9061768, 25.3365365 ], [ 88.9061191, 25.335718 ], [ 88.9064188, 25.3356835 ], [ 88.9064995, 25.3355682 ], [ 88.906488, 25.3353838 ], [ 88.9064304, 25.3352915 ], [ 88.9064073, 25.3347497 ], [ 88.906269, 25.3344846 ], [ 88.9060384, 25.3341849 ], [ 88.9060154, 25.3339543 ], [ 88.9061537, 25.3336316 ], [ 88.9064419, 25.3334587 ], [ 88.9068223, 25.3331359 ], [ 88.9069376, 25.3329745 ], [ 88.9069491, 25.3328247 ], [ 88.906926, 25.3326517 ], [ 88.9065687, 25.3321445 ], [ 88.9063497, 25.3316834 ], [ 88.9063266, 25.3310725 ], [ 88.9063958, 25.330646 ], [ 88.9064534, 25.3305653 ], [ 88.9067877, 25.3303462 ], [ 88.9069376, 25.3300811 ], [ 88.9066955, 25.3288304 ], [ 88.9066955, 25.3286114 ], [ 88.9068108, 25.3283117 ], [ 88.9068338, 25.3281042 ], [ 88.9068108, 25.3277353 ], [ 88.9067416, 25.3275739 ], [ 88.906488, 25.3272857 ], [ 88.9065111, 25.3269341 ], [ 88.9068915, 25.3266459 ], [ 88.9073871, 25.3264384 ], [ 88.9075024, 25.3262771 ], [ 88.9075255, 25.32562 ], [ 88.9076753, 25.3251935 ], [ 88.9085168, 25.3246402 ], [ 88.908782, 25.3241329 ], [ 88.9088742, 25.3240292 ], [ 88.9091739, 25.3238448 ], [ 88.9092085, 25.3235335 ], [ 88.9094736, 25.3232569 ], [ 88.9095312, 25.3231416 ], [ 88.9096119, 25.3230955 ], [ 88.9096926, 25.3231646 ], [ 88.9099117, 25.3231877 ], [ 88.9100269, 25.3230839 ], [ 88.9099693, 25.3227381 ], [ 88.9098425, 25.3225652 ], [ 88.9095889, 25.3219081 ], [ 88.9096235, 25.3214586 ], [ 88.9100269, 25.3212165 ], [ 88.9100615, 25.3211243 ], [ 88.9100385, 25.3209859 ], [ 88.9099462, 25.3208937 ], [ 88.9098655, 25.3208822 ], [ 88.9097964, 25.3207439 ], [ 88.9098194, 25.320594 ], [ 88.9099693, 25.3205018 ], [ 88.9107877, 25.3203058 ], [ 88.9109145, 25.3201675 ], [ 88.9109722, 25.3198908 ], [ 88.9110875, 25.319764 ], [ 88.9111336, 25.3196142 ], [ 88.9110298, 25.3190378 ], [ 88.9110759, 25.318911 ], [ 88.9111681, 25.3187496 ], [ 88.9115601, 25.3183462 ], [ 88.9119635, 25.318081 ], [ 88.9123094, 25.3177121 ], [ 88.9124131, 25.3175047 ], [ 88.9125399, 25.3167554 ], [ 88.9127705, 25.3164441 ], [ 88.9130932, 25.3157064 ], [ 88.9132892, 25.3153721 ], [ 88.9136523, 25.3150435 ], [ 88.9141134, 25.3151242 ], [ 88.9146206, 25.3151358 ], [ 88.9149434, 25.3149628 ], [ 88.9150126, 25.3147553 ], [ 88.9152085, 25.3147438 ], [ 88.9153699, 25.3148476 ], [ 88.9155428, 25.3148476 ], [ 88.9156466, 25.3147669 ], [ 88.9156581, 25.3144441 ], [ 88.9157157, 25.3143058 ], [ 88.9156696, 25.314179 ], [ 88.9155428, 25.3140637 ], [ 88.9155313, 25.3138793 ], [ 88.9157157, 25.3136487 ], [ 88.9157273, 25.3134182 ], [ 88.9156696, 25.3133029 ], [ 88.9153353, 25.3130954 ], [ 88.9151048, 25.3128187 ], [ 88.9150702, 25.3125997 ], [ 88.9151048, 25.312496 ], [ 88.9154391, 25.3120579 ], [ 88.9167993, 25.3121501 ], [ 88.9180046, 25.3123008 ], [ 88.9198229, 25.3123635 ], [ 88.9214531, 25.3121754 ], [ 88.923585, 25.31205 ], [ 88.9245255, 25.312677 ], [ 88.9245882, 25.3136175 ], [ 88.9247527, 25.3148911 ], [ 88.9252152, 25.3151224 ], [ 88.9266574, 25.3151224 ], [ 88.9275979, 25.3153732 ], [ 88.9277248, 25.3168155 ], [ 88.9285015, 25.3167311 ], [ 88.9286638, 25.3130532 ], [ 88.9285384, 25.3109214 ], [ 88.9286011, 25.3099809 ], [ 88.9286011, 25.3075982 ], [ 88.9286638, 25.3057172 ], [ 88.9289773, 25.3049647 ], [ 88.9293501, 25.3045919 ], [ 88.929667, 25.304275 ], [ 88.9304508, 25.3040869 ], [ 88.9322064, 25.3041496 ], [ 88.9331111, 25.3040503 ], [ 88.9342087, 25.3038646 ], [ 88.9342762, 25.3028684 ], [ 88.9353785, 25.3028684 ], [ 88.9355933, 25.3028684 ], [ 88.9367836, 25.3026448 ], [ 88.9374733, 25.3026448 ], [ 88.9385393, 25.3017043 ], [ 88.9394798, 25.30114 ], [ 88.9399814, 25.3010773 ], [ 88.9411727, 25.3010773 ], [ 88.9416888, 25.3014838 ], [ 88.9424268, 25.3014535 ], [ 88.9429383, 25.3013656 ], [ 88.9440021, 25.30145 ], [ 88.9445762, 25.301602 ], [ 88.9447788, 25.3019566 ], [ 88.9447737, 25.3024065 ], [ 88.9449975, 25.3027702 ], [ 88.9455049, 25.303071 ], [ 88.945938, 25.3028956 ], [ 88.9465518, 25.3024462 ], [ 88.9470921, 25.3023449 ], [ 88.9475818, 25.3025138 ], [ 88.9484598, 25.3030541 ], [ 88.9492872, 25.3036282 ], [ 88.9501077, 25.3034599 ], [ 88.9507347, 25.3031464 ], [ 88.9523022, 25.3025194 ], [ 88.9533055, 25.3018297 ], [ 88.9543714, 25.3018297 ], [ 88.9545595, 25.3022686 ], [ 88.9549357, 25.3028956 ], [ 88.9555627, 25.3027075 ], [ 88.956127, 25.3020805 ], [ 88.9578827, 25.30114 ], [ 88.9591367, 25.3010146 ], [ 88.9598891, 25.3016416 ], [ 88.9598891, 25.3028329 ], [ 88.9598264, 25.3035853 ], [ 88.9598891, 25.3047139 ], [ 88.9603907, 25.3057172 ], [ 88.9613939, 25.3058426 ], [ 88.9624599, 25.3057172 ], [ 88.9635258, 25.3054037 ], [ 88.9642468, 25.3044631 ], [ 88.9646696, 25.3037971 ], [ 88.9653755, 25.3031464 ], [ 88.9661906, 25.3025821 ], [ 88.966943, 25.3021432 ], [ 88.9684478, 25.3020805 ], [ 88.9693884, 25.301767 ], [ 88.9709559, 25.3013281 ], [ 88.9721472, 25.3012027 ], [ 88.9732758, 25.3012027 ], [ 88.9742164, 25.3015162 ], [ 88.9747807, 25.3019551 ], [ 88.9750942, 25.3038361 ], [ 88.9754704, 25.304902 ], [ 88.9756585, 25.3059053 ], [ 88.9765363, 25.305968 ], [ 88.9792952, 25.3057799 ], [ 88.9828065, 25.3057799 ], [ 88.9857525, 25.3060108 ], [ 88.985912, 25.3043293 ], [ 88.9857837, 25.3024913 ], [ 88.9857706, 25.3013859 ], [ 88.9857689, 25.3007792 ], [ 88.9857879, 25.3005637 ], [ 88.9858393, 25.2998745 ], [ 88.9859346, 25.2994713 ], [ 88.9861947, 25.2991791 ], [ 88.9865748, 25.2988452 ], [ 88.986993, 25.2986988 ], [ 88.9876721, 25.2986635 ], [ 88.9880363, 25.2987006 ], [ 88.9890139, 25.2988827 ], [ 88.9896409, 25.2985692 ], [ 88.9905187, 25.2980049 ], [ 88.9915847, 25.2968763 ], [ 88.9920863, 25.2964374 ], [ 88.9925879, 25.2962493 ], [ 88.9941554, 25.2963747 ], [ 88.9951586, 25.2965628 ], [ 88.9959738, 25.2959984 ], [ 88.9962873, 25.2956222 ], [ 88.9975146, 25.2958852 ], [ 89.0007358, 25.2958852 ], [ 89.0016347, 25.2965594 ], [ 89.0029831, 25.2978329 ], [ 89.0034326, 25.2991813 ], [ 89.003957, 25.2994809 ], [ 89.0053803, 25.299406 ], [ 89.0060105, 25.2999837 ], [ 89.0062793, 25.3002301 ], [ 89.0062402, 25.3010903 ], [ 89.0061002, 25.3021597 ], [ 89.0060902, 25.3029193 ], [ 89.0082142, 25.3030756 ], [ 89.0089557, 25.3031832 ], [ 89.009195, 25.3013771 ], [ 89.0093397, 25.3002107 ], [ 89.0094255, 25.2981325 ], [ 89.0090873, 25.2948463 ], [ 89.0074247, 25.281988 ], [ 89.0070457, 25.280353 ], [ 89.0069113, 25.2794587 ], [ 89.006519, 25.2794309 ], [ 89.0060471, 25.2762242 ], [ 89.0067289, 25.2761461 ], [ 89.0067614, 25.2750774 ], [ 89.0071436, 25.2717512 ], [ 89.0082381, 25.265649 ], [ 89.0082203, 25.2648377 ], [ 89.0079472, 25.264428 ], [ 89.0076172, 25.2641435 ], [ 89.0072758, 25.2639273 ], [ 89.0069458, 25.2638704 ], [ 89.0063768, 25.2638704 ], [ 89.0058989, 25.2640411 ], [ 89.0044757, 25.265005 ], [ 89.0046505, 25.2657751 ], [ 89.0045563, 25.2661453 ], [ 89.0044631, 25.2666843 ], [ 89.0044631, 25.2672727 ], [ 89.0043814, 25.2677794 ], [ 89.0039237, 25.2686457 ], [ 89.0036622, 25.2695912 ], [ 89.0014849, 25.2695912 ], [ 88.9981337, 25.2693756 ], [ 88.997459, 25.2694004 ], [ 88.9971167, 25.2694729 ], [ 88.9968179, 25.2696146 ], [ 88.9964582, 25.2699103 ], [ 88.9959647, 25.2705226 ], [ 88.994673, 25.2707347 ], [ 88.9942208, 25.2708568 ], [ 88.9938788, 25.271 ], [ 88.99362, 25.2711958 ], [ 88.9932355, 25.271724 ], [ 88.9928806, 25.2729855 ], [ 88.9925821, 25.2735574 ], [ 88.9923647, 25.2738437 ], [ 88.9918121, 25.2739969 ], [ 88.9913077, 25.274044 ], [ 88.9898018, 25.2743403 ], [ 88.988994, 25.2746051 ], [ 88.9886041, 25.2748504 ], [ 88.9883212, 25.2744098 ], [ 88.9878542, 25.2739344 ], [ 88.9874168, 25.2736751 ], [ 88.9854894, 25.2728355 ], [ 88.9852673, 25.2726184 ], [ 88.9849051, 25.272366 ], [ 88.9840444, 25.2697774 ], [ 88.9837492, 25.2693472 ], [ 88.9833078, 25.2690501 ], [ 88.9829989, 25.2689276 ], [ 88.9826659, 25.2688775 ], [ 88.9819913, 25.2688703 ], [ 88.9812824, 25.2675255 ], [ 88.9804321, 25.2649985 ], [ 88.9802161, 25.264603 ], [ 88.9799908, 25.2643761 ], [ 88.9795015, 25.26413 ], [ 88.9789896, 25.2640619 ], [ 88.978459, 25.2640791 ], [ 88.9779298, 25.2641544 ], [ 88.97652, 25.2644396 ], [ 88.9760484, 25.2643859 ], [ 88.9756199, 25.2633503 ], [ 88.9748192, 25.2607633 ], [ 88.9744496, 25.260209 ], [ 88.9708155, 25.2602706 ], [ 88.9701995, 25.259901 ], [ 88.9696451, 25.2583611 ], [ 88.9687212, 25.2580531 ], [ 88.9675509, 25.2578684 ], [ 88.9662266, 25.2572524 ], [ 88.9653027, 25.2569444 ], [ 88.9631469, 25.2558357 ], [ 88.9619765, 25.2557741 ], [ 88.960683, 25.2557741 ], [ 88.9595743, 25.2554045 ], [ 88.9592048, 25.2546654 ], [ 88.9582192, 25.2547886 ], [ 88.9569873, 25.2550966 ], [ 88.956433, 25.2550966 ], [ 88.9560807, 25.255143 ], [ 88.9558984, 25.2548277 ], [ 88.9549156, 25.2536207 ], [ 88.9547981, 25.2535566 ], [ 88.9544452, 25.2532041 ], [ 88.9544628, 25.25306 ], [ 88.9545951, 25.2529797 ], [ 88.9548302, 25.2526486 ], [ 88.9550758, 25.2521893 ], [ 88.9552467, 25.2514949 ], [ 88.955204, 25.2509395 ], [ 88.9543871, 25.2494439 ], [ 88.9525096, 25.2480358 ], [ 88.9519732, 25.246963 ], [ 88.9521073, 25.2463595 ], [ 88.9523755, 25.2455214 ], [ 88.9523085, 25.2446497 ], [ 88.9523085, 25.2437109 ], [ 88.9523755, 25.2427722 ], [ 88.9529119, 25.2416994 ], [ 88.9536495, 25.2406265 ], [ 88.9539848, 25.2394196 ], [ 88.9539177, 25.2382797 ], [ 88.9539177, 25.2372069 ], [ 88.9535825, 25.236067 ], [ 88.9527778, 25.23486 ], [ 88.9525767, 25.2337872 ], [ 88.9525767, 25.2324462 ], [ 88.9527108, 25.230971 ], [ 88.9532472, 25.2298982 ], [ 88.9536495, 25.2276854 ], [ 88.9539177, 25.2268808 ], [ 88.9549235, 25.2253386 ], [ 88.9561975, 25.2240646 ], [ 88.956868, 25.223327 ], [ 88.9572703, 25.2225895 ], [ 88.9571362, 25.2218519 ], [ 88.9571362, 25.2207791 ], [ 88.9575385, 25.2196392 ], [ 88.9576056, 25.2182311 ], [ 88.9580079, 25.2164206 ], [ 88.958142, 25.2144091 ], [ 88.9585443, 25.2131351 ], [ 88.9590807, 25.2122634 ], [ 88.9596172, 25.2110565 ], [ 88.9609582, 25.2097825 ], [ 88.9608912, 25.2086426 ], [ 88.9601536, 25.2080391 ], [ 88.9592148, 25.2081062 ], [ 88.9583432, 25.2080391 ], [ 88.9574044, 25.2089778 ], [ 88.9565998, 25.207905 ], [ 88.955527, 25.207905 ], [ 88.9553929, 25.2071674 ], [ 88.9551917, 25.206564 ], [ 88.9535825, 25.2066981 ], [ 88.9522414, 25.2069663 ], [ 88.9515374, 25.2067651 ], [ 88.9502634, 25.2059605 ], [ 88.9488553, 25.2061616 ], [ 88.9479836, 25.2063628 ], [ 88.9465755, 25.2060275 ], [ 88.9451003, 25.2058264 ], [ 88.9437593, 25.2059605 ], [ 88.9425523, 25.2068992 ], [ 88.9428876, 25.2076368 ], [ 88.9426864, 25.2083073 ], [ 88.9417477, 25.2083744 ], [ 88.9410101, 25.2088437 ], [ 88.9409431, 25.2097825 ], [ 88.9403396, 25.2098495 ], [ 88.9387974, 25.2099166 ], [ 88.938328, 25.2101848 ], [ 88.9381939, 25.2109894 ], [ 88.9368529, 25.2106541 ], [ 88.9364506, 25.2097154 ], [ 88.9363835, 25.2088437 ], [ 88.9363835, 25.2066981 ], [ 88.9364506, 25.205357 ], [ 88.9366517, 25.2038819 ], [ 88.9364506, 25.2026079 ], [ 88.9360483, 25.2017362 ], [ 88.9349754, 25.2009986 ], [ 88.934372, 25.200261 ], [ 88.9341038, 25.1996576 ], [ 88.9343049, 25.1987859 ], [ 88.9348413, 25.197646 ], [ 88.9365176, 25.1955674 ], [ 88.9376911, 25.1942263 ], [ 88.9387639, 25.1933546 ], [ 88.9394344, 25.1928853 ], [ 88.9431893, 25.1928853 ], [ 88.943994, 25.1934217 ], [ 88.9445974, 25.1936229 ], [ 88.9458044, 25.193824 ], [ 88.9461396, 25.1940922 ], [ 88.9469443, 25.1939581 ], [ 88.9468772, 25.1930864 ], [ 88.9466761, 25.1922818 ], [ 88.9466761, 25.1906055 ], [ 88.9469443, 25.1889292 ], [ 88.9473466, 25.1881246 ], [ 88.9474136, 25.187454 ], [ 88.9464079, 25.1871188 ], [ 88.9463408, 25.1860459 ], [ 88.9460055, 25.1853754 ], [ 88.945335, 25.1845037 ], [ 88.9438599, 25.1836991 ], [ 88.9433905, 25.1831962 ], [ 88.9454021, 25.1826598 ], [ 88.9474136, 25.1819893 ], [ 88.9489558, 25.1809835 ], [ 88.9488217, 25.1799107 ], [ 88.9486206, 25.1793072 ], [ 88.9485535, 25.1785696 ], [ 88.9480171, 25.1773627 ], [ 88.9480171, 25.1766921 ], [ 88.9477489, 25.1761557 ], [ 88.9467431, 25.1764239 ], [ 88.9462067, 25.1764239 ], [ 88.9454691, 25.1763569 ], [ 88.9449998, 25.1757534 ], [ 88.9443963, 25.175217 ], [ 88.9436252, 25.1748817 ], [ 88.9430217, 25.1734736 ], [ 88.9423512, 25.1732054 ], [ 88.9416807, 25.1730713 ], [ 88.9406749, 25.1734066 ], [ 88.9409431, 25.1743453 ], [ 88.9407419, 25.1758875 ], [ 88.9398703, 25.1760887 ], [ 88.9390656, 25.1760887 ], [ 88.9389315, 25.1766921 ], [ 88.9383951, 25.1770274 ], [ 88.9383951, 25.1780332 ], [ 88.9385963, 25.1787037 ], [ 88.9383951, 25.179106 ], [ 88.9377246, 25.1791731 ], [ 88.9369199, 25.1791731 ], [ 88.9365176, 25.1796424 ], [ 88.9366517, 25.1802459 ], [ 88.9361824, 25.18038 ], [ 88.9348413, 25.1809164 ], [ 88.9335673, 25.1810505 ], [ 88.9327627, 25.1804471 ], [ 88.9316228, 25.1791731 ], [ 88.9284714, 25.1766251 ], [ 88.9279349, 25.1759546 ], [ 88.9282702, 25.1744124 ], [ 88.9276667, 25.1744124 ], [ 88.9271303, 25.1742112 ], [ 88.9266609, 25.1741442 ], [ 88.9261916, 25.1733395 ], [ 88.9245153, 25.1717973 ], [ 88.9238447, 25.171395 ], [ 88.9235095, 25.1699869 ], [ 88.923476, 25.1689141 ], [ 88.9230066, 25.1680424 ], [ 88.9228725, 25.1673719 ], [ 88.9231407, 25.1660979 ], [ 88.9231407, 25.164958 ], [ 88.9227384, 25.1644216 ], [ 88.9218667, 25.1646898 ], [ 88.9206598, 25.1656285 ], [ 88.9195869, 25.1663661 ], [ 88.9181118, 25.1670366 ], [ 88.9169048, 25.1665672 ], [ 88.9140886, 25.167506 ], [ 88.9123453, 25.1679083 ], [ 88.9118088, 25.1681094 ], [ 88.9118759, 25.1709927 ], [ 88.91201, 25.1728366 ], [ 88.911943, 25.1737754 ], [ 88.9122782, 25.1747811 ], [ 88.9121441, 25.1759881 ], [ 88.9121441, 25.1769939 ], [ 88.9110042, 25.1783349 ], [ 88.9110042, 25.1790725 ], [ 88.910736, 25.1800112 ], [ 88.9100655, 25.1800112 ], [ 88.9090597, 25.1794748 ], [ 88.9077187, 25.1792066 ], [ 88.9065788, 25.1791396 ], [ 88.9060423, 25.1786031 ], [ 88.9047013, 25.1786031 ], [ 88.9028238, 25.1792066 ], [ 88.9016839, 25.1792737 ], [ 88.9002088, 25.1798101 ], [ 88.899136, 25.1806818 ], [ 88.8983313, 25.1815534 ], [ 88.8979961, 25.182291 ], [ 88.8970573, 25.1824251 ], [ 88.8958169, 25.1826933 ], [ 88.8942747, 25.1829615 ], [ 88.8928666, 25.1831627 ], [ 88.8926654, 25.1837662 ], [ 88.8922631, 25.1842355 ], [ 88.8893128, 25.1844367 ], [ 88.8893128, 25.1834309 ], [ 88.889581, 25.182224 ], [ 88.8894469, 25.18095 ], [ 88.8892457, 25.1803465 ], [ 88.8892457, 25.1781338 ], [ 88.8881729, 25.178402 ], [ 88.884485, 25.178402 ], [ 88.8833451, 25.1785361 ], [ 88.8824735, 25.1790054 ], [ 88.8816018, 25.1790054 ], [ 88.8789867, 25.1785361 ], [ 88.8772434, 25.1792066 ], [ 88.8759023, 25.1791396 ], [ 88.8748965, 25.1791396 ], [ 88.8748965, 25.1812182 ], [ 88.8750306, 25.1820899 ], [ 88.8746954, 25.1824251 ], [ 88.8746954, 25.1844367 ], [ 88.8745613, 25.1855766 ], [ 88.8742931, 25.1870517 ], [ 88.8731532, 25.1877893 ], [ 88.8723485, 25.1885939 ], [ 88.8722815, 25.1891303 ], [ 88.8724156, 25.1903373 ], [ 88.872885, 25.1910078 ], [ 88.872885, 25.1914101 ], [ 88.8736225, 25.1914101 ], [ 88.8734884, 25.1920807 ], [ 88.8732873, 25.1922148 ], [ 88.8728179, 25.1922818 ], [ 88.8722815, 25.192483 ], [ 88.8726168, 25.1930864 ], [ 88.8736225, 25.1933546 ], [ 88.8746283, 25.1934217 ], [ 88.8746283, 25.1962379 ], [ 88.8742931, 25.196372 ], [ 88.8736896, 25.1961038 ], [ 88.8736896, 25.1948968 ], [ 88.8712757, 25.1943604 ], [ 88.8713428, 25.1931535 ], [ 88.8713428, 25.1915442 ], [ 88.8709405, 25.1911419 ], [ 88.8695994, 25.1910078 ], [ 88.8687277, 25.1908737 ], [ 88.867856, 25.1904043 ], [ 88.8675208, 25.1895997 ], [ 88.8666491, 25.1896668 ], [ 88.8655763, 25.1896668 ], [ 88.8646375, 25.1898009 ], [ 88.8638329, 25.1898009 ], [ 88.8638329, 25.1916783 ], [ 88.8641011, 25.1929523 ], [ 88.8645034, 25.1936229 ], [ 88.8643693, 25.197713 ], [ 88.8643693, 25.1991211 ], [ 88.8644364, 25.2003281 ], [ 88.8641682, 25.2005292 ], [ 88.8634306, 25.2005292 ], [ 88.8633635, 25.2008645 ], [ 88.8633635, 25.201468 ], [ 88.862626, 25.2016021 ], [ 88.8618884, 25.2016021 ], [ 88.8617543, 25.2018032 ], [ 88.8611508, 25.2018703 ], [ 88.8599439, 25.2021385 ], [ 88.8583346, 25.2023397 ], [ 88.8576641, 25.2020044 ], [ 88.8572618, 25.2011327 ], [ 88.8564571, 25.2004622 ], [ 88.8555855, 25.2003951 ], [ 88.8549149, 25.1996576 ], [ 88.8543115, 25.1996576 ], [ 88.8536409, 25.2000599 ], [ 88.8530375, 25.2006634 ], [ 88.8520317, 25.2001269 ], [ 88.8512271, 25.200261 ], [ 88.8509589, 25.2012668 ], [ 88.8502213, 25.2014009 ], [ 88.8494837, 25.2016691 ], [ 88.8493496, 25.2020714 ], [ 88.8491484, 25.2024738 ], [ 88.8490814, 25.2035466 ], [ 88.8495508, 25.2044183 ], [ 88.8496849, 25.2050218 ], [ 88.8484109, 25.2058264 ], [ 88.8483438, 25.2066981 ], [ 88.8483438, 25.2077038 ], [ 88.848612, 25.2085085 ], [ 88.8492155, 25.2089778 ], [ 88.8492155, 25.2096484 ], [ 88.8488132, 25.2100507 ], [ 88.8480756, 25.2100507 ], [ 88.8471369, 25.2095813 ], [ 88.8464663, 25.2090449 ], [ 88.8455276, 25.209179 ], [ 88.8457958, 25.2097825 ], [ 88.8461311, 25.2103189 ], [ 88.8470028, 25.2106541 ], [ 88.8469357, 25.2109894 ], [ 88.8463322, 25.2107212 ], [ 88.8455276, 25.2105871 ], [ 88.8450582, 25.2108553 ], [ 88.8444213, 25.2123975 ], [ 88.8435496, 25.2135374 ], [ 88.8424097, 25.2133362 ], [ 88.8410686, 25.2132692 ], [ 88.8422756, 25.21052 ], [ 88.8419403, 25.21052 ], [ 88.8408004, 25.2106541 ], [ 88.8403981, 25.210453 ], [ 88.8394594, 25.21052 ], [ 88.8383865, 25.21052 ], [ 88.8375149, 25.2107212 ], [ 88.8379172, 25.2088437 ], [ 88.8365091, 25.2087096 ], [ 88.8366432, 25.2064299 ], [ 88.8358386, 25.2063628 ], [ 88.832553, 25.2063628 ], [ 88.831279, 25.2061616 ], [ 88.8312276, 25.2060534 ], [ 88.8307844, 25.2057484 ], [ 88.8306923, 25.2056275 ], [ 88.8302693, 25.2053771 ], [ 88.8302117, 25.2052275 ], [ 88.830229, 25.204957 ], [ 88.8300793, 25.2046634 ], [ 88.8299585, 25.2040533 ], [ 88.8297858, 25.2037368 ], [ 88.8297743, 25.2033512 ], [ 88.8298721, 25.2031209 ], [ 88.8298664, 25.202977 ], [ 88.8297743, 25.2027756 ], [ 88.8294347, 25.2023209 ], [ 88.8294577, 25.2020044 ], [ 88.8296304, 25.2018921 ], [ 88.8296246, 25.2017943 ], [ 88.829452, 25.2017425 ], [ 88.8288879, 25.2017713 ], [ 88.8287786, 25.2016561 ], [ 88.8287843, 25.2015295 ], [ 88.828911, 25.2014259 ], [ 88.8292045, 25.2008043 ], [ 88.829216, 25.2006892 ], [ 88.82917, 25.2006259 ], [ 88.8287325, 25.200223 ], [ 88.8287901, 25.2000043 ], [ 88.8290664, 25.1995899 ], [ 88.8291066, 25.1994402 ], [ 88.8289685, 25.199115 ], [ 88.8289858, 25.1987467 ], [ 88.8292333, 25.1984186 ], [ 88.8292563, 25.1982805 ], [ 88.829003, 25.1979582 ], [ 88.8287613, 25.1978028 ], [ 88.8286922, 25.1975323 ], [ 88.8285829, 25.1975323 ], [ 88.8283814, 25.1976359 ], [ 88.8281973, 25.1975898 ], [ 88.8278577, 25.196974 ], [ 88.8278922, 25.196784 ], [ 88.827285, 25.1959034 ], [ 88.8272044, 25.1956732 ], [ 88.8272044, 25.1953221 ], [ 88.8269339, 25.1948156 ], [ 88.8268706, 25.1943955 ], [ 88.8267094, 25.1942055 ], [ 88.8269282, 25.1931954 ], [ 88.8268303, 25.192971 ], [ 88.8266174, 25.1928386 ], [ 88.8265195, 25.1926947 ], [ 88.826531, 25.1923033 ], [ 88.826721, 25.1922976 ], [ 88.8271814, 25.192453 ], [ 88.8272965, 25.192453 ], [ 88.8274001, 25.1923724 ], [ 88.8274174, 25.1922976 ], [ 88.8273656, 25.1921422 ], [ 88.8271526, 25.1920328 ], [ 88.8268476, 25.1917249 ], [ 88.8261972, 25.1917652 ], [ 88.8260936, 25.1916098 ], [ 88.8258864, 25.1914313 ], [ 88.8258806, 25.1913508 ], [ 88.8260591, 25.1910457 ], [ 88.8261742, 25.1909939 ], [ 88.8239703, 25.1910078 ], [ 88.8227244, 25.1910907 ], [ 88.8226734, 25.1897961 ], [ 88.8216235, 25.1898679 ], [ 88.8209529, 25.1902702 ], [ 88.8206177, 25.1901361 ], [ 88.8206405, 25.1885763 ], [ 88.8187115, 25.1886849 ], [ 88.8187001, 25.188923 ], [ 88.8178498, 25.1889457 ], [ 88.8177251, 25.1878572 ], [ 88.8177137, 25.1868028 ], [ 88.8176003, 25.1864513 ], [ 88.8168067, 25.1857257 ], [ 88.8150606, 25.1852495 ], [ 88.8147545, 25.1850114 ], [ 88.8146248, 25.1828596 ], [ 88.8142408, 25.1807486 ], [ 88.8138815, 25.1797505 ], [ 88.8136107, 25.1763234 ], [ 88.8133712, 25.1745464 ], [ 88.8115991, 25.1744459 ], [ 88.8095205, 25.1741777 ], [ 88.80885, 25.1731719 ], [ 88.8058765, 25.1735132 ], [ 88.8058936, 25.1717001 ], [ 88.8058201, 25.1705327 ], [ 88.8030164, 25.170691 ], [ 88.8010581, 25.1709068 ], [ 88.8006499, 25.1708501 ], [ 88.7996182, 25.1709749 ], [ 88.7984163, 25.1712583 ], [ 88.7953399, 25.1724014 ], [ 88.7943233, 25.1726529 ], [ 88.7937677, 25.1726416 ], [ 88.7932802, 25.1727323 ], [ 88.789606, 25.1743788 ], [ 88.7858175, 25.175921 ], [ 88.7837389, 25.1764575 ], [ 88.7820626, 25.1767257 ], [ 88.7804587, 25.1771395 ], [ 88.7785772, 25.1779947 ], [ 88.7774825, 25.1783197 ], [ 88.776162, 25.1788713 ], [ 88.7750891, 25.1791396 ], [ 88.7739492, 25.1792737 ], [ 88.7735469, 25.1798101 ], [ 88.7737481, 25.1807488 ], [ 88.773681, 25.1817546 ], [ 88.7738822, 25.1826263 ], [ 88.7740163, 25.1849061 ], [ 88.7739492, 25.1856436 ], [ 88.7726126, 25.1859283 ], [ 88.7727923, 25.1869389 ], [ 88.7723841, 25.1870069 ], [ 88.7723841, 25.1871656 ], [ 88.7720991, 25.187202 ], [ 88.7722059, 25.1877893 ], [ 88.7723654, 25.1882679 ], [ 88.7726562, 25.1886509 ], [ 88.7725837, 25.18895 ], [ 88.7726449, 25.1891725 ], [ 88.7711256, 25.1895693 ], [ 88.7691868, 25.1899434 ], [ 88.7675995, 25.186406 ], [ 88.7671099, 25.1849061 ], [ 88.7668738, 25.1832653 ], [ 88.7661368, 25.1833674 ], [ 88.764833, 25.1836281 ], [ 88.7633704, 25.184161 ], [ 88.7613653, 25.1850776 ], [ 88.759058, 25.1857725 ], [ 88.7590313, 25.186209 ], [ 88.7587641, 25.1862357 ], [ 88.7582925, 25.1851743 ], [ 88.7564821, 25.1828945 ], [ 88.7560127, 25.1817546 ], [ 88.7553422, 25.1808829 ], [ 88.753733, 25.1803465 ], [ 88.7534648, 25.1789384 ], [ 88.7533307, 25.1775303 ], [ 88.7525931, 25.1769268 ], [ 88.7514532, 25.1767927 ], [ 88.7507959, 25.176619 ], [ 88.7502819, 25.1763749 ], [ 88.7497935, 25.1765034 ], [ 88.7491124, 25.1767476 ], [ 88.7483688, 25.177128 ], [ 88.7484358, 25.1782679 ], [ 88.748637, 25.1788713 ], [ 88.7490353, 25.179472 ], [ 88.7497421, 25.1795106 ], [ 88.7501019, 25.1797034 ], [ 88.7501019, 25.1800375 ], [ 88.749978, 25.1803074 ], [ 88.7495622, 25.1805901 ], [ 88.7497769, 25.1814193 ], [ 88.7502462, 25.1815534 ], [ 88.7507827, 25.1815534 ], [ 88.7510509, 25.1819557 ], [ 88.7506486, 25.1828945 ], [ 88.7500451, 25.1829615 ], [ 88.7492304, 25.182674 ], [ 88.7488939, 25.1821837 ], [ 88.7485029, 25.182291 ], [ 88.7479095, 25.1826471 ], [ 88.7471055, 25.1826216 ], [ 88.7453065, 25.1828941 ], [ 88.7452883, 25.1834393 ], [ 88.744637, 25.1834959 ], [ 88.7442707, 25.1833121 ], [ 88.7435256, 25.1835301 ], [ 88.7435438, 25.1842934 ], [ 88.7431622, 25.1844569 ], [ 88.7427879, 25.1851746 ], [ 88.7425989, 25.1857653 ], [ 88.7425262, 25.1862014 ], [ 88.7425344, 25.1867388 ], [ 88.7420719, 25.1865467 ], [ 88.7414722, 25.1861832 ], [ 88.7409634, 25.1858016 ], [ 88.740063, 25.1853692 ], [ 88.7389682, 25.1852719 ], [ 88.7383357, 25.1851016 ], [ 88.7354891, 25.1848826 ], [ 88.735112, 25.1847245 ], [ 88.7350147, 25.1871331 ], [ 88.7350877, 25.187863 ], [ 88.7353066, 25.1883982 ], [ 88.7354039, 25.1893228 ], [ 88.7353553, 25.190004 ], [ 88.735185, 25.1907582 ], [ 88.7346677, 25.1909821 ], [ 88.7335041, 25.1911995 ], [ 88.7337009, 25.1917071 ], [ 88.733811, 25.1926827 ], [ 88.7340172, 25.1931668 ], [ 88.7341887, 25.1937686 ], [ 88.7342201, 25.1943194 ], [ 88.7343352, 25.194882 ], [ 88.734169, 25.1950993 ], [ 88.7336192, 25.1954062 ], [ 88.7327753, 25.1959944 ], [ 88.7331333, 25.1965698 ], [ 88.7331855, 25.1977816 ], [ 88.7316039, 25.1985984 ], [ 88.7312183, 25.1991475 ], [ 88.7305987, 25.1994853 ], [ 88.7299483, 25.1995887 ], [ 88.7297709, 25.199707 ], [ 88.7294013, 25.199367 ], [ 88.7291944, 25.1992783 ], [ 88.7288101, 25.1989236 ], [ 88.7284405, 25.1987757 ], [ 88.728204, 25.1986279 ], [ 88.7279675, 25.1983914 ], [ 88.7275388, 25.1983175 ], [ 88.7272136, 25.1984062 ], [ 88.7269934, 25.1985205 ], [ 88.7266604, 25.1987818 ], [ 88.7257585, 25.1989458 ], [ 88.7255381, 25.1990842 ], [ 88.7248309, 25.198787 ], [ 88.7244722, 25.1987152 ], [ 88.724257, 25.1989048 ], [ 88.7241955, 25.1991559 ], [ 88.7242961, 25.199779 ], [ 88.7241746, 25.2002285 ], [ 88.7240289, 25.2004228 ], [ 88.7239438, 25.2007629 ], [ 88.7238952, 25.201103 ], [ 88.723956, 25.2018197 ], [ 88.7238102, 25.2019776 ], [ 88.7233972, 25.2020626 ], [ 88.7229721, 25.2020383 ], [ 88.7228163, 25.201765 ], [ 88.7217331, 25.2018561 ], [ 88.7211379, 25.2018318 ], [ 88.7201419, 25.202172 ], [ 88.7195953, 25.2022813 ], [ 88.7192309, 25.2021962 ], [ 88.7187626, 25.2019863 ], [ 88.7184463, 25.201743 ], [ 88.7177407, 25.201743 ], [ 88.7175461, 25.2020593 ], [ 88.7175218, 25.2025702 ], [ 88.7173028, 25.2039691 ], [ 88.7170109, 25.2044314 ], [ 88.7166156, 25.2045802 ], [ 88.7161663, 25.2048392 ], [ 88.7156027, 25.2054484 ], [ 88.7156027, 25.2065527 ], [ 88.7155365, 25.2067821 ], [ 88.7148672, 25.2067187 ], [ 88.7142456, 25.2065231 ], [ 88.7136791, 25.2067524 ], [ 88.7127033, 25.2067072 ], [ 88.712358, 25.2067993 ], [ 88.7121968, 25.2067993 ], [ 88.71184, 25.2066727 ], [ 88.7116444, 25.2067763 ], [ 88.7116329, 25.2070065 ], [ 88.7115523, 25.2071676 ], [ 88.7114027, 25.2072712 ], [ 88.710212, 25.2072228 ], [ 88.7098629, 25.2072664 ], [ 88.7093283, 25.2075501 ], [ 88.7090774, 25.2075937 ], [ 88.7088701, 25.2074846 ], [ 88.7086846, 25.2072992 ], [ 88.7085427, 25.2072446 ], [ 88.7084227, 25.2073537 ], [ 88.7083354, 25.2075392 ], [ 88.7081827, 25.2076592 ], [ 88.7079754, 25.2076592 ], [ 88.7073753, 25.2073864 ], [ 88.7072226, 25.2075283 ], [ 88.7071485, 25.2076859 ], [ 88.7067643, 25.2076592 ], [ 88.7058478, 25.2077247 ], [ 88.7056951, 25.2076701 ], [ 88.7055933, 25.2075057 ], [ 88.7054973, 25.2075057 ], [ 88.7051717, 25.2076978 ], [ 88.705129, 25.2078313 ], [ 88.7050169, 25.207858 ], [ 88.7041629, 25.2077939 ], [ 88.70396, 25.2076498 ], [ 88.7036718, 25.2078793 ], [ 88.7032448, 25.2078046 ], [ 88.7029405, 25.2078313 ], [ 88.702641, 25.2075907 ], [ 88.7026636, 25.2074551 ], [ 88.7027314, 25.2074175 ], [ 88.7027163, 25.2073421 ], [ 88.7020081, 25.2072668 ], [ 88.701865, 25.2073497 ], [ 88.7016622, 25.207589 ], [ 88.7015712, 25.2077941 ], [ 88.7014451, 25.2078451 ], [ 88.7011945, 25.2077565 ], [ 88.7007048, 25.2078394 ], [ 88.7003959, 25.2076887 ], [ 88.6998123, 25.2077657 ], [ 88.6997368, 25.2077909 ], [ 88.6997368, 25.2079609 ], [ 88.6996612, 25.2079231 ], [ 88.6996612, 25.2078161 ], [ 88.6995416, 25.2078413 ], [ 88.6994661, 25.2079105 ], [ 88.6991577, 25.2079735 ], [ 88.6987359, 25.2081812 ], [ 88.6985722, 25.2080993 ], [ 88.698182, 25.2082127 ], [ 88.6978924, 25.2082001 ], [ 88.6973196, 25.2084896 ], [ 88.6968474, 25.2084393 ], [ 88.6965642, 25.2082064 ], [ 88.696432, 25.2081623 ], [ 88.6959851, 25.2083008 ], [ 88.6956263, 25.2081812 ], [ 88.6955696, 25.2082315 ], [ 88.6955696, 25.2083134 ], [ 88.6953367, 25.2083952 ], [ 88.6951919, 25.2083574 ], [ 88.6951227, 25.2082252 ], [ 88.6950157, 25.2081434 ], [ 88.6947765, 25.208263 ], [ 88.6945876, 25.207942 ], [ 88.6915257, 25.2080808 ], [ 88.6902606, 25.2080808 ], [ 88.6885066, 25.2079575 ], [ 88.6876832, 25.2080101 ], [ 88.6881324, 25.2095753 ], [ 88.6832266, 25.2096538 ], [ 88.6813428, 25.2096146 ], [ 88.6799449, 25.209273 ], [ 88.6797502, 25.2090783 ], [ 88.6797352, 25.2083387 ], [ 88.6791128, 25.208316 ], [ 88.6790203, 25.2075212 ], [ 88.6788684, 25.2072572 ], [ 88.6786124, 25.2072458 ], [ 88.6785392, 25.2066853 ], [ 88.678358, 25.2067143 ], [ 88.6781841, 25.2066418 ], [ 88.6781189, 25.2061997 ], [ 88.6781562, 25.2055144 ], [ 88.6785762, 25.205375 ], [ 88.6789488, 25.2054247 ], [ 88.6791962, 25.205367 ], [ 88.6793382, 25.205225 ], [ 88.6793056, 25.205013 ], [ 88.6791534, 25.2048119 ], [ 88.6788273, 25.2044314 ], [ 88.6786093, 25.2042823 ], [ 88.6785718, 25.2041759 ], [ 88.6786152, 25.203394 ], [ 88.6785385, 25.2031021 ], [ 88.6782542, 25.2029706 ], [ 88.6775418, 25.2029309 ], [ 88.6770061, 25.2028249 ], [ 88.676594, 25.2026876 ], [ 88.6761866, 25.2027081 ], [ 88.6759268, 25.2025698 ], [ 88.6755099, 25.2018152 ], [ 88.6753069, 25.200844 ], [ 88.6751113, 25.2006483 ], [ 88.6749518, 25.2003585 ], [ 88.6745532, 25.1998946 ], [ 88.6744373, 25.1996265 ], [ 88.6741256, 25.199554 ], [ 88.6737198, 25.1995975 ], [ 88.6735096, 25.199699 ], [ 88.6732777, 25.1996772 ], [ 88.6732487, 25.1995685 ], [ 88.6732995, 25.1991772 ], [ 88.6732632, 25.1991192 ], [ 88.673054, 25.199167 ], [ 88.6729516, 25.1990902 ], [ 88.6729806, 25.1988003 ], [ 88.6728501, 25.1985466 ], [ 88.6726327, 25.1984959 ], [ 88.671821, 25.1985539 ], [ 88.6716906, 25.1984887 ], [ 88.6714603, 25.198622 ], [ 88.671263, 25.1984669 ], [ 88.6709441, 25.1984234 ], [ 88.6707847, 25.1984524 ], [ 88.6704513, 25.1984234 ], [ 88.6702773, 25.1985249 ], [ 88.6700889, 25.1985104 ], [ 88.6695381, 25.19838 ], [ 88.66927, 25.1981988 ], [ 88.6689511, 25.1981915 ], [ 88.6683496, 25.1985249 ], [ 88.6681539, 25.19838 ], [ 88.6677118, 25.1983437 ], [ 88.6675357, 25.1984534 ], [ 88.6673712, 25.1984887 ], [ 88.6672915, 25.1986988 ], [ 88.6670741, 25.19888 ], [ 88.6670523, 25.198967 ], [ 88.6670958, 25.1990829 ], [ 88.6674364, 25.1993076 ], [ 88.6674582, 25.1995395 ], [ 88.6672915, 25.1997279 ], [ 88.6670161, 25.1998874 ], [ 88.6670451, 25.2002353 ], [ 88.6670161, 25.200344 ], [ 88.6668167, 25.2005135 ], [ 88.6667812, 25.2006601 ], [ 88.6668132, 25.2007788 ], [ 88.6666472, 25.200924 ], [ 88.6663258, 25.2007827 ], [ 88.6650873, 25.2008509 ], [ 88.6648203, 25.2011236 ], [ 88.6649282, 25.201402 ], [ 88.6648942, 25.2015099 ], [ 88.6649566, 25.2020383 ], [ 88.6648487, 25.202328 ], [ 88.664451, 25.2026178 ], [ 88.6641442, 25.2026689 ], [ 88.6640079, 25.2027939 ], [ 88.6638118, 25.2032801 ], [ 88.6636509, 25.2034027 ], [ 88.6635819, 25.203533 ], [ 88.6631068, 25.2035483 ], [ 88.6625704, 25.2034027 ], [ 88.6617658, 25.2033491 ], [ 88.660762, 25.2030502 ], [ 88.660532, 25.2031154 ], [ 88.6599498, 25.2030502 ], [ 88.6594134, 25.2030809 ], [ 88.6592755, 25.2032878 ], [ 88.6590379, 25.2033491 ], [ 88.658912, 25.2032392 ], [ 88.6582551, 25.2036042 ], [ 88.6575207, 25.2033721 ], [ 88.6571222, 25.2033644 ], [ 88.6547238, 25.2037935 ], [ 88.653651, 25.204123 ], [ 88.6524404, 25.2041881 ], [ 88.6498858, 25.2046747 ], [ 88.6490829, 25.204772 ], [ 88.6484625, 25.2047963 ], [ 88.6478543, 25.2047477 ], [ 88.6469297, 25.204772 ], [ 88.6467645, 25.2049273 ], [ 88.6454985, 25.2050903 ], [ 88.6449094, 25.2052909 ], [ 88.6440102, 25.2060371 ], [ 88.6435479, 25.2062439 ], [ 88.6430542, 25.2065443 ], [ 88.6427659, 25.2065318 ], [ 88.6426358, 25.2064481 ], [ 88.6423729, 25.206126 ], [ 88.6417221, 25.2057514 ], [ 88.6407674, 25.2048165 ], [ 88.6401838, 25.2046647 ], [ 88.6397945, 25.2044978 ], [ 88.639572, 25.2042753 ], [ 88.6394917, 25.2041332 ], [ 88.6394608, 25.2039478 ], [ 88.6392136, 25.2036511 ], [ 88.6388118, 25.2034225 ], [ 88.638679, 25.2034008 ], [ 88.6383143, 25.2035121 ], [ 88.6381351, 25.2035059 ], [ 88.6376531, 25.2033699 ], [ 88.6371834, 25.2033205 ], [ 88.6368805, 25.2034503 ], [ 88.6363243, 25.2037778 ], [ 88.636244, 25.203784 ], [ 88.6359103, 25.2032958 ], [ 88.6356445, 25.2032772 ], [ 88.6353726, 25.2033514 ], [ 88.6346186, 25.2033081 ], [ 88.6345135, 25.2031289 ], [ 88.6343961, 25.2030424 ], [ 88.6343899, 25.2027766 ], [ 88.633741, 25.2026901 ], [ 88.6333888, 25.2024615 ], [ 88.6328912, 25.2023626 ], [ 88.6328356, 25.2022266 ], [ 88.6327491, 25.2021772 ], [ 88.6325761, 25.2022637 ], [ 88.6323968, 25.2022143 ], [ 88.6321002, 25.2022575 ], [ 88.6319828, 25.2021957 ], [ 88.631853, 25.2019918 ], [ 88.631785, 25.2019609 ], [ 88.6316614, 25.2019918 ], [ 88.6315563, 25.2020783 ], [ 88.6314451, 25.2020907 ], [ 88.6313029, 25.2019114 ], [ 88.6311732, 25.2018496 ], [ 88.6307653, 25.2017755 ], [ 88.6304068, 25.201862 ], [ 88.6300051, 25.2018682 ], [ 88.6296899, 25.2021648 ], [ 88.6294736, 25.2022637 ], [ 88.6293562, 25.2022328 ], [ 88.6292573, 25.2021339 ], [ 88.6291337, 25.2017816 ], [ 88.6290781, 25.2016828 ], [ 88.6289854, 25.2016333 ], [ 88.628905, 25.201658 ], [ 88.6287876, 25.2018064 ], [ 88.6287011, 25.2016889 ], [ 88.6285651, 25.2016766 ], [ 88.6279595, 25.2018125 ], [ 88.6277123, 25.2020845 ], [ 88.6271591, 25.2023997 ], [ 88.6269799, 25.2030362 ], [ 88.6267822, 25.2033267 ], [ 88.6266647, 25.2034132 ], [ 88.6267018, 25.2038396 ], [ 88.6264052, 25.2039385 ], [ 88.625781, 25.2043464 ], [ 88.6254955, 25.2044557 ], [ 88.6251166, 25.2044453 ], [ 88.6249868, 25.204402 ], [ 88.6248076, 25.2044206 ], [ 88.6245418, 25.2045813 ], [ 88.6242081, 25.2046183 ], [ 88.6240536, 25.2045874 ], [ 88.6237384, 25.2043217 ], [ 88.6235963, 25.2043031 ], [ 88.6235098, 25.2042413 ], [ 88.6230215, 25.2041672 ], [ 88.6227929, 25.2042043 ], [ 88.6222243, 25.2041981 ], [ 88.6216595, 25.2046507 ], [ 88.6214325, 25.2047679 ], [ 88.6212447, 25.2048099 ], [ 88.621139, 25.2049342 ], [ 88.6206111, 25.2052505 ], [ 88.6199098, 25.205292 ], [ 88.6190879, 25.2051066 ], [ 88.6186985, 25.2049644 ], [ 88.6182103, 25.2049088 ], [ 88.6181361, 25.2048223 ], [ 88.6181378, 25.2046864 ], [ 88.618235, 25.2045627 ], [ 88.6182412, 25.2044824 ], [ 88.6180125, 25.2043341 ], [ 88.6180249, 25.2040374 ], [ 88.6179816, 25.2039262 ], [ 88.6177653, 25.203679 ], [ 88.6176541, 25.2036233 ], [ 88.6174192, 25.2036419 ], [ 88.6171967, 25.2037222 ], [ 88.6167518, 25.2037346 ], [ 88.6164242, 25.2037222 ], [ 88.616313, 25.2036233 ], [ 88.6160905, 25.2036172 ], [ 88.6157382, 25.2036851 ], [ 88.6153798, 25.2038767 ], [ 88.6152562, 25.2039014 ], [ 88.6149224, 25.203784 ], [ 88.6145454, 25.2038026 ], [ 88.6137142, 25.2041054 ], [ 88.6129355, 25.2042722 ], [ 88.6127192, 25.2042537 ], [ 88.6125029, 25.2039694 ], [ 88.6122402, 25.2030177 ], [ 88.6117953, 25.2020721 ], [ 88.6118014, 25.2018929 ], [ 88.6119992, 25.201451 ], [ 88.6118818, 25.2013954 ], [ 88.6116717, 25.2014448 ], [ 88.6115728, 25.201142 ], [ 88.6115542, 25.2001037 ], [ 88.6114801, 25.1998133 ], [ 88.6112452, 25.1994795 ], [ 88.6108621, 25.1985216 ], [ 88.6105994, 25.1982775 ], [ 88.6100926, 25.1980179 ], [ 88.6098269, 25.1979499 ], [ 88.6094437, 25.1980735 ], [ 88.6091965, 25.1981044 ], [ 88.6087423, 25.1976904 ], [ 88.608385, 25.1975688 ], [ 88.608013, 25.1969673 ], [ 88.6076916, 25.1966336 ], [ 88.6074537, 25.1962226 ], [ 88.6069593, 25.1960804 ], [ 88.6067924, 25.1959198 ], [ 88.6066317, 25.195858 ], [ 88.6058129, 25.1959012 ], [ 88.605578, 25.19579 ], [ 88.605269, 25.1958023 ], [ 88.6050156, 25.1957344 ], [ 88.6047066, 25.1953574 ], [ 88.604515, 25.1953388 ], [ 88.6046448, 25.1951349 ], [ 88.6046201, 25.1949433 ], [ 88.6044625, 25.1947363 ], [ 88.6044192, 25.1945138 ], [ 88.6042524, 25.1944458 ], [ 88.6038445, 25.1944334 ], [ 88.6035849, 25.1942171 ], [ 88.6027877, 25.1944829 ], [ 88.6027197, 25.1944149 ], [ 88.6027135, 25.1943036 ], [ 88.6027815, 25.1941182 ], [ 88.6026517, 25.1940194 ], [ 88.6024354, 25.1939946 ], [ 88.60225, 25.1938958 ], [ 88.6022315, 25.1936547 ], [ 88.6018607, 25.1936609 ], [ 88.6016876, 25.1933519 ], [ 88.6015455, 25.1932036 ], [ 88.6010016, 25.1930182 ], [ 88.6005999, 25.19308 ], [ 88.6004516, 25.1930367 ], [ 88.6004145, 25.1928637 ], [ 88.60026, 25.1927092 ], [ 88.5995431, 25.19236 ], [ 88.599438, 25.1922611 ], [ 88.5990549, 25.1922796 ], [ 88.5989436, 25.1922426 ], [ 88.5988942, 25.1921622 ], [ 88.5990549, 25.1920263 ], [ 88.5990301, 25.1917976 ], [ 88.5988571, 25.1917234 ], [ 88.5982113, 25.1916987 ], [ 88.5981371, 25.1916369 ], [ 88.5982174, 25.1913279 ], [ 88.5981927, 25.1912043 ], [ 88.5978281, 25.1908953 ], [ 88.5977416, 25.1908706 ], [ 88.5972348, 25.1910622 ], [ 88.5968455, 25.1910622 ], [ 88.5966168, 25.1912537 ], [ 88.5964252, 25.1913217 ], [ 88.5960637, 25.1911858 ], [ 88.5958968, 25.1912352 ], [ 88.5956619, 25.1915318 ], [ 88.595322, 25.1916184 ], [ 88.5950625, 25.191983 ], [ 88.594908, 25.1921004 ], [ 88.5945279, 25.1920695 ], [ 88.5938666, 25.1921993 ], [ 88.5933166, 25.1925825 ], [ 88.5929087, 25.1926937 ], [ 88.5928469, 25.1930367 ], [ 88.5927418, 25.1932098 ], [ 88.5925873, 25.1934075 ], [ 88.5923401, 25.1933025 ], [ 88.5922289, 25.1934261 ], [ 88.5921362, 25.1937227 ], [ 88.5924951, 25.193944 ], [ 88.5927541, 25.1939538 ], [ 88.5927199, 25.1941101 ], [ 88.592627, 25.1941541 ], [ 88.5925977, 25.1942566 ], [ 88.592602, 25.1943375 ], [ 88.5927345, 25.1944716 ], [ 88.5927589, 25.1945986 ], [ 88.5924561, 25.1947061 ], [ 88.5923974, 25.1947793 ], [ 88.5924039, 25.1949971 ], [ 88.5919003, 25.194974 ], [ 88.5907578, 25.1947887 ], [ 88.5903873, 25.1947887 ], [ 88.5899859, 25.1946189 ], [ 88.5897697, 25.194449 ], [ 88.5897094, 25.1942849 ], [ 88.5898213, 25.1942748 ], [ 88.5898061, 25.1940712 ], [ 88.5897297, 25.1939541 ], [ 88.5895719, 25.1938727 ], [ 88.5895719, 25.193608 ], [ 88.5896025, 25.1935266 ], [ 88.5899486, 25.1933281 ], [ 88.5900097, 25.1931855 ], [ 88.5899282, 25.1930736 ], [ 88.5899791, 25.1927682 ], [ 88.5898213, 25.1926613 ], [ 88.5898061, 25.19259 ], [ 88.5899028, 25.1923508 ], [ 88.5899842, 25.1922846 ], [ 88.5906764, 25.1921167 ], [ 88.5908037, 25.1920352 ], [ 88.5907428, 25.1917329 ], [ 88.5907681, 25.1915466 ], [ 88.5909869, 25.1914245 ], [ 88.5909971, 25.1913278 ], [ 88.5909716, 25.191058 ], [ 88.590819, 25.1909358 ], [ 88.5903965, 25.1909867 ], [ 88.5901776, 25.1909206 ], [ 88.5901267, 25.1908137 ], [ 88.5906917, 25.1906508 ], [ 88.5906255, 25.1904345 ], [ 88.5905136, 25.190348 ], [ 88.5905237, 25.1902818 ], [ 88.5908597, 25.1899815 ], [ 88.5908393, 25.1894572 ], [ 88.5911294, 25.1892002 ], [ 88.5910124, 25.1885283 ], [ 88.5911905, 25.1883146 ], [ 88.5911243, 25.1880346 ], [ 88.591277, 25.187831 ], [ 88.5912414, 25.187775 ], [ 88.5912872, 25.1875664 ], [ 88.5913432, 25.1875307 ], [ 88.5916791, 25.1876224 ], [ 88.5917758, 25.1875358 ], [ 88.5919082, 25.1871795 ], [ 88.5917504, 25.1871388 ], [ 88.5916537, 25.1870421 ], [ 88.5913839, 25.1866451 ], [ 88.5913534, 25.1864695 ], [ 88.5911803, 25.1862252 ], [ 88.591277, 25.1859554 ], [ 88.5912669, 25.1857773 ], [ 88.5911638, 25.1857594 ], [ 88.5910124, 25.185818 ], [ 88.5909615, 25.1857773 ], [ 88.590992, 25.1856959 ], [ 88.59116, 25.1855686 ], [ 88.5909513, 25.1853345 ], [ 88.5901522, 25.1853803 ], [ 88.5900911, 25.1853396 ], [ 88.5901064, 25.1851462 ], [ 88.5900249, 25.1851207 ], [ 88.5898239, 25.1852225 ], [ 88.5898035, 25.1853752 ], [ 88.5897119, 25.1854414 ], [ 88.5896508, 25.1854312 ], [ 88.5895592, 25.1853141 ], [ 88.5894116, 25.185309 ], [ 88.5892844, 25.1851869 ], [ 88.5892029, 25.1852378 ], [ 88.589096, 25.1851767 ], [ 88.5889739, 25.1849884 ], [ 88.5891215, 25.1849731 ], [ 88.5891291, 25.1847873 ], [ 88.5890731, 25.184655 ], [ 88.5889255, 25.1846194 ], [ 88.5888594, 25.1844972 ], [ 88.5888746, 25.1843954 ], [ 88.5890324, 25.1842682 ], [ 88.5890375, 25.1841613 ], [ 88.5889357, 25.1839933 ], [ 88.5889713, 25.1837744 ], [ 88.588895, 25.1837235 ], [ 88.5884573, 25.1836676 ], [ 88.5882486, 25.183917 ], [ 88.5881468, 25.1839119 ], [ 88.5881163, 25.1837083 ], [ 88.5879737, 25.183637 ], [ 88.5880552, 25.1835454 ], [ 88.5880094, 25.1834945 ], [ 88.587877, 25.1835454 ], [ 88.5875818, 25.183128 ], [ 88.5876734, 25.1828226 ], [ 88.5875767, 25.1827717 ], [ 88.5850477, 25.182474 ], [ 88.5841597, 25.18262 ], [ 88.5824566, 25.1826687 ], [ 88.5819457, 25.1827416 ], [ 88.5813861, 25.1825957 ], [ 88.5814172, 25.1822367 ], [ 88.5813554, 25.181295 ], [ 88.5810455, 25.18026 ], [ 88.5801939, 25.1798708 ], [ 88.579975, 25.1797005 ], [ 88.5798533, 25.1794815 ], [ 88.5797803, 25.1783258 ], [ 88.5796344, 25.1778149 ], [ 88.5795906, 25.1768723 ], [ 88.5777785, 25.1772369 ], [ 88.5771995, 25.1771619 ], [ 88.5755804, 25.1772476 ], [ 88.5750764, 25.1766579 ], [ 88.5746527, 25.1767386 ], [ 88.5743473, 25.1766364 ], [ 88.5740685, 25.1762933 ], [ 88.5720312, 25.1769688 ], [ 88.5712913, 25.1771404 ], [ 88.5707054, 25.1771505 ], [ 88.5706689, 25.1763308 ], [ 88.5688929, 25.1765984 ], [ 88.5675548, 25.1766471 ], [ 88.5664739, 25.1765809 ], [ 88.5657832, 25.1763084 ], [ 88.5655267, 25.1763756 ], [ 88.5653923, 25.176339 ], [ 88.5649416, 25.1756701 ], [ 88.5646597, 25.1756406 ], [ 88.564626, 25.1754766 ], [ 88.5640791, 25.1754345 ], [ 88.5639402, 25.1752957 ], [ 88.5638056, 25.1752662 ], [ 88.5636457, 25.1753293 ], [ 88.5635532, 25.1754976 ], [ 88.563326, 25.1753714 ], [ 88.5624951, 25.1755944 ], [ 88.5621375, 25.1755186 ], [ 88.5619608, 25.1756112 ], [ 88.5617588, 25.1756196 ], [ 88.5616495, 25.1755817 ], [ 88.5614475, 25.1756238 ], [ 88.5613697, 25.1756491 ], [ 88.5610583, 25.175973 ], [ 88.5606545, 25.1762696 ], [ 88.5602674, 25.1763075 ], [ 88.5599897, 25.176236 ], [ 88.5596363, 25.1764295 ], [ 88.5593334, 25.1764505 ], [ 88.5591567, 25.1765094 ], [ 88.5585803, 25.176989 ], [ 88.5581512, 25.1771826 ], [ 88.5580755, 25.1773424 ], [ 88.5580965, 25.1774266 ], [ 88.55829, 25.1776622 ], [ 88.5582059, 25.17778 ], [ 88.5577305, 25.1780282 ], [ 88.5573855, 25.1780198 ], [ 88.5572845, 25.1780661 ], [ 88.5570153, 25.1783395 ], [ 88.5566829, 25.1784573 ], [ 88.5564347, 25.1786046 ], [ 88.5563639, 25.178851 ], [ 88.5562103, 25.1790612 ], [ 88.5559839, 25.1791178 ], [ 88.5558869, 25.1791987 ], [ 88.5560809, 25.1792067 ], [ 88.5561547, 25.1793809 ], [ 88.556203, 25.1797576 ], [ 88.5562803, 25.1798011 ], [ 88.5562851, 25.1802164 ], [ 88.5563382, 25.180284 ], [ 88.5563431, 25.1804409 ], [ 88.5564155, 25.1804747 ], [ 88.55643, 25.1806003 ], [ 88.5562851, 25.1807934 ], [ 88.5562706, 25.1811073 ], [ 88.5564058, 25.1814985 ], [ 88.55643, 25.181542 ], [ 88.5565797, 25.1815371 ], [ 88.5567825, 25.1813922 ], [ 88.5569902, 25.1813778 ], [ 88.5571302, 25.1815081 ], [ 88.5572509, 25.1815226 ], [ 88.5573668, 25.1814792 ], [ 88.5575358, 25.1822567 ], [ 88.5577435, 25.182783 ], [ 88.5586761, 25.184772 ], [ 88.559191, 25.1860307 ], [ 88.5592483, 25.1873466 ], [ 88.5596487, 25.1899212 ], [ 88.5595343, 25.1910082 ], [ 88.5590766, 25.1920953 ], [ 88.5581612, 25.192839 ], [ 88.5573602, 25.1932395 ], [ 88.5563304, 25.19364 ], [ 88.5542724, 25.1936872 ], [ 88.551596, 25.1942771 ], [ 88.5507039, 25.1945505 ], [ 88.5496937, 25.1951848 ], [ 88.5491643, 25.1957592 ], [ 88.547348, 25.1957569 ], [ 88.5469475, 25.1952992 ], [ 88.5470619, 25.1947843 ], [ 88.5471191, 25.1939833 ], [ 88.5464898, 25.1939261 ], [ 88.544945, 25.1945554 ], [ 88.5435719, 25.1946126 ], [ 88.5423132, 25.1946126 ], [ 88.5415715, 25.1939948 ], [ 88.5409564, 25.1918823 ], [ 88.540746, 25.1899559 ], [ 88.5404304, 25.1896403 ], [ 88.5400337, 25.1893975 ], [ 88.5394677, 25.1893011 ], [ 88.5387711, 25.1893487 ], [ 88.5385688, 25.1887338 ], [ 88.538523, 25.1883565 ], [ 88.5383503, 25.187795 ], [ 88.538067, 25.187366 ], [ 88.5378226, 25.1872037 ], [ 88.5373995, 25.1871016 ], [ 88.5368818, 25.1875818 ], [ 88.5364699, 25.1877191 ], [ 88.5360065, 25.1878049 ], [ 88.5345648, 25.1878049 ], [ 88.5340328, 25.1877534 ], [ 88.5337582, 25.1878736 ], [ 88.5335179, 25.1881138 ], [ 88.5334149, 25.1886802 ], [ 88.5335866, 25.1895898 ], [ 88.5341186, 25.1908255 ], [ 88.5343932, 25.1913318 ], [ 88.5344962, 25.1917952 ], [ 88.5344618, 25.1920698 ], [ 88.5341358, 25.192722 ], [ 88.5339126, 25.1928593 ], [ 88.5330717, 25.1930996 ], [ 88.5328142, 25.1932798 ], [ 88.5326769, 25.1935887 ], [ 88.5327456, 25.1939319 ], [ 88.5330374, 25.1941722 ], [ 88.5335351, 25.1944125 ], [ 88.5341529, 25.1946013 ], [ 88.5349767, 25.1947043 ], [ 88.5354744, 25.195099 ], [ 88.5356461, 25.1953049 ], [ 88.5357147, 25.1955967 ], [ 88.5359035, 25.1957855 ], [ 88.5361609, 25.1960086 ], [ 88.5365385, 25.1961631 ], [ 88.5368474, 25.1964033 ], [ 88.5370362, 25.1966608 ], [ 88.537225, 25.1970898 ], [ 88.53786, 25.1977935 ], [ 88.5327871, 25.1983588 ], [ 88.5307035, 25.1987093 ], [ 88.5269063, 25.1996829 ], [ 88.5249785, 25.2000335 ], [ 88.5230259, 25.200851 ], [ 88.5208698, 25.2013392 ], [ 88.5188357, 25.2017053 ], [ 88.5159473, 25.2023562 ], [ 88.5142794, 25.2031495 ], [ 88.5124356, 25.203962 ], [ 88.5119316, 25.2034412 ], [ 88.5110943, 25.2021365 ], [ 88.5099466, 25.2029525 ], [ 88.5095399, 25.2031743 ], [ 88.5090715, 25.2032483 ], [ 88.5084429, 25.2032606 ], [ 88.5075308, 25.2030141 ], [ 88.5061873, 25.2029771 ], [ 88.5046958, 25.2030634 ], [ 88.5040796, 25.203199 ], [ 88.5037029, 25.2031921 ], [ 88.5031113, 25.2033674 ], [ 88.5023663, 25.203477 ], [ 88.5017527, 25.2037619 ], [ 88.5007009, 25.2045288 ], [ 88.5003942, 25.204967 ], [ 88.5002408, 25.2053615 ], [ 88.5002189, 25.205975 ], [ 88.5003723, 25.2065666 ], [ 88.5005476, 25.2069172 ], [ 88.5007886, 25.2075965 ], [ 88.5007667, 25.2080129 ], [ 88.5005037, 25.2085168 ], [ 88.5003065, 25.2091304 ], [ 88.5000217, 25.2096125 ], [ 88.4994631, 25.210324 ], [ 88.4987633, 25.2108489 ], [ 88.498005, 25.2110239 ], [ 88.4973635, 25.2109655 ], [ 88.4961387, 25.2104989 ], [ 88.4955554, 25.2104406 ], [ 88.4948555, 25.2104989 ], [ 88.4944473, 25.2106739 ], [ 88.4933974, 25.2109655 ], [ 88.4922893, 25.2109655 ], [ 88.4912395, 25.2111988 ], [ 88.4880316, 25.2112572 ], [ 88.4871568, 25.2117821 ], [ 88.4863402, 25.2121903 ], [ 88.4855237, 25.2124236 ], [ 88.4826658, 25.2121903 ], [ 88.4823742, 25.2110239 ], [ 88.4806245, 25.2114321 ], [ 88.4796913, 25.2117821 ], [ 88.4784984, 25.2128474 ], [ 88.47717, 25.2130495 ], [ 88.4761044, 25.2128319 ], [ 88.4750545, 25.212307 ], [ 88.4745296, 25.2121903 ], [ 88.4745296, 25.2109072 ], [ 88.4741214, 25.2085743 ], [ 88.4735381, 25.2072911 ], [ 88.4724883, 25.2058913 ], [ 88.4717884, 25.2053664 ], [ 88.4712052, 25.2050748 ], [ 88.4709719, 25.2043749 ], [ 88.4706219, 25.2037917 ], [ 88.4700387, 25.2030918 ], [ 88.4695721, 25.2022753 ], [ 88.4692805, 25.2016337 ], [ 88.4692221, 25.2004672 ], [ 88.4706219, 25.2000881 ], [ 88.4714968, 25.2001464 ], [ 88.4720217, 25.2000298 ], [ 88.4717301, 25.1996798 ], [ 88.4707386, 25.1995049 ], [ 88.4712635, 25.1993882 ], [ 88.472255, 25.19898 ], [ 88.472255, 25.1983384 ], [ 88.4716718, 25.1978135 ], [ 88.4710302, 25.1978135 ], [ 88.4701553, 25.1980468 ], [ 88.4691638, 25.1983967 ], [ 88.4690472, 25.1978135 ], [ 88.4695721, 25.1974635 ], [ 88.4693388, 25.1970553 ], [ 88.4685806, 25.1971719 ], [ 88.467764, 25.1976968 ], [ 88.4671808, 25.1976968 ], [ 88.465956, 25.1968803 ], [ 88.4651395, 25.1960638 ], [ 88.463798, 25.1953639 ], [ 88.4631565, 25.1953055 ], [ 88.4625149, 25.1953639 ], [ 88.4608818, 25.1962971 ], [ 88.4585197, 25.1960054 ], [ 88.4578781, 25.1961221 ], [ 88.4571199, 25.1967053 ], [ 88.4557785, 25.1967053 ], [ 88.4515208, 25.1974052 ], [ 88.4496544, 25.1975802 ], [ 88.448313, 25.1978135 ], [ 88.4476714, 25.1978135 ], [ 88.4467966, 25.1975219 ], [ 88.4454201, 25.1973736 ], [ 88.4439186, 25.1978933 ], [ 88.4433011, 25.1986821 ], [ 88.4425182, 25.1999276 ], [ 88.4421093, 25.2002716 ], [ 88.4414958, 25.2004047 ], [ 88.4408653, 25.1999787 ], [ 88.4402689, 25.1991437 ], [ 88.4399111, 25.1982406 ], [ 88.4395191, 25.1978487 ], [ 88.4387864, 25.1977464 ], [ 88.4381623, 25.1990666 ], [ 88.4382411, 25.200524 ], [ 88.4384456, 25.2015124 ], [ 88.4390099, 25.2024556 ], [ 88.4388964, 25.203786 ], [ 88.4384769, 25.2052892 ], [ 88.4382671, 25.2063379 ], [ 88.4387012, 25.2069823 ], [ 88.4403882, 25.2077662 ], [ 88.4417678, 25.2083524 ], [ 88.4427767, 25.2092045 ], [ 88.4421812, 25.2097469 ], [ 88.4413306, 25.2090074 ], [ 88.4396091, 25.2081559 ], [ 88.4386866, 25.2078061 ], [ 88.437647, 25.2070083 ], [ 88.4374884, 25.2063336 ], [ 88.4377428, 25.2043453 ], [ 88.4381653, 25.2036394 ], [ 88.4382949, 25.2027324 ], [ 88.4381468, 25.20214 ], [ 88.4376728, 25.201269 ], [ 88.4372417, 25.2002835 ], [ 88.4371287, 25.1994745 ], [ 88.4373662, 25.1981551 ], [ 88.4378476, 25.1972488 ], [ 88.4387391, 25.1968275 ], [ 88.4394296, 25.1970002 ], [ 88.4397703, 25.1971789 ], [ 88.4403297, 25.1977732 ], [ 88.4412724, 25.1993524 ], [ 88.4417983, 25.1993056 ], [ 88.4421861, 25.1981821 ], [ 88.4429201, 25.1975239 ], [ 88.4429845, 25.1968155 ], [ 88.4431777, 25.1963324 ], [ 88.4432421, 25.1955596 ], [ 88.4433387, 25.194658 ], [ 88.4432743, 25.1941106 ], [ 88.4432099, 25.1934022 ], [ 88.4430167, 25.1926615 ], [ 88.4428557, 25.1919209 ], [ 88.4432421, 25.1908261 ], [ 88.4433709, 25.1901821 ], [ 88.4435319, 25.1891355 ], [ 88.4433709, 25.1882661 ], [ 88.4431455, 25.1874933 ], [ 88.4428879, 25.1865272 ], [ 88.4427591, 25.1858188 ], [ 88.4426303, 25.1854002 ], [ 88.4426303, 25.1848528 ], [ 88.4426625, 25.1843376 ], [ 88.4428235, 25.1837902 ], [ 88.4429845, 25.1830495 ], [ 88.4432421, 25.1824377 ], [ 88.4436607, 25.1817293 ], [ 88.4437251, 25.1812463 ], [ 88.4440793, 25.1808599 ], [ 88.444516, 25.1807828 ], [ 88.4446267, 25.1807633 ], [ 88.4449487, 25.1805379 ], [ 88.4453996, 25.1802158 ], [ 88.4456894, 25.1796362 ], [ 88.4457294, 25.1793492 ], [ 88.450556, 25.175833 ], [ 88.4525, 25.169722 ], [ 88.454722, 25.164444 ], [ 88.456667, 25.158611 ], [ 88.459167, 25.153333 ], [ 88.460833, 25.147222 ], [ 88.461389, 25.141111 ], [ 88.460556, 25.135278 ], [ 88.46, 25.129722 ], [ 88.458889, 25.124444 ], [ 88.458333, 25.118889 ], [ 88.458611, 25.112778 ], [ 88.459722, 25.105833 ], [ 88.46, 25.099722 ], [ 88.461111, 25.092778 ], [ 88.4625, 25.086111 ], [ 88.462778, 25.079722 ], [ 88.461389, 25.074722 ], [ 88.46, 25.069444 ], [ 88.4575, 25.065 ], [ 88.454444, 25.061111 ], [ 88.451389, 25.057222 ], [ 88.447222, 25.053889 ], [ 88.443333, 25.049722 ], [ 88.441111, 25.045278 ], [ 88.440556, 25.039444 ], [ 88.440833, 25.033333 ], [ 88.440278, 25.027778 ], [ 88.438056, 25.023056 ], [ 88.434722, 25.019167 ], [ 88.431667, 25.015278 ], [ 88.4275, 25.011944 ], [ 88.423611, 25.008333 ], [ 88.419444, 25.005 ], [ 88.416389, 25.001111 ], [ 88.413333, 24.997222 ], [ 88.415, 24.991111 ], [ 88.415556, 24.985 ], [ 88.413889, 24.979722 ], [ 88.4125, 24.974722 ], [ 88.410278, 24.970278 ], [ 88.407222, 24.966389 ], [ 88.403889, 24.962222 ], [ 88.400833, 24.958333 ], [ 88.398611, 24.953889 ], [ 88.398889, 24.947778 ], [ 88.398333, 24.941944 ], [ 88.396111, 24.9375 ], [ 88.391944, 24.934167 ], [ 88.388056, 24.930833 ], [ 88.385865, 24.9289344 ], [ 88.383889, 24.927222 ], [ 88.380833, 24.923333 ], [ 88.376667, 24.92 ], [ 88.372778, 24.916667 ], [ 88.369444, 24.912778 ], [ 88.365556, 24.909167 ], [ 88.3625, 24.905278 ], [ 88.359167, 24.901389 ], [ 88.356944, 24.896944 ], [ 88.354722, 24.8925 ], [ 88.351667, 24.888333 ], [ 88.349167, 24.883889 ], [ 88.346944, 24.879444 ], [ 88.344722, 24.875 ], [ 88.3425, 24.870278 ], [ 88.338333, 24.866944 ], [ 88.332222, 24.8675 ], [ 88.327778, 24.870278 ], [ 88.324167, 24.873889 ], [ 88.318611, 24.875278 ], [ 88.311944, 24.873611 ], [ 88.305556, 24.874167 ], [ 88.301111, 24.876944 ], [ 88.2975, 24.880556 ], [ 88.291944, 24.881944 ], [ 88.284444, 24.880833 ], [ 88.280556, 24.884444 ], [ 88.276944, 24.888056 ], [ 88.2748524, 24.8882377 ], [ 88.270556, 24.888611 ], [ 88.2675, 24.884722 ], [ 88.264167, 24.885556 ], [ 88.264722, 24.891111 ], [ 88.265278, 24.896944 ], [ 88.265, 24.903056 ], [ 88.2643899, 24.9102524 ], [ 88.2643802, 24.9157853 ], [ 88.2634495, 24.9200865 ], [ 88.2605165, 24.9248648 ], [ 88.2551345, 24.9282616 ], [ 88.2485691, 24.9308376 ], [ 88.2434561, 24.9332155 ], [ 88.2400025, 24.937005 ], [ 88.2379481, 24.9403291 ], [ 88.2350607, 24.9462112 ], [ 88.2337947, 24.9490776 ], [ 88.2316638, 24.9536143 ], [ 88.2295648, 24.958024 ], [ 88.2289913, 24.9584247 ], [ 88.2257709, 24.9606746 ], [ 88.2227518, 24.9618552 ], [ 88.2133847, 24.9615697 ], [ 88.2072449, 24.9612129 ], [ 88.2042538, 24.9597856 ], [ 88.2000155, 24.9564397 ], [ 88.1954838, 24.9542883 ], [ 88.1907847, 24.9525154 ], [ 88.1886513, 24.9517199 ], [ 88.1858514, 24.9533355 ], [ 88.1826437, 24.9552624 ], [ 88.1802528, 24.9524969 ], [ 88.1780979, 24.9508108 ], [ 88.1771927, 24.9502309 ], [ 88.1765728, 24.9500436 ], [ 88.1756282, 24.950222 ], [ 88.1733455, 24.9509446 ], [ 88.1710848, 24.9515177 ], [ 88.1701182, 24.9516851 ], [ 88.1695082, 24.9516316 ], [ 88.16878, 24.9510338 ], [ 88.1677371, 24.9498741 ], [ 88.1669204, 24.949098 ], [ 88.1660939, 24.9480899 ], [ 88.1654543, 24.9477509 ], [ 88.1647951, 24.9475635 ], [ 88.1639981, 24.9473672 ], [ 88.1635652, 24.9469122 ], [ 88.1635553, 24.9464216 ], [ 88.1634274, 24.945235 ], [ 88.1630634, 24.9436202 ], [ 88.1626403, 24.9427102 ], [ 88.1623542, 24.9423165 ], [ 88.1618925, 24.9421035 ], [ 88.1613218, 24.9421214 ], [ 88.1603772, 24.9425229 ], [ 88.1598951, 24.9429422 ], [ 88.1589308, 24.9432901 ], [ 88.1574451, 24.9427994 ], [ 88.1571105, 24.942282 ], [ 88.1570613, 24.941595 ], [ 88.1570613, 24.9412024 ], [ 88.1578682, 24.9394448 ], [ 88.157937, 24.9383028 ], [ 88.1575336, 24.9371787 ], [ 88.1571105, 24.9364232 ], [ 88.1566678, 24.9356441 ], [ 88.1565497, 24.9353318 ], [ 88.1564415, 24.934966 ], [ 88.1563037, 24.9348544 ], [ 88.1558855, 24.9348544 ], [ 88.1549409, 24.9349749 ], [ 88.1544539, 24.935015 ], [ 88.154203, 24.9347697 ], [ 88.1534208, 24.9343503 ], [ 88.1523919, 24.9340201 ], [ 88.151689, 24.9339667 ], [ 88.1507543, 24.9340648 ], [ 88.1484814, 24.9350195 ], [ 88.1475816, 24.9357539 ], [ 88.1471236, 24.9363311 ], [ 88.1468284, 24.9371251 ], [ 88.1463856, 24.9377408 ], [ 88.1454705, 24.9380441 ], [ 88.1443489, 24.9380084 ], [ 88.1419677, 24.9378657 ], [ 88.1407083, 24.9377854 ], [ 88.140177, 24.937598 ], [ 88.1391537, 24.9376248 ], [ 88.1381107, 24.9377497 ], [ 88.1374219, 24.937598 ], [ 88.1368512, 24.9375266 ], [ 88.1369201, 24.9371341 ], [ 88.1365069, 24.9364114 ], [ 88.1360149, 24.9356173 ], [ 88.136133, 24.9348054 ], [ 88.136358, 24.9332721 ], [ 88.1369792, 24.9306297 ], [ 88.142778, 24.924167 ], [ 88.137778, 24.921389 ], [ 88.135278, 24.918333 ], [ 88.1413402, 24.9137122 ], [ 88.1442277, 24.9123214 ], [ 88.1473931, 24.9103764 ], [ 88.1488874, 24.9087859 ], [ 88.1520806, 24.9062754 ], [ 88.1522475, 24.9044075 ], [ 88.1538895, 24.90259 ], [ 88.1519415, 24.8994699 ], [ 88.1537992, 24.8979541 ], [ 88.1568951, 24.8970618 ], [ 88.1602069, 24.8966327 ], [ 88.1599286, 24.8935276 ], [ 88.1578792, 24.8940466 ], [ 88.1562143, 24.8936585 ], [ 88.1533517, 24.8888533 ], [ 88.1514625, 24.8859793 ], [ 88.1508525, 24.8848011 ], [ 88.151128, 24.8837121 ], [ 88.1517183, 24.8830694 ], [ 88.1531984, 24.8825331 ], [ 88.1539814, 24.880588 ], [ 88.1546505, 24.880106 ], [ 88.1564019, 24.8798739 ], [ 88.1593143, 24.8793205 ], [ 88.161111, 24.8775 ], [ 88.1587436, 24.8755535 ], [ 88.1576023, 24.8739825 ], [ 88.1573352, 24.8726464 ], [ 88.1576416, 24.8712509 ], [ 88.1584681, 24.8703582 ], [ 88.1599047, 24.8686264 ], [ 88.1628657, 24.8646725 ], [ 88.1647843, 24.8619899 ], [ 88.1649029, 24.8617427 ], [ 88.1645146, 24.8609384 ], [ 88.163624, 24.8598062 ], [ 88.1613216, 24.8595383 ], [ 88.1593628, 24.8572917 ], [ 88.1612428, 24.8541102 ], [ 88.1621154, 24.8520458 ], [ 88.1622588, 24.8513729 ], [ 88.1606441, 24.8511244 ], [ 88.1588909, 24.8538769 ], [ 88.1522673, 24.8534729 ], [ 88.1520491, 24.8535108 ], [ 88.1515571, 24.8544393 ], [ 88.151075, 24.8546 ], [ 88.1501304, 24.8547429 ], [ 88.1475427, 24.8542161 ], [ 88.1452698, 24.8540822 ], [ 88.1442465, 24.8526984 ], [ 88.1434888, 24.8523769 ], [ 88.1426411, 24.8507321 ], [ 88.142869, 24.8478949 ], [ 88.1432232, 24.8474842 ], [ 88.142987, 24.8447342 ], [ 88.1410259, 24.844575 ], [ 88.1402513, 24.8445119 ], [ 88.1392678, 24.8406805 ], [ 88.1385035, 24.8389441 ], [ 88.1380189, 24.83804 ], [ 88.1381551, 24.8357264 ], [ 88.135824, 24.8353944 ], [ 88.1339556, 24.8377293 ], [ 88.131647, 24.8375315 ], [ 88.1300391, 24.8367695 ], [ 88.1312852, 24.8327581 ], [ 88.1316749, 24.8295252 ], [ 88.1320751, 24.8286889 ], [ 88.1321166, 24.8193729 ], [ 88.1314127, 24.8188861 ], [ 88.1301674, 24.8189774 ], [ 88.1298474, 24.8192174 ], [ 88.1263627, 24.8194203 ], [ 88.1262429, 24.8203978 ], [ 88.1247572, 24.8239971 ], [ 88.1241417, 24.8246034 ], [ 88.1230564, 24.824616 ], [ 88.1222081, 24.8240419 ], [ 88.1206774, 24.8231578 ], [ 88.1182005, 24.8212129 ], [ 88.1155222, 24.8191206 ], [ 88.1126624, 24.8164136 ], [ 88.1090197, 24.8125055 ], [ 88.1085714, 24.8104015 ], [ 88.106473, 24.8059446 ], [ 88.1051826, 24.8002527 ], [ 88.1045172, 24.7952275 ], [ 88.1045421, 24.7944093 ], [ 88.1046569, 24.7906315 ], [ 88.1052986, 24.7859609 ], [ 88.103657, 24.7810872 ], [ 88.1006976, 24.7810763 ], [ 88.0990964, 24.781154 ], [ 88.0949788, 24.7817138 ], [ 88.0889571, 24.7842865 ], [ 88.0885026, 24.7840778 ], [ 88.0868669, 24.782431 ], [ 88.08071, 24.7746846 ], [ 88.0780116, 24.7711794 ], [ 88.0770317, 24.7709934 ], [ 88.0754181, 24.7716009 ], [ 88.0731821, 24.7739605 ], [ 88.0722163, 24.7745705 ], [ 88.0713975, 24.7741511 ], [ 88.0709252, 24.7732838 ], [ 88.0703304, 24.7729088 ], [ 88.0686682, 24.7714251 ], [ 88.06765, 24.7707103 ], [ 88.0668102, 24.7695951 ], [ 88.0669677, 24.7685085 ], [ 88.0691156, 24.7671838 ], [ 88.0673666, 24.7641238 ], [ 88.0673875, 24.7635519 ], [ 88.0679334, 24.76298 ], [ 88.0688782, 24.7622555 ], [ 88.0707823, 24.7611392 ], [ 88.0714557, 24.7607075 ], [ 88.0715303, 24.7601414 ], [ 88.0694137, 24.7570852 ], [ 88.0673303, 24.7544678 ], [ 88.0645063, 24.7528301 ], [ 88.0643783, 24.7526146 ], [ 88.0642897, 24.7519624 ], [ 88.0641274, 24.7506533 ], [ 88.0641717, 24.7503629 ], [ 88.0643537, 24.7501619 ], [ 88.0654213, 24.7488304 ], [ 88.0656574, 24.7486473 ], [ 88.0659034, 24.7476465 ], [ 88.066233, 24.7476733 ], [ 88.0664298, 24.7478967 ], [ 88.0676977, 24.7471114 ], [ 88.0709133, 24.7437219 ], [ 88.0684101, 24.7389348 ], [ 88.0659888, 24.739399 ], [ 88.0659453, 24.736945 ], [ 88.0648646, 24.7319295 ], [ 88.0628254, 24.7254286 ], [ 88.0627926, 24.725324 ], [ 88.0577278, 24.7183687 ], [ 88.0533442, 24.7151855 ], [ 88.0494844, 24.7120033 ], [ 88.039988, 24.7060305 ], [ 88.040085, 24.7048782 ], [ 88.0381353, 24.7023215 ], [ 88.0369321, 24.701244 ], [ 88.0364409, 24.7009605 ], [ 88.0352616, 24.6995651 ], [ 88.0334801, 24.6976752 ], [ 88.0200904, 24.6837071 ], [ 88.0134561, 24.6766487 ], [ 88.0101682, 24.6723258 ], [ 88.0075306, 24.6688577 ], [ 88.007915, 24.6678238 ], [ 88.0150592, 24.6613449 ], [ 88.0244193, 24.6519228 ], [ 88.0348954, 24.6464363 ], [ 88.0479087, 24.6437187 ], [ 88.052567, 24.6429443 ], [ 88.075556, 24.633611 ], [ 88.078611, 24.629167 ], [ 88.082222, 24.625556 ], [ 88.085278, 24.621111 ], [ 88.088333, 24.616667 ], [ 88.091667, 24.612222 ], [ 88.094722, 24.607778 ], [ 88.097222, 24.602778 ], [ 88.098889, 24.596667 ], [ 88.100833, 24.590556 ], [ 88.102778, 24.584722 ], [ 88.104444, 24.578611 ], [ 88.106389, 24.572778 ], [ 88.1075, 24.565833 ], [ 88.108611, 24.559167 ], [ 88.107222, 24.553889 ], [ 88.106944, 24.548333 ], [ 88.107222, 24.541944 ], [ 88.108889, 24.536111 ], [ 88.11, 24.530556 ], [ 88.111111, 24.523889 ], [ 88.114167, 24.519444 ], [ 88.118056, 24.515833 ], [ 88.121667, 24.512222 ], [ 88.125556, 24.508611 ], [ 88.130556, 24.506389 ], [ 88.135278, 24.504444 ], [ 88.140833, 24.503056 ], [ 88.146667, 24.501944 ], [ 88.153333, 24.502222 ], [ 88.159722, 24.501667 ], [ 88.164444, 24.499722 ], [ 88.170278, 24.498333 ], [ 88.173889, 24.494722 ], [ 88.178333, 24.491944 ], [ 88.183889, 24.490556 ], [ 88.188889, 24.488611 ], [ 88.193056, 24.485556 ], [ 88.198056, 24.483611 ], [ 88.203056, 24.481667 ], [ 88.2075, 24.478611 ], [ 88.211667, 24.475833 ], [ 88.216667, 24.473889 ], [ 88.221667, 24.471667 ], [ 88.226111, 24.468889 ], [ 88.231667, 24.4675 ], [ 88.237222, 24.466389 ], [ 88.242778, 24.465 ], [ 88.248889, 24.464444 ], [ 88.255278, 24.464167 ], [ 88.260833, 24.462778 ], [ 88.265833, 24.460833 ], [ 88.27, 24.457778 ], [ 88.275, 24.455833 ], [ 88.28, 24.453889 ], [ 88.284444, 24.450833 ], [ 88.289444, 24.448889 ], [ 88.294167, 24.446667 ], [ 88.299167, 24.444722 ], [ 88.303611, 24.441944 ], [ 88.307778, 24.438889 ], [ 88.312778, 24.436944 ], [ 88.318333, 24.435556 ], [ 88.323889, 24.434444 ], [ 88.328333, 24.431389 ], [ 88.332778, 24.428611 ], [ 88.336944, 24.425833 ], [ 88.341389, 24.423056 ], [ 88.346389, 24.420833 ], [ 88.351389, 24.418889 ], [ 88.355556, 24.416111 ], [ 88.360556, 24.413889 ], [ 88.365556, 24.411944 ], [ 88.369722, 24.408889 ], [ 88.373611, 24.405278 ], [ 88.377778, 24.4025 ], [ 88.382222, 24.399722 ], [ 88.387222, 24.3975 ], [ 88.390833, 24.393889 ], [ 88.395278, 24.391111 ], [ 88.399444, 24.388056 ], [ 88.404444, 24.386111 ], [ 88.408056, 24.3825 ], [ 88.4125, 24.379722 ], [ 88.416111, 24.376111 ], [ 88.42, 24.372222 ], [ 88.424167, 24.369444 ], [ 88.429167, 24.3675 ], [ 88.434167, 24.365278 ], [ 88.438333, 24.3625 ], [ 88.442222, 24.358889 ], [ 88.446389, 24.356111 ], [ 88.451389, 24.353889 ], [ 88.456389, 24.351944 ], [ 88.461944, 24.350556 ], [ 88.466389, 24.347778 ], [ 88.47, 24.343889 ], [ 88.473611, 24.340278 ], [ 88.4775, 24.336667 ], [ 88.481667, 24.333889 ], [ 88.486111, 24.331111 ], [ 88.489722, 24.3275 ], [ 88.493889, 24.324444 ], [ 88.497778, 24.320833 ], [ 88.503333, 24.319722 ], [ 88.508333, 24.3175 ], [ 88.514444, 24.316944 ], [ 88.52, 24.315833 ], [ 88.525, 24.313611 ], [ 88.531111, 24.313056 ], [ 88.536667, 24.311944 ], [ 88.543056, 24.311389 ], [ 88.549167, 24.310833 ], [ 88.554722, 24.309444 ], [ 88.561667, 24.31 ], [ 88.5675, 24.310833 ], [ 88.571667, 24.314167 ], [ 88.577222, 24.316389 ], [ 88.582222, 24.314167 ], [ 88.587778, 24.313056 ], [ 88.593333, 24.311667 ], [ 88.599444, 24.311111 ], [ 88.604444, 24.309167 ], [ 88.608889, 24.306111 ], [ 88.613889, 24.304167 ], [ 88.62, 24.303611 ], [ 88.625, 24.301667 ], [ 88.630556, 24.300278 ], [ 88.635556, 24.298056 ], [ 88.640278, 24.296111 ], [ 88.645833, 24.294722 ], [ 88.652222, 24.294167 ], [ 88.656944, 24.297222 ], [ 88.661111, 24.300278 ], [ 88.664167, 24.304444 ], [ 88.668333, 24.307778 ], [ 88.671389, 24.311667 ], [ 88.674444, 24.315556 ], [ 88.679444, 24.318333 ], [ 88.686111, 24.318611 ], [ 88.691111, 24.316667 ], [ 88.694722, 24.313056 ], [ 88.698611, 24.309167 ], [ 88.702222, 24.305556 ], [ 88.706389, 24.302778 ], [ 88.709444, 24.298333 ], [ 88.7125, 24.293889 ], [ 88.715556, 24.289444 ], [ 88.718611, 24.285 ], [ 88.721667, 24.280556 ], [ 88.724167, 24.275278 ], [ 88.727222, 24.270833 ], [ 88.729722, 24.265556 ], [ 88.732778, 24.261111 ], [ 88.735278, 24.255833 ], [ 88.7375, 24.250833 ], [ 88.739444, 24.244722 ], [ 88.740556, 24.237778 ], [ 88.740833, 24.231667 ], [ 88.741944, 24.225 ], [ 88.743056, 24.218056 ], [ 88.7425, 24.2125 ], [ 88.743889, 24.205556 ], [ 88.744155, 24.2039598 ], [ 88.745, 24.198889 ], [ 88.745278, 24.192778 ], [ 88.743889, 24.1875 ], [ 88.737222, 24.185833 ], [ 88.730556, 24.184444 ], [ 88.724444, 24.184722 ], [ 88.716944, 24.183889 ], [ 88.713056, 24.180278 ], [ 88.710833, 24.175833 ], [ 88.708333, 24.171389 ], [ 88.706944, 24.166389 ], [ 88.704722, 24.161667 ], [ 88.7025, 24.157222 ], [ 88.700278, 24.152778 ], [ 88.699722, 24.147222 ], [ 88.701389, 24.141111 ], [ 88.704444, 24.136667 ], [ 88.7075, 24.132222 ], [ 88.707778, 24.126111 ], [ 88.707222, 24.120278 ], [ 88.706667, 24.114722 ], [ 88.707778, 24.108056 ], [ 88.708056, 24.1025 ], [ 88.705, 24.098333 ], [ 88.700833, 24.095 ], [ 88.6997003, 24.0927347 ], [ 88.698611, 24.090556 ], [ 88.698889, 24.084444 ], [ 88.701389, 24.079167 ], [ 88.705, 24.075556 ], [ 88.709444, 24.0725 ], [ 88.713611, 24.069722 ], [ 88.717778, 24.066944 ], [ 88.722222, 24.064167 ], [ 88.725833, 24.060278 ], [ 88.727222, 24.053611 ], [ 88.7226477, 24.048862 ], [ 88.7224533, 24.0440365 ], [ 88.7224533, 24.0423903 ], [ 88.7301762, 24.0365639 ], [ 88.7371744, 24.0343043 ], [ 88.7400197, 24.0332875 ], [ 88.7455158, 24.0326419 ], [ 88.7470533, 24.0316089 ], [ 88.7475304, 24.0292524 ], [ 88.747177, 24.0243455 ], [ 88.7406499, 24.021279 ], [ 88.7357013, 24.0191253 ], [ 88.7311456, 24.0146982 ], [ 88.7296465, 24.0105634 ], [ 88.726944, 24.005556 ], [ 88.722778, 24.002222 ], [ 88.723056, 23.997222 ], [ 88.726111, 23.992778 ], [ 88.730278, 23.99 ], [ 88.735278, 23.988056 ], [ 88.740278, 23.985833 ], [ 88.7359709, 23.9822153 ], [ 88.7338503, 23.979099 ], [ 88.7350343, 23.9722363 ], [ 88.734133, 23.9667943 ], [ 88.7302628, 23.9612552 ], [ 88.731944, 23.9575 ], [ 88.7352817, 23.9512907 ], [ 88.7374377, 23.9477859 ], [ 88.7383744, 23.9418422 ], [ 88.738611, 23.936111 ], [ 88.738889, 23.93 ], [ 88.738333, 23.924444 ], [ 88.736944, 23.919167 ], [ 88.733056, 23.915833 ], [ 88.7275, 23.913611 ], [ 88.720833, 23.911944 ], [ 88.714167, 23.910556 ], [ 88.709444, 23.907778 ], [ 88.704444, 23.905 ], [ 88.699722, 23.902222 ], [ 88.695556, 23.898889 ], [ 88.691667, 23.895278 ], [ 88.6875, 23.891944 ], [ 88.684444, 23.888056 ], [ 88.682222, 23.883611 ], [ 88.68, 23.879167 ], [ 88.677778, 23.874722 ], [ 88.674722, 23.870833 ], [ 88.669722, 23.868056 ], [ 88.662222, 23.866944 ], [ 88.656111, 23.8675 ], [ 88.650556, 23.868611 ], [ 88.645556, 23.870833 ], [ 88.64, 23.871944 ], [ 88.6362271, 23.8728561 ], [ 88.6351612, 23.8714863 ], [ 88.6306167, 23.8680728 ], [ 88.627602, 23.8668327 ], [ 88.6259789, 23.8670916 ], [ 88.625809, 23.8686967 ], [ 88.6263752, 23.8704917 ], [ 88.6269414, 23.8739262 ], [ 88.6250642, 23.8768038 ], [ 88.6216569, 23.877723 ], [ 88.6209303, 23.8787843 ], [ 88.6192612, 23.879154 ], [ 88.6185831, 23.8780297 ], [ 88.6157899, 23.8776501 ], [ 88.6106566, 23.8770217 ], [ 88.6075288, 23.8746343 ], [ 88.6078726, 23.8661015 ], [ 88.6066888, 23.8652404 ], [ 88.5987588, 23.8722444 ], [ 88.5965462, 23.8708543 ], [ 88.5868737, 23.8729657 ], [ 88.5843973, 23.8720747 ], [ 88.5810001, 23.8683122 ], [ 88.5805849, 23.8642045 ], [ 88.5745832, 23.8631689 ], [ 88.5748884, 23.8531984 ], [ 88.5776407, 23.8489114 ], [ 88.5798792, 23.8491445 ], [ 88.5811204, 23.8507069 ], [ 88.5839665, 23.8535877 ], [ 88.5855377, 23.8537827 ], [ 88.5883136, 23.8530504 ], [ 88.5889141, 23.8524157 ], [ 88.5889275, 23.8513904 ], [ 88.5883936, 23.8505604 ], [ 88.5871125, 23.8491445 ], [ 88.5862717, 23.8471061 ], [ 88.5853706, 23.8384826 ], [ 88.5848556, 23.8319648 ], [ 88.5868402, 23.827275 ], [ 88.5988222, 23.8209177 ], [ 88.6001924, 23.8187914 ], [ 88.600351, 23.8166748 ], [ 88.596004, 23.8124674 ], [ 88.5923261, 23.8135341 ], [ 88.5890199, 23.8155789 ], [ 88.5844148, 23.8148019 ], [ 88.5832824, 23.8124536 ], [ 88.5839996, 23.8111068 ], [ 88.5900957, 23.8069627 ], [ 88.5904137, 23.8037883 ], [ 88.5899358, 23.7994168 ], [ 88.587542, 23.7985978 ], [ 88.58252, 23.7992579 ], [ 88.5799738, 23.7980107 ], [ 88.5795208, 23.795334 ], [ 88.5797532, 23.7913453 ], [ 88.5779429, 23.7892006 ], [ 88.5722374, 23.7851134 ], [ 88.5646561, 23.786579 ], [ 88.5619336, 23.7882886 ], [ 88.5596382, 23.78802 ], [ 88.555341, 23.7863347 ], [ 88.5545669, 23.7852577 ], [ 88.5542733, 23.7841122 ], [ 88.5574762, 23.7813522 ], [ 88.5607592, 23.7775419 ], [ 88.5707028, 23.7738097 ], [ 88.5769873, 23.7730964 ], [ 88.5782519, 23.7661203 ], [ 88.5786921, 23.7620334 ], [ 88.5779525, 23.7603767 ], [ 88.5717301, 23.7513669 ], [ 88.5686583, 23.7489771 ], [ 88.5684712, 23.7476588 ], [ 88.5684717, 23.74735 ], [ 88.5700625, 23.73952 ], [ 88.5701293, 23.7314823 ], [ 88.5674543, 23.7283503 ], [ 88.5656476, 23.7200342 ], [ 88.5649696, 23.7156611 ], [ 88.5632249, 23.7140908 ], [ 88.5597314, 23.7124579 ], [ 88.5592615, 23.7118271 ], [ 88.5599655, 23.7096696 ], [ 88.5624318, 23.702762 ], [ 88.5635778, 23.6997376 ], [ 88.5643961, 23.6980436 ], [ 88.5656774, 23.6873789 ], [ 88.5665643, 23.6847988 ], [ 88.5697522, 23.6839089 ], [ 88.5703549, 23.6766919 ], [ 88.5705095, 23.6693993 ], [ 88.5699602, 23.6685415 ], [ 88.567191, 23.6665552 ], [ 88.567323, 23.6647975 ], [ 88.5677992, 23.6617906 ], [ 88.5659468, 23.6602001 ], [ 88.5652394, 23.6589846 ], [ 88.5621524, 23.6591855 ], [ 88.557723, 23.6524275 ], [ 88.5557976, 23.6494897 ], [ 88.5612339, 23.6442326 ], [ 88.5604151, 23.6363031 ], [ 88.5618798, 23.6351866 ], [ 88.571581, 23.6345008 ], [ 88.57946, 23.6371417 ], [ 88.586883, 23.6377523 ], [ 88.5903744, 23.6390966 ], [ 88.5911076, 23.6383896 ], [ 88.590833, 23.636667 ], [ 88.591111, 23.630556 ], [ 88.5906641, 23.6216561 ], [ 88.5904638, 23.6184741 ], [ 88.588908, 23.6174947 ], [ 88.5847301, 23.6178182 ], [ 88.5824, 23.6136059 ], [ 88.5797621, 23.6103876 ], [ 88.5788951, 23.6065402 ], [ 88.5770994, 23.604836 ], [ 88.5776782, 23.6026789 ], [ 88.5813057, 23.6010523 ], [ 88.5871755, 23.6005953 ], [ 88.5946306, 23.6002632 ], [ 88.5991126, 23.6010228 ], [ 88.6005577, 23.6051649 ], [ 88.6034031, 23.6041019 ], [ 88.6038137, 23.5989074 ], [ 88.6091412, 23.599213 ], [ 88.6204821, 23.6008747 ], [ 88.6302939, 23.6071472 ], [ 88.6336413, 23.6070402 ], [ 88.6369976, 23.6051649 ], [ 88.6392625, 23.6075403 ], [ 88.6410669, 23.6075947 ], [ 88.6420458, 23.6060651 ], [ 88.6399446, 23.6020144 ], [ 88.6367247, 23.5985387 ], [ 88.6371635, 23.5943112 ], [ 88.6371869, 23.590683 ], [ 88.6386348, 23.5888362 ], [ 88.6423533, 23.5874471 ], [ 88.645293, 23.5861354 ], [ 88.6466573, 23.5853851 ], [ 88.6472304, 23.5846099 ], [ 88.6462825, 23.5826029 ], [ 88.6471687, 23.5796026 ], [ 88.648374, 23.5782005 ], [ 88.6490879, 23.5762552 ], [ 88.6498616, 23.5725916 ], [ 88.6508101, 23.5701207 ], [ 88.6510753, 23.5686683 ], [ 88.6501299, 23.5672535 ], [ 88.6514034, 23.5650781 ], [ 88.652156, 23.5626657 ], [ 88.6522716, 23.5608865 ], [ 88.6515191, 23.5574552 ], [ 88.6515577, 23.5558457 ], [ 88.6526189, 23.554643 ], [ 88.6542668, 23.5537956 ], [ 88.6570375, 23.552715 ], [ 88.657655, 23.5521667 ], [ 88.6575, 23.549167 ], [ 88.6576936, 23.5479923 ], [ 88.6589477, 23.5474086 ], [ 88.6626739, 23.5457025 ], [ 88.6654788, 23.5445696 ], [ 88.669722, 23.539722 ], [ 88.673889, 23.536667 ], [ 88.677778, 23.533056 ], [ 88.681389, 23.529444 ], [ 88.685556, 23.526667 ], [ 88.689167, 23.523056 ], [ 88.692778, 23.519444 ], [ 88.696667, 23.515833 ], [ 88.700833, 23.512778 ], [ 88.705, 23.51 ], [ 88.71, 23.507778 ], [ 88.715556, 23.506667 ], [ 88.720556, 23.504444 ], [ 88.725278, 23.5025 ], [ 88.729722, 23.499722 ], [ 88.7325, 23.495278 ], [ 88.735, 23.49 ], [ 88.736944, 23.483889 ], [ 88.738611, 23.478056 ], [ 88.741667, 23.473611 ], [ 88.745278, 23.47 ], [ 88.749444, 23.466944 ], [ 88.754722, 23.467222 ], [ 88.759722, 23.47 ], [ 88.763611, 23.473333 ], [ 88.766667, 23.477222 ], [ 88.77, 23.481111 ], [ 88.773056, 23.485 ], [ 88.774444, 23.49 ], [ 88.775833, 23.495 ], [ 88.777222, 23.5 ], [ 88.781389, 23.503611 ], [ 88.7875, 23.503056 ], [ 88.7901533, 23.501636 ], [ 88.791111, 23.499444 ], [ 88.793333, 23.494167 ], [ 88.794444, 23.487222 ], [ 88.794167, 23.481667 ], [ 88.793611, 23.476111 ], [ 88.792778, 23.470278 ], [ 88.791389, 23.465278 ], [ 88.79, 23.460278 ], [ 88.787778, 23.455833 ], [ 88.786389, 23.450833 ], [ 88.784167, 23.446389 ], [ 88.781944, 23.441667 ], [ 88.778611, 23.437778 ], [ 88.775556, 23.433889 ], [ 88.771667, 23.430556 ], [ 88.768611, 23.426667 ], [ 88.764444, 23.423333 ], [ 88.7541207, 23.420199 ], [ 88.7528343, 23.4168694 ], [ 88.7530812, 23.4135219 ], [ 88.7540137, 23.412792 ], [ 88.7554673, 23.4124648 ], [ 88.7578058, 23.4095611 ], [ 88.7579081, 23.4078811 ], [ 88.7549841, 23.4058009 ], [ 88.7502013, 23.4044859 ], [ 88.7479248, 23.4015157 ], [ 88.7465899, 23.3964232 ], [ 88.7503025, 23.3945194 ], [ 88.7513258, 23.3886273 ], [ 88.754273, 23.3864449 ], [ 88.7573873, 23.3843477 ], [ 88.7579632, 23.3832652 ], [ 88.7571678, 23.379212 ], [ 88.7576605, 23.3759773 ], [ 88.7565224, 23.3739164 ], [ 88.7570033, 23.3726662 ], [ 88.7584844, 23.3721878 ], [ 88.7627082, 23.370652 ], [ 88.7631738, 23.3675273 ], [ 88.7587861, 23.3621166 ], [ 88.755833, 23.362148 ], [ 88.7509999, 23.3641059 ], [ 88.7469006, 23.363703 ], [ 88.7447886, 23.3608186 ], [ 88.7425313, 23.3569715 ], [ 88.7415717, 23.3523286 ], [ 88.739167, 23.350278 ], [ 88.736944, 23.345833 ], [ 88.734722, 23.341111 ], [ 88.733333, 23.336111 ], [ 88.732778, 23.330556 ], [ 88.729444, 23.326667 ], [ 88.726389, 23.322778 ], [ 88.7225, 23.319444 ], [ 88.718333, 23.316111 ], [ 88.713611, 23.313333 ], [ 88.711389, 23.308611 ], [ 88.7125, 23.301944 ], [ 88.712778, 23.295833 ], [ 88.712222, 23.29 ], [ 88.7114014, 23.2870461 ], [ 88.710833, 23.285 ], [ 88.710278, 23.279444 ], [ 88.712222, 23.273333 ], [ 88.715, 23.268889 ], [ 88.7175, 23.263889 ], [ 88.718611, 23.256944 ], [ 88.721111, 23.251667 ], [ 88.724722, 23.248056 ], [ 88.728889, 23.245278 ], [ 88.733889, 23.243333 ], [ 88.74, 23.242778 ], [ 88.746667, 23.243056 ], [ 88.752222, 23.241667 ], [ 88.7552934, 23.2413812 ], [ 88.7571122, 23.2418879 ], [ 88.758878, 23.2421401 ], [ 88.7590181, 23.2438219 ], [ 88.7589341, 23.2448029 ], [ 88.7594974, 23.2448219 ], [ 88.7595582, 23.2458711 ], [ 88.7613525, 23.2458255 ], [ 88.7641503, 23.2458559 ], [ 88.7676779, 23.2458102 ], [ 88.7677015, 23.2453915 ], [ 88.7693552, 23.2452233 ], [ 88.7694393, 23.2443544 ], [ 88.7701961, 23.2442703 ], [ 88.7703362, 23.2435977 ], [ 88.7708968, 23.2435416 ], [ 88.7711491, 23.2418038 ], [ 88.7735596, 23.241972 ], [ 88.7735596, 23.2415235 ], [ 88.7741482, 23.2414675 ], [ 88.7742883, 23.2395895 ], [ 88.7730831, 23.2395054 ], [ 88.7731952, 23.2388888 ], [ 88.7754095, 23.2389449 ], [ 88.776099, 23.2366745 ], [ 88.7773603, 23.2366745 ], [ 88.7773883, 23.2364783 ], [ 88.7777247, 23.2364783 ], [ 88.7777464, 23.2354636 ], [ 88.7772762, 23.2354412 ], [ 88.7772762, 23.2348246 ], [ 88.775174, 23.2348526 ], [ 88.7752021, 23.2338436 ], [ 88.7753983, 23.2338436 ], [ 88.7753983, 23.2319376 ], [ 88.7761831, 23.2319096 ], [ 88.7761482, 23.2311626 ], [ 88.773212, 23.2314051 ], [ 88.7729086, 23.2290539 ], [ 88.7744748, 23.2289322 ], [ 88.7740186, 23.2266058 ], [ 88.7743379, 23.2245378 ], [ 88.7756152, 23.2244922 ], [ 88.776117, 23.2244618 ], [ 88.7761474, 23.2240209 ], [ 88.7772726, 23.2239904 ], [ 88.7772878, 23.2238384 ], [ 88.7777287, 23.2238384 ], [ 88.7785095, 23.2226881 ], [ 88.7786867, 23.2218465 ], [ 88.7787688, 23.2208277 ], [ 88.7795291, 23.2209341 ], [ 88.7795291, 23.2211318 ], [ 88.7822113, 23.2211774 ], [ 88.7822205, 23.2219873 ], [ 88.7830894, 23.2219873 ], [ 88.7831174, 23.2233047 ], [ 88.7839583, 23.2233047 ], [ 88.7840664, 23.2224395 ], [ 88.7853892, 23.2223939 ], [ 88.7854196, 23.2218769 ], [ 88.7869098, 23.2218161 ], [ 88.7868453, 23.2227722 ], [ 88.7874058, 23.2227441 ], [ 88.7874899, 23.2221835 ], [ 88.7880225, 23.2221835 ], [ 88.7880225, 23.2212586 ], [ 88.7882747, 23.2212586 ], [ 88.7882467, 23.2203897 ], [ 88.7889194, 23.2203897 ], [ 88.7889643, 23.2201935 ], [ 88.7897771, 23.2201374 ], [ 88.7897491, 23.2199412 ], [ 88.7892445, 23.2199693 ], [ 88.7892726, 23.2195208 ], [ 88.7899172, 23.2195208 ], [ 88.7899172, 23.2192966 ], [ 88.789693, 23.2192685 ], [ 88.789814, 23.2185165 ], [ 88.7910104, 23.2186519 ], [ 88.7910556, 23.2193531 ], [ 88.7914562, 23.2194136 ], [ 88.791437, 23.2198674 ], [ 88.7953268, 23.2202776 ], [ 88.7953549, 23.2200814 ], [ 88.7966274, 23.2199693 ], [ 88.7974928, 23.2199306 ], [ 88.7978121, 23.2191703 ], [ 88.7990893, 23.2191551 ], [ 88.8002602, 23.2190639 ], [ 88.801948, 23.2188662 ], [ 88.8043352, 23.218851 ], [ 88.8054604, 23.218775 ], [ 88.8076804, 23.2193832 ], [ 88.809353, 23.2200522 ], [ 88.8106151, 23.2206757 ], [ 88.811132, 23.2212383 ], [ 88.8114514, 23.2215728 ], [ 88.8106303, 23.2223178 ], [ 88.8108431, 23.2226067 ], [ 88.8089729, 23.2242793 ], [ 88.8091705, 23.2245074 ], [ 88.8086356, 23.2249346 ], [ 88.8092466, 23.2260432 ], [ 88.8086079, 23.226545 ], [ 88.8091553, 23.2274573 ], [ 88.8088031, 23.2277613 ], [ 88.8091705, 23.2286281 ], [ 88.8072335, 23.2304241 ], [ 88.8072615, 23.2310127 ], [ 88.8064487, 23.2317134 ], [ 88.8066449, 23.2330588 ], [ 88.8064767, 23.2337175 ], [ 88.8066449, 23.235175 ], [ 88.8066449, 23.2357355 ], [ 88.8063366, 23.2362961 ], [ 88.8058881, 23.2369408 ], [ 88.8058601, 23.2375854 ], [ 88.805947, 23.2383444 ], [ 88.8062055, 23.2391351 ], [ 88.80654, 23.2400474 ], [ 88.8068593, 23.2408533 ], [ 88.8072699, 23.2421305 ], [ 88.8075436, 23.2436815 ], [ 88.8090337, 23.2450044 ], [ 88.8081518, 23.2456582 ], [ 88.8102606, 23.2484887 ], [ 88.8091675, 23.2488531 ], [ 88.8091675, 23.250675 ], [ 88.8091121, 23.2525699 ], [ 88.8093046, 23.2541485 ], [ 88.8093431, 23.2550726 ], [ 88.8108833, 23.2552266 ], [ 88.8108448, 23.2561507 ], [ 88.8108448, 23.2566127 ], [ 88.8116533, 23.2566127 ], [ 88.8121539, 23.2556887 ], [ 88.8129625, 23.254264 ], [ 88.8132705, 23.253725 ], [ 88.813463, 23.2528394 ], [ 88.813848, 23.2523388 ], [ 88.8145796, 23.2522233 ], [ 88.8146951, 23.2518383 ], [ 88.8151957, 23.2517613 ], [ 88.8155807, 23.2516458 ], [ 88.8158887, 23.2514533 ], [ 88.8161735, 23.2508873 ], [ 88.8181798, 23.2500425 ], [ 88.8209464, 23.2486557 ], [ 88.8209464, 23.2485039 ], [ 88.822826, 23.2477194 ], [ 88.8240823, 23.2471636 ], [ 88.8256124, 23.2460761 ], [ 88.8263078, 23.2456335 ], [ 88.8274332, 23.2453933 ], [ 88.8282425, 23.2451025 ], [ 88.8290391, 23.2446725 ], [ 88.8287417, 23.2440857 ], [ 88.8283821, 23.2433963 ], [ 88.8280224, 23.2428268 ], [ 88.8277526, 23.2423773 ], [ 88.827333, 23.2420176 ], [ 88.8268534, 23.241538 ], [ 88.8264938, 23.2410884 ], [ 88.8259243, 23.2407587 ], [ 88.8254447, 23.2403091 ], [ 88.8249951, 23.2399794 ], [ 88.8245155, 23.2396197 ], [ 88.824036, 23.2390802 ], [ 88.8235864, 23.2384208 ], [ 88.8233466, 23.2376115 ], [ 88.8231068, 23.2368322 ], [ 88.8230768, 23.2362927 ], [ 88.8230169, 23.2355434 ], [ 88.8231967, 23.234824 ], [ 88.8234964, 23.2343594 ], [ 88.8237962, 23.2341197 ], [ 88.8241259, 23.2338799 ], [ 88.8245155, 23.2338499 ], [ 88.8248452, 23.2338499 ], [ 88.8253548, 23.2339998 ], [ 88.8258643, 23.2342096 ], [ 88.8263439, 23.2345093 ], [ 88.8268834, 23.234899 ], [ 88.827363, 23.2352287 ], [ 88.8279325, 23.2357382 ], [ 88.8283521, 23.235978 ], [ 88.8288616, 23.2364276 ], [ 88.8294011, 23.2369072 ], [ 88.8299107, 23.2372069 ], [ 88.83069, 23.2377464 ], [ 88.831769, 23.2384658 ], [ 88.8325483, 23.2390652 ], [ 88.8332077, 23.2397246 ], [ 88.8337472, 23.240414 ], [ 88.8341369, 23.2410434 ], [ 88.8346764, 23.2416129 ], [ 88.8350361, 23.2423023 ], [ 88.8356955, 23.2433064 ], [ 88.8361751, 23.2436661 ], [ 88.8365947, 23.243816 ], [ 88.8370143, 23.243816 ], [ 88.8374639, 23.2435762 ], [ 88.8378536, 23.2428568 ], [ 88.8383032, 23.2419576 ], [ 88.8386628, 23.2411184 ], [ 88.8389626, 23.2403391 ], [ 88.8392024, 23.23932 ], [ 88.8395021, 23.2384208 ], [ 88.8399517, 23.2373418 ], [ 88.8405811, 23.2365175 ], [ 88.8411506, 23.2360379 ], [ 88.84184, 23.2354984 ], [ 88.8425593, 23.2349589 ], [ 88.8436084, 23.2343295 ], [ 88.8444776, 23.2338799 ], [ 88.8449272, 23.2335202 ], [ 88.8449872, 23.2329807 ], [ 88.8449572, 23.2324412 ], [ 88.8447174, 23.2320215 ], [ 88.8442302, 23.2317613 ], [ 88.8444793, 23.2306403 ], [ 88.8472111, 23.2304837 ], [ 88.8484117, 23.2305359 ], [ 88.8498037, 23.2305359 ], [ 88.8498531, 23.2312598 ], [ 88.8507243, 23.2313126 ], [ 88.8508299, 23.2318669 ], [ 88.8512259, 23.2318669 ], [ 88.8510147, 23.234322 ], [ 88.8519914, 23.234454 ], [ 88.8519914, 23.2346388 ], [ 88.853597, 23.2345379 ], [ 88.853684, 23.2364171 ], [ 88.8561351, 23.2362096 ], [ 88.8562522, 23.2347576 ], [ 88.8578764, 23.2350825 ], [ 88.8590085, 23.235144 ], [ 88.8598688, 23.2340976 ], [ 88.8597896, 23.2324081 ], [ 88.860872, 23.2323553 ], [ 88.8614674, 23.2344641 ], [ 88.8660726, 23.2334113 ], [ 88.8668117, 23.2334377 ], [ 88.8668245, 23.2337192 ], [ 88.8699009, 23.2338767 ], [ 88.8720585, 23.2339811 ], [ 88.8720334, 23.2344672 ], [ 88.8730894, 23.2344936 ], [ 88.8731686, 23.2339393 ], [ 88.8747033, 23.2342595 ], [ 88.8748053, 23.2335961 ], [ 88.8753861, 23.2324345 ], [ 88.8768644, 23.2324873 ], [ 88.8780259, 23.2317745 ], [ 88.8790707, 23.2314233 ], [ 88.880428, 23.2307621 ], [ 88.8820288, 23.2302401 ], [ 88.8831775, 23.2299871 ], [ 88.883212, 23.2296137 ], [ 88.8846045, 23.2296494 ], [ 88.8851431, 23.2296494 ], [ 88.8855958, 23.2297877 ], [ 88.8857176, 23.2289873 ], [ 88.8857002, 23.2281695 ], [ 88.8855088, 23.2272647 ], [ 88.8858046, 23.2271081 ], [ 88.8856828, 23.2261859 ], [ 88.885996, 23.2261163 ], [ 88.8866224, 23.2262207 ], [ 88.886866, 23.2266905 ], [ 88.8869008, 23.2271429 ], [ 88.8868834, 23.2275779 ], [ 88.886779, 23.2285001 ], [ 88.8867616, 23.2293701 ], [ 88.8867964, 23.2300835 ], [ 88.8867964, 23.2309187 ], [ 88.8867009, 23.231601 ], [ 88.8871444, 23.2314581 ], [ 88.8879149, 23.2312862 ], [ 88.889041, 23.2311623 ], [ 88.8905812, 23.2310222 ], [ 88.890634, 23.2319725 ], [ 88.8917956, 23.2318405 ], [ 88.8920213, 23.2325404 ], [ 88.8934207, 23.2322425 ], [ 88.8934587, 23.2314446 ], [ 88.8948875, 23.2311797 ], [ 88.8950615, 23.2322933 ], [ 88.8968537, 23.2320497 ], [ 88.8976019, 23.2321889 ], [ 88.8981935, 23.2321715 ], [ 88.8982457, 23.2318583 ], [ 88.8990227, 23.2320171 ], [ 88.8990113, 23.2324151 ], [ 88.8998472, 23.2324213 ], [ 88.8998472, 23.2332925 ], [ 88.9020563, 23.2332503 ], [ 88.9024217, 23.2335809 ], [ 88.9028045, 23.2340855 ], [ 88.9031177, 23.2347119 ], [ 88.9036434, 23.2349292 ], [ 88.9039181, 23.2357559 ], [ 88.90451, 23.2359468 ], [ 88.9050129, 23.2359394 ], [ 88.9054913, 23.2359324 ], [ 88.9059987, 23.2352865 ], [ 88.9067369, 23.2360169 ], [ 88.9072937, 23.2356515 ], [ 88.9080419, 23.2354775 ], [ 88.9080268, 23.2352023 ], [ 88.9088439, 23.235114 ], [ 88.9107658, 23.2347444 ], [ 88.9108978, 23.2340844 ], [ 88.9119537, 23.2339525 ], [ 88.9119782, 23.2315977 ], [ 88.913697, 23.2314407 ], [ 88.9137144, 23.2309013 ], [ 88.9140276, 23.2308491 ], [ 88.9139864, 23.2303358 ], [ 88.9146018, 23.2294397 ], [ 88.9146192, 23.2289525 ], [ 88.915176, 23.2289003 ], [ 88.9146992, 23.2268116 ], [ 88.9148048, 23.2237229 ], [ 88.9158079, 23.2236437 ], [ 88.9158343, 23.2229309 ], [ 88.9165207, 23.2229309 ], [ 88.9158894, 23.2203568 ], [ 88.9157551, 23.2199215 ], [ 88.916046, 23.219278 ], [ 88.915785, 23.2181644 ], [ 88.9156284, 23.2175032 ], [ 88.914567, 23.2165114 ], [ 88.9141146, 23.2157632 ], [ 88.9137752, 23.2152753 ], [ 88.913828, 23.2147737 ], [ 88.9141842, 23.2139362 ], [ 88.9154648, 23.2129522 ], [ 88.9160808, 23.2125964 ], [ 88.9162039, 23.2133746 ], [ 88.9171807, 23.2134538 ], [ 88.9173391, 23.2127146 ], [ 88.9176031, 23.2134538 ], [ 88.9181574, 23.213533 ], [ 88.9182366, 23.2142721 ], [ 88.9190286, 23.2144041 ], [ 88.9193348, 23.2150377 ], [ 88.9199948, 23.2150905 ], [ 88.9204436, 23.2163312 ], [ 88.9210507, 23.2164632 ], [ 88.9211442, 23.2180774 ], [ 88.9188126, 23.2185646 ], [ 88.9164984, 23.21893 ], [ 88.9166157, 23.2199479 ], [ 88.920074, 23.2191823 ], [ 88.9214203, 23.2190239 ], [ 88.9214467, 23.2186279 ], [ 88.9226875, 23.2184959 ], [ 88.9228459, 23.2173608 ], [ 88.9222915, 23.2170968 ], [ 88.9222578, 23.216233 ], [ 88.9247287, 23.2158502 ], [ 88.9252659, 23.217973 ], [ 88.9264731, 23.2179944 ], [ 88.9265259, 23.2169648 ], [ 88.9277389, 23.2168594 ], [ 88.9295311, 23.2161112 ], [ 88.9297573, 23.215711 ], [ 88.9285738, 23.2149459 ], [ 88.9287481, 23.214754 ], [ 88.9295089, 23.2145097 ], [ 88.9291641, 23.2118006 ], [ 88.9358605, 23.2088736 ], [ 88.9390838, 23.2075504 ], [ 88.9414676, 23.2066107 ], [ 88.9425658, 23.2062865 ], [ 88.9428562, 23.2069993 ], [ 88.9455225, 23.2068145 ], [ 88.946618, 23.2066803 ], [ 88.947227, 23.2073415 ], [ 88.9482014, 23.2083856 ], [ 88.9490192, 23.2090294 ], [ 88.9499414, 23.209621 ], [ 88.9510376, 23.2102822 ], [ 88.9522748, 23.2110753 ], [ 88.9524759, 23.2106423 ], [ 88.9535607, 23.2111348 ], [ 88.9546406, 23.2115662 ], [ 88.9557009, 23.2118656 ], [ 88.9555965, 23.2125094 ], [ 88.9578411, 23.213188 ], [ 88.9590765, 23.2134316 ], [ 88.9590334, 23.2141269 ], [ 88.9604853, 23.2142325 ], [ 88.9612773, 23.2147605 ], [ 88.9622276, 23.2146813 ], [ 88.9637482, 23.2149585 ], [ 88.9637746, 23.2174664 ], [ 88.9643554, 23.2173608 ], [ 88.9644082, 23.2183111 ], [ 88.9650153, 23.2183375 ], [ 88.9649889, 23.2186807 ], [ 88.9657809, 23.2186543 ], [ 88.9658073, 23.2192879 ], [ 88.9664673, 23.2192087 ], [ 88.9664673, 23.2198423 ], [ 88.9678928, 23.2197367 ], [ 88.9678664, 23.220555 ], [ 88.9691072, 23.2204495 ], [ 88.9691864, 23.220951 ], [ 88.9701103, 23.2214526 ], [ 88.9704271, 23.2228253 ], [ 88.9730778, 23.2225493 ], [ 88.9733562, 23.2217836 ], [ 88.974029, 23.2204844 ], [ 88.974957, 23.2189532 ], [ 88.975769, 23.2176772 ], [ 88.976813, 23.216378 ], [ 88.977393, 23.2157516 ], [ 88.9780194, 23.2152644 ], [ 88.9783803, 23.2150056 ], [ 88.9787618, 23.2160068 ], [ 88.9781725, 23.2165424 ], [ 88.9767202, 23.218118 ], [ 88.975769, 23.2197652 ], [ 88.974957, 23.22125 ], [ 88.9743538, 23.2222013 ], [ 88.9742842, 23.2229205 ], [ 88.9745394, 23.2238833 ], [ 88.975189, 23.2242545 ], [ 88.9771166, 23.2244093 ], [ 88.9790173, 23.2237493 ], [ 88.9807802, 23.2227465 ], [ 88.9811746, 23.2221897 ], [ 88.9810354, 23.2208904 ], [ 88.9802002, 23.2191504 ], [ 88.9796434, 23.2177352 ], [ 88.9791493, 23.2163048 ], [ 88.979597, 23.2159952 ], [ 88.9800468, 23.21612 ], [ 88.9808124, 23.217704 ], [ 88.9812348, 23.2189711 ], [ 88.9819403, 23.2199856 ], [ 88.982359, 23.2215285 ], [ 88.9826339, 23.221611 ], [ 88.9835579, 23.2209774 ], [ 88.9839539, 23.2213206 ], [ 88.9845346, 23.2212414 ], [ 88.9854435, 23.2194752 ], [ 88.9860467, 23.2186168 ], [ 88.9867427, 23.2178976 ], [ 88.9880883, 23.2166912 ], [ 88.9897355, 23.2157864 ], [ 88.9913131, 23.2154152 ], [ 88.9926123, 23.2153224 ], [ 88.9937491, 23.2153688 ], [ 88.9945398, 23.2151697 ], [ 88.9950678, 23.2144041 ], [ 88.9954374, 23.2139157 ], [ 88.9958861, 23.2130182 ], [ 88.9958861, 23.2119886 ], [ 88.9956221, 23.2110911 ], [ 88.995411, 23.2104839 ], [ 88.994619, 23.2104311 ], [ 88.9940382, 23.2106687 ], [ 88.9932726, 23.2112231 ], [ 88.9918225, 23.2124849 ], [ 88.9913506, 23.2124681 ], [ 88.9909883, 23.2124934 ], [ 88.9904321, 23.2126535 ], [ 88.9900866, 23.2128641 ], [ 88.9897243, 23.2130495 ], [ 88.9895322, 23.2132433 ], [ 88.9893046, 23.2135046 ], [ 88.9890771, 23.2137827 ], [ 88.9888159, 23.2141029 ], [ 88.9885378, 23.2143641 ], [ 88.9881923, 23.2146422 ], [ 88.9876614, 23.2149877 ], [ 88.9872738, 23.2152152 ], [ 88.9867429, 23.2153837 ], [ 88.9862963, 23.2155691 ], [ 88.9858412, 23.2156028 ], [ 88.9852682, 23.2156702 ], [ 88.9847289, 23.2156618 ], [ 88.9839789, 23.2155607 ], [ 88.9833554, 23.2153416 ], [ 88.9828498, 23.2150551 ], [ 88.9824368, 23.2147854 ], [ 88.982184, 23.2145411 ], [ 88.9816616, 23.214145 ], [ 88.9809537, 23.2136563 ], [ 88.9803386, 23.213058 ], [ 88.9801026, 23.2127377 ], [ 88.979892, 23.212367 ], [ 88.9797824, 23.2118782 ], [ 88.9798077, 23.2113473 ], [ 88.9799341, 23.210926 ], [ 88.9801026, 23.2105047 ], [ 88.9805071, 23.2101086 ], [ 88.9806841, 23.2099232 ], [ 88.9811476, 23.2097631 ], [ 88.9817459, 23.2097547 ], [ 88.982061, 23.20978 ], [ 88.9826172, 23.2097378 ], [ 88.9832829, 23.209662 ], [ 88.9838728, 23.2095272 ], [ 88.9844626, 23.2093333 ], [ 88.9851064, 23.2091058 ], [ 88.9855446, 23.2088446 ], [ 88.9858648, 23.2085665 ], [ 88.9862103, 23.2081705 ], [ 88.9865474, 23.2077028 ], [ 88.9868423, 23.2071045 ], [ 88.9870109, 23.2065652 ], [ 88.9872721, 23.2058826 ], [ 88.9860754, 23.2055936 ], [ 88.9862136, 23.2049929 ], [ 88.9859762, 23.2049703 ], [ 88.9865762, 23.2039398 ], [ 88.9868472, 23.2036202 ], [ 88.9872168, 23.2030394 ], [ 88.9874264, 23.2029266 ], [ 88.9870056, 23.2022739 ], [ 88.9866624, 23.2019835 ], [ 88.9863192, 23.2021947 ], [ 88.986108, 23.2025642 ], [ 88.9857912, 23.2029074 ], [ 88.9854216, 23.2029338 ], [ 88.9851576, 23.2029338 ], [ 88.9845241, 23.2022211 ], [ 88.9841281, 23.2015347 ], [ 88.9838905, 23.2006107 ], [ 88.9848409, 23.2003467 ], [ 88.9847617, 23.1992644 ], [ 88.9834681, 23.1991852 ], [ 88.9828346, 23.1978917 ], [ 88.9822802, 23.1968885 ], [ 88.9818578, 23.1963869 ], [ 88.9813826, 23.195595 ], [ 88.9820426, 23.1953838 ], [ 88.9821218, 23.194935 ], [ 88.9815674, 23.1947766 ], [ 88.9798515, 23.193615 ], [ 88.9801419, 23.1929815 ], [ 88.9809338, 23.1924535 ], [ 88.9806698, 23.1917407 ], [ 88.9803267, 23.1914503 ], [ 88.9796403, 23.1913183 ], [ 88.9792443, 23.1909488 ], [ 88.9790067, 23.1906584 ], [ 88.9794291, 23.189708 ], [ 88.9794291, 23.1892328 ], [ 88.9785579, 23.1884937 ], [ 88.97803, 23.1884937 ], [ 88.977898, 23.1880449 ], [ 88.9778452, 23.1875961 ], [ 88.9779772, 23.1869889 ], [ 88.9794027, 23.1869889 ], [ 88.9794027, 23.1867514 ], [ 88.9785843, 23.1866458 ], [ 88.9785051, 23.1858802 ], [ 88.978294, 23.1850882 ], [ 88.9783204, 23.1842435 ], [ 88.9785579, 23.1837155 ], [ 88.9790278, 23.1835439 ], [ 88.979899, 23.1835175 ], [ 88.9799518, 23.1825671 ], [ 88.9790014, 23.1825407 ], [ 88.9782623, 23.1827255 ], [ 88.9777871, 23.1829895 ], [ 88.9777018, 23.18385 ], [ 88.9771311, 23.1838151 ], [ 88.9770479, 23.1824615 ], [ 88.9764144, 23.1823823 ], [ 88.976388, 23.1819864 ], [ 88.9759315, 23.1819168 ], [ 88.975652, 23.1835822 ], [ 88.9756287, 23.1841994 ], [ 88.9753023, 23.1842536 ], [ 88.9752561, 23.185364 ], [ 88.9749096, 23.1868437 ], [ 88.9756752, 23.1868174 ], [ 88.9754904, 23.1881901 ], [ 88.9751208, 23.1903944 ], [ 88.9745928, 23.1903944 ], [ 88.9744608, 23.1915823 ], [ 88.9749888, 23.1916087 ], [ 88.9750152, 23.1922687 ], [ 88.9742233, 23.1923479 ], [ 88.9742761, 23.1928495 ], [ 88.969387, 23.1931399 ], [ 88.9660079, 23.1936678 ], [ 88.9658495, 23.1932983 ], [ 88.963896, 23.1933775 ], [ 88.9638432, 23.1930079 ], [ 88.9620826, 23.1931451 ], [ 88.9617841, 23.1914239 ], [ 88.9603744, 23.1913183 ], [ 88.9601632, 23.1905792 ], [ 88.9591337, 23.1905528 ], [ 88.9585793, 23.1905 ], [ 88.9585529, 23.1897344 ], [ 88.9578929, 23.1897344 ], [ 88.9577873, 23.1887049 ], [ 88.9579721, 23.1885465 ], [ 88.9576026, 23.1865138 ], [ 88.9581569, 23.1865666 ], [ 88.9582097, 23.185801 ], [ 88.9576818, 23.1856954 ], [ 88.9577082, 23.185009 ], [ 88.9569162, 23.184877 ], [ 88.9570482, 23.1832931 ], [ 88.9562826, 23.1832931 ], [ 88.9557282, 23.1820524 ], [ 88.9534315, 23.1820524 ], [ 88.9505171, 23.18229 ], [ 88.9504379, 23.1810756 ], [ 88.9458181, 23.1807852 ], [ 88.944683, 23.1781453 ], [ 88.9433366, 23.1780925 ], [ 88.9438646, 23.1763766 ], [ 88.938664, 23.1768782 ], [ 88.9377929, 23.1740667 ], [ 88.9382945, 23.1739347 ], [ 88.9383209, 23.1735123 ], [ 88.9374497, 23.1735123 ], [ 88.9373969, 23.172826 ], [ 88.9361562, 23.1728524 ], [ 88.936077, 23.1724828 ], [ 88.9348098, 23.1724828 ], [ 88.9348362, 23.1705821 ], [ 88.9343082, 23.1705557 ], [ 88.9340139, 23.1700379 ], [ 88.933792, 23.1695941 ], [ 88.9339584, 23.1691688 ], [ 88.933829, 23.1688175 ], [ 88.9333852, 23.1686141 ], [ 88.9326271, 23.1655446 ], [ 88.9329619, 23.1656587 ], [ 88.9337011, 23.1647347 ], [ 88.9337539, 23.1619365 ], [ 88.9311668, 23.1620949 ], [ 88.9311668, 23.162702 ], [ 88.9278036, 23.1635468 ], [ 88.9275396, 23.1606693 ], [ 88.9281995, 23.1605637 ], [ 88.9283843, 23.1610653 ], [ 88.9294139, 23.1609597 ], [ 88.9294403, 23.1605637 ], [ 88.9307338, 23.1601677 ], [ 88.930681, 23.1589138 ], [ 88.9300739, 23.158861 ], [ 88.9300475, 23.1578314 ], [ 88.930813, 23.1577258 ], [ 88.9307866, 23.1565907 ], [ 88.9316314, 23.1564851 ], [ 88.9316314, 23.1544788 ], [ 88.9322122, 23.1542676 ], [ 88.9318162, 23.1512845 ], [ 88.9317106, 23.148869 ], [ 88.9320274, 23.1487898 ], [ 88.9320538, 23.1474171 ], [ 88.9317543, 23.1473899 ], [ 88.9315916, 23.145408 ], [ 88.9312378, 23.1454865 ], [ 88.9312588, 23.1463695 ], [ 88.9306855, 23.1464065 ], [ 88.9306116, 23.1452971 ], [ 88.9312218, 23.1452231 ], [ 88.9303642, 23.1431933 ], [ 88.9299213, 23.1431555 ], [ 88.9291674, 23.1432583 ], [ 88.9282765, 23.1433782 ], [ 88.927574, 23.1435496 ], [ 88.9263576, 23.1440122 ], [ 88.9253981, 23.1444062 ], [ 88.9245072, 23.144766 ], [ 88.9236334, 23.1452458 ], [ 88.923325, 23.1454342 ], [ 88.9230782, 23.1455428 ], [ 88.9228891, 23.1450958 ], [ 88.922486, 23.1446523 ], [ 88.922365, 23.1444104 ], [ 88.9226875, 23.1441686 ], [ 88.9225666, 23.1436042 ], [ 88.9218006, 23.1430801 ], [ 88.920954, 23.1427172 ], [ 88.9202686, 23.1420319 ], [ 88.9197849, 23.1415884 ], [ 88.919543, 23.1409837 ], [ 88.919543, 23.1404193 ], [ 88.919422, 23.1398549 ], [ 88.9191398, 23.1391695 ], [ 88.9188173, 23.1382826 ], [ 88.918656, 23.1368716 ], [ 88.9196639, 23.1367103 ], [ 88.9194623, 23.1360653 ], [ 88.9197042, 23.1358234 ], [ 88.9197042, 23.1353396 ], [ 88.9193817, 23.135259 ], [ 88.9193817, 23.1347752 ], [ 88.9193414, 23.1342108 ], [ 88.9190189, 23.1338883 ], [ 88.918656, 23.133727 ], [ 88.9183738, 23.1324168 ], [ 88.91902, 23.1320798 ], [ 88.9187367, 23.1311267 ], [ 88.9177691, 23.1312073 ], [ 88.9176482, 23.1292722 ], [ 88.9163178, 23.1292722 ], [ 88.9158005, 23.129759 ], [ 88.9140601, 23.1298769 ], [ 88.9127297, 23.1299172 ], [ 88.9114639, 23.1300785 ], [ 88.9102645, 23.1298704 ], [ 88.9101335, 23.1275386 ], [ 88.9094507, 23.1272713 ], [ 88.9085461, 23.1268587 ], [ 88.9078955, 23.1258114 ], [ 88.9058801, 23.1251607 ], [ 88.9054903, 23.1234554 ], [ 88.9056738, 23.1232881 ], [ 88.9054675, 23.1220558 ], [ 88.9050941, 23.1220558 ], [ 88.9050135, 23.1215317 ], [ 88.9046506, 23.1205239 ], [ 88.9044518, 23.1200349 ], [ 88.9039599, 23.1188129 ], [ 88.9031023, 23.1191933 ], [ 88.902484, 23.1174323 ], [ 88.9018205, 23.1176005 ], [ 88.9013414, 23.1153692 ], [ 88.9009922, 23.1154811 ], [ 88.9005788, 23.1137509 ], [ 88.9002966, 23.1138316 ], [ 88.9002782, 23.1131951 ], [ 88.8999437, 23.1131657 ], [ 88.8998435, 23.1124319 ], [ 88.8997052, 23.1113257 ], [ 88.8991317, 23.1118185 ], [ 88.8983886, 23.1120365 ], [ 88.8976212, 23.1120285 ], [ 88.8973224, 23.1118508 ], [ 88.8969799, 23.1114388 ], [ 88.8967537, 23.1111723 ], [ 88.8964468, 23.1108653 ], [ 88.8961318, 23.1107119 ], [ 88.8956552, 23.1104857 ], [ 88.8952675, 23.1103242 ], [ 88.8948071, 23.1101949 ], [ 88.8943919, 23.1100172 ], [ 88.8939719, 23.1094357 ], [ 88.8935842, 23.1089106 ], [ 88.8930026, 23.1084018 ], [ 88.892408, 23.1081621 ], [ 88.8919413, 23.1079494 ], [ 88.8916101, 23.1078363 ], [ 88.8910286, 23.107796 ], [ 88.8902935, 23.1078525 ], [ 88.8897847, 23.1080464 ], [ 88.8894373, 23.1081271 ], [ 88.8889107, 23.1083371 ], [ 88.8883776, 23.1085875 ], [ 88.8876426, 23.1089268 ], [ 88.8870852, 23.1092095 ], [ 88.8866167, 23.1094437 ], [ 88.8862936, 23.1097426 ], [ 88.8860836, 23.1099526 ], [ 88.8857218, 23.1100455 ], [ 88.8852937, 23.1102716 ], [ 88.8846071, 23.1105786 ], [ 88.8841225, 23.1109098 ], [ 88.8837671, 23.1110713 ], [ 88.8834819, 23.1111604 ], [ 88.8831654, 23.1111936 ], [ 88.8827946, 23.1111359 ], [ 88.8824795, 23.1109905 ], [ 88.8821322, 23.1108371 ], [ 88.8819077, 23.1106934 ], [ 88.881688, 23.110522 ], [ 88.8815507, 23.1103524 ], [ 88.8814537, 23.1101263 ], [ 88.881373, 23.1098839 ], [ 88.8813326, 23.1096093 ], [ 88.8813326, 23.1093912 ], [ 88.8813083, 23.1092054 ], [ 88.8812841, 23.1090116 ], [ 88.8813164, 23.108842 ], [ 88.8814699, 23.1086723 ], [ 88.8815668, 23.1085027 ], [ 88.8815749, 23.1082846 ], [ 88.8815507, 23.1081069 ], [ 88.8815426, 23.1078808 ], [ 88.8816234, 23.10759 ], [ 88.881793, 23.1073638 ], [ 88.8819384, 23.1070811 ], [ 88.8821241, 23.1067378 ], [ 88.8822857, 23.1063582 ], [ 88.8825199, 23.1060997 ], [ 88.8828026, 23.1057443 ], [ 88.8830126, 23.105397 ], [ 88.8832469, 23.1050174 ], [ 88.8834246, 23.1046297 ], [ 88.8834971, 23.104498 ], [ 88.8829784, 23.1045058 ], [ 88.8820218, 23.104504 ], [ 88.8810776, 23.1046906 ], [ 88.8810776, 23.1042154 ], [ 88.8806817, 23.1042154 ], [ 88.8806817, 23.1046642 ], [ 88.8800217, 23.1047434 ], [ 88.8800217, 23.1052186 ], [ 88.8790449, 23.1052978 ], [ 88.8790449, 23.1044266 ], [ 88.8786226, 23.104453 ], [ 88.8785434, 23.1033971 ], [ 88.8777778, 23.1033971 ], [ 88.8777778, 23.104057 ], [ 88.8768274, 23.1041362 ], [ 88.8768274, 23.1047698 ], [ 88.8764314, 23.104717 ], [ 88.8754811, 23.1042682 ], [ 88.8752435, 23.1039514 ], [ 88.8751379, 23.1035555 ], [ 88.8743723, 23.1035555 ], [ 88.8743459, 23.1031331 ], [ 88.8752171, 23.1031859 ], [ 88.8750718, 23.1024506 ], [ 88.8738232, 23.1022883 ], [ 88.8722716, 23.1019767 ], [ 88.8722742, 23.1025506 ], [ 88.8714931, 23.1024216 ], [ 88.8714738, 23.1015491 ], [ 88.8699426, 23.1015227 ], [ 88.8698634, 23.1006252 ], [ 88.869573, 23.100678 ], [ 88.869573, 23.1010003 ], [ 88.8684233, 23.1011008 ], [ 88.8683515, 23.0998946 ], [ 88.8692299, 23.0999652 ], [ 88.8691771, 23.0988829 ], [ 88.8691507, 23.0984869 ], [ 88.8697314, 23.0984869 ], [ 88.8697314, 23.0978005 ], [ 88.8690187, 23.0978005 ], [ 88.8690407, 23.0974534 ], [ 88.8720281, 23.0975893 ], [ 88.8720545, 23.096045 ], [ 88.8732953, 23.095913 ], [ 88.873744, 23.0923756 ], [ 88.8747208, 23.0923756 ], [ 88.8746944, 23.0920324 ], [ 88.8737968, 23.0919796 ], [ 88.8742984, 23.0900525 ], [ 88.8736121, 23.0899997 ], [ 88.8735065, 23.0893397 ], [ 88.8726617, 23.0892341 ], [ 88.8716585, 23.0891681 ], [ 88.8716585, 23.0893402 ], [ 88.871008, 23.0893115 ], [ 88.8716111, 23.0883064 ], [ 88.8721568, 23.0872294 ], [ 88.870893, 23.087241 ], [ 88.8709194, 23.0874258 ], [ 88.8701802, 23.0874522 ], [ 88.8701321, 23.0860088 ], [ 88.8691412, 23.0861668 ], [ 88.8690979, 23.086454 ], [ 88.8681793, 23.0864336 ], [ 88.8680643, 23.0860088 ], [ 88.8669155, 23.0862529 ], [ 88.8664847, 23.0850754 ], [ 88.8662837, 23.0850754 ], [ 88.8661114, 23.0846734 ], [ 88.8659534, 23.0838405 ], [ 88.8659036, 23.0830436 ], [ 88.8659564, 23.0822516 ], [ 88.8659828, 23.0807733 ], [ 88.8646893, 23.0809845 ], [ 88.8646101, 23.0800077 ], [ 88.8634221, 23.0799813 ], [ 88.8634749, 23.0792421 ], [ 88.8650324, 23.0791893 ], [ 88.8650727, 23.0775893 ], [ 88.8611477, 23.0779722 ], [ 88.8609142, 23.077447 ], [ 88.8632538, 23.0769575 ], [ 88.8629469, 23.0762591 ], [ 88.8659564, 23.0751239 ], [ 88.8659564, 23.0745695 ], [ 88.8674611, 23.0737776 ], [ 88.8678571, 23.0735664 ], [ 88.8680786, 23.0717497 ], [ 88.8675617, 23.0724964 ], [ 88.8672763, 23.0733288 ], [ 88.866981, 23.0733731 ], [ 88.8667576, 23.071654 ], [ 88.8673319, 23.0714817 ], [ 88.8676987, 23.0704381 ], [ 88.8680648, 23.0697531 ], [ 88.8685292, 23.069483 ], [ 88.8687365, 23.0689164 ], [ 88.86893, 23.0687229 ], [ 88.8691926, 23.0683636 ], [ 88.8694137, 23.0680595 ], [ 88.8697454, 23.0676173 ], [ 88.8702015, 23.0675067 ], [ 88.870782, 23.0673547 ], [ 88.8723575, 23.0666084 ], [ 88.8739883, 23.0658621 ], [ 88.8738363, 23.0645215 ], [ 88.873629, 23.06202 ], [ 88.8749972, 23.0616883 ], [ 88.8744779, 23.0589678 ], [ 88.8743195, 23.0582287 ], [ 88.8739764, 23.0577007 ], [ 88.8737652, 23.0571727 ], [ 88.8745571, 23.0571463 ], [ 88.8745307, 23.0566183 ], [ 88.8742019, 23.0566183 ], [ 88.8742232, 23.0559502 ], [ 88.874883, 23.0558307 ], [ 88.8747305, 23.054753 ], [ 88.8746085, 23.0540413 ], [ 88.8744515, 23.0530809 ], [ 88.8747, 23.0530755 ], [ 88.8744459, 23.0519194 ], [ 88.8746627, 23.0519194 ], [ 88.8745307, 23.0508898 ], [ 88.8752435, 23.050837 ], [ 88.8742139, 23.0476427 ], [ 88.8750059, 23.0470092 ], [ 88.8747277, 23.0444367 ], [ 88.8753405, 23.0443336 ], [ 88.8759477, 23.0441503 ], [ 88.8762398, 23.0439785 ], [ 88.8766981, 23.0436806 ], [ 88.8771448, 23.0433369 ], [ 88.8773739, 23.0430849 ], [ 88.8779845, 23.042452 ], [ 88.8783282, 23.0420797 ], [ 88.878712, 23.0417532 ], [ 88.8790385, 23.0415011 ], [ 88.8795196, 23.0412491 ], [ 88.8799893, 23.0409971 ], [ 88.8803559, 23.0408252 ], [ 88.8807454, 23.0406763 ], [ 88.8812861, 23.0405961 ], [ 88.8816641, 23.0405102 ], [ 88.882214, 23.040367 ], [ 88.8826837, 23.0402983 ], [ 88.8831328, 23.040304 ], [ 88.88378, 23.0403326 ], [ 88.8840795, 23.0403456 ], [ 88.8839393, 23.0398023 ], [ 88.8839921, 23.0393271 ], [ 88.8838601, 23.0388519 ], [ 88.8838576, 23.0388372 ], [ 88.8837809, 23.0383768 ], [ 88.8837809, 23.0379544 ], [ 88.8837545, 23.0377696 ], [ 88.8837809, 23.0376904 ], [ 88.8843353, 23.0376376 ], [ 88.8840713, 23.0368984 ], [ 88.8835433, 23.037004 ], [ 88.8835433, 23.0374528 ], [ 88.8830417, 23.0374792 ], [ 88.8828041, 23.0367664 ], [ 88.8820122, 23.036872 ], [ 88.881801, 23.0352089 ], [ 88.8809826, 23.0346545 ], [ 88.8813522, 23.0344697 ], [ 88.8812994, 23.0335722 ], [ 88.8807186, 23.0335194 ], [ 88.8803226, 23.0327274 ], [ 88.8806658, 23.032701 ], [ 88.8805866, 23.0321466 ], [ 88.8797683, 23.0321466 ], [ 88.8804876, 23.0308049 ], [ 88.8808666, 23.0299711 ], [ 88.881009, 23.0286752 ], [ 88.8800329, 23.0267371 ], [ 88.8806957, 23.0259493 ], [ 88.8801644, 23.0250116 ], [ 88.8797684, 23.0251573 ], [ 88.8798675, 23.025793 ], [ 88.8789639, 23.025966 ], [ 88.8787651, 23.0252169 ], [ 88.8793049, 23.0251679 ], [ 88.8791875, 23.0246678 ], [ 88.8781797, 23.0248397 ], [ 88.8784454, 23.0259493 ], [ 88.8775431, 23.026098 ], [ 88.8774985, 23.0257496 ], [ 88.8775115, 23.0253329 ], [ 88.8774985, 23.024903 ], [ 88.8773552, 23.0244862 ], [ 88.8770947, 23.0239262 ], [ 88.8770426, 23.0235745 ], [ 88.8770296, 23.0231968 ], [ 88.8771077, 23.0228907 ], [ 88.8769775, 23.0226823 ], [ 88.8765607, 23.0226823 ], [ 88.8760527, 23.0226953 ], [ 88.8755838, 23.0225651 ], [ 88.8750889, 23.0223046 ], [ 88.8748545, 23.022005 ], [ 88.8746721, 23.0216664 ], [ 88.8744898, 23.0211845 ], [ 88.874198, 23.0206895 ], [ 88.8739245, 23.0201555 ], [ 88.8736379, 23.0197908 ], [ 88.8732342, 23.0194652 ], [ 88.8729607, 23.019348 ], [ 88.8727653, 23.0192568 ], [ 88.8725048, 23.0190354 ], [ 88.8724136, 23.018853 ], [ 88.8724527, 23.0186056 ], [ 88.8725308, 23.0182799 ], [ 88.8724918, 23.0179674 ], [ 88.8723615, 23.0175896 ], [ 88.8722052, 23.0172249 ], [ 88.8721531, 23.0169254 ], [ 88.8722573, 23.016717 ], [ 88.8724397, 23.0165477 ], [ 88.8727132, 23.0164435 ], [ 88.8729346, 23.0163653 ], [ 88.873143, 23.0162611 ], [ 88.8732081, 23.0160397 ], [ 88.8732733, 23.0157141 ], [ 88.8734035, 23.0155057 ], [ 88.8735728, 23.0152712 ], [ 88.8738333, 23.0150759 ], [ 88.8740547, 23.0148544 ], [ 88.8742892, 23.0146591 ], [ 88.8744585, 23.0144116 ], [ 88.8746278, 23.0142423 ], [ 88.8746539, 23.014099 ], [ 88.8746148, 23.0138515 ], [ 88.8745757, 23.0136301 ], [ 88.8745757, 23.0134087 ], [ 88.8745497, 23.0131742 ], [ 88.8745106, 23.0127835 ], [ 88.8745106, 23.0120932 ], [ 88.8744976, 23.0116243 ], [ 88.8743934, 23.0112205 ], [ 88.8743413, 23.0107777 ], [ 88.8743283, 23.010413 ], [ 88.8743283, 23.0102827 ], [ 88.8744846, 23.0101916 ], [ 88.8750837, 23.0100743 ], [ 88.8757089, 23.0100743 ], [ 88.8762689, 23.0101134 ], [ 88.8766597, 23.0101395 ], [ 88.8771833, 23.0102046 ], [ 88.8776131, 23.0102306 ], [ 88.878082, 23.0102046 ], [ 88.8784727, 23.0101785 ], [ 88.8787984, 23.0101134 ], [ 88.8791891, 23.0099181 ], [ 88.8795277, 23.0096706 ], [ 88.8797622, 23.009384 ], [ 88.8799836, 23.0090714 ], [ 88.8801139, 23.0087198 ], [ 88.880166, 23.0084853 ], [ 88.8801529, 23.0080816 ], [ 88.8801269, 23.007795 ], [ 88.8800487, 23.0073457 ], [ 88.8799706, 23.0069289 ], [ 88.8797752, 23.006447 ], [ 88.8796319, 23.005952 ], [ 88.8795277, 23.0054961 ], [ 88.8793975, 23.0051575 ], [ 88.8791761, 23.0047668 ], [ 88.8789547, 23.004389 ], [ 88.8786916, 23.004109 ], [ 88.878392, 23.0037834 ], [ 88.8779491, 23.0035229 ], [ 88.8776235, 23.0033015 ], [ 88.877324, 23.0031973 ], [ 88.8769853, 23.0031973 ], [ 88.8764773, 23.0032494 ], [ 88.8758261, 23.0033796 ], [ 88.8750316, 23.0037052 ], [ 88.8745367, 23.0039136 ], [ 88.8740157, 23.0040309 ], [ 88.8737421, 23.0041741 ], [ 88.8732029, 23.0044477 ], [ 88.8726298, 23.0046951 ], [ 88.872213, 23.0048775 ], [ 88.8717441, 23.0050598 ], [ 88.8712362, 23.0052552 ], [ 88.870598, 23.0054766 ], [ 88.8701421, 23.0055678 ], [ 88.8697123, 23.0057241 ], [ 88.8686156, 23.0059325 ], [ 88.8678341, 23.0060757 ], [ 88.8669615, 23.0061148 ], [ 88.8661279, 23.006193 ], [ 88.8654506, 23.006206 ], [ 88.8647472, 23.006232 ], [ 88.8641872, 23.0061799 ], [ 88.863127, 23.0061669 ], [ 88.8618896, 23.0061799 ], [ 88.8607304, 23.006206 ], [ 88.8597405, 23.006232 ], [ 88.859032, 23.0062711 ], [ 88.8582375, 23.0063753 ], [ 88.8572346, 23.0065056 ], [ 88.8565312, 23.0066358 ], [ 88.8557888, 23.006714 ], [ 88.8550021, 23.0068963 ], [ 88.8545072, 23.0070135 ], [ 88.853387, 23.0073131 ], [ 88.8525274, 23.0076387 ], [ 88.8518371, 23.0079122 ], [ 88.8507248, 23.0084853 ], [ 88.8500866, 23.00885 ], [ 88.8495786, 23.0092017 ], [ 88.8486929, 23.0098399 ], [ 88.8481719, 23.0102697 ], [ 88.84769, 23.0106995 ], [ 88.84713, 23.0110642 ], [ 88.8467262, 23.0111684 ], [ 88.8461922, 23.0112466 ], [ 88.8458145, 23.0111815 ], [ 88.8452804, 23.0109731 ], [ 88.8449809, 23.0104911 ], [ 88.8449548, 23.0101264 ], [ 88.8449027, 23.0096706 ], [ 88.8449027, 23.0092408 ], [ 88.8450981, 23.0087067 ], [ 88.8453456, 23.0081727 ], [ 88.8458145, 23.0073978 ], [ 88.846101, 23.0070331 ], [ 88.8466611, 23.0065121 ], [ 88.8471951, 23.0058999 ], [ 88.8477682, 23.005431 ], [ 88.8484845, 23.0047147 ], [ 88.8490706, 23.0041676 ], [ 88.8497818, 23.0034187 ], [ 88.8501074, 23.0030801 ], [ 88.8507456, 23.0026242 ], [ 88.8512145, 23.0022595 ], [ 88.8518527, 23.001986 ], [ 88.8525821, 23.0019078 ], [ 88.8529989, 23.0019469 ], [ 88.8535381, 23.0020902 ], [ 88.8544629, 23.0023376 ], [ 88.8554267, 23.002533 ], [ 88.8562864, 23.0026633 ], [ 88.8569636, 23.0027284 ], [ 88.8578467, 23.0028065 ], [ 88.8587715, 23.0028586 ], [ 88.8596181, 23.0029238 ], [ 88.8607512, 23.0028977 ], [ 88.8613764, 23.0028326 ], [ 88.8621631, 23.0026372 ], [ 88.8629576, 23.0023637 ], [ 88.8639736, 23.0019078 ], [ 88.8645336, 23.0015041 ], [ 88.8648749, 23.0011915 ], [ 88.8653177, 23.0009049 ], [ 88.8655261, 23.0005142 ], [ 88.8656043, 23.0003058 ], [ 88.8655195, 23.0000773 ], [ 88.8655195, 22.9994835 ], [ 88.8653074, 22.99872 ], [ 88.8650529, 22.9979565 ], [ 88.864756, 22.9971931 ], [ 88.8645439, 22.996472 ], [ 88.8643318, 22.9957933 ], [ 88.8641197, 22.9951147 ], [ 88.8638228, 22.9940543 ], [ 88.8638228, 22.9933332 ], [ 88.8638468, 22.9926829 ], [ 88.863908, 22.9918671 ], [ 88.8640508, 22.9906639 ], [ 88.8641731, 22.9898889 ], [ 88.8642751, 22.9892567 ], [ 88.8644586, 22.988441 ], [ 88.8646218, 22.9877476 ], [ 88.8647849, 22.986993 ], [ 88.8651928, 22.9861059 ], [ 88.8654783, 22.985127 ], [ 88.8659066, 22.9840257 ], [ 88.866702, 22.9828429 ], [ 88.8674361, 22.981966 ], [ 88.8683335, 22.9810482 ], [ 88.8692731, 22.9804583 ], [ 88.8700388, 22.9799819 ], [ 88.8705492, 22.9796927 ], [ 88.8708725, 22.9794204 ], [ 88.8710256, 22.9790972 ], [ 88.8711277, 22.978859 ], [ 88.8711447, 22.9785187 ], [ 88.8710256, 22.9781444 ], [ 88.8707194, 22.977736 ], [ 88.870345, 22.9773447 ], [ 88.8698346, 22.9768683 ], [ 88.869103, 22.9763068 ], [ 88.8684395, 22.9759325 ], [ 88.8677419, 22.9755242 ], [ 88.866755, 22.9749117 ], [ 88.8661425, 22.9745544 ], [ 88.8655811, 22.9743502 ], [ 88.8646963, 22.9739759 ], [ 88.8638796, 22.9736356 ], [ 88.86308, 22.9733634 ], [ 88.8623654, 22.9730571 ], [ 88.8616338, 22.9727679 ], [ 88.8609022, 22.9726488 ], [ 88.8601706, 22.9724446 ], [ 88.859456, 22.9720873 ], [ 88.8588264, 22.971679 ], [ 88.8584011, 22.9711345 ], [ 88.8580778, 22.970556 ], [ 88.8576014, 22.9699265 ], [ 88.8572271, 22.9690077 ], [ 88.8568017, 22.9682081 ], [ 88.8564955, 22.9672723 ], [ 88.8563253, 22.9665407 ], [ 88.8559425, 22.9656645 ], [ 88.8557384, 22.9645926 ], [ 88.8555002, 22.9635887 ], [ 88.855313, 22.9625849 ], [ 88.8551258, 22.9616661 ], [ 88.8550748, 22.9607473 ], [ 88.8549897, 22.9597095 ], [ 88.8549897, 22.9585865 ], [ 88.8551429, 22.9574976 ], [ 88.855279, 22.9565619 ], [ 88.8554321, 22.9557282 ], [ 88.8555852, 22.9548775 ], [ 88.8558915, 22.9540267 ], [ 88.8563168, 22.9530229 ], [ 88.8566571, 22.9520361 ], [ 88.8572186, 22.9509472 ], [ 88.8574908, 22.9502666 ], [ 88.857712, 22.9497392 ], [ 88.8579332, 22.9489905 ], [ 88.8582565, 22.9479612 ], [ 88.8583756, 22.9471955 ], [ 88.8585117, 22.9460896 ], [ 88.8585797, 22.945341 ], [ 88.8586818, 22.9443712 ], [ 88.858852, 22.9437417 ], [ 88.8591072, 22.9432482 ], [ 88.8595155, 22.9426868 ], [ 88.8598898, 22.9423465 ], [ 88.8602301, 22.9422614 ], [ 88.8606214, 22.9422784 ], [ 88.8609277, 22.9426187 ], [ 88.861268, 22.9432312 ], [ 88.8616253, 22.9442691 ], [ 88.8621187, 22.945341 ], [ 88.8627312, 22.9463789 ], [ 88.8634118, 22.9470594 ], [ 88.8643646, 22.9478591 ], [ 88.8651642, 22.9484716 ], [ 88.8659469, 22.9491352 ], [ 88.8665934, 22.9497817 ], [ 88.867325, 22.9503602 ], [ 88.8681077, 22.9508706 ], [ 88.8687542, 22.9511258 ], [ 88.8693157, 22.9512789 ], [ 88.869707, 22.951296 ], [ 88.8701239, 22.9511598 ], [ 88.8708555, 22.9505984 ], [ 88.8719104, 22.9499859 ], [ 88.8727611, 22.9493053 ], [ 88.8734416, 22.9485737 ], [ 88.8740882, 22.9482164 ], [ 88.8749899, 22.9482334 ], [ 88.8753642, 22.9482674 ], [ 88.8759512, 22.9485737 ], [ 88.8765637, 22.948982 ], [ 88.8770401, 22.9495435 ], [ 88.8775165, 22.950122 ], [ 88.8778058, 22.9507005 ], [ 88.878044, 22.9516533 ], [ 88.8781631, 22.9526061 ], [ 88.8782481, 22.9532441 ], [ 88.8785204, 22.9537715 ], [ 88.8789287, 22.9541118 ], [ 88.879337, 22.9542649 ], [ 88.8799496, 22.954282 ], [ 88.8806131, 22.9541799 ], [ 88.8813277, 22.9541118 ], [ 88.8822295, 22.9540778 ], [ 88.8833354, 22.9539417 ], [ 88.8846285, 22.9538566 ], [ 88.8858875, 22.9537375 ], [ 88.8870955, 22.9536184 ], [ 88.8878101, 22.9535844 ], [ 88.888882, 22.9534653 ], [ 88.890107, 22.9533292 ], [ 88.89123, 22.953108 ], [ 88.8921487, 22.9530059 ], [ 88.8927612, 22.9528357 ], [ 88.8934758, 22.9526486 ], [ 88.8939693, 22.9524104 ], [ 88.8942755, 22.9521041 ], [ 88.8944116, 22.9517639 ], [ 88.8944116, 22.9515086 ], [ 88.8942585, 22.9512024 ], [ 88.8939352, 22.9507855 ], [ 88.8934758, 22.950173 ], [ 88.8932887, 22.9495435 ], [ 88.8931526, 22.948982 ], [ 88.8930845, 22.9484546 ], [ 88.8929484, 22.947791 ], [ 88.8928803, 22.9471105 ], [ 88.8928463, 22.946515 ], [ 88.8927953, 22.9460301 ], [ 88.8926932, 22.9452474 ], [ 88.8925571, 22.9446349 ], [ 88.892523, 22.9439714 ], [ 88.8925571, 22.9431717 ], [ 88.8925911, 22.942406 ], [ 88.8926081, 22.9415723 ], [ 88.8927272, 22.9405685 ], [ 88.8927612, 22.9398199 ], [ 88.8927612, 22.9392924 ], [ 88.8926762, 22.9386629 ], [ 88.8925741, 22.9381185 ], [ 88.892455, 22.9376591 ], [ 88.8920977, 22.9372337 ], [ 88.8911789, 22.9367063 ], [ 88.8905154, 22.9362979 ], [ 88.8897327, 22.9359236 ], [ 88.8889926, 22.9356174 ], [ 88.888261, 22.9353281 ], [ 88.8874783, 22.9349368 ], [ 88.887087, 22.9346135 ], [ 88.887053, 22.9342392 ], [ 88.887087, 22.9336097 ], [ 88.8872401, 22.9331843 ], [ 88.8873763, 22.932776 ], [ 88.8875804, 22.9323421 ], [ 88.8879888, 22.9315595 ], [ 88.888312, 22.9307768 ], [ 88.8887034, 22.9299942 ], [ 88.8890266, 22.9292285 ], [ 88.889452, 22.9287351 ], [ 88.8901155, 22.9280035 ], [ 88.8905834, 22.9276292 ], [ 88.891298, 22.9272719 ], [ 88.8920467, 22.9269657 ], [ 88.8932376, 22.9267615 ], [ 88.8947859, 22.9264893 ], [ 88.8954155, 22.9262681 ], [ 88.8959004, 22.9260299 ], [ 88.8968872, 22.9256896 ], [ 88.89784, 22.9254514 ], [ 88.8986397, 22.9251281 ], [ 88.8999327, 22.9247028 ], [ 88.9008855, 22.9242774 ], [ 88.9018213, 22.9239712 ], [ 88.9027401, 22.9236139 ], [ 88.9036929, 22.9232225 ], [ 88.9045266, 22.9227461 ], [ 88.9051136, 22.9224824 ], [ 88.9057261, 22.9221421 ], [ 88.9063386, 22.9217848 ], [ 88.906866, 22.9213765 ], [ 88.9074955, 22.9207129 ], [ 88.9079549, 22.9201174 ], [ 88.9081591, 22.9196751 ], [ 88.9083122, 22.9191987 ], [ 88.9082442, 22.9186542 ], [ 88.9081931, 22.9180928 ], [ 88.907989, 22.9174973 ], [ 88.9076827, 22.9168337 ], [ 88.9072063, 22.9162893 ], [ 88.9067469, 22.9157278 ], [ 88.9060493, 22.9150812 ], [ 88.9054198, 22.9146729 ], [ 88.9048583, 22.9143837 ], [ 88.9041267, 22.9142646 ], [ 88.9034927, 22.9142411 ], [ 88.9018298, 22.9143837 ], [ 88.8997711, 22.9144347 ], [ 88.8988183, 22.9144857 ], [ 88.8974657, 22.9144857 ], [ 88.8968191, 22.9145028 ], [ 88.8960875, 22.9145538 ], [ 88.8957472, 22.9145198 ], [ 88.895509, 22.9142646 ], [ 88.8953559, 22.9137541 ], [ 88.8953899, 22.9130906 ], [ 88.895475, 22.9125972 ], [ 88.8957813, 22.911772 ], [ 88.8960535, 22.9112956 ], [ 88.8964959, 22.9106831 ], [ 88.8971764, 22.9101386 ], [ 88.897823, 22.9095772 ], [ 88.8986226, 22.9090327 ], [ 88.8993372, 22.9084542 ], [ 88.8996945, 22.908148 ], [ 88.9000688, 22.9077907 ], [ 88.9005282, 22.9074844 ], [ 88.9008345, 22.9071611 ], [ 88.9010387, 22.9069229 ], [ 88.9011918, 22.9065997 ], [ 88.9012598, 22.9062254 ], [ 88.9012939, 22.9058 ], [ 88.9012939, 22.9053406 ], [ 88.9012598, 22.9049493 ], [ 88.9012258, 22.9042517 ], [ 88.9011067, 22.9036052 ], [ 88.9010216, 22.9028565 ], [ 88.9008855, 22.9024142 ], [ 88.9006984, 22.9019378 ], [ 88.900307, 22.9011892 ], [ 88.8998817, 22.9004065 ], [ 88.8994393, 22.89976 ], [ 88.8991501, 22.8991985 ], [ 88.8987417, 22.8986881 ], [ 88.898495, 22.8984243 ], [ 88.9002351, 22.8974128 ], [ 88.9012626, 22.8970814 ], [ 88.9024226, 22.8966173 ], [ 88.9030524, 22.8959047 ], [ 88.903649, 22.8954738 ], [ 88.9042125, 22.8956396 ], [ 88.9049085, 22.895971 ], [ 88.9055051, 22.8962362 ], [ 88.9058366, 22.895739 ], [ 88.9062012, 22.8951755 ], [ 88.9063669, 22.894148 ], [ 88.9070961, 22.8938166 ], [ 88.9077921, 22.8939492 ], [ 88.9085545, 22.8940817 ], [ 88.9089191, 22.8937503 ], [ 88.908687, 22.8936509 ], [ 88.9081236, 22.8933526 ], [ 88.9077921, 22.8930874 ], [ 88.907527, 22.8926234 ], [ 88.9071292, 22.8915959 ], [ 88.9065658, 22.8908998 ], [ 88.9063006, 22.8901706 ], [ 88.9063006, 22.8892094 ], [ 88.9065326, 22.8885465 ], [ 88.9070961, 22.8879499 ], [ 88.9079247, 22.8880494 ], [ 88.9087533, 22.8879499 ], [ 88.9092837, 22.8875853 ], [ 88.9092837, 22.8873202 ], [ 88.9090185, 22.886823 ], [ 88.908455, 22.8867899 ], [ 88.9076596, 22.8867567 ], [ 88.9069304, 22.8866904 ], [ 88.9066652, 22.886359 ], [ 88.9068641, 22.8858949 ], [ 88.9076596, 22.8855304 ], [ 88.908223, 22.8854309 ], [ 88.9090185, 22.8855966 ], [ 88.9096814, 22.8856629 ], [ 88.910046, 22.8853315 ], [ 88.9101454, 22.8847514 ], [ 88.9099466, 22.8838897 ], [ 88.9098471, 22.8833262 ], [ 88.9098471, 22.8826965 ], [ 88.9101454, 22.8821661 ], [ 88.9108415, 22.8820336 ], [ 88.9115044, 22.8820667 ], [ 88.9125981, 22.8820336 ], [ 88.9132412, 22.8820004 ], [ 88.9135395, 22.8817021 ], [ 88.9137383, 22.8813375 ], [ 88.9134732, 22.8812712 ], [ 88.9125451, 22.8812712 ], [ 88.9116833, 22.8812712 ], [ 88.910921, 22.8812049 ], [ 88.9105896, 22.8808403 ], [ 88.910457, 22.8802769 ], [ 88.910689, 22.879846 ], [ 88.9112193, 22.879614 ], [ 88.9118822, 22.8794814 ], [ 88.9125783, 22.8792494 ], [ 88.9127771, 22.8789179 ], [ 88.9133075, 22.8789179 ], [ 88.9138046, 22.8795145 ], [ 88.914567, 22.8800117 ], [ 88.9154619, 22.8799454 ], [ 88.9162242, 22.880078 ], [ 88.9170528, 22.8796471 ], [ 88.9177489, 22.8789842 ], [ 88.9183455, 22.8786528 ], [ 88.9184449, 22.878023 ], [ 88.9185444, 22.8772275 ], [ 88.9189421, 22.8770287 ], [ 88.9194393, 22.8771281 ], [ 88.919837, 22.8777579 ], [ 88.9200359, 22.8781887 ], [ 88.9203342, 22.8789511 ], [ 88.9209308, 22.8795808 ], [ 88.9216268, 22.8799454 ], [ 88.9224886, 22.8800449 ], [ 88.9230521, 22.8803432 ], [ 88.9233172, 22.880542 ], [ 88.9234498, 22.8805752 ], [ 88.923947, 22.88031 ], [ 88.924179, 22.8797466 ], [ 88.9243447, 22.8788848 ], [ 88.9245436, 22.8779236 ], [ 88.9248088, 22.8773601 ], [ 88.9248949, 22.8767138 ], [ 88.9250275, 22.8761503 ], [ 88.9254252, 22.8756863 ], [ 88.926055, 22.8755869 ], [ 88.9269168, 22.8753217 ], [ 88.9273477, 22.8754211 ], [ 88.9279443, 22.875156 ], [ 88.9280106, 22.8744931 ], [ 88.9279111, 22.8736645 ], [ 88.9279774, 22.8732004 ], [ 88.9284414, 22.873101 ], [ 88.9289718, 22.873101 ], [ 88.9297672, 22.873101 ], [ 88.930397, 22.8732667 ], [ 88.9313913, 22.873797 ], [ 88.9319217, 22.873797 ], [ 88.9324851, 22.8739628 ], [ 88.9332475, 22.8743605 ], [ 88.9339766, 22.8747582 ], [ 88.9348053, 22.8746919 ], [ 88.9354682, 22.8746919 ], [ 88.9361642, 22.8745594 ], [ 88.9366945, 22.8744599 ], [ 88.9371586, 22.8744599 ], [ 88.9375563, 22.8744931 ], [ 88.9379872, 22.8746919 ], [ 88.9386501, 22.8747251 ], [ 88.9395119, 22.8747251 ], [ 88.9399759, 22.8747251 ], [ 88.9402742, 22.8748245 ], [ 88.9404731, 22.8752554 ], [ 88.9408377, 22.8759846 ], [ 88.9412354, 22.8766475 ], [ 88.9416, 22.8772773 ], [ 88.942243, 22.8781556 ], [ 88.9426076, 22.8794814 ], [ 88.9426407, 22.8802106 ], [ 88.9431802, 22.8800725 ], [ 88.9436205, 22.8801009 ], [ 88.9441461, 22.8802572 ], [ 88.9445864, 22.880527 ], [ 88.9450409, 22.8807259 ], [ 88.9452782, 22.8808118 ], [ 88.9454596, 22.8806485 ], [ 88.9456111, 22.8804801 ], [ 88.9459393, 22.8802276 ], [ 88.9461329, 22.879992 ], [ 88.9463602, 22.8797815 ], [ 88.946579, 22.879428 ], [ 88.946739, 22.8790577 ], [ 88.9469494, 22.8787968 ], [ 88.9471556, 22.8785779 ], [ 88.9473323, 22.8784012 ], [ 88.9475259, 22.8781655 ], [ 88.9477111, 22.8779635 ], [ 88.9479384, 22.8777951 ], [ 88.9481993, 22.8777615 ], [ 88.9483592, 22.8777531 ], [ 88.9485107, 22.8777531 ], [ 88.9486117, 22.8777531 ], [ 88.9488558, 22.8776605 ], [ 88.9490578, 22.8775931 ], [ 88.9492346, 22.8774416 ], [ 88.9493777, 22.8773322 ], [ 88.949546, 22.8771555 ], [ 88.949647, 22.877004 ], [ 88.9496891, 22.876743 ], [ 88.9497396, 22.8765242 ], [ 88.9497901, 22.8762212 ], [ 88.949748, 22.8759098 ], [ 88.9497143, 22.8755394 ], [ 88.9496638, 22.8752617 ], [ 88.9496217, 22.8748997 ], [ 88.9496049, 22.8745125 ], [ 88.9495881, 22.8742685 ], [ 88.9495881, 22.8739486 ], [ 88.9495881, 22.8736793 ], [ 88.9495965, 22.8734099 ], [ 88.9496386, 22.8731827 ], [ 88.9497059, 22.8729386 ], [ 88.9497648, 22.8727702 ], [ 88.9498658, 22.8725767 ], [ 88.9500678, 22.8723157 ], [ 88.9503119, 22.8721895 ], [ 88.9506402, 22.8721221 ], [ 88.9509432, 22.8720969 ], [ 88.9513178, 22.8720548 ], [ 88.951545, 22.8719201 ], [ 88.9515618, 22.871634 ], [ 88.9516124, 22.8713562 ], [ 88.9517386, 22.8709774 ], [ 88.9520332, 22.8705061 ], [ 88.952151, 22.8701357 ], [ 88.9523951, 22.8698832 ], [ 88.9527486, 22.8693698 ], [ 88.952938, 22.8691678 ], [ 88.9531148, 22.8688648 ], [ 88.9532915, 22.8684944 ], [ 88.9533673, 22.8681241 ], [ 88.9534851, 22.8676107 ], [ 88.953603, 22.8671814 ], [ 88.953704, 22.8668363 ], [ 88.953746, 22.8664996 ], [ 88.9537545, 22.8662555 ], [ 88.9537124, 22.8660788 ], [ 88.9535777, 22.8659104 ], [ 88.9534262, 22.8657674 ], [ 88.9532579, 22.8656327 ], [ 88.9531316, 22.8654223 ], [ 88.9530474, 22.8651698 ], [ 88.9529885, 22.8649762 ], [ 88.9529885, 22.8647531 ], [ 88.9529801, 22.8645679 ], [ 88.953039, 22.8643912 ], [ 88.9531148, 22.8642565 ], [ 88.9532326, 22.8641219 ], [ 88.9533673, 22.8640293 ], [ 88.9536703, 22.8639535 ], [ 88.9541753, 22.8640124 ], [ 88.9546382, 22.8640798 ], [ 88.9548318, 22.8640966 ], [ 88.9550633, 22.8641219 ], [ 88.9552485, 22.864105 ], [ 88.9554673, 22.8640124 ], [ 88.9557703, 22.8638609 ], [ 88.9560312, 22.8636926 ], [ 88.956309, 22.8635074 ], [ 88.9565868, 22.8633391 ], [ 88.9568308, 22.8631707 ], [ 88.9570665, 22.8630108 ], [ 88.9572854, 22.862792 ], [ 88.9574369, 22.86259 ], [ 88.9575968, 22.8623627 ], [ 88.9577272, 22.862127 ], [ 88.9578956, 22.8618409 ], [ 88.9580471, 22.861521 ], [ 88.9582238, 22.8612433 ], [ 88.9583585, 22.8609487 ], [ 88.9584427, 22.8607298 ], [ 88.9586026, 22.8604689 ], [ 88.9587415, 22.8602206 ], [ 88.958792, 22.8599681 ], [ 88.9587752, 22.8596903 ], [ 88.9587247, 22.8593705 ], [ 88.9586489, 22.859017 ], [ 88.9585563, 22.8586887 ], [ 88.9584553, 22.8584194 ], [ 88.9582786, 22.8579607 ], [ 88.9581691, 22.8575987 ], [ 88.9581186, 22.8573126 ], [ 88.9581523, 22.8570096 ], [ 88.9583206, 22.8567991 ], [ 88.9586236, 22.8565382 ], [ 88.9589772, 22.8562436 ], [ 88.9593475, 22.8558901 ], [ 88.959802, 22.8555871 ], [ 88.9599788, 22.8555492 ], [ 88.9604333, 22.8552883 ], [ 88.9609299, 22.8551284 ], [ 88.9612161, 22.8548338 ], [ 88.9615191, 22.8545055 ], [ 88.9618473, 22.8541773 ], [ 88.9622387, 22.8537059 ], [ 88.9625586, 22.853344 ], [ 88.9629373, 22.8529484 ], [ 88.9633245, 22.8524855 ], [ 88.9637369, 22.8520562 ], [ 88.9639979, 22.8517448 ], [ 88.9641746, 22.8514418 ], [ 88.9644776, 22.850962 ], [ 88.964747, 22.8505664 ], [ 88.96497, 22.8502045 ], [ 88.9652478, 22.8498257 ], [ 88.9655676, 22.8493291 ], [ 88.9660137, 22.8487652 ], [ 88.9663925, 22.8481592 ], [ 88.9667797, 22.8476289 ], [ 88.9671079, 22.8471996 ], [ 88.9673857, 22.8467956 ], [ 88.9676466, 22.8464505 ], [ 88.9679159, 22.846097 ], [ 88.9682358, 22.8457351 ], [ 88.9683704, 22.8454489 ], [ 88.968522, 22.8449691 ], [ 88.9685893, 22.8446661 ], [ 88.9686482, 22.8442369 ], [ 88.9686482, 22.8438455 ], [ 88.9685977, 22.8434583 ], [ 88.9685051, 22.8429365 ], [ 88.9684125, 22.8425661 ], [ 88.9682779, 22.8420106 ], [ 88.9681937, 22.8415982 ], [ 88.968059, 22.8409248 ], [ 88.9679833, 22.8405545 ], [ 88.9678486, 22.8399316 ], [ 88.9677728, 22.839536 ], [ 88.9676718, 22.8389637 ], [ 88.967554, 22.8385849 ], [ 88.9674025, 22.8380967 ], [ 88.9672426, 22.8376759 ], [ 88.9670911, 22.8372298 ], [ 88.9669227, 22.8368258 ], [ 88.9666871, 22.836144 ], [ 88.9665356, 22.8356726 ], [ 88.9663336, 22.8350498 ], [ 88.9662073, 22.8347299 ], [ 88.9660474, 22.8343175 ], [ 88.9659127, 22.833964 ], [ 88.9657444, 22.8333369 ], [ 88.9655087, 22.8327646 ], [ 88.9651889, 22.8320071 ], [ 88.9649027, 22.8314011 ], [ 88.9646838, 22.8309297 ], [ 88.9644482, 22.8303658 ], [ 88.9642714, 22.8297513 ], [ 88.9641115, 22.8291117 ], [ 88.9639431, 22.8285309 ], [ 88.9639389, 22.8281437 ], [ 88.9639558, 22.8278575 ], [ 88.9639726, 22.8274703 ], [ 88.9639305, 22.8269822 ], [ 88.9639221, 22.8265024 ], [ 88.9639305, 22.8259806 ], [ 88.9639305, 22.8257701 ], [ 88.9638969, 22.825122 ], [ 88.9638295, 22.8242972 ], [ 88.9638043, 22.8236322 ], [ 88.9637874, 22.8228158 ], [ 88.9637706, 22.8225044 ], [ 88.9636696, 22.822012 ], [ 88.9636275, 22.821549 ], [ 88.9635602, 22.8211282 ], [ 88.9634844, 22.8205727 ], [ 88.9633834, 22.8200592 ], [ 88.9632824, 22.81963 ], [ 88.9631646, 22.8193186 ], [ 88.9629962, 22.818822 ], [ 88.9627606, 22.8183254 ], [ 88.9625544, 22.8179213 ], [ 88.9622598, 22.8173742 ], [ 88.9618389, 22.8168019 ], [ 88.9615948, 22.8164316 ], [ 88.9612161, 22.8159181 ], [ 88.96077, 22.8153626 ], [ 88.9604165, 22.8149165 ], [ 88.9600545, 22.814563 ], [ 88.9597347, 22.8142852 ], [ 88.9592886, 22.8138896 ], [ 88.9589603, 22.8136876 ], [ 88.9585647, 22.8134141 ], [ 88.9581102, 22.8130942 ], [ 88.9575715, 22.8127071 ], [ 88.9570539, 22.8124882 ], [ 88.9566611, 22.8123536 ], [ 88.9566611, 22.8120811 ], [ 88.9566279, 22.8110868 ], [ 88.9565948, 22.8104239 ], [ 88.956429, 22.8096615 ], [ 88.956429, 22.8089655 ], [ 88.9566942, 22.8087666 ], [ 88.9576223, 22.8090981 ], [ 88.9585835, 22.8093632 ], [ 88.9593789, 22.8096284 ], [ 88.960075, 22.8095621 ], [ 88.9605722, 22.8092307 ], [ 88.9607379, 22.8086672 ], [ 88.9604064, 22.8080706 ], [ 88.9598771, 22.8069475 ], [ 88.9592462, 22.8057935 ], [ 88.9591693, 22.8044702 ], [ 88.9592924, 22.8023929 ], [ 88.959354, 22.8020544 ], [ 88.9592616, 22.8010696 ], [ 88.9591232, 22.8000233 ], [ 88.9594155, 22.7993463 ], [ 88.9599672, 22.7983757 ], [ 88.9598761, 22.7982265 ], [ 88.9594452, 22.7976962 ], [ 88.9591469, 22.7972985 ], [ 88.9591469, 22.7968345 ], [ 88.9583846, 22.7968676 ], [ 88.9573902, 22.7970996 ], [ 88.9562302, 22.7974642 ], [ 88.9552302, 22.7974229 ], [ 88.954107, 22.7974844 ], [ 88.9537223, 22.7975152 ], [ 88.9534791, 22.7974844 ], [ 88.9527837, 22.7974844 ], [ 88.9519213, 22.7974973 ], [ 88.9500226, 22.797635 ], [ 88.9497338, 22.7972653 ], [ 88.9492697, 22.7965361 ], [ 88.9483748, 22.7954755 ], [ 88.9474468, 22.7952766 ], [ 88.9468833, 22.7943154 ], [ 88.9459884, 22.7938514 ], [ 88.9457564, 22.7924925 ], [ 88.944815, 22.7925256 ], [ 88.9443842, 22.7922273 ], [ 88.9440196, 22.7917633 ], [ 88.9433898, 22.7913655 ], [ 88.9429258, 22.7908684 ], [ 88.9425612, 22.7910341 ], [ 88.9423623, 22.7914318 ], [ 88.9421205, 22.7915143 ], [ 88.941905, 22.7914989 ], [ 88.9415204, 22.7915604 ], [ 88.9411665, 22.7916528 ], [ 88.9409049, 22.7917605 ], [ 88.9406895, 22.7918528 ], [ 88.9403663, 22.7920682 ], [ 88.9401817, 22.792099 ], [ 88.9399047, 22.7922682 ], [ 88.9395354, 22.7925298 ], [ 88.9390075, 22.7927553 ], [ 88.9391141, 22.7921942 ], [ 88.9386832, 22.791929 ], [ 88.9378877, 22.7918296 ], [ 88.9371917, 22.7914981 ], [ 88.9369597, 22.7908021 ], [ 88.9366282, 22.7895426 ], [ 88.9364625, 22.7887139 ], [ 88.9363962, 22.788051 ], [ 88.9365288, 22.7871893 ], [ 88.9367277, 22.7859463 ], [ 88.9368603, 22.7848857 ], [ 88.9368934, 22.7840571 ], [ 88.937026, 22.7836262 ], [ 88.9369265, 22.782433 ], [ 88.9363631, 22.782433 ], [ 88.9350041, 22.782665 ], [ 88.9336121, 22.783129 ], [ 88.9327901, 22.7831953 ], [ 88.9317496, 22.7832514 ], [ 88.9312418, 22.7831129 ], [ 88.9306263, 22.7831899 ], [ 88.9301339, 22.7833284 ], [ 88.929807, 22.7832947 ], [ 88.929807, 22.7827313 ], [ 88.9301385, 22.7819689 ], [ 88.9305362, 22.7809083 ], [ 88.9295419, 22.7808752 ], [ 88.9284149, 22.78061 ], [ 88.9277189, 22.7805437 ], [ 88.926824, 22.7805768 ], [ 88.9258628, 22.7805768 ], [ 88.9251336, 22.7800134 ], [ 88.9259799, 22.7799408 ], [ 88.9259794, 22.7794893 ], [ 88.9262775, 22.7782792 ], [ 88.926518, 22.7772659 ], [ 88.9268257, 22.7763426 ], [ 88.9269027, 22.7759272 ], [ 88.9270885, 22.7754307 ], [ 88.9271796, 22.7750963 ], [ 88.927272, 22.7748347 ], [ 88.9273386, 22.7746052 ], [ 88.9274412, 22.7741731 ], [ 88.9274258, 22.7738345 ], [ 88.927195, 22.7727728 ], [ 88.9270228, 22.7720917 ], [ 88.9268873, 22.7714342 ], [ 88.9268257, 22.7708341 ], [ 88.9267026, 22.7702955 ], [ 88.9266411, 22.7697108 ], [ 88.9263795, 22.7693108 ], [ 88.9260256, 22.7692184 ], [ 88.9240714, 22.7695723 ], [ 88.9217881, 22.7700001 ], [ 88.9207921, 22.7701557 ], [ 88.9201697, 22.7701557 ], [ 88.9194227, 22.7702024 ], [ 88.9188625, 22.770109 ], [ 88.9182244, 22.7697044 ], [ 88.917537, 22.7688949 ], [ 88.9167616, 22.7675724 ], [ 88.916357, 22.7668566 ], [ 88.9156475, 22.7648993 ], [ 88.9152054, 22.7635575 ], [ 88.9150498, 22.7629661 ], [ 88.9150177, 22.7627117 ], [ 88.9148942, 22.7624059 ], [ 88.9147542, 22.7619235 ], [ 88.9146452, 22.7615189 ], [ 88.9144118, 22.7607875 ], [ 88.9141006, 22.7602895 ], [ 88.913261, 22.7594967 ], [ 88.9127314, 22.759242 ], [ 88.9123769, 22.7590647 ], [ 88.911741, 22.7576992 ], [ 88.9124342, 22.7567012 ], [ 88.9124342, 22.7560028 ], [ 88.9124092, 22.7552296 ], [ 88.9130078, 22.7550052 ], [ 88.9135316, 22.7550301 ], [ 88.9139057, 22.7547059 ], [ 88.9144295, 22.754207 ], [ 88.9149532, 22.753783 ], [ 88.9154022, 22.7543317 ], [ 88.9157138, 22.7546409 ], [ 88.9162751, 22.75508 ], [ 88.9169486, 22.75508 ], [ 88.9174474, 22.7549054 ], [ 88.9179712, 22.7547059 ], [ 88.9186446, 22.7542819 ], [ 88.919318, 22.7539826 ], [ 88.9200413, 22.7535586 ], [ 88.9204903, 22.7531096 ], [ 88.9209392, 22.7522367 ], [ 88.9210888, 22.751663 ], [ 88.9212136, 22.7513887 ], [ 88.9212634, 22.7510395 ], [ 88.9213881, 22.7503162 ], [ 88.9213881, 22.7497924 ], [ 88.9211518, 22.7490018 ], [ 88.9204268, 22.7484086 ], [ 88.9194971, 22.7482295 ], [ 88.9185419, 22.7479111 ], [ 88.9182683, 22.7474365 ], [ 88.9178564, 22.746415 ], [ 88.9177246, 22.7457724 ], [ 88.917428, 22.7450968 ], [ 88.917049, 22.744619 ], [ 88.9168513, 22.7440423 ], [ 88.9168348, 22.7433668 ], [ 88.9169337, 22.7426583 ], [ 88.917049, 22.7419827 ], [ 88.9166701, 22.7412742 ], [ 88.9163405, 22.7406316 ], [ 88.9162746, 22.7402691 ], [ 88.9161593, 22.7399066 ], [ 88.9161593, 22.7393959 ], [ 88.9161428, 22.7389675 ], [ 88.9161099, 22.7384072 ], [ 88.9159286, 22.737847 ], [ 88.9156815, 22.7372868 ], [ 88.9154035, 22.7365058 ], [ 88.9157968, 22.7355568 ], [ 88.9160275, 22.7348153 ], [ 88.9160402, 22.7339132 ], [ 88.9163359, 22.7333219 ], [ 88.9170637, 22.7327306 ], [ 88.9171546, 22.7324122 ], [ 88.9176092, 22.731454 ], [ 88.9177905, 22.7311575 ], [ 88.9181365, 22.7307455 ], [ 88.9183342, 22.7305314 ], [ 88.918845, 22.7303336 ], [ 88.9197347, 22.7299876 ], [ 88.920384, 22.7297514 ], [ 88.9209211, 22.7295592 ], [ 88.9215439, 22.729342 ], [ 88.9221807, 22.7290464 ], [ 88.9231131, 22.7285233 ], [ 88.9241365, 22.7277614 ], [ 88.9246141, 22.7276705 ], [ 88.924887, 22.7274658 ], [ 88.9252874, 22.7269724 ], [ 88.9257323, 22.7262474 ], [ 88.9259135, 22.7257037 ], [ 88.9258971, 22.7247974 ], [ 88.9257982, 22.7237264 ], [ 88.9258147, 22.7232321 ], [ 88.9259786, 22.7223715 ], [ 88.926479, 22.7213254 ], [ 88.9269565, 22.7204839 ], [ 88.9272977, 22.7199381 ], [ 88.9273432, 22.7193013 ], [ 88.9274341, 22.7185508 ], [ 88.9279402, 22.718009 ], [ 88.9285498, 22.7176795 ], [ 88.9293077, 22.717284 ], [ 88.9301405, 22.7168679 ], [ 88.9310047, 22.7164585 ], [ 88.9314823, 22.7162538 ], [ 88.9320281, 22.7158217 ], [ 88.9324713, 22.7156034 ], [ 88.9332786, 22.7149938 ], [ 88.9339048, 22.7146807 ], [ 88.9345968, 22.7143017 ], [ 88.9349428, 22.7141205 ], [ 88.9357337, 22.7136427 ], [ 88.9363928, 22.7132967 ], [ 88.9371013, 22.7129012 ], [ 88.9380075, 22.7124234 ], [ 88.9385347, 22.7120609 ], [ 88.9391279, 22.7117643 ], [ 88.9395728, 22.7115336 ], [ 88.9401198, 22.7111027 ], [ 88.9405519, 22.710898 ], [ 88.9415829, 22.7103473 ], [ 88.9423738, 22.7097212 ], [ 88.9429835, 22.709161 ], [ 88.9436085, 22.7085214 ], [ 88.944086, 22.7083622 ], [ 88.9451094, 22.7082031 ], [ 88.9457917, 22.7079756 ], [ 88.9461783, 22.7077482 ], [ 88.9467924, 22.7070432 ], [ 88.9469971, 22.7067475 ], [ 88.9474519, 22.7061335 ], [ 88.9479067, 22.7051783 ], [ 88.9483161, 22.7051101 ], [ 88.948771, 22.7051783 ], [ 88.9491348, 22.7055422 ], [ 88.9495215, 22.7058151 ], [ 88.9501446, 22.7062245 ], [ 88.9507359, 22.7065883 ], [ 88.9513044, 22.7062927 ], [ 88.9521687, 22.7057241 ], [ 88.9524416, 22.7054967 ], [ 88.9530783, 22.7051783 ], [ 88.9538743, 22.7047917 ], [ 88.9544656, 22.7044961 ], [ 88.9550342, 22.7042686 ], [ 88.9555345, 22.7041322 ], [ 88.9558074, 22.7038593 ], [ 88.9562395, 22.7032225 ], [ 88.9568536, 22.7023583 ], [ 88.9572629, 22.7017101 ], [ 88.9576041, 22.7012553 ], [ 88.9576268, 22.7010051 ], [ 88.9576495, 22.7001637 ], [ 88.9580597, 22.6998022 ], [ 88.9583563, 22.6994232 ], [ 88.9586364, 22.6991266 ], [ 88.958933, 22.6986818 ], [ 88.9595826, 22.6982533 ], [ 88.9602877, 22.6978894 ], [ 88.9605151, 22.6973436 ], [ 88.9608335, 22.6967523 ], [ 88.9609927, 22.696252 ], [ 88.9613338, 22.6957744 ], [ 88.9617204, 22.6953878 ], [ 88.9619751, 22.6947282 ], [ 88.9621343, 22.6941597 ], [ 88.9620661, 22.6933864 ], [ 88.9620434, 22.6929771 ], [ 88.9618842, 22.6923858 ], [ 88.9616795, 22.6919992 ], [ 88.9617505, 22.6915638 ], [ 88.9617175, 22.6908718 ], [ 88.9614521, 22.6904299 ], [ 88.9613611, 22.6900433 ], [ 88.9613838, 22.6893383 ], [ 88.9613611, 22.6888607 ], [ 88.9609745, 22.6885878 ], [ 88.9607698, 22.6882239 ], [ 88.9607243, 22.6878828 ], [ 88.9606333, 22.6874393 ], [ 88.9607784, 22.6871316 ], [ 88.9610585, 22.6867855 ], [ 88.9613715, 22.6864395 ], [ 88.9617175, 22.6861429 ], [ 88.9622778, 22.6856322 ], [ 88.9622942, 22.6852532 ], [ 88.9620141, 22.6849896 ], [ 88.961421, 22.6849566 ], [ 88.9601557, 22.6848467 ], [ 88.9586364, 22.6849401 ], [ 88.9576541, 22.6850059 ], [ 88.9568239, 22.6851049 ], [ 88.9561814, 22.6851873 ], [ 88.9551433, 22.6850287 ], [ 88.954682, 22.6845612 ], [ 88.9541218, 22.684001 ], [ 88.9532979, 22.6830124 ], [ 88.9527871, 22.6822874 ], [ 88.9518974, 22.6812823 ], [ 88.9509912, 22.6806232 ], [ 88.9502003, 22.6805903 ], [ 88.949673, 22.6802443 ], [ 88.9491293, 22.6792062 ], [ 88.9487668, 22.6784483 ], [ 88.9482725, 22.6778881 ], [ 88.9480748, 22.6774432 ], [ 88.9479594, 22.6768336 ], [ 88.9480583, 22.6761415 ], [ 88.9481242, 22.6754825 ], [ 88.948256, 22.6749552 ], [ 88.9483055, 22.6742962 ], [ 88.9480748, 22.6735382 ], [ 88.9476958, 22.6724508 ], [ 88.9475475, 22.6718741 ], [ 88.9473382, 22.671099 ], [ 88.9472927, 22.670485 ], [ 88.9467696, 22.6697799 ], [ 88.9463148, 22.6690522 ], [ 88.9462953, 22.6684139 ], [ 88.9461305, 22.667689 ], [ 88.9460152, 22.6671947 ], [ 88.9460481, 22.6662555 ], [ 88.9459163, 22.6656623 ], [ 88.9456362, 22.6649373 ], [ 88.9453891, 22.664476 ], [ 88.9452078, 22.6639982 ], [ 88.9451419, 22.6632238 ], [ 88.9449936, 22.6625976 ], [ 88.9446182, 22.6624456 ], [ 88.943754, 22.6622636 ], [ 88.9430494, 22.6619056 ], [ 88.9429999, 22.6615267 ], [ 88.942967, 22.6611477 ], [ 88.9429999, 22.6607523 ], [ 88.9427198, 22.660192 ], [ 88.9422585, 22.6597142 ], [ 88.9416818, 22.6594341 ], [ 88.9410249, 22.6596255 ], [ 88.9404625, 22.6597966 ], [ 88.9399023, 22.6600602 ], [ 88.9392738, 22.6602396 ], [ 88.9386171, 22.6601426 ], [ 88.9381558, 22.6599943 ], [ 88.9377768, 22.6598296 ], [ 88.9373907, 22.65958 ], [ 88.9368706, 22.6593847 ], [ 88.9362991, 22.6592616 ], [ 88.9360632, 22.6590057 ], [ 88.935882, 22.6586597 ], [ 88.9357831, 22.6582807 ], [ 88.9357666, 22.6578688 ], [ 88.9358161, 22.6574899 ], [ 88.9359149, 22.6566166 ], [ 88.9359479, 22.6561058 ], [ 88.9359479, 22.6557104 ], [ 88.9358161, 22.6553643 ], [ 88.9355195, 22.6550019 ], [ 88.9345934, 22.6547132 ], [ 88.9339111, 22.6546222 ], [ 88.9334108, 22.6543493 ], [ 88.9332289, 22.6539627 ], [ 88.932956, 22.6532349 ], [ 88.9327513, 22.6526664 ], [ 88.9324784, 22.6520978 ], [ 88.9320463, 22.6517112 ], [ 88.931364, 22.6516657 ], [ 88.9309092, 22.6518704 ], [ 88.9301587, 22.6528711 ], [ 88.9297948, 22.6534624 ], [ 88.9293172, 22.6538262 ], [ 88.9289306, 22.653758 ], [ 88.9285167, 22.6534624 ], [ 88.9268534, 22.6520653 ], [ 88.9273629, 22.6503013 ], [ 88.9276668, 22.6488585 ], [ 88.9280259, 22.6478323 ], [ 88.9284877, 22.6469601 ], [ 88.929206, 22.6458314 ], [ 88.9300782, 22.6449591 ], [ 88.9310017, 22.6428555 ], [ 88.931207, 22.6413676 ], [ 88.9316174, 22.639264 ], [ 88.931874, 22.637417 ], [ 88.9322844, 22.636083 ], [ 88.9324383, 22.6350056 ], [ 88.932541, 22.6341333 ], [ 88.9324897, 22.6329533 ], [ 88.9329514, 22.6311575 ], [ 88.9329514, 22.6290712 ], [ 88.9333835, 22.6274565 ], [ 88.9332079, 22.6259242 ], [ 88.9333619, 22.6246928 ], [ 88.9335671, 22.6228971 ], [ 88.9336697, 22.6205883 ], [ 88.9345419, 22.6189977 ], [ 88.9362351, 22.6182794 ], [ 88.9379282, 22.6180742 ], [ 88.9395187, 22.6180742 ], [ 88.941571, 22.6179203 ], [ 88.9428307, 22.6184051 ], [ 88.9438996, 22.6181549 ], [ 88.9449002, 22.6181095 ], [ 88.946753, 22.6182794 ], [ 88.9478818, 22.6188438 ], [ 88.9499341, 22.619203 ], [ 88.9517601, 22.6200551 ], [ 88.9533903, 22.620549 ], [ 88.9550698, 22.6206478 ], [ 88.9564529, 22.6201539 ], [ 88.9578361, 22.6195611 ], [ 88.958824, 22.6187213 ], [ 88.9594662, 22.6177334 ], [ 88.9600096, 22.6166466 ], [ 88.9600416, 22.6155088 ], [ 88.9598877, 22.6142775 ], [ 88.9598363, 22.6135592 ], [ 88.9597337, 22.6128409 ], [ 88.9596311, 22.6119687 ], [ 88.9591694, 22.6111477 ], [ 88.9587589, 22.6102755 ], [ 88.9584511, 22.6096085 ], [ 88.9578354, 22.6087363 ], [ 88.957271, 22.608018 ], [ 88.956604, 22.6072997 ], [ 88.9554254, 22.6064768 ], [ 88.95422, 22.6052487 ], [ 88.9531739, 22.6042935 ], [ 88.9518548, 22.6031109 ], [ 88.9499217, 22.6018373 ], [ 88.9482069, 22.6004956 ], [ 88.9467287, 22.5992447 ], [ 88.9454779, 22.5980735 ], [ 88.9439087, 22.5969136 ], [ 88.9426578, 22.595822 ], [ 88.9415889, 22.5948214 ], [ 88.9403745, 22.5932976 ], [ 88.9394876, 22.5919786 ], [ 88.9391237, 22.59141 ], [ 88.9385551, 22.5901137 ], [ 88.9383732, 22.5893177 ], [ 88.9382822, 22.5884308 ], [ 88.9382595, 22.587885 ], [ 88.9383277, 22.5870207 ], [ 88.9384869, 22.5859973 ], [ 88.9385551, 22.5848147 ], [ 88.9387371, 22.5834275 ], [ 88.93901, 22.5822221 ], [ 88.9394648, 22.5804255 ], [ 88.9402608, 22.5788563 ], [ 88.9405038, 22.5769515 ], [ 88.9409143, 22.5749506 ], [ 88.9410682, 22.5736679 ], [ 88.9411708, 22.5725904 ], [ 88.9410682, 22.5717695 ], [ 88.9410682, 22.5707947 ], [ 88.9411708, 22.5698198 ], [ 88.9410682, 22.5691529 ], [ 88.9410169, 22.5680754 ], [ 88.9410169, 22.5671519 ], [ 88.9410682, 22.5660231 ], [ 88.9409656, 22.5652022 ], [ 88.9409143, 22.5639708 ], [ 88.9409143, 22.5633552 ], [ 88.9412221, 22.5619186 ], [ 88.9414274, 22.5612516 ], [ 88.94153, 22.5602767 ], [ 88.9421457, 22.5591993 ], [ 88.9426587, 22.5579166 ], [ 88.944044, 22.5567878 ], [ 88.9459424, 22.5557104 ], [ 88.948025, 22.555318 ], [ 88.949435, 22.5545675 ], [ 88.9506404, 22.5540899 ], [ 88.9516865, 22.5536123 ], [ 88.9529146, 22.5532257 ], [ 88.9541973, 22.5529983 ], [ 88.9556528, 22.5528163 ], [ 88.9566897, 22.5527353 ], [ 88.9578456, 22.5522728 ], [ 88.9586665, 22.5521189 ], [ 88.9594875, 22.5517597 ], [ 88.9600005, 22.5511441 ], [ 88.9606162, 22.5502718 ], [ 88.9614371, 22.5489892 ], [ 88.9623607, 22.5473473 ], [ 88.963079, 22.5459107 ], [ 88.963746, 22.5442176 ], [ 88.9643328, 22.5424351 ], [ 88.9649987, 22.5408181 ], [ 88.9656645, 22.5392961 ], [ 88.9661401, 22.5376791 ], [ 88.9667108, 22.5360621 ], [ 88.9671864, 22.5341597 ], [ 88.9677479, 22.532263 ], [ 88.9687478, 22.530165 ], [ 88.9693846, 22.5280841 ], [ 88.9699076, 22.5256734 ], [ 88.9705672, 22.52324 ], [ 88.9713631, 22.5211932 ], [ 88.9717725, 22.5198514 ], [ 88.9724775, 22.5174066 ], [ 88.9728414, 22.5158601 ], [ 88.9731143, 22.5143591 ], [ 88.9732053, 22.5129946 ], [ 88.9732508, 22.5119257 ], [ 88.9734554, 22.509822 ], [ 88.9735692, 22.5077297 ], [ 88.9736829, 22.5052281 ], [ 88.9737738, 22.5028515 ], [ 88.9738875, 22.500782 ], [ 88.9750273, 22.4974125 ], [ 88.9763859, 22.4943008 ], [ 88.9780513, 22.4913644 ], [ 88.9792785, 22.4887348 ], [ 88.9799797, 22.4868065 ], [ 88.9811192, 22.4843522 ], [ 88.9822148, 22.4825992 ], [ 88.9837049, 22.4809995 ], [ 88.985195, 22.4793341 ], [ 88.9873863, 22.4774496 ], [ 88.9890517, 22.4764416 ], [ 88.9904191, 22.475565 ], [ 88.9920845, 22.4744255 ], [ 88.9940129, 22.4729793 ], [ 88.9953277, 22.4714454 ], [ 88.9959412, 22.4705031 ], [ 88.9962042, 22.4694074 ], [ 88.9963357, 22.4679173 ], [ 88.996248, 22.4659451 ], [ 88.9958974, 22.463973 ], [ 88.995686, 22.4619409 ], [ 88.9948945, 22.4593026 ], [ 88.994789, 22.4579835 ], [ 88.9948945, 22.4564005 ], [ 88.9945779, 22.4554507 ], [ 88.9941558, 22.4542899 ], [ 88.9933643, 22.4528652 ], [ 88.9925728, 22.4516516 ], [ 88.9918341, 22.4505435 ], [ 88.990726, 22.4488022 ], [ 88.9903039, 22.4478524 ], [ 88.9899873, 22.4470082 ], [ 88.9897763, 22.4462695 ], [ 88.989829, 22.4448976 ], [ 88.9900866, 22.4440925 ], [ 88.9902511, 22.4435784 ], [ 88.9913592, 22.4417844 ], [ 88.9925728, 22.4401486 ], [ 88.9939252, 22.4381593 ], [ 88.9953277, 22.4369321 ], [ 88.9969054, 22.4355735 ], [ 88.9978109, 22.4346096 ], [ 88.998264, 22.4341272 ], [ 88.9991844, 22.4329877 ], [ 89.0000609, 22.4320236 ], [ 89.0003686, 22.4315207 ], [ 89.0003686, 22.4307803 ], [ 89.0000865, 22.4295816 ], [ 88.9996211, 22.4287901 ], [ 88.9988812, 22.4281981 ], [ 88.9977466, 22.4278529 ], [ 88.9966121, 22.4275076 ], [ 88.995083, 22.4269156 ], [ 88.9927646, 22.4259784 ], [ 88.9906435, 22.4249425 ], [ 88.9888677, 22.4235614 ], [ 88.9879304, 22.4227228 ], [ 88.9867466, 22.4215882 ], [ 88.9858094, 22.4201577 ], [ 88.9846255, 22.4185793 ], [ 88.9834416, 22.4174447 ], [ 88.9823564, 22.4163595 ], [ 88.9812712, 22.4157676 ], [ 88.97989, 22.415225 ], [ 88.9782129, 22.4144851 ], [ 88.9767331, 22.4139918 ], [ 88.9747106, 22.4130546 ], [ 88.9730335, 22.4121667 ], [ 88.9723429, 22.4112788 ], [ 88.9722936, 22.4105389 ], [ 88.9725402, 22.4095523 ], [ 88.9724416, 22.4084178 ], [ 88.9727375, 22.4072832 ], [ 88.9742174, 22.4057048 ], [ 88.9762398, 22.4039783 ], [ 88.9779663, 22.4023505 ], [ 88.97989, 22.40092 ], [ 88.9820045, 22.398847 ], [ 88.9832316, 22.3977514 ], [ 88.9848093, 22.3967434 ], [ 88.9861241, 22.3957792 ], [ 88.9872636, 22.3949027 ], [ 88.9886222, 22.394048 ], [ 88.9896741, 22.393303 ], [ 88.9907914, 22.3927316 ], [ 88.9915314, 22.3920903 ], [ 88.992074, 22.3911531 ], [ 88.9921726, 22.3900186 ], [ 88.991778, 22.3886867 ], [ 88.991482, 22.3875029 ], [ 88.9907421, 22.3861217 ], [ 88.9896569, 22.3845925 ], [ 88.9888183, 22.3836553 ], [ 88.9875852, 22.3822248 ], [ 88.9865986, 22.3808436 ], [ 88.9850694, 22.3793145 ], [ 88.9845762, 22.3783773 ], [ 88.9841322, 22.3775387 ], [ 88.9836389, 22.3761575 ], [ 88.9832937, 22.374727 ], [ 88.9832937, 22.3737898 ], [ 88.9834416, 22.3730992 ], [ 88.9836883, 22.3725566 ], [ 88.9841815, 22.371866 ], [ 88.9850694, 22.3706328 ], [ 88.985908, 22.3697449 ], [ 88.9870919, 22.3685611 ], [ 88.9878318, 22.3678211 ], [ 88.988621, 22.3668839 ], [ 88.9891143, 22.365996 ], [ 88.9894103, 22.3652561 ], [ 88.9895089, 22.3644175 ], [ 88.9894103, 22.3633817 ], [ 88.9886661, 22.3623178 ], [ 88.9882278, 22.3613974 ], [ 88.9874827, 22.3602579 ], [ 88.9868254, 22.3592938 ], [ 88.9865186, 22.3585487 ], [ 88.9864309, 22.3575845 ], [ 88.9864309, 22.3564889 ], [ 88.9865493, 22.3554399 ], [ 88.9869439, 22.3543547 ], [ 88.9873878, 22.3531708 ], [ 88.9879304, 22.3522336 ], [ 88.9883251, 22.3512964 ], [ 88.988621, 22.3503098 ], [ 88.9887975, 22.348644 ], [ 88.9882278, 22.3459706 ], [ 88.9877019, 22.3440422 ], [ 88.9872636, 22.3422891 ], [ 88.9866939, 22.340317 ], [ 88.9864747, 22.3393089 ], [ 88.986168, 22.3378627 ], [ 88.9860365, 22.3364602 ], [ 88.9857297, 22.3349263 ], [ 88.9852668, 22.3337851 ], [ 88.9850694, 22.3323053 ], [ 88.9848721, 22.3304308 ], [ 88.9847242, 22.3290496 ], [ 88.9847242, 22.3279151 ], [ 88.9847735, 22.3269779 ], [ 88.9847735, 22.3261886 ], [ 88.9850694, 22.3253007 ], [ 88.98576, 22.3246595 ], [ 88.9868452, 22.3238702 ], [ 88.9880784, 22.323081 ], [ 88.9896076, 22.3222424 ], [ 88.9908408, 22.3221438 ], [ 88.991953, 22.3225673 ], [ 88.993487, 22.3230056 ], [ 88.9951085, 22.3235753 ], [ 88.9962918, 22.3241889 ], [ 88.9973261, 22.324408 ], [ 88.9981803, 22.324386 ], [ 88.9992651, 22.3242134 ], [ 89.0001526, 22.3237696 ], [ 89.0012127, 22.3229067 ], [ 89.0021989, 22.3220685 ], [ 89.003407, 22.3207865 ], [ 89.0046397, 22.3195537 ], [ 89.0064148, 22.3181731 ], [ 89.0077215, 22.3170883 ], [ 89.0089295, 22.3160035 ], [ 89.0102115, 22.3148818 ], [ 89.0108525, 22.3144133 ], [ 89.0116168, 22.3136244 ], [ 89.0123071, 22.3125396 ], [ 89.0128495, 22.3114548 ], [ 89.0137716, 22.3099879 ], [ 89.0143386, 22.3090017 ], [ 89.0151522, 22.307843 ], [ 89.0161877, 22.3067336 ], [ 89.0170753, 22.3055748 ], [ 89.0179628, 22.3046133 ], [ 89.0190723, 22.3035778 ], [ 89.0202803, 22.3024067 ], [ 89.0211679, 22.3016178 ], [ 89.0221294, 22.3008042 ], [ 89.022795, 22.3002125 ], [ 89.0233867, 22.2994975 ], [ 89.0240524, 22.2987086 ], [ 89.024225, 22.297969 ], [ 89.0242743, 22.297328 ], [ 89.0243236, 22.2964651 ], [ 89.0243729, 22.2958241 ], [ 89.024225, 22.2950105 ], [ 89.0238552, 22.2944927 ], [ 89.0232635, 22.2941229 ], [ 89.0228937, 22.2939503 ], [ 89.0221294, 22.2939257 ], [ 89.0210939, 22.293901 ], [ 89.0200584, 22.293975 ], [ 89.0191216, 22.2942462 ], [ 89.0177656, 22.2947146 ], [ 89.0166315, 22.2951091 ], [ 89.0155467, 22.2955282 ], [ 89.0146296, 22.2958487 ], [ 89.0129284, 22.2966623 ], [ 89.0112519, 22.2972294 ], [ 89.0099206, 22.2975006 ], [ 89.0086632, 22.2976978 ], [ 89.0075045, 22.2977964 ], [ 89.0063951, 22.2977964 ], [ 89.0051377, 22.2978211 ], [ 89.0038557, 22.2976485 ], [ 89.0023468, 22.2974759 ], [ 89.0010402, 22.297254 ], [ 89.0000293, 22.2969828 ], [ 88.9987966, 22.296613 ], [ 88.99722, 22.2958069 ], [ 88.9961497, 22.2951647 ], [ 88.9954647, 22.2943513 ], [ 88.9951222, 22.2934094 ], [ 88.9949937, 22.2925103 ], [ 88.9950366, 22.2915256 ], [ 88.9950366, 22.2904553 ], [ 88.995165, 22.2889996 ], [ 88.9954647, 22.2877581 ], [ 88.9956788, 22.286859 ], [ 88.9959784, 22.2857459 ], [ 88.9966635, 22.2850608 ], [ 88.9971772, 22.2845043 ], [ 88.9987227, 22.2828929 ], [ 89.0001033, 22.2817342 ], [ 89.0012127, 22.2808713 ], [ 89.0023222, 22.2800084 ], [ 89.0038014, 22.2791702 ], [ 89.0050095, 22.2782333 ], [ 89.0068536, 22.2770622 ], [ 89.0078398, 22.2764212 ], [ 89.0085794, 22.2759281 ], [ 89.0096149, 22.2752378 ], [ 89.0108476, 22.2744242 ], [ 89.0125734, 22.273512 ], [ 89.0141266, 22.2727477 ], [ 89.0154826, 22.2719835 ], [ 89.0159855, 22.2717862 ], [ 89.0168978, 22.2712685 ], [ 89.0177853, 22.2707261 ], [ 89.0186975, 22.2699372 ], [ 89.0191166, 22.2691975 ], [ 89.0194125, 22.2684826 ], [ 89.0194618, 22.2679402 ], [ 89.0194618, 22.2672745 ], [ 89.0193878, 22.2664363 ], [ 89.0191906, 22.2658692 ], [ 89.0185989, 22.2652035 ], [ 89.0183497, 22.2642776 ], [ 89.0178202, 22.2637481 ], [ 89.0174084, 22.2632186 ], [ 89.0168789, 22.2626891 ], [ 89.0163494, 22.2621596 ], [ 89.0158787, 22.2614536 ], [ 89.0151139, 22.2605711 ], [ 89.0145255, 22.2597474 ], [ 89.0138195, 22.2591003 ], [ 89.0135253, 22.2582766 ], [ 89.0131723, 22.2573941 ], [ 89.0132312, 22.2560409 ], [ 89.0138783, 22.2550996 ], [ 89.0145844, 22.2543936 ], [ 89.0151227, 22.253801 ], [ 89.0165847, 22.2533346 ], [ 89.0175849, 22.2535699 ], [ 89.018585, 22.2539229 ], [ 89.0200559, 22.2546289 ], [ 89.0215856, 22.2553349 ], [ 89.0227622, 22.2561586 ], [ 89.0237624, 22.2565704 ], [ 89.0251156, 22.2574529 ], [ 89.026222, 22.2586332 ], [ 89.0271835, 22.2591016 ], [ 89.0278985, 22.2594221 ], [ 89.0285641, 22.2596933 ], [ 89.0295996, 22.2599892 ], [ 89.0301173, 22.2600385 ], [ 89.0309802, 22.2600138 ], [ 89.0315719, 22.2598166 ], [ 89.0323855, 22.2592249 ], [ 89.0331498, 22.2585099 ], [ 89.0335689, 22.2572033 ], [ 89.0339387, 22.2561185 ], [ 89.0342099, 22.2549104 ], [ 89.0344072, 22.2534558 ], [ 89.0347523, 22.2514958 ], [ 89.0348509, 22.2508795 ], [ 89.035535, 22.248376 ], [ 89.0357788, 22.245938 ], [ 89.0359007, 22.2433781 ], [ 89.0362055, 22.2411229 ], [ 89.0366321, 22.2379535 ], [ 89.0369369, 22.2360031 ], [ 89.0373635, 22.233687 ], [ 89.0380949, 22.2309442 ], [ 89.0390092, 22.2292986 ], [ 89.0396187, 22.2282015 ], [ 89.0405329, 22.2267387 ], [ 89.0424224, 22.2244226 ], [ 89.0433367, 22.2233255 ], [ 89.0444947, 22.2221065 ], [ 89.0460185, 22.2207656 ], [ 89.0472375, 22.2199123 ], [ 89.0485784, 22.2188761 ], [ 89.050224, 22.2172914 ], [ 89.0519306, 22.215402 ], [ 89.053881, 22.2135125 ], [ 89.056991, 22.2116054 ], [ 89.0598744, 22.2088181 ], [ 89.062085, 22.2067997 ], [ 89.0635267, 22.2052618 ], [ 89.0649685, 22.2036279 ], [ 89.0663141, 22.2023784 ], [ 89.0675636, 22.2011289 ], [ 89.0685247, 22.1997833 ], [ 89.0694858, 22.1986299 ], [ 89.07008096217794, 22.197805865932086 ], [ 89.0675849, 22.1967564 ], [ 89.0678463, 22.1957237 ], [ 89.0681188, 22.1954628 ], [ 89.0689138, 22.1931366 ], [ 89.0691636, 22.1913319 ], [ 89.0684131, 22.1872236 ], [ 89.0678605, 22.1872308 ], [ 89.0675617, 22.1856904 ], [ 89.067009, 22.1856974 ], [ 89.0668629, 22.1851845 ], [ 89.0665828, 22.1849306 ], [ 89.0662952, 22.1841621 ], [ 89.0657352, 22.1836547 ], [ 89.0652986, 22.182116 ], [ 89.0647461, 22.182123 ], [ 89.0643124, 22.1808418 ], [ 89.0637524, 22.1803341 ], [ 89.0634647, 22.1795657 ], [ 89.0630451, 22.1791845 ], [ 89.062769, 22.179188 ], [ 89.0602937, 22.1799913 ], [ 89.0583859, 22.181817 ], [ 89.0567357, 22.1823527 ], [ 89.0561907, 22.1828741 ], [ 89.0550913, 22.1832746 ], [ 89.0549601, 22.183791 ], [ 89.0538699, 22.184834 ], [ 89.053679216796866, 22.186209479796215 ], [ 89.0536197, 22.1866388 ], [ 89.053879216796872, 22.189362163651179 ], [ 89.0541096, 22.1917798 ], [ 89.0546677, 22.1921584 ], [ 89.0555042, 22.1926626 ], [ 89.0563313, 22.1925239 ], [ 89.0563237, 22.1920092 ], [ 89.058521, 22.1910803 ], [ 89.0607276, 22.1907949 ], [ 89.0612821, 22.1909172 ], [ 89.0617074, 22.1916838 ], [ 89.0620175, 22.1939962 ], [ 89.0616091, 22.1943869 ], [ 89.0599606, 22.1950516 ], [ 89.059292, 22.1966042 ], [ 89.0588835, 22.1969949 ], [ 89.0575057, 22.1972697 ], [ 89.0572332, 22.1975305 ], [ 89.0561317, 22.1978019 ], [ 89.0555866, 22.1983234 ], [ 89.0544851, 22.1985948 ], [ 89.053879216796872, 22.199174471801907 ], [ 89.0538032, 22.1992472 ], [ 89.0535868, 22.2033676 ], [ 89.0529021, 22.2037618 ], [ 89.0523568, 22.2042835 ], [ 89.0512515, 22.2042975 ], [ 89.0501351, 22.2035394 ], [ 89.0488817, 22.2029123 ], [ 89.0487365, 22.2023993 ], [ 89.0476258, 22.2020268 ], [ 89.0467968, 22.2020372 ], [ 89.04666, 22.202168 ], [ 89.0464135, 22.20423 ], [ 89.0456144, 22.206299 ], [ 89.0449333, 22.2069504 ], [ 89.0438354, 22.2074791 ], [ 89.043559, 22.2074825 ], [ 89.0432791, 22.2072287 ], [ 89.0424481, 22.2071109 ], [ 89.0420183, 22.2060867 ], [ 89.0410461, 22.2057125 ], [ 89.0355231, 22.2060391 ], [ 89.0344252, 22.2065675 ], [ 89.0337431, 22.20722 ], [ 89.0337505, 22.2077344 ], [ 89.0340344, 22.2082457 ], [ 89.0343477, 22.2108153 ], [ 89.0340864, 22.2118482 ], [ 89.0339505, 22.211978 ], [ 89.0333995, 22.2121141 ], [ 89.0332684, 22.2126305 ], [ 89.0317694, 22.2140642 ], [ 89.0312204, 22.2143284 ], [ 89.0306675, 22.2143352 ], [ 89.0295549, 22.2138344 ], [ 89.027344, 22.213862 ], [ 89.0266583, 22.214257 ], [ 89.0262534, 22.2149051 ], [ 89.0229408, 22.2152037 ], [ 89.0190609, 22.2144798 ], [ 89.0187808, 22.2142258 ], [ 89.01767, 22.213854 ], [ 89.0176626, 22.2133394 ], [ 89.0171079, 22.2132171 ], [ 89.0166874, 22.2128369 ], [ 89.0163963, 22.211811 ], [ 89.0161164, 22.2115571 ], [ 89.0163597, 22.2092377 ], [ 89.0171739, 22.2081982 ], [ 89.0179919, 22.207416 ], [ 89.018396, 22.2066388 ], [ 89.0175687, 22.2067773 ], [ 89.0167471, 22.2073022 ], [ 89.0153727, 22.207834 ], [ 89.0148274, 22.2083555 ], [ 89.0134493, 22.2086299 ], [ 89.0126277, 22.2091548 ], [ 89.0112478, 22.209301 ], [ 89.0112552, 22.2098157 ], [ 89.0093207, 22.2098395 ], [ 89.0093281, 22.2103541 ], [ 89.0068464, 22.2107703 ], [ 89.0062937, 22.2107773 ], [ 89.0057447, 22.2110414 ], [ 89.0004941, 22.211106 ], [ 89.0002196, 22.2112385 ], [ 88.9999376, 22.2108556 ], [ 88.9971669, 22.2103747 ], [ 88.996887, 22.2101209 ], [ 88.9955016, 22.2098805 ], [ 88.9952215, 22.2096265 ], [ 88.9932763, 22.2088782 ], [ 88.9924362, 22.2081164 ], [ 88.9904911, 22.2073681 ], [ 88.990211, 22.2071143 ], [ 88.9896583, 22.2071209 ], [ 88.9893784, 22.2068671 ], [ 88.9888239, 22.2067456 ], [ 88.9888167, 22.2062309 ], [ 88.9877095, 22.2061153 ], [ 88.9863168, 22.2053602 ], [ 88.9841063, 22.2053872 ], [ 88.9832807, 22.2056547 ], [ 88.9807972, 22.2059423 ], [ 88.9788702, 22.2064804 ], [ 88.9769466, 22.2072759 ], [ 88.9766738, 22.2075365 ], [ 88.9747483, 22.2082039 ], [ 88.9747557, 22.2087185 ], [ 88.9731029, 22.2091241 ], [ 88.972966, 22.2092549 ], [ 88.9728356, 22.2097713 ], [ 88.9722847, 22.2099062 ], [ 88.971739, 22.2104275 ], [ 88.9711883, 22.2105634 ], [ 88.9707912, 22.211855 ], [ 88.9697001, 22.2128977 ], [ 88.9694346, 22.213673 ], [ 88.9686162, 22.2144551 ], [ 88.9680815, 22.2157484 ], [ 88.9678088, 22.216009 ], [ 88.9675502, 22.217299 ], [ 88.967012, 22.2183351 ], [ 88.9664879, 22.2204003 ], [ 88.9664986, 22.2211723 ], [ 88.9662331, 22.2219476 ], [ 88.9662439, 22.2227195 ], [ 88.965709, 22.2240128 ], [ 88.966102, 22.2248203 ], [ 88.9536435, 22.2252885 ], [ 88.9538047, 22.2217066 ], [ 88.954248, 22.2209564 ], [ 88.9548373, 22.2174522 ], [ 88.9550887, 22.2156477 ], [ 88.9553544, 22.2148724 ], [ 88.9553437, 22.2141003 ], [ 88.9556094, 22.213325 ], [ 88.9558821, 22.2130644 ], [ 88.9558715, 22.2122923 ], [ 88.9561371, 22.2115171 ], [ 88.95641, 22.2112564 ], [ 88.9571996, 22.208416 ], [ 88.9577381, 22.2073799 ], [ 88.9577309, 22.2068652 ], [ 88.9585457, 22.2058259 ], [ 88.9598846, 22.2027214 ], [ 88.9604266, 22.2019427 ], [ 88.960685, 22.2006528 ], [ 88.961227, 22.1998741 ], [ 88.9612163, 22.1991022 ], [ 88.9614818, 22.1983269 ], [ 88.9617296, 22.196265 ], [ 88.9615633, 22.1942079 ], [ 88.9610106, 22.1942147 ], [ 88.9608613, 22.1934443 ], [ 88.9601584, 22.1925515 ], [ 88.9596022, 22.1923009 ], [ 88.9587625, 22.1915388 ], [ 88.9582064, 22.1912882 ], [ 88.9515712, 22.1911104 ], [ 88.9485353, 22.1914043 ], [ 88.9482624, 22.1916649 ], [ 88.9463301, 22.191817 ], [ 88.9463371, 22.1923317 ], [ 88.942194, 22.1925093 ], [ 88.941358, 22.1920047 ], [ 88.9409377, 22.1916241 ], [ 88.9403709, 22.1906014 ], [ 88.9404813, 22.1885411 ], [ 88.9410339, 22.1885345 ], [ 88.9410269, 22.1880198 ], [ 88.9415796, 22.1880132 ], [ 88.9419865, 22.1874937 ], [ 88.942118, 22.1869773 ], [ 88.9426688, 22.1868416 ], [ 88.9432144, 22.1863203 ], [ 88.9437651, 22.1861856 ], [ 88.9437582, 22.1856707 ], [ 88.9445835, 22.1854037 ], [ 88.9449868, 22.1846267 ], [ 88.9449763, 22.1838546 ], [ 88.9442806, 22.1834765 ], [ 88.9420632, 22.1829883 ], [ 88.9409579, 22.1830013 ], [ 88.9401254, 22.1827539 ], [ 88.9390203, 22.1827671 ], [ 88.9384641, 22.1825163 ], [ 88.9376351, 22.1825262 ], [ 88.9354106, 22.1815231 ], [ 88.9347107, 22.1808885 ], [ 88.934566, 22.1803753 ], [ 88.9340133, 22.180382 ], [ 88.9332974, 22.1785889 ], [ 88.9330177, 22.1783349 ], [ 88.9325826, 22.1767957 ], [ 88.9320282, 22.1766732 ], [ 88.9309249, 22.1768153 ], [ 88.9309319, 22.17733 ], [ 88.9298319, 22.1777288 ], [ 88.9292864, 22.1782499 ], [ 88.9281881, 22.1787777 ], [ 88.9276427, 22.1792988 ], [ 88.9257085, 22.1793217 ], [ 88.9248761, 22.1790743 ], [ 88.9240385, 22.1784411 ], [ 88.9199408, 22.1717978 ], [ 88.9207591, 22.1710159 ], [ 88.9202929, 22.1671608 ], [ 88.9197402, 22.1671673 ], [ 88.9194395, 22.1653691 ], [ 88.9186089, 22.1652499 ], [ 88.9150192, 22.1654213 ], [ 88.915026, 22.1659359 ], [ 88.9133719, 22.1662126 ], [ 88.9133789, 22.1667273 ], [ 88.9114518, 22.1672648 ], [ 88.9114588, 22.1677794 ], [ 88.9109081, 22.167914 ], [ 88.9100861, 22.1684385 ], [ 88.9096765, 22.1688297 ], [ 88.9095458, 22.1693461 ], [ 88.908995, 22.1694808 ], [ 88.9085887, 22.1701295 ], [ 88.908043, 22.1706505 ], [ 88.907501, 22.171429 ], [ 88.907235, 22.1722043 ], [ 88.9068262, 22.1725948 ], [ 88.9062755, 22.1727303 ], [ 88.9061507, 22.1737613 ], [ 88.9057419, 22.1741516 ], [ 88.9049166, 22.1744186 ], [ 88.9045068, 22.1748101 ], [ 88.9041067, 22.1758443 ], [ 88.9027287, 22.1761176 ], [ 88.902597, 22.1766339 ], [ 88.9024611, 22.1767637 ], [ 88.8988831, 22.177835 ], [ 88.8963965, 22.1778639 ], [ 88.8944554, 22.1773718 ], [ 88.8933398, 22.1766127 ], [ 88.8927871, 22.1766192 ], [ 88.8922311, 22.1763682 ], [ 88.8913919, 22.1756057 ], [ 88.8905562, 22.1751007 ], [ 88.8900018, 22.1749788 ], [ 88.8898563, 22.1744659 ], [ 88.8884577, 22.1731952 ], [ 88.8870349, 22.170123 ], [ 88.8867552, 22.169869 ], [ 88.8863105, 22.1675577 ], [ 88.8865524, 22.1649811 ], [ 88.8866866, 22.1647222 ], [ 88.8866798, 22.1642075 ], [ 88.8874981, 22.1634258 ], [ 88.8880302, 22.1618755 ], [ 88.8891215, 22.1608333 ], [ 88.8895191, 22.1595417 ], [ 88.8900667, 22.1591489 ], [ 88.8906174, 22.1590142 ], [ 88.8907482, 22.158498 ], [ 88.8921054, 22.1566806 ], [ 88.8929238, 22.1558989 ], [ 88.894281, 22.1540815 ], [ 88.8946786, 22.15279 ], [ 88.8960443, 22.1516154 ], [ 88.8965951, 22.1514808 ], [ 88.8965849, 22.1507088 ], [ 88.8976811, 22.1500522 ], [ 88.898232, 22.1499174 ], [ 88.898225, 22.1494028 ], [ 88.8987775, 22.1493964 ], [ 88.8987707, 22.1488817 ], [ 88.899318, 22.1484888 ], [ 88.8998688, 22.1483542 ], [ 88.9005242, 22.1457728 ], [ 88.9005104, 22.1447434 ], [ 88.9007763, 22.1439681 ], [ 88.9012666, 22.1393296 ], [ 88.9023403, 22.1370008 ], [ 88.902613, 22.1367402 ], [ 88.9028756, 22.1357077 ], [ 88.9034176, 22.1349292 ], [ 88.9044981, 22.133115 ], [ 88.9047709, 22.1328543 ], [ 88.9047641, 22.1323397 ], [ 88.9050368, 22.132079 ], [ 88.9061105, 22.1297502 ], [ 88.9069287, 22.1289685 ], [ 88.9077434, 22.1279294 ], [ 88.9078716, 22.1271558 ], [ 88.908424, 22.1271494 ], [ 88.9085546, 22.126633 ], [ 88.9093728, 22.1258513 ], [ 88.9095046, 22.125335 ], [ 88.910057, 22.1253285 ], [ 88.91005, 22.1248139 ], [ 88.9108752, 22.1245468 ], [ 88.9111409, 22.1237715 ], [ 88.9116934, 22.1237651 ], [ 88.9121001, 22.1232456 ], [ 88.9122318, 22.1227294 ], [ 88.9127841, 22.1227228 ], [ 88.91305, 22.1219475 ], [ 88.913875, 22.1216805 ], [ 88.914551, 22.120643 ], [ 88.9146828, 22.1201269 ], [ 88.915235, 22.1201203 ], [ 88.9164599, 22.118819 ], [ 88.9165881, 22.1180454 ], [ 88.9171405, 22.118039 ], [ 88.9175473, 22.1175194 ], [ 88.917813, 22.1167441 ], [ 88.9180857, 22.1164835 ], [ 88.9186208, 22.1151904 ], [ 88.9197115, 22.114148 ], [ 88.9205191, 22.1125943 ], [ 88.9213371, 22.1118126 ], [ 88.921872, 22.1105194 ], [ 88.9224174, 22.1099982 ], [ 88.9224104, 22.1094835 ], [ 88.9232214, 22.1081872 ], [ 88.923211, 22.1074151 ], [ 88.9234802, 22.1068972 ], [ 88.9237213, 22.1043206 ], [ 88.9231237, 22.1009817 ], [ 88.9222813, 22.0999621 ], [ 88.9221298, 22.0989343 ], [ 88.9215775, 22.0989409 ], [ 88.9214216, 22.0976557 ], [ 88.9211418, 22.0974017 ], [ 88.9204293, 22.0957366 ], [ 88.9198754, 22.0956149 ], [ 88.9197264, 22.0948445 ], [ 88.9183178, 22.092802 ], [ 88.9181734, 22.0922891 ], [ 88.9176193, 22.0921664 ], [ 88.9171959, 22.0915283 ], [ 88.9162178, 22.0906385 ], [ 88.915386, 22.0903909 ], [ 88.9144104, 22.0897593 ], [ 88.9142711, 22.0896319 ], [ 88.9137189, 22.0896383 ], [ 88.9134392, 22.0893843 ], [ 88.9112199, 22.0886381 ], [ 88.910105, 22.0878789 ], [ 88.9095527, 22.0878854 ], [ 88.9081617, 22.0871295 ], [ 88.9076094, 22.087136 ], [ 88.9070606, 22.0873998 ], [ 88.905958, 22.0875418 ], [ 88.9059648, 22.0880564 ], [ 88.904315, 22.0885905 ], [ 88.9043218, 22.0891052 ], [ 88.9026703, 22.08951 ], [ 88.9021249, 22.0900311 ], [ 88.8971581, 22.0903461 ], [ 88.8964724, 22.0907406 ], [ 88.8962065, 22.0915159 ], [ 88.8965136, 22.0938288 ], [ 88.8962685, 22.0961481 ], [ 88.8959958, 22.0964085 ], [ 88.895865, 22.0969249 ], [ 88.8953127, 22.0969313 ], [ 88.8951812, 22.0974476 ], [ 88.8944964, 22.0978411 ], [ 88.8917435, 22.098517 ], [ 88.8917503, 22.0990316 ], [ 88.8906509, 22.0994299 ], [ 88.8902447, 22.1000785 ], [ 88.890562, 22.1031634 ], [ 88.8908417, 22.1034176 ], [ 88.8911351, 22.1047011 ], [ 88.8914146, 22.1049553 ], [ 88.8920391, 22.1103529 ], [ 88.8926497, 22.1147215 ], [ 88.8925259, 22.1157523 ], [ 88.8923942, 22.1162686 ], [ 88.891718, 22.117306 ], [ 88.8913169, 22.1183401 ], [ 88.8904987, 22.1191218 ], [ 88.8891555, 22.1219685 ], [ 88.8884757, 22.1227485 ], [ 88.8882099, 22.1235238 ], [ 88.8863738, 22.1237253 ], [ 88.885731, 22.1240671 ], [ 88.8848988, 22.1238194 ], [ 88.88406, 22.1230569 ], [ 88.8840532, 22.1225423 ], [ 88.8843294, 22.1225391 ], [ 88.8843328, 22.1227963 ], [ 88.8849907, 22.1236485 ], [ 88.8858145, 22.1238939 ], [ 88.8862765, 22.1235461 ], [ 88.8873795, 22.1234041 ], [ 88.8879251, 22.1228831 ], [ 88.8882222, 22.1221875 ], [ 88.8888758, 22.1217143 ], [ 88.888869, 22.1211996 ], [ 88.8891417, 22.1209392 ], [ 88.8899463, 22.1191282 ], [ 88.8912045, 22.1179115 ], [ 88.8914348, 22.1167944 ], [ 88.8917111, 22.1167912 ], [ 88.8918417, 22.1162751 ], [ 88.8921043, 22.1152425 ], [ 88.8914626, 22.108558 ], [ 88.8908726, 22.1057336 ], [ 88.8894369, 22.1016321 ], [ 88.8894265, 22.1008602 ], [ 88.8896958, 22.1003424 ], [ 88.8898208, 22.0993114 ], [ 88.8906407, 22.098658 ], [ 88.8917401, 22.0982596 ], [ 88.8917333, 22.0977449 ], [ 88.8933883, 22.0975966 ], [ 88.8936611, 22.0973361 ], [ 88.8950366, 22.0969345 ], [ 88.8954401, 22.0961577 ], [ 88.8954331, 22.0956429 ], [ 88.8957024, 22.095125 ], [ 88.8956646, 22.0922944 ], [ 88.8949525, 22.0906291 ], [ 88.8941241, 22.0906387 ], [ 88.8902445, 22.0896542 ], [ 88.8896854, 22.0891458 ], [ 88.8885739, 22.088644 ], [ 88.8874558, 22.0876274 ], [ 88.886624, 22.0873796 ], [ 88.8852264, 22.0861088 ], [ 88.8832867, 22.0856164 ], [ 88.8816265, 22.0853781 ], [ 88.8788686, 22.0856673 ], [ 88.8785959, 22.0859277 ], [ 88.8774948, 22.0861978 ], [ 88.877222, 22.0864582 ], [ 88.8755687, 22.0867347 ], [ 88.8752959, 22.0869952 ], [ 88.8733664, 22.0872747 ], [ 88.8717165, 22.0878084 ], [ 88.8714437, 22.0880689 ], [ 88.8697955, 22.0887317 ], [ 88.8698023, 22.0892463 ], [ 88.868154, 22.0899082 ], [ 88.8678813, 22.0901687 ], [ 88.8670595, 22.0906928 ], [ 88.866514, 22.0912138 ], [ 88.8659635, 22.0913494 ], [ 88.8659703, 22.091864 ], [ 88.8645946, 22.0922652 ], [ 88.8637764, 22.0930468 ], [ 88.8626785, 22.0935741 ], [ 88.862133, 22.094095 ], [ 88.8613113, 22.0946192 ], [ 88.8607607, 22.0947546 ], [ 88.8607709, 22.0955266 ], [ 88.8596713, 22.0959249 ], [ 88.8593986, 22.0961853 ], [ 88.858848, 22.0963206 ], [ 88.858858, 22.0970927 ], [ 88.8583075, 22.0972273 ], [ 88.8573489, 22.0978819 ], [ 88.8569435, 22.0985297 ], [ 88.8563929, 22.098665 ], [ 88.8563997, 22.0991798 ], [ 88.855849, 22.0993142 ], [ 88.8544851, 22.1006166 ], [ 88.8539361, 22.1008802 ], [ 88.8535297, 22.1015287 ], [ 88.8524386, 22.1025707 ], [ 88.8510812, 22.1043877 ], [ 88.8510881, 22.1049025 ], [ 88.8502729, 22.1059413 ], [ 88.850017, 22.1074884 ], [ 88.8497475, 22.1080063 ], [ 88.8494982, 22.1100681 ], [ 88.8495587, 22.1147005 ], [ 88.8492892, 22.1152182 ], [ 88.8492992, 22.1159902 ], [ 88.8490331, 22.1167655 ], [ 88.8484874, 22.1172864 ], [ 88.848494, 22.117801 ], [ 88.8476789, 22.1188398 ], [ 88.8472886, 22.1206461 ], [ 88.8467378, 22.1207804 ], [ 88.8460588, 22.1216893 ], [ 88.8459278, 22.1222057 ], [ 88.845377, 22.1223401 ], [ 88.8451041, 22.1226007 ], [ 88.8440043, 22.1229995 ], [ 88.8440111, 22.1235143 ], [ 88.8404322, 22.124455 ], [ 88.8401593, 22.1247156 ], [ 88.8332674, 22.1258226 ], [ 88.8315799, 22.1265964 ], [ 88.8218157, 22.1268521 ], [ 88.8211208, 22.1264733 ], [ 88.8194651, 22.1266209 ], [ 88.8194718, 22.1271357 ], [ 88.8175466, 22.1278001 ], [ 88.8164515, 22.1285844 ], [ 88.8159008, 22.1287198 ], [ 88.8159074, 22.1292344 ], [ 88.8139771, 22.1295134 ], [ 88.8139838, 22.130028 ], [ 88.8134296, 22.129905 ], [ 88.811506, 22.1306986 ], [ 88.8101282, 22.1309713 ], [ 88.8057054, 22.1307628 ], [ 88.8045939, 22.1302605 ], [ 88.8040414, 22.1302665 ], [ 88.8037619, 22.1300121 ], [ 88.8029299, 22.129764 ], [ 88.8011129, 22.1281116 ], [ 88.8002711, 22.1270911 ], [ 88.8001268, 22.126578 ], [ 88.7995744, 22.1265841 ], [ 88.7994293, 22.1260709 ], [ 88.7988672, 22.1253049 ], [ 88.7983081, 22.1247963 ], [ 88.7977362, 22.1232582 ], [ 88.7974567, 22.123004 ], [ 88.7970233, 22.1214644 ], [ 88.7964708, 22.1214705 ], [ 88.7963159, 22.1201853 ], [ 88.7960365, 22.1199309 ], [ 88.7957179, 22.1165884 ], [ 88.7954351, 22.1160768 ], [ 88.7954221, 22.1150473 ], [ 88.7947175, 22.1138963 ], [ 88.7936094, 22.1136512 ], [ 88.7869874, 22.1142386 ], [ 88.7850507, 22.1140023 ], [ 88.784495, 22.113751 ], [ 88.7828347, 22.1135117 ], [ 88.7808916, 22.1127608 ], [ 88.7800566, 22.112255 ], [ 88.7783994, 22.1122732 ], [ 88.7761996, 22.1130692 ], [ 88.7756536, 22.1135899 ], [ 88.7748133, 22.1139982 ], [ 88.7731616, 22.1137534 ], [ 88.773709, 22.1127107 ], [ 88.7731565, 22.1127167 ], [ 88.7728579, 22.1109182 ], [ 88.7723055, 22.1109241 ], [ 88.7721509, 22.1096389 ], [ 88.7718715, 22.1093845 ], [ 88.7715663, 22.1070713 ], [ 88.7718264, 22.1057816 ], [ 88.7715438, 22.1052698 ], [ 88.7713902, 22.1039846 ], [ 88.7708379, 22.1039904 ], [ 88.770012, 22.0931889 ], [ 88.7694436, 22.091908 ], [ 88.7684728, 22.0915321 ], [ 88.7679205, 22.091538 ], [ 88.7657016, 22.0907899 ], [ 88.7651429, 22.0902811 ], [ 88.7629273, 22.0897903 ], [ 88.762648, 22.0895359 ], [ 88.7620957, 22.0895418 ], [ 88.761055557812483, 22.088975306678851 ], [ 88.7607054, 22.0887846 ], [ 88.7601532, 22.0887905 ], [ 88.7587629, 22.0880333 ], [ 88.7582104, 22.0880392 ], [ 88.7570963, 22.087279 ], [ 88.7559885, 22.0870335 ], [ 88.754592, 22.0857616 ], [ 88.7537604, 22.085513 ], [ 88.7533376, 22.0848746 ], [ 88.7526398, 22.0842382 ], [ 88.7520844, 22.0839867 ], [ 88.7513856, 22.0833513 ], [ 88.7511033, 22.0828394 ], [ 88.7499859, 22.0818219 ], [ 88.749421, 22.0807982 ], [ 88.7488623, 22.0802895 ], [ 88.7482944, 22.0790086 ], [ 88.7477325, 22.0782424 ], [ 88.7475822, 22.0772144 ], [ 88.7470284, 22.0770912 ], [ 88.7463203, 22.0756835 ], [ 88.7454824, 22.0749201 ], [ 88.745056, 22.0738952 ], [ 88.7445023, 22.073772 ], [ 88.7440829, 22.0733908 ], [ 88.7439326, 22.0723628 ], [ 88.7428249, 22.0721173 ], [ 88.7426801, 22.071604 ], [ 88.7426707, 22.0708319 ], [ 88.7429436, 22.0705716 ], [ 88.7429404, 22.0703142 ], [ 88.7423724, 22.0690334 ], [ 88.7418107, 22.0682672 ], [ 88.7415189, 22.0669831 ], [ 88.7413796, 22.0668555 ], [ 88.7408258, 22.0667332 ], [ 88.7400942, 22.0633947 ], [ 88.7397771, 22.0600521 ], [ 88.7394947, 22.0595403 ], [ 88.7391872, 22.0569695 ], [ 88.7387303, 22.0569376 ], [ 88.7341987, 22.032827 ], [ 88.7345975, 22.0315358 ], [ 88.7359716, 22.0310064 ], [ 88.7366486, 22.0299697 ], [ 88.7366423, 22.0294549 ], [ 88.7374546, 22.0281593 ], [ 88.7374452, 22.0273872 ], [ 88.738518, 22.0248019 ], [ 88.7385055, 22.0237724 ], [ 88.7382263, 22.023518 ], [ 88.73875, 22.0211958 ], [ 88.7390197, 22.0206781 ], [ 88.7389821, 22.0175898 ], [ 88.7380056, 22.0166987 ], [ 88.7368952, 22.0161958 ], [ 88.7366191, 22.0161986 ], [ 88.7363463, 22.0164589 ], [ 88.7313796, 22.0166407 ], [ 88.7313766, 22.0163833 ], [ 88.7321999, 22.0159881 ], [ 88.7330264, 22.015851 ], [ 88.7330201, 22.0153364 ], [ 88.7338402, 22.0146838 ], [ 88.7343908, 22.0145496 ], [ 88.7345251, 22.0142908 ], [ 88.7345157, 22.0135188 ], [ 88.7342365, 22.0132642 ], [ 88.7342241, 22.0122347 ], [ 88.7338058, 22.0118527 ], [ 88.7318644, 22.0111009 ], [ 88.7313061, 22.0105921 ], [ 88.7285304, 22.0093343 ], [ 88.7274235, 22.0090886 ], [ 88.7268621, 22.0083224 ], [ 88.725479, 22.0080795 ], [ 88.7247839, 22.0077012 ], [ 88.7243626, 22.0070616 ], [ 88.7218723, 22.006573 ], [ 88.7213125, 22.0059359 ], [ 88.7218646, 22.00593 ], [ 88.7213048, 22.005292 ], [ 88.7201993, 22.0051754 ], [ 88.720067, 22.0056915 ], [ 88.7199311, 22.0058212 ], [ 88.7193806, 22.0059561 ], [ 88.7193868, 22.006471 ], [ 88.7188364, 22.006605 ], [ 88.7186994, 22.0067356 ], [ 88.7185682, 22.0072517 ], [ 88.7180177, 22.0073857 ], [ 88.7178809, 22.0075163 ], [ 88.7177495, 22.0080325 ], [ 88.7171959, 22.0079091 ], [ 88.7167862, 22.0082999 ], [ 88.7165195, 22.009075 ], [ 88.7158346, 22.0094677 ], [ 88.7150081, 22.0096055 ], [ 88.7150143, 22.0101204 ], [ 88.7140062, 22.0102997 ], [ 88.7139071, 22.0098745 ], [ 88.7144592, 22.0098688 ], [ 88.7148209, 22.0091803 ], [ 88.7150018, 22.0090909 ], [ 88.7149988, 22.0088335 ], [ 88.7147229, 22.0088363 ], [ 88.7146299, 22.0090062 ], [ 88.7105781, 22.0084931 ], [ 88.709192, 22.0079928 ], [ 88.7086399, 22.0079985 ], [ 88.7075267, 22.0072379 ], [ 88.7053095, 22.0064887 ], [ 88.7039294, 22.0065031 ], [ 88.7031046, 22.0067692 ], [ 88.7022827, 22.0072925 ], [ 88.7014609, 22.0078159 ], [ 88.7006422, 22.0085965 ], [ 88.7000931, 22.0088595 ], [ 88.6994135, 22.0097681 ], [ 88.6987316, 22.0104182 ], [ 88.6977728, 22.011072 ], [ 88.6976444, 22.0118456 ], [ 88.6970939, 22.0119796 ], [ 88.696548, 22.0125001 ], [ 88.6959975, 22.0126348 ], [ 88.6958652, 22.013151 ], [ 88.6954562, 22.0135409 ], [ 88.6940824, 22.0140699 ], [ 88.6938094, 22.0143302 ], [ 88.690508, 22.0152655 ], [ 88.690514, 22.0157803 ], [ 88.6891355, 22.0159229 ], [ 88.6885864, 22.0161859 ], [ 88.6877584, 22.0161944 ], [ 88.6847329, 22.017127 ], [ 88.6846004, 22.0176431 ], [ 88.6844645, 22.0177728 ], [ 88.6838021, 22.018426 ], [ 88.6829669, 22.0188027 ], [ 88.6827124, 22.0187623 ], [ 88.6825149, 22.0188151 ], [ 88.6823307, 22.0187592 ], [ 88.6822594, 22.0187787 ], [ 88.6823575, 22.0189889 ], [ 88.6817529, 22.0197588 ], [ 88.6815597, 22.0199179 ], [ 88.6811306, 22.0201467 ], [ 88.6805942, 22.0205843 ], [ 88.6796929, 22.0211711 ], [ 88.6784698, 22.0217082 ], [ 88.6776138, 22.0220907 ], [ 88.6754133, 22.0227561 ], [ 88.6721069, 22.0233048 ], [ 88.6643734, 22.0229979 ], [ 88.6255432, 22.0313674 ], [ 88.6249911, 22.0313728 ], [ 88.6248467, 22.0308595 ], [ 88.6242858, 22.0300929 ], [ 88.6237279, 22.0295836 ], [ 88.6228821, 22.0280476 ], [ 88.6223242, 22.0275382 ], [ 88.6218959, 22.0262555 ], [ 88.6213438, 22.026261 ], [ 88.6209116, 22.0247206 ], [ 88.6206326, 22.024466 ], [ 88.6204863, 22.0236953 ], [ 88.6199342, 22.0237008 ], [ 88.6197899, 22.0231873 ], [ 88.6189558, 22.0226807 ], [ 88.6186681, 22.0216539 ], [ 88.6176982, 22.021277 ], [ 88.6171403, 22.0207677 ], [ 88.6163077, 22.0203902 ], [ 88.616175, 22.0209064 ], [ 88.616039, 22.0210359 ], [ 88.6105298, 22.0221198 ], [ 88.6047388, 22.0226915 ], [ 88.6035092, 22.0238624 ], [ 88.6029715, 22.0251546 ], [ 88.60286, 22.0274725 ], [ 88.6036912, 22.0277217 ], [ 88.6041193, 22.0290045 ], [ 88.6041337, 22.0302916 ], [ 88.604433, 22.0323479 ], [ 88.6036251, 22.0341576 ], [ 88.6030789, 22.0346779 ], [ 88.6025383, 22.0357127 ], [ 88.6025557, 22.037257 ], [ 88.6028375, 22.0377692 ], [ 88.6042323, 22.0390425 ], [ 88.6043767, 22.039556 ], [ 88.6052077, 22.0398051 ], [ 88.6061909, 22.04134 ], [ 88.607028, 22.0421041 ], [ 88.6073506, 22.0462194 ], [ 88.6065368, 22.0475144 ], [ 88.6057318, 22.0495817 ], [ 88.6038282, 22.0521744 ], [ 88.6032905, 22.0534668 ], [ 88.6019331, 22.0555393 ], [ 88.6011134, 22.0563195 ], [ 88.6007071, 22.0569667 ], [ 88.6001563, 22.0571012 ], [ 88.6000237, 22.0576172 ], [ 88.599341, 22.058267 ], [ 88.5987903, 22.0584015 ], [ 88.5983871, 22.0594352 ], [ 88.5975674, 22.0602154 ], [ 88.5973, 22.0609903 ], [ 88.5970269, 22.0612503 ], [ 88.596492, 22.0628 ], [ 88.5968027, 22.0658859 ], [ 88.5970817, 22.0661405 ], [ 88.5977899, 22.067678 ], [ 88.5983421, 22.0676728 ], [ 88.5984856, 22.0681861 ], [ 88.5990437, 22.0686954 ], [ 88.5991879, 22.0692089 ], [ 88.6000163, 22.0692008 ], [ 88.6001597, 22.0697143 ], [ 88.6004387, 22.0699689 ], [ 88.6008651, 22.0709944 ], [ 88.6014174, 22.0709889 ], [ 88.6018485, 22.0725293 ], [ 88.6015869, 22.0738188 ], [ 88.6010403, 22.074339 ], [ 88.6009086, 22.0748551 ], [ 88.6003578, 22.0749888 ], [ 88.5995351, 22.0755117 ], [ 88.597605, 22.0757878 ], [ 88.5956691, 22.0755493 ], [ 88.5945587, 22.0750455 ], [ 88.59385, 22.075052364388519 ], [ 88.59385, 22.075052364388522 ], [ 88.593454, 22.0750562 ], [ 88.5928989, 22.0748041 ], [ 88.5906912, 22.0749549 ], [ 88.5908317, 22.0752108 ], [ 88.590898, 22.0811307 ], [ 88.5903544, 22.0819082 ], [ 88.5898107, 22.0826858 ], [ 88.5888547, 22.0835954 ], [ 88.5874795, 22.0841237 ], [ 88.5872063, 22.0843838 ], [ 88.5858241, 22.0842688 ], [ 88.5858182, 22.0837542 ], [ 88.5860959, 22.0838797 ], [ 88.5872006, 22.0838689 ], [ 88.5874739, 22.0836089 ], [ 88.5885771, 22.0834699 ], [ 88.5892584, 22.0826911 ], [ 88.5895287, 22.0821736 ], [ 88.5903457, 22.081136 ], [ 88.5906045, 22.079589 ], [ 88.5902996, 22.0770179 ], [ 88.5904123, 22.0747002 ], [ 88.5915124, 22.0743029 ], [ 88.5931694, 22.0742868 ], [ 88.59365, 22.074416093545125 ], [ 88.5959394, 22.075032 ], [ 88.597323, 22.0752758 ], [ 88.5998069, 22.0751233 ], [ 88.5999386, 22.0746072 ], [ 88.6013049, 22.0733068 ], [ 88.6010114, 22.0717652 ], [ 88.6005905, 22.0711254 ], [ 88.6000367, 22.0710026 ], [ 88.5997489, 22.0699757 ], [ 88.5991953, 22.0698519 ], [ 88.5990552, 22.0697251 ], [ 88.5989118, 22.0692116 ], [ 88.5983582, 22.0690878 ], [ 88.5982181, 22.068961 ], [ 88.5977929, 22.0679355 ], [ 88.5972391, 22.0678117 ], [ 88.5970991, 22.0676849 ], [ 88.5959628, 22.0648644 ], [ 88.5959398, 22.0628054 ], [ 88.5970067, 22.0594486 ], [ 88.5978233, 22.058411 ], [ 88.5983697, 22.0578909 ], [ 88.5985026, 22.0573747 ], [ 88.5990549, 22.0573694 ], [ 88.5994597, 22.0565932 ], [ 88.6000063, 22.0560731 ], [ 88.6008229, 22.0550353 ], [ 88.6005353, 22.0540084 ], [ 88.6005266, 22.0532364 ], [ 88.6013433, 22.0521988 ], [ 88.6022869, 22.0501302 ], [ 88.6017347, 22.0501356 ], [ 88.6026774, 22.048067 ], [ 88.6032006, 22.0454879 ], [ 88.6034708, 22.0449705 ], [ 88.6034593, 22.043941 ], [ 88.603031, 22.042658 ], [ 88.602479, 22.0426635 ], [ 88.6024731, 22.0421487 ], [ 88.601921, 22.042154 ], [ 88.6017766, 22.0416407 ], [ 88.6010739, 22.0404887 ], [ 88.6003788, 22.0401099 ], [ 88.5989638, 22.0370347 ], [ 88.5991099, 22.0254498 ], [ 88.5997657, 22.0223545 ], [ 88.6003162, 22.02222 ], [ 88.6011386, 22.021697 ], [ 88.6019581, 22.0209168 ], [ 88.6030579, 22.0205205 ], [ 88.6034627, 22.0197442 ], [ 88.6040091, 22.0192239 ], [ 88.6041418, 22.018708 ], [ 88.6055234, 22.0188227 ], [ 88.6060783, 22.0190746 ], [ 88.6099414, 22.0189085 ], [ 88.6101941, 22.0168467 ], [ 88.6121321, 22.0173424 ], [ 88.6127927, 22.0147618 ], [ 88.613612, 22.0139814 ], [ 88.6135975, 22.0126945 ], [ 88.6133185, 22.01244 ], [ 88.612749, 22.0109011 ], [ 88.6119063, 22.0096224 ], [ 88.6110696, 22.0088582 ], [ 88.6107819, 22.0078316 ], [ 88.610224, 22.0073222 ], [ 88.6097931, 22.0057819 ], [ 88.609241, 22.0057874 ], [ 88.608812, 22.0045044 ], [ 88.6085332, 22.0042498 ], [ 88.6079637, 22.002711 ], [ 88.6078248, 22.002583 ], [ 88.6072712, 22.0024604 ], [ 88.6065634, 22.0009227 ], [ 88.6057239, 21.9999013 ], [ 88.6055748, 21.9988732 ], [ 88.6050212, 21.9987494 ], [ 88.6046024, 21.9983678 ], [ 88.6041773, 21.9973425 ], [ 88.6025141, 21.9967146 ], [ 88.6018165, 21.9960784 ], [ 88.6015347, 21.9955662 ], [ 88.6012355, 21.9935099 ], [ 88.6003903, 21.9919737 ], [ 88.5998326, 21.9914644 ], [ 88.599272, 21.9906976 ], [ 88.5988513, 21.9900576 ], [ 88.5966391, 21.9896936 ], [ 88.5964948, 21.9891801 ], [ 88.5962161, 21.9889253 ], [ 88.5955092, 21.9873878 ], [ 88.5949558, 21.987264 ], [ 88.594128, 21.9872722 ], [ 88.59385, 21.987361624015232 ], [ 88.59385, 21.987361624015236 ], [ 88.5883525, 21.98913 ], [ 88.5855912, 21.9890285 ], [ 88.5846563, 21.991869 ], [ 88.583837, 21.9926492 ], [ 88.5832964, 21.9936842 ], [ 88.5824799, 21.9947216 ], [ 88.5815243, 21.9956314 ], [ 88.5798799, 21.9966768 ], [ 88.57741, 21.9979877 ], [ 88.5697049, 22.0001209 ], [ 88.5683304, 22.000649 ], [ 88.5661252, 22.0009274 ], [ 88.5622781, 22.0025086 ], [ 88.5587096, 22.0043445 ], [ 88.5578901, 22.0051245 ], [ 88.5573409, 22.0053872 ], [ 88.5551328, 22.0054082 ], [ 88.5540231, 22.0049038 ], [ 88.5533255, 22.0042674 ], [ 88.5522019, 22.0024761 ], [ 88.5512293, 22.0018412 ], [ 88.550676, 22.0017182 ], [ 88.5511819, 22.0102083 ], [ 88.5514607, 22.010463 ], [ 88.5517534, 22.0120047 ], [ 88.5523112, 22.0125142 ], [ 88.5524637, 22.0138 ], [ 88.5530158, 22.0137947 ], [ 88.5533114, 22.0155938 ], [ 88.5538634, 22.0155885 ], [ 88.5541592, 22.0173876 ], [ 88.5547113, 22.0173825 ], [ 88.55486, 22.0184107 ], [ 88.5562853, 22.0225157 ], [ 88.5563359, 22.0271489 ], [ 88.555809, 22.0294706 ], [ 88.5550146, 22.0325671 ], [ 88.5546262, 22.0348875 ], [ 88.5543501, 22.0348901 ], [ 88.554353, 22.0351476 ], [ 88.5546291, 22.0351449 ], [ 88.5543726, 22.0369493 ], [ 88.5541163, 22.0387537 ], [ 88.5541275, 22.0397832 ], [ 88.5538515, 22.0397858 ], [ 88.5539351, 22.0388429 ], [ 88.5538234, 22.0372118 ], [ 88.5540995, 22.0372094 ], [ 88.5541868, 22.0366051 ], [ 88.5542061, 22.0343766 ], [ 88.5544737, 22.0336019 ], [ 88.5544652, 22.0328297 ], [ 88.5550061, 22.0317949 ], [ 88.5550005, 22.0312802 ], [ 88.5553983, 22.029732 ], [ 88.555795, 22.0281837 ], [ 88.5557669, 22.0256097 ], [ 88.5560345, 22.024835 ], [ 88.5557332, 22.022521 ], [ 88.5548769, 22.019955 ], [ 88.5540432, 22.0194481 ], [ 88.5534826, 22.0186811 ], [ 88.5526293, 22.0163725 ], [ 88.5509423, 22.013557 ], [ 88.5494837, 22.006363 ], [ 88.5492021, 22.0058509 ], [ 88.5488842, 22.0019926 ], [ 88.5480254, 21.9991691 ], [ 88.5477438, 21.9986569 ], [ 88.5477075, 21.9953109 ], [ 88.5465839, 21.9935196 ], [ 88.5460041, 21.9909509 ], [ 88.5454437, 21.9901839 ], [ 88.5437572, 21.9873682 ], [ 88.5420511, 21.9827507 ], [ 88.541215, 21.9819862 ], [ 88.5407903, 21.9809607 ], [ 88.5391277, 21.9803323 ], [ 88.5360948, 21.980618 ], [ 88.5347204, 21.9811457 ], [ 88.5336248, 21.9819282 ], [ 88.5315752, 21.9838785 ], [ 88.5313048, 21.9843958 ], [ 88.5304851, 21.9851758 ], [ 88.5298053, 21.9860826 ], [ 88.5292547, 21.986217 ], [ 88.5292604, 21.9867316 ], [ 88.5287096, 21.986865 ], [ 88.527338, 21.9876502 ], [ 88.5265155, 21.9881726 ], [ 88.5254199, 21.988955 ], [ 88.5245947, 21.9892202 ], [ 88.5207336, 21.9895135 ], [ 88.5187988, 21.9892739 ], [ 88.5185203, 21.9890191 ], [ 88.5168588, 21.9885196 ], [ 88.5157467, 21.9877577 ], [ 88.514916, 21.9875078 ], [ 88.5140799, 21.9867433 ], [ 88.513249, 21.9864937 ], [ 88.5124129, 21.985729 ], [ 88.5115796, 21.9852219 ], [ 88.5101942, 21.9847197 ], [ 88.5096369, 21.9842102 ], [ 88.5088062, 21.9839603 ], [ 88.5076941, 21.9831983 ], [ 88.5071421, 21.9832034 ], [ 88.5065847, 21.9826936 ], [ 88.5015847, 21.9796504 ], [ 88.5010313, 21.9795271 ], [ 88.5008875, 21.9790136 ], [ 88.5000542, 21.9785065 ], [ 88.4996339, 21.9778662 ], [ 88.498522, 21.9771041 ], [ 88.4979686, 21.9769809 ], [ 88.4978248, 21.9764674 ], [ 88.4971258, 21.9755723 ], [ 88.4961529, 21.9749382 ], [ 88.4957259, 21.9736549 ], [ 88.4951738, 21.97366 ], [ 88.4944674, 21.9721219 ], [ 88.49391, 21.971612 ], [ 88.4933473, 21.9705874 ], [ 88.4927902, 21.9700777 ], [ 88.4925006, 21.9687932 ], [ 88.4919434, 21.9682835 ], [ 88.4916541, 21.9669991 ], [ 88.4913753, 21.9667441 ], [ 88.4907645, 21.9610864 ], [ 88.4912974, 21.9592796 ], [ 88.4915707, 21.9590197 ], [ 88.4918386, 21.958245 ], [ 88.4921118, 21.9579851 ], [ 88.4922449, 21.9574689 ], [ 88.4930701, 21.957204 ], [ 88.4937486, 21.9561682 ], [ 88.4942842, 21.9546188 ], [ 88.4948308, 21.9540989 ], [ 88.495505, 21.9525483 ], [ 88.4960567, 21.9525432 ], [ 88.4964566, 21.9512525 ], [ 88.4970032, 21.9507326 ], [ 88.497669, 21.9484098 ], [ 88.500147, 21.9478723 ], [ 88.5006798, 21.9460654 ], [ 88.5017834, 21.9460554 ], [ 88.5020512, 21.9452807 ], [ 88.5028748, 21.9448866 ], [ 88.5039676, 21.9438469 ], [ 88.5045182, 21.9437135 ], [ 88.5054672, 21.9421603 ], [ 88.5059918, 21.9395814 ], [ 88.5065327, 21.9385466 ], [ 88.5069172, 21.9357114 ], [ 88.5085671, 21.9351815 ], [ 88.5084097, 21.9333811 ], [ 88.5072628, 21.9292728 ], [ 88.5069843, 21.929018 ], [ 88.5055804, 21.9267139 ], [ 88.5030436, 21.9215888 ], [ 88.5027514, 21.9200469 ], [ 88.5016238, 21.9177404 ], [ 88.5012063, 21.9173577 ], [ 88.495941, 21.9150887 ], [ 88.4951081, 21.9145814 ], [ 88.4937155, 21.913307 ], [ 88.4873523, 21.9115627 ], [ 88.485965, 21.9108029 ], [ 88.4854133, 21.9108079 ], [ 88.4840261, 21.9100481 ], [ 88.4834745, 21.9100532 ], [ 88.4829174, 21.9095433 ], [ 88.4823604, 21.9090335 ], [ 88.480976, 21.9085312 ], [ 88.4805577, 21.9081492 ], [ 88.4798594, 21.9072541 ], [ 88.478752, 21.9068784 ], [ 88.4783245, 21.905595 ], [ 88.4781858, 21.9054671 ], [ 88.4776327, 21.9053439 ], [ 88.4776275, 21.904829 ], [ 88.4770758, 21.9048339 ], [ 88.476078, 21.9017538 ], [ 88.4757994, 21.9014989 ], [ 88.4755131, 21.9004716 ], [ 88.4752347, 21.9002169 ], [ 88.4747711, 21.8953299 ], [ 88.4742194, 21.8953348 ], [ 88.47423, 21.8963643 ], [ 88.4725791, 21.8967648 ], [ 88.471749, 21.8965149 ], [ 88.4703699, 21.8965272 ], [ 88.4694107, 21.8971798 ], [ 88.4690066, 21.8980838 ], [ 88.4684551, 21.8980889 ], [ 88.468431898828101, 21.898067672509988 ], [ 88.4681765, 21.897834 ], [ 88.4648641, 21.897606 ], [ 88.4629412, 21.8983953 ], [ 88.4621138, 21.8984027 ], [ 88.4610053, 21.8978976 ], [ 88.4604536, 21.8979026 ], [ 88.4596314, 21.8984248 ], [ 88.457855, 21.9001142 ], [ 88.4571752, 21.9010209 ], [ 88.4559401, 21.9016758 ], [ 88.4561151, 21.9052781 ], [ 88.4566668, 21.9052734 ], [ 88.4568146, 21.9063017 ], [ 88.4578042, 21.9086098 ], [ 88.4583559, 21.9086049 ], [ 88.4587847, 21.9101456 ], [ 88.4593444, 21.9109129 ], [ 88.4594933, 21.9119413 ], [ 88.460045, 21.9119364 ], [ 88.4601981, 21.9134798 ], [ 88.4604767, 21.9137347 ], [ 88.4619006, 21.9180982 ], [ 88.4619083, 21.9188704 ], [ 88.4617736, 21.9191292 ], [ 88.4623253, 21.9191242 ], [ 88.4624838, 21.9211823 ], [ 88.4622264, 21.9229865 ], [ 88.4614224, 21.9253104 ], [ 88.4607397, 21.9259596 ], [ 88.4601894, 21.9260936 ], [ 88.4601998, 21.9271233 ], [ 88.4596481, 21.9271282 ], [ 88.4595148, 21.9276442 ], [ 88.4592417, 21.927904 ], [ 88.4589737, 21.9286788 ], [ 88.4582935, 21.9295854 ], [ 88.4576073, 21.9299779 ], [ 88.4572032, 21.9308821 ], [ 88.4566528, 21.9310161 ], [ 88.4565196, 21.9315323 ], [ 88.4562463, 21.931792 ], [ 88.456114, 21.9323081 ], [ 88.4555636, 21.9324412 ], [ 88.4551533, 21.9328315 ], [ 88.4548826, 21.9333488 ], [ 88.454068, 21.934643 ], [ 88.4535215, 21.9351628 ], [ 88.4531289, 21.9372255 ], [ 88.4553362, 21.9372061 ], [ 88.4569875, 21.9368048 ], [ 88.4572608, 21.9365449 ], [ 88.4591882, 21.9361422 ], [ 88.4605676, 21.9361299 ], [ 88.4605702, 21.9363873 ], [ 88.4608461, 21.9363849 ], [ 88.4608514, 21.9368997 ], [ 88.4602958, 21.9365181 ], [ 88.4592839, 21.9363102 ], [ 88.4575394, 21.9367999 ], [ 88.4572661, 21.9370598 ], [ 88.4554317, 21.9373741 ], [ 88.454515, 21.9378564 ], [ 88.4543778, 21.9379868 ], [ 88.4546747, 21.9400437 ], [ 88.4558046, 21.9426079 ], [ 88.4563616, 21.9431178 ], [ 88.4569238, 21.9441425 ], [ 88.4577594, 21.9449074 ], [ 88.4586003, 21.9461871 ], [ 88.4587441, 21.9467007 ], [ 88.4592997, 21.9470813 ], [ 88.4601329, 21.9475888 ], [ 88.4651217, 21.949733 ], [ 88.4655403, 21.950244 ], [ 88.4659652, 21.9512699 ], [ 88.4665184, 21.9513933 ], [ 88.4673515, 21.9519008 ], [ 88.4679087, 21.9524105 ], [ 88.4684617, 21.9525349 ], [ 88.4686046, 21.9530484 ], [ 88.4688832, 21.9533034 ], [ 88.4693081, 21.9543293 ], [ 88.4698599, 21.9543244 ], [ 88.4700081, 21.9553527 ], [ 88.4702892, 21.9558651 ], [ 88.4703132, 21.9581817 ], [ 88.4700452, 21.9589564 ], [ 88.4700531, 21.9597284 ], [ 88.468631898828107, 21.961079765150814 ], [ 88.4680038, 21.961677 ], [ 88.4669079, 21.9624591 ], [ 88.4636072, 21.9635183 ], [ 88.4616755, 21.9635355 ], [ 88.4608503, 21.9638002 ], [ 88.4536757, 21.9638639 ], [ 88.4522933, 21.9636188 ], [ 88.4473328, 21.9643066 ], [ 88.4471996, 21.9648225 ], [ 88.4475303, 21.9702257 ], [ 88.4489624, 21.9753616 ], [ 88.4493351, 21.984883 ], [ 88.4485175, 21.9859199 ], [ 88.4485228, 21.9864347 ], [ 88.4481157, 21.9870815 ], [ 88.447293, 21.9876037 ], [ 88.4466065, 21.9879962 ], [ 88.4464742, 21.9885122 ], [ 88.4445447, 21.9887866 ], [ 88.44455, 21.9893014 ], [ 88.4437233, 21.989437 ], [ 88.4430367, 21.9898297 ], [ 88.44299443582895, 21.989951749218751 ], [ 88.442942070507655, 21.990102968239427 ], [ 88.442925178243414, 21.99015174921875 ], [ 88.4427685, 21.9906042 ], [ 88.4429148, 21.9913753 ], [ 88.4434708, 21.991756 ], [ 88.444024, 21.9918804 ], [ 88.4440293, 21.9923952 ], [ 88.445697, 21.9935385 ], [ 88.4468089, 21.9943009 ], [ 88.4473621, 21.9944252 ], [ 88.4473674, 21.9949401 ], [ 88.4481981, 21.9951901 ], [ 88.4489032, 21.9967284 ], [ 88.4494606, 21.9972383 ], [ 88.45032, 22.0003198 ], [ 88.4503593, 22.0041809 ], [ 88.4510786, 22.0070062 ], [ 88.4519132, 22.007642 ], [ 88.4532986, 22.0081446 ], [ 88.4568898, 22.00837 ], [ 88.4593846, 22.0093776 ], [ 88.4596632, 22.0096326 ], [ 88.4602166, 22.0097567 ], [ 88.461193, 22.0107777 ], [ 88.4616207, 22.012061 ], [ 88.4621727, 22.0120561 ], [ 88.4624593, 22.0130833 ], [ 88.4630113, 22.0130784 ], [ 88.4628781, 22.0135944 ], [ 88.4631569, 22.0138493 ], [ 88.4634513, 22.0156486 ], [ 88.4623816, 22.0190047 ], [ 88.4623869, 22.0195195 ], [ 88.4618426, 22.0202967 ], [ 88.4602285, 22.0244297 ], [ 88.4602364, 22.025202 ], [ 88.4599682, 22.0259767 ], [ 88.4599921, 22.0282933 ], [ 88.4611465, 22.033174 ], [ 88.4614252, 22.033429 ], [ 88.4617172, 22.0349708 ], [ 88.4619958, 22.0352258 ], [ 88.4631372, 22.0388196 ], [ 88.4631984, 22.0405325 ], [ 88.4634931, 22.0423318 ], [ 88.4640612, 22.0438712 ], [ 88.4644411, 22.0447287 ], [ 88.4647172, 22.0447263 ], [ 88.464632, 22.0456681 ], [ 88.4652801, 22.0457508 ], [ 88.4652827, 22.0460083 ], [ 88.4656564, 22.04635 ], [ 88.4668478, 22.0463392 ], [ 88.4668488, 22.0464205 ], [ 88.4663937, 22.0466414 ], [ 88.4658416, 22.0466463 ], [ 88.4655642, 22.0465206 ], [ 88.4645095, 22.0459531 ], [ 88.4636021, 22.0437064 ], [ 88.4633128, 22.042422 ], [ 88.4627422, 22.0406252 ], [ 88.4628692, 22.0395942 ], [ 88.45944, 22.0282982 ], [ 88.4596738, 22.0241772 ], [ 88.4602153, 22.0231428 ], [ 88.46021, 22.022628 ], [ 88.4607516, 22.0215934 ], [ 88.4607331, 22.0197917 ], [ 88.4612695, 22.0182423 ], [ 88.4615163, 22.0154084 ], [ 88.4619178, 22.0141177 ], [ 88.4624698, 22.0141128 ], [ 88.4620501, 22.0136017 ], [ 88.4614848, 22.0123198 ], [ 88.4609274, 22.0118098 ], [ 88.4603674, 22.0110425 ], [ 88.4602245, 22.010529 ], [ 88.4593952, 22.0104071 ], [ 88.4582831, 22.0096448 ], [ 88.458007, 22.0096473 ], [ 88.4574602, 22.010167 ], [ 88.4571843, 22.0101693 ], [ 88.4566296, 22.009917 ], [ 88.4519316, 22.0094437 ], [ 88.4505436, 22.0086838 ], [ 88.4499902, 22.0085604 ], [ 88.4489975, 22.0059949 ], [ 88.4489766, 22.0039357 ], [ 88.4492421, 22.0029036 ], [ 88.4492054, 21.9992999 ], [ 88.4483565, 21.9972481 ], [ 88.4477993, 21.9967382 ], [ 88.4473791, 21.9960979 ], [ 88.4468259, 21.9959745 ], [ 88.4468206, 21.9954596 ], [ 88.4462673, 21.9953355 ], [ 88.4454315, 21.9945706 ], [ 88.4440437, 21.9938104 ], [ 88.4434903, 21.993687 ], [ 88.443485, 21.9931722 ], [ 88.4429318, 21.993048 ], [ 88.4425107, 21.9924086 ], [ 88.4419509, 21.9916413 ], [ 88.441935855493696, 21.99015174921875 ], [ 88.441935855493711, 21.99015174921875 ], [ 88.4419301, 21.9895819 ], [ 88.4424769, 21.9890624 ], [ 88.4426103, 21.9885462 ], [ 88.4431622, 21.9885415 ], [ 88.4431571, 21.9880266 ], [ 88.4437076, 21.9878926 ], [ 88.4442544, 21.9873729 ], [ 88.4459091, 21.98723 ], [ 88.4463173, 21.9867116 ], [ 88.4468564, 21.9854198 ], [ 88.4471297, 21.9851599 ], [ 88.4470618, 21.9784674 ], [ 88.4473274, 21.9774355 ], [ 88.4467441, 21.9743514 ], [ 88.4458928, 21.9720422 ], [ 88.4456143, 21.9717872 ], [ 88.4444661, 21.9674209 ], [ 88.4448494, 21.9643285 ], [ 88.4456706, 21.9636772 ], [ 88.4462211, 21.9635442 ], [ 88.446216, 21.9630293 ], [ 88.4470425, 21.9628929 ], [ 88.4481412, 21.9623684 ], [ 88.4608267, 21.9614837 ], [ 88.4632996, 21.9604319 ], [ 88.4646779, 21.9602915 ], [ 88.4650862, 21.9597728 ], [ 88.4652192, 21.9592569 ], [ 88.4660457, 21.9591202 ], [ 88.4663243, 21.9593752 ], [ 88.4668775, 21.9594996 ], [ 88.467827, 21.9579465 ], [ 88.4678165, 21.9569169 ], [ 88.4669728, 21.9553799 ], [ 88.4662769, 21.954742 ], [ 88.4648919, 21.9542395 ], [ 88.4646133, 21.9539845 ], [ 88.4640603, 21.9538613 ], [ 88.4640523, 21.953089 ], [ 88.4648775, 21.9528243 ], [ 88.4648749, 21.9525668 ], [ 88.4640457, 21.9524451 ], [ 88.4632126, 21.9519377 ], [ 88.4626554, 21.9514277 ], [ 88.4621038, 21.9514327 ], [ 88.4609921, 21.9506702 ], [ 88.4596073, 21.9501677 ], [ 88.4587741, 21.9496604 ], [ 88.4582224, 21.9496651 ], [ 88.4571083, 21.9486455 ], [ 88.4565551, 21.9485221 ], [ 88.4565498, 21.9480072 ], [ 88.4557208, 21.9478855 ], [ 88.455024, 21.9472484 ], [ 88.454604, 21.9466082 ], [ 88.4539098, 21.9462285 ], [ 88.452512, 21.9444391 ], [ 88.4519522, 21.9436717 ], [ 88.4513926, 21.9429044 ], [ 88.4507885, 21.9377611 ], [ 88.4504657, 21.9374181 ], [ 88.4507728, 21.9362166 ], [ 88.4507624, 21.9351872 ], [ 88.4510253, 21.9338976 ], [ 88.451564, 21.9326058 ], [ 88.4515352, 21.9297742 ], [ 88.4519314, 21.9279689 ], [ 88.4530348, 21.927959 ], [ 88.453303, 21.9271843 ], [ 88.4544037, 21.9269173 ], [ 88.4553453, 21.924592 ], [ 88.4558892, 21.923815 ], [ 88.4558736, 21.9222705 ], [ 88.4557348, 21.9221426 ], [ 88.4551816, 21.9220191 ], [ 88.4552739, 21.9218487 ], [ 88.4568342, 21.9217472 ], [ 88.4566749, 21.9196892 ], [ 88.4565362, 21.9195612 ], [ 88.4546025, 21.919321 ], [ 88.4539085, 21.9189413 ], [ 88.4533436, 21.9176593 ], [ 88.4525056, 21.916637 ], [ 88.450278, 21.9145971 ], [ 88.4501353, 21.9140836 ], [ 88.449028, 21.9137067 ], [ 88.448471, 21.9131968 ], [ 88.4456995, 21.9119339 ], [ 88.4440418, 21.9116911 ], [ 88.4429384, 21.9117009 ], [ 88.4421083, 21.9114506 ], [ 88.4399015, 21.9114699 ], [ 88.4392075, 21.9110904 ], [ 88.439065, 21.9105767 ], [ 88.4374047, 21.9100764 ], [ 88.436137, 21.9075132 ], [ 88.4355802, 21.9070033 ], [ 88.4350208, 21.9062358 ], [ 88.434601, 21.9055954 ], [ 88.4340469, 21.9053429 ], [ 88.4333504, 21.9047058 ], [ 88.4327859, 21.9034236 ], [ 88.4320928, 21.903043 ], [ 88.4309894, 21.9030526 ], [ 88.4307163, 21.9033123 ], [ 88.430166, 21.9034463 ], [ 88.4300325, 21.9039623 ], [ 88.4293499, 21.9046115 ], [ 88.4285275, 21.9051333 ], [ 88.4279772, 21.9052673 ], [ 88.4278439, 21.9057833 ], [ 88.4274345, 21.9061726 ], [ 88.4257859, 21.9068309 ], [ 88.4256525, 21.9073469 ], [ 88.4255164, 21.9074764 ], [ 88.424413, 21.907486 ], [ 88.4241359, 21.9073601 ], [ 88.424141, 21.907875 ], [ 88.4219329, 21.9077648 ], [ 88.4211004, 21.9072571 ], [ 88.419716, 21.9067542 ], [ 88.4187437, 21.9061195 ], [ 88.4183202, 21.9050934 ], [ 88.4177685, 21.9050982 ], [ 88.4177634, 21.9045833 ], [ 88.4172106, 21.904459 ], [ 88.4170709, 21.904332 ], [ 88.4166423, 21.902791 ], [ 88.4160906, 21.9027958 ], [ 88.4158963, 21.8971339 ], [ 88.4161645, 21.8963594 ], [ 88.4155748, 21.892503 ], [ 88.4152964, 21.8922479 ], [ 88.4151412, 21.8904473 ], [ 88.4145895, 21.890452 ], [ 88.4140227, 21.8889122 ], [ 88.4134699, 21.8887878 ], [ 88.4130518, 21.8884057 ], [ 88.4129093, 21.8878922 ], [ 88.4123565, 21.8877676 ], [ 88.4117997, 21.8872575 ], [ 88.409859, 21.8862445 ], [ 88.4093023, 21.8857344 ], [ 88.4079209, 21.8854889 ], [ 88.4070883, 21.884981 ], [ 88.405431, 21.8847378 ], [ 88.4048819, 21.8849999 ], [ 88.4018494, 21.8851549 ], [ 88.3974365, 21.8851923 ], [ 88.3972932, 21.8846788 ], [ 88.3966003, 21.884298 ], [ 88.395904, 21.8836608 ], [ 88.3950641, 21.8823807 ], [ 88.3945, 21.8810984 ], [ 88.3939409, 21.8803309 ], [ 88.3932458, 21.8796926 ], [ 88.3926916, 21.8794399 ], [ 88.3919953, 21.8788026 ], [ 88.3911556, 21.8775225 ], [ 88.3900226, 21.8744429 ], [ 88.3897317, 21.8729007 ], [ 88.3891702, 21.8718757 ], [ 88.3890178, 21.8703324 ], [ 88.3898426, 21.870068 ], [ 88.3896396, 21.8633764 ], [ 88.3904469, 21.8613103 ], [ 88.3912567, 21.8595014 ], [ 88.39152, 21.858212 ], [ 88.3939592, 21.8538149 ], [ 88.3940878, 21.8527841 ], [ 88.3935363, 21.8527888 ], [ 88.3933879, 21.8517603 ], [ 88.393107, 21.8512477 ], [ 88.3919942, 21.8502275 ], [ 88.3918492, 21.8494564 ], [ 88.3912979, 21.8494611 ], [ 88.3907288, 21.8476637 ], [ 88.3901775, 21.8476684 ], [ 88.3900341, 21.8471547 ], [ 88.3897559, 21.8468998 ], [ 88.3894728, 21.8461298 ], [ 88.3891945, 21.8458746 ], [ 88.3886306, 21.8445923 ], [ 88.3880742, 21.844082 ], [ 88.3875128, 21.843057 ], [ 88.3869564, 21.8425469 ], [ 88.3863875, 21.8407495 ], [ 88.3859708, 21.8403664 ], [ 88.3854193, 21.8403711 ], [ 88.3850016, 21.839989 ], [ 88.3838714, 21.8371667 ], [ 88.3833149, 21.8366564 ], [ 88.3832605, 21.8309933 ], [ 88.3837822, 21.8278996 ], [ 88.3843163, 21.8260931 ], [ 88.3845896, 21.8258335 ], [ 88.3848504, 21.8242867 ], [ 88.3859282, 21.8217032 ], [ 88.3863149, 21.8188682 ], [ 88.3871395, 21.8186038 ], [ 88.3878209, 21.8178257 ], [ 88.3880915, 21.8173086 ], [ 88.388911, 21.8165294 ], [ 88.3897058, 21.8131761 ], [ 88.3899789, 21.8129163 ], [ 88.3902248, 21.809825 ], [ 88.390493, 21.8090504 ], [ 88.3904658, 21.8062188 ], [ 88.3894814, 21.8041676 ], [ 88.3908572, 21.8038987 ], [ 88.3915385, 21.8031206 ], [ 88.391526, 21.8018335 ], [ 88.3908126, 21.7992652 ], [ 88.3902613, 21.7992699 ], [ 88.389695, 21.7977299 ], [ 88.3888681, 21.7977369 ], [ 88.3887249, 21.7972232 ], [ 88.3884469, 21.7969682 ], [ 88.3880239, 21.795942 ], [ 88.387197, 21.795949 ], [ 88.3870537, 21.7954353 ], [ 88.3864975, 21.7949252 ], [ 88.3863552, 21.7944115 ], [ 88.3858028, 21.7942869 ], [ 88.3848313, 21.7936519 ], [ 88.3846892, 21.7931382 ], [ 88.3841378, 21.7931429 ], [ 88.3841329, 21.792628 ], [ 88.3835803, 21.7925035 ], [ 88.382468, 21.7914829 ], [ 88.3819167, 21.7914876 ], [ 88.3810972, 21.7922667 ], [ 88.3805486, 21.7925288 ], [ 88.3794472, 21.7926672 ], [ 88.3794522, 21.793182 ], [ 88.3775276, 21.7937129 ], [ 88.3775327, 21.7942277 ], [ 88.3758812, 21.794499 ], [ 88.3758861, 21.7950138 ], [ 88.3742337, 21.7951557 ], [ 88.3734115, 21.7956776 ], [ 88.3703845, 21.7962175 ], [ 88.3701114, 21.7964772 ], [ 88.3678978, 21.796573 ], [ 88.3654304, 21.7970308 ], [ 88.3636444, 21.7976897 ], [ 88.3633809, 21.798979 ], [ 88.3636809, 21.8015509 ], [ 88.3639663, 21.8025783 ], [ 88.3636956, 21.8030954 ], [ 88.3637175, 21.8054122 ], [ 88.3634662, 21.8079886 ], [ 88.3631931, 21.8082483 ], [ 88.3632002, 21.8090206 ], [ 88.3629271, 21.8092803 ], [ 88.3618462, 21.8116061 ], [ 88.3612998, 21.8121255 ], [ 88.3604826, 21.813162 ], [ 88.3599385, 21.8139389 ], [ 88.3599434, 21.8144538 ], [ 88.3591262, 21.8154902 ], [ 88.3585796, 21.8160096 ], [ 88.3580502, 21.8183309 ], [ 88.3567034, 21.8216887 ], [ 88.3564446, 21.8234929 ], [ 88.3559054, 21.8247845 ], [ 88.354851, 21.8299419 ], [ 88.3545801, 21.8304589 ], [ 88.3554437, 21.8343135 ], [ 88.3560583, 21.8410018 ], [ 88.356063, 21.8415167 ], [ 88.3556839, 21.8451237 ], [ 88.3562354, 21.8451192 ], [ 88.3558506, 21.8482116 ], [ 88.3558893, 21.8523303 ], [ 88.3556234, 21.8533623 ], [ 88.3553501, 21.8536219 ], [ 88.3554957, 21.8543931 ], [ 88.3566011, 21.8546414 ], [ 88.3575754, 21.8556631 ], [ 88.3581343, 21.8564309 ], [ 88.3582775, 21.8569446 ], [ 88.3591073, 21.8571952 ], [ 88.3600865, 21.8587317 ], [ 88.3612138, 21.8612969 ], [ 88.3617703, 21.8618072 ], [ 88.3620583, 21.863092 ], [ 88.3628978, 21.8643721 ], [ 88.3641881, 21.8695102 ], [ 88.3647396, 21.8695057 ], [ 88.3648869, 21.870534 ], [ 88.3654482, 21.8715592 ], [ 88.3657362, 21.872844 ], [ 88.3660145, 21.8730991 ], [ 88.3692152, 21.8905782 ], [ 88.3697816, 21.892118 ], [ 88.3703751, 21.8964896 ], [ 88.3701065, 21.8972641 ], [ 88.3701288, 21.8995809 ], [ 88.3698701, 21.9013851 ], [ 88.3693306, 21.9026767 ], [ 88.3693357, 21.9031915 ], [ 88.3682569, 21.9057748 ], [ 88.3679835, 21.9060345 ], [ 88.3677151, 21.906809 ], [ 88.3668973, 21.9078457 ], [ 88.3660893, 21.9099118 ], [ 88.365816, 21.9101715 ], [ 88.3655474, 21.910946 ], [ 88.3652741, 21.9112057 ], [ 88.3644637, 21.9130144 ], [ 88.3639169, 21.9135338 ], [ 88.3631065, 21.9153427 ], [ 88.3625595, 21.9158621 ], [ 88.3622912, 21.9166366 ], [ 88.3614732, 21.9176731 ], [ 88.3614781, 21.9181879 ], [ 88.3606578, 21.918967 ], [ 88.3598449, 21.9205183 ], [ 88.3590247, 21.9212974 ], [ 88.358892, 21.9218133 ], [ 88.3583403, 21.9218181 ], [ 88.3582067, 21.922334 ], [ 88.3573864, 21.9231131 ], [ 88.3567058, 21.9240191 ], [ 88.3561564, 21.9242811 ], [ 88.354652, 21.9257099 ], [ 88.3539714, 21.926616 ], [ 88.3534208, 21.9267498 ], [ 88.3532872, 21.9272658 ], [ 88.3524692, 21.9283023 ], [ 88.350008, 21.9306394 ], [ 88.349466, 21.9316736 ], [ 88.3487828, 21.9323223 ], [ 88.3476803, 21.9324605 ], [ 88.3475662, 21.9350358 ], [ 88.3478786, 21.9388948 ], [ 88.3476196, 21.940699 ], [ 88.3470774, 21.9417332 ], [ 88.3472328, 21.943534 ], [ 88.3477846, 21.9435294 ], [ 88.3482029, 21.9440409 ], [ 88.3483705, 21.9471287 ], [ 88.348926, 21.9475098 ], [ 88.3522481, 21.9486415 ], [ 88.3523879, 21.9488978 ], [ 88.3533639, 21.9499193 ], [ 88.3511577, 21.9500658 ], [ 88.3500613, 21.9508471 ], [ 88.3493772, 21.9514969 ], [ 88.3491059, 21.952014 ], [ 88.3486951, 21.9522746 ], [ 88.3485371, 21.9502166 ], [ 88.3490818, 21.9494398 ], [ 88.3490768, 21.948925 ], [ 88.3483838, 21.948544 ], [ 88.3475488, 21.9477785 ], [ 88.3468548, 21.9473986 ], [ 88.3462885, 21.9458587 ], [ 88.3462666, 21.9435419 ], [ 88.3470702, 21.9409609 ], [ 88.3473072, 21.93684 ], [ 88.3467215, 21.9332406 ], [ 88.3469733, 21.9306642 ], [ 88.3472443, 21.9301473 ], [ 88.3473705, 21.9288591 ], [ 88.3479186, 21.9284678 ], [ 88.3484692, 21.9283352 ], [ 88.3491513, 21.9275572 ], [ 88.3492847, 21.9270413 ], [ 88.3506593, 21.9265151 ], [ 88.3516147, 21.9254775 ], [ 88.3517484, 21.9249615 ], [ 88.3522965, 21.9245705 ], [ 88.352847, 21.9244376 ], [ 88.3540759, 21.9231403 ], [ 88.3542095, 21.9226243 ], [ 88.3553044, 21.9217139 ], [ 88.3575028, 21.9207952 ], [ 88.3598132, 21.9171721 ], [ 88.3603454, 21.9151082 ], [ 88.3608873, 21.9140738 ], [ 88.3617075, 21.9132947 ], [ 88.3619687, 21.9117479 ], [ 88.3644121, 21.9076088 ], [ 88.3646758, 21.9063195 ], [ 88.3657521, 21.9034786 ], [ 88.3657325, 21.9014195 ], [ 88.3654469, 21.9003921 ], [ 88.3654297, 21.8985901 ], [ 88.3658292, 21.8970422 ], [ 88.3669351, 21.8972904 ], [ 88.3664741, 21.892403 ], [ 88.3666077, 21.8918871 ], [ 88.3671592, 21.8918825 ], [ 88.3675652, 21.8911067 ], [ 88.3675603, 21.8905919 ], [ 88.3674216, 21.8904639 ], [ 88.3660388, 21.8900897 ], [ 88.3656124, 21.888806 ], [ 88.363867, 21.8792953 ], [ 88.3634463, 21.8785267 ], [ 88.3653794, 21.878768 ], [ 88.3655144, 21.8785095 ], [ 88.3652214, 21.8767098 ], [ 88.3653573, 21.8764512 ], [ 88.3648058, 21.8764558 ], [ 88.3647886, 21.8746539 ], [ 88.3642371, 21.8746584 ], [ 88.3642224, 21.8731141 ], [ 88.3636709, 21.8731186 ], [ 88.3635202, 21.8718327 ], [ 88.3629613, 21.8710649 ], [ 88.3623951, 21.869525 ], [ 88.3621169, 21.8692698 ], [ 88.3615531, 21.8679873 ], [ 88.3609967, 21.8674772 ], [ 88.3604354, 21.866452 ], [ 88.3598789, 21.8659417 ], [ 88.3591755, 21.8644029 ], [ 88.3586227, 21.8642783 ], [ 88.3579218, 21.863126 ], [ 88.3573654, 21.8626157 ], [ 88.3569462, 21.8619752 ], [ 88.3552915, 21.8619888 ], [ 88.3545981, 21.8616087 ], [ 88.3547194, 21.8598056 ], [ 88.3527892, 21.8598215 ], [ 88.3526459, 21.8593078 ], [ 88.3522292, 21.8589247 ], [ 88.3511237, 21.8586764 ], [ 88.3472655, 21.8589653 ], [ 88.3467164, 21.8592273 ], [ 88.3431364, 21.8597712 ], [ 88.3423139, 21.8602929 ], [ 88.3398319, 21.8603131 ], [ 88.3392876, 21.8610899 ], [ 88.3381846, 21.8610988 ], [ 88.3373621, 21.8616204 ], [ 88.336259, 21.8616293 ], [ 88.3357098, 21.8618913 ], [ 88.3260581, 21.8619691 ], [ 88.3238495, 21.8617295 ], [ 88.322466, 21.8612256 ], [ 88.3219145, 21.8612301 ], [ 88.3205308, 21.8607263 ], [ 88.3199793, 21.8607308 ], [ 88.3185959, 21.8602269 ], [ 88.3180444, 21.8602313 ], [ 88.3177662, 21.8599761 ], [ 88.314167, 21.8584602 ], [ 88.3134713, 21.8578227 ], [ 88.3133292, 21.857309 ], [ 88.3122226, 21.8569311 ], [ 88.3116641, 21.8561632 ], [ 88.3111115, 21.8560392 ], [ 88.3111067, 21.8555244 ], [ 88.3094522, 21.8555376 ], [ 88.3075031, 21.8534936 ], [ 88.3076359, 21.8529776 ], [ 88.3089983, 21.8511648 ], [ 88.3098183, 21.8503859 ], [ 88.3109026, 21.8483178 ], [ 88.3111667, 21.8470285 ], [ 88.3111313, 21.843167 ], [ 88.3119516, 21.8423883 ], [ 88.3119491, 21.8421309 ], [ 88.3118106, 21.8420028 ], [ 88.3109822, 21.8418811 ], [ 88.3105588, 21.8408546 ], [ 88.3097081, 21.838287 ], [ 88.3088692, 21.8370066 ], [ 88.3081769, 21.8366254 ], [ 88.3048682, 21.8366516 ], [ 88.3032186, 21.8371795 ], [ 88.3018471, 21.8379627 ], [ 88.2993644, 21.837854 ], [ 88.2993596, 21.8373392 ], [ 88.2955006, 21.8374978 ], [ 88.293844, 21.8372532 ], [ 88.2932903, 21.8370001 ], [ 88.2916337, 21.8367558 ], [ 88.2910799, 21.8365027 ], [ 88.2894233, 21.8362581 ], [ 88.2858274, 21.834999 ], [ 88.2852759, 21.8350034 ], [ 88.2847291, 21.8355224 ], [ 88.2844534, 21.8355246 ], [ 88.2836171, 21.8345014 ], [ 88.2829238, 21.8341209 ], [ 88.2822315, 21.8337397 ], [ 88.2813974, 21.8329739 ], [ 88.2755893, 21.8309593 ], [ 88.2728206, 21.8296936 ], [ 88.2722648, 21.8291829 ], [ 88.271433, 21.8286745 ], [ 88.269494, 21.8276596 ], [ 88.2689414, 21.8275356 ], [ 88.2687985, 21.8270219 ], [ 88.2679647, 21.8262559 ], [ 88.2678227, 21.8257422 ], [ 88.2672714, 21.8257463 ], [ 88.2671285, 21.8252324 ], [ 88.26699, 21.8251045 ], [ 88.2664373, 21.8249803 ], [ 88.2662945, 21.8244666 ], [ 88.2643489, 21.8226794 ], [ 88.2639301, 21.8220385 ], [ 88.260884, 21.8205171 ], [ 88.2600501, 21.8197512 ], [ 88.2594963, 21.819498 ], [ 88.2586626, 21.818732 ], [ 88.2572773, 21.8179703 ], [ 88.2557483, 21.8165664 ], [ 88.2551901, 21.8157983 ], [ 88.2543563, 21.8150323 ], [ 88.252671, 21.8114407 ], [ 88.2518057, 21.8070709 ], [ 88.2519964, 21.7972863 ], [ 88.2527987, 21.7944483 ], [ 88.2533075, 21.789553 ], [ 88.2535765, 21.7887787 ], [ 88.253554, 21.7862043 ], [ 88.2538229, 21.78543 ], [ 88.2538163, 21.7846577 ], [ 88.2546252, 21.782592 ], [ 88.2557188, 21.7815538 ], [ 88.2558526, 21.781038 ], [ 88.2566738, 21.7803877 ], [ 88.2577728, 21.7799936 ], [ 88.2577685, 21.7794788 ], [ 88.2585897, 21.7788284 ], [ 88.2591397, 21.7786959 ], [ 88.2594086, 21.7779216 ], [ 88.2599586, 21.7777881 ], [ 88.2602321, 21.7775286 ], [ 88.2607821, 21.7773962 ], [ 88.260915, 21.7768802 ], [ 88.2611884, 21.7766207 ], [ 88.2613221, 21.7761049 ], [ 88.2618734, 21.7761006 ], [ 88.2622818, 21.7755827 ], [ 88.2624156, 21.7750667 ], [ 88.2629667, 21.7750626 ], [ 88.2630996, 21.7745466 ], [ 88.264193, 21.7735084 ], [ 88.2655553, 21.7716959 ], [ 88.2655507, 21.7711811 ], [ 88.2663706, 21.7704024 ], [ 88.2666373, 21.7693707 ], [ 88.2669106, 21.769111 ], [ 88.2667643, 21.7680824 ], [ 88.267591, 21.768076 ], [ 88.2677239, 21.7675602 ], [ 88.2679972, 21.7673005 ], [ 88.268131, 21.7667848 ], [ 88.2686821, 21.7667804 ], [ 88.2693638, 21.7660029 ], [ 88.2694974, 21.7654869 ], [ 88.2700488, 21.7654827 ], [ 88.2700442, 21.7649679 ], [ 88.2714175, 21.7644425 ], [ 88.2716863, 21.763668 ], [ 88.2727876, 21.7635304 ], [ 88.2736097, 21.7630091 ], [ 88.2752599, 21.7626107 ], [ 88.2752531, 21.7618384 ], [ 88.2760775, 21.7615746 ], [ 88.2763462, 21.7608003 ], [ 88.276894, 21.7604094 ], [ 88.2779928, 21.7600152 ], [ 88.27867, 21.7587228 ], [ 88.2792166, 21.7582036 ], [ 88.2797609, 21.757427 ], [ 88.279426, 21.750736 ], [ 88.2791482, 21.7504807 ], [ 88.278023, 21.747915 ], [ 88.2774674, 21.7474043 ], [ 88.2769072, 21.746379 ], [ 88.2767632, 21.7456077 ], [ 88.276212, 21.7456118 ], [ 88.2757868, 21.744328 ], [ 88.2749533, 21.7435621 ], [ 88.2746687, 21.7425345 ], [ 88.2743908, 21.7422792 ], [ 88.273824, 21.7404814 ], [ 88.2735462, 21.7402261 ], [ 88.2732593, 21.7389411 ], [ 88.2729815, 21.7386857 ], [ 88.2720847, 21.7307118 ], [ 88.2711174, 21.7303325 ], [ 88.2669822, 21.7301068 ], [ 88.265752, 21.7312752 ], [ 88.265481, 21.7317922 ], [ 88.2657747, 21.7338494 ], [ 88.2660546, 21.7343622 ], [ 88.2660682, 21.7359069 ], [ 88.266626, 21.736675 ], [ 88.2667688, 21.7371887 ], [ 88.2673232, 21.7375703 ], [ 88.2678754, 21.7376952 ], [ 88.2682973, 21.7387217 ], [ 88.268853, 21.7392323 ], [ 88.2691353, 21.7400025 ], [ 88.269413, 21.7402578 ], [ 88.2695558, 21.7407716 ], [ 88.270107, 21.7407674 ], [ 88.2705334, 21.7423089 ], [ 88.2708112, 21.7425642 ], [ 88.2716581, 21.7448746 ], [ 88.2716649, 21.745647 ], [ 88.2719427, 21.7459023 ], [ 88.2722342, 21.7477022 ], [ 88.272512, 21.7479575 ], [ 88.2729395, 21.7494988 ], [ 88.2734904, 21.7494947 ], [ 88.2737798, 21.7510371 ], [ 88.2743309, 21.7510327 ], [ 88.2744908, 21.753606 ], [ 88.273815, 21.7550267 ], [ 88.2729894, 21.7551622 ], [ 88.2729939, 21.755677 ], [ 88.2710705, 21.7563351 ], [ 88.2707972, 21.7565946 ], [ 88.2691461, 21.7568647 ], [ 88.2559208, 21.7572231 ], [ 88.2478898, 21.7591558 ], [ 88.2462523, 21.7594642 ], [ 88.242336, 21.7602611 ], [ 88.2407669, 21.7605139 ], [ 88.2356817, 21.7613412 ], [ 88.233765, 21.7620113 ], [ 88.2331996, 21.7622699 ], [ 88.2324308, 21.7626266 ], [ 88.2313724, 21.7634905 ], [ 88.2318244, 21.7645292 ], [ 88.2306638, 21.7647978 ], [ 88.2298873, 21.7647978 ], [ 88.2296298, 21.7643927 ], [ 88.2294978, 21.7636076 ], [ 88.2200742, 21.7638233 ], [ 88.2192979, 21.7642916 ], [ 88.2188398, 21.7645158 ], [ 88.2197958, 21.7687405 ], [ 88.2199776, 21.7707262 ], [ 88.2195356, 21.77175 ], [ 88.2193698, 21.7727862 ], [ 88.2195152, 21.7771895 ], [ 88.2191992, 21.7788349 ], [ 88.218107, 21.7818128 ], [ 88.2171377, 21.7836375 ], [ 88.2165385, 21.7846318 ], [ 88.215626, 21.7859922 ], [ 88.2149023, 21.786839 ], [ 88.2142929, 21.7879722 ], [ 88.2132678, 21.7901938 ], [ 88.2126144, 21.7932572 ], [ 88.2121863, 21.7953407 ], [ 88.2120007, 21.7969495 ], [ 88.2116735, 21.7986669 ], [ 88.2101123, 21.7994007 ], [ 88.2098388, 21.7996602 ], [ 88.2095739, 21.8009493 ], [ 88.2082151, 21.8032763 ], [ 88.2079458, 21.8040506 ], [ 88.2076723, 21.8043099 ], [ 88.2076767, 21.804825 ], [ 88.2071297, 21.8053438 ], [ 88.2065848, 21.8061202 ], [ 88.2063155, 21.8068945 ], [ 88.205495, 21.8076728 ], [ 88.2052257, 21.8084472 ], [ 88.2049522, 21.8087065 ], [ 88.2046831, 21.8094808 ], [ 88.2044096, 21.8097403 ], [ 88.2044138, 21.8102551 ], [ 88.2035998, 21.8118059 ], [ 88.2036041, 21.8123207 ], [ 88.2033304, 21.8125802 ], [ 88.2022492, 21.8151625 ], [ 88.2022558, 21.8159348 ], [ 88.2018491, 21.8167101 ], [ 88.2024006, 21.8167061 ], [ 88.2028179, 21.8172179 ], [ 88.2025852, 21.8223687 ], [ 88.2017687, 21.8236618 ], [ 88.2017753, 21.8244341 ], [ 88.2020532, 21.8246896 ], [ 88.2020552, 21.824947 ], [ 88.2017818, 21.8252064 ], [ 88.2009696, 21.8270145 ], [ 88.2010105, 21.8319057 ], [ 88.2004654, 21.8326821 ], [ 88.2004718, 21.8334543 ], [ 88.2007519, 21.8339673 ], [ 88.2007563, 21.8344821 ], [ 88.2004826, 21.8347416 ], [ 88.1991297, 21.8378408 ], [ 88.1985826, 21.8383596 ], [ 88.196956, 21.8417183 ], [ 88.1965461, 21.8421069 ], [ 88.1959957, 21.8422402 ], [ 88.1958638, 21.8430134 ], [ 88.1954559, 21.8436596 ], [ 88.1949056, 21.8437928 ], [ 88.1947716, 21.8443086 ], [ 88.1923091, 21.8466435 ], [ 88.1917661, 21.8476771 ], [ 88.1906695, 21.8484575 ], [ 88.189489, 21.8498967 ], [ 88.1883414, 21.8509464 ], [ 88.186738, 21.851531 ], [ 88.1803995, 21.8550706 ], [ 88.1793489, 21.8561877 ], [ 88.1809041, 21.8580743 ], [ 88.1784909, 21.8606652 ], [ 88.1798539, 21.8618986 ], [ 88.1803888, 21.86196 ], [ 88.1807134, 21.8615942 ], [ 88.1809755, 21.8617211 ], [ 88.1803033, 21.8623481 ], [ 88.1794335, 21.862311 ], [ 88.176873, 21.8606317 ], [ 88.1767422, 21.8600337 ], [ 88.1765435, 21.8598292 ], [ 88.1760149, 21.8601135 ], [ 88.176008239843739, 21.860122311780046 ], [ 88.175808239843732, 21.860386923591008 ], [ 88.1748956, 21.8615944 ], [ 88.1748698, 21.8624947 ], [ 88.175808239843732, 21.862814500848419 ], [ 88.1758502, 21.8628288 ], [ 88.176008239843739, 21.863215999746512 ], [ 88.1762213, 21.863738 ], [ 88.176008239843739, 21.864292330743293 ], [ 88.175808239843732, 21.864812682134236 ], [ 88.1755383, 21.865515 ], [ 88.174924, 21.8660648 ], [ 88.174577, 21.8667211 ], [ 88.1746709, 21.8668838 ], [ 88.175808239843732, 21.867182158471628 ], [ 88.176008239843739, 21.867234624491047 ], [ 88.1767309, 21.8674242 ], [ 88.1783087, 21.8682435 ], [ 88.1786906, 21.8687839 ], [ 88.1782649, 21.8688827 ], [ 88.176831, 21.8680343 ], [ 88.176008239843739, 21.867795990335349 ], [ 88.1759482, 21.8677786 ], [ 88.175808239843732, 21.867725179118615 ], [ 88.1737553, 21.8669416 ], [ 88.1756008, 21.8641281 ], [ 88.1754903, 21.8635135 ], [ 88.1743136, 21.8631283 ], [ 88.1722931, 21.866712 ], [ 88.1713875, 21.8683337 ], [ 88.1716907, 21.8685421 ], [ 88.166576, 21.8758933 ], [ 88.1671846, 21.8769449 ], [ 88.1663654, 21.8779806 ], [ 88.1651383, 21.8796622 ], [ 88.1643152, 21.8801829 ], [ 88.1637644, 21.8803159 ], [ 88.1639124, 21.8816023 ], [ 88.1636406, 21.882119 ], [ 88.163645, 21.8826338 ], [ 88.1639228, 21.8828893 ], [ 88.1642278, 21.8864915 ], [ 88.1649472, 21.8900908 ], [ 88.1654989, 21.8900868 ], [ 88.1656469, 21.891373 ], [ 88.1659247, 21.8916285 ], [ 88.1673312, 21.8949653 ], [ 88.1676091, 21.8952208 ], [ 88.1681734, 21.8967616 ], [ 88.1684512, 21.8970171 ], [ 88.1686022, 21.8985607 ], [ 88.1691541, 21.8985567 ], [ 88.1695926, 21.9016431 ], [ 88.170159, 21.9034412 ], [ 88.1707234, 21.9049817 ], [ 88.1707276, 21.9054968 ], [ 88.1710056, 21.9057521 ], [ 88.1715699, 21.9072928 ], [ 88.1722156, 21.9071173 ], [ 88.1726425, 21.9075004 ], [ 88.1730202, 21.9082958 ], [ 88.1732284, 21.9090939 ], [ 88.1736459, 21.9099501 ], [ 88.1743106, 21.9112253 ], [ 88.1746849, 21.9116795 ], [ 88.1749276, 21.912769 ], [ 88.1751185, 21.9133299 ], [ 88.1751747, 21.91419 ], [ 88.1753753, 21.9150203 ], [ 88.175808239843732, 21.916519665726483 ], [ 88.176008239843739, 21.917212309634518 ], [ 88.1760754, 21.9174449 ], [ 88.1768591, 21.9205261 ], [ 88.1776083, 21.9234438 ], [ 88.1776615, 21.9264222 ], [ 88.1772855, 21.9285435 ], [ 88.1768563, 21.9305549 ], [ 88.1761252, 21.9324408 ], [ 88.176008239843739, 21.932682507589618 ], [ 88.175808239843732, 21.933095823709149 ], [ 88.175583, 21.9335613 ], [ 88.1749078, 21.934553 ], [ 88.1740564, 21.9355129 ], [ 88.1729685, 21.936494 ], [ 88.1720734, 21.9369434 ], [ 88.171397, 21.9375312 ], [ 88.1705, 21.9382509 ], [ 88.1700664, 21.9386649 ], [ 88.1697677, 21.9393983 ], [ 88.1686952, 21.9398356 ], [ 88.1678263, 21.9404233 ], [ 88.1670334, 21.9408247 ], [ 88.166055, 21.9415881 ], [ 88.164916, 21.9424081 ], [ 88.1635891, 21.9435662 ], [ 88.1630446, 21.9444717 ], [ 88.1624968, 21.9449904 ], [ 88.1615063, 21.9457206 ], [ 88.1607912, 21.9465977 ], [ 88.1601654, 21.9474587 ], [ 88.1595655, 21.9483033 ], [ 88.1591957, 21.9490081 ], [ 88.1589219, 21.9492674 ], [ 88.1583804, 21.9505585 ], [ 88.1578347, 21.9513347 ], [ 88.1578389, 21.9518495 ], [ 88.1574596, 21.9526117 ], [ 88.1572885, 21.9532718 ], [ 88.1567861, 21.954109 ], [ 88.1566835, 21.9545203 ], [ 88.1568886, 21.9548662 ], [ 88.1568045, 21.9552216 ], [ 88.1563788, 21.9559152 ], [ 88.1556423, 21.9566761 ], [ 88.1552439, 21.9569292 ], [ 88.1551409, 21.9573397 ], [ 88.1548727, 21.9578307 ], [ 88.1547955, 21.9580622 ], [ 88.1549074, 21.9584556 ], [ 88.1550041, 21.9590057 ], [ 88.1547706, 21.9592019 ], [ 88.1548838, 21.9595138 ], [ 88.1556188, 21.9602741 ], [ 88.1563179, 21.9609874 ], [ 88.1571996, 21.961927 ], [ 88.1575454, 21.9615675 ], [ 88.1578083, 21.9615706 ], [ 88.1585891, 21.9624874 ], [ 88.1581497, 21.9628609 ], [ 88.1593266, 21.9644958 ], [ 88.1607363, 21.9668071 ], [ 88.1618126, 21.9676997 ], [ 88.1626468, 21.9684661 ], [ 88.1630658, 21.9687851 ], [ 88.1636626, 21.9688961 ], [ 88.1643839, 21.9691236 ], [ 88.1650044, 21.9696466 ], [ 88.1657638, 21.9700674 ], [ 88.1670825, 21.97088 ], [ 88.1675425, 21.9710554 ], [ 88.1684953, 21.9710292 ], [ 88.1696634, 21.9714243 ], [ 88.1703558, 21.971809 ], [ 88.170682, 21.9722709 ], [ 88.1711912, 21.9730693 ], [ 88.171595, 21.9733388 ], [ 88.1719435, 21.973638 ], [ 88.1722129, 21.9738666 ], [ 88.1723065, 21.9741148 ], [ 88.1728226, 21.974638 ], [ 88.1730022, 21.974802 ], [ 88.1735467, 21.9754893 ], [ 88.173772, 21.9756679 ], [ 88.1742121, 21.9763168 ], [ 88.1747985, 21.9769283 ], [ 88.1751347, 21.9772705 ], [ 88.1754933, 21.9775393 ], [ 88.1757715, 21.9777528 ], [ 88.175808239843732, 21.977803890521582 ], [ 88.176008239843739, 21.978082011038083 ], [ 88.1760503, 21.9781405 ], [ 88.1765298, 21.978536 ], [ 88.1772248, 21.9791752 ], [ 88.1775028, 21.9794306 ], [ 88.1778572, 21.9798043 ], [ 88.1785268, 21.98078 ], [ 88.179203, 21.9817724 ], [ 88.1799367, 21.9826142 ], [ 88.1801552, 21.9830159 ], [ 88.1808464, 21.9837902 ], [ 88.1818262, 21.9848059 ], [ 88.1831471, 21.9865691 ], [ 88.1837856, 21.9871717 ], [ 88.1840268, 21.9875596 ], [ 88.1844756, 21.9881337 ], [ 88.1847989, 21.9886021 ], [ 88.1850226, 21.9890963 ], [ 88.1857347, 21.9900098 ], [ 88.185825212255892, 21.99015174921875 ], [ 88.1862304, 21.9907872 ], [ 88.1871304, 21.9919762 ], [ 88.1881068, 21.9932563 ], [ 88.188663, 21.9937672 ], [ 88.1892215, 21.9945355 ], [ 88.1899186, 21.9953028 ], [ 88.1906167, 21.9963276 ], [ 88.1913138, 21.9970947 ], [ 88.1918724, 21.997863 ], [ 88.1927069, 21.9986294 ], [ 88.1931291, 21.999656 ], [ 88.1934073, 21.9999116 ], [ 88.1945245, 22.0014479 ], [ 88.1950809, 22.0019588 ], [ 88.1966148, 22.0037498 ], [ 88.1973173, 22.0052894 ], [ 88.197876, 22.0060577 ], [ 88.1988513, 22.0070803 ], [ 88.1999707, 22.0088741 ], [ 88.2010902, 22.0106681 ], [ 88.2019314, 22.0122066 ], [ 88.2030509, 22.0140006 ], [ 88.2041703, 22.0157944 ], [ 88.2052877, 22.0173309 ], [ 88.2054317, 22.0181021 ], [ 88.2065513, 22.019896 ], [ 88.2075267, 22.0209185 ], [ 88.2082296, 22.0224581 ], [ 88.2093515, 22.0245093 ], [ 88.2104712, 22.0263031 ], [ 88.2121561, 22.0296376 ], [ 88.2135651, 22.032974 ], [ 88.2146982, 22.0363123 ], [ 88.2165648, 22.0468069 ], [ 88.2168751, 22.0486534 ], [ 88.2169526, 22.0496178 ], [ 88.2173041, 22.0504523 ], [ 88.2163934, 22.0521659 ], [ 88.2166718, 22.0524212 ], [ 88.2166827, 22.0537083 ], [ 88.2186313, 22.0554961 ], [ 88.2194818, 22.058064 ], [ 88.2203234, 22.0596025 ], [ 88.2217441, 22.0642258 ], [ 88.222303, 22.0649939 ], [ 88.2223253, 22.067568 ], [ 88.2228821, 22.0680789 ], [ 88.2240112, 22.0709022 ], [ 88.2246122, 22.0765614 ], [ 88.2243671, 22.0801674 ], [ 88.2242318, 22.0804259 ], [ 88.2247874, 22.0808075 ], [ 88.225341, 22.0809324 ], [ 88.2266145, 22.084527 ], [ 88.2266213, 22.0852993 ], [ 88.2263472, 22.0855588 ], [ 88.2250017, 22.089688 ], [ 88.2244782, 22.0930386 ], [ 88.2244848, 22.0938109 ], [ 88.2234243, 22.0989676 ], [ 88.2215372, 22.1043879 ], [ 88.2201758, 22.1067151 ], [ 88.2188279, 22.1105867 ], [ 88.2180057, 22.1113652 ], [ 88.2174752, 22.1139435 ], [ 88.2172034, 22.1144605 ], [ 88.2161601, 22.1216765 ], [ 88.2145311, 22.1250354 ], [ 88.2138441, 22.1254262 ], [ 88.2124693, 22.1262087 ], [ 88.211788, 22.1273728 ], [ 88.2112509, 22.1291788 ], [ 88.2109966, 22.1317551 ], [ 88.2107247, 22.132272 ], [ 88.2107313, 22.1330443 ], [ 88.2110099, 22.1332996 ], [ 88.2116568, 22.1366913 ], [ 88.2116737, 22.1408978 ], [ 88.2113303, 22.1449025 ], [ 88.2111217, 22.1473477 ], [ 88.2108809, 22.1488732 ], [ 88.2102313, 22.1507613 ], [ 88.21024, 22.151791 ], [ 88.209694, 22.1525674 ], [ 88.2094243, 22.1533417 ], [ 88.2083709, 22.1561098 ], [ 88.2078249, 22.1568862 ], [ 88.2078293, 22.1574011 ], [ 88.2067846, 22.1605239 ], [ 88.2061574, 22.1606038 ], [ 88.2050676, 22.1632073 ], [ 88.2045666, 22.1643366 ], [ 88.2041858, 22.1652548 ], [ 88.2038631, 22.1667576 ], [ 88.2037267, 22.1668869 ], [ 88.202332, 22.167547 ], [ 88.2015845, 22.1681703 ], [ 88.2014279, 22.1685529 ], [ 88.2018761, 22.1689402 ], [ 88.2011931, 22.1699768 ], [ 88.2009044, 22.1699377 ], [ 88.2004306, 22.1704264 ], [ 88.19986, 22.1711221 ], [ 88.1989288, 22.171959 ], [ 88.1983882, 22.1730448 ], [ 88.1974544, 22.1737508 ], [ 88.1969113, 22.1743392 ], [ 88.19677, 22.175214 ], [ 88.1964342, 22.176485 ], [ 88.1960153, 22.1773638 ], [ 88.1948305, 22.1780144 ], [ 88.1931556, 22.1787405 ], [ 88.1928857, 22.1795148 ], [ 88.1920955, 22.1809211 ], [ 88.1909727, 22.1825024 ], [ 88.1900315, 22.183735 ], [ 88.1895871, 22.184226 ], [ 88.1894473, 22.1847162 ], [ 88.1894918, 22.1855735 ], [ 88.1884848, 22.186269 ], [ 88.1880843, 22.1870181 ], [ 88.1872796, 22.1875252 ], [ 88.1861804, 22.1874152 ], [ 88.1856319, 22.1879342 ], [ 88.1842596, 22.189103 ], [ 88.1828829, 22.1897562 ], [ 88.1823354, 22.1904043 ], [ 88.1815891, 22.1909406 ], [ 88.1806268, 22.1917299 ], [ 88.1809706, 22.1924736 ], [ 88.1813016, 22.1927076 ], [ 88.1815761, 22.1930551 ], [ 88.1812535, 22.193244 ], [ 88.1801413, 22.1924797 ], [ 88.1799401, 22.1919706 ], [ 88.1790301, 22.1921482 ], [ 88.1779309, 22.1929284 ], [ 88.1765554, 22.1937106 ], [ 88.176008239843739, 22.193853845461419 ], [ 88.173521, 22.194505 ], [ 88.1732467, 22.1947643 ], [ 88.1699378, 22.195586 ], [ 88.1693893, 22.1961048 ], [ 88.1685621, 22.1963682 ], [ 88.1674609, 22.1968183 ], [ 88.1652558, 22.1976065 ], [ 88.163325, 22.1981351 ], [ 88.1589848, 22.1991287 ], [ 88.156252, 22.1984812 ], [ 88.1537467, 22.1987365 ], [ 88.1506153, 22.1989979 ], [ 88.1486822, 22.1992689 ], [ 88.1445461, 22.2005853 ], [ 88.1428916, 22.2011117 ], [ 88.1390256, 22.2016537 ], [ 88.1382664, 22.2018901 ], [ 88.1367651, 22.2016264 ], [ 88.1362102, 22.2013729 ], [ 88.1334946, 22.2014349 ], [ 88.1313278, 22.2022339 ], [ 88.1295478, 22.2026082 ], [ 88.1278446, 22.2036628 ], [ 88.126941162614898, 22.204273042840789 ], [ 88.1268826, 22.2043126 ], [ 88.1260583, 22.2049624 ], [ 88.1241313, 22.2060054 ], [ 88.1224787, 22.2067892 ], [ 88.1198205, 22.2078263 ], [ 88.1189718, 22.2083018 ], [ 88.1172662, 22.2085724 ], [ 88.1164099, 22.2088551 ], [ 88.1130965, 22.2090415 ], [ 88.1015523, 22.2097442 ], [ 88.0959124, 22.2094015 ], [ 88.0925077, 22.208925 ], [ 88.0898459, 22.2087131 ], [ 88.0882808, 22.2084849 ], [ 88.0866999, 22.2084955 ], [ 88.0850611, 22.2090378 ], [ 88.0804738, 22.2092613 ], [ 88.0739996, 22.2098511 ], [ 88.0724602, 22.2098293 ], [ 88.0710818, 22.2103532 ], [ 88.0699838, 22.2113902 ], [ 88.0694064, 22.2128814 ], [ 88.069461, 22.2153846 ], [ 88.0493096, 22.2197631 ], [ 88.0450541, 22.2064156 ], [ 88.0452777, 22.2063027 ], [ 88.0455501, 22.2062349 ], [ 88.0456436, 22.2061596 ], [ 88.0457493, 22.2060994 ], [ 88.0461924, 22.2059677 ], [ 88.0464323, 22.2058435 ], [ 88.0468225, 22.2056628 ], [ 88.0471153, 22.2055913 ], [ 88.0474283, 22.2055273 ], [ 88.0477779, 22.2054407 ], [ 88.047847, 22.2053955 ], [ 88.0479975, 22.2052337 ], [ 88.0482373, 22.2050643 ], [ 88.0483186, 22.2050907 ], [ 88.0483959, 22.2050794 ], [ 88.0484813, 22.204974 ], [ 88.0486032, 22.2048912 ], [ 88.048652, 22.2047557 ], [ 88.0487171, 22.2047143 ], [ 88.0488593, 22.2046691 ], [ 88.0488837, 22.2045562 ], [ 88.048881021830624, 22.204473042840789 ], [ 88.0488797, 22.204432 ], [ 88.0488431, 22.2043379 ], [ 88.0488431, 22.204273042840789 ], [ 88.0488431, 22.2042513 ], [ 88.048774, 22.2041233 ], [ 88.0487984, 22.2040255 ], [ 88.048835, 22.2039577 ], [ 88.0488593, 22.2038561 ], [ 88.0489569, 22.2038711 ], [ 88.0490138, 22.2039276 ], [ 88.0491277, 22.2041384 ], [ 88.049209, 22.2042588 ], [ 88.049274, 22.2043642 ], [ 88.0493065, 22.2044207 ], [ 88.0493513, 22.2044809 ], [ 88.0494122, 22.2045035 ], [ 88.0494285, 22.2045599 ], [ 88.0494936, 22.2046202 ], [ 88.0495098, 22.2047105 ], [ 88.0495383, 22.204782 ], [ 88.0495993, 22.2048008 ], [ 88.0497497, 22.2048761 ], [ 88.0498798, 22.2048761 ], [ 88.0499733, 22.204846 ], [ 88.0500383, 22.2047557 ], [ 88.050079, 22.2046729 ], [ 88.050079, 22.2045976 ], [ 88.0500383, 22.2045712 ], [ 88.05014, 22.2043605 ], [ 88.050205, 22.2042626 ], [ 88.0502996, 22.2041816 ], [ 88.0503676, 22.204112 ], [ 88.0504205, 22.2040631 ], [ 88.0505131, 22.20398 ], [ 88.0505627, 22.2040455 ], [ 88.0507538, 22.2039833 ], [ 88.0510263, 22.2038129 ], [ 88.0513555, 22.2035802 ], [ 88.0514758, 22.2034262 ], [ 88.0516704, 22.2032067 ], [ 88.0517766, 22.2030756 ], [ 88.0518297, 22.2029413 ], [ 88.0519005, 22.2028364 ], [ 88.0520031, 22.2026857 ], [ 88.0521128, 22.2025612 ], [ 88.0518863, 22.2021581 ], [ 88.0519642, 22.2019517 ], [ 88.052304, 22.2015716 ], [ 88.0529304, 22.2006967 ], [ 88.0531074, 22.2004575 ], [ 88.0534542, 22.2002346 ], [ 88.0540382, 22.1997726 ], [ 88.0543425, 22.1994973 ], [ 88.0546115, 22.1992221 ], [ 88.0549654, 22.1988616 ], [ 88.0553441, 22.1985077 ], [ 88.0556308, 22.1981735 ], [ 88.0558609, 22.1978753 ], [ 88.0563422, 22.1973575 ], [ 88.0566996, 22.1969709 ], [ 88.0569969, 22.1966399 ], [ 88.057411, 22.1962729 ], [ 88.0577685, 22.1959092 ], [ 88.0582003, 22.1955028 ], [ 88.0584657, 22.1953127 ], [ 88.0585117, 22.195375 ], [ 88.059262, 22.1948179 ], [ 88.0591594, 22.1946311 ], [ 88.0593965, 22.1944738 ], [ 88.0599002, 22.194079 ], [ 88.0604335, 22.1936841 ], [ 88.0606565, 22.1935071 ], [ 88.0608511, 22.19334 ], [ 88.0615492, 22.1927809 ], [ 88.0620992, 22.1923908 ], [ 88.0629074, 22.1918621 ], [ 88.0636612, 22.1912788 ], [ 88.0641461, 22.1908888 ], [ 88.0645708, 22.1905447 ], [ 88.0652574, 22.1900335 ], [ 88.0659617, 22.1896206 ], [ 88.0663864, 22.1894207 ], [ 88.0667368, 22.1891192 ], [ 88.0669987, 22.1888931 ], [ 88.067119, 22.1886014 ], [ 88.0671261, 22.1884408 ], [ 88.0671261, 22.1883392 ], [ 88.0674038, 22.1883317 ], [ 88.067611, 22.1883261 ], [ 88.0676181, 22.1884572 ], [ 88.0676428, 22.1885916 ], [ 88.0677172, 22.1887194 ], [ 88.0678056, 22.1887718 ], [ 88.067926, 22.1887784 ], [ 88.0680675, 22.1887259 ], [ 88.0685347, 22.1885588 ], [ 88.069016, 22.1884048 ], [ 88.0695045, 22.1882507 ], [ 88.0700176, 22.1880934 ], [ 88.0706051, 22.1880246 ], [ 88.070906, 22.1879493 ], [ 88.0711785, 22.1878509 ], [ 88.0714348, 22.1877727 ], [ 88.0716897, 22.1876708 ], [ 88.0719498, 22.1875665 ], [ 88.0722556, 22.1875069 ], [ 88.0727357, 22.1873852 ], [ 88.0730737, 22.1872859 ], [ 88.073409, 22.1872263 ], [ 88.0738891, 22.1870971 ], [ 88.0744121, 22.1869829 ], [ 88.0745328, 22.1869332 ], [ 88.0746723, 22.1868761 ], [ 88.074801, 22.1868264 ], [ 88.0749646, 22.1868587 ], [ 88.0750371, 22.1868214 ], [ 88.0751256, 22.1867047 ], [ 88.0752007, 22.1865681 ], [ 88.0756137, 22.1866997 ], [ 88.0758444, 22.1867594 ], [ 88.0760938, 22.1867867 ], [ 88.0763782, 22.1868289 ], [ 88.0767054, 22.1868115 ], [ 88.0769468, 22.1867569 ], [ 88.0769924, 22.1867246 ], [ 88.0770246, 22.1866724 ], [ 88.0770943, 22.1866377 ], [ 88.077148, 22.1866103 ], [ 88.0771694, 22.1866575 ], [ 88.0772096, 22.1866973 ], [ 88.077494, 22.1867122 ], [ 88.0777219, 22.1866302 ], [ 88.0778239, 22.1866228 ], [ 88.0779312, 22.1866451 ], [ 88.0781699, 22.1866153 ], [ 88.0781752, 22.1865507 ], [ 88.0781457, 22.1864936 ], [ 88.0781484, 22.1863992 ], [ 88.0782155, 22.1863173 ], [ 88.078304, 22.1862229 ], [ 88.0784596, 22.1862328 ], [ 88.0785883, 22.186213 ], [ 88.07865, 22.1862527 ], [ 88.0787787, 22.1862204 ], [ 88.0789155, 22.1862055 ], [ 88.0789397, 22.1862825 ], [ 88.0789584, 22.186352 ], [ 88.0789745, 22.186434 ], [ 88.0790201, 22.1864638 ], [ 88.0791408, 22.1864439 ], [ 88.0792267, 22.1864265 ], [ 88.0792937, 22.1864092 ], [ 88.0793742, 22.1863967 ], [ 88.0793715, 22.1865184 ], [ 88.0793876, 22.1865905 ], [ 88.0794466, 22.1866352 ], [ 88.0795539, 22.1866948 ], [ 88.0797309, 22.1867146 ], [ 88.0799053, 22.1867022 ], [ 88.080093, 22.1866923 ], [ 88.080321, 22.1866153 ], [ 88.0805409, 22.1865209 ], [ 88.080836, 22.1865085 ], [ 88.081131, 22.1864911 ], [ 88.0813, 22.1864415 ], [ 88.0813966, 22.1864216 ], [ 88.0814314, 22.1865756 ], [ 88.0814422, 22.1867395 ], [ 88.081469, 22.1867767 ], [ 88.0817614, 22.1868065 ], [ 88.0820483, 22.1868339 ], [ 88.0823729, 22.1868512 ], [ 88.0824185, 22.1868438 ], [ 88.08244, 22.1867941 ], [ 88.0824426, 22.1866923 ], [ 88.0824373, 22.1866302 ], [ 88.0824775, 22.1866004 ], [ 88.0825821, 22.1866054 ], [ 88.0826706, 22.1866252 ], [ 88.0827377, 22.1866203 ], [ 88.0827833, 22.186593 ], [ 88.0828879, 22.186588 ], [ 88.0829067, 22.1866426 ], [ 88.0829362, 22.1867171 ], [ 88.0829496, 22.1868041 ], [ 88.0829978, 22.1868264 ], [ 88.0832983, 22.1867941 ], [ 88.0836282, 22.1868165 ], [ 88.0841297, 22.1867693 ], [ 88.084693, 22.1866948 ], [ 88.0853689, 22.1866426 ], [ 88.0855594, 22.1866029 ], [ 88.0857686, 22.1866029 ], [ 88.0858946, 22.1864713 ], [ 88.08601, 22.1863496 ], [ 88.0861843, 22.1860292 ], [ 88.0864177, 22.185756 ], [ 88.0865437, 22.1855995 ], [ 88.08671, 22.1854505 ], [ 88.086879, 22.185366 ], [ 88.0870614, 22.1853064 ], [ 88.0872492, 22.1852369 ], [ 88.0874771, 22.1852145 ], [ 88.0876729, 22.1852369 ], [ 88.0878822, 22.185299 ], [ 88.0883194, 22.1854405 ], [ 88.0885044, 22.1855275 ], [ 88.0886949, 22.185607 ], [ 88.0888156, 22.1855921 ], [ 88.0889068, 22.1855771 ], [ 88.0890328, 22.1856268 ], [ 88.0891938, 22.1856864 ], [ 88.0893788, 22.1857585 ], [ 88.0895049, 22.1857957 ], [ 88.0896363, 22.1858752 ], [ 88.0897329, 22.1858628 ], [ 88.0897999, 22.1858255 ], [ 88.0898482, 22.1857982 ], [ 88.0899206, 22.1858007 ], [ 88.0900011, 22.1858354 ], [ 88.0900628, 22.1858951 ], [ 88.0902693, 22.1860217 ], [ 88.0904388, 22.1861516 ], [ 88.0905858, 22.1862179 ], [ 88.0907521, 22.1864116 ], [ 88.0909962, 22.1865855 ], [ 88.0912081, 22.1866252 ], [ 88.0913502, 22.1865756 ], [ 88.0914844, 22.1865234 ], [ 88.0915487, 22.1864415 ], [ 88.0916426, 22.1863446 ], [ 88.0917284, 22.1862626 ], [ 88.0917901, 22.1861981 ], [ 88.0921683, 22.1865085 ], [ 88.0920744, 22.1866029 ], [ 88.0919725, 22.1866973 ], [ 88.0918438, 22.1867842 ], [ 88.0917231, 22.186891 ], [ 88.0916265, 22.1869431 ], [ 88.0915434, 22.1870102 ], [ 88.0915005, 22.1871319 ], [ 88.0915112, 22.1872958 ], [ 88.091546, 22.1874771 ], [ 88.0914709, 22.1875566 ], [ 88.0914683, 22.1876137 ], [ 88.0914897, 22.1876733 ], [ 88.0916185, 22.1878422 ], [ 88.0917392, 22.1880086 ], [ 88.091774, 22.18817 ], [ 88.091876, 22.1882992 ], [ 88.0919993, 22.1884134 ], [ 88.0920718, 22.1885177 ], [ 88.0921576, 22.1886121 ], [ 88.0923266, 22.1887139 ], [ 88.0924339, 22.1888481 ], [ 88.092737, 22.1892529 ], [ 88.0928898, 22.1893522 ], [ 88.0930588, 22.1894665 ], [ 88.0933673, 22.1896428 ], [ 88.0936865, 22.1897844 ], [ 88.0941585, 22.1900079 ], [ 88.0946413, 22.1901842 ], [ 88.0946816, 22.1901544 ], [ 88.0947996, 22.1901718 ], [ 88.0948988, 22.1902637 ], [ 88.0949685, 22.1903059 ], [ 88.0950356, 22.1903034 ], [ 88.0951858, 22.1902935 ], [ 88.0953414, 22.1903456 ], [ 88.095513, 22.1903928 ], [ 88.0956606, 22.1904003 ], [ 88.095859, 22.1903233 ], [ 88.0963472, 22.1902115 ], [ 88.0965001, 22.1902786 ], [ 88.0965913, 22.1903779 ], [ 88.0966718, 22.1904003 ], [ 88.0967603, 22.1903978 ], [ 88.0969078, 22.1903804 ], [ 88.0969909, 22.1904028 ], [ 88.0970446, 22.1905145 ], [ 88.0971358, 22.1906139 ], [ 88.0971867, 22.1907231 ], [ 88.0972538, 22.1908126 ], [ 88.0973343, 22.1908225 ], [ 88.0973959, 22.1907703 ], [ 88.0974764, 22.1907728 ], [ 88.0975032, 22.1908175 ], [ 88.0975488, 22.1908523 ], [ 88.0976159, 22.1908523 ], [ 88.0976695, 22.1908001 ], [ 88.0978144, 22.1908448 ], [ 88.0978573, 22.1909144 ], [ 88.0979056, 22.1909417 ], [ 88.0980424, 22.1909516 ], [ 88.0981952, 22.1909889 ], [ 88.0983857, 22.191041 ], [ 88.0984393, 22.1911205 ], [ 88.0984957, 22.1912149 ], [ 88.0986915, 22.19119 ], [ 88.0989033, 22.191272 ], [ 88.0991421, 22.1912869 ], [ 88.0992279, 22.1913043 ], [ 88.099295, 22.191349 ], [ 88.0993647, 22.1913987 ], [ 88.0994425, 22.191431 ], [ 88.0995498, 22.1913962 ], [ 88.0996302, 22.1913862 ], [ 88.0998636, 22.1913738 ], [ 88.1001211, 22.1912298 ], [ 88.1003517, 22.1910261 ], [ 88.1004027, 22.1908846 ], [ 88.1005127, 22.1907852 ], [ 88.1006414, 22.1907107 ], [ 88.1007863, 22.1906809 ], [ 88.1010598, 22.1906139 ], [ 88.1012074, 22.190594 ], [ 88.1013603, 22.1906114 ], [ 88.1014273, 22.1906164 ], [ 88.1014997, 22.1906337 ], [ 88.1016499, 22.1906809 ], [ 88.1017572, 22.1907703 ], [ 88.1018538, 22.1908573 ], [ 88.1019423, 22.1909715 ], [ 88.1019986, 22.1910957 ], [ 88.1020764, 22.1912571 ], [ 88.102122, 22.1913242 ], [ 88.1021569, 22.191421 ], [ 88.1021756, 22.1914856 ], [ 88.1022212, 22.1915427 ], [ 88.1023285, 22.1915055 ], [ 88.1024009, 22.191493 ], [ 88.1024573, 22.1915204 ], [ 88.1024921, 22.191575 ], [ 88.1025324, 22.191647 ], [ 88.102637, 22.1916967 ], [ 88.1028247, 22.1917041 ], [ 88.1029133, 22.191652 ], [ 88.1029991, 22.1916768 ], [ 88.103101, 22.1916917 ], [ 88.1031547, 22.1916818 ], [ 88.1032458, 22.1917339 ], [ 88.1035731, 22.1915998 ], [ 88.1037877, 22.1916073 ], [ 88.1040532, 22.1916495 ], [ 88.1041578, 22.1915576 ], [ 88.104359, 22.1916147 ], [ 88.1045387, 22.1915973 ], [ 88.1046701, 22.1916396 ], [ 88.1047559, 22.1916222 ], [ 88.1048632, 22.1916247 ], [ 88.1049276, 22.1915278 ], [ 88.1050215, 22.1914906 ], [ 88.105118, 22.1915104 ], [ 88.1052253, 22.1914632 ], [ 88.1053433, 22.191426 ], [ 88.1054587, 22.1913838 ], [ 88.1056223, 22.1913614 ], [ 88.1057805, 22.1913291 ], [ 88.1061051, 22.1912596 ], [ 88.1064484, 22.1911801 ], [ 88.1066093, 22.1911155 ], [ 88.1067515, 22.191046 ], [ 88.1070224, 22.1908846 ], [ 88.1072531, 22.1907654 ], [ 88.1073925, 22.1907033 ], [ 88.1075535, 22.190666 ], [ 88.1079585, 22.1907306 ], [ 88.1080658, 22.1907331 ], [ 88.1081757, 22.1907778 ], [ 88.1082401, 22.1908126 ], [ 88.1083555, 22.1907902 ], [ 88.1084413, 22.1907753 ], [ 88.1085298, 22.190748 ], [ 88.108739, 22.1907132 ], [ 88.1091252, 22.1906213 ], [ 88.109136, 22.1905741 ], [ 88.1092513, 22.1905344 ], [ 88.1092996, 22.1904996 ], [ 88.1097395, 22.1903705 ], [ 88.1099701, 22.1902836 ], [ 88.1100104, 22.1902513 ], [ 88.1100211, 22.1902041 ], [ 88.110005, 22.1901569 ], [ 88.1099487, 22.1901519 ], [ 88.1099326, 22.1899855 ], [ 88.1100292, 22.1900079 ], [ 88.1101043, 22.1900178 ], [ 88.1101391, 22.1900079 ], [ 88.1101928, 22.1900377 ], [ 88.1102491, 22.1900501 ], [ 88.1103349, 22.1900352 ], [ 88.1103966, 22.1900203 ], [ 88.1104637, 22.189983 ], [ 88.110638, 22.1899681 ], [ 88.1107104, 22.1899979 ], [ 88.1108526, 22.1899557 ], [ 88.1109384, 22.189911 ], [ 88.1110403, 22.1898887 ], [ 88.1111181, 22.1898912 ], [ 88.1112174, 22.1898489 ], [ 88.1114829, 22.1897397 ], [ 88.1115741, 22.1897123 ], [ 88.1116707, 22.1897297 ], [ 88.1118235, 22.1896726 ], [ 88.1119282, 22.1896552 ], [ 88.1119523, 22.1896229 ], [ 88.1119603, 22.1895708 ], [ 88.1122366, 22.1894938 ], [ 88.1124324, 22.1894292 ], [ 88.1125304, 22.1894393 ], [ 88.1130132, 22.1894294 ], [ 88.1133136, 22.1893598 ], [ 88.1134638, 22.1891512 ], [ 88.113496, 22.1889128 ], [ 88.1135604, 22.1888532 ], [ 88.1138072, 22.1888929 ], [ 88.1141719, 22.1889227 ], [ 88.1147485, 22.1888208 ], [ 88.1148686, 22.1887837 ], [ 88.1150839, 22.1886843 ], [ 88.1157705, 22.1885849 ], [ 88.1160579, 22.1885383 ], [ 88.116061, 22.1884613 ], [ 88.1161935, 22.1884328 ], [ 88.1163475, 22.1884071 ], [ 88.11644, 22.1884071 ], [ 88.1165201, 22.1884585 ], [ 88.1169576, 22.1882759 ], [ 88.1173889, 22.1882588 ], [ 88.1175892, 22.1882359 ], [ 88.1178357, 22.1882017 ], [ 88.1185493, 22.1881478 ], [ 88.1189785, 22.188118 ], [ 88.1194183, 22.1880584 ], [ 88.1196973, 22.1880684 ], [ 88.1199601, 22.188123 ], [ 88.1201452, 22.1880659 ], [ 88.1202793, 22.1879938 ], [ 88.1202659, 22.1878846 ], [ 88.1202552, 22.1878374 ], [ 88.1202954, 22.1877803 ], [ 88.1206495, 22.187661 ], [ 88.1209579, 22.1876263 ], [ 88.1212422, 22.1876312 ], [ 88.1216607, 22.1873233 ], [ 88.122004, 22.1873531 ], [ 88.1224868, 22.1872637 ], [ 88.1224975, 22.1868663 ], [ 88.1241605, 22.1866477 ], [ 88.1255016, 22.1864391 ], [ 88.1260166, 22.186449 ], [ 88.1269071, 22.1862603 ], [ 88.1276903, 22.1860715 ], [ 88.128216, 22.1858927 ], [ 88.1288168, 22.1858927 ], [ 88.129321, 22.1856245 ], [ 88.1297931, 22.1858232 ], [ 88.1302545, 22.1857735 ], [ 88.1308124, 22.185843 ], [ 88.1311879, 22.1857636 ], [ 88.131381, 22.1855847 ], [ 88.1317028, 22.1856245 ], [ 88.1320569, 22.1855251 ], [ 88.1326577, 22.1853662 ], [ 88.1332585, 22.1851973 ], [ 88.1337091, 22.1850383 ], [ 88.134149, 22.1847701 ], [ 88.1350073, 22.1842436 ], [ 88.1353828, 22.1839853 ], [ 88.1357206, 22.1838867 ], [ 88.1359515, 22.1837369 ], [ 88.1364021, 22.1834687 ], [ 88.1369922, 22.1827633 ], [ 88.1371638, 22.1823659 ], [ 88.1375608, 22.1817102 ], [ 88.1380436, 22.1811936 ], [ 88.1389448, 22.1801405 ], [ 88.1393418, 22.1794848 ], [ 88.1396958, 22.1789483 ], [ 88.1401679, 22.1783323 ], [ 88.1407258, 22.1777362 ], [ 88.1411335, 22.1772296 ], [ 88.1415412, 22.1765341 ], [ 88.1417343, 22.175789 ], [ 88.1419596, 22.1750935 ], [ 88.1422171, 22.1743483 ], [ 88.1425819, 22.173474 ], [ 88.1430432, 22.1725997 ], [ 88.1434831, 22.1713975 ], [ 88.1441483, 22.1701953 ], [ 88.1445453, 22.1696588 ], [ 88.1448242, 22.1690229 ], [ 88.1451568, 22.1685659 ], [ 88.1455881, 22.1682309 ], [ 88.1460763, 22.1674752 ], [ 88.1470558, 22.1661316 ], [ 88.1477532, 22.1652473 ], [ 88.1474206, 22.1650784 ], [ 88.1479463, 22.1642437 ], [ 88.1483325, 22.1637867 ], [ 88.1487763, 22.1637058 ], [ 88.1492216, 22.1636099 ], [ 88.1494635, 22.163186 ], [ 88.1499097, 22.163121 ], [ 88.1500492, 22.1629719 ], [ 88.1507036, 22.162336 ], [ 88.1512079, 22.1618293 ], [ 88.1517765, 22.1611635 ], [ 88.1521306, 22.1608158 ], [ 88.1522486, 22.1607462 ], [ 88.1523237, 22.1605773 ], [ 88.1526992, 22.1598718 ], [ 88.1531605, 22.1590769 ], [ 88.1538257, 22.1580932 ], [ 88.1542441, 22.1575268 ], [ 88.1549952, 22.1566127 ], [ 88.1559929, 22.1555395 ], [ 88.1567118, 22.1547744 ], [ 88.1575057, 22.1538801 ], [ 88.1582996, 22.1528963 ], [ 88.1593618, 22.1515847 ], [ 88.1597158, 22.1512468 ], [ 88.1600484, 22.1507698 ], [ 88.1613574, 22.149319 ], [ 88.1621406, 22.1485837 ], [ 88.1625912, 22.1479874 ], [ 88.1628379, 22.1477092 ], [ 88.1633207, 22.1473515 ], [ 88.1635031, 22.1471229 ], [ 88.1638464, 22.146795 ], [ 88.1641683, 22.1465863 ], [ 88.1644365, 22.1461888 ], [ 88.1645438, 22.1461093 ], [ 88.1652197, 22.1457217 ], [ 88.1658098, 22.1452845 ], [ 88.1660673, 22.1450659 ], [ 88.1667432, 22.1446783 ], [ 88.1672153, 22.1443504 ], [ 88.1678483, 22.1437343 ], [ 88.1681809, 22.1432672 ], [ 88.1682775, 22.142979 ], [ 88.1683633, 22.1427803 ], [ 88.1685886, 22.1425914 ], [ 88.1690607, 22.1423529 ], [ 88.1695971, 22.1417468 ], [ 88.1700799, 22.1411008 ], [ 88.1709382, 22.139799 ], [ 88.1718287, 22.1386561 ], [ 88.1721184, 22.1382785 ], [ 88.1723544, 22.1379307 ], [ 88.1727514, 22.1379207 ], [ 88.1732771, 22.137235 ], [ 88.1737384, 22.1366983 ], [ 88.174189, 22.1361716 ], [ 88.1747577, 22.135635 ], [ 88.1753478, 22.1350288 ], [ 88.175882987308256, 22.134525672575737 ], [ 88.1760773, 22.134343 ], [ 88.1764636, 22.1338759 ], [ 88.1768712, 22.1332896 ], [ 88.1773004, 22.1328622 ], [ 88.1782767, 22.1318585 ], [ 88.1784269, 22.1316199 ], [ 88.1787059, 22.1312423 ], [ 88.179296, 22.1306857 ], [ 88.1797466, 22.1302683 ], [ 88.1802079, 22.1296024 ], [ 88.1806371, 22.1289564 ], [ 88.1810877, 22.1283601 ], [ 88.1816134, 22.1275849 ], [ 88.1822786, 22.1266706 ], [ 88.1842634, 22.1243548 ], [ 88.1851539, 22.1232317 ], [ 88.1859157, 22.1221583 ], [ 88.1860873, 22.1219496 ], [ 88.1862483, 22.1213433 ], [ 88.1865916, 22.121075 ], [ 88.1869885, 22.120578 ], [ 88.1876966, 22.1195543 ], [ 88.1881902, 22.1187393 ], [ 88.1886944, 22.1179143 ], [ 88.1892309, 22.1169899 ], [ 88.189778, 22.1160159 ], [ 88.1902394, 22.11534 ], [ 88.1907007, 22.1144057 ], [ 88.1911406, 22.1134912 ], [ 88.1916127, 22.1128054 ], [ 88.1917843, 22.1124376 ], [ 88.191956, 22.1120301 ], [ 88.1925246, 22.1111156 ], [ 88.1927928, 22.1106087 ], [ 88.1930074, 22.110072 ], [ 88.1936941, 22.108571 ], [ 88.1943593, 22.10709 ], [ 88.1946811, 22.1063246 ], [ 88.1948742, 22.1055294 ], [ 88.1948313, 22.1049628 ], [ 88.1946811, 22.1042371 ], [ 88.1942734, 22.1034817 ], [ 88.1938872, 22.1028256 ], [ 88.1934902, 22.102269 ], [ 88.1932542, 22.1016029 ], [ 88.1928679, 22.1009369 ], [ 88.1921384, 22.0995453 ], [ 88.19172, 22.0988096 ], [ 88.1912693, 22.0977261 ], [ 88.1907436, 22.0966326 ], [ 88.1896386, 22.0950123 ], [ 88.1888554, 22.09371 ], [ 88.1878468, 22.0924375 ], [ 88.1873104, 22.091513 ], [ 88.1866774, 22.0906183 ], [ 88.1865057, 22.0902803 ], [ 88.1860229, 22.0901809 ], [ 88.1859478, 22.0896639 ], [ 88.185744, 22.0895049 ], [ 88.1854972, 22.0890178 ], [ 88.1848964, 22.088302 ], [ 88.1843385, 22.0876757 ], [ 88.1837806, 22.0870096 ], [ 88.1831369, 22.0865026 ], [ 88.1825361, 22.0857172 ], [ 88.1813774, 22.0847131 ], [ 88.1800792, 22.0835599 ], [ 88.1791672, 22.0827546 ], [ 88.178502, 22.0821581 ], [ 88.1769571, 22.0808954 ], [ 88.175808239843732, 22.080045085894067 ], [ 88.175808239843732, 22.080045085894071 ], [ 88.1752512, 22.0796328 ], [ 88.1742212, 22.0788772 ], [ 88.173717, 22.0784994 ], [ 88.1729123, 22.0779824 ], [ 88.1715605, 22.0769882 ], [ 88.170788, 22.0765905 ], [ 88.1702837, 22.0763121 ], [ 88.1689963, 22.0753676 ], [ 88.1680414, 22.0747413 ], [ 88.16728, 22.0742772 ], [ 88.1662721, 22.0736202 ], [ 88.1654339, 22.0726685 ], [ 88.1642606, 22.0718107 ], [ 88.1606811, 22.0693425 ], [ 88.1596187, 22.068216 ], [ 88.158785, 22.0678085 ], [ 88.1580595, 22.0671318 ], [ 88.1564393, 22.0658584 ], [ 88.1557431, 22.0652201 ], [ 88.1545115, 22.0644073 ], [ 88.153937, 22.0638166 ], [ 88.1531802, 22.0632626 ], [ 88.1519574, 22.0624736 ], [ 88.1513912, 22.0620789 ], [ 88.1509704, 22.0617266 ], [ 88.1495035, 22.0608264 ], [ 88.1476688, 22.0597897 ], [ 88.1461787, 22.0590039 ], [ 88.1435604, 22.0579374 ], [ 88.1411793, 22.0569236 ], [ 88.1397978, 22.0560798 ], [ 88.1348086, 22.0541334 ], [ 88.1331933, 22.0532261 ], [ 88.131481, 22.0523531 ], [ 88.1300031, 22.0516354 ], [ 88.1289099, 22.0510916 ], [ 88.1271565, 22.0501975 ], [ 88.1261503, 22.0495957 ], [ 88.1253788, 22.0491801 ], [ 88.1248244, 22.048897 ], [ 88.1236096, 22.0482222 ], [ 88.1224285, 22.0475378 ], [ 88.1209896, 22.0465805 ], [ 88.1195557, 22.0457274 ], [ 88.1188116, 22.045263 ], [ 88.1182034, 22.0448249 ], [ 88.117487, 22.0442438 ], [ 88.1170834, 22.0440135 ], [ 88.1165713, 22.0437427 ], [ 88.115772, 22.043297 ], [ 88.1152406, 22.0430794 ], [ 88.1146257, 22.0426929 ], [ 88.1137933, 22.0421643 ], [ 88.1126788, 22.0414333 ], [ 88.1118509, 22.0407287 ], [ 88.1114557, 22.040343 ], [ 88.1106101, 22.0398083 ], [ 88.1099301, 22.0393789 ], [ 88.1090352, 22.038861 ], [ 88.108088, 22.038292 ], [ 88.1074695, 22.0378544 ], [ 88.1070672, 22.0375404 ], [ 88.1063772, 22.0371678 ], [ 88.105528, 22.0366266 ], [ 88.1046182, 22.0359646 ], [ 88.1040296, 22.0355386 ], [ 88.1033954, 22.0351319 ], [ 88.1025482, 22.0346542 ], [ 88.1016172, 22.0339851 ], [ 88.1006525, 22.0333508 ], [ 88.099572, 22.032595 ], [ 88.0987746, 22.032008 ], [ 88.0973415, 22.0311241 ], [ 88.0967215, 22.03067 ], [ 88.0956684, 22.0299526 ], [ 88.0946669, 22.0292688 ], [ 88.092671, 22.027924 ], [ 88.0913098, 22.027219 ], [ 88.0902766, 22.0266731 ], [ 88.0894693, 22.0262102 ], [ 88.0890272, 22.0256699 ], [ 88.0888787, 22.0255181 ], [ 88.08875, 22.0253788 ], [ 88.0885461, 22.0252346 ], [ 88.088176, 22.0251152 ], [ 88.0864647, 22.024613 ], [ 88.086513, 22.0245036 ], [ 88.0864862, 22.0244041 ], [ 88.0862072, 22.0243196 ], [ 88.0862984, 22.0239864 ], [ 88.0863789, 22.0240013 ], [ 88.0865923, 22.0240969 ], [ 88.0866042, 22.0237729 ], [ 88.0863656, 22.0237845 ], [ 88.0856896, 22.0232699 ], [ 88.0853236, 22.0231444 ], [ 88.0849707, 22.0229247 ], [ 88.084622, 22.0227407 ], [ 88.0842358, 22.0225268 ], [ 88.0836693, 22.0221793 ], [ 88.0828206, 22.021797 ], [ 88.0820033, 22.021549 ], [ 88.081356, 22.0213695 ], [ 88.0800542, 22.0209703 ], [ 88.0799952, 22.0209852 ], [ 88.0797538, 22.020826 ], [ 88.0794427, 22.0207415 ], [ 88.0793247, 22.0207166 ], [ 88.0791852, 22.0207415 ], [ 88.0791423, 22.0207962 ], [ 88.0790833, 22.0208658 ], [ 88.0789921, 22.0208957 ], [ 88.0789223, 22.0208857 ], [ 88.0786756, 22.0207017 ], [ 88.0784771, 22.0206122 ], [ 88.0783644, 22.0205277 ], [ 88.078284, 22.0203934 ], [ 88.078284, 22.0202094 ], [ 88.0781284, 22.0201447 ], [ 88.0780144, 22.0200663 ], [ 88.0770877, 22.019722 ], [ 88.0765459, 22.0195131 ], [ 88.0759938, 22.0193483 ], [ 88.0755642, 22.0191601 ], [ 88.0751243, 22.018976 ], [ 88.0746793, 22.0188369 ], [ 88.0743733, 22.0186727 ], [ 88.0741051, 22.0185633 ], [ 88.0736062, 22.0184539 ], [ 88.0728981, 22.0183395 ], [ 88.0726674, 22.0183096 ], [ 88.072308, 22.0181207 ], [ 88.0719991, 22.0179859 ], [ 88.0714765, 22.0177129 ], [ 88.0711868, 22.0175537 ], [ 88.0711439, 22.0174642 ], [ 88.0702695, 22.0170415 ], [ 88.0698048, 22.0168469 ], [ 88.0693825, 22.0166144 ], [ 88.0684198, 22.0161026 ], [ 88.0677518, 22.0157249 ], [ 88.0671877, 22.0155423 ], [ 88.0668436, 22.0154462 ], [ 88.0664866, 22.0153707 ], [ 88.0663104, 22.0153021 ], [ 88.0660858, 22.0152197 ], [ 88.0656547, 22.0150893 ], [ 88.0649976, 22.0151269 ], [ 88.0641653, 22.0150844 ], [ 88.0632409, 22.0150008 ], [ 88.0625704, 22.0149191 ], [ 88.0617044, 22.0150715 ], [ 88.0611799, 22.0149991 ], [ 88.0602698, 22.0156379 ], [ 88.0600237, 22.0158838 ], [ 88.0595347, 22.0162327 ], [ 88.059103, 22.0164614 ], [ 88.0587549, 22.0168144 ], [ 88.0559439, 22.0196646 ], [ 88.0528346, 22.0176118 ], [ 88.0501191, 22.0155858 ], [ 88.0506112, 22.015192 ], [ 88.0508026, 22.0148775 ], [ 88.0511143, 22.0144515 ], [ 88.0516994, 22.0140076 ], [ 88.051896, 22.0135485 ], [ 88.0522498, 22.0130858 ], [ 88.0523829, 22.0124749 ], [ 88.0524984, 22.0120982 ], [ 88.0525329, 22.0115826 ], [ 88.0524984, 22.0107155 ], [ 88.0522589, 22.0099371 ], [ 88.0520545, 22.0091353 ], [ 88.0516748, 22.0083505 ], [ 88.0512897, 22.007759 ], [ 88.0510098, 22.0072964 ], [ 88.0507733, 22.0069089 ], [ 88.050424, 22.0065446 ], [ 88.049966, 22.0058367 ], [ 88.0494781, 22.0051054 ], [ 88.049206, 22.0047435 ], [ 88.0489048, 22.0043446 ], [ 88.0485438, 22.0038573 ], [ 88.04796, 22.0031221 ], [ 88.0477057, 22.0026124 ], [ 88.0474582, 22.002227 ], [ 88.046983, 22.0015079 ], [ 88.0464687, 22.0005911 ], [ 88.045927, 21.9999271 ], [ 88.0454792, 21.9991847 ], [ 88.0450314, 21.9984819 ], [ 88.0444202, 21.997568 ], [ 88.0442101, 21.9969965 ], [ 88.0440461, 21.9964143 ], [ 88.0437662, 21.9957618 ], [ 88.0436346, 21.9953367 ], [ 88.0425412, 21.9937535 ], [ 88.0422449, 21.9936296 ], [ 88.042044, 21.9933254 ], [ 88.0415786, 21.9925009 ], [ 88.0413697, 21.9919712 ], [ 88.041032, 21.9913664 ], [ 88.0405659, 21.9906129 ], [ 88.0402864, 21.9901481 ], [ 88.0400378, 21.989753 ], [ 88.0394663, 21.9887355 ], [ 88.039079, 21.9881067 ], [ 88.0387044, 21.9874709 ], [ 88.0383156, 21.9868226 ], [ 88.0379783, 21.9861476 ], [ 88.0374388, 21.9850717 ], [ 88.0367991, 21.983632 ], [ 88.0360955, 21.9818342 ], [ 88.0349551, 21.9797286 ], [ 88.0345683, 21.9784631 ], [ 88.0338222, 21.9770934 ], [ 88.0326953, 21.9748165 ], [ 88.0314362, 21.971759 ], [ 88.0306865, 21.9695845 ], [ 88.0301835, 21.9684447 ], [ 88.02947, 21.9667639 ], [ 88.0272031, 21.9643911 ], [ 88.0268889, 21.9638661 ], [ 88.027088, 21.963043 ], [ 88.0270401, 21.9625292 ], [ 88.0266068, 21.9618894 ], [ 88.0260507, 21.9609155 ], [ 88.0254668, 21.9597522 ], [ 88.0246566, 21.958509 ], [ 88.0240921, 21.9569707 ], [ 88.0236206, 21.9566937 ], [ 88.0234911, 21.9561528 ], [ 88.0232187, 21.9552623 ], [ 88.0225342, 21.9543584 ], [ 88.0220628, 21.9531374 ], [ 88.0216934, 21.9522134 ], [ 88.0208831, 21.9512956 ], [ 88.0206228, 21.9500687 ], [ 88.0206475, 21.9493529 ], [ 88.0195095, 21.9469212 ], [ 88.0201029, 21.945633 ], [ 88.0195515, 21.9451667 ], [ 88.0188126, 21.9446111 ], [ 88.018554, 21.9437313 ], [ 88.0178405, 21.9426338 ], [ 88.0176023, 21.9421839 ], [ 88.0167348, 21.9420141 ], [ 88.0163507, 21.9416236 ], [ 88.0166843, 21.9408443 ], [ 88.0166154, 21.940248 ], [ 88.0157244, 21.9387047 ], [ 88.0147939, 21.9363973 ], [ 88.0130632, 21.9336516 ], [ 88.0125518, 21.9315196 ], [ 88.0118467, 21.9303297 ], [ 88.0113615, 21.9284361 ], [ 88.0108634, 21.9264125 ], [ 88.0108489, 21.924836 ], [ 88.010562, 21.9232932 ], [ 88.0097179, 21.9209812 ], [ 88.0088812, 21.919699 ], [ 88.0080261, 21.9158424 ], [ 88.0070511, 21.9144319 ], [ 88.005516, 21.9119959 ], [ 88.0045534, 21.9110358 ], [ 88.0038069, 21.9102678 ], [ 88.002821, 21.9095612 ], [ 88.0023221, 21.9089258 ], [ 88.0021764, 21.9078969 ], [ 88.0016156, 21.906613 ], [ 88.0010585, 21.905844 ], [ 88.0006425, 21.9054599 ], [ 87.9978748, 21.9041895 ], [ 87.9940061, 21.9033121 ], [ 87.9937232, 21.902284 ], [ 87.9948249, 21.9020199 ], [ 87.9946739, 21.9002186 ], [ 87.9941097, 21.8984199 ], [ 87.9935525, 21.8976508 ], [ 87.992716, 21.8963684 ], [ 87.9913278, 21.8950895 ], [ 87.9904896, 21.8935499 ], [ 87.9899343, 21.8930383 ], [ 87.9883892, 21.8889283 ], [ 87.9897703, 21.8891774 ], [ 87.990039, 21.8881458 ], [ 87.9911405, 21.8878818 ], [ 87.9908621, 21.8874968 ], [ 87.9903095, 21.8873719 ], [ 87.9901675, 21.8868578 ], [ 87.989198, 21.8862195 ], [ 87.9885036, 21.8855805 ], [ 87.9882241, 21.8850672 ], [ 87.988201, 21.8817204 ], [ 87.9876459, 21.8812088 ], [ 87.9872256, 21.8801815 ], [ 87.9861195, 21.8798015 ], [ 87.9855661, 21.8795473 ], [ 87.9843165, 21.8783966 ], [ 87.9840283, 21.8765962 ], [ 87.9837489, 21.8760829 ], [ 87.9834607, 21.8742825 ], [ 87.9812224, 21.8696614 ], [ 87.9806497, 21.8665752 ], [ 87.9800927, 21.8658062 ], [ 87.9781498, 21.8640156 ], [ 87.9778704, 21.8635023 ], [ 87.9768995, 21.8626064 ], [ 87.9763462, 21.8623522 ], [ 87.9755136, 21.8615849 ], [ 87.9749602, 21.8613307 ], [ 87.9742658, 21.8606915 ], [ 87.9725936, 21.8581268 ], [ 87.9717593, 21.8571018 ], [ 87.9712042, 21.8565902 ], [ 87.9706474, 21.8558211 ], [ 87.9705066, 21.8553071 ], [ 87.969125, 21.8549285 ], [ 87.9684306, 21.8542893 ], [ 87.9678722, 21.8532628 ], [ 87.9671789, 21.8526227 ], [ 87.9662088, 21.8519852 ], [ 87.9659296, 21.8514719 ], [ 87.9628771, 21.8486577 ], [ 87.9620428, 21.8476327 ], [ 87.9616253, 21.8469911 ], [ 87.9609328, 21.8466093 ], [ 87.9606537, 21.846096 ], [ 87.9599604, 21.845456 ], [ 87.9589905, 21.8448183 ], [ 87.9587111, 21.844305 ], [ 87.9580179, 21.843665 ], [ 87.9570479, 21.8430274 ], [ 87.955933, 21.8412317 ], [ 87.9551005, 21.8404641 ], [ 87.9545439, 21.8396949 ], [ 87.9534222, 21.8368694 ], [ 87.9521774, 21.8362324 ], [ 87.9512058, 21.8353373 ], [ 87.9505066, 21.8337966 ], [ 87.9499544, 21.8336705 ], [ 87.9485705, 21.832906 ], [ 87.9478748, 21.8320094 ], [ 87.9471765, 21.8305968 ], [ 87.9466242, 21.8304719 ], [ 87.9463417, 21.8294435 ], [ 87.9457894, 21.8293175 ], [ 87.9453726, 21.8289342 ], [ 87.945092, 21.8281635 ], [ 87.9438474, 21.8275263 ], [ 87.9431532, 21.8268871 ], [ 87.9428406, 21.8264096 ], [ 87.9420346, 21.8260154 ], [ 87.9416734, 21.8256578 ], [ 87.9413888, 21.8252744 ], [ 87.9408933, 21.8247727 ], [ 87.9404137, 21.8243897 ], [ 87.9391533, 21.8234021 ], [ 87.9382957, 21.8218938 ], [ 87.9374651, 21.8213836 ], [ 87.9367728, 21.8210019 ], [ 87.9356332, 21.8203958 ], [ 87.9346471, 21.8197323 ], [ 87.9338192, 21.8190421 ], [ 87.9331891, 21.8185239 ], [ 87.9321065, 21.8178188 ], [ 87.9312231, 21.8171298 ], [ 87.9301187, 21.8162087 ], [ 87.9294316, 21.8156365 ], [ 87.9285871, 21.8150381 ], [ 87.9271203, 21.8136701 ], [ 87.926324, 21.8129539 ], [ 87.9255872, 21.8123995 ], [ 87.9240097, 21.8113435 ], [ 87.9233312, 21.810821 ], [ 87.9220522, 21.8097696 ], [ 87.922848, 21.8087382 ], [ 87.9242971, 21.8080983 ], [ 87.9242441, 21.8067036 ], [ 87.9223001, 21.8050465 ], [ 87.9177755, 21.8025501 ], [ 87.9137639, 21.8001873 ], [ 87.9101764, 21.7989895 ], [ 87.9056169, 21.7977917 ], [ 87.9013225, 21.7966102 ], [ 87.8970105, 21.795117 ], [ 87.8945717, 21.7897347 ], [ 87.8921859, 21.7855994 ], [ 87.8895528, 21.7814148 ], [ 87.88714, 21.7779444 ], [ 87.8847895, 21.7754006 ], [ 87.883184580859364, 21.773701752031499 ], [ 87.8822624, 21.7727256 ], [ 87.8799827, 21.7703787 ], [ 87.8763245, 21.7670142 ], [ 87.8732495, 21.7648642 ], [ 87.8697327, 21.7623694 ], [ 87.86459, 21.7592838 ], [ 87.861383, 21.7567767 ], [ 87.8595419, 21.7555023 ], [ 87.8585118, 21.754788 ], [ 87.8571996, 21.7538661 ], [ 87.8541826, 21.751826 ], [ 87.8529595, 21.7503512 ], [ 87.8524016, 21.7487966 ], [ 87.8519939, 21.7475809 ], [ 87.8516076, 21.7462455 ], [ 87.8508137, 21.7447906 ], [ 87.848904, 21.7429171 ], [ 87.8469728, 21.7410834 ], [ 87.844827, 21.7397281 ], [ 87.8427027, 21.738592 ], [ 87.8411363, 21.7372566 ], [ 87.8400849, 21.7360407 ], [ 87.8395484, 21.7344661 ], [ 87.839527, 21.732732 ], [ 87.8398917, 21.730938 ], [ 87.8407286, 21.7287055 ], [ 87.8395055, 21.7259747 ], [ 87.8376601, 21.723184 ], [ 87.834463, 21.7208716 ], [ 87.8311585, 21.7194563 ], [ 87.82915, 21.718449 ], [ 87.8271888, 21.7170841 ], [ 87.8254507, 21.7154495 ], [ 87.8228172, 21.7136425 ], [ 87.8204368, 21.7123237 ], [ 87.8189627, 21.711496 ], [ 87.817113, 21.7105805 ], [ 87.8157405, 21.7097173 ], [ 87.8144025, 21.7089046 ], [ 87.813296, 21.7083147 ], [ 87.8126625, 21.7079868 ], [ 87.8098423, 21.7061599 ], [ 87.8066169, 21.7040415 ], [ 87.8040319, 21.7025551 ], [ 87.8019872, 21.7012264 ], [ 87.7996655, 21.6999048 ], [ 87.7962817, 21.6976756 ], [ 87.7929558, 21.6952831 ], [ 87.7907242, 21.6932295 ], [ 87.7885999, 21.6916544 ], [ 87.7850165, 21.6905379 ], [ 87.7807678, 21.6902787 ], [ 87.7754249, 21.6902787 ], [ 87.7691807, 21.6908968 ], [ 87.7628292, 21.6886637 ], [ 87.7580656, 21.6874474 ], [ 87.7550401, 21.6856729 ], [ 87.752551, 21.6840777 ], [ 87.7495255, 21.6824028 ], [ 87.746972, 21.6810469 ], [ 87.7450623, 21.6801496 ], [ 87.742895, 21.6790928 ], [ 87.7405132, 21.6778167 ], [ 87.7382387, 21.67672 ], [ 87.734548, 21.6750051 ], [ 87.7323164, 21.6739283 ], [ 87.7293123, 21.6726122 ], [ 87.7247419, 21.6705184 ], [ 87.7202787, 21.6686041 ], [ 87.7157082, 21.6666099 ], [ 87.7114166, 21.664875 ], [ 87.7080049, 21.6635787 ], [ 87.7053656, 21.6625617 ], [ 87.7030911, 21.6616842 ], [ 87.699572, 21.6604079 ], [ 87.6952805, 21.6590518 ], [ 87.6903452, 21.6573966 ], [ 87.68673, 21.6562344 ], [ 87.6808798, 21.6541721 ], [ 87.675759, 21.6525738 ], [ 87.6734337, 21.6519781 ], [ 87.6707712, 21.6512801 ], [ 87.6682592, 21.6507758 ], [ 87.6630447, 21.6495631 ], [ 87.657515, 21.6477638 ], [ 87.6528157, 21.6468663 ], [ 87.6496829, 21.6464475 ], [ 87.6442662, 21.6451025 ], [ 87.6396099, 21.6464188 ], [ 87.6359192, 21.6460199 ], [ 87.6321012, 21.6455253 ], [ 87.628571, 21.6449014 ], [ 87.6282977, 21.6448638 ], [ 87.6243635, 21.644322 ], [ 87.6240713, 21.6442813 ], [ 87.6207613, 21.6440602 ], [ 87.618196, 21.6437482 ], [ 87.6152515, 21.6434034 ], [ 87.6151513, 21.6433917 ], [ 87.6129457, 21.6431967 ], [ 87.6105183, 21.6427621 ], [ 87.6038294, 21.6414752 ], [ 87.5991484, 21.6406897 ], [ 87.5947911, 21.6399654 ], [ 87.5912488, 21.6392077 ], [ 87.590760921874988, 21.639102581089364 ], [ 87.590760921874988, 21.639102581089361 ], [ 87.5890252, 21.6387286 ], [ 87.5818928, 21.6370628 ], [ 87.5801393, 21.6367462 ], [ 87.5782618, 21.6363473 ], [ 87.5743965, 21.6353404 ], [ 87.5714381, 21.6345654 ], [ 87.5675599, 21.6337467 ], [ 87.5630952, 21.6328042 ], [ 87.5606961, 21.6325774 ], [ 87.5600041, 21.632512 ], [ 87.5575708, 21.6322538 ], [ 87.5567524, 21.632167 ], [ 87.5538178, 21.6311034 ], [ 87.5514665, 21.6302512 ], [ 87.5493404, 21.6293643 ], [ 87.5495944, 21.6289647 ], [ 87.5486787, 21.6287641 ], [ 87.547867, 21.6285577 ], [ 87.5472737, 21.6284068 ], [ 87.5451531, 21.6278688 ], [ 87.5414242, 21.6270843 ], [ 87.5392417, 21.6265586 ], [ 87.5368859, 21.6260392 ], [ 87.5348147, 21.6254908 ], [ 87.5333479, 21.6252115 ], [ 87.5325562, 21.6249378 ], [ 87.5322081, 21.6248175 ], [ 87.5319928, 21.6245499 ], [ 87.5317111, 21.6243031 ], [ 87.5313544, 21.6241709 ], [ 87.5310218, 21.6241684 ], [ 87.530631, 21.6242888 ], [ 87.5302654, 21.6242258 ], [ 87.5299738, 21.6240669 ], [ 87.5298266, 21.6239081 ], [ 87.5296656, 21.6237386 ], [ 87.5292337, 21.6235471 ], [ 87.5280884, 21.6232104 ], [ 87.5265734, 21.622807 ], [ 87.5265707, 21.622615 ], [ 87.5261429, 21.6225377 ], [ 87.5260946, 21.6226661 ], [ 87.5258802, 21.6226265 ], [ 87.5247516, 21.6223134 ], [ 87.5242204, 21.6221772 ], [ 87.5238934, 21.6220934 ], [ 87.5238188, 21.6220723 ], [ 87.5233392, 21.6219304 ], [ 87.5216298, 21.6214246 ], [ 87.5204347, 21.6211103 ], [ 87.519808, 21.6209315 ], [ 87.5185415, 21.6205946 ], [ 87.5168436, 21.6201429 ], [ 87.5153716, 21.6196985 ], [ 87.5141059, 21.6194797 ], [ 87.513235, 21.6195739 ], [ 87.5119415, 21.619229 ], [ 87.5113141, 21.6190617 ], [ 87.5099908, 21.6187067 ], [ 87.5087582, 21.618309 ], [ 87.5082443, 21.6181349 ], [ 87.5080845, 21.6180808 ], [ 87.5056808, 21.6173358 ], [ 87.5049271, 21.6171339 ], [ 87.5040634, 21.616872 ], [ 87.5031006, 21.616564 ], [ 87.5022341, 21.6162985 ], [ 87.501396, 21.616039 ], [ 87.5009658, 21.6159059 ], [ 87.4999898, 21.6156237 ], [ 87.4989065, 21.6152544 ], [ 87.4983086, 21.6150506 ], [ 87.4975287, 21.6147814 ], [ 87.4968329, 21.6145339 ], [ 87.4952311, 21.614026 ], [ 87.4943671, 21.6137134 ], [ 87.4928727, 21.6132835 ], [ 87.4908232, 21.6126841 ], [ 87.4903369, 21.6125238 ], [ 87.4887346, 21.6119264 ], [ 87.4864713, 21.6110671 ], [ 87.4832765, 21.6096936 ], [ 87.4820321, 21.6091388 ], [ 87.4806203, 21.6085096 ], [ 87.4785462, 21.6076165 ], [ 87.4754679, 21.6066354 ], [ 87.4735177, 21.606064 ], [ 87.472369, 21.6056368 ], [ 87.4713263, 21.6051521 ], [ 87.4700185, 21.6044127 ], [ 87.4685606, 21.6035337 ], [ 87.4667201, 21.6022774 ], [ 87.4645951, 21.6010189 ], [ 87.4616405, 21.5993138 ], [ 87.4599231, 21.5985289 ], [ 87.4585986, 21.5976222 ], [ 87.4564736, 21.5962689 ], [ 87.454334, 21.5945231 ], [ 87.4519329, 21.5934311 ], [ 87.4507535, 21.5926284 ], [ 87.4488905, 21.5909638 ], [ 87.4475082, 21.5899124 ], [ 87.445834, 21.589015 ], [ 87.444364, 21.5880676 ], [ 87.4427921, 21.5867278 ], [ 87.440376, 21.5853067 ], [ 87.437989, 21.5839127 ], [ 87.4349179, 21.5818825 ], [ 87.4320361, 21.5796764 ], [ 87.429227, 21.5771454 ], [ 87.4282955, 21.5762386 ], [ 87.4277133, 21.5754265 ], [ 87.427416779130567, 21.574843135937503 ], [ 87.4269565, 21.5739376 ], [ 87.4263015, 21.5732203 ], [ 87.4253409, 21.5728683 ], [ 87.4236089, 21.57253 ], [ 87.4202758, 21.5719209 ], [ 87.4180781, 21.5715825 ], [ 87.4174668, 21.5711629 ], [ 87.416739, 21.5699988 ], [ 87.4161568, 21.5692138 ], [ 87.4147454, 21.5685412 ], [ 87.41345, 21.5677561 ], [ 87.4118344, 21.5664161 ], [ 87.4107283, 21.5646835 ], [ 87.4092, 21.562247 ], [ 87.4093164, 21.5611776 ], [ 87.4089235, 21.5595533 ], [ 87.4086615, 21.5604602 ], [ 87.4080356, 21.5616108 ], [ 87.4069731, 21.5618815 ], [ 87.4062163, 21.5610829 ], [ 87.4058233, 21.5603654 ], [ 87.4052557, 21.5597834 ], [ 87.4040767, 21.5597428 ], [ 87.4026504, 21.5598917 ], [ 87.4009766, 21.5603654 ], [ 87.399623, 21.561313 ], [ 87.3986623, 21.5625313 ], [ 87.3977163, 21.5638713 ], [ 87.3965373, 21.565252 ], [ 87.3952711, 21.5659829 ], [ 87.3935536, 21.5666191 ], [ 87.3909629, 21.5673501 ], [ 87.3886487, 21.5683246 ], [ 87.386873, 21.5695564 ], [ 87.3862908, 21.5697459 ], [ 87.3845879, 21.5698406 ], [ 87.3816041, 21.5704903 ], [ 87.3800468, 21.5708152 ], [ 87.3773105, 21.5721281 ], [ 87.3762916, 21.5723041 ], [ 87.3746906, 21.5721146 ], [ 87.3732642, 21.5713701 ], [ 87.371867, 21.57114 ], [ 87.370688, 21.5706663 ], [ 87.3662015, 21.5676944 ], [ 87.3631595, 21.5653662 ], [ 87.3590551, 21.5592343 ], [ 87.3592443, 21.5584492 ], [ 87.3598847, 21.5576234 ], [ 87.360627, 21.5570143 ], [ 87.3610782, 21.5568112 ], [ 87.3615294, 21.5563916 ], [ 87.3629266, 21.5559313 ], [ 87.3637708, 21.5550921 ], [ 87.3641056, 21.5547807 ], [ 87.3647023, 21.5534947 ], [ 87.364877, 21.5532104 ], [ 87.3653573, 21.5529667 ], [ 87.3660123, 21.5528449 ], [ 87.3666236, 21.5529532 ], [ 87.3673804, 21.5533999 ], [ 87.3677588, 21.5536571 ], [ 87.3679044, 21.5535488 ], [ 87.3677297, 21.5526148 ], [ 87.3670165, 21.5513017 ], [ 87.3663907, 21.5505571 ], [ 87.3659525, 21.5503341 ], [ 87.3648172, 21.5502393 ], [ 87.3641332, 21.5501039 ], [ 87.3634345, 21.549955 ], [ 87.3622992, 21.5500227 ], [ 87.3591845, 21.5500904 ], [ 87.3571469, 21.5501581 ], [ 87.3550219, 21.5500904 ], [ 87.3533189, 21.5499956 ], [ 87.3493309, 21.5500363 ], [ 87.3454885, 21.5499009 ], [ 87.3446734, 21.549752 ], [ 87.3436691, 21.5495624 ], [ 87.3409619, 21.5497384 ], [ 87.3385313, 21.5498061 ], [ 87.3349071, 21.5502664 ], [ 87.3320544, 21.5505236 ], [ 87.329027, 21.5505642 ], [ 87.325825, 21.5508214 ], [ 87.3233215, 21.5510786 ], [ 87.3171212, 21.5514577 ], [ 87.3095964, 21.551593 ], [ 87.3035561, 21.5516066 ], [ 87.2936007, 21.5517013 ], [ 87.284926, 21.5515795 ], [ 87.2817822, 21.5517013 ], [ 87.2799483, 21.5519585 ], [ 87.278158, 21.5520533 ], [ 87.2752762, 21.5519856 ], [ 87.2713464, 21.5517013 ], [ 87.2664705, 21.5512546 ], [ 87.2609688, 21.5507267 ], [ 87.2552925, 21.5502258 ], [ 87.2502565, 21.5496301 ], [ 87.2467779, 21.5491969 ], [ 87.2435322, 21.5489262 ], [ 87.2398935, 21.5482899 ], [ 87.2361238, 21.5476672 ], [ 87.231932, 21.5469362 ], [ 87.2291666, 21.5463405 ], [ 87.2280168, 21.5461916 ], [ 87.2249021, 21.5459344 ], [ 87.2230536, 21.5457584 ], [ 87.2205647, 21.5453116 ], [ 87.2167223, 21.544743 ], [ 87.2131855, 21.5442557 ], [ 87.2118755, 21.5439443 ], [ 87.2093947, 21.5443015 ], [ 87.2083918, 21.5444899 ], [ 87.2078653, 21.5448167 ], [ 87.2076781, 21.5452164 ], [ 87.2077431, 21.5455327 ], [ 87.2079004, 21.5458947 ], [ 87.2077762, 21.5466649 ], [ 87.2072711, 21.5465571 ], [ 87.20665, 21.5457945 ], [ 87.205706, 21.5451013 ], [ 87.2043148, 21.5444698 ], [ 87.2035766, 21.5446686 ], [ 87.203026, 21.54454 ], [ 87.1999963, 21.5429987 ], [ 87.1961413, 21.5417158 ], [ 87.1955907, 21.5417166 ], [ 87.1936635, 21.5412038 ], [ 87.1925618, 21.5406901 ], [ 87.1920115, 21.5406907 ], [ 87.1909098, 21.540177 ], [ 87.1903594, 21.5401775 ], [ 87.1889826, 21.5396642 ], [ 87.188157, 21.539665 ], [ 87.1874, 21.539312026504494 ], [ 87.1870553, 21.5391513 ], [ 87.186505, 21.5391518 ], [ 87.1854035, 21.5386381 ], [ 87.1845777, 21.5386391 ], [ 87.1826501, 21.5378687 ], [ 87.1818238, 21.5373546 ], [ 87.1804475, 21.5370985 ], [ 87.1797584, 21.5367135 ], [ 87.1796206, 21.5361987 ], [ 87.1787955, 21.5365854 ], [ 87.1771442, 21.5365871 ], [ 87.1768686, 21.5363299 ], [ 87.1743916, 21.5362042 ], [ 87.1743912, 21.5359468 ], [ 87.1752167, 21.5359458 ], [ 87.1750782, 21.535431 ], [ 87.1743899, 21.5347876 ], [ 87.1738393, 21.5347882 ], [ 87.1735637, 21.534531 ], [ 87.1727378, 21.5342743 ], [ 87.1724624, 21.5340171 ], [ 87.1719119, 21.5340176 ], [ 87.170535, 21.5332465 ], [ 87.1699845, 21.5332471 ], [ 87.1686076, 21.532476 ], [ 87.168057, 21.5324765 ], [ 87.1669554, 21.5317052 ], [ 87.166405, 21.5317058 ], [ 87.1639268, 21.5306782 ], [ 87.1636514, 21.530421 ], [ 87.1622752, 21.5301649 ], [ 87.1619996, 21.5299075 ], [ 87.1606229, 21.529394 ], [ 87.160072, 21.5288795 ], [ 87.1584201, 21.528366 ], [ 87.1578692, 21.5278515 ], [ 87.1559419, 21.5270808 ], [ 87.1556666, 21.5268236 ], [ 87.155116, 21.5268241 ], [ 87.1540145, 21.5260526 ], [ 87.1534642, 21.5260532 ], [ 87.1526379, 21.5255389 ], [ 87.1512612, 21.5247676 ], [ 87.1493339, 21.5239969 ], [ 87.1482325, 21.5232254 ], [ 87.1476819, 21.5232259 ], [ 87.146856, 21.5227117 ], [ 87.14603, 21.5224548 ], [ 87.1452037, 21.5216831 ], [ 87.1441026, 21.5214265 ], [ 87.1432763, 21.5206548 ], [ 87.1413493, 21.5198838 ], [ 87.1407983, 21.5193694 ], [ 87.1399726, 21.5191125 ], [ 87.1394216, 21.5185979 ], [ 87.1374944, 21.5175695 ], [ 87.137219, 21.5173123 ], [ 87.1361179, 21.5170557 ], [ 87.1352918, 21.516284 ], [ 87.1344657, 21.5157695 ], [ 87.1336398, 21.5152552 ], [ 87.1328138, 21.5149984 ], [ 87.1322629, 21.5142263 ], [ 87.1314368, 21.5137119 ], [ 87.1308866, 21.5137124 ], [ 87.1300605, 21.513198 ], [ 87.1295097, 21.5126835 ], [ 87.1270325, 21.5119128 ], [ 87.1259318, 21.5119137 ], [ 87.1253818, 21.5124291 ], [ 87.1246938, 21.5128164 ], [ 87.1248327, 21.5138462 ], [ 87.1246961, 21.5156487 ], [ 87.1249732, 21.5177086 ], [ 87.1249752, 21.5202836 ], [ 87.1242886, 21.5211849 ], [ 87.1231882, 21.5217007 ], [ 87.1223627, 21.5217013 ], [ 87.1204358, 21.5211878 ], [ 87.1196097, 21.5204159 ], [ 87.118784, 21.5201588 ], [ 87.1185084, 21.5199016 ], [ 87.1179581, 21.519902 ], [ 87.1174079, 21.52016 ], [ 87.1171327, 21.5201602 ], [ 87.1165818, 21.5193879 ], [ 87.1168535, 21.5151396 ], [ 87.1169902, 21.5146244 ], [ 87.11754, 21.5138515 ], [ 87.1172633, 21.5120492 ], [ 87.1171261, 21.5119201 ], [ 87.1165757, 21.5117922 ], [ 87.1160242, 21.5102475 ], [ 87.1154738, 21.5102479 ], [ 87.1149221, 21.5087034 ], [ 87.1143718, 21.5085745 ], [ 87.1136825, 21.5074167 ], [ 87.1123056, 21.5061301 ], [ 87.1121682, 21.5056153 ], [ 87.1116177, 21.5054864 ], [ 87.1112038, 21.5045858 ], [ 87.1101025, 21.5035565 ], [ 87.1095513, 21.502527 ], [ 87.1084502, 21.5017552 ], [ 87.1077621, 21.5008538 ], [ 87.1072117, 21.5007261 ], [ 87.1070732, 21.500211 ], [ 87.1054211, 21.4986671 ], [ 87.1052837, 21.4981523 ], [ 87.1047333, 21.4980234 ], [ 87.104458, 21.4977659 ], [ 87.1039076, 21.497638 ], [ 87.1037693, 21.4971231 ], [ 87.1028061, 21.496222 ], [ 87.101842, 21.4955794 ], [ 87.1014292, 21.4946779 ], [ 87.1006037, 21.4944208 ], [ 87.099227, 21.4931341 ], [ 87.0986767, 21.4928771 ], [ 87.0977126, 21.4919769 ], [ 87.0975752, 21.4914618 ], [ 87.0967496, 21.4914624 ], [ 87.0966113, 21.4909474 ], [ 87.0960607, 21.4904327 ], [ 87.0959233, 21.4899177 ], [ 87.0950977, 21.489789 ], [ 87.0941337, 21.4888888 ], [ 87.0939963, 21.488374 ], [ 87.0931709, 21.4882451 ], [ 87.0924822, 21.4876023 ], [ 87.0920696, 21.4869583 ], [ 87.091244, 21.4867011 ], [ 87.0905553, 21.4860583 ], [ 87.0901427, 21.4854142 ], [ 87.0893172, 21.4851572 ], [ 87.0889037, 21.4847716 ], [ 87.0882159, 21.4838703 ], [ 87.0873905, 21.4837425 ], [ 87.0872522, 21.4832275 ], [ 87.0865644, 21.4825838 ], [ 87.086014, 21.4824556 ], [ 87.0860138, 21.4819406 ], [ 87.0854635, 21.4818117 ], [ 87.0849127, 21.4810394 ], [ 87.0831233, 21.4798822 ], [ 87.0829861, 21.4793672 ], [ 87.0824357, 21.4792383 ], [ 87.081472, 21.4785955 ], [ 87.0810594, 21.4779514 ], [ 87.0803709, 21.477566 ], [ 87.0802337, 21.477051 ], [ 87.0796833, 21.4770513 ], [ 87.0795451, 21.4765363 ], [ 87.0787194, 21.4760217 ], [ 87.078444, 21.4755068 ], [ 87.0777564, 21.4748629 ], [ 87.0770679, 21.4744775 ], [ 87.0763799, 21.4729328 ], [ 87.0758296, 21.4728038 ], [ 87.0750036, 21.4715167 ], [ 87.0744535, 21.4713887 ], [ 87.0743151, 21.4708737 ], [ 87.0739027, 21.4704872 ], [ 87.0725272, 21.4702303 ], [ 87.071977, 21.4704881 ], [ 87.0708766, 21.4704885 ], [ 87.0706016, 21.4707461 ], [ 87.0686761, 21.4711336 ], [ 87.0686765, 21.4716486 ], [ 87.0670258, 21.4716493 ], [ 87.066888, 21.4721644 ], [ 87.065926, 21.4728081 ], [ 87.064963, 21.4737102 ], [ 87.0646882, 21.4742252 ], [ 87.0638632, 21.4749981 ], [ 87.0637264, 21.4755131 ], [ 87.0631762, 21.4756416 ], [ 87.0629012, 21.4758992 ], [ 87.062076, 21.476157 ], [ 87.0616631, 21.4765439 ], [ 87.0618014, 21.4775739 ], [ 87.0609763, 21.4777025 ], [ 87.0571231, 21.473713 ], [ 87.0578101, 21.4729402 ], [ 87.0580842, 21.4703651 ], [ 87.0586342, 21.4698499 ], [ 87.0591838, 21.4685622 ], [ 87.0594588, 21.4683046 ], [ 87.0602832, 21.4659869 ], [ 87.0604206, 21.4646993 ], [ 87.0593202, 21.4646996 ], [ 87.0595964, 21.4670171 ], [ 87.0590462, 21.4671457 ], [ 87.0587712, 21.4675324 ], [ 87.0593214, 21.4675322 ], [ 87.0580836, 21.4690776 ], [ 87.0580838, 21.4695927 ], [ 87.057534, 21.4706229 ], [ 87.056847, 21.4711381 ], [ 87.0569833, 21.4693356 ], [ 87.0567075, 21.4672755 ], [ 87.0572573, 21.4665029 ], [ 87.0568441, 21.4639279 ], [ 87.0573941, 21.4635411 ], [ 87.06042, 21.4631542 ], [ 87.0605571, 21.4634118 ], [ 87.0604204, 21.4641842 ], [ 87.0609706, 21.464055 ], [ 87.0612454, 21.4637973 ], [ 87.0623457, 21.4636686 ], [ 87.062483, 21.4639261 ], [ 87.0624837, 21.465986 ], [ 87.0619339, 21.4665012 ], [ 87.0613839, 21.467274 ], [ 87.0611093, 21.4680466 ], [ 87.0602845, 21.4693343 ], [ 87.0597345, 21.4698495 ], [ 87.0593227, 21.4708797 ], [ 87.0598729, 21.4708796 ], [ 87.0608349, 21.4698491 ], [ 87.0615225, 21.4683039 ], [ 87.0623476, 21.4680461 ], [ 87.0635841, 21.4659856 ], [ 87.0633076, 21.4626382 ], [ 87.062482, 21.461866 ], [ 87.0620694, 21.4608361 ], [ 87.0615193, 21.4608363 ], [ 87.0611057, 21.4598064 ], [ 87.0601431, 21.4591627 ], [ 87.059318, 21.4589055 ], [ 87.0590428, 21.458648 ], [ 87.0576671, 21.4581336 ], [ 87.0573921, 21.4581336 ], [ 87.0571171, 21.4585205 ], [ 87.0579426, 21.4591634 ], [ 87.0598685, 21.4601927 ], [ 87.0604189, 21.4607076 ], [ 87.0609691, 21.4608365 ], [ 87.061795, 21.4623814 ], [ 87.0568436, 21.4622538 ], [ 87.0551929, 21.4617393 ], [ 87.0538171, 21.4609673 ], [ 87.0529918, 21.46071 ], [ 87.0521664, 21.4599378 ], [ 87.051341, 21.4596805 ], [ 87.0499651, 21.4583935 ], [ 87.0488646, 21.4576214 ], [ 87.0487266, 21.4574931 ], [ 87.0483142, 21.4571064 ], [ 87.0472138, 21.4565917 ], [ 87.0466635, 21.4560769 ], [ 87.0458383, 21.4558197 ], [ 87.0439124, 21.4545326 ], [ 87.0430868, 21.4537603 ], [ 87.0419865, 21.4532457 ], [ 87.0411611, 21.4522158 ], [ 87.0406109, 21.4520877 ], [ 87.0404728, 21.4515726 ], [ 87.0395102, 21.4506713 ], [ 87.0381347, 21.449899 ], [ 87.0373093, 21.4491268 ], [ 87.0367591, 21.4488694 ], [ 87.0356588, 21.4478395 ], [ 87.0349704, 21.4474539 ], [ 87.0348334, 21.4469389 ], [ 87.0342832, 21.4468098 ], [ 87.0338701, 21.4464241 ], [ 87.0337328, 21.4459091 ], [ 87.0331827, 21.44578 ], [ 87.0323575, 21.4452651 ], [ 87.0318073, 21.4447503 ], [ 87.030982, 21.4442355 ], [ 87.0302938, 21.4438497 ], [ 87.0298816, 21.4432056 ], [ 87.0290564, 21.4426908 ], [ 87.0285062, 21.4425626 ], [ 87.0282311, 21.4415326 ], [ 87.0276809, 21.4414035 ], [ 87.0265805, 21.4406312 ], [ 87.0260303, 21.4401162 ], [ 87.0246552, 21.4396014 ], [ 87.0235548, 21.4385717 ], [ 87.0227296, 21.4383143 ], [ 87.0224547, 21.4380567 ], [ 87.0219045, 21.4379285 ], [ 87.0217663, 21.4374135 ], [ 87.0210793, 21.437027 ], [ 87.0202541, 21.436512 ], [ 87.0183286, 21.4352247 ], [ 87.0177786, 21.4347099 ], [ 87.0166782, 21.4339374 ], [ 87.0153031, 21.433165 ], [ 87.0144779, 21.4323925 ], [ 87.0133777, 21.4318777 ], [ 87.0128277, 21.4313627 ], [ 87.0117276, 21.4308478 ], [ 87.0103524, 21.4295604 ], [ 87.0095272, 21.429303 ], [ 87.0084271, 21.4282729 ], [ 87.0078771, 21.4280155 ], [ 87.0070519, 21.427243 ], [ 87.0051269, 21.426213 ], [ 87.0047138, 21.4258272 ], [ 87.0045768, 21.4253122 ], [ 87.0040268, 21.4251831 ], [ 87.0030636, 21.4245398 ], [ 87.0026516, 21.4238957 ], [ 87.0021016, 21.4240248 ], [ 87.0019637, 21.4235097 ], [ 87.0012766, 21.423123 ], [ 87.0007266, 21.422608 ], [ 86.9996265, 21.4218356 ], [ 86.9982515, 21.4210631 ], [ 86.9974265, 21.4202905 ], [ 86.9968765, 21.4200331 ], [ 86.9960515, 21.4192604 ], [ 86.9952266, 21.4187454 ], [ 86.9946766, 21.4187454 ], [ 86.9935766, 21.4177154 ], [ 86.9924766, 21.4174579 ], [ 86.9913766, 21.4164277 ], [ 86.9908266, 21.4161703 ], [ 86.9889019, 21.41514 ], [ 86.9880769, 21.4143676 ], [ 86.9869771, 21.4138524 ], [ 86.9858771, 21.4128223 ], [ 86.9845023, 21.4123073 ], [ 86.9825775, 21.4110195 ], [ 86.9812026, 21.4107619 ], [ 86.9801028, 21.4099892 ], [ 86.9787278, 21.4098607 ], [ 86.9787278, 21.4096033 ], [ 86.9795528, 21.4096033 ], [ 86.979553, 21.4080584 ], [ 86.979003, 21.4080582 ], [ 86.9785904, 21.4067708 ], [ 86.9779034, 21.4058688 ], [ 86.9773536, 21.4057405 ], [ 86.9772156, 21.4052255 ], [ 86.9763908, 21.4044529 ], [ 86.975841, 21.4036802 ], [ 86.9757042, 21.4031652 ], [ 86.9751542, 21.4034226 ], [ 86.9750164, 21.4021351 ], [ 86.9741916, 21.4013625 ], [ 86.9735048, 21.4004606 ], [ 86.972817, 21.4000749 ], [ 86.9722672, 21.3993022 ], [ 86.9721304, 21.3987872 ], [ 86.9713054, 21.398787 ], [ 86.9708926, 21.397757 ], [ 86.970206, 21.3971127 ], [ 86.969518, 21.3967267 ], [ 86.9688314, 21.3955674 ], [ 86.9682816, 21.3954389 ], [ 86.9682816, 21.3949239 ], [ 86.9677318, 21.3949239 ], [ 86.967594, 21.3944088 ], [ 86.9664944, 21.3933786 ], [ 86.9658076, 21.3924767 ], [ 86.9651198, 21.3920907 ], [ 86.9645702, 21.3913181 ], [ 86.9644334, 21.3908031 ], [ 86.9636084, 21.3908029 ], [ 86.9634706, 21.3902879 ], [ 86.962784, 21.389386 ], [ 86.9622341, 21.3892576 ], [ 86.9622341, 21.3887426 ], [ 86.9616843, 21.3887424 ], [ 86.9615466, 21.3882274 ], [ 86.960447, 21.3871972 ], [ 86.9603101, 21.3866821 ], [ 86.9597603, 21.3866819 ], [ 86.9597605, 21.3861669 ], [ 86.9592105, 21.3860376 ], [ 86.9587978, 21.3856517 ], [ 86.9583861, 21.3846217 ], [ 86.9575613, 21.3844922 ], [ 86.9571487, 21.3838488 ], [ 86.9564621, 21.3832043 ], [ 86.9559123, 21.383076 ], [ 86.9557743, 21.3825608 ], [ 86.9550879, 21.3816591 ], [ 86.9545381, 21.3815306 ], [ 86.9545383, 21.3810155 ], [ 86.9539883, 21.3808863 ], [ 86.9534387, 21.3801134 ], [ 86.9528889, 21.3799851 ], [ 86.9527511, 21.3794701 ], [ 86.9522015, 21.3789549 ], [ 86.9520646, 21.3784398 ], [ 86.9515148, 21.3783104 ], [ 86.9511022, 21.377667 ], [ 86.9509654, 21.3768944 ], [ 86.9495908, 21.3767649 ], [ 86.9487664, 21.3762495 ], [ 86.9479418, 21.3757343 ], [ 86.947392, 21.3756058 ], [ 86.947392, 21.3753484 ], [ 86.9490414, 21.3756064 ], [ 86.9480792, 21.3745761 ], [ 86.9472548, 21.3735457 ], [ 86.9468431, 21.3725156 ], [ 86.9462933, 21.3725154 ], [ 86.9462935, 21.3720004 ], [ 86.9457437, 21.3720002 ], [ 86.9453313, 21.3709702 ], [ 86.9442321, 21.3699398 ], [ 86.9439573, 21.3694245 ], [ 86.9431329, 21.3686519 ], [ 86.9428582, 21.3681367 ], [ 86.941759, 21.3671063 ], [ 86.9412094, 21.3663336 ], [ 86.9410728, 21.3658186 ], [ 86.940523, 21.3656891 ], [ 86.9398354, 21.3650456 ], [ 86.9390112, 21.3640154 ], [ 86.9387365, 21.3635001 ], [ 86.9377753, 21.362598 ], [ 86.9376373, 21.3624697 ], [ 86.9370879, 21.3616971 ], [ 86.9369512, 21.3611821 ], [ 86.9364014, 21.3610526 ], [ 86.9355774, 21.3597648 ], [ 86.9350276, 21.3596362 ], [ 86.9348898, 21.3591212 ], [ 86.9343404, 21.358606 ], [ 86.9339288, 21.3579615 ], [ 86.9333791, 21.357833 ], [ 86.9328299, 21.3562877 ], [ 86.9320053, 21.3562875 ], [ 86.9314563, 21.3547423 ], [ 86.9309065, 21.3547421 ], [ 86.9307689, 21.3542269 ], [ 86.9302193, 21.3537116 ], [ 86.9300826, 21.3531966 ], [ 86.9295328, 21.3531964 ], [ 86.9289839, 21.3516512 ], [ 86.9284341, 21.3515217 ], [ 86.9277469, 21.3506206 ], [ 86.9276103, 21.3501055 ], [ 86.9270605, 21.3501053 ], [ 86.9269229, 21.3495901 ], [ 86.9262366, 21.3486882 ], [ 86.9256868, 21.3485597 ], [ 86.9255492, 21.3480445 ], [ 86.924863, 21.3471426 ], [ 86.9241756, 21.3467564 ], [ 86.9236262, 21.3459836 ], [ 86.9234895, 21.3454686 ], [ 86.9226649, 21.3454682 ], [ 86.9225273, 21.3449532 ], [ 86.9222525, 21.3446956 ], [ 86.9218413, 21.3436654 ], [ 86.9212916, 21.3435359 ], [ 86.919918, 21.3422477 ], [ 86.9192306, 21.3418615 ], [ 86.919094, 21.3413465 ], [ 86.9185443, 21.341217 ], [ 86.9184066, 21.3410885 ], [ 86.9182699, 21.3405735 ], [ 86.9177203, 21.340444 ], [ 86.9149728, 21.3386402 ], [ 86.9141486, 21.3378672 ], [ 86.9127746, 21.3374807 ], [ 86.9127744, 21.3379957 ], [ 86.911125, 21.3385098 ], [ 86.9111251, 21.3379948 ], [ 86.9105755, 21.3379946 ], [ 86.9105759, 21.3374796 ], [ 86.9114005, 21.3372225 ], [ 86.9115377, 21.3367075 ], [ 86.9118127, 21.3364501 ], [ 86.9118139, 21.3346476 ], [ 86.9115392, 21.33439 ], [ 86.9114032, 21.3328449 ], [ 86.9108536, 21.3328445 ], [ 86.9104415, 21.3315569 ], [ 86.9096179, 21.3302688 ], [ 86.9094814, 21.3294962 ], [ 86.9089318, 21.3293667 ], [ 86.908245, 21.3282082 ], [ 86.9076956, 21.3276928 ], [ 86.9070097, 21.3265333 ], [ 86.9063225, 21.3261469 ], [ 86.9056366, 21.3249874 ], [ 86.9048122, 21.3247294 ], [ 86.9044, 21.3240859 ], [ 86.9037137, 21.3234412 ], [ 86.9031643, 21.3231834 ], [ 86.9024773, 21.3225397 ], [ 86.9020658, 21.3218952 ], [ 86.9009668, 21.3215089 ], [ 86.9008294, 21.3209937 ], [ 86.8989069, 21.31919 ], [ 86.8987702, 21.318675 ], [ 86.8982208, 21.3185454 ], [ 86.8978082, 21.3181594 ], [ 86.8976717, 21.3176442 ], [ 86.8968473, 21.3175146 ], [ 86.8965727, 21.3172569 ], [ 86.8938248, 21.3168693 ], [ 86.8925859, 21.3194437 ], [ 86.8916239, 21.3203439 ], [ 86.890661, 21.3209874 ], [ 86.8902488, 21.3216304 ], [ 86.889974, 21.3216302 ], [ 86.8890123, 21.3207289 ], [ 86.8888763, 21.3196986 ], [ 86.8891511, 21.3196988 ], [ 86.8891505, 21.3204715 ], [ 86.8905243, 21.3207298 ], [ 86.8905247, 21.3202148 ], [ 86.8916241, 21.3199579 ], [ 86.8920363, 21.3194433 ], [ 86.8925865, 21.318671 ], [ 86.8928634, 21.3158387 ], [ 86.8923149, 21.3142932 ], [ 86.8920403, 21.3140356 ], [ 86.8916321, 21.3091428 ], [ 86.8910825, 21.3091424 ], [ 86.8909454, 21.3081124 ], [ 86.8901223, 21.3063091 ], [ 86.8898477, 21.3060515 ], [ 86.889299, 21.3047637 ], [ 86.88875, 21.3042483 ], [ 86.8882015, 21.3027028 ], [ 86.8879269, 21.3024452 ], [ 86.8868296, 21.3001269 ], [ 86.8866933, 21.2993543 ], [ 86.8861437, 21.2993539 ], [ 86.8857321, 21.2980661 ], [ 86.8850462, 21.2974214 ], [ 86.8844967, 21.2972927 ], [ 86.8840849, 21.2962625 ], [ 86.8835359, 21.2954894 ], [ 86.8835363, 21.2949744 ], [ 86.883081741055051, 21.294689935147449 ], [ 86.8827124, 21.2944588 ], [ 86.8823017, 21.2931712 ], [ 86.8817523, 21.2931708 ], [ 86.881204, 21.2916253 ], [ 86.8806544, 21.291625 ], [ 86.8805174, 21.2905947 ], [ 86.8794193, 21.2895639 ], [ 86.879283, 21.2887913 ], [ 86.8787332, 21.2890485 ], [ 86.8787338, 21.2882759 ], [ 86.8781843, 21.2882755 ], [ 86.8777727, 21.2869877 ], [ 86.8769492, 21.2862146 ], [ 86.8765383, 21.2851842 ], [ 86.8759889, 21.2851838 ], [ 86.8759893, 21.2846688 ], [ 86.8754397, 21.2846684 ], [ 86.8751658, 21.2836382 ], [ 86.8746164, 21.2836378 ], [ 86.8737941, 21.2813195 ], [ 86.8732446, 21.2813192 ], [ 86.8731076, 21.2802891 ], [ 86.8728332, 21.2800313 ], [ 86.8726967, 21.2795163 ], [ 86.8737959, 21.2792596 ], [ 86.8737963, 21.2787446 ], [ 86.8732469, 21.278744 ], [ 86.8732473, 21.2782292 ], [ 86.8721475, 21.279129 ], [ 86.8715981, 21.2791287 ], [ 86.8713233, 21.2792577 ], [ 86.8713236, 21.2787427 ], [ 86.8707738, 21.2791281 ], [ 86.870499, 21.2791279 ], [ 86.8703614, 21.2789994 ], [ 86.8703628, 21.2774545 ], [ 86.8700881, 21.2771967 ], [ 86.8699523, 21.2761665 ], [ 86.8691187, 21.2763232 ], [ 86.8688025, 21.2758881 ], [ 86.8685792, 21.2755212 ], [ 86.8684414, 21.2753929 ], [ 86.8678897, 21.2745764 ], [ 86.8674217, 21.2738188 ], [ 86.8670696, 21.2733316 ], [ 86.8665591, 21.2725651 ], [ 86.866208, 21.2721084 ], [ 86.8657603, 21.2713466 ], [ 86.8652426, 21.270549 ], [ 86.8647617, 21.2697954 ], [ 86.8641711, 21.2688506 ], [ 86.8635032, 21.2679211 ], [ 86.8633187, 21.2675169 ], [ 86.8629547, 21.2668907 ], [ 86.8627511, 21.2665925 ], [ 86.8624936, 21.2662263 ], [ 86.8619186, 21.2654525 ], [ 86.8613085, 21.2645719 ], [ 86.8608449, 21.2638012 ], [ 86.8600458, 21.2627212 ], [ 86.8597897, 21.2625224 ], [ 86.859316, 21.2619113 ], [ 86.8590312, 21.2614483 ], [ 86.8592468, 21.2611316 ], [ 86.8589081, 21.2607619 ], [ 86.8586632, 21.2608627 ], [ 86.8585068, 21.2607524 ], [ 86.8581321, 21.259924 ], [ 86.8577421, 21.2594188 ], [ 86.8573797, 21.2588087 ], [ 86.8570793, 21.2583957 ], [ 86.8567824, 21.2582587 ], [ 86.8560467, 21.2582213 ], [ 86.8558286, 21.2580818 ], [ 86.8565077, 21.2581302 ], [ 86.8568814, 21.2576583 ], [ 86.856593, 21.2571386 ], [ 86.8563711, 21.2568425 ], [ 86.8558369, 21.255854 ], [ 86.8551291, 21.2541002 ], [ 86.8547434, 21.2532288 ], [ 86.8542322, 21.2522244 ], [ 86.8539071, 21.2515289 ], [ 86.8536933, 21.2511679 ], [ 86.8535106, 21.2507667 ], [ 86.8533558, 21.2504022 ], [ 86.8531526, 21.249863 ], [ 86.8526218, 21.2488613 ], [ 86.8524391, 21.2485306 ], [ 86.8522594, 21.2480837 ], [ 86.8519268, 21.2474802 ], [ 86.8516661, 21.2469717 ], [ 86.8513491, 21.2463367 ], [ 86.851076, 21.2458385 ], [ 86.8507622, 21.2453262 ], [ 86.850543, 21.2449053 ], [ 86.8503931, 21.2445558 ], [ 86.8501756, 21.244276 ], [ 86.8499669, 21.2439253 ], [ 86.8498285, 21.2436303 ], [ 86.8493666, 21.2429113 ], [ 86.8493642, 21.2427161 ], [ 86.8492033, 21.2423713 ], [ 86.8490788, 21.2419193 ], [ 86.8488975, 21.2411208 ], [ 86.8484646, 21.2406323 ], [ 86.8481229, 21.2403018 ], [ 86.848316, 21.2399508 ], [ 86.848014, 21.2388428 ], [ 86.8474164, 21.2379813 ], [ 86.8469298, 21.2370208 ], [ 86.8465125, 21.2364728 ], [ 86.8462319, 21.2360102 ], [ 86.8459133, 21.2351912 ], [ 86.8455716, 21.2343307 ], [ 86.8449901, 21.2335501 ], [ 86.8443517, 21.2330826 ], [ 86.8440353, 21.2326258 ], [ 86.8438356, 21.2322801 ], [ 86.8433511, 21.2308225 ], [ 86.8429693, 21.2303525 ], [ 86.8426083, 21.2301594 ], [ 86.8423904, 21.2297917 ], [ 86.8418862, 21.2294714 ], [ 86.8415794, 21.2289609 ], [ 86.8414444, 21.2280111 ], [ 86.8412479, 21.2269797 ], [ 86.8407811, 21.2263586 ], [ 86.8406098, 21.2257981 ], [ 86.8403356, 21.2255404 ], [ 86.8397863, 21.2254116 ], [ 86.8396491, 21.2248964 ], [ 86.8382781, 21.222835 ], [ 86.8377295, 21.2223194 ], [ 86.8375936, 21.2215468 ], [ 86.8370441, 21.2215462 ], [ 86.8369073, 21.2207736 ], [ 86.8362218, 21.2201287 ], [ 86.8342999, 21.2198694 ], [ 86.8340256, 21.2194833 ], [ 86.8345749, 21.2194838 ], [ 86.8347123, 21.218969 ], [ 86.8344378, 21.2187112 ], [ 86.8343016, 21.218196 ], [ 86.8337525, 21.2180663 ], [ 86.8336149, 21.2179378 ], [ 86.8334787, 21.2174226 ], [ 86.8329296, 21.217293 ], [ 86.8326552, 21.2170352 ], [ 86.8321061, 21.2169063 ], [ 86.8322452, 21.2148464 ], [ 86.8318353, 21.2135585 ], [ 86.8334832, 21.2133026 ], [ 86.8337588, 21.2125303 ], [ 86.8356805, 21.2130473 ], [ 86.8349954, 21.211244 ], [ 86.8347211, 21.2109862 ], [ 86.8347219, 21.2102136 ], [ 86.8351349, 21.2096991 ], [ 86.833762, 21.2095685 ], [ 86.8334877, 21.2093107 ], [ 86.8329387, 21.2091818 ], [ 86.8325274, 21.2081514 ], [ 86.8321163, 21.2078936 ], [ 86.8321158, 21.2084084 ], [ 86.8315664, 21.2085362 ], [ 86.8312914, 21.2087934 ], [ 86.8293692, 21.2087916 ], [ 86.8284065, 21.2096923 ], [ 86.8281313, 21.2102072 ], [ 86.8267567, 21.2114933 ], [ 86.8268918, 21.213811 ], [ 86.8264798, 21.213553 ], [ 86.8262057, 21.2130376 ], [ 86.826346, 21.2109777 ], [ 86.8271706, 21.2103344 ], [ 86.8277198, 21.2102066 ], [ 86.8277211, 21.2091767 ], [ 86.8274465, 21.2091764 ], [ 86.8274458, 21.2096914 ], [ 86.8266223, 21.209433 ], [ 86.8266242, 21.2078879 ], [ 86.8290954, 21.208148 ], [ 86.8290959, 21.207633 ], [ 86.8285467, 21.2076324 ], [ 86.8282738, 21.2060871 ], [ 86.8277247, 21.2060866 ], [ 86.8277249, 21.205829 ], [ 86.8282742, 21.2058295 ], [ 86.8286866, 21.2050575 ], [ 86.8288251, 21.204285 ], [ 86.8293741, 21.2045432 ], [ 86.8293747, 21.2040282 ], [ 86.8296493, 21.2040284 ], [ 86.8296486, 21.2045434 ], [ 86.8307468, 21.2048021 ], [ 86.8306113, 21.2027418 ], [ 86.8308865, 21.202227 ], [ 86.8308875, 21.2014546 ], [ 86.8307508, 21.201197 ], [ 86.8318502, 21.2002964 ], [ 86.8326743, 21.2001688 ], [ 86.832675, 21.1993964 ], [ 86.8307527, 21.1995226 ], [ 86.8306149, 21.1996517 ], [ 86.8302023, 21.2006814 ], [ 86.8291041, 21.200551 ], [ 86.8285546, 21.2006797 ], [ 86.8284182, 21.1996494 ], [ 86.8273207, 21.1988759 ], [ 86.826637, 21.1968152 ], [ 86.8260878, 21.1968146 ], [ 86.8258145, 21.1957842 ], [ 86.8252653, 21.1957836 ], [ 86.8249926, 21.1942384 ], [ 86.8244433, 21.1942378 ], [ 86.8244437, 21.1939802 ], [ 86.8249929, 21.1939808 ], [ 86.8249931, 21.1937233 ], [ 86.8241696, 21.1935933 ], [ 86.8230721, 21.1929488 ], [ 86.8230714, 21.1934638 ], [ 86.8216985, 21.1934623 ], [ 86.8216992, 21.1929473 ], [ 86.8233469, 21.1926916 ], [ 86.8237595, 21.1916619 ], [ 86.8237605, 21.1908895 ], [ 86.8232126, 21.1898589 ], [ 86.8232141, 21.1885712 ], [ 86.8234896, 21.1877989 ], [ 86.8234917, 21.1859964 ], [ 86.8229459, 21.1831633 ], [ 86.8223978, 21.1823901 ], [ 86.8225361, 21.1818753 ], [ 86.8211636, 21.1816164 ], [ 86.8215762, 21.1805867 ], [ 86.822264, 21.179815 ], [ 86.8214403, 21.1798141 ], [ 86.8215775, 21.1795567 ], [ 86.8215783, 21.1787842 ], [ 86.8210298, 21.1782686 ], [ 86.8210302, 21.178011 ], [ 86.821305, 21.1777538 ], [ 86.8213059, 21.1769813 ], [ 86.8210317, 21.1767235 ], [ 86.82117, 21.1762087 ], [ 86.820621, 21.1762081 ], [ 86.8208965, 21.1754359 ], [ 86.8203473, 21.1754353 ], [ 86.8203481, 21.1749203 ], [ 86.8208971, 21.1749209 ], [ 86.8208977, 21.1744058 ], [ 86.8203486, 21.1744053 ], [ 86.8206238, 21.1738904 ], [ 86.8189769, 21.1736313 ], [ 86.8192536, 21.171829 ], [ 86.8198032, 21.1714429 ], [ 86.8203524, 21.1713151 ], [ 86.820353, 21.1708001 ], [ 86.820902, 21.1708007 ], [ 86.8209028, 21.1702856 ], [ 86.8203536, 21.1702851 ], [ 86.8204944, 21.1669375 ], [ 86.8207695, 21.1664229 ], [ 86.8210451, 21.1656506 ], [ 86.8210462, 21.1646205 ], [ 86.8217359, 21.1623038 ], [ 86.8228342, 21.1620473 ], [ 86.8229723, 21.1610175 ], [ 86.8222876, 21.1599866 ], [ 86.8228372, 21.1596005 ], [ 86.8233864, 21.1594728 ], [ 86.8233857, 21.1599878 ], [ 86.8236603, 21.1599882 ], [ 86.8239385, 21.1568984 ], [ 86.8236637, 21.1570263 ], [ 86.8228402, 21.1570254 ], [ 86.8224284, 21.1566393 ], [ 86.8217448, 21.154836 ], [ 86.8228431, 21.1545795 ], [ 86.8231186, 21.1538073 ], [ 86.8225698, 21.1536774 ], [ 86.8224322, 21.1535491 ], [ 86.8222963, 21.1527765 ], [ 86.8217474, 21.1526466 ], [ 86.8216098, 21.1525181 ], [ 86.8214738, 21.1520031 ], [ 86.8220226, 21.1520037 ], [ 86.8220234, 21.1514886 ], [ 86.8228465, 21.151747 ], [ 86.8229848, 21.1504595 ], [ 86.8227106, 21.1502017 ], [ 86.8225749, 21.1494291 ], [ 86.8214764, 21.1496854 ], [ 86.8214772, 21.1491704 ], [ 86.8209277, 21.1494274 ], [ 86.8210661, 21.1481399 ], [ 86.8213413, 21.1476253 ], [ 86.8221657, 21.1468536 ], [ 86.8224407, 21.1463388 ], [ 86.8224416, 21.1455663 ], [ 86.8221674, 21.1453085 ], [ 86.8217586, 21.1432481 ], [ 86.8223076, 21.1432486 ], [ 86.8235439, 21.1419623 ], [ 86.8235452, 21.1409322 ], [ 86.8231347, 21.1402876 ], [ 86.8225858, 21.1401587 ], [ 86.8221723, 21.1411883 ], [ 86.8214858, 21.1418309 ], [ 86.8209366, 21.1420878 ], [ 86.8170939, 21.1420838 ], [ 86.8168193, 21.1422127 ], [ 86.816682, 21.1416975 ], [ 86.8159969, 21.14131 ], [ 86.8154484, 21.1407945 ], [ 86.8148996, 21.1407939 ], [ 86.8140767, 21.1402779 ], [ 86.8121553, 21.1402758 ], [ 86.8116061, 21.1405327 ], [ 86.8113316, 21.1405323 ], [ 86.810783, 21.1402743 ], [ 86.8099604, 21.1395007 ], [ 86.8094116, 21.1393719 ], [ 86.8092746, 21.1388566 ], [ 86.8085894, 21.1384692 ], [ 86.8072169, 21.1384677 ], [ 86.8062551, 21.1391108 ], [ 86.806254, 21.1398833 ], [ 86.8058423, 21.1402687 ], [ 86.8044689, 21.1410396 ], [ 86.803096, 21.1414248 ], [ 86.8024072, 21.1429689 ], [ 86.8024061, 21.1437415 ], [ 86.8022693, 21.1438697 ], [ 86.80172, 21.1439982 ], [ 86.8015817, 21.144513 ], [ 86.8008954, 21.144898 ], [ 86.7995225, 21.1451539 ], [ 86.7992477, 21.1454112 ], [ 86.7986987, 21.1455397 ], [ 86.7986993, 21.1450247 ], [ 86.7976008, 21.1454093 ], [ 86.7948559, 21.1454059 ], [ 86.7944445, 21.1447621 ], [ 86.7941729, 21.1427017 ], [ 86.7940372, 21.141929 ], [ 86.7938582, 21.1404713 ], [ 86.7902901, 21.1402908 ], [ 86.7893727, 21.140764 ], [ 86.7890979, 21.1410211 ], [ 86.7886422, 21.1410613 ], [ 86.7874502, 21.141534 ], [ 86.7871754, 21.1417912 ], [ 86.7855277, 21.1423042 ], [ 86.7852528, 21.1425614 ], [ 86.784429, 21.1428179 ], [ 86.7836048, 21.1433318 ], [ 86.7831491, 21.1433718 ], [ 86.7820508, 21.1436279 ], [ 86.780859, 21.1439725 ], [ 86.779669, 21.1423373 ], [ 86.7782103, 21.142078 ], [ 86.7764691, 21.1426792 ], [ 86.7764695, 21.1424217 ], [ 86.7781172, 21.1419088 ], [ 86.7797641, 21.1419111 ], [ 86.7809525, 21.1438028 ], [ 86.7819576, 21.143459 ], [ 86.7830559, 21.1432029 ], [ 86.7833305, 21.1432031 ], [ 86.7833313, 21.142688 ], [ 86.7847042, 21.1423032 ], [ 86.784979, 21.142046 ], [ 86.7869011, 21.1415334 ], [ 86.7871761, 21.1412762 ], [ 86.788549, 21.1408922 ], [ 86.7890984, 21.140506 ], [ 86.7901969, 21.1401216 ], [ 86.7926675, 21.1399956 ], [ 86.7940774, 21.1401204 ], [ 86.7945876, 21.1408995 ], [ 86.7943131, 21.1408993 ], [ 86.7943124, 21.1414142 ], [ 86.794587, 21.1414146 ], [ 86.7945862, 21.1419296 ], [ 86.7947208, 21.1434749 ], [ 86.794995, 21.1437326 ], [ 86.7948567, 21.1447625 ], [ 86.7951311, 21.1448912 ], [ 86.7995237, 21.1443815 ], [ 86.800896, 21.1445123 ], [ 86.8018574, 21.1434834 ], [ 86.8021338, 21.1421961 ], [ 86.8024086, 21.1419388 ], [ 86.8028221, 21.1409094 ], [ 86.8044694, 21.1405246 ], [ 86.8047444, 21.1402673 ], [ 86.8052935, 21.1401398 ], [ 86.8061192, 21.138338 ], [ 86.8077669, 21.1376958 ], [ 86.8080415, 21.137696 ], [ 86.8094129, 21.1384701 ], [ 86.8099616, 21.1386 ], [ 86.8102351, 21.1393728 ], [ 86.8107839, 21.1395017 ], [ 86.8110582, 21.1397595 ], [ 86.8140776, 21.1395053 ], [ 86.8149005, 21.1400213 ], [ 86.8157232, 21.1405372 ], [ 86.8168208, 21.1409251 ], [ 86.8170961, 21.1401528 ], [ 86.8179204, 21.1395094 ], [ 86.8192934, 21.1389959 ], [ 86.8201179, 21.1382242 ], [ 86.8209413, 21.1380969 ], [ 86.8209421, 21.1375818 ], [ 86.8220402, 21.1373255 ], [ 86.8220408, 21.1368105 ], [ 86.8225898, 21.1368111 ], [ 86.8227272, 21.1362963 ], [ 86.8225907, 21.1360385 ], [ 86.8234144, 21.1357818 ], [ 86.8239652, 21.1342375 ], [ 86.8250638, 21.1335943 ], [ 86.8256129, 21.1334665 ], [ 86.8256138, 21.1326941 ], [ 86.8264376, 21.1323082 ], [ 86.8269865, 21.132438 ], [ 86.8268508, 21.1306351 ], [ 86.8271266, 21.1296055 ], [ 86.8274014, 21.1293482 ], [ 86.8291903, 21.1245451 ], [ 86.833101, 21.1129625 ], [ 86.8400425, 21.096636 ], [ 86.8444421, 21.0858722 ], [ 86.8492327, 21.0778445 ], [ 86.8554899, 21.0641599 ], [ 86.8621381, 21.0532113 ], [ 86.8691774, 21.0430831 ], [ 86.8740657, 21.0358744 ], [ 86.8801274, 21.0281178 ], [ 86.883081741055051, 21.024015702695451 ], [ 86.8879488, 21.0172578 ], [ 86.8938149, 21.006397 ], [ 86.9014407, 20.9910628 ], [ 86.9061336, 20.9777354 ], [ 86.90620119896596, 20.977521405468753 ], [ 86.9101421, 20.9650459 ], [ 86.9124885, 20.9536335 ], [ 86.9158126, 20.9443204 ], [ 86.9203099, 20.9356458 ], [ 86.9246117, 20.9275187 ], [ 86.9301845, 20.9186606 ], [ 86.9332153, 20.9119938 ], [ 86.9376149, 20.9009427 ], [ 86.9400591, 20.8942751 ], [ 86.9450452, 20.8843189 ], [ 86.9492492, 20.8781073 ], [ 86.9553899, 20.8690982 ], [ 86.9592392, 20.8633081 ], [ 86.962619, 20.8533944 ], [ 86.9641031, 20.8355167 ], [ 86.9683418, 20.8267607 ], [ 86.9685671, 20.8216622 ], [ 86.9683272, 20.8170152 ], [ 86.9665247, 20.8078883 ], [ 86.9644967, 20.7944777 ], [ 86.9634452, 20.7907563 ], [ 86.9606662, 20.7866134 ], [ 86.9589388, 20.7848579 ], [ 86.9576619, 20.7847175 ], [ 86.9533057, 20.7857708 ], [ 86.9487992, 20.7876667 ], [ 86.9397862, 20.7900541 ], [ 86.9344536, 20.790686 ], [ 86.927093, 20.7907563 ], [ 86.9214599, 20.7911776 ], [ 86.9155264, 20.7918797 ], [ 86.9080156, 20.792301 ], [ 86.9019319, 20.7923712 ], [ 86.8940455, 20.7936351 ], [ 86.8884125, 20.7946181 ], [ 86.8845819, 20.7957416 ], [ 86.8802257, 20.7960927 ], [ 86.8765454, 20.7957416 ], [ 86.870011, 20.7943373 ], [ 86.8650539, 20.7924415 ], [ 86.8576933, 20.788088 ], [ 86.851088, 20.7847266 ], [ 86.8443992, 20.781066 ], [ 86.8348605, 20.7769229 ], [ 86.8307296, 20.7740437 ], [ 86.8258476, 20.7697599 ], [ 86.8209656, 20.7644928 ], [ 86.8194707, 20.7627646 ], [ 86.818487, 20.7614729 ], [ 86.816384, 20.7566971 ], [ 86.8150221, 20.7511599 ], [ 86.815769, 20.7437361 ], [ 86.8157831, 20.7415963 ], [ 86.8151072, 20.7290931 ], [ 86.8153325, 20.7274774 ], [ 86.8160084, 20.7264237 ], [ 86.8161587, 20.7241758 ], [ 86.8154827, 20.7224196 ], [ 86.8128539, 20.7199609 ], [ 86.8074462, 20.7153243 ], [ 86.8035405, 20.7110388 ], [ 86.800386, 20.7062615 ], [ 86.7976821, 20.7018353 ], [ 86.7943023, 20.6955119 ], [ 86.7908473, 20.6878532 ], [ 86.788519, 20.6819509 ], [ 86.787167, 20.6775942 ], [ 86.7879181, 20.6747834 ], [ 86.7879932, 20.6735888 ], [ 86.7851391, 20.6685994 ], [ 86.782285, 20.6643127 ], [ 86.7789803, 20.6610799 ], [ 86.7753751, 20.6578472 ], [ 86.7731218, 20.6548954 ], [ 86.7693665, 20.6492026 ], [ 86.7673385, 20.6454776 ], [ 86.7668879, 20.6432285 ], [ 86.7665875, 20.6369027 ], [ 86.7665124, 20.6312092 ], [ 86.7647849, 20.6250234 ], [ 86.7622312, 20.6208761 ], [ 86.7596775, 20.6177127 ], [ 86.7569737, 20.6163771 ], [ 86.7544951, 20.6163771 ], [ 86.7526279, 20.6167948 ], [ 86.7526177, 20.6131377 ], [ 86.7577998, 20.6134245 ], [ 86.7624565, 20.615182 ], [ 86.7666626, 20.6185563 ], [ 86.7695918, 20.623477 ], [ 86.7714695, 20.6279758 ], [ 86.7721454, 20.6324744 ], [ 86.771845, 20.6359186 ], [ 86.7714695, 20.641401 ], [ 86.7723708, 20.6441422 ], [ 86.7739958, 20.6451712 ], [ 86.77539, 20.6453237 ], [ 86.7786139, 20.6451759 ], [ 86.7810477, 20.6441111 ], [ 86.7820907, 20.643135 ], [ 86.7824384, 20.6427209 ], [ 86.7836711, 20.6426913 ], [ 86.7851882, 20.6426618 ], [ 86.786895, 20.6430463 ], [ 86.7917309, 20.6435195 ], [ 86.7961559, 20.6437561 ], [ 86.7970409, 20.6433125 ], [ 86.797515, 20.6431054 ], [ 86.7975466, 20.6436083 ], [ 86.7978311, 20.6438744 ], [ 86.80371, 20.6437561 ], [ 86.8057329, 20.6434308 ], [ 86.8069339, 20.6427209 ], [ 86.808135, 20.6416265 ], [ 86.8089783, 20.6407226 ], [ 86.809747, 20.6401547 ], [ 86.8099695, 20.639814 ], [ 86.8095447, 20.6396247 ], [ 86.810235, 20.6394082 ], [ 86.8109546, 20.6387574 ], [ 86.8133621, 20.6375442 ], [ 86.8157697, 20.6367932 ], [ 86.8172513, 20.636851 ], [ 86.8187946, 20.6371398 ], [ 86.8203379, 20.6389885 ], [ 86.8221282, 20.6422236 ], [ 86.8231159, 20.6445922 ], [ 86.8230542, 20.6472495 ], [ 86.821696, 20.6503689 ], [ 86.8197823, 20.6540082 ], [ 86.816634, 20.6596113 ], [ 86.8156462, 20.6617485 ], [ 86.8142881, 20.6631925 ], [ 86.8120657, 20.6649831 ], [ 86.8099051, 20.6664849 ], [ 86.8078679, 20.6677556 ], [ 86.8049047, 20.668391 ], [ 86.8023737, 20.6682177 ], [ 86.8003983, 20.6672358 ], [ 86.7993488, 20.6654452 ], [ 86.7983611, 20.664521 ], [ 86.7969412, 20.6649831 ], [ 86.7964474, 20.6668892 ], [ 86.7968795, 20.6694884 ], [ 86.7978672, 20.6722608 ], [ 86.8003365, 20.6743401 ], [ 86.8039788, 20.6753797 ], [ 86.8121892, 20.675553 ], [ 86.8192267, 20.6752642 ], [ 86.8255235, 20.673647 ], [ 86.8291657, 20.6720298 ], [ 86.8319437, 20.6699505 ], [ 86.8350303, 20.6663694 ], [ 86.8366354, 20.6623261 ], [ 86.8383639, 20.6554523 ], [ 86.8398455, 20.6527951 ], [ 86.8420061, 20.6510621 ], [ 86.8442902, 20.6506 ], [ 86.8479942, 20.651582 ], [ 86.8517599, 20.6532572 ], [ 86.8570689, 20.6568964 ], [ 86.8604024, 20.6594957 ], [ 86.8637735, 20.6619091 ], [ 86.869945, 20.6663978 ], [ 86.8761339, 20.6720759 ], [ 86.8807605, 20.6772479 ], [ 86.8860782, 20.6823213 ], [ 86.8935138, 20.6882236 ], [ 86.8992971, 20.694196 ], [ 86.9038036, 20.6982009 ], [ 86.9119904, 20.7017138 ], [ 86.9198767, 20.7048052 ], [ 86.9324197, 20.7100743 ], [ 86.9366258, 20.7111282 ], [ 86.9398554, 20.7112687 ], [ 86.9477417, 20.7102851 ], [ 86.9565293, 20.7090205 ], [ 86.9641904, 20.7088098 ], [ 86.9699586, 20.7083095 ], [ 86.9734677, 20.7072304 ], [ 86.9774093, 20.7051171 ], [ 86.979284, 20.7041279 ], [ 86.9842351, 20.7030487 ], [ 86.9913974, 20.7019696 ], [ 86.9993769, 20.7005756 ], [ 87.0058065, 20.6996666 ], [ 87.012766, 20.6985692 ], [ 87.0157396, 20.6996403 ], [ 87.0178931, 20.7005037 ], [ 87.0193928, 20.7006116 ], [ 87.0207388, 20.700108 ], [ 87.0224693, 20.7000001 ], [ 87.0241228, 20.7013311 ], [ 87.0260456, 20.7024102 ], [ 87.0285452, 20.7035254 ], [ 87.0300834, 20.7047124 ], [ 87.0315062, 20.705288 ], [ 87.0336982, 20.705288 ], [ 87.0358901, 20.7057916 ], [ 87.0371592, 20.7066908 ], [ 87.0386589, 20.7081657 ], [ 87.0413123, 20.7094246 ], [ 87.0434274, 20.7100721 ], [ 87.0449271, 20.7103239 ], [ 87.0458885, 20.7104318 ], [ 87.0463115, 20.7108994 ], [ 87.0465422, 20.7118706 ], [ 87.048042, 20.7126979 ], [ 87.0490803, 20.7132375 ], [ 87.0498494, 20.7138849 ], [ 87.0504647, 20.7146403 ], [ 87.0514645, 20.7151438 ], [ 87.0525797, 20.7161869 ], [ 87.0532719, 20.7176257 ], [ 87.0532335, 20.7190284 ], [ 87.0535026, 20.7197838 ], [ 87.0542717, 20.7193522 ], [ 87.0544256, 20.718345 ], [ 87.0538884, 20.7164494 ], [ 87.0526833, 20.7145861 ], [ 87.0509886, 20.7133094 ], [ 87.0485569, 20.7118741 ], [ 87.0464882, 20.709909 ], [ 87.0448118, 20.7086692 ], [ 87.0420814, 20.7069067 ], [ 87.0380052, 20.7046045 ], [ 87.0332367, 20.7012231 ], [ 87.0300834, 20.6982374 ], [ 87.0277761, 20.6963308 ], [ 87.0243151, 20.6943163 ], [ 87.0208157, 20.6921578 ], [ 87.0199312, 20.6908627 ], [ 87.0173547, 20.6895316 ], [ 87.0155858, 20.6882006 ], [ 87.0054848, 20.6813733 ], [ 86.9878543, 20.6695794 ], [ 86.9716407, 20.6595363 ], [ 86.953852, 20.6488149 ], [ 86.9336986, 20.6361444 ], [ 86.9224857, 20.6291864 ], [ 86.91592, 20.6255705 ], [ 86.9050783, 20.6185884 ], [ 86.8986961, 20.6142376 ], [ 86.8743656, 20.5977398 ], [ 86.8578399, 20.5861378 ], [ 86.8556136, 20.5844038 ], [ 86.844985, 20.5769855 ], [ 86.8448493, 20.5764703 ], [ 86.8432093, 20.5755671 ], [ 86.8426625, 20.5754382 ], [ 86.8426631, 20.5749232 ], [ 86.8415694, 20.5747929 ], [ 86.8404769, 20.5735043 ], [ 86.8396569, 20.573246 ], [ 86.838291, 20.5719572 ], [ 86.8374707, 20.5716988 ], [ 86.8347385, 20.5696361 ], [ 86.8341918, 20.5695072 ], [ 86.8341923, 20.5689922 ], [ 86.833099, 20.5686043 ], [ 86.8292738, 20.5657678 ], [ 86.8254488, 20.5629311 ], [ 86.8246287, 20.5626727 ], [ 86.8145204, 20.5554514 ], [ 86.8134271, 20.5551927 ], [ 86.8096027, 20.5523558 ], [ 86.8087826, 20.5522265 ], [ 86.8087832, 20.5517115 ], [ 86.8076898, 20.5514528 ], [ 86.8076904, 20.5509377 ], [ 86.8065972, 20.550679 ], [ 86.8065978, 20.550164 ], [ 86.8060508, 20.5502917 ], [ 86.8030463, 20.5479704 ], [ 86.8022264, 20.5477121 ], [ 86.800041, 20.5461644 ], [ 86.7992222, 20.5451334 ], [ 86.7978556, 20.5447459 ], [ 86.7977191, 20.5442307 ], [ 86.7923927, 20.5408765 ], [ 86.7922562, 20.5403613 ], [ 86.7902082, 20.5389419 ], [ 86.7896617, 20.538813 ], [ 86.7896622, 20.538298 ], [ 86.7887057, 20.5377816 ], [ 86.7885702, 20.5372664 ], [ 86.7870671, 20.5364921 ], [ 86.7866584, 20.5358472 ], [ 86.7861119, 20.5357183 ], [ 86.7852937, 20.5343004 ], [ 86.7847471, 20.5341714 ], [ 86.7839293, 20.5324961 ], [ 86.7833827, 20.532367 ], [ 86.7827008, 20.530821 ], [ 86.7813366, 20.5290166 ], [ 86.7805186, 20.5274704 ], [ 86.7797008, 20.5259242 ], [ 86.7787488, 20.5228327 ], [ 86.778202, 20.5228319 ], [ 86.777931, 20.5212865 ], [ 86.7773842, 20.5212857 ], [ 86.7761693, 20.5104679 ], [ 86.7758964, 20.5102101 ], [ 86.7752166, 20.5081489 ], [ 86.7743965, 20.5081479 ], [ 86.7739886, 20.5063447 ], [ 86.7734432, 20.5055713 ], [ 86.773308, 20.5047985 ], [ 86.7711228, 20.5038939 ], [ 86.7672971, 20.5032455 ], [ 86.7672963, 20.5037605 ], [ 86.7659302, 20.5033719 ], [ 86.7601894, 20.5040083 ], [ 86.7603243, 20.5047811 ], [ 86.7612786, 20.5065851 ], [ 86.760732, 20.5065844 ], [ 86.7604574, 20.5073566 ], [ 86.7610041, 20.5073574 ], [ 86.7610028, 20.50813 ], [ 86.7620956, 20.5085173 ], [ 86.764556, 20.5082631 ], [ 86.7670134, 20.5100691 ], [ 86.7678333, 20.5101994 ], [ 86.7712427, 20.5148395 ], [ 86.7717872, 20.5163853 ], [ 86.7734241, 20.5184477 ], [ 86.7745127, 20.521797 ], [ 86.7765588, 20.5248901 ], [ 86.7735528, 20.5242419 ], [ 86.7713682, 20.5226938 ], [ 86.7667205, 20.5230744 ], [ 86.7668579, 20.522302 ], [ 86.7672695, 20.5215299 ], [ 86.7691833, 20.5212749 ], [ 86.7693226, 20.519215 ], [ 86.7689142, 20.5185702 ], [ 86.767821, 20.518311 ], [ 86.7674111, 20.5179247 ], [ 86.7671408, 20.5158641 ], [ 86.7660506, 20.5138025 ], [ 86.7660518, 20.5130298 ], [ 86.7642801, 20.5100654 ], [ 86.7637335, 20.5099365 ], [ 86.7635972, 20.5094211 ], [ 86.7615487, 20.5087741 ], [ 86.7607292, 20.508387 ], [ 86.76032, 20.507614 ], [ 86.7601852, 20.5065836 ], [ 86.7599117, 20.5067115 ], [ 86.7585436, 20.5077397 ], [ 86.7577235, 20.5077386 ], [ 86.7571775, 20.5073521 ], [ 86.7578533, 20.511731 ], [ 86.7581262, 20.5119888 ], [ 86.7581219, 20.5148217 ], [ 86.7575704, 20.5179113 ], [ 86.7564748, 20.5191975 ], [ 86.7560637, 20.5202269 ], [ 86.7549696, 20.5206112 ], [ 86.7544215, 20.5215123 ], [ 86.7527809, 20.5217675 ], [ 86.75278, 20.5222825 ], [ 86.7512752, 20.5227954 ], [ 86.7511378, 20.5235677 ], [ 86.7494961, 20.5244664 ], [ 86.7440274, 20.5252309 ], [ 86.7396558, 20.5239368 ], [ 86.7388363, 20.5235497 ], [ 86.7365188, 20.5196834 ], [ 86.7366574, 20.5189109 ], [ 86.7382984, 20.5183984 ], [ 86.7382992, 20.5178833 ], [ 86.7393937, 20.5172407 ], [ 86.7418552, 20.5164717 ], [ 86.7424028, 20.5159574 ], [ 86.7426761, 20.515958 ], [ 86.742949, 20.5162158 ], [ 86.746777, 20.5155781 ], [ 86.7467779, 20.5150631 ], [ 86.747051, 20.5151918 ], [ 86.7484181, 20.5150653 ], [ 86.7486931, 20.5140357 ], [ 86.7500601, 20.5137801 ], [ 86.7503353, 20.5127505 ], [ 86.7511552, 20.5127516 ], [ 86.7512948, 20.5106915 ], [ 86.7507501, 20.5094031 ], [ 86.7499369, 20.5052816 ], [ 86.7474803, 20.5032177 ], [ 86.7469357, 20.5019293 ], [ 86.7466674, 20.4988386 ], [ 86.7432606, 20.4932963 ], [ 86.7429873, 20.4932958 ], [ 86.7421665, 20.4938097 ], [ 86.7413463, 20.4939376 ], [ 86.7413455, 20.4944528 ], [ 86.7402521, 20.4944511 ], [ 86.7402514, 20.4949661 ], [ 86.7391576, 20.4952221 ], [ 86.7391599, 20.4939344 ], [ 86.7386131, 20.4939336 ], [ 86.7387507, 20.4931612 ], [ 86.7379346, 20.4908422 ], [ 86.7384827, 20.4900705 ], [ 86.7394466, 20.4859514 ], [ 86.7413606, 20.4854392 ], [ 86.7413614, 20.4849242 ], [ 86.744917, 20.4832549 ], [ 86.7451903, 20.4832555 ], [ 86.74601, 20.4833859 ], [ 86.7449131, 20.4857019 ], [ 86.7460061, 20.485832 ], [ 86.747921, 20.4846762 ], [ 86.7499656, 20.487512 ], [ 86.7498265, 20.4893145 ], [ 86.7503731, 20.4893154 ], [ 86.7507781, 20.4921487 ], [ 86.7521397, 20.4952411 ], [ 86.7524105, 20.4967866 ], [ 86.7526834, 20.4970446 ], [ 86.752683, 20.497302 ], [ 86.7524092, 20.4975592 ], [ 86.7524077, 20.4985893 ], [ 86.7515859, 20.4996182 ], [ 86.7515848, 20.5003908 ], [ 86.752948, 20.502453 ], [ 86.7528102, 20.5034829 ], [ 86.7530835, 20.5034832 ], [ 86.7533593, 20.5019385 ], [ 86.7539061, 20.5019393 ], [ 86.7539121, 20.4980763 ], [ 86.7541854, 20.4980767 ], [ 86.755412, 20.4998813 ], [ 86.7555475, 20.5009115 ], [ 86.7566401, 20.5014281 ], [ 86.7567772, 20.5009132 ], [ 86.7554133, 20.4991086 ], [ 86.7543228, 20.4973045 ], [ 86.7539149, 20.4962736 ], [ 86.7533684, 20.4962729 ], [ 86.7530975, 20.4947274 ], [ 86.7525509, 20.4947265 ], [ 86.7522805, 20.4929234 ], [ 86.7517339, 20.4929227 ], [ 86.7506444, 20.4861137 ], [ 86.750244, 20.484422 ], [ 86.7473905, 20.4748894 ], [ 86.7468435, 20.4751461 ], [ 86.7465731, 20.473343 ], [ 86.7460267, 20.4733423 ], [ 86.7454852, 20.470251 ], [ 86.7449386, 20.4702502 ], [ 86.7448027, 20.4694774 ], [ 86.7441215, 20.4685748 ], [ 86.7435755, 20.4683164 ], [ 86.7419357, 20.4683139 ], [ 86.7415235, 20.4694727 ], [ 86.7413096, 20.4716922 ], [ 86.740911, 20.474754 ], [ 86.7398747, 20.476845 ], [ 86.7384399, 20.4778905 ], [ 86.7380413, 20.4769944 ], [ 86.7385993, 20.4742313 ], [ 86.738121, 20.4710201 ], [ 86.7374036, 20.4669873 ], [ 86.7356499, 20.4634772 ], [ 86.7334976, 20.4558592 ], [ 86.7326207, 20.4525729 ], [ 86.7327004, 20.4483156 ], [ 86.7327004, 20.4464483 ], [ 86.7323816, 20.441892 ], [ 86.7322222, 20.4353934 ], [ 86.7327004, 20.4288199 ], [ 86.7330193, 20.4261307 ], [ 86.7335773, 20.4229184 ], [ 86.7341353, 20.4176891 ], [ 86.7334179, 20.4130572 ], [ 86.7312656, 20.4072299 ], [ 86.7295119, 20.4032701 ], [ 86.7275987, 20.3994597 ], [ 86.725845, 20.3959481 ], [ 86.7264827, 20.3940801 ], [ 86.7281567, 20.3947526 ], [ 86.7299104, 20.3960975 ], [ 86.7318236, 20.4001321 ], [ 86.7334179, 20.4028218 ], [ 86.7352513, 20.403569 ], [ 86.7393964, 20.4039425 ], [ 86.7456939, 20.4042414 ], [ 86.7488824, 20.403569 ], [ 86.7503173, 20.401477 ], [ 86.7505564, 20.3990861 ], [ 86.750397, 20.3982643 ], [ 86.7507956, 20.3971435 ], [ 86.7530276, 20.3966952 ], [ 86.7558973, 20.3970688 ], [ 86.7570133, 20.3957986 ], [ 86.7586076, 20.3955745 ], [ 86.7606802, 20.3955745 ], [ 86.764347, 20.3966952 ], [ 86.767695, 20.3971435 ], [ 86.7701662, 20.3968447 ], [ 86.7731953, 20.3956492 ], [ 86.7761447, 20.3939307 ], [ 86.7781376, 20.3922869 ], [ 86.7798116, 20.3906431 ], [ 86.7814059, 20.3884015 ], [ 86.7817247, 20.3865335 ], [ 86.7820436, 20.3842918 ], [ 86.7812465, 20.3819007 ], [ 86.7803696, 20.3802567 ], [ 86.7785362, 20.379659 ], [ 86.775507, 20.3787623 ], [ 86.7735939, 20.3780897 ], [ 86.7713619, 20.3764458 ], [ 86.7697676, 20.374727 ], [ 86.7678544, 20.3718127 ], [ 86.7670573, 20.3700192 ], [ 86.7684124, 20.3700192 ], [ 86.7708039, 20.3718127 ], [ 86.7729562, 20.3745776 ], [ 86.7756665, 20.3759974 ], [ 86.7779782, 20.3757732 ], [ 86.7800507, 20.375848 ], [ 86.7818045, 20.3762963 ], [ 86.7841959, 20.3766699 ], [ 86.7859496, 20.3769688 ], [ 86.7864279, 20.376371 ], [ 86.7863482, 20.3748765 ], [ 86.7851525, 20.373083 ], [ 86.7845945, 20.3717379 ], [ 86.7841162, 20.3703181 ], [ 86.7829205, 20.368973 ], [ 86.7808479, 20.3668805 ], [ 86.7798116, 20.3648628 ], [ 86.778297, 20.3612009 ], [ 86.777739, 20.3585104 ], [ 86.7780579, 20.3567168 ], [ 86.7782173, 20.3552221 ], [ 86.7775796, 20.35298 ], [ 86.7757462, 20.3500652 ], [ 86.7746302, 20.3477482 ], [ 86.7743113, 20.3470756 ], [ 86.7743113, 20.345805 ], [ 86.7747099, 20.3449828 ], [ 86.7751882, 20.3435627 ], [ 86.7753476, 20.340573 ], [ 86.7747896, 20.3383307 ], [ 86.7737533, 20.3362378 ], [ 86.7711227, 20.333846 ], [ 86.7704053, 20.3324258 ], [ 86.7692096, 20.3309308 ], [ 86.7675356, 20.3296601 ], [ 86.7696082, 20.3307066 ], [ 86.7739127, 20.3339955 ], [ 86.7763839, 20.3359389 ], [ 86.7783767, 20.3378822 ], [ 86.7825219, 20.340872 ], [ 86.7871453, 20.3445344 ], [ 86.7884207, 20.3464029 ], [ 86.789457, 20.3482714 ], [ 86.7912107, 20.3498409 ], [ 86.7920079, 20.3526063 ], [ 86.7931239, 20.3539515 ], [ 86.7943993, 20.3542505 ], [ 86.7951167, 20.3555957 ], [ 86.7958342, 20.3572399 ], [ 86.7970299, 20.3581368 ], [ 86.7979865, 20.3581368 ], [ 86.799501, 20.3592578 ], [ 86.8003779, 20.3616493 ], [ 86.802291, 20.3629945 ], [ 86.8038056, 20.3643396 ], [ 86.8047622, 20.3668058 ], [ 86.8055593, 20.3697203 ], [ 86.8068347, 20.3712896 ], [ 86.8082696, 20.3738303 ], [ 86.8089073, 20.3764458 ], [ 86.8087479, 20.3790612 ], [ 86.808715944917239, 20.380199675 ], [ 86.8086682, 20.3819007 ], [ 86.8090667, 20.3854874 ], [ 86.809545, 20.3884762 ], [ 86.808987, 20.3895223 ], [ 86.8079507, 20.3856368 ], [ 86.8077116, 20.3828721 ], [ 86.807770201163535, 20.380399675 ], [ 86.8077913, 20.3795095 ], [ 86.8073927, 20.3765952 ], [ 86.8063565, 20.3734567 ], [ 86.8038056, 20.3710654 ], [ 86.8030882, 20.3707665 ], [ 86.8026896, 20.3693466 ], [ 86.8019722, 20.3675531 ], [ 86.8014939, 20.3693466 ], [ 86.8026896, 20.37256 ], [ 86.8040447, 20.3756985 ], [ 86.8038056, 20.3790612 ], [ 86.804209132319698, 20.380399675 ], [ 86.8048419, 20.3824985 ], [ 86.8059579, 20.383694 ], [ 86.8065159, 20.3860104 ], [ 86.8063565, 20.3881773 ], [ 86.8050013, 20.3881026 ], [ 86.8031679, 20.3866829 ], [ 86.801733, 20.3846654 ], [ 86.7998199, 20.3824237 ], [ 86.798943, 20.3821996 ], [ 86.7985445, 20.385039 ], [ 86.799501, 20.3884015 ], [ 86.8010953, 20.3913903 ], [ 86.8024505, 20.3937065 ], [ 86.8018925, 20.3954998 ], [ 86.8004576, 20.3966952 ], [ 86.7988633, 20.398339 ], [ 86.7990227, 20.4005057 ], [ 86.7987039, 20.4021494 ], [ 86.7982256, 20.4032701 ], [ 86.7988633, 20.404615 ], [ 86.7991822, 20.4067816 ], [ 86.799501, 20.4085 ], [ 86.801175, 20.4099942 ], [ 86.802291, 20.412086 ], [ 86.8023707, 20.4125343 ], [ 86.8019722, 20.4134308 ], [ 86.8014939, 20.4147755 ], [ 86.8023707, 20.4168673 ], [ 86.8030085, 20.417465 ], [ 86.8020519, 20.4193326 ], [ 86.7994213, 20.4201544 ], [ 86.7987039, 20.4209014 ], [ 86.798385, 20.4223955 ], [ 86.7976676, 20.4231426 ], [ 86.7970299, 20.4247113 ], [ 86.7963125, 20.4256825 ], [ 86.7975879, 20.4250848 ], [ 86.7998996, 20.4235908 ], [ 86.8021316, 20.4228437 ], [ 86.8042839, 20.4226943 ], [ 86.8060376, 20.4229931 ], [ 86.8065159, 20.4238149 ], [ 86.805081, 20.4238896 ], [ 86.803965, 20.4238896 ], [ 86.8035665, 20.4242631 ], [ 86.8069942, 20.4244872 ], [ 86.8088276, 20.4239643 ], [ 86.810661, 20.4226196 ], [ 86.8120162, 20.4210508 ], [ 86.8132119, 20.4188097 ], [ 86.8144873, 20.4158214 ], [ 86.8152047, 20.4129825 ], [ 86.8159222, 20.4104424 ], [ 86.816241, 20.4076034 ], [ 86.8158425, 20.4042414 ], [ 86.8149656, 20.4017011 ], [ 86.8143279, 20.3989367 ], [ 86.8132119, 20.3969941 ], [ 86.8113785, 20.3950515 ], [ 86.8111393, 20.3937065 ], [ 86.811219, 20.3913156 ], [ 86.8104219, 20.3894476 ], [ 86.8104219, 20.3864587 ], [ 86.810661, 20.3836193 ], [ 86.8105016, 20.381004 ], [ 86.810439210911397, 20.380399675 ], [ 86.8100233, 20.376371 ], [ 86.8090667, 20.3736809 ], [ 86.8079507, 20.3706917 ], [ 86.8069942, 20.3683751 ], [ 86.805081, 20.3642649 ], [ 86.8038853, 20.3612756 ], [ 86.8019722, 20.3581368 ], [ 86.8002982, 20.35582 ], [ 86.7963125, 20.3508873 ], [ 86.7929645, 20.3472251 ], [ 86.7903339, 20.3446091 ], [ 86.7873845, 20.3417689 ], [ 86.7790942, 20.3354156 ], [ 86.7751085, 20.3327995 ], [ 86.7711227, 20.3304076 ], [ 86.7657819, 20.3271186 ], [ 86.7606004, 20.3242033 ], [ 86.7578104, 20.322783 ], [ 86.753187, 20.3200172 ], [ 86.7491216, 20.3179241 ], [ 86.7456939, 20.3156814 ], [ 86.7440996, 20.313663 ], [ 86.7421067, 20.3123174 ], [ 86.7366064, 20.309028 ], [ 86.7328599, 20.3070843 ], [ 86.7310134, 20.3060521 ], [ 86.7220087, 20.3039777 ], [ 86.7211907, 20.3034613 ], [ 86.7181894, 20.302684 ], [ 86.7162799, 20.3019083 ], [ 86.7151892, 20.3012631 ], [ 86.7150531, 20.3007479 ], [ 86.7108275, 20.2981655 ], [ 86.7106914, 20.2976503 ], [ 86.7100102, 20.2972623 ], [ 86.7094642, 20.2972616 ], [ 86.7083739, 20.296487 ], [ 86.7078279, 20.2964861 ], [ 86.706465, 20.2954538 ], [ 86.7074916, 20.2935252 ], [ 86.7083826, 20.2918514 ], [ 86.7111114, 20.2922427 ], [ 86.7111123, 20.2917276 ], [ 86.7113852, 20.2917282 ], [ 86.7113843, 20.2922432 ], [ 86.713021, 20.2927609 ], [ 86.713022, 20.2922459 ], [ 86.7157523, 20.2918635 ], [ 86.7171166, 20.2921234 ], [ 86.7182096, 20.2914818 ], [ 86.7180783, 20.288391 ], [ 86.716853, 20.2869722 ], [ 86.7089449, 20.2830962 ], [ 86.7083988, 20.2830953 ], [ 86.707581, 20.2825789 ], [ 86.7067623, 20.2825776 ], [ 86.7034899, 20.2810268 ], [ 86.7029439, 20.2810259 ], [ 86.7004901, 20.2797341 ], [ 86.6974892, 20.2789563 ], [ 86.6961261, 20.2781813 ], [ 86.6955803, 20.2781803 ], [ 86.6944899, 20.2774058 ], [ 86.6939441, 20.2774048 ], [ 86.6920356, 20.2763714 ], [ 86.6890381, 20.2740484 ], [ 86.6802775, 20.2699303 ], [ 86.6803726, 20.2631077 ], [ 86.6798497, 20.2631077 ], [ 86.6797071, 20.2667643 ], [ 86.6760469, 20.2667643 ], [ 86.6740504, 20.269529 ], [ 86.6738603, 20.2703762 ], [ 86.6771877, 20.2785808 ], [ 86.6753814, 20.2796509 ], [ 86.6723867, 20.2743002 ], [ 86.6702951, 20.275192 ], [ 86.6731948, 20.2812561 ], [ 86.671436, 20.2821033 ], [ 86.6688691, 20.2770647 ], [ 86.6679659, 20.2763067 ], [ 86.6675856, 20.2766188 ], [ 86.6673004, 20.2763513 ], [ 86.6673479, 20.2760392 ], [ 86.6663497, 20.2752812 ], [ 86.666112, 20.2737651 ], [ 86.6674906, 20.2723828 ], [ 86.6676807, 20.2719369 ], [ 86.6665399, 20.2717139 ], [ 86.6666349, 20.2714018 ], [ 86.6678708, 20.2715356 ], [ 86.6684413, 20.2713126 ], [ 86.6688215, 20.2708667 ], [ 86.6688691, 20.269529 ], [ 86.6671578, 20.2686371 ], [ 86.6671578, 20.268102 ], [ 86.6695346, 20.2689939 ], [ 86.6711508, 20.2688601 ], [ 86.6726244, 20.2675223 ], [ 86.6730522, 20.265917 ], [ 86.6729571, 20.2638212 ], [ 86.6735275, 20.2630185 ], [ 86.6742405, 20.2612793 ], [ 86.6767124, 20.2595848 ], [ 86.6797071, 20.2593172 ], [ 86.6801824, 20.2588712 ], [ 86.6793268, 20.2585145 ], [ 86.6757232, 20.2582889 ], [ 86.6696981, 20.2562431 ], [ 86.6680619, 20.2557248 ], [ 86.665607, 20.2552051 ], [ 86.6639706, 20.254687 ], [ 86.6631532, 20.2541703 ], [ 86.6609712, 20.2536509 ], [ 86.6606988, 20.253393 ], [ 86.6557903, 20.2518382 ], [ 86.655518, 20.2515801 ], [ 86.6541541, 20.25132 ], [ 86.6538818, 20.2510618 ], [ 86.6511547, 20.2502839 ], [ 86.6380683, 20.2451066 ], [ 86.6372509, 20.2445899 ], [ 86.6367051, 20.2445888 ], [ 86.6364327, 20.2443306 ], [ 86.6339793, 20.2432954 ], [ 86.6263464, 20.2401889 ], [ 86.6244382, 20.2394123 ], [ 86.6238926, 20.2394111 ], [ 86.6225301, 20.2386355 ], [ 86.6219844, 20.2386343 ], [ 86.6195318, 20.2373414 ], [ 86.6181682, 20.2370809 ], [ 86.6170786, 20.2363058 ], [ 86.6165329, 20.2363047 ], [ 86.6157155, 20.2357878 ], [ 86.6148969, 20.2357861 ], [ 86.6143526, 20.2352697 ], [ 86.6110814, 20.2339749 ], [ 86.6105371, 20.2334586 ], [ 86.6067217, 20.2316474 ], [ 86.605631, 20.2313875 ], [ 86.6042693, 20.2303542 ], [ 86.6007269, 20.2285434 ], [ 86.5996361, 20.2282834 ], [ 86.5990918, 20.2277672 ], [ 86.5969117, 20.2267321 ], [ 86.5963661, 20.2267307 ], [ 86.5950045, 20.2256975 ], [ 86.593914, 20.2254374 ], [ 86.5933697, 20.2249211 ], [ 86.5920073, 20.2241454 ], [ 86.5909168, 20.2238853 ], [ 86.5895553, 20.2228519 ], [ 86.5890096, 20.2228507 ], [ 86.5851948, 20.221039 ], [ 86.5811096, 20.2183255 ], [ 86.5805681, 20.2167791 ], [ 86.5811138, 20.2167804 ], [ 86.580842, 20.216393 ], [ 86.5783886, 20.2156145 ], [ 86.576206, 20.2156092 ], [ 86.5748441, 20.2148334 ], [ 86.57512, 20.2136756 ], [ 86.5759384, 20.2136776 ], [ 86.5764876, 20.2123913 ], [ 86.5767603, 20.2123919 ], [ 86.576759, 20.2129069 ], [ 86.5773047, 20.2129082 ], [ 86.5773075, 20.2118782 ], [ 86.5767622, 20.2117476 ], [ 86.5752657, 20.2100706 ], [ 86.5751312, 20.2095552 ], [ 86.5744494, 20.2092959 ], [ 86.5743149, 20.2087805 ], [ 86.5734969, 20.2086493 ], [ 86.5724092, 20.207359 ], [ 86.5715914, 20.2070995 ], [ 86.5707751, 20.206325 ], [ 86.5702298, 20.2061953 ], [ 86.5702313, 20.2056801 ], [ 86.5696861, 20.2055497 ], [ 86.5683241, 20.2047737 ], [ 86.5664177, 20.2036105 ], [ 86.5662824, 20.2030951 ], [ 86.5626061, 20.2008965 ], [ 86.5615179, 20.1998636 ], [ 86.5544385, 20.1952103 ], [ 86.553076, 20.1946916 ], [ 86.5506269, 20.1926253 ], [ 86.5492644, 20.1921067 ], [ 86.5481771, 20.1908162 ], [ 86.5473595, 20.1905565 ], [ 86.5391937, 20.1846121 ], [ 86.5383761, 20.1843524 ], [ 86.5370168, 20.1828035 ], [ 86.536471, 20.1829315 ], [ 86.5363357, 20.1824159 ], [ 86.5353843, 20.1815117 ], [ 86.5345667, 20.181252 ], [ 86.5334795, 20.1799614 ], [ 86.5326615, 20.1798309 ], [ 86.532255, 20.1787998 ], [ 86.5310301, 20.1781521 ], [ 86.529399, 20.176345 ], [ 86.5288539, 20.1762154 ], [ 86.5287186, 20.1756998 ], [ 86.5272217, 20.1747941 ], [ 86.5236884, 20.1706639 ], [ 86.5231433, 20.1705342 ], [ 86.5226026, 20.1689874 ], [ 86.5220571, 20.1689859 ], [ 86.5204298, 20.1660196 ], [ 86.5198848, 20.1658897 ], [ 86.518392, 20.1633103 ], [ 86.5182586, 20.1625373 ], [ 86.5177131, 20.1625357 ], [ 86.5162199, 20.1602139 ], [ 86.5160862, 20.1594409 ], [ 86.5155413, 20.1593103 ], [ 86.5143187, 20.1576333 ], [ 86.5139141, 20.1563445 ], [ 86.5133688, 20.156343 ], [ 86.5129632, 20.1550542 ], [ 86.5124193, 20.1545376 ], [ 86.5117428, 20.1529907 ], [ 86.5111974, 20.1529892 ], [ 86.5109296, 20.1514431 ], [ 86.5103841, 20.1514416 ], [ 86.5098436, 20.1498949 ], [ 86.5092981, 20.1498933 ], [ 86.5075347, 20.1467981 ], [ 86.5072662, 20.1455097 ], [ 86.5057729, 20.1435736 ], [ 86.5052278, 20.1434437 ], [ 86.5042779, 20.1418958 ], [ 86.5040093, 20.1406074 ], [ 86.5037373, 20.140349 ], [ 86.5034695, 20.138803 ], [ 86.5027891, 20.1385437 ], [ 86.5026565, 20.1372557 ], [ 86.5023845, 20.1369973 ], [ 86.5021159, 20.1357089 ], [ 86.5014355, 20.1354494 ], [ 86.5014387, 20.1344193 ], [ 86.5008935, 20.1344176 ], [ 86.499404, 20.1310655 ], [ 86.4985884, 20.1302906 ], [ 86.498184, 20.1290019 ], [ 86.4976387, 20.1290003 ], [ 86.4970978, 20.1275819 ], [ 86.4965529, 20.1274521 ], [ 86.4964195, 20.1264214 ], [ 86.4958766, 20.1256473 ], [ 86.4954729, 20.1241009 ], [ 86.4947918, 20.1238414 ], [ 86.4946601, 20.1225534 ], [ 86.4941148, 20.1225519 ], [ 86.4935744, 20.1210051 ], [ 86.4926213, 20.1204872 ], [ 86.4922161, 20.119456 ], [ 86.4916712, 20.1193252 ], [ 86.4908579, 20.1179068 ], [ 86.4903131, 20.117776 ], [ 86.4894992, 20.1164861 ], [ 86.4886818, 20.1163553 ], [ 86.4884142, 20.1148093 ], [ 86.487461, 20.1142916 ], [ 86.4856982, 20.1115819 ], [ 86.4850175, 20.1111941 ], [ 86.4846132, 20.1099051 ], [ 86.4840679, 20.1099036 ], [ 86.4835268, 20.1086142 ], [ 86.4828457, 20.1083547 ], [ 86.4821692, 20.1069359 ], [ 86.4816243, 20.1068059 ], [ 86.481627, 20.1060334 ], [ 86.4810817, 20.1060317 ], [ 86.4810842, 20.1052591 ], [ 86.4805389, 20.1052576 ], [ 86.4781012, 20.1004855 ], [ 86.4775563, 20.1003557 ], [ 86.4753853, 20.0973871 ], [ 86.4747047, 20.0969992 ], [ 86.4719897, 20.0936432 ], [ 86.4718557, 20.0931278 ], [ 86.4713104, 20.0931261 ], [ 86.4713121, 20.092611 ], [ 86.4707674, 20.0924801 ], [ 86.469953, 20.0914476 ], [ 86.4690007, 20.0908014 ], [ 86.4683235, 20.08964 ], [ 86.4675062, 20.0895092 ], [ 86.4666932, 20.0880898 ], [ 86.4661485, 20.0879597 ], [ 86.4661502, 20.0874447 ], [ 86.4656051, 20.0874432 ], [ 86.465336, 20.0864122 ], [ 86.4647907, 20.0864105 ], [ 86.4642486, 20.0855071 ], [ 86.4637039, 20.0853771 ], [ 86.4637056, 20.084862 ], [ 86.4631604, 20.0848603 ], [ 86.4623475, 20.0834409 ], [ 86.4615302, 20.0833102 ], [ 86.4611245, 20.0822788 ], [ 86.459088, 20.0800832 ], [ 86.4585433, 20.0799531 ], [ 86.458545, 20.0794381 ], [ 86.4579999, 20.0794364 ], [ 86.4578657, 20.0786634 ], [ 86.4571857, 20.0784037 ], [ 86.4563728, 20.0769843 ], [ 86.4548773, 20.0758212 ], [ 86.4547433, 20.0753058 ], [ 86.4541986, 20.0751748 ], [ 86.4533857, 20.0737564 ], [ 86.4528406, 20.0737547 ], [ 86.4521623, 20.0727224 ], [ 86.4520283, 20.072207 ], [ 86.4514832, 20.0722053 ], [ 86.4508049, 20.0711731 ], [ 86.4506709, 20.0706576 ], [ 86.4501262, 20.0705266 ], [ 86.4493129, 20.0692365 ], [ 86.4487682, 20.0691064 ], [ 86.4487701, 20.0685914 ], [ 86.448225, 20.0685897 ], [ 86.4479561, 20.0675587 ], [ 86.4474114, 20.0674277 ], [ 86.4463256, 20.0661367 ], [ 86.4457809, 20.0660066 ], [ 86.4449684, 20.0645873 ], [ 86.4444237, 20.0644572 ], [ 86.4444254, 20.0639422 ], [ 86.4438803, 20.0639405 ], [ 86.4437453, 20.0634249 ], [ 86.4419812, 20.0614875 ], [ 86.4414365, 20.0613574 ], [ 86.4411685, 20.0600688 ], [ 86.4406234, 20.0600671 ], [ 86.4406253, 20.0595521 ], [ 86.4400806, 20.0594211 ], [ 86.438995, 20.0581301 ], [ 86.4383146, 20.057742 ], [ 86.4376378, 20.0565805 ], [ 86.4369574, 20.0561924 ], [ 86.4351961, 20.0534824 ], [ 86.4346514, 20.0533523 ], [ 86.4339761, 20.0515474 ], [ 86.433845, 20.0502592 ], [ 86.4332999, 20.0502575 ], [ 86.4333018, 20.0497424 ], [ 86.4319391, 20.0497381 ], [ 86.43234, 20.0517997 ], [ 86.4320629, 20.0530864 ], [ 86.432328, 20.0551475 ], [ 86.4325996, 20.055406 ], [ 86.4330033, 20.0569524 ], [ 86.4338206, 20.0570834 ], [ 86.4346354, 20.0578587 ], [ 86.4373571, 20.0588974 ], [ 86.4384435, 20.059931 ], [ 86.4392617, 20.0598054 ], [ 86.4396654, 20.0610942 ], [ 86.4412942, 20.0629021 ], [ 86.4414256, 20.0644478 ], [ 86.4422432, 20.0644504 ], [ 86.4415586, 20.0652208 ], [ 86.4414201, 20.065993 ], [ 86.4427797, 20.0668982 ], [ 86.4433248, 20.0668999 ], [ 86.443868, 20.0674166 ], [ 86.4460462, 20.0680679 ], [ 86.4464528, 20.068584 ], [ 86.447534, 20.0711629 ], [ 86.4473964, 20.0716776 ], [ 86.4482141, 20.07168 ], [ 86.448484, 20.0724534 ], [ 86.4490292, 20.0724551 ], [ 86.4522857, 20.0765859 ], [ 86.451741, 20.0764549 ], [ 86.449841, 20.0741312 ], [ 86.4486163, 20.073484 ], [ 86.4484823, 20.0729686 ], [ 86.447937, 20.0729669 ], [ 86.4479389, 20.0724517 ], [ 86.4468495, 20.0721909 ], [ 86.4463089, 20.0709016 ], [ 86.4457639, 20.0708999 ], [ 86.4452241, 20.0693529 ], [ 86.444679, 20.0693512 ], [ 86.4444087, 20.0687059 ], [ 86.4427737, 20.0685725 ], [ 86.4427756, 20.0680575 ], [ 86.4414137, 20.0677957 ], [ 86.4410081, 20.0667642 ], [ 86.4401931, 20.0659891 ], [ 86.4395186, 20.0641841 ], [ 86.4389735, 20.0641824 ], [ 86.4384316, 20.063279 ], [ 86.4378869, 20.063149 ], [ 86.4378926, 20.0616037 ], [ 86.4373479, 20.0614727 ], [ 86.4357172, 20.0601798 ], [ 86.4336304, 20.0599564 ], [ 86.4335382, 20.059787 ], [ 86.4332657, 20.0597861 ], [ 86.4332647, 20.0600437 ], [ 86.4338081, 20.0605604 ], [ 86.4332634, 20.0604296 ], [ 86.4327212, 20.0596553 ], [ 86.4316318, 20.0593941 ], [ 86.4305441, 20.0587473 ], [ 86.4298678, 20.0571998 ], [ 86.4298743, 20.0553971 ], [ 86.4293339, 20.0541078 ], [ 86.4283838, 20.0532028 ], [ 86.4281113, 20.0532021 ], [ 86.4276987, 20.0541025 ], [ 86.4266057, 20.0548715 ], [ 86.4260568, 20.0558999 ], [ 86.4245543, 20.0570535 ], [ 86.4229172, 20.0575633 ], [ 86.4202919, 20.0575347 ], [ 86.420272320683551, 20.057418206556754 ], [ 86.4199272, 20.0553648 ], [ 86.4202082, 20.0530479 ], [ 86.420072320683545, 20.053047461261471 ], [ 86.4188455, 20.0530435 ], [ 86.4185789, 20.0514973 ], [ 86.4185883, 20.0489222 ], [ 86.418725, 20.0486649 ], [ 86.4184619, 20.0460889 ], [ 86.4177858, 20.044799 ], [ 86.4172413, 20.044668 ], [ 86.4160198, 20.0432478 ], [ 86.4153456, 20.0414429 ], [ 86.4148006, 20.0414412 ], [ 86.4146677, 20.0404106 ], [ 86.4133109, 20.0388608 ], [ 86.4131771, 20.0383454 ], [ 86.412632, 20.0383435 ], [ 86.4122294, 20.0365395 ], [ 86.411958, 20.0362809 ], [ 86.4112944, 20.0316432 ], [ 86.4107495, 20.0316413 ], [ 86.4103585, 20.026747 ], [ 86.4095477, 20.0249415 ], [ 86.4091453, 20.0233949 ], [ 86.4086004, 20.0233932 ], [ 86.4082018, 20.0205589 ], [ 86.4072547, 20.0188814 ], [ 86.4067104, 20.0187512 ], [ 86.404677, 20.0159114 ], [ 86.4045432, 20.0153958 ], [ 86.4039983, 20.0153941 ], [ 86.4034587, 20.0139753 ], [ 86.4023693, 20.0138434 ], [ 86.4023702, 20.0135858 ], [ 86.4031876, 20.0135886 ], [ 86.4030684, 20.0089526 ], [ 86.3993973, 20.0072658 ], [ 86.3970882, 20.0053269 ], [ 86.3962778, 20.0035214 ], [ 86.3942432, 20.001325 ], [ 86.3936989, 20.0011948 ], [ 86.3935641, 20.0006792 ], [ 86.392886, 20.0000326 ], [ 86.3920701, 19.999644 ], [ 86.3920722, 19.999129 ], [ 86.3917996, 19.999128 ], [ 86.390162, 20.0004684 ], [ 86.3891822, 20.0000557 ], [ 86.388801, 19.9996327 ], [ 86.3888019, 19.9993753 ], [ 86.388257, 19.9993734 ], [ 86.388267, 19.9967981 ], [ 86.3869044, 19.9969217 ], [ 86.3859042, 19.9977313 ], [ 86.3865333, 19.9981674 ], [ 86.3867622, 19.998338 ], [ 86.3864867, 19.9991097 ], [ 86.3856664, 19.9998795 ], [ 86.3851185, 20.0006501 ], [ 86.3851157, 20.0014227 ], [ 86.3860646, 20.0027138 ], [ 86.3855197, 20.0027119 ], [ 86.3857802, 20.0058031 ], [ 86.3825169, 20.0042465 ], [ 86.3825228, 20.0027013 ], [ 86.3819779, 20.0026994 ], [ 86.3818443, 20.0019264 ], [ 86.3807605, 20.0003773 ], [ 86.3796849, 19.9967682 ], [ 86.3810571, 19.9941976 ], [ 86.3810612, 19.9931676 ], [ 86.3786195, 19.9905835 ], [ 86.3783561, 19.9882649 ], [ 86.3787683, 19.9874938 ], [ 86.3795865, 19.987239 ], [ 86.3793166, 19.9865938 ], [ 86.3782285, 19.9862042 ], [ 86.3782306, 19.9856892 ], [ 86.3776857, 19.9856871 ], [ 86.3778235, 19.9851727 ], [ 86.3763292, 19.9842655 ], [ 86.3717023, 19.9832192 ], [ 86.3703464, 19.981669 ], [ 86.3685799, 19.9805044 ], [ 86.3684462, 19.9799888 ], [ 86.3589106, 19.9803405 ], [ 86.3572741, 19.9808495 ], [ 86.3540042, 19.9810952 ], [ 86.3531849, 19.9816074 ], [ 86.3520947, 19.9817325 ], [ 86.3520926, 19.9822475 ], [ 86.3515479, 19.9822456 ], [ 86.3509995, 19.9831445 ], [ 86.3504546, 19.9831424 ], [ 86.3500429, 19.9837852 ], [ 86.3500344, 19.9858455 ], [ 86.3507086, 19.9876506 ], [ 86.3512533, 19.9876527 ], [ 86.3513807, 19.9897134 ], [ 86.3505538, 19.9920283 ], [ 86.3493211, 19.9938264 ], [ 86.3478201, 19.994336 ], [ 86.3474094, 19.9949778 ], [ 86.3466226, 19.9953594 ], [ 86.3461996, 19.9956469 ], [ 86.3456046, 19.996206 ], [ 86.3441239, 19.9966284 ], [ 86.3434843, 19.9965 ], [ 86.3411338, 19.9972724 ], [ 86.3396258, 19.9994563 ], [ 86.338801, 20.001256 ], [ 86.3363092, 20.0107754 ], [ 86.3357577, 20.0123184 ], [ 86.3346593, 20.0143745 ], [ 86.3331531, 20.0163 ], [ 86.3320611, 20.0168109 ], [ 86.3302815, 20.018736 ], [ 86.3301412, 20.0197657 ], [ 86.3295963, 20.0197636 ], [ 86.3291807, 20.0213072 ], [ 86.3286324, 20.0220777 ], [ 86.3286237, 20.024138 ], [ 86.3288951, 20.0243966 ], [ 86.3286062, 20.0282584 ], [ 86.3277833, 20.0295429 ], [ 86.327643, 20.0305725 ], [ 86.3270976, 20.0306988 ], [ 86.3249067, 20.0332658 ], [ 86.3243612, 20.033393 ], [ 86.3242223, 20.0339074 ], [ 86.3228564, 20.0346748 ], [ 86.3227184, 20.0351892 ], [ 86.3216279, 20.0353134 ], [ 86.3210791, 20.0362132 ], [ 86.3205342, 20.0362112 ], [ 86.3205319, 20.0367262 ], [ 86.3194419, 20.036722 ], [ 86.3194397, 20.0372371 ], [ 86.3184833, 20.0377483 ], [ 86.3177957, 20.0392909 ], [ 86.3169778, 20.039416 ], [ 86.3158833, 20.0404419 ], [ 86.3142471, 20.0406931 ], [ 86.3139736, 20.0409496 ], [ 86.3126105, 20.0410736 ], [ 86.3126083, 20.0415886 ], [ 86.3109721, 20.0418398 ], [ 86.3109698, 20.0423548 ], [ 86.3093336, 20.042606 ], [ 86.3093314, 20.043121 ], [ 86.3074227, 20.0433711 ], [ 86.3074204, 20.0438861 ], [ 86.3057825, 20.044523 ], [ 86.3041458, 20.0449035 ], [ 86.3041435, 20.0454185 ], [ 86.3025062, 20.0459271 ], [ 86.3025039, 20.0464421 ], [ 86.3010012, 20.0472087 ], [ 86.3004505, 20.0484943 ], [ 86.2981237, 20.0509311 ], [ 86.297578, 20.0510581 ], [ 86.297438, 20.0518301 ], [ 86.2960708, 20.0528549 ], [ 86.2959326, 20.0533693 ], [ 86.2948408, 20.0537509 ], [ 86.2942934, 20.0542637 ], [ 86.2929303, 20.0543875 ], [ 86.2922369, 20.05696 ], [ 86.2916896, 20.0574729 ], [ 86.2905845, 20.0608163 ], [ 86.2895085, 20.0619412 ], [ 86.2893514, 20.0623565 ], [ 86.2885321, 20.062739 ], [ 86.2879842, 20.0633812 ], [ 86.2863465, 20.0638897 ], [ 86.2795336, 20.0637328 ], [ 86.2740816, 20.0639679 ], [ 86.2732622, 20.0643514 ], [ 86.2732645, 20.0638364 ], [ 86.2689058, 20.0634315 ], [ 86.268727, 20.063214 ], [ 86.2689086, 20.0627882 ], [ 86.2675459, 20.0627825 ], [ 86.2675448, 20.0630401 ], [ 86.2685397, 20.0633894 ], [ 86.2686325, 20.0635597 ], [ 86.265637, 20.0630322 ], [ 86.2656406, 20.0622595 ], [ 86.2648224, 20.0623845 ], [ 86.2642785, 20.0621248 ], [ 86.2620982, 20.0621157 ], [ 86.2585673, 20.0595256 ], [ 86.2563902, 20.058873 ], [ 86.2561207, 20.0582278 ], [ 86.2555756, 20.0582253 ], [ 86.2501366, 20.0557564 ], [ 86.249869, 20.054725 ], [ 86.2493239, 20.0547228 ], [ 86.2485131, 20.0533024 ], [ 86.2478332, 20.0529139 ], [ 86.247023, 20.0513652 ], [ 86.2469018, 20.0482743 ], [ 86.246357, 20.048272 ], [ 86.2465, 20.0467275 ], [ 86.2443679, 20.0366748 ], [ 86.2438291, 20.0353849 ], [ 86.2436176, 20.0354072 ], [ 86.2423, 20.0353652 ], [ 86.2412422, 20.0351163 ], [ 86.2406991, 20.0349159 ], [ 86.2396091, 20.0347224 ], [ 86.2385218, 20.0342029 ], [ 86.2289871, 20.0336464 ], [ 86.2278998, 20.0331267 ], [ 86.2259935, 20.0328608 ], [ 86.2235682, 20.0333207 ], [ 86.2224481, 20.0334896 ], [ 86.2210586, 20.033784 ], [ 86.2205388, 20.033867 ], [ 86.2190088, 20.0309411 ], [ 86.2175694, 20.0281883 ], [ 86.2197545, 20.0271679 ], [ 86.220302, 20.0266551 ], [ 86.2216662, 20.0262753 ], [ 86.2245269, 20.0254399 ], [ 86.227665, 20.0253998 ], [ 86.2347456, 20.0262031 ], [ 86.2352891, 20.0264629 ], [ 86.2393762, 20.0264807 ], [ 86.2429204, 20.0261101 ], [ 86.2429228, 20.0255949 ], [ 86.2437403, 20.0255984 ], [ 86.2444246, 20.0248288 ], [ 86.2445637, 20.0243144 ], [ 86.2453844, 20.0236735 ], [ 86.2459298, 20.0235476 ], [ 86.2456597, 20.0230313 ], [ 86.246754, 20.0221343 ], [ 86.2472995, 20.0220082 ], [ 86.2478493, 20.0209804 ], [ 86.2511207, 20.0206075 ], [ 86.2513946, 20.0203512 ], [ 86.2527574, 20.0202286 ], [ 86.2533072, 20.0192008 ], [ 86.2563097, 20.0180541 ], [ 86.257944, 20.0181902 ], [ 86.2579463, 20.0176752 ], [ 86.2614877, 20.0178183 ], [ 86.2650345, 20.0168029 ], [ 86.2778355, 20.0178857 ], [ 86.2789217, 20.0186627 ], [ 86.2800103, 20.0189247 ], [ 86.2824544, 20.0207374 ], [ 86.2832711, 20.0208699 ], [ 86.2840815, 20.0224183 ], [ 86.2851704, 20.0226803 ], [ 86.2857094, 20.02397 ], [ 86.2938808, 20.0246463 ], [ 86.2957927, 20.0236238 ], [ 86.2982473, 20.0231184 ], [ 86.2989734, 20.0225656 ], [ 86.2990664, 20.0227358 ], [ 86.3007013, 20.0227423 ], [ 86.3007035, 20.0222272 ], [ 86.3017939, 20.0221023 ], [ 86.3026136, 20.0215905 ], [ 86.3031585, 20.0215926 ], [ 86.3039776, 20.0212101 ], [ 86.3039798, 20.0206948 ], [ 86.3050738, 20.0197975 ], [ 86.3056192, 20.0196712 ], [ 86.3057595, 20.0186417 ], [ 86.306854, 20.0176158 ], [ 86.3068574, 20.0168432 ], [ 86.3071309, 20.0165867 ], [ 86.3069997, 20.0155561 ], [ 86.3075446, 20.0155584 ], [ 86.3075423, 20.0160734 ], [ 86.3080872, 20.0160755 ], [ 86.3075485, 20.0146565 ], [ 86.3070042, 20.0145261 ], [ 86.307002, 20.0150411 ], [ 86.3059103, 20.0154227 ], [ 86.3053631, 20.0159356 ], [ 86.3034559, 20.0159281 ], [ 86.3023684, 20.0154087 ], [ 86.3010056, 20.0155327 ], [ 86.3010033, 20.0160477 ], [ 86.300459, 20.0159163 ], [ 86.3001825, 20.0168169 ], [ 86.2985453, 20.0173255 ], [ 86.2992295, 20.0165557 ], [ 86.2993684, 20.0160413 ], [ 86.3018252, 20.0150209 ], [ 86.3018275, 20.0145057 ], [ 86.3045531, 20.014259 ], [ 86.3045508, 20.014774 ], [ 86.3059143, 20.0145217 ], [ 86.3067396, 20.0127222 ], [ 86.3060142, 20.0128884 ], [ 86.3068855, 20.0104051 ], [ 86.3072979, 20.0096342 ], [ 86.3078445, 20.0092496 ], [ 86.308389, 20.0093809 ], [ 86.3083922, 20.0086083 ], [ 86.308935, 20.0091254 ], [ 86.3092074, 20.0091265 ], [ 86.3092085, 20.0088689 ], [ 86.3090292, 20.0087797 ], [ 86.3090764, 20.0078383 ], [ 86.3115429, 20.0045 ], [ 86.3115096, 20.0022698 ], [ 86.3116903, 20.0020536 ], [ 86.3115115, 20.001836 ], [ 86.3125166, 19.9999965 ], [ 86.3133372, 19.9992271 ], [ 86.3138825, 19.999101 ], [ 86.3140216, 19.998329 ], [ 86.3155317, 19.9957595 ], [ 86.316349, 19.9957625 ], [ 86.3162155, 19.9949895 ], [ 86.3169016, 19.9939619 ], [ 86.3177217, 19.9933208 ], [ 86.3185395, 19.9931957 ], [ 86.3186774, 19.9926813 ], [ 86.3178645, 19.991648 ], [ 86.3181414, 19.9906189 ], [ 86.3196546, 19.9872768 ], [ 86.3188345, 19.9879169 ], [ 86.3171983, 19.9882974 ], [ 86.3171962, 19.9888124 ], [ 86.3163784, 19.9889377 ], [ 86.3147406, 19.9897039 ], [ 86.3109262, 19.9898183 ], [ 86.3109284, 19.9893033 ], [ 86.309294, 19.989297 ], [ 86.3092962, 19.9887818 ], [ 86.3084773, 19.9891645 ], [ 86.3033905, 19.989958 ], [ 86.3020262, 19.9904675 ], [ 86.3019341, 19.9902983 ], [ 86.3032985, 19.9897886 ], [ 86.3049358, 19.9891507 ], [ 86.3112053, 19.9882743 ], [ 86.3109318, 19.9885308 ], [ 86.3109307, 19.9887882 ], [ 86.311203, 19.9887894 ], [ 86.3112964, 19.9886198 ], [ 86.3117474, 19.9889198 ], [ 86.3155612, 19.9889345 ], [ 86.3177472, 19.9873978 ], [ 86.3182919, 19.9873998 ], [ 86.3191114, 19.9868878 ], [ 86.3204739, 19.9867648 ], [ 86.3210265, 19.9849642 ], [ 86.3215714, 19.9849663 ], [ 86.3214446, 19.982648 ], [ 86.3204954, 19.9817425 ], [ 86.3188644, 19.9809638 ], [ 86.318592, 19.9809627 ], [ 86.3120511, 19.98171 ], [ 86.3095939, 19.9829882 ], [ 86.3082312, 19.983112 ], [ 86.3082289, 19.983627 ], [ 86.3057746, 19.9842609 ], [ 86.3033166, 19.985668 ], [ 86.3031777, 19.9861827 ], [ 86.3013464, 19.9874236 ], [ 86.2994937, 19.9877134 ], [ 86.2977653, 19.9877941 ], [ 86.297857, 19.988222 ], [ 86.2973117, 19.9883481 ], [ 86.2963537, 19.989246 ], [ 86.2962146, 19.9900181 ], [ 86.2956691, 19.9901443 ], [ 86.2949836, 19.9910434 ], [ 86.2947054, 19.9923299 ], [ 86.2940203, 19.9933573 ], [ 86.2937423, 19.9946438 ], [ 86.2934697, 19.9946427 ], [ 86.2934686, 19.9949003 ], [ 86.293741, 19.9949014 ], [ 86.2930976, 19.9960165 ], [ 86.293095, 19.996613 ], [ 86.2934582, 19.997218 ], [ 86.2959101, 19.9972278 ], [ 86.2960859, 19.9979126 ], [ 86.2964459, 19.9992902 ], [ 86.2967137, 20.0003214 ], [ 86.2964018, 20.0003485 ], [ 86.2957467, 19.9981048 ], [ 86.2956366, 19.9974841 ], [ 86.2942732, 19.9977363 ], [ 86.2942721, 19.9979939 ], [ 86.2945446, 19.997995 ], [ 86.2945435, 19.9982524 ], [ 86.2948158, 19.9982535 ], [ 86.2948135, 19.9987686 ], [ 86.2937268, 19.9981199 ], [ 86.2929088, 19.998246 ], [ 86.2929158, 19.9967007 ], [ 86.2929192, 19.9959283 ], [ 86.292926, 19.994383 ], [ 86.2923813, 19.9943809 ], [ 86.2926606, 19.9928368 ], [ 86.2933779, 19.9916336 ], [ 86.2971802, 19.9871891 ], [ 86.2977307, 19.9859037 ], [ 86.2985514, 19.9851343 ], [ 86.2985537, 19.9846193 ], [ 86.2967886, 19.983453 ], [ 86.2956996, 19.9833203 ], [ 86.2956973, 19.9838353 ], [ 86.2948812, 19.9835745 ], [ 86.2951513, 19.9840906 ], [ 86.2946064, 19.9840886 ], [ 86.2943312, 19.9847308 ], [ 86.2932411, 19.9848557 ], [ 86.2935157, 19.9843416 ], [ 86.2924267, 19.9842082 ], [ 86.291156, 19.9845013 ], [ 86.2910642, 19.984332 ], [ 86.2907916, 19.9843309 ], [ 86.2907905, 19.9845883 ], [ 86.2909689, 19.9846767 ], [ 86.2905106, 19.9862607 ], [ 86.2891492, 19.9861269 ], [ 86.2890536, 19.9865531 ], [ 86.2886021, 19.9866399 ], [ 86.2886009, 19.9868973 ], [ 86.2891456, 19.9868996 ], [ 86.2894193, 19.9866431 ], [ 86.2895527, 19.9871587 ], [ 86.289279, 19.9874151 ], [ 86.2889997, 19.9889593 ], [ 86.28859, 19.9893433 ], [ 86.2878651, 19.9893811 ], [ 86.2877744, 19.9889544 ], [ 86.2883191, 19.9889564 ], [ 86.2884561, 19.9886994 ], [ 86.2883261, 19.9874114 ], [ 86.2875077, 19.9876656 ], [ 86.2873688, 19.98818 ], [ 86.2864129, 19.9888196 ], [ 86.2855951, 19.9889455 ], [ 86.2854561, 19.9894599 ], [ 86.2850456, 19.9899735 ], [ 86.284229, 19.989841 ], [ 86.2839559, 19.9899691 ], [ 86.2836777, 19.9912556 ], [ 86.2834053, 19.9912545 ], [ 86.2834112, 19.9899668 ], [ 86.2838203, 19.9897109 ], [ 86.2836882, 19.9889377 ], [ 86.2838262, 19.9884233 ], [ 86.2835573, 19.9876497 ], [ 86.2823359, 19.9867429 ], [ 86.2804316, 19.9862201 ], [ 86.2785259, 19.9859547 ], [ 86.2768909, 19.9860774 ], [ 86.2768943, 19.9853048 ], [ 86.2736208, 19.9863216 ], [ 86.2736244, 19.985549 ], [ 86.2749863, 19.9855546 ], [ 86.274991, 19.9845244 ], [ 86.2757141, 19.9846151 ], [ 86.2760789, 19.9849147 ], [ 86.2774408, 19.9849203 ], [ 86.2793443, 19.9857005 ], [ 86.2823395, 19.9859702 ], [ 86.2834246, 19.9870048 ], [ 86.2839687, 19.9871362 ], [ 86.284779, 19.9886847 ], [ 86.2861428, 19.9883034 ], [ 86.2872354, 19.9876644 ], [ 86.2869653, 19.9871483 ], [ 86.2880589, 19.9862509 ], [ 86.2886043, 19.9861248 ], [ 86.2888803, 19.9853533 ], [ 86.2896975, 19.9853566 ], [ 86.2898355, 19.9848421 ], [ 86.2905215, 19.9838147 ], [ 86.2937922, 19.983441 ], [ 86.2940657, 19.9831846 ], [ 86.2948835, 19.9830595 ], [ 86.2948857, 19.9825444 ], [ 86.2978793, 19.9831997 ], [ 86.2992367, 19.9842352 ], [ 86.3008712, 19.9842417 ], [ 86.3033286, 19.9829636 ], [ 86.3063284, 19.9822027 ], [ 86.3087844, 19.9811823 ], [ 86.3090579, 19.9809258 ], [ 86.3095092, 19.9808869 ], [ 86.3096011, 19.9813146 ], [ 86.3090558, 19.9814409 ], [ 86.3087816, 19.9818266 ], [ 86.3098714, 19.9818308 ], [ 86.3098734, 19.9813157 ], [ 86.3112361, 19.9811918 ], [ 86.3131456, 19.9805558 ], [ 86.3128749, 19.9801679 ], [ 86.3112405, 19.9801617 ], [ 86.3096965, 19.9807115 ], [ 86.3097413, 19.9802851 ], [ 86.3101526, 19.9797716 ], [ 86.3093338, 19.9801543 ], [ 86.3079711, 19.9802781 ], [ 86.3079734, 19.9797631 ], [ 86.3104278, 19.9791284 ], [ 86.3191412, 19.9799347 ], [ 86.3215867, 19.9813609 ], [ 86.3218547, 19.9823921 ], [ 86.3229416, 19.9830396 ], [ 86.3240307, 19.983173 ], [ 86.3240318, 19.9829154 ], [ 86.3234869, 19.9829134 ], [ 86.323488, 19.9826559 ], [ 86.3240344, 19.9822711 ], [ 86.3245788, 19.9824025 ], [ 86.3252637, 19.9813749 ], [ 86.3254038, 19.9806028 ], [ 86.3278619, 19.979067 ], [ 86.3281374, 19.9782955 ], [ 86.3295022, 19.9776563 ], [ 86.3299535, 19.9776174 ], [ 86.3301822, 19.9777881 ], [ 86.3305924, 19.9775322 ], [ 86.3305944, 19.9770171 ], [ 86.3314111, 19.9771485 ], [ 86.3316846, 19.976892 ], [ 86.3322289, 19.9770232 ], [ 86.332231, 19.9765081 ], [ 86.3330477, 19.9766395 ], [ 86.3341395, 19.9761286 ], [ 86.335502, 19.9760054 ], [ 86.3355041, 19.9754904 ], [ 86.3390496, 19.9744736 ], [ 86.3397354, 19.9731884 ], [ 86.3408303, 19.9719047 ], [ 86.3412478, 19.9698461 ], [ 86.3401588, 19.9697128 ], [ 86.3371675, 19.9685431 ], [ 86.3371698, 19.9680281 ], [ 86.3363531, 19.9678958 ], [ 86.3355393, 19.9671201 ], [ 86.3349949, 19.9669899 ], [ 86.3337872, 19.9626072 ], [ 86.3302573, 19.9600187 ], [ 86.3286317, 19.9579523 ], [ 86.3284982, 19.9574367 ], [ 86.3279541, 19.9573054 ], [ 86.32687, 19.9560136 ], [ 86.3263259, 19.9558833 ], [ 86.3263291, 19.9551107 ], [ 86.3240191, 19.9538142 ], [ 86.3236154, 19.9527826 ], [ 86.3227978, 19.9529077 ], [ 86.3198063, 19.9518661 ], [ 86.3174467, 19.9521553 ], [ 86.3172596, 19.9523309 ], [ 86.3173514, 19.9527586 ], [ 86.3178972, 19.9525031 ], [ 86.317895, 19.9530183 ], [ 86.3170785, 19.9528858 ], [ 86.3168073, 19.9526272 ], [ 86.3165349, 19.9526263 ], [ 86.3157162, 19.9530098 ], [ 86.3155761, 19.9537818 ], [ 86.3150271, 19.9548098 ], [ 86.3151603, 19.955583 ], [ 86.3159774, 19.9555862 ], [ 86.3157016, 19.9563577 ], [ 86.3148846, 19.9563545 ], [ 86.3150182, 19.9568701 ], [ 86.3139231, 19.9581536 ], [ 86.3137852, 19.9586681 ], [ 86.3126929, 19.9593073 ], [ 86.3116013, 19.9598181 ], [ 86.3091477, 19.9603235 ], [ 86.3083329, 19.9598053 ], [ 86.3077882, 19.9598032 ], [ 86.3056172, 19.957992 ], [ 86.304256, 19.9578584 ], [ 86.3042537, 19.9583734 ], [ 86.3026172, 19.958882 ], [ 86.301929, 19.9604246 ], [ 86.3021855, 19.9640309 ], [ 86.3035829, 19.9657506 ], [ 86.3039462, 19.9663556 ], [ 86.3042186, 19.9663568 ], [ 86.3045788, 19.967476 ], [ 86.305303, 19.9675195 ], [ 86.305846, 19.9679083 ], [ 86.3058451, 19.9681659 ], [ 86.3061174, 19.968167 ], [ 86.3061152, 19.968682 ], [ 86.3044854, 19.9676456 ], [ 86.3028596, 19.9657072 ], [ 86.3020441, 19.9653182 ], [ 86.3022131, 19.967548 ], [ 86.3024786, 19.9690942 ], [ 86.303111, 19.970473 ], [ 86.3020169, 19.9714987 ], [ 86.3014722, 19.9714966 ], [ 86.3014733, 19.9712392 ], [ 86.3028424, 19.9703838 ], [ 86.3022996, 19.9691821 ], [ 86.3020339, 19.9676359 ], [ 86.3017684, 19.9660897 ], [ 86.301496, 19.9660886 ], [ 86.3014971, 19.965831 ], [ 86.3017695, 19.9658321 ], [ 86.301373, 19.9629977 ], [ 86.3015108, 19.9627406 ], [ 86.3009661, 19.9627386 ], [ 86.3011131, 19.9601638 ], [ 86.30139, 19.9591347 ], [ 86.3028935, 19.9579814 ], [ 86.3042577, 19.9574717 ], [ 86.3053471, 19.9574758 ], [ 86.3064353, 19.9577376 ], [ 86.3072478, 19.9587711 ], [ 86.3094234, 19.959552 ], [ 86.3116041, 19.9591748 ], [ 86.3116064, 19.9586596 ], [ 86.3132427, 19.958151 ], [ 86.3133807, 19.9576363 ], [ 86.3142021, 19.9566095 ], [ 86.3142133, 19.9540342 ], [ 86.3151741, 19.9523634 ], [ 86.3162652, 19.9519818 ], [ 86.3162686, 19.9512092 ], [ 86.3170879, 19.9506974 ], [ 86.3179039, 19.950958 ], [ 86.3181783, 19.9504439 ], [ 86.3173629, 19.950054 ], [ 86.3149186, 19.9484995 ], [ 86.3127432, 19.9477185 ], [ 86.3081082, 19.9488597 ], [ 86.3079693, 19.9493744 ], [ 86.3066032, 19.9503991 ], [ 86.3060539, 19.9514271 ], [ 86.3054968, 19.9542577 ], [ 86.3037196, 19.9559243 ], [ 86.3027642, 19.9563073 ], [ 86.3026251, 19.9570793 ], [ 86.3018097, 19.9566894 ], [ 86.3007198, 19.9568143 ], [ 86.3007175, 19.9573294 ], [ 86.2988115, 19.9571927 ], [ 86.2982707, 19.9562897 ], [ 86.297726, 19.9562874 ], [ 86.2981479, 19.9531988 ], [ 86.2978823, 19.9516526 ], [ 86.2972036, 19.951263 ], [ 86.2969324, 19.9510045 ], [ 86.2914843, 19.9512404 ], [ 86.2898485, 19.9516206 ], [ 86.2898462, 19.9521357 ], [ 86.2893015, 19.9521334 ], [ 86.2894348, 19.952649 ], [ 86.2884815, 19.9527735 ], [ 86.2879328, 19.9536732 ], [ 86.2890194, 19.9543209 ], [ 86.2901093, 19.9541969 ], [ 86.2901071, 19.9547119 ], [ 86.2909235, 19.9548436 ], [ 86.2911965, 19.9547163 ], [ 86.2924134, 19.9565239 ], [ 86.2922721, 19.9578109 ], [ 86.2917181, 19.959869 ], [ 86.2911728, 19.9599952 ], [ 86.2903524, 19.9607644 ], [ 86.2884418, 19.9616586 ], [ 86.2884393, 19.9621736 ], [ 86.2889842, 19.9621759 ], [ 86.2889818, 19.9626909 ], [ 86.2878878, 19.9637166 ], [ 86.2878732, 19.9642169 ], [ 86.2863811, 19.9655135 ], [ 86.28638, 19.9657709 ], [ 86.2858317, 19.9665412 ], [ 86.2856915, 19.9675709 ], [ 86.2851466, 19.9675686 ], [ 86.2852343, 19.9686868 ], [ 86.2859309, 19.9694473 ], [ 86.2856797, 19.970146 ], [ 86.2854074, 19.9701451 ], [ 86.2855021, 19.9697179 ], [ 86.2848661, 19.9693702 ], [ 86.2843225, 19.9691105 ], [ 86.2843237, 19.9688529 ], [ 86.2851398, 19.9691137 ], [ 86.2846007, 19.967824 ], [ 86.2848731, 19.9678251 ], [ 86.2848753, 19.9673101 ], [ 86.2854202, 19.9673122 ], [ 86.2859742, 19.9652541 ], [ 86.2871615, 19.9641404 ], [ 86.2874856, 19.9621699 ], [ 86.2877591, 19.9619134 ], [ 86.2877602, 19.961656 ], [ 86.2873547, 19.9611392 ], [ 86.2868092, 19.9612653 ], [ 86.2843637, 19.9599678 ], [ 86.2824618, 19.95893 ], [ 86.2819196, 19.9584127 ], [ 86.2808313, 19.958151 ], [ 86.2794735, 19.9572445 ], [ 86.2786624, 19.9559535 ], [ 86.2786599, 19.9564685 ], [ 86.2783875, 19.9564675 ], [ 86.27839, 19.9559523 ], [ 86.2781177, 19.9559514 ], [ 86.2781188, 19.9556938 ], [ 86.2783911, 19.9556949 ], [ 86.2783934, 19.9551799 ], [ 86.2789381, 19.955182 ], [ 86.279497, 19.9520939 ], [ 86.2800417, 19.9520962 ], [ 86.2807266, 19.9510687 ], [ 86.2808668, 19.9502967 ], [ 86.2819579, 19.9499145 ], [ 86.2840099, 19.9477342 ], [ 86.2837468, 19.9456728 ], [ 86.2832069, 19.9446405 ], [ 86.2828024, 19.9438663 ], [ 86.2819859, 19.9437338 ], [ 86.2809001, 19.9429569 ], [ 86.2787238, 19.942433 ], [ 86.2757304, 19.9419057 ], [ 86.275184, 19.9422903 ], [ 86.2749022, 19.9443492 ], [ 86.271092, 19.9438187 ], [ 86.2711109, 19.9396981 ], [ 86.2689358, 19.9389166 ], [ 86.2688026, 19.9381436 ], [ 86.2678548, 19.9371096 ], [ 86.2673095, 19.9372356 ], [ 86.2651345, 19.9364539 ], [ 86.2643212, 19.9356781 ], [ 86.2629583, 19.9359298 ], [ 86.2618655, 19.9366979 ], [ 86.2599574, 19.9370767 ], [ 86.2600991, 19.9357898 ], [ 86.2589748, 19.9340699 ], [ 86.258068, 19.9334634 ], [ 86.2579338, 19.9329478 ], [ 86.2568506, 19.9316556 ], [ 86.2561738, 19.9308803 ], [ 86.2561763, 19.9303651 ], [ 86.2564486, 19.9303663 ], [ 86.2565879, 19.9295944 ], [ 86.2575469, 19.928439 ], [ 86.257958, 19.9281084 ], [ 86.2582301, 19.9277985 ], [ 86.2585036, 19.927542 ], [ 86.2585085, 19.926512 ], [ 86.2578293, 19.9262515 ], [ 86.2575679, 19.9239327 ], [ 86.2570234, 19.9239304 ], [ 86.257027, 19.923158 ], [ 86.2562093, 19.9232827 ], [ 86.254572, 19.9240486 ], [ 86.2523862, 19.9255846 ], [ 86.2488451, 19.925827 ], [ 86.2476272, 19.9241485 ], [ 86.2476346, 19.9226033 ], [ 86.2484564, 19.9215766 ], [ 86.24846, 19.9208042 ], [ 86.2477822, 19.9202861 ], [ 86.2469654, 19.9202827 ], [ 86.2469629, 19.9207978 ], [ 86.2447833, 19.9210461 ], [ 86.2447809, 19.9215611 ], [ 86.2466875, 19.92144 ], [ 86.2471398, 19.9211436 ], [ 86.2469555, 19.922343 ], [ 86.2455934, 19.9224655 ], [ 86.2453199, 19.9227218 ], [ 86.2436868, 19.9225866 ], [ 86.2434114, 19.9232289 ], [ 86.2423235, 19.9229665 ], [ 86.241373, 19.9223192 ], [ 86.2407002, 19.9207711 ], [ 86.2412434, 19.921031 ], [ 86.2415195, 19.9202595 ], [ 86.2409748, 19.9202572 ], [ 86.2411154, 19.9192277 ], [ 86.2404382, 19.9185806 ], [ 86.2398943, 19.91845 ], [ 86.2399054, 19.9161323 ], [ 86.2379969, 19.916639 ], [ 86.2379945, 19.9171542 ], [ 86.2358168, 19.9170155 ], [ 86.2350068, 19.9155961 ], [ 86.2344628, 19.9154646 ], [ 86.2335137, 19.9145596 ], [ 86.2335161, 19.9140446 ], [ 86.2325654, 19.9136537 ], [ 86.2322952, 19.9132667 ], [ 86.2328397, 19.9132689 ], [ 86.2328408, 19.9130115 ], [ 86.2309355, 19.9128741 ], [ 86.2306645, 19.9126154 ], [ 86.2293044, 19.9123519 ], [ 86.2279431, 19.9123461 ], [ 86.2272663, 19.9114423 ], [ 86.2255038, 19.9100176 ], [ 86.2238701, 19.9100106 ], [ 86.2220954, 19.9109045 ], [ 86.2203275, 19.9106394 ], [ 86.2186976, 19.9098596 ], [ 86.218837, 19.9090875 ], [ 86.218566, 19.9088289 ], [ 86.2184367, 19.9075407 ], [ 86.2208896, 19.9070363 ], [ 86.2213026, 19.9060081 ], [ 86.2223967, 19.9049828 ], [ 86.2228181, 19.9024092 ], [ 86.2236356, 19.9022837 ], [ 86.2244549, 19.9017721 ], [ 86.226089, 19.9016509 ], [ 86.2260865, 19.9021659 ], [ 86.2288066, 19.9026929 ], [ 86.2289399, 19.9032085 ], [ 86.2296159, 19.9042415 ], [ 86.230976, 19.904505 ], [ 86.2309735, 19.90502 ], [ 86.2312445, 19.9052788 ], [ 86.2315169, 19.9052799 ], [ 86.231518, 19.9050223 ], [ 86.2313388, 19.9049331 ], [ 86.2312494, 19.9042485 ], [ 86.2317947, 19.9041217 ], [ 86.2328799, 19.9048991 ], [ 86.2334239, 19.9050306 ], [ 86.2334263, 19.9045156 ], [ 86.2353292, 19.9051671 ], [ 86.2374999, 19.9067216 ], [ 86.2415758, 19.9084133 ], [ 86.2418433, 19.9094447 ], [ 86.2421156, 19.9094458 ], [ 86.242256, 19.9084164 ], [ 86.2407658, 19.906993 ], [ 86.2399502, 19.906732 ], [ 86.2398134, 19.9066536 ], [ 86.2385927, 19.9059537 ], [ 86.2380506, 19.9054362 ], [ 86.2337042, 19.9033574 ], [ 86.2318021, 19.9025766 ], [ 86.2290833, 19.9017923 ], [ 86.2288123, 19.9015335 ], [ 86.2269102, 19.9007526 ], [ 86.2239191, 19.8999671 ], [ 86.2209319, 19.8984088 ], [ 86.2173976, 19.8973633 ], [ 86.2171266, 19.8971045 ], [ 86.2154957, 19.8965823 ], [ 86.2122338, 19.8955377 ], [ 86.2114171, 19.8955341 ], [ 86.2100597, 19.8947554 ], [ 86.2095152, 19.894753 ], [ 86.2059811, 19.8937072 ], [ 86.2046237, 19.8929286 ], [ 86.2032638, 19.8926649 ], [ 86.1983725, 19.8908403 ], [ 86.1975583, 19.8903215 ], [ 86.191306, 19.8884907 ], [ 86.190492, 19.8879719 ], [ 86.1793476, 19.8845729 ], [ 86.1763572, 19.8837864 ], [ 86.1760862, 19.8835277 ], [ 86.1643967, 19.8803829 ], [ 86.1627662, 19.8798602 ], [ 86.1603204, 19.8790762 ], [ 86.1578759, 19.8780344 ], [ 86.1510815, 19.875942 ], [ 86.1508107, 19.8756833 ], [ 86.1453733, 19.8743695 ], [ 86.1451025, 19.8741108 ], [ 86.1415693, 19.8730635 ], [ 86.1399388, 19.8725408 ], [ 86.1168373, 19.8659895 ], [ 86.1143913, 19.8656858 ], [ 86.1126253, 19.8651874 ], [ 86.1016149, 19.8623081 ], [ 86.0926461, 19.8599449 ], [ 86.0911522, 19.8592939 ], [ 86.0910196, 19.8587782 ], [ 86.0902031, 19.858774 ], [ 86.0902001, 19.859289 ], [ 86.0872099, 19.8586296 ], [ 86.0861241, 19.8581089 ], [ 86.0853076, 19.8581048 ], [ 86.0831347, 19.857321 ], [ 86.082321, 19.8568018 ], [ 86.0810953, 19.856589 ], [ 86.0808502, 19.8562134 ], [ 86.0794637, 19.8558614 ], [ 86.0781506, 19.8553289 ], [ 86.0778989, 19.8552269 ], [ 86.076888, 19.8549711 ], [ 86.0733558, 19.8539226 ], [ 86.0722687, 19.8536595 ], [ 86.0692779, 19.8531288 ], [ 86.0603101, 19.8507642 ], [ 86.029905430455699, 19.843822632415606 ], [ 86.0279671, 19.8433801 ], [ 86.0054063, 19.838878 ], [ 86.0040472, 19.8386128 ], [ 86.0013275, 19.8383401 ], [ 85.9931748, 19.8364917 ], [ 85.9918157, 19.8362265 ], [ 85.9744177, 19.8332945 ], [ 85.9733325, 19.8327733 ], [ 85.9502293, 19.8285185 ], [ 85.9488704, 19.8282531 ], [ 85.9477819, 19.8282467 ], [ 85.9423482, 19.8269269 ], [ 85.9246905, 19.8224437 ], [ 85.921434, 19.8211365 ], [ 85.9198048, 19.8206115 ], [ 85.919121, 19.8203152 ], [ 85.9111154, 19.8179836 ], [ 85.9104438, 19.8177975 ], [ 85.9073131, 19.8169303 ], [ 85.9070428, 19.8166712 ], [ 85.9048678, 19.8164004 ], [ 85.9026947, 19.8158719 ], [ 85.899435, 19.8150793 ], [ 85.897806, 19.8145542 ], [ 85.8948202, 19.8135059 ], [ 85.8793367, 19.8098041 ], [ 85.8766233, 19.808757 ], [ 85.8744484, 19.8084858 ], [ 85.8714628, 19.8074369 ], [ 85.8608724, 19.804537 ], [ 85.8421372, 19.7992664 ], [ 85.8339924, 19.7968958 ], [ 85.8328116, 19.7967023 ], [ 85.8301912, 19.795841 ], [ 85.8285628, 19.7953154 ], [ 85.8207339, 19.7930406 ], [ 85.8177833, 19.79218 ], [ 85.8090178, 19.789521 ], [ 85.8044028, 19.7882025 ], [ 85.8008739, 19.7871489 ], [ 85.7965332, 19.7855747 ], [ 85.7912009, 19.783836 ], [ 85.7881217, 19.7826852 ], [ 85.7867657, 19.7821611 ], [ 85.7859524, 19.7817697 ], [ 85.7845582, 19.7812875 ], [ 85.7802548, 19.7797992 ], [ 85.7780866, 19.7787544 ], [ 85.7745581, 19.7777002 ], [ 85.7742883, 19.7774409 ], [ 85.7664198, 19.7748117 ], [ 85.7661497, 19.7745524 ], [ 85.7647918, 19.7742855 ], [ 85.7637095, 19.7735055 ], [ 85.7628936, 19.7734998 ], [ 85.7620815, 19.7729792 ], [ 85.7588256, 19.7719266 ], [ 85.7580095, 19.7719209 ], [ 85.7498736, 19.7687743 ], [ 85.7493297, 19.7687705 ], [ 85.7485177, 19.7682498 ], [ 85.7460738, 19.7677176 ], [ 85.7444459, 19.7671912 ], [ 85.742276, 19.7664035 ], [ 85.7417362, 19.7658847 ], [ 85.7371225, 19.7645647 ], [ 85.7368525, 19.7643052 ], [ 85.7354947, 19.7640381 ], [ 85.7346827, 19.7635174 ], [ 85.7341388, 19.7635135 ], [ 85.732785, 19.7627314 ], [ 85.7303412, 19.7621992 ], [ 85.7260039, 19.7603659 ], [ 85.7251879, 19.76036 ], [ 85.7222044, 19.7593086 ], [ 85.7067434, 19.7540476 ], [ 85.7064735, 19.7537881 ], [ 85.6999612, 19.7519385 ], [ 85.6872127, 19.7477253 ], [ 85.6864012, 19.7472045 ], [ 85.6855853, 19.7471984 ], [ 85.6823324, 19.7458871 ], [ 85.6807051, 19.74536 ], [ 85.6714823, 19.7424594 ], [ 85.6674074, 19.7419142 ], [ 85.6663262, 19.7411336 ], [ 85.6638852, 19.740343 ], [ 85.6633456, 19.7398238 ], [ 85.6615851, 19.73891 ], [ 85.6614537, 19.738394 ], [ 85.657105, 19.7381039 ], [ 85.6557518, 19.7373213 ], [ 85.655896, 19.7362924 ], [ 85.6561701, 19.736037 ], [ 85.6561765, 19.7352646 ], [ 85.6552372, 19.7338408 ], [ 85.6541559, 19.7330601 ], [ 85.6536121, 19.7330561 ], [ 85.6530725, 19.7325369 ], [ 85.6519871, 19.7322714 ], [ 85.6498225, 19.7309677 ], [ 85.6387153, 19.7259911 ], [ 85.6381716, 19.7259869 ], [ 85.6267976, 19.7204927 ], [ 85.6240875, 19.7194421 ], [ 85.6235481, 19.7189229 ], [ 85.6224627, 19.718657 ], [ 85.6159639, 19.7155171 ], [ 85.6154245, 19.7149979 ], [ 85.607843, 19.7113343 ], [ 85.607299, 19.71133 ], [ 85.6067598, 19.7108108 ], [ 85.6008053, 19.7076745 ], [ 85.5994504, 19.7071489 ], [ 85.5826647, 19.6990348 ], [ 85.5821255, 19.6985156 ], [ 85.5764417, 19.6956383 ], [ 85.575898, 19.6956339 ], [ 85.5740019, 19.6948464 ], [ 85.5707534, 19.6932756 ], [ 85.5702144, 19.6927562 ], [ 85.5688574, 19.692488 ], [ 85.5680464, 19.6919666 ], [ 85.5675028, 19.6919622 ], [ 85.5618194, 19.6890843 ], [ 85.558750330703617, 19.6876 ], [ 85.5569471, 19.6867279 ], [ 85.5490987, 19.6828021 ], [ 85.5457463, 19.6812833 ], [ 85.5374594, 19.6773005 ], [ 85.525728, 19.6713669 ], [ 85.5102777, 19.6637128 ], [ 85.5088973, 19.6636817 ], [ 85.506583, 19.6628762 ], [ 85.5068309, 19.6619095 ], [ 85.5012018, 19.659235 ], [ 85.5006629, 19.6587156 ], [ 85.5001194, 19.6587111 ], [ 85.4982243, 19.6579228 ], [ 85.4955208, 19.6563552 ], [ 85.4949773, 19.6563507 ], [ 85.4944386, 19.6558311 ], [ 85.4920022, 19.6547808 ], [ 85.4914586, 19.6547763 ], [ 85.49092, 19.6542567 ], [ 85.4868603, 19.6524202 ], [ 85.4863169, 19.6524157 ], [ 85.4833418, 19.6508457 ], [ 85.4827985, 19.6508411 ], [ 85.4817185, 19.6500594 ], [ 85.4811751, 19.6500549 ], [ 85.4788756, 19.6488772 ], [ 85.4765745, 19.647956 ], [ 85.4760311, 19.6479515 ], [ 85.474136, 19.647163 ], [ 85.4730563, 19.6463813 ], [ 85.4725129, 19.6463767 ], [ 85.4706178, 19.6455882 ], [ 85.4700793, 19.6450687 ], [ 85.4665611, 19.6434937 ], [ 85.4646664, 19.6427052 ], [ 85.4641228, 19.6427005 ], [ 85.4616868, 19.6416497 ], [ 85.4581689, 19.6400747 ], [ 85.4568151, 19.6395482 ], [ 85.4549204, 19.6387595 ], [ 85.4541088, 19.6383667 ], [ 85.4541138, 19.6378517 ], [ 85.4538408, 19.6379778 ], [ 85.4527564, 19.6377109 ], [ 85.452487, 19.637451 ], [ 85.4519437, 19.6374465 ], [ 85.4473464, 19.6350895 ], [ 85.4451775, 19.6345557 ], [ 85.4440981, 19.633774 ], [ 85.4386859, 19.6314098 ], [ 85.4381423, 19.6314051 ], [ 85.4378732, 19.6311452 ], [ 85.4365169, 19.6308759 ], [ 85.4327303, 19.6290407 ], [ 85.4321918, 19.628521 ], [ 85.4302975, 19.6277321 ], [ 85.4297539, 19.6277274 ], [ 85.4292155, 19.6272076 ], [ 85.424073, 19.6251029 ], [ 85.4235347, 19.6245832 ], [ 85.4205583, 19.6232698 ], [ 85.412986, 19.6195985 ], [ 85.4124425, 19.6195936 ], [ 85.4119042, 19.6190738 ], [ 85.4094716, 19.617765 ], [ 85.4089282, 19.6177603 ], [ 85.4018972, 19.6143507 ], [ 85.4013589, 19.6138309 ], [ 85.3975755, 19.6117376 ], [ 85.3967606, 19.6117302 ], [ 85.3929774, 19.6096367 ], [ 85.3924391, 19.6091169 ], [ 85.391355, 19.6088499 ], [ 85.3889252, 19.6072832 ], [ 85.388382, 19.6072783 ], [ 85.3873028, 19.6064962 ], [ 85.3864905, 19.6062316 ], [ 85.3843298, 19.6049247 ], [ 85.3818978, 19.6036155 ], [ 85.3813544, 19.6036108 ], [ 85.3802754, 19.6028285 ], [ 85.379732, 19.6028238 ], [ 85.3783841, 19.6017816 ], [ 85.3778407, 19.6017767 ], [ 85.3773026, 19.601257 ], [ 85.371626, 19.5983736 ], [ 85.3683843, 19.5965418 ], [ 85.3673004, 19.5962745 ], [ 85.366224, 19.5952349 ], [ 85.3656808, 19.5952299 ], [ 85.3640587, 19.5944428 ], [ 85.3632516, 19.5936631 ], [ 85.3624353, 19.5937848 ], [ 85.3624404, 19.59327 ], [ 85.3594667, 19.5918264 ], [ 85.3589233, 19.5918213 ], [ 85.3519026, 19.5876378 ], [ 85.3510955, 19.586858 ], [ 85.3500116, 19.5865906 ], [ 85.3375877, 19.5795246 ], [ 85.3367807, 19.5787448 ], [ 85.3362375, 19.5787397 ], [ 85.3343467, 19.5776924 ], [ 85.3335397, 19.5769126 ], [ 85.3327276, 19.5766477 ], [ 85.3319205, 19.5758676 ], [ 85.3305679, 19.5753402 ], [ 85.3267918, 19.5727304 ], [ 85.3257081, 19.572463 ], [ 85.3249013, 19.571683 ], [ 85.3235484, 19.5711555 ], [ 85.3219321, 19.5698533 ], [ 85.3205794, 19.5693256 ], [ 85.3197726, 19.5685458 ], [ 85.3186888, 19.5682782 ], [ 85.3159943, 19.5661933 ], [ 85.3138323, 19.5651432 ], [ 85.3092473, 19.5620107 ], [ 85.3076244, 19.5613523 ], [ 85.3073596, 19.5607057 ], [ 85.3068164, 19.5607006 ], [ 85.3027695, 19.5580879 ], [ 85.2968353, 19.5541699 ], [ 85.2962921, 19.5541648 ], [ 85.2949478, 19.5528646 ], [ 85.2941358, 19.5525995 ], [ 85.2884734, 19.548684 ], [ 85.2876615, 19.5484188 ], [ 85.2851016, 19.546464 ], [ 85.2849716, 19.5459478 ], [ 85.283618, 19.5455483 ], [ 85.277147, 19.5411096 ], [ 85.2763405, 19.5403296 ], [ 85.2755286, 19.5400642 ], [ 85.2744534, 19.5390242 ], [ 85.2731011, 19.5384963 ], [ 85.2623275, 19.530154 ], [ 85.2615156, 19.5298889 ], [ 85.2604405, 19.5288486 ], [ 85.2596288, 19.5285833 ], [ 85.258285, 19.5272831 ], [ 85.2570695, 19.526628 ], [ 85.2569397, 19.5261119 ], [ 85.2558577, 19.5257148 ], [ 85.2504717, 19.5215434 ], [ 85.24957165, 19.521033806124365 ], [ 85.247233, 19.5197097 ], [ 85.2453462, 19.5184041 ], [ 85.2378027, 19.512924 ], [ 85.236718, 19.5127851 ], [ 85.2365874, 19.512269 ], [ 85.2359161, 19.5116182 ], [ 85.2351045, 19.5113529 ], [ 85.2270242, 19.5053521 ], [ 85.2262124, 19.5050868 ], [ 85.2254066, 19.5043066 ], [ 85.2245935, 19.5041703 ], [ 85.2244629, 19.503654 ], [ 85.2237915, 19.5030032 ], [ 85.2224427, 19.5022178 ], [ 85.2219012, 19.5020841 ], [ 85.2217706, 19.501568 ], [ 85.220825, 19.501172 ], [ 85.2124716, 19.4954255 ], [ 85.2117995, 19.4947757 ], [ 85.2116698, 19.4942593 ], [ 85.2105882, 19.4938621 ], [ 85.208165, 19.4920359 ], [ 85.2076235, 19.4919021 ], [ 85.2076292, 19.4913873 ], [ 85.2068161, 19.4912501 ], [ 85.2060102, 19.4904697 ], [ 85.2054659, 19.4905935 ], [ 85.2053355, 19.4900773 ], [ 85.1984637, 19.485503 ], [ 85.1971206, 19.4842025 ], [ 85.1960363, 19.4840634 ], [ 85.1959059, 19.483547 ], [ 85.1936177, 19.4818504 ], [ 85.1928061, 19.4815848 ], [ 85.1868833, 19.4771488 ], [ 85.1860719, 19.4768831 ], [ 85.1849976, 19.4758426 ], [ 85.1744926, 19.4685281 ], [ 85.1736812, 19.4682626 ], [ 85.1692386, 19.4649999 ], [ 85.1691091, 19.4644837 ], [ 85.1680279, 19.4640861 ], [ 85.1586071, 19.4570394 ], [ 85.157796, 19.4567736 ], [ 85.1571243, 19.4561237 ], [ 85.1569948, 19.4556073 ], [ 85.1561821, 19.4554699 ], [ 85.1501235, 19.4511605 ], [ 85.1497241, 19.4505125 ], [ 85.145548, 19.447767 ], [ 85.1451488, 19.4471188 ], [ 85.1433976, 19.4459428 ], [ 85.1432683, 19.4454265 ], [ 85.1417839, 19.4446389 ], [ 85.1408406, 19.4441144 ], [ 85.1408464, 19.4435996 ], [ 85.1403051, 19.4434648 ], [ 85.1362757, 19.439819 ], [ 85.1310294, 19.435775 ], [ 85.1309001, 19.4352588 ], [ 85.1300876, 19.4351212 ], [ 85.1275342, 19.4329069 ], [ 85.1274049, 19.4323908 ], [ 85.1263241, 19.4319929 ], [ 85.1255218, 19.4309549 ], [ 85.1243076, 19.4302991 ], [ 85.1239085, 19.4296508 ], [ 85.1228291, 19.4291248 ], [ 85.122027, 19.4280867 ], [ 85.1208128, 19.427431 ], [ 85.1204137, 19.4267827 ], [ 85.1189311, 19.4258669 ], [ 85.1185322, 19.4252186 ], [ 85.1174513, 19.4248217 ], [ 85.117321, 19.4243053 ], [ 85.1131561, 19.420786 ], [ 85.1120752, 19.4203891 ], [ 85.1119449, 19.4198729 ], [ 85.1073742, 19.4162209 ], [ 85.1072449, 19.4157047 ], [ 85.1061672, 19.4150493 ], [ 85.1056259, 19.4149154 ], [ 85.105632, 19.4144006 ], [ 85.1046879, 19.4138757 ], [ 85.1045586, 19.4133596 ], [ 85.103883, 19.413095 ], [ 85.1037537, 19.4125788 ], [ 85.1032111, 19.4125732 ], [ 85.1032169, 19.4120583 ], [ 85.1026758, 19.4119234 ], [ 85.1018784, 19.4104996 ], [ 85.1010644, 19.4104911 ], [ 85.100669, 19.4094571 ], [ 85.0995927, 19.4086735 ], [ 85.0991982, 19.4076397 ], [ 85.0986556, 19.407634 ], [ 85.0981294, 19.406212 ], [ 85.0975883, 19.406078 ], [ 85.0969276, 19.4045265 ], [ 85.0955921, 19.4027102 ], [ 85.0952007, 19.4014189 ], [ 85.0946581, 19.4014133 ], [ 85.0933347, 19.3985673 ], [ 85.0927921, 19.3985616 ], [ 85.0922674, 19.3970115 ], [ 85.091725, 19.3970058 ], [ 85.0912003, 19.3954556 ], [ 85.0906594, 19.3953207 ], [ 85.0898605, 19.3940251 ], [ 85.0891863, 19.3936323 ], [ 85.0887919, 19.3925983 ], [ 85.0882494, 19.3925926 ], [ 85.0879962, 19.3910453 ], [ 85.0874536, 19.3910394 ], [ 85.0872003, 19.3894921 ], [ 85.0866594, 19.3893573 ], [ 85.0862625, 19.3884524 ], [ 85.0854577, 19.3876717 ], [ 85.0850663, 19.3863802 ], [ 85.0843906, 19.3861158 ], [ 85.0838633, 19.3848229 ], [ 85.0838752, 19.3837932 ], [ 85.0842888, 19.3832827 ], [ 85.0837461, 19.383277 ], [ 85.0836222, 19.3822458 ], [ 85.082955, 19.3813373 ], [ 85.0824141, 19.3812033 ], [ 85.0821548, 19.3801708 ], [ 85.0816138, 19.3800359 ], [ 85.0794589, 19.3787259 ], [ 85.077319, 19.3761289 ], [ 85.0767781, 19.3759949 ], [ 85.0762478, 19.3749595 ], [ 85.0770614, 19.374968 ], [ 85.0771996, 19.3747121 ], [ 85.0770705, 19.3741958 ], [ 85.0776129, 19.3742014 ], [ 85.0784086, 19.3757546 ], [ 85.078951, 19.3757603 ], [ 85.0793455, 19.3767943 ], [ 85.0804182, 19.3778353 ], [ 85.0805484, 19.3783517 ], [ 85.0824411, 19.3788866 ], [ 85.0819196, 19.377079 ], [ 85.0813772, 19.3770733 ], [ 85.0809818, 19.3760393 ], [ 85.0801742, 19.3755157 ], [ 85.0795101, 19.3743498 ], [ 85.0784313, 19.3738234 ], [ 85.0757142, 19.3741814 ], [ 85.0759763, 19.3749565 ], [ 85.0743475, 19.3750676 ], [ 85.0740686, 19.3757087 ], [ 85.0751567, 19.3754628 ], [ 85.0751506, 19.3759777 ], [ 85.0759643, 19.3759862 ], [ 85.0763617, 19.3767628 ], [ 85.0767478, 19.378569 ], [ 85.0778268, 19.3790954 ], [ 85.0787546, 19.3809073 ], [ 85.0788786, 19.3819383 ], [ 85.0796923, 19.381947 ], [ 85.0799576, 19.3824647 ], [ 85.0784711, 19.381934 ], [ 85.0783421, 19.3814178 ], [ 85.0769798, 19.3819183 ], [ 85.0767161, 19.3812714 ], [ 85.0759023, 19.3812629 ], [ 85.0737994, 19.3802655 ], [ 85.0732457, 19.3802452 ], [ 85.0727797, 19.3802263 ], [ 85.0720181, 19.3806662 ], [ 85.0720142, 19.3810049 ], [ 85.0723716, 19.3816121 ], [ 85.0726428, 19.381615 ], [ 85.0726367, 19.3821298 ], [ 85.0729962, 19.3824787 ], [ 85.0739809, 19.3831738 ], [ 85.0745233, 19.3831795 ], [ 85.0756084, 19.383191 ], [ 85.0756053, 19.3834485 ], [ 85.0764131, 19.383972 ], [ 85.0766571, 19.3862916 ], [ 85.0769283, 19.3862944 ], [ 85.0769223, 19.3868092 ], [ 85.0774649, 19.3868149 ], [ 85.0773697, 19.3869829 ], [ 85.0769193, 19.3870667 ], [ 85.0769132, 19.3875815 ], [ 85.0767354, 19.3874912 ], [ 85.0761238, 19.3855135 ], [ 85.0755812, 19.3855078 ], [ 85.0759618, 19.3840548 ], [ 85.0746137, 19.3833494 ], [ 85.0745173, 19.3836943 ], [ 85.0737051, 19.3835566 ], [ 85.0728989, 19.3829049 ], [ 85.0723625, 19.3823844 ], [ 85.071835, 19.3810914 ], [ 85.071841, 19.3805766 ], [ 85.0719543, 19.3803519 ], [ 85.0722871, 19.3800003 ], [ 85.0726639, 19.379813 ], [ 85.0748295, 19.3802217 ], [ 85.0750977, 19.3804819 ], [ 85.0778057, 19.3808973 ], [ 85.0778087, 19.3806399 ], [ 85.0768648, 19.3801149 ], [ 85.0767358, 19.3795987 ], [ 85.0761933, 19.3795929 ], [ 85.0761994, 19.379078 ], [ 85.075387, 19.3789404 ], [ 85.0743141, 19.3778992 ], [ 85.0735035, 19.3776331 ], [ 85.0709488, 19.3756756 ], [ 85.0708197, 19.3751595 ], [ 85.0697393, 19.3747613 ], [ 85.0689423, 19.3733373 ], [ 85.0700272, 19.3733489 ], [ 85.0698972, 19.3728325 ], [ 85.0689559, 19.3721786 ], [ 85.0679149, 19.3684349 ], [ 85.0680531, 19.368179 ], [ 85.0679302, 19.3671478 ], [ 85.0673893, 19.3670128 ], [ 85.065777, 19.3657085 ], [ 85.0641557, 19.3651763 ], [ 85.0633511, 19.3643955 ], [ 85.0622693, 19.3641266 ], [ 85.0601147, 19.3628163 ], [ 85.0595723, 19.3628106 ], [ 85.0582285, 19.3617664 ], [ 85.0576861, 19.3617607 ], [ 85.0555315, 19.3604504 ], [ 85.0531058, 19.3591372 ], [ 85.0512196, 19.3580873 ], [ 85.0506772, 19.3580814 ], [ 85.0501408, 19.3575607 ], [ 85.0490592, 19.3572918 ], [ 85.0469047, 19.3559815 ], [ 85.0436687, 19.354402 ], [ 85.0428643, 19.353621 ], [ 85.0404357, 19.3525651 ], [ 85.0390921, 19.3515209 ], [ 85.0385496, 19.351515 ], [ 85.0358562, 19.3499414 ], [ 85.0347806, 19.3491574 ], [ 85.0334307, 19.348628 ], [ 85.0328946, 19.3481073 ], [ 85.0312767, 19.3473175 ], [ 85.0304723, 19.3465364 ], [ 85.0291227, 19.346007 ], [ 85.0277759, 19.34522 ], [ 85.0272399, 19.3446993 ], [ 85.0261582, 19.3444302 ], [ 85.0253538, 19.3436492 ], [ 85.0213109, 19.3415456 ], [ 85.0202385, 19.3405042 ], [ 85.0196963, 19.3404984 ], [ 85.0191571, 19.3402351 ], [ 85.0183529, 19.339454 ], [ 85.0170032, 19.3389244 ], [ 85.0156566, 19.3381374 ], [ 85.0153886, 19.3378771 ], [ 85.0148477, 19.337743 ], [ 85.0148539, 19.3372281 ], [ 85.01431, 19.3373504 ], [ 85.013506, 19.3365693 ], [ 85.0121563, 19.3360397 ], [ 85.0113521, 19.3352586 ], [ 85.0102737, 19.334732 ], [ 85.0097377, 19.3342113 ], [ 85.0073126, 19.3328976 ], [ 85.0065086, 19.3321164 ], [ 85.0054272, 19.3318471 ], [ 85.004355, 19.3308057 ], [ 85.0035446, 19.3305392 ], [ 85.0027405, 19.3297581 ], [ 85.0021983, 19.3297522 ], [ 85.0016621, 19.3292315 ], [ 84.9997797, 19.3279237 ], [ 84.9987014, 19.3273969 ], [ 84.9976294, 19.3263553 ], [ 84.996819, 19.326089 ], [ 84.996471605255408, 19.325751489154385 ], [ 84.996471605255394, 19.325751489154385 ], [ 84.995747, 19.3250475 ], [ 84.9946655, 19.3247781 ], [ 84.9938615, 19.323997 ], [ 84.991172, 19.3221652 ], [ 84.990365, 19.3216415 ], [ 84.9898226, 19.3216354 ], [ 84.9887508, 19.3205939 ], [ 84.9879405, 19.3203276 ], [ 84.9868685, 19.319286 ], [ 84.9860583, 19.3190195 ], [ 84.9852543, 19.3182383 ], [ 84.983905, 19.3177086 ], [ 84.9835024, 19.3173185 ], [ 84.9833737, 19.3168021 ], [ 84.98283, 19.3169244 ], [ 84.9824274, 19.3165341 ], [ 84.9817547, 19.3161401 ], [ 84.9804149, 19.314838 ], [ 84.9786633, 19.3139182 ], [ 84.9785346, 19.3134018 ], [ 84.9777226, 19.3132637 ], [ 84.9766508, 19.3122221 ], [ 84.9758407, 19.3119556 ], [ 84.9747689, 19.310914 ], [ 84.9742297, 19.3106506 ], [ 84.9728901, 19.3093484 ], [ 84.9720798, 19.3090821 ], [ 84.9707402, 19.3077798 ], [ 84.9697988, 19.3071263 ], [ 84.9691326, 19.3062174 ], [ 84.9685918, 19.3060832 ], [ 84.9684622, 19.3055668 ], [ 84.9664952, 19.3040883 ], [ 84.9659065, 19.3034183 ], [ 84.9657694, 19.3032622 ], [ 84.9656171, 19.3030889 ], [ 84.9653143, 19.3021747 ], [ 84.9616244, 19.2994402 ], [ 84.9605527, 19.2983986 ], [ 84.9581288, 19.2970843 ], [ 84.9570572, 19.2960426 ], [ 84.9565181, 19.2957791 ], [ 84.9554465, 19.2947373 ], [ 84.9546365, 19.2944708 ], [ 84.953565, 19.2934291 ], [ 84.952487, 19.2929021 ], [ 84.9516833, 19.2921208 ], [ 84.9506055, 19.2915939 ], [ 84.9500697, 19.291073 ], [ 84.9495291, 19.2909386 ], [ 84.9493995, 19.2904223 ], [ 84.948727, 19.290028 ], [ 84.9481914, 19.2895071 ], [ 84.9471165, 19.2887228 ], [ 84.9460387, 19.2881959 ], [ 84.9446994, 19.2868936 ], [ 84.9436248, 19.2861091 ], [ 84.9425469, 19.2855822 ], [ 84.9418767, 19.2849314 ], [ 84.9417482, 19.2844151 ], [ 84.9406686, 19.2840163 ], [ 84.9398652, 19.283235 ], [ 84.9390551, 19.2829685 ], [ 84.9386529, 19.2825782 ], [ 84.9379869, 19.2816691 ], [ 84.937177, 19.2814026 ], [ 84.9370426, 19.2812728 ], [ 84.936239, 19.2804915 ], [ 84.9361105, 19.2799751 ], [ 84.9352989, 19.2798368 ], [ 84.9346287, 19.279186 ], [ 84.9345002, 19.2786697 ], [ 84.9336886, 19.2785313 ], [ 84.9330186, 19.2778806 ], [ 84.9326206, 19.2772322 ], [ 84.9318106, 19.2769655 ], [ 84.9307393, 19.2759237 ], [ 84.9302005, 19.2756602 ], [ 84.9292626, 19.2747489 ], [ 84.9291339, 19.2742327 ], [ 84.9283209, 19.2742235 ], [ 84.9281912, 19.2737071 ], [ 84.9275221, 19.2730554 ], [ 84.9269818, 19.2729211 ], [ 84.9269882, 19.2724062 ], [ 84.9264477, 19.2722709 ], [ 84.9253764, 19.2712291 ], [ 84.9248361, 19.2710948 ], [ 84.9247064, 19.2705784 ], [ 84.9244388, 19.2703178 ], [ 84.9243101, 19.2698016 ], [ 84.9237697, 19.2696663 ], [ 84.9229631, 19.2691422 ], [ 84.9208206, 19.2670583 ], [ 84.9201474, 19.266665 ], [ 84.9200188, 19.2661486 ], [ 84.9194785, 19.2660133 ], [ 84.9189429, 19.2654924 ], [ 84.9181362, 19.2649683 ], [ 84.9175942, 19.2649621 ], [ 84.9170585, 19.2644412 ], [ 84.9162472, 19.2643036 ], [ 84.9163951, 19.2632756 ], [ 84.9159973, 19.262627 ], [ 84.9154585, 19.2623635 ], [ 84.9143874, 19.2613216 ], [ 84.9138486, 19.2610579 ], [ 84.9131786, 19.2604072 ], [ 84.9127807, 19.2597585 ], [ 84.9119708, 19.2594919 ], [ 84.9115721, 19.2588443 ], [ 84.9109032, 19.2581927 ], [ 84.9103643, 19.257929 ], [ 84.9092933, 19.2568871 ], [ 84.9087544, 19.2566234 ], [ 84.9078168, 19.255712 ], [ 84.9076883, 19.2551959 ], [ 84.9068769, 19.2550573 ], [ 84.9063447, 19.254279 ], [ 84.9052672, 19.2537517 ], [ 84.9039285, 19.2524493 ], [ 84.9033897, 19.2521857 ], [ 84.9023188, 19.2511437 ], [ 84.90178, 19.2508801 ], [ 84.9004413, 19.2495775 ], [ 84.8999026, 19.2493138 ], [ 84.8985639, 19.2480114 ], [ 84.8977526, 19.2478738 ], [ 84.8976231, 19.2473575 ], [ 84.8973555, 19.2470969 ], [ 84.897227, 19.2465805 ], [ 84.8964156, 19.2464422 ], [ 84.8957458, 19.2457912 ], [ 84.8953479, 19.2451426 ], [ 84.8945382, 19.2448759 ], [ 84.8941394, 19.2442282 ], [ 84.8931997, 19.2435733 ], [ 84.8922623, 19.242662 ], [ 84.8921338, 19.2421456 ], [ 84.8910531, 19.2418757 ], [ 84.8909238, 19.2413594 ], [ 84.8902549, 19.2407077 ], [ 84.8897163, 19.2404441 ], [ 84.8886454, 19.2394019 ], [ 84.8881051, 19.2392675 ], [ 84.8881117, 19.2387527 ], [ 84.8875713, 19.2386174 ], [ 84.8870393, 19.2378389 ], [ 84.8861008, 19.2374204 ], [ 84.88544, 19.2369171 ], [ 84.8848896, 19.2363987 ], [ 84.8838653, 19.2354312 ], [ 84.8810915, 19.2328889 ], [ 84.8781911, 19.2304002 ], [ 84.8775837, 19.2298551 ], [ 84.8753276, 19.2278319 ], [ 84.8733272, 19.2259189 ], [ 84.8723653, 19.2250482 ], [ 84.8715893, 19.2245571 ], [ 84.871415, 19.2241827 ], [ 84.8711128, 19.2237048 ], [ 84.8704455, 19.2233553 ], [ 84.8700185, 19.2229424 ], [ 84.8689299, 19.2216913 ], [ 84.8674818, 19.2202362 ], [ 84.865876, 19.2186728 ], [ 84.8652065, 19.2180726 ], [ 84.8644297, 19.2169637 ], [ 84.8637744, 19.2162927 ], [ 84.8622816, 19.2149459 ], [ 84.8610486, 19.2137235 ], [ 84.85965, 19.2123863 ], [ 84.8580767, 19.2109345 ], [ 84.8566479, 19.2092978 ], [ 84.8558836, 19.2084887 ], [ 84.8541062, 19.2068221 ], [ 84.8528623, 19.2055824 ], [ 84.8508774, 19.203682 ], [ 84.8495183, 19.2023458 ], [ 84.8490267, 19.2016386 ], [ 84.8487939, 19.2009347 ], [ 84.8487142, 19.2006186 ], [ 84.8474364, 19.1995634 ], [ 84.8454196, 19.1975819 ], [ 84.8440992, 19.1961553 ], [ 84.8426978, 19.1947055 ], [ 84.8417042, 19.1937045 ], [ 84.8406336, 19.1924267 ], [ 84.8387409, 19.1902954 ], [ 84.8376076, 19.189031 ], [ 84.8368747, 19.1879567 ], [ 84.8367415, 19.1878259 ], [ 84.8358125, 19.1865743 ], [ 84.83487, 19.1858891 ], [ 84.8345009, 19.1853777 ], [ 84.834651, 19.1852218 ], [ 84.8344771, 19.1848393 ], [ 84.8333325, 19.1836197 ], [ 84.8326079, 19.1827579 ], [ 84.831943, 19.1818486 ], [ 84.8314028, 19.1817138 ], [ 84.8308813, 19.1801631 ], [ 84.8303412, 19.1800276 ], [ 84.8296753, 19.1791192 ], [ 84.8295472, 19.1786029 ], [ 84.8290053, 19.1785965 ], [ 84.8288762, 19.1780801 ], [ 84.8282079, 19.1774281 ], [ 84.8276678, 19.1772935 ], [ 84.8275387, 19.1767771 ], [ 84.8268772, 19.1756104 ], [ 84.8262045, 19.1752168 ], [ 84.8259405, 19.1746987 ], [ 84.8252722, 19.1740468 ], [ 84.8247322, 19.1739123 ], [ 84.8246029, 19.1733957 ], [ 84.8243355, 19.1731353 ], [ 84.8242074, 19.172619 ], [ 84.8236655, 19.1726125 ], [ 84.8234083, 19.1715796 ], [ 84.8228681, 19.1714441 ], [ 84.8221991, 19.170793 ], [ 84.8218067, 19.1697588 ], [ 84.8212667, 19.1696231 ], [ 84.8206009, 19.1687148 ], [ 84.8204727, 19.1681984 ], [ 84.8199328, 19.1680627 ], [ 84.8197984, 19.1679329 ], [ 84.8196702, 19.1674165 ], [ 84.8191286, 19.1674101 ], [ 84.8191354, 19.1668955 ], [ 84.8185937, 19.1668888 ], [ 84.8180722, 19.1653383 ], [ 84.8175323, 19.1652026 ], [ 84.8168698, 19.1640368 ], [ 84.8160675, 19.1632549 ], [ 84.8154026, 19.1623457 ], [ 84.8147302, 19.161952 ], [ 84.814338, 19.1609176 ], [ 84.813798, 19.1607821 ], [ 84.8131356, 19.1596161 ], [ 84.8126007, 19.1590951 ], [ 84.8120692, 19.1583164 ], [ 84.8119411, 19.1578 ], [ 84.8114011, 19.1576643 ], [ 84.8106056, 19.1563678 ], [ 84.8100656, 19.1562332 ], [ 84.8096725, 19.1551988 ], [ 84.8091376, 19.1546776 ], [ 84.8087487, 19.1533857 ], [ 84.8082072, 19.1533793 ], [ 84.8079568, 19.1518318 ], [ 84.8074151, 19.1518254 ], [ 84.8068938, 19.1502746 ], [ 84.8063539, 19.1501389 ], [ 84.8059522, 19.1497484 ], [ 84.8055601, 19.1487142 ], [ 84.8050184, 19.1487076 ], [ 84.8048927, 19.1479338 ], [ 84.8038196, 19.1471487 ], [ 84.8036916, 19.1466324 ], [ 84.8031482, 19.1467543 ], [ 84.8026015, 19.1471342 ], [ 84.8027432, 19.1466211 ], [ 84.802503, 19.1443015 ], [ 84.8017213, 19.1419752 ], [ 84.8011898, 19.1411968 ], [ 84.8001305, 19.1393822 ], [ 84.799342, 19.1375708 ], [ 84.7992206, 19.1365396 ], [ 84.798679, 19.1365332 ], [ 84.7985569, 19.135502 ], [ 84.7980254, 19.1347233 ], [ 84.796726, 19.1305891 ], [ 84.7964588, 19.1303285 ], [ 84.7963408, 19.1290399 ], [ 84.7957993, 19.1290335 ], [ 84.7956771, 19.1280023 ], [ 84.7950278, 19.1259352 ], [ 84.7944864, 19.1259286 ], [ 84.7943641, 19.1248974 ], [ 84.7938362, 19.1238615 ], [ 84.7931683, 19.1232094 ], [ 84.7918247, 19.1224211 ], [ 84.7907415, 19.1224081 ], [ 84.7902102, 19.1216294 ], [ 84.7893996, 19.1214914 ], [ 84.7893824, 19.1227783 ], [ 84.7899275, 19.1225275 ], [ 84.7905937, 19.1233077 ], [ 84.7908508, 19.1243404 ], [ 84.7911182, 19.124601 ], [ 84.7911146, 19.1248585 ], [ 84.7908406, 19.1251127 ], [ 84.7904212, 19.1261372 ], [ 84.7915043, 19.1261503 ], [ 84.7913614, 19.1266634 ], [ 84.791225, 19.12679 ], [ 84.7904142, 19.1266521 ], [ 84.7903087, 19.127592 ], [ 84.7912095, 19.1279486 ], [ 84.7912061, 19.128206 ], [ 84.7914769, 19.1282092 ], [ 84.7914735, 19.1284667 ], [ 84.7899624, 19.1279877 ], [ 84.790028, 19.1251028 ], [ 84.7899001, 19.1245865 ], [ 84.7893584, 19.1245799 ], [ 84.7891048, 19.1232898 ], [ 84.7885633, 19.1232833 ], [ 84.7884342, 19.122767 ], [ 84.7877699, 19.1218575 ], [ 84.7870974, 19.1214638 ], [ 84.7865765, 19.1199129 ], [ 84.7857814, 19.1186164 ], [ 84.7852501, 19.1178377 ], [ 84.7847154, 19.1173164 ], [ 84.7841842, 19.1165377 ], [ 84.7836529, 19.1157591 ], [ 84.7838128, 19.113959 ], [ 84.783273, 19.1138233 ], [ 84.7831388, 19.1136935 ], [ 84.7824709, 19.1130414 ], [ 84.7816621, 19.1127744 ], [ 84.780579, 19.1127613 ], [ 84.780181, 19.1121134 ], [ 84.7795132, 19.1114614 ], [ 84.7784319, 19.11132 ], [ 84.7781749, 19.1102871 ], [ 84.7776351, 19.1101516 ], [ 84.7773677, 19.1098908 ], [ 84.7765556, 19.1098812 ], [ 84.7757466, 19.1096139 ], [ 84.7722303, 19.109314 ], [ 84.7719561, 19.109568 ], [ 84.768707, 19.1095287 ], [ 84.7654458, 19.1103905 ], [ 84.765439, 19.1109052 ], [ 84.7638109, 19.1111429 ], [ 84.7638039, 19.1116576 ], [ 84.7621742, 19.1120235 ], [ 84.7605393, 19.1127759 ], [ 84.7556588, 19.1132312 ], [ 84.7551137, 19.113482 ], [ 84.7540288, 19.1135978 ], [ 84.754022, 19.1141127 ], [ 84.7529355, 19.1143569 ], [ 84.7527926, 19.1148698 ], [ 84.7518368, 19.1155013 ], [ 84.7510228, 19.1156205 ], [ 84.7510158, 19.1161352 ], [ 84.7496603, 19.1162469 ], [ 84.7495225, 19.1163744 ], [ 84.7493808, 19.1168874 ], [ 84.7474802, 19.1172499 ], [ 84.7461158, 19.1180053 ], [ 84.7453054, 19.1178672 ], [ 84.7449126, 19.1168328 ], [ 84.7442415, 19.1164379 ], [ 84.7431602, 19.1162964 ], [ 84.7430383, 19.1152652 ], [ 84.7418291, 19.1146065 ], [ 84.7415618, 19.1143457 ], [ 84.7407512, 19.1142076 ], [ 84.7407582, 19.1136929 ], [ 84.7402167, 19.1136861 ], [ 84.7404945, 19.1131747 ], [ 84.7399531, 19.1131681 ], [ 84.7399565, 19.1129108 ], [ 84.7418553, 19.1126767 ], [ 84.7418623, 19.1121618 ], [ 84.7388805, 19.1123828 ], [ 84.7384879, 19.1113482 ], [ 84.7379534, 19.1108269 ], [ 84.7380963, 19.1103138 ], [ 84.7370151, 19.1101713 ], [ 84.7367495, 19.1097823 ], [ 84.737291, 19.1097891 ], [ 84.7372946, 19.1095317 ], [ 84.7367529, 19.1095251 ], [ 84.7366416, 19.1077218 ], [ 84.7361143, 19.1066855 ], [ 84.7357138, 19.1062941 ], [ 84.7349034, 19.106156 ], [ 84.7347781, 19.1053822 ], [ 84.7345108, 19.1051214 ], [ 84.734799, 19.1038379 ], [ 84.7348096, 19.1030658 ], [ 84.734411, 19.1025461 ], [ 84.7352265, 19.1022987 ], [ 84.7353721, 19.1015283 ], [ 84.7351082, 19.1010103 ], [ 84.7341734, 19.1000972 ], [ 84.732287, 19.099431 ], [ 84.7326998, 19.0989212 ], [ 84.7325824, 19.0976328 ], [ 84.7320427, 19.0974969 ], [ 84.7317754, 19.0972363 ], [ 84.730696, 19.0969655 ], [ 84.7288151, 19.0959127 ], [ 84.7280047, 19.0957744 ], [ 84.7281026, 19.0953484 ], [ 84.7282823, 19.095263 ], [ 84.7283768, 19.0950944 ], [ 84.7285565, 19.0950089 ], [ 84.728651, 19.0948403 ], [ 84.7288308, 19.0947549 ], [ 84.7288344, 19.0944977 ], [ 84.7285635, 19.0944943 ], [ 84.7282893, 19.0947483 ], [ 84.7280151, 19.0950023 ], [ 84.7274649, 19.0956387 ], [ 84.7266492, 19.0958859 ], [ 84.725278, 19.097156 ], [ 84.7247348, 19.0972784 ], [ 84.7259279, 19.0990951 ], [ 84.7253583, 19.1011473 ], [ 84.7249387, 19.1021718 ], [ 84.7222472, 19.1009798 ], [ 84.7209041, 19.1001909 ], [ 84.7190266, 19.0988806 ], [ 84.7183581, 19.0982293 ], [ 84.7182373, 19.0971981 ], [ 84.7190531, 19.0969507 ], [ 84.7188, 19.0956606 ], [ 84.7190725, 19.0955349 ], [ 84.7204243, 19.0956806 ], [ 84.7201606, 19.0951626 ], [ 84.7207021, 19.0951694 ], [ 84.7208404, 19.0949137 ], [ 84.7208616, 19.0933694 ], [ 84.7207285, 19.0932386 ], [ 84.720189, 19.0931036 ], [ 84.7201993, 19.0923316 ], [ 84.7207374, 19.0925956 ], [ 84.7204842, 19.0913055 ], [ 84.7207533, 19.091437 ], [ 84.7221086, 19.0913255 ], [ 84.7225212, 19.0908158 ], [ 84.7221402, 19.0890093 ], [ 84.7229523, 19.0890193 ], [ 84.7230837, 19.0892785 ], [ 84.7229417, 19.0897914 ], [ 84.7234815, 19.0899263 ], [ 84.7237488, 19.090187 ], [ 84.7242884, 19.0903229 ], [ 84.7247009, 19.0898131 ], [ 84.7248438, 19.0893002 ], [ 84.7256526, 19.0895674 ], [ 84.7256596, 19.0890528 ], [ 84.7264664, 19.0894484 ], [ 84.7289011, 19.0896077 ], [ 84.7293137, 19.089098 ], [ 84.7294566, 19.0885848 ], [ 84.7302704, 19.0884658 ], [ 84.7305376, 19.0887264 ], [ 84.7310791, 19.088733 ], [ 84.7324222, 19.0895219 ], [ 84.733491, 19.0905646 ], [ 84.7351029, 19.0914858 ], [ 84.7351101, 19.0909711 ], [ 84.7353791, 19.0911027 ], [ 84.7361912, 19.0911127 ], [ 84.736998, 19.0915092 ], [ 84.7374106, 19.0909995 ], [ 84.7375535, 19.0904864 ], [ 84.7378225, 19.0906179 ], [ 84.7389071, 19.090503 ], [ 84.7392933, 19.0887935 ], [ 84.7400109, 19.0889721 ], [ 84.7397542, 19.0879392 ], [ 84.7402957, 19.0879458 ], [ 84.740549, 19.0892361 ], [ 84.7408196, 19.0892393 ], [ 84.740965, 19.088469 ], [ 84.7406977, 19.0882081 ], [ 84.7407047, 19.0876935 ], [ 84.7405734, 19.0874344 ], [ 84.7411148, 19.087441 ], [ 84.7408493, 19.0870513 ], [ 84.7403095, 19.0869163 ], [ 84.7400564, 19.0856262 ], [ 84.7405977, 19.0856328 ], [ 84.7408546, 19.0866657 ], [ 84.741927, 19.087451 ], [ 84.7423396, 19.0869413 ], [ 84.7427669, 19.0854021 ], [ 84.7422256, 19.0853955 ], [ 84.7423709, 19.0846249 ], [ 84.7422377, 19.0844941 ], [ 84.7416945, 19.0846166 ], [ 84.7417015, 19.0841019 ], [ 84.7427845, 19.0841152 ], [ 84.7430377, 19.0854053 ], [ 84.743579, 19.0854119 ], [ 84.7439776, 19.0859316 ], [ 84.7443634, 19.0874809 ], [ 84.7449083, 19.0872301 ], [ 84.7451685, 19.0880055 ], [ 84.7459772, 19.088273 ], [ 84.7463689, 19.0893074 ], [ 84.7462269, 19.0898205 ], [ 84.7470356, 19.0900878 ], [ 84.7469033, 19.0898286 ], [ 84.7469451, 19.0867402 ], [ 84.7464142, 19.0859615 ], [ 84.7463806, 19.0852764 ], [ 84.7470984, 19.085455 ], [ 84.7467057, 19.0844206 ], [ 84.7465849, 19.0833894 ], [ 84.7468555, 19.0833928 ], [ 84.7468485, 19.0839075 ], [ 84.7471192, 19.0839109 ], [ 84.7474038, 19.0828846 ], [ 84.7476747, 19.082888 ], [ 84.7483265, 19.0846979 ], [ 84.7485938, 19.0849585 ], [ 84.7489863, 19.0859929 ], [ 84.7500676, 19.0861344 ], [ 84.7508674, 19.0870456 ], [ 84.7514089, 19.0870522 ], [ 84.7514123, 19.0867948 ], [ 84.7509642, 19.0867009 ], [ 84.7504783, 19.0857538 ], [ 84.7504887, 19.0849817 ], [ 84.7502214, 19.0847209 ], [ 84.7502424, 19.0831768 ], [ 84.7497113, 19.0823981 ], [ 84.7495834, 19.0818816 ], [ 84.7490421, 19.0818749 ], [ 84.7490491, 19.0813603 ], [ 84.7498576, 19.0816275 ], [ 84.7498506, 19.0821424 ], [ 84.7506627, 19.0821522 ], [ 84.7508047, 19.0816391 ], [ 84.7505374, 19.0813784 ], [ 84.7504199, 19.08009 ], [ 84.7509614, 19.0800965 ], [ 84.75136, 19.0806162 ], [ 84.751346, 19.0816457 ], [ 84.751992, 19.0839704 ], [ 84.7527954, 19.0846232 ], [ 84.7533335, 19.0848872 ], [ 84.7538748, 19.0848938 ], [ 84.7557595, 19.085689 ], [ 84.7571112, 19.0858347 ], [ 84.7573717, 19.0866102 ], [ 84.7581802, 19.0868774 ], [ 84.7583048, 19.0876512 ], [ 84.7580237, 19.0884198 ], [ 84.757989, 19.0909936 ], [ 84.7582528, 19.0915117 ], [ 84.7582424, 19.0922837 ], [ 84.7585062, 19.0928018 ], [ 84.7584785, 19.0948608 ], [ 84.7583418, 19.0949874 ], [ 84.7577986, 19.0951101 ], [ 84.7579266, 19.0956264 ], [ 84.7573713, 19.0966493 ], [ 84.7574828, 19.0984525 ], [ 84.7580243, 19.0984591 ], [ 84.7582777, 19.0997492 ], [ 84.759352, 19.1004055 ], [ 84.760709, 19.1001645 ], [ 84.7612541, 19.0999137 ], [ 84.7650443, 19.0999598 ], [ 84.7653118, 19.1002204 ], [ 84.7674673, 19.1010189 ], [ 84.7677345, 19.1012796 ], [ 84.7682743, 19.1014153 ], [ 84.7685346, 19.1021906 ], [ 84.7690761, 19.1021972 ], [ 84.7692447, 19.1028831 ], [ 84.7686962, 19.1033911 ], [ 84.7679759, 19.103471 ], [ 84.7679829, 19.1029562 ], [ 84.7669033, 19.1026857 ], [ 84.7667744, 19.1021694 ], [ 84.7662397, 19.1016479 ], [ 84.7653014, 19.1009927 ], [ 84.7628699, 19.1005774 ], [ 84.7628663, 19.1008349 ], [ 84.7634027, 19.101227 ], [ 84.764208, 19.1017515 ], [ 84.7650184, 19.1018906 ], [ 84.7650116, 19.1024053 ], [ 84.7658204, 19.1026725 ], [ 84.7660738, 19.1039626 ], [ 84.7668825, 19.1042299 ], [ 84.7671396, 19.1052628 ], [ 84.7676758, 19.1056549 ], [ 84.7690262, 19.1059288 ], [ 84.7698332, 19.1063251 ], [ 84.7699716, 19.1060694 ], [ 84.76959, 19.1042628 ], [ 84.7690502, 19.1041271 ], [ 84.7689162, 19.1039972 ], [ 84.7688791, 19.1035695 ], [ 84.7693297, 19.1034873 ], [ 84.7694274, 19.1030613 ], [ 84.7696056, 19.1031042 ], [ 84.7701401, 19.1036254 ], [ 84.7706799, 19.1037611 ], [ 84.7703953, 19.1047874 ], [ 84.7712042, 19.1050547 ], [ 84.7709472, 19.1040218 ], [ 84.7714853, 19.1042858 ], [ 84.7714921, 19.103771 ], [ 84.7717629, 19.1037742 ], [ 84.7717561, 19.104289 ], [ 84.7731063, 19.1045627 ], [ 84.7730993, 19.1050775 ], [ 84.7736391, 19.1052123 ], [ 84.7741738, 19.1057336 ], [ 84.7747136, 19.1058693 ], [ 84.7747068, 19.1063841 ], [ 84.7760553, 19.1067861 ], [ 84.77659, 19.1073074 ], [ 84.7771331, 19.1071856 ], [ 84.7771263, 19.1077003 ], [ 84.7776625, 19.1080925 ], [ 84.7787404, 19.1084922 ], [ 84.7790008, 19.1092675 ], [ 84.7798098, 19.1095347 ], [ 84.7800702, 19.11031 ], [ 84.78061, 19.1104449 ], [ 84.7816827, 19.11123 ], [ 84.7822242, 19.1112367 ], [ 84.7830417, 19.1108607 ], [ 84.7834404, 19.1113803 ], [ 84.7835659, 19.1121541 ], [ 84.7841076, 19.1121607 ], [ 84.7850411, 19.1132015 ], [ 84.78517, 19.113718 ], [ 84.7862497, 19.1139883 ], [ 84.7866485, 19.1145081 ], [ 84.7867774, 19.1150244 ], [ 84.7878572, 19.1152949 ], [ 84.7879851, 19.1158112 ], [ 84.7885198, 19.1163325 ], [ 84.7886489, 19.1168488 ], [ 84.7894612, 19.1168587 ], [ 84.7901171, 19.1184111 ], [ 84.7903845, 19.1186717 ], [ 84.7905032, 19.1199601 ], [ 84.7910449, 19.1199668 ], [ 84.7911832, 19.1197109 ], [ 84.7912036, 19.1181667 ], [ 84.7909364, 19.1179061 ], [ 84.7905442, 19.1168717 ], [ 84.7900027, 19.1168651 ], [ 84.7894818, 19.1153143 ], [ 84.7889419, 19.1151786 ], [ 84.7885472, 19.1142735 ], [ 84.7880125, 19.1137523 ], [ 84.7873567, 19.1121998 ], [ 84.7868169, 19.1120641 ], [ 84.7861515, 19.1111556 ], [ 84.7860235, 19.1106392 ], [ 84.785482, 19.1106326 ], [ 84.7853529, 19.1101163 ], [ 84.7850857, 19.1098556 ], [ 84.7849576, 19.1093393 ], [ 84.7844161, 19.1093329 ], [ 84.784287, 19.1088163 ], [ 84.7837559, 19.1080378 ], [ 84.7832212, 19.1075164 ], [ 84.7826933, 19.1064805 ], [ 84.7821588, 19.1059592 ], [ 84.7814977, 19.1047923 ], [ 84.7809579, 19.1046576 ], [ 84.7807045, 19.1033675 ], [ 84.780163, 19.1033608 ], [ 84.7800339, 19.1028445 ], [ 84.7797667, 19.1025839 ], [ 84.7796421, 19.1018101 ], [ 84.7791006, 19.1018037 ], [ 84.7779162, 19.0992151 ], [ 84.7771142, 19.0984332 ], [ 84.7768572, 19.0974004 ], [ 84.7763227, 19.0968791 ], [ 84.7759307, 19.0958447 ], [ 84.7753892, 19.0958381 ], [ 84.7751392, 19.0942907 ], [ 84.7745977, 19.0942841 ], [ 84.7743477, 19.0927366 ], [ 84.7738062, 19.09273 ], [ 84.7736807, 19.0919562 ], [ 84.7731496, 19.0911775 ], [ 84.7724922, 19.0897534 ], [ 84.7719525, 19.0896187 ], [ 84.771827, 19.0888449 ], [ 84.7712959, 19.0880662 ], [ 84.7707716, 19.0867727 ], [ 84.7702371, 19.0862514 ], [ 84.7699767, 19.085476 ], [ 84.7694422, 19.0849547 ], [ 84.7689181, 19.0836612 ], [ 84.7683834, 19.0831399 ], [ 84.7673248, 19.0813251 ], [ 84.7672002, 19.0805514 ], [ 84.7666588, 19.080545 ], [ 84.7661381, 19.078994 ], [ 84.7655968, 19.0789876 ], [ 84.7654713, 19.0782138 ], [ 84.7649402, 19.0774351 ], [ 84.7641418, 19.0763956 ], [ 84.7636074, 19.0758744 ], [ 84.7630833, 19.0745809 ], [ 84.762816, 19.0743202 ], [ 84.7622885, 19.0732841 ], [ 84.761754, 19.0727629 ], [ 84.7610933, 19.071596 ], [ 84.7605537, 19.0714612 ], [ 84.7598971, 19.0699088 ], [ 84.75963, 19.0696482 ], [ 84.7592382, 19.0686138 ], [ 84.7586986, 19.0684779 ], [ 84.758037, 19.0673119 ], [ 84.7575025, 19.0667907 ], [ 84.7567077, 19.0654939 ], [ 84.7560525, 19.0639415 ], [ 84.7555127, 19.0638058 ], [ 84.7551114, 19.0634151 ], [ 84.7547198, 19.0623807 ], [ 84.7541783, 19.0623741 ], [ 84.7539251, 19.061084 ], [ 84.7533855, 19.0609483 ], [ 84.7532515, 19.0608183 ], [ 84.7528633, 19.0595265 ], [ 84.7523218, 19.05952 ], [ 84.7518013, 19.0579691 ], [ 84.75126, 19.0579625 ], [ 84.7511381, 19.0569313 ], [ 84.7506036, 19.05641 ], [ 84.7500763, 19.0553739 ], [ 84.749676, 19.0549825 ], [ 84.7491364, 19.0548476 ], [ 84.7487438, 19.0538132 ], [ 84.7482093, 19.0532917 ], [ 84.7480816, 19.0527754 ], [ 84.7475401, 19.0527688 ], [ 84.7474114, 19.0522524 ], [ 84.7472781, 19.0521216 ], [ 84.7467385, 19.0519869 ], [ 84.7464819, 19.050954 ], [ 84.7456716, 19.0508149 ], [ 84.744448, 19.0511865 ], [ 84.7437614, 19.0519504 ], [ 84.7432201, 19.0519438 ], [ 84.7427996, 19.0529683 ], [ 84.7421131, 19.0537321 ], [ 84.741301, 19.0537223 ], [ 84.7411547, 19.0544926 ], [ 84.7407275, 19.0550491 ], [ 84.7399198, 19.0557646 ], [ 84.7383839, 19.0568605 ], [ 84.7378616, 19.0577986 ], [ 84.737449, 19.0583083 ], [ 84.7366354, 19.0584267 ], [ 84.7360888, 19.0588066 ], [ 84.7362536, 19.0597497 ], [ 84.7355333, 19.0598294 ], [ 84.7355369, 19.059572 ], [ 84.7358075, 19.0595754 ], [ 84.7356822, 19.0588016 ], [ 84.7365048, 19.0580394 ], [ 84.7366475, 19.0575263 ], [ 84.7371887, 19.0575331 ], [ 84.7366614, 19.0564968 ], [ 84.7361201, 19.0564902 ], [ 84.7361271, 19.0559755 ], [ 84.7353169, 19.0558364 ], [ 84.734645, 19.0554425 ], [ 84.7345136, 19.0551834 ], [ 84.7339688, 19.0554342 ], [ 84.7339654, 19.0556915 ], [ 84.734683, 19.055788 ], [ 84.7347703, 19.0562163 ], [ 84.7331481, 19.0560672 ], [ 84.7323309, 19.0564437 ], [ 84.7328932, 19.0549062 ], [ 84.7304624, 19.0544896 ], [ 84.7299264, 19.0540974 ], [ 84.7300788, 19.0528122 ], [ 84.7294167, 19.0517744 ], [ 84.7275256, 19.0514938 ], [ 84.7274002, 19.05072 ], [ 84.7275431, 19.0502069 ], [ 84.7267329, 19.0500678 ], [ 84.7264658, 19.0498069 ], [ 84.7259245, 19.0498003 ], [ 84.7251177, 19.0494047 ], [ 84.7251247, 19.0488899 ], [ 84.7245834, 19.0488833 ], [ 84.7246185, 19.0463097 ], [ 84.7247949, 19.0463995 ], [ 84.7251511, 19.0469593 ], [ 84.7262318, 19.0471018 ], [ 84.7259472, 19.0481279 ], [ 84.7262196, 19.0480022 ], [ 84.7267609, 19.0480088 ], [ 84.7270281, 19.0482694 ], [ 84.7278383, 19.0484085 ], [ 84.728123, 19.0473824 ], [ 84.7289366, 19.0472634 ], [ 84.7293473, 19.0468827 ], [ 84.7298992, 19.0461173 ], [ 84.7297748, 19.0453435 ], [ 84.7301768, 19.0456058 ], [ 84.7304369, 19.0463813 ], [ 84.7313795, 19.0467786 ], [ 84.7325601, 19.0494964 ], [ 84.7330944, 19.0500177 ], [ 84.7333511, 19.0510506 ], [ 84.7332128, 19.0513063 ], [ 84.7337523, 19.0514412 ], [ 84.7344163, 19.0523507 ], [ 84.73494, 19.0536442 ], [ 84.7352073, 19.0539048 ], [ 84.7353362, 19.0544214 ], [ 84.737222, 19.0550876 ], [ 84.7373551, 19.0552184 ], [ 84.7373481, 19.055733 ], [ 84.7380705, 19.0565461 ], [ 84.7388425, 19.0553649 ], [ 84.7393908, 19.0548566 ], [ 84.7400237, 19.054905 ], [ 84.7399374, 19.0544777 ], [ 84.7404804, 19.0543552 ], [ 84.740617, 19.0542286 ], [ 84.740624, 19.0537139 ], [ 84.7415996, 19.0516665 ], [ 84.7421392, 19.0518015 ], [ 84.7435029, 19.0510458 ], [ 84.744493, 19.0510173 ], [ 84.7454961, 19.050596 ], [ 84.7452844, 19.0493949 ], [ 84.7447535, 19.0486161 ], [ 84.7443602, 19.04771 ], [ 84.7438206, 19.047575 ], [ 84.7433001, 19.0460243 ], [ 84.7427588, 19.0460177 ], [ 84.7426301, 19.0455011 ], [ 84.7420992, 19.0447225 ], [ 84.7415649, 19.044201 ], [ 84.7409043, 19.0430341 ], [ 84.7403649, 19.0428994 ], [ 84.7398444, 19.0413484 ], [ 84.7393031, 19.0413418 ], [ 84.7389107, 19.0403074 ], [ 84.7387777, 19.0401766 ], [ 84.7382381, 19.0400417 ], [ 84.7377178, 19.0384909 ], [ 84.7371782, 19.0383551 ], [ 84.7367769, 19.0379646 ], [ 84.7363855, 19.03693 ], [ 84.7358442, 19.0369234 ], [ 84.7354518, 19.035889 ], [ 84.7346503, 19.0351069 ], [ 84.7343866, 19.0345888 ], [ 84.7333182, 19.0335461 ], [ 84.7327909, 19.0325098 ], [ 84.7322566, 19.0319886 ], [ 84.7319965, 19.0312131 ], [ 84.7309245, 19.0304276 ], [ 84.7305331, 19.0293932 ], [ 84.7299918, 19.0293866 ], [ 84.7297387, 19.0280963 ], [ 84.7291991, 19.0279606 ], [ 84.7287981, 19.02757 ], [ 84.7284067, 19.0265356 ], [ 84.7275947, 19.0265255 ], [ 84.7269387, 19.0249731 ], [ 84.726408, 19.0241942 ], [ 84.7253396, 19.0231515 ], [ 84.7249482, 19.0221169 ], [ 84.7244071, 19.0221103 ], [ 84.7242782, 19.021594 ], [ 84.7237474, 19.0208151 ], [ 84.7232133, 19.0202936 ], [ 84.7225532, 19.0191268 ], [ 84.7220136, 19.0189918 ], [ 84.7216214, 19.0179574 ], [ 84.7214934, 19.0174409 ], [ 84.720954, 19.0173052 ], [ 84.7205564, 19.0166571 ], [ 84.7197552, 19.015875 ], [ 84.719095, 19.0147081 ], [ 84.7184233, 19.0143141 ], [ 84.7178962, 19.013278 ], [ 84.7173621, 19.0127565 ], [ 84.7167019, 19.0115896 ], [ 84.7161625, 19.0114547 ], [ 84.7159094, 19.0101646 ], [ 84.71537, 19.0100287 ], [ 84.714976, 19.0091234 ], [ 84.7141748, 19.0083411 ], [ 84.7133806, 19.0070444 ], [ 84.7132528, 19.0065278 ], [ 84.7127117, 19.0065212 ], [ 84.7124553, 19.0054883 ], [ 84.711914, 19.0054817 ], [ 84.7115254, 19.0041899 ], [ 84.7113923, 19.0040589 ], [ 84.7108529, 19.0039242 ], [ 84.7104606, 19.0028896 ], [ 84.7099266, 19.0023681 ], [ 84.7095388, 19.0010763 ], [ 84.708727, 19.0010663 ], [ 84.7086019, 19.0002925 ], [ 84.7083349, 19.0000317 ], [ 84.7082071, 18.9995154 ], [ 84.7076677, 18.9993795 ], [ 84.7072666, 18.9989888 ], [ 84.7068754, 18.9979544 ], [ 84.7063343, 18.9979476 ], [ 84.7060814, 18.9966575 ], [ 84.7052697, 18.9966475 ], [ 84.7047497, 18.9950965 ], [ 84.7042103, 18.9949607 ], [ 84.7038095, 18.99457 ], [ 84.7034182, 18.9935354 ], [ 84.7028771, 18.9935288 ], [ 84.7027518, 18.992755 ], [ 84.7024849, 18.9924942 ], [ 84.7023572, 18.9919779 ], [ 84.7018178, 18.991842 ], [ 84.7014203, 18.9911941 ], [ 84.7012961, 18.9904201 ], [ 84.7007567, 18.9902844 ], [ 84.7003593, 18.9896363 ], [ 84.6995583, 18.9888541 ], [ 84.6990278, 18.9880754 ], [ 84.6989002, 18.9875588 ], [ 84.6983608, 18.987423 ], [ 84.6982268, 18.9872931 ], [ 84.6978391, 18.9860013 ], [ 84.697298, 18.9859945 ], [ 84.6969059, 18.9849601 ], [ 84.6958344, 18.9841744 ], [ 84.6955745, 18.983399 ], [ 84.6945065, 18.9823561 ], [ 84.6937091, 18.9813166 ], [ 84.693370426781826, 18.980717712859196 ], [ 84.6930491, 18.9801495 ], [ 84.6925099, 18.9800145 ], [ 84.6921177, 18.9789799 ], [ 84.6914507, 18.9783277 ], [ 84.6909115, 18.9781928 ], [ 84.6906552, 18.9771599 ], [ 84.6901158, 18.977024 ], [ 84.689322, 18.9757271 ], [ 84.6887828, 18.9755919 ], [ 84.6883908, 18.9745575 ], [ 84.6873228, 18.9735144 ], [ 84.6869318, 18.97248 ], [ 84.6863908, 18.9724732 ], [ 84.6862621, 18.9719569 ], [ 84.6858622, 18.9715653 ], [ 84.6845167, 18.9710336 ], [ 84.6834364, 18.9708919 ], [ 84.6834436, 18.970377 ], [ 84.6829025, 18.9703704 ], [ 84.6829096, 18.9698556 ], [ 84.6807509, 18.9694421 ], [ 84.6791242, 18.9696791 ], [ 84.6788501, 18.9699331 ], [ 84.675604, 18.9698923 ], [ 84.6739756, 18.9702584 ], [ 84.6739684, 18.9707732 ], [ 84.6718025, 18.9708741 ], [ 84.6712652, 18.9706101 ], [ 84.6699144, 18.9704647 ], [ 84.6699216, 18.9699501 ], [ 84.6685744, 18.9695466 ], [ 84.66777, 18.9690215 ], [ 84.6669601, 18.9688832 ], [ 84.6668316, 18.9683667 ], [ 84.6665647, 18.968106 ], [ 84.6664372, 18.9675895 ], [ 84.6658961, 18.9675827 ], [ 84.6656436, 18.9662926 ], [ 84.6651007, 18.9664139 ], [ 84.664433, 18.9657624 ], [ 84.6643124, 18.9647312 ], [ 84.6637715, 18.9647244 ], [ 84.6641911, 18.9637001 ], [ 84.6639458, 18.9618951 ], [ 84.6636789, 18.9616345 ], [ 84.6634298, 18.9600869 ], [ 84.6631665, 18.9595687 ], [ 84.6631773, 18.9587966 ], [ 84.663587, 18.9585443 ], [ 84.6637074, 18.9595755 ], [ 84.6642414, 18.9600971 ], [ 84.6643627, 18.9611283 ], [ 84.6651743, 18.9611385 ], [ 84.6655867, 18.9606288 ], [ 84.6657439, 18.9590864 ], [ 84.6665589, 18.9588393 ], [ 84.6661599, 18.9583194 ], [ 84.66631, 18.9572916 ], [ 84.6665804, 18.957295 ], [ 84.6665697, 18.9580671 ], [ 84.667381, 18.9580775 ], [ 84.6679435, 18.95654 ], [ 84.6684846, 18.9565468 ], [ 84.6687443, 18.9573224 ], [ 84.6692852, 18.9573292 ], [ 84.6695451, 18.9581047 ], [ 84.670086, 18.9581115 ], [ 84.6704842, 18.9586313 ], [ 84.6706091, 18.959405 ], [ 84.6711501, 18.9594118 ], [ 84.6713992, 18.9609594 ], [ 84.6719401, 18.9609662 ], [ 84.6723275, 18.9622582 ], [ 84.6725944, 18.9625188 ], [ 84.6729864, 18.9635534 ], [ 84.6738015, 18.9633062 ], [ 84.6738121, 18.9625341 ], [ 84.6740828, 18.9625375 ], [ 84.6743389, 18.9635704 ], [ 84.6754173, 18.9638414 ], [ 84.67567, 18.9651315 ], [ 84.676478, 18.9653992 ], [ 84.6764708, 18.9659138 ], [ 84.6772771, 18.9663096 ], [ 84.6783483, 18.9670952 ], [ 84.6788894, 18.9671021 ], [ 84.6794268, 18.9673663 ], [ 84.6802277, 18.9681485 ], [ 84.6821158, 18.9685587 ], [ 84.6821087, 18.9690733 ], [ 84.6826445, 18.9694657 ], [ 84.6834542, 18.969605 ], [ 84.683714, 18.9703804 ], [ 84.6847925, 18.9706515 ], [ 84.6845362, 18.9696186 ], [ 84.6839953, 18.9696118 ], [ 84.6838773, 18.9683234 ], [ 84.6837443, 18.9681924 ], [ 84.6832051, 18.9680574 ], [ 84.6826853, 18.9665065 ], [ 84.6821444, 18.9664997 ], [ 84.6821514, 18.9659851 ], [ 84.6816122, 18.9658492 ], [ 84.6814784, 18.9657191 ], [ 84.6813506, 18.9652028 ], [ 84.6808097, 18.965196 ], [ 84.6804177, 18.9641614 ], [ 84.6800178, 18.96377 ], [ 84.6794785, 18.9636348 ], [ 84.6793498, 18.9631185 ], [ 84.6784196, 18.961948 ], [ 84.6778804, 18.9618131 ], [ 84.6776241, 18.9607802 ], [ 84.6770832, 18.9607734 ], [ 84.6768269, 18.9597405 ], [ 84.6762877, 18.9596046 ], [ 84.675353, 18.9586925 ], [ 84.6750896, 18.9581743 ], [ 84.6740219, 18.9571314 ], [ 84.6737586, 18.9566131 ], [ 84.6730919, 18.9559609 ], [ 84.6724205, 18.9555668 ], [ 84.6720242, 18.9549178 ], [ 84.6713529, 18.9545237 ], [ 84.6708225, 18.9537449 ], [ 84.670695, 18.9532283 ], [ 84.6701557, 18.9530924 ], [ 84.6697549, 18.9527018 ], [ 84.6696273, 18.9521854 ], [ 84.6690881, 18.9520493 ], [ 84.6688212, 18.9517887 ], [ 84.668282, 18.9516536 ], [ 84.6681535, 18.9511372 ], [ 84.6678866, 18.9508764 ], [ 84.667781598844854, 18.950451540310308 ], [ 84.667759, 18.9503601 ], [ 84.6672198, 18.950224 ], [ 84.6665521, 18.9495725 ], [ 84.6661557, 18.9489237 ], [ 84.6653461, 18.9487851 ], [ 84.6652175, 18.9482688 ], [ 84.6645508, 18.9476163 ], [ 84.6640134, 18.9473521 ], [ 84.6633457, 18.9467006 ], [ 84.6629495, 18.9460518 ], [ 84.6624103, 18.9459167 ], [ 84.6624175, 18.945402 ], [ 84.6618783, 18.9452661 ], [ 84.6610777, 18.9444837 ], [ 84.6605387, 18.9443487 ], [ 84.6605458, 18.9438339 ], [ 84.6600066, 18.943698 ], [ 84.6589392, 18.9426549 ], [ 84.6584018, 18.9423907 ], [ 84.6562669, 18.9403045 ], [ 84.6557277, 18.9401694 ], [ 84.6555991, 18.939653 ], [ 84.654929, 18.939258 ], [ 84.6514597, 18.9358677 ], [ 84.6505217, 18.9352128 ], [ 84.6498586, 18.934303 ], [ 84.6493213, 18.934039 ], [ 84.6486538, 18.9333873 ], [ 84.6482576, 18.9327384 ], [ 84.6474498, 18.9324706 ], [ 84.6466528, 18.9314309 ], [ 84.6458452, 18.9311633 ], [ 84.6451849, 18.929997 ], [ 84.6447851, 18.9296054 ], [ 84.6442459, 18.9294705 ], [ 84.6441176, 18.9289539 ], [ 84.6429172, 18.9277798 ], [ 84.6422461, 18.9273858 ], [ 84.6421185, 18.9268692 ], [ 84.6415795, 18.9267334 ], [ 84.6410495, 18.9259543 ], [ 84.6397082, 18.925165 ], [ 84.6386409, 18.9241219 ], [ 84.6381019, 18.9239868 ], [ 84.6379734, 18.9234703 ], [ 84.6375737, 18.9230787 ], [ 84.6367696, 18.9225536 ], [ 84.6362306, 18.9224185 ], [ 84.6361021, 18.9219021 ], [ 84.6359692, 18.9217713 ], [ 84.6354302, 18.9216362 ], [ 84.6353017, 18.9211197 ], [ 84.6351688, 18.9209889 ], [ 84.6346298, 18.9208538 ], [ 84.6345013, 18.9203372 ], [ 84.6342346, 18.9200766 ], [ 84.634107, 18.91956 ], [ 84.633568, 18.919424 ], [ 84.6329004, 18.9187725 ], [ 84.6322376, 18.9178626 ], [ 84.6312998, 18.9172076 ], [ 84.6309037, 18.9165585 ], [ 84.629833, 18.9157727 ], [ 84.6284916, 18.9149834 ], [ 84.6278243, 18.9143319 ], [ 84.6274281, 18.9136829 ], [ 84.626891, 18.9134185 ], [ 84.6258239, 18.9123754 ], [ 84.6252849, 18.9122401 ], [ 84.6252922, 18.9117254 ], [ 84.6247513, 18.9117186 ], [ 84.624623, 18.9112021 ], [ 84.6242233, 18.9108105 ], [ 84.6236842, 18.9106753 ], [ 84.6235559, 18.9101588 ], [ 84.6228857, 18.9097636 ], [ 84.6219517, 18.9088513 ], [ 84.6212888, 18.9079415 ], [ 84.6207517, 18.9076772 ], [ 84.6200843, 18.9070256 ], [ 84.6199568, 18.9065092 ], [ 84.6194179, 18.9063731 ], [ 84.6190173, 18.9059823 ], [ 84.6184875, 18.9052032 ], [ 84.6183599, 18.9046869 ], [ 84.6175506, 18.9045474 ], [ 84.6152828, 18.9023308 ], [ 84.6151554, 18.9018143 ], [ 84.6146164, 18.9016782 ], [ 84.613949, 18.9010267 ], [ 84.6138216, 18.9005102 ], [ 84.6132828, 18.9003741 ], [ 84.6128821, 18.8999834 ], [ 84.6127547, 18.8994669 ], [ 84.612214, 18.8994599 ], [ 84.6122212, 18.8989452 ], [ 84.6116824, 18.8988092 ], [ 84.6108895, 18.8975121 ], [ 84.6100802, 18.8973733 ], [ 84.6099517, 18.8968568 ], [ 84.609685, 18.896596 ], [ 84.6095576, 18.8960796 ], [ 84.6090188, 18.8959436 ], [ 84.6086181, 18.8955527 ], [ 84.6082276, 18.8945181 ], [ 84.6076869, 18.8945111 ], [ 84.6075586, 18.8939948 ], [ 84.6074257, 18.8938638 ], [ 84.6068867, 18.8937287 ], [ 84.6067583, 18.8932121 ], [ 84.6066255, 18.8930813 ], [ 84.6060866, 18.8929462 ], [ 84.6055678, 18.8913951 ], [ 84.605029, 18.891259 ], [ 84.6048952, 18.891129 ], [ 84.6045047, 18.8900944 ], [ 84.603964, 18.8900874 ], [ 84.6038356, 18.8895708 ], [ 84.6025021, 18.8882667 ], [ 84.6021154, 18.8869747 ], [ 84.6013042, 18.8869644 ], [ 84.6011796, 18.8861906 ], [ 84.6007837, 18.8855414 ], [ 84.6002448, 18.8854062 ], [ 84.5998534, 18.8843716 ], [ 84.5993201, 18.8838498 ], [ 84.5987941, 18.8828135 ], [ 84.5982607, 18.8822919 ], [ 84.5981369, 18.8815181 ], [ 84.5975962, 18.8815111 ], [ 84.5976036, 18.8809963 ], [ 84.5970628, 18.8809893 ], [ 84.5968145, 18.8794418 ], [ 84.5962756, 18.8793057 ], [ 84.5958751, 18.8789148 ], [ 84.5954849, 18.8778803 ], [ 84.594946, 18.8777442 ], [ 84.5945529, 18.8768385 ], [ 84.5938829, 18.8764433 ], [ 84.5928164, 18.8754 ], [ 84.5925459, 18.8753964 ], [ 84.5922756, 18.875393 ], [ 84.5917387, 18.8751286 ], [ 84.5906572, 18.8751146 ], [ 84.5902567, 18.8747238 ], [ 84.5901367, 18.8736926 ], [ 84.5895962, 18.8736856 ], [ 84.5894679, 18.8731692 ], [ 84.5889972, 18.8728914 ], [ 84.588798, 18.8727739 ], [ 84.5869037, 18.8728786 ], [ 84.5868963, 18.8733932 ], [ 84.5860836, 18.873511 ], [ 84.5847134, 18.8747801 ], [ 84.5841709, 18.8749022 ], [ 84.5840279, 18.8754151 ], [ 84.5834762, 18.8761802 ], [ 84.5829281, 18.8766879 ], [ 84.5826429, 18.8777137 ], [ 84.5825064, 18.8778402 ], [ 84.5808825, 18.8779481 ], [ 84.5808861, 18.8776909 ], [ 84.5822416, 18.877451 ], [ 84.5825231, 18.8766826 ], [ 84.5790122, 18.8763794 ], [ 84.579016, 18.8761222 ], [ 84.582534, 18.8759105 ], [ 84.5826761, 18.8753976 ], [ 84.5832242, 18.8748899 ], [ 84.5833673, 18.874377 ], [ 84.5839079, 18.8743839 ], [ 84.5843314, 18.8731025 ], [ 84.5848795, 18.8725949 ], [ 84.5850224, 18.8720819 ], [ 84.5855631, 18.8720889 ], [ 84.5855705, 18.8715743 ], [ 84.5890831, 18.871748 ], [ 84.5893497, 18.872009 ], [ 84.5901588, 18.8721485 ], [ 84.5901515, 18.8726633 ], [ 84.5906867, 18.8730558 ], [ 84.5912256, 18.8731919 ], [ 84.5909736, 18.8719016 ], [ 84.5904348, 18.8717655 ], [ 84.590301, 18.8716355 ], [ 84.5899088, 18.8707293 ], [ 84.58937, 18.8705939 ], [ 84.5892454, 18.8698202 ], [ 84.5888495, 18.8691711 ], [ 84.5883106, 18.8690358 ], [ 84.5880625, 18.8674883 ], [ 84.5875217, 18.8674813 ], [ 84.5873972, 18.8667073 ], [ 84.5870014, 18.8660583 ], [ 84.5864626, 18.8659232 ], [ 84.585944, 18.864372 ], [ 84.5854034, 18.8643651 ], [ 84.5851553, 18.8628173 ], [ 84.5846109, 18.8630678 ], [ 84.5843626, 18.86152 ], [ 84.5838221, 18.861513 ], [ 84.5836975, 18.8607393 ], [ 84.5831679, 18.8599602 ], [ 84.5826457, 18.8586665 ], [ 84.582379, 18.8584057 ], [ 84.58082, 18.8540096 ], [ 84.5802866, 18.8534879 ], [ 84.5800311, 18.852455 ], [ 84.5797646, 18.8521942 ], [ 84.5792462, 18.8506431 ], [ 84.5789795, 18.8503821 ], [ 84.5785875, 18.8494758 ], [ 84.5780487, 18.8493405 ], [ 84.5779241, 18.8485667 ], [ 84.5776576, 18.8483057 ], [ 84.5775302, 18.8477894 ], [ 84.5769897, 18.8477824 ], [ 84.5768761, 18.8462366 ], [ 84.5763541, 18.8449427 ], [ 84.5760874, 18.8446818 ], [ 84.5755692, 18.8431307 ], [ 84.5756357, 18.8384985 ], [ 84.5751135, 18.8372048 ], [ 84.5740436, 18.8364186 ], [ 84.5733813, 18.8355087 ], [ 84.5727106, 18.8351143 ], [ 84.5724477, 18.834596 ], [ 84.5715151, 18.8336826 ], [ 84.5709765, 18.8335473 ], [ 84.5708483, 18.8330307 ], [ 84.570449, 18.8326391 ], [ 84.5699103, 18.8325038 ], [ 84.569782, 18.8319873 ], [ 84.5689786, 18.831462 ], [ 84.5688514, 18.8309457 ], [ 84.5683108, 18.8309385 ], [ 84.5681827, 18.8304222 ], [ 84.5679162, 18.8301612 ], [ 84.5677888, 18.8296448 ], [ 84.5672502, 18.8295085 ], [ 84.5668499, 18.8291177 ], [ 84.5664598, 18.8280831 ], [ 84.5656508, 18.8279434 ], [ 84.5649876, 18.8270343 ], [ 84.5648604, 18.8265178 ], [ 84.5643199, 18.8265108 ], [ 84.5641918, 18.8259943 ], [ 84.5636624, 18.8252152 ], [ 84.5631292, 18.8246934 ], [ 84.5624707, 18.8235261 ], [ 84.5618003, 18.8231317 ], [ 84.5614102, 18.8220971 ], [ 84.5608697, 18.8220899 ], [ 84.5606144, 18.821057 ], [ 84.5600738, 18.82105 ], [ 84.5600812, 18.8205352 ], [ 84.5595408, 18.8205282 ], [ 84.5592929, 18.8189807 ], [ 84.5587523, 18.8189735 ], [ 84.5575989, 18.8145826 ], [ 84.5573324, 18.8143218 ], [ 84.5570844, 18.8127743 ], [ 84.5568179, 18.8125133 ], [ 84.5568663, 18.809168 ], [ 84.5564762, 18.8081332 ], [ 84.5559359, 18.8081262 ], [ 84.5558151, 18.807095 ], [ 84.5552859, 18.8063158 ], [ 84.5550305, 18.8052829 ], [ 84.5547641, 18.8050221 ], [ 84.553998, 18.8019232 ], [ 84.5540016, 18.801666 ], [ 84.5542793, 18.8011548 ], [ 84.5540462, 18.7985779 ], [ 84.55435, 18.7962653 ], [ 84.5538208, 18.7954861 ], [ 84.5532989, 18.7941924 ], [ 84.5530324, 18.7939316 ], [ 84.5527845, 18.7923838 ], [ 84.5522553, 18.7916048 ], [ 84.5521281, 18.7910882 ], [ 84.5515896, 18.7909522 ], [ 84.5507939, 18.7899121 ], [ 84.5502553, 18.7897768 ], [ 84.5501271, 18.7892602 ], [ 84.5485284, 18.7876949 ], [ 84.5478665, 18.7867849 ], [ 84.5473279, 18.7866496 ], [ 84.5471997, 18.7861332 ], [ 84.5465341, 18.7854804 ], [ 84.5459975, 18.785216 ], [ 84.5453309, 18.7845643 ], [ 84.5449353, 18.7839151 ], [ 84.5443987, 18.7836507 ], [ 84.5437321, 18.7829989 ], [ 84.5433365, 18.7823498 ], [ 84.5422634, 18.7818208 ], [ 84.5411976, 18.7807772 ], [ 84.5405273, 18.7803827 ], [ 84.5398654, 18.7794727 ], [ 84.5393288, 18.7792083 ], [ 84.5386622, 18.7785564 ], [ 84.538535, 18.7780401 ], [ 84.5377244, 18.7780293 ], [ 84.5373337, 18.7769947 ], [ 84.5369346, 18.7766029 ], [ 84.5363961, 18.7764674 ], [ 84.5362679, 18.775951 ], [ 84.5358688, 18.7755592 ], [ 84.5353303, 18.7754239 ], [ 84.5353379, 18.7749091 ], [ 84.5347975, 18.7749021 ], [ 84.5346694, 18.7743856 ], [ 84.5334634, 18.7737258 ], [ 84.5328007, 18.7728165 ], [ 84.5321351, 18.7721639 ], [ 84.5313284, 18.7718959 ], [ 84.5306618, 18.771244 ], [ 84.5305346, 18.7707275 ], [ 84.5294598, 18.7703268 ], [ 84.5286605, 18.7695439 ], [ 84.5275874, 18.7690151 ], [ 84.5262553, 18.7677105 ], [ 84.5257187, 18.767446 ], [ 84.5230434, 18.7656088 ], [ 84.5222443, 18.7648261 ], [ 84.5211712, 18.7642971 ], [ 84.5203721, 18.7635143 ], [ 84.5198355, 18.7632497 ], [ 84.5185036, 18.7619452 ], [ 84.517697, 18.761677 ], [ 84.5166314, 18.7606333 ], [ 84.5158248, 18.7603652 ], [ 84.514892, 18.7594525 ], [ 84.5147649, 18.7589359 ], [ 84.5142228, 18.7590569 ], [ 84.5135526, 18.7586625 ], [ 84.5134256, 18.7581459 ], [ 84.5126152, 18.7581351 ], [ 84.5126227, 18.7576205 ], [ 84.5120843, 18.7574842 ], [ 84.5110189, 18.7564406 ], [ 84.509944, 18.7560405 ], [ 84.5098159, 18.7555241 ], [ 84.5094169, 18.7551321 ], [ 84.508344, 18.7546031 ], [ 84.5070121, 18.7532984 ], [ 84.5064757, 18.7530338 ], [ 84.5054103, 18.7519902 ], [ 84.5043411, 18.7512038 ], [ 84.5038029, 18.7510682 ], [ 84.5036749, 18.7505519 ], [ 84.503542, 18.7504209 ], [ 84.5030057, 18.7501563 ], [ 84.501674, 18.7488517 ], [ 84.5007375, 18.7481962 ], [ 84.5003423, 18.747547 ], [ 84.4998059, 18.7472824 ], [ 84.4984742, 18.7459777 ], [ 84.4975379, 18.7453221 ], [ 84.4971427, 18.7446729 ], [ 84.4963341, 18.7445338 ], [ 84.4962062, 18.7440174 ], [ 84.4955409, 18.7433646 ], [ 84.4950045, 18.7431 ], [ 84.4943383, 18.742448 ], [ 84.4936768, 18.7415379 ], [ 84.4931364, 18.7415306 ], [ 84.4923451, 18.7402331 ], [ 84.4912705, 18.7398331 ], [ 84.4911425, 18.7393166 ], [ 84.4903474, 18.7382763 ], [ 84.489958, 18.7372416 ], [ 84.4894196, 18.7371053 ], [ 84.4887573, 18.736196 ], [ 84.4879584, 18.7354132 ], [ 84.4871862, 18.732829 ], [ 84.4866536, 18.732307 ], [ 84.486264, 18.7312722 ], [ 84.4857258, 18.7311359 ], [ 84.4850597, 18.7304839 ], [ 84.4843982, 18.7295737 ], [ 84.48386, 18.7294381 ], [ 84.483732, 18.7289218 ], [ 84.4828006, 18.728008 ], [ 84.4822623, 18.7278725 ], [ 84.481872, 18.7268377 ], [ 84.4809367, 18.7261811 ], [ 84.4803984, 18.7260456 ], [ 84.4802707, 18.7255292 ], [ 84.4792054, 18.7244854 ], [ 84.4790786, 18.7239689 ], [ 84.4780021, 18.7236969 ], [ 84.4778741, 18.7231805 ], [ 84.4762767, 18.7216147 ], [ 84.4756154, 18.7207045 ], [ 84.4746791, 18.7200488 ], [ 84.4742841, 18.7193996 ], [ 84.4737477, 18.719135 ], [ 84.4730817, 18.7184829 ], [ 84.4726866, 18.7178337 ], [ 84.4721484, 18.7176982 ], [ 84.4721561, 18.7171836 ], [ 84.4716179, 18.7170471 ], [ 84.4712219, 18.7163988 ], [ 84.4704232, 18.7156158 ], [ 84.4702962, 18.7150995 ], [ 84.4697581, 18.714963 ], [ 84.4688258, 18.71405 ], [ 84.4684307, 18.7134007 ], [ 84.46820315196284, 18.713266684394831 ], [ 84.468202209254756, 18.713266129181982 ], [ 84.467863567573588, 18.713066684394832 ], [ 84.4677607, 18.7130061 ], [ 84.4672361, 18.7119694 ], [ 84.4667037, 18.7114476 ], [ 84.4665767, 18.7109311 ], [ 84.4660386, 18.7107946 ], [ 84.4653725, 18.7101426 ], [ 84.464715, 18.7089751 ], [ 84.4641769, 18.7088396 ], [ 84.4640529, 18.7080656 ], [ 84.4637866, 18.7078048 ], [ 84.4636598, 18.7072883 ], [ 84.4631197, 18.7072809 ], [ 84.4629919, 18.7067644 ], [ 84.4624633, 18.7059851 ], [ 84.4619308, 18.7054631 ], [ 84.4618118, 18.7044321 ], [ 84.4612716, 18.7044247 ], [ 84.4610246, 18.702877 ], [ 84.4604865, 18.7027408 ], [ 84.4598282, 18.7015741 ], [ 84.4594294, 18.7011821 ], [ 84.4588912, 18.7010466 ], [ 84.4585011, 18.7000118 ], [ 84.4583684, 18.6998808 ], [ 84.4578303, 18.6997453 ], [ 84.45744, 18.6987103 ], [ 84.4566415, 18.6979275 ], [ 84.4562523, 18.6968927 ], [ 84.4557124, 18.6968853 ], [ 84.4555884, 18.6961116 ], [ 84.4542574, 18.6948065 ], [ 84.4539951, 18.6942883 ], [ 84.4538683, 18.6937718 ], [ 84.4533302, 18.6936353 ], [ 84.4529343, 18.6929868 ], [ 84.4528112, 18.6922131 ], [ 84.4522712, 18.6922057 ], [ 84.4520242, 18.6906582 ], [ 84.4514861, 18.6905217 ], [ 84.4506838, 18.6899959 ], [ 84.4493376, 18.6897204 ], [ 84.4486717, 18.6890683 ], [ 84.4481433, 18.6882889 ], [ 84.4480165, 18.6877725 ], [ 84.4474784, 18.6876361 ], [ 84.4473448, 18.687506 ], [ 84.4469556, 18.6864711 ], [ 84.4464175, 18.6863346 ], [ 84.4460178, 18.6859436 ], [ 84.4456287, 18.6849088 ], [ 84.4450906, 18.6847723 ], [ 84.4449571, 18.6846423 ], [ 84.4448303, 18.6841258 ], [ 84.4442903, 18.6841184 ], [ 84.4441626, 18.6836019 ], [ 84.4436302, 18.6830798 ], [ 84.4435033, 18.6825635 ], [ 84.4440435, 18.6825709 ], [ 84.4439157, 18.6820543 ], [ 84.4433833, 18.6815323 ], [ 84.4429944, 18.6804975 ], [ 84.4424523, 18.6806183 ], [ 84.4423149, 18.6807455 ], [ 84.4424312, 18.6820341 ], [ 84.4420295, 18.6817712 ], [ 84.4416559, 18.6797071 ], [ 84.4411159, 18.6796998 ], [ 84.4411274, 18.6789277 ], [ 84.4403176, 18.6789167 ], [ 84.4404559, 18.6786612 ], [ 84.4402013, 18.6776281 ], [ 84.4392703, 18.6767143 ], [ 84.4384623, 18.676575 ], [ 84.4384701, 18.6760604 ], [ 84.437392, 18.6759166 ], [ 84.4363043, 18.6764165 ], [ 84.4358931, 18.6767973 ], [ 84.4357508, 18.6773101 ], [ 84.4352127, 18.6771736 ], [ 84.4349388, 18.6774272 ], [ 84.4343988, 18.6774199 ], [ 84.4341308, 18.6772879 ], [ 84.4342499, 18.6783191 ], [ 84.4339681, 18.6790874 ], [ 84.4339851, 18.6808007 ], [ 84.434454, 18.6826973 ], [ 84.4340301, 18.6839784 ], [ 84.43376, 18.6839746 ], [ 84.4337717, 18.6832027 ], [ 84.4340416, 18.6832063 ], [ 84.433675, 18.6806276 ], [ 84.4330178, 18.6794599 ], [ 84.4324797, 18.6793244 ], [ 84.4324952, 18.6782951 ], [ 84.4293369, 18.6789355 ], [ 84.4278859, 18.6795187 ], [ 84.4278782, 18.6800334 ], [ 84.4262563, 18.6801394 ], [ 84.4259823, 18.680393 ], [ 84.4246266, 18.680761 ], [ 84.4246304, 18.6805036 ], [ 84.4259902, 18.6798784 ], [ 84.427344, 18.6796397 ], [ 84.4276179, 18.679386 ], [ 84.4292514, 18.6785079 ], [ 84.4303334, 18.6783936 ], [ 84.432503, 18.6777805 ], [ 84.4325107, 18.6772658 ], [ 84.4333248, 18.6770196 ], [ 84.433737, 18.6765104 ], [ 84.4337407, 18.6762532 ], [ 84.4336083, 18.6761222 ], [ 84.4317164, 18.6762254 ], [ 84.4320097, 18.6746852 ], [ 84.4309335, 18.6744131 ], [ 84.4309375, 18.6741556 ], [ 84.4314775, 18.674163 ], [ 84.4313535, 18.6733892 ], [ 84.4310874, 18.6731282 ], [ 84.4304304, 18.6719606 ], [ 84.4298923, 18.6718251 ], [ 84.4293756, 18.6702738 ], [ 84.4285676, 18.6701335 ], [ 84.4284342, 18.6700033 ], [ 84.428049, 18.6687113 ], [ 84.4275111, 18.6685747 ], [ 84.427245, 18.6683137 ], [ 84.4223873, 18.6681188 ], [ 84.4226417, 18.6691519 ], [ 84.4231855, 18.6689018 ], [ 84.4230345, 18.6699294 ], [ 84.4224867, 18.6704365 ], [ 84.422325, 18.672236 ], [ 84.420709, 18.6719564 ], [ 84.4205657, 18.6724692 ], [ 84.4198853, 18.6728455 ], [ 84.4196096, 18.6732282 ], [ 84.4201477, 18.6733637 ], [ 84.4209674, 18.6727321 ], [ 84.4208241, 18.6732449 ], [ 84.4204138, 18.6736247 ], [ 84.4193318, 18.6737391 ], [ 84.4195941, 18.6742573 ], [ 84.4177022, 18.6743596 ], [ 84.4171505, 18.6751241 ], [ 84.4160647, 18.6754957 ], [ 84.416057, 18.6760103 ], [ 84.4144331, 18.6762454 ], [ 84.4144253, 18.6767601 ], [ 84.4122575, 18.6772448 ], [ 84.4121337, 18.6764711 ], [ 84.4118676, 18.6762101 ], [ 84.4118795, 18.675438 ], [ 84.4117487, 18.6751789 ], [ 84.4128307, 18.6750645 ], [ 84.4133686, 18.6752012 ], [ 84.4133766, 18.6746865 ], [ 84.4122985, 18.6745425 ], [ 84.4121651, 18.6744125 ], [ 84.4120462, 18.6733813 ], [ 84.4117761, 18.6733775 ], [ 84.4117684, 18.6738922 ], [ 84.4112284, 18.6738848 ], [ 84.4109817, 18.6723371 ], [ 84.4115276, 18.6719581 ], [ 84.4120696, 18.6718374 ], [ 84.412633, 18.670301 ], [ 84.413173, 18.6703084 ], [ 84.4135695, 18.6708287 ], [ 84.4136973, 18.6713452 ], [ 84.4139653, 18.6714771 ], [ 84.4145053, 18.6714845 ], [ 84.4147733, 18.6716174 ], [ 84.4149116, 18.6713618 ], [ 84.4149196, 18.6708472 ], [ 84.4154673, 18.6703401 ], [ 84.4156223, 18.6690553 ], [ 84.4161622, 18.6690627 ], [ 84.4168523, 18.6680428 ], [ 84.41686, 18.6675282 ], [ 84.4174117, 18.6667635 ], [ 84.4179594, 18.6662564 ], [ 84.4181027, 18.6657436 ], [ 84.4186485, 18.6653645 ], [ 84.4200042, 18.6649976 ], [ 84.420012, 18.664483 ], [ 84.4202839, 18.6643575 ], [ 84.4227273, 18.6634908 ], [ 84.4227351, 18.6629761 ], [ 84.4232751, 18.6629835 ], [ 84.4232866, 18.6622116 ], [ 84.4238247, 18.6623471 ], [ 84.4246268, 18.6628729 ], [ 84.4248967, 18.6628767 ], [ 84.4265262, 18.662256 ], [ 84.426534, 18.6617414 ], [ 84.4287054, 18.660999 ], [ 84.4293682, 18.6617801 ], [ 84.4296304, 18.6622985 ], [ 84.4294727, 18.6638406 ], [ 84.4316306, 18.6639984 ], [ 84.4321724, 18.6638776 ], [ 84.4326891, 18.6654289 ], [ 84.4318791, 18.6654178 ], [ 84.4318868, 18.6649031 ], [ 84.4316151, 18.6650277 ], [ 84.429729, 18.6647446 ], [ 84.429461, 18.6646127 ], [ 84.429314, 18.6653826 ], [ 84.4295801, 18.6656436 ], [ 84.4298305, 18.666934 ], [ 84.4300929, 18.6674524 ], [ 84.4301894, 18.6700275 ], [ 84.4307294, 18.6700349 ], [ 84.4309878, 18.6708105 ], [ 84.4315221, 18.6712035 ], [ 84.432602, 18.6712182 ], [ 84.4334079, 18.6714866 ], [ 84.4344879, 18.6715013 ], [ 84.4358339, 18.6717771 ], [ 84.4369023, 18.6725639 ], [ 84.4374423, 18.6725713 ], [ 84.4379785, 18.672836 ], [ 84.4390467, 18.6736227 ], [ 84.4395888, 18.6735019 ], [ 84.439581, 18.6740165 ], [ 84.4403871, 18.6742849 ], [ 84.4405139, 18.6748013 ], [ 84.4410422, 18.6755807 ], [ 84.4418367, 18.676621 ], [ 84.4426353, 18.677404 ], [ 84.4436767, 18.679992 ], [ 84.4444672, 18.6812896 ], [ 84.4449995, 18.6818117 ], [ 84.4455279, 18.6825911 ], [ 84.4456519, 18.6833649 ], [ 84.4461919, 18.6833722 ], [ 84.4463187, 18.6838888 ], [ 84.4465848, 18.6841498 ], [ 84.4467126, 18.6846661 ], [ 84.4472527, 18.6846735 ], [ 84.4476379, 18.6859657 ], [ 84.4481703, 18.6864877 ], [ 84.4485565, 18.6877799 ], [ 84.4490964, 18.6877871 ], [ 84.4493434, 18.6893348 ], [ 84.4498834, 18.6893422 ], [ 84.4502996, 18.6885756 ], [ 84.4503034, 18.6883184 ], [ 84.4497749, 18.6875389 ], [ 84.4495204, 18.686506 ], [ 84.4489879, 18.685984 ], [ 84.4484672, 18.6846901 ], [ 84.4482011, 18.6844291 ], [ 84.4475438, 18.6832615 ], [ 84.4470057, 18.683126 ], [ 84.4466196, 18.6818338 ], [ 84.4458212, 18.6810507 ], [ 84.4452928, 18.6802715 ], [ 84.4447721, 18.6789774 ], [ 84.4434569, 18.6766431 ], [ 84.4432023, 18.6756102 ], [ 84.4429362, 18.6753492 ], [ 84.4428209, 18.6740606 ], [ 84.4422809, 18.6740534 ], [ 84.441644, 18.6714709 ], [ 84.4411195, 18.6704342 ], [ 84.4406183, 18.6678536 ], [ 84.4409229, 18.6655414 ], [ 84.4412006, 18.6650303 ], [ 84.4410932, 18.6632273 ], [ 84.4405532, 18.6632199 ], [ 84.4405763, 18.661676 ], [ 84.4400363, 18.6616686 ], [ 84.4397857, 18.6603783 ], [ 84.4392478, 18.6602418 ], [ 84.4388481, 18.6598508 ], [ 84.4383198, 18.6590714 ], [ 84.438193, 18.6585548 ], [ 84.4373831, 18.6585439 ], [ 84.4372554, 18.6580273 ], [ 84.4363246, 18.6571133 ], [ 84.4356549, 18.6567187 ], [ 84.434994, 18.6558083 ], [ 84.4344561, 18.6556728 ], [ 84.4344639, 18.6551581 ], [ 84.4339258, 18.6550217 ], [ 84.4333975, 18.6542422 ], [ 84.4321919, 18.6535828 ], [ 84.4317971, 18.6529334 ], [ 84.4309949, 18.6524078 ], [ 84.4304571, 18.6522721 ], [ 84.4303293, 18.6517557 ], [ 84.4299307, 18.6513638 ], [ 84.4293926, 18.6512281 ], [ 84.4291382, 18.6501952 ], [ 84.4285945, 18.650445 ], [ 84.4286022, 18.6499304 ], [ 84.4280643, 18.6497939 ], [ 84.4275321, 18.6492719 ], [ 84.4269942, 18.6491362 ], [ 84.4268664, 18.6486197 ], [ 84.4257984, 18.647833 ], [ 84.4256716, 18.6473165 ], [ 84.4251337, 18.6471801 ], [ 84.4239358, 18.6460058 ], [ 84.4238092, 18.6454893 ], [ 84.4230012, 18.6453492 ], [ 84.4223357, 18.644697 ], [ 84.4222089, 18.6441804 ], [ 84.421135, 18.6437792 ], [ 84.4200707, 18.6427351 ], [ 84.4194013, 18.6423403 ], [ 84.4187406, 18.6414301 ], [ 84.4176667, 18.6410296 ], [ 84.4175389, 18.6405131 ], [ 84.4170069, 18.6399911 ], [ 84.4168802, 18.6394745 ], [ 84.4163384, 18.6395953 ], [ 84.4159388, 18.6392043 ], [ 84.4152781, 18.6382938 ], [ 84.4144722, 18.6380255 ], [ 84.4140766, 18.637377 ], [ 84.4134121, 18.636724 ], [ 84.4126041, 18.6365847 ], [ 84.4124765, 18.6360682 ], [ 84.4115459, 18.6351542 ], [ 84.4108765, 18.6347592 ], [ 84.4102159, 18.6338489 ], [ 84.40941, 18.6335804 ], [ 84.4087444, 18.6329283 ], [ 84.4083497, 18.6322789 ], [ 84.407544, 18.6320105 ], [ 84.4067498, 18.6309701 ], [ 84.4062119, 18.6308344 ], [ 84.4062197, 18.6303197 ], [ 84.4056818, 18.6301831 ], [ 84.4051537, 18.6294037 ], [ 84.40408, 18.6290034 ], [ 84.4039525, 18.6284868 ], [ 84.4030178, 18.62783 ], [ 84.4022199, 18.6270468 ], [ 84.401682, 18.6269111 ], [ 84.4016899, 18.6263967 ], [ 84.401152, 18.62626 ], [ 84.4000882, 18.6252158 ], [ 84.3995503, 18.6250801 ], [ 84.3994227, 18.6245636 ], [ 84.3984921, 18.6236496 ], [ 84.3975569, 18.6229935 ], [ 84.3974302, 18.6224772 ], [ 84.3968924, 18.6223405 ], [ 84.3966264, 18.6220795 ], [ 84.3960885, 18.6219438 ], [ 84.395961, 18.6214273 ], [ 84.3958285, 18.6212963 ], [ 84.3952906, 18.6211606 ], [ 84.3952983, 18.620646 ], [ 84.3947606, 18.6205093 ], [ 84.3939666, 18.6194689 ], [ 84.3928948, 18.6189393 ], [ 84.3921008, 18.6178988 ], [ 84.3912932, 18.6177594 ], [ 84.3911657, 18.6172428 ], [ 84.3902352, 18.6163288 ], [ 84.3892998, 18.6156728 ], [ 84.3886395, 18.6147624 ], [ 84.3877041, 18.6141064 ], [ 84.3873097, 18.613457 ], [ 84.3867739, 18.6131922 ], [ 84.3858425, 18.6122789 ], [ 84.3857158, 18.6117624 ], [ 84.3851781, 18.6116259 ], [ 84.3842467, 18.6107125 ], [ 84.3841203, 18.6101962 ], [ 84.3835824, 18.6100595 ], [ 84.3815875, 18.6081018 ], [ 84.3814609, 18.6075853 ], [ 84.380923, 18.6074488 ], [ 84.3802577, 18.6067966 ], [ 84.3798633, 18.6061472 ], [ 84.3793275, 18.6058824 ], [ 84.3786622, 18.6052302 ], [ 84.3782677, 18.6045808 ], [ 84.3775985, 18.6041858 ], [ 84.3773365, 18.6036673 ], [ 84.3766722, 18.6030143 ], [ 84.3761345, 18.6028786 ], [ 84.3761422, 18.602364 ], [ 84.3756045, 18.6022273 ], [ 84.3750767, 18.6014479 ], [ 84.3745389, 18.601312 ], [ 84.3742847, 18.6002791 ], [ 84.373747, 18.6001425 ], [ 84.3730818, 18.5994902 ], [ 84.3726934, 18.5984553 ], [ 84.3718858, 18.5983149 ], [ 84.3712245, 18.5974054 ], [ 84.3710978, 18.5968889 ], [ 84.3705601, 18.5967522 ], [ 84.3697663, 18.5957116 ], [ 84.3692286, 18.5955759 ], [ 84.3688393, 18.5945409 ], [ 84.3680415, 18.5937577 ], [ 84.3675383, 18.592999 ], [ 84.3671173, 18.5924579 ], [ 84.3669583, 18.5921872 ], [ 84.366727, 18.5918258 ], [ 84.3663175, 18.5913693 ], [ 84.3657918, 18.5908953 ], [ 84.3653749, 18.5900554 ], [ 84.3650041, 18.5894683 ], [ 84.3648707, 18.5893381 ], [ 84.3644862, 18.5880459 ], [ 84.3639655, 18.5875018 ], [ 84.3632912, 18.5867424 ], [ 84.3627595, 18.5862202 ], [ 84.3621321, 18.5849851 ], [ 84.3619738, 18.5846651 ], [ 84.3614454, 18.583876 ], [ 84.3610296, 18.5832358 ], [ 84.3605796, 18.5822896 ], [ 84.360264, 18.5818101 ], [ 84.3598746, 18.5807751 ], [ 84.3596087, 18.5805141 ], [ 84.3592787, 18.5793165 ], [ 84.3592209, 18.5786953 ], [ 84.359181, 18.5780476 ], [ 84.3591873, 18.5771646 ], [ 84.3588694, 18.5754793 ], [ 84.3588244, 18.5724666 ], [ 84.3585585, 18.5708848 ], [ 84.3581589, 18.5685084 ], [ 84.357891, 18.5679758 ], [ 84.3575599, 18.5677233 ], [ 84.3571726, 18.567158 ], [ 84.3566921, 18.566084 ], [ 84.3566996, 18.565566 ], [ 84.3570791, 18.565231 ], [ 84.3573911, 18.5654092 ], [ 84.3575347, 18.5653564 ], [ 84.3575096, 18.5651854 ], [ 84.3562107, 18.5646379 ], [ 84.355679, 18.5641157 ], [ 84.3551413, 18.56398 ], [ 84.3551492, 18.5634653 ], [ 84.3546078, 18.5635859 ], [ 84.3535405, 18.5627989 ], [ 84.3508444, 18.5626328 ], [ 84.3508523, 18.5621181 ], [ 84.3481564, 18.5619513 ], [ 84.3476148, 18.5620726 ], [ 84.3476068, 18.5625872 ], [ 84.3470712, 18.5623225 ], [ 84.3464919, 18.5648879 ], [ 84.3459502, 18.5650085 ], [ 84.3458128, 18.5651357 ], [ 84.3458235, 18.5658234 ], [ 84.3445498, 18.5656047 ], [ 84.3449402, 18.5648499 ], [ 84.3451468, 18.5646116 ], [ 84.3455669, 18.563588 ], [ 84.3461185, 18.5628237 ], [ 84.3462698, 18.5617965 ], [ 84.3433874, 18.562182 ], [ 84.3423333, 18.5632852 ], [ 84.3420557, 18.5637959 ], [ 84.3419013, 18.5650805 ], [ 84.3416316, 18.5650767 ], [ 84.3416554, 18.563533 ], [ 84.3419253, 18.5635368 ], [ 84.3420676, 18.563024 ], [ 84.3427526, 18.5623897 ], [ 84.3433022, 18.5617547 ], [ 84.3441115, 18.561766 ], [ 84.3441194, 18.5612514 ], [ 84.3449289, 18.5612627 ], [ 84.3449329, 18.5610055 ], [ 84.3441254, 18.5608651 ], [ 84.3434564, 18.5604701 ], [ 84.3433299, 18.5599535 ], [ 84.3427904, 18.5599458 ], [ 84.3427985, 18.5594313 ], [ 84.3422608, 18.5592945 ], [ 84.3416078, 18.5578704 ], [ 84.3410761, 18.557348 ], [ 84.3409536, 18.5565742 ], [ 84.3404142, 18.5565666 ], [ 84.3397951, 18.5529549 ], [ 84.3400688, 18.5527014 ], [ 84.3402201, 18.551674 ], [ 84.3396826, 18.5515374 ], [ 84.3380799, 18.5504852 ], [ 84.3375403, 18.5504776 ], [ 84.3367231, 18.5509808 ], [ 84.3360381, 18.551615 ], [ 84.3357524, 18.5526404 ], [ 84.3354787, 18.552894 ], [ 84.3353362, 18.5534066 ], [ 84.3348999, 18.5540603 ], [ 84.3346872, 18.5542389 ], [ 84.3343755, 18.5544224 ], [ 84.3342432, 18.5542915 ], [ 84.3334337, 18.5542801 ], [ 84.332093, 18.5537464 ], [ 84.3315653, 18.5529668 ], [ 84.330756, 18.5529554 ], [ 84.3294192, 18.5521645 ], [ 84.32902, 18.5517732 ], [ 84.3288936, 18.5512567 ], [ 84.3275467, 18.5511083 ], [ 84.3267293, 18.5516116 ], [ 84.3263182, 18.5519923 ], [ 84.3261678, 18.5530195 ], [ 84.3240117, 18.5528598 ], [ 84.3234761, 18.5525948 ], [ 84.3191557, 18.552791 ], [ 84.3178108, 18.5525145 ], [ 84.3172653, 18.5528932 ], [ 84.3174118, 18.5521233 ], [ 84.3182493, 18.5503336 ], [ 84.31748, 18.547749 ], [ 84.3172143, 18.5474878 ], [ 84.3170881, 18.5469713 ], [ 84.3162806, 18.5468307 ], [ 84.3160149, 18.5465697 ], [ 84.3152077, 18.5464298 ], [ 84.3153502, 18.5459173 ], [ 84.3144126, 18.5455173 ], [ 84.313873, 18.5455098 ], [ 84.3132081, 18.5448573 ], [ 84.3130818, 18.5443408 ], [ 84.3136212, 18.5443484 ], [ 84.3136254, 18.5440911 ], [ 84.3128182, 18.5439505 ], [ 84.3125524, 18.5436893 ], [ 84.3112117, 18.5431556 ], [ 84.3105468, 18.5425032 ], [ 84.3104405, 18.5407001 ], [ 84.3109801, 18.5407078 ], [ 84.3109883, 18.5401932 ], [ 84.3085585, 18.5402868 ], [ 84.308027, 18.5397645 ], [ 84.3072258, 18.5392384 ], [ 84.3058811, 18.5389619 ], [ 84.3050799, 18.5384357 ], [ 84.3044152, 18.5377833 ], [ 84.3042969, 18.5367521 ], [ 84.3037594, 18.5366152 ], [ 84.3036261, 18.5364852 ], [ 84.3034997, 18.5359687 ], [ 84.3026906, 18.5359571 ], [ 84.3025632, 18.5354406 ], [ 84.3022977, 18.5351794 ], [ 84.3021754, 18.5344056 ], [ 84.3008286, 18.5342573 ], [ 84.3002871, 18.5343786 ], [ 84.3005691, 18.5336105 ], [ 84.2997558, 18.5338562 ], [ 84.2996284, 18.5333397 ], [ 84.2989647, 18.5326865 ], [ 84.2984273, 18.5325506 ], [ 84.2984353, 18.532036 ], [ 84.2981656, 18.532032 ], [ 84.2981574, 18.5325466 ], [ 84.297618, 18.5325389 ], [ 84.2973725, 18.5309914 ], [ 84.2962956, 18.5308468 ], [ 84.2957643, 18.5303244 ], [ 84.2949631, 18.5297982 ], [ 84.294158, 18.5295294 ], [ 84.2938925, 18.5292682 ], [ 84.2928195, 18.5288672 ], [ 84.2928318, 18.5280953 ], [ 84.2936409, 18.5281068 ], [ 84.2936328, 18.5286215 ], [ 84.2944358, 18.5290186 ], [ 84.2949754, 18.5290263 ], [ 84.2965715, 18.5304652 ], [ 84.2968533, 18.5296971 ], [ 84.2971211, 18.5298292 ], [ 84.2976606, 18.5298369 ], [ 84.2979323, 18.5297126 ], [ 84.2981858, 18.5307457 ], [ 84.2987254, 18.5307532 ], [ 84.2989749, 18.5320437 ], [ 84.299774, 18.532698 ], [ 84.3013863, 18.5331076 ], [ 84.3013782, 18.5336222 ], [ 84.3021875, 18.5336338 ], [ 84.3025834, 18.5341541 ], [ 84.3027067, 18.5349278 ], [ 84.3032502, 18.5346784 ], [ 84.3044394, 18.5362395 ], [ 84.3045666, 18.536756 ], [ 84.3051062, 18.5367636 ], [ 84.3056254, 18.5380579 ], [ 84.3075037, 18.5387277 ], [ 84.3077694, 18.5389887 ], [ 84.3093899, 18.5388836 ], [ 84.3091281, 18.5383652 ], [ 84.3102092, 18.5382514 ], [ 84.3112841, 18.5385241 ], [ 84.3115498, 18.5387853 ], [ 84.3120894, 18.5387929 ], [ 84.313426, 18.5395841 ], [ 84.3142232, 18.5403675 ], [ 84.315564, 18.5409014 ], [ 84.3158297, 18.5411624 ], [ 84.3163672, 18.5412992 ], [ 84.3166248, 18.5420749 ], [ 84.3176978, 18.5424758 ], [ 84.3184991, 18.5430019 ], [ 84.3190406, 18.5428813 ], [ 84.3197025, 18.5436629 ], [ 84.3198217, 18.544694 ], [ 84.3203613, 18.5447016 ], [ 84.3203532, 18.5452163 ], [ 84.3208907, 18.5453521 ], [ 84.3214222, 18.5458743 ], [ 84.3222336, 18.5457577 ], [ 84.3222215, 18.5465296 ], [ 84.3246475, 18.5466922 ], [ 84.3278765, 18.5472527 ], [ 84.3281423, 18.5475137 ], [ 84.3324606, 18.5474466 ], [ 84.3324687, 18.546932 ], [ 84.3330102, 18.5468107 ], [ 84.3348886, 18.547481 ], [ 84.3352848, 18.5480014 ], [ 84.3354122, 18.5485179 ], [ 84.3364872, 18.5487904 ], [ 84.336745, 18.5495661 ], [ 84.3397025, 18.5502508 ], [ 84.3404999, 18.551034 ], [ 84.3410374, 18.5511707 ], [ 84.3414258, 18.5522057 ], [ 84.3414018, 18.5537496 ], [ 84.3411241, 18.5542605 ], [ 84.3412354, 18.5558061 ], [ 84.3420447, 18.5558175 ], [ 84.3420368, 18.5563321 ], [ 84.3425764, 18.5563397 ], [ 84.3427028, 18.5568562 ], [ 84.3429688, 18.5571174 ], [ 84.3430962, 18.5576339 ], [ 84.3439015, 18.5579027 ], [ 84.3438935, 18.5584171 ], [ 84.3444271, 18.5588103 ], [ 84.345768, 18.559344 ], [ 84.3484679, 18.5592537 ], [ 84.3484758, 18.558739 ], [ 84.3487476, 18.5586137 ], [ 84.3498268, 18.5586288 ], [ 84.3500927, 18.55889 ], [ 84.3506303, 18.5590267 ], [ 84.3507567, 18.5595432 ], [ 84.350483, 18.5597967 ], [ 84.3503326, 18.5608241 ], [ 84.3506004, 18.560956 ], [ 84.3514099, 18.5609675 ], [ 84.3516836, 18.5607139 ], [ 84.3533084, 18.5603512 ], [ 84.3534269, 18.5613822 ], [ 84.3532885, 18.5616377 ], [ 84.3543537, 18.562553 ], [ 84.3567661, 18.5636162 ], [ 84.3570319, 18.5638774 ], [ 84.3575696, 18.564014 ], [ 84.3575815, 18.5632421 ], [ 84.3570419, 18.5632346 ], [ 84.3569223, 18.5622034 ], [ 84.3563946, 18.5614239 ], [ 84.35628, 18.5601353 ], [ 84.3557404, 18.5601278 ], [ 84.355625, 18.5588394 ], [ 84.355359, 18.5585784 ], [ 84.3553908, 18.5565198 ], [ 84.3547306, 18.5556094 ], [ 84.354195, 18.5553444 ], [ 84.3535301, 18.5546921 ], [ 84.3534036, 18.5541756 ], [ 84.3528659, 18.554039 ], [ 84.3515369, 18.5527335 ], [ 84.3504658, 18.5522038 ], [ 84.3496682, 18.5514204 ], [ 84.348861, 18.5512809 ], [ 84.3487336, 18.5507643 ], [ 84.348202, 18.5502421 ], [ 84.3480755, 18.5497256 ], [ 84.3470003, 18.5494533 ], [ 84.3468729, 18.5489367 ], [ 84.346209, 18.5482835 ], [ 84.3456734, 18.5480186 ], [ 84.3446102, 18.5469741 ], [ 84.3440727, 18.5468384 ], [ 84.3440807, 18.5463238 ], [ 84.3435431, 18.546187 ], [ 84.3427457, 18.5454037 ], [ 84.341811, 18.5447475 ], [ 84.3408813, 18.5438333 ], [ 84.3403458, 18.5435684 ], [ 84.3392827, 18.5425239 ], [ 84.3382116, 18.5419942 ], [ 84.3371485, 18.5409496 ], [ 84.3366089, 18.540942 ], [ 84.3362137, 18.5402936 ], [ 84.3355499, 18.5396402 ], [ 84.3347446, 18.5393716 ], [ 84.3336815, 18.538327 ], [ 84.3326085, 18.5379263 ], [ 84.3324812, 18.5374098 ], [ 84.3318172, 18.5367566 ], [ 84.3310121, 18.5364879 ], [ 84.3302147, 18.5357044 ], [ 84.3288781, 18.5349135 ], [ 84.3278149, 18.5338691 ], [ 84.3268805, 18.5332129 ], [ 84.3264863, 18.5325635 ], [ 84.3254154, 18.5320335 ], [ 84.3248839, 18.5315113 ], [ 84.3243464, 18.5313754 ], [ 84.3243543, 18.5308608 ], [ 84.323817, 18.5307241 ], [ 84.3230198, 18.5299407 ], [ 84.3224842, 18.5296757 ], [ 84.3214214, 18.5286311 ], [ 84.3208839, 18.5284952 ], [ 84.3208919, 18.5279808 ], [ 84.3203543, 18.5278439 ], [ 84.3195573, 18.5270605 ], [ 84.3187562, 18.5265345 ], [ 84.3180873, 18.5261393 ], [ 84.3176932, 18.5254899 ], [ 84.3168921, 18.5249638 ], [ 84.3162234, 18.5245688 ], [ 84.3160969, 18.5240522 ], [ 84.3155594, 18.5239154 ], [ 84.3147584, 18.5233894 ], [ 84.314227, 18.522867 ], [ 84.3135581, 18.522472 ], [ 84.3134318, 18.5219555 ], [ 84.3120892, 18.5215499 ], [ 84.3112922, 18.5207665 ], [ 84.3102192, 18.5203656 ], [ 84.310092, 18.519849 ], [ 84.3094283, 18.5191959 ], [ 84.3086231, 18.5189269 ], [ 84.3075604, 18.5178823 ], [ 84.3067552, 18.5176136 ], [ 84.305825, 18.5166999 ], [ 84.3056985, 18.5161834 ], [ 84.3048915, 18.5160428 ], [ 84.3038288, 18.5149982 ], [ 84.3030236, 18.5147294 ], [ 84.3024963, 18.5139498 ], [ 84.3016893, 18.5138101 ], [ 84.3016972, 18.5132955 ], [ 84.3011599, 18.5131586 ], [ 84.3004952, 18.5125062 ], [ 84.3003689, 18.5119897 ], [ 84.2992922, 18.5118451 ], [ 84.2984991, 18.5108045 ], [ 84.2974285, 18.5102743 ], [ 84.2968972, 18.5097521 ], [ 84.2963597, 18.5096162 ], [ 84.2963678, 18.5091016 ], [ 84.2958305, 18.5089647 ], [ 84.2950335, 18.5081813 ], [ 84.2942325, 18.5076551 ], [ 84.2935638, 18.5072599 ], [ 84.2934375, 18.5067434 ], [ 84.2929002, 18.5066066 ], [ 84.2920992, 18.5060804 ], [ 84.2915679, 18.5055582 ], [ 84.2908993, 18.505163 ], [ 84.290773, 18.5046465 ], [ 84.2902357, 18.5045096 ], [ 84.2894347, 18.5039834 ], [ 84.2890357, 18.503592 ], [ 84.2889095, 18.5030755 ], [ 84.2883721, 18.5029387 ], [ 84.2874379, 18.5022824 ], [ 84.2873117, 18.5017659 ], [ 84.2867743, 18.5016291 ], [ 84.2859773, 18.5008455 ], [ 84.2858441, 18.5007154 ], [ 84.2854462, 18.5003233 ], [ 84.2846453, 18.4997969 ], [ 84.2839766, 18.4994019 ], [ 84.2838503, 18.4988854 ], [ 84.283313, 18.4987485 ], [ 84.2827817, 18.4982261 ], [ 84.2822444, 18.4980902 ], [ 84.2821172, 18.4975737 ], [ 84.2805154, 18.4965212 ], [ 84.2803892, 18.4960046 ], [ 84.2798518, 18.4958678 ], [ 84.2793207, 18.4953454 ], [ 84.2787834, 18.4952095 ], [ 84.2786562, 18.494693 ], [ 84.2770544, 18.4936404 ], [ 84.2766606, 18.492991 ], [ 84.2758598, 18.4924647 ], [ 84.2753225, 18.4923288 ], [ 84.2751953, 18.4918122 ], [ 84.2743943, 18.491286 ], [ 84.2740006, 18.4906365 ], [ 84.2726644, 18.4898451 ], [ 84.271602, 18.4888005 ], [ 84.2709335, 18.4884053 ], [ 84.2705396, 18.4877557 ], [ 84.2697388, 18.4872295 ], [ 84.2692017, 18.4870935 ], [ 84.2690745, 18.4865769 ], [ 84.2686766, 18.4861847 ], [ 84.2676041, 18.4857837 ], [ 84.2674769, 18.4852672 ], [ 84.267079, 18.4848748 ], [ 84.2662782, 18.4843486 ], [ 84.2657409, 18.4842125 ], [ 84.2656139, 18.483696 ], [ 84.2646848, 18.4827814 ], [ 84.2641495, 18.4825164 ], [ 84.2630873, 18.4814717 ], [ 84.2625521, 18.4812065 ], [ 84.2612244, 18.4799005 ], [ 84.2605559, 18.4795053 ], [ 84.2598965, 18.4785945 ], [ 84.2593614, 18.4783295 ], [ 84.2582992, 18.4772847 ], [ 84.257764, 18.4770196 ], [ 84.2570996, 18.4763671 ], [ 84.256748235071143, 18.475881828479356 ], [ 84.2564402, 18.4754564 ], [ 84.2556355, 18.4751872 ], [ 84.254843, 18.4741464 ], [ 84.2540361, 18.4740065 ], [ 84.2539089, 18.47349 ], [ 84.2532497, 18.4725792 ], [ 84.2524449, 18.4723103 ], [ 84.2516525, 18.4712692 ], [ 84.2505801, 18.4708682 ], [ 84.2504531, 18.4703517 ], [ 84.24952, 18.4696943 ], [ 84.2489828, 18.4695582 ], [ 84.2488556, 18.4690417 ], [ 84.2483247, 18.4685193 ], [ 84.2481985, 18.4680028 ], [ 84.2471263, 18.4676006 ], [ 84.2465994, 18.4668209 ], [ 84.245527, 18.4664197 ], [ 84.2454, 18.4659032 ], [ 84.2447366, 18.4652498 ], [ 84.2441994, 18.4651137 ], [ 84.2442076, 18.4645991 ], [ 84.2436704, 18.4644622 ], [ 84.2424752, 18.4632872 ], [ 84.2423491, 18.4627707 ], [ 84.2418099, 18.4627627 ], [ 84.241818, 18.4622483 ], [ 84.2412809, 18.4621113 ], [ 84.24075, 18.4615889 ], [ 84.2400815, 18.4611935 ], [ 84.2399555, 18.4606769 ], [ 84.2394183, 18.4605401 ], [ 84.2388914, 18.4597603 ], [ 84.2378192, 18.459359 ], [ 84.2376922, 18.4588425 ], [ 84.2371613, 18.4583201 ], [ 84.237035, 18.4578036 ], [ 84.2362263, 18.4577918 ], [ 84.2360993, 18.4572753 ], [ 84.2355682, 18.4567529 ], [ 84.2354421, 18.4562364 ], [ 84.234901, 18.4563566 ], [ 84.2335735, 18.4550506 ], [ 84.2329052, 18.4546552 ], [ 84.2326438, 18.4541366 ], [ 84.2319806, 18.4534832 ], [ 84.2310469, 18.4528266 ], [ 84.2306532, 18.452177 ], [ 84.2301182, 18.4519119 ], [ 84.229454, 18.4512592 ], [ 84.2290605, 18.4506097 ], [ 84.2282599, 18.4500833 ], [ 84.2277228, 18.4499472 ], [ 84.2275958, 18.4494307 ], [ 84.2271981, 18.4490383 ], [ 84.226661, 18.4489022 ], [ 84.226534, 18.4483857 ], [ 84.225871, 18.4477321 ], [ 84.2252027, 18.4473369 ], [ 84.224809, 18.4466873 ], [ 84.224272, 18.4465513 ], [ 84.2242802, 18.4460366 ], [ 84.2237432, 18.4458996 ], [ 84.2229509, 18.4448586 ], [ 84.2221464, 18.4445894 ], [ 84.2217519, 18.4439408 ], [ 84.2210887, 18.4432872 ], [ 84.2193546, 18.4421043 ], [ 84.2188279, 18.4413245 ], [ 84.2184406, 18.4402895 ], [ 84.2179035, 18.4401525 ], [ 84.2177703, 18.4400223 ], [ 84.2176442, 18.4395057 ], [ 84.2171072, 18.4393687 ], [ 84.216974, 18.4392385 ], [ 84.2168479, 18.4387219 ], [ 84.2163089, 18.4387142 ], [ 84.2161819, 18.4381975 ], [ 84.2152492, 18.4375401 ], [ 84.2141876, 18.4364951 ], [ 84.2136504, 18.4363591 ], [ 84.2136587, 18.4358444 ], [ 84.2131216, 18.4357074 ], [ 84.2124577, 18.4350548 ], [ 84.2123316, 18.4345382 ], [ 84.2112575, 18.4342651 ], [ 84.2111307, 18.4337484 ], [ 84.2105998, 18.433226 ], [ 84.2104737, 18.4327095 ], [ 84.2096652, 18.4326976 ], [ 84.2095382, 18.432181 ], [ 84.2088752, 18.4315275 ], [ 84.2083401, 18.4312623 ], [ 84.2074108, 18.4303483 ], [ 84.2072847, 18.4298318 ], [ 84.2064783, 18.4296908 ], [ 84.2056862, 18.4286497 ], [ 84.2051492, 18.4285137 ], [ 84.2051575, 18.427999 ], [ 84.2046204, 18.427862 ], [ 84.2040938, 18.4270822 ], [ 84.2030218, 18.4266809 ], [ 84.202895, 18.4261642 ], [ 84.200905, 18.4242045 ], [ 84.2003681, 18.4240684 ], [ 84.2002411, 18.4235517 ], [ 84.1998436, 18.4231595 ], [ 84.1990432, 18.4226329 ], [ 84.1983751, 18.4222375 ], [ 84.1982492, 18.421721 ], [ 84.1977122, 18.421584 ], [ 84.1965176, 18.4204086 ], [ 84.1963915, 18.4198921 ], [ 84.1953176, 18.4196189 ], [ 84.1951908, 18.4191024 ], [ 84.1949254, 18.418841 ], [ 84.1947994, 18.4183245 ], [ 84.1942624, 18.4181875 ], [ 84.1929357, 18.4168811 ], [ 84.1922675, 18.4164857 ], [ 84.191613, 18.4153175 ], [ 84.1905412, 18.4149161 ], [ 84.1901532, 18.4138811 ], [ 84.189353, 18.4133545 ], [ 84.1892269, 18.412838 ], [ 84.1886879, 18.4128301 ], [ 84.1886964, 18.4123154 ], [ 84.1881594, 18.4121784 ], [ 84.1876329, 18.4113986 ], [ 84.187098, 18.4111332 ], [ 84.1859035, 18.409958 ], [ 84.1855102, 18.4093084 ], [ 84.1845767, 18.4086517 ], [ 84.1841834, 18.4080021 ], [ 84.1836486, 18.4077367 ], [ 84.1829848, 18.4070841 ], [ 84.1825915, 18.4064343 ], [ 84.1817871, 18.4061652 ], [ 84.1811275, 18.4052551 ], [ 84.1810016, 18.4047386 ], [ 84.1804647, 18.4046014 ], [ 84.179005, 18.4031648 ], [ 84.1786117, 18.4025152 ], [ 84.1780748, 18.4023789 ], [ 84.1780831, 18.4018645 ], [ 84.1775463, 18.4017275 ], [ 84.1771479, 18.4013358 ], [ 84.1770219, 18.4008193 ], [ 84.1764851, 18.4006823 ], [ 84.1758213, 18.4000295 ], [ 84.1751627, 18.3991185 ], [ 84.1742294, 18.3984617 ], [ 84.1738425, 18.3974268 ], [ 84.1733055, 18.3972895 ], [ 84.1726461, 18.3963795 ], [ 84.1717179, 18.3954646 ], [ 84.1711812, 18.3953283 ], [ 84.1710544, 18.3948118 ], [ 84.1709221, 18.3946808 ], [ 84.1703853, 18.3945445 ], [ 84.1702585, 18.394028 ], [ 84.1686667, 18.3924602 ], [ 84.1680083, 18.3915492 ], [ 84.1673403, 18.3911538 ], [ 84.1670793, 18.3906352 ], [ 84.1662834, 18.3898513 ], [ 84.1661576, 18.3893347 ], [ 84.1656185, 18.3893268 ], [ 84.1654917, 18.3888102 ], [ 84.1653596, 18.3886791 ], [ 84.1648228, 18.3885428 ], [ 84.1645702, 18.3875097 ], [ 84.1640332, 18.3873727 ], [ 84.1631045, 18.3864585 ], [ 84.1627112, 18.3858089 ], [ 84.1617781, 18.3851522 ], [ 84.1613912, 18.384117 ], [ 84.1608521, 18.3841089 ], [ 84.1608607, 18.3835944 ], [ 84.1603216, 18.3835863 ], [ 84.160195, 18.3830697 ], [ 84.1591296, 18.3822818 ], [ 84.1590039, 18.3817653 ], [ 84.1584649, 18.3817571 ], [ 84.1584734, 18.3812427 ], [ 84.1579366, 18.3811055 ], [ 84.1575424, 18.3804568 ], [ 84.1568797, 18.3798031 ], [ 84.156343, 18.3796668 ], [ 84.1559552, 18.3786317 ], [ 84.15489, 18.3778437 ], [ 84.1546289, 18.3773251 ], [ 84.1537011, 18.3764101 ], [ 84.1531642, 18.3762739 ], [ 84.1530376, 18.3757573 ], [ 84.1522419, 18.3749734 ], [ 84.1515877, 18.3738052 ], [ 84.1510508, 18.3736689 ], [ 84.1505373, 18.3721172 ], [ 84.1499984, 18.3721091 ], [ 84.1497501, 18.3708188 ], [ 84.1492113, 18.3708106 ], [ 84.1489671, 18.3692629 ], [ 84.1484282, 18.369255 ], [ 84.1481842, 18.3677073 ], [ 84.1476452, 18.3676991 ], [ 84.1472617, 18.3664068 ], [ 84.1467314, 18.3658842 ], [ 84.1463489, 18.3645918 ], [ 84.14581, 18.3645837 ], [ 84.1455658, 18.3630359 ], [ 84.145027, 18.363028 ], [ 84.1449087, 18.3619968 ], [ 84.1443827, 18.361217 ], [ 84.1441302, 18.3601837 ], [ 84.1433345, 18.3593998 ], [ 84.143213, 18.358626 ], [ 84.1426741, 18.3586179 ], [ 84.1422906, 18.3573255 ], [ 84.1417603, 18.3568029 ], [ 84.1409943, 18.3542181 ], [ 84.1399463, 18.3524009 ], [ 84.1391593, 18.3511025 ], [ 84.1388941, 18.3508413 ], [ 84.1383765, 18.3495468 ], [ 84.1378503, 18.3487668 ], [ 84.1369227, 18.3478519 ], [ 84.1363861, 18.3477154 ], [ 84.1359985, 18.3466803 ], [ 84.1354723, 18.3459004 ], [ 84.1344116, 18.3448551 ], [ 84.1338941, 18.3435606 ], [ 84.1334969, 18.3431683 ], [ 84.1318826, 18.3430157 ], [ 84.1311126, 18.3406882 ], [ 84.1324509, 18.3394638 ], [ 84.1312575, 18.3368999 ], [ 84.1281588, 18.3302427 ], [ 84.1298192, 18.3152477 ], [ 84.124467, 18.3094496 ], [ 84.0652663, 18.2733795 ], [ 84.0458316, 18.2641583 ], [ 83.9982124, 18.2415624 ], [ 83.9979387, 18.2413094 ], [ 83.9971267, 18.2410648 ], [ 83.9968531, 18.2408117 ], [ 83.9960409, 18.2405672 ], [ 83.9952246, 18.2400654 ], [ 83.9946773, 18.2395592 ], [ 83.9927795, 18.238817 ], [ 83.9925061, 18.2385639 ], [ 83.9916939, 18.2383194 ], [ 83.9914203, 18.2380663 ], [ 83.9895227, 18.2373241 ], [ 83.9889754, 18.236818 ], [ 83.9884371, 18.2368265 ], [ 83.9881634, 18.2365734 ], [ 83.9876229, 18.2364536 ], [ 83.987614, 18.2359391 ], [ 83.9862613, 18.2355738 ], [ 83.9857142, 18.2350676 ], [ 83.9840924, 18.2347074 ], [ 83.9840835, 18.2341929 ], [ 83.9832738, 18.2340765 ], [ 83.9821836, 18.2333215 ], [ 83.9816454, 18.23333 ], [ 83.9805552, 18.2325749 ], [ 83.9800169, 18.2325834 ], [ 83.9789224, 18.2315711 ], [ 83.9783842, 18.2315794 ], [ 83.9775633, 18.2308202 ], [ 83.9770205, 18.2305715 ], [ 83.9764823, 18.2305798 ], [ 83.9759349, 18.2300737 ], [ 83.9740376, 18.2293313 ], [ 83.9734904, 18.2288251 ], [ 83.9729519, 18.2288335 ], [ 83.9721311, 18.2280743 ], [ 83.9713192, 18.2278295 ], [ 83.9702249, 18.2268172 ], [ 83.9691394, 18.2263194 ], [ 83.9685923, 18.2258132 ], [ 83.9675023, 18.2250582 ], [ 83.9664212, 18.2248176 ], [ 83.9656006, 18.2240584 ], [ 83.9642458, 18.2235647 ], [ 83.9634296, 18.2230627 ], [ 83.9628824, 18.2225566 ], [ 83.9615235, 18.2218057 ], [ 83.960985, 18.221814 ], [ 83.9598953, 18.2210589 ], [ 83.958814, 18.2208182 ], [ 83.958267, 18.220312 ], [ 83.9577286, 18.2203203 ], [ 83.9569079, 18.2195611 ], [ 83.9563342, 18.2194362 ], [ 83.9558351, 18.2190029 ], [ 83.9554207, 18.2185848 ], [ 83.9549366, 18.2179677 ], [ 83.9545532, 18.2176592 ], [ 83.9541612, 18.2174947 ], [ 83.9539731, 18.2172927 ], [ 83.9531561, 18.2166086 ], [ 83.9523683, 18.2161028 ], [ 83.9515488, 18.2153668 ], [ 83.9502936, 18.2154921 ], [ 83.9487714, 18.2148733 ], [ 83.9478281, 18.2143889 ], [ 83.9469554, 18.2140534 ], [ 83.9460322, 18.2141089 ], [ 83.9452515, 18.2141451 ], [ 83.9450109, 18.2132411 ], [ 83.9456101, 18.2133099 ], [ 83.9458473, 18.2131591 ], [ 83.9458804, 18.2127671 ], [ 83.9455267, 18.2125224 ], [ 83.944717, 18.2118909 ], [ 83.9435707, 18.2112908 ], [ 83.941228, 18.2104465 ], [ 83.9401575, 18.2101705 ], [ 83.9380362, 18.209639 ], [ 83.9362553, 18.2093186 ], [ 83.9341595, 18.2088329 ], [ 83.9321747, 18.2085175 ], [ 83.9281667, 18.2076511 ], [ 83.927765, 18.207567 ], [ 83.9230308, 18.2064428 ], [ 83.9224465, 18.2062044 ], [ 83.921138, 18.2059569 ], [ 83.9176214, 18.2049813 ], [ 83.9162712, 18.2047445 ], [ 83.9154638, 18.2047568 ], [ 83.9143806, 18.2043876 ], [ 83.914372, 18.2038732 ], [ 83.9108577, 18.2030255 ], [ 83.9100503, 18.2030376 ], [ 83.9086916, 18.2022863 ], [ 83.9065296, 18.2018044 ], [ 83.9062561, 18.2015513 ], [ 83.9057178, 18.2015594 ], [ 83.9054508, 18.2016925 ], [ 83.9054421, 18.201178 ], [ 83.9043591, 18.200808 ], [ 83.90409, 18.2008121 ], [ 83.9016589, 18.2003342 ], [ 83.9013854, 18.2000811 ], [ 83.898134, 18.1988435 ], [ 83.8970444, 18.1980881 ], [ 83.8948783, 18.1973487 ], [ 83.8940624, 18.1968463 ], [ 83.8935239, 18.1968545 ], [ 83.8921696, 18.1963602 ], [ 83.8916313, 18.1963684 ], [ 83.8891919, 18.1953759 ], [ 83.8880981, 18.1943631 ], [ 83.8870172, 18.1941219 ], [ 83.8867437, 18.1938687 ], [ 83.8848469, 18.1931253 ], [ 83.8845735, 18.1928721 ], [ 83.8829501, 18.1923818 ], [ 83.8824032, 18.1918753 ], [ 83.8815916, 18.1916301 ], [ 83.8807755, 18.1911278 ], [ 83.8799596, 18.1906254 ], [ 83.8794213, 18.1906335 ], [ 83.8788766, 18.1902561 ], [ 83.8788681, 18.1897415 ], [ 83.8780586, 18.1896247 ], [ 83.8769651, 18.1886116 ], [ 83.8761512, 18.1882383 ], [ 83.8757301, 18.1872153 ], [ 83.8754567, 18.186962 ], [ 83.8751749, 18.1861943 ], [ 83.8749016, 18.185941 ], [ 83.8741996, 18.1841503 ], [ 83.8736612, 18.1841582 ], [ 83.8733752, 18.1831333 ], [ 83.8728369, 18.1831412 ], [ 83.8728243, 18.1823695 ], [ 83.872286, 18.1823775 ], [ 83.8722775, 18.181863 ], [ 83.8714659, 18.1816179 ], [ 83.8711841, 18.18085 ], [ 83.8701032, 18.1806088 ], [ 83.8699598, 18.1800962 ], [ 83.8692747, 18.1793346 ], [ 83.8681919, 18.1789643 ], [ 83.8671027, 18.1782085 ], [ 83.8657485, 18.1777141 ], [ 83.8646593, 18.1769583 ], [ 83.8638392, 18.1761985 ], [ 83.862485, 18.1757041 ], [ 83.8611184, 18.1744378 ], [ 83.8600377, 18.1741966 ], [ 83.8597642, 18.1739433 ], [ 83.8584102, 18.1734487 ], [ 83.8578634, 18.1729422 ], [ 83.8565136, 18.172705 ], [ 83.8548861, 18.1719571 ], [ 83.8543478, 18.1719653 ], [ 83.853263, 18.1714667 ], [ 83.8497474, 18.1704895 ], [ 83.8494741, 18.1702361 ], [ 83.8489358, 18.1702442 ], [ 83.8470392, 18.1695003 ], [ 83.8465009, 18.1695083 ], [ 83.845914871297424, 18.169183850414942 ], [ 83.8451428, 18.1687564 ], [ 83.8408115, 18.1672764 ], [ 83.8402732, 18.1672845 ], [ 83.8391842, 18.1665285 ], [ 83.8383768, 18.1665404 ], [ 83.8381035, 18.1662871 ], [ 83.8324183, 18.1643123 ], [ 83.8318821, 18.1644493 ], [ 83.8318738, 18.1639348 ], [ 83.8313335, 18.1638137 ], [ 83.8310602, 18.1635602 ], [ 83.8294371, 18.1630696 ], [ 83.8291638, 18.1628161 ], [ 83.8251061, 18.1615892 ], [ 83.8248328, 18.1613359 ], [ 83.8199595, 18.159606 ], [ 83.8191437, 18.1591034 ], [ 83.8177941, 18.1588659 ], [ 83.8175208, 18.1586124 ], [ 83.8167092, 18.1583671 ], [ 83.8164359, 18.1581136 ], [ 83.8145418, 18.1574984 ], [ 83.8145335, 18.156984 ], [ 83.8139973, 18.1571201 ], [ 83.8126393, 18.1563678 ], [ 83.8099357, 18.1556353 ], [ 83.8091199, 18.1551325 ], [ 83.8072341, 18.155032 ], [ 83.8072258, 18.1545173 ], [ 83.8066896, 18.1546534 ], [ 83.8058699, 18.1538933 ], [ 83.8039737, 18.153149 ], [ 83.8037005, 18.1528955 ], [ 83.8031623, 18.1529035 ], [ 83.802889, 18.15265 ], [ 83.7985543, 18.1509118 ], [ 83.798016, 18.1509197 ], [ 83.7974696, 18.1504128 ], [ 83.7939464, 18.1489201 ], [ 83.7925887, 18.1481677 ], [ 83.7909657, 18.1476767 ], [ 83.7906924, 18.1474232 ], [ 83.7898811, 18.1471777 ], [ 83.7896078, 18.1469243 ], [ 83.7874426, 18.1461836 ], [ 83.7871695, 18.1459303 ], [ 83.7852734, 18.1451857 ], [ 83.7847352, 18.1451934 ], [ 83.7839196, 18.1446905 ], [ 83.7820236, 18.143946 ], [ 83.7809349, 18.1431896 ], [ 83.7790389, 18.142445 ], [ 83.7787658, 18.1421915 ], [ 83.777412, 18.1416965 ], [ 83.7771389, 18.1414431 ], [ 83.7760584, 18.1412013 ], [ 83.775512, 18.1406944 ], [ 83.7736159, 18.1399498 ], [ 83.7727964, 18.1391894 ], [ 83.7719811, 18.1386865 ], [ 83.7714428, 18.1386943 ], [ 83.7706272, 18.1381913 ], [ 83.7665583, 18.1361911 ], [ 83.7649376, 18.1358288 ], [ 83.7649295, 18.1353142 ], [ 83.7624933, 18.134448 ], [ 83.7622202, 18.1341945 ], [ 83.7608665, 18.1336994 ], [ 83.7589667, 18.1326971 ], [ 83.7578783, 18.1319407 ], [ 83.7565265, 18.1315744 ], [ 83.7565186, 18.13106 ], [ 83.7557093, 18.1309424 ], [ 83.752725, 18.129441 ], [ 83.75056, 18.1286998 ], [ 83.7500138, 18.1281929 ], [ 83.7491984, 18.1276899 ], [ 83.7483871, 18.127444 ], [ 83.7478408, 18.1269371 ], [ 83.7470297, 18.1266914 ], [ 83.7459412, 18.1259349 ], [ 83.7448607, 18.125693 ], [ 83.7443145, 18.1251861 ], [ 83.7434991, 18.1246829 ], [ 83.7421457, 18.1241874 ], [ 83.7407881, 18.1234348 ], [ 83.7399788, 18.123318 ], [ 83.7396978, 18.1225499 ], [ 83.7386193, 18.1224361 ], [ 83.7380731, 18.1219292 ], [ 83.7356314, 18.1206771 ], [ 83.7321053, 18.1189256 ], [ 83.7315591, 18.1184187 ], [ 83.7299325, 18.1176697 ], [ 83.7293863, 18.1171626 ], [ 83.7285751, 18.1169169 ], [ 83.727756, 18.1161564 ], [ 83.7272138, 18.1159067 ], [ 83.7266755, 18.1159143 ], [ 83.7261295, 18.1154074 ], [ 83.7242338, 18.1146622 ], [ 83.7236878, 18.1141551 ], [ 83.7226035, 18.1136557 ], [ 83.7220573, 18.1131486 ], [ 83.720973, 18.1126493 ], [ 83.720427, 18.1121422 ], [ 83.7190735, 18.1116467 ], [ 83.7188006, 18.1113932 ], [ 83.7174472, 18.1108975 ], [ 83.7171741, 18.110644 ], [ 83.7158227, 18.1102775 ], [ 83.7158148, 18.1097629 ], [ 83.7144634, 18.1093955 ], [ 83.7136443, 18.1086349 ], [ 83.7106608, 18.1071326 ], [ 83.7093036, 18.1063796 ], [ 83.7074081, 18.1056342 ], [ 83.7068639, 18.1052562 ], [ 83.706856, 18.1047417 ], [ 83.7055048, 18.1043741 ], [ 83.7049588, 18.103867 ], [ 83.7041476, 18.1036212 ], [ 83.7030594, 18.1028642 ], [ 83.7025213, 18.1028718 ], [ 83.7011561, 18.1016041 ], [ 83.700076, 18.1013618 ], [ 83.6992569, 18.1006013 ], [ 83.6968156, 18.0993486 ], [ 83.6960006, 18.0988453 ], [ 83.6946434, 18.0980921 ], [ 83.6932864, 18.097339 ], [ 83.6927403, 18.0968319 ], [ 83.6913871, 18.0963361 ], [ 83.6902951, 18.0953218 ], [ 83.689211, 18.0948223 ], [ 83.6886651, 18.0943152 ], [ 83.6878539, 18.0940691 ], [ 83.6873079, 18.093562 ], [ 83.68622, 18.0928051 ], [ 83.685678, 18.0925552 ], [ 83.684859, 18.0917945 ], [ 83.683502, 18.0910413 ], [ 83.6821371, 18.0897735 ], [ 83.6810511, 18.0891456 ], [ 83.6807702, 18.0883774 ], [ 83.6802302, 18.0882558 ], [ 83.6794153, 18.0877523 ], [ 83.6783234, 18.086738 ], [ 83.6766973, 18.0859884 ], [ 83.6758785, 18.0852277 ], [ 83.6750673, 18.0849816 ], [ 83.6739757, 18.0839672 ], [ 83.6731645, 18.0837212 ], [ 83.6712656, 18.0827179 ], [ 83.6704469, 18.0819572 ], [ 83.6690938, 18.0814611 ], [ 83.668548, 18.080954 ], [ 83.6666491, 18.0799508 ], [ 83.6655572, 18.0789364 ], [ 83.6639315, 18.0781867 ], [ 83.6622996, 18.0770515 ], [ 83.6623886, 18.0768805 ], [ 83.6625648, 18.0767905 ], [ 83.662561, 18.0765331 ], [ 83.6622919, 18.0765369 ], [ 83.6622019, 18.076707 ], [ 83.6617557, 18.0766726 ], [ 83.6606699, 18.0760445 ], [ 83.6603892, 18.0752763 ], [ 83.6598492, 18.0751545 ], [ 83.6593034, 18.0746473 ], [ 83.6584903, 18.0742729 ], [ 83.6582097, 18.0735048 ], [ 83.6573989, 18.0732585 ], [ 83.657256, 18.0727457 ], [ 83.6567101, 18.0722385 ], [ 83.6565646, 18.0714683 ], [ 83.6560245, 18.0713466 ], [ 83.6533072, 18.0695824 ], [ 83.6522193, 18.0688251 ], [ 83.6516737, 18.068318 ], [ 83.6508587, 18.0678143 ], [ 83.6500439, 18.0673109 ], [ 83.6492331, 18.0670646 ], [ 83.6484181, 18.0665611 ], [ 83.6475996, 18.0658002 ], [ 83.6470577, 18.0655501 ], [ 83.6459661, 18.0645356 ], [ 83.6456952, 18.0644112 ], [ 83.6456875, 18.0638966 ], [ 83.6451532, 18.0641612 ], [ 83.6450105, 18.0636484 ], [ 83.6444609, 18.0628837 ], [ 83.6440502, 18.0623747 ], [ 83.6435121, 18.0623821 ], [ 83.6435045, 18.0618675 ], [ 83.6424225, 18.0614957 ], [ 83.641331, 18.0604811 ], [ 83.6407931, 18.0604885 ], [ 83.6399744, 18.0597276 ], [ 83.6386177, 18.0589739 ], [ 83.6377992, 18.058213 ], [ 83.6367117, 18.0574556 ], [ 83.6361698, 18.0572058 ], [ 83.6350821, 18.0564485 ], [ 83.6331723, 18.0546728 ], [ 83.63127, 18.0534118 ], [ 83.6301863, 18.0529119 ], [ 83.6296406, 18.0524046 ], [ 83.628284, 18.0516509 ], [ 83.6269275, 18.0508971 ], [ 83.6262088, 18.0506902 ], [ 83.625569, 18.0500153 ], [ 83.6244873, 18.0496435 ], [ 83.6236726, 18.0491398 ], [ 83.6231269, 18.0486324 ], [ 83.6215015, 18.0478824 ], [ 83.6209559, 18.0473749 ], [ 83.6201451, 18.0471287 ], [ 83.6193303, 18.0466248 ], [ 83.6187848, 18.0461175 ], [ 83.6179738, 18.0458711 ], [ 83.6168865, 18.0451137 ], [ 83.616068, 18.0443526 ], [ 83.6152572, 18.0441062 ], [ 83.6149844, 18.0438525 ], [ 83.6141736, 18.0436061 ], [ 83.613628, 18.0430988 ], [ 83.6123675, 18.0426416 ], [ 83.611728, 18.0419667 ], [ 83.611188, 18.0418448 ], [ 83.6103696, 18.0410837 ], [ 83.6095588, 18.0408372 ], [ 83.6090132, 18.04033 ], [ 83.6084734, 18.040209 ], [ 83.6081929, 18.0394405 ], [ 83.6076531, 18.0393186 ], [ 83.6065658, 18.0385613 ], [ 83.6060202, 18.0380538 ], [ 83.604122, 18.0370499 ], [ 83.6033037, 18.0362888 ], [ 83.6027639, 18.0361678 ], [ 83.6027563, 18.0356532 ], [ 83.6022163, 18.0355313 ], [ 83.6016728, 18.0351529 ], [ 83.6013923, 18.0343846 ], [ 83.6008544, 18.0343918 ], [ 83.6005741, 18.0336235 ], [ 83.600036, 18.0336307 ], [ 83.5997557, 18.0328622 ], [ 83.5992158, 18.0327403 ], [ 83.5986722, 18.0323621 ], [ 83.5986647, 18.0318475 ], [ 83.5981249, 18.0317256 ], [ 83.5975792, 18.0312181 ], [ 83.5964919, 18.0304606 ], [ 83.5956794, 18.0300858 ], [ 83.5953991, 18.0293173 ], [ 83.5945883, 18.0290709 ], [ 83.5945807, 18.0285562 ], [ 83.594041, 18.0284343 ], [ 83.5934955, 18.0279268 ], [ 83.5929555, 18.0278059 ], [ 83.592813, 18.0272929 ], [ 83.5924025, 18.0267838 ], [ 83.5918627, 18.0266619 ], [ 83.5913173, 18.0261544 ], [ 83.59023, 18.0253967 ], [ 83.5891428, 18.0246392 ], [ 83.5877866, 18.0238851 ], [ 83.5866957, 18.0228701 ], [ 83.5856123, 18.0223699 ], [ 83.5845214, 18.0213549 ], [ 83.5837106, 18.0211083 ], [ 83.5826197, 18.0200934 ], [ 83.5812636, 18.0193392 ], [ 83.5804454, 18.0185781 ], [ 83.5793583, 18.0178204 ], [ 83.5788166, 18.0175702 ], [ 83.5779984, 18.0168089 ], [ 83.5750136, 18.0150471 ], [ 83.5741956, 18.0142858 ], [ 83.5731085, 18.0135281 ], [ 83.5725687, 18.0134069 ], [ 83.5725611, 18.0128923 ], [ 83.5720213, 18.0127704 ], [ 83.5717486, 18.0125165 ], [ 83.5712088, 18.0123954 ], [ 83.5712014, 18.0118807 ], [ 83.5706635, 18.0118879 ], [ 83.5703833, 18.0111195 ], [ 83.5693037, 18.0108764 ], [ 83.5691614, 18.0103635 ], [ 83.5669797, 18.0083334 ], [ 83.5668384, 18.0078205 ], [ 83.5663005, 18.0078276 ], [ 83.5658817, 18.0068036 ], [ 83.5650637, 18.0060422 ], [ 83.563409, 18.0032329 ], [ 83.5623183, 18.0022177 ], [ 83.5617654, 18.0011954 ], [ 83.5609438, 18.0001767 ], [ 83.5601183, 17.9989008 ], [ 83.5598308, 17.9976177 ], [ 83.559738, 17.9911839 ], [ 83.559992, 17.990151 ], [ 83.5610417, 17.9883355 ], [ 83.5611693, 17.987819 ], [ 83.5606314, 17.9878261 ], [ 83.5599327, 17.9860337 ], [ 83.55966, 17.9857798 ], [ 83.5588272, 17.9839891 ], [ 83.5585398, 17.9827059 ], [ 83.5582672, 17.9824521 ], [ 83.557573, 17.9809169 ], [ 83.5570334, 17.9807948 ], [ 83.5562173, 17.9801626 ], [ 83.556075, 17.9796496 ], [ 83.5553922, 17.9788864 ], [ 83.5548524, 17.9787645 ], [ 83.5534893, 17.9774954 ], [ 83.5527849, 17.9771797 ], [ 83.5519031, 17.9763696 ], [ 83.5514951, 17.9765814 ], [ 83.550791, 17.976888 ], [ 83.5502531, 17.9768951 ], [ 83.5502495, 17.9766377 ], [ 83.5509612, 17.9764586 ], [ 83.5515848, 17.9759762 ], [ 83.5506263, 17.9748311 ], [ 83.5498049, 17.9738122 ], [ 83.5491109, 17.9722769 ], [ 83.5484689, 17.9716006 ], [ 83.5481472, 17.9707453 ], [ 83.5478745, 17.9704914 ], [ 83.5473147, 17.9689545 ], [ 83.5470419, 17.9687007 ], [ 83.5467547, 17.9674174 ], [ 83.5456643, 17.9664022 ], [ 83.5448392, 17.9651261 ], [ 83.5442903, 17.964361 ], [ 83.543189, 17.9625737 ], [ 83.5430476, 17.9620607 ], [ 83.5419684, 17.9618175 ], [ 83.5418261, 17.9613045 ], [ 83.5412773, 17.9605396 ], [ 83.5399144, 17.9592705 ], [ 83.5395005, 17.9585037 ], [ 83.5389609, 17.9583816 ], [ 83.5381433, 17.9576202 ], [ 83.5370567, 17.9568621 ], [ 83.5365171, 17.9567409 ], [ 83.5362372, 17.9559725 ], [ 83.5356976, 17.9558504 ], [ 83.5340641, 17.9544565 ], [ 83.5340567, 17.9539417 ], [ 83.533519, 17.9539488 ], [ 83.5335116, 17.953434 ], [ 83.5327012, 17.9531872 ], [ 83.5320066, 17.9516519 ], [ 83.5318617, 17.9508816 ], [ 83.5310514, 17.9506347 ], [ 83.5307715, 17.9498663 ], [ 83.5302319, 17.9497442 ], [ 83.5296868, 17.9492365 ], [ 83.5291491, 17.9492435 ], [ 83.528059, 17.948228 ], [ 83.5272523, 17.9482386 ], [ 83.5258896, 17.9469693 ], [ 83.5253519, 17.9469763 ], [ 83.5250794, 17.9467224 ], [ 83.5237241, 17.9459679 ], [ 83.5231864, 17.9459749 ], [ 83.5226413, 17.9454671 ], [ 83.5212896, 17.9449698 ], [ 83.5196545, 17.9434467 ], [ 83.5191168, 17.9434537 ], [ 83.5185753, 17.9432032 ], [ 83.5177579, 17.9424418 ], [ 83.5169477, 17.9421947 ], [ 83.5161336, 17.9416905 ], [ 83.5145041, 17.9405538 ], [ 83.5144969, 17.9400392 ], [ 83.5139573, 17.9399169 ], [ 83.5136848, 17.9396631 ], [ 83.5134141, 17.9395383 ], [ 83.513272, 17.9390254 ], [ 83.5127233, 17.9382603 ], [ 83.5127161, 17.9377455 ], [ 83.5125786, 17.93749 ], [ 83.512039, 17.9373677 ], [ 83.5114939, 17.93686 ], [ 83.5104149, 17.9366166 ], [ 83.5098698, 17.9361088 ], [ 83.507977, 17.9353611 ], [ 83.5077044, 17.9351072 ], [ 83.506898, 17.9351176 ], [ 83.5060805, 17.934356 ], [ 83.5052667, 17.9338515 ], [ 83.5039152, 17.9333543 ], [ 83.5033701, 17.9328464 ], [ 83.5020186, 17.932349 ], [ 83.5017462, 17.9320951 ], [ 83.500936, 17.9318481 ], [ 83.5001221, 17.9313439 ], [ 83.4995772, 17.930836 ], [ 83.498767, 17.930589 ], [ 83.4984947, 17.9303352 ], [ 83.4976844, 17.9300882 ], [ 83.4957844, 17.9288256 ], [ 83.4944329, 17.9283282 ], [ 83.4933431, 17.9273125 ], [ 83.4922641, 17.9270689 ], [ 83.4911743, 17.9260534 ], [ 83.4887368, 17.9247975 ], [ 83.4879229, 17.924293 ], [ 83.4862973, 17.9234134 ], [ 83.4862902, 17.9228988 ], [ 83.4857506, 17.9227765 ], [ 83.4852057, 17.9222687 ], [ 83.4843956, 17.9220216 ], [ 83.4835784, 17.9212598 ], [ 83.4805996, 17.9197534 ], [ 83.4797859, 17.919249 ], [ 83.478431, 17.918494 ], [ 83.4776137, 17.9177323 ], [ 83.4762622, 17.9172346 ], [ 83.4749003, 17.9159649 ], [ 83.4738177, 17.9154639 ], [ 83.4730023, 17.9148311 ], [ 83.4729952, 17.9143165 ], [ 83.471375, 17.9138223 ], [ 83.4712329, 17.9133093 ], [ 83.470823, 17.9127996 ], [ 83.4702836, 17.9126773 ], [ 83.4700112, 17.9124235 ], [ 83.4694718, 17.9123019 ], [ 83.4693297, 17.911789 ], [ 83.4689199, 17.9112794 ], [ 83.4681097, 17.9110322 ], [ 83.4681027, 17.9105176 ], [ 83.4675633, 17.9103951 ], [ 83.4667478, 17.9097625 ], [ 83.4667408, 17.9092477 ], [ 83.4656618, 17.9090041 ], [ 83.4655198, 17.9084909 ], [ 83.4649751, 17.9079831 ], [ 83.4645616, 17.9072161 ], [ 83.4634828, 17.9069723 ], [ 83.4633407, 17.9064594 ], [ 83.462796, 17.9059513 ], [ 83.462655, 17.9054384 ], [ 83.4615761, 17.9051946 ], [ 83.461434, 17.9046816 ], [ 83.4604796, 17.9036641 ], [ 83.4599419, 17.9036709 ], [ 83.4597999, 17.9031577 ], [ 83.459114, 17.9021368 ], [ 83.4585765, 17.9021436 ], [ 83.4582934, 17.9011175 ], [ 83.4577557, 17.9011243 ], [ 83.4576138, 17.9006113 ], [ 83.4567897, 17.8993346 ], [ 83.4565172, 17.8990806 ], [ 83.4563762, 17.8985677 ], [ 83.4558387, 17.8985745 ], [ 83.455679, 17.8967746 ], [ 83.4555414, 17.8965189 ], [ 83.4552745, 17.8966505 ], [ 83.4539286, 17.8965393 ], [ 83.4533734, 17.8952592 ], [ 83.4531063, 17.8953908 ], [ 83.4528392, 17.8955233 ], [ 83.4528498, 17.8962955 ], [ 83.4533892, 17.8964169 ], [ 83.4539339, 17.8969249 ], [ 83.4546107, 17.8973029 ], [ 83.4551696, 17.8988402 ], [ 83.455442, 17.8990942 ], [ 83.4555981, 17.9006369 ], [ 83.4564064, 17.9007548 ], [ 83.4568145, 17.9011362 ], [ 83.4572324, 17.9021606 ], [ 83.4577718, 17.9022821 ], [ 83.4584522, 17.9029175 ], [ 83.45887, 17.9039417 ], [ 83.4594095, 17.9040632 ], [ 83.460097, 17.9052133 ], [ 83.460506, 17.9055938 ], [ 83.4610456, 17.9057162 ], [ 83.4610704, 17.9075178 ], [ 83.4618768, 17.9075076 ], [ 83.4617704, 17.909568 ], [ 83.46164, 17.9098272 ], [ 83.4611131, 17.910606 ], [ 83.4608442, 17.9106094 ], [ 83.4609931, 17.9103386 ], [ 83.4614614, 17.909741 ], [ 83.4616117, 17.9077682 ], [ 83.4605382, 17.9079101 ], [ 83.4602728, 17.908171 ], [ 83.459737, 17.9083069 ], [ 83.4596162, 17.909338 ], [ 83.4593545, 17.9098561 ], [ 83.4596376, 17.9108822 ], [ 83.4599099, 17.9111362 ], [ 83.4599205, 17.9119082 ], [ 83.4591496, 17.9144921 ], [ 83.4591779, 17.916551 ], [ 83.4597619, 17.9198899 ], [ 83.4595038, 17.9206654 ], [ 83.4589731, 17.921187 ], [ 83.4589766, 17.9214442 ], [ 83.4593945, 17.9224686 ], [ 83.4585809, 17.9219642 ], [ 83.4585739, 17.9214493 ], [ 83.4583015, 17.9211955 ], [ 83.4577655, 17.9213305 ], [ 83.4558995, 17.9225128 ], [ 83.4559067, 17.9230277 ], [ 83.455102, 17.923166 ], [ 83.4548366, 17.9234269 ], [ 83.4524187, 17.9235864 ], [ 83.4524257, 17.9241012 ], [ 83.4476022, 17.9253199 ], [ 83.4468028, 17.9258447 ], [ 83.4460033, 17.9263696 ], [ 83.4454726, 17.9268912 ], [ 83.4427875, 17.9271823 ], [ 83.4419899, 17.9278364 ], [ 83.4421309, 17.9283494 ], [ 83.4417351, 17.9288693 ], [ 83.4409302, 17.9290076 ], [ 83.4401324, 17.9296616 ], [ 83.4401396, 17.9301762 ], [ 83.4387986, 17.9304505 ], [ 83.4385439, 17.9314834 ], [ 83.4381366, 17.931231 ], [ 83.436936, 17.9318893 ], [ 83.43614, 17.9326714 ], [ 83.4353386, 17.9330681 ], [ 83.4354762, 17.9333238 ], [ 83.4354832, 17.9338385 ], [ 83.435281507523712, 17.93403665801231 ], [ 83.4349525, 17.9343599 ], [ 83.4348326, 17.9353911 ], [ 83.4342966, 17.9355261 ], [ 83.433497, 17.9360509 ], [ 83.4321702, 17.9373546 ], [ 83.4313705, 17.9378795 ], [ 83.4292142, 17.9375208 ], [ 83.4292073, 17.9370061 ], [ 83.4310929, 17.9372399 ], [ 83.4310859, 17.9367251 ], [ 83.4318909, 17.936586 ], [ 83.4325537, 17.9359345 ], [ 83.432678, 17.9351607 ], [ 83.4332141, 17.9350248 ], [ 83.4344078, 17.9338519 ], [ 83.434666, 17.9330764 ], [ 83.4350646, 17.932685 ], [ 83.435281507523712, 17.932566057706907 ], [ 83.4362651, 17.9320267 ], [ 83.436393, 17.9315104 ], [ 83.4369307, 17.9315036 ], [ 83.4369237, 17.9309889 ], [ 83.4379939, 17.930589 ], [ 83.4385246, 17.9300674 ], [ 83.4398618, 17.9295359 ], [ 83.4402558, 17.9288878 ], [ 83.4413172, 17.9278447 ], [ 83.4417087, 17.9269385 ], [ 83.4433146, 17.9264034 ], [ 83.4435799, 17.9261428 ], [ 83.4454567, 17.9257334 ], [ 83.4454497, 17.9252188 ], [ 83.4459874, 17.925212 ], [ 83.4459802, 17.9246973 ], [ 83.4465163, 17.9245614 ], [ 83.4483841, 17.9235081 ], [ 83.450259, 17.9229697 ], [ 83.4510549, 17.9221874 ], [ 83.4521303, 17.922174 ], [ 83.4545429, 17.9216285 ], [ 83.4556111, 17.9211003 ], [ 83.4561418, 17.9205788 ], [ 83.4569413, 17.9200538 ], [ 83.4576075, 17.9196597 ], [ 83.4578479, 17.9175975 ], [ 83.4575436, 17.9150271 ], [ 83.4582792, 17.9098697 ], [ 83.4582651, 17.9088402 ], [ 83.4585232, 17.9080647 ], [ 83.4584913, 17.9057484 ], [ 83.4582154, 17.9052371 ], [ 83.4572607, 17.9042195 ], [ 83.45618, 17.9038466 ], [ 83.4551048, 17.9038602 ], [ 83.4545637, 17.9036096 ], [ 83.4532195, 17.9036266 ], [ 83.4526871, 17.9040198 ], [ 83.4525629, 17.9047937 ], [ 83.4516366, 17.9058349 ], [ 83.4509239, 17.9060128 ], [ 83.4508302, 17.9058451 ], [ 83.4502925, 17.9058519 ], [ 83.4502961, 17.9061093 ], [ 83.4507425, 17.9061912 ], [ 83.4508444, 17.9068746 ], [ 83.4498629, 17.9070559 ], [ 83.4495108, 17.9076637 ], [ 83.4484408, 17.9080627 ], [ 83.4479012, 17.9079413 ], [ 83.4479905, 17.9077703 ], [ 83.4478041, 17.9075966 ], [ 83.4470914, 17.9076941 ], [ 83.4470984, 17.9082088 ], [ 83.4454888, 17.9084864 ], [ 83.4453611, 17.9090029 ], [ 83.4449653, 17.9095227 ], [ 83.4444242, 17.9092721 ], [ 83.4446877, 17.9088822 ], [ 83.4452237, 17.9087472 ], [ 83.4452165, 17.9082324 ], [ 83.4468207, 17.9075682 ], [ 83.4473513, 17.9070468 ], [ 83.4489589, 17.906641 ], [ 83.4489519, 17.9061262 ], [ 83.4494877, 17.9059903 ], [ 83.4497531, 17.9057295 ], [ 83.4507319, 17.9054191 ], [ 83.4508266, 17.9055877 ], [ 83.4510955, 17.9055843 ], [ 83.4510919, 17.9053271 ], [ 83.4508196, 17.9050731 ], [ 83.4518912, 17.904802 ], [ 83.4520182, 17.9042857 ], [ 83.4522834, 17.9040249 ], [ 83.4526589, 17.901961 ], [ 83.4515907, 17.9024892 ], [ 83.4515977, 17.9030039 ], [ 83.4511784, 17.9036011 ], [ 83.4502713, 17.9043076 ], [ 83.4489449, 17.9056115 ], [ 83.4477962, 17.9063492 ], [ 83.4476043, 17.9058858 ], [ 83.4484975, 17.9055286 ], [ 83.4484036, 17.9053609 ], [ 83.4486726, 17.9053575 ], [ 83.4492898, 17.9044889 ], [ 83.4491959, 17.9043212 ], [ 83.4506198, 17.9034426 ], [ 83.4509181, 17.9024977 ], [ 83.4517139, 17.9017155 ], [ 83.4517034, 17.9009432 ], [ 83.4505928, 17.8983832 ], [ 83.4509281, 17.8972942 ], [ 83.4511427, 17.8963345 ], [ 83.4513251, 17.8954871 ], [ 83.4514968, 17.894946 ], [ 83.4519581, 17.8942006 ], [ 83.4529881, 17.8937922 ], [ 83.4538678, 17.8934859 ], [ 83.4541683, 17.8934553 ], [ 83.4544579, 17.8935983 ], [ 83.4547369, 17.8934655 ], [ 83.4549407, 17.8932409 ], [ 83.4553484, 17.8930367 ], [ 83.4555952, 17.8928121 ], [ 83.4562282, 17.8926692 ], [ 83.4560458, 17.8925671 ], [ 83.4562664, 17.8905892 ], [ 83.4561209, 17.8898189 ], [ 83.4555762, 17.889311 ], [ 83.4550281, 17.8885456 ], [ 83.4547451, 17.8875195 ], [ 83.453246, 17.8859941 ], [ 83.4524395, 17.8860041 ], [ 83.4522976, 17.8854912 ], [ 83.4514805, 17.8847291 ], [ 83.4513395, 17.8842162 ], [ 83.4505333, 17.8842264 ], [ 83.4503913, 17.8837132 ], [ 83.4497056, 17.8826922 ], [ 83.4491681, 17.8826991 ], [ 83.4488852, 17.881673 ], [ 83.4483475, 17.8816796 ], [ 83.4480681, 17.8809109 ], [ 83.4475306, 17.8809177 ], [ 83.446837, 17.8793819 ], [ 83.4462923, 17.8788739 ], [ 83.4457336, 17.8773366 ], [ 83.4450411, 17.8758007 ], [ 83.4445034, 17.8758074 ], [ 83.4444928, 17.8750353 ], [ 83.4439553, 17.8750421 ], [ 83.4440751, 17.8740109 ], [ 83.4437924, 17.8729848 ], [ 83.4431103, 17.8722211 ], [ 83.441761, 17.8718514 ], [ 83.440672, 17.8708355 ], [ 83.4387799, 17.8700869 ], [ 83.4382354, 17.8695789 ], [ 83.436881, 17.8688236 ], [ 83.4360712, 17.8685762 ], [ 83.4352543, 17.8678144 ], [ 83.435081507523705, 17.867707129716855 ], [ 83.434441, 17.8673095 ], [ 83.4336312, 17.8670623 ], [ 83.4322698, 17.8657922 ], [ 83.4317323, 17.8657989 ], [ 83.4309207, 17.8654233 ], [ 83.4306414, 17.8646547 ], [ 83.4295611, 17.8642816 ], [ 83.4287478, 17.8637768 ], [ 83.4276622, 17.8630181 ], [ 83.4265766, 17.8622593 ], [ 83.4254911, 17.8615006 ], [ 83.4246743, 17.8607386 ], [ 83.4230496, 17.8598582 ], [ 83.4227703, 17.8590894 ], [ 83.4222311, 17.8589669 ], [ 83.4211473, 17.8583373 ], [ 83.4210054, 17.8578242 ], [ 83.4199166, 17.8568081 ], [ 83.4197756, 17.856295 ], [ 83.4192364, 17.8561725 ], [ 83.4189659, 17.8560476 ], [ 83.4189589, 17.8555329 ], [ 83.4181492, 17.8552855 ], [ 83.4180073, 17.8547724 ], [ 83.4173256, 17.8540087 ], [ 83.4167881, 17.8540153 ], [ 83.4163704, 17.8529909 ], [ 83.4160982, 17.8527367 ], [ 83.4159574, 17.8522237 ], [ 83.4151477, 17.8519763 ], [ 83.4145892, 17.8504386 ], [ 83.4140517, 17.8504454 ], [ 83.41349, 17.8486503 ], [ 83.4126803, 17.8484029 ], [ 83.4123908, 17.846862 ], [ 83.4118533, 17.8468686 ], [ 83.4105845, 17.8425082 ], [ 83.4107055, 17.841477 ], [ 83.410168, 17.8414836 ], [ 83.4102984, 17.8412247 ], [ 83.4102742, 17.839423 ], [ 83.4107839, 17.8373574 ], [ 83.4111821, 17.836966 ], [ 83.4122519, 17.836567 ], [ 83.4123789, 17.8360506 ], [ 83.4127773, 17.835659 ], [ 83.413847, 17.8352602 ], [ 83.41384, 17.8347454 ], [ 83.4157229, 17.8348505 ], [ 83.4162587, 17.8347155 ], [ 83.4163855, 17.8341992 ], [ 83.416023, 17.8272533 ], [ 83.4162814, 17.8264778 ], [ 83.4162294, 17.8226173 ], [ 83.4156711, 17.8210796 ], [ 83.414572, 17.8192913 ], [ 83.4137486, 17.8180144 ], [ 83.4136042, 17.8172438 ], [ 83.4130668, 17.8172504 ], [ 83.4125087, 17.8157129 ], [ 83.4119712, 17.8157195 ], [ 83.4115469, 17.8141803 ], [ 83.4109992, 17.8134147 ], [ 83.4102865, 17.8103345 ], [ 83.4097489, 17.8103412 ], [ 83.4096072, 17.809828 ], [ 83.4090631, 17.80932 ], [ 83.4086501, 17.8085527 ], [ 83.4081109, 17.8084302 ], [ 83.4072963, 17.8077972 ], [ 83.4071545, 17.8072841 ], [ 83.406745, 17.8067744 ], [ 83.406206, 17.8066517 ], [ 83.4051192, 17.8057645 ], [ 83.4051122, 17.8052499 ], [ 83.4043027, 17.8050023 ], [ 83.4041576, 17.8042319 ], [ 83.4037482, 17.803722 ], [ 83.402129, 17.8032272 ], [ 83.4018501, 17.8024583 ], [ 83.4013161, 17.8027224 ], [ 83.4011744, 17.8022092 ], [ 83.400765, 17.8016993 ], [ 83.3991443, 17.8010752 ], [ 83.3977854, 17.7999341 ], [ 83.3970892, 17.7981406 ], [ 83.3958601, 17.7966111 ], [ 83.3950523, 17.7964918 ], [ 83.3936917, 17.7952213 ], [ 83.3928824, 17.7949739 ], [ 83.3923398, 17.7945948 ], [ 83.3917854, 17.7933145 ], [ 83.390976, 17.7930669 ], [ 83.3905586, 17.7920424 ], [ 83.3897425, 17.7912801 ], [ 83.3891846, 17.7897422 ], [ 83.3879555, 17.7882129 ], [ 83.3874182, 17.7882193 ], [ 83.3870011, 17.7871947 ], [ 83.3867289, 17.7869407 ], [ 83.3857162, 17.7845508 ], [ 83.3850623, 17.7828422 ], [ 83.3850555, 17.7823274 ], [ 83.3858374, 17.7805158 ], [ 83.3861028, 17.7802552 ], [ 83.3862307, 17.7797388 ], [ 83.3867681, 17.7797322 ], [ 83.3866263, 17.7792191 ], [ 83.3858034, 17.777942 ], [ 83.3855312, 17.777688 ], [ 83.3853906, 17.7771749 ], [ 83.3845811, 17.7769273 ], [ 83.3843024, 17.7761584 ], [ 83.3837684, 17.7764223 ], [ 83.3837616, 17.7759076 ], [ 83.3832226, 17.775785 ], [ 83.3829506, 17.7755308 ], [ 83.3807894, 17.7746566 ], [ 83.3805106, 17.7738878 ], [ 83.3797029, 17.7737683 ], [ 83.3791606, 17.7733892 ], [ 83.3788749, 17.7721057 ], [ 83.3775265, 17.7717355 ], [ 83.3767121, 17.7711021 ], [ 83.3767053, 17.7705875 ], [ 83.376168, 17.7705939 ], [ 83.3758892, 17.769825 ], [ 83.3753502, 17.7697024 ], [ 83.3742655, 17.7689434 ], [ 83.3734579, 17.7688249 ], [ 83.3734511, 17.76831 ], [ 83.3723714, 17.7679366 ], [ 83.3720994, 17.7676823 ], [ 83.3707494, 17.767184 ], [ 83.3699333, 17.7664215 ], [ 83.3693961, 17.766428 ], [ 83.3680427, 17.7656721 ], [ 83.3675056, 17.7656786 ], [ 83.3669614, 17.7651703 ], [ 83.3661487, 17.7646653 ], [ 83.3642582, 17.7639158 ], [ 83.3639862, 17.7636618 ], [ 83.3631769, 17.763414 ], [ 83.3629049, 17.7631598 ], [ 83.3618202, 17.7624006 ], [ 83.3612829, 17.7624072 ], [ 83.3599229, 17.7611363 ], [ 83.3588416, 17.7606345 ], [ 83.3577554, 17.759747 ], [ 83.3577486, 17.7592323 ], [ 83.356941, 17.7591129 ], [ 83.3555827, 17.7579711 ], [ 83.3555761, 17.7574565 ], [ 83.3544982, 17.7572119 ], [ 83.3533833, 17.7541362 ], [ 83.3525774, 17.7541458 ], [ 83.3521605, 17.7531212 ], [ 83.3518885, 17.752867 ], [ 83.3517481, 17.7523539 ], [ 83.3509388, 17.7521061 ], [ 83.3499679, 17.7498009 ], [ 83.349951, 17.748514 ], [ 83.3504816, 17.7479927 ], [ 83.3501896, 17.7461942 ], [ 83.350028, 17.7459531 ], [ 83.349505, 17.7451726 ], [ 83.3484254, 17.744799 ], [ 83.3473394, 17.7439114 ], [ 83.3473326, 17.7433966 ], [ 83.3467938, 17.7432739 ], [ 83.3459796, 17.7426406 ], [ 83.3456976, 17.7416141 ], [ 83.3451603, 17.7416206 ], [ 83.3445997, 17.7398253 ], [ 83.3440658, 17.7400891 ], [ 83.343639, 17.7382923 ], [ 83.343367, 17.7380381 ], [ 83.3430616, 17.7352099 ], [ 83.3435353, 17.7303131 ], [ 83.3443275, 17.729274 ], [ 83.3443209, 17.7287591 ], [ 83.344454, 17.7286283 ], [ 83.3463274, 17.728091 ], [ 83.3464595, 17.7279612 ], [ 83.3465808, 17.72693 ], [ 83.3460437, 17.7269364 ], [ 83.3459023, 17.7264233 ], [ 83.3456303, 17.7261691 ], [ 83.3452145, 17.7251443 ], [ 83.3444071, 17.7250249 ], [ 83.3435931, 17.7243915 ], [ 83.3434481, 17.723621 ], [ 83.3431763, 17.7233668 ], [ 83.3430357, 17.7228534 ], [ 83.3425003, 17.7229882 ], [ 83.341688, 17.722483 ], [ 83.341144, 17.7219746 ], [ 83.3406069, 17.721981 ], [ 83.3395226, 17.7212216 ], [ 83.3387152, 17.7211029 ], [ 83.3384332, 17.7200766 ], [ 83.3365449, 17.719455 ], [ 83.3360011, 17.7189466 ], [ 83.3319526, 17.7174503 ], [ 83.3316808, 17.7171961 ], [ 83.3303311, 17.7166971 ], [ 83.3295156, 17.7159345 ], [ 83.3284413, 17.7159474 ], [ 83.3281694, 17.715693 ], [ 83.326011, 17.7149464 ], [ 83.3254672, 17.7144378 ], [ 83.3246581, 17.7141901 ], [ 83.3238458, 17.7136849 ], [ 83.323302, 17.7131764 ], [ 83.3224931, 17.7129285 ], [ 83.3219494, 17.7124201 ], [ 83.3211371, 17.7119149 ], [ 83.3205999, 17.7119211 ], [ 83.3197876, 17.7114159 ], [ 83.3189719, 17.7106531 ], [ 83.3181629, 17.7104053 ], [ 83.3170754, 17.7093883 ], [ 83.3159946, 17.7088863 ], [ 83.3151807, 17.7082528 ], [ 83.3149023, 17.7074838 ], [ 83.3140949, 17.7073641 ], [ 83.3130074, 17.7063471 ], [ 83.3120119, 17.7058611 ], [ 83.3108676, 17.7055799 ], [ 83.3102155, 17.7052887 ], [ 83.3098283, 17.7048422 ], [ 83.3089724, 17.7040074 ], [ 83.3087792, 17.7037343 ], [ 83.3087686, 17.7034833 ], [ 83.308982, 17.7032726 ], [ 83.309247, 17.7031885 ], [ 83.3089724, 17.7029979 ], [ 83.3088227, 17.7026746 ], [ 83.3084282, 17.7027753 ], [ 83.308198, 17.7029009 ], [ 83.3081369, 17.7025126 ], [ 83.3081257, 17.7013612 ], [ 83.3081245, 17.7007925 ], [ 83.3080793, 17.700612 ], [ 83.3079943, 17.7004742 ], [ 83.3077293, 17.7002024 ], [ 83.3075402, 17.7000849 ], [ 83.3074406, 17.7000926 ], [ 83.3073793, 17.7001668 ], [ 83.3073753, 17.700242 ], [ 83.3074159, 17.7003083 ], [ 83.3074816, 17.7003773 ], [ 83.3076251, 17.700438 ], [ 83.3078519, 17.7006631 ], [ 83.3078811, 17.7009587 ], [ 83.3078036, 17.7011659 ], [ 83.3076682, 17.7012895 ], [ 83.3074116, 17.7014265 ], [ 83.3070772, 17.7015225 ], [ 83.3067935, 17.701525 ], [ 83.3065066, 17.7014643 ], [ 83.306141, 17.7013526 ], [ 83.3058138, 17.7011342 ], [ 83.3054992, 17.7008397 ], [ 83.3053654, 17.7005518 ], [ 83.3053247, 17.7002673 ], [ 83.3054062, 17.7000665 ], [ 83.3059972, 17.6996782 ], [ 83.3061739, 17.6995624 ], [ 83.306146, 17.6994654 ], [ 83.306073, 17.6994085 ], [ 83.3057934, 17.6995229 ], [ 83.3056658, 17.6995592 ], [ 83.3055278, 17.699479 ], [ 83.3054468, 17.6993263 ], [ 83.3059788, 17.6976485 ], [ 83.3059518, 17.6975459 ], [ 83.3058845, 17.6974789 ], [ 83.3057916, 17.697472 ], [ 83.3057329, 17.697521 ], [ 83.3056613, 17.6976014 ], [ 83.3056411, 17.6977133 ], [ 83.305531, 17.6977029 ], [ 83.3054355, 17.6977361 ], [ 83.3053687, 17.6977196 ], [ 83.3051198, 17.6986139 ], [ 83.3051822, 17.6986296 ], [ 83.3050281, 17.6988063 ], [ 83.3049198, 17.6991105 ], [ 83.3048372, 17.699427 ], [ 83.3047843, 17.6994452 ], [ 83.3045802, 17.6994025 ], [ 83.304549, 17.6995075 ], [ 83.3044737, 17.6994865 ], [ 83.3047546, 17.6985107 ], [ 83.3046408, 17.6984758 ], [ 83.3046595, 17.6984134 ], [ 83.3045932, 17.698392 ], [ 83.3045434, 17.6985624 ], [ 83.3042644, 17.6984838 ], [ 83.3040557, 17.6991992 ], [ 83.3035899, 17.6989274 ], [ 83.3004594, 17.6965438 ], [ 83.3014571, 17.6960215 ], [ 83.3018273, 17.6963058 ], [ 83.301923, 17.6962051 ], [ 83.3016066, 17.6959468 ], [ 83.3022387, 17.6956135 ], [ 83.3028217, 17.6960563 ], [ 83.302884, 17.6959829 ], [ 83.3021533, 17.695415 ], [ 83.3022094, 17.6953397 ], [ 83.3026323, 17.6950666 ], [ 83.3026981, 17.695031 ], [ 83.3034814, 17.6956232 ], [ 83.3035804, 17.6955137 ], [ 83.3028792, 17.6949801 ], [ 83.3028637, 17.69492 ], [ 83.303316, 17.6946033 ], [ 83.3034136, 17.6945713 ], [ 83.3041882, 17.695159 ], [ 83.3042805, 17.6950558 ], [ 83.3035278, 17.6944699 ], [ 83.3040892, 17.694094 ], [ 83.3048889, 17.6946854 ], [ 83.3049492, 17.6946072 ], [ 83.3041723, 17.6940291 ], [ 83.3048107, 17.6936057 ], [ 83.3049782, 17.693577 ], [ 83.3050781, 17.6936005 ], [ 83.3050416, 17.693643 ], [ 83.3059737, 17.6943555 ], [ 83.3060024, 17.6960469 ], [ 83.3060836, 17.6960459 ], [ 83.3061107, 17.6960313 ], [ 83.306254, 17.6960895 ], [ 83.3064241, 17.6961217 ], [ 83.306571, 17.6964497 ], [ 83.3067501, 17.6967106 ], [ 83.3070375, 17.6969848 ], [ 83.3072743, 17.6971644 ], [ 83.3075706, 17.6973295 ], [ 83.3077253, 17.6973952 ], [ 83.3077656, 17.6974786 ], [ 83.307907, 17.6975716 ], [ 83.3080562, 17.6975635 ], [ 83.3081723, 17.6975011 ], [ 83.3082025, 17.6973675 ], [ 83.3081669, 17.6972241 ], [ 83.3080592, 17.6971523 ], [ 83.3079127, 17.6971427 ], [ 83.3075867, 17.6970651 ], [ 83.3072973, 17.6968778 ], [ 83.3069913, 17.6966124 ], [ 83.306802, 17.6963521 ], [ 83.3066816, 17.6960525 ], [ 83.3065786, 17.6955339 ], [ 83.3065372, 17.6950071 ], [ 83.306415, 17.6882791 ], [ 83.3063855, 17.6881934 ], [ 83.3063063, 17.6881636 ], [ 83.3061942, 17.6881869 ], [ 83.3061224, 17.6882585 ], [ 83.3061367, 17.6883713 ], [ 83.306192, 17.6885041 ], [ 83.3062749, 17.6934239 ], [ 83.3048296, 17.693395 ], [ 83.3047169, 17.6934424 ], [ 83.303959, 17.6939202 ], [ 83.3038009, 17.6939295 ], [ 83.3036459, 17.6938454 ], [ 83.3020672, 17.6921014 ], [ 83.302246, 17.6919639 ], [ 83.3021, 17.6917872 ], [ 83.2988286, 17.6944744 ], [ 83.298993, 17.6946495 ], [ 83.2986708, 17.6948863 ], [ 83.2983684, 17.6948682 ], [ 83.2979845, 17.6947229 ], [ 83.2972309, 17.6939567 ], [ 83.2964336, 17.6933785 ], [ 83.2963265, 17.6925849 ], [ 83.296505, 17.6923922 ], [ 83.2949461, 17.6895352 ], [ 83.2944582, 17.6896826 ], [ 83.2932682, 17.6892971 ], [ 83.293173, 17.6894218 ], [ 83.292578, 17.6892404 ], [ 83.2917569, 17.689059 ], [ 83.290555, 17.6889457 ], [ 83.2897934, 17.6887303 ], [ 83.2891746, 17.6886622 ], [ 83.2889604, 17.6885489 ], [ 83.288056, 17.6885375 ], [ 83.2863067, 17.6889003 ], [ 83.2857474, 17.6889343 ], [ 83.2840814, 17.6892518 ], [ 83.2835578, 17.6894105 ], [ 83.2833674, 17.6897166 ], [ 83.283415, 17.6899774 ], [ 83.2829271, 17.6900567 ], [ 83.2825939, 17.6903288 ], [ 83.2824868, 17.690771 ], [ 83.2827486, 17.6914625 ], [ 83.2836173, 17.6915986 ], [ 83.2846764, 17.6916213 ], [ 83.2868898, 17.6913718 ], [ 83.2885677, 17.6912358 ], [ 83.2888176, 17.69195 ], [ 83.2871754, 17.691814 ], [ 83.2834983, 17.6918934 ], [ 83.2834745, 17.6924375 ], [ 83.2836887, 17.6934239 ], [ 83.2837839, 17.6934239 ], [ 83.2838553, 17.6940021 ], [ 83.2839624, 17.6940134 ], [ 83.283891, 17.6946823 ], [ 83.2832365, 17.6946369 ], [ 83.2824868, 17.7012349 ], [ 83.2853659, 17.7061507 ], [ 83.283804, 17.7079928 ], [ 83.2837668, 17.7083648 ], [ 83.2835623, 17.7107383 ], [ 83.2831718, 17.710756 ], [ 83.2831532, 17.7104726 ], [ 83.2823165, 17.7095516 ], [ 83.2820004, 17.7094453 ], [ 83.2821678, 17.7058142 ], [ 83.2806803, 17.7057965 ], [ 83.2803084, 17.7053359 ], [ 83.281517, 17.6953455 ], [ 83.2799737, 17.6952038 ], [ 83.2783189, 17.6979494 ], [ 83.2790068, 17.698906 ], [ 83.2764037, 17.7034229 ], [ 83.274377, 17.704716 ], [ 83.272499, 17.7083117 ], [ 83.2728151, 17.7088962 ], [ 83.2735403, 17.709835 ], [ 83.2729453, 17.7117302 ], [ 83.2717181, 17.7130586 ], [ 83.2692823, 17.7130409 ], [ 83.2684642, 17.7123856 ], [ 83.2679993, 17.7116771 ], [ 83.2680737, 17.7099235 ], [ 83.2700261, 17.7087014 ], [ 83.2699517, 17.7085597 ], [ 83.2688732, 17.7091973 ], [ 83.2687059, 17.7089316 ], [ 83.2675903, 17.7095516 ], [ 83.2677948, 17.7098881 ], [ 83.2662887, 17.7108092 ], [ 83.266642, 17.7115531 ], [ 83.2660842, 17.7118011 ], [ 83.2657123, 17.7111988 ], [ 83.2640389, 17.7121376 ], [ 83.2625253, 17.7102709 ], [ 83.262377, 17.7099125 ], [ 83.2628589, 17.7097153 ], [ 83.2629604, 17.7094453 ], [ 83.2633706, 17.7092421 ], [ 83.2635327, 17.7092155 ], [ 83.2636218, 17.7090566 ], [ 83.265692, 17.7080801 ], [ 83.266081, 17.7062321 ], [ 83.2625209, 17.7055371 ], [ 83.2629374, 17.7036213 ], [ 83.271477, 17.705251 ], [ 83.2724561, 17.7036018 ], [ 83.2723125, 17.7034966 ], [ 83.2725616, 17.7030069 ], [ 83.2727313, 17.7030891 ], [ 83.273333, 17.701927 ], [ 83.2734781, 17.7020106 ], [ 83.273704, 17.7015818 ], [ 83.2724094, 17.7013258 ], [ 83.2724365, 17.7011264 ], [ 83.2721628, 17.7010698 ], [ 83.274031, 17.6978857 ], [ 83.2757282, 17.6981671 ], [ 83.2774669, 17.6953149 ], [ 83.2782646, 17.6944385 ], [ 83.278217, 17.6942798 ], [ 83.2774673, 17.6944272 ], [ 83.2774197, 17.6942571 ], [ 83.2741115, 17.6950961 ], [ 83.272386, 17.6954362 ], [ 83.2708747, 17.6958103 ], [ 83.2708747, 17.696003 ], [ 83.270363, 17.6961391 ], [ 83.2702083, 17.6960144 ], [ 83.2692325, 17.6962298 ], [ 83.2688041, 17.6957083 ], [ 83.2687208, 17.6955042 ], [ 83.2687684, 17.69496 ], [ 83.2694705, 17.6947786 ], [ 83.2694705, 17.6945973 ], [ 83.2742424, 17.6933615 ], [ 83.2742186, 17.6927606 ], [ 83.2743614, 17.6927493 ], [ 83.2745756, 17.6935542 ], [ 83.2787525, 17.6924772 ], [ 83.2785978, 17.6920237 ], [ 83.2795855, 17.6907313 ], [ 83.2797878, 17.690856 ], [ 83.2806922, 17.6896769 ], [ 83.2805851, 17.6895522 ], [ 83.2808707, 17.6891101 ], [ 83.2793118, 17.6893368 ], [ 83.2792642, 17.6886679 ], [ 83.2812991, 17.6883845 ], [ 83.2812991, 17.6882257 ], [ 83.2810373, 17.6882484 ], [ 83.2809778, 17.6878403 ], [ 83.2838219, 17.6875001 ], [ 83.2838338, 17.6874208 ], [ 83.2851547, 17.6873981 ], [ 83.2857378, 17.6872847 ], [ 83.2858925, 17.6872734 ], [ 83.2859996, 17.6873187 ], [ 83.2862614, 17.6871827 ], [ 83.286547, 17.6872734 ], [ 83.2868326, 17.6872847 ], [ 83.2870349, 17.687092 ], [ 83.2869278, 17.6870013 ], [ 83.2868326, 17.6862984 ], [ 83.287142, 17.6862417 ], [ 83.2872372, 17.6867405 ], [ 83.2877132, 17.6867065 ], [ 83.2877846, 17.6868879 ], [ 83.2877727, 17.6870466 ], [ 83.2881297, 17.687024 ], [ 83.2883201, 17.6868426 ], [ 83.2884867, 17.68699 ], [ 83.2887723, 17.6869786 ], [ 83.2888794, 17.6868426 ], [ 83.2896767, 17.6871147 ], [ 83.2905454, 17.6873981 ], [ 83.2914974, 17.6875682 ], [ 83.2922352, 17.6876249 ], [ 83.2931634, 17.6874548 ], [ 83.2937703, 17.6871827 ], [ 83.2942225, 17.6865365 ], [ 83.294401, 17.6852553 ], [ 83.2946271, 17.6850172 ], [ 83.2952102, 17.6849038 ], [ 83.2959123, 17.6849152 ], [ 83.2962693, 17.6850286 ], [ 83.2980543, 17.6862303 ], [ 83.2981376, 17.6861396 ], [ 83.2971737, 17.6853007 ], [ 83.2962336, 17.6826476 ], [ 83.2967215, 17.6825683 ], [ 83.2967584, 17.682528 ], [ 83.2967317, 17.6824644 ], [ 83.296662, 17.6824436 ], [ 83.2957428, 17.6825284 ], [ 83.295434, 17.6819504 ], [ 83.2952079, 17.6811794 ], [ 83.2953983, 17.6806465 ], [ 83.2958186, 17.6801807 ], [ 83.2957982, 17.6796565 ], [ 83.2958593, 17.6791322 ], [ 83.2955333, 17.6782973 ], [ 83.295411, 17.6775207 ], [ 83.2953906, 17.6768994 ], [ 83.2954925, 17.6765499 ], [ 83.2951461, 17.6755985 ], [ 83.294657, 17.6749383 ], [ 83.2942698, 17.6742781 ], [ 83.2938011, 17.6735986 ], [ 83.2932305, 17.6729772 ], [ 83.2923542, 17.672453 ], [ 83.2919059, 17.67222 ], [ 83.2912334, 17.6716375 ], [ 83.2906628, 17.6710355 ], [ 83.2899699, 17.6708608 ], [ 83.2897458, 17.6704336 ], [ 83.2894197, 17.6698123 ], [ 83.2879728, 17.6685696 ], [ 83.2872188, 17.6678123 ], [ 83.2863833, 17.6670744 ], [ 83.2852421, 17.6663754 ], [ 83.284162, 17.6650938 ], [ 83.2835711, 17.6638899 ], [ 83.2835303, 17.6628608 ], [ 83.2835303, 17.6621617 ], [ 83.2830412, 17.6614433 ], [ 83.2826133, 17.6605889 ], [ 83.2806977, 17.6595015 ], [ 83.2776613, 17.6581616 ], [ 83.267472, 17.6534234 ], [ 83.2625607, 17.6506854 ], [ 83.2608897, 17.6495008 ], [ 83.2608489, 17.6486463 ], [ 83.2609305, 17.6478113 ], [ 83.2603191, 17.6471704 ], [ 83.2599319, 17.6465296 ], [ 83.2599727, 17.6460053 ], [ 83.2599319, 17.6455198 ], [ 83.2598504, 17.6446653 ], [ 83.2593002, 17.6438691 ], [ 83.2584035, 17.64317 ], [ 83.2566917, 17.6419465 ], [ 83.2553264, 17.6414804 ], [ 83.253798, 17.6408395 ], [ 83.250191, 17.6388781 ], [ 83.2472972, 17.6375769 ], [ 83.2451371, 17.6359262 ], [ 83.2440138, 17.6346684 ], [ 83.2438426, 17.6341125 ], [ 83.2469285, 17.6285618 ], [ 83.2469546, 17.6283993 ], [ 83.2469161, 17.6282782 ], [ 83.2467929, 17.6282708 ], [ 83.2466696, 17.6283626 ], [ 83.2466109, 17.6284948 ], [ 83.2465586, 17.6286793 ], [ 83.2434601, 17.6342013 ], [ 83.2422005, 17.6338158 ], [ 83.2408723, 17.6330093 ], [ 83.2386893, 17.6310981 ], [ 83.2360251, 17.6282647 ], [ 83.2355784, 17.6278409 ], [ 83.2340902, 17.6262904 ], [ 83.2328865, 17.6245336 ], [ 83.2317395, 17.6236361 ], [ 83.2319479, 17.6235889 ], [ 83.231778, 17.6229283 ], [ 83.2295659, 17.6234726 ], [ 83.2296059, 17.6236436 ], [ 83.2294328, 17.6236698 ], [ 83.2293166, 17.623671 ], [ 83.229244, 17.6236286 ], [ 83.2288192, 17.6219828 ], [ 83.2288546, 17.6218328 ], [ 83.2289254, 17.6217429 ], [ 83.2290906, 17.6216866 ], [ 83.229157, 17.6219437 ], [ 83.237376, 17.6199224 ], [ 83.2400159, 17.6213183 ], [ 83.2401235, 17.6211317 ], [ 83.2374133, 17.6196719 ], [ 83.2344638, 17.6203827 ], [ 83.2343693, 17.6199403 ], [ 83.2344756, 17.6197828 ], [ 83.2346486, 17.6196516 ], [ 83.2365879, 17.6190105 ], [ 83.2366941, 17.6189205 ], [ 83.236643, 17.6179383 ], [ 83.2365092, 17.6177771 ], [ 83.236466, 17.6155051 ], [ 83.2367941, 17.6148751 ], [ 83.2371307, 17.6149615 ], [ 83.237886, 17.615715 ], [ 83.2385468, 17.6165136 ], [ 83.2384013, 17.6166673 ], [ 83.2388182, 17.6170197 ], [ 83.2389638, 17.6168773 ], [ 83.2390975, 17.6170385 ], [ 83.2390975, 17.6172784 ], [ 83.2391723, 17.6173347 ], [ 83.2393571, 17.617181 ], [ 83.2394083, 17.6168848 ], [ 83.239306, 17.6166898 ], [ 83.2390425, 17.6164049 ], [ 83.2392903, 17.6164574 ], [ 83.2399629, 17.6169635 ], [ 83.2473287, 17.6236732 ], [ 83.2474249, 17.623855 ], [ 83.2475429, 17.6239825 ], [ 83.247716, 17.6240349 ], [ 83.247834, 17.6239787 ], [ 83.2478907, 17.6238977 ], [ 83.247876, 17.6237937 ], [ 83.2380121, 17.6145829 ], [ 83.2378879, 17.6142634 ], [ 83.2378475, 17.6139125 ], [ 83.2383501, 17.6134487 ], [ 83.2381297, 17.6126365 ], [ 83.2377036, 17.6118383 ], [ 83.2370771, 17.6115568 ], [ 83.2366703, 17.6112116 ], [ 83.2363947, 17.6110076 ], [ 83.2350701, 17.6106191 ], [ 83.2336436, 17.6098227 ], [ 83.2320948, 17.6085408 ], [ 83.2305868, 17.6070451 ], [ 83.2291399, 17.6062682 ], [ 83.2273466, 17.6052193 ], [ 83.2268575, 17.6044617 ], [ 83.226939, 17.6038401 ], [ 83.2265314, 17.6037819 ], [ 83.2259812, 17.6041509 ], [ 83.2238029, 17.6020737 ], [ 83.2230144, 17.6023727 ], [ 83.2221248, 17.6016174 ], [ 83.2199306, 17.6006366 ], [ 83.2182606, 17.5995221 ], [ 83.2169669, 17.5981111 ], [ 83.2160955, 17.5972689 ], [ 83.2152364, 17.5966413 ], [ 83.2153386, 17.5940656 ], [ 83.2149302, 17.5935553 ], [ 83.2143919, 17.5934321 ], [ 83.2127643, 17.5920348 ], [ 83.2128949, 17.5917759 ], [ 83.2128822, 17.5907462 ], [ 83.2127454, 17.5904903 ], [ 83.2124785, 17.5906215 ], [ 83.2119417, 17.5906275 ], [ 83.210862, 17.5901248 ], [ 83.2100566, 17.5901337 ], [ 83.2095137, 17.5896249 ], [ 83.2081623, 17.5888676 ], [ 83.2073539, 17.5886192 ], [ 83.2070824, 17.5883648 ], [ 83.2057342, 17.5878649 ], [ 83.2054626, 17.5876105 ], [ 83.2035745, 17.5868592 ], [ 83.2016832, 17.5858506 ], [ 83.2014116, 17.585596 ], [ 83.1997951, 17.5850991 ], [ 83.1995235, 17.5848447 ], [ 83.1981754, 17.5843448 ], [ 83.1979038, 17.5840904 ], [ 83.1952075, 17.5830906 ], [ 83.1949359, 17.582836 ], [ 83.1943991, 17.582842 ], [ 83.1922426, 17.5820936 ], [ 83.1911599, 17.5813333 ], [ 83.1895433, 17.5808362 ], [ 83.1892718, 17.5805818 ], [ 83.1841476, 17.5785788 ], [ 83.1838762, 17.5783244 ], [ 83.1817197, 17.5775758 ], [ 83.1814483, 17.5773214 ], [ 83.1801002, 17.5768213 ], [ 83.1798286, 17.5765667 ], [ 83.1774009, 17.5755637 ], [ 83.1768579, 17.5750547 ], [ 83.1744302, 17.5740517 ], [ 83.1738872, 17.5735427 ], [ 83.173076, 17.5730367 ], [ 83.1719977, 17.5726627 ], [ 83.1718569, 17.5721494 ], [ 83.1709059, 17.5711299 ], [ 83.1703691, 17.571136 ], [ 83.1702098, 17.5690779 ], [ 83.1704689, 17.5683027 ], [ 83.170326, 17.5675319 ], [ 83.1716742, 17.568032 ], [ 83.1715333, 17.5675187 ], [ 83.1716556, 17.5664875 ], [ 83.1700438, 17.566376 ], [ 83.1684228, 17.5654932 ], [ 83.1684167, 17.5649783 ], [ 83.1678785, 17.5648549 ], [ 83.1665228, 17.5637117 ], [ 83.1662453, 17.5629424 ], [ 83.1657101, 17.5630764 ], [ 83.1632748, 17.56143 ], [ 83.1632688, 17.5609152 ], [ 83.1624606, 17.5606667 ], [ 83.162183, 17.5598973 ], [ 83.1619161, 17.5600284 ], [ 83.1608428, 17.5600401 ], [ 83.160303, 17.5597886 ], [ 83.1597662, 17.5597944 ], [ 83.155454, 17.5582966 ], [ 83.1551826, 17.5580422 ], [ 83.1535695, 17.5578022 ], [ 83.1524899, 17.5572991 ], [ 83.1516848, 17.5573078 ], [ 83.1506052, 17.5568047 ], [ 83.1498, 17.5568133 ], [ 83.1476471, 17.5563219 ], [ 83.1465676, 17.5558186 ], [ 83.1460308, 17.5558245 ], [ 83.1449514, 17.5553212 ], [ 83.1441463, 17.5553299 ], [ 83.1398373, 17.5540893 ], [ 83.1387579, 17.553586 ], [ 83.1382212, 17.5535918 ], [ 83.1328358, 17.5521052 ], [ 83.132299, 17.5521108 ], [ 83.1309513, 17.5516106 ], [ 83.1304145, 17.5516162 ], [ 83.1250263, 17.5498719 ], [ 83.1244895, 17.5498776 ], [ 83.1236785, 17.5493715 ], [ 83.1228704, 17.5491226 ], [ 83.1220654, 17.5491313 ], [ 83.1212542, 17.5486249 ], [ 83.1180235, 17.5477589 ], [ 83.1177508, 17.5473753 ], [ 83.1158693, 17.5471379 ], [ 83.1131737, 17.5461367 ], [ 83.112637, 17.5461424 ], [ 83.1112864, 17.5453845 ], [ 83.1093988, 17.5446321 ], [ 83.1072431, 17.5438827 ], [ 83.1064382, 17.5438912 ], [ 83.105627, 17.5433849 ], [ 83.1042824, 17.5431418 ], [ 83.1034714, 17.5426355 ], [ 83.1002393, 17.5416399 ], [ 83.0999679, 17.5413853 ], [ 83.0964646, 17.540135 ], [ 83.0953822, 17.5393741 ], [ 83.0945742, 17.5391252 ], [ 83.093492, 17.5383641 ], [ 83.0924187, 17.5383755 ], [ 83.0921518, 17.5385076 ], [ 83.0921607, 17.5392798 ], [ 83.0926973, 17.5392741 ], [ 83.0925775, 17.5405627 ], [ 83.0928547, 17.5413324 ], [ 83.0946098, 17.5422144 ], [ 83.0962259, 17.5427122 ], [ 83.0964971, 17.5429668 ], [ 83.0978419, 17.5432101 ], [ 83.0986529, 17.5437164 ], [ 83.0991911, 17.54384 ], [ 83.0996317, 17.5471823 ], [ 83.1003076, 17.547561 ], [ 83.1013987, 17.5490942 ], [ 83.1022068, 17.5493431 ], [ 83.1032921, 17.5503615 ], [ 83.1043714, 17.5508649 ], [ 83.1054569, 17.5518833 ], [ 83.1065362, 17.5523868 ], [ 83.1072172, 17.5532811 ], [ 83.1078959, 17.5539171 ], [ 83.1084357, 17.5541689 ], [ 83.1088453, 17.5548086 ], [ 83.1093879, 17.5553176 ], [ 83.1095285, 17.5558311 ], [ 83.1103351, 17.5559508 ], [ 83.1110161, 17.5568451 ], [ 83.1111596, 17.557616 ], [ 83.1122376, 17.5579902 ], [ 83.1127802, 17.5584994 ], [ 83.1134553, 17.5588789 ], [ 83.1138702, 17.5599043 ], [ 83.1141386, 17.5599014 ], [ 83.1144249, 17.5614433 ], [ 83.1155, 17.5615599 ], [ 83.1160397, 17.5618116 ], [ 83.1168538, 17.5625754 ], [ 83.1176619, 17.5628241 ], [ 83.1179333, 17.5630787 ], [ 83.1187415, 17.5633276 ], [ 83.1190129, 17.5635822 ], [ 83.1203607, 17.5640827 ], [ 83.1206321, 17.5643372 ], [ 83.1211688, 17.5643314 ], [ 83.1219861, 17.5653526 ], [ 83.126553, 17.5656901 ], [ 83.126547, 17.5651753 ], [ 83.1281603, 17.5654155 ], [ 83.1280286, 17.5656742 ], [ 83.1282025, 17.5690195 ], [ 83.1271183, 17.5681295 ], [ 83.1263117, 17.5680099 ], [ 83.1265861, 17.5685219 ], [ 83.1263177, 17.5685247 ], [ 83.1263208, 17.5687823 ], [ 83.1265891, 17.5687793 ], [ 83.1263266, 17.5692972 ], [ 83.1249847, 17.5693115 ], [ 83.1249728, 17.5682819 ], [ 83.1244376, 17.5684159 ], [ 83.1217506, 17.5681872 ], [ 83.1214792, 17.5679326 ], [ 83.1195975, 17.5676954 ], [ 83.1187865, 17.5671891 ], [ 83.117176, 17.5672063 ], [ 83.1169061, 17.567081 ], [ 83.1168972, 17.5663087 ], [ 83.1163605, 17.5663144 ], [ 83.1160741, 17.5647727 ], [ 83.1149961, 17.5643975 ], [ 83.1139152, 17.5637659 ], [ 83.1134761, 17.5606809 ], [ 83.1129244, 17.5593994 ], [ 83.1125164, 17.5588889 ], [ 83.1109033, 17.5586487 ], [ 83.1108912, 17.5576189 ], [ 83.1103546, 17.5576245 ], [ 83.1100741, 17.5565977 ], [ 83.1095361, 17.5564743 ], [ 83.1089948, 17.5560942 ], [ 83.1088541, 17.5555809 ], [ 83.1083115, 17.5550717 ], [ 83.1081719, 17.5545582 ], [ 83.1076336, 17.5544348 ], [ 83.1065497, 17.5535455 ], [ 83.1062694, 17.5525187 ], [ 83.1054627, 17.5523981 ], [ 83.1046517, 17.5518918 ], [ 83.1038377, 17.551128 ], [ 83.1019504, 17.5503756 ], [ 83.1014136, 17.5503813 ], [ 83.1008738, 17.5501297 ], [ 83.0997916, 17.5493686 ], [ 83.0989791, 17.5487342 ], [ 83.0988326, 17.5477058 ], [ 83.0985612, 17.5474512 ], [ 83.0982781, 17.5461668 ], [ 83.0985434, 17.5459065 ], [ 83.0982603, 17.5446223 ], [ 83.0978523, 17.5441116 ], [ 83.0970456, 17.543991 ], [ 83.0967744, 17.5437362 ], [ 83.0946187, 17.5429867 ], [ 83.0938077, 17.5424803 ], [ 83.0924629, 17.5422371 ], [ 83.0916506, 17.5416024 ], [ 83.0917489, 17.5385117 ], [ 83.0920142, 17.5382515 ], [ 83.0920054, 17.5374792 ], [ 83.0913261, 17.536714 ], [ 83.0907893, 17.5367196 ], [ 83.0901004, 17.5351821 ], [ 83.089829, 17.5349273 ], [ 83.0896776, 17.5333842 ], [ 83.0891396, 17.5332607 ], [ 83.0888681, 17.533006 ], [ 83.0880602, 17.532757 ], [ 83.0869781, 17.5319961 ], [ 83.086173, 17.5320045 ], [ 83.0829413, 17.5310086 ], [ 83.0824045, 17.5310143 ], [ 83.081057, 17.5305134 ], [ 83.080252, 17.5305219 ], [ 83.079444, 17.530273 ], [ 83.0786391, 17.5302813 ], [ 83.075944, 17.5292798 ], [ 83.0756727, 17.5290251 ], [ 83.0740596, 17.5287845 ], [ 83.0713647, 17.5277828 ], [ 83.0708279, 17.5277884 ], [ 83.0694805, 17.5272876 ], [ 83.0692091, 17.527033 ], [ 83.0686726, 17.5270385 ], [ 83.0675905, 17.5262774 ], [ 83.0662445, 17.5259056 ], [ 83.0659615, 17.5246212 ], [ 83.0646213, 17.5247635 ], [ 83.0643501, 17.5245089 ], [ 83.0584235, 17.5225106 ], [ 83.0573414, 17.5217495 ], [ 83.0568049, 17.521755 ], [ 83.0554575, 17.5212539 ], [ 83.0549207, 17.5212596 ], [ 83.0541099, 17.5207531 ], [ 83.0524942, 17.5202549 ], [ 83.0522229, 17.5200001 ], [ 83.0506102, 17.5197593 ], [ 83.0481836, 17.5187544 ], [ 83.0479124, 17.5184998 ], [ 83.0465679, 17.5182562 ], [ 83.045486, 17.5174949 ], [ 83.0449493, 17.5175004 ], [ 83.0435991, 17.5167419 ], [ 83.0427941, 17.5167503 ], [ 83.0414439, 17.5159918 ], [ 83.0409071, 17.5159973 ], [ 83.0395569, 17.5152386 ], [ 83.038752, 17.515247 ], [ 83.0379413, 17.5147404 ], [ 83.036594, 17.5142392 ], [ 83.0363227, 17.5139846 ], [ 83.034707, 17.5134862 ], [ 83.0338964, 17.5129795 ], [ 83.0328202, 17.5127331 ], [ 83.03147, 17.5119744 ], [ 83.0309334, 17.5119799 ], [ 83.0298516, 17.5112186 ], [ 83.0266174, 17.5099642 ], [ 83.0260752, 17.5094549 ], [ 83.024248143749986, 17.50872554937062 ], [ 83.0241884, 17.5087017 ], [ 83.0239172, 17.5084469 ], [ 83.02257, 17.5079457 ], [ 83.0220275, 17.5074363 ], [ 83.020412, 17.5069378 ], [ 83.0198697, 17.5064284 ], [ 83.0190619, 17.5061791 ], [ 83.0187907, 17.5059243 ], [ 83.0179829, 17.505675 ], [ 83.0169011, 17.5049136 ], [ 83.0160877, 17.5041494 ], [ 83.0150117, 17.5039028 ], [ 83.0142011, 17.5033961 ], [ 83.0133876, 17.502632 ], [ 83.0125798, 17.5023827 ], [ 83.0114953, 17.5013638 ], [ 83.0104178, 17.5009888 ], [ 83.0102776, 17.5004753 ], [ 83.0090565, 17.4992003 ], [ 83.0085184, 17.4990765 ], [ 83.0077064, 17.4984415 ], [ 83.0075662, 17.4979279 ], [ 83.0071585, 17.4974171 ], [ 83.0063507, 17.4971678 ], [ 83.0059367, 17.4961421 ], [ 83.0053944, 17.4956325 ], [ 83.0048493, 17.4948656 ], [ 83.0047044, 17.493837 ], [ 83.0041678, 17.4938425 ], [ 83.0039879, 17.4897246 ], [ 83.0042477, 17.4889495 ], [ 83.0042338, 17.4876622 ], [ 83.0036915, 17.4871527 ], [ 83.0031464, 17.4863857 ], [ 83.0026014, 17.4856187 ], [ 83.0023619, 17.4852007 ], [ 83.0015864, 17.4846317 ], [ 83.0009344, 17.4840598 ], [ 83.0005142, 17.4835011 ], [ 82.9997831, 17.4830576 ], [ 82.9985987, 17.4823609 ], [ 82.9978662, 17.4819325 ], [ 82.996786, 17.4813001 ], [ 82.9960101, 17.4804958 ], [ 82.9953572, 17.4799481 ], [ 82.9945033, 17.4794941 ], [ 82.9939404, 17.4787539 ], [ 82.9936666, 17.4782415 ], [ 82.9935728, 17.4771583 ], [ 82.9938733, 17.4760595 ], [ 82.9937388, 17.4757984 ], [ 82.9934521, 17.4756259 ], [ 82.9930658, 17.4756552 ], [ 82.9928365, 17.4759325 ], [ 82.9927714, 17.4763839 ], [ 82.9925768, 17.4767076 ], [ 82.992299, 17.4777242 ], [ 82.9920326, 17.478914 ], [ 82.9924795, 17.4800559 ], [ 82.9926216, 17.4808268 ], [ 82.9933012, 17.4815925 ], [ 82.9943785, 17.4819675 ], [ 82.9945135, 17.4820954 ], [ 82.994793, 17.4831224 ], [ 82.9952016, 17.4836333 ], [ 82.9962803, 17.4841376 ], [ 82.9962859, 17.4846524 ], [ 82.9962888, 17.4849098 ], [ 82.9962916, 17.4851674 ], [ 82.995755, 17.4851727 ], [ 82.9958801, 17.4843989 ], [ 82.9949348, 17.4837643 ], [ 82.9941257, 17.4833867 ], [ 82.9936394, 17.4821776 ], [ 82.9930342, 17.4817235 ], [ 82.9919514, 17.4808336 ], [ 82.9919062, 17.4804537 ], [ 82.9912521, 17.4782657 ], [ 82.9916468, 17.4773885 ], [ 82.9917747, 17.4769731 ], [ 82.9916569, 17.4759401 ], [ 82.9920957, 17.4751736 ], [ 82.9926547, 17.4749952 ], [ 82.9931345, 17.4750562 ], [ 82.9936483, 17.475275 ], [ 82.9941752, 17.4756617 ], [ 82.9943154, 17.4761752 ], [ 82.9946872, 17.4765253 ], [ 82.9949398, 17.4765108 ], [ 82.9950503, 17.475964 ], [ 82.9947032, 17.4748839 ], [ 82.9945668, 17.4746278 ], [ 82.9940289, 17.474504 ], [ 82.9932185, 17.4739971 ], [ 82.9913209, 17.4722137 ], [ 82.9907843, 17.472219 ], [ 82.9902451, 17.4719671 ], [ 82.9899741, 17.4717123 ], [ 82.9880877, 17.4709586 ], [ 82.9878167, 17.4707038 ], [ 82.982429, 17.4686978 ], [ 82.982158, 17.468443 ], [ 82.9800036, 17.4676919 ], [ 82.979467, 17.4676974 ], [ 82.979196, 17.4674426 ], [ 82.975963, 17.4661873 ], [ 82.9754264, 17.4661926 ], [ 82.973272, 17.4654415 ], [ 82.9730009, 17.4651867 ], [ 82.9721935, 17.4649372 ], [ 82.9719225, 17.4646825 ], [ 82.9713859, 17.4646878 ], [ 82.9700363, 17.4639287 ], [ 82.9694997, 17.463934 ], [ 82.9641125, 17.4619274 ], [ 82.9635761, 17.4619327 ], [ 82.9627658, 17.4614256 ], [ 82.9619554, 17.4609187 ], [ 82.961419, 17.460924 ], [ 82.961148, 17.4606692 ], [ 82.9573786, 17.4594188 ], [ 82.9571076, 17.459164 ], [ 82.9563001, 17.4589144 ], [ 82.9560291, 17.4586596 ], [ 82.9554926, 17.4586649 ], [ 82.9552215, 17.4584101 ], [ 82.9517207, 17.457157 ], [ 82.9506394, 17.4563952 ], [ 82.9500974, 17.4558855 ], [ 82.9495595, 17.4557624 ], [ 82.9494139, 17.4547339 ], [ 82.9487356, 17.4539681 ], [ 82.9482424, 17.453559 ], [ 82.9479199, 17.4529461 ], [ 82.947382, 17.4528221 ], [ 82.9465719, 17.4523151 ], [ 82.9460299, 17.4518053 ], [ 82.9438759, 17.451054 ], [ 82.9430711, 17.4510618 ], [ 82.9422635, 17.4508123 ], [ 82.9419927, 17.4505574 ], [ 82.9414561, 17.4505626 ], [ 82.9411851, 17.4503077 ], [ 82.9392966, 17.4492962 ], [ 82.9384892, 17.4490465 ], [ 82.9382181, 17.4487917 ], [ 82.9363323, 17.4480376 ], [ 82.9360613, 17.4477828 ], [ 82.9355249, 17.4477879 ], [ 82.9333709, 17.4470365 ], [ 82.932558, 17.4462718 ], [ 82.9309416, 17.4456443 ], [ 82.9308018, 17.4451306 ], [ 82.9301235, 17.4443648 ], [ 82.9290492, 17.4442459 ], [ 82.9282391, 17.4437388 ], [ 82.9268925, 17.4432368 ], [ 82.9266215, 17.4429819 ], [ 82.9252838, 17.4428912 ], [ 82.9236366, 17.4422018 ], [ 82.9220989, 17.4415445 ], [ 82.9199772, 17.4407645 ], [ 82.9155497, 17.4390098 ], [ 82.9129593, 17.4379051 ], [ 82.9116621, 17.4373588 ], [ 82.9097195, 17.4365864 ], [ 82.907976, 17.4358797 ], [ 82.9058025, 17.4349957 ], [ 82.9036436, 17.4340795 ], [ 82.902604, 17.433698 ], [ 82.9015707, 17.4332773 ], [ 82.9007018, 17.4328321 ], [ 82.8996092, 17.432387 ], [ 82.8986472, 17.4319521 ], [ 82.8978736, 17.4316403 ], [ 82.8958436, 17.4308509 ], [ 82.8945245, 17.4302746 ], [ 82.8919366, 17.4291307 ], [ 82.8891246, 17.4278649 ], [ 82.8876353, 17.4272757 ], [ 82.8858934, 17.4265137 ], [ 82.8829204, 17.4252182 ], [ 82.8815719, 17.424818 ], [ 82.881365, 17.4242746 ], [ 82.8810887, 17.4238473 ], [ 82.8805484, 17.4234667 ], [ 82.8801002, 17.4232141 ], [ 82.8798862, 17.4229329 ], [ 82.8795692, 17.4229133 ], [ 82.8793242, 17.422251 ], [ 82.8790138, 17.4219019 ], [ 82.8786155, 17.4214616 ], [ 82.8783628, 17.4213219 ], [ 82.8779123, 17.4207112 ], [ 82.8776715, 17.4205188 ], [ 82.8773304, 17.4203805 ], [ 82.8771816, 17.4205572 ], [ 82.8769266, 17.420506 ], [ 82.8765655, 17.4202908 ], [ 82.8765525, 17.4204486 ], [ 82.8759356, 17.4204124 ], [ 82.8753169, 17.4202314 ], [ 82.8752238, 17.4202041 ], [ 82.8746047, 17.4201257 ], [ 82.8732658, 17.4195434 ], [ 82.8724586, 17.4192935 ], [ 82.8713964, 17.4187975 ], [ 82.8708029, 17.4185878 ], [ 82.8702473, 17.4183212 ], [ 82.8698829, 17.4183311 ], [ 82.8696327, 17.4184192 ], [ 82.8695607, 17.4185528 ], [ 82.8696613, 17.418651 ], [ 82.8701746, 17.4189151 ], [ 82.8707093, 17.4193503 ], [ 82.8708991, 17.4195173 ], [ 82.871006, 17.4195372 ], [ 82.8712278, 17.4194115 ], [ 82.8713318, 17.4202316 ], [ 82.8714578, 17.4211505 ], [ 82.8715416, 17.4214914 ], [ 82.8717546, 17.4221031 ], [ 82.8719893, 17.4226307 ], [ 82.8721492, 17.4230907 ], [ 82.8723992, 17.4235051 ], [ 82.8723943, 17.4242817 ], [ 82.8726918, 17.4250822 ], [ 82.8729492, 17.4260917 ], [ 82.8730725, 17.4268845 ], [ 82.871118, 17.4271363 ], [ 82.8707657, 17.4268361 ], [ 82.8704739, 17.4267299 ], [ 82.8703455, 17.4264024 ], [ 82.8701808, 17.4255924 ], [ 82.8697955, 17.4252973 ], [ 82.8692991, 17.4251176 ], [ 82.8686746, 17.4247538 ], [ 82.868371, 17.4242361 ], [ 82.8679544, 17.4236436 ], [ 82.8677348, 17.4235661 ], [ 82.8671935, 17.4238749 ], [ 82.8667463, 17.4243779 ], [ 82.8663417, 17.4250933 ], [ 82.8660001, 17.4259057 ], [ 82.8657556, 17.4271814 ], [ 82.8655775, 17.4283909 ], [ 82.864945, 17.4297422 ], [ 82.8643962, 17.4302087 ], [ 82.8638757, 17.4304814 ], [ 82.8636491, 17.4307819 ], [ 82.8634861, 17.4311879 ], [ 82.863517, 17.4319432 ], [ 82.8634432, 17.4328524 ], [ 82.8633096, 17.4333858 ], [ 82.8631243, 17.4336273 ], [ 82.8629307, 17.4336641 ], [ 82.862528, 17.4340995 ], [ 82.8622797, 17.4346629 ], [ 82.8620112, 17.4353032 ], [ 82.861575, 17.4360587 ], [ 82.8614408, 17.4360011 ], [ 82.8619978, 17.4348486 ], [ 82.8621589, 17.4343172 ], [ 82.8624273, 17.4338369 ], [ 82.8626915, 17.4335503 ], [ 82.8629298, 17.4334372 ], [ 82.8630816, 17.433238 ], [ 82.8631418, 17.4330592 ], [ 82.8632552, 17.4326667 ], [ 82.8632754, 17.4320072 ], [ 82.8631948, 17.4318792 ], [ 82.8631412, 17.4314694 ], [ 82.863262, 17.4308911 ], [ 82.8635434, 17.4303649 ], [ 82.8639979, 17.4299782 ], [ 82.8645576, 17.4294853 ], [ 82.8648932, 17.4289037 ], [ 82.8650265, 17.4279372 ], [ 82.8651038, 17.4269949 ], [ 82.8653538, 17.425697 ], [ 82.865993, 17.4244522 ], [ 82.8660877, 17.4239913 ], [ 82.8659477, 17.4235042 ], [ 82.8663961, 17.4217071 ], [ 82.8663376, 17.4215338 ], [ 82.8660893, 17.4214008 ], [ 82.8658247, 17.4213587 ], [ 82.8653443, 17.4213587 ], [ 82.864649, 17.4211916 ], [ 82.8641316, 17.4209186 ], [ 82.8634707, 17.4208396 ], [ 82.8625927, 17.4208873 ], [ 82.8616877, 17.4212272 ], [ 82.8606471, 17.4216411 ], [ 82.8596536, 17.4215554 ], [ 82.8583913, 17.4215645 ], [ 82.8572523, 17.4216369 ], [ 82.8562214, 17.4218048 ], [ 82.8553941, 17.4222575 ], [ 82.854802, 17.4227349 ], [ 82.8542481, 17.4230268 ], [ 82.8537391, 17.4233983 ], [ 82.8532836, 17.4239841 ], [ 82.8528324, 17.4248082 ], [ 82.8518774, 17.4253606 ], [ 82.8505819, 17.4255594 ], [ 82.8487878, 17.425775 ], [ 82.8473646, 17.425773 ], [ 82.844876, 17.4253044 ], [ 82.8435397, 17.4247685 ], [ 82.8423414, 17.4243439 ], [ 82.841558, 17.4238714 ], [ 82.8397392, 17.4224649 ], [ 82.8382366, 17.421573 ], [ 82.8381392, 17.421259 ], [ 82.8387319, 17.4209859 ], [ 82.8403292, 17.4220489 ], [ 82.8411748, 17.4223818 ], [ 82.8424564, 17.4233075 ], [ 82.843313, 17.4238303 ], [ 82.8439225, 17.4242151 ], [ 82.8449506, 17.4246319 ], [ 82.8462127, 17.4249229 ], [ 82.8479311, 17.4251471 ], [ 82.8494469, 17.4249161 ], [ 82.8503033, 17.4247841 ], [ 82.8513173, 17.4244401 ], [ 82.8520772, 17.4239763 ], [ 82.8526807, 17.4234334 ], [ 82.8530479, 17.4229518 ], [ 82.8537138, 17.4224306 ], [ 82.8545134, 17.42194 ], [ 82.8551404, 17.4213446 ], [ 82.8560473, 17.4210143 ], [ 82.8572185, 17.4208307 ], [ 82.858299, 17.4208307 ], [ 82.8591754, 17.4205403 ], [ 82.8599442, 17.4205494 ], [ 82.8606665, 17.4203056 ], [ 82.8614679, 17.4200715 ], [ 82.863157, 17.4194891 ], [ 82.8650752, 17.4193101 ], [ 82.8655424, 17.4188901 ], [ 82.8660264, 17.4185551 ], [ 82.8663918, 17.4182475 ], [ 82.8666911, 17.4179347 ], [ 82.8671008, 17.4177237 ], [ 82.8676019, 17.4175951 ], [ 82.8687598, 17.4178397 ], [ 82.869595, 17.4179212 ], [ 82.870265, 17.4178332 ], [ 82.8705536, 17.4175318 ], [ 82.8707434, 17.4173687 ], [ 82.8705536, 17.4172148 ], [ 82.8702224, 17.4170362 ], [ 82.869974, 17.4165237 ], [ 82.8694741, 17.4159741 ], [ 82.8693269, 17.4159184 ], [ 82.869073, 17.4161281 ], [ 82.8686744, 17.4159922 ], [ 82.8682948, 17.4161009 ], [ 82.8674517, 17.4157703 ], [ 82.8665959, 17.4155485 ], [ 82.8660863, 17.4152255 ], [ 82.8655381, 17.4150516 ], [ 82.8649085, 17.4147075 ], [ 82.8643075, 17.4146821 ], [ 82.8638262, 17.414482 ], [ 82.8623204, 17.4139561 ], [ 82.8602625, 17.4132817 ], [ 82.8591678, 17.4128605 ], [ 82.8577381, 17.4122517 ], [ 82.855932, 17.4115566 ], [ 82.8542921, 17.4110199 ], [ 82.8513453, 17.409779 ], [ 82.8490554, 17.4088869 ], [ 82.8479524, 17.4085037 ], [ 82.8471303, 17.4079422 ], [ 82.8463205, 17.4074347 ], [ 82.8455159, 17.4074421 ], [ 82.8452453, 17.4071871 ], [ 82.8417457, 17.405932 ], [ 82.840397, 17.4051718 ], [ 82.8395925, 17.4051792 ], [ 82.8371659, 17.403914 ], [ 82.8358223, 17.4036689 ], [ 82.834742, 17.4029063 ], [ 82.8317841, 17.4021611 ], [ 82.8304354, 17.4014009 ], [ 82.829899, 17.4014058 ], [ 82.8290894, 17.4008982 ], [ 82.8274751, 17.4003981 ], [ 82.8266654, 17.3998904 ], [ 82.826129, 17.3998953 ], [ 82.8250487, 17.3991327 ], [ 82.8228954, 17.3983797 ], [ 82.8226248, 17.3981248 ], [ 82.8220884, 17.3981297 ], [ 82.8218178, 17.3978747 ], [ 82.8199327, 17.3971193 ], [ 82.8188499, 17.3960991 ], [ 82.818044, 17.3959781 ], [ 82.8181674, 17.3949471 ], [ 82.8182969, 17.3944308 ], [ 82.8153381, 17.3935561 ], [ 82.8147966, 17.393046 ], [ 82.8131825, 17.3925457 ], [ 82.8129117, 17.3922905 ], [ 82.8115658, 17.3917878 ], [ 82.811295, 17.3915327 ], [ 82.807796, 17.3902769 ], [ 82.8067159, 17.3895141 ], [ 82.8051017, 17.3890137 ], [ 82.804831, 17.3887587 ], [ 82.8037558, 17.3885109 ], [ 82.8029463, 17.3880031 ], [ 82.8016029, 17.3877578 ], [ 82.8013322, 17.3875026 ], [ 82.7997182, 17.3870021 ], [ 82.7989085, 17.3864945 ], [ 82.7972944, 17.385994 ], [ 82.7970238, 17.3857389 ], [ 82.7959486, 17.3854911 ], [ 82.7956779, 17.3852359 ], [ 82.7940639, 17.3847355 ], [ 82.7932544, 17.3842278 ], [ 82.7908308, 17.3832195 ], [ 82.7902945, 17.3832242 ], [ 82.789485, 17.3827166 ], [ 82.7870614, 17.3817081 ], [ 82.7867908, 17.3814531 ], [ 82.7862544, 17.3814578 ], [ 82.7854449, 17.38095 ], [ 82.7846354, 17.3804423 ], [ 82.7840992, 17.3804471 ], [ 82.7811368, 17.3791859 ], [ 82.7808662, 17.3789309 ], [ 82.78033, 17.3789356 ], [ 82.7800593, 17.3786805 ], [ 82.7792523, 17.3784302 ], [ 82.7789817, 17.3781751 ], [ 82.7779064, 17.3779271 ], [ 82.7776358, 17.377672 ], [ 82.7754831, 17.3769186 ], [ 82.7752124, 17.3766635 ], [ 82.7738668, 17.3761605 ], [ 82.7735961, 17.3759054 ], [ 82.7719821, 17.3754045 ], [ 82.7717116, 17.3751496 ], [ 82.7698269, 17.3743938 ], [ 82.7695564, 17.3741386 ], [ 82.7679424, 17.3736378 ], [ 82.7668624, 17.3728748 ], [ 82.766326, 17.3728795 ], [ 82.7649779, 17.372119 ], [ 82.7644415, 17.3721237 ], [ 82.7636322, 17.3716158 ], [ 82.7628227, 17.3711078 ], [ 82.7622865, 17.3711125 ], [ 82.7620159, 17.3708576 ], [ 82.7601314, 17.3701016 ], [ 82.7590514, 17.3693386 ], [ 82.7574376, 17.3688377 ], [ 82.7568965, 17.3683274 ], [ 82.7563601, 17.3683322 ], [ 82.7560894, 17.368077 ], [ 82.7542051, 17.367321 ], [ 82.7531251, 17.3665578 ], [ 82.7523183, 17.3663074 ], [ 82.7520477, 17.3660522 ], [ 82.7512408, 17.3658018 ], [ 82.7509702, 17.3655467 ], [ 82.7501633, 17.3652962 ], [ 82.749199338933735, 17.364615205558426 ], [ 82.7490834, 17.3645333 ], [ 82.7480084, 17.3642851 ], [ 82.7477377, 17.3640299 ], [ 82.7458534, 17.3632738 ], [ 82.7450441, 17.3627659 ], [ 82.7445077, 17.3627704 ], [ 82.7439666, 17.3622601 ], [ 82.7401979, 17.360748 ], [ 82.7396568, 17.3602377 ], [ 82.7388475, 17.3597296 ], [ 82.7377727, 17.3594815 ], [ 82.737502, 17.3592263 ], [ 82.7356152, 17.3582125 ], [ 82.7340017, 17.3577115 ], [ 82.7329218, 17.3569483 ], [ 82.7299602, 17.3556864 ], [ 82.7288804, 17.3549232 ], [ 82.7283442, 17.3549277 ], [ 82.7269963, 17.3541668 ], [ 82.7256483, 17.3534059 ], [ 82.7240348, 17.3529048 ], [ 82.7234937, 17.3523945 ], [ 82.7205323, 17.3511324 ], [ 82.7194525, 17.350369 ], [ 82.7175684, 17.3496126 ], [ 82.7172977, 17.3493575 ], [ 82.7164911, 17.3491069 ], [ 82.71595, 17.3485964 ], [ 82.7151431, 17.348346 ], [ 82.7148727, 17.3480906 ], [ 82.7140658, 17.34784 ], [ 82.7135249, 17.3473297 ], [ 82.7119114, 17.3468285 ], [ 82.7113703, 17.346318 ], [ 82.7094839, 17.345304 ], [ 82.7081384, 17.3448005 ], [ 82.7070589, 17.3440371 ], [ 82.7057136, 17.3435337 ], [ 82.7051724, 17.3430232 ], [ 82.7043658, 17.3427725 ], [ 82.7040953, 17.3425172 ], [ 82.7022112, 17.3417606 ], [ 82.7014021, 17.3412526 ], [ 82.7008612, 17.3407421 ], [ 82.700325, 17.3407467 ], [ 82.6984386, 17.3397327 ], [ 82.6976295, 17.3392245 ], [ 82.6968205, 17.3387162 ], [ 82.6962842, 17.3387208 ], [ 82.6954728, 17.3379551 ], [ 82.6935888, 17.3371984 ], [ 82.6930479, 17.3366879 ], [ 82.6925117, 17.3366924 ], [ 82.6914321, 17.335929 ], [ 82.6895484, 17.3351723 ], [ 82.6890073, 17.3346618 ], [ 82.6873917, 17.333903 ], [ 82.6868508, 17.3333925 ], [ 82.6863144, 17.333397 ], [ 82.685235, 17.3326335 ], [ 82.6841602, 17.3323849 ], [ 82.6836193, 17.3318744 ], [ 82.6811946, 17.3306072 ], [ 82.679847, 17.3298459 ], [ 82.6793061, 17.3293354 ], [ 82.6782314, 17.3290869 ], [ 82.6774223, 17.3285786 ], [ 82.6768814, 17.3280682 ], [ 82.6755363, 17.3275643 ], [ 82.6749954, 17.3270538 ], [ 82.6741887, 17.326803 ], [ 82.673648, 17.3262925 ], [ 82.6723027, 17.3257886 ], [ 82.6714938, 17.3252804 ], [ 82.6709529, 17.3247699 ], [ 82.6696077, 17.324266 ], [ 82.6687966, 17.3235002 ], [ 82.6682604, 17.3235046 ], [ 82.6677194, 17.3229941 ], [ 82.6663743, 17.3224902 ], [ 82.6655654, 17.321982 ], [ 82.6650245, 17.3214713 ], [ 82.6631409, 17.3207144 ], [ 82.6628705, 17.320459 ], [ 82.6615231, 17.3196977 ], [ 82.6607142, 17.3191893 ], [ 82.660178, 17.3191939 ], [ 82.6593668, 17.318428 ], [ 82.6555951, 17.3163989 ], [ 82.65425, 17.3158949 ], [ 82.6531683, 17.3148737 ], [ 82.6518234, 17.3143698 ], [ 82.6512825, 17.3138591 ], [ 82.6499353, 17.3130977 ], [ 82.6491287, 17.3128469 ], [ 82.6477815, 17.3120854 ], [ 82.6472405, 17.3115747 ], [ 82.6456252, 17.3108153 ], [ 82.6448142, 17.3100495 ], [ 82.644278, 17.3100538 ], [ 82.643469, 17.3095454 ], [ 82.6421219, 17.3087839 ], [ 82.6415811, 17.3082732 ], [ 82.6402362, 17.3077692 ], [ 82.6394273, 17.3072608 ], [ 82.6386163, 17.3064948 ], [ 82.6378098, 17.3062438 ], [ 82.6345747, 17.3042099 ], [ 82.6337681, 17.3039589 ], [ 82.6329571, 17.3031929 ], [ 82.6321529, 17.3031995 ], [ 82.6308011, 17.3019228 ], [ 82.6302649, 17.3019272 ], [ 82.6294562, 17.3014188 ], [ 82.6289155, 17.3009081 ], [ 82.628109, 17.3006571 ], [ 82.6275685, 17.3001464 ], [ 82.6267597, 17.2996378 ], [ 82.6262236, 17.2996422 ], [ 82.6248718, 17.2983655 ], [ 82.6237974, 17.2981168 ], [ 82.6232566, 17.2976061 ], [ 82.6213712, 17.2965912 ], [ 82.6205602, 17.2958251 ], [ 82.6197537, 17.2955741 ], [ 82.6192132, 17.2950635 ], [ 82.6181364, 17.2945569 ], [ 82.6175957, 17.2940463 ], [ 82.6167872, 17.2935377 ], [ 82.6159818, 17.293416 ], [ 82.6152397, 17.2928147 ], [ 82.6143621, 17.2921413 ], [ 82.613825, 17.2920164 ], [ 82.6130162, 17.2915078 ], [ 82.6124757, 17.2909971 ], [ 82.6119395, 17.2910015 ], [ 82.6111287, 17.2902353 ], [ 82.609784, 17.289731 ], [ 82.608973, 17.288965 ], [ 82.6076282, 17.2884606 ], [ 82.6057407, 17.287188 ], [ 82.6038577, 17.2864305 ], [ 82.6027787, 17.2856666 ], [ 82.6017053, 17.2855467 ], [ 82.6017142, 17.2865768 ], [ 82.6011782, 17.2865811 ], [ 82.6011737, 17.2860661 ], [ 82.6006388, 17.2861986 ], [ 82.5995621, 17.2856923 ], [ 82.5984899, 17.2857008 ], [ 82.597956, 17.2859625 ], [ 82.5960818, 17.2862351 ], [ 82.5923224, 17.2854923 ], [ 82.5909754, 17.2847303 ], [ 82.5893661, 17.2846148 ], [ 82.5882916, 17.2843657 ], [ 82.5877534, 17.2841124 ], [ 82.5873277, 17.2838309 ], [ 82.5866768, 17.2836059 ], [ 82.5866745, 17.2833483 ], [ 82.587481, 17.283444 ], [ 82.5883814, 17.2841952 ], [ 82.5894559, 17.2844441 ], [ 82.5907042, 17.2843466 ], [ 82.5906997, 17.2838316 ], [ 82.5909688, 17.2839578 ], [ 82.5914147, 17.284171 ], [ 82.5915082, 17.2843402 ], [ 82.5917764, 17.2843381 ], [ 82.5917741, 17.2840807 ], [ 82.5913693, 17.2838263 ], [ 82.5906887, 17.2825439 ], [ 82.5885432, 17.2824318 ], [ 82.5850629, 17.2829743 ], [ 82.584797, 17.283234 ], [ 82.5837248, 17.2832425 ], [ 82.582389, 17.2837681 ], [ 82.5802446, 17.2837849 ], [ 82.5797063, 17.2835316 ], [ 82.5789021, 17.2835381 ], [ 82.5772894, 17.2830355 ], [ 82.576216, 17.2829157 ], [ 82.5754086, 17.2825352 ], [ 82.574331, 17.2819004 ], [ 82.5736523, 17.2810277 ], [ 82.5729743, 17.2803256 ], [ 82.5731504, 17.2802498 ], [ 82.5738911, 17.2809288 ], [ 82.5744207, 17.2817297 ], [ 82.574866, 17.2817669 ], [ 82.5756734, 17.2821474 ], [ 82.5756757, 17.2824048 ], [ 82.576306, 17.2827452 ], [ 82.5770182, 17.2826518 ], [ 82.5783616, 17.2830272 ], [ 82.5805082, 17.2832678 ], [ 82.5826526, 17.283251 ], [ 82.5829186, 17.2829913 ], [ 82.5845224, 17.2824636 ], [ 82.5847883, 17.2822039 ], [ 82.5853243, 17.2821997 ], [ 82.5855903, 17.2819401 ], [ 82.5865698, 17.2818917 ], [ 82.5866636, 17.2820608 ], [ 82.5861274, 17.282065 ], [ 82.5861297, 17.2823226 ], [ 82.5880061, 17.2823077 ], [ 82.5877335, 17.2817947 ], [ 82.5867518, 17.281714 ], [ 82.586657, 17.2812882 ], [ 82.5890705, 17.2813974 ], [ 82.5914918, 17.2824084 ], [ 82.5918989, 17.2830495 ], [ 82.593656, 17.2847091 ], [ 82.5963377, 17.284817 ], [ 82.5959038, 17.2843366 ], [ 82.5952587, 17.2840529 ], [ 82.5947205, 17.2837996 ], [ 82.5947182, 17.2835422 ], [ 82.5953485, 17.2838824 ], [ 82.595887, 17.2841357 ], [ 82.59633, 17.2839151 ], [ 82.5976713, 17.2840338 ], [ 82.5976757, 17.2845488 ], [ 82.5990149, 17.284409 ], [ 82.5998257, 17.285175 ], [ 82.6014373, 17.285549 ], [ 82.600622, 17.2842678 ], [ 82.6000871, 17.2844003 ], [ 82.5992763, 17.2836343 ], [ 82.5979316, 17.2831298 ], [ 82.597123, 17.2826212 ], [ 82.5965825, 17.2821104 ], [ 82.5952378, 17.2816061 ], [ 82.5944269, 17.2808399 ], [ 82.5930822, 17.2803355 ], [ 82.5925417, 17.2798248 ], [ 82.5917354, 17.2795736 ], [ 82.5909246, 17.2788074 ], [ 82.5903863, 17.2785541 ], [ 82.5898503, 17.2785583 ], [ 82.5887692, 17.2775367 ], [ 82.5868864, 17.276779 ], [ 82.5863459, 17.2762682 ], [ 82.5849991, 17.2755063 ], [ 82.5836545, 17.2750017 ], [ 82.5825734, 17.2739801 ], [ 82.5814992, 17.273731 ], [ 82.5804183, 17.2727095 ], [ 82.5790735, 17.2722049 ], [ 82.5782629, 17.2714387 ], [ 82.5774566, 17.2711875 ], [ 82.5769161, 17.2706766 ], [ 82.5753015, 17.2699166 ], [ 82.5744907, 17.2691504 ], [ 82.5736844, 17.2688993 ], [ 82.572876, 17.2683905 ], [ 82.5723355, 17.2678796 ], [ 82.5699123, 17.2666108 ], [ 82.5691017, 17.2658446 ], [ 82.5677573, 17.26534 ], [ 82.5664062, 17.2640629 ], [ 82.5655999, 17.2638116 ], [ 82.5650596, 17.2633007 ], [ 82.5631747, 17.2622852 ], [ 82.562094, 17.2612635 ], [ 82.5612877, 17.2610123 ], [ 82.5585924, 17.2592304 ], [ 82.5577861, 17.258979 ], [ 82.556165, 17.2574464 ], [ 82.555629, 17.2574506 ], [ 82.5550908, 17.2571971 ], [ 82.5542803, 17.2564307 ], [ 82.5515873, 17.2549063 ], [ 82.5507766, 17.2541401 ], [ 82.5491622, 17.2533797 ], [ 82.5483518, 17.2526133 ], [ 82.5475455, 17.2523621 ], [ 82.5448504, 17.25058 ], [ 82.5440399, 17.2498137 ], [ 82.5426935, 17.2490512 ], [ 82.5416151, 17.2482869 ], [ 82.5408046, 17.2475205 ], [ 82.5402665, 17.2472671 ], [ 82.5389201, 17.2465048 ], [ 82.5383798, 17.2459938 ], [ 82.5375737, 17.2457424 ], [ 82.5359528, 17.2442096 ], [ 82.5351467, 17.2439582 ], [ 82.5337961, 17.2426808 ], [ 82.5329899, 17.2424294 ], [ 82.5319093, 17.2414075 ], [ 82.5300227, 17.240134 ], [ 82.5292167, 17.2398826 ], [ 82.5273302, 17.2386094 ], [ 82.5262497, 17.2375872 ], [ 82.5243654, 17.2365714 ], [ 82.5238251, 17.2360603 ], [ 82.523019, 17.2358089 ], [ 82.5216686, 17.2345315 ], [ 82.5205924, 17.2340244 ], [ 82.5197822, 17.233258 ], [ 82.5184359, 17.2324956 ], [ 82.5176255, 17.231729 ], [ 82.5152033, 17.2304595 ], [ 82.5141229, 17.2294374 ], [ 82.5130468, 17.2289305 ], [ 82.5116964, 17.2276528 ], [ 82.5108903, 17.2274013 ], [ 82.5095399, 17.2261238 ], [ 82.508734, 17.2258723 ], [ 82.5076536, 17.2248502 ], [ 82.5063076, 17.2240875 ], [ 82.5054973, 17.223321 ], [ 82.5041513, 17.2225583 ], [ 82.503073, 17.2217938 ], [ 82.502263, 17.2210273 ], [ 82.5014548, 17.2205181 ], [ 82.5009179, 17.2203939 ], [ 82.5007792, 17.2198798 ], [ 82.5001035, 17.2191121 ], [ 82.4995665, 17.218987 ], [ 82.4987586, 17.2184778 ], [ 82.4968723, 17.2172042 ], [ 82.4955221, 17.2159265 ], [ 82.4947162, 17.215675 ], [ 82.493366, 17.2143971 ], [ 82.4925601, 17.2141456 ], [ 82.4912099, 17.2128679 ], [ 82.490135, 17.2124899 ], [ 82.4899965, 17.2119759 ], [ 82.4893208, 17.2112081 ], [ 82.4882458, 17.2108294 ], [ 82.4871659, 17.2098071 ], [ 82.4852798, 17.2085332 ], [ 82.4847429, 17.2084089 ], [ 82.4844688, 17.2076383 ], [ 82.4839319, 17.207513 ], [ 82.4831218, 17.2067464 ], [ 82.4820438, 17.2059817 ], [ 82.4809659, 17.2052168 ], [ 82.4801591, 17.2048369 ], [ 82.4798848, 17.2040664 ], [ 82.4793479, 17.2039411 ], [ 82.4785401, 17.2034319 ], [ 82.47773, 17.2026651 ], [ 82.4769232, 17.2022853 ], [ 82.476919, 17.20177 ], [ 82.4763821, 17.2016449 ], [ 82.4755722, 17.2008782 ], [ 82.4744962, 17.2003709 ], [ 82.4736873, 17.1997334 ], [ 82.4736834, 17.1992184 ], [ 82.4731464, 17.199093 ], [ 82.4723384, 17.1985839 ], [ 82.4712585, 17.1975616 ], [ 82.4704537, 17.1974391 ], [ 82.4703152, 17.196925 ], [ 82.4690997, 17.1956461 ], [ 82.4682959, 17.1956519 ], [ 82.4681576, 17.1951378 ], [ 82.467212, 17.1941144 ], [ 82.4661372, 17.1937355 ], [ 82.4655983, 17.1933535 ], [ 82.4654598, 17.1928394 ], [ 82.4650544, 17.1923272 ], [ 82.4642496, 17.192204 ], [ 82.4637106, 17.191822 ], [ 82.4635722, 17.1913079 ], [ 82.4631666, 17.1907958 ], [ 82.462092, 17.1904166 ], [ 82.461553, 17.1900347 ], [ 82.4614146, 17.1895206 ], [ 82.461009, 17.1890084 ], [ 82.4602043, 17.1888852 ], [ 82.4591254, 17.1879919 ], [ 82.4588516, 17.1872212 ], [ 82.4580466, 17.1870978 ], [ 82.4572379, 17.1864603 ], [ 82.4569638, 17.1856895 ], [ 82.4558892, 17.1853106 ], [ 82.4548104, 17.1844174 ], [ 82.4548064, 17.1839022 ], [ 82.4540017, 17.1837788 ], [ 82.4531929, 17.1831413 ], [ 82.4530544, 17.1826272 ], [ 82.452649, 17.182115 ], [ 82.4518442, 17.1819916 ], [ 82.4513054, 17.1816094 ], [ 82.451167, 17.1810953 ], [ 82.4507614, 17.1805831 ], [ 82.4499567, 17.1804597 ], [ 82.4494178, 17.1800778 ], [ 82.4492795, 17.1795637 ], [ 82.4486042, 17.1787958 ], [ 82.4475305, 17.1785459 ], [ 82.4473921, 17.1780318 ], [ 82.4467166, 17.1772641 ], [ 82.4461799, 17.1771386 ], [ 82.4442905, 17.1753494 ], [ 82.4437527, 17.1750955 ], [ 82.4426741, 17.1742023 ], [ 82.4426702, 17.1736873 ], [ 82.4413266, 17.1731817 ], [ 82.4411882, 17.1726676 ], [ 82.4407828, 17.1721554 ], [ 82.440246, 17.1720299 ], [ 82.4380867, 17.169985 ], [ 82.4370102, 17.1693492 ], [ 82.4367363, 17.1685784 ], [ 82.4361996, 17.1684531 ], [ 82.4359297, 17.1681974 ], [ 82.4353929, 17.1680729 ], [ 82.4352546, 17.1675588 ], [ 82.4348491, 17.1670466 ], [ 82.4340434, 17.1667946 ], [ 82.4337696, 17.1660239 ], [ 82.4329639, 17.1657722 ], [ 82.4329599, 17.1652571 ], [ 82.4324231, 17.1651316 ], [ 82.4318834, 17.1646204 ], [ 82.4313466, 17.1644958 ], [ 82.4312083, 17.1639818 ], [ 82.430803, 17.1634694 ], [ 82.4299973, 17.1632176 ], [ 82.4297235, 17.1624469 ], [ 82.4291867, 17.1623214 ], [ 82.4270278, 17.1602762 ], [ 82.4262211, 17.1598961 ], [ 82.4260828, 17.1593819 ], [ 82.4256775, 17.1588697 ], [ 82.4251417, 17.1588735 ], [ 82.4251378, 17.1583584 ], [ 82.424601, 17.1582329 ], [ 82.4237925, 17.1575953 ], [ 82.4235186, 17.1568245 ], [ 82.4224451, 17.1565745 ], [ 82.4223067, 17.1560604 ], [ 82.4213617, 17.1550368 ], [ 82.420825, 17.1549113 ], [ 82.4200164, 17.1542736 ], [ 82.4197428, 17.1535028 ], [ 82.4189391, 17.1535085 ], [ 82.4188008, 17.1529942 ], [ 82.4182591, 17.1522254 ], [ 82.4178539, 17.1517132 ], [ 82.4165105, 17.1512074 ], [ 82.4163721, 17.1506934 ], [ 82.4154273, 17.1496697 ], [ 82.4148906, 17.1495442 ], [ 82.4143519, 17.1491621 ], [ 82.4142136, 17.148648 ], [ 82.4138083, 17.1481356 ], [ 82.4132716, 17.1480101 ], [ 82.412463, 17.1473724 ], [ 82.4121894, 17.1466017 ], [ 82.4113839, 17.1463498 ], [ 82.4111102, 17.145579 ], [ 82.4105734, 17.1454535 ], [ 82.4084158, 17.1435373 ], [ 82.408412, 17.1430222 ], [ 82.4078753, 17.1428967 ], [ 82.4070667, 17.1422589 ], [ 82.4070629, 17.1417438 ], [ 82.4059894, 17.1414938 ], [ 82.4058513, 17.1409795 ], [ 82.4050418, 17.1402126 ], [ 82.4049044, 17.1396983 ], [ 82.403831, 17.1394482 ], [ 82.4036927, 17.1389342 ], [ 82.4030159, 17.1379085 ], [ 82.4019424, 17.1376584 ], [ 82.4018042, 17.1371443 ], [ 82.4015343, 17.1368886 ], [ 82.4013971, 17.1363743 ], [ 82.4003238, 17.1361243 ], [ 82.4001854, 17.1356102 ], [ 82.3996458, 17.1350988 ], [ 82.3995086, 17.1345845 ], [ 82.3989718, 17.134459 ], [ 82.3976239, 17.1333099 ], [ 82.3976201, 17.1327947 ], [ 82.3970834, 17.1326692 ], [ 82.3968137, 17.1324135 ], [ 82.3962769, 17.1322889 ], [ 82.3961387, 17.1317746 ], [ 82.3947898, 17.1304963 ], [ 82.3946524, 17.129982 ], [ 82.3941168, 17.1299858 ], [ 82.3941128, 17.1294705 ], [ 82.3935763, 17.1293451 ], [ 82.3930376, 17.1289629 ], [ 82.3928995, 17.1284488 ], [ 82.3924942, 17.1279364 ], [ 82.3919577, 17.1278109 ], [ 82.3908794, 17.1269173 ], [ 82.3906059, 17.1261464 ], [ 82.3895326, 17.1258964 ], [ 82.3893945, 17.1253821 ], [ 82.3884498, 17.1243583 ], [ 82.3876443, 17.1241064 ], [ 82.3875062, 17.1235921 ], [ 82.3869666, 17.1230806 ], [ 82.3868293, 17.1225666 ], [ 82.385756, 17.1223163 ], [ 82.3856179, 17.1218023 ], [ 82.3815716, 17.1179665 ], [ 82.3814343, 17.1174522 ], [ 82.3808978, 17.1173267 ], [ 82.3803593, 17.1169444 ], [ 82.3800856, 17.1161736 ], [ 82.3795491, 17.116048 ], [ 82.378471, 17.1151544 ], [ 82.3783329, 17.1146401 ], [ 82.3779278, 17.1141279 ], [ 82.3773913, 17.1140022 ], [ 82.3760435, 17.1128529 ], [ 82.3760397, 17.1123377 ], [ 82.3752353, 17.1122139 ], [ 82.3746969, 17.1118317 ], [ 82.3745587, 17.1113175 ], [ 82.3738838, 17.1105494 ], [ 82.3733472, 17.1104239 ], [ 82.3728088, 17.1100415 ], [ 82.3726706, 17.1095275 ], [ 82.3722656, 17.1090151 ], [ 82.371729, 17.1088894 ], [ 82.3711905, 17.1085072 ], [ 82.3710524, 17.107993 ], [ 82.3707827, 17.1077373 ], [ 82.3706455, 17.107223 ], [ 82.3701089, 17.1070975 ], [ 82.369031, 17.1062037 ], [ 82.3690273, 17.1056887 ], [ 82.3684907, 17.105563 ], [ 82.3676825, 17.1049249 ], [ 82.3676787, 17.1044099 ], [ 82.3671431, 17.1044135 ], [ 82.3671393, 17.1038985 ], [ 82.366334, 17.1036463 ], [ 82.3661958, 17.1031321 ], [ 82.3657908, 17.1026197 ], [ 82.365523, 17.1026216 ], [ 82.3653924, 17.1031376 ], [ 82.3651265, 17.1033969 ], [ 82.3649966, 17.1039128 ], [ 82.3658012, 17.1040359 ], [ 82.3663404, 17.1045473 ], [ 82.3670125, 17.1049295 ], [ 82.3672858, 17.1057004 ], [ 82.3672915, 17.106473 ], [ 82.366894, 17.1069909 ], [ 82.3658246, 17.1072557 ], [ 82.3658322, 17.1082859 ], [ 82.3655633, 17.1081583 ], [ 82.3650286, 17.1082912 ], [ 82.3647702, 17.1095808 ], [ 82.3653058, 17.1095772 ], [ 82.3654431, 17.1100914 ], [ 82.3658481, 17.1104745 ], [ 82.3663847, 17.1106002 ], [ 82.3663884, 17.1111152 ], [ 82.366925, 17.11124 ], [ 82.3673291, 17.111624 ], [ 82.368142, 17.1129064 ], [ 82.3686871, 17.1141905 ], [ 82.3686927, 17.1149631 ], [ 82.3684268, 17.1152226 ], [ 82.3685839, 17.1183122 ], [ 82.3691204, 17.1184369 ], [ 82.3692548, 17.1185652 ], [ 82.3694005, 17.1201096 ], [ 82.3699362, 17.120106 ], [ 82.3699494, 17.1219088 ], [ 82.370486, 17.1220336 ], [ 82.3706205, 17.1221619 ], [ 82.3715829, 17.1255036 ], [ 82.3731947, 17.1261362 ], [ 82.3746778, 17.1275431 ], [ 82.3754984, 17.1298555 ], [ 82.3756404, 17.1308848 ], [ 82.3761762, 17.1308812 ], [ 82.3763153, 17.1316529 ], [ 82.3769902, 17.1322919 ], [ 82.3777957, 17.1325439 ], [ 82.3787394, 17.1334394 ], [ 82.379011, 17.1339527 ], [ 82.3798203, 17.1347198 ], [ 82.3806334, 17.1360022 ], [ 82.3806409, 17.1370323 ], [ 82.3803769, 17.1375492 ], [ 82.3803807, 17.1380644 ], [ 82.3798545, 17.1393558 ], [ 82.3798583, 17.1398708 ], [ 82.3795942, 17.1403878 ], [ 82.3786647, 17.1414244 ], [ 82.3778668, 17.1422025 ], [ 82.3767982, 17.1425957 ], [ 82.3762652, 17.1429861 ], [ 82.376269, 17.1435012 ], [ 82.3757343, 17.1436331 ], [ 82.3752023, 17.1441519 ], [ 82.374492, 17.144455 ], [ 82.3738734, 17.1455779 ], [ 82.3741412, 17.1455762 ], [ 82.374145, 17.1460912 ], [ 82.3744128, 17.1460895 ], [ 82.3743296, 17.1472893 ], [ 82.3745634, 17.1484065 ], [ 82.3737655, 17.1491846 ], [ 82.3736453, 17.1509884 ], [ 82.3733867, 17.1522779 ], [ 82.3736547, 17.152276 ], [ 82.3736566, 17.1525337 ], [ 82.3739244, 17.1525318 ], [ 82.3739263, 17.1527894 ], [ 82.3733896, 17.1526637 ], [ 82.3728511, 17.1522815 ], [ 82.3732, 17.1509028 ], [ 82.3731057, 17.1504768 ], [ 82.3733735, 17.1504751 ], [ 82.3732372, 17.1502184 ], [ 82.3732297, 17.1491882 ], [ 82.3742935, 17.1481507 ], [ 82.3741544, 17.1473791 ], [ 82.3733338, 17.1450665 ], [ 82.3738687, 17.1449336 ], [ 82.3743977, 17.144029 ], [ 82.3746657, 17.1440271 ], [ 82.3747953, 17.1435112 ], [ 82.3759964, 17.1428587 ], [ 82.3770603, 17.1418211 ], [ 82.3781251, 17.140913 ], [ 82.37866, 17.1407801 ], [ 82.3793245, 17.140132 ], [ 82.3793206, 17.139617 ], [ 82.3801034, 17.1367784 ], [ 82.3800975, 17.1360058 ], [ 82.3795563, 17.1352368 ], [ 82.3790167, 17.1347253 ], [ 82.3788794, 17.1342112 ], [ 82.3783436, 17.1342148 ], [ 82.3780701, 17.1334441 ], [ 82.3769959, 17.1330646 ], [ 82.3761885, 17.1325548 ], [ 82.37565, 17.1321727 ], [ 82.3752401, 17.1311453 ], [ 82.3749704, 17.1308896 ], [ 82.3744138, 17.12806 ], [ 82.373739, 17.1272919 ], [ 82.372127, 17.1266586 ], [ 82.3713179, 17.1258913 ], [ 82.3705134, 17.1257684 ], [ 82.3706392, 17.1247374 ], [ 82.3703657, 17.1239665 ], [ 82.370096, 17.1237108 ], [ 82.3695491, 17.1221691 ], [ 82.369268, 17.1203681 ], [ 82.3679118, 17.1180591 ], [ 82.3676345, 17.1167733 ], [ 82.3673648, 17.1165174 ], [ 82.3673442, 17.1136845 ], [ 82.3668048, 17.1131729 ], [ 82.3666619, 17.1118862 ], [ 82.3653227, 17.1118951 ], [ 82.3653191, 17.11138 ], [ 82.3647833, 17.1113836 ], [ 82.3646453, 17.1108695 ], [ 82.3643756, 17.1106136 ], [ 82.3642384, 17.1100996 ], [ 82.3637026, 17.1101032 ], [ 82.363699, 17.1095879 ], [ 82.3631631, 17.1095917 ], [ 82.3628804, 17.1075329 ], [ 82.3636838, 17.1075276 ], [ 82.3638116, 17.1067541 ], [ 82.3647449, 17.1061033 ], [ 82.3655474, 17.1059697 ], [ 82.3656733, 17.1049385 ], [ 82.3655379, 17.1046819 ], [ 82.3647326, 17.1044298 ], [ 82.3647288, 17.1039147 ], [ 82.3641932, 17.1039183 ], [ 82.364323, 17.1034023 ], [ 82.3648549, 17.1028835 ], [ 82.3649836, 17.10211 ], [ 82.364448, 17.1021136 ], [ 82.3641745, 17.1013428 ], [ 82.3636389, 17.1013464 ], [ 82.3636351, 17.1008314 ], [ 82.3630985, 17.1007057 ], [ 82.3628288, 17.10045 ], [ 82.3622922, 17.1003252 ], [ 82.3621543, 17.099811 ], [ 82.3614776, 17.0987853 ], [ 82.3609411, 17.0986596 ], [ 82.3601329, 17.0980217 ], [ 82.3599948, 17.0975074 ], [ 82.3595899, 17.0969951 ], [ 82.3590543, 17.0969986 ], [ 82.3589161, 17.0964844 ], [ 82.3571628, 17.0946932 ], [ 82.3566272, 17.0946968 ], [ 82.356489, 17.0941825 ], [ 82.3560842, 17.0936702 ], [ 82.3555476, 17.0935445 ], [ 82.3539296, 17.09201 ], [ 82.353392, 17.091756 ], [ 82.3525841, 17.0911179 ], [ 82.3524571, 17.0921491 ], [ 82.3528621, 17.0925322 ], [ 82.3536672, 17.0927843 ], [ 82.3546107, 17.09368 ], [ 82.3546256, 17.0957405 ], [ 82.3535618, 17.0967779 ], [ 82.353434, 17.0975513 ], [ 82.3502248, 17.0982162 ], [ 82.3488857, 17.0982251 ], [ 82.3475431, 17.0977189 ], [ 82.3459296, 17.0968287 ], [ 82.345926, 17.0963135 ], [ 82.3456591, 17.0964436 ], [ 82.3437854, 17.0965853 ], [ 82.3437889, 17.0971005 ], [ 82.342448, 17.0968518 ], [ 82.3424463, 17.0965942 ], [ 82.3435175, 17.096587 ], [ 82.3437825, 17.0961986 ], [ 82.3456544, 17.0958002 ], [ 82.3453754, 17.0942566 ], [ 82.3464486, 17.0945071 ], [ 82.3465708, 17.0929609 ], [ 82.3460624, 17.0925916 ], [ 82.3435554, 17.0925531 ], [ 82.3416179, 17.0931221 ], [ 82.341352, 17.0933814 ], [ 82.3397477, 17.0937788 ], [ 82.3397515, 17.0942939 ], [ 82.3386822, 17.0945587 ], [ 82.3386858, 17.0950737 ], [ 82.3381958, 17.0951936 ], [ 82.3377553, 17.0961102 ], [ 82.3374894, 17.0963695 ], [ 82.3367007, 17.0984352 ], [ 82.3363268, 17.102301 ], [ 82.3371322, 17.1025534 ], [ 82.3371341, 17.102811 ], [ 82.3374009, 17.10268 ], [ 82.3385618, 17.1024553 ], [ 82.3389904, 17.100223 ], [ 82.3408651, 17.1002105 ], [ 82.3410078, 17.1014974 ], [ 82.3412792, 17.1020107 ], [ 82.3410299, 17.1045881 ], [ 82.3407231, 17.104869 ], [ 82.3403701, 17.1058803 ], [ 82.3401023, 17.105882 ], [ 82.3400985, 17.105367 ], [ 82.3403663, 17.1053651 ], [ 82.3403628, 17.1048501 ], [ 82.3406268, 17.1043332 ], [ 82.3408946, 17.1043315 ], [ 82.3407436, 17.1020143 ], [ 82.3404703, 17.1012434 ], [ 82.3400655, 17.100731 ], [ 82.3389959, 17.1009956 ], [ 82.3391331, 17.1015099 ], [ 82.3387307, 17.1029151 ], [ 82.3368672, 17.102941 ], [ 82.3365975, 17.1026853 ], [ 82.3360609, 17.1025604 ], [ 82.3361779, 17.1002415 ], [ 82.3363011, 17.0986953 ], [ 82.3362976, 17.0981803 ], [ 82.3365654, 17.0981784 ], [ 82.3369538, 17.0963729 ], [ 82.3376173, 17.0954666 ], [ 82.3378787, 17.094564 ], [ 82.3384115, 17.0941735 ], [ 82.3392131, 17.0939108 ], [ 82.3402769, 17.0928733 ], [ 82.3429513, 17.0923406 ], [ 82.343486, 17.0922086 ], [ 82.3469694, 17.0924432 ], [ 82.3472631, 17.096047 ], [ 82.3477997, 17.0961718 ], [ 82.3496818, 17.0971895 ], [ 82.3502174, 17.0971859 ], [ 82.3504862, 17.0973135 ], [ 82.3504824, 17.0967983 ], [ 82.3510171, 17.0966656 ], [ 82.3514155, 17.096277 ], [ 82.3515463, 17.0957611 ], [ 82.3531503, 17.0953634 ], [ 82.3532828, 17.0952343 ], [ 82.3531401, 17.0939474 ], [ 82.3526045, 17.093951 ], [ 82.352193, 17.0926658 ], [ 82.3516536, 17.0921544 ], [ 82.3512431, 17.0908694 ], [ 82.3515109, 17.0908675 ], [ 82.3515147, 17.0913827 ], [ 82.3520503, 17.0913791 ], [ 82.3520594, 17.0902084 ], [ 82.3482106, 17.0868381 ], [ 82.3412607, 17.0806329 ], [ 82.340184, 17.0798673 ], [ 82.33546, 17.0751365 ], [ 82.3325921, 17.0723712 ], [ 82.330492864779359, 17.070324363087757 ], [ 82.3288422, 17.0687149 ], [ 82.3277053, 17.0672245 ], [ 82.3218825, 17.0615428 ], [ 82.3182304, 17.0576067 ], [ 82.3127953, 17.0513154 ], [ 82.3103318, 17.0482108 ], [ 82.3083443, 17.045561 ], [ 82.3058958, 17.0423062 ], [ 82.3029328, 17.0383532 ], [ 82.2981609, 17.0308423 ], [ 82.2951572, 17.0255421 ], [ 82.2922459, 17.0193571 ], [ 82.2903045, 17.0147741 ], [ 82.2881119, 17.0089266 ], [ 82.2856058, 17.001246 ], [ 82.2839828, 16.9958388 ], [ 82.2827787, 16.9919335 ], [ 82.281941, 16.9891046 ], [ 82.2811819, 16.987928 ], [ 82.2807107, 16.9874774 ], [ 82.2805275, 16.9878279 ], [ 82.280449, 16.9885038 ], [ 82.280449, 16.9891547 ], [ 82.2805537, 16.9898306 ], [ 82.2809463, 16.9909572 ], [ 82.2812081, 16.9924342 ], [ 82.2812604, 16.9934856 ], [ 82.2813651, 16.994512 ], [ 82.2817578, 16.9950127 ], [ 82.2820457, 16.9956385 ], [ 82.2820196, 16.9960641 ], [ 82.2821766, 16.9972407 ], [ 82.2825693, 16.9976412 ], [ 82.2829881, 16.9979667 ], [ 82.283119, 16.9988178 ], [ 82.2830666, 16.9995688 ], [ 82.283119, 17.0005952 ], [ 82.2833546, 17.0008955 ], [ 82.2839043, 17.0014963 ], [ 82.2839828, 17.0021472 ], [ 82.2842184, 17.0032236 ], [ 82.2843755, 17.0037493 ], [ 82.2846634, 17.0040497 ], [ 82.284899, 17.0046505 ], [ 82.284899, 17.0054014 ], [ 82.2850299, 17.0062275 ], [ 82.2855273, 17.0067031 ], [ 82.2860246, 17.007354 ], [ 82.2863649, 17.0090061 ], [ 82.2866791, 17.0099323 ], [ 82.2868885, 17.0106081 ], [ 82.2870979, 17.0117095 ], [ 82.2872811, 17.0125856 ], [ 82.287857, 17.013662 ], [ 82.2883806, 17.0157395 ], [ 82.2885115, 17.0172164 ], [ 82.288747, 17.0186932 ], [ 82.2892706, 17.0201199 ], [ 82.2895585, 17.0210711 ], [ 82.2895847, 17.0222976 ], [ 82.2894026, 17.0223349 ], [ 82.2892182, 17.0223727 ], [ 82.2891135, 17.0217719 ], [ 82.2888256, 17.0213714 ], [ 82.2887732, 17.0200949 ], [ 82.2884853, 17.0192939 ], [ 82.2879879, 17.0184429 ], [ 82.2878309, 17.0174417 ], [ 82.2877, 17.0165405 ], [ 82.2873858, 17.0154642 ], [ 82.287255, 17.0148635 ], [ 82.2870979, 17.0139123 ], [ 82.2870455, 17.0127108 ], [ 82.2868623, 17.0118847 ], [ 82.2864697, 17.0113841 ], [ 82.2864173, 17.0107583 ], [ 82.2861032, 17.0101075 ], [ 82.2857367, 17.0091062 ], [ 82.2855273, 17.0082551 ], [ 82.2850561, 17.0074541 ], [ 82.2845064, 17.0060773 ], [ 82.2844278, 17.0051261 ], [ 82.2841923, 17.0046004 ], [ 82.2835117, 17.0039245 ], [ 82.2831452, 17.0029983 ], [ 82.2827263, 17.0019219 ], [ 82.2824122, 17.0007203 ], [ 82.2824122, 16.9996189 ], [ 82.2820457, 16.9987427 ], [ 82.2816531, 16.9980418 ], [ 82.2810772, 16.9976913 ], [ 82.2813128, 16.9983171 ], [ 82.2820196, 16.9993936 ], [ 82.2816269, 17.0000695 ], [ 82.2812081, 17.0000444 ], [ 82.2808678, 16.998943 ], [ 82.2807369, 16.9987928 ], [ 82.2800301, 16.9975661 ], [ 82.2798207, 16.9961642 ], [ 82.2790616, 16.9949376 ], [ 82.2785904, 16.9928848 ], [ 82.2785119, 16.9903814 ], [ 82.278983, 16.9894301 ], [ 82.2798156, 16.988356 ], [ 82.2804663, 16.9867806 ], [ 82.2810166, 16.9856578 ], [ 82.2810371, 16.9853974 ], [ 82.2810166, 16.9848313 ], [ 82.2810955, 16.984567 ], [ 82.2812105, 16.9844646 ], [ 82.2852065, 16.9844371 ], [ 82.2852917, 16.9843887 ], [ 82.2853226, 16.984313 ], [ 82.285273, 16.9827983 ], [ 82.285359, 16.9825842 ], [ 82.2853619, 16.9824632 ], [ 82.2853202, 16.9823863 ], [ 82.2852426, 16.9823533 ], [ 82.2851449, 16.9823533 ], [ 82.2850888, 16.9823931 ], [ 82.2850558, 16.9824784 ], [ 82.2850874, 16.9825746 ], [ 82.2850544, 16.9827764 ], [ 82.2850775, 16.9841559 ], [ 82.2850371, 16.9841912 ], [ 82.2847697, 16.9841885 ], [ 82.2847683, 16.9841005 ], [ 82.2844484, 16.9841015 ], [ 82.284442, 16.9826868 ], [ 82.2840468, 16.9826839 ], [ 82.2840511, 16.9841479 ], [ 82.2835179, 16.9841451 ], [ 82.2834734, 16.9840207 ], [ 82.2834123, 16.9840207 ], [ 82.2833663, 16.9841478 ], [ 82.2813324, 16.9841769 ], [ 82.2813392, 16.9828133 ], [ 82.2809356, 16.9828083 ], [ 82.2809443, 16.984147 ], [ 82.28024, 16.9841834 ], [ 82.2802477, 16.983519 ], [ 82.2801471, 16.9835163 ], [ 82.2801442, 16.9836854 ], [ 82.2800105, 16.983684 ], [ 82.2800105, 16.9836606 ], [ 82.2799113, 16.9836592 ], [ 82.2799041, 16.983783 ], [ 82.2794413, 16.9838063 ], [ 82.2794355, 16.9840826 ], [ 82.279345, 16.9841528 ], [ 82.2781246, 16.9842146 ], [ 82.2779183, 16.9842221 ], [ 82.277463, 16.9835568 ], [ 82.2771733, 16.9830828 ], [ 82.2770517, 16.982623 ], [ 82.2767601, 16.9817788 ], [ 82.2784317, 16.9814918 ], [ 82.2785822, 16.9814227 ], [ 82.2786953, 16.9812978 ], [ 82.2787331, 16.9811844 ], [ 82.2787191, 16.9808823 ], [ 82.2788454, 16.9807951 ], [ 82.2788237, 16.9806832 ], [ 82.2793221, 16.980587 ], [ 82.2794844, 16.9806793 ], [ 82.2803003, 16.9805492 ], [ 82.2802301, 16.9801926 ], [ 82.2793966, 16.9803436 ], [ 82.2793221, 16.9804653 ], [ 82.2788015, 16.9805689 ], [ 82.278777, 16.980443 ], [ 82.2786173, 16.9804259 ], [ 82.2784559, 16.9796607 ], [ 82.2786105, 16.9795862 ], [ 82.2785816, 16.9794373 ], [ 82.2791203, 16.9793367 ], [ 82.2792387, 16.97945 ], [ 82.2800809, 16.9792906 ], [ 82.2800195, 16.9789676 ], [ 82.279208, 16.9790892 ], [ 82.2791027, 16.9792277 ], [ 82.2785567, 16.9793093 ], [ 82.278531, 16.9791766 ], [ 82.2783801, 16.9791498 ], [ 82.2781814, 16.9781387 ], [ 82.2779163, 16.9767894 ], [ 82.2779274, 16.9766292 ], [ 82.278136, 16.97661 ], [ 82.2784369, 16.9766701 ], [ 82.278844, 16.9766774 ], [ 82.2788544, 16.976538 ], [ 82.2785582, 16.9765305 ], [ 82.278511, 16.976509 ], [ 82.2779877, 16.9765026 ], [ 82.2778427, 16.9764681 ], [ 82.2778075, 16.9763729 ], [ 82.2779157, 16.9761875 ], [ 82.2780479, 16.9760828 ], [ 82.2782348, 16.9760236 ], [ 82.2784502, 16.976015 ], [ 82.2787849, 16.9760693 ], [ 82.2791247, 16.9762363 ], [ 82.2796918, 16.9766339 ], [ 82.2805066, 16.977206 ], [ 82.2806731, 16.977281 ], [ 82.2808837, 16.9773188 ], [ 82.2815607, 16.977264 ], [ 82.2820568, 16.9771612 ], [ 82.282419, 16.9770125 ], [ 82.2827173, 16.9768237 ], [ 82.2829827, 16.9765523 ], [ 82.2838544, 16.9763894 ], [ 82.2823584, 16.9682623 ], [ 82.2821011, 16.9683133 ], [ 82.2807718, 16.9684174 ], [ 82.2804403, 16.9682329 ], [ 82.2730047, 16.9680563 ], [ 82.2727282, 16.9675739 ], [ 82.2723214, 16.9666558 ], [ 82.2722238, 16.9655976 ], [ 82.2719473, 16.9651775 ], [ 82.2710037, 16.9630612 ], [ 82.2703204, 16.9617385 ], [ 82.2697509, 16.9599022 ], [ 82.2696533, 16.9590463 ], [ 82.2697184, 16.958704 ], [ 82.2699624, 16.9586417 ], [ 82.2699136, 16.9580971 ], [ 82.2695557, 16.9581126 ], [ 82.2694093, 16.9577392 ], [ 82.2694581, 16.9572567 ], [ 82.2684632, 16.9571148 ], [ 82.2684606, 16.9569771 ], [ 82.2684583, 16.9568498 ], [ 82.2685633, 16.9560741 ], [ 82.2690026, 16.9518256 ], [ 82.2692954, 16.9506273 ], [ 82.2700763, 16.9496314 ], [ 82.2719798, 16.9510631 ], [ 82.2737531, 16.94918 ], [ 82.2729393, 16.9482602 ], [ 82.2718984, 16.9464566 ], [ 82.2705644, 16.9429519 ], [ 82.2702911, 16.9423418 ], [ 82.2697835, 16.9416944 ], [ 82.2689505, 16.9412088 ], [ 82.2620654, 16.9389304 ], [ 82.2621956, 16.9385693 ], [ 82.2587596, 16.9382331 ], [ 82.257458, 16.9382829 ], [ 82.2554797, 16.9386565 ], [ 82.2492845, 16.9397272 ], [ 82.2471239, 16.9402501 ], [ 82.2451066, 16.9408229 ], [ 82.2450604, 16.9404761 ], [ 82.2450285, 16.9402372 ], [ 82.2451034, 16.9400539 ], [ 82.2452617, 16.9400858 ], [ 82.2455283, 16.9398228 ], [ 82.2456507, 16.9395346 ], [ 82.246396, 16.9393493 ], [ 82.2468678, 16.9393805 ], [ 82.2485272, 16.9390381 ], [ 82.2499752, 16.9388358 ], [ 82.2548754, 16.9381566 ], [ 82.2548858, 16.9380968 ], [ 82.253803, 16.9381964 ], [ 82.2535218, 16.938057 ], [ 82.2520033, 16.9381169 ], [ 82.25132, 16.9380858 ], [ 82.2496117, 16.9371987 ], [ 82.2484566, 16.9366228 ], [ 82.2481475, 16.936187 ], [ 82.2483623, 16.9359694 ], [ 82.2484577, 16.934024 ], [ 82.2477904, 16.9297074 ], [ 82.246996, 16.9249956 ], [ 82.2461301, 16.9199037 ], [ 82.2457433, 16.9182805 ], [ 82.2455139, 16.9176826 ], [ 82.2452394, 16.9166541 ], [ 82.2455037, 16.9161372 ], [ 82.2458902, 16.9138166 ], [ 82.2453551, 16.9138198 ], [ 82.2454613, 16.9096979 ], [ 82.2451888, 16.908927 ], [ 82.2446503, 16.908415 ], [ 82.2441085, 16.907388 ], [ 82.2435698, 16.9068762 ], [ 82.2434315, 16.9061043 ], [ 82.2448897, 16.9070623 ], [ 82.248447, 16.9076245 ], [ 82.2518689, 16.9054572 ], [ 82.2534112, 16.8994623 ], [ 82.2557247, 16.893375 ], [ 82.2557247, 16.8859962 ], [ 82.2603515, 16.8858118 ], [ 82.2672918, 16.8793551 ], [ 82.268371075264881, 16.87694522865014 ], [ 82.269287043120698, 16.8749 ], [ 82.269287043120713, 16.8749 ], [ 82.2696052, 16.8741896 ], [ 82.275098862445788, 16.8749 ], [ 82.2767383, 16.875112 ], [ 82.2823291, 16.875481 ], [ 82.283068220946447, 16.8749 ], [ 82.2877271, 16.8712378 ], [ 82.2937487, 16.8695312 ], [ 82.2957109, 16.8686214 ], [ 82.2979597, 16.8673982 ], [ 82.3006454, 16.8655249 ], [ 82.3028052, 16.8635353 ], [ 82.3044878, 16.8618322 ], [ 82.3061218, 16.8598194 ], [ 82.3072786, 16.8580853 ], [ 82.3095759, 16.856235 ], [ 82.3110805, 16.854377 ], [ 82.3124476, 16.8522557 ], [ 82.3133374, 16.8502815 ], [ 82.3140978, 16.8481602 ], [ 82.3143729, 16.8463873 ], [ 82.3143082, 16.8450943 ], [ 82.3139361, 16.8437007 ], [ 82.3133374, 16.8425704 ], [ 82.3125366, 16.8414013 ], [ 82.3116306, 16.8406503 ], [ 82.309272, 16.8391524 ], [ 82.3026631, 16.8357844 ], [ 82.3006974, 16.8339726 ], [ 82.2994031, 16.8321299 ], [ 82.2983515, 16.8295747 ], [ 82.2979066, 16.8264853 ], [ 82.297858, 16.8256878 ], [ 82.2980279, 16.8245031 ], [ 82.2993546, 16.8205464 ], [ 82.2999774, 16.8197334 ], [ 82.3006003, 16.8195243 ], [ 82.301749, 16.8188971 ], [ 82.3026631, 16.818115 ], [ 82.3038037, 16.8167135 ], [ 82.304556, 16.8153119 ], [ 82.3049685, 16.8140343 ], [ 82.3051708, 16.812594 ], [ 82.3051303, 16.8095972 ], [ 82.3055267, 16.8070031 ], [ 82.3056561, 16.8060274 ], [ 82.3055105, 16.8050749 ], [ 82.3045074, 16.8019696 ], [ 82.3041272, 16.8005137 ], [ 82.3037389, 16.7967346 ], [ 82.3037794, 16.7949147 ], [ 82.3046045, 16.7895247 ], [ 82.3045641, 16.7879448 ], [ 82.3039169, 16.7849941 ], [ 82.3034801, 16.7835846 ], [ 82.3025903, 16.7815477 ], [ 82.3022667, 16.7810366 ], [ 82.3002201, 16.7784188 ], [ 82.2997995, 16.7774894 ], [ 82.2991604, 16.7751427 ], [ 82.2989339, 16.7732916 ], [ 82.2986023, 16.770999 ], [ 82.298756, 16.7691789 ], [ 82.2993587, 16.766139 ], [ 82.3000382, 16.764861 ], [ 82.3004022, 16.7641251 ], [ 82.3005721, 16.7631337 ], [ 82.3006368, 16.7611431 ], [ 82.3008552, 16.7592687 ], [ 82.3015024, 16.7571618 ], [ 82.3021172, 16.755907 ], [ 82.3034115, 16.7519953 ], [ 82.3050778, 16.7478899 ], [ 82.3067629, 16.7438996 ], [ 82.3098059, 16.7369979 ], [ 82.3098629, 16.7365043 ], [ 82.3101868, 16.7354686 ], [ 82.3103719, 16.7353163 ], [ 82.310982, 16.7335661 ], [ 82.3101386, 16.7332232 ], [ 82.3106293, 16.7324008 ], [ 82.3109769, 16.7308734 ], [ 82.3108624, 16.7305679 ], [ 82.3102613, 16.7300275 ], [ 82.3104769, 16.7292505 ], [ 82.3113112, 16.7289372 ], [ 82.3119491, 16.7286082 ], [ 82.3123335, 16.7279268 ], [ 82.3123016, 16.7272169 ], [ 82.3068053, 16.7194935 ], [ 82.3049078, 16.7175665 ], [ 82.3033701, 16.7164698 ], [ 82.300622, 16.7155611 ], [ 82.2998239, 16.7149346 ], [ 82.2981839, 16.7134991 ], [ 82.2975014, 16.71207 ], [ 82.2959977, 16.7101091 ], [ 82.2948965, 16.709423 ], [ 82.2941352, 16.7092443 ], [ 82.2919514, 16.708696 ], [ 82.2909229, 16.7085473 ], [ 82.2893586, 16.7087344 ], [ 82.2830083, 16.7085294 ], [ 82.2823837, 16.7083965 ], [ 82.2779318, 16.7084098 ], [ 82.2763859, 16.7085743 ], [ 82.2754331, 16.7085312 ], [ 82.2743563, 16.708544 ], [ 82.2742213, 16.7079839 ], [ 82.2733543, 16.7080975 ], [ 82.2733952, 16.7083129 ], [ 82.2727659, 16.7085442 ], [ 82.2727255, 16.7086965 ], [ 82.2733414, 16.7089375 ], [ 82.2733211, 16.7090483 ], [ 82.2729568, 16.7089818 ], [ 82.2726503, 16.7089264 ], [ 82.2724137, 16.7087046 ], [ 82.2712728, 16.7086576 ], [ 82.2702954, 16.7092961 ], [ 82.2694407, 16.7100285 ], [ 82.2686195, 16.7105755 ], [ 82.267821, 16.7110956 ], [ 82.2672899, 16.711614 ], [ 82.2659561, 16.7120091 ], [ 82.2659595, 16.7125241 ], [ 82.2651585, 16.7126573 ], [ 82.26436, 16.7131774 ], [ 82.2638289, 16.7136959 ], [ 82.2624959, 16.7142192 ], [ 82.2622302, 16.7144783 ], [ 82.2603643, 16.7152625 ], [ 82.2600988, 16.7155218 ], [ 82.2584984, 16.7160467 ], [ 82.2582328, 16.7163058 ], [ 82.2566325, 16.7168308 ], [ 82.2496898, 16.7179032 ], [ 82.2483566, 16.7184264 ], [ 82.2472884, 16.7185621 ], [ 82.2472918, 16.7190773 ], [ 82.2454248, 16.719732 ], [ 82.2451593, 16.7199911 ], [ 82.2435596, 16.7206452 ], [ 82.243563, 16.7211604 ], [ 82.2414305, 16.7220742 ], [ 82.2400949, 16.7222115 ], [ 82.2398342, 16.7232434 ], [ 82.2382313, 16.7233814 ], [ 82.2379656, 16.7236405 ], [ 82.2342317, 16.7249508 ], [ 82.2339662, 16.7252099 ], [ 82.2312956, 16.7256127 ], [ 82.2312907, 16.7248401 ], [ 82.2318269, 16.7250945 ], [ 82.2318236, 16.7245793 ], [ 82.2326246, 16.7244453 ], [ 82.2328904, 16.7241861 ], [ 82.2343559, 16.7235339 ], [ 82.2344867, 16.7230179 ], [ 82.2350213, 16.7230147 ], [ 82.2350179, 16.7224995 ], [ 82.2358216, 16.7227524 ], [ 82.2359514, 16.7222364 ], [ 82.2374179, 16.7215832 ], [ 82.238078, 16.7204205 ], [ 82.2388733, 16.7193855 ], [ 82.2388699, 16.7188703 ], [ 82.2390032, 16.7187403 ], [ 82.2395369, 16.7186087 ], [ 82.2391323, 16.718096 ], [ 82.2389941, 16.7173241 ], [ 82.2373895, 16.7172045 ], [ 82.2371206, 16.7169484 ], [ 82.2355169, 16.716958 ], [ 82.2344526, 16.7177371 ], [ 82.2339189, 16.7178696 ], [ 82.2335241, 16.7189023 ], [ 82.233127, 16.7194197 ], [ 82.2325933, 16.7195513 ], [ 82.2317962, 16.7203288 ], [ 82.2304632, 16.720852 ], [ 82.2299319, 16.7213702 ], [ 82.2283315, 16.7218949 ], [ 82.2280658, 16.7221542 ], [ 82.2264629, 16.7222929 ], [ 82.2264661, 16.7228081 ], [ 82.2261981, 16.7226804 ], [ 82.2245959, 16.7229474 ], [ 82.2243302, 16.7232067 ], [ 82.2227273, 16.7233455 ], [ 82.2227305, 16.7238605 ], [ 82.2216621, 16.7239952 ], [ 82.2205938, 16.7241308 ], [ 82.2117738, 16.7243111 ], [ 82.211508, 16.7245702 ], [ 82.2077673, 16.7248497 ], [ 82.2032281, 16.725649 ], [ 82.202159, 16.725655 ], [ 82.2018893, 16.7252708 ], [ 82.2016218, 16.7252723 ], [ 82.2016235, 16.7255299 ], [ 82.2017995, 16.7256165 ], [ 82.201894, 16.7260434 ], [ 82.1984215, 16.7264496 ], [ 82.1981558, 16.7267087 ], [ 82.1946872, 16.7277592 ], [ 82.1941558, 16.7282774 ], [ 82.1909545, 16.7293262 ], [ 82.1864119, 16.7296101 ], [ 82.1856084, 16.729357 ], [ 82.1832009, 16.7291132 ], [ 82.1807919, 16.7286118 ], [ 82.1802558, 16.7283574 ], [ 82.1783814, 16.7278529 ], [ 82.1762399, 16.7273498 ], [ 82.1759709, 16.7270939 ], [ 82.1711563, 16.7266059 ], [ 82.1698182, 16.726356 ], [ 82.1695525, 16.7266152 ], [ 82.1668793, 16.7266301 ], [ 82.1631339, 16.726136 ], [ 82.1625977, 16.7258817 ], [ 82.1591212, 16.7256435 ], [ 82.1569781, 16.7248828 ], [ 82.1545708, 16.7246386 ], [ 82.1518961, 16.7243959 ], [ 82.150022, 16.7238913 ], [ 82.1481447, 16.7228713 ], [ 82.1473395, 16.7223606 ], [ 82.1457326, 16.7218542 ], [ 82.1451949, 16.7213421 ], [ 82.14439, 16.7208314 ], [ 82.1430505, 16.7203237 ], [ 82.1376998, 16.7195804 ], [ 82.1352942, 16.7195936 ], [ 82.1318237, 16.7203855 ], [ 82.1312923, 16.7209036 ], [ 82.1299587, 16.721426 ], [ 82.129693, 16.7216851 ], [ 82.124356, 16.7232597 ], [ 82.1232866, 16.7232655 ], [ 82.1230209, 16.7235246 ], [ 82.122487, 16.7236567 ], [ 82.1223575, 16.7244301 ], [ 82.1215614, 16.7254649 ], [ 82.1206325, 16.7265002 ], [ 82.1200986, 16.7266316 ], [ 82.1198326, 16.7268905 ], [ 82.1190322, 16.7271525 ], [ 82.1179676, 16.727931 ], [ 82.1158357, 16.7288686 ], [ 82.1145, 16.7292377 ], [ 82.1134314, 16.7293729 ], [ 82.1134299, 16.7291153 ], [ 82.1139638, 16.7289831 ], [ 82.1142295, 16.728724 ], [ 82.1160071, 16.7284161 ], [ 82.1179646, 16.727416 ], [ 82.1190292, 16.7266373 ], [ 82.1198296, 16.7263755 ], [ 82.1204938, 16.7257284 ], [ 82.1204907, 16.7252132 ], [ 82.1200872, 16.7247002 ], [ 82.1192853, 16.7247046 ], [ 82.1192838, 16.724447 ], [ 82.1214208, 16.7241776 ], [ 82.1214178, 16.7236626 ], [ 82.1219517, 16.7235303 ], [ 82.1224832, 16.7230123 ], [ 82.1232821, 16.7224929 ], [ 82.1286208, 16.7211757 ], [ 82.1288865, 16.7209166 ], [ 82.1302206, 16.7205235 ], [ 82.1299504, 16.7200098 ], [ 82.1296839, 16.7201396 ], [ 82.1264747, 16.7198994 ], [ 82.1240651, 16.7192691 ], [ 82.1240623, 16.7187539 ], [ 82.1229914, 16.7185021 ], [ 82.1228529, 16.7177301 ], [ 82.1239175, 16.7169516 ], [ 82.1239099, 16.7156636 ], [ 82.1232362, 16.7146369 ], [ 82.1229674, 16.7143808 ], [ 82.1227001, 16.7143823 ], [ 82.1227017, 16.7146397 ], [ 82.1228774, 16.7147265 ], [ 82.1231065, 16.7154105 ], [ 82.1236442, 16.7159227 ], [ 82.1237812, 16.7164371 ], [ 82.1232445, 16.7160533 ], [ 82.1219088, 16.7161897 ], [ 82.1216338, 16.7149032 ], [ 82.1189579, 16.7144025 ], [ 82.118961, 16.7149178 ], [ 82.1178918, 16.7149234 ], [ 82.1178948, 16.7154386 ], [ 82.1170929, 16.715443 ], [ 82.1170959, 16.7159582 ], [ 82.116562, 16.7160894 ], [ 82.1162963, 16.7163485 ], [ 82.1152292, 16.716741 ], [ 82.1149665, 16.7175152 ], [ 82.1183867, 16.7188141 ], [ 82.11732, 16.7195112 ], [ 82.1161153, 16.7202564 ], [ 82.114095, 16.7210496 ], [ 82.1136307, 16.721326 ], [ 82.1134299, 16.7217226 ], [ 82.1105687, 16.7230686 ], [ 82.1093389, 16.7236455 ], [ 82.1090754, 16.7238859 ], [ 82.1086362, 16.7243305 ], [ 82.1067037, 16.7252078 ], [ 82.1043947, 16.7260491 ], [ 82.1035413, 16.7262414 ], [ 82.1031272, 16.7265779 ], [ 82.1028511, 16.7270947 ], [ 82.1023868, 16.7272148 ], [ 82.1006802, 16.7271187 ], [ 82.098848, 16.7269985 ], [ 82.0979696, 16.7270466 ], [ 82.0968779, 16.7271187 ], [ 82.0951461, 16.7265418 ], [ 82.0944559, 16.7263135 ], [ 82.093703, 16.7261092 ], [ 82.0919085, 16.725292 ], [ 82.0901768, 16.7241142 ], [ 82.0890975, 16.7233691 ], [ 82.0883572, 16.7226119 ], [ 82.0877257, 16.7219102 ], [ 82.0871882, 16.7213978 ], [ 82.084508, 16.720124 ], [ 82.0839733, 16.7201268 ], [ 82.0834358, 16.7196144 ], [ 82.0815617, 16.719109 ], [ 82.0788886, 16.719123 ], [ 82.0786199, 16.7188669 ], [ 82.0775507, 16.7188724 ], [ 82.0770175, 16.7191328 ], [ 82.0714033, 16.7190336 ], [ 82.071402, 16.718776 ], [ 82.07648, 16.7186205 ], [ 82.0778144, 16.7182275 ], [ 82.0779043, 16.7180571 ], [ 82.0791502, 16.7180913 ], [ 82.0802222, 16.7186008 ], [ 82.0810249, 16.7187259 ], [ 82.0810205, 16.7179531 ], [ 82.0804861, 16.7179559 ], [ 82.0800744, 16.716155 ], [ 82.0798057, 16.7158987 ], [ 82.0792492, 16.7120378 ], [ 82.0793806, 16.7115218 ], [ 82.0804526, 16.7120314 ], [ 82.0801665, 16.7086842 ], [ 82.079364, 16.708559 ], [ 82.0788264, 16.7080467 ], [ 82.078023, 16.7077934 ], [ 82.0774864, 16.7074101 ], [ 82.0773494, 16.7068957 ], [ 82.0768119, 16.7063833 ], [ 82.0766758, 16.7058688 ], [ 82.0761406, 16.7057424 ], [ 82.0753343, 16.7049737 ], [ 82.0745303, 16.7045919 ], [ 82.0745275, 16.7040769 ], [ 82.0731918, 16.704212 ], [ 82.072923, 16.7039559 ], [ 82.0723891, 16.7040879 ], [ 82.0723906, 16.7043455 ], [ 82.0729251, 16.7043426 ], [ 82.0722608, 16.7051191 ], [ 82.0713322, 16.7062825 ], [ 82.0710657, 16.7064131 ], [ 82.0702767, 16.7087356 ], [ 82.0700094, 16.7087369 ], [ 82.0700066, 16.7082219 ], [ 82.0697393, 16.7082232 ], [ 82.0694777, 16.7092549 ], [ 82.0684091, 16.7093888 ], [ 82.0619884, 16.7083914 ], [ 82.0614524, 16.7081366 ], [ 82.0606507, 16.7081408 ], [ 82.0595772, 16.7073734 ], [ 82.0587711, 16.7066048 ], [ 82.0579671, 16.706223 ], [ 82.0578301, 16.7057085 ], [ 82.0571582, 16.7049391 ], [ 82.0566227, 16.7048127 ], [ 82.0558174, 16.7041731 ], [ 82.0556804, 16.7036587 ], [ 82.0552772, 16.7031455 ], [ 82.054206, 16.7027641 ], [ 82.0533999, 16.7019955 ], [ 82.0525965, 16.701742 ], [ 82.0515231, 16.7009747 ], [ 82.0501839, 16.7004663 ], [ 82.0493785, 16.6998269 ], [ 82.0494687, 16.6996564 ], [ 82.049913, 16.6983399 ], [ 82.0495581, 16.697745 ], [ 82.0479786, 16.697133 ], [ 82.0462039, 16.6965211 ], [ 82.0448907, 16.6964021 ], [ 82.0437475, 16.6965065 ], [ 82.0405782, 16.697133 ], [ 82.0389632, 16.697303 ], [ 82.0353784, 16.697881 ], [ 82.0325044, 16.6933425 ], [ 82.0336174, 16.6928403 ], [ 82.0346371, 16.6923015 ], [ 82.0355506, 16.692042 ], [ 82.0364957, 16.6914495 ], [ 82.0371487, 16.6908487 ], [ 82.0378447, 16.6902643 ], [ 82.0382317, 16.6898367 ], [ 82.0388156, 16.6892191 ], [ 82.0392109, 16.6885689 ], [ 82.0397779, 16.6878364 ], [ 82.0404395, 16.6870874 ], [ 82.0417627, 16.6855813 ], [ 82.0425618, 16.6848405 ], [ 82.0430687, 16.6842644 ], [ 82.043928, 16.6830134 ], [ 82.0449075, 16.6816471 ], [ 82.0456808, 16.6803961 ], [ 82.0461018, 16.6795401 ], [ 82.0467204, 16.6783466 ], [ 82.0469438, 16.6770544 ], [ 82.0468665, 16.6759926 ], [ 82.0466259, 16.6756058 ], [ 82.0462307, 16.6750132 ], [ 82.0468063, 16.6743794 ], [ 82.0473648, 16.6738855 ], [ 82.0475796, 16.6731365 ], [ 82.0479061, 16.672618 ], [ 82.0484217, 16.671836 ], [ 82.049152, 16.6712105 ], [ 82.0497363, 16.6708812 ], [ 82.0503893, 16.6706261 ], [ 82.0511883, 16.6705767 ], [ 82.0528208, 16.6702228 ], [ 82.0536715, 16.6702392 ], [ 82.0546682, 16.6703874 ], [ 82.0565069, 16.6705191 ], [ 82.0569537, 16.6706919 ], [ 82.0591962, 16.6711199 ], [ 82.0606913, 16.6712269 ], [ 82.0624956, 16.6711035 ], [ 82.0639992, 16.6709471 ], [ 82.0653482, 16.6705932 ], [ 82.0632174, 16.6707742 ], [ 82.0681664, 16.6692926 ], [ 82.0691717, 16.6689963 ], [ 82.0697302, 16.669021 ], [ 82.0705883, 16.6686772 ], [ 82.0711995, 16.668272 ], [ 82.0716978, 16.6679263 ], [ 82.0722563, 16.6671937 ], [ 82.0728234, 16.6663541 ], [ 82.073528, 16.6653746 ], [ 82.0743073, 16.6646657 ], [ 82.0758135, 16.6632345 ], [ 82.0766813, 16.6626994 ], [ 82.0772054, 16.6625842 ], [ 82.0791988, 16.6625183 ], [ 82.0816218, 16.6626418 ], [ 82.0847198, 16.6629365 ], [ 82.0855244, 16.6634476 ], [ 82.0860617, 16.66396 ], [ 82.0868648, 16.6642132 ], [ 82.0879396, 16.665238 ], [ 82.0906193, 16.666512 ], [ 82.0911566, 16.6670244 ], [ 82.0924957, 16.6675324 ], [ 82.093033, 16.6680448 ], [ 82.0935683, 16.6681713 ], [ 82.0938398, 16.6689426 ], [ 82.0946423, 16.6690667 ], [ 82.0951797, 16.6695791 ], [ 82.0957149, 16.6697056 ], [ 82.0957179, 16.6702206 ], [ 82.097057, 16.6707288 ], [ 82.0976002, 16.6722714 ], [ 82.098137, 16.6726545 ], [ 82.0989402, 16.6729078 ], [ 82.0992088, 16.6731641 ], [ 82.1056308, 16.6745472 ], [ 82.1056336, 16.6750622 ], [ 82.1067041, 16.6753141 ], [ 82.1068432, 16.6763438 ], [ 82.1073821, 16.6771136 ], [ 82.1081942, 16.6789125 ], [ 82.109002, 16.6799386 ], [ 82.1091405, 16.6807107 ], [ 82.109675, 16.6807078 ], [ 82.1102199, 16.682508 ], [ 82.1107544, 16.6825052 ], [ 82.110892, 16.6832771 ], [ 82.1117013, 16.6845608 ], [ 82.1125074, 16.6853292 ], [ 82.1126446, 16.6858437 ], [ 82.1134486, 16.6862253 ], [ 82.1147922, 16.687506 ], [ 82.1153276, 16.6876324 ], [ 82.115731, 16.6881453 ], [ 82.115868, 16.6886598 ], [ 82.116672, 16.6890414 ], [ 82.1177412, 16.6890357 ], [ 82.1185444, 16.689289 ], [ 82.1206824, 16.6892775 ], [ 82.1225495, 16.6886237 ], [ 82.1225525, 16.6891389 ], [ 82.1228213, 16.689395 ], [ 82.1233558, 16.6893922 ], [ 82.123081, 16.6881057 ], [ 82.1252138, 16.687192 ], [ 82.12815, 16.6865326 ], [ 82.1281469, 16.6860174 ], [ 82.1326886, 16.685735 ], [ 82.1326856, 16.6852198 ], [ 82.1332178, 16.6848301 ], [ 82.1336603, 16.684787 ], [ 82.1336206, 16.6852147 ], [ 82.1332231, 16.685732 ], [ 82.1369617, 16.6851964 ], [ 82.1368245, 16.6846819 ], [ 82.1358859, 16.6840427 ], [ 82.1340135, 16.6837953 ], [ 82.1310677, 16.6827811 ], [ 82.1297323, 16.6829176 ], [ 82.129995, 16.6821435 ], [ 82.1294612, 16.6822746 ], [ 82.1293278, 16.6824047 ], [ 82.129465, 16.6829191 ], [ 82.1273308, 16.6835742 ], [ 82.1239508, 16.6841486 ], [ 82.1238587, 16.68398 ], [ 82.1259937, 16.6834532 ], [ 82.1259906, 16.682938 ], [ 82.1273263, 16.6828016 ], [ 82.128125, 16.682282 ], [ 82.1297255, 16.6817581 ], [ 82.1305272, 16.6817537 ], [ 82.1313305, 16.6820068 ], [ 82.1340044, 16.6822499 ], [ 82.1372129, 16.6824899 ], [ 82.1376553, 16.6824468 ], [ 82.1377481, 16.6826161 ], [ 82.1388196, 16.6829962 ], [ 82.1396213, 16.6829917 ], [ 82.1404246, 16.683245 ], [ 82.143097, 16.6832302 ], [ 82.1438973, 16.6829683 ], [ 82.1454915, 16.6814139 ], [ 82.1460252, 16.6812826 ], [ 82.146954, 16.680247 ], [ 82.1470819, 16.679216 ], [ 82.1481494, 16.6789524 ], [ 82.1481509, 16.67921 ], [ 82.1476164, 16.679213 ], [ 82.1476179, 16.6794706 ], [ 82.1486869, 16.6794646 ], [ 82.1486839, 16.6789495 ], [ 82.1502851, 16.6785538 ], [ 82.1505508, 16.6782947 ], [ 82.1516173, 16.6779029 ], [ 82.15188, 16.6771285 ], [ 82.1524123, 16.6767388 ], [ 82.1537453, 16.6762162 ], [ 82.154011, 16.6759571 ], [ 82.1545448, 16.6758258 ], [ 82.1545415, 16.6753105 ], [ 82.155609, 16.6750471 ], [ 82.1558715, 16.6742729 ], [ 82.1564053, 16.6741406 ], [ 82.156671, 16.6738815 ], [ 82.1572047, 16.6737502 ], [ 82.1572015, 16.6732351 ], [ 82.157736, 16.6732321 ], [ 82.157733, 16.6727169 ], [ 82.1585308, 16.6720681 ], [ 82.1590645, 16.6719367 ], [ 82.1594603, 16.6711616 ], [ 82.1607886, 16.6698662 ], [ 82.1613153, 16.6685753 ], [ 82.1610216, 16.6641979 ], [ 82.1602091, 16.6623994 ], [ 82.1599403, 16.6621433 ], [ 82.1593981, 16.6608585 ], [ 82.1588591, 16.6600887 ], [ 82.1587183, 16.6588014 ], [ 82.1581838, 16.6588044 ], [ 82.1583153, 16.6585461 ], [ 82.158306, 16.6570006 ], [ 82.1580373, 16.6567445 ], [ 82.1574828, 16.653399 ], [ 82.1574673, 16.6508231 ], [ 82.1577315, 16.6503064 ], [ 82.1582458, 16.6469549 ], [ 82.1585113, 16.6466958 ], [ 82.1587708, 16.6454064 ], [ 82.1590363, 16.6451473 ], [ 82.1589868, 16.6369046 ], [ 82.1592493, 16.6361305 ], [ 82.1600464, 16.6353533 ], [ 82.160840075537905, 16.633210240195996 ], [ 82.161098, 16.6325138 ], [ 82.1616292, 16.6319957 ], [ 82.1618918, 16.6312214 ], [ 82.1621575, 16.6309623 ], [ 82.1621543, 16.6304472 ], [ 82.1629481, 16.6291549 ], [ 82.1634794, 16.6286366 ], [ 82.1637419, 16.6278623 ], [ 82.1640074, 16.6276034 ], [ 82.164534, 16.6263123 ], [ 82.1645232, 16.6245092 ], [ 82.1641204, 16.6241246 ], [ 82.1630503, 16.6238731 ], [ 82.161977, 16.6231063 ], [ 82.1593008, 16.6223486 ], [ 82.1571588, 16.6215877 ], [ 82.1566213, 16.6210755 ], [ 82.1560862, 16.6209502 ], [ 82.1559367, 16.618375 ], [ 82.1561932, 16.6165705 ], [ 82.1575151, 16.6142448 ], [ 82.1588432, 16.6129494 ], [ 82.158974, 16.6124335 ], [ 82.1595075, 16.6123013 ], [ 82.1597733, 16.6120422 ], [ 82.1603066, 16.6119109 ], [ 82.1605691, 16.6111365 ], [ 82.1632321, 16.6097045 ], [ 82.1645671, 16.6095688 ], [ 82.164564, 16.6090536 ], [ 82.1664325, 16.6087856 ], [ 82.1664295, 16.6082704 ], [ 82.1680299, 16.6078744 ], [ 82.1682955, 16.6076155 ], [ 82.1698952, 16.6070912 ], [ 82.1733633, 16.6062989 ], [ 82.1736288, 16.6060398 ], [ 82.1792325, 16.6049778 ], [ 82.1794982, 16.6047187 ], [ 82.1810987, 16.6043237 ], [ 82.1810955, 16.6038084 ], [ 82.1845612, 16.6026291 ], [ 82.1850923, 16.6021108 ], [ 82.186692, 16.6015866 ], [ 82.1869575, 16.6013274 ], [ 82.1882922, 16.6011915 ], [ 82.1882892, 16.6006763 ], [ 82.1912308, 16.6011747 ], [ 82.1915026, 16.601946 ], [ 82.1920369, 16.6019428 ], [ 82.1924404, 16.6024558 ], [ 82.1932497, 16.6037391 ], [ 82.1937934, 16.6052815 ], [ 82.1940622, 16.6055376 ], [ 82.1959592, 16.6099056 ], [ 82.196228, 16.6101617 ], [ 82.1966356, 16.6111896 ], [ 82.1977082, 16.611827 ], [ 82.1985143, 16.6125952 ], [ 82.1990486, 16.612592 ], [ 82.1995861, 16.6131042 ], [ 82.2001212, 16.6132303 ], [ 82.2006636, 16.6145151 ], [ 82.2033374, 16.6148855 ], [ 82.2057466, 16.6156444 ], [ 82.2062841, 16.6161564 ], [ 82.2068193, 16.6162826 ], [ 82.2077666, 16.6183378 ], [ 82.2080355, 16.6185937 ], [ 82.2084462, 16.6201369 ], [ 82.2089805, 16.6201339 ], [ 82.209389, 16.6214195 ], [ 82.2101985, 16.6227026 ], [ 82.2102049, 16.623733 ], [ 82.2104738, 16.6239889 ], [ 82.210749, 16.6252752 ], [ 82.2115553, 16.6260433 ], [ 82.2116959, 16.6270728 ], [ 82.2122302, 16.6270698 ], [ 82.2127758, 16.6288697 ], [ 82.2133102, 16.6288666 ], [ 82.2139824, 16.6296355 ], [ 82.2141198, 16.6301497 ], [ 82.2151941, 16.6310447 ], [ 82.2157294, 16.6311707 ], [ 82.2160013, 16.6319418 ], [ 82.2165381, 16.6323248 ], [ 82.2170733, 16.6324508 ], [ 82.2172096, 16.6329651 ], [ 82.217611255784163, 16.633347702849644 ], [ 82.2188223, 16.6345013 ], [ 82.2189597, 16.6350156 ], [ 82.2200325, 16.6356529 ], [ 82.2205678, 16.6357789 ], [ 82.220571, 16.6362941 ], [ 82.2213765, 16.6369328 ], [ 82.223255, 16.6382097 ], [ 82.223966, 16.6384225 ], [ 82.224059, 16.6385918 ], [ 82.2245957, 16.6389745 ], [ 82.2254005, 16.639485 ], [ 82.2262054, 16.6399953 ], [ 82.2267405, 16.6401216 ], [ 82.2267439, 16.6406366 ], [ 82.2280805, 16.640757 ], [ 82.2288855, 16.6412675 ], [ 82.2312918, 16.6415107 ], [ 82.2331595, 16.6411138 ], [ 82.2332893, 16.6405979 ], [ 82.2340826, 16.6393053 ], [ 82.234071, 16.6375022 ], [ 82.234728, 16.6356952 ], [ 82.2352599, 16.6353051 ], [ 82.2371285, 16.6350365 ], [ 82.2373973, 16.6352924 ], [ 82.2379325, 16.6354185 ], [ 82.2382047, 16.6361896 ], [ 82.239275, 16.6364408 ], [ 82.2395503, 16.6377271 ], [ 82.2403536, 16.6379798 ], [ 82.2407654, 16.6397804 ], [ 82.2413031, 16.6402924 ], [ 82.2418509, 16.6423499 ], [ 82.2421196, 16.6426058 ], [ 82.242257, 16.6431203 ], [ 82.2446692, 16.6442645 ], [ 82.2468083, 16.6445092 ], [ 82.2524108, 16.6431875 ], [ 82.2526764, 16.6429282 ], [ 82.2542761, 16.6424036 ], [ 82.2545416, 16.6421443 ], [ 82.2556085, 16.6418802 ], [ 82.2558741, 16.6416211 ], [ 82.2566739, 16.6413586 ], [ 82.2577427, 16.6413522 ], [ 82.2612084, 16.6401724 ], [ 82.2616038, 16.6393973 ], [ 82.2623834, 16.6360439 ], [ 82.2629126, 16.6352681 ], [ 82.262836199194922, 16.633410240195996 ], [ 82.2625949, 16.6275425 ], [ 82.2620504, 16.6260003 ], [ 82.26111, 16.625104 ], [ 82.2596359, 16.6244694 ], [ 82.2595019, 16.624341 ], [ 82.2582604, 16.624004 ], [ 82.2574819, 16.6219065 ], [ 82.2574702, 16.6201036 ], [ 82.2580011, 16.6195852 ], [ 82.2581285, 16.618554 ], [ 82.2586603, 16.6181639 ], [ 82.2597263, 16.6177716 ], [ 82.2603785, 16.6154495 ], [ 82.2603634, 16.6131312 ], [ 82.2602296, 16.6130029 ], [ 82.2595193, 16.6130479 ], [ 82.2594222, 16.6121067 ], [ 82.2588879, 16.6121099 ], [ 82.258749, 16.611338 ], [ 82.2582096, 16.6105684 ], [ 82.2578051, 16.6099266 ], [ 82.2568671, 16.6095463 ], [ 82.2567306, 16.6090318 ], [ 82.2556613, 16.6089092 ], [ 82.254855, 16.6081413 ], [ 82.2540517, 16.6078886 ], [ 82.2533778, 16.6069914 ], [ 82.2533744, 16.6064764 ], [ 82.2531039, 16.6059629 ], [ 82.2536214, 16.6033838 ], [ 82.2536148, 16.6023535 ], [ 82.2538786, 16.6018368 ], [ 82.2540058, 16.6008056 ], [ 82.2529365, 16.6006828 ], [ 82.2526694, 16.6006845 ], [ 82.2522725, 16.6013312 ], [ 82.2518739, 16.6015913 ], [ 82.2518688, 16.6008185 ], [ 82.2481325, 16.6013562 ], [ 82.2481359, 16.6018714 ], [ 82.2475991, 16.6014877 ], [ 82.2473319, 16.6014892 ], [ 82.2469333, 16.6018786 ], [ 82.246935, 16.6021362 ], [ 82.2473394, 16.6026489 ], [ 82.2465371, 16.6025244 ], [ 82.2459996, 16.6020124 ], [ 82.2454653, 16.6020156 ], [ 82.2451941, 16.6013737 ], [ 82.2447945, 16.6016338 ], [ 82.2446649, 16.6021498 ], [ 82.2441296, 16.6020237 ], [ 82.2433324, 16.6026729 ], [ 82.2433258, 16.6016425 ], [ 82.2427932, 16.6019033 ], [ 82.2426543, 16.6011314 ], [ 82.2401013, 16.598699 ], [ 82.2392975, 16.598318 ], [ 82.2393041, 16.5993482 ], [ 82.2387698, 16.5993514 ], [ 82.2386326, 16.5988372 ], [ 82.2380949, 16.5983252 ], [ 82.2380899, 16.5975524 ], [ 82.2383555, 16.5972932 ], [ 82.2383538, 16.5970356 ], [ 82.23822, 16.5969071 ], [ 82.2376849, 16.596782 ], [ 82.2372771, 16.5957542 ], [ 82.2374078, 16.5952382 ], [ 82.2368728, 16.5951122 ], [ 82.2364676, 16.5944711 ], [ 82.2352585, 16.5933186 ], [ 82.234319, 16.5926807 ], [ 82.2341827, 16.5921662 ], [ 82.231773, 16.5912785 ], [ 82.2312387, 16.5912817 ], [ 82.2301669, 16.5907729 ], [ 82.2296294, 16.5902609 ], [ 82.2282939, 16.5902689 ], [ 82.2280244, 16.5898844 ], [ 82.2288257, 16.5898797 ], [ 82.22869, 16.5896229 ], [ 82.2286834, 16.5885926 ], [ 82.2280136, 16.5882097 ], [ 82.2269388, 16.5871857 ], [ 82.2258679, 16.5868062 ], [ 82.2257305, 16.5862917 ], [ 82.2246571, 16.5855253 ], [ 82.2245209, 16.5850109 ], [ 82.2237188, 16.5848863 ], [ 82.2227794, 16.5842485 ], [ 82.2229085, 16.5834749 ], [ 82.2218376, 16.5830944 ], [ 82.2213001, 16.5825822 ], [ 82.2207651, 16.5824571 ], [ 82.2207619, 16.5819419 ], [ 82.219691, 16.5815614 ], [ 82.219152, 16.5807918 ], [ 82.2180788, 16.5800252 ], [ 82.2175438, 16.5799001 ], [ 82.2175405, 16.5793849 ], [ 82.2170062, 16.5793881 ], [ 82.2167311, 16.5781018 ], [ 82.2161984, 16.5783624 ], [ 82.2160597, 16.5775905 ], [ 82.2152502, 16.5763072 ], [ 82.2149768, 16.5752785 ], [ 82.2141722, 16.574768 ], [ 82.2134937, 16.5729687 ], [ 82.2129586, 16.5728427 ], [ 82.2126899, 16.5725866 ], [ 82.212155, 16.5724615 ], [ 82.2118815, 16.5714327 ], [ 82.2113464, 16.5713065 ], [ 82.2109429, 16.570923 ], [ 82.2108067, 16.5704085 ], [ 82.2102716, 16.5702825 ], [ 82.2097335, 16.569642 ], [ 82.2102676, 16.5696389 ], [ 82.2107921, 16.5680903 ], [ 82.210258, 16.5680935 ], [ 82.2101272, 16.5686095 ], [ 82.209464, 16.5692568 ], [ 82.2091969, 16.5692583 ], [ 82.2089282, 16.5690022 ], [ 82.2083931, 16.5688771 ], [ 82.2082559, 16.5683626 ], [ 82.2075863, 16.5679797 ], [ 82.2059741, 16.5664435 ], [ 82.2053035, 16.5660615 ], [ 82.2052973, 16.5650311 ], [ 82.2051633, 16.5649026 ], [ 82.2040934, 16.5646512 ], [ 82.2034228, 16.5642693 ], [ 82.2031478, 16.5629829 ], [ 82.2027437, 16.5623407 ], [ 82.2020732, 16.5619587 ], [ 82.2022007, 16.5609276 ], [ 82.2013996, 16.5609323 ], [ 82.2013963, 16.5604171 ], [ 82.2019297, 16.5602848 ], [ 82.2024606, 16.5597665 ], [ 82.2056543, 16.5579449 ], [ 82.2064506, 16.5571676 ], [ 82.207251, 16.5570345 ], [ 82.2075133, 16.5562602 ], [ 82.2069807, 16.556521 ], [ 82.2069743, 16.5554906 ], [ 82.2064402, 16.5554936 ], [ 82.2063111, 16.5562672 ], [ 82.205915, 16.556913 ], [ 82.2048515, 16.5576919 ], [ 82.2040518, 16.5579542 ], [ 82.2035224, 16.5587301 ], [ 82.2021896, 16.5591245 ], [ 82.2021928, 16.5596397 ], [ 82.2011268, 16.5600317 ], [ 82.2008613, 16.5602908 ], [ 82.2005942, 16.5602925 ], [ 82.2004595, 16.5601649 ], [ 82.2003232, 16.5596505 ], [ 82.1997891, 16.5596535 ], [ 82.1999189, 16.5591375 ], [ 82.2001845, 16.5588784 ], [ 82.2001828, 16.5586208 ], [ 82.1999142, 16.5583649 ], [ 82.2000418, 16.5573337 ], [ 82.1995092, 16.5575943 ], [ 82.199506, 16.5570793 ], [ 82.1989726, 16.5572107 ], [ 82.1988379, 16.5570831 ], [ 82.1987016, 16.5565686 ], [ 82.1979021, 16.556831 ], [ 82.1981643, 16.5560566 ], [ 82.1976294, 16.5559304 ], [ 82.196825, 16.5554199 ], [ 82.1965555, 16.5550355 ], [ 82.1970896, 16.5550325 ], [ 82.1968178, 16.5542611 ], [ 82.1954833, 16.5543972 ], [ 82.194946, 16.553885 ], [ 82.1944111, 16.5537599 ], [ 82.1946829, 16.554531 ], [ 82.1936139, 16.554408 ], [ 82.1932104, 16.5540243 ], [ 82.1930741, 16.5535099 ], [ 82.19254, 16.5535129 ], [ 82.1926683, 16.5527395 ], [ 82.1934648, 16.5519621 ], [ 82.19346, 16.5511893 ], [ 82.1933262, 16.5510608 ], [ 82.1927912, 16.5509357 ], [ 82.1930535, 16.5501614 ], [ 82.1917199, 16.5504265 ], [ 82.191715, 16.5496539 ], [ 82.1911801, 16.5495276 ], [ 82.1907768, 16.549144 ], [ 82.1906405, 16.5486295 ], [ 82.1914402, 16.5483674 ], [ 82.191303, 16.5478531 ], [ 82.1903648, 16.5472139 ], [ 82.1898307, 16.5472169 ], [ 82.1895644, 16.5473477 ], [ 82.190089, 16.5457992 ], [ 82.1890208, 16.5458053 ], [ 82.1888836, 16.5452908 ], [ 82.1880777, 16.5445227 ], [ 82.188207, 16.5437492 ], [ 82.1890097, 16.5440022 ], [ 82.1890129, 16.5445174 ], [ 82.189547, 16.5445144 ], [ 82.1898061, 16.5432249 ], [ 82.1900732, 16.5432234 ], [ 82.1900764, 16.5437386 ], [ 82.190876, 16.5434764 ], [ 82.1907403, 16.5432196 ], [ 82.1907373, 16.5427044 ], [ 82.1911352, 16.5421869 ], [ 82.190601, 16.5421901 ], [ 82.1905946, 16.5411597 ], [ 82.1916581, 16.5403808 ], [ 82.1917927, 16.5406376 ], [ 82.1916645, 16.5414112 ], [ 82.1932644, 16.5410153 ], [ 82.1935298, 16.5407562 ], [ 82.1940631, 16.5406246 ], [ 82.1940664, 16.5411398 ], [ 82.1948698, 16.5415212 ], [ 82.1962058, 16.5416427 ], [ 82.1963421, 16.5421572 ], [ 82.1967464, 16.54267 ], [ 82.1962123, 16.5426732 ], [ 82.1962138, 16.5429306 ], [ 82.1970149, 16.5429261 ], [ 82.1971433, 16.5421525 ], [ 82.1966044, 16.5413829 ], [ 82.1964667, 16.5406108 ], [ 82.1972676, 16.5406063 ], [ 82.1975396, 16.5413776 ], [ 82.1980752, 16.541632 ], [ 82.1983359, 16.5406002 ], [ 82.1978018, 16.5406032 ], [ 82.1975285, 16.5395745 ], [ 82.1980626, 16.5395713 ], [ 82.1984595, 16.5390538 ], [ 82.1985903, 16.538538 ], [ 82.1953858, 16.5385564 ], [ 82.1953826, 16.5380412 ], [ 82.1964468, 16.5373906 ], [ 82.1988477, 16.5369909 ], [ 82.1988445, 16.5364759 ], [ 82.1993786, 16.5364727 ], [ 82.1989696, 16.5351871 ], [ 82.1989681, 16.5349295 ], [ 82.1994975, 16.5341536 ], [ 82.1996283, 16.5336378 ], [ 82.2004302, 16.5337614 ], [ 82.2006987, 16.5340175 ], [ 82.203904, 16.5341283 ], [ 82.2039008, 16.5336133 ], [ 82.2041678, 16.5336116 ], [ 82.2041711, 16.5341268 ], [ 82.2049762, 16.5347656 ], [ 82.2073835, 16.5353961 ], [ 82.20711, 16.5343674 ], [ 82.2076441, 16.5343644 ], [ 82.2071053, 16.5335948 ], [ 82.2076392, 16.5335915 ], [ 82.2076377, 16.5333339 ], [ 82.2071028, 16.5332079 ], [ 82.2068333, 16.5328234 ], [ 82.2073659, 16.5325628 ], [ 82.2083064, 16.5335878 ], [ 82.2084547, 16.5359051 ], [ 82.2095286, 16.5368 ], [ 82.2100635, 16.5369263 ], [ 82.2101981, 16.5371831 ], [ 82.2104733, 16.5384694 ], [ 82.2108775, 16.5389822 ], [ 82.2117181, 16.5401901 ], [ 82.2132954, 16.5412865 ], [ 82.2135625, 16.541285 ], [ 82.2138359, 16.5423137 ], [ 82.2149025, 16.5420499 ], [ 82.2150372, 16.5423067 ], [ 82.2151824, 16.544109 ], [ 82.2157157, 16.5439767 ], [ 82.2175931, 16.5452536 ], [ 82.2186613, 16.5452474 ], [ 82.2191964, 16.5453734 ], [ 82.2189325, 16.5458901 ], [ 82.2194666, 16.5458871 ], [ 82.2194731, 16.5469174 ], [ 82.2200072, 16.5469143 ], [ 82.220004, 16.5463991 ], [ 82.220271, 16.5463976 ], [ 82.2202742, 16.5469126 ], [ 82.2208066, 16.546652 ], [ 82.2209429, 16.5471665 ], [ 82.2212117, 16.5474224 ], [ 82.2210835, 16.5481959 ], [ 82.2218879, 16.5487064 ], [ 82.2218847, 16.5481912 ], [ 82.2224164, 16.5478013 ], [ 82.2226834, 16.5477998 ], [ 82.223219, 16.5480542 ], [ 82.2242939, 16.5490782 ], [ 82.2248288, 16.5492043 ], [ 82.2251022, 16.550233 ], [ 82.2264409, 16.5507405 ], [ 82.2267129, 16.5515116 ], [ 82.2272493, 16.5518943 ], [ 82.2280522, 16.5521472 ], [ 82.2288565, 16.5526577 ], [ 82.2299314, 16.5536817 ], [ 82.2310006, 16.5538045 ], [ 82.2316726, 16.5545734 ], [ 82.2316741, 16.554831 ], [ 82.2312774, 16.5553485 ], [ 82.2323496, 16.5559856 ], [ 82.2326191, 16.556371 ], [ 82.2328862, 16.5563693 ], [ 82.2328847, 16.5561116 ], [ 82.232708, 16.5560241 ], [ 82.2326127, 16.5553405 ], [ 82.2331468, 16.5553375 ], [ 82.2339595, 16.5571356 ], [ 82.2342256, 16.5570049 ], [ 82.2350278, 16.5571294 ], [ 82.2352997, 16.5579005 ], [ 82.2363704, 16.55828 ], [ 82.2366392, 16.5585361 ], [ 82.237174, 16.5586622 ], [ 82.2378463, 16.5594311 ], [ 82.2379835, 16.5599453 ], [ 82.2385186, 16.5600704 ], [ 82.2393247, 16.5608385 ], [ 82.2395917, 16.5608368 ], [ 82.2401226, 16.5603186 ], [ 82.2403897, 16.5603169 ], [ 82.2411941, 16.5608274 ], [ 82.2417316, 16.5613394 ], [ 82.2425337, 16.5614637 ], [ 82.2437433, 16.5627444 ], [ 82.2438805, 16.5632589 ], [ 82.246553, 16.5635004 ], [ 82.246691, 16.5642725 ], [ 82.2469597, 16.5645284 ], [ 82.2470971, 16.5650427 ], [ 82.2476312, 16.5650394 ], [ 82.2479049, 16.5660682 ], [ 82.24844, 16.5661933 ], [ 82.2489775, 16.5667053 ], [ 82.2495123, 16.5668313 ], [ 82.2499159, 16.5673441 ], [ 82.249786, 16.5678601 ], [ 82.2503211, 16.5679852 ], [ 82.2505898, 16.5682411 ], [ 82.2511249, 16.5683672 ], [ 82.2512612, 16.5688816 ], [ 82.2515299, 16.5691375 ], [ 82.2516673, 16.5696518 ], [ 82.2532757, 16.5705433 ], [ 82.2538106, 16.5706694 ], [ 82.2535469, 16.5711861 ], [ 82.2538147, 16.5713127 ], [ 82.2548839, 16.5714356 ], [ 82.2552874, 16.5719483 ], [ 82.2554248, 16.5724626 ], [ 82.2559614, 16.5728453 ], [ 82.2570323, 16.5732258 ], [ 82.257034, 16.5734834 ], [ 82.2565006, 16.5736149 ], [ 82.2563676, 16.573745 ], [ 82.2565065, 16.5745168 ], [ 82.2578427, 16.574637 ], [ 82.2589136, 16.5750175 ], [ 82.2589104, 16.5745023 ], [ 82.2591774, 16.5745008 ], [ 82.2594511, 16.5755293 ], [ 82.2599879, 16.575912 ], [ 82.2605229, 16.5760381 ], [ 82.2607951, 16.5768092 ], [ 82.2621321, 16.5770587 ], [ 82.2618684, 16.5775754 ], [ 82.2626715, 16.5778281 ], [ 82.2629434, 16.5785992 ], [ 82.2637448, 16.5785943 ], [ 82.2637482, 16.5791095 ], [ 82.2645511, 16.5793622 ], [ 82.2644621, 16.5797894 ], [ 82.2629502, 16.5796295 ], [ 82.2628128, 16.5791152 ], [ 82.262411, 16.5788601 ], [ 82.2625509, 16.5798895 ], [ 82.262421, 16.5804055 ], [ 82.2637575, 16.5805257 ], [ 82.2640262, 16.5807816 ], [ 82.2645596, 16.5806501 ], [ 82.264563, 16.5811653 ], [ 82.2650971, 16.5811621 ], [ 82.2649147, 16.5802205 ], [ 82.2653583, 16.5802585 ], [ 82.2661646, 16.5810264 ], [ 82.2672339, 16.581149 ], [ 82.2672371, 16.5816643 ], [ 82.2677714, 16.5816609 ], [ 82.2677748, 16.5821761 ], [ 82.268576, 16.5821712 ], [ 82.2687125, 16.5826856 ], [ 82.2689814, 16.5829415 ], [ 82.2691186, 16.5834558 ], [ 82.2696529, 16.5834526 ], [ 82.2700565, 16.5839653 ], [ 82.2701939, 16.5844796 ], [ 82.2718024, 16.5853709 ], [ 82.2726038, 16.585366 ], [ 82.2734101, 16.5861337 ], [ 82.2739451, 16.5862598 ], [ 82.2739485, 16.5867748 ], [ 82.2747499, 16.5867701 ], [ 82.2750238, 16.5877986 ], [ 82.2755605, 16.5881814 ], [ 82.2763653, 16.5886915 ], [ 82.2769003, 16.5888175 ], [ 82.2769037, 16.5893326 ], [ 82.2777093, 16.5899712 ], [ 82.2782443, 16.5900971 ], [ 82.2783859, 16.5913841 ], [ 82.2782538, 16.5915134 ], [ 82.2774532, 16.5916474 ], [ 82.2774566, 16.5921626 ], [ 82.2782589, 16.5922861 ], [ 82.278525, 16.592156 ], [ 82.2785301, 16.5929288 ], [ 82.2777289, 16.5929338 ], [ 82.2777442, 16.5952518 ], [ 82.2785454, 16.5952469 ], [ 82.2786769, 16.5949886 ], [ 82.2785352, 16.5937015 ], [ 82.2790695, 16.5936983 ], [ 82.2794817, 16.5954989 ], [ 82.2794902, 16.5967867 ], [ 82.2793579, 16.5969158 ], [ 82.2785643, 16.5980802 ], [ 82.2799015, 16.5983297 ], [ 82.2798981, 16.5978145 ], [ 82.2812337, 16.5978062 ], [ 82.2814957, 16.5970318 ], [ 82.2865649, 16.5960986 ], [ 82.2873628, 16.5955784 ], [ 82.2878971, 16.5955752 ], [ 82.2895032, 16.5960804 ], [ 82.2903046, 16.5960755 ], [ 82.2911007, 16.5952978 ], [ 82.2916333, 16.595037 ], [ 82.2924293, 16.5942592 ], [ 82.2937606, 16.5936074 ], [ 82.2941644, 16.5941201 ], [ 82.2941798, 16.5964382 ], [ 82.2940485, 16.5966966 ], [ 82.2948497, 16.5966916 ], [ 82.2948533, 16.5972067 ], [ 82.2940519, 16.5972118 ], [ 82.2944573, 16.5979819 ], [ 82.2944641, 16.5990122 ], [ 82.2948722, 16.60004 ], [ 82.2943379, 16.6000434 ], [ 82.2942074, 16.6005593 ], [ 82.2936765, 16.6010778 ], [ 82.2938192, 16.6023649 ], [ 82.2946223, 16.6026174 ], [ 82.295019, 16.6020997 ], [ 82.2957981, 16.5987463 ], [ 82.2965941, 16.5979687 ], [ 82.2965907, 16.5974535 ], [ 82.2979056, 16.5943543 ], [ 82.297902, 16.5938393 ], [ 82.2984293, 16.5928056 ], [ 82.2986879, 16.5915161 ], [ 82.2986654, 16.5881676 ], [ 82.2989256, 16.5871356 ], [ 82.29891, 16.5848175 ], [ 82.2986378, 16.5840464 ], [ 82.2980984, 16.5832772 ], [ 82.298229, 16.5827612 ], [ 82.2974286, 16.5828945 ], [ 82.2972953, 16.5830245 ], [ 82.2974346, 16.5837964 ], [ 82.2960948, 16.5831604 ], [ 82.2955605, 16.5831636 ], [ 82.2952944, 16.5832946 ], [ 82.2953823, 16.5828665 ], [ 82.295558, 16.5827778 ], [ 82.2955561, 16.5825202 ], [ 82.2952891, 16.5825219 ], [ 82.2950237, 16.5827811 ], [ 82.2946157, 16.5817533 ], [ 82.2943469, 16.5814974 ], [ 82.2938041, 16.5802129 ], [ 82.2935354, 16.579957 ], [ 82.2925682, 16.5750689 ], [ 82.2912303, 16.5746903 ], [ 82.2901611, 16.5745686 ], [ 82.289882, 16.5727673 ], [ 82.2893479, 16.5727707 ], [ 82.2890704, 16.5712267 ], [ 82.2885363, 16.5712301 ], [ 82.2885329, 16.5707149 ], [ 82.2879995, 16.5708467 ], [ 82.2877308, 16.5705907 ], [ 82.2869296, 16.5705957 ], [ 82.286531, 16.570985 ], [ 82.2865327, 16.5712424 ], [ 82.2873409, 16.5722679 ], [ 82.2873426, 16.5725253 ], [ 82.2872103, 16.5726546 ], [ 82.2866771, 16.5727871 ], [ 82.2865864, 16.5729566 ], [ 82.2853424, 16.5729238 ], [ 82.2832024, 16.5724218 ], [ 82.2824012, 16.5724267 ], [ 82.2818654, 16.5721723 ], [ 82.2783898, 16.5716786 ], [ 82.2770493, 16.5709141 ], [ 82.2765152, 16.5709173 ], [ 82.2757106, 16.570407 ], [ 82.2741046, 16.5699017 ], [ 82.2732984, 16.5691339 ], [ 82.2714254, 16.5686302 ], [ 82.2711566, 16.5683743 ], [ 82.2706225, 16.5683776 ], [ 82.2698177, 16.5678673 ], [ 82.2692829, 16.5677421 ], [ 82.2692795, 16.5672271 ], [ 82.2687461, 16.5673587 ], [ 82.2668699, 16.5663398 ], [ 82.2649986, 16.5660935 ], [ 82.2628571, 16.5653337 ], [ 82.2623196, 16.5648217 ], [ 82.2605755, 16.5636737 ], [ 82.2601712, 16.5630317 ], [ 82.2593666, 16.5625214 ], [ 82.2582967, 16.5622702 ], [ 82.2574921, 16.5617599 ], [ 82.25669, 16.5616365 ], [ 82.2564146, 16.5603502 ], [ 82.2580187, 16.5605981 ], [ 82.2580155, 16.5600829 ], [ 82.259082, 16.5598189 ], [ 82.2590786, 16.5593039 ], [ 82.2609489, 16.5594208 ], [ 82.2614823, 16.5592893 ], [ 82.2610778, 16.5587765 ], [ 82.2609414, 16.5582621 ], [ 82.2604082, 16.5583938 ], [ 82.2582666, 16.5576339 ], [ 82.2579979, 16.5573779 ], [ 82.2563938, 16.55713 ], [ 82.2561241, 16.5567457 ], [ 82.256927, 16.5569984 ], [ 82.2569238, 16.5564834 ], [ 82.2563897, 16.5564866 ], [ 82.256388, 16.556229 ], [ 82.2652035, 16.5565617 ], [ 82.2660064, 16.5568143 ], [ 82.2678775, 16.5570604 ], [ 82.2692128, 16.5570523 ], [ 82.2697486, 16.5573067 ], [ 82.2702827, 16.5573035 ], [ 82.2732273, 16.5583158 ], [ 82.2734961, 16.5585717 ], [ 82.2764337, 16.5585537 ], [ 82.2767025, 16.5588098 ], [ 82.2793764, 16.5593086 ], [ 82.2796444, 16.5594362 ], [ 82.2796376, 16.5584057 ], [ 82.2788382, 16.5586682 ], [ 82.2787007, 16.558154 ], [ 82.2785667, 16.5580255 ], [ 82.2766966, 16.5579087 ], [ 82.2766932, 16.5573934 ], [ 82.2777631, 16.5576446 ], [ 82.2777597, 16.5571294 ], [ 82.2796299, 16.5572462 ], [ 82.2801625, 16.5569854 ], [ 82.2817648, 16.5569756 ], [ 82.2841717, 16.5574758 ], [ 82.2852443, 16.5581137 ], [ 82.2852409, 16.5575985 ], [ 82.2871162, 16.5584881 ], [ 82.2881853, 16.5586108 ], [ 82.2884558, 16.5591243 ], [ 82.2865855, 16.5590066 ], [ 82.286321, 16.559395 ], [ 82.2873893, 16.5593883 ], [ 82.2873927, 16.5599036 ], [ 82.2884592, 16.5596393 ], [ 82.2887298, 16.5601528 ], [ 82.2873944, 16.5601612 ], [ 82.2873961, 16.5604188 ], [ 82.2884686, 16.5610555 ], [ 82.2890028, 16.5610523 ], [ 82.2892681, 16.560793 ], [ 82.2900702, 16.5609173 ], [ 82.2900736, 16.5614324 ], [ 82.2903416, 16.5615592 ], [ 82.2908758, 16.5615558 ], [ 82.2911436, 16.5616834 ], [ 82.2911385, 16.5609107 ], [ 82.2919413, 16.5611632 ], [ 82.2919466, 16.5619361 ], [ 82.2924798, 16.5618034 ], [ 82.2948843, 16.5619177 ], [ 82.294752, 16.5621763 ], [ 82.2948912, 16.5629482 ], [ 82.2954244, 16.5628155 ], [ 82.2956932, 16.5630714 ], [ 82.2967623, 16.563194 ], [ 82.2967693, 16.5642243 ], [ 82.2970355, 16.5640935 ], [ 82.2981054, 16.5643443 ], [ 82.2986397, 16.5643411 ], [ 82.298905, 16.5640818 ], [ 82.299707, 16.5642059 ], [ 82.2997106, 16.5647212 ], [ 82.3002447, 16.5647178 ], [ 82.3006482, 16.5652305 ], [ 82.3006499, 16.5654879 ], [ 82.3002568, 16.5665208 ], [ 82.3007926, 16.566775 ], [ 82.3007892, 16.5662598 ], [ 82.3031876, 16.5654722 ], [ 82.3031929, 16.5662449 ], [ 82.303459, 16.5661139 ], [ 82.3039931, 16.5661107 ], [ 82.3045289, 16.5663649 ], [ 82.3058652, 16.5664857 ], [ 82.3058704, 16.5672585 ], [ 82.3074737, 16.5673768 ], [ 82.3082785, 16.5678869 ], [ 82.308816, 16.5683985 ], [ 82.3096181, 16.5685229 ], [ 82.3097531, 16.5687796 ], [ 82.3097635, 16.570325 ], [ 82.309238, 16.5716163 ], [ 82.3088404, 16.5720047 ], [ 82.3067047, 16.5721472 ], [ 82.3064514, 16.5742095 ], [ 82.3059173, 16.5742129 ], [ 82.3056573, 16.5752449 ], [ 82.3072579, 16.5749772 ], [ 82.3075198, 16.5742027 ], [ 82.3080532, 16.5740702 ], [ 82.3085837, 16.5735516 ], [ 82.3091171, 16.5734201 ], [ 82.3091118, 16.5726473 ], [ 82.310977, 16.5719912 ], [ 82.3112424, 16.5717319 ], [ 82.3125743, 16.5712084 ], [ 82.3131059, 16.5708191 ], [ 82.313654, 16.5728763 ], [ 82.3141881, 16.5728729 ], [ 82.3141915, 16.5733881 ], [ 82.3149937, 16.5735114 ], [ 82.31526, 16.5733813 ], [ 82.3152653, 16.574154 ], [ 82.3163335, 16.5741473 ], [ 82.3167372, 16.5746599 ], [ 82.3175595, 16.5777457 ], [ 82.3178283, 16.5780014 ], [ 82.3175718, 16.5795486 ], [ 82.3174597, 16.5826403 ], [ 82.3169264, 16.582772 ], [ 82.3167933, 16.582902 ], [ 82.316802, 16.5841899 ], [ 82.3161392, 16.5848376 ], [ 82.3160059, 16.5849678 ], [ 82.3158765, 16.5854838 ], [ 82.3164106, 16.5854804 ], [ 82.31628, 16.5859963 ], [ 82.3156189, 16.5869016 ], [ 82.3150855, 16.5870341 ], [ 82.3153581, 16.5878052 ], [ 82.3158922, 16.5878018 ], [ 82.3158939, 16.5880594 ], [ 82.3153605, 16.5881912 ], [ 82.3150952, 16.5884503 ], [ 82.314561, 16.5884537 ], [ 82.3144278, 16.5885837 ], [ 82.314569, 16.5896132 ], [ 82.3148368, 16.5897398 ], [ 82.3172382, 16.5893388 ], [ 82.3173677, 16.5888228 ], [ 82.3178967, 16.5880468 ], [ 82.3184151, 16.5857251 ], [ 82.3184081, 16.5846949 ], [ 82.3186699, 16.5839205 ], [ 82.3186646, 16.5831479 ], [ 82.3189266, 16.5823734 ], [ 82.3189107, 16.5800553 ], [ 82.3186419, 16.5797994 ], [ 82.3180831, 16.5761969 ], [ 82.3178143, 16.575941 ], [ 82.3176707, 16.5743964 ], [ 82.3171365, 16.5743999 ], [ 82.3165901, 16.5726002 ], [ 82.316056, 16.5726036 ], [ 82.3159184, 16.5720893 ], [ 82.315245, 16.5711916 ], [ 82.3147092, 16.5709374 ], [ 82.3130963, 16.5694019 ], [ 82.3120271, 16.5692804 ], [ 82.3120235, 16.5687652 ], [ 82.3114887, 16.5686393 ], [ 82.310951, 16.5681277 ], [ 82.3096121, 16.5676208 ], [ 82.3090744, 16.5671092 ], [ 82.3082715, 16.5668565 ], [ 82.3077338, 16.5663447 ], [ 82.3058591, 16.5655838 ], [ 82.3055903, 16.5653279 ], [ 82.3042515, 16.5648211 ], [ 82.3039827, 16.5645652 ], [ 82.3023768, 16.56406 ], [ 82.3013034, 16.563294 ], [ 82.2983605, 16.5625397 ], [ 82.297287, 16.5617735 ], [ 82.2967529, 16.5617769 ], [ 82.2954123, 16.5610126 ], [ 82.2948782, 16.5610158 ], [ 82.2943407, 16.560504 ], [ 82.2935361, 16.5599939 ], [ 82.292466, 16.5597429 ], [ 82.2897869, 16.5584715 ], [ 82.288181, 16.5579663 ], [ 82.2873764, 16.5574562 ], [ 82.2868423, 16.5574594 ], [ 82.2860377, 16.5569493 ], [ 82.2847007, 16.5566998 ], [ 82.2836291, 16.5561914 ], [ 82.283095, 16.5561946 ], [ 82.2814876, 16.5554318 ], [ 82.2809534, 16.555435 ], [ 82.2796148, 16.5549281 ], [ 82.2790806, 16.5549313 ], [ 82.2769391, 16.5541717 ], [ 82.2766703, 16.5539158 ], [ 82.2753333, 16.5536664 ], [ 82.2702473, 16.5518943 ], [ 82.2681058, 16.5511347 ], [ 82.2667688, 16.5508852 ], [ 82.2659644, 16.5503749 ], [ 82.2654303, 16.5503781 ], [ 82.2643587, 16.5498695 ], [ 82.2635575, 16.5498743 ], [ 82.2622188, 16.5493674 ], [ 82.2616847, 16.5493706 ], [ 82.2582048, 16.5481035 ], [ 82.2576707, 16.5481067 ], [ 82.2544577, 16.5468382 ], [ 82.2539236, 16.5468414 ], [ 82.2536548, 16.5465855 ], [ 82.252852, 16.5463328 ], [ 82.252051, 16.5463375 ], [ 82.2507106, 16.5455728 ], [ 82.2485692, 16.5448128 ], [ 82.2480353, 16.5448161 ], [ 82.2458939, 16.5440561 ], [ 82.2450894, 16.5435458 ], [ 82.2437526, 16.5432961 ], [ 82.2426811, 16.5427873 ], [ 82.242147, 16.5427905 ], [ 82.2408068, 16.5420257 ], [ 82.2400056, 16.5420306 ], [ 82.2389325, 16.5412642 ], [ 82.2383984, 16.5412674 ], [ 82.2367913, 16.540504 ], [ 82.2359902, 16.5405087 ], [ 82.2357206, 16.5401245 ], [ 82.2349195, 16.5401292 ], [ 82.234918, 16.5398716 ], [ 82.233848, 16.5396204 ], [ 82.2338463, 16.5393628 ], [ 82.2322425, 16.5391147 ], [ 82.232241, 16.5388571 ], [ 82.2311703, 16.5384766 ], [ 82.2306362, 16.5384798 ], [ 82.2292961, 16.537715 ], [ 82.228495, 16.5377197 ], [ 82.2274252, 16.5374683 ], [ 82.2271589, 16.5375991 ], [ 82.2271557, 16.5370841 ], [ 82.2266209, 16.5369578 ], [ 82.2260835, 16.5364458 ], [ 82.2236753, 16.5356872 ], [ 82.2234065, 16.5354313 ], [ 82.2220682, 16.5349238 ], [ 82.2217995, 16.5346679 ], [ 82.2199253, 16.533906 ], [ 82.219388, 16.533394 ], [ 82.2188541, 16.5333971 ], [ 82.2180497, 16.5328866 ], [ 82.2159085, 16.5321264 ], [ 82.21564, 16.5318703 ], [ 82.2124275, 16.530601 ], [ 82.2113546, 16.5298346 ], [ 82.2108205, 16.5298376 ], [ 82.2094804, 16.5290725 ], [ 82.2089463, 16.5290758 ], [ 82.2084092, 16.5285636 ], [ 82.2068038, 16.5280578 ], [ 82.2059994, 16.5275473 ], [ 82.2054623, 16.5270351 ], [ 82.2049282, 16.5270382 ], [ 82.2046596, 16.5267822 ], [ 82.2033213, 16.5262748 ], [ 82.2030526, 16.5260187 ], [ 82.2001074, 16.5247477 ], [ 82.1998388, 16.5244916 ], [ 82.1990361, 16.5242387 ], [ 82.1979632, 16.5234721 ], [ 82.1963578, 16.5229661 ], [ 82.1960892, 16.5227101 ], [ 82.1947509, 16.5222024 ], [ 82.1944823, 16.5219465 ], [ 82.1926084, 16.5211844 ], [ 82.1920713, 16.5206723 ], [ 82.1888592, 16.5194026 ], [ 82.1883219, 16.5188906 ], [ 82.1869853, 16.5186405 ], [ 82.1864481, 16.5181283 ], [ 82.1851098, 16.5176207 ], [ 82.1845727, 16.5171087 ], [ 82.1829675, 16.5166025 ], [ 82.1818948, 16.5158357 ], [ 82.1810936, 16.5158403 ], [ 82.180825, 16.5155842 ], [ 82.1794869, 16.5150767 ], [ 82.1784126, 16.5140523 ], [ 82.1773431, 16.5138008 ], [ 82.1770745, 16.5135447 ], [ 82.1730583, 16.5117641 ], [ 82.1722527, 16.5109958 ], [ 82.1717186, 16.5109989 ], [ 82.1706459, 16.5102321 ], [ 82.1693077, 16.5097244 ], [ 82.1687708, 16.5092122 ], [ 82.1671656, 16.5087059 ], [ 82.1666285, 16.5081937 ], [ 82.1642178, 16.5069193 ], [ 82.1636837, 16.5069223 ], [ 82.1631465, 16.5064101 ], [ 82.161273, 16.5056477 ], [ 82.1607358, 16.5051355 ], [ 82.1588623, 16.5043731 ], [ 82.1585937, 16.504117 ], [ 82.1577912, 16.5038639 ], [ 82.1569872, 16.5033531 ], [ 82.1564501, 16.5028409 ], [ 82.1556491, 16.5028454 ], [ 82.1551119, 16.502333 ], [ 82.1543079, 16.5018223 ], [ 82.1535054, 16.5015691 ], [ 82.1532369, 16.501313 ], [ 82.1516319, 16.5008067 ], [ 82.1505593, 16.5000399 ], [ 82.1492212, 16.499532 ], [ 82.1486842, 16.4990198 ], [ 82.1468107, 16.4982572 ], [ 82.1454728, 16.4977494 ], [ 82.1441331, 16.4969839 ], [ 82.1438647, 16.4967278 ], [ 82.1430623, 16.4964746 ], [ 82.1427937, 16.4962185 ], [ 82.1409203, 16.4954559 ], [ 82.1406517, 16.4951998 ], [ 82.1401178, 16.4952026 ], [ 82.1387784, 16.4944372 ], [ 82.1382443, 16.4944402 ], [ 82.1377073, 16.4939278 ], [ 82.1369033, 16.4934169 ], [ 82.1358339, 16.4931652 ], [ 82.1334234, 16.4918904 ], [ 82.1318186, 16.4913839 ], [ 82.1315501, 16.4911276 ], [ 82.1278033, 16.4896024 ], [ 82.1275348, 16.4893463 ], [ 82.1270001, 16.4892208 ], [ 82.1269973, 16.4887056 ], [ 82.126731, 16.4888354 ], [ 82.1256616, 16.4885835 ], [ 82.125393, 16.4883274 ], [ 82.1240551, 16.4878193 ], [ 82.1237867, 16.4875632 ], [ 82.1219133, 16.4868004 ], [ 82.120841, 16.4860333 ], [ 82.1195032, 16.4855252 ], [ 82.1192346, 16.4852692 ], [ 82.1173615, 16.4845063 ], [ 82.1170929, 16.4842503 ], [ 82.116559, 16.4842531 ], [ 82.1162906, 16.483997 ], [ 82.115356495312497, 16.48346296687593 ], [ 82.115191150727867, 16.483368438407911 ], [ 82.11515649531249, 16.483348625703847 ], [ 82.1149511, 16.4832312 ], [ 82.1141488, 16.4829779 ], [ 82.1138803, 16.4827218 ], [ 82.1122755, 16.4822151 ], [ 82.1120071, 16.481959 ], [ 82.1101339, 16.481196 ], [ 82.1090615, 16.4804289 ], [ 82.1085276, 16.4804317 ], [ 82.1074554, 16.4796647 ], [ 82.1055822, 16.4789017 ], [ 82.1053137, 16.4786456 ], [ 82.1045114, 16.4783922 ], [ 82.1039744, 16.4778798 ], [ 82.1023698, 16.4773731 ], [ 82.1012976, 16.476606 ], [ 82.0994229, 16.4755854 ], [ 82.098889, 16.4755882 ], [ 82.0987542, 16.4754606 ], [ 82.0986183, 16.4749462 ], [ 82.096479, 16.4743128 ], [ 82.0959423, 16.4738004 ], [ 82.0929984, 16.4725279 ], [ 82.0924615, 16.4720155 ], [ 82.091927, 16.4718898 ], [ 82.091924, 16.4713746 ], [ 82.0905885, 16.4712523 ], [ 82.0900517, 16.47074 ], [ 82.0876418, 16.4694646 ], [ 82.0871079, 16.4694672 ], [ 82.0865711, 16.4689549 ], [ 82.0854989, 16.4681877 ], [ 82.0849652, 16.4681904 ], [ 82.0836259, 16.4674245 ], [ 82.0822868, 16.4666587 ], [ 82.0809506, 16.4664079 ], [ 82.0801455, 16.4656392 ], [ 82.0782727, 16.4648761 ], [ 82.0777359, 16.4643637 ], [ 82.077202, 16.4643665 ], [ 82.0761285, 16.4633416 ], [ 82.075593, 16.4630866 ], [ 82.0750591, 16.4630894 ], [ 82.0742555, 16.4625784 ], [ 82.0737187, 16.4620658 ], [ 82.0731848, 16.4620686 ], [ 82.0729164, 16.4618124 ], [ 82.0721143, 16.4615589 ], [ 82.0702385, 16.4602805 ], [ 82.0691693, 16.4600284 ], [ 82.0686325, 16.4595158 ], [ 82.0678289, 16.4590048 ], [ 82.0664914, 16.4584964 ], [ 82.0656862, 16.4577277 ], [ 82.0648826, 16.4572164 ], [ 82.0632782, 16.4567096 ], [ 82.0627414, 16.456197 ], [ 82.0608673, 16.455176 ], [ 82.0603305, 16.4546636 ], [ 82.056852, 16.4531356 ], [ 82.0563152, 16.452623 ], [ 82.0549779, 16.4521146 ], [ 82.0539059, 16.4513471 ], [ 82.0531037, 16.4510936 ], [ 82.052567, 16.450581 ], [ 82.0514978, 16.4503289 ], [ 82.0506929, 16.4495601 ], [ 82.0498894, 16.4490488 ], [ 82.0485519, 16.4485404 ], [ 82.0480153, 16.4480278 ], [ 82.047213, 16.4477742 ], [ 82.0461412, 16.4470067 ], [ 82.0456072, 16.4470095 ], [ 82.0448023, 16.4462407 ], [ 82.0439988, 16.4457294 ], [ 82.0429297, 16.4454771 ], [ 82.0421247, 16.4447082 ], [ 82.041591, 16.4447109 ], [ 82.0410544, 16.4441985 ], [ 82.0383769, 16.4426661 ], [ 82.0373077, 16.4424138 ], [ 82.0365029, 16.4416449 ], [ 82.0357008, 16.4413913 ], [ 82.0354324, 16.441135 ], [ 82.0340985, 16.4412709 ], [ 82.0339673, 16.4417867 ], [ 82.0334791, 16.4424733 ], [ 82.0322361, 16.4424387 ], [ 82.0317029, 16.4425707 ], [ 82.031707, 16.4433435 ], [ 82.0325084, 16.4434678 ], [ 82.033312, 16.4439791 ], [ 82.0343791, 16.4438455 ], [ 82.0346502, 16.444617 ], [ 82.034917, 16.4446156 ], [ 82.0349142, 16.4441004 ], [ 82.0354481, 16.4440978 ], [ 82.0353088, 16.4430681 ], [ 82.035175, 16.4429396 ], [ 82.0335729, 16.442819 ], [ 82.0336628, 16.4426487 ], [ 82.0341047, 16.4424297 ], [ 82.0354392, 16.442423 ], [ 82.0359758, 16.4429356 ], [ 82.037045, 16.4431879 ], [ 82.0373132, 16.4434442 ], [ 82.0381147, 16.4435695 ], [ 82.0382491, 16.4438264 ], [ 82.0381228, 16.445115 ], [ 82.0391892, 16.4448521 ], [ 82.0389265, 16.4456262 ], [ 82.0391941, 16.4457532 ], [ 82.0399941, 16.4456209 ], [ 82.039997, 16.4461361 ], [ 82.0375925, 16.4457612 ], [ 82.0365192, 16.444736 ], [ 82.0362523, 16.4447373 ], [ 82.0361191, 16.4448674 ], [ 82.0361204, 16.445125 ], [ 82.0374619, 16.4464064 ], [ 82.0375986, 16.4469209 ], [ 82.0384009, 16.4471745 ], [ 82.0384035, 16.4476897 ], [ 82.0394732, 16.4480704 ], [ 82.0426758, 16.4479262 ], [ 82.0438836, 16.4492081 ], [ 82.0442912, 16.4504941 ], [ 82.0458977, 16.4513873 ], [ 82.0464317, 16.4513847 ], [ 82.0469682, 16.451897 ], [ 82.0475027, 16.4520237 ], [ 82.047412, 16.4521932 ], [ 82.0464351, 16.452029 ], [ 82.0467131, 16.4540885 ], [ 82.0456452, 16.4540938 ], [ 82.0456507, 16.4551242 ], [ 82.046186, 16.4553792 ], [ 82.0461833, 16.454864 ], [ 82.0467157, 16.4546037 ], [ 82.0467214, 16.4556341 ], [ 82.0475228, 16.4557585 ], [ 82.0477911, 16.4560146 ], [ 82.0483258, 16.4561412 ], [ 82.0485968, 16.4569127 ], [ 82.0496647, 16.4569074 ], [ 82.049659, 16.455877 ], [ 82.0501937, 16.4560027 ], [ 82.05046, 16.455873 ], [ 82.0507297, 16.4563867 ], [ 82.0501958, 16.4563896 ], [ 82.0501971, 16.4566472 ], [ 82.0512684, 16.4572852 ], [ 82.051803, 16.4574119 ], [ 82.051131, 16.4566425 ], [ 82.0509952, 16.4561278 ], [ 82.0517974, 16.4563814 ], [ 82.0515284, 16.4559959 ], [ 82.0504579, 16.4554862 ], [ 82.0496577, 16.4556194 ], [ 82.0499191, 16.4545876 ], [ 82.0493846, 16.454461 ], [ 82.0492498, 16.4543334 ], [ 82.0491113, 16.4533036 ], [ 82.0499157, 16.4539432 ], [ 82.0504509, 16.4541981 ], [ 82.0517926, 16.4554794 ], [ 82.0531294, 16.4558596 ], [ 82.0533069, 16.4562852 ], [ 82.05269, 16.4565461 ], [ 82.0525968, 16.4561199 ], [ 82.0520629, 16.4561225 ], [ 82.0520644, 16.4563801 ], [ 82.0525084, 16.4567232 ], [ 82.0526025, 16.4571503 ], [ 82.0534033, 16.4571461 ], [ 82.0534904, 16.4564606 ], [ 82.0547352, 16.4566243 ], [ 82.0544725, 16.4573985 ], [ 82.0550064, 16.4573958 ], [ 82.0550036, 16.4568806 ], [ 82.0560693, 16.4564884 ], [ 82.0571385, 16.4567405 ], [ 82.0584732, 16.4567337 ], [ 82.0590098, 16.4572463 ], [ 82.0598106, 16.4572423 ], [ 82.0600769, 16.4571125 ], [ 82.0603494, 16.4581416 ], [ 82.0608841, 16.4582673 ], [ 82.0611525, 16.4585236 ], [ 82.061687, 16.45865 ], [ 82.0616898, 16.4591652 ], [ 82.062759, 16.4594174 ], [ 82.0624893, 16.4589037 ], [ 82.0630238, 16.4590291 ], [ 82.0635605, 16.4595417 ], [ 82.0640945, 16.4595389 ], [ 82.0648981, 16.4600501 ], [ 82.0667709, 16.4608133 ], [ 82.067576, 16.4615822 ], [ 82.0686446, 16.461706 ], [ 82.0685537, 16.4618753 ], [ 82.0678457, 16.4620959 ], [ 82.0675809, 16.4624841 ], [ 82.0686501, 16.4627362 ], [ 82.068653, 16.4632514 ], [ 82.0697208, 16.4632459 ], [ 82.0700763, 16.4628167 ], [ 82.0707866, 16.4628538 ], [ 82.071055, 16.46311 ], [ 82.0723925, 16.4636183 ], [ 82.0734645, 16.4643856 ], [ 82.0742668, 16.464639 ], [ 82.0748036, 16.4651516 ], [ 82.0758722, 16.4652754 ], [ 82.0761447, 16.4663043 ], [ 82.0766807, 16.4666876 ], [ 82.078017, 16.4669382 ], [ 82.0785537, 16.4674506 ], [ 82.0793575, 16.4679619 ], [ 82.0806966, 16.4687277 ], [ 82.0812305, 16.4687248 ], [ 82.0814961, 16.4684659 ], [ 82.0822961, 16.4683334 ], [ 82.0821665, 16.469107 ], [ 82.0820342, 16.4692359 ], [ 82.081501, 16.469368 ], [ 82.0815025, 16.4696256 ], [ 82.0820364, 16.4696228 ], [ 82.0821765, 16.4709101 ], [ 82.0819109, 16.471169 ], [ 82.0815197, 16.4727167 ], [ 82.077246, 16.4723519 ], [ 82.0769776, 16.4720957 ], [ 82.0761767, 16.4720998 ], [ 82.0759106, 16.4722304 ], [ 82.0757737, 16.471716 ], [ 82.0751031, 16.4710749 ], [ 82.0743031, 16.4712083 ], [ 82.0743003, 16.4706931 ], [ 82.0737669, 16.4708241 ], [ 82.0724279, 16.4700582 ], [ 82.0717578, 16.4696757 ], [ 82.0714881, 16.4691618 ], [ 82.0712028, 16.4658144 ], [ 82.0708007, 16.4654296 ], [ 82.0697329, 16.4654351 ], [ 82.0675936, 16.4648025 ], [ 82.0677225, 16.464029 ], [ 82.0674541, 16.4637729 ], [ 82.0671829, 16.4630014 ], [ 82.0665125, 16.4623603 ], [ 82.065175, 16.4618519 ], [ 82.0643683, 16.4608256 ], [ 82.0619624, 16.4601943 ], [ 82.0618257, 16.4596797 ], [ 82.0614235, 16.4592949 ], [ 82.0599514, 16.4586589 ], [ 82.0598155, 16.4581443 ], [ 82.0595486, 16.4581456 ], [ 82.0595515, 16.4586608 ], [ 82.0590175, 16.4586636 ], [ 82.0590189, 16.458921 ], [ 82.0595528, 16.4589184 ], [ 82.0595556, 16.4594336 ], [ 82.060622, 16.4591707 ], [ 82.06116, 16.4599407 ], [ 82.0598246, 16.4598182 ], [ 82.0568826, 16.4588027 ], [ 82.0566142, 16.4585464 ], [ 82.0555466, 16.4585517 ], [ 82.0551436, 16.4581679 ], [ 82.0550077, 16.4576534 ], [ 82.0544759, 16.458042 ], [ 82.0483347, 16.4578152 ], [ 82.0479317, 16.4574312 ], [ 82.0479291, 16.4569161 ], [ 82.0469917, 16.4562764 ], [ 82.0461909, 16.4562803 ], [ 82.0459225, 16.456024 ], [ 82.0447174, 16.4553866 ], [ 82.0448473, 16.454613 ], [ 82.0443154, 16.4550016 ], [ 82.0440484, 16.4550029 ], [ 82.0433772, 16.4543627 ], [ 82.0429716, 16.4533344 ], [ 82.0416363, 16.4532117 ], [ 82.0413672, 16.4528271 ], [ 82.0421667, 16.4525655 ], [ 82.042824, 16.4507591 ], [ 82.0430896, 16.4505001 ], [ 82.0426813, 16.4489564 ], [ 82.0402803, 16.4492261 ], [ 82.040683, 16.4497392 ], [ 82.0409541, 16.4505107 ], [ 82.0407008, 16.4530879 ], [ 82.0415057, 16.4538568 ], [ 82.0416424, 16.4543714 ], [ 82.0421771, 16.4544971 ], [ 82.0424455, 16.4547534 ], [ 82.0435139, 16.4548772 ], [ 82.0441848, 16.4556468 ], [ 82.0441999, 16.4584803 ], [ 82.0446091, 16.4600239 ], [ 82.0451431, 16.4600212 ], [ 82.0460852, 16.4615621 ], [ 82.0461283, 16.4617309 ], [ 82.0456861, 16.4616925 ], [ 82.0452816, 16.4610509 ], [ 82.0444766, 16.4602822 ], [ 82.0439372, 16.4592544 ], [ 82.0438, 16.4584824 ], [ 82.0420727, 16.4600365 ], [ 82.0419425, 16.4605523 ], [ 82.0411415, 16.4605563 ], [ 82.0410104, 16.4610722 ], [ 82.0408781, 16.4612011 ], [ 82.0398123, 16.4615933 ], [ 82.040082, 16.4621072 ], [ 82.0395488, 16.4622382 ], [ 82.0394156, 16.4623682 ], [ 82.0392852, 16.462884 ], [ 82.0382181, 16.4630176 ], [ 82.0374199, 16.4635368 ], [ 82.035821, 16.46406 ], [ 82.0355555, 16.4643189 ], [ 82.0339563, 16.464842 ], [ 82.0334224, 16.4648447 ], [ 82.0308934, 16.4662743 ], [ 82.0304969, 16.4669199 ], [ 82.0299643, 16.4671802 ], [ 82.0294303, 16.4671826 ], [ 82.0292958, 16.467055 ], [ 82.0291599, 16.4665404 ], [ 82.0296919, 16.466151 ], [ 82.0302251, 16.4660201 ], [ 82.0302224, 16.4655049 ], [ 82.0320869, 16.4647228 ], [ 82.0322187, 16.4644646 ], [ 82.0326086, 16.4624019 ], [ 82.0334082, 16.4621403 ], [ 82.0339338, 16.460592 ], [ 82.0344678, 16.4605893 ], [ 82.0345967, 16.459816 ], [ 82.0348622, 16.459557 ], [ 82.0349921, 16.4587836 ], [ 82.0357915, 16.4585221 ], [ 82.0357876, 16.4577492 ], [ 82.0365897, 16.4580029 ], [ 82.0364504, 16.4569732 ], [ 82.0365815, 16.4564572 ], [ 82.0355144, 16.4565909 ], [ 82.0348444, 16.4562083 ], [ 82.0348431, 16.4559507 ], [ 82.0353729, 16.4551752 ], [ 82.0353702, 16.45466 ], [ 82.0356358, 16.4544011 ], [ 82.0357615, 16.4528549 ], [ 82.0360285, 16.4528536 ], [ 82.0360325, 16.4536264 ], [ 82.0365664, 16.4536237 ], [ 82.0359042, 16.4546574 ], [ 82.0359081, 16.4554302 ], [ 82.035511, 16.4559473 ], [ 82.0373776, 16.4555514 ], [ 82.0379087, 16.4550335 ], [ 82.0384419, 16.4549025 ], [ 82.0396358, 16.4536084 ], [ 82.0401629, 16.4523179 ], [ 82.0400161, 16.4497424 ], [ 82.0381442, 16.4491074 ], [ 82.0374729, 16.4484671 ], [ 82.0369308, 16.4469241 ], [ 82.0365288, 16.4465393 ], [ 82.0357254, 16.446028 ], [ 82.0349231, 16.4457744 ], [ 82.0346549, 16.4455181 ], [ 82.0333188, 16.4452671 ], [ 82.0325154, 16.4447559 ], [ 82.0319815, 16.4447585 ], [ 82.0314462, 16.4445036 ], [ 82.0309131, 16.4446355 ], [ 82.0307722, 16.443348 ], [ 82.0301034, 16.4429645 ], [ 82.0287647, 16.4421981 ], [ 82.0282308, 16.4422008 ], [ 82.0274273, 16.4416895 ], [ 82.0266252, 16.4414359 ], [ 82.0262223, 16.4410518 ], [ 82.0263495, 16.4397632 ], [ 82.0252797, 16.4393817 ], [ 82.02457, 16.4394257 ], [ 82.024477, 16.4389995 ], [ 82.0279484, 16.4392403 ], [ 82.0282208, 16.4402694 ], [ 82.0292871, 16.4400065 ], [ 82.0292897, 16.4405217 ], [ 82.0322232, 16.4399921 ], [ 82.0327679, 16.4420501 ], [ 82.0333018, 16.4420475 ], [ 82.0334334, 16.4417893 ], [ 82.0334294, 16.4410165 ], [ 82.03289, 16.4399887 ], [ 82.0322198, 16.4393476 ], [ 82.0308824, 16.438839 ], [ 82.0300777, 16.43807 ], [ 82.0282037, 16.4370488 ], [ 82.0274016, 16.4367952 ], [ 82.0263298, 16.4360277 ], [ 82.0257961, 16.4360303 ], [ 82.0252595, 16.4355175 ], [ 82.0241877, 16.43475 ], [ 82.0236539, 16.4347527 ], [ 82.0233856, 16.4344964 ], [ 82.0209766, 16.4332201 ], [ 82.0193725, 16.4327126 ], [ 82.018836, 16.4322 ], [ 82.0158932, 16.4309262 ], [ 82.0150898, 16.4304149 ], [ 82.0145532, 16.4299024 ], [ 82.0140195, 16.4299048 ], [ 82.0128146, 16.4292671 ], [ 82.0124126, 16.4288821 ], [ 82.0118789, 16.4288848 ], [ 82.0105404, 16.4281184 ], [ 82.0100064, 16.428121 ], [ 82.009203, 16.4276096 ], [ 82.0086666, 16.427097 ], [ 82.0081327, 16.4270995 ], [ 82.0075963, 16.4265869 ], [ 82.0046525, 16.4250555 ], [ 82.0035835, 16.4248029 ], [ 82.0025118, 16.4240352 ], [ 82.0001044, 16.4230163 ], [ 81.9993011, 16.4225049 ], [ 81.9987645, 16.4219921 ], [ 81.9982308, 16.4219948 ], [ 81.9974275, 16.4214834 ], [ 81.9966241, 16.4209719 ], [ 81.9958222, 16.4207181 ], [ 81.995554, 16.4204618 ], [ 81.9936818, 16.4196979 ], [ 81.9931452, 16.4191851 ], [ 81.9896678, 16.4176559 ], [ 81.9893996, 16.4173996 ], [ 81.9875273, 16.4166355 ], [ 81.9872592, 16.4163792 ], [ 81.9859222, 16.4158702 ], [ 81.985654, 16.415614 ], [ 81.9843168, 16.415105 ], [ 81.9832454, 16.4143371 ], [ 81.9816415, 16.4138294 ], [ 81.9811051, 16.4133167 ], [ 81.9805712, 16.4133191 ], [ 81.9800348, 16.4128066 ], [ 81.9792316, 16.4122949 ], [ 81.9781628, 16.4120424 ], [ 81.9770913, 16.4112745 ], [ 81.9765576, 16.411277 ], [ 81.9762894, 16.4110207 ], [ 81.9744174, 16.4102566 ], [ 81.9733459, 16.4094887 ], [ 81.9717421, 16.4089808 ], [ 81.9714739, 16.4087245 ], [ 81.9704051, 16.4084718 ], [ 81.9693336, 16.4077039 ], [ 81.9682648, 16.4074512 ], [ 81.9674605, 16.4066822 ], [ 81.9666585, 16.4064282 ], [ 81.9642501, 16.4051513 ], [ 81.9631789, 16.4043832 ], [ 81.9623769, 16.4041294 ], [ 81.9621087, 16.4038729 ], [ 81.961575, 16.4038754 ], [ 81.9607719, 16.4033639 ], [ 81.958991, 16.4026399 ], [ 81.9587228, 16.4023834 ], [ 81.9583624, 16.4018292 ], [ 81.9578281, 16.4017034 ], [ 81.9576903, 16.4009311 ], [ 81.9575567, 16.4008024 ], [ 81.9570224, 16.4006765 ], [ 81.9568859, 16.4001619 ], [ 81.9564841, 16.3997769 ], [ 81.9559504, 16.3997793 ], [ 81.9556824, 16.3995229 ], [ 81.954881, 16.3993981 ], [ 81.9547496, 16.3999139 ], [ 81.953954, 16.4009481 ], [ 81.9539553, 16.4012057 ], [ 81.9498217, 16.4017397 ], [ 81.9492879, 16.4017421 ], [ 81.9491477, 16.4004546 ], [ 81.9484697, 16.3981392 ], [ 81.947936, 16.3981415 ], [ 81.9476642, 16.3971124 ], [ 81.9471297, 16.3969856 ], [ 81.9469954, 16.3968578 ], [ 81.9468598, 16.3963431 ], [ 81.9463253, 16.3962163 ], [ 81.9457892, 16.3957034 ], [ 81.9439173, 16.3949391 ], [ 81.9425818, 16.3946873 ], [ 81.9417788, 16.3941757 ], [ 81.9404431, 16.3939241 ], [ 81.9337701, 16.3936962 ], [ 81.9305641, 16.3929375 ], [ 81.9297635, 16.3929411 ], [ 81.9292284, 16.392686 ], [ 81.92549, 16.3921872 ], [ 81.9161398, 16.3901672 ], [ 81.9150725, 16.3901719 ], [ 81.9137368, 16.38992 ], [ 81.9124014, 16.3896682 ], [ 81.91158639062499, 16.38947525174185 ], [ 81.9091954, 16.3889092 ], [ 81.9083947, 16.3889128 ], [ 81.9065244, 16.3884055 ], [ 81.9051876, 16.3878962 ], [ 81.9033184, 16.3876465 ], [ 81.9025178, 16.3876499 ], [ 81.8998457, 16.3868886 ], [ 81.8990451, 16.386892 ], [ 81.8966408, 16.386387 ], [ 81.896106, 16.3861317 ], [ 81.8955722, 16.3861339 ], [ 81.8929002, 16.3853724 ], [ 81.8899623, 16.3848697 ], [ 81.8886257, 16.3843602 ], [ 81.8878251, 16.3843634 ], [ 81.8867554, 16.3838527 ], [ 81.8856879, 16.3838572 ], [ 81.885153, 16.3836019 ], [ 81.8843524, 16.3836053 ], [ 81.8832827, 16.3830944 ], [ 81.882749, 16.3830967 ], [ 81.879542, 16.3820797 ], [ 81.8790083, 16.382082 ], [ 81.8779385, 16.3815711 ], [ 81.8771381, 16.3815745 ], [ 81.8768701, 16.381318 ], [ 81.8731294, 16.3803031 ], [ 81.8728614, 16.3800466 ], [ 81.8709911, 16.3795392 ], [ 81.8659142, 16.3780143 ], [ 81.8629731, 16.3767384 ], [ 81.8624394, 16.3767404 ], [ 81.8592315, 16.3754656 ], [ 81.8586978, 16.3754677 ], [ 81.8573602, 16.3747004 ], [ 81.8568265, 16.3747025 ], [ 81.8557567, 16.3741916 ], [ 81.8544215, 16.3739395 ], [ 81.8541535, 16.3736828 ], [ 81.8506789, 16.3724089 ], [ 81.849876, 16.3718969 ], [ 81.8493425, 16.371899 ], [ 81.8485396, 16.371387 ], [ 81.8472043, 16.3711347 ], [ 81.8461336, 16.3703662 ], [ 81.8455999, 16.3703683 ], [ 81.8453319, 16.3701118 ], [ 81.842659, 16.369092 ], [ 81.8421253, 16.3690943 ], [ 81.8415895, 16.3685811 ], [ 81.8399862, 16.3680723 ], [ 81.8397184, 16.3678157 ], [ 81.8373124, 16.3667949 ], [ 81.8370444, 16.3665382 ], [ 81.8365107, 16.3665403 ], [ 81.83544, 16.3657718 ], [ 81.8338369, 16.3652628 ], [ 81.8335689, 16.3650064 ], [ 81.8327673, 16.3647518 ], [ 81.8316967, 16.3639833 ], [ 81.8300936, 16.3634743 ], [ 81.8295576, 16.3629612 ], [ 81.829024, 16.3629633 ], [ 81.828756, 16.3627068 ], [ 81.8268849, 16.3619412 ], [ 81.8258144, 16.3611725 ], [ 81.8252807, 16.3611746 ], [ 81.8242102, 16.3604059 ], [ 81.8228738, 16.359896 ], [ 81.8223379, 16.3593829 ], [ 81.8212695, 16.3591294 ], [ 81.8207337, 16.3586163 ], [ 81.8193975, 16.3581062 ], [ 81.8191295, 16.3578495 ], [ 81.8177933, 16.3573396 ], [ 81.8172574, 16.3568265 ], [ 81.8164549, 16.3563143 ], [ 81.8153865, 16.3560608 ], [ 81.8145827, 16.355291 ], [ 81.8140492, 16.3552931 ], [ 81.8137812, 16.3550364 ], [ 81.8129796, 16.354782 ], [ 81.8127118, 16.3545254 ], [ 81.8119103, 16.3542708 ], [ 81.8113744, 16.3537577 ], [ 81.8100382, 16.3532475 ], [ 81.8089668, 16.3522213 ], [ 81.808433, 16.3522232 ], [ 81.8081652, 16.3519667 ], [ 81.8073637, 16.3517121 ], [ 81.8054907, 16.3504311 ], [ 81.8044223, 16.3501776 ], [ 81.8036186, 16.3494078 ], [ 81.8028173, 16.3491532 ], [ 81.8025493, 16.3488966 ], [ 81.8017477, 16.348642 ], [ 81.8004105, 16.3478743 ], [ 81.7998749, 16.3473611 ], [ 81.7988065, 16.3471075 ], [ 81.7982709, 16.3465944 ], [ 81.796399, 16.3455709 ], [ 81.7950617, 16.344803 ], [ 81.794526, 16.3442899 ], [ 81.7931898, 16.3437796 ], [ 81.7923864, 16.3430098 ], [ 81.7910501, 16.3424995 ], [ 81.7907823, 16.3422428 ], [ 81.7894463, 16.3417327 ], [ 81.7889107, 16.3412194 ], [ 81.7870397, 16.3404536 ], [ 81.7865041, 16.3399402 ], [ 81.7851681, 16.3394301 ], [ 81.7843656, 16.3389178 ], [ 81.7824939, 16.3378943 ], [ 81.7819602, 16.3378962 ], [ 81.7808899, 16.3371274 ], [ 81.7774153, 16.3355944 ], [ 81.7771475, 16.3353377 ], [ 81.7758114, 16.3348274 ], [ 81.7755436, 16.3345708 ], [ 81.7747423, 16.3343162 ], [ 81.7744745, 16.3340595 ], [ 81.7739409, 16.3340614 ], [ 81.7734053, 16.3335481 ], [ 81.7688615, 16.3315039 ], [ 81.7677935, 16.33125 ], [ 81.7667232, 16.330481 ], [ 81.7661896, 16.3304831 ], [ 81.7648527, 16.329715 ], [ 81.7627153, 16.3289499 ], [ 81.7624474, 16.3286932 ], [ 81.7616461, 16.3284385 ], [ 81.760576, 16.3276694 ], [ 81.7592411, 16.3274165 ], [ 81.7584387, 16.3269044 ], [ 81.757905, 16.3269062 ], [ 81.7576374, 16.3266496 ], [ 81.7552322, 16.3256277 ], [ 81.7549646, 16.325371 ], [ 81.7517582, 16.3240943 ], [ 81.7514904, 16.3238376 ], [ 81.7490853, 16.3228157 ], [ 81.7485518, 16.3228176 ], [ 81.7474817, 16.3220486 ], [ 81.7445431, 16.3210283 ], [ 81.743473, 16.3202593 ], [ 81.7429394, 16.3202612 ], [ 81.7416026, 16.3194929 ], [ 81.7410691, 16.3194948 ], [ 81.7408013, 16.3192381 ], [ 81.7391987, 16.3187286 ], [ 81.7383964, 16.318216 ], [ 81.7370606, 16.3177055 ], [ 81.736793, 16.3174489 ], [ 81.7343881, 16.3164266 ], [ 81.7341203, 16.3161699 ], [ 81.7327845, 16.3156594 ], [ 81.732249, 16.3151459 ], [ 81.7317155, 16.3151478 ], [ 81.7306455, 16.3143786 ], [ 81.7295775, 16.3141247 ], [ 81.7285074, 16.3133555 ], [ 81.7279738, 16.3133574 ], [ 81.7266372, 16.3125891 ], [ 81.7261037, 16.3125908 ], [ 81.7253014, 16.3120784 ], [ 81.7247659, 16.3115649 ], [ 81.7242324, 16.3115668 ], [ 81.7223613, 16.3105428 ], [ 81.7218259, 16.3100293 ], [ 81.7210245, 16.3097743 ], [ 81.719686, 16.3084908 ], [ 81.718618, 16.3082368 ], [ 81.7178149, 16.3074666 ], [ 81.7172804, 16.3072109 ], [ 81.7164806, 16.3073429 ], [ 81.7164843, 16.3083733 ], [ 81.7170179, 16.3083716 ], [ 81.717016, 16.3078564 ], [ 81.7183517, 16.308367 ], [ 81.7190209, 16.3091376 ], [ 81.7191765, 16.3150626 ], [ 81.71971, 16.3150607 ], [ 81.7198523, 16.3176365 ], [ 81.7203887, 16.3184075 ], [ 81.7206603, 16.3196948 ], [ 81.715728, 16.3204844 ], [ 81.7149253, 16.3198426 ], [ 81.7138572, 16.3195885 ], [ 81.7115797, 16.3198057 ], [ 81.702656, 16.3206566 ], [ 81.701725, 16.3215619 ], [ 81.7014602, 16.322078 ], [ 81.7007958, 16.3227239 ], [ 81.7002628, 16.3228548 ], [ 81.7001307, 16.3233706 ], [ 81.6989329, 16.3240181 ], [ 81.6976017, 16.3247955 ], [ 81.6968019, 16.3249274 ], [ 81.6968036, 16.3254426 ], [ 81.6962704, 16.3255727 ], [ 81.695206, 16.3263491 ], [ 81.6933407, 16.3269998 ], [ 81.6933426, 16.327515 ], [ 81.6925422, 16.3275177 ], [ 81.6925441, 16.3280329 ], [ 81.6920109, 16.3281631 ], [ 81.691745, 16.3284215 ], [ 81.6899693, 16.3287257 ], [ 81.6900098, 16.3282988 ], [ 81.6902757, 16.3280404 ], [ 81.6904078, 16.3275246 ], [ 81.6909414, 16.3275229 ], [ 81.6910706, 16.326492 ], [ 81.6913366, 16.3262334 ], [ 81.6914687, 16.3257178 ], [ 81.6905371, 16.3264937 ], [ 81.6900062, 16.3272684 ], [ 81.6893438, 16.3284294 ], [ 81.6880124, 16.3292066 ], [ 81.6866804, 16.3297261 ], [ 81.6861485, 16.3302432 ], [ 81.6848149, 16.3303768 ], [ 81.6848168, 16.3308921 ], [ 81.6509437, 16.3342192 ], [ 81.6472083, 16.3342307 ], [ 81.6469424, 16.3344891 ], [ 81.6408074, 16.335023 ], [ 81.6402735, 16.3348964 ], [ 81.6402752, 16.3354116 ], [ 81.6397411, 16.335284 ], [ 81.6277388, 16.3366082 ], [ 81.6274727, 16.3368665 ], [ 81.6224041, 16.3371393 ], [ 81.6069354, 16.3392453 ], [ 81.6064026, 16.3395046 ], [ 81.5976007, 16.3405602 ], [ 81.5941344, 16.3413428 ], [ 81.5922667, 16.3413481 ], [ 81.5709279, 16.3437257 ], [ 81.5671923, 16.3437357 ], [ 81.5626, 16.344191581474817 ], [ 81.56248849721166, 16.344202650450189 ], [ 81.5624, 16.344211435642656 ], [ 81.5618574, 16.3442653 ], [ 81.5530549, 16.3453192 ], [ 81.5498551, 16.3461003 ], [ 81.549589, 16.3463587 ], [ 81.5479895, 16.3468781 ], [ 81.54759, 16.3472661 ], [ 81.5475928, 16.3482965 ], [ 81.5474605, 16.3485545 ], [ 81.5482604, 16.3482948 ], [ 81.5482619, 16.3488102 ], [ 81.5487965, 16.3491946 ], [ 81.5495985, 16.349708 ], [ 81.5506654, 16.3495768 ], [ 81.5506648, 16.3493192 ], [ 81.5501307, 16.3491912 ], [ 81.5498627, 16.3488059 ], [ 81.5503042, 16.3486348 ], [ 81.5503972, 16.3490621 ], [ 81.5514652, 16.3493171 ], [ 81.5515968, 16.3488013 ], [ 81.5526612, 16.3477681 ], [ 81.5527935, 16.3472525 ], [ 81.5533261, 16.3468643 ], [ 81.5549268, 16.3467316 ], [ 81.5549252, 16.3462164 ], [ 81.5570604, 16.346339 ], [ 81.5575947, 16.3465953 ], [ 81.5591961, 16.3467202 ], [ 81.5596009, 16.3485227 ], [ 81.5596083, 16.351099 ], [ 81.5590768, 16.3518733 ], [ 81.5588135, 16.3531621 ], [ 81.5588173, 16.3544503 ], [ 81.5585512, 16.3547087 ], [ 81.5585533, 16.3554815 ], [ 81.5588209, 16.3557386 ], [ 81.5586894, 16.3562542 ], [ 81.5592239, 16.3565103 ], [ 81.5598884, 16.3557357 ], [ 81.5601537, 16.3552198 ], [ 81.5601485, 16.3534163 ], [ 81.5604132, 16.3526427 ], [ 81.5606794, 16.3523844 ], [ 81.5606778, 16.351869 ], [ 81.5602758, 16.3510973 ], [ 81.5610755, 16.3508374 ], [ 81.5614739, 16.3503211 ], [ 81.5616049, 16.3492903 ], [ 81.5624045, 16.3490306 ], [ 81.5624025, 16.3482576 ], [ 81.5626, 16.348304700421348 ], [ 81.5634705, 16.3485123 ], [ 81.5638718, 16.3490266 ], [ 81.5644076, 16.3497981 ], [ 81.5646788, 16.3513432 ], [ 81.5652148, 16.3521145 ], [ 81.5653539, 16.3539176 ], [ 81.5642876, 16.3543065 ], [ 81.5640214, 16.3545649 ], [ 81.5629553, 16.3549546 ], [ 81.5628228, 16.3554702 ], [ 81.5626, 16.355590430941255 ], [ 81.5616244, 16.3561169 ], [ 81.561091, 16.3562477 ], [ 81.5610925, 16.3567629 ], [ 81.5605592, 16.3568928 ], [ 81.5597601, 16.3574101 ], [ 81.5592278, 16.3579268 ], [ 81.5586947, 16.3580576 ], [ 81.5585622, 16.3585732 ], [ 81.5582961, 16.3588316 ], [ 81.5581645, 16.3593471 ], [ 81.5576308, 16.3593485 ], [ 81.5574985, 16.3598641 ], [ 81.5569663, 16.3603808 ], [ 81.557372, 16.3621831 ], [ 81.5581734, 16.3624386 ], [ 81.5588444, 16.3639827 ], [ 81.5593796, 16.3644965 ], [ 81.5597841, 16.3657835 ], [ 81.5605845, 16.3657815 ], [ 81.5609859, 16.3662957 ], [ 81.5611212, 16.3668106 ], [ 81.5619232, 16.3673237 ], [ 81.5623216, 16.3668074 ], [ 81.5624541, 16.3662918 ], [ 81.5626, 16.366291389938166 ], [ 81.5629878, 16.3662903 ], [ 81.563386, 16.3657739 ], [ 81.5635178, 16.3650007 ], [ 81.5645845, 16.3647403 ], [ 81.5644469, 16.3634524 ], [ 81.5652445, 16.3624197 ], [ 81.5653745, 16.3611313 ], [ 81.5675083, 16.3607386 ], [ 81.5677744, 16.3604802 ], [ 81.5685745, 16.3603498 ], [ 81.5685722, 16.359577 ], [ 81.5691059, 16.3595755 ], [ 81.5691037, 16.3588026 ], [ 81.5712373, 16.3584099 ], [ 81.5715045, 16.3585384 ], [ 81.5716368, 16.3582804 ], [ 81.5717661, 16.3567342 ], [ 81.5725667, 16.3567321 ], [ 81.5728305, 16.3557008 ], [ 81.5741654, 16.3559548 ], [ 81.574167, 16.3564702 ], [ 81.5747018, 16.3568546 ], [ 81.5752356, 16.3568533 ], [ 81.5757676, 16.3563366 ], [ 81.576301, 16.3562067 ], [ 81.5762994, 16.3556913 ], [ 81.5770989, 16.3553024 ], [ 81.5786992, 16.3550402 ], [ 81.5802979, 16.354263 ], [ 81.5816317, 16.3541309 ], [ 81.5820337, 16.3549028 ], [ 81.582036, 16.3556756 ], [ 81.5812409, 16.3574813 ], [ 81.5797778, 16.3589019 ], [ 81.579245, 16.359161 ], [ 81.578846, 16.3598066 ], [ 81.5787135, 16.3599353 ], [ 81.5780486, 16.3608393 ], [ 81.5768517, 16.3620015 ], [ 81.5744531, 16.3630385 ], [ 81.5739216, 16.3638128 ], [ 81.5728557, 16.3643311 ], [ 81.5724561, 16.3647191 ], [ 81.5723246, 16.3652347 ], [ 81.5715227, 16.3647216 ], [ 81.571524, 16.3652368 ], [ 81.5709908, 16.3653666 ], [ 81.5707247, 16.365625 ], [ 81.5688563, 16.3655017 ], [ 81.5688578, 16.366017 ], [ 81.5683244, 16.3661468 ], [ 81.5675253, 16.3666641 ], [ 81.5671258, 16.3670521 ], [ 81.5672611, 16.3675669 ], [ 81.5661948, 16.3679559 ], [ 81.5655291, 16.3686023 ], [ 81.5653976, 16.3691179 ], [ 81.5648642, 16.3692475 ], [ 81.5647308, 16.3693772 ], [ 81.5647323, 16.3698926 ], [ 81.5646, 16.3701506 ], [ 81.5651337, 16.3701491 ], [ 81.5651345, 16.3704067 ], [ 81.5626, 16.370746821349464 ], [ 81.5622, 16.3708005 ], [ 81.5619339, 16.3710589 ], [ 81.5614002, 16.3710602 ], [ 81.5604639, 16.3704191 ], [ 81.5603288, 16.3696467 ], [ 81.5608625, 16.3696452 ], [ 81.5611271, 16.3688716 ], [ 81.560593, 16.3687438 ], [ 81.5603254, 16.3684868 ], [ 81.5597914, 16.36836 ], [ 81.5597899, 16.3678446 ], [ 81.5589901, 16.3681045 ], [ 81.5591222, 16.3678465 ], [ 81.5591178, 16.3663006 ], [ 81.5588489, 16.3655284 ], [ 81.5585813, 16.3652715 ], [ 81.5584454, 16.3642413 ], [ 81.5579113, 16.3641135 ], [ 81.5571078, 16.3630852 ], [ 81.556841, 16.3630858 ], [ 81.5567073, 16.3632154 ], [ 81.5564458, 16.3650196 ], [ 81.5559179, 16.367082 ], [ 81.5557852, 16.3672107 ], [ 81.5552518, 16.3673415 ], [ 81.5553855, 16.3675987 ], [ 81.5553877, 16.3683715 ], [ 81.5551224, 16.3688875 ], [ 81.5548599, 16.3704341 ], [ 81.5540615, 16.371209 ], [ 81.5540636, 16.371982 ], [ 81.5541982, 16.3722392 ], [ 81.5536648, 16.3723689 ], [ 81.5527351, 16.3740464 ], [ 81.5527466, 16.3781685 ], [ 81.5516865, 16.3807476 ], [ 81.5506219, 16.3817809 ], [ 81.5503571, 16.3825546 ], [ 81.5490264, 16.3838463 ], [ 81.5488956, 16.3846195 ], [ 81.5475622, 16.385009 ], [ 81.5468963, 16.3856552 ], [ 81.5465023, 16.3877172 ], [ 81.547036, 16.3877159 ], [ 81.5471734, 16.3892613 ], [ 81.5474408, 16.3895182 ], [ 81.5479784, 16.3908051 ], [ 81.548246, 16.3910619 ], [ 81.5490517, 16.3928633 ], [ 81.5493193, 16.3931201 ], [ 81.5494546, 16.3936351 ], [ 81.5499884, 16.3936336 ], [ 81.5499899, 16.394149 ], [ 81.5513276, 16.3953044 ], [ 81.554534, 16.3965841 ], [ 81.5569368, 16.3968353 ], [ 81.5596051, 16.3965707 ], [ 81.5598727, 16.3968275 ], [ 81.5604068, 16.3969555 ], [ 81.5604083, 16.3974707 ], [ 81.5609413, 16.3972116 ], [ 81.5610757, 16.3977266 ], [ 81.5613433, 16.3979835 ], [ 81.5614788, 16.3984983 ], [ 81.5625454, 16.3981086 ], [ 81.5626, 16.398055597348222 ], [ 81.5644083, 16.3963002 ], [ 81.5657413, 16.3957814 ], [ 81.5660075, 16.3955231 ], [ 81.566541, 16.3953932 ], [ 81.5666731, 16.3951352 ], [ 81.5666708, 16.3943622 ], [ 81.5660016, 16.393462 ], [ 81.5652002, 16.3932065 ], [ 81.5647975, 16.3925639 ], [ 81.5631917, 16.3910224 ], [ 81.5629226, 16.3902503 ], [ 81.562655, 16.3899933 ], [ 81.5626512, 16.3887053 ], [ 81.5629175, 16.3884469 ], [ 81.5630498, 16.3879313 ], [ 81.5635835, 16.3879298 ], [ 81.5635822, 16.3874146 ], [ 81.564915, 16.3868958 ], [ 81.5651796, 16.386122 ], [ 81.5669549, 16.3856898 ], [ 81.5669139, 16.3861175 ], [ 81.5667814, 16.3862462 ], [ 81.5662484, 16.3865053 ], [ 81.565183, 16.387281 ], [ 81.5646508, 16.3877977 ], [ 81.5635843, 16.3881874 ], [ 81.563452, 16.388703 ], [ 81.5631857, 16.3889614 ], [ 81.5630558, 16.3899924 ], [ 81.5643917, 16.390504 ], [ 81.5646608, 16.3912761 ], [ 81.5651946, 16.3912747 ], [ 81.5661312, 16.3923027 ], [ 81.5662673, 16.3930753 ], [ 81.5668011, 16.3930738 ], [ 81.5672033, 16.3938457 ], [ 81.5674747, 16.3953906 ], [ 81.5670759, 16.3957777 ], [ 81.5660086, 16.39591 ], [ 81.5660101, 16.3964252 ], [ 81.5654767, 16.396555 ], [ 81.5645448, 16.3974596 ], [ 81.5644132, 16.3979752 ], [ 81.5638797, 16.398105 ], [ 81.5636136, 16.3983634 ], [ 81.5630802, 16.3984941 ], [ 81.5629477, 16.3990097 ], [ 81.5626, 16.399516397177258 ], [ 81.5624163, 16.3997841 ], [ 81.5625539, 16.4010717 ], [ 81.5624, 16.401093346693795 ], [ 81.5606862, 16.4013344 ], [ 81.5608177, 16.4008188 ], [ 81.5606788, 16.3987582 ], [ 81.5601447, 16.3986302 ], [ 81.5596094, 16.3981165 ], [ 81.5590757, 16.3981179 ], [ 81.5585429, 16.3985062 ], [ 81.5585414, 16.3979908 ], [ 81.5564059, 16.3978672 ], [ 81.5556045, 16.3976117 ], [ 81.5548037, 16.397614 ], [ 81.5529339, 16.3971035 ], [ 81.5502619, 16.3959517 ], [ 81.5501263, 16.3954367 ], [ 81.5499931, 16.3953078 ], [ 81.549459, 16.395181 ], [ 81.5493237, 16.394666 ], [ 81.5485216, 16.3941528 ], [ 81.5479848, 16.3931237 ], [ 81.5474495, 16.3926098 ], [ 81.5471798, 16.39158 ], [ 81.5466446, 16.3910661 ], [ 81.5461065, 16.3895218 ], [ 81.5458389, 16.3892647 ], [ 81.5455628, 16.3859162 ], [ 81.5458289, 16.385658 ], [ 81.5460937, 16.3848844 ], [ 81.5463598, 16.3846261 ], [ 81.5470232, 16.3830786 ], [ 81.547823, 16.3828189 ], [ 81.5478215, 16.3823035 ], [ 81.5483554, 16.3823021 ], [ 81.5482193, 16.3815297 ], [ 81.5470169, 16.3808882 ], [ 81.5403458, 16.381163 ], [ 81.5400785, 16.3810355 ], [ 81.5399461, 16.3815511 ], [ 81.5398136, 16.3816798 ], [ 81.5371439, 16.381429 ], [ 81.5328741, 16.3814397 ], [ 81.5326078, 16.3816981 ], [ 81.5299391, 16.3817047 ], [ 81.5272719, 16.382356 ], [ 81.5272734, 16.3828712 ], [ 81.5222037, 16.38327 ], [ 81.5206011, 16.3827586 ], [ 81.519799, 16.3822454 ], [ 81.5189963, 16.3814745 ], [ 81.5184622, 16.3813473 ], [ 81.5181927, 16.3803175 ], [ 81.517659, 16.3803188 ], [ 81.5175237, 16.3798039 ], [ 81.5169886, 16.3792899 ], [ 81.516452, 16.3782608 ], [ 81.5155169, 16.3776185 ], [ 81.5149827, 16.3774915 ], [ 81.5148461, 16.3764613 ], [ 81.5145787, 16.3762042 ], [ 81.5132362, 16.373116 ], [ 81.5123008, 16.3724736 ], [ 81.5114997, 16.372218 ], [ 81.511232, 16.371961 ], [ 81.5104309, 16.3717053 ], [ 81.5066947, 16.3717144 ], [ 81.5053611, 16.3719752 ], [ 81.5002906, 16.3719873 ], [ 81.4997561, 16.371731 ], [ 81.4970863, 16.371222 ], [ 81.4938845, 16.3714872 ], [ 81.4922844, 16.3718778 ], [ 81.4922855, 16.3723931 ], [ 81.4909523, 16.3727822 ], [ 81.4901542, 16.3738145 ], [ 81.4892213, 16.3744613 ], [ 81.4892226, 16.3749765 ], [ 81.4886908, 16.3757506 ], [ 81.4881584, 16.3762672 ], [ 81.4876284, 16.3778141 ], [ 81.4871017, 16.3806493 ], [ 81.4868355, 16.3809077 ], [ 81.4865706, 16.3816813 ], [ 81.4865725, 16.3824541 ], [ 81.4863062, 16.3827123 ], [ 81.4860419, 16.3837435 ], [ 81.4860433, 16.3842587 ], [ 81.4860444, 16.3847741 ], [ 81.4865802, 16.3855458 ], [ 81.4856488, 16.3864492 ], [ 81.4851149, 16.3864503 ], [ 81.4849815, 16.38658 ], [ 81.4849845, 16.387868 ], [ 81.4847184, 16.3881264 ], [ 81.4845866, 16.388642 ], [ 81.4840531, 16.3887714 ], [ 81.4828544, 16.389934 ], [ 81.4828565, 16.390707 ], [ 81.4825902, 16.3909651 ], [ 81.4827267, 16.3919954 ], [ 81.4837959, 16.3926367 ], [ 81.4845983, 16.3934076 ], [ 81.4862014, 16.3940485 ], [ 81.4859357, 16.3945645 ], [ 81.4870039, 16.3948196 ], [ 81.486739, 16.395593 ], [ 81.4872727, 16.3955919 ], [ 81.4871402, 16.3961075 ], [ 81.4864744, 16.3964949 ], [ 81.4856753, 16.3971413 ], [ 81.4859389, 16.3958525 ], [ 81.4832706, 16.3961163 ], [ 81.4831393, 16.3971471 ], [ 81.4827399, 16.3974057 ], [ 81.4830043, 16.3963745 ], [ 81.4819365, 16.3962477 ], [ 81.4818029, 16.3963773 ], [ 81.4816711, 16.3968929 ], [ 81.4806025, 16.3965085 ], [ 81.4803347, 16.3961231 ], [ 81.4811355, 16.3961213 ], [ 81.4813991, 16.3948325 ], [ 81.4800642, 16.3947062 ], [ 81.4789954, 16.3941935 ], [ 81.4785938, 16.3938083 ], [ 81.4784583, 16.392778 ], [ 81.4753867, 16.3920122 ], [ 81.4759134, 16.389177 ], [ 81.4767118, 16.3881447 ], [ 81.4767104, 16.3876293 ], [ 81.476976, 16.3871135 ], [ 81.4772393, 16.3855671 ], [ 81.4777703, 16.3845354 ], [ 81.4777692, 16.3840202 ], [ 81.4783005, 16.3829884 ], [ 81.478828, 16.3804108 ], [ 81.4793591, 16.3793791 ], [ 81.4793572, 16.3786061 ], [ 81.4798885, 16.3775743 ], [ 81.4798866, 16.3768015 ], [ 81.4801516, 16.3760279 ], [ 81.4801497, 16.3752551 ], [ 81.4806809, 16.3742233 ], [ 81.4814732, 16.3708722 ], [ 81.481739, 16.3703564 ], [ 81.4817369, 16.3695834 ], [ 81.4822682, 16.3685516 ], [ 81.4822668, 16.3680364 ], [ 81.4827981, 16.3670047 ], [ 81.4827962, 16.3662318 ], [ 81.4841196, 16.3618489 ], [ 81.4841177, 16.3610761 ], [ 81.4846482, 16.3597866 ], [ 81.4846471, 16.3592714 ], [ 81.4854443, 16.3579814 ], [ 81.485708, 16.3566926 ], [ 81.4862404, 16.3561761 ], [ 81.4863731, 16.3556605 ], [ 81.4869068, 16.3556592 ], [ 81.4870391, 16.3554014 ], [ 81.4870372, 16.3546284 ], [ 81.4866363, 16.3542424 ], [ 81.4861024, 16.3541152 ], [ 81.4859673, 16.3536004 ], [ 81.4842317, 16.3529599 ], [ 81.479962, 16.3528412 ], [ 81.4799631, 16.3533564 ], [ 81.4724914, 16.3532441 ], [ 81.4703559, 16.3529913 ], [ 81.4695549, 16.3527354 ], [ 81.4618159, 16.3524948 ], [ 81.4596806, 16.3522419 ], [ 81.4575453, 16.3519888 ], [ 81.4567441, 16.3517329 ], [ 81.4546093, 16.3517376 ], [ 81.454075, 16.3514812 ], [ 81.4527409, 16.351484 ], [ 81.4519397, 16.3512281 ], [ 81.4476693, 16.3507219 ], [ 81.4468687, 16.3507236 ], [ 81.4460675, 16.3504677 ], [ 81.4450002, 16.35047 ], [ 81.4399286, 16.3497076 ], [ 81.4391274, 16.3494517 ], [ 81.4361917, 16.3492001 ], [ 81.4353907, 16.3489442 ], [ 81.4345901, 16.3489459 ], [ 81.4297848, 16.3479251 ], [ 81.4289843, 16.3479268 ], [ 81.4265816, 16.3474163 ], [ 81.4260475, 16.3471599 ], [ 81.4252469, 16.3471614 ], [ 81.4244459, 16.3469055 ], [ 81.4236453, 16.346907 ], [ 81.4185727, 16.345629 ], [ 81.4167044, 16.3453749 ], [ 81.4159038, 16.3453766 ], [ 81.4153697, 16.34512 ], [ 81.4145691, 16.3451215 ], [ 81.413234, 16.3446089 ], [ 81.4124334, 16.3446104 ], [ 81.4118993, 16.344354 ], [ 81.4086961, 16.3438448 ], [ 81.408162, 16.3435883 ], [ 81.4054932, 16.3433358 ], [ 81.4041596, 16.3435959 ], [ 81.403627, 16.3441122 ], [ 81.4025604, 16.3445012 ], [ 81.4025625, 16.3455318 ], [ 81.4028294, 16.3455312 ], [ 81.4029619, 16.3452735 ], [ 81.4028279, 16.3447584 ], [ 81.4033614, 16.3447573 ], [ 81.4033631, 16.3455303 ], [ 81.4038967, 16.3455292 ], [ 81.4041609, 16.3442406 ], [ 81.4078959, 16.3439758 ], [ 81.4080301, 16.3444906 ], [ 81.4079003, 16.3460368 ], [ 81.4087012, 16.3462929 ], [ 81.4087003, 16.3457775 ], [ 81.4092338, 16.3457766 ], [ 81.4091006, 16.3460344 ], [ 81.4092361, 16.3468072 ], [ 81.4105697, 16.3465469 ], [ 81.4105708, 16.3470621 ], [ 81.4111048, 16.3471895 ], [ 81.4124385, 16.3470586 ], [ 81.4127077, 16.3480886 ], [ 81.4129747, 16.3482164 ], [ 81.4135081, 16.3480869 ], [ 81.4137761, 16.3486017 ], [ 81.4132423, 16.3486027 ], [ 81.413244, 16.3493757 ], [ 81.4137776, 16.3493746 ], [ 81.4137793, 16.3501476 ], [ 81.4145812, 16.3507896 ], [ 81.4164506, 16.3515588 ], [ 81.4196532, 16.35181 ], [ 81.4207213, 16.3520655 ], [ 81.4212541, 16.3516785 ], [ 81.4212552, 16.3521939 ], [ 81.4225897, 16.3523196 ], [ 81.4228562, 16.3521907 ], [ 81.4228573, 16.3527059 ], [ 81.4233913, 16.3528333 ], [ 81.4239261, 16.3533473 ], [ 81.4252614, 16.3538599 ], [ 81.4260632, 16.3543736 ], [ 81.4271308, 16.3545008 ], [ 81.4273085, 16.3557 ], [ 81.4271335, 16.3557888 ], [ 81.427134, 16.3560465 ], [ 81.4274009, 16.3560461 ], [ 81.4274914, 16.3558758 ], [ 81.4276672, 16.3557879 ], [ 81.4279324, 16.3550143 ], [ 81.4295334, 16.3550111 ], [ 81.4294018, 16.3560419 ], [ 81.4295374, 16.3568145 ], [ 81.4308725, 16.3571978 ], [ 81.4316748, 16.3579691 ], [ 81.43301, 16.3584817 ], [ 81.4346118, 16.3587359 ], [ 81.4348793, 16.3589931 ], [ 81.4354132, 16.3591213 ], [ 81.4356823, 16.3601512 ], [ 81.4343484, 16.3602823 ], [ 81.4340821, 16.3605405 ], [ 81.4330146, 16.3605428 ], [ 81.4328804, 16.3604146 ], [ 81.4327464, 16.3598996 ], [ 81.4322127, 16.3599007 ], [ 81.43208, 16.3604163 ], [ 81.4319473, 16.3605448 ], [ 81.4311469, 16.3606758 ], [ 81.4310102, 16.359388 ], [ 81.4292743, 16.3584893 ], [ 81.4282068, 16.3584915 ], [ 81.4279394, 16.3582343 ], [ 81.4274054, 16.3581071 ], [ 81.4272705, 16.3575921 ], [ 81.4270031, 16.3573351 ], [ 81.4271346, 16.3563042 ], [ 81.4268677, 16.3563046 ], [ 81.4268689, 16.35682 ], [ 81.4258018, 16.3569504 ], [ 81.4250008, 16.3566945 ], [ 81.4247334, 16.3564375 ], [ 81.4241996, 16.3564384 ], [ 81.4239322, 16.3561814 ], [ 81.4215309, 16.3563154 ], [ 81.4217961, 16.355542 ], [ 81.4212624, 16.3555431 ], [ 81.4212612, 16.3550277 ], [ 81.4180567, 16.3538745 ], [ 81.4177893, 16.3536172 ], [ 81.4172556, 16.3536184 ], [ 81.4165888, 16.3540066 ], [ 81.4167237, 16.3545216 ], [ 81.4116546, 16.3549176 ], [ 81.4031152, 16.3548057 ], [ 81.4032465, 16.3540325 ], [ 81.403513, 16.3537743 ], [ 81.4035113, 16.3530015 ], [ 81.4043102, 16.3522269 ], [ 81.4043087, 16.3514541 ], [ 81.4047067, 16.3501651 ], [ 81.4049734, 16.3500353 ], [ 81.4068409, 16.3499034 ], [ 81.4069728, 16.3493878 ], [ 81.4063043, 16.348487 ], [ 81.4053692, 16.3481028 ], [ 81.4052352, 16.3475878 ], [ 81.4065688, 16.3473275 ], [ 81.4060337, 16.346684 ], [ 81.405767, 16.3466845 ], [ 81.4041662, 16.3468168 ], [ 81.4041673, 16.3473322 ], [ 81.4036338, 16.3474615 ], [ 81.4029675, 16.3481073 ], [ 81.402186, 16.3573838 ], [ 81.4016549, 16.358673 ], [ 81.4009995, 16.3640846 ], [ 81.401533, 16.3640837 ], [ 81.4008708, 16.3666613 ], [ 81.400605, 16.367177 ], [ 81.4003503, 16.3731031 ], [ 81.4000844, 16.3736189 ], [ 81.3985487, 16.3851269 ], [ 81.3990462, 16.3880487 ], [ 81.3989143, 16.3885641 ], [ 81.3986474, 16.3885647 ], [ 81.3986464, 16.3880494 ], [ 81.3983796, 16.3880498 ], [ 81.3983784, 16.3875346 ], [ 81.3986453, 16.387534 ], [ 81.3981067, 16.3850871 ], [ 81.3985047, 16.3841851 ], [ 81.3990284, 16.3792891 ], [ 81.398887, 16.375167 ], [ 81.3962163, 16.3741415 ], [ 81.3962178, 16.3749145 ], [ 81.3958165, 16.3746577 ], [ 81.3955476, 16.3736276 ], [ 81.3955444, 16.3720818 ], [ 81.3954111, 16.3719527 ], [ 81.3948772, 16.3718253 ], [ 81.3948783, 16.3723407 ], [ 81.3943444, 16.3723417 ], [ 81.3944831, 16.3751753 ], [ 81.3948861, 16.3762052 ], [ 81.3938182, 16.376078 ], [ 81.3935508, 16.3758208 ], [ 81.3930171, 16.3758217 ], [ 81.3900779, 16.3740238 ], [ 81.3890103, 16.3738973 ], [ 81.3890086, 16.3731245 ], [ 81.3884747, 16.3729962 ], [ 81.3850008, 16.3706837 ], [ 81.3831316, 16.3701719 ], [ 81.3825969, 16.3696577 ], [ 81.3815285, 16.3691443 ], [ 81.3809938, 16.3686301 ], [ 81.3797912, 16.3679886 ], [ 81.3796572, 16.3674736 ], [ 81.3791233, 16.3673452 ], [ 81.3783216, 16.3668314 ], [ 81.3775196, 16.3660599 ], [ 81.3772528, 16.3660604 ], [ 81.3771192, 16.3661899 ], [ 81.376987, 16.3667053 ], [ 81.3767202, 16.3667059 ], [ 81.3767192, 16.3661906 ], [ 81.3745841, 16.3660652 ], [ 81.3684422, 16.3638865 ], [ 81.3684437, 16.3646594 ], [ 81.3673745, 16.3637592 ], [ 81.3668408, 16.3637599 ], [ 81.3661719, 16.3631175 ], [ 81.3660381, 16.3626025 ], [ 81.3657714, 16.3627314 ], [ 81.3649708, 16.3627327 ], [ 81.3645694, 16.3623473 ], [ 81.3644354, 16.3618323 ], [ 81.3625682, 16.3622216 ], [ 81.3620353, 16.3626095 ], [ 81.3620343, 16.3620941 ], [ 81.3609666, 16.3619667 ], [ 81.3604339, 16.3624828 ], [ 81.3588323, 16.3622279 ], [ 81.3586981, 16.3620997 ], [ 81.3588306, 16.3613267 ], [ 81.3617655, 16.361064 ], [ 81.3617669, 16.361837 ], [ 81.3625667, 16.3614486 ], [ 81.363634, 16.3613184 ], [ 81.3640328, 16.3608024 ], [ 81.3638956, 16.358484 ], [ 81.3628277, 16.3582283 ], [ 81.3626928, 16.3577131 ], [ 81.3622923, 16.3573269 ], [ 81.3614907, 16.356813 ], [ 81.3601556, 16.3563001 ], [ 81.3590882, 16.3563018 ], [ 81.3586883, 16.3566894 ], [ 81.3586896, 16.3574624 ], [ 81.358824, 16.3577197 ], [ 81.3561547, 16.3573373 ], [ 81.355455514062498, 16.357001244970345 ], [ 81.3524155, 16.3555401 ], [ 81.3516151, 16.3555414 ], [ 81.3508132, 16.3547699 ], [ 81.3497448, 16.3542564 ], [ 81.348944, 16.3541294 ], [ 81.3488115, 16.3549026 ], [ 81.3486788, 16.3550311 ], [ 81.3470778, 16.3550338 ], [ 81.3468111, 16.3551634 ], [ 81.3466764, 16.3546484 ], [ 81.3461417, 16.354134 ], [ 81.3457402, 16.3532324 ], [ 81.3441383, 16.3527199 ], [ 81.343871, 16.3524626 ], [ 81.3417361, 16.3523377 ], [ 81.341737, 16.3528531 ], [ 81.3412035, 16.3529822 ], [ 81.3409372, 16.3532404 ], [ 81.3398699, 16.3533713 ], [ 81.3398708, 16.3538866 ], [ 81.3366694, 16.3542778 ], [ 81.3365357, 16.3544073 ], [ 81.3364036, 16.3549227 ], [ 81.3340022, 16.355055 ], [ 81.3329353, 16.3553143 ], [ 81.3297331, 16.3553192 ], [ 81.3286652, 16.3550633 ], [ 81.3278633, 16.3542916 ], [ 81.3270625, 16.3540353 ], [ 81.3263938, 16.3533927 ], [ 81.32626, 16.3528775 ], [ 81.323858, 16.3526237 ], [ 81.3238588, 16.3531389 ], [ 81.3222572, 16.3528837 ], [ 81.3222581, 16.3533989 ], [ 81.3227919, 16.3533982 ], [ 81.3227926, 16.3539134 ], [ 81.3219922, 16.3539147 ], [ 81.321993, 16.3544299 ], [ 81.3211922, 16.354302 ], [ 81.3206577, 16.3537875 ], [ 81.3198573, 16.3539179 ], [ 81.3198582, 16.3544331 ], [ 81.3195913, 16.3544335 ], [ 81.3194553, 16.3531457 ], [ 81.319721, 16.3523723 ], [ 81.3202538, 16.3518561 ], [ 81.3202534, 16.3515985 ], [ 81.3195853, 16.3506974 ], [ 81.3182511, 16.3506995 ], [ 81.3179837, 16.3504422 ], [ 81.3163829, 16.3505738 ], [ 81.3166486, 16.3498006 ], [ 81.3161149, 16.3498013 ], [ 81.3159818, 16.3503167 ], [ 81.3158491, 16.3504454 ], [ 81.3153154, 16.3504462 ], [ 81.3139792, 16.34916 ], [ 81.3134454, 16.3491608 ], [ 81.3126458, 16.3496772 ], [ 81.3118454, 16.3498077 ], [ 81.3119743, 16.3472311 ], [ 81.3122407, 16.3469731 ], [ 81.3123738, 16.3464575 ], [ 81.3131742, 16.3464564 ], [ 81.3130391, 16.3456838 ], [ 81.3127718, 16.3454264 ], [ 81.3123704, 16.3443965 ], [ 81.3177078, 16.3447745 ], [ 81.3187745, 16.3443869 ], [ 81.3187752, 16.3449023 ], [ 81.3214439, 16.3450264 ], [ 81.3219771, 16.3447681 ], [ 81.3230442, 16.344638 ], [ 81.3231769, 16.3443802 ], [ 81.3230421, 16.3433498 ], [ 81.324109, 16.3430905 ], [ 81.3241103, 16.3438635 ], [ 81.3246441, 16.3438626 ], [ 81.3246448, 16.344378 ], [ 81.3249117, 16.3443776 ], [ 81.3249104, 16.3436046 ], [ 81.3273116, 16.3434715 ], [ 81.3289134, 16.343856 ], [ 81.3286456, 16.3433411 ], [ 81.3294456, 16.3430824 ], [ 81.3297104, 16.3417936 ], [ 81.3291765, 16.3416653 ], [ 81.3283747, 16.3408936 ], [ 81.3278408, 16.340766 ], [ 81.3281965, 16.3395649 ], [ 81.3283723, 16.339477 ], [ 81.3295263, 16.3369866 ], [ 81.3297021, 16.3368985 ], [ 81.3297913, 16.3359556 ], [ 81.3299672, 16.3358675 ], [ 81.3300574, 16.3354398 ], [ 81.3302332, 16.3353519 ], [ 81.3303653, 16.3348363 ], [ 81.3302318, 16.3345789 ], [ 81.3304985, 16.3344492 ], [ 81.3339678, 16.3348306 ], [ 81.334236, 16.3356033 ], [ 81.3366388, 16.3363723 ], [ 81.3363726, 16.3368879 ], [ 81.3369066, 16.3370155 ], [ 81.3374411, 16.3375299 ], [ 81.3393093, 16.3377845 ], [ 81.3419782, 16.3381672 ], [ 81.3417106, 16.3376524 ], [ 81.3422441, 16.3376515 ], [ 81.3422451, 16.3381667 ], [ 81.343579, 16.3380353 ], [ 81.3438463, 16.3382925 ], [ 81.3443796, 16.3381633 ], [ 81.3443806, 16.3386785 ], [ 81.3478506, 16.3394458 ], [ 81.3479822, 16.3386726 ], [ 81.3478489, 16.3384152 ], [ 81.3483826, 16.3385428 ], [ 81.3494514, 16.3393139 ], [ 81.3513193, 16.33944 ], [ 81.3517183, 16.338924 ], [ 81.3517174, 16.3384088 ], [ 81.3515841, 16.3382797 ], [ 81.3510502, 16.3381523 ], [ 81.3509151, 16.3373795 ], [ 81.3498459, 16.3363508 ], [ 81.3495781, 16.3358359 ], [ 81.3489105, 16.3351926 ], [ 81.3483766, 16.335065 ], [ 81.3482418, 16.33455 ], [ 81.3477072, 16.3340355 ], [ 81.34704, 16.3336498 ], [ 81.3463713, 16.3330072 ], [ 81.3457032, 16.3321062 ], [ 81.3449022, 16.3318497 ], [ 81.3438332, 16.330821 ], [ 81.3424981, 16.3303079 ], [ 81.3414295, 16.3295367 ], [ 81.3400933, 16.3282506 ], [ 81.3395596, 16.3281232 ], [ 81.3395586, 16.3276078 ], [ 81.3390247, 16.3274795 ], [ 81.3383562, 16.3268369 ], [ 81.3382224, 16.3263219 ], [ 81.3379557, 16.3264506 ], [ 81.3363547, 16.3263247 ], [ 81.3366223, 16.3268397 ], [ 81.335555, 16.3268414 ], [ 81.335556, 16.3273566 ], [ 81.334755, 16.3269709 ], [ 81.3344881, 16.3269714 ], [ 81.3342216, 16.3272294 ], [ 81.3334216, 16.32736 ], [ 81.3339578, 16.3289049 ], [ 81.3347586, 16.3291614 ], [ 81.3343609, 16.3309654 ], [ 81.3336951, 16.3313525 ], [ 81.3323623, 16.3321276 ], [ 81.3304951, 16.3323882 ], [ 81.3302279, 16.332131 ], [ 81.3283606, 16.3323914 ], [ 81.3276941, 16.333037 ], [ 81.3275628, 16.3340678 ], [ 81.3280971, 16.334453 ], [ 81.3294316, 16.3347085 ], [ 81.3296983, 16.3345798 ], [ 81.3298744, 16.3352638 ], [ 81.3296996, 16.3353527 ], [ 81.3296085, 16.3357796 ], [ 81.3294335, 16.3358684 ], [ 81.3293434, 16.3368104 ], [ 81.3290351, 16.3371572 ], [ 81.3280136, 16.3393889 ], [ 81.3278387, 16.3394778 ], [ 81.3277057, 16.3399934 ], [ 81.327573, 16.3401219 ], [ 81.3265059, 16.3402529 ], [ 81.3266401, 16.3410255 ], [ 81.3262409, 16.3414122 ], [ 81.3246408, 16.3419299 ], [ 81.315837, 16.3429739 ], [ 81.3139699, 16.3433636 ], [ 81.3138368, 16.343879 ], [ 81.313704, 16.3440075 ], [ 81.312103, 16.34401 ], [ 81.3115681, 16.3432377 ], [ 81.3067645, 16.3428588 ], [ 81.3066314, 16.3433744 ], [ 81.3064987, 16.3435029 ], [ 81.3046305, 16.3432479 ], [ 81.3044965, 16.3431198 ], [ 81.3043615, 16.3418318 ], [ 81.3035613, 16.3420905 ], [ 81.3034264, 16.3413179 ], [ 81.3032931, 16.3411888 ], [ 81.3027596, 16.3411895 ], [ 81.301691, 16.3404182 ], [ 81.3006237, 16.3404197 ], [ 81.3002224, 16.3400342 ], [ 81.3000882, 16.3392615 ], [ 81.2995547, 16.3393906 ], [ 81.2984866, 16.3388769 ], [ 81.2979533, 16.339007 ], [ 81.2979525, 16.3384916 ], [ 81.2966182, 16.3383642 ], [ 81.2963515, 16.3384938 ], [ 81.2963508, 16.3379786 ], [ 81.2960841, 16.3381073 ], [ 81.2939493, 16.337982 ], [ 81.2938138, 16.3369516 ], [ 81.2940803, 16.3366936 ], [ 81.2946116, 16.335147 ], [ 81.2946108, 16.3346316 ], [ 81.293676, 16.3337308 ], [ 81.2910081, 16.3338637 ], [ 81.2910074, 16.3333485 ], [ 81.2904734, 16.33322 ], [ 81.2902064, 16.3329627 ], [ 81.2899395, 16.3329631 ], [ 81.289673, 16.3332211 ], [ 81.2894061, 16.3332215 ], [ 81.2891391, 16.3329641 ], [ 81.2870043, 16.3328388 ], [ 81.2871364, 16.3323232 ], [ 81.2867361, 16.3319369 ], [ 81.2862024, 16.3318093 ], [ 81.2863364, 16.3325819 ], [ 81.2856704, 16.3329688 ], [ 81.2846033, 16.3330996 ], [ 81.2852687, 16.3323258 ], [ 81.285533, 16.330522 ], [ 81.2859318, 16.3292332 ], [ 81.2867325, 16.3294897 ], [ 81.2868648, 16.3289743 ], [ 81.2865976, 16.3287171 ], [ 81.2861964, 16.327687 ], [ 81.2835265, 16.3265307 ], [ 81.2832593, 16.3262735 ], [ 81.2824589, 16.3262746 ], [ 81.2819257, 16.3265328 ], [ 81.2808584, 16.3265343 ], [ 81.2804587, 16.3271793 ], [ 81.2808616, 16.3287246 ], [ 81.2819285, 16.3284657 ], [ 81.2819299, 16.3294961 ], [ 81.2821967, 16.3294959 ], [ 81.2821956, 16.3287229 ], [ 81.2832635, 16.3291075 ], [ 81.2837978, 16.329622 ], [ 81.2843315, 16.3296214 ], [ 81.284598, 16.3294925 ], [ 81.284866, 16.3302651 ], [ 81.2835318, 16.3301378 ], [ 81.2832653, 16.3303957 ], [ 81.2829985, 16.3303961 ], [ 81.2824644, 16.3300108 ], [ 81.2824651, 16.330526 ], [ 81.2803289, 16.3293691 ], [ 81.2797953, 16.3293697 ], [ 81.2792608, 16.3288552 ], [ 81.2787271, 16.3287274 ], [ 81.2785502, 16.3280425 ], [ 81.2787259, 16.3279546 ], [ 81.2788165, 16.3277845 ], [ 81.2789924, 16.3276966 ], [ 81.2789921, 16.327439 ], [ 81.2787252, 16.3274392 ], [ 81.2784587, 16.3276974 ], [ 81.2781926, 16.3280837 ], [ 81.2773924, 16.3282139 ], [ 81.2773908, 16.3271835 ], [ 81.2769905, 16.3274417 ], [ 81.2767244, 16.3279573 ], [ 81.2763251, 16.3282154 ], [ 81.2765901, 16.3269268 ], [ 81.2760565, 16.3270559 ], [ 81.2757902, 16.3273139 ], [ 81.2749896, 16.3273149 ], [ 81.2747231, 16.3274445 ], [ 81.2745882, 16.3266719 ], [ 81.2744549, 16.3265428 ], [ 81.2739212, 16.326415 ], [ 81.2739219, 16.3269302 ], [ 81.2731213, 16.3268021 ], [ 81.2728547, 16.3269318 ], [ 81.2728539, 16.3264164 ], [ 81.2717866, 16.3264179 ], [ 81.2717861, 16.3259025 ], [ 81.2712523, 16.3259032 ], [ 81.2711196, 16.3266762 ], [ 81.2709868, 16.3268047 ], [ 81.2691196, 16.3271941 ], [ 81.2696511, 16.3256477 ], [ 81.2689843, 16.3261637 ], [ 81.2688522, 16.3266793 ], [ 81.2672516, 16.3269389 ], [ 81.2675173, 16.3261656 ], [ 81.2648494, 16.3262973 ], [ 81.2643156, 16.3261697 ], [ 81.2643164, 16.3266849 ], [ 81.2637823, 16.3262986 ], [ 81.2632484, 16.326171 ], [ 81.2632491, 16.3266862 ], [ 81.2628481, 16.3264292 ], [ 81.2629809, 16.325656 ], [ 81.2632476, 16.3255264 ], [ 81.2640482, 16.3256547 ], [ 81.2644472, 16.3251389 ], [ 81.2644468, 16.3248813 ], [ 81.2641797, 16.3246239 ], [ 81.2640461, 16.3241089 ], [ 81.2645797, 16.3241081 ], [ 81.2645787, 16.3233353 ], [ 81.2677808, 16.3235889 ], [ 81.2683126, 16.3222999 ], [ 81.2691138, 16.3229425 ], [ 81.2712493, 16.3237127 ], [ 81.2715165, 16.3239701 ], [ 81.2723173, 16.3242268 ], [ 81.2747188, 16.3243529 ], [ 81.2749845, 16.3235797 ], [ 81.2752512, 16.32345 ], [ 81.2771187, 16.3234475 ], [ 81.2779199, 16.3239618 ], [ 81.2787203, 16.3239607 ], [ 81.2795218, 16.3247326 ], [ 81.2803224, 16.3248607 ], [ 81.2803217, 16.3243455 ], [ 81.2824551, 16.3235698 ], [ 81.2828541, 16.3230539 ], [ 81.2827205, 16.3225388 ], [ 81.2835199, 16.3218932 ], [ 81.2851206, 16.3217626 ], [ 81.2849858, 16.3212476 ], [ 81.2837849, 16.3206046 ], [ 81.2832512, 16.3206054 ], [ 81.2827169, 16.3200907 ], [ 81.2813829, 16.3200926 ], [ 81.2788461, 16.3189371 ], [ 81.2787125, 16.3184218 ], [ 81.2792455, 16.3180342 ], [ 81.2805795, 16.3180325 ], [ 81.2819138, 16.3182884 ], [ 81.2824479, 16.3185453 ], [ 81.2832493, 16.3193171 ], [ 81.2845832, 16.3191869 ], [ 81.2845844, 16.3199599 ], [ 81.2851179, 16.3199592 ], [ 81.2853837, 16.319186 ], [ 81.2877855, 16.319698 ], [ 81.2880535, 16.3204704 ], [ 81.2912553, 16.3205944 ], [ 81.2923232, 16.3211083 ], [ 81.2928569, 16.3211075 ], [ 81.2936581, 16.3216216 ], [ 81.2979285, 16.3226462 ], [ 81.2995294, 16.3226439 ], [ 81.3000633, 16.322901 ], [ 81.301931, 16.3228983 ], [ 81.3024649, 16.3231552 ], [ 81.3086034, 16.3244345 ], [ 81.3096707, 16.3244328 ], [ 81.3102052, 16.3249474 ], [ 81.3152744, 16.3249399 ], [ 81.3155416, 16.3251971 ], [ 81.3168756, 16.3250667 ], [ 81.3171402, 16.3237781 ], [ 81.3174069, 16.3236484 ], [ 81.3182073, 16.3236473 ], [ 81.3195422, 16.3241604 ], [ 81.320876, 16.32403 ], [ 81.3208773, 16.324803 ], [ 81.3240789, 16.3247981 ], [ 81.3240797, 16.3253133 ], [ 81.3248801, 16.3253122 ], [ 81.324879, 16.3245392 ], [ 81.3251455, 16.3244096 ], [ 81.3272804, 16.3246639 ], [ 81.3278149, 16.3251784 ], [ 81.32995, 16.3255619 ], [ 81.3299508, 16.3260773 ], [ 81.3307512, 16.326076 ], [ 81.3307505, 16.3255608 ], [ 81.3312832, 16.3251729 ], [ 81.3320835, 16.3250433 ], [ 81.3320844, 16.3255587 ], [ 81.3326174, 16.3251708 ], [ 81.3334174, 16.3249119 ], [ 81.3358189, 16.3250374 ], [ 81.3360839, 16.3240064 ], [ 81.3376862, 16.3249051 ], [ 81.3379531, 16.3249047 ], [ 81.3384859, 16.3243886 ], [ 81.3400867, 16.3243861 ], [ 81.3411547, 16.3248996 ], [ 81.3416885, 16.3248987 ], [ 81.3427569, 16.32567 ], [ 81.3443583, 16.325925 ], [ 81.3448928, 16.3264394 ], [ 81.3456932, 16.3264381 ], [ 81.3470281, 16.3269512 ], [ 81.3478294, 16.3274651 ], [ 81.3494308, 16.3277201 ], [ 81.349965, 16.3279769 ], [ 81.351566, 16.3281036 ], [ 81.3515673, 16.3288764 ], [ 81.3526348, 16.329003 ], [ 81.3534361, 16.3295169 ], [ 81.3545042, 16.3299021 ], [ 81.3549048, 16.3304167 ], [ 81.3547727, 16.3309321 ], [ 81.3550398, 16.3310601 ], [ 81.355455514062498, 16.331099668077595 ], [ 81.3563741, 16.3311871 ], [ 81.3562832, 16.3316139 ], [ 81.3561082, 16.3317029 ], [ 81.3561092, 16.3322181 ], [ 81.356376, 16.3322177 ], [ 81.3566418, 16.3315727 ], [ 81.3571755, 16.331701 ], [ 81.3569073, 16.3309285 ], [ 81.3585087, 16.3311835 ], [ 81.3588201, 16.3313216 ], [ 81.359249, 16.3314213 ], [ 81.3595767, 16.3315677 ], [ 81.3603781, 16.3320816 ], [ 81.3611795, 16.3325955 ], [ 81.3619799, 16.3325942 ], [ 81.3622471, 16.3328512 ], [ 81.3633146, 16.3329788 ], [ 81.3633157, 16.333494 ], [ 81.3627822, 16.3336233 ], [ 81.3623828, 16.3342685 ], [ 81.3618506, 16.3350423 ], [ 81.3613178, 16.3355585 ], [ 81.3613203, 16.3368467 ], [ 81.3616298, 16.3372729 ], [ 81.361455, 16.3373617 ], [ 81.3614569, 16.3383923 ], [ 81.3617238, 16.338392 ], [ 81.3618563, 16.338134 ], [ 81.3618128, 16.3374489 ], [ 81.3619886, 16.3373608 ], [ 81.3619867, 16.3363303 ], [ 81.3625204, 16.3363294 ], [ 81.362387, 16.3365872 ], [ 81.3625223, 16.33736 ], [ 81.3635896, 16.3373581 ], [ 81.3635886, 16.3368429 ], [ 81.3630549, 16.3368437 ], [ 81.3631865, 16.3360707 ], [ 81.3634529, 16.3358125 ], [ 81.3635858, 16.3352971 ], [ 81.364386, 16.3351663 ], [ 81.3646523, 16.3349083 ], [ 81.3654531, 16.3350361 ], [ 81.3654522, 16.3345209 ], [ 81.3657192, 16.3346488 ], [ 81.3681207, 16.3347739 ], [ 81.3682552, 16.3355466 ], [ 81.3681224, 16.3356751 ], [ 81.3673218, 16.3355483 ], [ 81.3675915, 16.3370935 ], [ 81.3678583, 16.3370932 ], [ 81.3690557, 16.3355452 ], [ 81.3689213, 16.3347724 ], [ 81.369455, 16.3348998 ], [ 81.3697224, 16.335157 ], [ 81.3710575, 16.33567 ], [ 81.371592, 16.3361843 ], [ 81.3737281, 16.3369535 ], [ 81.3742624, 16.3373394 ], [ 81.3746612, 16.3368234 ], [ 81.3747943, 16.3363079 ], [ 81.3758627, 16.3369497 ], [ 81.3777311, 16.3373332 ], [ 81.3779995, 16.3381056 ], [ 81.3801354, 16.3387456 ], [ 81.3804019, 16.3386167 ], [ 81.3804034, 16.3393895 ], [ 81.3817376, 16.3393872 ], [ 81.3817366, 16.3388718 ], [ 81.3833388, 16.3395125 ], [ 81.383606, 16.3397698 ], [ 81.385208, 16.3402821 ], [ 81.3854754, 16.3405394 ], [ 81.387077, 16.3409232 ], [ 81.3870787, 16.3416962 ], [ 81.3881462, 16.3418225 ], [ 81.3886808, 16.342337 ], [ 81.3902828, 16.3428491 ], [ 81.3905502, 16.3431064 ], [ 81.3912594, 16.343322 ], [ 81.3912635, 16.3454645 ], [ 81.3904232, 16.3465851 ], [ 81.3902913, 16.3471007 ], [ 81.3905582, 16.3471001 ], [ 81.3912233, 16.346326 ], [ 81.3914465, 16.3456403 ], [ 81.3926875, 16.3443906 ], [ 81.3932208, 16.3442612 ], [ 81.3934862, 16.3434878 ], [ 81.3940197, 16.3434868 ], [ 81.3938833, 16.3421988 ], [ 81.3932153, 16.3415556 ], [ 81.392414, 16.3410417 ], [ 81.3905451, 16.3405299 ], [ 81.3902777, 16.3402729 ], [ 81.3878742, 16.3392466 ], [ 81.3865397, 16.3389915 ], [ 81.3862722, 16.3387344 ], [ 81.3809334, 16.3374558 ], [ 81.3801318, 16.336942 ], [ 81.3795983, 16.3369431 ], [ 81.3785298, 16.3364296 ], [ 81.3779963, 16.3364305 ], [ 81.3766612, 16.3359178 ], [ 81.3761275, 16.3359187 ], [ 81.3750592, 16.3354054 ], [ 81.3715886, 16.3343808 ], [ 81.3713214, 16.3341238 ], [ 81.3683849, 16.3333559 ], [ 81.3675835, 16.332842 ], [ 81.3654475, 16.3320729 ], [ 81.3649139, 16.3320737 ], [ 81.3585057, 16.3295084 ], [ 81.3582384, 16.3292512 ], [ 81.3569039, 16.3289958 ], [ 81.3561025, 16.3284819 ], [ 81.3555688, 16.3284827 ], [ 81.355455514062498, 16.328441902423744 ], [ 81.355455514062498, 16.328441902423741 ], [ 81.3534329, 16.3277135 ], [ 81.3531657, 16.3274562 ], [ 81.3496949, 16.3261739 ], [ 81.3488935, 16.3256598 ], [ 81.34836, 16.3256607 ], [ 81.3480927, 16.3254035 ], [ 81.3459568, 16.3246341 ], [ 81.3456896, 16.3243769 ], [ 81.3438206, 16.3236071 ], [ 81.342486, 16.3233515 ], [ 81.3422188, 16.3230945 ], [ 81.34035, 16.3223245 ], [ 81.3400827, 16.3220673 ], [ 81.3384809, 16.3215545 ], [ 81.3379464, 16.3210402 ], [ 81.3368788, 16.3207842 ], [ 81.3366115, 16.3205269 ], [ 81.3344758, 16.3197575 ], [ 81.3342086, 16.3195003 ], [ 81.3310049, 16.3182172 ], [ 81.3307376, 16.3179599 ], [ 81.3288688, 16.3171899 ], [ 81.3286015, 16.3169327 ], [ 81.3278007, 16.3166762 ], [ 81.3264655, 16.3159055 ], [ 81.3259319, 16.3159063 ], [ 81.3253974, 16.3153918 ], [ 81.3245962, 16.3148777 ], [ 81.3240625, 16.3148785 ], [ 81.3216594, 16.313594 ], [ 81.3211249, 16.3130796 ], [ 81.3200574, 16.3128235 ], [ 81.318989, 16.3120522 ], [ 81.3171198, 16.3110246 ], [ 81.3165862, 16.3110253 ], [ 81.3160517, 16.3105109 ], [ 81.3152506, 16.3099968 ], [ 81.3139159, 16.3094835 ], [ 81.3133814, 16.308969 ], [ 81.3125806, 16.3087125 ], [ 81.3115123, 16.3079412 ], [ 81.3109786, 16.307942 ], [ 81.30991, 16.3069129 ], [ 81.3084411, 16.3062714 ], [ 81.3077737, 16.3056279 ], [ 81.3067057, 16.3051142 ], [ 81.3059041, 16.3043423 ], [ 81.3053706, 16.304343 ], [ 81.3048363, 16.3038286 ], [ 81.3035016, 16.3033153 ], [ 81.302433, 16.3022862 ], [ 81.3013653, 16.3020301 ], [ 81.3002967, 16.3010011 ], [ 81.2992289, 16.3004873 ], [ 81.2984273, 16.2997156 ], [ 81.2976267, 16.2994589 ], [ 81.2968255, 16.2989448 ], [ 81.2960244, 16.2984307 ], [ 81.295223, 16.2976589 ], [ 81.2938883, 16.2971454 ], [ 81.2928197, 16.2961164 ], [ 81.2920191, 16.2958598 ], [ 81.2906832, 16.2945734 ], [ 81.2898826, 16.294317 ], [ 81.2890813, 16.2935451 ], [ 81.2882805, 16.2932886 ], [ 81.2874795, 16.2927744 ], [ 81.2869452, 16.2922597 ], [ 81.2858769, 16.2914882 ], [ 81.284542, 16.2907171 ], [ 81.2834736, 16.289688 ], [ 81.2829397, 16.2894311 ], [ 81.281604, 16.2881446 ], [ 81.2808034, 16.2878881 ], [ 81.280019260571308, 16.287132787499999 ], [ 81.280019260571322, 16.287132787499999 ], [ 81.2794678, 16.2866016 ], [ 81.2786672, 16.2863451 ], [ 81.2775986, 16.2853158 ], [ 81.2765309, 16.284802 ], [ 81.2761298, 16.2844166 ], [ 81.2754621, 16.2835152 ], [ 81.2746615, 16.2832586 ], [ 81.2739932, 16.2826158 ], [ 81.2735927, 16.2819719 ], [ 81.2727921, 16.2817152 ], [ 81.272391, 16.2813296 ], [ 81.2717233, 16.2804283 ], [ 81.2711898, 16.2804291 ], [ 81.270656, 16.280172 ], [ 81.2698547, 16.2794001 ], [ 81.2687866, 16.2786286 ], [ 81.2679856, 16.2781144 ], [ 81.2666519, 16.2779876 ], [ 81.2665203, 16.2797914 ], [ 81.2662544, 16.280307 ], [ 81.2659904, 16.2823684 ], [ 81.2655916, 16.2830125 ], [ 81.2650582, 16.2831425 ], [ 81.2651926, 16.284173 ], [ 81.2649269, 16.2849462 ], [ 81.2649282, 16.2859768 ], [ 81.26522696465517, 16.2869327875 ], [ 81.2653306, 16.2872644 ], [ 81.2655974, 16.2873924 ], [ 81.2663977, 16.2873914 ], [ 81.2666642, 16.2871335 ], [ 81.2674642, 16.2870042 ], [ 81.2674636, 16.2864888 ], [ 81.2682638, 16.2864878 ], [ 81.2681302, 16.2867456 ], [ 81.268130801222824, 16.287132787499999 ], [ 81.268131, 16.2872608 ], [ 81.2685322, 16.2877757 ], [ 81.2679989, 16.2877764 ], [ 81.2681346, 16.2898373 ], [ 81.2684016, 16.2900947 ], [ 81.2685366, 16.2908673 ], [ 81.2693377, 16.2915099 ], [ 81.2698713, 16.2915094 ], [ 81.2704054, 16.292024 ], [ 81.2706723, 16.2920236 ], [ 81.2709386, 16.2917657 ], [ 81.2714719, 16.2916366 ], [ 81.2712034, 16.2903487 ], [ 81.2722693, 16.2894451 ], [ 81.2757367, 16.289183 ], [ 81.2770712, 16.2896965 ], [ 81.2776054, 16.2900828 ], [ 81.2776046, 16.2895674 ], [ 81.2786723, 16.289952 ], [ 81.2800062, 16.2900796 ], [ 81.2806738, 16.2908517 ], [ 81.2810762, 16.2921393 ], [ 81.2816097, 16.2921386 ], [ 81.2822784, 16.2936836 ], [ 81.2828142, 16.2952287 ], [ 81.2826827, 16.2962595 ], [ 81.2821489, 16.2961308 ], [ 81.2818819, 16.2958736 ], [ 81.2813483, 16.2958743 ], [ 81.2804131, 16.2952319 ], [ 81.2801457, 16.2947169 ], [ 81.2800113, 16.2936865 ], [ 81.278677, 16.2933015 ], [ 81.2757426, 16.2933053 ], [ 81.2754761, 16.2935632 ], [ 81.2744088, 16.2934362 ], [ 81.2742757, 16.2939516 ], [ 81.2730767, 16.2945969 ], [ 81.2725438, 16.2951129 ], [ 81.2720104, 16.2952429 ], [ 81.2724109, 16.2957575 ], [ 81.2725479, 16.2980762 ], [ 81.2714804, 16.2978199 ], [ 81.271389, 16.2979891 ], [ 81.2704137, 16.298079 ], [ 81.2704149, 16.2988518 ], [ 81.2693474, 16.2985956 ], [ 81.2693466, 16.2980803 ], [ 81.2688135, 16.2983387 ], [ 81.2685453, 16.2973085 ], [ 81.2674786, 16.2975674 ], [ 81.2674769, 16.2962792 ], [ 81.2669435, 16.2964083 ], [ 81.2658758, 16.2960236 ], [ 81.2658766, 16.2965389 ], [ 81.2657004, 16.2964504 ], [ 81.2654334, 16.2961932 ], [ 81.2651661, 16.2959359 ], [ 81.2651658, 16.2955969 ], [ 81.2653415, 16.295509 ], [ 81.2653402, 16.2944784 ], [ 81.2651641, 16.2943901 ], [ 81.2648059, 16.2938345 ], [ 81.263337, 16.292935 ], [ 81.263055021001492, 16.2869327875 ], [ 81.2629255, 16.2841758 ], [ 81.2623924, 16.284434 ], [ 81.2625247, 16.2839186 ], [ 81.2623901, 16.2826305 ], [ 81.2618566, 16.2826311 ], [ 81.2615867, 16.2803128 ], [ 81.2621202, 16.2803121 ], [ 81.2623893, 16.2821153 ], [ 81.2629233, 16.2825005 ], [ 81.2639902, 16.2823708 ], [ 81.263855, 16.2813404 ], [ 81.2635876, 16.2808256 ], [ 81.2627862, 16.2800535 ], [ 81.2627859, 16.2797959 ], [ 81.2633187, 16.2792799 ], [ 81.2633181, 16.2787647 ], [ 81.2627838, 16.2782501 ], [ 81.2626502, 16.2777351 ], [ 81.262917, 16.2777347 ], [ 81.2635844, 16.2785067 ], [ 81.2639864, 16.2795368 ], [ 81.2642531, 16.2795364 ], [ 81.2646507, 16.2779902 ], [ 81.2646473, 16.2754138 ], [ 81.2638429, 16.272323 ], [ 81.2627745, 16.2712937 ], [ 81.2625071, 16.2707789 ], [ 81.2614389, 16.2697496 ], [ 81.2611714, 16.2692346 ], [ 81.2591688, 16.2673043 ], [ 81.2586352, 16.2671766 ], [ 81.2585007, 16.2666615 ], [ 81.2582336, 16.2664041 ], [ 81.2581002, 16.2658891 ], [ 81.2575664, 16.2657604 ], [ 81.256898, 16.26486 ], [ 81.2563638, 16.2643454 ], [ 81.2562304, 16.2638301 ], [ 81.25543, 16.2637018 ], [ 81.2547615, 16.2628014 ], [ 81.2546281, 16.2622862 ], [ 81.2540945, 16.2622868 ], [ 81.2539599, 16.2617717 ], [ 81.2532926, 16.2608704 ], [ 81.2527589, 16.2607426 ], [ 81.2526245, 16.2602274 ], [ 81.2523574, 16.2599702 ], [ 81.2522238, 16.259455 ], [ 81.2516904, 16.2594557 ], [ 81.2516897, 16.2589403 ], [ 81.2511563, 16.2589411 ], [ 81.2510218, 16.2584259 ], [ 81.2504875, 16.2576536 ], [ 81.2500873, 16.2572671 ], [ 81.2495538, 16.2571393 ], [ 81.2491518, 16.2561093 ], [ 81.2490187, 16.2559802 ], [ 81.2484852, 16.2558524 ], [ 81.2482172, 16.2548222 ], [ 81.2476838, 16.2548228 ], [ 81.2475493, 16.2543078 ], [ 81.2474162, 16.2541785 ], [ 81.2468827, 16.2540507 ], [ 81.2467483, 16.2535357 ], [ 81.2460807, 16.2526342 ], [ 81.2455472, 16.2525064 ], [ 81.2451454, 16.2514763 ], [ 81.2443444, 16.2507043 ], [ 81.2442108, 16.2501893 ], [ 81.2436774, 16.2501898 ], [ 81.242876, 16.2491601 ], [ 81.2423406, 16.2476149 ], [ 81.2415406, 16.2476158 ], [ 81.2411384, 16.2463282 ], [ 81.2406045, 16.2458133 ], [ 81.240337, 16.2452985 ], [ 81.2400698, 16.2447835 ], [ 81.2392688, 16.2440114 ], [ 81.2388675, 16.2427236 ], [ 81.2383342, 16.2427243 ], [ 81.2381998, 16.2422091 ], [ 81.2379327, 16.2419517 ], [ 81.2375319, 16.2409216 ], [ 81.2369985, 16.2409222 ], [ 81.2364633, 16.2393769 ], [ 81.2359297, 16.2392482 ], [ 81.2352612, 16.23809 ], [ 81.2351276, 16.237575 ], [ 81.2345943, 16.2375756 ], [ 81.2344599, 16.2370604 ], [ 81.2343268, 16.2369313 ], [ 81.2319265, 16.2368056 ], [ 81.2316574, 16.2347447 ], [ 81.2303242, 16.2348746 ], [ 81.2297914, 16.2355196 ], [ 81.231125, 16.2355181 ], [ 81.2313941, 16.237579 ], [ 81.2319275, 16.2375784 ], [ 81.2319277, 16.237836 ], [ 81.2311274, 16.2377077 ], [ 81.2305931, 16.2369354 ], [ 81.2300596, 16.2368075 ], [ 81.229925, 16.2360349 ], [ 81.2300584, 16.2357771 ], [ 81.2284578, 16.2352634 ], [ 81.2284584, 16.2357788 ], [ 81.2268583, 16.2359088 ], [ 81.2263253, 16.236167 ], [ 81.226059, 16.2365542 ], [ 81.2265924, 16.2365537 ], [ 81.2265927, 16.2368113 ], [ 81.2249929, 16.2370706 ], [ 81.2248596, 16.2375862 ], [ 81.2239271, 16.237973 ], [ 81.2237935, 16.2381025 ], [ 81.2236612, 16.2386179 ], [ 81.2231278, 16.2386185 ], [ 81.2229934, 16.2381033 ], [ 81.2228604, 16.2379742 ], [ 81.2204597, 16.2375907 ], [ 81.2204605, 16.2383637 ], [ 81.2223276, 16.2386192 ], [ 81.2222365, 16.2390462 ], [ 81.2204614, 16.2391365 ], [ 81.2204622, 16.2399095 ], [ 81.2217959, 16.2401658 ], [ 81.2219282, 16.2396502 ], [ 81.2224191, 16.2392221 ], [ 81.2228617, 16.2392624 ], [ 81.2231288, 16.2395198 ], [ 81.224196, 16.2399056 ], [ 81.2240617, 16.2393904 ], [ 81.2236614, 16.2388755 ], [ 81.2241945, 16.2386173 ], [ 81.224595, 16.2393898 ], [ 81.2245958, 16.2401628 ], [ 81.2251299, 16.2406774 ], [ 81.225265, 16.2419657 ], [ 81.2257986, 16.2419651 ], [ 81.2256659, 16.2429957 ], [ 81.2259331, 16.2435107 ], [ 81.2262019, 16.245314 ], [ 81.226469, 16.2455714 ], [ 81.2268706, 16.2466015 ], [ 81.227671, 16.2468583 ], [ 81.2286052, 16.2478878 ], [ 81.2286062, 16.2486608 ], [ 81.2276738, 16.2493055 ], [ 81.2268738, 16.2494355 ], [ 81.2267394, 16.2489205 ], [ 81.2262055, 16.2484057 ], [ 81.2256712, 16.2476334 ], [ 81.2255378, 16.2471182 ], [ 81.2250042, 16.2471188 ], [ 81.2248696, 16.2463459 ], [ 81.2246026, 16.2460887 ], [ 81.2244691, 16.2455735 ], [ 81.2239356, 16.2454448 ], [ 81.2232671, 16.2442866 ], [ 81.222867, 16.2439001 ], [ 81.2223334, 16.2437721 ], [ 81.2223329, 16.2432569 ], [ 81.2220664, 16.2433856 ], [ 81.2215328, 16.2433862 ], [ 81.2208747, 16.2426981 ], [ 81.2201979, 16.2420993 ], [ 81.2188636, 16.2413278 ], [ 81.2180628, 16.2406848 ], [ 81.2180626, 16.2404272 ], [ 81.2193964, 16.2408118 ], [ 81.2204642, 16.241713 ], [ 81.2204646, 16.2419706 ], [ 81.2208224, 16.2423157 ], [ 81.2217986, 16.2424845 ], [ 81.221798, 16.2419693 ], [ 81.2228653, 16.2423541 ], [ 81.2234, 16.2435134 ], [ 81.2242004, 16.2437702 ], [ 81.2240654, 16.2427398 ], [ 81.2232227, 16.2423945 ], [ 81.2231316, 16.2419679 ], [ 81.222598, 16.2418392 ], [ 81.2220639, 16.2413244 ], [ 81.2207303, 16.2411974 ], [ 81.2207298, 16.2406822 ], [ 81.2191289, 16.2400392 ], [ 81.2187279, 16.2396536 ], [ 81.2184605, 16.238881 ], [ 81.2184593, 16.2378504 ], [ 81.218059, 16.2372063 ], [ 81.2171248, 16.2368213 ], [ 81.2172577, 16.2360481 ], [ 81.215925, 16.2368224 ], [ 81.2159245, 16.2363072 ], [ 81.2151242, 16.2361787 ], [ 81.2148574, 16.2359213 ], [ 81.2143238, 16.2357935 ], [ 81.2143232, 16.2352781 ], [ 81.2140566, 16.2352785 ], [ 81.2140571, 16.2357937 ], [ 81.2135238, 16.2357943 ], [ 81.2134327, 16.2364786 ], [ 81.2129912, 16.2365678 ], [ 81.2128579, 16.2370832 ], [ 81.2125914, 16.237341 ], [ 81.2123677, 16.2380256 ], [ 81.2113922, 16.2377283 ], [ 81.2107243, 16.2370853 ], [ 81.2104567, 16.2360551 ], [ 81.2105894, 16.2350243 ], [ 81.2111225, 16.2348944 ], [ 81.2115638, 16.2345958 ], [ 81.2116559, 16.2347655 ], [ 81.2124565, 16.23528 ], [ 81.2125888, 16.2347646 ], [ 81.2121887, 16.2343781 ], [ 81.2117462, 16.2344193 ], [ 81.2115215, 16.2342505 ], [ 81.2115209, 16.2337351 ], [ 81.2112539, 16.2334777 ], [ 81.2111203, 16.2327049 ], [ 81.2105869, 16.2327054 ], [ 81.2104521, 16.2319326 ], [ 81.2101853, 16.2316754 ], [ 81.2097844, 16.2303875 ], [ 81.2100511, 16.2305157 ], [ 81.2105844, 16.2305151 ], [ 81.2111182, 16.2307721 ], [ 81.2116517, 16.2309009 ], [ 81.2119199, 16.2324465 ], [ 81.2132535, 16.2324452 ], [ 81.2132541, 16.2329604 ], [ 81.2145871, 16.2327015 ], [ 81.2145877, 16.2332167 ], [ 81.215121, 16.2332163 ], [ 81.2148553, 16.2339895 ], [ 81.215922, 16.2339884 ], [ 81.2159214, 16.2334731 ], [ 81.2164552, 16.2338585 ], [ 81.2169887, 16.2339872 ], [ 81.2172569, 16.2352753 ], [ 81.2177903, 16.2352747 ], [ 81.2179226, 16.2347593 ], [ 81.2181889, 16.2345013 ], [ 81.2183221, 16.2339859 ], [ 81.2188555, 16.2339853 ], [ 81.2191233, 16.2350156 ], [ 81.2196568, 16.2351435 ], [ 81.2199235, 16.2350148 ], [ 81.2207247, 16.2360445 ], [ 81.2201913, 16.2360451 ], [ 81.2204588, 16.2368177 ], [ 81.2209927, 16.2372033 ], [ 81.2215262, 16.237332 ], [ 81.2212586, 16.2365593 ], [ 81.2223257, 16.2369441 ], [ 81.2231265, 16.2374586 ], [ 81.2244601, 16.2375865 ], [ 81.2248581, 16.2362979 ], [ 81.224857, 16.2352673 ], [ 81.2245899, 16.2350099 ], [ 81.2239216, 16.233207 ], [ 81.2241883, 16.2332068 ], [ 81.2247235, 16.2347521 ], [ 81.2252569, 16.2347515 ], [ 81.2255245, 16.2355242 ], [ 81.2265909, 16.2352654 ], [ 81.2268568, 16.2344922 ], [ 81.2281904, 16.2346192 ], [ 81.228457, 16.2347481 ], [ 81.2284565, 16.2342329 ], [ 81.2324572, 16.2344862 ], [ 81.2325903, 16.2347436 ], [ 81.2325912, 16.2355166 ], [ 81.2327254, 16.235774 ], [ 81.2321921, 16.2357746 ], [ 81.2321926, 16.23629 ], [ 81.2332597, 16.2365465 ], [ 81.2333922, 16.2362887 ], [ 81.2335239, 16.2344851 ], [ 81.2329906, 16.2344856 ], [ 81.2328558, 16.2337128 ], [ 81.2323211, 16.2326827 ], [ 81.2317872, 16.2321681 ], [ 81.2315196, 16.2313955 ], [ 81.2309857, 16.2308808 ], [ 81.2304508, 16.2295932 ], [ 81.2299169, 16.2290783 ], [ 81.2291153, 16.2277911 ], [ 81.2280465, 16.2259887 ], [ 81.2275122, 16.2252163 ], [ 81.2273786, 16.2244435 ], [ 81.2268453, 16.224444 ], [ 81.2264429, 16.2228986 ], [ 81.2259089, 16.2223839 ], [ 81.2253743, 16.2210963 ], [ 81.22484, 16.2203238 ], [ 81.224706, 16.2192934 ], [ 81.2241726, 16.219294 ], [ 81.2239042, 16.2177485 ], [ 81.2233709, 16.2177491 ], [ 81.2229687, 16.2162036 ], [ 81.2227018, 16.2159462 ], [ 81.2221669, 16.2146586 ], [ 81.2219001, 16.2144012 ], [ 81.2216324, 16.2136285 ], [ 81.2213656, 16.2133711 ], [ 81.221098, 16.2125985 ], [ 81.2208311, 16.2123411 ], [ 81.2202964, 16.2110534 ], [ 81.2200293, 16.2107962 ], [ 81.2194947, 16.2095085 ], [ 81.2192278, 16.2092511 ], [ 81.2186929, 16.2079634 ], [ 81.2184261, 16.207706 ], [ 81.2180246, 16.205903 ], [ 81.2174913, 16.2059035 ], [ 81.2173561, 16.2046153 ], [ 81.216822, 16.203843 ], [ 81.2166876, 16.2025548 ], [ 81.2161545, 16.2025554 ], [ 81.215485, 16.2004949 ], [ 81.2153508, 16.1992069 ], [ 81.2148175, 16.1992074 ], [ 81.2146822, 16.1976616 ], [ 81.2148156, 16.1974038 ], [ 81.2142822, 16.1974044 ], [ 81.214014, 16.1958587 ], [ 81.2134807, 16.1958593 ], [ 81.2134788, 16.1940559 ], [ 81.2129454, 16.1940564 ], [ 81.2128109, 16.1932836 ], [ 81.212544, 16.1930262 ], [ 81.2117417, 16.1907081 ], [ 81.2114746, 16.1904509 ], [ 81.2109396, 16.1886478 ], [ 81.2108054, 16.1873598 ], [ 81.210272, 16.1873602 ], [ 81.2101369, 16.1860721 ], [ 81.20987, 16.1858147 ], [ 81.2097353, 16.1840115 ], [ 81.2092021, 16.1840118 ], [ 81.2090666, 16.1824662 ], [ 81.2087997, 16.1822088 ], [ 81.2086653, 16.180663 ], [ 81.208132, 16.1806635 ], [ 81.207997, 16.1793755 ], [ 81.2069279, 16.1768 ], [ 81.2058568, 16.172421 ], [ 81.2055899, 16.1721636 ], [ 81.205560428161348, 16.171975 ], [ 81.205560428161334, 16.171975 ], [ 81.2047848, 16.1670115 ], [ 81.2045179, 16.1667543 ], [ 81.2041157, 16.1639204 ], [ 81.2035824, 16.163921 ], [ 81.2035803, 16.1618597 ], [ 81.2030471, 16.1618603 ], [ 81.2031772, 16.159026 ], [ 81.2038419, 16.1569642 ], [ 81.2035754, 16.1569644 ], [ 81.203576, 16.1574798 ], [ 81.2033093, 16.15748 ], [ 81.2031745, 16.1564496 ], [ 81.2038385, 16.1536148 ], [ 81.2041052, 16.1536146 ], [ 81.2035748, 16.1564492 ], [ 81.2038415, 16.156449 ], [ 81.2042397, 16.155418 ], [ 81.2047695, 16.152068 ], [ 81.2049024, 16.151295 ], [ 81.2043694, 16.1512956 ], [ 81.2042344, 16.1502651 ], [ 81.2034327, 16.1482047 ], [ 81.2031658, 16.1479472 ], [ 81.2024983, 16.146402 ], [ 81.2019651, 16.1464025 ], [ 81.2018302, 16.1451143 ], [ 81.2011637, 16.1447282 ], [ 81.20063, 16.1442134 ], [ 81.2000968, 16.1440854 ], [ 81.2007644, 16.1456307 ], [ 81.2007648, 16.1461461 ], [ 81.2010316, 16.1464035 ], [ 81.2012996, 16.1476913 ], [ 81.2015663, 16.1479488 ], [ 81.2015676, 16.149237 ], [ 81.2013017, 16.1497526 ], [ 81.2013027, 16.1507832 ], [ 81.2015701, 16.1515558 ], [ 81.2017056, 16.1533593 ], [ 81.2022388, 16.1533587 ], [ 81.202239, 16.1536163 ], [ 81.201706, 16.1537452 ], [ 81.2011739, 16.1549057 ], [ 81.2017071, 16.1549051 ], [ 81.2015746, 16.1561935 ], [ 81.2018419, 16.1567085 ], [ 81.2018426, 16.1574813 ], [ 81.2015763, 16.1577393 ], [ 81.2015771, 16.1585123 ], [ 81.2019789, 16.1600578 ], [ 81.2011787, 16.1595432 ], [ 81.2013125, 16.1605738 ], [ 81.2015797, 16.1610888 ], [ 81.2018481, 16.162892 ], [ 81.202382, 16.1636645 ], [ 81.2026508, 16.1657253 ], [ 81.2023845, 16.1659833 ], [ 81.2022526, 16.1670139 ], [ 81.2025193, 16.1670138 ], [ 81.2025187, 16.1664984 ], [ 81.2030517, 16.1662404 ], [ 81.2039868, 16.1688159 ], [ 81.2039885, 16.1703617 ], [ 81.204293658908853, 16.171975 ], [ 81.2045245, 16.1731954 ], [ 81.2043926, 16.1739684 ], [ 81.205459, 16.1739674 ], [ 81.2054597, 16.1747403 ], [ 81.2059931, 16.1747397 ], [ 81.2058594, 16.1749975 ], [ 81.20586, 16.1755129 ], [ 81.2061273, 16.1760279 ], [ 81.2061286, 16.1773161 ], [ 81.2066633, 16.1788614 ], [ 81.2071974, 16.1796339 ], [ 81.2071985, 16.1806645 ], [ 81.2075994, 16.1811793 ], [ 81.2065329, 16.1811804 ], [ 81.2065334, 16.1816957 ], [ 81.2076001, 16.1819523 ], [ 81.2076007, 16.1824675 ], [ 81.2081339, 16.1824671 ], [ 81.2094722, 16.1873611 ], [ 81.2100055, 16.1873605 ], [ 81.2098719, 16.1876183 ], [ 81.2100088, 16.1904522 ], [ 81.2089422, 16.1904533 ], [ 81.2085404, 16.1891655 ], [ 81.2073399, 16.1880067 ], [ 81.20654, 16.1880075 ], [ 81.2062735, 16.1881371 ], [ 81.206273, 16.1876217 ], [ 81.2054729, 16.1874932 ], [ 81.2041399, 16.1876238 ], [ 81.2042734, 16.188139 ], [ 81.2040071, 16.1883968 ], [ 81.2038751, 16.1894276 ], [ 81.204942, 16.1896843 ], [ 81.2050768, 16.1914876 ], [ 81.2053864, 16.1924293 ], [ 81.205569, 16.1926055 ], [ 81.205878, 16.192775 ], [ 81.2066803, 16.1950931 ], [ 81.207348, 16.1957361 ], [ 81.2081484, 16.1962507 ], [ 81.2086816, 16.1961218 ], [ 81.2084168, 16.1979255 ], [ 81.2078834, 16.197926 ], [ 81.2080167, 16.1981836 ], [ 81.2086842, 16.1986983 ], [ 81.2086854, 16.1997287 ], [ 81.2089521, 16.1997285 ], [ 81.2089526, 16.2002437 ], [ 81.2084189, 16.1999867 ], [ 81.2084185, 16.1994715 ], [ 81.208152, 16.1996 ], [ 81.2076187, 16.1996006 ], [ 81.2068182, 16.1990861 ], [ 81.2057517, 16.1990871 ], [ 81.2049515, 16.1988302 ], [ 81.2046846, 16.1985728 ], [ 81.2041511, 16.198445 ], [ 81.2041505, 16.1979296 ], [ 81.2052174, 16.1981863 ], [ 81.2052168, 16.1976711 ], [ 81.2041503, 16.197672 ], [ 81.2042821, 16.1966414 ], [ 81.2041488, 16.1961262 ], [ 81.2054824, 16.1966403 ], [ 81.2053484, 16.1963827 ], [ 81.2046782, 16.1923893 ], [ 81.2038774, 16.1916172 ], [ 81.203344, 16.1914893 ], [ 81.2032099, 16.1909742 ], [ 81.2020091, 16.1898155 ], [ 81.2012093, 16.1896879 ], [ 81.2010749, 16.1891727 ], [ 81.2005408, 16.1884002 ], [ 81.2000069, 16.1876278 ], [ 81.1998727, 16.1863398 ], [ 81.1993397, 16.1865977 ], [ 81.1992042, 16.1847945 ], [ 81.1988037, 16.1837643 ], [ 81.198004, 16.1840226 ], [ 81.1978668, 16.1806734 ], [ 81.1974671, 16.1802868 ], [ 81.1969337, 16.1801589 ], [ 81.1971998, 16.1796433 ], [ 81.1961329, 16.1792574 ], [ 81.1959991, 16.1791292 ], [ 81.1958657, 16.178614 ], [ 81.1966655, 16.1786133 ], [ 81.1967982, 16.1783555 ], [ 81.1967977, 16.1778402 ], [ 81.1957302, 16.1768106 ], [ 81.1955969, 16.1762955 ], [ 81.1950636, 16.1761666 ], [ 81.1945297, 16.1755235 ], [ 81.1950628, 16.1755231 ], [ 81.1949288, 16.1752655 ], [ 81.194925500732069, 16.17177817379536 ], [ 81.1949249, 16.1711432 ], [ 81.1943909, 16.1703708 ], [ 81.1937213, 16.1667643 ], [ 81.1931881, 16.1667647 ], [ 81.1931874, 16.1659918 ], [ 81.1915879, 16.1661217 ], [ 81.1910545, 16.1659937 ], [ 81.1910551, 16.1665089 ], [ 81.1900796, 16.166679 ], [ 81.1899884, 16.1662523 ], [ 81.1894552, 16.1661236 ], [ 81.1893212, 16.1659952 ], [ 81.1891874, 16.1649648 ], [ 81.188654, 16.1648361 ], [ 81.1885202, 16.1647078 ], [ 81.1883862, 16.1634197 ], [ 81.1889194, 16.1634192 ], [ 81.1887852, 16.1629039 ], [ 81.1879848, 16.1623895 ], [ 81.187851, 16.1613589 ], [ 81.1867846, 16.1613598 ], [ 81.1870505, 16.1605866 ], [ 81.1881167, 16.1603281 ], [ 81.1883824, 16.1595549 ], [ 81.1878493, 16.1595554 ], [ 81.1885145, 16.1587819 ], [ 81.1891806, 16.1577507 ], [ 81.1881144, 16.15788 ], [ 81.1873153, 16.1586537 ], [ 81.1859823, 16.1586549 ], [ 81.185716, 16.1589126 ], [ 81.1849164, 16.1589134 ], [ 81.1841171, 16.1594294 ], [ 81.1833174, 16.1595594 ], [ 81.1833178, 16.1600746 ], [ 81.1825181, 16.1602037 ], [ 81.1823843, 16.1600754 ], [ 81.1822511, 16.1595603 ], [ 81.1830506, 16.159302 ], [ 81.1830498, 16.158529 ], [ 81.183583, 16.1583993 ], [ 81.1838493, 16.1581413 ], [ 81.1849156, 16.1581404 ], [ 81.1854486, 16.1578824 ], [ 81.1873144, 16.1577524 ], [ 81.1875799, 16.156464 ], [ 81.1870466, 16.1563351 ], [ 81.1869128, 16.1562069 ], [ 81.1867784, 16.1546611 ], [ 81.18527, 16.1550892 ], [ 81.1851791, 16.15492 ], [ 81.1859787, 16.1546618 ], [ 81.1861112, 16.1544041 ], [ 81.1862441, 16.1533732 ], [ 81.1846444, 16.1532455 ], [ 81.1835784, 16.153504 ], [ 81.1834444, 16.1533757 ], [ 81.1833112, 16.1528605 ], [ 81.182778, 16.1528611 ], [ 81.1827776, 16.1523457 ], [ 81.1814446, 16.1522175 ], [ 81.1809109, 16.1517027 ], [ 81.1795781, 16.1517038 ], [ 81.1791781, 16.1520911 ], [ 81.1786881, 16.1532912 ], [ 81.1785132, 16.1533799 ], [ 81.1790441, 16.150803 ], [ 81.1798432, 16.1501578 ], [ 81.1803766, 16.1502865 ], [ 81.1806421, 16.1492557 ], [ 81.1790424, 16.1489994 ], [ 81.178775, 16.1479692 ], [ 81.1795747, 16.1479684 ], [ 81.1793078, 16.1475817 ], [ 81.1787746, 16.1475821 ], [ 81.1785081, 16.1477118 ], [ 81.1785072, 16.1466811 ], [ 81.1779744, 16.1470676 ], [ 81.1771745, 16.1469399 ], [ 81.177043, 16.1492587 ], [ 81.1769103, 16.1495165 ], [ 81.1777104, 16.1497736 ], [ 81.1775767, 16.1500313 ], [ 81.1774456, 16.151835 ], [ 81.1769122, 16.1517061 ], [ 81.1767784, 16.1515777 ], [ 81.1765093, 16.1487439 ], [ 81.1763762, 16.1484865 ], [ 81.1769094, 16.1484859 ], [ 81.1766421, 16.1477133 ], [ 81.176109, 16.1477136 ], [ 81.1762414, 16.1471982 ], [ 81.1758417, 16.1468117 ], [ 81.1750417, 16.1465547 ], [ 81.173709, 16.1468134 ], [ 81.1734427, 16.1470712 ], [ 81.1721099, 16.1470724 ], [ 81.1715769, 16.1473305 ], [ 81.1675788, 16.147849 ], [ 81.1662456, 16.147464 ], [ 81.166246, 16.1479792 ], [ 81.1659795, 16.1479794 ], [ 81.1659789, 16.1472066 ], [ 81.1654458, 16.1472069 ], [ 81.1655781, 16.1466915 ], [ 81.1650445, 16.1461767 ], [ 81.1646446, 16.1455324 ], [ 81.1635781, 16.1452755 ], [ 81.1633116, 16.145405 ], [ 81.1633112, 16.1448898 ], [ 81.1619784, 16.1448907 ], [ 81.1623766, 16.1433445 ], [ 81.1623758, 16.1425717 ], [ 81.1621092, 16.1423143 ], [ 81.162108, 16.1410259 ], [ 81.1623745, 16.1407681 ], [ 81.1625078, 16.1402527 ], [ 81.1630409, 16.1402523 ], [ 81.1634399, 16.1397367 ], [ 81.1637056, 16.1387059 ], [ 81.1637043, 16.1371601 ], [ 81.1637133, 16.1367787 ], [ 81.1635709, 16.1363872 ], [ 81.1670349, 16.1349669 ], [ 81.1691674, 16.1349652 ], [ 81.1702337, 16.1352221 ], [ 81.1705006, 16.1354795 ], [ 81.1710336, 16.1353508 ], [ 81.1722337, 16.1366381 ], [ 81.1725008, 16.1371531 ], [ 81.1726363, 16.1392141 ], [ 81.173703, 16.1398569 ], [ 81.1745032, 16.1403716 ], [ 81.1753033, 16.1408862 ], [ 81.1758366, 16.1410151 ], [ 81.1761035, 16.1415301 ], [ 81.1750373, 16.1415311 ], [ 81.1753046, 16.1423037 ], [ 81.1787701, 16.1424292 ], [ 81.1790364, 16.1421714 ], [ 81.1795694, 16.1420425 ], [ 81.1795684, 16.1410119 ], [ 81.1782358, 16.1412708 ], [ 81.1782363, 16.141786 ], [ 81.1777032, 16.1417864 ], [ 81.1775688, 16.1410136 ], [ 81.1781014, 16.140498 ], [ 81.1781001, 16.138952 ], [ 81.1783664, 16.1386942 ], [ 81.1783645, 16.1366329 ], [ 81.1779647, 16.1362464 ], [ 81.1774318, 16.1363761 ], [ 81.1771634, 16.1343152 ], [ 81.1766302, 16.1343156 ], [ 81.17663, 16.134058 ], [ 81.1771632, 16.1340574 ], [ 81.1770284, 16.133027 ], [ 81.1763617, 16.131997 ], [ 81.1768946, 16.1318673 ], [ 81.1774282, 16.1323821 ], [ 81.1779612, 16.1322533 ], [ 81.1780963, 16.1348297 ], [ 81.1776979, 16.1358605 ], [ 81.1784975, 16.1358599 ], [ 81.1791641, 16.1366324 ], [ 81.1792983, 16.1371474 ], [ 81.1798315, 16.137147 ], [ 81.1807654, 16.1386921 ], [ 81.1808995, 16.1392073 ], [ 81.1814329, 16.1394645 ], [ 81.1815656, 16.1392068 ], [ 81.1814304, 16.1366303 ], [ 81.1819634, 16.1366299 ], [ 81.1819627, 16.1358569 ], [ 81.1814295, 16.1357282 ], [ 81.1806287, 16.1344405 ], [ 81.1796949, 16.1340554 ], [ 81.1796947, 16.1337978 ], [ 81.179961, 16.1335398 ], [ 81.1798266, 16.1317365 ], [ 81.1792934, 16.1317369 ], [ 81.1791592, 16.1312217 ], [ 81.1787595, 16.1307067 ], [ 81.1795592, 16.1307061 ], [ 81.1795597, 16.1314791 ], [ 81.1800929, 16.1314785 ], [ 81.1802256, 16.1312207 ], [ 81.1800914, 16.1296751 ], [ 81.179558, 16.1295462 ], [ 81.1791572, 16.1289028 ], [ 81.1788865, 16.1242655 ], [ 81.1786191, 16.1232351 ], [ 81.1784862, 16.1231058 ], [ 81.1776864, 16.1229783 ], [ 81.1776869, 16.1234935 ], [ 81.1774202, 16.1233644 ], [ 81.1763541, 16.1233653 ], [ 81.1756884, 16.1247834 ], [ 81.1754221, 16.1250412 ], [ 81.1751562, 16.1258144 ], [ 81.1748899, 16.1260724 ], [ 81.174891, 16.1273606 ], [ 81.1740921, 16.1281342 ], [ 81.1739614, 16.130453 ], [ 81.1731617, 16.1303245 ], [ 81.1726281, 16.1298097 ], [ 81.1715618, 16.1298104 ], [ 81.1712955, 16.1299399 ], [ 81.1711613, 16.1294247 ], [ 81.1710283, 16.1292956 ], [ 81.1699623, 16.1294256 ], [ 81.1699631, 16.1304562 ], [ 81.1694299, 16.1303275 ], [ 81.1691632, 16.1300699 ], [ 81.16863, 16.129942 ], [ 81.1684958, 16.1294269 ], [ 81.1678291, 16.1285252 ], [ 81.1651636, 16.128399 ], [ 81.1655633, 16.1289138 ], [ 81.1656979, 16.1299444 ], [ 81.1646319, 16.1300735 ], [ 81.1640986, 16.1299456 ], [ 81.1640982, 16.1294303 ], [ 81.1624991, 16.1295598 ], [ 81.1619657, 16.1293026 ], [ 81.1616988, 16.1289168 ], [ 81.1627652, 16.1291737 ], [ 81.1628975, 16.1284007 ], [ 81.1631636, 16.1278851 ], [ 81.1639625, 16.1271115 ], [ 81.1644947, 16.1260805 ], [ 81.1646266, 16.1237617 ], [ 81.1638272, 16.1240198 ], [ 81.1638266, 16.123247 ], [ 81.1632934, 16.1232474 ], [ 81.1632931, 16.122732 ], [ 81.1624934, 16.1226035 ], [ 81.1622271, 16.1228613 ], [ 81.1619604, 16.1228615 ], [ 81.1616937, 16.122604 ], [ 81.1608941, 16.1226046 ], [ 81.1604942, 16.1229919 ], [ 81.1603619, 16.1235073 ], [ 81.1598289, 16.123636 ], [ 81.1596953, 16.1237655 ], [ 81.1592967, 16.1247963 ], [ 81.15903, 16.1246672 ], [ 81.1580545, 16.1247086 ], [ 81.1579638, 16.1245396 ], [ 81.1574307, 16.12454 ], [ 81.1578289, 16.1229938 ], [ 81.1580952, 16.122736 ], [ 81.1580937, 16.1209325 ], [ 81.1570262, 16.1191297 ], [ 81.1562258, 16.1180996 ], [ 81.1559583, 16.1170694 ], [ 81.1554248, 16.1162967 ], [ 81.155291, 16.1150085 ], [ 81.1547578, 16.1150089 ], [ 81.1544902, 16.1134632 ], [ 81.153957, 16.1134636 ], [ 81.1535554, 16.1116604 ], [ 81.1532887, 16.111403 ], [ 81.1527546, 16.1101151 ], [ 81.1524879, 16.1098577 ], [ 81.1519538, 16.1083121 ], [ 81.1519531, 16.1072816 ], [ 81.1522192, 16.106766 ], [ 81.1524838, 16.104447 ], [ 81.1532825, 16.1031582 ], [ 81.1534154, 16.1021276 ], [ 81.154215, 16.1023846 ], [ 81.1543473, 16.1016116 ], [ 81.1540801, 16.1008388 ], [ 81.1540795, 16.1000658 ], [ 81.1552761, 16.0959426 ], [ 81.1558094, 16.0963283 ], [ 81.1563426, 16.0964572 ], [ 81.1562084, 16.095942 ], [ 81.1560755, 16.0958127 ], [ 81.1550092, 16.0954275 ], [ 81.1551413, 16.0946545 ], [ 81.1550082, 16.0941393 ], [ 81.1555412, 16.0941389 ], [ 81.1552742, 16.0933661 ], [ 81.1560736, 16.0933656 ], [ 81.1560729, 16.0923349 ], [ 81.1550067, 16.0923357 ], [ 81.1552721, 16.0907897 ], [ 81.1539396, 16.090919 ], [ 81.153806, 16.0910484 ], [ 81.1539408, 16.0923365 ], [ 81.1534078, 16.0923368 ], [ 81.1532734, 16.091564 ], [ 81.1530067, 16.0913066 ], [ 81.1528735, 16.0905338 ], [ 81.1523405, 16.0905341 ], [ 81.1522063, 16.0900189 ], [ 81.1523392, 16.0889883 ], [ 81.1518062, 16.0889887 ], [ 81.1518056, 16.0882157 ], [ 81.1526049, 16.0879575 ], [ 81.1526045, 16.0874421 ], [ 81.152871, 16.0874419 ], [ 81.1531383, 16.0884723 ], [ 81.1544705, 16.0880845 ], [ 81.1563356, 16.0876971 ], [ 81.1563352, 16.0871819 ], [ 81.1571345, 16.0867942 ], [ 81.1579338, 16.0866653 ], [ 81.1584656, 16.0851191 ], [ 81.1579326, 16.0851195 ], [ 81.1580646, 16.0840887 ], [ 81.1573981, 16.083187 ], [ 81.1568652, 16.0831873 ], [ 81.1567314, 16.0830592 ], [ 81.1563312, 16.0820288 ], [ 81.1555318, 16.0820293 ], [ 81.1555308, 16.0807411 ], [ 81.1549977, 16.0806122 ], [ 81.154731, 16.0803548 ], [ 81.154198, 16.0802268 ], [ 81.1537968, 16.0789388 ], [ 81.1531305, 16.0782947 ], [ 81.1525975, 16.0782951 ], [ 81.151532, 16.0786829 ], [ 81.1517981, 16.0782956 ], [ 81.1513976, 16.0779099 ], [ 81.1512643, 16.0771371 ], [ 81.1507314, 16.0771374 ], [ 81.1504641, 16.076107 ], [ 81.1493982, 16.0759785 ], [ 81.1480651, 16.0752066 ], [ 81.1472651, 16.0744342 ], [ 81.1443337, 16.0741785 ], [ 81.1442001, 16.0743079 ], [ 81.1438017, 16.0753387 ], [ 81.1443345, 16.0750808 ], [ 81.1443348, 16.075596 ], [ 81.1438019, 16.0755963 ], [ 81.1439347, 16.075854 ], [ 81.1439355, 16.0768846 ], [ 81.1438028, 16.0770131 ], [ 81.1422041, 16.077014 ], [ 81.1403379, 16.0759847 ], [ 81.1400714, 16.0759849 ], [ 81.1390058, 16.0763726 ], [ 81.1387387, 16.0755997 ], [ 81.1392717, 16.0755994 ], [ 81.1391377, 16.0750842 ], [ 81.1384717, 16.0746976 ], [ 81.1376722, 16.0745699 ], [ 81.137672, 16.0743121 ], [ 81.1384715, 16.0743117 ], [ 81.1386036, 16.0735387 ], [ 81.1382033, 16.0719931 ], [ 81.1376703, 16.0719932 ], [ 81.1376701, 16.071478 ], [ 81.1363375, 16.0710919 ], [ 81.1347387, 16.0712223 ], [ 81.134871, 16.0704491 ], [ 81.1347382, 16.07032 ], [ 81.1344717, 16.0703202 ], [ 81.1328733, 16.0709658 ], [ 81.1327388, 16.0696776 ], [ 81.1318058, 16.0687759 ], [ 81.1312729, 16.0686479 ], [ 81.1303377, 16.0652991 ], [ 81.130071, 16.0650414 ], [ 81.12957091999273, 16.063353243749997 ], [ 81.1295369, 16.0632384 ], [ 81.129478108460077, 16.063153243749998 ], [ 81.1290035, 16.0624658 ], [ 81.128336, 16.0596319 ], [ 81.1279357, 16.0593745 ], [ 81.1276683, 16.0578288 ], [ 81.1278, 16.054737 ], [ 81.1275335, 16.054737 ], [ 81.1274001, 16.0552524 ], [ 81.1275367, 16.0596325 ], [ 81.127978, 16.0597198 ], [ 81.1280706, 16.0614357 ], [ 81.1286036, 16.0614353 ], [ 81.1286048, 16.063239 ], [ 81.1291377, 16.0632386 ], [ 81.1298047, 16.0652994 ], [ 81.1306066, 16.0691635 ], [ 81.1308733, 16.0694211 ], [ 81.1319408, 16.0719968 ], [ 81.13261, 16.0758613 ], [ 81.1320773, 16.07599 ], [ 81.124349, 16.0754794 ], [ 81.1232825, 16.0744493 ], [ 81.1216832, 16.0738065 ], [ 81.1215492, 16.0732913 ], [ 81.1214163, 16.0731622 ], [ 81.1208833, 16.0730341 ], [ 81.120883, 16.0725187 ], [ 81.1203502, 16.0727767 ], [ 81.12035, 16.0722614 ], [ 81.119817, 16.0721324 ], [ 81.1194165, 16.0717466 ], [ 81.1192835, 16.0712314 ], [ 81.1182173, 16.0708451 ], [ 81.1174175, 16.0700726 ], [ 81.1168847, 16.0702021 ], [ 81.1167507, 16.0696869 ], [ 81.1160844, 16.0690428 ], [ 81.1150183, 16.0685279 ], [ 81.114618, 16.0681422 ], [ 81.1138172, 16.0655661 ], [ 81.11355, 16.0642781 ], [ 81.1132833, 16.0640205 ], [ 81.11313334360203, 16.063153243749998 ], [ 81.113016, 16.0624746 ], [ 81.1124827, 16.061702 ], [ 81.1116828, 16.0609296 ], [ 81.1112831, 16.0600275 ], [ 81.1104838, 16.0601571 ], [ 81.1103504, 16.0606725 ], [ 81.1104848, 16.0617031 ], [ 81.1098178, 16.0611881 ], [ 81.109284, 16.0596425 ], [ 81.1087509, 16.0591275 ], [ 81.1082171, 16.0575818 ], [ 81.1079505, 16.0573244 ], [ 81.107817, 16.0560362 ], [ 81.1072842, 16.0560364 ], [ 81.1063496, 16.0532027 ], [ 81.1062164, 16.0521723 ], [ 81.1056834, 16.0521724 ], [ 81.1055492, 16.051142 ], [ 81.1044821, 16.0488235 ], [ 81.1042156, 16.0485661 ], [ 81.1039486, 16.0475357 ], [ 81.1034154, 16.0470205 ], [ 81.1031485, 16.0459901 ], [ 81.102882, 16.0457326 ], [ 81.1023483, 16.044187 ], [ 81.1020818, 16.0439294 ], [ 81.1018149, 16.0431566 ], [ 81.1012818, 16.0426415 ], [ 81.1010149, 16.0416111 ], [ 81.1007482, 16.0413535 ], [ 81.1008815, 16.0405805 ], [ 81.1003487, 16.0405807 ], [ 81.1002145, 16.0395503 ], [ 81.0994145, 16.0380046 ], [ 81.0992814, 16.0372318 ], [ 81.0987484, 16.037232 ], [ 81.0986144, 16.0364592 ], [ 81.0975475, 16.0341407 ], [ 81.0970142, 16.0331105 ], [ 81.0960811, 16.030792 ], [ 81.0955483, 16.0307922 ], [ 81.0952812, 16.0292464 ], [ 81.0947482, 16.0292467 ], [ 81.094748, 16.0287313 ], [ 81.0942153, 16.0287317 ], [ 81.0939484, 16.0277011 ], [ 81.0934154, 16.027572 ], [ 81.0927486, 16.0269287 ], [ 81.0926158, 16.0264134 ], [ 81.092083, 16.0264136 ], [ 81.0920826, 16.0258984 ], [ 81.0915498, 16.0257693 ], [ 81.0907499, 16.0244815 ], [ 81.0899507, 16.0242241 ], [ 81.0895504, 16.0238383 ], [ 81.0894171, 16.0225501 ], [ 81.0902162, 16.0222921 ], [ 81.0906146, 16.0210037 ], [ 81.0911472, 16.0202305 ], [ 81.0916798, 16.0197149 ], [ 81.092212, 16.0186841 ], [ 81.0935436, 16.0173953 ], [ 81.0940758, 16.0163645 ], [ 81.0946084, 16.0158489 ], [ 81.0951406, 16.0148181 ], [ 81.0956732, 16.0143025 ], [ 81.0962056, 16.0135293 ], [ 81.0968713, 16.0117255 ], [ 81.0963383, 16.0115964 ], [ 81.0959382, 16.0112107 ], [ 81.0958049, 16.01018 ], [ 81.095272, 16.010051 ], [ 81.0950055, 16.009665 ], [ 81.0963373, 16.0096644 ], [ 81.0964704, 16.0101797 ], [ 81.0963377, 16.0104375 ], [ 81.0979361, 16.010565 ], [ 81.0982026, 16.0104367 ], [ 81.0980693, 16.0114673 ], [ 81.097803, 16.0117251 ], [ 81.0975375, 16.0135287 ], [ 81.0974048, 16.0136571 ], [ 81.0968722, 16.0137867 ], [ 81.0968722, 16.0140443 ], [ 81.097938, 16.0143016 ], [ 81.0979382, 16.0148168 ], [ 81.0984712, 16.0149449 ], [ 81.0990041, 16.0154599 ], [ 81.100336, 16.0152018 ], [ 81.1008686, 16.0146862 ], [ 81.1014014, 16.014686 ], [ 81.1016677, 16.0148151 ], [ 81.1018002, 16.0140421 ], [ 81.1016673, 16.0139128 ], [ 81.1011345, 16.0137846 ], [ 81.1011344, 16.013527 ], [ 81.1024662, 16.0132689 ], [ 81.1025987, 16.0130111 ], [ 81.1027312, 16.0106922 ], [ 81.1037966, 16.0104341 ], [ 81.1032633, 16.009146 ], [ 81.1048618, 16.0096605 ], [ 81.104728, 16.0091453 ], [ 81.1043285, 16.0086302 ], [ 81.1048612, 16.0086299 ], [ 81.1051272, 16.0075992 ], [ 81.1043279, 16.0074703 ], [ 81.1041943, 16.007342 ], [ 81.1041939, 16.0068266 ], [ 81.1040612, 16.0066975 ], [ 81.1035282, 16.0065694 ], [ 81.1035286, 16.0070846 ], [ 81.1029958, 16.007085 ], [ 81.1032631, 16.0088884 ], [ 81.1027303, 16.0087593 ], [ 81.1025965, 16.008631 ], [ 81.1024632, 16.0076004 ], [ 81.1016641, 16.0077293 ], [ 81.1016619, 16.0030914 ], [ 81.1043256, 16.0029618 ], [ 81.1047238, 16.0011581 ], [ 81.10499, 16.0009003 ], [ 81.1049892, 15.9993543 ], [ 81.1047223, 15.9983239 ], [ 81.1044558, 15.9980665 ], [ 81.1036556, 15.9960056 ], [ 81.1036549, 15.9947174 ], [ 81.1033884, 15.9944598 ], [ 81.1032555, 15.9939446 ], [ 81.1027227, 15.9938155 ], [ 81.1021895, 15.9931721 ], [ 81.1027223, 15.9931719 ], [ 81.102722, 15.9923989 ], [ 81.1032546, 15.9922695 ], [ 81.1035211, 15.9925269 ], [ 81.1043203, 15.9926558 ], [ 81.1043205, 15.9931712 ], [ 81.1048533, 15.9934284 ], [ 81.1055184, 15.9926552 ], [ 81.1055182, 15.99214 ], [ 81.104186, 15.9913675 ], [ 81.1041856, 15.9908523 ], [ 81.1049843, 15.9898213 ], [ 81.1053836, 15.9887905 ], [ 81.1059164, 15.9887902 ], [ 81.1059166, 15.9893056 ], [ 81.1069822, 15.9895626 ], [ 81.1071147, 15.9890474 ], [ 81.107381, 15.9887896 ], [ 81.1073806, 15.9882742 ], [ 81.1063148, 15.9875017 ], [ 81.1060058, 15.986559 ], [ 81.1064479, 15.9864711 ], [ 81.1062718, 15.985786 ], [ 81.1067138, 15.9856979 ], [ 81.1071126, 15.9851825 ], [ 81.1072451, 15.9831213 ], [ 81.1067125, 15.9831215 ], [ 81.1065798, 15.9849251 ], [ 81.1063137, 15.9854405 ], [ 81.1060896, 15.9856097 ], [ 81.1056482, 15.9853116 ], [ 81.1048492, 15.9854413 ], [ 81.104849, 15.9849261 ], [ 81.1043164, 15.9850546 ], [ 81.1037838, 15.9854418 ], [ 81.1037834, 15.9846688 ], [ 81.1035171, 15.9847973 ], [ 81.1024517, 15.9847979 ], [ 81.1021852, 15.9845403 ], [ 81.1016524, 15.9845407 ], [ 81.1015188, 15.9844123 ], [ 81.1020501, 15.9815779 ], [ 81.1019172, 15.9813203 ], [ 81.1027161, 15.9810623 ], [ 81.1031149, 15.9805467 ], [ 81.1033787, 15.9756513 ], [ 81.1039111, 15.9751357 ], [ 81.1041771, 15.9743627 ], [ 81.1047095, 15.9735895 ], [ 81.1047083, 15.9715282 ], [ 81.1049743, 15.970755 ], [ 81.1049728, 15.967921 ], [ 81.1048401, 15.9677917 ], [ 81.1029758, 15.9677926 ], [ 81.1027093, 15.967535 ], [ 81.102443, 15.9675352 ], [ 81.1021767, 15.967793 ], [ 81.1019104, 15.967793 ], [ 81.1017766, 15.9676649 ], [ 81.1016437, 15.9671495 ], [ 81.1021761, 15.9667624 ], [ 81.1032415, 15.9666335 ], [ 81.1033738, 15.9661181 ], [ 81.1025745, 15.9656033 ], [ 81.1024417, 15.9650879 ], [ 81.0995118, 15.9644447 ], [ 81.0987123, 15.9636721 ], [ 81.0979132, 15.9634148 ], [ 81.0957826, 15.9632874 ], [ 81.0960486, 15.9625144 ], [ 81.095516, 15.962643 ], [ 81.0953823, 15.9627722 ], [ 81.09525, 15.9635452 ], [ 81.0941848, 15.9636741 ], [ 81.0939183, 15.9634167 ], [ 81.0933855, 15.9632886 ], [ 81.0933859, 15.9638038 ], [ 81.0939185, 15.9638036 ], [ 81.0940522, 15.9658646 ], [ 81.093786, 15.9661224 ], [ 81.0940527, 15.9671531 ], [ 81.0940531, 15.9679259 ], [ 81.0937872, 15.9686991 ], [ 81.0935209, 15.9689569 ], [ 81.0933886, 15.9694721 ], [ 81.0928558, 15.9694725 ], [ 81.0927218, 15.9686995 ], [ 81.0925891, 15.9685702 ], [ 81.0920563, 15.968442 ], [ 81.0917894, 15.9674116 ], [ 81.0912568, 15.9674118 ], [ 81.0912567, 15.9668966 ], [ 81.0907241, 15.9668968 ], [ 81.0900569, 15.9650935 ], [ 81.0895239, 15.9643207 ], [ 81.0893908, 15.9635479 ], [ 81.0888581, 15.9634188 ], [ 81.0881913, 15.96226 ], [ 81.0880584, 15.9617448 ], [ 81.0893899, 15.9614866 ], [ 81.0893897, 15.9609712 ], [ 81.0909873, 15.960326 ], [ 81.0912536, 15.9600682 ], [ 81.0931174, 15.9592946 ], [ 81.0933837, 15.9590368 ], [ 81.0941828, 15.9591657 ], [ 81.0939163, 15.9587788 ], [ 81.0928509, 15.9586509 ], [ 81.0932497, 15.9581355 ], [ 81.0933829, 15.9573625 ], [ 81.0941816, 15.9571045 ], [ 81.0943141, 15.9565891 ], [ 81.0947138, 15.9560737 ], [ 81.0931158, 15.955945 ], [ 81.0925832, 15.9560746 ], [ 81.0925831, 15.9555592 ], [ 81.0941807, 15.9550433 ], [ 81.0941807, 15.9547857 ], [ 81.092849, 15.9545286 ], [ 81.0929811, 15.9534978 ], [ 81.0924481, 15.9527252 ], [ 81.0925815, 15.9522098 ], [ 81.0920489, 15.95221 ], [ 81.0920488, 15.9516947 ], [ 81.0925814, 15.9518229 ], [ 81.0933806, 15.9523377 ], [ 81.0944458, 15.9524666 ], [ 81.094312, 15.9519514 ], [ 81.0936466, 15.9515647 ], [ 81.0931136, 15.9510497 ], [ 81.0917819, 15.9507927 ], [ 81.0916483, 15.9506643 ], [ 81.0915154, 15.9501491 ], [ 81.0891185, 15.9497632 ], [ 81.088852, 15.9495056 ], [ 81.0875203, 15.9492485 ], [ 81.0873867, 15.9491202 ], [ 81.0867207, 15.9477029 ], [ 81.0856553, 15.9473173 ], [ 81.0859219, 15.9480901 ], [ 81.0851228, 15.9474458 ], [ 81.0845901, 15.9473177 ], [ 81.0845902, 15.9478329 ], [ 81.0841903, 15.9475755 ], [ 81.0840573, 15.9468025 ], [ 81.0845901, 15.9470601 ], [ 81.0847225, 15.9465447 ], [ 81.084323, 15.9452565 ], [ 81.0837904, 15.9452568 ], [ 81.0837906, 15.9457721 ], [ 81.0819263, 15.9452574 ], [ 81.082193, 15.9465456 ], [ 81.0813941, 15.9464167 ], [ 81.0800622, 15.9456443 ], [ 81.0792633, 15.9455161 ], [ 81.0791295, 15.9450009 ], [ 81.0789968, 15.9448717 ], [ 81.0779316, 15.944872 ], [ 81.0777978, 15.9447437 ], [ 81.0776647, 15.9437131 ], [ 81.0784636, 15.9435836 ], [ 81.0787299, 15.9437127 ], [ 81.0787297, 15.9431975 ], [ 81.0800614, 15.9435831 ], [ 81.0811266, 15.9434542 ], [ 81.0813931, 15.944227 ], [ 81.0816594, 15.944227 ], [ 81.0816592, 15.9437116 ], [ 81.0824583, 15.943969 ], [ 81.0827242, 15.943196 ], [ 81.0811264, 15.9430673 ], [ 81.0809928, 15.9429389 ], [ 81.0809926, 15.9424237 ], [ 81.0812587, 15.9421659 ], [ 81.0811257, 15.9413929 ], [ 81.0795281, 15.9417796 ], [ 81.0787292, 15.9417798 ], [ 81.0785955, 15.9416515 ], [ 81.0784623, 15.9401056 ], [ 81.0795273, 15.9397184 ], [ 81.0803262, 15.9398473 ], [ 81.0803264, 15.9403627 ], [ 81.080859, 15.9401049 ], [ 81.0811255, 15.9408777 ], [ 81.0816583, 15.9410059 ], [ 81.0819246, 15.9412635 ], [ 81.0835226, 15.9417781 ], [ 81.0840554, 15.9422931 ], [ 81.084588, 15.9422929 ], [ 81.0853873, 15.9429372 ], [ 81.0857859, 15.9424218 ], [ 81.0859193, 15.9419064 ], [ 81.0867182, 15.9419061 ], [ 81.0867176, 15.9406178 ], [ 81.0864513, 15.940618 ], [ 81.0864517, 15.9411332 ], [ 81.0861854, 15.9411334 ], [ 81.0859187, 15.9403606 ], [ 81.0864513, 15.9403602 ], [ 81.0867173, 15.9395872 ], [ 81.0880488, 15.9398443 ], [ 81.0880491, 15.9403597 ], [ 81.0883154, 15.9403595 ], [ 81.0883151, 15.9398443 ], [ 81.0893803, 15.9395861 ], [ 81.0895129, 15.9398437 ], [ 81.0895133, 15.9406167 ], [ 81.0893808, 15.9408745 ], [ 81.0896471, 15.9410026 ], [ 81.0915112, 15.9411312 ], [ 81.0915116, 15.9419042 ], [ 81.0931096, 15.942161 ], [ 81.0931092, 15.9416458 ], [ 81.0936416, 15.9412585 ], [ 81.0941742, 15.94113 ], [ 81.0941741, 15.9406148 ], [ 81.0952391, 15.9403566 ], [ 81.0949726, 15.9398414 ], [ 81.0963041, 15.9400985 ], [ 81.0968363, 15.9393253 ], [ 81.0957711, 15.9391966 ], [ 81.0956375, 15.9390682 ], [ 81.0955046, 15.9385528 ], [ 81.0963035, 15.938681 ], [ 81.0965698, 15.9388101 ], [ 81.096303, 15.9377796 ], [ 81.0957704, 15.9376505 ], [ 81.0952374, 15.9368779 ], [ 81.0947048, 15.9368781 ], [ 81.0944387, 15.9370074 ], [ 81.0944383, 15.9362345 ], [ 81.0939057, 15.9362347 ], [ 81.0937719, 15.9357195 ], [ 81.0932391, 15.9352045 ], [ 81.093106, 15.9346891 ], [ 81.0927063, 15.9349471 ], [ 81.0925738, 15.9354623 ], [ 81.0917749, 15.9352051 ], [ 81.0917747, 15.9346897 ], [ 81.0909758, 15.93469 ], [ 81.0911083, 15.9344324 ], [ 81.0909752, 15.9336594 ], [ 81.0904426, 15.9335303 ], [ 81.090309, 15.933402 ], [ 81.0903088, 15.9328868 ], [ 81.0904423, 15.932629 ], [ 81.0899096, 15.9326294 ], [ 81.0899095, 15.932114 ], [ 81.0893769, 15.9319849 ], [ 81.0888439, 15.9312123 ], [ 81.0880448, 15.9306972 ], [ 81.0875122, 15.9305691 ], [ 81.086979, 15.9290234 ], [ 81.0861801, 15.9288944 ], [ 81.0851145, 15.9278641 ], [ 81.0845819, 15.9278645 ], [ 81.0837828, 15.9273495 ], [ 81.0833829, 15.9269635 ], [ 81.08325, 15.9264483 ], [ 81.0827174, 15.9267061 ], [ 81.0828499, 15.9259331 ], [ 81.0820507, 15.9251605 ], [ 81.0813852, 15.9242586 ], [ 81.0805863, 15.9240011 ], [ 81.0801862, 15.9233576 ], [ 81.0795207, 15.9227133 ], [ 81.0787218, 15.9225852 ], [ 81.0787216, 15.9220699 ], [ 81.078189, 15.9221985 ], [ 81.0780554, 15.9220701 ], [ 81.0779221, 15.9207819 ], [ 81.0768573, 15.9210399 ], [ 81.0767233, 15.9200095 ], [ 81.0761905, 15.9194943 ], [ 81.0761484, 15.9193243 ], [ 81.0765903, 15.9192365 ], [ 81.0764564, 15.9184636 ], [ 81.0759236, 15.9179484 ], [ 81.0757908, 15.9174332 ], [ 81.0752582, 15.9173041 ], [ 81.0745918, 15.916403 ], [ 81.0716619, 15.9135699 ], [ 81.071529, 15.9130545 ], [ 81.0709964, 15.9129254 ], [ 81.0701973, 15.9121527 ], [ 81.0693986, 15.9121529 ], [ 81.0688658, 15.9113801 ], [ 81.0681996, 15.9109944 ], [ 81.0676666, 15.9097063 ], [ 81.0674003, 15.9094487 ], [ 81.0667347, 15.9080314 ], [ 81.0659358, 15.907774 ], [ 81.0638057, 15.9079038 ], [ 81.0638059, 15.9084192 ], [ 81.0619422, 15.9088057 ], [ 81.0606111, 15.9088061 ], [ 81.0604774, 15.9086778 ], [ 81.0603446, 15.9081626 ], [ 81.0600783, 15.9082909 ], [ 81.0595459, 15.9082911 ], [ 81.0594122, 15.9081628 ], [ 81.0592794, 15.9076475 ], [ 81.058747, 15.9076477 ], [ 81.0586131, 15.9071323 ], [ 81.0582142, 15.9067456 ], [ 81.0576816, 15.9066173 ], [ 81.0576817, 15.9071327 ], [ 81.056883, 15.9072612 ], [ 81.0567494, 15.9073905 ], [ 81.0566169, 15.9079059 ], [ 81.0574158, 15.9081633 ], [ 81.0574158, 15.9086785 ], [ 81.0566171, 15.9085496 ], [ 81.0563508, 15.9086789 ], [ 81.0562168, 15.9071331 ], [ 81.0558178, 15.9067462 ], [ 81.0550191, 15.9066181 ], [ 81.0546201, 15.9099675 ], [ 81.0547539, 15.9112559 ], [ 81.0553773, 15.911601 ], [ 81.0558192, 15.9115132 ], [ 81.0558192, 15.911771 ], [ 81.0552867, 15.911771 ], [ 81.0544878, 15.9115135 ], [ 81.054354, 15.9109983 ], [ 81.0542213, 15.910869 ], [ 81.0536889, 15.9107407 ], [ 81.0536889, 15.9112561 ], [ 81.0530231, 15.9120293 ], [ 81.052757, 15.9125445 ], [ 81.0526247, 15.9140906 ], [ 81.0520923, 15.9140907 ], [ 81.0520921, 15.9133177 ], [ 81.0523582, 15.9133177 ], [ 81.0522244, 15.9120295 ], [ 81.0532471, 15.9111677 ], [ 81.0530223, 15.9089375 ], [ 81.053688, 15.9071337 ], [ 81.0532459, 15.9070452 ], [ 81.0532879, 15.9066184 ], [ 81.0531552, 15.9064892 ], [ 81.0518239, 15.9064895 ], [ 81.0515578, 15.9068764 ], [ 81.0530639, 15.9072215 ], [ 81.0531558, 15.9081645 ], [ 81.0523569, 15.9081646 ], [ 81.0523571, 15.9089375 ], [ 81.0520909, 15.9089377 ], [ 81.0516908, 15.907907 ], [ 81.051558, 15.9077778 ], [ 81.0510255, 15.9079072 ], [ 81.0510254, 15.907392 ], [ 81.0502266, 15.9073922 ], [ 81.0503591, 15.9068768 ], [ 81.0499602, 15.9064899 ], [ 81.0494277, 15.9063618 ], [ 81.0492939, 15.9055888 ], [ 81.0488949, 15.9053312 ], [ 81.0488949, 15.9058466 ], [ 81.0486288, 15.9058466 ], [ 81.048495, 15.9053313 ], [ 81.0482287, 15.9050737 ], [ 81.048096, 15.9045583 ], [ 81.047031, 15.9048163 ], [ 81.0468976, 15.9053317 ], [ 81.0462325, 15.9058471 ], [ 81.0464986, 15.9050741 ], [ 81.0441023, 15.905203 ], [ 81.0419724, 15.9055903 ], [ 81.0419726, 15.9063633 ], [ 81.0401089, 15.9068789 ], [ 81.0398424, 15.9055907 ], [ 81.0406411, 15.9053329 ], [ 81.0409072, 15.9043022 ], [ 81.0419721, 15.9039152 ], [ 81.0430371, 15.9040443 ], [ 81.0434359, 15.9035289 ], [ 81.0435693, 15.9030135 ], [ 81.0419719, 15.9030138 ], [ 81.0419717, 15.9022408 ], [ 81.0483618, 15.9027547 ], [ 81.0487606, 15.9022393 ], [ 81.0491601, 15.9012087 ], [ 81.0483614, 15.9010796 ], [ 81.0475625, 15.9005644 ], [ 81.0464975, 15.9005648 ], [ 81.0456988, 15.9000496 ], [ 81.0448999, 15.8997921 ], [ 81.0435686, 15.8990193 ], [ 81.0430361, 15.8990195 ], [ 81.0427698, 15.8987619 ], [ 81.0422372, 15.8987619 ], [ 81.0419711, 15.8988914 ], [ 81.0419709, 15.898376 ], [ 81.0411722, 15.8982469 ], [ 81.0390422, 15.8974742 ], [ 81.0389086, 15.8973459 ], [ 81.0387757, 15.8968307 ], [ 81.037977, 15.8967016 ], [ 81.0371783, 15.8961864 ], [ 81.0367783, 15.8958005 ], [ 81.0363792, 15.8948982 ], [ 81.0350481, 15.8951562 ], [ 81.0347819, 15.8954138 ], [ 81.0339832, 15.8954139 ], [ 81.0335835, 15.8960586 ], [ 81.0335835, 15.8965738 ], [ 81.0330511, 15.8970892 ], [ 81.0326523, 15.897733 ], [ 81.0318538, 15.8982484 ], [ 81.0307887, 15.8985062 ], [ 81.0305226, 15.898764 ], [ 81.0289252, 15.8987642 ], [ 81.0282591, 15.8993082 ], [ 81.0278604, 15.8996666 ], [ 81.026988, 15.9006301 ], [ 81.024932, 15.9022435 ], [ 81.0246657, 15.9022435 ], [ 81.0246657, 15.9019859 ], [ 81.0259967, 15.9006974 ], [ 81.026263, 15.9006974 ], [ 81.0265531, 15.9001936 ], [ 81.0278478, 15.8992641 ], [ 81.0278602, 15.898636 ], [ 81.0273276, 15.8985067 ], [ 81.0269277, 15.897863 ], [ 81.0259963, 15.8968326 ], [ 81.0275937, 15.89709 ], [ 81.0275937, 15.8976054 ], [ 81.0283926, 15.8979913 ], [ 81.0297237, 15.8979912 ], [ 81.02999, 15.8977334 ], [ 81.0307887, 15.8977334 ], [ 81.0318536, 15.897347 ], [ 81.0319863, 15.8970894 ], [ 81.0319861, 15.8963164 ], [ 81.0315871, 15.8959295 ], [ 81.0302558, 15.8951569 ], [ 81.0297234, 15.8950286 ], [ 81.0293232, 15.893225 ], [ 81.0290569, 15.8929673 ], [ 81.0289243, 15.8924521 ], [ 81.0283917, 15.8923229 ], [ 81.0278592, 15.8918076 ], [ 81.0273268, 15.8918076 ], [ 81.0262618, 15.8923232 ], [ 81.0254633, 15.8930962 ], [ 81.0249309, 15.8932255 ], [ 81.0249307, 15.8927103 ], [ 81.0257294, 15.8924525 ], [ 81.0258621, 15.8921949 ], [ 81.0258619, 15.8916795 ], [ 81.0251968, 15.8907774 ], [ 81.0246642, 15.8906491 ], [ 81.0245306, 15.8901337 ], [ 81.0243979, 15.8900046 ], [ 81.0233331, 15.8900046 ], [ 81.0230668, 15.889747 ], [ 81.0225344, 15.8896186 ], [ 81.0225344, 15.889361 ], [ 81.0230668, 15.8892318 ], [ 81.0233331, 15.8894894 ], [ 81.0238655, 15.8896185 ], [ 81.0230666, 15.8887164 ], [ 81.0225342, 15.8884587 ], [ 81.0214692, 15.8874283 ], [ 81.020138, 15.8869131 ], [ 81.0193391, 15.8861401 ], [ 81.0188067, 15.8861403 ], [ 81.0185404, 15.8858827 ], [ 81.0169432, 15.8853675 ], [ 81.0165433, 15.8847237 ], [ 81.0165433, 15.8839507 ], [ 81.0168094, 15.8836931 ], [ 81.0166767, 15.8824049 ], [ 81.0169428, 15.8822756 ], [ 81.0174752, 15.8822756 ], [ 81.0185402, 15.883306 ], [ 81.0196052, 15.8835636 ], [ 81.0206701, 15.8842081 ], [ 81.0209364, 15.8834351 ], [ 81.0201377, 15.8834351 ], [ 81.0197377, 15.8824047 ], [ 81.0193388, 15.8820176 ], [ 81.01854, 15.8817602 ], [ 81.0105535, 15.8821477 ], [ 81.01042, 15.8816323 ], [ 81.0102874, 15.881503 ], [ 81.0097549, 15.8813747 ], [ 81.0098874, 15.8800864 ], [ 81.0097547, 15.8793134 ], [ 81.0102872, 15.8793134 ], [ 81.0102872, 15.8798286 ], [ 81.0108196, 15.8800864 ], [ 81.010686, 15.8790558 ], [ 81.0102872, 15.8786687 ], [ 81.0092223, 15.8778959 ], [ 81.0076249, 15.876737 ], [ 81.0076249, 15.8772524 ], [ 81.0068262, 15.8769946 ], [ 81.0064265, 15.875964 ], [ 81.0064265, 15.8754487 ], [ 81.0060275, 15.8741605 ], [ 81.0049627, 15.8740312 ], [ 81.0038978, 15.8730006 ], [ 81.0025669, 15.8722276 ], [ 81.0009695, 15.8713263 ], [ 81.0009695, 15.8718417 ], [ 80.9999046, 15.8717124 ], [ 80.9991061, 15.871197 ], [ 80.9985737, 15.8710687 ], [ 80.9983076, 15.8700381 ], [ 80.9977752, 15.8700381 ], [ 80.9977752, 15.8695228 ], [ 80.9972428, 15.8693936 ], [ 80.996444, 15.8683628 ], [ 80.9955119, 15.8677192 ], [ 80.994847, 15.8668169 ], [ 80.9940483, 15.8668169 ], [ 80.9937822, 15.8669462 ], [ 80.9937822, 15.8664308 ], [ 80.992451, 15.8663015 ], [ 80.9915189, 15.866946 ], [ 80.9913862, 15.8679766 ], [ 80.9921849, 15.8682344 ], [ 80.9923174, 15.8687496 ], [ 80.9926257, 15.8691764 ], [ 80.9932496, 15.8693934 ], [ 80.9940483, 15.8700381 ], [ 80.9940483, 15.8702957 ], [ 80.9943144, 15.8702957 ], [ 80.9943144, 15.8705533 ], [ 80.993782, 15.870424 ], [ 80.9932496, 15.8699088 ], [ 80.9921847, 15.8691358 ], [ 80.9911201, 15.8683628 ], [ 80.9903214, 15.868105 ], [ 80.9889905, 15.8668167 ], [ 80.9880583, 15.866173 ], [ 80.9879258, 15.8656576 ], [ 80.9865949, 15.8655283 ], [ 80.9852639, 15.8647551 ], [ 80.9847315, 15.8642399 ], [ 80.9837994, 15.8635962 ], [ 80.9831345, 15.8626939 ], [ 80.9826021, 15.8624361 ], [ 80.9815374, 15.8614055 ], [ 80.981005, 15.8611477 ], [ 80.9796743, 15.8598593 ], [ 80.9791419, 15.8596017 ], [ 80.9776775, 15.8581847 ], [ 80.9771453, 15.8574117 ], [ 80.9767465, 15.8567672 ], [ 80.9762141, 15.856767 ], [ 80.9756816, 15.8565094 ], [ 80.9748833, 15.8557362 ], [ 80.9742175, 15.8553503 ], [ 80.973685, 15.8545771 ], [ 80.9735526, 15.8540619 ], [ 80.9730201, 15.8541902 ], [ 80.9723543, 15.8532887 ], [ 80.971556, 15.8525157 ], [ 80.971556, 15.8520003 ], [ 80.9711572, 15.8517427 ], [ 80.9711572, 15.8522579 ], [ 80.9699589, 15.8514849 ], [ 80.9700925, 15.8509695 ], [ 80.9695603, 15.8508402 ], [ 80.9680961, 15.8494233 ], [ 80.9679634, 15.848908 ], [ 80.967431, 15.849294 ], [ 80.9668986, 15.8494231 ], [ 80.9667654, 15.8478772 ], [ 80.9666329, 15.847748 ], [ 80.9661005, 15.8476194 ], [ 80.9661005, 15.8473618 ], [ 80.966899, 15.8473618 ], [ 80.9688952, 15.845301 ], [ 80.9695613, 15.8437551 ], [ 80.9700937, 15.8437551 ], [ 80.9700937, 15.8434975 ], [ 80.9676983, 15.8425949 ], [ 80.9666338, 15.8418219 ], [ 80.9650368, 15.8413063 ], [ 80.9634399, 15.8406624 ], [ 80.9634401, 15.8404047 ], [ 80.9639723, 15.8404047 ], [ 80.9639723, 15.8401471 ], [ 80.9623755, 15.8395023 ], [ 80.9613108, 15.8393737 ], [ 80.9613108, 15.839889 ], [ 80.960246, 15.8400171 ], [ 80.9591812, 15.8415629 ], [ 80.9578502, 15.8418204 ], [ 80.957389882812507, 15.842098933399607 ], [ 80.9567854, 15.8424647 ], [ 80.9567856, 15.8419494 ], [ 80.955721, 15.8418198 ], [ 80.9554549, 15.8415622 ], [ 80.9551886, 15.8415622 ], [ 80.9535915, 15.8422063 ], [ 80.9535913, 15.8432369 ], [ 80.953325, 15.8432369 ], [ 80.9533252, 15.8427217 ], [ 80.9530591, 15.8427215 ], [ 80.9530589, 15.8432369 ], [ 80.9514619, 15.8431073 ], [ 80.9493324, 15.8437514 ], [ 80.9493322, 15.8445244 ], [ 80.9489325, 15.8442666 ], [ 80.9489327, 15.844009 ], [ 80.9494651, 15.8432362 ], [ 80.9495989, 15.8427207 ], [ 80.9501311, 15.8428493 ], [ 80.9503974, 15.8425917 ], [ 80.9509298, 15.8424635 ], [ 80.9513286, 15.8419481 ], [ 80.9511961, 15.8411753 ], [ 80.9517285, 15.8415614 ], [ 80.9527932, 15.8416909 ], [ 80.9526596, 15.8414333 ], [ 80.9526597, 15.8409179 ], [ 80.9521275, 15.8404025 ], [ 80.951995, 15.8398871 ], [ 80.9514626, 15.8398871 ], [ 80.9513292, 15.8393717 ], [ 80.9510631, 15.8391139 ], [ 80.9509308, 15.8380833 ], [ 80.9503985, 15.8379538 ], [ 80.9501324, 15.8376962 ], [ 80.9488015, 15.8378251 ], [ 80.9488019, 15.8365369 ], [ 80.9482696, 15.8364074 ], [ 80.947604, 15.8349906 ], [ 80.9476042, 15.8344752 ], [ 80.9472963, 15.8335323 ], [ 80.9474719, 15.8334446 ], [ 80.9484025, 15.8349908 ], [ 80.9488021, 15.8360215 ], [ 80.9493343, 15.8360216 ], [ 80.9493343, 15.836537 ], [ 80.9498665, 15.836537 ], [ 80.9502651, 15.8370525 ], [ 80.9503985, 15.8375679 ], [ 80.9511971, 15.8378256 ], [ 80.9515957, 15.8383411 ], [ 80.9517291, 15.8388565 ], [ 80.95306, 15.838599 ], [ 80.9530599, 15.8391144 ], [ 80.9535923, 15.8391144 ], [ 80.9535921, 15.8396298 ], [ 80.9551889, 15.8401454 ], [ 80.9553216, 15.8398878 ], [ 80.9551891, 15.8391148 ], [ 80.9554554, 15.8389855 ], [ 80.9562538, 15.8389857 ], [ 80.9565201, 15.8387281 ], [ 80.9571898828125, 15.83864750712166 ], [ 80.9575847, 15.8386 ], [ 80.9577174, 15.8380848 ], [ 80.9585161, 15.8373119 ], [ 80.9587826, 15.8360237 ], [ 80.9583838, 15.8356367 ], [ 80.9578516, 15.8355081 ], [ 80.9578516, 15.8352505 ], [ 80.9591825, 15.8349931 ], [ 80.9589164, 15.8346062 ], [ 80.9583842, 15.8344777 ], [ 80.9583842, 15.8342201 ], [ 80.9605134, 15.8335758 ], [ 80.9621103, 15.8342207 ], [ 80.9621105, 15.8334477 ], [ 80.9626427, 15.8334478 ], [ 80.9630419, 15.8316442 ], [ 80.9629094, 15.8315149 ], [ 80.9613123, 15.8315148 ], [ 80.9607801, 15.830871 ], [ 80.9613125, 15.830871 ], [ 80.96251, 15.829583 ], [ 80.9627762, 15.8290678 ], [ 80.9627767, 15.8264911 ], [ 80.963043, 15.8257181 ], [ 80.9633091, 15.8254605 ], [ 80.9637091, 15.8244301 ], [ 80.9642413, 15.8243008 ], [ 80.9645076, 15.8240432 ], [ 80.9650398, 15.8240434 ], [ 80.9662789, 15.8250334 ], [ 80.9663704, 15.8252035 ], [ 80.9666365, 15.8252035 ], [ 80.9666365, 15.8249459 ], [ 80.9664611, 15.8248572 ], [ 80.9658383, 15.8240434 ], [ 80.9645076, 15.823528 ], [ 80.9626446, 15.8235276 ], [ 80.9621122, 15.8243004 ], [ 80.9607814, 15.8245578 ], [ 80.9605151, 15.8248155 ], [ 80.9599829, 15.8249447 ], [ 80.9602492, 15.8241717 ], [ 80.959717, 15.8241717 ], [ 80.959717, 15.8233987 ], [ 80.9591848, 15.8233987 ], [ 80.959185, 15.8226257 ], [ 80.9583864, 15.8227538 ], [ 80.9575881, 15.8222384 ], [ 80.9571898828125, 15.822238362587637 ], [ 80.9571898828125, 15.822238362587639 ], [ 80.9565237, 15.8222383 ], [ 80.9557251, 15.8219805 ], [ 80.954927, 15.8214649 ], [ 80.9539952, 15.8205633 ], [ 80.953924517486058, 15.8204125 ], [ 80.9533307, 15.8191456 ], [ 80.9527983, 15.8190171 ], [ 80.9523989, 15.8179865 ], [ 80.9514681, 15.817084 ], [ 80.9505363, 15.8164401 ], [ 80.9500045, 15.8151517 ], [ 80.9502712, 15.8128329 ], [ 80.9506711, 15.8118022 ], [ 80.9520016, 15.8121887 ], [ 80.9522676, 15.8124464 ], [ 80.955195, 15.8123186 ], [ 80.9554611, 15.8130916 ], [ 80.9562594, 15.8133494 ], [ 80.9565257, 15.812319 ], [ 80.957389882812507, 15.812151786989617 ], [ 80.9578565, 15.8120615 ], [ 80.9578567, 15.8110309 ], [ 80.9591872, 15.8107735 ], [ 80.9595864, 15.8092277 ], [ 80.9598525, 15.8089701 ], [ 80.9597202, 15.8079393 ], [ 80.9591878, 15.8079393 ], [ 80.9589219, 15.8071663 ], [ 80.9594541, 15.807037 ], [ 80.9597204, 15.8067794 ], [ 80.9605187, 15.8066512 ], [ 80.9609175, 15.8058784 ], [ 80.9608758, 15.8049353 ], [ 80.9613175, 15.8051054 ], [ 80.9619824, 15.8043326 ], [ 80.962116, 15.8038174 ], [ 80.9613176, 15.8039455 ], [ 80.9606938, 15.804759 ], [ 80.9597208, 15.8047181 ], [ 80.9589223, 15.8052334 ], [ 80.9575917, 15.8053624 ], [ 80.9575915, 15.8058777 ], [ 80.9571898828125, 15.805960856403919 ], [ 80.9557287, 15.8062634 ], [ 80.9554624, 15.806521 ], [ 80.9504057, 15.8080657 ], [ 80.9501396, 15.8083233 ], [ 80.9488089, 15.8084524 ], [ 80.9488089, 15.8089676 ], [ 80.9458813, 15.8096106 ], [ 80.9434859, 15.8106406 ], [ 80.942421, 15.8114133 ], [ 80.9418888, 15.8114133 ], [ 80.9416227, 15.8116709 ], [ 80.940292, 15.8119281 ], [ 80.9397595, 15.8124433 ], [ 80.9386949, 15.8128298 ], [ 80.9384284, 15.8138604 ], [ 80.9378962, 15.8139886 ], [ 80.9376299, 15.8142462 ], [ 80.9365653, 15.8146329 ], [ 80.9365651, 15.8151481 ], [ 80.9349682, 15.8154053 ], [ 80.934968, 15.8159207 ], [ 80.9344358, 15.8160489 ], [ 80.9335036, 15.8166932 ], [ 80.933371, 15.8172084 ], [ 80.9315078, 15.8177232 ], [ 80.9315076, 15.8182384 ], [ 80.9307091, 15.8183666 ], [ 80.9300432, 15.8187535 ], [ 80.9296443, 15.819397 ], [ 80.9288457, 15.8196542 ], [ 80.927980207657967, 15.8202125 ], [ 80.9272485, 15.8206845 ], [ 80.9265825, 15.8213288 ], [ 80.9261835, 15.8219723 ], [ 80.9248527, 15.8223588 ], [ 80.9248524, 15.8231318 ], [ 80.9243199, 15.82326 ], [ 80.9231215, 15.8244195 ], [ 80.9227223, 15.8253207 ], [ 80.9219238, 15.8255781 ], [ 80.9212578, 15.82648 ], [ 80.9205925, 15.8271235 ], [ 80.9199265, 15.8275102 ], [ 80.9197938, 15.8280254 ], [ 80.9192614, 15.8280252 ], [ 80.9192612, 15.8285406 ], [ 80.9181965, 15.8287979 ], [ 80.9180627, 15.8293131 ], [ 80.9168652, 15.8299563 ], [ 80.916333, 15.8300853 ], [ 80.9163328, 15.8306007 ], [ 80.9147356, 15.8312437 ], [ 80.912872, 15.8322736 ], [ 80.9126057, 15.8325312 ], [ 80.9094112, 15.8338181 ], [ 80.9075477, 15.8351056 ], [ 80.9062166, 15.8356204 ], [ 80.9054177, 15.836393 ], [ 80.9043529, 15.8367795 ], [ 80.9043527, 15.8372947 ], [ 80.9038202, 15.8374229 ], [ 80.9026218, 15.838067 ], [ 80.9022226, 15.8387105 ], [ 80.9011576, 15.839483 ], [ 80.900982, 15.8395236 ], [ 80.9008917, 15.8390969 ], [ 80.9030219, 15.8371649 ], [ 80.9035543, 15.8370368 ], [ 80.9038208, 15.8365215 ], [ 80.9024899, 15.8366493 ], [ 80.9022238, 15.8365208 ], [ 80.9024895, 15.837294 ], [ 80.9014247, 15.8376796 ], [ 80.9008925, 15.8375508 ], [ 80.9010248, 15.8383239 ], [ 80.9006256, 15.8389674 ], [ 80.8995609, 15.8390961 ], [ 80.8994277, 15.8383231 ], [ 80.8996942, 15.8378081 ], [ 80.9004931, 15.8370354 ], [ 80.9010257, 15.8362626 ], [ 80.9011595, 15.8357474 ], [ 80.8998286, 15.8361328 ], [ 80.898896, 15.8370347 ], [ 80.898097, 15.8383225 ], [ 80.8980966, 15.8388379 ], [ 80.8974309, 15.8403834 ], [ 80.8979631, 15.8407697 ], [ 80.8992941, 15.8405127 ], [ 80.9003591, 15.8397402 ], [ 80.9007998, 15.8396998 ], [ 80.9007577, 15.8401273 ], [ 80.9003587, 15.8405132 ], [ 80.8982287, 15.8418005 ], [ 80.8976963, 15.8419296 ], [ 80.8976959, 15.8427024 ], [ 80.8971635, 15.8428306 ], [ 80.896231, 15.8437325 ], [ 80.895698, 15.8450205 ], [ 80.8954317, 15.8452779 ], [ 80.8938322, 15.849915 ], [ 80.8938314, 15.8514609 ], [ 80.8935649, 15.8522337 ], [ 80.8940941, 15.8581602 ], [ 80.8948913, 15.860737 ], [ 80.8951563, 15.8633136 ], [ 80.8964848, 15.8682097 ], [ 80.8839717, 15.8707799 ], [ 80.8831741, 15.8692337 ], [ 80.8826419, 15.8687181 ], [ 80.8825099, 15.8676873 ], [ 80.8819775, 15.8676871 ], [ 80.8817124, 15.8658833 ], [ 80.8811799, 15.8658831 ], [ 80.8809146, 15.8643369 ], [ 80.8803822, 15.8643367 ], [ 80.8799834, 15.8627905 ], [ 80.8791852, 15.8620171 ], [ 80.8789195, 15.8612439 ], [ 80.8786536, 15.8609861 ], [ 80.8779896, 15.8591823 ], [ 80.8774572, 15.8591819 ], [ 80.8773242, 15.8584089 ], [ 80.8767921, 15.8576357 ], [ 80.8761282, 15.8560893 ], [ 80.8755957, 15.8560889 ], [ 80.8754625, 15.8555737 ], [ 80.8751966, 15.8553157 ], [ 80.8747984, 15.8542849 ], [ 80.8742659, 15.8542847 ], [ 80.873867, 15.8529961 ], [ 80.8733349, 15.8524805 ], [ 80.8728033, 15.8514495 ], [ 80.8722712, 15.8509339 ], [ 80.8716073, 15.8493877 ], [ 80.8710749, 15.8492581 ], [ 80.8704098, 15.8480987 ], [ 80.8702775, 15.8475833 ], [ 80.8697451, 15.847583 ], [ 80.869612, 15.84681 ], [ 80.8692136, 15.8461651 ], [ 80.8686814, 15.8460364 ], [ 80.8682826, 15.8447478 ], [ 80.8677505, 15.8442322 ], [ 80.8664219, 15.840882 ], [ 80.8656243, 15.8395932 ], [ 80.8653582, 15.8393354 ], [ 80.8648267, 15.8380468 ], [ 80.8645608, 15.837789 ], [ 80.8640295, 15.8362426 ], [ 80.8637636, 15.8359848 ], [ 80.8632323, 15.8344386 ], [ 80.8627003, 15.8339228 ], [ 80.8621688, 15.8326342 ], [ 80.8619029, 15.8323764 ], [ 80.8613716, 15.8308302 ], [ 80.8608398, 15.8300568 ], [ 80.8607076, 15.8292838 ], [ 80.8601754, 15.8292834 ], [ 80.8597768, 15.8277372 ], [ 80.8596443, 15.8276079 ], [ 80.859275, 15.827518593517475 ], [ 80.859275, 15.827518593517473 ], [ 80.8591121, 15.8274792 ], [ 80.8589791, 15.8267062 ], [ 80.8584474, 15.8259328 ], [ 80.8580496, 15.8243866 ], [ 80.8575173, 15.8243862 ], [ 80.8572525, 15.8225826 ], [ 80.8567201, 15.8225822 ], [ 80.8563215, 15.821036 ], [ 80.8560556, 15.8207782 ], [ 80.8557904, 15.8194898 ], [ 80.8555245, 15.8192318 ], [ 80.8544623, 15.8158816 ], [ 80.8541964, 15.8156238 ], [ 80.8539312, 15.8143354 ], [ 80.8536651, 15.8140776 ], [ 80.8536657, 15.8133046 ], [ 80.8531352, 15.8109854 ], [ 80.8528693, 15.8107274 ], [ 80.8520768, 15.8024819 ], [ 80.8512798, 15.8006779 ], [ 80.8510138, 15.8004199 ], [ 80.8507485, 15.7993891 ], [ 80.8504826, 15.7991313 ], [ 80.8506166, 15.7986161 ], [ 80.8500843, 15.7986157 ], [ 80.8498194, 15.7970697 ], [ 80.8492871, 15.7970693 ], [ 80.8488885, 15.7955231 ], [ 80.8486228, 15.7952653 ], [ 80.8482251, 15.7937191 ], [ 80.8476929, 15.7937187 ], [ 80.8474281, 15.7919149 ], [ 80.8468961, 15.7919145 ], [ 80.8464973, 15.7906259 ], [ 80.8459656, 15.7898525 ], [ 80.8458341, 15.7885641 ], [ 80.8453019, 15.7885637 ], [ 80.8449033, 15.7872753 ], [ 80.8446374, 15.7870173 ], [ 80.8441065, 15.7854711 ], [ 80.8438405, 15.7852133 ], [ 80.8431768, 15.7837953 ], [ 80.8426447, 15.7836664 ], [ 80.8425117, 15.783151 ], [ 80.8422458, 15.7828932 ], [ 80.8422461, 15.782378 ], [ 80.8414487, 15.7813466 ], [ 80.8411832, 15.7805736 ], [ 80.8409173, 15.7803156 ], [ 80.8407857, 15.7790274 ], [ 80.8402535, 15.779027 ], [ 80.8403864, 15.7787694 ], [ 80.8401212, 15.7774808 ], [ 80.8395899, 15.7764498 ], [ 80.8390602, 15.7733576 ], [ 80.8387942, 15.7730998 ], [ 80.8385302, 15.7705229 ], [ 80.8379987, 15.7697496 ], [ 80.8374678, 15.7682033 ], [ 80.836996, 15.7665375 ], [ 80.8357596, 15.762828 ], [ 80.8347415, 15.7592583 ], [ 80.8332142, 15.7570885 ], [ 80.8319051, 15.7536588 ], [ 80.8308869, 15.749879 ], [ 80.8300142, 15.7475691 ], [ 80.8293596, 15.7458191 ], [ 80.8282687, 15.7451892 ], [ 80.8254324, 15.7453292 ], [ 80.822596, 15.7444192 ], [ 80.8201233, 15.7432292 ], [ 80.8174324, 15.7437892 ], [ 80.8162687, 15.7437892 ], [ 80.8151051, 15.7430892 ], [ 80.8144506, 15.7444192 ], [ 80.8135051, 15.7466591 ], [ 80.8131415, 15.749319 ], [ 80.8124869, 15.7537988 ], [ 80.8121233, 15.7570885 ], [ 80.8116142, 15.7604482 ], [ 80.8111778, 15.7634579 ], [ 80.8096506, 15.7661176 ], [ 80.8080506, 15.7691272 ], [ 80.8071051, 15.770457 ], [ 80.8061597, 15.7740264 ], [ 80.8057233, 15.7769659 ], [ 80.8047779, 15.7801153 ], [ 80.8041233, 15.781795 ], [ 80.804196, 15.7838945 ], [ 80.8063051, 15.7857841 ], [ 80.8069597, 15.7870438 ], [ 80.8072506, 15.7896332 ], [ 80.8068142, 15.7913828 ], [ 80.8075415, 15.7920826 ], [ 80.8084142, 15.7931323 ], [ 80.8087778, 15.794392 ], [ 80.808196, 15.7985908 ], [ 80.8079779, 15.8024397 ], [ 80.8085597, 15.8043291 ], [ 80.8096506, 15.8060086 ], [ 80.8095778, 15.8090176 ], [ 80.8101597, 15.8114667 ], [ 80.8116869, 15.8126563 ], [ 80.812196, 15.8154553 ], [ 80.8116869, 15.8167148 ], [ 80.8107415, 15.8200735 ], [ 80.8111778, 15.823852 ], [ 80.8117597, 15.8271406 ], [ 80.8124142, 15.8300094 ], [ 80.8122688, 15.8317586 ], [ 80.810596, 15.8349072 ], [ 80.8075415, 15.8395249 ], [ 80.8037597, 15.8449122 ], [ 80.8008506, 15.8474309 ], [ 80.7934324, 15.8535876 ], [ 80.7895051, 15.8572255 ], [ 80.7862324, 15.8595341 ], [ 80.7839052, 15.8611432 ], [ 80.7825233, 15.8621226 ], [ 80.7815052, 15.8621226 ], [ 80.7813597, 15.8607934 ], [ 80.7824506, 15.8596041 ], [ 80.782887, 15.8587646 ], [ 80.782087, 15.8593942 ], [ 80.7789597, 15.8621226 ], [ 80.7766324, 15.8638715 ], [ 80.7750324, 15.8651308 ], [ 80.7745233, 15.8665299 ], [ 80.7753233, 15.8672994 ], [ 80.7765597, 15.8675792 ], [ 80.7768277, 15.8681195 ], [ 80.776487, 15.8689784 ], [ 80.774887, 15.8717066 ], [ 80.7738688, 15.8748545 ], [ 80.7731415, 15.8772329 ], [ 80.7723415, 15.8783522 ], [ 80.7711052, 15.8791217 ], [ 80.7701597, 15.8803108 ], [ 80.7705961, 15.8820596 ], [ 80.7716143, 15.884298 ], [ 80.7730688, 15.8889846 ], [ 80.7709597, 15.8854172 ], [ 80.7689234, 15.8803808 ], [ 80.7681961, 15.8754142 ], [ 80.7679052, 15.872686 ], [ 80.7687779, 15.8705174 ], [ 80.7712506, 15.8691183 ], [ 80.7728506, 15.8683488 ], [ 80.7729961, 15.8673694 ], [ 80.7720374, 15.8670838 ], [ 80.7715082, 15.8642492 ], [ 80.7683133, 15.8646317 ], [ 80.7677811, 15.8645028 ], [ 80.7677815, 15.8642452 ], [ 80.7685807, 15.8636015 ], [ 80.7691133, 15.8633444 ], [ 80.7707102, 15.8636037 ], [ 80.7709761, 15.8638617 ], [ 80.7715083, 15.8639916 ], [ 80.771243, 15.8632182 ], [ 80.7701787, 15.8628302 ], [ 80.7691139, 15.862829 ], [ 80.768315, 15.8630859 ], [ 80.7680487, 15.8633433 ], [ 80.7664511, 15.8637285 ], [ 80.7663169, 15.8642435 ], [ 80.766184, 15.8643718 ], [ 80.7653853, 15.8645002 ], [ 80.7653847, 15.8650156 ], [ 80.764586, 15.8651431 ], [ 80.7637867, 15.8656574 ], [ 80.762988, 15.8657859 ], [ 80.7628538, 15.866301 ], [ 80.7616558, 15.8669434 ], [ 80.7592585, 15.8682289 ], [ 80.7581933, 15.8684854 ], [ 80.7576603, 15.8690003 ], [ 80.7563292, 15.869128 ], [ 80.7563284, 15.8696432 ], [ 80.7544647, 15.8698988 ], [ 80.7544641, 15.8704142 ], [ 80.7528665, 15.8707984 ], [ 80.7526, 15.8710556 ], [ 80.7512685, 15.8713119 ], [ 80.751002, 15.8715691 ], [ 80.7496705, 15.872083 ], [ 80.7494038, 15.8723403 ], [ 80.7475399, 15.8728534 ], [ 80.7472733, 15.8731108 ], [ 80.7459419, 15.8733669 ], [ 80.7456754, 15.8736241 ], [ 80.744078, 15.8737515 ], [ 80.7440774, 15.8742669 ], [ 80.7422139, 15.8742647 ], [ 80.7422133, 15.8747801 ], [ 80.7406159, 15.8749065 ], [ 80.7371538, 15.875933 ], [ 80.7352901, 15.8761883 ], [ 80.7350234, 15.8764455 ], [ 80.7310293, 15.8772136 ], [ 80.7299644, 15.8772123 ], [ 80.7286329, 15.8774682 ], [ 80.728367, 15.8773395 ], [ 80.7283663, 15.8778549 ], [ 80.7265031, 15.8775948 ], [ 80.7265025, 15.8781102 ], [ 80.7251714, 15.8781085 ], [ 80.7251722, 15.8775931 ], [ 80.7246392, 15.8779785 ], [ 80.7214443, 15.8782321 ], [ 80.7211776, 15.8784894 ], [ 80.7158524, 15.8792554 ], [ 80.7105273, 15.8797636 ], [ 80.7068004, 15.8797587 ], [ 80.6998777, 15.8805221 ], [ 80.694553, 15.8807723 ], [ 80.6908263, 15.8805094 ], [ 80.6900269, 15.8810235 ], [ 80.6896265, 15.88141 ], [ 80.6890921, 15.8826975 ], [ 80.6886927, 15.8830828 ], [ 80.6873608, 15.8835962 ], [ 80.6870939, 15.8839829 ], [ 80.6884253, 15.8838555 ], [ 80.6889573, 15.8841138 ], [ 80.689756, 15.884115 ], [ 80.690288, 15.8843733 ], [ 80.6913529, 15.8843748 ], [ 80.6921508, 15.8848914 ], [ 80.6969424, 15.8851558 ], [ 80.6982731, 15.8854153 ], [ 80.6985396, 15.8851581 ], [ 80.700137, 15.8851601 ], [ 80.7006698, 15.8849033 ], [ 80.7020009, 15.8849052 ], [ 80.7035972, 15.8855519 ], [ 80.7038651, 15.8845217 ], [ 80.7046636, 15.8846512 ], [ 80.705461, 15.8854251 ], [ 80.7062593, 15.8856839 ], [ 80.7073243, 15.885557 ], [ 80.7073251, 15.8850416 ], [ 80.7075916, 15.8849127 ], [ 80.7094555, 15.8846576 ], [ 80.7099877, 15.8847876 ], [ 80.709987, 15.885303 ], [ 80.7107853, 15.8855616 ], [ 80.7110529, 15.8845313 ], [ 80.7115855, 15.8845321 ], [ 80.7118505, 15.8853055 ], [ 80.7123831, 15.8851768 ], [ 80.7126498, 15.8849195 ], [ 80.7134485, 15.8849207 ], [ 80.7137142, 15.8851787 ], [ 80.7142466, 15.8851794 ], [ 80.7147798, 15.8846648 ], [ 80.7171765, 15.8841526 ], [ 80.7177087, 15.8844109 ], [ 80.7179748, 15.8844113 ], [ 80.7193067, 15.8838976 ], [ 80.719839, 15.8840276 ], [ 80.7198397, 15.8835124 ], [ 80.7211708, 15.8835141 ], [ 80.7214381, 15.8827415 ], [ 80.7225035, 15.8823559 ], [ 80.7233022, 15.8823569 ], [ 80.7249002, 15.8818437 ], [ 80.7275619, 15.8821048 ], [ 80.7283598, 15.8826209 ], [ 80.7286261, 15.8826213 ], [ 80.7288926, 15.8823641 ], [ 80.7334188, 15.8821119 ], [ 80.7339516, 15.8818549 ], [ 80.7350164, 15.8818562 ], [ 80.7355494, 15.8814709 ], [ 80.7356817, 15.8817286 ], [ 80.7356809, 15.8822441 ], [ 80.7347492, 15.8826289 ], [ 80.7346154, 15.8827579 ], [ 80.7347482, 15.8832735 ], [ 80.7339501, 15.8830148 ], [ 80.7339493, 15.8835302 ], [ 80.733683, 15.8835298 ], [ 80.7336838, 15.8830146 ], [ 80.7270276, 15.8835215 ], [ 80.727027, 15.8840369 ], [ 80.7251635, 15.8839052 ], [ 80.7214358, 15.8844157 ], [ 80.7198371, 15.8854442 ], [ 80.7166416, 15.8859554 ], [ 80.716375, 15.8862127 ], [ 80.711849, 15.8864644 ], [ 80.7115829, 15.8863357 ], [ 80.7115821, 15.8868509 ], [ 80.7075878, 15.8874894 ], [ 80.7070546, 15.8880038 ], [ 80.704924, 15.8885162 ], [ 80.7011966, 15.8887689 ], [ 80.7006649, 15.8882527 ], [ 80.7003986, 15.8882524 ], [ 80.7001321, 15.8885096 ], [ 80.6985349, 15.8883792 ], [ 80.6984039, 15.8865754 ], [ 80.6982716, 15.8864459 ], [ 80.6948112, 15.886055 ], [ 80.6948086, 15.8878585 ], [ 80.6934791, 15.8866969 ], [ 80.6916162, 15.8863081 ], [ 80.6914833, 15.8857927 ], [ 80.6910849, 15.8855344 ], [ 80.6910834, 15.886565 ], [ 80.6897524, 15.8864338 ], [ 80.689619, 15.8863053 ], [ 80.6892215, 15.8854024 ], [ 80.6865593, 15.8853987 ], [ 80.6860272, 15.8851403 ], [ 80.6841635, 15.8852667 ], [ 80.6840291, 15.8857819 ], [ 80.6838963, 15.8859101 ], [ 80.6807001, 15.886936 ], [ 80.6804334, 15.8871932 ], [ 80.6799008, 15.8873217 ], [ 80.6799, 15.8878369 ], [ 80.6814973, 15.8878394 ], [ 80.6829586, 15.8893875 ], [ 80.6830906, 15.8904183 ], [ 80.6836224, 15.890805 ], [ 80.6846872, 15.8909358 ], [ 80.6849514, 15.8922246 ], [ 80.6857505, 15.8919679 ], [ 80.6864143, 15.8927419 ], [ 80.6877428, 15.8945474 ], [ 80.6878755, 15.895063 ], [ 80.6886738, 15.8953217 ], [ 80.688673, 15.8958369 ], [ 80.6892055, 15.8958377 ], [ 80.6894702, 15.8968687 ], [ 80.6900021, 15.8972556 ], [ 80.6905343, 15.8973856 ], [ 80.6910629, 15.8999628 ], [ 80.6926602, 15.9000934 ], [ 80.6934581, 15.9006099 ], [ 80.6942567, 15.9007403 ], [ 80.6946547, 15.9012561 ], [ 80.6949199, 15.9020295 ], [ 80.6954515, 15.9025457 ], [ 80.6957575, 15.9040032 ], [ 80.6953166, 15.9040913 ], [ 80.6946532, 15.9022867 ], [ 80.6941219, 15.9015132 ], [ 80.6937235, 15.9011255 ], [ 80.6926594, 15.9006088 ], [ 80.6918607, 15.9006077 ], [ 80.6894653, 15.9000889 ], [ 80.6891994, 15.8998309 ], [ 80.6870699, 15.8995702 ], [ 80.6852066, 15.8993098 ], [ 80.682278, 15.8993055 ], [ 80.6820115, 15.8994344 ], [ 80.6820127, 15.8986615 ], [ 80.6814805, 15.8985313 ], [ 80.681347, 15.8984028 ], [ 80.6810824, 15.8973718 ], [ 80.6804179, 15.896984 ], [ 80.6793531, 15.8969823 ], [ 80.678821, 15.8967239 ], [ 80.6764247, 15.8968496 ], [ 80.6764238, 15.897365 ], [ 80.6758914, 15.8973641 ], [ 80.6760231, 15.8978796 ], [ 80.675888, 15.8994253 ], [ 80.6748237, 15.8990367 ], [ 80.6726939, 15.8990335 ], [ 80.6721605, 15.8995481 ], [ 80.6718942, 15.8995476 ], [ 80.6717609, 15.899419 ], [ 80.67163, 15.8983882 ], [ 80.6700314, 15.8990295 ], [ 80.6697651, 15.8990291 ], [ 80.6694994, 15.898771 ], [ 80.6684344, 15.8987695 ], [ 80.667636, 15.8985105 ], [ 80.6657725, 15.8985077 ], [ 80.6633777, 15.8977311 ], [ 80.6625789, 15.8977298 ], [ 80.6612482, 15.8974701 ], [ 80.660849, 15.8970834 ], [ 80.6607171, 15.8965678 ], [ 80.6601845, 15.8966954 ], [ 80.6600507, 15.8968245 ], [ 80.6600486, 15.8981127 ], [ 80.6603134, 15.8988861 ], [ 80.6605793, 15.8991442 ], [ 80.6607116, 15.8999173 ], [ 80.6603121, 15.8996591 ], [ 80.6600463, 15.8994009 ], [ 80.6599146, 15.8988855 ], [ 80.6593824, 15.8987553 ], [ 80.6589832, 15.8983688 ], [ 80.6588513, 15.8978532 ], [ 80.6580526, 15.8978519 ], [ 80.6581862, 15.8973368 ], [ 80.6584529, 15.8970796 ], [ 80.6584533, 15.896822 ], [ 80.6583208, 15.8966925 ], [ 80.65699, 15.8964327 ], [ 80.6568568, 15.8963041 ], [ 80.6567258, 15.8952733 ], [ 80.6556606, 15.8954 ], [ 80.6555268, 15.8955291 ], [ 80.6556591, 15.8963022 ], [ 80.6519301, 15.8973268 ], [ 80.6519311, 15.8968116 ], [ 80.6513985, 15.8968107 ], [ 80.6513971, 15.8975837 ], [ 80.651131, 15.8975833 ], [ 80.6509991, 15.8965525 ], [ 80.6507334, 15.8962943 ], [ 80.6507338, 15.8960367 ], [ 80.651001, 15.8955219 ], [ 80.6510018, 15.8950065 ], [ 80.6511358, 15.894749 ], [ 80.6506035, 15.894619 ], [ 80.6503378, 15.8943608 ], [ 80.650129065625009, 15.89432692150908 ], [ 80.650086688825667, 15.894320043571454 ], [ 80.649929065625003, 15.894294460644959 ], [ 80.6495393, 15.8942312 ], [ 80.6495406, 15.8934582 ], [ 80.6485669, 15.8931104 ], [ 80.6484767, 15.8929413 ], [ 80.6482108, 15.8926831 ], [ 80.6480354, 15.8925943 ], [ 80.647946, 15.8919097 ], [ 80.6472803, 15.891651 ], [ 80.6471486, 15.8911356 ], [ 80.6466162, 15.8911346 ], [ 80.6463518, 15.8901036 ], [ 80.6458196, 15.8899734 ], [ 80.6451547, 15.8893287 ], [ 80.6447568, 15.8886835 ], [ 80.6438258, 15.8880382 ], [ 80.6431622, 15.887135 ], [ 80.6424969, 15.8867477 ], [ 80.6419662, 15.8857164 ], [ 80.6413019, 15.8853283 ], [ 80.640637, 15.8846835 ], [ 80.6407719, 15.8839108 ], [ 80.6399734, 15.8839095 ], [ 80.6398407, 15.8833939 ], [ 80.6391772, 15.8824907 ], [ 80.6386449, 15.8823614 ], [ 80.6387358, 15.8821915 ], [ 80.639444, 15.8821049 ], [ 80.6398421, 15.8826209 ], [ 80.6399747, 15.8831365 ], [ 80.6402407, 15.8832654 ], [ 80.6407731, 15.8832662 ], [ 80.6410398, 15.8830089 ], [ 80.6445009, 15.8828863 ], [ 80.6445017, 15.8823711 ], [ 80.644768, 15.8823714 ], [ 80.644767, 15.8828868 ], [ 80.6471628, 15.8830191 ], [ 80.6476943, 15.8835353 ], [ 80.6487587, 15.8837946 ], [ 80.6495561, 15.8845689 ], [ 80.649929065625003, 15.884641693606502 ], [ 80.649929065625003, 15.884641693606504 ], [ 80.6508867, 15.8848286 ], [ 80.652218, 15.8847024 ], [ 80.6519505, 15.885475 ], [ 80.6538133, 15.885864 ], [ 80.65408, 15.8856067 ], [ 80.6556774, 15.8856094 ], [ 80.6559432, 15.8858674 ], [ 80.6564756, 15.8858683 ], [ 80.6570076, 15.8861267 ], [ 80.6572737, 15.8861272 ], [ 80.6575404, 15.88587 ], [ 80.658605, 15.8860008 ], [ 80.6586043, 15.8865162 ], [ 80.660468, 15.8863898 ], [ 80.6610014, 15.8858753 ], [ 80.6636634, 15.8858795 ], [ 80.6639294, 15.8861376 ], [ 80.6679233, 15.8857578 ], [ 80.6679241, 15.8852423 ], [ 80.6684565, 15.8852433 ], [ 80.6681894, 15.8857581 ], [ 80.6684555, 15.8858868 ], [ 80.6697868, 15.8857606 ], [ 80.6697876, 15.8852454 ], [ 80.6705867, 15.8849889 ], [ 80.6705876, 15.8844735 ], [ 80.6713858, 15.8847324 ], [ 80.6713867, 15.8842172 ], [ 80.6719191, 15.884218 ], [ 80.6719178, 15.884991 ], [ 80.6737812, 15.8851221 ], [ 80.6745795, 15.8853809 ], [ 80.6772416, 15.8853849 ], [ 80.6777732, 15.885901 ], [ 80.6788375, 15.8862896 ], [ 80.6797713, 15.8847451 ], [ 80.6796398, 15.8839719 ], [ 80.6801722, 15.8839726 ], [ 80.6804402, 15.8829424 ], [ 80.6820388, 15.8820426 ], [ 80.6831036, 15.8821734 ], [ 80.6831051, 15.8811427 ], [ 80.6836373, 15.881272 ], [ 80.6847033, 15.8806298 ], [ 80.6848354, 15.8808876 ], [ 80.6848346, 15.881403 ], [ 80.6847016, 15.8816604 ], [ 80.6860331, 15.8814047 ], [ 80.686032, 15.8821777 ], [ 80.6873635, 15.881922 ], [ 80.687231, 15.8811488 ], [ 80.6865665, 15.880761 ], [ 80.6857687, 15.8802444 ], [ 80.6841718, 15.8799846 ], [ 80.6759191, 15.8799723 ], [ 80.6748547, 15.879713 ], [ 80.6618112, 15.8791777 ], [ 80.6607468, 15.8789184 ], [ 80.6580845, 15.8789142 ], [ 80.652495, 15.87839 ], [ 80.6516969, 15.878131 ], [ 80.649929065625003, 15.877979336853958 ], [ 80.645575, 15.8776058 ], [ 80.6434457, 15.8773446 ], [ 80.6423818, 15.8768277 ], [ 80.6399859, 15.8768237 ], [ 80.6397202, 15.8765655 ], [ 80.6391879, 15.8764363 ], [ 80.6393202, 15.8766943 ], [ 80.6393187, 15.8774671 ], [ 80.6390511, 15.8782397 ], [ 80.6387795, 15.881331 ], [ 80.6385128, 15.8815882 ], [ 80.638554, 15.882015 ], [ 80.6382452, 15.8823607 ], [ 80.6379763, 15.8839061 ], [ 80.6382416, 15.8844219 ], [ 80.638241, 15.8846795 ], [ 80.6375746, 15.8854514 ], [ 80.6381063, 15.8858383 ], [ 80.6386385, 15.8859685 ], [ 80.63864, 15.8851955 ], [ 80.639173, 15.8848095 ], [ 80.6399717, 15.8848109 ], [ 80.6407689, 15.885585 ], [ 80.6413011, 15.8857152 ], [ 80.6413004, 15.8862304 ], [ 80.6426294, 15.8873917 ], [ 80.6431617, 15.8875219 ], [ 80.6432934, 15.8880375 ], [ 80.6435591, 15.8882955 ], [ 80.6436918, 15.888811 ], [ 80.6442242, 15.8888118 ], [ 80.644489, 15.8895852 ], [ 80.6452873, 15.8898441 ], [ 80.6452864, 15.8903595 ], [ 80.6458188, 15.8903605 ], [ 80.6458179, 15.8908757 ], [ 80.6468814, 15.8917787 ], [ 80.6473217, 15.8919965 ], [ 80.6474126, 15.8924242 ], [ 80.6476786, 15.8925531 ], [ 80.6479441, 15.8929403 ], [ 80.64821, 15.8931985 ], [ 80.6483845, 15.8932864 ], [ 80.6484754, 15.8937141 ], [ 80.6479435, 15.8933264 ], [ 80.6452817, 15.8930643 ], [ 80.6447489, 15.8931928 ], [ 80.6443469, 15.8944803 ], [ 80.6435468, 15.895252 ], [ 80.6432798, 15.8957668 ], [ 80.6419462, 15.897053 ], [ 80.6419417, 15.8996294 ], [ 80.6424714, 15.9011762 ], [ 80.6424695, 15.9022068 ], [ 80.6419352, 15.9032365 ], [ 80.6415357, 15.9036218 ], [ 80.6410031, 15.9037502 ], [ 80.6406013, 15.9047802 ], [ 80.6391352, 15.906066 ], [ 80.6388712, 15.9047772 ], [ 80.6394038, 15.9047781 ], [ 80.6400707, 15.9037487 ], [ 80.6399426, 15.901172 ], [ 80.6394104, 15.9010418 ], [ 80.6390112, 15.9006551 ], [ 80.6386141, 15.8996239 ], [ 80.6378158, 15.8994933 ], [ 80.6368846, 15.8988481 ], [ 80.6367542, 15.8975595 ], [ 80.636222, 15.8974294 ], [ 80.6360887, 15.8973007 ], [ 80.635957, 15.8967853 ], [ 80.6332947, 15.8966515 ], [ 80.6327619, 15.8969082 ], [ 80.6324956, 15.8969078 ], [ 80.6322301, 15.8965213 ], [ 80.6327625, 15.8965222 ], [ 80.6327653, 15.8949762 ], [ 80.6346285, 15.895237 ], [ 80.6344954, 15.8949792 ], [ 80.6344968, 15.8942062 ], [ 80.6347644, 15.8934338 ], [ 80.6347667, 15.8921456 ], [ 80.6350335, 15.8918883 ], [ 80.6353011, 15.8911159 ], [ 80.6351704, 15.8900851 ], [ 80.6351711, 15.8895697 ], [ 80.635572, 15.8885398 ], [ 80.6358387, 15.8882826 ], [ 80.635839, 15.888025 ], [ 80.6341104, 15.8872491 ], [ 80.6341095, 15.8877644 ], [ 80.6330458, 15.887118 ], [ 80.6322471, 15.8871167 ], [ 80.6319804, 15.8873739 ], [ 80.6306499, 15.887114 ], [ 80.6301174, 15.8871131 ], [ 80.6293197, 15.8865963 ], [ 80.6279891, 15.8863365 ], [ 80.6277234, 15.8860783 ], [ 80.626925, 15.8858194 ], [ 80.6239967, 15.8858143 ], [ 80.6234646, 15.8855557 ], [ 80.6226661, 15.8855542 ], [ 80.6202711, 15.8850348 ], [ 80.6197391, 15.8847761 ], [ 80.6189405, 15.8847748 ], [ 80.6184085, 15.8845162 ], [ 80.6138833, 15.8842505 ], [ 80.6114879, 15.8839885 ], [ 80.609891, 15.8837281 ], [ 80.6097572, 15.883857 ], [ 80.6096236, 15.8843722 ], [ 80.6112191, 15.8852764 ], [ 80.6165416, 15.8863164 ], [ 80.617073, 15.8868326 ], [ 80.6218627, 15.8881293 ], [ 80.6221284, 15.8883875 ], [ 80.6271861, 15.8886538 ], [ 80.6301122, 15.8899471 ], [ 80.6309099, 15.8904639 ], [ 80.6319746, 15.8905948 ], [ 80.6317069, 15.8913675 ], [ 80.6322395, 15.8913682 ], [ 80.6319725, 15.891754 ], [ 80.6314397, 15.8920106 ], [ 80.6309059, 15.8926544 ], [ 80.6306393, 15.8929114 ], [ 80.6301061, 15.8932966 ], [ 80.6294384, 15.8941977 ], [ 80.629571, 15.8947131 ], [ 80.6290386, 15.8947122 ], [ 80.6291698, 15.8954854 ], [ 80.6286359, 15.8962575 ], [ 80.6282363, 15.8966428 ], [ 80.6277037, 15.8967712 ], [ 80.6281035, 15.8962565 ], [ 80.628104, 15.8959989 ], [ 80.6279715, 15.8958694 ], [ 80.6277052, 15.8958689 ], [ 80.6274386, 15.8961261 ], [ 80.62584, 15.8967679 ], [ 80.625839, 15.8972833 ], [ 80.6239748, 15.8976661 ], [ 80.6234412, 15.8981803 ], [ 80.6231751, 15.89818 ], [ 80.622644, 15.897406 ], [ 80.6221116, 15.8974051 ], [ 80.6218451, 15.897534 ], [ 80.6217139, 15.8962455 ], [ 80.6209162, 15.8957288 ], [ 80.621053, 15.8939256 ], [ 80.6205206, 15.8939246 ], [ 80.6211872, 15.8931528 ], [ 80.6213227, 15.8921223 ], [ 80.6202577, 15.8921206 ], [ 80.619994, 15.8908318 ], [ 80.6194612, 15.8909592 ], [ 80.618664, 15.8901849 ], [ 80.6178659, 15.8899258 ], [ 80.6174667, 15.8895391 ], [ 80.6172025, 15.8885081 ], [ 80.6165382, 15.8881199 ], [ 80.6160058, 15.8881189 ], [ 80.615208, 15.8876024 ], [ 80.6128126, 15.8873404 ], [ 80.6120148, 15.8868237 ], [ 80.6114826, 15.8866942 ], [ 80.6113501, 15.8861788 ], [ 80.6112176, 15.8860492 ], [ 80.6098871, 15.8857893 ], [ 80.6096213, 15.8855311 ], [ 80.6082912, 15.8850135 ], [ 80.6080256, 15.8847553 ], [ 80.6064291, 15.8842371 ], [ 80.6056325, 15.8832049 ], [ 80.6040362, 15.8826869 ], [ 80.6037707, 15.8824287 ], [ 80.602441, 15.8816532 ], [ 80.6019086, 15.8816523 ], [ 80.6012409, 15.8825533 ], [ 80.6012367, 15.8846145 ], [ 80.6011039, 15.8847426 ], [ 80.600305, 15.8848704 ], [ 80.600438, 15.884613 ], [ 80.6004391, 15.8840978 ], [ 80.6001734, 15.8838396 ], [ 80.6001755, 15.882809 ], [ 80.5997778, 15.8821637 ], [ 80.5992452, 15.8822919 ], [ 80.5992467, 15.881519 ], [ 80.5987145, 15.8813888 ], [ 80.5985813, 15.8812601 ], [ 80.5987168, 15.8802297 ], [ 80.5981846, 15.8800995 ], [ 80.5975204, 15.879197 ], [ 80.5965909, 15.878293 ], [ 80.5955261, 15.8782909 ], [ 80.5928655, 15.877513 ], [ 80.5926, 15.877255 ], [ 80.5896728, 15.8767341 ], [ 80.5886089, 15.8762168 ], [ 80.5880765, 15.8762157 ], [ 80.5870128, 15.8756984 ], [ 80.585948, 15.8756963 ], [ 80.581425, 15.8743994 ], [ 80.5798281, 15.8742681 ], [ 80.5798264, 15.8750409 ], [ 80.5792944, 15.8749107 ], [ 80.5791606, 15.8750396 ], [ 80.5791589, 15.8758126 ], [ 80.579026, 15.8759407 ], [ 80.5787599, 15.8759401 ], [ 80.5780952, 15.8752953 ], [ 80.5778306, 15.8745217 ], [ 80.5774324, 15.8742633 ], [ 80.5774307, 15.8750363 ], [ 80.5766321, 15.8750346 ], [ 80.5766331, 15.8745194 ], [ 80.5761916, 15.87443 ], [ 80.5761024, 15.8737455 ], [ 80.5769003, 15.8740046 ], [ 80.5761043, 15.8728432 ], [ 80.5753056, 15.8728417 ], [ 80.5739757, 15.8723238 ], [ 80.5734433, 15.8723227 ], [ 80.5729115, 15.8720639 ], [ 80.5715804, 15.8720613 ], [ 80.5707824, 15.8718022 ], [ 80.5675885, 15.8715381 ], [ 80.5673229, 15.87128 ], [ 80.5658597, 15.8706334 ], [ 80.5657282, 15.8701178 ], [ 80.5643974, 15.8699859 ], [ 80.5636012, 15.8689536 ], [ 80.5617395, 15.868177 ], [ 80.560409, 15.8679165 ], [ 80.5593453, 15.867399 ], [ 80.558813, 15.8673981 ], [ 80.5574836, 15.8666224 ], [ 80.5566857, 15.8663631 ], [ 80.5564201, 15.866105 ], [ 80.5553553, 15.8661027 ], [ 80.5550888, 15.8662314 ], [ 80.5550899, 15.8657162 ], [ 80.554026, 15.865327 ], [ 80.5537603, 15.8650689 ], [ 80.5524305, 15.8645508 ], [ 80.552165, 15.8642926 ], [ 80.5489724, 15.863513 ], [ 80.5481755, 15.8627385 ], [ 80.5468463, 15.8619627 ], [ 80.5460478, 15.8619611 ], [ 80.5452504, 15.861444 ], [ 80.5433876, 15.8611825 ], [ 80.542856, 15.8609237 ], [ 80.5423235, 15.8609226 ], [ 80.5412606, 15.8601475 ], [ 80.5399308, 15.8596293 ], [ 80.539134, 15.8588547 ], [ 80.5386014, 15.8589829 ], [ 80.5386025, 15.8584675 ], [ 80.5354105, 15.8575584 ], [ 80.5340801, 15.8572979 ], [ 80.5338146, 15.8570398 ], [ 80.5314196, 15.8567769 ], [ 80.5306197, 15.8572906 ], [ 80.5279575, 15.8575423 ], [ 80.5274245, 15.8577988 ], [ 80.5267564, 15.8586996 ], [ 80.5267552, 15.859215 ], [ 80.5264878, 15.8597296 ], [ 80.5262181, 15.8612749 ], [ 80.5256832, 15.8623044 ], [ 80.5259446, 15.8643662 ], [ 80.5259405, 15.8661696 ], [ 80.5248684, 15.869259 ], [ 80.5237995, 15.8710602 ], [ 80.5237981, 15.8715756 ], [ 80.5232627, 15.8728625 ], [ 80.5232616, 15.8733779 ], [ 80.5227261, 15.874665 ], [ 80.5227248, 15.8751802 ], [ 80.5219233, 15.8764667 ], [ 80.5219221, 15.8769819 ], [ 80.5216547, 15.8774966 ], [ 80.521113, 15.8813601 ], [ 80.5208456, 15.8818749 ], [ 80.5208439, 15.8826478 ], [ 80.5200391, 15.8852225 ], [ 80.5200378, 15.8857377 ], [ 80.5181639, 15.8901136 ], [ 80.5178909, 15.8929471 ], [ 80.5176235, 15.8934618 ], [ 80.5168169, 15.8968093 ], [ 80.5165494, 15.8973242 ], [ 80.5162795, 15.8988694 ], [ 80.5157452, 15.8996411 ], [ 80.5157439, 15.9001563 ], [ 80.515209, 15.9011858 ], [ 80.5146704, 15.9037609 ], [ 80.5146611, 15.9076256 ], [ 80.5135899, 15.9101998 ], [ 80.5135885, 15.910715 ], [ 80.5127868, 15.9120015 ], [ 80.5127855, 15.9125167 ], [ 80.5119819, 15.9145761 ], [ 80.5114474, 15.9153478 ], [ 80.511178, 15.9166354 ], [ 80.5109112, 15.9168925 ], [ 80.5106386, 15.9194684 ], [ 80.510103, 15.9207553 ], [ 80.509966, 15.9225585 ], [ 80.5094336, 15.9225574 ], [ 80.5094322, 15.9230726 ], [ 80.5099654, 15.9228161 ], [ 80.509563, 15.9238458 ], [ 80.5096929, 15.925392 ], [ 80.5092924, 15.9256488 ], [ 80.5092886, 15.9271947 ], [ 80.5090212, 15.9277093 ], [ 80.5087486, 15.9302852 ], [ 80.508481, 15.9307999 ], [ 80.5082109, 15.9323451 ], [ 80.507272, 15.9354347 ], [ 80.5051391, 15.9364604 ], [ 80.505138, 15.9369756 ], [ 80.504605, 15.9371028 ], [ 80.5043381, 15.9373599 ], [ 80.5035387, 15.9376156 ], [ 80.5032718, 15.9378726 ], [ 80.501939, 15.938385 ], [ 80.5016721, 15.9386418 ], [ 80.5000732, 15.9391535 ], [ 80.4995392, 15.9396675 ], [ 80.4982066, 15.9401797 ], [ 80.4979397, 15.9404368 ], [ 80.496341, 15.9408201 ], [ 80.4963423, 15.9403047 ], [ 80.4982075, 15.9397938 ], [ 80.4982089, 15.9392784 ], [ 80.4998074, 15.9388953 ], [ 80.5000745, 15.9386382 ], [ 80.5016734, 15.9381266 ], [ 80.5024735, 15.9376131 ], [ 80.5032727, 15.9374867 ], [ 80.5032739, 15.9369715 ], [ 80.5048732, 15.9363306 ], [ 80.5054071, 15.9358165 ], [ 80.5068303, 15.9353451 ], [ 80.5067413, 15.9346606 ], [ 80.5070076, 15.9346611 ], [ 80.5076797, 15.9318286 ], [ 80.5079492, 15.9305409 ], [ 80.5082198, 15.9287381 ], [ 80.5082223, 15.9277074 ], [ 80.5084935, 15.925647 ], [ 80.5088947, 15.9251325 ], [ 80.5087655, 15.9233287 ], [ 80.5090323, 15.9230716 ], [ 80.5090348, 15.9220412 ], [ 80.5093024, 15.9215264 ], [ 80.5093049, 15.920496 ], [ 80.5095731, 15.9197235 ], [ 80.5095749, 15.9189507 ], [ 80.5098429, 15.9181782 ], [ 80.5098456, 15.9171478 ], [ 80.5103805, 15.9161183 ], [ 80.5103818, 15.9156031 ], [ 80.5106487, 15.9153461 ], [ 80.5114525, 15.9132867 ], [ 80.5119868, 15.912515 ], [ 80.5119881, 15.9119996 ], [ 80.5125237, 15.9107126 ], [ 80.5125249, 15.9101973 ], [ 80.5133285, 15.908138 ], [ 80.5135954, 15.907881 ], [ 80.5138635, 15.9071087 ], [ 80.5140015, 15.9053055 ], [ 80.5134689, 15.9053041 ], [ 80.5138717, 15.9037592 ], [ 80.5138741, 15.9027286 ], [ 80.5146778, 15.9006693 ], [ 80.5149476, 15.899124 ], [ 80.5154838, 15.8975793 ], [ 80.5165555, 15.8947477 ], [ 80.5165574, 15.8939747 ], [ 80.5168254, 15.8932025 ], [ 80.5168273, 15.8924295 ], [ 80.5170954, 15.891657 ], [ 80.5170971, 15.8908842 ], [ 80.5173653, 15.8901117 ], [ 80.517632, 15.8898547 ], [ 80.5184356, 15.8877954 ], [ 80.518437, 15.8872801 ], [ 80.5189711, 15.8865083 ], [ 80.5200501, 15.8805848 ], [ 80.52032, 15.8790396 ], [ 80.5203224, 15.8780089 ], [ 80.5208573, 15.8769796 ], [ 80.5208584, 15.8764642 ], [ 80.5213939, 15.8751773 ], [ 80.5213952, 15.8746619 ], [ 80.5227346, 15.8710579 ], [ 80.5232695, 15.8700284 ], [ 80.5232706, 15.8695132 ], [ 80.5238061, 15.8682261 ], [ 80.5240765, 15.8664232 ], [ 80.5238193, 15.8625578 ], [ 80.5243547, 15.8612709 ], [ 80.5246252, 15.8594679 ], [ 80.5246269, 15.858695 ], [ 80.525564, 15.8566359 ], [ 80.5226337, 15.8575308 ], [ 80.522367, 15.8577878 ], [ 80.5191716, 15.8582961 ], [ 80.5173071, 15.8588071 ], [ 80.5170404, 15.8590641 ], [ 80.5155337, 15.8591016 ], [ 80.5139356, 15.8596132 ], [ 80.5125122, 15.8603424 ], [ 80.5119792, 15.8605986 ], [ 80.5103577, 15.8607152 ], [ 80.5086075, 15.8614047 ], [ 80.5072759, 15.8616593 ], [ 80.5051446, 15.8624274 ], [ 80.5043453, 15.8626833 ], [ 80.5032799, 15.8629385 ], [ 80.5016815, 15.8634501 ], [ 80.5000832, 15.8639617 ], [ 80.499993, 15.8637924 ], [ 80.5015914, 15.8632807 ], [ 80.5031767, 15.8627562 ], [ 80.5042552, 15.862514 ], [ 80.5050544, 15.8622582 ], [ 80.5071858, 15.8614902 ], [ 80.5085179, 15.8609778 ], [ 80.5103824, 15.8604667 ], [ 80.5117137, 15.8603405 ], [ 80.5119805, 15.8600834 ], [ 80.5138452, 15.859444 ], [ 80.5154441, 15.8586746 ], [ 80.5170416, 15.8585489 ], [ 80.5173084, 15.8582919 ], [ 80.5189064, 15.8579094 ], [ 80.518774, 15.8573938 ], [ 80.5184668, 15.8569655 ], [ 80.519175, 15.8568793 ], [ 80.5191737, 15.8573947 ], [ 80.5194396, 15.8575236 ], [ 80.5205044, 15.8575261 ], [ 80.521571, 15.8567553 ], [ 80.5226354, 15.8568871 ], [ 80.5226365, 15.8563717 ], [ 80.5252996, 15.8558623 ], [ 80.5253007, 15.8553471 ], [ 80.5260992, 15.8553488 ], [ 80.5261005, 15.8548334 ], [ 80.5271657, 15.8545782 ], [ 80.5275657, 15.8540638 ], [ 80.5280595, 15.8526066 ], [ 80.5282353, 15.8525193 ], [ 80.5285033, 15.851747 ], [ 80.5274385, 15.8517446 ], [ 80.5278361, 15.8522607 ], [ 80.5278777, 15.8524299 ], [ 80.5277027, 15.8526465 ], [ 80.5266362, 15.8534172 ], [ 80.5259694, 15.8538026 ], [ 80.5258356, 15.8543176 ], [ 80.5250372, 15.8541866 ], [ 80.5247717, 15.8539283 ], [ 80.521578, 15.8537929 ], [ 80.5215761, 15.8545659 ], [ 80.5221081, 15.8546954 ], [ 80.5223736, 15.8549536 ], [ 80.5245031, 15.8549583 ], [ 80.5247696, 15.8548305 ], [ 80.5246348, 15.8553456 ], [ 80.524502, 15.8554737 ], [ 80.5218395, 15.8557255 ], [ 80.521574, 15.8554671 ], [ 80.5189121, 15.8554612 ], [ 80.5186454, 15.8557183 ], [ 80.5183791, 15.8557177 ], [ 80.5182459, 15.855589 ], [ 80.5178494, 15.854686 ], [ 80.5170514, 15.8544265 ], [ 80.5154544, 15.8544231 ], [ 80.5153205, 15.854552 ], [ 80.5153192, 15.8550672 ], [ 80.5155842, 15.8555831 ], [ 80.5166464, 15.856616 ], [ 80.5170437, 15.8576476 ], [ 80.5165124, 15.8572594 ], [ 80.5149165, 15.8567406 ], [ 80.5146509, 15.8564824 ], [ 80.5133205, 15.8562218 ], [ 80.5125228, 15.8559623 ], [ 80.5117243, 15.8559606 ], [ 80.50986, 15.8563433 ], [ 80.5098607, 15.8560855 ], [ 80.5103939, 15.8556998 ], [ 80.5111928, 15.8555733 ], [ 80.5111939, 15.8550579 ], [ 80.5106619, 15.8549275 ], [ 80.5103963, 15.8546693 ], [ 80.5085345, 15.8541498 ], [ 80.5058734, 15.8538861 ], [ 80.5053415, 15.8536272 ], [ 80.5026802, 15.8534928 ], [ 80.50321, 15.8545246 ], [ 80.5024115, 15.8545227 ], [ 80.5024134, 15.8537498 ], [ 80.5018811, 15.8537485 ], [ 80.5020113, 15.852943 ], [ 80.5016167, 15.8529749 ], [ 80.5005517, 15.853101 ], [ 80.5002862, 15.8528426 ], [ 80.4986891, 15.8528391 ], [ 80.4970938, 15.8521915 ], [ 80.4970943, 15.8519339 ], [ 80.4981592, 15.8519364 ], [ 80.4981584, 15.852194 ], [ 80.5005555, 15.851555 ], [ 80.5008218, 15.8515557 ], [ 80.5020174, 15.8522031 ], [ 80.5024171, 15.8522038 ], [ 80.5026836, 15.8520753 ], [ 80.5050792, 15.8520808 ], [ 80.5064088, 15.852599 ], [ 80.508272, 15.8526034 ], [ 80.5085375, 15.8528615 ], [ 80.5109318, 15.8533822 ], [ 80.5127951, 15.8533864 ], [ 80.5133266, 15.8537746 ], [ 80.5135946, 15.8530022 ], [ 80.5141272, 15.8528742 ], [ 80.5165224, 15.8530088 ], [ 80.5158609, 15.8512038 ], [ 80.5157286, 15.8510742 ], [ 80.5151962, 15.851073 ], [ 80.5149297, 15.8512017 ], [ 80.514931, 15.8506863 ], [ 80.5154632, 15.8506877 ], [ 80.5155989, 15.8493996 ], [ 80.515334, 15.8488837 ], [ 80.5153364, 15.8478532 ], [ 80.5154706, 15.8475958 ], [ 80.5149384, 15.8475947 ], [ 80.5149401, 15.8468217 ], [ 80.5144079, 15.8468205 ], [ 80.5144084, 15.8465629 ], [ 80.5149408, 15.8465641 ], [ 80.5150741, 15.8463066 ], [ 80.5149433, 15.8455334 ], [ 80.5176037, 15.8460547 ], [ 80.5176031, 15.8463123 ], [ 80.5165377, 15.8465677 ], [ 80.5164029, 15.8470827 ], [ 80.5161363, 15.8473397 ], [ 80.5158683, 15.848112 ], [ 80.5159987, 15.8494006 ], [ 80.5170643, 15.849016 ], [ 80.5175967, 15.8490171 ], [ 80.5186594, 15.8497926 ], [ 80.5199905, 15.8496671 ], [ 80.5198588, 15.8488939 ], [ 80.5202623, 15.8473488 ], [ 80.5197299, 15.8473477 ], [ 80.519731, 15.8468324 ], [ 80.5186672, 15.8465724 ], [ 80.5186677, 15.8463148 ], [ 80.5223918, 15.8472242 ], [ 80.5226573, 15.8474824 ], [ 80.5231894, 15.847613 ], [ 80.5234538, 15.8483864 ], [ 80.5245182, 15.8485172 ], [ 80.5266458, 15.8492947 ], [ 80.5269113, 15.8495529 ], [ 80.5279754, 15.849813 ], [ 80.5290382, 15.8505883 ], [ 80.5295702, 15.8507187 ], [ 80.5298382, 15.8499462 ], [ 80.5306379, 15.8494327 ], [ 80.5306367, 15.8499481 ], [ 80.5309028, 15.8499487 ], [ 80.5309042, 15.8494333 ], [ 80.5319697, 15.8490487 ], [ 80.5351637, 15.8490557 ], [ 80.5378231, 15.8500919 ], [ 80.5383553, 15.8500931 ], [ 80.5396847, 15.8507404 ], [ 80.5392874, 15.849709 ], [ 80.5386233, 15.8493206 ], [ 80.5364957, 15.8485431 ], [ 80.5359633, 15.8485419 ], [ 80.5346337, 15.8480239 ], [ 80.5341015, 15.8480228 ], [ 80.5327717, 15.8475045 ], [ 80.5322394, 15.8475034 ], [ 80.5311759, 15.8469857 ], [ 80.5285154, 15.8464647 ], [ 80.5274521, 15.8459472 ], [ 80.5269197, 15.845946 ], [ 80.5258562, 15.8454284 ], [ 80.5229303, 15.8446489 ], [ 80.5226647, 15.8443908 ], [ 80.519207, 15.8433526 ], [ 80.5181436, 15.8428349 ], [ 80.5176112, 15.8428336 ], [ 80.5144205, 15.8415384 ], [ 80.5141542, 15.8415378 ], [ 80.5138881, 15.841537 ], [ 80.510165, 15.8402405 ], [ 80.5093678, 15.8397234 ], [ 80.5080376, 15.8394628 ], [ 80.5072404, 15.8389457 ], [ 80.5067082, 15.8389443 ], [ 80.5064426, 15.8386862 ], [ 80.5027195, 15.8373894 ], [ 80.5024542, 15.8371313 ], [ 80.4997951, 15.8360944 ], [ 80.4992627, 15.8360933 ], [ 80.4979341, 15.8353172 ], [ 80.4974016, 15.8353159 ], [ 80.4950089, 15.8342798 ], [ 80.4942117, 15.8337627 ], [ 80.4928817, 15.8335019 ], [ 80.4926162, 15.8332437 ], [ 80.4915523, 15.8329835 ], [ 80.4912867, 15.8327253 ], [ 80.4878301, 15.8314289 ], [ 80.4875646, 15.8311706 ], [ 80.4835763, 15.8296153 ], [ 80.4833109, 15.8293569 ], [ 80.4827785, 15.8293558 ], [ 80.4814499, 15.8285796 ], [ 80.4809176, 15.8285784 ], [ 80.4806521, 15.8283201 ], [ 80.4779934, 15.827283 ], [ 80.4766646, 15.826507 ], [ 80.4763992, 15.8262486 ], [ 80.4748037, 15.8257295 ], [ 80.4745383, 15.8254713 ], [ 80.4724111, 15.8246932 ], [ 80.4721458, 15.8244348 ], [ 80.4716133, 15.8244335 ], [ 80.470551, 15.823658 ], [ 80.4676254, 15.822878 ], [ 80.4665636, 15.8218448 ], [ 80.4654998, 15.8215845 ], [ 80.4647028, 15.8210672 ], [ 80.4641705, 15.8210659 ], [ 80.4633741, 15.820291 ], [ 80.4623104, 15.8200307 ], [ 80.4612478, 15.8192551 ], [ 80.4580577, 15.8179589 ], [ 80.457527, 15.8174424 ], [ 80.4546022, 15.8164044 ], [ 80.4543369, 15.8161462 ], [ 80.4527415, 15.8156268 ], [ 80.4522106, 15.8151101 ], [ 80.4508814, 15.8145915 ], [ 80.450616, 15.8143331 ], [ 80.4492868, 15.8138145 ], [ 80.44849, 15.8132972 ], [ 80.4479591, 15.8127807 ], [ 80.4468952, 15.8125203 ], [ 80.4450352, 15.8114849 ], [ 80.4447699, 15.8112265 ], [ 80.4431745, 15.8107072 ], [ 80.4426438, 15.8101906 ], [ 80.4407831, 15.8094129 ], [ 80.4405177, 15.8091545 ], [ 80.4399855, 15.8091532 ], [ 80.4394546, 15.8086365 ], [ 80.4386578, 15.8081192 ], [ 80.4381256, 15.8081177 ], [ 80.4370632, 15.807342 ], [ 80.4362656, 15.8070823 ], [ 80.4360003, 15.806824 ], [ 80.4336146, 15.8063514 ], [ 80.433425, 15.8061402 ], [ 80.4332336, 15.8060058 ], [ 80.4332459, 15.8059799 ], [ 80.4332722, 15.8058626 ], [ 80.4330441, 15.8055356 ], [ 80.432104, 15.805051 ], [ 80.4312174, 15.8042351 ], [ 80.4306852, 15.8042337 ], [ 80.4303481, 15.80389 ], [ 80.4296602, 15.8034581 ], [ 80.4282607, 15.802714 ], [ 80.4274419, 15.8022634 ], [ 80.4264712, 15.8017638 ], [ 80.425513, 15.8012444 ], [ 80.4245395, 15.8006887 ], [ 80.423966350344216, 15.800388851729219 ], [ 80.4226223, 15.7996857 ], [ 80.4219441, 15.7993043 ], [ 80.4199353, 15.7981847 ], [ 80.4195772, 15.7979589 ], [ 80.4178256, 15.7969689 ], [ 80.4170498, 15.796514 ], [ 80.4162851, 15.7960762 ], [ 80.4154362, 15.7956293 ], [ 80.4123903, 15.7938567 ], [ 80.4096376, 15.7923359 ], [ 80.405892, 15.7902317 ], [ 80.4028811, 15.7884564 ], [ 80.4017019, 15.7877457 ], [ 80.3985405, 15.7858544 ], [ 80.3977446, 15.7850792 ], [ 80.3969472, 15.7848193 ], [ 80.3961504, 15.7843018 ], [ 80.3956199, 15.7837851 ], [ 80.3937603, 15.7827493 ], [ 80.3908382, 15.7811954 ], [ 80.3900421, 15.7804201 ], [ 80.3892447, 15.7801602 ], [ 80.3884481, 15.7796428 ], [ 80.3876514, 15.7791253 ], [ 80.3868548, 15.7786076 ], [ 80.3863241, 15.7780909 ], [ 80.385792, 15.7780894 ], [ 80.3849962, 15.7773143 ], [ 80.3834021, 15.7765367 ], [ 80.3826063, 15.7757616 ], [ 80.3812774, 15.7752425 ], [ 80.3807469, 15.7747257 ], [ 80.3788882, 15.7734322 ], [ 80.3783562, 15.7734307 ], [ 80.3775603, 15.7726554 ], [ 80.3764978, 15.7721372 ], [ 80.3754365, 15.7711035 ], [ 80.3746391, 15.7708437 ], [ 80.3741086, 15.7703268 ], [ 80.373577, 15.7701969 ], [ 80.3735785, 15.7696817 ], [ 80.3722494, 15.7692908 ], [ 80.3714537, 15.7685156 ], [ 80.3701258, 15.7677388 ], [ 80.36933, 15.7669637 ], [ 80.3685326, 15.7667036 ], [ 80.3677361, 15.7661861 ], [ 80.3669395, 15.7656685 ], [ 80.3658784, 15.7646348 ], [ 80.365081, 15.7643748 ], [ 80.3637548, 15.7630828 ], [ 80.3629571, 15.762952 ], [ 80.3628253, 15.7624364 ], [ 80.3624279, 15.7620484 ], [ 80.360834, 15.7612706 ], [ 80.3600383, 15.7604954 ], [ 80.3581801, 15.7592018 ], [ 80.3571183, 15.7584256 ], [ 80.3557906, 15.7576488 ], [ 80.3549949, 15.7568735 ], [ 80.3539323, 15.7563551 ], [ 80.3528715, 15.7553215 ], [ 80.3520741, 15.7550614 ], [ 80.3504829, 15.7535109 ], [ 80.3499516, 15.7532516 ], [ 80.349288, 15.7526059 ], [ 80.3488915, 15.7519601 ], [ 80.3480943, 15.7517001 ], [ 80.3476959, 15.751313 ], [ 80.3470342, 15.7504088 ], [ 80.3462366, 15.750278 ], [ 80.3461047, 15.7497622 ], [ 80.3451769, 15.7488573 ], [ 80.3443797, 15.7485972 ], [ 80.3430537, 15.747305 ], [ 80.3425224, 15.7470457 ], [ 80.3411965, 15.7457535 ], [ 80.3403992, 15.7454935 ], [ 80.3393377, 15.7447051 ], [ 80.3382731, 15.7448312 ], [ 80.3382723, 15.7450888 ], [ 80.3396023, 15.7450928 ], [ 80.3396008, 15.7456082 ], [ 80.3401329, 15.7456097 ], [ 80.3410601, 15.7466432 ], [ 80.341192, 15.7471587 ], [ 80.34199, 15.7471612 ], [ 80.3425178, 15.7484509 ], [ 80.3430504, 15.7483234 ], [ 80.3438469, 15.748841 ], [ 80.3443772, 15.7493579 ], [ 80.3449089, 15.7494887 ], [ 80.3451723, 15.7502625 ], [ 80.3462345, 15.7509093 ], [ 80.3467669, 15.7507826 ], [ 80.3472965, 15.7515572 ], [ 80.3451691, 15.7512931 ], [ 80.3450372, 15.7507773 ], [ 80.3443738, 15.7503884 ], [ 80.3433132, 15.7493547 ], [ 80.3393309, 15.7467662 ], [ 80.3386668, 15.7463782 ], [ 80.3385367, 15.745605 ], [ 80.3380045, 15.7456033 ], [ 80.3380062, 15.7450881 ], [ 80.3366753, 15.7453415 ], [ 80.3366736, 15.7458569 ], [ 80.3358752, 15.7459828 ], [ 80.3350746, 15.7467533 ], [ 80.3337431, 15.7471361 ], [ 80.3337414, 15.7476515 ], [ 80.3332094, 15.7476498 ], [ 80.3332077, 15.7481652 ], [ 80.3326753, 15.7482918 ], [ 80.3318747, 15.7490624 ], [ 80.330808, 15.749832 ], [ 80.3302756, 15.7499595 ], [ 80.3301404, 15.7504744 ], [ 80.3297405, 15.7508592 ], [ 80.3289416, 15.7511143 ], [ 80.3286747, 15.7513712 ], [ 80.3281423, 15.7514989 ], [ 80.3281406, 15.7520142 ], [ 80.3270752, 15.7523969 ], [ 80.3261406, 15.7532961 ], [ 80.3261389, 15.7538115 ], [ 80.3254731, 15.7541954 ], [ 80.3249393, 15.7547091 ], [ 80.3234725, 15.7556067 ], [ 80.3225385, 15.7566344 ], [ 80.321471, 15.7576617 ], [ 80.3193376, 15.7592009 ], [ 80.3190714, 15.7591999 ], [ 80.3190722, 15.7589423 ], [ 80.3206742, 15.7572721 ], [ 80.3219146, 15.7567201 ], [ 80.3220074, 15.7563751 ], [ 80.3226736, 15.7558618 ], [ 80.3228087, 15.755347 ], [ 80.3236515, 15.7546337 ], [ 80.3244081, 15.7544621 ], [ 80.3246749, 15.7542052 ], [ 80.3257403, 15.7538225 ], [ 80.3256076, 15.7535645 ], [ 80.3257437, 15.7527919 ], [ 80.3265426, 15.7525368 ], [ 80.3268121, 15.7515071 ], [ 80.328676, 15.7509975 ], [ 80.3286778, 15.7504823 ], [ 80.3292102, 15.7503546 ], [ 80.329477, 15.7500977 ], [ 80.3300094, 15.7499711 ], [ 80.3300111, 15.7494559 ], [ 80.3308114, 15.7488136 ], [ 80.3321429, 15.7484317 ], [ 80.3321453, 15.7476589 ], [ 80.3332115, 15.7470176 ], [ 80.3337441, 15.7468908 ], [ 80.3337458, 15.7463755 ], [ 80.334279, 15.7459902 ], [ 80.3348116, 15.7458635 ], [ 80.3360132, 15.7443213 ], [ 80.3361484, 15.7438065 ], [ 80.3372363, 15.7434496 ], [ 80.3374894, 15.7435866 ], [ 80.3378531, 15.7439215 ], [ 80.337742, 15.7445842 ], [ 80.3384542, 15.7442565 ], [ 80.3376135, 15.743038 ], [ 80.3373483, 15.7427794 ], [ 80.3372173, 15.7422638 ], [ 80.3364194, 15.7422614 ], [ 80.3362875, 15.7417456 ], [ 80.3353598, 15.7408407 ], [ 80.3345623, 15.7407099 ], [ 80.3344303, 15.7401941 ], [ 80.3335027, 15.7392892 ], [ 80.3327052, 15.7391584 ], [ 80.3325734, 15.7386426 ], [ 80.3316458, 15.7377377 ], [ 80.3307163, 15.7370911 ], [ 80.3300546, 15.7361869 ], [ 80.3289922, 15.7356683 ], [ 80.328595, 15.7350234 ], [ 80.3279325, 15.7343769 ], [ 80.3271349, 15.7342461 ], [ 80.3270032, 15.7337303 ], [ 80.3264729, 15.7332134 ], [ 80.3263419, 15.7326976 ], [ 80.3252788, 15.7324368 ], [ 80.325147, 15.731921 ], [ 80.3244846, 15.7312744 ], [ 80.3239529, 15.7311444 ], [ 80.3239546, 15.7306292 ], [ 80.3234232, 15.7304982 ], [ 80.323025, 15.730111 ], [ 80.3228942, 15.7295954 ], [ 80.3223625, 15.7294644 ], [ 80.3218331, 15.7286899 ], [ 80.321169, 15.7283017 ], [ 80.321038, 15.7277861 ], [ 80.3205065, 15.7276551 ], [ 80.3201092, 15.7270102 ], [ 80.3199771, 15.7268806 ], [ 80.3194455, 15.7267505 ], [ 80.3194472, 15.7262353 ], [ 80.3189157, 15.7261043 ], [ 80.3182523, 15.7254585 ], [ 80.3181215, 15.7249429 ], [ 80.3175899, 15.724812 ], [ 80.3163963, 15.7236492 ], [ 80.3162656, 15.7231336 ], [ 80.315468, 15.7230017 ], [ 80.3150707, 15.7223569 ], [ 80.3141433, 15.7214517 ], [ 80.3134791, 15.7210637 ], [ 80.3132149, 15.7205476 ], [ 80.3122873, 15.7196424 ], [ 80.3117558, 15.7195124 ], [ 80.3113599, 15.7184807 ], [ 80.3105636, 15.7179628 ], [ 80.3104328, 15.717447 ], [ 80.3099008, 15.7174455 ], [ 80.3097691, 15.7169297 ], [ 80.3087086, 15.7158959 ], [ 80.3085778, 15.7153801 ], [ 80.3080463, 15.7152491 ], [ 80.307118, 15.714345 ], [ 80.3064565, 15.7134406 ], [ 80.3057925, 15.7130526 ], [ 80.3052631, 15.7122779 ], [ 80.3051323, 15.7117621 ], [ 80.3046009, 15.7116313 ], [ 80.3039375, 15.7109855 ], [ 80.3036732, 15.7104693 ], [ 80.3028781, 15.7096939 ], [ 80.3027473, 15.7091781 ], [ 80.3022153, 15.7091764 ], [ 80.3020836, 15.7086608 ], [ 80.3019515, 15.7085311 ], [ 80.30142, 15.7084009 ], [ 80.301024, 15.7073692 ], [ 80.2999628, 15.7065927 ], [ 80.2991684, 15.7055597 ], [ 80.2990376, 15.7050441 ], [ 80.2982399, 15.7050414 ], [ 80.2981081, 15.7045257 ], [ 80.2974468, 15.7036215 ], [ 80.2969152, 15.7034913 ], [ 80.2967836, 15.7029757 ], [ 80.2962535, 15.7024586 ], [ 80.2961227, 15.701943 ], [ 80.2955912, 15.701812 ], [ 80.2949297, 15.700651 ], [ 80.2938685, 15.6998745 ], [ 80.2933393, 15.6990998 ], [ 80.2932085, 15.6985842 ], [ 80.292677, 15.6984533 ], [ 80.2920148, 15.6975497 ], [ 80.2912197, 15.6967742 ], [ 80.2910889, 15.6962586 ], [ 80.290557, 15.6962569 ], [ 80.2902947, 15.6952253 ], [ 80.2897632, 15.6950944 ], [ 80.289101, 15.6941909 ], [ 80.2889702, 15.6936752 ], [ 80.2884387, 15.6935442 ], [ 80.2880407, 15.6931569 ], [ 80.2876459, 15.692125 ], [ 80.2871138, 15.6921233 ], [ 80.2871157, 15.6916081 ], [ 80.2865837, 15.6916064 ], [ 80.2864521, 15.6910906 ], [ 80.286187, 15.690832 ], [ 80.2860564, 15.6903164 ], [ 80.2855245, 15.6903147 ], [ 80.2853928, 15.689799 ], [ 80.2847315, 15.6888946 ], [ 80.2840675, 15.6885064 ], [ 80.2835383, 15.6877317 ], [ 80.2834077, 15.6872161 ], [ 80.2828762, 15.6870851 ], [ 80.2824782, 15.6866977 ], [ 80.2818178, 15.6855357 ], [ 80.2812864, 15.6854057 ], [ 80.2811548, 15.6848899 ], [ 80.2806256, 15.6841152 ], [ 80.2800955, 15.6835982 ], [ 80.2795682, 15.6823081 ], [ 80.279303, 15.6820498 ], [ 80.2791724, 15.681534 ], [ 80.2786409, 15.681403 ], [ 80.2782429, 15.6810156 ], [ 80.2781123, 15.6805 ], [ 80.2775808, 15.680369 ], [ 80.2770516, 15.6795943 ], [ 80.2762558, 15.6790762 ], [ 80.2752824, 15.6791138 ], [ 80.2754538, 15.6802335 ], [ 80.2759857, 15.6802352 ], [ 80.2761155, 15.6810086 ], [ 80.2766455, 15.6815257 ], [ 80.27664, 15.6830715 ], [ 80.2765068, 15.6833287 ], [ 80.2759747, 15.6833268 ], [ 80.275973, 15.6838422 ], [ 80.2754412, 15.6838404 ], [ 80.2754374, 15.684871 ], [ 80.2743733, 15.6849959 ], [ 80.2741065, 15.6852526 ], [ 80.2719789, 15.6852456 ], [ 80.271712, 15.6855022 ], [ 80.2687844, 15.6861371 ], [ 80.2683803, 15.687424 ], [ 80.2681135, 15.6876806 ], [ 80.267843, 15.6889679 ], [ 80.2674418, 15.6897396 ], [ 80.2669109, 15.6894801 ], [ 80.2669135, 15.6887073 ], [ 80.2671794, 15.6887081 ], [ 80.2675816, 15.6876789 ], [ 80.2677186, 15.6866487 ], [ 80.2682507, 15.6866506 ], [ 80.2686527, 15.6856213 ], [ 80.2693204, 15.6849791 ], [ 80.2719815, 15.6844726 ], [ 80.2735767, 15.6846071 ], [ 80.2737111, 15.6840923 ], [ 80.2738451, 15.6839636 ], [ 80.2749097, 15.6837094 ], [ 80.2755773, 15.6828103 ], [ 80.2755827, 15.6812645 ], [ 80.275186, 15.6807479 ], [ 80.2738577, 15.6803565 ], [ 80.2711989, 15.6802193 ], [ 80.2696079, 15.6789258 ], [ 80.2698764, 15.6781539 ], [ 80.2693452, 15.6780227 ], [ 80.2692121, 15.677894 ], [ 80.2690815, 15.6773783 ], [ 80.26855, 15.6772473 ], [ 80.2677542, 15.6767292 ], [ 80.2664291, 15.6754367 ], [ 80.2658976, 15.6753064 ], [ 80.2658995, 15.6747912 ], [ 80.2645693, 15.674915 ], [ 80.2640381, 15.674785 ], [ 80.2637748, 15.6740112 ], [ 80.2648394, 15.673757 ], [ 80.2649747, 15.6729846 ], [ 80.2641815, 15.6716937 ], [ 80.2640509, 15.6711779 ], [ 80.2635194, 15.6710469 ], [ 80.2625916, 15.6701426 ], [ 80.2621955, 15.6694966 ], [ 80.261664, 15.6693665 ], [ 80.2614038, 15.6678198 ], [ 80.2603401, 15.6678162 ], [ 80.2611424, 15.6665306 ], [ 80.2606105, 15.6665289 ], [ 80.2606124, 15.6660137 ], [ 80.2590188, 15.665493 ], [ 80.2590207, 15.6649776 ], [ 80.259286, 15.6651069 ], [ 80.2598179, 15.6651088 ], [ 80.2600847, 15.6648519 ], [ 80.2611481, 15.6649848 ], [ 80.2608838, 15.6644686 ], [ 80.2619481, 15.6643429 ], [ 80.2622125, 15.6647308 ], [ 80.2623868, 15.664819 ], [ 80.2624758, 15.6655045 ], [ 80.2627417, 15.6655055 ], [ 80.2627443, 15.6647326 ], [ 80.2624794, 15.6644741 ], [ 80.2623044, 15.6643849 ], [ 80.2618207, 15.6626684 ], [ 80.2611455, 15.6618671 ], [ 80.2599666, 15.6606009 ], [ 80.2598388, 15.6593123 ], [ 80.2593074, 15.6591813 ], [ 80.2574531, 15.6572431 ], [ 80.2582503, 15.6573741 ], [ 80.259049, 15.6571192 ], [ 80.2595826, 15.6566058 ], [ 80.2601144, 15.6566075 ], [ 80.26038, 15.6567378 ], [ 80.2602492, 15.6559644 ], [ 80.2598523, 15.6555762 ], [ 80.2590545, 15.6555733 ], [ 80.2585245, 15.6550564 ], [ 80.2563983, 15.6547914 ], [ 80.2561314, 15.6550483 ], [ 80.2555992, 15.6551757 ], [ 80.255461, 15.6564635 ], [ 80.2543938, 15.6574904 ], [ 80.2539906, 15.6587773 ], [ 80.2534584, 15.6589037 ], [ 80.2531915, 15.6591605 ], [ 80.252393, 15.6594153 ], [ 80.2513293, 15.6594117 ], [ 80.2507984, 15.6591522 ], [ 80.2502666, 15.6591505 ], [ 80.2500016, 15.658892 ], [ 80.2489409, 15.6581154 ], [ 80.2484091, 15.6581135 ], [ 80.247748, 15.6569523 ], [ 80.2473511, 15.6565641 ], [ 80.2465538, 15.6564329 ], [ 80.2464223, 15.6559173 ], [ 80.2462902, 15.6557875 ], [ 80.2457589, 15.6556572 ], [ 80.2457608, 15.655142 ], [ 80.2452295, 15.6550109 ], [ 80.2449645, 15.6547523 ], [ 80.2420405, 15.6544847 ], [ 80.2411766, 15.6552044 ], [ 80.2411469, 15.6557291 ], [ 80.2412348, 15.6566722 ], [ 80.2407011, 15.6571857 ], [ 80.2401692, 15.6571838 ], [ 80.2401702, 15.6569262 ], [ 80.2406104, 15.6570154 ], [ 80.2410598, 15.6565832 ], [ 80.2409727, 15.6556408 ], [ 80.2409746, 15.6551256 ], [ 80.2412424, 15.6546111 ], [ 80.2417756, 15.6542261 ], [ 80.2428406, 15.6538438 ], [ 80.2428425, 15.6533286 ], [ 80.244438, 15.6533341 ], [ 80.2443055, 15.6530759 ], [ 80.2443112, 15.6515301 ], [ 80.2441796, 15.6512721 ], [ 80.2449782, 15.6510171 ], [ 80.244844, 15.6512743 ], [ 80.2448411, 15.6520472 ], [ 80.2452365, 15.6530791 ], [ 80.2473643, 15.6529572 ], [ 80.2486952, 15.6525758 ], [ 80.2488287, 15.6523186 ], [ 80.248836, 15.6502575 ], [ 80.2487045, 15.6499993 ], [ 80.248971, 15.649871 ], [ 80.2500345, 15.6498746 ], [ 80.2529557, 15.6509152 ], [ 80.2561445, 15.6514412 ], [ 80.2574722, 15.6519612 ], [ 80.2585329, 15.6527376 ], [ 80.2595966, 15.6527412 ], [ 80.2606565, 15.6537754 ], [ 80.2614533, 15.6540356 ], [ 80.2633098, 15.6553301 ], [ 80.2643722, 15.6557206 ], [ 80.2635818, 15.6536569 ], [ 80.26305, 15.653655 ], [ 80.2629194, 15.6528816 ], [ 80.2625232, 15.6522358 ], [ 80.2619919, 15.6521056 ], [ 80.2618613, 15.6513322 ], [ 80.2608043, 15.6495251 ], [ 80.2606744, 15.6487518 ], [ 80.2601431, 15.6486208 ], [ 80.2600103, 15.6484919 ], [ 80.2596164, 15.6472023 ], [ 80.2590847, 15.6472006 ], [ 80.2585593, 15.6453953 ], [ 80.2580277, 15.6453936 ], [ 80.2577672, 15.6438468 ], [ 80.2572356, 15.6438449 ], [ 80.2567103, 15.6420398 ], [ 80.2561785, 15.6420379 ], [ 80.2560479, 15.6412645 ], [ 80.2549908, 15.6394575 ], [ 80.2548612, 15.6386841 ], [ 80.2543295, 15.6386824 ], [ 80.2536699, 15.6371343 ], [ 80.2534049, 15.6368757 ], [ 80.2528778, 15.6355856 ], [ 80.2518209, 15.6337786 ], [ 80.2515559, 15.6335201 ], [ 80.2510297, 15.6319723 ], [ 80.250765, 15.6317138 ], [ 80.2502378, 15.6304239 ], [ 80.2499729, 15.6301653 ], [ 80.2494467, 15.6286176 ], [ 80.2491819, 15.628359 ], [ 80.2489198, 15.6273277 ], [ 80.2486548, 15.6270691 ], [ 80.2478638, 15.6252628 ], [ 80.2475988, 15.6250043 ], [ 80.2468079, 15.6231982 ], [ 80.2466801, 15.6219096 ], [ 80.2461484, 15.6219077 ], [ 80.2460188, 15.6208767 ], [ 80.24549, 15.620102 ], [ 80.2446999, 15.6180381 ], [ 80.2445712, 15.6170071 ], [ 80.2440394, 15.6170052 ], [ 80.2437803, 15.6152008 ], [ 80.2432486, 15.615199 ], [ 80.2431199, 15.6139104 ], [ 80.2418039, 15.6102988 ], [ 80.2415389, 15.6100402 ], [ 80.2404879, 15.6066873 ], [ 80.2402231, 15.6064288 ], [ 80.2399619, 15.6051396 ], [ 80.239566, 15.6044938 ], [ 80.2393002, 15.6044929 ], [ 80.2389502, 15.6050863 ], [ 80.2392949, 15.6059104 ], [ 80.2395608, 15.6059111 ], [ 80.239558, 15.6066841 ], [ 80.2392921, 15.6066832 ], [ 80.2387661, 15.6051355 ], [ 80.2386366, 15.6041045 ], [ 80.2381078, 15.6033298 ], [ 80.2378447, 15.602556 ], [ 80.237981, 15.6017834 ], [ 80.237184, 15.6016514 ], [ 80.2355934, 15.600487 ], [ 80.2355915, 15.6010022 ], [ 80.2342617, 15.601126 ], [ 80.2337291, 15.6013817 ], [ 80.2329454, 15.6019529 ], [ 80.2326614, 15.6025378 ], [ 80.2326605, 15.6027955 ], [ 80.2321284, 15.6029221 ], [ 80.2318616, 15.6031787 ], [ 80.2305304, 15.6036894 ], [ 80.2294681, 15.603428 ], [ 80.2276068, 15.6035507 ], [ 80.2276077, 15.6032931 ], [ 80.2286726, 15.60291 ], [ 80.2302675, 15.6029155 ], [ 80.2313318, 15.6026616 ], [ 80.2318655, 15.6021481 ], [ 80.23204, 15.6021081 ], [ 80.2327971, 15.6016512 ], [ 80.2329339, 15.6007354 ], [ 80.2337315, 15.6007382 ], [ 80.2340003, 15.5999661 ], [ 80.2345319, 15.599968 ], [ 80.2346682, 15.598938 ], [ 80.2341403, 15.5979055 ], [ 80.2341422, 15.5973902 ], [ 80.2337463, 15.5967442 ], [ 80.2332146, 15.5967424 ], [ 80.2329498, 15.5964838 ], [ 80.2318871, 15.5963517 ], [ 80.231889, 15.5958365 ], [ 80.2313577, 15.5957053 ], [ 80.2305622, 15.5951873 ], [ 80.2300324, 15.5946702 ], [ 80.229235, 15.5946673 ], [ 80.2287043, 15.5944078 ], [ 80.2271093, 15.5944023 ], [ 80.2263101, 15.5949147 ], [ 80.2252458, 15.5951685 ], [ 80.2245792, 15.5955532 ], [ 80.2244448, 15.596068 ], [ 80.2228489, 15.5963199 ], [ 80.222847, 15.5968353 ], [ 80.222315, 15.5969618 ], [ 80.2220481, 15.5972184 ], [ 80.2215165, 15.5972166 ], [ 80.2209839, 15.5974723 ], [ 80.2204522, 15.5974704 ], [ 80.2203193, 15.5973417 ], [ 80.2201887, 15.5968259 ], [ 80.2209867, 15.5966994 ], [ 80.221252, 15.5968297 ], [ 80.221919, 15.5960591 ], [ 80.2220543, 15.5955443 ], [ 80.2231182, 15.5954188 ], [ 80.2241829, 15.5950364 ], [ 80.2247194, 15.5937503 ], [ 80.2239219, 15.5937475 ], [ 80.2240553, 15.5934902 ], [ 80.2240583, 15.5927172 ], [ 80.2239268, 15.5924592 ], [ 80.224991, 15.5922054 ], [ 80.2251226, 15.5924634 ], [ 80.2252511, 15.593752 ], [ 80.2260491, 15.5936256 ], [ 80.2263157, 15.5933689 ], [ 80.226848, 15.5932425 ], [ 80.2265869, 15.5919533 ], [ 80.2268527, 15.5919542 ], [ 80.2268498, 15.5927272 ], [ 80.2271152, 15.5928565 ], [ 80.2297733, 15.5928658 ], [ 80.2311044, 15.5923551 ], [ 80.2313711, 15.5920984 ], [ 80.231637, 15.5920994 ], [ 80.2321677, 15.5923589 ], [ 80.2334972, 15.5922351 ], [ 80.2338937, 15.5927518 ], [ 80.2337593, 15.5932666 ], [ 80.2348215, 15.593528 ], [ 80.2349502, 15.594559 ], [ 80.2345442, 15.5966187 ], [ 80.2350746, 15.5970066 ], [ 80.2356062, 15.5970085 ], [ 80.2364017, 15.5975265 ], [ 80.236933, 15.5976575 ], [ 80.2369309, 15.5981729 ], [ 80.2374626, 15.5981746 ], [ 80.2375941, 15.5984328 ], [ 80.2375913, 15.5992058 ], [ 80.2374578, 15.5994628 ], [ 80.2379895, 15.5994647 ], [ 80.2383841, 15.6004966 ], [ 80.2385136, 15.6015276 ], [ 80.2390453, 15.6015295 ], [ 80.2391702, 15.6035911 ], [ 80.2390358, 15.6041058 ], [ 80.2393015, 15.6041067 ], [ 80.2397018, 15.6035928 ], [ 80.2394435, 15.6015309 ], [ 80.2389177, 15.5999831 ], [ 80.2386527, 15.5997246 ], [ 80.2383917, 15.5984356 ], [ 80.2381267, 15.5981771 ], [ 80.2378657, 15.5968879 ], [ 80.2365508, 15.5930187 ], [ 80.236286, 15.5927601 ], [ 80.2360239, 15.5917286 ], [ 80.2357591, 15.59147 ], [ 80.2339232, 15.584765 ], [ 80.2336584, 15.5845065 ], [ 80.2335316, 15.5829601 ], [ 80.2330001, 15.5829584 ], [ 80.2328733, 15.5811544 ], [ 80.2326085, 15.5808958 ], [ 80.2324819, 15.5793494 ], [ 80.2319502, 15.5793477 ], [ 80.2318226, 15.5778013 ], [ 80.2315588, 15.5772852 ], [ 80.231171, 15.5744498 ], [ 80.2306395, 15.5744479 ], [ 80.2305127, 15.5726439 ], [ 80.2302479, 15.5723854 ], [ 80.2299878, 15.5708386 ], [ 80.229462, 15.5692909 ], [ 80.2293363, 15.567487 ], [ 80.2288047, 15.5674852 ], [ 80.2276332, 15.5607823 ], [ 80.2273809, 15.5571744 ], [ 80.227367679526949, 15.557128921874998 ], [ 80.2268561, 15.5553691 ], [ 80.2268695, 15.5517622 ], [ 80.2274059, 15.5504759 ], [ 80.2274078, 15.5499605 ], [ 80.2279432, 15.548932 ], [ 80.2278166, 15.5473856 ], [ 80.2272849, 15.5473837 ], [ 80.227283, 15.5478991 ], [ 80.2265879, 15.5488856 ], [ 80.2259494, 15.5491826 ], [ 80.2259504, 15.548925 ], [ 80.2263911, 15.5487566 ], [ 80.2271082, 15.5478099 ], [ 80.2272946, 15.5448074 ], [ 80.2280929, 15.5445525 ], [ 80.2278222, 15.5458397 ], [ 80.2283539, 15.5458416 ], [ 80.2284872, 15.5455844 ], [ 80.2283634, 15.5432652 ], [ 80.2278325, 15.543134 ], [ 80.2274357, 15.5424891 ], [ 80.2273061, 15.5417158 ], [ 80.2267752, 15.5415846 ], [ 80.2266423, 15.5414557 ], [ 80.2263804, 15.5404241 ], [ 80.2258508, 15.539907 ], [ 80.2254584, 15.5383599 ], [ 80.224927, 15.538358 ], [ 80.2247964, 15.5375846 ], [ 80.2241369, 15.5364224 ], [ 80.2250776, 15.5336211 ], [ 80.2265344, 15.5348849 ], [ 80.227064, 15.5354022 ], [ 80.2275949, 15.5355332 ], [ 80.2278578, 15.5363071 ], [ 80.2283892, 15.536309 ], [ 80.228916, 15.537599 ], [ 80.2297122, 15.5378594 ], [ 80.2301048, 15.5394067 ], [ 80.2306334, 15.5401815 ], [ 80.2307629, 15.5412125 ], [ 80.2312944, 15.5412143 ], [ 80.2315658, 15.5396695 ], [ 80.2310343, 15.5396676 ], [ 80.2305094, 15.5378622 ], [ 80.229978, 15.5378603 ], [ 80.2295837, 15.5365708 ], [ 80.2287884, 15.5360528 ], [ 80.2282607, 15.5350202 ], [ 80.2272016, 15.533986 ], [ 80.2268073, 15.5329541 ], [ 80.2262762, 15.5328229 ], [ 80.2254839, 15.5315319 ], [ 80.2249529, 15.5314017 ], [ 80.2244282, 15.5295963 ], [ 80.2238967, 15.5295944 ], [ 80.2233709, 15.5280469 ], [ 80.2228395, 15.528045 ], [ 80.2223148, 15.5262397 ], [ 80.2217833, 15.5262378 ], [ 80.2212577, 15.5246901 ], [ 80.2207262, 15.5246882 ], [ 80.2204673, 15.5228838 ], [ 80.2199358, 15.5228819 ], [ 80.2198083, 15.5213355 ], [ 80.2192836, 15.5195302 ], [ 80.2190188, 15.5192716 ], [ 80.2184991, 15.5161781 ], [ 80.2182343, 15.5159195 ], [ 80.2179744, 15.5143728 ], [ 80.2177096, 15.5141142 ], [ 80.2171831, 15.5128241 ], [ 80.2169183, 15.5125655 ], [ 80.2156072, 15.5079233 ], [ 80.2153424, 15.5076648 ], [ 80.2150816, 15.5063756 ], [ 80.214685, 15.5059872 ], [ 80.214153, 15.5061146 ], [ 80.2137599, 15.5045674 ], [ 80.2134951, 15.5043087 ], [ 80.2128368, 15.5028889 ], [ 80.2123057, 15.5027587 ], [ 80.2125656, 15.5043055 ], [ 80.2130971, 15.5043074 ], [ 80.2129617, 15.5048222 ], [ 80.2130903, 15.5061108 ], [ 80.2136217, 15.5061127 ], [ 80.2134815, 15.5079158 ], [ 80.2138746, 15.5094629 ], [ 80.21414, 15.5095922 ], [ 80.2146714, 15.5095941 ], [ 80.2149376, 15.5094667 ], [ 80.215067, 15.5102401 ], [ 80.2155945, 15.5112726 ], [ 80.2157221, 15.5128188 ], [ 80.2162536, 15.5128207 ], [ 80.216778, 15.5146262 ], [ 80.2175743, 15.5148866 ], [ 80.2173036, 15.5161739 ], [ 80.2170379, 15.516173 ], [ 80.2167761, 15.5151414 ], [ 80.215978, 15.5153962 ], [ 80.2169037, 15.51643 ], [ 80.2167674, 15.5174601 ], [ 80.2165017, 15.5174591 ], [ 80.2163713, 15.5166857 ], [ 80.2162394, 15.5165561 ], [ 80.2157085, 15.5164259 ], [ 80.2158349, 15.5179721 ], [ 80.2157017, 15.5182293 ], [ 80.2162331, 15.5182312 ], [ 80.2162301, 15.519004 ], [ 80.2170283, 15.5187492 ], [ 80.2174235, 15.5195236 ], [ 80.217953, 15.5200409 ], [ 80.2180835, 15.5208142 ], [ 80.217552, 15.5208124 ], [ 80.2178196, 15.5202979 ], [ 80.217023, 15.5201658 ], [ 80.2164896, 15.5206793 ], [ 80.2155577, 15.5210628 ], [ 80.2155537, 15.5220934 ], [ 80.2154208, 15.5222214 ], [ 80.2132944, 15.5223431 ], [ 80.2134278, 15.5220858 ], [ 80.2134308, 15.5213128 ], [ 80.2130366, 15.5202809 ], [ 80.2138342, 15.5201544 ], [ 80.2146304, 15.5204151 ], [ 80.215428, 15.5202894 ], [ 80.2151662, 15.519258 ], [ 80.2141039, 15.519125 ], [ 80.2138372, 15.5193816 ], [ 80.2133961, 15.5194208 ], [ 80.2133072, 15.5189936 ], [ 80.2138387, 15.5189955 ], [ 80.2142386, 15.5184818 ], [ 80.2147769, 15.5166801 ], [ 80.214645, 15.5165504 ], [ 80.2133178, 15.5161597 ], [ 80.2133199, 15.5156443 ], [ 80.2125218, 15.5158991 ], [ 80.2123904, 15.5153835 ], [ 80.2114622, 15.5149932 ], [ 80.2109328, 15.5144761 ], [ 80.2104014, 15.5144741 ], [ 80.2096023, 15.5149866 ], [ 80.2092018, 15.515372 ], [ 80.2093331, 15.5158878 ], [ 80.2082708, 15.5157547 ], [ 80.2069451, 15.514977 ], [ 80.2058826, 15.5148449 ], [ 80.2058856, 15.5140719 ], [ 80.2048226, 15.5140681 ], [ 80.2048238, 15.5138105 ], [ 80.2058871, 15.513685 ], [ 80.2066868, 15.5130443 ], [ 80.2066847, 15.5135595 ], [ 80.208281, 15.5130499 ], [ 80.2082831, 15.5125347 ], [ 80.2088143, 15.5125366 ], [ 80.2088174, 15.5117636 ], [ 80.2082865, 15.5116324 ], [ 80.2074911, 15.5111144 ], [ 80.2070937, 15.5107269 ], [ 80.2065652, 15.509952 ], [ 80.2064348, 15.5094364 ], [ 80.2056367, 15.5096912 ], [ 80.2056386, 15.5091758 ], [ 80.2040449, 15.5090409 ], [ 80.2031118, 15.509682 ], [ 80.2029776, 15.5101968 ], [ 80.2019156, 15.5099354 ], [ 80.2019177, 15.50942 ], [ 80.2011196, 15.5096748 ], [ 80.2011215, 15.5091596 ], [ 80.2019192, 15.5090331 ], [ 80.2021838, 15.5092919 ], [ 80.2029805, 15.509424 ], [ 80.2033806, 15.5089101 ], [ 80.2035159, 15.5083952 ], [ 80.2027193, 15.5082631 ], [ 80.2019241, 15.5077449 ], [ 80.2013946, 15.5072278 ], [ 80.1998024, 15.5067067 ], [ 80.199273, 15.5061896 ], [ 80.197412, 15.5064404 ], [ 80.1971453, 15.5066971 ], [ 80.1966134, 15.5068245 ], [ 80.1966114, 15.5073397 ], [ 80.1955477, 15.5075935 ], [ 80.1955505, 15.5068205 ], [ 80.1952844, 15.5069481 ], [ 80.1947529, 15.506946 ], [ 80.1946201, 15.5068173 ], [ 80.1944896, 15.5063015 ], [ 80.1931608, 15.5064249 ], [ 80.1926284, 15.5066806 ], [ 80.1915654, 15.5066769 ], [ 80.1908595, 15.5064572 ], [ 80.1907709, 15.5060303 ], [ 80.1913012, 15.5062898 ], [ 80.1914356, 15.505775 ], [ 80.1913042, 15.505517 ], [ 80.1915705, 15.5053886 ], [ 80.1928985, 15.5055226 ], [ 80.1926348, 15.5050065 ], [ 80.1939629, 15.5051397 ], [ 80.1942275, 15.5053983 ], [ 80.194759, 15.5054002 ], [ 80.1952914, 15.5051444 ], [ 80.196088, 15.5052767 ], [ 80.1966244, 15.5039904 ], [ 80.1974214, 15.5039932 ], [ 80.1974235, 15.503478 ], [ 80.197955, 15.5034799 ], [ 80.1982235, 15.502708 ], [ 80.200084, 15.5025856 ], [ 80.2003507, 15.5023289 ], [ 80.2008816, 15.5024601 ], [ 80.2008835, 15.5019447 ], [ 80.2011483, 15.5022034 ], [ 80.201414, 15.5022044 ], [ 80.201415, 15.5019468 ], [ 80.20124, 15.5018574 ], [ 80.2011412, 15.5013861 ], [ 80.2011185, 15.5005425 ], [ 80.2010239, 15.4998842 ], [ 80.2008935, 15.4993684 ], [ 80.2003626, 15.4992373 ], [ 80.2002298, 15.4991084 ], [ 80.2000994, 15.4985926 ], [ 80.1982375, 15.4991012 ], [ 80.1979678, 15.5001307 ], [ 80.1971702, 15.5002562 ], [ 80.1958366, 15.5015395 ], [ 80.1950391, 15.5016659 ], [ 80.1950411, 15.5011507 ], [ 80.194243, 15.5014053 ], [ 80.1939812, 15.5003739 ], [ 80.189463, 15.5007434 ], [ 80.1891961, 15.5010001 ], [ 80.1876, 15.5015094 ], [ 80.187067, 15.5018944 ], [ 80.1866732, 15.5006047 ], [ 80.1858841, 15.4985406 ], [ 80.1858862, 15.4980254 ], [ 80.1853568, 15.4975081 ], [ 80.1847, 15.4957022 ], [ 80.185233, 15.4953174 ], [ 80.1860306, 15.4951919 ], [ 80.1860285, 15.4957071 ], [ 80.1870897, 15.496097 ], [ 80.1886824, 15.4964898 ], [ 80.1889521, 15.4954603 ], [ 80.1900143, 15.4955926 ], [ 80.1908094, 15.4961106 ], [ 80.1913388, 15.4966279 ], [ 80.1929306, 15.4972783 ], [ 80.1929325, 15.4967631 ], [ 80.1921355, 15.49676 ], [ 80.192404, 15.4959882 ], [ 80.1918727, 15.4959863 ], [ 80.1918748, 15.495471 ], [ 80.196397, 15.49407 ], [ 80.1966637, 15.4938133 ], [ 80.1987892, 15.4938211 ], [ 80.1998489, 15.4945977 ], [ 80.2014422, 15.4948611 ], [ 80.2017068, 15.4951197 ], [ 80.2043619, 15.4956446 ], [ 80.2072846, 15.4956551 ], [ 80.2078149, 15.4959146 ], [ 80.2088776, 15.4959184 ], [ 80.2102046, 15.49631 ], [ 80.2102067, 15.4957948 ], [ 80.2120661, 15.4959298 ], [ 80.2125979, 15.4958033 ], [ 80.2128587, 15.4970925 ], [ 80.2133891, 15.497352 ], [ 80.2132617, 15.4958058 ], [ 80.2129969, 15.4955472 ], [ 80.2124703, 15.4942571 ], [ 80.2122057, 15.4939986 ], [ 80.2114155, 15.4921921 ], [ 80.2111507, 15.4919335 ], [ 80.2110232, 15.4906449 ], [ 80.2104919, 15.490643 ], [ 80.2103634, 15.4893543 ], [ 80.2100997, 15.4888381 ], [ 80.2093222, 15.4836826 ], [ 80.2084055, 15.4803299 ], [ 80.2078742, 15.480328 ], [ 80.2077448, 15.4792968 ], [ 80.2072165, 15.4785221 ], [ 80.2064273, 15.476458 ], [ 80.2062999, 15.4751694 ], [ 80.2057684, 15.4751675 ], [ 80.2055087, 15.4736208 ], [ 80.2049774, 15.4736189 ], [ 80.2047185, 15.4718145 ], [ 80.2041872, 15.4718124 ], [ 80.2040559, 15.4712968 ], [ 80.2037922, 15.4707805 ], [ 80.2035286, 15.4702643 ], [ 80.2024698, 15.4692299 ], [ 80.202373757037606, 15.46885 ], [ 80.2023394, 15.4687141 ], [ 80.2018081, 15.4687122 ], [ 80.2014161, 15.4669073 ], [ 80.2011515, 15.4666487 ], [ 80.2010239, 15.4653601 ], [ 80.2004927, 15.4653581 ], [ 80.2000988, 15.4640685 ], [ 80.1993048, 15.4632927 ], [ 80.1987764, 15.4625178 ], [ 80.1986459, 15.4620022 ], [ 80.1981147, 15.4620001 ], [ 80.1979833, 15.4614845 ], [ 80.1973243, 15.4603222 ], [ 80.1967934, 15.4601919 ], [ 80.1963995, 15.4589022 ], [ 80.1956055, 15.4581265 ], [ 80.1952114, 15.4570944 ], [ 80.1946807, 15.4569632 ], [ 80.1940205, 15.4558018 ], [ 80.1938901, 15.4552861 ], [ 80.1933589, 15.4552842 ], [ 80.192964, 15.4542522 ], [ 80.19217, 15.4534764 ], [ 80.1916427, 15.4524439 ], [ 80.1912462, 15.4520555 ], [ 80.1907155, 15.4519253 ], [ 80.1903205, 15.4508931 ], [ 80.1889973, 15.4496002 ], [ 80.188469, 15.4488253 ], [ 80.1876773, 15.4475342 ], [ 80.1875469, 15.4470184 ], [ 80.1870162, 15.4468873 ], [ 80.1866187, 15.4464998 ], [ 80.1862249, 15.4454677 ], [ 80.1856936, 15.4454658 ], [ 80.1852986, 15.4444337 ], [ 80.185034, 15.4441751 ], [ 80.1849038, 15.4436593 ], [ 80.1843728, 15.4435282 ], [ 80.1833165, 15.4419784 ], [ 80.1827858, 15.4418482 ], [ 80.1826545, 15.4413324 ], [ 80.1823899, 15.4410736 ], [ 80.1822595, 15.4405579 ], [ 80.1817287, 15.4404267 ], [ 80.1815961, 15.4402978 ], [ 80.1814657, 15.439782 ], [ 80.1809344, 15.4397801 ], [ 80.1806728, 15.4387486 ], [ 80.1801421, 15.4386174 ], [ 80.1797458, 15.4379723 ], [ 80.1784228, 15.4366792 ], [ 80.1781591, 15.4361628 ], [ 80.1768361, 15.4348697 ], [ 80.1764407, 15.4342237 ], [ 80.1757777, 15.4338353 ], [ 80.1756475, 15.4333195 ], [ 80.1751162, 15.4333175 ], [ 80.174985, 15.4328017 ], [ 80.1739266, 15.4317673 ], [ 80.1732666, 15.4308625 ], [ 80.1726036, 15.4304741 ], [ 80.1719448, 15.4293118 ], [ 80.1711483, 15.4291804 ], [ 80.1710172, 15.4286647 ], [ 80.1704891, 15.4278898 ], [ 80.169828, 15.4272428 ], [ 80.1692973, 15.4271124 ], [ 80.1691661, 15.4265966 ], [ 80.1689015, 15.4263381 ], [ 80.1687713, 15.4258223 ], [ 80.1682406, 15.4256909 ], [ 80.1678442, 15.4250459 ], [ 80.1662568, 15.423494 ], [ 80.1655968, 15.4225894 ], [ 80.164934, 15.4222009 ], [ 80.1644059, 15.421426 ], [ 80.1642755, 15.4209102 ], [ 80.163745, 15.4207788 ], [ 80.1633475, 15.4203914 ], [ 80.1629539, 15.4193594 ], [ 80.1624231, 15.4192281 ], [ 80.1622905, 15.4190992 ], [ 80.1621601, 15.4185834 ], [ 80.161629, 15.4185815 ], [ 80.1614978, 15.4180657 ], [ 80.1604396, 15.4170311 ], [ 80.1600457, 15.415999 ], [ 80.1592489, 15.415996 ], [ 80.1588543, 15.414964 ], [ 80.1575314, 15.4136707 ], [ 80.157268, 15.4131544 ], [ 80.15635, 15.412256806169674 ], [ 80.156190430603544, 15.41210078383223 ], [ 80.15615, 15.412061251958267 ], [ 80.1559454, 15.4118612 ], [ 80.1556817, 15.4113449 ], [ 80.15555, 15.4112152 ], [ 80.1550193, 15.4110848 ], [ 80.1546246, 15.4100527 ], [ 80.1542283, 15.4096643 ], [ 80.1536976, 15.4095339 ], [ 80.1535664, 15.4090181 ], [ 80.153302, 15.4087596 ], [ 80.1529083, 15.4077274 ], [ 80.152377, 15.4077253 ], [ 80.1523791, 15.4072101 ], [ 80.151848, 15.407208 ], [ 80.1517169, 15.4066923 ], [ 80.1509233, 15.4059164 ], [ 80.1503952, 15.4051413 ], [ 80.150265, 15.4046256 ], [ 80.1497344, 15.4044944 ], [ 80.1490746, 15.4033328 ], [ 80.1484139, 15.4026858 ], [ 80.1478832, 15.4025554 ], [ 80.1474886, 15.4015233 ], [ 80.1466949, 15.4007473 ], [ 80.1464315, 15.4002311 ], [ 80.1453735, 15.3991963 ], [ 80.1448465, 15.3981638 ], [ 80.1444502, 15.3977754 ], [ 80.1439197, 15.397645 ], [ 80.143525, 15.3966129 ], [ 80.1427316, 15.3958369 ], [ 80.1424681, 15.3953207 ], [ 80.1414101, 15.3942859 ], [ 80.1407515, 15.3931236 ], [ 80.1400886, 15.392735 ], [ 80.1395617, 15.3917025 ], [ 80.1390327, 15.391185 ], [ 80.1386392, 15.3901531 ], [ 80.1381079, 15.390151 ], [ 80.1381102, 15.3896358 ], [ 80.1375791, 15.3896337 ], [ 80.1370542, 15.3880858 ], [ 80.1362576, 15.3880826 ], [ 80.1357329, 15.3865349 ], [ 80.1352019, 15.3865328 ], [ 80.1350707, 15.386017 ], [ 80.134412, 15.3848545 ], [ 80.1338815, 15.384724 ], [ 80.133488, 15.3834343 ], [ 80.1324302, 15.3823997 ], [ 80.1320365, 15.3813676 ], [ 80.1315054, 15.3813655 ], [ 80.1311121, 15.3800758 ], [ 80.1303187, 15.3792997 ], [ 80.1295262, 15.3782661 ], [ 80.1286042, 15.3765874 ], [ 80.1280737, 15.376457 ], [ 80.1275491, 15.3749091 ], [ 80.127018, 15.374907 ], [ 80.1268879, 15.3741334 ], [ 80.1266235, 15.3738749 ], [ 80.1264933, 15.3733591 ], [ 80.1259624, 15.373357 ], [ 80.1258312, 15.3728412 ], [ 80.1245111, 15.3710325 ], [ 80.124117, 15.3701287 ], [ 80.1235865, 15.3699983 ], [ 80.1229288, 15.3684498 ], [ 80.1226642, 15.3681913 ], [ 80.1220057, 15.3670287 ], [ 80.1214752, 15.3668983 ], [ 80.1208174, 15.3653498 ], [ 80.1200263, 15.3640586 ], [ 80.1194975, 15.3635411 ], [ 80.1188416, 15.361735 ], [ 80.1183105, 15.3617329 ], [ 80.1179172, 15.3604432 ], [ 80.1173884, 15.3599259 ], [ 80.1168628, 15.3586356 ], [ 80.116334, 15.3581181 ], [ 80.1159416, 15.3568284 ], [ 80.1154105, 15.3568263 ], [ 80.1152805, 15.3560529 ], [ 80.1136995, 15.3532126 ], [ 80.1133071, 15.3519229 ], [ 80.1127761, 15.3519206 ], [ 80.1125183, 15.3501163 ], [ 80.1119872, 15.350114 ], [ 80.1117282, 15.3485672 ], [ 80.1111973, 15.3485651 ], [ 80.1100163, 15.3452111 ], [ 80.1097519, 15.3449524 ], [ 80.1085718, 15.3415984 ], [ 80.1080409, 15.3415961 ], [ 80.1077819, 15.3400494 ], [ 80.1072508, 15.3400473 ], [ 80.1071242, 15.3385009 ], [ 80.1072586, 15.3382438 ], [ 80.1067275, 15.3382416 ], [ 80.1063431, 15.3348908 ], [ 80.1060798, 15.3343744 ], [ 80.1060841, 15.3333438 ], [ 80.1055598, 15.3317959 ], [ 80.1052954, 15.3315372 ], [ 80.1050342, 15.3305056 ], [ 80.1053021, 15.3299913 ], [ 80.1053096, 15.3281879 ], [ 80.1051796, 15.3276721 ], [ 80.1046492, 15.3275408 ], [ 80.1042533, 15.3268955 ], [ 80.1033279, 15.3261189 ], [ 80.1037103, 15.3297275 ], [ 80.1041011, 15.3315324 ], [ 80.1046322, 15.3315345 ], [ 80.1047634, 15.3317927 ], [ 80.1046256, 15.3330804 ], [ 80.1040962, 15.3326914 ], [ 80.1038309, 15.3326903 ], [ 80.1030322, 15.3332025 ], [ 80.1022346, 15.3334568 ], [ 80.1004665, 15.3334903 ], [ 80.1003778, 15.3330633 ], [ 80.1014404, 15.3329384 ], [ 80.103567, 15.3323032 ], [ 80.1034425, 15.3302416 ], [ 80.1029138, 15.3297243 ], [ 80.102537, 15.3248275 ], [ 80.1014756, 15.3246941 ], [ 80.1009435, 15.3249496 ], [ 80.0964262, 15.3259619 ], [ 80.0961596, 15.3262183 ], [ 80.0956281, 15.3263455 ], [ 80.0956258, 15.3268607 ], [ 80.0953605, 15.3268596 ], [ 80.0953625, 15.3263444 ], [ 80.0913788, 15.3267143 ], [ 80.0909774, 15.3273573 ], [ 80.0904442, 15.3278704 ], [ 80.0901754, 15.3286421 ], [ 80.0901609, 15.3319913 ], [ 80.0904242, 15.3325077 ], [ 80.0904196, 15.3335383 ], [ 80.0898865, 15.3340514 ], [ 80.0897521, 15.3345661 ], [ 80.0868322, 15.3344249 ], [ 80.086568, 15.3341662 ], [ 80.0860369, 15.3341641 ], [ 80.0852382, 15.3346761 ], [ 80.0845703, 15.3355755 ], [ 80.08443, 15.3373784 ], [ 80.0841645, 15.3373773 ], [ 80.0844423, 15.3345444 ], [ 80.0852416, 15.3339031 ], [ 80.0857738, 15.3336477 ], [ 80.0868356, 15.3336521 ], [ 80.0873644, 15.3341694 ], [ 80.0892233, 15.3340486 ], [ 80.0896234, 15.3335351 ], [ 80.0896345, 15.3309586 ], [ 80.0889823, 15.3283796 ], [ 80.0885421, 15.3282892 ], [ 80.088988, 15.3270915 ], [ 80.0900526, 15.3264512 ], [ 80.0908524, 15.3256816 ], [ 80.0913833, 15.3256837 ], [ 80.0919154, 15.3254283 ], [ 80.0956315, 15.3255725 ], [ 80.0947061, 15.3245383 ], [ 80.0946661, 15.3241106 ], [ 80.0948411, 15.324152 ], [ 80.0953697, 15.3246693 ], [ 80.097493, 15.3248073 ], [ 80.0974952, 15.3242919 ], [ 80.0982922, 15.3241658 ], [ 80.0990908, 15.3236538 ], [ 80.0996222, 15.3235275 ], [ 80.1005553, 15.3225009 ], [ 80.1008241, 15.321729 ], [ 80.100574, 15.318121 ], [ 80.1000454, 15.3176035 ], [ 80.0993871, 15.3164412 ], [ 80.0977976, 15.3156617 ], [ 80.0938146, 15.3159033 ], [ 80.0935487, 15.3160314 ], [ 80.093551, 15.3155162 ], [ 80.0983308, 15.3151486 ], [ 80.0985958, 15.315279 ], [ 80.0988634, 15.3147647 ], [ 80.0983331, 15.3146334 ], [ 80.0980686, 15.3143747 ], [ 80.0962138, 15.3135943 ], [ 80.0935582, 15.3138411 ], [ 80.0914317, 15.3144771 ], [ 80.0916939, 15.315251 ], [ 80.0911635, 15.3151197 ], [ 80.0910309, 15.3149908 ], [ 80.0909008, 15.3144748 ], [ 80.0903705, 15.3143435 ], [ 80.0866519, 15.3148436 ], [ 80.0861199, 15.3150991 ], [ 80.084792, 15.3152229 ], [ 80.0847897, 15.3157381 ], [ 80.0831964, 15.31586 ], [ 80.0829297, 15.3161165 ], [ 80.0813348, 15.3166253 ], [ 80.0742543, 15.3174096 ], [ 80.0741647, 15.3172403 ], [ 80.056634, 15.3194856 ], [ 80.0564985, 15.3200004 ], [ 80.0560991, 15.3203847 ], [ 80.0555676, 15.3205117 ], [ 80.0554321, 15.3210263 ], [ 80.0552993, 15.3211543 ], [ 80.0547676, 15.3212813 ], [ 80.054631, 15.3220535 ], [ 80.0540967, 15.3228243 ], [ 80.0532968, 15.3235937 ], [ 80.0528961, 15.3242357 ], [ 80.0515665, 15.3247453 ], [ 80.0512998, 15.3250017 ], [ 80.0494405, 15.3252516 ], [ 80.0475833, 15.3249861 ], [ 80.0467894, 15.3244673 ], [ 80.045994, 15.3242062 ], [ 80.0457298, 15.3239475 ], [ 80.0430785, 15.3231633 ], [ 80.0417514, 15.3231577 ], [ 80.041487, 15.3228987 ], [ 80.0401621, 15.3223779 ], [ 80.0395021, 15.3214737 ], [ 80.0388417, 15.3208264 ], [ 80.0383119, 15.3205665 ], [ 80.0372549, 15.3195313 ], [ 80.035407431249993, 15.318753444634238 ], [ 80.0354002, 15.3187504 ], [ 80.035136, 15.3184916 ], [ 80.0335439, 15.3183563 ], [ 80.0335461, 15.3178411 ], [ 80.0332808, 15.31784 ], [ 80.0332783, 15.3183552 ], [ 80.032748, 15.3182236 ], [ 80.031954, 15.317705 ], [ 80.031425, 15.3173166 ], [ 80.0314225, 15.317832 ], [ 80.0308933, 15.3174427 ], [ 80.0303632, 15.3173121 ], [ 80.0304543, 15.3171426 ], [ 80.0322218, 15.3171909 ], [ 80.0324862, 15.3174497 ], [ 80.035407431249993, 15.318250845665611 ], [ 80.0372585, 15.3187585 ], [ 80.0399048, 15.3205733 ], [ 80.0407005, 15.320706 ], [ 80.0406983, 15.3212212 ], [ 80.0417559, 15.3221271 ], [ 80.0433463, 15.3226491 ], [ 80.0446737, 15.3226547 ], [ 80.0462653, 15.3229193 ], [ 80.0475892, 15.3236978 ], [ 80.0483862, 15.3235729 ], [ 80.0485584, 15.3240002 ], [ 80.0483838, 15.3240881 ], [ 80.0483826, 15.3243457 ], [ 80.0486482, 15.3243469 ], [ 80.0487393, 15.3241773 ], [ 80.049445, 15.324221 ], [ 80.0513057, 15.3237137 ], [ 80.0523711, 15.3229452 ], [ 80.0529026, 15.3228192 ], [ 80.052906, 15.3220462 ], [ 80.0534369, 15.3220484 ], [ 80.053837, 15.3215349 ], [ 80.0543713, 15.3207642 ], [ 80.0545068, 15.3202495 ], [ 80.0555728, 15.319352 ], [ 80.0563698, 15.3192268 ], [ 80.056372, 15.3187116 ], [ 80.0576999, 15.318588 ], [ 80.058232, 15.3183325 ], [ 80.0648753, 15.3168146 ], [ 80.0685928, 15.3165725 ], [ 80.0701868, 15.3163215 ], [ 80.0704533, 15.3160651 ], [ 80.0773563, 15.315836 ], [ 80.080544, 15.3153338 ], [ 80.0808107, 15.3150774 ], [ 80.0816075, 15.3149522 ], [ 80.0816098, 15.3144368 ], [ 80.0810783, 15.3145631 ], [ 80.0800171, 15.3144304 ], [ 80.0784255, 15.3141662 ], [ 80.0765695, 15.3136432 ], [ 80.0766606, 15.3134737 ], [ 80.0773671, 15.3133888 ], [ 80.077366, 15.3136464 ], [ 80.0776319, 15.3135183 ], [ 80.0785166, 15.3139967 ], [ 80.0792231, 15.3139118 ], [ 80.0801082, 15.3142609 ], [ 80.0837373, 15.3135434 ], [ 80.0848025, 15.312775 ], [ 80.0874593, 15.3122705 ], [ 80.087726, 15.3120139 ], [ 80.0890543, 15.3117617 ], [ 80.0893208, 15.3115051 ], [ 80.0903837, 15.3112518 ], [ 80.0906504, 15.3109953 ], [ 80.0911819, 15.3108691 ], [ 80.0911841, 15.3103539 ], [ 80.0917133, 15.3107419 ], [ 80.0956973, 15.3102429 ], [ 80.0986173, 15.3102546 ], [ 80.0994124, 15.3105155 ], [ 80.0999413, 15.3110329 ], [ 80.1004716, 15.3111643 ], [ 80.1005982, 15.3124531 ], [ 80.100465, 15.3127101 ], [ 80.1009959, 15.3127122 ], [ 80.101127, 15.3129704 ], [ 80.1009904, 15.3140004 ], [ 80.1023155, 15.3145211 ], [ 80.1027088, 15.3155533 ], [ 80.1032374, 15.3160705 ], [ 80.1034975, 15.3173599 ], [ 80.1033574, 15.3191628 ], [ 80.1049492, 15.3194268 ], [ 80.1055992, 15.3225211 ], [ 80.1058636, 15.3227797 ], [ 80.1065058, 15.3279352 ], [ 80.1066797, 15.3280235 ], [ 80.1064982, 15.3297387 ], [ 80.1067636, 15.3297396 ], [ 80.1070369, 15.3279373 ], [ 80.1068621, 15.3278479 ], [ 80.1069112, 15.3261333 ], [ 80.1063945, 15.3227819 ], [ 80.1056101, 15.3199447 ], [ 80.1050847, 15.3186544 ], [ 80.1049569, 15.3176234 ], [ 80.1044258, 15.3176211 ], [ 80.1041671, 15.3160743 ], [ 80.1036362, 15.3160722 ], [ 80.1033773, 15.3145253 ], [ 80.1028464, 15.3145232 ], [ 80.102323, 15.3127175 ], [ 80.1017927, 15.3125861 ], [ 80.1011337, 15.3114246 ], [ 80.1006048, 15.3109073 ], [ 80.0999483, 15.3093588 ], [ 80.0994173, 15.3093565 ], [ 80.0990242, 15.3080668 ], [ 80.0984956, 15.3075493 ], [ 80.097839, 15.3060008 ], [ 80.0973081, 15.3059987 ], [ 80.0971783, 15.3052254 ], [ 80.0966508, 15.3044503 ], [ 80.0963864, 15.3041915 ], [ 80.0959942, 15.3029018 ], [ 80.0954633, 15.3028995 ], [ 80.0940174, 15.2995444 ], [ 80.093753, 15.2992856 ], [ 80.093362, 15.2977383 ], [ 80.0928311, 15.2977362 ], [ 80.0927024, 15.296705 ], [ 80.0919161, 15.2943832 ], [ 80.0916517, 15.2941244 ], [ 80.0915251, 15.2928356 ], [ 80.0909942, 15.2928336 ], [ 80.0908666, 15.2915448 ], [ 80.0903401, 15.2905121 ], [ 80.0902134, 15.2892233 ], [ 80.0896825, 15.2892212 ], [ 80.0896893, 15.2876754 ], [ 80.0891584, 15.2876733 ], [ 80.0890297, 15.2866421 ], [ 80.0869331, 15.2804503 ], [ 80.0861503, 15.2773554 ], [ 80.0858916, 15.2758084 ], [ 80.0856272, 15.2755497 ], [ 80.0852429, 15.2724565 ], [ 80.0847122, 15.2724543 ], [ 80.0830392, 15.2603384 ], [ 80.0833359, 15.2531256 ], [ 80.0862973, 15.2433473 ], [ 80.0863006, 15.2425745 ], [ 80.0868369, 15.2412885 ], [ 80.0868413, 15.2402579 ], [ 80.08711, 15.239486 ], [ 80.0871146, 15.2384556 ], [ 80.0873832, 15.2376837 ], [ 80.0873943, 15.2351073 ], [ 80.0876631, 15.2343356 ], [ 80.0876808, 15.2302133 ], [ 80.0879505, 15.2291838 ], [ 80.0879617, 15.2266074 ], [ 80.0882303, 15.2258357 ], [ 80.0885268, 15.2186229 ], [ 80.0882626, 15.2183642 ], [ 80.0882703, 15.2165607 ], [ 80.087502, 15.2101166 ], [ 80.0872378, 15.2098578 ], [ 80.0867203, 15.2067641 ], [ 80.0864563, 15.2065054 ], [ 80.0861942, 15.2057314 ], [ 80.0859411, 15.2028962 ], [ 80.0856769, 15.2026375 ], [ 80.0851596, 15.1995437 ], [ 80.0848953, 15.199285 ], [ 80.0843703, 15.1979947 ], [ 80.08465, 15.1946464 ], [ 80.0839889, 15.1942568 ], [ 80.0831936, 15.1941253 ], [ 80.0834544, 15.1951569 ], [ 80.0830571, 15.1948975 ], [ 80.0829271, 15.1943818 ], [ 80.081867, 15.1941198 ], [ 80.0817362, 15.193604 ], [ 80.0812078, 15.1930865 ], [ 80.0801545, 15.1912788 ], [ 80.0794945, 15.1906314 ], [ 80.0784344, 15.1903695 ], [ 80.0780343, 15.1907549 ], [ 80.0774992, 15.1917832 ], [ 80.0774947, 15.1928138 ], [ 80.0778876, 15.1941036 ], [ 80.0776222, 15.1941024 ], [ 80.0769664, 15.1922963 ], [ 80.0771072, 15.1904935 ], [ 80.0776379, 15.1904955 ], [ 80.0780377, 15.1899818 ], [ 80.0781741, 15.1892096 ], [ 80.0773788, 15.1890771 ], [ 80.0768481, 15.1890748 ], [ 80.0755194, 15.1895848 ], [ 80.0751182, 15.1902275 ], [ 80.0741874, 15.1908675 ], [ 80.072595, 15.1909902 ], [ 80.0724595, 15.1915048 ], [ 80.0712633, 15.1921436 ], [ 80.0707323, 15.1922706 ], [ 80.0705969, 15.1927855 ], [ 80.0699324, 15.1931686 ], [ 80.0692658, 15.1938104 ], [ 80.0673973, 15.1963791 ], [ 80.0671297, 15.1968934 ], [ 80.0657977, 15.1981759 ], [ 80.0656631, 15.1986908 ], [ 80.0640691, 15.1991994 ], [ 80.0640668, 15.1997146 ], [ 80.0635355, 15.1998408 ], [ 80.0630027, 15.2003538 ], [ 80.0624714, 15.200481 ], [ 80.0623361, 15.2009956 ], [ 80.0606081, 15.2018898 ], [ 80.0592781, 15.2026571 ], [ 80.0584786, 15.2034267 ], [ 80.0575467, 15.2040673 ], [ 80.0571464, 15.2047093 ], [ 80.0555499, 15.2057331 ], [ 80.0550186, 15.2058601 ], [ 80.0552817, 15.2063765 ], [ 80.0536869, 15.2070136 ], [ 80.0523569, 15.2077807 ], [ 80.0518268, 15.2076501 ], [ 80.0518245, 15.2081655 ], [ 80.0507627, 15.2082893 ], [ 80.0502297, 15.2088025 ], [ 80.0473065, 15.2098206 ], [ 80.0459765, 15.2105879 ], [ 80.0451798, 15.2107138 ], [ 80.0451776, 15.211229 ], [ 80.043585, 15.2113506 ], [ 80.0433186, 15.2116072 ], [ 80.0417243, 15.2121156 ], [ 80.0414579, 15.2123721 ], [ 80.0401307, 15.2124957 ], [ 80.0401282, 15.2130109 ], [ 80.0382715, 15.2128737 ], [ 80.035407431249993, 15.212982329647359 ], [ 80.035407431249993, 15.21298232964736 ], [ 80.0321679, 15.2131052 ], [ 80.0308425, 15.212842 ], [ 80.0297835, 15.212322 ], [ 80.0276633, 15.2117975 ], [ 80.0252755, 15.2117873 ], [ 80.0244819, 15.2112685 ], [ 80.0223628, 15.2104865 ], [ 80.0186465, 15.2108571 ], [ 80.0186442, 15.2113725 ], [ 80.0175811, 15.2117539 ], [ 80.0162539, 15.2118773 ], [ 80.0151908, 15.2122587 ], [ 80.0133288, 15.213281 ], [ 80.0117327, 15.2141761 ], [ 80.0117302, 15.2146915 ], [ 80.0101353, 15.2153281 ], [ 80.0093369, 15.2158399 ], [ 80.0082749, 15.2159644 ], [ 80.0082713, 15.2167373 ], [ 80.0064116, 15.2172443 ], [ 80.0064093, 15.2177596 ], [ 80.0056132, 15.2177562 ], [ 80.0056121, 15.2180138 ], [ 80.0051721, 15.2179232 ], [ 80.0049897, 15.2180986 ], [ 80.004947, 15.2182683 ], [ 80.0045471, 15.2187819 ], [ 80.0032199, 15.2189043 ], [ 80.0029533, 15.2191608 ], [ 79.9999999, 15.2204498 ], [ 79.9999999, 15.219845 ], [ 80.0010943, 15.2195396 ], [ 80.0012288, 15.2190249 ], [ 80.0013626, 15.2188962 ], [ 80.002425, 15.2186433 ], [ 80.0029582, 15.2181304 ], [ 80.0032235, 15.2181315 ], [ 80.004112, 15.2176609 ], [ 80.0040224, 15.2174914 ], [ 80.0045537, 15.2173645 ], [ 80.0053522, 15.2168527 ], [ 80.0061487, 15.216728 ], [ 80.0061511, 15.2162126 ], [ 80.0080109, 15.2157057 ], [ 80.0080134, 15.2151903 ], [ 80.0096076, 15.2146821 ], [ 80.00961, 15.2141669 ], [ 80.0114698, 15.2136598 ], [ 80.0116044, 15.2131451 ], [ 80.0128017, 15.2125057 ], [ 80.0130684, 15.2122493 ], [ 80.0146631, 15.2116127 ], [ 80.0146656, 15.2110975 ], [ 80.0157274, 15.2109728 ], [ 80.0165252, 15.2105902 ], [ 80.0170576, 15.2102056 ], [ 80.0181196, 15.210082 ], [ 80.0181218, 15.2095668 ], [ 80.0199803, 15.2093171 ], [ 80.0199827, 15.2088019 ], [ 80.0234324, 15.2086876 ], [ 80.0236983, 15.2085604 ], [ 80.0243577, 15.2093362 ], [ 80.0244872, 15.2101096 ], [ 80.0260785, 15.2102449 ], [ 80.0287281, 15.2110293 ], [ 80.0292588, 15.2110315 ], [ 80.0303178, 15.2115515 ], [ 80.031379, 15.211556 ], [ 80.0319084, 15.2118159 ], [ 80.03560743125, 15.211831805587236 ], [ 80.0377457, 15.211841 ], [ 80.0380122, 15.2115845 ], [ 80.0393399, 15.2113326 ], [ 80.0396064, 15.2110759 ], [ 80.0419978, 15.2103133 ], [ 80.0430596, 15.2101895 ], [ 80.0430619, 15.2096741 ], [ 80.0441239, 15.2095494 ], [ 80.044922, 15.2090376 ], [ 80.0465159, 15.2086583 ], [ 80.0465181, 15.208143 ], [ 80.0481112, 15.2078922 ], [ 80.0481135, 15.2073768 ], [ 80.0491776, 15.2067369 ], [ 80.0499759, 15.2062249 ], [ 80.0505072, 15.2060988 ], [ 80.0505094, 15.2055836 ], [ 80.0513053, 15.2055868 ], [ 80.0510424, 15.2050705 ], [ 80.0515729, 15.2050727 ], [ 80.0515752, 15.2045575 ], [ 80.0521076, 15.2041727 ], [ 80.0526389, 15.2040467 ], [ 80.0530386, 15.2035331 ], [ 80.0531742, 15.2030183 ], [ 80.0537047, 15.2030206 ], [ 80.0546374, 15.2019939 ], [ 80.054774, 15.2012217 ], [ 80.0553046, 15.2012239 ], [ 80.0562373, 15.2001973 ], [ 80.0563739, 15.1994249 ], [ 80.0569044, 15.1994271 ], [ 80.0573044, 15.1989134 ], [ 80.0574397, 15.1983988 ], [ 80.0555837, 15.1981334 ], [ 80.0555848, 15.1978756 ], [ 80.0566466, 15.1977509 ], [ 80.0579715, 15.1981434 ], [ 80.0579738, 15.197628 ], [ 80.058506, 15.1972434 ], [ 80.059569, 15.1968618 ], [ 80.0597024, 15.1966048 ], [ 80.0605028, 15.1955776 ], [ 80.0613021, 15.194808 ], [ 80.0614376, 15.1942933 ], [ 80.0603781, 15.1939019 ], [ 80.0590509, 15.1940257 ], [ 80.0590487, 15.1945409 ], [ 80.0585181, 15.1945386 ], [ 80.0582562, 15.1937647 ], [ 80.0593191, 15.1933821 ], [ 80.0595856, 15.1931257 ], [ 80.0601167, 15.1929994 ], [ 80.0598538, 15.1924831 ], [ 80.0606514, 15.1920996 ], [ 80.061091, 15.1920607 ], [ 80.0611802, 15.1924887 ], [ 80.0603843, 15.1924853 ], [ 80.0603832, 15.1927429 ], [ 80.060648, 15.1928724 ], [ 80.0627708, 15.192753 ], [ 80.0633072, 15.191467 ], [ 80.0625096, 15.1918497 ], [ 80.0612732, 15.1918853 ], [ 80.0611847, 15.1914581 ], [ 80.0593282, 15.1913211 ], [ 80.0566741, 15.1915676 ], [ 80.0561447, 15.1913079 ], [ 80.0556141, 15.1913056 ], [ 80.0546879, 15.1906581 ], [ 80.0546468, 15.1904878 ], [ 80.0556164, 15.1907902 ], [ 80.0561469, 15.1907925 ], [ 80.0564112, 15.1910512 ], [ 80.0574724, 15.1910557 ], [ 80.0627829, 15.1900472 ], [ 80.0643769, 15.1895386 ], [ 80.0649097, 15.1890255 ], [ 80.0659727, 15.1886439 ], [ 80.0662414, 15.1878722 ], [ 80.0675701, 15.1873625 ], [ 80.0678389, 15.1865906 ], [ 80.0696969, 15.1863406 ], [ 80.0696992, 15.1858254 ], [ 80.0710278, 15.1853156 ], [ 80.0707661, 15.1845415 ], [ 80.0723601, 15.1840329 ], [ 80.0723578, 15.1845481 ], [ 80.0731537, 15.1845513 ], [ 80.073156, 15.1840361 ], [ 80.0744847, 15.1835264 ], [ 80.0747532, 15.1827545 ], [ 80.0755497, 15.1826284 ], [ 80.0758162, 15.1823719 ], [ 80.0763473, 15.1822457 ], [ 80.076617, 15.1812162 ], [ 80.0763512, 15.1813436 ], [ 80.0744935, 15.1814651 ], [ 80.0744913, 15.1819805 ], [ 80.0733623, 15.1828987 ], [ 80.072894, 15.1832621 ], [ 80.070503, 15.1840251 ], [ 80.0704996, 15.1847981 ], [ 80.0695279, 15.1849631 ], [ 80.0695295, 15.1846241 ], [ 80.0699702, 15.1845383 ], [ 80.0699713, 15.1842807 ], [ 80.0695313, 15.1841903 ], [ 80.0694418, 15.1840208 ], [ 80.0720987, 15.1831296 ], [ 80.07297, 15.1824366 ], [ 80.0742284, 15.1814642 ], [ 80.0742305, 15.1809488 ], [ 80.0744964, 15.1808206 ], [ 80.076884, 15.1808305 ], [ 80.0779418, 15.1816076 ], [ 80.0784718, 15.1817392 ], [ 80.0785996, 15.1827702 ], [ 80.0788636, 15.1830289 ], [ 80.078727, 15.184059 ], [ 80.0779322, 15.1837981 ], [ 80.0781942, 15.1845721 ], [ 80.07899, 15.1845753 ], [ 80.0789878, 15.1850905 ], [ 80.0803121, 15.1856112 ], [ 80.0804465, 15.1850966 ], [ 80.0803155, 15.1848384 ], [ 80.0808472, 15.1845829 ], [ 80.0817629, 15.1874207 ], [ 80.0820271, 15.1876794 ], [ 80.0826842, 15.1892279 ], [ 80.0832148, 15.1892302 ], [ 80.0834722, 15.1910348 ], [ 80.0840029, 15.1910368 ], [ 80.0837353, 15.1915511 ], [ 80.084266, 15.1915532 ], [ 80.0843992, 15.1912962 ], [ 80.0844038, 15.1902655 ], [ 80.0841418, 15.1894916 ], [ 80.0838776, 15.1892328 ], [ 80.0833537, 15.1876849 ], [ 80.0830895, 15.1874262 ], [ 80.0826986, 15.1858787 ], [ 80.0821681, 15.1858766 ], [ 80.0820382, 15.185103 ], [ 80.0807218, 15.1827789 ], [ 80.0801934, 15.1822614 ], [ 80.0796663, 15.1814865 ], [ 80.0795363, 15.1809705 ], [ 80.0790057, 15.1809684 ], [ 80.078483, 15.1791627 ], [ 80.077953, 15.1790314 ], [ 80.0775574, 15.1783861 ], [ 80.0774285, 15.1776126 ], [ 80.076898, 15.1776105 ], [ 80.0765053, 15.1763205 ], [ 80.0757137, 15.1752869 ], [ 80.0749235, 15.1739953 ], [ 80.0743987, 15.172705 ], [ 80.0741344, 15.1724462 ], [ 80.0736096, 15.1711559 ], [ 80.0730823, 15.1703808 ], [ 80.0729547, 15.1693497 ], [ 80.0724242, 15.1693476 ], [ 80.0720326, 15.1678 ], [ 80.0715041, 15.1672826 ], [ 80.0712435, 15.166251 ], [ 80.0707162, 15.1654759 ], [ 80.0705897, 15.1641871 ], [ 80.0700592, 15.164185 ], [ 80.0698007, 15.1626381 ], [ 80.0692701, 15.1626358 ], [ 80.0691416, 15.1616048 ], [ 80.0686168, 15.1603143 ], [ 80.068489, 15.1592833 ], [ 80.0679585, 15.1592811 ], [ 80.0677011, 15.1574765 ], [ 80.0671707, 15.1574744 ], [ 80.0670432, 15.1561856 ], [ 80.0667791, 15.1559269 ], [ 80.0662565, 15.1541212 ], [ 80.0659923, 15.1538624 ], [ 80.065867, 15.152316 ], [ 80.0653365, 15.152314 ], [ 80.0652091, 15.1510252 ], [ 80.0649449, 15.1507664 ], [ 80.0636357, 15.1468965 ], [ 80.0631131, 15.1450908 ], [ 80.0629855, 15.1440596 ], [ 80.062455, 15.1440575 ], [ 80.0624629, 15.1422541 ], [ 80.0619324, 15.1422518 ], [ 80.061805, 15.140963 ], [ 80.061541, 15.1407043 ], [ 80.0565745, 15.1241945 ], [ 80.0536971, 15.1151651 ], [ 80.0534331, 15.1149063 ], [ 80.0529152, 15.11207 ], [ 80.0526512, 15.1118113 ], [ 80.0521333, 15.1089751 ], [ 80.0518704, 15.1084588 ], [ 80.0516132, 15.1066542 ], [ 80.0513503, 15.1061377 ], [ 80.0508324, 15.1033015 ], [ 80.0505684, 15.1030428 ], [ 80.0497946, 15.0981443 ], [ 80.0495317, 15.0976279 ], [ 80.0495374, 15.0963397 ], [ 80.0492734, 15.096081 ], [ 80.0479923, 15.0860275 ], [ 80.0477742, 15.0754633 ], [ 80.0484501, 15.0726321 ], [ 80.0480507, 15.072888 ], [ 80.0479152, 15.0736605 ], [ 80.0476501, 15.0736593 ], [ 80.0476557, 15.0723711 ], [ 80.0471245, 15.0726265 ], [ 80.046865, 15.0713373 ], [ 80.0464253, 15.0712468 ], [ 80.0467342, 15.0708213 ], [ 80.0471417, 15.068762 ], [ 80.0466119, 15.0686304 ], [ 80.0458187, 15.0681118 ], [ 80.0455535, 15.0681107 ], [ 80.0447559, 15.0686227 ], [ 80.0434301, 15.068617 ], [ 80.0428986, 15.0688725 ], [ 80.0400698, 15.0694165 ], [ 80.0401135, 15.0689899 ], [ 80.040514, 15.0684764 ], [ 80.0397187, 15.068473 ], [ 80.0399855, 15.0680872 ], [ 80.040517, 15.0678319 ], [ 80.0429039, 15.0677136 ], [ 80.0429016, 15.0682288 ], [ 80.0444936, 15.0679778 ], [ 80.0444958, 15.0674626 ], [ 80.0450262, 15.0674649 ], [ 80.0447644, 15.0666909 ], [ 80.0450301, 15.0665628 ], [ 80.0458256, 15.066566 ], [ 80.0471496, 15.0669585 ], [ 80.0472794, 15.0674743 ], [ 80.0480713, 15.0682505 ], [ 80.0482021, 15.0687665 ], [ 80.0487325, 15.0687686 ], [ 80.0485983, 15.0690258 ], [ 80.0489861, 15.0713462 ], [ 80.0492513, 15.0713473 ], [ 80.0491709, 15.0594953 ], [ 80.0494406, 15.0584658 ], [ 80.0497616, 15.0458427 ], [ 80.0500324, 15.0445556 ], [ 80.0500575, 15.0388877 ], [ 80.0503261, 15.0381158 ], [ 80.0503318, 15.0368276 ], [ 80.0506004, 15.0360559 ], [ 80.0511579, 15.0298747 ], [ 80.0514265, 15.029103 ], [ 80.051431, 15.0280723 ], [ 80.0516994, 15.0273005 ], [ 80.0519725, 15.0254982 ], [ 80.0522456, 15.0236959 ], [ 80.0525232, 15.0208629 ], [ 80.0527916, 15.0200911 ], [ 80.052795, 15.0193181 ], [ 80.0530636, 15.0185464 ], [ 80.0536345, 15.0119826 ], [ 80.0539293, 15.0086295 ], [ 80.054176, 15.0066993 ], [ 80.0543632, 15.0046279 ], [ 80.0545761, 15.0028169 ], [ 80.05473, 15.001291 ], [ 80.0549282, 14.9989971 ], [ 80.0552393, 14.9976922 ], [ 80.0553703, 14.9967353 ], [ 80.0556323, 14.9953196 ], [ 80.0558185, 14.9948545 ], [ 80.0561399, 14.9937774 ], [ 80.0563692, 14.9923776 ], [ 80.0565984, 14.9909698 ], [ 80.0570405, 14.9894038 ], [ 80.0574382, 14.9881624 ], [ 80.0576219, 14.9870944 ], [ 80.058023, 14.9852042 ], [ 80.0582501, 14.9843011 ], [ 80.058523, 14.9824988 ], [ 80.0587914, 14.9817269 ], [ 80.0588016, 14.9794081 ], [ 80.0590745, 14.9776058 ], [ 80.0593429, 14.9768339 ], [ 80.0593475, 14.9758033 ], [ 80.0596204, 14.974001 ], [ 80.0601549, 14.9729726 ], [ 80.0601571, 14.9724572 ], [ 80.0606928, 14.9711713 ], [ 80.0606962, 14.9703984 ], [ 80.0609645, 14.9696266 ], [ 80.0609679, 14.9688535 ], [ 80.0615036, 14.9675676 ], [ 80.0623189, 14.9629333 ], [ 80.0625862, 14.962419 ], [ 80.0625905, 14.9613886 ], [ 80.0628589, 14.9606167 ], [ 80.0628623, 14.9598437 ], [ 80.0631307, 14.959072 ], [ 80.0634036, 14.9572695 ], [ 80.0634068, 14.9564965 ], [ 80.0636797, 14.9546942 ], [ 80.0639481, 14.9539224 ], [ 80.0639524, 14.9528917 ], [ 80.0642208, 14.9521201 ], [ 80.0642242, 14.951347 ], [ 80.0653076, 14.9459409 ], [ 80.0658432, 14.9446549 ], [ 80.0658466, 14.9438819 ], [ 80.0661171, 14.9425948 ], [ 80.0666527, 14.9413089 ], [ 80.066655, 14.9407935 ], [ 80.0671904, 14.9395075 ], [ 80.0674633, 14.937705 ], [ 80.0674665, 14.9369322 ], [ 80.0677349, 14.9361603 ], [ 80.0677392, 14.9351297 ], [ 80.0680076, 14.9343578 ], [ 80.068011, 14.933585 ], [ 80.0682792, 14.9328131 ], [ 80.0682826, 14.9320401 ], [ 80.0685554, 14.9302378 ], [ 80.0690942, 14.9281787 ], [ 80.0701653, 14.9256066 ], [ 80.0704312, 14.9253501 ], [ 80.0709668, 14.9240639 ], [ 80.0712327, 14.9238075 ], [ 80.0717693, 14.9222637 ], [ 80.0720354, 14.9220072 ], [ 80.0723038, 14.9212354 ], [ 80.0731031, 14.920208 ], [ 80.0733724, 14.9191785 ], [ 80.0739056, 14.9184077 ], [ 80.0744421, 14.916864 ], [ 80.0749842, 14.914032 ], [ 80.0755196, 14.9127459 ], [ 80.075524, 14.9117154 ], [ 80.076066, 14.9088835 ], [ 80.0768664, 14.9075985 ], [ 80.0771346, 14.9068266 ], [ 80.0776678, 14.9060558 ], [ 80.0784682, 14.9047708 ], [ 80.0790014, 14.9039999 ], [ 80.0792762, 14.9016822 ], [ 80.0798114, 14.9003962 ], [ 80.0798137, 14.8998808 ], [ 80.080349, 14.8985947 ], [ 80.0808865, 14.8967933 ], [ 80.0808899, 14.8960205 ], [ 80.0811569, 14.8955062 ], [ 80.0811601, 14.8947332 ], [ 80.0816944, 14.8937049 ], [ 80.0816977, 14.8929319 ], [ 80.0822331, 14.8916457 ], [ 80.0827738, 14.8890715 ], [ 80.0830397, 14.8888149 ], [ 80.0833113, 14.8872702 ], [ 80.0843807, 14.8849555 ], [ 80.0849193, 14.8828965 ], [ 80.0849237, 14.8818659 ], [ 80.0851919, 14.881094 ], [ 80.0854688, 14.8782609 ], [ 80.085737, 14.8774891 ], [ 80.0860093, 14.8756868 ], [ 80.0860191, 14.8733679 ], [ 80.0862885, 14.8723384 ], [ 80.0863057, 14.868216 ], [ 80.086575, 14.8671865 ], [ 80.0866432, 14.8509548 ], [ 80.0869449, 14.842196 ], [ 80.087214, 14.8411665 ], [ 80.0880541, 14.8303485 ], [ 80.0879243, 14.8298327 ], [ 80.0876593, 14.8298316 ], [ 80.0876508, 14.8318928 ], [ 80.087121, 14.8318907 ], [ 80.0875308, 14.8288004 ], [ 80.0875491, 14.8244205 ], [ 80.0878162, 14.8239062 ], [ 80.0878182, 14.823391 ], [ 80.0878194, 14.8231332 ], [ 80.0880853, 14.8228767 ], [ 80.0882236, 14.8215889 ], [ 80.0876933, 14.8217153 ], [ 80.0872939, 14.8221005 ], [ 80.0868935, 14.8230004 ], [ 80.0863631, 14.8231276 ], [ 80.0868897, 14.8239026 ], [ 80.0863599, 14.8239004 ], [ 80.0862076, 14.8285375 ], [ 80.0863384, 14.8290535 ], [ 80.0852794, 14.8289198 ], [ 80.0842216, 14.8285297 ], [ 80.0842183, 14.8293026 ], [ 80.0839536, 14.8293016 ], [ 80.0835601, 14.8282693 ], [ 80.0829012, 14.8276222 ], [ 80.0823726, 14.8273625 ], [ 80.0811851, 14.8261988 ], [ 80.0810554, 14.8256828 ], [ 80.0802609, 14.8256798 ], [ 80.080263, 14.8251644 ], [ 80.0797338, 14.8250331 ], [ 80.0796015, 14.8249042 ], [ 80.0792091, 14.823872 ], [ 80.0786793, 14.8238698 ], [ 80.0785485, 14.823354 ], [ 80.0782849, 14.8230952 ], [ 80.0781617, 14.8210336 ], [ 80.079221, 14.8210378 ], [ 80.079087, 14.821295 ], [ 80.0792123, 14.823099 ], [ 80.080008, 14.8228446 ], [ 80.0802684, 14.8238762 ], [ 80.0807976, 14.8240068 ], [ 80.0810613, 14.8242653 ], [ 80.0815905, 14.8243967 ], [ 80.0815884, 14.8249121 ], [ 80.082118, 14.8249142 ], [ 80.0825202, 14.8236275 ], [ 80.0827861, 14.823371 ], [ 80.0827884, 14.8228556 ], [ 80.0825257, 14.8223392 ], [ 80.0814707, 14.8213045 ], [ 80.0812091, 14.8205305 ], [ 80.0809452, 14.8202718 ], [ 80.0802896, 14.8188516 ], [ 80.0797595, 14.8189788 ], [ 80.0798978, 14.8174335 ], [ 80.0806999, 14.8156331 ], [ 80.0807033, 14.8148601 ], [ 80.0811053, 14.8138312 ], [ 80.0819025, 14.8131897 ], [ 80.0824329, 14.8130635 ], [ 80.0827009, 14.8122916 ], [ 80.0832304, 14.8122937 ], [ 80.0832371, 14.8107479 ], [ 80.0829717, 14.8108752 ], [ 80.0819124, 14.8108709 ], [ 80.0811157, 14.8113831 ], [ 80.080586, 14.811381 ], [ 80.0800552, 14.8116365 ], [ 80.0795257, 14.8116345 ], [ 80.0784629, 14.8124031 ], [ 80.0779333, 14.812401 ], [ 80.0776689, 14.8122716 ], [ 80.077534, 14.8127862 ], [ 80.0767362, 14.813556 ], [ 80.0762032, 14.814327 ], [ 80.076069, 14.8148416 ], [ 80.0750082, 14.8152234 ], [ 80.0744763, 14.8157365 ], [ 80.0736795, 14.8162487 ], [ 80.0727506, 14.8166318 ], [ 80.0726164, 14.8171466 ], [ 80.0715559, 14.8173999 ], [ 80.0715536, 14.8179153 ], [ 80.0707597, 14.8177828 ], [ 80.0696982, 14.8182939 ], [ 80.0691664, 14.818807 ], [ 80.0678404, 14.8191886 ], [ 80.0677054, 14.8197033 ], [ 80.0667772, 14.8200856 ], [ 80.0665113, 14.8203421 ], [ 80.0659815, 14.82034 ], [ 80.0654508, 14.8205955 ], [ 80.0646563, 14.8205923 ], [ 80.0641254, 14.8208476 ], [ 80.0625365, 14.8208412 ], [ 80.0617408, 14.8210956 ], [ 80.0604166, 14.8210903 ], [ 80.0598891, 14.8205728 ], [ 80.0590968, 14.8200542 ], [ 80.0583046, 14.8195358 ], [ 80.0576436, 14.819147 ], [ 80.0575138, 14.8186312 ], [ 80.0569848, 14.8184997 ], [ 80.0565898, 14.8178545 ], [ 80.0563295, 14.8168229 ], [ 80.0563361, 14.8152769 ], [ 80.0560736, 14.8147605 ], [ 80.0560369, 14.8135598 ], [ 80.0556829, 14.8133415 ], [ 80.0548918, 14.8125653 ], [ 80.0530362, 14.8129446 ], [ 80.0511825, 14.8129369 ], [ 80.0501243, 14.8126749 ], [ 80.049332, 14.8121563 ], [ 80.0493331, 14.8118987 ], [ 80.0495979, 14.8118998 ], [ 80.050215, 14.8125054 ], [ 80.050655, 14.8124194 ], [ 80.0506538, 14.8126772 ], [ 80.0510921, 14.8127666 ], [ 80.0519791, 14.8124249 ], [ 80.051978, 14.8126825 ], [ 80.0529458, 14.8127741 ], [ 80.0538341, 14.8121748 ], [ 80.053929, 14.8110561 ], [ 80.0538419, 14.8103714 ], [ 80.0541067, 14.8103725 ], [ 80.0542409, 14.8098577 ], [ 80.0546402, 14.8094725 ], [ 80.05517, 14.8094746 ], [ 80.057991, 14.8097031 ], [ 80.0595833, 14.8089367 ], [ 80.0602067, 14.8083362 ], [ 80.060476, 14.8073067 ], [ 80.0608351, 14.8063653 ], [ 80.0604849, 14.8052455 ], [ 80.0607497, 14.8052466 ], [ 80.0612749, 14.8062793 ], [ 80.0606493, 14.8073952 ], [ 80.0604705, 14.808595 ], [ 80.0594066, 14.8096212 ], [ 80.0580802, 14.8101312 ], [ 80.0546376, 14.810117 ], [ 80.0545024, 14.8106318 ], [ 80.0541035, 14.8111453 ], [ 80.0541006, 14.8117891 ], [ 80.0554253, 14.811666 ], [ 80.0554231, 14.8121814 ], [ 80.0556879, 14.8121826 ], [ 80.0556846, 14.8129554 ], [ 80.0562119, 14.8134729 ], [ 80.0564713, 14.8147622 ], [ 80.0570008, 14.8147643 ], [ 80.0571318, 14.8150225 ], [ 80.0571239, 14.8168261 ], [ 80.0575149, 14.8183736 ], [ 80.0596287, 14.8195411 ], [ 80.0601562, 14.8200586 ], [ 80.0609507, 14.8200618 ], [ 80.0622737, 14.8203249 ], [ 80.0633354, 14.819814 ], [ 80.0641299, 14.8198172 ], [ 80.0649266, 14.819305 ], [ 80.0670481, 14.81867 ], [ 80.0674471, 14.8181563 ], [ 80.0675822, 14.8176416 ], [ 80.0686432, 14.8172589 ], [ 80.0691751, 14.8167458 ], [ 80.0707668, 14.8161085 ], [ 80.0707691, 14.8155933 ], [ 80.0723609, 14.8149552 ], [ 80.0734234, 14.8141865 ], [ 80.0744871, 14.8131601 ], [ 80.0755482, 14.8127783 ], [ 80.0760832, 14.8114923 ], [ 80.0742272, 14.8120002 ], [ 80.0740923, 14.8125148 ], [ 80.0739596, 14.8126428 ], [ 80.0724607, 14.8126774 ], [ 80.0723735, 14.8119926 ], [ 80.0739647, 14.8114838 ], [ 80.0739668, 14.8109684 ], [ 80.0758216, 14.8107182 ], [ 80.0758239, 14.810203 ], [ 80.0771497, 14.8098214 ], [ 80.0774157, 14.8095647 ], [ 80.0787419, 14.8090548 ], [ 80.0803316, 14.8089327 ], [ 80.0803336, 14.8084175 ], [ 80.0805979, 14.808547 ], [ 80.0829825, 14.8082988 ], [ 80.0837759, 14.8085596 ], [ 80.0872193, 14.8084449 ], [ 80.0865599, 14.8076692 ], [ 80.086561, 14.8074116 ], [ 80.0870928, 14.8068985 ], [ 80.0870961, 14.8061255 ], [ 80.0867009, 14.8057369 ], [ 80.0861707, 14.8058641 ], [ 80.0861739, 14.8050913 ], [ 80.0856427, 14.8054751 ], [ 80.0851131, 14.8054731 ], [ 80.0845812, 14.8059862 ], [ 80.0843164, 14.8059853 ], [ 80.0841839, 14.8058564 ], [ 80.0841851, 14.8055986 ], [ 80.0867122, 14.8030321 ], [ 80.0861821, 14.8031584 ], [ 80.0853849, 14.8037998 ], [ 80.0851254, 14.8025105 ], [ 80.084331, 14.8025075 ], [ 80.0843321, 14.8022499 ], [ 80.0848617, 14.8022519 ], [ 80.0849968, 14.8014795 ], [ 80.0852628, 14.8012228 ], [ 80.0854941, 14.7992502 ], [ 80.0848751, 14.7990308 ], [ 80.0843472, 14.7986428 ], [ 80.0838218, 14.7976101 ], [ 80.0832922, 14.797608 ], [ 80.0831615, 14.797092 ], [ 80.0823714, 14.7960584 ], [ 80.0823314, 14.7956305 ], [ 80.0827697, 14.7959306 ], [ 80.0838279, 14.7961926 ], [ 80.0843548, 14.7968392 ], [ 80.08409, 14.7968382 ], [ 80.0840866, 14.797611 ], [ 80.0843516, 14.7976122 ], [ 80.0844391, 14.7982155 ], [ 80.0846135, 14.7982569 ], [ 80.0851416, 14.7986458 ], [ 80.0851405, 14.7989036 ], [ 80.0861987, 14.7991654 ], [ 80.0857957, 14.8004521 ], [ 80.0857935, 14.8009673 ], [ 80.0860573, 14.801226 ], [ 80.0861879, 14.8017418 ], [ 80.086983, 14.8016158 ], [ 80.0875147, 14.8011024 ], [ 80.088045, 14.8009762 ], [ 80.0879131, 14.800718 ], [ 80.0879154, 14.8002028 ], [ 80.0881811, 14.7999461 ], [ 80.0883183, 14.7989161 ], [ 80.0885831, 14.7989172 ], [ 80.0889777, 14.7994339 ], [ 80.0889768, 14.7996917 ], [ 80.0885746, 14.8009783 ], [ 80.089368, 14.8012391 ], [ 80.0893648, 14.8020121 ], [ 80.090158, 14.8022729 ], [ 80.0901463, 14.805107 ], [ 80.0909381, 14.8057537 ], [ 80.0914673, 14.8058851 ], [ 80.091462, 14.8071733 ], [ 80.0909322, 14.8071712 ], [ 80.0910632, 14.8074294 ], [ 80.09106, 14.8082024 ], [ 80.0907908, 14.8092319 ], [ 80.0910533, 14.8097482 ], [ 80.0910492, 14.8107789 ], [ 80.0913128, 14.8110376 ], [ 80.0914393, 14.812584 ], [ 80.091969, 14.8125861 ], [ 80.0912871, 14.8172211 ], [ 80.0910201, 14.8177354 ], [ 80.0910169, 14.8185082 ], [ 80.0908838, 14.8187654 ], [ 80.0914136, 14.8187675 ], [ 80.0920849, 14.8164513 ], [ 80.0920945, 14.8141325 ], [ 80.0923678, 14.8120724 ], [ 80.092636, 14.8113003 ], [ 80.0926457, 14.8089817 ], [ 80.0929137, 14.8082096 ], [ 80.0931924, 14.8048613 ], [ 80.0934593, 14.804347 ], [ 80.0934637, 14.8033164 ], [ 80.093736, 14.8015139 ], [ 80.094004, 14.800742 ], [ 80.0940084, 14.7997116 ], [ 80.0942764, 14.7989395 ], [ 80.0942805, 14.7979091 ], [ 80.0945476, 14.7973948 ], [ 80.0945519, 14.7963642 ], [ 80.0948188, 14.7958499 ], [ 80.0948231, 14.7948193 ], [ 80.09509, 14.7943051 ], [ 80.0953624, 14.7925026 ], [ 80.0956283, 14.7922459 ], [ 80.0956336, 14.7909577 ], [ 80.0959004, 14.7904434 ], [ 80.0959037, 14.7896706 ], [ 80.0964385, 14.7883844 ], [ 80.0964417, 14.7876114 ], [ 80.0967088, 14.7870972 ], [ 80.0972501, 14.7842652 ], [ 80.097784, 14.7832366 ], [ 80.097787, 14.7824636 ], [ 80.0980541, 14.7819494 ], [ 80.0980583, 14.7809187 ], [ 80.0991303, 14.7778312 ], [ 80.0991323, 14.7773158 ], [ 80.0996672, 14.7760297 ], [ 80.0996693, 14.7755145 ], [ 80.1014132, 14.7701104 ], [ 80.1035315, 14.7701187 ], [ 80.1035326, 14.7698611 ], [ 80.1016791, 14.7698539 ], [ 80.10208, 14.7688248 ], [ 80.1020821, 14.7683094 ], [ 80.102616, 14.7672811 ], [ 80.1028861, 14.7659938 ], [ 80.1034187, 14.7652229 ], [ 80.1034207, 14.7647077 ], [ 80.1039535, 14.7639367 ], [ 80.1047594, 14.7611057 ], [ 80.1052932, 14.7600772 ], [ 80.1052952, 14.7595617 ], [ 80.1055612, 14.7593051 ], [ 80.1066307, 14.7567328 ], [ 80.1068966, 14.7564761 ], [ 80.1068997, 14.7557031 ], [ 80.1074334, 14.7546746 ], [ 80.1074355, 14.7541594 ], [ 80.1082384, 14.7521012 ], [ 80.1090367, 14.7510738 ], [ 80.1090388, 14.7505584 ], [ 80.1093047, 14.7503017 ], [ 80.11064, 14.7474727 ], [ 80.110777, 14.7464427 ], [ 80.1113081, 14.7460577 ], [ 80.1118381, 14.7459314 ], [ 80.1118401, 14.745416 ], [ 80.1123697, 14.7454181 ], [ 80.1127685, 14.7449044 ], [ 80.1130363, 14.7441324 ], [ 80.1133022, 14.7438757 ], [ 80.11357, 14.7431038 ], [ 80.1143684, 14.7420762 ], [ 80.1145075, 14.740531 ], [ 80.1141089, 14.7407871 ], [ 80.1137059, 14.7423314 ], [ 80.1131765, 14.7423293 ], [ 80.1130416, 14.7428441 ], [ 80.1129091, 14.7429721 ], [ 80.1121144, 14.7430983 ], [ 80.1118549, 14.741809 ], [ 80.1113259, 14.7416776 ], [ 80.1107995, 14.7409027 ], [ 80.1102711, 14.740643 ], [ 80.1094805, 14.7397387 ], [ 80.1100116, 14.7393537 ], [ 80.1108063, 14.7392284 ], [ 80.1108042, 14.7397438 ], [ 80.1123905, 14.7402652 ], [ 80.1127851, 14.740782 ], [ 80.1126491, 14.741812 ], [ 80.1131775, 14.7420717 ], [ 80.1138452, 14.7405283 ], [ 80.114111, 14.7402717 ], [ 80.114113, 14.7397564 ], [ 80.1146447, 14.7392431 ], [ 80.1151773, 14.7384722 ], [ 80.1150484, 14.7376988 ], [ 80.1147838, 14.7376979 ], [ 80.1146477, 14.7384703 ], [ 80.1145154, 14.7385981 ], [ 80.1142506, 14.7385971 ], [ 80.1141183, 14.7384682 ], [ 80.1141204, 14.7379528 ], [ 80.1154546, 14.7353815 ], [ 80.115197, 14.7335769 ], [ 80.114543, 14.7317708 ], [ 80.114014, 14.7316395 ], [ 80.1138817, 14.7315106 ], [ 80.1134892, 14.7304784 ], [ 80.112695, 14.7304754 ], [ 80.112698, 14.7297026 ], [ 80.1121686, 14.7297005 ], [ 80.112041, 14.7284117 ], [ 80.1119097, 14.7282819 ], [ 80.1075261, 14.7292115 ], [ 80.1070632, 14.7257582 ], [ 80.106967547753356, 14.7230757078125 ], [ 80.1069275, 14.7219526 ], [ 80.106787, 14.7209924 ], [ 80.1064807, 14.7201563 ], [ 80.1059176, 14.7174744 ], [ 80.1050832, 14.7143424 ], [ 80.1049509, 14.7142135 ], [ 80.1048233, 14.7131823 ], [ 80.1058821, 14.7131864 ], [ 80.1056226, 14.7118971 ], [ 80.1048286, 14.7118941 ], [ 80.1049615, 14.711637 ], [ 80.1049647, 14.710864 ], [ 80.104839, 14.7093176 ], [ 80.1061643, 14.7089358 ], [ 80.10643, 14.7086792 ], [ 80.10696, 14.7085529 ], [ 80.1068333, 14.7070063 ], [ 80.1069683, 14.7064917 ], [ 80.1077649, 14.70585 ], [ 80.1090902, 14.7054692 ], [ 80.1092251, 14.7046968 ], [ 80.1094909, 14.7044401 ], [ 80.109492, 14.7041825 ], [ 80.1092283, 14.7039237 ], [ 80.1093684, 14.7021207 ], [ 80.1098993, 14.7017359 ], [ 80.1106955, 14.7012235 ], [ 80.1114901, 14.7010982 ], [ 80.1114933, 14.7003254 ], [ 80.11229, 14.6996837 ], [ 80.1130847, 14.6995584 ], [ 80.113749, 14.698788 ], [ 80.1137573, 14.6967268 ], [ 80.1128339, 14.6960787 ], [ 80.1120405, 14.6959472 ], [ 80.1120425, 14.695432 ], [ 80.1109853, 14.6950409 ], [ 80.1107216, 14.6947824 ], [ 80.1101928, 14.694652 ], [ 80.1103268, 14.6941371 ], [ 80.1097995, 14.6936198 ], [ 80.109406, 14.6928453 ], [ 80.1099354, 14.6928474 ], [ 80.1099333, 14.6933626 ], [ 80.1107258, 14.6937518 ], [ 80.1112552, 14.6937538 ], [ 80.1117855, 14.6934981 ], [ 80.1125791, 14.6936304 ], [ 80.1129777, 14.6931167 ], [ 80.1129798, 14.6926013 ], [ 80.1125848, 14.6922129 ], [ 80.1088823, 14.6914257 ], [ 80.10875, 14.6912968 ], [ 80.1086275, 14.6889774 ], [ 80.1088929, 14.6888493 ], [ 80.1099511, 14.6889825 ], [ 80.109949, 14.6894979 ], [ 80.1107403, 14.6901447 ], [ 80.1125927, 14.690281 ], [ 80.1128543, 14.6910549 ], [ 80.1136494, 14.6908003 ], [ 80.1136473, 14.6913156 ], [ 80.114705, 14.6915773 ], [ 80.1147071, 14.6910621 ], [ 80.115237, 14.6909347 ], [ 80.1160304, 14.691067 ], [ 80.1164292, 14.6905533 ], [ 80.1169617, 14.6897824 ], [ 80.1168318, 14.6892666 ], [ 80.1173612, 14.6892685 ], [ 80.1177598, 14.6887548 ], [ 80.1181614, 14.6877257 ], [ 80.1192238, 14.6868274 ], [ 80.1197537, 14.6867011 ], [ 80.1198887, 14.6859287 ], [ 80.1206859, 14.6851587 ], [ 80.1212183, 14.6843878 ], [ 80.1213531, 14.6838729 ], [ 80.1229469, 14.6824615 ], [ 80.127453, 14.6808041 ], [ 80.127584, 14.6810623 ], [ 80.1275808, 14.6818351 ], [ 80.1278445, 14.6820939 ], [ 80.1279752, 14.6826096 ], [ 80.1290331, 14.6828712 ], [ 80.1292947, 14.6836452 ], [ 80.130619, 14.6833925 ], [ 80.1306211, 14.6828773 ], [ 80.1314162, 14.6826225 ], [ 80.1310095, 14.6849398 ], [ 80.1311372, 14.6862286 ], [ 80.1314018, 14.6862296 ], [ 80.1323451, 14.6818531 ], [ 80.1323481, 14.6810801 ], [ 80.1328866, 14.6787631 ], [ 80.1331533, 14.6782488 ], [ 80.1331888, 14.6692311 ], [ 80.1326645, 14.6679408 ], [ 80.1318726, 14.6674225 ], [ 80.1313464, 14.6666476 ], [ 80.1312166, 14.6661317 ], [ 80.1298947, 14.6657399 ], [ 80.1293674, 14.6652226 ], [ 80.1285734, 14.6652196 ], [ 80.1277806, 14.6649589 ], [ 80.1248704, 14.6646904 ], [ 80.1246067, 14.6644318 ], [ 80.1235491, 14.66417 ], [ 80.122489, 14.664553 ], [ 80.122491, 14.6640377 ], [ 80.1218267, 14.6645505 ], [ 80.1215591, 14.6653226 ], [ 80.121161, 14.665707 ], [ 80.1201008, 14.6660899 ], [ 80.1200987, 14.6666053 ], [ 80.1179789, 14.6672409 ], [ 80.1158617, 14.6672328 ], [ 80.1145392, 14.6669701 ], [ 80.1132191, 14.6661922 ], [ 80.1125585, 14.6658036 ], [ 80.1118983, 14.6655435 ], [ 80.1117277, 14.6645998 ], [ 80.111465, 14.6640835 ], [ 80.1113795, 14.662965 ], [ 80.1116462, 14.6624505 ], [ 80.1119108, 14.6624517 ], [ 80.112709, 14.6614241 ], [ 80.1135035, 14.6612978 ], [ 80.1143905, 14.6605688 ], [ 80.114302, 14.6601419 ], [ 80.1154542, 14.6592846 ], [ 80.1153659, 14.6588576 ], [ 80.1156305, 14.6588586 ], [ 80.1156284, 14.659374 ], [ 80.1148294, 14.6606592 ], [ 80.1141652, 14.6611719 ], [ 80.1137666, 14.6616858 ], [ 80.1127974, 14.661851 ], [ 80.1125731, 14.6621965 ], [ 80.1119087, 14.6629669 ], [ 80.11164, 14.6639965 ], [ 80.1121662, 14.6647714 ], [ 80.1121641, 14.6652868 ], [ 80.1125175, 14.6656335 ], [ 80.1132212, 14.6656769 ], [ 80.1145413, 14.6664549 ], [ 80.116393, 14.6667197 ], [ 80.1190401, 14.6666012 ], [ 80.1194387, 14.6660875 ], [ 80.1199732, 14.6648011 ], [ 80.1202389, 14.6645445 ], [ 80.1201091, 14.6640287 ], [ 80.1206383, 14.6640308 ], [ 80.1206403, 14.6635154 ], [ 80.1219641, 14.6633912 ], [ 80.1222283, 14.6635214 ], [ 80.1222304, 14.6630062 ], [ 80.1224946, 14.6631355 ], [ 80.1240824, 14.6631415 ], [ 80.1246109, 14.6634012 ], [ 80.1264623, 14.6636658 ], [ 80.1275209, 14.6636698 ], [ 80.1291079, 14.6639334 ], [ 80.1306938, 14.6644545 ], [ 80.1320121, 14.6657478 ], [ 80.1328055, 14.6658801 ], [ 80.1332, 14.6663968 ], [ 80.1335923, 14.6676866 ], [ 80.1341217, 14.6676885 ], [ 80.1347749, 14.6697522 ], [ 80.134498, 14.6728431 ], [ 80.1347566, 14.67439 ], [ 80.1344778, 14.6779962 ], [ 80.1339424, 14.6795401 ], [ 80.1339382, 14.6805707 ], [ 80.1336715, 14.681085 ], [ 80.1334018, 14.6823723 ], [ 80.1333977, 14.6834029 ], [ 80.1328634, 14.6846892 ], [ 80.1328501, 14.6880387 ], [ 80.1331138, 14.6882972 ], [ 80.1346857, 14.6924257 ], [ 80.1348144, 14.6934567 ], [ 80.1356074, 14.6937174 ], [ 80.1353377, 14.6950046 ], [ 80.1358681, 14.6947489 ], [ 80.1361995, 14.6957515 ], [ 80.1363914, 14.6962968 ], [ 80.1369189, 14.6968141 ], [ 80.1371765, 14.6986187 ], [ 80.1377059, 14.6986206 ], [ 80.138361, 14.7001691 ], [ 80.1391501, 14.7014603 ], [ 80.1399412, 14.7022362 ], [ 80.1404657, 14.7035263 ], [ 80.1404627, 14.7042993 ], [ 80.1401969, 14.7045559 ], [ 80.1401928, 14.7055866 ], [ 80.1399261, 14.7061008 ], [ 80.1399149, 14.7089351 ], [ 80.1393825, 14.709706 ], [ 80.1391128, 14.7109933 ], [ 80.1385814, 14.7115066 ], [ 80.1372436, 14.7151089 ], [ 80.1367122, 14.7156223 ], [ 80.1353784, 14.7181938 ], [ 80.1348469, 14.7187071 ], [ 80.1343113, 14.7202511 ], [ 80.1340456, 14.7205077 ], [ 80.1339117, 14.7210226 ], [ 80.1333822, 14.7210205 ], [ 80.133512, 14.7215365 ], [ 80.1329796, 14.7223074 ], [ 80.1324481, 14.7228207 ], [ 80.13244706056598, 14.7230757078125 ], [ 80.132446534278799, 14.723204823599817 ], [ 80.132446245348589, 14.723275707812499 ], [ 80.132446, 14.7233359 ], [ 80.1316468, 14.7246213 ], [ 80.1316426, 14.7256519 ], [ 80.1312434, 14.726294 ], [ 80.1307135, 14.7264214 ], [ 80.1307084, 14.7277096 ], [ 80.1301799, 14.7274499 ], [ 80.1298184, 14.7289059 ], [ 80.129378, 14.7293788 ], [ 80.1284485, 14.7300199 ], [ 80.1280493, 14.7306621 ], [ 80.1275192, 14.7307895 ], [ 80.1275171, 14.7313047 ], [ 80.1269887, 14.7310451 ], [ 80.1266292, 14.7319857 ], [ 80.1261905, 14.7320726 ], [ 80.1258309, 14.7330133 ], [ 80.1253922, 14.7331002 ], [ 80.1251263, 14.7333569 ], [ 80.124502, 14.7342966 ], [ 80.1243279, 14.7343845 ], [ 80.124327, 14.7346423 ], [ 80.1245918, 14.7346432 ], [ 80.1246825, 14.7344737 ], [ 80.1248575, 14.7343866 ], [ 80.1252151, 14.7337026 ], [ 80.1253901, 14.7336156 ], [ 80.1254808, 14.7334459 ], [ 80.1259206, 14.7333599 ], [ 80.1261869, 14.732974 ], [ 80.1267169, 14.7328477 ], [ 80.1268097, 14.7321628 ], [ 80.1269851, 14.7319464 ], [ 80.1277815, 14.7314342 ], [ 80.1283115, 14.7313078 ], [ 80.1284453, 14.7307929 ], [ 80.1297742, 14.7295096 ], [ 80.1299989, 14.7290829 ], [ 80.1301739, 14.7289959 ], [ 80.1313697, 14.727712 ], [ 80.1319023, 14.7269411 ], [ 80.1319044, 14.7264259 ], [ 80.1324358, 14.7259126 ], [ 80.1329684, 14.7251414 ], [ 80.1335029, 14.7238553 ], [ 80.1337687, 14.7235986 ], [ 80.13388070845572, 14.723275707812499 ], [ 80.1340365, 14.7228266 ], [ 80.1348346, 14.721799 ], [ 80.1351034, 14.7207693 ], [ 80.1353693, 14.7205126 ], [ 80.1355041, 14.7199978 ], [ 80.1360335, 14.7199999 ], [ 80.1364353, 14.718713 ], [ 80.1369667, 14.7181997 ], [ 80.137766, 14.7169145 ], [ 80.1383005, 14.7156281 ], [ 80.1388329, 14.7148572 ], [ 80.1393644, 14.7143439 ], [ 80.1395022, 14.713056 ], [ 80.1400317, 14.7130581 ], [ 80.1404334, 14.7117712 ], [ 80.1409658, 14.7110003 ], [ 80.1415012, 14.7094563 ], [ 80.141767, 14.7091997 ], [ 80.1425681, 14.7073991 ], [ 80.1425721, 14.7063685 ], [ 80.1431056, 14.7053397 ], [ 80.1431077, 14.7048243 ], [ 80.1439068, 14.7035391 ], [ 80.1439098, 14.7027661 ], [ 80.1449796, 14.6999358 ], [ 80.1449826, 14.6991628 ], [ 80.1452493, 14.6986486 ], [ 80.1455201, 14.6971037 ], [ 80.1463232, 14.6947877 ], [ 80.1463262, 14.6940147 ], [ 80.1465929, 14.6935004 ], [ 80.1468635, 14.6919555 ], [ 80.1471302, 14.691441 ], [ 80.1471332, 14.6906682 ], [ 80.1479372, 14.6880946 ], [ 80.1484797, 14.684747 ], [ 80.1487463, 14.6842326 ], [ 80.1487494, 14.6834598 ], [ 80.149017, 14.6826877 ], [ 80.1492827, 14.682431 ], [ 80.1492867, 14.6814004 ], [ 80.1495564, 14.6801131 ], [ 80.149824, 14.6793411 ], [ 80.149828, 14.6783105 ], [ 80.1500937, 14.6780538 ], [ 80.1503644, 14.6765089 ], [ 80.1509027, 14.674192 ], [ 80.1517085, 14.6711029 ], [ 80.1519752, 14.6705887 ], [ 80.1522468, 14.668786 ], [ 80.1525135, 14.6682717 ], [ 80.1525163, 14.6674987 ], [ 80.1530497, 14.66647 ], [ 80.1530527, 14.665697 ], [ 80.1533192, 14.6651827 ], [ 80.1541281, 14.6613207 ], [ 80.1543976, 14.6600334 ], [ 80.1546634, 14.6597767 ], [ 80.1546664, 14.6590037 ], [ 80.1552005, 14.6577174 ], [ 80.1552026, 14.6572022 ], [ 80.1560064, 14.6546286 ], [ 80.1562769, 14.6530835 ], [ 80.1565435, 14.6525692 ], [ 80.1565466, 14.6517962 ], [ 80.1570807, 14.6505099 ], [ 80.1570837, 14.6497369 ], [ 80.1576169, 14.6487081 ], [ 80.1576208, 14.6476775 ], [ 80.1578875, 14.6471633 ], [ 80.1578894, 14.6466479 ], [ 80.1584235, 14.6453615 ], [ 80.1586932, 14.6440742 ], [ 80.1589588, 14.6438176 ], [ 80.1592292, 14.6422725 ], [ 80.1594959, 14.6417582 ], [ 80.1594989, 14.6409852 ], [ 80.1600321, 14.6399565 ], [ 80.160034, 14.6394413 ], [ 80.1605681, 14.6381548 ], [ 80.1605702, 14.6376396 ], [ 80.1611034, 14.6366108 ], [ 80.1611062, 14.6358378 ], [ 80.1616384, 14.6350667 ], [ 80.1621744, 14.6332651 ], [ 80.1621774, 14.6324921 ], [ 80.1629762, 14.6312067 ], [ 80.1629782, 14.6306913 ], [ 80.1640465, 14.6281187 ], [ 80.164312, 14.627862 ], [ 80.1651136, 14.6258036 ], [ 80.1651156, 14.6252882 ], [ 80.1659132, 14.6242604 ], [ 80.1659162, 14.6234874 ], [ 80.1661818, 14.6232308 ], [ 80.1664494, 14.6224587 ], [ 80.166715, 14.622202 ], [ 80.1667168, 14.6216868 ], [ 80.1669824, 14.62143 ], [ 80.1685836, 14.6178286 ], [ 80.1693814, 14.6168008 ], [ 80.1693833, 14.6162854 ], [ 80.170182, 14.615 ], [ 80.1712472, 14.6132001 ], [ 80.1712491, 14.6126847 ], [ 80.1717811, 14.6119136 ], [ 80.1723122, 14.6114003 ], [ 80.1724488, 14.6103701 ], [ 80.172978, 14.610372 ], [ 80.174175, 14.6085727 ], [ 80.1743097, 14.6080578 ], [ 80.1753681, 14.6080614 ], [ 80.1757664, 14.6075475 ], [ 80.1759021, 14.6067751 ], [ 80.1766968, 14.6065203 ], [ 80.1773608, 14.6057496 ], [ 80.1772307, 14.6052338 ], [ 80.178026, 14.6048498 ], [ 80.1790848, 14.604725 ], [ 80.1790867, 14.6042098 ], [ 80.1809414, 14.6035715 ], [ 80.1812069, 14.6033149 ], [ 80.1822661, 14.6030609 ], [ 80.1825316, 14.6028042 ], [ 80.1841196, 14.6026814 ], [ 80.1842525, 14.6024241 ], [ 80.1842562, 14.6013935 ], [ 80.1841249, 14.6012639 ], [ 80.1835962, 14.6011336 ], [ 80.1835944, 14.6016488 ], [ 80.1828006, 14.6016462 ], [ 80.1829372, 14.6003584 ], [ 80.1828059, 14.6002285 ], [ 80.182277, 14.6000983 ], [ 80.1822751, 14.6006137 ], [ 80.1806872, 14.6007365 ], [ 80.1798915, 14.6012489 ], [ 80.1788327, 14.6013746 ], [ 80.1788308, 14.6018898 ], [ 80.1780366, 14.6020155 ], [ 80.1779043, 14.6018866 ], [ 80.1777743, 14.6013708 ], [ 80.1772451, 14.6013689 ], [ 80.1771143, 14.6008532 ], [ 80.1768096, 14.6004245 ], [ 80.1762823, 14.5999072 ], [ 80.1756643, 14.5995598 ], [ 80.1746099, 14.5985254 ], [ 80.1743481, 14.5977515 ], [ 80.173818, 14.5980072 ], [ 80.1736806, 14.599295 ], [ 80.1726153, 14.6010949 ], [ 80.1726125, 14.6018679 ], [ 80.1722122, 14.6028972 ], [ 80.1708898, 14.6027632 ], [ 80.1706248, 14.6028915 ], [ 80.1703553, 14.6041788 ], [ 80.1708839, 14.604309 ], [ 80.171278, 14.604955 ], [ 80.1718053, 14.6054723 ], [ 80.1719361, 14.6059881 ], [ 80.1727299, 14.6059909 ], [ 80.1728578, 14.6070219 ], [ 80.1735122, 14.6090856 ], [ 80.172983, 14.6090837 ], [ 80.1729799, 14.6098567 ], [ 80.171391, 14.610237 ], [ 80.1708603, 14.6106222 ], [ 80.1705929, 14.6113941 ], [ 80.1697994, 14.6112621 ], [ 80.169009, 14.610358 ], [ 80.1698028, 14.6103606 ], [ 80.169673, 14.6095872 ], [ 80.1690158, 14.6085543 ], [ 80.1687512, 14.6085534 ], [ 80.1686137, 14.6098412 ], [ 80.1682149, 14.6104835 ], [ 80.1689168, 14.6107029 ], [ 80.1690071, 14.6108732 ], [ 80.1684776, 14.6109996 ], [ 80.1679469, 14.6113848 ], [ 80.1678083, 14.6129303 ], [ 80.1691708, 14.6135381 ], [ 80.1691274, 14.6139656 ], [ 80.1685963, 14.6144789 ], [ 80.1680642, 14.61525 ], [ 80.1679285, 14.6162803 ], [ 80.1666044, 14.6165332 ], [ 80.1668677, 14.61692 ], [ 80.1673963, 14.6170512 ], [ 80.1673954, 14.617309 ], [ 80.1666006, 14.6175638 ], [ 80.1667314, 14.617822 ], [ 80.1667295, 14.6183372 ], [ 80.1660656, 14.6191077 ], [ 80.1644759, 14.6196175 ], [ 80.164478, 14.6191021 ], [ 80.163683, 14.619357 ], [ 80.1639438, 14.6203886 ], [ 80.1634146, 14.6203867 ], [ 80.1632789, 14.6211591 ], [ 80.1639395, 14.6215475 ], [ 80.1649973, 14.6216806 ], [ 80.1647269, 14.6232255 ], [ 80.1641977, 14.6232236 ], [ 80.1641219, 14.6245342 ], [ 80.1631353, 14.6242504 ], [ 80.1631362, 14.6239928 ], [ 80.1638388, 14.624083 ], [ 80.1637993, 14.6234799 ], [ 80.1643315, 14.6227087 ], [ 80.1644662, 14.6221939 ], [ 80.1634092, 14.6218032 ], [ 80.1631455, 14.6215447 ], [ 80.1628809, 14.6215437 ], [ 80.1618191, 14.6224421 ], [ 80.1615515, 14.6232141 ], [ 80.1611138, 14.6228664 ], [ 80.1602319, 14.6223071 ], [ 80.1597012, 14.6226921 ], [ 80.1591612, 14.6255245 ], [ 80.1589869, 14.6254353 ], [ 80.1589015, 14.6242353 ], [ 80.1583723, 14.6242334 ], [ 80.158508, 14.6232032 ], [ 80.1583772, 14.622945 ], [ 80.158907, 14.6228176 ], [ 80.1590393, 14.6226898 ], [ 80.1590412, 14.6221744 ], [ 80.1591744, 14.6220457 ], [ 80.1597042, 14.6219193 ], [ 80.1599728, 14.6208896 ], [ 80.1602374, 14.6208906 ], [ 80.1603663, 14.6216639 ], [ 80.1608936, 14.6221812 ], [ 80.1615545, 14.6224411 ], [ 80.1616883, 14.6219263 ], [ 80.1618216, 14.6217976 ], [ 80.1623513, 14.6216711 ], [ 80.162488, 14.6203833 ], [ 80.1632857, 14.6193555 ], [ 80.1635553, 14.6180682 ], [ 80.1640863, 14.6175547 ], [ 80.1646195, 14.616526 ], [ 80.1656807, 14.6157569 ], [ 80.1663487, 14.6142132 ], [ 80.1671429, 14.6140867 ], [ 80.1672752, 14.613959 ], [ 80.1672782, 14.613186 ], [ 80.1670145, 14.6129274 ], [ 80.1670204, 14.6113814 ], [ 80.1672888, 14.6103517 ], [ 80.1675543, 14.6100951 ], [ 80.1682226, 14.6084222 ], [ 80.1687522, 14.6082956 ], [ 80.1687543, 14.6077804 ], [ 80.1682251, 14.6077785 ], [ 80.168227, 14.6072631 ], [ 80.1676978, 14.6072612 ], [ 80.1678306, 14.6070042 ], [ 80.1678335, 14.6062312 ], [ 80.1669138, 14.6046819 ], [ 80.1663846, 14.60468 ], [ 80.1664772, 14.6039951 ], [ 80.166652, 14.603908 ], [ 80.1667427, 14.6037382 ], [ 80.1669176, 14.6036513 ], [ 80.1669185, 14.6033937 ], [ 80.1666539, 14.6033928 ], [ 80.1663884, 14.6036494 ], [ 80.1658567, 14.6042913 ], [ 80.1655917, 14.6044196 ], [ 80.1657628, 14.6051045 ], [ 80.1650606, 14.6049329 ], [ 80.1651945, 14.6044181 ], [ 80.16546, 14.6041614 ], [ 80.1654638, 14.6031308 ], [ 80.1646739, 14.6020973 ], [ 80.164545, 14.6013238 ], [ 80.1637522, 14.6010633 ], [ 80.1632289, 14.5995154 ], [ 80.1626987, 14.5997713 ], [ 80.1625679, 14.5992555 ], [ 80.1620408, 14.5987382 ], [ 80.161911, 14.5982225 ], [ 80.1613821, 14.5980913 ], [ 80.1603273, 14.5971862 ], [ 80.1600657, 14.5964122 ], [ 80.1590083, 14.5961508 ], [ 80.1590102, 14.5956354 ], [ 80.1584812, 14.5956335 ], [ 80.1583513, 14.5948602 ], [ 80.1580877, 14.5946014 ], [ 80.1575645, 14.5930537 ], [ 80.1573009, 14.592795 ], [ 80.1570393, 14.5920212 ], [ 80.156512, 14.5915039 ], [ 80.15635, 14.591024619036691 ], [ 80.15632115581009, 14.590939282795162 ], [ 80.15615, 14.59043291414371 ], [ 80.1559888, 14.589956 ], [ 80.1546707, 14.588663 ], [ 80.1545409, 14.5881473 ], [ 80.1540123, 14.5880159 ], [ 80.1537488, 14.5877573 ], [ 80.1529559, 14.5874969 ], [ 80.1521642, 14.5869787 ], [ 80.1508414, 14.5869738 ], [ 80.1505774, 14.5868445 ], [ 80.1507112, 14.5863296 ], [ 80.1505804, 14.5860715 ], [ 80.1500512, 14.5860696 ], [ 80.1499204, 14.5855538 ], [ 80.1494354, 14.5849481 ], [ 80.1492619, 14.5849068 ], [ 80.1487343, 14.5845188 ], [ 80.1488259, 14.5840915 ], [ 80.1490009, 14.5840046 ], [ 80.1489998, 14.5842622 ], [ 80.1500325, 14.5848269 ], [ 80.1500542, 14.5852966 ], [ 80.1508475, 14.5854279 ], [ 80.1511109, 14.5856865 ], [ 80.1516401, 14.5856884 ], [ 80.1532255, 14.5862094 ], [ 80.1540193, 14.5862125 ], [ 80.1541516, 14.5860845 ], [ 80.1541565, 14.5847963 ], [ 80.1538949, 14.5840223 ], [ 80.1541703, 14.581189 ], [ 80.1544377, 14.580417 ], [ 80.1549688, 14.5799036 ], [ 80.1549355, 14.5776723 ], [ 80.1543167, 14.5775823 ], [ 80.1537881, 14.5774512 ], [ 80.1527327, 14.5766744 ], [ 80.1522037, 14.5766725 ], [ 80.1519401, 14.5764138 ], [ 80.1487999, 14.5758002 ], [ 80.1542617, 14.5665963 ], [ 80.15635, 14.56706216378149 ], [ 80.15635, 14.567062163781491 ], [ 80.1591164, 14.5676793 ], [ 80.1599091, 14.5679398 ], [ 80.168109, 14.5682268 ], [ 80.1689017, 14.5684873 ], [ 80.1696953, 14.5684901 ], [ 80.170488, 14.5687506 ], [ 80.1715462, 14.5687543 ], [ 80.1728669, 14.5692743 ], [ 80.1749833, 14.5692818 ], [ 80.1763043, 14.5698018 ], [ 80.1770979, 14.5698046 ], [ 80.1781532, 14.5705812 ], [ 80.1813239, 14.571623 ], [ 80.1815876, 14.5718815 ], [ 80.1831729, 14.5724024 ], [ 80.1834365, 14.572661 ], [ 80.1842298, 14.5727931 ], [ 80.1842317, 14.5722777 ], [ 80.183703, 14.5721467 ], [ 80.1834394, 14.571888 ], [ 80.1829107, 14.5717577 ], [ 80.1830015, 14.5715882 ], [ 80.1842339, 14.5716332 ], [ 80.1844976, 14.5718917 ], [ 80.1852908, 14.5720239 ], [ 80.1851992, 14.5721926 ], [ 80.1847607, 14.5722796 ], [ 80.1847597, 14.5725372 ], [ 80.1852874, 14.5729252 ], [ 80.1868748, 14.5729307 ], [ 80.1887229, 14.5739677 ], [ 80.1897773, 14.5750021 ], [ 80.1908327, 14.5757787 ], [ 80.1916246, 14.5762968 ], [ 80.1921542, 14.5761701 ], [ 80.1921523, 14.5766855 ], [ 80.1929436, 14.5773319 ], [ 80.1937369, 14.577464 ], [ 80.1938676, 14.577722 ], [ 80.1939958, 14.5790108 ], [ 80.1942604, 14.5790118 ], [ 80.1942621, 14.5784963 ], [ 80.1945267, 14.5784973 ], [ 80.1945239, 14.5792703 ], [ 80.1953167, 14.5795307 ], [ 80.1954465, 14.5800465 ], [ 80.1953101, 14.5813344 ], [ 80.1958393, 14.5813361 ], [ 80.1959701, 14.5815942 ], [ 80.1959655, 14.5828825 ], [ 80.1964927, 14.5833998 ], [ 80.1964898, 14.5841726 ], [ 80.1960897, 14.5852019 ], [ 80.1963543, 14.5852028 ], [ 80.1967525, 14.5846889 ], [ 80.1970219, 14.5834015 ], [ 80.1958504, 14.5782442 ], [ 80.1953214, 14.5782423 ], [ 80.1950633, 14.5764379 ], [ 80.1945342, 14.5764361 ], [ 80.1945399, 14.57489 ], [ 80.1940107, 14.5748883 ], [ 80.1938826, 14.5735995 ], [ 80.1928357, 14.5705039 ], [ 80.1928376, 14.5699887 ], [ 80.1929712, 14.5697315 ], [ 80.1924422, 14.5697296 ], [ 80.192315, 14.5681832 ], [ 80.1915308, 14.5656039 ], [ 80.1915327, 14.5650885 ], [ 80.190484, 14.5625083 ], [ 80.1899652, 14.5596723 ], [ 80.1897015, 14.5594138 ], [ 80.1895755, 14.5578672 ], [ 80.1890463, 14.5578655 ], [ 80.1881389, 14.552709 ], [ 80.1878762, 14.5521928 ], [ 80.187879, 14.5514198 ], [ 80.1876153, 14.5511613 ], [ 80.1873575, 14.5493567 ], [ 80.1870939, 14.5490982 ], [ 80.1865715, 14.5472926 ], [ 80.1860538, 14.5441989 ], [ 80.1857902, 14.5439403 ], [ 80.1851474, 14.5390426 ], [ 80.1846182, 14.5390407 ], [ 80.184366, 14.5356903 ], [ 80.183837, 14.5356884 ], [ 80.1838399, 14.5349154 ], [ 80.1835749, 14.5350428 ], [ 80.1814588, 14.5350354 ], [ 80.1813256, 14.5351643 ], [ 80.181191, 14.5359368 ], [ 80.1809264, 14.5359358 ], [ 80.1809283, 14.5354206 ], [ 80.1806633, 14.535548 ], [ 80.1793413, 14.5354149 ], [ 80.1792067, 14.53593 ], [ 80.1790744, 14.5360577 ], [ 80.178281, 14.5360551 ], [ 80.1777529, 14.5357956 ], [ 80.1770935, 14.5351494 ], [ 80.1768308, 14.5346332 ], [ 80.1768338, 14.5338602 ], [ 80.1769675, 14.533603 ], [ 80.1764384, 14.5336013 ], [ 80.1764403, 14.5330859 ], [ 80.1756473, 14.5329538 ], [ 80.1752477, 14.5335969 ], [ 80.1744513, 14.5343671 ], [ 80.1739185, 14.535396 ], [ 80.1727263, 14.5360354 ], [ 80.1721967, 14.5361628 ], [ 80.1721948, 14.5366782 ], [ 80.1703428, 14.5368001 ], [ 80.1698142, 14.5366697 ], [ 80.1698161, 14.5361545 ], [ 80.1721977, 14.5359052 ], [ 80.1728614, 14.5351346 ], [ 80.1731345, 14.5328166 ], [ 80.1732682, 14.5325593 ], [ 80.1719448, 14.5328124 ], [ 80.1719467, 14.532297 ], [ 80.171418, 14.5321658 ], [ 80.1708915, 14.5315204 ], [ 80.1711565, 14.5313921 ], [ 80.1730079, 14.5313985 ], [ 80.173536, 14.531658 ], [ 80.1753867, 14.5319222 ], [ 80.1767097, 14.5317986 ], [ 80.1767125, 14.5310256 ], [ 80.1761835, 14.5310237 ], [ 80.1760555, 14.5297349 ], [ 80.1759242, 14.5296053 ], [ 80.1730157, 14.5293373 ], [ 80.1716945, 14.5289466 ], [ 80.1715638, 14.5284308 ], [ 80.1709055, 14.5277839 ], [ 80.1698488, 14.5273941 ], [ 80.1698499, 14.5271364 ], [ 80.1709077, 14.5271401 ], [ 80.1710406, 14.5268829 ], [ 80.1710425, 14.5263677 ], [ 80.170779, 14.5261091 ], [ 80.170649, 14.5255934 ], [ 80.1717047, 14.5262407 ], [ 80.1724953, 14.5270165 ], [ 80.1732869, 14.5275346 ], [ 80.1751374, 14.5277988 ], [ 80.1756673, 14.5275429 ], [ 80.1769903, 14.5274193 ], [ 80.1772587, 14.5263896 ], [ 80.1777875, 14.5263913 ], [ 80.1777905, 14.5256185 ], [ 80.1780546, 14.5257478 ], [ 80.179113, 14.525623 ], [ 80.1791149, 14.5251078 ], [ 80.1796439, 14.5251095 ], [ 80.179642, 14.5256249 ], [ 80.180171, 14.5256268 ], [ 80.1802904, 14.5289768 ], [ 80.1804222, 14.5292348 ], [ 80.1788336, 14.5296155 ], [ 80.1787006, 14.5297442 ], [ 80.1785668, 14.530259 ], [ 80.1777733, 14.5302564 ], [ 80.1776358, 14.531544 ], [ 80.1777667, 14.5320598 ], [ 80.1788223, 14.5327073 ], [ 80.1793517, 14.5325807 ], [ 80.1797461, 14.5330974 ], [ 80.1798769, 14.5336132 ], [ 80.1809349, 14.533617 ], [ 80.1809368, 14.5331016 ], [ 80.1814658, 14.5331035 ], [ 80.1820007, 14.5315593 ], [ 80.1824384, 14.5316485 ], [ 80.1826605, 14.5318194 ], [ 80.1827913, 14.5323352 ], [ 80.1835838, 14.5325956 ], [ 80.1834577, 14.5307914 ], [ 80.1831942, 14.5305329 ], [ 80.1822935, 14.5238306 ], [ 80.1817645, 14.5238287 ], [ 80.1818983, 14.5233138 ], [ 80.181645, 14.520221 ], [ 80.1813815, 14.5199625 ], [ 80.1798372, 14.5083622 ], [ 80.1798431, 14.5068162 ], [ 80.1799767, 14.506559 ], [ 80.1794477, 14.5065573 ], [ 80.1795813, 14.5060423 ], [ 80.1780858, 14.4813014 ], [ 80.1773171, 14.4745995 ], [ 80.1775825, 14.4743428 ], [ 80.176576, 14.4604254 ], [ 80.1767097, 14.4601682 ], [ 80.1761808, 14.4601665 ], [ 80.1763192, 14.4583632 ], [ 80.1760661, 14.4552704 ], [ 80.1761997, 14.4550132 ], [ 80.1756709, 14.4550113 ], [ 80.1758036, 14.4547541 ], [ 80.1758227, 14.449601 ], [ 80.1753128, 14.4444458 ], [ 80.1750512, 14.4436721 ], [ 80.1745462, 14.4372287 ], [ 80.1748144, 14.4361988 ], [ 80.1748219, 14.4341376 ], [ 80.1740544, 14.427178 ], [ 80.1735437, 14.4222807 ], [ 80.1732803, 14.4220219 ], [ 80.1730795, 14.4047577 ], [ 80.1728304, 14.4006343 ], [ 80.1694411, 14.3562366 ], [ 80.1666945, 14.3432647 ], [ 80.1587981, 14.3259678 ], [ 80.15615, 14.318879956694069 ], [ 80.1437766, 14.2857616 ], [ 80.1406974, 14.270717 ], [ 80.1387515, 14.2521769 ], [ 80.1382404, 14.2496613 ], [ 80.1370075, 14.2444575 ], [ 80.1358355, 14.2395107 ], [ 80.134545218070571, 14.234710415624999 ], [ 80.1321625, 14.2258459 ], [ 80.1281486, 14.1900595 ], [ 80.1285857, 14.1475986 ], [ 80.1333922, 14.10698 ], [ 80.1375121, 14.085336 ], [ 80.1386394, 14.0817739 ], [ 80.1387776, 14.0813372 ], [ 80.141132, 14.0742535 ], [ 80.1423186, 14.0706835 ], [ 80.14359306349165, 14.0626 ], [ 80.143624595958826, 14.0624 ], [ 80.1467818, 14.0423749 ], [ 80.1615447, 14.0100655 ], [ 80.1773375, 13.9757526 ], [ 80.1917571, 13.9384357 ], [ 80.2192229, 13.8787827 ], [ 80.2339858, 13.8351164 ], [ 80.2439421, 13.8154472 ], [ 80.2525252, 13.7867738 ], [ 80.2532119, 13.7751034 ], [ 80.2494353, 13.7604313 ], [ 80.2430457, 13.7432411 ], [ 80.2405887, 13.733273 ], [ 80.2388526, 13.7228866 ], [ 80.2358191, 13.7035065 ], [ 80.2346629, 13.6947537 ], [ 80.2336425, 13.6837209 ], [ 80.2334427, 13.6752061 ], [ 80.2336527, 13.666511 ], [ 80.2342038, 13.6579685 ], [ 80.2350179, 13.6496679 ], [ 80.2359882, 13.6429994 ], [ 80.2372741, 13.6364453 ], [ 80.2385862, 13.6303501 ], [ 80.2405373, 13.6239242 ], [ 80.2417465, 13.619841 ], [ 80.2437492, 13.6140782 ], [ 80.2466158, 13.6073992 ], [ 80.2516421, 13.5977811 ], [ 80.2582335, 13.5841039 ], [ 80.2600383, 13.5804062 ], [ 80.2617044, 13.5774642 ], [ 80.2632871, 13.5751699 ], [ 80.2643978, 13.5726597 ], [ 80.2681741, 13.5635904 ], [ 80.270923, 13.557382 ], [ 80.2738385, 13.5503637 ], [ 80.2749215, 13.5472323 ], [ 80.2756712, 13.5463955 ], [ 80.2764209, 13.5448568 ], [ 80.2773927, 13.5416984 ], [ 80.278309, 13.5394578 ], [ 80.2798362, 13.5356514 ], [ 80.2808914, 13.5326279 ], [ 80.2819187, 13.5288214 ], [ 80.2830294, 13.5262027 ], [ 80.2839457, 13.523557 ], [ 80.2846677, 13.5212353 ], [ 80.2856673, 13.5190215 ], [ 80.2862504, 13.5166187 ], [ 80.2868613, 13.5157007 ], [ 80.287611, 13.5130009 ], [ 80.2880552, 13.511975 ], [ 80.2885828, 13.5099501 ], [ 80.2894436, 13.5073312 ], [ 80.2898879, 13.5049823 ], [ 80.290943, 13.5013914 ], [ 80.2925813, 13.4959644 ], [ 80.2934698, 13.4927513 ], [ 80.2954413, 13.4875942 ], [ 80.2969407, 13.4835709 ], [ 80.2981069, 13.4809788 ], [ 80.2996619, 13.4777655 ], [ 80.3011613, 13.4740932 ], [ 80.3034382, 13.4714739 ], [ 80.3047154, 13.4704208 ], [ 80.3066591, 13.4706368 ], [ 80.3087694, 13.4703668 ], [ 80.3107409, 13.4693947 ], [ 80.3134065, 13.4678015 ], [ 80.3146542, 13.4653462 ], [ 80.3154886, 13.4647352 ], [ 80.316647, 13.464086 ], [ 80.3178545, 13.4634368 ], [ 80.3187184, 13.4624534 ], [ 80.3189344, 13.4619856 ], [ 80.3192289, 13.4614987 ], [ 80.3195823, 13.4612122 ], [ 80.3200928, 13.4609067 ], [ 80.3209764, 13.4599806 ], [ 80.3218403, 13.4589113 ], [ 80.3226355, 13.4576892 ], [ 80.3227729, 13.4570113 ], [ 80.3232049, 13.456047 ], [ 80.3238822, 13.4551209 ], [ 80.3240099, 13.4543571 ], [ 80.3240491, 13.4535646 ], [ 80.3243436, 13.4526576 ], [ 80.3250996, 13.450939 ], [ 80.3259046, 13.4472344 ], [ 80.3265548, 13.4440331 ], [ 80.3273352, 13.4398781 ], [ 80.3278914, 13.4356752 ], [ 80.3283406, 13.4321172 ], [ 80.3290037, 13.4277685 ], [ 80.3292818, 13.4244185 ], [ 80.3293674, 13.4206939 ], [ 80.3293246, 13.4156792 ], [ 80.3294958, 13.4113718 ], [ 80.3298594, 13.4065233 ], [ 80.3304156, 13.4013418 ], [ 80.3311002, 13.3965763 ], [ 80.3319986, 13.3919148 ], [ 80.332619, 13.3883146 ], [ 80.3334319, 13.3838819 ], [ 80.3342662, 13.3798028 ], [ 80.3361273, 13.3737882 ], [ 80.3374536, 13.3698964 ], [ 80.3385232, 13.3657963 ], [ 80.3398282, 13.3605723 ], [ 80.3406625, 13.3571173 ], [ 80.3412614, 13.3549318 ], [ 80.3418818, 13.3514559 ], [ 80.3422669, 13.3488542 ], [ 80.3427408, 13.3454214 ], [ 80.3432558, 13.3434589 ], [ 80.3437708, 13.3416466 ], [ 80.344054, 13.3398427 ], [ 80.3452978, 13.3307022 ], [ 80.344893, 13.3181049 ], [ 80.345872, 13.3177574 ], [ 80.3460585, 13.3165247 ], [ 80.3465615, 13.3160758 ], [ 80.3466124, 13.3152662 ], [ 80.3567007, 13.3123813 ], [ 80.3565232, 13.3122913 ], [ 80.3511713, 13.3137748 ], [ 80.3508273, 13.3135816 ], [ 80.3494497, 13.3140313 ], [ 80.3494061, 13.3139125 ], [ 80.3487085, 13.3140907 ], [ 80.3485603, 13.3137937 ], [ 80.3471303, 13.3141585 ], [ 80.3470833, 13.3100278 ], [ 80.3472454, 13.3073849 ], [ 80.3492804, 13.3073841 ], [ 80.3492803, 13.3071089 ], [ 80.348195, 13.3071093 ], [ 80.3481949, 13.3066653 ], [ 80.3492801, 13.3066649 ], [ 80.34928, 13.3064267 ], [ 80.347245, 13.3064275 ], [ 80.3469907, 13.303664 ], [ 80.3469895, 13.3000947 ], [ 80.3472738, 13.2960499 ], [ 80.3502127, 13.2959795 ], [ 80.3524798, 13.2959795 ], [ 80.3531773, 13.296302 ], [ 80.3556187, 13.2990174 ], [ 80.3557582, 13.2989155 ], [ 80.3534563, 13.2962171 ], [ 80.3530029, 13.2958947 ], [ 80.3522531, 13.295725 ], [ 80.3494106, 13.295708 ], [ 80.3488887, 13.2953463 ], [ 80.3476803, 13.2937142 ], [ 80.3472747, 13.2891782 ], [ 80.3471956, 13.2857588 ], [ 80.3466241, 13.2823629 ], [ 80.3464637, 13.2778992 ], [ 80.3485326, 13.2761785 ], [ 80.3495261, 13.2748467 ], [ 80.3499761, 13.2738154 ], [ 80.3502922, 13.2727535 ], [ 80.3529893, 13.2547402 ], [ 80.3529767, 13.2546441 ], [ 80.3529385, 13.2545563 ], [ 80.3527118, 13.2542526 ], [ 80.3526338, 13.2541991 ], [ 80.3525828, 13.2541898 ], [ 80.3525019, 13.254211 ], [ 80.3524273, 13.254258 ], [ 80.3524018, 13.2543438 ], [ 80.3524006, 13.2544231 ], [ 80.3524382, 13.2544988 ], [ 80.3526565, 13.254667 ], [ 80.3527076, 13.2547301 ], [ 80.352744, 13.2547996 ], [ 80.3527592, 13.2549011 ], [ 80.3502976, 13.2712182 ], [ 80.350281, 13.2713205 ], [ 80.350077, 13.27267 ], [ 80.3497511, 13.2737236 ], [ 80.3493302, 13.2747195 ], [ 80.3488988, 13.2754062 ], [ 80.348405, 13.2760532 ], [ 80.3475936, 13.276803 ], [ 80.3468191, 13.2773966 ], [ 80.3448419, 13.2787264 ], [ 80.3437735, 13.2766908 ], [ 80.3437634, 13.2759693 ], [ 80.3440213, 13.2759638 ], [ 80.3439999, 13.2755503 ], [ 80.3414548, 13.2755483 ], [ 80.3414648, 13.275882 ], [ 80.3411894, 13.2757718 ], [ 80.3409378, 13.2755546 ], [ 80.3407303, 13.2749434 ], [ 80.3406631, 13.2735247 ], [ 80.3409882, 13.2724965 ], [ 80.3416736, 13.2719843 ], [ 80.3391789, 13.2679675 ], [ 80.3384899, 13.2658991 ], [ 80.3382112, 13.2653927 ], [ 80.3379975, 13.2651667 ], [ 80.3379186, 13.2649406 ], [ 80.3380022, 13.2643981 ], [ 80.3379411, 13.2636192 ], [ 80.3374692, 13.2614815 ], [ 80.3373735, 13.2607023 ], [ 80.3374409, 13.2601994 ], [ 80.3375961, 13.259919 ], [ 80.3377674, 13.2598616 ], [ 80.3378111, 13.2600098 ], [ 80.3378663, 13.2600394 ], [ 80.3378929, 13.260069 ], [ 80.3379785, 13.2600227 ], [ 80.3380109, 13.2599875 ], [ 80.3379919, 13.2599542 ], [ 80.3379043, 13.2598986 ], [ 80.3378485, 13.2598055 ], [ 80.3378986, 13.259782 ], [ 80.3379995, 13.2597949 ], [ 80.3380622, 13.2597616 ], [ 80.3381033, 13.2596891 ], [ 80.3380747, 13.2588448 ], [ 80.3378248, 13.2588439 ], [ 80.3378129, 13.2584299 ], [ 80.337739, 13.2579968 ], [ 80.3375185, 13.2577432 ], [ 80.3375109, 13.2574742 ], [ 80.3381618, 13.2569886 ], [ 80.3427008, 13.2569875 ], [ 80.3437401, 13.2571503 ], [ 80.3445727, 13.2573842 ], [ 80.345246, 13.2577106 ], [ 80.3457341, 13.2580892 ], [ 80.3459852, 13.2584521 ], [ 80.3460408, 13.2585183 ], [ 80.3461016, 13.2585643 ], [ 80.3461585, 13.2585777 ], [ 80.3462314, 13.2585688 ], [ 80.3462824, 13.2585399 ], [ 80.3463128, 13.2584919 ], [ 80.3463295, 13.258416 ], [ 80.3463141, 13.2583594 ], [ 80.3462687, 13.2583107 ], [ 80.3458467, 13.2579655 ], [ 80.3454185, 13.2575432 ], [ 80.3446493, 13.257124 ], [ 80.3437712, 13.2569173 ], [ 80.3431085, 13.2568745 ], [ 80.3423648, 13.2567921 ], [ 80.3422001, 13.2566309 ], [ 80.3408161, 13.2543599 ], [ 80.3367359, 13.2469823 ], [ 80.3349302, 13.2425785 ], [ 80.3339003, 13.2400469 ], [ 80.3338287, 13.2390962 ], [ 80.3332565, 13.2377493 ], [ 80.3324717, 13.2361277 ], [ 80.3314725, 13.2349285 ], [ 80.3319339, 13.2347758 ], [ 80.3324091, 13.2346163 ], [ 80.3325256, 13.2346261 ], [ 80.3326292, 13.2344203 ], [ 80.3326785, 13.2340004 ], [ 80.3319595, 13.2324137 ], [ 80.3316589, 13.2313577 ], [ 80.331502, 13.2307985 ], [ 80.3298491, 13.226804 ], [ 80.3300379, 13.2265366 ], [ 80.3278063, 13.2211223 ], [ 80.3264502, 13.2172787 ], [ 80.3258322, 13.2144377 ], [ 80.3242443, 13.2104687 ], [ 80.323901, 13.2103684 ], [ 80.3231028, 13.208363 ], [ 80.3233002, 13.2081123 ], [ 80.322253, 13.2049955 ], [ 80.3224419, 13.2045777 ], [ 80.3224247, 13.203951 ], [ 80.3226822, 13.2034663 ], [ 80.3229397, 13.2030485 ], [ 80.3217981, 13.2007923 ], [ 80.3209828, 13.1997979 ], [ 80.3211115, 13.1994386 ], [ 80.3199099, 13.1957869 ], [ 80.3186224, 13.1935056 ], [ 80.3187512, 13.1924861 ], [ 80.3169745, 13.1865863 ], [ 80.3172663, 13.1855667 ], [ 80.3170116, 13.1845123 ], [ 80.3170113, 13.1843157 ], [ 80.3170713, 13.1841598 ], [ 80.3179679, 13.1838013 ], [ 80.3181, 13.1837857 ], [ 80.3182721, 13.1837039 ], [ 80.3182681, 13.1835714 ], [ 80.318204, 13.1835207 ], [ 80.318164, 13.183548 ], [ 80.3172594, 13.1838792 ], [ 80.3170393, 13.1839299 ], [ 80.3168792, 13.1839143 ], [ 80.3167071, 13.183774 ], [ 80.3164509, 13.1832245 ], [ 80.3163709, 13.1826906 ], [ 80.3162948, 13.181845 ], [ 80.3162868, 13.1815332 ], [ 80.3171794, 13.1812059 ], [ 80.3172834, 13.1811747 ], [ 80.3173755, 13.1811513 ], [ 80.3173955, 13.1810656 ], [ 80.3173955, 13.1809682 ], [ 80.3173395, 13.1809448 ], [ 80.3172834, 13.1810071 ], [ 80.3160587, 13.1814319 ], [ 80.3159666, 13.1814358 ], [ 80.3159066, 13.1814202 ], [ 80.3157865, 13.1811289 ], [ 80.3155964, 13.1809633 ], [ 80.3153713, 13.1807051 ], [ 80.315036, 13.1801693 ], [ 80.3147559, 13.1793655 ], [ 80.3145978, 13.1785422 ], [ 80.3145257, 13.177946 ], [ 80.3145657, 13.1777979 ], [ 80.3159706, 13.177303 ], [ 80.3160547, 13.177303 ], [ 80.3161067, 13.177264 ], [ 80.3160987, 13.177151 ], [ 80.3160427, 13.1771237 ], [ 80.3159866, 13.1771315 ], [ 80.3159226, 13.1771704 ], [ 80.3145457, 13.1776491 ], [ 80.3143519, 13.1775577 ], [ 80.3140204, 13.1771376 ], [ 80.3134701, 13.1759867 ], [ 80.3130348, 13.1745362 ], [ 80.3128797, 13.1741611 ], [ 80.3128797, 13.1738445 ], [ 80.3129698, 13.1735717 ], [ 80.3147359, 13.1729579 ], [ 80.3148509, 13.1729384 ], [ 80.314901, 13.1728897 ], [ 80.3148509, 13.1727971 ], [ 80.3147709, 13.1727679 ], [ 80.3146908, 13.1728312 ], [ 80.3130348, 13.1733768 ], [ 80.31294, 13.1733462 ], [ 80.3127419, 13.1732013 ], [ 80.3122143, 13.1719544 ], [ 80.311684, 13.1701373 ], [ 80.3116189, 13.1698937 ], [ 80.3116439, 13.1697183 ], [ 80.3130498, 13.1691971 ], [ 80.3131299, 13.1691971 ], [ 80.3132249, 13.1691873 ], [ 80.3132599, 13.1691094 ], [ 80.3131999, 13.1690363 ], [ 80.3131349, 13.1690314 ], [ 80.3130698, 13.1690899 ], [ 80.311684, 13.1695186 ], [ 80.3115989, 13.1695186 ], [ 80.3114838, 13.1694309 ], [ 80.3114388, 13.1692555 ], [ 80.3113638, 13.1690314 ], [ 80.3111736, 13.1687927 ], [ 80.3109385, 13.168252 ], [ 80.3107296, 13.1673512 ], [ 80.3107834, 13.167151 ], [ 80.3119841, 13.1667126 ], [ 80.3120692, 13.1667028 ], [ 80.3121442, 13.166659 ], [ 80.3121542, 13.1665518 ], [ 80.3121242, 13.1664982 ], [ 80.3120492, 13.1665372 ], [ 80.3106983, 13.1669708 ], [ 80.3106183, 13.1669562 ], [ 80.3104482, 13.16681 ], [ 80.3102381, 13.1662108 ], [ 80.3098928, 13.1652949 ], [ 80.3095977, 13.1643157 ], [ 80.3095676, 13.164116 ], [ 80.3094876, 13.1638822 ], [ 80.3094175, 13.1636922 ], [ 80.3092875, 13.1635314 ], [ 80.3090773, 13.1633853 ], [ 80.3089372, 13.1632001 ], [ 80.3088022, 13.1628786 ], [ 80.3086921, 13.1625912 ], [ 80.3084669, 13.1623573 ], [ 80.3082368, 13.1618068 ], [ 80.3080967, 13.1614756 ], [ 80.3079466, 13.1608081 ], [ 80.3077715, 13.160433 ], [ 80.3074313, 13.1595464 ], [ 80.3073462, 13.1591664 ], [ 80.3071861, 13.1587182 ], [ 80.3066708, 13.1579825 ], [ 80.3063456, 13.1574271 ], [ 80.3062506, 13.1570277 ], [ 80.3059404, 13.155873 ], [ 80.3058503, 13.1550692 ], [ 80.3058253, 13.1543579 ], [ 80.3059204, 13.1541484 ], [ 80.3071711, 13.1537148 ], [ 80.3072512, 13.1537099 ], [ 80.3073162, 13.1536369 ], [ 80.3072962, 13.1535589 ], [ 80.3072312, 13.1535589 ], [ 80.3071962, 13.1535784 ], [ 80.305395, 13.1541728 ], [ 80.3052449, 13.1540948 ], [ 80.3050498, 13.1538805 ], [ 80.3049097, 13.1536515 ], [ 80.3047246, 13.153291 ], [ 80.3045945, 13.1530376 ], [ 80.3043894, 13.1527453 ], [ 80.3042993, 13.1525066 ], [ 80.3043194, 13.1523166 ], [ 80.3044244, 13.152224 ], [ 80.3044895, 13.1520779 ], [ 80.3042493, 13.1516199 ], [ 80.303784, 13.1509817 ], [ 80.303669, 13.1507186 ], [ 80.3036039, 13.1503824 ], [ 80.3036139, 13.1496809 ], [ 80.303679, 13.149525 ], [ 80.3056102, 13.1488332 ], [ 80.3056802, 13.1488332 ], [ 80.3057803, 13.1488234 ], [ 80.3057853, 13.1487406 ], [ 80.3057152, 13.1486724 ], [ 80.3056702, 13.1486821 ], [ 80.3055952, 13.148726 ], [ 80.3034438, 13.1494227 ], [ 80.3032687, 13.1493642 ], [ 80.3031336, 13.1492522 ], [ 80.3030085, 13.1490573 ], [ 80.3027784, 13.1483752 ], [ 80.3024782, 13.1476834 ], [ 80.3022381, 13.1471621 ], [ 80.3017528, 13.1465385 ], [ 80.3015827, 13.1462754 ], [ 80.3014876, 13.1457248 ], [ 80.3014626, 13.1448187 ], [ 80.3015676, 13.1446774 ], [ 80.3033037, 13.1440781 ], [ 80.3033738, 13.1440732 ], [ 80.3034138, 13.1439855 ], [ 80.3033287, 13.1439125 ], [ 80.3032737, 13.1439125 ], [ 80.3032087, 13.1439758 ], [ 80.3011024, 13.1446725 ], [ 80.3009172, 13.1446627 ], [ 80.3007621, 13.1445263 ], [ 80.3006321, 13.1443656 ], [ 80.3002718, 13.1435909 ], [ 80.3001368, 13.1433424 ], [ 80.2998616, 13.1428309 ], [ 80.2995014, 13.1419588 ], [ 80.2994463, 13.1415836 ], [ 80.2995264, 13.1410477 ], [ 80.2995764, 13.1409795 ], [ 80.3015226, 13.1402876 ], [ 80.3015726, 13.1402584 ], [ 80.3015576, 13.1401756 ], [ 80.3014926, 13.1401609 ], [ 80.2996114, 13.1408041 ], [ 80.2995014, 13.1408089 ], [ 80.2993012, 13.1406384 ], [ 80.298976, 13.1400002 ], [ 80.2986258, 13.1388844 ], [ 80.2982005, 13.1372084 ], [ 80.2981705, 13.1368333 ], [ 80.2982106, 13.1365656 ], [ 80.2983784, 13.1363023 ], [ 80.2984059, 13.1360782 ], [ 80.298309, 13.1355337 ], [ 80.2981847, 13.134705 ], [ 80.298292, 13.1343557 ], [ 80.2985922, 13.13425 ], [ 80.3016412, 13.1333255 ], [ 80.3019067, 13.1331819 ], [ 80.3035011, 13.1300788 ], [ 80.3033724, 13.1300119 ], [ 80.3017936, 13.132901 ], [ 80.3014766, 13.1331597 ], [ 80.2994227, 13.1338136 ], [ 80.2991431, 13.1328676 ], [ 80.2981025, 13.1331745 ], [ 80.2978524, 13.1331277 ], [ 80.2976428, 13.1326629 ], [ 80.2974273, 13.1317461 ], [ 80.2973267, 13.1309687 ], [ 80.2974066, 13.1303879 ], [ 80.2974586, 13.1302042 ], [ 80.2974458, 13.1298246 ], [ 80.297551, 13.1296117 ], [ 80.2982654, 13.1293683 ], [ 80.2983074, 13.1292872 ], [ 80.2976468, 13.1269135 ], [ 80.2970961, 13.124978 ], [ 80.2967578, 13.1250364 ], [ 80.2967033, 13.1246841 ], [ 80.2967785, 13.1244292 ], [ 80.2969931, 13.1241199 ], [ 80.2974051, 13.1236769 ], [ 80.2978085, 13.1233426 ], [ 80.2981422, 13.1232025 ], [ 80.2989136, 13.1230279 ], [ 80.2994618, 13.1228759 ], [ 80.2998196, 13.1228214 ], [ 80.300052, 13.1231166 ], [ 80.3006278, 13.1234708 ], [ 80.3011556, 13.1242598 ], [ 80.3042073, 13.1290861 ], [ 80.3042112, 13.1292807 ], [ 80.3039647, 13.1294507 ], [ 80.3040201, 13.1295286 ], [ 80.3042657, 13.1293596 ], [ 80.3045728, 13.1296997 ], [ 80.3046359, 13.1301378 ], [ 80.3047306, 13.1302454 ], [ 80.3049043, 13.1301686 ], [ 80.3048806, 13.1299226 ], [ 80.3047701, 13.1295844 ], [ 80.3038309, 13.1281317 ], [ 80.3035468, 13.1275783 ], [ 80.3019762, 13.1251726 ], [ 80.301258, 13.1239812 ], [ 80.3007292, 13.1233202 ], [ 80.3002162, 13.1221288 ], [ 80.3001358, 13.121852 ], [ 80.300075, 13.121447 ], [ 80.300137, 13.1213576 ], [ 80.3015249, 13.1180513 ], [ 80.3020142, 13.1167807 ], [ 80.3018768, 13.1158278 ], [ 80.3016277, 13.1152464 ], [ 80.3015936, 13.1149501 ], [ 80.3017109, 13.1143368 ], [ 80.3018253, 13.1141309 ], [ 80.3047273, 13.1110954 ], [ 80.3047925, 13.1109771 ], [ 80.3047947, 13.1108565 ], [ 80.3046468, 13.1104695 ], [ 80.3039732, 13.1067152 ], [ 80.3035935, 13.1054622 ], [ 80.3035363, 13.1054151 ], [ 80.3034125, 13.1054205 ], [ 80.3033575, 13.1055116 ], [ 80.3033823, 13.1056134 ], [ 80.3034686, 13.1056651 ], [ 80.3037929, 13.106757 ], [ 80.3044326, 13.1105341 ], [ 80.3045382, 13.1107485 ], [ 80.3045603, 13.1108961 ], [ 80.3045238, 13.1110476 ], [ 80.3025592, 13.1130986 ], [ 80.3024737, 13.1130105 ], [ 80.3021969, 13.1132599 ], [ 80.3022047, 13.1133495 ], [ 80.3016379, 13.1138538 ], [ 80.3009487, 13.1134242 ], [ 80.3007312, 13.1127383 ], [ 80.3010587, 13.1126346 ], [ 80.2978745, 13.1021345 ], [ 80.2977002, 13.1021596 ], [ 80.2975635, 13.1018335 ], [ 80.2975347, 13.1012677 ], [ 80.2977827, 13.1010734 ], [ 80.298126, 13.100622 ], [ 80.2985294, 13.1001873 ], [ 80.2984504, 13.0999356 ], [ 80.3016979, 13.0988624 ], [ 80.3016648, 13.0987551 ], [ 80.3005448, 13.0990916 ], [ 80.2999616, 13.0971945 ], [ 80.2998543, 13.097232 ], [ 80.3004431, 13.0991056 ], [ 80.2994555, 13.0994099 ], [ 80.2993798, 13.0991887 ], [ 80.2992988, 13.099211 ], [ 80.2988991, 13.0979763 ], [ 80.2988129, 13.0980037 ], [ 80.2989766, 13.0985302 ], [ 80.2987248, 13.0986125 ], [ 80.2990048, 13.09953 ], [ 80.2988868, 13.0995694 ], [ 80.2987248, 13.0990978 ], [ 80.2986262, 13.0991321 ], [ 80.2987636, 13.0995985 ], [ 80.2984166, 13.0997123 ], [ 80.2982572, 13.0992507 ], [ 80.2965111, 13.0997761 ], [ 80.2957129, 13.097148 ], [ 80.2942597, 13.0923635 ], [ 80.2951775, 13.0920863 ], [ 80.2951461, 13.0920083 ], [ 80.2941876, 13.0923041 ], [ 80.2941359, 13.0921384 ], [ 80.2942443, 13.092098 ], [ 80.2941789, 13.0918695 ], [ 80.2943093, 13.0918329 ], [ 80.2939527, 13.0906917 ], [ 80.2936534, 13.0907584 ], [ 80.2934968, 13.0902549 ], [ 80.2937069, 13.0901932 ], [ 80.2936997, 13.0901742 ], [ 80.2939292, 13.090104 ], [ 80.2939226, 13.0900808 ], [ 80.2935807, 13.0901822 ], [ 80.293496, 13.0897734 ], [ 80.2938108, 13.0896809 ], [ 80.2937277, 13.0894245 ], [ 80.2937185, 13.0892289 ], [ 80.2937851, 13.0891799 ], [ 80.293829, 13.0892493 ], [ 80.2939469, 13.0891876 ], [ 80.2937586, 13.0888666 ], [ 80.293676, 13.0889125 ], [ 80.2927742, 13.0883531 ], [ 80.2926097, 13.0877824 ], [ 80.2933202, 13.0875931 ], [ 80.2942421, 13.0890501 ], [ 80.2943008, 13.0890088 ], [ 80.2950328, 13.0898092 ], [ 80.2956455, 13.0918641 ], [ 80.2954747, 13.0919185 ], [ 80.295509, 13.0920015 ], [ 80.2956851, 13.0919495 ], [ 80.2957601, 13.0921579 ], [ 80.2980023, 13.0915158 ], [ 80.2980249, 13.0914845 ], [ 80.2980338, 13.0914494 ], [ 80.2980249, 13.0914198 ], [ 80.2975585, 13.0907869 ], [ 80.2971335, 13.0910981 ], [ 80.2935334, 13.086356 ], [ 80.2946236, 13.0855425 ], [ 80.2982465, 13.0902765 ], [ 80.2978266, 13.0905979 ], [ 80.2983485, 13.0913049 ], [ 80.2983986, 13.0913429 ], [ 80.2984488, 13.0913585 ], [ 80.298511, 13.0913583 ], [ 80.3000761, 13.0909055 ], [ 80.3003005, 13.0910268 ], [ 80.3032323, 13.0979 ], [ 80.3031076, 13.0980381 ], [ 80.3026815, 13.0983027 ], [ 80.3027355, 13.0983981 ], [ 80.3030454, 13.0982322 ], [ 80.3034304, 13.0979469 ], [ 80.3035334, 13.0980723 ], [ 80.3036965, 13.0987411 ], [ 80.3045118, 13.1009062 ], [ 80.304503, 13.1012061 ], [ 80.3044451, 13.1014068 ], [ 80.3043812, 13.1015847 ], [ 80.3043064, 13.1016554 ], [ 80.3043017, 13.1017226 ], [ 80.3043658, 13.1017755 ], [ 80.3044317, 13.1017677 ], [ 80.3044759, 13.1017176 ], [ 80.3045106, 13.1016255 ], [ 80.3045975, 13.1014238 ], [ 80.3046463, 13.1012111 ], [ 80.3046606, 13.1009945 ], [ 80.3047608, 13.1007975 ], [ 80.3049753, 13.1008059 ], [ 80.3055075, 13.1009647 ], [ 80.3061598, 13.1012824 ], [ 80.3067606, 13.1018174 ], [ 80.3072584, 13.1023608 ], [ 80.3075417, 13.1026868 ], [ 80.3098033, 13.1073143 ], [ 80.3098321, 13.1074453 ], [ 80.3099779, 13.1074829 ], [ 80.3100696, 13.1074468 ], [ 80.3101143, 13.1073483 ], [ 80.3101182, 13.1072524 ], [ 80.3100513, 13.1071999 ], [ 80.3081854, 13.103364 ], [ 80.3074129, 13.1021518 ], [ 80.3068808, 13.1016252 ], [ 80.3038424, 13.0947367 ], [ 80.3034475, 13.0934409 ], [ 80.30319, 13.0918191 ], [ 80.3030785, 13.0899464 ], [ 80.3032158, 13.0897291 ], [ 80.303027, 13.0896455 ], [ 80.3024004, 13.0897792 ], [ 80.2994392, 13.086686 ], [ 80.2980418, 13.0846152 ], [ 80.2964925, 13.0820448 ], [ 80.2931515, 13.0760093 ], [ 80.291871, 13.0734673 ], [ 80.2916077, 13.0727671 ], [ 80.2912851, 13.0721005 ], [ 80.2901482, 13.0684111 ], [ 80.2905605, 13.0680848 ], [ 80.2906776, 13.0679514 ], [ 80.2906233, 13.0678978 ], [ 80.2905071, 13.0679808 ], [ 80.2900754, 13.0683218 ], [ 80.2896409, 13.0681313 ], [ 80.2892095, 13.0678075 ], [ 80.2890111, 13.0677153 ], [ 80.2887875, 13.0676725 ], [ 80.2885683, 13.0665186 ], [ 80.2885364, 13.0663509 ], [ 80.2888948, 13.066437 ], [ 80.2897116, 13.0666913 ], [ 80.2898078, 13.0667589 ], [ 80.2898666, 13.0667589 ], [ 80.2899039, 13.0666861 ], [ 80.2898719, 13.0665768 ], [ 80.2897383, 13.0665716 ], [ 80.2895033, 13.0665143 ], [ 80.2890117, 13.0663166 ], [ 80.2889156, 13.0662437 ], [ 80.2887072, 13.0655515 ], [ 80.2886091, 13.0653135 ], [ 80.2879141, 13.0636535 ], [ 80.2845115, 13.052436 ], [ 80.2811918, 13.0382385 ], [ 80.2795265, 13.0264019 ], [ 80.279015, 13.0225574 ], [ 80.2786717, 13.0200236 ], [ 80.2785687, 13.0194717 ], [ 80.2780245, 13.0152382 ], [ 80.2779164, 13.0148388 ], [ 80.2774576, 13.0131644 ], [ 80.2769745, 13.0117847 ], [ 80.2764368, 13.009827 ], [ 80.2742909, 13.0031958 ], [ 80.2723339, 12.9961958 ], [ 80.2709435, 12.9903583 ], [ 80.2687908, 12.9813558 ], [ 80.2657361, 12.9688652 ], [ 80.26444, 12.9622323 ], [ 80.2630897, 12.954629 ], [ 80.2625947, 12.9524709 ], [ 80.2612471, 12.9458376 ], [ 80.2597108, 12.9370794 ], [ 80.2574969, 12.9206162 ], [ 80.2554254, 12.9044363 ], [ 80.2510333, 12.8710692 ], [ 80.2497198, 12.8586182 ], [ 80.2484755, 12.8422 ], [ 80.248452, 12.8391595 ], [ 80.2476601, 12.8298146 ], [ 80.2479005, 12.815989 ], [ 80.2483296, 12.8096031 ], [ 80.2486512, 12.8054341 ], [ 80.2487065, 12.804716 ], [ 80.2488533, 12.8038959 ], [ 80.2488488, 12.8038661 ], [ 80.2488627, 12.8038262 ], [ 80.2489955, 12.803365 ], [ 80.2490784, 12.8025721 ], [ 80.2491697, 12.8021676 ], [ 80.249261, 12.8016903 ], [ 80.2493274, 12.8011158 ], [ 80.2494518, 12.8002178 ], [ 80.2497007, 12.7987857 ], [ 80.2497505, 12.7984216 ], [ 80.249792, 12.7978876 ], [ 80.2498584, 12.797208 ], [ 80.249933, 12.7958244 ], [ 80.2500741, 12.7953552 ], [ 80.250157, 12.7951367 ], [ 80.250406, 12.794449 ], [ 80.2505304, 12.7940121 ], [ 80.2505719, 12.793559 ], [ 80.2507461, 12.7932111 ], [ 80.2508139, 12.7928045 ], [ 80.2510232, 12.7922147 ], [ 80.2514597, 12.7917709 ], [ 80.2517583, 12.7912773 ], [ 80.2521068, 12.7908485 ], [ 80.252486, 12.7905639 ], [ 80.2527153, 12.7905168 ], [ 80.2528038, 12.7906384 ], [ 80.2527515, 12.7908712 ], [ 80.2529674, 12.7910177 ], [ 80.25365, 12.7904359 ], [ 80.253807, 12.7903481 ], [ 80.2541463, 12.7900983 ], [ 80.254347, 12.7900313 ], [ 80.2543903, 12.789634 ], [ 80.2545647, 12.7894208 ], [ 80.2546125, 12.7892788 ], [ 80.2546042, 12.7880652 ], [ 80.2546532, 12.7877677 ], [ 80.2546854, 12.7873793 ], [ 80.2546789, 12.7868515 ], [ 80.2548199, 12.7863337 ], [ 80.2552157, 12.7860267 ], [ 80.2551092, 12.7855777 ], [ 80.2551605, 12.7850889 ], [ 80.2551828, 12.7848861 ], [ 80.2550433, 12.7844505 ], [ 80.2551036, 12.7839352 ], [ 80.2551707, 12.7835834 ], [ 80.2551345, 12.7832708 ], [ 80.2550621, 12.782783 ], [ 80.2550594, 12.7824233 ], [ 80.2549776, 12.7816949 ], [ 80.2549048, 12.7808856 ], [ 80.2544683, 12.7800152 ], [ 80.2542799, 12.7792233 ], [ 80.2537208, 12.777483 ], [ 80.2535515, 12.776918 ], [ 80.2533033, 12.776463 ], [ 80.2529473, 12.7749931 ], [ 80.2490995, 12.7620332 ], [ 80.2456835, 12.752172 ], [ 80.2409285, 12.7390119 ], [ 80.2355211, 12.724344 ], [ 80.2319763, 12.714766 ], [ 80.2287405, 12.7062593 ], [ 80.2271698, 12.7013611 ], [ 80.2253845, 12.6962368 ], [ 80.2246378, 12.6949808 ], [ 80.2235993, 12.6912379 ], [ 80.2200029, 12.6814492 ], [ 80.2181404, 12.6761989 ], [ 80.209821, 12.6536718 ], [ 80.2078439, 12.6485251 ], [ 80.2062105, 12.6444711 ], [ 80.2043573, 12.6398479 ], [ 80.2031476, 12.6367294 ], [ 80.2018076, 12.6334283 ], [ 80.2010113, 12.6311217 ], [ 80.2002868, 12.628357 ], [ 80.1997056, 12.6261807 ], [ 80.1994595, 12.6241677 ], [ 80.1991742, 12.6227167 ], [ 80.1990226, 12.6214892 ], [ 80.1987536, 12.6196064 ], [ 80.1987185, 12.618679 ], [ 80.1987909, 12.617793 ], [ 80.1990688, 12.6173947 ], [ 80.1992839, 12.617201 ], [ 80.1999974, 12.6169997 ], [ 80.200176, 12.6169329 ], [ 80.2002927, 12.6167458 ], [ 80.2002613, 12.616571 ], [ 80.199856, 12.6157773 ], [ 80.1996221, 12.615605 ], [ 80.1994462, 12.6156679 ], [ 80.198998, 12.6153355 ], [ 80.1985359, 12.6141303 ], [ 80.1975176, 12.6117616 ], [ 80.1958, 12.6081852 ], [ 80.1942433, 12.6041718 ], [ 80.1932097, 12.6024843 ], [ 80.1917906, 12.5990861 ], [ 80.1876423, 12.5875671 ], [ 80.1858787, 12.5799436 ], [ 80.1855996, 12.577412 ], [ 80.1854437, 12.5763476 ], [ 80.1851465, 12.5743176 ], [ 80.1830078, 12.5693951 ], [ 80.1813122, 12.5648406 ], [ 80.1810201, 12.5640561 ], [ 80.1764246, 12.551712 ], [ 80.1761438, 12.5512446 ], [ 80.1759043, 12.550846 ], [ 80.1705723, 12.5378342 ], [ 80.1661571, 12.5250213 ], [ 80.1627392, 12.5106092 ], [ 80.1624174, 12.5088028 ], [ 80.15858, 12.4866562 ], [ 80.1581261, 12.4824662 ], [ 80.1577565, 12.4778898 ], [ 80.1570089, 12.4728748 ], [ 80.1566477, 12.4709728 ], [ 80.155364, 12.4650981 ], [ 80.1525747, 12.4610938 ], [ 80.1512575, 12.4583981 ], [ 80.150104, 12.4556077 ], [ 80.1481547, 12.4521909 ], [ 80.1356558, 12.4340269 ], [ 80.1167263, 12.40602 ], [ 80.0980418, 12.3830041 ], [ 80.0878583, 12.372553 ], [ 80.0702484, 12.3509964 ], [ 80.0571457, 12.3345614 ], [ 80.0543935, 12.3301112 ], [ 80.0522936, 12.3273559 ], [ 80.0514725, 12.3261561 ], [ 80.0425962, 12.3138216 ], [ 80.0304623, 12.2966694 ], [ 80.0224977, 12.2834302 ], [ 80.0145685, 12.2660731 ], [ 80.0121229, 12.2609255 ], [ 80.0076635, 12.2541548 ], [ 79.9926299, 12.2286654 ], [ 79.961532196379352, 12.182288043749999 ], [ 79.9337035, 12.1407859 ], [ 79.9266639, 12.1290208 ], [ 79.9189418, 12.1167647 ], [ 79.8991335, 12.0857887 ], [ 79.8920363, 12.0725968 ], [ 79.8855242, 12.0635214 ], [ 79.8801873, 12.0534309 ], [ 79.8745961, 12.0418114 ], [ 79.8742047, 12.0409976 ], [ 79.87129, 12.0349634 ], [ 79.8700637, 12.0302915 ], [ 79.8613938, 12.0138534 ], [ 79.8591492, 12.0084018 ], [ 79.8588249, 12.0087639 ], [ 79.857015, 12.0048729 ], [ 79.8534368, 11.9948915 ], [ 79.8530272, 11.994119 ], [ 79.8528751, 11.9939272 ], [ 79.8526031, 11.9932033 ], [ 79.8517933, 11.9910502 ], [ 79.8512908, 11.9895364 ], [ 79.850772, 11.9883807 ], [ 79.8502173, 11.9874113 ], [ 79.8499191, 11.9865091 ], [ 79.8495566, 11.9856197 ], [ 79.8491544, 11.9846327 ], [ 79.8487624, 11.9837952 ], [ 79.848487, 11.9826903 ], [ 79.8479439, 11.9816554 ], [ 79.8478307, 11.9811683 ], [ 79.8474346, 11.980482 ], [ 79.8472706, 11.9797459 ], [ 79.8471687, 11.9795854 ], [ 79.8470782, 11.9793031 ], [ 79.8469254, 11.9789268 ], [ 79.847026, 11.978597 ], [ 79.846337, 11.9771667 ], [ 79.8460824, 11.9766188 ], [ 79.8453865, 11.9744989 ], [ 79.8450406, 11.9737698 ], [ 79.8449802, 11.9730356 ], [ 79.8451399, 11.9723008 ], [ 79.8464412, 11.971858 ], [ 79.8463486, 11.9717316 ], [ 79.8457965, 11.9718881 ], [ 79.8452844, 11.9711993 ], [ 79.8446123, 11.9701191 ], [ 79.8443722, 11.9696964 ], [ 79.8443962, 11.9692737 ], [ 79.8447883, 11.9691015 ], [ 79.8447323, 11.9689371 ], [ 79.8446123, 11.9689137 ], [ 79.843674, 11.9673723 ], [ 79.8433706, 11.9660082 ], [ 79.843699, 11.9644603 ], [ 79.843272, 11.9640573 ], [ 79.8427517, 11.963226 ], [ 79.8408323, 11.956305 ], [ 79.8388917, 11.9497521 ], [ 79.838476, 11.9491516 ], [ 79.8382557, 11.9488156 ], [ 79.8381775, 11.9486591 ], [ 79.8381415, 11.9484553 ], [ 79.8383904, 11.948364 ], [ 79.838344, 11.9479482 ], [ 79.838234, 11.9473079 ], [ 79.8382725, 11.9470765 ], [ 79.838223, 11.9467805 ], [ 79.838289, 11.9466191 ], [ 79.8379082, 11.9447747 ], [ 79.8376992, 11.9447263 ], [ 79.8375947, 11.9444895 ], [ 79.8375012, 11.9437416 ], [ 79.8374407, 11.943712 ], [ 79.8374379, 11.9436233 ], [ 79.8374352, 11.9435371 ], [ 79.8376919, 11.9433942 ], [ 79.8377294, 11.9430313 ], [ 79.8376607, 11.9429264 ], [ 79.8376277, 11.9425874 ], [ 79.8375868, 11.9417141 ], [ 79.8374896, 11.9414402 ], [ 79.8375121, 11.9411605 ], [ 79.8373068, 11.9404395 ], [ 79.8375713, 11.9402644 ], [ 79.8375635, 11.9401693 ], [ 79.8372757, 11.9402949 ], [ 79.8371396, 11.9402644 ], [ 79.8370543, 11.9399998 ], [ 79.8371133, 11.9397203 ], [ 79.837474, 11.9396024 ], [ 79.8374951, 11.9395306 ], [ 79.8370769, 11.9396132 ], [ 79.8370385, 11.9394426 ], [ 79.8369801, 11.9391347 ], [ 79.8370788, 11.9390661 ], [ 79.8368946, 11.93702 ], [ 79.8368132, 11.936781 ], [ 79.8368132, 11.936528 ], [ 79.8367796, 11.9361016 ], [ 79.8366503, 11.9357736 ], [ 79.8366408, 11.9350287 ], [ 79.8363151, 11.933206 ], [ 79.8362385, 11.9329437 ], [ 79.8363199, 11.9325173 ], [ 79.836064, 11.9311786 ], [ 79.8359302, 11.9309087 ], [ 79.8358736, 11.9306218 ], [ 79.8357218, 11.9300504 ], [ 79.8355289, 11.9290965 ], [ 79.8350889, 11.9270243 ], [ 79.8344008, 11.9245299 ], [ 79.8342714, 11.9235153 ], [ 79.8343326, 11.9234007 ], [ 79.8346227, 11.9233226 ], [ 79.834644, 11.9231794 ], [ 79.8342501, 11.9232315 ], [ 79.8341782, 11.9230804 ], [ 79.8340893, 11.9229465 ], [ 79.8337236, 11.9216803 ], [ 79.8332562, 11.9201969 ], [ 79.8327464, 11.9190117 ], [ 79.8325753, 11.9187237 ], [ 79.8323175, 11.9181966 ], [ 79.8321701, 11.9177912 ], [ 79.8320919, 11.9174623 ], [ 79.8317558, 11.9165569 ], [ 79.8315548, 11.9161666 ], [ 79.8313138, 11.915764 ], [ 79.8311434, 11.9153631 ], [ 79.8310131, 11.9149821 ], [ 79.8307797, 11.9144666 ], [ 79.8304436, 11.9136017 ], [ 79.8303423, 11.9131107 ], [ 79.8302326, 11.9128771 ], [ 79.8301306, 11.9124575 ], [ 79.8299924, 11.9120746 ], [ 79.8299556, 11.9116781 ], [ 79.8298405, 11.9113313 ], [ 79.8297986, 11.9109943 ], [ 79.8296978, 11.9105519 ], [ 79.8296978, 11.9103537 ], [ 79.8298133, 11.9097919 ], [ 79.8296511, 11.9091109 ], [ 79.8296333, 11.9087545 ], [ 79.8296575, 11.9085032 ], [ 79.8296932, 11.9083761 ], [ 79.8296762, 11.9078027 ], [ 79.829698, 11.9074768 ], [ 79.8297865, 11.9073629 ], [ 79.8308698, 11.9074015 ], [ 79.8309406, 11.9073611 ], [ 79.8309653, 11.9072734 ], [ 79.8309313, 11.9071917 ], [ 79.8308608, 11.9071541 ], [ 79.8295818, 11.907081 ], [ 79.8295408, 11.9068556 ], [ 79.8295006, 11.9066694 ], [ 79.829746, 11.9061625 ], [ 79.8299452, 11.906086 ], [ 79.830303, 11.9059487 ], [ 79.8320257, 11.9051126 ], [ 79.8322713, 11.9053705 ], [ 79.8324195, 11.9053467 ], [ 79.832455, 11.9051754 ], [ 79.8322799, 11.9049325 ], [ 79.8320731, 11.9047154 ], [ 79.8319299, 11.9043133 ], [ 79.831626, 11.9036243 ], [ 79.8304817, 11.9013858 ], [ 79.8292809, 11.8984458 ], [ 79.8284627, 11.8961128 ], [ 79.8275952, 11.8927444 ], [ 79.8267008, 11.8893885 ], [ 79.8262553, 11.8876051 ], [ 79.8255922, 11.8849503 ], [ 79.825579, 11.8842109 ], [ 79.8252673, 11.8823061 ], [ 79.8247998, 11.8802885 ], [ 79.8244042, 11.8787987 ], [ 79.8242947, 11.8783505 ], [ 79.8240625, 11.8777552 ], [ 79.8239946, 11.8773288 ], [ 79.8236897, 11.8767939 ], [ 79.8231863, 11.8758414 ], [ 79.8225211, 11.8743005 ], [ 79.8214333, 11.8721913 ], [ 79.820549, 11.870073 ], [ 79.8197831, 11.8682433 ], [ 79.8188668, 11.866052 ], [ 79.8179161, 11.8641351 ], [ 79.815889, 11.8585757 ], [ 79.8140582, 11.8530528 ], [ 79.8104678, 11.842709 ], [ 79.809128, 11.8384218 ], [ 79.8082089, 11.8342287 ], [ 79.8062839, 11.8283303 ], [ 79.8003691, 11.8058958 ], [ 79.7963688, 11.7882662 ], [ 79.7961615, 11.7851724 ], [ 79.7960656, 11.7821413 ], [ 79.7957883, 11.7779702 ], [ 79.7951739, 11.7719711 ], [ 79.7951036, 11.7715678 ], [ 79.7950279, 11.7711335 ], [ 79.793008, 11.7659688 ], [ 79.7912836, 11.7603458 ], [ 79.7900429, 11.7521335 ], [ 79.7887378, 11.7442863 ], [ 79.7877996, 11.7386449 ], [ 79.7877403, 11.7384053 ], [ 79.7874817, 11.7367329 ], [ 79.786655, 11.7338074 ], [ 79.7830444, 11.7216679 ], [ 79.7806187, 11.7089754 ], [ 79.7809856, 11.7078377 ], [ 79.7812221, 11.7077364 ], [ 79.7825301, 11.7075917 ], [ 79.7825799, 11.7074824 ], [ 79.7828859, 11.7052696 ], [ 79.7829366, 11.7051097 ], [ 79.7817542, 11.705305 ], [ 79.7808279, 11.7043006 ], [ 79.7768023, 11.6942865 ], [ 79.7744846, 11.6833225 ], [ 79.7656935, 11.6445396 ], [ 79.7609744, 11.6237424 ], [ 79.7592637, 11.6036106 ], [ 79.7576653, 11.5832322 ], [ 79.7578069, 11.5763912 ], [ 79.7580321, 11.5705482 ], [ 79.7584445, 11.5631733 ], [ 79.7599504, 11.5516464 ], [ 79.7638986, 11.5343229 ], [ 79.7659409, 11.526593 ], [ 79.770712, 11.5154504 ], [ 79.7732598, 11.5106319 ], [ 79.7740064, 11.5088739 ], [ 79.7788255, 11.5048205 ], [ 79.7812563, 11.4965606 ], [ 79.7874162, 11.4781403 ], [ 79.7955626, 11.4652573 ], [ 79.8050688, 11.4468283 ], [ 79.8089522, 11.4359827 ], [ 79.8142126, 11.419019 ], [ 79.816969, 11.403808 ], [ 79.8200976, 11.3879913 ], [ 79.8233718, 11.3797805 ], [ 79.8267503, 11.3759649 ], [ 79.8288166, 11.3728139 ], [ 79.8301322, 11.370939 ], [ 79.8332866, 11.3664149 ], [ 79.8355574, 11.3631579 ], [ 79.8367614, 11.358239 ], [ 79.8388213, 11.3501605 ], [ 79.8367614, 11.3400621 ], [ 79.8367614, 11.3296267 ], [ 79.8371379, 11.3117471 ], [ 79.8371252, 11.3028212 ], [ 79.8386924, 11.2904532 ], [ 79.8418489, 11.2693314 ], [ 79.8440455, 11.25789 ], [ 79.84555375143664, 11.2501 ], [ 79.845553751436626, 11.2501 ], [ 79.8458312, 11.248667 ], [ 79.8462196, 11.2472145 ], [ 79.8469668, 11.246108 ], [ 79.8474171, 11.2435565 ], [ 79.8479287, 11.2391834 ], [ 79.8496711, 11.2266922 ], [ 79.8522396, 11.2088343 ], [ 79.8534466, 11.2016378 ], [ 79.8541085, 11.1929834 ], [ 79.8554915, 11.1805249 ], [ 79.8566008, 11.1659514 ], [ 79.857251, 11.1537402 ], [ 79.8575396, 11.1482802 ], [ 79.8580418, 11.1436413 ], [ 79.8581935, 11.1357893 ], [ 79.8580567, 11.1312364 ], [ 79.8580804, 11.1257423 ], [ 79.8578644, 11.1106936 ], [ 79.8577345, 11.1016409 ], [ 79.8583975, 11.0891347 ], [ 79.8568551, 11.0785802 ], [ 79.8572553, 11.0732981 ], [ 79.8563653, 11.0632079 ], [ 79.8559215, 11.0539676 ], [ 79.8556218, 11.0443365 ], [ 79.8555431, 11.0440904 ], [ 79.8555327, 11.0417388 ], [ 79.8554855, 11.0396599 ], [ 79.8555053, 11.0378943 ], [ 79.8557317, 11.0347059 ], [ 79.8556814, 11.0324743 ], [ 79.8558866, 11.0307125 ], [ 79.856059, 11.0303864 ], [ 79.8560846, 11.0291027 ], [ 79.8562077, 11.0278694 ], [ 79.8563872, 11.0268223 ], [ 79.8564121, 11.0267775 ], [ 79.8565253, 11.026668 ], [ 79.8567076, 11.0265551 ], [ 79.8567992, 11.026518 ], [ 79.8571586, 11.0264398 ], [ 79.8571641, 11.0263706 ], [ 79.8569361, 11.0264106 ], [ 79.8567193, 11.026427 ], [ 79.8566451, 11.0263433 ], [ 79.8566043, 11.0261796 ], [ 79.8566117, 11.0258376 ], [ 79.8566666, 11.0256281 ], [ 79.8567397, 11.0253991 ], [ 79.856876, 11.0253288 ], [ 79.8571199, 11.0252091 ], [ 79.8571037, 11.0251891 ], [ 79.8569431, 11.0252071 ], [ 79.8568089, 11.0252162 ], [ 79.8563177, 11.0225596 ], [ 79.8561039, 11.0202051 ], [ 79.8560566, 11.0196452 ], [ 79.856006, 11.0190477 ], [ 79.8554255, 11.0145086 ], [ 79.8550552, 11.0041474 ], [ 79.8549084, 10.9980746 ], [ 79.8546165, 10.9930655 ], [ 79.8546987, 10.9916516 ], [ 79.854447, 10.9838698 ], [ 79.8541954, 10.9805759 ], [ 79.8543002, 10.9791142 ], [ 79.8541285, 10.9753885 ], [ 79.8532473, 10.9364774 ], [ 79.853107, 10.9337898 ], [ 79.8529555, 10.9331591 ], [ 79.8529677, 10.9324571 ], [ 79.853107, 10.9310411 ], [ 79.8529919, 10.9296846 ], [ 79.853004, 10.9282924 ], [ 79.853085, 10.9258374 ], [ 79.8529919, 10.9254782 ], [ 79.8529858, 10.9250736 ], [ 79.8530646, 10.9242168 ], [ 79.8530062, 10.9229458 ], [ 79.8532001, 10.9201494 ], [ 79.8534161, 10.9174757 ], [ 79.8535675, 10.9165178 ], [ 79.8536039, 10.9158514 ], [ 79.853919, 10.9150839 ], [ 79.8542021, 10.9148713 ], [ 79.8560442, 10.9150022 ], [ 79.8560204, 10.9147959 ], [ 79.8560515, 10.9142457 ], [ 79.8561914, 10.913631 ], [ 79.8562987, 10.9133957 ], [ 79.8561048, 10.9132291 ], [ 79.8558988, 10.9133779 ], [ 79.855614, 10.9134433 ], [ 79.8544991, 10.9134017 ], [ 79.8541371, 10.9131799 ], [ 79.8535247, 10.9120272 ], [ 79.8531562, 10.9109418 ], [ 79.852822, 10.908796 ], [ 79.8526763, 10.9069112 ], [ 79.8527842, 10.9065479 ], [ 79.8528161, 10.9060378 ], [ 79.852574, 10.9051168 ], [ 79.8525427, 10.9049191 ], [ 79.8526019, 10.9044806 ], [ 79.8525154, 10.9032143 ], [ 79.8525974, 10.9022299 ], [ 79.8525199, 10.9016079 ], [ 79.8526162, 10.9009386 ], [ 79.8525521, 10.8889289 ], [ 79.8530379, 10.8873385 ], [ 79.8535842, 10.8663873 ], [ 79.8525964, 10.8494145 ], [ 79.8526049, 10.8445901 ], [ 79.8524762, 10.8441161 ], [ 79.8550762, 10.8434397 ], [ 79.8557456, 10.8430858 ], [ 79.8563763, 10.8425358 ], [ 79.8569555, 10.8416509 ], [ 79.8570971, 10.8410694 ], [ 79.8571106, 10.8370824 ], [ 79.8569228, 10.8364659 ], [ 79.8561119, 10.8355809 ], [ 79.8557596, 10.8353698 ], [ 79.855404, 10.8352017 ], [ 79.8528413, 10.8346068 ], [ 79.852598, 10.8337099 ], [ 79.8524306, 10.8313206 ], [ 79.8523019, 10.8295886 ], [ 79.8519158, 10.8292725 ], [ 79.8516583, 10.8278773 ], [ 79.8514997, 10.826535 ], [ 79.8518347, 10.8252659 ], [ 79.8517703, 10.8243204 ], [ 79.8511179, 10.818769 ], [ 79.8511572, 10.8131498 ], [ 79.8509542, 10.7771868 ], [ 79.8510418, 10.7748192 ], [ 79.8511557, 10.772133 ], [ 79.8512605, 10.7710307 ], [ 79.8513398, 10.7701958 ], [ 79.8515764, 10.7682758 ], [ 79.8517692, 10.7665538 ], [ 79.8519796, 10.7656411 ], [ 79.8522297, 10.7651217 ], [ 79.8541297, 10.7652817 ], [ 79.8541484, 10.7651519 ], [ 79.8542591, 10.7647355 ], [ 79.8543161, 10.7644141 ], [ 79.8543127, 10.764315 ], [ 79.8520858, 10.7642405 ], [ 79.8517342, 10.7637039 ], [ 79.8509335, 10.7616263 ], [ 79.850849, 10.7614524 ], [ 79.8506737, 10.7607205 ], [ 79.8506825, 10.7599456 ], [ 79.8505729, 10.7575089 ], [ 79.8507044, 10.7572205 ], [ 79.8506804, 10.7552008 ], [ 79.8514921, 10.7423774 ], [ 79.8514751, 10.7418685 ], [ 79.851458, 10.7411217 ], [ 79.8514751, 10.7401673 ], [ 79.8535842, 10.7230571 ], [ 79.8536815, 10.679807 ], [ 79.8536924, 10.6747973 ], [ 79.8532691, 10.6692679 ], [ 79.8534794, 10.664654 ], [ 79.8536339, 10.6633604 ], [ 79.8541188, 10.6533058 ], [ 79.8542712, 10.6419372 ], [ 79.8543288, 10.6403663 ], [ 79.8550695, 10.6201685 ], [ 79.8554975, 10.6114542 ], [ 79.8580474, 10.5752717 ], [ 79.8584122, 10.5704306 ], [ 79.8596529, 10.5539642 ], [ 79.8613301, 10.52424 ], [ 79.8613133, 10.5189141 ], [ 79.862763, 10.4926233 ], [ 79.8627803, 10.4923094 ], [ 79.8627728, 10.4914776 ], [ 79.8627221, 10.485865 ], [ 79.8642272, 10.4763708 ], [ 79.8659438, 10.4355186 ], [ 79.866992, 10.4148281 ], [ 79.8680742, 10.4025152 ], [ 79.869377, 10.3909464 ], [ 79.8813933, 10.3260783 ], [ 79.8815661, 10.3251338 ], [ 79.8841192, 10.3111792 ], [ 79.8834323, 10.3048169 ], [ 79.8801302, 10.2977204 ], [ 79.8758754, 10.2934481 ], [ 79.8743729, 10.2920107 ], [ 79.8679, 10.2866149 ], [ 79.8555255, 10.2794172 ], [ 79.8400465, 10.2755394 ], [ 79.8306895, 10.2750438 ], [ 79.8190891, 10.2743315 ], [ 79.8060092, 10.2737365 ], [ 79.774968, 10.2730954 ], [ 79.7439179, 10.2742677 ], [ 79.7424028, 10.2757409 ], [ 79.741844, 10.2776655 ], [ 79.7433808, 10.2773906 ], [ 79.7460354, 10.2760159 ], [ 79.7465943, 10.2767032 ], [ 79.7471531, 10.2789028 ], [ 79.7495283, 10.2780779 ], [ 79.7519034, 10.2760159 ], [ 79.7556757, 10.275191 ], [ 79.7563743, 10.2757409 ], [ 79.7558154, 10.2779405 ], [ 79.7510651, 10.2793152 ], [ 79.7479914, 10.2808274 ], [ 79.7488297, 10.2830269 ], [ 79.7507857, 10.2841267 ], [ 79.7505063, 10.2868761 ], [ 79.7510651, 10.2883882 ], [ 79.7537197, 10.2883882 ], [ 79.7559551, 10.2894879 ], [ 79.7590288, 10.2894879 ], [ 79.760426, 10.2868761 ], [ 79.759448, 10.2853639 ], [ 79.7600068, 10.2830269 ], [ 79.7619628, 10.2834393 ], [ 79.764338, 10.2863262 ], [ 79.7674117, 10.2875634 ], [ 79.771184, 10.2856388 ], [ 79.7717428, 10.284814 ], [ 79.7734194, 10.2841267 ], [ 79.7755151, 10.284814 ], [ 79.7784491, 10.2831644 ], [ 79.7805448, 10.2816522 ], [ 79.7841774, 10.2809649 ], [ 79.7862731, 10.2817897 ], [ 79.7864128, 10.2842641 ], [ 79.784876, 10.2877009 ], [ 79.7794271, 10.2918249 ], [ 79.7736988, 10.2955365 ], [ 79.7671323, 10.2986981 ], [ 79.761404, 10.3052963 ], [ 79.7586097, 10.3092826 ], [ 79.7587494, 10.3113445 ], [ 79.7611246, 10.3110696 ], [ 79.7641983, 10.3088702 ], [ 79.7664337, 10.3061211 ], [ 79.7699266, 10.3036468 ], [ 79.775096, 10.3013099 ], [ 79.7781697, 10.3011725 ], [ 79.7787286, 10.3022722 ], [ 79.7756548, 10.3035093 ], [ 79.7704854, 10.3057087 ], [ 79.7668528, 10.3085953 ], [ 79.7625217, 10.3124442 ], [ 79.7576317, 10.3135438 ], [ 79.7464546, 10.3139562 ], [ 79.7390497, 10.311482 ], [ 79.7324831, 10.3107947 ], [ 79.7288506, 10.3121692 ], [ 79.7208868, 10.3180799 ], [ 79.7140408, 10.3217911 ], [ 79.7060771, 10.3237155 ], [ 79.6961574, 10.32509 ], [ 79.6859583, 10.3242653 ], [ 79.6768768, 10.3202791 ], [ 79.6624863, 10.3182173 ], [ 79.6600782, 10.3183667 ], [ 79.646978, 10.3191795 ], [ 79.6402717, 10.319042 ], [ 79.6374774, 10.3202791 ], [ 79.6376171, 10.3244027 ], [ 79.6384554, 10.3277016 ], [ 79.6360803, 10.3344366 ], [ 79.634264, 10.3375979 ], [ 79.6309108, 10.3417212 ], [ 79.6285357, 10.3465317 ], [ 79.6289548, 10.3496929 ], [ 79.6306314, 10.3525791 ], [ 79.6297931, 10.3545033 ], [ 79.6288151, 10.3568398 ], [ 79.6311903, 10.3605506 ], [ 79.6328668, 10.3634367 ], [ 79.6296534, 10.3631618 ], [ 79.6258811, 10.36165 ], [ 79.6251826, 10.3578018 ], [ 79.625462, 10.3545033 ], [ 79.6230869, 10.350655 ], [ 79.6222486, 10.3488683 ], [ 79.6221089, 10.3466692 ], [ 79.6190351, 10.3439203 ], [ 79.6163806, 10.3432331 ], [ 79.6110714, 10.3411714 ], [ 79.614704, 10.339797 ], [ 79.6173586, 10.3389723 ], [ 79.619594, 10.3402093 ], [ 79.6214103, 10.3380102 ], [ 79.6226677, 10.3325123 ], [ 79.6201529, 10.3296259 ], [ 79.6173586, 10.323578 ], [ 79.6140054, 10.3189046 ], [ 79.6091154, 10.3169802 ], [ 79.6056226, 10.3147809 ], [ 79.6007326, 10.3095575 ], [ 79.5945851, 10.3090077 ], [ 79.589276, 10.3098325 ], [ 79.5864817, 10.311207 ], [ 79.58243, 10.3091452 ], [ 79.5769811, 10.309695 ], [ 79.5709734, 10.3095575 ], [ 79.5627303, 10.3117569 ], [ 79.55309, 10.3132689 ], [ 79.5522517, 10.3127191 ], [ 79.554068, 10.3110696 ], [ 79.5583991, 10.3087328 ], [ 79.5613331, 10.307908 ], [ 79.5708337, 10.3066709 ], [ 79.575584, 10.3048839 ], [ 79.581452, 10.3030969 ], [ 79.5874597, 10.3029595 ], [ 79.5910923, 10.3014474 ], [ 79.5940263, 10.3017223 ], [ 79.600034, 10.301035 ], [ 79.6072991, 10.2988356 ], [ 79.6134466, 10.2985607 ], [ 79.6218294, 10.2977359 ], [ 79.6272783, 10.295399 ], [ 79.6353817, 10.2947117 ], [ 79.6436248, 10.2927871 ], [ 79.648934, 10.2922373 ], [ 79.6561991, 10.2922373 ], [ 79.6612288, 10.2893505 ], [ 79.6652806, 10.2886631 ], [ 79.6668174, 10.291275 ], [ 79.6647217, 10.2948491 ], [ 79.6668174, 10.295399 ], [ 79.6693445, 10.3001776 ], [ 79.6745978, 10.3008374 ], [ 79.6782862, 10.298528 ], [ 79.68231, 10.2955588 ], [ 79.6882339, 10.2932494 ], [ 79.6893516, 10.2915998 ], [ 79.6880103, 10.2909399 ], [ 79.6827571, 10.2926995 ], [ 79.6806334, 10.2925895 ], [ 79.6801863, 10.2911599 ], [ 79.6872279, 10.2890704 ], [ 79.6944931, 10.286651 ], [ 79.7042172, 10.2835716 ], [ 79.7093587, 10.2839016 ], [ 79.7099175, 10.2856612 ], [ 79.7133824, 10.2851113 ], [ 79.7172944, 10.2825819 ], [ 79.7286951, 10.2806023 ], [ 79.7338366, 10.2784027 ], [ 79.7342837, 10.2763131 ], [ 79.7313776, 10.2742235 ], [ 79.7248381, 10.2744209 ], [ 79.6708155, 10.2820364 ], [ 79.6057051, 10.2940138 ], [ 79.5524901, 10.301783 ], [ 79.5355396, 10.3044226 ], [ 79.5336096, 10.3048873 ], [ 79.5270285, 10.3067172 ], [ 79.5245963, 10.3089693 ], [ 79.5245963, 10.3122067 ], [ 79.5263847, 10.3144588 ], [ 79.5291029, 10.3160775 ], [ 79.5320358, 10.3155848 ], [ 79.534611, 10.3138254 ], [ 79.5369717, 10.3121363 ], [ 79.5393323, 10.3121363 ], [ 79.5431236, 10.313755 ], [ 79.5484886, 10.3155848 ], [ 79.5515645, 10.317485 ], [ 79.5528521, 10.3201593 ], [ 79.5526375, 10.3239596 ], [ 79.5532098, 10.3267043 ], [ 79.5547835, 10.3291674 ], [ 79.560077, 10.331912 ], [ 79.5632961, 10.332475 ], [ 79.5719516, 10.3302934 ], [ 79.5791765, 10.3286748 ], [ 79.5825386, 10.3277599 ], [ 79.586616, 10.3279007 ], [ 79.5881898, 10.3298711 ], [ 79.5893343, 10.3323342 ], [ 79.5900497, 10.3365566 ], [ 79.590765, 10.3397234 ], [ 79.5894774, 10.3417642 ], [ 79.5879037, 10.343242 ], [ 79.5856861, 10.3430309 ], [ 79.5837547, 10.3420457 ], [ 79.5808933, 10.3414123 ], [ 79.5742407, 10.3414827 ], [ 79.5678742, 10.3438049 ], [ 79.5552127, 10.3462679 ], [ 79.549347, 10.3474642 ], [ 79.5469864, 10.3478864 ], [ 79.5433382, 10.3471827 ], [ 79.5424797, 10.3452827 ], [ 79.5432666, 10.3431716 ], [ 79.5431951, 10.340779 ], [ 79.5424082, 10.3404975 ], [ 79.5419075, 10.3427494 ], [ 79.540906, 10.3462679 ], [ 79.5393323, 10.347605 ], [ 79.5381162, 10.3463383 ], [ 79.5389031, 10.344016 ], [ 79.5386885, 10.3423975 ], [ 79.5397615, 10.3397234 ], [ 79.5409775, 10.3385974 ], [ 79.5424797, 10.3383863 ], [ 79.5431236, 10.3379641 ], [ 79.5421221, 10.3371196 ], [ 79.5409775, 10.33719 ], [ 79.5393323, 10.3382456 ], [ 79.5369001, 10.3386678 ], [ 79.5347541, 10.3376826 ], [ 79.5343964, 10.3361344 ], [ 79.535541, 10.3337417 ], [ 79.5389031, 10.3309268 ], [ 79.5424797, 10.3273377 ], [ 79.5427659, 10.3245227 ], [ 79.5410491, 10.3229744 ], [ 79.5374724, 10.3219891 ], [ 79.5362896, 10.3224961 ], [ 79.5332519, 10.3226929 ], [ 79.5316782, 10.3224114 ], [ 79.5271, 10.321215 ], [ 79.5250971, 10.3193148 ], [ 79.5215919, 10.320089 ], [ 79.5180152, 10.3213557 ], [ 79.514367, 10.3227633 ], [ 79.5107903, 10.323467 ], [ 79.5081436, 10.3243115 ], [ 79.5082866, 10.325719 ], [ 79.5103611, 10.3264932 ], [ 79.5128648, 10.3260005 ], [ 79.5155115, 10.3255079 ], [ 79.5191598, 10.3246634 ], [ 79.522808, 10.3247338 ], [ 79.5240241, 10.3255079 ], [ 79.5243817, 10.3269858 ], [ 79.5256693, 10.3271969 ], [ 79.5259555, 10.3264228 ], [ 79.5263131, 10.3241708 ], [ 79.5282445, 10.3237485 ], [ 79.5289599, 10.3252264 ], [ 79.5293891, 10.3265635 ], [ 79.5301044, 10.3280414 ], [ 79.5295321, 10.3289563 ], [ 79.5274577, 10.3301526 ], [ 79.5250971, 10.3307156 ], [ 79.5221642, 10.3305045 ], [ 79.519732, 10.3295896 ], [ 79.5180868, 10.3280414 ], [ 79.5155115, 10.3282525 ], [ 79.5119349, 10.3298008 ], [ 79.5115057, 10.330786 ], [ 79.5129363, 10.3317712 ], [ 79.5142955, 10.333601 ], [ 79.5142239, 10.3351492 ], [ 79.5140809, 10.3362048 ], [ 79.5113626, 10.3380344 ], [ 79.5082866, 10.3383863 ], [ 79.5044953, 10.3362048 ], [ 79.5035654, 10.3354307 ], [ 79.5023493, 10.333038 ], [ 79.5024924, 10.3310675 ], [ 79.5033508, 10.329097 ], [ 79.5044238, 10.3287451 ], [ 79.5049245, 10.326845 ], [ 79.5051392, 10.3238189 ], [ 79.5034939, 10.3221299 ], [ 79.5017771, 10.3208631 ], [ 79.4999887, 10.320652 ], [ 79.4975566, 10.3212854 ], [ 79.496412, 10.321778 ], [ 79.4956636, 10.3228638 ], [ 79.4960399, 10.3245193 ], [ 79.4965109, 10.3265451 ], [ 79.4976346, 10.3320818 ], [ 79.4969834, 10.3321704 ], [ 79.4954821, 10.3267747 ], [ 79.4938368, 10.3252264 ], [ 79.4936222, 10.3229744 ], [ 79.494266, 10.3209335 ], [ 79.4939084, 10.3202297 ], [ 79.4931215, 10.3202297 ], [ 79.4929784, 10.3219891 ], [ 79.4929069, 10.3237485 ], [ 79.4920485, 10.3244523 ], [ 79.4909755, 10.3245227 ], [ 79.4894017, 10.3250153 ], [ 79.4886864, 10.3256487 ], [ 79.4891156, 10.3278303 ], [ 79.4902601, 10.3276895 ], [ 79.4927638, 10.3274784 ], [ 79.4949098, 10.327408 ], [ 79.4958398, 10.3283229 ], [ 79.4957682, 10.3298008 ], [ 79.4952675, 10.3312082 ], [ 79.4936938, 10.3312082 ], [ 79.4911901, 10.3295896 ], [ 79.4890441, 10.3299415 ], [ 79.4878995, 10.3318416 ], [ 79.487828, 10.3338121 ], [ 79.4873988, 10.335501 ], [ 79.4855021, 10.3361033 ], [ 79.483679, 10.3362048 ], [ 79.4816046, 10.3363455 ], [ 79.478314, 10.3362751 ], [ 79.472674, 10.337386 ], [ 79.4695302, 10.336075 ], [ 79.470946, 10.3352899 ], [ 79.4743081, 10.3353603 ], [ 79.4782425, 10.3341639 ], [ 79.4813184, 10.3328268 ], [ 79.482606, 10.3303638 ], [ 79.4853958, 10.3278303 ], [ 79.4860397, 10.3257894 ], [ 79.4841082, 10.324593 ], [ 79.4789578, 10.3247338 ], [ 79.4736643, 10.3259302 ], [ 79.4708745, 10.3253672 ], [ 79.4621474, 10.3255079 ], [ 79.4604306, 10.3267747 ], [ 79.4581415, 10.327408 ], [ 79.4564247, 10.321778 ], [ 79.4572116, 10.3201593 ], [ 79.4615751, 10.3191741 ], [ 79.4773125, 10.3179777 ], [ 79.4874703, 10.316922 ], [ 79.4955107, 10.3169642 ], [ 79.5020346, 10.3158382 ], [ 79.5130794, 10.3145996 ], [ 79.5161124, 10.3155004 ], [ 79.5176003, 10.315613 ], [ 79.5174286, 10.314318 ], [ 79.5157691, 10.3130231 ], [ 79.5145061, 10.3117264 ], [ 79.5113488, 10.3086646 ], [ 79.4865736, 10.3103262 ], [ 79.4658047, 10.3125134 ], [ 79.454121, 10.3134929 ], [ 79.4137698, 10.3171662 ], [ 79.3992408, 10.3176771 ], [ 79.3889291, 10.3168319 ], [ 79.3837291, 10.3156927 ], [ 79.3799053, 10.3134211 ], [ 79.3773755, 10.3059076 ], [ 79.3751632, 10.3012821 ], [ 79.3705476, 10.2966586 ], [ 79.3703095, 10.2945516 ], [ 79.3685413, 10.293801 ], [ 79.367241, 10.2926641 ], [ 79.3620311, 10.2912897 ], [ 79.3575936, 10.2891848 ], [ 79.3544995, 10.288752 ], [ 79.3510212, 10.2866766 ], [ 79.3496822, 10.2855175 ], [ 79.3479571, 10.2868778 ], [ 79.3477811, 10.2862121 ], [ 79.340037, 10.287196 ], [ 79.3299386, 10.2839774 ], [ 79.3194293, 10.2772338 ], [ 79.3126008, 10.2702959 ], [ 79.3096826, 10.2657353 ], [ 79.3026445, 10.2645529 ], [ 79.2980981, 10.2621814 ], [ 79.2872994, 10.2530865 ], [ 79.2856922, 10.250932 ], [ 79.2846612, 10.2498981 ], [ 79.2827568, 10.2489743 ], [ 79.2763206, 10.2427431 ], [ 79.2738594, 10.2408005 ], [ 79.2703757, 10.2362891 ], [ 79.2676195, 10.2312212 ], [ 79.2676256, 10.2282343 ], [ 79.2726821, 10.221717 ], [ 79.2777525, 10.2200232 ], [ 79.2802352, 10.2180004 ], [ 79.2814939, 10.2152364 ], [ 79.2802352, 10.2122564 ], [ 79.2719954, 10.2068502 ], [ 79.2648605, 10.197722 ], [ 79.2556093, 10.1885325 ], [ 79.2464436, 10.1851677 ], [ 79.2421323, 10.1817258 ], [ 79.2410163, 10.1792093 ], [ 79.2419282, 10.1734254 ], [ 79.2381077, 10.1703175 ], [ 79.2384643, 10.167843 ], [ 79.2400664, 10.1646113 ], [ 79.2410163, 10.1625051 ], [ 79.2403783, 10.1579834 ], [ 79.2399966, 10.1533427 ], [ 79.2313314, 10.1499362 ], [ 79.2297667, 10.140617 ], [ 79.2299376, 10.13183 ], [ 79.232092455472994, 10.129665671874999 ], [ 79.2330541, 10.1286998 ], [ 79.2370738, 10.1282619 ], [ 79.228617, 10.1131852 ], [ 79.2280498, 10.1091411 ], [ 79.2294097, 10.1062872 ], [ 79.2296669, 10.1035858 ], [ 79.2267515, 10.1003356 ], [ 79.2270415, 10.0969885 ], [ 79.2278804, 10.0943732 ], [ 79.2295419, 10.0877893 ], [ 79.2330513, 10.0816995 ], [ 79.2366278, 10.0738485 ], [ 79.2377451, 10.0724999 ], [ 79.2437326, 10.0729692 ], [ 79.2518295, 10.0667664 ], [ 79.254659, 10.060522 ], [ 79.2526162, 10.0521561 ], [ 79.2526842, 10.0484259 ], [ 79.2571183, 10.0438553 ], [ 79.2674026, 10.0377216 ], [ 79.2639431, 10.0372964 ], [ 79.249648, 10.0298757 ], [ 79.2428202, 10.0253243 ], [ 79.2405156, 10.0221252 ], [ 79.2397002, 10.0202869 ], [ 79.2371768, 10.0188585 ], [ 79.2287482, 10.010047 ], [ 79.226658, 10.0068831 ], [ 79.2205256, 10.0008379 ], [ 79.20783, 9.9860797 ], [ 79.2015793, 9.9784805 ], [ 79.199211, 9.9729455 ], [ 79.1989657, 9.9711236 ], [ 79.1878376, 9.9637219 ], [ 79.1743001, 9.9502896 ], [ 79.167134, 9.9411239 ], [ 79.1627152, 9.9374222 ], [ 79.1593021, 9.9357649 ], [ 79.1550236, 9.9314086 ], [ 79.1525284, 9.9250786 ], [ 79.1534106, 9.9232703 ], [ 79.1531968, 9.9200438 ], [ 79.15262, 9.9178655 ], [ 79.1477646, 9.9112832 ], [ 79.144063, 9.9087734 ], [ 79.137161, 9.9014714 ], [ 79.1330913, 9.8976562 ], [ 79.1276463, 9.8935739 ], [ 79.1255233, 9.8903299 ], [ 79.1246287, 9.8844352 ], [ 79.119773, 9.876996 ], [ 79.1190308, 9.874388 ], [ 79.1186466, 9.8711747 ], [ 79.1189816, 9.86867 ], [ 79.122427, 9.8667557 ], [ 79.1239985, 9.8639211 ], [ 79.1246828, 9.8606722 ], [ 79.1213701, 9.8546747 ], [ 79.1155336, 9.8484168 ], [ 79.108359, 9.841835 ], [ 79.1074655, 9.8369157 ], [ 79.1018835, 9.8348781 ], [ 79.0961342, 9.8312183 ], [ 79.0884673, 9.8254532 ], [ 79.076709, 9.8018173 ], [ 79.0588364, 9.7753987 ], [ 79.0404935, 9.7661286 ], [ 79.019453, 9.7393134 ], [ 79.0167639, 9.732459 ], [ 79.0151875, 9.7301741 ], [ 79.0122202, 9.7280721 ], [ 79.0084184, 9.7245991 ], [ 79.0069347, 9.721126 ], [ 79.0046166, 9.7179271 ], [ 79.0014638, 9.714454 ], [ 78.9965492, 9.7110723 ], [ 78.9922838, 9.7053141 ], [ 78.9908928, 9.7014752 ], [ 78.9874619, 9.6960825 ], [ 78.984723, 9.6941064 ], [ 78.9807855, 9.688953 ], [ 78.9750932, 9.677394 ], [ 78.9707459, 9.6652826 ], [ 78.9711239, 9.6555932 ], [ 78.9671546, 9.6498166 ], [ 78.9623356, 9.6392856 ], [ 78.9558137, 9.6250324 ], [ 78.934833, 9.6084464 ], [ 78.9212238, 9.5549558 ], [ 78.9183886, 9.5415352 ], [ 78.9186095, 9.5370441 ], [ 78.9192956, 9.5347942 ], [ 78.9210184, 9.5331169 ], [ 78.9217598, 9.5320787 ], [ 78.9216359, 9.5318489 ], [ 78.9203603, 9.5307507 ], [ 78.9194796, 9.5306308 ], [ 78.9188215, 9.5307307 ], [ 78.9181129, 9.5315194 ], [ 78.917556, 9.5319987 ], [ 78.9165538, 9.5329272 ], [ 78.9152073, 9.5340454 ], [ 78.9146505, 9.5343649 ], [ 78.9138203, 9.5344547 ], [ 78.9134458, 9.5344248 ], [ 78.9130003, 9.534285 ], [ 78.9125144, 9.5344048 ], [ 78.9121297, 9.5347543 ], [ 78.9114716, 9.5350238 ], [ 78.911097, 9.5353333 ], [ 78.9107731, 9.5354631 ], [ 78.9107326, 9.5353034 ], [ 78.9110869, 9.5351736 ], [ 78.91134, 9.534914 ], [ 78.9117956, 9.5347043 ], [ 78.9121094, 9.5345745 ], [ 78.9123321, 9.534295 ], [ 78.912808, 9.5340953 ], [ 78.9132635, 9.5340753 ], [ 78.9135369, 9.5342051 ], [ 78.9139722, 9.5342351 ], [ 78.9146302, 9.5341552 ], [ 78.9150352, 9.5339156 ], [ 78.9164019, 9.5325977 ], [ 78.9173131, 9.5316892 ], [ 78.9181635, 9.5304411 ], [ 78.9184773, 9.529882 ], [ 78.9187102, 9.5297722 ], [ 78.9197327, 9.5297123 ], [ 78.9210184, 9.5292131 ], [ 78.9217676, 9.5288237 ], [ 78.9221624, 9.5284243 ], [ 78.9221826, 9.528025 ], [ 78.922018, 9.5275764 ], [ 78.9219153, 9.526319 ], [ 78.9202778, 9.5225407 ], [ 78.9163094, 9.5143196 ], [ 78.9140413, 9.5023888 ], [ 78.9149863, 9.4975418 ], [ 78.9134742, 9.4925083 ], [ 78.9070477, 9.4915762 ], [ 78.9053465, 9.4939997 ], [ 78.9019443, 9.4930676 ], [ 78.898353, 9.4898983 ], [ 78.8980007, 9.4827914 ], [ 78.8981259, 9.4805304 ], [ 78.8980494, 9.4802109 ], [ 78.8986882, 9.4770024 ], [ 78.8998207, 9.4714755 ], [ 78.9008607, 9.4684301 ], [ 78.9051669, 9.4599191 ], [ 78.9143086, 9.4434484 ], [ 78.9199219, 9.4336532 ], [ 78.9312417, 9.416624 ], [ 78.9470734, 9.3980848 ], [ 78.9613817, 9.3826536 ], [ 78.9819228, 9.3611547 ], [ 78.9903406, 9.353325 ], [ 78.9939745, 9.3501978 ], [ 78.9972167, 9.3481695 ], [ 78.9990235, 9.3464079 ], [ 78.9998471, 9.3457094 ], [ 79.0006486, 9.3451206 ], [ 79.0013628, 9.344596 ], [ 79.0111901, 9.3363604 ], [ 79.0188504, 9.3299742 ], [ 79.0272146, 9.3235744 ], [ 79.0340563, 9.3186185 ], [ 79.0420783, 9.3131968 ], [ 79.0546107, 9.3054266 ], [ 79.0636712, 9.3005798 ], [ 79.0662905, 9.2995224 ], [ 79.0685603, 9.2987687 ], [ 79.0771101, 9.2974127 ], [ 79.084615, 9.2951326 ], [ 79.0926043, 9.2927052 ], [ 79.0953514, 9.2918371 ], [ 79.1024904, 9.289581 ], [ 79.1100605, 9.2879999 ], [ 79.1139819, 9.2878729 ], [ 79.1197733, 9.2891371 ], [ 79.1235034, 9.2887908 ], [ 79.1258834, 9.2877289 ], [ 79.1289757, 9.2868268 ], [ 79.1300886, 9.2866931 ], [ 79.1321411, 9.2870355 ], [ 79.1354394, 9.2887589 ], [ 79.1375563, 9.2908108 ], [ 79.1396189, 9.2919701 ], [ 79.1400729, 9.2920339 ], [ 79.1440601, 9.2914112 ], [ 79.1563509, 9.2856833 ], [ 79.1595528, 9.2844832 ], [ 79.1635205, 9.2841671 ], [ 79.1668868, 9.2843422 ], [ 79.1685537, 9.2841542 ], [ 79.17003, 9.2842482 ], [ 79.1719825, 9.2845772 ], [ 79.1732922, 9.2844127 ], [ 79.1743161, 9.2844362 ], [ 79.1754302, 9.2846725 ], [ 79.1757924, 9.2846242 ], [ 79.181051, 9.2832868 ], [ 79.182103, 9.2828909 ], [ 79.1848671, 9.2828341 ], [ 79.1864315, 9.2829761 ], [ 79.1908333, 9.2829878 ], [ 79.1909039, 9.2826446 ], [ 79.1906543, 9.2822279 ], [ 79.1900305, 9.2819627 ], [ 79.1892113, 9.2816389 ], [ 79.1889172, 9.2815364 ], [ 79.1884565, 9.281688 ], [ 79.1881782, 9.2816501 ], [ 79.1868633, 9.2816974 ], [ 79.1862395, 9.2815175 ], [ 79.1852515, 9.2813937 ], [ 79.1847711, 9.281508 ], [ 79.1839649, 9.2815364 ], [ 79.1831587, 9.2817448 ], [ 79.1828228, 9.2816122 ], [ 79.1820742, 9.2814985 ], [ 79.1818343, 9.2812902 ], [ 79.1801516, 9.2810158 ], [ 79.1761527, 9.2802923 ], [ 79.1679584, 9.2793602 ], [ 79.1612911, 9.2783732 ], [ 79.1555525, 9.2774332 ], [ 79.154583, 9.2770242 ], [ 79.1531951, 9.2767987 ], [ 79.1500422, 9.2767422 ], [ 79.1475756, 9.2765637 ], [ 79.1454325, 9.2758822 ], [ 79.1442744, 9.2750863 ], [ 79.1431228, 9.2745662 ], [ 79.1425037, 9.2739082 ], [ 79.1423097, 9.273161 ], [ 79.1376699, 9.2724511 ], [ 79.1327885, 9.2718871 ], [ 79.1322918, 9.2715187 ], [ 79.1315979, 9.2717931 ], [ 79.1291213, 9.2715552 ], [ 79.1282167, 9.2712056 ], [ 79.1260736, 9.2705946 ], [ 79.1213851, 9.2695139 ], [ 79.1194064, 9.2691846 ], [ 79.1184063, 9.26871 ], [ 79.1135039, 9.265972 ], [ 79.1056506, 9.2639046 ], [ 79.0938059, 9.2600079 ], [ 79.0859095, 9.2605161 ], [ 79.0818131, 9.2602379 ], [ 79.0745497, 9.2608668 ], [ 79.0727657, 9.2602379 ], [ 79.0714914, 9.2609925 ], [ 79.0679233, 9.2611183 ], [ 79.0637182, 9.2608668 ], [ 79.0623164, 9.2625018 ], [ 79.0547981, 9.2626275 ], [ 79.0494461, 9.2638852 ], [ 79.0477895, 9.2650171 ], [ 79.0460055, 9.2647656 ], [ 78.9984311, 9.2721195 ], [ 78.9869053, 9.2733456 ], [ 78.9827589, 9.2734673 ], [ 78.9721209, 9.2732683 ], [ 78.9701082, 9.2730734 ], [ 78.9646129, 9.2728204 ], [ 78.9626933, 9.2724987 ], [ 78.9556264, 9.2721575 ], [ 78.9469124, 9.2709716 ], [ 78.940238, 9.2692583 ], [ 78.9348253, 9.2683424 ], [ 78.9262668, 9.2661885 ], [ 78.923633, 9.2648386 ], [ 78.9200713, 9.2613871 ], [ 78.9185246, 9.2598324 ], [ 78.9154318, 9.2565937 ], [ 78.9146637, 9.2549152 ], [ 78.9137618, 9.2538795 ], [ 78.9124954, 9.2526897 ], [ 78.9103003, 9.251238 ], [ 78.9069143, 9.249846 ], [ 78.9054584, 9.2498338 ], [ 78.9012029, 9.2509723 ], [ 78.8892536, 9.2545089 ], [ 78.8856187, 9.2552603 ], [ 78.8806868, 9.2561324 ], [ 78.8752438, 9.2567454 ], [ 78.8716112, 9.2560785 ], [ 78.869918, 9.2539287 ], [ 78.8628585, 9.2539509 ], [ 78.860477, 9.2534361 ], [ 78.8571132, 9.2520194 ], [ 78.8558128, 9.2515038 ], [ 78.8528324, 9.2486065 ], [ 78.8470234, 9.248461 ], [ 78.8434114, 9.2481563 ], [ 78.8426232, 9.2480886 ], [ 78.8361508, 9.245562 ], [ 78.8348448, 9.2450516 ], [ 78.8330166, 9.2441367 ], [ 78.8306959, 9.2430915 ], [ 78.8268378, 9.2420284 ], [ 78.8235173, 9.2408475 ], [ 78.8224809, 9.2402101 ], [ 78.8224873, 9.2395493 ], [ 78.8214749, 9.2393269 ], [ 78.8191753, 9.2385973 ], [ 78.8182912, 9.2382097 ], [ 78.8178632, 9.2376643 ], [ 78.8151949, 9.2370882 ], [ 78.8093284, 9.2370109 ], [ 78.8080785, 9.2366371 ], [ 78.8061688, 9.236531 ], [ 78.8047804, 9.2363194 ], [ 78.8029869, 9.2353665 ], [ 78.8027108, 9.2349438 ], [ 78.8016261, 9.2344289 ], [ 78.7999524, 9.2339378 ], [ 78.7984644, 9.233027 ], [ 78.7977061, 9.2321193 ], [ 78.7954785, 9.2309377 ], [ 78.7947586, 9.2301477 ], [ 78.7944024, 9.2291893 ], [ 78.7936021, 9.2290527 ], [ 78.7906827, 9.2294424 ], [ 78.7886872, 9.2291872 ], [ 78.7870768, 9.2283823 ], [ 78.786079, 9.2275002 ], [ 78.7850844, 9.2266085 ], [ 78.7833131, 9.2261499 ], [ 78.7807328, 9.2261351 ], [ 78.778867, 9.225758 ], [ 78.776785, 9.224751 ], [ 78.7740622, 9.2229247 ], [ 78.771661, 9.2217688 ], [ 78.7687627, 9.2212589 ], [ 78.7669089, 9.2212532 ], [ 78.7654716, 9.2209126 ], [ 78.7622905, 9.2190778 ], [ 78.7612734, 9.2188756 ], [ 78.7593578, 9.2177774 ], [ 78.7578187, 9.2173177 ], [ 78.7564266, 9.2157832 ], [ 78.7501041, 9.2147348 ], [ 78.7501, 9.214734084042492 ], [ 78.7484096, 9.2144389 ], [ 78.7475169, 9.2140252 ], [ 78.7464676, 9.2141221 ], [ 78.745149, 9.2138695 ], [ 78.743375, 9.2129026 ], [ 78.7408586, 9.2119193 ], [ 78.7392978, 9.212023 ], [ 78.7372947, 9.2120438 ], [ 78.735943, 9.211679 ], [ 78.7313147, 9.2104297 ], [ 78.7301099, 9.2096805 ], [ 78.7293905, 9.2096667 ], [ 78.7275076, 9.2091716 ], [ 78.7264304, 9.2081628 ], [ 78.7259846, 9.2072367 ], [ 78.7245497, 9.2062136 ], [ 78.7232402, 9.2059843 ], [ 78.7217677, 9.2050619 ], [ 78.7208947, 9.2043091 ], [ 78.7201959, 9.2038408 ], [ 78.7193397, 9.2029681 ], [ 78.7183859, 9.2017301 ], [ 78.7178967, 9.2004247 ], [ 78.7175271, 9.1995393 ], [ 78.7175035, 9.1981181 ], [ 78.7178457, 9.1981212 ], [ 78.7182706, 9.1993413 ], [ 78.7191292, 9.2012035 ], [ 78.7204486, 9.1995589 ], [ 78.7204486, 9.1980864 ], [ 78.7196512, 9.1967859 ], [ 78.7192628, 9.1961523 ], [ 78.7190635, 9.1951759 ], [ 78.719483, 9.1941295 ], [ 78.7192501, 9.1923746 ], [ 78.7185034, 9.1904015 ], [ 78.7171081, 9.1900852 ], [ 78.7152335, 9.1902714 ], [ 78.7102658, 9.1910772 ], [ 78.7054432, 9.1906959 ], [ 78.7016157, 9.1922177 ], [ 78.696431, 9.193655 ], [ 78.6899937, 9.1950377 ], [ 78.6826219, 9.1961916 ], [ 78.6780952, 9.1961884 ], [ 78.6749637, 9.1953496 ], [ 78.6703177, 9.1952386 ], [ 78.6642305, 9.1941126 ], [ 78.6592084, 9.192526 ], [ 78.6588039, 9.1918556 ], [ 78.6587663, 9.191378 ], [ 78.6520619, 9.1874688 ], [ 78.6500846, 9.1858483 ], [ 78.6476427, 9.183586 ], [ 78.6454485, 9.1814696 ], [ 78.6442655, 9.1796805 ], [ 78.6429874, 9.1771327 ], [ 78.6426569, 9.1742939 ], [ 78.6432921, 9.1713634 ], [ 78.6461267, 9.1697048 ], [ 78.6472591, 9.168587 ], [ 78.6477637, 9.1672956 ], [ 78.649309, 9.1665082 ], [ 78.6491293, 9.1616216 ], [ 78.6506562, 9.1590332 ], [ 78.6527421, 9.1580198 ], [ 78.6559557, 9.1582079 ], [ 78.655961, 9.1587225 ], [ 78.6575142, 9.1587068 ], [ 78.6575037, 9.1576777 ], [ 78.6321749, 9.1542966 ], [ 78.6170518, 9.1515231 ], [ 78.6116764, 9.1501996 ], [ 78.6029152, 9.1470992 ], [ 78.5944383, 9.1427428 ], [ 78.5920898, 9.1413835 ], [ 78.5876661, 9.1386931 ], [ 78.5839488, 9.1356041 ], [ 78.5820496, 9.1337318 ], [ 78.5790575, 9.1311329 ], [ 78.5756791, 9.1309643 ], [ 78.5704058, 9.1332949 ], [ 78.5682023, 9.1341255 ], [ 78.5621253, 9.1357069 ], [ 78.5529242, 9.1368392 ], [ 78.5449267, 9.1367978 ], [ 78.5166892, 9.1352716 ], [ 78.5034508, 9.132845 ], [ 78.4879949, 9.1283134 ], [ 78.4866538, 9.1279151 ], [ 78.4856281, 9.1276672 ], [ 78.4823129, 9.1273134 ], [ 78.4784405, 9.1275103 ], [ 78.4736096, 9.1272668 ], [ 78.4609976, 9.1264383 ], [ 78.4561749, 9.1255294 ], [ 78.454969, 9.1250294 ], [ 78.4317722, 9.11879 ], [ 78.4151329, 9.1123609 ], [ 78.4116953, 9.111237 ], [ 78.4076023, 9.1087115 ], [ 78.4032485, 9.1058025 ], [ 78.397279, 9.1017366 ], [ 78.3924135, 9.0979599 ], [ 78.3776302, 9.0874242 ], [ 78.3696222, 9.0802455 ], [ 78.365416, 9.0767689 ], [ 78.3650786, 9.0764165 ], [ 78.363957, 9.0752447 ], [ 78.3627453, 9.0739575 ], [ 78.3623389, 9.0735055 ], [ 78.3614815, 9.072546 ], [ 78.3587653, 9.069623 ], [ 78.3565201, 9.0677227 ], [ 78.3534345, 9.0649511 ], [ 78.3488083, 9.0608996 ], [ 78.3443322, 9.0573439 ], [ 78.3363456, 9.0512157 ], [ 78.3257155, 9.0438032 ], [ 78.318686, 9.0393149 ], [ 78.3132872, 9.0352335 ], [ 78.3081932, 9.0303297 ], [ 78.3022794, 9.0265152 ], [ 78.2995543, 9.0239128 ], [ 78.2874908, 9.0165661 ], [ 78.2818174, 9.012887 ], [ 78.2714546, 9.006146 ], [ 78.2678356, 9.0038302 ], [ 78.2672906, 9.0031594 ], [ 78.2636353, 9.0012955 ], [ 78.2498498, 8.9921064 ], [ 78.2474535, 8.9904798 ], [ 78.2452927, 8.988842 ], [ 78.2408402, 8.9856104 ], [ 78.2364596, 8.9822612 ], [ 78.2314369, 8.9785982 ], [ 78.2262699, 8.9744387 ], [ 78.2218518, 8.9716765 ], [ 78.2137948, 8.9637417 ], [ 78.2115539, 8.9617423 ], [ 78.209813, 8.9598271 ], [ 78.2085749, 8.9579682 ], [ 78.2073893, 8.9567728 ], [ 78.2070003, 8.9563515 ], [ 78.2069623, 8.9560065 ], [ 78.2066211, 8.9548429 ], [ 78.207076, 8.9543988 ], [ 78.2037598, 8.9503885 ], [ 78.2030538, 8.9488613 ], [ 78.1972527, 8.9422246 ], [ 78.1943924, 8.9380053 ], [ 78.1911598, 8.9319143 ], [ 78.1886976, 8.9277405 ], [ 78.1867084, 8.9238496 ], [ 78.1844146, 8.9183106 ], [ 78.1813258, 8.9104767 ], [ 78.1800168, 8.905709 ], [ 78.1796, 8.9028115 ], [ 78.1802368, 8.8957305 ], [ 78.1794911, 8.8920386 ], [ 78.178532, 8.8919358 ], [ 78.1778958, 8.8913931 ], [ 78.1765285, 8.8923147 ], [ 78.1756898, 8.8918011 ], [ 78.1747501, 8.8907465 ], [ 78.1733371, 8.888883 ], [ 78.1721859, 8.8871446 ], [ 78.1710684, 8.885498 ], [ 78.170201, 8.8836985 ], [ 78.1690322, 8.8798075 ], [ 78.1693427, 8.8777656 ], [ 78.1679898, 8.8750752 ], [ 78.1679866, 8.8706135 ], [ 78.1688449, 8.8633033 ], [ 78.1682538, 8.8622422 ], [ 78.1681025, 8.8594033 ], [ 78.1663322, 8.8563365 ], [ 78.1661972, 8.8523957 ], [ 78.1661917, 8.8487345 ], [ 78.1675399, 8.8444211 ], [ 78.1655458, 8.8388 ], [ 78.1652489, 8.8359458 ], [ 78.1653559, 8.8312708 ], [ 78.1664942, 8.8275602 ], [ 78.1672592, 8.8266325 ], [ 78.1677667, 8.8263908 ], [ 78.167124, 8.8257229 ], [ 78.1666307, 8.8244041 ], [ 78.166638, 8.8237902 ], [ 78.1661829, 8.8232069 ], [ 78.166049, 8.8225349 ], [ 78.1651591, 8.8214633 ], [ 78.1643, 8.8195957 ], [ 78.1635388, 8.8172918 ], [ 78.1632636, 8.8154717 ], [ 78.1633344, 8.8143296 ], [ 78.1634554, 8.8136389 ], [ 78.1635224, 8.8121678 ], [ 78.1637303, 8.8115025 ], [ 78.1640836, 8.8114787 ], [ 78.1643011, 8.8112295 ], [ 78.1649513, 8.811247 ], [ 78.1655038, 8.8106509 ], [ 78.1651564, 8.8101269 ], [ 78.1640157, 8.8097545 ], [ 78.1631099, 8.8091552 ], [ 78.1629962, 8.8086328 ], [ 78.1627653, 8.8061367 ], [ 78.1650542, 8.804718 ], [ 78.1651287, 8.8047226 ], [ 78.1651916, 8.8047042 ], [ 78.1653061, 8.8046105 ], [ 78.1651699, 8.8044849 ], [ 78.1639795, 8.8027052 ], [ 78.1639224, 8.8025634 ], [ 78.1638556, 8.8026432 ], [ 78.1634892, 8.8028564 ], [ 78.1631355, 8.8029584 ], [ 78.1627124, 8.8031569 ], [ 78.1623436, 8.8030795 ], [ 78.1620742, 8.8031207 ], [ 78.1619418, 8.8033401 ], [ 78.16188, 8.803585 ], [ 78.160247, 8.8043514 ], [ 78.159376, 8.8025253 ], [ 78.1604821, 8.8019759 ], [ 78.160386, 8.8018004 ], [ 78.1592887, 8.8023268 ], [ 78.1589548, 8.8016664 ], [ 78.1590034, 8.8014553 ], [ 78.1590785, 8.8014169 ], [ 78.1580678, 8.7994037 ], [ 78.1583391, 8.7985833 ], [ 78.1582924, 8.7985517 ], [ 78.1582736, 8.7985218 ], [ 78.1582624, 8.79847 ], [ 78.1583199, 8.7983123 ], [ 78.1586106, 8.7983455 ], [ 78.1586471, 8.7983713 ], [ 78.1586784, 8.7983671 ], [ 78.1586962, 8.7983393 ], [ 78.1586899, 8.7983022 ], [ 78.1586576, 8.7982826 ], [ 78.1585991, 8.7982785 ], [ 78.1580065, 8.798066 ], [ 78.1579701, 8.7977854 ], [ 78.1581465, 8.7974368 ], [ 78.1581339, 8.7971858 ], [ 78.1581768, 8.7968712 ], [ 78.1583353, 8.7966435 ], [ 78.1586499, 8.7962183 ], [ 78.1588168, 8.7961587 ], [ 78.159619, 8.7964991 ], [ 78.1602966, 8.7968314 ], [ 78.1603481, 8.7969756 ], [ 78.1604189, 8.7970287 ], [ 78.1605165, 8.7970012 ], [ 78.160531, 8.7969372 ], [ 78.160508, 8.7966275 ], [ 78.1599961, 8.7964137 ], [ 78.1600568, 8.7963281 ], [ 78.1604877, 8.7965142 ], [ 78.1604596, 8.7961945 ], [ 78.159596, 8.7958244 ], [ 78.1597795, 8.7954267 ], [ 78.1601947, 8.7956004 ], [ 78.1602584, 8.7954745 ], [ 78.1598456, 8.7952954 ], [ 78.1600047, 8.7948893 ], [ 78.1604234, 8.7950569 ], [ 78.1604756, 8.7949409 ], [ 78.160066, 8.7947617 ], [ 78.1610357, 8.792515 ], [ 78.1613701, 8.7926535 ], [ 78.1617522, 8.7927794 ], [ 78.162284, 8.7930594 ], [ 78.1623572, 8.7931727 ], [ 78.1613512, 8.7954443 ], [ 78.1613003, 8.7957111 ], [ 78.1613334, 8.7959075 ], [ 78.1614328, 8.7962625 ], [ 78.1614913, 8.7966099 ], [ 78.16142, 8.796849 ], [ 78.1611986, 8.7972288 ], [ 78.1610289, 8.7974398 ], [ 78.1611323, 8.7976022 ], [ 78.1616476, 8.796701 ], [ 78.1615499, 8.7961531 ], [ 78.1614515, 8.7955732 ], [ 78.1626384, 8.792711 ], [ 78.1611929, 8.7919364 ], [ 78.1610736, 8.7913204 ], [ 78.161496, 8.7900582 ], [ 78.1615017, 8.7896462 ], [ 78.162191, 8.7879161 ], [ 78.1632443, 8.7848855 ], [ 78.1639639, 8.7831448 ], [ 78.1641364, 8.7822072 ], [ 78.1637424, 8.7819429 ], [ 78.1629101, 8.7827058 ], [ 78.1630324, 8.7842427 ], [ 78.1630338, 8.7847458 ], [ 78.1628251, 8.7856442 ], [ 78.1619212, 8.786332 ], [ 78.1611275, 8.7874689 ], [ 78.1599522, 8.7857812 ], [ 78.159578, 8.7845446 ], [ 78.1595887, 8.7842637 ], [ 78.1592419, 8.7838167 ], [ 78.1594152, 8.7833152 ], [ 78.1593991, 8.7826266 ], [ 78.159637, 8.782191 ], [ 78.1598315, 8.782172 ], [ 78.1600664, 8.7798899 ], [ 78.160553, 8.7786719 ], [ 78.1621797, 8.7761547 ], [ 78.1622355, 8.775264 ], [ 78.1620856, 8.7751996 ], [ 78.1613308, 8.775476 ], [ 78.1609493, 8.7761029 ], [ 78.1610795, 8.7769372 ], [ 78.1608762, 8.77751 ], [ 78.1604451, 8.7778652 ], [ 78.1596002, 8.7790923 ], [ 78.1593913, 8.7788826 ], [ 78.1596204, 8.7785385 ], [ 78.1595206, 8.7783713 ], [ 78.1589324, 8.7779471 ], [ 78.1577873, 8.7708758 ], [ 78.1583836, 8.7699931 ], [ 78.1594034, 8.7701231 ], [ 78.1607042, 8.7702295 ], [ 78.1616334, 8.7711499 ], [ 78.1619615, 8.772218 ], [ 78.162579, 8.7725613 ], [ 78.1624174, 8.7714516 ], [ 78.1624294, 8.7703255 ], [ 78.1627334, 8.7702534 ], [ 78.1629457, 8.7703679 ], [ 78.1630522, 8.7714397 ], [ 78.1632738, 8.7721226 ], [ 78.1648563, 8.7724278 ], [ 78.1655317, 8.7724468 ], [ 78.1665353, 8.7721989 ], [ 78.1671914, 8.7717984 ], [ 78.1679965, 8.770908 ], [ 78.1685996, 8.770365 ], [ 78.1691003, 8.7700289 ], [ 78.1706953, 8.7691502 ], [ 78.1715738, 8.7689842 ], [ 78.1727064, 8.7687311 ], [ 78.1738328, 8.7684416 ], [ 78.1761782, 8.7675446 ], [ 78.1783165, 8.7673144 ], [ 78.1795764, 8.7664941 ], [ 78.1804875, 8.7693441 ], [ 78.181074, 8.7732637 ], [ 78.1823015, 8.7807182 ], [ 78.1840816, 8.7897561 ], [ 78.1907983, 8.7887799 ], [ 78.1937615, 8.7874621 ], [ 78.1958851, 8.7873157 ], [ 78.1968729, 8.7885847 ], [ 78.198799, 8.7873157 ], [ 78.1998361, 8.7850706 ], [ 78.1998855, 8.7832647 ], [ 78.1999088, 8.7807983 ], [ 78.1982184, 8.7650482 ], [ 78.2153253, 8.7572766 ], [ 78.2185757, 8.756119 ], [ 78.2212112, 8.7554533 ], [ 78.2235313, 8.7545658 ], [ 78.2236398, 8.7546644 ], [ 78.2237786, 8.7546773 ], [ 78.2239522, 8.7545487 ], [ 78.2240115, 8.7543406 ], [ 78.2253108, 8.7535763 ], [ 78.2256576, 8.7532236 ], [ 78.2264717, 8.7522134 ], [ 78.2274392, 8.7505955 ], [ 78.2284074, 8.7489645 ], [ 78.2286077, 8.7487468 ], [ 78.2287521, 8.7486963 ], [ 78.2288759, 8.7487099 ], [ 78.2289564, 8.7487138 ], [ 78.2290399, 8.7486636 ], [ 78.229072, 8.748547 ], [ 78.2290634, 8.7484552 ], [ 78.2290186, 8.7484108 ], [ 78.2289342, 8.7483955 ], [ 78.2285011, 8.7485478 ], [ 78.2283344, 8.7486611 ], [ 78.2281497, 8.7489414 ], [ 78.2278079, 8.7493813 ], [ 78.2275325, 8.749849 ], [ 78.2274397, 8.7498834 ], [ 78.2269705, 8.7494208 ], [ 78.2270016, 8.7493791 ], [ 78.226896, 8.7492883 ], [ 78.2268416, 8.7492979 ], [ 78.2266941, 8.7495082 ], [ 78.226795, 8.7495921 ], [ 78.2268238, 8.7495394 ], [ 78.2273723, 8.7501428 ], [ 78.2261834, 8.7520934 ], [ 78.2254747, 8.7530396 ], [ 78.2248078, 8.7536157 ], [ 78.2223836, 8.7547889 ], [ 78.220309, 8.7553881 ], [ 78.2181089, 8.7559604 ], [ 78.216044, 8.7566661 ], [ 78.2141527, 8.7574481 ], [ 78.1987715, 8.7644481 ], [ 78.1972469, 8.7605762 ], [ 78.1996122, 8.7594854 ], [ 78.1996207, 8.7588787 ], [ 78.2014173, 8.7580388 ], [ 78.1989844, 8.7526921 ], [ 78.200848, 8.7518178 ], [ 78.200886, 8.7516892 ], [ 78.2046633, 8.7499051 ], [ 78.2047557, 8.750072 ], [ 78.2049014, 8.7501299 ], [ 78.2050045, 8.74987 ], [ 78.2060264, 8.7502336 ], [ 78.2060531, 8.7501598 ], [ 78.2057332, 8.7500386 ], [ 78.2057776, 8.7499051 ], [ 78.2053457, 8.7497242 ], [ 78.2052969, 8.7496427 ], [ 78.2053475, 8.7495819 ], [ 78.206727, 8.7489985 ], [ 78.2080143, 8.7496109 ], [ 78.2081783, 8.7492667 ], [ 78.2071472, 8.7487694 ], [ 78.2102929, 8.7472817 ], [ 78.2118947, 8.7507722 ], [ 78.2114822, 8.7509543 ], [ 78.2114122, 8.7510202 ], [ 78.2130719, 8.7519167 ], [ 78.2129604, 8.7519842 ], [ 78.2130933, 8.7522837 ], [ 78.2159517, 8.7509248 ], [ 78.2174231, 8.7479147 ], [ 78.2138439, 8.746099 ], [ 78.2141334, 8.7454696 ], [ 78.2159861, 8.7446685 ], [ 78.2231218, 8.7481014 ], [ 78.2241494, 8.7476441 ], [ 78.225554, 8.7483121 ], [ 78.2256413, 8.7484054 ], [ 78.2258483, 8.7482433 ], [ 78.2258464, 8.7481891 ], [ 78.2257842, 8.7481298 ], [ 78.2257486, 8.7481518 ], [ 78.2166709, 8.7436392 ], [ 78.2163335, 8.7436762 ], [ 78.1944627, 8.7538824 ], [ 78.1917828, 8.7486219 ], [ 78.191258, 8.748307 ], [ 78.1904709, 8.7484922 ], [ 78.1878765, 8.7495694 ], [ 78.1845455, 8.7497141 ], [ 78.1822029, 8.7492438 ], [ 78.173052, 8.7459517 ], [ 78.1701237, 8.7439619 ], [ 78.1640109, 8.7377392 ], [ 78.1590473, 8.7299273 ], [ 78.1580813, 8.728144 ], [ 78.1559339, 8.7188949 ], [ 78.1546602, 8.7115368 ], [ 78.1544886, 8.7112452 ], [ 78.1538307, 8.7099636 ], [ 78.1521312, 8.7077892 ], [ 78.1487404, 8.704471 ], [ 78.1436642, 8.7007809 ], [ 78.1419692, 8.6991212 ], [ 78.1412497, 8.6977883 ], [ 78.1385623, 8.6938727 ], [ 78.137969, 8.6929193 ], [ 78.1373088, 8.6913848 ], [ 78.1362635, 8.6887372 ], [ 78.1352829, 8.6858482 ], [ 78.1349713, 8.6845761 ], [ 78.1341564, 8.6816515 ], [ 78.133294, 8.678226 ], [ 78.132988, 8.6762647 ], [ 78.132738, 8.6746505 ], [ 78.1325513, 8.6720445 ], [ 78.1323153, 8.6700919 ], [ 78.1319902, 8.667259 ], [ 78.1314441, 8.6650073 ], [ 78.130662, 8.662817 ], [ 78.1301178, 8.6607274 ], [ 78.129297, 8.6579049 ], [ 78.1285774, 8.654179 ], [ 78.1281933, 8.651573 ], [ 78.1280914, 8.6506767 ], [ 78.127644, 8.6488184 ], [ 78.1275778, 8.647576 ], [ 78.1274305, 8.6460298 ], [ 78.1274455, 8.6437324 ], [ 78.1274289, 8.641752 ], [ 78.1274189, 8.6405649 ], [ 78.1274117, 8.6399702 ], [ 78.127386, 8.6378366 ], [ 78.1270574, 8.6340481 ], [ 78.1270574, 8.6322103 ], [ 78.1268575, 8.6298784 ], [ 78.1270329, 8.6257539 ], [ 78.1269917, 8.622853 ], [ 78.1272867, 8.6204536 ], [ 78.1282115, 8.6147116 ], [ 78.130014, 8.6077285 ], [ 78.1324097, 8.601772 ], [ 78.1344428, 8.5986553 ], [ 78.137698, 8.5918278 ], [ 78.1386528, 8.5886776 ], [ 78.1384329, 8.5861077 ], [ 78.1381588, 8.5837006 ], [ 78.1354717, 8.5728913 ], [ 78.1350082, 8.5705488 ], [ 78.1345447, 8.5675383 ], [ 78.134152, 8.5656615 ], [ 78.1334546, 8.563701 ], [ 78.133033, 8.5606911 ], [ 78.1327736, 8.557745 ], [ 78.1319484, 8.5554561 ], [ 78.1300074, 8.5521091 ], [ 78.1286825, 8.5488018 ], [ 78.1263308, 8.542453 ], [ 78.1252289, 8.53644 ], [ 78.1241366, 8.5312534 ], [ 78.1232569, 8.522484 ], [ 78.1229889, 8.5153495 ], [ 78.123583, 8.5126492 ], [ 78.1242909, 8.5108928 ], [ 78.1245642, 8.5102973 ], [ 78.1251424, 8.5096373 ], [ 78.1263553, 8.5075199 ], [ 78.1265093, 8.5038449 ], [ 78.1267362, 8.500877 ], [ 78.1271851, 8.4997908 ], [ 78.1291717, 8.4987771 ], [ 78.1296754, 8.4981394 ], [ 78.1301961, 8.4974181 ], [ 78.1301007, 8.4970723 ], [ 78.1299225, 8.4965096 ], [ 78.1301147, 8.4960751 ], [ 78.1292616, 8.494949 ], [ 78.1285974, 8.4940524 ], [ 78.127762, 8.4926724 ], [ 78.1269294, 8.4913688 ], [ 78.1253931, 8.4897189 ], [ 78.1233446, 8.4873389 ], [ 78.1215271, 8.4853826 ], [ 78.1188595, 8.4822628 ], [ 78.1159314, 8.4791374 ], [ 78.1127335, 8.4758318 ], [ 78.1091988, 8.4722422 ], [ 78.1071969, 8.4700679 ], [ 78.1065451, 8.4694301 ], [ 78.1032932, 8.4668816 ], [ 78.1017314, 8.465607 ], [ 78.0967353, 8.4603995 ], [ 78.0929898, 8.4556363 ], [ 78.090475, 8.4526251 ], [ 78.08678, 8.44772 ], [ 78.0819906, 8.4422005 ], [ 78.0802197, 8.4401896 ], [ 78.0781841, 8.4370543 ], [ 78.0763591, 8.4351382 ], [ 78.0750513, 8.4332173 ], [ 78.0736096, 8.4307834 ], [ 78.0720901, 8.4287573 ], [ 78.0703418, 8.4261753 ], [ 78.0682452, 8.4225874 ], [ 78.0665707, 8.4197231 ], [ 78.0651224, 8.4166167 ], [ 78.0637898, 8.4128287 ], [ 78.0628568, 8.4074416 ], [ 78.0617914, 8.4039073 ], [ 78.0613773, 8.4009026 ], [ 78.0600856, 8.3972663 ], [ 78.0582487, 8.3944323 ], [ 78.0569345, 8.3898578 ], [ 78.0561492, 8.3850071 ], [ 78.0562712, 8.3825752 ], [ 78.0567181, 8.3812789 ], [ 78.056769, 8.3810857 ], [ 78.057015, 8.380534 ], [ 78.0572317, 8.379846 ], [ 78.0581544, 8.3780548 ], [ 78.0588386, 8.3771751 ], [ 78.0597972, 8.3764218 ], [ 78.0601955, 8.3763363 ], [ 78.060479, 8.3759659 ], [ 78.0610064, 8.3757316 ], [ 78.0614948, 8.3749289 ], [ 78.0620304, 8.3749403 ], [ 78.0633222, 8.3742241 ], [ 78.0643384, 8.3742703 ], [ 78.0653479, 8.3744958 ], [ 78.0667202, 8.3744491 ], [ 78.067269, 8.3740332 ], [ 78.0674147, 8.3738966 ], [ 78.0677006, 8.373908 ], [ 78.0679045, 8.3737679 ], [ 78.0676102, 8.3731464 ], [ 78.0663853, 8.3720378 ], [ 78.0474282, 8.3653657 ], [ 78.0333579, 8.3603571 ], [ 78.0228662, 8.3569317 ], [ 78.0032315, 8.3477327 ], [ 77.9875772, 8.3404573 ], [ 77.9804141, 8.3372424 ], [ 77.9736189, 8.3336992 ], [ 77.9719971, 8.3326211 ], [ 77.9675468, 8.3293053 ], [ 77.9616703, 8.3260471 ], [ 77.9604615, 8.3251425 ], [ 77.9588193, 8.3236404 ], [ 77.9567174, 8.3213924 ], [ 77.956519, 8.3187628 ], [ 77.9557401, 8.3168222 ], [ 77.957416, 8.3149262 ], [ 77.952882, 8.313079 ], [ 77.9499144, 8.3119049 ], [ 77.9483415, 8.3107753 ], [ 77.944668, 8.3092975 ], [ 77.9431337, 8.308495 ], [ 77.9424149, 8.3070894 ], [ 77.9407605, 8.3062486 ], [ 77.9379174, 8.3046582 ], [ 77.9313406, 8.3011824 ], [ 77.927019, 8.2976153 ], [ 77.9110266, 8.2905361 ], [ 77.9065806, 8.2888099 ], [ 77.8991648, 8.284079 ], [ 77.8943433, 8.278796 ], [ 77.8899101, 8.2742731 ], [ 77.8870777, 8.2723259 ], [ 77.8764347, 8.2668262 ], [ 77.8635687, 8.26132 ], [ 77.8464047, 8.2543442 ], [ 77.8322405, 8.250078 ], [ 77.8226983, 8.2477251 ], [ 77.8089568, 8.243136 ], [ 77.807740112499999, 8.242428241172144 ], [ 77.8045687, 8.2405834 ], [ 77.8010453, 8.2385384 ], [ 77.7994841, 8.2356181 ], [ 77.7964083, 8.2320571 ], [ 77.7912606, 8.2278798 ], [ 77.7863254, 8.2242037 ], [ 77.7845954, 8.2220636 ], [ 77.7839154, 8.2205879 ], [ 77.7830942, 8.2184686 ], [ 77.7826192, 8.2165904 ], [ 77.7825212, 8.2153146 ], [ 77.7825605, 8.2142115 ], [ 77.7828038, 8.2138541 ], [ 77.7833768, 8.2131316 ], [ 77.7833768, 8.2125956 ], [ 77.7834474, 8.212347 ], [ 77.7840496, 8.2120709 ], [ 77.7839812, 8.2115313 ], [ 77.7840204, 8.2105758 ], [ 77.7842559, 8.2101796 ], [ 77.7841695, 8.2098067 ], [ 77.7841297, 8.2095158 ], [ 77.7842938, 8.2093051 ], [ 77.7842962, 8.2088072 ], [ 77.7841131, 8.2083568 ], [ 77.7841131, 8.2080436 ], [ 77.7844546, 8.2074304 ], [ 77.7844239, 8.2071043 ], [ 77.7837935, 8.2062301 ], [ 77.7827677, 8.2031615 ], [ 77.7795512, 8.1994363 ], [ 77.7762231, 8.1962952 ], [ 77.772968, 8.1950166 ], [ 77.7688052, 8.1942095 ], [ 77.7604126, 8.1895797 ], [ 77.7563828, 8.1869036 ], [ 77.7551748, 8.1857695 ], [ 77.7548929, 8.184803 ], [ 77.7550396, 8.1832845 ], [ 77.7527887, 8.182093 ], [ 77.7506601, 8.1805574 ], [ 77.7481903, 8.1799733 ], [ 77.7467741, 8.1789326 ], [ 77.7466754, 8.1777686 ], [ 77.7452806, 8.1770019 ], [ 77.7429761, 8.1761799 ], [ 77.7407445, 8.1750266 ], [ 77.7367362, 8.1738669 ], [ 77.7308032, 8.172875 ], [ 77.7265309, 8.1720212 ], [ 77.7226535, 8.1706449 ], [ 77.7213793, 8.1685873 ], [ 77.719881, 8.1682053 ], [ 77.7194828, 8.1680525 ], [ 77.7196778, 8.1673849 ], [ 77.7149156, 8.1662819 ], [ 77.7062628, 8.1643523 ], [ 77.7060433, 8.1648352 ], [ 77.7056532, 8.1648754 ], [ 77.7052063, 8.1646663 ], [ 77.7052551, 8.164417 ], [ 77.7054095, 8.1641274 ], [ 77.705442, 8.1639103 ], [ 77.7054501, 8.1630014 ], [ 77.7047188, 8.1630094 ], [ 77.7047594, 8.1643365 ], [ 77.7038738, 8.1643607 ], [ 77.7018749, 8.1638218 ], [ 77.6979798, 8.1635419 ], [ 77.6886045, 8.1626119 ], [ 77.6821178, 8.161193 ], [ 77.6769058, 8.1605685 ], [ 77.6699074, 8.159428 ], [ 77.6637157, 8.1591518 ], [ 77.6592912, 8.1583086 ], [ 77.6539246, 8.158351 ], [ 77.6518273, 8.1590761 ], [ 77.6508096, 8.1593571 ], [ 77.6497575, 8.1594067 ], [ 77.6473822, 8.1589012 ], [ 77.6399496, 8.1569664 ], [ 77.6396248, 8.1569037 ], [ 77.6170557, 8.1513517 ], [ 77.6081941, 8.1485403 ], [ 77.6047628, 8.147396 ], [ 77.6022355, 8.1463283 ], [ 77.6000994, 8.1453652 ], [ 77.5977519, 8.1445906 ], [ 77.5938203, 8.1432968 ], [ 77.5922976, 8.1429283 ], [ 77.5905718, 8.1426017 ], [ 77.5896244, 8.1423338 ], [ 77.5888376, 8.1418481 ], [ 77.5880086, 8.1412032 ], [ 77.5872811, 8.1407929 ], [ 77.5859191, 8.1400141 ], [ 77.5849885, 8.1394028 ], [ 77.5844302, 8.1390259 ], [ 77.5832882, 8.1388668 ], [ 77.5821377, 8.1386323 ], [ 77.5800481, 8.13782 ], [ 77.5786523, 8.1372589 ], [ 77.5778317, 8.1367062 ], [ 77.5772142, 8.1363712 ], [ 77.5766812, 8.1357934 ], [ 77.5763175, 8.1350816 ], [ 77.5761314, 8.1346712 ], [ 77.5752769, 8.1341204 ], [ 77.5743887, 8.1334988 ], [ 77.573492, 8.1328456 ], [ 77.5726122, 8.1321924 ], [ 77.5718678, 8.1316899 ], [ 77.5710726, 8.1309864 ], [ 77.5705481, 8.130082 ], [ 77.5704127, 8.1297973 ], [ 77.5697867, 8.1289766 ], [ 77.568687, 8.128181 ], [ 77.5679594, 8.1275948 ], [ 77.5670543, 8.1270923 ], [ 77.5663454, 8.1264525 ], [ 77.5660746, 8.1259902 ], [ 77.5660543, 8.1257356 ], [ 77.5662303, 8.1255212 ], [ 77.5663318, 8.125414 ], [ 77.5663454, 8.1252733 ], [ 77.5662777, 8.1251192 ], [ 77.5661085, 8.1249584 ], [ 77.5659934, 8.1249718 ], [ 77.5657836, 8.1252666 ], [ 77.5655062, 8.1252666 ], [ 77.5652228, 8.1251083 ], [ 77.5647337, 8.1246634 ], [ 77.5638217, 8.1235381 ], [ 77.5629757, 8.1229361 ], [ 77.5620504, 8.1224389 ], [ 77.5611384, 8.1218501 ], [ 77.5609269, 8.1212874 ], [ 77.5609401, 8.1212481 ], [ 77.5622619, 8.1203583 ], [ 77.5619711, 8.1192199 ], [ 77.5618522, 8.1192591 ], [ 77.5621165, 8.1202536 ], [ 77.5607551, 8.1211434 ], [ 77.5601735, 8.1208163 ], [ 77.5594861, 8.1202013 ], [ 77.5590367, 8.1195732 ], [ 77.558931, 8.1187226 ], [ 77.5590896, 8.1181468 ], [ 77.5593011, 8.1178459 ], [ 77.5595126, 8.1176234 ], [ 77.5617729, 8.1178982 ], [ 77.5617993, 8.1177935 ], [ 77.5594729, 8.1174664 ], [ 77.5593275, 8.1169299 ], [ 77.5586666, 8.1154774 ], [ 77.5583626, 8.1145352 ], [ 77.5575034, 8.1128995 ], [ 77.557477, 8.1125462 ], [ 77.5572919, 8.1111852 ], [ 77.557358, 8.1102431 ], [ 77.5577033, 8.1097459 ], [ 77.5583963, 8.1088636 ], [ 77.558849, 8.1077429 ], [ 77.5587624, 8.1066132 ], [ 77.5585663, 8.1058367 ], [ 77.558624, 8.10522 ], [ 77.5590739, 8.1049915 ], [ 77.5589931, 8.104489 ], [ 77.5586355, 8.1039066 ], [ 77.5585317, 8.1035412 ], [ 77.5582664, 8.1028902 ], [ 77.5581741, 8.1020336 ], [ 77.5582433, 8.1008573 ], [ 77.5584394, 8.0999665 ], [ 77.5588778, 8.0992242 ], [ 77.5593969, 8.0985732 ], [ 77.5597314, 8.0983905 ], [ 77.5604882, 8.0986554 ], [ 77.5606266, 8.0986098 ], [ 77.5605712, 8.0985093 ], [ 77.5583564, 8.0977053 ], [ 77.5584302, 8.09702 ], [ 77.5587163, 8.0963987 ], [ 77.55915, 8.095951 ], [ 77.5598514, 8.0955216 ], [ 77.560359, 8.0953846 ], [ 77.5604974, 8.0954668 ], [ 77.5619647, 8.0971936 ], [ 77.5632383, 8.0962069 ], [ 77.5641426, 8.0973672 ], [ 77.5643549, 8.0971845 ], [ 77.5642903, 8.0963348 ], [ 77.5638381, 8.0957226 ], [ 77.5645118, 8.0951836 ], [ 77.5648532, 8.095613 ], [ 77.5648809, 8.0985001 ], [ 77.5637366, 8.1006106 ], [ 77.5635705, 8.100766 ], [ 77.5634967, 8.1009487 ], [ 77.5635705, 8.1010583 ], [ 77.5636904, 8.1010675 ], [ 77.5638289, 8.1009213 ], [ 77.5650194, 8.0985641 ], [ 77.565047, 8.0983448 ], [ 77.5650286, 8.0955582 ], [ 77.5648994, 8.0953663 ], [ 77.5640319, 8.0942516 ], [ 77.563995, 8.0937765 ], [ 77.5641703, 8.0934202 ], [ 77.5643641, 8.0934111 ], [ 77.5644656, 8.0930182 ], [ 77.5645672, 8.0927441 ], [ 77.5646871, 8.0925522 ], [ 77.5648994, 8.0926436 ], [ 77.5652132, 8.0925979 ], [ 77.5654254, 8.0924791 ], [ 77.5654992, 8.0922964 ], [ 77.5651762, 8.0923055 ], [ 77.5648163, 8.092333 ], [ 77.5645302, 8.0921868 ], [ 77.5644103, 8.0920589 ], [ 77.5641426, 8.0920223 ], [ 77.563792, 8.0918213 ], [ 77.563349, 8.0917117 ], [ 77.5630075, 8.091666 ], [ 77.5624723, 8.0915655 ], [ 77.5621308, 8.0915746 ], [ 77.5607713, 8.0912209 ], [ 77.5603765, 8.0910092 ], [ 77.5603491, 8.090868 ], [ 77.5603929, 8.0906671 ], [ 77.5602942, 8.0907323 ], [ 77.5601572, 8.0908354 ], [ 77.5598117, 8.0907269 ], [ 77.559543, 8.0905097 ], [ 77.5590166, 8.0901785 ], [ 77.558874, 8.0899885 ], [ 77.5589343, 8.0898202 ], [ 77.559044, 8.0896085 ], [ 77.5589892, 8.0895596 ], [ 77.5589179, 8.0895705 ], [ 77.5587589, 8.0897442 ], [ 77.5585834, 8.0897931 ], [ 77.5580076, 8.0895705 ], [ 77.5569987, 8.0889299 ], [ 77.5567574, 8.0888213 ], [ 77.5567135, 8.0887399 ], [ 77.5567738, 8.088615 ], [ 77.5567629, 8.0885281 ], [ 77.5566861, 8.0885336 ], [ 77.5565874, 8.0886693 ], [ 77.5564777, 8.0886476 ], [ 77.5560445, 8.0883924 ], [ 77.5555894, 8.0880612 ], [ 77.5553207, 8.0878387 ], [ 77.5553536, 8.0877789 ], [ 77.5556168, 8.0875726 ], [ 77.5556333, 8.0875021 ], [ 77.555562, 8.0874695 ], [ 77.5554907, 8.0875021 ], [ 77.5552165, 8.0877192 ], [ 77.5551123, 8.0877084 ], [ 77.5548162, 8.0873989 ], [ 77.5545914, 8.0869863 ], [ 77.5544104, 8.0866877 ], [ 77.5542624, 8.086362 ], [ 77.5542624, 8.0862751 ], [ 77.5545859, 8.0860199 ], [ 77.5546243, 8.0859439 ], [ 77.5545695, 8.0859114 ], [ 77.5544653, 8.0859494 ], [ 77.5541088, 8.0862371 ], [ 77.5540101, 8.0862317 ], [ 77.5538401, 8.0861394 ], [ 77.5535276, 8.0859276 ], [ 77.5533302, 8.0856996 ], [ 77.5531986, 8.0853033 ], [ 77.5532095, 8.0851839 ], [ 77.5532808, 8.0851242 ], [ 77.5534124, 8.0850536 ], [ 77.5534289, 8.0849667 ], [ 77.5533631, 8.0849504 ], [ 77.5531383, 8.0850699 ], [ 77.5528421, 8.0851839 ], [ 77.5527434, 8.0851622 ], [ 77.5525625, 8.0848798 ], [ 77.5524638, 8.0845758 ], [ 77.5524199, 8.0842392 ], [ 77.5524912, 8.0838972 ], [ 77.5525954, 8.0835715 ], [ 77.5526722, 8.0835226 ], [ 77.5553317, 8.0830394 ], [ 77.5555949, 8.0830448 ], [ 77.5564832, 8.0833434 ], [ 77.5565545, 8.0833054 ], [ 77.5565764, 8.0832403 ], [ 77.5565435, 8.0831371 ], [ 77.5564832, 8.0830883 ], [ 77.5563242, 8.0831046 ], [ 77.555551, 8.0828602 ], [ 77.5553591, 8.0828983 ], [ 77.5549807, 8.0829905 ], [ 77.5527599, 8.0833706 ], [ 77.5525735, 8.0833597 ], [ 77.5523941, 8.083088 ], [ 77.5522351, 8.0827807 ], [ 77.552342, 8.0827241 ], [ 77.5523155, 8.0826374 ], [ 77.5523423, 8.0825508 ], [ 77.5523835, 8.0824253 ], [ 77.5521364, 8.0818227 ], [ 77.5520531, 8.0817019 ], [ 77.5519004, 8.081691 ], [ 77.5517651, 8.0816798 ], [ 77.5516971, 8.0815048 ], [ 77.5517482, 8.081277 ], [ 77.5519747, 8.0807896 ], [ 77.5520287, 8.0807062 ], [ 77.5522828, 8.0807212 ], [ 77.5523377, 8.0807755 ], [ 77.5524035, 8.0809981 ], [ 77.5524199, 8.0811284 ], [ 77.5524802, 8.0811772 ], [ 77.5525954, 8.0811284 ], [ 77.5526338, 8.0810524 ], [ 77.5526228, 8.0809275 ], [ 77.552546, 8.0807321 ], [ 77.5524144, 8.0805746 ], [ 77.552228, 8.0804823 ], [ 77.5519812, 8.0804606 ], [ 77.5516248, 8.0804878 ], [ 77.5515151, 8.0804226 ], [ 77.5514822, 8.0800914 ], [ 77.5514274, 8.0793748 ], [ 77.5514438, 8.0789079 ], [ 77.5515535, 8.078745 ], [ 77.5517948, 8.0786907 ], [ 77.551877, 8.0786744 ], [ 77.5518222, 8.0786093 ], [ 77.5515809, 8.0785387 ], [ 77.5513945, 8.078365 ], [ 77.551378, 8.0782075 ], [ 77.5514603, 8.0780772 ], [ 77.551525, 8.0780034 ], [ 77.5515996, 8.0779904 ], [ 77.5516522, 8.0780772 ], [ 77.5516829, 8.0781033 ], [ 77.5517487, 8.0780034 ], [ 77.5518189, 8.0779904 ], [ 77.5517794, 8.0779426 ], [ 77.5516654, 8.0779687 ], [ 77.5515425, 8.0779296 ], [ 77.551468, 8.0778948 ], [ 77.551446, 8.0778079 ], [ 77.551446, 8.0777645 ], [ 77.5513408, 8.0777558 ], [ 77.5512267, 8.0777993 ], [ 77.5511302, 8.0778166 ], [ 77.5510132, 8.0778439 ], [ 77.550981, 8.0778514 ], [ 77.5509898, 8.0777993 ], [ 77.551117, 8.0777515 ], [ 77.5512399, 8.0776994 ], [ 77.5512574, 8.0776429 ], [ 77.5511653, 8.0776472 ], [ 77.5510688, 8.0776516 ], [ 77.5510819, 8.0775951 ], [ 77.5512223, 8.0775256 ], [ 77.5513451, 8.0774475 ], [ 77.5514548, 8.0773606 ], [ 77.551468, 8.0772781 ], [ 77.5514066, 8.0772477 ], [ 77.551253, 8.0772433 ], [ 77.5511039, 8.0773041 ], [ 77.5510337, 8.077378 ], [ 77.5510381, 8.0774735 ], [ 77.550981, 8.0775126 ], [ 77.5509503, 8.0775517 ], [ 77.5509328, 8.0776342 ], [ 77.5510205, 8.0776472 ], [ 77.5510205, 8.077669 ], [ 77.5509459, 8.0777254 ], [ 77.550867, 8.0777689 ], [ 77.550845, 8.0778297 ], [ 77.55081, 8.0778774 ], [ 77.5506301, 8.0778905 ], [ 77.5505424, 8.077821 ], [ 77.5505424, 8.0777211 ], [ 77.5506125, 8.077682 ], [ 77.5506038, 8.0776082 ], [ 77.5505073, 8.0775604 ], [ 77.5503932, 8.0775821 ], [ 77.5502835, 8.0776603 ], [ 77.5503318, 8.0777602 ], [ 77.5503318, 8.0778557 ], [ 77.5502484, 8.0779991 ], [ 77.5501739, 8.078112 ], [ 77.5501212, 8.0782683 ], [ 77.5499721, 8.078403 ], [ 77.5496299, 8.0784768 ], [ 77.5491561, 8.078429 ], [ 77.5491254, 8.0783248 ], [ 77.5491517, 8.0782032 ], [ 77.5491517, 8.0781163 ], [ 77.5490772, 8.0780468 ], [ 77.5488403, 8.0780685 ], [ 77.5486999, 8.0780512 ], [ 77.5485814, 8.0781337 ], [ 77.5485639, 8.0782944 ], [ 77.5486955, 8.0784117 ], [ 77.5487087, 8.0784768 ], [ 77.5486385, 8.0785854 ], [ 77.5484718, 8.0786115 ], [ 77.5477523, 8.0786071 ], [ 77.5471601, 8.078568 ], [ 77.5468618, 8.0784508 ], [ 77.5467916, 8.0783639 ], [ 77.5467127, 8.0783291 ], [ 77.5463565, 8.0782895 ], [ 77.5462489, 8.0781661 ], [ 77.5463264, 8.0781212 ], [ 77.5463729, 8.0779805 ], [ 77.546321, 8.0778817 ], [ 77.546237, 8.0778283 ], [ 77.5460459, 8.0779209 ], [ 77.5458441, 8.0780381 ], [ 77.5456423, 8.0781684 ], [ 77.5452738, 8.0782249 ], [ 77.5449272, 8.0782553 ], [ 77.5439314, 8.0783726 ], [ 77.5432471, 8.078429 ], [ 77.5423566, 8.0785029 ], [ 77.5423258, 8.0784421 ], [ 77.5421855, 8.0784377 ], [ 77.542089, 8.0784768 ], [ 77.5417336, 8.0784985 ], [ 77.5405141, 8.0786201 ], [ 77.5399789, 8.0786115 ], [ 77.5395402, 8.0785246 ], [ 77.5389831, 8.078542 ], [ 77.5381364, 8.0786723 ], [ 77.5375574, 8.078707 ], [ 77.5371187, 8.0786679 ], [ 77.5365904, 8.0786058 ], [ 77.5355202, 8.0783409 ], [ 77.5342437, 8.077842 ], [ 77.5330679, 8.0776757 ], [ 77.5321273, 8.077842 ], [ 77.5313912, 8.0780073 ], [ 77.53075, 8.079505 ], [ 77.5304202, 8.0800367 ], [ 77.5297905, 8.0806092 ], [ 77.5285325, 8.0811483 ], [ 77.5265702, 8.0814649 ], [ 77.525956, 8.0813889 ], [ 77.5253696, 8.0810925 ], [ 77.5249732, 8.0807155 ], [ 77.5249684, 8.0800871 ], [ 77.5253659, 8.0798922 ], [ 77.5252253, 8.0797674 ], [ 77.5247881, 8.0798784 ], [ 77.5245301, 8.0801827 ], [ 77.5245832, 8.0812471 ], [ 77.5243976, 8.0816847 ], [ 77.5156735, 8.0825584 ], [ 77.5148388, 8.0829738 ], [ 77.5094153, 8.0833381 ], [ 77.5050664, 8.0843169 ], [ 77.4988126, 8.0853675 ], [ 77.4919842, 8.0868997 ], [ 77.4873992, 8.0875732 ], [ 77.485917, 8.0875933 ], [ 77.4856767, 8.0870458 ], [ 77.4853404, 8.0871669 ], [ 77.4843571, 8.0872361 ], [ 77.4833636, 8.087306 ], [ 77.483119, 8.0873273 ], [ 77.4833813, 8.0885711 ], [ 77.4811245, 8.0891574 ], [ 77.4776687, 8.0897698 ], [ 77.4735107, 8.0903795 ], [ 77.4690062, 8.0910715 ], [ 77.4661545, 8.0917243 ], [ 77.4631116, 8.0920302 ], [ 77.4592532, 8.0926298 ], [ 77.4531345, 8.0931922 ], [ 77.4492148, 8.0936304 ], [ 77.4454436, 8.0947446 ], [ 77.4442763, 8.0947829 ], [ 77.4376657, 8.0969774 ], [ 77.4344959, 8.0974102 ], [ 77.4309532, 8.0989058 ], [ 77.4246795, 8.1001862 ], [ 77.4219578, 8.1006254 ], [ 77.4126648, 8.103274 ], [ 77.4100395, 8.1039845 ], [ 77.4048564, 8.1054583 ], [ 77.4012842, 8.1065619 ], [ 77.399183, 8.1071333 ], [ 77.3923712, 8.1089162 ], [ 77.3890598, 8.1098031 ], [ 77.3876774, 8.1097351 ], [ 77.3873968, 8.1090165 ], [ 77.3873743, 8.1114345 ], [ 77.3863568, 8.1120402 ], [ 77.3827429, 8.1128342 ], [ 77.3806781, 8.1133613 ], [ 77.3788718, 8.1138871 ], [ 77.3731916, 8.1149503 ], [ 77.3657133, 8.1179557 ], [ 77.3641661, 8.118609 ], [ 77.3566853, 8.1212281 ], [ 77.3399036, 8.1246736 ], [ 77.3364007, 8.125166 ], [ 77.3347374, 8.1251634 ], [ 77.3329796, 8.1246912 ], [ 77.3327384, 8.1229719 ], [ 77.3325454, 8.1228763 ], [ 77.3326419, 8.1252165 ], [ 77.3307616, 8.1252116 ], [ 77.3248291, 8.1237944 ], [ 77.3225635, 8.1222402 ], [ 77.3218892, 8.1225739 ], [ 77.3218359, 8.1234667 ], [ 77.3210392, 8.123836 ], [ 77.3202963, 8.1232516 ], [ 77.3188972, 8.1237699 ], [ 77.3183034, 8.1235016 ], [ 77.3181158, 8.122861 ], [ 77.3185138, 8.1221856 ], [ 77.3184172, 8.1218422 ], [ 77.3179794, 8.1216115 ], [ 77.3186446, 8.1208741 ], [ 77.3195507, 8.1205158 ], [ 77.333313, 8.1193268 ], [ 77.3332165, 8.1189766 ], [ 77.3195315, 8.1202263 ], [ 77.3188101, 8.1203224 ], [ 77.3172884, 8.1216316 ], [ 77.3172163, 8.1218929 ], [ 77.3154911, 8.1217995 ], [ 77.3154939, 8.1223147 ], [ 77.3145947, 8.1233502 ], [ 77.3139534, 8.1241266 ], [ 77.3129186, 8.1240032 ], [ 77.3116387, 8.1262005 ], [ 77.3103507, 8.1269806 ], [ 77.3077695, 8.1276389 ], [ 77.3064822, 8.1285482 ], [ 77.3049468, 8.1312612 ], [ 77.3041749, 8.1319098 ], [ 77.3040598, 8.1344865 ], [ 77.3038504, 8.1360447 ], [ 77.3044599, 8.1365451 ], [ 77.3048396, 8.1372538 ], [ 77.3052413, 8.1375709 ], [ 77.3053166, 8.1392611 ], [ 77.3044665, 8.1377036 ], [ 77.3037091, 8.137444 ], [ 77.3033539, 8.1387174 ], [ 77.3017467, 8.1399797 ], [ 77.3017761, 8.1419696 ], [ 77.298442, 8.1466253 ], [ 77.2978005, 8.1474017 ], [ 77.2965146, 8.1485676 ], [ 77.2948404, 8.1497368 ], [ 77.291108, 8.1524621 ], [ 77.2877612, 8.1549287 ], [ 77.2836404, 8.1576562 ], [ 77.2805492, 8.1596061 ], [ 77.2769415, 8.1616871 ], [ 77.2715301, 8.1648086 ], [ 77.2695155, 8.1658232 ], [ 77.267836, 8.166919 ], [ 77.2550279, 8.1726288 ], [ 77.2536319, 8.1726894 ], [ 77.2529457, 8.1726193 ], [ 77.2525724, 8.1720501 ], [ 77.2524657, 8.1721425 ], [ 77.2525324, 8.1728953 ], [ 77.2522954, 8.1729459 ], [ 77.2515891, 8.1729742 ], [ 77.2509593, 8.172761 ], [ 77.2502916, 8.1722152 ], [ 77.2499176, 8.1717899 ], [ 77.2497305, 8.1714207 ], [ 77.2498678, 8.1709927 ], [ 77.2509981, 8.1709408 ], [ 77.2510248, 8.1707955 ], [ 77.2490902, 8.1708351 ], [ 77.2485165, 8.1717067 ], [ 77.2482087, 8.1727534 ], [ 77.2473158, 8.1730538 ], [ 77.2469665, 8.1733734 ], [ 77.246289, 8.173466 ], [ 77.2456894, 8.1736344 ], [ 77.2455708, 8.1741157 ], [ 77.2447033, 8.1745155 ], [ 77.2441672, 8.1743547 ], [ 77.2439073, 8.1744833 ], [ 77.2440535, 8.1753355 ], [ 77.2432251, 8.1760269 ], [ 77.2416332, 8.1764771 ], [ 77.2396677, 8.1764289 ], [ 77.238953, 8.1760108 ], [ 77.2393266, 8.1752873 ], [ 77.2391317, 8.1749335 ], [ 77.2385144, 8.1753677 ], [ 77.2384332, 8.1762198 ], [ 77.2390017, 8.1772167 ], [ 77.2386444, 8.1778116 ], [ 77.2379134, 8.1783422 ], [ 77.2371175, 8.1780689 ], [ 77.2374911, 8.178905 ], [ 77.2370691, 8.1794621 ], [ 77.2358338, 8.1803567 ], [ 77.2346322, 8.1811238 ], [ 77.2339698, 8.1808113 ], [ 77.2335601, 8.1811559 ], [ 77.2340611, 8.1813293 ], [ 77.2341936, 8.1818795 ], [ 77.2338362, 8.1828442 ], [ 77.2328201, 8.1834732 ], [ 77.2316921, 8.1834712 ], [ 77.231286, 8.1836159 ], [ 77.231295, 8.1845626 ], [ 77.2297452, 8.1848287 ], [ 77.2293699, 8.1871493 ], [ 77.2279554, 8.1884452 ], [ 77.2257774, 8.1920636 ], [ 77.2239762, 8.1936193 ], [ 77.2238516, 8.1943927 ], [ 77.2225645, 8.1954303 ], [ 77.2208906, 8.1967276 ], [ 77.2187042, 8.1986713 ], [ 77.2181892, 8.1990607 ], [ 77.2156137, 8.2008781 ], [ 77.2138108, 8.2021762 ], [ 77.2102024, 8.2042569 ], [ 77.2062057, 8.2063396 ], [ 77.2047912, 8.2076354 ], [ 77.1974376, 8.2125031 ], [ 77.1913416, 8.2156069 ], [ 77.1882543, 8.2169211 ], [ 77.1869629, 8.2176133 ], [ 77.1863917, 8.2179194 ], [ 77.1846813, 8.2185576 ], [ 77.1840921, 8.218704 ], [ 77.183655, 8.2186711 ], [ 77.1836027, 8.2185206 ], [ 77.1834982, 8.2183984 ], [ 77.1834079, 8.2184595 ], [ 77.1839638, 8.2199032 ], [ 77.183712, 8.2204722 ], [ 77.1831418, 8.2212904 ], [ 77.1828092, 8.2217231 ], [ 77.181916, 8.2231009 ], [ 77.1809705, 8.2244223 ], [ 77.1805571, 8.2248408 ], [ 77.180177, 8.2248738 ], [ 77.1800249, 8.224902 ], [ 77.1799347, 8.2250995 ], [ 77.1799679, 8.2252547 ], [ 77.1801342, 8.2253111 ], [ 77.180291, 8.2254051 ], [ 77.1804003, 8.2255556 ], [ 77.1799157, 8.2265479 ], [ 77.1791222, 8.2275636 ], [ 77.1781196, 8.2288144 ], [ 77.1772881, 8.2299242 ], [ 77.1763474, 8.2309964 ], [ 77.1757059, 8.2317676 ], [ 77.1746416, 8.2330372 ], [ 77.1735346, 8.234241 ], [ 77.1723078, 8.2355809 ], [ 77.1717904, 8.2364188 ], [ 77.171111, 8.2371309 ], [ 77.1704263, 8.2378486 ], [ 77.1691093, 8.2385203 ], [ 77.1686188, 8.2386533 ], [ 77.1685113, 8.2385269 ], [ 77.1681322, 8.2377087 ], [ 77.1680005, 8.2375588 ], [ 77.1676309, 8.2378048 ], [ 77.1663542, 8.2391681 ], [ 77.1659914, 8.2400127 ], [ 77.1658772, 8.2404782 ], [ 77.1661527, 8.2408306 ], [ 77.1656689, 8.2415954 ], [ 77.1648155, 8.2421739 ], [ 77.1637874, 8.2431648 ], [ 77.1630147, 8.2438963 ], [ 77.162251, 8.2446406 ], [ 77.1608779, 8.2456253 ], [ 77.1584522, 8.247454 ], [ 77.1553634, 8.2498485 ], [ 77.1528642, 8.251821 ], [ 77.152218, 8.2522278 ], [ 77.1511252, 8.2529613 ], [ 77.1502861, 8.2538214 ], [ 77.1486286, 8.2550109 ], [ 77.1483599, 8.255209 ], [ 77.1470105, 8.2562246 ], [ 77.1442725, 8.2582671 ], [ 77.143132030998288, 8.259054141275159 ], [ 77.1406087, 8.2607955 ], [ 77.1362096, 8.2639933 ], [ 77.1317306, 8.2670045 ], [ 77.1254176, 8.2714175 ], [ 77.1167902, 8.2781616 ], [ 77.1131831, 8.2807569 ], [ 77.1022323, 8.2885435 ], [ 77.0969525, 8.2926931 ], [ 77.0917375, 8.2965846 ], [ 77.0908668, 8.297385 ], [ 77.086058, 8.3009268 ], [ 77.0783624, 8.3058349 ], [ 77.0782206, 8.3061229 ], [ 77.0780222, 8.3065261 ], [ 77.0751107, 8.3094053 ], [ 77.0717618, 8.311999 ], [ 77.0699593, 8.3135543 ], [ 77.0666102, 8.3161479 ], [ 77.0648064, 8.3174454 ], [ 77.0628728, 8.3187437 ], [ 77.0592665, 8.3215961 ], [ 77.056563, 8.3239289 ], [ 77.0538573, 8.326004 ], [ 77.0503819, 8.3291136 ], [ 77.0450248, 8.3331598 ], [ 77.0416392, 8.3359809 ], [ 77.0362158, 8.3402599 ], [ 77.0343364, 8.3416869 ], [ 77.0308551, 8.3443108 ], [ 77.0288767, 8.3455963 ], [ 77.0285527, 8.3458733 ], [ 77.0277864, 8.3464396 ], [ 77.0264735, 8.3473403 ], [ 77.0251845, 8.3483327 ], [ 77.0243492, 8.3489119 ], [ 77.0225307, 8.3501862 ], [ 77.0209012, 8.351385 ], [ 77.018914, 8.352711 ], [ 77.0181163, 8.3530481 ], [ 77.0164083, 8.3541266 ], [ 77.0137512, 8.3554209 ], [ 77.012066, 8.3561747 ], [ 77.0113992, 8.3561461 ], [ 77.0111055, 8.3563199 ], [ 77.0111592, 8.3565125 ], [ 77.0107563, 8.356728 ], [ 77.0106056, 8.3565072 ], [ 77.0100948, 8.3566947 ], [ 77.0093803, 8.3571022 ], [ 77.0094871, 8.3573546 ], [ 77.0092188, 8.3576088 ], [ 77.009023, 8.3574573 ], [ 77.0086387, 8.3579689 ], [ 77.0089471, 8.3580233 ], [ 77.0086824, 8.3582664 ], [ 77.0087991, 8.3586963 ], [ 77.0086846, 8.3594125 ], [ 77.0081798, 8.3598796 ], [ 77.0079837, 8.3598902 ], [ 77.008066, 8.3600356 ], [ 77.0080457, 8.3602017 ], [ 77.0082852, 8.360185 ], [ 77.0082586, 8.3603527 ], [ 77.0081081, 8.3603387 ], [ 77.0080883, 8.3604079 ], [ 77.0082844, 8.3605016 ], [ 77.0083238, 8.3606717 ], [ 77.0078032, 8.3612948 ], [ 77.0071868, 8.3618576 ], [ 77.0068019, 8.3621936 ], [ 77.0070382, 8.3625442 ], [ 77.0066683, 8.3628655 ], [ 77.006788, 8.3630847 ], [ 77.0058524, 8.3639458 ], [ 77.0049657, 8.3646594 ], [ 77.0044241, 8.3648648 ], [ 77.0040875, 8.3648863 ], [ 77.0035251, 8.3658392 ], [ 77.0031777, 8.3661075 ], [ 77.0031096, 8.3664857 ], [ 77.0033397, 8.3665525 ], [ 77.0032965, 8.3669304 ], [ 77.0034373, 8.3669588 ], [ 77.0034977, 8.3672159 ], [ 77.0030814, 8.3678143 ], [ 77.0031608, 8.3679027 ], [ 77.003458, 8.3678441 ], [ 77.002584, 8.3684839 ], [ 77.0018115, 8.3693501 ], [ 77.0005241, 8.3706748 ], [ 76.9995628, 8.3713541 ], [ 76.9988933, 8.3724496 ], [ 76.9976144, 8.3739101 ], [ 76.9961124, 8.37498 ], [ 76.9947734, 8.3755489 ], [ 76.9934244, 8.3766004 ], [ 76.9926862, 8.3767278 ], [ 76.9913644, 8.3753946 ], [ 76.9913762, 8.3752758 ], [ 76.9913402, 8.3751817 ], [ 76.9912357, 8.3751399 ], [ 76.99114, 8.3752011 ], [ 76.9910849, 8.3753081 ], [ 76.991105, 8.3753865 ], [ 76.9911563, 8.3754888 ], [ 76.9913831, 8.3757236 ], [ 76.9913537, 8.3758545 ], [ 76.991845, 8.37638 ], [ 76.9919983, 8.3763634 ], [ 76.9923, 8.3766853 ], [ 76.9926433, 8.3771524 ], [ 76.9923574, 8.3775018 ], [ 76.9921533, 8.377831 ], [ 76.9916056, 8.3780669 ], [ 76.9907031, 8.3782566 ], [ 76.9896906, 8.3782746 ], [ 76.9895383, 8.378251 ], [ 76.9895609, 8.3782308 ], [ 76.9894794, 8.3781576 ], [ 76.9886282, 8.3791659 ], [ 76.9882577, 8.378995 ], [ 76.9880105, 8.3787079 ], [ 76.9885749, 8.3779336 ], [ 76.9879985, 8.3775269 ], [ 76.987547, 8.3770257 ], [ 76.9875364, 8.3765834 ], [ 76.9875879, 8.3759551 ], [ 76.987781, 8.3756904 ], [ 76.9880862, 8.3760363 ], [ 76.9887119, 8.375557 ], [ 76.9883849, 8.3751434 ], [ 76.9900463, 8.3738067 ], [ 76.9901533, 8.3737545 ], [ 76.9901751, 8.3735739 ], [ 76.990077, 8.3734984 ], [ 76.9899626, 8.3734957 ], [ 76.9898972, 8.3735981 ], [ 76.9898967, 8.3737218 ], [ 76.9894476, 8.3740861 ], [ 76.9892702, 8.3741209 ], [ 76.9871673, 8.3758362 ], [ 76.9865579, 8.3757258 ], [ 76.9855966, 8.3767533 ], [ 76.985116, 8.3779166 ], [ 76.9848885, 8.3792455 ], [ 76.9847436, 8.379373 ], [ 76.9848763, 8.3794832 ], [ 76.9845461, 8.3798457 ], [ 76.9837176, 8.3804861 ], [ 76.9832405, 8.3807923 ], [ 76.9832888, 8.3810512 ], [ 76.9829261, 8.3812522 ], [ 76.9823529, 8.3815439 ], [ 76.9817746, 8.3818189 ], [ 76.9815908, 8.381708 ], [ 76.9814106, 8.3814091 ], [ 76.9812972, 8.3814738 ], [ 76.9812274, 8.381586 ], [ 76.9813685, 8.3817591 ], [ 76.9814922, 8.3817897 ], [ 76.9815642, 8.3820196 ], [ 76.9815829, 8.3821507 ], [ 76.9814716, 8.3821283 ], [ 76.9813994, 8.3820589 ], [ 76.9812361, 8.3820777 ], [ 76.9808857, 8.3825227 ], [ 76.980611, 8.3825739 ], [ 76.9805021, 8.3823902 ], [ 76.9804733, 8.3821535 ], [ 76.9803882, 8.3818793 ], [ 76.9798927, 8.3817453 ], [ 76.9797843, 8.381903 ], [ 76.9796189, 8.382195 ], [ 76.9793175, 8.3821824 ], [ 76.9788933, 8.3827622 ], [ 76.9788855, 8.3831393 ], [ 76.9791375, 8.3834856 ], [ 76.979465, 8.3836837 ], [ 76.9798282, 8.3836857 ], [ 76.979889, 8.3839001 ], [ 76.9798802, 8.3842063 ], [ 76.9797334, 8.3846061 ], [ 76.9793892, 8.3850813 ], [ 76.9789451, 8.3854705 ], [ 76.9784813, 8.3857173 ], [ 76.9778204, 8.3860994 ], [ 76.9773741, 8.3862607 ], [ 76.9771338, 8.3863371 ], [ 76.9768591, 8.3863796 ], [ 76.9764297, 8.386421 ], [ 76.9762683, 8.3861759 ], [ 76.9759156, 8.3859423 ], [ 76.9758436, 8.3857682 ], [ 76.9759084, 8.3857182 ], [ 76.9758721, 8.3856086 ], [ 76.9759124, 8.3855587 ], [ 76.9758992, 8.3853268 ], [ 76.9757619, 8.3850551 ], [ 76.975636, 8.3850102 ], [ 76.975577, 8.3850617 ], [ 76.9754751, 8.3849471 ], [ 76.9754377, 8.3849774 ], [ 76.9755074, 8.3851369 ], [ 76.9754197, 8.3851853 ], [ 76.9752533, 8.3855667 ], [ 76.9753564, 8.3856631 ], [ 76.9753288, 8.3857999 ], [ 76.975442, 8.3858376 ], [ 76.9756154, 8.3857855 ], [ 76.9757771, 8.3858451 ], [ 76.9758538, 8.3860068 ], [ 76.9757176, 8.3860388 ], [ 76.9756587, 8.3862438 ], [ 76.9757128, 8.3864776 ], [ 76.9756343, 8.3866872 ], [ 76.9755094, 8.3867131 ], [ 76.9753697, 8.3867931 ], [ 76.9754368, 8.3868945 ], [ 76.9755356, 8.3868925 ], [ 76.9755731, 8.3871439 ], [ 76.9756508, 8.3873856 ], [ 76.9760362, 8.3871481 ], [ 76.976172, 8.3874302 ], [ 76.9762216, 8.3876926 ], [ 76.9761895, 8.3879982 ], [ 76.9760933, 8.3883068 ], [ 76.975983, 8.3885657 ], [ 76.9756088, 8.3890043 ], [ 76.9752615, 8.3892848 ], [ 76.9748051, 8.3897366 ], [ 76.9744028, 8.3900136 ], [ 76.9743559, 8.3900261 ], [ 76.9739849, 8.3901474 ], [ 76.9738695, 8.3901452 ], [ 76.9738404, 8.3899052 ], [ 76.9737573, 8.3898703 ], [ 76.973778, 8.3897431 ], [ 76.9734696, 8.3895962 ], [ 76.9731506, 8.3897607 ], [ 76.9727913, 8.3904024 ], [ 76.9723857, 8.3906072 ], [ 76.971304, 8.3919253 ], [ 76.9709319, 8.3932161 ], [ 76.9708248, 8.3943937 ], [ 76.9711055, 8.3950005 ], [ 76.9713973, 8.3949415 ], [ 76.9715902, 8.3946222 ], [ 76.9719208, 8.3946067 ], [ 76.9720904, 8.3947753 ], [ 76.972381, 8.3946415 ], [ 76.9727355, 8.3949662 ], [ 76.9730617, 8.3958587 ], [ 76.9730425, 8.3968067 ], [ 76.9729014, 8.3974249 ], [ 76.9727495, 8.397593 ], [ 76.9727348, 8.3978237 ], [ 76.9729141, 8.3978651 ], [ 76.9727694, 8.398291 ], [ 76.9725107, 8.3986137 ], [ 76.9724467, 8.3986923 ], [ 76.9721385, 8.3990706 ], [ 76.9719377, 8.399769 ], [ 76.9720596, 8.4005132 ], [ 76.9711335, 8.4021875 ], [ 76.9701204, 8.4049745 ], [ 76.9689088, 8.4075842 ], [ 76.9676863, 8.4097336 ], [ 76.9660182, 8.4121944 ], [ 76.964548, 8.4148399 ], [ 76.9628948, 8.4174558 ], [ 76.9613371, 8.4196873 ], [ 76.959941, 8.4215677 ], [ 76.9587648, 8.4226364 ], [ 76.9580056, 8.4237597 ], [ 76.9577057, 8.4248476 ], [ 76.9576051, 8.4250063 ], [ 76.9574482, 8.4252541 ], [ 76.9569504, 8.4260397 ], [ 76.9537244, 8.429862 ], [ 76.9514589, 8.4326494 ], [ 76.9497109, 8.4344681 ], [ 76.9455178, 8.4388515 ], [ 76.9438414, 8.4408557 ], [ 76.9440928, 8.4411649 ], [ 76.9433454, 8.4422335 ], [ 76.942942, 8.442154 ], [ 76.9431823, 8.4425292 ], [ 76.937906, 8.4485814 ], [ 76.9335551, 8.4534897 ], [ 76.9302874, 8.4573497 ], [ 76.9272187, 8.4607487 ], [ 76.924254, 8.4638766 ], [ 76.9215462, 8.4671265 ], [ 76.9186155, 8.4704614 ], [ 76.9153564, 8.4741745 ], [ 76.9112078, 8.4784013 ], [ 76.909269, 8.4808518 ], [ 76.905464, 8.4852428 ], [ 76.9031957, 8.4878808 ], [ 76.9008619, 8.4904732 ], [ 76.8980848, 8.4939028 ], [ 76.8951544, 8.4971707 ], [ 76.8903506, 8.5029915 ], [ 76.8859297, 8.5084471 ], [ 76.8857851, 8.508657 ], [ 76.8817539, 8.5136585 ], [ 76.8744655, 8.5229118 ], [ 76.8676, 8.5315375 ], [ 76.8576016, 8.5441755 ], [ 76.8461711, 8.5582015 ], [ 76.8435962, 8.5615964 ], [ 76.8398196, 8.5658401 ], [ 76.8379314, 8.5680468 ], [ 76.837073, 8.5690653 ], [ 76.8362147, 8.5702535 ], [ 76.8350131, 8.5714418 ], [ 76.8336708, 8.5733145 ], [ 76.8325291, 8.5745752 ], [ 76.8316285, 8.5756099 ], [ 76.8282841, 8.5800061 ], [ 76.8254525, 8.5833692 ], [ 76.8218506, 8.5880242 ], [ 76.8191479, 8.5913864 ], [ 76.8179895, 8.5926803 ], [ 76.8141307, 8.5978518 ], [ 76.8105283, 8.6025069 ], [ 76.8006179, 8.6146635 ], [ 76.7979169, 8.6182836 ], [ 76.797145, 8.6193178 ], [ 76.7950842, 8.6215171 ], [ 76.7937982, 8.6233268 ], [ 76.7935423, 8.6239726 ], [ 76.792255, 8.6255247 ], [ 76.7899911, 8.6279765 ], [ 76.7876797, 8.6296161 ], [ 76.7861287, 8.630863 ], [ 76.7857591, 8.6314522 ], [ 76.7861282, 8.6321149 ], [ 76.7879273, 8.6337303 ], [ 76.7889259, 8.6334725 ], [ 76.7895939, 8.6324699 ], [ 76.7903705, 8.6324663 ], [ 76.7911418, 8.6313037 ], [ 76.7916147, 8.6315579 ], [ 76.7924023, 8.6337156 ], [ 76.7936171, 8.6352272 ], [ 76.7953177, 8.6362317 ], [ 76.7961385, 8.6363585 ], [ 76.7972927, 8.6341634 ], [ 76.798487, 8.6329636 ], [ 76.7987123, 8.6331261 ], [ 76.7992326, 8.6331681 ], [ 76.7974294, 8.6355795 ], [ 76.7978592, 8.6357946 ], [ 76.7971759, 8.6367407 ], [ 76.7966594, 8.6370008 ], [ 76.7956242, 8.637134 ], [ 76.7948512, 8.6379106 ], [ 76.7943328, 8.6377847 ], [ 76.7932886, 8.6359858 ], [ 76.7918523, 8.6338205 ], [ 76.7912888, 8.632867 ], [ 76.7906313, 8.6328521 ], [ 76.7898558, 8.6331135 ], [ 76.7898581, 8.6336287 ], [ 76.7893404, 8.6336311 ], [ 76.7892213, 8.6359506 ], [ 76.7883204, 8.6369856 ], [ 76.7867719, 8.6380234 ], [ 76.7850945, 8.6393196 ], [ 76.7849715, 8.6406085 ], [ 76.7847127, 8.6406097 ], [ 76.7847103, 8.6400945 ], [ 76.7826449, 8.6413923 ], [ 76.7813601, 8.6434596 ], [ 76.780976, 8.644492 ], [ 76.7787902, 8.6475942 ], [ 76.7756929, 8.64967 ], [ 76.7757001, 8.6512158 ], [ 76.7754497, 8.6530206 ], [ 76.7758424, 8.6540495 ], [ 76.7781847, 8.6566152 ], [ 76.7779367, 8.6589356 ], [ 76.7770382, 8.6604858 ], [ 76.7767757, 8.659714 ], [ 76.7776766, 8.6586791 ], [ 76.7775379, 8.6566182 ], [ 76.7770201, 8.6566207 ], [ 76.7757194, 8.6553383 ], [ 76.7751979, 8.6545678 ], [ 76.7749329, 8.6532807 ], [ 76.7744115, 8.6525101 ], [ 76.7733807, 8.6535455 ], [ 76.7726045, 8.6536776 ], [ 76.7725296, 8.6531746 ], [ 76.7724703, 8.6527768 ], [ 76.7732446, 8.6522578 ], [ 76.7743969, 8.6494182 ], [ 76.7756891, 8.6488969 ], [ 76.7756869, 8.6483815 ], [ 76.7762047, 8.6483791 ], [ 76.7777468, 8.6459236 ], [ 76.7782639, 8.6457928 ], [ 76.7795453, 8.6429527 ], [ 76.7800624, 8.642821 ], [ 76.7808604, 8.641565 ], [ 76.7826358, 8.6394594 ], [ 76.7836696, 8.6390686 ], [ 76.7841851, 8.6385507 ], [ 76.7843011, 8.6377512 ], [ 76.7857301, 8.6367399 ], [ 76.7862455, 8.6362222 ], [ 76.7864879, 8.6356597 ], [ 76.7864305, 8.6352638 ], [ 76.7864501, 8.6350777 ], [ 76.7863267, 8.6339477 ], [ 76.7860212, 8.6335075 ], [ 76.7851616, 8.6346632 ], [ 76.784258, 8.6356507 ], [ 76.7780811, 8.6435387 ], [ 76.7712589, 8.6520731 ], [ 76.767529, 8.6572438 ], [ 76.7659839, 8.6590546 ], [ 76.7616056, 8.664099 ], [ 76.7607042, 8.6652629 ], [ 76.759159, 8.6670739 ], [ 76.7564574, 8.6706936 ], [ 76.7558131, 8.6714696 ], [ 76.7531091, 8.6745741 ], [ 76.7516669, 8.6763468 ], [ 76.7504741, 8.6778302 ], [ 76.747549740752248, 8.681454313606329 ], [ 76.7298121, 8.7034363 ], [ 76.7224642, 8.7124005 ], [ 76.7157879, 8.720545 ], [ 76.7157089, 8.7209608 ], [ 76.7155032, 8.7213153 ], [ 76.7150808, 8.7217159 ], [ 76.7138397, 8.7227297 ], [ 76.7123337, 8.7243958 ], [ 76.7114252, 8.7256293 ], [ 76.7100801, 8.7270854 ], [ 76.7093166, 8.728057 ], [ 76.708887, 8.7284164 ], [ 76.7084724, 8.7291113 ], [ 76.7078706, 8.729708 ], [ 76.7073644, 8.7303115 ], [ 76.7067982, 8.7311821 ], [ 76.7063044, 8.7318939 ], [ 76.7054923, 8.7328144 ], [ 76.7046766, 8.7339831 ], [ 76.704472, 8.734306 ], [ 76.7042413, 8.7346701 ], [ 76.7036689, 8.7353924 ], [ 76.7029286, 8.7361108 ], [ 76.7021374, 8.7369088 ], [ 76.7010138, 8.737729 ], [ 76.699954, 8.7379201 ], [ 76.6994969, 8.738324 ], [ 76.6992419, 8.7392744 ], [ 76.6992942, 8.7404467 ], [ 76.6990048, 8.7410292 ], [ 76.6985067, 8.7422159 ], [ 76.6985118, 8.7425522 ], [ 76.6985067, 8.7426308 ], [ 76.6985692, 8.7430148 ], [ 76.6983638, 8.7432928 ], [ 76.6979261, 8.7438754 ], [ 76.6976046, 8.7444713 ], [ 76.697109, 8.7449656 ], [ 76.6969107, 8.7452422 ], [ 76.6968053, 8.7453893 ], [ 76.6964347, 8.7460822 ], [ 76.6963007, 8.7464088 ], [ 76.696006, 8.7467266 ], [ 76.6956631, 8.7472362 ], [ 76.6954478, 8.7475563 ], [ 76.6951799, 8.7481521 ], [ 76.6947735, 8.7487171 ], [ 76.6945681, 8.7492643 ], [ 76.6945056, 8.7495865 ], [ 76.694202, 8.749794 ], [ 76.6935723, 8.7506722 ], [ 76.6933044, 8.7509988 ], [ 76.6931838, 8.7512283 ], [ 76.6926436, 8.7517023 ], [ 76.6923404, 8.7522092 ], [ 76.691227, 8.7535164 ], [ 76.6906476, 8.754142 ], [ 76.6901456, 8.7551028 ], [ 76.6891499, 8.7560359 ], [ 76.6886006, 8.7572065 ], [ 76.6880749, 8.7580185 ], [ 76.6873024, 8.7590526 ], [ 76.6867937, 8.7611164 ], [ 76.6857611, 8.7618941 ], [ 76.6839652, 8.7650884 ], [ 76.6833501, 8.7657422 ], [ 76.6829805, 8.76684 ], [ 76.6824208, 8.7678354 ], [ 76.682311, 8.7680563 ], [ 76.6806925, 8.7702553 ], [ 76.6798599, 8.771655 ], [ 76.6776611, 8.7747803 ], [ 76.6760602, 8.7777152 ], [ 76.6760769, 8.7781952 ], [ 76.6761189, 8.7794049 ], [ 76.675791, 8.7800972 ], [ 76.6752851, 8.7802202 ], [ 76.674524, 8.7810995 ], [ 76.6744181, 8.7831701 ], [ 76.6749362, 8.7831678 ], [ 76.6749384, 8.7836832 ], [ 76.6754565, 8.783681 ], [ 76.6757317, 8.7872872 ], [ 76.6762497, 8.7872849 ], [ 76.6767158, 8.7886715 ], [ 76.6772381, 8.78882 ], [ 76.6770982, 8.789165 ], [ 76.6767435, 8.789084 ], [ 76.6765605, 8.7893535 ], [ 76.6762626, 8.7901193 ], [ 76.6757443, 8.7901216 ], [ 76.6758099, 8.7937982 ], [ 76.6764136, 8.7950146 ], [ 76.675131, 8.7978545 ], [ 76.6752918, 8.8009062 ], [ 76.6752796, 8.8019769 ], [ 76.6757737, 8.8068289 ], [ 76.6766096, 8.8097014 ], [ 76.6755746, 8.8099638 ], [ 76.6755814, 8.8115098 ], [ 76.674543, 8.8109989 ], [ 76.6745419, 8.8107413 ], [ 76.6748008, 8.8107402 ], [ 76.6750374, 8.8085514 ], [ 76.6737641, 8.8037336 ], [ 76.6733219, 8.802875 ], [ 76.6732975, 8.8001812 ], [ 76.671124, 8.7995469 ], [ 76.6700883, 8.7996809 ], [ 76.6700869, 8.7993667 ], [ 76.6703772, 8.7987277 ], [ 76.6710828, 8.7980271 ], [ 76.671598, 8.7972842 ], [ 76.6727761, 8.7967026 ], [ 76.6729643, 8.7956997 ], [ 76.6735642, 8.7950273 ], [ 76.6729078, 8.7929687 ], [ 76.6708309, 8.7919472 ], [ 76.6701609, 8.7870541 ], [ 76.671217, 8.7854486 ], [ 76.6725989, 8.7833442 ], [ 76.6728441, 8.7834486 ], [ 76.673231, 8.7829367 ], [ 76.673057, 8.7827254 ], [ 76.6737709, 8.7816626 ], [ 76.675449, 8.7783261 ], [ 76.6756649, 8.7776656 ], [ 76.6732387, 8.7814963 ], [ 76.6727725, 8.7823084 ], [ 76.6691664, 8.7868332 ], [ 76.6674052, 8.7883883 ], [ 76.6656654, 8.7897189 ], [ 76.6651513, 8.7906224 ], [ 76.6623174, 8.7941142 ], [ 76.6606367, 8.7948946 ], [ 76.6584526, 8.7987695 ], [ 76.6557448, 8.801616 ], [ 76.6544575, 8.8034253 ], [ 76.6520143, 8.8073012 ], [ 76.6496924, 8.8095014 ], [ 76.6489183, 8.8101495 ], [ 76.6484034, 8.8109246 ], [ 76.6486671, 8.8119544 ], [ 76.6481479, 8.8116988 ], [ 76.6463545, 8.8162157 ], [ 76.6457115, 8.8173787 ], [ 76.6438424, 8.8207706 ], [ 76.6432671, 8.8210884 ], [ 76.642913, 8.8210094 ], [ 76.6428513, 8.8210986 ], [ 76.6417157, 8.8227394 ], [ 76.6416282, 8.8228658 ], [ 76.6419316, 8.8231502 ], [ 76.6417433, 8.8237097 ], [ 76.6408213, 8.8246152 ], [ 76.6383744, 8.827718 ], [ 76.6334776, 8.8335369 ], [ 76.6332213, 8.8341826 ], [ 76.6290965, 8.8388387 ], [ 76.6249707, 8.8432374 ], [ 76.6229508, 8.8450676 ], [ 76.6141576, 8.8554822 ], [ 76.6070575, 8.8617877 ], [ 76.601456, 8.8667157 ], [ 76.6003671, 8.8677231 ], [ 76.5957169, 8.8710805 ], [ 76.5936877, 8.8725856 ], [ 76.590672, 8.8743533 ], [ 76.5873847, 8.8754777 ], [ 76.5860754, 8.8758603 ], [ 76.5831968, 8.8759608 ], [ 76.5820891, 8.8756395 ], [ 76.5818089, 8.8754441 ], [ 76.5816207, 8.8754067 ], [ 76.5815577, 8.8755873 ], [ 76.5817127, 8.8757973 ], [ 76.5816915, 8.8758972 ], [ 76.5815798, 8.8759608 ], [ 76.5823741, 8.8773844 ], [ 76.582579, 8.8772662 ], [ 76.5834572, 8.87876 ], [ 76.5835539, 8.8793587 ], [ 76.5833857, 8.8795447 ], [ 76.5829655, 8.8798625 ], [ 76.5818578, 8.8803887 ], [ 76.5808952, 8.8802362 ], [ 76.5799151, 8.8806918 ], [ 76.5789203, 8.8810528 ], [ 76.5780936, 8.8811906 ], [ 76.5764757, 8.881443 ], [ 76.5749286, 8.8814186 ], [ 76.5737781, 8.8815797 ], [ 76.5732641, 8.8818734 ], [ 76.5725901, 8.882013 ], [ 76.5719209, 8.8820497 ], [ 76.5714895, 8.8820352 ], [ 76.5708733, 8.8817257 ], [ 76.570208, 8.8813982 ], [ 76.5694726, 8.8816649 ], [ 76.567882, 8.8802085 ], [ 76.5674989, 8.8799187 ], [ 76.5674383, 8.8795424 ], [ 76.569935, 8.8775589 ], [ 76.5702346, 8.8773237 ], [ 76.5709344, 8.8770286 ], [ 76.5765341, 8.8746673 ], [ 76.5796875, 8.872918 ], [ 76.5830102, 8.8710747 ], [ 76.5832594, 8.8710311 ], [ 76.583269, 8.8707774 ], [ 76.576355, 8.8745357 ], [ 76.5701464, 8.8772282 ], [ 76.569756, 8.8774676 ], [ 76.5668328, 8.8798801 ], [ 76.5655383, 8.879981 ], [ 76.563573, 8.8836333 ], [ 76.5626302, 8.8835774 ], [ 76.5618761, 8.8868609 ], [ 76.557517, 8.8905481 ], [ 76.5567498, 8.8908329 ], [ 76.5561971, 8.8916187 ], [ 76.554914952589826, 8.892354399771914 ], [ 76.5546748, 8.8924922 ], [ 76.554643541001425, 8.892554399771914 ], [ 76.5542033, 8.8934304 ], [ 76.5537146, 8.8943335 ], [ 76.5534436, 8.8942039 ], [ 76.5533911, 8.8942528 ], [ 76.5536301, 8.8944285 ], [ 76.5532949, 8.8949785 ], [ 76.552797, 8.8954786 ], [ 76.5520678, 8.8957359 ], [ 76.5509383, 8.8975331 ], [ 76.5501674, 8.8990825 ], [ 76.5501729, 8.9003709 ], [ 76.5484934, 8.9014086 ], [ 76.5484955, 8.901924 ], [ 76.5466837, 8.902447 ], [ 76.5463054, 8.9050255 ], [ 76.5460496, 8.9057997 ], [ 76.5437314, 8.9091592 ], [ 76.541682, 8.914837 ], [ 76.5395088, 8.9322725 ], [ 76.5356148, 8.9333627 ], [ 76.5354959, 8.9335829 ], [ 76.5356269, 8.9336992 ], [ 76.5399558, 8.9323367 ], [ 76.5407888, 8.9320916 ], [ 76.5408528, 8.9323278 ], [ 76.5403954, 8.9326856 ], [ 76.5418742, 8.9336799 ], [ 76.5438004, 8.9335879 ], [ 76.5440473, 8.9333582 ], [ 76.5443419, 8.9332331 ], [ 76.5459806, 8.9331028 ], [ 76.5464955, 8.9329518 ], [ 76.5470441, 8.932791 ], [ 76.5477163, 8.9325347 ], [ 76.5484472, 8.9323814 ], [ 76.5493055, 8.9322013 ], [ 76.5505892, 8.9318598 ], [ 76.5523438, 8.9308498 ], [ 76.5540894, 8.9302253 ], [ 76.5560755, 8.9304539 ], [ 76.5582412, 8.9308413 ], [ 76.5602764, 8.9310806 ], [ 76.5607182, 8.9308935 ], [ 76.5608915, 8.9310016 ], [ 76.5615674, 8.9302499 ], [ 76.5618311, 8.9297351 ], [ 76.5619094, 8.9288585 ], [ 76.5621786, 8.9278591 ], [ 76.5624726, 8.9272327 ], [ 76.5624056, 8.9235363 ], [ 76.5634104, 8.9229874 ], [ 76.5629991, 8.9219843 ], [ 76.5623836, 8.9224049 ], [ 76.562857, 8.9215416 ], [ 76.5630005, 8.9209615 ], [ 76.562673, 8.9203447 ], [ 76.562986, 8.9196168 ], [ 76.5634219, 8.9190911 ], [ 76.5643842, 8.9180794 ], [ 76.5652863, 8.9157322 ], [ 76.5658745, 8.9151635 ], [ 76.5668752, 8.9135117 ], [ 76.5688142, 8.9119157 ], [ 76.569724, 8.9119536 ], [ 76.5700104, 8.9116785 ], [ 76.569894, 8.9092754 ], [ 76.5708937, 8.9073693 ], [ 76.5699568, 8.9055732 ], [ 76.5700214, 8.9051898 ], [ 76.5704305, 8.9046124 ], [ 76.5706, 8.9029268 ], [ 76.5714527, 8.9023081 ], [ 76.5716882, 8.901742 ], [ 76.5717683, 8.9004836 ], [ 76.5708564, 8.8985651 ], [ 76.5697237, 8.8990752 ], [ 76.5694823, 8.8982908 ], [ 76.5697953, 8.8978273 ], [ 76.5705555, 8.8971052 ], [ 76.5709449, 8.8967353 ], [ 76.570972, 8.8967037 ], [ 76.5717018, 8.8958547 ], [ 76.5720141, 8.8955731 ], [ 76.5722866, 8.8953274 ], [ 76.5730502, 8.8958401 ], [ 76.572783, 8.8969282 ], [ 76.5729181, 8.8977008 ], [ 76.5734013, 8.898339 ], [ 76.573993, 8.8987344 ], [ 76.5743509, 8.8993692 ], [ 76.5746126, 8.9000128 ], [ 76.5748243, 8.9007005 ], [ 76.5752666, 8.9015562 ], [ 76.5758212, 8.9026215 ], [ 76.5759137, 8.9033569 ], [ 76.5766392, 8.9039894 ], [ 76.576822, 8.9037511 ], [ 76.5776041, 8.9025856 ], [ 76.578081, 8.9021513 ], [ 76.578396, 8.9026615 ], [ 76.5787493, 8.902913 ], [ 76.5791547, 8.9030664 ], [ 76.5797704, 8.902989 ], [ 76.5803274, 8.9017476 ], [ 76.5806948, 8.8996016 ], [ 76.5805126, 8.8990185 ], [ 76.5801232, 8.898534 ], [ 76.5805424, 8.8984334 ], [ 76.5810812, 8.8985456 ], [ 76.5818222, 8.898437 ], [ 76.5822582, 8.8980308 ], [ 76.5826562, 8.8977859 ], [ 76.5828486, 8.8971206 ], [ 76.5828681, 8.8966674 ], [ 76.5829779, 8.8964206 ], [ 76.5831294, 8.8953467 ], [ 76.5832319, 8.895297 ], [ 76.5836049, 8.8951697 ], [ 76.583532, 8.8942096 ], [ 76.5833948, 8.8942082 ], [ 76.5833611, 8.8940538 ], [ 76.5832331, 8.8927762 ], [ 76.583464555597359, 8.892554399771914 ], [ 76.5834872, 8.8925327 ], [ 76.5837538, 8.8924796 ], [ 76.5843974, 8.8924766 ], [ 76.584574800116528, 8.892354399771914 ], [ 76.5848033, 8.892197 ], [ 76.5850981, 8.8918844 ], [ 76.585847, 8.8915779 ], [ 76.5866264, 8.8914834 ], [ 76.5873139, 8.8916103 ], [ 76.5879237, 8.8919176 ], [ 76.588676, 8.8924318 ], [ 76.58854222983895, 8.892554399771914 ], [ 76.5880425, 8.8930124 ], [ 76.5870663, 8.8933379 ], [ 76.5867003, 8.8935149 ], [ 76.5853258, 8.8937248 ], [ 76.585635, 8.8957094 ], [ 76.5848401, 8.8960614 ], [ 76.5847708, 8.897134 ], [ 76.5849432, 8.8976367 ], [ 76.5849862, 8.8977621 ], [ 76.5849061, 8.8980515 ], [ 76.5849279, 8.898466 ], [ 76.5844948, 8.8989899 ], [ 76.583947, 8.8998842 ], [ 76.583614, 8.8995459 ], [ 76.5832272, 8.9005823 ], [ 76.5840802, 8.9022919 ], [ 76.5844793, 8.9030736 ], [ 76.5846831, 8.9041653 ], [ 76.5858204, 8.9028086 ], [ 76.5863139, 8.9019712 ], [ 76.5879125, 8.9011974 ], [ 76.5897901, 8.90089 ], [ 76.5911635, 8.900015 ], [ 76.5933332, 8.9009504 ], [ 76.5937954, 8.9017351 ], [ 76.5942027, 8.9018369 ], [ 76.5951405, 8.9032555 ], [ 76.5963951, 8.903656 ], [ 76.5971299, 8.9042061 ], [ 76.5986158, 8.9043224 ], [ 76.6027604, 8.9076235 ], [ 76.6035268, 8.9101679 ], [ 76.6039598, 8.9111082 ], [ 76.604204, 8.9117403 ], [ 76.6058812, 8.9132471 ], [ 76.6068421, 8.9132845 ], [ 76.6074455, 8.9127269 ], [ 76.6075737, 8.9119833 ], [ 76.6066295, 8.9117499 ], [ 76.6079967, 8.9093424 ], [ 76.60857, 8.9091325 ], [ 76.6091178, 8.9095283 ], [ 76.6093919, 8.9103838 ], [ 76.6086897, 8.9117312 ], [ 76.6086024, 8.9126772 ], [ 76.6098519, 8.9127749 ], [ 76.6104423, 8.9124448 ], [ 76.6115881, 8.9089627 ], [ 76.6132609, 8.9085469 ], [ 76.613449, 8.9081535 ], [ 76.614515, 8.9077694 ], [ 76.6163793, 8.907874 ], [ 76.6155043, 8.9080471 ], [ 76.6155389, 8.9087956 ], [ 76.6149504, 8.9100603 ], [ 76.6140329, 8.910643 ], [ 76.6126118, 8.9104602 ], [ 76.6123508, 8.9115728 ], [ 76.6122414, 8.9127363 ], [ 76.6119427, 8.9131434 ], [ 76.6117309, 8.9145424 ], [ 76.6113925, 8.9147547 ], [ 76.6109558, 8.915061 ], [ 76.6107465, 8.9156936 ], [ 76.6102816, 8.9160598 ], [ 76.6104295, 8.917509 ], [ 76.6105848, 8.9191857 ], [ 76.6108451, 8.9194422 ], [ 76.6102672, 8.9213632 ], [ 76.6112459, 8.9221457 ], [ 76.6120286, 8.9233023 ], [ 76.6125468, 8.9233002 ], [ 76.61229, 8.9238166 ], [ 76.6128082, 8.9238143 ], [ 76.6131001, 8.9242456 ], [ 76.6136613, 8.9244084 ], [ 76.6139062, 8.9250686 ], [ 76.6142711, 8.9251001 ], [ 76.6150288, 8.9262643 ], [ 76.6157124, 8.9265163 ], [ 76.6169091, 8.9284784 ], [ 76.6182115, 8.9296126 ], [ 76.6193132, 8.9298411 ], [ 76.6199622, 8.9302254 ], [ 76.6200957, 8.9309978 ], [ 76.6202726, 8.931531 ], [ 76.6198651, 8.9326503 ], [ 76.6182885, 8.9325519 ], [ 76.6178774, 8.9323394 ], [ 76.6177679, 8.9320387 ], [ 76.6171988, 8.9315024 ], [ 76.6164678, 8.9310135 ], [ 76.6158693, 8.930532 ], [ 76.6148948, 8.9305608 ], [ 76.6146244, 8.9310257 ], [ 76.6143947, 8.9310226 ], [ 76.6141743, 8.931632 ], [ 76.6136239, 8.9317475 ], [ 76.6133648, 8.9325732 ], [ 76.6123547, 8.9307738 ], [ 76.6117976, 8.9297455 ], [ 76.6112162, 8.9293479 ], [ 76.6094339, 8.9294571 ], [ 76.6080583, 8.9296492 ], [ 76.6076438, 8.9274378 ], [ 76.6059162, 8.9264076 ], [ 76.6055504, 8.925681 ], [ 76.6047183, 8.9257358 ], [ 76.604678, 8.9249293 ], [ 76.6042092, 8.9247325 ], [ 76.604107, 8.9231675 ], [ 76.6032011, 8.9194752 ], [ 76.6028437, 8.9183982 ], [ 76.6016625, 8.9184164 ], [ 76.6012173, 8.9176823 ], [ 76.6006009, 8.9174248 ], [ 76.6005199, 8.916119 ], [ 76.5997295, 8.9145759 ], [ 76.5985766, 8.9137434 ], [ 76.5978759, 8.9134971 ], [ 76.5955319, 8.9119182 ], [ 76.5948577, 8.9129633 ], [ 76.5951952, 8.9135117 ], [ 76.5951474, 8.9147661 ], [ 76.5944826, 8.9150108 ], [ 76.5940503, 8.9147586 ], [ 76.5934578, 8.9157748 ], [ 76.5931761, 8.9171987 ], [ 76.5924191, 8.9175072 ], [ 76.5908553, 8.9164857 ], [ 76.5894538, 8.9123071 ], [ 76.5897829, 8.9104537 ], [ 76.5897819, 8.908828 ], [ 76.5879848, 8.9066701 ], [ 76.5874336, 8.9073508 ], [ 76.5833505, 8.9069329 ], [ 76.5827907, 8.9073473 ], [ 76.5798732, 8.9053642 ], [ 76.5795159, 8.9039894 ], [ 76.5793043, 8.9040456 ], [ 76.5791162, 8.9043671 ], [ 76.5791136, 8.9045684 ], [ 76.5789683, 8.9046198 ], [ 76.578888, 8.9047571 ], [ 76.5779932, 8.9057876 ], [ 76.5772189, 8.9067339 ], [ 76.5774648, 8.9072369 ], [ 76.5778855, 8.9079874 ], [ 76.5785365, 8.9086283 ], [ 76.5794176, 8.9085805 ], [ 76.5800545, 8.9083079 ], [ 76.5806167, 8.9086445 ], [ 76.5799864, 8.9096879 ], [ 76.5807253, 8.910632 ], [ 76.5814019, 8.9120954 ], [ 76.5829615, 8.9132479 ], [ 76.5834794, 8.9131173 ], [ 76.5836105, 8.9136322 ], [ 76.5842599, 8.9138872 ], [ 76.5840576, 8.9146019 ], [ 76.5851755, 8.9162839 ], [ 76.5861946, 8.9163868 ], [ 76.5864754, 8.9169699 ], [ 76.5869715, 8.9175445 ], [ 76.5882983, 8.9190237 ], [ 76.5888621, 8.9226391 ], [ 76.5884667, 8.923448 ], [ 76.5880578, 8.9225277 ], [ 76.5874373, 8.920746 ], [ 76.5870921, 8.9198669 ], [ 76.5860698, 8.9191424 ], [ 76.5841011, 8.9196667 ], [ 76.5835812, 8.9189631 ], [ 76.5835053, 8.9175631 ], [ 76.58297, 8.917094 ], [ 76.5822843, 8.915811 ], [ 76.5814717, 8.9153546 ], [ 76.5809755, 8.9147888 ], [ 76.5805587, 8.9147629 ], [ 76.5808014, 8.9139478 ], [ 76.5798536, 8.9136483 ], [ 76.5785974, 8.912244 ], [ 76.5773934, 8.9117816 ], [ 76.5759325, 8.9089526 ], [ 76.5754312, 8.9088369 ], [ 76.5746168, 8.9072425 ], [ 76.5743834, 8.9069713 ], [ 76.5736997, 8.9061025 ], [ 76.5734674, 8.9063415 ], [ 76.5737612, 8.907319 ], [ 76.5736986, 8.9085598 ], [ 76.5727715, 8.9094874 ], [ 76.5727635, 8.9103878 ], [ 76.573623, 8.9109683 ], [ 76.5733908, 8.9115783 ], [ 76.5725881, 8.9113597 ], [ 76.5719298, 8.912067 ], [ 76.5717247, 8.9136931 ], [ 76.5718845, 8.9149011 ], [ 76.5702719, 8.9151056 ], [ 76.5692971, 8.9147196 ], [ 76.5685205, 8.914776 ], [ 76.5680225, 8.9156948 ], [ 76.5677087, 8.9168916 ], [ 76.5673557, 8.9184495 ], [ 76.5682148, 8.9188512 ], [ 76.5683233, 8.9193423 ], [ 76.5694286, 8.9194504 ], [ 76.5694682, 8.9200658 ], [ 76.5690777, 8.9206705 ], [ 76.5683985, 8.9205969 ], [ 76.5677064, 8.9211726 ], [ 76.5677085, 8.9216878 ], [ 76.5664149, 8.9222086 ], [ 76.5664161, 8.9224664 ], [ 76.5667299, 8.9229017 ], [ 76.5672533, 8.924046 ], [ 76.5685083, 8.9246352 ], [ 76.5713147, 8.9252269 ], [ 76.5717003, 8.9244467 ], [ 76.5720243, 8.924214 ], [ 76.5726463, 8.9246997 ], [ 76.5728238, 8.9254715 ], [ 76.5730856, 8.9261141 ], [ 76.5738643, 8.9263685 ], [ 76.5774921, 8.9263532 ], [ 76.5790493, 8.9268621 ], [ 76.5800829, 8.9262137 ], [ 76.5810007, 8.92585 ], [ 76.5821529, 8.925432 ], [ 76.5830024, 8.9267456 ], [ 76.5824136, 8.9278481 ], [ 76.5825175, 8.9297238 ], [ 76.5847664, 8.9305748 ], [ 76.5860078, 8.929706 ], [ 76.5886862, 8.9297166 ], [ 76.5908828, 8.9292806 ], [ 76.5917093, 8.929895 ], [ 76.5917703, 8.9312603 ], [ 76.5907673, 8.9325328 ], [ 76.5902831, 8.9331745 ], [ 76.5903835, 8.9340248 ], [ 76.5907461, 8.935058 ], [ 76.596195, 8.9365809 ], [ 76.5980107, 8.9369601 ], [ 76.5984557, 8.9374587 ], [ 76.5987526, 8.9374734 ], [ 76.5988685, 8.9368012 ], [ 76.6004614, 8.9376117 ], [ 76.6015118, 8.9376685 ], [ 76.6018422, 8.9366134 ], [ 76.6019571, 8.9382672 ], [ 76.6014201, 8.9392827 ], [ 76.6002853, 8.9394354 ], [ 76.600115, 8.9388296 ], [ 76.59941, 8.9385018 ], [ 76.5952972, 8.9383577 ], [ 76.5949075, 8.9385197 ], [ 76.5939191, 8.9388891 ], [ 76.5932636, 8.939453 ], [ 76.5934079, 8.9406987 ], [ 76.5951661, 8.9423051 ], [ 76.5931991, 8.9421782 ], [ 76.5920237, 8.9415893 ], [ 76.5907468, 8.9415994 ], [ 76.5902602, 8.942343 ], [ 76.5902676, 8.9442086 ], [ 76.5906941, 8.9453245 ], [ 76.5899022, 8.9454225 ], [ 76.5897114, 8.9445652 ], [ 76.5890862, 8.9442606 ], [ 76.5889745, 8.9426326 ], [ 76.5883918, 8.9404864 ], [ 76.5893569, 8.939577 ], [ 76.5899023, 8.9379756 ], [ 76.5890159, 8.9366435 ], [ 76.5885147, 8.9363427 ], [ 76.5872935, 8.936105 ], [ 76.5861211, 8.9368378 ], [ 76.5853092, 8.9362415 ], [ 76.5853069, 8.935726 ], [ 76.5847387, 8.9356159 ], [ 76.584072, 8.9354875 ], [ 76.5829712, 8.934963 ], [ 76.5829692, 8.9344476 ], [ 76.5818906, 8.9345437 ], [ 76.5803251, 8.9355136 ], [ 76.5801143, 8.9340961 ], [ 76.5788561, 8.9331082 ], [ 76.5759599, 8.931643 ], [ 76.5759442, 8.9290114 ], [ 76.5733602, 8.9298892 ], [ 76.5721226, 8.929539 ], [ 76.5715458, 8.9296001 ], [ 76.5712865, 8.9296012 ], [ 76.5709778, 8.9295065 ], [ 76.5707294, 8.9298181 ], [ 76.57083, 8.9305168 ], [ 76.5724563, 8.9318564 ], [ 76.5729078, 8.9324239 ], [ 76.5733729, 8.9326846 ], [ 76.574031, 8.9337551 ], [ 76.5744167, 8.9343546 ], [ 76.5757202, 8.936153 ], [ 76.5767562, 8.9360202 ], [ 76.5785862, 8.9397486 ], [ 76.5793644, 8.9398746 ], [ 76.5792366, 8.9403904 ], [ 76.5794968, 8.9406471 ], [ 76.579629, 8.9411619 ], [ 76.5809247, 8.9411564 ], [ 76.583013, 8.9446257 ], [ 76.5856061, 8.9450016 ], [ 76.5872991, 8.947056 ], [ 76.5874335, 8.9480862 ], [ 76.5879519, 8.9480839 ], [ 76.5879586, 8.9496299 ], [ 76.58978, 8.9512967 ], [ 76.5905575, 8.9512935 ], [ 76.5913299, 8.950131 ], [ 76.5918476, 8.9499994 ], [ 76.592232, 8.9490964 ], [ 76.593397, 8.9487044 ], [ 76.5946955, 8.9493434 ], [ 76.5949625, 8.9511461 ], [ 76.5935204, 8.9506113 ], [ 76.5933958, 8.9519003 ], [ 76.5941929, 8.9529532 ], [ 76.5941963, 8.9537262 ], [ 76.5947146, 8.953724 ], [ 76.5957658, 8.9570695 ], [ 76.5962842, 8.9570672 ], [ 76.5965488, 8.9583545 ], [ 76.5970661, 8.9580946 ], [ 76.5977214, 8.9598956 ], [ 76.5973171, 8.9638614 ], [ 76.5962827, 8.9661863 ], [ 76.5956038, 8.9674236 ], [ 76.5940011, 8.9684154 ], [ 76.595017, 8.9708629 ], [ 76.5960525, 8.9706007 ], [ 76.597107, 8.9713734 ], [ 76.5982054, 8.9739457 ], [ 76.5989984, 8.9739039 ], [ 76.6005405, 8.9709345 ], [ 76.6010587, 8.9709322 ], [ 76.6013473, 8.9723379 ], [ 76.6018557, 8.9738154 ], [ 76.6026823, 8.9728209 ], [ 76.6027567, 8.9719879 ], [ 76.6036388, 8.9705959 ], [ 76.6021204, 8.9669658 ], [ 76.6013423, 8.9668399 ], [ 76.6005659, 8.967101 ], [ 76.5997869, 8.9667182 ], [ 76.5989631, 8.9646968 ], [ 76.5991853, 8.9632168 ], [ 76.5999298, 8.9624101 ], [ 76.6007077, 8.9625359 ], [ 76.6017506, 8.9639482 ], [ 76.6027873, 8.9639437 ], [ 76.6031738, 8.9635559 ], [ 76.6030367, 8.9617527 ], [ 76.6014824, 8.9618879 ], [ 76.6004429, 8.9612487 ], [ 76.5997229, 8.9598897 ], [ 76.5995543, 8.9581873 ], [ 76.6013646, 8.9572769 ], [ 76.603793, 8.9548556 ], [ 76.6050043, 8.9540095 ], [ 76.6057442, 8.9539644 ], [ 76.6075414, 8.9527189 ], [ 76.6090765, 8.9535219 ], [ 76.6090776, 8.9537795 ], [ 76.608694, 8.954812 ], [ 76.6083847, 8.9552137 ], [ 76.6077255, 8.955659 ], [ 76.6066531, 8.9560308 ], [ 76.6066447, 8.9567817 ], [ 76.6069119, 8.9571514 ], [ 76.6072692, 8.9579599 ], [ 76.6083587, 8.9587425 ], [ 76.6091429, 8.9607696 ], [ 76.6100335, 8.9615794 ], [ 76.6112667, 8.9610117 ], [ 76.6135258, 8.962309 ], [ 76.6148211, 8.962175 ], [ 76.6145845, 8.9637817 ], [ 76.6141242, 8.9637542 ], [ 76.6137894, 8.9647324 ], [ 76.6130425, 8.9648388 ], [ 76.609776, 8.9638688 ], [ 76.6093123, 8.9631785 ], [ 76.6082653, 8.9639456 ], [ 76.6074568, 8.9641537 ], [ 76.6066636, 8.9648944 ], [ 76.6064924, 8.9679633 ], [ 76.6070674, 8.9687444 ], [ 76.6076696, 8.9693897 ], [ 76.6080612, 8.970161 ], [ 76.6078977, 8.9709681 ], [ 76.6084544, 8.9710899 ], [ 76.6088205, 8.9705092 ], [ 76.6138201, 8.9704201 ], [ 76.6141939, 8.9698854 ], [ 76.6152484, 8.9700926 ], [ 76.6165417, 8.9683979 ], [ 76.6179828, 8.9673661 ], [ 76.6192638, 8.9671813 ], [ 76.6204268, 8.9677141 ], [ 76.6209492, 8.9686132 ], [ 76.6222839, 8.9687472 ], [ 76.6231907, 8.9683836 ], [ 76.6229257, 8.9664933 ], [ 76.6234419, 8.9659755 ], [ 76.6231722, 8.9646185 ], [ 76.6230585, 8.9638768 ], [ 76.6223728, 8.9629204 ], [ 76.6217428, 8.9626747 ], [ 76.6213734, 8.9621146 ], [ 76.6198384, 8.9607526 ], [ 76.6192921, 8.9603201 ], [ 76.6187878, 8.9597161 ], [ 76.6185179, 8.9581326 ], [ 76.6190367, 8.9574782 ], [ 76.6196733, 8.9577252 ], [ 76.6203545, 8.9577057 ], [ 76.6208164, 8.9573949 ], [ 76.6211564, 8.9567916 ], [ 76.6216108, 8.9572175 ], [ 76.6214874, 8.958032 ], [ 76.6222561, 8.9593314 ], [ 76.6231021, 8.9594878 ], [ 76.6238779, 8.9590982 ], [ 76.6245855, 8.9572233 ], [ 76.6246802, 8.9553122 ], [ 76.625457, 8.9551795 ], [ 76.6261318, 8.9541056 ], [ 76.6254114, 8.9530185 ], [ 76.6241151, 8.9528949 ], [ 76.6230465, 8.9516949 ], [ 76.6236166, 8.9508454 ], [ 76.6244198, 8.9511764 ], [ 76.6254812, 8.9504125 ], [ 76.6254728, 8.9500477 ], [ 76.6270373, 8.9497087 ], [ 76.627672, 8.950749 ], [ 76.6282889, 8.9512956 ], [ 76.6285834, 8.9516464 ], [ 76.6307808, 8.9521709 ], [ 76.6313657, 8.9519422 ], [ 76.6322885, 8.9516995 ], [ 76.6326955, 8.9518351 ], [ 76.6331173, 8.9527045 ], [ 76.6335239, 8.9536392 ], [ 76.6340447, 8.9543255 ], [ 76.6352269, 8.9546611 ], [ 76.6373968, 8.9529415 ], [ 76.6386926, 8.9529359 ], [ 76.6392131, 8.953449 ], [ 76.6432462, 8.9539381 ], [ 76.643123, 8.9552271 ], [ 76.6420835, 8.954587 ], [ 76.6396552, 8.9551358 ], [ 76.6396574, 8.9556512 ], [ 76.6375837, 8.955531 ], [ 76.6361224, 8.956896 ], [ 76.6353993, 8.9568879 ], [ 76.6324258, 8.9566599 ], [ 76.6326883, 8.9574317 ], [ 76.6332762, 8.9579392 ], [ 76.6344958, 8.9586196 ], [ 76.6366964, 8.9599032 ], [ 76.6365604, 8.960332 ], [ 76.6358353, 8.9601352 ], [ 76.6353588, 8.9599918 ], [ 76.6342343, 8.9599128 ], [ 76.6322177, 8.95975 ], [ 76.6317272, 8.9592346 ], [ 76.6310135, 8.9585342 ], [ 76.6308324, 8.9579494 ], [ 76.6294092, 8.956962 ], [ 76.6286347, 8.9576102 ], [ 76.6288378, 8.9599022 ], [ 76.6293142, 8.96114 ], [ 76.6287517, 8.9643092 ], [ 76.6291456, 8.9653383 ], [ 76.6283692, 8.9655993 ], [ 76.6285028, 8.9666296 ], [ 76.6282448, 8.9668883 ], [ 76.6285121, 8.9686911 ], [ 76.6291651, 8.9697189 ], [ 76.6296833, 8.9697166 ], [ 76.6294323, 8.9715215 ], [ 76.6302295, 8.9721255 ], [ 76.6302318, 8.9726409 ], [ 76.632046, 8.9726328 ], [ 76.6322113, 8.9658266 ], [ 76.6316897, 8.9650559 ], [ 76.6316827, 8.96351 ], [ 76.6331051, 8.9627307 ], [ 76.634868, 8.9661781 ], [ 76.6353864, 8.9661758 ], [ 76.6356501, 8.9672055 ], [ 76.6369686, 8.9668171 ], [ 76.6403347, 8.9661583 ], [ 76.640079, 8.9669327 ], [ 76.6395608, 8.966935 ], [ 76.6396921, 8.9674499 ], [ 76.6393062, 8.9679668 ], [ 76.6387879, 8.9679693 ], [ 76.6385322, 8.9687434 ], [ 76.6372364, 8.9687491 ], [ 76.6372387, 8.9692645 ], [ 76.6387953, 8.9696437 ], [ 76.6393115, 8.969126 ], [ 76.6425464, 8.9682103 ], [ 76.6426742, 8.9676943 ], [ 76.6439705, 8.967817 ], [ 76.6443559, 8.9671714 ], [ 76.644325969872, 8.964738674299916 ], [ 76.644307, 8.9631968 ], [ 76.6435283, 8.9629426 ], [ 76.6442994, 8.9615215 ], [ 76.644325969872, 8.961521377086175 ], [ 76.644449794589008, 8.961520804265588 ], [ 76.644525969872006, 8.961520451874147 ], [ 76.6445588, 8.9615203 ], [ 76.6461364, 8.9650974 ], [ 76.6476081, 8.9655929 ], [ 76.6492904, 8.9651994 ], [ 76.6483316, 8.9632842 ], [ 76.6478134, 8.9632864 ], [ 76.64794, 8.9627705 ], [ 76.6472682, 8.961149 ], [ 76.6467498, 8.9611513 ], [ 76.6467464, 8.9603783 ], [ 76.6472658, 8.9606336 ], [ 76.6470934, 8.9602881 ], [ 76.6475198, 8.9594724 ], [ 76.6482966, 8.9593407 ], [ 76.6483036, 8.9608867 ], [ 76.6496005, 8.9611386 ], [ 76.6497251, 8.9601073 ], [ 76.6501136, 8.9599763 ], [ 76.6507651, 8.9608757 ], [ 76.6508953, 8.9627904 ], [ 76.6533108, 8.9638963 ], [ 76.6540876, 8.9637646 ], [ 76.6542214, 8.9647946 ], [ 76.6533543, 8.9649918 ], [ 76.652528, 8.9657775 ], [ 76.6533078, 8.9662895 ], [ 76.6536637, 8.9676408 ], [ 76.6541876, 8.9675237 ], [ 76.65419, 8.9680391 ], [ 76.6562634, 8.9680298 ], [ 76.6563911, 8.968917 ], [ 76.6574266, 8.9686547 ], [ 76.6573684, 8.9674644 ], [ 76.656591, 8.9674678 ], [ 76.6569734, 8.9661775 ], [ 76.6582658, 8.9653987 ], [ 76.6583933, 8.9648827 ], [ 76.6599448, 8.9641027 ], [ 76.6598125, 8.9635882 ], [ 76.6604597, 8.9633275 ], [ 76.6590388, 8.9597196 ], [ 76.6564639, 8.9558831 ], [ 76.6570004, 8.955756 ], [ 76.661485, 8.9597196 ], [ 76.6626008, 8.9600163 ], [ 76.6630514, 8.960631 ], [ 76.6629656, 8.961553 ], [ 76.6642209, 8.9632169 ], [ 76.6663444, 8.9633852 ], [ 76.667334, 8.9630797 ], [ 76.667873, 8.9631146 ], [ 76.6674401, 8.9637692 ], [ 76.6655403, 8.9643976 ], [ 76.6643925, 8.9650185 ], [ 76.6635986, 8.9644039 ], [ 76.6623862, 8.9642343 ], [ 76.6615567, 8.9650286 ], [ 76.6616121, 8.9671869 ], [ 76.6609862, 8.9675751 ], [ 76.6606806, 8.9680207 ], [ 76.6603313, 8.9684089 ], [ 76.6599965, 8.9688258 ], [ 76.6594434, 8.9701916 ], [ 76.6598655, 8.9720319 ], [ 76.6602876, 8.9724775 ], [ 76.6605787, 8.9728082 ], [ 76.6631539, 8.9742979 ], [ 76.6639554, 8.9750941 ], [ 76.6644556, 8.9755803 ], [ 76.6651343, 8.9757123 ], [ 76.6678305, 8.9768537 ], [ 76.6680932, 8.9776255 ], [ 76.6670588, 8.9781456 ], [ 76.6670613, 8.978661 ], [ 76.6631704, 8.9779054 ], [ 76.6629063, 8.9768758 ], [ 76.661352, 8.9770111 ], [ 76.6608319, 8.9766274 ], [ 76.660568, 8.9755979 ], [ 76.6584913, 8.9748343 ], [ 76.6584936, 8.9753493 ], [ 76.6566795, 8.9753575 ], [ 76.6566689, 8.9730386 ], [ 76.6530394, 8.9727973 ], [ 76.6530371, 8.972282 ], [ 76.652001, 8.972415 ], [ 76.6514811, 8.9720312 ], [ 76.6514786, 8.9715158 ], [ 76.6509604, 8.9715182 ], [ 76.6509557, 8.9704874 ], [ 76.6494042, 8.9712674 ], [ 76.64928, 8.9725564 ], [ 76.6499296, 8.9728111 ], [ 76.6496773, 8.9743582 ], [ 76.6501957, 8.974356 ], [ 76.6502038, 8.9761597 ], [ 76.6509819, 8.9762846 ], [ 76.6513732, 8.9769274 ], [ 76.6494369, 8.9784824 ], [ 76.6491857, 8.9802872 ], [ 76.6486663, 8.9800318 ], [ 76.648778, 8.9761661 ], [ 76.6478632, 8.9743664 ], [ 76.6470851, 8.9742405 ], [ 76.6463104, 8.9748887 ], [ 76.6460572, 8.9761782 ], [ 76.645798, 8.9761793 ], [ 76.6455319, 8.9746345 ], [ 76.6450135, 8.9746368 ], [ 76.6444894, 8.9733507 ], [ 76.6437113, 8.9732248 ], [ 76.6419007, 8.9740059 ], [ 76.641126, 8.974654 ], [ 76.6410052, 8.9767159 ], [ 76.6415293, 8.9780021 ], [ 76.6411434, 8.9785192 ], [ 76.6398459, 8.978138 ], [ 76.6380345, 8.9787907 ], [ 76.6385448, 8.9769845 ], [ 76.6367266, 8.9760903 ], [ 76.6359508, 8.9764806 ], [ 76.6351895, 8.9800917 ], [ 76.634671, 8.980094 ], [ 76.6341596, 8.9816424 ], [ 76.631572, 8.9825552 ], [ 76.6284635, 8.9829559 ], [ 76.6284649, 8.9832135 ], [ 76.6289831, 8.9832113 ], [ 76.6289854, 8.9837267 ], [ 76.6300226, 8.9838505 ], [ 76.6328827, 8.9858992 ], [ 76.634177, 8.9855074 ], [ 76.6340366, 8.983189 ], [ 76.633905, 8.9826741 ], [ 76.6362337, 8.9817614 ], [ 76.6372772, 8.9833029 ], [ 76.6398672, 8.9829055 ], [ 76.6398625, 8.9818747 ], [ 76.6403809, 8.9818724 ], [ 76.6406372, 8.9812266 ], [ 76.6419355, 8.9817363 ], [ 76.6427122, 8.9816044 ], [ 76.6427147, 8.9821198 ], [ 76.6432329, 8.9821173 ], [ 76.6429761, 8.9826339 ], [ 76.6424578, 8.9826363 ], [ 76.6422021, 8.9834105 ], [ 76.6406482, 8.9836751 ], [ 76.6406518, 8.984448 ], [ 76.6370301, 8.9860102 ], [ 76.6374267, 8.9878123 ], [ 76.6388542, 8.988192 ], [ 76.6406586, 8.9859941 ], [ 76.6432503, 8.9859826 ], [ 76.6432481, 8.9854672 ], [ 76.644525969872006, 8.985178951253284 ], [ 76.6455782, 8.9849416 ], [ 76.6455807, 8.9854568 ], [ 76.6445452, 8.9857191 ], [ 76.644525969872006, 8.98579703262396 ], [ 76.644340219308518, 8.986549811223417 ], [ 76.644325969872, 8.986607558939806 ], [ 76.6442906, 8.9867509 ], [ 76.6427378, 8.9872733 ], [ 76.6430033, 8.9886888 ], [ 76.644325969872, 8.988551406939491 ], [ 76.6455939, 8.9884197 ], [ 76.6461099, 8.9879021 ], [ 76.6476661, 8.9881529 ], [ 76.6481868, 8.9886657 ], [ 76.6528538, 8.9890318 ], [ 76.6525922, 8.9885178 ], [ 76.6537534, 8.9874819 ], [ 76.6538625, 8.9828431 ], [ 76.6554163, 8.9825785 ], [ 76.655414, 8.9820631 ], [ 76.6564535, 8.9827021 ], [ 76.6590441, 8.9824328 ], [ 76.6593063, 8.9830763 ], [ 76.6574943, 8.9835998 ], [ 76.6574968, 8.9841152 ], [ 76.6559439, 8.9846374 ], [ 76.6560755, 8.9851523 ], [ 76.6558175, 8.985411 ], [ 76.6559534, 8.9866988 ], [ 76.6564716, 8.9866965 ], [ 76.6562161, 8.9874708 ], [ 76.6567343, 8.9874685 ], [ 76.6569982, 8.988498 ], [ 76.658816, 8.9892628 ], [ 76.6592078, 8.9900341 ], [ 76.6590846, 8.991323 ], [ 76.658565, 8.9910677 ], [ 76.6588194, 8.9900358 ], [ 76.6580413, 8.9899101 ], [ 76.6557164, 8.9915958 ], [ 76.6553388, 8.9941743 ], [ 76.6562528, 8.9955871 ], [ 76.6565121, 8.9955859 ], [ 76.6567684, 8.9949411 ], [ 76.6572872, 8.9950671 ], [ 76.6575493, 8.9957105 ], [ 76.6588459, 8.9958331 ], [ 76.6593665, 8.9963462 ], [ 76.6617009, 8.9967226 ], [ 76.6617033, 8.997238 ], [ 76.6639105, 8.9982587 ], [ 76.6643057, 8.9995452 ], [ 76.661712, 8.99917 ], [ 76.6593858, 9.0005981 ], [ 76.659122, 8.9995686 ], [ 76.6575658, 8.9993178 ], [ 76.6570415, 8.9980319 ], [ 76.6565238, 8.9981627 ], [ 76.6552256, 8.9976532 ], [ 76.6547088, 8.9980423 ], [ 76.6547113, 8.9985577 ], [ 76.6541929, 8.9985599 ], [ 76.6543289, 9.0001056 ], [ 76.6534293, 9.0016556 ], [ 76.6531702, 9.0016567 ], [ 76.6531621, 8.9998531 ], [ 76.6526436, 8.9998553 ], [ 76.6521171, 8.998054 ], [ 76.6513384, 8.9977998 ], [ 76.6508048, 8.9944523 ], [ 76.6495077, 8.9942006 ], [ 76.6492439, 8.9931708 ], [ 76.6450919, 8.9920293 ], [ 76.644325969872, 8.992414507595035 ], [ 76.6432817, 8.9929397 ], [ 76.6440685, 8.9949978 ], [ 76.644325969872, 8.995069725930314 ], [ 76.6449763, 8.9952514 ], [ 76.6443358, 8.9968005 ], [ 76.6448547, 8.9969265 ], [ 76.6455076, 8.9980835 ], [ 76.6453841, 8.9993725 ], [ 76.6459026, 8.9993702 ], [ 76.6463002, 9.0014299 ], [ 76.6456561, 9.0022057 ], [ 76.644525969872006, 9.001556804810095 ], [ 76.644097, 9.0013105 ], [ 76.6430632, 9.0019597 ], [ 76.6435954, 9.0050493 ], [ 76.6428168, 9.0047951 ], [ 76.6417614, 9.0006769 ], [ 76.6402052, 9.0004263 ], [ 76.6402074, 9.0009415 ], [ 76.6386546, 9.0014639 ], [ 76.6389092, 9.000432 ], [ 76.639427, 9.0003004 ], [ 76.6399413, 8.9993966 ], [ 76.6404597, 8.9993944 ], [ 76.6408364, 8.9968159 ], [ 76.6404446, 8.9960446 ], [ 76.6396665, 8.9959188 ], [ 76.6381154, 8.996828 ], [ 76.637861, 8.9978599 ], [ 76.6376017, 8.997861 ], [ 76.6370753, 8.9960596 ], [ 76.6365569, 8.9960618 ], [ 76.6365546, 8.9955466 ], [ 76.6360362, 8.9955489 ], [ 76.6360385, 8.9960643 ], [ 76.6344881, 8.9971019 ], [ 76.6346195, 8.9976166 ], [ 76.6339755, 8.9983925 ], [ 76.6329353, 8.9976241 ], [ 76.6334456, 8.995818 ], [ 76.6329271, 8.9958203 ], [ 76.6326646, 8.9950484 ], [ 76.6318871, 8.9950518 ], [ 76.6318824, 8.9940212 ], [ 76.6313641, 8.9940235 ], [ 76.631091, 8.9909324 ], [ 76.6297952, 8.9909382 ], [ 76.6292825, 8.9922289 ], [ 76.6279861, 8.9921053 ], [ 76.6269453, 8.9912083 ], [ 76.6268096, 8.9899207 ], [ 76.6279752, 8.9896578 ], [ 76.6279718, 8.9888848 ], [ 76.6269349, 8.9888893 ], [ 76.6269338, 8.9886317 ], [ 76.6275801, 8.9883712 ], [ 76.6277045, 8.9870822 ], [ 76.627016, 8.9872544 ], [ 76.6269236, 8.9863126 ], [ 76.6251128, 8.9870935 ], [ 76.625115, 8.9876089 ], [ 76.6238179, 8.987357 ], [ 76.6238202, 8.9878724 ], [ 76.6217457, 8.9876238 ], [ 76.621748, 8.9881391 ], [ 76.6210984, 8.9878843 ], [ 76.6212262, 8.9873683 ], [ 76.6204486, 8.9873717 ], [ 76.6201791, 8.9850538 ], [ 76.6188839, 8.9851878 ], [ 76.6181092, 8.9858359 ], [ 76.6181126, 8.9866088 ], [ 76.6165588, 8.9868735 ], [ 76.6166834, 8.9858421 ], [ 76.6175885, 8.9853228 ], [ 76.6175909, 8.9858382 ], [ 76.61785, 8.985837 ], [ 76.6171812, 8.9812016 ], [ 76.6178283, 8.9809412 ], [ 76.617826, 8.9804259 ], [ 76.6183456, 8.9806811 ], [ 76.6186002, 8.9796493 ], [ 76.6173054, 8.9799127 ], [ 76.6167803, 8.978369 ], [ 76.6160028, 8.9783724 ], [ 76.6157618, 8.9824963 ], [ 76.6162802, 8.982494 ], [ 76.6157697, 8.9843 ], [ 76.6152498, 8.9839153 ], [ 76.6142152, 8.9844351 ], [ 76.6116206, 8.9838028 ], [ 76.6116229, 8.9843181 ], [ 76.6111046, 8.9843202 ], [ 76.6113609, 8.9836747 ], [ 76.6121379, 8.9835428 ], [ 76.6121322, 8.9822544 ], [ 76.6126505, 8.9822521 ], [ 76.6123857, 8.9809648 ], [ 76.6116087, 8.9810967 ], [ 76.6110888, 8.9807129 ], [ 76.6110795, 8.9786515 ], [ 76.6090039, 8.9781452 ], [ 76.6090016, 8.9776298 ], [ 76.6080884, 8.9777823 ], [ 76.6075838, 8.9794397 ], [ 76.6081054, 8.9802106 ], [ 76.6079842, 8.9820149 ], [ 76.6074658, 8.982017 ], [ 76.6076008, 8.983305 ], [ 76.6070982, 8.9869147 ], [ 76.6077478, 8.9871697 ], [ 76.6076223, 8.9882009 ], [ 76.6067179, 8.9887201 ], [ 76.6077626, 8.9905194 ], [ 76.6069861, 8.9907804 ], [ 76.6069884, 8.9912958 ], [ 76.6059506, 8.9910426 ], [ 76.605181, 8.9928498 ], [ 76.6046609, 8.9924652 ], [ 76.6036246, 8.992599 ], [ 76.6036214, 8.9918258 ], [ 76.6041396, 8.9918235 ], [ 76.6038748, 8.9905362 ], [ 76.603357, 8.990667 ], [ 76.6023163, 8.98977 ], [ 76.6025732, 8.9892535 ], [ 76.5999803, 8.989007 ], [ 76.600106, 8.9882336 ], [ 76.5994541, 8.9872056 ], [ 76.5984161, 8.9869523 ], [ 76.5984116, 8.9859217 ], [ 76.5976329, 8.9856673 ], [ 76.5964084, 8.9855406 ], [ 76.5956286, 8.9850286 ], [ 76.5948516, 8.9851613 ], [ 76.594855, 8.9859343 ], [ 76.5953734, 8.985932 ], [ 76.5948595, 8.9869651 ], [ 76.5933078, 8.9877447 ], [ 76.5930519, 8.9885188 ], [ 76.595903, 8.9885066 ], [ 76.595655, 8.9910845 ], [ 76.5951368, 8.9910868 ], [ 76.5955386, 8.9941772 ], [ 76.5950224, 8.9946949 ], [ 76.5950258, 8.9954679 ], [ 76.5943829, 8.9965015 ], [ 76.5938644, 8.9965036 ], [ 76.594127, 8.9972757 ], [ 76.5928321, 8.997539 ], [ 76.5928344, 8.9980544 ], [ 76.5925753, 8.9980555 ], [ 76.592573, 8.9975401 ], [ 76.5917966, 8.9978011 ], [ 76.5914106, 8.9985758 ], [ 76.5915429, 8.9990906 ], [ 76.5910247, 8.9990929 ], [ 76.5907654, 8.999094 ], [ 76.590247, 8.9990963 ], [ 76.5899727, 8.998798 ], [ 76.5898033, 8.9984904 ], [ 76.5897242, 8.9980678 ], [ 76.5896245, 8.997739 ], [ 76.5892012, 8.9970392 ], [ 76.5889427, 8.9971687 ], [ 76.5881646, 8.9970436 ], [ 76.5875656, 8.9967662 ], [ 76.5868675, 8.9967916 ], [ 76.5868652, 8.9962762 ], [ 76.5865889, 8.9961639 ], [ 76.5863447, 8.9957631 ], [ 76.5858263, 8.9957652 ], [ 76.5862213, 8.9973097 ], [ 76.5868709, 8.9975647 ], [ 76.5866138, 8.9980812 ], [ 76.5871328, 8.9982073 ], [ 76.588174, 8.9992335 ], [ 76.5894996, 8.9998988 ], [ 76.591594, 9.0007301 ], [ 76.5936954, 9.0018346 ], [ 76.5931382, 9.0022808 ], [ 76.5896414, 9.0011608 ], [ 76.5883788, 9.0014964 ], [ 76.587663, 9.0009111 ], [ 76.5870886, 9.0010682 ], [ 76.5866986, 9.0005441 ], [ 76.5861664, 8.9997397 ], [ 76.5845426, 8.9986055 ], [ 76.5837646, 8.9965101 ], [ 76.5832891, 8.9955078 ], [ 76.5832266, 8.9939725 ], [ 76.5837382, 8.9924243 ], [ 76.5827004, 8.992171 ], [ 76.5825474, 8.9912182 ], [ 76.5822561, 8.9894164 ], [ 76.5812576, 8.9883119 ], [ 76.5816278, 8.9839295 ], [ 76.5805883, 8.9832894 ], [ 76.5777335, 8.9824002 ], [ 76.5777301, 8.9816271 ], [ 76.5761729, 8.9811186 ], [ 76.5761684, 8.9800877 ], [ 76.5756501, 8.98009 ], [ 76.5753876, 8.979318 ], [ 76.5740928, 8.9795812 ], [ 76.5744732, 8.9777757 ], [ 76.575897, 8.9772543 ], [ 76.5762797, 8.9759641 ], [ 76.577312, 8.974929 ], [ 76.5763954, 8.9726137 ], [ 76.5756178, 8.972617 ], [ 76.5752209, 8.9708149 ], [ 76.57444, 8.9700451 ], [ 76.5745679, 8.9695294 ], [ 76.5740495, 8.9695314 ], [ 76.5735233, 8.9677299 ], [ 76.5727448, 8.9674755 ], [ 76.5717004, 8.965676 ], [ 76.5693646, 8.9649129 ], [ 76.5689665, 8.9628531 ], [ 76.5693523, 8.9620785 ], [ 76.568834, 8.9620806 ], [ 76.5685715, 8.9613087 ], [ 76.5672769, 8.9615718 ], [ 76.5670244, 8.9631191 ], [ 76.566765, 8.96312 ], [ 76.5664982, 8.9613174 ], [ 76.5670166, 8.9613153 ], [ 76.5674005, 8.9602828 ], [ 76.5680472, 8.9598931 ], [ 76.5684317, 8.9589901 ], [ 76.5677798, 8.9579619 ], [ 76.5672614, 8.9579642 ], [ 76.5667331, 8.9556472 ], [ 76.5662158, 8.9559071 ], [ 76.5659523, 8.9548774 ], [ 76.5664706, 8.9548752 ], [ 76.5662071, 8.9538454 ], [ 76.5656887, 8.9538477 ], [ 76.5656866, 8.9533324 ], [ 76.5636089, 8.9523105 ], [ 76.5636055, 8.9515373 ], [ 76.5564088, 8.9493087 ], [ 76.5565452, 8.9505436 ], [ 76.5568707, 8.9523389 ], [ 76.5558352, 8.9526008 ], [ 76.5560998, 8.9538881 ], [ 76.5573973, 8.9542687 ], [ 76.5586985, 8.9555518 ], [ 76.5601262, 8.9561904 ], [ 76.5592283, 8.9582558 ], [ 76.5587089, 8.9580003 ], [ 76.5587068, 8.9574848 ], [ 76.5581884, 8.957487 ], [ 76.5574044, 8.9559441 ], [ 76.5537755, 8.9558302 ], [ 76.5522243, 8.9567391 ], [ 76.5517116, 8.9580296 ], [ 76.5498985, 8.9582949 ], [ 76.5499006, 8.9588103 ], [ 76.5488618, 8.9582993 ], [ 76.5485972, 8.957012 ], [ 76.5484701, 8.9569427 ], [ 76.547968, 8.9570333 ], [ 76.5478218, 8.9575305 ], [ 76.5473694, 8.9582401 ], [ 76.5470497, 8.9588222 ], [ 76.5474457, 8.9606245 ], [ 76.5471877, 8.9608833 ], [ 76.5473221, 8.9619135 ], [ 76.5475812, 8.9619124 ], [ 76.5475867, 8.9632007 ], [ 76.5478469, 8.9634574 ], [ 76.5488847, 8.9637105 ], [ 76.5488868, 8.964226 ], [ 76.5504419, 8.9642196 ], [ 76.5504387, 8.9634464 ], [ 76.5517344, 8.9634411 ], [ 76.5517367, 8.9639564 ], [ 76.552255, 8.9639541 ], [ 76.5521272, 8.9644702 ], [ 76.5543349, 8.9654918 ], [ 76.5543326, 8.9649764 ], [ 76.5553693, 8.964972 ], [ 76.5553649, 8.9639411 ], [ 76.5558834, 8.963939 ], [ 76.5561408, 8.9635508 ], [ 76.55588, 8.9631659 ], [ 76.5565286, 8.9634209 ], [ 76.5564016, 8.9639368 ], [ 76.5571797, 8.9640619 ], [ 76.5578322, 8.9652194 ], [ 76.5577063, 8.965993 ], [ 76.558485, 8.9662474 ], [ 76.5576244, 8.9677085 ], [ 76.5566751, 8.9672857 ], [ 76.556931, 8.9665116 ], [ 76.5551191, 8.9670346 ], [ 76.5542323, 8.9719346 ], [ 76.5551419, 8.972446 ], [ 76.5548851, 8.9729624 ], [ 76.556182, 8.9732147 ], [ 76.5561841, 8.97373 ], [ 76.5577403, 8.9739812 ], [ 76.5577426, 8.9744966 ], [ 76.5603332, 8.974228 ], [ 76.5600796, 8.9755175 ], [ 76.5605978, 8.9755153 ], [ 76.5606001, 8.9760307 ], [ 76.5608592, 8.9760295 ], [ 76.560856, 8.9752565 ], [ 76.5640973, 8.9757583 ], [ 76.5642296, 8.976273 ], [ 76.5650066, 8.9761405 ], [ 76.5660444, 8.9763937 ], [ 76.5679917, 8.9772879 ], [ 76.568124, 8.9778027 ], [ 76.5704575, 8.9780505 ], [ 76.5704532, 8.9770197 ], [ 76.571749, 8.9770142 ], [ 76.5714976, 8.9788192 ], [ 76.5707195, 8.9786931 ], [ 76.5696868, 8.9795999 ], [ 76.5694364, 8.9816624 ], [ 76.5702156, 8.9820453 ], [ 76.5709926, 8.9819136 ], [ 76.5707378, 8.9829452 ], [ 76.5694415, 8.9828214 ], [ 76.5689248, 8.9832108 ], [ 76.5689268, 8.983726 ], [ 76.5681504, 8.983987 ], [ 76.5682907, 8.9865634 ], [ 76.5679068, 8.9875958 ], [ 76.5682816, 8.9864486 ], [ 76.5672529, 8.9863102 ], [ 76.5664719, 8.9855404 ], [ 76.5663373, 8.9842523 ], [ 76.5653005, 8.9842568 ], [ 76.565557, 8.9836111 ], [ 76.5668529, 8.9836056 ], [ 76.5672396, 8.9832178 ], [ 76.5671083, 8.9827029 ], [ 76.5676265, 8.9827009 ], [ 76.5665789, 8.9801286 ], [ 76.5645042, 8.9798797 ], [ 76.564502, 8.9793643 ], [ 76.5611311, 8.9789915 ], [ 76.5595776, 8.979385 ], [ 76.5595755, 8.9788696 ], [ 76.5580181, 8.9783609 ], [ 76.5577556, 8.9775888 ], [ 76.5549047, 8.9776009 ], [ 76.5543765, 8.9752836 ], [ 76.5507426, 8.9740106 ], [ 76.5506059, 8.9724651 ], [ 76.550993, 8.9719482 ], [ 76.5502143, 8.9716936 ], [ 76.5502111, 8.9709206 ], [ 76.5496927, 8.9709229 ], [ 76.5494292, 8.9698932 ], [ 76.5491701, 8.9698941 ], [ 76.5489142, 8.9706683 ], [ 76.5481366, 8.9706717 ], [ 76.5478741, 8.9698996 ], [ 76.5465793, 8.9701627 ], [ 76.5459267, 8.9691347 ], [ 76.545791, 8.9675891 ], [ 76.5452725, 8.9675912 ], [ 76.5447488, 8.9663048 ], [ 76.5442304, 8.9663071 ], [ 76.5436959, 8.962444 ], [ 76.5429184, 8.9624473 ], [ 76.5429161, 8.9619319 ], [ 76.5391176, 8.9621167 ], [ 76.5390265, 8.9614327 ], [ 76.5385086, 8.9615631 ], [ 76.5338409, 8.9609387 ], [ 76.5340947, 8.9596493 ], [ 76.5346129, 8.959647 ], [ 76.5344808, 8.9591322 ], [ 76.5348673, 8.958486 ], [ 76.5364234, 8.9587372 ], [ 76.5369407, 8.9584773 ], [ 76.5372009, 8.958734 ], [ 76.5379773, 8.958473 ], [ 76.5384967, 8.9587285 ], [ 76.5408259, 8.9579458 ], [ 76.5423744, 8.9563932 ], [ 76.5444451, 8.9557408 ], [ 76.5439159, 8.953166 ], [ 76.5457301, 8.9531585 ], [ 76.5457278, 8.9526432 ], [ 76.5462457, 8.9525116 ], [ 76.5470172, 8.9510917 ], [ 76.5470236, 8.9526377 ], [ 76.547542, 8.9526356 ], [ 76.5477968, 8.9516037 ], [ 76.5484453, 8.9518586 ], [ 76.5487099, 8.953146 ], [ 76.5487311, 8.9535984 ], [ 76.5491062, 8.9535263 ], [ 76.5493595, 8.953401 ], [ 76.550697, 8.9526504 ], [ 76.5504901, 8.9517893 ], [ 76.5503907, 8.9514822 ], [ 76.5497501, 8.9515349 ], [ 76.5496099, 8.9513385 ], [ 76.551683, 8.9513298 ], [ 76.5517395, 8.9515929 ], [ 76.5522849, 8.9515132 ], [ 76.5523294, 8.9510694 ], [ 76.552711, 8.9492639 ], [ 76.5527089, 8.9487486 ], [ 76.5529626, 8.9474591 ], [ 76.5536089, 8.9471986 ], [ 76.5525636, 8.9451413 ], [ 76.5512287, 8.9455738 ], [ 76.5517828, 8.9443715 ], [ 76.5502965, 8.9418837 ], [ 76.5500937, 8.9415764 ], [ 76.5498298, 8.9412346 ], [ 76.5495662, 8.9410309 ], [ 76.5494596, 8.940742 ], [ 76.5491729, 8.9398331 ], [ 76.5490404, 8.9392292 ], [ 76.5481616, 8.9383218 ], [ 76.5464559, 8.9368527 ], [ 76.5463365, 8.9369547 ], [ 76.5456351, 8.9368037 ], [ 76.5456711, 8.9365106 ], [ 76.5446239, 8.9366707 ], [ 76.5437989, 8.9365745 ], [ 76.5416392, 8.9359228 ], [ 76.5411516, 8.9362547 ], [ 76.5406984, 8.9362903 ], [ 76.5405114, 8.936141 ], [ 76.5403675, 8.9357857 ], [ 76.5400385, 8.9357704 ], [ 76.5402688, 8.9366874 ], [ 76.5410509, 8.9375339 ], [ 76.5410081, 8.9379155 ], [ 76.540229, 8.9387895 ], [ 76.5401286, 8.9387104 ], [ 76.5370921, 8.9358014 ], [ 76.5375764, 8.9353238 ], [ 76.5378353, 8.9354659 ], [ 76.5378911, 8.935437 ], [ 76.537749, 8.9351461 ], [ 76.5374613, 8.9350538 ], [ 76.5373565, 8.9351136 ], [ 76.5374797, 8.9352479 ], [ 76.53636, 8.9362632 ], [ 76.5361592, 8.9360913 ], [ 76.5359425, 8.9357323 ], [ 76.5356438, 8.9356224 ], [ 76.5355118, 8.9357928 ], [ 76.5356327, 8.9360686 ], [ 76.5361762, 8.9364581 ], [ 76.5363481, 8.9365813 ], [ 76.5371998, 8.9373856 ], [ 76.5340576, 8.9506881 ], [ 76.5289336, 8.9648823 ], [ 76.5282957, 8.9672042 ], [ 76.5288151, 8.9674599 ], [ 76.529071, 8.9666858 ], [ 76.5298497, 8.9669402 ], [ 76.5295938, 8.9677143 ], [ 76.5282978, 8.9677196 ], [ 76.5268913, 8.972364 ], [ 76.5267741, 8.9751992 ], [ 76.5255605, 8.9788363 ], [ 76.5233805, 8.9885563 ], [ 76.5232126, 8.9895236 ], [ 76.5235045, 8.9905586 ], [ 76.5230005, 8.9915518 ], [ 76.522311, 8.9927408 ], [ 76.5216881, 8.9986703 ], [ 76.5213065, 9.0004756 ], [ 76.5211795, 9.0009916 ], [ 76.5213162, 9.0027951 ], [ 76.519009, 9.008989 ], [ 76.5188918, 9.0118244 ], [ 76.5187735, 9.0146594 ], [ 76.5177454, 9.0167251 ], [ 76.5178818, 9.0182707 ], [ 76.515435, 9.0221465 ], [ 76.5123511, 9.0286014 ], [ 76.5109366, 9.0311843 ], [ 76.5099347, 9.0330667 ], [ 76.500673, 9.0537349 ], [ 76.4974979, 9.0615967 ], [ 76.4955587, 9.0660991 ], [ 76.4942012, 9.0689835 ], [ 76.4932178, 9.0710125 ], [ 76.4922547, 9.073094 ], [ 76.4897133, 9.0794464 ], [ 76.4874893, 9.0843146 ], [ 76.4855666, 9.0883775 ], [ 76.4823304, 9.0951999 ], [ 76.478223456451374, 9.103454485937499 ], [ 76.478123949496577, 9.103654485937499 ], [ 76.4743181, 9.1113039 ], [ 76.4698037, 9.1205807 ], [ 76.4658188, 9.1288432 ], [ 76.4655915, 9.1291485 ], [ 76.4650457, 9.1298817 ], [ 76.4645203, 9.1308913 ], [ 76.4635432, 9.1327688 ], [ 76.462742, 9.1343084 ], [ 76.4604519, 9.1347795 ], [ 76.4578842, 9.1357387 ], [ 76.458218, 9.1359742 ], [ 76.4595743, 9.1372128 ], [ 76.4596885, 9.1373546 ], [ 76.4616606, 9.1386736 ], [ 76.4614379, 9.139867 ], [ 76.4601687, 9.1422665 ], [ 76.4597824, 9.1430412 ], [ 76.4591409, 9.1445899 ], [ 76.4587546, 9.1453646 ], [ 76.4574675, 9.1476891 ], [ 76.451939, 9.1591786 ], [ 76.4515533, 9.1600826 ], [ 76.4483403, 9.1670535 ], [ 76.4455096, 9.1724766 ], [ 76.4447399, 9.1745413 ], [ 76.4420445, 9.18151 ], [ 76.4413895, 9.1828975 ], [ 76.4406321, 9.1848657 ], [ 76.4400525, 9.1857933 ], [ 76.4393304, 9.1869881 ], [ 76.4384427, 9.18874 ], [ 76.4367741, 9.19287 ], [ 76.4348757, 9.1977468 ], [ 76.4338221, 9.2006128 ], [ 76.4279066, 9.213006 ], [ 76.4261065, 9.2168788 ], [ 76.4223791, 9.2251402 ], [ 76.4177472, 9.2344357 ], [ 76.4151761, 9.2401154 ], [ 76.4126057, 9.2460528 ], [ 76.409003, 9.2532827 ], [ 76.4047603, 9.2628344 ], [ 76.4032162, 9.2659331 ], [ 76.3976881, 9.2783247 ], [ 76.3909074, 9.2935405 ], [ 76.3830483, 9.3092928 ], [ 76.3820069, 9.3112158 ], [ 76.3816758, 9.311583 ], [ 76.3799247, 9.314638 ], [ 76.3778922, 9.3173461 ], [ 76.3776313, 9.3174164 ], [ 76.3773228, 9.3175725 ], [ 76.3771646, 9.3178456 ], [ 76.3764608, 9.3193596 ], [ 76.376532, 9.3194845 ], [ 76.3766743, 9.3194221 ], [ 76.3773465, 9.3180329 ], [ 76.3775126, 9.3177363 ], [ 76.3778448, 9.3175725 ], [ 76.3781532, 9.3176661 ], [ 76.378604, 9.3178456 ], [ 76.3795135, 9.3182826 ], [ 76.3789836, 9.3194143 ], [ 76.3787306, 9.3192816 ], [ 76.3787306, 9.3191957 ], [ 76.3781146, 9.3189056 ], [ 76.3779871, 9.3191333 ], [ 76.3778052, 9.3190553 ], [ 76.3776945, 9.3191567 ], [ 76.3777499, 9.3192972 ], [ 76.3781611, 9.3195391 ], [ 76.378343, 9.3199449 ], [ 76.3782573, 9.3212043 ], [ 76.3767252, 9.3245357 ], [ 76.3737656, 9.3306028 ], [ 76.3706817, 9.3382176 ], [ 76.3700367, 9.3392509 ], [ 76.3620563, 9.3555172 ], [ 76.360255, 9.3593899 ], [ 76.3580709, 9.3648102 ], [ 76.3561402, 9.3689408 ], [ 76.3529238, 9.3759113 ], [ 76.352409, 9.3769442 ], [ 76.3500964, 9.3828803 ], [ 76.3486825, 9.3864936 ], [ 76.348477625, 9.386968233825453 ], [ 76.34827762499999, 9.387431573740505 ], [ 76.3470112, 9.3903655 ], [ 76.3457286, 9.3942362 ], [ 76.3439327, 9.3996549 ], [ 76.3414927, 9.4063648 ], [ 76.3398322, 9.4130716 ], [ 76.3393191, 9.4146197 ], [ 76.3363646, 9.4226201 ], [ 76.3355999, 9.4262308 ], [ 76.3309324, 9.4378534 ], [ 76.3246088, 9.4595927 ], [ 76.3185419, 9.48717 ], [ 76.3182838, 9.4883431 ], [ 76.3126252, 9.5141241 ], [ 76.3089493, 9.5357879 ], [ 76.3085486, 9.5378769 ], [ 76.3077088, 9.5417228 ], [ 76.3022155, 9.5725696 ], [ 76.3010778, 9.5790692 ], [ 76.299293, 9.5946285 ], [ 76.2979844, 9.6020468 ], [ 76.2969735, 9.6094589 ], [ 76.2946244, 9.623157 ], [ 76.2951103, 9.6303503 ], [ 76.2946251, 9.6339057 ], [ 76.2939274, 9.6430616 ], [ 76.2918294, 9.6634279 ], [ 76.2868712, 9.7146229 ], [ 76.286142, 9.722991 ], [ 76.2836013, 9.7450594 ], [ 76.2834734, 9.7467717 ], [ 76.2831301, 9.749109 ], [ 76.2836128, 9.7505047 ], [ 76.274342, 9.8029274 ], [ 76.2701882, 9.8254577 ], [ 76.2668596, 9.8458373 ], [ 76.2640709, 9.8600856 ], [ 76.2622188, 9.8687985 ], [ 76.2605963, 9.8818072 ], [ 76.2600089, 9.882198 ], [ 76.256691, 9.8960125 ], [ 76.2562189, 9.8986759 ], [ 76.2553177, 9.9022694 ], [ 76.2544299, 9.9053659 ], [ 76.2531719, 9.9103018 ], [ 76.2519749, 9.9145148 ], [ 76.2516827, 9.916019 ], [ 76.2514885, 9.9173583 ], [ 76.2511046, 9.9186316 ], [ 76.2509253, 9.919324 ], [ 76.2503176, 9.9207893 ], [ 76.2501845, 9.9210531 ], [ 76.2501193, 9.9213355 ], [ 76.2494257, 9.9233006 ], [ 76.2482714, 9.9262613 ], [ 76.248213, 9.9263614 ], [ 76.2482082, 9.926462 ], [ 76.2482057, 9.9265073 ], [ 76.2482603, 9.9265635 ], [ 76.248332, 9.9266245 ], [ 76.2483264, 9.9266716 ], [ 76.2481589, 9.9271381 ], [ 76.2478127, 9.9280333 ], [ 76.2476116, 9.9281176 ], [ 76.2472394, 9.9291679 ], [ 76.2471569, 9.9293138 ], [ 76.2470174, 9.9299483 ], [ 76.24699, 9.9301585 ], [ 76.2468822, 9.9302952 ], [ 76.2467853, 9.9304232 ], [ 76.2467628, 9.9305284 ], [ 76.2466955, 9.9305117 ], [ 76.2466661, 9.9305656 ], [ 76.2467053, 9.93074 ], [ 76.2466768, 9.9308861 ], [ 76.2462367, 9.9322003 ], [ 76.2457669, 9.9334989 ], [ 76.2448737, 9.9360913 ], [ 76.2446606, 9.9365924 ], [ 76.244455, 9.9373094 ], [ 76.2442234, 9.9378495 ], [ 76.2441879, 9.9381172 ], [ 76.2441241, 9.9384618 ], [ 76.2440201, 9.9386015 ], [ 76.2439256, 9.9390135 ], [ 76.2437322, 9.9394835 ], [ 76.243675, 9.9396257 ], [ 76.243668, 9.9398459 ], [ 76.2438847, 9.9400341 ], [ 76.2437686, 9.9402659 ], [ 76.2436146, 9.9405055 ], [ 76.2434679, 9.9408919 ], [ 76.2433087, 9.9408502 ], [ 76.2432401, 9.9408701 ], [ 76.2428597, 9.9418047 ], [ 76.2424812, 9.9427554 ], [ 76.2420986, 9.9437392 ], [ 76.2417129, 9.9447606 ], [ 76.2414983, 9.944966 ], [ 76.2412057, 9.9457075 ], [ 76.2408555, 9.9466049 ], [ 76.2406239, 9.9475034 ], [ 76.2401666, 9.9489664 ], [ 76.2399621, 9.9495101 ], [ 76.2397825, 9.9500269 ], [ 76.2394209, 9.9508533 ], [ 76.2391444, 9.9515842 ], [ 76.2392102, 9.9517844 ], [ 76.2392958, 9.9519436 ], [ 76.2391821, 9.9522318 ], [ 76.2389789, 9.952683 ], [ 76.2387383, 9.9532247 ], [ 76.2384634, 9.9539985 ], [ 76.238322, 9.9544402 ], [ 76.2380584, 9.9551511 ], [ 76.2379403, 9.9554402 ], [ 76.2379316, 9.9557024 ], [ 76.2378417, 9.956199 ], [ 76.2377296, 9.9567124 ], [ 76.2376094, 9.9574319 ], [ 76.2375687, 9.957729 ], [ 76.2375172, 9.9580097 ], [ 76.2375041, 9.9581068 ], [ 76.237361, 9.958779 ], [ 76.2372683, 9.9591595 ], [ 76.2372782, 9.9593293 ], [ 76.2372668, 9.9597017 ], [ 76.2372092, 9.960261 ], [ 76.2371672, 9.9605333 ], [ 76.2371732, 9.9606762 ], [ 76.2371718, 9.9608319 ], [ 76.2368473, 9.961644 ], [ 76.2368583, 9.961812 ], [ 76.2369576, 9.9619447 ], [ 76.2370687, 9.9620704 ], [ 76.2369789, 9.9626081 ], [ 76.2370697, 9.9628596 ], [ 76.2371262, 9.9632771 ], [ 76.2371649, 9.9633181 ], [ 76.2372168, 9.9632904 ], [ 76.237282, 9.963287 ], [ 76.2373782, 9.9634003 ], [ 76.2374617, 9.9635225 ], [ 76.2376666, 9.9640225 ], [ 76.2376312, 9.9641864 ], [ 76.2375756, 9.9642085 ], [ 76.2374281, 9.9642756 ], [ 76.2374037, 9.9643624 ], [ 76.2378189, 9.9651395 ], [ 76.2380778, 9.9655877 ], [ 76.2379319, 9.9657072 ], [ 76.2379176, 9.9657353 ], [ 76.2379241, 9.9657749 ], [ 76.2379592, 9.9657967 ], [ 76.2379943, 9.9657941 ], [ 76.2381968, 9.9656765 ], [ 76.2382773, 9.9656547 ], [ 76.2383132, 9.9656603 ], [ 76.2384166, 9.9657546 ], [ 76.2385083, 9.9658953 ], [ 76.2385921, 9.9660293 ], [ 76.2386423, 9.9661598 ], [ 76.2387027, 9.9663114 ], [ 76.2388168, 9.9664997 ], [ 76.2388286, 9.9665336 ], [ 76.2388106, 9.9665965 ], [ 76.2388213, 9.9666214 ], [ 76.2388476, 9.9666273 ], [ 76.2389247, 9.9665738 ], [ 76.2390297, 9.9664946 ], [ 76.2392427, 9.9664269 ], [ 76.2392898, 9.9664334 ], [ 76.2395754, 9.9666487 ], [ 76.2401568, 9.9671882 ], [ 76.24054, 9.967556 ], [ 76.2406207, 9.9679301 ], [ 76.2406929, 9.9679359 ], [ 76.2407911, 9.9677729 ], [ 76.2410383, 9.9678743 ], [ 76.2412344, 9.967934 ], [ 76.2414125, 9.9679634 ], [ 76.241679, 9.9680615 ], [ 76.2418915, 9.9682043 ], [ 76.2421533, 9.968212 ], [ 76.2423843, 9.9682548 ], [ 76.2425267, 9.9682969 ], [ 76.2427949, 9.9683603 ], [ 76.2430309, 9.9684237 ], [ 76.2432348, 9.9684871 ], [ 76.2435476, 9.9686587 ], [ 76.2436496, 9.9686859 ], [ 76.2437489, 9.9687002 ], [ 76.243939, 9.9687741 ], [ 76.2440287, 9.9688569 ], [ 76.2442235, 9.9689153 ], [ 76.2442933, 9.9689291 ], [ 76.2444257, 9.9689098 ], [ 76.244533, 9.9689415 ], [ 76.2446681, 9.9689635 ], [ 76.2446814, 9.9688153 ], [ 76.244842, 9.9688335 ], [ 76.2448659, 9.9685844 ], [ 76.245097, 9.9686084 ], [ 76.245214, 9.9688385 ], [ 76.245357, 9.968844 ], [ 76.2455608, 9.968918 ], [ 76.2456156, 9.9690367 ], [ 76.2457725, 9.9691059 ], [ 76.2458256, 9.9690605 ], [ 76.2463746, 9.969146 ], [ 76.2470758, 9.9691686 ], [ 76.247607, 9.9692653 ], [ 76.2476283, 9.9691704 ], [ 76.2477381, 9.969132 ], [ 76.248037, 9.9691375 ], [ 76.2487636, 9.9692476 ], [ 76.2495318, 9.9692925 ], [ 76.2496533, 9.9693062 ], [ 76.2496381, 9.9694296 ], [ 76.2502304, 9.9694271 ], [ 76.2507189, 9.9694209 ], [ 76.2510999, 9.969381 ], [ 76.2513378, 9.9693005 ], [ 76.2517314, 9.9691404 ], [ 76.2517617, 9.9691853 ], [ 76.2518627, 9.9691296 ], [ 76.2519339, 9.9690818 ], [ 76.2519035, 9.9690357 ], [ 76.2519495, 9.9689881 ], [ 76.2526466, 9.9680365 ], [ 76.2528632, 9.9681799 ], [ 76.2529752, 9.9680284 ], [ 76.2528471, 9.9679337 ], [ 76.252934, 9.9678126 ], [ 76.2528072, 9.9677054 ], [ 76.2529748, 9.9675259 ], [ 76.2541054, 9.9663186 ], [ 76.2551888, 9.9654605 ], [ 76.2560221, 9.9647729 ], [ 76.2575706, 9.9637788 ], [ 76.2584938, 9.9631382 ], [ 76.2591244, 9.962482 ], [ 76.2597917, 9.9611113 ], [ 76.2606158, 9.9580522 ], [ 76.2611774, 9.9554128 ], [ 76.2614706, 9.9486881 ], [ 76.2616796, 9.9451145 ], [ 76.2616701, 9.9432809 ], [ 76.2624149, 9.9407682 ], [ 76.2622463, 9.9406845 ], [ 76.2623321, 9.9404203 ], [ 76.262375, 9.9403146 ], [ 76.2625359, 9.9402406 ], [ 76.262772, 9.9396066 ], [ 76.2636895, 9.937436 ], [ 76.264153, 9.9377701 ], [ 76.2643129, 9.9372492 ], [ 76.263997, 9.9368632 ], [ 76.2645099, 9.935844 ], [ 76.2651862, 9.93475 ], [ 76.2657061, 9.9347479 ], [ 76.2663855, 9.9334749 ], [ 76.2665661, 9.9335898 ], [ 76.266879, 9.9331684 ], [ 76.266973, 9.9329 ], [ 76.2687459, 9.9318262 ], [ 76.2687351, 9.9315515 ], [ 76.2692772, 9.9312446 ], [ 76.2694833, 9.9310934 ], [ 76.2704555, 9.93038 ], [ 76.2705554, 9.9298861 ], [ 76.2710683, 9.9294584 ], [ 76.2730319, 9.928772 ], [ 76.2745034, 9.9279823 ], [ 76.274834, 9.9276482 ], [ 76.2770419, 9.9270373 ], [ 76.2783792, 9.9259699 ], [ 76.2804056, 9.9248862 ], [ 76.2807074, 9.9243147 ], [ 76.2811514, 9.9238263 ], [ 76.2814912, 9.923947 ], [ 76.283855, 9.9228243 ], [ 76.2854203, 9.9223829 ], [ 76.2862722, 9.9223589 ], [ 76.2863138, 9.9217442 ], [ 76.2882026, 9.921594 ], [ 76.2897352, 9.9217371 ], [ 76.2898265, 9.9211258 ], [ 76.291643, 9.9210754 ], [ 76.2932734, 9.9202948 ], [ 76.2941679, 9.9196199 ], [ 76.2950123, 9.917885 ], [ 76.2952422, 9.9173859 ], [ 76.2954125, 9.9168636 ], [ 76.295526, 9.9163368 ], [ 76.2960406, 9.9116175 ], [ 76.2961702, 9.9085392 ], [ 76.2960798, 9.9050516 ], [ 76.2960881, 9.9036265 ], [ 76.2960726, 9.9013336 ], [ 76.2964523, 9.8973988 ], [ 76.2966851, 9.8954872 ], [ 76.2969354, 9.8939195 ], [ 76.2966867, 9.8933536 ], [ 76.295719, 9.8932596 ], [ 76.2946651, 9.8955941 ], [ 76.2932309, 9.8966 ], [ 76.2922758, 9.8968064 ], [ 76.2916832, 9.897539 ], [ 76.2916853, 9.8980544 ], [ 76.2907772, 9.8983156 ], [ 76.2907821, 9.899604 ], [ 76.291302, 9.8996021 ], [ 76.2907881, 9.9011504 ], [ 76.2902684, 9.9011523 ], [ 76.2902705, 9.9016677 ], [ 76.2907902, 9.9016658 ], [ 76.290145, 9.9029566 ], [ 76.2890062, 9.908949 ], [ 76.2880192, 9.9096254 ], [ 76.2867317, 9.9097945 ], [ 76.2861008, 9.9093731 ], [ 76.2856589, 9.9090758 ], [ 76.2857447, 9.9078921 ], [ 76.2857024, 9.9061904 ], [ 76.2851824, 9.9061925 ], [ 76.285307, 9.9049033 ], [ 76.2853051, 9.9043879 ], [ 76.2862072, 9.9023229 ], [ 76.2841216, 9.9024217 ], [ 76.2826032, 9.9024347 ], [ 76.2825547, 9.9017336 ], [ 76.2819969, 9.9017232 ], [ 76.2817325, 9.9021761 ], [ 76.2807472, 9.9013093 ], [ 76.2750254, 9.9003002 ], [ 76.2739827, 9.8995312 ], [ 76.2725554, 9.9001811 ], [ 76.2723464, 9.9010988 ], [ 76.2716169, 9.9031703 ], [ 76.2712993, 9.9034409 ], [ 76.2708842, 9.9048264 ], [ 76.2703895, 9.9060873 ], [ 76.2701578, 9.9062733 ], [ 76.2684468, 9.9088524 ], [ 76.2682695, 9.9092833 ], [ 76.2673854, 9.9108898 ], [ 76.2673597, 9.9115408 ], [ 76.2656174, 9.9173193 ], [ 76.2636004, 9.9219694 ], [ 76.2624673, 9.9215513 ], [ 76.2626602, 9.9209586 ], [ 76.2632398, 9.9210102 ], [ 76.2634115, 9.9204776 ], [ 76.262536, 9.9202831 ], [ 76.2636089, 9.9165292 ], [ 76.2655316, 9.9119505 ], [ 76.266819, 9.9092872 ], [ 76.2682781, 9.9056515 ], [ 76.2691794, 9.9033686 ], [ 76.2700377, 9.9034954 ], [ 76.2702952, 9.9022271 ], [ 76.2697373, 9.9004938 ], [ 76.2694488, 9.9004017 ], [ 76.2668164, 9.8988476 ], [ 76.2666876, 9.8975582 ], [ 76.26584, 9.8968183 ], [ 76.2653143, 9.8981395 ], [ 76.2648744, 9.8995134 ], [ 76.2646706, 9.8995452 ], [ 76.2645249, 9.8996671 ], [ 76.264103, 9.8995487 ], [ 76.2638063, 9.9006337 ], [ 76.2641878, 9.9009086 ], [ 76.2641305, 9.9010619 ], [ 76.2642097, 9.9011664 ], [ 76.2641878, 9.9016484 ], [ 76.2638445, 9.9015955 ], [ 76.2633858, 9.9031149 ], [ 76.2631563, 9.903804 ], [ 76.2632866, 9.9039736 ], [ 76.2628664, 9.9051604 ], [ 76.2629647, 9.9052207 ], [ 76.2601323, 9.9128831 ], [ 76.2579114, 9.9124075 ], [ 76.2580402, 9.9111709 ], [ 76.2576861, 9.9110864 ], [ 76.2577076, 9.9101669 ], [ 76.2572248, 9.9100824 ], [ 76.2571497, 9.9090783 ], [ 76.2569458, 9.9089938 ], [ 76.2561197, 9.9089832 ], [ 76.256109, 9.9087613 ], [ 76.2566991, 9.9086873 ], [ 76.2580187, 9.9090466 ], [ 76.2582118, 9.9085605 ], [ 76.2579973, 9.9084019 ], [ 76.2581689, 9.9082645 ], [ 76.2586195, 9.9083385 ], [ 76.2587408, 9.907659 ], [ 76.2590594, 9.9076833 ], [ 76.2592096, 9.9068272 ], [ 76.2588949, 9.9067949 ], [ 76.2590084, 9.9061588 ], [ 76.2574635, 9.9056937 ], [ 76.257257, 9.9055906 ], [ 76.2572355, 9.9054215 ], [ 76.2573428, 9.9053053 ], [ 76.2575527, 9.9053569 ], [ 76.2577025, 9.9047916 ], [ 76.257493, 9.9047345 ], [ 76.2575252, 9.904502 ], [ 76.2576754, 9.9044703 ], [ 76.2581797, 9.9029907 ], [ 76.2578471, 9.9028533 ], [ 76.2579651, 9.9023671 ], [ 76.2583406, 9.9007183 ], [ 76.2580509, 9.9005915 ], [ 76.2584076, 9.8991832 ], [ 76.2587432, 9.8978026 ], [ 76.2590058, 9.897759 ], [ 76.2592203, 9.8963427 ], [ 76.2590272, 9.8962687 ], [ 76.2592078, 9.8956235 ], [ 76.259392, 9.895624 ], [ 76.259671, 9.8950215 ], [ 76.2600465, 9.8950955 ], [ 76.2610254, 9.8908124 ], [ 76.2620554, 9.8869229 ], [ 76.2626562, 9.88557 ], [ 76.2628708, 9.8842171 ], [ 76.2637545, 9.8815971 ], [ 76.2643308, 9.8817863 ], [ 76.2653461, 9.8785151 ], [ 76.2655382, 9.8785692 ], [ 76.2658949, 9.8774337 ], [ 76.266334, 9.8738921 ], [ 76.2669652, 9.8714319 ], [ 76.2676786, 9.871513 ], [ 76.2680628, 9.8700801 ], [ 76.2683098, 9.8701612 ], [ 76.268694, 9.8689446 ], [ 76.2686117, 9.868458 ], [ 76.26938, 9.8655111 ], [ 76.2751977, 9.8680254 ], [ 76.2735237, 9.8743247 ], [ 76.2757191, 9.8743247 ], [ 76.27764, 9.8691069 ], [ 76.2793414, 9.8698368 ], [ 76.2793139, 9.870702 ], [ 76.2811525, 9.8716752 ], [ 76.2809055, 9.8732703 ], [ 76.2811525, 9.8738381 ], [ 76.2814544, 9.8738381 ], [ 76.2818111, 9.8734866 ], [ 76.2821953, 9.8735677 ], [ 76.2818934, 9.8757846 ], [ 76.2812348, 9.8781637 ], [ 76.2804116, 9.8796235 ], [ 76.2796432, 9.8825162 ], [ 76.2792987, 9.883782 ], [ 76.2788696, 9.8845684 ], [ 76.2786121, 9.8860481 ], [ 76.2795991, 9.8879253 ], [ 76.2810583, 9.8895318 ], [ 76.2811469, 9.8893217 ], [ 76.2814168, 9.8918977 ], [ 76.2821827, 9.8946596 ], [ 76.2817416, 9.895859 ], [ 76.2824781, 9.8966398 ], [ 76.2821989, 9.8975149 ], [ 76.2821054, 9.8983846 ], [ 76.2834358, 9.8999066 ], [ 76.285067, 9.9006503 ], [ 76.2862253, 9.9000757 ], [ 76.2870149, 9.8991963 ], [ 76.2877402, 9.8969915 ], [ 76.2886285, 9.8904619 ], [ 76.2889228, 9.8896833 ], [ 76.2896935, 9.8873611 ], [ 76.2896905, 9.8865879 ], [ 76.290019, 9.8843654 ], [ 76.2905425, 9.8801968 ], [ 76.2910035, 9.8791839 ], [ 76.2917687, 9.8761599 ], [ 76.2930067, 9.8705972 ], [ 76.2929638, 9.8687802 ], [ 76.2943125, 9.8671069 ], [ 76.2942735, 9.8667394 ], [ 76.2944825, 9.8658843 ], [ 76.2944664, 9.8647758 ], [ 76.2948578, 9.8644406 ], [ 76.2943539, 9.862733 ], [ 76.2943861, 9.8618304 ], [ 76.2944503, 9.8600885 ], [ 76.2945629, 9.8585366 ], [ 76.2949325, 9.857143 ], [ 76.2953504, 9.8567471 ], [ 76.2964595, 9.855116 ], [ 76.2968131, 9.8543242 ], [ 76.2968112, 9.8538132 ], [ 76.2967947, 9.8526375 ], [ 76.2966054, 9.852297 ], [ 76.2963092, 9.8519078 ], [ 76.2958483, 9.8512753 ], [ 76.295264, 9.8510645 ], [ 76.2944905, 9.8510402 ], [ 76.2942341, 9.8510242 ], [ 76.2938403, 9.8509997 ], [ 76.2935441, 9.8511294 ], [ 76.2931984, 9.851097 ], [ 76.2927129, 9.851178 ], [ 76.292392, 9.8514375 ], [ 76.2918817, 9.8518348 ], [ 76.2910588, 9.8521429 ], [ 76.2904827, 9.8522483 ], [ 76.2902194, 9.8521105 ], [ 76.2898244, 9.8521105 ], [ 76.2894705, 9.8521997 ], [ 76.2892648, 9.8522159 ], [ 76.2891166, 9.8514051 ], [ 76.2869029, 9.8511861 ], [ 76.2868618, 9.8510888 ], [ 76.2866478, 9.8510807 ], [ 76.2866067, 9.851178 ], [ 76.2862116, 9.8511618 ], [ 76.2844341, 9.8508051 ], [ 76.2841378, 9.8508537 ], [ 76.2836687, 9.8511213 ], [ 76.2834548, 9.8514132 ], [ 76.282673, 9.851324 ], [ 76.2829446, 9.8503753 ], [ 76.2830515, 9.8503591 ], [ 76.2831338, 9.8501159 ], [ 76.2832902, 9.8503024 ], [ 76.2852077, 9.8504645 ], [ 76.2851994, 9.8479591 ], [ 76.2838498, 9.8478213 ], [ 76.283677, 9.8482267 ], [ 76.2835865, 9.8482023 ], [ 76.2839074, 9.8472131 ], [ 76.2848044, 9.8474969 ], [ 76.2852488, 9.8475375 ], [ 76.2853064, 9.8454537 ], [ 76.2851254, 9.8454212 ], [ 76.284862, 9.8447888 ], [ 76.2849361, 9.8445212 ], [ 76.2851747, 9.8441563 ], [ 76.2852077, 9.8439617 ], [ 76.284681, 9.8434752 ], [ 76.2841625, 9.8432482 ], [ 76.2838251, 9.8432239 ], [ 76.2837099, 9.8425185 ], [ 76.2834301, 9.8420157 ], [ 76.2833313, 9.8414319 ], [ 76.282854, 9.8399806 ], [ 76.2826855, 9.8392181 ], [ 76.2828462, 9.8387113 ], [ 76.2834891, 9.8379195 ], [ 76.2835373, 9.836605 ], [ 76.2840999, 9.8351797 ], [ 76.2842124, 9.8342137 ], [ 76.2855625, 9.834277 ], [ 76.2856429, 9.8327408 ], [ 76.2860287, 9.8327567 ], [ 76.2859804, 9.8339128 ], [ 76.2872663, 9.8337386 ], [ 76.2885521, 9.8340711 ], [ 76.2886164, 9.8340395 ], [ 76.2888897, 9.8339286 ], [ 76.2889058, 9.8336435 ], [ 76.288745, 9.8336277 ], [ 76.288745, 9.8330734 ], [ 76.2881985, 9.8329784 ], [ 76.2882628, 9.8322499 ], [ 76.2880378, 9.8321707 ], [ 76.2877485, 9.8312997 ], [ 76.2881182, 9.8299693 ], [ 76.2948367, 9.8316006 ], [ 76.2945635, 9.8322499 ], [ 76.2938884, 9.8321232 ], [ 76.2935991, 9.8327092 ], [ 76.293133, 9.8325825 ], [ 76.2926829, 9.8325666 ], [ 76.2918954, 9.8323766 ], [ 76.2914132, 9.8324716 ], [ 76.2908144, 9.8324914 ], [ 76.290714, 9.8343918 ], [ 76.2898501, 9.8344908 ], [ 76.290051, 9.8370643 ], [ 76.2935469, 9.8371237 ], [ 76.2939085, 9.8381729 ], [ 76.2940693, 9.8391429 ], [ 76.2936071, 9.839519 ], [ 76.293567, 9.8413006 ], [ 76.2930044, 9.8435771 ], [ 76.2890464, 9.8432208 ], [ 76.2881423, 9.8449628 ], [ 76.2881222, 9.8462891 ], [ 76.2883834, 9.8462891 ], [ 76.2883633, 9.8468038 ], [ 76.2894482, 9.8471601 ], [ 76.2897496, 9.846685 ], [ 76.2908948, 9.8480509 ], [ 76.2905332, 9.8492188 ], [ 76.2914976, 9.8498523 ], [ 76.2927231, 9.850169 ], [ 76.2941094, 9.8501096 ], [ 76.2953149, 9.8502878 ], [ 76.2961989, 9.8506639 ], [ 76.2974245, 9.8502086 ], [ 76.2982056, 9.850127 ], [ 76.2996873, 9.8517601 ], [ 76.3005412, 9.8521065 ], [ 76.3021234, 9.8522549 ], [ 76.3017969, 9.8529972 ], [ 76.3021736, 9.8531705 ], [ 76.3022741, 9.8534968 ], [ 76.3015285, 9.8546566 ], [ 76.299174, 9.8553139 ], [ 76.2974474, 9.857015 ], [ 76.2963606, 9.8601186 ], [ 76.2965057, 9.8640127 ], [ 76.2956113, 9.8682388 ], [ 76.2952142, 9.8716008 ], [ 76.2957369, 9.8723719 ], [ 76.295743, 9.8739183 ], [ 76.2958743, 9.8741753 ], [ 76.2961046, 9.8793161 ], [ 76.2954724, 9.8819616 ], [ 76.2948116, 9.8835066 ], [ 76.2947506, 9.8853594 ], [ 76.2956184, 9.8864493 ], [ 76.2961338, 9.8880031 ], [ 76.2963834, 9.8892313 ], [ 76.296767, 9.8892525 ], [ 76.2966372, 9.8900856 ], [ 76.2968198, 9.8901708 ], [ 76.2969111, 9.8898111 ], [ 76.2969976, 9.8893046 ], [ 76.2972138, 9.8891626 ], [ 76.2977234, 9.8890181 ], [ 76.3003308, 9.8864173 ], [ 76.3028084, 9.8841536 ], [ 76.3060521, 9.8823086 ], [ 76.3092363, 9.8800816 ], [ 76.3126118, 9.8785007 ], [ 76.3190022, 9.8760137 ], [ 76.3175705, 9.8727587 ], [ 76.3174173, 9.8702188 ], [ 76.3169486, 9.8684177 ], [ 76.317183, 9.866201 ], [ 76.3173236, 9.8637996 ], [ 76.3169017, 9.8597355 ], [ 76.316808, 9.8571493 ], [ 76.3170892, 9.8553943 ], [ 76.3173236, 9.8533622 ], [ 76.317933, 9.8505912 ], [ 76.318683, 9.8492057 ], [ 76.3181205, 9.8484668 ], [ 76.3176986, 9.8468965 ], [ 76.3171361, 9.8456957 ], [ 76.3170892, 9.8434326 ], [ 76.3176517, 9.8420933 ], [ 76.3178861, 9.8404768 ], [ 76.318683, 9.8395993 ], [ 76.3191048, 9.8395993 ], [ 76.3196205, 9.8389989 ], [ 76.3204108, 9.8369655 ], [ 76.3208311, 9.836537 ], [ 76.3213347, 9.8352114 ], [ 76.3216053, 9.8349324 ], [ 76.3212611, 9.8336875 ], [ 76.3206041, 9.8322361 ], [ 76.3204173, 9.8305006 ], [ 76.3203772, 9.8291846 ], [ 76.3208905, 9.8278065 ], [ 76.320805, 9.8252751 ], [ 76.3213548, 9.8227412 ], [ 76.322058, 9.8204779 ], [ 76.322058, 9.81803 ], [ 76.3214854, 9.8171683 ], [ 76.3218236, 9.8151201 ], [ 76.3222819, 9.8135668 ], [ 76.3221149, 9.8121049 ], [ 76.321544, 9.8107191 ], [ 76.321809, 9.8090276 ], [ 76.3219437, 9.8075989 ], [ 76.3223861, 9.8063903 ], [ 76.3228467, 9.8056139 ], [ 76.3260073, 9.8061333 ], [ 76.325957, 9.8048904 ], [ 76.3259296, 9.8033885 ], [ 76.3262767, 9.8011246 ], [ 76.3256406, 9.7970832 ], [ 76.3256205, 9.795905 ], [ 76.325586, 9.7946116 ], [ 76.3250493, 9.7936832 ], [ 76.3237346, 9.7932534 ], [ 76.3240736, 9.7931335 ], [ 76.3251961, 9.7932491 ], [ 76.3259415, 9.7924406 ], [ 76.3266517, 9.7917477 ], [ 76.3268535, 9.789044 ], [ 76.3274387, 9.7878558 ], [ 76.3284904, 9.7862511 ], [ 76.3291436, 9.7858218 ], [ 76.3296546, 9.7853827 ], [ 76.3307627, 9.7853132 ], [ 76.3312455, 9.7847726 ], [ 76.3318438, 9.7843698 ], [ 76.3324363, 9.7837043 ], [ 76.3330596, 9.7821133 ], [ 76.3339173, 9.7802918 ], [ 76.3342923, 9.7794142 ], [ 76.3340111, 9.777936 ], [ 76.3335925, 9.776911 ], [ 76.3335936, 9.7751497 ], [ 76.3322576, 9.7743458 ], [ 76.3325246, 9.7740433 ], [ 76.3330586, 9.7735171 ], [ 76.3334017, 9.7726236 ], [ 76.3334964, 9.7720368 ], [ 76.3342796, 9.7711637 ], [ 76.3349573, 9.7692887 ], [ 76.3354337, 9.768303 ], [ 76.3354213, 9.7674262 ], [ 76.3356082, 9.7668605 ], [ 76.3377611, 9.7654171 ], [ 76.3389798, 9.7645856 ], [ 76.3398705, 9.7636617 ], [ 76.3402923, 9.7627378 ], [ 76.3401517, 9.7607051 ], [ 76.3401517, 9.7589497 ], [ 76.3404798, 9.756917 ], [ 76.3402923, 9.7539604 ], [ 76.339683, 9.7530364 ], [ 76.3395423, 9.7513271 ], [ 76.340058, 9.7511885 ], [ 76.3417923, 9.750588 ], [ 76.3419798, 9.7491096 ], [ 76.3417455, 9.7465225 ], [ 76.3410423, 9.7448594 ], [ 76.3407611, 9.7427342 ], [ 76.3413236, 9.7416255 ], [ 76.3412109, 9.7408138 ], [ 76.3417923, 9.7395927 ], [ 76.3421375, 9.7383404 ], [ 76.3422714, 9.7371863 ], [ 76.342032, 9.736642 ], [ 76.3418305, 9.7345437 ], [ 76.3415484, 9.7339574 ], [ 76.3414838, 9.7329555 ], [ 76.3416686, 9.7323128 ], [ 76.3416165, 9.7292323 ], [ 76.3418219, 9.7282827 ], [ 76.3422559, 9.7273527 ], [ 76.3437184, 9.7271555 ], [ 76.344429, 9.7258828 ], [ 76.3444202, 9.7244229 ], [ 76.344289, 9.7231911 ], [ 76.3449924, 9.7226557 ], [ 76.3446048, 9.7217824 ], [ 76.3444585, 9.720419 ], [ 76.3447399, 9.7191703 ], [ 76.3450661, 9.7166525 ], [ 76.3447731, 9.7147456 ], [ 76.3451928, 9.7133537 ], [ 76.345329, 9.7125234 ], [ 76.3465665, 9.7127821 ], [ 76.3473915, 9.711895 ], [ 76.347794, 9.7110451 ], [ 76.3480838, 9.7109152 ], [ 76.34827762499999, 9.710922109904709 ], [ 76.348477625, 9.710929239949552 ], [ 76.3485298, 9.7109311 ], [ 76.3487092, 9.7114614 ], [ 76.349367, 9.7119715 ], [ 76.3494509, 9.7126285 ], [ 76.3496486, 9.7133215 ], [ 76.350204, 9.7132257 ], [ 76.3521165, 9.7131887 ], [ 76.353204, 9.7127821 ], [ 76.3536915, 9.7118581 ], [ 76.354254, 9.7105274 ], [ 76.355004, 9.7082357 ], [ 76.355754, 9.7074965 ], [ 76.3569915, 9.7070159 ], [ 76.358679, 9.7067942 ], [ 76.3605724, 9.7062752 ], [ 76.3616887, 9.7058057 ], [ 76.3619415, 9.704946 ], [ 76.3619892, 9.7039475 ], [ 76.3616312, 9.703274 ], [ 76.3612004, 9.7029937 ], [ 76.360629, 9.7022107 ], [ 76.3604513, 9.7019063 ], [ 76.360629, 9.7011018 ], [ 76.3608194, 9.7002223 ], [ 76.361454, 9.6993645 ], [ 76.3622693, 9.6994756 ], [ 76.3625845, 9.6995989 ], [ 76.3629259, 9.6992074 ], [ 76.3626884, 9.6990128 ], [ 76.3634037, 9.6976258 ], [ 76.364654, 9.6968101 ], [ 76.3651692, 9.6956615 ], [ 76.3651614, 9.6949189 ], [ 76.365369, 9.6938117 ], [ 76.3654918, 9.6932163 ], [ 76.3659071, 9.692537 ], [ 76.3662329, 9.6919231 ], [ 76.3668699, 9.6916717 ], [ 76.3676147, 9.6910764 ], [ 76.3682668, 9.6909367 ], [ 76.3686255, 9.6905738 ], [ 76.3688709, 9.6901551 ], [ 76.3693938, 9.6897451 ], [ 76.3702083, 9.6885049 ], [ 76.3706832, 9.6880616 ], [ 76.3708671, 9.6875885 ], [ 76.3706549, 9.6874941 ], [ 76.3708665, 9.6861888 ], [ 76.3720951, 9.6849378 ], [ 76.3723368, 9.6847387 ], [ 76.3743771, 9.6842282 ], [ 76.3756119, 9.6842003 ], [ 76.3787222, 9.6835674 ], [ 76.3808484, 9.6829407 ], [ 76.3810595, 9.6830658 ], [ 76.3819662, 9.6828595 ], [ 76.3829855, 9.6820552 ], [ 76.3835977, 9.6807792 ], [ 76.3833826, 9.6796576 ], [ 76.3835311, 9.6793916 ], [ 76.3839778, 9.6790616 ], [ 76.3846452, 9.6786228 ], [ 76.3853515, 9.6784687 ], [ 76.3860711, 9.678413 ], [ 76.3872788, 9.6788098 ], [ 76.3877903, 9.6788233 ], [ 76.3890022, 9.6791133 ], [ 76.3893905, 9.6794728 ], [ 76.3901797, 9.6794319 ], [ 76.3918029, 9.6786638 ], [ 76.3938433, 9.6775563 ], [ 76.3940637, 9.6771387 ], [ 76.3938962, 9.6764846 ], [ 76.3976971, 9.6751138 ], [ 76.3978449, 9.6754462 ], [ 76.3980534, 9.6756526 ], [ 76.3981306, 9.6755861 ], [ 76.3981624, 9.6753089 ], [ 76.3980296, 9.6747925 ], [ 76.3979021, 9.6744369 ], [ 76.3979655, 9.674265 ], [ 76.3990236, 9.6738275 ], [ 76.400228, 9.6734096 ], [ 76.4010242, 9.6731776 ], [ 76.4013078, 9.6732732 ], [ 76.4016278, 9.6735785 ], [ 76.4018896, 9.6740633 ], [ 76.4020041, 9.6741214 ], [ 76.4021067, 9.6739121 ], [ 76.4018766, 9.6736118 ], [ 76.4056715, 9.6722096 ], [ 76.4063695, 9.6731537 ], [ 76.4071191, 9.6739 ], [ 76.408275, 9.6757089 ], [ 76.4089903, 9.6769911 ], [ 76.4093915, 9.6778444 ], [ 76.4098381, 9.6784916 ], [ 76.4101257, 9.6789761 ], [ 76.4103349, 9.6792117 ], [ 76.411176, 9.6804639 ], [ 76.4116014, 9.6813589 ], [ 76.413049, 9.681292 ], [ 76.4123015, 9.6818842 ], [ 76.4125064, 9.6823084 ], [ 76.4129618, 9.6831812 ], [ 76.413315, 9.6844249 ], [ 76.4138567, 9.6874689 ], [ 76.414382, 9.689821 ], [ 76.4143974, 9.6907686 ], [ 76.4145112, 9.6918089 ], [ 76.4145578, 9.6926294 ], [ 76.4146343, 9.6932042 ], [ 76.4144385, 9.6935513 ], [ 76.41437, 9.6945415 ], [ 76.4141142, 9.6953261 ], [ 76.4137061, 9.6967601 ], [ 76.4130624, 9.6973847 ], [ 76.4125665, 9.6981297 ], [ 76.4109443, 9.6982143 ], [ 76.4098972, 9.6984174 ], [ 76.4087556, 9.6994834 ], [ 76.4080566, 9.6996084 ], [ 76.4076561, 9.70024 ], [ 76.4071849, 9.7003463 ], [ 76.4066603, 9.7002798 ], [ 76.4062545, 9.6995426 ], [ 76.405787, 9.6994775 ], [ 76.4056714, 9.6987624 ], [ 76.4045607, 9.6987891 ], [ 76.4042816, 9.6977614 ], [ 76.4039356, 9.6968633 ], [ 76.4040454, 9.6964693 ], [ 76.4042126, 9.6958153 ], [ 76.4027945, 9.6959483 ], [ 76.4018017, 9.6961221 ], [ 76.4007102, 9.6959745 ], [ 76.4003417, 9.6971225 ], [ 76.4001907, 9.6975551 ], [ 76.3989281, 9.6975961 ], [ 76.3983748, 9.6977093 ], [ 76.3978008, 9.6970349 ], [ 76.3970233, 9.6992114 ], [ 76.3976573, 9.7000646 ], [ 76.3979708, 9.7005411 ], [ 76.3971548, 9.700892 ], [ 76.3964492, 9.7011074 ], [ 76.3960738, 9.701661 ], [ 76.3952278, 9.701739 ], [ 76.3944727, 9.7016207 ], [ 76.3920574, 9.7009228 ], [ 76.390359, 9.7007834 ], [ 76.3894714, 9.7009452 ], [ 76.3889305, 9.7009626 ], [ 76.3887608, 9.7008828 ], [ 76.3864843, 9.7012065 ], [ 76.3856338, 9.7012278 ], [ 76.3843961, 9.7018962 ], [ 76.3835548, 9.7023567 ], [ 76.3835275, 9.7027357 ], [ 76.3835542, 9.7032653 ], [ 76.3833051, 9.7032937 ], [ 76.3832521, 9.7036142 ], [ 76.3832205, 9.7041172 ], [ 76.3830904, 9.7040087 ], [ 76.3831551, 9.7047197 ], [ 76.383344, 9.705035 ], [ 76.3834475, 9.7054462 ], [ 76.3834315, 9.70583 ], [ 76.3837501, 9.7068033 ], [ 76.3840415, 9.7078277 ], [ 76.3841186, 9.7084697 ], [ 76.3846021, 9.7097224 ], [ 76.384665, 9.7101273 ], [ 76.3851027, 9.7111763 ], [ 76.3853797, 9.7119789 ], [ 76.3863993, 9.713866 ], [ 76.3869021, 9.715095 ], [ 76.387392, 9.7158439 ], [ 76.3876557, 9.7161169 ], [ 76.3877187, 9.7166295 ], [ 76.3883632, 9.7188964 ], [ 76.3883777, 9.7195142 ], [ 76.3885968, 9.7203108 ], [ 76.3886702, 9.7211266 ], [ 76.3888553, 9.7227418 ], [ 76.3889718, 9.7258322 ], [ 76.3888228, 9.726565 ], [ 76.3890096, 9.7276101 ], [ 76.3892208, 9.7283169 ], [ 76.3892674, 9.7289474 ], [ 76.3894923, 9.7305764 ], [ 76.3895612, 9.7312706 ], [ 76.3894561, 9.7319535 ], [ 76.3895979, 9.7324218 ], [ 76.3895645, 9.7330632 ], [ 76.3896113, 9.7341617 ], [ 76.3899658, 9.7358258 ], [ 76.3907787, 9.73987 ], [ 76.390816, 9.7410163 ], [ 76.3907892, 9.7423523 ], [ 76.3906758, 9.743016 ], [ 76.3901152, 9.7430193 ], [ 76.3901, 9.7438661 ], [ 76.3901919, 9.7446441 ], [ 76.3902245, 9.7447906 ], [ 76.3897414, 9.7458676 ], [ 76.3895412, 9.7469208 ], [ 76.3897047, 9.7475779 ], [ 76.3896438, 9.7477858 ], [ 76.3895178, 9.7479862 ], [ 76.3893958, 9.7483227 ], [ 76.3894725, 9.7484997 ], [ 76.3893977, 9.7489988 ], [ 76.3893743, 9.7490711 ], [ 76.3895011, 9.749081 ], [ 76.3895278, 9.7493606 ], [ 76.3892575, 9.7495612 ], [ 76.3892015, 9.7500278 ], [ 76.3892942, 9.7508275 ], [ 76.3891597, 9.7509962 ], [ 76.3888537, 9.7511366 ], [ 76.3889271, 9.7512945 ], [ 76.3890473, 9.7511925 ], [ 76.3889372, 9.7514491 ], [ 76.3886068, 9.7518175 ], [ 76.3886268, 9.7521595 ], [ 76.3884552, 9.75242 ], [ 76.3884324, 9.7534539 ], [ 76.3881663, 9.7558168 ], [ 76.3878948, 9.7561832 ], [ 76.38711, 9.7573508 ], [ 76.3865034, 9.7585663 ], [ 76.3861309, 9.7595624 ], [ 76.3855799, 9.7599477 ], [ 76.3850927, 9.760441 ], [ 76.3846789, 9.7604575 ], [ 76.3836637, 9.7610415 ], [ 76.3837078, 9.7612139 ], [ 76.3834508, 9.7613915 ], [ 76.3830209, 9.7616721 ], [ 76.3822342, 9.7622547 ], [ 76.3806482, 9.7634218 ], [ 76.380473, 9.7638298 ], [ 76.379914, 9.7652129 ], [ 76.3795662, 9.7655251 ], [ 76.3792899, 9.7656418 ], [ 76.3787987, 9.7653974 ], [ 76.3785092, 9.7653988 ], [ 76.3782247, 9.7655388 ], [ 76.3779784, 9.7658095 ], [ 76.3779016, 9.7665101 ], [ 76.378198, 9.7673374 ], [ 76.3782307, 9.7684941 ], [ 76.3775382, 9.7690158 ], [ 76.377034, 9.7690622 ], [ 76.3768115, 9.7697085 ], [ 76.3771675, 9.770062 ], [ 76.3769619, 9.7701909 ], [ 76.3762864, 9.7706145 ], [ 76.3749903, 9.7708938 ], [ 76.3735072, 9.7725424 ], [ 76.3735766, 9.7730087 ], [ 76.3736066, 9.7736546 ], [ 76.3738169, 9.7744689 ], [ 76.3741494, 9.7753412 ], [ 76.3746299, 9.7761349 ], [ 76.3747337, 9.7771345 ], [ 76.3743927, 9.7777863 ], [ 76.3739637, 9.7780076 ], [ 76.3737769, 9.7788101 ], [ 76.3735499, 9.7790732 ], [ 76.373283, 9.7784944 ], [ 76.3730427, 9.7787311 ], [ 76.3729893, 9.7792047 ], [ 76.371603, 9.7797418 ], [ 76.3712406, 9.7799019 ], [ 76.3711205, 9.7804281 ], [ 76.3714592, 9.7810338 ], [ 76.3713607, 9.78152 ], [ 76.3715081, 9.7818419 ], [ 76.3724899, 9.7818814 ], [ 76.3728691, 9.7821382 ], [ 76.3714369, 9.7839406 ], [ 76.3709366, 9.7848814 ], [ 76.3702994, 9.7858742 ], [ 76.3693444, 9.7861143 ], [ 76.3683584, 9.7882861 ], [ 76.3681859, 9.7904346 ], [ 76.3685489, 9.7918045 ], [ 76.3696855, 9.7921262 ], [ 76.3703677, 9.7924624 ], [ 76.3720049, 9.7930674 ], [ 76.3728918, 9.793538 ], [ 76.3745973, 9.7936052 ], [ 76.3758631, 9.7943848 ], [ 76.3771897, 9.7944791 ], [ 76.3770532, 9.7948153 ], [ 76.375829, 9.7960937 ], [ 76.3762577, 9.7969483 ], [ 76.3771695, 9.7971441 ], [ 76.3778036, 9.7981765 ], [ 76.379168, 9.8007983 ], [ 76.3799184, 9.8029495 ], [ 76.3803975, 9.8040742 ], [ 76.3816239, 9.8044956 ], [ 76.3830566, 9.8059745 ], [ 76.3857288, 9.8091725 ], [ 76.3870815, 9.8112851 ], [ 76.3881048, 9.812764 ], [ 76.3887334, 9.8145976 ], [ 76.3895911, 9.8154029 ], [ 76.3899468, 9.81673 ], [ 76.3904741, 9.8192958 ], [ 76.390202, 9.8204056 ], [ 76.3898932, 9.8208903 ], [ 76.3891964, 9.8208977 ], [ 76.3870803, 9.8196998 ], [ 76.38599, 9.8202255 ], [ 76.385924, 9.8198209 ], [ 76.3857553, 9.8194543 ], [ 76.3846352, 9.8193161 ], [ 76.3836135, 9.8195031 ], [ 76.3832062, 9.8199951 ], [ 76.3829824, 9.8208943 ], [ 76.3822664, 9.824034 ], [ 76.3824714, 9.8259155 ], [ 76.3811526, 9.8270845 ], [ 76.3812462, 9.827253 ], [ 76.3831891, 9.8306568 ], [ 76.3830227, 9.831179 ], [ 76.3828286, 9.8318552 ], [ 76.3824373, 9.8325208 ], [ 76.3828748, 9.8339233 ], [ 76.3840059, 9.8339119 ], [ 76.3810214, 9.8346971 ], [ 76.3800099, 9.8414014 ], [ 76.3816693, 9.8423883 ], [ 76.3833949, 9.8430622 ], [ 76.3872511, 9.8440761 ], [ 76.3881547, 9.8435244 ], [ 76.3885334, 9.8431059 ], [ 76.3896081, 9.8401984 ], [ 76.3893578, 9.8398171 ], [ 76.3893567, 9.8395593 ], [ 76.3898764, 9.8395572 ], [ 76.3913456, 9.8357797 ], [ 76.3933548, 9.8325851 ], [ 76.3945094, 9.8289725 ], [ 76.3947691, 9.8289714 ], [ 76.3945585, 9.830184 ], [ 76.3952022, 9.8303637 ], [ 76.395464, 9.8300871 ], [ 76.3955551, 9.8305144 ], [ 76.3943877, 9.8310345 ], [ 76.3924684, 9.8380003 ], [ 76.3916893, 9.838132 ], [ 76.389765, 9.8416993 ], [ 76.3912976, 9.8423438 ], [ 76.3908206, 9.8430642 ], [ 76.3902772, 9.8435033 ], [ 76.3900099, 9.8438946 ], [ 76.3905137, 9.8441273 ], [ 76.3910502, 9.8433522 ], [ 76.3913961, 9.8433557 ], [ 76.3924022, 9.8423817 ], [ 76.3927454, 9.8421223 ], [ 76.3924032, 9.8431133 ], [ 76.3920074, 9.8434791 ], [ 76.3919732, 9.8435828 ], [ 76.3919828, 9.8438325 ], [ 76.3917096, 9.8444069 ], [ 76.3916159, 9.8444631 ], [ 76.3914521, 9.844499 ], [ 76.391318, 9.8448959 ], [ 76.3913627, 9.8450573 ], [ 76.3912212, 9.8453067 ], [ 76.3908505, 9.8454714 ], [ 76.3907553, 9.8456277 ], [ 76.3905288, 9.846143 ], [ 76.390365, 9.8463264 ], [ 76.3900746, 9.8466859 ], [ 76.3897772, 9.8470308 ], [ 76.3898705, 9.8478945 ], [ 76.3902179, 9.8483095 ], [ 76.3903548, 9.8490565 ], [ 76.3906286, 9.8492536 ], [ 76.3904307, 9.8497395 ], [ 76.3902916, 9.8500732 ], [ 76.390223, 9.850499 ], [ 76.3897982, 9.8504492 ], [ 76.3891448, 9.8510274 ], [ 76.388727, 9.8513661 ], [ 76.3883249, 9.8515055 ], [ 76.3881368, 9.8518441 ], [ 76.3879809, 9.85245 ], [ 76.3873794, 9.8532734 ], [ 76.3871262, 9.8532294 ], [ 76.3869698, 9.8535375 ], [ 76.3869959, 9.8539631 ], [ 76.3866914, 9.8547744 ], [ 76.3863073, 9.8560645 ], [ 76.3858892, 9.8590295 ], [ 76.385368, 9.8605407 ], [ 76.3853531, 9.859411 ], [ 76.3852815, 9.8571818 ], [ 76.3857855, 9.8555514 ], [ 76.3863009, 9.8545183 ], [ 76.386203, 9.8535595 ], [ 76.3863248, 9.8531537 ], [ 76.3865512, 9.8521981 ], [ 76.3869018, 9.8523431 ], [ 76.38698, 9.8524275 ], [ 76.386913, 9.8527099 ], [ 76.3869428, 9.8529373 ], [ 76.3871512, 9.85304 ], [ 76.3873329, 9.8528754 ], [ 76.3874714, 9.8523211 ], [ 76.3875719, 9.8518993 ], [ 76.3875607, 9.8516792 ], [ 76.3874302, 9.8516692 ], [ 76.3871475, 9.8518773 ], [ 76.3867604, 9.8518333 ], [ 76.3870407, 9.8513741 ], [ 76.3872071, 9.8511217 ], [ 76.3871215, 9.8509823 ], [ 76.3872071, 9.850942 ], [ 76.3875338, 9.8510091 ], [ 76.3876091, 9.8509493 ], [ 76.3876799, 9.8508356 ], [ 76.387862, 9.8507264 ], [ 76.3880745, 9.8505605 ], [ 76.3883227, 9.8504904 ], [ 76.3888342, 9.8502721 ], [ 76.389141, 9.8501259 ], [ 76.3893846, 9.8498856 ], [ 76.3896585, 9.8495607 ], [ 76.3897907, 9.8491484 ], [ 76.3898003, 9.8488423 ], [ 76.3895375, 9.8484075 ], [ 76.389288, 9.8481147 ], [ 76.3891504, 9.8473768 ], [ 76.3891355, 9.8466542 ], [ 76.389128, 9.8462617 ], [ 76.3891318, 9.846005 ], [ 76.3887706, 9.8451027 ], [ 76.3884877, 9.8447652 ], [ 76.3881651, 9.8446006 ], [ 76.3872567, 9.8447414 ], [ 76.3864986, 9.8447518 ], [ 76.3855193, 9.8446066 ], [ 76.3838662, 9.8443472 ], [ 76.3828553, 9.8443264 ], [ 76.3810653, 9.8440048 ], [ 76.3803598, 9.8439945 ], [ 76.3796754, 9.8441812 ], [ 76.3791805, 9.8445547 ], [ 76.3788646, 9.8448037 ], [ 76.3785803, 9.8449697 ], [ 76.3784013, 9.8453846 ], [ 76.3779175, 9.8459458 ], [ 76.3769158, 9.8472119 ], [ 76.3767967, 9.8475509 ], [ 76.3753899, 9.8492647 ], [ 76.3755995, 9.8502981 ], [ 76.3768629, 9.8507495 ], [ 76.3770193, 9.8509623 ], [ 76.3772799, 9.8511677 ], [ 76.3777043, 9.8512557 ], [ 76.3783508, 9.8513812 ], [ 76.3785531, 9.8511823 ], [ 76.3786676, 9.851366 ], [ 76.3788464, 9.8529571 ], [ 76.3788956, 9.8530823 ], [ 76.3794702, 9.8530502 ], [ 76.3797443, 9.8534271 ], [ 76.3798724, 9.8538456 ], [ 76.3797922, 9.8544271 ], [ 76.3794986, 9.8546448 ], [ 76.3791115, 9.8567648 ], [ 76.3793646, 9.8579532 ], [ 76.37897, 9.859501 ], [ 76.3789103, 9.8607852 ], [ 76.3788902, 9.8611112 ], [ 76.3787169, 9.8612028 ], [ 76.3782943, 9.8611732 ], [ 76.3782382, 9.8615 ], [ 76.3783818, 9.861709 ], [ 76.3783371, 9.8623472 ], [ 76.3782329, 9.8625379 ], [ 76.3777266, 9.8645111 ], [ 76.3774595, 9.8644472 ], [ 76.3769939, 9.8655775 ], [ 76.3765651, 9.8656555 ], [ 76.3764683, 9.8655381 ], [ 76.3760811, 9.8660296 ], [ 76.3757571, 9.8667028 ], [ 76.3755202, 9.8669912 ], [ 76.375315, 9.8672654 ], [ 76.3751356, 9.8674013 ], [ 76.375265, 9.8675913 ], [ 76.3751579, 9.8680615 ], [ 76.3748005, 9.8680615 ], [ 76.3746259, 9.8686163 ], [ 76.374056, 9.8688977 ], [ 76.3739592, 9.8691398 ], [ 76.3738549, 9.8693011 ], [ 76.373503, 9.8694142 ], [ 76.3733859, 9.8698586 ], [ 76.3733412, 9.8704895 ], [ 76.3733635, 9.8708342 ], [ 76.3731551, 9.8713037 ], [ 76.3728572, 9.871289 ], [ 76.3726413, 9.8722646 ], [ 76.3725746, 9.8735878 ], [ 76.3726423, 9.8749545 ], [ 76.3710926, 9.8780668 ], [ 76.3695738, 9.8774213 ], [ 76.3690898, 9.8789616 ], [ 76.3700949, 9.8791524 ], [ 76.3700279, 9.8798052 ], [ 76.3697599, 9.8805094 ], [ 76.3692164, 9.8808174 ], [ 76.368859, 9.8813236 ], [ 76.3687622, 9.8818737 ], [ 76.3687547, 9.8827466 ], [ 76.3683303, 9.8832013 ], [ 76.3678916, 9.8833316 ], [ 76.3674443, 9.8839422 ], [ 76.3672656, 9.8839275 ], [ 76.3668338, 9.8848444 ], [ 76.3665062, 9.8852991 ], [ 76.3662828, 9.8858419 ], [ 76.366119, 9.8858639 ], [ 76.3658987, 9.8868159 ], [ 76.3658808, 9.8874923 ], [ 76.3661488, 9.8876097 ], [ 76.3655681, 9.8887246 ], [ 76.365304, 9.8890008 ], [ 76.3650022, 9.890903 ], [ 76.3644959, 9.8916512 ], [ 76.3642874, 9.89237 ], [ 76.3643098, 9.8926414 ], [ 76.3639822, 9.8931622 ], [ 76.3635029, 9.8935291 ], [ 76.361207, 9.8981855 ], [ 76.3604345, 9.8995045 ], [ 76.3597479, 9.9010011 ], [ 76.3583385, 9.9030879 ], [ 76.3583394, 9.9033455 ], [ 76.3571558, 9.9061841 ], [ 76.3566237, 9.9064716 ], [ 76.3552419, 9.9085119 ], [ 76.3551147, 9.9092857 ], [ 76.3535605, 9.9105803 ], [ 76.3531819, 9.9109782 ], [ 76.3529155, 9.9116138 ], [ 76.3529196, 9.9126446 ], [ 76.3511219, 9.9123479 ], [ 76.3500597, 9.9123985 ], [ 76.348477625, 9.911719339431109 ], [ 76.34827762499999, 9.911633482493995 ], [ 76.3479767, 9.9115043 ], [ 76.3472853, 9.9121788 ], [ 76.3466798, 9.9121543 ], [ 76.3463841, 9.9113164 ], [ 76.3459549, 9.9110965 ], [ 76.3451147, 9.9107427 ], [ 76.3444672, 9.91139 ], [ 76.3437031, 9.9152586 ], [ 76.3434229, 9.9156453 ], [ 76.3430195, 9.916254 ], [ 76.3427792, 9.9167021 ], [ 76.3426762, 9.9170826 ], [ 76.3423763, 9.9175953 ], [ 76.341643, 9.9174457 ], [ 76.3410244, 9.9173498 ], [ 76.3408143, 9.9177156 ], [ 76.3405927, 9.9192635 ], [ 76.3402452, 9.9202799 ], [ 76.3400854, 9.9204271 ], [ 76.3395838, 9.9211168 ], [ 76.3388263, 9.9221573 ], [ 76.3387158, 9.9219161 ], [ 76.3385499, 9.9216179 ], [ 76.3389264, 9.9210526 ], [ 76.3391291, 9.9207467 ], [ 76.339337, 9.9205729 ], [ 76.3393633, 9.9204562 ], [ 76.3394334, 9.9197852 ], [ 76.3387516, 9.9196613 ], [ 76.3382473, 9.9197544 ], [ 76.3373716, 9.9202898 ], [ 76.3366215, 9.9200985 ], [ 76.3366281, 9.9196119 ], [ 76.3365362, 9.9190612 ], [ 76.3366022, 9.9180632 ], [ 76.3370969, 9.916437 ], [ 76.3371028, 9.9156227 ], [ 76.3371337, 9.9151975 ], [ 76.3370679, 9.9147386 ], [ 76.3369494, 9.9142926 ], [ 76.3367807, 9.9139133 ], [ 76.3364835, 9.9135665 ], [ 76.3362379, 9.9135281 ], [ 76.3360465, 9.9136132 ], [ 76.3357886, 9.9139606 ], [ 76.3356439, 9.9144985 ], [ 76.3357122, 9.9155891 ], [ 76.3354782, 9.9157797 ], [ 76.3350304, 9.9159184 ], [ 76.3343937, 9.9161711 ], [ 76.3336353, 9.9164215 ], [ 76.333019, 9.916465 ], [ 76.3323776, 9.9163342 ], [ 76.3320506, 9.91597 ], [ 76.3318862, 9.9157181 ], [ 76.331619, 9.9155644 ], [ 76.331324, 9.9154467 ], [ 76.3310374, 9.9153624 ], [ 76.3306548, 9.9151076 ], [ 76.3303207, 9.914582 ], [ 76.3296894, 9.9143591 ], [ 76.3293018, 9.9145942 ], [ 76.3288184, 9.9149518 ], [ 76.3280733, 9.9154165 ], [ 76.3271531, 9.9159707 ], [ 76.3265887, 9.9160811 ], [ 76.3260154, 9.9159821 ], [ 76.3255752, 9.9159778 ], [ 76.324008, 9.9158482 ], [ 76.3236389, 9.9152733 ], [ 76.3236818, 9.9145292 ], [ 76.3241855, 9.9127269 ], [ 76.3241684, 9.912617 ], [ 76.3252151, 9.910765 ], [ 76.3263141, 9.9084571 ], [ 76.3272443, 9.9053228 ], [ 76.3276316, 9.9048059 ], [ 76.328288, 9.9033014 ], [ 76.3285028, 9.9028091 ], [ 76.330444, 9.8976474 ], [ 76.3320748, 9.8954828 ], [ 76.3328387, 9.8941807 ], [ 76.3330879, 9.8934336 ], [ 76.3330166, 9.8924527 ], [ 76.3326065, 9.890721 ], [ 76.333251, 9.8885275 ], [ 76.3339541, 9.8868535 ], [ 76.3353604, 9.885699 ], [ 76.3354764, 9.8846318 ], [ 76.3331264, 9.8832525 ], [ 76.3311416, 9.8825242 ], [ 76.3303703, 9.8822401 ], [ 76.3297154, 9.8827636 ], [ 76.3291732, 9.8837142 ], [ 76.3289039, 9.8843186 ], [ 76.32844, 9.8842952 ], [ 76.3277432, 9.8858722 ], [ 76.3265713, 9.886969 ], [ 76.3262784, 9.8869112 ], [ 76.3251931, 9.8866771 ], [ 76.3247499, 9.8870942 ], [ 76.3241066, 9.8881062 ], [ 76.3233487, 9.8888738 ], [ 76.3228888, 9.8889177 ], [ 76.3220508, 9.8884018 ], [ 76.3216684, 9.8890654 ], [ 76.3212795, 9.8890745 ], [ 76.320916, 9.8892637 ], [ 76.3203963, 9.8892656 ], [ 76.3196949, 9.8893671 ], [ 76.319249, 9.8889586 ], [ 76.3186608, 9.8888676 ], [ 76.3183225, 9.8897254 ], [ 76.3187606, 9.8905073 ], [ 76.3184052, 9.8921525 ], [ 76.3181323, 9.8924375 ], [ 76.3178099, 9.8938221 ], [ 76.3176115, 9.8941234 ], [ 76.317365, 9.894301 ], [ 76.3166266, 9.8968834 ], [ 76.317502, 9.8973315 ], [ 76.3179999, 9.8970779 ], [ 76.3187037, 9.8971793 ], [ 76.3192187, 9.8956743 ], [ 76.3202315, 9.8959279 ], [ 76.3192402, 9.8973893 ], [ 76.3192391, 9.8978784 ], [ 76.3187, 9.8977723 ], [ 76.3185711, 9.8981599 ], [ 76.318463, 9.8996208 ], [ 76.3188708, 9.8996719 ], [ 76.3187037, 9.9006037 ], [ 76.3184033, 9.9006037 ], [ 76.3182488, 9.9016437 ], [ 76.3184891, 9.9022948 ], [ 76.3177256, 9.9034246 ], [ 76.3174515, 9.903834 ], [ 76.3172962, 9.9043498 ], [ 76.3166501, 9.9051254 ], [ 76.315536, 9.9053086 ], [ 76.315086, 9.9064754 ], [ 76.3145781, 9.9069375 ], [ 76.3133777, 9.9084588 ], [ 76.3129125, 9.9095268 ], [ 76.3130908, 9.9096006 ], [ 76.3135616, 9.9096777 ], [ 76.3141629, 9.9096503 ], [ 76.3148454, 9.9099478 ], [ 76.3143416, 9.9128657 ], [ 76.3143427, 9.9131233 ], [ 76.3136256, 9.9150914 ], [ 76.313302, 9.9159362 ], [ 76.3125382, 9.9168667 ], [ 76.3114854, 9.9174887 ], [ 76.3111484, 9.9181635 ], [ 76.3110904, 9.9182796 ], [ 76.3107662, 9.9203716 ], [ 76.3107, 9.9216257 ], [ 76.310452, 9.9219013 ], [ 76.3095844, 9.9226335 ], [ 76.3088812, 9.9238571 ], [ 76.308997, 9.9243864 ], [ 76.308379, 9.9260418 ], [ 76.30826, 9.9264219 ], [ 76.3079871, 9.9269388 ], [ 76.3076512, 9.9276599 ], [ 76.3074285, 9.9280281 ], [ 76.306526, 9.929416 ], [ 76.3065046, 9.9294724 ], [ 76.306513, 9.9295399 ], [ 76.3064311, 9.9296486 ], [ 76.3063642, 9.9298576 ], [ 76.3062272, 9.930042 ], [ 76.3060935, 9.930251 ], [ 76.305903, 9.9306725 ], [ 76.3057559, 9.9307498 ], [ 76.3053558, 9.9312143 ], [ 76.3051426, 9.9315219 ], [ 76.3050264, 9.9316281 ], [ 76.304795, 9.9319614 ], [ 76.3046755, 9.9321623 ], [ 76.3045656, 9.932578 ], [ 76.3044507, 9.9329079 ], [ 76.3043788, 9.9331483 ], [ 76.3042686, 9.9334967 ], [ 76.3042841, 9.9338058 ], [ 76.3042351, 9.9339977 ], [ 76.3042251, 9.934266 ], [ 76.3043895, 9.9344838 ], [ 76.3045159, 9.9349129 ], [ 76.3047349, 9.9352732 ], [ 76.3050333, 9.9357017 ], [ 76.3054262, 9.9359992 ], [ 76.3055604, 9.9363105 ], [ 76.3055871, 9.9365763 ], [ 76.3041913, 9.9366046 ], [ 76.303999, 9.9364087 ], [ 76.3037721, 9.9362365 ], [ 76.303459, 9.9360739 ], [ 76.3033714, 9.9360473 ], [ 76.3031843, 9.9360828 ], [ 76.3030915, 9.9360195 ], [ 76.3029955, 9.9360929 ], [ 76.3029449, 9.9361759 ], [ 76.302718, 9.9362894 ], [ 76.3024988, 9.9365112 ], [ 76.3023021, 9.9368045 ], [ 76.302207, 9.9369508 ], [ 76.3020658, 9.9371863 ], [ 76.3020847, 9.9373865 ], [ 76.3019854, 9.9376938 ], [ 76.3017958, 9.9377862 ], [ 76.301323, 9.937475 ], [ 76.3012055, 9.937447 ], [ 76.3010258, 9.9375168 ], [ 76.3008337, 9.9375777 ], [ 76.3004917, 9.9377496 ], [ 76.3004208, 9.9379172 ], [ 76.3004728, 9.9380476 ], [ 76.3001986, 9.9381285 ], [ 76.3000129, 9.9385731 ], [ 76.2998613, 9.9388929 ], [ 76.2996482, 9.9393512 ], [ 76.2999011, 9.9394421 ], [ 76.2997269, 9.9395644 ], [ 76.2996037, 9.9396034 ], [ 76.2994867, 9.9397055 ], [ 76.2992484, 9.9399333 ], [ 76.2989626, 9.9398253 ], [ 76.2984523, 9.9406342 ], [ 76.298272, 9.9409385 ], [ 76.2977158, 9.9423791 ], [ 76.2977026, 9.9425611 ], [ 76.2976631, 9.9427352 ], [ 76.2975197, 9.9427519 ], [ 76.2975425, 9.9424332 ], [ 76.2984023, 9.9404198 ], [ 76.2993217, 9.938469 ], [ 76.299681, 9.9378777 ], [ 76.3001111, 9.9371048 ], [ 76.3003049, 9.9363878 ], [ 76.3005934, 9.9359363 ], [ 76.3005601, 9.9355171 ], [ 76.3007662, 9.9347509 ], [ 76.3011942, 9.9334507 ], [ 76.301383, 9.9324785 ], [ 76.3014376, 9.9319146 ], [ 76.3018081, 9.9316284 ], [ 76.3020354, 9.9315707 ], [ 76.3023095, 9.9312596 ], [ 76.3025503, 9.9309144 ], [ 76.3029891, 9.9298469 ], [ 76.3036983, 9.9294273 ], [ 76.3037183, 9.9293301 ], [ 76.3038637, 9.9291803 ], [ 76.304133, 9.929005 ], [ 76.304452, 9.9283803 ], [ 76.3044366, 9.9281253 ], [ 76.3045983, 9.9268062 ], [ 76.3043939, 9.9266869 ], [ 76.3043665, 9.9264838 ], [ 76.3044276, 9.9257839 ], [ 76.3039304, 9.9258318 ], [ 76.3037318, 9.9258799 ], [ 76.3035971, 9.9261084 ], [ 76.3034886, 9.92616 ], [ 76.3034812, 9.9260273 ], [ 76.3033191, 9.9260475 ], [ 76.3032605, 9.9261452 ], [ 76.3031362, 9.9262536 ], [ 76.3028041, 9.9263037 ], [ 76.3025201, 9.9265267 ], [ 76.3023035, 9.926716 ], [ 76.3021158, 9.9268711 ], [ 76.3020896, 9.9270332 ], [ 76.3019362, 9.9270369 ], [ 76.3018128, 9.9271364 ], [ 76.3012854, 9.9275543 ], [ 76.3006831, 9.9285808 ], [ 76.2998398, 9.9293624 ], [ 76.2993551, 9.9299847 ], [ 76.2991531, 9.9300584 ], [ 76.2988763, 9.9304563 ], [ 76.2986338, 9.9308521 ], [ 76.298289, 9.9312929 ], [ 76.2981474, 9.9314408 ], [ 76.2978005, 9.9319154 ], [ 76.2973912, 9.9327777 ], [ 76.297683, 9.9329656 ], [ 76.2978111, 9.932726 ], [ 76.2981472, 9.9328758 ], [ 76.2978296, 9.9335522 ], [ 76.2977116, 9.9337702 ], [ 76.2969366, 9.9353336 ], [ 76.2967943, 9.9354169 ], [ 76.2964972, 9.9358323 ], [ 76.2962214, 9.9361586 ], [ 76.2958007, 9.9365344 ], [ 76.2954211, 9.9370226 ], [ 76.2947038, 9.9375969 ], [ 76.293432, 9.9407144 ], [ 76.2928574, 9.9411934 ], [ 76.2926106, 9.941256 ], [ 76.2927303, 9.9415876 ], [ 76.2926416, 9.9419858 ], [ 76.2920931, 9.943628 ], [ 76.2910287, 9.9453457 ], [ 76.290856, 9.9455263 ], [ 76.290777, 9.9455263 ], [ 76.2906671, 9.945577 ], [ 76.2905882, 9.9455635 ], [ 76.2905229, 9.9456108 ], [ 76.2905367, 9.9457055 ], [ 76.2905556, 9.9459089 ], [ 76.290527, 9.9460644 ], [ 76.2901155, 9.9465802 ], [ 76.2899114, 9.9469655 ], [ 76.2896924, 9.9476552 ], [ 76.2898012, 9.9480061 ], [ 76.289517, 9.9484225 ], [ 76.2892177, 9.9491373 ], [ 76.2886042, 9.9504379 ], [ 76.2874376, 9.9529694 ], [ 76.2869147, 9.9540038 ], [ 76.2854041, 9.956795 ], [ 76.2851871, 9.9572081 ], [ 76.2848196, 9.9573743 ], [ 76.28492, 9.9578472 ], [ 76.2842703, 9.9594753 ], [ 76.2845767, 9.9596165 ], [ 76.2842229, 9.9597734 ], [ 76.2838125, 9.9610051 ], [ 76.2831992, 9.9621388 ], [ 76.2825783, 9.9636462 ], [ 76.2822888, 9.964327 ], [ 76.2814316, 9.9657283 ], [ 76.2809598, 9.966639 ], [ 76.2807326, 9.967399 ], [ 76.2805308, 9.967547 ], [ 76.280056, 9.9684369 ], [ 76.2799567, 9.9686821 ], [ 76.2795181, 9.9695493 ], [ 76.2795084, 9.9695685 ], [ 76.2788893, 9.9711412 ], [ 76.2780447, 9.9730108 ], [ 76.2767474, 9.9761349 ], [ 76.2751823, 9.9792571 ], [ 76.27276, 9.9842067 ], [ 76.268429, 9.983004 ], [ 76.24447, 9.9741543 ], [ 76.2446694, 9.973413 ], [ 76.2445324, 9.9729704 ], [ 76.2443191, 9.9727097 ], [ 76.2439113, 9.97262 ], [ 76.2432658, 9.9724594 ], [ 76.2423322, 9.9724183 ], [ 76.2411826, 9.9725259 ], [ 76.2397764, 9.9729217 ], [ 76.2387038, 9.9727905 ], [ 76.2382104, 9.973031 ], [ 76.2369081, 9.9733656 ], [ 76.2356362, 9.9733318 ], [ 76.2328948, 9.9738535 ], [ 76.2322713, 9.9741273 ], [ 76.2306098, 9.9747077 ], [ 76.2305433, 9.9748243 ], [ 76.230688, 9.9752915 ], [ 76.2306554, 9.9755243 ], [ 76.2304099, 9.9758118 ], [ 76.2299535, 9.9760598 ], [ 76.22984, 9.9762431 ], [ 76.2297484, 9.9763205 ], [ 76.2296391, 9.9763664 ], [ 76.2294514, 9.9764011 ], [ 76.2293933, 9.9764168 ], [ 76.2293068, 9.9765971 ], [ 76.2292615, 9.976803 ], [ 76.2293241, 9.976959 ], [ 76.2291694, 9.9768308 ], [ 76.2292021, 9.9765283 ], [ 76.2291452, 9.9764569 ], [ 76.2291621, 9.976219 ], [ 76.2292694, 9.9759471 ], [ 76.229469, 9.9758115 ], [ 76.2283448, 9.9758177 ], [ 76.2278877, 9.9754005 ], [ 76.2270227, 9.9753751 ], [ 76.2277646, 9.9733377 ], [ 76.2279199, 9.9733001 ], [ 76.2281776, 9.9734998 ], [ 76.228195, 9.9736863 ], [ 76.2282999, 9.973837 ], [ 76.2283605, 9.9737654 ], [ 76.2285499, 9.9738559 ], [ 76.2286451, 9.9739741 ], [ 76.2287773, 9.9739562 ], [ 76.2288677, 9.974 ], [ 76.2289045, 9.9740805 ], [ 76.2289818, 9.9740553 ], [ 76.2291535, 9.9741385 ], [ 76.2293284, 9.9739224 ], [ 76.2285393, 9.9734694 ], [ 76.2285523, 9.9731041 ], [ 76.2279256, 9.9728837 ], [ 76.2270451, 9.9724292 ], [ 76.2267251, 9.9727042 ], [ 76.2261339, 9.9724362 ], [ 76.226062, 9.9725917 ], [ 76.226768, 9.9729295 ], [ 76.2268226, 9.9728408 ], [ 76.2270495, 9.9727639 ], [ 76.2274326, 9.9729295 ], [ 76.2276176, 9.9732125 ], [ 76.2274986, 9.9735852 ], [ 76.2272517, 9.9736912 ], [ 76.2271051, 9.9740359 ], [ 76.2271447, 9.9742221 ], [ 76.2272126, 9.9743061 ], [ 76.2270303, 9.9747024 ], [ 76.2268236, 9.9749166 ], [ 76.2267779, 9.9750379 ], [ 76.2252866, 9.975096 ], [ 76.2251483, 9.9745587 ], [ 76.2250802, 9.9745762 ], [ 76.225238, 9.9753797 ], [ 76.2249292, 9.9757838 ], [ 76.2240852, 9.9757871 ], [ 76.2240788, 9.9769273 ], [ 76.2230063, 9.9796137 ], [ 76.2223823, 9.9812571 ], [ 76.2222637, 9.9817532 ], [ 76.2217426, 9.9843029 ], [ 76.221802, 9.9845722 ], [ 76.2212681, 9.986532 ], [ 76.2207652, 9.9875561 ], [ 76.2196466, 9.9899229 ], [ 76.2193447, 9.9909225 ], [ 76.2191557, 9.9922818 ], [ 76.2187175, 9.9947783 ], [ 76.2181315, 9.9969618 ], [ 76.2177048, 9.9989887 ], [ 76.2174283, 10.0009488 ], [ 76.2168585, 10.0043187 ], [ 76.2144399, 10.0169874 ], [ 76.2141356, 10.018946 ], [ 76.213811, 10.0208922 ], [ 76.2134205, 10.0222535 ], [ 76.2126106, 10.0244519 ], [ 76.2118674, 10.0261457 ], [ 76.2113874, 10.0260126 ], [ 76.2111168, 10.0260418 ], [ 76.2107514, 10.0267548 ], [ 76.2086934, 10.03413 ], [ 76.2087854, 10.0342507 ], [ 76.2071577, 10.0399346 ], [ 76.2063801, 10.0427813 ], [ 76.2059772, 10.0443501 ], [ 76.205221, 10.0470975 ], [ 76.2045765, 10.0492465 ], [ 76.2041458, 10.0505224 ], [ 76.2026044, 10.0515682 ], [ 76.2022624, 10.0520888 ], [ 76.2005906, 10.0573187 ], [ 76.2003817, 10.058074 ], [ 76.199052, 10.0632363 ], [ 76.1963283, 10.0732691 ], [ 76.1960749, 10.0745948 ], [ 76.1955291, 10.0767812 ], [ 76.195237, 10.0779414 ], [ 76.1949666, 10.0791294 ], [ 76.193785, 10.0834497 ], [ 76.1936417, 10.0836057 ], [ 76.1933251, 10.0849063 ], [ 76.1931292, 10.0848954 ], [ 76.1930911, 10.0855535 ], [ 76.1927285, 10.0862718 ], [ 76.1926936, 10.0866389 ], [ 76.1925282, 10.0871826 ], [ 76.1922957, 10.0874934 ], [ 76.1923047, 10.0879143 ], [ 76.191829, 10.0895905 ], [ 76.1913605, 10.0914878 ], [ 76.1913679, 10.0916198 ], [ 76.1912275, 10.0920308 ], [ 76.1909834, 10.0925301 ], [ 76.1905481, 10.0941252 ], [ 76.1896619, 10.0976367 ], [ 76.1894102, 10.0990821 ], [ 76.1860585, 10.1138396 ], [ 76.1852626, 10.1171317 ], [ 76.1827543, 10.1263001 ], [ 76.1813107, 10.1315918 ], [ 76.1809568, 10.1328327 ], [ 76.1802436, 10.1353252 ], [ 76.1779362, 10.1426049 ], [ 76.1772893, 10.1442949 ], [ 76.1770524, 10.1452784 ], [ 76.1754157, 10.1499309 ], [ 76.1747641, 10.151711 ], [ 76.1741649, 10.1533246 ], [ 76.1739109, 10.1542216 ], [ 76.1734328, 10.1554469 ], [ 76.1734069, 10.1556731 ], [ 76.1720324, 10.159233 ], [ 76.1700104, 10.1645896 ], [ 76.1686346, 10.1674751 ], [ 76.1685131, 10.1679438 ], [ 76.1683924, 10.1684765 ], [ 76.1682593, 10.168935 ], [ 76.1678733, 10.1694136 ], [ 76.1674194, 10.1700123 ], [ 76.1673494, 10.1702025 ], [ 76.1670219, 10.1712617 ], [ 76.1666552, 10.1731482 ], [ 76.1664211, 10.1742683 ], [ 76.1662566, 10.1754837 ], [ 76.1660568, 10.1759713 ], [ 76.1655965, 10.1766073 ], [ 76.1651899, 10.1769694 ], [ 76.1649252, 10.1771074 ], [ 76.1647757, 10.1770623 ], [ 76.1644491, 10.1768967 ], [ 76.1642162, 10.1767167 ], [ 76.1638915, 10.1763629 ], [ 76.1637666, 10.1761758 ], [ 76.163659, 10.1761137 ], [ 76.1635209, 10.1761184 ], [ 76.1634294, 10.1762332 ], [ 76.1634335, 10.176393 ], [ 76.1634972, 10.1765216 ], [ 76.1639919, 10.17684 ], [ 76.1642375, 10.1770121 ], [ 76.1647954, 10.1772826 ], [ 76.1656335, 10.1776493 ], [ 76.1664521, 10.1780506 ], [ 76.1665134, 10.1784474 ], [ 76.1666488, 10.1787144 ], [ 76.1676538, 10.1802565 ], [ 76.1681305, 10.1809122 ], [ 76.1683095, 10.1810556 ], [ 76.1683678, 10.1812482 ], [ 76.168349, 10.1813199 ], [ 76.1682277, 10.1814635 ], [ 76.1682512, 10.1814961 ], [ 76.168435, 10.181307 ], [ 76.1683823, 10.1809859 ], [ 76.1685011, 10.1809411 ], [ 76.1684532, 10.1803607 ], [ 76.1684137, 10.1801661 ], [ 76.168451, 10.1799615 ], [ 76.1685172, 10.1799018 ], [ 76.1686905, 10.1799397 ], [ 76.1686922, 10.1799781 ], [ 76.1688257, 10.1802504 ], [ 76.1688028, 10.1809306 ], [ 76.1688049, 10.1814223 ], [ 76.1688757, 10.1818628 ], [ 76.1688132, 10.181871 ], [ 76.1688416, 10.1822544 ], [ 76.1722644, 10.1836969 ], [ 76.1723352, 10.1835235 ], [ 76.1724514, 10.1834764 ], [ 76.1726725, 10.1835019 ], [ 76.1728494, 10.1836207 ], [ 76.1728738, 10.1836921 ], [ 76.1733067, 10.1838014 ], [ 76.1770277, 10.1840332 ], [ 76.1726532, 10.1886275 ], [ 76.1713666, 10.1883033 ], [ 76.1704396, 10.1881913 ], [ 76.169757, 10.1881088 ], [ 76.1694155, 10.1880827 ], [ 76.1690652, 10.1881117 ], [ 76.1687296, 10.1880711 ], [ 76.1685589, 10.1879262 ], [ 76.1684205, 10.1877234 ], [ 76.1682649, 10.1875752 ], [ 76.1680467, 10.1874627 ], [ 76.1676463, 10.187396 ], [ 76.1673784, 10.1874511 ], [ 76.1673078, 10.1875496 ], [ 76.1673284, 10.1876452 ], [ 76.167555, 10.1876713 ], [ 76.1673872, 10.1879089 ], [ 76.1671046, 10.1881001 ], [ 76.1670605, 10.1882218 ], [ 76.1670899, 10.1884652 ], [ 76.1669545, 10.1885028 ], [ 76.1667396, 10.188497 ], [ 76.166769, 10.1881436 ], [ 76.1665424, 10.1881378 ], [ 76.1664805, 10.1881986 ], [ 76.1661361, 10.1881522 ], [ 76.1661008, 10.1884217 ], [ 76.1658329, 10.1884565 ], [ 76.1657004, 10.188526 ], [ 76.1655621, 10.1885521 ], [ 76.1655061, 10.1885115 ], [ 76.1654309, 10.1881814 ], [ 76.1638959, 10.1878973 ], [ 76.1633572, 10.1878306 ], [ 76.1626742, 10.1877234 ], [ 76.1626035, 10.1876478 ], [ 76.1626212, 10.187367 ], [ 76.1626536, 10.1873207 ], [ 76.1628178, 10.1871628 ], [ 76.1628508, 10.1871295 ], [ 76.1630628, 10.1871874 ], [ 76.1631805, 10.1871266 ], [ 76.163363, 10.1867905 ], [ 76.1634873, 10.1867743 ], [ 76.163887, 10.1868503 ], [ 76.1638766, 10.1868933 ], [ 76.1641222, 10.1869507 ], [ 76.1643113, 10.1869432 ], [ 76.164422, 10.1865635 ], [ 76.1645406, 10.1864815 ], [ 76.1646872, 10.1862481 ], [ 76.1648315, 10.1861815 ], [ 76.1649816, 10.1859178 ], [ 76.1651317, 10.1854136 ], [ 76.1651818, 10.1851268 ], [ 76.1653407, 10.1847849 ], [ 76.165956, 10.1837679 ], [ 76.1661481, 10.1833951 ], [ 76.1661297, 10.1833072 ], [ 76.1660679, 10.1832145 ], [ 76.1645937, 10.1824813 ], [ 76.164528, 10.1823664 ], [ 76.1644801, 10.1820218 ], [ 76.1641728, 10.180616 ], [ 76.1636441, 10.1793483 ], [ 76.1630728, 10.178439 ], [ 76.1621998, 10.1772704 ], [ 76.1621303, 10.1772611 ], [ 76.1620331, 10.1772814 ], [ 76.1619286, 10.177348 ], [ 76.1618903, 10.1774528 ], [ 76.1619006, 10.1775509 ], [ 76.162011, 10.1776682 ], [ 76.1621832, 10.1777479 ], [ 76.1624291, 10.1780275 ], [ 76.1624764, 10.1782469 ], [ 76.1601488, 10.1866627 ], [ 76.1577881, 10.1953909 ], [ 76.1539429, 10.2069131 ], [ 76.1510504, 10.2159684 ], [ 76.1485957, 10.2235959 ], [ 76.1439007, 10.2383099 ], [ 76.1418236, 10.2450416 ], [ 76.1397637, 10.2511566 ], [ 76.1390084, 10.2536229 ], [ 76.1383818, 10.2558864 ], [ 76.1383647, 10.2563763 ], [ 76.1373175, 10.2595181 ], [ 76.1373433, 10.2598644 ], [ 76.1365536, 10.2626768 ], [ 76.1365751, 10.2630831 ], [ 76.1364379, 10.2632504 ], [ 76.1362799, 10.2637077 ], [ 76.135923, 10.2649751 ], [ 76.1355351, 10.2664868 ], [ 76.1352092, 10.2671434 ], [ 76.1349593, 10.2679123 ], [ 76.1348688, 10.2686275 ], [ 76.1348469, 10.2691026 ], [ 76.1345725, 10.26988 ], [ 76.1343421, 10.2711 ], [ 76.1341665, 10.2719314 ], [ 76.1341996, 10.2719834 ], [ 76.1342353, 10.2719887 ], [ 76.134271, 10.2719213 ], [ 76.1343642, 10.2719456 ], [ 76.1344218, 10.2719995 ], [ 76.1343972, 10.2721156 ], [ 76.1343313, 10.2721696 ], [ 76.1342298, 10.2721156 ], [ 76.1341558, 10.272121 ], [ 76.1340954, 10.2721453 ], [ 76.1340268, 10.2723235 ], [ 76.1338787, 10.2727931 ], [ 76.1337004, 10.273333 ], [ 76.1335605, 10.2739079 ], [ 76.1334754, 10.2741832 ], [ 76.1334096, 10.2744748 ], [ 76.1332587, 10.2748689 ], [ 76.1331901, 10.2751253 ], [ 76.1331819, 10.2752117 ], [ 76.1331353, 10.275298 ], [ 76.1331545, 10.275568 ], [ 76.1331517, 10.2758838 ], [ 76.1331106, 10.2762023 ], [ 76.1330201, 10.2761888 ], [ 76.1329679, 10.2763561 ], [ 76.133053, 10.2764344 ], [ 76.1330009, 10.2765667 ], [ 76.132924, 10.276645 ], [ 76.1328088, 10.2767448 ], [ 76.1327951, 10.2768717 ], [ 76.1328664, 10.2770012 ], [ 76.1328555, 10.2772064 ], [ 76.1327622, 10.2774088 ], [ 76.1326579, 10.2775762 ], [ 76.1325811, 10.2779082 ], [ 76.1324714, 10.278143 ], [ 76.1322986, 10.2784129 ], [ 76.1321038, 10.2787746 ], [ 76.1319145, 10.2792173 ], [ 76.1318158, 10.2794602 ], [ 76.1316512, 10.2799272 ], [ 76.1315113, 10.2805912 ], [ 76.131429, 10.2810932 ], [ 76.1312946, 10.2815818 ], [ 76.1312342, 10.2817896 ], [ 76.1311519, 10.282208 ], [ 76.1310312, 10.2828423 ], [ 76.1310202, 10.2831878 ], [ 76.1310641, 10.2832958 ], [ 76.1310504, 10.2834118 ], [ 76.1309654, 10.2838356 ], [ 76.1308556, 10.2842081 ], [ 76.1307816, 10.2845941 ], [ 76.1306883, 10.2850178 ], [ 76.1306883, 10.2852824 ], [ 76.1306526, 10.2856009 ], [ 76.130595, 10.2858006 ], [ 76.130499, 10.2859437 ], [ 76.1303427, 10.2861245 ], [ 76.1302494, 10.2864619 ], [ 76.1301753, 10.2866589 ], [ 76.1300793, 10.2871232 ], [ 76.1300354, 10.2873904 ], [ 76.1300738, 10.2876279 ], [ 76.130115, 10.2878519 ], [ 76.1300601, 10.2879815 ], [ 76.1299284, 10.2883405 ], [ 76.1298571, 10.288497 ], [ 76.1297364, 10.2889721 ], [ 76.12958, 10.2894714 ], [ 76.1294621, 10.2899114 ], [ 76.1293112, 10.2904107 ], [ 76.1291823, 10.2908264 ], [ 76.1290863, 10.2912933 ], [ 76.1289793, 10.2916658 ], [ 76.128897, 10.2919384 ], [ 76.1287735, 10.2922191 ], [ 76.1286391, 10.2927535 ], [ 76.1285623, 10.2932448 ], [ 76.1284745, 10.2935282 ], [ 76.1283483, 10.2939357 ], [ 76.1281782, 10.2944324 ], [ 76.1280822, 10.2948723 ], [ 76.1280274, 10.2951503 ], [ 76.1272374, 10.2976748 ], [ 76.1263063, 10.3003314 ], [ 76.1254684, 10.3027896 ], [ 76.1250183, 10.3045148 ], [ 76.1241959, 10.3077669 ], [ 76.1233424, 10.3103929 ], [ 76.122582, 10.3122708 ], [ 76.122132, 10.3137517 ], [ 76.1215112, 10.3157975 ], [ 76.1206578, 10.3181334 ], [ 76.1200525, 10.3199349 ], [ 76.119168, 10.3223013 ], [ 76.1182525, 10.3246982 ], [ 76.1177093, 10.3264234 ], [ 76.1169645, 10.3285607 ], [ 76.1163592, 10.3303163 ], [ 76.1161575, 10.3306064 ], [ 76.1158937, 10.3316598 ], [ 76.1156454, 10.3326216 ], [ 76.1147298, 10.3345604 ], [ 76.1142488, 10.336026 ], [ 76.1136591, 10.3371709 ], [ 76.1133487, 10.338438 ], [ 76.1132401, 10.3388808 ], [ 76.1128522, 10.3396441 ], [ 76.1124952, 10.3407585 ], [ 76.1118745, 10.3422088 ], [ 76.1112383, 10.3442391 ], [ 76.1104779, 10.3465748 ], [ 76.1097485, 10.3483761 ], [ 76.1092054, 10.3498111 ], [ 76.1087864, 10.3513377 ], [ 76.107995, 10.353429 ], [ 76.1072967, 10.3555204 ], [ 76.1066139, 10.3571996 ], [ 76.1058471, 10.3591074 ], [ 76.104885, 10.3616719 ], [ 76.1040159, 10.3637785 ], [ 76.1030849, 10.3663735 ], [ 76.1020917, 10.3689227 ], [ 76.1010675, 10.3714566 ], [ 76.1002451, 10.3737616 ], [ 76.0997174, 10.3754101 ], [ 76.0988329, 10.3770739 ], [ 76.0984915, 10.3780814 ], [ 76.0970328, 10.381989 ], [ 76.0960241, 10.3843702 ], [ 76.0948913, 10.3870413 ], [ 76.093805, 10.3897888 ], [ 76.0930447, 10.3917273 ], [ 76.0922532, 10.3936352 ], [ 76.0913687, 10.3960163 ], [ 76.0900342, 10.3996032 ], [ 76.0887927, 10.4024574 ], [ 76.0879392, 10.404701 ], [ 76.087303, 10.4061663 ], [ 76.086496, 10.4083031 ], [ 76.0856581, 10.410394 ], [ 76.0848201, 10.4122866 ], [ 76.0840752, 10.4144234 ], [ 76.0831286, 10.4166364 ], [ 76.0820423, 10.4194141 ], [ 76.0803354, 10.4235654 ], [ 76.0789387, 10.4267857 ], [ 76.0782094, 10.4284187 ], [ 76.0771697, 10.4311505 ], [ 76.0761144, 10.4338366 ], [ 76.074842, 10.4366752 ], [ 76.073585, 10.4395138 ], [ 76.0726694, 10.4414367 ], [ 76.0721728, 10.4427797 ], [ 76.0711952, 10.445023 ], [ 76.0702021, 10.4474648 ], [ 76.0689761, 10.4499828 ], [ 76.0677967, 10.4523177 ], [ 76.066726, 10.4545762 ], [ 76.0659035, 10.4563464 ], [ 76.0643673, 10.4599021 ], [ 76.0631568, 10.462359 ], [ 76.0620395, 10.464648 ], [ 76.0612016, 10.4659603 ], [ 76.0606429, 10.4669064 ], [ 76.0599912, 10.4680967 ], [ 76.0591221, 10.4698516 ], [ 76.0578921, 10.4720765 ], [ 76.0565095, 10.4749898 ], [ 76.0544905, 10.4788742 ], [ 76.0540296, 10.4800827 ], [ 76.0532615, 10.4818091 ], [ 76.0520765, 10.4837512 ], [ 76.0513742, 10.4851539 ], [ 76.0506939, 10.4867508 ], [ 76.0499038, 10.4878513 ], [ 76.048214, 10.4911529 ], [ 76.0462828, 10.494735 ], [ 76.0447027, 10.4979071 ], [ 76.0431445, 10.5006475 ], [ 76.0402696, 10.5051916 ], [ 76.0398968, 10.5058477 ], [ 76.0398386, 10.5062177 ], [ 76.0398728, 10.5067386 ], [ 76.0366702, 10.5103662 ], [ 76.0366109, 10.5104899 ], [ 76.0366031, 10.5107378 ], [ 76.0362772, 10.5113024 ], [ 76.0358272, 10.512111 ], [ 76.0346514, 10.5134774 ], [ 76.0339492, 10.5142974 ], [ 76.0307451, 10.5207921 ], [ 76.0289819, 10.5245365 ], [ 76.0272941, 10.5282842 ], [ 76.0269152, 10.5291678 ], [ 76.0264324, 10.5302034 ], [ 76.02618, 10.5312499 ], [ 76.0262294, 10.5314225 ], [ 76.0260868, 10.531676 ], [ 76.0258673, 10.5318594 ], [ 76.0256369, 10.5323772 ], [ 76.0254449, 10.5329814 ], [ 76.0251376, 10.5335639 ], [ 76.0247316, 10.5344162 ], [ 76.0244353, 10.5349933 ], [ 76.0240403, 10.5355921 ], [ 76.0234264, 10.5369261 ], [ 76.0228678, 10.5384365 ], [ 76.0222316, 10.5395197 ], [ 76.0215332, 10.5409233 ], [ 76.0210838, 10.5420033 ], [ 76.0209686, 10.5424833 ], [ 76.0207766, 10.5432061 ], [ 76.0204255, 10.5440368 ], [ 76.0199536, 10.5450616 ], [ 76.0195202, 10.5460217 ], [ 76.0183884, 10.5463966 ], [ 76.0178675, 10.5463983 ], [ 76.0179998, 10.5471711 ], [ 76.0174806, 10.5476882 ], [ 76.0174857, 10.5492345 ], [ 76.0138654, 10.5572356 ], [ 76.0139979, 10.5577506 ], [ 76.0134768, 10.5577523 ], [ 76.0071379, 10.5709165 ], [ 76.0058406, 10.5724669 ], [ 76.0058431, 10.5732401 ], [ 76.0020909, 10.580726 ], [ 76.00157, 10.5807277 ], [ 76.0010548, 10.5825334 ], [ 76.0005339, 10.5825351 ], [ 75.9960108, 10.5936315 ], [ 75.9953608, 10.5938914 ], [ 75.9934249, 10.5995674 ], [ 75.9890295, 10.6098902 ], [ 75.9891635, 10.6109207 ], [ 75.9886428, 10.6110507 ], [ 75.9834742, 10.6240824 ], [ 75.9829533, 10.6240841 ], [ 75.9830847, 10.6245991 ], [ 75.9816638, 10.6282117 ], [ 75.9811427, 10.6282134 ], [ 75.976616, 10.6385366 ], [ 75.976749, 10.6393092 ], [ 75.975969, 10.6398271 ], [ 75.9767507, 10.6398248 ], [ 75.9535912, 10.6909259 ], [ 75.9416855, 10.71725 ], [ 75.9401331, 10.7208629 ], [ 75.9401356, 10.7216361 ], [ 75.9374, 10.726899810398827 ], [ 75.9363794, 10.7288636 ], [ 75.9361212, 10.7296376 ], [ 75.9351283, 10.732288 ], [ 75.9350918, 10.732939 ], [ 75.9343612, 10.7345285 ], [ 75.9317777, 10.7408834 ], [ 75.9268192, 10.7520993 ], [ 75.9185255, 10.7740694 ], [ 75.91794, 10.7755547 ], [ 75.9171492, 10.776906 ], [ 75.916029, 10.7790826 ], [ 75.9152485, 10.7808193 ], [ 75.9149587, 10.7812401 ], [ 75.9145592, 10.7816689 ], [ 75.9144068, 10.7819926 ], [ 75.9143574, 10.7823688 ], [ 75.9142606, 10.7825614 ], [ 75.9137183, 10.7834358 ], [ 75.9135564, 10.7838499 ], [ 75.9132887, 10.7842585 ], [ 75.9126256, 10.7848674 ], [ 75.9121644, 10.7852962 ], [ 75.9120305, 10.7853751 ], [ 75.9117711, 10.7856037 ], [ 75.9116158, 10.7856317 ], [ 75.9112542, 10.785448 ], [ 75.9111554, 10.7853367 ], [ 75.911108, 10.7852639 ], [ 75.9109927, 10.7852962 ], [ 75.9104525, 10.7849727 ], [ 75.9103749, 10.7848087 ], [ 75.9103441, 10.7846732 ], [ 75.9102596, 10.7846085 ], [ 75.9101156, 10.7846065 ], [ 75.9100805, 10.7846631 ], [ 75.9100249, 10.7846934 ], [ 75.9099796, 10.7849584 ], [ 75.9101217, 10.7851182 ], [ 75.9103512, 10.7851087 ], [ 75.9120127, 10.7861172 ], [ 75.9115145, 10.7874477 ], [ 75.9110915, 10.7885857 ], [ 75.9101415, 10.78749 ], [ 75.9081997, 10.7863108 ], [ 75.9081778, 10.7865441 ], [ 75.9096317, 10.7874529 ], [ 75.9104436, 10.7882876 ], [ 75.9104041, 10.7907753 ], [ 75.909226988788561, 10.795638985937501 ], [ 75.9021157, 10.825022 ], [ 75.8921484, 10.8712486 ], [ 75.886616, 10.897918 ], [ 75.8795169, 10.9305791 ], [ 75.87383, 10.9532698 ], [ 75.8673489, 10.9788814 ], [ 75.8617062, 10.9996952 ], [ 75.8571901, 11.0164602 ], [ 75.8571908, 11.0167178 ], [ 75.8564873, 11.0196448 ], [ 75.8563524, 11.020206 ], [ 75.8561713, 11.0209596 ], [ 75.8490699, 11.0505029 ], [ 75.8314989, 11.11086 ], [ 75.8255971, 11.1234681 ], [ 75.8256852, 11.1242297 ], [ 75.825629, 11.125352 ], [ 75.82532, 11.125414 ], [ 75.825071, 11.125574 ], [ 75.824799, 11.125769 ], [ 75.824616, 11.125889 ], [ 75.824407, 11.126095 ], [ 75.824246, 11.126326 ], [ 75.824072, 11.126726 ], [ 75.823731, 11.127389 ], [ 75.823363, 11.128125 ], [ 75.823022, 11.128923 ], [ 75.822752, 11.129611 ], [ 75.822532, 11.130164 ], [ 75.822323, 11.130588 ], [ 75.821725, 11.131986 ], [ 75.821235, 11.133158 ], [ 75.820709, 11.134366 ], [ 75.820513, 11.134836 ], [ 75.820525, 11.134824 ], [ 75.820452, 11.135208 ], [ 75.820427, 11.13528 ], [ 75.82039, 11.135401 ], [ 75.820296, 11.135484 ], [ 75.820077, 11.135882 ], [ 75.819694, 11.136836 ], [ 75.819169, 11.138176 ], [ 75.818788, 11.139115 ], [ 75.818315, 11.140186 ], [ 75.817928, 11.14122 ], [ 75.817486, 11.142209 ], [ 75.817061, 11.143284 ], [ 75.816706, 11.14413 ], [ 75.816218, 11.14512 ], [ 75.815382, 11.146691 ], [ 75.814829, 11.14762 ], [ 75.81427, 11.148419 ], [ 75.813495, 11.149421 ], [ 75.813124, 11.149754 ], [ 75.812842, 11.150054 ], [ 75.812608, 11.150257 ], [ 75.812339, 11.150366 ], [ 75.812065, 11.150441 ], [ 75.811813, 11.150513 ], [ 75.811705, 11.150464 ], [ 75.811543, 11.150305 ], [ 75.811467, 11.150378 ], [ 75.811246, 11.150523 ], [ 75.811003, 11.150559 ], [ 75.810894, 11.150499 ], [ 75.810736, 11.150656 ], [ 75.810404, 11.150873 ], [ 75.810161, 11.150958 ], [ 75.810039, 11.150934 ], [ 75.809794, 11.151079 ], [ 75.80942, 11.151394 ], [ 75.809122, 11.151636 ], [ 75.808889, 11.151914 ], [ 75.808865, 11.151938 ], [ 75.808683, 11.152299 ], [ 75.808394, 11.152682 ], [ 75.808133, 11.153021 ], [ 75.807864, 11.153292 ], [ 75.807611, 11.153399 ], [ 75.807358, 11.15347 ], [ 75.807247, 11.153603 ], [ 75.806819, 11.154002 ], [ 75.806277, 11.154499 ], [ 75.805868, 11.154802 ], [ 75.805352, 11.155092 ], [ 75.80485, 11.155298 ], [ 75.804345, 11.15542 ], [ 75.803954, 11.155323 ], [ 75.803844, 11.155263 ], [ 75.803733, 11.155178 ], [ 75.803659, 11.155082 ], [ 75.803585, 11.154973 ], [ 75.803523, 11.154864 ], [ 75.803486, 11.154743 ], [ 75.803449, 11.154622 ], [ 75.803424, 11.154501 ], [ 75.8034, 11.154404 ], [ 75.803289, 11.154452 ], [ 75.803265, 11.154573 ], [ 75.803302, 11.154694 ], [ 75.803327, 11.154803 ], [ 75.803204, 11.154755 ], [ 75.803093, 11.154767 ], [ 75.803179, 11.154864 ], [ 75.803179, 11.154973 ], [ 75.803068, 11.154888 ], [ 75.802982, 11.154949 ], [ 75.803069, 11.155046 ], [ 75.80318, 11.155288 ], [ 75.803094, 11.155494 ], [ 75.802934, 11.1557 ], [ 75.802836, 11.155918 ], [ 75.802737, 11.15616 ], [ 75.802491, 11.156534 ], [ 75.802109, 11.157006 ], [ 75.801728, 11.157515 ], [ 75.801419, 11.157843 ], [ 75.801136, 11.158085 ], [ 75.800803, 11.158328 ], [ 75.800593, 11.15845 ], [ 75.800396, 11.158426 ], [ 75.7962203, 11.1557886 ], [ 75.7960723, 11.1558126 ], [ 75.7960773, 11.1559366 ], [ 75.8038447, 11.1607419 ], [ 75.8033316, 11.1616491 ], [ 75.802663, 11.162831 ], [ 75.796267, 11.158772 ], [ 75.796169, 11.158784 ], [ 75.796119, 11.158857 ], [ 75.802485, 11.16288 ], [ 75.802569, 11.162917 ], [ 75.802597, 11.163189 ], [ 75.802542, 11.16346 ], [ 75.802512, 11.163734 ], [ 75.802481, 11.164007 ], [ 75.802396, 11.16428 ], [ 75.80231, 11.164552 ], [ 75.802197, 11.164825 ], [ 75.802087, 11.165096 ], [ 75.801976, 11.165367 ], [ 75.801893, 11.165638 ], [ 75.801783, 11.165909 ], [ 75.801755, 11.16618 ], [ 75.80159, 11.166424 ], [ 75.801452, 11.166668 ], [ 75.801342, 11.166939 ], [ 75.801207, 11.16721 ], [ 75.801101, 11.167453 ], [ 75.801021, 11.167725 ], [ 75.800965, 11.167996 ], [ 75.800883, 11.168267 ], [ 75.800855, 11.168538 ], [ 75.800798, 11.168809 ], [ 75.800714, 11.169079 ], [ 75.80063, 11.16935 ], [ 75.800602, 11.16962 ], [ 75.800493, 11.169891 ], [ 75.800358, 11.170164 ], [ 75.800302, 11.170434 ], [ 75.800219, 11.170704 ], [ 75.800136, 11.170975 ], [ 75.800053, 11.171245 ], [ 75.799888, 11.171462 ], [ 75.799833, 11.171732 ], [ 75.79975, 11.172003 ], [ 75.799507, 11.172577 ], [ 75.799399, 11.172819 ], [ 75.79929, 11.173088 ], [ 75.799153, 11.17336 ], [ 75.799042, 11.173631 ], [ 75.798932, 11.173903 ], [ 75.798795, 11.174147 ], [ 75.798629, 11.174391 ], [ 75.798574, 11.174635 ], [ 75.798409, 11.17488 ], [ 75.798244, 11.175097 ], [ 75.798079, 11.175314 ], [ 75.798023, 11.175585 ], [ 75.798078, 11.175857 ], [ 75.798023, 11.176128 ], [ 75.797995, 11.176399 ], [ 75.797968, 11.17667 ], [ 75.797885, 11.176941 ], [ 75.79783, 11.177212 ], [ 75.797748, 11.177483 ], [ 75.797666, 11.177754 ], [ 75.797556, 11.178025 ], [ 75.797446, 11.178297 ], [ 75.797254, 11.178514 ], [ 75.797171, 11.178812 ], [ 75.796979, 11.179435 ], [ 75.796841, 11.179706 ], [ 75.796731, 11.179977 ], [ 75.796621, 11.180248 ], [ 75.796511, 11.180518 ], [ 75.796401, 11.180789 ], [ 75.796291, 11.181059 ], [ 75.796208, 11.181329 ], [ 75.796038, 11.181862 ], [ 75.795958, 11.18205 ], [ 75.795905, 11.182319 ], [ 75.795797, 11.182589 ], [ 75.795661, 11.182832 ], [ 75.795549, 11.183105 ], [ 75.79544, 11.183375 ], [ 75.795331, 11.183646 ], [ 75.795193, 11.183917 ], [ 75.795084, 11.184161 ], [ 75.794975, 11.184431 ], [ 75.794838, 11.184702 ], [ 75.794727, 11.184974 ], [ 75.794615, 11.185246 ], [ 75.794531, 11.185519 ], [ 75.794418, 11.185791 ], [ 75.794306, 11.186064 ], [ 75.794195, 11.186335 ], [ 75.794085, 11.186606 ], [ 75.794003, 11.186877 ], [ 75.793895, 11.187147 ], [ 75.793787, 11.187418 ], [ 75.793652, 11.187716 ], [ 75.793544, 11.187987 ], [ 75.793461, 11.188258 ], [ 75.79335, 11.18853 ], [ 75.793266, 11.188801 ], [ 75.793155, 11.189073 ], [ 75.793017, 11.189344 ], [ 75.792961, 11.189615 ], [ 75.792852, 11.189859 ], [ 75.792742, 11.19013 ], [ 75.792605, 11.190375 ], [ 75.792479, 11.19115 ], [ 75.792396, 11.191367 ], [ 75.792233, 11.191585 ], [ 75.792123, 11.191883 ], [ 75.792013, 11.192127 ], [ 75.791904, 11.192399 ], [ 75.791875, 11.192669 ], [ 75.79182, 11.19294 ], [ 75.791709, 11.193238 ], [ 75.791626, 11.193509 ], [ 75.791434, 11.193727 ], [ 75.791351, 11.193997 ], [ 75.791268, 11.194268 ], [ 75.79113, 11.194539 ], [ 75.79102, 11.19481 ], [ 75.79091, 11.195081 ], [ 75.7908, 11.195352 ], [ 75.79069, 11.195623 ], [ 75.79058, 11.195895 ], [ 75.79047, 11.196166 ], [ 75.79036, 11.196437 ], [ 75.790278, 11.196709 ], [ 75.790196, 11.19698 ], [ 75.790085, 11.197251 ], [ 75.789947, 11.197547 ], [ 75.789892, 11.19779 ], [ 75.789728, 11.198037 ], [ 75.789455, 11.198768 ], [ 75.789372, 11.198905 ], [ 75.789232, 11.199154 ], [ 75.789095, 11.199425 ], [ 75.788985, 11.199696 ], [ 75.788792, 11.199938 ], [ 75.788655, 11.200179 ], [ 75.788573, 11.20045 ], [ 75.788546, 11.200721 ], [ 75.788491, 11.200994 ], [ 75.788408, 11.201266 ], [ 75.78827, 11.201565 ], [ 75.788215, 11.20181 ], [ 75.788188, 11.202082 ], [ 75.788077, 11.202353 ], [ 75.787967, 11.202652 ], [ 75.787858, 11.202922 ], [ 75.787803, 11.203193 ], [ 75.787693, 11.203436 ], [ 75.787583, 11.203707 ], [ 75.787473, 11.203978 ], [ 75.787363, 11.204249 ], [ 75.787281, 11.204521 ], [ 75.787115, 11.204765 ], [ 75.786978, 11.205009 ], [ 75.787089, 11.20528 ], [ 75.787034, 11.205551 ], [ 75.786924, 11.205822 ], [ 75.786869, 11.206093 ], [ 75.786814, 11.206364 ], [ 75.786704, 11.206635 ], [ 75.786594, 11.206906 ], [ 75.786484, 11.20715 ], [ 75.786319, 11.207394 ], [ 75.786209, 11.207665 ], [ 75.786099, 11.207937 ], [ 75.7860663, 11.2080172 ], [ 75.785989, 11.208207 ], [ 75.785879, 11.208477 ], [ 75.78577, 11.208747 ], [ 75.78566, 11.209018 ], [ 75.78555, 11.209289 ], [ 75.785361, 11.209764 ], [ 75.785279, 11.210035 ], [ 75.785169, 11.210305 ], [ 75.785115, 11.210576 ], [ 75.785032, 11.210847 ], [ 75.784867, 11.211091 ], [ 75.784757, 11.211362 ], [ 75.784701, 11.211634 ], [ 75.784647, 11.211904 ], [ 75.784509, 11.212149 ], [ 75.784344, 11.212393 ], [ 75.784233, 11.212664 ], [ 75.784123, 11.212936 ], [ 75.784013, 11.213207 ], [ 75.783903, 11.213477 ], [ 75.783793, 11.213748 ], [ 75.783711, 11.214019 ], [ 75.783574, 11.21429 ], [ 75.783464, 11.214534 ], [ 75.783354, 11.214832 ], [ 75.783272, 11.215076 ], [ 75.783217, 11.215347 ], [ 75.783152, 11.215956 ], [ 75.783042, 11.216227 ], [ 75.782878, 11.216443 ], [ 75.782768, 11.216714 ], [ 75.782658, 11.216985 ], [ 75.782549, 11.217255 ], [ 75.782439, 11.217526 ], [ 75.782328, 11.21777 ], [ 75.782163, 11.218014 ], [ 75.782025, 11.218258 ], [ 75.781915, 11.218529 ], [ 75.781833, 11.2188 ], [ 75.781723, 11.219071 ], [ 75.78164, 11.219342 ], [ 75.781585, 11.219613 ], [ 75.781558, 11.219884 ], [ 75.781448, 11.220155 ], [ 75.781283, 11.220372 ], [ 75.781173, 11.22067 ], [ 75.781035, 11.220914 ], [ 75.780898, 11.221185 ], [ 75.780816, 11.221456 ], [ 75.780706, 11.221728 ], [ 75.780568, 11.222404 ], [ 75.780431, 11.222676 ], [ 75.780266, 11.223283 ], [ 75.780239, 11.223301 ], [ 75.780212, 11.223392 ], [ 75.780202, 11.223483 ], [ 75.780193, 11.223574 ], [ 75.780175, 11.223665 ], [ 75.780139, 11.223756 ], [ 75.780111, 11.223847 ], [ 75.780056, 11.223965 ], [ 75.780028, 11.224029 ], [ 75.77999, 11.224112 ], [ 75.779944, 11.224194 ], [ 75.779897, 11.224277 ], [ 75.779851, 11.224368 ], [ 75.779814, 11.224459 ], [ 75.779777, 11.22455 ], [ 75.779749, 11.224642 ], [ 75.779703, 11.224742 ], [ 75.779684, 11.224825 ], [ 75.779675, 11.224916 ], [ 75.779684, 11.225008 ], [ 75.779692, 11.225099 ], [ 75.779683, 11.22519 ], [ 75.779637, 11.225272 ], [ 75.7796, 11.225364 ], [ 75.779582, 11.225455 ], [ 75.779572, 11.225546 ], [ 75.779544, 11.225637 ], [ 75.77947, 11.22571 ], [ 75.779415, 11.225792 ], [ 75.7790237, 11.2260982 ], [ 75.7785609, 11.225805 ], [ 75.7784773, 11.2258523 ], [ 75.7784741, 11.225909 ], [ 75.7785127, 11.2259532 ], [ 75.7796118, 11.226735 ], [ 75.77975, 11.2273969 ], [ 75.7798528, 11.2275829 ], [ 75.7793772, 11.2281188 ], [ 75.7780595, 11.2271889 ], [ 75.7779856, 11.2272173 ], [ 75.7779888, 11.227274 ], [ 75.7780338, 11.227337 ], [ 75.7786862, 11.227813 ], [ 75.7787987, 11.2281629 ], [ 75.7789079, 11.2282007 ], [ 75.7789537, 11.228295 ], [ 75.779006, 11.228367 ], [ 75.778996, 11.228467 ], [ 75.778986, 11.228558 ], [ 75.778968, 11.228649 ], [ 75.778949, 11.22874 ], [ 75.778903, 11.228831 ], [ 75.778821, 11.229005 ], [ 75.778785, 11.229077 ], [ 75.778767, 11.229177 ], [ 75.77874, 11.229267 ], [ 75.778712, 11.229358 ], [ 75.778676, 11.229449 ], [ 75.778631, 11.229539 ], [ 75.778594, 11.22963 ], [ 75.778558, 11.22972 ], [ 75.778521, 11.229821 ], [ 75.778493, 11.229903 ], [ 75.778447, 11.229985 ], [ 75.778392, 11.230057 ], [ 75.778355, 11.230149 ], [ 75.77829, 11.230222 ], [ 75.778251, 11.230315 ], [ 75.778204, 11.230398 ], [ 75.778165, 11.23049 ], [ 75.778155, 11.230581 ], [ 75.778107, 11.230673 ], [ 75.778071, 11.230764 ], [ 75.777934, 11.230854 ], [ 75.777851, 11.2309 ], [ 75.777769, 11.230917 ], [ 75.777833, 11.231 ], [ 75.777879, 11.231082 ], [ 75.777851, 11.231173 ], [ 75.777804, 11.231274 ], [ 75.777758, 11.231356 ], [ 75.777721, 11.231447 ], [ 75.777656, 11.23152 ], [ 75.77761, 11.231602 ], [ 75.777573, 11.231693 ], [ 75.777555, 11.231784 ], [ 75.777499, 11.231866 ], [ 75.777407, 11.231894 ], [ 75.777314, 11.231913 ], [ 75.777286, 11.231986 ], [ 75.777379, 11.232013 ], [ 75.777462, 11.23204 ], [ 75.777462, 11.23214 ], [ 75.777435, 11.232231 ], [ 75.777398, 11.232313 ], [ 75.777352, 11.232404 ], [ 75.777315, 11.232496 ], [ 75.777268, 11.232569 ], [ 75.777222, 11.232651 ], [ 75.777185, 11.232742 ], [ 75.777129, 11.232815 ], [ 75.777083, 11.232897 ], [ 75.77699, 11.232934 ], [ 75.776935, 11.232998 ], [ 75.777027, 11.233016 ], [ 75.777083, 11.233079 ], [ 75.777018, 11.233152 ], [ 75.776963, 11.233234 ], [ 75.776926, 11.233325 ], [ 75.776889, 11.233416 ], [ 75.776852, 11.233507 ], [ 75.776805, 11.233598 ], [ 75.776759, 11.23369 ], [ 75.776657, 11.23386 ], [ 75.776603, 11.233864 ], [ 75.776538, 11.23383 ], [ 75.776454, 11.233864 ], [ 75.776429, 11.233963 ], [ 75.776528, 11.233963 ], [ 75.776603, 11.233993 ], [ 75.776563, 11.234081 ], [ 75.776484, 11.23418 ], [ 75.776388, 11.234353 ], [ 75.776313, 11.234536 ], [ 75.776268, 11.234636 ], [ 75.776214, 11.234724 ], [ 75.776144, 11.234842 ], [ 75.776045, 11.234832 ], [ 75.776035, 11.234886 ], [ 75.776089, 11.234951 ], [ 75.776149, 11.234966 ], [ 75.776158, 11.235026 ], [ 75.776087, 11.235105 ], [ 75.776012, 11.23517 ], [ 75.775971, 11.235308 ], [ 75.775904, 11.235566 ], [ 75.775773, 11.235866 ], [ 75.775649, 11.235832 ], [ 75.775564, 11.235837 ], [ 75.775574, 11.235891 ], [ 75.775643, 11.235945 ], [ 75.775752, 11.23596 ], [ 75.775747, 11.236034 ], [ 75.775677, 11.236098 ], [ 75.775657, 11.236216 ], [ 75.775637, 11.236306 ], [ 75.775522, 11.236433 ], [ 75.775413, 11.236639 ], [ 75.775398, 11.236669 ], [ 75.775343, 11.236812 ], [ 75.775238, 11.237033 ], [ 75.775139, 11.237215 ], [ 75.775134, 11.237234 ], [ 75.775068, 11.237392 ], [ 75.774988, 11.237555 ], [ 75.774903, 11.237766 ], [ 75.774888, 11.237904 ], [ 75.774822, 11.238012 ], [ 75.774758, 11.238022 ], [ 75.774676, 11.238006 ], [ 75.774602, 11.238 ], [ 75.774558, 11.238034 ], [ 75.774573, 11.238099 ], [ 75.774626, 11.238119 ], [ 75.77468, 11.238115 ], [ 75.774738, 11.238145 ], [ 75.774757, 11.238194 ], [ 75.774762, 11.238249 ], [ 75.774723, 11.238386 ], [ 75.77468, 11.238445 ], [ 75.774617, 11.238493 ], [ 75.774544, 11.238606 ], [ 75.77453, 11.238705 ], [ 75.774511, 11.238828 ], [ 75.774452, 11.238977 ], [ 75.774399, 11.239021 ], [ 75.774325, 11.239091 ], [ 75.774246, 11.239091 ], [ 75.774251, 11.239145 ], [ 75.774324, 11.239219 ], [ 75.774387, 11.239268 ], [ 75.774364, 11.239411 ], [ 75.774324, 11.239626 ], [ 75.774277, 11.239822 ], [ 75.774252, 11.239915 ], [ 75.774247, 11.23992 ], [ 75.774227, 11.239964 ], [ 75.774207, 11.240013 ], [ 75.774187, 11.240057 ], [ 75.774148, 11.240086 ], [ 75.774099, 11.240106 ], [ 75.774055, 11.240135 ], [ 75.774005, 11.240125 ], [ 75.773961, 11.240149 ], [ 75.773971, 11.240199 ], [ 75.774, 11.240233 ], [ 75.774039, 11.240273 ], [ 75.774074, 11.240312 ], [ 75.774098, 11.240357 ], [ 75.774118, 11.240406 ], [ 75.774128, 11.240455 ], [ 75.774123, 11.240504 ], [ 75.774099, 11.240548 ], [ 75.774089, 11.240603 ], [ 75.77409, 11.240657 ], [ 75.774085, 11.240706 ], [ 75.774066, 11.240755 ], [ 75.774047, 11.240804 ], [ 75.774023, 11.240859 ], [ 75.774008, 11.240908 ], [ 75.773984, 11.240957 ], [ 75.773945, 11.240997 ], [ 75.773905, 11.241017 ], [ 75.773865, 11.241057 ], [ 75.773756, 11.241097 ], [ 75.773765, 11.241141 ], [ 75.773735, 11.241185 ], [ 75.773709, 11.24123 ], [ 75.773709, 11.241284 ], [ 75.773728, 11.241327 ], [ 75.773747, 11.241376 ], [ 75.773761, 11.241425 ], [ 75.773766, 11.241474 ], [ 75.773741, 11.241518 ], [ 75.773721, 11.241558 ], [ 75.773716, 11.241612 ], [ 75.773716, 11.241666 ], [ 75.773715, 11.241719 ], [ 75.773696, 11.241774 ], [ 75.773686, 11.241818 ], [ 75.773676, 11.241872 ], [ 75.773656, 11.241976 ], [ 75.773651, 11.242001 ], [ 75.773637, 11.24205 ], [ 75.773608, 11.242093 ], [ 75.773574, 11.242126 ], [ 75.773545, 11.242164 ], [ 75.773521, 11.242208 ], [ 75.773486, 11.242246 ], [ 75.773467, 11.242295 ], [ 75.773468, 11.242344 ], [ 75.773473, 11.242393 ], [ 75.773478, 11.242443 ], [ 75.773473, 11.242497 ], [ 75.773468, 11.242556 ], [ 75.773473, 11.242601 ], [ 75.773483, 11.242651 ], [ 75.773483, 11.242705 ], [ 75.773484, 11.242755 ], [ 75.773479, 11.242809 ], [ 75.773454, 11.242849 ], [ 75.773425, 11.242893 ], [ 75.773405, 11.242942 ], [ 75.773385, 11.242992 ], [ 75.773355, 11.243031 ], [ 75.77335, 11.243081 ], [ 75.77334, 11.243131 ], [ 75.773305, 11.243176 ], [ 75.773279, 11.24322 ], [ 75.773249, 11.24326 ], [ 75.773223, 11.243305 ], [ 75.773228, 11.243354 ], [ 75.773228, 11.243409 ], [ 75.773218, 11.243453 ], [ 75.773218, 11.243498 ], [ 75.773283, 11.243603 ], [ 75.773343, 11.243618 ], [ 75.773413, 11.243688 ], [ 75.773363, 11.243718 ], [ 75.773313, 11.243802 ], [ 75.773277, 11.243902 ], [ 75.773242, 11.243986 ], [ 75.773211, 11.244115 ], [ 75.773185, 11.244249 ], [ 75.77318, 11.244378 ], [ 75.773135, 11.244372 ], [ 75.773061, 11.244377 ], [ 75.773051, 11.244421 ], [ 75.773081, 11.244456 ], [ 75.773135, 11.244459 ], [ 75.773155, 11.244539 ], [ 75.773125, 11.244628 ], [ 75.773095, 11.244732 ], [ 75.773069, 11.244856 ], [ 75.773054, 11.244959 ], [ 75.772999, 11.245048 ], [ 75.772989, 11.245206 ], [ 75.772999, 11.245285 ], [ 75.77293, 11.245432 ], [ 75.77287, 11.245417 ], [ 75.772765, 11.245406 ], [ 75.772735, 11.245481 ], [ 75.77279, 11.245515 ], [ 75.77287, 11.245506 ], [ 75.77291, 11.245545 ], [ 75.77287, 11.245654 ], [ 75.772919, 11.245713 ], [ 75.77287, 11.245767 ], [ 75.772845, 11.245865 ], [ 75.772835, 11.246003 ], [ 75.772785, 11.246156 ], [ 75.772731, 11.246333 ], [ 75.772681, 11.246462 ], [ 75.772616, 11.246501 ], [ 75.772555, 11.246477 ], [ 75.77249, 11.246497 ], [ 75.7725, 11.246566 ], [ 75.772556, 11.246595 ], [ 75.772631, 11.246605 ], [ 75.772646, 11.246707 ], [ 75.772639, 11.2469 ], [ 75.772588, 11.247112 ], [ 75.772479, 11.247294 ], [ 75.772437, 11.247516 ], [ 75.772344, 11.247776 ], [ 75.772261, 11.247998 ], [ 75.772138, 11.248269 ], [ 75.772031, 11.248513 ], [ 75.7719, 11.248829 ], [ 75.77178, 11.249095 ], [ 75.771784, 11.249105 ], [ 75.771809, 11.249154 ], [ 75.7717, 11.249198 ], [ 75.771443, 11.249123 ], [ 75.771418, 11.249192 ], [ 75.77167, 11.249287 ], [ 75.77164, 11.249346 ], [ 75.771699, 11.249376 ], [ 75.771792, 11.249391 ], [ 75.771767, 11.24946 ], [ 75.771678, 11.249504 ], [ 75.771643, 11.249583 ], [ 75.771598, 11.24974 ], [ 75.771567, 11.249867 ], [ 75.771461277533049, 11.2501 ], [ 75.771258, 11.250548 ], [ 75.77099, 11.251396 ], [ 75.770629199265585, 11.252338428906251 ], [ 75.770575, 11.25248 ], [ 75.770556351581064, 11.25253842890625 ], [ 75.770132, 11.253868 ], [ 75.7700838, 11.2540086 ], [ 75.769888, 11.254579 ], [ 75.769703, 11.255093 ], [ 75.769551, 11.255316 ], [ 75.769359, 11.255706 ], [ 75.769116, 11.256319 ], [ 75.769116, 11.256333 ], [ 75.768874, 11.256889 ], [ 75.7688319, 11.2569873 ], [ 75.768538, 11.257674 ], [ 75.768272, 11.258522 ], [ 75.768061, 11.259246 ], [ 75.767961, 11.259623 ], [ 75.767692, 11.260167 ], [ 75.767538, 11.260836 ], [ 75.767214, 11.2617 ], [ 75.766703, 11.262802 ], [ 75.766334, 11.263861 ], [ 75.766015, 11.264833 ], [ 75.765574, 11.266242 ], [ 75.7651435, 11.2678255 ], [ 75.7645494, 11.269597 ], [ 75.7643148, 11.2705042 ], [ 75.7636956, 11.2722804 ], [ 75.7632997, 11.2732369 ], [ 75.7627813, 11.2746931 ], [ 75.7626208, 11.2751437 ], [ 75.7619487, 11.2770991 ], [ 75.7614865, 11.2785147 ], [ 75.7609122, 11.2801471 ], [ 75.7606967, 11.2807071 ], [ 75.760367, 11.281403 ], [ 75.760155, 11.281871 ], [ 75.759798, 11.282999 ], [ 75.759621, 11.283238 ], [ 75.759528, 11.283723 ], [ 75.759325, 11.284147 ], [ 75.759208, 11.284582 ], [ 75.758982, 11.285209 ], [ 75.75872, 11.285979 ], [ 75.758488, 11.286751 ], [ 75.758183, 11.287525 ], [ 75.758051, 11.28799 ], [ 75.757779, 11.28868 ], [ 75.757566, 11.289101 ], [ 75.757356, 11.289781 ], [ 75.757096, 11.290523 ], [ 75.756983, 11.290933 ], [ 75.756815, 11.291243 ], [ 75.756719, 11.291573 ], [ 75.756499, 11.292204 ], [ 75.756215, 11.293007 ], [ 75.755857, 11.293867 ], [ 75.755265, 11.295225 ], [ 75.754979, 11.296011 ], [ 75.754688, 11.296696 ], [ 75.754294, 11.297624 ], [ 75.7538692, 11.2991494 ], [ 75.7525091, 11.3026518 ], [ 75.7519302, 11.3037174 ], [ 75.7514301, 11.3049938 ], [ 75.7509268, 11.3066195 ], [ 75.7507197, 11.3070967 ], [ 75.749733, 11.30897 ], [ 75.74883, 11.311124 ], [ 75.748285, 11.312251 ], [ 75.748, 11.31277 ], [ 75.747628, 11.313615 ], [ 75.747097, 11.314482 ], [ 75.746487, 11.315249 ], [ 75.746148, 11.315727 ], [ 75.745865, 11.316091 ], [ 75.745831, 11.316136 ], [ 75.745741, 11.316347 ], [ 75.745775, 11.316502 ], [ 75.745764, 11.316502 ], [ 75.7436, 11.316183 ], [ 75.74334, 11.316051 ], [ 75.743238, 11.316073 ], [ 75.743181, 11.316184 ], [ 75.743204, 11.316306 ], [ 75.74334, 11.316306 ], [ 75.7470347, 11.3168911 ], [ 75.7470193, 11.3171633 ], [ 75.7470371, 11.3175615 ], [ 75.7469171, 11.3176604 ], [ 75.7467323, 11.317676 ], [ 75.7460964, 11.3200307 ], [ 75.7460534, 11.3200661 ], [ 75.7459892, 11.3200769 ], [ 75.7458449, 11.3201121 ], [ 75.7452648, 11.3202807 ], [ 75.7448801, 11.3205379 ], [ 75.7447401, 11.3207409 ], [ 75.7444836, 11.3210438 ], [ 75.7442913, 11.3209352 ], [ 75.7438657, 11.3208009 ], [ 75.743274, 11.3207637 ], [ 75.7428863, 11.3207152 ], [ 75.7425453, 11.3204865 ], [ 75.7421897, 11.3204322 ], [ 75.7420206, 11.3203636 ], [ 75.7422825, 11.3161832 ], [ 75.742385, 11.315497 ], [ 75.742453, 11.315275 ], [ 75.742486, 11.31513 ], [ 75.742362, 11.315053 ], [ 75.742237, 11.315031 ], [ 75.742094, 11.317685 ], [ 75.741867, 11.320445 ], [ 75.741711, 11.320809 ], [ 75.741543, 11.321223 ], [ 75.741543, 11.321639 ], [ 75.741163, 11.321847 ], [ 75.74074, 11.321763 ], [ 75.740402, 11.321678 ], [ 75.740275, 11.322054 ], [ 75.740065, 11.322469 ], [ 75.739811, 11.322762 ], [ 75.739558, 11.323137 ], [ 75.739135, 11.323303 ], [ 75.738713, 11.323469 ], [ 75.73829, 11.323468 ], [ 75.737908, 11.323383 ], [ 75.737782, 11.3238 ], [ 75.737741, 11.324215 ], [ 75.737318, 11.324339 ], [ 75.736893, 11.324296 ], [ 75.736809, 11.324711 ], [ 75.73698, 11.325127 ], [ 75.737023, 11.325542 ], [ 75.737024, 11.325999 ], [ 75.736983, 11.326414 ], [ 75.736558, 11.326538 ], [ 75.736219, 11.326787 ], [ 75.736262, 11.327161 ], [ 75.736687, 11.327036 ], [ 75.737069, 11.327036 ], [ 75.737114, 11.327451 ], [ 75.737158, 11.327865 ], [ 75.737074, 11.328279 ], [ 75.736905, 11.328694 ], [ 75.736736, 11.329108 ], [ 75.73644, 11.329441 ], [ 75.736356, 11.329855 ], [ 75.736314, 11.33027 ], [ 75.736018, 11.330603 ], [ 75.736103, 11.331017 ], [ 75.735977, 11.331391 ], [ 75.735384, 11.332076 ], [ 75.735299, 11.332491 ], [ 75.735045, 11.332822 ], [ 75.734791, 11.333195 ], [ 75.73441, 11.333569 ], [ 75.734071, 11.333776 ], [ 75.734072, 11.334191 ], [ 75.733945, 11.334607 ], [ 75.733989, 11.335022 ], [ 75.734159, 11.335437 ], [ 75.734075, 11.335852 ], [ 75.734203, 11.336267 ], [ 75.734542, 11.336598 ], [ 75.73501, 11.336639 ], [ 75.73535, 11.336888 ], [ 75.735733, 11.337053 ], [ 75.736115, 11.337218 ], [ 75.736242, 11.337632 ], [ 75.736284, 11.338047 ], [ 75.736371, 11.338461 ], [ 75.736541, 11.338874 ], [ 75.736669, 11.339288 ], [ 75.736796, 11.339702 ], [ 75.736753, 11.340117 ], [ 75.736711, 11.340532 ], [ 75.736669, 11.340948 ], [ 75.736584, 11.341363 ], [ 75.736457, 11.341779 ], [ 75.736246, 11.342112 ], [ 75.736077, 11.342528 ], [ 75.735908, 11.342902 ], [ 75.735866, 11.343317 ], [ 75.735612, 11.343692 ], [ 75.735443, 11.344107 ], [ 75.735529, 11.344522 ], [ 75.735868, 11.344769 ], [ 75.735784, 11.345185 ], [ 75.735741, 11.345602 ], [ 75.735742, 11.346018 ], [ 75.735784, 11.346434 ], [ 75.736166, 11.34668 ], [ 75.736252, 11.347539 ], [ 75.735887, 11.347448 ], [ 75.735527, 11.34743 ], [ 75.735198, 11.347799 ], [ 75.735038, 11.348114 ], [ 75.734756, 11.348263 ], [ 75.734687, 11.348505 ], [ 75.734524, 11.348825 ], [ 75.734269, 11.349354 ], [ 75.733876, 11.349909 ], [ 75.733819, 11.349986 ], [ 75.733706, 11.35014 ], [ 75.733632, 11.350333 ], [ 75.733518, 11.350488 ], [ 75.733311, 11.350937 ], [ 75.733163, 11.35124 ], [ 75.733048, 11.351577 ], [ 75.732826, 11.351882 ], [ 75.73274, 11.352144 ], [ 75.732591, 11.352528 ], [ 75.732439, 11.35287 ], [ 75.732148, 11.353867 ], [ 75.731737, 11.354698 ], [ 75.731416, 11.355854 ], [ 75.730768, 11.357667 ], [ 75.729533, 11.360792 ], [ 75.727802, 11.364698 ], [ 75.725667, 11.369479 ], [ 75.723748, 11.373768 ], [ 75.722217, 11.377289 ], [ 75.72104, 11.379968 ], [ 75.720179, 11.381967 ], [ 75.719553, 11.383079 ], [ 75.719382, 11.383641 ], [ 75.718579, 11.385252 ], [ 75.718214, 11.386021 ], [ 75.717504, 11.387405 ], [ 75.717038, 11.388346 ], [ 75.716618, 11.389307 ], [ 75.716504, 11.389884 ], [ 75.715898, 11.391248 ], [ 75.715206, 11.392847 ], [ 75.71465, 11.393399 ], [ 75.714397, 11.39364 ], [ 75.714267, 11.393656 ], [ 75.714119, 11.393609 ], [ 75.714001, 11.393481 ], [ 75.713883, 11.393354 ], [ 75.713724, 11.393354 ], [ 75.713558, 11.393275 ], [ 75.713407, 11.393195 ], [ 75.713264, 11.393259 ], [ 75.713105, 11.393323 ], [ 75.712947, 11.39337 ], [ 75.712874, 11.393514 ], [ 75.712962, 11.393657 ], [ 75.713112, 11.393737 ], [ 75.713206, 11.393978 ], [ 75.712992, 11.39422 ], [ 75.712759, 11.394644 ], [ 75.712518, 11.395103 ], [ 75.712248, 11.395684 ], [ 75.711971, 11.396188 ], [ 75.711893, 11.39629 ], [ 75.711749, 11.396411 ], [ 75.711673, 11.396565 ], [ 75.711561, 11.396702 ], [ 75.711391, 11.39672 ], [ 75.711278, 11.39684 ], [ 75.711403, 11.396976 ], [ 75.711321, 11.397128 ], [ 75.711342, 11.39728 ], [ 75.711172, 11.397266 ], [ 75.711161, 11.397421 ], [ 75.711331, 11.397469 ], [ 75.711469, 11.397569 ], [ 75.711376, 11.397727 ], [ 75.711316, 11.397903 ], [ 75.711222, 11.398046 ], [ 75.71111, 11.39819 ], [ 75.711015, 11.398351 ], [ 75.710917, 11.398494 ], [ 75.710801, 11.398636 ], [ 75.710737, 11.398795 ], [ 75.710672, 11.398972 ], [ 75.710555, 11.399115 ], [ 75.710473, 11.399276 ], [ 75.710495, 11.399452 ], [ 75.710465, 11.399631 ], [ 75.710365, 11.399777 ], [ 75.710102, 11.400207 ], [ 75.709749, 11.400866 ], [ 75.708985, 11.402599 ], [ 75.707239, 11.405876 ], [ 75.705692, 11.409137 ], [ 75.704129, 11.412459 ], [ 75.703078, 11.414557 ], [ 75.701883, 11.416659 ], [ 75.701462, 11.417406 ], [ 75.701223, 11.418028 ], [ 75.700858, 11.41859 ], [ 75.700197, 11.419824 ], [ 75.699926, 11.420384 ], [ 75.699593, 11.420833 ], [ 75.699261, 11.421339 ], [ 75.699105, 11.421903 ], [ 75.698713, 11.422413 ], [ 75.698436, 11.422924 ], [ 75.69822, 11.423493 ], [ 75.698004, 11.424064 ], [ 75.697664, 11.424522 ], [ 75.697384, 11.425039 ], [ 75.697162, 11.425615 ], [ 75.696878, 11.426076 ], [ 75.696539, 11.426598 ], [ 75.696135, 11.427062 ], [ 75.695786, 11.427527 ], [ 75.6955, 11.428051 ], [ 75.695158, 11.428579 ], [ 75.694808, 11.429047 ], [ 75.694458, 11.429515 ], [ 75.69423, 11.430104 ], [ 75.693942, 11.430636 ], [ 75.693714, 11.431228 ], [ 75.693484, 11.431822 ], [ 75.692952, 11.432299 ], [ 75.692656, 11.432657 ], [ 75.692302, 11.433195 ], [ 75.691947, 11.433675 ], [ 75.691591, 11.434096 ], [ 75.691235, 11.434639 ], [ 75.69106, 11.435243 ], [ 75.690885, 11.435849 ], [ 75.690648, 11.436454 ], [ 75.69035, 11.437062 ], [ 75.68999, 11.437555 ], [ 75.689629, 11.43805 ], [ 75.689328, 11.438545 ], [ 75.688964, 11.439038 ], [ 75.688538, 11.439533 ], [ 75.688173, 11.44009 ], [ 75.687806, 11.440587 ], [ 75.687378, 11.441148 ], [ 75.687071, 11.441647 ], [ 75.686763, 11.442273 ], [ 75.686393, 11.442839 ], [ 75.686022, 11.443343 ], [ 75.685649, 11.443913 ], [ 75.685276, 11.444486 ], [ 75.684246, 11.446035 ], [ 75.683042, 11.447866 ], [ 75.681711, 11.449463 ], [ 75.681115, 11.450165 ], [ 75.680664, 11.450468 ], [ 75.680159, 11.450671 ], [ 75.679601, 11.450873 ], [ 75.679091, 11.450924 ], [ 75.678631, 11.450874 ], [ 75.678371, 11.450422 ], [ 75.67806, 11.450021 ], [ 75.67755, 11.449921 ], [ 75.6770906, 11.4500114 ], [ 75.6770685, 11.4500158 ], [ 75.677042, 11.450021 ], [ 75.6767942, 11.4501574 ], [ 75.6766998, 11.4502093 ], [ 75.6766374, 11.4502437 ], [ 75.676586, 11.450272 ], [ 75.676077, 11.450423 ], [ 75.67562, 11.450675 ], [ 75.675266, 11.451131 ], [ 75.674911, 11.451541 ], [ 75.674555, 11.452002 ], [ 75.6743, 11.452459 ], [ 75.673838, 11.452819 ], [ 75.673325, 11.453177 ], [ 75.673067, 11.45359 ], [ 75.672654, 11.453955 ], [ 75.672189, 11.454267 ], [ 75.671774, 11.454579 ], [ 75.671411, 11.454942 ], [ 75.670942, 11.455256 ], [ 75.670325, 11.45622 ], [ 75.670183, 11.456315 ], [ 75.669809, 11.456695 ], [ 75.669531, 11.457076 ], [ 75.669199, 11.457363 ], [ 75.668768, 11.45765 ], [ 75.66848, 11.458035 ], [ 75.668098, 11.45842 ], [ 75.667668, 11.458757 ], [ 75.667333, 11.458998 ], [ 75.666903, 11.459336 ], [ 75.666568, 11.459675 ], [ 75.666135, 11.459966 ], [ 75.665753, 11.460355 ], [ 75.66537, 11.460746 ], [ 75.664979, 11.46099 ], [ 75.664575, 11.461283 ], [ 75.664173, 11.461624 ], [ 75.66377, 11.461965 ], [ 75.663264, 11.462013 ], [ 75.662808, 11.461867 ], [ 75.662319, 11.461919 ], [ 75.661821, 11.462115 ], [ 75.661324, 11.462165 ], [ 75.660831, 11.462364 ], [ 75.660339, 11.462514 ], [ 75.659991, 11.462809 ], [ 75.659497, 11.463009 ], [ 75.659, 11.46321 ], [ 75.658601, 11.463507 ], [ 75.658102, 11.463806 ], [ 75.657701, 11.464104 ], [ 75.657302, 11.464454 ], [ 75.656849, 11.464703 ], [ 75.656395, 11.464953 ], [ 75.655889, 11.465153 ], [ 75.655434, 11.465453 ], [ 75.65508, 11.465753 ], [ 75.654624, 11.466004 ], [ 75.654116, 11.466205 ], [ 75.653607, 11.466405 ], [ 75.653098, 11.466604 ], [ 75.652589, 11.466754 ], [ 75.652181, 11.466408 ], [ 75.651723, 11.466659 ], [ 75.651212, 11.466863 ], [ 75.650701, 11.466967 ], [ 75.650191, 11.467017 ], [ 75.649629, 11.467117 ], [ 75.649171, 11.467067 ], [ 75.648661, 11.467067 ], [ 75.64815, 11.467167 ], [ 75.647588, 11.467368 ], [ 75.647077, 11.467418 ], [ 75.646517, 11.467368 ], [ 75.646008, 11.467317 ], [ 75.645497, 11.467318 ], [ 75.64499, 11.467068 ], [ 75.644689, 11.466717 ], [ 75.644178, 11.466768 ], [ 75.643314, 11.466421 ], [ 75.642611, 11.465971 ], [ 75.642092, 11.465772 ], [ 75.641568, 11.465769 ], [ 75.641045, 11.465766 ], [ 75.640531, 11.465766 ], [ 75.64002, 11.465815 ], [ 75.639457, 11.465815 ], [ 75.638944, 11.465765 ], [ 75.638572, 11.465318 ], [ 75.638187, 11.464918 ], [ 75.637663, 11.464768 ], [ 75.637192, 11.464617 ], [ 75.637114, 11.464121 ], [ 75.637239, 11.463577 ], [ 75.637366, 11.463084 ], [ 75.637704, 11.46269 ], [ 75.637728, 11.462199 ], [ 75.637257, 11.462002 ], [ 75.636741, 11.461904 ], [ 75.636222, 11.461757 ], [ 75.635722, 11.461953 ], [ 75.635219, 11.462051 ], [ 75.634721, 11.462149 ], [ 75.634349, 11.461709 ], [ 75.633941, 11.461563 ], [ 75.633862, 11.462052 ], [ 75.633783, 11.462543 ], [ 75.633404, 11.462888 ], [ 75.632856, 11.46289 ], [ 75.632528, 11.463286 ], [ 75.632505, 11.463782 ], [ 75.632278, 11.464229 ], [ 75.632398, 11.464725 ], [ 75.632317, 11.465223 ], [ 75.632136, 11.465723 ], [ 75.632004, 11.466223 ], [ 75.63172, 11.466675 ], [ 75.631332, 11.466981 ], [ 75.630844, 11.467139 ], [ 75.630616, 11.468109 ], [ 75.630758, 11.468634 ], [ 75.630467, 11.469171 ], [ 75.630322, 11.468603 ], [ 75.630054, 11.468812 ], [ 75.629312, 11.47022 ], [ 75.628369, 11.471463 ], [ 75.627691, 11.472173 ], [ 75.626984, 11.47277 ], [ 75.625955, 11.473538 ], [ 75.624717, 11.474234 ], [ 75.623403, 11.474274 ], [ 75.621849, 11.474082 ], [ 75.620542, 11.474122 ], [ 75.619764, 11.474548 ], [ 75.619084, 11.475601 ], [ 75.618212, 11.476033 ], [ 75.617267, 11.476585 ], [ 75.617132, 11.477535 ], [ 75.617197, 11.478372 ], [ 75.617673, 11.479334 ], [ 75.618204526382229, 11.480688150390627 ], [ 75.618208, 11.480697 ], [ 75.618237226446894, 11.480888150390626 ], [ 75.618456, 11.482319 ], [ 75.618224, 11.483609 ], [ 75.617823, 11.48495 ], [ 75.617577, 11.486186 ], [ 75.61704, 11.487312 ], [ 75.616627, 11.488691 ], [ 75.615889, 11.490457 ], [ 75.615293, 11.491578 ], [ 75.614782, 11.493124 ], [ 75.614673, 11.494092 ], [ 75.614126, 11.494976 ], [ 75.61402, 11.495695 ], [ 75.613528, 11.497185 ], [ 75.613027, 11.498459 ], [ 75.612285, 11.500176 ], [ 75.611458, 11.502754 ], [ 75.610618, 11.506363 ], [ 75.609631, 11.508948 ], [ 75.608135, 11.51273 ], [ 75.60691, 11.516165 ], [ 75.604814, 11.522276 ], [ 75.603046, 11.526869 ], [ 75.601265, 11.531135 ], [ 75.599602, 11.535376 ], [ 75.597871, 11.539727 ], [ 75.596072, 11.544543 ], [ 75.595573, 11.546216 ], [ 75.595538, 11.546328 ], [ 75.594899, 11.548399 ], [ 75.594237, 11.550276 ], [ 75.593147, 11.553161 ], [ 75.592382, 11.555227 ], [ 75.592437, 11.556029 ], [ 75.59217, 11.556958 ], [ 75.591547, 11.558837 ], [ 75.591031, 11.560119 ], [ 75.590597, 11.56187 ], [ 75.590325, 11.563561 ], [ 75.5901993, 11.5641423 ], [ 75.588769, 11.568095 ], [ 75.588535, 11.568829 ], [ 75.588425, 11.569124 ], [ 75.588283, 11.569391 ], [ 75.588112, 11.569657 ], [ 75.588005, 11.569953 ], [ 75.587898, 11.570251 ], [ 75.587824, 11.570548 ], [ 75.587689, 11.570847 ], [ 75.587584, 11.571146 ], [ 75.587413, 11.571386 ], [ 75.587243, 11.571657 ], [ 75.587197, 11.571959 ], [ 75.587059, 11.572262 ], [ 75.586952, 11.572597 ], [ 75.586965, 11.572871 ], [ 75.586885, 11.573177 ], [ 75.586773, 11.573453 ], [ 75.586663, 11.573791 ], [ 75.586544, 11.574068 ], [ 75.586435, 11.574377 ], [ 75.586325, 11.574688 ], [ 75.586218, 11.575 ], [ 75.586137, 11.575311 ], [ 75.586025, 11.575624 ], [ 75.585911, 11.575907 ], [ 75.585798, 11.576221 ], [ 75.585747, 11.576536 ], [ 75.585697, 11.576852 ], [ 75.585552, 11.57717 ], [ 75.585437, 11.577457 ], [ 75.585324, 11.577776 ], [ 75.585209, 11.578097 ], [ 75.585063, 11.578419 ], [ 75.584947, 11.578709 ], [ 75.584832, 11.579032 ], [ 75.584683, 11.579325 ], [ 75.584534, 11.579618 ], [ 75.584417, 11.579945 ], [ 75.584268, 11.580272 ], [ 75.584151, 11.580601 ], [ 75.584002, 11.580963 ], [ 75.583883, 11.581293 ], [ 75.583734, 11.581627 ], [ 75.583617, 11.581961 ], [ 75.583532, 11.582296 ], [ 75.583412, 11.582598 ], [ 75.58329, 11.582933 ], [ 75.583234, 11.583266 ], [ 75.583178, 11.583601 ], [ 75.583057, 11.58394 ], [ 75.582938, 11.584348 ], [ 75.582743, 11.58505 ], [ 75.582571, 11.585195 ], [ 75.582457, 11.58549 ], [ 75.582345, 11.585785 ], [ 75.582208, 11.586078 ], [ 75.582103, 11.586372 ], [ 75.581968, 11.586696 ], [ 75.581862, 11.586991 ], [ 75.581816, 11.587258 ], [ 75.58177, 11.587556 ], [ 75.581664, 11.587854 ], [ 75.581586, 11.588123 ], [ 75.581479, 11.588453 ], [ 75.58137, 11.588755 ], [ 75.58126, 11.589057 ], [ 75.581119, 11.58936 ], [ 75.581038, 11.589664 ], [ 75.580863, 11.589907 ], [ 75.580751, 11.590213 ], [ 75.580641, 11.590519 ], [ 75.5805, 11.590827 ], [ 75.580389, 11.591135 ], [ 75.580214, 11.591383 ], [ 75.580195, 11.591692 ], [ 75.580175, 11.592002 ], [ 75.580122, 11.592313 ], [ 75.580071, 11.592625 ], [ 75.579892, 11.592907 ], [ 75.579776, 11.59319 ], [ 75.579727, 11.593505 ], [ 75.579585, 11.593854 ], [ 75.579442, 11.594204 ], [ 75.579324, 11.59449 ], [ 75.579142, 11.594776 ], [ 75.579025, 11.595095 ], [ 75.578875, 11.595415 ], [ 75.57876, 11.595738 ], [ 75.578646, 11.596063 ], [ 75.57853, 11.596388 ], [ 75.578413, 11.596714 ], [ 75.578295, 11.59704 ], [ 75.578176, 11.597367 ], [ 75.578057, 11.597695 ], [ 75.577937, 11.597991 ], [ 75.577785, 11.598321 ], [ 75.577665, 11.598651 ], [ 75.577545, 11.598983 ], [ 75.577457, 11.599316 ], [ 75.577336, 11.59965 ], [ 75.577183, 11.600019 ], [ 75.57706, 11.600321 ], [ 75.576938, 11.600658 ], [ 75.576848, 11.600995 ], [ 75.576757, 11.601333 ], [ 75.576432, 11.602087 ], [ 75.576343, 11.602377 ], [ 75.576287, 11.602699 ], [ 75.576166, 11.603023 ], [ 75.576012, 11.603316 ], [ 75.575825, 11.60361 ], [ 75.57567, 11.603905 ], [ 75.575516, 11.604233 ], [ 75.575392, 11.604562 ], [ 75.575269, 11.604891 ], [ 75.575146, 11.605254 ], [ 75.574929, 11.606043 ], [ 75.574583, 11.606784 ], [ 75.574482, 11.607334 ], [ 75.574394, 11.607602 ], [ 75.574244, 11.607901 ], [ 75.574124, 11.608201 ], [ 75.574004, 11.608502 ], [ 75.573884, 11.608804 ], [ 75.573763, 11.609107 ], [ 75.573705, 11.60941 ], [ 75.573678, 11.609714 ], [ 75.573557, 11.610019 ], [ 75.573372, 11.610295 ], [ 75.57325, 11.610632 ], [ 75.57316, 11.61094 ], [ 75.5731, 11.611249 ], [ 75.57304, 11.611558 ], [ 75.572917, 11.611869 ], [ 75.572793, 11.612149 ], [ 75.572638, 11.612494 ], [ 75.572578, 11.612807 ], [ 75.572517, 11.613122 ], [ 75.572424, 11.613438 ], [ 75.572299, 11.613755 ], [ 75.572205, 11.614072 ], [ 75.572047, 11.614389 ], [ 75.571701, 11.61513 ], [ 75.57148, 11.615694 ], [ 75.571376, 11.615998 ], [ 75.571206, 11.616426 ], [ 75.571084, 11.616673 ], [ 75.570963, 11.617037 ], [ 75.57092, 11.617288 ], [ 75.570825, 11.617496 ], [ 75.570675, 11.617713 ], [ 75.57055, 11.617926 ], [ 75.570347, 11.618287 ], [ 75.570171, 11.618581 ], [ 75.570051, 11.618824 ], [ 75.569875, 11.619076 ], [ 75.569769, 11.619278 ], [ 75.569655, 11.619482 ], [ 75.569535, 11.619958 ], [ 75.569423, 11.620282 ], [ 75.569281, 11.620572 ], [ 75.56912, 11.620912 ], [ 75.569055, 11.621013 ], [ 75.569068, 11.621318 ], [ 75.568965, 11.621557 ], [ 75.568921, 11.62175 ], [ 75.568921, 11.621758 ], [ 75.568772, 11.622052 ], [ 75.56866, 11.62247 ], [ 75.568403, 11.623202 ], [ 75.568038, 11.624244 ], [ 75.567676, 11.625127 ], [ 75.567375, 11.625921 ], [ 75.567329, 11.626144 ], [ 75.567203, 11.626369 ], [ 75.567022, 11.626603 ], [ 75.566889, 11.626978 ], [ 75.566716, 11.627481 ], [ 75.56655, 11.627781 ], [ 75.566513, 11.628019 ], [ 75.566405, 11.628182 ], [ 75.566328, 11.628393 ], [ 75.566323, 11.628731 ], [ 75.56617, 11.628994 ], [ 75.566027, 11.629453 ], [ 75.565813, 11.629908 ], [ 75.565791, 11.62996 ], [ 75.565762, 11.630036 ], [ 75.565733, 11.630111 ], [ 75.565697, 11.630187 ], [ 75.565639, 11.630249 ], [ 75.565564, 11.63028 ], [ 75.565489, 11.630311 ], [ 75.56543, 11.630374 ], [ 75.565401, 11.630443 ], [ 75.565365, 11.630529 ], [ 75.565297, 11.630576 ], [ 75.565244, 11.630639 ], [ 75.565192, 11.630717 ], [ 75.565193, 11.630787 ], [ 75.565241, 11.630849 ], [ 75.565212, 11.630928 ], [ 75.565214, 11.631014 ], [ 75.565192, 11.631085 ], [ 75.565138, 11.631134 ], [ 75.565067, 11.631096 ], [ 75.565014, 11.631176 ], [ 75.564976, 11.631241 ], [ 75.565047, 11.631271 ], [ 75.565077, 11.631199 ], [ 75.565118, 11.631277 ], [ 75.565128, 11.631357 ], [ 75.565122, 11.631437 ], [ 75.5651, 11.631518 ], [ 75.565085, 11.631598 ], [ 75.565055, 11.63167 ], [ 75.565008, 11.631743 ], [ 75.564969, 11.631824 ], [ 75.564784, 11.632213 ], [ 75.564612, 11.632561 ], [ 75.564469, 11.632797 ], [ 75.564181, 11.633089 ], [ 75.563945, 11.633225 ], [ 75.563805, 11.633248 ], [ 75.563908, 11.633377 ], [ 75.563929, 11.633667 ], [ 75.563952, 11.634053 ], [ 75.563857, 11.634422 ], [ 75.563699, 11.634806 ], [ 75.563455, 11.635321 ], [ 75.563328, 11.635649 ], [ 75.563124, 11.636124 ], [ 75.562922, 11.636586 ], [ 75.562644, 11.637269 ], [ 75.562251, 11.638104 ], [ 75.561946, 11.638899 ], [ 75.561566, 11.639687 ], [ 75.561315, 11.640412 ], [ 75.561058, 11.640977 ], [ 75.56074, 11.641701 ], [ 75.560595, 11.64209 ], [ 75.560596, 11.642126 ], [ 75.560628, 11.642199 ], [ 75.560623, 11.642272 ], [ 75.5606075, 11.6423003 ], [ 75.560587, 11.642338 ], [ 75.560536, 11.642404 ], [ 75.560492, 11.642463 ], [ 75.560456, 11.642529 ], [ 75.560293, 11.642699 ], [ 75.560208, 11.643006 ], [ 75.560045, 11.6434 ], [ 75.559856, 11.643715 ], [ 75.55966, 11.644114 ], [ 75.559435, 11.64459 ], [ 75.55927, 11.644967 ], [ 75.559102, 11.645332 ], [ 75.559024, 11.645511 ], [ 75.558949, 11.645692 ], [ 75.558895, 11.645905 ], [ 75.558811, 11.646165 ], [ 75.55878, 11.646405 ], [ 75.558762, 11.646608 ], [ 75.558651, 11.646806 ], [ 75.558547, 11.646983 ], [ 75.558419, 11.647153 ], [ 75.558353, 11.647333 ], [ 75.558278, 11.647474 ], [ 75.558179, 11.647681 ], [ 75.558087, 11.647825 ], [ 75.558027, 11.64805 ], [ 75.557964, 11.648189 ], [ 75.557944, 11.648262 ], [ 75.557924, 11.648336 ], [ 75.557888, 11.648402 ], [ 75.557837, 11.648468 ], [ 75.557801, 11.648542 ], [ 75.557802, 11.648616 ], [ 75.557692, 11.648803 ], [ 75.557614, 11.64905 ], [ 75.557505, 11.649315 ], [ 75.557321, 11.64969 ], [ 75.557171, 11.650023 ], [ 75.55705, 11.650296 ], [ 75.55691, 11.650649 ], [ 75.55668, 11.651075 ], [ 75.556442, 11.651515 ], [ 75.556232, 11.651927 ], [ 75.555927, 11.652631 ], [ 75.555645, 11.653295 ], [ 75.555279, 11.65413 ], [ 75.554928, 11.654896 ], [ 75.554599, 11.65555 ], [ 75.554426, 11.655973 ], [ 75.554111, 11.656689 ], [ 75.553757, 11.657485 ], [ 75.553451, 11.658353 ], [ 75.553129, 11.659123 ], [ 75.55289, 11.65948 ], [ 75.552576, 11.66001 ], [ 75.552291, 11.660353 ], [ 75.55197, 11.660679 ], [ 75.55181, 11.660748 ], [ 75.551592, 11.66059 ], [ 75.551219, 11.660335 ], [ 75.55094, 11.660172 ], [ 75.550603, 11.660047 ], [ 75.550262, 11.659996 ], [ 75.55002, 11.660114 ], [ 75.549746, 11.66027 ], [ 75.549486, 11.660419 ], [ 75.549288, 11.660629 ], [ 75.549104, 11.660841 ], [ 75.548904, 11.661147 ], [ 75.548708, 11.661363 ], [ 75.548542, 11.66141 ], [ 75.548226, 11.661472 ], [ 75.54798, 11.661527 ], [ 75.54763, 11.661621 ], [ 75.547366, 11.661731 ], [ 75.546993, 11.661984 ], [ 75.546655, 11.66228 ], [ 75.546418, 11.662603 ], [ 75.546281, 11.66298 ], [ 75.5462, 11.663378 ], [ 75.546199, 11.663387 ], [ 75.546123, 11.663631 ], [ 75.546244, 11.663698 ], [ 75.546306, 11.663605 ], [ 75.546358, 11.66332 ], [ 75.546472, 11.662897 ], [ 75.546697, 11.662481 ], [ 75.54702, 11.662159 ], [ 75.547281, 11.661976 ], [ 75.547739, 11.661747 ], [ 75.548273, 11.661636 ], [ 75.54878, 11.661519 ], [ 75.548961, 11.661317 ], [ 75.549301, 11.660887 ], [ 75.549331, 11.660856 ], [ 75.549409, 11.660826 ], [ 75.549495, 11.660826 ], [ 75.549581, 11.660826 ], [ 75.549667, 11.660825 ], [ 75.549745, 11.660818 ], [ 75.549823, 11.66081 ], [ 75.549909, 11.660802 ], [ 75.549986, 11.66078 ], [ 75.550063, 11.660742 ], [ 75.550124, 11.660696 ], [ 75.550176, 11.660636 ], [ 75.550229, 11.660568 ], [ 75.550273, 11.660508 ], [ 75.550325, 11.660441 ], [ 75.550385, 11.660388 ], [ 75.550453, 11.660344 ], [ 75.550537, 11.660321 ], [ 75.550615, 11.660321 ], [ 75.550692, 11.660321 ], [ 75.550777, 11.660321 ], [ 75.550855, 11.660336 ], [ 75.550933, 11.660343 ], [ 75.551011, 11.660358 ], [ 75.551755, 11.660892 ], [ 75.551726, 11.660937 ], [ 75.55169, 11.661006 ], [ 75.551647, 11.661067 ], [ 75.551587, 11.66112 ], [ 75.551542, 11.661181 ], [ 75.551491, 11.661258 ], [ 75.551447, 11.661304 ], [ 75.551404, 11.661373 ], [ 75.551353, 11.661443 ], [ 75.551317, 11.661513 ], [ 75.551281, 11.661582 ], [ 75.55123, 11.661645 ], [ 75.551188, 11.661716 ], [ 75.551153, 11.661779 ], [ 75.55111, 11.661842 ], [ 75.551075, 11.661914 ], [ 75.551056, 11.661993 ], [ 75.551036, 11.662073 ], [ 75.551024, 11.66216 ], [ 75.551019, 11.662239 ], [ 75.550991, 11.662319 ], [ 75.550971, 11.6624 ], [ 75.550958, 11.66248 ], [ 75.55093, 11.662561 ], [ 75.550917, 11.662641 ], [ 75.550912, 11.662721 ], [ 75.550913, 11.662801 ], [ 75.550891, 11.662881 ], [ 75.550844, 11.662945 ], [ 75.550806, 11.663018 ], [ 75.550767, 11.663098 ], [ 75.550736, 11.663179 ], [ 75.550707, 11.663253 ], [ 75.550686, 11.663336 ], [ 75.550697, 11.663418 ], [ 75.550619, 11.663461 ], [ 75.550505, 11.663594 ], [ 75.550219, 11.664165 ], [ 75.550046, 11.664449 ], [ 75.548632, 11.663915 ], [ 75.54729, 11.663464 ], [ 75.547273, 11.663448 ], [ 75.547185, 11.663448 ], [ 75.54713, 11.663504 ], [ 75.547098, 11.663585 ], [ 75.547083, 11.663665 ], [ 75.547052, 11.663746 ], [ 75.547085, 11.663827 ], [ 75.54715, 11.663859 ], [ 75.547189, 11.663786 ], [ 75.547221, 11.663705 ], [ 75.5473, 11.663592 ], [ 75.548417, 11.664013 ], [ 75.548454, 11.664167 ], [ 75.548477, 11.664307 ], [ 75.54848, 11.664508 ], [ 75.548504, 11.664708 ], [ 75.548528, 11.66491 ], [ 75.548531, 11.665111 ], [ 75.548514, 11.665314 ], [ 75.548475, 11.665517 ], [ 75.548478, 11.665721 ], [ 75.548523, 11.665925 ], [ 75.548548, 11.666151 ], [ 75.548529, 11.666336 ], [ 75.548511, 11.666542 ], [ 75.548471, 11.666749 ], [ 75.548452, 11.666957 ], [ 75.548412, 11.667165 ], [ 75.54835, 11.667373 ], [ 75.548331, 11.667582 ], [ 75.548291, 11.667792 ], [ 75.548208, 11.668003 ], [ 75.548146, 11.668214 ], [ 75.548062, 11.668426 ], [ 75.547978, 11.668639 ], [ 75.547873, 11.668852 ], [ 75.547832, 11.669067 ], [ 75.547833, 11.66928 ], [ 75.547814, 11.669516 ], [ 75.54775, 11.669731 ], [ 75.547664, 11.669946 ], [ 75.547579, 11.670162 ], [ 75.547471, 11.670379 ], [ 75.547406, 11.670596 ], [ 75.54732, 11.670813 ], [ 75.547211, 11.671031 ], [ 75.547081, 11.67125 ], [ 75.546971, 11.671427 ], [ 75.546884, 11.671649 ], [ 75.546639, 11.672289 ], [ 75.546282, 11.672865 ], [ 75.545982, 11.673469 ], [ 75.545698, 11.673976 ], [ 75.545495, 11.674405 ], [ 75.545435, 11.674611 ], [ 75.545312, 11.674817 ], [ 75.545251, 11.675002 ], [ 75.54517, 11.675209 ], [ 75.545088, 11.675396 ], [ 75.545006, 11.675604 ], [ 75.544924, 11.675792 ], [ 75.54482, 11.676001 ], [ 75.544693, 11.676169 ], [ 75.544567, 11.676338 ], [ 75.544441, 11.676486 ], [ 75.544336, 11.676697 ], [ 75.544273, 11.676909 ], [ 75.544189, 11.677122 ], [ 75.544105, 11.677336 ], [ 75.54402, 11.67755 ], [ 75.543936, 11.677764 ], [ 75.543851, 11.67798 ], [ 75.543765, 11.678196 ], [ 75.54368, 11.678391 ], [ 75.543572, 11.67861 ], [ 75.543464, 11.678808 ], [ 75.543356, 11.678985 ], [ 75.543203, 11.679183 ], [ 75.543138, 11.679421 ], [ 75.54305, 11.679615 ], [ 75.54294, 11.679832 ], [ 75.542809, 11.680009 ], [ 75.542698, 11.680231 ], [ 75.542588, 11.680432 ], [ 75.542477, 11.680633 ], [ 75.542245, 11.681328 ], [ 75.542117, 11.681526 ], [ 75.542033, 11.681726 ], [ 75.541949, 11.681948 ], [ 75.5417, 11.682364 ], [ 75.541605, 11.682568 ], [ 75.541526, 11.682774 ], [ 75.541389, 11.682959 ], [ 75.54127, 11.683124 ], [ 75.541152, 11.68331 ], [ 75.541075, 11.683517 ], [ 75.541019, 11.683725 ], [ 75.540899, 11.683892 ], [ 75.540779, 11.68408 ], [ 75.540703, 11.684289 ], [ 75.540603, 11.684478 ], [ 75.540526, 11.684689 ], [ 75.540428, 11.6849 ], [ 75.540349, 11.685091 ], [ 75.540229, 11.685282 ], [ 75.540129, 11.685474 ], [ 75.540027, 11.685666 ], [ 75.539926, 11.685879 ], [ 75.539847, 11.686073 ], [ 75.539769, 11.686288 ], [ 75.539686, 11.686481 ], [ 75.539567, 11.686678 ], [ 75.539468, 11.686876 ], [ 75.539155, 11.687313 ], [ 75.53903, 11.687723 ], [ 75.538927, 11.687921 ], [ 75.538802, 11.688099 ], [ 75.538655, 11.688278 ], [ 75.538574, 11.688501 ], [ 75.538494, 11.688727 ], [ 75.538367, 11.688928 ], [ 75.538173, 11.689403 ], [ 75.538153, 11.689423 ], [ 75.538034, 11.689599 ], [ 75.537934, 11.689757 ], [ 75.537813, 11.689936 ], [ 75.537734, 11.690135 ], [ 75.537612, 11.690294 ], [ 75.537512, 11.690473 ], [ 75.537412, 11.690673 ], [ 75.53729, 11.690832 ], [ 75.537232, 11.691033 ], [ 75.537174, 11.691234 ], [ 75.537115, 11.691436 ], [ 75.536992, 11.691598 ], [ 75.536911, 11.691801 ], [ 75.536831, 11.691984 ], [ 75.536728, 11.692168 ], [ 75.536459, 11.692537 ], [ 75.5364514, 11.6925469 ], [ 75.536334, 11.692701 ], [ 75.536252, 11.692907 ], [ 75.536169, 11.693114 ], [ 75.536044, 11.693301 ], [ 75.5359208, 11.6934839 ], [ 75.535918, 11.693488 ], [ 75.535835, 11.693697 ], [ 75.535709, 11.693885 ], [ 75.535604, 11.694074 ], [ 75.535519, 11.694263 ], [ 75.5355165, 11.6942681 ], [ 75.535414, 11.694475 ], [ 75.535266, 11.694645 ], [ 75.535095, 11.694817 ], [ 75.534966, 11.695008 ], [ 75.534923, 11.69522 ], [ 75.534794, 11.695411 ], [ 75.534601, 11.695765 ], [ 75.534557, 11.695799 ], [ 75.534495, 11.6958 ], [ 75.534439, 11.695823 ], [ 75.534412, 11.695875 ], [ 75.534403, 11.695932 ], [ 75.534358, 11.695967 ], [ 75.534301, 11.695978 ], [ 75.534237, 11.695979 ], [ 75.534174, 11.695979 ], [ 75.534111, 11.69598 ], [ 75.534059, 11.69598 ], [ 75.534001, 11.695963 ], [ 75.533943, 11.695952 ], [ 75.533886, 11.695959 ], [ 75.533835, 11.695983 ], [ 75.533802, 11.696035 ], [ 75.533839, 11.696081 ], [ 75.533891, 11.69611 ], [ 75.533944, 11.696121 ], [ 75.534007, 11.69612 ], [ 75.534065, 11.696125 ], [ 75.534122, 11.696136 ], [ 75.53418, 11.696141 ], [ 75.534233, 11.696169 ], [ 75.534253, 11.696227 ], [ 75.534244, 11.696286 ], [ 75.534226, 11.696445 ], [ 75.534088, 11.696723 ], [ 75.533836, 11.697122 ], [ 75.53361, 11.697539 ], [ 75.533248, 11.698137 ], [ 75.532839, 11.698787 ], [ 75.532323, 11.699638 ], [ 75.53155, 11.700517 ], [ 75.531208, 11.700805 ], [ 75.531064, 11.700862 ], [ 75.53092, 11.700863 ], [ 75.530802, 11.700763 ], [ 75.53067, 11.700678 ], [ 75.530541, 11.700736 ], [ 75.53053, 11.700879 ], [ 75.53042, 11.70098 ], [ 75.5303394, 11.7011094 ], [ 75.530339, 11.70111 ], [ 75.530272, 11.701255 ], [ 75.530147, 11.701357 ], [ 75.530006, 11.701416 ], [ 75.529864, 11.701476 ], [ 75.52972, 11.701506 ], [ 75.52934, 11.701465 ], [ 75.52868, 11.700884 ], [ 75.528633, 11.700827 ], [ 75.528701, 11.700697 ], [ 75.528838, 11.700783 ], [ 75.528936, 11.700668 ], [ 75.528842, 11.700553 ], [ 75.528719, 11.700452 ], [ 75.528586, 11.700438 ], [ 75.528563, 11.700581 ], [ 75.528318, 11.700697 ], [ 75.527261, 11.699883 ], [ 75.527118, 11.699996 ], [ 75.529637, 11.701864 ], [ 75.529727, 11.701975 ], [ 75.52979, 11.702115 ], [ 75.52988, 11.702241 ], [ 75.529998, 11.702339 ], [ 75.530127, 11.702395 ], [ 75.530232, 11.702522 ], [ 75.530326, 11.702634 ], [ 75.530423, 11.702747 ], [ 75.530534, 11.70286 ], [ 75.530671, 11.702931 ], [ 75.5308128, 11.70302 ], [ 75.530935, 11.703117 ], [ 75.531086, 11.703174 ], [ 75.530671, 11.704 ], [ 75.530374, 11.703985 ], [ 75.530053, 11.704131 ], [ 75.529794, 11.704379 ], [ 75.529491, 11.704673 ], [ 75.529305, 11.704894 ], [ 75.529074, 11.705161 ], [ 75.528769, 11.705504 ], [ 75.528334, 11.705872 ], [ 75.527991, 11.706201 ], [ 75.527587, 11.70665 ], [ 75.527287, 11.707041 ], [ 75.527201, 11.707097 ], [ 75.527087, 11.707182 ], [ 75.526958, 11.707252 ], [ 75.526814, 11.707323 ], [ 75.52667, 11.707379 ], [ 75.526526, 11.707393 ], [ 75.526367, 11.707394 ], [ 75.526207, 11.707394 ], [ 75.526048, 11.707394 ], [ 75.525903, 11.707394 ], [ 75.525759, 11.707422 ], [ 75.5256, 11.707451 ], [ 75.525455, 11.707394 ], [ 75.525297, 11.707352 ], [ 75.525169, 11.707395 ], [ 75.525012, 11.707395 ], [ 75.524896, 11.707311 ], [ 75.524892, 11.707169 ], [ 75.525004, 11.707085 ], [ 75.525148, 11.707085 ], [ 75.525235, 11.706958 ], [ 75.52525, 11.706817 ], [ 75.525264, 11.706662 ], [ 75.525273, 11.706522 ], [ 75.525264, 11.706382 ], [ 75.525313, 11.706243 ], [ 75.525377, 11.706105 ], [ 75.525271, 11.706022 ], [ 75.525176, 11.706119 ], [ 75.52505, 11.706188 ], [ 75.524904, 11.706174 ], [ 75.524793, 11.706258 ], [ 75.524915, 11.706355 ], [ 75.525062, 11.706397 ], [ 75.525114, 11.706536 ], [ 75.525002, 11.70662 ], [ 75.524881, 11.706522 ], [ 75.52475, 11.706522 ], [ 75.524799, 11.706663 ], [ 75.524741, 11.706803 ], [ 75.524727, 11.706944 ], [ 75.52466, 11.707071 ], [ 75.524623, 11.707212 ], [ 75.524572, 11.707354 ], [ 75.52446, 11.707396 ], [ 75.524346, 11.707283 ], [ 75.524206, 11.70734 ], [ 75.524066, 11.707397 ], [ 75.523984, 11.707525 ], [ 75.524064, 11.707783 ], [ 75.524065, 11.707802 ], [ 75.523992, 11.707993 ], [ 75.52386, 11.708127 ], [ 75.523689, 11.708241 ], [ 75.523533, 11.708356 ], [ 75.523399, 11.70851 ], [ 75.523386, 11.708703 ], [ 75.523393, 11.708917 ], [ 75.52332536524203, 11.709237871875001 ], [ 75.523307, 11.709325 ], [ 75.523213, 11.709776 ], [ 75.523057, 11.709835 ], [ 75.522944, 11.709992 ], [ 75.522829, 11.71015 ], [ 75.522717, 11.710328 ], [ 75.522622, 11.710506 ], [ 75.522587, 11.710705 ], [ 75.522489, 11.710884 ], [ 75.52239, 11.711063 ], [ 75.522315, 11.711263 ], [ 75.522239, 11.711464 ], [ 75.522164, 11.711685 ], [ 75.522087, 11.711847 ], [ 75.521991, 11.71205 ], [ 75.521893, 11.712213 ], [ 75.521796, 11.712417 ], [ 75.521679, 11.712602 ], [ 75.521541, 11.712788 ], [ 75.521183, 11.713609 ], [ 75.520734, 11.714107 ], [ 75.520631, 11.71417 ], [ 75.520284, 11.714796 ], [ 75.519907, 11.715098 ], [ 75.519754, 11.715177 ], [ 75.519609, 11.715317 ], [ 75.519429, 11.715435 ], [ 75.519222, 11.715534 ], [ 75.519021, 11.715594 ], [ 75.518825, 11.715674 ], [ 75.518629, 11.715754 ], [ 75.51843, 11.715794 ], [ 75.518231, 11.715815 ], [ 75.518121, 11.715616 ], [ 75.517916, 11.715537 ], [ 75.517712, 11.715517 ], [ 75.51751, 11.715478 ], [ 75.517357, 11.715618 ], [ 75.51716, 11.7156 ], [ 75.516984, 11.715581 ], [ 75.516934, 11.715782 ], [ 75.516759, 11.715903 ], [ 75.516688, 11.716104 ], [ 75.516719, 11.716306 ], [ 75.516864, 11.716466 ], [ 75.517077, 11.716687 ], [ 75.516787, 11.716728 ], [ 75.516626, 11.717146 ], [ 75.516549, 11.717567 ], [ 75.51656, 11.717989 ], [ 75.516572, 11.718412 ], [ 75.516407, 11.718836 ], [ 75.516151, 11.719177 ], [ 75.515893, 11.719519 ], [ 75.515547, 11.719862 ], [ 75.515288, 11.720205 ], [ 75.514985, 11.720592 ], [ 75.51477, 11.72098 ], [ 75.514599, 11.721413 ], [ 75.514338, 11.72176 ], [ 75.514076, 11.722107 ], [ 75.513813, 11.722456 ], [ 75.513639, 11.722891 ], [ 75.5136, 11.723329 ], [ 75.513382, 11.723724 ], [ 75.513073, 11.724077 ], [ 75.512853, 11.724431 ], [ 75.512144, 11.725497 ], [ 75.511385, 11.726747 ], [ 75.511297, 11.727195 ], [ 75.510981, 11.727557 ], [ 75.510836456563851, 11.727817820600341 ], [ 75.510756, 11.727963 ], [ 75.510636456563844, 11.728098708114628 ], [ 75.510438, 11.728324 ], [ 75.510166, 11.728687 ], [ 75.509847, 11.729053 ], [ 75.509574, 11.729463 ], [ 75.509253, 11.729789 ], [ 75.508978, 11.730204 ], [ 75.508656, 11.730566 ], [ 75.508288, 11.73098 ], [ 75.507318, 11.73163 ], [ 75.504905, 11.729167 ], [ 75.504778, 11.729312 ], [ 75.507472, 11.732054 ], [ 75.507409, 11.732155 ], [ 75.507294, 11.732273 ], [ 75.507163, 11.732407 ], [ 75.5071, 11.732575 ], [ 75.506984, 11.73266 ], [ 75.506832, 11.732611 ], [ 75.506666, 11.732713 ], [ 75.506533, 11.732798 ], [ 75.506362, 11.732798 ], [ 75.506241, 11.732949 ], [ 75.506073, 11.732951 ], [ 75.505916, 11.732883 ], [ 75.505761, 11.732951 ], [ 75.505747, 11.733119 ], [ 75.50575, 11.733288 ], [ 75.505715, 11.733439 ], [ 75.505549, 11.733509 ], [ 75.505401, 11.733613 ], [ 75.505254, 11.733735 ], [ 75.505122, 11.73384 ], [ 75.504957, 11.733895 ], [ 75.504786, 11.73393 ], [ 75.504621, 11.734003 ], [ 75.504457, 11.734076 ], [ 75.50429, 11.734132 ], [ 75.504135, 11.734236 ], [ 75.503961, 11.734288 ], [ 75.503786, 11.734306 ], [ 75.503611, 11.734272 ], [ 75.503436, 11.734238 ], [ 75.503242, 11.734238 ], [ 75.503049, 11.734238 ], [ 75.502873, 11.734221 ], [ 75.50268, 11.734221 ], [ 75.502505, 11.734238 ], [ 75.502329, 11.734255 ], [ 75.502153, 11.734238 ], [ 75.50196, 11.734187 ], [ 75.501802, 11.734118 ], [ 75.501625, 11.734049 ], [ 75.501449, 11.734014 ], [ 75.501272, 11.733945 ], [ 75.501096, 11.73391 ], [ 75.50092, 11.733841 ], [ 75.500442, 11.733696 ], [ 75.500283, 11.733624 ], [ 75.500264, 11.733453 ], [ 75.50014, 11.733331 ], [ 75.499966, 11.733296 ], [ 75.499792, 11.733279 ], [ 75.499636, 11.733194 ], [ 75.499496, 11.733091 ], [ 75.49934, 11.732989 ], [ 75.499184, 11.732972 ], [ 75.499097, 11.73282 ], [ 75.499011, 11.732668 ], [ 75.498944, 11.732345 ], [ 75.499955, 11.731269 ], [ 75.500636, 11.730522 ], [ 75.501493, 11.729751 ], [ 75.502113, 11.72927 ], [ 75.502514, 11.729018 ], [ 75.50243, 11.72894 ], [ 75.502127, 11.729134 ], [ 75.501813, 11.729348 ], [ 75.501429, 11.729663 ], [ 75.501032, 11.72999 ], [ 75.500471, 11.730522 ], [ 75.499714, 11.731334 ], [ 75.499663, 11.731344 ], [ 75.49959, 11.731265 ], [ 75.499507, 11.731206 ], [ 75.499406, 11.731206 ], [ 75.499304, 11.731206 ], [ 75.499244, 11.731285 ], [ 75.499276, 11.731374 ], [ 75.49936, 11.731444 ], [ 75.499424, 11.731573 ], [ 75.499324, 11.731703 ], [ 75.498553, 11.73255 ], [ 75.498437, 11.732688 ], [ 75.49839, 11.732744 ], [ 75.498304, 11.732801 ], [ 75.498227, 11.732858 ], [ 75.498139, 11.732886 ], [ 75.498043, 11.732952 ], [ 75.498015, 11.733019 ], [ 75.497964, 11.732952 ], [ 75.497866, 11.73299 ], [ 75.497804, 11.732904 ], [ 75.497715, 11.732884 ], [ 75.497617, 11.732931 ], [ 75.49758, 11.733017 ], [ 75.497583, 11.733113 ], [ 75.497545, 11.733199 ], [ 75.497568, 11.733296 ], [ 75.49758, 11.733392 ], [ 75.497534, 11.733469 ], [ 75.497434, 11.733469 ], [ 75.497344, 11.733449 ], [ 75.497281, 11.733372 ], [ 75.497193, 11.73343 ], [ 75.497146, 11.733507 ], [ 75.49715, 11.733604 ], [ 75.497143, 11.733701 ], [ 75.497117, 11.733798 ], [ 75.497048, 11.733867 ], [ 75.496969, 11.733926 ], [ 75.496992, 11.734024 ], [ 75.496984, 11.734103 ], [ 75.497086, 11.734103 ], [ 75.497175, 11.734043 ], [ 75.497213, 11.733945 ], [ 75.49725, 11.733857 ], [ 75.497286, 11.733759 ], [ 75.497302, 11.733662 ], [ 75.49737, 11.733594 ], [ 75.49747, 11.733604 ], [ 75.49757, 11.733604 ], [ 75.497616, 11.733517 ], [ 75.497651, 11.733421 ], [ 75.497688, 11.733335 ], [ 75.497675, 11.733238 ], [ 75.497712, 11.733142 ], [ 75.4978, 11.733095 ], [ 75.49796, 11.733153 ], [ 75.498034, 11.733316 ], [ 75.49809, 11.73348 ], [ 75.498223, 11.733616 ], [ 75.498211, 11.733771 ], [ 75.498138, 11.733916 ], [ 75.498004, 11.734004 ], [ 75.497895, 11.734004 ], [ 75.497868, 11.734339 ], [ 75.497846, 11.734567 ], [ 75.497686, 11.734588 ], [ 75.49772, 11.734707 ], [ 75.497834, 11.734797 ], [ 75.497747, 11.734958 ], [ 75.49758, 11.73515 ], [ 75.497413, 11.735394 ], [ 75.497404, 11.735405 ], [ 75.497276, 11.73564 ], [ 75.497246, 11.735681 ], [ 75.497057, 11.73593 ], [ 75.496886, 11.73613 ], [ 75.496876, 11.73614 ], [ 75.496795, 11.736225 ], [ 75.496724, 11.736299 ], [ 75.496663, 11.736393 ], [ 75.496601, 11.736477 ], [ 75.496529, 11.736551 ], [ 75.496488, 11.736656 ], [ 75.496334, 11.736921 ], [ 75.496133, 11.737055 ], [ 75.495974, 11.737295 ], [ 75.495871, 11.737535 ], [ 75.495798, 11.737802 ], [ 75.49564, 11.738016 ], [ 75.495423, 11.738176 ], [ 75.495265, 11.738417 ], [ 75.494972, 11.738849 ], [ 75.494839, 11.739092 ], [ 75.494708, 11.739364 ], [ 75.494546, 11.739609 ], [ 75.494356, 11.739854 ], [ 75.494136, 11.740018 ], [ 75.493917, 11.740237 ], [ 75.493782, 11.740456 ], [ 75.493619, 11.740677 ], [ 75.493426, 11.740897 ], [ 75.493262, 11.741118 ], [ 75.493098, 11.74134 ], [ 75.492904, 11.741535 ], [ 75.49274, 11.741786 ], [ 75.492634, 11.742065 ], [ 75.492497, 11.742345 ], [ 75.492384, 11.742597 ], [ 75.492212, 11.74285 ], [ 75.492043, 11.743075 ], [ 75.491874, 11.7433 ], [ 75.491706, 11.743556 ], [ 75.49151, 11.743812 ], [ 75.491342, 11.74404 ], [ 75.491114, 11.744213 ], [ 75.490886, 11.744415 ], [ 75.490627, 11.744587 ], [ 75.490368, 11.74476 ], [ 75.4896978, 11.7452237 ], [ 75.4892958, 11.7454454 ], [ 75.4892137, 11.7454885 ], [ 75.4886081, 11.7458397 ], [ 75.4880734, 11.7461784 ], [ 75.4873199, 11.7463951 ], [ 75.4866715, 11.7464703 ], [ 75.4850276, 11.7464066 ], [ 75.4850372, 11.746963 ], [ 75.4850489, 11.7474273 ], [ 75.4848268, 11.74761 ], [ 75.4847982, 11.7479598 ], [ 75.485064, 11.7485382 ], [ 75.485072, 11.7493588 ], [ 75.4840711, 11.7503585 ], [ 75.484243, 11.750615 ], [ 75.48439, 11.75097 ], [ 75.484209, 11.751291 ], [ 75.484027, 11.751612 ], [ 75.483734, 11.751862 ], [ 75.483478, 11.752114 ], [ 75.483551, 11.752473 ], [ 75.483442, 11.752834 ], [ 75.4833137, 11.7531678 ], [ 75.4830878, 11.7534713 ], [ 75.4823917, 11.7539569 ], [ 75.4821342, 11.7543195 ], [ 75.4818808, 11.7547571 ], [ 75.4815684, 11.7550915 ], [ 75.4808087, 11.7557585 ], [ 75.4805802, 11.7559333 ], [ 75.4798265, 11.7561981 ], [ 75.4795833, 11.7565617 ], [ 75.4789733, 11.7572015 ], [ 75.4781754, 11.7578095 ], [ 75.477948, 11.757922 ], [ 75.4775495, 11.7578951 ], [ 75.4774942, 11.7579455 ], [ 75.4774068, 11.7584519 ], [ 75.4772063, 11.7587651 ], [ 75.4768471, 11.7590462 ], [ 75.4763098, 11.7594778 ], [ 75.476301, 11.7597855 ], [ 75.4761583, 11.7601303 ], [ 75.4758943, 11.7604172 ], [ 75.4755554, 11.7607393 ], [ 75.4747557, 11.7614608 ], [ 75.4747029, 11.7617364 ], [ 75.4745485, 11.7620953 ], [ 75.474281, 11.7624374 ], [ 75.4735171, 11.7633675 ], [ 75.4730407, 11.7637939 ], [ 75.4726003, 11.7640887 ], [ 75.4711405, 11.7661145 ], [ 75.4704, 11.767142 ], [ 75.469855, 11.766601 ], [ 75.469488, 11.766227 ], [ 75.469554, 11.765786 ], [ 75.469306, 11.765592 ], [ 75.468897, 11.765573 ], [ 75.468707, 11.765486 ], [ 75.468169, 11.765155 ], [ 75.467421, 11.764985 ], [ 75.467142, 11.765343 ], [ 75.46665, 11.766037 ], [ 75.466201, 11.766478 ], [ 75.465624, 11.766687 ], [ 75.464918, 11.766686 ], [ 75.464234, 11.766645 ], [ 75.463637, 11.766479 ], [ 75.46327, 11.766204 ], [ 75.463238, 11.765627 ], [ 75.462963, 11.765863 ], [ 75.462502, 11.766311 ], [ 75.461798, 11.766374 ], [ 75.461204, 11.766356 ], [ 75.460946, 11.766209 ], [ 75.460955, 11.765868 ], [ 75.460571, 11.765785 ], [ 75.460448, 11.765997 ], [ 75.460385, 11.766395 ], [ 75.460021, 11.766751 ], [ 75.459662, 11.767171 ], [ 75.459163, 11.767442 ], [ 75.458603, 11.767882 ], [ 75.45817, 11.768117 ], [ 75.457335, 11.768682 ], [ 75.456441, 11.769313 ], [ 75.455704, 11.769941 ], [ 75.454868, 11.77035 ], [ 75.454416, 11.770507 ], [ 75.454095, 11.770632 ], [ 75.4537016, 11.7712108 ], [ 75.4536614, 11.771348 ], [ 75.4537159, 11.7721314 ], [ 75.4537726, 11.772903 ], [ 75.453597, 11.77345 ], [ 75.453636, 11.77435 ], [ 75.453598, 11.775175 ], [ 75.453368, 11.775738 ], [ 75.453062, 11.776301 ], [ 75.452832, 11.777201 ], [ 75.453139, 11.777951 ], [ 75.453791, 11.777913 ], [ 75.453739, 11.778767 ], [ 75.453115, 11.77912 ], [ 75.452703, 11.779479 ], [ 75.452341, 11.779832 ], [ 75.450219, 11.780773 ], [ 75.449398, 11.780998 ], [ 75.448746, 11.781213 ], [ 75.448173, 11.781441 ], [ 75.44744, 11.781743 ], [ 75.446942, 11.781987 ], [ 75.446542, 11.782339 ], [ 75.446436, 11.782714 ], [ 75.446576, 11.783079 ], [ 75.446872, 11.783628 ], [ 75.447153, 11.784177 ], [ 75.447277, 11.785046 ], [ 75.447262, 11.785945 ], [ 75.447107, 11.78669 ], [ 75.44695, 11.787729 ], [ 75.446544, 11.78866 ], [ 75.446125, 11.789573 ], [ 75.445602, 11.790593 ], [ 75.445419, 11.790794 ], [ 75.445413, 11.790799 ], [ 75.445164, 11.791111 ], [ 75.445141, 11.791144 ], [ 75.444806, 11.791562 ], [ 75.444409, 11.792029 ], [ 75.443994, 11.792623 ], [ 75.443615, 11.793281 ], [ 75.443321, 11.793675 ], [ 75.443219, 11.79407 ], [ 75.4427, 11.795058 ], [ 75.442481, 11.795417 ], [ 75.442093, 11.795933 ], [ 75.441751, 11.796451 ], [ 75.441451, 11.796964 ], [ 75.441138, 11.797404 ], [ 75.440904, 11.797744 ], [ 75.440455, 11.798415 ], [ 75.439811, 11.799538 ], [ 75.439361, 11.800234 ], [ 75.439005, 11.800766 ], [ 75.438643, 11.801308 ], [ 75.438054, 11.802113 ], [ 75.437692, 11.80259 ], [ 75.437356, 11.803081 ], [ 75.43692, 11.803718 ], [ 75.436452, 11.804381 ], [ 75.435847, 11.805113 ], [ 75.435632, 11.805324 ], [ 75.435446, 11.805457 ], [ 75.435129, 11.805756 ], [ 75.434769, 11.80611 ], [ 75.43445, 11.806444 ], [ 75.4343441, 11.8065332 ], [ 75.434049, 11.806782 ], [ 75.433748, 11.806987 ], [ 75.433341, 11.807247 ], [ 75.433071, 11.807355 ], [ 75.432789, 11.807569 ], [ 75.432641, 11.807768 ], [ 75.432494, 11.807943 ], [ 75.432298, 11.808093 ], [ 75.432254, 11.808138 ], [ 75.432243, 11.808193 ], [ 75.432243, 11.808341 ], [ 75.4321145, 11.8083698 ], [ 75.43202, 11.808391 ], [ 75.432014, 11.808315 ], [ 75.431905, 11.80826 ], [ 75.431771, 11.808167 ], [ 75.431751, 11.80812 ], [ 75.431724, 11.808052 ], [ 75.431769, 11.807997 ], [ 75.431691, 11.80797 ], [ 75.431627, 11.807977 ], [ 75.431557, 11.807964 ], [ 75.431502, 11.807916 ], [ 75.431461, 11.807862 ], [ 75.431512, 11.807807 ], [ 75.43157, 11.807753 ], [ 75.431558, 11.807685 ], [ 75.431532, 11.80761 ], [ 75.4315, 11.807541 ], [ 75.431445, 11.807487 ], [ 75.431391, 11.807445 ], [ 75.431338, 11.80739 ], [ 75.431284, 11.807349 ], [ 75.43126, 11.807287 ], [ 75.431228, 11.807225 ], [ 75.431259, 11.807155 ], [ 75.431312, 11.807099 ], [ 75.431287, 11.80703 ], [ 75.431226, 11.806981 ], [ 75.431156, 11.806967 ], [ 75.431093, 11.806967 ], [ 75.431055, 11.807023 ], [ 75.43103, 11.807093 ], [ 75.431013, 11.807163 ], [ 75.430953, 11.807226 ], [ 75.430907, 11.807281 ], [ 75.430904, 11.807343 ], [ 75.430959, 11.807378 ], [ 75.430948, 11.807447 ], [ 75.430876, 11.807474 ], [ 75.430797, 11.807509 ], [ 75.430745, 11.807557 ], [ 75.430668, 11.807584 ], [ 75.430591, 11.807612 ], [ 75.430528, 11.807619 ], [ 75.43046, 11.807598 ], [ 75.430391, 11.807578 ], [ 75.430323, 11.80755 ], [ 75.430255, 11.807523 ], [ 75.430187, 11.807489 ], [ 75.430148, 11.807433 ], [ 75.430087, 11.807392 ], [ 75.43003, 11.80744 ], [ 75.429972, 11.807489 ], [ 75.429903, 11.807489 ], [ 75.429841, 11.807482 ], [ 75.429787, 11.807433 ], [ 75.429718, 11.807426 ], [ 75.429707, 11.807357 ], [ 75.429723, 11.807288 ], [ 75.429753, 11.807219 ], [ 75.429776, 11.807149 ], [ 75.42982, 11.807087 ], [ 75.429857, 11.807031 ], [ 75.429853, 11.806975 ], [ 75.429795, 11.807024 ], [ 75.42975, 11.807101 ], [ 75.429734, 11.807163 ], [ 75.429718, 11.807226 ], [ 75.429681, 11.807295 ], [ 75.429637, 11.807371 ], [ 75.429601, 11.807413 ], [ 75.429571, 11.807481 ], [ 75.429514, 11.807543 ], [ 75.429463, 11.807598 ], [ 75.429426, 11.80766 ], [ 75.429317, 11.80779 ], [ 75.429265, 11.807742 ], [ 75.429189, 11.807769 ], [ 75.429136, 11.807735 ], [ 75.429068, 11.807721 ], [ 75.429, 11.80772 ], [ 75.428931, 11.807713 ], [ 75.428871, 11.807671 ], [ 75.428817, 11.807623 ], [ 75.428748, 11.807636 ], [ 75.42868, 11.807656 ], [ 75.428651, 11.807724 ], [ 75.428602, 11.807779 ], [ 75.428546, 11.807855 ], [ 75.428539, 11.807923 ], [ 75.428497, 11.808005 ], [ 75.428462, 11.808059 ], [ 75.428414, 11.808135 ], [ 75.428379, 11.808176 ], [ 75.428372, 11.808251 ], [ 75.428365, 11.808319 ], [ 75.428385, 11.808386 ], [ 75.428377, 11.808454 ], [ 75.428363, 11.808528 ], [ 75.428349, 11.808596 ], [ 75.428335, 11.808663 ], [ 75.428314, 11.808738 ], [ 75.428327, 11.808805 ], [ 75.428386, 11.80896 ], [ 75.428366, 11.808973 ], [ 75.428307, 11.809013 ], [ 75.428244, 11.809004 ], [ 75.42819, 11.809051 ], [ 75.428148, 11.809105 ], [ 75.428164, 11.809174 ], [ 75.428166, 11.809243 ], [ 75.428162, 11.809311 ], [ 75.428108, 11.809365 ], [ 75.428058, 11.809351 ], [ 75.428069, 11.809275 ], [ 75.428018, 11.809261 ], [ 75.428027, 11.809329 ], [ 75.427979, 11.809377 ], [ 75.427913, 11.809356 ], [ 75.427845, 11.809369 ], [ 75.427777, 11.80941 ], [ 75.427756, 11.809471 ], [ 75.427708, 11.809525 ], [ 75.427655, 11.809572 ], [ 75.427582, 11.809571 ], [ 75.427516, 11.809584 ], [ 75.42752, 11.809653 ], [ 75.427564, 11.809701 ], [ 75.427587, 11.809769 ], [ 75.427584, 11.809837 ], [ 75.427531, 11.80987 ], [ 75.427465, 11.80987 ], [ 75.427405, 11.809904 ], [ 75.427345, 11.809918 ], [ 75.42733, 11.809986 ], [ 75.427287, 11.810047 ], [ 75.427225, 11.810081 ], [ 75.427158, 11.810067 ], [ 75.427097, 11.81004 ], [ 75.427029, 11.810041 ], [ 75.426962, 11.81002 ], [ 75.42692, 11.810061 ], [ 75.426892, 11.81013 ], [ 75.426891, 11.810204 ], [ 75.426924, 11.810265 ], [ 75.426957, 11.810325 ], [ 75.426975, 11.810392 ], [ 75.427047, 11.810445 ], [ 75.427079, 11.810485 ], [ 75.427057, 11.810545 ], [ 75.427002, 11.810605 ], [ 75.426933, 11.810639 ], [ 75.426866, 11.810633 ], [ 75.426806, 11.810601 ], [ 75.42676, 11.810555 ], [ 75.426755, 11.810488 ], [ 75.426702, 11.810442 ], [ 75.426641, 11.810429 ], [ 75.426594, 11.810369 ], [ 75.426533, 11.810335 ], [ 75.42647, 11.810349 ], [ 75.426406, 11.810383 ], [ 75.426377, 11.810451 ], [ 75.426334, 11.810538 ], [ 75.426222, 11.810653 ], [ 75.426187, 11.810693 ], [ 75.426118, 11.810728 ], [ 75.425959, 11.810771 ], [ 75.425687, 11.811017 ], [ 75.425527, 11.811273 ], [ 75.425464, 11.811481 ], [ 75.425449, 11.81159 ], [ 75.425413, 11.811693 ], [ 75.42545, 11.811796 ], [ 75.425477, 11.811742 ], [ 75.425546, 11.81175 ], [ 75.425543, 11.811853 ], [ 75.425488, 11.811962 ], [ 75.425588, 11.812018 ], [ 75.425609, 11.812093 ], [ 75.4255, 11.812208 ], [ 75.425347, 11.812302 ], [ 75.425234, 11.812348 ], [ 75.42515, 11.812308 ], [ 75.425067, 11.812314 ], [ 75.425048, 11.812395 ], [ 75.425075, 11.812491 ], [ 75.424972, 11.812558 ], [ 75.424777, 11.812633 ], [ 75.42455, 11.812666 ], [ 75.424373, 11.812652 ], [ 75.424252, 11.812611 ], [ 75.424209, 11.812474 ], [ 75.424296, 11.812357 ], [ 75.424339, 11.81222 ], [ 75.424313, 11.812089 ], [ 75.424141, 11.812061 ], [ 75.424016, 11.812108 ], [ 75.423939, 11.812253 ], [ 75.423867, 11.812452 ], [ 75.42383, 11.812611 ], [ 75.423724, 11.812727 ], [ 75.423598, 11.812796 ], [ 75.423619, 11.812851 ], [ 75.423481, 11.812996 ], [ 75.423419, 11.813044 ], [ 75.423335, 11.813154 ], [ 75.423362, 11.813243 ], [ 75.4235, 11.813215 ], [ 75.423604, 11.813159 ], [ 75.423734, 11.813159 ], [ 75.423822, 11.813192 ], [ 75.423889, 11.81328 ], [ 75.423867, 11.813423 ], [ 75.42379, 11.813532 ], [ 75.423796, 11.813654 ], [ 75.423751, 11.813861 ], [ 75.423651, 11.814098 ], [ 75.423544, 11.814273 ], [ 75.423377, 11.814483 ], [ 75.423172, 11.814618 ], [ 75.422977, 11.814652 ], [ 75.422857, 11.814714 ], [ 75.422714, 11.814823 ], [ 75.422579, 11.815001 ], [ 75.422551, 11.815201 ], [ 75.422497, 11.815455 ], [ 75.422349, 11.815752 ], [ 75.42213, 11.816038 ], [ 75.421746, 11.816518 ], [ 75.421407, 11.81698 ], [ 75.420915, 11.81755 ], [ 75.420551, 11.817982 ], [ 75.420131, 11.818434 ], [ 75.419809, 11.818777 ], [ 75.419495, 11.818995 ], [ 75.419167, 11.819193 ], [ 75.418833, 11.819359 ], [ 75.418498, 11.819558 ], [ 75.418308, 11.819612 ], [ 75.418258, 11.819647 ], [ 75.418076, 11.819702 ], [ 75.418041, 11.819695 ], [ 75.417823, 11.819626 ], [ 75.417788, 11.819619 ], [ 75.417718, 11.819619 ], [ 75.417598, 11.819557 ], [ 75.417584, 11.819508 ], [ 75.417627, 11.819446 ], [ 75.417634, 11.819377 ], [ 75.417662, 11.819308 ], [ 75.417662, 11.81924 ], [ 75.417641, 11.819171 ], [ 75.417584, 11.819122 ], [ 75.417521, 11.819129 ], [ 75.41745, 11.819129 ], [ 75.417401, 11.819095 ], [ 75.417359, 11.81915 ], [ 75.417359, 11.819212 ], [ 75.417316, 11.81915 ], [ 75.417246, 11.819184 ], [ 75.417211, 11.819247 ], [ 75.417211, 11.819322 ], [ 75.417267, 11.819378 ], [ 75.417246, 11.819502 ], [ 75.417126, 11.819578 ], [ 75.41707, 11.819627 ], [ 75.417021, 11.819661 ], [ 75.416986, 11.819723 ], [ 75.417021, 11.819785 ], [ 75.41707, 11.819833 ], [ 75.417084, 11.819902 ], [ 75.41714, 11.819965 ], [ 75.417189, 11.820014 ], [ 75.417195, 11.82009 ], [ 75.417244, 11.820145 ], [ 75.417301, 11.820083 ], [ 75.41733, 11.82002 ], [ 75.417373, 11.819958 ], [ 75.417429, 11.819895 ], [ 75.4175, 11.81973 ], [ 75.417641, 11.819813 ], [ 75.417767, 11.819909 ], [ 75.417928, 11.820038 ], [ 75.41806, 11.82034 ], [ 75.418066, 11.820663 ], [ 75.41793, 11.821011 ], [ 75.417818, 11.821269 ], [ 75.417634, 11.821617 ], [ 75.417452, 11.821999 ], [ 75.41729, 11.822251 ], [ 75.417066, 11.822653 ], [ 75.416875, 11.822981 ], [ 75.416585, 11.823348 ], [ 75.416258, 11.823777 ], [ 75.416023, 11.824199 ], [ 75.415674, 11.824689 ], [ 75.415307, 11.825105 ], [ 75.41508, 11.825402 ], [ 75.414758, 11.825774 ], [ 75.414418, 11.826148 ], [ 75.414096, 11.826594 ], [ 75.413716, 11.82702 ], [ 75.413365, 11.827465 ], [ 75.413134, 11.827766 ], [ 75.413113, 11.827807 ], [ 75.413092, 11.827875 ], [ 75.413099, 11.827943 ], [ 75.41312, 11.828004 ], [ 75.413051, 11.827998 ], [ 75.412974, 11.827999 ], [ 75.412835, 11.82815 ], [ 75.41266, 11.828376 ], [ 75.412437, 11.828673 ], [ 75.412143, 11.829015 ], [ 75.411758, 11.829468 ], [ 75.411605, 11.829653 ], [ 75.411471, 11.829755 ], [ 75.411352, 11.8299 ], [ 75.411198, 11.830105 ], [ 75.411162, 11.830263 ], [ 75.41103, 11.830352 ], [ 75.410968, 11.830431 ], [ 75.410945, 11.830556 ], [ 75.410719, 11.830825 ], [ 75.410538, 11.830975 ], [ 75.41034, 11.831162 ], [ 75.410137, 11.831422 ], [ 75.410024, 11.831607 ], [ 75.409982, 11.831634 ], [ 75.409947, 11.831696 ], [ 75.409897, 11.831758 ], [ 75.409828, 11.831785 ], [ 75.409772, 11.831826 ], [ 75.409716, 11.831929 ], [ 75.409583, 11.832085 ], [ 75.409367, 11.832283 ], [ 75.409305, 11.832303 ], [ 75.40925, 11.832323 ], [ 75.409201, 11.832378 ], [ 75.409145, 11.832425 ], [ 75.409083, 11.832473 ], [ 75.409007, 11.832507 ], [ 75.408944, 11.832541 ], [ 75.408875, 11.832548 ], [ 75.408805, 11.832548 ], [ 75.408722, 11.832542 ], [ 75.408659, 11.832542 ], [ 75.408589, 11.832569 ], [ 75.408436, 11.832641 ], [ 75.408374, 11.83266 ], [ 75.408312, 11.832693 ], [ 75.408252, 11.832699 ], [ 75.408213, 11.832648 ], [ 75.408157, 11.832689 ], [ 75.408175, 11.832753 ], [ 75.408214, 11.832789 ], [ 75.408153, 11.832802 ], [ 75.408085, 11.832807 ], [ 75.408008, 11.832814 ], [ 75.407952, 11.832849 ], [ 75.407884, 11.832874 ], [ 75.40783, 11.832927 ], [ 75.407776, 11.832967 ], [ 75.407734, 11.833029 ], [ 75.407678, 11.833063 ], [ 75.407632, 11.833012 ], [ 75.407564, 11.833004 ], [ 75.407515, 11.833066 ], [ 75.40748, 11.833127 ], [ 75.407473, 11.833196 ], [ 75.407533, 11.833219 ], [ 75.407588, 11.833179 ], [ 75.4076, 11.833242 ], [ 75.407713, 11.83328 ], [ 75.407678, 11.833465 ], [ 75.4076384, 11.8338345 ], [ 75.4074661, 11.8340645 ], [ 75.4071737, 11.8343114 ], [ 75.406764, 11.834729 ], [ 75.4065032, 11.8351304 ], [ 75.4063501, 11.8353599 ], [ 75.4061222, 11.8356578 ], [ 75.405819, 11.835984 ], [ 75.405587, 11.83619 ], [ 75.405392, 11.836443 ], [ 75.405258, 11.836629 ], [ 75.4050108, 11.8368931 ], [ 75.4048468, 11.8371082 ], [ 75.4046736, 11.8372125 ], [ 75.4046158, 11.8373092 ], [ 75.4044332, 11.8372893 ], [ 75.4043732, 11.83738 ], [ 75.4043551, 11.8374731 ], [ 75.4043062, 11.8375904 ], [ 75.40419, 11.8376405 ], [ 75.4039358, 11.8378527 ], [ 75.4035686, 11.8382233 ], [ 75.4033024, 11.8383954 ], [ 75.403207, 11.838416 ], [ 75.403173, 11.838347 ], [ 75.40311, 11.838318 ], [ 75.403041, 11.838338 ], [ 75.402971, 11.838323 ], [ 75.402908, 11.838349 ], [ 75.402943, 11.838412 ], [ 75.402894, 11.83846 ], [ 75.402824, 11.838472 ], [ 75.402754, 11.838485 ], [ 75.402782, 11.838556 ], [ 75.40281, 11.838605 ], [ 75.402761, 11.83866 ], [ 75.402719, 11.838715 ], [ 75.402649, 11.838721 ], [ 75.402579, 11.838748 ], [ 75.402593, 11.838818 ], [ 75.402614, 11.838887 ], [ 75.402621, 11.838956 ], [ 75.402684, 11.839074 ], [ 75.402531, 11.839142 ], [ 75.402461, 11.839244 ], [ 75.402405, 11.839257 ], [ 75.402343, 11.839353 ], [ 75.402294, 11.839359 ], [ 75.402259, 11.839318 ], [ 75.402196, 11.839352 ], [ 75.402126, 11.839366 ], [ 75.402049, 11.839365 ], [ 75.401979, 11.839372 ], [ 75.401909, 11.839406 ], [ 75.401853, 11.839434 ], [ 75.401762, 11.839447 ], [ 75.401728, 11.839488 ], [ 75.401694, 11.83955 ], [ 75.401624, 11.839577 ], [ 75.401575, 11.839639 ], [ 75.40154, 11.8397 ], [ 75.401562, 11.839768 ], [ 75.40148, 11.839864 ], [ 75.401522, 11.839932 ], [ 75.401466, 11.839972 ], [ 75.401411, 11.840013 ], [ 75.401341, 11.840041 ], [ 75.401286, 11.840102 ], [ 75.401274, 11.840162 ], [ 75.401254, 11.84023 ], [ 75.401206, 11.840277 ], [ 75.401143, 11.840277 ], [ 75.401072, 11.840251 ], [ 75.401002, 11.840265 ], [ 75.400924, 11.840272 ], [ 75.400898, 11.840339 ], [ 75.400929, 11.840406 ], [ 75.400896, 11.840467 ], [ 75.400824, 11.84044 ], [ 75.400762, 11.840488 ], [ 75.400729, 11.840542 ], [ 75.400664, 11.840502 ], [ 75.400594, 11.840536 ], [ 75.400547, 11.84059 ], [ 75.400493, 11.84063 ], [ 75.400431, 11.84067 ], [ 75.400343, 11.840669 ], [ 75.400239, 11.840737 ], [ 75.400015, 11.840752 ], [ 75.399965, 11.840732 ], [ 75.399906, 11.840686 ], [ 75.399868, 11.840626 ], [ 75.399798, 11.840647 ], [ 75.3997, 11.840688 ], [ 75.399706, 11.840661 ], [ 75.39963, 11.840657 ], [ 75.399623, 11.840657 ], [ 75.399554, 11.840677 ], [ 75.399485, 11.840697 ], [ 75.39941, 11.84071 ], [ 75.399348, 11.840716 ], [ 75.399281, 11.840707 ], [ 75.399208, 11.840699 ], [ 75.399139, 11.840712 ], [ 75.399075, 11.840746 ], [ 75.399006, 11.840767 ], [ 75.398955, 11.840822 ], [ 75.398898, 11.840878 ], [ 75.398835, 11.840919 ], [ 75.39876, 11.840945 ], [ 75.398686, 11.840951 ], [ 75.398625, 11.840942 ], [ 75.398558, 11.840913 ], [ 75.398498, 11.840877 ], [ 75.398428, 11.840897 ], [ 75.398364, 11.840939 ], [ 75.398362, 11.841009 ], [ 75.398389, 11.841058 ], [ 75.39834, 11.841099 ], [ 75.398387, 11.841155 ], [ 75.398312, 11.841154 ], [ 75.39825, 11.841167 ], [ 75.398228, 11.841236 ], [ 75.398266, 11.841293 ], [ 75.39825, 11.841356 ], [ 75.398193, 11.841404 ], [ 75.398143, 11.841459 ], [ 75.398148, 11.841522 ], [ 75.398092, 11.84157 ], [ 75.39803, 11.84161 ], [ 75.397969, 11.841603 ], [ 75.397909, 11.841574 ], [ 75.397848, 11.841573 ], [ 75.397887, 11.841622 ], [ 75.397839, 11.84167 ], [ 75.397858, 11.841739 ], [ 75.397856, 11.841808 ], [ 75.397801, 11.841842 ], [ 75.397739, 11.841876 ], [ 75.397737, 11.841945 ], [ 75.397651, 11.842062 ], [ 75.397539, 11.84215 ], [ 75.397365, 11.8423 ], [ 75.397199, 11.84247 ], [ 75.397123, 11.842518 ], [ 75.397054, 11.842497 ], [ 75.397021, 11.842429 ], [ 75.39698, 11.842374 ], [ 75.39691, 11.842388 ], [ 75.396862, 11.842463 ], [ 75.396848, 11.842517 ], [ 75.39682, 11.842579 ], [ 75.396778, 11.842641 ], [ 75.396778, 11.842709 ], [ 75.396797, 11.842777 ], [ 75.3968419, 11.842883 ], [ 75.3968911, 11.8429667 ], [ 75.3968675, 11.8430512 ], [ 75.3967981, 11.8431846 ], [ 75.3964356, 11.8435341 ], [ 75.3962102, 11.8436814 ], [ 75.3960369, 11.8441153 ], [ 75.394923, 11.8453234 ], [ 75.3945091, 11.8453392 ], [ 75.3945244, 11.8455633 ], [ 75.3944606, 11.8456712 ], [ 75.3944292, 11.8458673 ], [ 75.394253, 11.846096 ], [ 75.394087, 11.84639 ], [ 75.393912, 11.846658 ], [ 75.393845, 11.846867 ], [ 75.393829, 11.847041 ], [ 75.393667, 11.847226 ], [ 75.393617, 11.847371 ], [ 75.393513, 11.847528 ], [ 75.393562, 11.847652 ], [ 75.393465, 11.847686 ], [ 75.393374, 11.847789 ], [ 75.393291, 11.848008 ], [ 75.39318, 11.848063 ], [ 75.393089, 11.848118 ], [ 75.393116, 11.84818 ], [ 75.393081, 11.848249 ], [ 75.393018, 11.848284 ], [ 75.392781, 11.848477 ], [ 75.392458, 11.848793 ], [ 75.392098, 11.849125 ], [ 75.391758, 11.849375 ], [ 75.391518, 11.849568 ], [ 75.3913737, 11.8496667 ], [ 75.391217, 11.849774 ], [ 75.390867, 11.85011 ], [ 75.390558, 11.850467 ], [ 75.390259, 11.850818 ], [ 75.389579, 11.851656 ], [ 75.389453, 11.851759 ], [ 75.38934, 11.851848 ], [ 75.389116, 11.852054 ], [ 75.388877, 11.852295 ], [ 75.38846, 11.852722 ], [ 75.388045, 11.853162 ], [ 75.38752, 11.853629 ], [ 75.386834, 11.854274 ], [ 75.386199, 11.854832 ], [ 75.385656, 11.855337 ], [ 75.385214428296109, 11.855722983776626 ], [ 75.385092, 11.85583 ], [ 75.385014428296103, 11.855900168595225 ], [ 75.38461, 11.856266 ], [ 75.384327, 11.856528 ], [ 75.3842463, 11.856579 ], [ 75.384058, 11.856698 ], [ 75.383896, 11.856831 ], [ 75.383626, 11.857063 ], [ 75.383233, 11.857321 ], [ 75.382987, 11.85748 ], [ 75.382825, 11.857474 ], [ 75.382684, 11.857424 ], [ 75.382556, 11.857481 ], [ 75.382346, 11.857618 ], [ 75.382176, 11.857718 ], [ 75.382018, 11.857729 ], [ 75.381897, 11.857811 ], [ 75.381578, 11.857961 ], [ 75.381258, 11.858093 ], [ 75.380834, 11.858231 ], [ 75.380429, 11.858345 ], [ 75.380003, 11.858458 ], [ 75.379951, 11.858351 ], [ 75.379883, 11.858408 ], [ 75.379913, 11.858503 ], [ 75.3789, 11.858666 ], [ 75.378853, 11.858484 ], [ 75.378808, 11.858477 ], [ 75.378801, 11.858515 ], [ 75.378872, 11.858785 ], [ 75.378763, 11.858786 ], [ 75.37852, 11.858792 ], [ 75.378404, 11.85878 ], [ 75.378198, 11.858792 ], [ 75.37798, 11.858767 ], [ 75.377916, 11.858761 ], [ 75.37782, 11.858818 ], [ 75.377821, 11.858503 ], [ 75.3777812, 11.8585007 ], [ 75.377777, 11.8589484 ], [ 75.3767923, 11.8589223 ], [ 75.3767548, 11.8588076 ], [ 75.376749, 11.858459 ], [ 75.376626, 11.858105 ], [ 75.37653, 11.857553 ], [ 75.376174, 11.855939 ], [ 75.375993, 11.854889 ], [ 75.376058, 11.85487 ], [ 75.37609, 11.854813 ], [ 75.376051, 11.854762 ], [ 75.375967, 11.854768 ], [ 75.37587, 11.854806 ], [ 75.375786, 11.854914 ], [ 75.375676, 11.855091 ], [ 75.375573, 11.855237 ], [ 75.375476, 11.855357 ], [ 75.375469, 11.855545 ], [ 75.3755339, 11.8558608 ], [ 75.3758307, 11.8573047 ], [ 75.375994, 11.858099 ], [ 75.375091, 11.857973 ], [ 75.375071, 11.858074 ], [ 75.374987, 11.858061 ], [ 75.374787, 11.858041 ], [ 75.374633, 11.858022 ], [ 75.374427, 11.857953 ], [ 75.374285, 11.857858 ], [ 75.374027, 11.857671 ], [ 75.37395, 11.857601 ], [ 75.373847, 11.857494 ], [ 75.373616, 11.857312 ], [ 75.37341, 11.857136 ], [ 75.3733224, 11.8570252 ], [ 75.373236, 11.856916 ], [ 75.373081, 11.856752 ], [ 75.372856, 11.856526 ], [ 75.372811, 11.856362 ], [ 75.37285, 11.856311 ], [ 75.372869, 11.856248 ], [ 75.372863, 11.856179 ], [ 75.372831, 11.856129 ], [ 75.372767, 11.856148 ], [ 75.372696, 11.856148 ], [ 75.372639, 11.856116 ], [ 75.372613, 11.856053 ], [ 75.372601, 11.855991 ], [ 75.372614, 11.855928 ], [ 75.372665, 11.85589 ], [ 75.372703, 11.85584 ], [ 75.372677, 11.855777 ], [ 75.372677, 11.855714 ], [ 75.372689, 11.85565 ], [ 75.372714, 11.855587 ], [ 75.372746, 11.855524 ], [ 75.372746, 11.855455 ], [ 75.372708, 11.855417 ], [ 75.37267, 11.855361 ], [ 75.372721, 11.855316 ], [ 75.372823, 11.8553 ], [ 75.372854, 11.855339 ], [ 75.372893, 11.855402 ], [ 75.37295, 11.855441 ], [ 75.373014, 11.855417 ], [ 75.373072, 11.855379 ], [ 75.373117, 11.855335 ], [ 75.373156, 11.855076 ], [ 75.373272, 11.854811 ], [ 75.373266, 11.85476 ], [ 75.373221, 11.854715 ], [ 75.373305, 11.854564 ], [ 75.374259, 11.853119 ], [ 75.374381, 11.853068 ], [ 75.374388, 11.853087 ], [ 75.375669, 11.853793 ], [ 75.376866, 11.853546 ], [ 75.376848, 11.853394 ], [ 75.376762, 11.853332 ], [ 75.376544, 11.853363 ], [ 75.376327, 11.853414 ], [ 75.376061, 11.853452 ], [ 75.375795, 11.853503 ], [ 75.375614, 11.853528 ], [ 75.375363, 11.853421 ], [ 75.375185, 11.853303 ], [ 75.374992, 11.853202 ], [ 75.374642, 11.853011 ], [ 75.374403, 11.852878 ], [ 75.374215, 11.852778 ], [ 75.374033, 11.85269 ], [ 75.37391, 11.852667 ], [ 75.373876, 11.852638 ], [ 75.373951, 11.85259 ], [ 75.374008, 11.852574 ], [ 75.374055, 11.852569 ], [ 75.3741, 11.852543 ], [ 75.374159, 11.852512 ], [ 75.374189, 11.852469 ], [ 75.374176, 11.852417 ], [ 75.374126, 11.852396 ], [ 75.374074, 11.852401 ], [ 75.374054, 11.852448 ], [ 75.374029, 11.85249 ], [ 75.373972, 11.852463 ], [ 75.373925, 11.852432 ], [ 75.373872, 11.852426 ], [ 75.373817, 11.85241 ], [ 75.373762, 11.852394 ], [ 75.373712, 11.85241 ], [ 75.373728, 11.852462 ], [ 75.373702, 11.852509 ], [ 75.373659, 11.852541 ], [ 75.373612, 11.852504 ], [ 75.37355, 11.852415 ], [ 75.373476, 11.852362 ], [ 75.373419, 11.852362 ], [ 75.373325, 11.852414 ], [ 75.373284, 11.85253 ], [ 75.373206, 11.852701 ], [ 75.373114, 11.852859 ], [ 75.372956, 11.852953 ], [ 75.372822, 11.853031 ], [ 75.372617, 11.853104 ], [ 75.372363, 11.853171 ], [ 75.372162, 11.8532 ], [ 75.372106, 11.853178 ], [ 75.37205, 11.853157 ], [ 75.371995, 11.853135 ], [ 75.371937, 11.853158 ], [ 75.371903, 11.853197 ], [ 75.371869, 11.853242 ], [ 75.371839, 11.853282 ], [ 75.371811, 11.853333 ], [ 75.371776, 11.853373 ], [ 75.371723, 11.853397 ], [ 75.371657, 11.853397 ], [ 75.371608, 11.853391 ], [ 75.371557, 11.853369 ], [ 75.371511, 11.853329 ], [ 75.371455, 11.853306 ], [ 75.371404, 11.853273 ], [ 75.371349, 11.853262 ], [ 75.371294, 11.853262 ], [ 75.371233, 11.853228 ], [ 75.371252, 11.853183 ], [ 75.371212, 11.853139 ], [ 75.371153, 11.853139 ], [ 75.371111, 11.853178 ], [ 75.371058, 11.8532 ], [ 75.371003, 11.853183 ], [ 75.370947, 11.853155 ], [ 75.370935, 11.8531 ], [ 75.37096, 11.85305 ], [ 75.370942, 11.852995 ], [ 75.370898, 11.852956 ], [ 75.370861, 11.852995 ], [ 75.370863, 11.85305 ], [ 75.37087, 11.853121 ], [ 75.370839, 11.853155 ], [ 75.370805, 11.85311 ], [ 75.370757, 11.853127 ], [ 75.370736, 11.853177 ], [ 75.370682, 11.853165 ], [ 75.37065, 11.853204 ], [ 75.370678, 11.853249 ], [ 75.37063, 11.853277 ], [ 75.370598, 11.853322 ], [ 75.370544, 11.853344 ], [ 75.370494, 11.853316 ], [ 75.370462, 11.853367 ], [ 75.370468, 11.853423 ], [ 75.370447, 11.85348 ], [ 75.370415, 11.853526 ], [ 75.3703896, 11.8535438 ], [ 75.370365, 11.853561 ], [ 75.370316, 11.853595 ], [ 75.370266, 11.853617 ], [ 75.370211, 11.853599 ], [ 75.370162, 11.853569 ], [ 75.370112, 11.853562 ], [ 75.370057, 11.853538 ], [ 75.370002, 11.853537 ], [ 75.369942, 11.853553 ], [ 75.369887, 11.853547 ], [ 75.369833, 11.853528 ], [ 75.36979, 11.853488 ], [ 75.369758, 11.853442 ], [ 75.369715, 11.853407 ], [ 75.369678, 11.853362 ], [ 75.369636, 11.853316 ], [ 75.369583, 11.853293 ], [ 75.369535, 11.853264 ], [ 75.369482, 11.853247 ], [ 75.36944, 11.853202 ], [ 75.369415, 11.853146 ], [ 75.369401, 11.853097 ], [ 75.369371, 11.853047 ], [ 75.369319, 11.853019 ], [ 75.369271, 11.853013 ], [ 75.369218, 11.853018 ], [ 75.369164, 11.853039 ], [ 75.369111, 11.853033 ], [ 75.369059, 11.853016 ], [ 75.369007, 11.853 ], [ 75.368983, 11.85295 ], [ 75.368965, 11.852896 ], [ 75.368948, 11.852781 ], [ 75.368938, 11.852738 ], [ 75.368904, 11.852683 ], [ 75.368865, 11.852629 ], [ 75.368826, 11.85258 ], [ 75.368766, 11.852543 ], [ 75.368703, 11.852541 ], [ 75.368651, 11.852522 ], [ 75.368608, 11.85248 ], [ 75.368549, 11.852455 ], [ 75.368465, 11.852454 ], [ 75.368431, 11.852453 ], [ 75.368375, 11.852446 ], [ 75.368332, 11.852404 ], [ 75.368306, 11.852351 ], [ 75.368275, 11.852293 ], [ 75.368222, 11.852257 ], [ 75.36817, 11.852222 ], [ 75.368123, 11.852175 ], [ 75.368082, 11.852124 ], [ 75.368031, 11.852095 ], [ 75.367991, 11.852061 ], [ 75.367977, 11.852004 ], [ 75.367953, 11.851954 ], [ 75.367902, 11.85192 ], [ 75.367846, 11.851892 ], [ 75.367802, 11.851858 ], [ 75.367762, 11.851813 ], [ 75.367712, 11.85178 ], [ 75.367657, 11.851752 ], [ 75.367608, 11.851724 ], [ 75.367564, 11.851686 ], [ 75.367512, 11.851688 ], [ 75.367459, 11.851705 ], [ 75.367406, 11.8517 ], [ 75.367325, 11.851632 ], [ 75.367282, 11.8516 ], [ 75.36725, 11.851553 ], [ 75.367217, 11.851511 ], [ 75.367185, 11.851463 ], [ 75.367137, 11.851426 ], [ 75.367084, 11.851416 ], [ 75.367047, 11.851374 ], [ 75.36702, 11.851322 ], [ 75.366983, 11.851285 ], [ 75.367025, 11.851263 ], [ 75.367014, 11.851211 ], [ 75.367014, 11.851159 ], [ 75.367013, 11.851107 ], [ 75.366987, 11.851061 ], [ 75.36693, 11.851052 ], [ 75.366884, 11.851047 ], [ 75.366837, 11.851073 ], [ 75.366791, 11.851047 ], [ 75.366786, 11.850996 ], [ 75.366734, 11.850986 ], [ 75.366704, 11.85094 ], [ 75.366694, 11.850889 ], [ 75.366653, 11.850854 ], [ 75.366613, 11.850814 ], [ 75.366578, 11.850774 ], [ 75.366532, 11.850789 ], [ 75.366526, 11.850839 ], [ 75.36654, 11.850889 ], [ 75.366539, 11.85094 ], [ 75.366569, 11.850981 ], [ 75.36661, 11.851011 ], [ 75.366656, 11.851027 ], [ 75.36664, 11.851078 ], [ 75.366604, 11.851078 ], [ 75.366589, 11.851032 ], [ 75.366547, 11.851047 ], [ 75.366501, 11.851042 ], [ 75.366459, 11.85103 ], [ 75.366445, 11.851043 ], [ 75.366418, 11.851084 ], [ 75.366395, 11.851121 ], [ 75.366347, 11.85113 ], [ 75.366354, 11.851176 ], [ 75.366389, 11.851213 ], [ 75.366387, 11.851265 ], [ 75.366403, 11.851307 ], [ 75.366451, 11.851288 ], [ 75.366489, 11.851255 ], [ 75.366538, 11.85125 ], [ 75.366578, 11.851278 ], [ 75.366581, 11.85133 ], [ 75.366574, 11.851377 ], [ 75.366556, 11.85142 ], [ 75.366549, 11.851468 ], [ 75.366546, 11.851516 ], [ 75.366543, 11.851564 ], [ 75.366505, 11.851602 ], [ 75.366476, 11.851641 ], [ 75.366458, 11.85169 ], [ 75.36646, 11.851738 ], [ 75.366442, 11.851788 ], [ 75.366428, 11.851832 ], [ 75.366479, 11.851832 ], [ 75.366528, 11.851811 ], [ 75.366579, 11.851821 ], [ 75.366601, 11.85187 ], [ 75.366608, 11.85192 ], [ 75.366615, 11.85196 ], [ 75.366643, 11.85192 ], [ 75.366682, 11.851885 ], [ 75.366705, 11.851934 ], [ 75.366722, 11.851984 ], [ 75.366684, 11.852019 ], [ 75.366634, 11.852035 ], [ 75.366595, 11.852066 ], [ 75.366551, 11.852098 ], [ 75.366517, 11.852144 ], [ 75.366483, 11.852186 ], [ 75.366449, 11.852228 ], [ 75.36643, 11.85228 ], [ 75.366406, 11.852332 ], [ 75.366387, 11.852384 ], [ 75.366368, 11.852436 ], [ 75.366348, 11.852489 ], [ 75.366329, 11.852547 ], [ 75.366298, 11.85259 ], [ 75.366284, 11.852643 ], [ 75.36628, 11.852696 ], [ 75.366265, 11.85275 ], [ 75.366213, 11.852772 ], [ 75.36616, 11.852794 ], [ 75.366107, 11.8528 ], [ 75.366054, 11.852796 ], [ 75.365996, 11.852797 ], [ 75.365937, 11.852798 ], [ 75.365884, 11.852788 ], [ 75.365836, 11.852756 ], [ 75.365788, 11.852735 ], [ 75.365745, 11.852693 ], [ 75.365708, 11.852646 ], [ 75.365676, 11.852604 ], [ 75.365649, 11.852556 ], [ 75.36565, 11.852446 ], [ 75.365623, 11.852399 ], [ 75.365597, 11.852352 ], [ 75.365582, 11.8523 ], [ 75.365572, 11.852249 ], [ 75.365525, 11.852224 ], [ 75.365473, 11.852229 ], [ 75.36542, 11.852223 ], [ 75.365368, 11.852218 ], [ 75.365316, 11.852223 ], [ 75.365264, 11.852208 ], [ 75.365207, 11.852208 ], [ 75.365154, 11.852233 ], [ 75.365097, 11.852218 ], [ 75.365083, 11.852166 ], [ 75.365049, 11.852124 ], [ 75.365003, 11.852088 ], [ 75.364957, 11.852093 ], [ 75.364919, 11.852134 ], [ 75.364866, 11.852145 ], [ 75.364813, 11.852165 ], [ 75.364769, 11.852207 ], [ 75.36471, 11.852244 ], [ 75.364668, 11.852239 ], [ 75.364634, 11.852208 ], [ 75.364611, 11.852156 ], [ 75.364571, 11.852125 ], [ 75.36452, 11.852109 ], [ 75.364532, 11.852161 ], [ 75.36456, 11.852208 ], [ 75.364606, 11.852229 ], [ 75.364641, 11.852265 ], [ 75.364638, 11.852318 ], [ 75.364651, 11.85237 ], [ 75.364617, 11.852413 ], [ 75.364563, 11.852429 ], [ 75.364565, 11.852483 ], [ 75.364616, 11.852509 ], [ 75.364587, 11.852558 ], [ 75.36454, 11.852547 ], [ 75.364553, 11.852596 ], [ 75.364587, 11.852639 ], [ 75.364617, 11.852683 ], [ 75.36467, 11.852699 ], [ 75.364723, 11.852704 ], [ 75.364742, 11.852759 ], [ 75.364755, 11.852809 ], [ 75.36481, 11.852803 ], [ 75.364865, 11.852775 ], [ 75.364896, 11.852813 ], [ 75.364851, 11.852852 ], [ 75.364797, 11.852853 ], [ 75.364742, 11.852849 ], [ 75.364688, 11.85285 ], [ 75.364634, 11.85284 ], [ 75.364578, 11.852858 ], [ 75.364532, 11.852898 ], [ 75.364476, 11.852921 ], [ 75.364431, 11.852933 ], [ 75.364479, 11.852965 ], [ 75.364511, 11.853073 ], [ 75.364535, 11.85311 ], [ 75.36452, 11.853156 ], [ 75.364515, 11.853203 ], [ 75.36452, 11.85325 ], [ 75.364525, 11.853297 ], [ 75.364505, 11.85334 ], [ 75.364455, 11.853332 ], [ 75.364416, 11.853299 ], [ 75.364376, 11.853261 ], [ 75.364352, 11.853223 ], [ 75.364318, 11.853191 ], [ 75.364273, 11.853215 ], [ 75.364232, 11.853248 ], [ 75.364226, 11.853296 ], [ 75.36423, 11.853344 ], [ 75.364234, 11.853392 ], [ 75.364233, 11.853445 ], [ 75.364237, 11.853499 ], [ 75.364277, 11.853537 ], [ 75.364327, 11.853541 ], [ 75.364383, 11.853541 ], [ 75.364428, 11.853564 ], [ 75.364468, 11.853593 ], [ 75.364508, 11.853621 ], [ 75.364549, 11.85365 ], [ 75.364564, 11.853698 ], [ 75.364553, 11.853743 ], [ 75.364513, 11.853778 ], [ 75.364467, 11.853774 ], [ 75.364431, 11.853815 ], [ 75.364431, 11.85386 ], [ 75.364385, 11.853861 ], [ 75.364405, 11.85391 ], [ 75.364384, 11.853956 ], [ 75.364332, 11.853967 ], [ 75.364286, 11.853984 ], [ 75.364238, 11.854021 ], [ 75.364201, 11.854062 ], [ 75.364155, 11.854028 ], [ 75.364103, 11.854049 ], [ 75.364056, 11.854075 ], [ 75.364015, 11.854025 ], [ 75.363969, 11.85402 ], [ 75.363934, 11.853975 ], [ 75.363925, 11.853924 ], [ 75.363916, 11.853874 ], [ 75.363892, 11.853829 ], [ 75.363862, 11.853789 ], [ 75.363822, 11.853749 ], [ 75.363787, 11.85371 ], [ 75.363779, 11.85366 ], [ 75.36375, 11.853621 ], [ 75.363693, 11.853622 ], [ 75.363666, 11.853666 ], [ 75.363614, 11.853672 ], [ 75.363566, 11.853697 ], [ 75.363523, 11.853728 ], [ 75.36353, 11.853779 ], [ 75.363472, 11.853775 ], [ 75.363433, 11.85375 ], [ 75.363404, 11.853796 ], [ 75.3634, 11.853847 ], [ 75.363397, 11.853898 ], [ 75.363404, 11.853945 ], [ 75.363357, 11.85395 ], [ 75.363348, 11.854002 ], [ 75.363329, 11.854054 ], [ 75.363315, 11.854107 ], [ 75.363316, 11.85416 ], [ 75.363306, 11.85422 ], [ 75.363313, 11.854268 ], [ 75.363352, 11.854306 ], [ 75.363381, 11.854349 ], [ 75.363415, 11.854393 ], [ 75.363375, 11.854432 ], [ 75.363344, 11.854482 ], [ 75.363362, 11.854538 ], [ 75.363402, 11.854576 ], [ 75.363455, 11.854598 ], [ 75.363497, 11.85463 ], [ 75.363539, 11.854667 ], [ 75.363594, 11.854676 ], [ 75.363642, 11.854707 ], [ 75.363616, 11.854771 ], [ 75.363602, 11.854829 ], [ 75.363621, 11.854886 ], [ 75.363584, 11.854941 ], [ 75.363586, 11.855 ], [ 75.363565, 11.855061 ], [ 75.363527, 11.855117 ], [ 75.3635, 11.855178 ], [ 75.363502, 11.855245 ], [ 75.363486, 11.855313 ], [ 75.363459, 11.855376 ], [ 75.363455, 11.855438 ], [ 75.363456, 11.8555 ], [ 75.363506, 11.855534 ], [ 75.363538, 11.855588 ], [ 75.363539, 11.855735 ], [ 75.363454, 11.855835 ], [ 75.36331, 11.855995 ], [ 75.36311, 11.856176 ], [ 75.363105, 11.856181 ], [ 75.362868, 11.856395 ], [ 75.362687, 11.856547 ], [ 75.362533, 11.856642 ], [ 75.362366, 11.856749 ], [ 75.362138, 11.85684 ], [ 75.361932, 11.856885 ], [ 75.361926, 11.856881 ], [ 75.361892, 11.856838 ], [ 75.361882, 11.85679 ], [ 75.361877, 11.856738 ], [ 75.361867, 11.85669 ], [ 75.361848, 11.856648 ], [ 75.36182, 11.856606 ], [ 75.361777, 11.856573 ], [ 75.361731, 11.85655 ], [ 75.361681, 11.856541 ], [ 75.361627, 11.856541 ], [ 75.361579, 11.856555 ], [ 75.361537, 11.856574 ], [ 75.361506, 11.856611 ], [ 75.361464, 11.856634 ], [ 75.361421, 11.856658 ], [ 75.361374, 11.856677 ], [ 75.361325, 11.856672 ], [ 75.361276, 11.856663 ], [ 75.361245, 11.856696 ], [ 75.361223, 11.856739 ], [ 75.361207, 11.856787 ], [ 75.361201, 11.856835 ], [ 75.361194, 11.856883 ], [ 75.361183, 11.856932 ], [ 75.361187, 11.856986 ], [ 75.361181, 11.857035 ], [ 75.361159, 11.857085 ], [ 75.361127, 11.857125 ], [ 75.361095, 11.857165 ], [ 75.361062, 11.857206 ], [ 75.361035, 11.857251 ], [ 75.361002, 11.857287 ], [ 75.360964, 11.857329 ], [ 75.360935, 11.85737 ], [ 75.360913, 11.857422 ], [ 75.360889, 11.857463 ], [ 75.360861, 11.85751 ], [ 75.360822, 11.857548 ], [ 75.360782, 11.857585 ], [ 75.360748, 11.857628 ], [ 75.360724, 11.857676 ], [ 75.360705, 11.857729 ], [ 75.360691, 11.857783 ], [ 75.360672, 11.857836 ], [ 75.360658, 11.85789 ], [ 75.360639, 11.857945 ], [ 75.360603, 11.857983 ], [ 75.360562, 11.858017 ], [ 75.360543, 11.858077 ], [ 75.360528, 11.858133 ], [ 75.360497, 11.858178 ], [ 75.360467, 11.858231 ], [ 75.360436, 11.858284 ], [ 75.3604, 11.858349 ], [ 75.360363, 11.858391 ], [ 75.360309, 11.85841 ], [ 75.360266, 11.858452 ], [ 75.360229, 11.8585 ], [ 75.360197, 11.858553 ], [ 75.360153, 11.858599 ], [ 75.360103, 11.858634 ], [ 75.360059, 11.858669 ], [ 75.360048, 11.858726 ], [ 75.360009, 11.858767 ], [ 75.359959, 11.858807 ], [ 75.359915, 11.858841 ], [ 75.359864, 11.858882 ], [ 75.359819, 11.858906 ], [ 75.359694, 11.858953 ], [ 75.359654, 11.858989 ], [ 75.35961, 11.85902 ], [ 75.359576, 11.859066 ], [ 75.359547, 11.859113 ], [ 75.359503, 11.859149 ], [ 75.359463, 11.859186 ], [ 75.359418, 11.859222 ], [ 75.359377, 11.859254 ], [ 75.359332, 11.85928 ], [ 75.359281, 11.859302 ], [ 75.359235, 11.859334 ], [ 75.359189, 11.859362 ], [ 75.359137, 11.859373 ], [ 75.359085, 11.85938 ], [ 75.359033, 11.859402 ], [ 75.358981, 11.859387 ], [ 75.358928, 11.859383 ], [ 75.358875, 11.859389 ], [ 75.358828, 11.859416 ], [ 75.358787, 11.859448 ], [ 75.358718, 11.859454 ], [ 75.358676, 11.85947 ], [ 75.358623, 11.859508 ], [ 75.35857, 11.859519 ], [ 75.358512, 11.859526 ], [ 75.358458, 11.859553 ], [ 75.35841, 11.859586 ], [ 75.358362, 11.859592 ], [ 75.358298, 11.859604 ], [ 75.358255, 11.859616 ], [ 75.358202, 11.859622 ], [ 75.358148, 11.859607 ], [ 75.358089, 11.859609 ], [ 75.358035, 11.859631 ], [ 75.35798, 11.859654 ], [ 75.357932, 11.859681 ], [ 75.357882, 11.859719 ], [ 75.357838, 11.859747 ], [ 75.357784, 11.859769 ], [ 75.357735, 11.859796 ], [ 75.35768, 11.859818 ], [ 75.357524, 11.859806 ], [ 75.357519, 11.859806 ], [ 75.35747, 11.859816 ], [ 75.357419, 11.859801 ], [ 75.35737, 11.859801 ], [ 75.357321, 11.859811 ], [ 75.357262, 11.859821 ], [ 75.357214, 11.85984 ], [ 75.35717, 11.859859 ], [ 75.357128, 11.859888 ], [ 75.357079, 11.859908 ], [ 75.35703, 11.859927 ], [ 75.35698, 11.859922 ], [ 75.356928, 11.859907 ], [ 75.356878, 11.859907 ], [ 75.356827, 11.859902 ], [ 75.35678, 11.859883 ], [ 75.356728, 11.859864 ], [ 75.356691, 11.85983 ], [ 75.356643, 11.859801 ], [ 75.356597, 11.859782 ], [ 75.356547, 11.859773 ], [ 75.356498, 11.859773 ], [ 75.356449, 11.859783 ], [ 75.356398, 11.859759 ], [ 75.356344, 11.859759 ], [ 75.356294, 11.85975 ], [ 75.356253, 11.859721 ], [ 75.356203, 11.859712 ], [ 75.356154, 11.859717 ], [ 75.356104, 11.859708 ], [ 75.356053, 11.859693 ], [ 75.356003, 11.859679 ], [ 75.355958, 11.859656 ], [ 75.355907, 11.859632 ], [ 75.355858, 11.859642 ], [ 75.355808, 11.859642 ], [ 75.35576, 11.859657 ], [ 75.355712, 11.859676 ], [ 75.355662, 11.859667 ], [ 75.355612, 11.859658 ], [ 75.355563, 11.859649 ], [ 75.355509, 11.859664 ], [ 75.35546, 11.859664 ], [ 75.355411, 11.859679 ], [ 75.355361, 11.859689 ], [ 75.355312, 11.859695 ], [ 75.355273, 11.859729 ], [ 75.355239, 11.859764 ], [ 75.355188, 11.859749 ], [ 75.355138, 11.859779 ], [ 75.355104, 11.859809 ], [ 75.355069, 11.859844 ], [ 75.355044, 11.859894 ], [ 75.355019, 11.859934 ], [ 75.354995, 11.859979 ], [ 75.354995, 11.86003 ], [ 75.355021, 11.860081 ], [ 75.355063, 11.860116 ], [ 75.355105, 11.860147 ], [ 75.355111, 11.860198 ], [ 75.355153, 11.860234 ], [ 75.3552, 11.860265 ], [ 75.355237, 11.860301 ], [ 75.355259, 11.860353 ], [ 75.355297, 11.860399 ], [ 75.355314, 11.860451 ], [ 75.355331, 11.860503 ], [ 75.355353, 11.860556 ], [ 75.355391, 11.860597 ], [ 75.355438, 11.860622 ], [ 75.355419, 11.860677 ], [ 75.3554, 11.860732 ], [ 75.355408, 11.860792 ], [ 75.355415, 11.860842 ], [ 75.355401, 11.860898 ], [ 75.355382, 11.860955 ], [ 75.355373, 11.861012 ], [ 75.355385, 11.861068 ], [ 75.355408, 11.861118 ], [ 75.355421, 11.861175 ], [ 75.355444, 11.861231 ], [ 75.35543, 11.861291 ], [ 75.355422, 11.86135 ], [ 75.35543, 11.861415 ], [ 75.355432, 11.861475 ], [ 75.355412, 11.861536 ], [ 75.355387, 11.861593 ], [ 75.3554, 11.861653 ], [ 75.355429, 11.861705 ], [ 75.355415, 11.861769 ], [ 75.355386, 11.861917 ], [ 75.355359, 11.861949 ], [ 75.355356, 11.861994 ], [ 75.355358, 11.862039 ], [ 75.355326, 11.862081 ], [ 75.355327, 11.862131 ], [ 75.355339, 11.862177 ], [ 75.355326, 11.862224 ], [ 75.355303, 11.862266 ], [ 75.355319, 11.862309 ], [ 75.35534, 11.862355 ], [ 75.355336, 11.862403 ], [ 75.355314, 11.862451 ], [ 75.355286, 11.86249 ], [ 75.355262, 11.862535 ], [ 75.355213, 11.862555 ], [ 75.355164, 11.862575 ], [ 75.355109, 11.862575 ], [ 75.355059, 11.862585 ], [ 75.355009, 11.862601 ], [ 75.354985, 11.862645 ], [ 75.354965, 11.862689 ], [ 75.354945, 11.862739 ], [ 75.354961, 11.862789 ], [ 75.354931, 11.862834 ], [ 75.354895, 11.862875 ], [ 75.354885, 11.862925 ], [ 75.354937, 11.862945 ], [ 75.354968, 11.862985 ], [ 75.354942, 11.863031 ], [ 75.354953, 11.863077 ], [ 75.354995, 11.863113 ], [ 75.355011, 11.863164 ], [ 75.35498, 11.863212 ], [ 75.354949, 11.863254 ], [ 75.35496, 11.863307 ], [ 75.35495, 11.86336 ], [ 75.35493, 11.863414 ], [ 75.354972, 11.86345 ], [ 75.355009, 11.863492 ], [ 75.355062, 11.863517 ], [ 75.355099, 11.863549 ], [ 75.355111, 11.863602 ], [ 75.355117, 11.863657 ], [ 75.355113, 11.863712 ], [ 75.355092, 11.863768 ], [ 75.355072, 11.863825 ], [ 75.355068, 11.863881 ], [ 75.355058, 11.863933 ], [ 75.355004, 11.863963 ], [ 75.354961, 11.864011 ], [ 75.354919, 11.864145 ], [ 75.354915, 11.864154 ], [ 75.354895, 11.864195 ], [ 75.354851, 11.864222 ], [ 75.35481, 11.864245 ], [ 75.354765, 11.864263 ], [ 75.354734, 11.864295 ], [ 75.354737, 11.864346 ], [ 75.354716, 11.864387 ], [ 75.354675, 11.864415 ], [ 75.354629, 11.86443 ], [ 75.354588, 11.864467 ], [ 75.354556, 11.8645 ], [ 75.354509, 11.864519 ], [ 75.35446, 11.864524 ], [ 75.354412, 11.864534 ], [ 75.354385, 11.864577 ], [ 75.354347, 11.86461 ], [ 75.354302, 11.864587 ], [ 75.354254, 11.864602 ], [ 75.354216, 11.864635 ], [ 75.354187, 11.864669 ], [ 75.354189, 11.864717 ], [ 75.354181, 11.864765 ], [ 75.354211, 11.864789 ], [ 75.354173, 11.864829 ], [ 75.354169, 11.864877 ], [ 75.354161, 11.864927 ], [ 75.354153, 11.864976 ], [ 75.354119, 11.865016 ], [ 75.354069, 11.865017 ], [ 75.354018, 11.864998 ], [ 75.353979, 11.865039 ], [ 75.35399, 11.865089 ], [ 75.353966, 11.865134 ], [ 75.353915, 11.865166 ], [ 75.353875, 11.865187 ], [ 75.353824, 11.865172 ], [ 75.353794, 11.865213 ], [ 75.353763, 11.865255 ], [ 75.353717, 11.865287 ], [ 75.353666, 11.865309 ], [ 75.353635, 11.865351 ], [ 75.35363, 11.865398 ], [ 75.353583, 11.865431 ], [ 75.353568, 11.865484 ], [ 75.353568, 11.865537 ], [ 75.353584, 11.865595 ], [ 75.353595, 11.865643 ], [ 75.353579, 11.865692 ], [ 75.353558, 11.865748 ], [ 75.353585, 11.865796 ], [ 75.353585, 11.865846 ], [ 75.353537, 11.865887 ], [ 75.353564, 11.865936 ], [ 75.353585, 11.86599 ], [ 75.35358, 11.866046 ], [ 75.353548, 11.866098 ], [ 75.353532, 11.866155 ], [ 75.353526, 11.866212 ], [ 75.353499, 11.86627 ], [ 75.353461, 11.866316 ], [ 75.353422, 11.866369 ], [ 75.353389, 11.866416 ], [ 75.35335, 11.866469 ], [ 75.353299, 11.866506 ], [ 75.353243, 11.866531 ], [ 75.353187, 11.866556 ], [ 75.353019, 11.866592 ], [ 75.35297, 11.866602 ], [ 75.352936, 11.866641 ], [ 75.352912, 11.866685 ], [ 75.352863, 11.866715 ], [ 75.352834, 11.866754 ], [ 75.35281, 11.866798 ], [ 75.352775, 11.866833 ], [ 75.35274, 11.866873 ], [ 75.3527, 11.866909 ], [ 75.35267, 11.86695 ], [ 75.352619, 11.866967 ], [ 75.352589, 11.867013 ], [ 75.352589, 11.867064 ], [ 75.352563, 11.867111 ], [ 75.352527, 11.867153 ], [ 75.352496, 11.867201 ], [ 75.352449, 11.867228 ], [ 75.352412, 11.867265 ], [ 75.352375, 11.867307 ], [ 75.352328, 11.867339 ], [ 75.352301, 11.867387 ], [ 75.352342, 11.867425 ], [ 75.35239, 11.867441 ], [ 75.352427, 11.867478 ], [ 75.352479, 11.867499 ], [ 75.352532, 11.867524 ], [ 75.352564, 11.867567 ], [ 75.352601, 11.867609 ], [ 75.352623, 11.867663 ], [ 75.352639, 11.867717 ], [ 75.352677, 11.867754 ], [ 75.35273, 11.86774 ], [ 75.352778, 11.867744 ], [ 75.352821, 11.867786 ], [ 75.352948, 11.86788 ], [ 75.352951, 11.86811 ], [ 75.352861, 11.868324 ], [ 75.3528346, 11.8683793 ], [ 75.352718, 11.868623 ], [ 75.352666, 11.86873 ], [ 75.352509, 11.86897 ], [ 75.352105, 11.869555 ], [ 75.351615, 11.870309 ], [ 75.351167, 11.871107 ], [ 75.350654, 11.87192 ], [ 75.350127, 11.872753 ], [ 75.349702, 11.873474 ], [ 75.349411, 11.873941 ], [ 75.34911, 11.874368 ], [ 75.348879, 11.874694 ], [ 75.348676, 11.874937 ], [ 75.348473, 11.875223 ], [ 75.348289, 11.875531 ], [ 75.347995, 11.875892 ], [ 75.347712, 11.876304 ], [ 75.347499, 11.876659 ], [ 75.347344, 11.876849 ], [ 75.34714, 11.877091 ], [ 75.346838, 11.877445 ], [ 75.346587, 11.877794 ], [ 75.346326, 11.87812 ], [ 75.34602, 11.878528 ], [ 75.345827, 11.878796 ], [ 75.345589, 11.879054 ], [ 75.345338, 11.879366 ], [ 75.345073, 11.879734 ], [ 75.344729, 11.880149 ], [ 75.344273, 11.880649 ], [ 75.343899, 11.881092 ], [ 75.343501, 11.881517 ], [ 75.343195, 11.881855 ], [ 75.342962, 11.88221 ], [ 75.342415, 11.882839 ], [ 75.342197, 11.883144 ], [ 75.342012, 11.883434 ], [ 75.341852, 11.883742 ], [ 75.341744, 11.884006 ], [ 75.341498, 11.884217 ], [ 75.341425, 11.884353 ], [ 75.341229, 11.8845 ], [ 75.341046, 11.884766 ], [ 75.340796, 11.885146 ], [ 75.340632, 11.885437 ], [ 75.340319, 11.88587 ], [ 75.340047, 11.886261 ], [ 75.339747, 11.886627 ], [ 75.339452, 11.886987 ], [ 75.339059, 11.887478 ], [ 75.33856, 11.888095 ], [ 75.338132, 11.888629 ], [ 75.337826, 11.889055 ], [ 75.337284, 11.889662 ], [ 75.337061, 11.889945 ], [ 75.336847871101838, 11.890211719112443 ], [ 75.336715, 11.890378 ], [ 75.336327, 11.890781 ], [ 75.335892, 11.891358 ], [ 75.335303, 11.892103 ], [ 75.334697, 11.892803 ], [ 75.334332, 11.893188 ], [ 75.333979, 11.893697 ], [ 75.333972, 11.893705 ], [ 75.333445, 11.894266 ], [ 75.332896, 11.89488 ], [ 75.332395, 11.89554 ], [ 75.332031, 11.895964 ], [ 75.331635, 11.896395 ], [ 75.331126, 11.897032 ], [ 75.330653, 11.897513 ], [ 75.330185, 11.898015 ], [ 75.329686, 11.89853 ], [ 75.329127, 11.899088 ], [ 75.3287, 11.899541 ], [ 75.328202, 11.900051 ], [ 75.327641, 11.900653 ], [ 75.327199, 11.901032 ], [ 75.326741, 11.901532 ], [ 75.326266, 11.901999 ], [ 75.325682, 11.90249 ], [ 75.325228, 11.902918 ], [ 75.324786, 11.903297 ], [ 75.324477, 11.903674 ], [ 75.324048, 11.903991 ], [ 75.323789, 11.904068 ], [ 75.323602, 11.904066 ], [ 75.323528, 11.904018 ], [ 75.32347, 11.903963 ], [ 75.32339, 11.903971 ], [ 75.32331, 11.904003 ], [ 75.323237, 11.904018 ], [ 75.323165, 11.904066 ], [ 75.323085, 11.90409 ], [ 75.323003, 11.904066 ], [ 75.32293, 11.904019 ], [ 75.322899, 11.904098 ], [ 75.322826, 11.904154 ], [ 75.322754, 11.904195 ], [ 75.322681, 11.904229 ], [ 75.3226, 11.904231 ], [ 75.322568, 11.904312 ], [ 75.322511, 11.904387 ], [ 75.32247, 11.904453 ], [ 75.322438, 11.904535 ], [ 75.322347, 11.904577 ], [ 75.322281, 11.904603 ], [ 75.322207, 11.904621 ], [ 75.322248, 11.904693 ], [ 75.322298, 11.904766 ], [ 75.322248, 11.904832 ], [ 75.322181, 11.904884 ], [ 75.322107, 11.904854 ], [ 75.322032, 11.904807 ], [ 75.321949, 11.904777 ], [ 75.321866, 11.904803 ], [ 75.321731, 11.904928 ], [ 75.321647, 11.904962 ], [ 75.321496, 11.90487 ], [ 75.321496, 11.904877 ], [ 75.32143, 11.904923 ], [ 75.321347, 11.904931 ], [ 75.32127, 11.904924 ], [ 75.321198, 11.90488 ], [ 75.321133, 11.904926 ], [ 75.321055, 11.904904 ], [ 75.320981, 11.904935 ], [ 75.32094, 11.905004 ], [ 75.320864, 11.90502 ], [ 75.320788, 11.905006 ], [ 75.320718, 11.905047 ], [ 75.320636, 11.905049 ], [ 75.320551, 11.90502 ], [ 75.320486, 11.905046 ], [ 75.32043, 11.905094 ], [ 75.320359, 11.905065 ], [ 75.320295, 11.905113 ], [ 75.320217, 11.905099 ], [ 75.320147, 11.905138 ], [ 75.320067, 11.905123 ], [ 75.319989, 11.905146 ], [ 75.319911, 11.905184 ], [ 75.319831, 11.905177 ], [ 75.319759, 11.905185 ], [ 75.319689, 11.905216 ], [ 75.319609, 11.905194 ], [ 75.319523, 11.905195 ], [ 75.319442, 11.905172 ], [ 75.319384, 11.90511 ], [ 75.31931, 11.905072 ], [ 75.319243, 11.905009 ], [ 75.319183, 11.904946 ], [ 75.319103, 11.904947 ], [ 75.319024, 11.904947 ], [ 75.318958, 11.9049 ], [ 75.318877, 11.904869 ], [ 75.318807, 11.904908 ], [ 75.318747, 11.904971 ], [ 75.318675, 11.904948 ], [ 75.31864, 11.905027 ], [ 75.318636, 11.905106 ], [ 75.318693, 11.905145 ], [ 75.318648, 11.905217 ], [ 75.31862, 11.905296 ], [ 75.318647, 11.905376 ], [ 75.318634, 11.905456 ], [ 75.318622, 11.905537 ], [ 75.318657, 11.90561 ], [ 75.318669, 11.905692 ], [ 75.318689, 11.905774 ], [ 75.318711, 11.905859 ], [ 75.318755, 11.905934 ], [ 75.318816, 11.906 ], [ 75.318884, 11.906058 ], [ 75.318965, 11.906071 ], [ 75.319034, 11.906128 ], [ 75.319071, 11.906205 ], [ 75.319037, 11.906285 ], [ 75.319035, 11.906382 ], [ 75.318982, 11.906438 ], [ 75.318971, 11.906525 ], [ 75.319008, 11.906602 ], [ 75.318945, 11.906649 ], [ 75.318882, 11.906715 ], [ 75.31892, 11.906801 ], [ 75.318883, 11.906892 ], [ 75.31881, 11.906941 ], [ 75.318737, 11.906997 ], [ 75.318654, 11.907019 ], [ 75.318659, 11.907119 ], [ 75.318729, 11.907179 ], [ 75.318731, 11.907342 ], [ 75.318672, 11.907335 ], [ 75.318608, 11.907356 ], [ 75.318566, 11.907411 ], [ 75.31854, 11.907481 ], [ 75.318564, 11.907544 ], [ 75.3185, 11.907579 ], [ 75.318427, 11.907594 ], [ 75.318408, 11.907657 ], [ 75.318454, 11.907707 ], [ 75.318381, 11.907736 ], [ 75.318354, 11.907807 ], [ 75.31832, 11.907873 ], [ 75.318254, 11.907909 ], [ 75.318212, 11.907975 ], [ 75.318184, 11.908049 ], [ 75.318172, 11.908123 ], [ 75.318167, 11.908198 ], [ 75.31817, 11.908273 ], [ 75.318165, 11.908348 ], [ 75.318176, 11.908424 ], [ 75.318163, 11.9085 ], [ 75.318182, 11.908577 ], [ 75.318208, 11.908655 ], [ 75.318212, 11.908733 ], [ 75.318231, 11.908812 ], [ 75.318266, 11.908891 ], [ 75.318285, 11.90897 ], [ 75.318289, 11.909051 ], [ 75.318285, 11.909133 ], [ 75.318305, 11.909215 ], [ 75.318356, 11.90928 ], [ 75.318408, 11.909346 ], [ 75.318452, 11.90942 ], [ 75.318504, 11.909495 ], [ 75.318534, 11.90958 ], [ 75.318562, 11.909663 ], [ 75.3186, 11.909756 ], [ 75.318644, 11.909823 ], [ 75.318706, 11.9099 ], [ 75.31876, 11.909969 ], [ 75.318814, 11.910047 ], [ 75.318896, 11.910044 ], [ 75.318986, 11.910041 ], [ 75.319033, 11.910118 ], [ 75.31908, 11.910205 ], [ 75.319118, 11.910283 ], [ 75.319133, 11.910372 ], [ 75.319148, 11.910461 ], [ 75.319203, 11.910531 ], [ 75.319281, 11.910574 ], [ 75.319345, 11.910644 ], [ 75.319408, 11.910705 ], [ 75.319488, 11.910766 ], [ 75.319567, 11.910809 ], [ 75.319616, 11.91089 ], [ 75.319599, 11.910984 ], [ 75.319609, 11.911087 ], [ 75.319599, 11.911173 ], [ 75.319528, 11.911224 ], [ 75.319483, 11.911303 ], [ 75.319492, 11.911399 ], [ 75.319465, 11.911497 ], [ 75.319619, 11.91158 ], [ 75.319525, 11.91188 ], [ 75.319431, 11.912268 ], [ 75.318932, 11.913108 ], [ 75.318353, 11.914069 ], [ 75.317595, 11.915077 ], [ 75.316827, 11.916369 ], [ 75.315921, 11.917777 ], [ 75.315072, 11.919033 ], [ 75.314225, 11.920318 ], [ 75.313249, 11.921672 ], [ 75.31174, 11.923831 ], [ 75.310704, 11.925235 ], [ 75.309233, 11.927221 ], [ 75.307941, 11.929006 ], [ 75.307581010331603, 11.929514828710937 ], [ 75.306722, 11.930729 ], [ 75.305182, 11.93269 ], [ 75.304131, 11.934058 ], [ 75.302555, 11.935968 ], [ 75.301649, 11.93708 ], [ 75.300737, 11.938154 ], [ 75.299629, 11.939239 ], [ 75.298812, 11.939958 ], [ 75.297885, 11.940747 ], [ 75.297206, 11.941281 ], [ 75.296864, 11.941632 ], [ 75.296542, 11.941822 ], [ 75.296482, 11.9419022 ], [ 75.2952995, 11.9434841 ], [ 75.2944963, 11.9445584 ], [ 75.294398, 11.94469 ], [ 75.29468, 11.944911 ], [ 75.294699, 11.945268 ], [ 75.294398, 11.946056 ], [ 75.293895, 11.946746 ], [ 75.293425, 11.947075 ], [ 75.29262, 11.947897 ], [ 75.29205, 11.948653 ], [ 75.291547, 11.949836 ], [ 75.290675, 11.951051 ], [ 75.289891, 11.952502 ], [ 75.288413, 11.954939 ], [ 75.286636, 11.957666 ], [ 75.2857, 11.959272 ], [ 75.284393, 11.961209 ], [ 75.283081, 11.963143 ], [ 75.280502, 11.966752 ], [ 75.277686, 11.970726 ], [ 75.275373, 11.973878 ], [ 75.27404, 11.975723 ], [ 75.272066, 11.978283 ], [ 75.269611, 11.981769 ], [ 75.26777, 11.984362 ], [ 75.265657, 11.987219 ], [ 75.262916, 11.990577 ], [ 75.26097, 11.993073 ], [ 75.259262, 11.995337 ], [ 75.257757, 11.997306 ], [ 75.256583, 11.998685 ], [ 75.255025, 12.000646 ], [ 75.25369, 12.002415 ], [ 75.252084, 12.004317 ], [ 75.250575, 12.006058 ], [ 75.248965, 12.007635 ], [ 75.248357604488845, 12.008255657421875 ], [ 75.247362, 12.009273 ], [ 75.24634, 12.010186 ], [ 75.245122, 12.011338 ], [ 75.244204, 12.012123 ], [ 75.243264, 12.012956 ], [ 75.242139, 12.013886 ], [ 75.240853, 12.014938 ], [ 75.240148, 12.015458 ], [ 75.239494, 12.015949 ], [ 75.238964, 12.016327 ], [ 75.238324, 12.016743 ], [ 75.237906, 12.017085 ], [ 75.237264, 12.017522 ], [ 75.236675, 12.018021 ], [ 75.2362, 12.01834 ], [ 75.235629, 12.018674 ], [ 75.235206, 12.018986 ], [ 75.234777, 12.019299 ], [ 75.234221, 12.019769 ], [ 75.233332, 12.020271 ], [ 75.23273, 12.020657 ], [ 75.23178, 12.021125 ], [ 75.231127, 12.021431 ], [ 75.23029, 12.02152 ], [ 75.229355, 12.021565 ], [ 75.228609, 12.021514 ], [ 75.228091, 12.02144 ], [ 75.227239, 12.021366 ], [ 75.226581, 12.021299 ], [ 75.225882, 12.021128 ], [ 75.225353, 12.020817 ], [ 75.225092, 12.020289 ], [ 75.224938, 12.019874 ], [ 75.224844, 12.01953 ], [ 75.224415, 12.018587 ], [ 75.223823, 12.017792 ], [ 75.223453, 12.017443 ], [ 75.223037, 12.017262 ], [ 75.222518, 12.016998 ], [ 75.222313, 12.01683 ], [ 75.222253, 12.016722 ], [ 75.222205, 12.016603 ], [ 75.222122, 12.016507 ], [ 75.222062, 12.016388 ], [ 75.222038, 12.016268 ], [ 75.222026, 12.016148 ], [ 75.22198, 12.016029 ], [ 75.221934, 12.015898 ], [ 75.221888, 12.015792 ], [ 75.221842, 12.015673 ], [ 75.221842, 12.015554 ], [ 75.221853, 12.015434 ], [ 75.221876, 12.015314 ], [ 75.22183, 12.015208 ], [ 75.221643, 12.0151 ], [ 75.221578, 12.015024 ], [ 75.221501, 12.014935 ], [ 75.22141, 12.014845 ], [ 75.221449, 12.014719 ], [ 75.221449, 12.014592 ], [ 75.221397, 12.014465 ], [ 75.221333, 12.014351 ], [ 75.221216, 12.014275 ], [ 75.221087, 12.014237 ], [ 75.220958, 12.014187 ], [ 75.220879, 12.014086 ], [ 75.220775, 12.013986 ], [ 75.22067, 12.01391 ], [ 75.220721, 12.013797 ], [ 75.220811, 12.013708 ], [ 75.220874, 12.013594 ], [ 75.22086, 12.013467 ], [ 75.220821, 12.013339 ], [ 75.220794, 12.013212 ], [ 75.220741, 12.013097 ], [ 75.220675, 12.012969 ], [ 75.220558, 12.012905 ], [ 75.220492, 12.01279 ], [ 75.220388, 12.012701 ], [ 75.220273, 12.012779 ], [ 75.220146, 12.012831 ], [ 75.220005, 12.012819 ], [ 75.219875, 12.012756 ], [ 75.219784, 12.012667 ], [ 75.219656, 12.012642 ], [ 75.219564, 12.01254 ], [ 75.219497, 12.012425 ], [ 75.219371, 12.012452 ], [ 75.219242, 12.012376 ], [ 75.219149, 12.012286 ], [ 75.219031, 12.012248 ], [ 75.219001, 12.012119 ], [ 75.218985, 12.011991 ], [ 75.218868, 12.011927 ], [ 75.218739, 12.01194 ], [ 75.218611, 12.011967 ], [ 75.218536, 12.01207 ], [ 75.218408, 12.012122 ], [ 75.218279, 12.012071 ], [ 75.218148, 12.012007 ], [ 75.218005, 12.011957 ], [ 75.217875, 12.011906 ], [ 75.217746, 12.011855 ], [ 75.217617, 12.011805 ], [ 75.21749, 12.011755 ], [ 75.21745, 12.011628 ], [ 75.217434, 12.0115 ], [ 75.217431, 12.011371 ], [ 75.217415, 12.011243 ], [ 75.217412, 12.011101 ], [ 75.217371, 12.010973 ], [ 75.21733, 12.010844 ], [ 75.217189, 12.010808 ], [ 75.217075, 12.010822 ], [ 75.216949, 12.010837 ], [ 75.216846, 12.010762 ], [ 75.216744, 12.010537 ], [ 75.216724, 12.010423 ], [ 75.216686, 12.010315 ], [ 75.216617, 12.010273 ], [ 75.21644, 12.01028 ], [ 75.216272, 12.010354 ], [ 75.216155, 12.010444 ], [ 75.216056, 12.010526 ], [ 75.215719, 12.010509 ], [ 75.215351, 12.010429 ], [ 75.215147, 12.010315 ], [ 75.214993, 12.010174 ], [ 75.215047, 12.010057 ], [ 75.215204, 12.009964 ], [ 75.215205, 12.009862 ], [ 75.215092, 12.009819 ], [ 75.214917, 12.009947 ], [ 75.214743, 12.009947 ], [ 75.214455, 12.010006 ], [ 75.214158, 12.010117 ], [ 75.213497, 12.010297 ], [ 75.212612, 12.010586 ], [ 75.211652, 12.010826 ], [ 75.210445, 12.010961 ], [ 75.209757, 12.010984 ], [ 75.209228, 12.01092 ], [ 75.208872, 12.010867 ], [ 75.208483, 12.010781 ], [ 75.208205, 12.010697 ], [ 75.207901, 12.010563 ], [ 75.20762, 12.010379 ], [ 75.207328, 12.010215 ], [ 75.207114, 12.01001 ], [ 75.206937, 12.009778 ], [ 75.206793, 12.009506 ], [ 75.206846, 12.009304 ], [ 75.206923, 12.009262 ], [ 75.207, 12.009203 ], [ 75.20706, 12.009136 ], [ 75.207103, 12.00906 ], [ 75.207146, 12.008975 ], [ 75.207173, 12.00889 ], [ 75.207191, 12.008805 ], [ 75.207217, 12.008721 ], [ 75.207251, 12.008636 ], [ 75.207269, 12.008551 ], [ 75.207269, 12.008467 ], [ 75.207243, 12.008382 ], [ 75.207243, 12.008298 ], [ 75.207229071520359, 12.008255657421875 ], [ 75.207218, 12.008222 ], [ 75.207218, 12.008129 ], [ 75.207227, 12.008045 ], [ 75.207218, 12.00796 ], [ 75.207183, 12.007875 ], [ 75.207105, 12.007817 ], [ 75.207045, 12.007749 ], [ 75.20701, 12.007664 ], [ 75.206975, 12.00758 ], [ 75.206974, 12.007494 ], [ 75.206939, 12.00741 ], [ 75.206904, 12.007324 ], [ 75.20686, 12.007248 ], [ 75.206808, 12.007171 ], [ 75.206756, 12.007112 ], [ 75.206695, 12.007044 ], [ 75.206659, 12.006959 ], [ 75.206624, 12.006873 ], [ 75.206546, 12.006823 ], [ 75.206461, 12.006799 ], [ 75.206386, 12.006818 ], [ 75.206358, 12.006724 ], [ 75.2063, 12.006606 ], [ 75.206227, 12.006606 ], [ 75.206128, 12.006605 ], [ 75.206036, 12.006596 ], [ 75.205946, 12.00657 ], [ 75.205857, 12.006536 ], [ 75.205777, 12.006503 ], [ 75.205717, 12.006444 ], [ 75.205678, 12.00636 ], [ 75.205647, 12.006276 ], [ 75.205598, 12.0062 ], [ 75.205513, 12.006115 ], [ 75.205423, 12.006107 ], [ 75.205334, 12.006107 ], [ 75.205245, 12.00609 ], [ 75.205196, 12.006023 ], [ 75.205146, 12.005947 ], [ 75.205123, 12.005862 ], [ 75.205072, 12.005786 ], [ 75.205012, 12.005718 ], [ 75.204923, 12.00571 ], [ 75.204833, 12.005736 ], [ 75.204745, 12.005728 ], [ 75.204656, 12.005762 ], [ 75.204568, 12.005738 ], [ 75.20449, 12.005721 ], [ 75.204448, 12.005645 ], [ 75.204415, 12.005561 ], [ 75.204373, 12.005484 ], [ 75.204305, 12.005417 ], [ 75.204254, 12.005358 ], [ 75.204212, 12.005273 ], [ 75.204126, 12.005239 ], [ 75.204039, 12.005231 ], [ 75.203943, 12.005215 ], [ 75.203857, 12.00519 ], [ 75.203816, 12.005105 ], [ 75.203765, 12.005028 ], [ 75.203688, 12.004977 ], [ 75.203638, 12.0049 ], [ 75.203578, 12.004831 ], [ 75.20351, 12.00478 ], [ 75.203422, 12.004823 ], [ 75.203361, 12.004883 ], [ 75.203317, 12.004961 ], [ 75.203222, 12.00496 ], [ 75.203136, 12.004994 ], [ 75.20305, 12.00501 ], [ 75.202964, 12.005044 ], [ 75.202903, 12.005104 ], [ 75.202817, 12.005095 ], [ 75.202766, 12.005026 ], [ 75.20268, 12.00506 ], [ 75.202593, 12.005051 ], [ 75.202507, 12.005068 ], [ 75.202421, 12.005101 ], [ 75.202334, 12.005143 ], [ 75.202256, 12.005185 ], [ 75.202204, 12.005262 ], [ 75.202135, 12.005321 ], [ 75.202057, 12.005372 ], [ 75.201997, 12.005441 ], [ 75.201954, 12.005518 ], [ 75.201868, 12.005552 ], [ 75.201782, 12.005577 ], [ 75.201704, 12.005628 ], [ 75.201626, 12.00567 ], [ 75.201539, 12.005677 ], [ 75.201451, 12.005711 ], [ 75.201382, 12.005761 ], [ 75.201313, 12.005821 ], [ 75.201234, 12.00588 ], [ 75.201235, 12.005965 ], [ 75.201227, 12.00605 ], [ 75.201219, 12.006126 ], [ 75.201288, 12.006067 ], [ 75.201375, 12.006033 ], [ 75.201446, 12.006067 ], [ 75.201412, 12.006134 ], [ 75.201483, 12.006185 ], [ 75.201414, 12.006252 ], [ 75.201354, 12.006319 ], [ 75.201294, 12.006378 ], [ 75.201208, 12.006412 ], [ 75.201147, 12.006479 ], [ 75.201129, 12.006564 ], [ 75.201129, 12.006656 ], [ 75.201031, 12.006717 ], [ 75.200987, 12.006785 ], [ 75.200917, 12.006887 ], [ 75.200844, 12.006847 ], [ 75.200763, 12.006891 ], [ 75.200694, 12.006959 ], [ 75.200635, 12.007026 ], [ 75.200584, 12.007093 ], [ 75.200508, 12.00716 ], [ 75.200428, 12.007152 ], [ 75.200401, 12.007238 ], [ 75.200473, 12.007296 ], [ 75.200552, 12.00732 ], [ 75.200508, 12.007397 ], [ 75.200498, 12.007483 ], [ 75.200434, 12.007544 ], [ 75.200345, 12.007546 ], [ 75.20029, 12.007625 ], [ 75.200264, 12.007711 ], [ 75.200281, 12.007796 ], [ 75.20029, 12.007881 ], [ 75.200237, 12.007959 ], [ 75.200245, 12.008044 ], [ 75.200209, 12.008131 ], [ 75.200252, 12.008217 ], [ 75.200269571555395, 12.008255657421875 ], [ 75.200287, 12.008294 ], [ 75.20033, 12.008371 ], [ 75.200365, 12.008448 ], [ 75.200444, 12.008491 ], [ 75.200587280722132, 12.008455657421875 ], [ 75.200594, 12.008454 ], [ 75.200736, 12.008513 ], [ 75.200978, 12.008612 ], [ 75.201134, 12.009013 ], [ 75.201001, 12.00977 ], [ 75.20061, 12.010391 ], [ 75.200396, 12.010865 ], [ 75.200038, 12.011422 ], [ 75.200024, 12.011464 ], [ 75.199667, 12.012117 ], [ 75.199286, 12.012741 ], [ 75.198833, 12.013492 ], [ 75.198833, 12.013561 ], [ 75.198491, 12.014171 ], [ 75.198265, 12.01474 ], [ 75.198009, 12.015073 ], [ 75.197725, 12.015557 ], [ 75.197543, 12.015999 ], [ 75.197291, 12.016468 ], [ 75.197077, 12.016789 ], [ 75.196848, 12.017388 ], [ 75.196551, 12.017693 ], [ 75.196411, 12.018137 ], [ 75.19614, 12.018429 ], [ 75.195884, 12.019152 ], [ 75.195615, 12.019597 ], [ 75.195302, 12.020389 ], [ 75.194884, 12.021296 ], [ 75.194559, 12.021837 ], [ 75.194231, 12.022575 ], [ 75.193878, 12.023296 ], [ 75.193564, 12.023962 ], [ 75.193168, 12.024631 ], [ 75.192862, 12.025189 ], [ 75.192564, 12.025744 ], [ 75.192366, 12.026256 ], [ 75.192053, 12.026883 ], [ 75.191628, 12.027675 ], [ 75.191344, 12.028078 ], [ 75.191046, 12.028675 ], [ 75.190636, 12.02941 ], [ 75.190412, 12.029906 ], [ 75.190015, 12.030392 ], [ 75.189737, 12.031001 ], [ 75.189503, 12.031557 ], [ 75.18914, 12.032252 ], [ 75.188787, 12.032892 ], [ 75.18843, 12.033697 ], [ 75.188098, 12.034305 ], [ 75.187658, 12.035208 ], [ 75.187445, 12.035638 ], [ 75.187177, 12.035833 ], [ 75.186895, 12.036013 ], [ 75.186697, 12.036291 ], [ 75.186598, 12.036569 ], [ 75.186441, 12.036847 ], [ 75.186371, 12.037112 ], [ 75.186279, 12.037363 ], [ 75.186129, 12.037544 ], [ 75.185995, 12.038068 ], [ 75.185894, 12.038347 ], [ 75.18566, 12.038576 ], [ 75.185526, 12.038839 ], [ 75.185308, 12.039314 ], [ 75.185057, 12.039659 ], [ 75.185057, 12.039855 ], [ 75.184957, 12.040085 ], [ 75.184856, 12.040462 ], [ 75.184748, 12.040759 ], [ 75.184764, 12.040792 ], [ 75.184747, 12.04094 ], [ 75.184629, 12.041071 ], [ 75.184461, 12.041154 ], [ 75.184377, 12.041302 ], [ 75.184392, 12.041466 ], [ 75.184325, 12.04163 ], [ 75.184274, 12.041794 ], [ 75.184191, 12.041942 ], [ 75.184107, 12.042106 ], [ 75.184041, 12.042253 ], [ 75.183941, 12.042383 ], [ 75.183876, 12.042546 ], [ 75.183776, 12.042677 ], [ 75.183842, 12.042808 ], [ 75.183977, 12.042743 ], [ 75.183976, 12.042907 ], [ 75.183958, 12.043071 ], [ 75.183858, 12.043202 ], [ 75.183708, 12.043317 ], [ 75.183774, 12.043481 ], [ 75.183608, 12.043546 ], [ 75.183441, 12.043628 ], [ 75.183474, 12.043792 ], [ 75.183407, 12.043956 ], [ 75.183257, 12.044005 ], [ 75.18319, 12.044169 ], [ 75.183172, 12.044333 ], [ 75.183188, 12.044496 ], [ 75.183038, 12.044595 ], [ 75.182954, 12.044742 ], [ 75.182937, 12.044906 ], [ 75.18277, 12.044988 ], [ 75.182686, 12.045135 ], [ 75.182703, 12.045299 ], [ 75.182586, 12.04543 ], [ 75.182519, 12.045594 ], [ 75.182452, 12.045741 ], [ 75.182336, 12.045873 ], [ 75.182336, 12.046053 ], [ 75.182236, 12.046185 ], [ 75.182103, 12.0463 ], [ 75.182086, 12.046464 ], [ 75.182069, 12.046628 ], [ 75.181986, 12.046759 ], [ 75.181952, 12.046922 ], [ 75.182018, 12.047069 ], [ 75.181934, 12.0472 ], [ 75.181766, 12.047395 ], [ 75.181883, 12.047527 ], [ 75.181816, 12.047674 ], [ 75.181666, 12.047756 ], [ 75.181766, 12.048018 ], [ 75.181699, 12.048181 ], [ 75.181549, 12.048279 ], [ 75.181416, 12.048393 ], [ 75.181282, 12.048507 ], [ 75.181181, 12.048638 ], [ 75.181098, 12.048785 ], [ 75.181131, 12.048916 ], [ 75.181265, 12.049031 ], [ 75.181131, 12.049146 ], [ 75.180981, 12.049211 ], [ 75.18083, 12.049309 ], [ 75.180713, 12.049457 ], [ 75.180646, 12.049621 ], [ 75.180579, 12.049785 ], [ 75.180495, 12.049932 ], [ 75.180512, 12.050096 ], [ 75.180546, 12.05026 ], [ 75.180479, 12.050424 ], [ 75.180328, 12.050506 ], [ 75.180311, 12.05067 ], [ 75.180227, 12.050834 ], [ 75.18011, 12.050949 ], [ 75.18006, 12.051113 ], [ 75.179993, 12.05126 ], [ 75.179876, 12.051375 ], [ 75.179809, 12.051539 ], [ 75.179758, 12.051703 ], [ 75.179658, 12.05185 ], [ 75.179591, 12.052014 ], [ 75.179541, 12.052178 ], [ 75.179474, 12.052342 ], [ 75.179373, 12.052473 ], [ 75.17939, 12.052637 ], [ 75.179357, 12.052784 ], [ 75.179189, 12.052866 ], [ 75.179089, 12.052997 ], [ 75.179022, 12.053161 ], [ 75.179073, 12.053325 ], [ 75.179089, 12.053488 ], [ 75.179006, 12.053635 ], [ 75.178855, 12.053717 ], [ 75.178722, 12.053815 ], [ 75.178823, 12.054059 ], [ 75.178756, 12.054223 ], [ 75.178672, 12.054354 ], [ 75.178571, 12.054502 ], [ 75.178437, 12.054618 ], [ 75.178319, 12.05475 ], [ 75.178319, 12.054914 ], [ 75.178336, 12.055078 ], [ 75.178202, 12.055457 ], [ 75.178101, 12.055587 ], [ 75.17795, 12.055652 ], [ 75.17785, 12.0558 ], [ 75.177749, 12.055931 ], [ 75.177683, 12.056096 ], [ 75.177634, 12.056261 ], [ 75.177634, 12.056442 ], [ 75.17755, 12.056588 ], [ 75.177516, 12.056752 ], [ 75.177465, 12.056915 ], [ 75.177381, 12.057062 ], [ 75.17728, 12.057193 ], [ 75.177196, 12.057341 ], [ 75.177196, 12.057504 ], [ 75.177196, 12.057668 ], [ 75.177163, 12.057832 ], [ 75.177114, 12.057996 ], [ 75.177132, 12.05816 ], [ 75.177118, 12.058324 ], [ 75.177016, 12.058472 ], [ 75.176881, 12.058603 ], [ 75.176745, 12.058701 ], [ 75.176779, 12.058865 ], [ 75.176728, 12.059029 ], [ 75.17656, 12.059095 ], [ 75.176476, 12.059242 ], [ 75.176543, 12.059406 ], [ 75.17651, 12.059755 ], [ 75.17651, 12.059772 ], [ 75.17641, 12.059903 ], [ 75.176326, 12.060051 ], [ 75.176192, 12.060166 ], [ 75.176041, 12.060247 ], [ 75.176025, 12.060412 ], [ 75.176077, 12.060577 ], [ 75.175975, 12.060707 ], [ 75.175841, 12.060772 ], [ 75.175841, 12.06092 ], [ 75.175723, 12.061034 ], [ 75.175657, 12.061198 ], [ 75.17559, 12.061362 ], [ 75.175558, 12.061659 ], [ 75.175424, 12.061757 ], [ 75.17534, 12.061904 ], [ 75.175291, 12.062069 ], [ 75.175292, 12.06225 ], [ 75.175192, 12.062381 ], [ 75.175043, 12.06248 ], [ 75.174994, 12.062644 ], [ 75.174908, 12.06279 ], [ 75.174839, 12.062953 ], [ 75.174822, 12.063117 ], [ 75.174754, 12.063281 ], [ 75.174703, 12.063444 ], [ 75.174653, 12.063608 ], [ 75.174552, 12.063739 ], [ 75.174469, 12.063887 ], [ 75.174435, 12.064051 ], [ 75.174385, 12.064198 ], [ 75.174284, 12.064346 ], [ 75.174222, 12.06451 ], [ 75.174171, 12.064673 ], [ 75.174102, 12.064837 ], [ 75.174016, 12.064985 ], [ 75.174016, 12.065149 ], [ 75.173814, 12.065477 ], [ 75.17373, 12.065657 ], [ 75.173781, 12.065936 ], [ 75.173788, 12.066294 ], [ 75.173791, 12.066524 ], [ 75.173774, 12.066714 ], [ 75.173711, 12.067151 ], [ 75.17343, 12.067624 ], [ 75.173164, 12.068278 ], [ 75.172747, 12.069272 ], [ 75.172718, 12.069321 ], [ 75.172343, 12.070173 ], [ 75.172049, 12.070976 ], [ 75.1719, 12.071282 ], [ 75.171566, 12.072046 ], [ 75.171272, 12.07271 ], [ 75.170969, 12.073466 ], [ 75.170647, 12.074237 ], [ 75.170262, 12.075091 ], [ 75.169977, 12.075715 ], [ 75.169722, 12.07629 ], [ 75.16942, 12.077092 ], [ 75.168876, 12.07845 ], [ 75.168483, 12.07941 ], [ 75.168207, 12.080156 ], [ 75.167941, 12.080999 ], [ 75.1677, 12.081633 ], [ 75.167387, 12.082475 ], [ 75.167062, 12.083159 ], [ 75.166829, 12.083802 ], [ 75.166586, 12.084466 ], [ 75.166333, 12.085004 ], [ 75.16605, 12.085695 ], [ 75.165717, 12.086467 ], [ 75.165363, 12.087169 ], [ 75.165046, 12.087986 ], [ 75.164924, 12.08824 ], [ 75.164743, 12.088698 ], [ 75.164571, 12.089143 ], [ 75.164251, 12.089911 ], [ 75.164008, 12.090515 ], [ 75.163825, 12.09109 ], [ 75.163653, 12.091663 ], [ 75.163451, 12.092228 ], [ 75.163218, 12.092935 ], [ 75.162996, 12.09342 ], [ 75.162824, 12.093903 ], [ 75.162571, 12.094576 ], [ 75.162298, 12.095237 ], [ 75.162042, 12.095659 ], [ 75.161961, 12.095966 ], [ 75.16185, 12.096193 ], [ 75.161737, 12.096522 ], [ 75.161646, 12.096839 ], [ 75.161485, 12.097234 ], [ 75.161314, 12.097509 ], [ 75.161193, 12.097944 ], [ 75.160925, 12.09861 ], [ 75.16057, 12.099362 ], [ 75.160319, 12.100054 ], [ 75.160068, 12.100598 ], [ 75.159764, 12.101232 ], [ 75.159433, 12.102035 ], [ 75.15906, 12.102936 ], [ 75.158798, 12.103551 ], [ 75.158551, 12.104136 ], [ 75.15833, 12.104822 ], [ 75.158084, 12.1055 ], [ 75.157882, 12.105845 ], [ 75.157812, 12.106151 ], [ 75.157571, 12.106914 ], [ 75.157307, 12.107678 ], [ 75.157155, 12.107952 ], [ 75.15691, 12.108705 ], [ 75.156611, 12.109467 ], [ 75.156303, 12.110261 ], [ 75.155977, 12.110944 ], [ 75.155622, 12.111702 ], [ 75.154987, 12.113195 ], [ 75.154609, 12.113994 ], [ 75.154386, 12.11455 ], [ 75.154207, 12.11509 ], [ 75.153997, 12.115673 ], [ 75.153579, 12.11669 ], [ 75.153189, 12.11775 ], [ 75.152761, 12.118992 ], [ 75.152177, 12.120383 ], [ 75.151834, 12.121191 ], [ 75.15167, 12.121627 ], [ 75.151349, 12.122428 ], [ 75.150961, 12.123422 ], [ 75.150599, 12.124293 ], [ 75.150214, 12.125223 ], [ 75.149971, 12.125864 ], [ 75.149681, 12.126587 ], [ 75.149384, 12.127409 ], [ 75.149044, 12.128304 ], [ 75.148831, 12.128756 ], [ 75.148655, 12.12915 ], [ 75.148514, 12.129458 ], [ 75.148416, 12.129809 ], [ 75.148286, 12.130011 ], [ 75.148157, 12.130191 ], [ 75.148059, 12.130372 ], [ 75.148068, 12.1305 ], [ 75.147979, 12.130787 ], [ 75.14777, 12.13118 ], [ 75.147617, 12.131519 ], [ 75.147423, 12.132007 ], [ 75.147274, 12.13229 ], [ 75.147177, 12.132566 ], [ 75.147089, 12.132885 ], [ 75.146981, 12.133139 ], [ 75.146863, 12.133361 ], [ 75.146647, 12.133998 ], [ 75.146485, 12.134338 ], [ 75.146385, 12.134689 ], [ 75.146211, 12.134996 ], [ 75.146103, 12.135294 ], [ 75.146016, 12.135635 ], [ 75.145887, 12.135882 ], [ 75.145744, 12.136129 ], [ 75.145645, 12.136481 ], [ 75.145554, 12.136824 ], [ 75.145408, 12.137092 ], [ 75.145255, 12.137326 ], [ 75.14521, 12.137592 ], [ 75.145112, 12.137868 ], [ 75.14497, 12.138166 ], [ 75.144795, 12.13858 ], [ 75.144655, 12.138856 ], [ 75.144623, 12.139148 ], [ 75.14443, 12.139445 ], [ 75.144311, 12.139912 ], [ 75.144089, 12.140402 ], [ 75.143873, 12.140731 ], [ 75.143786, 12.141049 ], [ 75.143547, 12.141601 ], [ 75.143329, 12.142154 ], [ 75.143123, 12.142473 ], [ 75.143003, 12.142802 ], [ 75.142884, 12.143205 ], [ 75.142646, 12.143703 ], [ 75.142472, 12.144138 ], [ 75.142331, 12.144402 ], [ 75.142169, 12.144826 ], [ 75.141974, 12.145461 ], [ 75.14185, 12.145867 ], [ 75.141633, 12.146211 ], [ 75.14145, 12.146717 ], [ 75.141182, 12.14737 ], [ 75.140931, 12.14791 ], [ 75.140581, 12.148807 ], [ 75.140214, 12.14964 ], [ 75.13978, 12.150735 ], [ 75.139431, 12.15167 ], [ 75.139031, 12.152548 ], [ 75.138813, 12.153306 ], [ 75.138446, 12.154331 ], [ 75.137945, 12.155458 ], [ 75.137795, 12.156014 ], [ 75.137327, 12.157256 ], [ 75.136758, 12.158648 ], [ 75.136114, 12.160175 ], [ 75.135399, 12.161886 ], [ 75.134898, 12.162819 ], [ 75.134529, 12.163637 ], [ 75.134178, 12.164522 ], [ 75.133927, 12.165471 ], [ 75.133837548794105, 12.165737314843751 ], [ 75.133576, 12.166516 ], [ 75.133206, 12.167534 ], [ 75.132837, 12.16845 ], [ 75.132653, 12.169055 ], [ 75.132352, 12.169954 ], [ 75.131917, 12.171244 ], [ 75.131465, 12.172322 ], [ 75.131131, 12.173207 ], [ 75.13063, 12.174414 ], [ 75.130178, 12.175655 ], [ 75.129677, 12.176948 ], [ 75.129309, 12.177799 ], [ 75.128892, 12.178747 ], [ 75.128608, 12.179499 ], [ 75.128021, 12.18094 ], [ 75.127576, 12.182023 ], [ 75.127161, 12.183108 ], [ 75.126723, 12.184279 ], [ 75.126288, 12.18531 ], [ 75.125767, 12.186455 ], [ 75.125184, 12.187829 ], [ 75.124681, 12.189096 ], [ 75.124385, 12.189787 ], [ 75.124029, 12.190781 ], [ 75.123682, 12.191862 ], [ 75.123205, 12.193219 ], [ 75.122734, 12.19448 ], [ 75.122232, 12.195611 ], [ 75.12178, 12.196315 ], [ 75.121713, 12.19661 ], [ 75.122132, 12.197052 ], [ 75.122517, 12.197838 ], [ 75.122635, 12.19839 ], [ 75.1228841, 12.1993619 ], [ 75.1229339, 12.1999218 ], [ 75.1229731, 12.2006721 ], [ 75.1227869, 12.2016397 ], [ 75.1206077, 12.2023124 ], [ 75.1201958, 12.2023832 ], [ 75.1198367, 12.2025058 ], [ 75.1196216, 12.2028257 ], [ 75.1194407, 12.2032602 ], [ 75.1191536, 12.2038226 ], [ 75.1188336, 12.2044558 ], [ 75.1184856, 12.2050439 ], [ 75.1182228, 12.2055829 ], [ 75.1179529, 12.206099 ], [ 75.1176589, 12.2066556 ], [ 75.1173739, 12.2072661 ], [ 75.1172299, 12.2076296 ], [ 75.117083, 12.2081624 ], [ 75.1169561, 12.2085991 ], [ 75.116652, 12.2093 ], [ 75.1163211, 12.2100441 ], [ 75.1160302, 12.2108047 ], [ 75.1155501, 12.2116448 ], [ 75.114913, 12.213381 ], [ 75.1147823, 12.2140849 ], [ 75.1141921, 12.2156074 ], [ 75.1138901, 12.2164048 ], [ 75.1136361, 12.217183 ], [ 75.1134201, 12.217765 ], [ 75.113121, 12.2186783 ], [ 75.112745, 12.219706 ], [ 75.112493, 12.220415 ], [ 75.1122651, 12.2210945 ], [ 75.111927, 12.2220144 ], [ 75.111564, 12.222942 ], [ 75.111262, 12.2237635 ], [ 75.111047, 12.224487 ], [ 75.110453, 12.225947 ], [ 75.109009, 12.229664 ], [ 75.108678, 12.230689 ], [ 75.108169, 12.231929 ], [ 75.107734, 12.233133 ], [ 75.107477, 12.233753 ], [ 75.107193, 12.234549 ], [ 75.106949, 12.235105 ], [ 75.106674, 12.235773 ], [ 75.1063732, 12.2365124 ], [ 75.1060329, 12.2374062 ], [ 75.10581, 12.2378335 ], [ 75.1055319, 12.2385788 ], [ 75.1052519, 12.2393658 ], [ 75.1049379, 12.2401497 ], [ 75.1045649, 12.2410989 ], [ 75.104212, 12.242007 ], [ 75.103841, 12.243074 ], [ 75.103468, 12.244001 ], [ 75.1030341, 12.2453506 ], [ 75.1022601, 12.2471932 ], [ 75.1019031, 12.2481071 ], [ 75.1016102, 12.248602 ], [ 75.100949, 12.250316 ], [ 75.1004396, 12.2514318 ], [ 75.100183, 12.252096 ], [ 75.099677, 12.253316 ], [ 75.099104, 12.254642 ], [ 75.098783, 12.2555567 ], [ 75.0981836, 12.2569342 ], [ 75.0978447, 12.2576426 ], [ 75.0976176, 12.2582758 ], [ 75.0972745, 12.2591134 ], [ 75.0970258, 12.2597892 ], [ 75.0966851, 12.2606925 ], [ 75.0965471, 12.2609652 ], [ 75.0961673, 12.2617898 ], [ 75.0957992, 12.2627889 ], [ 75.0947747, 12.2652887 ], [ 75.0945259, 12.2657545 ], [ 75.0943085, 12.2664354 ], [ 75.0936658, 12.2679039 ], [ 75.0931738, 12.268987 ], [ 75.0927426, 12.2701466 ], [ 75.0922498, 12.2712834 ], [ 75.0916738, 12.2727152 ], [ 75.0909608, 12.2743936 ], [ 75.0906564, 12.2751739 ], [ 75.0900931, 12.2764503 ], [ 75.089132, 12.27861 ], [ 75.08838, 12.280443 ], [ 75.087551, 12.282417 ], [ 75.087004, 12.283651 ], [ 75.086756, 12.284372 ], [ 75.086318, 12.285403 ], [ 75.085856, 12.286458 ], [ 75.085406, 12.287578 ], [ 75.085057, 12.288353 ], [ 75.084538, 12.289381 ], [ 75.0841485, 12.2904706 ], [ 75.0836996, 12.2915566 ], [ 75.082776, 12.29361 ], [ 75.082062, 12.295156 ], [ 75.0817391, 12.2962423 ], [ 75.0813277, 12.2973155 ], [ 75.080627, 12.298845 ], [ 75.080203, 12.2997724 ], [ 75.079668, 12.301118 ], [ 75.079175, 12.3022053 ], [ 75.0789043, 12.3029044 ], [ 75.0784275, 12.3040152 ], [ 75.0780688, 12.304894 ], [ 75.077766, 12.305583 ], [ 75.077178, 12.306924 ], [ 75.076573, 12.308279 ], [ 75.076083, 12.309235 ], [ 75.075549, 12.310374 ], [ 75.07513, 12.311358 ], [ 75.074694, 12.312373 ], [ 75.074077, 12.313717 ], [ 75.073594, 12.314813 ], [ 75.073215, 12.315801 ], [ 75.072793, 12.316719 ], [ 75.072359, 12.317747 ], [ 75.072036, 12.31858 ], [ 75.071699, 12.319325 ], [ 75.071294, 12.320313 ], [ 75.071029, 12.320933 ], [ 75.070877, 12.321333 ], [ 75.070696, 12.321772 ], [ 75.070498, 12.322302 ], [ 75.070271, 12.322915 ], [ 75.069978, 12.323476 ], [ 75.069715, 12.324105 ], [ 75.069385, 12.324996 ], [ 75.069189, 12.325613 ], [ 75.068714, 12.326622 ], [ 75.068323, 12.327361 ], [ 75.067832, 12.328673 ], [ 75.067244, 12.329927 ], [ 75.066838, 12.33085 ], [ 75.066475, 12.33173 ], [ 75.066139, 12.332412 ], [ 75.065775, 12.33315 ], [ 75.06551, 12.333833 ], [ 75.065145, 12.3349 ], [ 75.064647, 12.335968 ], [ 75.064241, 12.336825 ], [ 75.063777, 12.337786 ], [ 75.063357, 12.338666 ], [ 75.062964, 12.339516 ], [ 75.062808, 12.340065 ], [ 75.062836, 12.340298 ], [ 75.062962, 12.34045 ], [ 75.063313, 12.340531 ], [ 75.0635525, 12.3405861 ], [ 75.0634, 12.340871 ], [ 75.063177, 12.340885 ], [ 75.062608, 12.340993 ], [ 75.06233, 12.341007 ], [ 75.062204, 12.341184 ], [ 75.062093, 12.341456 ], [ 75.061884, 12.341782 ], [ 75.061687, 12.342191 ], [ 75.061435, 12.342667 ], [ 75.061144, 12.343386 ], [ 75.060749, 12.34431 ], [ 75.060428, 12.344946 ], [ 75.060059, 12.345776 ], [ 75.059714, 12.34648 ], [ 75.059474, 12.347097 ], [ 75.059138, 12.34787 ], [ 75.058657, 12.348911 ], [ 75.058277, 12.349818 ], [ 75.058054, 12.350319 ], [ 75.057722, 12.351008 ], [ 75.057429, 12.351656 ], [ 75.057071, 12.352333 ], [ 75.056816, 12.353085 ], [ 75.055907, 12.354887 ], [ 75.055434, 12.355915 ], [ 75.055169, 12.356741 ], [ 75.054634, 12.357721 ], [ 75.054343, 12.358746 ], [ 75.053562, 12.360183 ], [ 75.052891, 12.361813 ], [ 75.052201, 12.363428 ], [ 75.051505, 12.364876 ], [ 75.050124, 12.36766 ], [ 75.049097, 12.369623 ], [ 75.048203, 12.371609 ], [ 75.047644, 12.372793 ], [ 75.047368, 12.373358 ], [ 75.047021, 12.374084 ], [ 75.046631, 12.374853 ], [ 75.046351, 12.375437 ], [ 75.046098, 12.375859 ], [ 75.045877, 12.3762 ], [ 75.045625, 12.376688 ], [ 75.045305, 12.377314 ], [ 75.045034, 12.377865 ], [ 75.044809, 12.378316 ], [ 75.044563, 12.378776 ], [ 75.04432, 12.379241 ], [ 75.043988, 12.379867 ], [ 75.043724, 12.380566 ], [ 75.043431, 12.381226 ], [ 75.043239, 12.381578 ], [ 75.043026, 12.38183 ], [ 75.042829, 12.382142 ], [ 75.042733, 12.38244 ], [ 75.042586, 12.382852 ], [ 75.042361, 12.383347 ], [ 75.042203, 12.383671 ], [ 75.042012, 12.384061 ], [ 75.041815, 12.384386 ], [ 75.041697, 12.384578 ], [ 75.041584, 12.384801 ], [ 75.0415, 12.385037 ], [ 75.041322, 12.385221 ], [ 75.041306, 12.385377 ], [ 75.041148, 12.385537 ], [ 75.041027, 12.385766 ], [ 75.041015, 12.385985 ], [ 75.040823, 12.386336 ], [ 75.040671, 12.386594 ], [ 75.040534, 12.386852 ], [ 75.040419, 12.387033 ], [ 75.040333, 12.387265 ], [ 75.040237, 12.38738 ], [ 75.040135, 12.387529 ], [ 75.040055, 12.38776 ], [ 75.039957, 12.387931 ], [ 75.039856, 12.388029 ], [ 75.039775, 12.388227 ], [ 75.039609, 12.3885 ], [ 75.039344, 12.388884 ], [ 75.039076, 12.389232 ], [ 75.038848, 12.389529 ], [ 75.038505, 12.389929 ], [ 75.038188, 12.390302 ], [ 75.037791, 12.390679 ], [ 75.037438, 12.390964 ], [ 75.037147, 12.391157 ], [ 75.036799, 12.391351 ], [ 75.036501, 12.391473 ], [ 75.036192, 12.391566 ], [ 75.035878, 12.391635 ], [ 75.035607, 12.391684 ], [ 75.03543, 12.391653 ], [ 75.035314, 12.391595 ], [ 75.035296, 12.391584 ], [ 75.035244, 12.391552 ], [ 75.035198, 12.391514 ], [ 75.035176, 12.39146 ], [ 75.035183, 12.391405 ], [ 75.035196, 12.391351 ], [ 75.035215, 12.391297 ], [ 75.035222, 12.391242 ], [ 75.035224, 12.391182 ], [ 75.035203, 12.391133 ], [ 75.035164, 12.39109 ], [ 75.035119, 12.391046 ], [ 75.035069, 12.391019 ], [ 75.035011, 12.390998 ], [ 75.034953, 12.390993 ], [ 75.034896, 12.390977 ], [ 75.034838, 12.390972 ], [ 75.034781, 12.390956 ], [ 75.034724, 12.39093 ], [ 75.034673, 12.390903 ], [ 75.034635, 12.390859 ], [ 75.034632, 12.390794 ], [ 75.034605, 12.390739 ], [ 75.034554, 12.390712 ], [ 75.034498, 12.390707 ], [ 75.034449, 12.39068 ], [ 75.034393, 12.390658 ], [ 75.034338, 12.390637 ], [ 75.034294, 12.390599 ], [ 75.03425, 12.390566 ], [ 75.034206, 12.390533 ], [ 75.034157, 12.3905 ], [ 75.034102, 12.390473 ], [ 75.034053, 12.390451 ], [ 75.033997, 12.390435 ], [ 75.033948, 12.390407 ], [ 75.033891, 12.390419 ], [ 75.033848, 12.39038 ], [ 75.033856, 12.390324 ], [ 75.0338, 12.390335 ], [ 75.033739, 12.390335 ], [ 75.033684, 12.390329 ], [ 75.033629, 12.390301 ], [ 75.033597, 12.390256 ], [ 75.03354, 12.390273 ], [ 75.033483, 12.390296 ], [ 75.033446, 12.390251 ], [ 75.033414, 12.390206 ], [ 75.033471, 12.390194 ], [ 75.033512, 12.390148 ], [ 75.033547, 12.390103 ], [ 75.033549, 12.390046 ], [ 75.033494, 12.390017 ], [ 75.033444, 12.390006 ], [ 75.033387, 12.390023 ], [ 75.033343, 12.389977 ], [ 75.0333, 12.389937 ], [ 75.033238, 12.389926 ], [ 75.033181, 12.389932 ], [ 75.03313, 12.389961 ], [ 75.033073, 12.38999 ], [ 75.033021, 12.39003 ], [ 75.032965, 12.390053 ], [ 75.032908, 12.390082 ], [ 75.032852, 12.390105 ], [ 75.032796, 12.390111 ], [ 75.032745, 12.390127 ], [ 75.032689, 12.390155 ], [ 75.032634, 12.390161 ], [ 75.032578, 12.390177 ], [ 75.032527, 12.390211 ], [ 75.032482, 12.390245 ], [ 75.032432, 12.390284 ], [ 75.032387, 12.390318 ], [ 75.032343, 12.390351 ], [ 75.032304, 12.390394 ], [ 75.032276, 12.390448 ], [ 75.032237, 12.390491 ], [ 75.032204, 12.390534 ], [ 75.03217, 12.390584 ], [ 75.032137, 12.390628 ], [ 75.032098, 12.390672 ], [ 75.032071, 12.390721 ], [ 75.032037, 12.390754 ], [ 75.032043, 12.390704 ], [ 75.032003, 12.390659 ], [ 75.031947, 12.390641 ], [ 75.031896, 12.390662 ], [ 75.031913, 12.390718 ], [ 75.031897, 12.390767 ], [ 75.03184, 12.390749 ], [ 75.031783, 12.390743 ], [ 75.031733, 12.39077 ], [ 75.031655, 12.39082 ], [ 75.031533, 12.390847 ], [ 75.031471, 12.390913 ], [ 75.031386, 12.390956 ], [ 75.031313, 12.391021 ], [ 75.031245, 12.391059 ], [ 75.031177, 12.391053 ], [ 75.03111, 12.391119 ], [ 75.031033, 12.391191 ], [ 75.03106, 12.391224 ], [ 75.031087, 12.391275 ], [ 75.031053, 12.391303 ], [ 75.031008, 12.391342 ], [ 75.030936, 12.391318 ], [ 75.030897, 12.391335 ], [ 75.030913, 12.39138 ], [ 75.030995, 12.391465 ], [ 75.030946, 12.391459 ], [ 75.030851, 12.391469 ], [ 75.030762, 12.391501 ], [ 75.030729, 12.391479 ], [ 75.030723, 12.391567 ], [ 75.030786, 12.391624 ], [ 75.030837, 12.391726 ], [ 75.030773, 12.392038 ], [ 75.030696, 12.392287 ], [ 75.030543, 12.392336 ], [ 75.030364, 12.392423 ], [ 75.030198, 12.392698 ], [ 75.030326, 12.392774 ], [ 75.030479, 12.392786 ], [ 75.030517, 12.392924 ], [ 75.030504, 12.393161 ], [ 75.030351, 12.393199 ], [ 75.030351, 12.393461 ], [ 75.030212, 12.393762 ], [ 75.029818, 12.394447 ], [ 75.029446, 12.395236 ], [ 75.028854, 12.396476 ], [ 75.028459, 12.397289 ], [ 75.0281639, 12.3978885 ], [ 75.0280256, 12.3981563 ], [ 75.027873, 12.398468 ], [ 75.02749, 12.399131 ], [ 75.02677, 12.400811 ], [ 75.025833, 12.402702 ], [ 75.025071, 12.404229 ], [ 75.024325, 12.405797 ], [ 75.023631, 12.407089 ], [ 75.023078, 12.408278 ], [ 75.022114, 12.410141 ], [ 75.02174, 12.410782 ], [ 75.021255, 12.41162 ], [ 75.020807, 12.412457 ], [ 75.020591, 12.412892 ], [ 75.020134, 12.413878 ], [ 75.019853, 12.414215 ], [ 75.019506, 12.414629 ], [ 75.019314, 12.414879 ], [ 75.01925, 12.414854 ], [ 75.018993, 12.415092 ], [ 75.018801, 12.415367 ], [ 75.018661, 12.415665 ], [ 75.01825, 12.416291 ], [ 75.017915, 12.416493 ], [ 75.017708, 12.416479 ], [ 75.017409, 12.416691 ], [ 75.017255, 12.41688 ], [ 75.016975, 12.417056 ], [ 75.016714, 12.417131 ], [ 75.016338, 12.417231 ], [ 75.015902, 12.417256 ], [ 75.015626, 12.417193 ], [ 75.015399, 12.417143 ], [ 75.015291, 12.417005 ], [ 75.015164, 12.416967 ], [ 75.015036, 12.417005 ], [ 75.015006, 12.417255 ], [ 75.014843, 12.41743 ], [ 75.014782, 12.417678 ], [ 75.01453, 12.4181 ], [ 75.01435, 12.418451 ], [ 75.014196, 12.418952 ], [ 75.013923, 12.419556 ], [ 75.013385, 12.42047 ], [ 75.012971, 12.42132 ], [ 75.012333, 12.422555 ], [ 75.011768, 12.423794 ], [ 75.011331, 12.424871 ], [ 75.010832, 12.426044 ], [ 75.010384, 12.426994 ], [ 75.009936, 12.427932 ], [ 75.009609, 12.428712 ], [ 75.009401, 12.429167 ], [ 75.009057, 12.42985 ], [ 75.008732, 12.430517 ], [ 75.008415, 12.431365 ], [ 75.008274, 12.431741 ], [ 75.007848, 12.432667 ], [ 75.007438, 12.433617 ], [ 75.007233, 12.43409 ], [ 75.006989, 12.43475 ], [ 75.006348, 12.436084 ], [ 75.005904, 12.437138 ], [ 75.005043, 12.438847 ], [ 75.00441, 12.440193 ], [ 75.003843, 12.441422 ], [ 75.003359, 12.442367 ], [ 75.002665, 12.443778 ], [ 75.001978, 12.444976 ], [ 75.001364, 12.446131 ], [ 75.000866, 12.446718 ], [ 75.000475, 12.447254 ], [ 75.00021, 12.447827 ], [ 74.999814, 12.448329 ], [ 74.9994, 12.449025 ], [ 74.999322, 12.449137 ], [ 74.999243, 12.449244 ], [ 74.999131, 12.449437 ], [ 74.999025, 12.44951 ], [ 74.998876, 12.449629 ], [ 74.998791, 12.449645 ], [ 74.998702, 12.449648 ], [ 74.998621, 12.449652 ], [ 74.998615, 12.449617 ], [ 74.998597, 12.449587 ], [ 74.998542, 12.449534 ], [ 74.998474, 12.449512 ], [ 74.99841, 12.449507 ], [ 74.998338, 12.449545 ], [ 74.998325, 12.449597 ], [ 74.998285, 12.449644 ], [ 74.998214, 12.4497 ], [ 74.99816, 12.449743 ], [ 74.998153, 12.449808 ], [ 74.998132, 12.449864 ], [ 74.998112, 12.449925 ], [ 74.998096, 12.450007 ], [ 74.998128, 12.450054 ], [ 74.998174, 12.450093 ], [ 74.99823, 12.450132 ], [ 74.998281, 12.450179 ], [ 74.998318, 12.450222 ], [ 74.998341, 12.450265 ], [ 74.998426, 12.450237 ], [ 74.998372, 12.450353 ], [ 74.998219, 12.450564 ], [ 74.998198, 12.45086 ], [ 74.998088, 12.451336 ], [ 74.998022, 12.451728 ], [ 74.997804, 12.452099 ], [ 74.997523, 12.452786 ], [ 74.997152, 12.453447 ], [ 74.996794, 12.454249 ], [ 74.996436, 12.455119 ], [ 74.995947, 12.45621 ], [ 74.995602, 12.457173 ], [ 74.995201, 12.458071 ], [ 74.994895, 12.458858 ], [ 74.994449, 12.459767 ], [ 74.99411, 12.460514 ], [ 74.993708, 12.461261 ], [ 74.993243, 12.462228 ], [ 74.992803, 12.463051 ], [ 74.992162, 12.464486 ], [ 74.991722, 12.465467 ], [ 74.991361, 12.466273 ], [ 74.990933, 12.467257 ], [ 74.990481, 12.46828 ], [ 74.989978, 12.469511 ], [ 74.989536, 12.47064 ], [ 74.989095, 12.471636 ], [ 74.98853, 12.472901 ], [ 74.98795, 12.474007 ], [ 74.987626, 12.474524 ], [ 74.987188, 12.475356 ], [ 74.9866201, 12.4761773 ], [ 74.9858098, 12.4772591 ], [ 74.985528, 12.47759 ], [ 74.985011, 12.478266 ], [ 74.984533, 12.479053 ], [ 74.984319, 12.479678 ], [ 74.984369, 12.479898 ], [ 74.984658, 12.480081 ], [ 74.9850427, 12.4802895 ], [ 74.9853209, 12.4804243 ], [ 74.985126, 12.4808 ], [ 74.984611, 12.480849 ], [ 74.984095, 12.481351 ], [ 74.98355, 12.48191 ], [ 74.983059, 12.482496 ], [ 74.982431, 12.483082 ], [ 74.981447, 12.484016 ], [ 74.980902, 12.484442 ], [ 74.98052, 12.485188 ], [ 74.980111, 12.486225 ], [ 74.979429, 12.487741 ], [ 74.978807, 12.489518 ], [ 74.978414, 12.490256 ], [ 74.978126, 12.490911 ], [ 74.977675, 12.492057 ], [ 74.97732, 12.492977 ], [ 74.976897, 12.493936 ], [ 74.976583, 12.494615 ], [ 74.976155, 12.495832 ], [ 74.975895, 12.496433 ], [ 74.975445, 12.497696 ], [ 74.974956, 12.498721 ], [ 74.974466, 12.499821 ], [ 74.974137, 12.500712 ], [ 74.973786, 12.501625 ], [ 74.973568, 12.502195 ], [ 74.973142, 12.503225 ], [ 74.972825, 12.50393 ], [ 74.972305, 12.50511 ], [ 74.972006, 12.505882 ], [ 74.971571, 12.506866 ], [ 74.97105, 12.508116 ], [ 74.970631, 12.508952 ], [ 74.970127, 12.510023 ], [ 74.969853, 12.510821 ], [ 74.96962, 12.511617 ], [ 74.969319, 12.51244 ], [ 74.969074, 12.513066 ], [ 74.968665, 12.514131 ], [ 74.96809, 12.515249 ], [ 74.967834, 12.516046 ], [ 74.967546, 12.516698 ], [ 74.967247, 12.517416 ], [ 74.966893, 12.518183 ], [ 74.966623, 12.518736 ], [ 74.966354, 12.519289 ], [ 74.966081, 12.52004 ], [ 74.965858, 12.52063 ], [ 74.9656, 12.521197 ], [ 74.965302, 12.521663 ], [ 74.965242, 12.522089 ], [ 74.965079, 12.522513 ], [ 74.96477, 12.523202 ], [ 74.964565, 12.523701 ], [ 74.964333, 12.524139 ], [ 74.96423, 12.524541 ], [ 74.964024, 12.525031 ], [ 74.963806, 12.525509 ], [ 74.963677, 12.525923 ], [ 74.963457, 12.526476 ], [ 74.96333, 12.526927 ], [ 74.963112, 12.527289 ], [ 74.962985, 12.527614 ], [ 74.962815, 12.528131 ], [ 74.962631, 12.528638 ], [ 74.962367, 12.529294 ], [ 74.962143, 12.529856 ], [ 74.961888, 12.530429 ], [ 74.961735, 12.531031 ], [ 74.961386, 12.531799 ], [ 74.961128, 12.532252 ], [ 74.960793, 12.533107 ], [ 74.960509, 12.533774 ], [ 74.960277, 12.534302 ], [ 74.960083, 12.534856 ], [ 74.95976, 12.535424 ], [ 74.959502, 12.536003 ], [ 74.959192, 12.536658 ], [ 74.959005, 12.537174 ], [ 74.958824, 12.537602 ], [ 74.958682, 12.538056 ], [ 74.958514, 12.538383 ], [ 74.958449, 12.538862 ], [ 74.958395, 12.5390416 ], [ 74.958256, 12.539504 ], [ 74.9579635, 12.5402817 ], [ 74.957481, 12.541355 ], [ 74.957071, 12.542351 ], [ 74.956813, 12.543006 ], [ 74.956541, 12.5438 ], [ 74.956283, 12.544857 ], [ 74.955921, 12.545638 ], [ 74.9553677, 12.5469444 ], [ 74.954913, 12.547954 ], [ 74.954579, 12.548677 ], [ 74.954357, 12.549346 ], [ 74.954064, 12.550009 ], [ 74.953735, 12.550843 ], [ 74.953403, 12.551658 ], [ 74.953067, 12.552398 ], [ 74.952745, 12.553364 ], [ 74.952577, 12.55389 ], [ 74.952153, 12.554932 ], [ 74.951928, 12.555875 ], [ 74.951707, 12.556633 ], [ 74.95145, 12.557371 ], [ 74.951258, 12.557883 ], [ 74.951079, 12.558396 ], [ 74.950836, 12.55896 ], [ 74.950474, 12.559851 ], [ 74.950204, 12.56053 ], [ 74.949921, 12.561316 ], [ 74.949676, 12.56162 ], [ 74.94938, 12.562174 ], [ 74.949097, 12.562943 ], [ 74.948955, 12.563258 ], [ 74.948697, 12.563948 ], [ 74.948465, 12.564551 ], [ 74.948181, 12.565165 ], [ 74.948014, 12.565717 ], [ 74.947846, 12.566231 ], [ 74.947551, 12.566694 ], [ 74.947448, 12.56707 ], [ 74.947267, 12.567707 ], [ 74.947074, 12.568207 ], [ 74.946896, 12.56875 ], [ 74.946652, 12.569318 ], [ 74.946334, 12.570105 ], [ 74.946192, 12.570488 ], [ 74.94597, 12.570961 ], [ 74.945761, 12.571543 ], [ 74.945568, 12.572134 ], [ 74.945457, 12.572458 ], [ 74.945306, 12.57284 ], [ 74.94498, 12.573349 ], [ 74.944823, 12.573766 ], [ 74.944585, 12.57444 ], [ 74.944435, 12.574751 ], [ 74.944282, 12.57511 ], [ 74.94409, 12.575539 ], [ 74.943906, 12.576107 ], [ 74.943695, 12.576697 ], [ 74.943463, 12.577229 ], [ 74.943271, 12.577723 ], [ 74.942941, 12.578405 ], [ 74.942682, 12.579075 ], [ 74.942354, 12.579819 ], [ 74.942082, 12.580433 ], [ 74.941844, 12.58093 ], [ 74.941567, 12.581566 ], [ 74.941174, 12.582378 ], [ 74.940849, 12.583105 ], [ 74.940536, 12.583778 ], [ 74.94029, 12.584335 ], [ 74.939938, 12.585168 ], [ 74.939553, 12.585993 ], [ 74.939246, 12.586729 ], [ 74.939148, 12.587135 ], [ 74.938969, 12.587495 ], [ 74.938699, 12.588039 ], [ 74.93831, 12.588909 ], [ 74.93796, 12.589838 ], [ 74.937713, 12.59038 ], [ 74.937389, 12.591101 ], [ 74.937148, 12.591579 ], [ 74.936901, 12.592122 ], [ 74.93665, 12.592784 ], [ 74.936318, 12.593573 ], [ 74.935985, 12.594552 ], [ 74.935686, 12.595308 ], [ 74.935271, 12.596338 ], [ 74.935008, 12.596989 ], [ 74.934496, 12.598085 ], [ 74.933984, 12.599057 ], [ 74.933733, 12.599847 ], [ 74.933339, 12.600789 ], [ 74.932766, 12.60201 ], [ 74.932128, 12.603259 ], [ 74.931782, 12.603887 ], [ 74.9321674, 12.6070188 ], [ 74.9319175, 12.6083858 ], [ 74.9312716, 12.6055773 ], [ 74.931059, 12.60672 ], [ 74.930785, 12.606859 ], [ 74.930678, 12.607057 ], [ 74.930618, 12.607371 ], [ 74.930451, 12.607685 ], [ 74.930224, 12.607941 ], [ 74.92995, 12.608267 ], [ 74.929807, 12.608662 ], [ 74.929306, 12.609557 ], [ 74.92903, 12.610104 ], [ 74.928792, 12.610696 ], [ 74.928589, 12.611126 ], [ 74.928284, 12.611781 ], [ 74.928059, 12.612264 ], [ 74.92791, 12.612812 ], [ 74.927638, 12.613356 ], [ 74.92739, 12.61391 ], [ 74.927186, 12.614698 ], [ 74.926976, 12.61523 ], [ 74.926681, 12.615899 ], [ 74.926483, 12.616513 ], [ 74.926297, 12.617062 ], [ 74.926074, 12.617602 ], [ 74.925855, 12.618418 ], [ 74.925453, 12.619388 ], [ 74.925202, 12.620117 ], [ 74.92487, 12.621054 ], [ 74.924527, 12.621921 ], [ 74.924433, 12.622181 ], [ 74.924316012987973, 12.622436757812501 ], [ 74.924288, 12.622498 ], [ 74.92423934466315, 12.622636757812501 ], [ 74.92418, 12.622806 ], [ 74.924074, 12.623076 ], [ 74.923945, 12.62348 ], [ 74.923881, 12.623731 ], [ 74.923781, 12.62401 ], [ 74.92363, 12.624375 ], [ 74.923543, 12.624641 ], [ 74.923442, 12.624887 ], [ 74.923314, 12.625208 ], [ 74.923213, 12.625431 ], [ 74.923142, 12.625611 ], [ 74.923014, 12.625856 ], [ 74.922879, 12.62619 ], [ 74.922618, 12.626864 ], [ 74.922361, 12.627407 ], [ 74.922219, 12.627722 ], [ 74.922032, 12.628109 ], [ 74.92188, 12.628432 ], [ 74.921714, 12.628867 ], [ 74.921517, 12.629323 ], [ 74.921395, 12.629596 ], [ 74.921294, 12.629891 ], [ 74.92113, 12.630122 ], [ 74.921056, 12.630292 ], [ 74.920995, 12.630525 ], [ 74.921021, 12.630694 ], [ 74.920969, 12.630856 ], [ 74.920877, 12.630926 ], [ 74.920813, 12.631108 ], [ 74.920734, 12.631262 ], [ 74.920613, 12.63155 ], [ 74.920522, 12.631761 ], [ 74.920403, 12.632115 ], [ 74.920288, 12.632381 ], [ 74.920246, 12.632507 ], [ 74.920173, 12.63269 ], [ 74.920129, 12.632882 ], [ 74.920027, 12.63313 ], [ 74.919874, 12.633349 ], [ 74.919744, 12.633617 ], [ 74.919613, 12.633899 ], [ 74.919469, 12.634272 ], [ 74.919317, 12.634617 ], [ 74.9191, 12.635183 ], [ 74.918856, 12.635682 ], [ 74.918582, 12.636264 ], [ 74.918296, 12.636791 ], [ 74.918154, 12.637271 ], [ 74.917949, 12.637861 ], [ 74.91775, 12.638043 ], [ 74.917533, 12.638105 ], [ 74.917372, 12.63842 ], [ 74.917198, 12.639003 ], [ 74.916969, 12.639617 ], [ 74.916773, 12.640167 ], [ 74.916578, 12.640823 ], [ 74.916382, 12.64131 ], [ 74.916218, 12.641679 ], [ 74.916077, 12.642028 ], [ 74.915883, 12.642529 ], [ 74.915542, 12.643324 ], [ 74.915196, 12.644009 ], [ 74.91488, 12.644612 ], [ 74.914496, 12.645413 ], [ 74.914196, 12.646032 ], [ 74.913941, 12.646607 ], [ 74.913674, 12.647214 ], [ 74.913374, 12.647788 ], [ 74.913049, 12.648594 ], [ 74.912768, 12.649364 ], [ 74.91246, 12.650126 ], [ 74.912111, 12.651027 ], [ 74.911674, 12.651952 ], [ 74.911304, 12.652865 ], [ 74.910922, 12.653743 ], [ 74.910482, 12.654599 ], [ 74.910192, 12.655254 ], [ 74.909835, 12.656052 ], [ 74.909557, 12.656851 ], [ 74.909199, 12.657763 ], [ 74.908899, 12.658416 ], [ 74.908714, 12.658967 ], [ 74.908506, 12.659396 ], [ 74.908309, 12.65969 ], [ 74.908101, 12.660083 ], [ 74.907847, 12.660529 ], [ 74.907674, 12.660979 ], [ 74.907523, 12.66144 ], [ 74.907269, 12.661835 ], [ 74.907003, 12.662286 ], [ 74.906748, 12.662792 ], [ 74.906415, 12.663423 ], [ 74.906172, 12.663918 ], [ 74.90584, 12.664656 ], [ 74.905527, 12.665334 ], [ 74.905239, 12.665896 ], [ 74.90502, 12.666389 ], [ 74.904661, 12.667087 ], [ 74.904373, 12.667706 ], [ 74.904153, 12.668268 ], [ 74.904003, 12.668706 ], [ 74.903842, 12.669256 ], [ 74.903692, 12.669539 ], [ 74.903401, 12.670272 ], [ 74.903126, 12.670955 ], [ 74.902855, 12.671669 ], [ 74.902592, 12.672241 ], [ 74.902383, 12.672871 ], [ 74.902142, 12.673445 ], [ 74.901795, 12.674143 ], [ 74.901469, 12.674926 ], [ 74.901043, 12.676126 ], [ 74.900512, 12.677396 ], [ 74.900269, 12.67815 ], [ 74.899902, 12.678976 ], [ 74.899642, 12.67958 ], [ 74.899388, 12.680018 ], [ 74.899136, 12.680523 ], [ 74.898764, 12.681076 ], [ 74.898418, 12.681774 ], [ 74.897999, 12.68259 ], [ 74.897661, 12.683256 ], [ 74.897346, 12.683966 ], [ 74.897009, 12.684754 ], [ 74.896689, 12.68553 ], [ 74.896351, 12.686226 ], [ 74.896007, 12.686868 ], [ 74.895728, 12.687581 ], [ 74.895359, 12.688378 ], [ 74.894979, 12.689153 ], [ 74.894655, 12.68984 ], [ 74.894412, 12.69038 ], [ 74.894147, 12.690998 ], [ 74.893893, 12.691448 ], [ 74.893745, 12.69191 ], [ 74.893475, 12.692585 ], [ 74.893013, 12.693661 ], [ 74.8927, 12.694314 ], [ 74.892375, 12.695052 ], [ 74.892181, 12.695685 ], [ 74.891921, 12.696269 ], [ 74.891684, 12.696697 ], [ 74.891475, 12.697295 ], [ 74.891201, 12.698047 ], [ 74.890856, 12.698854 ], [ 74.890569, 12.699505 ], [ 74.890314, 12.700339 ], [ 74.890094, 12.700992 ], [ 74.889956, 12.70169 ], [ 74.889884, 12.702175 ], [ 74.889802, 12.702467 ], [ 74.889627, 12.702871 ], [ 74.889175, 12.703863 ], [ 74.888599, 12.704917 ], [ 74.888069, 12.70577 ], [ 74.887643, 12.706478 ], [ 74.887272, 12.707096 ], [ 74.8872199, 12.7073209 ], [ 74.887164, 12.7075467 ], [ 74.887167, 12.707817 ], [ 74.8871584, 12.7080249 ], [ 74.886877, 12.708428 ], [ 74.886651, 12.708484 ], [ 74.886403, 12.708562 ], [ 74.886144, 12.708487 ], [ 74.886023, 12.708333 ], [ 74.885904, 12.708269 ], [ 74.885511, 12.708619 ], [ 74.885234, 12.708835 ], [ 74.884956, 12.708997 ], [ 74.88472, 12.709216 ], [ 74.884552, 12.709433 ], [ 74.884243, 12.709736 ], [ 74.884163, 12.709955 ], [ 74.884116, 12.710207 ], [ 74.884025, 12.710425 ], [ 74.883814, 12.710566 ], [ 74.883636, 12.710686 ], [ 74.88351, 12.711079 ], [ 74.883351, 12.711481 ], [ 74.883182, 12.711927 ], [ 74.882983, 12.712449 ], [ 74.882753, 12.713069 ], [ 74.882418, 12.713614 ], [ 74.882193, 12.714116 ], [ 74.882023, 12.714672 ], [ 74.881863, 12.715162 ], [ 74.881656, 12.71587 ], [ 74.881437, 12.716304 ], [ 74.881286, 12.716806 ], [ 74.881037, 12.717422 ], [ 74.880782, 12.718127 ], [ 74.880669, 12.71842 ], [ 74.880592, 12.718776 ], [ 74.880469, 12.719086 ], [ 74.880301, 12.719423 ], [ 74.880087, 12.71996 ], [ 74.879898, 12.720461 ], [ 74.879812, 12.720915 ], [ 74.879671, 12.721451 ], [ 74.879504, 12.721973 ], [ 74.879345, 12.722436 ], [ 74.879014, 12.723151 ], [ 74.878701, 12.723931 ], [ 74.878427, 12.724641 ], [ 74.878089, 12.725577 ], [ 74.877838, 12.726322 ], [ 74.87766, 12.726794 ], [ 74.877245, 12.7276 ], [ 74.877005, 12.728189 ], [ 74.876777, 12.728761 ], [ 74.876573, 12.729244 ], [ 74.876318, 12.729762 ], [ 74.876097, 12.730277 ], [ 74.875803, 12.730978 ], [ 74.875541, 12.731767 ], [ 74.875327, 12.732481 ], [ 74.87516, 12.732981 ], [ 74.875004, 12.733518 ], [ 74.874816, 12.734091 ], [ 74.874619, 12.734669 ], [ 74.87446, 12.73505 ], [ 74.874318, 12.735505 ], [ 74.874132, 12.736031 ], [ 74.8739, 12.736566 ], [ 74.873623, 12.737129 ], [ 74.873308, 12.737657 ], [ 74.873016, 12.738247 ], [ 74.872809, 12.738572 ], [ 74.87262, 12.738976 ], [ 74.872382, 12.739352 ], [ 74.872247, 12.73962 ], [ 74.872047, 12.739878 ], [ 74.871903, 12.740226 ], [ 74.871695, 12.740844 ], [ 74.871651, 12.740951 ], [ 74.871541, 12.741095 ], [ 74.871468, 12.74124 ], [ 74.871228, 12.741711 ], [ 74.870996, 12.742129 ], [ 74.870781, 12.742601 ], [ 74.870632, 12.74301 ], [ 74.870529, 12.743337 ], [ 74.870398, 12.743574 ], [ 74.870284, 12.74386 ], [ 74.870137, 12.74426 ], [ 74.86995, 12.74466 ], [ 74.86978, 12.745143 ], [ 74.869628, 12.745561 ], [ 74.869456, 12.746152 ], [ 74.869321, 12.746678 ], [ 74.869132, 12.747044 ], [ 74.86893, 12.74755 ], [ 74.868711, 12.748128 ], [ 74.868345, 12.748834 ], [ 74.867995, 12.749673 ], [ 74.867687, 12.750492 ], [ 74.867313, 12.751246 ], [ 74.867051, 12.751801 ], [ 74.866855, 12.752411 ], [ 74.866704, 12.75283 ], [ 74.866592, 12.753267 ], [ 74.866489, 12.753585 ], [ 74.866312, 12.753986 ], [ 74.866247, 12.754187 ], [ 74.866125, 12.754397 ], [ 74.865937, 12.754837 ], [ 74.865806, 12.755175 ], [ 74.865628, 12.755622 ], [ 74.865459, 12.756051 ], [ 74.865319, 12.756407 ], [ 74.865169, 12.756717 ], [ 74.865028, 12.757091 ], [ 74.864906, 12.757474 ], [ 74.864625, 12.757848 ], [ 74.864438, 12.758304 ], [ 74.864231, 12.758815 ], [ 74.864062, 12.759564 ], [ 74.8639399, 12.7599952 ], [ 74.863886, 12.760118 ], [ 74.863339, 12.761068 ], [ 74.8631, 12.7614867 ], [ 74.8564084, 12.7796325 ], [ 74.8537432, 12.785939 ], [ 74.8535131, 12.7862258 ], [ 74.8535387, 12.7864689 ], [ 74.8534429, 12.7866036 ], [ 74.8530528, 12.7871983 ], [ 74.8523432, 12.7886135 ], [ 74.8519852, 12.7889377 ], [ 74.8516911, 12.7893055 ], [ 74.8515377, 12.7896422 ], [ 74.8512628, 12.7898978 ], [ 74.8510582, 12.7901534 ], [ 74.8508153, 12.7902469 ], [ 74.8506235, 12.790197 ], [ 74.8504829, 12.7900786 ], [ 74.8505084, 12.7898791 ], [ 74.850502, 12.789798 ], [ 74.8503166, 12.7899102 ], [ 74.8501824, 12.7900973 ], [ 74.8501824, 12.7902344 ], [ 74.8502911, 12.790303 ], [ 74.8504189, 12.7902843 ], [ 74.8504765, 12.7902469 ], [ 74.8505724, 12.7903155 ], [ 74.8504637, 12.7907955 ], [ 74.8502463, 12.791288 ], [ 74.8500162, 12.7914813 ], [ 74.84985, 12.7915935 ], [ 74.8497093, 12.7915623 ], [ 74.8495879, 12.7916371 ], [ 74.8496262, 12.7917868 ], [ 74.8494344, 12.7919052 ], [ 74.8494856, 12.7919987 ], [ 74.8492618, 12.792005 ], [ 74.8491468, 12.7920237 ], [ 74.8492171, 12.7922356 ], [ 74.8491595, 12.7926097 ], [ 74.8488782, 12.7930336 ], [ 74.8486865, 12.7937692 ], [ 74.8483349, 12.7942368 ], [ 74.8478554, 12.7946482 ], [ 74.8475933, 12.7948353 ], [ 74.847312, 12.7948851 ], [ 74.8472736, 12.7948228 ], [ 74.847312, 12.7946295 ], [ 74.8472736, 12.7944363 ], [ 74.847133, 12.7944799 ], [ 74.8469668, 12.7945423 ], [ 74.846922, 12.7946981 ], [ 74.8469796, 12.7947729 ], [ 74.8470307, 12.7948477 ], [ 74.8469604, 12.7949225 ], [ 74.8468197, 12.7948602 ], [ 74.8467111, 12.7949413 ], [ 74.8467111, 12.7951719 ], [ 74.8465065, 12.7952156 ], [ 74.8463211, 12.7955834 ], [ 74.8463914, 12.7956519 ], [ 74.8465768, 12.7956083 ], [ 74.8464042, 12.796425 ], [ 74.8461741, 12.7968614 ], [ 74.8459503, 12.7972728 ], [ 74.8457074, 12.7975346 ], [ 74.8456882, 12.7978526 ], [ 74.8454836, 12.7986131 ], [ 74.8450617, 12.7992241 ], [ 74.8396583, 12.8142697 ], [ 74.8396194, 12.8146696 ], [ 74.8394177, 12.8151759 ], [ 74.8390969, 12.816243 ], [ 74.8383673, 12.8185519 ], [ 74.8374918, 12.8209998 ], [ 74.8375455, 12.8210145 ], [ 74.8321791, 12.8357592 ], [ 74.8318508, 12.8363945 ], [ 74.8314259, 12.8376456 ], [ 74.8309538, 12.8388496 ], [ 74.8303959, 12.8402168 ], [ 74.8294507, 12.8413978 ], [ 74.8280454, 12.8429117 ], [ 74.8279005, 12.8431826 ], [ 74.8276107, 12.8432371 ], [ 74.8250268, 12.8436304 ], [ 74.8239968, 12.8442161 ], [ 74.8239646, 12.8472308 ], [ 74.8236822, 12.8481958 ], [ 74.8234543, 12.8489132 ], [ 74.8228106, 12.8502019 ], [ 74.8222791, 12.8513782 ], [ 74.8217883, 12.8527478 ], [ 74.8215757, 12.853341 ], [ 74.8215641, 12.8542333 ], [ 74.8212191, 12.8556778 ], [ 74.8190254, 12.8658364 ], [ 74.8188953, 12.8661793 ], [ 74.8159658, 12.8823346 ], [ 74.8152403, 12.8851363 ], [ 74.8141075, 12.888592 ], [ 74.8133265, 12.8928182 ], [ 74.8106457, 12.9060632 ], [ 74.8078743, 12.9171181 ], [ 74.8075104, 12.9185695 ], [ 74.8064255, 12.9201924 ], [ 74.806249, 12.9209395 ], [ 74.8066738, 12.9209212 ], [ 74.8068428, 12.920848 ], [ 74.8070815, 12.9208878 ], [ 74.8073996, 12.9210974 ], [ 74.8076952, 12.9215414 ], [ 74.807742, 12.922011 ], [ 74.807742, 12.9232208 ], [ 74.8077703, 12.9240019 ], [ 74.80789, 12.924451 ], [ 74.8082306, 12.9244814 ], [ 74.8085176, 12.9243784 ], [ 74.8088277, 12.9239643 ], [ 74.8091404, 12.9236171 ], [ 74.8092504, 12.9230864 ], [ 74.8094269, 12.9228987 ], [ 74.8099912, 12.9223737 ], [ 74.8103265, 12.9221118 ], [ 74.8105416, 12.9217008 ], [ 74.8107712, 12.9214248 ], [ 74.811424, 12.9173969 ], [ 74.811819, 12.915653 ], [ 74.8152436, 12.9165063 ], [ 74.8146771, 12.9194594 ], [ 74.8145141, 12.9203127 ], [ 74.8144883, 12.9213668 ], [ 74.8146771, 12.9220695 ], [ 74.8143596, 12.9224627 ], [ 74.818106, 12.9251684 ], [ 74.8178839, 12.9254837 ], [ 74.8196327, 12.9267741 ], [ 74.8197684, 12.9268666 ], [ 74.8201278, 12.9264849 ], [ 74.8209427, 12.9271991 ], [ 74.8203553, 12.9307498 ], [ 74.8189305, 12.9304611 ], [ 74.8179048, 12.9357742 ], [ 74.8164489, 12.9354981 ], [ 74.8172015, 12.9301485 ], [ 74.8133263, 12.929463 ], [ 74.8131385, 12.9303723 ], [ 74.8128756, 12.9306556 ], [ 74.8126927, 12.9307022 ], [ 74.8124198, 12.9306944 ], [ 74.8111066, 12.9301758 ], [ 74.8077525, 12.9294054 ], [ 74.8076314, 12.9291169 ], [ 74.8076421, 12.928776 ], [ 74.8073836, 12.9287368 ], [ 74.8070547, 12.9288639 ], [ 74.8067053, 12.9290039 ], [ 74.8063792, 12.9301918 ], [ 74.8062511, 12.9306734 ], [ 74.8061524, 12.931283 ], [ 74.8056782, 12.9316527 ], [ 74.8054084, 12.9318184 ], [ 74.8051187, 12.9320004 ], [ 74.8049161, 12.9320086 ], [ 74.8043843, 12.9322174 ], [ 74.8044629, 12.9334663 ], [ 74.8040437, 12.9361865 ], [ 74.8037651, 12.9367564 ], [ 74.8036316, 12.9372107 ], [ 74.8035892, 12.9376807 ], [ 74.8035768, 12.9380708 ], [ 74.8033151, 12.9390892 ], [ 74.803219, 12.9395232 ], [ 74.8029224, 12.9408516 ], [ 74.8024852, 12.9430485 ], [ 74.7998988, 12.9564132 ], [ 74.7986492, 12.9625018 ], [ 74.7954378, 12.9778121 ], [ 74.7944051, 12.9826192 ], [ 74.7935795, 12.9869698 ], [ 74.7926805, 12.9895991 ], [ 74.7925347, 12.9903159 ], [ 74.7918543, 12.9936621 ], [ 74.7914484, 12.9959712 ], [ 74.7913069, 12.9967758 ], [ 74.7909111, 12.9990272 ], [ 74.790814, 12.9995798 ], [ 74.7903001, 13.0009999 ], [ 74.78985, 13.0024708 ], [ 74.7895276, 13.0033191 ], [ 74.7892015, 13.0041298 ], [ 74.7889381, 13.0049028 ], [ 74.7887945, 13.0065401 ], [ 74.7887278, 13.0073019 ], [ 74.7883383, 13.0085009 ], [ 74.7881709, 13.0091961 ], [ 74.7882171, 13.0099404 ], [ 74.7881446, 13.0108296 ], [ 74.7878812, 13.0116024 ], [ 74.7876162, 13.0141794 ], [ 74.7873527, 13.0149522 ], [ 74.787352, 13.0157254 ], [ 74.7868254, 13.0167557 ], [ 74.7866868, 13.0175122 ], [ 74.7864717, 13.0184028 ], [ 74.786079, 13.0198385 ], [ 74.7859562, 13.0210182 ], [ 74.785763, 13.0224706 ], [ 74.7855034, 13.0240866 ], [ 74.7853832, 13.0247974 ], [ 74.7852408, 13.0257744 ], [ 74.7849764, 13.0275782 ], [ 74.7849755, 13.028609 ], [ 74.7836563, 13.0342776 ], [ 74.7836557, 13.0350508 ], [ 74.7831288, 13.0363388 ], [ 74.7831282, 13.037112 ], [ 74.7828647, 13.037885 ], [ 74.782864, 13.038658 ], [ 74.7826005, 13.039431 ], [ 74.7825997, 13.0402042 ], [ 74.7820721, 13.042523 ], [ 74.7818088, 13.0430383 ], [ 74.7807521, 13.0489648 ], [ 74.7802252, 13.0502529 ], [ 74.780224, 13.0515415 ], [ 74.7799607, 13.0520567 ], [ 74.77996, 13.0528299 ], [ 74.7796965, 13.0536027 ], [ 74.7796958, 13.0543759 ], [ 74.7791671, 13.0577256 ], [ 74.7786393, 13.0600447 ], [ 74.778376, 13.0605599 ], [ 74.7763258, 13.0708125 ], [ 74.7763236, 13.0710497 ], [ 74.7764094, 13.0713684 ], [ 74.7764953, 13.0715618 ], [ 74.7765596, 13.0721836 ], [ 74.7765167, 13.0723769 ], [ 74.7761162, 13.0742376 ], [ 74.7758837, 13.0754599 ], [ 74.7757228, 13.0756376 ], [ 74.7751917, 13.0766565 ], [ 74.7748159, 13.0773279 ], [ 74.7746392, 13.0778008 ], [ 74.7745209, 13.0784044 ], [ 74.7744246, 13.0789138 ], [ 74.7741347, 13.0802436 ], [ 74.7738825, 13.0815186 ], [ 74.7737484, 13.0818791 ], [ 74.7735663, 13.082258 ], [ 74.7733161, 13.0829662 ], [ 74.7731398, 13.0837032 ], [ 74.772982, 13.0846161 ], [ 74.7728649, 13.0851406 ], [ 74.772718, 13.0859043 ], [ 74.772543, 13.086693 ], [ 74.7722753, 13.08746 ], [ 74.7720361, 13.0884115 ], [ 74.7718017, 13.0891299 ], [ 74.7715506, 13.0901394 ], [ 74.7713929, 13.0906102 ], [ 74.7712824, 13.0912696 ], [ 74.771203, 13.0922456 ], [ 74.7710662, 13.0926427 ], [ 74.7708609, 13.0930865 ], [ 74.7706966, 13.0936955 ], [ 74.7706951, 13.0940158 ], [ 74.7706939, 13.0942718 ], [ 74.7702288, 13.0957787 ], [ 74.7701086, 13.0969491 ], [ 74.7699161, 13.0974893 ], [ 74.7696757, 13.0983896 ], [ 74.7693485, 13.099748 ], [ 74.7688866, 13.1016619 ], [ 74.7685734, 13.1029137 ], [ 74.766913, 13.10832 ], [ 74.7669123, 13.1090932 ], [ 74.7663848, 13.1108966 ], [ 74.7658579, 13.1119271 ], [ 74.7655925, 13.1145038 ], [ 74.7653292, 13.115019 ], [ 74.7653285, 13.1157922 ], [ 74.7648014, 13.1170802 ], [ 74.7648006, 13.1178534 ], [ 74.7645371, 13.1183686 ], [ 74.7642725, 13.1201723 ], [ 74.7640091, 13.1206875 ], [ 74.7640083, 13.1214607 ], [ 74.7637443, 13.1227489 ], [ 74.7632173, 13.1237792 ], [ 74.7629529, 13.1253253 ], [ 74.7626895, 13.1258405 ], [ 74.7626887, 13.1266137 ], [ 74.7624252, 13.1271289 ], [ 74.7618972, 13.1294477 ], [ 74.7617229, 13.1311402 ], [ 74.7616318, 13.1320244 ], [ 74.7613684, 13.1325397 ], [ 74.7613672, 13.1335705 ], [ 74.7608397, 13.1353741 ], [ 74.7605763, 13.1358891 ], [ 74.7603118, 13.1374353 ], [ 74.7600484, 13.1379504 ], [ 74.7600476, 13.1387235 ], [ 74.7595207, 13.139754 ], [ 74.7595199, 13.1405269 ], [ 74.7592561, 13.1412999 ], [ 74.7589915, 13.1431035 ], [ 74.7589907, 13.1438767 ], [ 74.7584636, 13.1451648 ], [ 74.7584629, 13.145938 ], [ 74.7576704, 13.1495451 ], [ 74.7574069, 13.1500603 ], [ 74.7568792, 13.1518638 ], [ 74.7568785, 13.1526368 ], [ 74.7563512, 13.153925 ], [ 74.7563504, 13.154698 ], [ 74.7560869, 13.1552132 ], [ 74.7560862, 13.1559864 ], [ 74.7552937, 13.1595936 ], [ 74.7542393, 13.1621696 ], [ 74.7537105, 13.1650039 ], [ 74.7531833, 13.1660343 ], [ 74.753183, 13.1665496 ], [ 74.7526558, 13.1675799 ], [ 74.7529462, 13.1684434 ], [ 74.7526726, 13.1695278 ], [ 74.7520557, 13.1716516 ], [ 74.7515847, 13.1736918 ], [ 74.7503177, 13.1776228 ], [ 74.7499078, 13.1794289 ], [ 74.749145, 13.1815976 ], [ 74.7486959, 13.1825232 ], [ 74.7479466, 13.1846907 ], [ 74.7475367, 13.1853728 ], [ 74.7473774, 13.1858722 ], [ 74.7470346, 13.1863349 ], [ 74.746323, 13.1881905 ], [ 74.7458469, 13.1891845 ], [ 74.7455324, 13.1897359 ], [ 74.7441872, 13.192195 ], [ 74.744023, 13.194024 ], [ 74.7439887, 13.1950247 ], [ 74.7436658, 13.197493 ], [ 74.743478, 13.1986138 ], [ 74.7431669, 13.199955 ], [ 74.7428987, 13.2008136 ], [ 74.7410425, 13.2075133 ], [ 74.7406699, 13.209696 ], [ 74.740314, 13.211093 ], [ 74.7400533, 13.2121367 ], [ 74.7398567, 13.2134773 ], [ 74.7396609, 13.214458 ], [ 74.7395619, 13.2149539 ], [ 74.7393827, 13.2157406 ], [ 74.7393379, 13.2159375 ], [ 74.7392121, 13.2164107 ], [ 74.7390158, 13.2176126 ], [ 74.7387591, 13.2186074 ], [ 74.7387272, 13.2189054 ], [ 74.7386617, 13.220271 ], [ 74.7383906, 13.2213489 ], [ 74.7382916, 13.2214881 ], [ 74.738243, 13.2215948 ], [ 74.7382001, 13.2219907 ], [ 74.7380843, 13.2223463 ], [ 74.7378842, 13.2227372 ], [ 74.7377935, 13.2228902 ], [ 74.7376736, 13.2230033 ], [ 74.737477, 13.2230014 ], [ 74.7372989, 13.2229075 ], [ 74.7371471, 13.2228902 ], [ 74.7369771, 13.2228135 ], [ 74.7368252, 13.2227753 ], [ 74.7367501, 13.2228902 ], [ 74.7368467, 13.2230678 ], [ 74.7368789, 13.2231827 ], [ 74.7368038, 13.2232767 ], [ 74.7366214, 13.2233707 ], [ 74.7365586, 13.2235341 ], [ 74.7364406, 13.2237221 ], [ 74.7363062, 13.223854 ], [ 74.7361601, 13.2239973 ], [ 74.7360206, 13.224248 ], [ 74.7360115, 13.2243801 ], [ 74.7360758, 13.224495 ], [ 74.7361708, 13.2245613 ], [ 74.7363119, 13.2245263 ], [ 74.7364175, 13.22453 ], [ 74.7365141, 13.2248015 ], [ 74.7363639, 13.2257415 ], [ 74.7361171, 13.2268277 ], [ 74.735357, 13.2291845 ], [ 74.7346596, 13.2315761 ], [ 74.7344756, 13.2327286 ], [ 74.7343378, 13.2331427 ], [ 74.7341017, 13.234208 ], [ 74.733907, 13.23582 ], [ 74.7333078, 13.2385318 ], [ 74.7329859, 13.240349 ], [ 74.7325246, 13.243294 ], [ 74.7320311, 13.2462704 ], [ 74.7318058, 13.2479414 ], [ 74.7313444, 13.2505 ], [ 74.7308171, 13.2526027 ], [ 74.7300248, 13.255168 ], [ 74.7294009, 13.2572916 ], [ 74.7288661, 13.2593556 ], [ 74.7285335, 13.2610891 ], [ 74.7284905, 13.2617157 ], [ 74.7284047, 13.2622692 ], [ 74.7278683, 13.2647023 ], [ 74.7270727, 13.2677239 ], [ 74.7266328, 13.2690709 ], [ 74.7256367, 13.2719285 ], [ 74.724766, 13.2736969 ], [ 74.7244029, 13.2747479 ], [ 74.7235767, 13.2774315 ], [ 74.7229529, 13.2788031 ], [ 74.7220838, 13.280526 ], [ 74.7218156, 13.2814449 ], [ 74.7215688, 13.2824577 ], [ 74.7211735, 13.2833938 ], [ 74.7210431, 13.2838674 ], [ 74.7203672, 13.2864152 ], [ 74.7200453, 13.2885661 ], [ 74.7197251, 13.2908909 ], [ 74.7195427, 13.2935326 ], [ 74.7191994, 13.2980432 ], [ 74.7189725, 13.3002395 ], [ 74.7182981, 13.3032742 ], [ 74.7179226, 13.3052475 ], [ 74.7174613, 13.3078995 ], [ 74.716044, 13.3138538 ], [ 74.7146707, 13.3184475 ], [ 74.7123533, 13.3257765 ], [ 74.7112804, 13.3283865 ], [ 74.7097569, 13.3315602 ], [ 74.7083622, 13.3340239 ], [ 74.7065168, 13.3364877 ], [ 74.7025686, 13.3399118 ], [ 74.6994787, 13.3415612 ], [ 74.6967321, 13.3432315 ], [ 74.6950799, 13.3444007 ], [ 74.6929996, 13.3468132 ], [ 74.6921756, 13.3475156 ], [ 74.6916606, 13.3476625 ], [ 74.6915082, 13.3470626 ], [ 74.6912722, 13.3470355 ], [ 74.6913077, 13.3477506 ], [ 74.6914803, 13.3478387 ], [ 74.6913301, 13.3485105 ], [ 74.6908946, 13.3487318 ], [ 74.6905115, 13.3487548 ], [ 74.6905759, 13.348973 ], [ 74.6915697, 13.3487818 ], [ 74.6920961, 13.3486531 ], [ 74.6923597, 13.3483958 ], [ 74.6945949, 13.34719 ], [ 74.6949396, 13.3474538 ], [ 74.6954146, 13.3478174 ], [ 74.6913934, 13.3496014 ], [ 74.6916198, 13.3496599 ], [ 74.695464, 13.3479186 ], [ 74.6964376, 13.3490454 ], [ 74.6974878, 13.3511084 ], [ 74.6977494, 13.3523972 ], [ 74.6977403, 13.359613 ], [ 74.6974731, 13.3629628 ], [ 74.6972085, 13.3639933 ], [ 74.6972011, 13.3699207 ], [ 74.6966721, 13.3719815 ], [ 74.6957061, 13.3735254 ], [ 74.6958563, 13.3773018 ], [ 74.6956717, 13.387326 ], [ 74.6963691, 13.3905272 ], [ 74.6972124, 13.396686 ], [ 74.6970472, 13.4068033 ], [ 74.696294, 13.4150855 ], [ 74.6951804, 13.4220255 ], [ 74.6941075, 13.4297833 ], [ 74.6939079, 13.439822 ], [ 74.6937629, 13.4427444 ], [ 74.693678, 13.444457 ], [ 74.6935668, 13.4466986 ], [ 74.6934385, 13.4477061 ], [ 74.6933698, 13.4489093 ], [ 74.6921972, 13.4529621 ], [ 74.6905533, 13.4586437 ], [ 74.6903887, 13.4592308 ], [ 74.6898592, 13.4615494 ], [ 74.6898576, 13.4628379 ], [ 74.6895932, 13.4636107 ], [ 74.68959, 13.4661877 ], [ 74.6893243, 13.4679913 ], [ 74.6890601, 13.4687641 ], [ 74.6890587, 13.4697949 ], [ 74.6887943, 13.4705678 ], [ 74.6885284, 13.472629 ], [ 74.6885254, 13.4749484 ], [ 74.6882608, 13.4759788 ], [ 74.6874543, 13.4886054 ], [ 74.6871897, 13.489636 ], [ 74.6863852, 13.5007161 ], [ 74.6853177, 13.5115384 ], [ 74.6845167, 13.5197839 ], [ 74.6842523, 13.5205568 ], [ 74.684251, 13.5215876 ], [ 74.6839852, 13.523391 ], [ 74.6837204, 13.5244216 ], [ 74.6834534, 13.5272559 ], [ 74.683189, 13.5280287 ], [ 74.6831876, 13.5290595 ], [ 74.6829232, 13.5298323 ], [ 74.6826543, 13.5339552 ], [ 74.6823899, 13.534728 ], [ 74.6823886, 13.5357588 ], [ 74.682362299311748, 13.535835643750001 ], [ 74.6821241, 13.5365316 ], [ 74.682123, 13.5373046 ], [ 74.6818586, 13.5380774 ], [ 74.6815925, 13.5401387 ], [ 74.680258, 13.5532798 ], [ 74.6799935, 13.5540527 ], [ 74.6794592, 13.5597213 ], [ 74.678399, 13.5646164 ], [ 74.6783976, 13.5656472 ], [ 74.678133, 13.5664201 ], [ 74.6781304, 13.5684817 ], [ 74.677333, 13.5736346 ], [ 74.6770686, 13.5744074 ], [ 74.6768013, 13.5772418 ], [ 74.6754755, 13.5836826 ], [ 74.6754744, 13.5844558 ], [ 74.67521, 13.5852284 ], [ 74.6752088, 13.5860016 ], [ 74.6749444, 13.5867742 ], [ 74.6749425, 13.5880628 ], [ 74.6746785, 13.5885779 ], [ 74.6746774, 13.5893511 ], [ 74.6744114, 13.5911545 ], [ 74.6738815, 13.5934731 ], [ 74.6738803, 13.5942463 ], [ 74.6728202, 13.5988835 ], [ 74.6728191, 13.5996567 ], [ 74.6720234, 13.6035211 ], [ 74.6717592, 13.6040362 ], [ 74.6706976, 13.6097041 ], [ 74.6704305, 13.6122809 ], [ 74.6701659, 13.6130535 ], [ 74.670165, 13.6138267 ], [ 74.6691045, 13.6184639 ], [ 74.6685715, 13.6228441 ], [ 74.6683073, 13.6233591 ], [ 74.6674331, 13.6291024 ], [ 74.6679578, 13.629519 ], [ 74.6683967, 13.6309764 ], [ 74.6688172, 13.6317091 ], [ 74.6695322, 13.6324551 ], [ 74.6702768, 13.6328461 ], [ 74.6717274, 13.6333377 ], [ 74.6721683, 13.6331375 ], [ 74.6725422, 13.6322429 ], [ 74.6731484, 13.6316335 ], [ 74.6741092, 13.6307519 ], [ 74.6746526, 13.6304151 ], [ 74.6750426, 13.6296211 ], [ 74.6747717, 13.6287797 ], [ 74.6749224, 13.6281541 ], [ 74.6748885, 13.6277487 ], [ 74.6751891, 13.6271045 ], [ 74.6749815, 13.6268193 ], [ 74.6746157, 13.6267995 ], [ 74.6743035, 13.626652 ], [ 74.6739521, 13.6259028 ], [ 74.673766, 13.6251838 ], [ 74.6735085, 13.6248121 ], [ 74.6731491, 13.6245588 ], [ 74.6729221, 13.6246651 ], [ 74.6727676, 13.6241547 ], [ 74.6725772, 13.6239643 ], [ 74.6723117, 13.6239154 ], [ 74.6721711, 13.6235536 ], [ 74.6718299, 13.6233649 ], [ 74.67186, 13.6225088 ], [ 74.6721223, 13.6214755 ], [ 74.6726432, 13.6204255 ], [ 74.6733116, 13.6193598 ], [ 74.674201, 13.6186967 ], [ 74.6743823, 13.6176915 ], [ 74.6749413, 13.6157948 ], [ 74.6754574, 13.6153328 ], [ 74.6757106, 13.614604 ], [ 74.6765442, 13.6128949 ], [ 74.6771225, 13.6118063 ], [ 74.6773295, 13.6105623 ], [ 74.6770204, 13.6099702 ], [ 74.6770211, 13.6094548 ], [ 74.6772854, 13.6089398 ], [ 74.6772185, 13.6080101 ], [ 74.6770629, 13.607215 ], [ 74.6774746, 13.6067116 ], [ 74.6776874, 13.6061472 ], [ 74.6777437, 13.6048323 ], [ 74.6779084, 13.6046164 ], [ 74.6780103, 13.6042358 ], [ 74.67822, 13.6042295 ], [ 74.6789271, 13.6043505 ], [ 74.6790258, 13.6047249 ], [ 74.6794823, 13.6048229 ], [ 74.679302, 13.6064423 ], [ 74.6791701, 13.6067291 ], [ 74.6790381, 13.6079158 ], [ 74.6792854, 13.6088365 ], [ 74.6798117, 13.6089502 ], [ 74.6801764, 13.6091791 ], [ 74.6805037, 13.6093761 ], [ 74.6808679, 13.6095654 ], [ 74.6811442, 13.6098287 ], [ 74.6813507, 13.6103866 ], [ 74.6811957, 13.6105221 ], [ 74.6812863, 13.6111134 ], [ 74.6814376, 13.6111603 ], [ 74.6814569, 13.612324 ], [ 74.6822353, 13.6123136 ], [ 74.6826473, 13.6126394 ], [ 74.6828131, 13.6128124 ], [ 74.6825492, 13.6130696 ], [ 74.6822854, 13.613327 ], [ 74.6824169, 13.6138426 ], [ 74.6826752, 13.6144569 ], [ 74.6823995, 13.6152061 ], [ 74.682216, 13.615459 ], [ 74.6820572, 13.6156243 ], [ 74.6816759, 13.6156166 ], [ 74.681451, 13.6157734 ], [ 74.6814601, 13.616276 ], [ 74.6814827, 13.6169605 ], [ 74.6815057, 13.6175987 ], [ 74.6813471, 13.6177935 ], [ 74.6814414, 13.6181273 ], [ 74.6810927, 13.618106 ], [ 74.6806549, 13.6181326 ], [ 74.6803154, 13.6181305 ], [ 74.6798396, 13.6181247 ], [ 74.6796529, 13.6181941 ], [ 74.6794893, 13.6185387 ], [ 74.6792015, 13.6187026 ], [ 74.6787302, 13.6192337 ], [ 74.6784126, 13.6197149 ], [ 74.6781144, 13.6199917 ], [ 74.6779974, 13.6203337 ], [ 74.6778735, 13.6217857 ], [ 74.6775409, 13.6217138 ], [ 74.677351, 13.6218154 ], [ 74.677294, 13.6220385 ], [ 74.6774127, 13.6224963 ], [ 74.6771756, 13.6225015 ], [ 74.6769267, 13.6225208 ], [ 74.676733, 13.6226136 ], [ 74.6766268, 13.6230463 ], [ 74.6765442, 13.6237084 ], [ 74.6765581, 13.6248966 ], [ 74.6768757, 13.6262072 ], [ 74.677278, 13.6279798 ], [ 74.6770908, 13.6287556 ], [ 74.6772613, 13.6292865 ], [ 74.6772421, 13.6301814 ], [ 74.6773381, 13.6306464 ], [ 74.6776037, 13.6310161 ], [ 74.6779711, 13.631307 ], [ 74.6782163, 13.6313789 ], [ 74.6785038, 13.6317626 ], [ 74.67883, 13.6322031 ], [ 74.6794821, 13.6328395 ], [ 74.679827, 13.6332241 ], [ 74.6801952, 13.6335681 ], [ 74.6805283, 13.6339136 ], [ 74.6808233, 13.6343416 ], [ 74.6812772, 13.6346368 ], [ 74.6820485, 13.6350915 ], [ 74.6825609, 13.6353767 ], [ 74.6835272, 13.6359065 ], [ 74.6840531, 13.6366803 ], [ 74.6856334, 13.6371977 ], [ 74.6864741, 13.6375891 ], [ 74.687412, 13.6380367 ], [ 74.688112, 13.6382656 ], [ 74.6886007, 13.6383224 ], [ 74.6903324, 13.6382562 ], [ 74.6912368, 13.6383563 ], [ 74.6921713, 13.6383255 ], [ 74.6935821, 13.638398 ], [ 74.6952252, 13.6385534 ], [ 74.6967359, 13.6389298 ], [ 74.6974086, 13.6389965 ], [ 74.697834, 13.6388891 ], [ 74.6987089, 13.6384491 ], [ 74.6991102, 13.6380758 ], [ 74.6996031, 13.637676 ], [ 74.7003064, 13.6374534 ], [ 74.7006465, 13.6373741 ], [ 74.7011679, 13.6372782 ], [ 74.7017854, 13.6370624 ], [ 74.7020997, 13.636893 ], [ 74.7023948, 13.6368633 ], [ 74.7027504, 13.6367668 ], [ 74.7031147, 13.6369779 ], [ 74.7036699, 13.6370202 ], [ 74.7044317, 13.6365859 ], [ 74.7046509, 13.636343 ], [ 74.7051788, 13.6346978 ], [ 74.7053848, 13.6342473 ], [ 74.7065113, 13.6340555 ], [ 74.7064533, 13.6339095 ], [ 74.7051761, 13.6341342 ], [ 74.7048698, 13.633996 ], [ 74.7046095, 13.6337425 ], [ 74.7038287, 13.6324602 ], [ 74.7031581, 13.6317756 ], [ 74.7028588, 13.6316119 ], [ 74.7026507, 13.63154 ], [ 74.7025514, 13.6313633 ], [ 74.7025407, 13.6310531 ], [ 74.702604, 13.6308294 ], [ 74.7023808, 13.6302987 ], [ 74.7022977, 13.6297868 ], [ 74.7017159, 13.6298734 ], [ 74.7017167, 13.629358 ], [ 74.7011896, 13.6293575 ], [ 74.7006647, 13.6278107 ], [ 74.7002669, 13.6275041 ], [ 74.6996672, 13.6273988 ], [ 74.699657, 13.6271371 ], [ 74.6999799, 13.627073 ], [ 74.7004247, 13.6259552 ], [ 74.7006081, 13.6261617 ], [ 74.700879, 13.6261893 ], [ 74.7010464, 13.6260235 ], [ 74.7011784, 13.6236248 ], [ 74.7015276, 13.623434 ], [ 74.7015657, 13.6230258 ], [ 74.7019691, 13.6230148 ], [ 74.7020109, 13.6221431 ], [ 74.7026369, 13.6221713 ], [ 74.7026284, 13.6214054 ], [ 74.7003656, 13.6209294 ], [ 74.7003597, 13.6193966 ], [ 74.6994037, 13.6192754 ], [ 74.699113, 13.6192091 ], [ 74.6990808, 13.6189458 ], [ 74.6987749, 13.6188833 ], [ 74.6989251, 13.618229 ], [ 74.6992132, 13.6182592 ], [ 74.6994079, 13.6185491 ], [ 74.6997651, 13.6185262 ], [ 74.6999026, 13.6181315 ], [ 74.7001907, 13.6181294 ], [ 74.7002213, 13.6184333 ], [ 74.7014824, 13.6186575 ], [ 74.7016273, 13.6183802 ], [ 74.7029131, 13.6186575 ], [ 74.7030199, 13.6181513 ], [ 74.7033251, 13.6174892 ], [ 74.7035061, 13.6174694 ], [ 74.7037366, 13.6172071 ], [ 74.7022024, 13.6167525 ], [ 74.7021675, 13.6166013 ], [ 74.7021919, 13.6162729 ], [ 74.7011565, 13.6157145 ], [ 74.7012187, 13.6152583 ], [ 74.7025041, 13.6154382 ], [ 74.7031274, 13.6157542 ], [ 74.7030371, 13.6160189 ], [ 74.7033965, 13.6161185 ], [ 74.7039777, 13.6159017 ], [ 74.7049511, 13.6160705 ], [ 74.7052676, 13.6160507 ], [ 74.7053185, 13.6157906 ], [ 74.7057477, 13.6158531 ], [ 74.7062235, 13.6157885 ], [ 74.7062573, 13.6171273 ], [ 74.7065599, 13.6171925 ], [ 74.7065513, 13.61757 ], [ 74.70715, 13.6176078 ], [ 74.7065642, 13.6182392 ], [ 74.7062874, 13.618821 ], [ 74.7063019, 13.6198888 ], [ 74.7074515, 13.6200186 ], [ 74.707782, 13.6204623 ], [ 74.7086617, 13.620504 ], [ 74.7088978, 13.6200139 ], [ 74.7096938, 13.6200395 ], [ 74.7100801, 13.6199665 ], [ 74.7106487, 13.6200603 ], [ 74.7106895, 13.6208272 ], [ 74.7103805, 13.6212803 ], [ 74.711301, 13.6212652 ], [ 74.7115714, 13.6208736 ], [ 74.7120949, 13.6208481 ], [ 74.7122473, 13.6210613 ], [ 74.7126443, 13.6209779 ], [ 74.7128164, 13.6208008 ], [ 74.713009, 13.6208472 ], [ 74.7129671, 13.6210745 ], [ 74.7127494, 13.621213 ], [ 74.7125456, 13.6214737 ], [ 74.7126121, 13.6217078 ], [ 74.7130305, 13.6225837 ], [ 74.713406, 13.6232093 ], [ 74.7142193, 13.6231212 ], [ 74.7146806, 13.6229335 ], [ 74.7151956, 13.6223704 ], [ 74.7156033, 13.6220576 ], [ 74.7162792, 13.6218178 ], [ 74.7162384, 13.6216452 ], [ 74.7166783, 13.6214575 ], [ 74.7174057, 13.6214111 ], [ 74.7180516, 13.6211864 ], [ 74.7185108, 13.6209419 ], [ 74.7190494, 13.62054 ], [ 74.719648, 13.6203893 ], [ 74.7200665, 13.6204414 ], [ 74.7203368, 13.6205608 ], [ 74.720796, 13.6204414 ], [ 74.7215524, 13.6203022 ], [ 74.7221937, 13.6205905 ], [ 74.7225754, 13.6212297 ], [ 74.7225668, 13.6217057 ], [ 74.7220266, 13.621639 ], [ 74.722128, 13.6218924 ], [ 74.7227187, 13.6221373 ], [ 74.7227573, 13.6223929 ], [ 74.7224697, 13.6227203 ], [ 74.7219633, 13.6229267 ], [ 74.7219724, 13.6231535 ], [ 74.7215234, 13.6232932 ], [ 74.7212145, 13.6233089 ], [ 74.7210074, 13.6232546 ], [ 74.7203175, 13.6230049 ], [ 74.719692, 13.622763 ], [ 74.719264, 13.6225414 ], [ 74.7187871, 13.6226864 ], [ 74.7184909, 13.623067 ], [ 74.7182898, 13.6234861 ], [ 74.7180253, 13.6239845 ], [ 74.7177415, 13.6245168 ], [ 74.7176503, 13.6247014 ], [ 74.7173955, 13.6247947 ], [ 74.7167459, 13.6249355 ], [ 74.7160957, 13.6249542 ], [ 74.7154268, 13.6248964 ], [ 74.7149494, 13.6247937 ], [ 74.7145454, 13.6247968 ], [ 74.7140417, 13.6248693 ], [ 74.713215, 13.6249991 ], [ 74.7132322, 13.6254985 ], [ 74.7133631, 13.6257326 ], [ 74.7135541, 13.6259365 ], [ 74.7134575, 13.6261137 ], [ 74.7129339, 13.6260975 ], [ 74.7122988, 13.6260303 ], [ 74.7118074, 13.6260558 ], [ 74.7117001, 13.6267649 ], [ 74.7112688, 13.6267706 ], [ 74.7105071, 13.6266872 ], [ 74.7105071, 13.6262493 ], [ 74.7103268, 13.6260767 ], [ 74.7097131, 13.6264265 ], [ 74.7095737, 13.6259365 ], [ 74.7095415, 13.6255298 ], [ 74.7096724, 13.6253051 ], [ 74.7095737, 13.6251857 ], [ 74.7093291, 13.6252425 ], [ 74.7091359, 13.6253677 ], [ 74.7089621, 13.6250502 ], [ 74.7088355, 13.6250966 ], [ 74.7088119, 13.625363 ], [ 74.7085544, 13.6256236 ], [ 74.7079, 13.6258113 ], [ 74.7074172, 13.6257592 ], [ 74.7070417, 13.6249876 ], [ 74.7066667, 13.6249355 ], [ 74.7064645, 13.6245752 ], [ 74.7061962, 13.6247942 ], [ 74.7060246, 13.6253989 ], [ 74.7059602, 13.6258682 ], [ 74.706164, 13.6266397 ], [ 74.7065272, 13.6268227 ], [ 74.7068185, 13.6265563 ], [ 74.707076, 13.6266085 ], [ 74.7069151, 13.6268796 ], [ 74.7069472, 13.627672 ], [ 74.7070631, 13.6278029 ], [ 74.7072798, 13.6289545 ], [ 74.7075352, 13.6289706 ], [ 74.7077305, 13.629382 ], [ 74.7083114, 13.6295243 ], [ 74.7083483, 13.6303673 ], [ 74.7084986, 13.6309131 ], [ 74.7085357, 13.6314439 ], [ 74.7083114, 13.6315398 ], [ 74.7082267, 13.6317942 ], [ 74.708141, 13.6321682 ], [ 74.7079264, 13.6327521 ], [ 74.7077108, 13.633023 ], [ 74.7078513, 13.6336632 ], [ 74.7072382, 13.633794 ], [ 74.707273, 13.6339838 ], [ 74.7079543, 13.6338863 ], [ 74.708082, 13.6347196 ], [ 74.7081314, 13.6355957 ], [ 74.7089124, 13.6357944 ], [ 74.7089484, 13.6362198 ], [ 74.7080868, 13.6360613 ], [ 74.707766, 13.6361718 ], [ 74.7074994, 13.6368008 ], [ 74.7078052, 13.6371425 ], [ 74.7087096, 13.6377016 ], [ 74.7107181, 13.6378059 ], [ 74.713146, 13.6378298 ], [ 74.7136395, 13.6375442 ], [ 74.7137376, 13.637268 ], [ 74.7144823, 13.6369037 ], [ 74.7155832, 13.6363685 ], [ 74.7164793, 13.6362119 ], [ 74.7175758, 13.6362328 ], [ 74.7186669, 13.6356823 ], [ 74.7192527, 13.6353184 ], [ 74.7216592, 13.6344655 ], [ 74.7221733, 13.6340567 ], [ 74.7223351, 13.6338117 ], [ 74.722731, 13.6335949 ], [ 74.7236687, 13.6332185 ], [ 74.7260292, 13.6335399 ], [ 74.7294265, 13.6340758 ], [ 74.7303486, 13.6344188 ], [ 74.7311315, 13.6347102 ], [ 74.7318662, 13.6350611 ], [ 74.7331653, 13.6357021 ], [ 74.7350268, 13.635944 ], [ 74.7366635, 13.6360047 ], [ 74.7376645, 13.6363235 ], [ 74.738475, 13.6366983 ], [ 74.7391091, 13.6369934 ], [ 74.7397663, 13.6374699 ], [ 74.740697, 13.6380772 ], [ 74.7418562, 13.6388649 ], [ 74.744362, 13.6394905 ], [ 74.7459986, 13.6397235 ], [ 74.7479073, 13.6398153 ], [ 74.7483944, 13.6397803 ], [ 74.7487122, 13.6401648 ], [ 74.7491226, 13.6400897 ], [ 74.7495877, 13.6397034 ], [ 74.7499074, 13.6397109 ], [ 74.7499756, 13.6421711 ], [ 74.7497197, 13.6421786 ], [ 74.7496859, 13.642029 ], [ 74.7495392, 13.6419855 ], [ 74.7486412, 13.6421294 ], [ 74.7462776, 13.643124 ], [ 74.7450674, 13.6433101 ], [ 74.7441855, 13.6439868 ], [ 74.7430761, 13.644531 ], [ 74.7426083, 13.6451211 ], [ 74.7422301, 13.6453964 ], [ 74.7417312, 13.6456351 ], [ 74.7412737, 13.6458124 ], [ 74.7403681, 13.6460923 ], [ 74.7401107, 13.6459505 ], [ 74.7381022, 13.6460631 ], [ 74.7373174, 13.646294 ], [ 74.7362542, 13.6465615 ], [ 74.7350088, 13.6464159 ], [ 74.7336081, 13.6459665 ], [ 74.7335035, 13.6457486 ], [ 74.7336161, 13.6453347 ], [ 74.7334155, 13.6451596 ], [ 74.7331913, 13.6456204 ], [ 74.7329541, 13.6455474 ], [ 74.7326747, 13.6453212 ], [ 74.7310578, 13.6451231 ], [ 74.7305311, 13.644865 ], [ 74.7299821, 13.6446864 ], [ 74.7292141, 13.6443481 ], [ 74.7284366, 13.6438856 ], [ 74.7278972, 13.6438313 ], [ 74.72677, 13.643702 ], [ 74.725991, 13.6434954 ], [ 74.7258018, 13.6435565 ], [ 74.7255572, 13.6433803 ], [ 74.7252932, 13.6432792 ], [ 74.7249676, 13.6427016 ], [ 74.7247096, 13.6426573 ], [ 74.7245642, 13.643238 ], [ 74.7242088, 13.6431834 ], [ 74.7221011, 13.6427941 ], [ 74.7185559, 13.6427341 ], [ 74.7163232, 13.6436114 ], [ 74.7151554, 13.6441213 ], [ 74.7144923, 13.6444148 ], [ 74.7130547, 13.6449449 ], [ 74.7127226, 13.6449798 ], [ 74.7123004, 13.6452363 ], [ 74.7120365, 13.6455413 ], [ 74.7115076, 13.6459135 ], [ 74.710766, 13.6465183 ], [ 74.7097114, 13.6469031 ], [ 74.7087862, 13.6472292 ], [ 74.7073689, 13.6475561 ], [ 74.7061952, 13.6479283 ], [ 74.7054935, 13.6483159 ], [ 74.7049796, 13.6484506 ], [ 74.7044754, 13.6488083 ], [ 74.7043611, 13.6491372 ], [ 74.7042104, 13.6494609 ], [ 74.7038831, 13.649891 ], [ 74.703711277865054, 13.650210504492188 ], [ 74.7036112, 13.6503966 ], [ 74.7030726, 13.650982 ], [ 74.7026992, 13.6515007 ], [ 74.7023854, 13.6520142 ], [ 74.7020627, 13.6524352 ], [ 74.7018752, 13.6526444 ], [ 74.7016172, 13.6528561 ], [ 74.7012438, 13.6530495 ], [ 74.7006076, 13.6533956 ], [ 74.6995196, 13.6538622 ], [ 74.6994673, 13.653963 ], [ 74.6995703, 13.6543558 ], [ 74.6994397, 13.6543712 ], [ 74.6993788, 13.6545724 ], [ 74.6993885, 13.6547945 ], [ 74.6996647, 13.6548849 ], [ 74.6998479, 13.6548729 ], [ 74.6998514, 13.6549574 ], [ 74.6994719, 13.6552185 ], [ 74.6995237, 13.6554067 ], [ 74.6996873, 13.6553866 ], [ 74.6996619, 13.6557913 ], [ 74.6996749, 13.6559363 ], [ 74.6998318, 13.6565235 ], [ 74.6999553, 13.6576086 ], [ 74.699612, 13.6586798 ], [ 74.6997924, 13.659206 ], [ 74.7001286, 13.6596921 ], [ 74.7007766, 13.6599741 ], [ 74.7027148, 13.6592646 ], [ 74.7038901, 13.6594679 ], [ 74.7051062, 13.6599673 ], [ 74.7053814, 13.6592917 ], [ 74.7057333, 13.6594648 ], [ 74.7054093, 13.6601294 ], [ 74.7062365, 13.660561 ], [ 74.7063561, 13.660695 ], [ 74.7063969, 13.6609822 ], [ 74.7058356, 13.6614563 ], [ 74.703521, 13.6604041 ], [ 74.7027861, 13.6602154 ], [ 74.7024934, 13.6602478 ], [ 74.7016584, 13.6609197 ], [ 74.7017086, 13.6610982 ], [ 74.7021356, 13.6612365 ], [ 74.7020697, 13.6614409 ], [ 74.7019819, 13.6614937 ], [ 74.7017852, 13.6618082 ], [ 74.7017288, 13.6617871 ], [ 74.7016949, 13.6617089 ], [ 74.7015904, 13.6616385 ], [ 74.7014009, 13.6616398 ], [ 74.7012428, 13.6618501 ], [ 74.7012215, 13.6629968 ], [ 74.7013536, 13.6631255 ], [ 74.7018275, 13.6633252 ], [ 74.7018243, 13.6636542 ], [ 74.7017441, 13.6639171 ], [ 74.7016588, 13.6640323 ], [ 74.7010231, 13.6637583 ], [ 74.7008743, 13.6637574 ], [ 74.7006341, 13.6635609 ], [ 74.7003921, 13.6633458 ], [ 74.7002969, 13.6633256 ], [ 74.7001844, 13.6633433 ], [ 74.7001482, 13.663182 ], [ 74.700031, 13.6631611 ], [ 74.6997099, 13.6632234 ], [ 74.6996918, 13.6632719 ], [ 74.6997278, 13.6634661 ], [ 74.6996964, 13.6635184 ], [ 74.6981195, 13.664005 ], [ 74.6979505, 13.6639972 ], [ 74.6978425, 13.6639302 ], [ 74.6975412, 13.6639493 ], [ 74.6975013, 13.664318 ], [ 74.6973296, 13.6643545 ], [ 74.6971778, 13.6642818 ], [ 74.6971402, 13.6639326 ], [ 74.6971952, 13.6638625 ], [ 74.6977486, 13.6635578 ], [ 74.6976955, 13.6634976 ], [ 74.6970469, 13.6636811 ], [ 74.6968141, 13.6637642 ], [ 74.6964887, 13.6639972 ], [ 74.6959333, 13.66463 ], [ 74.6958903, 13.6652018 ], [ 74.6959483, 13.6652284 ], [ 74.6961291, 13.6652198 ], [ 74.6961602, 13.6656981 ], [ 74.6960702, 13.6658311 ], [ 74.6961779, 13.6664271 ], [ 74.6961055, 13.6670017 ], [ 74.6956371, 13.6671902 ], [ 74.6953858, 13.6673815 ], [ 74.6949634, 13.6674894 ], [ 74.6947228, 13.667794 ], [ 74.6945707, 13.6678876 ], [ 74.6945487, 13.6681571 ], [ 74.6944567, 13.6684756 ], [ 74.6944183, 13.6688131 ], [ 74.6945838, 13.669301 ], [ 74.6943215, 13.6693166 ], [ 74.6942829, 13.6695102 ], [ 74.693353, 13.6699713 ], [ 74.6932599, 13.6698592 ], [ 74.6925625, 13.6700307 ], [ 74.6925735, 13.6703234 ], [ 74.6917898, 13.6705997 ], [ 74.6918668, 13.6709426 ], [ 74.6911171, 13.6714052 ], [ 74.6909452, 13.6714269 ], [ 74.6901786, 13.6713276 ], [ 74.6902141, 13.6712165 ], [ 74.6901764, 13.6708962 ], [ 74.6900657, 13.6707665 ], [ 74.6899036, 13.6707685 ], [ 74.6897784, 13.6708212 ], [ 74.6896682, 13.6709153 ], [ 74.6896019, 13.6712194 ], [ 74.6893441, 13.6713015 ], [ 74.6887366, 13.6713779 ], [ 74.6885837, 13.6714816 ], [ 74.6884483, 13.6718092 ], [ 74.6870889, 13.671994 ], [ 74.6869599, 13.6719072 ], [ 74.686689, 13.6714485 ], [ 74.6862853, 13.6711462 ], [ 74.685684, 13.6712011 ], [ 74.6850032, 13.6711844 ], [ 74.6848798, 13.6714356 ], [ 74.6838601, 13.670881 ], [ 74.6836476, 13.6708122 ], [ 74.6835505, 13.6709978 ], [ 74.6835924, 13.671297 ], [ 74.6837179, 13.6715169 ], [ 74.6840559, 13.6718865 ], [ 74.6843708, 13.6730405 ], [ 74.6845762, 13.6731641 ], [ 74.6849855, 13.6732047 ], [ 74.6850628, 13.6749024 ], [ 74.6851776, 13.6753079 ], [ 74.6855702, 13.6755133 ], [ 74.686442, 13.6757416 ], [ 74.6864125, 13.6772062 ], [ 74.6865814, 13.6774168 ], [ 74.6869714, 13.6776368 ], [ 74.6874623, 13.6779349 ], [ 74.6874975, 13.6786997 ], [ 74.6876736, 13.6790069 ], [ 74.6879703, 13.679278 ], [ 74.6886725, 13.6793978 ], [ 74.6892127, 13.679488 ], [ 74.6894144, 13.6807233 ], [ 74.6894948, 13.6812378 ], [ 74.6902641, 13.6814379 ], [ 74.6911675, 13.6815922 ], [ 74.6917581, 13.6814718 ], [ 74.692552, 13.6816365 ], [ 74.6934291, 13.681525 ], [ 74.6943464, 13.6814509 ], [ 74.6945658, 13.6813175 ], [ 74.6944929, 13.682178 ], [ 74.6952433, 13.682398 ], [ 74.6952101, 13.6828728 ], [ 74.6951103, 13.6831538 ], [ 74.694885, 13.6834045 ], [ 74.6948694, 13.6836375 ], [ 74.6950663, 13.6837412 ], [ 74.6959611, 13.6838319 ], [ 74.6957648, 13.6845538 ], [ 74.6936394, 13.6841347 ], [ 74.6921534, 13.683748 ], [ 74.6919201, 13.6840226 ], [ 74.6917597, 13.6844271 ], [ 74.69133, 13.6843244 ], [ 74.6912329, 13.6844922 ], [ 74.6904846, 13.6841847 ], [ 74.6906058, 13.6838115 ], [ 74.6905007, 13.6836651 ], [ 74.6894852, 13.683282 ], [ 74.6889015, 13.6826122 ], [ 74.6884214, 13.6822818 ], [ 74.6881478, 13.6822693 ], [ 74.687775, 13.6825836 ], [ 74.6874907, 13.6823026 ], [ 74.6876227, 13.6821521 ], [ 74.6880642, 13.6810727 ], [ 74.6878131, 13.6802643 ], [ 74.6873078, 13.6800511 ], [ 74.6866072, 13.6795012 ], [ 74.6866914, 13.6789701 ], [ 74.6868421, 13.6782028 ], [ 74.6860123, 13.6778572 ], [ 74.6858159, 13.6776514 ], [ 74.6853315, 13.6775106 ], [ 74.6846878, 13.67612 ], [ 74.6840827, 13.676011 ], [ 74.6842008, 13.6757367 ], [ 74.6842667, 13.6752068 ], [ 74.6843708, 13.6738359 ], [ 74.6841009, 13.6737239 ], [ 74.6837024, 13.6729785 ], [ 74.6833805, 13.6725688 ], [ 74.6834218, 13.6724223 ], [ 74.683292, 13.6721601 ], [ 74.6830323, 13.6717875 ], [ 74.6827786, 13.6716154 ], [ 74.682667, 13.6713929 ], [ 74.6824294, 13.6713574 ], [ 74.6822395, 13.6716071 ], [ 74.68196, 13.6728336 ], [ 74.6815539, 13.6739735 ], [ 74.6812969, 13.6746454 ], [ 74.6811945, 13.6752902 ], [ 74.6810561, 13.6767799 ], [ 74.6813125, 13.6778317 ], [ 74.6817116, 13.6788366 ], [ 74.6822251, 13.6797239 ], [ 74.6823564, 13.6799187 ], [ 74.6827115, 13.6802377 ], [ 74.6832984, 13.6807735 ], [ 74.6837984, 13.681277 ], [ 74.6841481, 13.6817253 ], [ 74.6852328, 13.6828146 ], [ 74.6865214, 13.6832931 ], [ 74.6875846, 13.6839581 ], [ 74.6882938, 13.6844283 ], [ 74.6890051, 13.6849391 ], [ 74.6907085, 13.6867677 ], [ 74.6915118, 13.6875741 ], [ 74.6921047, 13.6881203 ], [ 74.6927289, 13.6888314 ], [ 74.6931241, 13.6892179 ], [ 74.695767, 13.6897531 ], [ 74.6982003, 13.68959 ], [ 74.6997805, 13.6895628 ], [ 74.7009114, 13.6898066 ], [ 74.7015564, 13.6905167 ], [ 74.7024795, 13.6913428 ], [ 74.7036749, 13.6918759 ], [ 74.7047637, 13.691927 ], [ 74.7058957, 13.6917702 ], [ 74.7065583, 13.6915811 ], [ 74.7070668, 13.6914822 ], [ 74.7073536, 13.691426 ], [ 74.7078296, 13.6912593 ], [ 74.7083752, 13.6910623 ], [ 74.7092104, 13.6907373 ], [ 74.711412, 13.6897545 ], [ 74.7112925, 13.6900027 ], [ 74.7107954, 13.6902504 ], [ 74.7092384, 13.6910032 ], [ 74.7062984, 13.6920686 ], [ 74.7049805, 13.6921963 ], [ 74.7040195, 13.6923316 ], [ 74.7040661, 13.6925354 ], [ 74.7049892, 13.6927843 ], [ 74.7064621, 13.69278 ], [ 74.7078796, 13.6923281 ], [ 74.7110432, 13.6915589 ], [ 74.7135575, 13.6915904 ], [ 74.7141068, 13.6915106 ], [ 74.7159624, 13.6917436 ], [ 74.7172595, 13.6918197 ], [ 74.7179531, 13.6919615 ], [ 74.7197399, 13.6920843 ], [ 74.7213981, 13.692258 ], [ 74.7227381, 13.6921058 ], [ 74.7247182, 13.6915617 ], [ 74.7252122, 13.6910697 ], [ 74.7265941, 13.690868 ], [ 74.7272829, 13.6909587 ], [ 74.7281751, 13.6910627 ], [ 74.7292162, 13.6911948 ], [ 74.7308105, 13.6910658 ], [ 74.732129, 13.6905517 ], [ 74.7324526, 13.6904302 ], [ 74.7336469, 13.6904057 ], [ 74.7340335, 13.6902327 ], [ 74.7364222, 13.6903489 ], [ 74.7374377, 13.6909983 ], [ 74.7372271, 13.6912929 ], [ 74.7370059, 13.6916024 ], [ 74.7364131, 13.6914575 ], [ 74.7346885, 13.6912641 ], [ 74.7337969, 13.6913444 ], [ 74.7327396, 13.6914559 ], [ 74.7306453, 13.6920782 ], [ 74.728956, 13.6923701 ], [ 74.7280811, 13.6922794 ], [ 74.7269675, 13.6919735 ], [ 74.7261993, 13.6919641 ], [ 74.7255464, 13.6922429 ], [ 74.7246565, 13.69286 ], [ 74.7233604, 13.6933697 ], [ 74.7225295, 13.6936481 ], [ 74.7218208, 13.6937763 ], [ 74.7212619, 13.6938654 ], [ 74.7205355, 13.6936194 ], [ 74.7200302, 13.6933135 ], [ 74.7193445, 13.693197 ], [ 74.7185688, 13.6931845 ], [ 74.7167824, 13.6933033 ], [ 74.7153598, 13.6934378 ], [ 74.7144997, 13.6932137 ], [ 74.7133928, 13.6930075 ], [ 74.7114234, 13.6931063 ], [ 74.7103151, 13.6935139 ], [ 74.7096068, 13.6939622 ], [ 74.7084322, 13.6944938 ], [ 74.7054174, 13.6945605 ], [ 74.7039003, 13.6942967 ], [ 74.7026568, 13.6941706 ], [ 74.7015131, 13.694081 ], [ 74.7003829, 13.6934358 ], [ 74.6994115, 13.6929827 ], [ 74.6984307, 13.6929218 ], [ 74.6967452, 13.6930699 ], [ 74.6955543, 13.6927822 ], [ 74.6942197, 13.6924559 ], [ 74.6926695, 13.6916865 ], [ 74.6920106, 13.691307 ], [ 74.691603, 13.6908938 ], [ 74.6914588, 13.6907051 ], [ 74.6908988, 13.6903319 ], [ 74.6890551, 13.6892988 ], [ 74.6882653, 13.6887822 ], [ 74.6877578, 13.6883617 ], [ 74.6873035, 13.688296 ], [ 74.6870964, 13.6885467 ], [ 74.6840784, 13.6887338 ], [ 74.6836533, 13.6881327 ], [ 74.6830957, 13.6875625 ], [ 74.6827327, 13.687229 ], [ 74.6813506, 13.6860392 ], [ 74.6807063, 13.6854085 ], [ 74.6802267, 13.6851578 ], [ 74.6796696, 13.68436 ], [ 74.6793353, 13.6840611 ], [ 74.6790042, 13.6837203 ], [ 74.6785863, 13.6833101 ], [ 74.6783036, 13.683159 ], [ 74.6782242, 13.6829051 ], [ 74.677779, 13.6825991 ], [ 74.6770095, 13.681931 ], [ 74.67658, 13.6815789 ], [ 74.6760769, 13.681557 ], [ 74.675564, 13.6813287 ], [ 74.6753511, 13.6809044 ], [ 74.6751746, 13.6806308 ], [ 74.6747856, 13.6803415 ], [ 74.6745813, 13.6800929 ], [ 74.6744224, 13.6796743 ], [ 74.6743007, 13.6793328 ], [ 74.6742985, 13.6788372 ], [ 74.6743452, 13.6784561 ], [ 74.6745941, 13.677777 ], [ 74.67471, 13.6768737 ], [ 74.6745667, 13.6760324 ], [ 74.6738699, 13.6744463 ], [ 74.6735942, 13.6735498 ], [ 74.6734923, 13.6724098 ], [ 74.6731007, 13.6714862 ], [ 74.6727745, 13.671199 ], [ 74.6721528, 13.6699188 ], [ 74.672163, 13.6697056 ], [ 74.6717536, 13.6683352 ], [ 74.6715348, 13.6676608 ], [ 74.6714929, 13.6657014 ], [ 74.6708213, 13.6654772 ], [ 74.670633, 13.6652833 ], [ 74.6704899, 13.6648518 ], [ 74.6699628, 13.6648511 ], [ 74.6693558, 13.6641193 ], [ 74.669072, 13.6630935 ], [ 74.6691422, 13.6625561 ], [ 74.6692731, 13.6620578 ], [ 74.669867, 13.6618847 ], [ 74.6700521, 13.661243 ], [ 74.6703889, 13.6611143 ], [ 74.6707655, 13.6603584 ], [ 74.6713862, 13.6600863 ], [ 74.6716512, 13.659528 ], [ 74.6718448, 13.6586085 ], [ 74.6719457, 13.6578428 ], [ 74.6719499, 13.6568651 ], [ 74.6728668, 13.6533561 ], [ 74.6731377, 13.6523125 ], [ 74.6734676, 13.651613 ], [ 74.673834, 13.6505542 ], [ 74.674026756371788, 13.650010504492188 ], [ 74.6742304, 13.6494361 ], [ 74.6746515, 13.6479321 ], [ 74.6746773, 13.6474963 ], [ 74.6746783, 13.646713 ], [ 74.6744278, 13.6462433 ], [ 74.673959, 13.6455828 ], [ 74.6734059, 13.6448911 ], [ 74.672767, 13.6442379 ], [ 74.6720954, 13.6434106 ], [ 74.6723877, 13.643163 ], [ 74.6718985, 13.6420051 ], [ 74.671604, 13.6413306 ], [ 74.6711416, 13.6404553 ], [ 74.6706657, 13.639958 ], [ 74.6704351, 13.6392052 ], [ 74.6691042, 13.6366294 ], [ 74.6687587, 13.6357196 ], [ 74.668852, 13.6352353 ], [ 74.6687163, 13.6349517 ], [ 74.668373, 13.6347875 ], [ 74.6679277, 13.6347776 ], [ 74.6675817, 13.6350039 ], [ 74.6673291, 13.6355596 ], [ 74.6668227, 13.6371997 ], [ 74.6659794, 13.6390988 ], [ 74.6652128, 13.6414489 ], [ 74.6640603, 13.6455156 ], [ 74.6637942, 13.6473192 ], [ 74.6632657, 13.6483493 ], [ 74.662829122039284, 13.650047167260672 ], [ 74.6627358, 13.6504101 ], [ 74.6619423, 13.6524708 ], [ 74.6602259, 13.6553032 ], [ 74.6596985, 13.6554307 ], [ 74.659171, 13.6558171 ], [ 74.6591703, 13.6563325 ], [ 74.657852, 13.656846 ], [ 74.6574547, 13.6578762 ], [ 74.6569269, 13.658391 ], [ 74.6561342, 13.6599361 ], [ 74.6553425, 13.660708 ], [ 74.6550781, 13.661223 ], [ 74.6541548, 13.6622527 ], [ 74.6533642, 13.6622516 ], [ 74.6533634, 13.662767 ], [ 74.6512548, 13.6630217 ], [ 74.6513831, 13.6650834 ], [ 74.6505906, 13.6663708 ], [ 74.6505899, 13.6668862 ], [ 74.6503257, 13.6674012 ], [ 74.6497951, 13.6697197 ], [ 74.6495311, 13.6699771 ], [ 74.64953, 13.6707501 ], [ 74.6490019, 13.6715226 ], [ 74.6476791, 13.6748707 ], [ 74.6474152, 13.6751281 ], [ 74.6463576, 13.6774458 ], [ 74.6455655, 13.6784755 ], [ 74.6452973, 13.6815676 ], [ 74.6449012, 13.68234 ], [ 74.644374, 13.6823392 ], [ 74.644505, 13.6825972 ], [ 74.6442397, 13.6838853 ], [ 74.6439734, 13.6856889 ], [ 74.6439722, 13.6864619 ], [ 74.6437074, 13.6872347 ], [ 74.6439649, 13.6913581 ], [ 74.6436993, 13.6926464 ], [ 74.6431656, 13.6970264 ], [ 74.6429914, 13.6996887 ], [ 74.642897, 13.7003761 ], [ 74.6428712, 13.7008243 ], [ 74.6427328, 13.701469 ], [ 74.6423519, 13.7040384 ], [ 74.6422114, 13.7047071 ], [ 74.6420837, 13.7053752 ], [ 74.6419931, 13.7061992 ], [ 74.6418702, 13.7073431 ], [ 74.6415923, 13.7092063 ], [ 74.6410725, 13.7122274 ], [ 74.6408681, 13.7132869 ], [ 74.6394584, 13.7215965 ], [ 74.6391526, 13.7229702 ], [ 74.6390121, 13.7238019 ], [ 74.6388082, 13.7248932 ], [ 74.6384316, 13.7265618 ], [ 74.6381441, 13.7281502 ], [ 74.637569, 13.7296676 ], [ 74.6376795, 13.7300637 ], [ 74.6378008, 13.7309121 ], [ 74.6377149, 13.7314957 ], [ 74.6374682, 13.732268 ], [ 74.6371839, 13.7342492 ], [ 74.6368663, 13.7360033 ], [ 74.6367354, 13.7370184 ], [ 74.6365466, 13.7379542 ], [ 74.6362478, 13.7392789 ], [ 74.6360606, 13.7401522 ], [ 74.6350102, 13.7463635 ], [ 74.6347366, 13.7482509 ], [ 74.6339362, 13.7528863 ], [ 74.633324, 13.7547364 ], [ 74.6332399, 13.7554165 ], [ 74.633058, 13.7562821 ], [ 74.6329503, 13.7570047 ], [ 74.6328644, 13.7578363 ], [ 74.6325258, 13.7593737 ], [ 74.6319966, 13.7606614 ], [ 74.6319955, 13.7614346 ], [ 74.6317309, 13.7619496 ], [ 74.631218944958846, 13.764185365234376 ], [ 74.6312, 13.7642681 ], [ 74.631179826070252, 13.764385365234375 ], [ 74.6309341, 13.7658137 ], [ 74.6306666, 13.7681328 ], [ 74.6301374, 13.7694204 ], [ 74.6298673, 13.7735431 ], [ 74.6298395, 13.7743798 ], [ 74.6297548, 13.7748306 ], [ 74.6296719, 13.7754466 ], [ 74.629318, 13.7762119 ], [ 74.6289444, 13.7778856 ], [ 74.6290107, 13.7795892 ], [ 74.6286956, 13.7810134 ], [ 74.6283993, 13.7821661 ], [ 74.6280536, 13.7835051 ], [ 74.6275152, 13.7858004 ], [ 74.627118, 13.7875621 ], [ 74.6262843, 13.7903733 ], [ 74.6258834, 13.7918336 ], [ 74.6257652, 13.7923638 ], [ 74.6256823, 13.7929232 ], [ 74.6257987, 13.7934023 ], [ 74.6261447, 13.7938678 ], [ 74.6264653, 13.7942772 ], [ 74.6258398, 13.7950238 ], [ 74.6254618, 13.7949933 ], [ 74.6252048, 13.7951989 ], [ 74.6245906, 13.7962235 ], [ 74.6243086, 13.7971753 ], [ 74.6229848, 13.8005234 ], [ 74.6227179, 13.8025845 ], [ 74.6219533, 13.8058545 ], [ 74.6217087, 13.8071134 ], [ 74.6213642, 13.8085015 ], [ 74.6208374, 13.8130933 ], [ 74.6201946, 13.814177 ], [ 74.6204715, 13.8148855 ], [ 74.6202852, 13.8162823 ], [ 74.6198911, 13.8175347 ], [ 74.6189971, 13.8206175 ], [ 74.6185927, 13.8225655 ], [ 74.6181601, 13.8247898 ], [ 74.6179343, 13.8255121 ], [ 74.6176372, 13.826464 ], [ 74.617307, 13.8269713 ], [ 74.6167609, 13.8280511 ], [ 74.6168992, 13.8288464 ], [ 74.616342, 13.8316943 ], [ 74.6150145, 13.8371038 ], [ 74.6148031, 13.8378986 ], [ 74.6144836, 13.8391645 ], [ 74.6142192, 13.8396795 ], [ 74.6136869, 13.8425134 ], [ 74.6133238, 13.8440878 ], [ 74.6120948, 13.8484378 ], [ 74.6114673, 13.8505863 ], [ 74.6110667, 13.8516159 ], [ 74.6109055, 13.8531072 ], [ 74.6099742, 13.8548768 ], [ 74.6094437, 13.8566799 ], [ 74.6091265, 13.8577389 ], [ 74.6089128, 13.8587405 ], [ 74.6084269, 13.8607961 ], [ 74.608178, 13.862655 ], [ 74.6076407, 13.8641986 ], [ 74.6077735, 13.864775 ], [ 74.6080812, 13.8651509 ], [ 74.6086063, 13.865368 ], [ 74.6088451, 13.8660727 ], [ 74.608859, 13.8665289 ], [ 74.6080946, 13.8666919 ], [ 74.6075839, 13.8668278 ], [ 74.6073237, 13.8671419 ], [ 74.6067621, 13.8678116 ], [ 74.6058093, 13.8690449 ], [ 74.6052125, 13.8703888 ], [ 74.6047007, 13.8707693 ], [ 74.6042622, 13.8712484 ], [ 74.6035171, 13.8724461 ], [ 74.6030509, 13.8727816 ], [ 74.6019863, 13.8727989 ], [ 74.6017625, 13.8729731 ], [ 74.602041, 13.8732261 ], [ 74.6018059, 13.8740983 ], [ 74.6013909, 13.8749812 ], [ 74.6007731, 13.8762175 ], [ 74.6003521, 13.877224 ], [ 74.5999237, 13.8782057 ], [ 74.5994164, 13.8793971 ], [ 74.5986224, 13.880942 ], [ 74.5979435, 13.8823914 ], [ 74.5970718, 13.8842847 ], [ 74.596421, 13.8855582 ], [ 74.5948032, 13.8897944 ], [ 74.594084, 13.8925851 ], [ 74.5935861, 13.8951068 ], [ 74.5930544, 13.8974253 ], [ 74.5927885, 13.8987133 ], [ 74.5919898, 13.902835 ], [ 74.5917243, 13.9038652 ], [ 74.5911936, 13.9056683 ], [ 74.5906628, 13.9074712 ], [ 74.5901319, 13.9092742 ], [ 74.5896012, 13.9110771 ], [ 74.5877451, 13.9164855 ], [ 74.5872555, 13.9174953 ], [ 74.5866857, 13.9188031 ], [ 74.5862076, 13.9198016 ], [ 74.5858906, 13.9208632 ], [ 74.5852302, 13.9216352 ], [ 74.5856286, 13.9219221 ], [ 74.5855523, 13.922086 ], [ 74.5854817, 13.9222375 ], [ 74.5851346, 13.9227156 ], [ 74.5844446, 13.9234898 ], [ 74.5836426, 13.9242094 ], [ 74.5828509, 13.9243364 ], [ 74.5820812, 13.9249172 ], [ 74.5810834, 13.9252025 ], [ 74.5796157, 13.9251682 ], [ 74.5790395, 13.9251921 ], [ 74.5786308, 13.9253546 ], [ 74.578445, 13.9257574 ], [ 74.5765888, 13.9309081 ], [ 74.5760602, 13.9314225 ], [ 74.5755293, 13.9332256 ], [ 74.5731477, 13.9370867 ], [ 74.5707623, 13.9430096 ], [ 74.5707614, 13.9435248 ], [ 74.5699683, 13.9442965 ], [ 74.5694388, 13.9453263 ], [ 74.5687782, 13.9460982 ], [ 74.5682503, 13.9462258 ], [ 74.5679859, 13.946483 ], [ 74.5656104, 13.946994 ], [ 74.5653471, 13.9467359 ], [ 74.5642925, 13.946348 ], [ 74.5641609, 13.9458323 ], [ 74.5638977, 13.9455741 ], [ 74.5636357, 13.9445429 ], [ 74.5632414, 13.9440269 ], [ 74.5606021, 13.9445374 ], [ 74.5604677, 13.945568 ], [ 74.5607311, 13.9458262 ], [ 74.56073, 13.9463416 ], [ 74.5603339, 13.9468563 ], [ 74.5595418, 13.9471126 ], [ 74.5591435, 13.9481426 ], [ 74.5582186, 13.9491717 ], [ 74.5576909, 13.9491706 ], [ 74.5574257, 13.9499432 ], [ 74.55637, 13.9500696 ], [ 74.5561067, 13.9498115 ], [ 74.5532063, 13.9487756 ], [ 74.5521511, 13.9486452 ], [ 74.5521522, 13.9481298 ], [ 74.5508334, 13.9478697 ], [ 74.5505711, 13.9470961 ], [ 74.5489884, 13.9469638 ], [ 74.5487242, 13.9470927 ], [ 74.5488521, 13.9488967 ], [ 74.5485868, 13.9496693 ], [ 74.5483225, 13.9499266 ], [ 74.5483214, 13.950442 ], [ 74.547528, 13.9514713 ], [ 74.5469977, 13.9527587 ], [ 74.5467334, 13.9530158 ], [ 74.5462031, 13.9543032 ], [ 74.5456745, 13.9548177 ], [ 74.545541, 13.9558483 ], [ 74.5434305, 13.9557149 ], [ 74.5421118, 13.9553265 ], [ 74.5422407, 13.9566151 ], [ 74.5421088, 13.9568725 ], [ 74.5413182, 13.9563556 ], [ 74.5411814, 13.9586746 ], [ 74.5406505, 13.9602197 ], [ 74.5398574, 13.9609914 ], [ 74.5387985, 13.9627931 ], [ 74.538666, 13.9633083 ], [ 74.5381379, 13.9634357 ], [ 74.5373449, 13.9642072 ], [ 74.5368166, 13.9644639 ], [ 74.5357608, 13.9645913 ], [ 74.5356274, 13.9651063 ], [ 74.5357578, 13.9661373 ], [ 74.5362853, 13.9662668 ], [ 74.5365486, 13.9665249 ], [ 74.5370761, 13.9666553 ], [ 74.5370755, 13.9669129 ], [ 74.5360202, 13.9669109 ], [ 74.53615, 13.9676843 ], [ 74.5362821, 13.967813 ], [ 74.5383934, 13.9676886 ], [ 74.5383944, 13.9671732 ], [ 74.5394496, 13.9673036 ], [ 74.5397138, 13.9671757 ], [ 74.5397126, 13.9676911 ], [ 74.5410313, 13.9680796 ], [ 74.5439338, 13.9680851 ], [ 74.5441969, 13.9684726 ], [ 74.5431415, 13.9684705 ], [ 74.5432719, 13.9689863 ], [ 74.5439307, 13.9696311 ], [ 74.5444582, 13.9697616 ], [ 74.5444598, 13.9689884 ], [ 74.5452511, 13.9691182 ], [ 74.5453823, 13.9692479 ], [ 74.545116, 13.9705357 ], [ 74.5448516, 13.9707929 ], [ 74.5454831, 13.9714479 ], [ 74.5447772, 13.9729408 ], [ 74.5444709, 13.9733084 ], [ 74.5443303, 13.9741782 ], [ 74.5442504, 13.9746837 ], [ 74.5443926, 13.9756009 ], [ 74.5446254, 13.9764625 ], [ 74.5447992, 13.9768742 ], [ 74.5449054, 13.9771231 ], [ 74.5446098, 13.9777555 ], [ 74.5435047, 13.9758664 ], [ 74.5435493, 13.975312 ], [ 74.5436984, 13.973918 ], [ 74.5437241, 13.9729606 ], [ 74.5435729, 13.9721152 ], [ 74.5432456, 13.9714905 ], [ 74.5428927, 13.9713031 ], [ 74.5434012, 13.9705325 ], [ 74.5435337, 13.9700175 ], [ 74.5431394, 13.9695013 ], [ 74.5418206, 13.9692412 ], [ 74.5420854, 13.9687262 ], [ 74.5415577, 13.9687253 ], [ 74.5415567, 13.9692407 ], [ 74.5410288, 13.9692397 ], [ 74.5410273, 13.9700127 ], [ 74.5391808, 13.9697515 ], [ 74.5389185, 13.968978 ], [ 74.5373356, 13.9688457 ], [ 74.5370721, 13.9685875 ], [ 74.5346992, 13.9676814 ], [ 74.5348327, 13.966651 ], [ 74.5343065, 13.9658769 ], [ 74.5341802, 13.9632998 ], [ 74.5336527, 13.9631694 ], [ 74.5333895, 13.9629113 ], [ 74.5320704, 13.9627803 ], [ 74.5319344, 13.9645839 ], [ 74.5316684, 13.9656141 ], [ 74.5316654, 13.9671603 ], [ 74.5308716, 13.9681895 ], [ 74.5306062, 13.9689621 ], [ 74.5292842, 13.970248 ], [ 74.5290194, 13.9707629 ], [ 74.5280942, 13.9717918 ], [ 74.5275662, 13.9719192 ], [ 74.5273018, 13.9721764 ], [ 74.5259822, 13.972303 ], [ 74.5258482, 13.9730759 ], [ 74.5247905, 13.9741046 ], [ 74.5249219, 13.9746202 ], [ 74.5243942, 13.9746192 ], [ 74.5239958, 13.9756491 ], [ 74.5237314, 13.9759063 ], [ 74.5237302, 13.9764217 ], [ 74.5233339, 13.9769362 ], [ 74.5228062, 13.9769352 ], [ 74.5225407, 13.9777079 ], [ 74.5220126, 13.9778351 ], [ 74.5209553, 13.9787355 ], [ 74.5205564, 13.9800231 ], [ 74.5201598, 13.9805378 ], [ 74.519632, 13.980665 ], [ 74.5191033, 13.9810509 ], [ 74.5188378, 13.9818235 ], [ 74.5183099, 13.9819509 ], [ 74.5175169, 13.9825939 ], [ 74.5175157, 13.9831093 ], [ 74.5164596, 13.9833648 ], [ 74.5163262, 13.98388 ], [ 74.5159298, 13.9843947 ], [ 74.5146093, 13.9849074 ], [ 74.5144759, 13.9854225 ], [ 74.5142114, 13.9856797 ], [ 74.5136787, 13.9879978 ], [ 74.5136739, 13.990317 ], [ 74.513705214341286, 13.992535086718751 ], [ 74.5137158, 13.9932849 ], [ 74.5135988, 13.9939147 ], [ 74.5132051, 13.9959344 ], [ 74.5127545, 13.9972669 ], [ 74.5122255, 13.998412 ], [ 74.5118103, 13.99887 ], [ 74.5107589, 13.9995571 ], [ 74.510201, 13.9997653 ], [ 74.5100583, 14.0001609 ], [ 74.5096216, 14.0012227 ], [ 74.5090852, 14.002347 ], [ 74.5088138, 14.0033464 ], [ 74.5089565, 14.0048246 ], [ 74.5089565, 14.0057407 ], [ 74.5088138, 14.0067608 ], [ 74.5085702, 14.0079892 ], [ 74.5082773, 14.0088012 ], [ 74.5075478, 14.0104251 ], [ 74.506918, 14.011695 ], [ 74.5065822, 14.0131108 ], [ 74.5062313, 14.0141101 ], [ 74.5057024, 14.015609 ], [ 74.5050512, 14.0167749 ], [ 74.5032777, 14.0194605 ], [ 74.5020761, 14.0214799 ], [ 74.5017113, 14.0223542 ], [ 74.5010461, 14.0232702 ], [ 74.5007047, 14.0240734 ], [ 74.5005563, 14.0245937 ], [ 74.5007167, 14.0252886 ], [ 74.5010485, 14.0257285 ], [ 74.5014425, 14.0261925 ], [ 74.5011475, 14.0270565 ], [ 74.5008321, 14.0275092 ], [ 74.5003734, 14.0290774 ], [ 74.5003935, 14.0303115 ], [ 74.5004949, 14.0311187 ], [ 74.5005995, 14.0383193 ], [ 74.5001017, 14.0443025 ], [ 74.4990594, 14.0498843 ], [ 74.498204, 14.0536149 ], [ 74.4969069, 14.0587125 ], [ 74.496085561022639, 14.0624 ], [ 74.49604101382387, 14.0626 ], [ 74.495746, 14.0639245 ], [ 74.4947944, 14.0687108 ], [ 74.4938149, 14.0731244 ], [ 74.4923482, 14.0776815 ], [ 74.4903097, 14.0824268 ], [ 74.4878721, 14.0864087 ], [ 74.4877524, 14.0900389 ], [ 74.4875572, 14.0916633 ], [ 74.4870551, 14.0929021 ], [ 74.4860546, 14.0937502 ], [ 74.4853025, 14.0939213 ], [ 74.4852293, 14.0939282 ], [ 74.4851734, 14.093894 ], [ 74.4851634, 14.0938378 ], [ 74.4851581, 14.0937477 ], [ 74.4851086, 14.093638 ], [ 74.4850359, 14.0935191 ], [ 74.4850304, 14.09347 ], [ 74.4850151, 14.0933319 ], [ 74.4849382, 14.0932269 ], [ 74.4847749, 14.0930533 ], [ 74.4847821, 14.0929694 ], [ 74.4847184, 14.0929379 ], [ 74.4847256, 14.0928727 ], [ 74.4846896, 14.0928168 ], [ 74.4846237, 14.0928489 ], [ 74.4844507, 14.0927091 ], [ 74.4843042, 14.0925366 ], [ 74.4843538, 14.0924438 ], [ 74.4842695, 14.0923721 ], [ 74.4838388, 14.0925491 ], [ 74.4837939, 14.0927184 ], [ 74.4834796, 14.09292 ], [ 74.4827779, 14.093299 ], [ 74.4824736, 14.0932652 ], [ 74.4821394, 14.0931491 ], [ 74.4818783, 14.0930845 ], [ 74.4815341, 14.0931394 ], [ 74.481229, 14.0931408 ], [ 74.4810784, 14.0929781 ], [ 74.4807525, 14.0931523 ], [ 74.4806594, 14.0933878 ], [ 74.4805617, 14.0935072 ], [ 74.4804881, 14.0936859 ], [ 74.4805597, 14.0939211 ], [ 74.4804556, 14.093929 ], [ 74.4804377, 14.0940916 ], [ 74.4805728, 14.0941279 ], [ 74.4805923, 14.0941658 ], [ 74.4804686, 14.0942021 ], [ 74.4805125, 14.0943095 ], [ 74.4806623, 14.0944642 ], [ 74.4807583, 14.0946236 ], [ 74.480576, 14.0947894 ], [ 74.4808218, 14.0950735 ], [ 74.4810041, 14.094993 ], [ 74.4811519, 14.095055 ], [ 74.4813084, 14.0951319 ], [ 74.4813573, 14.0952519 ], [ 74.4814614, 14.095244 ], [ 74.4815444, 14.0951698 ], [ 74.4816828, 14.0951382 ], [ 74.4820034, 14.0950924 ], [ 74.4822329, 14.0949819 ], [ 74.4825145, 14.0950703 ], [ 74.4828563, 14.095274 ], [ 74.4828172, 14.0953592 ], [ 74.4828661, 14.095424 ], [ 74.4830694, 14.0954232 ], [ 74.4834376, 14.095204 ], [ 74.4836037, 14.095144 ], [ 74.4838511, 14.095185 ], [ 74.4842775, 14.094983 ], [ 74.4843686, 14.0947904 ], [ 74.4844071, 14.0947563 ], [ 74.484494, 14.0947557 ], [ 74.4846923, 14.0947543 ], [ 74.4849333, 14.0947896 ], [ 74.4850728, 14.0948035 ], [ 74.4854027, 14.0951606 ], [ 74.4856843, 14.095695 ], [ 74.4858299, 14.0961796 ], [ 74.4858372, 14.0962038 ], [ 74.485898, 14.0964157 ], [ 74.4862792, 14.0977449 ], [ 74.4863865, 14.0990493 ], [ 74.4864103, 14.0995623 ], [ 74.4864373, 14.1001457 ], [ 74.4864477, 14.1003708 ], [ 74.4863377, 14.1019738 ], [ 74.4862004, 14.1031111 ], [ 74.4861076, 14.1038421 ], [ 74.4857165, 14.1055933 ], [ 74.4856872, 14.105797 ], [ 74.4855856, 14.1065022 ], [ 74.4853297, 14.1077862 ], [ 74.485113, 14.1092018 ], [ 74.484811, 14.1105202 ], [ 74.4845396, 14.1121486 ], [ 74.4841919, 14.1136687 ], [ 74.4837338, 14.115422 ], [ 74.4834484, 14.117465 ], [ 74.4831609, 14.1187276 ], [ 74.4830005, 14.1197727 ], [ 74.481976, 14.1214138 ], [ 74.4817108, 14.1219285 ], [ 74.4814426, 14.1237317 ], [ 74.481178, 14.123989 ], [ 74.4811758, 14.1250196 ], [ 74.479842, 14.1309434 ], [ 74.4798403, 14.1317166 ], [ 74.4795749, 14.1322312 ], [ 74.4793075, 14.1337769 ], [ 74.4790421, 14.1342917 ], [ 74.4791729, 14.1350649 ], [ 74.4786449, 14.1350638 ], [ 74.4788243, 14.1365922 ], [ 74.4788213, 14.1378806 ], [ 74.4785567, 14.1381378 ], [ 74.478424, 14.1386528 ], [ 74.4776317, 14.1386511 ], [ 74.4777622, 14.1391667 ], [ 74.4778945, 14.1392954 ], [ 74.4784223, 14.1394259 ], [ 74.478421, 14.1399413 ], [ 74.4771008, 14.1399384 ], [ 74.4769659, 14.1409688 ], [ 74.4772294, 14.141227 ], [ 74.4773602, 14.1420004 ], [ 74.4778888, 14.1417439 ], [ 74.4777535, 14.143032 ], [ 74.4780164, 14.1435479 ], [ 74.478015, 14.1440633 ], [ 74.4774853, 14.1448352 ], [ 74.4774834, 14.1456082 ], [ 74.4772188, 14.1458653 ], [ 74.4772182, 14.1461231 ], [ 74.4774817, 14.1463812 ], [ 74.4774794, 14.147412 ], [ 74.4772141, 14.1479269 ], [ 74.4772124, 14.1486999 ], [ 74.4769464, 14.1494723 ], [ 74.4769447, 14.1502453 ], [ 74.4764112, 14.1525634 ], [ 74.476146, 14.1530783 ], [ 74.4758754, 14.155912 ], [ 74.4753454, 14.1566839 ], [ 74.4753443, 14.1571993 ], [ 74.4750797, 14.1574564 ], [ 74.475075, 14.1595178 ], [ 74.4748096, 14.1600326 ], [ 74.4749409, 14.1605482 ], [ 74.4744129, 14.1605471 ], [ 74.4745403, 14.1623513 ], [ 74.4740103, 14.1631231 ], [ 74.4740067, 14.1646692 ], [ 74.4734751, 14.166214 ], [ 74.4734709, 14.1680179 ], [ 74.4726731, 14.1703354 ], [ 74.4726714, 14.1711084 ], [ 74.4721379, 14.1734262 ], [ 74.4718725, 14.173941 ], [ 74.4718708, 14.174714 ], [ 74.4713379, 14.1767743 ], [ 74.4708071, 14.177804 ], [ 74.4708054, 14.178577 ], [ 74.4705384, 14.1798648 ], [ 74.4700071, 14.1811519 ], [ 74.4700041, 14.1824404 ], [ 74.4697389, 14.1829552 ], [ 74.469737, 14.1837282 ], [ 74.4686716, 14.1875912 ], [ 74.4686667, 14.1896525 ], [ 74.4684021, 14.1899095 ], [ 74.4681362, 14.190682 ], [ 74.467606, 14.1914539 ], [ 74.4660081, 14.1971193 ], [ 74.4661388, 14.1978927 ], [ 74.4656106, 14.1978916 ], [ 74.4654768, 14.1984066 ], [ 74.4650799, 14.1989211 ], [ 74.4645516, 14.1989199 ], [ 74.4642851, 14.19995 ], [ 74.4632277, 14.2003338 ], [ 74.4626983, 14.2008479 ], [ 74.4603205, 14.2011002 ], [ 74.4600566, 14.2009713 ], [ 74.4599272, 14.1996825 ], [ 74.4595325, 14.1991664 ], [ 74.4579495, 14.1985181 ], [ 74.4576853, 14.1985175 ], [ 74.4568916, 14.1990311 ], [ 74.4558332, 14.1998016 ], [ 74.4539844, 14.1997974 ], [ 74.4534552, 14.2001832 ], [ 74.4535843, 14.2012142 ], [ 74.4542409, 14.2030195 ], [ 74.4534484, 14.2030178 ], [ 74.4531806, 14.2045633 ], [ 74.4526524, 14.2045619 ], [ 74.4525155, 14.2063656 ], [ 74.4527784, 14.2068814 ], [ 74.4527771, 14.2073968 ], [ 74.4526448, 14.2076541 ], [ 74.4515881, 14.2077801 ], [ 74.4505299, 14.2084224 ], [ 74.450395, 14.2094528 ], [ 74.450789, 14.2104844 ], [ 74.4513175, 14.2104855 ], [ 74.4513167, 14.2107433 ], [ 74.4507885, 14.210742 ], [ 74.4505212, 14.2120298 ], [ 74.4491999, 14.2122844 ], [ 74.4493296, 14.2130578 ], [ 74.4495932, 14.2133161 ], [ 74.4498554, 14.2140897 ], [ 74.4498523, 14.2153781 ], [ 74.4494547, 14.2161502 ], [ 74.4481339, 14.2161472 ], [ 74.4479977, 14.217693 ], [ 74.4476006, 14.2182075 ], [ 74.4468083, 14.2182056 ], [ 74.4465409, 14.2194934 ], [ 74.4457488, 14.2193622 ], [ 74.445484, 14.2196193 ], [ 74.4449553, 14.2197474 ], [ 74.4449542, 14.2202628 ], [ 74.4441614, 14.2203893 ], [ 74.4436322, 14.220775 ], [ 74.4438924, 14.2223218 ], [ 74.4433642, 14.2223205 ], [ 74.443363, 14.2228359 ], [ 74.4428346, 14.2228347 ], [ 74.442965, 14.2233503 ], [ 74.4428327, 14.2236078 ], [ 74.4415114, 14.2238623 ], [ 74.4413763, 14.2248928 ], [ 74.4416397, 14.2251509 ], [ 74.4416378, 14.2259238 ], [ 74.4421649, 14.2264406 ], [ 74.4424156, 14.226473 ], [ 74.4426886, 14.2266181 ], [ 74.4427133, 14.2268698 ], [ 74.4427466, 14.2270871 ], [ 74.4429322, 14.2273908 ], [ 74.4426522, 14.2284193 ], [ 74.4423292, 14.2292321 ], [ 74.4405605, 14.2350627 ], [ 74.4397646, 14.237535 ], [ 74.4363175, 14.2478293 ], [ 74.431473, 14.263029 ], [ 74.4271253, 14.276151 ], [ 74.424641, 14.2840961 ], [ 74.4241751, 14.2858416 ], [ 74.4235851, 14.2893325 ], [ 74.4234919, 14.2911984 ], [ 74.4234876, 14.2918678 ], [ 74.423758, 14.292529 ], [ 74.424091, 14.2944066 ], [ 74.4226372, 14.2987417 ], [ 74.4219505, 14.3007895 ], [ 74.4210319, 14.3004168 ], [ 74.4198093, 14.3018749 ], [ 74.4191913, 14.3033459 ], [ 74.4185733, 14.3058324 ], [ 74.4175791, 14.30772 ], [ 74.4158998, 14.3114952 ], [ 74.4141096, 14.3151695 ], [ 74.4127662, 14.3180008 ], [ 74.4126654, 14.3191723 ], [ 74.4127997, 14.319872 ], [ 74.4130013, 14.3210598 ], [ 74.4130181, 14.3253718 ], [ 74.4126486, 14.3281379 ], [ 74.4122959, 14.3298951 ], [ 74.4113051, 14.3330679 ], [ 74.4104655, 14.336078 ], [ 74.4094914, 14.341675 ], [ 74.4074426, 14.3491753 ], [ 74.4068885, 14.3519086 ], [ 74.4058977, 14.3565453 ], [ 74.4053099, 14.3570659 ], [ 74.4050412, 14.3574889 ], [ 74.4052091, 14.3579444 ], [ 74.4056122, 14.3586114 ], [ 74.4058305, 14.3591483 ], [ 74.4059816, 14.3595713 ], [ 74.4061496, 14.3598153 ], [ 74.4051755, 14.3626949 ], [ 74.4044227, 14.3665587 ], [ 74.4036669, 14.3674053 ], [ 74.4034523, 14.3677685 ], [ 74.4035419, 14.3683453 ], [ 74.4028193, 14.3684139 ], [ 74.402676, 14.3689112 ], [ 74.4030365, 14.369844 ], [ 74.4025489, 14.3695644 ], [ 74.4030097, 14.3702743 ], [ 74.4033241, 14.3707503 ], [ 74.4037071, 14.3709285 ], [ 74.4043695, 14.3706826 ], [ 74.4047557, 14.3707639 ], [ 74.4049184, 14.3721154 ], [ 74.4047557, 14.3731878 ], [ 74.404084, 14.3755141 ], [ 74.4016901, 14.3842069 ], [ 74.4010217, 14.387506 ], [ 74.400504, 14.3897279 ], [ 74.3999386, 14.3914712 ], [ 74.3991071, 14.3943077 ], [ 74.3979873, 14.3991858 ], [ 74.3946026, 14.4120358 ], [ 74.3937786, 14.4145712 ], [ 74.393019, 14.4164307 ], [ 74.3926682, 14.4172464 ], [ 74.3928672, 14.4176039 ], [ 74.3927438, 14.4177639 ], [ 74.3924285, 14.4180296 ], [ 74.3905877, 14.4187288 ], [ 74.3889633, 14.4186239 ], [ 74.3874473, 14.4179247 ], [ 74.3859416, 14.4180702 ], [ 74.3845235, 14.4189036 ], [ 74.3839099, 14.4199174 ], [ 74.3838016, 14.4206165 ], [ 74.3825021, 14.4211409 ], [ 74.3826104, 14.4224344 ], [ 74.3816672, 14.4232075 ], [ 74.3810782, 14.4237405 ], [ 74.3810514, 14.4242746 ], [ 74.3826465, 14.4242522 ], [ 74.3838377, 14.4244969 ], [ 74.3845235, 14.4257554 ], [ 74.3845957, 14.4275033 ], [ 74.3840904, 14.4290414 ], [ 74.3832602, 14.4297406 ], [ 74.3827548, 14.4297755 ], [ 74.3815997, 14.4299503 ], [ 74.3805169, 14.4298455 ], [ 74.3796867, 14.4301251 ], [ 74.3803725, 14.4308942 ], [ 74.3809139, 14.4316982 ], [ 74.3814915, 14.4314185 ], [ 74.3826104, 14.4314535 ], [ 74.383188, 14.4320128 ], [ 74.3835128, 14.433481 ], [ 74.3832241, 14.4338655 ], [ 74.3825743, 14.4342151 ], [ 74.3821051, 14.434285 ], [ 74.3819607, 14.4359629 ], [ 74.3821412, 14.4376758 ], [ 74.3826104, 14.4379904 ], [ 74.3823578, 14.4395983 ], [ 74.3797589, 14.447673 ], [ 74.379209522807386, 14.449234529687502 ], [ 74.379209522807372, 14.449234529687502 ], [ 74.3725036, 14.4682952 ], [ 74.3662589, 14.4836033 ], [ 74.3631908, 14.491222 ], [ 74.3584794, 14.5007229 ], [ 74.3586725, 14.5003905 ], [ 74.3583077, 14.5016992 ], [ 74.3560117, 14.5013668 ], [ 74.3553465, 14.5015123 ], [ 74.3541307, 14.5027195 ], [ 74.354239, 14.5046764 ], [ 74.3541664, 14.5058956 ], [ 74.3541449, 14.5065811 ], [ 74.3545097, 14.5070796 ], [ 74.3552136, 14.5082758 ], [ 74.3562243, 14.5093242 ], [ 74.3570184, 14.5096387 ], [ 74.3587149, 14.5097085 ], [ 74.3588954, 14.5105822 ], [ 74.3589676, 14.5112811 ], [ 74.3589676, 14.511945 ], [ 74.3585344, 14.5133777 ], [ 74.3585705, 14.5139019 ], [ 74.3584261, 14.5151249 ], [ 74.3584622, 14.515684 ], [ 74.3588593, 14.5170818 ], [ 74.359779, 14.5183114 ], [ 74.3579259, 14.5199797 ], [ 74.3561167, 14.5221289 ], [ 74.3550347, 14.5219375 ], [ 74.3537928, 14.521614 ], [ 74.3521661, 14.5208387 ], [ 74.3510687, 14.5211462 ], [ 74.3496826, 14.5211462 ], [ 74.3488264, 14.5205276 ], [ 74.3478469, 14.5207036 ], [ 74.3463061, 14.5208288 ], [ 74.3454955, 14.5208946 ], [ 74.3445806, 14.5206546 ], [ 74.3439814, 14.5202425 ], [ 74.3440051, 14.5201597 ], [ 74.3442827, 14.5191894 ], [ 74.3439073, 14.5180712 ], [ 74.3433875, 14.5177357 ], [ 74.3431854, 14.5169809 ], [ 74.34281, 14.5163939 ], [ 74.3423191, 14.515723 ], [ 74.3417704, 14.5142973 ], [ 74.3408752, 14.51385 ], [ 74.3396624, 14.5137941 ], [ 74.3393447, 14.5143811 ], [ 74.339056, 14.515052 ], [ 74.3385073, 14.5154155 ], [ 74.337641, 14.5161702 ], [ 74.3377565, 14.5168132 ], [ 74.3381608, 14.5172325 ], [ 74.337872, 14.5175959 ], [ 74.3368613, 14.518183 ], [ 74.3361972, 14.5183787 ], [ 74.3356774, 14.5183228 ], [ 74.3348812, 14.5180072 ], [ 74.3345111, 14.518123 ], [ 74.3335189, 14.5185918 ], [ 74.3333445, 14.5182059 ], [ 74.3329235, 14.5180885 ], [ 74.3327768, 14.5177118 ], [ 74.3323566, 14.5176519 ], [ 74.3318657, 14.5176239 ], [ 74.3310282, 14.5177078 ], [ 74.3305373, 14.5176239 ], [ 74.3301042, 14.5170648 ], [ 74.330133, 14.5164498 ], [ 74.3296133, 14.5160305 ], [ 74.3286892, 14.5161423 ], [ 74.3277363, 14.5159746 ], [ 74.3270144, 14.5153316 ], [ 74.3260903, 14.5148564 ], [ 74.3255416, 14.5154993 ], [ 74.3254839, 14.5163659 ], [ 74.325455, 14.5171487 ], [ 74.3257438, 14.5173723 ], [ 74.326002, 14.5180517 ], [ 74.3257911, 14.5184952 ], [ 74.3254109, 14.5188672 ], [ 74.3244732, 14.5192453 ], [ 74.3236358, 14.519413 ], [ 74.322868, 14.519296 ], [ 74.3223941, 14.5189937 ], [ 74.3222642, 14.5187423 ], [ 74.3221631, 14.5185464 ], [ 74.3221631, 14.5183228 ], [ 74.3221631, 14.5180432 ], [ 74.3223652, 14.5175121 ], [ 74.3220764, 14.5175121 ], [ 74.3217877, 14.5175959 ], [ 74.3218165, 14.5179873 ], [ 74.3219898, 14.5183787 ], [ 74.3219032, 14.5187421 ], [ 74.3216874, 14.5191941 ], [ 74.3212362, 14.5194061 ], [ 74.3205554, 14.5194663 ], [ 74.3198504, 14.5194594 ], [ 74.3189643, 14.5194626 ], [ 74.3184423, 14.5192645 ], [ 74.3182194, 14.5187054 ], [ 74.3180914, 14.5190496 ], [ 74.3177697, 14.5192135 ], [ 74.3175428, 14.5193291 ], [ 74.3168497, 14.5191335 ], [ 74.3163299, 14.5192453 ], [ 74.3155214, 14.520056 ], [ 74.3146262, 14.5213139 ], [ 74.3135578, 14.5217612 ], [ 74.3120273, 14.5216494 ], [ 74.3103813, 14.5211741 ], [ 74.3099193, 14.5213698 ], [ 74.3104391, 14.5219289 ], [ 74.3107278, 14.5224321 ], [ 74.3103813, 14.5227116 ], [ 74.3102658, 14.5236341 ], [ 74.3105257, 14.5243609 ], [ 74.3112187, 14.52492 ], [ 74.3121717, 14.5246684 ], [ 74.3141353, 14.52492 ], [ 74.3151171, 14.5258425 ], [ 74.315377, 14.5285819 ], [ 74.3150249, 14.530781 ], [ 74.3142807, 14.5313081 ], [ 74.3141064, 14.5309579 ], [ 74.313269, 14.5310977 ], [ 74.3123161, 14.5313772 ], [ 74.3118829, 14.5317965 ], [ 74.3112765, 14.5325233 ], [ 74.3110166, 14.5335296 ], [ 74.3113631, 14.5345639 ], [ 74.3107206, 14.5349429 ], [ 74.310846, 14.5350368 ], [ 74.310814, 14.5351635 ], [ 74.3110159, 14.5352458 ], [ 74.3110825, 14.5351147 ], [ 74.3112663, 14.5353006 ], [ 74.3112619, 14.5354208 ], [ 74.3112931, 14.5354548 ], [ 74.3112817, 14.5354848 ], [ 74.3112195, 14.5354702 ], [ 74.311012, 14.5357188 ], [ 74.3108991, 14.5360995 ], [ 74.3106593, 14.5367465 ], [ 74.3105401, 14.536875 ], [ 74.3104934, 14.5372572 ], [ 74.3108633, 14.537367 ], [ 74.3108663, 14.5374815 ], [ 74.3110416, 14.5375155 ], [ 74.3110188, 14.5376958 ], [ 74.3112965, 14.5379579 ], [ 74.3114919, 14.5379046 ], [ 74.3114007, 14.5380803 ], [ 74.3112761, 14.5380546 ], [ 74.3111828, 14.5380654 ], [ 74.3110921, 14.5382281 ], [ 74.3110275, 14.5383935 ], [ 74.3112131, 14.5384482 ], [ 74.3111228, 14.5385513 ], [ 74.3111062, 14.5384825 ], [ 74.3109427, 14.5384663 ], [ 74.3108047, 14.5385337 ], [ 74.3105782, 14.5387223 ], [ 74.3105692, 14.5389017 ], [ 74.3106706, 14.539076 ], [ 74.3108763, 14.5391443 ], [ 74.3111462, 14.5391329 ], [ 74.3112154, 14.539044 ], [ 74.3112697, 14.5392338 ], [ 74.3113548, 14.5394595 ], [ 74.3119083, 14.5396336 ], [ 74.3121655, 14.5398336 ], [ 74.3124296, 14.5397606 ], [ 74.3132022, 14.5400071 ], [ 74.3134199, 14.5399305 ], [ 74.313562, 14.5401395 ], [ 74.3137537, 14.5413778 ], [ 74.3136821, 14.5429293 ], [ 74.3131226, 14.5451473 ], [ 74.3120639, 14.547737 ], [ 74.31106, 14.5506466 ], [ 74.3098615, 14.5531516 ], [ 74.3062969, 14.5614511 ], [ 74.3046637, 14.5652537 ], [ 74.2997835, 14.5760976 ], [ 74.2964916, 14.5835873 ], [ 74.2931707, 14.5914401 ], [ 74.2912937, 14.5954922 ], [ 74.2906296, 14.5969453 ], [ 74.2902872, 14.5982534 ], [ 74.2900809, 14.5990412 ], [ 74.2902542, 14.599628 ], [ 74.2908028, 14.5997957 ], [ 74.2907562, 14.6002805 ], [ 74.2912954, 14.6009707 ], [ 74.2888197, 14.603185 ], [ 74.287602, 14.6049611 ], [ 74.2869577, 14.6050652 ], [ 74.2854056, 14.6061131 ], [ 74.2841422, 14.607161 ], [ 74.2833842, 14.6082088 ], [ 74.2826262, 14.6090122 ], [ 74.281796, 14.6093964 ], [ 74.2817283, 14.6103794 ], [ 74.2820532, 14.6109731 ], [ 74.2807537, 14.6103794 ], [ 74.2802845, 14.6107985 ], [ 74.2798758, 14.6109841 ], [ 74.2793466, 14.6109826 ], [ 74.2794751, 14.6120136 ], [ 74.2793425, 14.6122708 ], [ 74.2785479, 14.612526 ], [ 74.2786755, 14.6138148 ], [ 74.2789556, 14.6154665 ], [ 74.2787542, 14.6158069 ], [ 74.2786623, 14.6168572 ], [ 74.278832, 14.6173234 ], [ 74.2783889, 14.6179952 ], [ 74.277601, 14.618707 ], [ 74.2773357, 14.6189639 ], [ 74.2765358, 14.6207651 ], [ 74.2760049, 14.6212788 ], [ 74.2750733, 14.6230796 ], [ 74.2745438, 14.6232064 ], [ 74.2740132, 14.6235916 ], [ 74.273877, 14.6246218 ], [ 74.2733453, 14.6253931 ], [ 74.2733436, 14.6259085 ], [ 74.2732107, 14.6261657 ], [ 74.2726812, 14.6262926 ], [ 74.2724156, 14.6265494 ], [ 74.2718868, 14.6264194 ], [ 74.2718885, 14.625904 ], [ 74.2713597, 14.625773 ], [ 74.271096, 14.6255146 ], [ 74.2692433, 14.6256381 ], [ 74.2702945, 14.627831 ], [ 74.2708237, 14.6278327 ], [ 74.2712189, 14.6282209 ], [ 74.2712181, 14.6284785 ], [ 74.2709526, 14.6287354 ], [ 74.2709509, 14.6292506 ], [ 74.2710832, 14.6293795 ], [ 74.2718772, 14.629382 ], [ 74.2725411, 14.6284827 ], [ 74.2742655, 14.6273281 ], [ 74.2758528, 14.6274623 ], [ 74.2757218, 14.6269465 ], [ 74.2766496, 14.6265624 ], [ 74.2774436, 14.6265649 ], [ 74.2781058, 14.626181 ], [ 74.2782404, 14.625666 ], [ 74.2798286, 14.6255417 ], [ 74.2804874, 14.6261884 ], [ 74.2808828, 14.6268333 ], [ 74.2814124, 14.6267065 ], [ 74.2820677, 14.6285122 ], [ 74.282859, 14.6292876 ], [ 74.2836488, 14.6305783 ], [ 74.2839034, 14.6336711 ], [ 74.2844209, 14.6372801 ], [ 74.2838749, 14.6424316 ], [ 74.2828046, 14.6460357 ], [ 74.2822737, 14.6465494 ], [ 74.2821376, 14.6478372 ], [ 74.2794895, 14.6483445 ], [ 74.2804118, 14.649378 ], [ 74.280674, 14.6501517 ], [ 74.2814655, 14.6509272 ], [ 74.2811932, 14.6532455 ], [ 74.2810605, 14.6535027 ], [ 74.2805313, 14.653501 ], [ 74.2805286, 14.654274 ], [ 74.2799994, 14.6542723 ], [ 74.2801297, 14.6547881 ], [ 74.2797305, 14.6555598 ], [ 74.2786727, 14.655299 ], [ 74.2788012, 14.6563299 ], [ 74.2782703, 14.6568437 ], [ 74.2782669, 14.6578743 ], [ 74.2787936, 14.658649 ], [ 74.2787929, 14.6589066 ], [ 74.2783946, 14.6594207 ], [ 74.2773364, 14.6592882 ], [ 74.2770726, 14.6590296 ], [ 74.276014, 14.6590264 ], [ 74.2752187, 14.6594108 ], [ 74.275217, 14.6599261 ], [ 74.2765404, 14.6599302 ], [ 74.2762739, 14.6604447 ], [ 74.277333, 14.6603188 ], [ 74.2779928, 14.6607078 ], [ 74.2779862, 14.662769 ], [ 74.277719, 14.6635412 ], [ 74.2771879, 14.6640549 ], [ 74.2767889, 14.6648266 ], [ 74.2749361, 14.6648208 ], [ 74.2750663, 14.6653366 ], [ 74.2758586, 14.6658544 ], [ 74.2762533, 14.6667571 ], [ 74.2767821, 14.6668879 ], [ 74.2769114, 14.6676613 ], [ 74.2774383, 14.668436 ], [ 74.2773047, 14.6689508 ], [ 74.2762451, 14.6692052 ], [ 74.2763744, 14.6699786 ], [ 74.2766383, 14.6702371 ], [ 74.2767685, 14.6710105 ], [ 74.2780915, 14.671143 ], [ 74.2782238, 14.6710151 ], [ 74.2783583, 14.6705002 ], [ 74.2799459, 14.6706335 ], [ 74.2803394, 14.6715369 ], [ 74.2804719, 14.6716658 ], [ 74.2810009, 14.6717966 ], [ 74.2808564, 14.6754035 ], [ 74.2803243, 14.6761748 ], [ 74.280061198277906, 14.677584251171876 ], [ 74.2796513, 14.6797801 ], [ 74.2788564, 14.6800353 ], [ 74.278721, 14.6808079 ], [ 74.2781892, 14.6815792 ], [ 74.277522, 14.6833808 ], [ 74.2769926, 14.6833791 ], [ 74.2768564, 14.6844093 ], [ 74.2765908, 14.6846662 ], [ 74.2763236, 14.6854384 ], [ 74.2757925, 14.6859519 ], [ 74.2752597, 14.686981 ], [ 74.2749907, 14.6882685 ], [ 74.2739252, 14.6903265 ], [ 74.2731285, 14.6910969 ], [ 74.2715309, 14.6939262 ], [ 74.2707343, 14.6946968 ], [ 74.2707318, 14.6954698 ], [ 74.2701998, 14.6962411 ], [ 74.2699325, 14.6970131 ], [ 74.2694014, 14.6975268 ], [ 74.2680718, 14.6993263 ], [ 74.2672708, 14.7013851 ], [ 74.2667398, 14.7018988 ], [ 74.2666061, 14.7024136 ], [ 74.2660766, 14.7024119 ], [ 74.2658093, 14.703184 ], [ 74.2652795, 14.7033108 ], [ 74.265014, 14.7035677 ], [ 74.264484, 14.7036952 ], [ 74.2644823, 14.7042105 ], [ 74.2631595, 14.7039487 ], [ 74.2632941, 14.7031761 ], [ 74.2631631, 14.7029181 ], [ 74.262898, 14.7030456 ], [ 74.2623686, 14.7030439 ], [ 74.2621034, 14.7031723 ], [ 74.2610367, 14.7054879 ], [ 74.2599766, 14.7058706 ], [ 74.2583882, 14.7058655 ], [ 74.2575957, 14.7053477 ], [ 74.2557428, 14.7053416 ], [ 74.2554776, 14.7054701 ], [ 74.255475, 14.7062431 ], [ 74.2560053, 14.7059871 ], [ 74.256001, 14.7072755 ], [ 74.2575884, 14.7075382 ], [ 74.2575901, 14.7070228 ], [ 74.2581191, 14.707153 ], [ 74.2583829, 14.7074114 ], [ 74.2597048, 14.7079309 ], [ 74.2601002, 14.7083191 ], [ 74.2604926, 14.7098665 ], [ 74.2615523, 14.7096121 ], [ 74.2616825, 14.7101279 ], [ 74.2618148, 14.7102568 ], [ 74.2639318, 14.7105212 ], [ 74.2641956, 14.7107795 ], [ 74.2652533, 14.7111698 ], [ 74.265255, 14.7106546 ], [ 74.2679027, 14.7105336 ], [ 74.2684317, 14.7106646 ], [ 74.2684334, 14.7101492 ], [ 74.2689628, 14.7101509 ], [ 74.2689654, 14.7093779 ], [ 74.2702897, 14.7091245 ], [ 74.2706821, 14.710414 ], [ 74.2708116, 14.711445 ], [ 74.2739883, 14.711455 ], [ 74.2739856, 14.712228 ], [ 74.2798093, 14.7123745 ], [ 74.281396, 14.7128948 ], [ 74.2827171, 14.713672 ], [ 74.2832465, 14.7136735 ], [ 74.2838637, 14.7144078 ], [ 74.2845672, 14.7145799 ], [ 74.2845655, 14.7150952 ], [ 74.2848303, 14.7150961 ], [ 74.2848286, 14.7156113 ], [ 74.2854861, 14.7164457 ], [ 74.2864131, 14.7167754 ], [ 74.2887945, 14.7171696 ], [ 74.2887936, 14.7174272 ], [ 74.2891474, 14.7177737 ], [ 74.2898501, 14.7182034 ], [ 74.2899382, 14.7188067 ], [ 74.2911705, 14.7192382 ], [ 74.2911695, 14.7194958 ], [ 74.2914343, 14.7194966 ], [ 74.2914336, 14.7197544 ], [ 74.2909045, 14.7196234 ], [ 74.2906405, 14.7193649 ], [ 74.2901111, 14.7193633 ], [ 74.2898467, 14.7192341 ], [ 74.2896751, 14.7182906 ], [ 74.2890567, 14.7179434 ], [ 74.2882638, 14.717554 ], [ 74.2879998, 14.7172955 ], [ 74.2864114, 14.7172906 ], [ 74.2853538, 14.7169012 ], [ 74.2842982, 14.7158674 ], [ 74.2843922, 14.7146671 ], [ 74.283821, 14.7145646 ], [ 74.2824515, 14.7139288 ], [ 74.281659, 14.713411 ], [ 74.2798076, 14.7128899 ], [ 74.2774251, 14.7128825 ], [ 74.2739809, 14.7136448 ], [ 74.2708034, 14.7138924 ], [ 74.2697458, 14.713503 ], [ 74.2696078, 14.7150487 ], [ 74.2700042, 14.7154359 ], [ 74.2705332, 14.7155669 ], [ 74.270265, 14.7165966 ], [ 74.2697356, 14.7165951 ], [ 74.2695976, 14.7181405 ], [ 74.2697299, 14.7182692 ], [ 74.2705237, 14.7184011 ], [ 74.270522, 14.7189164 ], [ 74.271051, 14.7190464 ], [ 74.2711826, 14.7191762 ], [ 74.2711773, 14.7207221 ], [ 74.2714404, 14.7212382 ], [ 74.2714302, 14.7243303 ], [ 74.2710284, 14.725875 ], [ 74.2704997, 14.7256156 ], [ 74.2710335, 14.7243289 ], [ 74.2697089, 14.7245824 ], [ 74.2698433, 14.7238099 ], [ 74.2701091, 14.7235531 ], [ 74.2702444, 14.7227805 ], [ 74.2665398, 14.7222535 ], [ 74.2668033, 14.7226404 ], [ 74.2683912, 14.7227746 ], [ 74.2682567, 14.7232896 ], [ 74.2675927, 14.7240604 ], [ 74.2667989, 14.7239286 ], [ 74.2662686, 14.7241845 ], [ 74.2646755, 14.7255971 ], [ 74.264539, 14.7266274 ], [ 74.2637415, 14.7276555 ], [ 74.2636069, 14.728428 ], [ 74.2628135, 14.7281679 ], [ 74.262948, 14.7273953 ], [ 74.2636116, 14.7270105 ], [ 74.2638777, 14.7266253 ], [ 74.2633482, 14.7266236 ], [ 74.263482, 14.7261087 ], [ 74.2637475, 14.7258519 ], [ 74.2640148, 14.7250796 ], [ 74.2640174, 14.7243068 ], [ 74.2644202, 14.7227621 ], [ 74.2662733, 14.722768 ], [ 74.2664103, 14.7212223 ], [ 74.2662794, 14.7209644 ], [ 74.2660142, 14.7210919 ], [ 74.26522, 14.7210893 ], [ 74.2649556, 14.7209602 ], [ 74.2648263, 14.719929 ], [ 74.2650919, 14.7196722 ], [ 74.2652264, 14.7191573 ], [ 74.265756, 14.719159 ], [ 74.2666906, 14.7165854 ], [ 74.2669562, 14.7163286 ], [ 74.2670907, 14.7158135 ], [ 74.2662975, 14.7155535 ], [ 74.2657723, 14.7142636 ], [ 74.2644495, 14.7140016 ], [ 74.2643371, 14.7124008 ], [ 74.2640492, 14.7122782 ], [ 74.263694, 14.7122772 ], [ 74.2636297, 14.7124432 ], [ 74.2636511, 14.7131489 ], [ 74.2635867, 14.7137092 ], [ 74.2635438, 14.7147469 ], [ 74.2633722, 14.716428 ], [ 74.2629645, 14.7175694 ], [ 74.2622564, 14.7188354 ], [ 74.2615053, 14.7203919 ], [ 74.2591665, 14.7241482 ], [ 74.2579648, 14.7258915 ], [ 74.2549822, 14.7303741 ], [ 74.2525146, 14.7333416 ], [ 74.2512057, 14.7345868 ], [ 74.250209, 14.7352726 ], [ 74.2498442, 14.7352726 ], [ 74.2496607, 14.7351471 ], [ 74.2495105, 14.7353546 ], [ 74.2494891, 14.7357281 ], [ 74.249532, 14.7361432 ], [ 74.2498538, 14.7361432 ], [ 74.250004, 14.7362677 ], [ 74.250004, 14.7365167 ], [ 74.2498109, 14.7368487 ], [ 74.2497465, 14.7370977 ], [ 74.2497895, 14.7372222 ], [ 74.2500255, 14.7372222 ], [ 74.2501972, 14.737409 ], [ 74.2502615, 14.7376373 ], [ 74.2501757, 14.7381561 ], [ 74.2498753, 14.7385711 ], [ 74.2485567, 14.7395267 ], [ 74.2427846, 14.7437807 ], [ 74.2407558, 14.7452323 ], [ 74.237623, 14.7470791 ], [ 74.2365715, 14.7475149 ], [ 74.2353914, 14.7478884 ], [ 74.2336007, 14.7480762 ], [ 74.2326662, 14.7478469 ], [ 74.2317221, 14.7474941 ], [ 74.2311642, 14.7470376 ], [ 74.2302619, 14.7462221 ], [ 74.2299233, 14.7457101 ], [ 74.2293943, 14.7455799 ], [ 74.2293969, 14.7448069 ], [ 74.2301913, 14.7448095 ], [ 74.230062, 14.7437785 ], [ 74.2297982, 14.74352 ], [ 74.2299347, 14.7424898 ], [ 74.2288757, 14.7424864 ], [ 74.2290067, 14.7427443 ], [ 74.229005, 14.7432597 ], [ 74.2282079, 14.7440301 ], [ 74.2280732, 14.7448026 ], [ 74.2275446, 14.7445432 ], [ 74.2276801, 14.743513 ], [ 74.2280593, 14.742269 ], [ 74.2283211, 14.7418281 ], [ 74.2285689, 14.7413944 ], [ 74.2286601, 14.7410779 ], [ 74.2284871, 14.7399084 ], [ 74.2284899, 14.7391354 ], [ 74.2279622, 14.7386183 ], [ 74.2275682, 14.7378441 ], [ 74.2280978, 14.7378458 ], [ 74.2282333, 14.7368156 ], [ 74.2278385, 14.7362991 ], [ 74.2257209, 14.7361626 ], [ 74.2254571, 14.7359041 ], [ 74.2228095, 14.7358952 ], [ 74.2225451, 14.7357659 ], [ 74.2222851, 14.7344767 ], [ 74.2209617, 14.7343431 ], [ 74.2206965, 14.7344714 ], [ 74.2206946, 14.7349868 ], [ 74.2188402, 14.7353665 ], [ 74.2172516, 14.7353612 ], [ 74.215135, 14.7349679 ], [ 74.2151395, 14.7336797 ], [ 74.2119636, 14.7334113 ], [ 74.2119672, 14.7323805 ], [ 74.2101144, 14.732245 ], [ 74.2098492, 14.7323733 ], [ 74.2095818, 14.7331454 ], [ 74.2087865, 14.7334004 ], [ 74.2089175, 14.7336585 ], [ 74.2092271, 14.7359875 ], [ 74.2088905, 14.7374892 ], [ 74.2084833, 14.7373748 ], [ 74.2072796, 14.7375071 ], [ 74.206296, 14.7373395 ], [ 74.2048581, 14.7364926 ], [ 74.2048401, 14.7362404 ], [ 74.2051319, 14.7360513 ], [ 74.2048079, 14.735448 ], [ 74.2041159, 14.7352635 ], [ 74.2032823, 14.7342993 ], [ 74.2029084, 14.7333634 ], [ 74.2030978, 14.7323503 ], [ 74.2031849, 14.7315518 ], [ 74.203878, 14.7305951 ], [ 74.2045292, 14.7304062 ], [ 74.2050625, 14.7294734 ], [ 74.2056193, 14.7294361 ], [ 74.2061547, 14.7288114 ], [ 74.2058274, 14.7284026 ], [ 74.2062759, 14.7262433 ], [ 74.2066332, 14.7258292 ], [ 74.206837, 14.7246743 ], [ 74.2075462, 14.7228719 ], [ 74.2073842, 14.7223707 ], [ 74.2080998, 14.7207478 ], [ 74.2085998, 14.7204127 ], [ 74.2082672, 14.7189516 ], [ 74.2086427, 14.7182782 ], [ 74.2083916, 14.7173982 ], [ 74.2080451, 14.7181277 ], [ 74.206867, 14.7186362 ], [ 74.2049702, 14.7186372 ], [ 74.2030615, 14.7195919 ], [ 74.2009147, 14.7208786 ], [ 74.1999587, 14.7220148 ], [ 74.1990683, 14.7233482 ], [ 74.1967412, 14.7244668 ], [ 74.1942714, 14.7251683 ], [ 74.1929432, 14.726042 ], [ 74.1923595, 14.7265006 ], [ 74.1925687, 14.7272633 ], [ 74.1934507, 14.7280651 ], [ 74.1938337, 14.7287906 ], [ 74.1945804, 14.7297027 ], [ 74.1947306, 14.7308088 ], [ 74.1940396, 14.7316856 ], [ 74.1932543, 14.7324306 ], [ 74.1938347, 14.7334101 ], [ 74.1932285, 14.7346635 ], [ 74.1913671, 14.7369784 ], [ 74.1875423, 14.7414929 ], [ 74.1846272, 14.7445122 ], [ 74.1813807, 14.7472576 ], [ 74.1792263, 14.7486873 ], [ 74.1769711, 14.7499593 ], [ 74.176726, 14.7499004 ], [ 74.1766187, 14.7498693 ], [ 74.1764562, 14.7497038 ], [ 74.1763827, 14.7493298 ], [ 74.1762309, 14.7492577 ], [ 74.1759841, 14.7493926 ], [ 74.1759321, 14.7494854 ], [ 74.1759964, 14.7496722 ], [ 74.1761037, 14.7498693 ], [ 74.1760501, 14.750108 ], [ 74.1758033, 14.7503051 ], [ 74.175578, 14.7505022 ], [ 74.1736576, 14.7514879 ], [ 74.1731855, 14.7516435 ], [ 74.1727456, 14.7515294 ], [ 74.1723792, 14.7512497 ], [ 74.1720268, 14.7510521 ], [ 74.1717693, 14.7510314 ], [ 74.1716191, 14.7510832 ], [ 74.1714045, 14.7512077 ], [ 74.1711899, 14.7514671 ], [ 74.1709416, 14.7517893 ], [ 74.1708343, 14.7519241 ], [ 74.1706857, 14.7519547 ], [ 74.1703209, 14.7520377 ], [ 74.1700296, 14.7522146 ], [ 74.169366, 14.7522349 ], [ 74.1691729, 14.7521726 ], [ 74.1691085, 14.7518925 ], [ 74.1689798, 14.7515086 ], [ 74.1688618, 14.7510314 ], [ 74.1687008, 14.7510314 ], [ 74.1687636, 14.751229 ], [ 74.1686901, 14.7513945 ], [ 74.1686134, 14.7515299 ], [ 74.1668662, 14.7519755 ], [ 74.1668968, 14.752142 ], [ 74.1667267, 14.7522971 ], [ 74.166135, 14.752391 ], [ 74.1657488, 14.7524948 ], [ 74.165545, 14.7525778 ], [ 74.1650514, 14.7527334 ], [ 74.1641824, 14.7527438 ], [ 74.1632291, 14.7527536 ], [ 74.1605882, 14.752225 ], [ 74.1600518, 14.7520279 ], [ 74.1597085, 14.75181 ], [ 74.1598817, 14.7516124 ], [ 74.1600089, 14.7512705 ], [ 74.1599874, 14.7509696 ], [ 74.1597101, 14.7506786 ], [ 74.1594402, 14.7505754 ], [ 74.1589269, 14.7503051 ], [ 74.1586785, 14.7500773 ], [ 74.1585406, 14.7494647 ], [ 74.158539, 14.7491332 ], [ 74.1587874, 14.7483338 ], [ 74.1590111, 14.7477221 ], [ 74.1590234, 14.7474104 ], [ 74.1588716, 14.7470789 ], [ 74.1586356, 14.7466224 ], [ 74.1585943, 14.7465285 ], [ 74.1585283, 14.7462592 ], [ 74.158303, 14.7458753 ], [ 74.1576501, 14.7453353 ], [ 74.1571888, 14.7452626 ], [ 74.1568991, 14.7453249 ], [ 74.1568546, 14.7454914 ], [ 74.1564362, 14.7458546 ], [ 74.1558906, 14.7461964 ], [ 74.1556117, 14.7465077 ], [ 74.1553971, 14.7465907 ], [ 74.155138, 14.746363 ], [ 74.1549127, 14.7460413 ], [ 74.1546782, 14.7459267 ], [ 74.1543671, 14.7460512 ], [ 74.1540667, 14.7462483 ], [ 74.1534337, 14.7468605 ], [ 74.1526703, 14.7475458 ], [ 74.152157, 14.7481885 ], [ 74.1516833, 14.7492058 ], [ 74.1513936, 14.7497765 ], [ 74.1511915, 14.7505116 ], [ 74.1512343, 14.7509276 ], [ 74.1516098, 14.7512492 ], [ 74.1521784, 14.7515294 ], [ 74.1523072, 14.751768 ], [ 74.1523072, 14.7523698 ], [ 74.1523179, 14.7528366 ], [ 74.152445, 14.7535115 ], [ 74.1527475, 14.7536981 ], [ 74.1530153, 14.7538845 ], [ 74.1531333, 14.754092 ], [ 74.1531333, 14.7544033 ], [ 74.1530797, 14.7547457 ], [ 74.1530689, 14.7551399 ], [ 74.1532513, 14.7554304 ], [ 74.1537878, 14.7560633 ], [ 74.1543564, 14.7564783 ], [ 74.1546568, 14.7566339 ], [ 74.1548928, 14.7567999 ], [ 74.1550307, 14.7570909 ], [ 74.1555151, 14.7572979 ], [ 74.1559856, 14.757454 ], [ 74.1562554, 14.7576818 ], [ 74.1565343, 14.7584391 ], [ 74.1565756, 14.7594149 ], [ 74.1565649, 14.7600893 ], [ 74.1565542, 14.7604524 ], [ 74.1565756, 14.7610645 ], [ 74.1564684, 14.7618218 ], [ 74.1562752, 14.7624651 ], [ 74.1559856, 14.7626829 ], [ 74.1553311, 14.7629527 ], [ 74.1529938, 14.763751 ], [ 74.1504602, 14.7647371 ], [ 74.1492065, 14.7647158 ], [ 74.149228, 14.7656599 ], [ 74.1491529, 14.7669982 ], [ 74.1492816, 14.767102 ], [ 74.1500005, 14.7671331 ], [ 74.1500005, 14.7672991 ], [ 74.1498594, 14.7681918 ], [ 74.1496663, 14.7687002 ], [ 74.149441, 14.7692189 ], [ 74.1490225, 14.769582 ], [ 74.1487221, 14.7695924 ], [ 74.1485827, 14.7695197 ], [ 74.1484861, 14.7693434 ], [ 74.1484325, 14.7691774 ], [ 74.1448292, 14.7692184 ], [ 74.1448184, 14.7703388 ], [ 74.1406664, 14.7703388 ], [ 74.1406637, 14.7709939 ], [ 74.142596, 14.7710142 ], [ 74.142619, 14.771231 ], [ 74.1427585, 14.771314 ], [ 74.1428873, 14.7715215 ], [ 74.1428873, 14.7717704 ], [ 74.1429409, 14.772175 ], [ 74.1431126, 14.7725485 ], [ 74.1442605, 14.7733473 ], [ 74.1445073, 14.7735029 ], [ 74.1445824, 14.7737623 ], [ 74.1445593, 14.774323 ], [ 74.1443233, 14.7750388 ], [ 74.1437225, 14.7764186 ], [ 74.1432612, 14.7770306 ], [ 74.1424672, 14.7777464 ], [ 74.1407506, 14.7790328 ], [ 74.1393773, 14.7798835 ], [ 74.1383903, 14.7802362 ], [ 74.1374783, 14.7802465 ], [ 74.1371457, 14.7801428 ], [ 74.1370921, 14.7799872 ], [ 74.1369848, 14.7798005 ], [ 74.1366645, 14.7793435 ], [ 74.1364913, 14.7791054 ], [ 74.1363518, 14.7788357 ], [ 74.1360728, 14.7784934 ], [ 74.1358046, 14.7784 ], [ 74.1353862, 14.7782755 ], [ 74.135, 14.7781718 ], [ 74.1343884, 14.7781821 ], [ 74.1341309, 14.7784519 ], [ 74.1338305, 14.7790017 ], [ 74.1336696, 14.7795204 ], [ 74.1334228, 14.7798835 ], [ 74.1330489, 14.7801112 ], [ 74.1322319, 14.7803503 ], [ 74.1306655, 14.7805993 ], [ 74.1296355, 14.7806823 ], [ 74.1285948, 14.7806408 ], [ 74.127994, 14.780537 ], [ 74.1277687, 14.780454 ], [ 74.1276094, 14.7801319 ], [ 74.1274898, 14.7798316 ], [ 74.1272768, 14.7796029 ], [ 74.1268262, 14.7793539 ], [ 74.1264491, 14.7790847 ], [ 74.1261701, 14.7788357 ], [ 74.1259341, 14.7785452 ], [ 74.1258499, 14.7780986 ], [ 74.1258499, 14.7779327 ], [ 74.125977, 14.7776842 ], [ 74.1258804, 14.7775805 ], [ 74.1257088, 14.7776634 ], [ 74.1255157, 14.7776738 ], [ 74.1253456, 14.7776214 ], [ 74.1252276, 14.7774555 ], [ 74.1252491, 14.7770094 ], [ 74.1250543, 14.7761281 ], [ 74.1250543, 14.7758687 ], [ 74.12541, 14.7752873 ], [ 74.1254636, 14.7751835 ], [ 74.1254727, 14.7750284 ], [ 74.1254207, 14.7748619 ], [ 74.1252045, 14.7747276 ], [ 74.1249379, 14.774696 ], [ 74.1248735, 14.7748101 ], [ 74.1248414, 14.7749968 ], [ 74.1247877, 14.775142 ], [ 74.1246574, 14.7751944 ], [ 74.1243033, 14.7752359 ], [ 74.1240565, 14.7753189 ], [ 74.1238098, 14.7752567 ], [ 74.123563, 14.7751633 ], [ 74.1233592, 14.7751633 ], [ 74.1232197, 14.7752256 ], [ 74.12293, 14.7753397 ], [ 74.1227047, 14.7753397 ], [ 74.1225116, 14.7753397 ], [ 74.1222648, 14.7752359 ], [ 74.1222326, 14.7750699 ], [ 74.1223077, 14.7749351 ], [ 74.1223936, 14.774738 ], [ 74.1223075, 14.7745451 ], [ 74.1220395, 14.7746135 ], [ 74.1218679, 14.7747795 ], [ 74.1217391, 14.7750284 ], [ 74.1215353, 14.7753604 ], [ 74.1213529, 14.775516 ], [ 74.1210632, 14.7755057 ], [ 74.1208486, 14.7754123 ], [ 74.1206448, 14.7751114 ], [ 74.1204517, 14.7747069 ], [ 74.1202585, 14.7744164 ], [ 74.1199903, 14.7743956 ], [ 74.1197237, 14.774364 ], [ 74.1194861, 14.7742711 ], [ 74.119386, 14.7741755 ], [ 74.1115945, 14.7612676 ], [ 74.1115483, 14.7611931 ], [ 74.1116986, 14.761026 ], [ 74.1117188, 14.7607456 ], [ 74.1117254, 14.7602417 ], [ 74.111691, 14.7595473 ], [ 74.11176, 14.7592 ], [ 74.11213, 14.75886 ], [ 74.11244, 14.75845 ], [ 74.11294, 14.75815 ], [ 74.11324, 14.75819 ], [ 74.11343, 14.75814 ], [ 74.1136, 14.75778 ], [ 74.11408, 14.75721 ], [ 74.11447, 14.75687 ], [ 74.11491, 14.75672 ], [ 74.11518, 14.75668 ], [ 74.11537, 14.75659 ], [ 74.1158, 14.75598 ], [ 74.11637, 14.75547 ], [ 74.11692, 14.75521 ], [ 74.11723, 14.75512 ], [ 74.11744, 14.75514 ], [ 74.11762, 14.75523 ], [ 74.118, 14.75535 ], [ 74.11831, 14.75536 ], [ 74.11864, 14.75517 ], [ 74.11934, 14.75506 ], [ 74.11956, 14.75489 ], [ 74.11973, 14.75468 ], [ 74.11994, 14.75473 ], [ 74.12004, 14.75461 ], [ 74.11999, 14.75444 ], [ 74.11998, 14.75398 ], [ 74.1201, 14.75366 ], [ 74.12244, 14.75366 ], [ 74.12256, 14.75374 ], [ 74.12277, 14.75374 ], [ 74.12288, 14.75364 ], [ 74.1229, 14.75349 ], [ 74.12283, 14.7533 ], [ 74.12044, 14.75331 ], [ 74.12019, 14.75326 ], [ 74.12008, 14.75304 ], [ 74.11983, 14.75289 ], [ 74.11913, 14.75326 ], [ 74.11911, 14.75345 ], [ 74.11916, 14.75358 ], [ 74.11912, 14.75367 ], [ 74.11874, 14.75377 ], [ 74.11816, 14.75387 ], [ 74.11799, 14.75387 ], [ 74.11784, 14.75372 ], [ 74.11773, 14.75333 ], [ 74.11762, 14.75328 ], [ 74.11753, 14.75339 ], [ 74.11751, 14.75383 ], [ 74.11735, 14.75391 ], [ 74.1169, 14.75393 ], [ 74.11661, 14.75404 ], [ 74.11633, 14.75423 ], [ 74.11596, 14.75439 ], [ 74.11565, 14.75438 ], [ 74.11545, 14.75421 ], [ 74.11501, 14.75424 ], [ 74.11451, 14.7542 ], [ 74.11412, 14.75432 ], [ 74.11316, 14.75484 ], [ 74.11225, 14.7553 ], [ 74.11165, 14.75533 ], [ 74.11133, 14.7552 ], [ 74.11062, 14.75403 ], [ 74.11039, 14.75394 ], [ 74.11011, 14.75405 ], [ 74.10991, 14.75439 ], [ 74.10993, 14.75468 ], [ 74.11013, 14.75528 ], [ 74.11048, 14.75565 ], [ 74.11082, 14.75568 ], [ 74.11101, 14.75589 ], [ 74.11094, 14.7561 ], [ 74.11059, 14.75677 ], [ 74.11031, 14.75711 ], [ 74.10985, 14.75742 ], [ 74.10947, 14.7575 ], [ 74.10895, 14.75755 ], [ 74.10854, 14.75792 ], [ 74.10832, 14.75841 ], [ 74.10831, 14.75909 ], [ 74.1085, 14.75956 ], [ 74.109, 14.76022 ], [ 74.10927, 14.76078 ], [ 74.10996, 14.76157 ], [ 74.11055, 14.76164 ], [ 74.11114, 14.7616 ], [ 74.1112933, 14.761485 ], [ 74.1113862, 14.7614718 ], [ 74.1192393, 14.7743749 ], [ 74.1193037, 14.7745616 ], [ 74.119368, 14.7750284 ], [ 74.1193788, 14.7764497 ], [ 74.119368, 14.776792 ], [ 74.1192945, 14.7769886 ], [ 74.1191336, 14.7772169 ], [ 74.1191658, 14.7773621 ], [ 74.1193589, 14.7775073 ], [ 74.1195306, 14.7776941 ], [ 74.1197666, 14.7779949 ], [ 74.1201421, 14.7781609 ], [ 74.1204962, 14.7783269 ], [ 74.1209682, 14.7787003 ], [ 74.1213636, 14.7791158 ], [ 74.1213529, 14.7794478 ], [ 74.1211168, 14.7803088 ], [ 74.1207306, 14.7812943 ], [ 74.1196577, 14.7830267 ], [ 74.1183059, 14.7847073 ], [ 74.117351, 14.7858587 ], [ 74.1160636, 14.7867197 ], [ 74.1147225, 14.7874355 ], [ 74.1143148, 14.7874562 ], [ 74.1139822, 14.7873733 ], [ 74.1137461, 14.7871347 ], [ 74.1136496, 14.7870309 ], [ 74.113435, 14.7869272 ], [ 74.11334, 14.7869785 ], [ 74.1131024, 14.7868857 ], [ 74.1128986, 14.7867301 ], [ 74.1127054, 14.7863152 ], [ 74.1125552, 14.7860247 ], [ 74.1124265, 14.7858743 ], [ 74.1123157, 14.78577 ], [ 74.1121261, 14.7856668 ], [ 74.1119777, 14.7856041 ], [ 74.1117828, 14.785506 ], [ 74.1117203, 14.7853655 ], [ 74.1115414, 14.7851378 ], [ 74.1114413, 14.7850128 ], [ 74.1114091, 14.7849142 ], [ 74.1113662, 14.7847845 ], [ 74.1112624, 14.7847124 ], [ 74.1111624, 14.7846756 ], [ 74.1109961, 14.7846601 ], [ 74.1108727, 14.7846964 ], [ 74.1107493, 14.7847897 ], [ 74.1106294, 14.7848214 ], [ 74.110524, 14.7848727 ], [ 74.110388, 14.7849199 ], [ 74.1102182, 14.7850283 ], [ 74.1101324, 14.7853084 ], [ 74.1100466, 14.78563 ], [ 74.1100787, 14.7861175 ], [ 74.1101807, 14.7866933 ], [ 74.1102504, 14.7869526 ], [ 74.110288, 14.7870408 ], [ 74.110288, 14.7872534 ], [ 74.1102539, 14.7873214 ], [ 74.1101485, 14.7873572 ], [ 74.1100197, 14.7874454 ], [ 74.1100466, 14.7876217 ], [ 74.1101002, 14.7877773 ], [ 74.1102129, 14.7879796 ], [ 74.1103201, 14.7882493 ], [ 74.1103183, 14.7884158 ], [ 74.1102933, 14.7885034 ], [ 74.110245, 14.7887835 ], [ 74.1103577, 14.7888821 ], [ 74.1105401, 14.7889599 ], [ 74.1107439, 14.7889132 ], [ 74.1108815, 14.788893 ], [ 74.1110427, 14.7890685 ], [ 74.1110012, 14.7895823 ], [ 74.1105704, 14.7902467 ], [ 74.1092953, 14.7920408 ], [ 74.1077273, 14.7934624 ], [ 74.1072997, 14.7935967 ], [ 74.1068706, 14.793576 ], [ 74.106311, 14.7933898 ], [ 74.1058299, 14.7931611 ], [ 74.1053562, 14.7929541 ], [ 74.1050772, 14.7926844 ], [ 74.1047446, 14.7925599 ], [ 74.1043563, 14.7925672 ], [ 74.1034969, 14.7928322 ], [ 74.102998, 14.7929697 ], [ 74.102911, 14.7922744 ], [ 74.102913, 14.791759 ], [ 74.102117, 14.7921419 ], [ 74.1013226, 14.7921389 ], [ 74.1010573, 14.7922673 ], [ 74.1010561, 14.7925249 ], [ 74.1018501, 14.7926562 ], [ 74.1025101, 14.7930457 ], [ 74.102509, 14.7933034 ], [ 74.1022432, 14.79356 ], [ 74.102109, 14.7940749 ], [ 74.1015795, 14.7940728 ], [ 74.1014434, 14.7948452 ], [ 74.1011775, 14.7951019 ], [ 74.1002427, 14.7971593 ], [ 74.0997125, 14.7972858 ], [ 74.0994466, 14.7975422 ], [ 74.098123, 14.7974088 ], [ 74.098121, 14.797924 ], [ 74.0960034, 14.7976581 ], [ 74.0960013, 14.7981733 ], [ 74.094941, 14.798427 ], [ 74.0948049, 14.7991994 ], [ 74.0940062, 14.8002268 ], [ 74.0937371, 14.8012563 ], [ 74.0933381, 14.80177 ], [ 74.0928085, 14.8017679 ], [ 74.093069, 14.8027997 ], [ 74.0925394, 14.8027976 ], [ 74.0927989, 14.8040867 ], [ 74.0933285, 14.8040888 ], [ 74.0934583, 14.8046048 ], [ 74.0941193, 14.8049934 ], [ 74.0957072, 14.8052572 ], [ 74.0991493, 14.8053999 ], [ 74.0991472, 14.8059153 ], [ 74.1020593, 14.8061843 ], [ 74.1024613, 14.8048976 ], [ 74.1031266, 14.8042555 ], [ 74.1036573, 14.804 ], [ 74.1041869, 14.8040021 ], [ 74.1049782, 14.8047781 ], [ 74.1070947, 14.8053016 ], [ 74.1086832, 14.805437 ], [ 74.1086853, 14.8049217 ], [ 74.1092149, 14.8049238 ], [ 74.1089522, 14.8044075 ], [ 74.1113372, 14.8040297 ], [ 74.112261, 14.8046779 ], [ 74.1124044, 14.8052449 ], [ 74.1126411, 14.8051423 ], [ 74.1126859, 14.8050173 ], [ 74.1128092, 14.8049084 ], [ 74.1132491, 14.8047528 ], [ 74.1134905, 14.8047217 ], [ 74.1136193, 14.8046491 ], [ 74.113689, 14.8045194 ], [ 74.113748, 14.8043898 ], [ 74.1139036, 14.8042912 ], [ 74.1139983, 14.8042243 ], [ 74.114027, 14.8041357 ], [ 74.1140036, 14.8040636 ], [ 74.1139242, 14.8039884 ], [ 74.1139701, 14.8039028 ], [ 74.1140988, 14.8035488 ], [ 74.1143381, 14.8030017 ], [ 74.1143446, 14.8028965 ], [ 74.1143553, 14.8027239 ], [ 74.1142474, 14.8024314 ], [ 74.1138438, 14.8018557 ], [ 74.1136987, 14.8014699 ], [ 74.1137805, 14.8011154 ], [ 74.113659, 14.800973 ], [ 74.1135144, 14.8009395 ], [ 74.1133189, 14.8008864 ], [ 74.1131263, 14.8008112 ], [ 74.1129932, 14.8006481 ], [ 74.1123224, 14.7997443 ], [ 74.1119104, 14.7991043 ], [ 74.1116227, 14.7987645 ], [ 74.1115204, 14.7988196 ], [ 74.1114556, 14.7987432 ], [ 74.1113807, 14.7986549 ], [ 74.1112184, 14.7984337 ], [ 74.1112227, 14.7981697 ], [ 74.11154, 14.7974786 ], [ 74.1117567, 14.7969426 ], [ 74.1118831, 14.7968103 ], [ 74.112128, 14.7968539 ], [ 74.1124258, 14.7968197 ], [ 74.1125583, 14.7966917 ], [ 74.1128047, 14.7966361 ], [ 74.1133277, 14.7965847 ], [ 74.1134125, 14.7980956 ], [ 74.1135058, 14.798385 ], [ 74.1146677, 14.7999897 ], [ 74.114927, 14.8003081 ], [ 74.1154477, 14.8009948 ], [ 74.1164568, 14.8023194 ], [ 74.1166488, 14.8025616 ], [ 74.1170882, 14.8021845 ], [ 74.1176799, 14.8015342 ], [ 74.1194743, 14.8011727 ], [ 74.1197409, 14.8013734 ], [ 74.120037, 14.8016235 ], [ 74.1206207, 14.8019596 ], [ 74.1211872, 14.8025675 ], [ 74.1218684, 14.8031165 ], [ 74.1221339, 14.8036139 ], [ 74.1220964, 14.8042321 ], [ 74.122348, 14.8043042 ], [ 74.1226034, 14.8042084 ], [ 74.1226727, 14.8043779 ], [ 74.1230261, 14.8052415 ], [ 74.1235389, 14.8060527 ], [ 74.1247534, 14.8096084 ], [ 74.12561, 14.813885 ], [ 74.1258621, 14.8186002 ], [ 74.1258074, 14.8206268 ], [ 74.1254512, 14.823644 ], [ 74.1252109, 14.8261508 ], [ 74.125093, 14.8272995 ], [ 74.1250469, 14.8281116 ], [ 74.1249471, 14.8290243 ], [ 74.124452, 14.8304213 ], [ 74.124187, 14.8314144 ], [ 74.124069, 14.8324204 ], [ 74.1241762, 14.8331567 ], [ 74.1241762, 14.8336027 ], [ 74.123952, 14.8345066 ], [ 74.1238651, 14.8350236 ], [ 74.1238758, 14.8353036 ], [ 74.1241559, 14.8355748 ], [ 74.1242846, 14.8358859 ], [ 74.124305, 14.8364341 ], [ 74.1242299, 14.8369422 ], [ 74.1238769, 14.8380224 ], [ 74.1234048, 14.8390284 ], [ 74.1232428, 14.8396595 ], [ 74.1232428, 14.840178 ], [ 74.1234145, 14.8405825 ], [ 74.123756, 14.840862 ], [ 74.119709, 14.8444728 ], [ 74.1191129, 14.8441702 ], [ 74.1182975, 14.8439006 ], [ 74.1174392, 14.8438384 ], [ 74.1166882, 14.8439421 ], [ 74.1154973, 14.8444554 ], [ 74.1144244, 14.8450569 ], [ 74.1137485, 14.8454147 ], [ 74.1128905, 14.8458579 ], [ 74.1126063, 14.8459583 ], [ 74.112289, 14.84616 ], [ 74.1119512, 14.8463547 ], [ 74.1114383, 14.8468802 ], [ 74.1112262, 14.8474733 ], [ 74.1110851, 14.8484828 ], [ 74.111106, 14.8491808 ], [ 74.1112381, 14.8513241 ], [ 74.1110579, 14.8539513 ], [ 74.1107548, 14.85603 ], [ 74.1106411, 14.8583685 ], [ 74.1101475, 14.8605468 ], [ 74.1093981, 14.8629752 ], [ 74.1089219, 14.8640844 ], [ 74.1079767, 14.865129 ], [ 74.1075065, 14.8662383 ], [ 74.1072394, 14.8667525 ], [ 74.1072362, 14.8675254 ], [ 74.1069662, 14.8688126 ], [ 74.1061661, 14.8700978 ], [ 74.1061638, 14.870613 ], [ 74.1056309, 14.871384 ], [ 74.1050958, 14.8726701 ], [ 74.1042969, 14.8736975 ], [ 74.1037617, 14.8749837 ], [ 74.1034957, 14.8752403 ], [ 74.1032275, 14.8760122 ], [ 74.1018977, 14.8772953 ], [ 74.1014976, 14.8780666 ], [ 74.1009673, 14.8781929 ], [ 74.1004353, 14.8787062 ], [ 74.0991085, 14.8792163 ], [ 74.0980463, 14.8798567 ], [ 74.098175, 14.8806302 ], [ 74.0987016, 14.8814051 ], [ 74.099616, 14.8831152 ], [ 74.100109, 14.8890024 ], [ 74.0996739, 14.8904942 ], [ 74.0978717, 14.8948103 ], [ 74.0959939, 14.8982028 ], [ 74.0934683, 14.8976164 ], [ 74.0934661, 14.8981318 ], [ 74.091876, 14.8982537 ], [ 74.0916116, 14.8981245 ], [ 74.0914765, 14.8986391 ], [ 74.0910773, 14.8991528 ], [ 74.0902852, 14.8985051 ], [ 74.0892277, 14.8979857 ], [ 74.0886989, 14.8977259 ], [ 74.0871081, 14.8979772 ], [ 74.0863102, 14.898747 ], [ 74.0849843, 14.8989993 ], [ 74.0844528, 14.8993841 ], [ 74.0845836, 14.8996423 ], [ 74.0845804, 14.9004153 ], [ 74.084949, 14.9015427 ], [ 74.0829187, 14.9022949 ], [ 74.0830976, 14.9051393 ], [ 74.0834228, 14.9056264 ], [ 74.083273844219946, 14.905933972656252 ], [ 74.0830651, 14.906365 ], [ 74.0825772, 14.9070722 ], [ 74.0821544, 14.9077007 ], [ 74.0812925, 14.9085336 ], [ 74.0805282, 14.9091622 ], [ 74.0797639, 14.9096179 ], [ 74.0786256, 14.9097593 ], [ 74.0775848, 14.910325 ], [ 74.0763977, 14.909995 ], [ 74.0757147, 14.909335 ], [ 74.0748741, 14.9088786 ], [ 74.07408, 14.9087461 ], [ 74.0738144, 14.9088744 ], [ 74.0736836, 14.9083586 ], [ 74.0720233, 14.9084707 ], [ 74.0716997, 14.907706 ], [ 74.0709072, 14.9071874 ], [ 74.0703795, 14.9066699 ], [ 74.0702019, 14.9074336 ], [ 74.0697303, 14.907575 ], [ 74.0691807, 14.9080827 ], [ 74.0690148, 14.9089736 ], [ 74.0677952, 14.908895 ], [ 74.0674578, 14.9083333 ], [ 74.0673272, 14.9078175 ], [ 74.0668004, 14.9070424 ], [ 74.0668038, 14.9062694 ], [ 74.066735247119183, 14.906133972656251 ], [ 74.0666731, 14.9060112 ], [ 74.066142, 14.9062668 ], [ 74.0658715, 14.9075539 ], [ 74.0650766, 14.9075506 ], [ 74.0650788, 14.9070352 ], [ 74.0645477, 14.9072908 ], [ 74.0645434, 14.9083214 ], [ 74.0640134, 14.9083193 ], [ 74.0640112, 14.9088345 ], [ 74.0634814, 14.9088322 ], [ 74.0634791, 14.9093477 ], [ 74.0632419, 14.909995 ], [ 74.0622499, 14.910435 ], [ 74.0610928, 14.909724 ], [ 74.060829, 14.9094652 ], [ 74.0595043, 14.9094597 ], [ 74.0592387, 14.9095879 ], [ 74.0593697, 14.909846 ], [ 74.0593674, 14.9103613 ], [ 74.0591013, 14.9106179 ], [ 74.0589671, 14.9111326 ], [ 74.0594971, 14.9111348 ], [ 74.059496, 14.9113924 ], [ 74.058966, 14.9113904 ], [ 74.0590959, 14.9119061 ], [ 74.0591601, 14.912965 ], [ 74.057908, 14.9135936 ], [ 74.0565719, 14.9135699 ], [ 74.056042, 14.9135678 ], [ 74.0555109, 14.9138232 ], [ 74.0520677, 14.9135514 ], [ 74.0502102, 14.9141883 ], [ 74.0502079, 14.9147035 ], [ 74.0486175, 14.9148252 ], [ 74.0483514, 14.9150819 ], [ 74.0478216, 14.9150796 ], [ 74.0472939, 14.9145622 ], [ 74.0467634, 14.9146892 ], [ 74.0467611, 14.9152046 ], [ 74.0462312, 14.9152023 ], [ 74.0464928, 14.9159763 ], [ 74.0456973, 14.9161014 ], [ 74.0451652, 14.9166145 ], [ 74.0435748, 14.916737 ], [ 74.0437035, 14.9175106 ], [ 74.0435703, 14.9177676 ], [ 74.0430414, 14.9175077 ], [ 74.0433007, 14.9187971 ], [ 74.0425047, 14.9190515 ], [ 74.0423673, 14.9200813 ], [ 74.041835, 14.9205945 ], [ 74.0416995, 14.9213669 ], [ 74.0422295, 14.921369 ], [ 74.0419588, 14.9226561 ], [ 74.0424882, 14.9227867 ], [ 74.0427521, 14.9230454 ], [ 74.0432815, 14.923177 ], [ 74.0434111, 14.9236928 ], [ 74.0435436, 14.9238216 ], [ 74.0448689, 14.923699 ], [ 74.0449953, 14.9249876 ], [ 74.0448621, 14.9252448 ], [ 74.0443321, 14.9252426 ], [ 74.0441947, 14.9262726 ], [ 74.0444586, 14.9265313 ], [ 74.0444552, 14.9273042 ], [ 74.044189, 14.9275608 ], [ 74.0440535, 14.9283331 ], [ 74.0432575, 14.9285875 ], [ 74.0433871, 14.9291033 ], [ 74.043651, 14.929362 ], [ 74.0437817, 14.9298778 ], [ 74.0453722, 14.9297553 ], [ 74.0459016, 14.9298867 ], [ 74.0460301, 14.9306602 ], [ 74.045897, 14.9309173 ], [ 74.0453671, 14.930915 ], [ 74.0453648, 14.9314304 ], [ 74.0458948, 14.9314325 ], [ 74.0460199, 14.9329789 ], [ 74.0462837, 14.9332376 ], [ 74.0462792, 14.9342682 ], [ 74.0460131, 14.9345247 ], [ 74.0452, 14.9386438 ], [ 74.0449337, 14.9389003 ], [ 74.0447984, 14.9396727 ], [ 74.0440046, 14.9394117 ], [ 74.044132, 14.9404427 ], [ 74.0434574, 14.9432741 ], [ 74.0439874, 14.9432762 ], [ 74.0439851, 14.9437916 ], [ 74.0445145, 14.9439222 ], [ 74.044646, 14.944052 ], [ 74.0446449, 14.9443096 ], [ 74.0437088, 14.9463669 ], [ 74.0426487, 14.9463624 ], [ 74.0426464, 14.9468778 ], [ 74.0431764, 14.9468798 ], [ 74.0431741, 14.9473952 ], [ 74.0437043, 14.9473973 ], [ 74.0435689, 14.9479122 ], [ 74.0433028, 14.9481686 ], [ 74.0431684, 14.9486835 ], [ 74.0455506, 14.949337 ], [ 74.0471401, 14.9494729 ], [ 74.0471367, 14.9502457 ], [ 74.0466065, 14.9502437 ], [ 74.0463348, 14.9517884 ], [ 74.0468642, 14.951919 ], [ 74.0469957, 14.9520488 ], [ 74.0469889, 14.9535946 ], [ 74.0472527, 14.9538534 ], [ 74.0479095, 14.9552728 ], [ 74.0484389, 14.9554041 ], [ 74.0485687, 14.9559199 ], [ 74.0492289, 14.9565665 ], [ 74.0497589, 14.9565685 ], [ 74.05029, 14.9563132 ], [ 74.0545307, 14.9562025 ], [ 74.0549166, 14.9572501 ], [ 74.0551804, 14.9575088 ], [ 74.0550461, 14.9580237 ], [ 74.0537204, 14.9581465 ], [ 74.053456, 14.958017 ], [ 74.0537233, 14.9575028 ], [ 74.0529289, 14.9573703 ], [ 74.052136, 14.9568517 ], [ 74.0502816, 14.9567156 ], [ 74.0502793, 14.9572308 ], [ 74.0484231, 14.9574809 ], [ 74.0482799, 14.9597989 ], [ 74.0480138, 14.9600556 ], [ 74.0483841, 14.9613363 ], [ 74.0468645, 14.9648946 ], [ 74.0450733, 14.9692597 ], [ 74.0445778, 14.9703611 ], [ 74.0444931, 14.9710472 ], [ 74.0434128, 14.9727498 ], [ 74.0432659, 14.9729761 ], [ 74.0430025, 14.9729489 ], [ 74.0427485, 14.9729761 ], [ 74.0426288, 14.9731306 ], [ 74.0429507, 14.9733805 ], [ 74.0434531, 14.9736248 ], [ 74.0434732, 14.9740234 ], [ 74.0433424, 14.9745581 ], [ 74.0425474, 14.9767843 ], [ 74.0418329, 14.9783008 ], [ 74.0403234, 14.9810422 ], [ 74.0396536, 14.9818445 ], [ 74.0384774, 14.982413 ], [ 74.0376773, 14.9826572 ], [ 74.0358734, 14.9827743 ], [ 74.0348129, 14.9827639 ], [ 74.0344991, 14.9831111 ], [ 74.0349633, 14.9835313 ], [ 74.036185, 14.9834956 ], [ 74.0362598, 14.9835314 ], [ 74.0366611, 14.9837238 ], [ 74.0369961, 14.9836969 ], [ 74.0377021, 14.9839746 ], [ 74.0387388, 14.9837036 ], [ 74.0391245, 14.9834028 ], [ 74.039269, 14.98345 ], [ 74.0395045, 14.9836492 ], [ 74.0403087, 14.9829913 ], [ 74.0411493, 14.9828639 ], [ 74.0412834, 14.9830608 ], [ 74.0419041, 14.9839833 ], [ 74.0426048, 14.9845092 ], [ 74.0432663, 14.9848979 ], [ 74.0434267, 14.9853281 ], [ 74.0439774, 14.9855787 ], [ 74.0450247, 14.9854925 ], [ 74.0455763, 14.9854395 ], [ 74.0461328, 14.9855932 ], [ 74.0487657, 14.9860494 ], [ 74.0497934, 14.9858825 ], [ 74.0508179, 14.9858753 ], [ 74.052177, 14.9851866 ], [ 74.0509451, 14.9866052 ], [ 74.0493969, 14.9866482 ], [ 74.0489555, 14.9868545 ], [ 74.0482889, 14.9878823 ], [ 74.0477582, 14.9880085 ], [ 74.0472258, 14.9885215 ], [ 74.0456344, 14.9887724 ], [ 74.0421899, 14.9885005 ], [ 74.0406025, 14.9878501 ], [ 74.0403409, 14.987076 ], [ 74.0400754, 14.9872034 ], [ 74.0395458, 14.9870728 ], [ 74.0388935, 14.9860272 ], [ 74.0388935, 14.9852871 ], [ 74.0391391, 14.9848356 ], [ 74.0390507, 14.9844431 ], [ 74.0385419, 14.9843691 ], [ 74.0381451, 14.9848395 ], [ 74.0382049, 14.9854145 ], [ 74.0380431, 14.9867694 ], [ 74.0376309, 14.9877495 ], [ 74.037113, 14.9892569 ], [ 74.0366506, 14.9902664 ], [ 74.0358975, 14.991725 ], [ 74.0354005, 14.9930104 ], [ 74.0350583, 14.993591 ], [ 74.0350277, 14.9936763 ], [ 74.0348298, 14.9942277 ], [ 74.0347131, 14.995002 ], [ 74.0343827, 14.9957985 ], [ 74.0339325, 14.9966814 ], [ 74.0334943, 14.9972572 ], [ 74.0327364, 14.9981196 ], [ 74.0319883, 14.9988245 ], [ 74.0310425, 14.9994682 ], [ 74.0303092, 14.9996029 ], [ 74.0297577, 14.999631 ], [ 74.0293879, 14.9996803 ], [ 74.028732, 14.9990257 ], [ 74.0278338, 14.9981017 ], [ 74.0276258, 14.9978611 ], [ 74.0275251, 14.9980266 ], [ 74.0272396, 14.9981204 ], [ 74.0271289, 14.9984083 ], [ 74.0265074, 14.9982038 ], [ 74.0265176, 14.9984171 ], [ 74.0267822, 14.9986286 ], [ 74.0269364, 14.9991235 ], [ 74.0272749, 14.9992102 ], [ 74.0275486, 14.9991926 ], [ 74.0281783, 14.9998754 ], [ 74.028717, 14.9999719 ], [ 74.0291556, 15.000274 ], [ 74.0294827, 15.0004968 ], [ 74.0294736, 15.0008934 ], [ 74.029444, 15.0018321 ], [ 74.0294042, 15.0019617 ], [ 74.0293048, 15.0020834 ], [ 74.0291767, 15.0021794 ], [ 74.0290706, 15.0022434 ], [ 74.0289624, 15.0022797 ], [ 74.028863, 15.0022946 ], [ 74.0287569, 15.002269 ], [ 74.0286907, 15.0022327 ], [ 74.0285603, 15.0021559 ], [ 74.0284189, 15.0021111 ], [ 74.0282975, 15.0020919 ], [ 74.0282091, 15.0020919 ], [ 74.0280633, 15.0021367 ], [ 74.0279771, 15.0021623 ], [ 74.0279285, 15.002205 ], [ 74.0278954, 15.0022605 ], [ 74.0279109, 15.0023309 ], [ 74.0279484, 15.0023927 ], [ 74.0279484, 15.0024696 ], [ 74.0278468, 15.0025613 ], [ 74.0277054, 15.0026339 ], [ 74.0275486, 15.002668 ], [ 74.0273299, 15.0026531 ], [ 74.0271841, 15.0026104 ], [ 74.0270626, 15.002604 ], [ 74.0269301, 15.0025869 ], [ 74.0267843, 15.0025208 ], [ 74.0266915, 15.0024696 ], [ 74.0266164, 15.0024077 ], [ 74.0264772, 15.0022797 ], [ 74.0263756, 15.0022114 ], [ 74.0262408, 15.002141 ], [ 74.0260995, 15.0020642 ], [ 74.0259787, 15.0020111 ], [ 74.0258332, 15.0018952 ], [ 74.0257058, 15.0018073 ], [ 74.025633, 15.0017862 ], [ 74.0255348, 15.0017897 ], [ 74.025462, 15.0018316 ], [ 74.025408, 15.0018977 ], [ 74.0254986, 15.0020471 ], [ 74.0255384, 15.0021303 ], [ 74.0255428, 15.0022263 ], [ 74.0254787, 15.0023309 ], [ 74.0253506, 15.002444 ], [ 74.0252556, 15.0024973 ], [ 74.0251672, 15.0025122 ], [ 74.0250634, 15.0025229 ], [ 74.0249839, 15.0025442 ], [ 74.0248447, 15.0025763 ], [ 74.0247298, 15.0025997 ], [ 74.0246349, 15.0026317 ], [ 74.0245222, 15.0026552 ], [ 74.024372, 15.0027064 ], [ 74.0242772, 15.0027577 ], [ 74.0242369, 15.0028173 ], [ 74.0242074, 15.0028846 ], [ 74.0242423, 15.0029468 ], [ 74.0242691, 15.003009 ], [ 74.0242638, 15.0030841 ], [ 74.0243147, 15.0031618 ], [ 74.0243335, 15.0032292 ], [ 74.0243764, 15.0032629 ], [ 74.0244542, 15.0032629 ], [ 74.0245508, 15.0032862 ], [ 74.0246634, 15.0033406 ], [ 74.0247251, 15.003395 ], [ 74.0248351, 15.0034132 ], [ 74.0249182, 15.0034339 ], [ 74.025047, 15.0034391 ], [ 74.0251516, 15.0034753 ], [ 74.0255485, 15.0035634 ], [ 74.0256746, 15.0035453 ], [ 74.0257604, 15.0034779 ], [ 74.0260081, 15.0034555 ], [ 74.0261842, 15.0034339 ], [ 74.0263318, 15.0034598 ], [ 74.0264149, 15.0035064 ], [ 74.0264712, 15.0035738 ], [ 74.0265249, 15.0036567 ], [ 74.0265758, 15.0037007 ], [ 74.0266375, 15.003794 ], [ 74.0266765, 15.0038725 ], [ 74.0267019, 15.0039235 ], [ 74.0267502, 15.0041204 ], [ 74.0267287, 15.0042189 ], [ 74.0266617, 15.0042836 ], [ 74.0266134, 15.0043355 ], [ 74.0266134, 15.004478 ], [ 74.0266134, 15.0046101 ], [ 74.0266202, 15.0047129 ], [ 74.0266264, 15.0048053 ], [ 74.0265718, 15.0049283 ], [ 74.0265172, 15.0050197 ], [ 74.0265027, 15.0051146 ], [ 74.0265172, 15.0051814 ], [ 74.0266591, 15.0052235 ], [ 74.026761, 15.0052341 ], [ 74.0264541, 15.0058886 ], [ 74.026173, 15.0064026 ], [ 74.0258699, 15.0068223 ], [ 74.0254895, 15.0072425 ], [ 74.0249899, 15.0079072 ], [ 74.0245769, 15.0082008 ], [ 74.0240585, 15.0085694 ], [ 74.0237429, 15.0089612 ], [ 74.0233824, 15.0092601 ], [ 74.0225777, 15.0097508 ], [ 74.022073, 15.0101026 ], [ 74.0216438, 15.0103596 ], [ 74.0210462, 15.0106892 ], [ 74.0204454, 15.0110094 ], [ 74.0199325, 15.0112705 ], [ 74.0191847, 15.0114943 ], [ 74.0184602, 15.0117558 ], [ 74.0173744, 15.0119173 ], [ 74.0155115, 15.0117324 ], [ 74.0152841, 15.0115799 ], [ 74.0151292, 15.011476 ], [ 74.0148871, 15.0113136 ], [ 74.0145922, 15.0109404 ], [ 74.013868, 15.0104223 ], [ 74.0138052, 15.0102622 ], [ 74.0137339, 15.0101425 ], [ 74.0133493, 15.0102207 ], [ 74.0131653, 15.0101788 ], [ 74.0125323, 15.0106917 ], [ 74.0123606, 15.0111788 ], [ 74.0121952, 15.0118059 ], [ 74.011927, 15.0123955 ], [ 74.0109732, 15.0129561 ], [ 74.0100838, 15.0137395 ], [ 74.0091139, 15.0142898 ], [ 74.0083586, 15.0147675 ], [ 74.0079337, 15.0152753 ], [ 74.0077159, 15.0161696 ], [ 74.007378, 15.0169996 ], [ 74.0071012, 15.0179115 ], [ 74.0063974, 15.0178213 ], [ 74.0055637, 15.0171478 ], [ 74.0050949, 15.016353 ], [ 74.0036922, 15.0163432 ], [ 74.0026323, 15.0169741 ], [ 74.0021887, 15.017843 ], [ 74.0019668, 15.0190453 ], [ 74.0014122, 15.0192952 ], [ 74.0009069, 15.0187596 ], [ 74.0003524, 15.018462 ], [ 73.9994527, 15.0186882 ], [ 73.9989844, 15.0192238 ], [ 73.9987132, 15.0198785 ], [ 73.9987132, 15.0202713 ], [ 73.9979245, 15.0207593 ], [ 73.9977766, 15.0214735 ], [ 73.996729, 15.0215687 ], [ 73.9962361, 15.0210331 ], [ 73.9962854, 15.0204975 ], [ 73.9958171, 15.0201285 ], [ 73.9953487, 15.0199142 ], [ 73.9948065, 15.0195571 ], [ 73.9944984, 15.0194262 ], [ 73.9942889, 15.0193667 ], [ 73.9937216, 15.0189883 ], [ 73.9930549, 15.01836 ], [ 73.9927483, 15.0183192 ], [ 73.9925345, 15.0179831 ], [ 73.9920629, 15.0180145 ], [ 73.9916564, 15.0182658 ], [ 73.9913962, 15.0187527 ], [ 73.99151, 15.019271 ], [ 73.9903554, 15.0196951 ], [ 73.9896074, 15.0205589 ], [ 73.988713, 15.0208887 ], [ 73.988919, 15.0229125 ], [ 73.9884586, 15.0236377 ], [ 73.9886884, 15.0248186 ], [ 73.9876886, 15.025812 ], [ 73.9876438, 15.0258565 ], [ 73.9876019, 15.0258238 ], [ 73.9870055, 15.0253577 ], [ 73.9859824, 15.0254501 ], [ 73.9855643, 15.0259845 ], [ 73.9858243, 15.0263477 ], [ 73.9861787, 15.026605 ], [ 73.9870039, 15.0265433 ], [ 73.9876291, 15.0267325 ], [ 73.9872901, 15.0274043 ], [ 73.9862786, 15.0283929 ], [ 73.9860157, 15.029142 ], [ 73.98661, 15.0290809 ], [ 73.9871402, 15.0290831 ], [ 73.9876363, 15.0291821 ], [ 73.9890373, 15.0299545 ], [ 73.9896252, 15.0302499 ], [ 73.9899826, 15.0326738 ], [ 73.9897872, 15.0338841 ], [ 73.9891204, 15.0361538 ], [ 73.9885465, 15.0375566 ], [ 73.9875921, 15.0396908 ], [ 73.9868295, 15.0418459 ], [ 73.9859578, 15.0435227 ], [ 73.9848248, 15.0459073 ], [ 73.9843975, 15.0471855 ], [ 73.9835869, 15.0488886 ], [ 73.9830619, 15.0497159 ], [ 73.9822875, 15.0512929 ], [ 73.9808902, 15.0527946 ], [ 73.9802598, 15.0535214 ], [ 73.9801046, 15.0534256 ], [ 73.9792019, 15.0528681 ], [ 73.9773717, 15.0523025 ], [ 73.9768827, 15.0514217 ], [ 73.9761106, 15.0511765 ], [ 73.9750139, 15.0503181 ], [ 73.9743633, 15.0509735 ], [ 73.9741722, 15.051958 ], [ 73.973388, 15.0517802 ], [ 73.9727688, 15.0521825 ], [ 73.9719125, 15.0524605 ], [ 73.9714468, 15.0530497 ], [ 73.9711173, 15.0534868 ], [ 73.9717435, 15.0542169 ], [ 73.9718482, 15.0544908 ], [ 73.9718215, 15.0554667 ], [ 73.9715619, 15.0559085 ], [ 73.9713732, 15.0563703 ], [ 73.9709203, 15.0571204 ], [ 73.9705335, 15.0577583 ], [ 73.9700639, 15.0583355 ], [ 73.970224, 15.0585004 ], [ 73.9702133, 15.0589127 ], [ 73.970071, 15.059112 ], [ 73.9698113, 15.0599812 ], [ 73.9695231, 15.0602767 ], [ 73.9691637, 15.0608024 ], [ 73.9689289, 15.0615857 ], [ 73.9686123, 15.0620255 ], [ 73.968075, 15.0624481 ], [ 73.9669562, 15.0627257 ], [ 73.9664784, 15.0624939 ], [ 73.9662155, 15.0625313 ], [ 73.966078, 15.0630123 ], [ 73.9668222, 15.0632344 ], [ 73.9677078, 15.0639771 ], [ 73.9677782, 15.064254 ], [ 73.9676726, 15.0649245 ], [ 73.9673153, 15.0655465 ], [ 73.9671342, 15.0658186 ], [ 73.9667719, 15.0661198 ], [ 73.9662587, 15.0663481 ], [ 73.9658008, 15.0662364 ], [ 73.9654114, 15.0665995 ], [ 73.9646017, 15.0662607 ], [ 73.9632578, 15.0664335 ], [ 73.9628615, 15.0670003 ], [ 73.9634805, 15.0672253 ], [ 73.9626406, 15.0677486 ], [ 73.9618504, 15.067785 ], [ 73.9620919, 15.0682421 ], [ 73.9611569, 15.0687599 ], [ 73.9603259, 15.0687017 ], [ 73.9596824, 15.069021 ], [ 73.9597927, 15.0696901 ], [ 73.9589937, 15.0700774 ], [ 73.9558874, 15.0705669 ], [ 73.9546113, 15.0710494 ], [ 73.9543461, 15.0710481 ], [ 73.9540823, 15.0707894 ], [ 73.9535527, 15.0706584 ], [ 73.9536822, 15.0711744 ], [ 73.9538147, 15.0713033 ], [ 73.9541373, 15.0716261 ], [ 73.9543418, 15.0719502 ], [ 73.9548353, 15.0720559 ], [ 73.9546149, 15.0734746 ], [ 73.9540547, 15.07398 ], [ 73.9535864, 15.0739357 ], [ 73.9530538, 15.0738381 ], [ 73.9523491, 15.0738749 ], [ 73.9516838, 15.0738289 ], [ 73.9510487, 15.0740273 ], [ 73.9506658, 15.0746316 ], [ 73.9501521, 15.074848 ], [ 73.9495356, 15.0753531 ], [ 73.9490313, 15.0755785 ], [ 73.948172, 15.0752358 ], [ 73.9473927, 15.0757306 ], [ 73.9465334, 15.0753879 ], [ 73.9458246, 15.0750122 ], [ 73.9453566, 15.0750091 ], [ 73.9447588, 15.074955 ], [ 73.9434232, 15.0750001 ], [ 73.9422464, 15.0748828 ], [ 73.9413591, 15.0750902 ], [ 73.9411443, 15.0755773 ], [ 73.9401356, 15.0753428 ], [ 73.9396219, 15.0755592 ], [ 73.9380714, 15.0767316 ], [ 73.9372682, 15.0772276 ], [ 73.9365116, 15.076912 ], [ 73.9360727, 15.0767226 ], [ 73.9356991, 15.0770473 ], [ 73.9360913, 15.0774621 ], [ 73.9359232, 15.0777958 ], [ 73.9353255, 15.0780393 ], [ 73.9342327, 15.0783189 ], [ 73.93328, 15.0783279 ], [ 73.9327663, 15.0784181 ], [ 73.9320565, 15.0788419 ], [ 73.9315054, 15.0789682 ], [ 73.9313279, 15.0793289 ], [ 73.9316081, 15.0796536 ], [ 73.9311598, 15.079834 ], [ 73.9307675, 15.0801767 ], [ 73.9303286, 15.080348 ], [ 73.9300484, 15.080366 ], [ 73.929955, 15.0805374 ], [ 73.9301885, 15.080826 ], [ 73.9303659, 15.0811687 ], [ 73.9297868, 15.0817819 ], [ 73.929955, 15.0819623 ], [ 73.9301604, 15.0825214 ], [ 73.9301231, 15.0829182 ], [ 73.9299736, 15.0836126 ], [ 73.9293946, 15.0836036 ], [ 73.9289743, 15.0841988 ], [ 73.9280122, 15.08428 ], [ 73.927209, 15.0846317 ], [ 73.9266299, 15.0849744 ], [ 73.9262937, 15.0854794 ], [ 73.9255932, 15.085804 ], [ 73.9241268, 15.0862459 ], [ 73.9230714, 15.0863632 ], [ 73.9218478, 15.086264 ], [ 73.9210913, 15.085768 ], [ 73.9205309, 15.0853982 ], [ 73.9201573, 15.0851006 ], [ 73.9196249, 15.0847579 ], [ 73.9190925, 15.0844062 ], [ 73.9184014, 15.0839914 ], [ 73.9180651, 15.0837028 ], [ 73.9176448, 15.0835946 ], [ 73.9173086, 15.0832699 ], [ 73.9169537, 15.0834142 ], [ 73.9166828, 15.0836307 ], [ 73.9169163, 15.0838832 ], [ 73.9173273, 15.0839012 ], [ 73.9175328, 15.0843431 ], [ 73.9167949, 15.0847489 ], [ 73.9163092, 15.085272 ], [ 73.9156049, 15.0851467 ], [ 73.9150561, 15.0846815 ], [ 73.9134245, 15.0846098 ], [ 73.9129307, 15.0844746 ], [ 73.9122837, 15.0844964 ], [ 73.9121062, 15.084767 ], [ 73.9121903, 15.0854253 ], [ 73.9120782, 15.0859032 ], [ 73.9127636, 15.0859609 ], [ 73.9147063, 15.086332 ], [ 73.9152742, 15.0864616 ], [ 73.9158038, 15.0865924 ], [ 73.9155716, 15.0868424 ], [ 73.9164527, 15.0876906 ], [ 73.9160664, 15.0882028 ], [ 73.9165334, 15.0885816 ], [ 73.9169814, 15.0883823 ], [ 73.9184526, 15.0894052 ], [ 73.9195861, 15.0902075 ], [ 73.9199985, 15.0905205 ], [ 73.9202787, 15.0905926 ], [ 73.9205029, 15.0904393 ], [ 73.9209699, 15.0904032 ], [ 73.9211006, 15.0900966 ], [ 73.9212968, 15.0899974 ], [ 73.9215023, 15.090268 ], [ 73.9214929, 15.0905655 ], [ 73.9216517, 15.0908541 ], [ 73.9218759, 15.0910796 ], [ 73.9221747, 15.0913772 ], [ 73.9224643, 15.0916657 ], [ 73.9228566, 15.0918912 ], [ 73.9231461, 15.0918461 ], [ 73.9234926, 15.0919062 ], [ 73.9238628, 15.0921704 ], [ 73.923793, 15.0926106 ], [ 73.9243294, 15.0933564 ], [ 73.9244153, 15.0939779 ], [ 73.9242493, 15.0944909 ], [ 73.9242758, 15.0947548 ], [ 73.9247479, 15.095107 ], [ 73.9253916, 15.0954903 ], [ 73.9261211, 15.0960496 ], [ 73.9265288, 15.0967644 ], [ 73.9265181, 15.0971684 ], [ 73.9263465, 15.0979556 ], [ 73.9264001, 15.0984217 ], [ 73.9262928, 15.0994265 ], [ 73.9261426, 15.1006488 ], [ 73.9257135, 15.1014878 ], [ 73.925574, 15.1027723 ], [ 73.9253916, 15.1036009 ], [ 73.9250268, 15.1042535 ], [ 73.9246835, 15.1047817 ], [ 73.9243402, 15.105165 ], [ 73.9237393, 15.1051754 ], [ 73.9229991, 15.105424 ], [ 73.9223339, 15.1057658 ], [ 73.9218189, 15.1057347 ], [ 73.9215399, 15.1059419 ], [ 73.9215185, 15.1061697 ], [ 73.9219262, 15.106408 ], [ 73.92213, 15.1065737 ], [ 73.9220978, 15.1071952 ], [ 73.9220549, 15.1077545 ], [ 73.9215185, 15.1078063 ], [ 73.9207353, 15.1076199 ], [ 73.9195444, 15.1074956 ], [ 73.9189221, 15.1074231 ], [ 73.9184393, 15.1074541 ], [ 73.9180531, 15.1075163 ], [ 73.9179565, 15.1077752 ], [ 73.9180423, 15.108086 ], [ 73.9184929, 15.1079099 ], [ 73.9187397, 15.108086 ], [ 73.9196087, 15.108231 ], [ 73.9202525, 15.1084589 ], [ 73.9209606, 15.1084071 ], [ 73.9215936, 15.1087282 ], [ 73.9226879, 15.1090286 ], [ 73.9237715, 15.1094843 ], [ 73.925035, 15.1099325 ], [ 73.9261722, 15.1102743 ], [ 73.9273309, 15.1104918 ], [ 73.9287793, 15.1114758 ], [ 73.9298522, 15.1116726 ], [ 73.9307642, 15.112149 ], [ 73.9317297, 15.1123976 ], [ 73.9319658, 15.1126773 ], [ 73.9323735, 15.113278 ], [ 73.9329206, 15.1134127 ], [ 73.9332318, 15.1132262 ], [ 73.9335644, 15.1129569 ], [ 73.9339613, 15.1129466 ], [ 73.9341008, 15.1125323 ], [ 73.9343905, 15.1121076 ], [ 73.9347553, 15.111859 ], [ 73.935163, 15.1118176 ], [ 73.9355921, 15.1120662 ], [ 73.9353776, 15.1123769 ], [ 73.9359462, 15.112553 ], [ 73.9361715, 15.1126669 ], [ 73.9359462, 15.1130812 ], [ 73.9359998, 15.1136095 ], [ 73.9363539, 15.1144692 ], [ 73.936429, 15.1150699 ], [ 73.9365363, 15.1158882 ], [ 73.9369869, 15.1167996 ], [ 73.9375555, 15.1174729 ], [ 73.9377057, 15.1181979 ], [ 73.9380812, 15.1183947 ], [ 73.9387146, 15.1185192 ], [ 73.9396486, 15.1185371 ], [ 73.9397878, 15.1186715 ], [ 73.9395263, 15.1189443 ], [ 73.9392436, 15.1191154 ], [ 73.9392581, 15.1192169 ], [ 73.9397499, 15.118981 ], [ 73.9401412, 15.1187054 ], [ 73.9406316, 15.1192213 ], [ 73.9410577, 15.1198851 ], [ 73.9409733, 15.1201743 ], [ 73.9410492, 15.1205653 ], [ 73.9408171, 15.1211083 ], [ 73.9407312, 15.1219784 ], [ 73.9404201, 15.1224962 ], [ 73.940109, 15.1230762 ], [ 73.9400661, 15.1234698 ], [ 73.9403128, 15.1238945 ], [ 73.9402699, 15.124402 ], [ 73.9400318, 15.125292 ], [ 73.9401794, 15.1256894 ], [ 73.9403173, 15.1260607 ], [ 73.9401921, 15.1275207 ], [ 73.9397314, 15.1291015 ], [ 73.9393284, 15.1295249 ], [ 73.9389503, 15.1299223 ], [ 73.9383709, 15.1301191 ], [ 73.9378452, 15.130088 ], [ 73.9375662, 15.1303883 ], [ 73.9371952, 15.1306209 ], [ 73.9371939, 15.1308785 ], [ 73.9374697, 15.131393 ], [ 73.9371264, 15.1318797 ], [ 73.9366865, 15.1321179 ], [ 73.9362144, 15.1320558 ], [ 73.9358282, 15.1319212 ], [ 73.935678, 15.1322008 ], [ 73.9354848, 15.132584 ], [ 73.9358603, 15.1328119 ], [ 73.9361071, 15.1331743 ], [ 73.9363431, 15.1334954 ], [ 73.9369976, 15.1335368 ], [ 73.9375877, 15.1337025 ], [ 73.9382636, 15.1338682 ], [ 73.9395618, 15.1344896 ], [ 73.9403665, 15.1348211 ], [ 73.9411819, 15.13508 ], [ 73.9415486, 15.1352786 ], [ 73.9420784, 15.1354096 ], [ 73.9424713, 15.1363136 ], [ 73.9426088, 15.1365817 ], [ 73.9427268, 15.1368613 ], [ 73.9428652, 15.1372166 ], [ 73.9429966, 15.1373465 ], [ 73.943392, 15.1380834 ], [ 73.9431239, 15.138506 ], [ 73.9437802, 15.1389322 ], [ 73.9447837, 15.1394189 ], [ 73.9444434, 15.1399683 ], [ 73.9441213, 15.1401346 ], [ 73.9442449, 15.1407072 ], [ 73.945173, 15.1410971 ], [ 73.9463038, 15.1422236 ], [ 73.9492352, 15.1419732 ], [ 73.9494775, 15.1423063 ], [ 73.9497342, 15.1426591 ], [ 73.9492669, 15.1428552 ], [ 73.9489486, 15.1436847 ], [ 73.9487894, 15.1445795 ], [ 73.9480587, 15.145909 ], [ 73.9470771, 15.1481412 ], [ 73.9463451, 15.1509249 ], [ 73.9459736, 15.1528897 ], [ 73.9450388, 15.1567988 ], [ 73.9438059, 15.1614846 ], [ 73.9419996, 15.1688861 ], [ 73.9402058, 15.1759694 ], [ 73.938536, 15.1829409 ], [ 73.9382286, 15.1849276 ], [ 73.9375963, 15.1871182 ], [ 73.9344089, 15.1995261 ], [ 73.9326472, 15.2057679 ], [ 73.9289396, 15.2204862 ], [ 73.9280892, 15.2232231 ], [ 73.927368, 15.2266925 ], [ 73.9266419, 15.2289437 ], [ 73.9262806, 15.230064 ], [ 73.9241458, 15.2369291 ], [ 73.921798, 15.2447653 ], [ 73.9163693, 15.2636118 ], [ 73.9131634, 15.2745395 ], [ 73.907868, 15.2920309 ], [ 73.9046443, 15.3010676 ], [ 73.9028937, 15.3060933 ], [ 73.9019641, 15.3087621 ], [ 73.9010324, 15.3114844 ], [ 73.8992383, 15.3167264 ], [ 73.8981199, 15.3198456 ], [ 73.8968656, 15.3237956 ], [ 73.8955659, 15.3266524 ], [ 73.8936583, 15.3324024 ], [ 73.8911872, 15.3383923 ], [ 73.8900303, 15.3409362 ], [ 73.8886346, 15.3438733 ], [ 73.8877041, 15.3459733 ], [ 73.886692, 15.3480547 ], [ 73.8851572, 15.3513479 ], [ 73.8834209, 15.3545717 ], [ 73.8821546, 15.3568335 ], [ 73.8807157, 15.3592663 ], [ 73.8789746, 15.3622541 ], [ 73.878741731189692, 15.362633415625002 ], [ 73.8774158, 15.3647932 ], [ 73.8756891, 15.3668883 ], [ 73.874183, 15.3684562 ], [ 73.8726577, 15.3695985 ], [ 73.8709598, 15.3706299 ], [ 73.870751583065868, 15.37072397064744 ], [ 73.8706528, 15.3707686 ], [ 73.8704514, 15.3707963 ], [ 73.8702163, 15.3707191 ], [ 73.870172, 15.3705681 ], [ 73.8700521, 15.3704585 ], [ 73.8697571, 15.3703815 ], [ 73.8697018, 15.3706274 ], [ 73.8693003, 15.3707876 ], [ 73.8689026, 15.3707707 ], [ 73.8688681, 15.3706075 ], [ 73.868804, 15.370422 ], [ 73.8686117, 15.3703087 ], [ 73.8683979, 15.3702881 ], [ 73.8682964, 15.3703756 ], [ 73.8681041, 15.3702468 ], [ 73.8678102, 15.3701077 ], [ 73.8675644, 15.3699841 ], [ 73.8672278, 15.3699583 ], [ 73.8670461, 15.3698604 ], [ 73.8667522, 15.3697419 ], [ 73.866437, 15.3697059 ], [ 73.8662286, 15.3697162 ], [ 73.8660683, 15.3698038 ], [ 73.8658332, 15.3699532 ], [ 73.8656088, 15.3699841 ], [ 73.8654325, 15.3699635 ], [ 73.8652668, 15.369845 ], [ 73.8651226, 15.3697883 ], [ 73.8648714, 15.3697831 ], [ 73.864615, 15.3698347 ], [ 73.8642677, 15.3698759 ], [ 73.8636853, 15.3697883 ], [ 73.862932, 15.369773 ], [ 73.8626734, 15.370108 ], [ 73.8617654, 15.3697441 ], [ 73.8617155, 15.3690711 ], [ 73.8622041, 15.3685519 ], [ 73.8627181, 15.3683096 ], [ 73.8628945, 15.3682581 ], [ 73.862996, 15.3681705 ], [ 73.8630655, 15.3679902 ], [ 73.8629906, 15.3679026 ], [ 73.8628357, 15.3677378 ], [ 73.8627609, 15.3675574 ], [ 73.8625739, 15.3675883 ], [ 73.8624296, 15.3673668 ], [ 73.8624403, 15.3672844 ], [ 73.8624029, 15.3671762 ], [ 73.8622747, 15.3669855 ], [ 73.8623334, 15.3667898 ], [ 73.8621892, 15.366527 ], [ 73.8619594, 15.3663467 ], [ 73.8618205, 15.3663055 ], [ 73.8616495, 15.3664188 ], [ 73.8614732, 15.3663621 ], [ 73.8612862, 15.3662488 ], [ 73.8609656, 15.3660942 ], [ 73.8606396, 15.3660324 ], [ 73.8603671, 15.3660736 ], [ 73.8601427, 15.3662282 ], [ 73.8597527, 15.3663673 ], [ 73.8595817, 15.3663776 ], [ 73.8594214, 15.366393 ], [ 73.8590955, 15.3665064 ], [ 73.8588924, 15.366393 ], [ 73.8585398, 15.366424 ], [ 73.8584062, 15.3663415 ], [ 73.8581871, 15.3662849 ], [ 73.8580429, 15.3662952 ], [ 73.8578933, 15.3663879 ], [ 73.8575727, 15.3663673 ], [ 73.8570918, 15.366357 ], [ 73.8569903, 15.3664446 ], [ 73.8568513, 15.366424 ], [ 73.8567498, 15.3663312 ], [ 73.8566269, 15.3663261 ], [ 73.8563972, 15.3663261 ], [ 73.8561086, 15.3664034 ], [ 73.8559376, 15.3665219 ], [ 73.8559537, 15.3666352 ], [ 73.8556919, 15.3666094 ], [ 73.8553392, 15.3665012 ], [ 73.8551041, 15.3663312 ], [ 73.8548904, 15.3661921 ], [ 73.8548102, 15.3660633 ], [ 73.8547194, 15.3660015 ], [ 73.8546232, 15.3660221 ], [ 73.8545484, 15.36612 ], [ 73.8544469, 15.3662179 ], [ 73.8543187, 15.3662436 ], [ 73.8541637, 15.3662282 ], [ 73.8540782, 15.3661664 ], [ 73.8540462, 15.3659757 ], [ 73.8540088, 15.3658315 ], [ 73.8539233, 15.3657645 ], [ 73.8536615, 15.365713 ], [ 73.8535653, 15.3657439 ], [ 73.8534851, 15.3658521 ], [ 73.8532554, 15.365816 ], [ 73.8533676, 15.3656305 ], [ 73.8533783, 15.3655172 ], [ 73.8533409, 15.3654244 ], [ 73.8531539, 15.3652493 ], [ 73.852876, 15.3651926 ], [ 73.8527211, 15.3651308 ], [ 73.8526516, 15.3650123 ], [ 73.8526356, 15.3649247 ], [ 73.8526302, 15.3647598 ], [ 73.8526249, 15.364564 ], [ 73.8525501, 15.364497 ], [ 73.8524913, 15.3644095 ], [ 73.8525073, 15.3642394 ], [ 73.8524325, 15.3640952 ], [ 73.8523524, 15.3639303 ], [ 73.852518, 15.3639251 ], [ 73.8526997, 15.3639715 ], [ 73.8527585, 15.3638169 ], [ 73.8526623, 15.3637294 ], [ 73.8525127, 15.3636469 ], [ 73.8523043, 15.363616 ], [ 73.8520799, 15.3635284 ], [ 73.8520318, 15.3632141 ], [ 73.8522829, 15.3631678 ], [ 73.8524218, 15.3630493 ], [ 73.8526195, 15.3627865 ], [ 73.8526127, 15.3622608 ], [ 73.852454, 15.3618964 ], [ 73.852284, 15.3615758 ], [ 73.8521971, 15.3613536 ], [ 73.8519704, 15.3613427 ], [ 73.8518004, 15.3613026 ], [ 73.8517475, 15.3612261 ], [ 73.851551, 15.3610876 ], [ 73.8514225, 15.3610293 ], [ 73.851211, 15.3610439 ], [ 73.8510032, 15.3611204 ], [ 73.8508294, 15.3611824 ], [ 73.8505762, 15.3611787 ], [ 73.8503722, 15.3610949 ], [ 73.85024, 15.3609856 ], [ 73.8499906, 15.360931 ], [ 73.8497261, 15.3609893 ], [ 73.8494616, 15.3611131 ], [ 73.8493067, 15.3612261 ], [ 73.8491405, 15.3612662 ], [ 73.8489969, 15.3612188 ], [ 73.8487853, 15.3611714 ], [ 73.8486229, 15.3611605 ], [ 73.8484831, 15.361237 ], [ 73.8483811, 15.3612297 ], [ 73.8482942, 15.3611714 ], [ 73.8482148, 15.3610767 ], [ 73.8480184, 15.3609856 ], [ 73.8479504, 15.3610184 ], [ 73.8478257, 15.3610476 ], [ 73.8477199, 15.3610512 ], [ 73.8475763, 15.3609747 ], [ 73.8475008, 15.3609565 ], [ 73.8473723, 15.3610293 ], [ 73.8473081, 15.3610111 ], [ 73.8471569, 15.3609565 ], [ 73.8469, 15.3608545 ], [ 73.8466771, 15.3608581 ], [ 73.8465335, 15.3608654 ], [ 73.8464164, 15.36092 ], [ 73.8463068, 15.3609638 ], [ 73.8461784, 15.3609128 ], [ 73.8460084, 15.3608326 ], [ 73.8457137, 15.360716 ], [ 73.8454416, 15.3606687 ], [ 73.8451129, 15.3606322 ], [ 73.8448938, 15.3605667 ], [ 73.8448976, 15.3604501 ], [ 73.84472, 15.3604537 ], [ 73.8445953, 15.3604464 ], [ 73.8443875, 15.3606322 ], [ 73.843953, 15.3606104 ], [ 73.8434883, 15.3605885 ], [ 73.8430085, 15.3605047 ], [ 73.8426307, 15.3604064 ], [ 73.8426382, 15.3603153 ], [ 73.8426496, 15.3602205 ], [ 73.8425853, 15.3602023 ], [ 73.8425589, 15.3602533 ], [ 73.8425249, 15.3603481 ], [ 73.8424644, 15.3604027 ], [ 73.8423057, 15.3604391 ], [ 73.8422831, 15.3603335 ], [ 73.8422226, 15.3602825 ], [ 73.8421622, 15.360308 ], [ 73.8421622, 15.3603699 ], [ 73.8422113, 15.3604574 ], [ 73.8422037, 15.3605266 ], [ 73.8419581, 15.3606067 ], [ 73.841773, 15.3606249 ], [ 73.8415954, 15.3606322 ], [ 73.8415539, 15.3605885 ], [ 73.8414821, 15.3605484 ], [ 73.8413499, 15.3605339 ], [ 73.8412365, 15.3605703 ], [ 73.8411647, 15.3607233 ], [ 73.8411836, 15.3608435 ], [ 73.8409985, 15.3609419 ], [ 73.8410438, 15.3610585 ], [ 73.8410854, 15.3611168 ], [ 73.8410363, 15.3611496 ], [ 73.8410438, 15.3613099 ], [ 73.8407453, 15.361452 ], [ 73.8405715, 15.3615503 ], [ 73.8403751, 15.3615904 ], [ 73.8402277, 15.3615795 ], [ 73.8400728, 15.3616414 ], [ 73.8399557, 15.3617325 ], [ 73.8398386, 15.3617616 ], [ 73.8397214, 15.3617106 ], [ 73.8396383, 15.3617398 ], [ 73.8395439, 15.3619183 ], [ 73.8393965, 15.3620167 ], [ 73.8392681, 15.3620895 ], [ 73.8390792, 15.3621369 ], [ 73.8389356, 15.362279 ], [ 73.8387089, 15.3624028 ], [ 73.838418, 15.362483 ], [ 73.8382026, 15.3624721 ], [ 73.8381422, 15.3625413 ], [ 73.8380326, 15.3626797 ], [ 73.8379344, 15.3627744 ], [ 73.8378437, 15.3628327 ], [ 73.837842502007504, 15.362833415625001 ], [ 73.837685, 15.3629275 ], [ 73.8375225, 15.3629675 ], [ 73.8372165, 15.3629821 ], [ 73.837156, 15.3630768 ], [ 73.8369785, 15.3631643 ], [ 73.8367745, 15.3632262 ], [ 73.8366573, 15.3632772 ], [ 73.8366724, 15.3633574 ], [ 73.8366913, 15.3634667 ], [ 73.8366611, 15.3635322 ], [ 73.8365855, 15.3636525 ], [ 73.8365213, 15.3637873 ], [ 73.836544, 15.3639658 ], [ 73.8365591, 15.3641406 ], [ 73.8365138, 15.3642062 ], [ 73.8365251, 15.3642937 ], [ 73.836578, 15.3643993 ], [ 73.8366687, 15.364494 ], [ 73.8367442, 15.3646398 ], [ 73.8367858, 15.3648146 ], [ 73.836748, 15.365066 ], [ 73.8366573, 15.3652591 ], [ 73.8365515, 15.3652518 ], [ 73.8363362, 15.3652664 ], [ 73.8362417, 15.3653283 ], [ 73.8361359, 15.365434 ], [ 73.8360339, 15.365576 ], [ 73.8360226, 15.3657072 ], [ 73.8360226, 15.3657764 ], [ 73.8359848, 15.3658857 ], [ 73.8359168, 15.3659622 ], [ 73.8358412, 15.3660533 ], [ 73.8358261, 15.3662172 ], [ 73.835777, 15.3663338 ], [ 73.835675, 15.3663885 ], [ 73.8355465, 15.3664941 ], [ 73.835505, 15.3666362 ], [ 73.8354861, 15.3668293 ], [ 73.8353614, 15.3670442 ], [ 73.8352502, 15.3672732 ], [ 73.8351871, 15.3675063 ], [ 73.8350583, 15.367647 ], [ 73.834921, 15.3678042 ], [ 73.834921, 15.3680939 ], [ 73.8348781, 15.3684167 ], [ 73.8347064, 15.3685988 ], [ 73.8345777, 15.3687974 ], [ 73.8343974, 15.3689712 ], [ 73.8342106, 15.3691296 ], [ 73.8340627, 15.3693684 ], [ 73.8339168, 15.3695091 ], [ 73.8337194, 15.3696747 ], [ 73.8334018, 15.3699395 ], [ 73.8331701, 15.3701381 ], [ 73.8329641, 15.3702705 ], [ 73.8327152, 15.3704609 ], [ 73.8324491, 15.3706099 ], [ 73.832183, 15.3706843 ], [ 73.831771, 15.3708747 ], [ 73.8312389, 15.3711147 ], [ 73.8311359, 15.3712306 ], [ 73.8310243, 15.3714044 ], [ 73.8309299, 15.3713795 ], [ 73.8308097, 15.3714044 ], [ 73.8306552, 15.3713464 ], [ 73.8305694, 15.371363 ], [ 73.8304407, 15.3712802 ], [ 73.8303548, 15.3711561 ], [ 73.8301832, 15.3710899 ], [ 73.8300973, 15.3709243 ], [ 73.8297918, 15.3706246 ], [ 73.8296356, 15.3698995 ], [ 73.8287761, 15.3695511 ], [ 73.8272526, 15.3699277 ], [ 73.8259653, 15.3700521 ], [ 73.8250893, 15.3705373 ], [ 73.8244866, 15.3707752 ], [ 73.8232375, 15.3709681 ], [ 73.8219833, 15.3722804 ], [ 73.8218923, 15.3726011 ], [ 73.8215412, 15.3728433 ], [ 73.8207425, 15.3733943 ], [ 73.8199048, 15.3737807 ], [ 73.8195484, 15.3739452 ], [ 73.8187559, 15.3737322 ], [ 73.8164608, 15.3736474 ], [ 73.815823, 15.3739131 ], [ 73.8154328, 15.3742816 ], [ 73.8153883, 15.3750777 ], [ 73.8137374, 15.3760589 ], [ 73.8118099, 15.3769134 ], [ 73.8112261, 15.3769904 ], [ 73.8102202, 15.3769904 ], [ 73.8093705, 15.3767644 ], [ 73.8083646, 15.3771034 ], [ 73.8079446, 15.3776025 ], [ 73.8075149, 15.3778096 ], [ 73.8071438, 15.3782899 ], [ 73.8072707, 15.3790244 ], [ 73.8077005, 15.3800225 ], [ 73.8076516, 15.3832712 ], [ 73.8075567, 15.3845743 ], [ 73.8075476, 15.3858883 ], [ 73.8072445, 15.3885488 ], [ 73.8068266, 15.3905212 ], [ 73.8060628, 15.3923668 ], [ 73.8048775, 15.3942461 ], [ 73.8040283, 15.3949943 ], [ 73.8035538, 15.3952965 ], [ 73.8031418, 15.3953007 ], [ 73.8020458, 15.3946741 ], [ 73.8012352, 15.3947683 ], [ 73.8009668, 15.3946284 ], [ 73.8007711, 15.3946261 ], [ 73.8005559, 15.3947049 ], [ 73.8002233, 15.39473 ], [ 73.8000733, 15.3946641 ], [ 73.7999011, 15.3946946 ], [ 73.7996321, 15.3947781 ], [ 73.7984713, 15.3945988 ], [ 73.797617, 15.3946437 ], [ 73.7970695, 15.3949121 ], [ 73.7951901, 15.3949103 ], [ 73.7948146, 15.3946737 ], [ 73.7945853, 15.3942924 ], [ 73.7943851, 15.3941176 ], [ 73.7939883, 15.3941358 ], [ 73.7935425, 15.3942523 ], [ 73.7930438, 15.3943252 ], [ 73.7924468, 15.3943616 ], [ 73.7918801, 15.3943908 ], [ 73.7914267, 15.3945183 ], [ 73.7910829, 15.3946567 ], [ 73.7909771, 15.3945875 ], [ 73.7908675, 15.3945037 ], [ 73.7907693, 15.3944964 ], [ 73.7906711, 15.3945547 ], [ 73.7907202, 15.3947077 ], [ 73.7908864, 15.394715 ], [ 73.7910905, 15.3948242 ], [ 73.7912114, 15.3949663 ], [ 73.7911471, 15.3951047 ], [ 73.7911207, 15.3952213 ], [ 73.7908902, 15.3953378 ], [ 73.7906597, 15.3954617 ], [ 73.7904444, 15.3954326 ], [ 73.7902366, 15.3954581 ], [ 73.7902895, 15.3955819 ], [ 73.7906409, 15.3956548 ], [ 73.7905351, 15.3957531 ], [ 73.7902555, 15.3959061 ], [ 73.7900703, 15.3961174 ], [ 73.7900023, 15.3964416 ], [ 73.7899872, 15.3965727 ], [ 73.7901912, 15.3966055 ], [ 73.790025, 15.3967658 ], [ 73.7899343, 15.3968532 ], [ 73.7899494, 15.3969843 ], [ 73.7899041, 15.3971118 ], [ 73.7899079, 15.3971847 ], [ 73.7899759, 15.3973595 ], [ 73.7898588, 15.3975963 ], [ 73.7899721, 15.3976072 ], [ 73.7901232, 15.3976327 ], [ 73.7902366, 15.3977165 ], [ 73.7900968, 15.3977565 ], [ 73.7899721, 15.3977857 ], [ 73.7898437, 15.3978913 ], [ 73.7898474, 15.3980297 ], [ 73.7900099, 15.3981354 ], [ 73.7901799, 15.3982446 ], [ 73.7900666, 15.3984195 ], [ 73.7901912, 15.398445 ], [ 73.7903008, 15.3983976 ], [ 73.7904784, 15.3984705 ], [ 73.7906295, 15.3985688 ], [ 73.7906522, 15.3987728 ], [ 73.7907769, 15.3988857 ], [ 73.790894, 15.3990387 ], [ 73.7909129, 15.3992354 ], [ 73.7910149, 15.3994212 ], [ 73.7911396, 15.399596 ], [ 73.7911509, 15.3998474 ], [ 73.791132, 15.4001096 ], [ 73.7908562, 15.4004265 ], [ 73.7907391, 15.4005285 ], [ 73.7904973, 15.4005941 ], [ 73.7901761, 15.4006888 ], [ 73.7900817, 15.4006852 ], [ 73.7899041, 15.4006597 ], [ 73.7896661, 15.400656 ], [ 73.7895187, 15.4007252 ], [ 73.7894318, 15.4008782 ], [ 73.7894054, 15.401013 ], [ 73.789326, 15.4011842 ], [ 73.7892051, 15.4013226 ], [ 73.7890124, 15.4015084 ], [ 73.7887178, 15.4016614 ], [ 73.7886044, 15.4016176 ], [ 73.788389, 15.401716 ], [ 73.788219, 15.4018653 ], [ 73.7881472, 15.4020511 ], [ 73.7881246, 15.4023024 ], [ 73.7880037, 15.4024008 ], [ 73.7877959, 15.4025465 ], [ 73.7876825, 15.4026667 ], [ 73.7877316, 15.4027177 ], [ 73.7875654, 15.4028015 ], [ 73.7874332, 15.4029799 ], [ 73.7873954, 15.4031548 ], [ 73.787214, 15.4033405 ], [ 73.7871196, 15.4033806 ], [ 73.7870931, 15.4036283 ], [ 73.7871196, 15.4038505 ], [ 73.787044, 15.4039561 ], [ 73.7870478, 15.4040763 ], [ 73.7869269, 15.4040836 ], [ 73.7868891, 15.4044843 ], [ 73.7868438, 15.40463 ], [ 73.7866964, 15.4046336 ], [ 73.7865377, 15.4048959 ], [ 73.7867191, 15.4048631 ], [ 73.7867569, 15.4050343 ], [ 73.7866435, 15.4052091 ], [ 73.786534, 15.4053111 ], [ 73.7864055, 15.4053038 ], [ 73.786345, 15.4053876 ], [ 73.786345, 15.4054787 ], [ 73.7863828, 15.4055843 ], [ 73.7864206, 15.4056863 ], [ 73.7864093, 15.4058575 ], [ 73.7863413, 15.4060942 ], [ 73.7861335, 15.4064731 ], [ 73.7859483, 15.4067863 ], [ 73.7856158, 15.4070886 ], [ 73.7853211, 15.4073035 ], [ 73.7849962, 15.4074966 ], [ 73.7847166, 15.4076459 ], [ 73.7845844, 15.4078463 ], [ 73.7844106, 15.4079555 ], [ 73.7844182, 15.4080684 ], [ 73.7842292, 15.4081741 ], [ 73.7840781, 15.4081741 ], [ 73.7839459, 15.4082724 ], [ 73.7837796, 15.4085638 ], [ 73.783723, 15.4088151 ], [ 73.7834925, 15.4088078 ], [ 73.7834509, 15.4090045 ], [ 73.7836323, 15.4091393 ], [ 73.7835076, 15.4096966 ], [ 73.78333, 15.410181 ], [ 73.7831789, 15.4103121 ], [ 73.7832091, 15.410578 ], [ 73.7831789, 15.4110406 ], [ 73.7832242, 15.4115068 ], [ 73.7834283, 15.4118565 ], [ 73.7833678, 15.4118893 ], [ 73.7831902, 15.4119148 ], [ 73.7831751, 15.4120131 ], [ 73.7835076, 15.412432 ], [ 73.7837948, 15.4124538 ], [ 73.7841461, 15.4125959 ], [ 73.784558, 15.4128946 ], [ 73.784558, 15.4130512 ], [ 73.7842897, 15.4131787 ], [ 73.7844408, 15.4133389 ], [ 73.7846713, 15.4133389 ], [ 73.7847695, 15.4132297 ], [ 73.7848753, 15.4132661 ], [ 73.784898, 15.4134227 ], [ 73.7848829, 15.4135465 ], [ 73.7849849, 15.4135866 ], [ 73.7851662, 15.4134956 ], [ 73.7857443, 15.4137687 ], [ 73.7864282, 15.4139217 ], [ 73.7867455, 15.4138926 ], [ 73.7872065, 15.4137651 ], [ 73.7876901, 15.413583 ], [ 73.7882352, 15.4133482 ], [ 73.7886444, 15.4131564 ], [ 73.7889986, 15.4131807 ], [ 73.7893357, 15.4132959 ], [ 73.7899677, 15.413935 ], [ 73.7901089, 15.4144124 ], [ 73.7916247, 15.4188302 ], [ 73.7917846, 15.4188184 ], [ 73.7916405, 15.4183342 ], [ 73.7941132, 15.418261 ], [ 73.7941161, 15.4181414 ], [ 73.7915981, 15.4182552 ], [ 73.7902441, 15.4143881 ], [ 73.792383, 15.4143865 ], [ 73.7929733, 15.4143407 ], [ 73.7931662, 15.414243 ], [ 73.7933704, 15.4144785 ], [ 73.7935345, 15.4143596 ], [ 73.794637, 15.4157423 ], [ 73.7980363, 15.4131801 ], [ 73.7988404, 15.4126078 ], [ 73.7993922, 15.4121694 ], [ 73.7998312, 15.4118402 ], [ 73.7996198, 15.4116285 ], [ 73.7990344, 15.4120792 ], [ 73.798823, 15.4117931 ], [ 73.7990294, 15.4116314 ], [ 73.8014138, 15.4098655 ], [ 73.8014899, 15.409952 ], [ 73.8022324, 15.4093724 ], [ 73.8023271, 15.4092958 ], [ 73.8022709, 15.4091907 ], [ 73.8041857, 15.4077351 ], [ 73.8042623, 15.4076768 ], [ 73.8045005, 15.4074958 ], [ 73.804562, 15.4074491 ], [ 73.8046417, 15.4073885 ], [ 73.8038259, 15.4062788 ], [ 73.8060105, 15.4045717 ], [ 73.8062577, 15.4042832 ], [ 73.8063638, 15.4043157 ], [ 73.8073555, 15.4055156 ], [ 73.8079326, 15.4055915 ], [ 73.808313, 15.4006429 ], [ 73.8081979, 15.4005098 ], [ 73.8083289, 15.4004382 ], [ 73.8083837, 15.4003495 ], [ 73.8085165, 15.4002863 ], [ 73.8087341, 15.4002983 ], [ 73.8087766, 15.4003546 ], [ 73.8087784, 15.4004876 ], [ 73.8090491, 15.4005866 ], [ 73.809219, 15.4007384 ], [ 73.8094614, 15.400805 ], [ 73.8095694, 15.4007197 ], [ 73.809649, 15.4006565 ], [ 73.8097782, 15.4006241 ], [ 73.8103215, 15.4007862 ], [ 73.810617, 15.4007811 ], [ 73.8112788, 15.400706 ], [ 73.8134183, 15.4014529 ], [ 73.8153214, 15.4028945 ], [ 73.8168167, 15.4045458 ], [ 73.8167352, 15.4054632 ], [ 73.8167352, 15.4067475 ], [ 73.817143, 15.4072979 ], [ 73.8169255, 15.4077959 ], [ 73.8163002, 15.4084774 ], [ 73.8161099, 15.4091326 ], [ 73.8162186, 15.4098141 ], [ 73.8169527, 15.4101286 ], [ 73.8175236, 15.4102072 ], [ 73.8181761, 15.4104693 ], [ 73.8186111, 15.4104169 ], [ 73.8192092, 15.4103383 ], [ 73.8196442, 15.4103383 ], [ 73.8206544, 15.4099553 ], [ 73.8219552, 15.4091064 ], [ 73.8226077, 15.4086084 ], [ 73.8231514, 15.4078745 ], [ 73.8232635, 15.4072186 ], [ 73.8229706, 15.4065297 ], [ 73.8230419, 15.4060265 ], [ 73.8228795, 15.4053845 ], [ 73.8227533, 15.404641 ], [ 73.822694, 15.4037156 ], [ 73.8229443, 15.4036507 ], [ 73.8231299, 15.4036988 ], [ 73.8231602, 15.4038025 ], [ 73.8243042, 15.4037827 ], [ 73.8243524, 15.4055341 ], [ 73.8244774, 15.4055346 ], [ 73.8245016, 15.4064488 ], [ 73.8249714, 15.4064439 ], [ 73.8249512, 15.4054504 ], [ 73.8253907, 15.4054358 ], [ 73.8254109, 15.4064537 ], [ 73.8255625, 15.4064439 ], [ 73.8255271, 15.4038433 ], [ 73.8256787, 15.4038335 ], [ 73.8256837, 15.4037069 ], [ 73.8258974, 15.403707 ], [ 73.8258702, 15.4042575 ], [ 73.8263324, 15.4042313 ], [ 73.8263595, 15.4035236 ], [ 73.8263654, 15.4031849 ], [ 73.8257847, 15.4022388 ], [ 73.8255476, 15.4018796 ], [ 73.8256139, 15.4018475 ], [ 73.826197, 15.4027304 ], [ 73.8262901, 15.4027816 ], [ 73.8266637, 15.40342 ], [ 73.8270929, 15.4033104 ], [ 73.8272024, 15.4031304 ], [ 73.827882, 15.4032614 ], [ 73.8284296, 15.4033429 ], [ 73.8285345, 15.4033585 ], [ 73.8285415, 15.4043452 ], [ 73.8281097, 15.4052363 ], [ 73.827864, 15.4058378 ], [ 73.8279713, 15.4065189 ], [ 73.8286705, 15.4069834 ], [ 73.8289152, 15.4069834 ], [ 73.8295405, 15.4067737 ], [ 73.8299483, 15.4065116 ], [ 73.8311717, 15.405699 ], [ 73.8316611, 15.4054369 ], [ 73.8321777, 15.4055942 ], [ 73.8326127, 15.406066 ], [ 73.8333195, 15.4071144 ], [ 73.8336458, 15.4078221 ], [ 73.8337545, 15.4083201 ], [ 73.8340264, 15.4090016 ], [ 73.8349508, 15.4096044 ], [ 73.8360655, 15.409683 ], [ 73.837153, 15.4098927 ], [ 73.8388658, 15.4101286 ], [ 73.8403339, 15.4103645 ], [ 73.8409592, 15.4100238 ], [ 73.8413942, 15.4098141 ], [ 73.8416661, 15.4093423 ], [ 73.8420739, 15.4090278 ], [ 73.8425361, 15.4088705 ], [ 73.8432158, 15.408687 ], [ 73.8437867, 15.4081104 ], [ 73.843977, 15.407691 ], [ 73.8443305, 15.4062233 ], [ 73.8446839, 15.4049914 ], [ 73.8446023, 15.4043099 ], [ 73.844548, 15.403707 ], [ 73.846723, 15.4011908 ], [ 73.8459617, 15.3995657 ], [ 73.8466142, 15.3991725 ], [ 73.8477289, 15.3989366 ], [ 73.8487892, 15.3988055 ], [ 73.8498495, 15.4002996 ], [ 73.8507739, 15.4010859 ], [ 73.8516439, 15.4011908 ], [ 73.8525139, 15.401348 ], [ 73.8534927, 15.4011646 ], [ 73.8542539, 15.4008762 ], [ 73.8557492, 15.4004831 ], [ 73.8558211, 15.4004532 ], [ 73.8564141, 15.4002575 ], [ 73.8568683, 15.4000102 ], [ 73.8573973, 15.3994796 ], [ 73.8577713, 15.3988718 ], [ 73.8581827, 15.3986915 ], [ 73.858482, 15.3986091 ], [ 73.8590216, 15.3985988 ], [ 73.8594918, 15.3985679 ], [ 73.8596735, 15.3986451 ], [ 73.8600368, 15.3989027 ], [ 73.8601971, 15.3992066 ], [ 73.8605284, 15.3997372 ], [ 73.8606833, 15.4000772 ], [ 73.8608971, 15.4004481 ], [ 73.8613085, 15.4007726 ], [ 73.8615383, 15.4009632 ], [ 73.8619978, 15.4011126 ], [ 73.8623825, 15.4012414 ], [ 73.8627298, 15.4014268 ], [ 73.8629863, 15.4016741 ], [ 73.8632748, 15.4016896 ], [ 73.8635419, 15.4017668 ], [ 73.8634992, 15.4019832 ], [ 73.8636381, 15.4020347 ], [ 73.863948, 15.4020502 ], [ 73.864306, 15.4020553 ], [ 73.8646266, 15.4019935 ], [ 73.8648671, 15.4019265 ], [ 73.8653747, 15.4020244 ], [ 73.8658716, 15.4020965 ], [ 73.8660052, 15.4020347 ], [ 73.8664219, 15.4020553 ], [ 73.8668547, 15.4020553 ], [ 73.8677363, 15.401942 ], [ 73.8678699, 15.4017462 ], [ 73.8684096, 15.4015556 ], [ 73.8690935, 15.4011847 ], [ 73.8694088, 15.4008241 ], [ 73.869708, 15.4012053 ], [ 73.8701782, 15.4005357 ], [ 73.870551583065861, 15.399971627183923 ], [ 73.8706965, 15.3997527 ], [ 73.8713804, 15.3997836 ], [ 73.8714392, 15.3995518 ], [ 73.871359, 15.3994539 ], [ 73.8714231, 15.3992015 ], [ 73.8708621, 15.3990315 ], [ 73.8708781, 15.3988151 ], [ 73.8709423, 15.3985009 ], [ 73.871001, 15.398063 ], [ 73.870751583065868, 15.397892668856608 ], [ 73.8707446, 15.3978879 ], [ 73.870782, 15.3976715 ], [ 73.8710171, 15.397347 ], [ 73.8712735, 15.3976458 ], [ 73.8713911, 15.3975273 ], [ 73.8713323, 15.3973212 ], [ 73.8714338, 15.3972646 ], [ 73.871546, 15.397383 ], [ 73.8717696, 15.3974995 ], [ 73.871836, 15.3972967 ], [ 73.8718213, 15.3969052 ], [ 73.8717437, 15.3965706 ], [ 73.8724267, 15.3961435 ], [ 73.8726629, 15.3967984 ], [ 73.8727848, 15.3967628 ], [ 73.8725337, 15.3960261 ], [ 73.8727885, 15.3960225 ], [ 73.8731871, 15.3960652 ], [ 73.8735268, 15.3961186 ], [ 73.8737556, 15.3961755 ], [ 73.8738147, 15.3966631 ], [ 73.8739292, 15.3966596 ], [ 73.8739181, 15.3962467 ], [ 73.8743795, 15.396236 ], [ 73.8744571, 15.3961898 ], [ 73.8750256, 15.3963321 ], [ 73.8759189, 15.3965813 ], [ 73.8768049, 15.3967806 ], [ 73.8777204, 15.396987 ], [ 73.8777196, 15.397489 ], [ 73.877636, 15.3977457 ], [ 73.8776517, 15.3978564 ], [ 73.8779754, 15.3980124 ], [ 73.8784139, 15.3981483 ], [ 73.8786541, 15.3981131 ], [ 73.8787741, 15.397957 ], [ 73.8793066, 15.3981433 ], [ 73.8792753, 15.3982993 ], [ 73.8796721, 15.3983345 ], [ 73.8797983, 15.3982767 ], [ 73.8803889, 15.3984476 ], [ 73.8809205, 15.3988462 ], [ 73.8819246, 15.3995438 ], [ 73.882471, 15.400099 ], [ 73.8825301, 15.4005545 ], [ 73.8827811, 15.4010528 ], [ 73.8833865, 15.401124 ], [ 73.8837409, 15.4009531 ], [ 73.8839329, 15.4012379 ], [ 73.8842873, 15.4014087 ], [ 73.8847007, 15.4011382 ], [ 73.8863546, 15.4020636 ], [ 73.8865908, 15.4016507 ], [ 73.8869895, 15.4018785 ], [ 73.8874768, 15.4026472 ], [ 73.8878607, 15.4036011 ], [ 73.8878607, 15.404199 ], [ 73.8872996, 15.4043556 ], [ 73.8866744, 15.4045295 ], [ 73.8864865, 15.40461 ], [ 73.8864238, 15.4051536 ], [ 73.8865909, 15.4053247 ], [ 73.88657, 15.4055563 ], [ 73.8864969, 15.405677 ], [ 73.8864969, 15.4058884 ], [ 73.8865909, 15.4061904 ], [ 73.8868728, 15.4063112 ], [ 73.8871652, 15.406281 ], [ 73.8874158, 15.40613 ], [ 73.8876246, 15.40612 ], [ 73.8879274, 15.4062206 ], [ 73.8879587, 15.4064119 ], [ 73.8876664, 15.4066333 ], [ 73.8874053, 15.407187 ], [ 73.8872696, 15.4078211 ], [ 73.8873636, 15.4082439 ], [ 73.8880005, 15.4081835 ], [ 73.8882198, 15.408103 ], [ 73.888982, 15.4080527 ], [ 73.8895249, 15.4078312 ], [ 73.8897546, 15.4075796 ], [ 73.8900679, 15.4078916 ], [ 73.8904124, 15.4078211 ], [ 73.890851, 15.408103 ], [ 73.8910076, 15.4083043 ], [ 73.8913, 15.4081936 ], [ 73.8916967, 15.4081735 ], [ 73.8923815, 15.4085175 ], [ 73.8924886, 15.4083645 ], [ 73.8927765, 15.4083396 ], [ 73.8928688, 15.4082613 ], [ 73.8930977, 15.4080228 ], [ 73.8932897, 15.4079374 ], [ 73.8933783, 15.4080869 ], [ 73.8935038, 15.4080834 ], [ 73.893585, 15.4080406 ], [ 73.8936256, 15.4079588 ], [ 73.8936182, 15.407788 ], [ 73.8935407, 15.4075175 ], [ 73.8936884, 15.4074677 ], [ 73.8936994, 15.4076065 ], [ 73.8937844, 15.4075851 ], [ 73.8937948, 15.4073838 ], [ 73.8939305, 15.4072127 ], [ 73.8941811, 15.4069107 ], [ 73.8948911, 15.4068905 ], [ 73.8954863, 15.4069107 ], [ 73.8960606, 15.4067496 ], [ 73.8970421, 15.4062966 ], [ 73.8974702, 15.4059644 ], [ 73.8980992, 15.405287 ], [ 73.8986456, 15.4045609 ], [ 73.8995906, 15.4040342 ], [ 73.9008162, 15.4036214 ], [ 73.9024774, 15.403479 ], [ 73.9041091, 15.4035644 ], [ 73.905283, 15.4039061 ], [ 73.9058885, 15.4038634 ], [ 73.906708, 15.4038634 ], [ 73.9068778, 15.4040983 ], [ 73.906804, 15.4044399 ], [ 73.9068187, 15.4048385 ], [ 73.9068261, 15.4055219 ], [ 73.9067597, 15.406618 ], [ 73.9064127, 15.4072159 ], [ 73.9061838, 15.4082267 ], [ 73.9061395, 15.4090594 ], [ 73.9062945, 15.4094011 ], [ 73.9069443, 15.4096289 ], [ 73.9075275, 15.4094794 ], [ 73.9080296, 15.4092303 ], [ 73.9084209, 15.4088673 ], [ 73.9088787, 15.4085114 ], [ 73.9094472, 15.4076216 ], [ 73.9098016, 15.4067888 ], [ 73.9107614, 15.4059205 ], [ 73.9117655, 15.4060771 ], [ 73.9114111, 15.4066465 ], [ 73.9107761, 15.4073867 ], [ 73.9105842, 15.4079277 ], [ 73.9121196, 15.4073736 ], [ 73.9143641, 15.4064055 ], [ 73.9183396, 15.4045162 ], [ 73.9222736, 15.4040717 ], [ 73.9257654, 15.4033717 ], [ 73.9285371, 15.4027974 ], [ 73.9396571, 15.4018692 ], [ 73.9461604, 15.4016202 ], [ 73.9486071, 15.4012085 ], [ 73.9497754, 15.3965824 ], [ 73.9497788, 15.3942021 ], [ 73.9507239, 15.3922659 ], [ 73.9519052, 15.3887351 ], [ 73.9520233, 15.3874823 ], [ 73.9537953, 15.3854321 ], [ 73.9550328, 15.3807278 ], [ 73.9580709, 15.381029 ], [ 73.9584024, 15.3862294 ], [ 73.9569747, 15.391485 ], [ 73.9568801, 15.3925212 ], [ 73.9544025, 15.3957234 ], [ 73.9531298, 15.401189 ], [ 73.9508159, 15.4038661 ], [ 73.9468491, 15.4057798 ], [ 73.9444765, 15.4067262 ], [ 73.9413677, 15.4077515 ], [ 73.9387907, 15.4077515 ], [ 73.9337883, 15.4081262 ], [ 73.9315998, 15.4082839 ], [ 73.9294523, 15.4083036 ], [ 73.927407, 15.4081656 ], [ 73.924289, 15.4090005 ], [ 73.9219606, 15.4100044 ], [ 73.9206011, 15.4104645 ], [ 73.9220329, 15.4138385 ], [ 73.9189958, 15.4153581 ], [ 73.9170868, 15.4143683 ], [ 73.9150332, 15.4135875 ], [ 73.9142855, 15.4134788 ], [ 73.9136924, 15.4133605 ], [ 73.9128129, 15.4134393 ], [ 73.9122198, 15.4135182 ], [ 73.9111562, 15.4138337 ], [ 73.9099495, 15.4139914 ], [ 73.9085792, 15.4139323 ], [ 73.9077406, 15.413814 ], [ 73.9063294, 15.4140309 ], [ 73.9048977, 15.4142083 ], [ 73.9036501, 15.4144843 ], [ 73.9015418, 15.4148383 ], [ 73.9006307, 15.4149219 ], [ 73.9000599, 15.4149578 ], [ 73.8985259, 15.4150366 ], [ 73.8966443, 15.4154112 ], [ 73.8948854, 15.4156084 ], [ 73.8944354, 15.4159436 ], [ 73.8931264, 15.4185659 ], [ 73.8923083, 15.4203601 ], [ 73.891163, 15.4223909 ], [ 73.8897926, 15.4238105 ], [ 73.8892404, 15.4254863 ], [ 73.8884223, 15.4260778 ], [ 73.8877474, 15.426689 ], [ 73.8869088, 15.4268467 ], [ 73.8859271, 15.4271622 ], [ 73.8852931, 15.4278522 ], [ 73.8853953, 15.4285225 ], [ 73.885518, 15.4295872 ], [ 73.8853749, 15.4307504 ], [ 73.884659, 15.4317756 ], [ 73.8832682, 15.4324656 ], [ 73.8821433, 15.4327022 ], [ 73.8809775, 15.4328599 ], [ 73.8796481, 15.4331951 ], [ 73.8793004, 15.4327022 ], [ 73.8797708, 15.432091 ], [ 73.8807117, 15.4314602 ], [ 73.8806912, 15.430987 ], [ 73.8801799, 15.4306715 ], [ 73.8788505, 15.4309081 ], [ 73.8776642, 15.430987 ], [ 73.8770302, 15.4307307 ], [ 73.8759871, 15.4310461 ], [ 73.8745759, 15.4313221 ], [ 73.8730215, 15.4313024 ], [ 73.8710785, 15.4311447 ], [ 73.870751583065868, 15.431081686126614 ], [ 73.870751583065868, 15.431081686126612 ], [ 73.8694422, 15.4308293 ], [ 73.8682355, 15.430573 ], [ 73.8672947, 15.4302575 ], [ 73.866177, 15.4293696 ], [ 73.8651357, 15.4290489 ], [ 73.8644994, 15.4287004 ], [ 73.8639281, 15.4284913 ], [ 73.863516, 15.4285192 ], [ 73.8631616, 15.4286307 ], [ 73.8626048, 15.4287492 ], [ 73.8620047, 15.4288677 ], [ 73.8615997, 15.4291047 ], [ 73.8614623, 15.4294393 ], [ 73.8615202, 15.4297251 ], [ 73.861672, 15.4301154 ], [ 73.8617588, 15.4305197 ], [ 73.8617371, 15.4316071 ], [ 73.8616286, 15.4325272 ], [ 73.8612382, 15.4331057 ], [ 73.8609055, 15.4333985 ], [ 73.8606018, 15.4332591 ], [ 73.8602764, 15.4331685 ], [ 73.8601173, 15.4329663 ], [ 73.8598642, 15.4331685 ], [ 73.8598353, 15.4335449 ], [ 73.8598209, 15.4337749 ], [ 73.8597558, 15.4341164 ], [ 73.8597196, 15.4344858 ], [ 73.859763, 15.4348344 ], [ 73.8598642, 15.4350644 ], [ 73.8599004, 15.4355662 ], [ 73.8598859, 15.4359914 ], [ 73.8598064, 15.4362702 ], [ 73.8602403, 15.4365212 ], [ 73.860233, 15.4379361 ], [ 73.8601318, 15.4392465 ], [ 73.8600233, 15.4402084 ], [ 73.8598209, 15.4412957 ], [ 73.8596443, 15.4418538 ], [ 73.8592466, 15.4421326 ], [ 73.8589863, 15.4421536 ], [ 73.8585958, 15.4421257 ], [ 73.8579161, 15.4422511 ], [ 73.8573882, 15.4424812 ], [ 73.8571207, 15.4426693 ], [ 73.857164, 15.4428994 ], [ 73.8571351, 15.4431224 ], [ 73.8570339, 15.4432479 ], [ 73.8567446, 15.4431991 ], [ 73.856506, 15.4431851 ], [ 73.8561878, 15.4432548 ], [ 73.8557757, 15.4433385 ], [ 73.8555298, 15.443457 ], [ 73.855566, 15.4439379 ], [ 73.8553057, 15.4446837 ], [ 73.8547199, 15.4456455 ], [ 73.8543907, 15.4461158 ], [ 73.8540635, 15.4462488 ], [ 73.8536749, 15.4461256 ], [ 73.8535368, 15.4459827 ], [ 73.8532812, 15.4459334 ], [ 73.8530715, 15.4458053 ], [ 73.8530102, 15.4458003 ], [ 73.8530255, 15.4459531 ], [ 73.8531738, 15.446165 ], [ 73.8533119, 15.4464115 ], [ 73.8534039, 15.4466825 ], [ 73.853184, 15.4471261 ], [ 73.8527273, 15.44805 ], [ 73.8523006, 15.4488236 ], [ 73.85161, 15.4494614 ], [ 73.8509701, 15.4501374 ], [ 73.8503338, 15.4507821 ], [ 73.8497589, 15.451263 ], [ 73.8490249, 15.4516777 ], [ 73.84862, 15.4521726 ], [ 73.8486006, 15.4523553 ], [ 73.8485766, 15.4525803 ], [ 73.8482837, 15.4525664 ], [ 73.8477956, 15.4525629 ], [ 73.8472931, 15.4525524 ], [ 73.8467833, 15.4524827 ], [ 73.8466567, 15.4524514 ], [ 73.8464145, 15.4524967 ], [ 73.8461506, 15.4525838 ], [ 73.8457962, 15.4523468 ], [ 73.8457312, 15.4522284 ], [ 73.8454925, 15.4518973 ], [ 73.8451165, 15.4515941 ], [ 73.8447947, 15.4514512 ], [ 73.8444115, 15.4513571 ], [ 73.8439631, 15.4513711 ], [ 73.8435618, 15.4513676 ], [ 73.8430737, 15.4513467 ], [ 73.842535, 15.4512073 ], [ 73.8423145, 15.4510261 ], [ 73.8422964, 15.4508309 ], [ 73.8423072, 15.4504476 ], [ 73.8423651, 15.4500224 ], [ 73.8425278, 15.4494927 ], [ 73.8424916, 15.4490989 ], [ 73.8423904, 15.4489839 ], [ 73.8424121, 15.4485065 ], [ 73.8424229, 15.4483497 ], [ 73.8422494, 15.4484542 ], [ 73.8421554, 15.4484124 ], [ 73.8421048, 15.4482869 ], [ 73.8422421, 15.4481545 ], [ 73.8422494, 15.4480569 ], [ 73.8421048, 15.4479872 ], [ 73.8421156, 15.4478792 ], [ 73.842065, 15.4477293 ], [ 73.8419457, 15.4476178 ], [ 73.841801, 15.4475377 ], [ 73.8417215, 15.4476806 ], [ 73.8416456, 15.4476387 ], [ 73.841689, 15.4475237 ], [ 73.8416383, 15.4474819 ], [ 73.841501, 15.4475272 ], [ 73.8414178, 15.4476457 ], [ 73.8412587, 15.4476736 ], [ 73.8410345, 15.4476945 ], [ 73.8408682, 15.4478792 ], [ 73.8403476, 15.4480604 ], [ 73.8401524, 15.4481371 ], [ 73.839986, 15.4481301 ], [ 73.8399571, 15.4480291 ], [ 73.8398595, 15.4480987 ], [ 73.8397908, 15.448266 ], [ 73.8397438, 15.4485448 ], [ 73.8397402, 15.4487469 ], [ 73.8396459, 15.4490098 ], [ 73.839541, 15.4491126 ], [ 73.8393982, 15.4491457 ], [ 73.8392843, 15.4492485 ], [ 73.8392192, 15.4492991 ], [ 73.8391469, 15.4493095 ], [ 73.8391162, 15.4493513 ], [ 73.8391397, 15.4494611 ], [ 73.8391216, 15.4495604 ], [ 73.8389408, 15.4497748 ], [ 73.8385738, 15.4500204 ], [ 73.83846, 15.4502836 ], [ 73.8381743, 15.4506425 ], [ 73.8379574, 15.4508289 ], [ 73.8376844, 15.4509649 ], [ 73.8374856, 15.4509544 ], [ 73.8372289, 15.4509405 ], [ 73.8369812, 15.4509945 ], [ 73.8367697, 15.4510729 ], [ 73.8365835, 15.4511739 ], [ 73.8363665, 15.4512907 ], [ 73.8362038, 15.4513604 ], [ 73.8360773, 15.4513464 ], [ 73.8359598, 15.4513238 ], [ 73.8359019, 15.4513621 ], [ 73.835817, 15.4514249 ], [ 73.8357194, 15.4514179 ], [ 73.8356543, 15.4513569 ], [ 73.8356398, 15.4512646 ], [ 73.8355802, 15.4512018 ], [ 73.8353379, 15.4512071 ], [ 73.8351029, 15.4512419 ], [ 73.8348589, 15.4512071 ], [ 73.8348028, 15.4511286 ], [ 73.8347811, 15.451045 ], [ 73.8347902, 15.450977 ], [ 73.8348191, 15.4509178 ], [ 73.8347793, 15.450876 ], [ 73.8346781, 15.450937 ], [ 73.8346672, 15.4510206 ], [ 73.834669, 15.4510903 ], [ 73.8346202, 15.4512227 ], [ 73.8345841, 15.4513116 ], [ 73.8344178, 15.451451 ], [ 73.8341665, 15.4516113 ], [ 73.8339857, 15.4516444 ], [ 73.8337272, 15.4516287 ], [ 73.8335536, 15.4514789 ], [ 73.8333457, 15.4514649 ], [ 73.8332373, 15.4514928 ], [ 73.8332047, 15.4515451 ], [ 73.8332879, 15.4515904 ], [ 73.8332771, 15.4516566 ], [ 73.8331017, 15.451918 ], [ 73.8328595, 15.4522212 ], [ 73.8326263, 15.452439 ], [ 73.8323334, 15.4526933 ], [ 73.8321002, 15.4528066 ], [ 73.8319194, 15.4527874 ], [ 73.8316971, 15.4527613 ], [ 73.831462, 15.452763 ], [ 73.8312813, 15.4527996 ], [ 73.8311276, 15.4528798 ], [ 73.8310354, 15.4530418 ], [ 73.8308944, 15.4532126 ], [ 73.8306214, 15.4534025 ], [ 73.8303756, 15.4535524 ], [ 73.8300466, 15.453704 ], [ 73.8298278, 15.4537719 ], [ 73.829676, 15.4537911 ], [ 73.8293054, 15.4538102 ], [ 73.829168, 15.4537649 ], [ 73.8290443, 15.45367 ], [ 73.8290009, 15.4535443 ], [ 73.829006, 15.4533644 ], [ 73.8290034, 15.4532486 ], [ 73.8288935, 15.4532289 ], [ 73.8287938, 15.4532831 ], [ 73.828643, 15.4533081 ], [ 73.8285637, 15.4533008 ], [ 73.8284487, 15.4533574 ], [ 73.8283221, 15.4534523 ], [ 73.8281508, 15.4535644 ], [ 73.8280563, 15.4535866 ], [ 73.8279987, 15.4536679 ], [ 73.8279182, 15.4537271 ], [ 73.8277597, 15.4537862 ], [ 73.8276434, 15.4537726 ], [ 73.8273992, 15.4537837 ], [ 73.827233, 15.4537874 ], [ 73.8269186, 15.4538047 ], [ 73.8268355, 15.4538133 ], [ 73.8267869, 15.4537763 ], [ 73.826714, 15.4538293 ], [ 73.8263224, 15.4538844 ], [ 73.8262284, 15.4540151 ], [ 73.8259717, 15.4542224 ], [ 73.8249883, 15.4542642 ], [ 73.8246918, 15.4543374 ], [ 73.8241785, 15.4545814 ], [ 73.8240047, 15.4545567 ], [ 73.8238436, 15.4545419 ], [ 73.8236928, 15.454537 ], [ 73.8235582, 15.454613 ], [ 73.8233323, 15.4545542 ], [ 73.8230204, 15.4544483 ], [ 73.8226241, 15.454436 ], [ 73.8224247, 15.4543004 ], [ 73.8222381, 15.4543054 ], [ 73.8218546, 15.4544409 ], [ 73.8216117, 15.4544286 ], [ 73.8212998, 15.4542832 ], [ 73.821016, 15.4542364 ], [ 73.8207297, 15.4543349 ], [ 73.8205584, 15.4543547 ], [ 73.8201366, 15.4543448 ], [ 73.8199883, 15.4542955 ], [ 73.8199189, 15.4541992 ], [ 73.8198321, 15.4541574 ], [ 73.8197923, 15.4540703 ], [ 73.8197417, 15.4539727 ], [ 73.8196369, 15.4538786 ], [ 73.8194959, 15.4538264 ], [ 73.8193838, 15.4537288 ], [ 73.8192789, 15.453802 ], [ 73.8192283, 15.4540041 ], [ 73.8191488, 15.4541017 ], [ 73.8192645, 15.4541923 ], [ 73.8193223, 15.4543317 ], [ 73.8194091, 15.4544954 ], [ 73.8192175, 15.4544954 ], [ 73.8191271, 15.454492 ], [ 73.8189825, 15.4544641 ], [ 73.8188017, 15.4543003 ], [ 73.818686, 15.454248 ], [ 73.8185884, 15.4541504 ], [ 73.8184907, 15.4540424 ], [ 73.818357, 15.4539274 ], [ 73.8182485, 15.4538089 ], [ 73.8181545, 15.453687 ], [ 73.8180822, 15.4535267 ], [ 73.8180569, 15.4534256 ], [ 73.8179846, 15.4534848 ], [ 73.8179592, 15.4534151 ], [ 73.8178255, 15.453227 ], [ 73.8176989, 15.4531398 ], [ 73.8176049, 15.45322 ], [ 73.8173952, 15.4531886 ], [ 73.8172108, 15.4530632 ], [ 73.8169577, 15.4530318 ], [ 73.8167553, 15.4530353 ], [ 73.8165094, 15.4529621 ], [ 73.8162166, 15.4529795 ], [ 73.8161262, 15.4530562 ], [ 73.8160792, 15.4531712 ], [ 73.8159345, 15.4532862 ], [ 73.8156813, 15.4535321 ], [ 73.8149834, 15.4543108 ], [ 73.8147917, 15.4545079 ], [ 73.8145795, 15.4547051 ], [ 73.8145181, 15.4548234 ], [ 73.8143059, 15.4550821 ], [ 73.8139326, 15.4554098 ], [ 73.8133497, 15.4557794 ], [ 73.8128282, 15.4560505 ], [ 73.8124089, 15.4560998 ], [ 73.8121054, 15.4560341 ], [ 73.8120006, 15.4559356 ], [ 73.8119003, 15.455906 ], [ 73.8118686, 15.4558894 ], [ 73.8118081, 15.4559103 ], [ 73.8117999, 15.4558424 ], [ 73.8118072, 15.4556795 ], [ 73.8119256, 15.4554756 ], [ 73.8119174, 15.4554547 ], [ 73.8118993, 15.4554582 ], [ 73.8117755, 15.4556594 ], [ 73.8117607, 15.4557926 ], [ 73.8115536, 15.4557803 ], [ 73.8114871, 15.4558295 ], [ 73.8113158, 15.4557778 ], [ 73.8110193, 15.4556866 ], [ 73.8106946, 15.455561 ], [ 73.8105028, 15.4554796 ], [ 73.8104466, 15.455386 ], [ 73.8103188, 15.4553022 ], [ 73.8102191, 15.4551716 ], [ 73.8100836, 15.4550041 ], [ 73.8099864, 15.4549572 ], [ 73.8099455, 15.4550115 ], [ 73.8099634, 15.4551051 ], [ 73.8099455, 15.4551667 ], [ 73.8098509, 15.4551766 ], [ 73.80981, 15.45511 ], [ 73.8098177, 15.4550287 ], [ 73.8098688, 15.4549844 ], [ 73.8098841, 15.4549474 ], [ 73.8097844, 15.4549006 ], [ 73.8097614, 15.4549301 ], [ 73.8096924, 15.4549499 ], [ 73.8096694, 15.454834 ], [ 73.8096106, 15.4546985 ], [ 73.8094802, 15.4546147 ], [ 73.8093319, 15.454563 ], [ 73.8091709, 15.4545901 ], [ 73.8090609, 15.4545901 ], [ 73.8089484, 15.4545802 ], [ 73.8088232, 15.4545556 ], [ 73.8087976, 15.4544989 ], [ 73.8087516, 15.4544472 ], [ 73.808634, 15.4544521 ], [ 73.8084473, 15.4543535 ], [ 73.8084192, 15.45425 ], [ 73.8083783, 15.4541342 ], [ 73.8083016, 15.4540751 ], [ 73.808184, 15.4540554 ], [ 73.8079999, 15.4540899 ], [ 73.807844, 15.454186 ], [ 73.8077162, 15.454287 ], [ 73.8076906, 15.4544003 ], [ 73.8076625, 15.4545186 ], [ 73.8073966, 15.4545876 ], [ 73.8071026, 15.4545728 ], [ 73.8070975, 15.4544854 ], [ 73.8070834, 15.4543954 ], [ 73.8070284, 15.4543659 ], [ 73.8069441, 15.4543732 ], [ 73.8068827, 15.4544238 ], [ 73.8068699, 15.4545149 ], [ 73.8068814, 15.4546455 ], [ 73.8067881, 15.4546985 ], [ 73.8066334, 15.4547441 ], [ 73.8061771, 15.4547638 ], [ 73.8055357, 15.4547909 ], [ 73.8045025, 15.4546615 ], [ 73.8043159, 15.4545482 ], [ 73.8041242, 15.4544003 ], [ 73.8038532, 15.4541564 ], [ 73.8035157, 15.4538163 ], [ 73.8033521, 15.453533 ], [ 73.8032063, 15.4532348 ], [ 73.8030248, 15.4530722 ], [ 73.802943, 15.4531239 ], [ 73.802805, 15.4530007 ], [ 73.8027487, 15.4528233 ], [ 73.8027871, 15.4526138 ], [ 73.8028842, 15.4524857 ], [ 73.8030223, 15.4523305 ], [ 73.8031987, 15.45219 ], [ 73.8033265, 15.4520274 ], [ 73.8033776, 15.451606 ], [ 73.8033853, 15.4513029 ], [ 73.8034748, 15.4507041 ], [ 73.803618, 15.4506154 ], [ 73.8040909, 15.4506105 ], [ 73.8040935, 15.450502 ], [ 73.8040296, 15.450502 ], [ 73.8040219, 15.4505538 ], [ 73.8036307, 15.4505784 ], [ 73.803664, 15.4503936 ], [ 73.8035771, 15.4503739 ], [ 73.8034518, 15.4504897 ], [ 73.8033188, 15.4505834 ], [ 73.8032907, 15.4504897 ], [ 73.8032473, 15.4504059 ], [ 73.8031348, 15.4503468 ], [ 73.803012, 15.4503345 ], [ 73.802874, 15.4503591 ], [ 73.8028177, 15.4504478 ], [ 73.8028177, 15.4505883 ], [ 73.8028433, 15.4506893 ], [ 73.8030069, 15.4507632 ], [ 73.8031194, 15.4508101 ], [ 73.8032319, 15.4507928 ], [ 73.8032754, 15.4507534 ], [ 73.8033725, 15.4507953 ], [ 73.8032984, 15.4512906 ], [ 73.8031959, 15.4515076 ], [ 73.803001, 15.4513603 ], [ 73.8026813, 15.4514884 ], [ 73.8024909, 15.4515888 ], [ 73.8022539, 15.4515473 ], [ 73.8022, 15.4516304 ], [ 73.8023257, 15.4516788 ], [ 73.8024909, 15.4517031 ], [ 73.8023796, 15.4517758 ], [ 73.8020599, 15.4520424 ], [ 73.8017869, 15.4520043 ], [ 73.8018372, 15.4518485 ], [ 73.8017905, 15.4516892 ], [ 73.8016792, 15.4516131 ], [ 73.8015212, 15.4517481 ], [ 73.8014314, 15.4518554 ], [ 73.8012302, 15.4518208 ], [ 73.8010901, 15.4519316 ], [ 73.8011009, 15.4520181 ], [ 73.8009249, 15.4520631 ], [ 73.8009069, 15.452257 ], [ 73.8008448, 15.4525147 ], [ 73.8009536, 15.4526378 ], [ 73.8011691, 15.4526153 ], [ 73.801304, 15.4527316 ], [ 73.801496, 15.4528767 ], [ 73.8014601, 15.453126 ], [ 73.8013448, 15.4535114 ], [ 73.8010578, 15.4538772 ], [ 73.8008198, 15.4539697 ], [ 73.8005837, 15.4540122 ], [ 73.8003574, 15.4539257 ], [ 73.800185, 15.4539084 ], [ 73.7999515, 15.4540122 ], [ 73.79993, 15.4538841 ], [ 73.7995887, 15.4538703 ], [ 73.7993373, 15.4539776 ], [ 73.7990284, 15.4540538 ], [ 73.7986105, 15.4541367 ], [ 73.7984703, 15.4542476 ], [ 73.7983955, 15.4543695 ], [ 73.7982634, 15.4545135 ], [ 73.7982835, 15.4546548 ], [ 73.7981714, 15.4547655 ], [ 73.798022, 15.4547351 ], [ 73.7977499, 15.4547892 ], [ 73.7977835, 15.4548874 ], [ 73.7977404, 15.4550287 ], [ 73.7976628, 15.4550259 ], [ 73.7975421, 15.4550813 ], [ 73.7976484, 15.4551505 ], [ 73.7978254, 15.4552827 ], [ 73.7979288, 15.4556456 ], [ 73.797765, 15.4559114 ], [ 73.7974875, 15.4561005 ], [ 73.797253, 15.4561678 ], [ 73.7969847, 15.4559315 ], [ 73.7969128, 15.4559592 ], [ 73.796936, 15.4561392 ], [ 73.7969042, 15.4562694 ], [ 73.7968295, 15.4564217 ], [ 73.7966628, 15.4564882 ], [ 73.7965221, 15.4563581 ], [ 73.7962519, 15.4562196 ], [ 73.7960364, 15.4562445 ], [ 73.7955676, 15.4566652 ], [ 73.7954244, 15.4568898 ], [ 73.7952865, 15.4571944 ], [ 73.795137, 15.4574049 ], [ 73.794956, 15.4575656 ], [ 73.7946093, 15.4577218 ], [ 73.7945623, 15.4579034 ], [ 73.794456, 15.4580253 ], [ 73.7942382, 15.4582239 ], [ 73.7941026, 15.4584075 ], [ 73.7938399, 15.4586699 ], [ 73.7936418, 15.4586563 ], [ 73.7933727, 15.4587454 ], [ 73.7931963, 15.458925 ], [ 73.7931513, 15.4590367 ], [ 73.7926676, 15.4592616 ], [ 73.7925815, 15.4592607 ], [ 73.7924906, 15.4592605 ], [ 73.7923814, 15.4592466 ], [ 73.7921055, 15.4591719 ], [ 73.7919245, 15.4592106 ], [ 73.7916084, 15.4594544 ], [ 73.7913728, 15.4596039 ], [ 73.7914274, 15.4597784 ], [ 73.79139, 15.4598255 ], [ 73.7914303, 15.4599501 ], [ 73.7914676, 15.4600387 ], [ 73.7913958, 15.4601661 ], [ 73.7912927, 15.4602055 ], [ 73.7912263, 15.4603157 ], [ 73.7911831, 15.4607089 ], [ 73.7910538, 15.4608751 ], [ 73.7909653, 15.4610511 ], [ 73.790597, 15.4613293 ], [ 73.7903757, 15.4613736 ], [ 73.7901897, 15.4613321 ], [ 73.7899677, 15.4612961 ], [ 73.7898556, 15.4613459 ], [ 73.7897349, 15.4613376 ], [ 73.7895025, 15.4612594 ], [ 73.7893269, 15.4612739 ], [ 73.7891976, 15.4613515 ], [ 73.7890855, 15.4613238 ], [ 73.7889936, 15.4613071 ], [ 73.7887465, 15.461321 ], [ 73.7886746, 15.461429 ], [ 73.7885827, 15.4614401 ], [ 73.7884936, 15.4613958 ], [ 73.7883212, 15.4614235 ], [ 73.7882274, 15.4614883 ], [ 73.7879894, 15.4614868 ], [ 73.7877235, 15.461886 ], [ 73.7874965, 15.4623374 ], [ 73.7874419, 15.4625451 ], [ 73.7872977, 15.4631199 ], [ 73.7873902, 15.4635172 ], [ 73.7875058, 15.4637967 ], [ 73.7876976, 15.4640738 ], [ 73.7878959, 15.4642511 ], [ 73.7881523, 15.464261 ], [ 73.7887493, 15.4646222 ], [ 73.789199, 15.4647636 ], [ 73.7894447, 15.4645973 ], [ 73.7897234, 15.4645668 ], [ 73.7899849, 15.4646388 ], [ 73.7902811, 15.4646136 ], [ 73.7911991, 15.4640928 ], [ 73.7917478, 15.4635601 ], [ 73.7923867, 15.4632204 ], [ 73.7925338, 15.4629412 ], [ 73.7926386, 15.4628054 ], [ 73.7929367, 15.4627223 ], [ 73.7934427, 15.4624288 ], [ 73.7935401, 15.4623 ], [ 73.7937592, 15.4619954 ], [ 73.7939639, 15.4620057 ], [ 73.7943447, 15.4621511 ], [ 73.7945135, 15.4619954 ], [ 73.7944237, 15.4619227 ], [ 73.794913, 15.4616359 ], [ 73.7952902, 15.4614227 ], [ 73.7957067, 15.4609948 ], [ 73.7963058, 15.4604687 ], [ 73.7965537, 15.460531 ], [ 73.7967512, 15.4606764 ], [ 73.7969128, 15.4606937 ], [ 73.7969164, 15.4606037 ], [ 73.7970206, 15.4605345 ], [ 73.7969076, 15.4604004 ], [ 73.7969954, 15.4602437 ], [ 73.7972861, 15.4600647 ], [ 73.7977719, 15.4599394 ], [ 73.7991898, 15.4602719 ], [ 73.7999838, 15.4607915 ], [ 73.8007776, 15.4613111 ], [ 73.8012761, 15.4616391 ], [ 73.8019811, 15.4624353 ], [ 73.802796, 15.4633556 ], [ 73.8030526, 15.4638549 ], [ 73.8040715, 15.4658376 ], [ 73.8044898, 15.4667814 ], [ 73.8046829, 15.4673397 ], [ 73.8048566, 15.4679028 ], [ 73.8050707, 15.468467 ], [ 73.805140138991931, 15.46865 ], [ 73.8054983, 15.4695939 ], [ 73.805775, 15.4699686 ], [ 73.8066813, 15.4755774 ], [ 73.8067598, 15.4768677 ], [ 73.8067534, 15.4776626 ], [ 73.8066314, 15.4792101 ], [ 73.8065701, 15.4797897 ], [ 73.8067316, 15.4809766 ], [ 73.8065234, 15.4832334 ], [ 73.8065867, 15.4838663 ], [ 73.8068026, 15.4846207 ], [ 73.8071198, 15.4849827 ], [ 73.8076902, 15.4852993 ], [ 73.8082985, 15.4858389 ], [ 73.8084462, 15.4861124 ], [ 73.8090248, 15.4871495 ], [ 73.8093774, 15.4876168 ], [ 73.8096563, 15.4880225 ], [ 73.8102898, 15.4887361 ], [ 73.8108063, 15.4890955 ], [ 73.8117072, 15.4897013 ], [ 73.8125001, 15.4904083 ], [ 73.8128389, 15.4907307 ], [ 73.813143, 15.4910662 ], [ 73.8134055, 15.4912382 ], [ 73.8137818, 15.4915903 ], [ 73.8141145, 15.4918992 ], [ 73.8150992, 15.4928506 ], [ 73.8153029, 15.4929573 ], [ 73.8156087, 15.4932472 ], [ 73.8158886, 15.493595 ], [ 73.8162637, 15.4939832 ], [ 73.8168263, 15.4949393 ], [ 73.8172477, 15.4954258 ], [ 73.8175312, 15.4960211 ], [ 73.8176687, 15.4964127 ], [ 73.8178776, 15.4966762 ], [ 73.8179667, 15.4971272 ], [ 73.8180853, 15.4978272 ], [ 73.8181347, 15.4981463 ], [ 73.8181643, 15.4985368 ], [ 73.8180556, 15.498894 ], [ 73.818021, 15.4992178 ], [ 73.8180655, 15.4995417 ], [ 73.8181594, 15.4998655 ], [ 73.8183175, 15.5001249 ], [ 73.8185806, 15.5003424 ], [ 73.8190379, 15.5005915 ], [ 73.8194868, 15.5006788 ], [ 73.8198217, 15.5007653 ], [ 73.8201551, 15.5009651 ], [ 73.820441, 15.5007906 ], [ 73.8206412, 15.5007372 ], [ 73.8208173, 15.500621 ], [ 73.8208857, 15.5004639 ], [ 73.8208857, 15.5003634 ], [ 73.8208466, 15.5003005 ], [ 73.8207847, 15.5002817 ], [ 73.8206705, 15.5002565 ], [ 73.8205336, 15.500112 ], [ 73.8204299, 15.4999641 ], [ 73.8203249, 15.4998167 ], [ 73.8201796, 15.4997683 ], [ 73.8198955, 15.4999103 ], [ 73.819677, 15.499684 ], [ 73.8196607, 15.4995524 ], [ 73.8196168, 15.4991964 ], [ 73.8197218, 15.4990213 ], [ 73.8198563, 15.4988945 ], [ 73.8202198, 15.4992779 ], [ 73.8201725, 15.4993194 ], [ 73.8203661, 15.499535 ], [ 73.8204177, 15.4994915 ], [ 73.8209856, 15.5001278 ], [ 73.8209555, 15.5001921 ], [ 73.8212244, 15.500501 ], [ 73.821631, 15.500588 ], [ 73.821646, 15.5005258 ], [ 73.822968, 15.5008198 ], [ 73.8237635, 15.5009769 ], [ 73.8254412, 15.5012416 ], [ 73.8254018, 15.5016951 ], [ 73.8254711, 15.5017023 ], [ 73.8254767, 15.5016428 ], [ 73.8257217, 15.5016701 ], [ 73.8257288, 15.5016209 ], [ 73.82576, 15.5016236 ], [ 73.8257841, 15.5016729 ], [ 73.825973, 15.5017005 ], [ 73.8259956, 15.5016619 ], [ 73.8260665, 15.5016729 ], [ 73.8260637, 15.5017016 ], [ 73.8262445, 15.5017222 ], [ 73.8262709, 15.5016633 ], [ 73.8263135, 15.5016647 ], [ 73.8263362, 15.5017289 ], [ 73.826498, 15.501744 ], [ 73.8265193, 15.5016989 ], [ 73.8265746, 15.5017016 ], [ 73.8265959, 15.5017522 ], [ 73.8267194, 15.5017645 ], [ 73.8267435, 15.5017262 ], [ 73.8267932, 15.5017248 ], [ 73.8268201, 15.5017795 ], [ 73.8268783, 15.501785 ], [ 73.8269024, 15.5017385 ], [ 73.8270245, 15.5017467 ], [ 73.8273538, 15.5017016 ], [ 73.8273538, 15.5017481 ], [ 73.8273254, 15.5017768 ], [ 73.8270316, 15.5018124 ], [ 73.8270401, 15.5018643 ], [ 73.8278349, 15.5017809 ], [ 73.8278278, 15.5017317 ], [ 73.8274375, 15.5017727 ], [ 73.8274048, 15.5017399 ], [ 73.8273992, 15.5016961 ], [ 73.8281769, 15.5016223 ], [ 73.8290412, 15.5015047 ], [ 73.8290128, 15.50132 ], [ 73.8291817, 15.5012913 ], [ 73.8291732, 15.5012284 ], [ 73.8294542, 15.5011778 ], [ 73.8294457, 15.5011477 ], [ 73.8295819, 15.5011176 ], [ 73.8296543, 15.5011286 ], [ 73.829985, 15.5011135 ], [ 73.8302362, 15.5010793 ], [ 73.8308152, 15.5007539 ], [ 73.8312356, 15.5005499 ], [ 73.8315206, 15.5004297 ], [ 73.8315461, 15.5004844 ], [ 73.8315262, 15.5005323 ], [ 73.8312396, 15.5006376 ], [ 73.8312552, 15.5006814 ], [ 73.8315901, 15.5005583 ], [ 73.8316156, 15.5006198 ], [ 73.8317902, 15.5005515 ], [ 73.8317675, 15.5004981 ], [ 73.8320073, 15.5004106 ], [ 73.8319889, 15.5003696 ], [ 73.8318569, 15.5004188 ], [ 73.8318158, 15.5003203 ], [ 73.8322543, 15.5001425 ], [ 73.8329057, 15.5000249 ], [ 73.8329014, 15.4999935 ], [ 73.834481, 15.4997131 ], [ 73.8350459, 15.499616 ], [ 73.8355696, 15.4995914 ], [ 73.8355396, 15.4999073 ], [ 73.836461, 15.4999823 ], [ 73.8364838, 15.4997083 ], [ 73.836579, 15.4997324 ], [ 73.836586, 15.499774 ], [ 73.8366246, 15.4998359 ], [ 73.8366643, 15.4998753 ], [ 73.8366771, 15.4999146 ], [ 73.8367086, 15.4999394 ], [ 73.8367565, 15.4999338 ], [ 73.8367927, 15.4999 ], [ 73.8368219, 15.499864 ], [ 73.8368884, 15.4998066 ], [ 73.8369199, 15.4997729 ], [ 73.8370495, 15.4998044 ], [ 73.8371441, 15.4998168 ], [ 73.8371511, 15.4998831 ], [ 73.8371616, 15.4999293 ], [ 73.8371826, 15.4999574 ], [ 73.8372223, 15.4999911 ], [ 73.8372807, 15.5000395 ], [ 73.83729, 15.500089 ], [ 73.8372515, 15.5001036 ], [ 73.8372177, 15.5001329 ], [ 73.837269, 15.5001948 ], [ 73.8373321, 15.5001835 ], [ 73.8374593, 15.5001149 ], [ 73.8375049, 15.499756 ], [ 73.837764, 15.4997706 ], [ 73.8377454, 15.500188 ], [ 73.8378732, 15.5001942 ], [ 73.8378973, 15.4997794 ], [ 73.8379347, 15.4994572 ], [ 73.8380347, 15.49925 ], [ 73.8381874, 15.4991341 ], [ 73.8382782, 15.4990595 ], [ 73.8414229, 15.4997829 ], [ 73.8434309, 15.5002487 ], [ 73.8458153, 15.5008784 ], [ 73.8501026, 15.5019221 ], [ 73.8509528, 15.5021284 ], [ 73.8550028, 15.5028171 ], [ 73.8586321, 15.5032477 ], [ 73.8596462, 15.5033786 ], [ 73.8619047, 15.503883 ], [ 73.862279, 15.504115 ], [ 73.8624263, 15.5044798 ], [ 73.8628115, 15.5049663 ], [ 73.8634576, 15.5054403 ], [ 73.8642476, 15.5059764 ], [ 73.8656785, 15.505975 ], [ 73.8663073, 15.5057233 ], [ 73.8667257, 15.5054485 ], [ 73.8674237, 15.50514 ], [ 73.8681442, 15.5045596 ], [ 73.8683706, 15.5041597 ], [ 73.8688123, 15.5039186 ], [ 73.8690794, 15.5036623 ], [ 73.8691688, 15.5034923 ], [ 73.8699513, 15.5031237 ], [ 73.870551583065861, 15.502938061701531 ], [ 73.8710171, 15.5027941 ], [ 73.8720231, 15.5025721 ], [ 73.8742478, 15.5023145 ], [ 73.8751998, 15.5018902 ], [ 73.8765408, 15.5011772 ], [ 73.877112, 15.5008843 ], [ 73.8776769, 15.5006088 ], [ 73.8783309, 15.5002768 ], [ 73.8793332, 15.4999925 ], [ 73.8803886, 15.4998734 ], [ 73.8823045, 15.4999329 ], [ 73.8863644, 15.5000841 ], [ 73.8880663, 15.4999421 ], [ 73.8892769, 15.4999636 ], [ 73.8922113, 15.5004304 ], [ 73.8928373, 15.5005778 ], [ 73.8956624, 15.5009628 ], [ 73.8964139, 15.5011427 ], [ 73.8972549, 15.5012285 ], [ 73.8984343, 15.5013598 ], [ 73.8989198, 15.5015678 ], [ 73.8998462, 15.5017835 ], [ 73.9003016, 15.5020037 ], [ 73.900833, 15.5021513 ], [ 73.9018243, 15.5027002 ], [ 73.9021394, 15.5028048 ], [ 73.902897, 15.5030717 ], [ 73.9037846, 15.5034823 ], [ 73.9042579, 15.5035962 ], [ 73.9049557, 15.5039276 ], [ 73.9050235, 15.5038079 ], [ 73.9053386, 15.5038601 ], [ 73.9053522, 15.5040385 ], [ 73.9059771, 15.5043448 ], [ 73.9068446, 15.5044289 ], [ 73.9083133, 15.5047354 ], [ 73.90922, 15.504771 ], [ 73.9102536, 15.5050289 ], [ 73.9105247, 15.5052639 ], [ 73.9113466, 15.5055219 ], [ 73.9118826, 15.5056923 ], [ 73.9131129, 15.5065356 ], [ 73.9133697, 15.5067663 ], [ 73.9140672, 15.507159 ], [ 73.9145773, 15.507378 ], [ 73.9151416, 15.5076851 ], [ 73.9154982, 15.5078166 ], [ 73.9159859, 15.5079816 ], [ 73.9166708, 15.508429 ], [ 73.9177334, 15.5089779 ], [ 73.9182056, 15.5093152 ], [ 73.9186096, 15.5097054 ], [ 73.9192774, 15.5102983 ], [ 73.9204764, 15.5113688 ], [ 73.9210688, 15.5122917 ], [ 73.9217248, 15.5130414 ], [ 73.9220995, 15.5136938 ], [ 73.9224011, 15.5151336 ], [ 73.9228095, 15.516666 ], [ 73.923379, 15.518043 ], [ 73.9241526, 15.5187988 ], [ 73.925023, 15.5196271 ], [ 73.9256041, 15.5201648 ], [ 73.9264311, 15.5210942 ], [ 73.9269361, 15.5218448 ], [ 73.9272199, 15.5222068 ], [ 73.9275332, 15.5228056 ], [ 73.9280708, 15.5227896 ], [ 73.929019, 15.5225281 ], [ 73.9305158, 15.5221633 ], [ 73.9312495, 15.5218693 ], [ 73.9318195, 15.5215733 ], [ 73.9322526, 15.5212131 ], [ 73.9326025, 15.5210948 ], [ 73.9331075, 15.520505 ], [ 73.9336125, 15.5198595 ], [ 73.9356879, 15.518296 ], [ 73.9362212, 15.5179116 ], [ 73.9368381, 15.5174898 ], [ 73.9388869, 15.5162503 ], [ 73.9396051, 15.5158175 ], [ 73.9396918, 15.5163864 ], [ 73.9387924, 15.5168528 ], [ 73.9378175, 15.5175334 ], [ 73.9366411, 15.5182685 ], [ 73.9357761, 15.518723 ], [ 73.9348286, 15.5195393 ], [ 73.9343427, 15.5197672 ], [ 73.9337973, 15.5203066 ], [ 73.9327528, 15.5216022 ], [ 73.9324313, 15.5217958 ], [ 73.9320517, 15.5221578 ], [ 73.9316358, 15.5221953 ], [ 73.9305044, 15.5226196 ], [ 73.9296876, 15.5228353 ], [ 73.9288884, 15.5229333 ], [ 73.928462, 15.523023 ], [ 73.9282366, 15.5232888 ], [ 73.9281295, 15.5238371 ], [ 73.9283224, 15.5244013 ], [ 73.9287129, 15.5251018 ], [ 73.9295041, 15.5258492 ], [ 73.9302443, 15.5262125 ], [ 73.930495, 15.5260651 ], [ 73.9309069, 15.5260554 ], [ 73.9316102, 15.5263749 ], [ 73.9320924, 15.5267814 ], [ 73.9328147, 15.5274717 ], [ 73.9329497, 15.5278991 ], [ 73.9328359, 15.5282431 ], [ 73.9332038, 15.5290278 ], [ 73.9332973, 15.5294842 ], [ 73.9335544, 15.5305891 ], [ 73.9333208, 15.5306565 ], [ 73.9331255, 15.5310383 ], [ 73.9327901, 15.5315025 ], [ 73.9326938, 15.5316785 ], [ 73.9323172, 15.5322 ], [ 73.931238, 15.5329351 ], [ 73.9307068, 15.5332864 ], [ 73.9302157, 15.5334288 ], [ 73.9298321, 15.5334562 ], [ 73.9294828, 15.533571 ], [ 73.9290823, 15.534052 ], [ 73.92897, 15.5344277 ], [ 73.9292212, 15.5348388 ], [ 73.9295686, 15.5351979 ], [ 73.9298366, 15.535459 ], [ 73.9303226, 15.5356826 ], [ 73.9308427, 15.5357889 ], [ 73.9315434, 15.5358644 ], [ 73.932595, 15.5360009 ], [ 73.932852, 15.5359922 ], [ 73.933157, 15.5361085 ], [ 73.9334125, 15.5362624 ], [ 73.9341642, 15.5367267 ], [ 73.9344925, 15.5369856 ], [ 73.9359467, 15.5377402 ], [ 73.9360506, 15.5379612 ], [ 73.9362516, 15.5379727 ], [ 73.9364917, 15.5381868 ], [ 73.9376584, 15.5390935 ], [ 73.9393729, 15.5404384 ], [ 73.9414233, 15.5422098 ], [ 73.94194, 15.5428003 ], [ 73.9420696, 15.5433161 ], [ 73.9423342, 15.543575 ], [ 73.9424648, 15.5440908 ], [ 73.943262, 15.5440948 ], [ 73.9433919, 15.5446106 ], [ 73.9440521, 15.5455149 ], [ 73.9448485, 15.545648 ], [ 73.9449783, 15.546164 ], [ 73.945111, 15.5462929 ], [ 73.9456425, 15.5462955 ], [ 73.9459095, 15.546039 ], [ 73.946493, 15.5474348 ], [ 73.9484854, 15.549008 ], [ 73.9502792, 15.5489263 ], [ 73.9521421, 15.5468165 ], [ 73.9535305, 15.5458133 ], [ 73.9551502, 15.5440298 ], [ 73.9572695, 15.5412862 ], [ 73.9580323, 15.5398422 ], [ 73.9590129, 15.5388954 ], [ 73.9605627, 15.5377697 ], [ 73.9614043, 15.5375252 ], [ 73.9641686, 15.5357752 ], [ 73.9663895, 15.5328333 ], [ 73.9682091, 15.5275901 ], [ 73.9692726, 15.5242006 ], [ 73.9719723, 15.5221511 ], [ 73.9763901, 15.5200228 ], [ 73.9818714, 15.5187615 ], [ 73.9858802, 15.5179733 ], [ 73.9898071, 15.5164755 ], [ 73.9925886, 15.5145836 ], [ 73.995043, 15.5129282 ], [ 73.9957793, 15.5112727 ], [ 73.9966792, 15.5077253 ], [ 73.9983154, 15.503153 ], [ 73.9995425, 15.500788 ], [ 74.001506, 15.4988959 ], [ 74.0024804, 15.5015016 ], [ 74.0002684, 15.5024642 ], [ 73.9994912, 15.5047109 ], [ 73.9996139, 15.5074701 ], [ 73.9990822, 15.5103474 ], [ 73.9971187, 15.513816 ], [ 73.9947578, 15.5155957 ], [ 73.9915965, 15.5173633 ], [ 73.9895512, 15.5193734 ], [ 73.9868515, 15.5206347 ], [ 73.9825973, 15.5228812 ], [ 73.9803066, 15.5233148 ], [ 73.9788172, 15.5242966 ], [ 73.975057, 15.5257737 ], [ 73.9719621, 15.5266655 ], [ 73.9704001, 15.5280311 ], [ 73.9693589, 15.5327408 ], [ 73.9685857, 15.5350849 ], [ 73.9680335, 15.5373707 ], [ 73.9670517, 15.5390653 ], [ 73.9659064, 15.539755 ], [ 73.9649273, 15.5406922 ], [ 73.964661, 15.5408202 ], [ 73.9646583, 15.5413354 ], [ 73.9641263, 15.5414612 ], [ 73.9630588, 15.5423584 ], [ 73.9629229, 15.5428731 ], [ 73.9619881, 15.5438992 ], [ 73.9614567, 15.5438967 ], [ 73.961454, 15.5444119 ], [ 73.9598583, 15.544662 ], [ 73.9598556, 15.5451772 ], [ 73.9593236, 15.545303 ], [ 73.9587895, 15.5458158 ], [ 73.9582575, 15.5459426 ], [ 73.9581202, 15.5467149 ], [ 73.9577194, 15.5472282 ], [ 73.9566551, 15.5474807 ], [ 73.9563843, 15.54851 ], [ 73.9558528, 15.5485074 ], [ 73.9558502, 15.5490228 ], [ 73.9534565, 15.5493974 ], [ 73.9521238, 15.5501639 ], [ 73.951324, 15.5506754 ], [ 73.9499141, 15.5506289 ], [ 73.9462762, 15.5503936 ], [ 73.9460112, 15.5502639 ], [ 73.9458804, 15.5497481 ], [ 73.9452204, 15.5489721 ], [ 73.9446897, 15.5488402 ], [ 73.9433675, 15.5475457 ], [ 73.9428373, 15.5472857 ], [ 73.9420433, 15.5466381 ], [ 73.9417816, 15.5458642 ], [ 73.9412835, 15.545375 ], [ 73.9401264, 15.5445516 ], [ 73.9392691, 15.5440232 ], [ 73.9381435, 15.5433205 ], [ 73.9370719, 15.5427057 ], [ 73.9353166, 15.5417333 ], [ 73.9339052, 15.541017 ], [ 73.9329041, 15.5404445 ], [ 73.931009, 15.5395018 ], [ 73.930066, 15.5389162 ], [ 73.9295943, 15.5387202 ], [ 73.9291746, 15.5381985 ], [ 73.9281805, 15.5378993 ], [ 73.9267001, 15.5377511 ], [ 73.9259691, 15.5380054 ], [ 73.9253409, 15.5392692 ], [ 73.9247678, 15.5399803 ], [ 73.9240477, 15.5404775 ], [ 73.9231403, 15.5408563 ], [ 73.9226172, 15.540819 ], [ 73.9213433, 15.5412562 ], [ 73.9203673, 15.541867 ], [ 73.9194154, 15.543651 ], [ 73.9184799, 15.5454156 ], [ 73.9174887, 15.5464104 ], [ 73.9167492, 15.5469519 ], [ 73.9157908, 15.5474112 ], [ 73.9143987, 15.5480496 ], [ 73.9135963, 15.5484215 ], [ 73.9129462, 15.5487669 ], [ 73.9120181, 15.5492754 ], [ 73.9122177, 15.5494677 ], [ 73.911923, 15.5495777 ], [ 73.9117328, 15.5494036 ], [ 73.9108676, 15.5496876 ], [ 73.9109342, 15.5498616 ], [ 73.910725, 15.5499349 ], [ 73.9101545, 15.5497792 ], [ 73.9091181, 15.5496235 ], [ 73.908348, 15.5492479 ], [ 73.9078821, 15.54868 ], [ 73.9075684, 15.547938 ], [ 73.9071025, 15.5473518 ], [ 73.9063703, 15.5469304 ], [ 73.9056572, 15.5467926 ], [ 73.9032588, 15.5465621 ], [ 73.9018273, 15.5464029 ], [ 73.9006689, 15.5461125 ], [ 73.9003382, 15.5459909 ], [ 73.8995791, 15.5455852 ], [ 73.8987263, 15.5449966 ], [ 73.89777, 15.5440457 ], [ 73.8971275, 15.5422807 ], [ 73.8969384, 15.54136 ], [ 73.8968777, 15.5405241 ], [ 73.8973132, 15.539217 ], [ 73.8973916, 15.5376903 ], [ 73.8967845, 15.5362305 ], [ 73.8952371, 15.5358838 ], [ 73.8943093, 15.5354648 ], [ 73.8927565, 15.5345749 ], [ 73.8912363, 15.5333408 ], [ 73.8901364, 15.5318658 ], [ 73.8886715, 15.5297753 ], [ 73.8873581, 15.5278623 ], [ 73.8863152, 15.5264277 ], [ 73.8853103, 15.5245782 ], [ 73.8837702, 15.5225863 ], [ 73.8829818, 15.5217606 ], [ 73.881402, 15.520209 ], [ 73.8790838, 15.5188252 ], [ 73.8775463, 15.5180316 ], [ 73.875694, 15.5170068 ], [ 73.8740602, 15.5154763 ], [ 73.8716779, 15.5135889 ], [ 73.8708407, 15.5130963 ], [ 73.870751583065868, 15.513035301999333 ], [ 73.870397, 15.5127926 ], [ 73.8676782, 15.5114951 ], [ 73.8648173, 15.5108233 ], [ 73.8605381, 15.5103137 ], [ 73.8571965, 15.5099894 ], [ 73.8543116, 15.5098504 ], [ 73.851619, 15.5098967 ], [ 73.8506815, 15.5102674 ], [ 73.8500324, 15.5103832 ], [ 73.8495275, 15.5101515 ], [ 73.8480851, 15.5099199 ], [ 73.8469071, 15.5101979 ], [ 73.8458493, 15.5111708 ], [ 73.8453445, 15.5125144 ], [ 73.8457291, 15.5137189 ], [ 73.846859, 15.5155953 ], [ 73.8478687, 15.5174253 ], [ 73.8497439, 15.5200891 ], [ 73.8512825, 15.5217338 ], [ 73.8524845, 15.522614 ], [ 73.8547203, 15.5232626 ], [ 73.8568359, 15.5231931 ], [ 73.8583745, 15.5230309 ], [ 73.8603458, 15.5231931 ], [ 73.8619325, 15.5235174 ], [ 73.864244, 15.5246382 ], [ 73.8655395, 15.5252584 ], [ 73.8641583, 15.526604 ], [ 73.8616877, 15.5250676 ], [ 73.8605238, 15.5249174 ], [ 73.8586549, 15.525141 ], [ 73.8561527, 15.5252188 ], [ 73.8549507, 15.5250534 ], [ 73.8536381, 15.5246144 ], [ 73.8521915, 15.5239817 ], [ 73.8516404, 15.5236395 ], [ 73.8508695, 15.5233017 ], [ 73.8500064, 15.5226626 ], [ 73.849783, 15.5223969 ], [ 73.8497036, 15.5222339 ], [ 73.8495067, 15.5221341 ], [ 73.849448, 15.5219444 ], [ 73.8490195, 15.521447 ], [ 73.8481601, 15.5204778 ], [ 73.8469002, 15.5188122 ], [ 73.8456458, 15.5161892 ], [ 73.8453675, 15.5154081 ], [ 73.8442444, 15.5138319 ], [ 73.8435217, 15.5122368 ], [ 73.8431457, 15.5108205 ], [ 73.8433556, 15.5100582 ], [ 73.8434924, 15.5095453 ], [ 73.8435656, 15.5092771 ], [ 73.8435949, 15.5088631 ], [ 73.8435558, 15.5087172 ], [ 73.8434093, 15.5084019 ], [ 73.8433117, 15.5080773 ], [ 73.8430578, 15.5077008 ], [ 73.8426085, 15.5068068 ], [ 73.8421593, 15.5064586 ], [ 73.8417002, 15.5061669 ], [ 73.8408213, 15.5060446 ], [ 73.8395517, 15.5059316 ], [ 73.838243, 15.5057905 ], [ 73.8378816, 15.505574 ], [ 73.8372957, 15.5053105 ], [ 73.8359577, 15.5049153 ], [ 73.8358112, 15.5048494 ], [ 73.8353522, 15.5049153 ], [ 73.8347369, 15.505047 ], [ 73.8342876, 15.5049717 ], [ 73.8332928, 15.5050051 ], [ 73.8325854, 15.5055561 ], [ 73.8317999, 15.506313 ], [ 73.8309905, 15.506313 ], [ 73.8298242, 15.5059919 ], [ 73.8286102, 15.5057855 ], [ 73.828515, 15.5052121 ], [ 73.828158, 15.5050286 ], [ 73.8272296, 15.5055561 ], [ 73.8260871, 15.5053038 ], [ 73.825492, 15.5057167 ], [ 73.8246589, 15.5060148 ], [ 73.824159, 15.5058084 ], [ 73.823683, 15.5064048 ], [ 73.8233259, 15.5076204 ], [ 73.8224452, 15.5087443 ], [ 73.8210646, 15.5100058 ], [ 73.8198031, 15.5106251 ], [ 73.8178512, 15.5109462 ], [ 73.816066, 15.5107168 ], [ 73.8146257, 15.5102041 ], [ 73.8141376, 15.5098473 ], [ 73.8138599, 15.5093527 ], [ 73.8141123, 15.5089148 ], [ 73.8137925, 15.5082011 ], [ 73.8134896, 15.5073983 ], [ 73.812446, 15.5066766 ], [ 73.8117728, 15.5062144 ], [ 73.8115708, 15.5056305 ], [ 73.8114951, 15.5042762 ], [ 73.8115708, 15.503295 ], [ 73.8117307, 15.5023056 ], [ 73.8120252, 15.5017136 ], [ 73.812, 15.5006756 ], [ 73.8118653, 15.49967 ], [ 73.8111079, 15.4980643 ], [ 73.8104178, 15.497156 ], [ 73.8100055, 15.4963856 ], [ 73.8096941, 15.4959558 ], [ 73.8091892, 15.4957125 ], [ 73.8085327, 15.4957368 ], [ 73.8076323, 15.4958503 ], [ 73.8070347, 15.4959639 ], [ 73.8064204, 15.4959639 ], [ 73.8056377, 15.4958098 ], [ 73.8051075, 15.4954773 ], [ 73.804468, 15.4953881 ], [ 73.8038789, 15.4954124 ], [ 73.80297, 15.4956962 ], [ 73.8022967, 15.4958098 ], [ 73.8016908, 15.4958098 ], [ 73.801169, 15.4957206 ], [ 73.8008155, 15.4959395 ], [ 73.8004116, 15.4963937 ], [ 73.8000497, 15.4966613 ], [ 73.7996626, 15.4967181 ], [ 73.7993007, 15.4967181 ], [ 73.7990651, 15.4965072 ], [ 73.7990398, 15.4968316 ], [ 73.7983582, 15.497375 ], [ 73.797323, 15.4981211 ], [ 73.7967087, 15.4985509 ], [ 73.795682, 15.498932 ], [ 73.794731, 15.4990374 ], [ 73.7938979, 15.4990131 ], [ 73.7932498, 15.499297 ], [ 73.7924251, 15.4995727 ], [ 73.7916256, 15.4996781 ], [ 73.7908345, 15.4998241 ], [ 73.7899341, 15.4999295 ], [ 73.7891177, 15.499889 ], [ 73.7880069, 15.4996943 ], [ 73.7873505, 15.4994591 ], [ 73.7868034, 15.4989077 ], [ 73.7860544, 15.4982589 ], [ 73.7854906, 15.4976345 ], [ 73.7849351, 15.4971722 ], [ 73.7844134, 15.4971722 ], [ 73.7836644, 15.4976345 ], [ 73.7830332, 15.497821 ], [ 73.782301, 15.4979589 ], [ 73.781552, 15.4979751 ], [ 73.7808451, 15.498486 ], [ 73.7797679, 15.499151 ], [ 73.7792798, 15.4994186 ], [ 73.7788085, 15.4996213 ], [ 73.7783864, 15.5000831 ], [ 73.7779893, 15.5003669 ], [ 73.7777066, 15.5005689 ], [ 73.7774567, 15.5009273 ], [ 73.7773907, 15.5015218 ], [ 73.7777314, 15.5025437 ], [ 73.7782914, 15.5034695 ], [ 73.7787334, 15.5051051 ], [ 73.779853, 15.508298 ], [ 73.7805166, 15.5112956 ], [ 73.7821168, 15.5142114 ], [ 73.7832637, 15.5164025 ], [ 73.7836783, 15.5174927 ], [ 73.7838951, 15.5177294 ], [ 73.7839734, 15.518224 ], [ 73.7840399, 15.5187776 ], [ 73.7840174, 15.5195095 ], [ 73.7840646, 15.5203138 ], [ 73.7842379, 15.5208829 ], [ 73.7846123, 15.5213512 ], [ 73.7850522, 15.5216272 ], [ 73.7856938, 15.5217817 ], [ 73.7863107, 15.5219347 ], [ 73.7870467, 15.5217497 ], [ 73.7877403, 15.5212721 ], [ 73.7882526, 15.5209304 ], [ 73.7890363, 15.5207966 ], [ 73.7899933, 15.52058 ], [ 73.790746, 15.5202704 ], [ 73.7910356, 15.5199918 ], [ 73.7911059, 15.5193488 ], [ 73.7907417, 15.5186624 ], [ 73.7899821, 15.5177289 ], [ 73.7899477, 15.5170791 ], [ 73.7897262, 15.5163953 ], [ 73.7896275, 15.5157631 ], [ 73.7896945, 15.5151434 ], [ 73.7902122, 15.5139251 ], [ 73.7905974, 15.5128913 ], [ 73.7909868, 15.5122348 ], [ 73.7913581, 15.5116083 ], [ 73.7917663, 15.5110821 ], [ 73.7926895, 15.5105476 ], [ 73.7939271, 15.5100385 ], [ 73.7945869, 15.5097754 ], [ 73.7950375, 15.5096549 ], [ 73.7954704, 15.5096291 ], [ 73.7958663, 15.5096772 ], [ 73.796215, 15.5097769 ], [ 73.796634, 15.5099765 ], [ 73.7970374, 15.510345 ], [ 73.7972128, 15.5108733 ], [ 73.7969322, 15.5109451 ], [ 73.7966184, 15.5104282 ], [ 73.7963572, 15.5101496 ], [ 73.7960519, 15.5099827 ], [ 73.7957295, 15.5099087 ], [ 73.7952709, 15.5098426 ], [ 73.794942, 15.5099356 ], [ 73.7944699, 15.5101506 ], [ 73.7937511, 15.5105347 ], [ 73.7930537, 15.5107606 ], [ 73.7923542, 15.511215 ], [ 73.7919583, 15.5116502 ], [ 73.79171, 15.5120203 ], [ 73.791335, 15.5127775 ], [ 73.7911134, 15.5135322 ], [ 73.7904123, 15.515071 ], [ 73.7903672, 15.5156163 ], [ 73.7903796, 15.516125 ], [ 73.7905421, 15.5166398 ], [ 73.7907787, 15.5171903 ], [ 73.7914079, 15.517747 ], [ 73.7917813, 15.517963 ], [ 73.7918537, 15.5185978 ], [ 73.7920452, 15.5193829 ], [ 73.7919374, 15.519815 ], [ 73.7915962, 15.520242 ], [ 73.7915678, 15.5208002 ], [ 73.7914315, 15.5212933 ], [ 73.790901, 15.5215037 ], [ 73.7901886, 15.5215843 ], [ 73.789466, 15.5215843 ], [ 73.7888293, 15.5215119 ], [ 73.7884285, 15.5217616 ], [ 73.7875574, 15.5222237 ], [ 73.78647, 15.5224387 ], [ 73.7854883, 15.5222661 ], [ 73.7849245, 15.5220696 ], [ 73.7844616, 15.5217637 ], [ 73.7841, 15.521499 ], [ 73.7836934, 15.5211873 ], [ 73.7833651, 15.5204239 ], [ 73.7829874, 15.5194553 ], [ 73.7824966, 15.5180157 ], [ 73.7809382, 15.5154949 ], [ 73.7796127, 15.5129626 ], [ 73.7776289, 15.5093546 ], [ 73.7769868, 15.506737 ], [ 73.7764299, 15.5042149 ], [ 73.7758517, 15.5018945 ], [ 73.7760861, 15.5009841 ], [ 73.7763194, 15.5000775 ], [ 73.7765909, 15.4988776 ], [ 73.7772014, 15.4990591 ], [ 73.7779207, 15.4990612 ], [ 73.7788252, 15.498887 ], [ 73.7797078, 15.4985434 ], [ 73.780217, 15.4982595 ], [ 73.7805915, 15.4979108 ], [ 73.7810038, 15.4977 ], [ 73.7813026, 15.4975661 ], [ 73.7815719, 15.4974932 ], [ 73.781858, 15.4973229 ], [ 73.7821862, 15.4972336 ], [ 73.7825355, 15.4970836 ], [ 73.7827627, 15.4969741 ], [ 73.7830488, 15.497039 ], [ 73.7834991, 15.4968647 ], [ 73.7841218, 15.49652 ], [ 73.7845595, 15.4963254 ], [ 73.7850434, 15.4961023 ], [ 73.7854557, 15.4959604 ], [ 73.7859649, 15.4958104 ], [ 73.7864277, 15.4956847 ], [ 73.7864909, 15.4958144 ], [ 73.7870126, 15.4956401 ], [ 73.7874629, 15.4954738 ], [ 73.7876017, 15.4953806 ], [ 73.7876691, 15.4952103 ], [ 73.7878752, 15.4949913 ], [ 73.7879426, 15.494598 ], [ 73.7877953, 15.4945574 ], [ 73.787526, 15.4945331 ], [ 73.7873324, 15.4945331 ], [ 73.787303, 15.4941357 ], [ 73.7869243, 15.4939978 ], [ 73.7867223, 15.4937829 ], [ 73.7864025, 15.4934261 ], [ 73.7858976, 15.4932842 ], [ 73.785401, 15.4931747 ], [ 73.7850854, 15.493049 ], [ 73.7848035, 15.4931017 ], [ 73.7843491, 15.4930652 ], [ 73.783802, 15.492899 ], [ 73.7832761, 15.4927246 ], [ 73.7829479, 15.4926557 ], [ 73.7826365, 15.4925867 ], [ 73.7822872, 15.4925786 ], [ 73.7818496, 15.4925989 ], [ 73.7814793, 15.4924975 ], [ 73.7811174, 15.4923353 ], [ 73.7810122, 15.4921812 ], [ 73.7807429, 15.4922218 ], [ 73.7805157, 15.4925746 ], [ 73.7803516, 15.4929273 ], [ 73.7802254, 15.4930571 ], [ 73.7800739, 15.4931179 ], [ 73.7797162, 15.4930003 ], [ 73.7794217, 15.4929395 ], [ 73.7789336, 15.4929314 ], [ 73.7786474, 15.4929395 ], [ 73.7785212, 15.4930368 ], [ 73.7778606, 15.4928868 ], [ 73.7776628, 15.4927976 ], [ 73.7775997, 15.4926354 ], [ 73.7773262, 15.492461 ], [ 73.7771494, 15.4924245 ], [ 73.776796, 15.4921691 ], [ 73.7766445, 15.4919704 ], [ 73.7765141, 15.4917392 ], [ 73.7763037, 15.4912851 ], [ 73.7761522, 15.4908309 ], [ 73.775925, 15.4905633 ], [ 73.7756454, 15.4904794 ], [ 73.7756663, 15.4904263 ], [ 73.7753881, 15.4903016 ], [ 73.7751679, 15.4903819 ], [ 73.7748227, 15.4902758 ], [ 73.7744865, 15.4903303 ], [ 73.7744478, 15.4904607 ], [ 73.7743864, 15.4904661 ], [ 73.7741763, 15.4904588 ], [ 73.7739721, 15.4904431 ], [ 73.773954, 15.490356 ], [ 73.7737172, 15.4904118 ], [ 73.7734785, 15.4904519 ], [ 73.7731332, 15.4904275 ], [ 73.7729543, 15.4903961 ], [ 73.7726126, 15.490309 ], [ 73.7723957, 15.4902463 ], [ 73.7724174, 15.4901592 ], [ 73.7724481, 15.4901174 ], [ 73.7724101, 15.4900965 ], [ 73.7723125, 15.4901331 ], [ 73.7722962, 15.4901609 ], [ 73.7722438, 15.4901644 ], [ 73.772233, 15.4901452 ], [ 73.7721607, 15.4901348 ], [ 73.7721408, 15.4900669 ], [ 73.7721028, 15.4900285 ], [ 73.7720775, 15.4900407 ], [ 73.7720938, 15.4901592 ], [ 73.7720377, 15.4901662 ], [ 73.7719455, 15.4901487 ], [ 73.7719003, 15.4901069 ], [ 73.7717955, 15.4901749 ], [ 73.7717485, 15.4902306 ], [ 73.7716364, 15.4902602 ], [ 73.7715605, 15.4903055 ], [ 73.7714791, 15.4902376 ], [ 73.7714249, 15.4902655 ], [ 73.7713978, 15.4903456 ], [ 73.7712911, 15.4903404 ], [ 73.7711447, 15.490417 ], [ 73.7708771, 15.4905285 ], [ 73.770803, 15.4904972 ], [ 73.7707361, 15.4904867 ], [ 73.7705879, 15.4904884 ], [ 73.7704107, 15.4905198 ], [ 73.7702824, 15.4905303 ], [ 73.7701124, 15.4905337 ], [ 73.7700401, 15.490539 ], [ 73.7699371, 15.4905808 ], [ 73.7699172, 15.490532 ], [ 73.7699154, 15.4904641 ], [ 73.7698612, 15.4904327 ], [ 73.7698105, 15.4904449 ], [ 73.7698214, 15.4905303 ], [ 73.7698232, 15.4905738 ], [ 73.769731, 15.4905877 ], [ 73.7696713, 15.4906017 ], [ 73.7696442, 15.4906365 ], [ 73.7695755, 15.4906348 ], [ 73.7695737, 15.490586 ], [ 73.769552, 15.4905616 ], [ 73.7694851, 15.4905895 ], [ 73.769458, 15.4906104 ], [ 73.76944, 15.4905755 ], [ 73.7693821, 15.4905965 ], [ 73.7693387, 15.4906487 ], [ 73.7693044, 15.4906539 ], [ 73.7692556, 15.4906958 ], [ 73.7691905, 15.490701 ], [ 73.7691417, 15.4906539 ], [ 73.7690983, 15.4906383 ], [ 73.7690043, 15.4906313 ], [ 73.7689139, 15.4906296 ], [ 73.7689265, 15.4906836 ], [ 73.7689067, 15.4907167 ], [ 73.7688651, 15.490755 ], [ 73.7688669, 15.4907846 ], [ 73.7689211, 15.4908072 ], [ 73.7689519, 15.4908386 ], [ 73.7689374, 15.4908665 ], [ 73.7689283, 15.4908996 ], [ 73.7688723, 15.4909013 ], [ 73.7687801, 15.4908926 ], [ 73.7687548, 15.4908438 ], [ 73.7687114, 15.4907985 ], [ 73.7686915, 15.4908212 ], [ 73.7686771, 15.4908682 ], [ 73.7686933, 15.4909031 ], [ 73.7686843, 15.490964 ], [ 73.7686427, 15.4910477 ], [ 73.7686066, 15.4910668 ], [ 73.7685704, 15.4910599 ], [ 73.768527, 15.4910529 ], [ 73.7684981, 15.4910755 ], [ 73.7685361, 15.4911365 ], [ 73.7685469, 15.4911992 ], [ 73.7685198, 15.4912375 ], [ 73.7684728, 15.4912515 ], [ 73.7684547, 15.4912201 ], [ 73.7684366, 15.4911626 ], [ 73.7684095, 15.4911017 ], [ 73.7684095, 15.4910494 ], [ 73.7683426, 15.4910337 ], [ 73.7683011, 15.4910564 ], [ 73.7682884, 15.4911069 ], [ 73.7683047, 15.4911417 ], [ 73.7683444, 15.4912428 ], [ 73.7683788, 15.4912916 ], [ 73.7684276, 15.4913316 ], [ 73.7684077, 15.491356 ], [ 73.7683571, 15.491356 ], [ 73.7683065, 15.4913229 ], [ 73.768245, 15.4913072 ], [ 73.7681854, 15.4913159 ], [ 73.7681293, 15.4913804 ], [ 73.7681185, 15.4914692 ], [ 73.7679955, 15.4915807 ], [ 73.7678835, 15.4917689 ], [ 73.7678383, 15.4918926 ], [ 73.7678563, 15.4920163 ], [ 73.7678039, 15.4921051 ], [ 73.7678039, 15.4921748 ], [ 73.7678997, 15.4922183 ], [ 73.7678979, 15.4923246 ], [ 73.7678943, 15.4924013 ], [ 73.7678346, 15.4924082 ], [ 73.7677858, 15.4923734 ], [ 73.7677045, 15.4923507 ], [ 73.7676231, 15.4923542 ], [ 73.7675562, 15.4923908 ], [ 73.7674333, 15.4923908 ], [ 73.7673556, 15.4924274 ], [ 73.7673773, 15.4925232 ], [ 73.767352, 15.4925633 ], [ 73.7674604, 15.4926347 ], [ 73.7675201, 15.4927096 ], [ 73.7675942, 15.492727 ], [ 73.7676249, 15.4928124 ], [ 73.7676738, 15.4927619 ], [ 73.7677786, 15.4927288 ], [ 73.7678419, 15.4927915 ], [ 73.7678726, 15.4929378 ], [ 73.7679377, 15.4930894 ], [ 73.7680552, 15.4931991 ], [ 73.7680769, 15.4932897 ], [ 73.7680245, 15.4933455 ], [ 73.767972, 15.4933333 ], [ 73.7678871, 15.4933385 ], [ 73.767813, 15.4933368 ], [ 73.7678111, 15.4933908 ], [ 73.7679268, 15.4934169 ], [ 73.7679829, 15.4934674 ], [ 73.7678871, 15.4935789 ], [ 73.7677967, 15.4935406 ], [ 73.7677424, 15.4934709 ], [ 73.7676936, 15.4934779 ], [ 73.767643, 15.4934326 ], [ 73.7675454, 15.4933681 ], [ 73.7674405, 15.4933019 ], [ 73.767352, 15.4932566 ], [ 73.7672959, 15.4932688 ], [ 73.7672869, 15.4933542 ], [ 73.767314, 15.4934605 ], [ 73.7674894, 15.4935232 ], [ 73.7676123, 15.4935876 ], [ 73.7676719, 15.4936277 ], [ 73.7676195, 15.4936451 ], [ 73.7675472, 15.4936347 ], [ 73.7674622, 15.4936347 ], [ 73.767446, 15.4936695 ], [ 73.7675056, 15.4937444 ], [ 73.7673917, 15.4939134 ], [ 73.7672923, 15.4940441 ], [ 73.7670953, 15.4942061 ], [ 73.7669308, 15.4942444 ], [ 73.7668042, 15.4941939 ], [ 73.7667373, 15.4941834 ], [ 73.7666704, 15.4941312 ], [ 73.7666108, 15.4941381 ], [ 73.7665855, 15.4942339 ], [ 73.76658, 15.4943123 ], [ 73.7666686, 15.4944029 ], [ 73.7665114, 15.4944517 ], [ 73.766439, 15.4944848 ], [ 73.7663306, 15.4944987 ], [ 73.7662076, 15.4944709 ], [ 73.7662076, 15.4944238 ], [ 73.7661715, 15.4943733 ], [ 73.7661426, 15.4944169 ], [ 73.7661317, 15.4944639 ], [ 73.7661498, 15.4945005 ], [ 73.7661118, 15.4945266 ], [ 73.7660829, 15.49449 ], [ 73.7660775, 15.4944047 ], [ 73.7661245, 15.4943489 ], [ 73.7660739, 15.4943054 ], [ 73.7659166, 15.4941765 ], [ 73.7657882, 15.4940684 ], [ 73.7656834, 15.494011 ], [ 73.7655894, 15.4939953 ], [ 73.7656002, 15.4940493 ], [ 73.7654954, 15.4940284 ], [ 73.7654466, 15.4940876 ], [ 73.7655098, 15.4941399 ], [ 73.7655225, 15.4942479 ], [ 73.7655333, 15.4943036 ], [ 73.7654213, 15.4942601 ], [ 73.7653399, 15.4942583 ], [ 73.7653634, 15.4943176 ], [ 73.7653833, 15.4944256 ], [ 73.7653725, 15.4944865 ], [ 73.7654104, 15.4945458 ], [ 73.7654448, 15.4946451 ], [ 73.7654375, 15.4947304 ], [ 73.7654628, 15.4947566 ], [ 73.7655189, 15.4947566 ], [ 73.7654809, 15.494821 ], [ 73.7654719, 15.4948803 ], [ 73.7654303, 15.4948803 ], [ 73.7653779, 15.4948628 ], [ 73.7653489, 15.4948088 ], [ 73.7652206, 15.4948053 ], [ 73.7651591, 15.4948141 ], [ 73.7651754, 15.4948715 ], [ 73.7652314, 15.494889 ], [ 73.7652405, 15.4949465 ], [ 73.7652694, 15.494997 ], [ 73.7652296, 15.4950022 ], [ 73.7651808, 15.4949465 ], [ 73.7650778, 15.4949412 ], [ 73.7649838, 15.494943 ], [ 73.7649404, 15.4950074 ], [ 73.7649205, 15.4951085 ], [ 73.7649314, 15.4952356 ], [ 73.7649603, 15.495328 ], [ 73.7649494, 15.495382 ], [ 73.7648952, 15.4953785 ], [ 73.7648554, 15.4953367 ], [ 73.7648048, 15.4953524 ], [ 73.7647958, 15.4953994 ], [ 73.7648211, 15.4955266 ], [ 73.7648807, 15.4955318 ], [ 73.7648916, 15.4955701 ], [ 73.7648572, 15.4956154 ], [ 73.7648518, 15.4956642 ], [ 73.764935, 15.4957705 ], [ 73.764944, 15.4958036 ], [ 73.7647849, 15.4957548 ], [ 73.7647867, 15.4957966 ], [ 73.7649024, 15.4958802 ], [ 73.764859, 15.4958924 ], [ 73.7647343, 15.4958436 ], [ 73.7647, 15.4959028 ], [ 73.7647325, 15.4959743 ], [ 73.7645282, 15.4959098 ], [ 73.7645373, 15.4960614 ], [ 73.7645644, 15.4961764 ], [ 73.7646114, 15.4962408 ], [ 73.7645571, 15.4963018 ], [ 73.764493, 15.4964259 ], [ 73.7645201, 15.4964921 ], [ 73.764634, 15.4964869 ], [ 73.7646539, 15.4965409 ], [ 73.7645328, 15.4965531 ], [ 73.7645544, 15.4966611 ], [ 73.7646159, 15.4966645 ], [ 73.764625, 15.4967011 ], [ 73.7645689, 15.4966994 ], [ 73.7645635, 15.4967342 ], [ 73.764596, 15.4967882 ], [ 73.7645779, 15.4968022 ], [ 73.7645346, 15.4967795 ], [ 73.7645237, 15.4968335 ], [ 73.7646123, 15.496952 ], [ 73.7646087, 15.4970112 ], [ 73.7646177, 15.4971593 ], [ 73.7646611, 15.4972115 ], [ 73.7647153, 15.4972708 ], [ 73.7647316, 15.4973892 ], [ 73.7647479, 15.4974955 ], [ 73.7648256, 15.497607 ], [ 73.7648835, 15.4976854 ], [ 73.7650697, 15.4977516 ], [ 73.7651944, 15.4977725 ], [ 73.765236, 15.4978578 ], [ 73.7653499, 15.4978544 ], [ 73.765377, 15.4978056 ], [ 73.7659338, 15.4976523 ], [ 73.7660802, 15.4977586 ], [ 73.7662682, 15.4979345 ], [ 73.7664897, 15.4982645 ], [ 73.766435, 15.4983477 ], [ 73.7664002, 15.498342 ], [ 73.7663536, 15.498352 ], [ 73.7663152, 15.4983721 ], [ 73.7662981, 15.4983934 ], [ 73.7662899, 15.4984592 ], [ 73.7663048, 15.4984988 ], [ 73.7663274, 15.498531 ], [ 73.766381, 15.4985553 ], [ 73.7664526, 15.4985393 ], [ 73.7664833, 15.4985159 ], [ 73.7665063, 15.498458 ], [ 73.7665203, 15.4983902 ], [ 73.7665923, 15.4983143 ], [ 73.7667982, 15.4983219 ], [ 73.7669663, 15.4983726 ], [ 73.76716, 15.4985088 ], [ 73.7674148, 15.4988873 ], [ 73.7675492, 15.499383 ], [ 73.767557, 15.4995938 ], [ 73.7675305, 15.500008 ], [ 73.7675045, 15.5003919 ], [ 73.7674767, 15.5007341 ], [ 73.7674301, 15.5014692 ], [ 73.7674105, 15.5022482 ], [ 73.7672551, 15.5029698 ], [ 73.7663968, 15.505619 ], [ 73.7659174, 15.5072107 ], [ 73.7654811, 15.5082236 ], [ 73.7647256, 15.5092672 ], [ 73.7646958, 15.5093764 ], [ 73.7646434, 15.5095106 ], [ 73.7644484, 15.5099698 ], [ 73.764334, 15.5106258 ], [ 73.7641262, 15.5114857 ], [ 73.7635066, 15.5131375 ], [ 73.7628917, 15.514873 ], [ 73.7628075, 15.5153502 ], [ 73.7625244, 15.5165594 ], [ 73.7620639, 15.5179715 ], [ 73.7615267, 15.5201622 ], [ 73.7611526, 15.5213432 ], [ 73.760909, 15.5225188 ], [ 73.7606489, 15.5232834 ], [ 73.7603141, 15.5247074 ], [ 73.7600447, 15.5258219 ], [ 73.7598333, 15.5270115 ], [ 73.7592898, 15.5286992 ], [ 73.7589266, 15.5297449 ], [ 73.7583995, 15.5315015 ], [ 73.7581944, 15.5321027 ], [ 73.7577292, 15.5338675 ], [ 73.7574008, 15.5349104 ], [ 73.7570571, 15.5359718 ], [ 73.7568019, 15.5372155 ], [ 73.7562777, 15.5385351 ], [ 73.7561424, 15.539484 ], [ 73.7554943, 15.5409672 ], [ 73.7552848, 15.5422608 ], [ 73.7547686, 15.5438699 ], [ 73.7546382, 15.5444091 ], [ 73.7543764, 15.5449185 ], [ 73.7543209, 15.5455905 ], [ 73.7540363, 15.5467232 ], [ 73.7538218, 15.5475467 ], [ 73.7537035, 15.5481998 ], [ 73.7532121, 15.5500052 ], [ 73.7528751, 15.551101 ], [ 73.7525707, 15.5519758 ], [ 73.7524072, 15.5524847 ], [ 73.7522516, 15.5532708 ], [ 73.7516472, 15.5547135 ], [ 73.7510216, 15.5565345 ], [ 73.7504745, 15.5577379 ], [ 73.7500035, 15.5590213 ], [ 73.7496204, 15.5598157 ], [ 73.7491248, 15.5607025 ], [ 73.7485589, 15.5613531 ], [ 73.7481954, 15.5619915 ], [ 73.7480175, 15.5624137 ], [ 73.7476653, 15.5622932 ], [ 73.7474857, 15.5622988 ], [ 73.7473834, 15.5622483 ], [ 73.7472888, 15.562119 ], [ 73.7471891, 15.5620993 ], [ 73.7469201, 15.5621293 ], [ 73.7468025, 15.5621342 ], [ 73.7466261, 15.5621121 ], [ 73.7464446, 15.5619815 ], [ 73.7463909, 15.5618411 ], [ 73.7463474, 15.5616367 ], [ 73.7461991, 15.5614274 ], [ 73.7461199, 15.5613633 ], [ 73.7459639, 15.5613584 ], [ 73.7458617, 15.5612377 ], [ 73.7457338, 15.5611762 ], [ 73.7456878, 15.5612574 ], [ 73.745629, 15.5612353 ], [ 73.7456239, 15.5611811 ], [ 73.7456725, 15.5610924 ], [ 73.7456035, 15.5610703 ], [ 73.7454705, 15.5611072 ], [ 73.7453529, 15.561186 ], [ 73.745266, 15.5613067 ], [ 73.7451867, 15.561388 ], [ 73.7451177, 15.5612501 ], [ 73.7450257, 15.5611762 ], [ 73.7449388, 15.5611712 ], [ 73.7449157, 15.561223 ], [ 73.7449311, 15.5612895 ], [ 73.7449822, 15.5613289 ], [ 73.745064, 15.5614175 ], [ 73.7451049, 15.5614225 ], [ 73.7451152, 15.5615087 ], [ 73.7451561, 15.5615382 ], [ 73.7451714, 15.5616712 ], [ 73.745064, 15.5618658 ], [ 73.7449745, 15.5620653 ], [ 73.7447828, 15.5622648 ], [ 73.7446703, 15.5624002 ], [ 73.7446294, 15.5625381 ], [ 73.7445962, 15.5627081 ], [ 73.7445629, 15.5629494 ], [ 73.744499, 15.5630356 ], [ 73.7443507, 15.563043 ], [ 73.7440976, 15.563112 ], [ 73.7438317, 15.5631711 ], [ 73.7437193, 15.5631563 ], [ 73.7436911, 15.5630258 ], [ 73.7437295, 15.5629962 ], [ 73.743709, 15.5629223 ], [ 73.7435684, 15.5629149 ], [ 73.7435403, 15.5630085 ], [ 73.7434636, 15.5630381 ], [ 73.7434099, 15.5629987 ], [ 73.7433307, 15.5630381 ], [ 73.7433792, 15.5631268 ], [ 73.7434431, 15.5631095 ], [ 73.7434253, 15.5631883 ], [ 73.7433383, 15.5632696 ], [ 73.7432156, 15.5633952 ], [ 73.743098, 15.5636218 ], [ 73.7428321, 15.5638237 ], [ 73.7424103, 15.5639124 ], [ 73.7421572, 15.563905 ], [ 73.7420626, 15.5637326 ], [ 73.7419859, 15.563607 ], [ 73.7418708, 15.5634494 ], [ 73.7417942, 15.5633977 ], [ 73.7417354, 15.5634321 ], [ 73.7418376, 15.5635553 ], [ 73.7419245, 15.563708 ], [ 73.7419833, 15.5638459 ], [ 73.742037, 15.5639838 ], [ 73.7421418, 15.5640479 ], [ 73.7421572, 15.5641242 ], [ 73.7420063, 15.564171 ], [ 73.7418939, 15.5641267 ], [ 73.7417558, 15.564102 ], [ 73.7416382, 15.5640183 ], [ 73.7415692, 15.5638582 ], [ 73.7414669, 15.563772 ], [ 73.7414465, 15.563676 ], [ 73.7413646, 15.5636464 ], [ 73.7413135, 15.5637031 ], [ 73.741224, 15.56374 ], [ 73.7411703, 15.563804 ], [ 73.7412368, 15.5639124 ], [ 73.7413442, 15.5639838 ], [ 73.7414746, 15.5642473 ], [ 73.7415999, 15.5644074 ], [ 73.7415692, 15.5644173 ], [ 73.7414976, 15.5643902 ], [ 73.7413953, 15.564368 ], [ 73.7412931, 15.5643089 ], [ 73.7411678, 15.5642006 ], [ 73.7410758, 15.5641538 ], [ 73.741086, 15.5642991 ], [ 73.741178, 15.564405 ], [ 73.7413135, 15.5645601 ], [ 73.7413391, 15.564666 ], [ 73.7411729, 15.5647399 ], [ 73.7410911, 15.5647251 ], [ 73.7411192, 15.5648581 ], [ 73.741224, 15.5648754 ], [ 73.7412854, 15.5649739 ], [ 73.7414004, 15.5649862 ], [ 73.7414771, 15.565097 ], [ 73.7415947, 15.5650995 ], [ 73.7417175, 15.5653408 ], [ 73.741812, 15.5653581 ], [ 73.7417788, 15.565496 ], [ 73.741899, 15.5656856 ], [ 73.7420345, 15.5658383 ], [ 73.7419757, 15.5659664 ], [ 73.7419936, 15.566092 ], [ 73.7419092, 15.5661708 ], [ 73.7419092, 15.5665722 ], [ 73.7420012, 15.5667742 ], [ 73.742037, 15.5671264 ], [ 73.7419808, 15.5672741 ], [ 73.741876, 15.5673062 ], [ 73.7417507, 15.5673111 ], [ 73.7416996, 15.5672224 ], [ 73.7415845, 15.5671879 ], [ 73.7414771, 15.5670697 ], [ 73.7415257, 15.5669786 ], [ 73.7414848, 15.5667964 ], [ 73.7414362, 15.5667841 ], [ 73.7413646, 15.5668826 ], [ 73.7413749, 15.5669663 ], [ 73.7413033, 15.5670328 ], [ 73.7411985, 15.5671288 ], [ 73.7411455, 15.5673931 ], [ 73.7411468, 15.567579 ], [ 73.7411327, 15.5678302 ], [ 73.7409794, 15.5678622 ], [ 73.7410816, 15.5680285 ], [ 73.7410369, 15.5680667 ], [ 73.7410701, 15.5680765 ], [ 73.7411008, 15.5683216 ], [ 73.7412427, 15.5683794 ], [ 73.7412619, 15.5684706 ], [ 73.7413488, 15.5685173 ], [ 73.7414574, 15.568606 ], [ 73.7416147, 15.5686306 ], [ 73.7418292, 15.5689818 ], [ 73.7419702, 15.5694036 ], [ 73.7419594, 15.5698494 ], [ 73.7419557, 15.5700811 ], [ 73.7419015, 15.5704189 ], [ 73.7418672, 15.570661 ], [ 73.7417786, 15.5709535 ], [ 73.7416828, 15.5712078 ], [ 73.7416014, 15.5712618 ], [ 73.7415508, 15.5713105 ], [ 73.7414098, 15.5713958 ], [ 73.7413194, 15.5717023 ], [ 73.7412706, 15.5718538 ], [ 73.7412326, 15.5719496 ], [ 73.7411585, 15.5719479 ], [ 73.7410989, 15.5719984 ], [ 73.7410519, 15.5720663 ], [ 73.7410808, 15.5721011 ], [ 73.7410717, 15.572169 ], [ 73.741003, 15.5721777 ], [ 73.7409886, 15.5722439 ], [ 73.741064704292214, 15.572354589648437 ], [ 73.7410808, 15.572378 ], [ 73.7411983, 15.5725382 ], [ 73.741195414223256, 15.572554589648437 ], [ 73.741154, 15.5727898 ], [ 73.7410573, 15.5729222 ], [ 73.7409768, 15.5730197 ], [ 73.7405538, 15.5735456 ], [ 73.7405303, 15.5746053 ], [ 73.7402472, 15.575461 ], [ 73.7398024, 15.5762441 ], [ 73.7393857, 15.5769608 ], [ 73.7390431, 15.5775543 ], [ 73.738317, 15.5788275 ], [ 73.7382979, 15.5790737 ], [ 73.7381432, 15.5792227 ], [ 73.7380499, 15.5792314 ], [ 73.7380499, 15.5793803 ], [ 73.7379796, 15.5794284 ], [ 73.7380384, 15.5795416 ], [ 73.7379361, 15.5796943 ], [ 73.7380128, 15.5798372 ], [ 73.7380128, 15.5799677 ], [ 73.7378875, 15.5801942 ], [ 73.7377827, 15.5803026 ], [ 73.7376498, 15.5802952 ], [ 73.7376804, 15.5805218 ], [ 73.7376498, 15.5805858 ], [ 73.7376549, 15.5809084 ], [ 73.7375986, 15.5809872 ], [ 73.7377495, 15.5810143 ], [ 73.7377469, 15.5810685 ], [ 73.737706, 15.5811177 ], [ 73.7375449, 15.5812655 ], [ 73.7374989, 15.5814256 ], [ 73.7375628, 15.5814625 ], [ 73.7375807, 15.5815118 ], [ 73.7375322, 15.5816472 ], [ 73.7373992, 15.5816866 ], [ 73.7372203, 15.5816177 ], [ 73.7371359, 15.5817137 ], [ 73.7371257, 15.5818738 ], [ 73.737256, 15.5818836 ], [ 73.7373021, 15.5820412 ], [ 73.7372075, 15.5821841 ], [ 73.7373481, 15.582253 ], [ 73.7374555, 15.5824057 ], [ 73.73759, 15.582586 ], [ 73.7375945, 15.5827105 ], [ 73.7375231, 15.5828385 ], [ 73.7372651, 15.5830282 ], [ 73.7371471, 15.583246 ], [ 73.7371435, 15.5834898 ], [ 73.7373532, 15.5838589 ], [ 73.7371818, 15.5841744 ], [ 73.7369389, 15.5842704 ], [ 73.7367498, 15.5843024 ], [ 73.7367498, 15.5844723 ], [ 73.7368443, 15.5846275 ], [ 73.7369722, 15.5848491 ], [ 73.7369645, 15.5852013 ], [ 73.7367702, 15.5856297 ], [ 73.7364276, 15.5860927 ], [ 73.7358447, 15.5863143 ], [ 73.735901, 15.5865015 ], [ 73.7358192, 15.5867281 ], [ 73.7358498, 15.5869645 ], [ 73.735722, 15.5870433 ], [ 73.7357307, 15.5871878 ], [ 73.7354677, 15.5872838 ], [ 73.7352185, 15.5874089 ], [ 73.7349518, 15.5876151 ], [ 73.7347728, 15.5878416 ], [ 73.7345306, 15.5880377 ], [ 73.7343201, 15.5881019 ], [ 73.7341867, 15.588298 ], [ 73.7341867, 15.5884839 ], [ 73.7340393, 15.5886529 ], [ 73.7336989, 15.5888186 ], [ 73.7331549, 15.5888659 ], [ 73.7329899, 15.5889132 ], [ 73.7329408, 15.5891059 ], [ 73.7327829, 15.5893527 ], [ 73.7325583, 15.5895386 ], [ 73.7323723, 15.5896332 ], [ 73.7321547, 15.589853 ], [ 73.732088, 15.5899713 ], [ 73.7320599, 15.5901673 ], [ 73.7321547, 15.5903904 ], [ 73.7319932, 15.5905088 ], [ 73.7320354, 15.5906507 ], [ 73.7321617, 15.5909313 ], [ 73.7324003, 15.5912085 ], [ 73.7327443, 15.5915026 ], [ 73.7328531, 15.5916784 ], [ 73.7329864, 15.5918339 ], [ 73.7332602, 15.5920637 ], [ 73.7334602, 15.5922395 ], [ 73.7337515, 15.5922564 ], [ 73.7338498, 15.5923105 ], [ 73.7341165, 15.5926756 ], [ 73.7342288, 15.5931454 ], [ 73.7341867, 15.5933415 ], [ 73.73412, 15.5935883 ], [ 73.7341867, 15.5937167 ], [ 73.7342464, 15.5938993 ], [ 73.7341165, 15.594075 ], [ 73.733762, 15.5942441 ], [ 73.7337199, 15.5943049 ], [ 73.7339024, 15.5943015 ], [ 73.7339726, 15.5943218 ], [ 73.7340814, 15.5945348 ], [ 73.7340603, 15.5947274 ], [ 73.7339972, 15.5949539 ], [ 73.7339445, 15.5951703 ], [ 73.7339059, 15.5953359 ], [ 73.7337691, 15.5955556 ], [ 73.7338322, 15.5958058 ], [ 73.7338428, 15.5959376 ], [ 73.7338217, 15.596137 ], [ 73.7339586, 15.5963365 ], [ 73.7339691, 15.5967049 ], [ 73.733748, 15.5969382 ], [ 73.7335971, 15.5969821 ], [ 73.7333865, 15.5969213 ], [ 73.7330636, 15.5968773 ], [ 73.7329549, 15.5970531 ], [ 73.7330742, 15.5971782 ], [ 73.7332356, 15.597141 ], [ 73.7333444, 15.5970767 ], [ 73.7334813, 15.5971308 ], [ 73.7335409, 15.5972762 ], [ 73.7334567, 15.5975027 ], [ 73.73319, 15.5976041 ], [ 73.7329338, 15.597408 ], [ 73.7326671, 15.5974689 ], [ 73.7329198, 15.5975973 ], [ 73.7332567, 15.5976818 ], [ 73.733362, 15.5978035 ], [ 73.7334321, 15.5980739 ], [ 73.7334006, 15.5984458 ], [ 73.7334813, 15.5985911 ], [ 73.733376, 15.5987263 ], [ 73.7333549, 15.5987973 ], [ 73.7331654, 15.5989325 ], [ 73.7329689, 15.5991455 ], [ 73.7327232, 15.5992503 ], [ 73.7328075, 15.5994294 ], [ 73.7327969, 15.5996559 ], [ 73.7328952, 15.5997134 ], [ 73.7330812, 15.5998418 ], [ 73.7332777, 15.6000446 ], [ 73.7334146, 15.6002745 ], [ 73.7335269, 15.6004807 ], [ 73.7336708, 15.6007883 ], [ 73.7336392, 15.6009978 ], [ 73.7339761, 15.6012142 ], [ 73.733927, 15.6019443 ], [ 73.7337726, 15.6026203 ], [ 73.7334567, 15.6038609 ], [ 73.7334146, 15.6041347 ], [ 73.7331584, 15.6041428 ], [ 73.7330265, 15.6042019 ], [ 73.7330896, 15.6043309 ], [ 73.7330882, 15.604449 ], [ 73.7329513, 15.6047769 ], [ 73.7328506, 15.6048409 ], [ 73.732836, 15.6049786 ], [ 73.7327829, 15.6050135 ], [ 73.7327124, 15.6051094 ], [ 73.7327724, 15.605196 ], [ 73.7330491, 15.6054951 ], [ 73.7329822, 15.6055881 ], [ 73.7328541, 15.6058259 ], [ 73.7327382, 15.6060047 ], [ 73.7326289, 15.6063327 ], [ 73.7325689, 15.6066204 ], [ 73.7324952, 15.6067619 ], [ 73.7321792, 15.6069131 ], [ 73.7319703, 15.6070553 ], [ 73.7318669, 15.6072478 ], [ 73.731827, 15.6073645 ], [ 73.7318855, 15.6074948 ], [ 73.7319682, 15.6076403 ], [ 73.7321071, 15.6077211 ], [ 73.7323294, 15.6078878 ], [ 73.7324942, 15.6079041 ], [ 73.7324966, 15.6080722 ], [ 73.7325839, 15.6081236 ], [ 73.7326566, 15.6080629 ], [ 73.7327269, 15.6080792 ], [ 73.7327657, 15.608217 ], [ 73.7328239, 15.6082216 ], [ 73.7328077, 15.6081036 ], [ 73.7329403, 15.6081843 ], [ 73.7330687, 15.6081866 ], [ 73.7331803, 15.6081796 ], [ 73.7333354, 15.608252 ], [ 73.7334608, 15.6081297 ], [ 73.7336821, 15.608266 ], [ 73.733842, 15.6083897 ], [ 73.7341814, 15.608287 ], [ 73.7340675, 15.6081516 ], [ 73.7341301, 15.6080614 ], [ 73.7345547, 15.6081096 ], [ 73.734907, 15.608264 ], [ 73.7352044, 15.6083874 ], [ 73.7352311, 15.6084574 ], [ 73.7352238, 15.6086092 ], [ 73.7353814, 15.6086442 ], [ 73.7354851, 15.6084485 ], [ 73.735905, 15.6085788 ], [ 73.736065, 15.6084691 ], [ 73.7362388, 15.6084177 ], [ 73.736865, 15.6084364 ], [ 73.7373425, 15.6084177 ], [ 73.7375465, 15.6085167 ], [ 73.7380698, 15.6085695 ], [ 73.7381934, 15.6085205 ], [ 73.7383898, 15.6085368 ], [ 73.7385175, 15.6084361 ], [ 73.7386855, 15.6082286 ], [ 73.738827, 15.6080234 ], [ 73.7389425, 15.6078994 ], [ 73.739134, 15.6078271 ], [ 73.7392951, 15.6076959 ], [ 73.7396936, 15.6073127 ], [ 73.7399897, 15.6069842 ], [ 73.7401473, 15.6068114 ], [ 73.7403242, 15.6067367 ], [ 73.7404794, 15.6067437 ], [ 73.7406116, 15.6066905 ], [ 73.740746, 15.6065709 ], [ 73.7407969, 15.6064098 ], [ 73.7410153, 15.6061431 ], [ 73.7412167, 15.6059844 ], [ 73.7413594, 15.6058775 ], [ 73.7414418, 15.6057538 ], [ 73.7414207, 15.6055652 ], [ 73.7413424, 15.6054502 ], [ 73.7411989, 15.605328 ], [ 73.7409687, 15.6049811 ], [ 73.740826, 15.6049459 ], [ 73.740603, 15.604981 ], [ 73.7406418, 15.6048339 ], [ 73.7409206, 15.6047288 ], [ 73.7410781, 15.6046658 ], [ 73.7410771, 15.6045042 ], [ 73.7411674, 15.6042263 ], [ 73.7413283, 15.6044748 ], [ 73.7415707, 15.6045999 ], [ 73.7417472, 15.6046503 ], [ 73.7418364, 15.6045177 ], [ 73.7418125, 15.6044191 ], [ 73.741977, 15.6043809 ], [ 73.7421152, 15.6043809 ], [ 73.7422514, 15.6043235 ], [ 73.7422267, 15.6044253 ], [ 73.7422922, 15.6044977 ], [ 73.7424458, 15.6046349 ], [ 73.7425857, 15.6046051 ], [ 73.7429148, 15.60427 ], [ 73.7431191, 15.6043689 ], [ 73.7431608, 15.6045331 ], [ 73.7433832, 15.6045363 ], [ 73.7436577, 15.6048587 ], [ 73.7443949, 15.605299 ], [ 73.7445401, 15.6050662 ], [ 73.7447019, 15.6052005 ], [ 73.7445394, 15.6053918 ], [ 73.7448162, 15.6055889 ], [ 73.7451533, 15.6056758 ], [ 73.7453706, 15.6053946 ], [ 73.7461036, 15.6058808 ], [ 73.7465316, 15.6062787 ], [ 73.7468181, 15.606751 ], [ 73.7471635, 15.6073337 ], [ 73.7472101, 15.6076603 ], [ 73.7473799, 15.6078642 ], [ 73.7476517, 15.6079129 ], [ 73.7479503, 15.6080269 ], [ 73.7486106, 15.6082966 ], [ 73.7487825, 15.6077852 ], [ 73.749513, 15.6078867 ], [ 73.7497718, 15.6083272 ], [ 73.7495284, 15.6086539 ], [ 73.7502303, 15.6089737 ], [ 73.7506879, 15.6092137 ], [ 73.7517772, 15.6096279 ], [ 73.7520649, 15.6102633 ], [ 73.7521492, 15.6107039 ], [ 73.7523959, 15.6111096 ], [ 73.7523746, 15.6117102 ], [ 73.7526307, 15.6120429 ], [ 73.7527743, 15.6124764 ], [ 73.7530952, 15.6129548 ], [ 73.753371, 15.6135326 ], [ 73.7535877, 15.6136775 ], [ 73.7537079, 15.6139178 ], [ 73.7540949, 15.6144135 ], [ 73.7545773, 15.6150918 ], [ 73.7548501, 15.615489 ], [ 73.7550456, 15.615721 ], [ 73.7551661, 15.615937 ], [ 73.7554294, 15.6161759 ], [ 73.7553993, 15.6163961 ], [ 73.7555164, 15.6164693 ], [ 73.7557075, 15.6164428 ], [ 73.7557037, 15.6166859 ], [ 73.7557002, 15.616912 ], [ 73.7550984, 15.6173178 ], [ 73.7546239, 15.6174314 ], [ 73.754422, 15.6171521 ], [ 73.7541862, 15.6174506 ], [ 73.7537431, 15.6180033 ], [ 73.7527511, 15.6182278 ], [ 73.7518892, 15.618827 ], [ 73.7514811, 15.6192944 ], [ 73.7507552, 15.6201077 ], [ 73.7501681, 15.6206578 ], [ 73.7494027, 15.6208765 ], [ 73.7490019, 15.6211127 ], [ 73.7487053, 15.6212345 ], [ 73.7484902, 15.6213953 ], [ 73.7483025, 15.6215225 ], [ 73.7479613, 15.6218452 ], [ 73.7483426, 15.6225033 ], [ 73.7485803, 15.6230424 ], [ 73.7485692, 15.623344 ], [ 73.7484608, 15.6237382 ], [ 73.7484608, 15.6242077 ], [ 73.7487497, 15.6244511 ], [ 73.7493074, 15.6250445 ], [ 73.7494679, 15.624974 ], [ 73.7494198, 15.6245393 ], [ 73.7492573, 15.6240698 ], [ 73.7495883, 15.6244523 ], [ 73.7497629, 15.6247363 ], [ 73.7500028, 15.6245277 ], [ 73.749903, 15.625008 ], [ 73.7504159, 15.6255692 ], [ 73.7511592, 15.6263106 ], [ 73.7515125, 15.6266074 ], [ 73.7497852, 15.6274632 ], [ 73.7482116, 15.6282428 ], [ 73.7477015, 15.6279282 ], [ 73.7468941, 15.6275076 ], [ 73.746201, 15.6270628 ], [ 73.745766, 15.626897 ], [ 73.7450053, 15.6264129 ], [ 73.7443712, 15.626152 ], [ 73.7435912, 15.6260219 ], [ 73.7430628, 15.6257909 ], [ 73.7426096, 15.6253978 ], [ 73.7420388, 15.6254784 ], [ 73.7404531, 15.624162 ], [ 73.7405088, 15.6238831 ], [ 73.7403769, 15.6237245 ], [ 73.7401403, 15.6236475 ], [ 73.73979, 15.623771 ], [ 73.7396967, 15.6242447 ], [ 73.7396312, 15.6237854 ], [ 73.7395336, 15.6236284 ], [ 73.7397621, 15.6234749 ], [ 73.7399189, 15.6236148 ], [ 73.7406, 15.6232109 ], [ 73.7389333, 15.6218532 ], [ 73.7391034, 15.6215743 ], [ 73.7385262, 15.6210726 ], [ 73.7382939, 15.6211052 ], [ 73.7379339, 15.6206593 ], [ 73.7385101, 15.6207745 ], [ 73.7384956, 15.619763 ], [ 73.7378685, 15.6196751 ], [ 73.7379135, 15.6190588 ], [ 73.7383647, 15.6191053 ], [ 73.7379956, 15.6180818 ], [ 73.7377521, 15.616908 ], [ 73.7374227, 15.6166218 ], [ 73.7374039, 15.6164405 ], [ 73.7375804, 15.6163676 ], [ 73.7375831, 15.6159275 ], [ 73.7375053, 15.6151045 ], [ 73.7374871, 15.6147981 ], [ 73.7370992, 15.6143755 ], [ 73.7367328, 15.6143078 ], [ 73.7364083, 15.6144463 ], [ 73.7359888, 15.6146421 ], [ 73.7355189, 15.6146519 ], [ 73.7345709, 15.6149181 ], [ 73.7339986, 15.6153276 ], [ 73.7334466, 15.6159171 ], [ 73.7329128, 15.6166027 ], [ 73.7324799, 15.6172098 ], [ 73.7322267, 15.6180054 ], [ 73.7314618, 15.6193383 ], [ 73.7303336, 15.6214709 ], [ 73.7297388, 15.6226183 ], [ 73.7292559, 15.6243682 ], [ 73.7288461, 15.6255507 ], [ 73.7284588, 15.6264222 ], [ 73.72777, 15.6274808 ], [ 73.727116, 15.6282526 ], [ 73.7264069, 15.6288632 ], [ 73.7255335, 15.6294227 ], [ 73.725003, 15.629665 ], [ 73.7241409, 15.6298618 ], [ 73.7240841, 15.6300525 ], [ 73.7234972, 15.6301516 ], [ 73.7231362, 15.6300943 ], [ 73.7228363, 15.630706 ], [ 73.7227022, 15.6314555 ], [ 73.7224404, 15.6326949 ], [ 73.7220536, 15.6334946 ], [ 73.7215741, 15.6343981 ], [ 73.721352, 15.6351704 ], [ 73.7210215, 15.6356059 ], [ 73.7208874, 15.6364505 ], [ 73.7204808, 15.6372259 ], [ 73.719556, 15.6391347 ], [ 73.7193439, 15.6394892 ], [ 73.7184021, 15.6410631 ], [ 73.7183159, 15.6416046 ], [ 73.7180927, 15.6424932 ], [ 73.7176162, 15.643944 ], [ 73.7175298, 15.6441822 ], [ 73.7175087, 15.6442402 ], [ 73.7157504, 15.6490833 ], [ 73.7153851, 15.649292 ], [ 73.7152103, 15.6497336 ], [ 73.7154227, 15.6502404 ], [ 73.7158014, 15.6504398 ], [ 73.7159338, 15.6505238 ], [ 73.7159433, 15.6506669 ], [ 73.7159072, 15.6508883 ], [ 73.7157321, 15.6517046 ], [ 73.7157115, 15.6517683 ], [ 73.7156864, 15.6518242 ], [ 73.7155158, 15.6520369 ], [ 73.7152582, 15.6527152 ], [ 73.7151796, 15.65302 ], [ 73.7150069, 15.6535991 ], [ 73.7146721, 15.6539699 ], [ 73.7146374, 15.6540642 ], [ 73.7144996, 15.6544393 ], [ 73.714337336599769, 15.654880679296875 ], [ 73.7141019, 15.6555211 ], [ 73.7133755, 15.6575237 ], [ 73.7132699, 15.6585888 ], [ 73.712956, 15.6589881 ], [ 73.7127334, 15.6606844 ], [ 73.7123617, 15.6619193 ], [ 73.7121262, 15.6627015 ], [ 73.7116371, 15.664326 ], [ 73.7104166, 15.666615 ], [ 73.7097573, 15.6679775 ], [ 73.7088207, 15.6693969 ], [ 73.7077054, 15.6713048 ], [ 73.7067243, 15.672923 ], [ 73.7061964, 15.6743 ], [ 73.7059024, 15.6752648 ], [ 73.7054711, 15.676885 ], [ 73.7048059, 15.6789737 ], [ 73.70452, 15.6797866 ], [ 73.7043237, 15.6810629 ], [ 73.7038141, 15.6830637 ], [ 73.703305, 15.6848708 ], [ 73.7027476, 15.6872047 ], [ 73.7021693, 15.6887592 ], [ 73.7015916, 15.6900555 ], [ 73.7014057, 15.6904253 ], [ 73.701016, 15.6912005 ], [ 73.7003765, 15.6920935 ], [ 73.6998531, 15.6926033 ], [ 73.6996218, 15.692609 ], [ 73.6992892, 15.6925118 ], [ 73.6989609, 15.692503 ], [ 73.6986097, 15.6924134 ], [ 73.6983351, 15.692178 ], [ 73.6982672, 15.6923143 ], [ 73.6981737, 15.6923411 ], [ 73.698423, 15.6924655 ], [ 73.698476, 15.6925482 ], [ 73.698355, 15.6926844 ], [ 73.698401, 15.6929745 ], [ 73.6985535, 15.6934011 ], [ 73.6985452, 15.693627 ], [ 73.698421, 15.6937489 ], [ 73.698018, 15.6939919 ], [ 73.6980648, 15.6940735 ], [ 73.6983828, 15.6939219 ], [ 73.6982896, 15.6941604 ], [ 73.6983674, 15.6943748 ], [ 73.6983808, 15.6947533 ], [ 73.6983564, 15.6948737 ], [ 73.6978095, 15.6952731 ], [ 73.6976512, 15.6953787 ], [ 73.697521, 15.6958858 ], [ 73.6974922, 15.6960823 ], [ 73.697514, 15.6964239 ], [ 73.6971407, 15.6980353 ], [ 73.6967331, 15.6991319 ], [ 73.6963318, 15.6994 ], [ 73.6962293, 15.6996608 ], [ 73.6960792, 15.6997383 ], [ 73.6956628, 15.6999531 ], [ 73.6953077, 15.7000099 ], [ 73.6952691, 15.7002929 ], [ 73.6951613, 15.7005016 ], [ 73.6949821, 15.70053 ], [ 73.6945717, 15.7008708 ], [ 73.6945057, 15.7011841 ], [ 73.6947611, 15.7011647 ], [ 73.6947241, 15.702371 ], [ 73.694341, 15.7024702 ], [ 73.6936409, 15.7047356 ], [ 73.6939291, 15.7048994 ], [ 73.6941002, 15.7053673 ], [ 73.6939339, 15.7060588 ], [ 73.6933293, 15.7076607 ], [ 73.6924721, 15.7101219 ], [ 73.6920665, 15.7112063 ], [ 73.6918078, 15.7123829 ], [ 73.6917194, 15.7127849 ], [ 73.6915731, 15.7132832 ], [ 73.6913514, 15.7139029 ], [ 73.6906584, 15.7152657 ], [ 73.6900393, 15.7165257 ], [ 73.6896595, 15.7175874 ], [ 73.6892813, 15.7182865 ], [ 73.6889267, 15.7186387 ], [ 73.6886242, 15.7199426 ], [ 73.6887089, 15.7204724 ], [ 73.688887, 15.7205441 ], [ 73.6890877, 15.7204388 ], [ 73.6892797, 15.7202333 ], [ 73.6895801, 15.7193301 ], [ 73.6898753, 15.7192598 ], [ 73.6899857, 15.7191205 ], [ 73.6899755, 15.7188984 ], [ 73.689865, 15.7188355 ], [ 73.6900238, 15.71841 ], [ 73.6902829, 15.7183614 ], [ 73.6903864, 15.7185979 ], [ 73.6905296, 15.7190854 ], [ 73.6908526, 15.7194505 ], [ 73.69147, 15.7192041 ], [ 73.6920547, 15.7190399 ], [ 73.6926581, 15.7190942 ], [ 73.6927639, 15.7190605 ], [ 73.6927842, 15.7190515 ], [ 73.6928185, 15.7190362 ], [ 73.692884, 15.7190393 ], [ 73.6932902, 15.7183624 ], [ 73.6930981, 15.718223 ], [ 73.6927805, 15.7181296 ], [ 73.6924614, 15.718323 ], [ 73.6923576, 15.7181491 ], [ 73.6927682, 15.7176891 ], [ 73.6933797, 15.7175109 ], [ 73.6980006, 15.7181776 ], [ 73.6982919, 15.7176183 ], [ 73.700553, 15.7184538 ], [ 73.7012279, 15.7202798 ], [ 73.7022584, 15.7206175 ], [ 73.7027106, 15.7205106 ], [ 73.7046869, 15.7212454 ], [ 73.7057469, 15.7214168 ], [ 73.7057533, 15.7215815 ], [ 73.707442, 15.7224356 ], [ 73.7083942, 15.7230083 ], [ 73.7103008, 15.724007 ], [ 73.7126826, 15.7237736 ], [ 73.7138391, 15.7231467 ], [ 73.7162681, 15.7242176 ], [ 73.717194, 15.7242135 ], [ 73.7202649, 15.7237276 ], [ 73.720566, 15.7235481 ], [ 73.7209953, 15.7233326 ], [ 73.721284, 15.7229836 ], [ 73.7215652, 15.7223847 ], [ 73.7221155, 15.7219067 ], [ 73.7220531, 15.7201858 ], [ 73.7229146, 15.7194897 ], [ 73.7233674, 15.718552 ], [ 73.722979, 15.7177547 ], [ 73.7235396, 15.717374 ], [ 73.7238005, 15.7172557 ], [ 73.7241785, 15.7172507 ], [ 73.7246465, 15.7171609 ], [ 73.7256756, 15.7165273 ], [ 73.7258004, 15.7165102 ], [ 73.7261962, 15.716775 ], [ 73.7266278, 15.7171693 ], [ 73.7268364, 15.7176043 ], [ 73.7271257, 15.7180225 ], [ 73.7275663, 15.7183128 ], [ 73.7281945, 15.7185737 ], [ 73.7285655, 15.7184971 ], [ 73.7294989, 15.7186583 ], [ 73.7303913, 15.7189359 ], [ 73.7307939, 15.7183826 ], [ 73.7317702, 15.7192388 ], [ 73.7319773, 15.7200629 ], [ 73.7326761, 15.7204727 ], [ 73.7329034, 15.7210485 ], [ 73.7331775, 15.7215652 ], [ 73.7348779, 15.7223904 ], [ 73.7357035, 15.7228281 ], [ 73.7363786, 15.7233616 ], [ 73.7366968, 15.7234847 ], [ 73.7369959, 15.7234905 ], [ 73.7374686, 15.7237266 ], [ 73.7378874, 15.7238533 ], [ 73.7382162, 15.7237185 ], [ 73.7383721, 15.7232601 ], [ 73.7387131, 15.7230182 ], [ 73.7390482, 15.7229433 ], [ 73.739275, 15.7226778 ], [ 73.7398439, 15.7227821 ], [ 73.7402196, 15.7229346 ], [ 73.7401551, 15.7230643 ], [ 73.7399217, 15.7231392 ], [ 73.7398572, 15.7233546 ], [ 73.7393473, 15.7234444 ], [ 73.7388394, 15.7235846 ], [ 73.7386293, 15.7242161 ], [ 73.7385755, 15.7247575 ], [ 73.7383918, 15.7249612 ], [ 73.7378417, 15.7249375 ], [ 73.7375165, 15.725201 ], [ 73.7373481, 15.7255075 ], [ 73.7368643, 15.7257078 ], [ 73.736532, 15.7258192 ], [ 73.7358217, 15.7264632 ], [ 73.7354044, 15.7263701 ], [ 73.73526, 15.7260453 ], [ 73.7341917, 15.7262769 ], [ 73.7343513, 15.7276084 ], [ 73.7347453, 15.728899 ], [ 73.7354574, 15.730073 ], [ 73.7344399, 15.7303482 ], [ 73.7335925, 15.7305774 ], [ 73.732459, 15.729595 ], [ 73.731899, 15.7289413 ], [ 73.7310214, 15.7285241 ], [ 73.7279304, 15.7278487 ], [ 73.727734, 15.7281854 ], [ 73.7266129, 15.7273478 ], [ 73.7253093, 15.7271991 ], [ 73.7249757, 15.7266466 ], [ 73.7243877, 15.7264834 ], [ 73.7232751, 15.7262366 ], [ 73.7225756, 15.7258318 ], [ 73.7209159, 15.7251316 ], [ 73.7184171, 15.7257667 ], [ 73.7162628, 15.7265382 ], [ 73.7165921, 15.7271291 ], [ 73.7168132, 15.7281131 ], [ 73.7154989, 15.7300763 ], [ 73.7141921, 15.7319279 ], [ 73.712277, 15.7336948 ], [ 73.711375, 15.7339004 ], [ 73.710157, 15.7341781 ], [ 73.7087408, 15.7346531 ], [ 73.7086185, 15.7355454 ], [ 73.7057704, 15.7351792 ], [ 73.7041242, 15.7340036 ], [ 73.7045061, 15.7324938 ], [ 73.7038946, 15.7310305 ], [ 73.6984229, 15.7309861 ], [ 73.6974379, 15.7301682 ], [ 73.6971869, 15.7296549 ], [ 73.6974597, 15.7290105 ], [ 73.697144, 15.7286488 ], [ 73.6964598, 15.7285912 ], [ 73.6961958, 15.7283521 ], [ 73.696091, 15.7280131 ], [ 73.6958074, 15.7277413 ], [ 73.6958932, 15.7270193 ], [ 73.6957704, 15.7259002 ], [ 73.6955564, 15.7258078 ], [ 73.6953249, 15.725438 ], [ 73.6956639, 15.724182 ], [ 73.6961414, 15.723521 ], [ 73.6964168, 15.7234232 ], [ 73.6966191, 15.7231425 ], [ 73.6965783, 15.722533 ], [ 73.6961765, 15.7218872 ], [ 73.6955912, 15.7217779 ], [ 73.6955654, 15.7217745 ], [ 73.695531, 15.7217699 ], [ 73.6955019, 15.7217727 ], [ 73.6955242, 15.7219611 ], [ 73.6952565, 15.7223076 ], [ 73.6947206, 15.7225769 ], [ 73.6951128, 15.7221759 ], [ 73.6951466, 15.7220551 ], [ 73.694252, 15.7220352 ], [ 73.694215, 15.7217375 ], [ 73.6930968, 15.7218823 ], [ 73.6925845, 15.7214736 ], [ 73.6921819, 15.7214333 ], [ 73.6915232, 15.7217463 ], [ 73.6907949, 15.7226282 ], [ 73.6902598, 15.7225975 ], [ 73.6895128, 15.7224731 ], [ 73.6889603, 15.7227759 ], [ 73.6888766, 15.7233888 ], [ 73.6878405, 15.7235391 ], [ 73.6875937, 15.7234673 ], [ 73.687223, 15.7224132 ], [ 73.6872718, 15.7219167 ], [ 73.6871627, 15.721391 ], [ 73.6866405, 15.7207905 ], [ 73.6858358, 15.7207174 ], [ 73.6854364, 15.7208764 ], [ 73.6850226, 15.7206175 ], [ 73.6847879, 15.7203234 ], [ 73.6844681, 15.7205449 ], [ 73.6845121, 15.7208421 ], [ 73.6841954, 15.7209219 ], [ 73.6838486, 15.7206541 ], [ 73.6835205, 15.720696 ], [ 73.6835664, 15.7202609 ], [ 73.6829154, 15.7205343 ], [ 73.6830549, 15.7208269 ], [ 73.6833837, 15.7209464 ], [ 73.6829832, 15.7217768 ], [ 73.6805939, 15.721118 ], [ 73.6800654, 15.7205995 ], [ 73.6795343, 15.720468 ], [ 73.6797936, 15.7214999 ], [ 73.6789959, 15.7214952 ], [ 73.6795236, 15.722142 ], [ 73.6800547, 15.7222745 ], [ 73.680709, 15.7238239 ], [ 73.6807075, 15.7240815 ], [ 73.6801722, 15.7245935 ], [ 73.6800363, 15.7251079 ], [ 73.6781756, 15.7249673 ], [ 73.6768441, 15.7252168 ], [ 73.6760429, 15.7257273 ], [ 73.6755086, 15.7261108 ], [ 73.6755052, 15.726626 ], [ 73.6749734, 15.7266228 ], [ 73.67497, 15.727138 ], [ 73.6744374, 15.7272631 ], [ 73.6733693, 15.727901 ], [ 73.673231, 15.728673 ], [ 73.6725616, 15.7294417 ], [ 73.6717619, 15.7296944 ], [ 73.6714877, 15.7309807 ], [ 73.6696253, 15.7310977 ], [ 73.6690966, 15.7305793 ], [ 73.6685648, 15.7305761 ], [ 73.6677636, 15.7310864 ], [ 73.6669615, 15.731726 ], [ 73.666547, 15.7340418 ], [ 73.6658776, 15.7348104 ], [ 73.6653455, 15.7348072 ], [ 73.6652055, 15.7358367 ], [ 73.6649379, 15.7360928 ], [ 73.664802, 15.7366071 ], [ 73.6640023, 15.7368598 ], [ 73.663864, 15.7376318 ], [ 73.663462, 15.7381444 ], [ 73.6621306, 15.7383939 ], [ 73.6618696, 15.7376196 ], [ 73.6613378, 15.7376163 ], [ 73.661201, 15.7381306 ], [ 73.6607991, 15.7386434 ], [ 73.6600004, 15.7387668 ], [ 73.6597326, 15.7390227 ], [ 73.6589339, 15.739147 ], [ 73.6585277, 15.740175 ], [ 73.6578583, 15.7409437 ], [ 73.6570586, 15.7411964 ], [ 73.657062, 15.7406812 ], [ 73.6562633, 15.7408046 ], [ 73.6557288, 15.7411881 ], [ 73.6554578, 15.7419592 ], [ 73.6541273, 15.7420794 ], [ 73.6535928, 15.7424629 ], [ 73.6534559, 15.7429773 ], [ 73.6531883, 15.7432332 ], [ 73.6533183, 15.7437492 ], [ 73.6527863, 15.743746 ], [ 73.6527829, 15.744261 ], [ 73.6538468, 15.7442676 ], [ 73.6535723, 15.745554 ], [ 73.6519783, 15.7452865 ], [ 73.6519732, 15.7460593 ], [ 73.6533038, 15.7459382 ], [ 73.6539658, 15.7463292 ], [ 73.6537339, 15.7475271 ], [ 73.6532928, 15.7476129 ], [ 73.6532911, 15.7478705 ], [ 73.6538232, 15.7478739 ], [ 73.6539146, 15.7477046 ], [ 73.6554198, 15.7477545 ], [ 73.6555531, 15.7476269 ], [ 73.655424, 15.7471109 ], [ 73.658087, 15.7466122 ], [ 73.6582163, 15.7471281 ], [ 73.6583488, 15.7472574 ], [ 73.6588798, 15.7473899 ], [ 73.6590074, 15.7481635 ], [ 73.6597986, 15.7491986 ], [ 73.6601894, 15.7504891 ], [ 73.6607207, 15.7506207 ], [ 73.6608523, 15.7507507 ], [ 73.6612433, 15.7520412 ], [ 73.6623064, 15.752176 ], [ 73.6628349, 15.7526944 ], [ 73.6625559, 15.7544012 ], [ 73.6629161, 15.7605521 ], [ 73.6626383, 15.7623536 ], [ 73.6620911, 15.7646687 ], [ 73.662086, 15.7654413 ], [ 73.6615472, 15.7664685 ], [ 73.6615423, 15.7672411 ], [ 73.6610035, 15.7682684 ], [ 73.661, 15.7687834 ], [ 73.6604563, 15.7705832 ], [ 73.6593752, 15.7731525 ], [ 73.659372, 15.7736677 ], [ 73.6574743, 15.7790655 ], [ 73.6569354, 15.7800926 ], [ 73.656932, 15.7806078 ], [ 73.6566644, 15.7808637 ], [ 73.6558545, 15.7826618 ], [ 73.6555799, 15.7839482 ], [ 73.6550411, 15.7849752 ], [ 73.6550377, 15.7854904 ], [ 73.6542312, 15.7867733 ], [ 73.653689, 15.7883156 ], [ 73.6536856, 15.7888308 ], [ 73.653145, 15.7901154 ], [ 73.6534024, 15.791405 ], [ 73.6529953, 15.7926906 ], [ 73.6527243, 15.7934615 ], [ 73.6521923, 15.7934583 ], [ 73.6523214, 15.7939742 ], [ 73.6515147, 15.7952572 ], [ 73.6509725, 15.7967994 ], [ 73.6509691, 15.7973146 ], [ 73.65043, 15.7983417 ], [ 73.649076, 15.8019397 ], [ 73.6490726, 15.8024547 ], [ 73.648396, 15.8042538 ], [ 73.6470666, 15.8041162 ], [ 73.6467988, 15.8043721 ], [ 73.6454678, 15.804493 ], [ 73.6454644, 15.8050083 ], [ 73.6449315, 15.8051332 ], [ 73.6443968, 15.8055167 ], [ 73.6443847, 15.8073199 ], [ 73.6449169, 15.8073231 ], [ 73.6445121, 15.8080935 ], [ 73.644507, 15.8088661 ], [ 73.6442393, 15.809122 ], [ 73.6439664, 15.8101508 ], [ 73.6432966, 15.8109194 ], [ 73.6419672, 15.8107818 ], [ 73.6414367, 15.8105208 ], [ 73.6406385, 15.8105159 ], [ 73.6403716, 15.8106435 ], [ 73.6402312, 15.811673 ], [ 73.6403631, 15.8119313 ], [ 73.6398309, 15.8119281 ], [ 73.6400919, 15.8127024 ], [ 73.6392938, 15.8126975 ], [ 73.6392902, 15.8132126 ], [ 73.6374244, 15.8137161 ], [ 73.6376835, 15.8147482 ], [ 73.6368854, 15.8147431 ], [ 73.6366141, 15.8155142 ], [ 73.6360821, 15.8155108 ], [ 73.6362112, 15.816027 ], [ 73.6367398, 15.8165454 ], [ 73.6368699, 15.8170614 ], [ 73.6376689, 15.8169372 ], [ 73.6387323, 15.8170731 ], [ 73.638821245278081, 15.819532858593751 ], [ 73.6388441, 15.8201649 ], [ 73.6380322, 15.8222205 ], [ 73.6377644, 15.8224764 ], [ 73.637761, 15.8229916 ], [ 73.637222, 15.8240186 ], [ 73.6372184, 15.8245338 ], [ 73.6361386, 15.8268453 ], [ 73.6358708, 15.8271012 ], [ 73.6350589, 15.8291568 ], [ 73.6350553, 15.829672 ], [ 73.634245, 15.8314701 ], [ 73.6339772, 15.8317261 ], [ 73.6337024, 15.8330122 ], [ 73.6328956, 15.8342951 ], [ 73.632892, 15.8348103 ], [ 73.6323529, 15.8358372 ], [ 73.6323495, 15.8363524 ], [ 73.6315425, 15.8376353 ], [ 73.6310018, 15.8389198 ], [ 73.6309948, 15.8399502 ], [ 73.6307253, 15.8404637 ], [ 73.6307183, 15.841494 ], [ 73.6299148, 15.8422617 ], [ 73.6293705, 15.8440613 ], [ 73.6291025, 15.8443172 ], [ 73.6290991, 15.8448324 ], [ 73.6280173, 15.8474015 ], [ 73.6277495, 15.8476574 ], [ 73.6274783, 15.8484285 ], [ 73.6269424, 15.8489402 ], [ 73.6266695, 15.8499689 ], [ 73.6264015, 15.8502248 ], [ 73.6258606, 15.8515092 ], [ 73.625325, 15.8520211 ], [ 73.6249211, 15.8527912 ], [ 73.6243889, 15.852788 ], [ 73.6242518, 15.8533023 ], [ 73.623046, 15.8545826 ], [ 73.622513, 15.8547075 ], [ 73.6217094, 15.8554752 ], [ 73.6211755, 15.8557294 ], [ 73.620105, 15.8566245 ], [ 73.6201014, 15.8571397 ], [ 73.6195692, 15.8571363 ], [ 73.6198317, 15.8576533 ], [ 73.6203622, 15.8579141 ], [ 73.6203605, 15.8581717 ], [ 73.6206266, 15.8581734 ], [ 73.6206249, 15.858431 ], [ 73.6200927, 15.8584276 ], [ 73.6198796, 15.8580076 ], [ 73.6195639, 15.857909 ], [ 73.6194766, 15.8573047 ], [ 73.6190379, 15.8570037 ], [ 73.6182396, 15.8569986 ], [ 73.6174439, 15.8566075 ], [ 73.6171864, 15.855318 ], [ 73.6166542, 15.8553146 ], [ 73.6167922, 15.8545427 ], [ 73.6165312, 15.8537682 ], [ 73.6165365, 15.8529955 ], [ 73.6164057, 15.8527372 ], [ 73.6156083, 15.8526028 ], [ 73.6150734, 15.8529861 ], [ 73.6150698, 15.8535013 ], [ 73.6134715, 15.8537487 ], [ 73.6133344, 15.854263 ], [ 73.6130666, 15.8545189 ], [ 73.6130596, 15.8555491 ], [ 73.6131914, 15.8558077 ], [ 73.6126591, 15.8558043 ], [ 73.6126538, 15.8565769 ], [ 73.6121216, 15.8565735 ], [ 73.611981, 15.857603 ], [ 73.6118466, 15.8578598 ], [ 73.6113144, 15.8578562 ], [ 73.6114348, 15.8596603 ], [ 73.6111634, 15.8604312 ], [ 73.6111581, 15.861204 ], [ 73.6100778, 15.8635155 ], [ 73.6099345, 15.86506 ], [ 73.6104667, 15.8650634 ], [ 73.61006, 15.8660912 ], [ 73.6095242, 15.866603 ], [ 73.6092494, 15.8678891 ], [ 73.6089797, 15.8684026 ], [ 73.6087117, 15.8686584 ], [ 73.6084403, 15.8694295 ], [ 73.6079045, 15.8699411 ], [ 73.6073617, 15.8714831 ], [ 73.6070938, 15.8717391 ], [ 73.6068206, 15.8727676 ], [ 73.6065527, 15.8730235 ], [ 73.6054705, 15.8755924 ], [ 73.6054669, 15.8761076 ], [ 73.6051989, 15.8763635 ], [ 73.6046561, 15.8779056 ], [ 73.6038506, 15.8789307 ], [ 73.6033095, 15.8802151 ], [ 73.6030415, 15.880471 ], [ 73.6030379, 15.8809861 ], [ 73.6022324, 15.8820114 ], [ 73.6019593, 15.8830399 ], [ 73.6008875, 15.8840634 ], [ 73.6008839, 15.8845784 ], [ 73.6006161, 15.8848343 ], [ 73.6002101, 15.8858621 ], [ 73.5988793, 15.8858534 ], [ 73.5990014, 15.8873998 ], [ 73.5992657, 15.8876591 ], [ 73.599264, 15.8879167 ], [ 73.5984565, 15.8891993 ], [ 73.5980508, 15.890227 ], [ 73.5975184, 15.8902236 ], [ 73.5975148, 15.8907388 ], [ 73.5969825, 15.8907353 ], [ 73.5971133, 15.8909938 ], [ 73.5968328, 15.8930526 ], [ 73.5962951, 15.8938218 ], [ 73.5957521, 15.8953639 ], [ 73.5954843, 15.8956198 ], [ 73.5952127, 15.8963907 ], [ 73.5941356, 15.898187 ], [ 73.5933316, 15.8989545 ], [ 73.5931955, 15.8994688 ], [ 73.5926624, 15.8995935 ], [ 73.5923944, 15.8998494 ], [ 73.5918612, 15.8999751 ], [ 73.5921237, 15.900492 ], [ 73.5910572, 15.9007426 ], [ 73.591181, 15.9020314 ], [ 73.5906431, 15.9028006 ], [ 73.5906395, 15.9033159 ], [ 73.5898321, 15.9045986 ], [ 73.5898285, 15.9051136 ], [ 73.5887567, 15.9061371 ], [ 73.5887531, 15.9066521 ], [ 73.5879455, 15.9079348 ], [ 73.5871417, 15.9087024 ], [ 73.5870054, 15.9092166 ], [ 73.5864722, 15.9093414 ], [ 73.5862042, 15.9095973 ], [ 73.5843392, 15.9098426 ], [ 73.5830083, 15.9098339 ], [ 73.5819453, 15.9095693 ], [ 73.5811451, 15.9098216 ], [ 73.5803466, 15.9098165 ], [ 73.5798125, 15.9100705 ], [ 73.5790139, 15.9100652 ], [ 73.5787469, 15.9101928 ], [ 73.5784734, 15.9112213 ], [ 73.5771398, 15.9115984 ], [ 73.5752774, 15.9114578 ], [ 73.5752738, 15.911973 ], [ 73.5731453, 15.9118297 ], [ 73.5726148, 15.9115685 ], [ 73.5704853, 15.9115545 ], [ 73.5699493, 15.9120662 ], [ 73.5688818, 15.9124459 ], [ 73.568473, 15.9137311 ], [ 73.568205, 15.913987 ], [ 73.5679334, 15.9147579 ], [ 73.5676654, 15.9150136 ], [ 73.5668505, 15.9173264 ], [ 73.5663126, 15.9180957 ], [ 73.5657766, 15.9186073 ], [ 73.5656403, 15.9191215 ], [ 73.5645728, 15.9195003 ], [ 73.5640368, 15.9200119 ], [ 73.5627021, 15.9205183 ], [ 73.5624341, 15.9207742 ], [ 73.5602982, 15.9216619 ], [ 73.5602946, 15.9221769 ], [ 73.5589599, 15.9226832 ], [ 73.5588227, 15.9231975 ], [ 73.5584201, 15.9237099 ], [ 73.5560208, 15.924209 ], [ 73.5560172, 15.9247243 ], [ 73.5549504, 15.9249747 ], [ 73.5550795, 15.9254907 ], [ 73.554945, 15.9257473 ], [ 73.5544116, 15.9258722 ], [ 73.5536095, 15.926382 ], [ 73.5525447, 15.9263748 ], [ 73.5522767, 15.9266305 ], [ 73.5493457, 15.9269977 ], [ 73.5492084, 15.927512 ], [ 73.5485379, 15.9282803 ], [ 73.5477393, 15.9282748 ], [ 73.5477356, 15.92879 ], [ 73.5466707, 15.9287828 ], [ 73.5465335, 15.9292971 ], [ 73.5455949, 15.9303211 ], [ 73.5445282, 15.9305714 ], [ 73.5442546, 15.9315999 ], [ 73.5437212, 15.9317246 ], [ 73.542918, 15.9323636 ], [ 73.5426445, 15.9333922 ], [ 73.5413098, 15.9338983 ], [ 73.5413041, 15.934671 ], [ 73.5407707, 15.9347957 ], [ 73.5399684, 15.9353054 ], [ 73.5375632, 15.936577 ], [ 73.5348983, 15.9369458 ], [ 73.5348947, 15.937461 ], [ 73.534096, 15.9374555 ], [ 73.5340941, 15.9377131 ], [ 73.5346265, 15.9377167 ], [ 73.5346229, 15.9382317 ], [ 73.5354215, 15.9382372 ], [ 73.5354177, 15.9387524 ], [ 73.5362154, 15.938886 ], [ 73.5364797, 15.9391455 ], [ 73.5372774, 15.9392801 ], [ 73.5370168, 15.9385056 ], [ 73.5399414, 15.9390406 ], [ 73.5399376, 15.9395558 ], [ 73.5394052, 15.9395523 ], [ 73.5388616, 15.9410939 ], [ 73.539775, 15.9408029 ], [ 73.5407335, 15.9399471 ], [ 73.542597, 15.9399597 ], [ 73.54366, 15.9402245 ], [ 73.5437917, 15.9403546 ], [ 73.5439215, 15.9408707 ], [ 73.544453, 15.9410026 ], [ 73.5445847, 15.9411327 ], [ 73.5447146, 15.9416486 ], [ 73.5451153, 15.9413939 ], [ 73.5452527, 15.9408796 ], [ 73.5460531, 15.9406275 ], [ 73.546182, 15.9411434 ], [ 73.5467089, 15.9419197 ], [ 73.5473721, 15.9423101 ], [ 73.5484315, 15.94309 ], [ 73.5510916, 15.9433655 ], [ 73.551356, 15.9436248 ], [ 73.5521548, 15.9436303 ], [ 73.5524218, 15.9435037 ], [ 73.552418, 15.9440189 ], [ 73.5529516, 15.9438932 ], [ 73.553085, 15.9437658 ], [ 73.5530907, 15.942993 ], [ 73.5529597, 15.9427346 ], [ 73.5537594, 15.9426107 ], [ 73.5542024, 15.9423154 ], [ 73.5540209, 15.9432568 ], [ 73.5545534, 15.9432604 ], [ 73.5545479, 15.9440331 ], [ 73.556147, 15.9437862 ], [ 73.5564022, 15.9453334 ], [ 73.5572009, 15.9453389 ], [ 73.5574744, 15.9443103 ], [ 73.5593398, 15.9440652 ], [ 73.5593379, 15.9443228 ], [ 73.5588055, 15.9443192 ], [ 73.5586683, 15.9448335 ], [ 73.5578641, 15.9456008 ], [ 73.5571916, 15.9466267 ], [ 73.5547909, 15.9472542 ], [ 73.5531927, 15.9473727 ], [ 73.5529321, 15.9465982 ], [ 73.5523997, 15.9465946 ], [ 73.552126, 15.9476231 ], [ 73.5514619, 15.947361 ], [ 73.5510612, 15.9476159 ], [ 73.5510648, 15.9471007 ], [ 73.5507987, 15.947099 ], [ 73.5505269, 15.94787 ], [ 73.5494685, 15.9469607 ], [ 73.5489368, 15.9468288 ], [ 73.548807, 15.9463128 ], [ 73.5485428, 15.9460535 ], [ 73.5485464, 15.9455383 ], [ 73.5480251, 15.9439892 ], [ 73.5473655, 15.943212 ], [ 73.5470984, 15.9433387 ], [ 73.5441701, 15.9433188 ], [ 73.5439057, 15.9430595 ], [ 73.5433733, 15.9430559 ], [ 73.5423037, 15.9436931 ], [ 73.5425672, 15.9440809 ], [ 73.5430986, 15.9442136 ], [ 73.5428287, 15.9447269 ], [ 73.5425636, 15.9445959 ], [ 73.5396333, 15.9448337 ], [ 73.5388403, 15.9440556 ], [ 73.537512, 15.9436605 ], [ 73.5375139, 15.9434031 ], [ 73.5380463, 15.9434067 ], [ 73.5380518, 15.9426339 ], [ 73.5377847, 15.9427605 ], [ 73.5361882, 15.9426212 ], [ 73.5364508, 15.9431383 ], [ 73.5359193, 15.9430055 ], [ 73.5353897, 15.9426159 ], [ 73.5352824, 15.9390091 ], [ 73.5351516, 15.9387505 ], [ 73.5343538, 15.9386159 ], [ 73.5340896, 15.9383565 ], [ 73.5332918, 15.9382228 ], [ 73.5334283, 15.9377086 ], [ 73.5339643, 15.9371969 ], [ 73.5339718, 15.9361667 ], [ 73.5335823, 15.9348762 ], [ 73.5330499, 15.9348726 ], [ 73.5330612, 15.9333272 ], [ 73.5322635, 15.9331924 ], [ 73.5312024, 15.93267 ], [ 73.5296035, 15.9329168 ], [ 73.5287991, 15.933684 ], [ 73.5277352, 15.9335485 ], [ 73.527598, 15.9340626 ], [ 73.5271954, 15.9345751 ], [ 73.5258624, 15.9348235 ], [ 73.5258569, 15.9355963 ], [ 73.5245239, 15.9358446 ], [ 73.5242521, 15.9366156 ], [ 73.5237188, 15.9367403 ], [ 73.5234506, 15.936996 ], [ 73.5229174, 15.9371215 ], [ 73.5226454, 15.9378925 ], [ 73.5210482, 15.9378815 ], [ 73.5210425, 15.9386543 ], [ 73.5199805, 15.9382601 ], [ 73.5197144, 15.9382584 ], [ 73.5194462, 15.9385141 ], [ 73.5189129, 15.9386396 ], [ 73.5189167, 15.9381245 ], [ 73.5183833, 15.9382491 ], [ 73.51758, 15.9388881 ], [ 73.517059, 15.9373391 ], [ 73.5165266, 15.9373353 ], [ 73.5166573, 15.9375938 ], [ 73.5166536, 15.9381089 ], [ 73.5162508, 15.9386212 ], [ 73.5138532, 15.9388624 ], [ 73.5137233, 15.9383462 ], [ 73.5133283, 15.9378284 ], [ 73.5125298, 15.9378229 ], [ 73.5124018, 15.9370493 ], [ 73.5120068, 15.9365315 ], [ 73.5101414, 15.936776 ], [ 73.5102703, 15.9372922 ], [ 73.5094508, 15.9401198 ], [ 73.5086464, 15.940887 ], [ 73.5075625, 15.9434553 ], [ 73.5070263, 15.9439667 ], [ 73.5064882, 15.9447358 ], [ 73.5062162, 15.9455067 ], [ 73.50568, 15.9460181 ], [ 73.5056744, 15.9467908 ], [ 73.5047239, 15.94936 ], [ 73.5041905, 15.9494846 ], [ 73.5036553, 15.9498677 ], [ 73.5029777, 15.9514084 ], [ 73.5029739, 15.9519236 ], [ 73.5026918, 15.9529465 ], [ 73.5021618, 15.953721 ], [ 73.5018981, 15.9558109 ], [ 73.5018069, 15.9563764 ], [ 73.5020188, 15.9566965 ], [ 73.5025272, 15.9666718 ], [ 73.5019264, 15.9670225 ], [ 73.5013256, 15.9675795 ], [ 73.5001852, 15.9689043 ], [ 73.4999171, 15.96916 ], [ 73.4993731, 15.9707017 ], [ 73.4980265, 15.9727529 ], [ 73.4974901, 15.9732644 ], [ 73.4969518, 15.9740332 ], [ 73.4966799, 15.9748042 ], [ 73.4961416, 15.975573 ], [ 73.495337, 15.9763402 ], [ 73.495065, 15.9771109 ], [ 73.4937241, 15.9783895 ], [ 73.4934521, 15.9791602 ], [ 73.4923794, 15.9801831 ], [ 73.4921072, 15.9809538 ], [ 73.4910344, 15.9819767 ], [ 73.4899501, 15.9845448 ], [ 73.4896819, 15.9848006 ], [ 73.4891378, 15.9863422 ], [ 73.4888696, 15.9865979 ], [ 73.4888638, 15.9873706 ], [ 73.4885937, 15.9878837 ], [ 73.4888055, 15.9995567 ], [ 73.4891669, 16.0002515 ], [ 73.4890314, 16.0005082 ], [ 73.489529, 16.0051479 ], [ 73.4897547, 16.0105586 ], [ 73.4894865, 16.0108143 ], [ 73.4894729, 16.0126172 ], [ 73.4886489, 16.0159599 ], [ 73.4883807, 16.0162156 ], [ 73.4853852, 16.0249519 ], [ 73.4853812, 16.0254671 ], [ 73.4842947, 16.0282927 ], [ 73.4842907, 16.0288079 ], [ 73.482646, 16.034978 ], [ 73.4826421, 16.0354932 ], [ 73.4818333, 16.0367754 ], [ 73.4815612, 16.0375461 ], [ 73.4803476, 16.0395981 ], [ 73.4795466, 16.03985 ], [ 73.4794071, 16.0406217 ], [ 73.4790042, 16.0411339 ], [ 73.4784705, 16.0412584 ], [ 73.4779339, 16.0417699 ], [ 73.4774003, 16.0418954 ], [ 73.4773964, 16.0424104 ], [ 73.4768628, 16.042535 ], [ 73.4763261, 16.0430464 ], [ 73.4757925, 16.0431717 ], [ 73.4757886, 16.0436869 ], [ 73.4755232, 16.0435557 ], [ 73.4749906, 16.043552 ], [ 73.4747222, 16.0438077 ], [ 73.4733866, 16.0443133 ], [ 73.4731184, 16.044569 ], [ 73.4709817, 16.0453265 ], [ 73.4683144, 16.0458224 ], [ 73.4653847, 16.0458014 ], [ 73.4651163, 16.0460572 ], [ 73.4640509, 16.0460496 ], [ 73.4637837, 16.0461768 ], [ 73.4640401, 16.0474665 ], [ 73.4648402, 16.0473431 ], [ 73.4649738, 16.0472157 ], [ 73.4651114, 16.0467015 ], [ 73.4664461, 16.0463242 ], [ 73.4675104, 16.046461 ], [ 73.4676393, 16.0469772 ], [ 73.468330724056187, 16.047882580078127 ], [ 73.4684304, 16.0480131 ], [ 73.4684166, 16.049816 ], [ 73.4678761, 16.0508424 ], [ 73.4678721, 16.0513577 ], [ 73.4670611, 16.0528973 ], [ 73.4663898, 16.0536652 ], [ 73.4653215, 16.0540434 ], [ 73.4650532, 16.0542991 ], [ 73.4642531, 16.0544225 ], [ 73.4642571, 16.0539075 ], [ 73.4631868, 16.0545433 ], [ 73.4605192, 16.0550392 ], [ 73.4583894, 16.0548956 ], [ 73.4585261, 16.0543815 ], [ 73.4587944, 16.0541258 ], [ 73.4586716, 16.052837 ], [ 73.4573408, 16.0526982 ], [ 73.4568071, 16.0528235 ], [ 73.4567992, 16.0538538 ], [ 73.4554675, 16.0538441 ], [ 73.4554556, 16.0553896 ], [ 73.4557219, 16.0553915 ], [ 73.4558585, 16.0548774 ], [ 73.4559933, 16.0547491 ], [ 73.456527, 16.0546245 ], [ 73.4569161, 16.0559152 ], [ 73.4569061, 16.0572031 ], [ 73.4567714, 16.0574595 ], [ 73.4562378, 16.0575841 ], [ 73.455702, 16.057967 ], [ 73.455698, 16.0584822 ], [ 73.4562299, 16.0586143 ], [ 73.4563614, 16.0587445 ], [ 73.4564892, 16.0595181 ], [ 73.4559564, 16.0595143 ], [ 73.4560832, 16.0602879 ], [ 73.4559485, 16.0605446 ], [ 73.4551475, 16.0607963 ], [ 73.4552703, 16.0620851 ], [ 73.4553897, 16.0628861 ], [ 73.4560618, 16.063318 ], [ 73.4578964, 16.0628319 ], [ 73.4585933, 16.0628154 ], [ 73.4592617, 16.0626082 ], [ 73.4597981, 16.0627608 ], [ 73.4605068, 16.063016 ], [ 73.4610008, 16.0634263 ], [ 73.4618007, 16.0640738 ], [ 73.4623115, 16.0644538 ], [ 73.4626359, 16.0647944 ], [ 73.4637602, 16.0665249 ], [ 73.4641873, 16.0686611 ], [ 73.464028, 16.0691312 ], [ 73.4637286, 16.0693436 ], [ 73.4629347, 16.0693168 ], [ 73.4620877, 16.0694663 ], [ 73.4621472, 16.0698993 ], [ 73.4627276, 16.0702606 ], [ 73.4634422, 16.0702354 ], [ 73.4642633, 16.070392 ], [ 73.464393, 16.070908 ], [ 73.4652227, 16.0708206 ], [ 73.4658713, 16.0691157 ], [ 73.4657407, 16.0688572 ], [ 73.4668043, 16.0691223 ], [ 73.4671275, 16.0691446 ], [ 73.467458, 16.0694359 ], [ 73.4671967, 16.0701003 ], [ 73.4676033, 16.0691282 ], [ 73.4680004, 16.0693884 ], [ 73.4681838, 16.0704246 ], [ 73.4686393, 16.0729991 ], [ 73.4683646, 16.0729452 ], [ 73.4681141, 16.0732767 ], [ 73.4681521, 16.0737808 ], [ 73.4686301, 16.0741989 ], [ 73.469754, 16.0739107 ], [ 73.4709706, 16.0730287 ], [ 73.4715864, 16.072339 ], [ 73.4719314, 16.0720478 ], [ 73.4726089, 16.0716045 ], [ 73.4734125, 16.0711364 ], [ 73.474024, 16.0707911 ], [ 73.4738894, 16.0699766 ], [ 73.4733259, 16.0696842 ], [ 73.4736001, 16.0686559 ], [ 73.4738685, 16.0684002 ], [ 73.4738764, 16.0673699 ], [ 73.4737457, 16.0671114 ], [ 73.4732129, 16.0671076 ], [ 73.4734822, 16.0667228 ], [ 73.4740169, 16.066469 ], [ 73.4746891, 16.0655727 ], [ 73.4748267, 16.0650585 ], [ 73.4750921, 16.0651887 ], [ 73.4761049, 16.0656362 ], [ 73.4764153, 16.0663576 ], [ 73.4756141, 16.0666096 ], [ 73.4753399, 16.0676379 ], [ 73.4758727, 16.0676417 ], [ 73.475737, 16.0678984 ], [ 73.4757332, 16.0684134 ], [ 73.476262, 16.0689324 ], [ 73.4763898, 16.069706 ], [ 73.4771898, 16.0695824 ], [ 73.4774542, 16.0698419 ], [ 73.480115, 16.0702476 ], [ 73.4800222, 16.070416 ], [ 73.475052, 16.0704692 ], [ 73.4750481, 16.0709844 ], [ 73.4742478, 16.0711068 ], [ 73.4734459, 16.0714881 ], [ 73.4735746, 16.072004 ], [ 73.4745005, 16.0729118 ], [ 73.4752083, 16.0728761 ], [ 73.4755621, 16.0734344 ], [ 73.4763603, 16.0735693 ], [ 73.4754196, 16.0745929 ], [ 73.475283, 16.075107 ], [ 73.4758158, 16.075111 ], [ 73.4755415, 16.0761392 ], [ 73.475275, 16.0761373 ], [ 73.4752692, 16.0769101 ], [ 73.4755357, 16.076912 ], [ 73.4752495, 16.0794856 ], [ 73.4744495, 16.0796082 ], [ 73.4728541, 16.079211 ], [ 73.4724659, 16.0776627 ], [ 73.4724737, 16.0766324 ], [ 73.4727421, 16.0763769 ], [ 73.4732934, 16.0742757 ], [ 73.4726947, 16.07412 ], [ 73.472058, 16.0742757 ], [ 73.4708601, 16.0746458 ], [ 73.47052, 16.0748994 ], [ 73.469445, 16.0752716 ], [ 73.467856, 16.075154 ], [ 73.4674129, 16.07462 ], [ 73.4670455, 16.074388 ], [ 73.4667666, 16.0740159 ], [ 73.4660316, 16.0730133 ], [ 73.4659779, 16.0721983 ], [ 73.46603, 16.0717385 ], [ 73.4660831, 16.0714519 ], [ 73.4658551, 16.07142 ], [ 73.4654694, 16.0719664 ], [ 73.4654528, 16.0729705 ], [ 73.4653026, 16.0735927 ], [ 73.4649437, 16.07422 ], [ 73.4649446, 16.0743984 ], [ 73.4649496, 16.0754159 ], [ 73.4645585, 16.0767602 ], [ 73.4641927, 16.0775958 ], [ 73.4635935, 16.0785788 ], [ 73.4630458, 16.0789777 ], [ 73.4625919, 16.0787803 ], [ 73.4622153, 16.0784612 ], [ 73.4620587, 16.0790236 ], [ 73.4625979, 16.0791374 ], [ 73.4627275, 16.0796536 ], [ 73.461661, 16.0797742 ], [ 73.4611301, 16.0795128 ], [ 73.4608638, 16.0795109 ], [ 73.460327, 16.0800222 ], [ 73.4595279, 16.0800165 ], [ 73.458997, 16.0797551 ], [ 73.4571314, 16.0798708 ], [ 73.456853, 16.0814143 ], [ 73.4576512, 16.0815483 ], [ 73.4580433, 16.0824531 ], [ 73.4588366, 16.0832316 ], [ 73.4589643, 16.0840051 ], [ 73.4584316, 16.0840014 ], [ 73.4589583, 16.0847778 ], [ 73.4576245, 16.0850257 ], [ 73.4577532, 16.0855419 ], [ 73.4578859, 16.0856712 ], [ 73.4592187, 16.0855525 ], [ 73.4592227, 16.0850373 ], [ 73.4605538, 16.0851752 ], [ 73.4611231, 16.0855935 ], [ 73.4621317, 16.0860806 ], [ 73.4629138, 16.086211 ], [ 73.4628076, 16.0872022 ], [ 73.4635843, 16.0873934 ], [ 73.4638091, 16.0864311 ], [ 73.4645912, 16.0865538 ], [ 73.4648112, 16.0870269 ], [ 73.464932, 16.0873966 ], [ 73.4651885, 16.0886863 ], [ 73.4659817, 16.0894646 ], [ 73.4661114, 16.0899808 ], [ 73.4666442, 16.0899845 ], [ 73.4666402, 16.0904996 ], [ 73.467173, 16.0905035 ], [ 73.4672177, 16.0915241 ], [ 73.4674266, 16.092179 ], [ 73.4678209, 16.0928262 ], [ 73.4679665, 16.0934084 ], [ 73.4680774, 16.0941159 ], [ 73.4680947, 16.0947697 ], [ 73.4686505, 16.0949975 ], [ 73.4692913, 16.0951397 ], [ 73.4692604, 16.0959183 ], [ 73.4690778, 16.095985 ], [ 73.4690373, 16.096237 ], [ 73.4691043, 16.0966391 ], [ 73.4697857, 16.0972191 ], [ 73.4698462, 16.0976704 ], [ 73.4699857, 16.0977889 ], [ 73.4700501, 16.0978662 ], [ 73.4703398, 16.0978456 ], [ 73.4703988, 16.0977168 ], [ 73.470506, 16.0976292 ], [ 73.4706616, 16.0974694 ], [ 73.4708236, 16.0973251 ], [ 73.4709728, 16.0972271 ], [ 73.4712302, 16.0971498 ], [ 73.4714137, 16.0971034 ], [ 73.4714716, 16.0971911 ], [ 73.4716379, 16.0972117 ], [ 73.471756, 16.0971034 ], [ 73.4719555, 16.0970467 ], [ 73.47211, 16.0969694 ], [ 73.4721969, 16.0968818 ], [ 73.47239, 16.096856 ], [ 73.4725671, 16.0969797 ], [ 73.4726518, 16.0971086 ], [ 73.4729157, 16.0971859 ], [ 73.4731239, 16.0971138 ], [ 73.4732204, 16.0970107 ], [ 73.4733867, 16.0970055 ], [ 73.473538, 16.0970777 ], [ 73.473656, 16.0971344 ], [ 73.4738964, 16.0971138 ], [ 73.4740841, 16.0969849 ], [ 73.4742665, 16.0968457 ], [ 73.4744875, 16.096619 ], [ 73.4746688, 16.0965365 ], [ 73.4746527, 16.0966086 ], [ 73.4745251, 16.0967787 ], [ 73.4743845, 16.0968921 ], [ 73.4741807, 16.0970931 ], [ 73.4738374, 16.097222 ], [ 73.4735852, 16.0972478 ], [ 73.473258, 16.0972838 ], [ 73.472743, 16.097289 ], [ 73.4723632, 16.0972323 ], [ 73.4720403, 16.0972529 ], [ 73.4718268, 16.0973869 ], [ 73.4717409, 16.0974848 ], [ 73.471595, 16.0973869 ], [ 73.4714609, 16.0973921 ], [ 73.4712356, 16.0974488 ], [ 73.4710425, 16.0975312 ], [ 73.4708655, 16.0976137 ], [ 73.4706563, 16.0977786 ], [ 73.4705447, 16.0980209 ], [ 73.4703076, 16.0982476 ], [ 73.4699492, 16.0982116 ], [ 73.4697896, 16.0981255 ], [ 73.469519, 16.0978923 ], [ 73.4693125, 16.0976454 ], [ 73.4691797, 16.0974428 ], [ 73.4688562, 16.0974385 ], [ 73.4686682, 16.0975676 ], [ 73.4684826, 16.0977245 ], [ 73.4685606, 16.0974642 ], [ 73.4687141, 16.0972326 ], [ 73.4689176, 16.0971833 ], [ 73.4689077, 16.096846 ], [ 73.4686961, 16.0964813 ], [ 73.4684826, 16.0962654 ], [ 73.4682364, 16.0965942 ], [ 73.4682315, 16.0975493 ], [ 73.4678802, 16.0984492 ], [ 73.4675506, 16.0997127 ], [ 73.4672224, 16.100932 ], [ 73.4666097, 16.1024527 ], [ 73.4665003, 16.1034478 ], [ 73.4668358, 16.1039103 ], [ 73.4663763, 16.1043517 ], [ 73.4659168, 16.1043798 ], [ 73.4653843, 16.1051366 ], [ 73.4650634, 16.1070707 ], [ 73.4652822, 16.1084441 ], [ 73.465078, 16.1087665 ], [ 73.4651728, 16.1108126 ], [ 73.4651582, 16.1115835 ], [ 73.4649175, 16.1122001 ], [ 73.4655667, 16.1134054 ], [ 73.4657053, 16.1143654 ], [ 73.4655036, 16.1170212 ], [ 73.4652352, 16.1172769 ], [ 73.4652312, 16.1177919 ], [ 73.4649607, 16.1183052 ], [ 73.4649528, 16.1193355 ], [ 73.4641297, 16.1224203 ], [ 73.4640959, 16.1267987 ], [ 73.4644862, 16.1280894 ], [ 73.4650191, 16.1280932 ], [ 73.4651479, 16.1286093 ], [ 73.466076, 16.1292595 ], [ 73.4673051, 16.1307285 ], [ 73.4683807, 16.1311871 ], [ 73.4695221, 16.1316023 ], [ 73.470053, 16.1318637 ], [ 73.4708445, 16.1328996 ], [ 73.4710908, 16.1338477 ], [ 73.4712624, 16.1345279 ], [ 73.4711551, 16.1351463 ], [ 73.4708719, 16.135709 ], [ 73.4706573, 16.1361213 ], [ 73.4706627, 16.1349814 ], [ 73.4706573, 16.1342043 ], [ 73.4706359, 16.1335756 ], [ 73.4697942, 16.132748 ], [ 73.4692282, 16.1320807 ], [ 73.469475, 16.1328423 ], [ 73.469144, 16.1343172 ], [ 73.4685711, 16.1363841 ], [ 73.4683388, 16.1374126 ], [ 73.4673545, 16.1389127 ], [ 73.4658079, 16.1410934 ], [ 73.4653053, 16.1427768 ], [ 73.465423, 16.1448382 ], [ 73.465956, 16.144842 ], [ 73.4660789, 16.1461308 ], [ 73.4659441, 16.1463874 ], [ 73.466476, 16.1465195 ], [ 73.4666079, 16.1466498 ], [ 73.4666018, 16.1474224 ], [ 73.4668644, 16.1479395 ], [ 73.4671051, 16.1512895 ], [ 73.4673677, 16.1518066 ], [ 73.4674933, 16.1528378 ], [ 73.4680263, 16.1528416 ], [ 73.4684176, 16.1538747 ], [ 73.4688148, 16.1542634 ], [ 73.4696124, 16.1545267 ], [ 73.4700086, 16.1549164 ], [ 73.4705357, 16.1556928 ], [ 73.4707555, 16.1562973 ], [ 73.4698119, 16.1575621 ], [ 73.469357, 16.1571447 ], [ 73.4687589, 16.1567165 ], [ 73.4681774, 16.156241 ], [ 73.4674006, 16.155617 ], [ 73.4664495, 16.154942 ], [ 73.4654812, 16.1541202 ], [ 73.4650365, 16.1537744 ], [ 73.4646626, 16.1533401 ], [ 73.4644646, 16.1530732 ], [ 73.4641337, 16.1527372 ], [ 73.4640311, 16.1525553 ], [ 73.4636219, 16.1517963 ], [ 73.4633764, 16.1510051 ], [ 73.4632968, 16.1505746 ], [ 73.4635184, 16.1500207 ], [ 73.4640382, 16.149694 ], [ 73.4644931, 16.1487521 ], [ 73.4645593, 16.1474266 ], [ 73.4644239, 16.1470759 ], [ 73.4640787, 16.146374 ], [ 73.4638054, 16.1453234 ], [ 73.4633891, 16.1444418 ], [ 73.4630978, 16.1437642 ], [ 73.4627702, 16.1432737 ], [ 73.4622781, 16.1422977 ], [ 73.4618881, 16.1417313 ], [ 73.4615518, 16.1412629 ], [ 73.4613999, 16.1409646 ], [ 73.4610175, 16.140406 ], [ 73.4606398, 16.1401051 ], [ 73.4604767, 16.1399752 ], [ 73.4601093, 16.1393831 ], [ 73.4598588, 16.1390132 ], [ 73.4595058, 16.1386813 ], [ 73.459344, 16.1383551 ], [ 73.4588384, 16.1373652 ], [ 73.4585546, 16.1370616 ], [ 73.4585098, 16.136165 ], [ 73.4584387, 16.1347426 ], [ 73.4587192, 16.1329416 ], [ 73.4589897, 16.1324285 ], [ 73.4589955, 16.1316558 ], [ 73.4596672, 16.1310162 ], [ 73.4604675, 16.1308938 ], [ 73.4603418, 16.1298626 ], [ 73.4606143, 16.1290918 ], [ 73.4606321, 16.1267738 ], [ 73.4609025, 16.1262606 ], [ 73.4609264, 16.1231699 ], [ 73.4617396, 16.1213729 ], [ 73.4617476, 16.1203427 ], [ 73.4612267, 16.1187934 ], [ 73.4606997, 16.1180168 ], [ 73.4601709, 16.117498 ], [ 73.4591229, 16.1151722 ], [ 73.4592647, 16.1141431 ], [ 73.4587319, 16.1141391 ], [ 73.4591488, 16.1118241 ], [ 73.4594193, 16.1113109 ], [ 73.4600038, 16.1046182 ], [ 73.4608288, 16.1012758 ], [ 73.4608349, 16.1005031 ], [ 73.4613735, 16.0997343 ], [ 73.4613934, 16.0971588 ], [ 73.4616912, 16.0972545 ], [ 73.4626187, 16.0969287 ], [ 73.4635327, 16.0961439 ], [ 73.4639367, 16.0956317 ], [ 73.4637807, 16.0953871 ], [ 73.4638976, 16.0950433 ], [ 73.46421, 16.0947316 ], [ 73.4644593, 16.0942955 ], [ 73.4645617, 16.0934347 ], [ 73.4642313, 16.0929544 ], [ 73.4643198, 16.0925729 ], [ 73.4641809, 16.0922848 ], [ 73.4640843, 16.0916972 ], [ 73.4639641, 16.0914452 ], [ 73.4637807, 16.0911303 ], [ 73.4637421, 16.0908313 ], [ 73.4631713, 16.0902803 ], [ 73.4625914, 16.0895938 ], [ 73.4624342, 16.0887505 ], [ 73.4618672, 16.0889979 ], [ 73.4614965, 16.0887284 ], [ 73.4611666, 16.0895536 ], [ 73.4609488, 16.0909648 ], [ 73.4608624, 16.0920575 ], [ 73.4606902, 16.0935548 ], [ 73.4604649, 16.0950258 ], [ 73.4605604, 16.09672 ], [ 73.4602563, 16.0976189 ], [ 73.4599725, 16.0980776 ], [ 73.4595144, 16.0987373 ], [ 73.4593502, 16.0992841 ], [ 73.4591893, 16.0998196 ], [ 73.4588921, 16.1004696 ], [ 73.4585359, 16.101373 ], [ 73.4583573, 16.1023719 ], [ 73.458022, 16.1028301 ], [ 73.4576234, 16.1037171 ], [ 73.4575746, 16.1044912 ], [ 73.4575075, 16.1049221 ], [ 73.4573052, 16.1055722 ], [ 73.4575794, 16.107365 ], [ 73.4576872, 16.1091374 ], [ 73.4576416, 16.109795 ], [ 73.4579034, 16.1140422 ], [ 73.4577087, 16.1149508 ], [ 73.4577001, 16.1158552 ], [ 73.457581, 16.1171756 ], [ 73.4572795, 16.1185578 ], [ 73.4571288, 16.1202074 ], [ 73.4566583, 16.1210201 ], [ 73.4564003, 16.121857 ], [ 73.4564212, 16.1225265 ], [ 73.4560666, 16.1234025 ], [ 73.4556718, 16.1246378 ], [ 73.4549841, 16.1259998 ], [ 73.4545094, 16.1272707 ], [ 73.4539609, 16.1280134 ], [ 73.453414, 16.1298125 ], [ 73.4531456, 16.130068 ], [ 73.4531377, 16.1310983 ], [ 73.4525947, 16.1323821 ], [ 73.4525867, 16.1334124 ], [ 73.4517693, 16.1357246 ], [ 73.4517532, 16.1377849 ], [ 73.4514828, 16.1382982 ], [ 73.4511823, 16.1426747 ], [ 73.4509139, 16.1429302 ], [ 73.4506413, 16.143701 ], [ 73.4506353, 16.1444736 ], [ 73.4500883, 16.1462727 ], [ 73.4492809, 16.1472971 ], [ 73.4492649, 16.1493576 ], [ 73.4489923, 16.1501281 ], [ 73.4489844, 16.1511584 ], [ 73.4484333, 16.1534725 ], [ 73.4481649, 16.1537282 ], [ 73.4476198, 16.1552695 ], [ 73.4476138, 16.1560421 ], [ 73.4468043, 16.1573241 ], [ 73.4468003, 16.1578393 ], [ 73.4462613, 16.158608 ], [ 73.4459706, 16.1616966 ], [ 73.4457001, 16.1622099 ], [ 73.4456901, 16.1634976 ], [ 73.4451409, 16.1655541 ], [ 73.4445818, 16.1688985 ], [ 73.4445737, 16.1699287 ], [ 73.4440347, 16.1706974 ], [ 73.4440307, 16.1712126 ], [ 73.4434896, 16.1722388 ], [ 73.4434854, 16.1727539 ], [ 73.4432171, 16.1730096 ], [ 73.4426718, 16.1745509 ], [ 73.4424034, 16.1748066 ], [ 73.4415877, 16.176861 ], [ 73.441301, 16.1794346 ], [ 73.4410303, 16.1799478 ], [ 73.4407376, 16.183294 ], [ 73.4404609, 16.1845798 ], [ 73.4399198, 16.1856061 ], [ 73.439633, 16.1881797 ], [ 73.4390878, 16.1897212 ], [ 73.4388192, 16.1899767 ], [ 73.4388092, 16.1912643 ], [ 73.4382618, 16.1930634 ], [ 73.4371815, 16.1948584 ], [ 73.4366363, 16.1963999 ], [ 73.4363057, 16.197009 ], [ 73.4356652, 16.1979682 ], [ 73.4348868, 16.1992586 ], [ 73.4344373, 16.2006165 ], [ 73.4346062, 16.2003766 ], [ 73.43474, 16.2002492 ], [ 73.4348987, 16.2004821 ], [ 73.4350569, 16.2007432 ], [ 73.4351343, 16.2010249 ], [ 73.4351352, 16.2014624 ], [ 73.4361765, 16.201789 ], [ 73.4367832, 16.2013408 ], [ 73.4373169, 16.2006778 ], [ 73.4376361, 16.2002446 ], [ 73.4378169, 16.1999468 ], [ 73.439187, 16.1998191 ], [ 73.4397631, 16.2001889 ], [ 73.4408966, 16.2000086 ], [ 73.44183, 16.1993694 ], [ 73.4423622, 16.1993724 ], [ 73.4434479, 16.199425 ], [ 73.4438787, 16.1982984 ], [ 73.4437338, 16.1968925 ], [ 73.4427929, 16.1930967 ], [ 73.4429277, 16.1929684 ], [ 73.4431942, 16.1929703 ], [ 73.4442543, 16.1937508 ], [ 73.444521, 16.1937527 ], [ 73.4453255, 16.1931152 ], [ 73.4451878, 16.1936293 ], [ 73.4446506, 16.1941405 ], [ 73.4446164, 16.1985189 ], [ 73.4444815, 16.1987754 ], [ 73.4450135, 16.1989077 ], [ 73.4454098, 16.1992974 ], [ 73.4454059, 16.1998124 ], [ 73.4455376, 16.200071 ], [ 73.4450044, 16.200067 ], [ 73.4448627, 16.2010963 ], [ 73.4445941, 16.2013518 ], [ 73.4443195, 16.2023802 ], [ 73.4439162, 16.2028924 ], [ 73.4433839, 16.2027591 ], [ 73.4431195, 16.2024996 ], [ 73.4425864, 16.2024959 ], [ 73.4423187, 16.2026231 ], [ 73.4425682, 16.2041874 ], [ 73.4428986, 16.204154 ], [ 73.4443202, 16.2042549 ], [ 73.4451232, 16.2046134 ], [ 73.4458587, 16.205246 ], [ 73.4466735, 16.2055144 ], [ 73.447056, 16.205808 ], [ 73.4476472, 16.2060852 ], [ 73.4485307, 16.2063123 ], [ 73.4493161, 16.2065014 ], [ 73.4492635, 16.2073271 ], [ 73.4491862, 16.2079046 ], [ 73.44933, 16.2083435 ], [ 73.4492281, 16.2087386 ], [ 73.4488858, 16.2090064 ], [ 73.4488821, 16.2095669 ], [ 73.4489241, 16.2101409 ], [ 73.448912, 16.2116862 ], [ 73.4491701, 16.2121131 ], [ 73.4494893, 16.2128765 ], [ 73.4499045, 16.2137661 ], [ 73.4502994, 16.2143358 ], [ 73.4506282, 16.2147607 ], [ 73.4513352, 16.2146994 ], [ 73.4518261, 16.2142518 ], [ 73.4521072, 16.2141751 ], [ 73.4525648, 16.2139098 ], [ 73.4527471, 16.2136862 ], [ 73.4530481, 16.2138181 ], [ 73.4527504, 16.2140834 ], [ 73.4523797, 16.2145109 ], [ 73.4521506, 16.2149374 ], [ 73.4522971, 16.2152506 ], [ 73.4525749, 16.2156822 ], [ 73.4529998, 16.2157641 ], [ 73.4534284, 16.2156379 ], [ 73.4542261, 16.215607 ], [ 73.454187, 16.215775 ], [ 73.4540067, 16.2159455 ], [ 73.4537508, 16.2162128 ], [ 73.4533286, 16.216151 ], [ 73.4525277, 16.2161726 ], [ 73.4520997, 16.216254 ], [ 73.4515605, 16.2161937 ], [ 73.4510992, 16.2162458 ], [ 73.4509184, 16.2158218 ], [ 73.4504168, 16.2157569 ], [ 73.4498718, 16.2156421 ], [ 73.4492731, 16.2151069 ], [ 73.4488531, 16.2148287 ], [ 73.4483982, 16.215027 ], [ 73.4481885, 16.2154978 ], [ 73.448056, 16.2161211 ], [ 73.4484181, 16.21644 ], [ 73.4485726, 16.2170869 ], [ 73.4485704, 16.2176453 ], [ 73.4484856, 16.2181223 ], [ 73.4482448, 16.2185431 ], [ 73.4480785, 16.2191004 ], [ 73.4480173, 16.2192173 ], [ 73.44785, 16.2194687 ], [ 73.4481005, 16.2202377 ], [ 73.4480372, 16.22064 ], [ 73.448196, 16.22098 ], [ 73.4490972, 16.2212695 ], [ 73.4492034, 16.2214379 ], [ 73.4499373, 16.2230676 ], [ 73.4494223, 16.2235533 ], [ 73.4480962, 16.2236934 ], [ 73.4476654, 16.2238217 ], [ 73.4479583, 16.224753 ], [ 73.4484229, 16.2259227 ], [ 73.4492383, 16.2268297 ], [ 73.4503155, 16.2273608 ], [ 73.4525186, 16.2281921 ], [ 73.4541312, 16.2284254 ], [ 73.4557281, 16.22848 ], [ 73.4564215, 16.2283129 ], [ 73.458795, 16.2286969 ], [ 73.4591756, 16.2287602 ], [ 73.4594505, 16.22882 ], [ 73.4599745, 16.2288944 ], [ 73.4601264, 16.2290481 ], [ 73.4604681, 16.2291388 ], [ 73.4607712, 16.229287 ], [ 73.4626558, 16.2296564 ], [ 73.4632314, 16.230258 ], [ 73.4619793, 16.2302348 ], [ 73.4607873, 16.2300283 ], [ 73.4587451, 16.2294566 ], [ 73.4575054, 16.2296152 ], [ 73.4567458, 16.229521 ], [ 73.455961, 16.2293062 ], [ 73.4554208, 16.2293 ], [ 73.4545871, 16.2293067 ], [ 73.4512955, 16.2291424 ], [ 73.4508712, 16.2288328 ], [ 73.4503546, 16.2283631 ], [ 73.4499732, 16.2281895 ], [ 73.4490264, 16.2275277 ], [ 73.448285, 16.2268586 ], [ 73.447902, 16.2264522 ], [ 73.4475238, 16.2260649 ], [ 73.4474682, 16.2258417 ], [ 73.4468774, 16.2252222 ], [ 73.4466765, 16.2248056 ], [ 73.4465469, 16.2242896 ], [ 73.4468336, 16.221716 ], [ 73.4469695, 16.2214596 ], [ 73.445901, 16.2217092 ], [ 73.445895, 16.2224819 ], [ 73.4457198, 16.2223921 ], [ 73.4444709, 16.2170625 ], [ 73.4442063, 16.216803 ], [ 73.4436833, 16.2155113 ], [ 73.4434187, 16.2152518 ], [ 73.4430275, 16.2142188 ], [ 73.4424943, 16.2142148 ], [ 73.4423647, 16.2136988 ], [ 73.4419693, 16.2131808 ], [ 73.4411717, 16.2129173 ], [ 73.4411777, 16.2121447 ], [ 73.4406446, 16.2121407 ], [ 73.4405149, 16.2116246 ], [ 73.439857, 16.2105896 ], [ 73.439325, 16.2104563 ], [ 73.4390604, 16.2101969 ], [ 73.4385283, 16.2100647 ], [ 73.43894, 16.2085223 ], [ 73.4389521, 16.206977 ], [ 73.4385629, 16.2056864 ], [ 73.4380298, 16.2056824 ], [ 73.4380337, 16.2051672 ], [ 73.4369697, 16.2049018 ], [ 73.4363189, 16.2028366 ], [ 73.4356591, 16.2020591 ], [ 73.4351271, 16.2019258 ], [ 73.4343337, 16.2011473 ], [ 73.4338005, 16.2011434 ], [ 73.4330039, 16.2007516 ], [ 73.4328742, 16.2002356 ], [ 73.432479, 16.1997176 ], [ 73.4316803, 16.1995824 ], [ 73.4306204, 16.1988019 ], [ 73.4295522, 16.1990515 ], [ 73.429016, 16.1994344 ], [ 73.4288782, 16.1999485 ], [ 73.4280725, 16.2007153 ], [ 73.4278018, 16.2012282 ], [ 73.4279294, 16.202002 ], [ 73.4273962, 16.201998 ], [ 73.4272585, 16.2025121 ], [ 73.4269899, 16.2027676 ], [ 73.4269797, 16.2040555 ], [ 73.426709, 16.2045686 ], [ 73.4268285, 16.2063724 ], [ 73.4273617, 16.2063764 ], [ 73.4274739, 16.2089529 ], [ 73.4272033, 16.209466 ], [ 73.4271993, 16.209981 ], [ 73.426662, 16.2104923 ], [ 73.4263688, 16.2138383 ], [ 73.4260921, 16.2151241 ], [ 73.4252844, 16.2161485 ], [ 73.4252802, 16.2166635 ], [ 73.4244703, 16.2179453 ], [ 73.4244683, 16.2182029 ], [ 73.4247306, 16.21872 ], [ 73.4249871, 16.2200097 ], [ 73.4244252, 16.2236113 ], [ 73.4241524, 16.2243821 ], [ 73.4238674, 16.2266981 ], [ 73.4233261, 16.2277241 ], [ 73.423322, 16.2282394 ], [ 73.4227807, 16.2292656 ], [ 73.4224957, 16.2315814 ], [ 73.4219521, 16.2328653 ], [ 73.4219479, 16.2333803 ], [ 73.4208529, 16.2369782 ], [ 73.4205822, 16.2374913 ], [ 73.420576, 16.2382639 ], [ 73.4197474, 16.2418636 ], [ 73.4192061, 16.2428897 ], [ 73.419202, 16.2434049 ], [ 73.4186625, 16.2441736 ], [ 73.4185255, 16.2446877 ], [ 73.4174592, 16.2446797 ], [ 73.416503, 16.2475056 ], [ 73.4162116, 16.2505943 ], [ 73.4153953, 16.2526487 ], [ 73.4153891, 16.2534213 ], [ 73.4148455, 16.254705 ], [ 73.4145686, 16.2559908 ], [ 73.4145624, 16.2567634 ], [ 73.4140188, 16.2580471 ], [ 73.4140147, 16.2585623 ], [ 73.4129275, 16.2611297 ], [ 73.4129192, 16.2621599 ], [ 73.4123798, 16.2629286 ], [ 73.4123757, 16.2634436 ], [ 73.4118342, 16.2644699 ], [ 73.4104596, 16.2696107 ], [ 73.4106971, 16.2732183 ], [ 73.4106576, 16.27417 ], [ 73.4106275, 16.2748942 ], [ 73.410304408308519, 16.276032301562502 ], [ 73.409862, 16.2775907 ], [ 73.4095911, 16.2781038 ], [ 73.4090247, 16.2822204 ], [ 73.4087538, 16.2827335 ], [ 73.4087476, 16.2835062 ], [ 73.4076582, 16.2863312 ], [ 73.407652, 16.2871038 ], [ 73.4073749, 16.2883896 ], [ 73.4068332, 16.2894156 ], [ 73.4062853, 16.2912143 ], [ 73.4062812, 16.2917296 ], [ 73.4057374, 16.2930132 ], [ 73.4057332, 16.2935283 ], [ 73.4054645, 16.2937838 ], [ 73.4046437, 16.2963533 ], [ 73.4046395, 16.2968683 ], [ 73.4034233, 16.2989197 ], [ 73.4010222, 16.2990299 ], [ 73.3999523, 16.2994084 ], [ 73.4000769, 16.3004396 ], [ 73.3995393, 16.3009507 ], [ 73.3989808, 16.3040372 ], [ 73.3984392, 16.3050633 ], [ 73.3987467, 16.306492 ], [ 73.3980976, 16.3089119 ], [ 73.396241, 16.3106042 ], [ 73.3957426, 16.3112122 ], [ 73.3945351, 16.3135198 ], [ 73.3941081, 16.3154602 ], [ 73.3939643, 16.3166788 ], [ 73.3940743, 16.3172137 ], [ 73.3943742, 16.317604 ], [ 73.394946, 16.3178115 ], [ 73.3960135, 16.3179082 ], [ 73.3961777, 16.3183036 ], [ 73.3958805, 16.3220958 ], [ 73.3950077, 16.3239399 ], [ 73.3950683, 16.3244805 ], [ 73.394261, 16.3270818 ], [ 73.3935448, 16.3292759 ], [ 73.3930733, 16.330965 ], [ 73.3923561, 16.3328775 ], [ 73.3915981, 16.3337392 ], [ 73.3907253, 16.3341562 ], [ 73.389852, 16.3345006 ], [ 73.3883891, 16.3352862 ], [ 73.3878543, 16.3353572 ], [ 73.3865534, 16.3365222 ], [ 73.3857847, 16.3360022 ], [ 73.3855169, 16.3361294 ], [ 73.3859079, 16.3371627 ], [ 73.3860408, 16.337292 ], [ 73.3865732, 16.3374252 ], [ 73.3872267, 16.3389756 ], [ 73.3874724, 16.341553 ], [ 73.3879911, 16.34336 ], [ 73.3882557, 16.3436195 ], [ 73.3889113, 16.3450406 ], [ 73.3894437, 16.345174 ], [ 73.3895577, 16.3474929 ], [ 73.3890179, 16.3482614 ], [ 73.3890136, 16.3487764 ], [ 73.3884696, 16.3500601 ], [ 73.3884655, 16.3505751 ], [ 73.3876482, 16.3526293 ], [ 73.3876376, 16.353917 ], [ 73.3873689, 16.3541725 ], [ 73.3864364, 16.35652 ], [ 73.3864134, 16.3571829 ], [ 73.383523, 16.3590982 ], [ 73.382867, 16.3592578 ], [ 73.3829544, 16.3596444 ], [ 73.3825081, 16.3603619 ], [ 73.3820446, 16.3608622 ], [ 73.3813472, 16.3613059 ], [ 73.3801043, 16.3620368 ], [ 73.3796515, 16.3618402 ], [ 73.3788013, 16.3619297 ], [ 73.3782187, 16.3621716 ], [ 73.3774403, 16.3624249 ], [ 73.3770004, 16.362394 ], [ 73.3767456, 16.3622236 ], [ 73.3765799, 16.3614922 ], [ 73.3751867, 16.3596159 ], [ 73.3730527, 16.3595995 ], [ 73.3725148, 16.3601105 ], [ 73.3711769, 16.3606151 ], [ 73.3709079, 16.3608707 ], [ 73.3703734, 16.3609958 ], [ 73.3703691, 16.3615108 ], [ 73.3698346, 16.361635 ], [ 73.36903, 16.362144 ], [ 73.3682243, 16.362782 ], [ 73.3683551, 16.3630406 ], [ 73.3683422, 16.3645858 ], [ 73.3682073, 16.3648423 ], [ 73.3687407, 16.3648465 ], [ 73.3691275, 16.3663948 ], [ 73.3699172, 16.3676887 ], [ 73.3701818, 16.3679483 ], [ 73.3708374, 16.3693694 ], [ 73.3713698, 16.3695029 ], [ 73.371357, 16.3710479 ], [ 73.3718905, 16.3710521 ], [ 73.3712039, 16.3733649 ], [ 73.3706662, 16.3738758 ], [ 73.3705246, 16.3749049 ], [ 73.3689229, 16.3750209 ], [ 73.3686541, 16.3752763 ], [ 73.3678537, 16.37527 ], [ 73.3673169, 16.3756527 ], [ 73.3671767, 16.3764242 ], [ 73.3669077, 16.3766798 ], [ 73.3668928, 16.3784825 ], [ 73.3672848, 16.3795157 ], [ 73.3688843, 16.3796565 ], [ 73.3691532, 16.379401 ], [ 73.3694201, 16.3794031 ], [ 73.3695518, 16.3795333 ], [ 73.3695498, 16.3797909 ], [ 73.3692808, 16.3800464 ], [ 73.3695133, 16.3841691 ], [ 73.3697781, 16.3844286 ], [ 73.3703009, 16.3857204 ], [ 73.370288, 16.3872657 ], [ 73.3710841, 16.3877869 ], [ 73.3710756, 16.3888172 ], [ 73.3709404, 16.3890736 ], [ 73.3698436, 16.3923555 ], [ 73.3687514, 16.3956238 ], [ 73.3679489, 16.3958752 ], [ 73.36768, 16.3961307 ], [ 73.3671453, 16.3962556 ], [ 73.367141, 16.3967708 ], [ 73.3663396, 16.3968929 ], [ 73.365267, 16.3975289 ], [ 73.3656581, 16.3985622 ], [ 73.3663224, 16.3989532 ], [ 73.3671141, 16.3999895 ], [ 73.3676467, 16.400123 ], [ 73.3673693, 16.4014085 ], [ 73.3662988, 16.4017862 ], [ 73.3657618, 16.4021687 ], [ 73.3658841, 16.4034573 ], [ 73.3653332, 16.4055136 ], [ 73.3650642, 16.4057689 ], [ 73.3655828, 16.407576 ], [ 73.3655721, 16.4088636 ], [ 73.364464, 16.4137485 ], [ 73.364195, 16.4140039 ], [ 73.3641907, 16.4145191 ], [ 73.3629667, 16.4173426 ], [ 73.3621663, 16.4173363 ], [ 73.3622948, 16.4178525 ], [ 73.3617505, 16.419136 ], [ 73.3617439, 16.4199086 ], [ 73.3612039, 16.4206769 ], [ 73.3609263, 16.4219625 ], [ 73.3606571, 16.422218 ], [ 73.3602466, 16.4235026 ], [ 73.3581109, 16.4236141 ], [ 73.3578429, 16.4237413 ], [ 73.3579673, 16.4247725 ], [ 73.3582319, 16.4250322 ], [ 73.3583508, 16.4268358 ], [ 73.3588843, 16.4268402 ], [ 73.3588756, 16.4278702 ], [ 73.3594116, 16.4276168 ], [ 73.3589892, 16.4301891 ], [ 73.358718, 16.430702 ], [ 73.3587116, 16.4314746 ], [ 73.3570542, 16.4381581 ], [ 73.356783, 16.438671 ], [ 73.3567743, 16.4397013 ], [ 73.3568482, 16.440558 ], [ 73.3562291, 16.4422157 ], [ 73.3561068, 16.4429139 ], [ 73.3539278, 16.4450228 ], [ 73.3523324, 16.4443023 ], [ 73.3523281, 16.4448173 ], [ 73.3517943, 16.4448131 ], [ 73.3516562, 16.4453272 ], [ 73.3512521, 16.445839 ], [ 73.3504492, 16.4460902 ], [ 73.3503088, 16.4468619 ], [ 73.3497707, 16.4473728 ], [ 73.3492217, 16.4491713 ], [ 73.3481391, 16.4509655 ], [ 73.3475857, 16.4532792 ], [ 73.3475704, 16.4550819 ], [ 73.3464833, 16.4573913 ], [ 73.3462034, 16.4589343 ], [ 73.3459319, 16.4594472 ], [ 73.3459276, 16.4599624 ], [ 73.3437554, 16.4643236 ], [ 73.3434863, 16.4645789 ], [ 73.3424035, 16.4663733 ], [ 73.3423859, 16.4684334 ], [ 73.3418412, 16.4697169 ], [ 73.3418303, 16.4710046 ], [ 73.3420949, 16.4712643 ], [ 73.3417951, 16.4751251 ], [ 73.3412527, 16.476151 ], [ 73.3407012, 16.478207 ], [ 73.3394897, 16.4794852 ], [ 73.3373489, 16.4801115 ], [ 73.3368118, 16.4804941 ], [ 73.335853, 16.4833194 ], [ 73.3354487, 16.4838314 ], [ 73.3346502, 16.4835674 ], [ 73.3345547, 16.4839932 ], [ 73.3341096, 16.4843359 ], [ 73.3341053, 16.4848509 ], [ 73.3335713, 16.4848465 ], [ 73.3334287, 16.4858757 ], [ 73.3331595, 16.486131 ], [ 73.3328815, 16.4874166 ], [ 73.3323434, 16.4879274 ], [ 73.3315271, 16.4897237 ], [ 73.3315228, 16.4902387 ], [ 73.3317853, 16.490756 ], [ 73.3313676, 16.4928131 ], [ 73.3308339, 16.4928087 ], [ 73.3306955, 16.4933228 ], [ 73.3305602, 16.4935793 ], [ 73.3300265, 16.4935749 ], [ 73.3301572, 16.4938335 ], [ 73.3298594, 16.4974368 ], [ 73.329588, 16.4979497 ], [ 73.3295768, 16.4992374 ], [ 73.3290365, 16.5000057 ], [ 73.3287539, 16.5018063 ], [ 73.3268375, 16.5084355 ], [ 73.3257989, 16.5109583 ], [ 73.3256066, 16.5117485 ], [ 73.3247078, 16.5137124 ], [ 73.323209, 16.5152127 ], [ 73.3220942, 16.5159402 ], [ 73.3210772, 16.5162884 ], [ 73.3204672, 16.5162711 ], [ 73.3175663, 16.5144645 ], [ 73.3170369, 16.5139452 ], [ 73.3165041, 16.5138127 ], [ 73.316886, 16.515876 ], [ 73.3176759, 16.5171701 ], [ 73.3184678, 16.5182067 ], [ 73.3187258, 16.5192391 ], [ 73.3179161, 16.5202627 ], [ 73.3179049, 16.5215503 ], [ 73.3173642, 16.5223186 ], [ 73.3174939, 16.5228348 ], [ 73.3169598, 16.5228304 ], [ 73.3169554, 16.5233455 ], [ 73.3164238, 16.5230837 ], [ 73.3161478, 16.5241115 ], [ 73.3166817, 16.5241158 ], [ 73.3161255, 16.5266868 ], [ 73.3155916, 16.5266825 ], [ 73.3155848, 16.5274551 ], [ 73.316085, 16.5280237 ], [ 73.3165372, 16.5283513 ], [ 73.3163828, 16.5297317 ], [ 73.3157524, 16.5314946 ], [ 73.3152053, 16.5325144 ], [ 73.3146007, 16.5335403 ], [ 73.3133886, 16.534391 ], [ 73.3128547, 16.5343869 ], [ 73.3124447, 16.5354137 ], [ 73.3125699, 16.5364449 ], [ 73.313236, 16.536847 ], [ 73.3134463, 16.5368182 ], [ 73.31349, 16.5370406 ], [ 73.313108, 16.5370257 ], [ 73.3123699, 16.5376001 ], [ 73.3121183, 16.5380002 ], [ 73.3119837, 16.5382748 ], [ 73.3124726, 16.5384183 ], [ 73.3126888, 16.5392059 ], [ 73.3121317, 16.5399991 ], [ 73.3114598, 16.540592 ], [ 73.3110605, 16.5410684 ], [ 73.3111902, 16.5415845 ], [ 73.3117252, 16.5414596 ], [ 73.31199, 16.5417193 ], [ 73.3122569, 16.5417216 ], [ 73.3123911, 16.5415944 ], [ 73.3123278, 16.5414009 ], [ 73.3124225, 16.5412127 ], [ 73.3127264, 16.541071 ], [ 73.3132376, 16.5410396 ], [ 73.3139264, 16.5412271 ], [ 73.3144529, 16.5416436 ], [ 73.3147659, 16.5421941 ], [ 73.314693, 16.5425122 ], [ 73.3142246, 16.5430133 ], [ 73.3147806, 16.5431589 ], [ 73.3150221, 16.5435352 ], [ 73.3146675, 16.5440284 ], [ 73.3143598, 16.544519 ], [ 73.3146822, 16.5448766 ], [ 73.3157503, 16.5441372 ], [ 73.3159155, 16.5443688 ], [ 73.3154244, 16.5448597 ], [ 73.3152602, 16.5453191 ], [ 73.31557, 16.5458249 ], [ 73.3163534, 16.5465197 ], [ 73.3169541, 16.5470675 ], [ 73.3177566, 16.5480286 ], [ 73.3186385, 16.5492041 ], [ 73.3191476, 16.550467 ], [ 73.3192785, 16.5514502 ], [ 73.3190725, 16.5519587 ], [ 73.3187066, 16.5527249 ], [ 73.3186793, 16.5535137 ], [ 73.3182287, 16.5542825 ], [ 73.3178387, 16.5547992 ], [ 73.3176783, 16.5556744 ], [ 73.3183767, 16.5564714 ], [ 73.3191465, 16.556419 ], [ 73.3200386, 16.5559269 ], [ 73.3201298, 16.5550543 ], [ 73.3199388, 16.5546018 ], [ 73.3202049, 16.5541303 ], [ 73.3206598, 16.5542897 ], [ 73.3213186, 16.5536659 ], [ 73.3211877, 16.5522272 ], [ 73.3213948, 16.5520821 ], [ 73.3216018, 16.5519371 ], [ 73.3224048, 16.5522297 ], [ 73.3241488, 16.5526334 ], [ 73.3252845, 16.5530478 ], [ 73.3248352, 16.5537992 ], [ 73.3253625, 16.554576 ], [ 73.3261546, 16.5556127 ], [ 73.3260083, 16.5571568 ], [ 73.3276114, 16.5570404 ], [ 73.3278807, 16.5567851 ], [ 73.3294838, 16.5566696 ], [ 73.3294905, 16.5558969 ], [ 73.3316256, 16.5560425 ], [ 73.3321552, 16.5565617 ], [ 73.3326881, 16.5566953 ], [ 73.3330894, 16.5578759 ], [ 73.3333419, 16.5582456 ], [ 73.3335134, 16.5585861 ], [ 73.3336282, 16.5590501 ], [ 73.3335134, 16.5592231 ], [ 73.3335052, 16.5594118 ], [ 73.3335019, 16.5594715 ], [ 73.3334756, 16.5595376 ], [ 73.3334855, 16.5595879 ], [ 73.3334034, 16.5597452 ], [ 73.3333083, 16.5598333 ], [ 73.3332394, 16.5598238 ], [ 73.3332, 16.5598805 ], [ 73.3331934, 16.5599119 ], [ 73.3327898, 16.5600943 ], [ 73.3327602, 16.5600692 ], [ 73.3326979, 16.5600849 ], [ 73.3326979, 16.5601227 ], [ 73.3322975, 16.5603177 ], [ 73.3322877, 16.5602548 ], [ 73.3322615, 16.5602265 ], [ 73.3321893, 16.5602265 ], [ 73.3321171, 16.5602642 ], [ 73.3321072, 16.5603303 ], [ 73.3321663, 16.5603963 ], [ 73.3321761, 16.5604089 ], [ 73.3319563, 16.5606605 ], [ 73.3318644, 16.5607612 ], [ 73.3317594, 16.5610568 ], [ 73.331743, 16.561126 ], [ 73.3317561, 16.5611732 ], [ 73.3316839, 16.5614532 ], [ 73.3316215, 16.561557 ], [ 73.3315953, 16.5617709 ], [ 73.3315953, 16.5618998 ], [ 73.3316412, 16.561969 ], [ 73.3318709, 16.5620382 ], [ 73.3321269, 16.5620602 ], [ 73.3321958, 16.5620791 ], [ 73.3323566, 16.5620697 ], [ 73.3324387, 16.56212 ], [ 73.3324748, 16.5621231 ], [ 73.3325502, 16.5620791 ], [ 73.332629, 16.5620917 ], [ 73.3327734, 16.5621452 ], [ 73.3328357, 16.5622049 ], [ 73.3329309, 16.5622332 ], [ 73.3341196, 16.5765376 ], [ 73.3306426, 16.5771532 ], [ 73.329836, 16.5777911 ], [ 73.3296951, 16.5785626 ], [ 73.3292907, 16.5790744 ], [ 73.3290248, 16.578943 ], [ 73.3282225, 16.5790659 ], [ 73.3279488, 16.5798362 ], [ 73.3274147, 16.5798321 ], [ 73.3272763, 16.580346 ], [ 73.3266023, 16.5811133 ], [ 73.3250002, 16.5811003 ], [ 73.3249957, 16.5816153 ], [ 73.3236583, 16.5818621 ], [ 73.3233801, 16.5831477 ], [ 73.3225766, 16.5833987 ], [ 73.3224338, 16.5844278 ], [ 73.322694, 16.5852025 ], [ 73.3226694, 16.5880353 ], [ 73.3217084, 16.591118 ], [ 73.3206369, 16.5914953 ], [ 73.3200983, 16.592006 ], [ 73.3192937, 16.5923862 ], [ 73.3190155, 16.5936718 ], [ 73.3195496, 16.5936762 ], [ 73.3195451, 16.5941912 ], [ 73.319011, 16.5941868 ], [ 73.318601, 16.5952137 ], [ 73.3189864, 16.5970196 ], [ 73.3195194, 16.5971522 ], [ 73.3199161, 16.5975421 ], [ 73.3199117, 16.5980572 ], [ 73.3197764, 16.5983136 ], [ 73.3192423, 16.5983093 ], [ 73.3192312, 16.599597 ], [ 73.3176275, 16.5997124 ], [ 73.31709, 16.6000948 ], [ 73.3174767, 16.6016431 ], [ 73.3178745, 16.6020322 ], [ 73.3189393, 16.6024276 ], [ 73.3190679, 16.6029438 ], [ 73.3193328, 16.6032035 ], [ 73.3198535, 16.6047529 ], [ 73.3203831, 16.6052722 ], [ 73.3202389, 16.6065588 ], [ 73.3215732, 16.6066979 ], [ 73.3229131, 16.6061936 ], [ 73.3237233, 16.60517 ], [ 73.3253268, 16.6050547 ], [ 73.3254532, 16.6058283 ], [ 73.3262478, 16.6066073 ], [ 73.3263774, 16.6071235 ], [ 73.32878, 16.6072711 ], [ 73.3295768, 16.6077926 ], [ 73.3314464, 16.6078077 ], [ 73.3317157, 16.6075522 ], [ 73.3333226, 16.60705 ], [ 73.3335919, 16.6067946 ], [ 73.3349306, 16.6064195 ], [ 73.3350726, 16.6053904 ], [ 73.3352077, 16.6052622 ], [ 73.3381478, 16.6050282 ], [ 73.33909, 16.6041348 ], [ 73.3399, 16.6031112 ], [ 73.3399089, 16.602081 ], [ 73.3395131, 16.6015627 ], [ 73.338447, 16.6012966 ], [ 73.3384492, 16.6010392 ], [ 73.3411223, 16.600803 ], [ 73.3412619, 16.6000315 ], [ 73.3413971, 16.5999033 ], [ 73.3429996, 16.5999162 ], [ 73.3432687, 16.5996606 ], [ 73.343804, 16.5995367 ], [ 73.3440799, 16.5985087 ], [ 73.3456813, 16.5986497 ], [ 73.3459507, 16.5983943 ], [ 73.3464859, 16.5982702 ], [ 73.3465211, 16.5941498 ], [ 73.3470552, 16.5941539 ], [ 73.3474466, 16.5951874 ], [ 73.3475795, 16.5953167 ], [ 73.3497127, 16.5957204 ], [ 73.349717, 16.5952053 ], [ 73.3507887, 16.5948272 ], [ 73.3518658, 16.5938054 ], [ 73.3521328, 16.5938075 ], [ 73.3522648, 16.5939377 ], [ 73.352512, 16.5962577 ], [ 73.352777, 16.5965174 ], [ 73.3526396, 16.5970313 ], [ 73.3521064, 16.5968978 ], [ 73.3518416, 16.5966382 ], [ 73.3507734, 16.5966298 ], [ 73.3502359, 16.5970124 ], [ 73.3498129, 16.5995845 ], [ 73.3492633, 16.6013828 ], [ 73.3496534, 16.6026737 ], [ 73.3491192, 16.6026695 ], [ 73.3489807, 16.6031834 ], [ 73.3487116, 16.6034389 ], [ 73.348574, 16.6039528 ], [ 73.3480399, 16.6039487 ], [ 73.347532, 16.600854 ], [ 73.3467297, 16.6009759 ], [ 73.345656, 16.6016117 ], [ 73.3457845, 16.6021279 ], [ 73.3452461, 16.6026387 ], [ 73.3442984, 16.6041764 ], [ 73.3418915, 16.6045431 ], [ 73.3416222, 16.6047984 ], [ 73.3408199, 16.6049213 ], [ 73.340944, 16.6059525 ], [ 73.3412088, 16.6062121 ], [ 73.3413362, 16.6069857 ], [ 73.3418705, 16.6069901 ], [ 73.341866, 16.6075051 ], [ 73.3424012, 16.6073802 ], [ 73.3427981, 16.6077701 ], [ 73.3429212, 16.6090589 ], [ 73.3439862, 16.6094531 ], [ 73.3449149, 16.610105 ], [ 73.3451756, 16.6108797 ], [ 73.3458382, 16.6115283 ], [ 73.3469, 16.6123093 ], [ 73.3487696, 16.6123242 ], [ 73.3489038, 16.612197 ], [ 73.3490421, 16.6116829 ], [ 73.3495764, 16.6116873 ], [ 73.3493137, 16.61117 ], [ 73.3501138, 16.6113047 ], [ 73.3513011, 16.6129887 ], [ 73.3510888, 16.6222586 ], [ 73.3513328, 16.6249643 ], [ 73.3486838, 16.6223679 ], [ 73.3481495, 16.6223637 ], [ 73.3478836, 16.6222331 ], [ 73.3478879, 16.6217181 ], [ 73.3473547, 16.6215846 ], [ 73.3470899, 16.621325 ], [ 73.3462886, 16.6213187 ], [ 73.343622, 16.6207823 ], [ 73.3404156, 16.6208859 ], [ 73.3402771, 16.6214 ], [ 73.3400077, 16.6216553 ], [ 73.3400034, 16.6221704 ], [ 73.3393272, 16.6231951 ], [ 73.3382555, 16.6235724 ], [ 73.3374542, 16.6235659 ], [ 73.3366562, 16.6231738 ], [ 73.3366651, 16.6221437 ], [ 73.3353317, 16.6218753 ], [ 73.335467, 16.621619 ], [ 73.3354802, 16.6200738 ], [ 73.3353495, 16.6198152 ], [ 73.3348153, 16.6198109 ], [ 73.3345549, 16.6190362 ], [ 73.3308087, 16.6197788 ], [ 73.3306702, 16.6202926 ], [ 73.3301315, 16.6208035 ], [ 73.3301295, 16.6210609 ], [ 73.3307898, 16.6219674 ], [ 73.331323, 16.6221008 ], [ 73.3313185, 16.6226158 ], [ 73.3318526, 16.6226202 ], [ 73.331979, 16.6233938 ], [ 73.3323746, 16.6240403 ], [ 73.3329078, 16.6241739 ], [ 73.3330365, 16.6246899 ], [ 73.3336968, 16.6255962 ], [ 73.33423, 16.6257298 ], [ 73.3343585, 16.626246 ], [ 73.3350234, 16.626637 ], [ 73.336092, 16.6266457 ], [ 73.337688, 16.627431 ], [ 73.3384893, 16.6274374 ], [ 73.339295, 16.6269288 ], [ 73.3408977, 16.6269417 ], [ 73.3415528, 16.6283639 ], [ 73.3415485, 16.6288789 ], [ 73.3407382, 16.6299025 ], [ 73.3407339, 16.6304176 ], [ 73.3404646, 16.6306731 ], [ 73.340327, 16.631187 ], [ 73.3397927, 16.6311828 ], [ 73.3396477, 16.6324693 ], [ 73.3399081, 16.6332441 ], [ 73.3401729, 16.6335037 ], [ 73.3401708, 16.6337612 ], [ 73.3399015, 16.6340167 ], [ 73.339089, 16.6352979 ], [ 73.3388152, 16.6360683 ], [ 73.3382765, 16.6365792 ], [ 73.3381391, 16.637093 ], [ 73.3376048, 16.6370887 ], [ 73.3373309, 16.6378592 ], [ 73.3367957, 16.6379832 ], [ 73.3365262, 16.6382386 ], [ 73.3359909, 16.6383635 ], [ 73.3359864, 16.6388787 ], [ 73.3349146, 16.639256 ], [ 73.3343759, 16.6397666 ], [ 73.3327687, 16.6402688 ], [ 73.3324993, 16.6405241 ], [ 73.3300951, 16.6405049 ], [ 73.3298303, 16.6402452 ], [ 73.328498, 16.6398487 ], [ 73.3285024, 16.6393336 ], [ 73.3290367, 16.6393378 ], [ 73.3293171, 16.6377948 ], [ 73.3279849, 16.6373973 ], [ 73.3274551, 16.636878 ], [ 73.3269208, 16.6368736 ], [ 73.3258567, 16.6363501 ], [ 73.3253226, 16.6363457 ], [ 73.3239915, 16.6358199 ], [ 73.3234561, 16.6359449 ], [ 73.3238496, 16.6367205 ], [ 73.3239701, 16.6382669 ], [ 73.3226345, 16.638256 ], [ 73.3227655, 16.6385147 ], [ 73.322752, 16.6400598 ], [ 73.3224782, 16.6408301 ], [ 73.322193, 16.6428882 ], [ 73.3223136, 16.6444346 ], [ 73.3236471, 16.6447027 ], [ 73.3240361, 16.6459936 ], [ 73.324025, 16.6472813 ], [ 73.3244228, 16.6476704 ], [ 73.3260255, 16.6476833 ], [ 73.3262916, 16.6478146 ], [ 73.3264292, 16.6473007 ], [ 73.3276418, 16.6461511 ], [ 73.3284432, 16.6461575 ], [ 73.3292402, 16.6466791 ], [ 73.3297745, 16.6466833 ], [ 73.3299064, 16.6468137 ], [ 73.3300361, 16.6473298 ], [ 73.3305693, 16.6474623 ], [ 73.3309662, 16.6478524 ], [ 73.3312266, 16.6486271 ], [ 73.3314914, 16.6488868 ], [ 73.3320146, 16.6501786 ], [ 73.3322795, 16.6504383 ], [ 73.33254, 16.651213 ], [ 73.3327626, 16.6563657 ], [ 73.3321858, 16.6612544 ], [ 73.3313553, 16.6645958 ], [ 73.3305114, 16.6694823 ], [ 73.3302398, 16.6699953 ], [ 73.330233, 16.6707679 ], [ 73.3296787, 16.6730813 ], [ 73.3285383, 16.6813134 ], [ 73.3287741, 16.684921 ], [ 73.3282264, 16.6864617 ], [ 73.3282219, 16.6869768 ], [ 73.3279932, 16.6874014 ], [ 73.3278171, 16.6874886 ], [ 73.3278148, 16.6877462 ], [ 73.328082, 16.6877483 ], [ 73.3281745, 16.6875791 ], [ 73.3286057, 16.6874635 ], [ 73.3299635, 16.6864757 ], [ 73.3353175, 16.6853595 ], [ 73.3369263, 16.684729 ], [ 73.3365088, 16.6817227 ], [ 73.337219, 16.6817692 ], [ 73.3385517, 16.6821667 ], [ 73.3389609, 16.6811397 ], [ 73.3393655, 16.6807562 ], [ 73.3398998, 16.6807605 ], [ 73.3402967, 16.6811505 ], [ 73.3408046, 16.6842451 ], [ 73.3410695, 16.6845048 ], [ 73.341065, 16.6850199 ], [ 73.3405262, 16.6855305 ], [ 73.340515, 16.6868182 ], [ 73.3413033, 16.6883699 ], [ 73.3424972, 16.6894096 ], [ 73.3424952, 16.689667 ], [ 73.3427622, 16.6896693 ], [ 73.3426239, 16.6901831 ], [ 73.342219, 16.690695 ], [ 73.3411491, 16.6908148 ], [ 73.340618, 16.6904247 ], [ 73.3398454, 16.6870703 ], [ 73.3395781, 16.6870682 ], [ 73.3393043, 16.6878386 ], [ 73.339037, 16.6878365 ], [ 73.3389076, 16.6873204 ], [ 73.3385116, 16.6868021 ], [ 73.336639, 16.6870446 ], [ 73.3363786, 16.6862699 ], [ 73.3353064, 16.6866471 ], [ 73.3342287, 16.6876687 ], [ 73.3328926, 16.6876579 ], [ 73.3320956, 16.6871365 ], [ 73.3300531, 16.6867325 ], [ 73.3290628, 16.6873289 ], [ 73.3290146, 16.6880134 ], [ 73.3283359, 16.6892956 ], [ 73.3275332, 16.6894175 ], [ 73.3272637, 16.6896728 ], [ 73.3259254, 16.6899195 ], [ 73.3243143, 16.6908084 ], [ 73.32431, 16.6913234 ], [ 73.3237743, 16.6914474 ], [ 73.323505, 16.6917027 ], [ 73.3229694, 16.6918276 ], [ 73.3228309, 16.6923415 ], [ 73.3222897, 16.6931098 ], [ 73.3218849, 16.6936216 ], [ 73.3213504, 16.6936173 ], [ 73.321072, 16.6949027 ], [ 73.3202693, 16.6950246 ], [ 73.3199998, 16.6952799 ], [ 73.3194642, 16.6954048 ], [ 73.3194599, 16.6959199 ], [ 73.3189254, 16.6959155 ], [ 73.3187868, 16.6964294 ], [ 73.3185173, 16.6966847 ], [ 73.3185128, 16.6971998 ], [ 73.3186447, 16.6974585 ], [ 73.3181102, 16.6974542 ], [ 73.3180123, 16.6981374 ], [ 73.3175691, 16.6982223 ], [ 73.3176887, 16.6997685 ], [ 73.3182073, 16.7015755 ], [ 73.3192693, 16.7023568 ], [ 73.3195232, 16.7039042 ], [ 73.3189819, 16.7046723 ], [ 73.3189773, 16.7051875 ], [ 73.3193742, 16.7057057 ], [ 73.3185702, 16.7059567 ], [ 73.3182941, 16.7069847 ], [ 73.3174901, 16.7072357 ], [ 73.3170775, 16.7085199 ], [ 73.316516, 16.7116059 ], [ 73.3163805, 16.7118624 ], [ 73.3155789, 16.7118558 ], [ 73.3158348, 16.7131455 ], [ 73.3153026, 16.7128837 ], [ 73.3152981, 16.7133988 ], [ 73.3142314, 16.7131325 ], [ 73.314227, 16.7136475 ], [ 73.3128885, 16.7138941 ], [ 73.312884, 16.7144092 ], [ 73.3118127, 16.7146581 ], [ 73.3118036, 16.7156881 ], [ 73.3112693, 16.7156838 ], [ 73.3114001, 16.7159423 ], [ 73.3113911, 16.7169724 ], [ 73.311656, 16.7172321 ], [ 73.3119051, 16.7192944 ], [ 73.3117698, 16.7195509 ], [ 73.3123043, 16.7195553 ], [ 73.3121497, 16.7218718 ], [ 73.3122816, 16.7221306 ], [ 73.3112138, 16.7219926 ], [ 73.3101391, 16.722628 ], [ 73.3102654, 16.7234018 ], [ 73.3107953, 16.7239212 ], [ 73.310925, 16.7244373 ], [ 73.3103905, 16.724433 ], [ 73.3098447, 16.7257161 ], [ 73.3103792, 16.7257204 ], [ 73.3103769, 16.725978 ], [ 73.3098424, 16.7259737 ], [ 73.3095661, 16.7270017 ], [ 73.3076965, 16.7268571 ], [ 73.307427, 16.7271124 ], [ 73.3068914, 16.7272372 ], [ 73.3071541, 16.7277545 ], [ 73.3066196, 16.7277501 ], [ 73.3066105, 16.7287802 ], [ 73.3060771, 16.7286465 ], [ 73.3058086, 16.7287735 ], [ 73.3056678, 16.729545 ], [ 73.3061977, 16.7300644 ], [ 73.3064559, 16.7310967 ], [ 73.3065888, 16.7312262 ], [ 73.3071221, 16.7313598 ], [ 73.3067141, 16.732129 ], [ 73.306708716610871, 16.732731744531254 ], [ 73.3067003, 16.7336741 ], [ 73.3064308, 16.7339295 ], [ 73.3064194, 16.7352171 ], [ 73.3058804, 16.7357278 ], [ 73.3058781, 16.7359852 ], [ 73.3061408, 16.7365025 ], [ 73.3061363, 16.7370175 ], [ 73.3058668, 16.7372729 ], [ 73.3058645, 16.7375303 ], [ 73.3059974, 16.7376598 ], [ 73.3065307, 16.7377934 ], [ 73.3065262, 16.7383084 ], [ 73.3059917, 16.7383041 ], [ 73.3058348, 16.740878 ], [ 73.3060839, 16.7429404 ], [ 73.3058097, 16.7437108 ], [ 73.3060588, 16.7457731 ], [ 73.3076489, 16.7473314 ], [ 73.3076398, 16.7483615 ], [ 73.3073701, 16.7486168 ], [ 73.3072325, 16.7491309 ], [ 73.3066967, 16.7492547 ], [ 73.3050828, 16.7504008 ], [ 73.3054765, 16.7511767 ], [ 73.3056014, 16.7522078 ], [ 73.3061359, 16.7522124 ], [ 73.3059974, 16.7527263 ], [ 73.3055924, 16.7532381 ], [ 73.3050577, 16.7532335 ], [ 73.3051703, 16.7555524 ], [ 73.3056982, 16.7563294 ], [ 73.3055353, 16.759676 ], [ 73.30607, 16.7596803 ], [ 73.3060654, 16.7601954 ], [ 73.3055307, 16.760191 ], [ 73.3056617, 16.7604496 ], [ 73.3056572, 16.7609648 ], [ 73.3051089, 16.7625055 ], [ 73.3050815, 16.7655957 ], [ 73.3058583, 16.768435 ], [ 73.3059913, 16.7685643 ], [ 73.3065247, 16.7686979 ], [ 73.3067783, 16.7702452 ], [ 73.3073119, 16.7703779 ], [ 73.3074438, 16.7705083 ], [ 73.3074234, 16.772826 ], [ 73.3068819, 16.7735941 ], [ 73.3076564, 16.7766909 ], [ 73.3078942, 16.7800409 ], [ 73.3085549, 16.7809474 ], [ 73.3090885, 16.7810808 ], [ 73.3092172, 16.781597 ], [ 73.3094822, 16.7818566 ], [ 73.3094754, 16.7826293 ], [ 73.3092057, 16.7828846 ], [ 73.3094616, 16.7841744 ], [ 73.3097267, 16.784434 ], [ 73.3098562, 16.7849502 ], [ 73.3103909, 16.7849547 ], [ 73.310515, 16.7859859 ], [ 73.31078, 16.7862456 ], [ 73.3111701, 16.7875365 ], [ 73.3130357, 16.7881951 ], [ 73.3144795, 16.7911691 ], [ 73.3152769, 16.7916907 ], [ 73.3155375, 16.7924654 ], [ 73.3161985, 16.7933718 ], [ 73.316732, 16.7935055 ], [ 73.3165865, 16.7947918 ], [ 73.3163077, 16.7960774 ], [ 73.3157617, 16.7973605 ], [ 73.3157481, 16.7989056 ], [ 73.3152021, 16.8001889 ], [ 73.3151975, 16.8007039 ], [ 73.3159926, 16.801483 ], [ 73.3159881, 16.801998 ], [ 73.3167834, 16.8027772 ], [ 73.3172932, 16.8056143 ], [ 73.3176912, 16.8060035 ], [ 73.3168766, 16.8074136 ], [ 73.3163431, 16.8072802 ], [ 73.3152805, 16.8064988 ], [ 73.3142109, 16.80649 ], [ 73.3139414, 16.8067453 ], [ 73.31207, 16.80673 ], [ 73.3118048, 16.8064703 ], [ 73.3112701, 16.806466 ], [ 73.3110015, 16.806593 ], [ 73.3108628, 16.8071069 ], [ 73.3103236, 16.8076175 ], [ 73.3101858, 16.8081314 ], [ 73.3091164, 16.8081225 ], [ 73.3091117, 16.8086378 ], [ 73.3056385, 16.8083516 ], [ 73.3056337, 16.8088666 ], [ 73.3053676, 16.8087351 ], [ 73.3045655, 16.8087285 ], [ 73.3021535, 16.8093529 ], [ 73.302149, 16.809868 ], [ 73.301076, 16.810245 ], [ 73.3005379, 16.8106274 ], [ 73.3005334, 16.8111424 ], [ 73.2997313, 16.8111358 ], [ 73.299457, 16.8119059 ], [ 73.2989222, 16.8119016 ], [ 73.2986434, 16.813187 ], [ 73.2975716, 16.8134357 ], [ 73.2974328, 16.8139496 ], [ 73.2967581, 16.8147166 ], [ 73.295956, 16.8147099 ], [ 73.2955451, 16.8157366 ], [ 73.2955338, 16.8170243 ], [ 73.2959259, 16.8180577 ], [ 73.2951216, 16.8183085 ], [ 73.2952365, 16.8203697 ], [ 73.2955015, 16.8206294 ], [ 73.2958916, 16.8219205 ], [ 73.2964251, 16.8220532 ], [ 73.2965572, 16.8221834 ], [ 73.2965387, 16.8242437 ], [ 73.2962644, 16.825014 ], [ 73.2962576, 16.8257865 ], [ 73.2959787, 16.8270719 ], [ 73.2953167, 16.8291324 ], [ 73.2951535, 16.8296404 ], [ 73.2948838, 16.8298957 ], [ 73.2948768, 16.8306682 ], [ 73.2946071, 16.8309235 ], [ 73.294591, 16.8327262 ], [ 73.2943143, 16.833754 ], [ 73.2936372, 16.8347785 ], [ 73.2928326, 16.8350293 ], [ 73.2929636, 16.8352879 ], [ 73.2929543, 16.8363181 ], [ 73.2937381, 16.8383848 ], [ 73.2937358, 16.8386423 ], [ 73.2929152, 16.8406957 ], [ 73.2918362, 16.8417169 ], [ 73.2918316, 16.8422319 ], [ 73.2912922, 16.8427426 ], [ 73.2908846, 16.8435118 ], [ 73.290351, 16.8433782 ], [ 73.2900858, 16.8431184 ], [ 73.2879454, 16.8432299 ], [ 73.2883346, 16.8445207 ], [ 73.2885996, 16.8447804 ], [ 73.2887292, 16.8452966 ], [ 73.2897976, 16.8454338 ], [ 73.2903302, 16.8456957 ], [ 73.2911255, 16.846475 ], [ 73.2921917, 16.8468706 ], [ 73.2923202, 16.8473867 ], [ 73.2931133, 16.8484236 ], [ 73.2930947, 16.8504837 ], [ 73.292825, 16.850739 ], [ 73.2926872, 16.8512529 ], [ 73.2908163, 16.8511081 ], [ 73.2905466, 16.8513633 ], [ 73.2900131, 16.8512306 ], [ 73.2900084, 16.8517456 ], [ 73.2905421, 16.8518783 ], [ 73.2913397, 16.8524001 ], [ 73.292142, 16.8524068 ], [ 73.292802, 16.8533141 ], [ 73.2927972, 16.8538292 ], [ 73.2922508, 16.8551123 ], [ 73.2915759, 16.8558793 ], [ 73.2902387, 16.8558681 ], [ 73.2902342, 16.8563831 ], [ 73.2886296, 16.8563697 ], [ 73.2884862, 16.8573986 ], [ 73.2894145, 16.8583073 ], [ 73.2899469, 16.8585693 ], [ 73.2907492, 16.8585761 ], [ 73.2910144, 16.8588358 ], [ 73.2918144, 16.8591 ], [ 73.2920794, 16.8593597 ], [ 73.2934143, 16.8596284 ], [ 73.2938069, 16.8605334 ], [ 73.2936644, 16.8615625 ], [ 73.2941992, 16.8615668 ], [ 73.2937885, 16.8625935 ], [ 73.2937768, 16.8638811 ], [ 73.2935026, 16.8646515 ], [ 73.2934956, 16.8654239 ], [ 73.2932212, 16.8661943 ], [ 73.2932144, 16.8669669 ], [ 73.2929422, 16.8674797 ], [ 73.2929352, 16.8682523 ], [ 73.292661, 16.8690225 ], [ 73.2923911, 16.8692778 ], [ 73.2921168, 16.8700482 ], [ 73.2914417, 16.8708152 ], [ 73.2909067, 16.8708106 ], [ 73.2909114, 16.8702956 ], [ 73.2898417, 16.8702867 ], [ 73.2901021, 16.8710614 ], [ 73.2895672, 16.8710571 ], [ 73.2895625, 16.8715721 ], [ 73.2900976, 16.8715765 ], [ 73.2892858, 16.8725999 ], [ 73.2882127, 16.8729768 ], [ 73.2860696, 16.8733457 ], [ 73.286234758612807, 16.8749 ], [ 73.2863161, 16.8756655 ], [ 73.2868509, 16.87567 ], [ 73.2872423, 16.8767035 ], [ 73.2872354, 16.8774759 ], [ 73.2866935, 16.878244 ], [ 73.2866865, 16.8790164 ], [ 73.2858772, 16.8797823 ], [ 73.2858749, 16.8800399 ], [ 73.2864053, 16.8805594 ], [ 73.2870662, 16.8814659 ], [ 73.287864, 16.8819875 ], [ 73.2899989, 16.8825205 ], [ 73.2910641, 16.8830444 ], [ 73.2918596, 16.8838237 ], [ 73.2926597, 16.8840879 ], [ 73.2929248, 16.8843476 ], [ 73.2934586, 16.8844812 ], [ 73.2938477, 16.8857722 ], [ 73.294378, 16.8862916 ], [ 73.2949038, 16.8873262 ], [ 73.2953021, 16.8877154 ], [ 73.2963684, 16.8881109 ], [ 73.2964971, 16.8886271 ], [ 73.2971628, 16.8890185 ], [ 73.2984979, 16.8892871 ], [ 73.2995619, 16.8899403 ], [ 73.2995665, 16.8894252 ], [ 73.3006353, 16.8895625 ], [ 73.301433, 16.8900841 ], [ 73.3027704, 16.8900952 ], [ 73.3029048, 16.889968 ], [ 73.3030437, 16.8894542 ], [ 73.3035786, 16.8894585 ], [ 73.3037165, 16.8889446 ], [ 73.3038519, 16.8888165 ], [ 73.3046532, 16.8889524 ], [ 73.30466, 16.8881797 ], [ 73.3057322, 16.8879312 ], [ 73.3059906, 16.8889633 ], [ 73.3073243, 16.8893602 ], [ 73.3097305, 16.8895093 ], [ 73.309735, 16.8889943 ], [ 73.3110713, 16.8891336 ], [ 73.3114778, 16.8884937 ], [ 73.3120174, 16.887983 ], [ 73.3125591, 16.8872149 ], [ 73.3131125, 16.8851591 ], [ 73.3133822, 16.8849038 ], [ 73.3135209, 16.8843899 ], [ 73.3140571, 16.8842652 ], [ 73.3145965, 16.8837545 ], [ 73.3151316, 16.8837588 ], [ 73.3160614, 16.8844109 ], [ 73.3161843, 16.8856995 ], [ 73.3163589, 16.8857885 ], [ 73.3164472, 16.8862168 ], [ 73.3145736, 16.8863296 ], [ 73.3143051, 16.8864566 ], [ 73.3142492, 16.8866642 ], [ 73.3140284, 16.8874846 ], [ 73.3148309, 16.8874912 ], [ 73.3146851, 16.8887775 ], [ 73.3144132, 16.8892905 ], [ 73.3144016, 16.890578 ], [ 73.3139964, 16.8910898 ], [ 73.3122159, 16.8909866 ], [ 73.3121263, 16.8908168 ], [ 73.3118588, 16.8908146 ], [ 73.3118566, 16.8910722 ], [ 73.3120314, 16.8911612 ], [ 73.3121228, 16.8913083 ], [ 73.3127808, 16.8923674 ], [ 73.3127762, 16.8928824 ], [ 73.3115615, 16.8941601 ], [ 73.3110267, 16.8941557 ], [ 73.3107706, 16.892866 ], [ 73.3102357, 16.8928614 ], [ 73.3100968, 16.8933755 ], [ 73.3092875, 16.8941414 ], [ 73.3086101, 16.8951659 ], [ 73.3080741, 16.8952897 ], [ 73.3075345, 16.8958004 ], [ 73.3053958, 16.8956545 ], [ 73.3048492, 16.8969376 ], [ 73.3043143, 16.8969331 ], [ 73.3042055, 16.8940994 ], [ 73.3034122, 16.8930625 ], [ 73.3032905, 16.8917739 ], [ 73.3046268, 16.8919132 ], [ 73.3053007, 16.8912756 ], [ 73.3054395, 16.8907617 ], [ 73.3027659, 16.8906103 ], [ 73.3014251, 16.8909858 ], [ 73.3014204, 16.8915008 ], [ 73.3000841, 16.8913606 ], [ 73.2998156, 16.8914876 ], [ 73.2996698, 16.8927741 ], [ 73.2991255, 16.8937996 ], [ 73.2992529, 16.8945734 ], [ 73.2984516, 16.8944375 ], [ 73.298183, 16.8945645 ], [ 73.298176, 16.895337 ], [ 73.2976423, 16.8952033 ], [ 73.2973735, 16.8953304 ], [ 73.2976364, 16.8958476 ], [ 73.2965631, 16.8962245 ], [ 73.2962932, 16.8964799 ], [ 73.295221, 16.8967284 ], [ 73.2949513, 16.8969837 ], [ 73.2933418, 16.8974853 ], [ 73.2914693, 16.8974696 ], [ 73.2912006, 16.8975967 ], [ 73.2906772, 16.8963047 ], [ 73.2880048, 16.8960247 ], [ 73.2880002, 16.8965398 ], [ 73.2869348, 16.8960159 ], [ 73.2870728, 16.895502 ], [ 73.2873425, 16.8952466 ], [ 73.2874954, 16.8931877 ], [ 73.2869604, 16.8931831 ], [ 73.2867022, 16.8921508 ], [ 73.2861673, 16.8921465 ], [ 73.2861603, 16.8929189 ], [ 73.2834867, 16.8927673 ], [ 73.2829553, 16.892377 ], [ 73.28296, 16.891862 ], [ 73.2818912, 16.8917239 ], [ 73.2813597, 16.8913336 ], [ 73.2811063, 16.8897862 ], [ 73.2808388, 16.889784 ], [ 73.2809674, 16.8903001 ], [ 73.2808154, 16.8923591 ], [ 73.280548, 16.8923568 ], [ 73.2805527, 16.8918418 ], [ 73.2776128, 16.8915596 ], [ 73.2777343, 16.8928482 ], [ 73.2782599, 16.8938828 ], [ 73.2787903, 16.8944024 ], [ 73.2794512, 16.8953088 ], [ 73.2801159, 16.8957012 ], [ 73.280637, 16.8972508 ], [ 73.2806345, 16.8975082 ], [ 73.2800949, 16.8980187 ], [ 73.2800832, 16.8993063 ], [ 73.2798135, 16.8995615 ], [ 73.2798065, 16.9003341 ], [ 73.2800692, 16.9008514 ], [ 73.2800577, 16.9021389 ], [ 73.2797855, 16.9026516 ], [ 73.2797785, 16.9034243 ], [ 73.2807094, 16.9040754 ], [ 73.2811066, 16.9044655 ], [ 73.2811019, 16.9049805 ], [ 73.281235, 16.90511 ], [ 73.2817687, 16.9052438 ], [ 73.2817642, 16.9057588 ], [ 73.2822979, 16.9058915 ], [ 73.2830957, 16.9064133 ], [ 73.2838936, 16.9069351 ], [ 73.2842885, 16.9075827 ], [ 73.2841505, 16.9080966 ], [ 73.2846856, 16.9081011 ], [ 73.2845374, 16.909645 ], [ 73.2850584, 16.9111946 ], [ 73.2861214, 16.9119762 ], [ 73.2858422, 16.9132614 ], [ 73.2853026, 16.913772 ], [ 73.2851624, 16.9145433 ], [ 73.2856961, 16.9146762 ], [ 73.2860934, 16.9150663 ], [ 73.2863516, 16.9160986 ], [ 73.2857887, 16.9191842 ], [ 73.2857818, 16.9199567 ], [ 73.285242, 16.9204674 ], [ 73.2842875, 16.9225195 ], [ 73.2837525, 16.922515 ], [ 73.2837455, 16.9232876 ], [ 73.2832104, 16.9232831 ], [ 73.2830458, 16.9266297 ], [ 73.2827736, 16.9271425 ], [ 73.2827596, 16.9286875 ], [ 73.2835481, 16.9302392 ], [ 73.2839466, 16.9306286 ], [ 73.2848743, 16.9313924 ], [ 73.2856049, 16.9311866 ], [ 73.2857779, 16.9313013 ], [ 73.2859063, 16.9313962 ], [ 73.2860006, 16.931466 ], [ 73.2866912, 16.9323936 ], [ 73.287155, 16.933685 ], [ 73.2873586, 16.9354432 ], [ 73.2868775, 16.9365634 ], [ 73.2861363, 16.9380416 ], [ 73.2862361, 16.9381946 ], [ 73.2857627, 16.9397428 ], [ 73.2850422, 16.9404617 ], [ 73.2843799, 16.9418353 ], [ 73.2837708, 16.942344 ], [ 73.2838379, 16.9426032 ], [ 73.2838674, 16.9435207 ], [ 73.2842225, 16.9444093 ], [ 73.2836803, 16.9451772 ], [ 73.2834011, 16.9464626 ], [ 73.2827256, 16.9472296 ], [ 73.2823215, 16.9474836 ], [ 73.2820422, 16.948769 ], [ 73.2821579, 16.9508302 ], [ 73.2826918, 16.9509629 ], [ 73.2833472, 16.9523853 ], [ 73.2839487, 16.9535719 ], [ 73.2855628, 16.952561 ], [ 73.2859236, 16.9519699 ], [ 73.286055, 16.9519501 ], [ 73.2868498, 16.9518306 ], [ 73.2879154, 16.9519129 ], [ 73.2883156, 16.9520948 ], [ 73.2885663, 16.9523001 ], [ 73.2892219, 16.9537223 ], [ 73.2901531, 16.9543736 ], [ 73.2909547, 16.9545095 ], [ 73.2910832, 16.9550256 ], [ 73.2913486, 16.9552853 ], [ 73.2918696, 16.9568349 ], [ 73.2923676, 16.9609597 ], [ 73.292302928874477, 16.961081466015628 ], [ 73.2920953, 16.9614724 ], [ 73.2920815, 16.9630175 ], [ 73.2930102, 16.9639262 ], [ 73.2940794, 16.9640644 ], [ 73.2939335, 16.9653507 ], [ 73.2945937, 16.9663864 ], [ 73.2940584, 16.9663819 ], [ 73.2941894, 16.9666406 ], [ 73.2941415, 16.967077 ], [ 73.2936497, 16.9715606 ], [ 73.2933145, 16.9746168 ], [ 73.2935799, 16.9748765 ], [ 73.2935774, 16.9751341 ], [ 73.2933075, 16.9753892 ], [ 73.2930307, 16.976417 ], [ 73.293296, 16.9766769 ], [ 73.2932866, 16.977707 ], [ 73.2931511, 16.9779632 ], [ 73.2936861, 16.9779678 ], [ 73.293275, 16.9789944 ], [ 73.293268, 16.9797671 ], [ 73.2935332, 16.9800267 ], [ 73.2939235, 16.9813176 ], [ 73.2941361, 16.9815661 ], [ 73.2942605, 16.9818826 ], [ 73.294588, 16.9826486 ], [ 73.2948486, 16.9824201 ], [ 73.2947978, 16.9821628 ], [ 73.2955257, 16.981375 ], [ 73.2954222, 16.981092 ], [ 73.2960125, 16.9807095 ], [ 73.2965814, 16.9805885 ], [ 73.2965543, 16.9804276 ], [ 73.2969569, 16.9803719 ], [ 73.29734, 16.9799736 ], [ 73.2971919, 16.9798591 ], [ 73.2972829, 16.9797036 ], [ 73.2978533, 16.9795903 ], [ 73.2978265, 16.978775 ], [ 73.2977855, 16.978506 ], [ 73.2980234, 16.9783998 ], [ 73.2982224, 16.9784821 ], [ 73.2988637, 16.9781496 ], [ 73.2990909, 16.9772282 ], [ 73.2999017, 16.9772708 ], [ 73.3002456, 16.9771994 ], [ 73.3009859, 16.9766723 ], [ 73.3012351, 16.9756969 ], [ 73.3016079, 16.9754707 ], [ 73.3062543, 16.9778751 ], [ 73.3059169, 16.9796693 ], [ 73.3064592, 16.9801706 ], [ 73.3063889, 16.9819339 ], [ 73.3061261, 16.9822202 ], [ 73.30561, 16.9830904 ], [ 73.3044513, 16.9837019 ], [ 73.304086, 16.9841919 ], [ 73.3034106, 16.984277 ], [ 73.3021081, 16.9845879 ], [ 73.3019504, 16.9840518 ], [ 73.3015239, 16.9836732 ], [ 73.3011913, 16.9833228 ], [ 73.3005632, 16.9829016 ], [ 73.2982468, 16.9823392 ], [ 73.2973735, 16.9823064 ], [ 73.2971231, 16.9826321 ], [ 73.2967662, 16.98296 ], [ 73.2962598, 16.9835716 ], [ 73.2960072, 16.9840518 ], [ 73.2956536, 16.9843422 ], [ 73.2953785, 16.9846444 ], [ 73.2948983, 16.9852046 ], [ 73.2944472, 16.9856612 ], [ 73.2936457, 16.986461 ], [ 73.2928009, 16.9871116 ], [ 73.2922794, 16.9877005 ], [ 73.2915552, 16.988249 ], [ 73.2908423, 16.9886912 ], [ 73.2901058, 16.9889693 ], [ 73.2896267, 16.9890252 ], [ 73.2885018, 16.9893889 ], [ 73.2868024, 16.989469 ], [ 73.2855326, 16.9893694 ], [ 73.2847912, 16.9891258 ], [ 73.2842151, 16.9894885 ], [ 73.2832838, 16.9898378 ], [ 73.2826589, 16.9904519 ], [ 73.2820817, 16.990908 ], [ 73.2813934, 16.9912076 ], [ 73.2807379, 16.9916109 ], [ 73.2800571, 16.99203 ], [ 73.2792675, 16.9923614 ], [ 73.2781571, 16.9925892 ], [ 73.2773739, 16.9923989 ], [ 73.2772813, 16.9922118 ], [ 73.2772687, 16.9919592 ], [ 73.2770447, 16.9918232 ], [ 73.2768612, 16.9917727 ], [ 73.2766577, 16.9916498 ], [ 73.2764061, 16.991382 ], [ 73.2763527, 16.9912638 ], [ 73.2762624, 16.9908747 ], [ 73.2758085, 16.9904624 ], [ 73.2750194, 16.9893658 ], [ 73.2745146, 16.9889031 ], [ 73.2743043, 16.9866026 ], [ 73.2738099, 16.9859122 ], [ 73.273026, 16.985769 ], [ 73.2723104, 16.9858403 ], [ 73.271613, 16.9868392 ], [ 73.2712734, 16.9867868 ], [ 73.2703084, 16.9888359 ], [ 73.2705644, 16.9896192 ], [ 73.2694485, 16.9906453 ], [ 73.2688804, 16.9903652 ], [ 73.2685537, 16.9911507 ], [ 73.2686481, 16.9920854 ], [ 73.2691979, 16.9926981 ], [ 73.2693085, 16.9943483 ], [ 73.2689329, 16.9944715 ], [ 73.2686765, 16.9954611 ], [ 73.2687291, 16.9959489 ], [ 73.2693315, 16.9968831 ], [ 73.2694635, 16.9971622 ], [ 73.2697564, 16.9976527 ], [ 73.2695837, 16.9980118 ], [ 73.269559, 16.9983898 ], [ 73.2695531, 16.9988331 ], [ 73.2696598, 17.0000068 ], [ 73.2697998, 17.0014673 ], [ 73.2699447, 17.0014463 ], [ 73.2697811, 16.999856 ], [ 73.2697553, 16.9981918 ], [ 73.2699694, 16.997981 ], [ 73.2708926, 16.9979051 ], [ 73.2713437, 16.9976824 ], [ 73.2721714, 16.9977419 ], [ 73.2724979, 16.997619 ], [ 73.2725049, 16.9968466 ], [ 73.272665, 16.9967723 ], [ 73.2731049, 16.9968544 ], [ 73.2737389, 16.9973864 ], [ 73.273814, 16.998042 ], [ 73.2761567, 16.997725 ], [ 73.2762352, 16.9986808 ], [ 73.2763682, 16.9988103 ], [ 73.2768821, 16.999521 ], [ 73.2772879, 16.9996671 ], [ 73.2773832, 17.0003026 ], [ 73.2775143, 17.0009725 ], [ 73.2775763, 17.0017287 ], [ 73.2775841, 17.0021278 ], [ 73.2779228, 17.004207 ], [ 73.2781487, 17.0043085 ], [ 73.2783692, 17.0042311 ], [ 73.2782753, 17.0038971 ], [ 73.2781755, 17.003733 ], [ 73.2779336, 17.0024412 ], [ 73.277782, 17.0015476 ], [ 73.2781235, 17.0014473 ], [ 73.278223, 17.0013788 ], [ 73.2782152, 17.0015707 ], [ 73.2783541, 17.0015707 ], [ 73.2783072, 17.0011672 ], [ 73.2781801, 17.000597 ], [ 73.2781103, 17.0002854 ], [ 73.2786175, 16.9999501 ], [ 73.2792393, 16.9993535 ], [ 73.279567, 17.0009715 ], [ 73.2796716, 17.0009438 ], [ 73.2795024, 17.0000461 ], [ 73.2793755, 16.9993522 ], [ 73.2797564, 16.9993507 ], [ 73.280096, 16.9994058 ], [ 73.2803325, 17.0007997 ], [ 73.2804388, 17.0007999 ], [ 73.2802, 16.9994276 ], [ 73.2803757, 16.9994204 ], [ 73.2809285, 16.999451 ], [ 73.2809929, 16.9997429 ], [ 73.281098, 17.0003262 ], [ 73.2811528, 17.0008563 ], [ 73.2809433, 17.0008961 ], [ 73.2807614, 17.0010867 ], [ 73.2806364, 17.0012031 ], [ 73.2805064, 17.001503 ], [ 73.2802212, 17.0015556 ], [ 73.2799479, 17.0016279 ], [ 73.2791637, 17.0018133 ], [ 73.2792052, 17.0019334 ], [ 73.2796625, 17.001821 ], [ 73.2800222, 17.0017854 ], [ 73.2803688, 17.0019265 ], [ 73.2811734, 17.0022909 ], [ 73.2816439, 17.0025923 ], [ 73.282084, 17.0028906 ], [ 73.2824837, 17.0032401 ], [ 73.2828812, 17.0036302 ], [ 73.2834047, 17.0049222 ], [ 73.2838113, 17.006623 ], [ 73.2839326, 17.0085296 ], [ 73.2838067, 17.0095421 ], [ 73.2834601, 17.0110727 ], [ 73.2831901, 17.011917 ], [ 73.2828231, 17.0127092 ], [ 73.2821625, 17.0139403 ], [ 73.2816633, 17.0148513 ], [ 73.2813728, 17.015432 ], [ 73.2808645, 17.0165546 ], [ 73.2796994, 17.0186282 ], [ 73.2788899, 17.0197718 ], [ 73.2783304, 17.0204392 ], [ 73.2779656, 17.0209885 ], [ 73.2775681, 17.0213371 ], [ 73.2772194, 17.021741 ], [ 73.2768136, 17.0222134 ], [ 73.2765746, 17.022673 ], [ 73.2757273, 17.0232357 ], [ 73.2751718, 17.0236494 ], [ 73.2736971, 17.0239074 ], [ 73.2730247, 17.0236263 ], [ 73.2727637, 17.0234255 ], [ 73.2727144, 17.0226784 ], [ 73.2723369, 17.0223855 ], [ 73.2719698, 17.0223404 ], [ 73.2716356, 17.0225617 ], [ 73.2714736, 17.0231101 ], [ 73.2715921, 17.0235376 ], [ 73.2713137, 17.0240228 ], [ 73.2706005, 17.0243529 ], [ 73.2700164, 17.0244429 ], [ 73.2694188, 17.0245866 ], [ 73.2688, 17.0246712 ], [ 73.2682466, 17.0247745 ], [ 73.2670309, 17.0246132 ], [ 73.2662634, 17.0244706 ], [ 73.2659674, 17.0238315 ], [ 73.2661033, 17.0235752 ], [ 73.2661127, 17.0225451 ], [ 73.2655892, 17.0212529 ], [ 73.2649277, 17.0204748 ], [ 73.2627888, 17.0201991 ], [ 73.262784, 17.0207141 ], [ 73.2609094, 17.0208264 ], [ 73.2603788, 17.0203066 ], [ 73.2595782, 17.0200424 ], [ 73.2593129, 17.0197825 ], [ 73.2585123, 17.0195181 ], [ 73.2582471, 17.0192584 ], [ 73.257713, 17.0191255 ], [ 73.2576986, 17.0206704 ], [ 73.2568957, 17.0206636 ], [ 73.256747, 17.0222076 ], [ 73.2564747, 17.0227201 ], [ 73.2563151, 17.0255517 ], [ 73.2557822, 17.0252896 ], [ 73.2555074, 17.0260598 ], [ 73.2549719, 17.0260552 ], [ 73.2550957, 17.0270864 ], [ 73.2558891, 17.0281233 ], [ 73.2561498, 17.0288982 ], [ 73.2564149, 17.0291579 ], [ 73.2565446, 17.029674 ], [ 73.2570798, 17.0296785 ], [ 73.2565302, 17.0312191 ], [ 73.257332, 17.0313542 ], [ 73.2579876, 17.0327768 ], [ 73.2577103, 17.0338044 ], [ 73.2576984, 17.0350921 ], [ 73.2574236, 17.0358623 ], [ 73.2573951, 17.0389524 ], [ 73.2568477, 17.0402353 ], [ 73.2569772, 17.0407515 ], [ 73.2561719, 17.0410021 ], [ 73.2563029, 17.0412607 ], [ 73.2562979, 17.0417757 ], [ 73.2557555, 17.0425436 ], [ 73.2557387, 17.0443461 ], [ 73.2558719, 17.0444755 ], [ 73.256406, 17.0446094 ], [ 73.2562622, 17.0456383 ], [ 73.2558564, 17.0461499 ], [ 73.2563917, 17.0461544 ], [ 73.2565155, 17.0471856 ], [ 73.2569141, 17.047575 ], [ 73.2575509, 17.0484922 ], [ 73.2590465, 17.0487005 ], [ 73.2605561, 17.0484091 ], [ 73.2615163, 17.047844 ], [ 73.2625023, 17.0486256 ], [ 73.264946, 17.0475154 ], [ 73.2649507, 17.0470004 ], [ 73.2657538, 17.0470072 ], [ 73.265892, 17.0464933 ], [ 73.2660275, 17.0463652 ], [ 73.266564, 17.0462416 ], [ 73.2668411, 17.0452138 ], [ 73.2681819, 17.0449677 ], [ 73.2694098, 17.0424028 ], [ 73.2695023, 17.0419873 ], [ 73.2694044, 17.0415188 ], [ 73.2692717, 17.0414286 ], [ 73.2691174, 17.0412526 ], [ 73.2680309, 17.0409252 ], [ 73.2680837, 17.0407354 ], [ 73.269104, 17.04101 ], [ 73.2691177, 17.0411244 ], [ 73.2692371, 17.0412013 ], [ 73.2693334, 17.0410729 ], [ 73.2694246, 17.0409503 ], [ 73.268923, 17.0407887 ], [ 73.2690171, 17.0404628 ], [ 73.2694696, 17.0403653 ], [ 73.2695157, 17.0401902 ], [ 73.269497, 17.0397832 ], [ 73.269501, 17.0392672 ], [ 73.2698022, 17.0390621 ], [ 73.2702896, 17.0388564 ], [ 73.2709907, 17.0387095 ], [ 73.2714644, 17.0385646 ], [ 73.2717943, 17.0385964 ], [ 73.2721116, 17.0391175 ], [ 73.2724807, 17.0392475 ], [ 73.2728065, 17.0393383 ], [ 73.2729616, 17.0392352 ], [ 73.2730375, 17.0390621 ], [ 73.2739447, 17.0385514 ], [ 73.2740468, 17.0384939 ], [ 73.2737467, 17.03766 ], [ 73.2744607, 17.0372032 ], [ 73.2751267, 17.0369265 ], [ 73.2758957, 17.0357623 ], [ 73.2764949, 17.0351919 ], [ 73.2771211, 17.0345772 ], [ 73.2776823, 17.0340794 ], [ 73.2777906, 17.0334606 ], [ 73.2778118, 17.0311429 ], [ 73.2769452, 17.0282605 ], [ 73.2767219, 17.028027 ], [ 73.2783288, 17.0282935 ], [ 73.2783771, 17.0285448 ], [ 73.2787174, 17.0285912 ], [ 73.2787764, 17.028858 ], [ 73.2789296, 17.0288064 ], [ 73.2791037, 17.0287144 ], [ 73.2792485, 17.0286374 ], [ 73.2793719, 17.0285143 ], [ 73.2794202, 17.0284271 ], [ 73.2795543, 17.0283348 ], [ 73.2796938, 17.0282219 ], [ 73.2817859, 17.0275346 ], [ 73.2818878, 17.02755 ], [ 73.2819307, 17.0276321 ], [ 73.282041, 17.0276626 ], [ 73.2821238, 17.0276372 ], [ 73.282215, 17.0274885 ], [ 73.2823009, 17.0273705 ], [ 73.2823896, 17.0273395 ], [ 73.2822043, 17.0276629 ], [ 73.2821775, 17.0278321 ], [ 73.2823491, 17.0278116 ], [ 73.2823652, 17.028104 ], [ 73.2829231, 17.0279039 ], [ 73.283205, 17.0278626 ], [ 73.2834593, 17.0276116 ], [ 73.283808, 17.0274013 ], [ 73.2838348, 17.0270371 ], [ 73.2837758, 17.026955 ], [ 73.2839936, 17.0270676 ], [ 73.2841567, 17.0269037 ], [ 73.2843047, 17.0270471 ], [ 73.2844088, 17.0270679 ], [ 73.2845429, 17.0268268 ], [ 73.284559, 17.0265754 ], [ 73.2848702, 17.0261651 ], [ 73.2853583, 17.025565 ], [ 73.2860428, 17.0248158 ], [ 73.286281, 17.0242416 ], [ 73.286524, 17.0245425 ], [ 73.2875368, 17.0246512 ], [ 73.2890506, 17.0236572 ], [ 73.2899733, 17.0219306 ], [ 73.2897609, 17.0206667 ], [ 73.2890496, 17.0197014 ], [ 73.2877063, 17.0202594 ], [ 73.2883635, 17.0188706 ], [ 73.2884453, 17.018332 ], [ 73.2884697, 17.0181376 ], [ 73.2883463, 17.017876 ], [ 73.288357, 17.0177016 ], [ 73.288475, 17.0176605 ], [ 73.2885716, 17.0174964 ], [ 73.2885877, 17.0173374 ], [ 73.2885341, 17.017245 ], [ 73.2883731, 17.0172604 ], [ 73.288357, 17.0168501 ], [ 73.2882927, 17.0164653 ], [ 73.2882015, 17.0164397 ], [ 73.2881103, 17.0161217 ], [ 73.2879493, 17.0159729 ], [ 73.2877884, 17.0157882 ], [ 73.287606, 17.0157626 ], [ 73.2875041, 17.0158395 ], [ 73.287429, 17.0158498 ], [ 73.2875953, 17.0156446 ], [ 73.2875792, 17.015383 ], [ 73.2873485, 17.0151983 ], [ 73.2871232, 17.015147 ], [ 73.2868818, 17.0150444 ], [ 73.2867477, 17.0146289 ], [ 73.2867155, 17.0142237 ], [ 73.2865599, 17.0140801 ], [ 73.2865707, 17.0132747 ], [ 73.2864848, 17.0129208 ], [ 73.2864258, 17.012772 ], [ 73.2862488, 17.0128233 ], [ 73.2862381, 17.0130695 ], [ 73.2861308, 17.0130849 ], [ 73.2860235, 17.0127566 ], [ 73.2859162, 17.0126848 ], [ 73.2855461, 17.012654 ], [ 73.2854924, 17.012572 ], [ 73.2855085, 17.0124437 ], [ 73.2857102, 17.0125409 ], [ 73.285943, 17.0125874 ], [ 73.2862649, 17.0126233 ], [ 73.2864183, 17.0126333 ], [ 73.2864312, 17.0122488 ], [ 73.2862971, 17.011772 ], [ 73.2862756, 17.0113206 ], [ 73.2862595, 17.0104793 ], [ 73.286222, 17.010151 ], [ 73.2864258, 17.009243 ], [ 73.2867262, 17.0090686 ], [ 73.2871769, 17.0086326 ], [ 73.2876757, 17.0083607 ], [ 73.2878635, 17.0082119 ], [ 73.2879654, 17.0079247 ], [ 73.2878689, 17.0075758 ], [ 73.2877669, 17.0073296 ], [ 73.287606, 17.0070629 ], [ 73.2878238, 17.0067443 ], [ 73.2874773, 17.0064114 ], [ 73.2871769, 17.0059292 ], [ 73.2869408, 17.0048314 ], [ 73.286796, 17.0042209 ], [ 73.2869462, 17.003908 ], [ 73.287209, 17.0036207 ], [ 73.287447, 17.0034368 ], [ 73.2875765, 17.0034033 ], [ 73.2879584, 17.0041471 ], [ 73.2879359, 17.0047801 ], [ 73.2880078, 17.005802 ], [ 73.2884026, 17.0064689 ], [ 73.2893199, 17.0067377 ], [ 73.289601, 17.0078006 ], [ 73.2887771, 17.0092072 ], [ 73.2887782, 17.0104923 ], [ 73.2880057, 17.0114519 ], [ 73.288217, 17.0129006 ], [ 73.2889401, 17.0138557 ], [ 73.2900687, 17.013833 ], [ 73.2900077, 17.0153423 ], [ 73.2905484, 17.0168894 ], [ 73.2912458, 17.0187319 ], [ 73.2922081, 17.0193433 ], [ 73.2938543, 17.01853 ], [ 73.2932075, 17.0192384 ], [ 73.2929653, 17.0198534 ], [ 73.2923366, 17.0207121 ], [ 73.2930343, 17.021226 ], [ 73.2948203, 17.020886 ], [ 73.2967336, 17.0207331 ], [ 73.2966158, 17.021246 ], [ 73.2958643, 17.0210778 ], [ 73.2946328, 17.021241 ], [ 73.2940964, 17.0213648 ], [ 73.293374, 17.0213423 ], [ 73.2929025, 17.0216121 ], [ 73.2930572, 17.0219519 ], [ 73.2930242, 17.0224105 ], [ 73.2928027, 17.0228914 ], [ 73.2925447, 17.0234441 ], [ 73.2921345, 17.0239888 ], [ 73.2916606, 17.0243064 ], [ 73.2908707, 17.0248654 ], [ 73.2902806, 17.0254035 ], [ 73.2897342, 17.0258549 ], [ 73.2889573, 17.0264414 ], [ 73.2886998, 17.0267696 ], [ 73.288703, 17.026943 ], [ 73.2885609, 17.0277857 ], [ 73.288239, 17.0287911 ], [ 73.2881237, 17.029364 ], [ 73.2877348, 17.0297246 ], [ 73.2872224, 17.0294769 ], [ 73.2864822, 17.0295487 ], [ 73.2862864, 17.0294989 ], [ 73.2863534, 17.0293332 ], [ 73.2859028, 17.0295282 ], [ 73.2849909, 17.0298154 ], [ 73.2843552, 17.0301349 ], [ 73.2842076, 17.0303386 ], [ 73.2839367, 17.030258 ], [ 73.2835639, 17.0305335 ], [ 73.2831777, 17.0307386 ], [ 73.2831133, 17.0308617 ], [ 73.2832286, 17.0312018 ], [ 73.2832206, 17.031508 ], [ 73.283057, 17.0318378 ], [ 73.282896, 17.0318481 ], [ 73.282896, 17.0315198 ], [ 73.2827673, 17.0313044 ], [ 73.2822765, 17.0311285 ], [ 73.2818768, 17.0309864 ], [ 73.2817078, 17.0309233 ], [ 73.2815126, 17.0312736 ], [ 73.2813302, 17.0310582 ], [ 73.2807208, 17.0311387 ], [ 73.2803753, 17.0315506 ], [ 73.2802251, 17.0317865 ], [ 73.2801071, 17.0323815 ], [ 73.280077, 17.0328416 ], [ 73.2799698, 17.0337546 ], [ 73.2800878, 17.0342059 ], [ 73.2804847, 17.0347599 ], [ 73.2809246, 17.0349855 ], [ 73.2815979, 17.0352538 ], [ 73.2820619, 17.0355805 ], [ 73.2824454, 17.0358283 ], [ 73.2828451, 17.0363806 ], [ 73.2832072, 17.036731 ], [ 73.2836068, 17.0366679 ], [ 73.2833755, 17.0369637 ], [ 73.2832286, 17.0371515 ], [ 73.2834566, 17.0375193 ], [ 73.2839582, 17.0380235 ], [ 73.2844651, 17.0386477 ], [ 73.2845805, 17.0389056 ], [ 73.2847414, 17.0392236 ], [ 73.2847092, 17.0393878 ], [ 73.2844008, 17.0393862 ], [ 73.2841728, 17.0392134 ], [ 73.2840869, 17.0389877 ], [ 73.2839367, 17.0387313 ], [ 73.2835183, 17.03868 ], [ 73.2835103, 17.0389349 ], [ 73.2837141, 17.0393144 ], [ 73.2838938, 17.039716 ], [ 73.2839072, 17.040012 ], [ 73.2838751, 17.0405146 ], [ 73.2842693, 17.0410495 ], [ 73.2847951, 17.0412137 ], [ 73.2853985, 17.0412942 ], [ 73.285986, 17.0412855 ], [ 73.2863829, 17.041265 ], [ 73.2864822, 17.0412224 ], [ 73.286576, 17.0411008 ], [ 73.286576, 17.0408854 ], [ 73.2867906, 17.0411316 ], [ 73.2869515, 17.0411008 ], [ 73.2870696, 17.0409777 ], [ 73.2871447, 17.0407931 ], [ 73.2873378, 17.0407008 ], [ 73.2875309, 17.0404238 ], [ 73.2875631, 17.0400956 ], [ 73.2874692, 17.0398068 ], [ 73.2874048, 17.0395914 ], [ 73.28737, 17.039357 ], [ 73.287319, 17.039099 ], [ 73.2873914, 17.0389159 ], [ 73.2875524, 17.0389159 ], [ 73.2876623, 17.0391606 ], [ 73.2876623, 17.039458 ], [ 73.2876087, 17.0397042 ], [ 73.2877884, 17.0399314 ], [ 73.2878099, 17.0402187 ], [ 73.2879842, 17.040371 ], [ 73.2883597, 17.0404838 ], [ 73.2885501, 17.0404648 ], [ 73.2886896, 17.0402289 ], [ 73.2887647, 17.0399109 ], [ 73.288754, 17.0396545 ], [ 73.2889686, 17.0395211 ], [ 73.2890651, 17.0393365 ], [ 73.2890329, 17.0391416 ], [ 73.2892395, 17.0394786 ], [ 73.2894621, 17.039398 ], [ 73.289454, 17.0398273 ], [ 73.2892904, 17.0400545 ], [ 73.289108, 17.0402699 ], [ 73.2894943, 17.0404238 ], [ 73.2898403, 17.0406377 ], [ 73.2903633, 17.0408034 ], [ 73.2909641, 17.0408341 ], [ 73.2914791, 17.0408341 ], [ 73.2918439, 17.040711 ], [ 73.2920799, 17.0405469 ], [ 73.2921658, 17.0404033 ], [ 73.2920907, 17.0398494 ], [ 73.292383, 17.0402171 ], [ 73.2926593, 17.0403007 ], [ 73.2928524, 17.040075 ], [ 73.2929302, 17.0398684 ], [ 73.2933137, 17.0398699 ], [ 73.2933781, 17.0398391 ], [ 73.2935712, 17.0395724 ], [ 73.29381, 17.0392016 ], [ 73.293936, 17.0388236 ], [ 73.293936, 17.0385364 ], [ 73.2943357, 17.0382579 ], [ 73.294569, 17.0384953 ], [ 73.2946575, 17.038822 ], [ 73.2945046, 17.0391929 ], [ 73.2943893, 17.0396427 ], [ 73.2944751, 17.0398889 ], [ 73.2946253, 17.0400427 ], [ 73.2952557, 17.039716 ], [ 73.2956634, 17.0396647 ], [ 73.2958672, 17.0394596 ], [ 73.2958672, 17.0391826 ], [ 73.2959101, 17.0390185 ], [ 73.2960067, 17.0392442 ], [ 73.2962132, 17.0395709 ], [ 73.2963956, 17.0397042 ], [ 73.2965244, 17.0398786 ], [ 73.2967792, 17.0396955 ], [ 73.2966933, 17.0394698 ], [ 73.2965753, 17.0390082 ], [ 73.296629, 17.0387005 ], [ 73.2970259, 17.0382389 ], [ 73.2971439, 17.0380337 ], [ 73.2971225, 17.0378388 ], [ 73.2973156, 17.0376029 ], [ 73.2974256, 17.0374475 ], [ 73.297498, 17.0373157 ], [ 73.2974765, 17.037049 ], [ 73.2975946, 17.0368848 ], [ 73.2977045, 17.0371192 ], [ 73.2977153, 17.0373859 ], [ 73.2975436, 17.0377244 ], [ 73.2976723, 17.0379501 ], [ 73.2981846, 17.037767 ], [ 73.2987238, 17.03715 ], [ 73.2989678, 17.0369361 ], [ 73.299228, 17.036832 ], [ 73.2991422, 17.0365448 ], [ 73.299118, 17.0362488 ], [ 73.299397, 17.0362488 ], [ 73.2994936, 17.0364643 ], [ 73.2998691, 17.0364027 ], [ 73.2999978, 17.0361873 ], [ 73.3003197, 17.0361155 ], [ 73.3006308, 17.0359719 ], [ 73.3008695, 17.035837 ], [ 73.3009875, 17.0355908 ], [ 73.3010814, 17.0354692 ], [ 73.3011485, 17.0358883 ], [ 73.3014677, 17.0357872 ], [ 73.3015964, 17.0356231 ], [ 73.3013309, 17.0353856 ], [ 73.3013604, 17.0351615 ], [ 73.3015535, 17.0349358 ], [ 73.3019397, 17.0347717 ], [ 73.3017895, 17.0351512 ], [ 73.3018754, 17.0353769 ], [ 73.3019639, 17.0353241 ], [ 73.3022616, 17.035459 ], [ 73.3024011, 17.035459 ], [ 73.3026907, 17.0351717 ], [ 73.3026505, 17.0348317 ], [ 73.3032513, 17.0349753 ], [ 73.3045468, 17.0344537 ], [ 73.3048687, 17.0342588 ], [ 73.3054481, 17.0339408 ], [ 73.3059657, 17.0340315 ], [ 73.3059309, 17.034269 ], [ 73.3063278, 17.0338177 ], [ 73.3065022, 17.0334263 ], [ 73.3066846, 17.0333853 ], [ 73.3068026, 17.0340931 ], [ 73.3075724, 17.0346896 ], [ 73.3079184, 17.0347394 ], [ 73.3085165, 17.0347409 ], [ 73.308892, 17.0347614 ], [ 73.3094311, 17.034965 ], [ 73.309871, 17.0350061 ], [ 73.3102009, 17.0349255 ], [ 73.3107722, 17.0350061 ], [ 73.311188, 17.034905 ], [ 73.3115206, 17.0346178 ], [ 73.3116922, 17.0344024 ], [ 73.3118961, 17.0343613 ], [ 73.3120356, 17.0345562 ], [ 73.3124647, 17.0341972 ], [ 73.3128322, 17.0338879 ], [ 73.3133981, 17.033592 ], [ 73.3139882, 17.0330996 ], [ 73.3144066, 17.0328944 ], [ 73.3145161, 17.0325133 ], [ 73.3147607, 17.0317865 ], [ 73.3148143, 17.0313249 ], [ 73.314622, 17.0309363 ], [ 73.3155515, 17.0317167 ], [ 73.3162085, 17.0331382 ], [ 73.3204857, 17.0338178 ], [ 73.3206099, 17.034849 ], [ 73.3216862, 17.0349625 ], [ 73.320326, 17.0366494 ], [ 73.3205914, 17.0369091 ], [ 73.3205823, 17.0379392 ], [ 73.3202611, 17.0383037 ], [ 73.3199066, 17.0387061 ], [ 73.3172308, 17.0385547 ], [ 73.3160793, 17.0394175 ], [ 73.3150375, 17.0391395 ], [ 73.3132597, 17.0387595 ], [ 73.3126804, 17.0382768 ], [ 73.3123859, 17.038482 ], [ 73.3119202, 17.0385148 ], [ 73.3112969, 17.0383086 ], [ 73.3111526, 17.0376988 ], [ 73.3105663, 17.0373536 ], [ 73.3099552, 17.0372003 ], [ 73.3089993, 17.0371787 ], [ 73.3073315, 17.0370987 ], [ 73.3059174, 17.0367971 ], [ 73.3045924, 17.0372336 ], [ 73.3038446, 17.0380378 ], [ 73.30321, 17.0386866 ], [ 73.3028302, 17.0388251 ], [ 73.3032503, 17.0392416 ], [ 73.3041939, 17.0382635 ], [ 73.3042319, 17.0390118 ], [ 73.3040013, 17.0392744 ], [ 73.3038929, 17.0396104 ], [ 73.3030239, 17.0394668 ], [ 73.3024987, 17.0398053 ], [ 73.3020781, 17.0401812 ], [ 73.3014231, 17.0402171 ], [ 73.2987443, 17.0402036 ], [ 73.2984742, 17.0404589 ], [ 73.2974, 17.0408367 ], [ 73.297261, 17.0413506 ], [ 73.296991, 17.0416058 ], [ 73.297366, 17.0419491 ], [ 73.2970892, 17.0423789 ], [ 73.296762, 17.0424768 ], [ 73.296541, 17.0433175 ], [ 73.2962089, 17.0436124 ], [ 73.2956982, 17.0436412 ], [ 73.2947412, 17.0438776 ], [ 73.2942166, 17.0444012 ], [ 73.2944725, 17.0444961 ], [ 73.2944751, 17.04471 ], [ 73.2945583, 17.0447628 ], [ 73.2945824, 17.0452126 ], [ 73.2944403, 17.0450295 ], [ 73.2940648, 17.0449885 ], [ 73.2938743, 17.0448331 ], [ 73.2938609, 17.0445679 ], [ 73.2934559, 17.0444741 ], [ 73.2933137, 17.0444346 ], [ 73.2919431, 17.0445151 ], [ 73.2913718, 17.0447423 ], [ 73.2903955, 17.0445987 ], [ 73.2894433, 17.0446074 ], [ 73.2887567, 17.0445048 ], [ 73.2881666, 17.0443202 ], [ 73.2881666, 17.0438894 ], [ 73.288188, 17.0432124 ], [ 73.2874129, 17.043696 ], [ 73.287252, 17.043378 ], [ 73.2868228, 17.0436653 ], [ 73.2862998, 17.0440638 ], [ 73.2867718, 17.0440432 ], [ 73.2866833, 17.0442499 ], [ 73.2868013, 17.0444346 ], [ 73.2873727, 17.0451306 ], [ 73.2878957, 17.0457681 ], [ 73.2881988, 17.0461768 ], [ 73.2885501, 17.0463322 ], [ 73.289151, 17.0463835 ], [ 73.2899449, 17.0464348 ], [ 73.2904813, 17.0465476 ], [ 73.2909454, 17.046782 ], [ 73.2918466, 17.0469154 ], [ 73.2922087, 17.04704 ], [ 73.2917366, 17.0472451 ], [ 73.291514, 17.0473769 ], [ 73.2913289, 17.0473272 ], [ 73.2906959, 17.0473067 ], [ 73.2906557, 17.047459 ], [ 73.2903848, 17.0476247 ], [ 73.2900629, 17.0476041 ], [ 73.289497, 17.0476026 ], [ 73.2891939, 17.0475221 ], [ 73.2889042, 17.0473477 ], [ 73.2880593, 17.0474077 ], [ 73.2878206, 17.0471631 ], [ 73.2875443, 17.0467615 ], [ 73.2870722, 17.0460948 ], [ 73.2862113, 17.0454603 ], [ 73.2855058, 17.0451818 ], [ 73.2848406, 17.0449767 ], [ 73.2846475, 17.0446997 ], [ 73.2845181, 17.0443338 ], [ 73.2840762, 17.0439899 ], [ 73.283042, 17.0435073 ], [ 73.2823932, 17.042513 ], [ 73.281902, 17.0417419 ], [ 73.281334, 17.0412164 ], [ 73.2803952, 17.0399581 ], [ 73.2800121, 17.0394026 ], [ 73.2788974, 17.0373387 ], [ 73.2784988, 17.0372018 ], [ 73.2782875, 17.0376603 ], [ 73.2782059, 17.038264 ], [ 73.2780842, 17.0390764 ], [ 73.2782671, 17.0399029 ], [ 73.2783942, 17.0401335 ], [ 73.2786249, 17.0404602 ], [ 73.278788, 17.0408321 ], [ 73.2790884, 17.0412526 ], [ 73.2793459, 17.0415901 ], [ 73.279517, 17.0417948 ], [ 73.2797616, 17.0421343 ], [ 73.28004, 17.0425431 ], [ 73.280248, 17.0428808 ], [ 73.2809108, 17.0435305 ], [ 73.2812824, 17.0439684 ], [ 73.2818377, 17.0446969 ], [ 73.2824958, 17.0458619 ], [ 73.2827612, 17.0461215 ], [ 73.2834024, 17.0470482 ], [ 73.2838649, 17.0477478 ], [ 73.2842575, 17.0482873 ], [ 73.2847411, 17.0492287 ], [ 73.2851598, 17.050148 ], [ 73.2853958, 17.0507795 ], [ 73.2857456, 17.0512009 ], [ 73.2860578, 17.0518476 ], [ 73.2863193, 17.0523323 ], [ 73.2866705, 17.0532713 ], [ 73.2872251, 17.0556878 ], [ 73.2874494, 17.0568407 ], [ 73.2874741, 17.0577502 ], [ 73.288128, 17.0599978 ], [ 73.2880464, 17.0638784 ], [ 73.2879901, 17.0662594 ], [ 73.2879203, 17.0675402 ], [ 73.2881622, 17.070375 ], [ 73.288236271295744, 17.075456326757813 ], [ 73.2882448, 17.0760414 ], [ 73.2877116, 17.0757792 ], [ 73.2877024, 17.0768093 ], [ 73.2882367, 17.0769422 ], [ 73.2890339, 17.0775931 ], [ 73.2891025, 17.0769151 ], [ 73.2897951, 17.0772697 ], [ 73.2914696, 17.0773835 ], [ 73.2913234, 17.0760673 ], [ 73.2917277, 17.0758131 ], [ 73.2917207, 17.0765857 ], [ 73.2919896, 17.0764587 ], [ 73.2925239, 17.0765925 ], [ 73.2926621, 17.0760786 ], [ 73.2941408, 17.0754468 ], [ 73.294342315169274, 17.075256326757813 ], [ 73.2944109, 17.0751915 ], [ 73.2952153, 17.0750699 ], [ 73.2956258, 17.0740433 ], [ 73.2956353, 17.0730132 ], [ 73.2955041, 17.0727545 ], [ 73.2933693, 17.0719641 ], [ 73.293242, 17.0711903 ], [ 73.2935145, 17.0706776 ], [ 73.293409, 17.0675863 ], [ 73.2944765, 17.0679811 ], [ 73.2948742, 17.0683712 ], [ 73.2954002, 17.0694058 ], [ 73.2957988, 17.0697949 ], [ 73.2963342, 17.0697995 ], [ 73.2971422, 17.0692912 ], [ 73.2974098, 17.0692935 ], [ 73.2975421, 17.0694237 ], [ 73.2975374, 17.0699388 ], [ 73.2975351, 17.0701964 ], [ 73.2976682, 17.0703256 ], [ 73.2987368, 17.0705923 ], [ 73.2999259, 17.0722767 ], [ 73.3016515, 17.0739647 ], [ 73.3021847, 17.0742266 ], [ 73.3032556, 17.0742355 ], [ 73.3033879, 17.0743659 ], [ 73.3035175, 17.0748821 ], [ 73.3045897, 17.0747617 ], [ 73.3049874, 17.0751518 ], [ 73.305194520528801, 17.075456326757813 ], [ 73.3055158, 17.0759287 ], [ 73.3056432, 17.0767025 ], [ 73.3067163, 17.076454 ], [ 73.306437, 17.0777392 ], [ 73.3045606, 17.0779811 ], [ 73.3044215, 17.078495 ], [ 73.3037456, 17.0792619 ], [ 73.3026759, 17.0791238 ], [ 73.3013431, 17.0784693 ], [ 73.3013476, 17.0779543 ], [ 73.2994735, 17.0779386 ], [ 73.2994688, 17.0784536 ], [ 73.2986644, 17.0785751 ], [ 73.2983943, 17.0788303 ], [ 73.297591, 17.0788237 ], [ 73.296795, 17.0780444 ], [ 73.2943911, 17.0773808 ], [ 73.2943864, 17.0778959 ], [ 73.2917078, 17.0780015 ], [ 73.2914425, 17.0777418 ], [ 73.2876918, 17.0779677 ], [ 73.2874217, 17.0782228 ], [ 73.2842053, 17.0785825 ], [ 73.2842006, 17.0790975 ], [ 73.2833949, 17.0793481 ], [ 73.2835189, 17.0803793 ], [ 73.2841805, 17.0812859 ], [ 73.2849791, 17.0818076 ], [ 73.2855134, 17.0819414 ], [ 73.2853436, 17.0858029 ], [ 73.2850688, 17.0865732 ], [ 73.2847776, 17.0891461 ], [ 73.2845028, 17.0899163 ], [ 73.2844933, 17.0909463 ], [ 73.2842208, 17.0914591 ], [ 73.2836264, 17.0978922 ], [ 73.283756, 17.0984084 ], [ 73.2842904, 17.0985413 ], [ 73.2845546, 17.0989302 ], [ 73.28375, 17.0990518 ], [ 73.2829398, 17.0998174 ], [ 73.2824053, 17.0996845 ], [ 73.2822592, 17.1009711 ], [ 73.2795058, 17.1091884 ], [ 73.2786929, 17.1102116 ], [ 73.2784181, 17.110982 ], [ 73.2778753, 17.1117499 ], [ 73.2777349, 17.1125212 ], [ 73.2748091, 17.112522 ], [ 73.2723803, 17.1123464 ], [ 73.2689014, 17.1120591 ], [ 73.268636, 17.1117994 ], [ 73.2664926, 17.1119102 ], [ 73.2664854, 17.1126828 ], [ 73.2670199, 17.1128157 ], [ 73.2676829, 17.1134657 ], [ 73.2678101, 17.1142392 ], [ 73.2683457, 17.114244 ], [ 73.2687326, 17.1157924 ], [ 73.2688657, 17.1159217 ], [ 73.2694002, 17.1160555 ], [ 73.2696561, 17.1173454 ], [ 73.2704582, 17.1174806 ], [ 73.2719175, 17.1189098 ], [ 73.2716308, 17.1209676 ], [ 73.2713582, 17.1214804 ], [ 73.2710738, 17.1232806 ], [ 73.270801, 17.1237934 ], [ 73.2707963, 17.1243084 ], [ 73.2705238, 17.1248211 ], [ 73.2705143, 17.125851 ], [ 73.2699572, 17.128164 ], [ 73.2696871, 17.1284193 ], [ 73.2696799, 17.1291918 ], [ 73.2691395, 17.1297023 ], [ 73.2685967, 17.1304702 ], [ 73.268592, 17.1309852 ], [ 73.2680445, 17.1322681 ], [ 73.2680205, 17.1348433 ], [ 73.2674682, 17.1366412 ], [ 73.2674586, 17.1376711 ], [ 73.2666432, 17.1389517 ], [ 73.2663539, 17.141267 ], [ 73.2660742, 17.1425522 ], [ 73.2661552, 17.1437345 ], [ 73.2659812, 17.1444137 ], [ 73.2657563, 17.1450013 ], [ 73.2646871, 17.1476909 ], [ 73.264142, 17.1487162 ], [ 73.2641324, 17.1497463 ], [ 73.2633049, 17.1523144 ], [ 73.2632953, 17.1533445 ], [ 73.2630227, 17.1538572 ], [ 73.2630156, 17.1546297 ], [ 73.2624607, 17.156685 ], [ 73.2625829, 17.1579738 ], [ 73.2617771, 17.1582244 ], [ 73.2616379, 17.1587381 ], [ 73.2613677, 17.1589935 ], [ 73.2602698, 17.1618168 ], [ 73.2599995, 17.1620719 ], [ 73.2594374, 17.1648999 ], [ 73.2591647, 17.1654125 ], [ 73.2591528, 17.1667 ], [ 73.2588825, 17.1669553 ], [ 73.2588753, 17.1677277 ], [ 73.2581796, 17.1705544 ], [ 73.257644, 17.1705499 ], [ 73.257775, 17.1708086 ], [ 73.2577678, 17.1715811 ], [ 73.2569424, 17.1738916 ], [ 73.2569352, 17.1746642 ], [ 73.2561173, 17.1762023 ], [ 73.255287, 17.1790279 ], [ 73.2550167, 17.179283 ], [ 73.255012, 17.179798 ], [ 73.2544618, 17.1813384 ], [ 73.2541913, 17.1815935 ], [ 73.2539114, 17.1828787 ], [ 73.2533637, 17.1841617 ], [ 73.2533588, 17.1846767 ], [ 73.2528158, 17.1854444 ], [ 73.2528086, 17.186217 ], [ 73.2522558, 17.1880148 ], [ 73.251428233467493, 17.189431187500002 ], [ 73.2507587, 17.1905771 ], [ 73.2500274, 17.1916472 ], [ 73.2492431, 17.1921413 ], [ 73.2484009, 17.1924795 ], [ 73.2477148, 17.1921859 ], [ 73.2461908, 17.1906797 ], [ 73.2442998, 17.1908052 ], [ 73.2431266, 17.1910292 ], [ 73.2427147, 17.1912798 ], [ 73.2425193, 17.1916242 ], [ 73.242174, 17.1917901 ], [ 73.2419872, 17.1920229 ], [ 73.241712, 17.1923914 ], [ 73.2410951, 17.1932728 ], [ 73.2401172, 17.1937966 ], [ 73.2387659, 17.1943746 ], [ 73.2368288, 17.1941394 ], [ 73.2360193, 17.1938596 ], [ 73.2351749, 17.1938873 ], [ 73.2347978, 17.194227 ], [ 73.2348048, 17.1945822 ], [ 73.2349802, 17.1950685 ], [ 73.2346433, 17.1955984 ], [ 73.2337367, 17.1960002 ], [ 73.2330935, 17.1964603 ], [ 73.2325796, 17.1967171 ], [ 73.2321263, 17.1970138 ], [ 73.2318058, 17.1973648 ], [ 73.2312626, 17.1981325 ], [ 73.2309145, 17.1989432 ], [ 73.2306232, 17.1994449 ], [ 73.231112, 17.1999339 ], [ 73.2312873, 17.2004903 ], [ 73.2317154, 17.2008823 ], [ 73.2328763, 17.2018626 ], [ 73.2343821, 17.2015546 ], [ 73.2366904, 17.2010822 ], [ 73.2382884, 17.2007035 ], [ 73.2388302, 17.2005021 ], [ 73.2396875, 17.1997515 ], [ 73.2403956, 17.1987792 ], [ 73.2412914, 17.1985917 ], [ 73.2417919, 17.1985327 ], [ 73.2426757, 17.1982136 ], [ 73.2434933, 17.1978436 ], [ 73.2442979, 17.1968822 ], [ 73.2444589, 17.1964497 ], [ 73.2450071, 17.1962057 ], [ 73.2452428, 17.1962078 ], [ 73.2453671, 17.1968091 ], [ 73.2454637, 17.1971829 ], [ 73.2450998, 17.1977346 ], [ 73.2446519, 17.197934 ], [ 73.2443306, 17.1978833 ], [ 73.2436413, 17.1983786 ], [ 73.242953, 17.199064 ], [ 73.2430219, 17.1993438 ], [ 73.2432923, 17.1998004 ], [ 73.2436003, 17.2007645 ], [ 73.2439595, 17.2013338 ], [ 73.244222, 17.2019339 ], [ 73.2444897, 17.2021686 ], [ 73.2446812, 17.202394 ], [ 73.2450379, 17.2026195 ], [ 73.2454338, 17.203132 ], [ 73.2451865, 17.2039524 ], [ 73.2453695, 17.2043208 ], [ 73.2455084, 17.2056127 ], [ 73.2457886, 17.2062427 ], [ 73.2459028, 17.208304 ], [ 73.2455911, 17.2129365 ], [ 73.2450432, 17.2142195 ], [ 73.2450383, 17.2147345 ], [ 73.2447655, 17.2152471 ], [ 73.2444709, 17.2180773 ], [ 73.2439277, 17.2188451 ], [ 73.2439203, 17.2196175 ], [ 73.2433747, 17.2206428 ], [ 73.2423547, 17.2236448 ], [ 73.2422713, 17.2239811 ], [ 73.2417209, 17.2255213 ], [ 73.2414505, 17.2257764 ], [ 73.2413121, 17.2262903 ], [ 73.240775, 17.2264139 ], [ 73.2399638, 17.2271794 ], [ 73.2394255, 17.2274323 ], [ 73.2391575, 17.2274298 ], [ 73.2383586, 17.2269078 ], [ 73.2370237, 17.2263811 ], [ 73.2351445, 17.2267515 ], [ 73.2347323, 17.227778 ], [ 73.2344497, 17.2293206 ], [ 73.2341793, 17.2295757 ], [ 73.2336287, 17.2311159 ], [ 73.2333583, 17.231371 ], [ 73.2332199, 17.2318849 ], [ 73.2326841, 17.2318802 ], [ 73.2325446, 17.2323941 ], [ 73.2322743, 17.2326492 ], [ 73.2321188, 17.2349654 ], [ 73.2322173, 17.235211 ], [ 73.2323638, 17.2357572 ], [ 73.232846, 17.2360723 ], [ 73.2330243, 17.2383211 ], [ 73.2316574, 17.241142 ], [ 73.2316525, 17.2416568 ], [ 73.2311044, 17.2429397 ], [ 73.2310971, 17.2437122 ], [ 73.2305512, 17.2447375 ], [ 73.2305463, 17.2452523 ], [ 73.229599, 17.2462741 ], [ 73.2293324, 17.2461425 ], [ 73.2272956, 17.2462802 ], [ 73.2261105, 17.2467585 ], [ 73.2255758, 17.2466245 ], [ 73.2236295, 17.2470435 ], [ 73.2229729, 17.2480221 ], [ 73.2233549, 17.2488223 ], [ 73.2248204, 17.2494166 ], [ 73.225418, 17.2490699 ], [ 73.2260848, 17.2494617 ], [ 73.2268886, 17.2494687 ], [ 73.2272032, 17.2500254 ], [ 73.2275471, 17.2506339 ], [ 73.2275348, 17.2519214 ], [ 73.2264358, 17.2547443 ], [ 73.2257589, 17.2555109 ], [ 73.2249536, 17.2556322 ], [ 73.2243731, 17.2559011 ], [ 73.2230108, 17.2551624 ], [ 73.2221405, 17.2554789 ], [ 73.2219262, 17.2557946 ], [ 73.2219991, 17.2567608 ], [ 73.2221753, 17.2575487 ], [ 73.2215775, 17.2583067 ], [ 73.2215726, 17.2588218 ], [ 73.2207588, 17.2598445 ], [ 73.2207537, 17.2603595 ], [ 73.2212798, 17.2613943 ], [ 73.222342, 17.2624338 ], [ 73.2223295, 17.2637212 ], [ 73.2217812, 17.265004 ], [ 73.2217763, 17.265519 ], [ 73.2209625, 17.2665419 ], [ 73.2209576, 17.2670569 ], [ 73.2206845, 17.2675694 ], [ 73.2200369, 17.2683962 ], [ 73.2195863, 17.2694034 ], [ 73.218802, 17.2699515 ], [ 73.2178471, 17.2698439 ], [ 73.2170345, 17.2701526 ], [ 73.2169003, 17.2708836 ], [ 73.2168215, 17.2714609 ], [ 73.2166032, 17.2718979 ], [ 73.2162019, 17.2722985 ], [ 73.2158087, 17.2726673 ], [ 73.2154766, 17.2730044 ], [ 73.2148308, 17.2735832 ], [ 73.214224, 17.2739925 ], [ 73.2129316, 17.2746387 ], [ 73.2128502, 17.2746794 ], [ 73.2118814, 17.27504 ], [ 73.211294, 17.275018 ], [ 73.2110381, 17.2746871 ], [ 73.21097, 17.2733844 ], [ 73.210558, 17.2729521 ], [ 73.2103289, 17.2723512 ], [ 73.2100961, 17.2718072 ], [ 73.2096667, 17.2705617 ], [ 73.2090404, 17.2701009 ], [ 73.2085705, 17.2698576 ], [ 73.2078688, 17.2695887 ], [ 73.2068539, 17.2691374 ], [ 73.2059816, 17.2689632 ], [ 73.2054698, 17.2687675 ], [ 73.2044334, 17.2690441 ], [ 73.2036346, 17.2707652 ], [ 73.203492, 17.2710839 ], [ 73.2031717, 17.271463 ], [ 73.2028386, 17.2725981 ], [ 73.2030156, 17.2730817 ], [ 73.2029366, 17.2735917 ], [ 73.2028531, 17.2743731 ], [ 73.2026412, 17.2764218 ], [ 73.2018172, 17.2784746 ], [ 73.2012761, 17.2789847 ], [ 73.2008082, 17.2823942 ], [ 73.2008346, 17.2831009 ], [ 73.2011161, 17.2831814 ], [ 73.201615, 17.2834294 ], [ 73.2019003, 17.2837539 ], [ 73.2022957, 17.2844016 ], [ 73.2022732, 17.2867191 ], [ 73.2020026, 17.2869741 ], [ 73.2015911, 17.2880005 ], [ 73.1992015, 17.2894659 ], [ 73.1986701, 17.2897327 ], [ 73.1981895, 17.289954 ], [ 73.1976717, 17.291313 ], [ 73.1976775, 17.2918494 ], [ 73.1979315, 17.2925959 ], [ 73.1974133, 17.2929232 ], [ 73.1965748, 17.2934625 ], [ 73.1959399, 17.2939325 ], [ 73.1952616, 17.2941212 ], [ 73.1950907, 17.2944593 ], [ 73.194774, 17.295248 ], [ 73.1945532, 17.2958752 ], [ 73.1940948, 17.29657 ], [ 73.1941222, 17.2970765 ], [ 73.1931746, 17.2964885 ], [ 73.1925668, 17.2965147 ], [ 73.19222, 17.29696 ], [ 73.1914228, 17.2973488 ], [ 73.1909623, 17.2973185 ], [ 73.1902201, 17.2976804 ], [ 73.1898038, 17.2978581 ], [ 73.1895602, 17.2984503 ], [ 73.1900109, 17.299757 ], [ 73.191091, 17.2999419 ], [ 73.1913252, 17.3003127 ], [ 73.1924074, 17.3013663 ], [ 73.1915041, 17.3015729 ], [ 73.1913721, 17.3020249 ], [ 73.191499, 17.3023709 ], [ 73.1911417, 17.3029099 ], [ 73.1909882, 17.3032268 ], [ 73.1909593, 17.30343 ], [ 73.1917146, 17.3045217 ], [ 73.194031, 17.304966 ], [ 73.1948016, 17.3046021 ], [ 73.195536, 17.3054887 ], [ 73.1952455, 17.3065104 ], [ 73.196523, 17.3069245 ], [ 73.1982815, 17.3053033 ], [ 73.1989987, 17.3062572 ], [ 73.1996824, 17.3039056 ], [ 73.2000673, 17.3021222 ], [ 73.2009339, 17.3010897 ], [ 73.2018059, 17.3007391 ], [ 73.2022305, 17.3001983 ], [ 73.2025475, 17.3002244 ], [ 73.2031344, 17.299609 ], [ 73.20349, 17.2991193 ], [ 73.2037744, 17.2989029 ], [ 73.2049253, 17.2987682 ], [ 73.2055347, 17.2988617 ], [ 73.2057141, 17.2991593 ], [ 73.2060396, 17.299286 ], [ 73.2066561, 17.299526 ], [ 73.2077177, 17.3003217 ], [ 73.2074629, 17.3007862 ], [ 73.2075944, 17.3012172 ], [ 73.2074552, 17.3014825 ], [ 73.2065169, 17.3022589 ], [ 73.2064505, 17.3023937 ], [ 73.2077647, 17.3036756 ], [ 73.2099185, 17.3060861 ], [ 73.2122289, 17.3042075 ], [ 73.2123043, 17.3031268 ], [ 73.2127922, 17.3028945 ], [ 73.2150217, 17.3024917 ], [ 73.2156257, 17.3021442 ], [ 73.2159934, 17.3021723 ], [ 73.2166243, 17.3022205 ], [ 73.2171696, 17.3026582 ], [ 73.2179882, 17.3027798 ], [ 73.2187829, 17.3025488 ], [ 73.2198923, 17.3024313 ], [ 73.220594, 17.3024871 ], [ 73.2217843, 17.3026251 ], [ 73.2230045, 17.3016062 ], [ 73.2239457, 17.3006684 ], [ 73.2241329, 17.298895 ], [ 73.2234623, 17.2985805 ], [ 73.2231667, 17.2975823 ], [ 73.2227581, 17.2973619 ], [ 73.2227176, 17.2970889 ], [ 73.2226448, 17.296686 ], [ 73.222457, 17.296314 ], [ 73.2220251, 17.2955122 ], [ 73.221632, 17.2952747 ], [ 73.2214521, 17.2952351 ], [ 73.2214521, 17.295006 ], [ 73.2214931, 17.2947861 ], [ 73.2216956, 17.2947925 ], [ 73.2217443, 17.2946327 ], [ 73.222672, 17.2938369 ], [ 73.2231237, 17.293356 ], [ 73.2231485, 17.2932941 ], [ 73.2233728, 17.2927329 ], [ 73.2235467, 17.2924837 ], [ 73.2236435, 17.2921777 ], [ 73.2237092, 17.2916581 ], [ 73.2239841, 17.2908649 ], [ 73.2240627, 17.2901532 ], [ 73.2240024, 17.2888597 ], [ 73.2240345, 17.2878546 ], [ 73.2240404, 17.2873529 ], [ 73.2245779, 17.2847446 ], [ 73.2245902, 17.2834571 ], [ 73.2254042, 17.2824342 ], [ 73.2256796, 17.2816641 ], [ 73.2259501, 17.2814089 ], [ 73.2264469, 17.2812861 ], [ 73.2272601, 17.2810974 ], [ 73.227534, 17.2811545 ], [ 73.2276306, 17.2814926 ], [ 73.2277832, 17.2823211 ], [ 73.2280203, 17.2837379 ], [ 73.2294432, 17.2845859 ], [ 73.2309366, 17.2854559 ], [ 73.2312379, 17.2855376 ], [ 73.2313529, 17.2853585 ], [ 73.231847, 17.2852415 ], [ 73.2326028, 17.285953 ], [ 73.2327662, 17.2861576 ], [ 73.2338299, 17.2863556 ], [ 73.2351123, 17.2862303 ], [ 73.2351068, 17.2887751 ], [ 73.2351005, 17.291661 ], [ 73.2345643, 17.2916565 ], [ 73.2334885, 17.2920337 ], [ 73.232382, 17.292413 ], [ 73.2337891, 17.2935399 ], [ 73.23448, 17.29407 ], [ 73.2351302, 17.2949438 ], [ 73.2357138, 17.2954452 ], [ 73.2359703, 17.296027 ], [ 73.2363452, 17.2964486 ], [ 73.2369916, 17.2973306 ], [ 73.2376041, 17.2983357 ], [ 73.2379989, 17.2990405 ], [ 73.2385053, 17.3000609 ], [ 73.2387854, 17.3005012 ], [ 73.2391651, 17.3010967 ], [ 73.2394282, 17.3016142 ], [ 73.2396841, 17.3029039 ], [ 73.2397284, 17.3036141 ], [ 73.2394699, 17.3043937 ], [ 73.2399349, 17.3047088 ], [ 73.2402007, 17.3049685 ], [ 73.2403279, 17.3057423 ], [ 73.24062, 17.3061893 ], [ 73.241429, 17.3066769 ], [ 73.2416478, 17.3070518 ], [ 73.2413753, 17.3092386 ], [ 73.2414405, 17.3155378 ], [ 73.2410241, 17.3170793 ], [ 73.2415603, 17.317084 ], [ 73.2416989, 17.3165701 ], [ 73.2421039, 17.3163161 ], [ 73.2419979, 17.3177718 ], [ 73.2416103, 17.3181447 ], [ 73.2412498, 17.3183424 ], [ 73.2408657, 17.3179521 ], [ 73.2394098, 17.3173724 ], [ 73.2378023, 17.3175659 ], [ 73.2377973, 17.318081 ], [ 73.2364594, 17.3178116 ], [ 73.2364545, 17.3183267 ], [ 73.2351179, 17.3179281 ], [ 73.2343124, 17.3180502 ], [ 73.2343075, 17.3185652 ], [ 73.2329659, 17.3186818 ], [ 73.2316305, 17.3181549 ], [ 73.2297503, 17.3185249 ], [ 73.2297452, 17.31904 ], [ 73.2283999, 17.3195431 ], [ 73.2279875, 17.3205695 ], [ 73.2271757, 17.321335 ], [ 73.2267618, 17.3226189 ], [ 73.2262245, 17.3227425 ], [ 73.2251459, 17.3233771 ], [ 73.2251385, 17.3241496 ], [ 73.2232595, 17.3243904 ], [ 73.2232545, 17.3249054 ], [ 73.222717, 17.325029 ], [ 73.2216386, 17.3256636 ], [ 73.221363, 17.3264336 ], [ 73.22002, 17.3266793 ], [ 73.2197346, 17.3284794 ], [ 73.2189304, 17.3284722 ], [ 73.2190516, 17.3297608 ], [ 73.2193171, 17.3300207 ], [ 73.2195777, 17.3307956 ], [ 73.2201066, 17.3315729 ], [ 73.2202336, 17.3323465 ], [ 73.2207711, 17.3322221 ], [ 73.2218384, 17.3327466 ], [ 73.225593, 17.3326515 ], [ 73.2254511, 17.3334229 ], [ 73.2251805, 17.333678 ], [ 73.224617, 17.3365056 ], [ 73.2242079, 17.3372747 ], [ 73.2225944, 17.3377753 ], [ 73.2224549, 17.3382892 ], [ 73.2220482, 17.3388005 ], [ 73.221512, 17.3387957 ], [ 73.2215071, 17.3393108 ], [ 73.2209709, 17.339306 ], [ 73.2206953, 17.340076 ], [ 73.2201578, 17.3401996 ], [ 73.219618, 17.3405816 ], [ 73.2194759, 17.3413529 ], [ 73.2189323, 17.3421206 ], [ 73.2187938, 17.3426343 ], [ 73.2177201, 17.342753 ], [ 73.2174494, 17.3430082 ], [ 73.2166426, 17.3432586 ], [ 73.2158321, 17.3438955 ], [ 73.215827, 17.3444106 ], [ 73.2150202, 17.3446608 ], [ 73.2145927, 17.3472321 ], [ 73.2151215, 17.3480095 ], [ 73.2156501, 17.3487867 ], [ 73.2157798, 17.3493028 ], [ 73.2165828, 17.3494383 ], [ 73.2168522, 17.3493125 ], [ 73.2169809, 17.3498286 ], [ 73.2179136, 17.3504803 ], [ 73.2187153, 17.3507449 ], [ 73.2193791, 17.351395 ], [ 73.2196397, 17.3521699 ], [ 73.2196172, 17.3544875 ], [ 73.2191906, 17.3571303 ], [ 73.2187454, 17.3574923 ], [ 73.2174838, 17.3575969 ], [ 73.217118, 17.3575709 ], [ 73.2171076, 17.3577738 ], [ 73.2166209, 17.3578167 ], [ 73.21652, 17.3581403 ], [ 73.2163211, 17.3579065 ], [ 73.2159296, 17.3583115 ], [ 73.2159517, 17.3586966 ], [ 73.2160481, 17.3592038 ], [ 73.2161802, 17.3594626 ], [ 73.215644, 17.3594578 ], [ 73.2155019, 17.3602292 ], [ 73.2152313, 17.3604841 ], [ 73.2150903, 17.3612554 ], [ 73.2145528, 17.361379 ], [ 73.2140128, 17.3617608 ], [ 73.2139903, 17.3640783 ], [ 73.2145253, 17.3642114 ], [ 73.2149234, 17.3646017 ], [ 73.2159684, 17.3674437 ], [ 73.215857, 17.3675306 ], [ 73.2160048, 17.3678717 ], [ 73.2164998, 17.3679634 ], [ 73.2166629, 17.3688655 ], [ 73.2168382, 17.3692738 ], [ 73.2168154, 17.369491 ], [ 73.2163928, 17.3703706 ], [ 73.2161801, 17.3708132 ], [ 73.2157174, 17.3709906 ], [ 73.2143439, 17.3708679 ], [ 73.2136826, 17.3706815 ], [ 73.2128024, 17.3706235 ], [ 73.2118587, 17.3710275 ], [ 73.210792, 17.3706687 ], [ 73.2099673, 17.3708626 ], [ 73.2090504, 17.3714093 ], [ 73.2089567, 17.3715011 ], [ 73.2087916, 17.372276 ], [ 73.2090162, 17.3724343 ], [ 73.2091377, 17.3726969 ], [ 73.2098965, 17.3731462 ], [ 73.20989, 17.3733766 ], [ 73.2099692, 17.373566 ], [ 73.2101674, 17.3740526 ], [ 73.2099751, 17.374262 ], [ 73.2098257, 17.3743142 ], [ 73.2096548, 17.374431 ], [ 73.2098656, 17.3745994 ], [ 73.2099842, 17.3761456 ], [ 73.2097085, 17.3769156 ], [ 73.2094378, 17.3771707 ], [ 73.2088865, 17.3787109 ], [ 73.2087268, 17.3793053 ], [ 73.2083352, 17.3802511 ], [ 73.2075131, 17.3820462 ], [ 73.2072424, 17.3823013 ], [ 73.206555, 17.3840978 ], [ 73.2054785, 17.3844739 ], [ 73.2041389, 17.3843335 ], [ 73.204144, 17.3838186 ], [ 73.2036076, 17.3838137 ], [ 73.2036027, 17.3843287 ], [ 73.2033356, 17.384197 ], [ 73.2025312, 17.3841898 ], [ 73.2011865, 17.3845644 ], [ 73.2013152, 17.3850806 ], [ 73.2007661, 17.3863633 ], [ 73.2000888, 17.3871297 ], [ 73.1984783, 17.3872435 ], [ 73.197412, 17.3865905 ], [ 73.1975558, 17.3855618 ], [ 73.1974246, 17.385303 ], [ 73.1968882, 17.3852983 ], [ 73.1968807, 17.3860707 ], [ 73.1963456, 17.3859366 ], [ 73.1952691, 17.3863136 ], [ 73.1951296, 17.3868273 ], [ 73.1947227, 17.3873387 ], [ 73.1943275, 17.3879976 ], [ 73.1934995, 17.3884135 ], [ 73.1927587, 17.3885868 ], [ 73.1916751, 17.3885251 ], [ 73.1906215, 17.3880908 ], [ 73.1900319, 17.3872658 ], [ 73.1900647, 17.3870311 ], [ 73.1903101, 17.3860112 ], [ 73.1905808, 17.3857563 ], [ 73.1904624, 17.38421 ], [ 73.1888495, 17.3845812 ], [ 73.1883082, 17.3850913 ], [ 73.1877705, 17.3852157 ], [ 73.1880336, 17.385733 ], [ 73.1874974, 17.3857283 ], [ 73.1872392, 17.3846958 ], [ 73.1858971, 17.384812 ], [ 73.1853659, 17.3842921 ], [ 73.1837544, 17.3845349 ], [ 73.1829423, 17.3853 ], [ 73.1818658, 17.3856771 ], [ 73.18159, 17.386447 ], [ 73.1799797, 17.3865606 ], [ 73.1797091, 17.3868156 ], [ 73.1775611, 17.3870535 ], [ 73.1764821, 17.387688 ], [ 73.1766106, 17.3882042 ], [ 73.1761986, 17.3892304 ], [ 73.1756609, 17.3893539 ], [ 73.1751207, 17.3897356 ], [ 73.1747053, 17.3910193 ], [ 73.1744345, 17.3912743 ], [ 73.1744141, 17.3933342 ], [ 73.1735993, 17.3943569 ], [ 73.1737212, 17.3956455 ], [ 73.1726458, 17.3958931 ], [ 73.1720941, 17.3974332 ], [ 73.1715566, 17.3975565 ], [ 73.1710162, 17.3979382 ], [ 73.1711474, 17.398197 ], [ 73.1711423, 17.398712 ], [ 73.1706008, 17.3992221 ], [ 73.170054, 17.4002471 ], [ 73.1692419, 17.4010121 ], [ 73.1689635, 17.4020395 ], [ 73.1681485, 17.4030622 ], [ 73.1678675, 17.404347 ], [ 73.1678495, 17.4061495 ], [ 73.1682485, 17.4065391 ], [ 73.1690694, 17.4075937 ], [ 73.1697003, 17.4077232 ], [ 73.1707544, 17.4070618 ], [ 73.1711696, 17.4071048 ], [ 73.1718131, 17.4069168 ], [ 73.1720198, 17.406636 ], [ 73.1724946, 17.4066984 ], [ 73.1731566, 17.4067501 ], [ 73.1735117, 17.406489 ], [ 73.1742659, 17.4068494 ], [ 73.1746789, 17.4072421 ], [ 73.1748126, 17.4076469 ], [ 73.1750566, 17.4078394 ], [ 73.1753393, 17.4078215 ], [ 73.1752181, 17.4071944 ], [ 73.1750733, 17.4067143 ], [ 73.1757605, 17.4063503 ], [ 73.1771015, 17.4063625 ], [ 73.1776329, 17.4068825 ], [ 73.178168, 17.4070165 ], [ 73.1785596, 17.4080501 ], [ 73.1785494, 17.4090802 ], [ 73.1788098, 17.4098551 ], [ 73.1794745, 17.4105045 ], [ 73.1800109, 17.4105094 ], [ 73.1802818, 17.4102542 ], [ 73.1810875, 17.4101333 ], [ 73.1814793, 17.4111669 ], [ 73.1821464, 17.4115589 ], [ 73.1834874, 17.411571 ], [ 73.1837569, 17.4114451 ], [ 73.1837492, 17.4122176 ], [ 73.1842857, 17.4122225 ], [ 73.1846773, 17.4132561 ], [ 73.1848106, 17.4133856 ], [ 73.1864173, 17.4136578 ], [ 73.1868128, 17.4143056 ], [ 73.1868051, 17.4150781 ], [ 73.1863957, 17.4158469 ], [ 73.1853203, 17.4160945 ], [ 73.185850659383433, 17.417780908984376 ], [ 73.1859701, 17.4181607 ], [ 73.1862356, 17.4184206 ], [ 73.1864912, 17.4197105 ], [ 73.185937, 17.4215079 ], [ 73.1857905, 17.4227942 ], [ 73.1876707, 17.4225538 ], [ 73.1872629, 17.423065 ], [ 73.1872526, 17.4240951 ], [ 73.1869794, 17.4246075 ], [ 73.1869438, 17.4282123 ], [ 73.187163, 17.4292406 ], [ 73.1873288, 17.4300183 ], [ 73.1878652, 17.4300233 ], [ 73.1878601, 17.4305383 ], [ 73.1886635, 17.4306738 ], [ 73.1894632, 17.4311962 ], [ 73.1902629, 17.4317184 ], [ 73.191065, 17.4319832 ], [ 73.192944, 17.4318721 ], [ 73.193202, 17.4329044 ], [ 73.1937386, 17.4329093 ], [ 73.1938646, 17.4336829 ], [ 73.1941302, 17.4339429 ], [ 73.1942598, 17.4344591 ], [ 73.1947962, 17.4344638 ], [ 73.1949249, 17.4349802 ], [ 73.1950582, 17.4351096 ], [ 73.1955934, 17.4352436 ], [ 73.1957219, 17.4357598 ], [ 73.1966524, 17.4366691 ], [ 73.1971876, 17.4368033 ], [ 73.1971825, 17.4373181 ], [ 73.1966461, 17.4373134 ], [ 73.1967747, 17.4378295 ], [ 73.1959572, 17.4391096 ], [ 73.1959523, 17.4396247 ], [ 73.1954082, 17.4403922 ], [ 73.1949962, 17.4414185 ], [ 73.1944583, 17.4415419 ], [ 73.1941876, 17.441797 ], [ 73.1920391, 17.442035 ], [ 73.1912419, 17.4412552 ], [ 73.1904371, 17.441248 ], [ 73.1893693, 17.4407231 ], [ 73.1888327, 17.4407182 ], [ 73.1885619, 17.4409734 ], [ 73.1861438, 17.4413381 ], [ 73.186275, 17.4415967 ], [ 73.1859915, 17.4431393 ], [ 73.1862572, 17.4433992 ], [ 73.186505, 17.4454615 ], [ 73.1862317, 17.4459739 ], [ 73.1862215, 17.447004 ], [ 73.1859431, 17.4480314 ], [ 73.1862088, 17.4482914 ], [ 73.1862011, 17.4490639 ], [ 73.1864643, 17.4495812 ], [ 73.1864439, 17.4516411 ], [ 73.1863076, 17.4518974 ], [ 73.1857699, 17.4520208 ], [ 73.1852283, 17.4525309 ], [ 73.1846904, 17.4526553 ], [ 73.1848113, 17.4539439 ], [ 73.184538, 17.4544564 ], [ 73.1847936, 17.4557462 ], [ 73.1851925, 17.4561357 ], [ 73.1857278, 17.4562697 ], [ 73.1858539, 17.4570435 ], [ 73.1859871, 17.4571729 ], [ 73.1865224, 17.4573071 ], [ 73.1865174, 17.457822 ], [ 73.1870527, 17.4579552 ], [ 73.187714, 17.458863 ], [ 73.188113, 17.4592525 ], [ 73.189181, 17.4597772 ], [ 73.1895766, 17.460425 ], [ 73.1901081, 17.4609448 ], [ 73.1902375, 17.461461 ], [ 73.1910412, 17.4615967 ], [ 73.1914367, 17.4622446 ], [ 73.1919682, 17.4627643 ], [ 73.1927453, 17.4663341 ], [ 73.1927415, 17.466952 ], [ 73.1922217, 17.4690154 ], [ 73.1910895, 17.4702241 ], [ 73.1910795, 17.471254 ], [ 73.1899833, 17.4735617 ], [ 73.1897125, 17.4738166 ], [ 73.1894341, 17.4748442 ], [ 73.1888898, 17.4756118 ], [ 73.1888796, 17.4766416 ], [ 73.1883645, 17.4787163 ], [ 73.1874846, 17.4820366 ], [ 73.1874193, 17.4825482 ], [ 73.1869628, 17.4836488 ], [ 73.1865824, 17.4843022 ], [ 73.1863641, 17.485106 ], [ 73.1860353, 17.4857138 ], [ 73.1855991, 17.4867382 ], [ 73.184802, 17.4881759 ], [ 73.1845096, 17.4889014 ], [ 73.1844249, 17.4910355 ], [ 73.1841942, 17.4918372 ], [ 73.1838892, 17.4928191 ], [ 73.1837216, 17.4941902 ], [ 73.1831991, 17.4955854 ], [ 73.1827002, 17.4966941 ], [ 73.1822421, 17.4980479 ], [ 73.1819047, 17.4986981 ], [ 73.181711, 17.4993218 ], [ 73.1815286, 17.4999357 ], [ 73.181217, 17.5006105 ], [ 73.1808345, 17.5018435 ], [ 73.1802943, 17.5031691 ], [ 73.1791361, 17.5060852 ], [ 73.178973, 17.5066551 ], [ 73.1788373, 17.507112 ], [ 73.1787059, 17.5076527 ], [ 73.1786216, 17.5079203 ], [ 73.1784688, 17.5083168 ], [ 73.1782273, 17.5089903 ], [ 73.1778969, 17.5098209 ], [ 73.1776153, 17.5105381 ], [ 73.1772167, 17.5116354 ], [ 73.1768728, 17.5123031 ], [ 73.1766186, 17.5129707 ], [ 73.1764657, 17.5136204 ], [ 73.1763809, 17.5140158 ], [ 73.1764882, 17.5142307 ], [ 73.1767028, 17.5145888 ], [ 73.1768959, 17.5148343 ], [ 73.1770461, 17.5149059 ], [ 73.1771421, 17.5147939 ], [ 73.1771641, 17.5145785 ], [ 73.1771314, 17.514354 ], [ 73.1770778, 17.5141903 ], [ 73.17711, 17.5138117 ], [ 73.1772071, 17.5136475 ], [ 73.1774431, 17.5132178 ], [ 73.177744, 17.5125113 ], [ 73.1782043, 17.5114584 ], [ 73.1792772, 17.509494 ], [ 73.1798351, 17.5081024 ], [ 73.1800379, 17.5068838 ], [ 73.1804026, 17.5054923 ], [ 73.180982, 17.5038552 ], [ 73.1814111, 17.5032617 ], [ 73.1818618, 17.503057 ], [ 73.1821407, 17.5032208 ], [ 73.1825055, 17.503364 ], [ 73.1834496, 17.503364 ], [ 73.1842006, 17.5043463 ], [ 73.1842865, 17.5049193 ], [ 73.1842436, 17.5057583 ], [ 73.1839646, 17.5066587 ], [ 73.18375, 17.5069657 ], [ 73.183514, 17.5072931 ], [ 73.1832994, 17.5078047 ], [ 73.1832565, 17.5081321 ], [ 73.1833853, 17.5084186 ], [ 73.183278, 17.5089711 ], [ 73.1830426, 17.509157 ], [ 73.182763, 17.5082549 ], [ 73.182763, 17.5079479 ], [ 73.1828703, 17.5075182 ], [ 73.1830205, 17.5070271 ], [ 73.1831278, 17.506495 ], [ 73.1834067, 17.5059425 ], [ 73.1836427, 17.5055946 ], [ 73.1836331, 17.5049305 ], [ 73.1833756, 17.5044599 ], [ 73.1831063, 17.5041826 ], [ 73.1825484, 17.5040189 ], [ 73.1821193, 17.5040393 ], [ 73.1818618, 17.504244 ], [ 73.1817759, 17.50451 ], [ 73.1816686, 17.5049397 ], [ 73.1815828, 17.505349 ], [ 73.1815399, 17.5057788 ], [ 73.1815828, 17.5063518 ], [ 73.1815614, 17.507068 ], [ 73.1815184, 17.5075796 ], [ 73.1812395, 17.5080298 ], [ 73.1810893, 17.5082549 ], [ 73.1805958, 17.5086232 ], [ 73.1804026, 17.5087869 ], [ 73.1802095, 17.5091757 ], [ 73.1801022, 17.5097078 ], [ 73.1798254, 17.5098306 ], [ 73.1796108, 17.5102603 ], [ 73.1795679, 17.5105673 ], [ 73.1796538, 17.510997 ], [ 73.1797181, 17.5113449 ], [ 73.1793963, 17.5111198 ], [ 73.17901, 17.5112835 ], [ 73.1788813, 17.5114472 ], [ 73.1784092, 17.5118974 ], [ 73.1781517, 17.5125931 ], [ 73.1777655, 17.5133298 ], [ 73.1775509, 17.5139437 ], [ 73.1774436, 17.514619 ], [ 73.1773363, 17.5150896 ], [ 73.1768643, 17.5152942 ], [ 73.1765639, 17.5151715 ], [ 73.176242, 17.5152533 ], [ 73.1760918, 17.5153556 ], [ 73.1759416, 17.5154989 ], [ 73.1753365, 17.5159736 ], [ 73.1750736, 17.5166335 ], [ 73.1746885, 17.5173497 ], [ 73.1743451, 17.5180649 ], [ 73.1736639, 17.5186747 ], [ 73.1731102, 17.5190348 ], [ 73.1725513, 17.5189806 ], [ 73.1717874, 17.5185253 ], [ 73.1705042, 17.5189069 ], [ 73.1696116, 17.5200661 ], [ 73.1688501, 17.5207491 ], [ 73.1688091, 17.5212785 ], [ 73.1680217, 17.5230591 ], [ 73.1681512, 17.5235752 ], [ 73.1677812, 17.523915 ], [ 73.1673409, 17.5240829 ], [ 73.1667931, 17.5249391 ], [ 73.1657074, 17.5263853 ], [ 73.165334, 17.5268216 ], [ 73.1642386, 17.5273976 ], [ 73.1637783, 17.5278754 ], [ 73.1631635, 17.5283828 ], [ 73.1624082, 17.5296074 ], [ 73.1622216, 17.5303829 ], [ 73.1615092, 17.5304893 ], [ 73.1609577, 17.5307266 ], [ 73.1605543, 17.5308893 ], [ 73.1602936, 17.5305486 ], [ 73.1597696, 17.5296777 ], [ 73.1585737, 17.5289936 ], [ 73.158171, 17.5285036 ], [ 73.1569537, 17.5285792 ], [ 73.155928, 17.5286734 ], [ 73.1553723, 17.5288463 ], [ 73.1552124, 17.5291203 ], [ 73.1549238, 17.5295542 ], [ 73.1546459, 17.5301067 ], [ 73.1544002, 17.5305435 ], [ 73.1543812, 17.5316877 ], [ 73.1539679, 17.5323441 ], [ 73.1539626, 17.5332288 ], [ 73.1534205, 17.5337387 ], [ 73.1531391, 17.5350237 ], [ 73.1531313, 17.5357962 ], [ 73.1523132, 17.5370761 ], [ 73.152037, 17.5378459 ], [ 73.151495, 17.5383558 ], [ 73.1513561, 17.5388695 ], [ 73.1486683, 17.5392303 ], [ 73.1481276, 17.5396119 ], [ 73.1478513, 17.5403819 ], [ 73.1470435, 17.5406317 ], [ 73.1469036, 17.5411454 ], [ 73.1466326, 17.5414004 ], [ 73.1464937, 17.5419141 ], [ 73.1454188, 17.5420324 ], [ 73.1448781, 17.542414 ], [ 73.1446018, 17.543184 ], [ 73.144065, 17.5431789 ], [ 73.1437887, 17.5439489 ], [ 73.1429809, 17.5441987 ], [ 73.1427021, 17.5452261 ], [ 73.1421654, 17.5452212 ], [ 73.142278, 17.5472823 ], [ 73.142007, 17.5475372 ], [ 73.1420017, 17.5480521 ], [ 73.1415891, 17.5490783 ], [ 73.1407813, 17.5493282 ], [ 73.140776, 17.5498432 ], [ 73.1402393, 17.5498381 ], [ 73.1400992, 17.5503518 ], [ 73.1395572, 17.5508617 ], [ 73.1395494, 17.5516342 ], [ 73.1392758, 17.5521466 ], [ 73.1392652, 17.5531764 ], [ 73.1395283, 17.5536939 ], [ 73.1395256, 17.5539513 ], [ 73.1391183, 17.5544626 ], [ 73.1385816, 17.5544575 ], [ 73.1383052, 17.5552274 ], [ 73.1374973, 17.5554773 ], [ 73.1377526, 17.5567672 ], [ 73.1382894, 17.5567723 ], [ 73.1377447, 17.5575397 ], [ 73.1382801, 17.5576729 ], [ 73.1384126, 17.5578035 ], [ 73.1383943, 17.5596058 ], [ 73.13866, 17.5598657 ], [ 73.1389151, 17.5611556 ], [ 73.1391811, 17.5614157 ], [ 73.1394415, 17.5621906 ], [ 73.1399732, 17.5627107 ], [ 73.1402336, 17.5634856 ], [ 73.1403472, 17.5655467 ], [ 73.1416895, 17.5655593 ], [ 73.1414158, 17.5660717 ], [ 73.1400709, 17.5663166 ], [ 73.1401994, 17.5668328 ], [ 73.1404653, 17.5670929 ], [ 73.1405946, 17.567609 ], [ 73.1419356, 17.5677498 ], [ 73.1424697, 17.5680124 ], [ 73.1430079, 17.5678891 ], [ 73.1430026, 17.5684041 ], [ 73.1435394, 17.5684093 ], [ 73.1439286, 17.5697003 ], [ 73.1443277, 17.5700898 ], [ 73.1454014, 17.5700999 ], [ 73.1470068, 17.57063 ], [ 73.1475385, 17.5711499 ], [ 73.1483385, 17.5716725 ], [ 73.1496755, 17.5722 ], [ 73.1502071, 17.57272 ], [ 73.1526203, 17.5730001 ], [ 73.153698, 17.5726243 ], [ 73.1538371, 17.5721106 ], [ 73.1541081, 17.5718557 ], [ 73.1541132, 17.5713406 ], [ 73.1552628, 17.5698307 ], [ 73.1557338, 17.5690574 ], [ 73.1557413, 17.5687434 ], [ 73.1557065, 17.5684529 ], [ 73.1553905, 17.5682427 ], [ 73.15528, 17.567875 ], [ 73.155412, 17.5673299 ], [ 73.1559044, 17.567069 ], [ 73.1562928, 17.5667566 ], [ 73.1563556, 17.565995 ], [ 73.1565176, 17.5660564 ], [ 73.156509, 17.5665893 ], [ 73.1564199, 17.5670281 ], [ 73.1561549, 17.5673365 ], [ 73.1560181, 17.5674874 ], [ 73.1557006, 17.5676485 ], [ 73.1555584, 17.5678004 ], [ 73.1557462, 17.5679047 ], [ 73.1565127, 17.5676889 ], [ 73.1573668, 17.5675641 ], [ 73.1584488, 17.5675892 ], [ 73.1598258, 17.5680898 ], [ 73.1604459, 17.568455 ], [ 73.1607115, 17.5687107 ], [ 73.1612307, 17.5689096 ], [ 73.1615192, 17.5690921 ], [ 73.1616363, 17.5692579 ], [ 73.1619356, 17.5693945 ], [ 73.1622655, 17.569776 ], [ 73.1626394, 17.5704418 ], [ 73.1622779, 17.5707502 ], [ 73.1618707, 17.5714427 ], [ 73.1619303, 17.5721413 ], [ 73.1621508, 17.5729606 ], [ 73.1622699, 17.5745066 ], [ 73.1626233, 17.5749801 ], [ 73.1631984, 17.5755453 ], [ 73.1633281, 17.5760615 ], [ 73.1643991, 17.5763289 ], [ 73.1641385, 17.575554 ], [ 73.1652098, 17.5758215 ], [ 73.1652045, 17.5763365 ], [ 73.1668165, 17.5762221 ], [ 73.1678877, 17.5764896 ], [ 73.1692613, 17.5830067 ], [ 73.1685301, 17.583359 ], [ 73.1677722, 17.584368 ], [ 73.1670249, 17.5853687 ], [ 73.1650411, 17.5889636 ], [ 73.1636802, 17.5892091 ], [ 73.1630246, 17.5894372 ], [ 73.1624399, 17.5901965 ], [ 73.1620204, 17.590399 ], [ 73.1618096, 17.5909743 ], [ 73.1615054, 17.5907692 ], [ 73.1613585, 17.5912423 ], [ 73.1607877, 17.5917372 ], [ 73.1603693, 17.5917516 ], [ 73.1600324, 17.591838 ], [ 73.159629, 17.592245 ], [ 73.1590045, 17.5922138 ], [ 73.1579183, 17.591975 ], [ 73.1566345, 17.592066 ], [ 73.1557891, 17.5922593 ], [ 73.1546089, 17.5928827 ], [ 73.1544748, 17.5932018 ], [ 73.1546272, 17.5937019 ], [ 73.1545312, 17.5940189 ], [ 73.1541556, 17.5942577 ], [ 73.1534598, 17.5944557 ], [ 73.1530205, 17.5942945 ], [ 73.152556, 17.5943978 ], [ 73.1522464, 17.5947053 ], [ 73.1521366, 17.5953545 ], [ 73.1523945, 17.5959208 ], [ 73.1527963, 17.5966431 ], [ 73.1530425, 17.5975011 ], [ 73.1530407, 17.597836 ], [ 73.1529735, 17.5982153 ], [ 73.1528598, 17.5985097 ], [ 73.1526302, 17.5986904 ], [ 73.1521882, 17.5988744 ], [ 73.151725, 17.5990213 ], [ 73.1512847, 17.5989422 ], [ 73.1502804, 17.5981424 ], [ 73.1495133, 17.5981342 ], [ 73.1485927, 17.5983919 ], [ 73.1479474, 17.5986363 ], [ 73.1475225, 17.5990229 ], [ 73.1472237, 17.5993675 ], [ 73.1471819, 17.5999719 ], [ 73.1460929, 17.6003856 ], [ 73.1452915, 17.6008253 ], [ 73.1447921, 17.6010651 ], [ 73.1445136, 17.6013423 ], [ 73.1442551, 17.6019748 ], [ 73.144335, 17.6024196 ], [ 73.1444434, 17.6028885 ], [ 73.1440448, 17.6029801 ], [ 73.1434611, 17.6035502 ], [ 73.1433308, 17.6041448 ], [ 73.1429387, 17.6042993 ], [ 73.1421388, 17.6052974 ], [ 73.142222, 17.6056461 ], [ 73.1417193, 17.6061426 ], [ 73.141266, 17.6062642 ], [ 73.1408798, 17.6068656 ], [ 73.1401352, 17.6080467 ], [ 73.1392951, 17.6094758 ], [ 73.1382877, 17.6108778 ], [ 73.1375909, 17.6121443 ], [ 73.1370153, 17.6134276 ], [ 73.1365223, 17.6141306 ], [ 73.136209, 17.6145468 ], [ 73.1360878, 17.6153935 ], [ 73.1361972, 17.6162734 ], [ 73.1355792, 17.6171999 ], [ 73.1354081, 17.6183324 ], [ 73.1351259, 17.6200948 ], [ 73.1346951, 17.6215079 ], [ 73.1344387, 17.6224911 ], [ 73.1344591, 17.6234344 ], [ 73.1342445, 17.6247432 ], [ 73.1337027, 17.6254963 ], [ 73.1339425, 17.6259661 ], [ 73.1338025, 17.6271717 ], [ 73.133567, 17.6272939 ], [ 73.1334356, 17.6277632 ], [ 73.1337049, 17.6279805 ], [ 73.1329646, 17.6291584 ], [ 73.1322227, 17.6303036 ], [ 73.1317485, 17.6308194 ], [ 73.1317753, 17.6318884 ], [ 73.1317147, 17.6329181 ], [ 73.1318772, 17.6331655 ], [ 73.1316229, 17.6335413 ], [ 73.131366, 17.6336364 ], [ 73.1304862, 17.6349901 ], [ 73.1298114, 17.635507 ], [ 73.1291478, 17.6360202 ], [ 73.1286189, 17.6362999 ], [ 73.128665, 17.6365581 ], [ 73.1279617, 17.6364425 ], [ 73.1276742, 17.6368157 ], [ 73.1274682, 17.6379629 ], [ 73.1272247, 17.6383013 ], [ 73.1274237, 17.6385569 ], [ 73.1278925, 17.6386275 ], [ 73.1280748, 17.639167 ], [ 73.128231, 17.639219 ], [ 73.1285674, 17.6406252 ], [ 73.1291532, 17.6414101 ], [ 73.1298076, 17.6420419 ], [ 73.1304258, 17.6427029 ], [ 73.1309577, 17.6432228 ], [ 73.1318059, 17.6438097 ], [ 73.1321272, 17.6440111 ], [ 73.1325623, 17.6440336 ], [ 73.1327355, 17.6442284 ], [ 73.1326368, 17.6445289 ], [ 73.1328106, 17.6445601 ], [ 73.1333278, 17.6442503 ], [ 73.1338218, 17.6443004 ], [ 73.1344666, 17.6444451 ], [ 73.134686, 17.6447631 ], [ 73.1349269, 17.6452952 ], [ 73.1344918, 17.646219 ], [ 73.134459764747859, 17.64633063046875 ], [ 73.1337184, 17.648914 ], [ 73.13236, 17.6528599 ], [ 73.1315037, 17.6553304 ], [ 73.1312909, 17.6563962 ], [ 73.1306665, 17.6575565 ], [ 73.1302298, 17.658151 ], [ 73.1297234, 17.658541 ], [ 73.1283281, 17.6587 ], [ 73.1276238, 17.6587516 ], [ 73.1268958, 17.6590609 ], [ 73.1266432, 17.6595864 ], [ 73.1267338, 17.6608868 ], [ 73.1264828, 17.6620236 ], [ 73.126073, 17.6624304 ], [ 73.1256373, 17.6624054 ], [ 73.1252442, 17.6632534 ], [ 73.1253155, 17.6638044 ], [ 73.1251299, 17.6643417 ], [ 73.1249206, 17.6646621 ], [ 73.1242045, 17.6646866 ], [ 73.1232883, 17.6651907 ], [ 73.122718, 17.6652489 ], [ 73.122247, 17.6651222 ], [ 73.1218517, 17.6654641 ], [ 73.1216991, 17.6658819 ], [ 73.1218506, 17.6660862 ], [ 73.121636, 17.6666592 ], [ 73.1215985, 17.667111 ], [ 73.1211897, 17.6675358 ], [ 73.1212294, 17.6678783 ], [ 73.1210336, 17.668164 ], [ 73.1213168, 17.6684972 ], [ 73.1216006, 17.6691127 ], [ 73.1214107, 17.6698482 ], [ 73.1212326, 17.6704411 ], [ 73.1208115, 17.6710294 ], [ 73.1200648, 17.6714792 ], [ 73.1194457, 17.6716857 ], [ 73.1189071, 17.6720798 ], [ 73.1185504, 17.6726773 ], [ 73.1183836, 17.6736331 ], [ 73.1178847, 17.6756934 ], [ 73.1181276, 17.6760603 ], [ 73.117882, 17.6762756 ], [ 73.1181298, 17.6767463 ], [ 73.1184034, 17.6768598 ], [ 73.1181373, 17.6770121 ], [ 73.1179448, 17.6771623 ], [ 73.1177506, 17.6787509 ], [ 73.1170521, 17.6787509 ], [ 73.1165532, 17.678962 ], [ 73.1161257, 17.679215 ], [ 73.1159229, 17.6797368 ], [ 73.115372, 17.6827287 ], [ 73.114806, 17.6842079 ], [ 73.1145255, 17.6851892 ], [ 73.1147111, 17.6859323 ], [ 73.1148216, 17.686425 ], [ 73.115114, 17.6868543 ], [ 73.1148484, 17.6872622 ], [ 73.1145124, 17.6878705 ], [ 73.1144429, 17.6887857 ], [ 73.113856, 17.68894 ], [ 73.1142144, 17.6907 ], [ 73.1143624, 17.691017 ], [ 73.1143778, 17.6915615 ], [ 73.1145255, 17.6917934 ], [ 73.1145952, 17.6921204 ], [ 73.1143898, 17.6923295 ], [ 73.1144001, 17.692635 ], [ 73.1147073, 17.6927327 ], [ 73.1146719, 17.6933966 ], [ 73.1142991, 17.6934722 ], [ 73.1141923, 17.6941749 ], [ 73.1144536, 17.6950943 ], [ 73.115947, 17.6966623 ], [ 73.11697, 17.6977232 ], [ 73.1172983, 17.6982619 ], [ 73.1190144, 17.6991726 ], [ 73.1196034, 17.6991797 ], [ 73.1208861, 17.6990187 ], [ 73.12168, 17.6999688 ], [ 73.1225726, 17.7001517 ], [ 73.1242678, 17.6998374 ], [ 73.1245634, 17.6998696 ], [ 73.1249345, 17.7007139 ], [ 73.1249, 17.700740573803223 ], [ 73.1245188, 17.7010353 ], [ 73.1249748, 17.7017998 ], [ 73.1269066, 17.7021755 ], [ 73.127465, 17.7026528 ], [ 73.1273963, 17.7033033 ], [ 73.1276774, 17.7039631 ], [ 73.1290341, 17.7055271 ], [ 73.1300627, 17.7061273 ], [ 73.1314921, 17.7062995 ], [ 73.1322117, 17.7057501 ], [ 73.1324533, 17.7057617 ], [ 73.1327747, 17.7057772 ], [ 73.1332646, 17.7059449 ], [ 73.1337105, 17.7064165 ], [ 73.1346259, 17.7082072 ], [ 73.1347214, 17.7084126 ], [ 73.1348663, 17.7093621 ], [ 73.1349556, 17.7112401 ], [ 73.1348427, 17.7124502 ], [ 73.1344613, 17.7136648 ], [ 73.1348855, 17.7151255 ], [ 73.1345875, 17.715966 ], [ 73.1332559, 17.7197213 ], [ 73.1317833, 17.725156 ], [ 73.13066, 17.7286071 ], [ 73.1304438, 17.7302918 ], [ 73.1301638, 17.7306045 ], [ 73.1296724, 17.7304982 ], [ 73.1291537, 17.7306729 ], [ 73.1289863, 17.7315651 ], [ 73.1291011, 17.731889 ], [ 73.1286242, 17.7324623 ], [ 73.1282226, 17.7339669 ], [ 73.1284612, 17.7348122 ], [ 73.1280964, 17.7356052 ], [ 73.1281189, 17.7364513 ], [ 73.1285003, 17.7372821 ], [ 73.1271442, 17.7411264 ], [ 73.1268502, 17.7412516 ], [ 73.1254833, 17.7413376 ], [ 73.1249576, 17.7417862 ], [ 73.1249362, 17.7425418 ], [ 73.1249, 17.742637507657211 ], [ 73.1246293, 17.7433532 ], [ 73.123926, 17.7444067 ], [ 73.1222979, 17.7499409 ], [ 73.1209112, 17.7530666 ], [ 73.1202434, 17.7552553 ], [ 73.1191238, 17.7584013 ], [ 73.1180282, 17.7628351 ], [ 73.1173406, 17.7643733 ], [ 73.1168332, 17.7668642 ], [ 73.1154342, 17.7697014 ], [ 73.1143479, 17.7722975 ], [ 73.1131093, 17.7754188 ], [ 73.109359, 17.7837571 ], [ 73.1080171, 17.7863541 ], [ 73.107428, 17.7880367 ], [ 73.1058284, 17.7926062 ], [ 73.1040045, 17.7956096 ], [ 73.1030389, 17.7978161 ], [ 73.102381, 17.7996743 ], [ 73.0996306, 17.8052668 ], [ 73.0986994, 17.8066626 ], [ 73.0975573, 17.8073838 ], [ 73.0965654, 17.8078389 ], [ 73.0957361, 17.807844 ], [ 73.0956685, 17.8085156 ], [ 73.0961105, 17.809058 ], [ 73.0951758, 17.8100993 ], [ 73.0943735, 17.8107414 ], [ 73.0933189, 17.8112051 ], [ 73.0912938, 17.8115519 ], [ 73.0904977, 17.8116632 ], [ 73.0897113, 17.8117082 ], [ 73.089238, 17.8123588 ], [ 73.0894313, 17.8128103 ], [ 73.0897386, 17.8128241 ], [ 73.0898899, 17.8130034 ], [ 73.0900814, 17.8128287 ], [ 73.0902032, 17.8125882 ], [ 73.0905894, 17.8126086 ], [ 73.0908984, 17.8128875 ], [ 73.0910454, 17.8132639 ], [ 73.0910873, 17.8136459 ], [ 73.0909274, 17.8143073 ], [ 73.0906881, 17.8147919 ], [ 73.0902386, 17.8150759 ], [ 73.0899768, 17.8150218 ], [ 73.0897285, 17.8151224 ], [ 73.0896936, 17.8155504 ], [ 73.0900187, 17.8159896 ], [ 73.0909435, 17.8162378 ], [ 73.0916891, 17.8167909 ], [ 73.0922737, 17.8175383 ], [ 73.0928031, 17.8183159 ], [ 73.0935874, 17.8203834 ], [ 73.0941348, 17.822426 ], [ 73.0940908, 17.8257848 ], [ 73.0935189, 17.8272464 ], [ 73.0929369, 17.8271877 ], [ 73.0925174, 17.8280676 ], [ 73.0929589, 17.8289006 ], [ 73.0919944, 17.8299683 ], [ 73.0921338, 17.8306687 ], [ 73.0921022, 17.831077 ], [ 73.0916543, 17.8316934 ], [ 73.0917358, 17.8322414 ], [ 73.0914461, 17.8330513 ], [ 73.0912959, 17.8333735 ], [ 73.0907595, 17.8332234 ], [ 73.0900627, 17.8337208 ], [ 73.0897596, 17.8342411 ], [ 73.0891346, 17.8342748 ], [ 73.0890654, 17.8349157 ], [ 73.0884608, 17.8350087 ], [ 73.0887151, 17.8356026 ], [ 73.0891378, 17.8355025 ], [ 73.0895123, 17.8356521 ], [ 73.0894924, 17.8359564 ], [ 73.0893991, 17.8361949 ], [ 73.0882795, 17.8362036 ], [ 73.0879389, 17.8361316 ], [ 73.0878348, 17.8363833 ], [ 73.0882302, 17.8369267 ], [ 73.0883707, 17.8372173 ], [ 73.0880955, 17.8372887 ], [ 73.0877447, 17.8374593 ], [ 73.0873654, 17.8381778 ], [ 73.0877549, 17.8387742 ], [ 73.0882967, 17.8389764 ], [ 73.0887532, 17.8392976 ], [ 73.0884667, 17.8393354 ], [ 73.0882591, 17.8395775 ], [ 73.0882688, 17.8399441 ], [ 73.0892698, 17.8410916 ], [ 73.0906549, 17.8415108 ], [ 73.0920512, 17.8413009 ], [ 73.0921403, 17.8421986 ], [ 73.0912369, 17.8429125 ], [ 73.0908082, 17.8431825 ], [ 73.090436, 17.843417 ], [ 73.08906, 17.8439465 ], [ 73.0880124, 17.8452818 ], [ 73.0859296, 17.8495553 ], [ 73.0854326, 17.8500353 ], [ 73.084834, 17.8508395 ], [ 73.0847846, 17.8520343 ], [ 73.0840599, 17.8541069 ], [ 73.0835942, 17.855823 ], [ 73.0823631, 17.8588437 ], [ 73.0817414, 17.8594105 ], [ 73.0811706, 17.8602519 ], [ 73.080787, 17.8615856 ], [ 73.0805124, 17.8623494 ], [ 73.0804893, 17.8629953 ], [ 73.0799797, 17.8642008 ], [ 73.0794508, 17.8662625 ], [ 73.0780126, 17.8694438 ], [ 73.0769413, 17.8716515 ], [ 73.0763324, 17.8727415 ], [ 73.0756753, 17.8743957 ], [ 73.0749715, 17.8754127 ], [ 73.0745504, 17.8760514 ], [ 73.0740016, 17.876324 ], [ 73.0731814, 17.8765027 ], [ 73.0731116, 17.8770511 ], [ 73.0735563, 17.8776576 ], [ 73.0740981, 17.8777275 ], [ 73.0740332, 17.8792382 ], [ 73.07378, 17.8806126 ], [ 73.0730934, 17.8820589 ], [ 73.0714551, 17.8859797 ], [ 73.0701915, 17.8877656 ], [ 73.0693737, 17.8887873 ], [ 73.0690965, 17.8895571 ], [ 73.0705244, 17.8913084 ], [ 73.0702082, 17.8916993 ], [ 73.0700013, 17.8919552 ], [ 73.068531, 17.8910904 ], [ 73.0676603, 17.8908065 ], [ 73.0661953, 17.8908086 ], [ 73.0654561, 17.8904303 ], [ 73.0645457, 17.890852 ], [ 73.0640533, 17.8903027 ], [ 73.0632127, 17.8907095 ], [ 73.0629949, 17.8912292 ], [ 73.0630914, 17.8915565 ], [ 73.0624498, 17.891558 ], [ 73.0621178, 17.891924 ], [ 73.0615395, 17.8920568 ], [ 73.0612498, 17.8928399 ], [ 73.0607289, 17.8936168 ], [ 73.060398, 17.8937889 ], [ 73.0603416, 17.8943203 ], [ 73.0600536, 17.8943029 ], [ 73.0598143, 17.8943703 ], [ 73.0592221, 17.8943402 ], [ 73.0595606, 17.8950023 ], [ 73.0590075, 17.8952504 ], [ 73.0589211, 17.8957691 ], [ 73.0587505, 17.8958717 ], [ 73.0583332, 17.895767 ], [ 73.0580854, 17.8960799 ], [ 73.0585301, 17.8961591 ], [ 73.058455, 17.8964317 ], [ 73.0578812, 17.8965575 ], [ 73.0577377, 17.8967461 ], [ 73.0573483, 17.8969319 ], [ 73.0570667, 17.8973465 ], [ 73.0563087, 17.8976344 ], [ 73.0561917, 17.8978324 ], [ 73.0566348, 17.8977671 ], [ 73.0566343, 17.8980892 ], [ 73.0561569, 17.8986992 ], [ 73.055416, 17.8986482 ], [ 73.0551575, 17.8988621 ], [ 73.0552626, 17.8990714 ], [ 73.0551462, 17.8994879 ], [ 73.0542396, 17.8998606 ], [ 73.0541895, 17.9002229 ], [ 73.0545894, 17.9003608 ], [ 73.0539971, 17.9007524 ], [ 73.0539585, 17.9015701 ], [ 73.0542235, 17.9018356 ], [ 73.0543024, 17.9024318 ], [ 73.0541066, 17.9026758 ], [ 73.0521422, 17.9030349 ], [ 73.0517158, 17.9050905 ], [ 73.0518479, 17.9053492 ], [ 73.0502275, 17.9059763 ], [ 73.0499557, 17.9062311 ], [ 73.0494165, 17.9063549 ], [ 73.0494136, 17.9066123 ], [ 73.0518324, 17.9067648 ], [ 73.0522284, 17.9074129 ], [ 73.0523548, 17.9081866 ], [ 73.0528927, 17.9081919 ], [ 73.0532254, 17.9146323 ], [ 73.0530885, 17.9148884 ], [ 73.0536264, 17.9148939 ], [ 73.0535983, 17.9174684 ], [ 73.0530604, 17.917463 ], [ 73.053183, 17.9184941 ], [ 73.0529058, 17.9192637 ], [ 73.0528944, 17.9202936 ], [ 73.0523369, 17.9220904 ], [ 73.052054, 17.9233751 ], [ 73.051219, 17.9259415 ], [ 73.0512104, 17.9267138 ], [ 73.0509358, 17.9272259 ], [ 73.0509275, 17.9279984 ], [ 73.0513242, 17.9286457 ], [ 73.0521297, 17.9287829 ], [ 73.0521212, 17.9295552 ], [ 73.0523917, 17.9294287 ], [ 73.0534688, 17.9293112 ], [ 73.0536085, 17.9287977 ], [ 73.0542883, 17.9281604 ], [ 73.0551008, 17.9276535 ], [ 73.0556402, 17.9275306 ], [ 73.0556457, 17.9270158 ], [ 73.0575299, 17.9269054 ], [ 73.0580176, 17.9278447 ], [ 73.0584875, 17.9281106 ], [ 73.0590974, 17.9280703 ], [ 73.0591538, 17.9280453 ], [ 73.0597454, 17.9277829 ], [ 73.0598179, 17.9272976 ], [ 73.0600392, 17.9271203 ], [ 73.0608164, 17.926498 ], [ 73.0611383, 17.92618 ], [ 73.0616184, 17.9259335 ], [ 73.0621344, 17.9260473 ], [ 73.0632476, 17.9267052 ], [ 73.0653048, 17.9265741 ], [ 73.0665982, 17.9271559 ], [ 73.0679285, 17.9273351 ], [ 73.0685379, 17.927332 ], [ 73.0692257, 17.9271799 ], [ 73.0697433, 17.9271386 ], [ 73.0708774, 17.9270748 ], [ 73.0715592, 17.9274014 ], [ 73.0722201, 17.9278138 ], [ 73.0732543, 17.9284692 ], [ 73.0738562, 17.9288928 ], [ 73.0747419, 17.9298508 ], [ 73.0758078, 17.9305352 ], [ 73.0766109, 17.931087 ], [ 73.077246, 17.9313804 ], [ 73.0784959, 17.9320409 ], [ 73.0793894, 17.9326589 ], [ 73.0796527, 17.9331766 ], [ 73.0804512, 17.9339568 ], [ 73.0809781, 17.934992 ], [ 73.0811958, 17.9356324 ], [ 73.0817687, 17.9360744 ], [ 73.08253, 17.9368139 ], [ 73.0830372, 17.937338 ], [ 73.0839183, 17.9379278 ], [ 73.0852307, 17.9385382 ], [ 73.0862327, 17.9389516 ], [ 73.0874572, 17.9394354 ], [ 73.0883318, 17.9397919 ], [ 73.0890295, 17.9400603 ], [ 73.0901598, 17.940326 ], [ 73.0921363, 17.940289 ], [ 73.094155, 17.9393291 ], [ 73.0947388, 17.9387163 ], [ 73.0953592, 17.9373041 ], [ 73.0955883, 17.9363229 ], [ 73.0961753, 17.9351415 ], [ 73.0963465, 17.9347607 ], [ 73.0968956, 17.9339571 ], [ 73.0972338, 17.9332944 ], [ 73.0977772, 17.9326633 ], [ 73.0991704, 17.9315363 ], [ 73.0998417, 17.9311546 ], [ 73.1007835, 17.9306771 ], [ 73.1021838, 17.9301808 ], [ 73.1049205, 17.930092 ], [ 73.1045053, 17.9307912 ], [ 73.1033286, 17.9309004 ], [ 73.1018808, 17.9311247 ], [ 73.1003817, 17.931594 ], [ 73.099441, 17.9321376 ], [ 73.0981498, 17.9333668 ], [ 73.0974854, 17.9342403 ], [ 73.0971123, 17.9349516 ], [ 73.0965276, 17.9363765 ], [ 73.096225, 17.9374067 ], [ 73.0955953, 17.9390552 ], [ 73.0951181, 17.9398154 ], [ 73.0939605, 17.9403921 ], [ 73.0930042, 17.9406493 ], [ 73.0910497, 17.9413589 ], [ 73.0893682, 17.9414426 ], [ 73.088563, 17.9408764 ], [ 73.0870229, 17.9404671 ], [ 73.0855421, 17.9399169 ], [ 73.0846679, 17.9396656 ], [ 73.0837855, 17.9393405 ], [ 73.0831396, 17.9388816 ], [ 73.0822486, 17.9382478 ], [ 73.0819503, 17.9376746 ], [ 73.0810285, 17.9370576 ], [ 73.0796898, 17.9365248 ], [ 73.078836, 17.9357669 ], [ 73.0782808, 17.9353604 ], [ 73.0767951, 17.9345468 ], [ 73.0768351, 17.9351085 ], [ 73.077562, 17.9356709 ], [ 73.0781808, 17.9362022 ], [ 73.0776191, 17.9360869 ], [ 73.0763957, 17.9353144 ], [ 73.0758588, 17.9344606 ], [ 73.0745383, 17.9341868 ], [ 73.0736502, 17.9335552 ], [ 73.0733372, 17.9324466 ], [ 73.0714401, 17.9339959 ], [ 73.0695945, 17.9346625 ], [ 73.0685914, 17.9341342 ], [ 73.0674788, 17.9340516 ], [ 73.0658464, 17.9340194 ], [ 73.0654725, 17.9334774 ], [ 73.0646695, 17.9330604 ], [ 73.0632404, 17.9331421 ], [ 73.0626793, 17.9329859 ], [ 73.0622576, 17.9328961 ], [ 73.0617212, 17.9327537 ], [ 73.0613768, 17.932672 ], [ 73.0609852, 17.9324674 ], [ 73.0601929, 17.9323974 ], [ 73.0597229, 17.9324679 ], [ 73.0589505, 17.9325904 ], [ 73.0588147, 17.9329976 ], [ 73.0584408, 17.9330267 ], [ 73.0580954, 17.9329144 ], [ 73.0575219, 17.9325704 ], [ 73.0572172, 17.9322438 ], [ 73.0570711, 17.9319222 ], [ 73.0569468, 17.9315395 ], [ 73.0563927, 17.9311878 ], [ 73.0554362, 17.9317344 ], [ 73.0549845, 17.931664 ], [ 73.0549443, 17.9312113 ], [ 73.0523747, 17.9309734 ], [ 73.0507553, 17.9314722 ], [ 73.0504836, 17.931727 ], [ 73.0469844, 17.9319492 ], [ 73.0464408, 17.9324588 ], [ 73.0448187, 17.933215 ], [ 73.0442806, 17.9332095 ], [ 73.0437484, 17.9326892 ], [ 73.0429443, 17.9324236 ], [ 73.0415996, 17.93241 ], [ 73.0394393, 17.9331607 ], [ 73.038355, 17.9339222 ], [ 73.037541, 17.9345582 ], [ 73.0373891, 17.9361016 ], [ 73.0372522, 17.9363577 ], [ 73.0364426, 17.936607 ], [ 73.0362991, 17.9373779 ], [ 73.0357527, 17.9381448 ], [ 73.0357468, 17.9386597 ], [ 73.0358791, 17.9389186 ], [ 73.0353397, 17.9390413 ], [ 73.035068, 17.939296 ], [ 73.0345286, 17.9394198 ], [ 73.0345342, 17.938905 ], [ 73.0337274, 17.9388967 ], [ 73.0339907, 17.9394144 ], [ 73.0334528, 17.9394089 ], [ 73.0334469, 17.9399239 ], [ 73.0329105, 17.9397891 ], [ 73.0321022, 17.9399103 ], [ 73.0322248, 17.9409413 ], [ 73.032088, 17.9411974 ], [ 73.0312781, 17.9414467 ], [ 73.0309893, 17.9432461 ], [ 73.0304499, 17.943369 ], [ 73.0296359, 17.9440048 ], [ 73.0297671, 17.9442637 ], [ 73.0297442, 17.9463233 ], [ 73.0291948, 17.9473476 ], [ 73.0292641, 17.9532703 ], [ 73.0306077, 17.9534123 ], [ 73.0310007, 17.9543178 ], [ 73.0306975, 17.9574045 ], [ 73.0290464, 17.9607351 ], [ 73.0287489, 17.9633068 ], [ 73.0284772, 17.9635614 ], [ 73.0284514, 17.9658785 ], [ 73.028844, 17.9669124 ], [ 73.0298236, 17.9672675 ], [ 73.0299143, 17.9674381 ], [ 73.0301833, 17.967441 ], [ 73.0301861, 17.9671836 ], [ 73.029785, 17.966922 ], [ 73.0295218, 17.9664043 ], [ 73.0295444, 17.9643448 ], [ 73.0298421, 17.9617731 ], [ 73.0313791, 17.9566391 ], [ 73.0321846, 17.9567755 ], [ 73.0325834, 17.9571662 ], [ 73.032569, 17.9584535 ], [ 73.0317421, 17.9602475 ], [ 73.0317365, 17.9607623 ], [ 73.0311899, 17.9615293 ], [ 73.0310021, 17.9645675 ], [ 73.0304963, 17.9668624 ], [ 73.0305504, 17.967545 ], [ 73.0305695, 17.9680129 ], [ 73.0306294, 17.9684359 ], [ 73.0315511, 17.9694383 ], [ 73.0319892, 17.9698194 ], [ 73.032255, 17.9701538 ], [ 73.0327358, 17.9705016 ], [ 73.0333248, 17.9710195 ], [ 73.0340528, 17.9714808 ], [ 73.03505, 17.9722242 ], [ 73.0355773, 17.9727503 ], [ 73.0362275, 17.9731723 ], [ 73.0371164, 17.9737744 ], [ 73.038036, 17.9749874 ], [ 73.0387799, 17.9765461 ], [ 73.03929, 17.9774202 ], [ 73.0398429, 17.9778258 ], [ 73.0400246, 17.9779002 ], [ 73.0400454, 17.9781858 ], [ 73.0399416, 17.9782852 ], [ 73.0402074, 17.9784779 ], [ 73.0274786, 17.9903503 ], [ 73.0275485, 17.9897793 ], [ 73.0273485, 17.9895953 ], [ 73.0266553, 17.9894413 ], [ 73.0259538, 17.9891254 ], [ 73.0251983, 17.9891254 ], [ 73.0245922, 17.9892202 ], [ 73.0238575, 17.98954 ], [ 73.0232805, 17.9898045 ], [ 73.0230232, 17.9898598 ], [ 73.0227409, 17.9900493 ], [ 73.0226205, 17.9900256 ], [ 73.0223133, 17.9900809 ], [ 73.021782, 17.9900611 ], [ 73.0215371, 17.990148 ], [ 73.0206447, 17.9901914 ], [ 73.0198269, 17.9902269 ], [ 73.0195405, 17.9904125 ], [ 73.0193412, 17.9909889 ], [ 73.0187518, 17.9908981 ], [ 73.0182039, 17.991131 ], [ 73.0180088, 17.9914706 ], [ 73.0179382, 17.9917272 ], [ 73.0180088, 17.9920588 ], [ 73.018179, 17.9923352 ], [ 73.0185386, 17.9925274 ], [ 73.0189851, 17.9926826 ], [ 73.0190183, 17.9928445 ], [ 73.0191366, 17.9928543 ], [ 73.019155, 17.992814 ], [ 73.0193634, 17.9928475 ], [ 73.0193692, 17.9928838 ], [ 73.0195424, 17.9928838 ], [ 73.01956, 17.9929369 ], [ 73.0198506, 17.9929592 ], [ 73.0198682, 17.9928894 ], [ 73.0200296, 17.9928392 ], [ 73.020839, 17.9927778 ], [ 73.0212676, 17.9930793 ], [ 73.0215611, 17.9935092 ], [ 73.0211091, 17.9938107 ], [ 73.0203459, 17.9945923 ], [ 73.0197237, 17.9960607 ], [ 73.0191953, 17.9973672 ], [ 73.0182267, 17.999874 ], [ 73.0173462, 18.0024366 ], [ 73.0161604, 18.0051778 ], [ 73.0150039, 18.0076454 ], [ 73.0144286, 18.0083433 ], [ 73.0140353, 18.0091137 ], [ 73.0133602, 18.0096329 ], [ 73.0130725, 18.0099176 ], [ 73.0126499, 18.0103531 ], [ 73.0119396, 18.0106601 ], [ 73.0112468, 18.0110565 ], [ 73.0107537, 18.0113747 ], [ 73.0103722, 18.0114082 ], [ 73.0100963, 18.011157 ], [ 73.0095386, 18.0110565 ], [ 73.0092392, 18.0108276 ], [ 73.0089046, 18.0107997 ], [ 73.0085347, 18.0109169 ], [ 73.0080592, 18.0112854 ], [ 73.0078127, 18.011397 ], [ 73.0077364, 18.0116148 ], [ 73.0077775, 18.012 ], [ 73.0075368, 18.0125247 ], [ 73.0072198, 18.0129099 ], [ 73.0069497, 18.0129379 ], [ 73.0063568, 18.0136803 ], [ 73.0060633, 18.0143447 ], [ 73.0059929, 18.0152211 ], [ 73.0058226, 18.0159525 ], [ 73.0055526, 18.0168233 ], [ 73.0054704, 18.0171862 ], [ 73.0051064, 18.0175714 ], [ 73.0050536, 18.0178505 ], [ 73.0052619, 18.0184237 ], [ 73.0050888, 18.0192294 ], [ 73.004854, 18.0195364 ], [ 73.0040145, 18.0201784 ], [ 73.0036623, 18.0205747 ], [ 73.0032162, 18.0206808 ], [ 73.0025059, 18.0206473 ], [ 73.0023121, 18.0207925 ], [ 73.0023063, 18.0210939 ], [ 73.0027055, 18.0213116 ], [ 73.0030635, 18.0212 ], [ 73.0034451, 18.0211497 ], [ 73.0036975, 18.0212 ], [ 73.0038502, 18.0213842 ], [ 73.0044255, 18.0213284 ], [ 73.0048951, 18.0213563 ], [ 73.0051475, 18.0211832 ], [ 73.0055937, 18.0211442 ], [ 73.0059459, 18.0214177 ], [ 73.0062864, 18.0216242 ], [ 73.0066269, 18.0216912 ], [ 73.0072843, 18.021574 ], [ 73.0077364, 18.0216856 ], [ 73.007889, 18.0220094 ], [ 73.0081825, 18.022724 ], [ 73.0085582, 18.0231259 ], [ 73.0089515, 18.0235334 ], [ 73.0095973, 18.0236004 ], [ 73.0099788, 18.0237679 ], [ 73.0101667, 18.0241028 ], [ 73.0106833, 18.0242591 ], [ 73.0117341, 18.0243875 ], [ 73.0122507, 18.0245215 ], [ 73.0125325, 18.024527 ], [ 73.0127027, 18.024661 ], [ 73.0127555, 18.0249401 ], [ 73.0130901, 18.0250518 ], [ 73.0136067, 18.0247503 ], [ 73.013912, 18.024795 ], [ 73.0141996, 18.0249234 ], [ 73.014593, 18.0252807 ], [ 73.0149393, 18.0255765 ], [ 73.0154031, 18.025677 ], [ 73.0156555, 18.0255374 ], [ 73.015814, 18.025169 ], [ 73.0160958, 18.0252807 ], [ 73.0165008, 18.0254816 ], [ 73.0168002, 18.0255095 ], [ 73.0170233, 18.0253532 ], [ 73.0172464, 18.0253532 ], [ 73.0175458, 18.0253923 ], [ 73.0177043, 18.0255598 ], [ 73.0178275, 18.0258556 ], [ 73.0181173, 18.0260438 ], [ 73.0183027, 18.0260778 ], [ 73.0184621, 18.0259943 ], [ 73.0186866, 18.0257375 ], [ 73.0187615, 18.0257622 ], [ 73.0188461, 18.0256323 ], [ 73.018794, 18.0255828 ], [ 73.0192315, 18.0248392 ], [ 73.0198023, 18.0240393 ], [ 73.0206241, 18.0231232 ], [ 73.0213001, 18.0230803 ], [ 73.0222174, 18.0232068 ], [ 73.0230585, 18.023468 ], [ 73.0235939, 18.0236098 ], [ 73.0240316, 18.0237547 ], [ 73.0241786, 18.0238475 ], [ 73.0248964, 18.0248596 ], [ 73.0258791, 18.0258421 ], [ 73.0273082, 18.0261614 ], [ 73.0278253, 18.0270398 ], [ 73.0285581, 18.0274061 ], [ 73.0294872, 18.0280172 ], [ 73.0303477, 18.0289558 ], [ 73.0307865, 18.0295536 ], [ 73.0314849, 18.0302004 ], [ 73.032193, 18.0310778 ], [ 73.0328775, 18.0315879 ], [ 73.0335631, 18.0321194 ], [ 73.0339719, 18.0322837 ], [ 73.0343485, 18.0324051 ], [ 73.0349579, 18.0332232 ], [ 73.0357196, 18.033919 ], [ 73.036462, 18.0344444 ], [ 73.0374427, 18.0349147 ], [ 73.0391357, 18.0378528 ], [ 73.0399382, 18.0406888 ], [ 73.040539, 18.0426474 ], [ 73.0407267, 18.0430388 ], [ 73.0413973, 18.0442796 ], [ 73.0414547, 18.0449052 ], [ 73.041528, 18.0459711 ], [ 73.041569, 18.0465647 ], [ 73.0407107, 18.0486048 ], [ 73.0382216, 18.050237 ], [ 73.0371916, 18.0508898 ], [ 73.0365112, 18.0519578 ], [ 73.035843, 18.0517253 ], [ 73.0348656, 18.0514203 ], [ 73.0339333, 18.0509092 ], [ 73.0326243, 18.0500524 ], [ 73.029749, 18.0490731 ], [ 73.0272385, 18.0487466 ], [ 73.0257032, 18.0479928 ], [ 73.0245231, 18.0465473 ], [ 73.0237501, 18.0456286 ], [ 73.0229035, 18.0447098 ], [ 73.0220701, 18.0435713 ], [ 73.0211642, 18.0425398 ], [ 73.0204783, 18.0414952 ], [ 73.0199487, 18.0407174 ], [ 73.0192197, 18.0379921 ], [ 73.0190409, 18.0376184 ], [ 73.0183056, 18.0357472 ], [ 73.0181914, 18.0353335 ], [ 73.0179709, 18.0348648 ], [ 73.0178121, 18.0344261 ], [ 73.0177416, 18.0334855 ], [ 73.0174753, 18.0332253 ], [ 73.0182938, 18.0316073 ], [ 73.0181442, 18.0300269 ], [ 73.0176976, 18.0295858 ], [ 73.0165143, 18.0300773 ], [ 73.0159558, 18.0301666 ], [ 73.0147697, 18.0317315 ], [ 73.0146313, 18.0323142 ], [ 73.0143545, 18.0325821 ], [ 73.0135687, 18.0340859 ], [ 73.012773, 18.0362147 ], [ 73.0118686, 18.0391282 ], [ 73.0101142, 18.0439214 ], [ 73.0088094, 18.0473 ], [ 73.0077815, 18.0494333 ], [ 73.0061389, 18.0512595 ], [ 73.0048389, 18.0523361 ], [ 73.0033502, 18.0531335 ], [ 73.0018755, 18.0537847 ], [ 73.0014142, 18.0539376 ], [ 73.001236, 18.0539907 ], [ 73.0006434, 18.0539742 ], [ 73.0001912, 18.0533789 ], [ 72.9999489, 18.053038 ], [ 72.9996775, 18.0521581 ], [ 72.9994547, 18.0518126 ], [ 72.9994159, 18.0515224 ], [ 72.9994692, 18.051163 ], [ 72.999319, 18.0511216 ], [ 72.9991978, 18.051702 ], [ 72.9991155, 18.051679 ], [ 72.9988635, 18.0510893 ], [ 72.9984807, 18.0505319 ], [ 72.9979671, 18.0502232 ], [ 72.9968139, 18.0498823 ], [ 72.995806, 18.0497763 ], [ 72.9954717, 18.0497303 ], [ 72.995181, 18.0499284 ], [ 72.994866, 18.0500712 ], [ 72.9944881, 18.0500021 ], [ 72.9941731, 18.0500712 ], [ 72.9938582, 18.0503937 ], [ 72.9938097, 18.0508912 ], [ 72.9937613, 18.0514671 ], [ 72.9936208, 18.0519001 ], [ 72.9930829, 18.0524391 ], [ 72.9922834, 18.0528169 ], [ 72.9919733, 18.0530196 ], [ 72.9915178, 18.053683 ], [ 72.9912949, 18.0538166 ], [ 72.9909994, 18.0544155 ], [ 72.9905245, 18.0549315 ], [ 72.9900642, 18.0556225 ], [ 72.9900448, 18.0559496 ], [ 72.9901514, 18.057304 ], [ 72.990103, 18.0580549 ], [ 72.9901853, 18.0582437 ], [ 72.9904034, 18.0584557 ], [ 72.9904858, 18.0586768 ], [ 72.9905391, 18.0590545 ], [ 72.9907765, 18.0593586 ], [ 72.9911787, 18.06022 ], [ 72.9910963, 18.0604135 ], [ 72.9912853, 18.0613026 ], [ 72.9917068, 18.0618784 ], [ 72.9920751, 18.0621917 ], [ 72.9922786, 18.0626846 ], [ 72.9925015, 18.06268 ], [ 72.992642, 18.0630071 ], [ 72.9931944, 18.0634493 ], [ 72.993456, 18.0637856 ], [ 72.9934076, 18.0641173 ], [ 72.9935384, 18.0646793 ], [ 72.9936353, 18.0653426 ], [ 72.9938727, 18.0658309 ], [ 72.9941344, 18.0662501 ], [ 72.9945559, 18.0665173 ], [ 72.9949969, 18.0668582 ], [ 72.9952537, 18.0674202 ], [ 72.995525, 18.0677058 ], [ 72.995932, 18.0679177 ], [ 72.9961694, 18.0681111 ], [ 72.9963584, 18.0681111 ], [ 72.9964166, 18.0679499 ], [ 72.9964917, 18.0677311 ], [ 72.9966928, 18.0675722 ], [ 72.9968381, 18.0675215 ], [ 72.9970949, 18.0675169 ], [ 72.9973953, 18.0676044 ], [ 72.9976231, 18.0678025 ], [ 72.997657, 18.0680374 ], [ 72.9981206, 18.0683649 ], [ 72.998779, 18.0693461 ], [ 72.9992199, 18.0707096 ], [ 72.999374, 18.0711401 ], [ 72.9996012, 18.0713923 ], [ 73.0003576, 18.0721759 ], [ 72.9998486, 18.0733093 ], [ 72.9993641, 18.0741016 ], [ 72.9989869, 18.0748801 ], [ 72.9983008, 18.0758259 ], [ 72.997952, 18.0767334 ], [ 72.9976391, 18.0778558 ], [ 72.9967772, 18.0793886 ], [ 72.9956488, 18.08361 ], [ 72.9949569, 18.0858463 ], [ 72.9942946, 18.0877161 ], [ 72.993494, 18.0901872 ], [ 72.9926637, 18.0928086 ], [ 72.9921794, 18.0939266 ], [ 72.9913985, 18.0959655 ], [ 72.9903014, 18.0975439 ], [ 72.9895432, 18.0991069 ], [ 72.9888618, 18.0998721 ], [ 72.9869503, 18.1009465 ], [ 72.9866978, 18.1007502 ], [ 72.9861536, 18.1012594 ], [ 72.9842617, 18.1018839 ], [ 72.9839837, 18.1026533 ], [ 72.9831731, 18.1029024 ], [ 72.9833014, 18.1034185 ], [ 72.9827454, 18.1049576 ], [ 72.9824732, 18.1052122 ], [ 72.9823332, 18.1057257 ], [ 72.98099, 18.1054541 ], [ 72.9807061, 18.1067385 ], [ 72.9796307, 18.1065981 ], [ 72.97936, 18.1067243 ], [ 72.979157, 18.112644 ], [ 72.9784727, 18.1136667 ], [ 72.9773927, 18.113913 ], [ 72.9772281, 18.1164858 ], [ 72.9769936, 18.1168946 ], [ 72.9767897, 18.1174044 ], [ 72.9766631, 18.1179556 ], [ 72.9765751, 18.1184139 ], [ 72.9766288, 18.1188728 ], [ 72.9766417, 18.119118 ], [ 72.9763391, 18.1194846 ], [ 72.9761589, 18.1194239 ], [ 72.975955, 18.1195769 ], [ 72.9759636, 18.1199536 ], [ 72.9757919, 18.1203309 ], [ 72.975483, 18.120464 ], [ 72.975204, 18.1206577 ], [ 72.9749551, 18.1211365 ], [ 72.9750302, 18.1215035 ], [ 72.9752877, 18.1217483 ], [ 72.9756417, 18.1217381 ], [ 72.9759314, 18.1218604 ], [ 72.9756332, 18.1222994 ], [ 72.9753006, 18.1226563 ], [ 72.9750517, 18.1230636 ], [ 72.9742277, 18.1231763 ], [ 72.9736912, 18.1232171 ], [ 72.9733157, 18.1235842 ], [ 72.9730046, 18.123941 ], [ 72.9726699, 18.1247053 ], [ 72.972702, 18.1249908 ], [ 72.9725518, 18.1252151 ], [ 72.9725196, 18.1253782 ], [ 72.9725433, 18.1256642 ], [ 72.9725733, 18.1259288 ], [ 72.9723051, 18.1262755 ], [ 72.9720605, 18.1265921 ], [ 72.9718995, 18.127 ], [ 72.9715004, 18.1278356 ], [ 72.971524, 18.1281624 ], [ 72.9716828, 18.1284066 ], [ 72.9718351, 18.1285498 ], [ 72.9721141, 18.1287945 ], [ 72.9722428, 18.129131 ], [ 72.9722428, 18.1295388 ], [ 72.9720261, 18.129987 ], [ 72.9718437, 18.130507 ], [ 72.9716635, 18.130793 ], [ 72.9713738, 18.1313742 ], [ 72.971127, 18.1315373 ], [ 72.9706335, 18.1318228 ], [ 72.9701722, 18.1317412 ], [ 72.9698825, 18.131731 ], [ 72.9696787, 18.1319859 ], [ 72.9699233, 18.1322709 ], [ 72.97017, 18.1326176 ], [ 72.9705348, 18.1328419 ], [ 72.970803, 18.1330764 ], [ 72.9709747, 18.1333415 ], [ 72.9712129, 18.1335255 ], [ 72.9715541, 18.133627 ], [ 72.9718995, 18.1334338 ], [ 72.9720605, 18.1330565 ], [ 72.9723823, 18.1328526 ], [ 72.9727578, 18.132873 ], [ 72.9731763, 18.1331381 ], [ 72.9733458, 18.1334842 ], [ 72.9735389, 18.133994 ], [ 72.9739359, 18.1345446 ], [ 72.9740968, 18.1347995 ], [ 72.974453, 18.1349122 ], [ 72.9749465, 18.1347286 ], [ 72.9754379, 18.1346772 ], [ 72.9755688, 18.1347898 ], [ 72.9755044, 18.1352282 ], [ 72.9755902, 18.1354016 ], [ 72.9758992, 18.1353603 ], [ 72.9761267, 18.135269 ], [ 72.9766739, 18.1352996 ], [ 72.9771545, 18.1352889 ], [ 72.9776502, 18.1354118 ], [ 72.9775729, 18.1356662 ], [ 72.9774249, 18.1362886 ], [ 72.9773498, 18.1369309 ], [ 72.9774249, 18.1374509 ], [ 72.9778412, 18.1377767 ], [ 72.9784956, 18.1377563 ], [ 72.9787123, 18.1373999 ], [ 72.9789591, 18.1369717 ], [ 72.9794204, 18.1367168 ], [ 72.979753, 18.1368902 ], [ 72.9803002, 18.1369309 ], [ 72.9809976, 18.1370941 ], [ 72.9815018, 18.1374203 ], [ 72.9818237, 18.1380831 ], [ 72.9819524, 18.1385521 ], [ 72.9817915, 18.1388273 ], [ 72.9818666, 18.1392658 ], [ 72.9818022, 18.1397348 ], [ 72.981725, 18.1401829 ], [ 72.9817143, 18.1406009 ], [ 72.9818559, 18.1409786 ], [ 72.9819718, 18.141335 ], [ 72.982049, 18.1416923 ], [ 72.9823172, 18.1419064 ], [ 72.9826284, 18.1423958 ], [ 72.9831627, 18.1425686 ], [ 72.9836047, 18.1426915 ], [ 72.9837334, 18.1430789 ], [ 72.9836025, 18.143527 ], [ 72.9838064, 18.1439144 ], [ 72.9837313, 18.1444446 ], [ 72.9834437, 18.1447305 ], [ 72.9834201, 18.1452296 ], [ 72.9834759, 18.1457093 ], [ 72.9834545, 18.1463924 ], [ 72.9833901, 18.146739 ], [ 72.9835296, 18.1469939 ], [ 72.9837957, 18.1470138 ], [ 72.9840124, 18.1466982 ], [ 72.9842463, 18.1466671 ], [ 72.9845595, 18.1467696 ], [ 72.9846239, 18.1471672 ], [ 72.9847291, 18.1475337 ], [ 72.9847076, 18.1482474 ], [ 72.9845703, 18.1490839 ], [ 72.9849866, 18.1497766 ], [ 72.9853621, 18.1503985 ], [ 72.9854393, 18.1507457 ], [ 72.9855251, 18.1513064 ], [ 72.9857483, 18.1517952 ], [ 72.9860165, 18.1525293 ], [ 72.9857719, 18.1529886 ], [ 72.9851925, 18.1532944 ], [ 72.9853428, 18.1538755 ], [ 72.9857161, 18.1543032 ], [ 72.9856839, 18.1548435 ], [ 72.9855337, 18.1552513 ], [ 72.985523, 18.15571 ], [ 72.9860594, 18.156597 ], [ 72.9861045, 18.1572703 ], [ 72.9866409, 18.1581063 ], [ 72.9871559, 18.1584835 ], [ 72.9876258, 18.1589621 ], [ 72.9879922, 18.1587689 ], [ 72.9881408, 18.1584524 ], [ 72.9881424, 18.1581675 ], [ 72.9882159, 18.1580038 ], [ 72.988121, 18.1577903 ], [ 72.9881961, 18.1576475 ], [ 72.988452, 18.1575859 ], [ 72.9885056, 18.1579936 ], [ 72.9885823, 18.1582082 ], [ 72.9885807, 18.1586665 ], [ 72.9884198, 18.1591048 ], [ 72.9882589, 18.1594922 ], [ 72.9880137, 18.1597068 ], [ 72.9877079, 18.1597145 ], [ 72.9860822, 18.1662699 ], [ 72.9858098, 18.1665247 ], [ 72.985801, 18.167297 ], [ 72.9859333, 18.1675557 ], [ 72.9853946, 18.1675502 ], [ 72.9846913, 18.1701174 ], [ 72.9846855, 18.1706322 ], [ 72.9841349, 18.1716564 ], [ 72.984126, 18.1724287 ], [ 72.9835668, 18.1742251 ], [ 72.9824511, 18.1775604 ], [ 72.9819006, 18.1785846 ], [ 72.9818947, 18.1790994 ], [ 72.9813441, 18.1801234 ], [ 72.9813353, 18.1808959 ], [ 72.9802194, 18.1842312 ], [ 72.9796719, 18.1849977 ], [ 72.9791035, 18.1875664 ], [ 72.978553, 18.1885905 ], [ 72.9785471, 18.1891055 ], [ 72.9779877, 18.1909017 ], [ 72.9777153, 18.1911563 ], [ 72.9776885, 18.1934733 ], [ 72.9782124, 18.1947662 ], [ 72.9787452, 18.1952867 ], [ 72.9788745, 18.1958029 ], [ 72.9792808, 18.1955498 ], [ 72.9796887, 18.1945373 ], [ 72.9800749, 18.1939869 ], [ 72.9805684, 18.1937015 ], [ 72.9811478, 18.1935384 ], [ 72.9821863, 18.1936505 ], [ 72.9828, 18.1939461 ], [ 72.9836298, 18.1939991 ], [ 72.984582, 18.1942167 ], [ 72.9853964, 18.194843 ], [ 72.9857826, 18.1948227 ], [ 72.9862332, 18.1944353 ], [ 72.9871988, 18.1923153 ], [ 72.9876065, 18.1916222 ], [ 72.9877557, 18.1910922 ], [ 72.9878512, 18.1905928 ], [ 72.9882277, 18.1900526 ], [ 72.9886569, 18.1897875 ], [ 72.9891719, 18.1895225 ], [ 72.9895152, 18.1891148 ], [ 72.9898253, 18.1886154 ], [ 72.9905119, 18.1879834 ], [ 72.9910913, 18.1877388 ], [ 72.9917253, 18.187749 ], [ 72.9925622, 18.1878917 ], [ 72.9929699, 18.1879528 ], [ 72.9933347, 18.1877694 ], [ 72.993442, 18.1873005 ], [ 72.9936351, 18.1868724 ], [ 72.9935922, 18.1863831 ], [ 72.9939451, 18.1861079 ], [ 72.9943003, 18.185792 ], [ 72.9946221, 18.1854862 ], [ 72.9947938, 18.1852212 ], [ 72.9949322, 18.1850683 ], [ 72.9950395, 18.1847217 ], [ 72.9912747, 18.1829379 ], [ 72.9906739, 18.1826117 ], [ 72.990233, 18.1825608 ], [ 72.9900613, 18.1824792 ], [ 72.9898253, 18.1821734 ], [ 72.9899111, 18.1814191 ], [ 72.990469, 18.1803794 ], [ 72.9912747, 18.1797587 ], [ 72.9919399, 18.1795548 ], [ 72.9924978, 18.1793102 ], [ 72.9927435, 18.178932 ], [ 72.9928293, 18.1785854 ], [ 72.9927338, 18.1774754 ], [ 72.9925407, 18.1767618 ], [ 72.9924549, 18.1758648 ], [ 72.9925407, 18.1753143 ], [ 72.992765, 18.1749565 ], [ 72.9931297, 18.1746711 ], [ 72.9937424, 18.1746008 ], [ 72.9941286, 18.1745804 ], [ 72.9949011, 18.1745396 ], [ 72.9951586, 18.1742134 ], [ 72.9952111, 18.1737129 ], [ 72.9949107, 18.1731013 ], [ 72.9953088, 18.173031 ], [ 72.995533, 18.1736925 ], [ 72.9955115, 18.1743042 ], [ 72.9951468, 18.1748954 ], [ 72.994968, 18.1749591 ], [ 72.9948034, 18.1750177 ], [ 72.9941812, 18.1749158 ], [ 72.9934945, 18.1750381 ], [ 72.9930343, 18.175192 ], [ 72.9929913, 18.1755998 ], [ 72.9930772, 18.1765376 ], [ 72.9933132, 18.1774957 ], [ 72.993399, 18.178352 ], [ 72.9933347, 18.1790859 ], [ 72.9929699, 18.179616 ], [ 72.9926668, 18.1798718 ], [ 72.9920445, 18.180145 ], [ 72.9913895, 18.18041 ], [ 72.9907088, 18.180829 ], [ 72.9903456, 18.1816041 ], [ 72.9904357, 18.1820425 ], [ 72.9908627, 18.1823574 ], [ 72.9912747, 18.1825302 ], [ 72.9927553, 18.1832641 ], [ 72.9948796, 18.1839368 ], [ 72.9954161, 18.1843242 ], [ 72.9955233, 18.1847523 ], [ 72.9952659, 18.1854046 ], [ 72.994944, 18.1858735 ], [ 72.9943217, 18.186322 ], [ 72.994193, 18.1866889 ], [ 72.9939666, 18.187433 ], [ 72.9936136, 18.1879121 ], [ 72.993399, 18.1881975 ], [ 72.993001, 18.1883911 ], [ 72.9926362, 18.1883708 ], [ 72.9922714, 18.18833 ], [ 72.9935492, 18.1889925 ], [ 72.9942788, 18.1892167 ], [ 72.9953088, 18.1891964 ], [ 72.9962314, 18.1892371 ], [ 72.9971112, 18.1894002 ], [ 72.9983558, 18.1896245 ], [ 72.9990424, 18.1899302 ], [ 72.9994072, 18.1900729 ], [ 72.9998363, 18.1898691 ], [ 73.0005659, 18.1895633 ], [ 73.0009736, 18.188911 ], [ 73.0014027, 18.1884421 ], [ 73.0017032, 18.1880752 ], [ 73.0018963, 18.1877286 ], [ 73.002025, 18.1872801 ], [ 73.0023683, 18.1873209 ], [ 73.0023898, 18.1879325 ], [ 73.0024542, 18.1883606 ], [ 73.0021323, 18.1884625 ], [ 73.0018104, 18.1886052 ], [ 73.0015744, 18.1888498 ], [ 73.0014027, 18.1891352 ], [ 73.0011453, 18.1895429 ], [ 73.0008234, 18.1898487 ], [ 73.0005659, 18.1900322 ], [ 73.0002869, 18.1902768 ], [ 72.9998363, 18.1904806 ], [ 72.9991711, 18.1905418 ], [ 72.9989566, 18.1904195 ], [ 72.9986873, 18.1902054 ], [ 72.9982914, 18.1900526 ], [ 72.9975286, 18.1898793 ], [ 72.9961671, 18.1898895 ], [ 72.9950084, 18.1897264 ], [ 72.9939022, 18.1894716 ], [ 72.9931845, 18.1892167 ], [ 72.9918852, 18.188595 ], [ 72.9912318, 18.188544 ], [ 72.9907909, 18.1886765 ], [ 72.9899229, 18.1894206 ], [ 72.9887856, 18.190501 ], [ 72.9883136, 18.1910718 ], [ 72.988099, 18.1917038 ], [ 72.9879702, 18.1922745 ], [ 72.9875851, 18.1934976 ], [ 72.987349, 18.1943334 ], [ 72.9870916, 18.1949246 ], [ 72.9865551, 18.1954342 ], [ 72.9859114, 18.1955973 ], [ 72.9852462, 18.1956177 ], [ 72.9846239, 18.1954342 ], [ 72.9843106, 18.1952202 ], [ 72.9831648, 18.1948634 ], [ 72.9826498, 18.1948227 ], [ 72.981813, 18.1952304 ], [ 72.9810619, 18.1957807 ], [ 72.9801693, 18.1964432 ], [ 72.979517, 18.1965961 ], [ 72.97921, 18.1972458 ], [ 72.9786151, 18.198182 ], [ 72.9779548, 18.1988002 ], [ 72.9773314, 18.1992894 ], [ 72.9771474, 18.1993133 ], [ 72.9769339, 18.199506 ], [ 72.9765434, 18.1996405 ], [ 72.9760627, 18.1998729 ], [ 72.975655, 18.2000054 ], [ 72.9753224, 18.2001425 ], [ 72.9740666, 18.200332 ], [ 72.9738038, 18.2008421 ], [ 72.9731497, 18.2016643 ], [ 72.9720678, 18.2020386 ], [ 72.9717955, 18.2022931 ], [ 72.9709843, 18.2025421 ], [ 72.9704411, 18.2029229 ], [ 72.9700247, 18.2039484 ], [ 72.970151, 18.2047222 ], [ 72.9688057, 18.2045787 ], [ 72.9682625, 18.2049596 ], [ 72.9681213, 18.2054731 ], [ 72.9675766, 18.2059822 ], [ 72.9656433, 18.2100811 ], [ 72.9649584, 18.2111038 ], [ 72.9633347, 18.2117297 ], [ 72.9630624, 18.2119843 ], [ 72.9614417, 18.2123538 ], [ 72.9612914, 18.2136394 ], [ 72.9608819, 18.2141501 ], [ 72.9605841, 18.2144473 ], [ 72.9600943, 18.2146768 ], [ 72.9600672, 18.2151813 ], [ 72.9597048, 18.2154919 ], [ 72.9592387, 18.2164496 ], [ 72.958445658376462, 18.217204934179687 ], [ 72.9581682, 18.2174692 ], [ 72.957426, 18.2185044 ], [ 72.95687, 18.2188965 ], [ 72.9562392, 18.2193472 ], [ 72.9553232, 18.2197838 ], [ 72.9539488, 18.2199561 ], [ 72.952833, 18.2197013 ], [ 72.9528092, 18.2194735 ], [ 72.9524363, 18.2192175 ], [ 72.9519723, 18.2193688 ], [ 72.9516411, 18.2194598 ], [ 72.9514246, 18.2197533 ], [ 72.9511502, 18.2200801 ], [ 72.9510003, 18.2203841 ], [ 72.9506033, 18.2207408 ], [ 72.9492985, 18.2215132 ], [ 72.9479024, 18.2223693 ], [ 72.9454459, 18.2232925 ], [ 72.9442795, 18.222919 ], [ 72.9444386, 18.222642 ], [ 72.9443504, 18.2224696 ], [ 72.9442088, 18.2223818 ], [ 72.9435991, 18.2223818 ], [ 72.9426802, 18.2220167 ], [ 72.9423444, 18.2214628 ], [ 72.9427995, 18.2211061 ], [ 72.942985, 18.2208417 ], [ 72.9426846, 18.2202206 ], [ 72.9423311, 18.2201157 ], [ 72.9417701, 18.2202416 ], [ 72.9408423, 18.2201115 ], [ 72.9403739, 18.2196499 ], [ 72.9398438, 18.2194401 ], [ 72.9390529, 18.219268 ], [ 72.9385979, 18.2189491 ], [ 72.9383991, 18.2186343 ], [ 72.938916, 18.218072 ], [ 72.9391766, 18.2174635 ], [ 72.938733651768246, 18.217004934179688 ], [ 72.9384874, 18.21675 ], [ 72.937805263295445, 18.217065702436354 ], [ 72.9372813, 18.2173082 ], [ 72.93703764840329, 18.217204934179687 ], [ 72.9364595, 18.2169599 ], [ 72.935894, 18.2171193 ], [ 72.935819158319205, 18.217204934179687 ], [ 72.9353108, 18.2177866 ], [ 72.9345642, 18.2179629 ], [ 72.9337821, 18.2180384 ], [ 72.933305, 18.2182105 ], [ 72.9322226, 18.2192848 ], [ 72.9315996, 18.2199227 ], [ 72.9315157, 18.22072 ], [ 72.9314892, 18.2209508 ], [ 72.9317587, 18.2218405 ], [ 72.9315068, 18.2221426 ], [ 72.9312903, 18.2225875 ], [ 72.9313831, 18.2233806 ], [ 72.931604, 18.2236156 ], [ 72.9319486, 18.2237331 ], [ 72.9326997, 18.2240437 ], [ 72.9333006, 18.2236828 ], [ 72.9337998, 18.2238128 ], [ 72.9339765, 18.2242031 ], [ 72.9337866, 18.224392 ], [ 72.9337159, 18.2245682 ], [ 72.9339147, 18.2246689 ], [ 72.9339986, 18.2251096 ], [ 72.9338175, 18.2256425 ], [ 72.9339147, 18.2259363 ], [ 72.9344581, 18.2263139 ], [ 72.9346083, 18.2267042 ], [ 72.9345889, 18.2277715 ], [ 72.9347718, 18.2283744 ], [ 72.9349397, 18.228601 ], [ 72.9354036, 18.2286765 ], [ 72.9357217, 18.2293102 ], [ 72.936243, 18.2297172 ], [ 72.9369102, 18.229969 ], [ 72.9373829, 18.2298809 ], [ 72.9376745, 18.2300949 ], [ 72.9378247, 18.2308166 ], [ 72.9380058, 18.2310726 ], [ 72.9380235, 18.2314503 ], [ 72.9381693, 18.2315678 ], [ 72.9381561, 18.231765 ], [ 72.938015, 18.2318709 ], [ 72.9380901, 18.2322377 ], [ 72.9379399, 18.2322938 ], [ 72.938133, 18.2326453 ], [ 72.9403753, 18.2323447 ], [ 72.9407294, 18.232895 ], [ 72.9407212, 18.233244 ], [ 72.9409761, 18.2338019 ], [ 72.9413034, 18.2338936 ], [ 72.9416413, 18.2338936 ], [ 72.9420705, 18.2341993 ], [ 72.9416521, 18.2347955 ], [ 72.9416122, 18.2376305 ], [ 72.9401876, 18.2401502 ], [ 72.9401876, 18.2416787 ], [ 72.9403646, 18.2417398 ], [ 72.9403968, 18.242932 ], [ 72.9409654, 18.2430798 ], [ 72.9414267, 18.2443331 ], [ 72.9411317, 18.2446439 ], [ 72.9413892, 18.245459 ], [ 72.9422529, 18.2453113 ], [ 72.9429395, 18.2464168 ], [ 72.9428644, 18.2481439 ], [ 72.9422743, 18.2491119 ], [ 72.942108, 18.2495857 ], [ 72.942387, 18.2502174 ], [ 72.9425211, 18.2509001 ], [ 72.9424621, 18.2518426 ], [ 72.9420383, 18.2524845 ], [ 72.9418023, 18.253213 ], [ 72.9418398, 18.2543389 ], [ 72.9415716, 18.2552966 ], [ 72.9408367, 18.2561933 ], [ 72.9405148, 18.2575433 ], [ 72.9397477, 18.2587965 ], [ 72.9394623, 18.2600064 ], [ 72.9394915, 18.2604414 ], [ 72.9399344, 18.2612888 ], [ 72.939739, 18.2624733 ], [ 72.9394264, 18.2632125 ], [ 72.9397781, 18.2635774 ], [ 72.9392537, 18.2645207 ], [ 72.9387327, 18.2653897 ], [ 72.9383516, 18.2655072 ], [ 72.9380452, 18.2659126 ], [ 72.9375537, 18.2665804 ], [ 72.937684, 18.2670474 ], [ 72.9378143, 18.2671803 ], [ 72.9379445, 18.2678514 ], [ 72.9384168, 18.2681298 ], [ 72.9384428, 18.2683493 ], [ 72.9381627, 18.2689524 ], [ 72.9378762, 18.2690854 ], [ 72.9374007, 18.2698523 ], [ 72.9365539, 18.2707832 ], [ 72.9360947, 18.2712378 ], [ 72.9355932, 18.2715501 ], [ 72.9350461, 18.2718749 ], [ 72.9348735, 18.2723295 ], [ 72.935033, 18.2725614 ], [ 72.9353033, 18.2725923 ], [ 72.9354271, 18.2728521 ], [ 72.9357169, 18.273115 ], [ 72.9357658, 18.2733407 ], [ 72.9356453, 18.2734211 ], [ 72.9354108, 18.2733964 ], [ 72.9353196, 18.2734768 ], [ 72.9355802, 18.2737273 ], [ 72.9358407, 18.2737953 ], [ 72.9360687, 18.2741076 ], [ 72.936707, 18.2744849 ], [ 72.9374463, 18.2744076 ], [ 72.9376221, 18.2746024 ], [ 72.9375603, 18.2749921 ], [ 72.9377785, 18.2756817 ], [ 72.9376873, 18.2760775 ], [ 72.9372606, 18.2764115 ], [ 72.9368894, 18.2762971 ], [ 72.9366972, 18.2764208 ], [ 72.9366125, 18.2771259 ], [ 72.9364399, 18.2772094 ], [ 72.9366386, 18.2776856 ], [ 72.9369122, 18.2781247 ], [ 72.9369284, 18.2787865 ], [ 72.9360719, 18.2791545 ], [ 72.9356844, 18.2795936 ], [ 72.9355509, 18.2800204 ], [ 72.9356062, 18.2801069 ], [ 72.9357365, 18.2800265 ], [ 72.9355704, 18.2808367 ], [ 72.935715883503065, 18.28115 ], [ 72.9357528, 18.2812295 ], [ 72.9358961, 18.2813222 ], [ 72.935973074371248, 18.28135 ], [ 72.9363585, 18.2814892 ], [ 72.9365442, 18.2817273 ], [ 72.9370359, 18.2824973 ], [ 72.937329, 18.2827509 ], [ 72.9374691, 18.2830416 ], [ 72.9376254, 18.2832086 ], [ 72.937697, 18.2835116 ], [ 72.9381139, 18.283827 ], [ 72.9382865, 18.2839786 ], [ 72.9384624, 18.2840466 ], [ 72.9386317, 18.2842228 ], [ 72.9389541, 18.2842383 ], [ 72.9395631, 18.2840744 ], [ 72.9398497, 18.2838827 ], [ 72.9399539, 18.2837064 ], [ 72.9399767, 18.283459 ], [ 72.9402405, 18.2833261 ], [ 72.9405597, 18.2834096 ], [ 72.9409372, 18.2844919 ], [ 72.9411492, 18.2847454 ], [ 72.9412404, 18.2848227 ], [ 72.9414032, 18.2848568 ], [ 72.9414618, 18.2850732 ], [ 72.9415856, 18.2850237 ], [ 72.9416882, 18.2851642 ], [ 72.941781, 18.285132 ], [ 72.9418461, 18.2850114 ], [ 72.9420936, 18.2850516 ], [ 72.9422461, 18.2847771 ], [ 72.9424821, 18.2846141 ], [ 72.942872, 18.2848629 ], [ 72.9431716, 18.2848011 ], [ 72.9436145, 18.2848444 ], [ 72.9438001, 18.2850547 ], [ 72.9443147, 18.2850763 ], [ 72.9450019, 18.2845444 ], [ 72.9450999, 18.2841863 ], [ 72.9455291, 18.2841659 ], [ 72.9456956, 18.2844269 ], [ 72.9458844, 18.2846001 ], [ 72.9461547, 18.2847331 ], [ 72.9469453, 18.2848382 ], [ 72.9475461, 18.2848586 ], [ 72.9481255, 18.2848994 ], [ 72.9493431, 18.2843342 ], [ 72.9496655, 18.2844764 ], [ 72.9499619, 18.2845228 ], [ 72.950509, 18.2844269 ], [ 72.9517693, 18.2840157 ], [ 72.9519908, 18.2840806 ], [ 72.9531466, 18.2835139 ], [ 72.9538146, 18.2829086 ], [ 72.9539025, 18.2827571 ], [ 72.9542738, 18.2827385 ], [ 72.9545571, 18.282553 ], [ 72.9547069, 18.2822994 ], [ 72.9547167, 18.2821665 ], [ 72.9549251, 18.2819562 ], [ 72.9550261, 18.2819376 ], [ 72.9551498, 18.2820149 ], [ 72.9553355, 18.2819222 ], [ 72.9554494, 18.2818077 ], [ 72.9557653, 18.281984 ], [ 72.956345, 18.2821232 ], [ 72.9567293, 18.2823334 ], [ 72.957068, 18.2824107 ], [ 72.9572879, 18.2824137 ], [ 72.958488, 18.2823211 ], [ 72.9588723, 18.2823273 ], [ 72.9591588, 18.2822747 ], [ 72.9604851, 18.2817006 ], [ 72.961193006272865, 18.28135 ], [ 72.96119300627285, 18.28135 ], [ 72.9612029, 18.2813451 ], [ 72.9621588, 18.2811922 ], [ 72.9635535, 18.2809681 ], [ 72.9646693, 18.2805403 ], [ 72.9658914, 18.2795559 ], [ 72.9660119, 18.279423 ], [ 72.9659858, 18.2793024 ], [ 72.9663148, 18.2791756 ], [ 72.9667479, 18.2788416 ], [ 72.9671452, 18.27882 ], [ 72.9680571, 18.2783221 ], [ 72.9685103, 18.2779119 ], [ 72.9687899, 18.2780963 ], [ 72.9717268, 18.2738572 ], [ 72.9710852, 18.2733886 ], [ 72.9715551, 18.2727977 ], [ 72.9707146, 18.2720815 ], [ 72.9702483, 18.2718196 ], [ 72.9706071, 18.2712805 ], [ 72.9708514, 18.2700404 ], [ 72.9706462, 18.2691869 ], [ 72.9704573, 18.2690446 ], [ 72.9702359, 18.2690415 ], [ 72.9700698, 18.2687694 ], [ 72.9698353, 18.2687756 ], [ 72.9695715, 18.2689766 ], [ 72.9691514, 18.2686704 ], [ 72.9688615, 18.2687385 ], [ 72.9689169, 18.2684106 ], [ 72.9690309, 18.2679529 ], [ 72.9696692, 18.2677117 ], [ 72.970174, 18.2673839 ], [ 72.9703238, 18.2671148 ], [ 72.9702977, 18.2662273 ], [ 72.9701486, 18.2650532 ], [ 72.97067, 18.2642888 ], [ 72.9716434, 18.2637432 ], [ 72.9728654, 18.2633199 ], [ 72.9735502, 18.2631222 ], [ 72.9737355, 18.2631327 ], [ 72.9739195, 18.2632672 ], [ 72.9740351, 18.2630716 ], [ 72.9739458, 18.2629572 ], [ 72.9740421, 18.2626113 ], [ 72.9739941, 18.2623105 ], [ 72.9736888, 18.2620644 ], [ 72.9726259, 18.2614139 ], [ 72.9719408, 18.2596258 ], [ 72.9718958, 18.2587272 ], [ 72.9707376, 18.2572539 ], [ 72.9715154, 18.2559818 ], [ 72.972031, 18.2535971 ], [ 72.9722434, 18.2523754 ], [ 72.9731784, 18.2505098 ], [ 72.9735947, 18.24979 ], [ 72.9736365, 18.2483818 ], [ 72.973614, 18.2473746 ], [ 72.9737653, 18.2465615 ], [ 72.9734896, 18.2456852 ], [ 72.9731291, 18.2449882 ], [ 72.9725379, 18.2445898 ], [ 72.97173, 18.2453204 ], [ 72.9712537, 18.2461478 ], [ 72.9708186, 18.2465284 ], [ 72.9704351, 18.2469212 ], [ 72.9699861, 18.2467882 ], [ 72.9695918, 18.2465503 ], [ 72.9692361, 18.2463475 ], [ 72.9690269, 18.2462492 ], [ 72.9693246, 18.2462013 ], [ 72.9699233, 18.2465854 ], [ 72.9703455, 18.2467194 ], [ 72.9707156, 18.2463439 ], [ 72.9711002, 18.2459562 ], [ 72.9711823, 18.2452949 ], [ 72.9716104, 18.2448797 ], [ 72.9723008, 18.2443922 ], [ 72.9732685, 18.2444757 ], [ 72.9737996, 18.2453805 ], [ 72.9741724, 18.2461962 ], [ 72.974659, 18.2467154 ], [ 72.9766943, 18.246214 ], [ 72.9786973, 18.2455074 ], [ 72.9799317, 18.2458365 ], [ 72.9804477, 18.2453199 ], [ 72.9806387, 18.2445679 ], [ 72.9817293, 18.2432703 ], [ 72.9821595, 18.2431348 ], [ 72.9820168, 18.242557 ], [ 72.9822936, 18.2423879 ], [ 72.9828767, 18.2425667 ], [ 72.98372, 18.2428113 ], [ 72.9844469, 18.243118 ], [ 72.9877675, 18.2423687 ], [ 72.988034, 18.242629 ], [ 72.9899111, 18.2434211 ], [ 72.9904454, 18.2438134 ], [ 72.9904513, 18.2432986 ], [ 72.9912581, 18.2434352 ], [ 72.9916573, 18.2438261 ], [ 72.9916426, 18.2451132 ], [ 72.9917764, 18.245243 ], [ 72.9923152, 18.2452487 ], [ 72.9925876, 18.2449939 ], [ 72.9950153, 18.244762 ], [ 72.9955571, 18.2445103 ], [ 72.9961049, 18.2437435 ], [ 72.9979909, 18.2437631 ], [ 72.9981236, 18.2438937 ], [ 72.9978365, 18.2454356 ], [ 72.997951, 18.247239 ], [ 72.9984883, 18.247373 ], [ 72.9990213, 18.2478935 ], [ 72.9992908, 18.2478964 ], [ 72.9998355, 18.247387 ], [ 73.0011827, 18.2474012 ], [ 73.001869, 18.2462502 ], [ 73.0021413, 18.2459954 ], [ 73.002013, 18.2454793 ], [ 73.0025518, 18.2454849 ], [ 73.0028389, 18.2439431 ], [ 73.0068788, 18.2441134 ], [ 73.0074148, 18.2443764 ], [ 73.008762, 18.2443904 ], [ 73.0109247, 18.2437698 ], [ 73.0110648, 18.2432562 ], [ 73.0116095, 18.2427471 ], [ 73.0120215, 18.2421071 ], [ 73.0125632, 18.2418554 ], [ 73.0133802, 18.2410914 ], [ 73.0136497, 18.2410941 ], [ 73.0144492, 18.2418748 ], [ 73.0155284, 18.2417579 ], [ 73.0152706, 18.2407252 ], [ 73.0147333, 18.2405904 ], [ 73.0144668, 18.2403301 ], [ 73.0139293, 18.2401963 ], [ 73.0142105, 18.2391695 ], [ 73.0155605, 18.2389259 ], [ 73.0157006, 18.2384124 ], [ 73.0166484, 18.2380357 ], [ 73.0174683, 18.2370141 ], [ 73.0188153, 18.2370281 ], [ 73.0189481, 18.2371587 ], [ 73.0192059, 18.2381912 ], [ 73.0194724, 18.2384515 ], [ 73.0197244, 18.2399988 ], [ 73.0201245, 18.2403887 ], [ 73.021744, 18.2401481 ], [ 73.0223976, 18.2398612 ], [ 73.0227584, 18.2398945 ], [ 73.0232763, 18.239956 ], [ 73.0256931, 18.239956 ], [ 73.0285128, 18.2395387 ], [ 73.0310761, 18.2387388 ], [ 73.0310395, 18.2369998 ], [ 73.0319549, 18.2375215 ], [ 73.0329437, 18.237278 ], [ 73.0355802, 18.2363042 ], [ 73.0364224, 18.2350521 ], [ 73.0355802, 18.2332436 ], [ 73.0374844, 18.2343218 ], [ 73.0398646, 18.2344261 ], [ 73.0444419, 18.2338348 ], [ 73.049532, 18.2317828 ], [ 73.0488728, 18.2297655 ], [ 73.0511798, 18.2311567 ], [ 73.0580275, 18.2292438 ], [ 73.0661354, 18.22436 ], [ 73.0678444, 18.2224908 ], [ 73.069165, 18.2195394 ], [ 73.069443430250146, 18.217204934179687 ], [ 73.069443430250161, 18.217204934179687 ], [ 73.0697605, 18.2145465 ], [ 73.0702784, 18.2097748 ], [ 73.0694757, 18.206528 ], [ 73.0681917, 18.2051087 ], [ 73.0659299, 18.2038809 ], [ 73.0593957, 18.2004703 ], [ 73.0573851, 18.1993448 ], [ 73.0547643, 18.200709 ], [ 73.0540103, 18.2005044 ], [ 73.0566671, 18.1983216 ], [ 73.0553746, 18.196514 ], [ 73.0544053, 18.1920459 ], [ 73.0552669, 18.1871002 ], [ 73.0566671, 18.1847808 ], [ 73.0604727, 18.18079 ], [ 73.0653575, 18.1765231 ], [ 73.0662023, 18.176289 ], [ 73.0669415, 18.1755532 ], [ 73.0652871, 18.1723092 ], [ 73.0676454, 18.1749847 ], [ 73.0690182, 18.1741152 ], [ 73.0687718, 18.1732456 ], [ 73.0660615, 18.1687306 ], [ 73.0691942, 18.1724095 ], [ 73.069863, 18.1726436 ], [ 73.0706022, 18.1723426 ], [ 73.0718342, 18.1711721 ], [ 73.068983, 18.1671587 ], [ 73.0676102, 18.1643159 ], [ 73.0697574, 18.1657875 ], [ 73.0722214, 18.1688979 ], [ 73.0734886, 18.1687641 ], [ 73.0765862, 18.1645835 ], [ 73.0763398, 18.1628777 ], [ 73.0715526, 18.1562219 ], [ 73.0724678, 18.1554861 ], [ 73.0773254, 18.1582287 ], [ 73.0782053, 18.1616402 ], [ 73.0789797, 18.1616402 ], [ 73.0798949, 18.1609044 ], [ 73.0807045, 18.1565898 ], [ 73.0813381, 18.1554861 ], [ 73.0821125, 18.1580615 ], [ 73.0847333, 18.1561946 ], [ 73.0860102, 18.1545549 ], [ 73.0869765, 18.1513412 ], [ 73.0874942, 18.1514068 ], [ 73.0878393, 18.1516363 ], [ 73.0880118, 18.153112 ], [ 73.0865279, 18.1568176 ], [ 73.0872181, 18.1580309 ], [ 73.0894268, 18.1580965 ], [ 73.0903931, 18.157703 ], [ 73.093292, 18.1540234 ], [ 73.0939816, 18.1541161 ], [ 73.0932747, 18.1564501 ], [ 73.092412, 18.1607951 ], [ 73.0928606, 18.1633036 ], [ 73.0924637, 18.1659843 ], [ 73.0919332, 18.1674761 ], [ 73.0912408, 18.1681157 ], [ 73.0911, 18.1686294 ], [ 73.0905559, 18.1691389 ], [ 73.0905502, 18.1696538 ], [ 73.0901382, 18.1704221 ], [ 73.0887903, 18.170537 ], [ 73.087706, 18.1711703 ], [ 73.0874255, 18.1721975 ], [ 73.0866202, 18.171932 ], [ 73.0866725, 18.1708996 ], [ 73.08631, 18.1704075 ], [ 73.0853778, 18.1702968 ], [ 73.0845881, 18.1708012 ], [ 73.0842774, 18.1706904 ], [ 73.0838631, 18.1702107 ], [ 73.0833711, 18.1702722 ], [ 73.0830733, 18.1706658 ], [ 73.0817657, 18.1713916 ], [ 73.0811701, 18.1726217 ], [ 73.0807559, 18.1739625 ], [ 73.0808853, 18.1749466 ], [ 73.0806652, 18.1763119 ], [ 73.0805099, 18.177296 ], [ 73.0810148, 18.178157 ], [ 73.0818563, 18.1787844 ], [ 73.0828791, 18.1792149 ], [ 73.0826331, 18.179916 ], [ 73.0811054, 18.1815027 ], [ 73.0807559, 18.1820071 ], [ 73.0796424, 18.1829173 ], [ 73.0784384, 18.1844179 ], [ 73.0793317, 18.1853281 ], [ 73.0790224, 18.1854141 ], [ 73.0789326, 18.1852442 ], [ 73.0786659, 18.1849841 ], [ 73.0783994, 18.1847239 ], [ 73.0781301, 18.1847212 ], [ 73.0781273, 18.1849787 ], [ 73.078303, 18.1850681 ], [ 73.0785695, 18.1853281 ], [ 73.078836, 18.1855884 ], [ 73.0791027, 18.1858484 ], [ 73.0790469, 18.1870476 ], [ 73.0784941, 18.1883296 ], [ 73.0779498, 18.188839 ], [ 73.077397, 18.190121 ], [ 73.0772233, 18.1937239 ], [ 73.0772191, 18.1941096 ], [ 73.0778765, 18.1955328 ], [ 73.0775873, 18.1973323 ], [ 73.077562, 18.1996492 ], [ 73.0767425, 18.200671 ], [ 73.0770506, 18.2018841 ], [ 73.0770376, 18.2023146 ], [ 73.0768175, 18.2031632 ], [ 73.0767658, 18.2036428 ], [ 73.0768564, 18.2040487 ], [ 73.0768564, 18.2049588 ], [ 73.0768046, 18.2052048 ], [ 73.0767787, 18.2058443 ], [ 73.076701, 18.2064961 ], [ 73.0768693, 18.2069143 ], [ 73.0771024, 18.2072586 ], [ 73.0771153, 18.2074677 ], [ 73.076947, 18.2078858 ], [ 73.0768952, 18.2081072 ], [ 73.0771153, 18.208759 ], [ 73.0772189, 18.2089435 ], [ 73.0773613, 18.2091157 ], [ 73.0775426, 18.2092264 ], [ 73.0777497, 18.2093002 ], [ 73.0779569, 18.2093002 ], [ 73.0784488, 18.209005 ], [ 73.0801319, 18.2129404 ], [ 73.0805721, 18.2138751 ], [ 73.0805332, 18.2140842 ], [ 73.0804297, 18.2142686 ], [ 73.0803779, 18.21449 ], [ 73.080352, 18.2147114 ], [ 73.0804167, 18.2149327 ], [ 73.0805074, 18.2151418 ], [ 73.0807533, 18.2154984 ], [ 73.0810252, 18.2158059 ], [ 73.0804944, 18.2160026 ], [ 73.080339, 18.2161748 ], [ 73.0801319, 18.2165683 ], [ 73.080119300152006, 18.217204934179687 ], [ 73.080119, 18.2172201 ], [ 73.0802355, 18.2186221 ], [ 73.0808569, 18.2201224 ], [ 73.082527, 18.2202207 ], [ 73.0832521, 18.220479 ], [ 73.0814525, 18.2205159 ], [ 73.0812453, 18.2205774 ], [ 73.0808699, 18.220811 ], [ 73.0806886, 18.2209832 ], [ 73.0804685, 18.2213767 ], [ 73.080339, 18.2220039 ], [ 73.0797176, 18.2224097 ], [ 73.0795752, 18.2225819 ], [ 73.0788631, 18.2235288 ], [ 73.0786042, 18.2241067 ], [ 73.0785524, 18.2243158 ], [ 73.0785524, 18.2247831 ], [ 73.0786042, 18.2250044 ], [ 73.0789667, 18.2255455 ], [ 73.0791221, 18.2257054 ], [ 73.0794457, 18.2259882 ], [ 73.0796529, 18.226062 ], [ 73.07986, 18.2262096 ], [ 73.0802031, 18.2267629 ], [ 73.0801902, 18.2275008 ], [ 73.080352, 18.2279004 ], [ 73.0803067, 18.2281095 ], [ 73.0800477, 18.2286628 ], [ 73.0803649, 18.2307902 ], [ 73.0801513, 18.2312821 ], [ 73.0801254, 18.2319891 ], [ 73.0799895, 18.2326654 ], [ 73.0798277, 18.2329421 ], [ 73.0794975, 18.2330958 ], [ 73.0791674, 18.2331635 ], [ 73.0785589, 18.2331573 ], [ 73.0784618, 18.2332126 ], [ 73.078397, 18.2336861 ], [ 73.0782546, 18.2339627 ], [ 73.0783453, 18.2343931 ], [ 73.0782093, 18.236047 ], [ 73.0772124, 18.2382911 ], [ 73.0760796, 18.2387768 ], [ 73.0758401, 18.2389735 ], [ 73.0750439, 18.2398527 ], [ 73.073915, 18.2399452 ], [ 73.0737594, 18.2400061 ], [ 73.0736129, 18.2402756 ], [ 73.0734573, 18.2403278 ], [ 73.0733474, 18.2404321 ], [ 73.0732925, 18.2405712 ], [ 73.0733017, 18.2407277 ], [ 73.0731735, 18.2408668 ], [ 73.0729996, 18.2408929 ], [ 73.0728622, 18.2409799 ], [ 73.07267, 18.2412494 ], [ 73.0725052, 18.2412146 ], [ 73.0723862, 18.2413189 ], [ 73.0723221, 18.2414581 ], [ 73.0711778, 18.2415015 ], [ 73.0703264, 18.2417537 ], [ 73.0700092, 18.2416513 ], [ 73.0697762, 18.241725 ], [ 73.0692583, 18.242014 ], [ 73.0684491, 18.2430592 ], [ 73.0682808, 18.2435264 ], [ 73.0682549, 18.2447068 ], [ 73.0680542, 18.2448052 ], [ 73.0673422, 18.2448052 ], [ 73.0670832, 18.2449404 ], [ 73.0668114, 18.2452478 ], [ 73.0663323, 18.2465204 ], [ 73.0661552, 18.2467526 ], [ 73.0660104, 18.2468412 ], [ 73.065833, 18.2468678 ], [ 73.065679, 18.2469344 ], [ 73.0655949, 18.247156 ], [ 73.0654969, 18.2472891 ], [ 73.0653521, 18.2473689 ], [ 73.0649693, 18.2474753 ], [ 73.0648433, 18.2475861 ], [ 73.0646985, 18.2478699 ], [ 73.0644091, 18.2480783 ], [ 73.0642457, 18.2482557 ], [ 73.0639329, 18.2483931 ], [ 73.0638301, 18.2485261 ], [ 73.0637461, 18.248535 ], [ 73.0636014, 18.2486636 ], [ 73.0633586, 18.2492666 ], [ 73.0632699, 18.249404 ], [ 73.0631438, 18.2495149 ], [ 73.0629804, 18.2495282 ], [ 73.0628264, 18.2495903 ], [ 73.0625743, 18.2497854 ], [ 73.0625416, 18.2498519 ], [ 73.0623081, 18.249945 ], [ 73.0622241, 18.2500824 ], [ 73.0617759, 18.2505081 ], [ 73.0615892, 18.2508805 ], [ 73.0615425, 18.25112 ], [ 73.0617199, 18.2526186 ], [ 73.0616639, 18.2535098 ], [ 73.0618086, 18.2537049 ], [ 73.0618646, 18.253931 ], [ 73.0620934, 18.2544054 ], [ 73.0620047, 18.2554074 ], [ 73.0618459, 18.2565691 ], [ 73.0622008, 18.2572652 ], [ 73.0622661, 18.2575932 ], [ 73.0624809, 18.257713 ], [ 73.0628871, 18.2577218 ], [ 73.0630271, 18.2577928 ], [ 73.0631999, 18.2581386 ], [ 73.0632092, 18.2583824 ], [ 73.0632559, 18.2585376 ], [ 73.0634707, 18.258777 ], [ 73.0636621, 18.2591273 ], [ 73.0637741, 18.2592293 ], [ 73.0640869, 18.259411 ], [ 73.0647872, 18.2603465 ], [ 73.0652681, 18.2605461 ], [ 73.0658003, 18.2611668 ], [ 73.0660104, 18.2616323 ], [ 73.0662952, 18.2618141 ], [ 73.0663326, 18.2619559 ], [ 73.0672243, 18.2635653 ], [ 73.0685502, 18.2657821 ], [ 73.0694279, 18.2653564 ], [ 73.0694233, 18.2654895 ], [ 73.0694933, 18.2655205 ], [ 73.069582, 18.2655338 ], [ 73.0698201, 18.2654362 ], [ 73.0700162, 18.2658042 ], [ 73.0702029, 18.2659417 ], [ 73.0702683, 18.2661811 ], [ 73.0707118, 18.2668239 ], [ 73.0707212, 18.2670545 ], [ 73.0705484, 18.2671298 ], [ 73.0704224, 18.2672407 ], [ 73.0704644, 18.2676042 ], [ 73.0701609, 18.2681894 ], [ 73.0697874, 18.2686682 ], [ 73.0691478, 18.2701268 ], [ 73.0693486, 18.2706056 ], [ 73.0693579, 18.2708406 ], [ 73.0692925, 18.2708938 ], [ 73.0690769, 18.2709225 ], [ 73.06876, 18.2708097 ], [ 73.0686412, 18.2707971 ], [ 73.0685355, 18.2708473 ], [ 73.0675963, 18.2716717 ], [ 73.0662098, 18.273866 ], [ 73.064744, 18.2750949 ], [ 73.0633839, 18.2763488 ], [ 73.0629878, 18.276913 ], [ 73.063067, 18.2779036 ], [ 73.0629217, 18.2780917 ], [ 73.0628953, 18.2783048 ], [ 73.0630406, 18.2784553 ], [ 73.0632651, 18.2784804 ], [ 73.0634763, 18.2783801 ], [ 73.0635952, 18.2782171 ], [ 73.0642026, 18.2779161 ], [ 73.0638857, 18.2785055 ], [ 73.0633047, 18.2789067 ], [ 73.0628425, 18.2789945 ], [ 73.0625916, 18.2789569 ], [ 73.0623935, 18.2788315 ], [ 73.0622483, 18.2786685 ], [ 73.0621558, 18.2784553 ], [ 73.0619313, 18.2783801 ], [ 73.0616805, 18.2783675 ], [ 73.0612711, 18.2785305 ], [ 73.0607561, 18.2785682 ], [ 73.0607825, 18.278355 ], [ 73.0580094, 18.2790446 ], [ 73.058049, 18.279985 ], [ 73.057851, 18.2800603 ], [ 73.0578246, 18.2791324 ], [ 73.0570851, 18.2795211 ], [ 73.0546769, 18.2801212 ], [ 73.0541078, 18.2799406 ], [ 73.0533155, 18.2802916 ], [ 73.0524043, 18.2809813 ], [ 73.052261563588587, 18.28115 ], [ 73.052261563588601, 18.28115 ], [ 73.0517281, 18.2817805 ], [ 73.0518365, 18.2825987 ], [ 73.052444, 18.2832131 ], [ 73.0531174, 18.283815 ], [ 73.0535136, 18.2853823 ], [ 73.0539229, 18.2872756 ], [ 73.0535455, 18.2879784 ], [ 73.0530514, 18.288078 ], [ 73.0524175, 18.2878398 ], [ 73.0517837, 18.2879025 ], [ 73.0512423, 18.2883037 ], [ 73.0511102, 18.2893569 ], [ 73.051612, 18.2904978 ], [ 73.0514272, 18.2914758 ], [ 73.0512027, 18.2919021 ], [ 73.0513422, 18.2922037 ], [ 73.051414, 18.2928926 ], [ 73.051871, 18.2931107 ], [ 73.0516649, 18.2940586 ], [ 73.0511651, 18.2959358 ], [ 73.0508927, 18.2961904 ], [ 73.050864, 18.2987648 ], [ 73.0512586, 18.2996695 ], [ 73.051455, 18.3003236 ], [ 73.051772, 18.3009379 ], [ 73.0520757, 18.3012889 ], [ 73.0531585, 18.3025677 ], [ 73.0534556, 18.3024862 ], [ 73.0542077, 18.3018557 ], [ 73.0545733, 18.3010263 ], [ 73.0547138, 18.3010467 ], [ 73.0553589, 18.3009991 ], [ 73.0560303, 18.3007516 ], [ 73.0566458, 18.3004951 ], [ 73.056976, 18.3001554 ], [ 73.0582576, 18.3004055 ], [ 73.0589496, 18.3001175 ], [ 73.0590747, 18.2997493 ], [ 73.0595353, 18.2995622 ], [ 73.0603805, 18.2993308 ], [ 73.0606594, 18.2992362 ], [ 73.0609023, 18.2996549 ], [ 73.061227, 18.300247 ], [ 73.0614222, 18.3002149 ], [ 73.0615907, 18.3000174 ], [ 73.0616261, 18.299795 ], [ 73.0620267, 18.2996529 ], [ 73.0622088, 18.2997565 ], [ 73.0624815, 18.2998461 ], [ 73.0626861, 18.299661 ], [ 73.0627827, 18.2992285 ], [ 73.0632934, 18.298831 ], [ 73.0640017, 18.2983052 ], [ 73.0642304, 18.2979641 ], [ 73.0643803, 18.2977725 ], [ 73.0644755, 18.2976674 ], [ 73.0646051, 18.2976278 ], [ 73.0654002, 18.2977228 ], [ 73.0650171, 18.2986514 ], [ 73.0658241, 18.2987878 ], [ 73.0679861, 18.2982947 ], [ 73.0686665, 18.2976584 ], [ 73.0682855, 18.2955947 ], [ 73.0688245, 18.2956002 ], [ 73.0688304, 18.2950853 ], [ 73.0692312, 18.2953467 ], [ 73.069355, 18.2963779 ], [ 73.0701651, 18.2962569 ], [ 73.0704374, 18.2960022 ], [ 73.0707069, 18.296005 ], [ 73.0712375, 18.2967827 ], [ 73.071775, 18.2969173 ], [ 73.0717693, 18.2974323 ], [ 73.0723083, 18.2974376 ], [ 73.072314, 18.2969228 ], [ 73.072853, 18.2969283 ], [ 73.0727207, 18.2966693 ], [ 73.0727349, 18.2953823 ], [ 73.0730073, 18.2951275 ], [ 73.0731539, 18.2940991 ], [ 73.0739609, 18.2942354 ], [ 73.0742276, 18.2944957 ], [ 73.0753057, 18.2945064 ], [ 73.0763922, 18.2937449 ], [ 73.07694, 18.2929782 ], [ 73.0777485, 18.2929863 ], [ 73.0780209, 18.2927315 ], [ 73.0796436, 18.2922329 ], [ 73.0815329, 18.2919944 ], [ 73.0824828, 18.2913607 ], [ 73.0830416, 18.2895639 ], [ 73.0843977, 18.2888051 ], [ 73.0846786, 18.287778 ], [ 73.0856323, 18.2868859 ], [ 73.0867116, 18.2867684 ], [ 73.0867173, 18.2862536 ], [ 73.0872577, 18.2861298 ], [ 73.0873934, 18.2860029 ], [ 73.0879058, 18.2864966 ], [ 73.0886483, 18.2862337 ], [ 73.0892663, 18.2860091 ], [ 73.0905838, 18.2854707 ], [ 73.0909979, 18.2844077 ], [ 73.0910038, 18.2827395 ], [ 73.091102, 18.28184 ], [ 73.091183905720214, 18.28135 ], [ 73.0916502, 18.2785604 ], [ 73.092082, 18.2779817 ], [ 73.0923547, 18.2777096 ], [ 73.092539, 18.2775712 ], [ 73.0927905, 18.27747 ], [ 73.0924122, 18.2780685 ], [ 73.0919277, 18.278784 ], [ 73.0918295, 18.2792248 ], [ 73.0919298, 18.2796807 ], [ 73.092192, 18.2797064 ], [ 73.0927483, 18.2788373 ], [ 73.0931014, 18.2783178 ], [ 73.0932386, 18.2777906 ], [ 73.0933417, 18.2771309 ], [ 73.0934647, 18.276777 ], [ 73.0935748, 18.2764916 ], [ 73.0935937, 18.2761862 ], [ 73.0938355, 18.2755902 ], [ 73.0939513, 18.2752439 ], [ 73.0942159, 18.2743959 ], [ 73.0943343, 18.2738588 ], [ 73.0944011, 18.273714 ], [ 73.0944949, 18.273545 ], [ 73.0949169, 18.2724427 ], [ 73.095099, 18.2720961 ], [ 73.0953299, 18.2722433 ], [ 73.0951483, 18.2725846 ], [ 73.0950035, 18.2729274 ], [ 73.0946554, 18.2741357 ], [ 73.0954289, 18.2735326 ], [ 73.0947431, 18.2743226 ], [ 73.0945427, 18.2750246 ], [ 73.0944675, 18.2753181 ], [ 73.0944052, 18.2760542 ], [ 73.0939942, 18.2773067 ], [ 73.0938225, 18.2777475 ], [ 73.0932669, 18.2788521 ], [ 73.0932719, 18.2788752 ], [ 73.093281, 18.2789264 ], [ 73.0932505, 18.2791654 ], [ 73.0931304, 18.2794276 ], [ 73.0928518, 18.2798782 ], [ 73.0925251, 18.2802668 ], [ 73.0921404, 18.281073 ], [ 73.092107693052014, 18.28115 ], [ 73.092058365300261, 18.281266129358375 ], [ 73.092022739940333, 18.28135 ], [ 73.0919411, 18.2815422 ], [ 73.0918781, 18.2817147 ], [ 73.0919817, 18.2823697 ], [ 73.0918734, 18.2835988 ], [ 73.0917698, 18.2841423 ], [ 73.0919667, 18.2844444 ], [ 73.0915236, 18.284831 ], [ 73.0915402, 18.2852211 ], [ 73.0913149, 18.2860804 ], [ 73.0909931, 18.2863891 ], [ 73.0908906, 18.2865597 ], [ 73.0904846, 18.2868062 ], [ 73.0902138, 18.2869319 ], [ 73.0896733, 18.2870557 ], [ 73.0900517, 18.2893766 ], [ 73.089895, 18.291435 ], [ 73.0893559, 18.2914295 ], [ 73.0894733, 18.2929755 ], [ 73.0890637, 18.2934864 ], [ 73.0882567, 18.2933492 ], [ 73.0879857, 18.2934756 ], [ 73.08798, 18.2939905 ], [ 73.0885206, 18.2938669 ], [ 73.0886534, 18.2939973 ], [ 73.0882327, 18.295538 ], [ 73.0874255, 18.2954006 ], [ 73.0868823, 18.2957818 ], [ 73.0870052, 18.296813 ], [ 73.0867328, 18.2970678 ], [ 73.0868625, 18.2975841 ], [ 73.0860539, 18.297576 ], [ 73.0859129, 18.2980895 ], [ 73.0856406, 18.2983443 ], [ 73.0856321, 18.2991165 ], [ 73.085217, 18.3001424 ], [ 73.0844057, 18.3003917 ], [ 73.0845285, 18.3014229 ], [ 73.0847923, 18.3019404 ], [ 73.0847869, 18.3024552 ], [ 73.0845143, 18.30271 ], [ 73.0842308, 18.3039946 ], [ 73.0835461, 18.3050177 ], [ 73.0832779, 18.3048857 ], [ 73.0827375, 18.3050095 ], [ 73.0828689, 18.3052683 ], [ 73.0835121, 18.3081071 ], [ 73.0840498, 18.3082407 ], [ 73.0841826, 18.3083713 ], [ 73.0844096, 18.3122356 ], [ 73.08519, 18.3148183 ], [ 73.0854567, 18.3150783 ], [ 73.0862427, 18.317146 ], [ 73.0867761, 18.3176663 ], [ 73.0867733, 18.3179239 ], [ 73.0865009, 18.3181785 ], [ 73.0864952, 18.3186935 ], [ 73.086629, 18.3188232 ], [ 73.0871668, 18.3189577 ], [ 73.0871611, 18.3194726 ], [ 73.0876988, 18.3196062 ], [ 73.0878317, 18.3197368 ], [ 73.087689, 18.3205077 ], [ 73.0874295, 18.3213109 ], [ 73.0877074, 18.3221206 ], [ 73.0881151, 18.3234446 ], [ 73.0891236, 18.3247686 ], [ 73.0899186, 18.3256496 ], [ 73.0907115, 18.3263575 ], [ 73.0916567, 18.3269533 ], [ 73.0943164, 18.32705 ], [ 73.0950685, 18.3273606 ], [ 73.0961628, 18.3280736 ], [ 73.0966982, 18.3292295 ], [ 73.0971273, 18.330248 ], [ 73.0976852, 18.3311442 ], [ 73.097708640132055, 18.331179794921876 ], [ 73.097771419211867, 18.331275127850709 ], [ 73.097840345054109, 18.331379794921876 ], [ 73.0982217, 18.3319589 ], [ 73.0991014, 18.3322848 ], [ 73.0994458, 18.3324529 ], [ 73.1002612, 18.3321881 ], [ 73.1010122, 18.33174 ], [ 73.101516055866583, 18.331179794921876 ], [ 73.101516055866568, 18.331179794921876 ], [ 73.1017633, 18.3309049 ], [ 73.102407, 18.3304364 ], [ 73.1033511, 18.3295605 ], [ 73.1041665, 18.3289494 ], [ 73.1056686, 18.328155 ], [ 73.1079635, 18.3267445 ], [ 73.1083937, 18.3261792 ], [ 73.1087048, 18.3259694 ], [ 73.108737682812503, 18.325938223061019 ], [ 73.109605, 18.3251159 ], [ 73.1100298, 18.3249978 ], [ 73.110562, 18.3249927 ], [ 73.1111885, 18.3251648 ], [ 73.1119696, 18.32567 ], [ 73.1124298, 18.3261613 ], [ 73.1134437, 18.3269359 ], [ 73.115243, 18.3265479 ], [ 73.1158127, 18.3261629 ], [ 73.1162064, 18.3257515 ], [ 73.1161002, 18.3253033 ], [ 73.1163075, 18.3250811 ], [ 73.1162176, 18.3249112 ], [ 73.1169951, 18.3252094 ], [ 73.11688, 18.3259477 ], [ 73.1161981, 18.3267135 ], [ 73.1143203, 18.3271009 ], [ 73.1151004, 18.3285049 ], [ 73.1156914, 18.3287916 ], [ 73.1180413, 18.3302817 ], [ 73.1187449, 18.331354 ], [ 73.117992157279815, 18.331379794921876 ], [ 73.1175572, 18.3313947 ], [ 73.117542580319451, 18.331379794921876 ], [ 73.117505216875699, 18.33134170208897 ], [ 73.117346409854321, 18.331179794921876 ], [ 73.1163995, 18.3302144 ], [ 73.1148567, 18.3292214 ], [ 73.1144244, 18.3291277 ], [ 73.1141261, 18.3289311 ], [ 73.113786, 18.328707 ], [ 73.1134829, 18.328489 ], [ 73.1126756, 18.3275246 ], [ 73.1117282, 18.3267058 ], [ 73.1109525, 18.326001 ], [ 73.1103195, 18.3257372 ], [ 73.1094998, 18.3257729 ], [ 73.1089119, 18.3270347 ], [ 73.1080632, 18.3276081 ], [ 73.1072586, 18.3281357 ], [ 73.1065945, 18.3287407 ], [ 73.1062061, 18.3290778 ], [ 73.1059926, 18.3292346 ], [ 73.1059222, 18.3295722 ], [ 73.1056527, 18.3295695 ], [ 73.1053803, 18.3298243 ], [ 73.104031, 18.3299401 ], [ 73.1040254, 18.330455 ], [ 73.1034848, 18.3305778 ], [ 73.1026691, 18.331214 ], [ 73.102696082394857, 18.331379794921876 ], [ 73.102795, 18.3319876 ], [ 73.1025226, 18.3322424 ], [ 73.1023714, 18.3337857 ], [ 73.1021019, 18.3337831 ], [ 73.1021074, 18.3332682 ], [ 73.1002189, 18.3333777 ], [ 73.0999481, 18.3335041 ], [ 73.1000768, 18.3340205 ], [ 73.1002091, 18.3342792 ], [ 73.09967, 18.3342739 ], [ 73.0996419, 18.3368483 ], [ 73.0993722, 18.3368456 ], [ 73.0993807, 18.3360732 ], [ 73.0988415, 18.3360679 ], [ 73.09885, 18.3352957 ], [ 73.0993892, 18.3353009 ], [ 73.0991337, 18.334011 ], [ 73.0977829, 18.334255 ], [ 73.0976884, 18.334423 ], [ 73.0969728, 18.3343752 ], [ 73.0964295, 18.3347564 ], [ 73.0964124, 18.3363011 ], [ 73.0956065, 18.3360356 ], [ 73.0956151, 18.3352633 ], [ 73.0960126, 18.3343064 ], [ 73.0963334, 18.3335273 ], [ 73.0966338, 18.3327941 ], [ 73.0963988, 18.3319233 ], [ 73.09610190647247, 18.331179794921876 ], [ 73.096101906472455, 18.331179794921876 ], [ 73.0959901, 18.3308998 ], [ 73.0949816, 18.3297795 ], [ 73.0940803, 18.3291888 ], [ 73.0926867, 18.3286032 ], [ 73.0916782, 18.3282365 ], [ 73.0900678, 18.3279666 ], [ 73.0886312, 18.3278495 ], [ 73.0873212, 18.3279259 ], [ 73.0858835, 18.3280277 ], [ 73.0850467, 18.3280277 ], [ 73.0841036, 18.3280328 ], [ 73.0835028, 18.3279717 ], [ 73.0832882, 18.3276662 ], [ 73.0829234, 18.3270755 ], [ 73.0823641, 18.3266338 ], [ 73.0823754, 18.3256039 ], [ 73.081719, 18.3240524 ], [ 73.0811798, 18.3240471 ], [ 73.0811911, 18.3230173 ], [ 73.0803811, 18.3231375 ], [ 73.0798462, 18.3227462 ], [ 73.0797309, 18.3209428 ], [ 73.0794641, 18.3206826 ], [ 73.0790717, 18.3196487 ], [ 73.0785325, 18.3196434 ], [ 73.0782771, 18.3183533 ], [ 73.0777381, 18.318348 ], [ 73.0781477, 18.3178372 ], [ 73.078176, 18.3152626 ], [ 73.0779093, 18.3150025 ], [ 73.0772529, 18.313451 ], [ 73.0767139, 18.3134456 ], [ 73.0767309, 18.3119009 ], [ 73.0761934, 18.3117663 ], [ 73.0756585, 18.3113752 ], [ 73.0756642, 18.3108602 ], [ 73.0745903, 18.3104628 ], [ 73.0727221, 18.3087708 ], [ 73.0723287, 18.307737 ], [ 73.0719305, 18.307218 ], [ 73.0705799, 18.3074618 ], [ 73.0705714, 18.3082341 ], [ 73.0689557, 18.3080885 ], [ 73.068689, 18.3078285 ], [ 73.0681513, 18.3076947 ], [ 73.067899, 18.3061473 ], [ 73.0668194, 18.3062647 ], [ 73.066299, 18.3054011 ], [ 73.064679, 18.3048273 ], [ 73.0645521, 18.3040536 ], [ 73.0646903, 18.3037975 ], [ 73.063325, 18.3039929 ], [ 73.0623836, 18.3034149 ], [ 73.061993, 18.3033094 ], [ 73.061323, 18.3033354 ], [ 73.0609069, 18.3046599 ], [ 73.0600984, 18.3046516 ], [ 73.0598302, 18.3045206 ], [ 73.0595522, 18.3052902 ], [ 73.0582059, 18.3051473 ], [ 73.0573943, 18.3053966 ], [ 73.0565773, 18.3061607 ], [ 73.0560381, 18.3061551 ], [ 73.0549515, 18.3069165 ], [ 73.0533342, 18.3069001 ], [ 73.0527909, 18.3072811 ], [ 73.0527822, 18.3080534 ], [ 73.0522431, 18.3080479 ], [ 73.0521022, 18.3085614 ], [ 73.0519449, 18.3106196 ], [ 73.0514087, 18.3103567 ], [ 73.0511305, 18.3111263 ], [ 73.0505913, 18.3111209 ], [ 73.0504503, 18.3116344 ], [ 73.0501779, 18.3118889 ], [ 73.0501664, 18.3129188 ], [ 73.049891, 18.3134308 ], [ 73.0498854, 18.3139458 ], [ 73.0500177, 18.3142046 ], [ 73.048944, 18.3138069 ], [ 73.0481439, 18.3130263 ], [ 73.0476062, 18.3128925 ], [ 73.047589, 18.3144372 ], [ 73.0473193, 18.3144344 ], [ 73.0473252, 18.3139196 ], [ 73.0467861, 18.3139141 ], [ 73.0467918, 18.3133992 ], [ 73.0459848, 18.3132617 ], [ 73.0457181, 18.3130016 ], [ 73.0454486, 18.3129988 ], [ 73.0440965, 18.3133717 ], [ 73.0439816, 18.311568 ], [ 73.0442598, 18.3107986 ], [ 73.0453465, 18.3100373 ], [ 73.0453494, 18.3097799 ], [ 73.0450827, 18.3095196 ], [ 73.0448277, 18.3082297 ], [ 73.0444297, 18.3077105 ], [ 73.0430819, 18.3076967 ], [ 73.0430791, 18.3079542 ], [ 73.0436181, 18.3079598 ], [ 73.0436153, 18.3082172 ], [ 73.0425342, 18.3084635 ], [ 73.0425284, 18.3089785 ], [ 73.0419924, 18.3087154 ], [ 73.0418803, 18.3066546 ], [ 73.0419057, 18.3045646 ], [ 73.0415659, 18.3037747 ], [ 73.0411163, 18.3031938 ], [ 73.0406518, 18.3027879 ], [ 73.0394614, 18.3010723 ], [ 73.0388212, 18.3004947 ], [ 73.0383005, 18.2989179 ], [ 73.0381302, 18.298143 ], [ 73.037917, 18.2965498 ], [ 73.0375222, 18.2952949 ], [ 73.0375428, 18.2941677 ], [ 73.0370943, 18.2933546 ], [ 73.0368618, 18.2931188 ], [ 73.0368588, 18.2930342 ], [ 73.0368454, 18.2929097 ], [ 73.0370592, 18.2929298 ], [ 73.0371324, 18.2928407 ], [ 73.0371888, 18.2927625 ], [ 73.0372824, 18.2928152 ], [ 73.0375077, 18.2927946 ], [ 73.0379929, 18.2925835 ], [ 73.0385832, 18.2921508 ], [ 73.039257, 18.2921788 ], [ 73.0408315, 18.2917181 ], [ 73.0415313, 18.2905848 ], [ 73.041874, 18.2903368 ], [ 73.0422691, 18.2899308 ], [ 73.0428085, 18.2895053 ], [ 73.0430944, 18.2889837 ], [ 73.042355, 18.288379 ], [ 73.0426605, 18.2875568 ], [ 73.0431518, 18.2865457 ], [ 73.043978, 18.2859039 ], [ 73.0436, 18.2855595 ], [ 73.0438334, 18.2851045 ], [ 73.0440126, 18.2847913 ], [ 73.0444833, 18.2844744 ], [ 73.0451015, 18.2835153 ], [ 73.045709679650585, 18.28115 ], [ 73.045709679650599, 18.28115 ], [ 73.046092, 18.2796631 ], [ 73.0474437, 18.2792902 ], [ 73.0478517, 18.2789086 ], [ 73.0484023, 18.2778844 ], [ 73.048947, 18.2773751 ], [ 73.0493632, 18.2763494 ], [ 73.0504454, 18.2759738 ], [ 73.0530322, 18.2735546 ], [ 73.0538523, 18.2725331 ], [ 73.0541275, 18.2720209 ], [ 73.0541503, 18.2699614 ], [ 73.0538867, 18.2694437 ], [ 73.0532222, 18.2686645 ], [ 73.0526846, 18.2685299 ], [ 73.052418, 18.2682696 ], [ 73.0508069, 18.2677384 ], [ 73.0497291, 18.2677274 ], [ 73.0494624, 18.2674671 ], [ 73.0478514, 18.2669357 ], [ 73.0475849, 18.2666756 ], [ 73.0467763, 18.2666673 ], [ 73.0435514, 18.265862 ], [ 73.0432806, 18.2659884 ], [ 73.0431511, 18.2654721 ], [ 73.0424866, 18.2646928 ], [ 73.0416796, 18.2645554 ], [ 73.0411464, 18.2640351 ], [ 73.0371046, 18.2639935 ], [ 73.0368321, 18.2642483 ], [ 73.0354849, 18.2642345 ], [ 73.034943, 18.2644862 ], [ 73.034126, 18.2652504 ], [ 73.0330409, 18.2658833 ], [ 73.0327597, 18.2669103 ], [ 73.0311458, 18.2666363 ], [ 73.0311517, 18.2661213 ], [ 73.0306142, 18.2659867 ], [ 73.0298132, 18.2653352 ], [ 73.0302226, 18.2648244 ], [ 73.0300942, 18.2643082 ], [ 73.0292859, 18.2642999 ], [ 73.0290251, 18.2635248 ], [ 73.0279472, 18.2635136 ], [ 73.0278003, 18.264542 ], [ 73.0275165, 18.2658264 ], [ 73.027101, 18.2668519 ], [ 73.0257508, 18.2670956 ], [ 73.0258822, 18.2673543 ], [ 73.0257363, 18.2683828 ], [ 73.0246554, 18.2686291 ], [ 73.0243948, 18.267854 ], [ 73.0233154, 18.267971 ], [ 73.0222316, 18.2684749 ], [ 73.0211538, 18.2684637 ], [ 73.0203381, 18.2690993 ], [ 73.0204694, 18.2693583 ], [ 73.0204636, 18.2698731 ], [ 73.0201884, 18.2703851 ], [ 73.0201825, 18.2709001 ], [ 73.020577, 18.2718049 ], [ 73.021116, 18.2718104 ], [ 73.0216578, 18.2715586 ], [ 73.0232776, 18.2713178 ], [ 73.0239463, 18.2717113 ], [ 73.0236157, 18.2771148 ], [ 73.0227926, 18.2783936 ], [ 73.0222477, 18.278903 ], [ 73.0219667, 18.27993 ], [ 73.0214218, 18.2804392 ], [ 73.0200671, 18.2805312 ], [ 73.018800524014026, 18.28115 ], [ 73.0184323, 18.2813299 ], [ 73.018408009747162, 18.28135 ], [ 73.0174764, 18.2821209 ], [ 73.016238, 18.282222 ], [ 73.0147671, 18.2830067 ], [ 73.0124127, 18.284207 ], [ 73.0104131, 18.2843025 ], [ 73.0093769, 18.2847729 ], [ 73.0091444, 18.2860753 ], [ 73.0080415, 18.2862913 ], [ 73.0077419, 18.2870194 ], [ 73.0075093, 18.2869219 ], [ 73.0076807, 18.2861044 ], [ 73.0088314, 18.2859044 ], [ 73.0088249, 18.2847439 ], [ 73.0077062, 18.2847874 ], [ 73.0055899, 18.2850276 ], [ 73.0045111, 18.2849405 ], [ 73.0023485, 18.2847767 ], [ 73.0015452, 18.2846112 ], [ 73.0002043, 18.2838571 ], [ 72.9990713, 18.2835219 ], [ 72.9980966, 18.2849909 ], [ 72.9979089, 18.28554 ], [ 72.998135, 18.2860292 ], [ 72.9985797, 18.28614 ], [ 72.9990244, 18.2863985 ], [ 72.9994664, 18.286645 ], [ 72.9995963, 18.286861 ], [ 72.9990654, 18.2868911 ], [ 72.9987771, 18.2868317 ], [ 72.9982659, 18.2867301 ], [ 72.9976576, 18.2865241 ], [ 72.9974553, 18.2863007 ], [ 72.997403, 18.2858573 ], [ 72.9976533, 18.2846955 ], [ 72.9985035, 18.2836386 ], [ 72.9989745, 18.2831236 ], [ 72.9974548, 18.2829968 ], [ 72.9965367, 18.2832721 ], [ 72.9959251, 18.2828765 ], [ 72.9953906, 18.2824853 ], [ 72.995403703734524, 18.28135 ], [ 72.9954114, 18.2806832 ], [ 72.9962213, 18.2805624 ], [ 72.996357, 18.2804356 ], [ 72.996656, 18.277864 ], [ 72.9960066, 18.2757975 ], [ 72.9954675, 18.2757918 ], [ 72.9952069, 18.2750167 ], [ 72.9944016, 18.2747508 ], [ 72.9942721, 18.2742345 ], [ 72.9940056, 18.2739742 ], [ 72.9940175, 18.2729446 ], [ 72.9938862, 18.2726856 ], [ 72.9925418, 18.2724142 ], [ 72.9923978, 18.273185 ], [ 72.9918471, 18.2742092 ], [ 72.991838, 18.2749814 ], [ 72.9915598, 18.2757508 ], [ 72.9919174, 18.2782615 ], [ 72.9919782, 18.2799169 ], [ 72.9918318, 18.2800089 ], [ 72.9916741, 18.2802475 ], [ 72.9915209, 18.2801762 ], [ 72.9914667, 18.2803089 ], [ 72.9915933, 18.280421 ], [ 72.9915754, 18.2805715 ], [ 72.9917379, 18.2807737 ], [ 72.991476577758633, 18.28135 ], [ 72.9913697, 18.2815857 ], [ 72.9912108, 18.2816084 ], [ 72.9910092, 18.2818479 ], [ 72.9908734, 18.2819191 ], [ 72.991303416033205, 18.28115 ], [ 72.9913515, 18.281064 ], [ 72.9912314, 18.2810047 ], [ 72.9911545, 18.2810284 ], [ 72.9911044, 18.2811166 ], [ 72.9904154, 18.2807355 ], [ 72.9903876, 18.2806297 ], [ 72.9903507, 18.2805772 ], [ 72.9902684, 18.2805573 ], [ 72.9901808, 18.2805879 ], [ 72.9864324, 18.2783845 ], [ 72.986352, 18.2783964 ], [ 72.984444673141923, 18.28135 ], [ 72.9831381, 18.2833733 ], [ 72.9839456, 18.2839042 ], [ 72.9847644, 18.2828249 ], [ 72.9884595, 18.2850139 ], [ 72.9884587, 18.2856225 ], [ 72.9877316, 18.2869185 ], [ 72.9872744, 18.287525 ], [ 72.9871464, 18.2875499 ], [ 72.986803, 18.2879603 ], [ 72.9868519, 18.288052 ], [ 72.9867071, 18.2883222 ], [ 72.9865741, 18.2887421 ], [ 72.9859411, 18.2897229 ], [ 72.9843805, 18.2888134 ], [ 72.9843348, 18.2888797 ], [ 72.9855064, 18.2896181 ], [ 72.9854165, 18.2905403 ], [ 72.9843631, 18.2924013 ], [ 72.9848847, 18.2927586 ], [ 72.984457, 18.2928169 ], [ 72.9838649, 18.2927377 ], [ 72.9837937, 18.2930432 ], [ 72.9840175, 18.2931501 ], [ 72.9839899, 18.2933746 ], [ 72.9838295, 18.2938911 ], [ 72.9835027, 18.2945076 ], [ 72.9831907, 18.2948839 ], [ 72.9831448, 18.2953861 ], [ 72.982858, 18.2962496 ], [ 72.9824955, 18.2973063 ], [ 72.9822008, 18.2981573 ], [ 72.981924, 18.2986357 ], [ 72.9815145, 18.299224 ], [ 72.981186, 18.2996748 ], [ 72.9806271, 18.300166 ], [ 72.9798334, 18.300617 ], [ 72.979655, 18.3006319 ], [ 72.9791858, 18.3004356 ], [ 72.9789114, 18.299736 ], [ 72.9786293, 18.299237 ], [ 72.9781702, 18.2989053 ], [ 72.9778982, 18.298865 ], [ 72.9778463, 18.2989591 ], [ 72.9776096, 18.2990436 ], [ 72.9773974, 18.2990439 ], [ 72.9765021, 18.2995259 ], [ 72.9762054, 18.299699 ], [ 72.976019, 18.2997455 ], [ 72.9758797, 18.2998429 ], [ 72.9756541, 18.299848 ], [ 72.975057, 18.300536 ], [ 72.9750717, 18.3007163 ], [ 72.9739882, 18.3013786 ], [ 72.9732165, 18.3015923 ], [ 72.972416, 18.3017376 ], [ 72.9715544, 18.3017092 ], [ 72.9710801, 18.3015471 ], [ 72.9708208, 18.3013443 ], [ 72.9707978, 18.3012077 ], [ 72.9708383, 18.3008383 ], [ 72.9710614, 18.300598 ], [ 72.9709505, 18.3004533 ], [ 72.9709934, 18.3001176 ], [ 72.9708898, 18.3000593 ], [ 72.9709518, 18.2998623 ], [ 72.9702614, 18.2998287 ], [ 72.9701533, 18.2998914 ], [ 72.9701302, 18.3000107 ], [ 72.9702599, 18.3001684 ], [ 72.9701867, 18.3003958 ], [ 72.9693544, 18.3011975 ], [ 72.9689985, 18.30172 ], [ 72.9688532, 18.3021635 ], [ 72.9686373, 18.3035414 ], [ 72.9684785, 18.3042293 ], [ 72.9681584, 18.3046764 ], [ 72.9682202, 18.3050634 ], [ 72.9680263, 18.3054006 ], [ 72.9680849, 18.3057173 ], [ 72.9679304, 18.3060389 ], [ 72.9680955, 18.306702 ], [ 72.9683326, 18.3068891 ], [ 72.9685397, 18.3080506 ], [ 72.9683235, 18.3091839 ], [ 72.9681716, 18.3095856 ], [ 72.9679204, 18.3097062 ], [ 72.96756, 18.3102865 ], [ 72.9672284, 18.3106205 ], [ 72.966989, 18.3107246 ], [ 72.9665088, 18.3114116 ], [ 72.9662092, 18.3116114 ], [ 72.9660718, 18.3117831 ], [ 72.9653731, 18.3121795 ], [ 72.965002, 18.3125278 ], [ 72.9648884, 18.3129088 ], [ 72.9647088, 18.3133064 ], [ 72.9633159, 18.3138419 ], [ 72.9627766, 18.3135377 ], [ 72.9617021, 18.3128144 ], [ 72.9616687, 18.3127137 ], [ 72.9617719, 18.312628 ], [ 72.9614401, 18.3123734 ], [ 72.9612207, 18.3124042 ], [ 72.9607654, 18.3120827 ], [ 72.9606771, 18.3117872 ], [ 72.9602838, 18.3116051 ], [ 72.9598037, 18.3114806 ], [ 72.9594604, 18.3115509 ], [ 72.9585841, 18.3119476 ], [ 72.9585053, 18.3122346 ], [ 72.9579965, 18.3129275 ], [ 72.9577116, 18.3130301 ], [ 72.9576494, 18.3133069 ], [ 72.9573602, 18.3139455 ], [ 72.9567892, 18.3144899 ], [ 72.9562533, 18.3145034 ], [ 72.956374, 18.3150926 ], [ 72.9561498, 18.3150664 ], [ 72.9561157, 18.3154107 ], [ 72.9553041, 18.3159304 ], [ 72.9551796, 18.3163528 ], [ 72.955234, 18.3168169 ], [ 72.9554484, 18.3170663 ], [ 72.9557187, 18.3170431 ], [ 72.9556908, 18.3173143 ], [ 72.9556978, 18.3174432 ], [ 72.955889, 18.3172939 ], [ 72.9557611, 18.3178525 ], [ 72.9558687, 18.3180721 ], [ 72.9557981, 18.3183249 ], [ 72.9563201, 18.3183922 ], [ 72.9567897, 18.3183916 ], [ 72.9572178, 18.3182249 ], [ 72.9573834, 18.3183313 ], [ 72.9574636, 18.3183924 ], [ 72.9575658, 18.3183415 ], [ 72.9576516, 18.3182345 ], [ 72.9578233, 18.318423 ], [ 72.9578608, 18.3185655 ], [ 72.9579571, 18.3186419 ], [ 72.9580915, 18.3186317 ], [ 72.9581502, 18.3187387 ], [ 72.9580754, 18.3188507 ], [ 72.9580859, 18.3191308 ], [ 72.9581771, 18.3193142 ], [ 72.9583863, 18.3193192 ], [ 72.958574, 18.3192276 ], [ 72.9586062, 18.3194211 ], [ 72.9584721, 18.3196452 ], [ 72.9585207, 18.319854 ], [ 72.9587084, 18.319966 ], [ 72.9589334, 18.3199049 ], [ 72.9590517, 18.319803 ], [ 72.9594162, 18.3193498 ], [ 72.959615, 18.3191868 ], [ 72.9599205, 18.3189373 ], [ 72.9601512, 18.3189067 ], [ 72.9604143, 18.3190239 ], [ 72.9607093, 18.3191003 ], [ 72.9609185, 18.3191716 ], [ 72.9610524, 18.3192327 ], [ 72.961219, 18.3191767 ], [ 72.9612133, 18.3190697 ], [ 72.9611009, 18.3189933 ], [ 72.9609451, 18.3187489 ], [ 72.9609022, 18.3186572 ], [ 72.9610148, 18.3183466 ], [ 72.9611439, 18.318204 ], [ 72.9611704, 18.3179392 ], [ 72.9611704, 18.317766 ], [ 72.9611704, 18.3175572 ], [ 72.9612751, 18.3175725 ], [ 72.9612886, 18.3176209 ], [ 72.9614468, 18.3176183 ], [ 72.9614818, 18.3175318 ], [ 72.9611813, 18.3174605 ], [ 72.9612644, 18.3171091 ], [ 72.9612403, 18.3170785 ], [ 72.9612564, 18.3170327 ], [ 72.9611868, 18.3169767 ], [ 72.9612297, 18.3168697 ], [ 72.9614173, 18.3169665 ], [ 72.9616213, 18.3167679 ], [ 72.9616562, 18.3167093 ], [ 72.9616891, 18.3166358 ], [ 72.961995, 18.3165704 ], [ 72.9641731, 18.3152555 ], [ 72.9660469, 18.3154142 ], [ 72.9665989, 18.3155303 ], [ 72.9670174, 18.3156016 ], [ 72.9674685, 18.315897 ], [ 72.9677576, 18.3159479 ], [ 72.9687667, 18.3159276 ], [ 72.9691309, 18.315897 ], [ 72.9694963, 18.3159072 ], [ 72.9699898, 18.3157239 ], [ 72.9708481, 18.3156526 ], [ 72.9716635, 18.3157035 ], [ 72.9717171, 18.3159174 ], [ 72.9734117, 18.3161007 ], [ 72.9738194, 18.3163961 ], [ 72.9740024, 18.3165896 ], [ 72.9741311, 18.3169054 ], [ 72.9742599, 18.3170989 ], [ 72.9745603, 18.3170378 ], [ 72.9750109, 18.3170072 ], [ 72.9751284, 18.3170072 ], [ 72.9754508, 18.3168646 ], [ 72.9755688, 18.3166304 ], [ 72.9756224, 18.3165081 ], [ 72.9756863, 18.3164165 ], [ 72.9757614, 18.3165591 ], [ 72.9756439, 18.3167424 ], [ 72.9755473, 18.3169359 ], [ 72.9753429, 18.3170989 ], [ 72.9750962, 18.3171905 ], [ 72.9747958, 18.3171905 ], [ 72.9743988, 18.3172211 ], [ 72.9739482, 18.3173535 ], [ 72.9737658, 18.3168544 ], [ 72.9733152, 18.3166507 ], [ 72.9730684, 18.3164979 ], [ 72.9729289, 18.3164063 ], [ 72.9725534, 18.3163044 ], [ 72.9722638, 18.3163044 ], [ 72.9718561, 18.3163859 ], [ 72.9715127, 18.3165183 ], [ 72.9711372, 18.3166202 ], [ 72.9707617, 18.3167933 ], [ 72.9709876, 18.3172007 ], [ 72.9712231, 18.317435 ], [ 72.9714489, 18.3175063 ], [ 72.9716415, 18.317598 ], [ 72.9718029, 18.3178424 ], [ 72.9719317, 18.3180767 ], [ 72.9720599, 18.3182396 ], [ 72.9722106, 18.3184026 ], [ 72.9721028, 18.3185044 ], [ 72.9717702, 18.3181581 ], [ 72.9714054, 18.3177915 ], [ 72.9709548, 18.3173841 ], [ 72.9706544, 18.3170174 ], [ 72.9704184, 18.3167628 ], [ 72.9702044, 18.3165998 ], [ 72.9701287, 18.3165081 ], [ 72.9699249, 18.3163248 ], [ 72.9698283, 18.3161415 ], [ 72.9696357, 18.3162637 ], [ 72.969979, 18.3165896 ], [ 72.9702467, 18.3168341 ], [ 72.970494, 18.3171294 ], [ 72.9707295, 18.3174146 ], [ 72.9709441, 18.3176693 ], [ 72.9711914, 18.3179341 ], [ 72.97162, 18.3182498 ], [ 72.9715878, 18.3184841 ], [ 72.971105, 18.3187591 ], [ 72.9708475, 18.3189628 ], [ 72.9711163, 18.3196248 ], [ 72.9712231, 18.3199202 ], [ 72.9714753, 18.3201951 ], [ 72.9715991, 18.3206331 ], [ 72.9714918, 18.3209387 ], [ 72.9713733, 18.3211322 ], [ 72.9710227, 18.3213203 ], [ 72.9709554, 18.3215294 ], [ 72.9705048, 18.3221303 ], [ 72.9702795, 18.3224053 ], [ 72.9700005, 18.3226701 ], [ 72.9695923, 18.3229757 ], [ 72.9694528, 18.3233016 ], [ 72.9693992, 18.3237803 ], [ 72.9696245, 18.3243506 ], [ 72.9698498, 18.3246663 ], [ 72.9702038, 18.3252265 ], [ 72.9704828, 18.3258172 ], [ 72.9706437, 18.3262653 ], [ 72.9709656, 18.3264792 ], [ 72.9713518, 18.3264079 ], [ 72.9717059, 18.3264996 ], [ 72.9720926, 18.3265098 ], [ 72.9725534, 18.3263774 ], [ 72.9730791, 18.326194 ], [ 72.9734659, 18.3262653 ], [ 72.9738092, 18.3265403 ], [ 72.9741413, 18.3268255 ], [ 72.974431, 18.3269986 ], [ 72.9747427, 18.3271107 ], [ 72.9751503, 18.3269579 ], [ 72.9755897, 18.326744 ], [ 72.9759545, 18.326744 ], [ 72.9765231, 18.3267644 ], [ 72.9773814, 18.3267746 ], [ 72.9775643, 18.3269579 ], [ 72.9776604, 18.3272023 ], [ 72.9777462, 18.3274671 ], [ 72.9778213, 18.327793 ], [ 72.9778862, 18.3280273 ], [ 72.9779613, 18.328231 ], [ 72.9782504, 18.328343 ], [ 72.9783148, 18.3285467 ], [ 72.9779506, 18.3284958 ], [ 72.9778623, 18.328416 ], [ 72.9777253, 18.3282921 ], [ 72.9775965, 18.328068 ], [ 72.9775214, 18.3277319 ], [ 72.9774463, 18.327406 ], [ 72.9773814, 18.3270699 ], [ 72.9769737, 18.3269681 ], [ 72.9765124, 18.3269783 ], [ 72.9761476, 18.3270394 ], [ 72.9756546, 18.3271208 ], [ 72.9749889, 18.3273144 ], [ 72.9746348, 18.3275995 ], [ 72.9741096, 18.3277116 ], [ 72.9738843, 18.3275486 ], [ 72.973659, 18.3271718 ], [ 72.9734123, 18.3268153 ], [ 72.9731006, 18.3265301 ], [ 72.9727793, 18.326469 ], [ 72.9726178, 18.326632 ], [ 72.9724896, 18.3268357 ], [ 72.972275, 18.3270597 ], [ 72.9720063, 18.3270801 ], [ 72.9717273, 18.3269783 ], [ 72.9712343, 18.3269375 ], [ 72.9708481, 18.3268662 ], [ 72.9704404, 18.326632 ], [ 72.9703116, 18.3264588 ], [ 72.9701293, 18.3260413 ], [ 72.9698219, 18.3257264 ], [ 72.9693085, 18.3248563 ], [ 72.968896, 18.3241719 ], [ 72.9690446, 18.3235053 ], [ 72.9698814, 18.3210201 ], [ 72.9699672, 18.3203276 ], [ 72.9697527, 18.3196554 ], [ 72.9693021, 18.3189831 ], [ 72.9683161, 18.3182396 ], [ 72.9675865, 18.3177304 ], [ 72.9663232, 18.3173484 ], [ 72.9651645, 18.3175486 ], [ 72.964477, 18.3179038 ], [ 72.963792, 18.3183063 ], [ 72.9633795, 18.318647 ], [ 72.9630294, 18.3187952 ], [ 72.9620043, 18.3194066 ], [ 72.9615918, 18.3197725 ], [ 72.9611484, 18.3200933 ], [ 72.9604958, 18.3203299 ], [ 72.9598422, 18.3206492 ], [ 72.9594353, 18.3212501 ], [ 72.9577452, 18.3210915 ], [ 72.9569321, 18.3214694 ], [ 72.9567878, 18.3222403 ], [ 72.9559701, 18.3230038 ], [ 72.9554128, 18.3245427 ], [ 72.9551402, 18.3247973 ], [ 72.9534746, 18.3288988 ], [ 72.9526538, 18.3299197 ], [ 72.9523721, 18.3309466 ], [ 72.9520996, 18.3312012 ], [ 72.952050585538572, 18.331379794921876 ], [ 72.9518178, 18.332228 ], [ 72.9512727, 18.332737 ], [ 72.9509879, 18.3340212 ], [ 72.9504428, 18.3345302 ], [ 72.9504368, 18.335045 ], [ 72.9498885, 18.3358116 ], [ 72.9493432, 18.3363206 ], [ 72.9490646, 18.33709 ], [ 72.9483822, 18.3378551 ], [ 72.9470327, 18.3379689 ], [ 72.9467602, 18.3382233 ], [ 72.9459484, 18.338472 ], [ 72.9448626, 18.3391044 ], [ 72.9448596, 18.3393618 ], [ 72.9453986, 18.3393677 ], [ 72.9452605, 18.3396236 ], [ 72.9452451, 18.3409108 ], [ 72.9451077, 18.3411667 ], [ 72.943757, 18.3414096 ], [ 72.9437479, 18.3421819 ], [ 72.9423939, 18.3426822 ], [ 72.9422525, 18.3431957 ], [ 72.9415698, 18.3439605 ], [ 72.9394272, 18.3427784 ], [ 72.9383595, 18.3418662 ], [ 72.9383534, 18.3423811 ], [ 72.9372782, 18.3421119 ], [ 72.9372722, 18.3426268 ], [ 72.9361954, 18.342486 ], [ 72.9359288, 18.3422257 ], [ 72.9340403, 18.3423344 ], [ 72.9338929, 18.3433626 ], [ 72.9333476, 18.3438715 ], [ 72.9332072, 18.344385 ], [ 72.9337464, 18.3443909 ], [ 72.9334706, 18.3449027 ], [ 72.9353531, 18.3453089 ], [ 72.9360187, 18.3459602 ], [ 72.9359943, 18.3480197 ], [ 72.9354398, 18.3493009 ], [ 72.9344846, 18.3503204 ], [ 72.9320569, 18.3504223 ], [ 72.9317889, 18.3502911 ], [ 72.931795, 18.3497763 ], [ 72.9277621, 18.3488309 ], [ 72.9274956, 18.3485704 ], [ 72.9266869, 18.3485618 ], [ 72.9253344, 18.3489337 ], [ 72.925193, 18.349447 ], [ 72.9249203, 18.3497014 ], [ 72.9247798, 18.3502149 ], [ 72.9242406, 18.3502091 ], [ 72.9241146, 18.3494353 ], [ 72.9234504, 18.3486557 ], [ 72.9231794, 18.348781 ], [ 72.9223707, 18.3487721 ], [ 72.9220994, 18.3488984 ], [ 72.9219734, 18.3481246 ], [ 72.9222491, 18.3476128 ], [ 72.9222584, 18.3468405 ], [ 72.9221272, 18.3465816 ], [ 72.9210535, 18.3461832 ], [ 72.920787, 18.3459229 ], [ 72.9197073, 18.3460403 ], [ 72.9194283, 18.3468095 ], [ 72.9183455, 18.3471836 ], [ 72.917529, 18.3478186 ], [ 72.9173877, 18.3483321 ], [ 72.9171149, 18.3485865 ], [ 72.9170964, 18.350131 ], [ 72.9162784, 18.3508944 ], [ 72.9159997, 18.3516638 ], [ 72.9159872, 18.3526935 ], [ 72.9155772, 18.3532038 ], [ 72.9144943, 18.3535778 ], [ 72.9139505, 18.3539585 ], [ 72.9143297, 18.3560221 ], [ 72.9145961, 18.3562826 ], [ 72.9145869, 18.3570548 ], [ 72.9148502, 18.3575727 ], [ 72.9148441, 18.3580875 ], [ 72.9147067, 18.3583434 ], [ 72.9141675, 18.3583376 ], [ 72.9141613, 18.3588524 ], [ 72.9133495, 18.359101 ], [ 72.9134807, 18.3593599 ], [ 72.913334, 18.360388 ], [ 72.9119828, 18.3606307 ], [ 72.9121142, 18.3608895 ], [ 72.911829, 18.3621737 ], [ 72.9118135, 18.3634608 ], [ 72.9112558, 18.3649995 ], [ 72.9112495, 18.3655143 ], [ 72.9117825, 18.366035 ], [ 72.9116328, 18.3673206 ], [ 72.912172, 18.3673266 ], [ 72.9120305, 18.3678399 ], [ 72.9126942, 18.3687477 ], [ 72.9133631, 18.3691418 ], [ 72.9136234, 18.3699171 ], [ 72.9141563, 18.3704377 ], [ 72.9140127, 18.3712085 ], [ 72.9150959, 18.3708337 ], [ 72.9161743, 18.3708456 ], [ 72.9169738, 18.3716267 ], [ 72.917513, 18.3716326 ], [ 72.9180554, 18.371381 ], [ 72.9202123, 18.3714047 ], [ 72.9219503, 18.3725827 ], [ 72.9223429, 18.3736167 ], [ 72.9234291, 18.3729845 ], [ 72.924777, 18.3729993 ], [ 72.9258679, 18.3719813 ], [ 72.9264086, 18.3718588 ], [ 72.9265553, 18.3708307 ], [ 72.9268311, 18.3703187 ], [ 72.9275132, 18.3696821 ], [ 72.9280539, 18.3695597 ], [ 72.9280601, 18.3690448 ], [ 72.9291353, 18.369314 ], [ 72.9291446, 18.3685417 ], [ 72.9296838, 18.3685476 ], [ 72.9298243, 18.3680342 ], [ 72.9302323, 18.3677812 ], [ 72.9302261, 18.368296 ], [ 72.9310365, 18.3681756 ], [ 72.9315742, 18.3683107 ], [ 72.9315619, 18.3693404 ], [ 72.9325379, 18.3693602 ], [ 72.932502, 18.369608 ], [ 72.9324744, 18.3719248 ], [ 72.932337, 18.3721809 ], [ 72.9318008, 18.3719176 ], [ 72.9320766, 18.3714056 ], [ 72.9307254, 18.3716485 ], [ 72.9307316, 18.3711336 ], [ 72.9299197, 18.3713822 ], [ 72.9299135, 18.371897 ], [ 72.9304512, 18.3720312 ], [ 72.931114, 18.3729399 ], [ 72.9315143, 18.37333 ], [ 72.9323202, 18.3735961 ], [ 72.9334305, 18.3736834 ], [ 72.9343907, 18.3743688 ], [ 72.9351736, 18.3746898 ], [ 72.9358646, 18.3750212 ], [ 72.9359121, 18.3760642 ], [ 72.9352567, 18.3760745 ], [ 72.9351276, 18.3755581 ], [ 72.9347297, 18.3750388 ], [ 72.9328424, 18.3750183 ], [ 72.9329738, 18.3752773 ], [ 72.9328057, 18.3781074 ], [ 72.9330752, 18.3781104 ], [ 72.933066, 18.3788826 ], [ 72.9333357, 18.3788855 ], [ 72.9331539, 18.3793955 ], [ 72.932254, 18.3791312 ], [ 72.9322603, 18.3786163 ], [ 72.9311849, 18.3783472 ], [ 72.9311941, 18.377575 ], [ 72.9306564, 18.37744 ], [ 72.9298553, 18.3767881 ], [ 72.9298643, 18.3760157 ], [ 72.9290586, 18.3757496 ], [ 72.9289326, 18.3749758 ], [ 72.9286661, 18.3747154 ], [ 72.9284117, 18.3734255 ], [ 72.9285502, 18.3731696 ], [ 72.9280108, 18.3731637 ], [ 72.9278817, 18.3726473 ], [ 72.9274841, 18.372128 ], [ 72.9266766, 18.37199 ], [ 72.9261344, 18.3722416 ], [ 72.9253162, 18.3730051 ], [ 72.925138, 18.3730439 ], [ 72.9247694, 18.3736432 ], [ 72.9242302, 18.3736373 ], [ 72.9244597, 18.3769868 ], [ 72.9249974, 18.3771208 ], [ 72.9261749, 18.3800949 ], [ 72.9263952, 18.3842166 ], [ 72.9255402, 18.388069 ], [ 72.9247158, 18.3893474 ], [ 72.9248449, 18.3898637 ], [ 72.9240344, 18.3899832 ], [ 72.923221, 18.3903608 ], [ 72.9232147, 18.3908756 ], [ 72.9226755, 18.3908698 ], [ 72.922534, 18.3913831 ], [ 72.9222612, 18.3916377 ], [ 72.9221208, 18.392151 ], [ 72.9196925, 18.3922527 ], [ 72.9191546, 18.3921185 ], [ 72.9188944, 18.3913434 ], [ 72.9183504, 18.3917231 ], [ 72.9178112, 18.3917173 ], [ 72.9161994, 18.3911847 ], [ 72.9156602, 18.3911788 ], [ 72.9151163, 18.3915594 ], [ 72.9148313, 18.3928435 ], [ 72.9144697, 18.3928607 ], [ 72.9142032, 18.3929652 ], [ 72.9139741, 18.3933587 ], [ 72.9138781, 18.3933848 ], [ 72.9137292, 18.3934517 ], [ 72.9136822, 18.3935372 ], [ 72.9136979, 18.3936468 ], [ 72.9136411, 18.3938104 ], [ 72.9135275, 18.393803 ], [ 72.9134628, 18.393697 ], [ 72.9133649, 18.393684 ], [ 72.9132944, 18.3936357 ], [ 72.913171, 18.393632 ], [ 72.9130143, 18.3936171 ], [ 72.9129301, 18.3936896 ], [ 72.9128106, 18.3938606 ], [ 72.9126813, 18.394158 ], [ 72.9125514, 18.394339 ], [ 72.9123575, 18.3946991 ], [ 72.9122023, 18.3952012 ], [ 72.9121359, 18.3954246 ], [ 72.911978, 18.3955061 ], [ 72.911978, 18.3956401 ], [ 72.9119752, 18.39574 ], [ 72.9119863, 18.395811 ], [ 72.9121414, 18.3959267 ], [ 72.9121691, 18.3959845 ], [ 72.9122162, 18.3961606 ], [ 72.9123187, 18.3962368 ], [ 72.9123824, 18.3964392 ], [ 72.9124544, 18.3967914 ], [ 72.9125043, 18.397099 ], [ 72.9124794, 18.3972252 ], [ 72.9123187, 18.3974144 ], [ 72.9117868, 18.3978928 ], [ 72.9114433, 18.3981346 ], [ 72.9111331, 18.398245 ], [ 72.911014, 18.3983344 ], [ 72.910978, 18.3984501 ], [ 72.9108616, 18.398634 ], [ 72.9107093, 18.3986919 ], [ 72.9105098, 18.398705 ], [ 72.9103464, 18.3988811 ], [ 72.9101442, 18.398939 ], [ 72.9098976, 18.3989363 ], [ 72.90982, 18.3988838 ], [ 72.9096654, 18.3988363 ], [ 72.9092854, 18.3989143 ], [ 72.9090072, 18.3990556 ], [ 72.9087918, 18.39926 ], [ 72.9087017, 18.3994868 ], [ 72.9085841, 18.3997916 ], [ 72.9083608, 18.4002637 ], [ 72.9083158, 18.400527 ], [ 72.9083373, 18.4007296 ], [ 72.9084137, 18.4008671 ], [ 72.9085332, 18.4009136 ], [ 72.9087165, 18.4010307 ], [ 72.9087719, 18.401099 ], [ 72.9088273, 18.401241 ], [ 72.9089104, 18.4013514 ], [ 72.9091348, 18.4015222 ], [ 72.9093481, 18.4016142 ], [ 72.9097553, 18.401814 ], [ 72.9099215, 18.4020058 ], [ 72.909927, 18.4022109 ], [ 72.9098218, 18.4024395 ], [ 72.9094893, 18.4027681 ], [ 72.9091874, 18.4029048 ], [ 72.9089021, 18.4029363 ], [ 72.9086389, 18.4028837 ], [ 72.9084727, 18.402797 ], [ 72.9083544, 18.4027032 ], [ 72.9081585, 18.4026028 ], [ 72.9079212, 18.4025869 ], [ 72.9076774, 18.4025054 ], [ 72.9073284, 18.4025579 ], [ 72.9070126, 18.4027183 ], [ 72.9065389, 18.4029943 ], [ 72.9063782, 18.4032045 ], [ 72.9063478, 18.4034464 ], [ 72.9064392, 18.4035252 ], [ 72.9066303, 18.4035305 ], [ 72.9067716, 18.4035462 ], [ 72.9068076, 18.4036356 ], [ 72.9067356, 18.4037039 ], [ 72.9067661, 18.4038196 ], [ 72.9067965, 18.4040535 ], [ 72.9068464, 18.404206 ], [ 72.9069434, 18.4041771 ], [ 72.907032, 18.403951 ], [ 72.9071151, 18.4038827 ], [ 72.9073062, 18.4039168 ], [ 72.9075639, 18.4041061 ], [ 72.9077162, 18.4042428 ], [ 72.9077716, 18.4044636 ], [ 72.9079461, 18.4044977 ], [ 72.9082204, 18.4044215 ], [ 72.9084697, 18.4043321 ], [ 72.9087107, 18.4043216 ], [ 72.9089766, 18.4045556 ], [ 72.9090486, 18.4048131 ], [ 72.9089572, 18.405026 ], [ 72.9087467, 18.4051364 ], [ 72.9084281, 18.4052311 ], [ 72.9080791, 18.4055202 ], [ 72.9079489, 18.4056306 ], [ 72.9078519, 18.4057699 ], [ 72.9077522, 18.4058435 ], [ 72.9075999, 18.4058698 ], [ 72.9074004, 18.4059618 ], [ 72.907442, 18.4060774 ], [ 72.9076442, 18.4061931 ], [ 72.9078187, 18.4062088 ], [ 72.9078935, 18.4064112 ], [ 72.9078769, 18.4066819 ], [ 72.9079794, 18.4070631 ], [ 72.9079018, 18.4071077 ], [ 72.9077799, 18.4069816 ], [ 72.9076608, 18.4068975 ], [ 72.9075472, 18.4069211 ], [ 72.9074531, 18.407042 ], [ 72.9074392, 18.4073233 ], [ 72.9075195, 18.4074994 ], [ 72.9077799, 18.4079041 ], [ 72.9078575, 18.4079777 ], [ 72.9080043, 18.408004 ], [ 72.9082231, 18.4080172 ], [ 72.9083838, 18.4081039 ], [ 72.9085029, 18.408301 ], [ 72.9084974, 18.4085507 ], [ 72.9084309, 18.4087531 ], [ 72.9082481, 18.4089476 ], [ 72.908032, 18.4089082 ], [ 72.9078963, 18.4087452 ], [ 72.9077301, 18.4086558 ], [ 72.9074974, 18.4086716 ], [ 72.907417, 18.4087873 ], [ 72.9075223, 18.4089003 ], [ 72.9077328, 18.4089739 ], [ 72.9077799, 18.4091 ], [ 72.9077495, 18.4092262 ], [ 72.9076525, 18.4093918 ], [ 72.9075472, 18.4094759 ], [ 72.9074115, 18.4095731 ], [ 72.9075306, 18.4096809 ], [ 72.9077245, 18.4096967 ], [ 72.9079157, 18.4098465 ], [ 72.9080667, 18.4101118 ], [ 72.9080444, 18.410275 ], [ 72.9078192, 18.4106025 ], [ 72.9076723, 18.4106973 ], [ 72.9074568, 18.4107345 ], [ 72.9073237, 18.4107084 ], [ 72.9071493, 18.4106267 ], [ 72.906977, 18.4106174 ], [ 72.9068065, 18.4106936 ], [ 72.9065499, 18.4107475 ], [ 72.9063952, 18.410688 ], [ 72.9062228, 18.4106768 ], [ 72.905884, 18.4107939 ], [ 72.9057586, 18.4108627 ], [ 72.9057194, 18.4110541 ], [ 72.9058311, 18.4114463 ], [ 72.9058546, 18.4115968 ], [ 72.9059466, 18.4117046 ], [ 72.9061327, 18.4116897 ], [ 72.9062894, 18.4116247 ], [ 72.9063247, 18.411541 ], [ 72.9064285, 18.4114072 ], [ 72.9067987, 18.4113886 ], [ 72.9070847, 18.411463 ], [ 72.9072122, 18.4115319 ], [ 72.9073352, 18.411658 ], [ 72.9074804, 18.4119555 ], [ 72.9075997, 18.4123523 ], [ 72.9076786, 18.4126548 ], [ 72.9076899, 18.41279 ], [ 72.9077031, 18.4129746 ], [ 72.9076651, 18.4131062 ], [ 72.9076408, 18.413181 ], [ 72.9075955, 18.413284 ], [ 72.9075902, 18.4133378 ], [ 72.9076125, 18.4135144 ], [ 72.9076431, 18.4136144 ], [ 72.9076525, 18.4138336 ], [ 72.9076926, 18.4140386 ], [ 72.9078561, 18.4144644 ], [ 72.9079281, 18.4147719 ], [ 72.9079586, 18.4150466 ], [ 72.9079475, 18.4152713 ], [ 72.907899, 18.4154776 ], [ 72.9078131, 18.4157562 ], [ 72.9077231, 18.4160243 ], [ 72.9076331, 18.4162398 ], [ 72.907489, 18.4163975 ], [ 72.9072094, 18.4165635 ], [ 72.9070778, 18.4165832 ], [ 72.9069947, 18.4165478 ], [ 72.9069365, 18.4164663 ], [ 72.906841, 18.4162836 ], [ 72.9067398, 18.4161654 ], [ 72.9066249, 18.4161443 ], [ 72.9064864, 18.4162048 ], [ 72.9063963, 18.4162797 ], [ 72.9063548, 18.4163769 ], [ 72.9064587, 18.4164387 ], [ 72.9064656, 18.4164729 ], [ 72.9063063, 18.4164939 ], [ 72.9062426, 18.4165162 ], [ 72.9061346, 18.416624 ], [ 72.9060903, 18.4167436 ], [ 72.9060861, 18.4168461 ], [ 72.9061096, 18.4169551 ], [ 72.906118, 18.4171352 ], [ 72.9061027, 18.4172311 ], [ 72.9061706, 18.4172442 ], [ 72.9062994, 18.4172534 ], [ 72.9063349, 18.4172902 ], [ 72.906378, 18.4173059 ], [ 72.9064339, 18.4172799 ], [ 72.9065217, 18.4172489 ], [ 72.9067146, 18.4172675 ], [ 72.9068948, 18.417313 ], [ 72.9071279, 18.4174013 ], [ 72.9074697, 18.417602 ], [ 72.9079741, 18.4180769 ], [ 72.908219, 18.4183621 ], [ 72.9083973, 18.4186062 ], [ 72.9085261, 18.4188572 ], [ 72.9086092, 18.4190819 ], [ 72.9087158, 18.4196575 ], [ 72.908774, 18.4199597 ], [ 72.9088613, 18.4202791 ], [ 72.9088931, 18.4207732 ], [ 72.9088765, 18.4219388 ], [ 72.9088405, 18.4223658 ], [ 72.90881, 18.4225905 ], [ 72.9086937, 18.4229598 ], [ 72.9086577, 18.423107 ], [ 72.9085815, 18.4234657 ], [ 72.9083765, 18.42401 ], [ 72.9082483, 18.424168 ], [ 72.9080731, 18.4243464 ], [ 72.9078044, 18.4244449 ], [ 72.9077504, 18.4244134 ], [ 72.9078114, 18.4243109 ], [ 72.9077338, 18.4243135 ], [ 72.9075787, 18.4244278 ], [ 72.9072615, 18.424688 ], [ 72.907033, 18.4249837 ], [ 72.906785, 18.4252465 ], [ 72.9066285, 18.4254594 ], [ 72.9064845, 18.4257616 ], [ 72.9064263, 18.4260152 ], [ 72.9063792, 18.4261374 ], [ 72.9063141, 18.4261939 ], [ 72.9063127, 18.4262793 ], [ 72.9063529, 18.4263582 ], [ 72.9063321, 18.4264475 ], [ 72.9062643, 18.4264725 ], [ 72.9062629, 18.4265461 ], [ 72.9062989, 18.4266078 ], [ 72.9063792, 18.42673 ], [ 72.9063584, 18.4269364 ], [ 72.9063266, 18.4271111 ], [ 72.9062615, 18.4272307 ], [ 72.9062033, 18.4273555 ], [ 72.9060205, 18.4275855 ], [ 72.9059125, 18.4277379 ], [ 72.905785, 18.4278864 ], [ 72.9055828, 18.4279679 ], [ 72.9053265, 18.4280567 ], [ 72.904828, 18.4283095 ], [ 72.9046202, 18.4284711 ], [ 72.9044568, 18.4286709 ], [ 72.9044027, 18.4287865 ], [ 72.9043986, 18.4289429 ], [ 72.9044194, 18.4291203 ], [ 72.9045333, 18.4294594 ], [ 72.9046273, 18.4297326 ], [ 72.9047211, 18.4300843 ], [ 72.9047903, 18.4302867 ], [ 72.9049233, 18.4304036 ], [ 72.9050923, 18.430623 ], [ 72.9052959, 18.430945 ], [ 72.9054247, 18.4310724 ], [ 72.9055535, 18.4310711 ], [ 72.9056394, 18.4310291 ], [ 72.905674, 18.4309095 ], [ 72.905656, 18.4307768 ], [ 72.9056588, 18.4306612 ], [ 72.905951, 18.4303326 ], [ 72.9060812, 18.4301487 ], [ 72.9061366, 18.4300685 ], [ 72.9062903, 18.4300173 ], [ 72.9065494, 18.4300147 ], [ 72.9068222, 18.4300475 ], [ 72.9070244, 18.4301014 ], [ 72.9072557, 18.4301093 ], [ 72.9072502, 18.430221 ], [ 72.9070549, 18.4302407 ], [ 72.906789, 18.4303248 ], [ 72.9065023, 18.4303668 ], [ 72.9062638, 18.4304017 ], [ 72.9061558, 18.4304871 ], [ 72.9060588, 18.4306579 ], [ 72.906027, 18.430809 ], [ 72.9060685, 18.4308984 ], [ 72.9061863, 18.4309878 ], [ 72.9063005, 18.4310946 ], [ 72.9063789, 18.4312804 ], [ 72.9063534, 18.4313938 ], [ 72.9063436, 18.4315387 ], [ 72.9063694, 18.4316441 ], [ 72.9065771, 18.4322669 ], [ 72.9066935, 18.4327374 ], [ 72.9067627, 18.4334233 ], [ 72.906735, 18.4339962 ], [ 72.9066104, 18.435 ], [ 72.9062918, 18.4363193 ], [ 72.9061616, 18.4367765 ], [ 72.9060259, 18.4372128 ], [ 72.9059095, 18.4376201 ], [ 72.9058153, 18.4379249 ], [ 72.905699, 18.4383112 ], [ 72.9055383, 18.4388684 ], [ 72.9053361, 18.4397014 ], [ 72.9052308, 18.4401508 ], [ 72.9051754, 18.4404188 ], [ 72.9033647, 18.4450237 ], [ 72.903152790169088, 18.445554655664065 ], [ 72.9030866, 18.4457205 ], [ 72.9029495, 18.4461404 ], [ 72.9027947, 18.4466551 ], [ 72.9027125, 18.4470175 ], [ 72.9023423, 18.4479168 ], [ 72.9020817, 18.4486154 ], [ 72.9019485, 18.4490298 ], [ 72.9018604, 18.4494014 ], [ 72.9018036, 18.4497712 ], [ 72.9017174, 18.4499607 ], [ 72.9015352, 18.4504457 ], [ 72.901357, 18.4509733 ], [ 72.9010221, 18.4517983 ], [ 72.9006323, 18.4526419 ], [ 72.9004266, 18.4530934 ], [ 72.899355, 18.4549122 ], [ 72.8990696, 18.4554521 ], [ 72.8988156, 18.4558693 ], [ 72.8977414, 18.457326 ], [ 72.8976126, 18.4574626 ], [ 72.8974506, 18.4576176 ], [ 72.8972386, 18.4577792 ], [ 72.8971195, 18.4578633 ], [ 72.8968882, 18.4579947 ], [ 72.8966735, 18.4580617 ], [ 72.8964256, 18.4580854 ], [ 72.8961777, 18.4580959 ], [ 72.8959672, 18.4580709 ], [ 72.895891, 18.4580026 ], [ 72.8958245, 18.4579067 ], [ 72.8957262, 18.4577424 ], [ 72.8956334, 18.4575572 ], [ 72.8955586, 18.4573457 ], [ 72.8954949, 18.4572077 ], [ 72.895391, 18.4571092 ], [ 72.8952483, 18.4570711 ], [ 72.8950129, 18.4570514 ], [ 72.8948397, 18.4570619 ], [ 72.8947608, 18.4570553 ], [ 72.8946029, 18.4571473 ], [ 72.8944727, 18.4572918 ], [ 72.8944367, 18.4573431 ], [ 72.8944381, 18.4573969 ], [ 72.8944159, 18.4574863 ], [ 72.8943674, 18.4575782 ], [ 72.894366, 18.45764 ], [ 72.894366, 18.4577109 ], [ 72.8943979, 18.4577779 ], [ 72.8943771, 18.4578436 ], [ 72.8943439, 18.457883 ], [ 72.8943411, 18.4579474 ], [ 72.8943674, 18.4580236 ], [ 72.8944242, 18.4580775 ], [ 72.8944644, 18.4581616 ], [ 72.8944865, 18.4582982 ], [ 72.8944796, 18.4583836 ], [ 72.8944935, 18.4584269 ], [ 72.8945586, 18.4584769 ], [ 72.8946361, 18.4584861 ], [ 72.8946929, 18.4584992 ], [ 72.8947151, 18.4585228 ], [ 72.8947081, 18.4585531 ], [ 72.894686, 18.4585846 ], [ 72.8947109, 18.4586174 ], [ 72.894721, 18.4586628 ], [ 72.8947015, 18.4587111 ], [ 72.8946309, 18.458752 ], [ 72.8946172, 18.458778 ], [ 72.894674, 18.45883 ], [ 72.8947348, 18.4588542 ], [ 72.8948092, 18.4588505 ], [ 72.8947955, 18.4589378 ], [ 72.8947661, 18.4590846 ], [ 72.8946838, 18.4591905 ], [ 72.8947093, 18.4592759 ], [ 72.8947818, 18.4593261 ], [ 72.8948111, 18.4594171 ], [ 72.8948493, 18.4596234 ], [ 72.8949033, 18.4597443 ], [ 72.8949628, 18.4597876 ], [ 72.8950044, 18.4598651 ], [ 72.8950889, 18.4599873 ], [ 72.8950999, 18.4600622 ], [ 72.8950916, 18.4601384 ], [ 72.8950626, 18.4601765 ], [ 72.8949905, 18.4601739 ], [ 72.8949144, 18.4602396 ], [ 72.894834, 18.4602396 ], [ 72.8947371, 18.4602304 ], [ 72.8947135, 18.4602632 ], [ 72.8947274, 18.4603644 ], [ 72.89478, 18.4604524 ], [ 72.8948354, 18.4605812 ], [ 72.8948686, 18.4606114 ], [ 72.8948835, 18.4605538 ], [ 72.8949088, 18.4605444 ], [ 72.8949891, 18.460589 ], [ 72.8950348, 18.4606088 ], [ 72.8950778, 18.4606744 ], [ 72.8950833, 18.4608505 ], [ 72.8950903, 18.4609871 ], [ 72.8950556, 18.4611027 ], [ 72.8949753, 18.4612157 ], [ 72.8949337, 18.4612407 ], [ 72.8948991, 18.4612197 ], [ 72.8948548, 18.4612341 ], [ 72.8948396, 18.4612407 ], [ 72.8948105, 18.4612985 ], [ 72.8947842, 18.4613287 ], [ 72.8947606, 18.4613077 ], [ 72.8947246, 18.4612801 ], [ 72.8947038, 18.4612985 ], [ 72.8946789, 18.4613537 ], [ 72.8946678, 18.4613983 ], [ 72.8946997, 18.4614154 ], [ 72.8947551, 18.4614246 ], [ 72.8947966, 18.4614115 ], [ 72.8948382, 18.4614128 ], [ 72.8948562, 18.4614377 ], [ 72.8948493, 18.4614956 ], [ 72.8947897, 18.4615626 ], [ 72.8947426, 18.4615639 ], [ 72.8947038, 18.4615376 ], [ 72.8946817, 18.46151 ], [ 72.8946083, 18.4615691 ], [ 72.8946179, 18.4615967 ], [ 72.8946609, 18.4615849 ], [ 72.8947204, 18.4616177 ], [ 72.8947758, 18.4617084 ], [ 72.8947869, 18.46187 ], [ 72.8947274, 18.4619436 ], [ 72.8946761, 18.4619475 ], [ 72.8946615, 18.4619651 ], [ 72.894683, 18.4620059 ], [ 72.8947476, 18.4620765 ], [ 72.8947614, 18.4621304 ], [ 72.8948025, 18.4622085 ], [ 72.8947868, 18.4622791 ], [ 72.8948064, 18.4623478 ], [ 72.8948671, 18.4625132 ], [ 72.894873, 18.4627324 ], [ 72.8948064, 18.4629962 ], [ 72.8946771, 18.463366 ], [ 72.8946593, 18.4635142 ], [ 72.8946981, 18.4636811 ], [ 72.8948048, 18.4638768 ], [ 72.8949807, 18.4640489 ], [ 72.895176, 18.4641737 ], [ 72.8953394, 18.4643524 ], [ 72.8955208, 18.4646966 ], [ 72.8956372, 18.4649567 ], [ 72.8957023, 18.4652392 ], [ 72.8957757, 18.4654691 ], [ 72.8958075, 18.4657411 ], [ 72.8957729, 18.4659841 ], [ 72.8956718, 18.4663533 ], [ 72.8955859, 18.4666528 ], [ 72.8955291, 18.4669655 ], [ 72.8955444, 18.4671546 ], [ 72.8956178, 18.4673648 ], [ 72.8957286, 18.4676184 ], [ 72.8958796, 18.467893 ], [ 72.896061, 18.4681412 ], [ 72.8962355, 18.4683672 ], [ 72.8963006, 18.4685288 ], [ 72.896321, 18.4687189 ], [ 72.896278, 18.4689488 ], [ 72.8961797, 18.4691708 ], [ 72.8961063, 18.4692706 ], [ 72.8960301, 18.46931 ], [ 72.8959442, 18.4693376 ], [ 72.8959221, 18.4693639 ], [ 72.8959179, 18.4694138 ], [ 72.8959581, 18.4694178 ], [ 72.8960079, 18.4694243 ], [ 72.8960426, 18.4694427 ], [ 72.8960966, 18.469561 ], [ 72.8961132, 18.4697357 ], [ 72.8961077, 18.4697922 ], [ 72.8959955, 18.4698106 ], [ 72.8959885, 18.4698592 ], [ 72.8960509, 18.4698789 ], [ 72.8961326, 18.4699525 ], [ 72.8961506, 18.4700628 ], [ 72.8961229, 18.4701732 ], [ 72.8960426, 18.4702888 ], [ 72.8959539, 18.4703295 ], [ 72.895868, 18.4703321 ], [ 72.8957988, 18.4703164 ], [ 72.8957462, 18.4703269 ], [ 72.8957323, 18.4703768 ], [ 72.89576, 18.4704241 ], [ 72.8958237, 18.4704359 ], [ 72.8959262, 18.4704293 ], [ 72.8960548, 18.4704703 ], [ 72.8960962, 18.4705071 ], [ 72.8961166, 18.4705901 ], [ 72.896099, 18.4706388 ], [ 72.8961049, 18.4706894 ], [ 72.8961493, 18.4706907 ], [ 72.8961902, 18.4707895 ], [ 72.8962118, 18.4710998 ], [ 72.8961746, 18.4714583 ], [ 72.8961491, 18.4717315 ], [ 72.8960433, 18.4719525 ], [ 72.8958083, 18.4722108 ], [ 72.8957025, 18.4723055 ], [ 72.8955556, 18.472404 ], [ 72.8955536, 18.4724393 ], [ 72.8956947, 18.4724337 ], [ 72.8958376, 18.4724281 ], [ 72.8958905, 18.4724653 ], [ 72.8960179, 18.4725879 ], [ 72.8962372, 18.4726808 ], [ 72.8964899, 18.472692 ], [ 72.8967269, 18.4726176 ], [ 72.8969463, 18.4723928 ], [ 72.8970403, 18.4723222 ], [ 72.8972205, 18.4722702 ], [ 72.8973146, 18.472155 ], [ 72.897483, 18.4720324 ], [ 72.8976221, 18.471921 ], [ 72.8977945, 18.4718671 ], [ 72.8979512, 18.4718838 ], [ 72.8985388, 18.4721903 ], [ 72.8988169, 18.4724356 ], [ 72.899146, 18.4727886 ], [ 72.8994339, 18.4730338 ], [ 72.8997336, 18.4734481 ], [ 72.9000079, 18.4736116 ], [ 72.9001548, 18.4736264 ], [ 72.9004545, 18.4737249 ], [ 72.9007444, 18.4739683 ], [ 72.9007248, 18.4740333 ], [ 72.9006621, 18.4740668 ], [ 72.9006503, 18.4741262 ], [ 72.9007346, 18.4742637 ], [ 72.9009559, 18.4745201 ], [ 72.9011537, 18.4748786 ], [ 72.9012458, 18.4752465 ], [ 72.9012497, 18.475475 ], [ 72.9012145, 18.4756292 ], [ 72.9012732, 18.4757016 ], [ 72.9015083, 18.4758707 ], [ 72.9017042, 18.4760416 ], [ 72.9017805, 18.476207 ], [ 72.9018628, 18.4764912 ], [ 72.9018981, 18.4768163 ], [ 72.9018844, 18.4771173 ], [ 72.9018648, 18.4771804 ], [ 72.9018178, 18.4772343 ], [ 72.9017257, 18.4773179 ], [ 72.9017139, 18.4773644 ], [ 72.9017433, 18.4774814 ], [ 72.9017531, 18.4775167 ], [ 72.9018021, 18.4775892 ], [ 72.9018334, 18.4776895 ], [ 72.9018628, 18.4778232 ], [ 72.9018922, 18.4778864 ], [ 72.9018726, 18.4780313 ], [ 72.9019333, 18.4783713 ], [ 72.9019647, 18.4786945 ], [ 72.9019255, 18.4789045 ], [ 72.9018315, 18.4791738 ], [ 72.9017825, 18.4793485 ], [ 72.9017943, 18.479525 ], [ 72.9018569, 18.4797386 ], [ 72.9019647, 18.4798575 ], [ 72.9020763, 18.4799597 ], [ 72.9020939, 18.4801046 ], [ 72.9020939, 18.4803164 ], [ 72.9020998, 18.480491 ], [ 72.9021135, 18.4808811 ], [ 72.9020822, 18.4812044 ], [ 72.9019862, 18.4813641 ], [ 72.9018863, 18.4814422 ], [ 72.9017551, 18.4814477 ], [ 72.9017139, 18.4815016 ], [ 72.9017394, 18.4816372 ], [ 72.9018315, 18.4818787 ], [ 72.9019568, 18.4820887 ], [ 72.9019862, 18.4823989 ], [ 72.9020391, 18.482633 ], [ 72.9020626, 18.4827444 ], [ 72.9021096, 18.4828689 ], [ 72.9020939, 18.4829172 ], [ 72.9020156, 18.4829265 ], [ 72.901994, 18.4830119 ], [ 72.9020156, 18.4831569 ], [ 72.9019784, 18.4831866 ], [ 72.9019137, 18.4831791 ], [ 72.9018746, 18.483142 ], [ 72.9018373, 18.4831569 ], [ 72.9018168, 18.4833045 ], [ 72.9017962, 18.4833761 ], [ 72.9017541, 18.4834457 ], [ 72.9017179, 18.48352 ], [ 72.9016434, 18.4835172 ], [ 72.9016033, 18.4835061 ], [ 72.9015386, 18.4835024 ], [ 72.9015142, 18.4835191 ], [ 72.9015318, 18.4835498 ], [ 72.9015621, 18.4835981 ], [ 72.9015533, 18.4836399 ], [ 72.9015024, 18.4836696 ], [ 72.9014564, 18.4836417 ], [ 72.9014417, 18.483651 ], [ 72.901428, 18.4837002 ], [ 72.9014536, 18.4837598 ], [ 72.9015616, 18.4838044 ], [ 72.9016641, 18.4839437 ], [ 72.9017888, 18.4842143 ], [ 72.901822, 18.4844297 ], [ 72.9017943, 18.4846294 ], [ 72.9018082, 18.4847581 ], [ 72.9019771, 18.4849788 ], [ 72.9019855, 18.4851837 ], [ 72.901894, 18.4853913 ], [ 72.9016807, 18.4855463 ], [ 72.9016115, 18.485696 ], [ 72.9015035, 18.4859167 ], [ 72.9015062, 18.4862582 ], [ 72.9014868, 18.4864605 ], [ 72.9014176, 18.4866497 ], [ 72.9013456, 18.4867416 ], [ 72.9013705, 18.4869308 ], [ 72.9013317, 18.4871725 ], [ 72.9012154, 18.4873354 ], [ 72.9011101, 18.4873564 ], [ 72.9009938, 18.4872934 ], [ 72.9009273, 18.4871094 ], [ 72.9008774, 18.4870438 ], [ 72.9007971, 18.4870963 ], [ 72.9007777, 18.4872697 ], [ 72.900678, 18.4873827 ], [ 72.9007334, 18.4875666 ], [ 72.9007971, 18.4876901 ], [ 72.9007112, 18.4879317 ], [ 72.900617, 18.4882286 ], [ 72.9006198, 18.4883968 ], [ 72.9006669, 18.4886962 ], [ 72.9005838, 18.4891297 ], [ 72.9006257, 18.4892766 ], [ 72.900709, 18.4893299 ], [ 72.9008524, 18.4893262 ], [ 72.9009454, 18.489306 ], [ 72.9009881, 18.4893207 ], [ 72.9010191, 18.4893832 ], [ 72.9010307, 18.4894916 ], [ 72.901083, 18.4896607 ], [ 72.9011838, 18.4897213 ], [ 72.9012942, 18.4897489 ], [ 72.9014066, 18.4897838 ], [ 72.9014551, 18.4898389 ], [ 72.9015259, 18.490027 ], [ 72.9015259, 18.4901219 ], [ 72.901504, 18.4902999 ], [ 72.9014327, 18.4904337 ], [ 72.9013409, 18.490578 ], [ 72.9012834, 18.4906547 ], [ 72.9011765, 18.490704 ], [ 72.9011217, 18.4907651 ], [ 72.9010929, 18.4908964 ], [ 72.9011053, 18.4910731 ], [ 72.9011053, 18.4911654 ], [ 72.901145, 18.4912979 ], [ 72.901208, 18.4913707 ], [ 72.9013012, 18.4914434 ], [ 72.9013382, 18.4915045 ], [ 72.9013314, 18.4916007 ], [ 72.9012615, 18.4916903 ], [ 72.9011806, 18.4917618 ], [ 72.9011149, 18.4918632 ], [ 72.9011162, 18.4919489 ], [ 72.9011327, 18.492062 ], [ 72.9012176, 18.4922049 ], [ 72.9013163, 18.4922777 ], [ 72.9013725, 18.4923258 ], [ 72.9013807, 18.4924583 ], [ 72.9013656, 18.4925389 ], [ 72.9013478, 18.4926506 ], [ 72.9013629, 18.4927442 ], [ 72.9014136, 18.4927871 ], [ 72.9015341, 18.492804 ], [ 72.9016808, 18.4927871 ], [ 72.9017287, 18.4928144 ], [ 72.9017506, 18.4928936 ], [ 72.9017479, 18.4929378 ], [ 72.9017561, 18.4930301 ], [ 72.9018123, 18.4930652 ], [ 72.9019027, 18.4930717 ], [ 72.901963, 18.4930418 ], [ 72.9019986, 18.4929612 ], [ 72.902085, 18.4929053 ], [ 72.9021918, 18.4928677 ], [ 72.9022508, 18.4928534 ], [ 72.9023809, 18.4928495 ], [ 72.90257, 18.4928664 ], [ 72.9026947, 18.4928664 ], [ 72.9027728, 18.4928807 ], [ 72.9028537, 18.4929209 ], [ 72.9029455, 18.4930119 ], [ 72.9030222, 18.4931353 ], [ 72.9030619, 18.4932211 ], [ 72.9031346, 18.4933121 ], [ 72.903152, 18.4933582 ], [ 72.9031714, 18.4934225 ], [ 72.9031985, 18.4934483 ], [ 72.9032799, 18.4935236 ], [ 72.9033283, 18.493632 ], [ 72.9033613, 18.4937809 ], [ 72.9034078, 18.4939904 ], [ 72.9034039, 18.4941484 ], [ 72.903338, 18.494312 ], [ 72.9034523, 18.494323 ], [ 72.9035202, 18.4943451 ], [ 72.903619, 18.4942991 ], [ 72.9036829, 18.4942661 ], [ 72.9037701, 18.4942771 ], [ 72.9038496, 18.494334 ], [ 72.9039542, 18.4944094 ], [ 72.904024, 18.4945729 ], [ 72.9040569, 18.4947328 ], [ 72.9040414, 18.4948541 ], [ 72.9040492, 18.4949828 ], [ 72.9040647, 18.4950434 ], [ 72.9041325, 18.4950636 ], [ 72.904179, 18.4952051 ], [ 72.9042255, 18.4953742 ], [ 72.9042333, 18.4954955 ], [ 72.9042139, 18.4955414 ], [ 72.9041868, 18.4956213 ], [ 72.9041577, 18.495704 ], [ 72.904148, 18.4958161 ], [ 72.9041247, 18.4959815 ], [ 72.9041054, 18.4961212 ], [ 72.9041092, 18.4962866 ], [ 72.9041073, 18.496384 ], [ 72.9041112, 18.4964703 ], [ 72.9041383, 18.4965788 ], [ 72.9041654, 18.4967239 ], [ 72.9041829, 18.4969775 ], [ 72.9041829, 18.4970621 ], [ 72.9041984, 18.4971429 ], [ 72.9042294, 18.4972532 ], [ 72.9042449, 18.4974112 ], [ 72.9041926, 18.4976703 ], [ 72.9041577, 18.497957 ], [ 72.9041267, 18.4981536 ], [ 72.9040996, 18.4985083 ], [ 72.9040685, 18.4986278 ], [ 72.9041151, 18.4987252 ], [ 72.9041344, 18.4987987 ], [ 72.9040996, 18.4988501 ], [ 72.9040395, 18.4989163 ], [ 72.9040317, 18.4989898 ], [ 72.9040666, 18.4991202 ], [ 72.9040996, 18.4992103 ], [ 72.9040976, 18.4993463 ], [ 72.9040724, 18.4994841 ], [ 72.9040375, 18.4995999 ], [ 72.9040101, 18.4996398 ], [ 72.9040184, 18.4997152 ], [ 72.9040649, 18.4997386 ], [ 72.9041115, 18.4997749 ], [ 72.9040704, 18.4998399 ], [ 72.904054, 18.4999075 ], [ 72.9041307, 18.4999673 ], [ 72.9042129, 18.499975 ], [ 72.9043088, 18.5000192 ], [ 72.9043691, 18.5001258 ], [ 72.9043856, 18.5002427 ], [ 72.9043335, 18.5003727 ], [ 72.9042623, 18.5004272 ], [ 72.9041937, 18.5005052 ], [ 72.9042321, 18.5005624 ], [ 72.9043198, 18.5005988 ], [ 72.9044404, 18.5007755 ], [ 72.9045884, 18.5010406 ], [ 72.9046541, 18.5012771 ], [ 72.9047336, 18.5015135 ], [ 72.9047629, 18.5017479 ], [ 72.9048017, 18.5019647 ], [ 72.9048792, 18.5021742 ], [ 72.9050187, 18.5023286 ], [ 72.9052033, 18.5023115 ], [ 72.9052866, 18.5024199 ], [ 72.9052789, 18.5024696 ], [ 72.9053273, 18.502567 ], [ 72.9054552, 18.5026937 ], [ 72.9055754, 18.502793 ], [ 72.905742, 18.5028922 ], [ 72.9058583, 18.5030208 ], [ 72.90599, 18.503109 ], [ 72.9062148, 18.5032597 ], [ 72.9063311, 18.5034123 ], [ 72.9063873, 18.5034692 ], [ 72.9065152, 18.503449 ], [ 72.9066314, 18.5034417 ], [ 72.9067903, 18.5034214 ], [ 72.9069318, 18.5034453 ], [ 72.9070636, 18.5035243 ], [ 72.9072186, 18.5036475 ], [ 72.907298, 18.5037687 ], [ 72.9073407, 18.5038055 ], [ 72.9073794, 18.5037908 ], [ 72.9074279, 18.5036401 ], [ 72.9074376, 18.5035464 ], [ 72.9074564, 18.503363 ], [ 72.9074714, 18.5032487 ], [ 72.9074564, 18.5031097 ], [ 72.9074673, 18.5029914 ], [ 72.9075043, 18.502777 ], [ 72.9076139, 18.5025522 ], [ 72.9077359, 18.5023976 ], [ 72.9077907, 18.5023456 ], [ 72.9079305, 18.5023664 ], [ 72.9080141, 18.5024457 ], [ 72.908125, 18.5024769 ], [ 72.9082059, 18.5024756 ], [ 72.9083059, 18.5023755 ], [ 72.9084087, 18.5023209 ], [ 72.9085073, 18.5023352 ], [ 72.9084854, 18.5023924 ], [ 72.9084416, 18.5024587 ], [ 72.908384, 18.5026003 ], [ 72.9083936, 18.502703 ], [ 72.9084525, 18.5027887 ], [ 72.908543, 18.5028758 ], [ 72.9087156, 18.5029239 ], [ 72.9089636, 18.5029044 ], [ 72.909276, 18.5028628 ], [ 72.9094774, 18.502829 ], [ 72.9097282, 18.5027796 ], [ 72.9098556, 18.5027458 ], [ 72.9100612, 18.5026731 ], [ 72.9102489, 18.5026263 ], [ 72.9104051, 18.5026575 ], [ 72.9105202, 18.5027445 ], [ 72.9106764, 18.5028342 ], [ 72.9108107, 18.5029693 ], [ 72.9109984, 18.503185 ], [ 72.9111313, 18.5033552 ], [ 72.911182, 18.5035099 ], [ 72.9112669, 18.5037308 ], [ 72.9113725, 18.5039854 ], [ 72.9115108, 18.5041791 ], [ 72.9116588, 18.5043701 ], [ 72.9117383, 18.5045637 ], [ 72.9118698, 18.5048365 ], [ 72.9119849, 18.5050444 ], [ 72.912063, 18.5052069 ], [ 72.9121535, 18.5055174 ], [ 72.9122097, 18.5057552 ], [ 72.9122782, 18.5059176 ], [ 72.9124316, 18.5062074 ], [ 72.9126317, 18.5066985 ], [ 72.9126906, 18.5068103 ], [ 72.912692, 18.506896 ], [ 72.9127262, 18.5069948 ], [ 72.9128372, 18.507126 ], [ 72.9129509, 18.5071845 ], [ 72.9130318, 18.5072339 ], [ 72.9131387, 18.5072534 ], [ 72.9132305, 18.5073144 ], [ 72.9133127, 18.5073391 ], [ 72.9134031, 18.50733 ], [ 72.9134798, 18.5073664 ], [ 72.9134744, 18.5074561 ], [ 72.9135086, 18.5074833 ], [ 72.913573, 18.5075067 ], [ 72.913658, 18.507651 ], [ 72.9136854, 18.5077497 ], [ 72.9137114, 18.5077848 ], [ 72.9137785, 18.5077757 ], [ 72.9138772, 18.5077289 ], [ 72.9139594, 18.5076536 ], [ 72.9140471, 18.5075353 ], [ 72.9141814, 18.5073755 ], [ 72.9142924, 18.5072585 ], [ 72.9146295, 18.5071091 ], [ 72.9148843, 18.5069948 ], [ 72.9150775, 18.506922 ], [ 72.9152639, 18.5068454 ], [ 72.9155735, 18.5067895 ], [ 72.9157119, 18.5067401 ], [ 72.9158681, 18.5067128 ], [ 72.9159846, 18.506679 ], [ 72.9161107, 18.5066505 ], [ 72.9162203, 18.5065894 ], [ 72.9163121, 18.5064841 ], [ 72.9163984, 18.5063893 ], [ 72.9165752, 18.5063243 ], [ 72.9167738, 18.5062489 ], [ 72.9169794, 18.5062009 ], [ 72.9171424, 18.506158 ], [ 72.917385, 18.5061333 ], [ 72.9174864, 18.5061216 ], [ 72.9176494, 18.5059982 ], [ 72.9176809, 18.5059826 ], [ 72.9179235, 18.5059566 ], [ 72.9180248, 18.50598 ], [ 72.9180892, 18.5059605 ], [ 72.9181948, 18.5058773 ], [ 72.9183277, 18.505776 ], [ 72.9184935, 18.5055941 ], [ 72.9186689, 18.5054122 ], [ 72.9188333, 18.5052575 ], [ 72.9189758, 18.5050847 ], [ 72.9190717, 18.5049639 ], [ 72.9191114, 18.504882 ], [ 72.9191512, 18.5047196 ], [ 72.9192005, 18.5045611 ], [ 72.9192169, 18.5044467 ], [ 72.9191841, 18.5043363 ], [ 72.9192491, 18.504128 ], [ 72.9193527, 18.5040404 ], [ 72.9194479, 18.5040749 ], [ 72.9195828, 18.5043025 ], [ 72.9195184, 18.504422 ], [ 72.9194663, 18.5045416 ], [ 72.9194526, 18.504691 ], [ 72.9194567, 18.5047729 ], [ 72.9193855, 18.5049678 ], [ 72.919221, 18.5051991 ], [ 72.9190183, 18.505381 ], [ 72.918451, 18.5060125 ], [ 72.9183112, 18.5062256 ], [ 72.9181852, 18.5063841 ], [ 72.9179961, 18.5064387 ], [ 72.9177549, 18.5065036 ], [ 72.9175384, 18.5065712 ], [ 72.9174041, 18.5065504 ], [ 72.9172096, 18.5065478 ], [ 72.9171, 18.5065842 ], [ 72.9169854, 18.5067397 ], [ 72.9168648, 18.5067059 ], [ 72.9167442, 18.5066305 ], [ 72.9164483, 18.5066851 ], [ 72.9159057, 18.5069034 ], [ 72.9154042, 18.5070541 ], [ 72.9150671, 18.5071762 ], [ 72.9144834, 18.5074829 ], [ 72.914319, 18.5076206 ], [ 72.9142614, 18.5077532 ], [ 72.914234, 18.5078649 ], [ 72.9143093, 18.5081046 ], [ 72.9143111, 18.5082301 ], [ 72.9140555, 18.5081818 ], [ 72.9138307, 18.5081212 ], [ 72.9136272, 18.5080826 ], [ 72.9133908, 18.5080054 ], [ 72.9132397, 18.5079411 ], [ 72.9131137, 18.5078419 ], [ 72.9130285, 18.5077224 ], [ 72.9128638, 18.5075111 ], [ 72.9127068, 18.5073035 ], [ 72.9125905, 18.5071362 ], [ 72.9124975, 18.5069415 ], [ 72.9124045, 18.5067375 ], [ 72.9123619, 18.5066199 ], [ 72.912296, 18.5065537 ], [ 72.91217, 18.5064582 ], [ 72.912079, 18.5063792 ], [ 72.9119976, 18.5062634 ], [ 72.911889, 18.5060355 ], [ 72.9118174, 18.5058444 ], [ 72.9117534, 18.5056497 ], [ 72.9115306, 18.5052656 ], [ 72.9114395, 18.5051296 ], [ 72.9113833, 18.5050304 ], [ 72.9113581, 18.5049036 ], [ 72.9113213, 18.5047198 ], [ 72.9112612, 18.5045067 ], [ 72.9111914, 18.5043615 ], [ 72.9110887, 18.5043064 ], [ 72.9108737, 18.5043045 ], [ 72.9107729, 18.5042531 ], [ 72.9104938, 18.503994 ], [ 72.9104183, 18.5039627 ], [ 72.9102768, 18.5039995 ], [ 72.9101528, 18.5039995 ], [ 72.9099939, 18.5039517 ], [ 72.9098738, 18.5039462 ], [ 72.9097265, 18.5039683 ], [ 72.9087402, 18.5040601 ], [ 72.9099416, 18.5041171 ], [ 72.9101179, 18.5041741 ], [ 72.9102163, 18.5042473 ], [ 72.9104985, 18.5046371 ], [ 72.9107973, 18.5050945 ], [ 72.9110055, 18.5054739 ], [ 72.9112549, 18.5060716 ], [ 72.9113755, 18.5063939 ], [ 72.911518, 18.5069838 ], [ 72.9115701, 18.5074022 ], [ 72.9116084, 18.5079115 ], [ 72.9115975, 18.508213 ], [ 72.9115454, 18.5088185 ], [ 72.911433, 18.5096708 ], [ 72.9113645, 18.5101932 ], [ 72.9112412, 18.5105726 ], [ 72.9110713, 18.510913 ], [ 72.9108904, 18.5112924 ], [ 72.910863, 18.5113729 ], [ 72.9109452, 18.5116588 ], [ 72.9109809, 18.5118459 ], [ 72.9109809, 18.51202 ], [ 72.910925, 18.5122887 ], [ 72.9108126, 18.5125096 ], [ 72.9106921, 18.512902 ], [ 72.9106838, 18.5131852 ], [ 72.9107003, 18.5134997 ], [ 72.9107386, 18.5137569 ], [ 72.9108291, 18.5143156 ], [ 72.910862, 18.5147054 ], [ 72.9108592, 18.5148743 ], [ 72.9108592, 18.515077 ], [ 72.910925, 18.5151913 ], [ 72.9109825, 18.5152537 ], [ 72.9111333, 18.5155266 ], [ 72.9112319, 18.5158696 ], [ 72.9112676, 18.5161008 ], [ 72.9113224, 18.5165842 ], [ 72.9113772, 18.5174339 ], [ 72.9113689, 18.5181433 ], [ 72.9113635, 18.5185487 ], [ 72.9113141, 18.5189541 ], [ 72.9112648, 18.5193178 ], [ 72.9110011, 18.5205929 ], [ 72.910949, 18.5207877 ], [ 72.9107873, 18.5211359 ], [ 72.910812, 18.5213048 ], [ 72.9108778, 18.5214348 ], [ 72.910875, 18.5216452 ], [ 72.9108367, 18.5218531 ], [ 72.9106147, 18.5227002 ], [ 72.9105873, 18.5228431 ], [ 72.9106202, 18.5231212 ], [ 72.9106654, 18.5234979 ], [ 72.9106271, 18.5236148 ], [ 72.9105613, 18.5238201 ], [ 72.910564, 18.524002 ], [ 72.9105805, 18.5242306 ], [ 72.910586, 18.5245243 ], [ 72.9105723, 18.5247633 ], [ 72.9105997, 18.5250595 ], [ 72.9105914, 18.5255039 ], [ 72.910575, 18.5256312 ], [ 72.91023, 18.5265218 ], [ 72.9101447, 18.526779 ], [ 72.9100905, 18.5271171 ], [ 72.9100323, 18.527356 ], [ 72.9099122, 18.52765 ], [ 72.9097351, 18.5280118 ], [ 72.9087646, 18.5302481 ], [ 72.9084824, 18.5308873 ], [ 72.9083947, 18.5311757 ], [ 72.9082686, 18.5314121 ], [ 72.908148, 18.5315628 ], [ 72.9079781, 18.531659 ], [ 72.9078822, 18.5317889 ], [ 72.9078274, 18.5319942 ], [ 72.9077205, 18.5322644 ], [ 72.9076027, 18.5324749 ], [ 72.9074821, 18.5327035 ], [ 72.9074136, 18.5327659 ], [ 72.9073012, 18.5327815 ], [ 72.9072081, 18.5328308 ], [ 72.907145, 18.5330621 ], [ 72.9071752, 18.533231 ], [ 72.907167, 18.5333765 ], [ 72.9071395, 18.5334466 ], [ 72.9071012, 18.5335272 ], [ 72.9071478, 18.5336285 ], [ 72.9071149, 18.5336805 ], [ 72.9070902, 18.5338026 ], [ 72.9071149, 18.5339611 ], [ 72.9071067, 18.5340702 ], [ 72.9069497, 18.5342094 ], [ 72.9068877, 18.534327 ], [ 72.906907, 18.5344997 ], [ 72.9069574, 18.5345989 ], [ 72.9069729, 18.5347275 ], [ 72.9069729, 18.5348892 ], [ 72.9069497, 18.5350288 ], [ 72.9068565, 18.535286 ], [ 72.9067688, 18.5354965 ], [ 72.9065938, 18.5358826 ], [ 72.9064659, 18.5361398 ], [ 72.9063109, 18.5363419 ], [ 72.9061869, 18.5364595 ], [ 72.9059776, 18.5365991 ], [ 72.9058303, 18.5367057 ], [ 72.9056598, 18.5367902 ], [ 72.9054795, 18.5368029 ], [ 72.9054, 18.5367643 ], [ 72.9053109, 18.5366137 ], [ 72.905183, 18.5365586 ], [ 72.9050124, 18.5365292 ], [ 72.9048303, 18.5365806 ], [ 72.9046714, 18.5367019 ], [ 72.9045823, 18.5366872 ], [ 72.9045203, 18.5367019 ], [ 72.9044892, 18.5369113 ], [ 72.9045125, 18.537062 ], [ 72.9045125, 18.5371502 ], [ 72.9044737, 18.5372751 ], [ 72.904373, 18.5375727 ], [ 72.9043497, 18.537705 ], [ 72.9043885, 18.5378116 ], [ 72.9043885, 18.5378887 ], [ 72.9043846, 18.5379659 ], [ 72.9044505, 18.537999 ], [ 72.9045164, 18.5380614 ], [ 72.9045086, 18.5381533 ], [ 72.9044699, 18.5382525 ], [ 72.9044234, 18.5383589 ], [ 72.9043713, 18.5384828 ], [ 72.9043604, 18.5386855 ], [ 72.9044864, 18.5387686 ], [ 72.9044727, 18.5389409 ], [ 72.9044864, 18.5389921 ], [ 72.9045536, 18.5389604 ], [ 72.904607, 18.5388881 ], [ 72.9047073, 18.5387052 ], [ 72.9047454, 18.5386686 ], [ 72.9047495, 18.538779 ], [ 72.9047605, 18.5390336 ], [ 72.9046917, 18.5392316 ], [ 72.9047931, 18.5392706 ], [ 72.9049366, 18.539261 ], [ 72.9050296, 18.5391507 ], [ 72.9051439, 18.5391305 ], [ 72.9052641, 18.5391654 ], [ 72.9053726, 18.5392793 ], [ 72.9053784, 18.5393712 ], [ 72.9053261, 18.5394539 ], [ 72.9053164, 18.5395182 ], [ 72.9055651, 18.5395639 ], [ 72.9056562, 18.5396245 ], [ 72.905631, 18.5397163 ], [ 72.905571, 18.5397513 ], [ 72.905569, 18.5398192 ], [ 72.905662, 18.5398817 ], [ 72.9057802, 18.5399497 ], [ 72.9058306, 18.540003 ], [ 72.9058627, 18.5401467 ], [ 72.9058627, 18.5402052 ], [ 72.9058283, 18.5402552 ], [ 72.9057753, 18.5402845 ], [ 72.9057133, 18.5404002 ], [ 72.9056959, 18.5405362 ], [ 72.9057307, 18.5406299 ], [ 72.9057966, 18.5406795 ], [ 72.9058586, 18.5407236 ], [ 72.9059206, 18.5408338 ], [ 72.9059788, 18.5409036 ], [ 72.9061028, 18.5410175 ], [ 72.9062191, 18.5410543 ], [ 72.9063392, 18.5411535 ], [ 72.9065678, 18.5413104 ], [ 72.9067403, 18.5413398 ], [ 72.9068391, 18.5413233 ], [ 72.9069018, 18.5412325 ], [ 72.9069507, 18.5411687 ], [ 72.9069967, 18.5409345 ], [ 72.9070067, 18.5408853 ], [ 72.9071873, 18.5407726 ], [ 72.9073656, 18.5406734 ], [ 72.9074974, 18.5406789 ], [ 72.9079179, 18.5410059 ], [ 72.9081, 18.5407928 ], [ 72.9077977, 18.5405539 ], [ 72.9076524, 18.5405503 ], [ 72.9075768, 18.5405154 ], [ 72.9075148, 18.5404051 ], [ 72.9075167, 18.5402471 ], [ 72.9075555, 18.5399605 ], [ 72.9076098, 18.5397823 ], [ 72.9077512, 18.5396004 ], [ 72.9079682, 18.5392183 ], [ 72.9081853, 18.5389004 ], [ 72.908319, 18.5386855 ], [ 72.9083965, 18.5384871 ], [ 72.9084508, 18.5383144 ], [ 72.9085089, 18.5380737 ], [ 72.9086232, 18.5378606 ], [ 72.9088732, 18.5376309 ], [ 72.9091077, 18.5373921 ], [ 72.9093053, 18.5371973 ], [ 72.9093983, 18.5369714 ], [ 72.9094661, 18.5367013 ], [ 72.9095533, 18.5366315 ], [ 72.9096754, 18.5366168 ], [ 72.9097239, 18.5365359 ], [ 72.9097122, 18.5364018 ], [ 72.9096541, 18.5362805 ], [ 72.9096812, 18.5360509 ], [ 72.90972, 18.5358782 ], [ 72.9097549, 18.5357165 ], [ 72.9098421, 18.5354869 ], [ 72.9099467, 18.5352076 ], [ 72.9099777, 18.5349485 ], [ 72.9100649, 18.5347317 ], [ 72.9102548, 18.534469 ], [ 72.9103556, 18.5342945 ], [ 72.910404, 18.5340758 ], [ 72.9104525, 18.5337966 ], [ 72.9104447, 18.5336588 ], [ 72.9103168, 18.5332197 ], [ 72.9102432, 18.5329551 ], [ 72.910187, 18.5327824 ], [ 72.9101948, 18.5325803 ], [ 72.9101967, 18.5324168 ], [ 72.9101773, 18.53229 ], [ 72.910094, 18.5321099 ], [ 72.9100204, 18.531884 ], [ 72.9100029, 18.5317792 ], [ 72.9100126, 18.5315643 ], [ 72.9100048, 18.5313695 ], [ 72.9099564, 18.5311564 ], [ 72.9099196, 18.5309984 ], [ 72.909937, 18.5308165 ], [ 72.9099913, 18.5306585 ], [ 72.910092, 18.5305317 ], [ 72.910437, 18.5302543 ], [ 72.9107586, 18.530043 ], [ 72.910964, 18.5299088 ], [ 72.9113167, 18.5297508 ], [ 72.9115958, 18.5296902 ], [ 72.911805, 18.5296682 ], [ 72.912057, 18.5296645 ], [ 72.912336, 18.5296259 ], [ 72.9126829, 18.5295653 ], [ 72.9129425, 18.5295065 ], [ 72.9131809, 18.5294899 ], [ 72.9137176, 18.5294936 ], [ 72.9139715, 18.5295101 ], [ 72.9141506, 18.5294881 ], [ 72.9143095, 18.5293815 ], [ 72.9144374, 18.5292272 ], [ 72.9145807, 18.5291023 ], [ 72.9149024, 18.5289773 ], [ 72.9151931, 18.5288524 ], [ 72.9154954, 18.5287936 ], [ 72.9157589, 18.5287679 ], [ 72.9160551, 18.5288007 ], [ 72.916715, 18.5290775 ], [ 72.9178806, 18.5296317 ], [ 72.9179892, 18.5297584 ], [ 72.9180531, 18.5298908 ], [ 72.9184231, 18.5301298 ], [ 72.9186807, 18.5302727 ], [ 72.9191219, 18.53053 ], [ 72.9195686, 18.5307482 ], [ 72.9199413, 18.5307898 ], [ 72.9202153, 18.5307924 ], [ 72.9205771, 18.5307976 ], [ 72.9209196, 18.5307976 ], [ 72.9213855, 18.5308755 ], [ 72.9219555, 18.5310133 ], [ 72.9221912, 18.531099 ], [ 72.922383, 18.5312705 ], [ 72.9231805, 18.5317512 ], [ 72.9235093, 18.5320032 ], [ 72.923597, 18.5320994 ], [ 72.9234628, 18.5324553 ], [ 72.9235751, 18.5326398 ], [ 72.9237313, 18.5326684 ], [ 72.9240465, 18.5326372 ], [ 72.9243561, 18.5326372 ], [ 72.9247343, 18.5327256 ], [ 72.9248713, 18.5327723 ], [ 72.9251454, 18.5329282 ], [ 72.926965, 18.534256 ], [ 72.9278565, 18.53485 ], [ 72.927324, 18.5361683 ], [ 72.9272637, 18.5363346 ], [ 72.9273871, 18.5363891 ], [ 72.9274528, 18.536345 ], [ 72.9275789, 18.5362826 ], [ 72.9278118, 18.5363398 ], [ 72.9282695, 18.5364801 ], [ 72.9288258, 18.5366178 ], [ 72.9291957, 18.5366256 ], [ 72.9295848, 18.5367094 ], [ 72.9292769, 18.5416672 ], [ 72.9285764, 18.5415047 ], [ 72.9267608, 18.5412045 ], [ 72.9259135, 18.5411631 ], [ 72.9255641, 18.5414033 ], [ 72.922771, 18.5500084 ], [ 72.9211792, 18.5546461 ], [ 72.918614984768368, 18.559729516406254 ], [ 72.912287, 18.5722744 ], [ 72.9108704, 18.5757474 ], [ 72.910572, 18.5768011 ], [ 72.9104539, 18.5775124 ], [ 72.9104477, 18.5776956 ], [ 72.910448, 18.5778312 ], [ 72.9107012, 18.5779051 ], [ 72.9111854, 18.5767313 ], [ 72.9115543, 18.5758365 ], [ 72.9118107, 18.5754712 ], [ 72.9145084, 18.5756303 ], [ 72.9145147, 18.5751155 ], [ 72.9139747, 18.5751094 ], [ 72.9137237, 18.5735619 ], [ 72.9129171, 18.5732956 ], [ 72.9129233, 18.5727808 ], [ 72.9142745, 18.5726666 ], [ 72.9144105, 18.5725398 ], [ 72.9144262, 18.5712527 ], [ 72.9152484, 18.5702319 ], [ 72.9158195, 18.5676638 ], [ 72.9166449, 18.5663858 ], [ 72.9170581, 18.5657462 ], [ 72.9175995, 18.5656239 ], [ 72.9177402, 18.5651106 ], [ 72.9180133, 18.564856 ], [ 72.918155, 18.5643427 ], [ 72.9186948, 18.5643487 ], [ 72.9186854, 18.565121 ], [ 72.9192251, 18.5651268 ], [ 72.9195922, 18.5682204 ], [ 72.9190462, 18.5687292 ], [ 72.9170909, 18.5741142 ], [ 72.9159895, 18.575904 ], [ 72.9154432, 18.576413 ], [ 72.915437, 18.5769278 ], [ 72.9157039, 18.5771881 ], [ 72.9167241, 18.5820909 ], [ 72.9171751, 18.5821014 ], [ 72.9175254, 18.5820571 ], [ 72.9179223, 18.5820164 ], [ 72.9183622, 18.5821487 ], [ 72.9191492, 18.5829759 ], [ 72.9205509, 18.5840193 ], [ 72.9213985, 18.5842431 ], [ 72.9218421, 18.5844403 ], [ 72.9219242, 18.5846193 ], [ 72.921495, 18.5850058 ], [ 72.9201791, 18.5852539 ], [ 72.9192082, 18.5848344 ], [ 72.918477, 18.5845776 ], [ 72.91713, 18.5840112 ], [ 72.9161236, 18.5835556 ], [ 72.9160341, 18.5833706 ], [ 72.9158184, 18.5831005 ], [ 72.9155005, 18.5828497 ], [ 72.9153136, 18.582292 ], [ 72.9150148, 18.5829048 ], [ 72.914822, 18.5830998 ], [ 72.9142728, 18.583866 ], [ 72.9137078, 18.5859193 ], [ 72.9119159, 18.5889888 ], [ 72.9108362, 18.5889769 ], [ 72.9109456, 18.5910376 ], [ 72.9114792, 18.5915585 ], [ 72.9117398, 18.5923338 ], [ 72.9124104, 18.5927269 ], [ 72.9126803, 18.5927299 ], [ 72.9129534, 18.5924755 ], [ 72.9132234, 18.5924783 ], [ 72.9136232, 18.5928694 ], [ 72.9136105, 18.5938991 ], [ 72.9141442, 18.5944199 ], [ 72.914141, 18.5946774 ], [ 72.9135856, 18.5959584 ], [ 72.9133125, 18.5962128 ], [ 72.9133062, 18.5967276 ], [ 72.9135729, 18.5969881 ], [ 72.913699, 18.5977618 ], [ 72.9142374, 18.597896 ], [ 72.9143703, 18.5980266 ], [ 72.9143671, 18.598284 ], [ 72.9139564, 18.5987945 ], [ 72.9134164, 18.5987885 ], [ 72.9134102, 18.5993033 ], [ 72.9123319, 18.5991621 ], [ 72.9120698, 18.5985161 ], [ 72.9115298, 18.5985101 ], [ 72.9118156, 18.597226 ], [ 72.9110025, 18.5974746 ], [ 72.9105814, 18.5987571 ], [ 72.9104453, 18.5988837 ], [ 72.9119696, 18.5991175 ], [ 72.9119029, 18.6010888 ], [ 72.9117653, 18.6013447 ], [ 72.9112253, 18.6013387 ], [ 72.9113567, 18.6015976 ], [ 72.9113442, 18.6026273 ], [ 72.9116111, 18.6028877 ], [ 72.9117371, 18.6036615 ], [ 72.909571, 18.6041523 ], [ 72.9097086, 18.6038964 ], [ 72.9095867, 18.6028652 ], [ 72.9090437, 18.6031166 ], [ 72.9093263, 18.6020899 ], [ 72.9085162, 18.6020809 ], [ 72.9089365, 18.6007983 ], [ 72.9097559, 18.6000351 ], [ 72.9099227, 18.5974625 ], [ 72.9093796, 18.597714 ], [ 72.9092378, 18.5982273 ], [ 72.9089647, 18.5984817 ], [ 72.9086729, 18.6002806 ], [ 72.9085351, 18.6005366 ], [ 72.9074521, 18.6007819 ], [ 72.9075708, 18.6020705 ], [ 72.9074332, 18.6023264 ], [ 72.9066219, 18.6024456 ], [ 72.9058213, 18.6016643 ], [ 72.905283, 18.6015301 ], [ 72.9059732, 18.6002506 ], [ 72.9063833, 18.5998684 ], [ 72.9074678, 18.5994948 ], [ 72.9073387, 18.5989784 ], [ 72.9074758, 18.5988509 ], [ 72.9080172, 18.5987286 ], [ 72.9081675, 18.597443 ], [ 72.907637, 18.5966649 ], [ 72.9073796, 18.5956322 ], [ 72.9076559, 18.5951204 ], [ 72.9076591, 18.594863 ], [ 72.9071286, 18.5940847 ], [ 72.9070097, 18.5927961 ], [ 72.9064652, 18.5931758 ], [ 72.9059267, 18.5930416 ], [ 72.9064809, 18.5918887 ], [ 72.9075606, 18.5919008 ], [ 72.9076967, 18.5917739 ], [ 72.9077062, 18.5910017 ], [ 72.9079793, 18.5907473 ], [ 72.9077283, 18.5891998 ], [ 72.9073395, 18.5879083 ], [ 72.9095069, 18.5872882 ], [ 72.9097816, 18.5869057 ], [ 72.9081603, 18.5870159 ], [ 72.9076251, 18.5866243 ], [ 72.9077659, 18.5861109 ], [ 72.908716, 18.5857348 ], [ 72.909125, 18.5853536 ], [ 72.9092699, 18.5845829 ], [ 72.9098097, 18.5845889 ], [ 72.9097026, 18.5822706 ], [ 72.9094389, 18.5817528 ], [ 72.9094421, 18.5814954 ], [ 72.9099881, 18.5809866 ], [ 72.9101456, 18.5791862 ], [ 72.9109554, 18.5791952 ], [ 72.9101048, 18.5785405 ], [ 72.9098153, 18.5785331 ], [ 72.9093143, 18.5786814 ], [ 72.9089543, 18.5792527 ], [ 72.9057692, 18.5862028 ], [ 72.8933165, 18.6105956 ], [ 72.8926999, 18.6117036 ], [ 72.8893116, 18.6166793 ], [ 72.8873418, 18.6192796 ], [ 72.8868196, 18.6199586 ], [ 72.8863368, 18.6206652 ], [ 72.8856638, 18.6218552 ], [ 72.8850566, 18.6230819 ], [ 72.8836173, 18.6271875 ], [ 72.8823284, 18.6313472 ], [ 72.8822288, 18.6329729 ], [ 72.8823442, 18.6341601 ], [ 72.8826217, 18.635568 ], [ 72.8828285, 18.6363174 ], [ 72.8831585, 18.6373466 ], [ 72.8834605, 18.6380223 ], [ 72.8838471, 18.6382932 ], [ 72.884351, 18.6384818 ], [ 72.8847234, 18.6385791 ], [ 72.8850228, 18.638658 ], [ 72.8853372, 18.6386699 ], [ 72.8862984, 18.6385562 ], [ 72.8872715, 18.638295 ], [ 72.8892241, 18.637685 ], [ 72.8905116, 18.6370954 ], [ 72.8918205, 18.6364041 ], [ 72.8933225, 18.6359771 ], [ 72.8945242, 18.6359161 ], [ 72.8957183, 18.6355674 ], [ 72.8966914, 18.6351841 ], [ 72.8981934, 18.6340251 ], [ 72.8982149, 18.6327238 ], [ 72.8983759, 18.6318775 ], [ 72.8984509, 18.6314835 ], [ 72.8985367, 18.6306499 ], [ 72.8985367, 18.6301619 ], [ 72.8981891, 18.6295127 ], [ 72.897523, 18.6287329 ], [ 72.8971248, 18.6282899 ], [ 72.8968611, 18.6276957 ], [ 72.8964779, 18.6258892 ], [ 72.897452, 18.6235832 ], [ 72.8985366, 18.6232086 ], [ 72.8992253, 18.6220584 ], [ 72.8994986, 18.621804 ], [ 72.8996436, 18.6210332 ], [ 72.9001851, 18.62091 ], [ 72.9004582, 18.6206556 ], [ 72.9020845, 18.6201589 ], [ 72.9039745, 18.6201801 ], [ 72.9042414, 18.6204403 ], [ 72.9045113, 18.6204434 ], [ 72.9050577, 18.6199346 ], [ 72.9055992, 18.6198123 ], [ 72.90574, 18.619299 ], [ 72.9065563, 18.6187932 ], [ 72.9068895, 18.6187829 ], [ 72.9075547, 18.6187931 ], [ 72.9079409, 18.6188134 ], [ 72.9083057, 18.6188541 ], [ 72.9085786, 18.6190731 ], [ 72.907501, 18.6197488 ], [ 72.9076942, 18.620125 ], [ 72.9082928, 18.6203572 ], [ 72.908413, 18.620491 ], [ 72.9086705, 18.6206334 ], [ 72.9089173, 18.6208367 ], [ 72.9091104, 18.6210807 ], [ 72.9096361, 18.6211519 ], [ 72.9103227, 18.6209181 ], [ 72.9105588, 18.620308 ], [ 72.9108055, 18.6201149 ], [ 72.9110416, 18.6192608 ], [ 72.9112817, 18.6188457 ], [ 72.9114385, 18.6186711 ], [ 72.9116638, 18.6183864 ], [ 72.9119428, 18.6180509 ], [ 72.912093, 18.6175019 ], [ 72.9124041, 18.6168715 ], [ 72.9125221, 18.6163936 ], [ 72.9126509, 18.6155497 ], [ 72.9129298, 18.615143 ], [ 72.9135736, 18.61496 ], [ 72.9141529, 18.6141567 ], [ 72.9144211, 18.6137195 ], [ 72.9148396, 18.6137602 ], [ 72.915258, 18.6136585 ], [ 72.9157408, 18.6133128 ], [ 72.9163416, 18.6128756 ], [ 72.9165669, 18.6125706 ], [ 72.9165991, 18.6121842 ], [ 72.9169639, 18.6115335 ], [ 72.9170456, 18.6111861 ], [ 72.9175862, 18.6108421 ], [ 72.91779, 18.6105472 ], [ 72.9178653, 18.6102321 ], [ 72.9182393, 18.6101612 ], [ 72.9185171, 18.6099385 ], [ 72.9189658, 18.609817 ], [ 72.9194252, 18.6099081 ], [ 72.9199594, 18.6099385 ], [ 72.9203058, 18.6095484 ], [ 72.9204419, 18.6094216 ], [ 72.92096, 18.6077129 ], [ 72.9214092, 18.6076301 ], [ 72.9221231, 18.6071057 ], [ 72.9221338, 18.6071057 ], [ 72.9226595, 18.6063939 ], [ 72.9230243, 18.606038 ], [ 72.9238075, 18.6050822 ], [ 72.9246765, 18.6045331 ], [ 72.9250413, 18.6042078 ], [ 72.9255777, 18.6038315 ], [ 72.9261678, 18.6037197 ], [ 72.9266184, 18.6036892 ], [ 72.9272836, 18.6037502 ], [ 72.9272729, 18.6041874 ], [ 72.9265004, 18.6041162 ], [ 72.9258138, 18.6041976 ], [ 72.9250091, 18.6047467 ], [ 72.9244083, 18.6053263 ], [ 72.9238289, 18.6058143 ], [ 72.9233569, 18.6063736 ], [ 72.9229814, 18.6074616 ], [ 72.9228848, 18.6077971 ], [ 72.9227496, 18.6084173 ], [ 72.9226733, 18.6088247 ], [ 72.9225771, 18.6094423 ], [ 72.9218763, 18.6099629 ], [ 72.9208316, 18.6107133 ], [ 72.9206899, 18.6112266 ], [ 72.9201518, 18.6116801 ], [ 72.9200061, 18.6119913 ], [ 72.9187842, 18.6126825 ], [ 72.9184423, 18.6136647 ], [ 72.9202478, 18.6143111 ], [ 72.9206112, 18.6148089 ], [ 72.9208783, 18.6149506 ], [ 72.9209099, 18.6153481 ], [ 72.9206539, 18.6154873 ], [ 72.9204296, 18.6157809 ], [ 72.9202259, 18.616113 ], [ 72.9197778, 18.6164694 ], [ 72.9194893, 18.6168643 ], [ 72.9188604, 18.617385 ], [ 72.9186987, 18.6176844 ], [ 72.9186666, 18.6178566 ], [ 72.9187414, 18.6182211 ], [ 72.9189551, 18.6188185 ], [ 72.9191368, 18.6189703 ], [ 72.9192436, 18.6193146 ], [ 72.9197778, 18.6203473 ], [ 72.9197885, 18.6203777 ], [ 72.9197351, 18.620803 ], [ 72.9194145, 18.6210055 ], [ 72.9192329, 18.6212485 ], [ 72.9186818, 18.6213886 ], [ 72.9182955, 18.6218258 ], [ 72.9181217, 18.6226761 ], [ 72.9175448, 18.6229393 ], [ 72.9175341, 18.6229393 ], [ 72.9172136, 18.6226356 ], [ 72.9169465, 18.6222508 ], [ 72.9167969, 18.6217446 ], [ 72.9157178, 18.6205498 ], [ 72.915269, 18.6206916 ], [ 72.9147649, 18.6210722 ], [ 72.9131371, 18.6216983 ], [ 72.9132684, 18.6219572 ], [ 72.913259, 18.6227295 ], [ 72.9131214, 18.6229854 ], [ 72.9123145, 18.6227189 ], [ 72.9115185, 18.6229225 ], [ 72.9109391, 18.6235203 ], [ 72.9104671, 18.6240083 ], [ 72.9099521, 18.624903 ], [ 72.9093068, 18.6257749 ], [ 72.9088887, 18.6268 ], [ 72.9077897, 18.6283324 ], [ 72.9077835, 18.6288472 ], [ 72.9070962, 18.6298695 ], [ 72.9062862, 18.6298605 ], [ 72.9055318, 18.6305069 ], [ 72.9049525, 18.6308323 ], [ 72.9043516, 18.6311251 ], [ 72.9030427, 18.6318286 ], [ 72.9027209, 18.632406 ], [ 72.90212, 18.632894 ], [ 72.9010257, 18.6334024 ], [ 72.9002532, 18.6343987 ], [ 72.8997382, 18.635273 ], [ 72.8990087, 18.6359033 ], [ 72.8982362, 18.6361391 ], [ 72.8974043, 18.636631 ], [ 72.8967658, 18.6368654 ], [ 72.8964537, 18.6370055 ], [ 72.8959339, 18.6372109 ], [ 72.8948246, 18.6376037 ], [ 72.8934942, 18.6382136 ], [ 72.8928719, 18.638539 ], [ 72.8907261, 18.6396369 ], [ 72.889267, 18.6405722 ], [ 72.8877864, 18.6410805 ], [ 72.8865988, 18.6411994 ], [ 72.8848821, 18.6409758 ], [ 72.8835732, 18.6403048 ], [ 72.8825387, 18.6393774 ], [ 72.8825548, 18.6380903 ], [ 72.8824234, 18.6378314 ], [ 72.8816166, 18.6375649 ], [ 72.8813561, 18.6367896 ], [ 72.8794692, 18.6365108 ], [ 72.8793401, 18.6359945 ], [ 72.8790732, 18.635734 ], [ 72.8789451, 18.6352179 ], [ 72.8786735, 18.635343 ], [ 72.8781335, 18.6353369 ], [ 72.8770566, 18.6350672 ], [ 72.876785, 18.6351935 ], [ 72.8767818, 18.6354507 ], [ 72.8783972, 18.6358548 ], [ 72.8787969, 18.6362458 ], [ 72.8787937, 18.6365033 ], [ 72.8783826, 18.6370136 ], [ 72.8770279, 18.637384 ], [ 72.8767546, 18.6376384 ], [ 72.8726979, 18.6381073 ], [ 72.8710713, 18.6386038 ], [ 72.8699801, 18.6394929 ], [ 72.8692853, 18.6410296 ], [ 72.86871, 18.643855 ], [ 72.8681505, 18.6453932 ], [ 72.8670575, 18.6464106 ], [ 72.8665015, 18.6476915 ], [ 72.8660904, 18.6482018 ], [ 72.8652772, 18.6484499 ], [ 72.8654053, 18.6489663 ], [ 72.865132, 18.6492207 ], [ 72.8652547, 18.6502519 ], [ 72.8653759, 18.6506017 ], [ 72.8651553, 18.6513536 ], [ 72.8649102, 18.651522 ], [ 72.8646835, 18.6516207 ], [ 72.864996, 18.6521201 ], [ 72.8651706, 18.6528487 ], [ 72.8650174, 18.6534003 ], [ 72.8634216, 18.6564095 ], [ 72.8634119, 18.6571817 ], [ 72.8631354, 18.6576936 ], [ 72.8631258, 18.6584656 ], [ 72.8628461, 18.6592348 ], [ 72.8631636, 18.6647103 ], [ 72.8629496, 18.6670214 ], [ 72.8625109, 18.6671329 ], [ 72.8612484, 18.6667578 ], [ 72.8610987, 18.6666159 ], [ 72.8608098, 18.6665754 ], [ 72.86066, 18.6667173 ], [ 72.8646187, 18.6680654 ], [ 72.8645438, 18.6684405 ], [ 72.8651108, 18.6686635 ], [ 72.865282, 18.6684709 ], [ 72.8654639, 18.6684709 ], [ 72.8658491, 18.6687344 ], [ 72.8659026, 18.6688864 ], [ 72.8662877, 18.6694845 ], [ 72.8666836, 18.6694946 ], [ 72.8667906, 18.6697886 ], [ 72.8670688, 18.6701129 ], [ 72.8674111, 18.6704778 ], [ 72.8679247, 18.6708326 ], [ 72.868128, 18.6711975 ], [ 72.8675823, 18.6716435 ], [ 72.8673042, 18.6716739 ], [ 72.867133, 18.6718969 ], [ 72.8671223, 18.6721908 ], [ 72.8662128, 18.671907 ], [ 72.8663412, 18.6714914 ], [ 72.8662663, 18.6711772 ], [ 72.8657956, 18.6709644 ], [ 72.8656244, 18.670863 ], [ 72.8656244, 18.6707008 ], [ 72.8658812, 18.6706704 ], [ 72.8662449, 18.67064 ], [ 72.8659882, 18.6703866 ], [ 72.8655816, 18.6701028 ], [ 72.8652499, 18.6699406 ], [ 72.8649503, 18.6697683 ], [ 72.8648434, 18.669596 ], [ 72.8647578, 18.6692818 ], [ 72.8644582, 18.6690385 ], [ 72.8639339, 18.6690284 ], [ 72.8633883, 18.6688459 ], [ 72.8603818, 18.6677005 ], [ 72.8602748, 18.6678627 ], [ 72.8615587, 18.6682783 ], [ 72.8632064, 18.6688864 ], [ 72.8634953, 18.6697075 ], [ 72.8627105, 18.6700458 ], [ 72.8618616, 18.6731254 ], [ 72.8615883, 18.6733798 ], [ 72.861470228784668, 18.673704377148443 ], [ 72.8604692, 18.6764562 ], [ 72.8601959, 18.6767105 ], [ 72.8601475, 18.6805716 ], [ 72.8598676, 18.6813407 ], [ 72.8595524, 18.6849413 ], [ 72.8597869, 18.6877757 ], [ 72.858954, 18.6895684 ], [ 72.8586676, 18.6908523 ], [ 72.8581177, 18.6916183 ], [ 72.8575679, 18.6923843 ], [ 72.8571566, 18.6928944 ], [ 72.8563431, 18.6931426 ], [ 72.8562012, 18.6936559 ], [ 72.8556512, 18.6944219 ], [ 72.8553486, 18.6969929 ], [ 72.855596, 18.6987977 ], [ 72.855046, 18.6995637 ], [ 72.8550428, 18.6998211 ], [ 72.8557007, 18.7012441 ], [ 72.855971, 18.7012473 ], [ 72.8561071, 18.7011205 ], [ 72.8562524, 18.7003499 ], [ 72.8573327, 18.7003622 ], [ 72.8573522, 18.6988179 ], [ 72.8576289, 18.6983061 ], [ 72.8580751, 18.6983989 ], [ 72.8585301, 18.698404 ], [ 72.8587092, 18.6983185 ], [ 72.8586996, 18.6990906 ], [ 72.85896, 18.6998659 ], [ 72.8592205, 18.7006412 ], [ 72.8594721, 18.7017028 ], [ 72.8599746, 18.7022435 ], [ 72.8605386, 18.7032306 ], [ 72.860799, 18.7040059 ], [ 72.8610627, 18.7045238 ], [ 72.86104, 18.7063257 ], [ 72.8607699, 18.7063225 ], [ 72.8608833, 18.7046094 ], [ 72.8606196, 18.7040915 ], [ 72.8601971, 18.7031431 ], [ 72.8597646, 18.7023726 ], [ 72.8592433, 18.7018138 ], [ 72.8590411, 18.7007268 ], [ 72.8587807, 18.6999515 ], [ 72.8585202, 18.6991762 ], [ 72.8583377, 18.698998 ], [ 72.8580149, 18.6988237 ], [ 72.8577181, 18.6989674 ], [ 72.8577376, 18.7003669 ], [ 72.8580044, 18.7006274 ], [ 72.8579946, 18.7013996 ], [ 72.8573004, 18.7029362 ], [ 72.8581109, 18.7029454 ], [ 72.8582388, 18.7034618 ], [ 72.8587727, 18.7039829 ], [ 72.8595635, 18.7055364 ], [ 72.8600713, 18.7081167 ], [ 72.860335, 18.7086345 ], [ 72.8605728, 18.7112117 ], [ 72.8613477, 18.7140524 ], [ 72.8616145, 18.7143129 ], [ 72.8620008, 18.7158619 ], [ 72.862541, 18.7158679 ], [ 72.8626595, 18.7171565 ], [ 72.8634569, 18.7181955 ], [ 72.8639521, 18.7218052 ], [ 72.8641186, 18.7300452 ], [ 72.8638453, 18.7302994 ], [ 72.8638096, 18.7331308 ], [ 72.8635299, 18.7339001 ], [ 72.8636523, 18.7349312 ], [ 72.8625684, 18.7351762 ], [ 72.8626707, 18.7377517 ], [ 72.8618309, 18.7400592 ], [ 72.8617824, 18.7439201 ], [ 72.8625573, 18.7467607 ], [ 72.8628243, 18.7470212 ], [ 72.8630816, 18.7480539 ], [ 72.8633484, 18.7483145 ], [ 72.8636024, 18.7496046 ], [ 72.8638693, 18.7498651 ], [ 72.8650016, 18.7565714 ], [ 72.865542, 18.7565776 ], [ 72.8657422, 18.7573194 ], [ 72.8663427, 18.7573589 ], [ 72.8669827, 18.7567628 ], [ 72.8675329, 18.7559968 ], [ 72.8674463, 18.7555695 ], [ 72.8677166, 18.7555725 ], [ 72.86771, 18.7560873 ], [ 72.86716, 18.7568533 ], [ 72.8666098, 18.7576196 ], [ 72.8657992, 18.7576103 ], [ 72.865262, 18.7573466 ], [ 72.8651199, 18.75786 ], [ 72.8648464, 18.7581142 ], [ 72.8645601, 18.759398 ], [ 72.8640067, 18.7604215 ], [ 72.8640003, 18.7609363 ], [ 72.8634371, 18.762732 ], [ 72.8631604, 18.7632436 ], [ 72.8625648, 18.7676133 ], [ 72.8622881, 18.7681251 ], [ 72.8622783, 18.7688972 ], [ 72.8620016, 18.769409 ], [ 72.8618476, 18.7709518 ], [ 72.8623879, 18.770958 ], [ 72.8622426, 18.7717286 ], [ 72.8625096, 18.7719892 ], [ 72.8627085, 18.7776551 ], [ 72.8625705, 18.777911 ], [ 72.863111, 18.777917 ], [ 72.8629009, 18.7838357 ], [ 72.8628975, 18.7840932 ], [ 72.862849777176663, 18.787879237890628 ], [ 72.8628391, 18.7887263 ], [ 72.8636011, 18.7925967 ], [ 72.864132, 18.793375 ], [ 72.8647625, 18.7969864 ], [ 72.865575, 18.7968663 ], [ 72.8662454, 18.7972608 ], [ 72.8667729, 18.7982965 ], [ 72.8675514, 18.8008798 ], [ 72.8678183, 18.8011402 ], [ 72.8683427, 18.8024333 ], [ 72.8686098, 18.802694 ], [ 72.8688702, 18.8034693 ], [ 72.8695384, 18.80412 ], [ 72.8700757, 18.8043836 ], [ 72.870346, 18.8043867 ], [ 72.8717022, 18.8040164 ], [ 72.8714448, 18.8029837 ], [ 72.8730681, 18.8028731 ], [ 72.8736185, 18.8021069 ], [ 72.8755104, 18.8021285 ], [ 72.8773926, 18.8029223 ], [ 72.8784641, 18.8037068 ], [ 72.8790046, 18.8037129 ], [ 72.8798058, 18.8044944 ], [ 72.8808853, 18.8046358 ], [ 72.8808789, 18.8051506 ], [ 72.881418, 18.805285 ], [ 72.8818181, 18.8056762 ], [ 72.8819472, 18.8061926 ], [ 72.882436, 18.8064034 ], [ 72.8829312, 18.8080916 ], [ 72.8832734, 18.8081152 ], [ 72.8833214, 18.8080447 ], [ 72.8838946, 18.8080947 ], [ 72.8838917, 18.8079474 ], [ 72.8831101, 18.8078857 ], [ 72.8827018, 18.8064151 ], [ 72.8828574, 18.806193 ], [ 72.8825503, 18.8048127 ], [ 72.8827676, 18.8042229 ], [ 72.8833123, 18.8039449 ], [ 72.8837777, 18.8037887 ], [ 72.8843839, 18.8037849 ], [ 72.886846, 18.8035445 ], [ 72.8877997, 18.8029121 ], [ 72.8878094, 18.80214 ], [ 72.8874108, 18.8016205 ], [ 72.8879513, 18.8016267 ], [ 72.8879577, 18.8011119 ], [ 72.8871469, 18.8011026 ], [ 72.8870712, 18.7989909 ], [ 72.8870498, 18.7980123 ], [ 72.887076, 18.7965919 ], [ 72.8875282, 18.7969283 ], [ 72.8875628, 18.7985836 ], [ 72.8883576, 18.7991699 ], [ 72.8910658, 18.7992504 ], [ 72.8928436, 18.7994933 ], [ 72.8933841, 18.7994993 ], [ 72.8958039, 18.8005564 ], [ 72.896204, 18.8009476 ], [ 72.8960566, 18.8019756 ], [ 72.8968755, 18.8013409 ], [ 72.897416, 18.801347 ], [ 72.8979502, 18.8018679 ], [ 72.8987595, 18.8020062 ], [ 72.8988814, 18.8030372 ], [ 72.8990154, 18.803167 ], [ 72.8995542, 18.8033024 ], [ 72.8995448, 18.8040744 ], [ 72.9011728, 18.8035779 ], [ 72.9014559, 18.8025513 ], [ 72.9022603, 18.8030754 ], [ 72.9022667, 18.8025605 ], [ 72.9033525, 18.8021861 ], [ 72.9037623, 18.8018049 ], [ 72.9040422, 18.8010359 ], [ 72.9047232, 18.8006567 ], [ 72.9054064, 18.8000213 ], [ 72.9051998, 18.7948701 ], [ 72.9054828, 18.7938437 ], [ 72.9061637, 18.7934645 ], [ 72.9067107, 18.7929559 ], [ 72.908478, 18.792075 ], [ 72.90862, 18.7915617 ], [ 72.9091622, 18.7914386 ], [ 72.9099793, 18.7909329 ], [ 72.9121382, 18.7912145 ], [ 72.9126757, 18.791478 ], [ 72.9145674, 18.7914991 ], [ 72.9151159, 18.7908622 ], [ 72.9134928, 18.7909722 ], [ 72.9121478, 18.7904422 ], [ 72.9116073, 18.7904362 ], [ 72.9105309, 18.7900385 ], [ 72.9105436, 18.7890089 ], [ 72.9100031, 18.7890028 ], [ 72.91021396378089, 18.787879237890628 ], [ 72.9102924, 18.7874613 ], [ 72.9113703, 18.7877308 ], [ 72.9115113, 18.7872175 ], [ 72.9116485, 18.7870899 ], [ 72.9135372, 18.7873685 ], [ 72.9138042, 18.787629 ], [ 72.91480505870986, 18.787879237890628 ], [ 72.9148821, 18.7878985 ], [ 72.914902808281894, 18.787879237890628 ], [ 72.9154291, 18.7873897 ], [ 72.9162399, 18.7873988 ], [ 72.9165117, 18.7872735 ], [ 72.91664, 18.7877898 ], [ 72.916619608949958, 18.788079237890628 ], [ 72.9164769, 18.7901049 ], [ 72.9151318, 18.7895751 ], [ 72.9152412, 18.7916358 ], [ 72.9151002, 18.7921491 ], [ 72.915639, 18.7922835 ], [ 72.9164404, 18.7930648 ], [ 72.917512, 18.793849 ], [ 72.9185867, 18.7943759 ], [ 72.9191242, 18.7946394 ], [ 72.9199254, 18.7954205 ], [ 72.9204629, 18.795684 ], [ 72.9211303, 18.7963354 ], [ 72.9215281, 18.7969832 ], [ 72.9220671, 18.7971183 ], [ 72.9221955, 18.7976346 ], [ 72.9227265, 18.7984129 ], [ 72.9232609, 18.7989336 ], [ 72.9236542, 18.7999678 ], [ 72.924193, 18.800102 ], [ 72.9243261, 18.8002328 ], [ 72.9247163, 18.8015243 ], [ 72.9252569, 18.8015303 ], [ 72.925646, 18.8028219 ], [ 72.9261803, 18.8033426 ], [ 72.9268422, 18.8045082 ], [ 72.9273812, 18.8046433 ], [ 72.9272425, 18.8048992 ], [ 72.9273656, 18.8059304 ], [ 72.9279061, 18.8059363 ], [ 72.9282952, 18.8072279 ], [ 72.9285625, 18.8074883 ], [ 72.9290873, 18.8087813 ], [ 72.9296216, 18.8093022 ], [ 72.9310584, 18.8134373 ], [ 72.931599, 18.8134432 ], [ 72.9318503, 18.8149907 ], [ 72.9335074, 18.8192945 ], [ 72.9375415, 18.8278248 ], [ 72.9403739, 18.8299369 ], [ 72.943893, 18.8295308 ], [ 72.9455237, 18.8253064 ], [ 72.9483562, 18.8198632 ], [ 72.9504161, 18.816451 ], [ 72.9544501, 18.8075953 ], [ 72.9624324, 18.7950826 ], [ 72.9735904, 18.78818 ], [ 72.973934598426723, 18.788079237890628 ], [ 72.9866366, 18.7843608 ], [ 72.9948764, 18.7807041 ], [ 72.9954772, 18.7793227 ], [ 72.9956489, 18.7770473 ], [ 72.9940181, 18.7739593 ], [ 72.9884391, 18.7667267 ], [ 72.9846625, 18.7578683 ], [ 72.9834792, 18.7535008 ], [ 72.9779389, 18.7517767 ], [ 72.9720454, 18.7495011 ], [ 72.9704405, 18.7488071 ], [ 72.9694727, 18.7477973 ], [ 72.969028, 18.7469174 ], [ 72.96877, 18.7461595 ], [ 72.9685211, 18.7453762 ], [ 72.9684106, 18.7446051 ], [ 72.9682732, 18.7439366 ], [ 72.9687678, 18.7427936 ], [ 72.9690994, 18.7419635 ], [ 72.9695081, 18.7414129 ], [ 72.969771, 18.7398096 ], [ 72.9695317, 18.7387601 ], [ 72.9682058, 18.7366103 ], [ 72.9676638, 18.7362515 ], [ 72.9670111, 18.7347952 ], [ 72.9670297, 18.7332507 ], [ 72.9667656, 18.732733 ], [ 72.9667872, 18.7309311 ], [ 72.9662684, 18.7291233 ], [ 72.9660043, 18.7286054 ], [ 72.9660166, 18.7275757 ], [ 72.9652215, 18.72628 ], [ 72.9650932, 18.7257636 ], [ 72.9637452, 18.7254914 ], [ 72.9637515, 18.7249766 ], [ 72.9621366, 18.7244442 ], [ 72.9618756, 18.7236689 ], [ 72.961337, 18.723534 ], [ 72.9610699, 18.7232735 ], [ 72.959719, 18.7232588 ], [ 72.9589178, 18.7224778 ], [ 72.9581134, 18.7219541 ], [ 72.957573, 18.7219483 ], [ 72.9556696, 18.7229571 ], [ 72.9540486, 18.7229396 ], [ 72.9524105, 18.724338 ], [ 72.9525296, 18.7256266 ], [ 72.9521, 18.7276816 ], [ 72.9518299, 18.7276786 ], [ 72.9520047, 18.7243336 ], [ 72.9525638, 18.722795 ], [ 72.952573, 18.7220227 ], [ 72.9515296, 18.718922 ], [ 72.9519571, 18.7171244 ], [ 72.9522272, 18.7171274 ], [ 72.9523525, 18.7179012 ], [ 72.9524865, 18.7180309 ], [ 72.9527566, 18.7180339 ], [ 72.9533032, 18.7175249 ], [ 72.9541198, 18.717019 ], [ 72.9546617, 18.7168967 ], [ 72.9542499, 18.717407 ], [ 72.953694, 18.7186882 ], [ 72.9536723, 18.7204901 ], [ 72.9539393, 18.7207504 ], [ 72.9542002, 18.7215257 ], [ 72.9551416, 18.7219216 ], [ 72.9556819, 18.7219277 ], [ 72.9559552, 18.7216731 ], [ 72.9570404, 18.7212992 ], [ 72.9570467, 18.7207844 ], [ 72.9581259, 18.7209244 ], [ 72.95866, 18.7214451 ], [ 72.9602748, 18.7219776 ], [ 72.9605419, 18.722238 ], [ 72.9632389, 18.722654 ], [ 72.9633642, 18.7234278 ], [ 72.964034, 18.72395 ], [ 72.9641778, 18.723179 ], [ 72.9644511, 18.7229246 ], [ 72.9647305, 18.7221552 ], [ 72.9654171, 18.7212612 ], [ 72.9659575, 18.7212671 ], [ 72.9665056, 18.7206298 ], [ 72.9656951, 18.7206211 ], [ 72.9657012, 18.7201063 ], [ 72.9665133, 18.7199859 ], [ 72.9666494, 18.7198591 ], [ 72.9667911, 18.7193457 ], [ 72.9654434, 18.7190736 ], [ 72.9656057, 18.7167583 ], [ 72.9654772, 18.716242 ], [ 72.9649369, 18.7162361 ], [ 72.9649461, 18.7154639 ], [ 72.9641372, 18.7153259 ], [ 72.9636016, 18.7149345 ], [ 72.9633468, 18.7136444 ], [ 72.963075, 18.7137697 ], [ 72.9617244, 18.7137549 ], [ 72.9609185, 18.7133605 ], [ 72.9610686, 18.7120749 ], [ 72.9613449, 18.7115629 ], [ 72.9623016, 18.7106718 ], [ 72.9636539, 18.7105582 ], [ 72.9633806, 18.7108128 ], [ 72.9633776, 18.7110702 ], [ 72.9636477, 18.7110732 ], [ 72.9637418, 18.7109042 ], [ 72.9644583, 18.7110819 ], [ 72.9644521, 18.7115967 ], [ 72.9639117, 18.7115909 ], [ 72.9643043, 18.7126249 ], [ 72.9643387, 18.7133091 ], [ 72.9638902, 18.7133928 ], [ 72.9638964, 18.712878 ], [ 72.9636261, 18.7128751 ], [ 72.9637516, 18.7136487 ], [ 72.9638856, 18.7137785 ], [ 72.9641557, 18.7137814 ], [ 72.9645214, 18.7134873 ], [ 72.9649709, 18.7134045 ], [ 72.96509, 18.7146931 ], [ 72.965488, 18.7153406 ], [ 72.9657583, 18.7153435 ], [ 72.9665732, 18.7149666 ], [ 72.9665579, 18.7162537 ], [ 72.9670966, 18.7163879 ], [ 72.9673638, 18.7166483 ], [ 72.9679025, 18.7167833 ], [ 72.9678964, 18.7172981 ], [ 72.9706025, 18.7169409 ], [ 72.9719595, 18.7164406 ], [ 72.9722328, 18.716186 ], [ 72.9730433, 18.7161949 ], [ 72.973217, 18.7164949 ], [ 72.9724984, 18.7165756 ], [ 72.9727639, 18.7169641 ], [ 72.9760043, 18.7171284 ], [ 72.9760104, 18.7166135 ], [ 72.9765492, 18.7167477 ], [ 72.9787182, 18.716128 ], [ 72.9788588, 18.7156145 ], [ 72.9800888, 18.7144688 ], [ 72.9806322, 18.7142172 ], [ 72.9810446, 18.7135784 ], [ 72.9824167, 18.711791 ], [ 72.9832362, 18.7110275 ], [ 72.9835125, 18.7105157 ], [ 72.9835186, 18.7100008 ], [ 72.9840712, 18.7089768 ], [ 72.9842158, 18.7082061 ], [ 72.9847577, 18.7080827 ], [ 72.9851701, 18.707444 ], [ 72.9856063, 18.7048742 ], [ 72.9858947, 18.7033325 ], [ 72.9861648, 18.7033354 ], [ 72.9857683, 18.7025588 ], [ 72.9859191, 18.7012732 ], [ 72.9853787, 18.7012673 ], [ 72.9853848, 18.7007525 ], [ 72.9848461, 18.7006175 ], [ 72.9845791, 18.7003571 ], [ 72.9832253, 18.7006001 ], [ 72.9829522, 18.7008545 ], [ 72.9810657, 18.7004486 ], [ 72.980924, 18.7009619 ], [ 72.9799669, 18.7019814 ], [ 72.9788817, 18.7023554 ], [ 72.9786086, 18.70261 ], [ 72.9772547, 18.7028528 ], [ 72.9769816, 18.7031072 ], [ 72.9764398, 18.7032306 ], [ 72.9764458, 18.7027158 ], [ 72.9745611, 18.7021806 ], [ 72.9748465, 18.7008963 ], [ 72.9764627, 18.7012994 ], [ 72.9778134, 18.7013142 ], [ 72.9780865, 18.7010596 ], [ 72.9794403, 18.7008167 ], [ 72.9802598, 18.7000532 ], [ 72.9808032, 18.6998016 ], [ 72.9816137, 18.6998103 ], [ 72.9818807, 18.7000708 ], [ 72.9829597, 18.7002114 ], [ 72.9831096, 18.6989258 ], [ 72.9819189, 18.6968534 ], [ 72.9811115, 18.6965873 ], [ 72.9809913, 18.6952987 ], [ 72.9808597, 18.6950398 ], [ 72.9803209, 18.6949048 ], [ 72.9784286, 18.6950135 ], [ 72.9789765, 18.6943754 ], [ 72.9795182, 18.694253 ], [ 72.9795275, 18.6934807 ], [ 72.9803362, 18.6936177 ], [ 72.9814061, 18.6945308 ], [ 72.981559, 18.6929876 ], [ 72.981295, 18.6924699 ], [ 72.981298, 18.6922125 ], [ 72.9817066, 18.6919594 ], [ 72.9820931, 18.6935083 ], [ 72.9823602, 18.6937686 ], [ 72.9823542, 18.6942836 ], [ 72.9822164, 18.6945395 ], [ 72.9835624, 18.6949396 ], [ 72.9841028, 18.6949455 ], [ 72.9851924, 18.6941849 ], [ 72.9857327, 18.6941906 ], [ 72.9859998, 18.694451 ], [ 72.9865384, 18.694586 ], [ 72.9865324, 18.6951008 ], [ 72.9878815, 18.6952435 ], [ 72.9885133, 18.6952909 ], [ 72.9884263, 18.6948636 ], [ 72.9886964, 18.6948665 ], [ 72.9888401, 18.6940957 ], [ 72.9892489, 18.6938426 ], [ 72.9888095, 18.6956277 ], [ 72.987065, 18.6957496 ], [ 72.9862593, 18.6953552 ], [ 72.9862653, 18.6948404 ], [ 72.9849132, 18.6949541 ], [ 72.9846399, 18.6952087 ], [ 72.9835549, 18.6955837 ], [ 72.9836864, 18.6958426 ], [ 72.9836498, 18.6989317 ], [ 72.9835122, 18.6991876 ], [ 72.9853955, 18.6998509 ], [ 72.9873982, 18.7018039 ], [ 72.9879202, 18.7033543 ], [ 72.9879142, 18.7038691 ], [ 72.9875033, 18.7043796 ], [ 72.9868153, 18.7054021 ], [ 72.9859835, 18.7071953 ], [ 72.9854097, 18.710021 ], [ 72.9847165, 18.7115584 ], [ 72.983903, 18.7118071 ], [ 72.9837615, 18.7123204 ], [ 72.9833506, 18.7128309 ], [ 72.9828102, 18.712825 ], [ 72.9825278, 18.7138519 ], [ 72.9817142, 18.7141006 ], [ 72.9812903, 18.7156408 ], [ 72.9808794, 18.7161513 ], [ 72.9800674, 18.7162707 ], [ 72.9797942, 18.7165253 ], [ 72.9792538, 18.7165194 ], [ 72.9789822, 18.7166457 ], [ 72.9787029, 18.7174151 ], [ 72.9781625, 18.7174092 ], [ 72.9781563, 18.7179241 ], [ 72.9773443, 18.7180435 ], [ 72.9754439, 18.7187954 ], [ 72.9748975, 18.7193043 ], [ 72.9740871, 18.7192956 ], [ 72.9727331, 18.7195383 ], [ 72.9724645, 18.7194072 ], [ 72.9719395, 18.7181142 ], [ 72.9716679, 18.7182395 ], [ 72.9711276, 18.7182338 ], [ 72.9708605, 18.7179734 ], [ 72.969508, 18.7180879 ], [ 72.9696182, 18.7201488 ], [ 72.9687983, 18.7209122 ], [ 72.9686577, 18.7214257 ], [ 72.9673052, 18.7215393 ], [ 72.9670321, 18.7217937 ], [ 72.9664901, 18.7219169 ], [ 72.9666216, 18.7221758 ], [ 72.9666123, 18.7229481 ], [ 72.9663392, 18.7232027 ], [ 72.9664409, 18.7260356 ], [ 72.9669813, 18.7260416 ], [ 72.9671096, 18.7265578 ], [ 72.9675109, 18.7269479 ], [ 72.9680497, 18.727083 ], [ 72.9684328, 18.7288893 ], [ 72.968399, 18.7317209 ], [ 72.9690195, 18.7363618 ], [ 72.9700956, 18.7367591 ], [ 72.9702289, 18.7368898 ], [ 72.9704681, 18.7394669 ], [ 72.9707354, 18.7397273 ], [ 72.9701427, 18.7440975 ], [ 72.9704067, 18.7446152 ], [ 72.9695425, 18.7464481 ], [ 72.9699909, 18.7475372 ], [ 72.9706626, 18.7481803 ], [ 72.9712033, 18.7484698 ], [ 72.9718846, 18.7487309 ], [ 72.9723953, 18.7489565 ], [ 72.9730594, 18.7493628 ], [ 72.9740582, 18.7496869 ], [ 72.9746676, 18.7499287 ], [ 72.9750614, 18.75001 ], [ 72.9754873, 18.7503117 ], [ 72.97638, 18.7505952 ], [ 72.9772769, 18.7508603 ], [ 72.9782092, 18.7513947 ], [ 72.9790278, 18.7515928 ], [ 72.9796426, 18.7517777 ], [ 72.9801715, 18.7518956 ], [ 72.980767, 18.7521018 ], [ 72.9813689, 18.7522024 ], [ 72.9815673, 18.7523751 ], [ 72.983226, 18.7528577 ], [ 72.9834556, 18.7523446 ], [ 72.9836262, 18.7505982 ], [ 72.9840993, 18.7470221 ], [ 72.9845017, 18.7457227 ], [ 72.9857033, 18.7420031 ], [ 72.9846265, 18.7419371 ], [ 72.9848905, 18.7424548 ], [ 72.9843502, 18.7424489 ], [ 72.9846082, 18.7434816 ], [ 72.9833532, 18.7431219 ], [ 72.9835426, 18.7421828 ], [ 72.9819291, 18.7415213 ], [ 72.9813933, 18.7411299 ], [ 72.9812638, 18.7406135 ], [ 72.9808652, 18.7400943 ], [ 72.9803217, 18.7403459 ], [ 72.9803277, 18.7398311 ], [ 72.9797873, 18.7398252 ], [ 72.9797813, 18.74034 ], [ 72.9789722, 18.7402021 ], [ 72.9787004, 18.7403283 ], [ 72.9791175, 18.739303 ], [ 72.9792547, 18.7391754 ], [ 72.98034, 18.7388014 ], [ 72.9804341, 18.7386326 ], [ 72.9808835, 18.7385498 ], [ 72.9808773, 18.7390647 ], [ 72.9819552, 18.7393336 ], [ 72.9820805, 18.7401074 ], [ 72.9823477, 18.7403676 ], [ 72.9824772, 18.740884 ], [ 72.9827488, 18.7407577 ], [ 72.9860531, 18.7409424 ], [ 72.986817, 18.7394631 ], [ 72.9875562, 18.7381799 ], [ 72.9901805, 18.7335468 ], [ 72.9922618, 18.7300922 ], [ 72.9928877, 18.7288955 ], [ 72.9944789, 18.7269469 ], [ 72.9962092, 18.7250418 ], [ 72.9990427, 18.7224198 ], [ 73.0025034, 18.7201459 ], [ 73.0052071, 18.7187939 ], [ 73.008596, 18.7175304 ], [ 73.0142992, 18.7156686 ], [ 73.0185074, 18.7141215 ], [ 73.0205977, 18.712876 ], [ 73.0219682, 18.7117878 ], [ 73.0235878, 18.7098997 ], [ 73.0242384, 18.7088508 ], [ 73.025415, 18.7066874 ], [ 73.026038, 18.7051927 ], [ 73.0265569, 18.7032501 ], [ 73.027139, 18.6996517 ], [ 73.0270032, 18.6977898 ], [ 73.0261122, 18.6950067 ], [ 73.0258449, 18.6947464 ], [ 73.0258569, 18.6937168 ], [ 73.0255898, 18.6934565 ], [ 73.0254641, 18.6926827 ], [ 73.0252487, 18.6912194 ], [ 73.0250202, 18.6903538 ], [ 73.0247918, 18.6887091 ], [ 73.024609, 18.6869778 ], [ 73.0249289, 18.6849435 ], [ 73.0256599, 18.6832122 ], [ 73.026528, 18.6813077 ], [ 73.0284471, 18.6790136 ], [ 73.0309144, 18.6775419 ], [ 73.0322852, 18.6768061 ], [ 73.0329479, 18.6762838 ], [ 73.0340356, 18.6756512 ], [ 73.0353456, 18.6756024 ], [ 73.036887, 18.6775309 ], [ 73.0361546, 18.6780144 ], [ 73.0353054, 18.6783997 ], [ 73.0339971, 18.6789978 ], [ 73.0329077, 18.6797587 ], [ 73.0312781, 18.680514 ], [ 73.030459, 18.6812777 ], [ 73.0299158, 18.6815295 ], [ 73.029098, 18.6821651 ], [ 73.0289565, 18.6826786 ], [ 73.0284102, 18.6831878 ], [ 73.0278521, 18.6847266 ], [ 73.0280716, 18.6891057 ], [ 73.0286, 18.6901411 ], [ 73.0290011, 18.6905312 ], [ 73.0295414, 18.6905368 ], [ 73.0300861, 18.6901568 ], [ 73.0296595, 18.6919545 ], [ 73.0293864, 18.6922091 ], [ 73.0293656, 18.694011 ], [ 73.0303057, 18.6945359 ], [ 73.0314159, 18.6919729 ], [ 73.0319563, 18.6919785 ], [ 73.0319651, 18.6912063 ], [ 73.0333142, 18.6913488 ], [ 73.034941, 18.690851 ], [ 73.0353917, 18.6905574 ], [ 73.0350681, 18.6914964 ], [ 73.0341112, 18.692516 ], [ 73.0327591, 18.6926302 ], [ 73.0316682, 18.6935204 ], [ 73.0311071, 18.6953166 ], [ 73.031916, 18.6954535 ], [ 73.0324518, 18.6958457 ], [ 73.0324488, 18.6961031 ], [ 73.0327191, 18.6961059 ], [ 73.032713, 18.6966209 ], [ 73.0321742, 18.696486 ], [ 73.02947, 18.6967151 ], [ 73.0295822, 18.6986476 ], [ 73.0297162, 18.6987774 ], [ 73.0298981, 18.6990949 ], [ 73.034456, 18.6984466 ], [ 73.0378264, 18.6983475 ], [ 73.0384968, 18.6987411 ], [ 73.0384849, 18.6997708 ], [ 73.0396937, 18.7004266 ], [ 73.0398674, 18.7007266 ], [ 73.0391504, 18.7006786 ], [ 73.0378071, 18.7000212 ], [ 73.037816, 18.699249 ], [ 73.0351162, 18.6990915 ], [ 73.0334908, 18.699461 ], [ 73.0329357, 18.7007427 ], [ 73.0313148, 18.7007255 ], [ 73.0318729, 18.6991866 ], [ 73.0313295, 18.6994384 ], [ 73.0311851, 18.7002093 ], [ 73.0306329, 18.7012333 ], [ 73.0304894, 18.7020042 ], [ 73.0310298, 18.7020099 ], [ 73.0310268, 18.7022673 ], [ 73.029442, 18.702498 ], [ 73.0292394, 18.7036734 ], [ 73.028881, 18.7049886 ], [ 73.0284161, 18.7066167 ], [ 73.0274275, 18.7090008 ], [ 73.0267062, 18.7101716 ], [ 73.0259211, 18.7114822 ], [ 73.0246879, 18.7130139 ], [ 73.022318, 18.7152557 ], [ 73.0204578, 18.7165258 ], [ 73.0169755, 18.7182671 ], [ 73.01239, 18.7205 ], [ 73.008713, 18.7222412 ], [ 73.0062256, 18.7236342 ], [ 73.0027433, 18.7259695 ], [ 73.000602, 18.7281408 ], [ 72.9985905, 18.7307423 ], [ 72.9962328, 18.7346342 ], [ 72.9940699, 18.7377886 ], [ 72.9918637, 18.7412092 ], [ 72.989744, 18.7447937 ], [ 72.9877541, 18.7489515 ], [ 72.9873864, 18.7504671 ], [ 72.9870403, 18.7523924 ], [ 72.9872999, 18.7546248 ], [ 72.9880785, 18.7567753 ], [ 72.9894845, 18.7588029 ], [ 72.9910418, 18.7611786 ], [ 72.995, 18.7660324 ], [ 72.9971845, 18.7691862 ], [ 72.9994989, 18.7730363 ], [ 73.0004722, 18.775678 ], [ 73.0010346, 18.7780945 ], [ 73.0012076, 18.7810842 ], [ 73.0002147, 18.7835545 ], [ 73.0002114, 18.7838119 ], [ 73.0004757, 18.7843298 ], [ 73.0004636, 18.7853595 ], [ 73.0008542, 18.7866509 ], [ 73.0003137, 18.786645 ], [ 73.0005794, 18.7870336 ], [ 73.0013902, 18.7870423 ], [ 73.0019368, 18.7865333 ], [ 73.0027507, 18.7862846 ], [ 73.0030241, 18.78603 ], [ 73.0049175, 18.7859219 ], [ 73.00504, 18.7869531 ], [ 73.0048992, 18.7874664 ], [ 73.0035448, 18.7877095 ], [ 73.003542805410817, 18.787879237890628 ], [ 73.0035327, 18.7887392 ], [ 73.0032625, 18.7887363 ], [ 73.003133, 18.78822 ], [ 73.003024825728744, 18.788079237890628 ], [ 73.002734, 18.7877008 ], [ 73.0019187, 18.7880778 ], [ 73.0002986, 18.7879321 ], [ 73.000016, 18.788959 ], [ 72.9989365, 18.7888182 ], [ 72.9986647, 18.7889446 ], [ 72.9982466, 18.7899699 ], [ 72.9979733, 18.7902243 ], [ 72.9975562, 18.7912496 ], [ 72.9980967, 18.7912555 ], [ 72.9978144, 18.7922823 ], [ 72.9972721, 18.7924048 ], [ 72.9956397, 18.7932888 ], [ 72.9953543, 18.794573 ], [ 72.9945465, 18.7943069 ], [ 72.9943955, 18.7955925 ], [ 72.9945282, 18.7958514 ], [ 72.9939877, 18.7958456 ], [ 72.9942457, 18.7968783 ], [ 72.9947862, 18.7968839 ], [ 72.9949149, 18.7974003 ], [ 72.9963867, 18.7987034 ], [ 72.9963927, 18.7981886 ], [ 72.9966632, 18.7981914 ], [ 72.9966539, 18.7989637 ], [ 72.9974679, 18.798715 ], [ 72.9974587, 18.7994872 ], [ 72.9977306, 18.799361 ], [ 72.999621, 18.7995105 ], [ 72.9996272, 18.7989956 ], [ 73.0015116, 18.799659 ], [ 73.003444, 18.7996796 ], [ 73.0058365, 18.7997051 ], [ 73.0088157, 18.799222 ], [ 73.0103707, 18.7999202 ], [ 73.0124855, 18.8005591 ], [ 73.014205, 18.8006961 ], [ 73.0155611, 18.8003237 ], [ 73.0174547, 18.8002156 ], [ 73.0175955, 18.7997023 ], [ 73.0185495, 18.7990682 ], [ 73.0196306, 18.7990797 ], [ 73.0203135, 18.7984437 ], [ 73.0205898, 18.7979317 ], [ 73.0222296, 18.7964044 ], [ 73.0223713, 18.7958911 ], [ 73.0229134, 18.7957675 ], [ 73.0235991, 18.7948743 ], [ 73.0241456, 18.7943651 ], [ 73.024428, 18.7933383 ], [ 73.0256524, 18.792707 ], [ 73.0275563, 18.7916974 ], [ 73.0297246, 18.7912054 ], [ 73.0326964, 18.7913659 ], [ 73.032837, 18.7908524 ], [ 73.032974, 18.7907248 ], [ 73.0332443, 18.7907276 ], [ 73.0340492, 18.791251 ], [ 73.0348601, 18.7912595 ], [ 73.0380946, 18.7920659 ], [ 73.0424193, 18.7921113 ], [ 73.0433515, 18.7932801 ], [ 73.0438623, 18.7958601 ], [ 73.0441267, 18.7963778 ], [ 73.0442503, 18.797409 ], [ 73.0458706, 18.7975541 ], [ 73.0475013, 18.7967989 ], [ 73.0518381, 18.7958144 ], [ 73.0523787, 18.7958199 ], [ 73.0529222, 18.7955681 ], [ 73.053733, 18.7955766 ], [ 73.0545499, 18.7950703 ], [ 73.056442, 18.7950899 ], [ 73.0580579, 18.7956216 ], [ 73.0589931, 18.796533 ], [ 73.0597746, 18.7991156 ], [ 73.0608323, 18.8011863 ], [ 73.0616342, 18.8019671 ], [ 73.061764, 18.8024834 ], [ 73.0644656, 18.8026397 ], [ 73.0652824, 18.8021332 ], [ 73.0656918, 18.8017518 ], [ 73.0658334, 18.8012383 ], [ 73.0663754, 18.8011147 ], [ 73.0680091, 18.8001018 ], [ 73.06882, 18.8001102 ], [ 73.0693546, 18.8006307 ], [ 73.0701628, 18.8008964 ], [ 73.0715011, 18.8020693 ], [ 73.0720942, 18.8092844 ], [ 73.0712745, 18.8100483 ], [ 73.0706079, 18.8092691 ], [ 73.0703361, 18.8093946 ], [ 73.066011, 18.8093498 ], [ 73.0651942, 18.8098561 ], [ 73.0638366, 18.810357 ], [ 73.0619415, 18.8105947 ], [ 73.0608661, 18.8100688 ], [ 73.0592618, 18.8085072 ], [ 73.0579131, 18.8082358 ], [ 73.0573724, 18.8082302 ], [ 73.0562809, 18.8091204 ], [ 73.0561394, 18.8096337 ], [ 73.0558661, 18.8098884 ], [ 73.0555809, 18.8111727 ], [ 73.0550315, 18.8119393 ], [ 73.0544849, 18.8124486 ], [ 73.0544819, 18.8127061 ], [ 73.0550165, 18.8132266 ], [ 73.0552692, 18.8147739 ], [ 73.0547196, 18.8155405 ], [ 73.0544405, 18.8163101 ], [ 73.0536206, 18.8170739 ], [ 73.0531027, 18.8187822 ], [ 73.0537294, 18.8193921 ], [ 73.0546196, 18.8205189 ], [ 73.0553382, 18.8205671 ], [ 73.0560003, 18.8217329 ], [ 73.0558392, 18.823848 ], [ 73.0550248, 18.8242974 ], [ 73.0550279, 18.82404 ], [ 73.0554418, 18.8232719 ], [ 73.0557181, 18.8227599 ], [ 73.055727, 18.8219877 ], [ 73.0550664, 18.8206934 ], [ 73.0545257, 18.8206877 ], [ 73.0534561, 18.8196467 ], [ 73.0529248, 18.8189266 ], [ 73.0529481, 18.8168094 ], [ 73.0534904, 18.8166858 ], [ 73.054173, 18.8160498 ], [ 73.0544522, 18.8152802 ], [ 73.0547255, 18.8150257 ], [ 73.0546115, 18.8132222 ], [ 73.0527119, 18.8138457 ], [ 73.0505522, 18.8135656 ], [ 73.0502849, 18.8133054 ], [ 73.0486688, 18.8127735 ], [ 73.0478669, 18.8119928 ], [ 73.0454427, 18.811195 ], [ 73.0443615, 18.8111837 ], [ 73.0411103, 18.8117938 ], [ 73.0411042, 18.8123086 ], [ 73.0394807, 18.8124197 ], [ 73.0378529, 18.8129176 ], [ 73.0313577, 18.8134932 ], [ 73.0313517, 18.8140081 ], [ 73.0302689, 18.8141249 ], [ 73.0294518, 18.8146312 ], [ 73.0289098, 18.8147546 ], [ 73.0288028, 18.8159523 ], [ 73.0294293, 18.8165622 ], [ 73.0296998, 18.8165653 ], [ 73.0296968, 18.8168227 ], [ 73.029156, 18.8168168 ], [ 73.0286244, 18.8160389 ], [ 73.028366, 18.8150064 ], [ 73.0272832, 18.8151232 ], [ 73.0267397, 18.8153749 ], [ 73.0218648, 18.8160956 ], [ 73.0170049, 18.815529 ], [ 73.0161365, 18.8156027 ], [ 73.0156518, 18.8156439 ], [ 73.0159039, 18.8171912 ], [ 73.0169882, 18.8169453 ], [ 73.0166998, 18.818487 ], [ 73.0172405, 18.8184927 ], [ 73.0172315, 18.8192651 ], [ 73.0158767, 18.8195082 ], [ 73.0158828, 18.8189931 ], [ 73.0156125, 18.8189903 ], [ 73.0153301, 18.8200171 ], [ 73.0134346, 18.8202545 ], [ 73.0137232, 18.8187129 ], [ 73.013184, 18.8185779 ], [ 73.0126495, 18.8180572 ], [ 73.0110336, 18.8175252 ], [ 73.0104929, 18.8175193 ], [ 73.0099463, 18.8180285 ], [ 73.0088648, 18.818017 ], [ 73.0080508, 18.8182657 ], [ 73.0072398, 18.818257 ], [ 73.0069665, 18.8185116 ], [ 73.005349, 18.8181084 ], [ 73.0052196, 18.8175921 ], [ 73.0049523, 18.8173318 ], [ 73.0049553, 18.8170744 ], [ 73.005505, 18.816308 ], [ 73.0052712, 18.813216 ], [ 73.0051394, 18.8129571 ], [ 73.0037924, 18.812556 ], [ 73.0002829, 18.8121328 ], [ 73.0002799, 18.8123902 ], [ 73.0010909, 18.8123989 ], [ 73.0009461, 18.8131697 ], [ 73.0002615, 18.8139348 ], [ 72.9997225, 18.8137998 ], [ 72.9994553, 18.8135394 ], [ 72.9986458, 18.8134025 ], [ 72.9986397, 18.8139174 ], [ 72.998371, 18.8137853 ], [ 72.9972882, 18.8139028 ], [ 72.9975675, 18.8131334 ], [ 72.997027, 18.8131277 ], [ 72.9970207, 18.8136426 ], [ 72.9967505, 18.8136395 ], [ 72.9967565, 18.8131247 ], [ 72.9962175, 18.8129898 ], [ 72.9959503, 18.8127295 ], [ 72.9948675, 18.8128471 ], [ 72.9947197, 18.8138752 ], [ 72.9949869, 18.8141355 ], [ 72.9948217, 18.8167083 ], [ 72.9945528, 18.8165762 ], [ 72.9940107, 18.8166996 ], [ 72.9940045, 18.8172145 ], [ 72.9929232, 18.8172027 ], [ 72.9929295, 18.8166879 ], [ 72.9921122, 18.8171941 ], [ 72.9921062, 18.8177089 ], [ 72.9915672, 18.8175739 ], [ 72.9912999, 18.8173135 ], [ 72.9907592, 18.8173076 ], [ 72.9902139, 18.8176885 ], [ 72.9903424, 18.8182048 ], [ 72.9906097, 18.8184651 ], [ 72.9905883, 18.820267 ], [ 72.9908525, 18.8207849 ], [ 72.9916513, 18.8218232 ], [ 72.9917747, 18.8228544 ], [ 72.9923139, 18.8229884 ], [ 72.9924469, 18.823119 ], [ 72.9926959, 18.824924 ], [ 72.9920115, 18.8256888 ], [ 72.9912005, 18.8256802 ], [ 72.9913228, 18.8267113 ], [ 72.990776, 18.8272203 ], [ 72.9907639, 18.82825 ], [ 72.9900793, 18.8290149 ], [ 72.9895432, 18.8286225 ], [ 72.9887306, 18.8287429 ], [ 72.9887276, 18.8290003 ], [ 72.9895386, 18.8290092 ], [ 72.9901926, 18.8308183 ], [ 72.9903266, 18.8309482 ], [ 72.9908658, 18.8310831 ], [ 72.9908597, 18.8315979 ], [ 72.991402, 18.8314745 ], [ 72.991535, 18.8316051 ], [ 72.9917902, 18.8328952 ], [ 72.9913759, 18.8336631 ], [ 72.9894804, 18.8339001 ], [ 72.9893141, 18.8364728 ], [ 72.9890376, 18.8369848 ], [ 72.9892619, 18.8408489 ], [ 72.9889854, 18.8413609 ], [ 72.9891088, 18.8423919 ], [ 72.9885681, 18.8423862 ], [ 72.9883927, 18.8457312 ], [ 72.9890644, 18.8461241 ], [ 72.9912258, 18.8462766 ], [ 72.9912198, 18.8467915 ], [ 72.9933887, 18.8462999 ], [ 72.9933827, 18.8468147 ], [ 72.9978941, 18.8461785 ], [ 72.9979943, 18.8455771 ], [ 72.9995256, 18.8454239 ], [ 72.9996134, 18.8458519 ], [ 72.9987992, 18.8461007 ], [ 72.9982525, 18.8466098 ], [ 72.9947299, 18.847215 ], [ 72.9933734, 18.847587 ], [ 72.9933674, 18.8481018 ], [ 72.9895791, 18.8483184 ], [ 72.9894127, 18.8508912 ], [ 72.9895469, 18.8510209 ], [ 72.9930618, 18.8510589 ], [ 72.9934623, 18.8514497 ], [ 72.9934196, 18.8550445 ], [ 72.9934073, 18.8560833 ], [ 72.9939387, 18.8568614 ], [ 72.9939327, 18.8573762 ], [ 72.9940654, 18.8576351 ], [ 72.9908221, 18.8574709 ], [ 72.9891952, 18.85784 ], [ 72.9895881, 18.858874 ], [ 72.9895758, 18.8599037 ], [ 72.9893024, 18.8601583 ], [ 72.9892931, 18.8609305 ], [ 72.990095, 18.8617115 ], [ 72.9900797, 18.8629986 ], [ 72.9896685, 18.8635091 ], [ 72.9877726, 18.8637461 ], [ 72.9881716, 18.8642653 ], [ 72.9884267, 18.8655554 ], [ 72.9856826, 18.8672428 ], [ 72.9841687, 18.8665293 ], [ 72.9832139, 18.8661232 ], [ 72.9816796, 18.8655445 ], [ 72.9807999, 18.8652806 ], [ 72.9801669, 18.8653313 ], [ 72.9784288, 18.8656461 ], [ 72.9774761, 18.8654365 ], [ 72.9756393, 18.8650065 ], [ 72.9752853, 18.8648846 ], [ 72.974899, 18.8646511 ], [ 72.9743089, 18.8639912 ], [ 72.9738798, 18.8635242 ], [ 72.9726996, 18.8622348 ], [ 72.971616, 18.8612195 ], [ 72.9705914, 18.8601783 ], [ 72.9701842, 18.8593779 ], [ 72.9694324, 18.8586369 ], [ 72.9682734, 18.8579254 ], [ 72.9678035, 18.8577476 ], [ 72.9672397, 18.8573919 ], [ 72.9668638, 18.8569768 ], [ 72.9673023, 18.855969 ], [ 72.9657674, 18.8552279 ], [ 72.9649843, 18.85588 ], [ 72.9597218, 18.8527378 ], [ 72.9599724, 18.8521153 ], [ 72.9595652, 18.8516113 ], [ 72.9573724, 18.8509591 ], [ 72.9562345, 18.8504445 ], [ 72.9552562, 18.8500195 ], [ 72.9544222, 18.8497919 ], [ 72.9538288, 18.849807 ], [ 72.9533155, 18.849716 ], [ 72.9524174, 18.8491088 ], [ 72.9517438, 18.8486535 ], [ 72.9511664, 18.8483651 ], [ 72.9502522, 18.847925 ], [ 72.9498673, 18.8475 ], [ 72.9498192, 18.8471964 ], [ 72.9499796, 18.8468018 ], [ 72.9500919, 18.8464678 ], [ 72.9498994, 18.8463768 ], [ 72.9495466, 18.8467259 ], [ 72.9487767, 18.8469232 ], [ 72.9481673, 18.8467866 ], [ 72.9475097, 18.84665 ], [ 72.9471408, 18.8467562 ], [ 72.9462267, 18.8467411 ], [ 72.9457455, 18.8464071 ], [ 72.9450719, 18.8463312 ], [ 72.9446228, 18.846058 ], [ 72.9439011, 18.8456027 ], [ 72.9433077, 18.8454964 ], [ 72.9423775, 18.8461643 ], [ 72.9404369, 18.8478794 ], [ 72.939651, 18.8488964 ], [ 72.9389934, 18.8494124 ], [ 72.9381915, 18.8495945 ], [ 72.9371651, 18.8497615 ], [ 72.9359462, 18.8496401 ], [ 72.9352405, 18.8494883 ], [ 72.9347273, 18.849716 ], [ 72.9338131, 18.8497615 ], [ 72.932915, 18.8496704 ], [ 72.9322414, 18.8500499 ], [ 72.9317763, 18.850399 ], [ 72.9311027, 18.8507025 ], [ 72.9306375, 18.8512641 ], [ 72.9300602, 18.8516284 ], [ 72.9292583, 18.8517195 ], [ 72.9284243, 18.8516132 ], [ 72.9277186, 18.8512034 ], [ 72.9271573, 18.8512945 ], [ 72.926628, 18.8515221 ], [ 72.9261789, 18.8517802 ], [ 72.9256336, 18.8521444 ], [ 72.9253129, 18.8526453 ], [ 72.9251846, 18.8533131 ], [ 72.9247515, 18.8540872 ], [ 72.92411, 18.8546336 ], [ 72.9234524, 18.8550737 ], [ 72.9232119, 18.8556353 ], [ 72.9233402, 18.8566674 ], [ 72.9234524, 18.8575325 ], [ 72.9235166, 18.8584886 ], [ 72.9237572, 18.8591109 ], [ 72.9238694, 18.8600064 ], [ 72.9240779, 18.8617365 ], [ 72.9236609, 18.8640738 ], [ 72.9229873, 18.8657584 ], [ 72.9223548, 18.8665858 ], [ 72.9216532, 18.8674205 ], [ 72.9204703, 18.8690519 ], [ 72.9184856, 18.8714232 ], [ 72.9175634, 18.8718405 ], [ 72.9158995, 18.8730356 ], [ 72.9152579, 18.8747619 ], [ 72.9139147, 18.876602 ], [ 72.912772, 18.8786886 ], [ 72.9118699, 18.8798267 ], [ 72.9102059, 18.8807183 ], [ 72.9087625, 18.8819513 ], [ 72.9076398, 18.8825014 ], [ 72.906457, 18.8831273 ], [ 72.906036, 18.884569 ], [ 72.9061162, 18.8882678 ], [ 72.9068379, 18.8910182 ], [ 72.9069983, 18.8929339 ], [ 72.9066263, 18.8978639 ], [ 72.9062837, 18.9026797 ], [ 72.9076541, 18.9038836 ], [ 72.9094651, 18.9033742 ], [ 72.9116187, 18.902726 ], [ 72.9138701, 18.9030501 ], [ 72.9157789, 18.9043003 ], [ 72.9173416, 18.9062214 ], [ 72.9175606, 18.9077676 ], [ 72.9175881, 18.9094563 ], [ 72.9180189, 18.9099379 ], [ 72.9188411, 18.9095304 ], [ 72.920055, 18.9104935 ], [ 72.9211513, 18.9110862 ], [ 72.9220127, 18.9117529 ], [ 72.9236964, 18.9114936 ], [ 72.9249886, 18.9116418 ], [ 72.9261241, 18.9117529 ], [ 72.9273771, 18.9114936 ], [ 72.9300886, 18.9106718 ], [ 72.931251, 18.9089354 ], [ 72.9350443, 18.903321 ], [ 72.9395716, 18.8994429 ], [ 72.9412847, 18.8982853 ], [ 72.9423248, 18.8986905 ], [ 72.9420189, 18.9024528 ], [ 72.9412235, 18.9060993 ], [ 72.9418685, 18.9080275 ], [ 72.9422965, 18.9087766 ], [ 72.9439858, 18.9090826 ], [ 72.9446199, 18.9096145 ], [ 72.9448872, 18.9098749 ], [ 72.9450166, 18.9103913 ], [ 72.9458265, 18.9105285 ], [ 72.9463704, 18.9102771 ], [ 72.9477229, 18.9102921 ], [ 72.9482606, 18.9105553 ], [ 72.949072, 18.9105644 ], [ 72.9504305, 18.9100645 ], [ 72.9516613, 18.9089199 ], [ 72.9519444, 18.9078933 ], [ 72.9527651, 18.9071301 ], [ 72.9538805, 18.9071438 ], [ 72.9568172, 18.9080236 ], [ 72.9588239, 18.9113111 ], [ 72.9607817, 18.9160802 ], [ 72.9608306, 18.9188583 ], [ 72.9613201, 18.9216826 ], [ 72.9584299, 18.9247304 ], [ 72.9575083, 18.9253754 ], [ 72.9539761, 18.9286905 ], [ 72.9535752, 18.9283871 ], [ 72.9533546, 18.9286716 ], [ 72.9536554, 18.9289939 ], [ 72.9500366, 18.9326108 ], [ 72.9491246, 18.9335451 ], [ 72.9472802, 18.9354983 ], [ 72.9459462, 18.9367922 ], [ 72.9460573, 18.9387978 ], [ 72.9450997, 18.940458 ], [ 72.9444288, 18.9406366 ], [ 72.9434713, 18.9411295 ], [ 72.9431977, 18.9420598 ], [ 72.9427092, 18.9428052 ], [ 72.9419407, 18.9432734 ], [ 72.9414267, 18.9437985 ], [ 72.9415239, 18.9439315 ], [ 72.9417919, 18.9437446 ], [ 72.9417919, 18.9438935 ], [ 72.9418224, 18.9439262 ], [ 72.9419084, 18.9440181 ], [ 72.941946, 18.9440583 ], [ 72.9424152, 18.943802 ], [ 72.9426494, 18.9438777 ], [ 72.9426859, 18.9439282 ], [ 72.9428098, 18.9440999 ], [ 72.944163, 18.9459753 ], [ 72.9454303, 18.9477314 ], [ 72.9454878, 18.9478111 ], [ 72.9455245, 18.947862 ], [ 72.947387, 18.9516894 ], [ 72.9482312, 18.9513282 ], [ 72.9482525, 18.9514716 ], [ 72.9481673, 18.9516464 ], [ 72.9483615, 18.952323 ], [ 72.9482004, 18.9524574 ], [ 72.9479588, 18.9525739 ], [ 72.9480299, 18.9528248 ], [ 72.9481006, 18.9528984 ], [ 72.948172, 18.9529727 ], [ 72.951711, 18.9602985 ], [ 72.9517438, 18.960608 ], [ 72.9518159, 18.9636982 ], [ 72.9519017, 18.9637469 ], [ 72.9520047, 18.9637063 ], [ 72.9520819, 18.9636089 ], [ 72.9537607, 18.964115 ], [ 72.9539216, 18.9642976 ], [ 72.9541147, 18.964389 ], [ 72.9543722, 18.9643991 ], [ 72.9549194, 18.9646832 ], [ 72.9554987, 18.9650079 ], [ 72.9557026, 18.9654442 ], [ 72.9557777, 18.9659617 ], [ 72.9558099, 18.9666516 ], [ 72.9557455, 18.9675343 ], [ 72.9557026, 18.9680721 ], [ 72.9552305, 18.9684171 ], [ 72.954855, 18.9687316 ], [ 72.9545439, 18.9690461 ], [ 72.9543078, 18.9694012 ], [ 72.9541254, 18.9697158 ], [ 72.9540289, 18.9699593 ], [ 72.9539538, 18.9702434 ], [ 72.9538572, 18.9704767 ], [ 72.953707, 18.9706594 ], [ 72.9534066, 18.970284 ], [ 72.9533208, 18.970355 ], [ 72.9535997, 18.9707405 ], [ 72.9534924, 18.9708116 ], [ 72.9538358, 18.9712884 ], [ 72.9539323, 18.9712377 ], [ 72.9540074, 18.9713594 ], [ 72.9539001, 18.9714203 ], [ 72.9541418, 18.9717639 ], [ 72.9545439, 18.9723538 ], [ 72.9546766, 18.9722848 ], [ 72.9548979, 18.9726886 ], [ 72.9551983, 18.9730843 ], [ 72.9552232, 18.9731048 ], [ 72.9554451, 18.9732872 ], [ 72.9554344, 18.9733481 ], [ 72.9567326, 18.9739771 ], [ 72.9568613, 18.9737438 ], [ 72.9569686, 18.973622 ], [ 72.9570866, 18.97348 ], [ 72.9572475, 18.9733582 ], [ 72.9573656, 18.9733278 ], [ 72.9575587, 18.9732973 ], [ 72.9577625, 18.9733379 ], [ 72.9578831, 18.9734127 ], [ 72.9580415, 18.9734698 ], [ 72.9582346, 18.9733886 ], [ 72.9584492, 18.9732973 ], [ 72.9587818, 18.973064 ], [ 72.9590285, 18.9728813 ], [ 72.9592646, 18.9728712 ], [ 72.959522, 18.9728915 ], [ 72.9596401, 18.9730234 ], [ 72.9596723, 18.9732162 ], [ 72.9595006, 18.9734089 ], [ 72.9594684, 18.9735003 ], [ 72.9595435, 18.9735814 ], [ 72.9596401, 18.9735611 ], [ 72.9597581, 18.9735003 ], [ 72.959919, 18.9733785 ], [ 72.9601872, 18.9729727 ], [ 72.9605091, 18.9725161 ], [ 72.960949, 18.9718465 ], [ 72.9613185, 18.9713283 ], [ 72.9618931, 18.9705579 ], [ 72.9622364, 18.9699491 ], [ 72.9626334, 18.9693404 ], [ 72.9631111, 18.9685161 ], [ 72.963717, 18.9680822 ], [ 72.9643929, 18.9676764 ], [ 72.965101, 18.9671792 ], [ 72.9655302, 18.9668647 ], [ 72.9664372, 18.9669239 ], [ 72.9681708, 18.9674755 ], [ 72.9693211, 18.9668473 ], [ 72.971314, 18.96579 ], [ 72.972918, 18.9637062 ], [ 72.9749108, 18.963982 ], [ 72.9758019, 18.9634763 ], [ 72.97773, 18.963461 ], [ 72.9807856, 18.9642915 ], [ 72.983562, 18.9669305 ], [ 72.9856748, 18.9708588 ], [ 72.9873022, 18.9692758 ], [ 72.991115, 18.9677367 ], [ 72.9947418, 18.9678247 ], [ 73.0034833, 18.972046 ], [ 73.005261, 18.9738664 ], [ 73.0053953, 18.9739962 ], [ 73.0081011, 18.9740253 ], [ 73.0121506, 18.9748412 ], [ 73.0137648, 18.9756309 ], [ 73.0151147, 18.9759028 ], [ 73.0175348, 18.977216 ], [ 73.0179355, 18.9776069 ], [ 73.0184615, 18.9788998 ], [ 73.0184524, 18.9796721 ], [ 73.0181757, 18.9801841 ], [ 73.0181543, 18.981986 ], [ 73.0184189, 18.9825037 ], [ 73.0184097, 18.9832759 ], [ 73.0181269, 18.9843028 ], [ 73.0189296, 18.9850837 ], [ 73.019194, 18.9856014 ], [ 73.0199937, 18.9866397 ], [ 73.021064, 18.9876809 ], [ 73.021452, 18.9892298 ], [ 73.0225299, 18.9896271 ], [ 73.0230712, 18.9896329 ], [ 73.0233449, 18.9893783 ], [ 73.0260631, 18.9883776 ], [ 73.0268854, 18.9874857 ], [ 73.0247221, 18.9873336 ], [ 73.024453, 18.9872024 ], [ 73.024594, 18.9866889 ], [ 73.0256854, 18.9859282 ], [ 73.0258274, 18.9854148 ], [ 73.0277291, 18.9847909 ], [ 73.0285469, 18.9842848 ], [ 73.0293679, 18.9835212 ], [ 73.0301842, 18.9831442 ], [ 73.0300271, 18.9849446 ], [ 73.03016, 18.9852035 ], [ 73.0296187, 18.9851979 ], [ 73.0301356, 18.9872629 ], [ 73.0304063, 18.9872657 ], [ 73.0304123, 18.9867509 ], [ 73.0309536, 18.9867567 ], [ 73.0309627, 18.9859845 ], [ 73.0320481, 18.9857386 ], [ 73.0327514, 18.983429 ], [ 73.0327665, 18.9821417 ], [ 73.0324989, 18.9818815 ], [ 73.0323823, 18.9803355 ], [ 73.0334584, 18.9808618 ], [ 73.0335994, 18.9803485 ], [ 73.0345544, 18.9797146 ], [ 73.0351016, 18.9792054 ], [ 73.0355146, 18.9785666 ], [ 73.0362218, 18.9759996 ], [ 73.0364923, 18.9760024 ], [ 73.0371471, 18.9778115 ], [ 73.0372815, 18.9779412 ], [ 73.0394461, 18.9779643 ], [ 73.041889, 18.977347 ], [ 73.041194, 18.9788843 ], [ 73.0407826, 18.9793948 ], [ 73.0396956, 18.979769 ], [ 73.0380615, 18.9806534 ], [ 73.0375949, 18.9857974 ], [ 73.0374571, 18.9860535 ], [ 73.0379982, 18.9860591 ], [ 73.0378534, 18.9868301 ], [ 73.037442, 18.9873405 ], [ 73.0363581, 18.9874574 ], [ 73.0358213, 18.9870659 ], [ 73.0358274, 18.9865511 ], [ 73.034476, 18.9864075 ], [ 73.0298561, 18.9880323 ], [ 73.029696, 18.9900901 ], [ 73.0299636, 18.9903506 ], [ 73.0299606, 18.990608 ], [ 73.0296839, 18.99112 ], [ 73.0296748, 18.9918922 ], [ 73.0304806, 18.9924156 ], [ 73.0306102, 18.9929319 ], [ 73.0314221, 18.9929406 ], [ 73.0315388, 18.9944865 ], [ 73.0316731, 18.9946163 ], [ 73.0324864, 18.9944967 ], [ 73.0323477, 18.9947526 ], [ 73.0323326, 18.9960397 ], [ 73.0325909, 18.9970723 ], [ 73.0323174, 18.9973267 ], [ 73.0325546, 19.0001614 ], [ 73.0321432, 19.0006719 ], [ 73.0301914, 19.0037077 ], [ 73.0294051, 19.0033454 ], [ 73.029136, 19.0032143 ], [ 73.0290094, 19.0024407 ], [ 73.0287418, 19.0021803 ], [ 73.0288835, 19.0016669 ], [ 73.0275289, 19.0017807 ], [ 73.0261666, 19.0025386 ], [ 73.0240031, 19.0023872 ], [ 73.0239051, 19.0028125 ], [ 73.0247733, 19.0034378 ], [ 73.0247968, 19.0039404 ], [ 73.0245261, 19.0039376 ], [ 73.0246233, 19.0035112 ], [ 73.0239941, 19.0031595 ], [ 73.023728, 19.0027699 ], [ 73.0229223, 19.0022464 ], [ 73.022387, 19.0017259 ], [ 73.021037, 19.0014539 ], [ 73.0202326, 19.0008023 ], [ 73.0206138, 19.002866 ], [ 73.0214104, 19.0041617 ], [ 73.0214481, 19.0045885 ], [ 73.0220753, 19.0051986 ], [ 73.022346, 19.0052014 ], [ 73.0223399, 19.0057163 ], [ 73.022875, 19.006237 ], [ 73.0228328, 19.007807 ], [ 73.022335, 19.0076447 ], [ 73.0223246, 19.0070034 ], [ 73.0225953, 19.0070064 ], [ 73.0226955, 19.0063226 ], [ 73.0217956, 19.005968 ], [ 73.0209988, 19.0046722 ], [ 73.0206078, 19.0033808 ], [ 73.0200725, 19.0028601 ], [ 73.0190866, 19.0000853 ], [ 73.0179848, 18.9991481 ], [ 73.0155464, 18.9985193 ], [ 73.0117462, 18.9984893 ], [ 73.0088011, 18.999178 ], [ 73.0063943, 19.0011243 ], [ 73.0047792, 19.0010345 ], [ 73.0025308, 19.0020825 ], [ 73.0011057, 19.0045378 ], [ 73.0003773, 19.0062444 ], [ 72.9999023, 19.0104961 ], [ 72.9999656, 19.015077 ], [ 73.000307815922866, 19.016428959375002 ], [ 73.0008523, 19.01858 ], [ 73.0024674, 19.021544 ], [ 73.0029741, 19.0257054 ], [ 73.0034491, 19.0286992 ], [ 73.0023407, 19.0343274 ], [ 73.000599, 19.0400452 ], [ 72.9980339, 19.0481875 ], [ 72.9958725, 19.0527749 ], [ 72.9948037, 19.0539348 ], [ 72.9942495, 19.0566288 ], [ 72.9923098, 19.0589111 ], [ 72.9893663, 19.0600276 ], [ 72.9866555, 19.0615362 ], [ 72.9838043, 19.0627948 ], [ 72.9832449, 19.0628505 ], [ 72.982179, 19.0628319 ], [ 72.9786322, 19.0621428 ], [ 72.9784849, 19.0621552 ], [ 72.9783803, 19.062285 ], [ 72.9783822, 19.0623907 ], [ 72.9781049, 19.0632441 ], [ 72.9779777, 19.0639781 ], [ 72.979319, 19.0642528 ], [ 72.9800521, 19.0651617 ], [ 72.9808532, 19.0665652 ], [ 72.9822517, 19.0691129 ], [ 72.9833741, 19.0709862 ], [ 72.9834599, 19.0720813 ], [ 72.9839835, 19.0750259 ], [ 72.9837689, 19.075318 ], [ 72.9838805, 19.0760805 ], [ 72.9847216, 19.0777839 ], [ 72.9851079, 19.0782787 ], [ 72.9866729, 19.0795892 ], [ 72.989787, 19.0822329 ], [ 72.9899454, 19.0839289 ], [ 72.988629, 19.0850765 ], [ 72.9861799, 19.0859943 ], [ 72.9856309, 19.0897453 ], [ 72.9851664, 19.0932968 ], [ 72.9842797, 19.0966087 ], [ 72.9837307, 19.1003196 ], [ 72.9843641, 19.1012772 ], [ 72.9835196, 19.1021551 ], [ 72.9814083, 19.1011575 ], [ 72.9801415, 19.1013969 ], [ 72.9793392, 19.1027536 ], [ 72.9785369, 19.1056264 ], [ 72.9788747, 19.1090179 ], [ 72.9793392, 19.1118906 ], [ 72.9789169, 19.1170774 ], [ 72.9793392, 19.1188329 ], [ 72.980606, 19.1207479 ], [ 72.9816616, 19.1235008 ], [ 72.9811972, 19.1264929 ], [ 72.9804371, 19.1290861 ], [ 72.9813661, 19.1317191 ], [ 72.9822528, 19.1357085 ], [ 72.9825484, 19.1393387 ], [ 72.9830973, 19.1440459 ], [ 72.983773, 19.1478754 ], [ 72.9840263, 19.1503885 ], [ 72.9833507, 19.1507076 ], [ 72.9830551, 19.1523829 ], [ 72.9833929, 19.1544572 ], [ 72.9829284, 19.1602409 ], [ 72.9833507, 19.1649475 ], [ 72.9837307, 19.168936 ], [ 72.9844486, 19.1733632 ], [ 72.9856309, 19.1780296 ], [ 72.9870244, 19.1813398 ], [ 72.9874048, 19.1848741 ], [ 72.9865689, 19.188374 ], [ 72.9854836, 19.1884904 ], [ 72.985343, 19.1888754 ], [ 72.9853305, 19.1899051 ], [ 72.9851924, 19.190161 ], [ 72.9843765, 19.1904095 ], [ 72.9843061, 19.1927176 ], [ 72.9858064, 19.1953165 ], [ 72.9860742, 19.195577 ], [ 72.9867365, 19.1968714 ], [ 72.9870126, 19.1978559 ], [ 72.9875105, 19.198626 ], [ 72.9877422, 19.1991853 ], [ 72.9883262, 19.1998491 ], [ 72.9893974, 19.2008905 ], [ 72.9899361, 19.201154 ], [ 72.9910073, 19.2021956 ], [ 72.9919474, 19.2028499 ], [ 72.992209, 19.203625 ], [ 72.9928822, 19.2040181 ], [ 72.9934178, 19.2045388 ], [ 72.9943579, 19.2051933 ], [ 72.994952, 19.2065045 ], [ 72.9952095, 19.2069503 ], [ 72.9952755, 19.2077777 ], [ 72.9952781, 19.2081013 ], [ 72.9956815, 19.2092036 ], [ 72.998499, 19.2087906 ], [ 72.9995127, 19.2086142 ], [ 72.999318, 19.209624 ], [ 72.9995868, 19.2100141 ], [ 72.9993723, 19.210314 ], [ 72.9988954, 19.2109066 ], [ 72.9986121, 19.2119332 ], [ 72.9977836, 19.2132114 ], [ 72.9976329, 19.214497 ], [ 72.997999, 19.2149744 ], [ 72.9985653, 19.2157945 ], [ 72.9986998, 19.2159241 ], [ 72.9992521, 19.2162712 ], [ 73.0002563, 19.2164008 ], [ 73.0005902, 19.2164598 ], [ 73.0013464, 19.216725 ], [ 73.002213, 19.2167348 ], [ 73.0030198, 19.2172585 ], [ 73.003578, 19.2177787 ], [ 73.0040927, 19.2181717 ], [ 73.0042646, 19.2184432 ], [ 73.0044925, 19.2186909 ], [ 73.0048947, 19.219081 ], [ 73.0058234, 19.2190912 ], [ 73.0072421, 19.219043 ], [ 73.0098731, 19.2236247 ], [ 73.0098504, 19.2244761 ], [ 73.0092575, 19.2251631 ], [ 73.0086079, 19.2260548 ], [ 73.0079364, 19.2267938 ], [ 73.0072169, 19.2274977 ], [ 73.0066798, 19.2283685 ], [ 73.0053171, 19.2289978 ], [ 73.0053078, 19.2297699 ], [ 73.0048977, 19.230023 ], [ 73.0046142, 19.2310496 ], [ 73.0040379, 19.2338752 ], [ 73.0041398, 19.2367083 ], [ 73.0049574, 19.2363305 ], [ 73.0054069, 19.2362948 ], [ 73.0054948, 19.236723 ], [ 73.0041366, 19.2369657 ], [ 73.0042281, 19.2405709 ], [ 73.0044774, 19.2423756 ], [ 73.0041814, 19.244432 ], [ 73.0039073, 19.2446865 ], [ 73.0038979, 19.2454588 ], [ 73.0037392, 19.2462116 ], [ 73.0035989, 19.2477725 ], [ 73.0033248, 19.2480269 ], [ 73.0030413, 19.2490536 ], [ 73.0024898, 19.24982 ], [ 73.0024806, 19.2505922 ], [ 73.0022001, 19.2513615 ], [ 73.0021315, 19.2570245 ], [ 73.0015677, 19.2588203 ], [ 73.0015583, 19.2595926 ], [ 73.0007233, 19.2613856 ], [ 73.000175, 19.2618944 ], [ 72.9996172, 19.2631755 ], [ 72.9989308, 19.2639403 ], [ 72.9981145, 19.2641889 ], [ 72.997834, 19.2649581 ], [ 72.993938, 19.2656895 ], [ 72.9931847, 19.2665416 ], [ 72.993261, 19.2731462 ], [ 72.9926938, 19.2751995 ], [ 72.9926843, 19.2759717 ], [ 72.9921328, 19.2767379 ], [ 72.9918367, 19.2787942 ], [ 72.991971, 19.2789239 ], [ 72.9995611, 19.2790072 ], [ 73.0030914, 19.278531 ], [ 73.004182, 19.278028 ], [ 73.0047302, 19.2775191 ], [ 73.0060918, 19.2770191 ], [ 73.0067769, 19.2763834 ], [ 73.0071918, 19.2757438 ], [ 73.0093649, 19.2753818 ], [ 73.0093587, 19.2758967 ], [ 73.0104382, 19.2762941 ], [ 73.0108041, 19.2768284 ], [ 73.011504, 19.2778504 ], [ 73.0120461, 19.2778562 ], [ 73.0121827, 19.2777296 ], [ 73.012325, 19.2772161 ], [ 73.013318, 19.2770571 ], [ 73.0134154, 19.2767132 ], [ 73.0136866, 19.2767162 ], [ 73.0137869, 19.2760326 ], [ 73.0142364, 19.2760779 ], [ 73.0154511, 19.2764779 ], [ 73.0155994, 19.2754497 ], [ 73.0164127, 19.2754586 ], [ 73.0164097, 19.275716 ], [ 73.0158674, 19.2757099 ], [ 73.0155779, 19.2772516 ], [ 73.0147677, 19.2769853 ], [ 73.0139606, 19.2764616 ], [ 73.0134061, 19.2774854 ], [ 73.0128623, 19.2776077 ], [ 73.0120398, 19.2783711 ], [ 73.011225, 19.2784915 ], [ 73.0108024, 19.279774 ], [ 73.0102509, 19.2805404 ], [ 73.0092902, 19.2815597 ], [ 73.0082027, 19.2818052 ], [ 73.0079225, 19.2825746 ], [ 73.0073787, 19.2826969 ], [ 73.0060077, 19.2839691 ], [ 73.0049172, 19.2844722 ], [ 73.0043687, 19.284981 ], [ 73.0035492, 19.2854869 ], [ 73.0030054, 19.2856101 ], [ 73.0025859, 19.2866353 ], [ 73.0025547, 19.2892095 ], [ 73.0028132, 19.290242 ], [ 73.0019922, 19.2967516 ], [ 73.0024328, 19.2992484 ], [ 73.0028212, 19.3007972 ], [ 73.0041721, 19.3011977 ], [ 73.0049854, 19.3012066 ], [ 73.0053838, 19.3018551 ], [ 73.0060542, 19.3025056 ], [ 73.0087669, 19.302407 ], [ 73.008474, 19.3042059 ], [ 73.0073912, 19.3040649 ], [ 73.006584, 19.3035411 ], [ 73.0057722, 19.3034039 ], [ 73.0056424, 19.3028876 ], [ 73.0051065, 19.3023669 ], [ 73.0049776, 19.3018505 ], [ 73.0030829, 19.3015725 ], [ 73.0039782, 19.3059588 ], [ 73.0045142, 19.3064795 ], [ 73.0043698, 19.3072503 ], [ 73.0049106, 19.3073845 ], [ 73.0051786, 19.3076449 ], [ 73.0057223, 19.3075224 ], [ 73.0059778, 19.3088125 ], [ 73.0067896, 19.3089496 ], [ 73.0075936, 19.3097307 ], [ 73.0081343, 19.3098658 ], [ 73.0081281, 19.3103807 ], [ 73.0086688, 19.3105149 ], [ 73.0094838, 19.3103954 ], [ 73.0096125, 19.3109118 ], [ 73.0097471, 19.3110414 ], [ 73.0111011, 19.3111854 ], [ 73.0111073, 19.3106706 ], [ 73.011377, 19.3108018 ], [ 73.0127342, 19.3106884 ], [ 73.012728, 19.3112032 ], [ 73.013814, 19.3110858 ], [ 73.0143532, 19.3113491 ], [ 73.0148954, 19.311355 ], [ 73.0151697, 19.3111006 ], [ 73.0192366, 19.3111448 ], [ 73.0195108, 19.3108902 ], [ 73.021421, 19.3098813 ], [ 73.0244159, 19.308884 ], [ 73.0248298, 19.3082452 ], [ 73.0253783, 19.3077364 ], [ 73.0259359, 19.3064551 ], [ 73.0262101, 19.3062006 ], [ 73.0262163, 19.3056857 ], [ 73.0264906, 19.3054313 ], [ 73.0266544, 19.3031161 ], [ 73.0271967, 19.3031219 ], [ 73.0270668, 19.3026056 ], [ 73.0272152, 19.3015774 ], [ 73.027759, 19.3014542 ], [ 73.0280332, 19.3011996 ], [ 73.0287537, 19.3011669 ], [ 73.0296597, 19.3012172 ], [ 73.0304639, 19.3019983 ], [ 73.0311366, 19.3023922 ], [ 73.0311273, 19.3031645 ], [ 73.03085, 19.3036763 ], [ 73.0315191, 19.3044559 ], [ 73.0315161, 19.3047133 ], [ 73.0324144, 19.3053255 ], [ 73.0329536, 19.3055835 ], [ 73.0334031, 19.3056343 ], [ 73.0336711, 19.3058946 ], [ 73.0350222, 19.3062958 ], [ 73.035019, 19.3065532 ], [ 73.0353783, 19.3068968 ], [ 73.03637, 19.306948 ], [ 73.0366397, 19.3070802 ], [ 73.0366367, 19.3073376 ], [ 73.0376299, 19.3071784 ], [ 73.0377272, 19.3068398 ], [ 73.0379984, 19.3068426 ], [ 73.0378684, 19.3063264 ], [ 73.0384199, 19.30556 ], [ 73.0381702, 19.3037551 ], [ 73.0379022, 19.3034948 ], [ 73.0381425, 19.302894 ], [ 73.0380584, 19.3022093 ], [ 73.0383296, 19.3022121 ], [ 73.0386378, 19.3012267 ], [ 73.0397003, 19.3005531 ], [ 73.0402471, 19.3001732 ], [ 73.0413286, 19.3004423 ], [ 73.0413254, 19.3006997 ], [ 73.0418616, 19.3012204 ], [ 73.0418553, 19.3017352 ], [ 73.0415843, 19.3017322 ], [ 73.0416864, 19.301306 ], [ 73.0413256, 19.3010853 ], [ 73.0403421, 19.3003431 ], [ 73.0396974, 19.301197 ], [ 73.0391536, 19.3013194 ], [ 73.0387, 19.3016128 ], [ 73.0383203, 19.3029843 ], [ 73.0389684, 19.3050509 ], [ 73.0380255, 19.3074732 ], [ 73.0369031, 19.3077262 ], [ 73.0360959, 19.3072026 ], [ 73.0355537, 19.3071968 ], [ 73.035284, 19.3070656 ], [ 73.033397, 19.3061439 ], [ 73.0328593, 19.3057522 ], [ 73.0323201, 19.3054943 ], [ 73.0309721, 19.3048356 ], [ 73.0307026, 19.3047044 ], [ 73.0304409, 19.3039293 ], [ 73.0304469, 19.3034145 ], [ 73.0307181, 19.3034173 ], [ 73.0307304, 19.3023879 ], [ 73.0301897, 19.3022527 ], [ 73.0285707, 19.3015922 ], [ 73.028027, 19.3017145 ], [ 73.02748, 19.3020953 ], [ 73.0273131, 19.304668 ], [ 73.0270358, 19.3051798 ], [ 73.0270203, 19.3064669 ], [ 73.0272885, 19.3067271 ], [ 73.0272853, 19.3069845 ], [ 73.0270111, 19.3072391 ], [ 73.0269958, 19.3085262 ], [ 73.0271286, 19.3087849 ], [ 73.0265864, 19.3087791 ], [ 73.0263061, 19.3095485 ], [ 73.0257622, 19.3096708 ], [ 73.0246684, 19.3104313 ], [ 73.023855, 19.3104224 ], [ 73.0230385, 19.3106712 ], [ 73.0227644, 19.3109256 ], [ 73.020589, 19.311417 ], [ 73.0194923, 19.3124347 ], [ 73.0189468, 19.3126863 ], [ 73.0135242, 19.3126273 ], [ 73.0132515, 19.3127536 ], [ 73.0132608, 19.3119813 ], [ 73.0121763, 19.3119694 ], [ 73.01217, 19.3124842 ], [ 73.0110856, 19.3124725 ], [ 73.0110825, 19.3127299 ], [ 73.0108145, 19.3124695 ], [ 73.0097299, 19.3124576 ], [ 73.0097361, 19.3119429 ], [ 73.0081109, 19.3117959 ], [ 73.0070389, 19.3107545 ], [ 73.0064999, 19.310491 ], [ 73.0051598, 19.3091892 ], [ 73.0046191, 19.309055 ], [ 73.0040924, 19.3077621 ], [ 73.0038213, 19.3077592 ], [ 73.0035409, 19.3085285 ], [ 73.0030017, 19.308265 ], [ 73.0030079, 19.3077502 ], [ 73.0027354, 19.3078755 ], [ 73.0021931, 19.3078696 ], [ 73.0019234, 19.3077385 ], [ 73.0023422, 19.3067131 ], [ 73.0026165, 19.3064587 ], [ 73.0023672, 19.304654 ], [ 73.0020992, 19.3043935 ], [ 73.0013141, 19.3020679 ], [ 73.0010962, 19.2976891 ], [ 73.0016788, 19.2943487 ], [ 73.0014985, 19.286881 ], [ 73.0017726, 19.2866264 ], [ 73.0021986, 19.2850864 ], [ 73.0027422, 19.2849632 ], [ 73.003153, 19.284582 ], [ 73.0032954, 19.2840687 ], [ 73.0038391, 19.2839454 ], [ 73.0046616, 19.2831821 ], [ 73.0060264, 19.2824247 ], [ 73.0071202, 19.2816642 ], [ 73.0080793, 19.2807742 ], [ 73.0091884, 19.2787268 ], [ 73.0097369, 19.2782178 ], [ 73.0097524, 19.2769307 ], [ 73.0090876, 19.2758937 ], [ 73.0085439, 19.2760161 ], [ 73.0074518, 19.2766481 ], [ 73.0073097, 19.2771615 ], [ 73.0066231, 19.2779263 ], [ 73.0060793, 19.2780486 ], [ 73.0047147, 19.2788061 ], [ 73.0038952, 19.2793121 ], [ 73.0006329, 19.2800488 ], [ 72.9919571, 19.2800826 ], [ 72.9918147, 19.280596 ], [ 72.990989, 19.2816168 ], [ 72.9909607, 19.2839333 ], [ 72.9906834, 19.2844451 ], [ 72.9901128, 19.2867559 ], [ 72.9905122, 19.2874036 ], [ 72.9910542, 19.2874094 ], [ 72.9918582, 19.2881906 ], [ 72.9923988, 19.2883257 ], [ 72.9923925, 19.2888405 ], [ 72.9907596, 19.2893374 ], [ 72.990769, 19.2885652 ], [ 72.9894152, 19.2884211 ], [ 72.9880535, 19.288921 ], [ 72.986958, 19.2898105 ], [ 72.9868157, 19.2903238 ], [ 72.9865415, 19.2905782 ], [ 72.9863018, 19.2915168 ], [ 72.9858533, 19.2914712 ], [ 72.9855791, 19.2917256 ], [ 72.9847641, 19.2918458 ], [ 72.9846218, 19.2923591 ], [ 72.9842094, 19.2928694 ], [ 72.9823022, 19.2936207 ], [ 72.9822927, 19.294393 ], [ 72.9831092, 19.2941444 ], [ 72.9833678, 19.2951771 ], [ 72.982824, 19.2952994 ], [ 72.9822755, 19.2958082 ], [ 72.9817316, 19.2959312 ], [ 72.9817412, 19.2951592 ], [ 72.9809295, 19.295021 ], [ 72.979842, 19.2952663 ], [ 72.9795675, 19.2955207 ], [ 72.9790238, 19.295644 ], [ 72.9795755, 19.2948778 ], [ 72.9782232, 19.2946052 ], [ 72.9782326, 19.2938332 ], [ 72.9777152, 19.2940205 ], [ 72.9770882, 19.2942461 ], [ 72.9763286, 19.2943268 ], [ 72.976316, 19.2953565 ], [ 72.9768582, 19.2953625 ], [ 72.976855, 19.29562 ], [ 72.9757675, 19.2958653 ], [ 72.9756252, 19.2963786 ], [ 72.975351, 19.296633 ], [ 72.9753287, 19.2984347 ], [ 72.9754632, 19.2985646 ], [ 72.9760038, 19.2986997 ], [ 72.9759975, 19.2992146 ], [ 72.9749163, 19.298945 ], [ 72.9746356, 19.2997143 ], [ 72.9727363, 19.2998214 ], [ 72.9716471, 19.300196 ], [ 72.9715048, 19.3007094 ], [ 72.970818, 19.301474 ], [ 72.9700015, 19.3017224 ], [ 72.9699919, 19.3024945 ], [ 72.9694481, 19.3026167 ], [ 72.9688996, 19.3031255 ], [ 72.9642684, 19.304876 ], [ 72.9629113, 19.30499 ], [ 72.9638342, 19.3070598 ], [ 72.9638246, 19.307832 ], [ 72.9632761, 19.3083408 ], [ 72.9627114, 19.3101365 ], [ 72.9620213, 19.3111586 ], [ 72.9617503, 19.3111556 ], [ 72.9617598, 19.3103833 ], [ 72.9609497, 19.3101168 ], [ 72.9621949, 19.3080713 ], [ 72.9627433, 19.3075625 ], [ 72.9627594, 19.3062756 ], [ 72.9623627, 19.3054988 ], [ 72.95965, 19.3055967 ], [ 72.9553187, 19.3050333 ], [ 72.9539599, 19.3052756 ], [ 72.9531418, 19.305653 ], [ 72.9531353, 19.3061679 ], [ 72.9539486, 19.3061769 ], [ 72.9543421, 19.3072111 ], [ 72.9548779, 19.307732 ], [ 72.9548618, 19.3090189 ], [ 72.954446, 19.3097866 ], [ 72.9525451, 19.3100227 ], [ 72.9525419, 19.3102801 ], [ 72.9530824, 19.3104145 ], [ 72.9533504, 19.3106749 ], [ 72.9538909, 19.3108101 ], [ 72.9536103, 19.3115793 ], [ 72.9519932, 19.3107889 ], [ 72.9521412, 19.3097608 ], [ 72.9525562, 19.3091214 ], [ 72.9539151, 19.3088793 ], [ 72.9540518, 19.3087524 ], [ 72.9542005, 19.3077243 ], [ 72.9531193, 19.3074548 ], [ 72.9531289, 19.3066825 ], [ 72.9523188, 19.306416 ], [ 72.9530089, 19.3053941 ], [ 72.9531514, 19.3048808 ], [ 72.9547779, 19.3048991 ], [ 72.9547844, 19.3043843 ], [ 72.9528834, 19.3046203 ], [ 72.9528898, 19.3041055 ], [ 72.9517942, 19.3049938 ], [ 72.9512519, 19.3049877 ], [ 72.9504436, 19.3045929 ], [ 72.9500076, 19.306905 ], [ 72.9497331, 19.3071594 ], [ 72.9495916, 19.3076727 ], [ 72.9501338, 19.3076787 ], [ 72.9497203, 19.308189 ], [ 72.9495789, 19.3087022 ], [ 72.9494011, 19.3086116 ], [ 72.949178, 19.3081828 ], [ 72.9491941, 19.3068959 ], [ 72.9497556, 19.3053576 ], [ 72.9497621, 19.3048428 ], [ 72.9503139, 19.3040766 ], [ 72.9501917, 19.3030456 ], [ 72.9474854, 19.3026285 ], [ 72.9472175, 19.302368 ], [ 72.9458685, 19.3018381 ], [ 72.9439771, 19.3013019 ], [ 72.9431639, 19.3012926 ], [ 72.9418148, 19.3007627 ], [ 72.941547, 19.3005022 ], [ 72.9410063, 19.3003678 ], [ 72.9408768, 19.2998515 ], [ 72.940477, 19.2993321 ], [ 72.9399348, 19.2993259 ], [ 72.9400764, 19.2988127 ], [ 72.9399444, 19.2985538 ], [ 72.9388602, 19.2985415 ], [ 72.9388666, 19.2980267 ], [ 72.9385956, 19.2980237 ], [ 72.9383147, 19.2987927 ], [ 72.9364236, 19.2982565 ], [ 72.936594, 19.2954266 ], [ 72.9368685, 19.2951724 ], [ 72.9368749, 19.2946576 ], [ 72.9371524, 19.2941458 ], [ 72.9371652, 19.2931163 ], [ 72.9374461, 19.292347 ], [ 72.9374653, 19.2908027 ], [ 72.9378789, 19.2902924 ], [ 72.9373368, 19.2902864 ], [ 72.9373465, 19.2895141 ], [ 72.9368027, 19.2896362 ], [ 72.9365285, 19.2898906 ], [ 72.9349019, 19.2898723 ], [ 72.9346341, 19.2896118 ], [ 72.9340936, 19.2894775 ], [ 72.9341, 19.2889626 ], [ 72.9330189, 19.2886929 ], [ 72.9330125, 19.2892078 ], [ 72.9324686, 19.2893299 ], [ 72.9319201, 19.2898385 ], [ 72.9313763, 19.2899615 ], [ 72.9313697, 19.2904763 ], [ 72.9308277, 19.2904701 ], [ 72.9303914, 19.2927821 ], [ 72.9299787, 19.2932922 ], [ 72.9291622, 19.2935404 ], [ 72.9290197, 19.2940537 ], [ 72.9286071, 19.2945638 ], [ 72.928383995312501, 19.29456133020641 ], [ 72.9283361, 19.2945608 ], [ 72.9282066, 19.2940445 ], [ 72.9272777, 19.2924894 ], [ 72.9256593, 19.2918269 ], [ 72.9213219, 19.2917776 ], [ 72.9210541, 19.2915171 ], [ 72.9202408, 19.2915079 ], [ 72.9186096, 19.2918759 ], [ 72.9183482, 19.2911006 ], [ 72.9178076, 19.2909653 ], [ 72.917272, 19.2904442 ], [ 72.9161909, 19.2901745 ], [ 72.9121248, 19.290128 ], [ 72.9115793, 19.2903792 ], [ 72.9072323, 19.2911017 ], [ 72.9069581, 19.2913561 ], [ 72.905606, 19.2910832 ], [ 72.9050556, 19.2917209 ], [ 72.9042406, 19.2918398 ], [ 72.903421, 19.2923452 ], [ 72.902606, 19.292465 ], [ 72.9025994, 19.2929798 ], [ 72.9042291, 19.2927411 ], [ 72.9038122, 19.2935086 ], [ 72.9039352, 19.2945396 ], [ 72.903122, 19.2945304 ], [ 72.9031186, 19.2947878 ], [ 72.9036608, 19.294794 ], [ 72.9036576, 19.2950514 ], [ 72.9025733, 19.295039 ], [ 72.9024306, 19.2955521 ], [ 72.9017436, 19.2963166 ], [ 72.9006576, 19.2964323 ], [ 72.8995635, 19.2971921 ], [ 72.8981932, 19.2983351 ], [ 72.8983215, 19.2988515 ], [ 72.8980473, 19.2991057 ], [ 72.8977631, 19.3001321 ], [ 72.8978825, 19.3014207 ], [ 72.8965272, 19.3014051 ], [ 72.8963845, 19.3019184 ], [ 72.8956941, 19.3029401 ], [ 72.8951503, 19.303062 ], [ 72.8943304, 19.3035674 ], [ 72.8932444, 19.303684 ], [ 72.8932378, 19.3041989 ], [ 72.8926939, 19.3043208 ], [ 72.8918723, 19.3049554 ], [ 72.8910328, 19.3070051 ], [ 72.8904888, 19.307127 ], [ 72.8891169, 19.3083983 ], [ 72.8885729, 19.3085213 ], [ 72.8873161, 19.3113383 ], [ 72.8871645, 19.3126237 ], [ 72.8877067, 19.31263 ], [ 72.8877033, 19.3128874 ], [ 72.8866156, 19.3131323 ], [ 72.8861688, 19.3162162 ], [ 72.88561, 19.3174969 ], [ 72.8847867, 19.3182595 ], [ 72.8836691, 19.3208208 ], [ 72.8837719, 19.3233963 ], [ 72.8848564, 19.323409 ], [ 72.8848532, 19.3236662 ], [ 72.8843093, 19.3237883 ], [ 72.882142, 19.3236349 ], [ 72.8822804, 19.323379 ], [ 72.8824329, 19.3220936 ], [ 72.881613, 19.322599 ], [ 72.8814703, 19.3231123 ], [ 72.8811959, 19.3233665 ], [ 72.8811893, 19.3238811 ], [ 72.8800914, 19.3248981 ], [ 72.8796686, 19.3261803 ], [ 72.8791263, 19.3261741 ], [ 72.8789736, 19.3274595 ], [ 72.8784115, 19.3289974 ], [ 72.8781369, 19.3292516 ], [ 72.8779919, 19.3300223 ], [ 72.8785342, 19.3300285 ], [ 72.8782431, 19.3315697 ], [ 72.8787854, 19.3315761 ], [ 72.8787754, 19.3323481 ], [ 72.879321, 19.3320972 ], [ 72.8794495, 19.3326135 ], [ 72.8802562, 19.3331378 ], [ 72.8803856, 19.3336541 ], [ 72.8809279, 19.3336604 ], [ 72.8809345, 19.3331455 ], [ 72.8814769, 19.333152 ], [ 72.8815954, 19.3344404 ], [ 72.8818632, 19.334701 ], [ 72.8822654, 19.3350913 ], [ 72.8825365, 19.3350945 ], [ 72.8832189, 19.3347167 ], [ 72.8833616, 19.3342036 ], [ 72.883899, 19.3345954 ], [ 72.8844412, 19.3346018 ], [ 72.8845746, 19.3347324 ], [ 72.884568, 19.3352472 ], [ 72.8842902, 19.3357588 ], [ 72.8844064, 19.3373047 ], [ 72.8860299, 19.337581 ], [ 72.8862845, 19.3388711 ], [ 72.886015, 19.3387388 ], [ 72.8854728, 19.3387326 ], [ 72.8851998, 19.3388584 ], [ 72.8850439, 19.3404012 ], [ 72.8849056, 19.3406571 ], [ 72.8832804, 19.340509 ], [ 72.8830074, 19.340635 ], [ 72.8827264, 19.3414041 ], [ 72.8816368, 19.3417772 ], [ 72.8810895, 19.3421572 ], [ 72.8809468, 19.3426706 ], [ 72.8803977, 19.343179 ], [ 72.8805072, 19.3452396 ], [ 72.8826716, 19.3456505 ], [ 72.8829377, 19.3460402 ], [ 72.8823938, 19.3461622 ], [ 72.8818464, 19.3465424 ], [ 72.8822327, 19.3480915 ], [ 72.8827685, 19.3486125 ], [ 72.8835588, 19.3504237 ], [ 72.8834104, 19.3514517 ], [ 72.8839526, 19.3514579 ], [ 72.8840812, 19.3519743 ], [ 72.8842155, 19.3521041 ], [ 72.8850292, 19.3521136 ], [ 72.8851658, 19.3519869 ], [ 72.8853119, 19.3512164 ], [ 72.8858542, 19.3512226 ], [ 72.8860293, 19.3510106 ], [ 72.8864049, 19.3505849 ], [ 72.8870906, 19.3499499 ], [ 72.8867039, 19.3490095 ], [ 72.8861617, 19.3483977 ], [ 72.8863102, 19.3473665 ], [ 72.8864529, 19.3468533 ], [ 72.8879033, 19.3467002 ], [ 72.8888952, 19.3467524 ], [ 72.889163, 19.347013 ], [ 72.8897035, 19.3471484 ], [ 72.8897003, 19.3474058 ], [ 72.890056, 19.3480125 ], [ 72.8915984, 19.3474279 ], [ 72.8915918, 19.3479425 ], [ 72.8902327, 19.3481843 ], [ 72.8899483, 19.3492107 ], [ 72.889406, 19.3492043 ], [ 72.8883113, 19.3499639 ], [ 72.8883047, 19.3504787 ], [ 72.8880352, 19.3503464 ], [ 72.8874928, 19.3503402 ], [ 72.886671, 19.3509747 ], [ 72.8868028, 19.3512336 ], [ 72.8866612, 19.3517467 ], [ 72.8861171, 19.3518688 ], [ 72.8855697, 19.3522491 ], [ 72.8855631, 19.3527637 ], [ 72.8839345, 19.3528732 ], [ 72.883665, 19.3527418 ], [ 72.8832709, 19.3517074 ], [ 72.8830031, 19.351447 ], [ 72.8828846, 19.3501584 ], [ 72.8823424, 19.3501521 ], [ 72.8819549, 19.3486031 ], [ 72.8816871, 19.3483425 ], [ 72.8814259, 19.3475672 ], [ 72.8804973, 19.3460119 ], [ 72.8788702, 19.3459928 ], [ 72.8787476, 19.3449618 ], [ 72.8788869, 19.3447059 ], [ 72.8772634, 19.3444296 ], [ 72.8761819, 19.3441595 ], [ 72.8761887, 19.3436449 ], [ 72.8759158, 19.3437698 ], [ 72.8753735, 19.3437636 ], [ 72.8742938, 19.3433653 ], [ 72.8741711, 19.3423341 ], [ 72.8748612, 19.3414407 ], [ 72.8759458, 19.3414534 ], [ 72.8764864, 19.3415889 ], [ 72.8760659, 19.3426137 ], [ 72.8761953, 19.34313 ], [ 72.8756531, 19.3431236 ], [ 72.8756497, 19.343381 ], [ 72.8767376, 19.3431363 ], [ 72.8767309, 19.3436511 ], [ 72.8773579, 19.3442608 ], [ 72.8780817, 19.3440525 ], [ 72.8789052, 19.3432899 ], [ 72.8794491, 19.343168 ], [ 72.8800082, 19.3418874 ], [ 72.8794658, 19.3418809 ], [ 72.8798854, 19.3408562 ], [ 72.88084, 19.3404806 ], [ 72.8816601, 19.3399754 ], [ 72.8822072, 19.3395961 ], [ 72.8821974, 19.3403682 ], [ 72.8824684, 19.3403714 ], [ 72.8827529, 19.3393449 ], [ 72.8832953, 19.3393513 ], [ 72.8833019, 19.3388365 ], [ 72.8838441, 19.3388427 ], [ 72.8834535, 19.3375511 ], [ 72.8831857, 19.3372905 ], [ 72.8827927, 19.3362563 ], [ 72.8814403, 19.3359832 ], [ 72.8811791, 19.3352079 ], [ 72.8798251, 19.3350629 ], [ 72.8795523, 19.335189 ], [ 72.8792978, 19.3338989 ], [ 72.8782099, 19.3341436 ], [ 72.8780904, 19.332855 ], [ 72.8776909, 19.3323355 ], [ 72.8771486, 19.3323292 ], [ 72.8770192, 19.3318129 ], [ 72.8771951, 19.3287258 ], [ 72.8766512, 19.3288477 ], [ 72.874181, 19.3311357 ], [ 72.8736355, 19.3313869 ], [ 72.8719886, 19.3329121 ], [ 72.8711702, 19.3332892 ], [ 72.8710075, 19.3353466 ], [ 72.8712753, 19.3356073 ], [ 72.8714045, 19.3361236 ], [ 72.8703233, 19.3358535 ], [ 72.8703301, 19.3353389 ], [ 72.8697876, 19.3353325 ], [ 72.8697977, 19.3345602 ], [ 72.8692537, 19.3346821 ], [ 72.8684337, 19.3351875 ], [ 72.8673375, 19.336076 ], [ 72.8674626, 19.3368497 ], [ 72.8675969, 19.3369796 ], [ 72.8684102, 19.3369892 ], [ 72.8686765, 19.3373789 ], [ 72.8673174, 19.3376203 ], [ 72.8671679, 19.3386483 ], [ 72.8674291, 19.3394237 ], [ 72.8676969, 19.3396842 ], [ 72.8678262, 19.3402005 ], [ 72.8667517, 19.3394158 ], [ 72.8667818, 19.3370992 ], [ 72.8659666, 19.3372179 ], [ 72.8656988, 19.3369575 ], [ 72.8654276, 19.3369543 ], [ 72.8643331, 19.3377137 ], [ 72.8629706, 19.3382126 ], [ 72.8626962, 19.3384668 ], [ 72.8624216, 19.338721 ], [ 72.8618776, 19.3388437 ], [ 72.8617281, 19.3398717 ], [ 72.8614503, 19.3403833 ], [ 72.8615695, 19.3416717 ], [ 72.8604851, 19.341659 ], [ 72.8604783, 19.3421739 ], [ 72.8602072, 19.3421707 ], [ 72.8603556, 19.3411427 ], [ 72.8606302, 19.3408885 ], [ 72.8607829, 19.3396031 ], [ 72.860239, 19.339725 ], [ 72.8599646, 19.3399792 ], [ 72.8591477, 19.340227 ], [ 72.8588733, 19.3404812 ], [ 72.8569751, 19.3404589 ], [ 72.8556143, 19.3408295 ], [ 72.8556109, 19.3410869 ], [ 72.8561534, 19.3410934 ], [ 72.8563976, 19.3431555 ], [ 72.8577567, 19.342914 ], [ 72.8574788, 19.3434256 ], [ 72.8569349, 19.3435475 ], [ 72.8566603, 19.3438017 ], [ 72.8558451, 19.3439214 ], [ 72.8561095, 19.3444392 ], [ 72.8552929, 19.344687 ], [ 72.8551231, 19.3472593 ], [ 72.8555034, 19.3493232 ], [ 72.8603894, 19.3489939 ], [ 72.8605261, 19.3488673 ], [ 72.8605295, 19.3486101 ], [ 72.8602651, 19.348092 ], [ 72.8600107, 19.3468019 ], [ 72.8604229, 19.3464201 ], [ 72.861238, 19.3463014 ], [ 72.8615227, 19.3452752 ], [ 72.8620617, 19.3455388 ], [ 72.8620683, 19.3450242 ], [ 72.863963, 19.3453037 ], [ 72.8636852, 19.3458153 ], [ 72.8634157, 19.345683 ], [ 72.8626005, 19.3458027 ], [ 72.8624985, 19.3464852 ], [ 72.8623193, 19.3465717 ], [ 72.8623261, 19.3460569 ], [ 72.8620549, 19.3460537 ], [ 72.8619088, 19.3468242 ], [ 72.8616344, 19.3470784 ], [ 72.8614824, 19.3483638 ], [ 72.8622942, 19.3485016 ], [ 72.8629767, 19.348124 ], [ 72.8629494, 19.346924 ], [ 72.8642108, 19.3471087 ], [ 72.8635191, 19.3481302 ], [ 72.8636484, 19.3486466 ], [ 72.8631061, 19.3486403 ], [ 72.8630993, 19.349155 ], [ 72.8647179, 19.349817 ], [ 72.865387, 19.3504689 ], [ 72.8655164, 19.3509852 ], [ 72.8660621, 19.3507343 ], [ 72.8660555, 19.3512491 ], [ 72.866596, 19.3513837 ], [ 72.8669973, 19.3517749 ], [ 72.8670347, 19.3522016 ], [ 72.8668572, 19.3521589 ], [ 72.8663216, 19.3516379 ], [ 72.8647013, 19.3511041 ], [ 72.864164, 19.3507121 ], [ 72.864174, 19.3499399 ], [ 72.8633605, 19.3499304 ], [ 72.8633671, 19.3494156 ], [ 72.8614707, 19.3492642 ], [ 72.8606504, 19.3497694 ], [ 72.8584845, 19.3494865 ], [ 72.8579372, 19.3498666 ], [ 72.8579338, 19.350124 ], [ 72.8584745, 19.3502587 ], [ 72.8588757, 19.35065 ], [ 72.8592594, 19.3524564 ], [ 72.8584459, 19.3524468 ], [ 72.8585843, 19.3521911 ], [ 72.8585911, 19.3516762 ], [ 72.8577877, 19.3508945 ], [ 72.8576593, 19.3503782 ], [ 72.8571169, 19.3503717 ], [ 72.8573747, 19.3514046 ], [ 72.8565611, 19.351395 ], [ 72.8564352, 19.3506212 ], [ 72.8560356, 19.3501017 ], [ 72.854951, 19.3500888 ], [ 72.8549442, 19.3506037 ], [ 72.8541273, 19.3508514 ], [ 72.8543851, 19.3518841 ], [ 72.8551985, 19.3518938 ], [ 72.8550931, 19.3528337 ], [ 72.8550814, 19.3531723 ], [ 72.8552762, 19.3530121 ], [ 72.8557259, 19.353058 ], [ 72.8558591, 19.3531886 ], [ 72.8558525, 19.3537034 ], [ 72.855714, 19.3539592 ], [ 72.8549005, 19.3539497 ], [ 72.8551581, 19.3549824 ], [ 72.8546159, 19.354976 ], [ 72.8544596, 19.3565186 ], [ 72.8540432, 19.3572859 ], [ 72.8535025, 19.3571504 ], [ 72.8532295, 19.3572765 ], [ 72.8529483, 19.3580453 ], [ 72.8526771, 19.3580421 ], [ 72.8526839, 19.3575275 ], [ 72.8529551, 19.3575307 ], [ 72.8533783, 19.3562485 ], [ 72.8536527, 19.3559943 ], [ 72.853809, 19.3544517 ], [ 72.8543532, 19.3543288 ], [ 72.8544898, 19.3542022 ], [ 72.8543615, 19.3536859 ], [ 72.8538258, 19.3531648 ], [ 72.8533004, 19.3518715 ], [ 72.8481415, 19.3523254 ], [ 72.8479986, 19.3528386 ], [ 72.8471683, 19.3541158 ], [ 72.8468937, 19.35437 ], [ 72.8463142, 19.3571948 ], [ 72.8452057, 19.3589835 ], [ 72.8446229, 19.3620657 ], [ 72.8448907, 19.3623264 ], [ 72.8450166, 19.3631001 ], [ 72.8461046, 19.3628556 ], [ 72.8459619, 19.3633687 ], [ 72.8460963, 19.3634986 ], [ 72.8466368, 19.3636341 ], [ 72.84663, 19.3641489 ], [ 72.8471742, 19.3640261 ], [ 72.8490657, 19.3645634 ], [ 72.8501403, 19.3653483 ], [ 72.8506794, 19.3656121 ], [ 72.851754, 19.3663971 ], [ 72.8522965, 19.3664035 ], [ 72.8525643, 19.3666641 ], [ 72.8528355, 19.3666673 ], [ 72.8536591, 19.3659047 ], [ 72.8539304, 19.3659079 ], [ 72.8540638, 19.3660387 ], [ 72.854047, 19.3673256 ], [ 72.8543148, 19.3675861 ], [ 72.8544339, 19.3688747 ], [ 72.8551532, 19.3689707 ], [ 72.8552785, 19.368436 ], [ 72.856339, 19.3683823 ], [ 72.8564641, 19.3691559 ], [ 72.8565985, 19.3692857 ], [ 72.8574121, 19.3692954 ], [ 72.8576865, 19.3690412 ], [ 72.858229, 19.3690476 ], [ 72.8584968, 19.3693082 ], [ 72.8603987, 19.3690731 ], [ 72.8610812, 19.3686955 ], [ 72.8612239, 19.3681824 ], [ 72.8614951, 19.3681856 ], [ 72.8613456, 19.3692133 ], [ 72.8607931, 19.3699792 ], [ 72.8598243, 19.3715123 ], [ 72.8592853, 19.3712485 ], [ 72.8592919, 19.3707339 ], [ 72.8590207, 19.3707306 ], [ 72.8590275, 19.3702158 ], [ 72.8592987, 19.370219 ], [ 72.8593021, 19.3699616 ], [ 72.8582173, 19.3699489 ], [ 72.8582241, 19.3694341 ], [ 72.8576799, 19.369556 ], [ 72.8571307, 19.3700644 ], [ 72.8568595, 19.3700612 ], [ 72.8552441, 19.3691415 ], [ 72.8544306, 19.3691321 ], [ 72.8542709, 19.3709321 ], [ 72.8531727, 19.3719487 ], [ 72.8528846, 19.3732324 ], [ 72.8517761, 19.3750213 ], [ 72.8514847, 19.3765624 ], [ 72.8507869, 19.3780988 ], [ 72.8505157, 19.3780956 ], [ 72.8505223, 19.3775808 ], [ 72.8486223, 19.3776866 ], [ 72.8478121, 19.3774195 ], [ 72.8472747, 19.3770276 ], [ 72.8470135, 19.3762521 ], [ 72.8426794, 19.3758142 ], [ 72.8418572, 19.3764485 ], [ 72.84224, 19.3749962 ], [ 72.8473001, 19.3750967 ], [ 72.8474335, 19.3752275 ], [ 72.8475628, 19.3757439 ], [ 72.8481035, 19.3758784 ], [ 72.8483713, 19.3761391 ], [ 72.848912, 19.3762746 ], [ 72.8489086, 19.376532 ], [ 72.8505376, 19.3764222 ], [ 72.8517862, 19.3742493 ], [ 72.8518166, 19.3719329 ], [ 72.8522373, 19.3709081 ], [ 72.8535968, 19.3706668 ], [ 72.8540199, 19.3693846 ], [ 72.8540233, 19.3691272 ], [ 72.8537555, 19.3688665 ], [ 72.8537621, 19.3683519 ], [ 72.8536304, 19.368093 ], [ 72.8525491, 19.3678227 ], [ 72.8528136, 19.3683407 ], [ 72.8517287, 19.3683279 ], [ 72.8517355, 19.367813 ], [ 72.8511948, 19.3676775 ], [ 72.850927, 19.3674169 ], [ 72.8503862, 19.3672823 ], [ 72.850393, 19.3667675 ], [ 72.8498506, 19.3667611 ], [ 72.8498438, 19.3672759 ], [ 72.8490286, 19.3673946 ], [ 72.8487608, 19.367134 ], [ 72.8479489, 19.366996 ], [ 72.8479523, 19.3667388 ], [ 72.8484947, 19.3667452 ], [ 72.8479691, 19.3654519 ], [ 72.8463454, 19.3651752 ], [ 72.8460608, 19.3662014 ], [ 72.8457913, 19.3660691 ], [ 72.8447047, 19.3661854 ], [ 72.8445518, 19.3674708 ], [ 72.8448602, 19.3679007 ], [ 72.844142, 19.3677233 ], [ 72.8441352, 19.3682381 ], [ 72.8437314, 19.3679758 ], [ 72.8435996, 19.3677168 ], [ 72.8433284, 19.3677136 ], [ 72.8433218, 19.3682285 ], [ 72.8439958, 19.3684938 ], [ 72.844125, 19.3690102 ], [ 72.8446658, 19.3691449 ], [ 72.8449336, 19.3694054 ], [ 72.8452048, 19.3694086 ], [ 72.8453416, 19.369282 ], [ 72.8454913, 19.3682542 ], [ 72.8449489, 19.3682477 ], [ 72.8450434, 19.368079 ], [ 72.8457642, 19.3681281 ], [ 72.8461653, 19.3685195 ], [ 72.8462948, 19.3690359 ], [ 72.8457523, 19.3690295 ], [ 72.8457404, 19.3696259 ], [ 72.8430268, 19.3700268 ], [ 72.8431653, 19.3697711 ], [ 72.8431789, 19.3687416 ], [ 72.8430472, 19.3684825 ], [ 72.8425047, 19.3684761 ], [ 72.8426501, 19.3677057 ], [ 72.8432025, 19.3669399 ], [ 72.8433556, 19.3656547 ], [ 72.8438979, 19.3656611 ], [ 72.8440398, 19.365148 ], [ 72.8441776, 19.3650204 ], [ 72.8449912, 19.36503 ], [ 72.8452607, 19.3651623 ], [ 72.8454025, 19.3646492 ], [ 72.8456771, 19.364395 ], [ 72.8455488, 19.3638786 ], [ 72.8439251, 19.3636019 ], [ 72.8442029, 19.3630905 ], [ 72.8436607, 19.3630841 ], [ 72.8433997, 19.3623086 ], [ 72.842586, 19.362299 ], [ 72.8423284, 19.3612663 ], [ 72.841786, 19.3612599 ], [ 72.842496, 19.3597227 ], [ 72.8431657, 19.3594742 ], [ 72.8431589, 19.359989 ], [ 72.8439725, 19.3599987 ], [ 72.8441177, 19.3592281 ], [ 72.8455108, 19.3564129 ], [ 72.8458022, 19.3548718 ], [ 72.8469173, 19.3525683 ], [ 72.8478788, 19.3516783 ], [ 72.8484227, 19.3515564 ], [ 72.8484295, 19.3510416 ], [ 72.8476195, 19.3507747 ], [ 72.8476227, 19.3505173 ], [ 72.848438, 19.3503978 ], [ 72.8487124, 19.3501436 ], [ 72.8492566, 19.3500217 ], [ 72.8495378, 19.3492529 ], [ 72.8489954, 19.3492464 ], [ 72.8490124, 19.3479595 ], [ 72.8495529, 19.3480941 ], [ 72.8498207, 19.3483547 ], [ 72.8509054, 19.3483676 ], [ 72.8510388, 19.3484982 ], [ 72.8511681, 19.3490145 ], [ 72.8498122, 19.3489987 ], [ 72.8499408, 19.349515 ], [ 72.8498022, 19.3497707 ], [ 72.8506157, 19.3497804 ], [ 72.8502018, 19.3502903 ], [ 72.8500598, 19.3508034 ], [ 72.8508733, 19.3508131 ], [ 72.8508869, 19.3497836 ], [ 72.852246, 19.3495422 ], [ 72.8516901, 19.3505653 ], [ 72.8535902, 19.3504585 ], [ 72.8541358, 19.3502075 ], [ 72.8545505, 19.3495693 ], [ 72.8545807, 19.3472529 ], [ 72.8543231, 19.3462202 ], [ 72.8544826, 19.3444201 ], [ 72.8539404, 19.3444137 ], [ 72.8535129, 19.3459531 ], [ 72.8536457, 19.3462122 ], [ 72.8522966, 19.3456815 ], [ 72.8523067, 19.3449093 ], [ 72.8528506, 19.3447866 ], [ 72.8533996, 19.3442782 ], [ 72.8539438, 19.3441563 ], [ 72.8535433, 19.3436367 ], [ 72.8536928, 19.3426088 ], [ 72.853964, 19.342612 ], [ 72.8540855, 19.3436432 ], [ 72.8542199, 19.343773 ], [ 72.8544911, 19.3437762 ], [ 72.8549058, 19.343138 ], [ 72.8549226, 19.3418511 ], [ 72.8547909, 19.3415921 ], [ 72.8537083, 19.3410627 ], [ 72.8520685, 19.3414928 ], [ 72.851376, 19.341603 ], [ 72.8505827, 19.3418432 ], [ 72.8493645, 19.3417855 ], [ 72.8490899, 19.3420397 ], [ 72.8489472, 19.3425528 ], [ 72.8486726, 19.342807 ], [ 72.8485298, 19.3448222 ], [ 72.8482798, 19.3465365 ], [ 72.8477239, 19.3475597 ], [ 72.8475754, 19.3485877 ], [ 72.8469443, 19.3490431 ], [ 72.846809, 19.3484894 ], [ 72.8468124, 19.348232 ], [ 72.8464766, 19.3473477 ], [ 72.8462431, 19.3469819 ], [ 72.8467855, 19.3467763 ], [ 72.8465211, 19.3462583 ], [ 72.8476041, 19.3463995 ], [ 72.8477407, 19.3462728 ], [ 72.8479619, 19.3459441 ], [ 72.8479986, 19.3425417 ], [ 72.8444719, 19.3426282 ], [ 72.8441991, 19.3427541 ], [ 72.8443241, 19.3435279 ], [ 72.8437716, 19.3442937 ], [ 72.8437648, 19.3448083 ], [ 72.8445715, 19.3453328 ], [ 72.8447007, 19.3458492 ], [ 72.843345, 19.3458331 ], [ 72.8432428, 19.3465156 ], [ 72.8434497, 19.3481512 ], [ 72.8438534, 19.3484133 ], [ 72.8438468, 19.3489282 ], [ 72.8441179, 19.3489314 ], [ 72.8441078, 19.3497034 ], [ 72.8432976, 19.3494364 ], [ 72.8427824, 19.347371 ], [ 72.8427994, 19.3460841 ], [ 72.8425282, 19.3460809 ], [ 72.8425214, 19.3465955 ], [ 72.8411674, 19.3464504 ], [ 72.8408928, 19.3467046 ], [ 72.8400793, 19.3466949 ], [ 72.8392744, 19.3460423 ], [ 72.8390167, 19.3450094 ], [ 72.8376575, 19.3452508 ], [ 72.8377588, 19.3478263 ], [ 72.8378846, 19.3485999 ], [ 72.8378642, 19.3501442 ], [ 72.837593, 19.350141 ], [ 72.8370746, 19.348333 ], [ 72.8365526, 19.3467823 ], [ 72.836391747656251, 19.346780372026121 ], [ 72.8360103, 19.3467758 ], [ 72.836191747656244, 19.346121645190149 ], [ 72.836295, 19.3457494 ], [ 72.836191747656244, 19.345796891915491 ], [ 72.8357493, 19.3460004 ], [ 72.8354044, 19.3464436 ], [ 72.83485, 19.3469684 ], [ 72.8335806, 19.3481922 ], [ 72.8328128, 19.3494142 ], [ 72.832506, 19.3502335 ], [ 72.8320787, 19.3511004 ], [ 72.8313292, 19.3521259 ], [ 72.8305089, 19.3526309 ], [ 72.8299631, 19.3528819 ], [ 72.8296885, 19.3531361 ], [ 72.829414, 19.3533901 ], [ 72.8288682, 19.3536411 ], [ 72.8285936, 19.3538953 ], [ 72.8280445, 19.3544035 ], [ 72.8278757, 19.3545595 ], [ 72.8277665, 19.3549149 ], [ 72.8273872, 19.3553647 ], [ 72.8270734, 19.3558311 ], [ 72.8266329, 19.3563565 ], [ 72.8261088, 19.357212 ], [ 72.8258376, 19.3572088 ], [ 72.825841, 19.3569514 ], [ 72.8263966, 19.3562782 ], [ 72.8269374, 19.3557575 ], [ 72.8272333, 19.3552852 ], [ 72.8275889, 19.3548244 ], [ 72.827699, 19.3544133 ], [ 72.8279051, 19.354151 ], [ 72.828326, 19.3536346 ], [ 72.8286004, 19.3533804 ], [ 72.8293229, 19.3532192 ], [ 72.8295488, 19.3528481 ], [ 72.8304178, 19.35246 ], [ 72.8310614, 19.3518652 ], [ 72.8319369, 19.3509424 ], [ 72.8322469, 19.3502351 ], [ 72.8327136, 19.3492852 ], [ 72.833407, 19.3481749 ], [ 72.8338274, 19.3477794 ], [ 72.834002, 19.3475938 ], [ 72.8352021, 19.3464157 ], [ 72.8356166, 19.3457414 ], [ 72.8357595, 19.3452283 ], [ 72.836391747656251, 19.345086044277341 ], [ 72.8373915, 19.3448611 ], [ 72.837666, 19.3446069 ], [ 72.8384828, 19.3443591 ], [ 72.8401063, 19.3446358 ], [ 72.8402398, 19.3447666 ], [ 72.840369, 19.3452829 ], [ 72.8419892, 19.345817 ], [ 72.8421311, 19.3453039 ], [ 72.8422689, 19.3451763 ], [ 72.8428128, 19.3450546 ], [ 72.8425586, 19.3437643 ], [ 72.8431008, 19.3437707 ], [ 72.8433857, 19.3427445 ], [ 72.8428449, 19.342609 ], [ 72.8425773, 19.3423483 ], [ 72.8406775, 19.3424549 ], [ 72.8406809, 19.3421977 ], [ 72.8412231, 19.3422041 ], [ 72.8409587, 19.3416861 ], [ 72.8401453, 19.3416764 ], [ 72.8401387, 19.3421913 ], [ 72.8368865, 19.3420234 ], [ 72.836391747656251, 19.341860314968169 ], [ 72.836303951683945, 19.341831374814337 ], [ 72.836191747656244, 19.341794389042242 ], [ 72.8360765, 19.3417564 ], [ 72.8358087, 19.3414957 ], [ 72.8347291, 19.3410973 ], [ 72.8347223, 19.341612 ], [ 72.8336412, 19.3413417 ], [ 72.8335153, 19.3405679 ], [ 72.832855, 19.3392731 ], [ 72.8312332, 19.3388671 ], [ 72.8304299, 19.3380854 ], [ 72.8282778, 19.3367726 ], [ 72.826136, 19.3346878 ], [ 72.8237146, 19.3332434 ], [ 72.8235853, 19.3327271 ], [ 72.8223863, 19.3311682 ], [ 72.8218457, 19.3310327 ], [ 72.8202377, 19.329598 ], [ 72.8196146, 19.3290613 ], [ 72.8194345, 19.3288163 ], [ 72.8193054, 19.3282998 ], [ 72.818906, 19.3277802 ], [ 72.8183638, 19.3277738 ], [ 72.8181028, 19.3269983 ], [ 72.8176145, 19.3266715 ], [ 72.8170287, 19.3262132 ], [ 72.8137905, 19.3250155 ], [ 72.8135195, 19.3250123 ], [ 72.8124282, 19.3255141 ], [ 72.8113437, 19.3255011 ], [ 72.8110691, 19.3257553 ], [ 72.8107981, 19.3257519 ], [ 72.8105303, 19.3254912 ], [ 72.809988, 19.3254848 ], [ 72.8097136, 19.3257388 ], [ 72.8091714, 19.3257324 ], [ 72.8086325, 19.3254685 ], [ 72.8080903, 19.3254619 ], [ 72.8078157, 19.3257161 ], [ 72.806999, 19.3259637 ], [ 72.8056278, 19.327106 ], [ 72.8049291, 19.328642 ], [ 72.8036923, 19.3299142 ], [ 72.8029724, 19.3298171 ], [ 72.8028822, 19.3296471 ], [ 72.8034263, 19.3295245 ], [ 72.8041122, 19.3288896 ], [ 72.8042551, 19.3283765 ], [ 72.8001729, 19.3294852 ], [ 72.7996341, 19.3292213 ], [ 72.7980056, 19.3293308 ], [ 72.797724, 19.3300996 ], [ 72.7969072, 19.3303472 ], [ 72.7962082, 19.3318832 ], [ 72.795659, 19.3323914 ], [ 72.7956522, 19.3329063 ], [ 72.7953742, 19.3334177 ], [ 72.7945503, 19.3341799 ], [ 72.7939943, 19.3352028 ], [ 72.7934451, 19.335711 ], [ 72.7923364, 19.3374995 ], [ 72.7912379, 19.3385158 ], [ 72.7909531, 19.339542 ], [ 72.7905398, 19.3400518 ], [ 72.7899958, 19.3401735 ], [ 72.7894483, 19.3405534 ], [ 72.789302, 19.3413239 ], [ 72.7890274, 19.341578 ], [ 72.7882035, 19.3423402 ], [ 72.7877868, 19.3431073 ], [ 72.7872428, 19.3432291 ], [ 72.7864207, 19.343863 ], [ 72.7864103, 19.3446352 ], [ 72.7858664, 19.3447567 ], [ 72.7850459, 19.3452618 ], [ 72.7842342, 19.3451236 ], [ 72.7843555, 19.3461546 ], [ 72.7835314, 19.3469168 ], [ 72.7828367, 19.3481954 ], [ 72.7820198, 19.348443 ], [ 72.7820128, 19.3489577 ], [ 72.7814689, 19.3490794 ], [ 72.7811943, 19.3493334 ], [ 72.7803789, 19.3494526 ], [ 72.780236, 19.3499658 ], [ 72.7798227, 19.3504755 ], [ 72.7776466, 19.3509637 ], [ 72.7776362, 19.351736 ], [ 72.7781784, 19.3517426 ], [ 72.7780215, 19.353285 ], [ 72.7774721, 19.3537932 ], [ 72.7774513, 19.3553373 ], [ 72.7768915, 19.3566176 ], [ 72.7767284, 19.3586749 ], [ 72.7772691, 19.3588098 ], [ 72.7774024, 19.3589406 ], [ 72.7773884, 19.3599699 ], [ 72.7769752, 19.3604798 ], [ 72.776704, 19.3604764 ], [ 72.7769926, 19.3591929 ], [ 72.7753708, 19.3587866 ], [ 72.7751032, 19.358526 ], [ 72.7745626, 19.358391 ], [ 72.774444, 19.3571024 ], [ 72.7751312, 19.356467 ], [ 72.7767668, 19.3558439 ], [ 72.7769089, 19.3553307 ], [ 72.7766936, 19.3512096 ], [ 72.7769682, 19.3509554 ], [ 72.7772498, 19.3501867 ], [ 72.7776639, 19.349677 ], [ 72.7771234, 19.3495411 ], [ 72.7746813, 19.3496405 ], [ 72.7745383, 19.3501536 ], [ 72.7739856, 19.3509191 ], [ 72.7736621, 19.3547762 ], [ 72.7731056, 19.3557991 ], [ 72.7730987, 19.3563139 ], [ 72.772824, 19.3565679 ], [ 72.7725354, 19.3578514 ], [ 72.771708, 19.3588709 ], [ 72.7711446, 19.3604084 ], [ 72.77087, 19.3606626 ], [ 72.7705884, 19.3614313 ], [ 72.7700389, 19.3619395 ], [ 72.7697573, 19.3627082 ], [ 72.7686587, 19.3637244 ], [ 72.7685095, 19.3647522 ], [ 72.7679688, 19.3646163 ], [ 72.7674213, 19.3649962 ], [ 72.7672782, 19.3655093 ], [ 72.7627445, 19.3698295 ], [ 72.7622003, 19.3699512 ], [ 72.7605576, 19.3710897 ], [ 72.7604145, 19.3716027 ], [ 72.7593156, 19.3726189 ], [ 72.7587626, 19.3733842 ], [ 72.7582026, 19.3746645 ], [ 72.7576498, 19.3754299 ], [ 72.7576216, 19.3774887 ], [ 72.7573398, 19.3782576 ], [ 72.7573045, 19.3808312 ], [ 72.7575723, 19.3810918 ], [ 72.7578257, 19.3823821 ], [ 72.7583576, 19.3831608 ], [ 72.7591642, 19.3836856 ], [ 72.7592897, 19.3844594 ], [ 72.759561, 19.3844626 ], [ 72.7595715, 19.3836906 ], [ 72.7598428, 19.383694 ], [ 72.7599637, 19.3847251 ], [ 72.760364, 19.3852449 ], [ 72.7598216, 19.3852381 ], [ 72.759818, 19.3854955 ], [ 72.7603604, 19.3855021 ], [ 72.760485, 19.3862759 ], [ 72.7607526, 19.3865367 ], [ 72.7607386, 19.3875662 ], [ 72.7610062, 19.3878268 ], [ 72.7612669, 19.3886023 ], [ 72.7612565, 19.3893744 ], [ 72.7613907, 19.3895042 ], [ 72.761935, 19.3893827 ], [ 72.762192, 19.3904156 ], [ 72.7627328, 19.3905505 ], [ 72.7635394, 19.3910752 ], [ 72.7646224, 19.3912177 ], [ 72.7642221, 19.3906979 ], [ 72.7638299, 19.3896635 ], [ 72.7645005, 19.3901865 ], [ 72.7646296, 19.3907028 ], [ 72.7657144, 19.3907163 ], [ 72.7657214, 19.3902016 ], [ 72.7662638, 19.3902082 ], [ 72.7660066, 19.3891753 ], [ 72.7664094, 19.3894377 ], [ 72.7666736, 19.3899559 ], [ 72.7677445, 19.3909986 ], [ 72.7681395, 19.3919039 ], [ 72.7684107, 19.3919073 ], [ 72.7692332, 19.3912744 ], [ 72.7692226, 19.3920464 ], [ 72.7711176, 19.3923271 ], [ 72.7708535, 19.3918091 ], [ 72.7716672, 19.3918189 ], [ 72.7716602, 19.3923337 ], [ 72.7722026, 19.3923403 ], [ 72.7720629, 19.3925961 ], [ 72.7720559, 19.3931107 ], [ 72.7727292, 19.3935048 ], [ 72.7733944, 19.3944142 ], [ 72.7736587, 19.3949323 ], [ 72.7741801, 19.3964832 ], [ 72.7744479, 19.3967438 ], [ 72.7741521, 19.3985422 ], [ 72.7738775, 19.3987962 ], [ 72.7741172, 19.4011158 ], [ 72.7745141, 19.4018928 ], [ 72.7736968, 19.4021402 ], [ 72.7735466, 19.4031681 ], [ 72.773681, 19.403298 ], [ 72.7744948, 19.403308 ], [ 72.7752858, 19.4049912 ], [ 72.7747431, 19.4049846 ], [ 72.7747361, 19.4054993 ], [ 72.7752788, 19.4055059 ], [ 72.7751355, 19.406019 ], [ 72.7743113, 19.4067813 ], [ 72.7743009, 19.4075533 ], [ 72.7748223, 19.4091041 ], [ 72.7752209, 19.4097521 ], [ 72.7776553, 19.4102967 ], [ 72.7779229, 19.4105575 ], [ 72.7784655, 19.4105641 ], [ 72.7785987, 19.4106949 ], [ 72.7788492, 19.4122424 ], [ 72.7782996, 19.4127504 ], [ 72.7786755, 19.4150717 ], [ 72.7792181, 19.4150784 ], [ 72.7789293, 19.4163619 ], [ 72.7781191, 19.4160946 ], [ 72.7779618, 19.417637 ], [ 72.7782296, 19.4178979 ], [ 72.7778023, 19.4194371 ], [ 72.7775309, 19.4194337 ], [ 72.7775379, 19.418919 ], [ 72.7769919, 19.4191696 ], [ 72.7769815, 19.4199419 ], [ 72.7764388, 19.4199351 ], [ 72.7765636, 19.4207089 ], [ 72.7764249, 19.4209646 ], [ 72.7769675, 19.4209712 ], [ 72.7769639, 19.4212286 ], [ 72.7761501, 19.4212186 ], [ 72.7755761, 19.4235284 ], [ 72.7747586, 19.4237758 ], [ 72.7747516, 19.4242904 ], [ 72.7733901, 19.4246593 ], [ 72.7731153, 19.4249135 ], [ 72.7722997, 19.4250326 ], [ 72.772578, 19.4245212 ], [ 72.7682359, 19.4245962 ], [ 72.7679628, 19.4247219 ], [ 72.7679733, 19.4239498 ], [ 72.7674309, 19.4239432 ], [ 72.7673052, 19.4231694 ], [ 72.7677409, 19.4211154 ], [ 72.7682833, 19.4211222 ], [ 72.7682939, 19.4203499 ], [ 72.7688329, 19.420614 ], [ 72.7688399, 19.4200993 ], [ 72.7682973, 19.4200927 ], [ 72.7683045, 19.4195779 ], [ 72.7688469, 19.4195847 ], [ 72.7687214, 19.4188109 ], [ 72.7684536, 19.4185501 ], [ 72.7684572, 19.4182927 ], [ 72.768732, 19.4180387 ], [ 72.768753, 19.4164945 ], [ 72.7690278, 19.4162405 ], [ 72.7694527, 19.4149587 ], [ 72.7690038, 19.4148646 ], [ 72.7690153, 19.4140113 ], [ 72.7691973, 19.4137967 ], [ 72.7687951, 19.4134061 ], [ 72.7685345, 19.4126306 ], [ 72.7686881, 19.4113456 ], [ 72.7695018, 19.4113556 ], [ 72.7695581, 19.4072377 ], [ 72.7711873, 19.4071284 ], [ 72.772145, 19.4064972 ], [ 72.772316, 19.4039253 ], [ 72.7712328, 19.4037828 ], [ 72.7696159, 19.4029907 ], [ 72.7685328, 19.4028491 ], [ 72.7684037, 19.4023328 ], [ 72.7676005, 19.4015507 ], [ 72.7672047, 19.4007735 ], [ 72.7669318, 19.4008984 ], [ 72.7663892, 19.4008918 ], [ 72.7661198, 19.4007603 ], [ 72.7661444, 19.3989587 ], [ 72.768316, 19.3988561 ], [ 72.7684528, 19.3987297 ], [ 72.7684668, 19.3977002 ], [ 72.7688883, 19.3966756 ], [ 72.7683476, 19.3965399 ], [ 72.7664472, 19.3966458 ], [ 72.7664402, 19.3971604 ], [ 72.7648146, 19.3970113 ], [ 72.763196, 19.3963483 ], [ 72.7638841, 19.3955845 ], [ 72.7645768, 19.3945634 ], [ 72.7634901, 19.3946783 ], [ 72.7632153, 19.3949323 ], [ 72.7621251, 19.3953056 ], [ 72.7618327, 19.3968463 ], [ 72.7612903, 19.3968397 ], [ 72.7611261, 19.3988969 ], [ 72.7616369, 19.4012199 ], [ 72.7618552, 19.4050837 ], [ 72.7615594, 19.4068818 ], [ 72.7610098, 19.4073898 ], [ 72.7603827, 19.4135599 ], [ 72.7601045, 19.4140714 ], [ 72.7601009, 19.4143288 ], [ 72.7603687, 19.4145894 ], [ 72.7604837, 19.4161352 ], [ 72.7610261, 19.416142 ], [ 72.7611261, 19.4187174 ], [ 72.7607125, 19.4192271 ], [ 72.7601701, 19.4192203 ], [ 72.7603158, 19.4184499 ], [ 72.7601841, 19.4181908 ], [ 72.7588242, 19.4184316 ], [ 72.758082, 19.4230557 ], [ 72.7575148, 19.4248506 ], [ 72.75724, 19.4251046 ], [ 72.7572295, 19.4258767 ], [ 72.7569511, 19.4263879 ], [ 72.7566587, 19.4279288 ], [ 72.7558165, 19.4299776 ], [ 72.7556636, 19.4312628 ], [ 72.7551212, 19.4312562 ], [ 72.7549601, 19.433056 ], [ 72.7541321, 19.4340753 ], [ 72.7541179, 19.4351048 ], [ 72.7532652, 19.4379258 ], [ 72.7515842, 19.4417659 ], [ 72.7515666, 19.4430528 ], [ 72.7480999, 19.4503711 ], [ 72.7477724, 19.451335 ], [ 72.7473024, 19.4525726 ], [ 72.7465339, 19.4538014 ], [ 72.7459806, 19.4545667 ], [ 72.7454272, 19.455332 ], [ 72.7454202, 19.4558468 ], [ 72.7448668, 19.4566121 ], [ 72.7442992, 19.4584068 ], [ 72.7442886, 19.4591789 ], [ 72.7439995, 19.4604624 ], [ 72.7447849, 19.4625313 ], [ 72.7447778, 19.4630462 ], [ 72.7450456, 19.4633068 ], [ 72.7455559, 19.464817 ], [ 72.7471764, 19.468109 ], [ 72.7503968, 19.4727463 ], [ 72.750685765899135, 19.473097820521243 ], [ 72.7540272, 19.4771626 ], [ 72.7585944, 19.4802264 ], [ 72.7670847, 19.4864917 ], [ 72.7731158, 19.4896105 ], [ 72.7792639, 19.4925912 ], [ 72.7822209, 19.4934467 ], [ 72.7970936, 19.4964826 ], [ 72.799875, 19.4965654 ], [ 72.8026856, 19.4955442 ], [ 72.808541, 19.4915976 ], [ 72.8117614, 19.4900244 ], [ 72.8149526, 19.4896105 ], [ 72.8187001, 19.4899692 ], [ 72.8215692, 19.4911008 ], [ 72.824292, 19.4932259 ], [ 72.8272197, 19.4978073 ], [ 72.8314063, 19.5061693 ], [ 72.834861, 19.5103915 ], [ 72.8366469, 19.5151104 ], [ 72.8379351, 19.5163797 ], [ 72.8408042, 19.5170144 ], [ 72.8409799, 19.5175387 ], [ 72.8407457, 19.5185045 ], [ 72.8414776, 19.5193324 ], [ 72.8448152, 19.5202982 ], [ 72.8461619, 19.5210156 ], [ 72.8457228, 19.5213192 ], [ 72.8432049, 19.5208777 ], [ 72.8429707, 19.5213468 ], [ 72.8442882, 19.5216779 ], [ 72.8469817, 19.5218434 ], [ 72.8494995, 19.522892 ], [ 72.8517245, 19.5226713 ], [ 72.8552963, 19.5220366 ], [ 72.8571701, 19.5222298 ], [ 72.8602734, 19.5226713 ], [ 72.8619715, 19.5225333 ], [ 72.8624359, 19.5221672 ], [ 72.8641399, 19.5218559 ], [ 72.8653618, 19.5218559 ], [ 72.8675505, 19.5224222 ], [ 72.870855, 19.5226649 ], [ 72.8777643, 19.5211683 ], [ 72.8793134, 19.5207887 ], [ 72.8813422, 19.5213274 ], [ 72.8810061, 19.521572 ], [ 72.8813694, 19.5227804 ], [ 72.8817968, 19.5240896 ], [ 72.881860695312497, 19.524151756708502 ], [ 72.8827854, 19.5250513 ], [ 72.88166069531249, 19.526945907631386 ], [ 72.8810489, 19.5279765 ], [ 72.880247, 19.5280363 ], [ 72.8790089, 19.5284084 ], [ 72.8771635, 19.5292982 ], [ 72.8755757, 19.5307138 ], [ 72.8727003, 19.532817 ], [ 72.8665634, 19.5377513 ], [ 72.8630444, 19.5389242 ], [ 72.8584889, 19.5395228 ], [ 72.8540686, 19.5402912 ], [ 72.8509852, 19.540823 ], [ 72.8505961, 19.5407053 ], [ 72.8501633, 19.5405743 ], [ 72.8488845, 19.5400142 ], [ 72.8462237, 19.5392862 ], [ 72.8450993, 19.5381072 ], [ 72.8434771, 19.5359313 ], [ 72.8424696, 19.5352827 ], [ 72.8426117, 19.5347696 ], [ 72.8428865, 19.5345156 ], [ 72.8429001, 19.5334861 ], [ 72.8413055, 19.5308928 ], [ 72.8410443, 19.5301174 ], [ 72.8402471, 19.5288208 ], [ 72.8397111, 19.5282996 ], [ 72.8383879, 19.5257097 ], [ 72.8382559, 19.5249965 ], [ 72.8377304, 19.5241572 ], [ 72.8374024, 19.5239443 ], [ 72.8371084, 19.52337 ], [ 72.8367969, 19.522859 ], [ 72.8366652, 19.5226001 ], [ 72.8340754, 19.5203955 ], [ 72.8324135, 19.5185981 ], [ 72.8313084, 19.5169801 ], [ 72.8305418, 19.5158141 ], [ 72.8289228, 19.5137218 ], [ 72.8279578, 19.5121453 ], [ 72.8266424, 19.5111825 ], [ 72.8250079, 19.5107179 ], [ 72.8236217, 19.510285 ], [ 72.8212356, 19.5099483 ], [ 72.8193007, 19.5097379 ], [ 72.8167034, 19.5100205 ], [ 72.8148406, 19.5102877 ], [ 72.8088475, 19.5087228 ], [ 72.7995339, 19.5070051 ], [ 72.7928524, 19.5061272 ], [ 72.7877907, 19.5059746 ], [ 72.7847536, 19.5062036 ], [ 72.7800563, 19.5053257 ], [ 72.7796919, 19.5063944 ], [ 72.778963, 19.5068906 ], [ 72.7785985, 19.5079594 ], [ 72.7792464, 19.5093716 ], [ 72.7826074, 19.5128068 ], [ 72.7841057, 19.5152877 ], [ 72.785523, 19.5191426 ], [ 72.7862519, 19.5230356 ], [ 72.7862924, 19.5250202 ], [ 72.7852395, 19.5267376 ], [ 72.7837413, 19.5279208 ], [ 72.7813521, 19.5286459 ], [ 72.7799753, 19.5290657 ], [ 72.7799753, 19.529829 ], [ 72.7811092, 19.5321952 ], [ 72.781919, 19.5347139 ], [ 72.7839032, 19.5379578 ], [ 72.7843082, 19.5390645 ], [ 72.7835388, 19.540133 ], [ 72.782243, 19.5418884 ], [ 72.7812306, 19.5443307 ], [ 72.782324, 19.5407436 ], [ 72.7835793, 19.5395606 ], [ 72.7834983, 19.5384157 ], [ 72.7819595, 19.5368511 ], [ 72.7813926, 19.5348284 ], [ 72.7798134, 19.5320807 ], [ 72.7790845, 19.5299816 ], [ 72.7794489, 19.5287604 ], [ 72.7764119, 19.5274628 ], [ 72.7745896, 19.5262415 ], [ 72.7724435, 19.5264323 ], [ 72.7712286, 19.5278444 ], [ 72.7703783, 19.5299816 ], [ 72.7696899, 19.5333019 ], [ 72.7696089, 19.5352101 ], [ 72.768799, 19.5365076 ], [ 72.7673817, 19.5378433 ], [ 72.7663694, 19.540133 ], [ 72.765357, 19.5423845 ], [ 72.7638182, 19.5435294 ], [ 72.7653975, 19.5418121 ], [ 72.7660049, 19.5393316 ], [ 72.7671387, 19.5372708 ], [ 72.7686775, 19.5353245 ], [ 72.7690015, 19.5315845 ], [ 72.7695279, 19.5290275 ], [ 72.7711476, 19.526585 ], [ 72.7728079, 19.5254782 ], [ 72.7750756, 19.5257072 ], [ 72.7781531, 19.5273483 ], [ 72.7800158, 19.5278063 ], [ 72.7827694, 19.5269285 ], [ 72.7841057, 19.525669 ], [ 72.7845511, 19.5243332 ], [ 72.7839842, 19.5208601 ], [ 72.7832553, 19.5178831 ], [ 72.7827694, 19.5157076 ], [ 72.7781126, 19.5107076 ], [ 72.7741037, 19.5053257 ], [ 72.770248, 19.5025175 ], [ 72.7679573, 19.5020317 ], [ 72.7652557, 19.5034553 ], [ 72.7655165, 19.5042308 ], [ 72.7644309, 19.5042174 ], [ 72.7644239, 19.504732 ], [ 72.7636061, 19.5049794 ], [ 72.7635105, 19.5051471 ], [ 72.7627902, 19.5050975 ], [ 72.7625169, 19.5052232 ], [ 72.7622349, 19.5059921 ], [ 72.7611493, 19.5059787 ], [ 72.7611423, 19.5064933 ], [ 72.7584192, 19.5071026 ], [ 72.7581444, 19.5073567 ], [ 72.7565124, 19.5075939 ], [ 72.7562374, 19.5078479 ], [ 72.7551518, 19.5078343 ], [ 72.7548821, 19.5077027 ], [ 72.7548715, 19.5084748 ], [ 72.7537876, 19.5083323 ], [ 72.7526931, 19.5089626 ], [ 72.7528212, 19.5094789 ], [ 72.7526823, 19.5097347 ], [ 72.7521378, 19.5098562 ], [ 72.7513128, 19.510618 ], [ 72.7502219, 19.5109911 ], [ 72.7502147, 19.5115058 ], [ 72.7485791, 19.5120002 ], [ 72.7482969, 19.5127691 ], [ 72.7469363, 19.5130095 ], [ 72.7469291, 19.5135241 ], [ 72.7458382, 19.5138963 ], [ 72.7447383, 19.5149121 ], [ 72.7436419, 19.5156706 ], [ 72.7422794, 19.5160401 ], [ 72.7422722, 19.5165549 ], [ 72.7414563, 19.5166728 ], [ 72.740908, 19.5170527 ], [ 72.7409008, 19.5175674 ], [ 72.740083, 19.5178146 ], [ 72.739654, 19.5193536 ], [ 72.7391004, 19.5201189 ], [ 72.7390932, 19.5206335 ], [ 72.7388182, 19.5208875 ], [ 72.738811, 19.5214022 ], [ 72.7382539, 19.5224249 ], [ 72.7380792, 19.5252542 ], [ 72.7375362, 19.5252474 ], [ 72.7376644, 19.5257637 ], [ 72.7374933, 19.5283357 ], [ 72.738038, 19.5282134 ], [ 72.7381715, 19.5283442 ], [ 72.738554, 19.5301508 ], [ 72.7380146, 19.5298866 ], [ 72.7382932, 19.5293754 ], [ 72.7377504, 19.5293685 ], [ 72.7377611, 19.5285965 ], [ 72.7369431, 19.5288435 ], [ 72.7369324, 19.5296156 ], [ 72.7377468, 19.5296258 ], [ 72.7377432, 19.5298832 ], [ 72.7372004, 19.5298764 ], [ 72.737461, 19.5306519 ], [ 72.7366521, 19.5302551 ], [ 72.7339358, 19.5303502 ], [ 72.7339286, 19.530865 ], [ 72.7333858, 19.5308582 ], [ 72.7330964, 19.5321416 ], [ 72.7328248, 19.5321382 ], [ 72.7327175, 19.5300777 ], [ 72.7334054, 19.5294423 ], [ 72.7350395, 19.5290771 ], [ 72.735182, 19.5285642 ], [ 72.73532, 19.5284366 ], [ 72.7361361, 19.5283187 ], [ 72.7356075, 19.5272824 ], [ 72.7342486, 19.5273937 ], [ 72.7334413, 19.5268686 ], [ 72.7326343, 19.5263438 ], [ 72.7318199, 19.5263336 ], [ 72.7315468, 19.5264593 ], [ 72.7314034, 19.5269722 ], [ 72.7309895, 19.5274819 ], [ 72.7301716, 19.527729 ], [ 72.7300246, 19.5284993 ], [ 72.7296107, 19.5290091 ], [ 72.7290679, 19.5290021 ], [ 72.7294601, 19.5300367 ], [ 72.7291599, 19.532092 ], [ 72.7287424, 19.532859 ], [ 72.7281996, 19.5328522 ], [ 72.7280562, 19.5333653 ], [ 72.727781, 19.5336192 ], [ 72.7276351, 19.5343895 ], [ 72.7265529, 19.5341185 ], [ 72.7269488, 19.5348957 ], [ 72.7269199, 19.5369546 ], [ 72.7266449, 19.5372085 ], [ 72.7262238, 19.5382328 ], [ 72.7256789, 19.5383542 ], [ 72.7251289, 19.538862 ], [ 72.7240322, 19.5396205 ], [ 72.7234858, 19.5398709 ], [ 72.7226623, 19.5405046 ], [ 72.7225334, 19.5399881 ], [ 72.7222656, 19.5397273 ], [ 72.7221446, 19.5386963 ], [ 72.7210571, 19.5388108 ], [ 72.7205105, 19.5390612 ], [ 72.7202391, 19.5390578 ], [ 72.7188908, 19.5383976 ], [ 72.7186048, 19.5394237 ], [ 72.7202282, 19.5398299 ], [ 72.7215856, 19.5398471 ], [ 72.7222474, 19.5410142 ], [ 72.7224973, 19.5425617 ], [ 72.7230329, 19.5430831 ], [ 72.7231439, 19.5448864 ], [ 72.7226045, 19.5446222 ], [ 72.7225973, 19.5451368 ], [ 72.7220526, 19.5452583 ], [ 72.7212291, 19.5458919 ], [ 72.7221499, 19.5479627 ], [ 72.7217772, 19.5551652 ], [ 72.7212089, 19.5569597 ], [ 72.7209339, 19.5572137 ], [ 72.7206479, 19.5582396 ], [ 72.7203728, 19.5584936 ], [ 72.7198118, 19.5597735 ], [ 72.7197937, 19.5610603 ], [ 72.7200579, 19.5615785 ], [ 72.720029, 19.5636373 ], [ 72.7197502, 19.5641485 ], [ 72.7197356, 19.565178 ], [ 72.7191855, 19.5656858 ], [ 72.7188995, 19.5667117 ], [ 72.7186243, 19.5669657 ], [ 72.7181959, 19.5685046 ], [ 72.7173777, 19.5687516 ], [ 72.7172306, 19.569522 ], [ 72.7166767, 19.5702872 ], [ 72.7160938, 19.5731113 ], [ 72.7163327, 19.5754309 ], [ 72.7161756, 19.5769733 ], [ 72.7169902, 19.5769835 ], [ 72.7171, 19.5787868 ], [ 72.7173643, 19.5793048 ], [ 72.7173136, 19.5829077 ], [ 72.7170239, 19.584191 ], [ 72.7164735, 19.5846989 ], [ 72.7147935, 19.5882812 ], [ 72.7147863, 19.5887958 ], [ 72.7158579, 19.5898391 ], [ 72.7156935, 19.5918962 ], [ 72.719754, 19.592848 ], [ 72.7211117, 19.5928652 ], [ 72.7222087, 19.5921069 ], [ 72.7227555, 19.5918565 ], [ 72.7238417, 19.5918701 ], [ 72.727093, 19.5924259 ], [ 72.7278931, 19.5934656 ], [ 72.7284362, 19.5934724 ], [ 72.7287114, 19.5932186 ], [ 72.7297976, 19.5932322 ], [ 72.730337, 19.5934964 ], [ 72.7310065, 19.5941489 ], [ 72.7315279, 19.5956998 ], [ 72.7324697, 19.5963547 ], [ 72.7346387, 19.5966393 ], [ 72.7354461, 19.5971644 ], [ 72.7365323, 19.597178 ], [ 72.7370826, 19.5966701 ], [ 72.7441395, 19.597016 ], [ 72.7449469, 19.5975408 ], [ 72.7454901, 19.5975477 ], [ 72.7457581, 19.5978085 ], [ 72.7465727, 19.5978187 ], [ 72.749299, 19.5970806 ], [ 72.7509284, 19.5971009 ], [ 72.7514661, 19.5974942 ], [ 72.7516086, 19.5969812 ], [ 72.7517466, 19.5968536 ], [ 72.7520182, 19.596857 ], [ 72.7528222, 19.5976393 ], [ 72.7539083, 19.5976529 ], [ 72.7541816, 19.597528 ], [ 72.7545742, 19.5985626 ], [ 72.7549768, 19.5989532 ], [ 72.7568705, 19.5994915 ], [ 72.7582302, 19.5993802 ], [ 72.7582372, 19.5988655 ], [ 72.7593217, 19.5990073 ], [ 72.7598721, 19.5984993 ], [ 72.7612334, 19.5982589 ], [ 72.7620552, 19.5977542 ], [ 72.764233, 19.5973957 ], [ 72.7643967, 19.5953384 ], [ 72.7640042, 19.594304 ], [ 72.763461, 19.5942972 ], [ 72.7634646, 19.5940398 ], [ 72.7645543, 19.593796 ], [ 72.7645472, 19.5943106 ], [ 72.7656316, 19.5944524 ], [ 72.7657687, 19.5943258 ], [ 72.7657758, 19.5938111 ], [ 72.7655078, 19.5935505 ], [ 72.7652576, 19.592003 ], [ 72.7654009, 19.5914898 ], [ 72.7664818, 19.5918888 ], [ 72.7666154, 19.5920198 ], [ 72.766862, 19.5938245 ], [ 72.7662977, 19.5953621 ], [ 72.7665443, 19.597167 ], [ 72.7668123, 19.5974276 ], [ 72.7669414, 19.597944 ], [ 72.7655783, 19.5983127 ], [ 72.7650282, 19.5988208 ], [ 72.7642081, 19.5991972 ], [ 72.7630792, 19.6022721 ], [ 72.7622644, 19.6022619 ], [ 72.7623926, 19.6027782 ], [ 72.7627951, 19.6031689 ], [ 72.7638779, 19.6034397 ], [ 72.7644139, 19.6039612 ], [ 72.7649569, 19.603968 ], [ 72.7655037, 19.6037174 ], [ 72.7663185, 19.6037274 ], [ 72.7668651, 19.6034768 ], [ 72.7674082, 19.6034836 ], [ 72.7676762, 19.6037444 ], [ 72.7690342, 19.6037612 ], [ 72.7693022, 19.6040218 ], [ 72.7695738, 19.6040252 ], [ 72.7702574, 19.603648 ], [ 72.7704186, 19.6018482 ], [ 72.7706902, 19.6018516 ], [ 72.770683, 19.6023662 ], [ 72.7744886, 19.6021558 ], [ 72.7746311, 19.6016429 ], [ 72.7755908, 19.6010107 ], [ 72.7764056, 19.6010209 ], [ 72.7766736, 19.6012815 ], [ 72.7774882, 19.6012916 ], [ 72.7783099, 19.6007869 ], [ 72.7791283, 19.6005395 ], [ 72.7805178, 19.5982401 ], [ 72.7810627, 19.5981186 ], [ 72.7812052, 19.5976055 ], [ 72.7818934, 19.5969701 ], [ 72.7824383, 19.5968484 ], [ 72.7827239, 19.5958223 ], [ 72.7835369, 19.5959606 ], [ 72.7840871, 19.5954526 ], [ 72.7854449, 19.5954692 ], [ 72.7862665, 19.5949646 ], [ 72.7873528, 19.5949778 ], [ 72.7876278, 19.5947238 ], [ 72.7878994, 19.5947272 ], [ 72.7883011, 19.5951186 ], [ 72.7882941, 19.5956335 ], [ 72.7874687, 19.5963955 ], [ 72.7871901, 19.5969069 ], [ 72.7863649, 19.597669 ], [ 72.7862226, 19.5981819 ], [ 72.785131, 19.5985543 ], [ 72.7845825, 19.5989342 ], [ 72.7845721, 19.5997062 ], [ 72.7823959, 19.5999368 ], [ 72.7822527, 19.6004499 ], [ 72.7812814, 19.6019823 ], [ 72.7804632, 19.6022296 ], [ 72.7807206, 19.6032624 ], [ 72.7818015, 19.6036614 ], [ 72.7819352, 19.6037922 ], [ 72.7823113, 19.6061135 ], [ 72.7815001, 19.6058461 ], [ 72.7809745, 19.6045526 ], [ 72.7804332, 19.6044169 ], [ 72.7801652, 19.604156 ], [ 72.7790788, 19.6041426 ], [ 72.7782534, 19.6049047 ], [ 72.7768974, 19.6047597 ], [ 72.7769079, 19.6039876 ], [ 72.7758199, 19.6041025 ], [ 72.7725434, 19.605349 ], [ 72.7709102, 19.6055862 ], [ 72.7698099, 19.6066023 ], [ 72.7689898, 19.6069786 ], [ 72.7688393, 19.6080063 ], [ 72.7684217, 19.6087733 ], [ 72.7689631, 19.6089083 ], [ 72.770866, 19.6088037 ], [ 72.770573, 19.6103445 ], [ 72.7711162, 19.6103513 ], [ 72.7711304, 19.6093218 ], [ 72.7715337, 19.6095841 ], [ 72.7717806, 19.6113891 ], [ 72.7727227, 19.6120438 ], [ 72.7733924, 19.612696 ], [ 72.7735214, 19.6132123 ], [ 72.771615, 19.6135745 ], [ 72.7710665, 19.6139542 ], [ 72.7711949, 19.6144707 ], [ 72.7719955, 19.6155102 ], [ 72.7725173, 19.6170611 ], [ 72.7726519, 19.617191 ], [ 72.7737382, 19.6172044 ], [ 72.774285, 19.6169538 ], [ 72.7748282, 19.6169604 ], [ 72.7761754, 19.6177493 ], [ 72.7769885, 19.6178886 ], [ 72.7764275, 19.6191687 ], [ 72.774791, 19.6196633 ], [ 72.7746475, 19.6201762 ], [ 72.7739548, 19.6211974 ], [ 72.7734169, 19.6208041 ], [ 72.7728754, 19.6206692 ], [ 72.7725861, 19.6219527 ], [ 72.7723145, 19.6219493 ], [ 72.7719352, 19.6198854 ], [ 72.771131, 19.6191031 ], [ 72.7708664, 19.6185851 ], [ 72.7706161, 19.6170375 ], [ 72.7694122, 19.6157355 ], [ 72.7683294, 19.6154649 ], [ 72.7677316, 19.6095371 ], [ 72.7675999, 19.6092779 ], [ 72.7624417, 19.6090848 ], [ 72.7613661, 19.6082993 ], [ 72.7605566, 19.6079035 ], [ 72.7603028, 19.6066134 ], [ 72.7594793, 19.6072462 ], [ 72.7589325, 19.6074968 ], [ 72.7583893, 19.60749 ], [ 72.7575817, 19.6069651 ], [ 72.7564954, 19.6069515 ], [ 72.7556753, 19.607328 ], [ 72.7557965, 19.608359 ], [ 72.7556575, 19.6086147 ], [ 72.7548411, 19.6087329 ], [ 72.7545712, 19.6086011 ], [ 72.7541777, 19.6075667 ], [ 72.7541849, 19.6070519 ], [ 72.7546069, 19.6060277 ], [ 72.7551501, 19.6060343 ], [ 72.7551608, 19.6052623 ], [ 72.7521788, 19.6048385 ], [ 72.7519055, 19.6049644 ], [ 72.7525661, 19.6062596 ], [ 72.7525553, 19.6070317 ], [ 72.7524164, 19.6072874 ], [ 72.7510567, 19.6073985 ], [ 72.7497097, 19.6066096 ], [ 72.7491665, 19.6066028 ], [ 72.7488932, 19.6067285 ], [ 72.7487426, 19.6077563 ], [ 72.7477781, 19.6087737 ], [ 72.7469671, 19.6085062 ], [ 72.746863, 19.6061884 ], [ 72.7467313, 19.6059292 ], [ 72.7456451, 19.6059156 ], [ 72.7455232, 19.6048844 ], [ 72.745127, 19.6041073 ], [ 72.7443105, 19.6042254 ], [ 72.7440354, 19.6044794 ], [ 72.743217, 19.6047264 ], [ 72.7424024, 19.6047162 ], [ 72.7421325, 19.6045847 ], [ 72.7426937, 19.6033046 ], [ 72.7432385, 19.6031823 ], [ 72.7436545, 19.6025444 ], [ 72.7438016, 19.6017741 ], [ 72.7427207, 19.6013741 ], [ 72.7413735, 19.6005849 ], [ 72.7411057, 19.6003242 ], [ 72.7405642, 19.6001891 ], [ 72.7404353, 19.5996728 ], [ 72.7397676, 19.5988922 ], [ 72.7392263, 19.5987563 ], [ 72.7389583, 19.5984955 ], [ 72.7378721, 19.5984819 ], [ 72.7365035, 19.5992367 ], [ 72.7356852, 19.599484 ], [ 72.7351348, 19.5999918 ], [ 72.734045, 19.6002356 ], [ 72.7337698, 19.6004894 ], [ 72.7307791, 19.6007092 ], [ 72.7302306, 19.6010889 ], [ 72.7305725, 19.6057264 ], [ 72.7305075, 19.6103586 ], [ 72.7296457, 19.6136941 ], [ 72.7293705, 19.6139479 ], [ 72.7282408, 19.6170226 ], [ 72.7276867, 19.6177877 ], [ 72.7268611, 19.6185495 ], [ 72.7265788, 19.6193182 ], [ 72.7265642, 19.6203475 ], [ 72.7268322, 19.6206083 ], [ 72.7269613, 19.6211246 ], [ 72.7277761, 19.621135 ], [ 72.7276767, 19.6215601 ], [ 72.7269558, 19.6215104 ], [ 72.7261465, 19.6211144 ], [ 72.7261391, 19.6216291 ], [ 72.725596, 19.6216223 ], [ 72.7251664, 19.6231613 ], [ 72.7244733, 19.6241821 ], [ 72.725558, 19.624324 ], [ 72.7263656, 19.6248491 ], [ 72.7269069, 19.624985 ], [ 72.7270531, 19.6242146 ], [ 72.7278861, 19.6229383 ], [ 72.72786, 19.6217385 ], [ 72.728172, 19.6219122 ], [ 72.7284255, 19.6232023 ], [ 72.7278715, 19.6239676 ], [ 72.7271495, 19.6270473 ], [ 72.7266064, 19.6270403 ], [ 72.7263202, 19.6280664 ], [ 72.7268653, 19.6279441 ], [ 72.7272777, 19.6275637 ], [ 72.7279789, 19.6260282 ], [ 72.7290634, 19.6261702 ], [ 72.7304105, 19.6269593 ], [ 72.7309537, 19.6269661 ], [ 72.7312291, 19.6267122 ], [ 72.7328587, 19.6267328 ], [ 72.733677, 19.6264856 ], [ 72.7353068, 19.6265062 ], [ 72.7358571, 19.6259984 ], [ 72.7366719, 19.6260086 ], [ 72.7396451, 19.6270755 ], [ 72.7408507, 19.6282494 ], [ 72.7407082, 19.6287625 ], [ 72.7360962, 19.628318 ], [ 72.735821, 19.6285718 ], [ 72.7336481, 19.6285444 ], [ 72.7319987, 19.6299398 ], [ 72.7318479, 19.6309676 ], [ 72.7312975, 19.6314754 ], [ 72.7308796, 19.6322424 ], [ 72.7303346, 19.6323637 ], [ 72.7297861, 19.6327434 ], [ 72.7296424, 19.6332564 ], [ 72.7292283, 19.6337659 ], [ 72.728685, 19.6337591 ], [ 72.7284279, 19.6327262 ], [ 72.7267965, 19.6328338 ], [ 72.7259762, 19.6332101 ], [ 72.7260934, 19.6344985 ], [ 72.7252641, 19.6355176 ], [ 72.7244166, 19.6378234 ], [ 72.7224788, 19.640373 ], [ 72.7217893, 19.6411363 ], [ 72.720433, 19.6409901 ], [ 72.7188124, 19.6403265 ], [ 72.7191095, 19.6385283 ], [ 72.7182947, 19.6385181 ], [ 72.7184482, 19.6372331 ], [ 72.7194283, 19.6351862 ], [ 72.7199734, 19.635064 ], [ 72.7202488, 19.6348101 ], [ 72.7207937, 19.6346888 ], [ 72.7209545, 19.6328891 ], [ 72.7216466, 19.6319965 ], [ 72.722606, 19.6313656 ], [ 72.7231637, 19.6303431 ], [ 72.7237141, 19.6298353 ], [ 72.7236079, 19.6277746 ], [ 72.7249622, 19.6280492 ], [ 72.7256661, 19.6262564 ], [ 72.7259413, 19.6260024 ], [ 72.7260849, 19.6254894 ], [ 72.7252701, 19.6254792 ], [ 72.7255489, 19.6249678 ], [ 72.7241855, 19.6253363 ], [ 72.7230972, 19.6254516 ], [ 72.7226712, 19.6267332 ], [ 72.7218456, 19.6274951 ], [ 72.7210163, 19.6285142 ], [ 72.7193467, 19.6313242 ], [ 72.7176587, 19.6354212 ], [ 72.7151524, 19.6397651 ], [ 72.7146018, 19.640273 ], [ 72.7140329, 19.6420675 ], [ 72.7137322, 19.6441229 ], [ 72.7131743, 19.6451454 ], [ 72.7131598, 19.6461747 ], [ 72.7128846, 19.6464285 ], [ 72.7125801, 19.6487413 ], [ 72.7114533, 19.6515584 ], [ 72.7111634, 19.6528417 ], [ 72.7112596, 19.6556742 ], [ 72.7107164, 19.6556672 ], [ 72.711362, 19.6579921 ], [ 72.7110758, 19.659018 ], [ 72.7113036, 19.6621097 ], [ 72.7115716, 19.6623705 ], [ 72.7114289, 19.6628834 ], [ 72.7108857, 19.6628764 ], [ 72.7112633, 19.6649405 ], [ 72.711117, 19.6657109 ], [ 72.7100322, 19.6655678 ], [ 72.7097642, 19.665307 ], [ 72.7086795, 19.6651649 ], [ 72.7089456, 19.665554 ], [ 72.7111116, 19.6660964 ], [ 72.7119156, 19.6668787 ], [ 72.7125888, 19.6672739 ], [ 72.7128829, 19.6687336 ], [ 72.7127033, 19.6688197 ], [ 72.7125742, 19.6683034 ], [ 72.7119065, 19.6675226 ], [ 72.7108216, 19.6673796 ], [ 72.7102766, 19.6675018 ], [ 72.7101329, 19.6680148 ], [ 72.7098575, 19.6682686 ], [ 72.7092923, 19.6698059 ], [ 72.7087379, 19.670571 ], [ 72.7084554, 19.6713395 ], [ 72.7076256, 19.6723586 ], [ 72.7064877, 19.6759475 ], [ 72.7061316, 19.681863 ], [ 72.7063419, 19.6829885 ], [ 72.7068808, 19.6865058 ], [ 72.7074168, 19.6870274 ], [ 72.707666313025726, 19.6876 ], [ 72.7082063, 19.6888392 ], [ 72.7087424, 19.6893608 ], [ 72.7092675, 19.6906545 ], [ 72.7092235, 19.6937426 ], [ 72.7096096, 19.695292 ], [ 72.710153, 19.6952988 ], [ 72.7100131, 19.6955545 ], [ 72.7105162, 19.6983922 ], [ 72.7104943, 19.6999363 ], [ 72.7099105, 19.7027602 ], [ 72.7098995, 19.7035322 ], [ 72.7096094, 19.7048155 ], [ 72.7090329, 19.7071247 ], [ 72.7076266, 19.7104528 ], [ 72.7073512, 19.7107067 ], [ 72.7070685, 19.7114753 ], [ 72.7062422, 19.712237 ], [ 72.7062312, 19.7130089 ], [ 72.7051295, 19.7140244 ], [ 72.7045676, 19.7153043 ], [ 72.704095204624636, 19.715956111905658 ], [ 72.7040131, 19.7160694 ], [ 72.7022142, 19.7183627 ], [ 72.7016706, 19.7183559 ], [ 72.7012478, 19.7193799 ], [ 72.6998706, 19.7206492 ], [ 72.6995914, 19.7211605 ], [ 72.6987651, 19.7219219 ], [ 72.698486, 19.7224332 ], [ 72.6957315, 19.7249716 ], [ 72.6950341, 19.7262497 ], [ 72.6944907, 19.7262427 ], [ 72.693785, 19.7280353 ], [ 72.6935094, 19.7282892 ], [ 72.6933408, 19.7306037 ], [ 72.6944242, 19.7308749 ], [ 72.6949411, 19.7300903 ], [ 72.6952834, 19.729142 ], [ 72.6957372, 19.7282907 ], [ 72.6962382, 19.7275522 ], [ 72.6966555, 19.7269136 ], [ 72.6991087, 19.7264303 ], [ 72.6993843, 19.7261765 ], [ 72.7026455, 19.7262183 ], [ 72.7034571, 19.7264861 ], [ 72.7059029, 19.7265175 ], [ 72.7065875, 19.7261406 ], [ 72.7067311, 19.7256277 ], [ 72.7072747, 19.7256347 ], [ 72.707282, 19.7251198 ], [ 72.7078256, 19.7251268 ], [ 72.7078366, 19.7243547 ], [ 72.7100161, 19.7239962 ], [ 72.7113731, 19.7241427 ], [ 72.7115196, 19.7233723 ], [ 72.711795, 19.7231185 ], [ 72.7122252, 19.7215795 ], [ 72.7130403, 19.7215901 ], [ 72.7129186, 19.7205589 ], [ 72.7131942, 19.720305 ], [ 72.7131136, 19.716443 ], [ 72.713657, 19.71645 ], [ 72.7137852, 19.7169664 ], [ 72.7139197, 19.7170964 ], [ 72.7144614, 19.7172325 ], [ 72.714594114741374, 19.716029772656253 ], [ 72.714594114741388, 19.716029772656253 ], [ 72.7147734, 19.714405 ], [ 72.7153168, 19.714412 ], [ 72.7149271, 19.71312 ], [ 72.7151146, 19.7095188 ], [ 72.7153864, 19.7095224 ], [ 72.7153754, 19.7102945 ], [ 72.7156489, 19.7101688 ], [ 72.7161925, 19.7101756 ], [ 72.7168623, 19.7108282 ], [ 72.7170938, 19.7136624 ], [ 72.7174928, 19.7143105 ], [ 72.7218407, 19.7143659 ], [ 72.7232104, 19.713611 ], [ 72.7238984, 19.7129768 ], [ 72.7241921, 19.711436 ], [ 72.724471, 19.7109248 ], [ 72.7251599, 19.7102897 ], [ 72.7278919, 19.7092947 ], [ 72.7297923, 19.7094479 ], [ 72.7301813, 19.7107398 ], [ 72.7308556, 19.711134 ], [ 72.7310308, 19.7113531 ], [ 72.7311112, 19.712296 ], [ 72.729756, 19.7120214 ], [ 72.7294952, 19.7112459 ], [ 72.7289535, 19.71111 ], [ 72.7286854, 19.7108492 ], [ 72.7275984, 19.7108354 ], [ 72.7273247, 19.7109611 ], [ 72.7269021, 19.7119853 ], [ 72.7264877, 19.7124948 ], [ 72.7259424, 19.7126161 ], [ 72.7242992, 19.7134967 ], [ 72.7241556, 19.7140096 ], [ 72.7238802, 19.7142635 ], [ 72.7235975, 19.7150321 ], [ 72.723183, 19.7155417 ], [ 72.721661867939105, 19.715829772656253 ], [ 72.7212752, 19.715903 ], [ 72.7209999, 19.7161569 ], [ 72.7207281, 19.7161535 ], [ 72.7201883, 19.7158892 ], [ 72.7196447, 19.7158823 ], [ 72.7193694, 19.7161363 ], [ 72.7185504, 19.7163831 ], [ 72.7180016, 19.7167628 ], [ 72.7181259, 19.7175366 ], [ 72.7186621, 19.718058 ], [ 72.718912, 19.7196056 ], [ 72.7194446, 19.7203846 ], [ 72.7195663, 19.7214158 ], [ 72.7162941, 19.7221463 ], [ 72.7164077, 19.7236921 ], [ 72.7151596, 19.725478 ], [ 72.7137935, 19.7259752 ], [ 72.7134741, 19.7293173 ], [ 72.7140212, 19.7290669 ], [ 72.7138666, 19.7303519 ], [ 72.7111578, 19.7336118 ], [ 72.7118755, 19.7382481 ], [ 72.7120397, 19.7395477 ], [ 72.7126287, 19.7405495 ], [ 72.7125321, 19.7416341 ], [ 72.7128594, 19.743686 ], [ 72.7143399, 19.7492611 ], [ 72.7161853, 19.7524439 ], [ 72.7172668, 19.7531881 ], [ 72.7179298, 19.7538555 ], [ 72.7183429, 19.754013 ], [ 72.7193804, 19.7543331 ], [ 72.7206324, 19.7534395 ], [ 72.7220325, 19.7529043 ], [ 72.7229659, 19.7524893 ], [ 72.7236558, 19.7522046 ], [ 72.7245748, 19.7515947 ], [ 72.7253958, 19.7512186 ], [ 72.7264831, 19.7512324 ], [ 72.726753, 19.7513649 ], [ 72.7271749, 19.7503407 ], [ 72.7275886, 19.7499595 ], [ 72.7292302, 19.7492081 ], [ 72.729774, 19.749215 ], [ 72.7300439, 19.7493475 ], [ 72.7304657, 19.7483233 ], [ 72.7327893, 19.7474515 ], [ 72.7330647, 19.7471975 ], [ 72.7333365, 19.7472009 ], [ 72.7334701, 19.7473319 ], [ 72.7328392, 19.7535014 ], [ 72.7322847, 19.7542665 ], [ 72.7322775, 19.7547811 ], [ 72.7324121, 19.7549111 ], [ 72.7345829, 19.755196 ], [ 72.735132, 19.7548174 ], [ 72.7355175, 19.7563666 ], [ 72.7360503, 19.7571455 ], [ 72.7360429, 19.7576601 ], [ 72.7356303, 19.7580406 ], [ 72.7358966, 19.7584305 ], [ 72.7345411, 19.7581561 ], [ 72.7344121, 19.7576395 ], [ 72.7340119, 19.7571198 ], [ 72.7334665, 19.7572411 ], [ 72.7329284, 19.7568486 ], [ 72.7327993, 19.7563322 ], [ 72.7323992, 19.7558123 ], [ 72.7288674, 19.7556384 ], [ 72.7269702, 19.7552286 ], [ 72.7267092, 19.7544532 ], [ 72.7258919, 19.7545709 ], [ 72.7247901, 19.7555866 ], [ 72.7242446, 19.7557087 ], [ 72.7240936, 19.7567365 ], [ 72.7244964, 19.7571272 ], [ 72.7253119, 19.7571375 ], [ 72.7280046, 19.7589735 ], [ 72.7297581, 19.7598971 ], [ 72.7298836, 19.7606709 ], [ 72.7282544, 19.760521 ], [ 72.7279809, 19.7606467 ], [ 72.727808, 19.7632186 ], [ 72.7275325, 19.7634725 ], [ 72.7275289, 19.7637299 ], [ 72.7280579, 19.7647662 ], [ 72.7292726, 19.7654246 ], [ 72.7300771, 19.7662069 ], [ 72.7314327, 19.7664815 ], [ 72.7318345, 19.7668731 ], [ 72.7319528, 19.7681617 ], [ 72.7311427, 19.7677648 ], [ 72.730599, 19.7677578 ], [ 72.729778, 19.7681341 ], [ 72.7304315, 19.7699442 ], [ 72.731639, 19.7711173 ], [ 72.7321826, 19.7711241 ], [ 72.733121, 19.7720374 ], [ 72.733781, 19.7734609 ], [ 72.734053, 19.7734645 ], [ 72.7346039, 19.7729567 ], [ 72.7351493, 19.7728353 ], [ 72.7351567, 19.7723207 ], [ 72.7359722, 19.7723309 ], [ 72.7359649, 19.7728455 ], [ 72.7354194, 19.7729669 ], [ 72.7343228, 19.773597 ], [ 72.7343157, 19.7741116 ], [ 72.7335037, 19.773844 ], [ 72.7333601, 19.774357 ], [ 72.7329454, 19.7748665 ], [ 72.7321318, 19.774727 ], [ 72.7318581, 19.7748527 ], [ 72.7314644, 19.7738181 ], [ 72.7306634, 19.7727784 ], [ 72.7306744, 19.7720064 ], [ 72.7305425, 19.7717472 ], [ 72.7294606, 19.7713469 ], [ 72.7289224, 19.7709546 ], [ 72.7292087, 19.7699287 ], [ 72.7297524, 19.7699355 ], [ 72.7291015, 19.767868 ], [ 72.7287016, 19.7673483 ], [ 72.7270796, 19.7666838 ], [ 72.7262714, 19.7661585 ], [ 72.7243667, 19.7662636 ], [ 72.723716, 19.7641961 ], [ 72.7237379, 19.762652 ], [ 72.7234697, 19.7623912 ], [ 72.7236169, 19.7616208 ], [ 72.7238889, 19.7616244 ], [ 72.7238815, 19.7621391 ], [ 72.7241533, 19.7621425 ], [ 72.724296, 19.7616295 ], [ 72.7240571, 19.7593099 ], [ 72.7232673, 19.7574982 ], [ 72.7228674, 19.7569782 ], [ 72.7223255, 19.7568421 ], [ 72.7220573, 19.7565813 ], [ 72.7198936, 19.7557817 ], [ 72.7185345, 19.7557643 ], [ 72.7163675, 19.7552218 ], [ 72.7155593, 19.7546968 ], [ 72.715021, 19.7543043 ], [ 72.7150284, 19.7537896 ], [ 72.7144848, 19.7537826 ], [ 72.7143557, 19.7532663 ], [ 72.7140876, 19.7530054 ], [ 72.7135623, 19.7517117 ], [ 72.7132941, 19.7514509 ], [ 72.7133015, 19.7509363 ], [ 72.7130333, 19.7506755 ], [ 72.7129163, 19.7493868 ], [ 72.7123728, 19.74938 ], [ 72.7121229, 19.7478323 ], [ 72.7115793, 19.7478255 ], [ 72.71044, 19.7418909 ], [ 72.7101756, 19.7413727 ], [ 72.7096687, 19.7387923 ], [ 72.7091473, 19.7372413 ], [ 72.7088791, 19.7369805 ], [ 72.7087547, 19.7362066 ], [ 72.708483, 19.7362032 ], [ 72.7082002, 19.7369718 ], [ 72.7071167, 19.7367004 ], [ 72.7068559, 19.7359249 ], [ 72.7044117, 19.7357645 ], [ 72.7016791, 19.736759 ], [ 72.6995049, 19.736731 ], [ 72.6975182, 19.7355215 ], [ 72.6940785, 19.7360183 ], [ 72.693334, 19.7367333 ], [ 72.6925068, 19.7377199 ], [ 72.6911724, 19.7395844 ], [ 72.6900521, 19.7418864 ], [ 72.6883582, 19.7462402 ], [ 72.6878035, 19.7470051 ], [ 72.68694, 19.75034 ], [ 72.6863853, 19.751105 ], [ 72.6854361, 19.7603589 ], [ 72.6864788, 19.7634609 ], [ 72.6865856, 19.7655214 ], [ 72.6871329, 19.7652712 ], [ 72.6872535, 19.7663023 ], [ 72.6875215, 19.7665632 ], [ 72.6880207, 19.7696582 ], [ 72.6879502, 19.7745477 ], [ 72.6876523, 19.7763456 ], [ 72.687373, 19.7768569 ], [ 72.6869303, 19.7886909 ], [ 72.6865155, 19.7892005 ], [ 72.6870611, 19.7890784 ], [ 72.6873367, 19.7888245 ], [ 72.6878823, 19.7887032 ], [ 72.6882635, 19.7905098 ], [ 72.6887961, 19.7912889 ], [ 72.6888366, 19.7914584 ], [ 72.6883851, 19.791541 ], [ 72.6885094, 19.7923148 ], [ 72.688644, 19.7924448 ], [ 72.6891859, 19.7925809 ], [ 72.6890201, 19.7916369 ], [ 72.6891989, 19.7916798 ], [ 72.6898689, 19.7923324 ], [ 72.6899978, 19.7928489 ], [ 72.6905416, 19.7928559 ], [ 72.6906474, 19.7949164 ], [ 72.6903716, 19.7951702 ], [ 72.6902288, 19.7956832 ], [ 72.689685, 19.7956762 ], [ 72.6898167, 19.7959353 ], [ 72.68953, 19.796961 ], [ 72.6895153, 19.7979905 ], [ 72.6892395, 19.7982443 ], [ 72.6891838, 19.8021044 ], [ 72.6898436, 19.803528 ], [ 72.6903856, 19.8036642 ], [ 72.6903781, 19.8041789 ], [ 72.6914601, 19.8045784 ], [ 72.6933652, 19.8044749 ], [ 72.6933728, 19.8039602 ], [ 72.6939165, 19.8039672 ], [ 72.6935268, 19.8026752 ], [ 72.6927222, 19.8018927 ], [ 72.6919288, 19.800338 ], [ 72.6919473, 19.7990513 ], [ 72.6914183, 19.798015 ], [ 72.6925913, 19.7921103 ], [ 72.6932017, 19.7874851 ], [ 72.6926691, 19.786706 ], [ 72.6921329, 19.7861844 ], [ 72.6918183, 19.7797455 ], [ 72.6912745, 19.7797385 ], [ 72.6914248, 19.778711 ], [ 72.6918387, 19.7783297 ], [ 72.692926, 19.7783437 ], [ 72.693324, 19.7789928 ], [ 72.6933166, 19.7795074 ], [ 72.6930411, 19.7797612 ], [ 72.6927396, 19.7818166 ], [ 72.693276, 19.7823382 ], [ 72.6935366, 19.7831137 ], [ 72.6934922, 19.786202 ], [ 72.6940284, 19.7867236 ], [ 72.6945427, 19.7887894 ], [ 72.6945278, 19.7898187 ], [ 72.6942484, 19.7903299 ], [ 72.6942114, 19.7929033 ], [ 72.6944796, 19.7931642 ], [ 72.6944722, 19.7936788 ], [ 72.6941929, 19.7941901 ], [ 72.6941817, 19.7949621 ], [ 72.6947145, 19.795741 ], [ 72.6944091, 19.7980536 ], [ 72.6941335, 19.7983074 ], [ 72.6941224, 19.7990795 ], [ 72.6946551, 19.7998585 ], [ 72.694784, 19.8003751 ], [ 72.6969574, 19.8005312 ], [ 72.6974937, 19.801053 ], [ 72.6977657, 19.8010564 ], [ 72.6983131, 19.8008062 ], [ 72.7018496, 19.8007234 ], [ 72.702551, 19.7991882 ], [ 72.7029649, 19.7988069 ], [ 72.7032367, 19.7988103 ], [ 72.7062053, 19.8003928 ], [ 72.7089207, 19.800685 ], [ 72.7098627, 19.8013411 ], [ 72.7102452, 19.8031477 ], [ 72.7132323, 19.8034435 ], [ 72.7133752, 19.8029305 ], [ 72.7135134, 19.8028032 ], [ 72.7140571, 19.8028102 ], [ 72.7144591, 19.8032018 ], [ 72.7141615, 19.8049997 ], [ 72.7140224, 19.8052552 ], [ 72.7115733, 19.8053522 ], [ 72.7112977, 19.805606 ], [ 72.710482, 19.8055956 ], [ 72.7102083, 19.8057213 ], [ 72.7105826, 19.8080426 ], [ 72.7113688, 19.8101118 ], [ 72.7120397, 19.8107635 ], [ 72.7158428, 19.8110695 ], [ 72.716241, 19.8117185 ], [ 72.7166237, 19.8135251 ], [ 72.71933, 19.8144601 ], [ 72.7202648, 19.8156308 ], [ 72.7207976, 19.8164098 ], [ 72.720901, 19.8187277 ], [ 72.7214431, 19.8188629 ], [ 72.7223814, 19.8197761 ], [ 72.722646, 19.8202944 ], [ 72.722496, 19.8213219 ], [ 72.7222259, 19.8211895 ], [ 72.721138, 19.8211755 ], [ 72.7203168, 19.8215516 ], [ 72.719534, 19.819225 ], [ 72.7189902, 19.819218 ], [ 72.7184646, 19.8179243 ], [ 72.7168405, 19.8173889 ], [ 72.7168589, 19.8161021 ], [ 72.715231, 19.8158239 ], [ 72.7149702, 19.8150483 ], [ 72.7138861, 19.8147771 ], [ 72.7136032, 19.8155455 ], [ 72.7130594, 19.8155387 ], [ 72.7127984, 19.8147631 ], [ 72.711709, 19.8148774 ], [ 72.7111615, 19.8151279 ], [ 72.7103457, 19.8151173 ], [ 72.7092673, 19.8144605 ], [ 72.709282, 19.813431 ], [ 72.7087326, 19.8138098 ], [ 72.7068292, 19.8137852 ], [ 72.7062909, 19.8133926 ], [ 72.7067058, 19.8128833 ], [ 72.7070367, 19.8087693 ], [ 72.7067721, 19.8082511 ], [ 72.7061038, 19.8074703 ], [ 72.705562, 19.8073342 ], [ 72.7052938, 19.8070734 ], [ 72.7044799, 19.8069347 ], [ 72.7041968, 19.8077032 ], [ 72.7031055, 19.8079466 ], [ 72.7028559, 19.8063989 ], [ 72.7017738, 19.8059986 ], [ 72.7015019, 19.805995 ], [ 72.7004068, 19.8064957 ], [ 72.6993193, 19.8064817 ], [ 72.6990511, 19.8062208 ], [ 72.6985055, 19.8063429 ], [ 72.6980785, 19.8076244 ], [ 72.6975274, 19.808132 ], [ 72.6971089, 19.8088988 ], [ 72.696565, 19.8088918 ], [ 72.6963153, 19.8073443 ], [ 72.6955015, 19.8072046 ], [ 72.6952333, 19.8069438 ], [ 72.6944176, 19.8069332 ], [ 72.6930526, 19.8073021 ], [ 72.6928029, 19.8057546 ], [ 72.691719, 19.8054832 ], [ 72.6917117, 19.8059978 ], [ 72.6890057, 19.8050615 ], [ 72.6887376, 19.8048007 ], [ 72.6881955, 19.8046654 ], [ 72.6882067, 19.8038935 ], [ 72.6876629, 19.8038863 ], [ 72.6875637, 19.8013112 ], [ 72.6881373, 19.7992596 ], [ 72.6881781, 19.7964288 ], [ 72.688748, 19.7946344 ], [ 72.688631, 19.793346 ], [ 72.6880872, 19.793339 ], [ 72.6875212, 19.7948759 ], [ 72.686713, 19.7943507 ], [ 72.6870035, 19.7930676 ], [ 72.6861842, 19.7933142 ], [ 72.6862972, 19.7948601 ], [ 72.6857387, 19.7958824 ], [ 72.6854333, 19.798195 ], [ 72.684882, 19.7987026 ], [ 72.6845879, 19.8002432 ], [ 72.6843121, 19.800497 ], [ 72.6828969, 19.8043394 ], [ 72.6826211, 19.8045932 ], [ 72.6827502, 19.8051097 ], [ 72.6822046, 19.8052309 ], [ 72.6816552, 19.8056102 ], [ 72.6813683, 19.8066361 ], [ 72.6808245, 19.8066289 ], [ 72.6799789, 19.8086771 ], [ 72.6794352, 19.8086701 ], [ 72.6792577, 19.8114991 ], [ 72.678427, 19.8125178 ], [ 72.6774609, 19.8135348 ], [ 72.6766451, 19.813524 ], [ 72.676362, 19.8142925 ], [ 72.6758181, 19.8142855 ], [ 72.6753949, 19.8153095 ], [ 72.6752445, 19.8163371 ], [ 72.6768665, 19.8170012 ], [ 72.6772683, 19.817393 ], [ 72.6776317, 19.8204864 ], [ 72.6789971, 19.8201176 ], [ 72.6792726, 19.8198638 ], [ 72.6795446, 19.8198674 ], [ 72.6799464, 19.820259 ], [ 72.6800753, 19.8207756 ], [ 72.6803473, 19.8207791 ], [ 72.6803584, 19.8200071 ], [ 72.6806304, 19.8200107 ], [ 72.6806192, 19.8207825 ], [ 72.6811668, 19.8205323 ], [ 72.6807398, 19.8218137 ], [ 72.6807249, 19.822843 ], [ 72.6809893, 19.8233613 ], [ 72.6808389, 19.8243889 ], [ 72.6803006, 19.8239954 ], [ 72.6797585, 19.82386 ], [ 72.6798978, 19.8236045 ], [ 72.6799052, 19.8230899 ], [ 72.6797735, 19.8228307 ], [ 72.678954, 19.8230774 ], [ 72.6792148, 19.823853 ], [ 72.6781307, 19.8235814 ], [ 72.6782626, 19.8238406 ], [ 72.678255, 19.8243552 ], [ 72.6778402, 19.8248646 ], [ 72.6773, 19.8246002 ], [ 72.6773076, 19.8240855 ], [ 72.6767599, 19.8243357 ], [ 72.6765068, 19.8230456 ], [ 72.6759629, 19.8230384 ], [ 72.6759553, 19.8235531 ], [ 72.6756835, 19.8235497 ], [ 72.675562, 19.8225185 ], [ 72.6758413, 19.8220075 ], [ 72.6757172, 19.8212337 ], [ 72.6765329, 19.8212443 ], [ 72.676019, 19.8191785 ], [ 72.6765627, 19.8191855 ], [ 72.676317, 19.8173805 ], [ 72.6744081, 19.8177413 ], [ 72.6741324, 19.8179952 ], [ 72.6719459, 19.8187389 ], [ 72.6716701, 19.8189925 ], [ 72.6692154, 19.8194754 ], [ 72.6673008, 19.8202225 ], [ 72.6667011, 19.8204263 ], [ 72.6663392, 19.8208538 ], [ 72.664853, 19.8212095 ], [ 72.6640332, 19.8219848 ], [ 72.6637112, 19.8225403 ], [ 72.6638932, 19.8235104 ], [ 72.664271, 19.8245157 ], [ 72.6634909, 19.8249393 ], [ 72.662502, 19.8251126 ], [ 72.6612133, 19.8251092 ], [ 72.6607155, 19.8238644 ], [ 72.6600664, 19.8219898 ], [ 72.6602899, 19.8219059 ], [ 72.6601407, 19.8215866 ], [ 72.6599212, 19.8216098 ], [ 72.6597521, 19.8210579 ], [ 72.6599201, 19.8209464 ], [ 72.6598511, 19.8207361 ], [ 72.6596531, 19.8207277 ], [ 72.6587215, 19.8180918 ], [ 72.6575222, 19.8148361 ], [ 72.6573987, 19.8147623 ], [ 72.6573849, 19.8148987 ], [ 72.6581027, 19.8168852 ], [ 72.6596204, 19.8212859 ], [ 72.6594253, 19.8213674 ], [ 72.6595542, 19.8216517 ], [ 72.6597222, 19.8216133 ], [ 72.6605383, 19.8239287 ], [ 72.6595443, 19.8250007 ], [ 72.6591141, 19.824891 ], [ 72.6587291, 19.8251971 ], [ 72.6580945, 19.8254015 ], [ 72.6575536, 19.8259364 ], [ 72.6571937, 19.8260211 ], [ 72.6575379, 19.8263301 ], [ 72.6574645, 19.8264626 ], [ 72.6581936, 19.8270965 ], [ 72.6562566, 19.8263049 ], [ 72.6536421, 19.8252109 ], [ 72.6536381, 19.8252929 ], [ 72.6586662, 19.8276036 ], [ 72.6593817, 19.8263488 ], [ 72.6596552, 19.8264634 ], [ 72.6597292, 19.8265683 ], [ 72.6596174, 19.8267384 ], [ 72.6594332, 19.8267775 ], [ 72.6593578, 19.8269054 ], [ 72.6595271, 19.8270072 ], [ 72.6594065, 19.8272279 ], [ 72.659186, 19.8271881 ], [ 72.6589295, 19.8276866 ], [ 72.6590343, 19.8277512 ], [ 72.6588127, 19.8282475 ], [ 72.6586298, 19.828203 ], [ 72.6583861, 19.8287814 ], [ 72.6585655, 19.8288532 ], [ 72.6584689, 19.8290492 ], [ 72.6582378, 19.8289785 ], [ 72.6581666, 19.8290902 ], [ 72.6582588, 19.8292511 ], [ 72.6581212, 19.8295073 ], [ 72.6577967, 19.8294082 ], [ 72.6583807, 19.8280755 ], [ 72.6522559, 19.8251372 ], [ 72.6520735, 19.8251596 ], [ 72.6553623, 19.8267858 ], [ 72.6552795, 19.8271791 ], [ 72.6557669, 19.8277929 ], [ 72.6557825, 19.8281031 ], [ 72.6555358, 19.8285402 ], [ 72.6552099, 19.8286869 ], [ 72.6555961, 19.8295526 ], [ 72.6548472, 19.8310816 ], [ 72.6528669, 19.8317641 ], [ 72.6528446, 19.8319225 ], [ 72.6545535, 19.8326575 ], [ 72.6543545, 19.8330858 ], [ 72.6526219, 19.8322238 ], [ 72.652437, 19.8324091 ], [ 72.6532571, 19.8344549 ], [ 72.6530411, 19.8349574 ], [ 72.6529886, 19.8354152 ], [ 72.6522774, 19.8367959 ], [ 72.6519978, 19.837307 ], [ 72.6517183, 19.8378182 ], [ 72.6513389, 19.8389869 ], [ 72.6511297, 19.8394203 ], [ 72.6509591, 19.8397838 ], [ 72.6505589, 19.8408831 ], [ 72.6505529, 19.840983 ], [ 72.6506483, 19.8409859 ], [ 72.6507171, 19.8408216 ], [ 72.6510557, 19.8400447 ], [ 72.651704, 19.8385376 ], [ 72.6518212, 19.838209 ], [ 72.6519018, 19.8379967 ], [ 72.6520553, 19.8376595 ], [ 72.6524765, 19.8367896 ], [ 72.6529612, 19.8357821 ], [ 72.6535784, 19.8351504 ], [ 72.653595, 19.8363904 ], [ 72.6537349, 19.8365172 ], [ 72.6541484, 19.8368079 ], [ 72.654531, 19.8369307 ], [ 72.6549017, 19.8368174 ], [ 72.6549686, 19.8366958 ], [ 72.6553609, 19.836925 ], [ 72.6558005, 19.8372909 ], [ 72.6558214, 19.8385747 ], [ 72.6555058, 19.8395101 ], [ 72.6552433, 19.8407753 ], [ 72.6555486, 19.8413719 ], [ 72.6561407, 19.8430909 ], [ 72.6567467, 19.8435556 ], [ 72.6567572, 19.8447532 ], [ 72.6564482, 19.8462051 ], [ 72.6568415, 19.8472399 ], [ 72.6573836, 19.8473752 ], [ 72.6581919, 19.8479006 ], [ 72.6592798, 19.8479148 ], [ 72.660088, 19.8484402 ], [ 72.6611759, 19.8484546 ], [ 72.6622751, 19.8476969 ], [ 72.6639145, 19.8472036 ], [ 72.6660901, 19.8472321 ], [ 72.6663584, 19.847493 ], [ 72.6674442, 19.8476362 ], [ 72.6671836, 19.8468608 ], [ 72.6678555, 19.8473843 ], [ 72.6685229, 19.8482934 ], [ 72.6694686, 19.8486924 ], [ 72.6694611, 19.849207 ], [ 72.6693218, 19.8494625 ], [ 72.6698638, 19.8495979 ], [ 72.670132, 19.8498589 ], [ 72.6709442, 19.8501269 ], [ 72.6720209, 19.8509129 ], [ 72.6725648, 19.8509201 ], [ 72.672833, 19.8511809 ], [ 72.6733751, 19.8513172 ], [ 72.6735181, 19.8508042 ], [ 72.6744798, 19.850173 ], [ 72.6747517, 19.8501766 ], [ 72.6752883, 19.8506982 ], [ 72.675834, 19.8505771 ], [ 72.6758266, 19.8510919 ], [ 72.6763705, 19.8510989 ], [ 72.6763518, 19.8523856 ], [ 72.677706, 19.8527889 ], [ 72.6782426, 19.8533106 ], [ 72.6787865, 19.8533178 ], [ 72.6789237, 19.8531913 ], [ 72.6789351, 19.8524193 ], [ 72.6788069, 19.8519029 ], [ 72.6793511, 19.8519099 ], [ 72.6790865, 19.8513917 ], [ 72.6785425, 19.8513847 ], [ 72.6785501, 19.85087 ], [ 72.6777342, 19.8508592 ], [ 72.6777415, 19.8503446 ], [ 72.6780116, 19.8504763 ], [ 72.6785556, 19.8504835 ], [ 72.6789687, 19.8501032 ], [ 72.6791165, 19.8493331 ], [ 72.6797884, 19.8498566 ], [ 72.6799137, 19.8506304 ], [ 72.6804558, 19.8507655 ], [ 72.6805894, 19.8508965 ], [ 72.6809829, 19.8519311 ], [ 72.6801632, 19.8521779 ], [ 72.6801556, 19.8526925 ], [ 72.6815193, 19.8524529 ], [ 72.6812399, 19.852964 ], [ 72.6806958, 19.852957 ], [ 72.6806884, 19.8534716 ], [ 72.68151, 19.8530959 ], [ 72.681782, 19.8530993 ], [ 72.6821838, 19.8534911 ], [ 72.6823129, 19.8540076 ], [ 72.6820426, 19.8538749 ], [ 72.6809566, 19.8537324 ], [ 72.6812212, 19.8542507 ], [ 72.6806773, 19.8542437 ], [ 72.6806735, 19.8545009 ], [ 72.6812174, 19.8545081 ], [ 72.6812137, 19.8547653 ], [ 72.6790398, 19.8546079 ], [ 72.678764, 19.8548617 ], [ 72.6784921, 19.8548583 ], [ 72.6782237, 19.8545973 ], [ 72.6765975, 19.8541906 ], [ 72.6764722, 19.8534168 ], [ 72.676204, 19.8531558 ], [ 72.6760761, 19.8526394 ], [ 72.6752639, 19.8523714 ], [ 72.6750107, 19.8510811 ], [ 72.6739266, 19.8508097 ], [ 72.6737788, 19.8515799 ], [ 72.673503, 19.8518337 ], [ 72.6732199, 19.8526022 ], [ 72.6731936, 19.8544036 ], [ 72.6735794, 19.8559528 ], [ 72.6741235, 19.85596 ], [ 72.6742363, 19.8575056 ], [ 72.6746261, 19.8587978 ], [ 72.6751702, 19.8588048 ], [ 72.6752906, 19.859836 ], [ 72.6755588, 19.8600968 ], [ 72.676356, 19.8613941 ], [ 72.6766056, 19.8629416 ], [ 72.6767402, 19.8630717 ], [ 72.6786366, 19.8636113 ], [ 72.6794452, 19.8641365 ], [ 72.683238, 19.8652155 ], [ 72.68364, 19.8656071 ], [ 72.6841653, 19.866901 ], [ 72.6851084, 19.8675563 ], [ 72.6856525, 19.8675633 ], [ 72.686073, 19.8666683 ], [ 72.6860917, 19.8653816 ], [ 72.6858309, 19.8646062 ], [ 72.6870555, 19.864622 ], [ 72.6872325, 19.864712 ], [ 72.6873125, 19.8656549 ], [ 72.6874896, 19.8657449 ], [ 72.6871482, 19.8666615 ], [ 72.6868756, 19.8671261 ], [ 72.6866816, 19.8675463 ], [ 72.6866063, 19.8677093 ], [ 72.6859851, 19.8682875 ], [ 72.6855174, 19.8683626 ], [ 72.6851976, 19.8686108 ], [ 72.6848597, 19.8691903 ], [ 72.6845124, 19.8689882 ], [ 72.6841684, 19.8687589 ], [ 72.6838282, 19.8684584 ], [ 72.6837367, 19.8677368 ], [ 72.6820356, 19.8670057 ], [ 72.6816322, 19.8663822 ], [ 72.681614, 19.8654147 ], [ 72.6807398, 19.8653477 ], [ 72.6793231, 19.8658926 ], [ 72.6787448, 19.8669061 ], [ 72.6786616, 19.867781 ], [ 72.6786916, 19.8691461 ], [ 72.6788205, 19.8696627 ], [ 72.6786482, 19.8701653 ], [ 72.6789041, 19.8711092 ], [ 72.679094, 19.8717358 ], [ 72.6791241, 19.8721005 ], [ 72.6791772, 19.8728467 ], [ 72.679565, 19.8737543 ], [ 72.6796669, 19.874449 ], [ 72.6799121, 19.8755604 ], [ 72.6798643, 19.8771147 ], [ 72.680345, 19.8809588 ], [ 72.6802404, 19.8818361 ], [ 72.6803611, 19.8826039 ], [ 72.6806476, 19.8834388 ], [ 72.6813594, 19.8884611 ], [ 72.6815242, 19.8895166 ], [ 72.6812693, 19.8899109 ], [ 72.6819207, 19.8902939 ], [ 72.681641, 19.890805 ], [ 72.6817701, 19.8913215 ], [ 72.6812259, 19.8913143 ], [ 72.6811923, 19.8936303 ], [ 72.6803762, 19.8936197 ], [ 72.6805041, 19.8941363 ], [ 72.6811736, 19.894917 ], [ 72.6803537, 19.8951639 ], [ 72.6802021, 19.8961913 ], [ 72.6799226, 19.8967025 ], [ 72.6794813, 19.8990132 ], [ 72.6819241, 19.8994307 ], [ 72.6828515, 19.9011162 ], [ 72.6836527, 19.9021561 ], [ 72.6839022, 19.9037038 ], [ 72.6836264, 19.9039575 ], [ 72.6833431, 19.9047259 ], [ 72.6833168, 19.9065273 ], [ 72.6828942, 19.9075515 ], [ 72.6826223, 19.9075479 ], [ 72.6825119, 19.9057447 ], [ 72.6827952, 19.9049762 ], [ 72.6828215, 19.9031748 ], [ 72.6825531, 19.902914 ], [ 72.6821643, 19.901622 ], [ 72.6813518, 19.901354 ], [ 72.6814911, 19.9010985 ], [ 72.6815024, 19.9003264 ], [ 72.6813705, 19.9000673 ], [ 72.6797419, 19.8997887 ], [ 72.6793184, 19.9008127 ], [ 72.6786276, 19.9015759 ], [ 72.6778113, 19.9015653 ], [ 72.6775242, 19.902591 ], [ 72.6769801, 19.902584 ], [ 72.676836, 19.9030968 ], [ 72.6762845, 19.9036044 ], [ 72.6759937, 19.9048875 ], [ 72.6760738, 19.9087494 ], [ 72.6766215, 19.9084991 ], [ 72.6764775, 19.9090119 ], [ 72.6762018, 19.9092657 ], [ 72.6765576, 19.9128737 ], [ 72.6768298, 19.9128773 ], [ 72.6768411, 19.9121053 ], [ 72.6771131, 19.9121089 ], [ 72.6773401, 19.9152005 ], [ 72.6767997, 19.9149361 ], [ 72.6768977, 19.9175112 ], [ 72.6763422, 19.9182761 ], [ 72.6752199, 19.9205778 ], [ 72.6752163, 19.9208352 ], [ 72.6754807, 19.9213534 ], [ 72.6751898, 19.9226365 ], [ 72.6747746, 19.9231459 ], [ 72.6742286, 19.9232668 ], [ 72.6734029, 19.9239 ], [ 72.6732588, 19.9244129 ], [ 72.6718795, 19.9256817 ], [ 72.6715922, 19.9267076 ], [ 72.6711772, 19.9272169 ], [ 72.6695425, 19.9273237 ], [ 72.6681745, 19.9278204 ], [ 72.6676229, 19.9283281 ], [ 72.6668028, 19.9285745 ], [ 72.6662509, 19.9290822 ], [ 72.6648848, 19.9294507 ], [ 72.664834986517036, 19.929627845312503 ], [ 72.6647406, 19.9299635 ], [ 72.6644647, 19.9302173 ], [ 72.6641511, 19.9330444 ], [ 72.6646726, 19.9345955 ], [ 72.6653477, 19.9349901 ], [ 72.6683333, 19.9355441 ], [ 72.6696826, 19.9363339 ], [ 72.6707597, 19.9371202 ], [ 72.6715648, 19.9379028 ], [ 72.6723736, 19.9384282 ], [ 72.6745431, 19.9389714 ], [ 72.6750797, 19.9394933 ], [ 72.6765665, 19.9401566 ], [ 72.6766918, 19.9409304 ], [ 72.6791277, 19.9418627 ], [ 72.6804771, 19.9426524 ], [ 72.681286, 19.9431778 ], [ 72.681688, 19.9435696 ], [ 72.6824818, 19.9451243 ], [ 72.6830186, 19.945646 ], [ 72.6835367, 19.9474545 ], [ 72.684338, 19.9484944 ], [ 72.6854115, 19.949538 ], [ 72.6856612, 19.9510856 ], [ 72.6885761, 19.9565286 ], [ 72.6891129, 19.9570504 ], [ 72.6895123, 19.9576987 ], [ 72.6919468, 19.9587599 ], [ 72.6922152, 19.9590207 ], [ 72.6935648, 19.9598104 ], [ 72.6951902, 19.9603464 ], [ 72.696551, 19.960364 ], [ 72.6973732, 19.959989 ], [ 72.6975013, 19.9605055 ], [ 72.7003427, 19.9617002 ], [ 72.7014202, 19.9624862 ], [ 72.7031645, 19.9641823 ], [ 72.7034293, 19.9647006 ], [ 72.704503, 19.965744 ], [ 72.7046321, 19.9662604 ], [ 72.7057152, 19.9666601 ], [ 72.7065206, 19.9674426 ], [ 72.7070613, 19.967707 ], [ 72.7086907, 19.9679854 ], [ 72.7100403, 19.968775 ], [ 72.710857, 19.9687856 ], [ 72.7111254, 19.9690464 ], [ 72.7138472, 19.9690816 ], [ 72.7143953, 19.9688312 ], [ 72.717117, 19.9688663 ], [ 72.7196901, 19.9684037 ], [ 72.7216247, 19.9674498 ], [ 72.7236227, 19.9654825 ], [ 72.7279676, 19.961041 ], [ 72.7302827, 19.9589245 ], [ 72.7311073, 19.957136 ], [ 72.7314561, 19.9533799 ], [ 72.7316464, 19.9503988 ], [ 72.7317098, 19.9478052 ], [ 72.7324393, 19.9459569 ], [ 72.7338664, 19.9440787 ], [ 72.7358644, 19.9419024 ], [ 72.7403361, 19.940859 ], [ 72.742285, 19.9409537 ], [ 72.7436458, 19.94115 ], [ 72.7441864, 19.9414143 ], [ 72.7450029, 19.9414246 ], [ 72.7452712, 19.9416855 ], [ 72.7477097, 19.9424885 ], [ 72.750979, 19.9422725 ], [ 72.7511164, 19.9421461 ], [ 72.7512603, 19.9416331 ], [ 72.7518063, 19.9415108 ], [ 72.7524954, 19.9408765 ], [ 72.7527783, 19.9401079 ], [ 72.7536093, 19.9390888 ], [ 72.7536167, 19.9385741 ], [ 72.7538925, 19.9383203 ], [ 72.7539288, 19.9357467 ], [ 72.7534283, 19.9326516 ], [ 72.7533217, 19.9305912 ], [ 72.748966, 19.9306643 ], [ 72.7486957, 19.9305326 ], [ 72.748593212894463, 19.929665789451914 ], [ 72.7485738, 19.9295016 ], [ 72.749412, 19.9279678 ], [ 72.7489078, 19.92513 ], [ 72.7489297, 19.9235861 ], [ 72.7494812, 19.9230782 ], [ 72.7496432, 19.9212784 ], [ 72.7491009, 19.9211425 ], [ 72.748564, 19.9206208 ], [ 72.7466683, 19.9199539 ], [ 72.7473699, 19.9184182 ], [ 72.7480562, 19.9180404 ], [ 72.7486005, 19.9180474 ], [ 72.7488689, 19.9183082 ], [ 72.7499573, 19.918322 ], [ 72.7504943, 19.9188435 ], [ 72.7523916, 19.9193823 ], [ 72.7537413, 19.9201716 ], [ 72.7545595, 19.9200537 ], [ 72.7545666, 19.919539 ], [ 72.7551127, 19.9194167 ], [ 72.7558016, 19.9187824 ], [ 72.7563567, 19.9180172 ], [ 72.7569117, 19.9172521 ], [ 72.7569189, 19.9167373 ], [ 72.7571947, 19.9164834 ], [ 72.7577607, 19.9149461 ], [ 72.7580365, 19.9146923 ], [ 72.7580437, 19.9141776 ], [ 72.7575141, 19.9131414 ], [ 72.7573893, 19.9123676 ], [ 72.7565766, 19.9121 ], [ 72.7565802, 19.9118426 ], [ 72.7571246, 19.9118494 ], [ 72.757554, 19.9103105 ], [ 72.7578297, 19.9100565 ], [ 72.757855, 19.9082551 ], [ 72.7570533, 19.9072155 ], [ 72.7567957, 19.9061826 ], [ 72.7570932, 19.9043846 ], [ 72.7573689, 19.9041306 ], [ 72.7573761, 19.903616 ], [ 72.7568429, 19.9028371 ], [ 72.7556371, 19.9015349 ], [ 72.755093, 19.9015279 ], [ 72.7548318, 19.9007524 ], [ 72.7556498, 19.9006337 ], [ 72.7570284, 19.899364 ], [ 72.7578446, 19.8993744 ], [ 72.7581149, 19.8995069 ], [ 72.7579892, 19.8987331 ], [ 72.7577207, 19.8984723 ], [ 72.7577715, 19.8948694 ], [ 72.7572383, 19.8940905 ], [ 72.7565948, 19.8915084 ], [ 72.7571408, 19.8913861 ], [ 72.7572782, 19.8912597 ], [ 72.7574292, 19.8902319 ], [ 72.7587895, 19.8902491 ], [ 72.7585428, 19.8884444 ], [ 72.758269, 19.8885691 ], [ 72.7571824, 19.8884272 ], [ 72.7572041, 19.886883 ], [ 72.7566619, 19.8867469 ], [ 72.7563935, 19.8864863 ], [ 72.7553107, 19.886087 ], [ 72.7553253, 19.8850575 ], [ 72.7558694, 19.8850645 ], [ 72.7561595, 19.8837812 ], [ 72.757244, 19.8840522 ], [ 72.757556, 19.8812247 ], [ 72.7582283, 19.8817481 ], [ 72.758354, 19.8825219 ], [ 72.7588962, 19.8826568 ], [ 72.7595668, 19.8833092 ], [ 72.7596961, 19.8838256 ], [ 72.7602383, 19.8839607 ], [ 72.7611629, 19.8859032 ], [ 72.7619284, 19.8895166 ], [ 72.7623334, 19.8897789 ], [ 72.76291, 19.8874697 ], [ 72.7637261, 19.8874799 ], [ 72.7632236, 19.894166 ], [ 72.7630845, 19.8944215 ], [ 72.761454, 19.8942718 ], [ 72.7609061, 19.8945224 ], [ 72.7600809, 19.8951559 ], [ 72.7607462, 19.8961939 ], [ 72.7614177, 19.8968454 ], [ 72.7625043, 19.8969883 ], [ 72.762261, 19.8949259 ], [ 72.763625, 19.8946857 ], [ 72.7632878, 19.8993147 ], [ 72.7634232, 19.9003517 ], [ 72.7634948, 19.9039503 ], [ 72.7643111, 19.9039607 ], [ 72.7641799, 19.8939204 ], [ 72.7648524, 19.8944438 ], [ 72.7653784, 19.8957373 ], [ 72.7659153, 19.8962589 ], [ 72.7656035, 19.8990864 ], [ 72.765872, 19.8993472 ], [ 72.7660013, 19.8998635 ], [ 72.7670841, 19.9002627 ], [ 72.7672179, 19.9003937 ], [ 72.767454, 19.9029705 ], [ 72.7683977, 19.9036254 ], [ 72.7696054, 19.9047993 ], [ 72.769598, 19.9053139 ], [ 72.7694589, 19.9055696 ], [ 72.7689129, 19.905691 ], [ 72.7672678, 19.9065717 ], [ 72.7671132, 19.9078567 ], [ 72.7677885, 19.908251 ], [ 72.7683255, 19.9087724 ], [ 72.7696787, 19.9093043 ], [ 72.7706178, 19.9102173 ], [ 72.7707435, 19.9109911 ], [ 72.7691073, 19.9112279 ], [ 72.7692285, 19.9122591 ], [ 72.7696318, 19.9126498 ], [ 72.7723364, 19.9138426 ], [ 72.7723328, 19.9140998 ], [ 72.7712391, 19.9144717 ], [ 72.7706895, 19.9148514 ], [ 72.7704065, 19.9156201 ], [ 72.7685001, 19.9157244 ], [ 72.7679594, 19.9154602 ], [ 72.7668855, 19.9144171 ], [ 72.7647069, 19.9145188 ], [ 72.7644394, 19.904477 ], [ 72.7643073, 19.9042179 ], [ 72.7634912, 19.9042077 ], [ 72.7635725, 19.9080697 ], [ 72.7634332, 19.9083253 ], [ 72.7609826, 19.9084228 ], [ 72.7598889, 19.9087955 ], [ 72.7600172, 19.9093118 ], [ 72.7597415, 19.9095659 ], [ 72.759161, 19.9121325 ], [ 72.7591357, 19.913934 ], [ 72.7588382, 19.915732 ], [ 72.7585589, 19.9162432 ], [ 72.7585443, 19.9172727 ], [ 72.7582614, 19.9180412 ], [ 72.7582504, 19.9188133 ], [ 72.7586536, 19.9192041 ], [ 72.7597403, 19.9193468 ], [ 72.759461, 19.9198582 ], [ 72.7605475, 19.9200002 ], [ 72.7613566, 19.920525 ], [ 72.7629837, 19.9209321 ], [ 72.7631266, 19.9204192 ], [ 72.7635388, 19.9201669 ], [ 72.7628363, 19.9217025 ], [ 72.7620093, 19.9224642 ], [ 72.7618664, 19.9229773 ], [ 72.762416, 19.9225976 ], [ 72.7629603, 19.9226044 ], [ 72.7630939, 19.9227352 ], [ 72.7631238, 19.9236768 ], [ 72.7629439, 19.923763 ], [ 72.7628335, 19.9249601 ], [ 72.7626538, 19.9250463 ], [ 72.7625542, 19.9254713 ], [ 72.7623744, 19.9255575 ], [ 72.7622748, 19.9259826 ], [ 72.7620951, 19.9260688 ], [ 72.7619881, 19.9270085 ], [ 72.7618084, 19.9270949 ], [ 72.761698, 19.928292 ], [ 72.7615181, 19.9283782 ], [ 72.7614077, 19.9295753 ], [ 72.7612279, 19.9296615 ], [ 72.761202739753401, 19.929827845312502 ], [ 72.7611247, 19.9303438 ], [ 72.7609448, 19.9304301 ], [ 72.7608416, 19.9311124 ], [ 72.7606619, 19.9311986 ], [ 72.7605623, 19.9316237 ], [ 72.7603825, 19.93171 ], [ 72.7602612, 19.933679 ], [ 72.7600813, 19.9337654 ], [ 72.7599817, 19.9341903 ], [ 72.7598019, 19.9342767 ], [ 72.7597023, 19.9347017 ], [ 72.7595226, 19.9347879 ], [ 72.759412, 19.935985 ], [ 72.7592323, 19.9360712 ], [ 72.7591217, 19.9372683 ], [ 72.758942, 19.9373545 ], [ 72.7588352, 19.9382942 ], [ 72.7586553, 19.9383804 ], [ 72.7585449, 19.9395775 ], [ 72.758365, 19.9396637 ], [ 72.7580892, 19.9399177 ], [ 72.7579896, 19.9403426 ], [ 72.7578099, 19.940429 ], [ 72.7577917, 19.9417157 ], [ 72.7580639, 19.9417191 ], [ 72.7581733, 19.9405212 ], [ 72.7583542, 19.9404358 ], [ 72.7584529, 19.9400098 ], [ 72.7586335, 19.9399246 ], [ 72.7587286, 19.939756 ], [ 72.7589093, 19.9396707 ], [ 72.7590189, 19.9384727 ], [ 72.7591996, 19.9383874 ], [ 72.7593054, 19.9374468 ], [ 72.7594863, 19.9373613 ], [ 72.7595957, 19.9361635 ], [ 72.7597766, 19.936078 ], [ 72.759886, 19.9348801 ], [ 72.7600667, 19.9347947 ], [ 72.7601654, 19.9343687 ], [ 72.7603463, 19.9342835 ], [ 72.7604449, 19.9338575 ], [ 72.7606256, 19.9337722 ], [ 72.760746, 19.9318021 ], [ 72.7609267, 19.9317168 ], [ 72.7610253, 19.9312908 ], [ 72.7612062, 19.9312056 ], [ 72.7613085, 19.9305222 ], [ 72.7614891, 19.9304369 ], [ 72.7615914, 19.9297537 ], [ 72.7617721, 19.9296683 ], [ 72.7618817, 19.9284704 ], [ 72.7620624, 19.928385 ], [ 72.7621718, 19.9271871 ], [ 72.7623527, 19.9271017 ], [ 72.7624585, 19.926161 ], [ 72.7626392, 19.9260758 ], [ 72.7627379, 19.9256498 ], [ 72.7629185, 19.9255643 ], [ 72.7630172, 19.9251385 ], [ 72.7631979, 19.9250531 ], [ 72.7633075, 19.9238552 ], [ 72.7634882, 19.9237698 ], [ 72.7636383, 19.9227422 ], [ 72.7637766, 19.9226148 ], [ 72.7640488, 19.9226182 ], [ 72.7647122, 19.9237853 ], [ 72.7647014, 19.9245573 ], [ 72.7630469, 19.9260809 ], [ 72.7630397, 19.9265955 ], [ 72.7637114, 19.927247 ], [ 72.7642557, 19.9272538 ], [ 72.7648034, 19.9270034 ], [ 72.7650756, 19.9270068 ], [ 72.7665519, 19.9284415 ], [ 72.766624228134475, 19.929827845312502 ], [ 72.7666594, 19.930502 ], [ 72.7644806, 19.9306029 ], [ 72.7642068, 19.9307286 ], [ 72.7643315, 19.9315023 ], [ 72.7645999, 19.9317632 ], [ 72.7645927, 19.9322778 ], [ 72.7644536, 19.9325335 ], [ 72.7641831, 19.9324008 ], [ 72.763639, 19.932394 ], [ 72.7625413, 19.9330242 ], [ 72.7621181, 19.9340484 ], [ 72.7620964, 19.9355925 ], [ 72.7623578, 19.936368 ], [ 72.7635738, 19.9370264 ], [ 72.7641108, 19.9375479 ], [ 72.7651939, 19.937948 ], [ 72.7650429, 19.9389758 ], [ 72.7651777, 19.9391056 ], [ 72.7670826, 19.9391296 ], [ 72.7673583, 19.9388758 ], [ 72.7676305, 19.9388792 ], [ 72.7678991, 19.93914 ], [ 72.7684432, 19.9391468 ], [ 72.7700833, 19.9386526 ], [ 72.7708998, 19.9386628 ], [ 72.7710336, 19.9387936 ], [ 72.7711629, 19.9393101 ], [ 72.7697949, 19.9398078 ], [ 72.7700454, 19.9413553 ], [ 72.7714007, 19.9417579 ], [ 72.7715345, 19.9418886 ], [ 72.7716602, 19.9426624 ], [ 72.7697534, 19.9427667 ], [ 72.7692109, 19.9426318 ], [ 72.7692, 19.9434039 ], [ 72.7681096, 19.9435184 ], [ 72.7675598, 19.9438979 ], [ 72.7672769, 19.9446666 ], [ 72.7661847, 19.9449102 ], [ 72.7667199, 19.94556 ], [ 72.7680735, 19.9460918 ], [ 72.7684721, 19.9467408 ], [ 72.7685653, 19.9498308 ], [ 72.7691077, 19.9499657 ], [ 72.7700437, 19.9511362 ], [ 72.7696033, 19.9534473 ], [ 72.7687904, 19.9531797 ], [ 72.768794, 19.9529223 ], [ 72.7693383, 19.9529293 ], [ 72.7693419, 19.9526718 ], [ 72.7677036, 19.9530368 ], [ 72.7674277, 19.9532908 ], [ 72.7652523, 19.9531351 ], [ 72.7649909, 19.9523596 ], [ 72.7630877, 19.9522065 ], [ 72.7628119, 19.9524605 ], [ 72.7625398, 19.9524571 ], [ 72.7620008, 19.9520646 ], [ 72.7618715, 19.9515482 ], [ 72.7620227, 19.9505205 ], [ 72.7614765, 19.9506418 ], [ 72.760925, 19.9511496 ], [ 72.7601102, 19.9510111 ], [ 72.7598526, 19.9499784 ], [ 72.7590361, 19.949968 ], [ 72.7590724, 19.9473946 ], [ 72.7574396, 19.947374 ], [ 72.7573175, 19.9463428 ], [ 72.757049, 19.946082 ], [ 72.7569571, 19.9429922 ], [ 72.7545024, 19.9433468 ], [ 72.7514905, 19.9445955 ], [ 72.7501261, 19.9448357 ], [ 72.7498503, 19.9450895 ], [ 72.7482174, 19.9450689 ], [ 72.7479435, 19.9451946 ], [ 72.7475701, 19.9442624 ], [ 72.7442568, 19.9435323 ], [ 72.7413074, 19.9434131 ], [ 72.7411964, 19.9434326 ], [ 72.7389288, 19.9438304 ], [ 72.7365185, 19.9455894 ], [ 72.7351865, 19.9481234 ], [ 72.7349962, 19.9511045 ], [ 72.7346791, 19.9564405 ], [ 72.7338862, 19.9583186 ], [ 72.7328714, 19.9598985 ], [ 72.7304928, 19.9618361 ], [ 72.729034, 19.9633265 ], [ 72.725704, 19.96744 ], [ 72.7232302, 19.9698544 ], [ 72.721486, 19.9709275 ], [ 72.7188854, 19.9716429 ], [ 72.7169191, 19.9723582 ], [ 72.7163542, 19.9730233 ], [ 72.7163675, 19.9736187 ], [ 72.7168861, 19.9754271 ], [ 72.7171545, 19.9756881 ], [ 72.7176803, 19.9769818 ], [ 72.7179488, 19.9772426 ], [ 72.7187247, 19.9800838 ], [ 72.7189932, 19.9803447 ], [ 72.7192505, 19.9813775 ], [ 72.719519, 19.9816384 ], [ 72.7203098, 19.9834503 ], [ 72.7208209, 19.9857733 ], [ 72.7210893, 19.9860341 ], [ 72.7215893, 19.9891292 ], [ 72.7211802, 19.9986474 ], [ 72.7208781, 20.0007026 ], [ 72.7208596, 20.0019893 ], [ 72.7205763, 20.0027578 ], [ 72.7205652, 20.0035299 ], [ 72.7202818, 20.0042983 ], [ 72.7202707, 20.0050704 ], [ 72.7191223, 20.0091738 ], [ 72.7191112, 20.0099458 ], [ 72.7188315, 20.0104571 ], [ 72.7182461, 20.0132807 ], [ 72.7179666, 20.013792 ], [ 72.7179554, 20.0145639 ], [ 72.7173998, 20.0153289 ], [ 72.716833, 20.0168659 ], [ 72.7165568, 20.0171197 ], [ 72.7165495, 20.0176344 ], [ 72.7162735, 20.0178882 ], [ 72.7157103, 20.0191679 ], [ 72.7151584, 20.0196756 ], [ 72.7143155, 20.0214663 ], [ 72.7142709, 20.0245544 ], [ 72.7147931, 20.0261055 ], [ 72.7153302, 20.0266274 ], [ 72.7158413, 20.0289504 ], [ 72.715702, 20.0292059 ], [ 72.7170579, 20.029609 ], [ 72.7174603, 20.0300008 ], [ 72.7179863, 20.0312945 ], [ 72.7183896, 20.0316854 ], [ 72.7189341, 20.0316924 ], [ 72.7194824, 20.0314421 ], [ 72.7200269, 20.0314491 ], [ 72.7213773, 20.0322386 ], [ 72.7217797, 20.0326304 ], [ 72.7217723, 20.033145 ], [ 72.7214926, 20.0336563 ], [ 72.7214741, 20.034943 ], [ 72.7211979, 20.0351968 ], [ 72.7211868, 20.0359687 ], [ 72.7217165, 20.0370052 ], [ 72.7217092, 20.0375198 ], [ 72.7212938, 20.0380292 ], [ 72.7204731, 20.038276 ], [ 72.7204138, 20.0423935 ], [ 72.7187799, 20.0423724 ], [ 72.7189229, 20.0418594 ], [ 72.7191991, 20.0416056 ], [ 72.7190781, 20.0405746 ], [ 72.7185336, 20.0405674 ], [ 72.7184489, 20.036963 ], [ 72.7187398, 20.0356799 ], [ 72.7192992, 20.0346574 ], [ 72.7193104, 20.0338855 ], [ 72.7186525, 20.0323327 ], [ 72.7175652, 20.0321894 ], [ 72.716754, 20.0317935 ], [ 72.7156982, 20.0294633 ], [ 72.7140664, 20.029313 ], [ 72.7137922, 20.0294387 ], [ 72.7141928, 20.0299587 ], [ 72.7146927, 20.0330537 ], [ 72.713988, 20.0441123 ], [ 72.7131337, 20.046675 ], [ 72.7131187, 20.0477044 ], [ 72.7117012, 20.0515468 ], [ 72.7116939, 20.0520615 ], [ 72.7108619, 20.0530804 ], [ 72.7108543, 20.053595 ], [ 72.7105746, 20.0541061 ], [ 72.7102762, 20.055904 ], [ 72.7099963, 20.0564151 ], [ 72.7099702, 20.0582164 ], [ 72.7099664, 20.0584739 ], [ 72.7096455, 20.0618156 ], [ 72.709362, 20.062584 ], [ 72.7093508, 20.0633561 ], [ 72.7090598, 20.0646392 ], [ 72.7085002, 20.0656615 ], [ 72.7082091, 20.0669446 ], [ 72.7081979, 20.0677167 ], [ 72.7076419, 20.0684816 ], [ 72.7076007, 20.0713124 ], [ 72.7083879, 20.0733816 ], [ 72.7086565, 20.0736426 ], [ 72.7089103, 20.0749327 ], [ 72.7091789, 20.0751936 ], [ 72.7102235, 20.0782958 ], [ 72.7106268, 20.0786867 ], [ 72.7114365, 20.0792119 ], [ 72.7144176, 20.0802801 ], [ 72.7146863, 20.0805409 ], [ 72.7154998, 20.0808089 ], [ 72.7255701, 20.0814536 ], [ 72.7265285, 20.0810803 ], [ 72.7266727, 20.0805674 ], [ 72.7255869, 20.0802962 ], [ 72.7254576, 20.0797796 ], [ 72.725189, 20.0795188 ], [ 72.7251926, 20.0792614 ], [ 72.7253312, 20.079134 ], [ 72.7264225, 20.0790199 ], [ 72.72643, 20.0785052 ], [ 72.727249, 20.0783867 ], [ 72.7275175, 20.0786475 ], [ 72.7280605, 20.0787836 ], [ 72.7280567, 20.079041 ], [ 72.7272397, 20.0790304 ], [ 72.7272285, 20.0798025 ], [ 72.7277751, 20.0796804 ], [ 72.7280513, 20.0794266 ], [ 72.7285978, 20.0793052 ], [ 72.7286052, 20.0787906 ], [ 72.7290097, 20.0790531 ], [ 72.7289985, 20.0798252 ], [ 72.7285793, 20.080592 ], [ 72.7283087, 20.0804593 ], [ 72.7274916, 20.0804489 ], [ 72.7272212, 20.0803172 ], [ 72.7270696, 20.0813447 ], [ 72.7267899, 20.081856 ], [ 72.7264952, 20.0833963 ], [ 72.7284419, 20.0901136 ], [ 72.7289868, 20.0901206 ], [ 72.7297298, 20.0952778 ], [ 72.7310881, 20.0955528 ], [ 72.7310955, 20.095038 ], [ 72.7313678, 20.0950416 ], [ 72.7311979, 20.0973559 ], [ 72.7322467, 20.1002007 ], [ 72.7327804, 20.1009796 ], [ 72.7335642, 20.1033062 ], [ 72.733833, 20.103567 ], [ 72.7344737, 20.1064065 ], [ 72.7350186, 20.1064135 ], [ 72.7348672, 20.1074411 ], [ 72.7369354, 20.1151894 ], [ 72.7371189, 20.1213691 ], [ 72.7373841, 20.1218871 ], [ 72.7373174, 20.1265193 ], [ 72.7378511, 20.1272984 ], [ 72.7379806, 20.1278147 ], [ 72.7396116, 20.1280931 ], [ 72.7398065, 20.1239775 ], [ 72.7405362, 20.1206407 ], [ 72.7409407, 20.1209032 ], [ 72.74107, 20.1214197 ], [ 72.7429734, 20.1217015 ], [ 72.7419898, 20.123748 ], [ 72.7419824, 20.1242627 ], [ 72.742386, 20.1246535 ], [ 72.7434759, 20.1246675 ], [ 72.744162, 20.1242907 ], [ 72.7448603, 20.1231408 ], [ 72.7451327, 20.1231444 ], [ 72.7452667, 20.1232752 ], [ 72.7449278, 20.1279038 ], [ 72.7439598, 20.128921 ], [ 72.7420452, 20.1294112 ], [ 72.7419012, 20.1299242 ], [ 72.7413451, 20.1306892 ], [ 72.741334, 20.1314613 ], [ 72.7421255, 20.1332731 ], [ 72.7420996, 20.1350744 ], [ 72.742505, 20.1353371 ], [ 72.7426483, 20.1348242 ], [ 72.7433374, 20.1343182 ], [ 72.743849, 20.1366412 ], [ 72.7433022, 20.1367624 ], [ 72.7430261, 20.1370164 ], [ 72.7427536, 20.1370128 ], [ 72.7405905, 20.1358272 ], [ 72.7404648, 20.1350534 ], [ 72.7412934, 20.134292 ], [ 72.7413155, 20.132748 ], [ 72.7405128, 20.1317081 ], [ 72.7401231, 20.1304161 ], [ 72.7390371, 20.1301447 ], [ 72.7385105, 20.1288512 ], [ 72.737417, 20.1290945 ], [ 72.7372433, 20.1316662 ], [ 72.7382183, 20.1396577 ], [ 72.7397458, 20.1471415 ], [ 72.7406765, 20.1582211 ], [ 72.7406356, 20.1610519 ], [ 72.7411548, 20.1628603 ], [ 72.7412544, 20.1654354 ], [ 72.7418033, 20.165185 ], [ 72.7424434, 20.1680245 ], [ 72.7429291, 20.1721489 ], [ 72.7430505, 20.1767171 ], [ 72.7430652, 20.1782391 ], [ 72.7426707, 20.1804193 ], [ 72.7423786, 20.1823115 ], [ 72.7426269, 20.183189 ], [ 72.743518, 20.1845327 ], [ 72.7443653, 20.1859449 ], [ 72.7450665, 20.1893589 ], [ 72.7456508, 20.1918268 ], [ 72.7458846, 20.194281 ], [ 72.7457677, 20.1979005 ], [ 72.7460599, 20.1995868 ], [ 72.7468341, 20.2009166 ], [ 72.7475061, 20.201561 ], [ 72.7484556, 20.2021916 ], [ 72.7490984, 20.2021916 ], [ 72.7502232, 20.2021505 ], [ 72.7510559, 20.2023561 ], [ 72.7522684, 20.2025344 ], [ 72.7532325, 20.2021779 ], [ 72.7536708, 20.2013553 ], [ 72.7544012, 20.201561 ], [ 72.754708, 20.202315 ], [ 72.7558912, 20.2026771 ], [ 72.7567385, 20.2025401 ], [ 72.7591635, 20.2018683 ], [ 72.7602445, 20.2008949 ], [ 72.7621582, 20.2001134 ], [ 72.7630639, 20.1995239 ], [ 72.7641887, 20.1978787 ], [ 72.7638235, 20.197015 ], [ 72.7631369, 20.1963432 ], [ 72.7619098, 20.196494 ], [ 72.7612525, 20.1965763 ], [ 72.7624211, 20.1962198 ], [ 72.7636921, 20.1962609 ], [ 72.7645101, 20.1969876 ], [ 72.7645393, 20.1980844 ], [ 72.7638528, 20.1996884 ], [ 72.7625818, 20.2006207 ], [ 72.760376, 20.201786 ], [ 72.7608434, 20.2020328 ], [ 72.7622312, 20.2023481 ], [ 72.7630931, 20.2019094 ], [ 72.7639988, 20.2009497 ], [ 72.764627, 20.2001683 ], [ 72.7661755, 20.1997021 ], [ 72.7680453, 20.1999626 ], [ 72.7695354, 20.2000312 ], [ 72.7683521, 20.2001409 ], [ 72.7667598, 20.1998804 ], [ 72.7653136, 20.1999901 ], [ 72.7638381, 20.2017586 ], [ 72.7627425, 20.2025949 ], [ 72.7620559, 20.2028691 ], [ 72.7605659, 20.2024167 ], [ 72.7593388, 20.2024715 ], [ 72.7584331, 20.2029376 ], [ 72.7562126, 20.2033352 ], [ 72.7552193, 20.2040481 ], [ 72.756534, 20.2052271 ], [ 72.7584039, 20.2100801 ], [ 72.7589298, 20.2116155 ], [ 72.7606535, 20.2133154 ], [ 72.7628156, 20.2147137 ], [ 72.7649484, 20.2147411 ], [ 72.7669351, 20.2144121 ], [ 72.7685712, 20.2128493 ], [ 72.7695646, 20.2113688 ], [ 72.7719019, 20.2099705 ], [ 72.7735088, 20.2094769 ], [ 72.7756709, 20.2097785 ], [ 72.7782419, 20.2101898 ], [ 72.7804039, 20.210793 ], [ 72.7821569, 20.2107656 ], [ 72.784056, 20.210135 ], [ 72.7849033, 20.2083802 ], [ 72.7860135, 20.2063787 ], [ 72.7869777, 20.2024852 ], [ 72.7876604, 20.2005132 ], [ 72.7877603, 20.2002246 ], [ 72.7891548, 20.1988674 ], [ 72.7908179, 20.197675 ], [ 72.7916236, 20.1974714 ], [ 72.7934107, 20.1983245 ], [ 72.7946812, 20.198373 ], [ 72.7963339, 20.1980046 ], [ 72.7981106, 20.1977816 ], [ 72.8004658, 20.1973551 ], [ 72.8020875, 20.1971127 ], [ 72.8032754, 20.1964826 ], [ 72.8038126, 20.1953289 ], [ 72.8038642, 20.1944467 ], [ 72.8045666, 20.193487 ], [ 72.8052071, 20.1927502 ], [ 72.8059405, 20.192595 ], [ 72.8064673, 20.192246 ], [ 72.8067565, 20.1921006 ], [ 72.8064466, 20.1924496 ], [ 72.8058682, 20.1939232 ], [ 72.8051348, 20.1944855 ], [ 72.8042568, 20.1957555 ], [ 72.803544, 20.1968413 ], [ 72.8023974, 20.1975005 ], [ 72.8009616, 20.1979077 ], [ 72.7994431, 20.1982567 ], [ 72.7978524, 20.1981888 ], [ 72.7964889, 20.1985863 ], [ 72.7951977, 20.1991679 ], [ 72.7941957, 20.1991389 ], [ 72.7920988, 20.1980337 ], [ 72.7914997, 20.1979949 ], [ 72.7900639, 20.1991292 ], [ 72.7888346, 20.1998756 ], [ 72.7879876, 20.2013201 ], [ 72.7873782, 20.2035691 ], [ 72.7867584, 20.2059441 ], [ 72.786872, 20.2068844 ], [ 72.7871406, 20.2082028 ], [ 72.7869443, 20.208639 ], [ 72.7875847, 20.2083288 ], [ 72.7893098, 20.2079508 ], [ 72.7906113, 20.2078247 ], [ 72.7913344, 20.2078926 ], [ 72.7925946, 20.2083967 ], [ 72.7931834, 20.2084257 ], [ 72.7946812, 20.2083967 ], [ 72.79527, 20.2083967 ], [ 72.7964062, 20.2088232 ], [ 72.7970157, 20.208862 ], [ 72.7982759, 20.2080768 ], [ 72.7990093, 20.2076018 ], [ 72.7996084, 20.2074273 ], [ 72.8004658, 20.2075048 ], [ 72.8009513, 20.2074176 ], [ 72.8012612, 20.2070008 ], [ 72.8014471, 20.2063028 ], [ 72.8021598, 20.2057696 ], [ 72.802759, 20.2055467 ], [ 72.8031412, 20.2050426 ], [ 72.8039882, 20.204587 ], [ 72.8047939, 20.2041798 ], [ 72.8053827, 20.2036951 ], [ 72.8055893, 20.2031232 ], [ 72.8058682, 20.2022022 ], [ 72.806426, 20.2016884 ], [ 72.8069734, 20.2013685 ], [ 72.8073453, 20.201543 ], [ 72.8068805, 20.2018145 ], [ 72.8063537, 20.2022022 ], [ 72.8060128, 20.2025997 ], [ 72.8057545, 20.2034915 ], [ 72.8053724, 20.2041314 ], [ 72.8046803, 20.2045482 ], [ 72.8041328, 20.2047518 ], [ 72.8033684, 20.2049844 ], [ 72.8028519, 20.2056339 ], [ 72.8021805, 20.2059054 ], [ 72.8025214, 20.2059635 ], [ 72.8031205, 20.2062252 ], [ 72.8040605, 20.2072722 ], [ 72.8047629, 20.208038 ], [ 72.8058475, 20.2088523 ], [ 72.8060954, 20.2092788 ], [ 72.8065499, 20.2095017 ], [ 72.8063433, 20.2100155 ], [ 72.8060128, 20.2098216 ], [ 72.8057029, 20.2096568 ], [ 72.8049592, 20.2090171 ], [ 72.8042981, 20.2081059 ], [ 72.8038126, 20.2074176 ], [ 72.8030585, 20.206613 ], [ 72.8022838, 20.2062931 ], [ 72.8017467, 20.20639 ], [ 72.8014471, 20.2071462 ], [ 72.8010752, 20.2076987 ], [ 72.8002075, 20.2078247 ], [ 72.798999, 20.2079217 ], [ 72.7975115, 20.2089104 ], [ 72.7968814, 20.2092109 ], [ 72.7954869, 20.2087747 ], [ 72.7940821, 20.2087359 ], [ 72.792326, 20.2088717 ], [ 72.7907456, 20.208387 ], [ 72.7892995, 20.2084257 ], [ 72.7875021, 20.208765 ], [ 72.7862419, 20.2095599 ], [ 72.7846305, 20.2110721 ], [ 72.7827847, 20.2120139 ], [ 72.7821492, 20.2120281 ], [ 72.7809845, 20.2120541 ], [ 72.7768698, 20.2113436 ], [ 72.774341, 20.2108743 ], [ 72.7729122, 20.2112497 ], [ 72.7715843, 20.2119382 ], [ 72.768109, 20.2151711 ], [ 72.7677958, 20.2154839 ], [ 72.7678564, 20.2159864 ], [ 72.7688566, 20.217598 ], [ 72.7688162, 20.2186692 ], [ 72.7687757, 20.2194466 ], [ 72.7690586, 20.2203472 ], [ 72.7699375, 20.221134 ], [ 72.770675, 20.2214943 ], [ 72.7708569, 20.2214374 ], [ 72.7707963, 20.2208117 ], [ 72.7708771, 20.2201671 ], [ 72.7713519, 20.2199206 ], [ 72.7719379, 20.2200533 ], [ 72.7734634, 20.2205747 ], [ 72.7744938, 20.2211814 ], [ 72.7750495, 20.2212099 ], [ 72.7753525, 20.2208876 ], [ 72.7758375, 20.2205084 ], [ 72.7765648, 20.2205842 ], [ 72.7768477, 20.2210866 ], [ 72.7768376, 20.2215891 ], [ 72.7766962, 20.2221958 ], [ 72.7761506, 20.223049 ], [ 72.7761203, 20.2234376 ], [ 72.7766154, 20.2238453 ], [ 72.7773933, 20.2245847 ], [ 72.7779085, 20.2253336 ], [ 72.7781409, 20.2257507 ], [ 72.7787066, 20.2255895 ], [ 72.778939, 20.2255801 ], [ 72.7785854, 20.2259308 ], [ 72.7780802, 20.2259498 ], [ 72.7776963, 20.2254473 ], [ 72.7768679, 20.2244899 ], [ 72.7759688, 20.2239022 ], [ 72.7758173, 20.2233997 ], [ 72.77609, 20.2226413 ], [ 72.7765143, 20.2216175 ], [ 72.7765042, 20.2208307 ], [ 72.7758173, 20.2207833 ], [ 72.7755344, 20.2212288 ], [ 72.7751808, 20.2214469 ], [ 72.7747363, 20.2214184 ], [ 72.7740594, 20.2211909 ], [ 72.7731401, 20.220698 ], [ 72.7720692, 20.2205084 ], [ 72.7713216, 20.2203377 ], [ 72.7710892, 20.2205368 ], [ 72.7712711, 20.2213805 ], [ 72.7710892, 20.2217882 ], [ 72.7705235, 20.2217976 ], [ 72.7695334, 20.221172 ], [ 72.7689677, 20.2208022 ], [ 72.768604, 20.2201386 ], [ 72.7685434, 20.2189726 ], [ 72.7683817, 20.2177402 ], [ 72.7675836, 20.2162708 ], [ 72.7671492, 20.2160812 ], [ 72.7656642, 20.2162897 ], [ 72.7629365, 20.2166784 ], [ 72.7628455, 20.2168301 ], [ 72.762896, 20.217835 ], [ 72.7630173, 20.2200533 ], [ 72.7633102, 20.220897 ], [ 72.7640477, 20.2222811 ], [ 72.7646438, 20.2232386 ], [ 72.7641791, 20.2227172 ], [ 72.7634113, 20.2215227 ], [ 72.7627445, 20.2198827 ], [ 72.7625627, 20.2190295 ], [ 72.7624515, 20.2172946 ], [ 72.7622798, 20.2166784 ], [ 72.7617241, 20.2164414 ], [ 72.7597743, 20.2158631 ], [ 72.7571737, 20.2137057 ], [ 72.7568737, 20.2131359 ], [ 72.7563879, 20.21146 ], [ 72.7553878, 20.2086042 ], [ 72.7544949, 20.2071427 ], [ 72.7535305, 20.2060634 ], [ 72.7518946, 20.2048768 ], [ 72.750673, 20.2040254 ], [ 72.7503873, 20.2038109 ], [ 72.7498229, 20.2039651 ], [ 72.7491032, 20.2046035 ], [ 72.7483253, 20.2047647 ], [ 72.7472948, 20.2046699 ], [ 72.7468503, 20.2050112 ], [ 72.7465978, 20.2064618 ], [ 72.7468301, 20.2092776 ], [ 72.7469705, 20.2123292 ], [ 72.7465924, 20.2158752 ], [ 72.7457842, 20.2211983 ], [ 72.7451973, 20.2248037 ], [ 72.7445925, 20.2269936 ], [ 72.7443013, 20.2282769 ], [ 72.7437361, 20.2313202 ], [ 72.7425663, 20.234809 ], [ 72.7422888, 20.2354578 ], [ 72.7422814, 20.2359725 ], [ 72.7417175, 20.2372522 ], [ 72.7417063, 20.2380242 ], [ 72.7411537, 20.2385319 ], [ 72.740866, 20.2395576 ], [ 72.7407916, 20.2447044 ], [ 72.7413147, 20.2462554 ], [ 72.7423793, 20.2480709 ], [ 72.7425086, 20.2485873 ], [ 72.7430522, 20.2487226 ], [ 72.7434551, 20.2491142 ], [ 72.7439855, 20.2501507 ], [ 72.7454653, 20.2515848 ], [ 72.7468174, 20.2523744 ], [ 72.7474931, 20.2527696 ], [ 72.7480236, 20.2538059 ], [ 72.7485615, 20.2543276 ], [ 72.7498842, 20.2571758 ], [ 72.7506577, 20.2602744 ], [ 72.7507927, 20.2604043 ], [ 72.7513381, 20.2604113 ], [ 72.7516052, 20.2608014 ], [ 72.7505145, 20.2607874 ], [ 72.7505033, 20.2615593 ], [ 72.7510469, 20.2616946 ], [ 72.7514498, 20.2620862 ], [ 72.753038, 20.2654527 ], [ 72.7540027, 20.2742162 ], [ 72.7539397, 20.278591 ], [ 72.7544481, 20.2811712 ], [ 72.7551217, 20.2912181 ], [ 72.7564521, 20.2935515 ], [ 72.7572555, 20.2945914 ], [ 72.7580628, 20.2953738 ], [ 72.7587229, 20.2969267 ], [ 72.7592665, 20.2970618 ], [ 72.7594005, 20.2971928 ], [ 72.7593895, 20.2979648 ], [ 72.7601966, 20.2987473 ], [ 72.7604619, 20.2992653 ], [ 72.7611389, 20.2996598 ], [ 72.7622151, 20.3007031 ], [ 72.7630297, 20.3009709 ], [ 72.763848, 20.3009813 ], [ 72.7643973, 20.3007308 ], [ 72.7655031, 20.2997155 ], [ 72.7660524, 20.2994651 ], [ 72.7674162, 20.2994825 ], [ 72.7687726, 20.3000145 ], [ 72.7698526, 20.3008006 ], [ 72.7713321, 20.3022355 ], [ 72.7721319, 20.3035326 ], [ 72.7722578, 20.3043063 ], [ 72.7729465, 20.3038004 ], [ 72.7733784, 20.3022616 ], [ 72.7737944, 20.3017492 ], [ 72.7740709, 20.3014954 ], [ 72.7742224, 20.3004678 ], [ 72.7712293, 20.299915 ], [ 72.7712366, 20.2994001 ], [ 72.7726004, 20.2994175 ], [ 72.7734557, 20.2968545 ], [ 72.7742757, 20.2967358 ], [ 72.7746751, 20.2973848 ], [ 72.7756212, 20.2980399 ], [ 72.7786216, 20.2980781 ], [ 72.7787556, 20.2982089 ], [ 72.77901, 20.299499 ], [ 72.779687, 20.2998932 ], [ 72.7805052, 20.2999036 ], [ 72.7813271, 20.2996566 ], [ 72.7821455, 20.299667 ], [ 72.7825487, 20.3000588 ], [ 72.7825303, 20.3013455 ], [ 72.7821143, 20.3018549 ], [ 72.7812924, 20.3021019 ], [ 72.7808607, 20.3036407 ], [ 72.7809792, 20.3049291 ], [ 72.7812521, 20.3049327 ], [ 72.7812447, 20.3054474 ], [ 72.7815175, 20.3054508 ], [ 72.7815027, 20.3064803 ], [ 72.7801553, 20.3053043 ], [ 72.7790661, 20.3051624 ], [ 72.7784948, 20.3069567 ], [ 72.7782221, 20.3069533 ], [ 72.7777059, 20.3048876 ], [ 72.7768875, 20.3048772 ], [ 72.7765965, 20.3061605 ], [ 72.7763237, 20.3061571 ], [ 72.7756743, 20.3038322 ], [ 72.7754052, 20.3035715 ], [ 72.7750149, 20.3022795 ], [ 72.7737452, 20.3021748 ], [ 72.7731899, 20.3058626 ], [ 72.7734517, 20.306638 ], [ 72.7737208, 20.3068989 ], [ 72.7739346, 20.3110198 ], [ 72.7742037, 20.3112806 ], [ 72.7746609, 20.3174638 ], [ 72.7745248, 20.3269854 ], [ 72.775052, 20.3282791 ], [ 72.7759227, 20.3342101 ], [ 72.7764683, 20.3342169 ], [ 72.7765933, 20.3349907 ], [ 72.7768624, 20.3352515 ], [ 72.7771242, 20.336027 ], [ 72.7776588, 20.336806 ], [ 72.7781933, 20.3375849 ], [ 72.7788705, 20.3379792 ], [ 72.7794124, 20.3382148 ], [ 72.7800813, 20.3391244 ], [ 72.7807583, 20.3395187 ], [ 72.7814269, 20.3404285 ], [ 72.7838495, 20.3427757 ], [ 72.7843768, 20.3440694 ], [ 72.7851807, 20.3451091 ], [ 72.7862428, 20.3471817 ], [ 72.7870503, 20.3479641 ], [ 72.7873122, 20.3487396 ], [ 72.7875813, 20.3490004 ], [ 72.787711, 20.3495168 ], [ 72.7882547, 20.3496519 ], [ 72.7893317, 20.3506952 ], [ 72.791769, 20.3520129 ], [ 72.7947705, 20.3520509 ], [ 72.7986051, 20.3510698 ], [ 72.7996966, 20.3510834 ], [ 72.8005116, 20.3513512 ], [ 72.8026945, 20.3513786 ], [ 72.8032366, 20.3516428 ], [ 72.8040551, 20.3516532 ], [ 72.8045972, 20.3519173 ], [ 72.8081353, 20.3526058 ], [ 72.8082785, 20.3520927 ], [ 72.8084173, 20.3519653 ], [ 72.8086902, 20.3519689 ], [ 72.8088244, 20.3520996 ], [ 72.808817, 20.3526143 ], [ 72.8086775, 20.35287 ], [ 72.8092215, 20.353005 ], [ 72.8098903, 20.3539148 ], [ 72.810418, 20.3552083 ], [ 72.811222, 20.356248 ], [ 72.8125683, 20.3575517 ], [ 72.8126979, 20.3580683 ], [ 72.8137841, 20.3584674 ], [ 72.8139181, 20.3585982 ], [ 72.8140478, 20.3591146 ], [ 72.8145972, 20.3588641 ], [ 72.8147259, 20.3593805 ], [ 72.8155373, 20.3599055 ], [ 72.8159327, 20.3609399 ], [ 72.8164766, 20.3610751 ], [ 72.8172772, 20.362372 ], [ 72.8178212, 20.3625081 ], [ 72.8182118, 20.3637999 ], [ 72.8184811, 20.3640605 ], [ 72.8190088, 20.3653542 ], [ 72.8195473, 20.3658757 ], [ 72.8196698, 20.3669069 ], [ 72.8202156, 20.3669137 ], [ 72.8204178, 20.3672325 ], [ 72.8207145, 20.3674729 ], [ 72.8213463, 20.3677541 ], [ 72.8215839, 20.3676963 ], [ 72.8216814, 20.3676726 ], [ 72.822106, 20.3683523 ], [ 72.8220026, 20.3684315 ], [ 72.8212783, 20.368986 ], [ 72.8211341, 20.369499 ], [ 72.8213564, 20.3731053 ], [ 72.8216221, 20.3736233 ], [ 72.8217446, 20.3746545 ], [ 72.8222904, 20.3746613 ], [ 72.822412, 20.3756923 ], [ 72.8226775, 20.3762104 ], [ 72.8233513, 20.3768619 ], [ 72.8238954, 20.3769978 ], [ 72.8242753, 20.3790618 ], [ 72.8245446, 20.3793225 ], [ 72.8247779, 20.3821567 ], [ 72.825302, 20.3837076 ], [ 72.82580488763405, 20.386527288281254 ], [ 72.8258081, 20.3865453 ], [ 72.8260774, 20.3868059 ], [ 72.826318, 20.3891255 ], [ 72.8268529, 20.3899044 ], [ 72.827000104425608, 20.390649284995039 ], [ 72.8273628, 20.3924846 ], [ 72.827498, 20.3926146 ], [ 72.8276321, 20.3927742 ], [ 72.8280013, 20.4053911 ], [ 72.8280372, 20.4054975 ], [ 72.8292475, 20.4090862 ], [ 72.8296768, 20.4096964 ], [ 72.8303861, 20.4101067 ], [ 72.8309489, 20.4102289 ], [ 72.8310262, 20.4105113 ], [ 72.8305566, 20.4125972 ], [ 72.8299536, 20.4126843 ], [ 72.8296847, 20.4130328 ], [ 72.82932, 20.4136537 ], [ 72.8289941, 20.4161072 ], [ 72.8290039, 20.4170658 ], [ 72.8291553, 20.4193305 ], [ 72.8291753, 20.4208267 ], [ 72.8291351, 20.4218783 ], [ 72.8288079, 20.4257351 ], [ 72.828524, 20.4265037 ], [ 72.8281498, 20.4337061 ], [ 72.8285454, 20.4347405 ], [ 72.8290914, 20.4347473 ], [ 72.829594, 20.4378424 ], [ 72.8301402, 20.4378492 ], [ 72.830768, 20.4417179 ], [ 72.8310338, 20.4422361 ], [ 72.8311564, 20.4432671 ], [ 72.8317024, 20.4432739 ], [ 72.8323556, 20.4453412 ], [ 72.8324709, 20.446887 ], [ 72.8330169, 20.4468938 ], [ 72.8331422, 20.4476676 ], [ 72.8332774, 20.4477974 ], [ 72.8338253, 20.4476761 ], [ 72.8338181, 20.4481907 ], [ 72.8343641, 20.4481975 ], [ 72.8348886, 20.4497485 ], [ 72.8354346, 20.4497553 ], [ 72.8356862, 20.4513026 ], [ 72.8362322, 20.4513094 ], [ 72.8363573, 20.4520832 ], [ 72.8368928, 20.452862 ], [ 72.8370188, 20.4536358 ], [ 72.8375667, 20.4535135 ], [ 72.8377011, 20.4536443 ], [ 72.8378308, 20.4541607 ], [ 72.8391925, 20.4544351 ], [ 72.8393214, 20.4549514 ], [ 72.8395907, 20.4552121 ], [ 72.8397206, 20.4557286 ], [ 72.8402666, 20.4557354 ], [ 72.8403955, 20.4562518 ], [ 72.8414734, 20.4572947 ], [ 72.842005, 20.4583308 ], [ 72.8432254, 20.458989 ], [ 72.8451224, 20.4600422 ], [ 72.8456614, 20.4605636 ], [ 72.8510833, 20.4634621 ], [ 72.8521611, 20.464505 ], [ 72.8527055, 20.4646409 ], [ 72.8526983, 20.4651556 ], [ 72.8532428, 20.4652905 ], [ 72.8536465, 20.4656821 ], [ 72.8537763, 20.4661985 ], [ 72.854865, 20.4664693 ], [ 72.8549939, 20.4669856 ], [ 72.8551292, 20.4671155 ], [ 72.8567623, 20.4675222 ], [ 72.8566431, 20.4662338 ], [ 72.8570585, 20.4658524 ], [ 72.8576064, 20.4657309 ], [ 72.8584221, 20.4659983 ], [ 72.8590757, 20.4680656 ], [ 72.8593452, 20.4683262 ], [ 72.8603947, 20.4714279 ], [ 72.8606465, 20.4729754 ], [ 72.8616854, 20.4768492 ], [ 72.8619513, 20.4773672 ], [ 72.862067, 20.4789131 ], [ 72.862613, 20.4789197 ], [ 72.863411, 20.4804738 ], [ 72.8640683, 20.4822837 ], [ 72.8646004, 20.4833198 ], [ 72.8648555, 20.4846099 ], [ 72.8656571, 20.4859068 ], [ 72.8667389, 20.4866923 ], [ 72.8674061, 20.4878582 ], [ 72.8683456, 20.4890285 ], [ 72.8690235, 20.4894226 ], [ 72.8694238, 20.4900714 ], [ 72.8699593, 20.4908501 ], [ 72.8704949, 20.491629 ], [ 72.8713, 20.4926683 ], [ 72.8715625, 20.4934437 ], [ 72.8721016, 20.4939652 ], [ 72.8722316, 20.4944815 ], [ 72.8727761, 20.4946165 ], [ 72.8746897, 20.4945116 ], [ 72.8746967, 20.493997 ], [ 72.8755143, 20.4941353 ], [ 72.8763267, 20.49466 ], [ 72.8771479, 20.4945418 ], [ 72.8768854, 20.4937664 ], [ 72.8774316, 20.493773 ], [ 72.8774174, 20.4948025 ], [ 72.8782405, 20.4945551 ], [ 72.8782333, 20.4950699 ], [ 72.8793293, 20.4948257 ], [ 72.8794584, 20.4953423 ], [ 72.8801363, 20.4957361 ], [ 72.8812148, 20.4967788 ], [ 72.8829772, 20.4977017 ], [ 72.8832363, 20.4987344 ], [ 72.8833715, 20.4988643 ], [ 72.8839196, 20.4987427 ], [ 72.8840486, 20.4992591 ], [ 72.8843182, 20.4995199 ], [ 72.8849591, 20.5026165 ], [ 72.8852324, 20.5026197 ], [ 72.8852393, 20.5021051 ], [ 72.8855124, 20.5021085 ], [ 72.8856344, 20.5031394 ], [ 72.8854913, 20.5036526 ], [ 72.8860375, 20.5036592 ], [ 72.886286, 20.505464 ], [ 72.885197, 20.5051933 ], [ 72.8853189, 20.5062243 ], [ 72.8861101, 20.5082931 ], [ 72.8866946, 20.5155074 ], [ 72.8869677, 20.5155108 ], [ 72.8871214, 20.5142256 ], [ 72.8876926, 20.5124309 ], [ 72.8877207, 20.5103719 ], [ 72.8871851, 20.5095932 ], [ 72.8870666, 20.5083048 ], [ 72.8865204, 20.5082982 ], [ 72.886681, 20.5064984 ], [ 72.8871161, 20.5047019 ], [ 72.887664, 20.5045794 ], [ 72.8891959, 20.5024107 ], [ 72.8892029, 20.5018958 ], [ 72.8886708, 20.5008599 ], [ 72.8879989, 20.5000795 ], [ 72.8874527, 20.5000727 ], [ 72.8872078, 20.4980106 ], [ 72.8877523, 20.4981455 ], [ 72.8884259, 20.4987977 ], [ 72.8890932, 20.4999637 ], [ 72.8910071, 20.4998586 ], [ 72.8906145, 20.498567 ], [ 72.8907621, 20.4977964 ], [ 72.890214, 20.4979181 ], [ 72.8883038, 20.4977666 ], [ 72.8883074, 20.4975093 ], [ 72.8891286, 20.4973901 ], [ 72.8899551, 20.4968853 ], [ 72.8906427, 20.496508 ], [ 72.8909264, 20.4957393 ], [ 72.8916185, 20.4951037 ], [ 72.8948961, 20.4951436 ], [ 72.8950339, 20.495017 ], [ 72.8951779, 20.4945039 ], [ 72.8968133, 20.4947811 ], [ 72.8968203, 20.4942665 ], [ 72.8984538, 20.4946719 ], [ 72.8988507, 20.4955779 ], [ 72.8992556, 20.4959686 ], [ 72.900891, 20.4962457 ], [ 72.9012949, 20.4966371 ], [ 72.9018271, 20.4976732 ], [ 72.902636, 20.4984551 ], [ 72.9027557, 20.4997437 ], [ 72.9013917, 20.499598 ], [ 72.9003096, 20.4988127 ], [ 72.8997651, 20.4986779 ], [ 72.8997827, 20.497391 ], [ 72.8981456, 20.4972421 ], [ 72.8978706, 20.497368 ], [ 72.8978636, 20.4978826 ], [ 72.8973157, 20.4980043 ], [ 72.896764, 20.498384 ], [ 72.896757, 20.4988989 ], [ 72.898121, 20.4990436 ], [ 72.8994692, 20.500347 ], [ 72.9008279, 20.5008781 ], [ 72.9013671, 20.5013995 ], [ 72.9016402, 20.5014027 ], [ 72.9026045, 20.5007715 ], [ 72.9034416, 20.4994946 ], [ 72.9034695, 20.4974356 ], [ 72.9030673, 20.4969161 ], [ 72.9044348, 20.4968034 ], [ 72.905249, 20.4971997 ], [ 72.905392, 20.4966866 ], [ 72.9066374, 20.495543 ], [ 72.9071836, 20.4955496 ], [ 72.9082692, 20.4960775 ], [ 72.9090868, 20.4962164 ], [ 72.9089428, 20.4967295 ], [ 72.9082499, 20.4974933 ], [ 72.9077018, 20.497615 ], [ 72.9068738, 20.4982489 ], [ 72.9064495, 20.4992735 ], [ 72.9057532, 20.5002946 ], [ 72.9038464, 20.4998851 ], [ 72.9032985, 20.5000075 ], [ 72.9028742, 20.5010321 ], [ 72.9028566, 20.5023188 ], [ 72.9025731, 20.5030877 ], [ 72.9021567, 20.5035974 ], [ 72.901066, 20.5034551 ], [ 72.8999804, 20.502927 ], [ 72.898345, 20.5026499 ], [ 72.8980753, 20.5023893 ], [ 72.8964365, 20.5023695 ], [ 72.8950777, 20.5018382 ], [ 72.8942688, 20.5010561 ], [ 72.8912626, 20.5011487 ], [ 72.891108, 20.5024339 ], [ 72.8901312, 20.5039663 ], [ 72.8895831, 20.504088 ], [ 72.8879248, 20.505484 ], [ 72.8879109, 20.5065133 ], [ 72.8888768, 20.5057529 ], [ 72.889021, 20.5052398 ], [ 72.8894266, 20.5055021 ], [ 72.890225, 20.5070563 ], [ 72.8902144, 20.5078284 ], [ 72.8900749, 20.5080841 ], [ 72.888709, 20.5080674 ], [ 72.8888381, 20.5085838 ], [ 72.8899201, 20.5093691 ], [ 72.8901756, 20.5106592 ], [ 72.8907149, 20.5111806 ], [ 72.8907079, 20.5116953 ], [ 72.8902881, 20.5124624 ], [ 72.8891919, 20.5127064 ], [ 72.8892061, 20.5116771 ], [ 72.8883866, 20.5116671 ], [ 72.887888, 20.518096 ], [ 72.887331, 20.5188614 ], [ 72.8871808, 20.5198892 ], [ 72.8877307, 20.5196384 ], [ 72.8878492, 20.5209268 ], [ 72.8875512, 20.522725 ], [ 72.8872745, 20.522979 ], [ 72.8872074, 20.5278688 ], [ 72.8869307, 20.5281228 ], [ 72.8869165, 20.5291523 ], [ 72.8873197, 20.5296718 ], [ 72.8867735, 20.5296652 ], [ 72.8866151, 20.5312077 ], [ 72.8872898, 20.5318589 ], [ 72.8875629, 20.5318623 ], [ 72.8878396, 20.5316083 ], [ 72.8883877, 20.5314868 ], [ 72.8883949, 20.530972 ], [ 72.8878468, 20.5310935 ], [ 72.8870324, 20.5306979 ], [ 72.887311, 20.5303148 ], [ 72.8875841, 20.5303182 ], [ 72.8883985, 20.5307147 ], [ 72.8884055, 20.5301999 ], [ 72.8916856, 20.5301107 ], [ 72.8925087, 20.5298633 ], [ 72.8955138, 20.5298998 ], [ 72.8960672, 20.5293917 ], [ 72.8971583, 20.5295341 ], [ 72.8971652, 20.5290194 ], [ 72.8990847, 20.5285278 ], [ 72.8990775, 20.5290427 ], [ 72.8996239, 20.5290493 ], [ 72.8996309, 20.5285344 ], [ 72.8999042, 20.5285378 ], [ 72.8998972, 20.5290525 ], [ 72.9018112, 20.5289466 ], [ 72.9020879, 20.5286924 ], [ 72.9039968, 20.5289731 ], [ 72.9042682, 20.5291054 ], [ 72.9042822, 20.5280761 ], [ 72.9045555, 20.5280793 ], [ 72.9045485, 20.528594 ], [ 72.905093, 20.5287289 ], [ 72.9072822, 20.528498 ], [ 72.9075519, 20.5287586 ], [ 72.9091841, 20.5292931 ], [ 72.9094538, 20.5295537 ], [ 72.9099983, 20.5296894 ], [ 72.9100053, 20.5291748 ], [ 72.9119195, 20.5290685 ], [ 72.9141138, 20.528452 ], [ 72.9141208, 20.5279372 ], [ 72.9146689, 20.5278147 ], [ 72.9159135, 20.5266718 ], [ 72.9160575, 20.5261587 ], [ 72.9166039, 20.5261653 ], [ 72.9164912, 20.5243621 ], [ 72.9160959, 20.5233279 ], [ 72.9169154, 20.5233377 ], [ 72.9167713, 20.5238506 ], [ 72.9174391, 20.5250166 ], [ 72.9182569, 20.5251555 ], [ 72.9182675, 20.5243834 ], [ 72.9196351, 20.5242708 ], [ 72.9199118, 20.5240166 ], [ 72.9201624, 20.5256932 ], [ 72.9198787, 20.526462 ], [ 72.9187825, 20.5267062 ], [ 72.9187755, 20.5272211 ], [ 72.9182274, 20.5273426 ], [ 72.9168458, 20.5284849 ], [ 72.9167016, 20.5289979 ], [ 72.9164249, 20.5292521 ], [ 72.9162818, 20.529765 ], [ 72.9157337, 20.5298867 ], [ 72.9151803, 20.530395 ], [ 72.9140772, 20.5311538 ], [ 72.9121509, 20.5321602 ], [ 72.9080492, 20.5323681 ], [ 72.9072331, 20.5321009 ], [ 72.9069634, 20.5318402 ], [ 72.9061473, 20.531573 ], [ 72.9023155, 20.5320415 ], [ 72.8998462, 20.5327837 ], [ 72.8970966, 20.5340374 ], [ 72.8965432, 20.5345456 ], [ 72.8948935, 20.5352976 ], [ 72.8929776, 20.5355318 ], [ 72.892149, 20.5361657 ], [ 72.8922747, 20.5369395 ], [ 72.8928105, 20.5377181 ], [ 72.8935982, 20.5400442 ], [ 72.8939999, 20.5406922 ], [ 72.8950891, 20.5409627 ], [ 72.897548, 20.5409926 ], [ 72.8997443, 20.5402471 ], [ 72.9000174, 20.5402504 ], [ 72.9011034, 20.5407784 ], [ 72.9030106, 20.541188 ], [ 72.9030176, 20.5406733 ], [ 72.9041104, 20.5406866 ], [ 72.9042361, 20.5414601 ], [ 72.9051805, 20.5423721 ], [ 72.906674, 20.5430341 ], [ 72.906667, 20.5435488 ], [ 72.9062471, 20.5443159 ], [ 72.9046219, 20.5432666 ], [ 72.9042255, 20.5422322 ], [ 72.9038231, 20.5417126 ], [ 72.9027234, 20.5422141 ], [ 72.9027164, 20.5427289 ], [ 72.9013484, 20.5428404 ], [ 72.8999719, 20.543596 ], [ 72.8980522, 20.5440876 ], [ 72.8972325, 20.5440776 ], [ 72.8961291, 20.5448364 ], [ 72.8944916, 20.5446883 ], [ 72.8948621, 20.5475242 ], [ 72.8956642, 20.5488209 ], [ 72.8959269, 20.5495962 ], [ 72.8963319, 20.5499869 ], [ 72.9001607, 20.549776 ], [ 72.9002985, 20.5496493 ], [ 72.9004427, 20.5491362 ], [ 72.9015321, 20.5494068 ], [ 72.9013809, 20.5504346 ], [ 72.9011006, 20.5509461 ], [ 72.9004075, 20.5517098 ], [ 72.8993129, 20.5518247 ], [ 72.8987612, 20.5522046 ], [ 72.8974888, 20.5552779 ], [ 72.8967956, 20.5560417 ], [ 72.8965223, 20.5560385 ], [ 72.8971006, 20.5537289 ], [ 72.896004, 20.5539729 ], [ 72.8957203, 20.5547417 ], [ 72.8949076, 20.5542171 ], [ 72.8949182, 20.553445 ], [ 72.8943735, 20.5533091 ], [ 72.8932928, 20.5523957 ], [ 72.8931664, 20.5516219 ], [ 72.8934431, 20.5513679 ], [ 72.8933493, 20.5482779 ], [ 72.8928029, 20.5482713 ], [ 72.8925472, 20.5469812 ], [ 72.891458, 20.5467106 ], [ 72.891328, 20.5461942 ], [ 72.8905223, 20.5451547 ], [ 72.8905295, 20.5446401 ], [ 72.8909539, 20.5436157 ], [ 72.8917735, 20.5436255 ], [ 72.892197, 20.5426011 ], [ 72.8920821, 20.5410553 ], [ 72.8915355, 20.5410487 ], [ 72.8914127, 20.5400177 ], [ 72.8904711, 20.5389767 ], [ 72.889655, 20.5387092 ], [ 72.8895319, 20.5376783 ], [ 72.8898158, 20.5369094 ], [ 72.8902314, 20.536528 ], [ 72.8907795, 20.5364065 ], [ 72.8907865, 20.5358916 ], [ 72.8896937, 20.5358784 ], [ 72.8897009, 20.5353636 ], [ 72.8891492, 20.5357425 ], [ 72.8886009, 20.535865 ], [ 72.8884567, 20.5363781 ], [ 72.88818, 20.5366321 ], [ 72.8880369, 20.5371451 ], [ 72.8872136, 20.5373925 ], [ 72.8873463, 20.5376516 ], [ 72.8873391, 20.5381663 ], [ 72.8870588, 20.5386777 ], [ 72.8870449, 20.539707 ], [ 72.8864701, 20.5417591 ], [ 72.8856257, 20.5435507 ], [ 72.8859899, 20.5469013 ], [ 72.8868131, 20.5466539 ], [ 72.8869422, 20.5471702 ], [ 72.8867954, 20.5479408 ], [ 72.887342, 20.5479474 ], [ 72.8875939, 20.5494949 ], [ 72.8870475, 20.5494881 ], [ 72.8870369, 20.5502602 ], [ 72.8875869, 20.5500096 ], [ 72.8878388, 20.5515569 ], [ 72.8883852, 20.5515637 ], [ 72.8887735, 20.5531128 ], [ 72.8891768, 20.5536325 ], [ 72.8883605, 20.5533651 ], [ 72.888616, 20.5546552 ], [ 72.8894357, 20.5546652 ], [ 72.8890184, 20.5551749 ], [ 72.8890078, 20.555947 ], [ 72.8895472, 20.5564683 ], [ 72.8898063, 20.5575011 ], [ 72.890076, 20.5577618 ], [ 72.8911301, 20.560606 ], [ 72.8913998, 20.5608667 ], [ 72.8917925, 20.5621585 ], [ 72.8923389, 20.5621651 ], [ 72.8923319, 20.5626797 ], [ 72.8928783, 20.5626864 ], [ 72.8931411, 20.5634618 ], [ 72.8925947, 20.5634552 ], [ 72.8929968, 20.563975 ], [ 72.8931269, 20.5644913 ], [ 72.8936718, 20.5646261 ], [ 72.8939415, 20.5648869 ], [ 72.8940758, 20.5650177 ], [ 72.8942112, 20.5651475 ], [ 72.8947559, 20.5652832 ], [ 72.8951513, 20.5663176 ], [ 72.895421, 20.5665782 ], [ 72.8953998, 20.5681224 ], [ 72.8959392, 20.5686438 ], [ 72.8959286, 20.5694159 ], [ 72.8957889, 20.5696716 ], [ 72.8963355, 20.5696782 ], [ 72.896461, 20.570452 ], [ 72.8967309, 20.5707126 ], [ 72.8973862, 20.5727797 ], [ 72.8978594, 20.5729974 ], [ 72.898229, 20.5733595 ], [ 72.8980595, 20.5739998 ], [ 72.8976419, 20.5740698 ], [ 72.8974405, 20.5744378 ], [ 72.8973482, 20.5753493 ], [ 72.8973128, 20.5759419 ], [ 72.8974335, 20.5773707 ], [ 72.8974727, 20.5777816 ], [ 72.8974904, 20.5782973 ], [ 72.8974115, 20.5793525 ], [ 72.8973203, 20.5819911 ], [ 72.8973128, 20.5832074 ], [ 72.8973772, 20.5842635 ], [ 72.8973069, 20.58542 ], [ 72.8964545, 20.5903846 ], [ 72.8959771, 20.592452 ], [ 72.8957426, 20.5933836 ], [ 72.8954637, 20.594305 ], [ 72.8950715, 20.5963438 ], [ 72.8946783, 20.5975587 ], [ 72.8944892, 20.5982555 ], [ 72.8941915, 20.5999803 ], [ 72.8938865, 20.6008977 ], [ 72.8934059, 20.6027496 ], [ 72.8930484, 20.6040363 ], [ 72.8922839, 20.6066418 ], [ 72.8918403, 20.6079735 ], [ 72.8914221, 20.6098717 ], [ 72.8912599, 20.6107999 ], [ 72.8909689, 20.6120832 ], [ 72.8907213, 20.6131288 ], [ 72.8904595, 20.6141378 ], [ 72.8902835, 20.6146946 ], [ 72.890222183420548, 20.614877009765628 ], [ 72.8900446, 20.6154053 ], [ 72.889772, 20.6164386 ], [ 72.8886214, 20.6203094 ], [ 72.8876279, 20.6236387 ], [ 72.8869575, 20.6254189 ], [ 72.8866771, 20.6259301 ], [ 72.8866344, 20.6290184 ], [ 72.8863503, 20.629787 ], [ 72.8863325, 20.6310737 ], [ 72.886468, 20.6312038 ], [ 72.8881082, 20.6312238 ], [ 72.8890734, 20.6305925 ], [ 72.889084, 20.6298205 ], [ 72.8886816, 20.6293007 ], [ 72.8881367, 20.629165 ], [ 72.8875952, 20.6287727 ], [ 72.8877457, 20.6277449 ], [ 72.8885799, 20.6267256 ], [ 72.8890046, 20.6257012 ], [ 72.8895514, 20.6257078 ], [ 72.8902592, 20.6239148 ], [ 72.8902734, 20.6228853 ], [ 72.8898648, 20.6218214 ], [ 72.8900284, 20.6208231 ], [ 72.8908697, 20.6192892 ], [ 72.8913905, 20.6185981 ], [ 72.8925523, 20.616221 ], [ 72.8926876, 20.6150479 ], [ 72.892634136419034, 20.614877009765628 ], [ 72.8923113, 20.6138451 ], [ 72.8924902, 20.6131494 ], [ 72.8928837, 20.6120132 ], [ 72.8931628, 20.6115952 ], [ 72.8934431, 20.6110838 ], [ 72.8942207, 20.6099596 ], [ 72.895034, 20.6102252 ], [ 72.8944713, 20.611018 ], [ 72.8941738, 20.6118518 ], [ 72.8935749, 20.6142862 ], [ 72.893602532221919, 20.614677009765629 ], [ 72.8936454, 20.6152833 ], [ 72.8934088, 20.6161575 ], [ 72.8928044, 20.6177683 ], [ 72.8924757, 20.6188504 ], [ 72.8923306, 20.6204897 ], [ 72.8925487, 20.6218325 ], [ 72.8930505, 20.6210194 ], [ 72.8932973, 20.6204447 ], [ 72.8936532, 20.6199811 ], [ 72.894088, 20.6194341 ], [ 72.8949125, 20.619292 ], [ 72.8954401, 20.6195862 ], [ 72.895089, 20.620142 ], [ 72.8946789, 20.6206226 ], [ 72.8941137, 20.6217501 ], [ 72.8938581, 20.6228642 ], [ 72.8943631, 20.6237075 ], [ 72.894633, 20.6239681 ], [ 72.8946222, 20.6247402 ], [ 72.8939252, 20.6257613 ], [ 72.8931016, 20.6260087 ], [ 72.8932201, 20.6272971 ], [ 72.8937421, 20.6291051 ], [ 72.8945516, 20.6298872 ], [ 72.8946816, 20.6304035 ], [ 72.8952265, 20.6305385 ], [ 72.8957663, 20.6310599 ], [ 72.8965863, 20.63107 ], [ 72.8979638, 20.6303145 ], [ 72.8985124, 20.630193 ], [ 72.8989396, 20.6289112 ], [ 72.8993748, 20.6271146 ], [ 72.8997808, 20.6273769 ], [ 72.8998863, 20.6296948 ], [ 72.9007082, 20.6295757 ], [ 72.9011265, 20.6289377 ], [ 72.9011371, 20.6281656 ], [ 72.9008674, 20.627905 ], [ 72.9008708, 20.6276475 ], [ 72.9010097, 20.6275202 ], [ 72.9031968, 20.6275468 ], [ 72.9042762, 20.6285895 ], [ 72.9059074, 20.6292531 ], [ 72.9060685, 20.6274533 ], [ 72.9064877, 20.6268144 ], [ 72.9075812, 20.6268277 ], [ 72.9085287, 20.6274831 ], [ 72.9098534, 20.630588 ], [ 72.9107984, 20.6314999 ], [ 72.9121652, 20.6315164 ], [ 72.9125801, 20.6311357 ], [ 72.9134213, 20.6296016 ], [ 72.914114, 20.628966 ], [ 72.9146608, 20.6289726 ], [ 72.9147952, 20.6291034 ], [ 72.9147918, 20.6293606 ], [ 72.9145113, 20.6298721 ], [ 72.9145079, 20.6301295 ], [ 72.9149042, 20.6311639 ], [ 72.9132658, 20.631015 ], [ 72.9129906, 20.6311406 ], [ 72.9128464, 20.6316538 ], [ 72.9122926, 20.6321618 ], [ 72.9122822, 20.6329339 ], [ 72.9125521, 20.6331945 ], [ 72.9126821, 20.633711 ], [ 72.9102234, 20.6335521 ], [ 72.9099484, 20.633678 ], [ 72.9096538, 20.6352187 ], [ 72.9093805, 20.6352153 ], [ 72.9090086, 20.6323795 ], [ 72.9083433, 20.6310845 ], [ 72.9058723, 20.6318267 ], [ 72.9064102, 20.6324763 ], [ 72.9069536, 20.6327403 ], [ 72.9076241, 20.6336498 ], [ 72.9081639, 20.6341711 ], [ 72.9085568, 20.6354629 ], [ 72.9091036, 20.6354695 ], [ 72.9093559, 20.6370168 ], [ 72.910991, 20.6374222 ], [ 72.9120338, 20.6372784 ], [ 72.9134125, 20.6371393 ], [ 72.9141378, 20.6369696 ], [ 72.9153297, 20.6365037 ], [ 72.9161585, 20.6361794 ], [ 72.9192704, 20.6351026 ], [ 72.9201271, 20.6346181 ], [ 72.9208438, 20.6340252 ], [ 72.9213363, 20.6336844 ], [ 72.9233115, 20.6355534 ], [ 72.9224896, 20.6363255 ], [ 72.9221581, 20.6380244 ], [ 72.921148, 20.6379982 ], [ 72.9202055, 20.6381313 ], [ 72.9197254, 20.6385574 ], [ 72.9188965, 20.6391913 ], [ 72.9185183, 20.63993 ], [ 72.9167999, 20.6425122 ], [ 72.9166568, 20.6430253 ], [ 72.915833, 20.6432727 ], [ 72.915826, 20.6437874 ], [ 72.9141768, 20.6444105 ], [ 72.9122629, 20.6443875 ], [ 72.9114463, 20.6441202 ], [ 72.9111764, 20.6438594 ], [ 72.9106279, 20.6439821 ], [ 72.9106349, 20.6434672 ], [ 72.9092609, 20.6439654 ], [ 72.9092573, 20.6442228 ], [ 72.9100775, 20.6442327 ], [ 72.9097971, 20.6447441 ], [ 72.9087035, 20.6447309 ], [ 72.9086929, 20.6455029 ], [ 72.9084213, 20.6453705 ], [ 72.9070543, 20.645354 ], [ 72.9054193, 20.6449484 ], [ 72.9054262, 20.6444338 ], [ 72.9043344, 20.6442913 ], [ 72.9037823, 20.6446712 ], [ 72.9040416, 20.6457039 ], [ 72.9045884, 20.6457105 ], [ 72.9044478, 20.6459662 ], [ 72.904423, 20.6477677 ], [ 72.9042832, 20.6480234 ], [ 72.9037364, 20.6480168 ], [ 72.9038621, 20.6487904 ], [ 72.9033047, 20.6495559 ], [ 72.9031579, 20.6503262 ], [ 72.9026092, 20.6504479 ], [ 72.9015034, 20.6513357 ], [ 72.901359, 20.6518488 ], [ 72.9008016, 20.6526143 ], [ 72.9007946, 20.6531289 ], [ 72.9013308, 20.6539076 ], [ 72.9014503, 20.655196 ], [ 72.9020006, 20.6549454 ], [ 72.9022424, 20.6572648 ], [ 72.9033378, 20.6571489 ], [ 72.9034722, 20.6572797 ], [ 72.9038687, 20.6583141 ], [ 72.9049571, 20.6587131 ], [ 72.9068693, 20.6588654 ], [ 72.9068623, 20.6593801 ], [ 72.9076878, 20.6590036 ], [ 72.9082346, 20.6590102 ], [ 72.9086846, 20.6592325 ], [ 72.9087727, 20.6596607 ], [ 72.911791, 20.6589252 ], [ 72.9112336, 20.6596906 ], [ 72.910685, 20.6598121 ], [ 72.9093072, 20.6605676 ], [ 72.9090303, 20.6608218 ], [ 72.9082083, 20.6609408 ], [ 72.9080569, 20.6619686 ], [ 72.9085967, 20.6624899 ], [ 72.9085897, 20.6630047 ], [ 72.9084499, 20.6632604 ], [ 72.9054368, 20.6636095 ], [ 72.9043467, 20.6633389 ], [ 72.9038052, 20.6629465 ], [ 72.9036786, 20.6621729 ], [ 72.9038192, 20.6619172 ], [ 72.9024485, 20.6621578 ], [ 72.9024416, 20.6626726 ], [ 72.901069, 20.6630416 ], [ 72.9005151, 20.6635496 ], [ 72.8996929, 20.6636687 ], [ 72.8996859, 20.6641833 ], [ 72.8988621, 20.6644307 ], [ 72.8989842, 20.6654619 ], [ 72.8992541, 20.6657225 ], [ 72.8993841, 20.6662389 ], [ 72.8999311, 20.6662455 ], [ 72.9000496, 20.6675339 ], [ 72.9004514, 20.668182 ], [ 72.9015451, 20.6681952 ], [ 72.9018203, 20.6680703 ], [ 72.9019496, 20.6685866 ], [ 72.9020849, 20.6687167 ], [ 72.9026302, 20.6688524 ], [ 72.9028787, 20.6706571 ], [ 72.9023302, 20.6707787 ], [ 72.9020532, 20.6710327 ], [ 72.9015045, 20.6711552 ], [ 72.902163, 20.672965 ], [ 72.9027028, 20.6734863 ], [ 72.9030957, 20.6747781 ], [ 72.9036444, 20.6746556 ], [ 72.9047241, 20.6756983 ], [ 72.9052709, 20.675705 ], [ 72.905541, 20.6759658 ], [ 72.9060877, 20.6759724 ], [ 72.9063631, 20.6758475 ], [ 72.9063418, 20.6773916 ], [ 72.9071658, 20.6771442 ], [ 72.9073934, 20.6804931 ], [ 72.9068481, 20.6803574 ], [ 72.9065782, 20.6800966 ], [ 72.9054897, 20.6796978 ], [ 72.9057579, 20.6800867 ], [ 72.906303, 20.6802224 ], [ 72.9066916, 20.6817715 ], [ 72.9069615, 20.6820323 ], [ 72.9069509, 20.6828042 ], [ 72.9070845, 20.6830633 ], [ 72.9065376, 20.6830567 ], [ 72.9064109, 20.6822829 ], [ 72.9060084, 20.6817632 ], [ 72.9057349, 20.6817599 ], [ 72.9057243, 20.682532 ], [ 72.9040976, 20.6814827 ], [ 72.9042233, 20.6822563 ], [ 72.9050259, 20.683553 ], [ 72.9058322, 20.6845925 ], [ 72.9059624, 20.6851088 ], [ 72.9067793, 20.6853761 ], [ 72.907067, 20.68435 ], [ 72.9073404, 20.6843534 ], [ 72.9077254, 20.6861599 ], [ 72.9075856, 20.6864156 ], [ 72.9070369, 20.6865371 ], [ 72.9067598, 20.6867911 ], [ 72.9056642, 20.686907 ], [ 72.9063193, 20.6889741 ], [ 72.9062945, 20.6907756 ], [ 72.9068273, 20.6918115 ], [ 72.9069539, 20.6925853 ], [ 72.9053253, 20.6916641 ], [ 72.9045156, 20.6908822 ], [ 72.9036986, 20.6906148 ], [ 72.9034287, 20.6903542 ], [ 72.9028817, 20.6903475 ], [ 72.9026066, 20.6904732 ], [ 72.9027251, 20.6917616 ], [ 72.9025852, 20.6920174 ], [ 72.9017683, 20.6917501 ], [ 72.9018974, 20.6922665 ], [ 72.9028428, 20.6931784 ], [ 72.9033862, 20.6934424 ], [ 72.9044661, 20.6944851 ], [ 72.9050095, 20.6947492 ], [ 72.9055459, 20.6955278 ], [ 72.9060911, 20.6956635 ], [ 72.906084, 20.6961784 ], [ 72.9069044, 20.6961882 ], [ 72.9063469, 20.6969537 ], [ 72.9068938, 20.6969603 ], [ 72.9066098, 20.6977291 ], [ 72.9074321, 20.6976099 ], [ 72.90811, 20.6980047 ], [ 72.9080995, 20.6987768 ], [ 72.9074056, 20.6995405 ], [ 72.9068604, 20.6994048 ], [ 72.9063204, 20.6988833 ], [ 72.9055052, 20.6984878 ], [ 72.9051121, 20.6971961 ], [ 72.9044395, 20.6964158 ], [ 72.9033455, 20.6964023 ], [ 72.9034748, 20.6969187 ], [ 72.9030543, 20.6976858 ], [ 72.9025109, 20.6974218 ], [ 72.9021144, 20.6963874 ], [ 72.9018443, 20.6961268 ], [ 72.9017188, 20.695353 ], [ 72.9011666, 20.695732 ], [ 72.8995255, 20.6957119 ], [ 72.8992556, 20.6954511 ], [ 72.8987103, 20.6953164 ], [ 72.8987033, 20.695831 ], [ 72.897073, 20.6950389 ], [ 72.89708, 20.6945243 ], [ 72.8976236, 20.6947883 ], [ 72.8976306, 20.6942734 ], [ 72.8970836, 20.6942668 ], [ 72.8968207, 20.6934916 ], [ 72.8965472, 20.6934882 ], [ 72.8965402, 20.6940028 ], [ 72.895448, 20.6938603 ], [ 72.8951728, 20.6939862 ], [ 72.8953161, 20.693473 ], [ 72.8955931, 20.693219 ], [ 72.8956073, 20.6921897 ], [ 72.8949349, 20.6914093 ], [ 72.8932957, 20.69126 ], [ 72.8930241, 20.6911285 ], [ 72.8938568, 20.6902374 ], [ 72.8944038, 20.6902442 ], [ 72.8946755, 20.6903765 ], [ 72.8949596, 20.6896078 ], [ 72.8905858, 20.6894252 ], [ 72.8886769, 20.6890162 ], [ 72.8886803, 20.6887588 ], [ 72.8908734, 20.6883991 ], [ 72.8912887, 20.6880185 ], [ 72.8914365, 20.6872481 ], [ 72.8908895, 20.6872415 ], [ 72.8908931, 20.6869841 ], [ 72.8919923, 20.686611 ], [ 72.8928233, 20.685849 ], [ 72.8937854, 20.6854751 ], [ 72.8936633, 20.6844441 ], [ 72.8947591, 20.6843283 ], [ 72.8955724, 20.6848531 ], [ 72.8969415, 20.6847416 ], [ 72.8962715, 20.6837038 ], [ 72.8962376, 20.6830189 ], [ 72.8964193, 20.6829334 ], [ 72.8964229, 20.682676 ], [ 72.8961494, 20.6826726 ], [ 72.896053, 20.6828405 ], [ 72.895599, 20.6829234 ], [ 72.8954794, 20.681635 ], [ 72.8948069, 20.6808546 ], [ 72.89399, 20.6805872 ], [ 72.8937379, 20.6790397 ], [ 72.893191, 20.6790331 ], [ 72.8933308, 20.6787773 ], [ 72.8937451, 20.678525 ], [ 72.8938405, 20.6783564 ], [ 72.8941547, 20.6785301 ], [ 72.8942849, 20.6790465 ], [ 72.8952522, 20.6782861 ], [ 72.8952556, 20.6780287 ], [ 72.894853, 20.677509 ], [ 72.8937557, 20.677753 ], [ 72.8936557, 20.678178 ], [ 72.8933788, 20.678432 ], [ 72.8931981, 20.6785184 ], [ 72.8929388, 20.6774855 ], [ 72.892392, 20.6774789 ], [ 72.8924873, 20.6773103 ], [ 72.8934894, 20.6772349 ], [ 72.8933592, 20.6767186 ], [ 72.8934983, 20.6765912 ], [ 72.8948672, 20.6764797 ], [ 72.8947372, 20.6759631 ], [ 72.8944673, 20.6757025 ], [ 72.8943382, 20.6751861 ], [ 72.8935213, 20.6749187 ], [ 72.8935141, 20.6754336 ], [ 72.8924257, 20.6750336 ], [ 72.8916054, 20.6750236 ], [ 72.8910621, 20.6747596 ], [ 72.8894213, 20.6747395 ], [ 72.8888816, 20.6742181 ], [ 72.8861613, 20.6731552 ], [ 72.8856215, 20.6726337 ], [ 72.883173, 20.6717033 ], [ 72.8832685, 20.6715347 ], [ 72.8834501, 20.6714492 ], [ 72.8834607, 20.6706772 ], [ 72.8840076, 20.670684 ], [ 72.8841137, 20.6697433 ], [ 72.8842953, 20.6696579 ], [ 72.8852395, 20.6674406 ], [ 72.8854212, 20.6673551 ], [ 72.8855236, 20.6666719 ], [ 72.8857052, 20.6665865 ], [ 72.8860955, 20.6648771 ], [ 72.8862771, 20.6647917 ], [ 72.886376, 20.6643657 ], [ 72.8865576, 20.6642805 ], [ 72.8865612, 20.6640231 ], [ 72.8862877, 20.6640197 ], [ 72.8860107, 20.6642737 ], [ 72.8859109, 20.6646987 ], [ 72.8857302, 20.6647851 ], [ 72.8853389, 20.6664935 ], [ 72.8851585, 20.6665798 ], [ 72.8850549, 20.6672621 ], [ 72.8845973, 20.6676025 ], [ 72.883929, 20.6695649 ], [ 72.8837483, 20.6696513 ], [ 72.8837377, 20.6704232 ], [ 72.8831908, 20.6704165 ], [ 72.8830838, 20.6713563 ], [ 72.8809961, 20.6709044 ], [ 72.8811501, 20.6696193 ], [ 72.8808946, 20.6683292 ], [ 72.8806247, 20.6680684 ], [ 72.880362, 20.6672931 ], [ 72.8800921, 20.6670323 ], [ 72.8798402, 20.665485 ], [ 72.8797075, 20.6652258 ], [ 72.879434, 20.6652224 ], [ 72.879427, 20.6657373 ], [ 72.8788801, 20.6657305 ], [ 72.8788729, 20.6662451 ], [ 72.8783261, 20.6662385 ], [ 72.87875, 20.6652141 ], [ 72.879304, 20.6647061 ], [ 72.8793184, 20.6636768 ], [ 72.8795988, 20.6631654 ], [ 72.880569, 20.6622759 ], [ 72.8818077, 20.6616483 ], [ 72.8819592, 20.6606205 ], [ 72.8814142, 20.6604846 ], [ 72.8806028, 20.6598316 ], [ 72.8807427, 20.6595759 ], [ 72.8803936, 20.655196 ], [ 72.8812157, 20.6550769 ], [ 72.8816308, 20.6546965 ], [ 72.8824688, 20.6534198 ], [ 72.8824794, 20.6526477 ], [ 72.8826185, 20.6525201 ], [ 72.8828954, 20.6522663 ], [ 72.8842624, 20.6522829 ], [ 72.8844004, 20.6521565 ], [ 72.8844147, 20.651127 ], [ 72.8842821, 20.6508681 ], [ 72.8859224, 20.6508881 ], [ 72.8860836, 20.6490883 ], [ 72.8867854, 20.6478101 ], [ 72.8862403, 20.6476742 ], [ 72.8859706, 20.6474135 ], [ 72.8846107, 20.6468821 ], [ 72.8832437, 20.6468653 ], [ 72.8829685, 20.6469909 ], [ 72.8828205, 20.6477613 ], [ 72.8812709, 20.6510885 ], [ 72.8799022, 20.6512 ], [ 72.8782707, 20.6505368 ], [ 72.8782849, 20.6495075 ], [ 72.8780116, 20.6495041 ], [ 72.8777273, 20.6502727 ], [ 72.8771806, 20.6502659 ], [ 72.8770362, 20.6507791 ], [ 72.8767593, 20.6510331 ], [ 72.8766017, 20.6525753 ], [ 72.8755043, 20.6528193 ], [ 72.8753494, 20.6541043 ], [ 72.8750723, 20.6543583 ], [ 72.8750545, 20.6556451 ], [ 72.8749147, 20.6559008 ], [ 72.8743696, 20.6557649 ], [ 72.8740944, 20.6558906 ], [ 72.8742199, 20.6566643 ], [ 72.8739286, 20.6579476 ], [ 72.8741912, 20.6587231 ], [ 72.8744611, 20.6589839 ], [ 72.8744431, 20.6602706 ], [ 72.8738784, 20.6615506 ], [ 72.8736015, 20.6618046 ], [ 72.8727525, 20.6638533 ], [ 72.8724754, 20.6641072 ], [ 72.8724718, 20.6643646 ], [ 72.8727417, 20.6646252 ], [ 72.8725947, 20.6653956 ], [ 72.8720479, 20.665389 ], [ 72.8721698, 20.66642 ], [ 72.8715977, 20.6682147 ], [ 72.8713065, 20.669498 ], [ 72.8707451, 20.6705207 ], [ 72.8707343, 20.6712927 ], [ 72.8704539, 20.671804 ], [ 72.8698638, 20.6748855 ], [ 72.8695867, 20.6751395 ], [ 72.869576, 20.6759113 ], [ 72.8692953, 20.6764228 ], [ 72.8689967, 20.6782207 ], [ 72.8691231, 20.6789945 ], [ 72.8685763, 20.6789877 ], [ 72.86759, 20.6810348 ], [ 72.8670035, 20.6838588 ], [ 72.8664458, 20.6846241 ], [ 72.8658629, 20.6871907 ], [ 72.8653051, 20.6879559 ], [ 72.8652942, 20.688728 ], [ 72.8650135, 20.6892392 ], [ 72.8650027, 20.6900113 ], [ 72.8647185, 20.69078 ], [ 72.8644163, 20.6928353 ], [ 72.8638621, 20.6933432 ], [ 72.8632862, 20.6953952 ], [ 72.8630092, 20.6956492 ], [ 72.8629984, 20.6964212 ], [ 72.8624405, 20.6971865 ], [ 72.862149, 20.6984698 ], [ 72.861872, 20.6987236 ], [ 72.8612997, 20.7005184 ], [ 72.8612889, 20.7012905 ], [ 72.8604357, 20.7035963 ], [ 72.860425, 20.7043683 ], [ 72.8601443, 20.7048796 ], [ 72.8601333, 20.7056516 ], [ 72.8598563, 20.7059056 ], [ 72.859572, 20.7066743 ], [ 72.859561, 20.7074462 ], [ 72.8590069, 20.7079542 ], [ 72.8576286, 20.7113918 ], [ 72.8574416, 20.7121091 ], [ 72.8573442, 20.7125514 ], [ 72.8572675, 20.7129267 ], [ 72.8571181, 20.7135517 ], [ 72.8568671, 20.7146232 ], [ 72.8565932, 20.7157213 ], [ 72.8562797, 20.7168269 ], [ 72.855788, 20.7190868 ], [ 72.8555238, 20.7205419 ], [ 72.8554002, 20.7212935 ], [ 72.854963, 20.7229962 ], [ 72.8547251, 20.7244527 ], [ 72.8545164, 20.7252815 ], [ 72.8540781, 20.7268577 ], [ 72.8538413, 20.7279043 ], [ 72.8536849, 20.7284527 ], [ 72.8532176, 20.7305322 ], [ 72.8530723, 20.7311918 ], [ 72.8529258, 20.7318155 ], [ 72.8528081, 20.7326708 ], [ 72.8534078, 20.7332929 ], [ 72.8539115, 20.7319303 ], [ 72.8551561, 20.7297248 ], [ 72.8571232, 20.7282593 ], [ 72.856987, 20.7270702 ], [ 72.8567617, 20.7255249 ], [ 72.8564151, 20.7243057 ], [ 72.8563293, 20.7230674 ], [ 72.8566222, 20.7217438 ], [ 72.8570631, 20.7210906 ], [ 72.8576522, 20.7206851 ], [ 72.8580234, 20.7203781 ], [ 72.8582476, 20.7200469 ], [ 72.8588334, 20.7198402 ], [ 72.85932, 20.7197509 ], [ 72.8595957, 20.7197587 ], [ 72.8600889, 20.7197351 ], [ 72.8604516, 20.7197456 ], [ 72.8607651, 20.7198254 ], [ 72.8614365, 20.7198982 ], [ 72.8625437, 20.7197775 ], [ 72.8628956, 20.7196593 ], [ 72.8639497, 20.7194386 ], [ 72.8640683, 20.7184418 ], [ 72.8666599, 20.7182156 ], [ 72.8677576, 20.7179718 ], [ 72.8680349, 20.717718 ], [ 72.8702265, 20.7174876 ], [ 72.8713099, 20.7182732 ], [ 72.8729475, 20.7185509 ], [ 72.8736181, 20.7194605 ], [ 72.873881, 20.7202358 ], [ 72.8738702, 20.7210079 ], [ 72.8733123, 20.7217731 ], [ 72.8732908, 20.7233173 ], [ 72.8738271, 20.7240961 ], [ 72.8743238, 20.7277057 ], [ 72.8750027, 20.7280997 ], [ 72.8755499, 20.7281065 ], [ 72.8759723, 20.7272112 ], [ 72.8758576, 20.7256654 ], [ 72.8764045, 20.7256722 ], [ 72.8764117, 20.7251576 ], [ 72.8772271, 20.7255533 ], [ 72.8779014, 20.7262056 ], [ 72.8785659, 20.7276289 ], [ 72.8802036, 20.7279066 ], [ 72.8813015, 20.7276626 ], [ 72.8823939, 20.7278053 ], [ 72.8825123, 20.7290937 ], [ 72.8833149, 20.7303904 ], [ 72.8838336, 20.732456 ], [ 72.8839689, 20.7325858 ], [ 72.8845143, 20.7327217 ], [ 72.8844128, 20.7301466 ], [ 72.8838729, 20.7296251 ], [ 72.8838765, 20.7293677 ], [ 72.8841535, 20.7291139 ], [ 72.8847185, 20.7278338 ], [ 72.8847292, 20.7270617 ], [ 72.8844663, 20.7262865 ], [ 72.8842393, 20.7229376 ], [ 72.88452, 20.7224261 ], [ 72.8847538, 20.7154794 ], [ 72.8858443, 20.7157503 ], [ 72.8861322, 20.7147242 ], [ 72.886681, 20.7146017 ], [ 72.8902386, 20.7145172 ], [ 72.8901227, 20.7129714 ], [ 72.8909611, 20.7116947 ], [ 72.8913932, 20.7101557 ], [ 72.8930343, 20.7101757 ], [ 72.8930237, 20.7109478 ], [ 72.8952081, 20.7112319 ], [ 72.8949275, 20.7117433 ], [ 72.8932828, 20.7119805 ], [ 72.8934121, 20.712497 ], [ 72.893682, 20.7127576 ], [ 72.893657, 20.714559 ], [ 72.8933765, 20.7150704 ], [ 72.8932259, 20.7160982 ], [ 72.8913023, 20.7167176 ], [ 72.89075, 20.7170975 ], [ 72.8910021, 20.7186448 ], [ 72.8926415, 20.7187932 ], [ 72.8940021, 20.7193246 ], [ 72.8945419, 20.7198461 ], [ 72.8946765, 20.7199769 ], [ 72.8952057, 20.7212702 ], [ 72.8975011, 20.7234857 ], [ 72.8996895, 20.7235125 ], [ 72.9000254, 20.7237396 ], [ 72.8995642, 20.7247662 ], [ 72.8995946, 20.7255933 ], [ 72.899915, 20.7269905 ], [ 72.9011076, 20.7298901 ], [ 72.9015973, 20.7304504 ], [ 72.9028848, 20.7313829 ], [ 72.9080189, 20.7345537 ], [ 72.9081339, 20.7347333 ], [ 72.9083814, 20.7349298 ], [ 72.9081773, 20.7349687 ], [ 72.8991308, 20.7355716 ], [ 72.8991096, 20.7343923 ], [ 72.8968046, 20.7342878 ], [ 72.8959751, 20.7349215 ], [ 72.89555, 20.7359459 ], [ 72.8943118, 20.7358776 ], [ 72.8917275, 20.7356424 ], [ 72.8902019, 20.73691 ], [ 72.890331, 20.7374263 ], [ 72.8898466, 20.7383629 ], [ 72.8944886, 20.7387556 ], [ 72.8983572, 20.7405406 ], [ 72.8999908, 20.737466 ], [ 72.8996553, 20.7357443 ], [ 72.9089198, 20.735123 ], [ 72.9099197, 20.7356064 ], [ 72.9098233, 20.7357741 ], [ 72.9090919, 20.7361111 ], [ 72.9085007, 20.7364088 ], [ 72.9075552, 20.7369502 ], [ 72.9065132, 20.7374281 ], [ 72.9069725, 20.7409757 ], [ 72.9064147, 20.7417412 ], [ 72.906409945103633, 20.7420875 ], [ 72.9064041, 20.7425132 ], [ 72.9068095, 20.7429037 ], [ 72.9087211, 20.7431844 ], [ 72.9114463, 20.7439897 ], [ 72.9119934, 20.7439965 ], [ 72.9128035, 20.7447784 ], [ 72.914438, 20.7453131 ], [ 72.9148426, 20.7457045 ], [ 72.9152217, 20.7480256 ], [ 72.9157672, 20.7481606 ], [ 72.9168403, 20.7497179 ], [ 72.9176612, 20.7497279 ], [ 72.919022, 20.7502592 ], [ 72.9195621, 20.7507805 ], [ 72.9205103, 20.7514359 ], [ 72.9206407, 20.7519523 ], [ 72.9244621, 20.7526416 ], [ 72.9255496, 20.7531694 ], [ 72.9260968, 20.7531761 ], [ 72.9281361, 20.754102 ], [ 72.9282663, 20.7546183 ], [ 72.9290853, 20.7547565 ], [ 72.9298991, 20.7552811 ], [ 72.9307093, 20.756063 ], [ 72.9312531, 20.7563269 ], [ 72.9323476, 20.7563401 ], [ 72.933594, 20.7551972 ], [ 72.9338747, 20.754686 ], [ 72.9343346, 20.7510878 ], [ 72.9347409, 20.7513501 ], [ 72.9350076, 20.7518682 ], [ 72.9351238, 20.753414 ], [ 72.9356693, 20.7535488 ], [ 72.9358038, 20.7536796 ], [ 72.936032, 20.7570284 ], [ 72.9361675, 20.7571583 ], [ 72.9380794, 20.7574386 ], [ 72.9388896, 20.7582205 ], [ 72.939437, 20.7582271 ], [ 72.9401291, 20.7575924 ], [ 72.9408259, 20.7566994 ], [ 72.9424744, 20.7562044 ], [ 72.9427515, 20.7559502 ], [ 72.9443931, 20.7559699 ], [ 72.9460278, 20.7565042 ], [ 72.9462981, 20.7567648 ], [ 72.947659, 20.7572959 ], [ 72.9474846, 20.7575565 ], [ 72.9473378, 20.7578186 ], [ 72.9468779, 20.7597015 ], [ 72.9459809, 20.7599789 ], [ 72.9459739, 20.7604938 ], [ 72.9443289, 20.7607315 ], [ 72.9443219, 20.7612462 ], [ 72.9437728, 20.7613679 ], [ 72.9434958, 20.7616219 ], [ 72.9429467, 20.7617446 ], [ 72.9429159, 20.7623416 ], [ 72.941286, 20.7631398 ], [ 72.9410089, 20.763394 ], [ 72.939639, 20.7635066 ], [ 72.939632, 20.7640213 ], [ 72.9393601, 20.763889 ], [ 72.9325162, 20.7640642 ], [ 72.9311516, 20.7637903 ], [ 72.9303378, 20.7632656 ], [ 72.9284275, 20.762857 ], [ 72.9281401, 20.7638831 ], [ 72.9232096, 20.7642091 ], [ 72.9218309, 20.7649647 ], [ 72.9155377, 20.7648884 ], [ 72.9147222, 20.7644928 ], [ 72.9130138, 20.7593242 ], [ 72.9123516, 20.7577718 ], [ 72.9117991, 20.7581507 ], [ 72.9101503, 20.7586455 ], [ 72.9074143, 20.7586123 ], [ 72.9055115, 20.7576886 ], [ 72.9051148, 20.7566542 ], [ 72.9050033, 20.754851 ], [ 72.904186, 20.7545837 ], [ 72.9039265, 20.753551 ], [ 72.9020097, 20.7536557 ], [ 72.9017326, 20.7539098 ], [ 72.8998103, 20.7544012 ], [ 72.8965236, 20.7546183 ], [ 72.8962482, 20.754744 ], [ 72.8963631, 20.7562898 ], [ 72.8962197, 20.756803 ], [ 72.8956761, 20.7565387 ], [ 72.8956831, 20.7560241 ], [ 72.8937733, 20.7556142 ], [ 72.8934979, 20.75574 ], [ 72.8934765, 20.757284 ], [ 72.894022, 20.7574189 ], [ 72.8941566, 20.7575497 ], [ 72.8944015, 20.7596119 ], [ 72.8942616, 20.7598676 ], [ 72.8953614, 20.7594945 ], [ 72.8959177, 20.7588583 ], [ 72.8953703, 20.7588515 ], [ 72.8953811, 20.7580797 ], [ 72.8970227, 20.7580997 ], [ 72.8969942, 20.7601585 ], [ 72.8975414, 20.7601651 ], [ 72.8975485, 20.7596504 ], [ 72.8980957, 20.7596572 ], [ 72.8980174, 20.7653189 ], [ 72.8974701, 20.7653121 ], [ 72.8975994, 20.7658285 ], [ 72.8974453, 20.7671137 ], [ 72.8979961, 20.7668629 ], [ 72.897964, 20.7691791 ], [ 72.8963204, 20.7692872 ], [ 72.8949452, 20.7697852 ], [ 72.8943926, 20.7701649 ], [ 72.8943854, 20.7706795 ], [ 72.8949309, 20.7708145 ], [ 72.895602, 20.7717241 ], [ 72.8957215, 20.7730125 ], [ 72.8948989, 20.7731307 ], [ 72.8940726, 20.773507 ], [ 72.8947419, 20.7745448 ], [ 72.8951386, 20.7755792 ], [ 72.8959577, 20.7757175 ], [ 72.8963552, 20.7766238 ], [ 72.8970345, 20.7770176 ], [ 72.8978483, 20.7775425 ], [ 72.8992146, 20.7776884 ], [ 72.8990632, 20.778716 ], [ 72.8979543, 20.7797321 ], [ 72.8978109, 20.780245 ], [ 72.8972635, 20.7802384 ], [ 72.8976665, 20.7807581 ], [ 72.897915, 20.7825629 ], [ 72.8976308, 20.7833316 ], [ 72.8970762, 20.7838396 ], [ 72.8973108, 20.7866737 ], [ 72.8982565, 20.7875858 ], [ 72.8988056, 20.7874642 ], [ 72.8990579, 20.7890116 ], [ 72.9015279, 20.7885272 ], [ 72.9015207, 20.7890418 ], [ 72.9004244, 20.7891566 ], [ 72.9001473, 20.7894106 ], [ 72.898777, 20.789523 ], [ 72.8990454, 20.789912 ], [ 72.8995911, 20.7900477 ], [ 72.8997201, 20.790564 ], [ 72.9002603, 20.7910855 ], [ 72.9007935, 20.7921216 ], [ 72.9014674, 20.792902 ], [ 72.8992817, 20.7926179 ], [ 72.898713, 20.7941552 ], [ 72.8978955, 20.7938878 ], [ 72.897636, 20.7928551 ], [ 72.8970889, 20.7928485 ], [ 72.896833, 20.7915584 ], [ 72.8960156, 20.7912909 ], [ 72.8954862, 20.7899974 ], [ 72.8949405, 20.7898615 ], [ 72.8943987, 20.7894693 ], [ 72.8942684, 20.788953 ], [ 72.8938655, 20.7884332 ], [ 72.8930481, 20.7881658 ], [ 72.8929216, 20.787392 ], [ 72.8917084, 20.7860902 ], [ 72.890612, 20.7862049 ], [ 72.8900577, 20.786713 ], [ 72.8886841, 20.7870827 ], [ 72.8886769, 20.7875973 ], [ 72.8873049, 20.7878377 ], [ 72.8873013, 20.7880951 ], [ 72.8883924, 20.788366 ], [ 72.8883852, 20.7888806 ], [ 72.8889309, 20.7890156 ], [ 72.8893354, 20.7894072 ], [ 72.8893318, 20.7896644 ], [ 72.8890511, 20.7901758 ], [ 72.8888933, 20.7917183 ], [ 72.8883459, 20.7917115 ], [ 72.8886141, 20.7921004 ], [ 72.8891598, 20.7922363 ], [ 72.8880399, 20.7940242 ], [ 72.8874945, 20.7938884 ], [ 72.886668, 20.7942647 ], [ 72.8867973, 20.794781 ], [ 72.8870674, 20.7950418 ], [ 72.8871974, 20.7955582 ], [ 72.888294, 20.7954425 ], [ 72.8893726, 20.7966145 ], [ 72.8871868, 20.7963302 ], [ 72.8873195, 20.7965892 ], [ 72.887176, 20.7971023 ], [ 72.8860849, 20.7968315 ], [ 72.8860777, 20.7973461 ], [ 72.8852531, 20.7975933 ], [ 72.885246, 20.798108 ], [ 72.8846986, 20.7981014 ], [ 72.884554, 20.7986143 ], [ 72.8841369, 20.7991238 ], [ 72.8830475, 20.7987239 ], [ 72.8827774, 20.7984633 ], [ 72.8819564, 20.7984531 ], [ 72.8816863, 20.7981923 ], [ 72.8811409, 20.7980573 ], [ 72.8812664, 20.7988311 ], [ 72.8811265, 20.7990868 ], [ 72.8805809, 20.7989509 ], [ 72.8803055, 20.7990766 ], [ 72.8801609, 20.7995895 ], [ 72.8798837, 20.7998436 ], [ 72.8797328, 20.8008711 ], [ 72.879191, 20.800478 ], [ 72.8786453, 20.8003431 ], [ 72.8786563, 20.799571 ], [ 72.8781053, 20.7998216 ], [ 72.8781161, 20.7990496 ], [ 72.8770195, 20.7991643 ], [ 72.8761895, 20.7997978 ], [ 72.8760269, 20.8015975 ], [ 72.8761571, 20.802114 ], [ 72.8767045, 20.8021206 ], [ 72.8768336, 20.8026372 ], [ 72.8779175, 20.8034226 ], [ 72.8779031, 20.8044521 ], [ 72.8776223, 20.8049634 ], [ 72.8776187, 20.8052208 ], [ 72.8777542, 20.8053506 ], [ 72.8788489, 20.8053642 ], [ 72.879119, 20.8056249 ], [ 72.8810313, 20.8059059 ], [ 72.881854, 20.8057878 ], [ 72.8815731, 20.8062992 ], [ 72.8845782, 20.8067218 ], [ 72.8854047, 20.8063465 ], [ 72.8852603, 20.8068594 ], [ 72.884702, 20.8076247 ], [ 72.8846912, 20.8083968 ], [ 72.8850844, 20.8096886 ], [ 72.8856317, 20.8096954 ], [ 72.8856173, 20.8107247 ], [ 72.886163, 20.8108596 ], [ 72.8868377, 20.8115118 ], [ 72.8872399, 20.8121599 ], [ 72.8891503, 20.8125701 ], [ 72.8885922, 20.8133353 ], [ 72.8883202, 20.8132028 ], [ 72.8864043, 20.8131792 ], [ 72.8853042, 20.8135521 ], [ 72.8854334, 20.8140685 ], [ 72.8852934, 20.8143242 ], [ 72.8850197, 20.8143208 ], [ 72.8847604, 20.8132881 ], [ 72.8814743, 20.8133758 ], [ 72.8806495, 20.813623 ], [ 72.880095, 20.8141308 ], [ 72.8798213, 20.8141274 ], [ 72.8784618, 20.8134676 ], [ 72.8784546, 20.8139823 ], [ 72.8795457, 20.8142531 ], [ 72.8791239, 20.8150201 ], [ 72.8791131, 20.8157921 ], [ 72.8797852, 20.8167008 ], [ 72.8816903, 20.8174965 ], [ 72.8825132, 20.8173786 ], [ 72.8825024, 20.8181505 ], [ 72.8814042, 20.8183943 ], [ 72.8814004, 20.8186517 ], [ 72.8819479, 20.8186585 ], [ 72.8819443, 20.8189157 ], [ 72.8794737, 20.8194 ], [ 72.8795992, 20.8201737 ], [ 72.8797347, 20.8203038 ], [ 72.8802804, 20.8204396 ], [ 72.8802732, 20.8209543 ], [ 72.8797258, 20.8209475 ], [ 72.8797222, 20.8212049 ], [ 72.8808116, 20.8216039 ], [ 72.8829978, 20.8218883 ], [ 72.8832734, 20.8217636 ], [ 72.883266, 20.8222782 ], [ 72.882445, 20.822268 ], [ 72.8827134, 20.822657 ], [ 72.8832588, 20.8227929 ], [ 72.8832516, 20.8233075 ], [ 72.8821622, 20.8229076 ], [ 72.8807937, 20.8228906 ], [ 72.8802533, 20.8223691 ], [ 72.879706, 20.8223625 ], [ 72.8794304, 20.8224882 ], [ 72.8794376, 20.8219736 ], [ 72.878071, 20.8218275 ], [ 72.8772462, 20.8220747 ], [ 72.8753339, 20.8217934 ], [ 72.8745055, 20.8222981 ], [ 72.8731333, 20.8225383 ], [ 72.8725803, 20.822918 ], [ 72.8727022, 20.8239492 ], [ 72.8733671, 20.8253725 ], [ 72.8739128, 20.8255084 ], [ 72.8739056, 20.8260231 ], [ 72.8760917, 20.8263077 ], [ 72.8760846, 20.8268224 ], [ 72.8762878, 20.8276361 ], [ 72.8757892, 20.8283631 ], [ 72.8755045, 20.8291316 ], [ 72.8753601, 20.8296447 ], [ 72.8750827, 20.8298985 ], [ 72.8754758, 20.8311903 ], [ 72.8757351, 20.8322232 ], [ 72.8757205, 20.8332525 ], [ 72.8762662, 20.8333875 ], [ 72.8764008, 20.8335183 ], [ 72.8767443, 20.8338074 ], [ 72.8771895, 20.834006 ], [ 72.8779301, 20.8347264 ], [ 72.8792878, 20.8358383 ], [ 72.8800886, 20.8364978 ], [ 72.8807661, 20.83731 ], [ 72.882475, 20.8374091 ], [ 72.8839193, 20.8379058 ], [ 72.884992, 20.8389347 ], [ 72.8862876, 20.8412882 ], [ 72.8866865, 20.842162 ], [ 72.886877846815736, 20.843026731250003 ], [ 72.8868872, 20.843069 ], [ 72.8877496, 20.8442064 ], [ 72.8878315, 20.8457705 ], [ 72.888703, 20.84755 ], [ 72.8894711, 20.8484793 ], [ 72.8900025, 20.8496447 ], [ 72.8919072, 20.8511292 ], [ 72.8927709, 20.8521683 ], [ 72.8903063, 20.8518072 ], [ 72.8895876, 20.8519108 ], [ 72.8892265, 20.8525527 ], [ 72.8889521, 20.8531188 ], [ 72.8890853, 20.8540527 ], [ 72.8884315, 20.8544115 ], [ 72.8879835, 20.8551962 ], [ 72.8863501, 20.8562916 ], [ 72.8860762, 20.8562882 ], [ 72.8854429, 20.8556772 ], [ 72.885262, 20.8557634 ], [ 72.8854164, 20.8544784 ], [ 72.8851464, 20.8542177 ], [ 72.8848906, 20.8529276 ], [ 72.8843503, 20.8524062 ], [ 72.8838207, 20.8511126 ], [ 72.8835504, 20.8508518 ], [ 72.8826217, 20.8487813 ], [ 72.8826289, 20.8482667 ], [ 72.8815374, 20.8479957 ], [ 72.8816328, 20.8478271 ], [ 72.8812781, 20.846963 ], [ 72.8807323, 20.8468271 ], [ 72.8804622, 20.8465662 ], [ 72.8790951, 20.8464211 ], [ 72.8774635, 20.8456288 ], [ 72.8730942, 20.8448023 ], [ 72.8692671, 20.8443682 ], [ 72.8689952, 20.8442366 ], [ 72.8691352, 20.8439809 ], [ 72.869047218590893, 20.843026731250003 ], [ 72.869047218590879, 20.843026731250003 ], [ 72.8688976, 20.8414041 ], [ 72.8684947, 20.8408843 ], [ 72.8676754, 20.840745 ], [ 72.8655, 20.8396883 ], [ 72.8638629, 20.8392824 ], [ 72.8621713, 20.8427354 ], [ 72.861936579394325, 20.843026731250003 ], [ 72.8602205, 20.8451567 ], [ 72.860768, 20.8451635 ], [ 72.8607534, 20.846193 ], [ 72.8585707, 20.8456509 ], [ 72.8585635, 20.8461656 ], [ 72.8580196, 20.8459013 ], [ 72.8580305, 20.8451293 ], [ 72.857483, 20.8451225 ], [ 72.8550339, 20.8440622 ], [ 72.8550411, 20.8435475 ], [ 72.8547746, 20.8430295 ], [ 72.854754519817305, 20.843026731250003 ], [ 72.8532117, 20.842814 ], [ 72.8534168, 20.8422402 ], [ 72.8499003, 20.8392359 ], [ 72.8496248, 20.8393616 ], [ 72.8492466, 20.8370403 ], [ 72.8489765, 20.8367794 ], [ 72.8489874, 20.8360076 ], [ 72.8488548, 20.8357485 ], [ 72.8480372, 20.8354808 ], [ 72.8480445, 20.8349662 ], [ 72.8474989, 20.8348301 ], [ 72.8469568, 20.8344377 ], [ 72.8471078, 20.83341 ], [ 72.8450591, 20.8331268 ], [ 72.8451547, 20.8329582 ], [ 72.84507, 20.832355 ], [ 72.8450736, 20.8320975 ], [ 72.8489151, 20.831502 ], [ 72.8527527, 20.8311644 ], [ 72.8539129, 20.8304387 ], [ 72.8564779, 20.8299519 ], [ 72.8563662, 20.828149 ], [ 72.8558296, 20.8273701 ], [ 72.8554269, 20.8268504 ], [ 72.855709, 20.8257699 ], [ 72.8545097, 20.8242523 ], [ 72.8534131, 20.8243669 ], [ 72.8531412, 20.8242351 ], [ 72.8497285, 20.8223754 ], [ 72.8494584, 20.8221146 ], [ 72.8494732, 20.8210853 ], [ 72.8504571, 20.819296 ], [ 72.8499098, 20.819289 ], [ 72.8494841, 20.8203132 ], [ 72.8492067, 20.8205672 ], [ 72.848782, 20.8215914 ], [ 72.8438461, 20.8221724 ], [ 72.8435743, 20.8220407 ], [ 72.843685, 20.8238437 ], [ 72.8439513, 20.824362 ], [ 72.8439256, 20.8261633 ], [ 72.8434044, 20.8273552 ], [ 72.8432235, 20.8274413 ], [ 72.8432418, 20.8261546 ], [ 72.842972, 20.8258938 ], [ 72.8426981, 20.8258904 ], [ 72.8426945, 20.8261478 ], [ 72.8428729, 20.8262376 ], [ 72.8425425, 20.8271754 ], [ 72.842125, 20.827685 ], [ 72.8413038, 20.8276746 ], [ 72.8419988, 20.8269112 ], [ 72.8422798, 20.8263999 ], [ 72.8422872, 20.8258853 ], [ 72.8424282, 20.8256296 ], [ 72.840795, 20.8249652 ], [ 72.8388773, 20.8250701 ], [ 72.8388699, 20.8255848 ], [ 72.8383207, 20.8257061 ], [ 72.8377676, 20.8260856 ], [ 72.8374792, 20.8271115 ], [ 72.836658, 20.8271011 ], [ 72.8368054, 20.826331 ], [ 72.8372258, 20.8256923 ], [ 72.837775, 20.825571 ], [ 72.8379187, 20.825058 ], [ 72.8377969, 20.8240271 ], [ 72.8386146, 20.8242947 ], [ 72.8389066, 20.8230114 ], [ 72.8391766, 20.8232722 ], [ 72.8394503, 20.8232756 ], [ 72.8394539, 20.8230184 ], [ 72.8390466, 20.8227558 ], [ 72.8390502, 20.8224984 ], [ 72.8391895, 20.822371 ], [ 72.8397387, 20.8222497 ], [ 72.8397314, 20.8227645 ], [ 72.8402806, 20.8226422 ], [ 72.8419211, 20.8227921 ], [ 72.8420757, 20.8215071 ], [ 72.841943, 20.821248 ], [ 72.8416694, 20.8212446 ], [ 72.8416546, 20.8222739 ], [ 72.8413809, 20.8222705 ], [ 72.8411218, 20.8212376 ], [ 72.8405764, 20.8211017 ], [ 72.8401288, 20.8206218 ], [ 72.8401744, 20.8204536 ], [ 72.8405928, 20.8199441 ], [ 72.8400455, 20.8199371 ], [ 72.8400528, 20.8194224 ], [ 72.8408703, 20.8196903 ], [ 72.8407438, 20.8189165 ], [ 72.8403411, 20.8183966 ], [ 72.8378742, 20.818623 ], [ 72.8380179, 20.8181098 ], [ 72.838157, 20.8179825 ], [ 72.8387062, 20.8178613 ], [ 72.8387174, 20.8170892 ], [ 72.8381698, 20.8170822 ], [ 72.8381772, 20.8165676 ], [ 72.8387264, 20.8164455 ], [ 72.8388646, 20.8163189 ], [ 72.839013, 20.8155487 ], [ 72.8373709, 20.8155279 ], [ 72.8371118, 20.8144952 ], [ 72.8379311, 20.8146338 ], [ 72.8380693, 20.8145071 ], [ 72.837944, 20.8137335 ], [ 72.8384858, 20.8141259 ], [ 72.8395805, 20.8141397 ], [ 72.8397187, 20.8140133 ], [ 72.8398744, 20.8127283 ], [ 72.8402808, 20.8129908 ], [ 72.8404108, 20.8135071 ], [ 72.8412301, 20.8136457 ], [ 72.8413683, 20.8135192 ], [ 72.8414085, 20.8106886 ], [ 72.8410241, 20.8088819 ], [ 72.8404732, 20.8091325 ], [ 72.8411345, 20.807684 ], [ 72.8413144, 20.8077269 ], [ 72.8418544, 20.8082486 ], [ 72.8424, 20.8083845 ], [ 72.8424146, 20.8073552 ], [ 72.8432339, 20.8074937 ], [ 72.8437739, 20.8080153 ], [ 72.8448667, 20.8081582 ], [ 72.8447404, 20.8073845 ], [ 72.8452878, 20.8073913 ], [ 72.8454233, 20.8075213 ], [ 72.845697, 20.8075247 ], [ 72.8458351, 20.8073983 ], [ 72.8461271, 20.806115 ], [ 72.8464044, 20.8058611 ], [ 72.8464118, 20.8053463 ], [ 72.846689, 20.8050925 ], [ 72.8466527, 20.8045802 ], [ 72.8462025, 20.8043835 ], [ 72.8451916, 20.8045589 ], [ 72.845047, 20.8050719 ], [ 72.845177, 20.8055882 ], [ 72.8446316, 20.8054523 ], [ 72.8440914, 20.8049307 ], [ 72.8432704, 20.8049203 ], [ 72.8429912, 20.8053034 ], [ 72.8416174, 20.8056717 ], [ 72.8397581, 20.8063331 ], [ 72.8385977, 20.8062775 ], [ 72.8377803, 20.8060099 ], [ 72.8364084, 20.8062499 ], [ 72.8342133, 20.8066079 ], [ 72.8336586, 20.8071157 ], [ 72.8325584, 20.8074882 ], [ 72.8324138, 20.8080012 ], [ 72.8319963, 20.8085107 ], [ 72.8308979, 20.8087542 ], [ 72.8307533, 20.8092671 ], [ 72.8288117, 20.8110443 ], [ 72.8285233, 20.8120702 ], [ 72.8279686, 20.8125778 ], [ 72.8276616, 20.8148904 ], [ 72.8262524, 20.8177037 ], [ 72.826105, 20.818474 ], [ 72.8252619, 20.8200076 ], [ 72.8249733, 20.8210335 ], [ 72.8248211, 20.8220611 ], [ 72.8241226, 20.8230817 ], [ 72.8241043, 20.8243684 ], [ 72.8229761, 20.8266704 ], [ 72.8212708, 20.8310242 ], [ 72.8211224, 20.8317946 ], [ 72.8201277, 20.8343557 ], [ 72.8192621, 20.8374332 ], [ 72.8188287, 20.838972 ], [ 72.8179854, 20.8405056 ], [ 72.8176968, 20.8415315 ], [ 72.8171343, 20.8425538 ], [ 72.816854738824034, 20.843226731250002 ], [ 72.8162834, 20.844602 ], [ 72.8148665, 20.8479299 ], [ 72.8142967, 20.8494668 ], [ 72.8140117, 20.8502353 ], [ 72.8128832, 20.8525373 ], [ 72.8120359, 20.8543281 ], [ 72.8111922, 20.8558616 ], [ 72.8106223, 20.8573986 ], [ 72.8100525, 20.8589355 ], [ 72.8093498, 20.8602136 ], [ 72.8086426, 20.8617486 ], [ 72.8083502, 20.8630319 ], [ 72.8077915, 20.8637968 ], [ 72.8072252, 20.8650765 ], [ 72.8069327, 20.8663596 ], [ 72.8060965, 20.8673784 ], [ 72.8056526, 20.8696891 ], [ 72.8045556, 20.8698032 ], [ 72.8040024, 20.8701827 ], [ 72.8035651, 20.8719786 ], [ 72.80301, 20.8724863 ], [ 72.8018737, 20.8753029 ], [ 72.8013148, 20.8760678 ], [ 72.8013073, 20.8765825 ], [ 72.8004596, 20.8783732 ], [ 72.8001822, 20.8786271 ], [ 72.7996121, 20.880164 ], [ 72.798198, 20.8832343 ], [ 72.7979204, 20.8834882 ], [ 72.7967839, 20.8863046 ], [ 72.7962287, 20.8868121 ], [ 72.7953772, 20.8888601 ], [ 72.7953697, 20.8893747 ], [ 72.794807, 20.890397 ], [ 72.7947994, 20.8909117 ], [ 72.793659, 20.8939856 ], [ 72.7931001, 20.8947505 ], [ 72.7922485, 20.8967985 ], [ 72.7922409, 20.8973131 ], [ 72.7916783, 20.8983352 ], [ 72.7913742, 20.9003904 ], [ 72.790804, 20.9019272 ], [ 72.7902449, 20.9026923 ], [ 72.7764303, 20.9136002 ], [ 72.7745659, 20.9150722 ], [ 72.7733375, 20.915531166113698 ], [ 72.7699062, 20.9168132 ], [ 72.7663063, 20.923026 ], [ 72.7653933, 20.9255323 ], [ 72.7648227, 20.9270691 ], [ 72.764275, 20.9270619 ], [ 72.7645411, 20.9275802 ], [ 72.7639934, 20.927573 ], [ 72.7638482, 20.9280857 ], [ 72.763293, 20.9285932 ], [ 72.7630076, 20.9293617 ], [ 72.7621745, 20.9301228 ], [ 72.7616152, 20.9308877 ], [ 72.7613298, 20.9316559 ], [ 72.7602075, 20.9334427 ], [ 72.7599297, 20.9336966 ], [ 72.7590813, 20.935487 ], [ 72.7588034, 20.9357408 ], [ 72.7585181, 20.9365091 ], [ 72.7579626, 20.9370165 ], [ 72.7573958, 20.9382959 ], [ 72.7565587, 20.9393144 ], [ 72.7559917, 20.9405937 ], [ 72.7557139, 20.9408476 ], [ 72.7554285, 20.9416159 ], [ 72.7540244, 20.9439137 ], [ 72.7537466, 20.9441674 ], [ 72.7534496, 20.9457077 ], [ 72.7525933, 20.9480128 ], [ 72.7523156, 20.9482664 ], [ 72.7517447, 20.9498031 ], [ 72.7514515, 20.9510861 ], [ 72.75144, 20.9518581 ], [ 72.7500357, 20.9541558 ], [ 72.7491754, 20.9567181 ], [ 72.7488976, 20.9569719 ], [ 72.7487534, 20.9574847 ], [ 72.7495791, 20.9572382 ], [ 72.7495676, 20.9580103 ], [ 72.7482017, 20.9577347 ], [ 72.7477711, 20.959016 ], [ 72.7477556, 20.9600452 ], [ 72.7471962, 20.9608099 ], [ 72.7471885, 20.9613246 ], [ 72.7466213, 20.9626039 ], [ 72.7466137, 20.9631186 ], [ 72.7460541, 20.9638833 ], [ 72.7460425, 20.9646551 ], [ 72.7454793, 20.9656773 ], [ 72.7454716, 20.9661919 ], [ 72.7437623, 20.9705444 ], [ 72.7437505, 20.9713165 ], [ 72.7431911, 20.9720811 ], [ 72.7431834, 20.9725958 ], [ 72.7426237, 20.9733605 ], [ 72.7426122, 20.9741324 ], [ 72.7411805, 20.9782312 ], [ 72.7411728, 20.9787459 ], [ 72.7403198, 20.9807935 ], [ 72.740042, 20.9810471 ], [ 72.7397487, 20.98233 ], [ 72.739189, 20.9830947 ], [ 72.7391775, 20.9838668 ], [ 72.7380427, 20.9864253 ], [ 72.7380312, 20.9871974 ], [ 72.7377494, 20.9877082 ], [ 72.7364395, 20.9928383 ], [ 72.7369874, 20.9928454 ], [ 72.736694, 20.9941284 ], [ 72.7361459, 20.9941212 ], [ 72.7362476, 20.9964387 ], [ 72.7361072, 20.9966942 ], [ 72.7355612, 20.9965578 ], [ 72.7352852, 20.9966833 ], [ 72.7348581, 20.9977071 ], [ 72.7348543, 20.9979643 ], [ 72.7352503, 20.9989991 ], [ 72.7357982, 20.9990065 ], [ 72.7357904, 20.9995211 ], [ 72.7355185, 20.9993882 ], [ 72.7349685, 20.9995101 ], [ 72.7347959, 21.0018241 ], [ 72.7345181, 21.0020777 ], [ 72.7345064, 21.0028498 ], [ 72.7349103, 21.0033699 ], [ 72.7343622, 21.0033625 ], [ 72.7343544, 21.0038772 ], [ 72.7349023, 21.0038844 ], [ 72.7344714, 21.0051656 ], [ 72.7341936, 21.0054192 ], [ 72.7339078, 21.0061875 ], [ 72.7338963, 21.0069594 ], [ 72.7336183, 21.007213 ], [ 72.7336067, 21.0079851 ], [ 72.7333287, 21.0082387 ], [ 72.7330274, 21.0100363 ], [ 72.7334311, 21.0105563 ], [ 72.7326071, 21.0106736 ], [ 72.7323351, 21.0105417 ], [ 72.7321743, 21.0120838 ], [ 72.7318925, 21.0125948 ], [ 72.7312977, 21.0156751 ], [ 72.7310159, 21.0161862 ], [ 72.7304327, 21.0184946 ], [ 72.7298728, 21.0192593 ], [ 72.7291531, 21.0215659 ], [ 72.7283389, 21.0210403 ], [ 72.728139, 21.0251556 ], [ 72.7278572, 21.0256664 ], [ 72.7278492, 21.0261811 ], [ 72.7272856, 21.027203 ], [ 72.7272777, 21.0277176 ], [ 72.7261386, 21.0305334 ], [ 72.7261308, 21.031048 ], [ 72.7255708, 21.0318125 ], [ 72.7252696, 21.0336101 ], [ 72.7247018, 21.0348892 ], [ 72.7246901, 21.0356613 ], [ 72.7241303, 21.0364258 ], [ 72.7240949, 21.0387416 ], [ 72.7245844, 21.0426086 ], [ 72.7248507, 21.043127 ], [ 72.724835, 21.0441561 ], [ 72.723684, 21.0477439 ], [ 72.724193, 21.0503243 ], [ 72.7243287, 21.0504543 ], [ 72.7248749, 21.0505908 ], [ 72.7247413, 21.0503317 ], [ 72.724749, 21.049817 ], [ 72.7251665, 21.0494362 ], [ 72.7254408, 21.0494398 ], [ 72.7259753, 21.0503481 ], [ 72.725427, 21.0503408 ], [ 72.7255557, 21.0508573 ], [ 72.725826, 21.0511183 ], [ 72.726218, 21.0524103 ], [ 72.7267644, 21.0525458 ], [ 72.728685, 21.0524434 ], [ 72.7288294, 21.0519306 ], [ 72.7291074, 21.051677 ], [ 72.7289787, 21.0511604 ], [ 72.7295268, 21.0511678 ], [ 72.7295542, 21.0493666 ], [ 72.7301044, 21.0492447 ], [ 72.7306602, 21.0487375 ], [ 72.7317587, 21.0486239 ], [ 72.7317664, 21.0481094 ], [ 72.7345171, 21.0475022 ], [ 72.735077, 21.0467377 ], [ 72.7357676, 21.0463612 ], [ 72.7355324, 21.0437843 ], [ 72.7339112, 21.0422187 ], [ 72.7339152, 21.0419613 ], [ 72.7343365, 21.041323 ], [ 72.7348847, 21.0413304 ], [ 72.7367955, 21.0418705 ], [ 72.7381582, 21.0424035 ], [ 72.740073, 21.0426863 ], [ 72.7411635, 21.0430873 ], [ 72.7409949, 21.045144 ], [ 72.7420796, 21.0459304 ], [ 72.7422055, 21.0467042 ], [ 72.7391826, 21.0471788 ], [ 72.7391788, 21.047436 ], [ 72.7408214, 21.0475861 ], [ 72.7410917, 21.0478471 ], [ 72.7432845, 21.0478762 ], [ 72.7438248, 21.0483982 ], [ 72.7449174, 21.04867 ], [ 72.7451934, 21.0485454 ], [ 72.7453223, 21.049062 ], [ 72.7468207, 21.0497248 ], [ 72.7470909, 21.0499858 ], [ 72.7481873, 21.0500002 ], [ 72.7490134, 21.0497539 ], [ 72.7514805, 21.0497866 ], [ 72.7523066, 21.0495402 ], [ 72.7561459, 21.0494627 ], [ 72.7560161, 21.0489461 ], [ 72.7552055, 21.0481633 ], [ 72.7549467, 21.0471304 ], [ 72.7545438, 21.0466105 ], [ 72.7537254, 21.0463423 ], [ 72.7534629, 21.0455666 ], [ 72.7545574, 21.0457093 ], [ 72.7551017, 21.0459739 ], [ 72.7561981, 21.0459885 ], [ 72.759468, 21.0473185 ], [ 72.7600163, 21.0473256 ], [ 72.7612587, 21.0466991 ], [ 72.7614041, 21.0461862 ], [ 72.7603077, 21.0461718 ], [ 72.7601779, 21.0456553 ], [ 72.7597749, 21.0451353 ], [ 72.7586783, 21.0451208 ], [ 72.7584198, 21.0440879 ], [ 72.7578736, 21.0439516 ], [ 72.7576033, 21.0436906 ], [ 72.7570569, 21.0435553 ], [ 72.7567944, 21.0427796 ], [ 72.7537853, 21.0423534 ], [ 72.7526946, 21.0419533 ], [ 72.7525725, 21.0409223 ], [ 72.7523062, 21.0404041 ], [ 72.7527564, 21.0378363 ], [ 72.7546789, 21.0376044 ], [ 72.7546904, 21.0368324 ], [ 72.753044, 21.036939 ], [ 72.7524978, 21.0368034 ], [ 72.7525094, 21.0360316 ], [ 72.7522334, 21.0361561 ], [ 72.7514111, 21.0361452 ], [ 72.7511389, 21.0360134 ], [ 72.7510091, 21.0354969 ], [ 72.7506063, 21.0349768 ], [ 72.7511544, 21.0349841 ], [ 72.7507621, 21.0336921 ], [ 72.7509112, 21.0329219 ], [ 72.7520057, 21.0330646 ], [ 72.7526999, 21.0324309 ], [ 72.7527116, 21.0316589 ], [ 72.7517953, 21.0288157 ], [ 72.7526116, 21.0292121 ], [ 72.753434, 21.029223 ], [ 72.7538503, 21.0288429 ], [ 72.7539955, 21.0283302 ], [ 72.7550917, 21.0283446 ], [ 72.7553504, 21.0293774 ], [ 72.7559004, 21.0292555 ], [ 72.7560389, 21.0291293 ], [ 72.7561841, 21.0286163 ], [ 72.7568611, 21.0291401 ], [ 72.7569909, 21.0296566 ], [ 72.7575411, 21.0295347 ], [ 72.7578112, 21.0297955 ], [ 72.7583595, 21.0298029 ], [ 72.7584978, 21.0296764 ], [ 72.7585347, 21.0301032 ], [ 72.7583536, 21.0301892 ], [ 72.7582261, 21.0324154 ], [ 72.7580448, 21.0325014 ], [ 72.7579405, 21.0331837 ], [ 72.7577592, 21.0332697 ], [ 72.7576509, 21.0342094 ], [ 72.7574699, 21.0342954 ], [ 72.7573653, 21.0349777 ], [ 72.7571841, 21.0350637 ], [ 72.7570796, 21.035746 ], [ 72.7568985, 21.0358322 ], [ 72.7567787, 21.0375436 ], [ 72.7565974, 21.0376297 ], [ 72.7564929, 21.0383118 ], [ 72.7563119, 21.038398 ], [ 72.7563079, 21.0386553 ], [ 72.7565819, 21.038659 ], [ 72.7566778, 21.0384905 ], [ 72.75686, 21.0384052 ], [ 72.7569635, 21.0377222 ], [ 72.7571455, 21.0376369 ], [ 72.7572646, 21.0359246 ], [ 72.7574466, 21.0358394 ], [ 72.7575502, 21.0351561 ], [ 72.7577324, 21.0350711 ], [ 72.7578358, 21.0343878 ], [ 72.758018, 21.0343026 ], [ 72.7581253, 21.0333621 ], [ 72.7583075, 21.0332771 ], [ 72.7584109, 21.0325938 ], [ 72.7585931, 21.0325086 ], [ 72.7587197, 21.0302816 ], [ 72.7589036, 21.0300673 ], [ 72.759996, 21.0303391 ], [ 72.7604011, 21.0307309 ], [ 72.7607857, 21.0325375 ], [ 72.7602376, 21.0325303 ], [ 72.7605058, 21.0329195 ], [ 72.7629571, 21.0339813 ], [ 72.7632311, 21.0339849 ], [ 72.763787, 21.0334774 ], [ 72.7643372, 21.0333565 ], [ 72.7644814, 21.0328437 ], [ 72.7648987, 21.0324627 ], [ 72.7662691, 21.0324806 ], [ 72.7664037, 21.0326116 ], [ 72.7665335, 21.033128 ], [ 72.7670798, 21.0332633 ], [ 72.7672145, 21.0333943 ], [ 72.7674655, 21.0349418 ], [ 72.7676012, 21.0350718 ], [ 72.7706141, 21.0352404 ], [ 72.7708728, 21.0362733 ], [ 72.7714211, 21.0362805 ], [ 72.7715653, 21.0357677 ], [ 72.7724028, 21.0347492 ], [ 72.7728182, 21.0344973 ], [ 72.7728029, 21.0355266 ], [ 72.7733375, 21.035658978074668 ], [ 72.7733493, 21.0356619 ], [ 72.7738896, 21.0361837 ], [ 72.7752601, 21.0362017 ], [ 72.7758006, 21.0367235 ], [ 72.7774413, 21.0370025 ], [ 72.7782521, 21.0377851 ], [ 72.7796207, 21.0379321 ], [ 72.7797458, 21.0387059 ], [ 72.7800161, 21.0389667 ], [ 72.7800085, 21.0394814 ], [ 72.7782005, 21.0412593 ], [ 72.7776524, 21.0412521 ], [ 72.7775556, 21.0414198 ], [ 72.776006, 21.0413589 ], [ 72.7749191, 21.0407018 ], [ 72.7751741, 21.0419919 ], [ 72.7754502, 21.0418664 ], [ 72.7773687, 21.0418915 ], [ 72.7777407, 21.0415984 ], [ 72.7787412, 21.0417811 ], [ 72.7784557, 21.0425496 ], [ 72.776261, 21.042649 ], [ 72.7759849, 21.0427745 ], [ 72.7758881, 21.0429422 ], [ 72.7733375, 21.043114068514768 ], [ 72.7715918, 21.0432317 ], [ 72.7714619, 21.0427154 ], [ 72.7710588, 21.0421952 ], [ 72.7707828, 21.04232 ], [ 72.7696864, 21.0423056 ], [ 72.7694143, 21.0421737 ], [ 72.7695547, 21.0419182 ], [ 72.7705298, 21.0409015 ], [ 72.7675111, 21.0411193 ], [ 72.767659, 21.0403491 ], [ 72.7675264, 21.04009 ], [ 72.766152, 21.0403292 ], [ 72.7655808, 21.041866 ], [ 72.7686016, 21.0415192 ], [ 72.7690064, 21.041911 ], [ 72.7688622, 21.0424239 ], [ 72.7672119, 21.0427877 ], [ 72.766934, 21.0430414 ], [ 72.7658358, 21.0431561 ], [ 72.7659607, 21.0439299 ], [ 72.7660964, 21.0440599 ], [ 72.7682948, 21.0437033 ], [ 72.7681419, 21.0447307 ], [ 72.7678603, 21.0452417 ], [ 72.7671641, 21.0460047 ], [ 72.7666158, 21.0459975 ], [ 72.7666042, 21.0467694 ], [ 72.7674247, 21.0469085 ], [ 72.7677025, 21.0466547 ], [ 72.7693491, 21.0465481 ], [ 72.7693415, 21.0470627 ], [ 72.7696175, 21.0469372 ], [ 72.7712602, 21.0470879 ], [ 72.7709975, 21.0463124 ], [ 72.772092, 21.0464549 ], [ 72.7722268, 21.0465859 ], [ 72.7723566, 21.0471024 ], [ 72.7729047, 21.0471096 ], [ 72.7730529, 21.0463394 ], [ 72.7726575, 21.0453047 ], [ 72.7733375, 21.045207026822759 ], [ 72.7734818, 21.0451863 ], [ 72.774028, 21.0453226 ], [ 72.7736316, 21.044288 ], [ 72.7736394, 21.0437734 ], [ 72.7740567, 21.0433924 ], [ 72.7759773, 21.0432892 ], [ 72.7760731, 21.0431208 ], [ 72.779, 21.042814 ], [ 72.7788586, 21.0430695 ], [ 72.7788395, 21.0443563 ], [ 72.7791098, 21.0446171 ], [ 72.7792359, 21.0453908 ], [ 72.7795101, 21.0453944 ], [ 72.7796734, 21.043595 ], [ 72.7800907, 21.0432139 ], [ 72.7803648, 21.0432175 ], [ 72.7811793, 21.043743 ], [ 72.7826655, 21.0451782 ], [ 72.7826579, 21.0456929 ], [ 72.7833322, 21.0464738 ], [ 72.7822321, 21.0467169 ], [ 72.7821313, 21.0471417 ], [ 72.7819503, 21.0472279 ], [ 72.7819465, 21.0474852 ], [ 72.7822205, 21.0474887 ], [ 72.7823164, 21.0473203 ], [ 72.7830429, 21.0474995 ], [ 72.7827611, 21.0480106 ], [ 72.7824889, 21.0478779 ], [ 72.7816666, 21.0478671 ], [ 72.7813906, 21.0479926 ], [ 72.7815158, 21.0487664 ], [ 72.781786, 21.0490274 ], [ 72.7819121, 21.0498012 ], [ 72.7821861, 21.0498048 ], [ 72.7823343, 21.0490346 ], [ 72.7824736, 21.0489072 ], [ 72.7830238, 21.048786 ], [ 72.7832789, 21.0500763 ], [ 72.7841013, 21.0500871 ], [ 72.7838157, 21.0508554 ], [ 72.7832693, 21.0507191 ], [ 72.7829934, 21.0508446 ], [ 72.7829856, 21.0513593 ], [ 72.7840841, 21.0512446 ], [ 72.7843562, 21.0513772 ], [ 72.7846456, 21.0503515 ], [ 72.7851958, 21.0502296 ], [ 72.7853341, 21.0501032 ], [ 72.7854793, 21.0495902 ], [ 72.7863016, 21.049601 ], [ 72.7864574, 21.0483162 ], [ 72.7865968, 21.0481888 ], [ 72.7868709, 21.0481924 ], [ 72.7870055, 21.0483234 ], [ 72.7868499, 21.0496082 ], [ 72.7872644, 21.0493563 ], [ 72.7874095, 21.0488433 ], [ 72.7876836, 21.0488469 ], [ 72.7876723, 21.0496188 ], [ 72.7879482, 21.0494933 ], [ 72.7884946, 21.0496295 ], [ 72.7886577, 21.0478301 ], [ 72.7893901, 21.0465611 ], [ 72.7899164, 21.0461731 ], [ 72.7901943, 21.0459193 ], [ 72.7904831, 21.0455766 ], [ 72.790752, 21.0452837 ], [ 72.7924024, 21.0449185 ], [ 72.7933708, 21.0442882 ], [ 72.7935197, 21.043518 ], [ 72.7957182, 21.0431601 ], [ 72.795996, 21.0429063 ], [ 72.7962701, 21.0429098 ], [ 72.7966751, 21.0433016 ], [ 72.7970867, 21.0433069 ], [ 72.7978867, 21.0430993 ], [ 72.7990111, 21.0429454 ], [ 72.8020338, 21.0424697 ], [ 72.8042365, 21.0422815 ], [ 72.8064071, 21.0423788 ], [ 72.8078248, 21.0427924 ], [ 72.8088826, 21.0428155 ], [ 72.8091604, 21.0425617 ], [ 72.8095038, 21.0422249 ], [ 72.8098546, 21.0419278 ], [ 72.8101081, 21.0413107 ], [ 72.8107032, 21.040137 ], [ 72.8107221, 21.0388505 ], [ 72.8110187, 21.03731 ], [ 72.8112724, 21.0364657 ], [ 72.8121489, 21.0350081 ], [ 72.8128768, 21.0339326 ], [ 72.8138496, 21.0330212 ], [ 72.8147039, 21.0324718 ], [ 72.8163516, 21.032007 ], [ 72.8194353, 21.0317142 ], [ 72.8222024, 21.0317118 ], [ 72.8249451, 21.0316974 ], [ 72.8260985, 21.0319234 ], [ 72.8272613, 21.0326282 ], [ 72.8276103, 21.0330313 ], [ 72.8279254, 21.0334161 ], [ 72.8286927, 21.034796 ], [ 72.8290669, 21.0362669 ], [ 72.8294188, 21.040215 ], [ 72.8297602, 21.041414 ], [ 72.8303627, 21.0425508 ], [ 72.8307306, 21.0432089 ], [ 72.831479, 21.0442642 ], [ 72.8320377, 21.0447607 ], [ 72.8327487, 21.0450779 ], [ 72.8340114, 21.0453137 ], [ 72.8354259, 21.0451231 ], [ 72.8364382, 21.0446292 ], [ 72.837108, 21.0440139 ], [ 72.8375363, 21.0434831 ], [ 72.8380987, 21.0427962 ], [ 72.8390369, 21.041554 ], [ 72.8393707, 21.0407855 ], [ 72.8396087, 21.0399428 ], [ 72.8395098, 21.0387042 ], [ 72.8385861, 21.0356284 ], [ 72.8385879, 21.0338271 ], [ 72.8390319, 21.0326588 ], [ 72.8400974, 21.0316053 ], [ 72.8407035, 21.031181 ], [ 72.8418325, 21.0309031 ], [ 72.8427634, 21.0308043 ], [ 72.8437444, 21.0309511 ], [ 72.8446745, 21.0313433 ], [ 72.8452978, 21.0317631 ], [ 72.8465943, 21.0322304 ], [ 72.8471959, 21.0326385 ], [ 72.8475842, 21.0329676 ], [ 72.8481344, 21.0341572 ], [ 72.8481964, 21.0350383 ], [ 72.8480747, 21.036185 ], [ 72.847485, 21.0380101 ], [ 72.8473936, 21.038853 ], [ 72.8476694, 21.0396656 ], [ 72.8481279, 21.0399713 ], [ 72.8489876, 21.0398865 ], [ 72.8497763, 21.0397348 ], [ 72.8510203, 21.0391806 ], [ 72.8517098, 21.0387297 ], [ 72.8526275, 21.0383047 ], [ 72.8530389, 21.0381755 ], [ 72.8540482, 21.0378561 ], [ 72.8546789, 21.0376022 ], [ 72.8556406, 21.0375587 ], [ 72.8566584, 21.0377626 ], [ 72.8570636, 21.0381542 ], [ 72.8575016, 21.038853 ], [ 72.8575896, 21.0397052 ], [ 72.8574971, 21.0401517 ], [ 72.8563312, 21.0424425 ], [ 72.8561515, 21.0431783 ], [ 72.8562661, 21.043879 ], [ 72.856819, 21.0444488 ], [ 72.8576518, 21.0449818 ], [ 72.8587667, 21.0455056 ], [ 72.8599516, 21.0458344 ], [ 72.8621162, 21.0458794 ], [ 72.8635982, 21.0457389 ], [ 72.8644814, 21.0455449 ], [ 72.8651427, 21.0453627 ], [ 72.8664542, 21.0450515 ], [ 72.8674976, 21.0452463 ], [ 72.8678008, 21.0458251 ], [ 72.8679274, 21.0465875 ], [ 72.8674505, 21.0472829 ], [ 72.866878, 21.0478095 ], [ 72.8661878, 21.0484494 ], [ 72.8658221, 21.0488172 ], [ 72.8655173, 21.04983 ], [ 72.8657291, 21.05151 ], [ 72.8659145, 21.0519068 ], [ 72.8663349, 21.0528145 ], [ 72.8667392, 21.0534043 ], [ 72.8673915, 21.0541128 ], [ 72.8680299, 21.0546116 ], [ 72.8687805, 21.055076 ], [ 72.8692923, 21.0554235 ], [ 72.8704157, 21.0559786 ], [ 72.8715342, 21.0562694 ], [ 72.872345, 21.0563385 ], [ 72.8739398, 21.0562589 ], [ 72.8772139, 21.0558119 ], [ 72.879355, 21.0550769 ], [ 72.8816683, 21.0543972 ], [ 72.8822419, 21.0536304 ], [ 72.8828012, 21.0521213 ], [ 72.8833599, 21.0522111 ], [ 72.8828852, 21.053921 ], [ 72.8823297, 21.0544288 ], [ 72.881832, 21.0550362 ], [ 72.8802541, 21.0558182 ], [ 72.8783278, 21.0563088 ], [ 72.8761707, 21.0567412 ], [ 72.8739324, 21.0568977 ], [ 72.8714633, 21.0569951 ], [ 72.8703325, 21.0566352 ], [ 72.8687366, 21.0559314 ], [ 72.8673843, 21.0550021 ], [ 72.8666002, 21.0544321 ], [ 72.8662754, 21.0540519 ], [ 72.8659684, 21.0537572 ], [ 72.8657296, 21.0534222 ], [ 72.8654854, 21.0531884 ], [ 72.8651193, 21.0521801 ], [ 72.8647675, 21.0512078 ], [ 72.8647258, 21.0499139 ], [ 72.865004, 21.0486038 ], [ 72.8657223, 21.047732 ], [ 72.8666558, 21.0466834 ], [ 72.8669458, 21.0461004 ], [ 72.8668231, 21.045701 ], [ 72.8660848, 21.0458143 ], [ 72.8653299, 21.0461141 ], [ 72.863386, 21.0465984 ], [ 72.8614549, 21.0466862 ], [ 72.8595484, 21.04655 ], [ 72.8590039, 21.046388 ], [ 72.8583948, 21.0461882 ], [ 72.8573094, 21.0455839 ], [ 72.8565516, 21.0452253 ], [ 72.8557383, 21.0445721 ], [ 72.8553487, 21.0432805 ], [ 72.8556135, 21.0416451 ], [ 72.8563815, 21.0391898 ], [ 72.8563732, 21.0385313 ], [ 72.8557501, 21.038274 ], [ 72.8550063, 21.0382567 ], [ 72.8544526, 21.0386362 ], [ 72.8541168, 21.0389578 ], [ 72.8538952, 21.0392722 ], [ 72.8534752, 21.0398106 ], [ 72.8527485, 21.0403938 ], [ 72.8519544, 21.0407919 ], [ 72.8515792, 21.0409889 ], [ 72.8506803, 21.0412699 ], [ 72.849729, 21.0413619 ], [ 72.8489319, 21.0412684 ], [ 72.8478391, 21.0408723 ], [ 72.846907, 21.040238 ], [ 72.8462391, 21.0394137 ], [ 72.8458852, 21.038467 ], [ 72.8459244, 21.0374896 ], [ 72.8467583, 21.0348246 ], [ 72.8468219, 21.0338803 ], [ 72.8461977, 21.0332416 ], [ 72.844672, 21.0324634 ], [ 72.8430349, 21.031928 ], [ 72.8420172, 21.0318708 ], [ 72.8411126, 21.0321608 ], [ 72.840281, 21.0327942 ], [ 72.8397451, 21.0337957 ], [ 72.8398399, 21.0348453 ], [ 72.840099, 21.0358806 ], [ 72.840503, 21.0369021 ], [ 72.8408952, 21.0378172 ], [ 72.8411472, 21.0392397 ], [ 72.8409648, 21.0406704 ], [ 72.8402876, 21.0418025 ], [ 72.8396516, 21.0427549 ], [ 72.8392597, 21.0431371 ], [ 72.8387546, 21.0435848 ], [ 72.8381942, 21.044359 ], [ 72.8377275, 21.0448799 ], [ 72.8373598, 21.0452395 ], [ 72.836806, 21.045619 ], [ 72.8355701, 21.046179 ], [ 72.8343053, 21.0463457 ], [ 72.8329591, 21.046213 ], [ 72.8318543, 21.0458621 ], [ 72.8310515, 21.0454164 ], [ 72.8307345, 21.0451266 ], [ 72.8299269, 21.0441691 ], [ 72.82961, 21.0438102 ], [ 72.8292974, 21.0434642 ], [ 72.82849, 21.0424243 ], [ 72.8276938, 21.0406125 ], [ 72.8274943, 21.0400411 ], [ 72.827168, 21.0390616 ], [ 72.8268637, 21.038178 ], [ 72.8265954, 21.0375466 ], [ 72.8263501, 21.0367179 ], [ 72.8260939, 21.0360524 ], [ 72.8258497, 21.0354413 ], [ 72.8246429, 21.0336243 ], [ 72.8241665, 21.0333972 ], [ 72.823787, 21.0334789 ], [ 72.8230627, 21.0338877 ], [ 72.8223242, 21.0344462 ], [ 72.8218505, 21.0349049 ], [ 72.8218762, 21.0354739 ], [ 72.8221593, 21.0374272 ], [ 72.8218979, 21.0392249 ], [ 72.8216747, 21.0397634 ], [ 72.8212959, 21.0403543 ], [ 72.8207156, 21.0407093 ], [ 72.8188276, 21.0409097 ], [ 72.8170355, 21.041202 ], [ 72.8154029, 21.0412483 ], [ 72.8145556, 21.0414705 ], [ 72.813518, 21.0424962 ], [ 72.8121159, 21.0435658 ], [ 72.8111445, 21.0444445 ], [ 72.8098893, 21.0456714 ], [ 72.808138, 21.0465988 ], [ 72.8067576, 21.047066 ], [ 72.8041474, 21.0477566 ], [ 72.8031281, 21.0478106 ], [ 72.802036, 21.0475344 ], [ 72.8011472, 21.0468337 ], [ 72.7997881, 21.0460438 ], [ 72.7991896, 21.0458698 ], [ 72.7986936, 21.0459015 ], [ 72.7984038, 21.0460166 ], [ 72.7981377, 21.046409 ], [ 72.7980041, 21.0467709 ], [ 72.7979888, 21.0471792 ], [ 72.7974027, 21.0497454 ], [ 72.7973611, 21.0525759 ], [ 72.7967864, 21.05437 ], [ 72.7967751, 21.0551419 ], [ 72.7964895, 21.0559104 ], [ 72.7960973, 21.056517 ], [ 72.7960216, 21.0574395 ], [ 72.796101, 21.0583553 ], [ 72.7958054, 21.0601722 ], [ 72.7958465, 21.0623364 ], [ 72.7961411, 21.0628356 ], [ 72.7967005, 21.0633551 ], [ 72.7973198, 21.0639793 ], [ 72.7979548, 21.0650877 ], [ 72.7983085, 21.0655149 ], [ 72.7985273, 21.0664891 ], [ 72.798761, 21.0671926 ], [ 72.798756, 21.0695806 ], [ 72.7990166, 21.0703199 ], [ 72.7995594, 21.0708779 ], [ 72.800076927731013, 21.071376452734377 ], [ 72.8002358, 21.0715295 ], [ 72.800405125850119, 21.071576452734377 ], [ 72.8018947, 21.0719895 ], [ 72.803184, 21.0723399 ], [ 72.8038033, 21.0727437 ], [ 72.804148732812493, 21.073112324153765 ], [ 72.804271, 21.0732428 ], [ 72.8043487328125, 21.073436282595466 ], [ 72.8046828, 21.0742678 ], [ 72.8048187, 21.0752232 ], [ 72.8046441, 21.0759783 ], [ 72.8043487328125, 21.076756219545089 ], [ 72.8043222, 21.0768261 ], [ 72.8043078, 21.0774478 ], [ 72.8043487328125, 21.077618129143275 ], [ 72.804466, 21.0781061 ], [ 72.8045146, 21.0790141 ], [ 72.8044423, 21.0808598 ], [ 72.8043487328125, 21.081196949994389 ], [ 72.8040536, 21.0822604 ], [ 72.8030793, 21.0832772 ], [ 72.8024832, 21.0836417 ], [ 72.8016972, 21.0840315 ], [ 72.7999212, 21.0844639 ], [ 72.8003626, 21.0851355 ], [ 72.8008913, 21.0857368 ], [ 72.8016613, 21.0864757 ], [ 72.8024238, 21.0870352 ], [ 72.8028813, 21.0873927 ], [ 72.8036187, 21.0877947 ], [ 72.804148732812493, 21.088062438473983 ], [ 72.804148732812493, 21.088062438473987 ], [ 72.8046507, 21.088316 ], [ 72.8053376, 21.0887355 ], [ 72.8061413, 21.0894938 ], [ 72.806622, 21.0900592 ], [ 72.8069375, 21.0905578 ], [ 72.8074249, 21.0914377 ], [ 72.8077448, 21.0922321 ], [ 72.8079788, 21.0927428 ], [ 72.808252032127953, 21.09365 ], [ 72.8084044, 21.0941559 ], [ 72.808527, 21.0948438 ], [ 72.8086439, 21.0953603 ], [ 72.8091596, 21.0955696 ], [ 72.810086, 21.0951979 ], [ 72.8110481, 21.0945081 ], [ 72.8117445, 21.0939671 ], [ 72.812158948458901, 21.09365 ], [ 72.812158948458915, 21.09365 ], [ 72.8122788, 21.0935583 ], [ 72.8131044, 21.09294 ], [ 72.8139147, 21.0924254 ], [ 72.8143921, 21.0920877 ], [ 72.8148496, 21.0916841 ], [ 72.8155787, 21.0911598 ], [ 72.8161768, 21.090723 ], [ 72.8171602, 21.0902876 ], [ 72.818357, 21.0900797 ], [ 72.8193155, 21.0901075 ], [ 72.8203153, 21.090511 ], [ 72.8210026, 21.0911322 ], [ 72.8213901, 21.0924034 ], [ 72.8212933, 21.0926565 ], [ 72.8211578, 21.0929863 ], [ 72.8207415, 21.0935909 ], [ 72.820627448243783, 21.09385 ], [ 72.8202352, 21.0947411 ], [ 72.819389, 21.0972153 ], [ 72.8187675, 21.09815 ], [ 72.8185617, 21.0984928 ], [ 72.8177885, 21.0994242 ], [ 72.8171092, 21.0999145 ], [ 72.8159486, 21.10018 ], [ 72.8145224, 21.0999436 ], [ 72.8135818, 21.0996758 ], [ 72.8128468, 21.0996126 ], [ 72.8121602, 21.0998665 ], [ 72.8117764, 21.100441 ], [ 72.811896, 21.1011196 ], [ 72.8122134, 21.1018869 ], [ 72.8126025, 21.1026684 ], [ 72.8130629, 21.1037387 ], [ 72.8132908, 21.1043435 ], [ 72.8134118, 21.105205 ], [ 72.813613, 21.105776 ], [ 72.8139043, 21.1060729 ], [ 72.8145899, 21.1062782 ], [ 72.8154443, 21.1062215 ], [ 72.8169999, 21.1064915 ], [ 72.8179574, 21.1067558 ], [ 72.8184402, 21.1070132 ], [ 72.8187332, 21.1072018 ], [ 72.818615, 21.107304 ], [ 72.8185106, 21.1074138 ], [ 72.8178461, 21.1071363 ], [ 72.8169924, 21.1070062 ], [ 72.8147257, 21.1068757 ], [ 72.8137956, 21.1066256 ], [ 72.8131666, 21.1060564 ], [ 72.8127848, 21.1054643 ], [ 72.812713, 21.1049462 ], [ 72.8128318, 21.1045453 ], [ 72.8123002, 21.1035897 ], [ 72.8116789, 21.1027543 ], [ 72.8111316, 21.1015909 ], [ 72.8110466, 21.1009176 ], [ 72.8111625, 21.1003383 ], [ 72.8118149, 21.0996203 ], [ 72.812718, 21.0990823 ], [ 72.8136739, 21.098943 ], [ 72.8148874, 21.099156 ], [ 72.8157549, 21.0993332 ], [ 72.8165532, 21.0994119 ], [ 72.8171774, 21.0991634 ], [ 72.8176631, 21.0986507 ], [ 72.8179805, 21.0982832 ], [ 72.8182986, 21.0978762 ], [ 72.8187854, 21.096941 ], [ 72.8191841, 21.0952775 ], [ 72.819728103519779, 21.09385 ], [ 72.819785, 21.0937007 ], [ 72.8204766, 21.0929588 ], [ 72.8207322, 21.092275 ], [ 72.8204411, 21.0914353 ], [ 72.8198531, 21.0909423 ], [ 72.8191798, 21.0907435 ], [ 72.8183021, 21.0906273 ], [ 72.8172239, 21.0911812 ], [ 72.8164564, 21.0919442 ], [ 72.815515, 21.0930841 ], [ 72.815065161044757, 21.09365 ], [ 72.8148561, 21.093913 ], [ 72.8143909, 21.0943471 ], [ 72.8138471, 21.094832 ], [ 72.8130723, 21.0956345 ], [ 72.8124826, 21.0960934 ], [ 72.8118304, 21.0964378 ], [ 72.8106417, 21.0965524 ], [ 72.8090751, 21.0966637 ], [ 72.8081242, 21.0963811 ], [ 72.8078642, 21.0961047 ], [ 72.8075592, 21.095689 ], [ 72.8072337, 21.094764 ], [ 72.8071701, 21.0941398 ], [ 72.807071849410008, 21.09385 ], [ 72.8066443, 21.0925889 ], [ 72.8064348, 21.0919535 ], [ 72.8059782, 21.0912933 ], [ 72.8055167, 21.0908735 ], [ 72.8051802, 21.0905444 ], [ 72.8043812, 21.0899548 ], [ 72.804148732812493, 21.089890704282119 ], [ 72.8010695, 21.0890417 ], [ 72.80032, 21.0888609 ], [ 72.7995966, 21.0886341 ], [ 72.7988873, 21.0882413 ], [ 72.7983447, 21.0877238 ], [ 72.7980154, 21.0873604 ], [ 72.7976009, 21.0860708 ], [ 72.7975256, 21.0849372 ], [ 72.7974397, 21.084061 ], [ 72.7975359, 21.0825446 ], [ 72.7979773, 21.0813493 ], [ 72.7983133, 21.0806418 ], [ 72.7992259, 21.0794923 ], [ 72.7995692, 21.0790647 ], [ 72.8003375, 21.0783513 ], [ 72.8010359, 21.0776313 ], [ 72.8016639, 21.0765673 ], [ 72.801664, 21.0758541 ], [ 72.8011766, 21.0751433 ], [ 72.8006257, 21.0745985 ], [ 72.8002131, 21.0741559 ], [ 72.7991071, 21.0733165 ], [ 72.7984346, 21.0729577 ], [ 72.7980181, 21.0727877 ], [ 72.7976401, 21.0726216 ], [ 72.7970591, 21.0723572 ], [ 72.796163, 21.0719151 ], [ 72.795509582511286, 21.071576452734377 ], [ 72.7952955, 21.0714655 ], [ 72.7944827, 21.0708119 ], [ 72.7940036, 21.0704789 ], [ 72.7936715, 21.0700293 ], [ 72.7932048, 21.0691874 ], [ 72.7924521, 21.0675556 ], [ 72.7920497, 21.0669809 ], [ 72.7916643, 21.0666573 ], [ 72.791394, 21.0663965 ], [ 72.7904013, 21.0656758 ], [ 72.7895921, 21.0655338 ], [ 72.7887331, 21.0658101 ], [ 72.7878235, 21.0659958 ], [ 72.7854889, 21.0670916 ], [ 72.7851958, 21.0683748 ], [ 72.7849217, 21.0683712 ], [ 72.7849293, 21.0678565 ], [ 72.7838232, 21.0684849 ], [ 72.7828519, 21.0687893 ], [ 72.782165, 21.0691261 ], [ 72.7818926, 21.0692319 ], [ 72.7813443, 21.0692247 ], [ 72.7807923, 21.0694749 ], [ 72.7791474, 21.0694534 ], [ 72.777769, 21.0699501 ], [ 72.7772151, 21.0703294 ], [ 72.776937, 21.070583 ], [ 72.7769446, 21.0700684 ], [ 72.7735375, 21.07011743511357 ], [ 72.7722823, 21.0701355 ], [ 72.7698265, 21.0693311 ], [ 72.7679055, 21.069435 ], [ 72.7668051, 21.0696779 ], [ 72.7661517, 21.0700304 ], [ 72.7657008, 21.0701782 ], [ 72.7646951, 21.0703337 ], [ 72.7643125, 21.0709319 ], [ 72.763946490151554, 21.071376452734377 ], [ 72.7638931, 21.0714413 ], [ 72.7633779, 21.0721181 ], [ 72.763745, 21.0722115 ], [ 72.7637412, 21.0724687 ], [ 72.7631967, 21.0722041 ], [ 72.7632082, 21.0714322 ], [ 72.763289696002659, 21.071376452734377 ], [ 72.7637624, 21.0710531 ], [ 72.764046, 21.0704137 ], [ 72.7654324, 21.0697881 ], [ 72.7667135, 21.0695069 ], [ 72.7680013, 21.0692665 ], [ 72.7684577, 21.069185 ], [ 72.7681912, 21.0686668 ], [ 72.7668263, 21.0682623 ], [ 72.7662857, 21.0677403 ], [ 72.7657375, 21.0677331 ], [ 72.7643782, 21.0669431 ], [ 72.7630094, 21.0667968 ], [ 72.7631538, 21.066284 ], [ 72.763021, 21.0660249 ], [ 72.7622005, 21.0658851 ], [ 72.7600266, 21.0645694 ], [ 72.7592158, 21.0637866 ], [ 72.7562198, 21.0624602 ], [ 72.752378, 21.0626668 ], [ 72.7521, 21.0629204 ], [ 72.7490769, 21.0633952 ], [ 72.7476965, 21.0640208 ], [ 72.7476849, 21.0647926 ], [ 72.7465865, 21.0649062 ], [ 72.7452062, 21.0655318 ], [ 72.7451983, 21.0660465 ], [ 72.7446481, 21.0661674 ], [ 72.7443701, 21.0664211 ], [ 72.7429917, 21.0669174 ], [ 72.7424356, 21.0674248 ], [ 72.7410611, 21.0676639 ], [ 72.740231, 21.0681676 ], [ 72.7396768, 21.0685467 ], [ 72.740068, 21.0698388 ], [ 72.7406086, 21.0703606 ], [ 72.7408343, 21.0707085 ], [ 72.7415647, 21.0706307 ], [ 72.7415568, 21.0711453 ], [ 72.741831, 21.0711491 ], [ 72.74182759678061, 21.071376452734377 ], [ 72.7418233, 21.0716635 ], [ 72.7420973, 21.0716673 ], [ 72.7426379, 21.0721892 ], [ 72.7431746, 21.0729684 ], [ 72.7431707, 21.0732258 ], [ 72.7428964, 21.073222 ], [ 72.7425371, 21.072614 ], [ 72.7420858, 21.0724392 ], [ 72.7415453, 21.0719174 ], [ 72.741459568196277, 21.071576452734377 ], [ 72.7414154, 21.0714008 ], [ 72.741383037828967, 21.071376452734377 ], [ 72.740196, 21.0704834 ], [ 72.7385647, 21.0695613 ], [ 72.7384194, 21.0700741 ], [ 72.7381414, 21.0703277 ], [ 72.737997, 21.0708406 ], [ 72.7369023, 21.0706968 ], [ 72.7366262, 21.0708223 ], [ 72.7367588, 21.0710814 ], [ 72.736685510608424, 21.071576452734377 ], [ 72.7366067, 21.0721088 ], [ 72.7363327, 21.0721052 ], [ 72.7363404, 21.0715906 ], [ 72.7360643, 21.0717151 ], [ 72.735516, 21.0717078 ], [ 72.7349618, 21.0720869 ], [ 72.7349501, 21.0728588 ], [ 72.7344058, 21.0725942 ], [ 72.7346878, 21.0720833 ], [ 72.7338615, 21.0723296 ], [ 72.7337161, 21.0728423 ], [ 72.7332975, 21.0733515 ], [ 72.7310947, 21.073965 ], [ 72.7302722, 21.073954 ], [ 72.729996, 21.0740795 ], [ 72.7299843, 21.0748514 ], [ 72.729436, 21.074844 ], [ 72.7297258, 21.0738185 ], [ 72.7283512, 21.0740574 ], [ 72.7283395, 21.0748293 ], [ 72.727797, 21.0744356 ], [ 72.7269766, 21.0742963 ], [ 72.7269688, 21.074811 ], [ 72.7264224, 21.0746745 ], [ 72.7239571, 21.0745133 ], [ 72.7239609, 21.0742561 ], [ 72.7250575, 21.0742706 ], [ 72.7251535, 21.0741022 ], [ 72.7256097, 21.0740208 ], [ 72.7256137, 21.0737633 ], [ 72.7250709, 21.073756 ], [ 72.7249741, 21.0739236 ], [ 72.7234242, 21.0738622 ], [ 72.7220494, 21.0741011 ], [ 72.7214933, 21.0746084 ], [ 72.7192805, 21.0758654 ], [ 72.7154327, 21.0764575 ], [ 72.7154247, 21.0769722 ], [ 72.7121291, 21.0773133 ], [ 72.7090978, 21.0783018 ], [ 72.7085495, 21.0782944 ], [ 72.7074607, 21.077765 ], [ 72.7066402, 21.0776257 ], [ 72.7069381, 21.0760856 ], [ 72.7058455, 21.0758134 ], [ 72.705414, 21.0770945 ], [ 72.7053784, 21.0794101 ], [ 72.7050925, 21.0801784 ], [ 72.7050766, 21.0812077 ], [ 72.7047906, 21.0819758 ], [ 72.7050095, 21.0855819 ], [ 72.7047194, 21.0866074 ], [ 72.7046759, 21.0894377 ], [ 72.7043939, 21.0899485 ], [ 72.704386, 21.0904632 ], [ 72.7038258, 21.0912277 ], [ 72.702790001683496, 21.09365 ], [ 72.7024034, 21.0945541 ], [ 72.7023955, 21.0950687 ], [ 72.7020871, 21.0974363 ], [ 72.7018897, 21.0986374 ], [ 72.7017438, 21.0998626 ], [ 72.7017283, 21.1027803 ], [ 72.7022569, 21.1040744 ], [ 72.7026627, 21.1044654 ], [ 72.7032091, 21.1046019 ], [ 72.7033378, 21.1051184 ], [ 72.7037438, 21.1055095 ], [ 72.7045623, 21.105778 ], [ 72.7052374, 21.106431 ], [ 72.7053671, 21.1069474 ], [ 72.7059156, 21.1069549 ], [ 72.7081554, 21.1121538 ], [ 72.7086961, 21.1126342 ], [ 72.7083871, 21.1143557 ], [ 72.7084128, 21.1161012 ], [ 72.707752, 21.1168538 ], [ 72.7067007, 21.1182893 ], [ 72.7064185, 21.1188001 ], [ 72.7063631, 21.1224025 ], [ 72.7065246, 21.1235632 ], [ 72.7068721, 21.1249829 ], [ 72.7071344, 21.1257586 ], [ 72.7071225, 21.1265304 ], [ 72.7073888, 21.1270489 ], [ 72.7076393, 21.1285964 ], [ 72.7078721, 21.1289914 ], [ 72.7080009, 21.129768 ], [ 72.7084729, 21.1303845 ], [ 72.7086927, 21.1314416 ], [ 72.708963, 21.1317026 ], [ 72.7096313, 21.1328693 ], [ 72.7101895, 21.1334908 ], [ 72.7107303, 21.1342753 ], [ 72.7110135, 21.1345635 ], [ 72.7114427, 21.1350679 ], [ 72.7117899, 21.1352146 ], [ 72.7123304, 21.1357366 ], [ 72.7129018, 21.1362287 ], [ 72.713272, 21.136908 ], [ 72.714083, 21.1376911 ], [ 72.7148244, 21.1387345 ], [ 72.7158887, 21.1396951 ], [ 72.7170732, 21.1402795 ], [ 72.7185752, 21.1403596 ], [ 72.7205064, 21.1400794 ], [ 72.7218723, 21.1395975 ], [ 72.7257249, 21.1389186 ], [ 72.730114, 21.1388071 ], [ 72.7323682, 21.1393509 ], [ 72.7336042, 21.1394149 ], [ 72.7350461, 21.1397111 ], [ 72.7366808, 21.1399245 ], [ 72.7388632, 21.1407257 ], [ 72.7396782, 21.1412513 ], [ 72.7410714, 21.1417925 ], [ 72.7417752, 21.1421768 ], [ 72.742946, 21.1428391 ], [ 72.7443096, 21.143372 ], [ 72.7448503, 21.1438939 ], [ 72.7452085, 21.1441221 ], [ 72.7456205, 21.1444983 ], [ 72.7459358, 21.1446805 ], [ 72.746341, 21.1450725 ], [ 72.7470538, 21.1457391 ], [ 72.7475621, 21.1459889 ], [ 72.7478324, 21.1462499 ], [ 72.7482555, 21.1465156 ], [ 72.7485559, 21.1468358 ], [ 72.7489178, 21.1470366 ], [ 72.7500034, 21.147823 ], [ 72.7507445, 21.1480286 ], [ 72.7516373, 21.1486168 ], [ 72.7540943, 21.1494215 ], [ 72.7549932, 21.1500618 ], [ 72.7559989, 21.1504764 ], [ 72.7568061, 21.1515164 ], [ 72.7576252, 21.1517846 ], [ 72.7585712, 21.1526984 ], [ 72.7592516, 21.1530931 ], [ 72.7596568, 21.1534849 ], [ 72.7599195, 21.1542605 ], [ 72.7601898, 21.1545213 ], [ 72.7605464, 21.1554811 ], [ 72.7611043, 21.1561054 ], [ 72.7615303, 21.1565981 ], [ 72.762207, 21.1572499 ], [ 72.7633003, 21.1575219 ], [ 72.7635708, 21.1577827 ], [ 72.7641174, 21.1579192 ], [ 72.7646564, 21.1585691 ], [ 72.7654716, 21.1590948 ], [ 72.7658768, 21.1594866 ], [ 72.7665534, 21.1601384 ], [ 72.7676352, 21.1610972 ], [ 72.7695729, 21.1620716 ], [ 72.7697864, 21.1617614 ], [ 72.7709319, 21.1623729 ], [ 72.7718717, 21.1629779 ], [ 72.7723481, 21.1634935 ], [ 72.7732923, 21.164518 ], [ 72.7737643, 21.1653984 ], [ 72.7741474, 21.1660297 ], [ 72.7744252, 21.1668392 ], [ 72.7748134, 21.1673253 ], [ 72.7756095, 21.1691375 ], [ 72.77588, 21.1693983 ], [ 72.7758724, 21.1699129 ], [ 72.7766645, 21.1719823 ], [ 72.7770173, 21.1725379 ], [ 72.7783906, 21.1737224 ], [ 72.7790086, 21.1739946 ], [ 72.7799356, 21.1745228 ], [ 72.7804849, 21.175003 ], [ 72.7811973, 21.1752991 ], [ 72.7819268, 21.1756993 ], [ 72.7826564, 21.1759154 ], [ 72.7838065, 21.1763156 ], [ 72.7850339, 21.1768358 ], [ 72.7866389, 21.1774521 ], [ 72.7890679, 21.1779003 ], [ 72.7919347, 21.1784525 ], [ 72.7933938, 21.1788127 ], [ 72.7948358, 21.1790928 ], [ 72.7956254, 21.179573 ], [ 72.7967069, 21.1799731 ], [ 72.797136, 21.1802533 ], [ 72.7975318, 21.1803622 ], [ 72.7982518, 21.1807495 ], [ 72.7989127, 21.1811496 ], [ 72.7994369, 21.1814164 ], [ 72.8002002, 21.1819179 ], [ 72.8010697, 21.1823389 ], [ 72.8013761, 21.1827422 ], [ 72.8016089, 21.1829889 ], [ 72.8024919, 21.1835826 ], [ 72.8035105, 21.1843006 ], [ 72.8040516, 21.1848224 ], [ 72.804184888571072, 21.184918859641712 ], [ 72.8051377, 21.1856084 ], [ 72.8062275, 21.1861374 ], [ 72.8068349, 21.1866237 ], [ 72.8075804, 21.1874417 ], [ 72.8081567, 21.1878242 ], [ 72.8092077, 21.1887498 ], [ 72.8102993, 21.1891505 ], [ 72.8108622, 21.1895044 ], [ 72.8107423, 21.189756 ], [ 72.811041, 21.1900031 ], [ 72.8112816, 21.1898726 ], [ 72.8118547, 21.1901893 ], [ 72.8124275, 21.1908246 ], [ 72.8132853, 21.1913763 ], [ 72.8145233, 21.1921087 ], [ 72.8155, 21.1926841 ], [ 72.815719, 21.193423 ], [ 72.8162387, 21.1945066 ], [ 72.816811, 21.195675 ], [ 72.8172891, 21.196435 ], [ 72.818362, 21.1976353 ], [ 72.8192081, 21.1990599 ], [ 72.8197524, 21.2009403 ], [ 72.8191252, 21.2032048 ], [ 72.8178843, 21.2052057 ], [ 72.8173203, 21.2062278 ], [ 72.8169801, 21.2069257 ], [ 72.8167525, 21.2075073 ], [ 72.8165338, 21.208206 ], [ 72.8161848, 21.2087868 ], [ 72.8152206, 21.2100464 ], [ 72.8146514, 21.2104394 ], [ 72.8135443, 21.211069 ], [ 72.8129879, 21.2115765 ], [ 72.8121513, 21.2124661 ], [ 72.8118731, 21.2127197 ], [ 72.8114955, 21.212991 ], [ 72.8110366, 21.2136101 ], [ 72.8104055, 21.2139032 ], [ 72.8096531, 21.2143644 ], [ 72.8092897, 21.2160075 ], [ 72.8082597, 21.2176638 ], [ 72.8075044, 21.2184879 ], [ 72.8062899, 21.2201714 ], [ 72.804148732812493, 21.218978941585927 ], [ 72.8014928, 21.2174998 ], [ 72.8019632, 21.2167784 ], [ 72.802002, 21.2166938 ], [ 72.8019381, 21.2166521 ], [ 72.8022171, 21.2160692 ], [ 72.8030412, 21.2146633 ], [ 72.8036592, 21.2136231 ], [ 72.8043487328125, 21.212521885821179 ], [ 72.8045861, 21.2121428 ], [ 72.805084, 21.2112867 ], [ 72.8056161, 21.2103265 ], [ 72.8061998, 21.2095263 ], [ 72.807307, 21.207926 ], [ 72.8077505, 21.2072899 ], [ 72.808006, 21.2068816 ], [ 72.8083435, 21.2063969 ], [ 72.8086628, 21.2059886 ], [ 72.8088908, 21.205691 ], [ 72.809221, 21.2053254 ], [ 72.8099248, 21.2043011 ], [ 72.8109977, 21.2028287 ], [ 72.8116243, 21.2015484 ], [ 72.8119919, 21.2006444 ], [ 72.8121965, 21.2000777 ], [ 72.8123289, 21.1992248 ], [ 72.8123951, 21.1987478 ], [ 72.8123108, 21.1982989 ], [ 72.8121221, 21.1980034 ], [ 72.8119281, 21.1974402 ], [ 72.8119497, 21.1969578 ], [ 72.8119256, 21.1966772 ], [ 72.8117993, 21.1962732 ], [ 72.8115886, 21.1958131 ], [ 72.811378, 21.1953922 ], [ 72.8110108, 21.1948479 ], [ 72.8108091, 21.1946018 ], [ 72.8103883, 21.1941623 ], [ 72.8099849, 21.1937061 ], [ 72.8096416, 21.19333 ], [ 72.8091145, 21.1928351 ], [ 72.8091038, 21.1923881 ], [ 72.8088883, 21.1920516 ], [ 72.8085543, 21.1917301 ], [ 72.8082473, 21.1916096 ], [ 72.8081288, 21.1915393 ], [ 72.808048, 21.1913484 ], [ 72.8081557, 21.1912329 ], [ 72.8079456, 21.1911124 ], [ 72.8078056, 21.1911224 ], [ 72.8075147, 21.1909265 ], [ 72.8072723, 21.1907055 ], [ 72.8068413, 21.1902887 ], [ 72.8059826, 21.1903642 ], [ 72.8049724, 21.1893127 ], [ 72.8043487328125, 21.188797536956077 ], [ 72.8036935, 21.1882563 ], [ 72.802406, 21.18732 ], [ 72.8015134, 21.1867358 ], [ 72.8005006, 21.1862396 ], [ 72.799482279898527, 21.185758787109375 ], [ 72.799482279898513, 21.185758787109375 ], [ 72.7991445, 21.1855993 ], [ 72.7979686, 21.1849991 ], [ 72.7960631, 21.1839587 ], [ 72.7947757, 21.1835346 ], [ 72.7939174, 21.1832144 ], [ 72.7936641, 21.1821133 ], [ 72.793102, 21.182078 ], [ 72.7930162, 21.1829423 ], [ 72.7911965, 21.1827182 ], [ 72.7897374, 21.1824141 ], [ 72.7871797, 21.1819179 ], [ 72.7853944, 21.1814537 ], [ 72.783034, 21.1810536 ], [ 72.7823903, 21.1808775 ], [ 72.7814462, 21.1806534 ], [ 72.7802446, 21.1804613 ], [ 72.7788836, 21.1796033 ], [ 72.7761593, 21.1782807 ], [ 72.7750735, 21.1774943 ], [ 72.774279, 21.176796 ], [ 72.7735815, 21.1761166 ], [ 72.7728931, 21.1756105 ], [ 72.7720846, 21.1746253 ], [ 72.7714252, 21.1737149 ], [ 72.7706216, 21.1724176 ], [ 72.7695511, 21.1706018 ], [ 72.7687475, 21.1693043 ], [ 72.7684848, 21.1685289 ], [ 72.7681007, 21.1667222 ], [ 72.7671555, 21.1656803 ], [ 72.7666346, 21.1652857 ], [ 72.7659352, 21.1647629 ], [ 72.7651238, 21.16398 ], [ 72.7640342, 21.1634508 ], [ 72.7634935, 21.162929 ], [ 72.7610361, 21.1621244 ], [ 72.7594058, 21.1610734 ], [ 72.7577715, 21.1602796 ], [ 72.7569563, 21.1597542 ], [ 72.7517485, 21.1594276 ], [ 72.7501104, 21.158891 ], [ 72.7498399, 21.15863 ], [ 72.749021, 21.1583618 ], [ 72.7482098, 21.157579 ], [ 72.7473947, 21.1570534 ], [ 72.7468479, 21.1569179 ], [ 72.7465854, 21.1561422 ], [ 72.7464058, 21.1560513 ], [ 72.7459981, 21.155369 ], [ 72.7457578, 21.1549047 ], [ 72.7452685, 21.1544084 ], [ 72.7446965, 21.1540583 ], [ 72.7443039, 21.1527661 ], [ 72.74374, 21.1516804 ], [ 72.7433505, 21.1510291 ], [ 72.7430046, 21.1497884 ], [ 72.7422527, 21.1485426 ], [ 72.7410204, 21.1474721 ], [ 72.7398725, 21.1465302 ], [ 72.7392861, 21.1460593 ], [ 72.738731, 21.1453839 ], [ 72.7379386, 21.1449626 ], [ 72.7370202, 21.1444263 ], [ 72.7360761, 21.143962 ], [ 72.7341614, 21.1432365 ], [ 72.7325238, 21.1426998 ], [ 72.7317008, 21.1426888 ], [ 72.7308819, 21.1424204 ], [ 72.7284173, 21.1421299 ], [ 72.7226421, 21.1430817 ], [ 72.7207143, 21.1435707 ], [ 72.7204361, 21.1438241 ], [ 72.7187865, 21.1440592 ], [ 72.7174073, 21.1445554 ], [ 72.7171289, 21.144809 ], [ 72.716032, 21.1447943 ], [ 72.7154795, 21.1450441 ], [ 72.7138318, 21.1451511 ], [ 72.7138239, 21.1456657 ], [ 72.7122773, 21.1457651 ], [ 72.7121764, 21.1457716 ], [ 72.7118982, 21.1460252 ], [ 72.7091435, 21.14676 ], [ 72.7088653, 21.1470137 ], [ 72.7074918, 21.1471241 ], [ 72.7074839, 21.1476387 ], [ 72.7061106, 21.1477483 ], [ 72.7058324, 21.148002 ], [ 72.7041807, 21.148366 ], [ 72.7041728, 21.1488806 ], [ 72.7027975, 21.1491193 ], [ 72.7027895, 21.149634 ], [ 72.7019647, 21.149751 ], [ 72.701136, 21.1501261 ], [ 72.701128, 21.1506408 ], [ 72.7005814, 21.1505041 ], [ 72.7000288, 21.150754 ], [ 72.6991942, 21.1515147 ], [ 72.6978167, 21.1518825 ], [ 72.6976712, 21.1523953 ], [ 72.6972522, 21.1529043 ], [ 72.6964253, 21.1531503 ], [ 72.6964174, 21.153665 ], [ 72.6947617, 21.1542853 ], [ 72.6944835, 21.1545389 ], [ 72.6914524, 21.1553989 ], [ 72.691166, 21.156167 ], [ 72.6900689, 21.156152 ], [ 72.6900609, 21.1566665 ], [ 72.6884132, 21.1567723 ], [ 72.6862068, 21.1575141 ], [ 72.6831777, 21.1582448 ], [ 72.6818043, 21.158355 ], [ 72.6817962, 21.1588697 ], [ 72.6815219, 21.1588659 ], [ 72.68153, 21.1583512 ], [ 72.6754896, 21.158654 ], [ 72.6731733, 21.1582739 ], [ 72.6720757, 21.1579943 ], [ 72.6710789, 21.1575373 ], [ 72.6706988, 21.1576189 ], [ 72.6705508, 21.156884 ], [ 72.6688263, 21.1561983 ], [ 72.6685277, 21.156651 ], [ 72.6681899, 21.1565014 ], [ 72.6684946, 21.155977 ], [ 72.6675796, 21.1557143 ], [ 72.6669225, 21.1552514 ], [ 72.6662243, 21.1546661 ], [ 72.6658048, 21.1544119 ], [ 72.6654155, 21.1539721 ], [ 72.6650047, 21.1536087 ], [ 72.6646738, 21.1532325 ], [ 72.6642312, 21.1528102 ], [ 72.663951, 21.1509035 ], [ 72.6631402, 21.1501203 ], [ 72.6617971, 21.1483002 ], [ 72.6612891, 21.1457198 ], [ 72.6610188, 21.1454586 ], [ 72.6602858, 21.1419147 ], [ 72.6599915, 21.1409985 ], [ 72.6599944, 21.1408122 ], [ 72.6601523, 21.1395276 ], [ 72.6597309, 21.1393027 ], [ 72.659023, 21.1342122 ], [ 72.658535, 21.1303368 ], [ 72.6582647, 21.1286928 ], [ 72.6580876, 21.1225138 ], [ 72.6581643, 21.1176251 ], [ 72.6584467, 21.1171145 ], [ 72.6587733, 21.1137733 ], [ 72.658331, 21.1116872 ], [ 72.6600544, 21.1099685 ], [ 72.6596979, 21.107529 ], [ 72.6580635, 21.1007093 ], [ 72.6576772, 21.0987687 ], [ 72.657589812763874, 21.09365 ], [ 72.657589812763888, 21.09365 ], [ 72.6575584, 21.09181 ], [ 72.6575881, 21.0723183 ], [ 72.6573206, 21.0717914 ], [ 72.6568155, 21.0717914 ], [ 72.6502872, 21.0764401 ], [ 72.6498788, 21.0777492 ], [ 72.6496006, 21.0780026 ], [ 72.6487762, 21.0781204 ], [ 72.6486306, 21.0786331 ], [ 72.6480742, 21.07914 ], [ 72.647369, 21.0804171 ], [ 72.6432525, 21.0804208 ], [ 72.6418374, 21.0816418 ], [ 72.6407268, 21.0823658 ], [ 72.6397074, 21.0825219 ], [ 72.6383077, 21.0823658 ], [ 72.6380187, 21.082238 ], [ 72.6378969, 21.0817128 ], [ 72.6285249, 21.0769712 ], [ 72.6287075, 21.0766163 ], [ 72.6278555, 21.0762188 ], [ 72.6272774, 21.0770422 ], [ 72.6281598, 21.0775107 ], [ 72.6283424, 21.0772268 ], [ 72.6299246, 21.0780502 ], [ 72.621262, 21.0856894 ], [ 72.6197216, 21.0846602 ], [ 72.6191891, 21.0845005 ], [ 72.6184664, 21.0844117 ], [ 72.6177057, 21.0845537 ], [ 72.6172979, 21.0847326 ], [ 72.6171153, 21.0846531 ], [ 72.6169571, 21.0847212 ], [ 72.6168841, 21.0849143 ], [ 72.6169936, 21.0850278 ], [ 72.6171884, 21.0850619 ], [ 72.6173466, 21.0849597 ], [ 72.6174683, 21.0848575 ], [ 72.6181743, 21.0846417 ], [ 72.6186246, 21.084619 ], [ 72.619294, 21.0847212 ], [ 72.6209615, 21.0857547 ], [ 72.6255659, 21.0889797 ], [ 72.6255659, 21.0898891 ], [ 72.62452, 21.0917522 ], [ 72.6240683, 21.0926615 ], [ 72.6240683, 21.0932826 ], [ 72.624441367062175, 21.09365 ], [ 72.6244962, 21.093704 ], [ 72.623036, 21.0957876 ], [ 72.6228217, 21.095724 ], [ 72.6225686, 21.0957149 ], [ 72.6224615, 21.0958239 ], [ 72.622257, 21.0961146 ], [ 72.622257, 21.0962872 ], [ 72.6223251, 21.0964235 ], [ 72.6224517, 21.0965325 ], [ 72.6215462, 21.0976499 ], [ 72.6213612, 21.0977226 ], [ 72.6210788, 21.0976499 ], [ 72.6208061, 21.0975499 ], [ 72.615366850929107, 21.09385 ], [ 72.615326719176181, 21.093822701475752 ], [ 72.615072829519292, 21.09365 ], [ 72.6149833, 21.0935891 ], [ 72.6148081, 21.09358 ], [ 72.614701, 21.0935709 ], [ 72.6142238, 21.0932075 ], [ 72.6140291, 21.0929713 ], [ 72.6139609, 21.0927079 ], [ 72.6139707, 21.0922264 ], [ 72.614068, 21.0908818 ], [ 72.6140388, 21.0907637 ], [ 72.613922, 21.0906638 ], [ 72.6138246, 21.0906456 ], [ 72.6137078, 21.0907092 ], [ 72.6136396, 21.0908636 ], [ 72.6136688, 21.0909727 ], [ 72.6137564, 21.0910272 ], [ 72.6138441, 21.0910362 ], [ 72.6138928, 21.0911271 ], [ 72.6137857, 21.0921991 ], [ 72.6138051, 21.0926715 ], [ 72.6138928, 21.0930076 ], [ 72.614107, 21.093262 ], [ 72.614580802917843, 21.09365 ], [ 72.6145841, 21.0936527 ], [ 72.6146523, 21.0937163 ], [ 72.6146425, 21.0938616 ], [ 72.614662, 21.0939706 ], [ 72.6147496, 21.0940706 ], [ 72.6152949, 21.0944339 ], [ 72.6154118, 21.0945884 ], [ 72.6207185, 21.0982131 ], [ 72.6208938, 21.0984856 ], [ 72.6208743, 21.0987763 ], [ 72.6206601, 21.0989035 ], [ 72.6204653, 21.0990216 ], [ 72.6204264, 21.099276 ], [ 72.6206406, 21.0998846 ], [ 72.6214196, 21.100575 ], [ 72.6214877, 21.1013563 ], [ 72.6215032, 21.101817 ], [ 72.6202753, 21.102943 ], [ 72.6203842, 21.1047459 ], [ 72.6209325, 21.1047537 ], [ 72.6210075, 21.1086149 ], [ 72.6206635, 21.112985 ], [ 72.6203812, 21.1134959 ], [ 72.6203689, 21.1142675 ], [ 72.6207705, 21.1149162 ], [ 72.6213188, 21.1149239 ], [ 72.6217193, 21.1155733 ], [ 72.6217153, 21.1158306 ], [ 72.6211546, 21.1165947 ], [ 72.6210929, 21.1204541 ], [ 72.6213139, 21.1238028 ], [ 72.6210274, 21.1245707 ], [ 72.6210068, 21.1258572 ], [ 72.6212729, 21.1263756 ], [ 72.6209739, 21.1279154 ], [ 72.6209574, 21.1289447 ], [ 72.6202355, 21.1312507 ], [ 72.6207839, 21.1312583 ], [ 72.6206093, 21.133572 ], [ 72.6203269, 21.1340827 ], [ 72.6203634, 21.1345094 ], [ 72.620182, 21.1345954 ], [ 72.620178, 21.1348527 ], [ 72.6204522, 21.1348565 ], [ 72.6205482, 21.1346881 ], [ 72.6207304, 21.1346032 ], [ 72.6203575, 21.1407742 ], [ 72.6209102, 21.1405246 ], [ 72.6209021, 21.1410392 ], [ 72.6225558, 21.1405478 ], [ 72.6224263, 21.1400313 ], [ 72.6229994, 21.1384953 ], [ 72.6236917, 21.1381184 ], [ 72.6253434, 21.1377561 ], [ 72.6254881, 21.1372433 ], [ 72.6261886, 21.136352 ], [ 72.627566, 21.1359857 ], [ 72.6277149, 21.1352157 ], [ 72.6282715, 21.134709 ], [ 72.6288323, 21.1339447 ], [ 72.6289903, 21.1326603 ], [ 72.6295388, 21.1326678 ], [ 72.6296836, 21.1321553 ], [ 72.629962, 21.1319018 ], [ 72.6297081, 21.1306115 ], [ 72.6294545, 21.1293212 ], [ 72.628648, 21.1282806 ], [ 72.6286645, 21.1272513 ], [ 72.6293607, 21.1266174 ], [ 72.6299134, 21.1263677 ], [ 72.6318287, 21.1266518 ], [ 72.6337319, 21.1277079 ], [ 72.6352173, 21.1291445 ], [ 72.6365516, 21.1314792 ], [ 72.6376363, 21.1322664 ], [ 72.6377618, 21.1330402 ], [ 72.6383103, 21.1330479 ], [ 72.6385599, 21.1345954 ], [ 72.6393827, 21.134607 ], [ 72.6392411, 21.1348623 ], [ 72.639233, 21.1353768 ], [ 72.6397692, 21.1361564 ], [ 72.6403054, 21.1369358 ], [ 72.6403379, 21.13762 ], [ 72.640023, 21.1374467 ], [ 72.6396244, 21.1366692 ], [ 72.6393502, 21.1366652 ], [ 72.6396079, 21.1376983 ], [ 72.6402891, 21.1379651 ], [ 72.6405227, 21.1377986 ], [ 72.640703, 21.1378417 ], [ 72.6411077, 21.1382339 ], [ 72.6409344, 21.1405476 ], [ 72.641483, 21.1405552 ], [ 72.6413413, 21.1408105 ], [ 72.641325, 21.1418398 ], [ 72.6418654, 21.142362 ], [ 72.642168, 21.143307 ], [ 72.6430837, 21.1434083 ], [ 72.6436261, 21.1438014 ], [ 72.6449912, 21.144207 ], [ 72.644979, 21.1449789 ], [ 72.6456155, 21.1453327 ], [ 72.6460719, 21.1452515 ], [ 72.646068, 21.1455087 ], [ 72.6463422, 21.1455125 ], [ 72.6463381, 21.1457699 ], [ 72.6455195, 21.1455011 ], [ 72.6441502, 21.1453529 ], [ 72.643878, 21.1452208 ], [ 72.6437525, 21.1444471 ], [ 72.6432122, 21.1439249 ], [ 72.6419722, 21.1435799 ], [ 72.6414464, 21.1428708 ], [ 72.6414545, 21.1423563 ], [ 72.6406357, 21.1420876 ], [ 72.6406561, 21.1408011 ], [ 72.6401077, 21.1407933 ], [ 72.6397202, 21.1392439 ], [ 72.6389138, 21.1382033 ], [ 72.6387852, 21.1376867 ], [ 72.6382368, 21.1376792 ], [ 72.638075, 21.1364777 ], [ 72.6390759, 21.1366614 ], [ 72.639084, 21.1361468 ], [ 72.6385356, 21.1361392 ], [ 72.6382857, 21.1345917 ], [ 72.637463, 21.1345801 ], [ 72.6375792, 21.1358685 ], [ 72.6378901, 21.1362991 ], [ 72.6371602, 21.1363773 ], [ 72.6369024, 21.1353443 ], [ 72.6363539, 21.1353367 ], [ 72.6361122, 21.1332745 ], [ 72.6355637, 21.1332668 ], [ 72.6350398, 21.1317155 ], [ 72.6344934, 21.1315786 ], [ 72.6339531, 21.1310564 ], [ 72.6320334, 21.1310296 ], [ 72.6312067, 21.1312755 ], [ 72.6306522, 21.131654 ], [ 72.6305428, 21.1325936 ], [ 72.6303615, 21.1326794 ], [ 72.6302158, 21.1331921 ], [ 72.6299374, 21.1334456 ], [ 72.6290943, 21.1347204 ], [ 72.6288077, 21.1354885 ], [ 72.6276943, 21.1365023 ], [ 72.6271336, 21.1372664 ], [ 72.6265728, 21.1380307 ], [ 72.6265605, 21.1388026 ], [ 72.6262821, 21.139056 ], [ 72.6258548, 21.1400793 ], [ 72.6264035, 21.140087 ], [ 72.6259752, 21.1411105 ], [ 72.6256968, 21.1413639 ], [ 72.6256885, 21.1418784 ], [ 72.6254103, 21.1421318 ], [ 72.6252653, 21.1426446 ], [ 72.6247148, 21.142765 ], [ 72.6241602, 21.1431437 ], [ 72.6242927, 21.143403 ], [ 72.6241438, 21.1441728 ], [ 72.6235953, 21.1441653 ], [ 72.6236955, 21.1437395 ], [ 72.6238777, 21.1436544 ], [ 72.6238818, 21.1433972 ], [ 72.6236076, 21.1433934 ], [ 72.6235106, 21.1435608 ], [ 72.623055, 21.1436429 ], [ 72.622909, 21.1441556 ], [ 72.6226308, 21.1444089 ], [ 72.6223402, 21.1454342 ], [ 72.6217834, 21.1459411 ], [ 72.6209153, 21.1487597 ], [ 72.6203587, 21.1492666 ], [ 72.6197732, 21.1515744 ], [ 72.6189338, 21.152592 ], [ 72.6186473, 21.1533601 ], [ 72.6183689, 21.1536136 ], [ 72.6183564, 21.1543854 ], [ 72.6182156, 21.1546408 ], [ 72.6187643, 21.1546485 ], [ 72.6180574, 21.1559252 ], [ 72.6179792, 21.1608137 ], [ 72.6182453, 21.1613321 ], [ 72.6182082, 21.1636478 ], [ 72.6180674, 21.1639031 ], [ 72.618614, 21.164039 ], [ 72.6187486, 21.16417 ], [ 72.6195303, 21.1667545 ], [ 72.6195055, 21.1682983 ], [ 72.6197758, 21.1685593 ], [ 72.6197552, 21.1698458 ], [ 72.6198886, 21.170105 ], [ 72.61934, 21.1700972 ], [ 72.6194273, 21.1731866 ], [ 72.6189875, 21.1749819 ], [ 72.6195362, 21.1749897 ], [ 72.6195443, 21.174475 ], [ 72.6198187, 21.174479 ], [ 72.6196522, 21.1762781 ], [ 72.6190829, 21.1775567 ], [ 72.619196, 21.1791023 ], [ 72.6194702, 21.1791063 ], [ 72.6194785, 21.1785916 ], [ 72.6197527, 21.1785956 ], [ 72.6197405, 21.1793673 ], [ 72.620287, 21.1795034 ], [ 72.6204216, 21.1796343 ], [ 72.6205344, 21.18118 ], [ 72.6210852, 21.1810586 ], [ 72.6212239, 21.1809324 ], [ 72.6216524, 21.1799089 ], [ 72.6227456, 21.1801817 ], [ 72.6224547, 21.181207 ], [ 72.6216276, 21.1814527 ], [ 72.6214777, 21.1822227 ], [ 72.6216133, 21.1823527 ], [ 72.6218877, 21.1823567 ], [ 72.6224486, 21.1815926 ], [ 72.62314, 21.1812166 ], [ 72.6232859, 21.1807041 ], [ 72.6238346, 21.1807116 ], [ 72.6233188, 21.1786457 ], [ 72.6238675, 21.1786534 ], [ 72.6238758, 21.1781388 ], [ 72.6249708, 21.1782824 ], [ 72.6255216, 21.178162 ], [ 72.6255299, 21.1776474 ], [ 72.6258021, 21.1777795 ], [ 72.6271757, 21.1776704 ], [ 72.6271838, 21.177156 ], [ 72.6279111, 21.1772537 ], [ 72.6280028, 21.1774247 ], [ 72.6285515, 21.1774325 ], [ 72.6285144, 21.1797481 ], [ 72.6290631, 21.1797559 ], [ 72.6289459, 21.1784674 ], [ 72.6290918, 21.1779547 ], [ 72.6296425, 21.1778334 ], [ 72.6297813, 21.1777071 ], [ 72.6297894, 21.1771925 ], [ 72.6296569, 21.1769333 ], [ 72.6304798, 21.1769449 ], [ 72.6300515, 21.1779683 ], [ 72.6294946, 21.178475 ], [ 72.6294777, 21.1822465 ], [ 72.6292963, 21.1823325 ], [ 72.6292882, 21.1828471 ], [ 72.6309342, 21.1828702 ], [ 72.63093, 21.1831274 ], [ 72.630103, 21.1833731 ], [ 72.6302273, 21.1841471 ], [ 72.6305382, 21.1845776 ], [ 72.6295399, 21.1842656 ], [ 72.6289892, 21.1843869 ], [ 72.6292553, 21.1849054 ], [ 72.6278879, 21.1846288 ], [ 72.6282906, 21.1851492 ], [ 72.6284201, 21.1856657 ], [ 72.627764197575189, 21.185758787109375 ], [ 72.6267699, 21.1858999 ], [ 72.626810469028342, 21.185958787109374 ], [ 72.6270381, 21.1862892 ], [ 72.6286862, 21.1861841 ], [ 72.6284078, 21.1864376 ], [ 72.6285361, 21.1869541 ], [ 72.6294825, 21.1878675 ], [ 72.6300291, 21.1880044 ], [ 72.6301494, 21.1890356 ], [ 72.6306898, 21.1895578 ], [ 72.6310916, 21.1902062 ], [ 72.6316382, 21.1903431 ], [ 72.6313556, 21.1908537 ], [ 72.6297321, 21.1894153 ], [ 72.62946, 21.1892832 ], [ 72.6292061, 21.1879929 ], [ 72.6286596, 21.187856 ], [ 72.6281169, 21.1874629 ], [ 72.6281253, 21.1869483 ], [ 72.6278508, 21.1869445 ], [ 72.6278302, 21.1882308 ], [ 72.6272816, 21.1882232 ], [ 72.6274265, 21.1877105 ], [ 72.6270319, 21.1866755 ], [ 72.6264832, 21.186668 ], [ 72.6264915, 21.1861533 ], [ 72.6256624, 21.1865272 ], [ 72.6240122, 21.1867613 ], [ 72.6237338, 21.1870148 ], [ 72.6229994, 21.1873024 ], [ 72.6229128, 21.1868751 ], [ 72.6220816, 21.187378 ], [ 72.6213625, 21.1894266 ], [ 72.6210839, 21.1896801 ], [ 72.620789, 21.1909626 ], [ 72.6207766, 21.1917345 ], [ 72.620494, 21.1922452 ], [ 72.6198752, 21.1966114 ], [ 72.6195968, 21.1968649 ], [ 72.6195762, 21.1981512 ], [ 72.6192937, 21.1986619 ], [ 72.6192895, 21.1989191 ], [ 72.6195556, 21.1994378 ], [ 72.6192606, 21.2007203 ], [ 72.6195061, 21.2025251 ], [ 72.6193447, 21.2040669 ], [ 72.6195233, 21.2041571 ], [ 72.6194689, 21.2048407 ], [ 72.6198769, 21.2051038 ], [ 72.6198934, 21.2040747 ], [ 72.6197138, 21.2039836 ], [ 72.6199056, 21.2033028 ], [ 72.6204545, 21.2033106 ], [ 72.6203044, 21.2040803 ], [ 72.6206917, 21.20563 ], [ 72.6212445, 21.2053805 ], [ 72.6210986, 21.205893 ], [ 72.6213318, 21.2084697 ], [ 72.6221096, 21.2113115 ], [ 72.6229244, 21.2118377 ], [ 72.6230497, 21.2126114 ], [ 72.6235985, 21.2126192 ], [ 72.6236066, 21.2121047 ], [ 72.6241576, 21.2119832 ], [ 72.6245749, 21.2116035 ], [ 72.6243539, 21.208255 ], [ 72.6247784, 21.207489 ], [ 72.6234148, 21.206955 ], [ 72.6234188, 21.2066978 ], [ 72.6245142, 21.2068414 ], [ 72.6249192, 21.2072336 ], [ 72.6250485, 21.2077502 ], [ 72.626144, 21.2078936 ], [ 72.627254, 21.2071372 ], [ 72.6278006, 21.2072741 ], [ 72.6278128, 21.2065022 ], [ 72.6275365, 21.2066266 ], [ 72.6253415, 21.2065957 ], [ 72.6250691, 21.2064636 ], [ 72.6257711, 21.2054442 ], [ 72.6257752, 21.2051868 ], [ 72.625505, 21.2049257 ], [ 72.6255214, 21.2038965 ], [ 72.6252511, 21.2036354 ], [ 72.6248648, 21.2020858 ], [ 72.6243161, 21.2020781 ], [ 72.6246068, 21.2010529 ], [ 72.6251557, 21.2010605 ], [ 72.6250508, 21.1990004 ], [ 72.6257516, 21.1981091 ], [ 72.6259323, 21.1980709 ], [ 72.6260198, 21.1984994 ], [ 72.6271173, 21.1985147 ], [ 72.6271254, 21.1980002 ], [ 72.6287654, 21.1984088 ], [ 72.6295947, 21.1980348 ], [ 72.6297191, 21.1988086 ], [ 72.6303972, 21.1993329 ], [ 72.6304054, 21.1988182 ], [ 72.6320557, 21.198584 ], [ 72.6317731, 21.1990947 ], [ 72.6312243, 21.1990872 ], [ 72.6309294, 21.2003697 ], [ 72.6317505, 21.2005094 ], [ 72.6320207, 21.2007706 ], [ 72.6325694, 21.2007783 ], [ 72.6334048, 21.200018 ], [ 72.6335855, 21.1999798 ], [ 72.6336732, 21.2004081 ], [ 72.6344961, 21.2004196 ], [ 72.6343543, 21.2006749 ], [ 72.6340472, 21.2027296 ], [ 72.6336321, 21.2029811 ], [ 72.633628, 21.2032384 ], [ 72.6339024, 21.2032421 ], [ 72.6339984, 21.2030737 ], [ 72.6343133, 21.203248 ], [ 72.6344388, 21.2040218 ], [ 72.634713, 21.2040255 ], [ 72.6347214, 21.2035111 ], [ 72.6355444, 21.2035226 ], [ 72.6354027, 21.2037779 ], [ 72.6353944, 21.2042924 ], [ 72.6359349, 21.2048148 ], [ 72.6364673, 21.2058517 ], [ 72.6372823, 21.2063776 ], [ 72.6374118, 21.2068942 ], [ 72.6379625, 21.2067728 ], [ 72.6385031, 21.207295 ], [ 72.6406981, 21.2073257 ], [ 72.6409765, 21.2070722 ], [ 72.6415272, 21.2069516 ], [ 72.641656, 21.2074682 ], [ 72.642332, 21.2081206 ], [ 72.6434235, 21.2085222 ], [ 72.6434316, 21.2080078 ], [ 72.6438385, 21.2082707 ], [ 72.643964, 21.2090446 ], [ 72.6445108, 21.2091803 ], [ 72.6446454, 21.2093113 ], [ 72.6447748, 21.2098278 ], [ 72.6464171, 21.2101081 ], [ 72.6464089, 21.2106228 ], [ 72.6469557, 21.2107587 ], [ 72.6474962, 21.2112809 ], [ 72.648043, 21.2114175 ], [ 72.6480307, 21.2121894 ], [ 72.6485815, 21.2120681 ], [ 72.6487204, 21.2119416 ], [ 72.6487244, 21.2116844 ], [ 72.6483214, 21.2111641 ], [ 72.649421, 21.2110503 ], [ 72.6495597, 21.210924 ], [ 72.6498546, 21.2096413 ], [ 72.6506898, 21.2088809 ], [ 72.6518158, 21.2070951 ], [ 72.6521188, 21.2052979 ], [ 72.6519136, 21.2009201 ], [ 72.6516473, 21.2004017 ], [ 72.6516677, 21.1991153 ], [ 72.6518094, 21.19886 ], [ 72.6512607, 21.1988522 ], [ 72.6514014, 21.1985969 ], [ 72.6514095, 21.1980822 ], [ 72.6511515, 21.1970494 ], [ 72.651844, 21.1966725 ], [ 72.6521182, 21.1966763 ], [ 72.6525151, 21.1975829 ], [ 72.652446, 21.2019569 ], [ 72.6527123, 21.2024754 ], [ 72.652696, 21.2035045 ], [ 72.6529663, 21.2037657 ], [ 72.6529338, 21.2058239 ], [ 72.6523401, 21.2086466 ], [ 72.6514968, 21.2099216 ], [ 72.6514885, 21.2104362 ], [ 72.6517589, 21.2106972 ], [ 72.6518884, 21.2112138 ], [ 72.6524373, 21.2112213 ], [ 72.652429, 21.211736 ], [ 72.6529778, 21.2117435 ], [ 72.6526871, 21.2127689 ], [ 72.6532339, 21.2129048 ], [ 72.6540489, 21.2134307 ], [ 72.6544539, 21.2138229 ], [ 72.6544416, 21.2145948 ], [ 72.6549823, 21.215117 ], [ 72.6551118, 21.2156335 ], [ 72.6559351, 21.2156449 ], [ 72.6560555, 21.2166761 ], [ 72.6563259, 21.2169371 ], [ 72.6565677, 21.2189993 ], [ 72.6562812, 21.2197673 ], [ 72.6565027, 21.2231159 ], [ 72.6563619, 21.2233714 ], [ 72.6569086, 21.2235071 ], [ 72.6579901, 21.2245515 ], [ 72.6582645, 21.2245555 ], [ 72.6585429, 21.2243018 ], [ 72.6588173, 21.2243056 ], [ 72.6592142, 21.2252124 ], [ 72.6598946, 21.2256074 ], [ 72.6609903, 21.2257517 ], [ 72.6609984, 21.2252372 ], [ 72.6615473, 21.2252448 ], [ 72.6615391, 21.2257594 ], [ 72.6619544, 21.2255077 ], [ 72.6623866, 21.224227 ], [ 72.6627937, 21.2244899 ], [ 72.6629152, 21.2255211 ], [ 72.6637425, 21.2252752 ], [ 72.6637506, 21.2247605 ], [ 72.6642995, 21.2247681 ], [ 72.6641536, 21.2252809 ], [ 72.6642751, 21.2263119 ], [ 72.6653789, 21.2259407 ], [ 72.6659358, 21.2254338 ], [ 72.6667631, 21.2251879 ], [ 72.6675985, 21.2244273 ], [ 72.6684236, 21.2243105 ], [ 72.6685684, 21.2237978 ], [ 72.669408, 21.22278 ], [ 72.6694161, 21.2222654 ], [ 72.6696945, 21.2220119 ], [ 72.6705459, 21.2202223 ], [ 72.6713813, 21.2194617 ], [ 72.6718136, 21.2181809 ], [ 72.6723643, 21.2180594 ], [ 72.672503, 21.2179331 ], [ 72.6725111, 21.2174185 ], [ 72.6730761, 21.2163969 ], [ 72.6730882, 21.215625 ], [ 72.6733707, 21.2151142 ], [ 72.6734231, 21.2117692 ], [ 72.6737015, 21.2115158 ], [ 72.6739319, 21.2055999 ], [ 72.6744828, 21.2054784 ], [ 72.6746215, 21.2053519 ], [ 72.6750496, 21.2043285 ], [ 72.6758687, 21.2045971 ], [ 72.6754486, 21.2051061 ], [ 72.6748797, 21.206385 ], [ 72.6748555, 21.2079288 ], [ 72.6749912, 21.2080588 ], [ 72.675538, 21.2081954 ], [ 72.675372, 21.2099947 ], [ 72.6750897, 21.2105056 ], [ 72.6750695, 21.2117919 ], [ 72.6747829, 21.21256 ], [ 72.6745858, 21.2164177 ], [ 72.6740369, 21.2164101 ], [ 72.6738912, 21.2169227 ], [ 72.6736128, 21.2171763 ], [ 72.6736047, 21.217691 ], [ 72.6733263, 21.2179444 ], [ 72.6730277, 21.2194844 ], [ 72.6719139, 21.2204984 ], [ 72.6719058, 21.221013 ], [ 72.6714847, 21.2216502 ], [ 72.6712082, 21.2217755 ], [ 72.6712042, 21.2220327 ], [ 72.6717529, 21.2220403 ], [ 72.6718531, 21.2216146 ], [ 72.6723159, 21.2211469 ], [ 72.6728667, 21.2210263 ], [ 72.6726004, 21.2205078 ], [ 72.6731492, 21.2205154 ], [ 72.6731573, 21.220001 ], [ 72.6734297, 21.2201329 ], [ 72.6739785, 21.2201404 ], [ 72.6746701, 21.2197643 ], [ 72.6748158, 21.2192518 ], [ 72.6753647, 21.2192593 ], [ 72.675235, 21.2187428 ], [ 72.6764885, 21.2176016 ], [ 72.6775839, 21.2177458 ], [ 72.677592, 21.2172312 ], [ 72.6778665, 21.2172349 ], [ 72.6778583, 21.2177496 ], [ 72.6784112, 21.2174997 ], [ 72.6784032, 21.2180144 ], [ 72.6791347, 21.2178547 ], [ 72.6792263, 21.2180257 ], [ 72.6795007, 21.2180295 ], [ 72.6795047, 21.2177721 ], [ 72.6792344, 21.2175111 ], [ 72.6797852, 21.2173895 ], [ 72.6799239, 21.2172633 ], [ 72.6800857, 21.2157212 ], [ 72.6806346, 21.2157288 ], [ 72.6805009, 21.2154697 ], [ 72.6806627, 21.2139278 ], [ 72.6811158, 21.2140216 ], [ 72.6804728, 21.2172707 ], [ 72.6801944, 21.2175243 ], [ 72.6800496, 21.2180371 ], [ 72.6806045, 21.2176581 ], [ 72.6811553, 21.2175375 ], [ 72.6813, 21.2170248 ], [ 72.6815784, 21.2167713 ], [ 72.682283, 21.2156224 ], [ 72.6828298, 21.215759 ], [ 72.6825675, 21.2149834 ], [ 72.6820186, 21.2149758 ], [ 72.6817602, 21.2139429 ], [ 72.6813063, 21.2138481 ], [ 72.6813764, 21.2121361 ], [ 72.6817945, 21.2117554 ], [ 72.6823452, 21.2116347 ], [ 72.68249, 21.2111219 ], [ 72.6831825, 21.2107451 ], [ 72.6840137, 21.2102417 ], [ 72.6848389, 21.2101248 ], [ 72.6845805, 21.2090919 ], [ 72.6840318, 21.2090843 ], [ 72.6840558, 21.2075406 ], [ 72.683507, 21.207533 ], [ 72.6837989, 21.2054784 ], [ 72.684252, 21.2055721 ], [ 72.6843397, 21.2060006 ], [ 72.6848885, 21.206008 ], [ 72.68419, 21.2067706 ], [ 72.684186, 21.2070278 ], [ 72.6847067, 21.2088363 ], [ 72.6851127, 21.2092276 ], [ 72.6864846, 21.2092465 ], [ 72.6870274, 21.2096403 ], [ 72.6869097, 21.2083519 ], [ 72.6871921, 21.2078411 ], [ 72.6881669, 21.2069533 ], [ 72.6887177, 21.2068326 ], [ 72.6887258, 21.2063179 ], [ 72.6898254, 21.206204 ], [ 72.6900957, 21.206465 ], [ 72.6906424, 21.2066016 ], [ 72.6906345, 21.2071161 ], [ 72.6911832, 21.2071236 ], [ 72.6910577, 21.208603 ], [ 72.6917145, 21.2091896 ], [ 72.6919889, 21.2091934 ], [ 72.6924161, 21.2081697 ], [ 72.6936612, 21.2075428 ], [ 72.695586, 21.2073119 ], [ 72.6962654, 21.2077076 ], [ 72.6962494, 21.2087367 ], [ 72.6958264, 21.2095031 ], [ 72.6955361, 21.2105285 ], [ 72.6960847, 21.210536 ], [ 72.6960808, 21.2107934 ], [ 72.6963552, 21.210797 ], [ 72.6963473, 21.2113117 ], [ 72.6949872, 21.2105211 ], [ 72.6951278, 21.2102656 ], [ 72.695136, 21.2097511 ], [ 72.6958423, 21.2084738 ], [ 72.6941961, 21.2084514 ], [ 72.694204, 21.2079369 ], [ 72.6936553, 21.2079293 ], [ 72.6936432, 21.2087012 ], [ 72.6922673, 21.2089397 ], [ 72.691981, 21.2097078 ], [ 72.6911619, 21.2094394 ], [ 72.6906105, 21.20866 ], [ 72.6906224, 21.2078881 ], [ 72.6886997, 21.20799 ], [ 72.6884234, 21.2081153 ], [ 72.688544, 21.2091463 ], [ 72.6874304, 21.2101605 ], [ 72.6872858, 21.2106732 ], [ 72.6856413, 21.2105217 ], [ 72.685365, 21.210647 ], [ 72.6853571, 21.2111616 ], [ 72.6859097, 21.2109118 ], [ 72.6854816, 21.2119354 ], [ 72.6854737, 21.2124498 ], [ 72.6851953, 21.2127035 ], [ 72.6851871, 21.2132181 ], [ 72.6850465, 21.2134735 ], [ 72.6845037, 21.2130796 ], [ 72.6839549, 21.213072 ], [ 72.6836785, 21.2131973 ], [ 72.6839469, 21.2135867 ], [ 72.6850384, 21.2139881 ], [ 72.6844695, 21.2152671 ], [ 72.6850184, 21.2152746 ], [ 72.6848726, 21.2157872 ], [ 72.6852747, 21.2164357 ], [ 72.6858214, 21.2165723 ], [ 72.6860637, 21.2186345 ], [ 72.6844094, 21.2191264 ], [ 72.6846717, 21.2199021 ], [ 72.6833017, 21.2197543 ], [ 72.6830252, 21.2198796 ], [ 72.6827388, 21.2206477 ], [ 72.6819137, 21.2207645 ], [ 72.6810943, 21.2204959 ], [ 72.6802792, 21.21997 ], [ 72.6800048, 21.2199662 ], [ 72.6797264, 21.2202198 ], [ 72.6786228, 21.220591 ], [ 72.6786186, 21.2208484 ], [ 72.6791654, 21.2209841 ], [ 72.6795706, 21.2213761 ], [ 72.6796073, 21.2218029 ], [ 72.6777793, 21.2218662 ], [ 72.6776623, 21.2233202 ], [ 72.6772104, 21.2231452 ], [ 72.6769602, 21.2215976 ], [ 72.6764113, 21.2215901 ], [ 72.6764194, 21.2210754 ], [ 72.6758563, 21.2211156 ], [ 72.6755036, 21.2213575 ], [ 72.6750765, 21.2216748 ], [ 72.6746444, 21.2220436 ], [ 72.6739235, 21.2227135 ], [ 72.6729019, 21.223624 ], [ 72.6719285, 21.2241793 ], [ 72.6714757, 21.2243715 ], [ 72.6705943, 21.2249836 ], [ 72.6700375, 21.2254906 ], [ 72.6692841, 21.2258516 ], [ 72.6682114, 21.2262861 ], [ 72.66705, 21.226734 ], [ 72.6666343, 21.2270756 ], [ 72.6662357, 21.2271463 ], [ 72.665342, 21.2273563 ], [ 72.6653338, 21.2278709 ], [ 72.6634049, 21.2283589 ], [ 72.6635334, 21.2288754 ], [ 72.6636691, 21.2290055 ], [ 72.6644924, 21.2290168 ], [ 72.6653036, 21.2298002 ], [ 72.6661187, 21.2303262 ], [ 72.6669379, 21.2305948 ], [ 72.6676134, 21.231248 ], [ 72.667743, 21.2317645 ], [ 72.6661106, 21.2308407 ], [ 72.6652955, 21.2303147 ], [ 72.6647547, 21.2297925 ], [ 72.6622849, 21.2297583 ], [ 72.6606302, 21.23025 ], [ 72.6600753, 21.2306288 ], [ 72.660204, 21.2311453 ], [ 72.6599254, 21.2313988 ], [ 72.6597806, 21.2319115 ], [ 72.6589655, 21.2313856 ], [ 72.6589736, 21.2308709 ], [ 72.6576015, 21.2308518 ], [ 72.6576096, 21.2303374 ], [ 72.6570607, 21.2303296 ], [ 72.6570486, 21.2311015 ], [ 72.6556805, 21.2308252 ], [ 72.6556886, 21.2303105 ], [ 72.6537759, 21.2297692 ], [ 72.6532475, 21.2284751 ], [ 72.6526986, 21.2284676 ], [ 72.6526863, 21.2292395 ], [ 72.652414, 21.2291066 ], [ 72.6513163, 21.2290913 ], [ 72.6507593, 21.2295982 ], [ 72.6493892, 21.229451 ], [ 72.6493771, 21.2302228 ], [ 72.6486986, 21.2296985 ], [ 72.648465, 21.2298643 ], [ 72.6474643, 21.2296813 ], [ 72.6473144, 21.2304513 ], [ 72.6466043, 21.2319854 ], [ 72.6460596, 21.2317207 ], [ 72.6464871, 21.2306972 ], [ 72.6467655, 21.2304438 ], [ 72.6467736, 21.2299291 ], [ 72.6463788, 21.2288942 ], [ 72.6455576, 21.2287535 ], [ 72.6452874, 21.2284925 ], [ 72.6444641, 21.228481 ], [ 72.6441878, 21.2286063 ], [ 72.6441794, 21.2291208 ], [ 72.6428156, 21.228587 ], [ 72.6430982, 21.2280764 ], [ 72.6425514, 21.2279395 ], [ 72.6417262, 21.2280573 ], [ 72.6417343, 21.2275426 ], [ 72.6400859, 21.2276477 ], [ 72.6389944, 21.227247 ], [ 72.638714, 21.2285296 ], [ 72.6365106, 21.2290134 ], [ 72.6365023, 21.2295279 ], [ 72.6359514, 21.2296485 ], [ 72.6353944, 21.2301554 ], [ 72.6342885, 21.2306545 ], [ 72.6337316, 21.2311614 ], [ 72.6335499, 21.2311994 ], [ 72.6333214, 21.2310274 ], [ 72.6332808, 21.2308571 ], [ 72.6334632, 21.2307721 ], [ 72.6334673, 21.2305148 ], [ 72.6331929, 21.2305109 ], [ 72.633096, 21.2306785 ], [ 72.632638, 21.2308887 ], [ 72.6309894, 21.2309947 ], [ 72.6309852, 21.2312519 ], [ 72.6333592, 21.2313729 ], [ 72.6334509, 21.2315439 ], [ 72.632902, 21.2315362 ], [ 72.6327522, 21.2323062 ], [ 72.6342517, 21.2329701 ], [ 72.6343863, 21.2331011 ], [ 72.6343781, 21.2336158 ], [ 72.6340995, 21.2338692 ], [ 72.6340954, 21.2341264 ], [ 72.6343657, 21.2343876 ], [ 72.6343617, 21.2346449 ], [ 72.6340831, 21.2348983 ], [ 72.6339381, 21.2354109 ], [ 72.6333893, 21.2354033 ], [ 72.6333851, 21.2356605 ], [ 72.6344768, 21.2360614 ], [ 72.6348818, 21.2364536 ], [ 72.6348489, 21.2385118 ], [ 72.6347081, 21.2387673 ], [ 72.635257, 21.2387749 ], [ 72.6353855, 21.2392914 ], [ 72.635521, 21.2394216 ], [ 72.636068, 21.2395583 ], [ 72.6359221, 21.2400711 ], [ 72.6360576, 21.2402011 ], [ 72.636879, 21.2403417 ], [ 72.6365921, 21.2411098 ], [ 72.6368686, 21.2409845 ], [ 72.6374174, 21.2409922 ], [ 72.6390559, 21.2415299 ], [ 72.6393243, 21.24192 ], [ 72.6374093, 21.2415069 ], [ 72.6363095, 21.2416205 ], [ 72.6361801, 21.2411039 ], [ 72.6356393, 21.2405817 ], [ 72.635515, 21.239808 ], [ 72.6341407, 21.2399168 ], [ 72.6338684, 21.2397849 ], [ 72.6340092, 21.2395296 ], [ 72.6340298, 21.238243 ], [ 72.6344583, 21.2372196 ], [ 72.6333626, 21.2370752 ], [ 72.6325456, 21.2366781 ], [ 72.6325537, 21.2361635 ], [ 72.6317346, 21.2358947 ], [ 72.631302, 21.2371754 ], [ 72.6312731, 21.2389764 ], [ 72.6307036, 21.2402551 ], [ 72.6302884, 21.2405067 ], [ 72.6300345, 21.2392164 ], [ 72.6294815, 21.2394659 ], [ 72.6293275, 21.2404931 ], [ 72.6298557, 21.2417872 ], [ 72.630168, 21.2421366 ], [ 72.630067104306733, 21.242742480664063 ], [ 72.63004524684149, 21.242873735181764 ], [ 72.63003379883942, 21.242942480664063 ], [ 72.6299688, 21.2433328 ], [ 72.6296943, 21.243329 ], [ 72.629470040939964, 21.242742480664063 ], [ 72.6292986, 21.2422941 ], [ 72.6290283, 21.2420329 ], [ 72.6288998, 21.2415165 ], [ 72.6275193, 21.2420117 ], [ 72.6277856, 21.2425301 ], [ 72.6269663, 21.2422614 ], [ 72.6271154, 21.2414914 ], [ 72.6267125, 21.2409711 ], [ 72.6261636, 21.2409633 ], [ 72.6264258, 21.241739 ], [ 72.6258748, 21.2418594 ], [ 72.6253197, 21.2422381 ], [ 72.625490189377501, 21.242742480664063 ], [ 72.625490189377487, 21.242742480664063 ], [ 72.6255819, 21.2430138 ], [ 72.625033, 21.243006 ], [ 72.6250289, 21.2432634 ], [ 72.6255777, 21.2432712 ], [ 72.6255694, 21.2437857 ], [ 72.6261183, 21.2437934 ], [ 72.6258191, 21.2453332 ], [ 72.6269128, 21.2456061 ], [ 72.6269209, 21.2450915 ], [ 72.6277403, 21.2453604 ], [ 72.6277278, 21.2461321 ], [ 72.6282808, 21.2458826 ], [ 72.6286756, 21.2469176 ], [ 72.6286715, 21.2471748 ], [ 72.6283929, 21.2474283 ], [ 72.6283806, 21.2482001 ], [ 72.628913, 21.249237 ], [ 72.6299984, 21.2500244 ], [ 72.6305267, 21.2513184 ], [ 72.6310633, 21.2520981 ], [ 72.6313131, 21.2536456 ], [ 72.6315792, 21.254164 ], [ 72.6322536, 21.2549455 ], [ 72.6314343, 21.2546768 ], [ 72.6315628, 21.2551931 ], [ 72.6316985, 21.2553234 ], [ 72.6330729, 21.2552145 ], [ 72.6330646, 21.2557289 ], [ 72.6336134, 21.2557367 ], [ 72.6340001, 21.2572861 ], [ 72.6342704, 21.2575473 ], [ 72.6343957, 21.2583211 ], [ 72.6349448, 21.2583288 ], [ 72.6349406, 21.2585861 ], [ 72.6347671, 21.2593379 ], [ 72.6341132, 21.2588318 ], [ 72.6337215, 21.2575396 ], [ 72.6334511, 21.2572786 ], [ 72.6333226, 21.256762 ], [ 72.6325033, 21.2564931 ], [ 72.6325116, 21.2559786 ], [ 72.6311434, 21.2557019 ], [ 72.6312761, 21.2559612 ], [ 72.6311186, 21.2572457 ], [ 72.6308442, 21.2572419 ], [ 72.6308565, 21.25647 ], [ 72.6303035, 21.2567195 ], [ 72.6303118, 21.256205 ], [ 72.6308607, 21.2562128 ], [ 72.6308896, 21.2544116 ], [ 72.6303405, 21.2544041 ], [ 72.6304815, 21.2541485 ], [ 72.6304896, 21.2536341 ], [ 72.630357, 21.2533748 ], [ 72.6295337, 21.2533632 ], [ 72.6294326, 21.2537881 ], [ 72.6292509, 21.2538739 ], [ 72.6292634, 21.253102 ], [ 72.6298143, 21.2529807 ], [ 72.6299531, 21.2528544 ], [ 72.6301031, 21.2520845 ], [ 72.6290115, 21.2516826 ], [ 72.6287412, 21.2514216 ], [ 72.6273689, 21.2514022 ], [ 72.6268263, 21.251009 ], [ 72.6268427, 21.2499799 ], [ 72.6258357, 21.2501345 ], [ 72.6254745, 21.2497032 ], [ 72.6252001, 21.2496995 ], [ 72.625192, 21.2502139 ], [ 72.625645, 21.2503079 ], [ 72.6257325, 21.2507363 ], [ 72.6243521, 21.2512315 ], [ 72.6243604, 21.2507169 ], [ 72.6249092, 21.2507246 ], [ 72.6249215, 21.2499527 ], [ 72.6240941, 21.2501984 ], [ 72.6238072, 21.2509665 ], [ 72.6232583, 21.2509588 ], [ 72.6233785, 21.2519898 ], [ 72.6230999, 21.2522432 ], [ 72.622955, 21.2527558 ], [ 72.6227754, 21.2526649 ], [ 72.6228338, 21.2517248 ], [ 72.6219068, 21.249653 ], [ 72.6210752, 21.2501559 ], [ 72.6212402, 21.2510992 ], [ 72.6207841, 21.2511812 ], [ 72.6207718, 21.2519531 ], [ 72.6193995, 21.2519336 ], [ 72.6194037, 21.2516764 ], [ 72.6205014, 21.2516919 ], [ 72.6205097, 21.2511773 ], [ 72.6203301, 21.2510863 ], [ 72.6202477, 21.2504016 ], [ 72.6207966, 21.2504094 ], [ 72.6210875, 21.249384 ], [ 72.6216365, 21.2493918 ], [ 72.6213702, 21.2488733 ], [ 72.6208193, 21.2489937 ], [ 72.6202642, 21.2493725 ], [ 72.6200022, 21.2485967 ], [ 72.6186278, 21.2487055 ], [ 72.6183492, 21.248959 ], [ 72.617528, 21.2488191 ], [ 72.6175197, 21.2493338 ], [ 72.6165169, 21.2492309 ], [ 72.6165628, 21.2490627 ], [ 72.6169812, 21.2486823 ], [ 72.6178128, 21.2481793 ], [ 72.6197359, 21.2480782 ], [ 72.6196106, 21.2473045 ], [ 72.6192079, 21.2467841 ], [ 72.6190281, 21.246693 ], [ 72.6192201, 21.2460123 ], [ 72.6189436, 21.2461366 ], [ 72.617848, 21.2459928 ], [ 72.6178605, 21.2452209 ], [ 72.6173075, 21.2454706 ], [ 72.6172908, 21.2464997 ], [ 72.616742, 21.2464919 ], [ 72.6167337, 21.2470064 ], [ 72.6159145, 21.2467375 ], [ 72.6158979, 21.2477668 ], [ 72.615349, 21.2477588 ], [ 72.6156401, 21.2467337 ], [ 72.6150912, 21.2467259 ], [ 72.6150994, 21.2462113 ], [ 72.6140058, 21.2459386 ], [ 72.614301, 21.244656 ], [ 72.6137522, 21.2446483 ], [ 72.6135025, 21.2431005 ], [ 72.6129537, 21.2430928 ], [ 72.612916018323659, 21.242942480664063 ], [ 72.612893967771114, 21.242854516838239 ], [ 72.612865882822305, 21.242742480664063 ], [ 72.6128242, 21.2425762 ], [ 72.6125539, 21.242315 ], [ 72.6125664, 21.2415434 ], [ 72.6124339, 21.2412841 ], [ 72.6118851, 21.2412763 ], [ 72.6118973, 21.2405044 ], [ 72.6110741, 21.2404927 ], [ 72.610779, 21.2417753 ], [ 72.6102322, 21.2416384 ], [ 72.609962, 21.2413772 ], [ 72.6094109, 21.2414986 ], [ 72.6094316, 21.2402122 ], [ 72.6088828, 21.2402043 ], [ 72.6090155, 21.2404636 ], [ 72.6088539, 21.2420053 ], [ 72.6096772, 21.242017 ], [ 72.609673, 21.2422742 ], [ 72.6091241, 21.2422665 ], [ 72.6088456, 21.2425199 ], [ 72.60884007906327, 21.242858188825608 ], [ 72.6088372, 21.2430346 ], [ 72.6091117, 21.2430384 ], [ 72.609134254675894, 21.242942480664063 ], [ 72.6092118, 21.2426127 ], [ 72.6093944, 21.2425277 ], [ 72.609387709989278, 21.242942480664063 ], [ 72.609387709989292, 21.242942480664063 ], [ 72.6093861, 21.2430423 ], [ 72.6101136, 21.2431402 ], [ 72.6099266, 21.2435645 ], [ 72.6112967, 21.2437123 ], [ 72.611972, 21.2443657 ], [ 72.6122381, 21.2448841 ], [ 72.6120682, 21.2469404 ], [ 72.6117938, 21.2469365 ], [ 72.6116892, 21.2448764 ], [ 72.6112905, 21.2440986 ], [ 72.6096418, 21.2442035 ], [ 72.609095, 21.2440675 ], [ 72.6091033, 21.243553 ], [ 72.6085545, 21.2435452 ], [ 72.6081704, 21.2444806 ], [ 72.607989, 21.2445664 ], [ 72.6079807, 21.2450811 ], [ 72.607436, 21.2448161 ], [ 72.6075851, 21.2440461 ], [ 72.6078637, 21.2437926 ], [ 72.607802152152104, 21.242942480664063 ], [ 72.607802152152118, 21.242942480664063 ], [ 72.6077518, 21.242247 ], [ 72.607203, 21.2422393 ], [ 72.6072113, 21.2417248 ], [ 72.6077601, 21.2417325 ], [ 72.6082005, 21.2399374 ], [ 72.6080678, 21.2396781 ], [ 72.6075148, 21.2399276 ], [ 72.6076392, 21.2407014 ], [ 72.6072196, 21.2412102 ], [ 72.60704, 21.2411191 ], [ 72.6071069, 21.2396645 ], [ 72.6076641, 21.2391578 ], [ 72.60781, 21.238645 ], [ 72.6086291, 21.238914 ], [ 72.6086375, 21.2383995 ], [ 72.6091801, 21.2387928 ], [ 72.6097269, 21.2389297 ], [ 72.6098801, 21.2379025 ], [ 72.6104415, 21.2371383 ], [ 72.6104581, 21.2361092 ], [ 72.6103254, 21.2358499 ], [ 72.6097747, 21.2359705 ], [ 72.6089618, 21.235316 ], [ 72.6089699, 21.2348014 ], [ 72.6075938, 21.2350393 ], [ 72.6075855, 21.2355538 ], [ 72.6070366, 21.235546 ], [ 72.6074394, 21.2360663 ], [ 72.6075689, 21.2365829 ], [ 72.60702, 21.2365751 ], [ 72.6070283, 21.2360607 ], [ 72.6062009, 21.2363062 ], [ 72.6061884, 21.237078 ], [ 72.605363, 21.2371945 ], [ 72.6050907, 21.2370624 ], [ 72.6049365, 21.2380896 ], [ 72.6050657, 21.2386061 ], [ 72.6042425, 21.2385944 ], [ 72.6045003, 21.2396275 ], [ 72.6039514, 21.2396197 ], [ 72.6039597, 21.2391051 ], [ 72.6036853, 21.2391013 ], [ 72.6039348, 21.2406488 ], [ 72.6044836, 21.2406566 ], [ 72.6044587, 21.2422003 ], [ 72.603361, 21.2421846 ], [ 72.603351965787922, 21.242742480664063 ], [ 72.6033485, 21.2429565 ], [ 72.602908672298497, 21.242742480664063 ], [ 72.602908672298483, 21.242742480664063 ], [ 72.6022591, 21.2424264 ], [ 72.602195373440267, 21.242942480664063 ], [ 72.6021005, 21.2437108 ], [ 72.6013942, 21.2449875 ], [ 72.6008495, 21.2447223 ], [ 72.6008371, 21.2454942 ], [ 72.6013838, 21.2456303 ], [ 72.6015184, 21.2457613 ], [ 72.601914, 21.2467962 ], [ 72.6008119, 21.247038 ], [ 72.6010656, 21.2483283 ], [ 72.6005167, 21.2483203 ], [ 72.6005125, 21.2485778 ], [ 72.6010614, 21.2485855 ], [ 72.600907, 21.2496127 ], [ 72.6004876, 21.2501213 ], [ 72.5993855, 21.250363 ], [ 72.5993772, 21.2508777 ], [ 72.6004729, 21.2510213 ], [ 72.6014226, 21.2516787 ], [ 72.6014018, 21.2529652 ], [ 72.6012608, 21.2532205 ], [ 72.5999011, 21.2524292 ], [ 72.5999136, 21.2516573 ], [ 72.5993627, 21.2517777 ], [ 72.5990903, 21.2516456 ], [ 72.5990778, 21.2524173 ], [ 72.5985288, 21.2524095 ], [ 72.5982795, 21.250862 ], [ 72.5980051, 21.250858 ], [ 72.5981126, 21.2526609 ], [ 72.5985039, 21.2539533 ], [ 72.5996016, 21.253969 ], [ 72.5997301, 21.2544853 ], [ 72.5998656, 21.2546155 ], [ 72.6004126, 21.2547524 ], [ 72.6001172, 21.2560349 ], [ 72.5999376, 21.2559438 ], [ 72.5993105, 21.2549941 ], [ 72.5987616, 21.2549864 ], [ 72.5986072, 21.2560134 ], [ 72.5988733, 21.2565318 ], [ 72.5988609, 21.2573037 ], [ 72.5991311, 21.2575649 ], [ 72.5999253, 21.2593776 ], [ 72.599917, 21.2598922 ], [ 72.5994974, 21.2604008 ], [ 72.5986781, 21.2601319 ], [ 72.5987815, 21.2621922 ], [ 72.5991729, 21.2634844 ], [ 72.5997218, 21.2634921 ], [ 72.599464, 21.2624592 ], [ 72.6002791, 21.2629854 ], [ 72.6002874, 21.262471 ], [ 72.6008384, 21.2623496 ], [ 72.6009773, 21.2622234 ], [ 72.6011442, 21.2604245 ], [ 72.6014165, 21.2605564 ], [ 72.6019654, 21.2605643 ], [ 72.6021043, 21.2604381 ], [ 72.6019884, 21.2591497 ], [ 72.6028076, 21.2594186 ], [ 72.6029361, 21.2599351 ], [ 72.6032064, 21.2601963 ], [ 72.6033356, 21.2607129 ], [ 72.6052529, 21.2609975 ], [ 72.605402, 21.2602275 ], [ 72.6055418, 21.2601005 ], [ 72.6066377, 21.2602451 ], [ 72.606646, 21.2597306 ], [ 72.6069204, 21.2597344 ], [ 72.6070446, 21.2605084 ], [ 72.6079954, 21.2611648 ], [ 72.6093678, 21.2611842 ], [ 72.6095023, 21.2613152 ], [ 72.6096276, 21.262089 ], [ 72.6110041, 21.2618512 ], [ 72.6110208, 21.2608221 ], [ 72.6112952, 21.2608259 ], [ 72.6114112, 21.2621143 ], [ 72.6109875, 21.2628803 ], [ 72.6115384, 21.262759 ], [ 72.6119642, 21.2618648 ], [ 72.6123827, 21.2614842 ], [ 72.6132082, 21.2613678 ], [ 72.6133532, 21.2608552 ], [ 72.6134931, 21.260728 ], [ 72.614044, 21.2606076 ], [ 72.6140523, 21.260093 ], [ 72.6129503, 21.2603347 ], [ 72.6132309, 21.2599521 ], [ 72.6140565, 21.2598357 ], [ 72.613927, 21.2593192 ], [ 72.6135241, 21.2587989 ], [ 72.6132476, 21.258923 ], [ 72.6126987, 21.2589153 ], [ 72.6121559, 21.258522 ], [ 72.61216, 21.2582648 ], [ 72.6132559, 21.2584086 ], [ 72.6138068, 21.2582882 ], [ 72.6136411, 21.2573439 ], [ 72.6138234, 21.2572589 ], [ 72.613952, 21.2577754 ], [ 72.6140875, 21.2579057 ], [ 72.6146344, 21.2580425 ], [ 72.6146261, 21.2585571 ], [ 72.615175, 21.2585649 ], [ 72.6151585, 21.259594 ], [ 72.615986, 21.2593483 ], [ 72.6159943, 21.2588338 ], [ 72.6164014, 21.2590969 ], [ 72.617061, 21.2607785 ], [ 72.6178866, 21.260662 ], [ 72.617466, 21.2611706 ], [ 72.6171708, 21.2624532 ], [ 72.6168922, 21.2627066 ], [ 72.6168799, 21.2634785 ], [ 72.616593, 21.2642464 ], [ 72.6165806, 21.2650183 ], [ 72.6162853, 21.2663008 ], [ 72.6165556, 21.266562 ], [ 72.6166809, 21.2673358 ], [ 72.6161381, 21.2669417 ], [ 72.6155913, 21.2668057 ], [ 72.6155789, 21.2675775 ], [ 72.6147554, 21.2675658 ], [ 72.6144643, 21.2685912 ], [ 72.615292, 21.2683455 ], [ 72.6152753, 21.2693746 ], [ 72.61555, 21.2693785 ], [ 72.6156949, 21.268866 ], [ 72.6163899, 21.2683611 ], [ 72.6162149, 21.2706747 ], [ 72.6168954, 21.2710699 ], [ 72.6172963, 21.2717193 ], [ 72.6171098, 21.2748047 ], [ 72.6176588, 21.2748127 ], [ 72.6176547, 21.2750699 ], [ 72.6171056, 21.2750621 ], [ 72.6175086, 21.2755824 ], [ 72.6176297, 21.2766136 ], [ 72.6170807, 21.2766057 ], [ 72.6172092, 21.2771222 ], [ 72.6169306, 21.2773757 ], [ 72.6167854, 21.2778882 ], [ 72.6173345, 21.277896 ], [ 72.6174547, 21.2789272 ], [ 72.6171719, 21.2794379 ], [ 72.6174133, 21.2815 ], [ 72.6172598, 21.2825273 ], [ 72.6167129, 21.2823904 ], [ 72.6164426, 21.2821292 ], [ 72.6158936, 21.2821215 ], [ 72.615617, 21.2822466 ], [ 72.6156046, 21.2830185 ], [ 72.6162861, 21.2832855 ], [ 72.6164156, 21.2838019 ], [ 72.6175178, 21.2835601 ], [ 72.6173717, 21.2840729 ], [ 72.6180523, 21.2844681 ], [ 72.6186014, 21.2844758 ], [ 72.6190064, 21.284868 ], [ 72.6189981, 21.2853825 ], [ 72.6187195, 21.2856359 ], [ 72.6187153, 21.2858932 ], [ 72.6196662, 21.2865496 ], [ 72.6204857, 21.2868185 ], [ 72.6218582, 21.286838 ], [ 72.6224114, 21.2865885 ], [ 72.6262526, 21.2867718 ], [ 72.6261555, 21.2869393 ], [ 72.6251483, 21.2871417 ], [ 72.6235033, 21.2869903 ], [ 72.6234991, 21.2872475 ], [ 72.6240481, 21.2872553 ], [ 72.624044, 21.2875127 ], [ 72.6229438, 21.2876253 ], [ 72.621852, 21.2872243 ], [ 72.6217019, 21.2879943 ], [ 72.6218314, 21.2885108 ], [ 72.6242999, 21.2886739 ], [ 72.6249795, 21.2890699 ], [ 72.6249673, 21.2898417 ], [ 72.6251028, 21.289972 ], [ 72.6281122, 21.290658 ], [ 72.627938, 21.2902286 ], [ 72.6283951, 21.2901474 ], [ 72.6285195, 21.2909211 ], [ 72.6286552, 21.2910513 ], [ 72.6292043, 21.2910591 ], [ 72.6294745, 21.2913203 ], [ 72.6302961, 21.2914609 ], [ 72.630292, 21.2917181 ], [ 72.6283723, 21.291562 ], [ 72.6275571, 21.2910358 ], [ 72.6250905, 21.2907437 ], [ 72.624271, 21.2904749 ], [ 72.6234475, 21.2904632 ], [ 72.6229024, 21.2901982 ], [ 72.6179756, 21.2892282 ], [ 72.6179673, 21.2897427 ], [ 72.6190633, 21.2898865 ], [ 72.6200175, 21.2902865 ], [ 72.620054, 21.2907132 ], [ 72.6197752, 21.2909667 ], [ 72.6179467, 21.2910292 ], [ 72.6180791, 21.2912883 ], [ 72.6180669, 21.2920602 ], [ 72.6186076, 21.2925826 ], [ 72.6191358, 21.2938769 ], [ 72.6191317, 21.2941341 ], [ 72.6188531, 21.2943876 ], [ 72.6186996, 21.2954148 ], [ 72.6184252, 21.2954108 ], [ 72.6181631, 21.2946352 ], [ 72.6170691, 21.2943622 ], [ 72.6171653, 21.2941938 ], [ 72.61845, 21.2938671 ], [ 72.6176431, 21.2928262 ], [ 72.6173685, 21.2928225 ], [ 72.6172141, 21.2938497 ], [ 72.6165242, 21.2940973 ], [ 72.6161285, 21.2930621 ], [ 72.6157255, 21.2925418 ], [ 72.6151744, 21.2926622 ], [ 72.6146191, 21.2930408 ], [ 72.6146274, 21.2925263 ], [ 72.6137934, 21.2931574 ], [ 72.6126953, 21.2931417 ], [ 72.6124188, 21.293267 ], [ 72.6124271, 21.2927523 ], [ 72.6115993, 21.292998 ], [ 72.6118905, 21.2919727 ], [ 72.6113415, 21.291965 ], [ 72.6111912, 21.2927348 ], [ 72.6113249, 21.2929941 ], [ 72.6107737, 21.2931145 ], [ 72.6102183, 21.293493 ], [ 72.6099189, 21.2950328 ], [ 72.6096443, 21.2950288 ], [ 72.6095275, 21.2937406 ], [ 72.6098393, 21.291429 ], [ 72.609216, 21.2875599 ], [ 72.6086669, 21.2875522 ], [ 72.6085167, 21.288322 ], [ 72.608783, 21.2888404 ], [ 72.6088748, 21.2916726 ], [ 72.6083258, 21.2916648 ], [ 72.6081797, 21.2921774 ], [ 72.6079011, 21.2924307 ], [ 72.6077477, 21.2934579 ], [ 72.6073396, 21.2931948 ], [ 72.6075023, 21.2916531 ], [ 72.6066828, 21.291384 ], [ 72.6065534, 21.2908676 ], [ 72.6064188, 21.2907365 ], [ 72.6068741, 21.2907023 ], [ 72.6069658, 21.2908735 ], [ 72.6072402, 21.2908773 ], [ 72.6072443, 21.29062 ], [ 72.6068363, 21.290357 ], [ 72.6067036, 21.2900976 ], [ 72.6053269, 21.2903354 ], [ 72.6053394, 21.2895635 ], [ 72.6061629, 21.2895753 ], [ 72.6063247, 21.2880336 ], [ 72.6064645, 21.2879064 ], [ 72.6070157, 21.287786 ], [ 72.6073152, 21.2862462 ], [ 72.6070448, 21.285985 ], [ 72.6081449, 21.2858716 ], [ 72.6084258, 21.28549 ], [ 72.607051, 21.2855987 ], [ 72.606498, 21.2858482 ], [ 72.6026547, 21.2857936 ], [ 72.6023823, 21.2856614 ], [ 72.6016664, 21.2874526 ], [ 72.6008303, 21.2882126 ], [ 72.6002604, 21.2894911 ], [ 72.5996987, 21.2902553 ], [ 72.5996904, 21.2907697 ], [ 72.5988293, 21.2930736 ], [ 72.5987874, 21.2956463 ], [ 72.5992946, 21.2982269 ], [ 72.5995651, 21.2984881 ], [ 72.5994073, 21.2997726 ], [ 72.5999565, 21.2997805 ], [ 72.5999314, 21.3013241 ], [ 72.601849, 21.3016089 ], [ 72.6023438, 21.3049614 ], [ 72.6028928, 21.3049691 ], [ 72.6024679, 21.3057351 ], [ 72.6025891, 21.3067661 ], [ 72.6023186, 21.3065049 ], [ 72.6017696, 21.3064972 ], [ 72.6017613, 21.3070116 ], [ 72.601212, 21.3070039 ], [ 72.6012037, 21.3075185 ], [ 72.6018854, 21.3077856 ], [ 72.6018647, 21.3090719 ], [ 72.6021349, 21.3093331 ], [ 72.6019856, 21.3101029 ], [ 72.6011619, 21.3100912 ], [ 72.6015441, 21.311898 ], [ 72.601519, 21.3134418 ], [ 72.6012277, 21.3144669 ], [ 72.6015774, 21.318332 ], [ 72.6032205, 21.3186128 ], [ 72.6033491, 21.3191294 ], [ 72.6040276, 21.3196537 ], [ 72.6043271, 21.3181139 ], [ 72.6048784, 21.3179927 ], [ 72.6051572, 21.3177393 ], [ 72.6057042, 21.3178761 ], [ 72.6058662, 21.3163344 ], [ 72.6055957, 21.3160732 ], [ 72.6055999, 21.315816 ], [ 72.6061574, 21.3153093 ], [ 72.6063118, 21.3142821 ], [ 72.6065864, 21.3142861 ], [ 72.6069644, 21.3163501 ], [ 72.6072347, 21.3166113 ], [ 72.6073517, 21.3178995 ], [ 72.6079007, 21.3179075 ], [ 72.6077505, 21.3186773 ], [ 72.6078862, 21.3188075 ], [ 72.6089845, 21.3188232 ], [ 72.6092632, 21.3185697 ], [ 72.610089, 21.3184533 ], [ 72.6101935, 21.3177703 ], [ 72.6109274, 21.3175641 ], [ 72.6118983, 21.3169349 ], [ 72.6120444, 21.3164223 ], [ 72.6125955, 21.316301 ], [ 72.6134173, 21.3164418 ], [ 72.613409, 21.3169564 ], [ 72.6142368, 21.3167107 ], [ 72.6142451, 21.3161963 ], [ 72.6156201, 21.3160867 ], [ 72.6161774, 21.3155798 ], [ 72.6167267, 21.3155877 ], [ 72.6172674, 21.3161099 ], [ 72.6183615, 21.3163828 ], [ 72.6205581, 21.316414 ], [ 72.6208368, 21.3161606 ], [ 72.6218036, 21.3157886 ], [ 72.6219622, 21.3145042 ], [ 72.6222366, 21.3145081 ], [ 72.6219289, 21.3165624 ], [ 72.6246726, 21.3167295 ], [ 72.6252175, 21.3169944 ], [ 72.6268671, 21.3168895 ], [ 72.6268588, 21.3174042 ], [ 72.6263097, 21.3173964 ], [ 72.6262972, 21.3181683 ], [ 72.6246518, 21.3180158 ], [ 72.6240986, 21.3182655 ], [ 72.6230003, 21.31825 ], [ 72.6227236, 21.3183751 ], [ 72.6227153, 21.3188897 ], [ 72.6210678, 21.3188663 ], [ 72.6210597, 21.3193809 ], [ 72.6199571, 21.3196227 ], [ 72.6199487, 21.3201371 ], [ 72.6204959, 21.3202732 ], [ 72.6207664, 21.3205344 ], [ 72.6213177, 21.320414 ], [ 72.621446, 21.3209304 ], [ 72.6218522, 21.3213218 ], [ 72.6226677, 21.3218479 ], [ 72.6234872, 21.3221169 ], [ 72.6243027, 21.3226431 ], [ 72.624852, 21.3226508 ], [ 72.6262207, 21.3229275 ], [ 72.6264974, 21.3228032 ], [ 72.6264808, 21.3238324 ], [ 72.62703, 21.3238402 ], [ 72.6270258, 21.3240974 ], [ 72.624827, 21.3241946 ], [ 72.6245586, 21.3238052 ], [ 72.6252867, 21.3239031 ], [ 72.6253783, 21.3240742 ], [ 72.6256529, 21.324078 ], [ 72.6256571, 21.3238207 ], [ 72.6253866, 21.3235595 ], [ 72.6248374, 21.3235518 ], [ 72.6248457, 21.3230373 ], [ 72.6237495, 21.3228926 ], [ 72.6234791, 21.3226315 ], [ 72.6226552, 21.3226198 ], [ 72.6218378, 21.3222227 ], [ 72.6218459, 21.3217081 ], [ 72.621299, 21.3215713 ], [ 72.6204876, 21.3207877 ], [ 72.6199427, 21.3205227 ], [ 72.6193935, 21.3205149 ], [ 72.6182806, 21.3214002 ], [ 72.6182765, 21.3216576 ], [ 72.6188257, 21.3216654 ], [ 72.6182515, 21.3232012 ], [ 72.6204503, 21.3231033 ], [ 72.6234666, 21.3234032 ], [ 72.6240117, 21.3236684 ], [ 72.6245503, 21.3243197 ], [ 72.6234583, 21.3239179 ], [ 72.6196203, 21.3234781 ], [ 72.6196161, 21.3237353 ], [ 72.6201653, 21.3237431 ], [ 72.6197446, 21.3242518 ], [ 72.6201113, 21.3270878 ], [ 72.6206605, 21.3270955 ], [ 72.620789, 21.3276121 ], [ 72.6210595, 21.3278733 ], [ 72.621047, 21.328645 ], [ 72.6204897, 21.3291519 ], [ 72.6203445, 21.3296644 ], [ 72.6198015, 21.3292704 ], [ 72.6187093, 21.3288693 ], [ 72.6193829, 21.3296508 ], [ 72.6193662, 21.3306799 ], [ 72.6196367, 21.3309411 ], [ 72.6197537, 21.3322295 ], [ 72.6192045, 21.3322218 ], [ 72.6192003, 21.332479 ], [ 72.6197495, 21.3324868 ], [ 72.6197454, 21.332744 ], [ 72.6186471, 21.3327285 ], [ 72.618385, 21.3319528 ], [ 72.6181103, 21.3319489 ], [ 72.618501, 21.3332411 ], [ 72.6186221, 21.3342722 ], [ 72.6178004, 21.3341314 ], [ 72.6172574, 21.3337381 ], [ 72.617274, 21.332709 ], [ 72.6169994, 21.3327051 ], [ 72.6169911, 21.3332197 ], [ 72.6164418, 21.333212 ], [ 72.616161, 21.3335935 ], [ 72.6158843, 21.3337187 ], [ 72.615876, 21.3342333 ], [ 72.6163294, 21.3343272 ], [ 72.6166749, 21.3357886 ], [ 72.6174987, 21.3358003 ], [ 72.6178894, 21.3370925 ], [ 72.6181599, 21.3373537 ], [ 72.6185473, 21.3389033 ], [ 72.6190965, 21.3389111 ], [ 72.6192251, 21.3394276 ], [ 72.6194955, 21.3396888 ], [ 72.619625, 21.3402053 ], [ 72.6201742, 21.3402131 ], [ 72.6205649, 21.3415053 ], [ 72.6212457, 21.3419005 ], [ 72.6219213, 21.3425538 ], [ 72.6220508, 21.3430704 ], [ 72.6226, 21.3430781 ], [ 72.6227287, 21.3435947 ], [ 72.6228644, 21.3437247 ], [ 72.6239567, 21.3441267 ], [ 72.6239484, 21.3446413 ], [ 72.6258686, 21.3447967 ], [ 72.6264137, 21.3450617 ], [ 72.6272252, 21.3458453 ], [ 72.6277724, 21.3459821 ], [ 72.6276429, 21.3454656 ], [ 72.6280636, 21.3449568 ], [ 72.6275144, 21.344949 ], [ 72.6276594, 21.3444365 ], [ 72.6277992, 21.3443093 ], [ 72.6283487, 21.344317 ], [ 72.6290285, 21.3447132 ], [ 72.6290243, 21.3449704 ], [ 72.6287456, 21.3452238 ], [ 72.6286004, 21.3457364 ], [ 72.6291517, 21.3456151 ], [ 72.6305125, 21.3464062 ], [ 72.6310617, 21.346414 ], [ 72.631467, 21.3468062 ], [ 72.6315964, 21.3473227 ], [ 72.6318712, 21.3473267 ], [ 72.6321623, 21.3463013 ], [ 72.6324348, 21.3464334 ], [ 72.6329841, 21.3464412 ], [ 72.633123, 21.3463149 ], [ 72.6332732, 21.345545 ], [ 72.6327198, 21.3457944 ], [ 72.6328692, 21.3450246 ], [ 72.6334265, 21.3445177 ], [ 72.6335892, 21.3429761 ], [ 72.6344131, 21.3429876 ], [ 72.6344006, 21.3437595 ], [ 72.6346752, 21.3437633 ], [ 72.6348204, 21.3432507 ], [ 72.6349603, 21.3431235 ], [ 72.6355116, 21.3430031 ], [ 72.6354103, 21.3434278 ], [ 72.6349499, 21.3437672 ], [ 72.6350825, 21.3440263 ], [ 72.6350536, 21.3458273 ], [ 72.634775, 21.3460808 ], [ 72.6347584, 21.3471101 ], [ 72.6351666, 21.3473732 ], [ 72.6353118, 21.3468604 ], [ 72.6354517, 21.3467332 ], [ 72.636003, 21.3466128 ], [ 72.6361523, 21.3458428 ], [ 72.6368495, 21.3452089 ], [ 72.6376756, 21.3450923 ], [ 72.6375337, 21.3453476 ], [ 72.6375254, 21.3458623 ], [ 72.6376611, 21.3459923 ], [ 72.6382103, 21.3460001 ], [ 72.6384809, 21.3462613 ], [ 72.6395794, 21.3462766 ], [ 72.6400011, 21.3456396 ], [ 72.6401595, 21.3443552 ], [ 72.6407068, 21.3444911 ], [ 72.6412436, 21.3452707 ], [ 72.6423443, 21.3451579 ], [ 72.6421982, 21.3456705 ], [ 72.6419194, 21.3459239 ], [ 72.6416284, 21.3469492 ], [ 72.6409258, 21.3479687 ], [ 72.6403764, 21.3479611 ], [ 72.6404809, 21.3472781 ], [ 72.6406635, 21.347193 ], [ 72.6406677, 21.3469358 ], [ 72.6403931, 21.3469318 ], [ 72.6402959, 21.3470995 ], [ 72.6392863, 21.347431 ], [ 72.6392944, 21.3469165 ], [ 72.6381876, 21.3474157 ], [ 72.6381836, 21.3476729 ], [ 72.6390117, 21.3474272 ], [ 72.6387204, 21.3484525 ], [ 72.6379007, 21.3481836 ], [ 72.638167, 21.348702 ], [ 72.6376178, 21.3486943 ], [ 72.6373307, 21.3494624 ], [ 72.6381568, 21.3493448 ], [ 72.6382957, 21.3492186 ], [ 72.6384416, 21.3487058 ], [ 72.6403683, 21.3484756 ], [ 72.6403641, 21.3487328 ], [ 72.6398149, 21.3487253 ], [ 72.6398024, 21.3494969 ], [ 72.6392532, 21.3494894 ], [ 72.638958, 21.3507719 ], [ 72.6386854, 21.3506389 ], [ 72.6373122, 21.3506196 ], [ 72.6362033, 21.3512478 ], [ 72.6360491, 21.3522751 ], [ 72.6361785, 21.3527916 ], [ 72.6380908, 21.3534614 ], [ 72.6411118, 21.3535037 ], [ 72.6427699, 21.3528842 ], [ 72.6426405, 21.3523677 ], [ 72.6429192, 21.3521142 ], [ 72.6432186, 21.3505744 ], [ 72.643776, 21.3500675 ], [ 72.6440672, 21.3490422 ], [ 72.6443458, 21.3487888 ], [ 72.6446329, 21.3480209 ], [ 72.6457561, 21.3464924 ], [ 72.6460511, 21.3452099 ], [ 72.6466129, 21.3444457 ], [ 72.6475889, 21.3435582 ], [ 72.6489703, 21.3430628 ], [ 72.6497941, 21.3430745 ], [ 72.6506098, 21.3436005 ], [ 72.6517062, 21.3437449 ], [ 72.6516981, 21.3442596 ], [ 72.6527924, 21.3445323 ], [ 72.6530343, 21.3465943 ], [ 72.654139, 21.3462233 ], [ 72.6542779, 21.346097 ], [ 72.6544238, 21.3455845 ], [ 72.6558032, 21.3452172 ], [ 72.6560819, 21.3449638 ], [ 72.6574613, 21.3445975 ], [ 72.6571948, 21.3440791 ], [ 72.6566474, 21.3439422 ], [ 72.6558338, 21.3432879 ], [ 72.6559829, 21.3425179 ], [ 72.6566762, 21.3421413 ], [ 72.6572314, 21.3417634 ], [ 72.6589742, 21.3416992 ], [ 72.658912, 21.3397281 ], [ 72.6591866, 21.3397319 ], [ 72.6593316, 21.3392193 ], [ 72.6594715, 21.3390921 ], [ 72.6602974, 21.3389753 ], [ 72.6602932, 21.3392325 ], [ 72.6594652, 21.3394784 ], [ 72.6591305, 21.3419492 ], [ 72.6572193, 21.3423219 ], [ 72.6563953, 21.3425238 ], [ 72.6565199, 21.3432976 ], [ 72.6569262, 21.3436888 ], [ 72.6577461, 21.3439575 ], [ 72.6593938, 21.3439806 ], [ 72.6600738, 21.3443766 ], [ 72.66047, 21.3454113 ], [ 72.6610171, 21.3455472 ], [ 72.6618247, 21.3465879 ], [ 72.6623719, 21.3467247 ], [ 72.6623637, 21.3472392 ], [ 72.662913, 21.3472469 ], [ 72.6630417, 21.3477633 ], [ 72.6637226, 21.3481584 ], [ 72.6639973, 21.3481622 ], [ 72.6655297, 21.3467685 ], [ 72.665401, 21.346252 ], [ 72.6659504, 21.3462598 ], [ 72.6660954, 21.345747 ], [ 72.6673418, 21.3451205 ], [ 72.6676164, 21.3451244 ], [ 72.6703465, 21.3461917 ], [ 72.6758353, 21.3465251 ], [ 72.6777618, 21.3462943 ], [ 72.6796701, 21.347222 ], [ 72.6795119, 21.3485041 ], [ 72.6796295, 21.3497925 ], [ 72.6793548, 21.3497887 ], [ 72.6793467, 21.3503034 ], [ 72.6796215, 21.3503072 ], [ 72.6793225, 21.3518471 ], [ 72.6791653, 21.3518443 ], [ 72.6790479, 21.3518434 ], [ 72.6792292, 21.349015 ], [ 72.6791046, 21.3482412 ], [ 72.6793792, 21.348245 ], [ 72.6794875, 21.3473047 ], [ 72.6777536, 21.346809 ], [ 72.6717075, 21.3469825 ], [ 72.6711623, 21.3467177 ], [ 72.6703384, 21.3467062 ], [ 72.668424, 21.3461649 ], [ 72.6664996, 21.3462673 ], [ 72.6663496, 21.3470373 ], [ 72.665788, 21.3478016 ], [ 72.6653685, 21.3483104 ], [ 72.6648171, 21.348431 ], [ 72.6645384, 21.3486844 ], [ 72.6631653, 21.3486653 ], [ 72.6620748, 21.3481354 ], [ 72.6612611, 21.3474813 ], [ 72.6612692, 21.3469666 ], [ 72.6607221, 21.3468298 ], [ 72.6599084, 21.3461757 ], [ 72.6596459, 21.3454 ], [ 72.6593692, 21.3455244 ], [ 72.6577194, 21.3456304 ], [ 72.6577276, 21.3451157 ], [ 72.6560697, 21.3457357 ], [ 72.6557909, 21.3459891 ], [ 72.6544116, 21.3463563 ], [ 72.6542657, 21.3468689 ], [ 72.6537081, 21.3473758 ], [ 72.6532721, 21.3489139 ], [ 72.6529975, 21.3489099 ], [ 72.6531507, 21.3478827 ], [ 72.6530179, 21.3476236 ], [ 72.6521961, 21.347483 ], [ 72.6513783, 21.3470859 ], [ 72.6511201, 21.346053 ], [ 72.6505709, 21.3460452 ], [ 72.6503208, 21.3444977 ], [ 72.6500462, 21.3444937 ], [ 72.6500379, 21.3450084 ], [ 72.6481196, 21.3447241 ], [ 72.6479737, 21.3452369 ], [ 72.6474121, 21.346001 ], [ 72.6475374, 21.3467748 ], [ 72.6469882, 21.346767 ], [ 72.645137, 21.3508587 ], [ 72.6448417, 21.3521412 ], [ 72.6448089, 21.3541995 ], [ 72.6450752, 21.3547179 ], [ 72.6449219, 21.3557453 ], [ 72.6454713, 21.3557528 ], [ 72.6458374, 21.3585888 ], [ 72.6464246, 21.358942 ], [ 72.6463662, 21.3598829 ], [ 72.6467499, 21.3616897 ], [ 72.6472993, 21.3616975 ], [ 72.6474237, 21.3624712 ], [ 72.6476943, 21.3627324 ], [ 72.6486253, 21.364675 ], [ 72.6491725, 21.3648118 ], [ 72.6493176, 21.3642992 ], [ 72.6498793, 21.3635351 ], [ 72.6503246, 21.3614826 ], [ 72.6505992, 21.3614864 ], [ 72.6504327, 21.3632854 ], [ 72.6498546, 21.3650787 ], [ 72.649435, 21.3655875 ], [ 72.6492551, 21.3654966 ], [ 72.6491685, 21.365069 ], [ 72.6486191, 21.3650615 ], [ 72.6490644, 21.3656699 ], [ 72.6490101, 21.3663537 ], [ 72.649539, 21.3676478 ], [ 72.6497355, 21.37254 ], [ 72.6488705, 21.3751013 ], [ 72.6483127, 21.3756082 ], [ 72.6481678, 21.376121 ], [ 72.6470668, 21.3762336 ], [ 72.6454271, 21.3756959 ], [ 72.6446112, 21.3751698 ], [ 72.6440701, 21.3746476 ], [ 72.6435227, 21.3745117 ], [ 72.6432356, 21.3752796 ], [ 72.6421349, 21.3753924 ], [ 72.6399251, 21.3761333 ], [ 72.6374528, 21.3760985 ], [ 72.6371823, 21.3758373 ], [ 72.6363624, 21.3755686 ], [ 72.6352761, 21.3747812 ], [ 72.6347266, 21.3747734 ], [ 72.6344562, 21.3745122 ], [ 72.6339088, 21.3743763 ], [ 72.6333263, 21.3764268 ], [ 72.6330517, 21.376423 ], [ 72.63306, 21.3759084 ], [ 72.6327852, 21.3759046 ], [ 72.6324981, 21.3766725 ], [ 72.6322235, 21.3766685 ], [ 72.632098, 21.3758948 ], [ 72.6314243, 21.3751133 ], [ 72.6306002, 21.3751017 ], [ 72.6306044, 21.3748443 ], [ 72.6322566, 21.3746103 ], [ 72.6319984, 21.3735772 ], [ 72.6322712, 21.3737094 ], [ 72.6330952, 21.3737211 ], [ 72.633517, 21.3730841 ], [ 72.6336754, 21.3717995 ], [ 72.6328514, 21.371788 ], [ 72.6325976, 21.3704977 ], [ 72.6317777, 21.3702287 ], [ 72.6315153, 21.3694531 ], [ 72.6312407, 21.3694491 ], [ 72.6312324, 21.3699638 ], [ 72.6309599, 21.3698307 ], [ 72.6282048, 21.3703066 ], [ 72.6276512, 21.3705561 ], [ 72.6265505, 21.3706697 ], [ 72.6264044, 21.3711822 ], [ 72.6258427, 21.3719464 ], [ 72.626309, 21.3770996 ], [ 72.6265794, 21.3773608 ], [ 72.6269775, 21.3782667 ], [ 72.627645, 21.3794347 ], [ 72.6277747, 21.3799513 ], [ 72.6283239, 21.379959 ], [ 72.6285738, 21.3815066 ], [ 72.6288486, 21.3815103 ], [ 72.6288567, 21.3809959 ], [ 72.6291315, 21.3809997 ], [ 72.6295223, 21.382292 ], [ 72.6299287, 21.3826833 ], [ 72.6310232, 21.3829562 ], [ 72.6316951, 21.3838668 ], [ 72.6318246, 21.3843833 ], [ 72.6326465, 21.384523 ], [ 72.6337289, 21.3855678 ], [ 72.6342761, 21.3857046 ], [ 72.6344048, 21.386221 ], [ 72.6349459, 21.3867434 ], [ 72.6350755, 21.3872599 ], [ 72.6356248, 21.3872677 ], [ 72.6357535, 21.3877842 ], [ 72.6362904, 21.3885638 ], [ 72.6368315, 21.389086 ], [ 72.6372277, 21.390121 ], [ 72.6383265, 21.3901365 ], [ 72.6385764, 21.391684 ], [ 72.6391258, 21.3916918 ], [ 72.6393798, 21.3929821 ], [ 72.6396567, 21.3928569 ], [ 72.6404787, 21.3929976 ], [ 72.6408697, 21.3942898 ], [ 72.6415509, 21.394685 ], [ 72.642092, 21.3952072 ], [ 72.6429141, 21.395348 ], [ 72.642627, 21.3961159 ], [ 72.6431744, 21.3962518 ], [ 72.6433091, 21.3963827 ], [ 72.6437053, 21.3974177 ], [ 72.6442547, 21.3974255 ], [ 72.6443834, 21.397942 ], [ 72.6446541, 21.3982032 ], [ 72.6447835, 21.3987197 ], [ 72.6453311, 21.3988556 ], [ 72.6457365, 21.3992478 ], [ 72.6458659, 21.3997641 ], [ 72.6462817, 21.3995128 ], [ 72.6464278, 21.399 ], [ 72.6458784, 21.3989925 ], [ 72.6454823, 21.3979575 ], [ 72.6450789, 21.3974372 ], [ 72.6442589, 21.3971682 ], [ 72.6440047, 21.3958779 ], [ 72.6442795, 21.3958817 ], [ 72.6444082, 21.3963982 ], [ 72.6448145, 21.3967895 ], [ 72.6450891, 21.3967934 ], [ 72.6455112, 21.3961565 ], [ 72.6458064, 21.394874 ], [ 72.6462231, 21.3946224 ], [ 72.6462109, 21.3953943 ], [ 72.6464855, 21.3953981 ], [ 72.6466389, 21.3943708 ], [ 72.6463806, 21.393338 ], [ 72.6470761, 21.3928329 ], [ 72.647068, 21.3933476 ], [ 72.6476214, 21.3930979 ], [ 72.6473303, 21.3941232 ], [ 72.648425, 21.394396 ], [ 72.6481627, 21.3936203 ], [ 72.6487121, 21.3936279 ], [ 72.6488408, 21.3941444 ], [ 72.6492471, 21.3945356 ], [ 72.6497945, 21.3946725 ], [ 72.649778, 21.3957016 ], [ 72.6503256, 21.3958375 ], [ 72.650596, 21.3960987 ], [ 72.6511455, 21.3961064 ], [ 72.6514244, 21.395853 ], [ 72.6530789, 21.3954905 ], [ 72.6530871, 21.394976 ], [ 72.654188, 21.3948622 ], [ 72.6543271, 21.394736 ], [ 72.654473, 21.3942234 ], [ 72.6550224, 21.394231 ], [ 72.6547314, 21.3952563 ], [ 72.655008, 21.395131 ], [ 72.6555577, 21.3951387 ], [ 72.6558262, 21.395529 ], [ 72.6552766, 21.3955213 ], [ 72.6552726, 21.3957785 ], [ 72.65582, 21.3959144 ], [ 72.6559547, 21.3960456 ], [ 72.6560804, 21.3968193 ], [ 72.6563551, 21.3968231 ], [ 72.6565044, 21.3960531 ], [ 72.6567383, 21.3958866 ], [ 72.6570999, 21.3958917 ], [ 72.6570538, 21.3960609 ], [ 72.656634, 21.3965697 ], [ 72.6582823, 21.3965927 ], [ 72.6577206, 21.3973569 ], [ 72.65827, 21.3973646 ], [ 72.6581158, 21.3983918 ], [ 72.657837, 21.3986453 ], [ 72.6578328, 21.3989025 ], [ 72.6589154, 21.3999471 ], [ 72.6594443, 21.4012412 ], [ 72.659432, 21.4020131 ], [ 72.6595679, 21.4021431 ], [ 72.6601173, 21.4021508 ], [ 72.6605229, 21.402543 ], [ 72.6610477, 21.4040943 ], [ 72.6613184, 21.4043555 ], [ 72.6613103, 21.40487 ], [ 72.6626389, 21.4077193 ], [ 72.6628973, 21.4087524 ], [ 72.6634386, 21.4092746 ], [ 72.6639553, 21.4113406 ], [ 72.664226, 21.4116018 ], [ 72.664081, 21.4121143 ], [ 72.6635314, 21.4121068 ], [ 72.6635233, 21.4126212 ], [ 72.6643454, 21.4127609 ], [ 72.6646161, 21.4130221 ], [ 72.6651636, 21.4131588 ], [ 72.6650216, 21.4134143 ], [ 72.6648561, 21.4152134 ], [ 72.6654057, 21.4152209 ], [ 72.6654138, 21.4147065 ], [ 72.6656886, 21.4147103 ], [ 72.6658173, 21.4152268 ], [ 72.666088, 21.4154878 ], [ 72.6662137, 21.4162616 ], [ 72.666761, 21.4163975 ], [ 72.666896, 21.4165284 ], [ 72.6670256, 21.417045 ], [ 72.6675752, 21.4170525 ], [ 72.6675669, 21.4175672 ], [ 72.6681144, 21.4177031 ], [ 72.6687826, 21.4188709 ], [ 72.6695947, 21.4196541 ], [ 72.6699908, 21.4206891 ], [ 72.6705404, 21.4206966 ], [ 72.6706692, 21.4212132 ], [ 72.6707948, 21.421987 ], [ 72.6713445, 21.4219947 ], [ 72.671469, 21.4227685 ], [ 72.6720063, 21.4235479 ], [ 72.672132, 21.4243217 ], [ 72.6715824, 21.4243141 ], [ 72.6715701, 21.425086 ], [ 72.6721197, 21.4250935 ], [ 72.6715497, 21.4263723 ], [ 72.6701717, 21.4266106 ], [ 72.6701636, 21.4271251 ], [ 72.6676986, 21.4265761 ], [ 72.6679612, 21.4273519 ], [ 72.6685149, 21.4271022 ], [ 72.6685026, 21.4278741 ], [ 72.6695956, 21.4282748 ], [ 72.6704201, 21.4282863 ], [ 72.6706928, 21.4284192 ], [ 72.6707009, 21.4279047 ], [ 72.671796, 21.4281773 ], [ 72.6718083, 21.4274054 ], [ 72.6726225, 21.4280595 ], [ 72.6734427, 21.4283283 ], [ 72.6742507, 21.4293689 ], [ 72.6758914, 21.4299064 ], [ 72.6764287, 21.4306859 ], [ 72.6777965, 21.4310915 ], [ 72.6779417, 21.4305787 ], [ 72.6780815, 21.4304515 ], [ 72.6786312, 21.4304593 ], [ 72.6790368, 21.4308512 ], [ 72.6791666, 21.4313678 ], [ 72.6793454, 21.4314577 ], [ 72.6794333, 21.4318862 ], [ 72.6805263, 21.4322869 ], [ 72.682173, 21.4324388 ], [ 72.681878, 21.4337214 ], [ 72.6829772, 21.4337367 ], [ 72.6829691, 21.4342512 ], [ 72.684341, 21.4343984 ], [ 72.6851573, 21.4349244 ], [ 72.6873497, 21.4353413 ], [ 72.6872078, 21.4355967 ], [ 72.6871997, 21.4361111 ], [ 72.6875981, 21.437017 ], [ 72.6878729, 21.4370208 ], [ 72.6882908, 21.4366411 ], [ 72.6888566, 21.4356193 ], [ 72.6888646, 21.4351049 ], [ 72.6887317, 21.4348456 ], [ 72.6892813, 21.4348531 ], [ 72.6888362, 21.4369059 ], [ 72.6885574, 21.4371593 ], [ 72.6884125, 21.4376721 ], [ 72.6900572, 21.4379522 ], [ 72.6900451, 21.438724 ], [ 72.6905947, 21.4387316 ], [ 72.6905865, 21.4392462 ], [ 72.6911362, 21.4392538 ], [ 72.6911322, 21.439511 ], [ 72.6894813, 21.4396165 ], [ 72.6892044, 21.4397418 ], [ 72.6889235, 21.4401234 ], [ 72.6886466, 21.4402487 ], [ 72.6885455, 21.4406736 ], [ 72.6884586, 21.4406724 ], [ 72.6883679, 21.4405023 ], [ 72.6880929, 21.4404984 ], [ 72.6880889, 21.4407558 ], [ 72.6884966, 21.4410187 ], [ 72.6891881, 21.4407709 ], [ 72.6892925, 21.4400879 ], [ 72.6905603, 21.4409181 ], [ 72.6919303, 21.4411943 ], [ 72.6924697, 21.4418456 ], [ 72.6919201, 21.441838 ], [ 72.6923238, 21.4423583 ], [ 72.6923117, 21.4431302 ], [ 72.6918836, 21.4441536 ], [ 72.691334, 21.4441461 ], [ 72.6914588, 21.4449198 ], [ 72.6922753, 21.4454458 ], [ 72.6921301, 21.4459586 ], [ 72.6915805, 21.445951 ], [ 72.6917052, 21.4467248 ], [ 72.6914102, 21.4480073 ], [ 72.6916769, 21.4485258 ], [ 72.6917905, 21.4500714 ], [ 72.6923403, 21.450079 ], [ 72.6920532, 21.4508471 ], [ 72.692603, 21.4508546 ], [ 72.6927115, 21.4526575 ], [ 72.6922917, 21.4531665 ], [ 72.6928392, 21.4533022 ], [ 72.6929742, 21.4534333 ], [ 72.6929498, 21.4549771 ], [ 72.6928088, 21.4552324 ], [ 72.6933586, 21.45524 ], [ 72.6930675, 21.4562653 ], [ 72.6936172, 21.4562729 ], [ 72.6934631, 21.4573003 ], [ 72.693593, 21.4578166 ], [ 72.6941426, 21.4578244 ], [ 72.6942633, 21.4588554 ], [ 72.6941224, 21.4591107 ], [ 72.694947, 21.4591221 ], [ 72.6950636, 21.4604105 ], [ 72.6956052, 21.4609327 ], [ 72.6961348, 21.4622268 ], [ 72.6969471, 21.46301 ], [ 72.697073, 21.4637837 ], [ 72.6976226, 21.4637913 ], [ 72.6977515, 21.4643076 ], [ 72.6980224, 21.4645688 ], [ 72.6981522, 21.4650854 ], [ 72.7003371, 21.4660156 ], [ 72.7006079, 21.4662766 ], [ 72.7025238, 21.4668178 ], [ 72.704169, 21.4670977 ], [ 72.7077404, 21.4672759 ], [ 72.7075657, 21.4668463 ], [ 72.712698, 21.4667 ], [ 72.7132518, 21.4664501 ], [ 72.7138014, 21.4664577 ], [ 72.7146341, 21.4659544 ], [ 72.7160144, 21.4655876 ], [ 72.7160225, 21.4650731 ], [ 72.7174028, 21.4647055 ], [ 72.7179605, 21.4641984 ], [ 72.719066, 21.4638278 ], [ 72.7190741, 21.4633133 ], [ 72.7199006, 21.4631954 ], [ 72.7207334, 21.4626921 ], [ 72.7218388, 21.4623214 ], [ 72.7218468, 21.461807 ], [ 72.7223966, 21.4618144 ], [ 72.7224045, 21.4612999 ], [ 72.7229562, 21.4611782 ], [ 72.7232352, 21.4609247 ], [ 72.7237868, 21.460804 ], [ 72.7237948, 21.4602893 ], [ 72.7243465, 21.4601678 ], [ 72.72545, 21.4599255 ], [ 72.7309471, 21.4600001 ], [ 72.7325884, 21.4605371 ], [ 72.7334011, 21.4613201 ], [ 72.7342215, 21.4615887 ], [ 72.7348944, 21.4624989 ], [ 72.7353011, 21.46289 ], [ 72.735853, 21.4627692 ], [ 72.7359739, 21.4638004 ], [ 72.7365118, 21.4645796 ], [ 72.7373085, 21.4663919 ], [ 72.7374306, 21.4674229 ], [ 72.7379843, 21.4671731 ], [ 72.7381013, 21.4684615 ], [ 72.7383724, 21.4687225 ], [ 72.7386273, 21.4700128 ], [ 72.7387632, 21.4701428 ], [ 72.7393111, 21.4702793 ], [ 72.7390282, 21.4707902 ], [ 72.739578, 21.4707977 ], [ 72.739299, 21.4710512 ], [ 72.7392871, 21.471823 ], [ 72.7395621, 21.4718268 ], [ 72.7396663, 21.4711438 ], [ 72.7398488, 21.4710587 ], [ 72.7394718, 21.4687374 ], [ 72.7392009, 21.4684764 ], [ 72.7395075, 21.4664216 ], [ 72.7400771, 21.4651426 ], [ 72.7406388, 21.4643781 ], [ 72.7406508, 21.4636063 ], [ 72.7412083, 21.463099 ], [ 72.7413582, 21.462329 ], [ 72.7419099, 21.4622073 ], [ 72.7423357, 21.4613127 ], [ 72.7431799, 21.4600374 ], [ 72.7437377, 21.4595303 ], [ 72.7443111, 21.4579939 ], [ 72.7445901, 21.4577403 ], [ 72.7450185, 21.4567166 ], [ 72.7466717, 21.4564815 ], [ 72.7466797, 21.4559669 ], [ 72.7469526, 21.4560988 ], [ 72.7483308, 21.4558601 ], [ 72.7527265, 21.4560483 ], [ 72.7525965, 21.4555318 ], [ 72.7523255, 21.4552708 ], [ 72.7516823, 21.4524313 ], [ 72.7511325, 21.4524239 ], [ 72.7510064, 21.4516501 ], [ 72.7502017, 21.4503525 ], [ 72.7500805, 21.4493215 ], [ 72.7495309, 21.4493141 ], [ 72.7496995, 21.4472576 ], [ 72.749986, 21.4464893 ], [ 72.7500019, 21.44546 ], [ 72.7501418, 21.4453328 ], [ 72.7509683, 21.4452156 ], [ 72.7509762, 21.4447012 ], [ 72.7531729, 21.4448588 ], [ 72.754814, 21.4453955 ], [ 72.7553559, 21.4459176 ], [ 72.7567261, 21.4461933 ], [ 72.756997, 21.4464543 ], [ 72.7597335, 21.4472631 ], [ 72.7604103, 21.4479159 ], [ 72.7608133, 21.4485643 ], [ 72.761361, 21.4487008 ], [ 72.7617258, 21.451794 ], [ 72.7623956, 21.4529605 ], [ 72.7629433, 21.4530969 ], [ 72.762963, 21.4518104 ], [ 72.7635128, 21.4518178 ], [ 72.7632497, 21.4510423 ], [ 72.7637993, 21.4510495 ], [ 72.7637915, 21.4515641 ], [ 72.7643411, 21.4515715 ], [ 72.7643294, 21.4523434 ], [ 72.7647452, 21.4520916 ], [ 72.7647687, 21.4505479 ], [ 72.7645016, 21.4500294 ], [ 72.7645292, 21.4482285 ], [ 72.7650945, 21.4472065 ], [ 72.7651024, 21.4466919 ], [ 72.7665041, 21.4449091 ], [ 72.7674801, 21.444021 ], [ 72.767821982812492, 21.443946003951574 ], [ 72.768010475596384, 21.443904655824575 ], [ 72.768021982812499, 21.443902131580288 ], [ 72.7680317, 21.4439 ], [ 72.7680397, 21.4433855 ], [ 72.7688641, 21.4433965 ], [ 72.768872, 21.4428818 ], [ 72.7702519, 21.4425137 ], [ 72.7708095, 21.4420064 ], [ 72.7719127, 21.4417637 ], [ 72.7721915, 21.4415101 ], [ 72.7738405, 21.441532 ], [ 72.7741192, 21.4412784 ], [ 72.7754972, 21.4410395 ], [ 72.7768637, 21.4415723 ], [ 72.7774133, 21.4415796 ], [ 72.778501, 21.4423661 ], [ 72.7826176, 21.4428072 ], [ 72.7826256, 21.4422925 ], [ 72.7834519, 21.4421744 ], [ 72.7840094, 21.4416671 ], [ 72.7847019, 21.4412907 ], [ 72.7847407, 21.4387176 ], [ 72.7839318, 21.4376774 ], [ 72.7834016, 21.4363836 ], [ 72.7828985, 21.4332886 ], [ 72.7832706, 21.4268596 ], [ 72.7838357, 21.4258376 ], [ 72.7844203, 21.423529 ], [ 72.7849777, 21.4230217 ], [ 72.7855466, 21.4217424 ], [ 72.7862438, 21.4211077 ], [ 72.7870722, 21.4208613 ], [ 72.7878966, 21.4208722 ], [ 72.7884422, 21.4211368 ], [ 72.7900871, 21.421416 ], [ 72.7920145, 21.4211839 ], [ 72.7972243, 21.4220246 ], [ 72.7985906, 21.4225574 ], [ 72.8010561, 21.4231045 ], [ 72.8029642, 21.4241589 ], [ 72.8036412, 21.4248117 ], [ 72.8037715, 21.4253281 ], [ 72.8056951, 21.4253534 ], [ 72.8057027, 21.4248388 ], [ 72.8068077, 21.4244666 ], [ 72.8069467, 21.4243404 ], [ 72.8070922, 21.4238274 ], [ 72.8087448, 21.4235918 ], [ 72.8087526, 21.4230771 ], [ 72.8101323, 21.4227087 ], [ 72.8106896, 21.4222013 ], [ 72.8120674, 21.4219618 ], [ 72.8145369, 21.4222516 ], [ 72.8159034, 21.4227842 ], [ 72.8163307, 21.4232114 ], [ 72.8172659, 21.423574 ], [ 72.8183555, 21.4242319 ], [ 72.8183517, 21.4244893 ], [ 72.8186265, 21.4244929 ], [ 72.8186227, 21.4247501 ], [ 72.818075, 21.4246139 ], [ 72.8175329, 21.4240922 ], [ 72.8164425, 21.4237079 ], [ 72.8156208, 21.423295 ], [ 72.8145293, 21.4227662 ], [ 72.8120599, 21.4224765 ], [ 72.8104033, 21.4229696 ], [ 72.808741, 21.4238492 ], [ 72.8085955, 21.4243619 ], [ 72.8081761, 21.4248711 ], [ 72.8062447, 21.4253606 ], [ 72.806374, 21.425877 ], [ 72.8062332, 21.4261325 ], [ 72.8054069, 21.4262498 ], [ 72.8043152, 21.4257208 ], [ 72.8032179, 21.4255783 ], [ 72.8030877, 21.4250618 ], [ 72.8028168, 21.424801 ], [ 72.8026875, 21.4242844 ], [ 72.8015902, 21.424141 ], [ 72.8010483, 21.4236192 ], [ 72.796667, 21.422532 ], [ 72.7961211, 21.4222674 ], [ 72.7952967, 21.4222567 ], [ 72.7947511, 21.4219921 ], [ 72.7895297, 21.4219233 ], [ 72.7889841, 21.4216587 ], [ 72.7878849, 21.4216441 ], [ 72.787614, 21.4213833 ], [ 72.7870644, 21.4213759 ], [ 72.7859554, 21.4220051 ], [ 72.7849582, 21.4243083 ], [ 72.7843969, 21.4250729 ], [ 72.7840871, 21.427385 ], [ 72.7838008, 21.4281533 ], [ 72.7837658, 21.4304691 ], [ 72.7834753, 21.4314948 ], [ 72.7834481, 21.433296 ], [ 72.783955, 21.4361336 ], [ 72.784226, 21.4363944 ], [ 72.7846231, 21.4374292 ], [ 72.7851729, 21.4374366 ], [ 72.7851652, 21.437951 ], [ 72.7857148, 21.4379584 ], [ 72.7858361, 21.4389894 ], [ 72.7861071, 21.4392504 ], [ 72.7860954, 21.4400223 ], [ 72.7858129, 21.4405333 ], [ 72.7858051, 21.441048 ], [ 72.785103, 21.442068 ], [ 72.783721, 21.4425645 ], [ 72.7837133, 21.4430792 ], [ 72.782337, 21.4431892 ], [ 72.7820584, 21.4434428 ], [ 72.7798596, 21.4434135 ], [ 72.7784893, 21.4431381 ], [ 72.7757624, 21.4416868 ], [ 72.7751894, 21.4432234 ], [ 72.7749144, 21.4432196 ], [ 72.7752088, 21.4419368 ], [ 72.7724545, 21.4422857 ], [ 72.772176, 21.4425394 ], [ 72.7705209, 21.4429038 ], [ 72.7702344, 21.4436721 ], [ 72.7688524, 21.4441684 ], [ 72.7688446, 21.444683 ], [ 72.7680181, 21.4448002 ], [ 72.7674704, 21.4446647 ], [ 72.7673207, 21.4454347 ], [ 72.7662056, 21.4464492 ], [ 72.7661979, 21.4469639 ], [ 72.7656364, 21.4477286 ], [ 72.7659904, 21.4515936 ], [ 72.7665439, 21.4513436 ], [ 72.7666456, 21.4536613 ], [ 72.7662141, 21.4549421 ], [ 72.7648341, 21.4553094 ], [ 72.7637384, 21.4550374 ], [ 72.7634676, 21.4547764 ], [ 72.762643, 21.4547654 ], [ 72.7615574, 21.4538505 ], [ 72.7615651, 21.4533358 ], [ 72.7607407, 21.4533249 ], [ 72.7606184, 21.4522939 ], [ 72.7603514, 21.4517754 ], [ 72.7603672, 21.4507463 ], [ 72.759712, 21.4486787 ], [ 72.7591603, 21.4487994 ], [ 72.7586165, 21.4484067 ], [ 72.7586245, 21.447892 ], [ 72.755611, 21.4472079 ], [ 72.7539737, 21.4464137 ], [ 72.7528764, 21.4462708 ], [ 72.7528645, 21.4470427 ], [ 72.7545058, 21.4475794 ], [ 72.7542151, 21.448605 ], [ 72.7528428, 21.4484573 ], [ 72.7522913, 21.4485791 ], [ 72.7523109, 21.4472925 ], [ 72.7517573, 21.4475426 ], [ 72.7517297, 21.4493436 ], [ 72.7522794, 21.4493509 ], [ 72.7524084, 21.4498675 ], [ 72.753763, 21.4511725 ], [ 72.7541599, 21.4522073 ], [ 72.7547076, 21.4523428 ], [ 72.7553725, 21.4537677 ], [ 72.7553412, 21.4558261 ], [ 72.7550622, 21.4560797 ], [ 72.7539235, 21.458638 ], [ 72.7533619, 21.4594025 ], [ 72.7529422, 21.4599115 ], [ 72.7518428, 21.4598968 ], [ 72.7518348, 21.4604114 ], [ 72.7504546, 21.4607784 ], [ 72.7488053, 21.4607561 ], [ 72.7465965, 21.4613702 ], [ 72.7465886, 21.4618849 ], [ 72.7461338, 21.4617902 ], [ 72.7460429, 21.4616203 ], [ 72.7454931, 21.4616127 ], [ 72.745547, 21.4670179 ], [ 72.7452482, 21.4685581 ], [ 72.7449654, 21.4690689 ], [ 72.7449496, 21.4700982 ], [ 72.744392, 21.4706053 ], [ 72.7438303, 21.4713698 ], [ 72.7435434, 21.4721379 ], [ 72.7429858, 21.4726452 ], [ 72.7426989, 21.4734133 ], [ 72.7415835, 21.4744276 ], [ 72.7411597, 21.475194 ], [ 72.740608, 21.4753148 ], [ 72.7394946, 21.4762008 ], [ 72.7394867, 21.4767155 ], [ 72.7367316, 21.4770638 ], [ 72.7353652, 21.4765307 ], [ 72.7350943, 21.4762696 ], [ 72.7345445, 21.4762621 ], [ 72.7342716, 21.4761302 ], [ 72.7342796, 21.4756157 ], [ 72.7331839, 21.4753434 ], [ 72.7331879, 21.4750861 ], [ 72.7337377, 21.4750935 ], [ 72.7334708, 21.4745753 ], [ 72.7331939, 21.4746996 ], [ 72.7326441, 21.4746922 ], [ 72.7323712, 21.4745603 ], [ 72.7325122, 21.4743048 ], [ 72.7323873, 21.473531 ], [ 72.7318375, 21.4735237 ], [ 72.7321323, 21.4722409 ], [ 72.7318613, 21.4719799 ], [ 72.7313115, 21.4719723 ], [ 72.7316063, 21.4706896 ], [ 72.7310565, 21.4706822 ], [ 72.7312176, 21.4691402 ], [ 72.7309465, 21.4688792 ], [ 72.7308216, 21.4681054 ], [ 72.7302718, 21.468098 ], [ 72.7305548, 21.4675872 ], [ 72.730007, 21.4674505 ], [ 72.729736, 21.4671895 ], [ 72.7283697, 21.4666563 ], [ 72.7280989, 21.4663951 ], [ 72.7261826, 21.4658544 ], [ 72.7209501, 21.4664271 ], [ 72.7209422, 21.4669417 ], [ 72.7198366, 21.4673122 ], [ 72.7192788, 21.4678193 ], [ 72.7162352, 21.4690644 ], [ 72.7159564, 21.469318 ], [ 72.7145799, 21.4694282 ], [ 72.714572, 21.4699429 ], [ 72.7041246, 21.4699279 ], [ 72.703304, 21.4696594 ], [ 72.7008302, 21.4696253 ], [ 72.7000137, 21.4690994 ], [ 72.6991891, 21.469088 ], [ 72.6980936, 21.4688157 ], [ 72.6978147, 21.4690691 ], [ 72.6975399, 21.4690653 ], [ 72.6964565, 21.4680209 ], [ 72.6953692, 21.4672339 ], [ 72.6942737, 21.4669616 ], [ 72.6931904, 21.4659172 ], [ 72.6918264, 21.4652555 ], [ 72.6916965, 21.4647389 ], [ 72.6912928, 21.4642186 ], [ 72.6904722, 21.4639501 ], [ 72.6903425, 21.4634335 ], [ 72.6900717, 21.4631723 ], [ 72.6899428, 21.462656 ], [ 72.6893951, 21.4625193 ], [ 72.6888515, 21.4621262 ], [ 72.688593, 21.4610931 ], [ 72.6880432, 21.4610856 ], [ 72.6877805, 21.4603099 ], [ 72.6872308, 21.4603024 ], [ 72.687101, 21.4597858 ], [ 72.6865635, 21.4590064 ], [ 72.686026, 21.4582269 ], [ 72.6854845, 21.4577047 ], [ 72.6840099, 21.4553681 ], [ 72.6831853, 21.4553568 ], [ 72.6833386, 21.4543294 ], [ 72.6832097, 21.453813 ], [ 72.6826601, 21.4538053 ], [ 72.6822717, 21.4522559 ], [ 72.6817302, 21.4517337 ], [ 72.6817383, 21.4512192 ], [ 72.6818803, 21.4509637 ], [ 72.6814255, 21.450869 ], [ 72.6811547, 21.4506078 ], [ 72.6809383, 21.4496639 ], [ 72.6805346, 21.4491436 ], [ 72.6802598, 21.4491398 ], [ 72.6803804, 21.4501708 ], [ 72.6799606, 21.4506798 ], [ 72.679132, 21.4509257 ], [ 72.6791401, 21.450411 ], [ 72.6785903, 21.4504035 ], [ 72.6785985, 21.4498888 ], [ 72.6780449, 21.4501385 ], [ 72.6780366, 21.4506531 ], [ 72.677487, 21.4506454 ], [ 72.6773573, 21.4501289 ], [ 72.6769536, 21.4496087 ], [ 72.6766788, 21.4496048 ], [ 72.6766665, 21.4503766 ], [ 72.6761169, 21.4503691 ], [ 72.6761292, 21.4495972 ], [ 72.6759492, 21.4495063 ], [ 72.6758625, 21.4490788 ], [ 72.6755877, 21.449075 ], [ 72.6754864, 21.4494999 ], [ 72.6753046, 21.4495857 ], [ 72.6750135, 21.450611 ], [ 72.6747427, 21.45035 ], [ 72.6733645, 21.4505881 ], [ 72.6732348, 21.4500716 ], [ 72.6725605, 21.4492903 ], [ 72.6720088, 21.4494109 ], [ 72.6714529, 21.4497894 ], [ 72.6715858, 21.4500487 ], [ 72.6715777, 21.4505634 ], [ 72.6718483, 21.4508244 ], [ 72.6717032, 21.4513371 ], [ 72.6711536, 21.4513294 ], [ 72.6714121, 21.4523625 ], [ 72.6697691, 21.4519531 ], [ 72.668676, 21.4515522 ], [ 72.6686801, 21.451295 ], [ 72.6697793, 21.4513103 ], [ 72.6700664, 21.4505422 ], [ 72.6689693, 21.4503978 ], [ 72.667314, 21.4507613 ], [ 72.6670557, 21.4497282 ], [ 72.6659481, 21.4502275 ], [ 72.6658226, 21.4494538 ], [ 72.6655518, 21.4491926 ], [ 72.6656979, 21.44868 ], [ 72.6646006, 21.4485354 ], [ 72.6626892, 21.4477367 ], [ 72.6618627, 21.4478542 ], [ 72.6615715, 21.4488796 ], [ 72.6612966, 21.4488758 ], [ 72.6614499, 21.4478486 ], [ 72.6605049, 21.4468061 ], [ 72.6594097, 21.4465333 ], [ 72.659418, 21.4460187 ], [ 72.6583188, 21.4460034 ], [ 72.65861, 21.444978 ], [ 72.6561428, 21.444557 ], [ 72.6544938, 21.4445339 ], [ 72.6542231, 21.4442727 ], [ 72.6525845, 21.4436069 ], [ 72.6525722, 21.4443787 ], [ 72.6533966, 21.4443903 ], [ 72.6533883, 21.4449049 ], [ 72.6522933, 21.4446322 ], [ 72.6520307, 21.4438565 ], [ 72.6512022, 21.4441022 ], [ 72.6514853, 21.4435915 ], [ 72.6509377, 21.4434547 ], [ 72.6501215, 21.4429285 ], [ 72.649297, 21.442917 ], [ 72.6487391, 21.4434237 ], [ 72.6481874, 21.4435452 ], [ 72.6479003, 21.4443131 ], [ 72.6473528, 21.4441763 ], [ 72.6470821, 21.4439151 ], [ 72.6459869, 21.4436424 ], [ 72.6454435, 21.4432493 ], [ 72.6453139, 21.4427327 ], [ 72.6447726, 21.4422103 ], [ 72.6446563, 21.4409221 ], [ 72.6444764, 21.440831 ], [ 72.6443897, 21.4404037 ], [ 72.6441148, 21.4403997 ], [ 72.6441065, 21.4409144 ], [ 72.6442855, 21.4410043 ], [ 72.6444936, 21.4424638 ], [ 72.6453014, 21.4435046 ], [ 72.6458429, 21.4440268 ], [ 72.6465159, 21.4449367 ], [ 72.647607, 21.4454666 ], [ 72.6480124, 21.4458588 ], [ 72.6481421, 21.4463753 ], [ 72.6486898, 21.4465112 ], [ 72.6493577, 21.447679 ], [ 72.6494874, 21.4481956 ], [ 72.650037, 21.4482033 ], [ 72.650424, 21.4497528 ], [ 72.6506947, 21.450014 ], [ 72.6511989, 21.4528518 ], [ 72.6518998, 21.4605819 ], [ 72.6526832, 21.4631663 ], [ 72.6532246, 21.4636887 ], [ 72.6533543, 21.4642052 ], [ 72.6535333, 21.4642952 ], [ 72.6542993, 21.4652477 ], [ 72.654429, 21.4657643 ], [ 72.6546079, 21.4658544 ], [ 72.6546915, 21.4665399 ], [ 72.6549663, 21.4665439 ], [ 72.6549746, 21.4660292 ], [ 72.6552452, 21.4662904 ], [ 72.6555202, 21.4662942 ], [ 72.6555242, 21.466037 ], [ 72.6552536, 21.4657758 ], [ 72.6547988, 21.4656809 ], [ 72.6547162, 21.4649964 ], [ 72.6542615, 21.4649015 ], [ 72.6541829, 21.4639595 ], [ 72.6537242, 21.4641219 ], [ 72.6537419, 21.4630115 ], [ 72.6541933, 21.4633158 ], [ 72.6550179, 21.4633273 ], [ 72.6554235, 21.4637195 ], [ 72.6555531, 21.464236 ], [ 72.6561027, 21.4642438 ], [ 72.6560946, 21.4647582 ], [ 72.6566421, 21.4648941 ], [ 72.6567771, 21.4650251 ], [ 72.6569067, 21.4655416 ], [ 72.6563571, 21.4655339 ], [ 72.657573, 21.4668378 ], [ 72.6576094, 21.4672644 ], [ 72.6568822, 21.4670854 ], [ 72.6571447, 21.467861 ], [ 72.6576943, 21.4678688 ], [ 72.6576862, 21.4683834 ], [ 72.6582358, 21.468391 ], [ 72.6582441, 21.4678765 ], [ 72.6587937, 21.4678843 ], [ 72.6585395, 21.466594 ], [ 72.6612777, 21.4672751 ], [ 72.662504, 21.4679361 ], [ 72.6627665, 21.4687119 ], [ 72.663173, 21.4691031 ], [ 72.6637208, 21.4692398 ], [ 72.6638455, 21.4700136 ], [ 72.664387, 21.4705359 ], [ 72.6647792, 21.4718281 ], [ 72.6656038, 21.4718397 ], [ 72.6657489, 21.4713269 ], [ 72.6660279, 21.4710735 ], [ 72.6661781, 21.4703035 ], [ 72.6664529, 21.4703074 ], [ 72.6662906, 21.4718491 ], [ 72.6665367, 21.4736541 ], [ 72.6670659, 21.4749482 ], [ 72.6670577, 21.4754628 ], [ 72.6669167, 21.4757181 ], [ 72.6674664, 21.4757257 ], [ 72.6674459, 21.4770122 ], [ 72.6677208, 21.477016 ], [ 72.6677291, 21.4765015 ], [ 72.6681367, 21.4767644 ], [ 72.6681286, 21.4772791 ], [ 72.6683993, 21.4775403 ], [ 72.6682541, 21.4780529 ], [ 72.6688039, 21.4780606 ], [ 72.6689164, 21.4796062 ], [ 72.6691872, 21.4798673 ], [ 72.6694497, 21.4806429 ], [ 72.6697206, 21.4809041 ], [ 72.669975, 21.4821944 ], [ 72.6702458, 21.4824554 ], [ 72.6710294, 21.4850398 ], [ 72.6720759, 21.4883999 ], [ 72.6723467, 21.488661 ], [ 72.6731345, 21.4909882 ], [ 72.673812, 21.4916404 ], [ 72.6747676, 21.4920402 ], [ 72.6746143, 21.4930676 ], [ 72.6765346, 21.4933517 ], [ 72.6765469, 21.4925798 ], [ 72.6770946, 21.4927155 ], [ 72.6772295, 21.4928466 ], [ 72.67748, 21.4943942 ], [ 72.6777508, 21.4946552 ], [ 72.6780093, 21.4956883 ], [ 72.6781452, 21.4958183 ], [ 72.678693, 21.4959551 ], [ 72.6792184, 21.4975064 ], [ 72.6797682, 21.497514 ], [ 72.6800228, 21.4988043 ], [ 72.6805705, 21.4989402 ], [ 72.681239, 21.500108 ], [ 72.6815098, 21.500369 ], [ 72.6817602, 21.5019166 ], [ 72.6820311, 21.5021778 ], [ 72.6821609, 21.5026943 ], [ 72.6829817, 21.5029629 ], [ 72.6829899, 21.5024484 ], [ 72.6832647, 21.5024522 ], [ 72.6833894, 21.503226 ], [ 72.683228, 21.5047678 ], [ 72.683778, 21.5047754 ], [ 72.6837697, 21.50529 ], [ 72.6843176, 21.5054257 ], [ 72.6847234, 21.5058179 ], [ 72.6848532, 21.5063344 ], [ 72.685403, 21.506342 ], [ 72.6855319, 21.5068585 ], [ 72.6868782, 21.5086786 ], [ 72.6879617, 21.509723 ], [ 72.6880874, 21.5104968 ], [ 72.6875374, 21.5104892 ], [ 72.6874078, 21.5099727 ], [ 72.6871367, 21.5097115 ], [ 72.687008, 21.5091951 ], [ 72.6861872, 21.5089264 ], [ 72.6860573, 21.5084098 ], [ 72.6856536, 21.5078895 ], [ 72.6850997, 21.5081392 ], [ 72.6850916, 21.5086538 ], [ 72.6856455, 21.5084042 ], [ 72.685483, 21.509946 ], [ 72.685617, 21.5102052 ], [ 72.685067, 21.5101976 ], [ 72.6850589, 21.5107121 ], [ 72.6872524, 21.511128 ], [ 72.6873873, 21.511259 ], [ 72.6876459, 21.5122921 ], [ 72.6879169, 21.5125531 ], [ 72.6879536, 21.5129799 ], [ 72.6874926, 21.5133193 ], [ 72.6874845, 21.513834 ], [ 72.6879007, 21.5135824 ], [ 72.6881388, 21.5131585 ], [ 72.6891403, 21.5134703 ], [ 72.6896801, 21.5141216 ], [ 72.6891303, 21.5141141 ], [ 72.6895259, 21.515149 ], [ 72.6896618, 21.5152791 ], [ 72.6902076, 21.515544 ], [ 72.6903425, 21.515675 ], [ 72.6904724, 21.5161914 ], [ 72.6910224, 21.5161991 ], [ 72.6913936, 21.5187776 ], [ 72.6915297, 21.5189077 ], [ 72.6926294, 21.518923 ], [ 72.6931753, 21.5191878 ], [ 72.6937273, 21.5190672 ], [ 72.6934401, 21.5198353 ], [ 72.6948109, 21.5201116 ], [ 72.6950696, 21.5211447 ], [ 72.6961694, 21.5211598 ], [ 72.6964282, 21.5221927 ], [ 72.6967031, 21.5221965 ], [ 72.6964444, 21.5211636 ], [ 72.6969923, 21.5212993 ], [ 72.6972633, 21.5215605 ], [ 72.6978113, 21.5216971 ], [ 72.6979402, 21.5222137 ], [ 72.698076, 21.5223437 ], [ 72.698899, 21.5224841 ], [ 72.6987447, 21.5235115 ], [ 72.6988746, 21.5240279 ], [ 72.6994246, 21.5240354 ], [ 72.6992703, 21.5250628 ], [ 72.6996773, 21.5254539 ], [ 72.700633, 21.5258536 ], [ 72.7007589, 21.5266274 ], [ 72.7010339, 21.5266311 ], [ 72.701042, 21.5261165 ], [ 72.701317, 21.5261205 ], [ 72.7013049, 21.5268923 ], [ 72.7029526, 21.5270432 ], [ 72.7040426, 21.527702 ], [ 72.7040505, 21.5271874 ], [ 72.7048715, 21.5274561 ], [ 72.7048634, 21.5279706 ], [ 72.7065073, 21.5283788 ], [ 72.708416, 21.5294344 ], [ 72.708966, 21.529442 ], [ 72.7095221, 21.5290641 ], [ 72.7095139, 21.5295786 ], [ 72.7100619, 21.5297145 ], [ 72.7103329, 21.5299755 ], [ 72.7119747, 21.5305126 ], [ 72.7136205, 21.5307927 ], [ 72.7138916, 21.5310537 ], [ 72.7144416, 21.5310613 ], [ 72.7190923, 21.5326689 ], [ 72.7196423, 21.5326765 ], [ 72.7207343, 21.5332061 ], [ 72.7221051, 21.5334822 ], [ 72.7223762, 21.5337432 ], [ 72.7234782, 21.5336302 ], [ 72.7234701, 21.5341447 ], [ 72.7253892, 21.5345565 ], [ 72.7278602, 21.5348475 ], [ 72.7289522, 21.5353771 ], [ 72.7303232, 21.5356531 ], [ 72.7311582, 21.5350216 ], [ 72.7312871, 21.535538 ], [ 72.7325071, 21.5367122 ], [ 72.7338742, 21.5372456 ], [ 72.7352372, 21.5380362 ], [ 72.7360624, 21.5380473 ], [ 72.7368993, 21.5372866 ], [ 72.7379953, 21.5375589 ], [ 72.7381713, 21.5378593 ], [ 72.7368914, 21.5378012 ], [ 72.7366143, 21.5379265 ], [ 72.7366063, 21.5384412 ], [ 72.7371544, 21.5385769 ], [ 72.7376965, 21.5390989 ], [ 72.7383775, 21.5394947 ], [ 72.7385075, 21.540011 ], [ 72.7390575, 21.5400186 ], [ 72.7393166, 21.5410515 ], [ 72.7398647, 21.5411872 ], [ 72.7410679, 21.5433913 ], [ 72.74133585731181, 21.5451626 ], [ 72.7416921, 21.5475175 ], [ 72.7422421, 21.5475249 ], [ 72.7423274, 21.5508717 ], [ 72.7416245, 21.5518916 ], [ 72.7405243, 21.5518766 ], [ 72.7405164, 21.5523913 ], [ 72.7391391, 21.5525007 ], [ 72.737475, 21.5533794 ], [ 72.737584, 21.5551822 ], [ 72.7378551, 21.5554433 ], [ 72.7382442, 21.5569927 ], [ 72.7387923, 21.5571284 ], [ 72.7390633, 21.5573894 ], [ 72.7417978, 21.5584559 ], [ 72.74234, 21.5589779 ], [ 72.7428881, 21.5591146 ], [ 72.7429892, 21.5614321 ], [ 72.7432603, 21.5616931 ], [ 72.7440458, 21.5642773 ], [ 72.7443168, 21.5645383 ], [ 72.7444468, 21.5650547 ], [ 72.744997, 21.5650622 ], [ 72.7451261, 21.5655786 ], [ 72.7456681, 21.5661008 ], [ 72.7461985, 21.5673947 ], [ 72.7464695, 21.5676557 ], [ 72.7467207, 21.5692032 ], [ 72.7458556, 21.5717649 ], [ 72.7457027, 21.5727923 ], [ 72.7448755, 21.5729093 ], [ 72.7445965, 21.5731629 ], [ 72.7440482, 21.5730272 ], [ 72.7440562, 21.5725126 ], [ 72.7422217, 21.5726566 ], [ 72.7419807, 21.5732565 ], [ 72.7417016, 21.5735101 ], [ 72.7416937, 21.5740248 ], [ 72.7408484, 21.5753 ], [ 72.7408205, 21.5771011 ], [ 72.7410917, 21.5773622 ], [ 72.7412138, 21.5783931 ], [ 72.741764, 21.5784007 ], [ 72.741893, 21.5789171 ], [ 72.742302, 21.57918 ], [ 72.7422901, 21.5799518 ], [ 72.7431153, 21.5799632 ], [ 72.7431034, 21.580735 ], [ 72.7425553, 21.5805984 ], [ 72.7414689, 21.5796834 ], [ 72.7412098, 21.5786506 ], [ 72.7403884, 21.578382 ], [ 72.7402663, 21.577351 ], [ 72.7399953, 21.57709 ], [ 72.7400072, 21.5763181 ], [ 72.7405893, 21.5742671 ], [ 72.7411474, 21.57376 ], [ 72.7418496, 21.5728683 ], [ 72.7418159, 21.5725842 ], [ 72.7416992, 21.5717785 ], [ 72.7421507, 21.5712 ], [ 72.7429658, 21.5718541 ], [ 72.743516, 21.5718615 ], [ 72.7436551, 21.5717352 ], [ 72.7436591, 21.5714778 ], [ 72.743255, 21.5709577 ], [ 72.7427997, 21.570863 ], [ 72.7427127, 21.5704357 ], [ 72.74354, 21.5703177 ], [ 72.7445122, 21.569688 ], [ 72.7446581, 21.5691752 ], [ 72.7454833, 21.5691864 ], [ 72.7455033, 21.5678999 ], [ 72.7449531, 21.5678925 ], [ 72.7449611, 21.5673778 ], [ 72.7444109, 21.5673705 ], [ 72.7441558, 21.5660802 ], [ 72.7436058, 21.5660728 ], [ 72.7433466, 21.5650399 ], [ 72.7427925, 21.5652898 ], [ 72.7421403, 21.5629647 ], [ 72.7414769, 21.5614115 ], [ 72.7406559, 21.5611431 ], [ 72.7405298, 21.5603694 ], [ 72.7406717, 21.5601138 ], [ 72.7392985, 21.5599662 ], [ 72.7390274, 21.559705 ], [ 72.7379252, 21.5598194 ], [ 72.7379331, 21.5593047 ], [ 72.7373811, 21.5594255 ], [ 72.7371081, 21.5592936 ], [ 72.737265, 21.5580089 ], [ 72.737132, 21.5577496 ], [ 72.7360318, 21.5577347 ], [ 72.7360357, 21.5574775 ], [ 72.7365859, 21.5574848 ], [ 72.7365899, 21.5572276 ], [ 72.7341225, 21.5566793 ], [ 72.7338314, 21.5577048 ], [ 72.7328263, 21.5576026 ], [ 72.7328764, 21.5571771 ], [ 72.7331554, 21.5569235 ], [ 72.7331715, 21.5558944 ], [ 72.7329004, 21.5556334 ], [ 72.7329084, 21.5551187 ], [ 72.7323703, 21.5543393 ], [ 72.7323863, 21.5533102 ], [ 72.7326733, 21.5525421 ], [ 72.7329524, 21.5522885 ], [ 72.7329603, 21.5517738 ], [ 72.7332393, 21.5515204 ], [ 72.7332435, 21.5512631 ], [ 72.7329764, 21.5507447 ], [ 72.7323013, 21.5499634 ], [ 72.7317472, 21.5502132 ], [ 72.7317392, 21.5507279 ], [ 72.7312841, 21.5506332 ], [ 72.7312011, 21.5499485 ], [ 72.730376, 21.5499373 ], [ 72.729846, 21.5486432 ], [ 72.729571, 21.5486396 ], [ 72.7292839, 21.5494077 ], [ 72.7287339, 21.5494002 ], [ 72.729158, 21.548634 ], [ 72.729162, 21.5483765 ], [ 72.728895, 21.5478583 ], [ 72.7289029, 21.5473437 ], [ 72.729182, 21.5470902 ], [ 72.729186, 21.5468328 ], [ 72.728915, 21.5465718 ], [ 72.728919, 21.5463146 ], [ 72.729613, 21.5459375 ], [ 72.729894, 21.5455557 ], [ 72.728794, 21.5455408 ], [ 72.729010015881272, 21.5449626 ], [ 72.729368, 21.5440044 ], [ 72.7288141, 21.5442543 ], [ 72.728571, 21.5421921 ], [ 72.72775, 21.5419237 ], [ 72.72722, 21.5406296 ], [ 72.726124, 21.5403573 ], [ 72.7260227, 21.5407821 ], [ 72.7255659, 21.5408644 ], [ 72.7257069, 21.540609 ], [ 72.725578, 21.5400925 ], [ 72.725303, 21.5400887 ], [ 72.7251737, 21.5423147 ], [ 72.7249917, 21.5424007 ], [ 72.7247409, 21.5408532 ], [ 72.7241909, 21.5408457 ], [ 72.723936, 21.5395553 ], [ 72.7236589, 21.5396799 ], [ 72.7231108, 21.5395442 ], [ 72.7231189, 21.5390295 ], [ 72.722565, 21.5392794 ], [ 72.7226978, 21.5395385 ], [ 72.7226704, 21.5440819 ], [ 72.7224886, 21.5441679 ], [ 72.7217358, 21.5395253 ], [ 72.7206377, 21.5393813 ], [ 72.7198248, 21.5385981 ], [ 72.7189978, 21.5387158 ], [ 72.7190059, 21.5382014 ], [ 72.7181809, 21.53819 ], [ 72.7181889, 21.5376754 ], [ 72.7176349, 21.5379252 ], [ 72.7177678, 21.5381843 ], [ 72.7177477, 21.5394709 ], [ 72.7178836, 21.5396009 ], [ 72.7184317, 21.5397375 ], [ 72.7183144, 21.5411915 ], [ 72.7181325, 21.5412775 ], [ 72.7180067, 21.5405037 ], [ 72.7174688, 21.5397243 ], [ 72.7166759, 21.5376548 ], [ 72.716001, 21.5368734 ], [ 72.7154468, 21.5371231 ], [ 72.7155678, 21.5381543 ], [ 72.7158388, 21.5384153 ], [ 72.7159607, 21.5394463 ], [ 72.7155056, 21.5393516 ], [ 72.7151598, 21.5378912 ], [ 72.7146058, 21.5381411 ], [ 72.7147549, 21.5373711 ], [ 72.7143508, 21.5368508 ], [ 72.7138008, 21.5368432 ], [ 72.713809, 21.5363287 ], [ 72.712705, 21.5365708 ], [ 72.7124421, 21.5357952 ], [ 72.711338, 21.5360375 ], [ 72.7111919, 21.5365501 ], [ 72.7110104, 21.5393784 ], [ 72.7107355, 21.5393747 ], [ 72.7106419, 21.5365425 ], [ 72.710925, 21.5360318 ], [ 72.7107961, 21.5355153 ], [ 72.7094251, 21.5352392 ], [ 72.7096678, 21.5373013 ], [ 72.7092129, 21.5372065 ], [ 72.708713, 21.5367735 ], [ 72.708588, 21.5359997 ], [ 72.7077649, 21.5358593 ], [ 72.7074881, 21.5359846 ], [ 72.7074839, 21.5362418 ], [ 72.7080339, 21.5362494 ], [ 72.7077307, 21.5380467 ], [ 72.7074557, 21.538043 ], [ 72.7076049, 21.537273 ], [ 72.7074718, 21.5370137 ], [ 72.7069218, 21.5370061 ], [ 72.7069137, 21.5375208 ], [ 72.7066387, 21.537517 ], [ 72.7066508, 21.5367451 ], [ 72.7061008, 21.5367375 ], [ 72.7058218, 21.536991 ], [ 72.7058137, 21.5375056 ], [ 72.7063618, 21.5376413 ], [ 72.7064968, 21.5377723 ], [ 72.7063476, 21.5385423 ], [ 72.7044246, 21.5383868 ], [ 72.7041516, 21.5382548 ], [ 72.7041598, 21.5377402 ], [ 72.7027888, 21.5374639 ], [ 72.702675, 21.5359182 ], [ 72.7028171, 21.5356629 ], [ 72.7022671, 21.5356553 ], [ 72.7024081, 21.5354 ], [ 72.7024162, 21.5348853 ], [ 72.7022834, 21.5346262 ], [ 72.7003603, 21.5344705 ], [ 72.6998145, 21.5342057 ], [ 72.6995395, 21.5342019 ], [ 72.6987083, 21.5345769 ], [ 72.6987003, 21.5350914 ], [ 72.6978833, 21.5345656 ], [ 72.6977372, 21.5350781 ], [ 72.6973172, 21.5355871 ], [ 72.6964881, 21.535833 ], [ 72.6961928, 21.5371155 ], [ 72.6967428, 21.5371231 ], [ 72.6967387, 21.5373805 ], [ 72.6956387, 21.5373652 ], [ 72.6956306, 21.5378799 ], [ 72.6967266, 21.5381524 ], [ 72.6964393, 21.5389205 ], [ 72.6969874, 21.5390562 ], [ 72.6971224, 21.5391872 ], [ 72.6972522, 21.5397037 ], [ 72.6978001, 21.5398394 ], [ 72.6979352, 21.5399704 ], [ 72.6979271, 21.540485 ], [ 72.6990148, 21.541272 ], [ 72.6991448, 21.5417886 ], [ 72.6983238, 21.54152 ], [ 72.6987154, 21.542812 ], [ 72.6991205, 21.5433323 ], [ 72.6985705, 21.5433248 ], [ 72.6985582, 21.5440966 ], [ 72.6991082, 21.5441042 ], [ 72.6991, 21.5446188 ], [ 72.6988271, 21.544486 ], [ 72.6980001, 21.5446035 ], [ 72.6980082, 21.5440891 ], [ 72.6971832, 21.5440776 ], [ 72.6974501, 21.544596 ], [ 72.6969001, 21.5445884 ], [ 72.69689196591743, 21.545098863279446 ], [ 72.6968878, 21.5453603 ], [ 72.6963399, 21.5452236 ], [ 72.6960607, 21.5454771 ], [ 72.6955087, 21.5455986 ], [ 72.6953544, 21.5466258 ], [ 72.6960262, 21.5476646 ], [ 72.6941031, 21.5475088 ], [ 72.6932821, 21.5472401 ], [ 72.6927402, 21.5467179 ], [ 72.6921923, 21.546582 ], [ 72.6923618, 21.5472679 ], [ 72.6913571, 21.5472134 ], [ 72.69108, 21.5473387 ], [ 72.6910963, 21.5463095 ], [ 72.6905463, 21.5463019 ], [ 72.6905625, 21.5452728 ], [ 72.6902855, 21.5453971 ], [ 72.6894605, 21.5453856 ], [ 72.6889145, 21.5451208 ], [ 72.685915882643684, 21.5449626 ], [ 72.6856164, 21.5449468 ], [ 72.685628665270031, 21.5449626 ], [ 72.6860203, 21.5454671 ], [ 72.686283, 21.5462427 ], [ 72.6872358, 21.5468989 ], [ 72.6886028, 21.5474325 ], [ 72.6888736, 21.5476937 ], [ 72.6894217, 21.5478303 ], [ 72.6896763, 21.5491206 ], [ 72.6891303, 21.5488557 ], [ 72.6891386, 21.5483412 ], [ 72.6885905, 21.5482044 ], [ 72.6883197, 21.5479434 ], [ 72.6877716, 21.5478075 ], [ 72.6884342, 21.5493609 ], [ 72.6886848, 21.5509084 ], [ 72.6889557, 21.5511694 ], [ 72.6892102, 21.5524597 ], [ 72.6894813, 21.5527207 ], [ 72.689469, 21.5534926 ], [ 72.6902656, 21.5553051 ], [ 72.6908075, 21.5558273 ], [ 72.6909334, 21.5566011 ], [ 72.6920273, 21.5570017 ], [ 72.6925794, 21.5568812 ], [ 72.6925673, 21.557653 ], [ 72.6931173, 21.5576608 ], [ 72.6931091, 21.5581752 ], [ 72.6920192, 21.5575164 ], [ 72.6903832, 21.5565935 ], [ 72.6902575, 21.5558197 ], [ 72.6894527, 21.5545219 ], [ 72.6890488, 21.5540016 ], [ 72.6884988, 21.5539938 ], [ 72.6885232, 21.5524503 ], [ 72.6879732, 21.5524425 ], [ 72.6879853, 21.5516706 ], [ 72.6868772, 21.55217 ], [ 72.6864409, 21.5524262 ], [ 72.6857608, 21.5531838 ], [ 72.6843211, 21.5539602 ], [ 72.6836567, 21.5557281 ], [ 72.6836402, 21.5567572 ], [ 72.6832201, 21.557266 ], [ 72.683212, 21.5577806 ], [ 72.6829368, 21.5577768 ], [ 72.6830332, 21.5576084 ], [ 72.6828477, 21.5574296 ], [ 72.6824858, 21.5574247 ], [ 72.6823868, 21.5577691 ], [ 72.6821118, 21.5577653 ], [ 72.6821158, 21.5575081 ], [ 72.6823949, 21.5572546 ], [ 72.6827808, 21.557067 ], [ 72.6829532, 21.5567477 ], [ 72.6833694, 21.5564962 ], [ 72.6832405, 21.5559796 ], [ 72.6832486, 21.555465 ], [ 72.6835238, 21.5554688 ], [ 72.6838234, 21.553929 ], [ 72.6854919, 21.5527937 ], [ 72.6868854, 21.5516553 ], [ 72.6875304, 21.5511321 ], [ 72.687468, 21.5496047 ], [ 72.6869181, 21.5495971 ], [ 72.6867922, 21.5488233 ], [ 72.6859957, 21.5470108 ], [ 72.6855918, 21.5464905 ], [ 72.6850418, 21.546483 ], [ 72.68505, 21.5459683 ], [ 72.6845, 21.5459607 ], [ 72.6844877, 21.5467326 ], [ 72.6853127, 21.546744 ], [ 72.6853087, 21.5470014 ], [ 72.6836606, 21.5468492 ], [ 72.6833836, 21.5469745 ], [ 72.6833794, 21.5472318 ], [ 72.6842046, 21.5472433 ], [ 72.6840583, 21.5477559 ], [ 72.6836381, 21.5482648 ], [ 72.6809063, 21.5470683 ], [ 72.6806355, 21.5468073 ], [ 72.6800855, 21.5467995 ], [ 72.6795395, 21.5465346 ], [ 72.6789874, 21.5466561 ], [ 72.6789751, 21.547428 ], [ 72.6795251, 21.5474355 ], [ 72.6792399, 21.5480745 ], [ 72.678692, 21.5479386 ], [ 72.6787043, 21.5471668 ], [ 72.6778833, 21.546898 ], [ 72.6780245, 21.5466427 ], [ 72.6780368, 21.5458708 ], [ 72.6779037, 21.5456115 ], [ 72.6768058, 21.5454671 ], [ 72.6765348, 21.5452061 ], [ 72.676106122073264, 21.545023515683571 ], [ 72.6743492, 21.5442752 ], [ 72.6743409, 21.5447899 ], [ 72.6740659, 21.5447861 ], [ 72.6740742, 21.5442715 ], [ 72.673524, 21.5442637 ], [ 72.6736735, 21.5434939 ], [ 72.6735404, 21.5432346 ], [ 72.6729884, 21.5433552 ], [ 72.6727175, 21.543094 ], [ 72.6724425, 21.5430902 ], [ 72.6721634, 21.5433437 ], [ 72.6694216, 21.5427906 ], [ 72.6680466, 21.5427714 ], [ 72.6675047, 21.5422492 ], [ 72.6650256, 21.5424718 ], [ 72.6642048, 21.5422029 ], [ 72.6633798, 21.5421913 ], [ 72.6631007, 21.5424448 ], [ 72.6625507, 21.542437 ], [ 72.6622777, 21.5423051 ], [ 72.6622859, 21.5417905 ], [ 72.661465, 21.5415215 ], [ 72.6614567, 21.5420362 ], [ 72.6611817, 21.5420324 ], [ 72.66119, 21.5415177 ], [ 72.6600901, 21.5415022 ], [ 72.6599644, 21.5407285 ], [ 72.6595607, 21.5402082 ], [ 72.6590107, 21.5402004 ], [ 72.6592732, 21.5409762 ], [ 72.6587274, 21.5407111 ], [ 72.6585605, 21.5425102 ], [ 72.6579982, 21.5432743 ], [ 72.6579857, 21.5440462 ], [ 72.657353191622519, 21.5449626 ], [ 72.6572821, 21.5450656 ], [ 72.6567321, 21.5450579 ], [ 72.656693128699487, 21.5449626 ], [ 72.6562029, 21.5437638 ], [ 72.6550986, 21.5440055 ], [ 72.6551111, 21.5432337 ], [ 72.6545611, 21.5432259 ], [ 72.6545777, 21.5421968 ], [ 72.6540277, 21.5421891 ], [ 72.65404, 21.5414172 ], [ 72.6534921, 21.5412804 ], [ 72.6529483, 21.5408872 ], [ 72.6529566, 21.5403726 ], [ 72.6535066, 21.5403803 ], [ 72.6533768, 21.539864 ], [ 72.6529731, 21.5393435 ], [ 72.6524252, 21.5392066 ], [ 72.6521543, 21.5389456 ], [ 72.6513294, 21.5389339 ], [ 72.6510564, 21.5388018 ], [ 72.6511562, 21.5411193 ], [ 72.65129, 21.5413786 ], [ 72.6504651, 21.5413669 ], [ 72.6507234, 21.5424 ], [ 72.6501734, 21.5423922 ], [ 72.6503188, 21.5418795 ], [ 72.6501859, 21.5416204 ], [ 72.6496318, 21.5418698 ], [ 72.6496234, 21.5423845 ], [ 72.6490776, 21.5421193 ], [ 72.6492229, 21.5416068 ], [ 72.6496442, 21.541098 ], [ 72.6490963, 21.5409611 ], [ 72.6479943, 21.5410747 ], [ 72.6478397, 21.5421019 ], [ 72.6481022, 21.5428776 ], [ 72.6480691, 21.544936 ], [ 72.648037598769903, 21.5450019936202 ], [ 72.647215, 21.5467253 ], [ 72.6472025, 21.5474971 ], [ 72.6473384, 21.5476272 ], [ 72.6495386, 21.5476582 ], [ 72.6502194, 21.5480543 ], [ 72.65026, 21.5482236 ], [ 72.6492553, 21.548169 ], [ 72.6484259, 21.5484145 ], [ 72.647326, 21.548399 ], [ 72.647053, 21.5482669 ], [ 72.6467905, 21.5474913 ], [ 72.6451154, 21.5490116 ], [ 72.6442904, 21.5490001 ], [ 72.6442946, 21.5487426 ], [ 72.6450237, 21.5488405 ], [ 72.6463312, 21.5476536 ], [ 72.6472398, 21.5451815 ], [ 72.647240105286343, 21.5451626 ], [ 72.6472772, 21.5428661 ], [ 72.6468984, 21.540802 ], [ 72.6466214, 21.5409262 ], [ 72.6456142, 21.5409526 ], [ 72.6456686, 21.54027 ], [ 72.6448561, 21.5394864 ], [ 72.6444649, 21.5381942 ], [ 72.6436357, 21.5384399 ], [ 72.6439232, 21.5376718 ], [ 72.6436461, 21.5377961 ], [ 72.6428232, 21.5376563 ], [ 72.6429395, 21.5389447 ], [ 72.6427983, 21.5392 ], [ 72.6419735, 21.5391883 ], [ 72.642102, 21.5397048 ], [ 72.6422381, 21.5398349 ], [ 72.643061, 21.5399757 ], [ 72.6430568, 21.5402329 ], [ 72.6422298, 21.5403495 ], [ 72.6419506, 21.540603 ], [ 72.6405715, 21.5408407 ], [ 72.6400151, 21.5412193 ], [ 72.6400067, 21.541734 ], [ 72.6389005, 21.5421038 ], [ 72.6355985, 21.542186 ], [ 72.6355902, 21.5427007 ], [ 72.6350402, 21.5426927 ], [ 72.6351689, 21.5432093 ], [ 72.6348898, 21.5434627 ], [ 72.6348856, 21.54372 ], [ 72.6350215, 21.5438502 ], [ 72.6361235, 21.5437375 ], [ 72.6358278, 21.5450201 ], [ 72.6363778, 21.5450278 ], [ 72.6363736, 21.5452851 ], [ 72.6358236, 21.5452773 ], [ 72.6366235, 21.5468328 ], [ 72.6352464, 21.5469415 ], [ 72.6346985, 21.5468054 ], [ 72.6348104, 21.548351 ], [ 72.6350812, 21.5486122 ], [ 72.6352109, 21.5491288 ], [ 72.6356272, 21.5488772 ], [ 72.6356554, 21.5498186 ], [ 72.6354734, 21.5499044 ], [ 72.6354817, 21.54939 ], [ 72.6343776, 21.5496315 ], [ 72.6342802, 21.549799 ], [ 72.6335526, 21.5496198 ], [ 72.6335734, 21.5483335 ], [ 72.6330234, 21.5483257 ], [ 72.633315, 21.5473004 ], [ 72.632765, 21.5472926 ], [ 72.6327777, 21.5465208 ], [ 72.6322213, 21.5468984 ], [ 72.6313963, 21.5468867 ], [ 72.6311234, 21.5467545 ], [ 72.6308317, 21.5477799 ], [ 72.6300109, 21.5475107 ], [ 72.6297484, 21.5467351 ], [ 72.6305755, 21.5466177 ], [ 72.6308484, 21.5467508 ], [ 72.6307229, 21.545977 ], [ 72.6303194, 21.5454565 ], [ 72.6292215, 21.5453117 ], [ 72.6289421, 21.5455652 ], [ 72.6275588, 21.5460602 ], [ 72.6272797, 21.5463134 ], [ 72.6267276, 21.5464348 ], [ 72.6267191, 21.5469492 ], [ 72.6259067, 21.5471089 ], [ 72.6252267, 21.5473638 ], [ 72.6246179, 21.5482969 ], [ 72.6239398, 21.5487111 ], [ 72.6236649, 21.5487071 ], [ 72.6236773, 21.5479352 ], [ 72.6244106, 21.5477761 ], [ 72.624886, 21.547298 ], [ 72.6258023, 21.5467665 ], [ 72.6259109, 21.5459084 ], [ 72.6261818, 21.5461696 ], [ 72.6267338, 21.5460484 ], [ 72.6270151, 21.5456669 ], [ 72.626281, 21.5458252 ], [ 72.6263313, 21.5453998 ], [ 72.626592625203685, 21.5451626 ], [ 72.6267505, 21.5450193 ], [ 72.6277231, 21.5443902 ], [ 72.6277272, 21.5441329 ], [ 72.6273235, 21.5436126 ], [ 72.6287006, 21.543503 ], [ 72.628982, 21.5431214 ], [ 72.6281591, 21.5429806 ], [ 72.6270506, 21.5434796 ], [ 72.6256735, 21.543589 ], [ 72.6256652, 21.5441036 ], [ 72.6251152, 21.5440957 ], [ 72.6249688, 21.5446083 ], [ 72.624459964238838, 21.5451626 ], [ 72.6242693, 21.5453703 ], [ 72.6239943, 21.5453665 ], [ 72.624000841526311, 21.5449626 ], [ 72.6240068, 21.5445947 ], [ 72.6234505, 21.5449723 ], [ 72.6226235, 21.5450896 ], [ 72.6226151, 21.5456041 ], [ 72.6215108, 21.5458456 ], [ 72.6213645, 21.5463582 ], [ 72.6201066, 21.547627 ], [ 72.6195566, 21.5476192 ], [ 72.6194101, 21.5481318 ], [ 72.6182933, 21.5491452 ], [ 72.6171597, 21.5511875 ], [ 72.6166012, 21.5516943 ], [ 72.6160302, 21.5529728 ], [ 72.6151926, 21.5537328 ], [ 72.6146172, 21.5552686 ], [ 72.6143379, 21.5555219 ], [ 72.6143296, 21.5560365 ], [ 72.6137626, 21.5570577 ], [ 72.6137501, 21.5578296 ], [ 72.6136087, 21.5580849 ], [ 72.6141589, 21.5580927 ], [ 72.6137331, 21.5588587 ], [ 72.6137289, 21.5591159 ], [ 72.6138648, 21.5592461 ], [ 72.614415, 21.5592539 ], [ 72.6145498, 21.559385 ], [ 72.6145456, 21.5596423 ], [ 72.6142665, 21.5598955 ], [ 72.6138374, 21.5609188 ], [ 72.6132874, 21.5609108 ], [ 72.6133991, 21.5624565 ], [ 72.6132494, 21.5632263 ], [ 72.6137975, 21.5633624 ], [ 72.6139325, 21.5634935 ], [ 72.6140451, 21.5650392 ], [ 72.6145951, 21.5650469 ], [ 72.6140325, 21.5658108 ], [ 72.6145826, 21.5658188 ], [ 72.6145741, 21.5663334 ], [ 72.6159452, 21.5666103 ], [ 72.6159535, 21.5660959 ], [ 72.6184267, 21.5662593 ], [ 72.618979, 21.5661391 ], [ 72.6189873, 21.5656245 ], [ 72.6195375, 21.5656324 ], [ 72.6195543, 21.5646033 ], [ 72.6206565, 21.5644899 ], [ 72.621488, 21.5641163 ], [ 72.6212003, 21.5648842 ], [ 72.6201001, 21.5648685 ], [ 72.6198125, 21.5656362 ], [ 72.6203647, 21.5655151 ], [ 72.6206439, 21.5652618 ], [ 72.6222942, 21.5652852 ], [ 72.6238588, 21.5647523 ], [ 72.6253553, 21.563142 ], [ 72.6256303, 21.5631459 ], [ 72.6256261, 21.5634032 ], [ 72.6252117, 21.5642105 ], [ 72.6253299, 21.5646857 ], [ 72.625055, 21.5646818 ], [ 72.6249661, 21.5643348 ], [ 72.6241925, 21.5647187 ], [ 72.6245283, 21.5652738 ], [ 72.6250146, 21.5655558 ], [ 72.6253005, 21.566016 ], [ 72.625397, 21.5663183 ], [ 72.6258488, 21.5666226 ], [ 72.6263967, 21.5667596 ], [ 72.6263925, 21.5670169 ], [ 72.6261175, 21.5670129 ], [ 72.6261132, 21.5672703 ], [ 72.6266633, 21.5672781 ], [ 72.6266592, 21.5675353 ], [ 72.625834, 21.5675236 ], [ 72.6258423, 21.5670091 ], [ 72.6251768, 21.5663875 ], [ 72.625174, 21.5660927 ], [ 72.6248936, 21.5658371 ], [ 72.6243991, 21.5653559 ], [ 72.6228421, 21.5654223 ], [ 72.6229479, 21.5662192 ], [ 72.6228043, 21.5677377 ], [ 72.6225293, 21.5677337 ], [ 72.6225418, 21.566962 ], [ 72.622817, 21.5669658 ], [ 72.6225545, 21.5661902 ], [ 72.6225628, 21.5656755 ], [ 72.6222857, 21.5657999 ], [ 72.6206356, 21.5657763 ], [ 72.6203562, 21.5660297 ], [ 72.6181434, 21.56677 ], [ 72.6162181, 21.5667424 ], [ 72.615941, 21.5668675 ], [ 72.6159283, 21.5676394 ], [ 72.615099, 21.5678849 ], [ 72.6149525, 21.5683975 ], [ 72.6141105, 21.5694147 ], [ 72.6141022, 21.5699293 ], [ 72.6138229, 21.5701826 ], [ 72.6135352, 21.5709505 ], [ 72.6135057, 21.5727515 ], [ 72.6138185, 21.5731008 ], [ 72.6137554, 21.574299 ], [ 72.6142971, 21.5748214 ], [ 72.6144267, 21.575338 ], [ 72.6133222, 21.5755795 ], [ 72.6131757, 21.5760921 ], [ 72.6121967, 21.5771074 ], [ 72.6119238, 21.5769743 ], [ 72.6102734, 21.5769507 ], [ 72.6099962, 21.5770758 ], [ 72.6101037, 21.5788787 ], [ 72.6097696, 21.5824765 ], [ 72.6100404, 21.5827377 ], [ 72.6102944, 21.584028 ], [ 72.6105653, 21.5842892 ], [ 72.6109614, 21.5853243 ], [ 72.6115095, 21.5854604 ], [ 72.6119111, 21.58611 ], [ 72.6120364, 21.5868838 ], [ 72.6128616, 21.5868955 ], [ 72.6129903, 21.587412 ], [ 72.6132612, 21.5876732 ], [ 72.6133906, 21.5881898 ], [ 72.6139387, 21.5883259 ], [ 72.614882, 21.5894978 ], [ 72.6155598, 21.5901505 ], [ 72.6161077, 21.5902875 ], [ 72.6163661, 21.5913206 ], [ 72.6169162, 21.5913283 ], [ 72.6170448, 21.5918448 ], [ 72.6179975, 21.5925014 ], [ 72.6185394, 21.5930238 ], [ 72.6190875, 21.5931609 ], [ 72.619079, 21.5936753 ], [ 72.6201814, 21.5935619 ], [ 72.620854, 21.5944727 ], [ 72.6209835, 21.5949892 ], [ 72.6212587, 21.5949932 ], [ 72.6212714, 21.5942213 ], [ 72.6216792, 21.5944846 ], [ 72.6223528, 21.5953945 ], [ 72.6226278, 21.5953982 ], [ 72.6233298, 21.594508 ], [ 72.6233551, 21.5929645 ], [ 72.6232222, 21.5927052 ], [ 72.6257127, 21.5918397 ], [ 72.625992, 21.5915863 ], [ 72.6276446, 21.5914816 ], [ 72.6276529, 21.5909671 ], [ 72.6290326, 21.5907294 ], [ 72.6293369, 21.5889324 ], [ 72.6287868, 21.5889246 ], [ 72.6286573, 21.5884081 ], [ 72.6283863, 21.5881469 ], [ 72.6281057, 21.5875004 ], [ 72.6280958, 21.586429 ], [ 72.6274575, 21.5860749 ], [ 72.6266407, 21.5855487 ], [ 72.6260948, 21.5852835 ], [ 72.6263991, 21.5834865 ], [ 72.6266743, 21.5834905 ], [ 72.6266616, 21.5842622 ], [ 72.6263866, 21.5842584 ], [ 72.626374, 21.5850301 ], [ 72.6267371, 21.5853803 ], [ 72.627195, 21.5852992 ], [ 72.6271908, 21.5855564 ], [ 72.6275539, 21.5859067 ], [ 72.6282785, 21.586344 ], [ 72.6282744, 21.5866012 ], [ 72.6285496, 21.5866052 ], [ 72.6284397, 21.5874304 ], [ 72.6289406, 21.5878974 ], [ 72.6297491, 21.5889384 ], [ 72.6297282, 21.5902247 ], [ 72.62902, 21.5915012 ], [ 72.6279196, 21.5914856 ], [ 72.6281884, 21.5918749 ], [ 72.6288693, 21.5922712 ], [ 72.6295388, 21.5934383 ], [ 72.6303598, 21.5937072 ], [ 72.6314602, 21.5937229 ], [ 72.6315995, 21.5935967 ], [ 72.6317457, 21.5930841 ], [ 72.632298, 21.5929628 ], [ 72.6324373, 21.5928367 ], [ 72.6325836, 21.592324 ], [ 72.6347864, 21.5922262 ], [ 72.6364224, 21.5931506 ], [ 72.6368512, 21.5921274 ], [ 72.6381084, 21.5909868 ], [ 72.6386607, 21.5908664 ], [ 72.6388688, 21.5864946 ], [ 72.6392923, 21.5858568 ], [ 72.6398444, 21.5857364 ], [ 72.6397189, 21.5849626 ], [ 72.6404176, 21.5843287 ], [ 72.6412407, 21.5844695 ], [ 72.6408442, 21.5834345 ], [ 72.6408569, 21.5826627 ], [ 72.6411402, 21.582152 ], [ 72.6407573, 21.5803453 ], [ 72.6407656, 21.5798307 ], [ 72.6404906, 21.5798267 ], [ 72.6404989, 21.5793123 ], [ 72.6410491, 21.57932 ], [ 72.6409236, 21.5785462 ], [ 72.6413573, 21.5772658 ], [ 72.6413656, 21.5767511 ], [ 72.6415152, 21.5764307 ], [ 72.6416492, 21.5762404 ], [ 72.6421931, 21.5766337 ], [ 72.6428291, 21.5771168 ], [ 72.6437731, 21.5772723 ], [ 72.6441039, 21.5775619 ], [ 72.644537, 21.5780103 ], [ 72.6449166, 21.5783455 ], [ 72.6451916, 21.5783493 ], [ 72.6451874, 21.5786067 ], [ 72.6446374, 21.5785988 ], [ 72.6441241, 21.5781083 ], [ 72.6427187, 21.5773695 ], [ 72.6416367, 21.5770123 ], [ 72.6414777, 21.5782968 ], [ 72.6412143, 21.5802633 ], [ 72.6416904, 21.5821599 ], [ 72.641407, 21.5826706 ], [ 72.6413902, 21.5836997 ], [ 72.6416571, 21.5842181 ], [ 72.6416529, 21.5844754 ], [ 72.6412324, 21.5849841 ], [ 72.6404114, 21.584715 ], [ 72.6401113, 21.5862548 ], [ 72.6392817, 21.5865005 ], [ 72.6394146, 21.5867596 ], [ 72.6392317, 21.5895878 ], [ 72.6397818, 21.5895956 ], [ 72.6390729, 21.5908722 ], [ 72.6389232, 21.591642 ], [ 72.6375437, 21.5918798 ], [ 72.6373972, 21.5923924 ], [ 72.6375186, 21.5934236 ], [ 72.636689, 21.5936691 ], [ 72.6366724, 21.5946982 ], [ 72.6363972, 21.5946942 ], [ 72.6364099, 21.5939225 ], [ 72.6358618, 21.5937855 ], [ 72.6347739, 21.5929981 ], [ 72.6342237, 21.5929902 ], [ 72.6336694, 21.5932397 ], [ 72.6331213, 21.5931038 ], [ 72.6329748, 21.5936163 ], [ 72.6325543, 21.5941249 ], [ 72.631727, 21.5942414 ], [ 72.6314477, 21.5944948 ], [ 72.6303473, 21.5944791 ], [ 72.628978, 21.5940741 ], [ 72.6289865, 21.5935595 ], [ 72.6284363, 21.5935517 ], [ 72.6283067, 21.5930352 ], [ 72.6279028, 21.5925147 ], [ 72.625969, 21.5930017 ], [ 72.6259604, 21.5935164 ], [ 72.6254103, 21.5935084 ], [ 72.6256769, 21.594027 ], [ 72.6251268, 21.5940191 ], [ 72.6251099, 21.5950482 ], [ 72.6245598, 21.5950405 ], [ 72.6242783, 21.5954219 ], [ 72.6240013, 21.595547 ], [ 72.6239971, 21.5958044 ], [ 72.6244513, 21.5958983 ], [ 72.6242638, 21.5963228 ], [ 72.6234384, 21.5963111 ], [ 72.6238085, 21.5988896 ], [ 72.623525, 21.5994003 ], [ 72.6235125, 21.6001722 ], [ 72.6237792, 21.6006906 ], [ 72.6239003, 21.6017216 ], [ 72.6244484, 21.6018577 ], [ 72.6245834, 21.6019887 ], [ 72.6247047, 21.6030198 ], [ 72.6252591, 21.6027704 ], [ 72.625642, 21.6045772 ], [ 72.6264462, 21.6058754 ], [ 72.6276722, 21.6066649 ], [ 72.6276805, 21.6061503 ], [ 72.6279557, 21.6061542 ], [ 72.6282965, 21.6105337 ], [ 72.6285675, 21.6107949 ], [ 72.6293258, 21.6149233 ], [ 72.6294617, 21.6150533 ], [ 72.6300098, 21.6151903 ], [ 72.6298676, 21.6154457 ], [ 72.6299846, 21.6167339 ], [ 72.6305327, 21.61687 ], [ 72.6308038, 21.6171312 ], [ 72.6351808, 21.6187375 ], [ 72.6359979, 21.6192638 ], [ 72.639579, 21.6190574 ], [ 72.6409631, 21.6185623 ], [ 72.6412424, 21.618309 ], [ 72.6418009, 21.6178023 ], [ 72.6424945, 21.6174266 ], [ 72.642641, 21.616914 ], [ 72.6459468, 21.6167034 ], [ 72.6462386, 21.6156781 ], [ 72.6456883, 21.6156704 ], [ 72.6456968, 21.6151559 ], [ 72.6462449, 21.6152918 ], [ 72.6466508, 21.615684 ], [ 72.6467805, 21.6162005 ], [ 72.6478833, 21.6160871 ], [ 72.6486106, 21.6163141 ], [ 72.6486941, 21.6169996 ], [ 72.6497926, 21.6171434 ], [ 72.6504696, 21.6177968 ], [ 72.6508453, 21.6201181 ], [ 72.6513976, 21.6199968 ], [ 72.6515327, 21.6201277 ], [ 72.6519251, 21.6214201 ], [ 72.6524754, 21.6214279 ], [ 72.6527298, 21.6227182 ], [ 72.6538242, 21.6231191 ], [ 72.6542301, 21.6235114 ], [ 72.65436, 21.6240278 ], [ 72.6549122, 21.6239064 ], [ 72.6551833, 21.6241676 ], [ 72.6560046, 21.6244366 ], [ 72.6568219, 21.6249627 ], [ 72.6576348, 21.6257463 ], [ 72.6584562, 21.6260153 ], [ 72.6595403, 21.6270599 ], [ 72.6614581, 21.6276016 ], [ 72.6633841, 21.6276286 ], [ 72.6639428, 21.6271217 ], [ 72.6644953, 21.6270013 ], [ 72.6646164, 21.6252891 ], [ 72.6642615, 21.6244247 ], [ 72.6642696, 21.62391 ], [ 72.6642738, 21.6236528 ], [ 72.664549, 21.6236566 ], [ 72.6650952, 21.6239217 ], [ 72.6649322, 21.6254634 ], [ 72.6650413, 21.6272663 ], [ 72.6666903, 21.6274177 ], [ 72.6672488, 21.626911 ], [ 72.668184, 21.6259353 ], [ 72.6680971, 21.6255078 ], [ 72.6683889, 21.6244827 ], [ 72.6693976, 21.624327 ], [ 72.6694894, 21.624498 ], [ 72.6686646, 21.6248182 ], [ 72.6682762, 21.625598 ], [ 72.6683639, 21.6260262 ], [ 72.6680765, 21.6267943 ], [ 72.6676591, 21.6270457 ], [ 72.6672386, 21.6275545 ], [ 72.6702675, 21.6274679 ], [ 72.6727398, 21.6277599 ], [ 72.6730129, 21.6278928 ], [ 72.6730294, 21.6268637 ], [ 72.6735879, 21.6263568 ], [ 72.6737332, 21.6258442 ], [ 72.6747092, 21.6250858 ], [ 72.6745629, 21.6255985 ], [ 72.6742836, 21.625852 ], [ 72.6745057, 21.6264574 ], [ 72.6749638, 21.6263761 ], [ 72.6749555, 21.6268907 ], [ 72.6744093, 21.6266258 ], [ 72.6732086, 21.6269539 ], [ 72.6738404, 21.6277753 ], [ 72.6745217, 21.6281714 ], [ 72.6746516, 21.6286877 ], [ 72.6762923, 21.6293536 ], [ 72.6765633, 21.6296148 ], [ 72.6773847, 21.6298836 ], [ 72.6784732, 21.6306709 ], [ 72.6798285, 21.6319765 ], [ 72.6806499, 21.6322453 ], [ 72.6814629, 21.6330287 ], [ 72.6830976, 21.6340809 ], [ 72.6861061, 21.6352812 ], [ 72.686098, 21.6357958 ], [ 72.6866483, 21.6358036 ], [ 72.6866402, 21.6363181 ], [ 72.6874637, 21.6364577 ], [ 72.6882728, 21.6374984 ], [ 72.6896406, 21.6380321 ], [ 72.6915506, 21.639088 ], [ 72.6919526, 21.6397374 ], [ 72.6926349, 21.6401325 ], [ 72.6935833, 21.6410468 ], [ 72.6939865, 21.6416953 ], [ 72.6950872, 21.6417106 ], [ 72.6960398, 21.6423676 ], [ 72.6964285, 21.6439172 ], [ 72.6969789, 21.6439247 ], [ 72.6972378, 21.6449576 ], [ 72.6980613, 21.6450973 ], [ 72.6986035, 21.6456195 ], [ 72.7016145, 21.6466906 ], [ 72.7049171, 21.6467363 ], [ 72.705052, 21.6468673 ], [ 72.7052987, 21.6459289 ], [ 72.7054816, 21.6458438 ], [ 72.7056066, 21.6466176 ], [ 72.7057426, 21.6467476 ], [ 72.7073979, 21.6465133 ], [ 72.7078205, 21.6458762 ], [ 72.7078286, 21.6453615 ], [ 72.7079687, 21.6452343 ], [ 72.7090736, 21.6449922 ], [ 72.7093529, 21.6447388 ], [ 72.7104537, 21.6447539 ], [ 72.7107249, 21.6450151 ], [ 72.7115504, 21.6450264 ], [ 72.7122522, 21.6441359 ], [ 72.7128228, 21.6428569 ], [ 72.7131021, 21.6426034 ], [ 72.7131102, 21.642089 ], [ 72.7139479, 21.6413284 ], [ 72.7142312, 21.6408176 ], [ 72.7142393, 21.6403029 ], [ 72.7152091, 21.6399298 ], [ 72.7160428, 21.6394267 ], [ 72.7171456, 21.6393135 ], [ 72.7171537, 21.6387991 ], [ 72.7199097, 21.6385794 ], [ 72.7199258, 21.6375503 ], [ 72.720201, 21.6375541 ], [ 72.7203261, 21.6383279 ], [ 72.7209144, 21.6386809 ], [ 72.7210065, 21.638852 ], [ 72.7221133, 21.6384806 ], [ 72.7276213, 21.6382988 ], [ 72.7281675, 21.6385636 ], [ 72.7314699, 21.6386087 ], [ 72.7317472, 21.6384842 ], [ 72.731739, 21.6389988 ], [ 72.7322915, 21.6388773 ], [ 72.734481, 21.6396792 ], [ 72.7352947, 21.6404623 ], [ 72.7358411, 21.640727 ], [ 72.7410658, 21.6410555 ], [ 72.7418876, 21.6413241 ], [ 72.7429883, 21.641339 ], [ 72.7435347, 21.6416038 ], [ 72.7462828, 21.6418985 ], [ 72.7468252, 21.6424207 ], [ 72.7473756, 21.642428 ], [ 72.747918, 21.6429501 ], [ 72.7487417, 21.6430905 ], [ 72.7487337, 21.643605 ], [ 72.7492822, 21.6437407 ], [ 72.7494173, 21.6438716 ], [ 72.7495474, 21.6443882 ], [ 72.7509174, 21.6447922 ], [ 72.7520023, 21.6458363 ], [ 72.752684, 21.6462321 ], [ 72.7530813, 21.6472668 ], [ 72.7536318, 21.6472742 ], [ 72.7540083, 21.6495955 ], [ 72.7541444, 21.6497255 ], [ 72.756073, 21.6496235 ], [ 72.7560809, 21.6491088 ], [ 72.7569085, 21.6489909 ], [ 72.757467, 21.6484838 ], [ 72.7624487, 21.6467495 ], [ 72.7674145, 21.6460442 ], [ 72.7676936, 21.6457905 ], [ 72.768021982812499, 21.64578157785008 ], [ 72.768021982812499, 21.645781577850077 ], [ 72.7740278, 21.6456184 ], [ 72.7817496, 21.6446923 ], [ 72.7820287, 21.6444386 ], [ 72.7842306, 21.6444679 ], [ 72.7880718, 21.6452912 ], [ 72.7891727, 21.645306 ], [ 72.7924676, 21.6458644 ], [ 72.7949367, 21.646412 ], [ 72.7952081, 21.646673 ], [ 72.7957584, 21.6466802 ], [ 72.7965762, 21.6472058 ], [ 72.797402, 21.6472167 ], [ 72.7976734, 21.6474777 ], [ 72.7990455, 21.6477533 ], [ 72.8036972, 21.6496163 ], [ 72.8042476, 21.6496237 ], [ 72.804519, 21.6498847 ], [ 72.8061625, 21.650421 ], [ 72.8064339, 21.6506821 ], [ 72.8078023, 21.6512148 ], [ 72.8080737, 21.6514757 ], [ 72.8091708, 21.6517474 ], [ 72.8099886, 21.6522731 ], [ 72.8105314, 21.6527949 ], [ 72.8116286, 21.6530667 ], [ 72.8124426, 21.6538495 ], [ 72.8135358, 21.6543787 ], [ 72.8076435, 21.6650779 ], [ 72.8064991, 21.6645802 ], [ 72.7985517, 21.6621587 ], [ 72.7883634, 21.6622806 ], [ 72.7878089, 21.6625307 ], [ 72.786708, 21.6625159 ], [ 72.7833931, 21.6632438 ], [ 72.782292, 21.663229 ], [ 72.7817377, 21.6634789 ], [ 72.7787019, 21.6639531 ], [ 72.7784228, 21.6642067 ], [ 72.7778722, 21.6641993 ], [ 72.7753831, 21.6649379 ], [ 72.7737295, 21.6650449 ], [ 72.7737216, 21.6655596 ], [ 72.7720643, 21.6659228 ], [ 72.7717849, 21.6661765 ], [ 72.77068, 21.666419 ], [ 72.7704009, 21.6666726 ], [ 72.7690206, 21.6669115 ], [ 72.7687413, 21.6671649 ], [ 72.768021982812499, 21.667322773488973 ], [ 72.7676364, 21.6674074 ], [ 72.7673572, 21.6676611 ], [ 72.7656997, 21.6680253 ], [ 72.7656917, 21.6685399 ], [ 72.7645887, 21.6686533 ], [ 72.7634797, 21.669153 ], [ 72.7623767, 21.6692672 ], [ 72.7623687, 21.6697818 ], [ 72.7615428, 21.6697707 ], [ 72.7612618, 21.6701525 ], [ 72.7609845, 21.670278 ], [ 72.7609766, 21.6707924 ], [ 72.76043, 21.6705278 ], [ 72.760422, 21.6710423 ], [ 72.759317, 21.6712848 ], [ 72.7590297, 21.6720529 ], [ 72.7584772, 21.6721736 ], [ 72.7581979, 21.6724273 ], [ 72.7576454, 21.672549 ], [ 72.7576375, 21.6730634 ], [ 72.7562533, 21.6735596 ], [ 72.755966, 21.6743277 ], [ 72.7545855, 21.6745664 ], [ 72.7542945, 21.6755919 ], [ 72.7531894, 21.6758342 ], [ 72.7526148, 21.6773706 ], [ 72.7520624, 21.6774913 ], [ 72.7509473, 21.6783774 ], [ 72.7508012, 21.6788901 ], [ 72.7499594, 21.6799081 ], [ 72.7500775, 21.6811963 ], [ 72.7522737, 21.6816117 ], [ 72.7545793, 21.683831 ], [ 72.7547093, 21.6843473 ], [ 72.7552599, 21.6843549 ], [ 72.7555113, 21.6859022 ], [ 72.756062, 21.6859098 ], [ 72.7559199, 21.6861651 ], [ 72.7559078, 21.686937 ], [ 72.7571172, 21.6888831 ], [ 72.7576659, 21.6890196 ], [ 72.7579172, 21.6905671 ], [ 72.7584678, 21.6905747 ], [ 72.7580425, 21.6913409 ], [ 72.7578694, 21.6936548 ], [ 72.7584181, 21.6937903 ], [ 72.7589607, 21.6943123 ], [ 72.7597787, 21.6948381 ], [ 72.7603274, 21.6949748 ], [ 72.760708, 21.6970387 ], [ 72.7604247, 21.6975495 ], [ 72.7604048, 21.698836 ], [ 72.761361, 21.6993635 ], [ 72.7613689, 21.6988491 ], [ 72.7616422, 21.698981 ], [ 72.7621928, 21.6989884 ], [ 72.7630268, 21.6984849 ], [ 72.7638567, 21.6982388 ], [ 72.7652332, 21.6982573 ], [ 72.7656398, 21.6986493 ], [ 72.7661786, 21.6994286 ], [ 72.7661308, 21.7025163 ], [ 72.7651478, 21.7037897 ], [ 72.7637473, 21.705315 ], [ 72.7633179, 21.7063386 ], [ 72.7634322, 21.7078842 ], [ 72.7642542, 21.7081526 ], [ 72.7642502, 21.7084098 ], [ 72.7645256, 21.7084136 ], [ 72.7646141, 21.7087597 ], [ 72.7656211, 21.7088139 ], [ 72.7668416, 21.7099889 ], [ 72.7668059, 21.7123046 ], [ 72.7665226, 21.7128156 ], [ 72.7666131, 21.715905 ], [ 72.7668885, 21.7159086 ], [ 72.7668806, 21.7164232 ], [ 72.7671559, 21.716427 ], [ 72.767144, 21.7171989 ], [ 72.7668686, 21.7171951 ], [ 72.766471, 21.7161603 ], [ 72.7661996, 21.7158993 ], [ 72.765972, 21.7128081 ], [ 72.7665385, 21.7117863 ], [ 72.7664292, 21.7099835 ], [ 72.7658806, 21.7098468 ], [ 72.7645177, 21.7089283 ], [ 72.7634203, 21.7086561 ], [ 72.7632901, 21.7081396 ], [ 72.7630187, 21.7078786 ], [ 72.7627554, 21.7071029 ], [ 72.7627673, 21.706331 ], [ 72.7634801, 21.7047965 ], [ 72.7642271, 21.7040706 ], [ 72.7648806, 21.7032713 ], [ 72.7651557, 21.7032751 ], [ 72.7651676, 21.7025032 ], [ 72.7657184, 21.7025106 ], [ 72.7655882, 21.7019942 ], [ 72.7658715, 21.7014834 ], [ 72.7658834, 21.7007115 ], [ 72.7653565, 21.6991602 ], [ 72.764952, 21.69864 ], [ 72.7630208, 21.6988714 ], [ 72.7630129, 21.6993858 ], [ 72.760533, 21.6994807 ], [ 72.7597171, 21.6988268 ], [ 72.7595988, 21.6975384 ], [ 72.7598821, 21.6970275 ], [ 72.7598979, 21.6959982 ], [ 72.7595014, 21.6949636 ], [ 72.7586774, 21.6948232 ], [ 72.7578575, 21.6944267 ], [ 72.7577273, 21.6939101 ], [ 72.7571847, 21.6933881 ], [ 72.7575039, 21.6905616 ], [ 72.7572325, 21.6903006 ], [ 72.7568399, 21.6890084 ], [ 72.7562894, 21.689001 ], [ 72.7561591, 21.6884845 ], [ 72.7558879, 21.6882235 ], [ 72.7556247, 21.6874478 ], [ 72.7553533, 21.6871868 ], [ 72.7552361, 21.6858986 ], [ 72.7546855, 21.6858911 ], [ 72.7545632, 21.6848601 ], [ 72.7537573, 21.6835624 ], [ 72.7532237, 21.6833115 ], [ 72.7519904, 21.6821226 ], [ 72.7500635, 21.6820965 ], [ 72.7483977, 21.682975 ], [ 72.7485269, 21.6834915 ], [ 72.747673, 21.6852813 ], [ 72.7471146, 21.6857884 ], [ 72.7464067, 21.6870655 ], [ 72.7455768, 21.6873116 ], [ 72.7452856, 21.6883371 ], [ 72.7439031, 21.6887038 ], [ 72.7436237, 21.6889574 ], [ 72.741134, 21.6896954 ], [ 72.7403002, 21.6901989 ], [ 72.7369925, 21.690411 ], [ 72.7356201, 21.690135 ], [ 72.7342557, 21.6893443 ], [ 72.733705, 21.6893367 ], [ 72.7320615, 21.6887996 ], [ 72.7315168, 21.6884066 ], [ 72.7312537, 21.687631 ], [ 72.7298832, 21.6872258 ], [ 72.7290694, 21.6864426 ], [ 72.7260575, 21.6853719 ], [ 72.7241386, 21.6848308 ], [ 72.723588, 21.6848232 ], [ 72.7224948, 21.6842936 ], [ 72.7219443, 21.6842861 ], [ 72.7214019, 21.6837639 ], [ 72.7200335, 21.6832303 ], [ 72.7189486, 21.6821861 ], [ 72.7183981, 21.6821785 ], [ 72.7173093, 21.6813915 ], [ 72.7164875, 21.6811228 ], [ 72.7162163, 21.6808618 ], [ 72.7153924, 21.6807221 ], [ 72.7154005, 21.6802076 ], [ 72.7148479, 21.6803282 ], [ 72.7145767, 21.6800672 ], [ 72.7121114, 21.6792611 ], [ 72.7088082, 21.6792156 ], [ 72.7085349, 21.6790835 ], [ 72.7085268, 21.6795981 ], [ 72.7052153, 21.680067 ], [ 72.7052072, 21.6805815 ], [ 72.7038288, 21.6806907 ], [ 72.7035495, 21.6809442 ], [ 72.7007846, 21.6816779 ], [ 72.7005053, 21.6819313 ], [ 72.6974731, 21.6821466 ], [ 72.6971957, 21.6822719 ], [ 72.6971876, 21.6827865 ], [ 72.696372, 21.6821313 ], [ 72.6952709, 21.682116 ], [ 72.6922594, 21.6810447 ], [ 72.6908871, 21.6807684 ], [ 72.6900613, 21.6807569 ], [ 72.6895147, 21.6804919 ], [ 72.6878672, 21.6802116 ], [ 72.6873208, 21.6799466 ], [ 72.6820825, 21.6803881 ], [ 72.6818031, 21.6806416 ], [ 72.6804227, 21.6808797 ], [ 72.6801433, 21.6811332 ], [ 72.6790422, 21.6811177 ], [ 72.6784835, 21.6816246 ], [ 72.6773845, 21.6814809 ], [ 72.6770969, 21.6822488 ], [ 72.6765463, 21.6822413 ], [ 72.676538, 21.6827557 ], [ 72.6743255, 21.6833677 ], [ 72.6740462, 21.6836212 ], [ 72.6735886, 21.6836554 ], [ 72.6734975, 21.6834851 ], [ 72.6723966, 21.6834698 ], [ 72.6729264, 21.6847639 ], [ 72.6723737, 21.6848843 ], [ 72.6720944, 21.6851377 ], [ 72.6707202, 21.6849903 ], [ 72.6710078, 21.6842222 ], [ 72.6666096, 21.6837739 ], [ 72.6646952, 21.682975 ], [ 72.664424, 21.6827138 ], [ 72.6633271, 21.682441 ], [ 72.6627828, 21.6820477 ], [ 72.66252, 21.6812721 ], [ 72.6614189, 21.6812566 ], [ 72.6612891, 21.68074 ], [ 72.660885, 21.6802197 ], [ 72.6603324, 21.6803401 ], [ 72.6595149, 21.6798139 ], [ 72.658414, 21.6797983 ], [ 72.6575922, 21.6795293 ], [ 72.6567665, 21.6795178 ], [ 72.6562201, 21.6792526 ], [ 72.6553944, 21.6792411 ], [ 72.6545645, 21.6794866 ], [ 72.6537387, 21.6794749 ], [ 72.653184, 21.6797244 ], [ 72.650982, 21.6796932 ], [ 72.6507024, 21.6799466 ], [ 72.6457436, 21.6801335 ], [ 72.6451889, 21.680383 ], [ 72.6446384, 21.6803753 ], [ 72.6440837, 21.6806248 ], [ 72.6410559, 21.6805817 ], [ 72.6407784, 21.6807068 ], [ 72.6407867, 21.6801923 ], [ 72.6399631, 21.6800515 ], [ 72.6374774, 21.6805308 ], [ 72.6275639, 21.6806465 ], [ 72.6256288, 21.6811335 ], [ 72.6242545, 21.6809856 ], [ 72.6245214, 21.6815042 ], [ 72.622872, 21.6813515 ], [ 72.6225925, 21.6816047 ], [ 72.6214914, 21.6815888 ], [ 72.6209366, 21.6818383 ], [ 72.6198357, 21.6818225 ], [ 72.6195647, 21.6815613 ], [ 72.6184594, 21.6818028 ], [ 72.6176335, 21.6817909 ], [ 72.6168036, 21.6820362 ], [ 72.6165241, 21.6822897 ], [ 72.6156983, 21.6822778 ], [ 72.6151521, 21.6820126 ], [ 72.6093589, 21.6827011 ], [ 72.6041311, 21.6824974 ], [ 72.6041396, 21.6819829 ], [ 72.6013978, 21.6812995 ], [ 72.6005721, 21.6812876 ], [ 72.5997505, 21.6810183 ], [ 72.5989248, 21.6810063 ], [ 72.5986537, 21.6807452 ], [ 72.5970022, 21.6807211 ], [ 72.596185, 21.6801948 ], [ 72.5956345, 21.6801867 ], [ 72.5948216, 21.6794029 ], [ 72.5937248, 21.6791298 ], [ 72.5929098, 21.6784751 ], [ 72.5929183, 21.6779604 ], [ 72.5915487, 21.6775541 ], [ 72.5907358, 21.6767703 ], [ 72.5893723, 21.6759786 ], [ 72.5858155, 21.6746403 ], [ 72.5852652, 21.6746321 ], [ 72.5841707, 21.6742307 ], [ 72.5841792, 21.6737162 ], [ 72.5836265, 21.6738363 ], [ 72.5830847, 21.6733137 ], [ 72.5817129, 21.6730364 ], [ 72.5811709, 21.6725138 ], [ 72.5803453, 21.6725019 ], [ 72.578982, 21.67171 ], [ 72.5781584, 21.6715698 ], [ 72.5781671, 21.6710551 ], [ 72.5776188, 21.6709181 ], [ 72.5773478, 21.6706569 ], [ 72.5765264, 21.6703876 ], [ 72.5759845, 21.669865 ], [ 72.5746171, 21.6693303 ], [ 72.5738042, 21.6685463 ], [ 72.572983, 21.668277 ], [ 72.5721701, 21.6674932 ], [ 72.5705319, 21.6666972 ], [ 72.5699813, 21.6666892 ], [ 72.5686182, 21.6658973 ], [ 72.5680677, 21.6658892 ], [ 72.5677968, 21.6656278 ], [ 72.5658834, 21.6648278 ], [ 72.5642514, 21.6636463 ], [ 72.5639892, 21.6628705 ], [ 72.5626154, 21.6627212 ], [ 72.5615296, 21.6618051 ], [ 72.5604548, 21.6602455 ], [ 72.5604461, 21.6607599 ], [ 72.5601709, 21.6607558 ], [ 72.5599131, 21.6597227 ], [ 72.5593604, 21.6598429 ], [ 72.5549789, 21.6584917 ], [ 72.5514013, 21.658439 ], [ 72.5508466, 21.6586881 ], [ 72.5464434, 21.6586231 ], [ 72.5447857, 21.658985 ], [ 72.5447768, 21.6594995 ], [ 72.543117, 21.6599895 ], [ 72.5431083, 21.6605042 ], [ 72.5414527, 21.6607369 ], [ 72.5411645, 21.6615046 ], [ 72.5406118, 21.6616246 ], [ 72.5400548, 21.6620028 ], [ 72.5397623, 21.6630277 ], [ 72.5383775, 21.663522 ], [ 72.5383688, 21.6640364 ], [ 72.5378161, 21.6641564 ], [ 72.5369796, 21.6647877 ], [ 72.5369707, 21.6653023 ], [ 72.5364183, 21.6654222 ], [ 72.5353064, 21.6660495 ], [ 72.5351596, 21.666562 ], [ 72.5344589, 21.6673235 ], [ 72.5339086, 21.6673154 ], [ 72.5340326, 21.6680891 ], [ 72.5338866, 21.6686015 ], [ 72.533334, 21.6687215 ], [ 72.5330545, 21.6689748 ], [ 72.5325018, 21.6690956 ], [ 72.5326302, 21.6696123 ], [ 72.5323506, 21.6698654 ], [ 72.5322047, 21.6703779 ], [ 72.5316521, 21.6704978 ], [ 72.5308154, 21.6711292 ], [ 72.5308024, 21.6719009 ], [ 72.5302497, 21.6720209 ], [ 72.5296927, 21.6723991 ], [ 72.5295457, 21.6729115 ], [ 72.5287026, 21.6739281 ], [ 72.528548, 21.6749551 ], [ 72.5282749, 21.6748219 ], [ 72.5277222, 21.6749429 ], [ 72.5278549, 21.6752022 ], [ 72.5275621, 21.6762271 ], [ 72.5269985, 21.6769907 ], [ 72.5269634, 21.6790487 ], [ 72.5272255, 21.6798245 ], [ 72.5271947, 21.6816253 ], [ 72.5269152, 21.6818784 ], [ 72.526836, 21.6865091 ], [ 72.5271025, 21.6870277 ], [ 72.5269171, 21.6898553 ], [ 72.5274674, 21.6898636 ], [ 72.5277209, 21.6911539 ], [ 72.5270654, 21.6917465 ], [ 72.5272943, 21.6919196 ], [ 72.5275519, 21.6929527 ], [ 72.5272372, 21.6952639 ], [ 72.5269532, 21.6957742 ], [ 72.5269399, 21.6965461 ], [ 72.5267984, 21.6968013 ], [ 72.5262478, 21.696793 ], [ 72.52651, 21.697569 ], [ 72.5262391, 21.6973076 ], [ 72.5259638, 21.6973034 ], [ 72.5259594, 21.6975607 ], [ 72.5263675, 21.6978241 ], [ 72.5263586, 21.6983386 ], [ 72.5260745, 21.6988491 ], [ 72.5260613, 21.6996208 ], [ 72.525502, 21.7001271 ], [ 72.5253516, 21.7008967 ], [ 72.5275342, 21.7020868 ], [ 72.5276691, 21.702218 ], [ 72.527794, 21.7029918 ], [ 72.5269725, 21.7027223 ], [ 72.5269549, 21.7037512 ], [ 72.5275054, 21.7037595 ], [ 72.5278388, 21.708396 ], [ 72.5278451, 21.7161157 ], [ 72.5283956, 21.7161241 ], [ 72.5285153, 21.7171551 ], [ 72.5291688, 21.7192233 ], [ 72.5297194, 21.7192316 ], [ 72.5301144, 21.7202668 ], [ 72.5316181, 21.720932 ], [ 72.5322949, 21.7215858 ], [ 72.5324198, 21.7223597 ], [ 72.5332503, 21.7221148 ], [ 72.5333786, 21.7226313 ], [ 72.534187, 21.7236725 ], [ 72.5349428, 21.727801 ], [ 72.5352136, 21.7280622 ], [ 72.5353255, 21.7296079 ], [ 72.5358762, 21.729616 ], [ 72.535987, 21.7311617 ], [ 72.536258, 21.731423 ], [ 72.5366496, 21.7327154 ], [ 72.5372002, 21.7327237 ], [ 72.5373242, 21.7334975 ], [ 72.5375952, 21.7337589 ], [ 72.5377247, 21.7342754 ], [ 72.5388237, 21.73442 ], [ 72.5397935, 21.7340488 ], [ 72.539798, 21.7337916 ], [ 72.5393941, 21.7332709 ], [ 72.5418766, 21.7330505 ], [ 72.5418853, 21.7325361 ], [ 72.5427135, 21.7324191 ], [ 72.5431327, 21.7320399 ], [ 72.5432796, 21.7315274 ], [ 72.5449403, 21.7310375 ], [ 72.546599, 21.7306755 ], [ 72.54696, 21.7311549 ], [ 72.5479647, 21.7313395 ], [ 72.5479603, 21.7315967 ], [ 72.5482355, 21.7316009 ], [ 72.5482312, 21.7318581 ], [ 72.5468634, 21.7313233 ], [ 72.5449737, 21.7315399 ], [ 72.5435461, 21.732046 ], [ 72.5435374, 21.7325604 ], [ 72.5424294, 21.7329296 ], [ 72.5418723, 21.7333078 ], [ 72.5418679, 21.733565 ], [ 72.5424164, 21.7337014 ], [ 72.5428224, 21.7340938 ], [ 72.5429473, 21.7348676 ], [ 72.5448857, 21.7342526 ], [ 72.5487492, 21.7337952 ], [ 72.5492954, 21.7340607 ], [ 72.5495708, 21.7340647 ], [ 72.5501259, 21.7338156 ], [ 72.5506766, 21.7338237 ], [ 72.5517846, 21.7334546 ], [ 72.5517933, 21.7329401 ], [ 72.5528968, 21.7328273 ], [ 72.5562183, 21.7318472 ], [ 72.5563576, 21.7317209 ], [ 72.5565045, 21.7312085 ], [ 72.5584296, 21.7313652 ], [ 72.5585648, 21.7314962 ], [ 72.5584188, 21.7320088 ], [ 72.5570442, 21.7318593 ], [ 72.5548286, 21.7325986 ], [ 72.5545489, 21.7328517 ], [ 72.5537228, 21.7328396 ], [ 72.5534453, 21.7329645 ], [ 72.5531569, 21.7337322 ], [ 72.5528838, 21.7335992 ], [ 72.552333, 21.7335911 ], [ 72.5514982, 21.7340932 ], [ 72.5503947, 21.7342061 ], [ 72.5501062, 21.7349738 ], [ 72.549007, 21.7348284 ], [ 72.5487362, 21.7345671 ], [ 72.5470841, 21.7345425 ], [ 72.5468044, 21.7347957 ], [ 72.545976, 21.7349126 ], [ 72.546245, 21.7353021 ], [ 72.5467912, 21.7355674 ], [ 72.5473419, 21.7355758 ], [ 72.5484302, 21.7363637 ], [ 72.549252, 21.7366332 ], [ 72.5500649, 21.7374172 ], [ 72.5510216, 21.7378179 ], [ 72.5510172, 21.7380751 ], [ 72.5507332, 21.7385856 ], [ 72.550314, 21.7389649 ], [ 72.5507156, 21.7396145 ], [ 72.5504228, 21.7406394 ], [ 72.5505436, 21.7416706 ], [ 72.5513741, 21.7414255 ], [ 72.551227, 21.7419381 ], [ 72.5509473, 21.7421911 ], [ 72.5509343, 21.742963 ], [ 72.5513391, 21.7434837 ], [ 72.5507883, 21.7434754 ], [ 72.5509212, 21.7437347 ], [ 72.5507577, 21.7452762 ], [ 72.5513107, 21.7451554 ], [ 72.5517167, 21.7455478 ], [ 72.5518462, 21.7460643 ], [ 72.5526766, 21.7458194 ], [ 72.5526897, 21.7450475 ], [ 72.5532404, 21.7450556 ], [ 72.5530892, 21.7458254 ], [ 72.5523839, 21.7468443 ], [ 72.5521106, 21.7467111 ], [ 72.5515598, 21.7467029 ], [ 72.5512824, 21.7468279 ], [ 72.5509764, 21.7486247 ], [ 72.5518025, 21.748637 ], [ 72.5517851, 21.7496659 ], [ 72.5523402, 21.7494168 ], [ 72.5520475, 21.7504417 ], [ 72.5514967, 21.7504336 ], [ 72.5514835, 21.7512055 ], [ 72.5509327, 21.7511972 ], [ 72.5510569, 21.7519711 ], [ 72.5513279, 21.7522323 ], [ 72.5518524, 21.753784 ], [ 72.5523945, 21.7543068 ], [ 72.5525239, 21.7548233 ], [ 72.5530747, 21.7548315 ], [ 72.553066, 21.7553459 ], [ 72.553619, 21.7552249 ], [ 72.5547141, 21.7556277 ], [ 72.553721062988046, 21.756625617187503 ], [ 72.5534525, 21.7568955 ], [ 72.5533109, 21.7571509 ], [ 72.5530376, 21.7570176 ], [ 72.5524848, 21.7571386 ], [ 72.5523334, 21.7579084 ], [ 72.5526001, 21.758427 ], [ 72.5527209, 21.759458 ], [ 72.553547, 21.7594703 ], [ 72.5535383, 21.7599847 ], [ 72.5527099, 21.7601008 ], [ 72.5515975, 21.7607279 ], [ 72.5520013, 21.7612486 ], [ 72.5518467, 21.7622756 ], [ 72.5523975, 21.7622837 ], [ 72.5519751, 21.7627921 ], [ 72.5519664, 21.7633066 ], [ 72.5525041, 21.7640866 ], [ 72.5526402, 21.7642168 ], [ 72.5531886, 21.764354 ], [ 72.55318, 21.7648685 ], [ 72.5537309, 21.7648766 ], [ 72.553722, 21.7653913 ], [ 72.5542707, 21.7655275 ], [ 72.5544058, 21.7656587 ], [ 72.5543971, 21.7661732 ], [ 72.5542554, 21.7664283 ], [ 72.5537069, 21.7662911 ], [ 72.5531648, 21.7657685 ], [ 72.5515145, 21.7656158 ], [ 72.5519184, 21.7661365 ], [ 72.551914, 21.7663937 ], [ 72.55163, 21.7669042 ], [ 72.5512977, 21.7702444 ], [ 72.5515687, 21.7705058 ], [ 72.55156, 21.7710202 ], [ 72.5519692, 21.7712837 ], [ 72.5521195, 21.7705139 ], [ 72.5528152, 21.7701378 ], [ 72.5552916, 21.7703036 ], [ 72.5552873, 21.7705608 ], [ 72.5544589, 21.7706766 ], [ 72.5536239, 21.771179 ], [ 72.5530709, 21.7713 ], [ 72.5531471, 21.7749036 ], [ 72.5534181, 21.7751648 ], [ 72.5536717, 21.7764553 ], [ 72.5539428, 21.7767165 ], [ 72.5542007, 21.7777498 ], [ 72.5543366, 21.77788 ], [ 72.5551609, 21.7780212 ], [ 72.5552805, 21.7790524 ], [ 72.5562385, 21.7794519 ], [ 72.5565096, 21.7797133 ], [ 72.5570605, 21.7797214 ], [ 72.5571954, 21.7798526 ], [ 72.5573162, 21.7808836 ], [ 72.5586912, 21.7810321 ], [ 72.5592378, 21.7812975 ], [ 72.5597887, 21.7813056 ], [ 72.5600662, 21.7811816 ], [ 72.5600575, 21.7816961 ], [ 72.5589514, 21.7819371 ], [ 72.5593553, 21.7824578 ], [ 72.5598932, 21.7832376 ], [ 72.5600227, 21.7837541 ], [ 72.5605736, 21.7837622 ], [ 72.560285, 21.78453 ], [ 72.5591767, 21.7848991 ], [ 72.5586194, 21.7852773 ], [ 72.5587479, 21.785794 ], [ 72.558468, 21.7860471 ], [ 72.5584593, 21.7865615 ], [ 72.5585954, 21.7866917 ], [ 72.5599703, 21.7868412 ], [ 72.5602329, 21.7876171 ], [ 72.559402, 21.7878622 ], [ 72.5591397, 21.7870864 ], [ 72.5583047, 21.7875886 ], [ 72.5584289, 21.7883623 ], [ 72.558283, 21.7888749 ], [ 72.557732, 21.7888668 ], [ 72.5578562, 21.7896405 ], [ 72.5588099, 21.7902975 ], [ 72.5593606, 21.7903056 ], [ 72.5607292, 21.7908405 ], [ 72.5612714, 21.7913631 ], [ 72.5637441, 21.7917861 ], [ 72.5636014, 21.7920412 ], [ 72.5635927, 21.7925559 ], [ 72.5637288, 21.7926861 ], [ 72.5648263, 21.7929596 ], [ 72.565104, 21.7928354 ], [ 72.5653533, 21.7943831 ], [ 72.5645313, 21.7941136 ], [ 72.5642427, 21.7948813 ], [ 72.5639694, 21.7947481 ], [ 72.5634185, 21.7947399 ], [ 72.5628588, 21.7952465 ], [ 72.5620325, 21.7952342 ], [ 72.5617549, 21.7953593 ], [ 72.5621457, 21.7966517 ], [ 72.562137, 21.7971661 ], [ 72.5624083, 21.7974275 ], [ 72.5625377, 21.7979441 ], [ 72.563364, 21.7979561 ], [ 72.562787, 21.7994916 ], [ 72.5620603, 21.7991351 ], [ 72.5619694, 21.7989648 ], [ 72.5616938, 21.7989609 ], [ 72.5616895, 21.7992181 ], [ 72.5618688, 21.7993083 ], [ 72.5619564, 21.7997367 ], [ 72.5641665, 21.7993829 ], [ 72.5650755, 21.7988684 ], [ 72.5680645, 21.7969962 ], [ 72.5697216, 21.7967632 ], [ 72.5697173, 21.7970206 ], [ 72.5688887, 21.7971365 ], [ 72.568609, 21.7973897 ], [ 72.5680971, 21.7974142 ], [ 72.5674918, 21.7982744 ], [ 72.5662894, 21.7986016 ], [ 72.566097, 21.7992831 ], [ 72.5652707, 21.7992708 ], [ 72.5655286, 21.8003041 ], [ 72.5660796, 21.8003122 ], [ 72.5660665, 21.8010839 ], [ 72.5671643, 21.8013574 ], [ 72.5676848, 21.8031663 ], [ 72.566867, 21.8026396 ], [ 72.56688, 21.8018679 ], [ 72.5663291, 21.8018598 ], [ 72.5667158, 21.8034094 ], [ 72.5669868, 21.8036708 ], [ 72.5669433, 21.8062432 ], [ 72.5672015, 21.8072763 ], [ 72.567051, 21.8080461 ], [ 72.5667757, 21.8080421 ], [ 72.5665175, 21.8070091 ], [ 72.565138, 21.8071168 ], [ 72.5645891, 21.8069805 ], [ 72.5644117, 21.8092939 ], [ 72.5642701, 21.809549 ], [ 72.564821, 21.8095572 ], [ 72.5652077, 21.8111068 ], [ 72.5653438, 21.811237 ], [ 72.5667192, 21.8113865 ], [ 72.5666974, 21.8126726 ], [ 72.5672484, 21.8126808 ], [ 72.5672397, 21.8131954 ], [ 72.5677949, 21.8129461 ], [ 72.5679104, 21.8142345 ], [ 72.5689994, 21.8150225 ], [ 72.5691291, 21.815539 ], [ 72.5699533, 21.8156794 ], [ 72.5706307, 21.8163332 ], [ 72.5707604, 21.8168497 ], [ 72.5713156, 21.8166006 ], [ 72.5713069, 21.8171151 ], [ 72.5726802, 21.8173925 ], [ 72.5722924, 21.8158429 ], [ 72.5714789, 21.8150589 ], [ 72.5713504, 21.8145424 ], [ 72.5707995, 21.8145345 ], [ 72.5708082, 21.8140198 ], [ 72.5713548, 21.8142852 ], [ 72.571505, 21.8135156 ], [ 72.5720452, 21.8126182 ], [ 72.5730469, 21.8119943 ], [ 72.5730556, 21.8114797 ], [ 72.5733289, 21.811612 ], [ 72.5738798, 21.8116201 ], [ 72.5754382, 21.8110603 ], [ 72.5763723, 21.8108847 ], [ 72.577457, 21.8119299 ], [ 72.5780057, 21.8120671 ], [ 72.5779972, 21.8125815 ], [ 72.5782725, 21.8125857 ], [ 72.5782638, 21.8131002 ], [ 72.5785394, 21.8131041 ], [ 72.5790796, 21.813755 ], [ 72.5794816, 21.8144046 ], [ 72.580024, 21.8149272 ], [ 72.5806785, 21.8169954 ], [ 72.5817741, 21.8173971 ], [ 72.5820454, 21.8176583 ], [ 72.5828696, 21.8177994 ], [ 72.5839652, 21.8182011 ], [ 72.5856161, 21.8183544 ], [ 72.5880979, 21.8182616 ], [ 72.5894776, 21.8181534 ], [ 72.5897532, 21.8181576 ], [ 72.5894689, 21.8186681 ], [ 72.5860665, 21.8187059 ], [ 72.5861586, 21.8188769 ], [ 72.5842321, 21.8187197 ], [ 72.5828611, 21.8183141 ], [ 72.5803988, 21.8172487 ], [ 72.5802691, 21.8167322 ], [ 72.5799979, 21.8164708 ], [ 72.5796112, 21.8149212 ], [ 72.5790558, 21.8151705 ], [ 72.5789306, 21.8143965 ], [ 72.5781716, 21.8137842 ], [ 72.5775834, 21.8125755 ], [ 72.5763657, 21.811271 ], [ 72.5754921, 21.8114129 ], [ 72.5747019, 21.8118894 ], [ 72.5723865, 21.8128441 ], [ 72.5723359, 21.8132704 ], [ 72.5720559, 21.8135235 ], [ 72.5720474, 21.8140382 ], [ 72.5723185, 21.8142994 ], [ 72.5723098, 21.814814 ], [ 72.5724459, 21.8149442 ], [ 72.5733988, 21.8156019 ], [ 72.5735284, 21.8161185 ], [ 72.5743549, 21.8161306 ], [ 72.5743463, 21.8166452 ], [ 72.5737951, 21.8166371 ], [ 72.5736439, 21.8174067 ], [ 72.5743181, 21.8183169 ], [ 72.5756868, 21.8188516 ], [ 72.5765135, 21.8188637 ], [ 72.5773357, 21.8191332 ], [ 72.5776069, 21.8193944 ], [ 72.5781578, 21.8194025 ], [ 72.578429, 21.8196639 ], [ 72.5798023, 21.8199414 ], [ 72.5800735, 21.8202026 ], [ 72.5817222, 21.8204842 ], [ 72.5818573, 21.8206152 ], [ 72.581987, 21.8211317 ], [ 72.5825379, 21.8211398 ], [ 72.5827745, 21.8234592 ], [ 72.5833234, 21.8235955 ], [ 72.5842765, 21.8242532 ], [ 72.5848102, 21.8252903 ], [ 72.5852175, 21.8256819 ], [ 72.5857664, 21.8258189 ], [ 72.585478, 21.8265868 ], [ 72.5849268, 21.8265787 ], [ 72.5849182, 21.8270931 ], [ 72.5821673, 21.8267955 ], [ 72.5821586, 21.8273101 ], [ 72.5832585, 21.8274543 ], [ 72.5835362, 21.8273303 ], [ 72.5833806, 21.8283574 ], [ 72.5843347, 21.8290141 ], [ 72.5847367, 21.8296637 ], [ 72.5854152, 21.8303165 ], [ 72.5862376, 21.8305859 ], [ 72.5887152, 21.8307512 ], [ 72.5888611, 21.8302387 ], [ 72.5902937, 21.8295753 ], [ 72.5902345, 21.8305161 ], [ 72.5896706, 21.8312799 ], [ 72.5896619, 21.8317943 ], [ 72.5906203, 21.8321939 ], [ 72.5908915, 21.8324553 ], [ 72.5914404, 21.8325923 ], [ 72.591436, 21.8328497 ], [ 72.5906095, 21.8328376 ], [ 72.5904627, 21.83335 ], [ 72.5901827, 21.8336032 ], [ 72.5898943, 21.834371 ], [ 72.5900066, 21.8359166 ], [ 72.5908333, 21.8359287 ], [ 72.5909576, 21.8367025 ], [ 72.5923137, 21.838009 ], [ 72.5929881, 21.8389191 ], [ 72.5935371, 21.8390561 ], [ 72.5936656, 21.8395726 ], [ 72.5942083, 21.8400952 ], [ 72.5944708, 21.8408711 ], [ 72.5950134, 21.8413936 ], [ 72.5959459, 21.8433367 ], [ 72.596495, 21.8434738 ], [ 72.5964734, 21.8447601 ], [ 72.5970245, 21.844768 ], [ 72.5971489, 21.845542 ], [ 72.597552, 21.8461906 ], [ 72.5981011, 21.8463279 ], [ 72.5980881, 21.8470995 ], [ 72.5986414, 21.8469786 ], [ 72.599199, 21.8466012 ], [ 72.5993192, 21.8476322 ], [ 72.6001372, 21.8481587 ], [ 72.6002583, 21.8491897 ], [ 72.6008095, 21.8491978 ], [ 72.6009382, 21.8497144 ], [ 72.6012094, 21.8499756 ], [ 72.601339, 21.8504921 ], [ 72.6062973, 21.8506924 ], [ 72.6065772, 21.8504392 ], [ 72.6090618, 21.8502179 ], [ 72.6097609, 21.8495853 ], [ 72.6099077, 21.8490727 ], [ 72.6109138, 21.8491748 ], [ 72.6110056, 21.849346 ], [ 72.6104524, 21.849466 ], [ 72.6098949, 21.8498444 ], [ 72.6100279, 21.8501037 ], [ 72.6097095, 21.8526724 ], [ 72.6095679, 21.8529276 ], [ 72.6081943, 21.8526503 ], [ 72.6080688, 21.8518765 ], [ 72.6073933, 21.8510948 ], [ 72.6068399, 21.851215 ], [ 72.6062823, 21.8515934 ], [ 72.6063768, 21.854168 ], [ 72.6060969, 21.8544212 ], [ 72.6060841, 21.8551929 ], [ 72.6063468, 21.8559688 ], [ 72.6067543, 21.8563602 ], [ 72.6078544, 21.8565053 ], [ 72.6076904, 21.858047 ], [ 72.608233, 21.8585694 ], [ 72.6083627, 21.8590859 ], [ 72.6091873, 21.8592262 ], [ 72.6094587, 21.8594874 ], [ 72.6149707, 21.8595673 ], [ 72.615793, 21.8598366 ], [ 72.6164666, 21.8607474 ], [ 72.6175222, 21.8635932 ], [ 72.617488, 21.8656514 ], [ 72.6172037, 21.8661619 ], [ 72.6176951, 21.8697716 ], [ 72.6179196, 21.8728627 ], [ 72.6184494, 21.8741572 ], [ 72.6187208, 21.8744184 ], [ 72.619109, 21.875968 ], [ 72.6196603, 21.8759759 ], [ 72.6197892, 21.8764925 ], [ 72.6200604, 21.8767536 ], [ 72.620552, 21.8803634 ], [ 72.6208234, 21.8806246 ], [ 72.6213534, 21.8819188 ], [ 72.621466, 21.8834645 ], [ 72.6220173, 21.8834724 ], [ 72.6221375, 21.8845036 ], [ 72.624251, 21.8849815 ], [ 72.6247545, 21.8856432 ], [ 72.6248968, 21.8859826 ], [ 72.6248257, 21.8864635 ], [ 72.6246021, 21.8864635 ], [ 72.6242395, 21.8864928 ], [ 72.6244332, 21.8869054 ], [ 72.6251308, 21.886873 ], [ 72.6256972, 21.8874004 ], [ 72.6263749, 21.8873978 ], [ 72.6266605, 21.888104 ], [ 72.6267993, 21.8888259 ], [ 72.6264345, 21.8908706 ], [ 72.6265896, 21.8914159 ], [ 72.6269623, 21.8921023 ], [ 72.6275558, 21.8922419 ], [ 72.6277806, 21.8924722 ], [ 72.6279893, 21.8935764 ], [ 72.6277095, 21.8940596 ], [ 72.6271992, 21.8951628 ], [ 72.6268884, 21.8962126 ], [ 72.6267766, 21.8967877 ], [ 72.6268681, 21.8973911 ], [ 72.62699, 21.8977588 ], [ 72.62699, 21.8981737 ], [ 72.6269494, 21.8986356 ], [ 72.626736, 21.8989373 ], [ 72.626675, 21.8992579 ], [ 72.6264819, 21.8996633 ], [ 72.6259605, 21.8998794 ], [ 72.6256729, 21.9002353 ], [ 72.6264901, 21.9010366 ], [ 72.6270535, 21.90214 ], [ 72.6274965, 21.903208 ], [ 72.62844, 21.9041622 ], [ 72.6281843, 21.9050741 ], [ 72.6283904, 21.9055702 ], [ 72.6291647, 21.9058948 ], [ 72.6294261, 21.9064736 ], [ 72.6306735, 21.9070761 ], [ 72.6303648, 21.907754 ], [ 72.6299876, 21.9073439 ], [ 72.6295473, 21.9070242 ], [ 72.6299035, 21.9074594 ], [ 72.6303292, 21.907962 ], [ 72.6312193, 21.9088819 ], [ 72.6314995, 21.9095382 ], [ 72.631416, 21.9101962 ], [ 72.6321732, 21.9104394 ], [ 72.632385, 21.91098 ], [ 72.6325989, 21.9114901 ], [ 72.6329397, 21.9120588 ], [ 72.6331394, 21.9124191 ], [ 72.6339889, 21.912891 ], [ 72.6343696, 21.9131122 ], [ 72.634762, 21.9131197 ], [ 72.6361491, 21.9126251 ], [ 72.6365151, 21.9119308 ], [ 72.6369048, 21.9113438 ], [ 72.6372255, 21.9109772 ], [ 72.6375954, 21.9106382 ], [ 72.6385631, 21.910637 ], [ 72.6390542, 21.9109023 ], [ 72.6395072, 21.9109565 ], [ 72.6397601, 21.9109728 ], [ 72.6400465, 21.9108265 ], [ 72.6403163, 21.9107555 ], [ 72.6408678, 21.9107633 ], [ 72.6404411, 21.9115293 ], [ 72.639938, 21.9119806 ], [ 72.6386883, 21.9123014 ], [ 72.6383519, 21.9129002 ], [ 72.6380752, 21.9133571 ], [ 72.6378065, 21.9139217 ], [ 72.6370843, 21.9143811 ], [ 72.6365932, 21.9148302 ], [ 72.6360956, 21.9153781 ], [ 72.6367125, 21.9161257 ], [ 72.6361119, 21.9167392 ], [ 72.6357594, 21.9172781 ], [ 72.6350999, 21.9175417 ], [ 72.6348626, 21.9181058 ], [ 72.6354999, 21.9188106 ], [ 72.6359166, 21.9191275 ], [ 72.6363496, 21.9198241 ], [ 72.6360457, 21.9203125 ], [ 72.6358318, 21.9207221 ], [ 72.6354479, 21.920976 ], [ 72.6350064, 21.9214367 ], [ 72.6347477, 21.9220571 ], [ 72.634622, 21.9226858 ], [ 72.6347021, 21.9231877 ], [ 72.6348529, 21.9243153 ], [ 72.6351076, 21.9244875 ], [ 72.6352659, 21.9248528 ], [ 72.6347328, 21.9252887 ], [ 72.6348963, 21.9257883 ], [ 72.6351089, 21.926391 ], [ 72.6350086, 21.9269856 ], [ 72.6356558, 21.9275003 ], [ 72.6356425, 21.9280411 ], [ 72.636204, 21.9287333 ], [ 72.6366273, 21.9290485 ], [ 72.6370057, 21.9300931 ], [ 72.6380597, 21.9305374 ], [ 72.6386089, 21.9306735 ], [ 72.6388805, 21.9309347 ], [ 72.639432, 21.9309426 ], [ 72.6396079, 21.9312431 ], [ 72.6391498, 21.9313249 ], [ 72.6389113, 21.931509 ], [ 72.6390405, 21.9317027 ], [ 72.6392892, 21.9327636 ], [ 72.6392892, 21.9331695 ], [ 72.6393389, 21.9334463 ], [ 72.6396969, 21.9338061 ], [ 72.6396969, 21.9342766 ], [ 72.638961, 21.9342305 ], [ 72.6382994, 21.9337151 ], [ 72.6378634, 21.9335064 ], [ 72.637554, 21.9334346 ], [ 72.6371391, 21.9335651 ], [ 72.637111, 21.933976 ], [ 72.6369914, 21.9341065 ], [ 72.636907, 21.9343348 ], [ 72.636471, 21.9344588 ], [ 72.6361686, 21.9347327 ], [ 72.6359928, 21.9351568 ], [ 72.6357537, 21.9354112 ], [ 72.6356201, 21.935222 ], [ 72.635374, 21.9350524 ], [ 72.6350716, 21.9348502 ], [ 72.6350224, 21.9346871 ], [ 72.6345934, 21.9350263 ], [ 72.6343473, 21.9354829 ], [ 72.6340488, 21.9356739 ], [ 72.6339737, 21.9352082 ], [ 72.6339438, 21.935116 ], [ 72.6337648, 21.9350514 ], [ 72.6335062, 21.9350514 ], [ 72.6335426, 21.9357406 ], [ 72.6333943, 21.9364444 ], [ 72.6328818, 21.9367021 ], [ 72.6324357, 21.9367183 ], [ 72.632209666406254, 21.936658991185354 ], [ 72.6319837, 21.9365997 ], [ 72.6315458, 21.9368002 ], [ 72.6311594, 21.937038 ], [ 72.6311293, 21.9374317 ], [ 72.6313137, 21.9378389 ], [ 72.6315763, 21.9381099 ], [ 72.6310683, 21.9382085 ], [ 72.6304699, 21.9383449 ], [ 72.6300834, 21.9387211 ], [ 72.6292558, 21.9395626 ], [ 72.6289954, 21.9406366 ], [ 72.6289646, 21.9415235 ], [ 72.6288537, 21.9425107 ], [ 72.6289007, 21.9434852 ], [ 72.6289382, 21.9441003 ], [ 72.6291217, 21.94504 ], [ 72.6292866, 21.9455462 ], [ 72.6296094, 21.9460891 ], [ 72.6298574, 21.9464694 ], [ 72.6300295, 21.9467307 ], [ 72.6304578, 21.9471548 ], [ 72.6309204, 21.9475362 ], [ 72.6312895, 21.9479405 ], [ 72.6319871, 21.9482059 ], [ 72.632209666406254, 21.948200251685666 ], [ 72.6327673, 21.9481861 ], [ 72.6333328, 21.9481053 ], [ 72.6336185, 21.9481461 ], [ 72.634059, 21.9480588 ], [ 72.6344592, 21.9481121 ], [ 72.6349297, 21.9479766 ], [ 72.6355885, 21.9478554 ], [ 72.6362236, 21.9476659 ], [ 72.6367479, 21.9475775 ], [ 72.637194, 21.9475059 ], [ 72.6375314, 21.9475193 ], [ 72.6386368, 21.9472497 ], [ 72.6392896, 21.947085 ], [ 72.6401345, 21.9471751 ], [ 72.6408211, 21.947046 ], [ 72.6414522, 21.9472384 ], [ 72.6422665, 21.9473901 ], [ 72.6430792, 21.9474956 ], [ 72.6439032, 21.9476268 ], [ 72.6447033, 21.9478561 ], [ 72.6452787, 21.9479564 ], [ 72.6461437, 21.9481251 ], [ 72.6470865, 21.9484429 ], [ 72.6476666, 21.9487081 ], [ 72.6486176, 21.9490674 ], [ 72.6490289, 21.949347 ], [ 72.6499441, 21.949695 ], [ 72.6507442, 21.9498419 ], [ 72.6518507, 21.9501863 ], [ 72.652199, 21.9503339 ], [ 72.6527089, 21.9506251 ], [ 72.6532872, 21.95076 ], [ 72.6535531, 21.9507695 ], [ 72.6539004, 21.9507952 ], [ 72.6542712, 21.9509228 ], [ 72.6545928, 21.9510444 ], [ 72.6550666, 21.9511224 ], [ 72.6555121, 21.9511588 ], [ 72.6557889, 21.9514457 ], [ 72.6565728, 21.9517422 ], [ 72.65719, 21.9520986 ], [ 72.6578477, 21.9522211 ], [ 72.6588891, 21.9521934 ], [ 72.6600446, 21.9524972 ], [ 72.6604091, 21.9527918 ], [ 72.6615299, 21.9532631 ], [ 72.6635868, 21.9536694 ], [ 72.6644518, 21.953663 ], [ 72.6658923, 21.9539061 ], [ 72.6689394, 21.9541518 ], [ 72.6704198, 21.9543271 ], [ 72.671131, 21.9542104 ], [ 72.6714583, 21.9539343 ], [ 72.6716874, 21.9536322 ], [ 72.6719696, 21.9531507 ], [ 72.6724043, 21.9532619 ], [ 72.6720496, 21.9518644 ], [ 72.6720916, 21.9492916 ], [ 72.6729398, 21.9480169 ], [ 72.6740681, 21.9464889 ], [ 72.6756083, 21.945095 ], [ 72.676724, 21.9443388 ], [ 72.6781048, 21.9442301 ], [ 72.6781133, 21.9437155 ], [ 72.6792184, 21.9436021 ], [ 72.679774, 21.9433526 ], [ 72.681435, 21.9429905 ], [ 72.68474, 21.9432944 ], [ 72.6847483, 21.9427799 ], [ 72.6855779, 21.9426624 ], [ 72.6859972, 21.9422827 ], [ 72.6863378, 21.9418662 ], [ 72.6872167, 21.9414221 ], [ 72.6879903, 21.9409568 ], [ 72.689476, 21.9404012 ], [ 72.6896155, 21.9402749 ], [ 72.6901415, 21.9395721 ], [ 72.6911592, 21.9389647 ], [ 72.6919488, 21.9385213 ], [ 72.6925448, 21.9382575 ], [ 72.693654, 21.9378865 ], [ 72.6944979, 21.9368691 ], [ 72.6953293, 21.9366234 ], [ 72.6958891, 21.9361165 ], [ 72.695845, 21.9355406 ], [ 72.6971441, 21.9352339 ], [ 72.6972845, 21.9351069 ], [ 72.6982546, 21.934612 ], [ 72.6989536, 21.93423 ], [ 72.6995072, 21.9341086 ], [ 72.6997871, 21.9338552 ], [ 72.7007999, 21.9335715 ], [ 72.7022832, 21.9329899 ], [ 72.7042197, 21.9326304 ], [ 72.705864, 21.9332972 ], [ 72.7062607, 21.9343322 ], [ 72.706397, 21.9344622 ], [ 72.7085907, 21.9352649 ], [ 72.7095449, 21.9359221 ], [ 72.7093953, 21.9366919 ], [ 72.7098506, 21.9367858 ], [ 72.7099426, 21.9369568 ], [ 72.7110437, 21.9371005 ], [ 72.7118627, 21.9376265 ], [ 72.7126899, 21.937638 ], [ 72.7148838, 21.9384407 ], [ 72.7154272, 21.9389629 ], [ 72.7162503, 21.9392316 ], [ 72.7167997, 21.9393685 ], [ 72.716929, 21.9398848 ], [ 72.717337, 21.9402761 ], [ 72.7178885, 21.9402838 ], [ 72.7181601, 21.9405448 ], [ 72.7189834, 21.9408136 ], [ 72.7198025, 21.9413398 ], [ 72.7202055, 21.9419892 ], [ 72.7212962, 21.9427762 ], [ 72.7218354, 21.9435558 ], [ 72.7223665, 21.9448499 ], [ 72.7226381, 21.9451109 ], [ 72.7230923, 21.9458662 ], [ 72.7234238, 21.946367 ], [ 72.7238381, 21.9467164 ], [ 72.724363, 21.947093 ], [ 72.7251649, 21.9477997 ], [ 72.7265424, 21.9485518 ], [ 72.7252895, 21.9535463 ], [ 72.7220895, 21.9528911 ], [ 72.7205213, 21.9523171 ], [ 72.7197126, 21.9522388 ], [ 72.718503, 21.9521279 ], [ 72.7170918, 21.9520335 ], [ 72.715881, 21.9517757 ], [ 72.7146638, 21.9516893 ], [ 72.7137571, 21.9517835 ], [ 72.713069, 21.9519195 ], [ 72.7125708, 21.9518583 ], [ 72.7119956, 21.9518139 ], [ 72.7115573, 21.9518009 ], [ 72.7112563, 21.9517498 ], [ 72.7107262, 21.9517584 ], [ 72.7100816, 21.9516641 ], [ 72.7093585, 21.9514874 ], [ 72.7087268, 21.9514284 ], [ 72.708697, 21.9518343 ], [ 72.7087169, 21.9520188 ], [ 72.7089158, 21.9523324 ], [ 72.7091943, 21.9527752 ], [ 72.7099413, 21.9540641 ], [ 72.7105866, 21.955321 ], [ 72.7107557, 21.9558929 ], [ 72.7108253, 21.9570182 ], [ 72.7106791, 21.9577541 ], [ 72.7099273, 21.9587402 ], [ 72.7096377, 21.9592541 ], [ 72.7085593, 21.9600237 ], [ 72.7076706, 21.9606085 ], [ 72.7069583, 21.9611032 ], [ 72.7063137, 21.961673 ], [ 72.7055433, 21.9621172 ], [ 72.7046606, 21.9627221 ], [ 72.7033724, 21.9634565 ], [ 72.702055, 21.9643434 ], [ 72.7013174, 21.9644953 ], [ 72.6993842, 21.9653269 ], [ 72.6992186, 21.965641 ], [ 72.6984318, 21.9659826 ], [ 72.6979064, 21.9658977 ], [ 72.6973939, 21.9660924 ], [ 72.6962621, 21.9658215 ], [ 72.6943711, 21.9657245 ], [ 72.6928817, 21.9658565 ], [ 72.691859, 21.9657621 ], [ 72.6886427, 21.9658141 ], [ 72.6864841, 21.9656807 ], [ 72.6855343, 21.9656222 ], [ 72.6851053, 21.965848 ], [ 72.6826188, 21.9653515 ], [ 72.6826025, 21.9649915 ], [ 72.6825994, 21.9647774 ], [ 72.6824627, 21.9647284 ], [ 72.6823475, 21.9652825 ], [ 72.6820898, 21.9651628 ], [ 72.6816946, 21.9647713 ], [ 72.6810839, 21.9646851 ], [ 72.6792824, 21.9640984 ], [ 72.6759134, 21.9631699 ], [ 72.6733647, 21.9624241 ], [ 72.6717508, 21.9617689 ], [ 72.6709234, 21.9617572 ], [ 72.6701003, 21.9614882 ], [ 72.65736, 21.9615042 ], [ 72.6510636, 21.9616033 ], [ 72.6504491, 21.9614839 ], [ 72.6497018, 21.9613386 ], [ 72.6475345, 21.9612375 ], [ 72.6441866, 21.9610293 ], [ 72.6419461, 21.9608663 ], [ 72.639715, 21.9604753 ], [ 72.6376987, 21.9599361 ], [ 72.6359427, 21.9593635 ], [ 72.6346149, 21.9588409 ], [ 72.6326858, 21.9580107 ], [ 72.632409666406261, 21.957873117745184 ], [ 72.632409666406261, 21.95787311774518 ], [ 72.6316885, 21.9575138 ], [ 72.6301665, 21.9567269 ], [ 72.6281988, 21.9557257 ], [ 72.627724, 21.9554608 ], [ 72.6270936, 21.9550832 ], [ 72.6255457, 21.9541201 ], [ 72.6238003, 21.953002 ], [ 72.6235426, 21.9531584 ], [ 72.6234234, 21.95293 ], [ 72.6234094, 21.9528146 ], [ 72.6220955, 21.9518388 ], [ 72.6214252, 21.9513639 ], [ 72.6206007, 21.9507139 ], [ 72.6199868, 21.9503276 ], [ 72.6194348, 21.9500189 ], [ 72.6184993, 21.9493841 ], [ 72.6180354, 21.9489795 ], [ 72.6170913, 21.9483045 ], [ 72.6161883, 21.9477577 ], [ 72.6156776, 21.9473459 ], [ 72.6147081, 21.9467579 ], [ 72.6142993, 21.9459701 ], [ 72.6141763, 21.9458366 ], [ 72.6136488, 21.9453681 ], [ 72.6130514, 21.9446246 ], [ 72.611814, 21.9438283 ], [ 72.6112505, 21.9433115 ], [ 72.61057, 21.942878 ], [ 72.6099185, 21.9424158 ], [ 72.6095305, 21.9420931 ], [ 72.6090775, 21.9417911 ], [ 72.6085347, 21.9415234 ], [ 72.6077884, 21.9409747 ], [ 72.6069507, 21.9408541 ], [ 72.6064422, 21.9404002 ], [ 72.6065154, 21.940174 ], [ 72.6066308, 21.9399877 ], [ 72.6062646, 21.9394933 ], [ 72.6057565, 21.9391007 ], [ 72.6051534, 21.9387844 ], [ 72.6046115, 21.9385442 ], [ 72.60447, 21.9382238 ], [ 72.6040861, 21.9378051 ], [ 72.6037067, 21.9374333 ], [ 72.6032788, 21.9372257 ], [ 72.602865, 21.9373324 ], [ 72.6028246, 21.9374161 ], [ 72.6019462, 21.9365222 ], [ 72.6018085, 21.9356411 ], [ 72.6013198, 21.9352517 ], [ 72.6008862, 21.9348941 ], [ 72.600721, 21.9339875 ], [ 72.6001222, 21.9334767 ], [ 72.5994064, 21.9329213 ], [ 72.5990072, 21.9325893 ], [ 72.5985529, 21.9321743 ], [ 72.5978302, 21.9316954 ], [ 72.5971213, 21.9311772 ], [ 72.5964399, 21.9306738 ], [ 72.5958617, 21.9303163 ], [ 72.5948706, 21.9296459 ], [ 72.5938794, 21.9290074 ], [ 72.5931086, 21.9284838 ], [ 72.5921656, 21.9279603 ], [ 72.5909281, 21.9271434 ], [ 72.5910634, 21.9268088 ], [ 72.5895735, 21.9260017 ], [ 72.588194, 21.9255662 ], [ 72.5869029, 21.9248024 ], [ 72.5853846, 21.9239032 ], [ 72.583762, 21.9229702 ], [ 72.5814536, 21.9213369 ], [ 72.5808298, 21.9206076 ], [ 72.5803725, 21.9200345 ], [ 72.5796735, 21.9197137 ], [ 72.5790954, 21.9184238 ], [ 72.5785585, 21.9173894 ], [ 72.5769479, 21.9167381 ], [ 72.5780767, 21.9138518 ], [ 72.5780629, 21.9115275 ], [ 72.5784208, 21.9101865 ], [ 72.5787752, 21.9084315 ], [ 72.5793496, 21.9070552 ], [ 72.5796844, 21.9058501 ], [ 72.5796347, 21.9052515 ], [ 72.5799082, 21.904607 ], [ 72.5801928, 21.9039967 ], [ 72.5804914, 21.9029418 ], [ 72.5813275, 21.9011494 ], [ 72.5818919, 21.9003858 ], [ 72.5821442, 21.8991904 ], [ 72.5824693, 21.8988504 ], [ 72.5827129, 21.8981696 ], [ 72.5828962, 21.8980848 ], [ 72.582993, 21.8979164 ], [ 72.5831763, 21.8978315 ], [ 72.5832729, 21.8976631 ], [ 72.5834562, 21.8975782 ], [ 72.5834606, 21.897321 ], [ 72.583185, 21.8973168 ], [ 72.5829049, 21.8975701 ], [ 72.582625, 21.8978234 ], [ 72.5823428, 21.8982048 ], [ 72.582065, 21.8983297 ], [ 72.5819586, 21.8990116 ], [ 72.5817762, 21.8990974 ], [ 72.5813449, 21.9001205 ], [ 72.5806388, 21.9011394 ], [ 72.5804585, 21.9010483 ], [ 72.5805222, 21.899851 ], [ 72.5813623, 21.8990914 ], [ 72.5819397, 21.8975559 ], [ 72.5817883, 21.8974438 ], [ 72.5815226, 21.8973439 ], [ 72.5807109, 21.8973862 ], [ 72.5800402, 21.8973038 ], [ 72.5788694, 21.8971935 ], [ 72.5781194, 21.8970948 ], [ 72.5777839, 21.8969891 ], [ 72.5772464, 21.8968405 ], [ 72.5765907, 21.8966907 ], [ 72.5760261, 21.8964822 ], [ 72.575332, 21.8962849 ], [ 72.5743764, 21.8959539 ], [ 72.573601, 21.8955779 ], [ 72.5729505, 21.8953237 ], [ 72.5723757, 21.8948204 ], [ 72.5712412, 21.8943106 ], [ 72.5705978, 21.8937609 ], [ 72.5700226, 21.893385 ], [ 72.5696917, 21.8932392 ], [ 72.5693175, 21.892878 ], [ 72.5689314, 21.8923461 ], [ 72.5683888, 21.8918234 ], [ 72.5675663, 21.8915539 ], [ 72.5672948, 21.8912927 ], [ 72.5653697, 21.8910069 ], [ 72.5650985, 21.8907455 ], [ 72.5645451, 21.8908665 ], [ 72.5645362, 21.8913809 ], [ 72.5659146, 21.8914013 ], [ 72.5672862, 21.8918071 ], [ 72.5683735, 21.8927243 ], [ 72.5683691, 21.8929816 ], [ 72.5686449, 21.8929855 ], [ 72.5686403, 21.8932428 ], [ 72.5680913, 21.8931056 ], [ 72.5670062, 21.8920604 ], [ 72.5658464, 21.8917809 ], [ 72.5648076, 21.8916423 ], [ 72.5639762, 21.8918873 ], [ 72.5618664, 21.8917676 ], [ 72.5617755, 21.8915973 ], [ 72.5612242, 21.8915892 ], [ 72.560966, 21.8905561 ], [ 72.5604147, 21.8905478 ], [ 72.5596271, 21.8882203 ], [ 72.5594785, 21.8878584 ], [ 72.5590723, 21.8873666 ], [ 72.5586823, 21.8872307 ], [ 72.5578593, 21.8871292 ], [ 72.5571618, 21.8872827 ], [ 72.5566082, 21.8874036 ], [ 72.5560263, 21.8891963 ], [ 72.5565753, 21.8893325 ], [ 72.5573911, 21.8901681 ], [ 72.5576938, 21.8907214 ], [ 72.5574706, 21.8908491 ], [ 72.5562865, 21.8901003 ], [ 72.5557354, 21.8900919 ], [ 72.5551325, 21.8902908 ], [ 72.5559055, 21.8881651 ], [ 72.5560658, 21.8868808 ], [ 72.5555145, 21.8868727 ], [ 72.5555234, 21.8863583 ], [ 72.554972, 21.8863501 ], [ 72.5549807, 21.8858355 ], [ 72.5544251, 21.8860846 ], [ 72.5544164, 21.886599 ], [ 72.5530405, 21.8864495 ], [ 72.550004, 21.8866616 ], [ 72.5497239, 21.8869149 ], [ 72.5469698, 21.8867455 ], [ 72.5469741, 21.8864883 ], [ 72.5527713, 21.88606 ], [ 72.5541452, 21.8863377 ], [ 72.5540155, 21.8858211 ], [ 72.5537443, 21.8855599 ], [ 72.553482, 21.8847841 ], [ 72.5530777, 21.8842634 ], [ 72.5527999, 21.8843874 ], [ 72.5503236, 21.8840933 ], [ 72.5492365, 21.883177 ], [ 72.5489785, 21.8821437 ], [ 72.5484272, 21.8821356 ], [ 72.5480397, 21.880586 ], [ 72.5482043, 21.8790445 ], [ 72.5455434, 21.8789164 ], [ 72.5453143, 21.878744 ], [ 72.5450792, 21.8789094 ], [ 72.5437987, 21.8787215 ], [ 72.5437901, 21.879236 ], [ 72.5435166, 21.8791027 ], [ 72.5421363, 21.8792112 ], [ 72.5421231, 21.8799831 ], [ 72.5415763, 21.8797175 ], [ 72.5417048, 21.8802341 ], [ 72.5418409, 21.8803643 ], [ 72.5421165, 21.8803685 ], [ 72.5426721, 21.8801194 ], [ 72.5432212, 21.8802568 ], [ 72.54323, 21.8797423 ], [ 72.5440524, 21.8800118 ], [ 72.5440613, 21.8794974 ], [ 72.5445162, 21.8795917 ], [ 72.5444478, 21.881047 ], [ 72.5445839, 21.8811772 ], [ 72.5448594, 21.8811814 ], [ 72.5452384, 21.8806317 ], [ 72.5454217, 21.8805469 ], [ 72.5454393, 21.879518 ], [ 72.5462707, 21.879273 ], [ 72.5465241, 21.8805633 ], [ 72.5467953, 21.8808247 ], [ 72.5473467, 21.8808328 ], [ 72.5472446, 21.8812575 ], [ 72.5465111, 21.881335 ], [ 72.546644, 21.8815943 ], [ 72.5466351, 21.882109 ], [ 72.5464933, 21.8823641 ], [ 72.5470424, 21.8825006 ], [ 72.5471775, 21.8826315 ], [ 72.5473072, 21.8831481 ], [ 72.5478583, 21.8831564 ], [ 72.5477608, 21.8833239 ], [ 72.5473026, 21.8834055 ], [ 72.5472939, 21.88392 ], [ 72.547845, 21.8839281 ], [ 72.5472807, 21.8846916 ], [ 72.5464625, 21.8841649 ], [ 72.5464714, 21.8836504 ], [ 72.5461958, 21.8836463 ], [ 72.546187, 21.8841607 ], [ 72.5453557, 21.8844057 ], [ 72.5452448, 21.8853448 ], [ 72.5450624, 21.8854306 ], [ 72.5450713, 21.884916 ], [ 72.54452, 21.8849079 ], [ 72.5444179, 21.8853325 ], [ 72.5436842, 21.88541 ], [ 72.5436755, 21.8859245 ], [ 72.5432195, 21.8858292 ], [ 72.5431286, 21.885659 ], [ 72.542853, 21.885655 ], [ 72.5428485, 21.8859122 ], [ 72.5431199, 21.8861736 ], [ 72.5425706, 21.8860362 ], [ 72.5420261, 21.8856425 ], [ 72.5420393, 21.8848708 ], [ 72.540939, 21.8847253 ], [ 72.5403966, 21.8842025 ], [ 72.5387583, 21.8832779 ], [ 72.5388594, 21.8828523 ], [ 72.5390428, 21.8827674 ], [ 72.5391977, 21.8817406 ], [ 72.5383841, 21.8809564 ], [ 72.5383478, 21.8805289 ], [ 72.5385311, 21.8804441 ], [ 72.5385357, 21.8801868 ], [ 72.5382599, 21.8801827 ], [ 72.5376976, 21.8808171 ], [ 72.5374198, 21.8809421 ], [ 72.5373223, 21.8811093 ], [ 72.5368641, 21.881191 ], [ 72.5370201, 21.8826487 ], [ 72.5365576, 21.8829876 ], [ 72.5367179, 21.8841882 ], [ 72.5362643, 21.8840126 ], [ 72.5362731, 21.8834981 ], [ 72.5351707, 21.8834815 ], [ 72.5355748, 21.8840022 ], [ 72.5355659, 21.8845166 ], [ 72.5359711, 21.8850373 ], [ 72.5354198, 21.8850292 ], [ 72.5356778, 21.8860623 ], [ 72.5365067, 21.8859457 ], [ 72.5366419, 21.8860766 ], [ 72.5364826, 21.8873609 ], [ 72.5348265, 21.8874643 ], [ 72.5340106, 21.8868092 ], [ 72.5340195, 21.8862947 ], [ 72.5336099, 21.8860313 ], [ 72.5335693, 21.885861 ], [ 72.5337526, 21.8857761 ], [ 72.5337572, 21.8855189 ], [ 72.5334816, 21.8855147 ], [ 72.5332015, 21.8857678 ], [ 72.5330993, 21.8861925 ], [ 72.5329171, 21.8862783 ], [ 72.5329082, 21.8867928 ], [ 72.53153, 21.886772 ], [ 72.5317923, 21.887548 ], [ 72.531241, 21.8875397 ], [ 72.5315079, 21.8880583 ], [ 72.5304053, 21.8880417 ], [ 72.5306721, 21.8885605 ], [ 72.5301208, 21.8885522 ], [ 72.5301297, 21.8880377 ], [ 72.5281979, 21.8881367 ], [ 72.5265241, 21.88927 ], [ 72.5265109, 21.8900419 ], [ 72.5256818, 21.8901575 ], [ 72.525135, 21.889892 ], [ 72.5247277, 21.8895004 ], [ 72.5244926, 21.8896656 ], [ 72.5234856, 21.8896098 ], [ 72.5221163, 21.8890746 ], [ 72.5218451, 21.8888132 ], [ 72.5201936, 21.8886601 ], [ 72.5201847, 21.8891747 ], [ 72.5242992, 21.890394 ], [ 72.5248415, 21.8909169 ], [ 72.5259441, 21.8909334 ], [ 72.5266814, 21.8906465 ], [ 72.5267687, 21.8910749 ], [ 72.5259375, 21.8913197 ], [ 72.5263238, 21.8928695 ], [ 72.5279598, 21.8939234 ], [ 72.5291964, 21.8941991 ], [ 72.5300188, 21.8944688 ], [ 72.5305612, 21.8949916 ], [ 72.5305568, 21.8952488 ], [ 72.5300055, 21.8952405 ], [ 72.5291875, 21.8947138 ], [ 72.5286406, 21.8944482 ], [ 72.5282557, 21.8954311 ], [ 72.5279244, 21.8959812 ], [ 72.5276444, 21.8962344 ], [ 72.5275545, 21.8969559 ], [ 72.5280974, 21.8972356 ], [ 72.5285918, 21.8972779 ], [ 72.5288585, 21.8977965 ], [ 72.5288498, 21.898311 ], [ 72.5291254, 21.8983151 ], [ 72.5291165, 21.8988296 ], [ 72.5285652, 21.8988213 ], [ 72.5284897, 21.8977024 ], [ 72.5280361, 21.8975268 ], [ 72.5274892, 21.8972613 ], [ 72.527218, 21.8969999 ], [ 72.5272357, 21.895971 ], [ 72.5275115, 21.8959751 ], [ 72.5275202, 21.8954605 ], [ 72.5280804, 21.8949543 ], [ 72.5282385, 21.8943538 ], [ 72.527269, 21.8940411 ], [ 72.5261732, 21.8936391 ], [ 72.5260437, 21.8931226 ], [ 72.5255013, 21.8925998 ], [ 72.5253862, 21.8913114 ], [ 72.5245616, 21.89117 ], [ 72.5237434, 21.8906431 ], [ 72.5230097, 21.8906726 ], [ 72.5229188, 21.8905025 ], [ 72.5225092, 21.890239 ], [ 72.5223764, 21.8899797 ], [ 72.521825, 21.8899714 ], [ 72.5220874, 21.8907472 ], [ 72.5225468, 21.8905843 ], [ 72.522818, 21.8908457 ], [ 72.5229054, 21.8912741 ], [ 72.5237324, 21.8912866 ], [ 72.5237234, 21.8918011 ], [ 72.5245548, 21.8915563 ], [ 72.5251856, 21.8949109 ], [ 72.5258687, 21.8953066 ], [ 72.5269734, 21.8951949 ], [ 72.5266844, 21.8959627 ], [ 72.5253085, 21.8958128 ], [ 72.5250284, 21.8960659 ], [ 72.5247527, 21.8960617 ], [ 72.5244837, 21.8956722 ], [ 72.5242081, 21.895668 ], [ 72.5242036, 21.8959252 ], [ 72.524383, 21.8960156 ], [ 72.5244659, 21.8967013 ], [ 72.5233678, 21.8964274 ], [ 72.5236612, 21.8954025 ], [ 72.5231099, 21.8953942 ], [ 72.5232112, 21.8949687 ], [ 72.5244971, 21.8949005 ], [ 72.5245015, 21.8946433 ], [ 72.5228521, 21.8943611 ], [ 72.5228609, 21.8938466 ], [ 72.5206602, 21.8935561 ], [ 72.5209226, 21.894332 ], [ 72.5219245, 21.894692 ], [ 72.5220118, 21.8951203 ], [ 72.5209048, 21.8953611 ], [ 72.5209003, 21.8956183 ], [ 72.5222718, 21.8960245 ], [ 72.5226782, 21.896417 ], [ 72.5228077, 21.8969336 ], [ 72.5222607, 21.896668 ], [ 72.5223803, 21.897699 ], [ 72.5229139, 21.8987364 ], [ 72.5235967, 21.8991322 ], [ 72.5255285, 21.899033 ], [ 72.5251057, 21.8995412 ], [ 72.5249594, 21.9000538 ], [ 72.5246839, 21.9000496 ], [ 72.5246927, 21.8995351 ], [ 72.5230411, 21.8993811 ], [ 72.5224941, 21.8991156 ], [ 72.5222252, 21.898726 ], [ 72.5219496, 21.8987219 ], [ 72.5219451, 21.8989791 ], [ 72.5222163, 21.8992405 ], [ 72.5213892, 21.899228 ], [ 72.5215449, 21.9006858 ], [ 72.5196954, 21.9015183 ], [ 72.5200904, 21.9025535 ], [ 72.5203616, 21.9028149 ], [ 72.5204911, 21.9033314 ], [ 72.5196686, 21.9030617 ], [ 72.5196774, 21.9025472 ], [ 72.5191261, 21.9025389 ], [ 72.5194151, 21.9017714 ], [ 72.5185771, 21.9024015 ], [ 72.5177479, 21.9025181 ], [ 72.5179169, 21.9032042 ], [ 72.5171787, 21.9035389 ], [ 72.5171698, 21.9040534 ], [ 72.5176249, 21.9041477 ], [ 72.5178362, 21.9053499 ], [ 72.5176944, 21.9056051 ], [ 72.5168674, 21.9055926 ], [ 72.5171652, 21.9043106 ], [ 72.5167094, 21.9042152 ], [ 72.5166185, 21.9040451 ], [ 72.5163429, 21.9040409 ], [ 72.5163384, 21.9042981 ], [ 72.5165177, 21.9043883 ], [ 72.5163295, 21.9048126 ], [ 72.516056, 21.9046793 ], [ 72.5155047, 21.904671 ], [ 72.5152269, 21.904796 ], [ 72.5150796, 21.9053083 ], [ 72.5147993, 21.9055614 ], [ 72.5147861, 21.9063331 ], [ 72.5142257, 21.9068392 ], [ 72.5142214, 21.9070965 ], [ 72.5149042, 21.9074924 ], [ 72.5156238, 21.9082346 ], [ 72.5154355, 21.9086587 ], [ 72.5146196, 21.9080027 ], [ 72.5137948, 21.9078621 ], [ 72.5136882, 21.9085438 ], [ 72.5132301, 21.9086255 ], [ 72.5132212, 21.9091399 ], [ 72.5134006, 21.9092303 ], [ 72.5133947, 21.9095686 ], [ 72.51321, 21.9097825 ], [ 72.512661, 21.9096461 ], [ 72.5125047, 21.9106729 ], [ 72.5133229, 21.9112 ], [ 72.5131766, 21.9117124 ], [ 72.5104242, 21.9114134 ], [ 72.5105527, 21.91193 ], [ 72.5106888, 21.9120602 ], [ 72.5112378, 21.9121976 ], [ 72.5112335, 21.9124548 ], [ 72.5101307, 21.9124382 ], [ 72.5101127, 21.9134671 ], [ 72.5095614, 21.9134588 ], [ 72.509557, 21.913716 ], [ 72.5103839, 21.9137287 ], [ 72.5095346, 21.9150023 ], [ 72.5084274, 21.9152427 ], [ 72.5086897, 21.9160188 ], [ 72.5100613, 21.9164249 ], [ 72.5106149, 21.9163051 ], [ 72.5107795, 21.9172484 ], [ 72.5103148, 21.9177154 ], [ 72.5097655, 21.917579 ], [ 72.5096361, 21.9170622 ], [ 72.509232, 21.9165416 ], [ 72.5084006, 21.9167863 ], [ 72.508396, 21.9170435 ], [ 72.5094943, 21.9173174 ], [ 72.5087912, 21.9180787 ], [ 72.5086315, 21.9193629 ], [ 72.5091828, 21.9193713 ], [ 72.5093112, 21.9198878 ], [ 72.5094472, 21.920018 ], [ 72.5099965, 21.9201554 ], [ 72.5101248, 21.9206721 ], [ 72.5102609, 21.9208024 ], [ 72.5121976, 21.9204461 ], [ 72.5141295, 21.9203463 ], [ 72.5149545, 21.9204879 ], [ 72.5154969, 21.9210106 ], [ 72.5154924, 21.9212679 ], [ 72.5148523, 21.9209124 ], [ 72.5121869, 21.9209575 ], [ 72.5105278, 21.921321 ], [ 72.5102475, 21.9215741 ], [ 72.5096962, 21.9215657 ], [ 72.5083244, 21.9211594 ], [ 72.5087196, 21.9221947 ], [ 72.5087016, 21.9232236 ], [ 72.5089683, 21.9237423 ], [ 72.5089594, 21.9242567 ], [ 72.5086791, 21.9245098 ], [ 72.5086614, 21.9255387 ], [ 72.5083766, 21.926049 ], [ 72.5083677, 21.9265637 ], [ 72.508083, 21.927074 ], [ 72.5076207, 21.9298972 ], [ 72.5081721, 21.9299057 ], [ 72.5081632, 21.9304202 ], [ 72.5089902, 21.9304327 ], [ 72.5089814, 21.9309471 ], [ 72.5095327, 21.9309554 ], [ 72.5096567, 21.9317294 ], [ 72.5100594, 21.9323782 ], [ 72.5111533, 21.9329095 ], [ 72.511696, 21.9334323 ], [ 72.513617, 21.933976 ], [ 72.5137927, 21.9342766 ], [ 72.5119581, 21.9342081 ], [ 72.5116869, 21.9339468 ], [ 72.5108642, 21.933677 ], [ 72.5094856, 21.9336561 ], [ 72.5092144, 21.9333947 ], [ 72.5081116, 21.933378 ], [ 72.5078336, 21.9335028 ], [ 72.5079575, 21.9342767 ], [ 72.5073837, 21.9355546 ], [ 72.5061821, 21.9411972 ], [ 72.5062936, 21.9427426 ], [ 72.5068451, 21.9427511 ], [ 72.5068315, 21.9435228 ], [ 72.5076565, 21.9436634 ], [ 72.5079256, 21.9440539 ], [ 72.5073741, 21.9440456 ], [ 72.5071908, 21.946616 ], [ 72.5073268, 21.9467462 ], [ 72.5078784, 21.9467545 ], [ 72.5081475, 21.947145 ], [ 72.507596, 21.9471367 ], [ 72.5074397, 21.9481635 ], [ 72.5078358, 21.9491989 ], [ 72.5083873, 21.9492072 ], [ 72.5083828, 21.9494644 ], [ 72.5078313, 21.9494561 ], [ 72.5078268, 21.9497133 ], [ 72.510035, 21.9496177 ], [ 72.5104414, 21.9500102 ], [ 72.5105708, 21.950527 ], [ 72.5100171, 21.9506466 ], [ 72.5078133, 21.950485 ], [ 72.5079328, 21.9515162 ], [ 72.5077908, 21.9517713 ], [ 72.5091653, 21.9520494 ], [ 72.5091562, 21.9525638 ], [ 72.50971, 21.9524432 ], [ 72.5101165, 21.9528358 ], [ 72.5102458, 21.9533523 ], [ 72.5132747, 21.9536557 ], [ 72.5143688, 21.9541868 ], [ 72.5149292, 21.9536806 ], [ 72.5149381, 21.9531662 ], [ 72.5143866, 21.9531578 ], [ 72.5142662, 21.9521267 ], [ 72.5149762, 21.9509791 ], [ 72.5155298, 21.9508592 ], [ 72.5156763, 21.9503468 ], [ 72.5159985, 21.950182 ], [ 72.5165413, 21.9493065 ], [ 72.517496, 21.9488305 ], [ 72.5174869, 21.949345 ], [ 72.5170309, 21.9492497 ], [ 72.5163241, 21.9504859 ], [ 72.5148222, 21.9518777 ], [ 72.5146757, 21.9523903 ], [ 72.5149515, 21.9523945 ], [ 72.5149471, 21.9526517 ], [ 72.5152229, 21.9526559 ], [ 72.5154807, 21.9536889 ], [ 72.5153289, 21.9544585 ], [ 72.5154627, 21.954718 ], [ 72.5143575, 21.9548294 ], [ 72.5132656, 21.9541701 ], [ 72.5107861, 21.9540034 ], [ 72.509672, 21.9546302 ], [ 72.5100672, 21.9556655 ], [ 72.5100626, 21.9559227 ], [ 72.5097778, 21.956433 ], [ 72.5100585, 21.9586645 ], [ 72.510116, 21.9590349 ], [ 72.5101883, 21.9591846 ], [ 72.5101215, 21.9593204 ], [ 72.5099574, 21.9595874 ], [ 72.5098023, 21.9601717 ], [ 72.5095826, 21.9608398 ], [ 72.5094473, 21.9615525 ], [ 72.5094279, 21.9622494 ], [ 72.509381, 21.9627389 ], [ 72.5094189, 21.9630003 ], [ 72.5092724, 21.9637473 ], [ 72.509228, 21.9642722 ], [ 72.5093631, 21.9644033 ], [ 72.5092167, 21.9649157 ], [ 72.5103176, 21.9650607 ], [ 72.5104947, 21.9652799 ], [ 72.5104482, 21.9654491 ], [ 72.5096075, 21.9662081 ], [ 72.5101411, 21.9672455 ], [ 72.510562, 21.9668654 ], [ 72.5113871, 21.9670072 ], [ 72.5116136, 21.9698409 ], [ 72.5129969, 21.9696046 ], [ 72.5132951, 21.9683226 ], [ 72.5141337, 21.9676916 ], [ 72.5160664, 21.9675927 ], [ 72.5162127, 21.9670802 ], [ 72.5165351, 21.9669153 ], [ 72.5163376, 21.9678541 ], [ 72.5136744, 21.9682256 ], [ 72.5133832, 21.9711544 ], [ 72.5135709, 21.971433 ], [ 72.5139251, 21.9720641 ], [ 72.5143267, 21.9724551 ], [ 72.5141792, 21.9729675 ], [ 72.513757, 21.9734757 ], [ 72.5129252, 21.9737205 ], [ 72.5130581, 21.9739798 ], [ 72.5130358, 21.9752661 ], [ 72.5131719, 21.9753963 ], [ 72.5137122, 21.9760482 ], [ 72.5146591, 21.9770919 ], [ 72.5147886, 21.9776084 ], [ 72.5153403, 21.9776167 ], [ 72.5154686, 21.9781332 ], [ 72.5156049, 21.9782637 ], [ 72.5179929, 21.9782591 ], [ 72.5180847, 21.9784302 ], [ 72.5158672, 21.9790395 ], [ 72.5153089, 21.9794175 ], [ 72.5156818, 21.9817388 ], [ 72.5155175, 21.9832803 ], [ 72.516345, 21.9832928 ], [ 72.5160556, 21.9840603 ], [ 72.5166073, 21.9840686 ], [ 72.5164644, 21.9843238 ], [ 72.516491199776951, 21.984775338671877 ], [ 72.5165714, 21.9861266 ], [ 72.5168494, 21.9860017 ], [ 72.5165648, 21.986512 ], [ 72.5162911, 21.9863797 ], [ 72.5165446, 21.9876702 ], [ 72.5170963, 21.9876785 ], [ 72.5170828, 21.9884502 ], [ 72.5176343, 21.9884585 ], [ 72.5177629, 21.988975 ], [ 72.5185814, 21.9895022 ], [ 72.5187109, 21.9900187 ], [ 72.5170469, 21.990508 ], [ 72.5173093, 21.9912841 ], [ 72.5167555, 21.9914039 ], [ 72.5164752, 21.991657 ], [ 72.5161881, 21.9922963 ], [ 72.5161836, 21.9925536 ], [ 72.5157381, 21.9943479 ], [ 72.5158719, 21.9946072 ], [ 72.5150445, 21.9945948 ], [ 72.5154442, 21.9953727 ], [ 72.5154308, 21.9961444 ], [ 72.515146, 21.9966547 ], [ 72.5151414, 21.9969119 ], [ 72.5156797, 21.9976921 ], [ 72.5156618, 21.998721 ], [ 72.5157778, 22.0000094 ], [ 72.5154975, 22.0002625 ], [ 72.515626, 22.000779 ], [ 72.5158972, 22.0010404 ], [ 72.5161507, 22.0023307 ], [ 72.5162758, 22.0031047 ], [ 72.5161193, 22.0041315 ], [ 72.5163818, 22.0049074 ], [ 72.5163593, 22.0061937 ], [ 72.5166308, 22.0064551 ], [ 72.5164799, 22.0072247 ], [ 72.5168887, 22.0074882 ], [ 72.5168394, 22.0103179 ], [ 72.5171063, 22.0108365 ], [ 72.5173552, 22.0123842 ], [ 72.5176266, 22.0126456 ], [ 72.5176041, 22.0139317 ], [ 72.5180118, 22.0143235 ], [ 72.518414, 22.0149733 ], [ 72.5179916, 22.0154815 ], [ 72.5182584, 22.0160002 ], [ 72.5181112, 22.0165125 ], [ 72.5178307, 22.0167656 ], [ 72.5179556, 22.0175394 ], [ 72.5185075, 22.0175479 ], [ 72.5183601, 22.0180603 ], [ 72.5177948, 22.0188236 ], [ 72.5177814, 22.0195953 ], [ 72.5185913, 22.0206367 ], [ 72.5185867, 22.0208941 ], [ 72.5183019, 22.0214044 ], [ 72.5186848, 22.0232113 ], [ 72.5186714, 22.0239829 ], [ 72.5186817, 22.0254005 ], [ 72.5190626, 22.0267563 ], [ 72.519522, 22.0283171 ], [ 72.5200419, 22.0305595 ], [ 72.5204122, 22.0321718 ], [ 72.5206914, 22.0334357 ], [ 72.521153, 22.0355504 ], [ 72.5214629, 22.0380379 ], [ 72.5219347, 22.0380525 ], [ 72.523122, 22.037816 ], [ 72.5235015, 22.0372666 ], [ 72.5228617, 22.0369121 ], [ 72.5228662, 22.0366546 ], [ 72.5231467, 22.0364018 ], [ 72.5234225, 22.0364059 ], [ 72.5234181, 22.0366631 ], [ 72.5230458, 22.036745 ], [ 72.5230443, 22.0368263 ], [ 72.523685, 22.0371818 ], [ 72.523667, 22.0382107 ], [ 72.5227782, 22.0382483 ], [ 72.5221208, 22.0385768 ], [ 72.5215473, 22.0391904 ], [ 72.5223465, 22.0445488 ], [ 72.5227089, 22.0468901 ], [ 72.5229141, 22.0486446 ], [ 72.5231938, 22.0502521 ], [ 72.5233093, 22.0508134 ], [ 72.5236221, 22.052441 ], [ 72.5239397, 22.0544609 ], [ 72.5241169, 22.0557572 ], [ 72.5243593, 22.0577362 ], [ 72.5248442, 22.0599226 ], [ 72.5250773, 22.0615646 ], [ 72.5252825, 22.0634744 ], [ 72.5255529, 22.0655656 ], [ 72.5259072, 22.0679161 ], [ 72.5266625, 22.0722886 ], [ 72.5270261, 22.0749759 ], [ 72.5273712, 22.0770411 ], [ 72.5277814, 22.0787174 ], [ 72.5279679, 22.0796679 ], [ 72.528257, 22.0809121 ], [ 72.5288258, 22.0833401 ], [ 72.5294692, 22.0859322 ], [ 72.5300659, 22.0876084 ], [ 72.5305881, 22.0895783 ], [ 72.5310543, 22.0910039 ], [ 72.5325551, 22.090579 ], [ 72.5314366, 22.0923604 ], [ 72.5320614, 22.0940192 ], [ 72.5324157, 22.0951942 ], [ 72.5326115, 22.0956435 ], [ 72.5329752, 22.0959632 ], [ 72.5336745, 22.0963951 ], [ 72.5340661, 22.0970086 ], [ 72.5343086, 22.0973196 ], [ 72.5344391, 22.0976306 ], [ 72.5347282, 22.0980021 ], [ 72.5349706, 22.0980712 ], [ 72.5352503, 22.097838 ], [ 72.5353529, 22.0974578 ], [ 72.5353809, 22.097285 ], [ 72.5353809, 22.0971295 ], [ 72.5354648, 22.0965939 ], [ 72.5356047, 22.0963088 ], [ 72.5360709, 22.0960582 ], [ 72.536462, 22.0961696 ], [ 72.5381272, 22.0956801 ], [ 72.538953, 22.0958217 ], [ 72.5391853, 22.096542 ], [ 72.5394827, 22.0971163 ], [ 72.5400431, 22.0972332 ], [ 72.5400259, 22.0976391 ], [ 72.539064, 22.0971986 ], [ 72.5387843, 22.0967235 ], [ 72.5387004, 22.0962396 ], [ 72.5383274, 22.0960064 ], [ 72.5374602, 22.0961273 ], [ 72.5361828, 22.0964643 ], [ 72.535903, 22.0968876 ], [ 72.5356793, 22.097838 ], [ 72.5353995, 22.0982699 ], [ 72.5351571, 22.0983736 ], [ 72.5346349, 22.0983477 ], [ 72.5344484, 22.0982095 ], [ 72.5342806, 22.0978984 ], [ 72.533833, 22.0973282 ], [ 72.5336838, 22.0970431 ], [ 72.5336652, 22.0969394 ], [ 72.5335719, 22.0967407 ], [ 72.5333481, 22.0964815 ], [ 72.5330311, 22.0963865 ], [ 72.5327887, 22.0965334 ], [ 72.5329192, 22.097069 ], [ 72.5330777, 22.0982095 ], [ 72.5332735, 22.0987192 ], [ 72.5332922, 22.0992376 ], [ 72.5335253, 22.0995918 ], [ 72.5340754, 22.1015097 ], [ 72.5351278, 22.1047663 ], [ 72.5357872, 22.1072098 ], [ 72.536763, 22.1110216 ], [ 72.537607, 22.1141735 ], [ 72.5379498, 22.1157617 ], [ 72.5385564, 22.1169589 ], [ 72.5389784, 22.1189624 ], [ 72.5400861, 22.1229937 ], [ 72.5407982, 22.1254369 ], [ 72.5416685, 22.1290038 ], [ 72.5421168, 22.1316179 ], [ 72.5428026, 22.1335235 ], [ 72.54333, 22.1348427 ], [ 72.5433511, 22.1364404 ], [ 72.5441526, 22.1379963 ], [ 72.5447026, 22.1381327 ], [ 72.5453679, 22.1395586 ], [ 72.5454841, 22.1408468 ], [ 72.5455771, 22.1434212 ], [ 72.5454352, 22.1436764 ], [ 72.5458309, 22.1447115 ], [ 72.5461027, 22.1449729 ], [ 72.5483586, 22.1490898 ], [ 72.5486304, 22.1493512 ], [ 72.5492722, 22.1521913 ], [ 72.5498245, 22.1521996 ], [ 72.5499352, 22.1537452 ], [ 72.550207, 22.1540066 ], [ 72.5503278, 22.1550376 ], [ 72.5508778, 22.1551741 ], [ 72.5510133, 22.1553051 ], [ 72.5511295, 22.1565934 ], [ 72.553901, 22.1561354 ], [ 72.5530511, 22.1588176 ], [ 72.5536033, 22.1588259 ], [ 72.5538528, 22.1603735 ], [ 72.5544052, 22.1603818 ], [ 72.5545294, 22.1611556 ], [ 72.5550684, 22.1619356 ], [ 72.5553268, 22.1629688 ], [ 72.5558658, 22.1637488 ], [ 72.5559866, 22.1647798 ], [ 72.5565389, 22.1647881 ], [ 72.5569259, 22.1663377 ], [ 72.5571977, 22.1665991 ], [ 72.5580297, 22.1667346 ], [ 72.5583573, 22.1670848 ], [ 72.5586919, 22.1677398 ], [ 72.5591307, 22.1685117 ], [ 72.5595028, 22.1690581 ], [ 72.5599556, 22.1702364 ], [ 72.5607371, 22.1714541 ], [ 72.5610838, 22.1722766 ], [ 72.5615193, 22.1727326 ], [ 72.5617166, 22.1733757 ], [ 72.5621002, 22.1740343 ], [ 72.5623949, 22.1747385 ], [ 72.5626879, 22.1752362 ], [ 72.5631521, 22.1761133 ], [ 72.5636415, 22.1765762 ], [ 72.5642013, 22.1775902 ], [ 72.5646958, 22.1785243 ], [ 72.5651904, 22.1792448 ], [ 72.5655134, 22.1798737 ], [ 72.5660409, 22.1801484 ], [ 72.5662519, 22.1803377 ], [ 72.566364, 22.180991 ], [ 72.566964, 22.1819617 ], [ 72.5673002, 22.1826455 ], [ 72.5675772, 22.1831767 ], [ 72.5678145, 22.1835614 ], [ 72.5680783, 22.1838788 ], [ 72.5683587, 22.1842635 ], [ 72.5690409, 22.1850388 ], [ 72.5696145, 22.1855089 ], [ 72.5701947, 22.1862843 ], [ 72.5706431, 22.1867971 ], [ 72.5711969, 22.1875542 ], [ 72.5716057, 22.1880792 ], [ 72.5722123, 22.1887508 ], [ 72.5725552, 22.1892453 ], [ 72.5731222, 22.1898131 ], [ 72.5735706, 22.1901611 ], [ 72.5745134, 22.1906312 ], [ 72.5754563, 22.191089 ], [ 72.576709, 22.192597 ], [ 72.5779222, 22.1943674 ], [ 72.5783837, 22.194868 ], [ 72.5788387, 22.1953442 ], [ 72.5791354, 22.1960096 ], [ 72.5794057, 22.1968582 ], [ 72.5798013, 22.1968765 ], [ 72.5799332, 22.1967727 ], [ 72.5801508, 22.1968704 ], [ 72.5803486, 22.1970413 ], [ 72.5805662, 22.1972611 ], [ 72.5808892, 22.1975663 ], [ 72.5811991, 22.1981829 ], [ 72.5810475, 22.1983966 ], [ 72.5813706, 22.1984515 ], [ 72.5815354, 22.1985797 ], [ 72.5815881, 22.1987201 ], [ 72.5817859, 22.1989521 ], [ 72.582142, 22.1993855 ], [ 72.5825574, 22.1995504 ], [ 72.5829991, 22.1997701 ], [ 72.583309, 22.1999227 ], [ 72.5835134, 22.2000509 ], [ 72.5835925, 22.2001608 ], [ 72.583556, 22.2003141 ], [ 72.5840277, 22.2004905 ], [ 72.5844233, 22.2005454 ], [ 72.5848519, 22.2009605 ], [ 72.5852673, 22.2013512 ], [ 72.5857222, 22.2018457 ], [ 72.5860651, 22.2024867 ], [ 72.5864277, 22.2029384 ], [ 72.5872255, 22.2033901 ], [ 72.5878189, 22.203909 ], [ 72.5883134, 22.2042142 ], [ 72.5886365, 22.2044706 ], [ 72.5901596, 22.2048552 ], [ 72.5914255, 22.2049407 ], [ 72.5917288, 22.2054839 ], [ 72.5924738, 22.2060822 ], [ 72.5932057, 22.2064484 ], [ 72.5932321, 22.2066499 ], [ 72.5933903, 22.2070039 ], [ 72.5938359, 22.2074552 ], [ 72.5951414, 22.2082915 ], [ 72.596137, 22.2089813 ], [ 72.5969876, 22.2091766 ], [ 72.5982865, 22.2097932 ], [ 72.5995524, 22.2104158 ], [ 72.6005414, 22.210898 ], [ 72.601814, 22.2114291 ], [ 72.6028953, 22.2116915 ], [ 72.6047282, 22.2126255 ], [ 72.606438202500911, 22.213125060156255 ], [ 72.6064623, 22.2131321 ], [ 72.6069964, 22.2132237 ], [ 72.6076293, 22.2134434 ], [ 72.6080381, 22.2136693 ], [ 72.6089168, 22.2139739 ], [ 72.6102403, 22.2142064 ], [ 72.6106689, 22.2143285 ], [ 72.6111436, 22.2143285 ], [ 72.6115524, 22.2143651 ], [ 72.611981, 22.2145238 ], [ 72.6130491, 22.2150732 ], [ 72.6145392, 22.2155859 ], [ 72.6151128, 22.2156592 ], [ 72.6159238, 22.2159888 ], [ 72.6180931, 22.2164161 ], [ 72.6208425, 22.2167762 ], [ 72.6210007, 22.2167152 ], [ 72.6220161, 22.2168616 ], [ 72.622926, 22.2168067 ], [ 72.6234073, 22.2165565 ], [ 72.6236974, 22.2164466 ], [ 72.6238887, 22.2165687 ], [ 72.6242843, 22.2166663 ], [ 72.6246403, 22.2164893 ], [ 72.6250952, 22.2164527 ], [ 72.627548, 22.2166053 ], [ 72.629526, 22.2166907 ], [ 72.6299414, 22.2166602 ], [ 72.6303172, 22.2166297 ], [ 72.6306601, 22.2166663 ], [ 72.6309568, 22.2166236 ], [ 72.6314315, 22.2163611 ], [ 72.6316689, 22.2162207 ], [ 72.6318337, 22.2164649 ], [ 72.6319194, 22.2165626 ], [ 72.632104, 22.2166114 ], [ 72.6329084, 22.2168372 ], [ 72.633093, 22.2168983 ], [ 72.6334952, 22.2167518 ], [ 72.634115, 22.2168739 ], [ 72.6347018, 22.2167274 ], [ 72.6363238, 22.2166663 ], [ 72.636693, 22.2165748 ], [ 72.6374579, 22.2165442 ], [ 72.6378073, 22.2165748 ], [ 72.6387304, 22.2162818 ], [ 72.6389018, 22.2161475 ], [ 72.6394491, 22.2158301 ], [ 72.6400359, 22.215647 ], [ 72.6403656, 22.2156103 ], [ 72.6406425, 22.2157019 ], [ 72.6408271, 22.2159461 ], [ 72.6411106, 22.2158789 ], [ 72.6414007, 22.215708 ], [ 72.641704, 22.2159644 ], [ 72.6418359, 22.2160193 ], [ 72.6429634, 22.2160987 ], [ 72.6446711, 22.2160193 ], [ 72.6455546, 22.2158484 ], [ 72.6458513, 22.2157507 ], [ 72.6457458, 22.2154883 ], [ 72.6458579, 22.2153723 ], [ 72.646115, 22.2153906 ], [ 72.6463524, 22.21547 ], [ 72.646893, 22.215354 ], [ 72.6472161, 22.2151709 ], [ 72.6474271, 22.215299 ], [ 72.6478029, 22.215415 ], [ 72.6493919, 22.2152624 ], [ 72.650614, 22.2149276 ], [ 72.6510057, 22.214591 ], [ 72.6512901, 22.2145478 ], [ 72.6518309, 22.2143967 ], [ 72.6521386, 22.2141637 ], [ 72.6521619, 22.2140083 ], [ 72.652423, 22.2138097 ], [ 72.652213539499328, 22.213325060156254 ], [ 72.6522085, 22.2133134 ], [ 72.6521059, 22.213145 ], [ 72.652081131155853, 22.213125060156255 ], [ 72.6519987, 22.2130587 ], [ 72.6517703, 22.2127911 ], [ 72.6519288, 22.2126746 ], [ 72.6521386, 22.2127134 ], [ 72.6524137, 22.2127566 ], [ 72.6527027, 22.2125796 ], [ 72.652782, 22.2122947 ], [ 72.652796, 22.2121221 ], [ 72.6532715, 22.2117077 ], [ 72.6536025, 22.2115782 ], [ 72.6537284, 22.2118761 ], [ 72.6538729, 22.2120617 ], [ 72.6539569, 22.2123336 ], [ 72.6539802, 22.2126228 ], [ 72.653845, 22.2127566 ], [ 72.6537144, 22.2128559 ], [ 72.6536491, 22.2129465 ], [ 72.653526, 22.2130528 ], [ 72.6535062, 22.2132237 ], [ 72.65363642400942, 22.213325060156254 ], [ 72.6537963, 22.2134495 ], [ 72.6539743, 22.2135594 ], [ 72.6542776, 22.2136265 ], [ 72.655307797045552, 22.213125060156255 ], [ 72.6563216, 22.2126316 ], [ 72.6564403, 22.2124118 ], [ 72.65646, 22.2122043 ], [ 72.6566051, 22.2118503 ], [ 72.656704, 22.2121188 ], [ 72.6567633, 22.2123142 ], [ 72.6572882, 22.2123107 ], [ 72.6585868, 22.211587 ], [ 72.6592534, 22.2111474 ], [ 72.6598379, 22.2106435 ], [ 72.6604235, 22.210115 ], [ 72.6609996, 22.2096283 ], [ 72.6616102, 22.2090497 ], [ 72.6624103, 22.2085072 ], [ 72.6630451, 22.2080588 ], [ 72.6634316, 22.2078308 ], [ 72.6639439, 22.2074096 ], [ 72.6647353, 22.2065918 ], [ 72.6647354, 22.2063028 ], [ 72.6643811, 22.20611 ], [ 72.6642625, 22.2058659 ], [ 72.6642361, 22.2056278 ], [ 72.6642229, 22.2052615 ], [ 72.6645064, 22.2051517 ], [ 72.6649284, 22.2051395 ], [ 72.664935, 22.204877 ], [ 72.6647372, 22.2046084 ], [ 72.664546, 22.2044435 ], [ 72.6645658, 22.2040712 ], [ 72.6648888, 22.2040345 ], [ 72.6650339, 22.2039979 ], [ 72.6650669, 22.2039674 ], [ 72.6650603, 22.2037415 ], [ 72.6648493, 22.2034913 ], [ 72.664691, 22.203302 ], [ 72.6646515, 22.2032349 ], [ 72.6650932, 22.2031189 ], [ 72.6659306, 22.2031799 ], [ 72.6666295, 22.2035523 ], [ 72.6667152, 22.2038697 ], [ 72.6667614, 22.2043337 ], [ 72.6668273, 22.2044313 ], [ 72.6669987, 22.2046938 ], [ 72.6674671, 22.2049254 ], [ 72.6684229, 22.2044252 ], [ 72.6692998, 22.2037049 ], [ 72.6706844, 22.2027465 ], [ 72.671357, 22.2023802 ], [ 72.6719701, 22.2019956 ], [ 72.672346, 22.2017393 ], [ 72.6729657, 22.2014096 ], [ 72.6735921, 22.2010189 ], [ 72.6740603, 22.2007137 ], [ 72.6747592, 22.2002619 ], [ 72.6754449, 22.1997247 ], [ 72.6763943, 22.199273 ], [ 72.6770273, 22.1990776 ], [ 72.6775482, 22.1988884 ], [ 72.6786295, 22.1986991 ], [ 72.6797306, 22.1984061 ], [ 72.6800324, 22.1979871 ], [ 72.6803066, 22.1981192 ], [ 72.6813262, 22.1978567 ], [ 72.6821306, 22.1975942 ], [ 72.6832317, 22.1971241 ], [ 72.6841811, 22.1965808 ], [ 72.6848866, 22.1960985 ], [ 72.6860141, 22.195427 ], [ 72.6869961, 22.194612 ], [ 72.6878141, 22.1940168 ], [ 72.6887833, 22.193272 ], [ 72.6894361, 22.1927714 ], [ 72.6897944, 22.1924647 ], [ 72.6903723, 22.1922463 ], [ 72.690458, 22.1919411 ], [ 72.6904448, 22.1918495 ], [ 72.6904778, 22.1917335 ], [ 72.6906558, 22.1916297 ], [ 72.6909196, 22.1910742 ], [ 72.6915064, 22.1904942 ], [ 72.6918492, 22.1902622 ], [ 72.6920466, 22.1899234 ], [ 72.6925679, 22.1895601 ], [ 72.6928251, 22.1892671 ], [ 72.6932866, 22.1888397 ], [ 72.6935635, 22.1886627 ], [ 72.6942097, 22.1885833 ], [ 72.6947174, 22.1883513 ], [ 72.6956735, 22.187787 ], [ 72.6962344, 22.1872803 ], [ 72.6969789, 22.1866724 ], [ 72.6976345, 22.1861427 ], [ 72.6980075, 22.1859031 ], [ 72.6984426, 22.1856406 ], [ 72.6987525, 22.1854086 ], [ 72.6991702, 22.1851349 ], [ 72.6997152, 22.1846699 ], [ 72.7003086, 22.184328 ], [ 72.7007067, 22.1841274 ], [ 72.7016866, 22.1837296 ], [ 72.7024053, 22.1835343 ], [ 72.7035495, 22.1835077 ], [ 72.7038852, 22.1834645 ], [ 72.7039551, 22.1834343 ], [ 72.7039761, 22.1833156 ], [ 72.7042069, 22.183294 ], [ 72.7042978, 22.1833588 ], [ 72.7043607, 22.1834473 ], [ 72.7044027, 22.1835422 ], [ 72.70468, 22.1836014 ], [ 72.7050492, 22.1837419 ], [ 72.7053327, 22.1838945 ], [ 72.7055305, 22.1838579 ], [ 72.7057283, 22.1839617 ], [ 72.7057943, 22.1841143 ], [ 72.7057877, 22.1843585 ], [ 72.7063613, 22.184792 ], [ 72.7070456, 22.185117 ], [ 72.7079833, 22.1854391 ], [ 72.7093943, 22.1854513 ], [ 72.7104228, 22.1854147 ], [ 72.7110031, 22.1853048 ], [ 72.7116888, 22.1851949 ], [ 72.7124866, 22.185024 ], [ 72.7138778, 22.1848958 ], [ 72.7158492, 22.184273 ], [ 72.7176954, 22.1839006 ], [ 72.7193042, 22.1836075 ], [ 72.7206128, 22.1833778 ], [ 72.7215195, 22.1831557 ], [ 72.7230228, 22.1828016 ], [ 72.7252288, 22.1818966 ], [ 72.726228, 22.1814613 ], [ 72.7275159, 22.1808676 ], [ 72.7282577, 22.1803468 ], [ 72.7291728, 22.1798685 ], [ 72.7300296, 22.1794092 ], [ 72.7307808, 22.1790139 ], [ 72.7314634, 22.178682 ], [ 72.7319534, 22.1784325 ], [ 72.7326214, 22.1780167 ], [ 72.7333738, 22.1776549 ], [ 72.7346105, 22.1770857 ], [ 72.7356299, 22.1767981 ], [ 72.7369418, 22.1762494 ], [ 72.7380993, 22.175752 ], [ 72.7389396, 22.1751834 ], [ 72.7396275, 22.174957 ], [ 72.7400327, 22.1746149 ], [ 72.740191, 22.1744964 ], [ 72.7402112, 22.1745151 ], [ 72.7404099, 22.1745463 ], [ 72.7406558, 22.1744839 ], [ 72.7407838, 22.1744215 ], [ 72.7412756, 22.1744309 ], [ 72.7419829, 22.174303 ], [ 72.7422456, 22.1740191 ], [ 72.7423568, 22.1737977 ], [ 72.7424612, 22.173648 ], [ 72.7425791, 22.1735949 ], [ 72.7426532, 22.1737977 ], [ 72.742825, 22.1739505 ], [ 72.7434818, 22.1740191 ], [ 72.7441285, 22.1738257 ], [ 72.7443239, 22.1737478 ], [ 72.7446135, 22.1735606 ], [ 72.7451019, 22.173414 ], [ 72.7456173, 22.1734015 ], [ 72.745843, 22.1734234 ], [ 72.746072, 22.1734764 ], [ 72.7465335, 22.1733142 ], [ 72.7469141, 22.1731395 ], [ 72.7472206, 22.1731239 ], [ 72.7474698, 22.1731894 ], [ 72.7477393, 22.1731707 ], [ 72.748002, 22.1731426 ], [ 72.7492416, 22.1731239 ], [ 72.750178, 22.1730709 ], [ 72.7514781, 22.1729649 ], [ 72.7528591, 22.1728494 ], [ 72.7529871, 22.1727153 ], [ 72.7530006, 22.1725718 ], [ 72.7531623, 22.172288 ], [ 72.7533273, 22.1720852 ], [ 72.7533879, 22.1719449 ], [ 72.7535968, 22.1719573 ], [ 72.7536035, 22.1721008 ], [ 72.753654, 22.1722506 ], [ 72.7539235, 22.1723285 ], [ 72.7543546, 22.1722537 ], [ 72.754742, 22.1722412 ], [ 72.7550216, 22.1723348 ], [ 72.7551529, 22.1724346 ], [ 72.7554864, 22.1723535 ], [ 72.7556582, 22.1723535 ], [ 72.7558434, 22.1724627 ], [ 72.756059, 22.1725188 ], [ 72.7564814, 22.1725562 ], [ 72.7566633, 22.1723753 ], [ 72.7570406, 22.172132 ], [ 72.7573707, 22.1720696 ], [ 72.7577951, 22.172157 ], [ 72.7580645, 22.1721819 ], [ 72.75823723281249, 22.172161902731915 ], [ 72.7586035, 22.1721195 ], [ 72.7586641, 22.171895 ], [ 72.7587853, 22.1716205 ], [ 72.7589874, 22.1714271 ], [ 72.7591626, 22.1717951 ], [ 72.7591895, 22.1721445 ], [ 72.7596678, 22.1726872 ], [ 72.7601125, 22.1739474 ], [ 72.7606604, 22.1749386 ], [ 72.7609371, 22.1757025 ], [ 72.7612051, 22.1762209 ], [ 72.7617494, 22.176743 ], [ 72.7618717, 22.1777741 ], [ 72.7624241, 22.1777817 ], [ 72.7620705, 22.1826662 ], [ 72.7626229, 22.1826738 ], [ 72.7632724, 22.1852561 ], [ 72.7640809, 22.1865539 ], [ 72.7648974, 22.1873372 ], [ 72.7631565, 22.1876971 ], [ 72.7637771, 22.1889844 ], [ 72.7643018, 22.1898564 ], [ 72.7647977, 22.1904465 ], [ 72.7652836, 22.1913976 ], [ 72.7656788, 22.1922217 ], [ 72.7664749, 22.1932658 ], [ 72.7670397, 22.1934263 ], [ 72.7673781, 22.1934067 ], [ 72.767701, 22.1935517 ], [ 72.7682516, 22.1936876 ], [ 72.7683871, 22.1938185 ], [ 72.7683188, 22.1942767 ], [ 72.7682393, 22.1944592 ], [ 72.767843, 22.1945555 ], [ 72.7678489, 22.1947497 ], [ 72.7675739, 22.1948203 ], [ 72.7675379, 22.1950935 ], [ 72.7676745, 22.1952236 ], [ 72.7682251, 22.1953602 ], [ 72.768985, 22.196229 ], [ 72.7693312, 22.1968102 ], [ 72.7700417, 22.1973872 ], [ 72.7701505, 22.1985783 ], [ 72.7707038, 22.1998691 ], [ 72.7761501, 22.2010011 ], [ 72.7786244, 22.2018068 ], [ 72.7794411, 22.20259 ], [ 72.7808165, 22.2029952 ], [ 72.7812103, 22.2042872 ], [ 72.7817548, 22.2048095 ], [ 72.7820149, 22.2058423 ], [ 72.7825594, 22.2063644 ], [ 72.7828195, 22.2073974 ], [ 72.7830918, 22.2076584 ], [ 72.7832102, 22.2089467 ], [ 72.7837628, 22.2089542 ], [ 72.7838883, 22.209728 ], [ 72.7841606, 22.209989 ], [ 72.7842912, 22.2105055 ], [ 72.7848418, 22.2106412 ], [ 72.785518, 22.2115515 ], [ 72.7856484, 22.212068 ], [ 72.7862052, 22.2118181 ], [ 72.78665026062302, 22.213125060156255 ], [ 72.7867335, 22.2133695 ], [ 72.7872842, 22.2135052 ], [ 72.7879644, 22.2141582 ], [ 72.7882326, 22.2146766 ], [ 72.7897307, 22.2161118 ], [ 72.7908238, 22.2168987 ], [ 72.7919172, 22.2176856 ], [ 72.7926014, 22.2180814 ], [ 72.792732, 22.2185978 ], [ 72.793559, 22.2187372 ], [ 72.7949285, 22.2195278 ], [ 72.7956048, 22.2204381 ], [ 72.7962901, 22.2208331 ], [ 72.7986042, 22.2230521 ], [ 72.7987348, 22.2235686 ], [ 72.7992876, 22.223576 ], [ 72.7996855, 22.2246108 ], [ 72.7998221, 22.224741 ], [ 72.8003729, 22.2248775 ], [ 72.800625, 22.226425 ], [ 72.8011778, 22.2264324 ], [ 72.8013035, 22.2272061 ], [ 72.801844, 22.2279856 ], [ 72.8023848, 22.2287648 ], [ 72.8022351, 22.2295348 ], [ 72.8027856, 22.2296705 ], [ 72.8031857, 22.230577 ], [ 72.8040028, 22.2313602 ], [ 72.804267, 22.2321356 ], [ 72.8045394, 22.2323967 ], [ 72.805068, 22.233948 ], [ 72.8053403, 22.234209 ], [ 72.8056008, 22.2352419 ], [ 72.8061455, 22.2357639 ], [ 72.8064097, 22.2365395 ], [ 72.8066821, 22.2368005 ], [ 72.8070731, 22.2383498 ], [ 72.8079022, 22.2383609 ], [ 72.808024, 22.2393919 ], [ 72.8085647, 22.2401714 ], [ 72.8088291, 22.2409468 ], [ 72.8092381, 22.2413381 ], [ 72.8097888, 22.2414745 ], [ 72.8100451, 22.2427646 ], [ 72.810598, 22.2427722 ], [ 72.8111268, 22.2443233 ], [ 72.8116775, 22.244459 ], [ 72.8118132, 22.24459 ], [ 72.8119438, 22.2451063 ], [ 72.8133298, 22.2448676 ], [ 72.8134755, 22.2443549 ], [ 72.8138966, 22.2439742 ], [ 72.8147336, 22.2434707 ], [ 72.8161236, 22.2429748 ], [ 72.8169606, 22.2424713 ], [ 72.8180682, 22.2423579 ], [ 72.8180761, 22.2418432 ], [ 72.81946, 22.2417329 ], [ 72.8197404, 22.2414792 ], [ 72.8211243, 22.2413696 ], [ 72.8211322, 22.240855 ], [ 72.8233532, 22.2402409 ], [ 72.8261249, 22.2397633 ], [ 72.8275146, 22.2392672 ], [ 72.8277951, 22.2390135 ], [ 72.8294571, 22.2387784 ], [ 72.8300139, 22.2385286 ], [ 72.8308431, 22.2385397 ], [ 72.8311234, 22.2382861 ], [ 72.8358296, 22.237834 ], [ 72.8377642, 22.2378599 ], [ 72.842198, 22.2371466 ], [ 72.8424724, 22.2372795 ], [ 72.8424802, 22.2367648 ], [ 72.8435837, 22.2369077 ], [ 72.8441405, 22.2366578 ], [ 72.8471846, 22.2364407 ], [ 72.8477412, 22.2361908 ], [ 72.849125, 22.2360808 ], [ 72.8491328, 22.2355664 ], [ 72.850795, 22.2353309 ], [ 72.8508028, 22.2348164 ], [ 72.8521885, 22.2345773 ], [ 72.8521965, 22.2340627 ], [ 72.8527512, 22.233941 ], [ 72.8535881, 22.2334373 ], [ 72.8541487, 22.23293 ], [ 72.8548449, 22.2325535 ], [ 72.8549914, 22.2320408 ], [ 72.8555442, 22.2320481 ], [ 72.855552, 22.2315335 ], [ 72.8566633, 22.2311617 ], [ 72.8570872, 22.2305244 ], [ 72.8583411, 22.2298971 ], [ 72.8591819, 22.229136 ], [ 72.8597385, 22.2288862 ], [ 72.8605794, 22.2281251 ], [ 72.8616905, 22.2277541 ], [ 72.8616984, 22.2272396 ], [ 72.8622532, 22.2271177 ], [ 72.8628135, 22.2266104 ], [ 72.8633683, 22.2264895 ], [ 72.863376, 22.2259748 ], [ 72.8647637, 22.2256066 ], [ 72.8653242, 22.2250994 ], [ 72.8661571, 22.2248529 ], [ 72.866994, 22.2243492 ], [ 72.8681014, 22.2242354 ], [ 72.8681091, 22.2237208 ], [ 72.8697672, 22.2237425 ], [ 72.869775, 22.2232279 ], [ 72.8750315, 22.2229102 ], [ 72.8769621, 22.2231927 ], [ 72.8786124, 22.2237291 ], [ 72.8791573, 22.2242509 ], [ 72.8802588, 22.2245225 ], [ 72.8809396, 22.2251753 ], [ 72.8812082, 22.2256934 ], [ 72.8818939, 22.226088 ], [ 72.8825707, 22.2269981 ], [ 72.8832564, 22.2273925 ], [ 72.8841627, 22.2278164 ], [ 72.8749069, 22.2429979 ], [ 72.8664469, 22.2422282 ], [ 72.8656196, 22.2420882 ], [ 72.8648022, 22.2413054 ], [ 72.8642515, 22.24117 ], [ 72.8637045, 22.2407763 ], [ 72.8628871, 22.2399935 ], [ 72.8623324, 22.2401154 ], [ 72.8620441, 22.2408835 ], [ 72.861215, 22.2408727 ], [ 72.8612072, 22.2413872 ], [ 72.8600997, 22.241501 ], [ 72.859549, 22.2413655 ], [ 72.8596828, 22.2416246 ], [ 72.8595333, 22.2423946 ], [ 72.8581475, 22.2426336 ], [ 72.8579931, 22.2436611 ], [ 72.8577088, 22.2441721 ], [ 72.8576971, 22.244944 ], [ 72.8574129, 22.2454548 ], [ 72.8574012, 22.2462267 ], [ 72.8565329, 22.2487888 ], [ 72.856525, 22.2493035 ], [ 72.8556801, 22.2503216 ], [ 72.8542551, 22.2531337 ], [ 72.8539748, 22.2533874 ], [ 72.8534023, 22.2546665 ], [ 72.8525612, 22.2554274 ], [ 72.8525535, 22.2559419 ], [ 72.8517085, 22.2569602 ], [ 72.8508635, 22.2579784 ], [ 72.8504337, 22.2590022 ], [ 72.849879, 22.259123 ], [ 72.8493201, 22.2595021 ], [ 72.8490319, 22.2602704 ], [ 72.8484771, 22.2603911 ], [ 72.8473556, 22.2614057 ], [ 72.8462422, 22.2619056 ], [ 72.8456815, 22.2624129 ], [ 72.8445698, 22.2627846 ], [ 72.844562, 22.2632991 ], [ 72.8437306, 22.2634163 ], [ 72.8428935, 22.26392 ], [ 72.8395684, 22.2643904 ], [ 72.8390116, 22.2646404 ], [ 72.8351319, 22.2652326 ], [ 72.8352617, 22.2657489 ], [ 72.8362197, 22.2664046 ], [ 72.8367726, 22.2664119 ], [ 72.8373176, 22.2669339 ], [ 72.840068, 22.2678718 ], [ 72.8399704, 22.2680392 ], [ 72.8392367, 22.2679888 ], [ 72.8362118, 22.2669192 ], [ 72.8356669, 22.2663972 ], [ 72.8342927, 22.2658642 ], [ 72.8340202, 22.2656032 ], [ 72.8318208, 22.2648018 ], [ 72.8315443, 22.2647982 ], [ 72.831264, 22.2650517 ], [ 72.8290406, 22.2657941 ], [ 72.8284877, 22.2657867 ], [ 72.8282073, 22.2660404 ], [ 72.8248864, 22.2662532 ], [ 72.8246059, 22.2665068 ], [ 72.8237765, 22.2664957 ], [ 72.8223846, 22.2671209 ], [ 72.822641, 22.268411 ], [ 72.8234704, 22.2684221 ], [ 72.8238686, 22.2694567 ], [ 72.8240052, 22.2695867 ], [ 72.8248325, 22.269727 ], [ 72.8248245, 22.2702416 ], [ 72.8253795, 22.2701199 ], [ 72.8262008, 22.2706457 ], [ 72.8292258, 22.2717155 ], [ 72.830047, 22.2722411 ], [ 72.8358523, 22.2723186 ], [ 72.8362606, 22.2727105 ], [ 72.8367975, 22.273747 ], [ 72.8368888, 22.2768364 ], [ 72.8374397, 22.2769719 ], [ 72.8375754, 22.2771029 ], [ 72.8382592, 22.2776268 ], [ 72.8382553, 22.277884 ], [ 72.8385316, 22.2778876 ], [ 72.8393571, 22.278156 ], [ 72.8393532, 22.2784132 ], [ 72.8396295, 22.278417 ], [ 72.8398941, 22.2791925 ], [ 72.8401706, 22.2791963 ], [ 72.8401627, 22.2797109 ], [ 72.8396138, 22.2794461 ], [ 72.8397143, 22.2790205 ], [ 72.8385238, 22.2784023 ], [ 72.8377023, 22.2778767 ], [ 72.836879, 22.2774792 ], [ 72.8366044, 22.2773473 ], [ 72.8366123, 22.2768328 ], [ 72.8360595, 22.2768254 ], [ 72.8359366, 22.2757945 ], [ 72.835668, 22.275276 ], [ 72.8354154, 22.2737287 ], [ 72.8344641, 22.2726865 ], [ 72.8336388, 22.2724182 ], [ 72.8336308, 22.2729328 ], [ 72.8322507, 22.2727852 ], [ 72.8319703, 22.2730388 ], [ 72.8300351, 22.2730129 ], [ 72.828112, 22.2722154 ], [ 72.8275671, 22.2716933 ], [ 72.8195862, 22.2692702 ], [ 72.818765, 22.2687446 ], [ 72.8160126, 22.2679355 ], [ 72.8154679, 22.2674134 ], [ 72.814366, 22.2671413 ], [ 72.8135488, 22.2663582 ], [ 72.812996, 22.2663509 ], [ 72.8127236, 22.2660899 ], [ 72.8121727, 22.2659542 ], [ 72.8120421, 22.2654376 ], [ 72.8116359, 22.2649175 ], [ 72.811085, 22.264781 ], [ 72.8102678, 22.263998 ], [ 72.8091682, 22.2635975 ], [ 72.8091761, 22.2630831 ], [ 72.8086254, 22.2629464 ], [ 72.8080784, 22.2625535 ], [ 72.8080865, 22.2620388 ], [ 72.806436, 22.2615019 ], [ 72.8064441, 22.2609874 ], [ 72.8058892, 22.261108 ], [ 72.8047957, 22.2603214 ], [ 72.803694, 22.2600491 ], [ 72.8031493, 22.259527 ], [ 72.8023241, 22.2592585 ], [ 72.8020516, 22.2589975 ], [ 72.8006775, 22.2584643 ], [ 72.7998605, 22.2576811 ], [ 72.7993116, 22.2574163 ], [ 72.7987588, 22.2574089 ], [ 72.7979418, 22.2566257 ], [ 72.7965677, 22.2560925 ], [ 72.7962954, 22.2558313 ], [ 72.7954702, 22.2555629 ], [ 72.7941085, 22.2542577 ], [ 72.7921897, 22.2532023 ], [ 72.790828, 22.2518971 ], [ 72.7902752, 22.2518895 ], [ 72.7897286, 22.2514966 ], [ 72.7895978, 22.2509801 ], [ 72.7891918, 22.2504599 ], [ 72.7883647, 22.2503195 ], [ 72.7875456, 22.2496654 ], [ 72.7872814, 22.2488897 ], [ 72.787003, 22.2490143 ], [ 72.7864523, 22.2488786 ], [ 72.7864604, 22.2483639 ], [ 72.7859096, 22.2482273 ], [ 72.7848163, 22.2474405 ], [ 72.7837269, 22.2463963 ], [ 72.7828998, 22.2462568 ], [ 72.7827692, 22.2457402 ], [ 72.7818185, 22.2446979 ], [ 72.7809894, 22.2446866 ], [ 72.7808588, 22.2441702 ], [ 72.7801807, 22.2433889 ], [ 72.7793515, 22.2433776 ], [ 72.7790873, 22.2426019 ], [ 72.7785366, 22.2424652 ], [ 72.7771669, 22.2416745 ], [ 72.7766224, 22.2411525 ], [ 72.7760695, 22.2411449 ], [ 72.7755248, 22.2406227 ], [ 72.7741491, 22.2402182 ], [ 72.7741572, 22.2397038 ], [ 72.7736067, 22.2395671 ], [ 72.7733343, 22.2393059 ], [ 72.772233, 22.2390336 ], [ 72.7708633, 22.2382428 ], [ 72.7694939, 22.237452 ], [ 72.7681609, 22.2372589 ], [ 72.7663925, 22.2360871 ], [ 72.7652643, 22.2355525 ], [ 72.7649935, 22.2351077 ], [ 72.763527, 22.2343001 ], [ 72.7630297, 22.2337263 ], [ 72.7617144, 22.232893 ], [ 72.7614963, 22.2325337 ], [ 72.7605, 22.2322588 ], [ 72.7603133, 22.2318794 ], [ 72.7572991, 22.2316461 ], [ 72.7547593, 22.2319171 ], [ 72.7533397, 22.2326898 ], [ 72.7514079, 22.2328531 ], [ 72.7490948, 22.2345502 ], [ 72.7429671, 22.2398971 ], [ 72.7384434, 22.2438353 ], [ 72.7281068, 22.2486122 ], [ 72.7279566, 22.2505842 ], [ 72.7269759, 22.2544929 ], [ 72.7236227, 22.2575963 ], [ 72.7164899, 22.2627984 ], [ 72.7138168, 22.2641451 ], [ 72.7110013, 22.2661212 ], [ 72.7115707, 22.2665604 ], [ 72.7094354, 22.2672483 ], [ 72.7046112, 22.2703076 ], [ 72.7017641, 22.2715517 ], [ 72.698569, 22.2725178 ], [ 72.6914987, 22.2736156 ], [ 72.6875128, 22.2744499 ], [ 72.6792404, 22.2753281 ], [ 72.6725497, 22.2774065 ], [ 72.6609108, 22.2805925 ], [ 72.6600403, 22.2822583 ], [ 72.6588869, 22.2842108 ], [ 72.6506522, 22.284628 ], [ 72.6501078, 22.2856901 ], [ 72.6498313, 22.2856861 ], [ 72.6484407, 22.2861808 ], [ 72.6398671, 22.2863134 ], [ 72.6390421, 22.2860443 ], [ 72.628075, 22.2901236 ], [ 72.6264775, 22.2862013 ], [ 72.6202297, 22.2879429 ], [ 72.6165918, 22.2887625 ], [ 72.6135707, 22.2894943 ], [ 72.6100276, 22.2901821 ], [ 72.6088097, 22.29087 ], [ 72.5926445, 22.2944848 ], [ 72.5811138, 22.2971483 ], [ 72.5779187, 22.3079189 ], [ 72.5790259, 22.3088994 ], [ 72.5833598, 22.3113285 ], [ 72.5854953, 22.3132512 ], [ 72.5850682, 22.3161924 ], [ 72.5842932, 22.3210503 ], [ 72.5831385, 22.3234792 ], [ 72.5898767, 22.3281027 ], [ 72.5896362, 22.3293181 ], [ 72.5882315, 22.3305839 ], [ 72.5873954, 22.3309577 ], [ 72.5863923, 22.3318811 ], [ 72.5851523, 22.3327256 ], [ 72.5846524, 22.3333442 ], [ 72.5837499, 22.3338621 ], [ 72.5826262, 22.3348745 ], [ 72.5816788, 22.335612 ], [ 72.5803027, 22.3364605 ], [ 72.5797175, 22.3369872 ], [ 72.5792113, 22.337353 ], [ 72.5789108, 22.3375724 ], [ 72.5786735, 22.3377919 ], [ 72.5781516, 22.3383771 ], [ 72.5774714, 22.338816 ], [ 72.5761796, 22.3397961 ], [ 72.5757632, 22.3400303 ], [ 72.5754655, 22.341072 ], [ 72.5748991, 22.3418354 ], [ 72.574306, 22.3441423 ], [ 72.5750198, 22.3485447 ], [ 72.5757315, 22.3499198 ], [ 72.5738018, 22.3506074 ], [ 72.5719038, 22.3514705 ], [ 72.5716923, 22.3513079 ], [ 72.5707428, 22.3502644 ], [ 72.5657897, 22.3487743 ], [ 72.5649711, 22.3481193 ], [ 72.5648413, 22.3476025 ], [ 72.5642971, 22.3470798 ], [ 72.5628171, 22.3447418 ], [ 72.5622661, 22.3446044 ], [ 72.5611578, 22.3447167 ], [ 72.5610102, 22.3452293 ], [ 72.5605869, 22.3457375 ], [ 72.5602307, 22.3437463 ], [ 72.5595189, 22.3427368 ], [ 72.558301, 22.3434829 ], [ 72.558823, 22.3444192 ], [ 72.5554855, 22.3459992 ], [ 72.5511674, 22.3469648 ], [ 72.550598, 22.347516 ], [ 72.5496806, 22.3479595 ], [ 72.5481004, 22.3479928 ], [ 72.5482254, 22.3485154 ], [ 72.547255, 22.3488809 ], [ 72.546151, 22.3487352 ], [ 72.5444807, 22.3493534 ], [ 72.5438868, 22.3516602 ], [ 72.5455394, 22.3520709 ], [ 72.5462055, 22.3534965 ], [ 72.5463419, 22.3536269 ], [ 72.5485566, 22.3535322 ], [ 72.5485746, 22.3525033 ], [ 72.5496785, 22.3526481 ], [ 72.5498141, 22.3527793 ], [ 72.5498004, 22.3535509 ], [ 72.5500681, 22.3540697 ], [ 72.5500501, 22.3550987 ], [ 72.5505942, 22.3556214 ], [ 72.5507194, 22.3563952 ], [ 72.5487814, 22.3564942 ], [ 72.5468365, 22.3569792 ], [ 72.5462765, 22.3573572 ], [ 72.5459821, 22.358382 ], [ 72.540986, 22.3593353 ], [ 72.5415617, 22.3580576 ], [ 72.5401856, 22.3576502 ], [ 72.5396394, 22.3572565 ], [ 72.5393809, 22.3562232 ], [ 72.5388279, 22.3562149 ], [ 72.5388324, 22.3559577 ], [ 72.5407659, 22.3561153 ], [ 72.5409059, 22.3559892 ], [ 72.5410719, 22.3544479 ], [ 72.5416249, 22.3544563 ], [ 72.5412232, 22.3536783 ], [ 72.5412412, 22.3526492 ], [ 72.5413845, 22.3523943 ], [ 72.5405572, 22.3522525 ], [ 72.540285, 22.3519911 ], [ 72.5389025, 22.3519701 ], [ 72.5386235, 22.3520949 ], [ 72.5386147, 22.3526093 ], [ 72.537785, 22.3525967 ], [ 72.5376372, 22.3531091 ], [ 72.5373561, 22.3533621 ], [ 72.5372093, 22.3538745 ], [ 72.5369328, 22.3538704 ], [ 72.5369418, 22.3533559 ], [ 72.5366653, 22.3533517 ], [ 72.5366562, 22.3538662 ], [ 72.5352735, 22.353845 ], [ 72.5355364, 22.3546211 ], [ 72.5349857, 22.3544835 ], [ 72.5347046, 22.3547365 ], [ 72.5333242, 22.3545872 ], [ 72.5336075, 22.3542053 ], [ 72.534165, 22.3539563 ], [ 72.5344484, 22.3535751 ], [ 72.5336188, 22.3535625 ], [ 72.5336279, 22.353048 ], [ 72.5341786, 22.3531847 ], [ 72.5355636, 22.3530775 ], [ 72.5357105, 22.3525651 ], [ 72.5358515, 22.3524383 ], [ 72.5364068, 22.3523185 ], [ 72.5361665, 22.3502565 ], [ 72.5356133, 22.350248 ], [ 72.5355997, 22.3510197 ], [ 72.5350513, 22.3507541 ], [ 72.5353414, 22.3499866 ], [ 72.5370051, 22.3497545 ], [ 72.5372544, 22.3513022 ], [ 72.5375311, 22.3513064 ], [ 72.5379679, 22.3500265 ], [ 72.5392242, 22.3494018 ], [ 72.5396453, 22.3490229 ], [ 72.5395797, 22.3449049 ], [ 72.5401306, 22.3450416 ], [ 72.5405561, 22.3444052 ], [ 72.5405651, 22.3438908 ], [ 72.5404319, 22.3436313 ], [ 72.5398812, 22.3434939 ], [ 72.5390605, 22.3429668 ], [ 72.5385166, 22.342444 ], [ 72.531698, 22.3347173 ], [ 72.5352094, 22.3296697 ], [ 72.536285, 22.3282066 ], [ 72.5399066, 22.3217151 ], [ 72.5215434, 22.3228548 ], [ 72.5212107, 22.3209689 ], [ 72.5099914, 22.3229168 ], [ 72.5113645, 22.3280689 ], [ 72.5116238, 22.3293391 ], [ 72.5069473, 22.3281932 ], [ 72.5064192, 22.330325 ], [ 72.5047195, 22.330103 ], [ 72.5028086, 22.3298631 ], [ 72.5001967, 22.3295256 ], [ 72.4981802, 22.3289838 ], [ 72.4952226, 22.3279179 ], [ 72.4939742, 22.3276094 ], [ 72.4909283, 22.3278193 ], [ 72.4903684, 22.3281972 ], [ 72.4897833, 22.3299893 ], [ 72.4903339, 22.3301259 ], [ 72.4907412, 22.3305186 ], [ 72.4912758, 22.3315561 ], [ 72.4920914, 22.3323406 ], [ 72.4920409, 22.3351701 ], [ 72.4925709, 22.3364648 ], [ 72.4931146, 22.3369877 ], [ 72.4932441, 22.3375045 ], [ 72.4921405, 22.3373582 ], [ 72.4915943, 22.3369643 ], [ 72.4914648, 22.3364478 ], [ 72.4910598, 22.3359269 ], [ 72.4905023, 22.3361754 ], [ 72.4908657, 22.3390114 ], [ 72.4905663, 22.3402932 ], [ 72.4902851, 22.3405462 ], [ 72.4897, 22.3423381 ], [ 72.4893635, 22.3456778 ], [ 72.4902972, 22.3476216 ], [ 72.4908525, 22.347502 ], [ 72.4908341, 22.3485309 ], [ 72.4916682, 22.3482865 ], [ 72.4916544, 22.3490582 ], [ 72.4908203, 22.3493026 ], [ 72.49064, 22.3516154 ], [ 72.4910485, 22.3520072 ], [ 72.4915992, 22.352145 ], [ 72.49159, 22.3526594 ], [ 72.4921477, 22.3524107 ], [ 72.491995, 22.3531803 ], [ 72.4921292, 22.3534396 ], [ 72.4915762, 22.3534311 ], [ 72.4916909, 22.3547193 ], [ 72.4919629, 22.3549809 ], [ 72.4920923, 22.3554975 ], [ 72.4915393, 22.3554888 ], [ 72.4913452, 22.3585734 ], [ 72.4916124, 22.3590922 ], [ 72.4915896, 22.3603782 ], [ 72.4918523, 22.3611542 ], [ 72.4915435, 22.3629505 ], [ 72.491442, 22.3686095 ], [ 72.4917001, 22.3696428 ], [ 72.492899, 22.3722343 ], [ 72.4907211, 22.3702703 ], [ 72.4896264, 22.3696105 ], [ 72.4896213, 22.3621489 ], [ 72.4890914, 22.3608541 ], [ 72.488589, 22.3580161 ], [ 72.4889855, 22.3513325 ], [ 72.4884556, 22.3500378 ], [ 72.4881836, 22.3497762 ], [ 72.4873864, 22.3479628 ], [ 72.4867094, 22.3471805 ], [ 72.4861587, 22.3470427 ], [ 72.4831146, 22.3471246 ], [ 72.4829897, 22.3463508 ], [ 72.4831377, 22.3458384 ], [ 72.486472, 22.3449892 ], [ 72.4866121, 22.3448632 ], [ 72.4889579, 22.3374379 ], [ 72.4889903, 22.3356375 ], [ 72.4895616, 22.3346171 ], [ 72.4895939, 22.3328165 ], [ 72.4894607, 22.3325572 ], [ 72.4889099, 22.3324196 ], [ 72.4883662, 22.3318965 ], [ 72.4878156, 22.3317598 ], [ 72.4878294, 22.3309881 ], [ 72.4869954, 22.3312325 ], [ 72.486276, 22.3327651 ], [ 72.4847281, 22.3342848 ], [ 72.4838939, 22.3345292 ], [ 72.483599, 22.3355538 ], [ 72.4802626, 22.3365311 ], [ 72.4805622, 22.3352493 ], [ 72.4830598, 22.3347734 ], [ 72.4830783, 22.3337445 ], [ 72.4836336, 22.3336241 ], [ 72.4843359, 22.3329923 ], [ 72.4846217, 22.3324822 ], [ 72.4847973, 22.3304264 ], [ 72.4820347, 22.3302544 ], [ 72.4812099, 22.3299843 ], [ 72.47927, 22.3302113 ], [ 72.4787077, 22.3307173 ], [ 72.475362, 22.3322089 ], [ 72.4731502, 22.3321745 ], [ 72.4728691, 22.3324274 ], [ 72.4709198, 22.3331688 ], [ 72.4703575, 22.3336746 ], [ 72.4695187, 22.3341762 ], [ 72.4681271, 22.3346689 ], [ 72.4678459, 22.3349218 ], [ 72.4661753, 22.3355394 ], [ 72.4660506, 22.3347655 ], [ 72.4663363, 22.3342554 ], [ 72.4684454, 22.3323582 ], [ 72.4695605, 22.3318611 ], [ 72.470544, 22.3309764 ], [ 72.4706966, 22.3302068 ], [ 72.469047, 22.3296664 ], [ 72.4696162, 22.3287744 ], [ 72.472934, 22.3288262 ], [ 72.4732059, 22.3290877 ], [ 72.4765306, 22.3287541 ], [ 72.4765399, 22.3282397 ], [ 72.4793068, 22.3281537 ], [ 72.4804221, 22.3276564 ], [ 72.480975, 22.3276649 ], [ 72.4817952, 22.3281922 ], [ 72.4848319, 22.3284967 ], [ 72.4856707, 22.3279951 ], [ 72.4862258, 22.3278757 ], [ 72.4869489, 22.3260858 ], [ 72.4869627, 22.3253142 ], [ 72.4865622, 22.324536 ], [ 72.4857374, 22.324266 ], [ 72.4856079, 22.3237492 ], [ 72.4847924, 22.3229647 ], [ 72.4833138, 22.320626 ], [ 72.4827608, 22.3206175 ], [ 72.4819683, 22.3185468 ], [ 72.4814178, 22.3184092 ], [ 72.480874, 22.3178861 ], [ 72.480054, 22.3173588 ], [ 72.4773102, 22.3161586 ], [ 72.4770477, 22.3153828 ], [ 72.4759487, 22.3149793 ], [ 72.4756769, 22.3147177 ], [ 72.4737417, 22.3146876 ], [ 72.4731797, 22.3151934 ], [ 72.4729031, 22.315189 ], [ 72.4723596, 22.3146659 ], [ 72.4698901, 22.3135982 ], [ 72.4687981, 22.3128093 ], [ 72.4679805, 22.3121537 ], [ 72.4675837, 22.3111184 ], [ 72.4671789, 22.3105975 ], [ 72.4666283, 22.3104597 ], [ 72.4663566, 22.3101983 ], [ 72.465532, 22.309928 ], [ 72.4647142, 22.3092724 ], [ 72.4645847, 22.3087559 ], [ 72.4633645, 22.3074503 ], [ 72.4603447, 22.3062448 ], [ 72.459253, 22.3054557 ], [ 72.4567814, 22.304517 ], [ 72.4561179, 22.3029628 ], [ 72.4548977, 22.3016572 ], [ 72.453961489062493, 22.301358892192614 ], [ 72.4502243, 22.3001681 ], [ 72.421775, 22.282221703716267 ], [ 72.4060106, 22.2722772 ], [ 72.3808005, 22.2633569 ], [ 72.3412906, 22.246495 ], [ 72.3304098, 22.231538 ], [ 72.3285031, 22.2253607 ], [ 72.3233128, 22.224086 ], [ 72.3196054, 22.2263412 ], [ 72.3192877, 22.2336951 ], [ 72.309013, 22.2326166 ], [ 72.3026575, 22.2310478 ], [ 72.2994797, 22.2268315 ], [ 72.2932302, 22.2187909 ], [ 72.2920108, 22.2148691 ], [ 72.2915353, 22.2133396 ], [ 72.291482507963366, 22.213125060156255 ], [ 72.2913662, 22.2126524 ], [ 72.29226, 22.2115507 ], [ 72.2927192, 22.2092428 ], [ 72.2932715, 22.2092521 ], [ 72.2935178, 22.2035963 ], [ 72.2937988, 22.2033436 ], [ 72.2939474, 22.2028316 ], [ 72.2933949, 22.2028223 ], [ 72.2936811, 22.2023126 ], [ 72.2931286, 22.2023033 ], [ 72.2934541, 22.1997361 ], [ 72.2923543, 22.1994606 ], [ 72.2926453, 22.1986936 ], [ 72.2931978, 22.1987027 ], [ 72.2931084, 22.1961285 ], [ 72.2933896, 22.195876 ], [ 72.2932815, 22.1943305 ], [ 72.293829, 22.1945968 ], [ 72.2937003, 22.1940801 ], [ 72.2932964, 22.1935589 ], [ 72.2938487, 22.1935681 ], [ 72.2938536, 22.1933109 ], [ 72.2933014, 22.1933016 ], [ 72.2937546, 22.1912512 ], [ 72.293789, 22.1894507 ], [ 72.2931139, 22.1886677 ], [ 72.2900785, 22.1884882 ], [ 72.2897999, 22.1886125 ], [ 72.2898098, 22.1880983 ], [ 72.2893532, 22.1880021 ], [ 72.289001, 22.1870556 ], [ 72.2881702, 22.1871699 ], [ 72.2873343, 22.1875424 ], [ 72.2873244, 22.1880567 ], [ 72.2891607, 22.188175 ], [ 72.2892477, 22.1886033 ], [ 72.2886952, 22.1885942 ], [ 72.2888279, 22.1888537 ], [ 72.2887835, 22.1911684 ], [ 72.2884875, 22.1921926 ], [ 72.288064, 22.1927 ], [ 72.2875164, 22.1924335 ], [ 72.2873632, 22.1932028 ], [ 72.2866584, 22.1939629 ], [ 72.2858298, 22.1939491 ], [ 72.2855338, 22.1949733 ], [ 72.2847053, 22.1949593 ], [ 72.284833, 22.1954761 ], [ 72.2855115, 22.1961302 ], [ 72.2874424, 22.1962914 ], [ 72.2874522, 22.1957771 ], [ 72.2866238, 22.1957632 ], [ 72.2867712, 22.1952512 ], [ 72.2869122, 22.1951243 ], [ 72.2880169, 22.1951429 ], [ 72.2882906, 22.1952765 ], [ 72.2883252, 22.1934761 ], [ 72.2886015, 22.1934808 ], [ 72.2884184, 22.1957932 ], [ 72.2888232, 22.1963145 ], [ 72.2879948, 22.1963007 ], [ 72.2878916, 22.196725 ], [ 72.2871562, 22.1968011 ], [ 72.2874252, 22.1971911 ], [ 72.287975, 22.1973294 ], [ 72.2880772, 22.1969042 ], [ 72.2882609, 22.1968197 ], [ 72.2879205, 22.2001585 ], [ 72.2865348, 22.2003927 ], [ 72.2876692, 22.1988679 ], [ 72.2868406, 22.1988541 ], [ 72.286988, 22.1983421 ], [ 72.2864505, 22.1975613 ], [ 72.2860566, 22.1965256 ], [ 72.2846756, 22.1965025 ], [ 72.2845172, 22.197529 ], [ 72.2842313, 22.1980387 ], [ 72.2842261, 22.1982959 ], [ 72.2844976, 22.1985577 ], [ 72.2850251, 22.1998529 ], [ 72.2848627, 22.2011366 ], [ 72.2846822, 22.2010451 ], [ 72.2840638, 22.1995796 ], [ 72.2824117, 22.1992948 ], [ 72.2824019, 22.1998091 ], [ 72.2815783, 22.1995381 ], [ 72.2815881, 22.1990238 ], [ 72.2807546, 22.199267 ], [ 72.2808723, 22.200298 ], [ 72.2807249, 22.2008102 ], [ 72.2812774, 22.2008195 ], [ 72.2808527, 22.2013269 ], [ 72.2807051, 22.2018389 ], [ 72.2823622, 22.2018667 ], [ 72.2823721, 22.2013523 ], [ 72.2843004, 22.2016418 ], [ 72.2843104, 22.2011274 ], [ 72.2845817, 22.2013891 ], [ 72.2865149, 22.2014214 ], [ 72.28651, 22.2016787 ], [ 72.2845741, 22.2017745 ], [ 72.2840169, 22.2020225 ], [ 72.2823573, 22.2021238 ], [ 72.2823473, 22.2026382 ], [ 72.2804165, 22.2024768 ], [ 72.275985, 22.2030463 ], [ 72.275995, 22.202532 ], [ 72.2757189, 22.2025273 ], [ 72.2754278, 22.2032942 ], [ 72.2729445, 22.2031236 ], [ 72.2723872, 22.2033715 ], [ 72.2710037, 22.2034774 ], [ 72.2710088, 22.2032202 ], [ 72.2721135, 22.2032387 ], [ 72.2721184, 22.2029816 ], [ 72.268518, 22.2034356 ], [ 72.2685082, 22.2039501 ], [ 72.2682318, 22.2039453 ], [ 72.2682419, 22.2034311 ], [ 72.2679657, 22.2034264 ], [ 72.2679557, 22.2039408 ], [ 72.266851, 22.2039223 ], [ 72.266861, 22.2034078 ], [ 72.266311, 22.2032695 ], [ 72.2657661, 22.2028749 ], [ 72.2657762, 22.2023606 ], [ 72.2674382, 22.2021311 ], [ 72.2671421, 22.2031553 ], [ 72.2682519, 22.2029166 ], [ 72.268563, 22.2011209 ], [ 72.269675, 22.2007533 ], [ 72.2702424, 22.1999911 ], [ 72.2721782, 22.1998953 ], [ 72.2722804, 22.19947 ], [ 72.2730116, 22.199652 ], [ 72.2730315, 22.1986233 ], [ 72.2738601, 22.1986371 ], [ 72.2737115, 22.1991493 ], [ 72.2738476, 22.1992797 ], [ 72.2752211, 22.1996891 ], [ 72.2752112, 22.2002033 ], [ 72.2757635, 22.2002126 ], [ 72.2757784, 22.1994411 ], [ 72.275226, 22.1994318 ], [ 72.2749748, 22.1981413 ], [ 72.2758032, 22.1981551 ], [ 72.2758181, 22.1973836 ], [ 72.2755395, 22.1975071 ], [ 72.2749871, 22.1974978 ], [ 72.2747085, 22.1976224 ], [ 72.2746936, 22.1983938 ], [ 72.2744174, 22.1983893 ], [ 72.2744273, 22.1978749 ], [ 72.2739706, 22.1977787 ], [ 72.2742987, 22.1973581 ], [ 72.2743036, 22.1971009 ], [ 72.2739049, 22.1963224 ], [ 72.2733524, 22.1963131 ], [ 72.2736087, 22.1973466 ], [ 72.2722377, 22.1968091 ], [ 72.2723804, 22.1965541 ], [ 72.2721489, 22.1942349 ], [ 72.2720164, 22.1939754 ], [ 72.2736658, 22.1943886 ], [ 72.273947, 22.1941359 ], [ 72.2753278, 22.1941591 ], [ 72.2754679, 22.1940332 ], [ 72.2755032, 22.19446 ], [ 72.2753205, 22.1945452 ], [ 72.2753105, 22.1950597 ], [ 72.27549, 22.1951502 ], [ 72.2757143, 22.195581 ], [ 72.2755618, 22.1963502 ], [ 72.2759806, 22.1961 ], [ 72.276129, 22.195588 ], [ 72.2764027, 22.1957206 ], [ 72.2769551, 22.1957299 ], [ 72.2777935, 22.1952294 ], [ 72.2791844, 22.1947382 ], [ 72.2797366, 22.1947473 ], [ 72.2800179, 22.1944948 ], [ 72.2805726, 22.1943759 ], [ 72.2805826, 22.1938614 ], [ 72.2816922, 22.1936227 ], [ 72.2816971, 22.1933655 ], [ 72.2800451, 22.1930807 ], [ 72.2799362, 22.1915352 ], [ 72.2798035, 22.1912757 ], [ 72.2795274, 22.1912712 ], [ 72.2795176, 22.1917855 ], [ 72.2773156, 22.1913623 ], [ 72.2770345, 22.191615 ], [ 72.2764796, 22.1917348 ], [ 72.2771993, 22.1902032 ], [ 72.2773628, 22.1889195 ], [ 72.2762655, 22.1885148 ], [ 72.2751585, 22.1886254 ], [ 72.2751683, 22.1881111 ], [ 72.2757206, 22.1881202 ], [ 72.2757355, 22.1873487 ], [ 72.2762804, 22.1877433 ], [ 72.2773775, 22.188148 ], [ 72.2772439, 22.1878885 ], [ 72.2773925, 22.1873765 ], [ 72.2768402, 22.1873672 ], [ 72.2769876, 22.1868552 ], [ 72.2771288, 22.1867284 ], [ 72.2774049, 22.1867329 ], [ 72.2778111, 22.1871262 ], [ 72.2777863, 22.188412 ], [ 72.2780576, 22.188674 ], [ 72.2779101, 22.189186 ], [ 72.2784624, 22.1891952 ], [ 72.27861, 22.1886832 ], [ 72.279032, 22.1883039 ], [ 72.2801392, 22.1881941 ], [ 72.2801145, 22.18948 ], [ 72.2795622, 22.1894708 ], [ 72.2795473, 22.1902425 ], [ 72.2812042, 22.1902701 ], [ 72.2813021, 22.19233 ], [ 72.2819857, 22.1927269 ], [ 72.282538, 22.1927359 ], [ 72.282678, 22.1926101 ], [ 72.2826881, 22.1920958 ], [ 72.2825554, 22.1918363 ], [ 72.2820029, 22.191827 ], [ 72.2821456, 22.1915723 ], [ 72.2821555, 22.1910578 ], [ 72.2824365, 22.1908053 ], [ 72.2827325, 22.1897811 ], [ 72.2826, 22.1895216 ], [ 72.2820475, 22.1895124 ], [ 72.2823386, 22.1887454 ], [ 72.2831645, 22.1888873 ], [ 72.2835709, 22.1892805 ], [ 72.2838323, 22.1900567 ], [ 72.2839362, 22.1918594 ], [ 72.2850458, 22.1916207 ], [ 72.2851933, 22.1911085 ], [ 72.2854745, 22.190856 ], [ 72.2856229, 22.1903438 ], [ 72.2858965, 22.1904766 ], [ 72.286449, 22.1904859 ], [ 72.286589, 22.19036 ], [ 72.2866087, 22.1893313 ], [ 72.286476, 22.1890718 ], [ 72.2859237, 22.1890625 ], [ 72.285411, 22.1869958 ], [ 72.2829256, 22.1869542 ], [ 72.2832091, 22.1865727 ], [ 72.2840377, 22.1865865 ], [ 72.285053, 22.1863056 ], [ 72.2851447, 22.1864768 ], [ 72.2856004, 22.1865719 ], [ 72.2856871, 22.1870004 ], [ 72.2859657, 22.186876 ], [ 72.2862494, 22.1864952 ], [ 72.2857928, 22.1863992 ], [ 72.285702, 22.1862289 ], [ 72.2852454, 22.1861327 ], [ 72.285307, 22.1851931 ], [ 72.2857266, 22.1849429 ], [ 72.2858446, 22.1859739 ], [ 72.2859806, 22.1861043 ], [ 72.2865329, 22.1861136 ], [ 72.2866729, 22.1859877 ], [ 72.2868215, 22.1854757 ], [ 72.2884834, 22.1852461 ], [ 72.2886357, 22.1844768 ], [ 72.2887857, 22.1842012 ], [ 72.2879606, 22.1836938 ], [ 72.2863087, 22.183409 ], [ 72.2863137, 22.1831518 ], [ 72.2866045, 22.1823848 ], [ 72.2879952, 22.1818934 ], [ 72.287837, 22.1829199 ], [ 72.2879731, 22.1830503 ], [ 72.2882492, 22.183055 ], [ 72.2885302, 22.1828023 ], [ 72.2901848, 22.182959 ], [ 72.2900362, 22.183471 ], [ 72.2898888, 22.1839832 ], [ 72.289874, 22.1847547 ], [ 72.2912598, 22.1845205 ], [ 72.2911311, 22.1840038 ], [ 72.2908599, 22.183742 ], [ 72.2908844, 22.182456 ], [ 72.2915926, 22.181567 ], [ 72.2926971, 22.1815853 ], [ 72.2929782, 22.1813326 ], [ 72.2935306, 22.1813419 ], [ 72.2940681, 22.1821227 ], [ 72.2946204, 22.1821319 ], [ 72.294899, 22.1820083 ], [ 72.2948891, 22.1825226 ], [ 72.2951677, 22.1823982 ], [ 72.29572, 22.1824073 ], [ 72.2960012, 22.1821548 ], [ 72.2972556, 22.1815328 ], [ 72.297404, 22.1810208 ], [ 72.2963044, 22.1807452 ], [ 72.2963142, 22.1802309 ], [ 72.2954858, 22.1802172 ], [ 72.2954512, 22.1820174 ], [ 72.2951751, 22.1820128 ], [ 72.2950513, 22.1812391 ], [ 72.2947801, 22.1809771 ], [ 72.2946622, 22.1799461 ], [ 72.2938289, 22.1801896 ], [ 72.2938387, 22.1796753 ], [ 72.2932864, 22.179666 ], [ 72.2932963, 22.1791516 ], [ 72.2919132, 22.1792568 ], [ 72.2913634, 22.1791194 ], [ 72.2916469, 22.1787378 ], [ 72.2922016, 22.178619 ], [ 72.292349, 22.1781068 ], [ 72.2930547, 22.1773466 ], [ 72.2925025, 22.1773375 ], [ 72.2925172, 22.1765661 ], [ 72.2938978, 22.1765889 ], [ 72.2937839, 22.1753007 ], [ 72.2940698, 22.1747908 ], [ 72.2939521, 22.1737598 ], [ 72.2934023, 22.1736216 ], [ 72.2931311, 22.1733599 ], [ 72.2923027, 22.1733461 ], [ 72.2920241, 22.1734704 ], [ 72.2920141, 22.1739849 ], [ 72.2911957, 22.1734566 ], [ 72.2912105, 22.1726851 ], [ 72.2906508, 22.1730612 ], [ 72.28982, 22.1731765 ], [ 72.289805, 22.1739482 ], [ 72.2884293, 22.1736679 ], [ 72.2886907, 22.1744441 ], [ 72.2897903, 22.1747197 ], [ 72.2898001, 22.1742053 ], [ 72.2903524, 22.1742145 ], [ 72.2896419, 22.1752317 ], [ 72.2898737, 22.1775511 ], [ 72.2897262, 22.1780631 ], [ 72.2891787, 22.1777968 ], [ 72.2893214, 22.1775419 ], [ 72.2893361, 22.1767704 ], [ 72.2892035, 22.1765109 ], [ 72.2886512, 22.1765016 ], [ 72.288661, 22.1759873 ], [ 72.2878277, 22.1762306 ], [ 72.2880196, 22.1734039 ], [ 72.288459, 22.1721247 ], [ 72.2890063, 22.1723912 ], [ 72.2887499, 22.1713578 ], [ 72.2881927, 22.1716057 ], [ 72.2879018, 22.1723729 ], [ 72.2873545, 22.1721064 ], [ 72.2876453, 22.1713394 ], [ 72.2870931, 22.1713302 ], [ 72.2870394, 22.1683691 ], [ 72.2867476, 22.1677227 ], [ 72.2867623, 22.1669511 ], [ 72.2863635, 22.1661728 ], [ 72.2858113, 22.1661635 ], [ 72.2858211, 22.165649 ], [ 72.2863734, 22.1656583 ], [ 72.2863783, 22.1654011 ], [ 72.2850027, 22.165121 ], [ 72.2852862, 22.1647392 ], [ 72.285841, 22.1646203 ], [ 72.2859933, 22.1638511 ], [ 72.2854509, 22.1633275 ], [ 72.2853282, 22.1625536 ], [ 72.2847759, 22.1625443 ], [ 72.2849037, 22.1630611 ], [ 72.2844802, 22.1635685 ], [ 72.2828332, 22.1630265 ], [ 72.2828432, 22.1625122 ], [ 72.2833979, 22.1623924 ], [ 72.283538, 22.1622665 ], [ 72.2839821, 22.1607303 ], [ 72.283149, 22.1609737 ], [ 72.2831589, 22.1604593 ], [ 72.2826066, 22.16045 ], [ 72.2828975, 22.1596831 ], [ 72.2834522, 22.1595632 ], [ 72.2835922, 22.1594374 ], [ 72.2837408, 22.1589254 ], [ 72.2848525, 22.1585576 ], [ 72.2862331, 22.1585804 ], [ 72.286373, 22.1584547 ], [ 72.2865216, 22.1579426 ], [ 72.286243, 22.1580662 ], [ 72.285417, 22.1579242 ], [ 72.2854269, 22.1574098 ], [ 72.2848748, 22.1574007 ], [ 72.2850222, 22.1568885 ], [ 72.2853033, 22.156636 ], [ 72.285530165786795, 22.15603762978516 ], [ 72.2855941, 22.155869 ], [ 72.2858752, 22.1556163 ], [ 72.2857574, 22.1545854 ], [ 72.2863095, 22.1545944 ], [ 72.2862948, 22.1553661 ], [ 72.287123, 22.1553799 ], [ 72.2869746, 22.1558919 ], [ 72.286852962291633, 22.15603762978516 ], [ 72.286551, 22.1563994 ], [ 72.2876506, 22.1566749 ], [ 72.287737235440389, 22.15623762978516 ], [ 72.287772838523608, 22.156057932333617 ], [ 72.287776861025407, 22.15603762978516 ], [ 72.287803, 22.1559057 ], [ 72.287944, 22.1557791 ], [ 72.2884987, 22.15566 ], [ 72.2885036, 22.1554028 ], [ 72.2871281, 22.1551227 ], [ 72.2868716, 22.1540894 ], [ 72.2876032, 22.154189 ], [ 72.2878325, 22.1543625 ], [ 72.2881555, 22.1541983 ], [ 72.2882471, 22.1543695 ], [ 72.2885233, 22.154374 ], [ 72.2885282, 22.1541168 ], [ 72.288257, 22.1538551 ], [ 72.2888068, 22.1539925 ], [ 72.289078, 22.1542542 ], [ 72.2896276, 22.1543924 ], [ 72.290061, 22.1533706 ], [ 72.2899383, 22.1525967 ], [ 72.2893811, 22.1528447 ], [ 72.2891347, 22.1512969 ], [ 72.2888561, 22.1514205 ], [ 72.2880301, 22.1512786 ], [ 72.2880154, 22.1520501 ], [ 72.2869135, 22.1519027 ], [ 72.2863713, 22.1513792 ], [ 72.2849908, 22.1513563 ], [ 72.2847172, 22.1512234 ], [ 72.2848695, 22.1504542 ], [ 72.2850105, 22.1503274 ], [ 72.2858389, 22.1503412 ], [ 72.2859738, 22.1504725 ], [ 72.2861025, 22.1509892 ], [ 72.2877763, 22.1501163 ], [ 72.288331, 22.1499972 ], [ 72.2880402, 22.1507641 ], [ 72.2896, 22.1508777 ], [ 72.2896916, 22.151049 ], [ 72.2913384, 22.1515908 ], [ 72.2912097, 22.1510743 ], [ 72.2909385, 22.1508123 ], [ 72.2909434, 22.1505553 ], [ 72.2910844, 22.1504285 ], [ 72.2913605, 22.150433 ], [ 72.291762, 22.1510834 ], [ 72.2921715, 22.1513474 ], [ 72.2919349, 22.1492854 ], [ 72.2916588, 22.1492807 ], [ 72.2913679, 22.1500476 ], [ 72.2905372, 22.1501622 ], [ 72.2899751, 22.1506674 ], [ 72.2897924, 22.150705 ], [ 72.289844, 22.1502797 ], [ 72.2905471, 22.1496477 ], [ 72.2913777, 22.1495334 ], [ 72.2915251, 22.1490212 ], [ 72.2916661, 22.1488946 ], [ 72.2919423, 22.1488991 ], [ 72.2922135, 22.1491609 ], [ 72.2927631, 22.149299 ], [ 72.2926147, 22.1498112 ], [ 72.2927508, 22.1499416 ], [ 72.2935767, 22.1500845 ], [ 72.2938725, 22.1490603 ], [ 72.2933203, 22.1490511 ], [ 72.2933252, 22.1487938 ], [ 72.2938799, 22.148674 ], [ 72.2940197, 22.1485481 ], [ 72.2941779, 22.1475217 ], [ 72.2936185, 22.1478978 ], [ 72.2933424, 22.1478932 ], [ 72.2928001, 22.1473697 ], [ 72.2922479, 22.1473604 ], [ 72.29086, 22.1477239 ], [ 72.2909574, 22.1475557 ], [ 72.2911411, 22.1474712 ], [ 72.2911509, 22.1469569 ], [ 72.2925314, 22.1469798 ], [ 72.2925609, 22.1454366 ], [ 72.2920088, 22.1454275 ], [ 72.2912297, 22.1428418 ], [ 72.2909536, 22.1428373 ], [ 72.2906627, 22.1436043 ], [ 72.291215, 22.1436133 ], [ 72.2910715, 22.1438683 ], [ 72.2910271, 22.146183 ], [ 72.2908848, 22.1464379 ], [ 72.2903375, 22.1461714 ], [ 72.29048, 22.1459167 ], [ 72.2904898, 22.1454022 ], [ 72.2903571, 22.1451427 ], [ 72.2898001, 22.1453907 ], [ 72.2898149, 22.1446192 ], [ 72.2892579, 22.1448672 ], [ 72.289524, 22.1453862 ], [ 72.2889719, 22.1453771 ], [ 72.2889818, 22.1448626 ], [ 72.2878774, 22.1448443 ], [ 72.2878922, 22.1440726 ], [ 72.2867903, 22.1439252 ], [ 72.2862358, 22.1440452 ], [ 72.2862456, 22.1435307 ], [ 72.2848553, 22.1440221 ], [ 72.2849831, 22.1445389 ], [ 72.2842736, 22.1455561 ], [ 72.2848258, 22.1455653 ], [ 72.2839778, 22.1465803 ], [ 72.2831496, 22.1465665 ], [ 72.2831396, 22.1470807 ], [ 72.2850772, 22.1468558 ], [ 72.2850672, 22.1473703 ], [ 72.2831347, 22.147338 ], [ 72.2828389, 22.1483621 ], [ 72.2825628, 22.1483576 ], [ 72.2823016, 22.1475814 ], [ 72.2817493, 22.1475721 ], [ 72.2813545, 22.1465366 ], [ 72.2812367, 22.1455054 ], [ 72.2804036, 22.1457488 ], [ 72.2806648, 22.1465251 ], [ 72.2798391, 22.1463822 ], [ 72.279558, 22.1466347 ], [ 72.2781727, 22.1468689 ], [ 72.2778916, 22.1471216 ], [ 72.2773371, 22.1472412 ], [ 72.277332, 22.1474984 ], [ 72.2781579, 22.1476404 ], [ 72.278429, 22.1479023 ], [ 72.2789837, 22.1477832 ], [ 72.2791014, 22.1488144 ], [ 72.2789589, 22.1490692 ], [ 72.2784066, 22.1490601 ], [ 72.278387, 22.1500889 ], [ 72.278944, 22.1498409 ], [ 72.2789292, 22.1506124 ], [ 72.2778298, 22.1503368 ], [ 72.2775686, 22.1495606 ], [ 72.2770115, 22.1498086 ], [ 72.2765769, 22.1508303 ], [ 72.2760099, 22.1515927 ], [ 72.2758378, 22.1533907 ], [ 72.2755616, 22.1533861 ], [ 72.2755716, 22.1528717 ], [ 72.2750145, 22.1531197 ], [ 72.2751619, 22.1526077 ], [ 72.2754429, 22.152355 ], [ 72.2755964, 22.1515857 ], [ 72.2747631, 22.1518292 ], [ 72.2754826, 22.1502975 ], [ 72.2757637, 22.150045 ], [ 72.275917, 22.1492758 ], [ 72.2748177, 22.149 ], [ 72.2748276, 22.1484858 ], [ 72.2739943, 22.148729 ], [ 72.274122, 22.1492457 ], [ 72.273555, 22.150008 ], [ 72.2729731, 22.1515419 ], [ 72.272411, 22.1520471 ], [ 72.2719823, 22.1528118 ], [ 72.2717064, 22.152807 ], [ 72.2724358, 22.1507611 ], [ 72.2724507, 22.1499896 ], [ 72.272318, 22.1497301 ], [ 72.2728703, 22.1497394 ], [ 72.272604, 22.1492204 ], [ 72.2720519, 22.1492111 ], [ 72.2720617, 22.1486967 ], [ 72.2726115, 22.1488341 ], [ 72.2728926, 22.1485816 ], [ 72.2734471, 22.1484627 ], [ 72.2733284, 22.1474315 ], [ 72.2730574, 22.1471697 ], [ 72.2732059, 22.1394542 ], [ 72.2736404, 22.1384323 ], [ 72.2730882, 22.138423 ], [ 72.2730982, 22.1379087 ], [ 72.2722749, 22.1376377 ], [ 72.2724324, 22.1366113 ], [ 72.2723048, 22.1360945 ], [ 72.2711955, 22.1363332 ], [ 72.2711855, 22.1368477 ], [ 72.2700888, 22.1364429 ], [ 72.2698177, 22.1361811 ], [ 72.2692681, 22.1360437 ], [ 72.2690168, 22.1347532 ], [ 72.2684647, 22.1347439 ], [ 72.2685824, 22.1357749 ], [ 72.2695367, 22.1364336 ], [ 72.2707463, 22.1381267 ], [ 72.270855, 22.1396721 ], [ 72.2703029, 22.1396629 ], [ 72.2703127, 22.1391484 ], [ 72.2692035, 22.1393871 ], [ 72.2691937, 22.1399016 ], [ 72.2686416, 22.1398923 ], [ 72.2689102, 22.1402822 ], [ 72.2697283, 22.1408105 ], [ 72.2702781, 22.1409488 ], [ 72.2702632, 22.1417203 ], [ 72.2708153, 22.1417296 ], [ 72.2708003, 22.1425011 ], [ 72.2696937, 22.1426107 ], [ 72.2685769, 22.1432357 ], [ 72.2686947, 22.1442667 ], [ 72.2684137, 22.1445194 ], [ 72.2682513, 22.1458029 ], [ 72.2677041, 22.1455364 ], [ 72.2678467, 22.1452816 ], [ 72.2678616, 22.1445101 ], [ 72.2677289, 22.1442506 ], [ 72.2668933, 22.144622 ], [ 72.2660502, 22.1453797 ], [ 72.2652144, 22.1457521 ], [ 72.2652245, 22.1452376 ], [ 72.2657765, 22.1452469 ], [ 72.2652492, 22.1439516 ], [ 72.2646972, 22.1439424 ], [ 72.264707, 22.1434281 ], [ 72.2652568, 22.1435655 ], [ 72.2656629, 22.1439586 ], [ 72.2657915, 22.1444754 ], [ 72.2662101, 22.1442251 ], [ 72.266215, 22.1439679 ], [ 72.2660874, 22.1434512 ], [ 72.2677487, 22.1432217 ], [ 72.2674927, 22.1421885 ], [ 72.2661222, 22.1416509 ], [ 72.265861, 22.1408747 ], [ 72.2653038, 22.1411227 ], [ 72.2656977, 22.1421584 ], [ 72.2655501, 22.1426704 ], [ 72.2647244, 22.1425275 ], [ 72.264446, 22.1426519 ], [ 72.2639236, 22.1410994 ], [ 72.2630905, 22.1413429 ], [ 72.2631003, 22.1408284 ], [ 72.2625507, 22.1406901 ], [ 72.2614441, 22.1408006 ], [ 72.2615964, 22.1400314 ], [ 72.2618775, 22.1397789 ], [ 72.262312, 22.138757 ], [ 72.2634163, 22.1387755 ], [ 72.2637172, 22.1374943 ], [ 72.2617773, 22.1378471 ], [ 72.2615036, 22.1377145 ], [ 72.2612625, 22.1359095 ], [ 72.2601583, 22.135891 ], [ 72.2601483, 22.1364053 ], [ 72.2595962, 22.136396 ], [ 72.2598623, 22.136915 ], [ 72.2593103, 22.1369057 ], [ 72.2599848, 22.1376889 ], [ 72.2606458, 22.1392437 ], [ 72.2600935, 22.1392344 ], [ 72.2600786, 22.1400059 ], [ 72.2609119, 22.1397626 ], [ 72.2610343, 22.1405364 ], [ 72.2608918, 22.1407914 ], [ 72.2597926, 22.1405156 ], [ 72.2596641, 22.1399989 ], [ 72.2593929, 22.1397371 ], [ 72.2594029, 22.1392227 ], [ 72.2591319, 22.1389609 ], [ 72.2587382, 22.1379252 ], [ 72.2592902, 22.1379345 ], [ 72.2590241, 22.1374155 ], [ 72.2587455, 22.1375391 ], [ 72.2565373, 22.1375018 ], [ 72.2562587, 22.1376262 ], [ 72.2559576, 22.1389074 ], [ 72.2565148, 22.1386596 ], [ 72.2563613, 22.1394289 ], [ 72.2567684, 22.139821 ], [ 72.2578652, 22.1402259 ], [ 72.2577166, 22.1407379 ], [ 72.2579877, 22.1409998 ], [ 72.2579727, 22.1417713 ], [ 72.2574057, 22.1425336 ], [ 72.2573708, 22.144334 ], [ 72.2575044, 22.1445935 ], [ 72.2566762, 22.1445795 ], [ 72.2566662, 22.145094 ], [ 72.25639, 22.1450892 ], [ 72.2562615, 22.1445725 ], [ 72.2555868, 22.1437893 ], [ 72.2566862, 22.144065 ], [ 72.257002, 22.1420123 ], [ 72.25645, 22.1420031 ], [ 72.2565925, 22.1417481 ], [ 72.2566074, 22.1409766 ], [ 72.2567508, 22.1407218 ], [ 72.2556467, 22.1407031 ], [ 72.2557792, 22.1409626 ], [ 72.2557692, 22.1414771 ], [ 72.2549162, 22.142749 ], [ 72.2547637, 22.1435183 ], [ 72.25449, 22.1433845 ], [ 72.253938, 22.1433752 ], [ 72.2528187, 22.1441282 ], [ 72.2511523, 22.1446147 ], [ 72.2508712, 22.1448672 ], [ 72.2503165, 22.144987 ], [ 72.2506076, 22.14422 ], [ 72.252545, 22.1439955 ], [ 72.252555, 22.143481 ], [ 72.2531098, 22.1433612 ], [ 72.2533908, 22.1431087 ], [ 72.2545025, 22.142742 ], [ 72.2543889, 22.1414538 ], [ 72.2545299, 22.141327 ], [ 72.2550846, 22.1412083 ], [ 72.254981, 22.1394056 ], [ 72.2545773, 22.1388844 ], [ 72.2543012, 22.1388796 ], [ 72.2542814, 22.1399084 ], [ 72.2531846, 22.1395035 ], [ 72.2526399, 22.1391089 ], [ 72.2526499, 22.1385946 ], [ 72.2534757, 22.1387366 ], [ 72.2540202, 22.1391321 ], [ 72.2541678, 22.1386201 ], [ 72.2545898, 22.1382408 ], [ 72.2551443, 22.1381219 ], [ 72.2554354, 22.1373552 ], [ 72.2546123, 22.137084 ], [ 72.2546023, 22.1375984 ], [ 72.2537716, 22.1377126 ], [ 72.2535006, 22.1374508 ], [ 72.2515756, 22.1370329 ], [ 72.2515607, 22.1378044 ], [ 72.250735, 22.1376613 ], [ 72.2501905, 22.1372667 ], [ 72.2500619, 22.13675 ], [ 72.2497909, 22.1364882 ], [ 72.2498058, 22.1357167 ], [ 72.2500466, 22.1352937 ], [ 72.2502303, 22.1352093 ], [ 72.2502404, 22.134695 ], [ 72.2507851, 22.1350896 ], [ 72.2518916, 22.13498 ], [ 72.2521827, 22.134213 ], [ 72.25081, 22.1338037 ], [ 72.2502579, 22.1337944 ], [ 72.2499793, 22.1339188 ], [ 72.249861, 22.1351146 ], [ 72.2493948, 22.1355806 ], [ 72.2485641, 22.1356957 ], [ 72.248263, 22.136977 ], [ 72.2479869, 22.1369723 ], [ 72.2481394, 22.136203 ], [ 72.2480069, 22.1359435 ], [ 72.2463332, 22.1368154 ], [ 72.2446494, 22.1382023 ], [ 72.2449153, 22.1387213 ], [ 72.2443632, 22.138712 ], [ 72.2445157, 22.1379428 ], [ 72.2449429, 22.1373064 ], [ 72.2460621, 22.1365534 ], [ 72.2471814, 22.1358006 ], [ 72.2477359, 22.1356818 ], [ 72.247741, 22.1354245 ], [ 72.2471888, 22.1354153 ], [ 72.2476125, 22.1349078 ], [ 72.2476323, 22.1338791 ], [ 72.2480595, 22.1332427 ], [ 72.2483356, 22.1332474 ], [ 72.2484706, 22.1333788 ], [ 72.2484556, 22.1341503 ], [ 72.2488576, 22.1347999 ], [ 72.2491338, 22.1348044 ], [ 72.2496983, 22.1341713 ], [ 72.2491462, 22.134162 ], [ 72.2491511, 22.1339048 ], [ 72.2497032, 22.133914 ], [ 72.2497183, 22.1331425 ], [ 72.2483454, 22.132733 ], [ 72.2472413, 22.1327145 ], [ 72.2458711, 22.1321768 ], [ 72.2453165, 22.1322964 ], [ 72.245449, 22.1325559 ], [ 72.2454341, 22.1333276 ], [ 72.2452916, 22.1335823 ], [ 72.2458412, 22.1337198 ], [ 72.2461122, 22.1339817 ], [ 72.2474849, 22.1343913 ], [ 72.2474798, 22.1346483 ], [ 72.2458212, 22.1347485 ], [ 72.2438762, 22.1353593 ], [ 72.2437278, 22.1358713 ], [ 72.2433041, 22.1363788 ], [ 72.2430281, 22.1363741 ], [ 72.2434617, 22.1353523 ], [ 72.2434817, 22.1343236 ], [ 72.2440489, 22.1335614 ], [ 72.24434, 22.1327944 ], [ 72.244621, 22.1325419 ], [ 72.2447694, 22.1320299 ], [ 72.2439363, 22.1322731 ], [ 72.2437879, 22.1327851 ], [ 72.2433642, 22.1332926 ], [ 72.2416979, 22.1337789 ], [ 72.2419639, 22.1342979 ], [ 72.2414093, 22.1344168 ], [ 72.2408497, 22.1347936 ], [ 72.2408597, 22.1342792 ], [ 72.2403052, 22.1343981 ], [ 72.2397431, 22.1349031 ], [ 72.2378132, 22.1347422 ], [ 72.2376446, 22.136283 ], [ 72.2372109, 22.1373047 ], [ 72.2361016, 22.137543 ], [ 72.2361117, 22.1370288 ], [ 72.2366664, 22.1369091 ], [ 72.2373736, 22.136021 ], [ 72.2376798, 22.1344827 ], [ 72.2378208, 22.1343559 ], [ 72.2394821, 22.1341269 ], [ 72.2403201, 22.1336266 ], [ 72.2412935, 22.1332575 ], [ 72.2411659, 22.1327407 ], [ 72.241718, 22.1327502 ], [ 72.2414519, 22.1322312 ], [ 72.2420066, 22.1321114 ], [ 72.2421466, 22.1319857 ], [ 72.2421667, 22.1309569 ], [ 72.2420342, 22.1306975 ], [ 72.2412111, 22.1304262 ], [ 72.2414946, 22.1300446 ], [ 72.2417705, 22.1300494 ], [ 72.2423152, 22.1304449 ], [ 72.2423453, 22.1289018 ], [ 72.2428998, 22.1287821 ], [ 72.2436169, 22.1273797 ], [ 72.2434895, 22.126863 ], [ 72.2429374, 22.1268536 ], [ 72.2430948, 22.1258273 ], [ 72.2433759, 22.1255748 ], [ 72.2433959, 22.1245461 ], [ 72.2438179, 22.1241667 ], [ 72.2446511, 22.1239235 ], [ 72.2454891, 22.1234232 ], [ 72.2457652, 22.1234279 ], [ 72.2459002, 22.1235593 ], [ 72.2460287, 22.124076 ], [ 72.2465783, 22.1242134 ], [ 72.2467132, 22.1243448 ], [ 72.2465607, 22.125114 ], [ 72.2471128, 22.1251233 ], [ 72.2469642, 22.1256353 ], [ 72.2470878, 22.1264092 ], [ 72.2476399, 22.1264185 ], [ 72.2475063, 22.126159 ], [ 72.2475363, 22.124616 ], [ 72.2482345, 22.1242414 ], [ 72.248518, 22.1238608 ], [ 72.2476898, 22.1238468 ], [ 72.2483944, 22.1230868 ], [ 72.2484044, 22.1225723 ], [ 72.2491075, 22.1219407 ], [ 72.2493834, 22.1219452 ], [ 72.2496545, 22.1222072 ], [ 72.2507586, 22.1222257 ], [ 72.2510296, 22.1224877 ], [ 72.2526883, 22.1223873 ], [ 72.2528457, 22.1213609 ], [ 72.2541009, 22.1207385 ], [ 72.2543819, 22.1204858 ], [ 72.2549364, 22.1203671 ], [ 72.2549563, 22.1193384 ], [ 72.2563415, 22.1191044 ], [ 72.2564989, 22.1180779 ], [ 72.2566399, 22.1179511 ], [ 72.2571944, 22.1178322 ], [ 72.2572043, 22.117318 ], [ 72.2583033, 22.1175937 ], [ 72.2584309, 22.1181104 ], [ 72.2585669, 22.1182408 ], [ 72.2593949, 22.1182546 ], [ 72.2607677, 22.1186642 ], [ 72.2602504, 22.1168545 ], [ 72.2596934, 22.1171025 ], [ 72.2597034, 22.116588 ], [ 72.2586044, 22.1163125 ], [ 72.2588703, 22.1168315 ], [ 72.2577639, 22.1169409 ], [ 72.2563987, 22.1161462 ], [ 72.2555732, 22.1160042 ], [ 72.2558416, 22.1163941 ], [ 72.2566671, 22.1165372 ], [ 72.2566622, 22.1167942 ], [ 72.2552797, 22.1168991 ], [ 72.253335, 22.1175102 ], [ 72.2534675, 22.1177697 ], [ 72.2532952, 22.1195676 ], [ 72.2524721, 22.1192964 ], [ 72.2515991, 22.1215971 ], [ 72.250776, 22.1213261 ], [ 72.2507911, 22.1205546 ], [ 72.2513432, 22.1205638 ], [ 72.251082, 22.1197876 ], [ 72.2516365, 22.1196678 ], [ 72.2526446, 22.1174984 ], [ 72.2526596, 22.1167269 ], [ 72.2529406, 22.1164744 ], [ 72.2530939, 22.1157052 ], [ 72.25337, 22.1157098 ], [ 72.2533551, 22.1164814 ], [ 72.2539096, 22.1163616 ], [ 72.2541905, 22.1161091 ], [ 72.2547401, 22.1162475 ], [ 72.2547501, 22.115733 ], [ 72.2536459, 22.1157145 ], [ 72.2537936, 22.1152025 ], [ 72.2542154, 22.1148232 ], [ 72.2543974, 22.1147855 ], [ 72.2544889, 22.1149568 ], [ 72.254765, 22.1149615 ], [ 72.2547699, 22.1147043 ], [ 72.2543604, 22.1144402 ], [ 72.2539669, 22.1134045 ], [ 72.2525719, 22.1141528 ], [ 72.2523109, 22.1133765 ], [ 72.2517588, 22.1133673 ], [ 72.2518813, 22.1141412 ], [ 72.2521523, 22.114403 ], [ 72.2520049, 22.114915 ], [ 72.2506348, 22.1143775 ], [ 72.2506148, 22.1154062 ], [ 72.2503413, 22.1152724 ], [ 72.2492398, 22.1151257 ], [ 72.2489837, 22.1140923 ], [ 72.2485223, 22.1142533 ], [ 72.2484367, 22.1138258 ], [ 72.2470618, 22.1135453 ], [ 72.2475002, 22.1122665 ], [ 72.2479196, 22.1120163 ], [ 72.2479096, 22.1125306 ], [ 72.2492921, 22.1124249 ], [ 72.2495732, 22.1121722 ], [ 72.2506822, 22.1119337 ], [ 72.2512243, 22.1124574 ], [ 72.2520548, 22.1123433 ], [ 72.2517688, 22.112853 ], [ 72.2523233, 22.1127332 ], [ 72.2527442, 22.1123548 ], [ 72.2531837, 22.1110758 ], [ 72.2523607, 22.1108048 ], [ 72.2523706, 22.1102904 ], [ 72.2512617, 22.1105291 ], [ 72.2512766, 22.1097574 ], [ 72.2493521, 22.1093388 ], [ 72.2490737, 22.1094631 ], [ 72.2492061, 22.1097226 ], [ 72.2490585, 22.1102346 ], [ 72.2487826, 22.1102299 ], [ 72.2486138, 22.1095429 ], [ 72.2487975, 22.1094584 ], [ 72.2488026, 22.1092012 ], [ 72.2485265, 22.1091966 ], [ 72.2482457, 22.1094491 ], [ 72.2482557, 22.1089347 ], [ 72.2477036, 22.1089254 ], [ 72.2479945, 22.1081584 ], [ 72.2468905, 22.1081399 ], [ 72.2470481, 22.1071135 ], [ 72.24747, 22.1067343 ], [ 72.2480245, 22.1066154 ], [ 72.2480294, 22.1063582 ], [ 72.2472016, 22.1063442 ], [ 72.2472065, 22.1060872 ], [ 72.248037, 22.1059721 ], [ 72.248177, 22.1058462 ], [ 72.2486114, 22.1048245 ], [ 72.2491634, 22.1048337 ], [ 72.2488724, 22.1056007 ], [ 72.250807, 22.1055041 ], [ 72.2510854, 22.1053807 ], [ 72.2510704, 22.1061522 ], [ 72.2516223, 22.1061615 ], [ 72.251494, 22.1056447 ], [ 72.2513589, 22.1055134 ], [ 72.2518168, 22.1054805 ], [ 72.2519034, 22.105909 ], [ 72.252453, 22.1060464 ], [ 72.2525879, 22.1061777 ], [ 72.2527115, 22.1069517 ], [ 72.2539629, 22.1064582 ], [ 72.2538453, 22.105427 ], [ 72.2543972, 22.1054365 ], [ 72.2544023, 22.1051792 ], [ 72.252009, 22.1053078 ], [ 72.2519234, 22.1048802 ], [ 72.2524753, 22.1048895 ], [ 72.2523418, 22.10463 ], [ 72.2523568, 22.1038585 ], [ 72.2527788, 22.1034792 ], [ 72.2533332, 22.1033603 ], [ 72.253363, 22.1018173 ], [ 72.2541886, 22.1019592 ], [ 72.2547331, 22.1023548 ], [ 72.2547431, 22.1018404 ], [ 72.2550166, 22.1019732 ], [ 72.2555685, 22.1019825 ], [ 72.2557085, 22.1018566 ], [ 72.2555858, 22.1010829 ], [ 72.2561404, 22.100963 ], [ 72.2562804, 22.1008372 ], [ 72.2564288, 22.1003252 ], [ 72.2569807, 22.1003344 ], [ 72.2570007, 22.0993057 ], [ 72.2578285, 22.0993197 ], [ 72.2578336, 22.0990624 ], [ 72.2572816, 22.0990532 ], [ 72.257283642391087, 22.098950199414066 ], [ 72.2572867, 22.098796 ], [ 72.2583955, 22.0985572 ], [ 72.2582619, 22.0982977 ], [ 72.2585728, 22.0965021 ], [ 72.2588537, 22.0962496 ], [ 72.2590071, 22.0954803 ], [ 72.2597384, 22.0955801 ], [ 72.25983, 22.0957514 ], [ 72.2592781, 22.0957421 ], [ 72.259273, 22.0959993 ], [ 72.2600961, 22.0962703 ], [ 72.2601111, 22.0954988 ], [ 72.2599306, 22.0954074 ], [ 72.2598499, 22.0947226 ], [ 72.2615008, 22.0950076 ], [ 72.2615108, 22.0944932 ], [ 72.2606828, 22.0944794 ], [ 72.2609837, 22.0931982 ], [ 72.2615356, 22.0932074 ], [ 72.261683, 22.0926952 ], [ 72.261824, 22.0925686 ], [ 72.2623759, 22.0925779 ], [ 72.2626594, 22.092197 ], [ 72.2621073, 22.0921878 ], [ 72.2621124, 22.0919307 ], [ 72.2634997, 22.0915675 ], [ 72.2636395, 22.0914418 ], [ 72.2636495, 22.0909273 ], [ 72.263517, 22.0906678 ], [ 72.2626866, 22.0907822 ], [ 72.2621271, 22.091159 ], [ 72.2622846, 22.0901326 ], [ 72.2621521, 22.0898731 ], [ 72.2607697, 22.0899782 ], [ 72.2602203, 22.0898408 ], [ 72.2604713, 22.0911312 ], [ 72.2590916, 22.0911082 ], [ 72.2587956, 22.0921322 ], [ 72.2576968, 22.0918566 ], [ 72.2577017, 22.0915994 ], [ 72.2585297, 22.0916132 ], [ 72.2585395, 22.0910989 ], [ 72.2574333, 22.0912085 ], [ 72.2571598, 22.0910757 ], [ 72.2571697, 22.0905614 ], [ 72.2577242, 22.0904416 ], [ 72.257864, 22.0903157 ], [ 72.2580126, 22.0898037 ], [ 72.2590247, 22.089651 ], [ 72.2592489, 22.0900817 ], [ 72.2596584, 22.090346 ], [ 72.2598058, 22.0898338 ], [ 72.2602301, 22.0893263 ], [ 72.2592169, 22.0894783 ], [ 72.2592787, 22.0885385 ], [ 72.2589674, 22.0881065 ], [ 72.2592936, 22.087767 ], [ 72.259442, 22.087255 ], [ 72.2588852, 22.087503 ], [ 72.258782, 22.0879273 ], [ 72.2574955, 22.0879942 ], [ 72.257618, 22.088768 ], [ 72.2574755, 22.089023 ], [ 72.2569236, 22.0890137 ], [ 72.2566278, 22.0900377 ], [ 72.2560759, 22.0900284 ], [ 72.2558147, 22.0892522 ], [ 72.254982, 22.0894955 ], [ 72.254972, 22.0900099 ], [ 72.2544201, 22.0900006 ], [ 72.2546811, 22.0907769 ], [ 72.2541292, 22.0907676 ], [ 72.2541143, 22.0915391 ], [ 72.2535622, 22.0915298 ], [ 72.2535473, 22.0923013 ], [ 72.2541018, 22.0921817 ], [ 72.2547837, 22.0925794 ], [ 72.2546363, 22.0930916 ], [ 72.2538034, 22.0933348 ], [ 72.2535125, 22.0941018 ], [ 72.252958, 22.0942205 ], [ 72.2518418, 22.0948455 ], [ 72.2521426, 22.0935641 ], [ 72.2529705, 22.093578 ], [ 72.2529756, 22.0933208 ], [ 72.2518765, 22.0930451 ], [ 72.2518865, 22.0925308 ], [ 72.2524335, 22.0927973 ], [ 72.2534486, 22.0902416 ], [ 72.2535896, 22.0901148 ], [ 72.2541442, 22.0899959 ], [ 72.2538881, 22.0889627 ], [ 72.2530551, 22.0892059 ], [ 72.2533411, 22.0886962 ], [ 72.2527917, 22.0885578 ], [ 72.2525206, 22.0882961 ], [ 72.2516977, 22.0880248 ], [ 72.2511559, 22.0875013 ], [ 72.2503305, 22.0873592 ], [ 72.2504978, 22.0858185 ], [ 72.2502419, 22.084785 ], [ 72.2499708, 22.0845232 ], [ 72.2495773, 22.0834875 ], [ 72.2501292, 22.0834968 ], [ 72.2501343, 22.0832396 ], [ 72.2493063, 22.0832256 ], [ 72.2493114, 22.0829685 ], [ 72.2501392, 22.0829823 ], [ 72.2501542, 22.0822108 ], [ 72.2482101, 22.0828209 ], [ 72.2470888, 22.0837028 ], [ 72.2473574, 22.0840929 ], [ 72.2479068, 22.0842312 ], [ 72.2476157, 22.084998 ], [ 72.2481678, 22.0850073 ], [ 72.2480192, 22.0855195 ], [ 72.2481179, 22.0875792 ], [ 72.2489506, 22.0873359 ], [ 72.2490733, 22.0881099 ], [ 72.2494802, 22.0885021 ], [ 72.2500296, 22.0886404 ], [ 72.2500196, 22.0891549 ], [ 72.2497461, 22.0890211 ], [ 72.2491918, 22.0891409 ], [ 72.2489308, 22.0883647 ], [ 72.2483814, 22.0882263 ], [ 72.246999, 22.0883322 ], [ 72.2475658, 22.0875699 ], [ 72.2451829, 22.087184 ], [ 72.2452347, 22.0867587 ], [ 72.2453757, 22.0866321 ], [ 72.2462035, 22.0866461 ], [ 72.2467456, 22.0871696 ], [ 72.247295, 22.087308 ], [ 72.2469104, 22.085758 ], [ 72.2470689, 22.0847315 ], [ 72.2465095, 22.0851076 ], [ 72.2460508, 22.0851405 ], [ 72.246246, 22.0844605 ], [ 72.245689, 22.0847083 ], [ 72.2456792, 22.0852227 ], [ 72.2458586, 22.0853133 ], [ 72.2456692, 22.085737 ], [ 72.2451147, 22.0858559 ], [ 72.2448338, 22.0861084 ], [ 72.2442795, 22.0862282 ], [ 72.2442595, 22.0872569 ], [ 72.2449907, 22.0873567 ], [ 72.2449438, 22.0875257 ], [ 72.2441011, 22.0882832 ], [ 72.2440911, 22.0887977 ], [ 72.2439485, 22.0890524 ], [ 72.2436726, 22.0890479 ], [ 72.243559, 22.0877597 ], [ 72.2430221, 22.0869787 ], [ 72.2430421, 22.08595 ], [ 72.2434815, 22.084671 ], [ 72.2412613, 22.0852764 ], [ 72.2409805, 22.0855289 ], [ 72.2401527, 22.0855149 ], [ 72.2398792, 22.0853821 ], [ 72.2400217, 22.0851273 ], [ 72.2399092, 22.0838391 ], [ 72.2388079, 22.0836913 ], [ 72.2382634, 22.0832966 ], [ 72.2381451, 22.0822656 ], [ 72.2382886, 22.0820107 ], [ 72.2369089, 22.0819874 ], [ 72.2369138, 22.0817302 ], [ 72.2377416, 22.0817442 ], [ 72.2377567, 22.0809727 ], [ 72.2385845, 22.0809867 ], [ 72.2387469, 22.079703 ], [ 72.2386146, 22.0794435 ], [ 72.2394424, 22.0794575 ], [ 72.2394522, 22.0789432 ], [ 72.2389004, 22.0789339 ], [ 72.238797, 22.0771313 ], [ 72.2385261, 22.0768693 ], [ 72.2385511, 22.0755835 ], [ 72.2384186, 22.075324 ], [ 72.2378667, 22.0753146 ], [ 72.2373449, 22.0737621 ], [ 72.2365146, 22.0738763 ], [ 72.2362338, 22.0741288 ], [ 72.2354035, 22.0742439 ], [ 72.2353884, 22.0750154 ], [ 72.2342821, 22.075125 ], [ 72.2340087, 22.0749922 ], [ 72.2340287, 22.0739634 ], [ 72.233206, 22.0736922 ], [ 72.2335171, 22.0718967 ], [ 72.2326917, 22.0717536 ], [ 72.2318565, 22.0721258 ], [ 72.2318465, 22.0726401 ], [ 72.2301859, 22.0728693 ], [ 72.2301657, 22.073898 ], [ 72.2307176, 22.0739073 ], [ 72.2309686, 22.075198 ], [ 72.2304167, 22.0751885 ], [ 72.2304367, 22.0741598 ], [ 72.2298873, 22.0740215 ], [ 72.2296165, 22.0737597 ], [ 72.2279559, 22.0739888 ], [ 72.2276825, 22.0738559 ], [ 72.2276724, 22.0743703 ], [ 72.2268397, 22.0746134 ], [ 72.2265286, 22.0764089 ], [ 72.2207127, 22.072703 ], [ 72.2179419, 22.06601 ], [ 72.2145352, 22.0614425 ], [ 72.2162159, 22.0575485 ], [ 72.2141377, 22.0565501 ], [ 72.2167393, 22.0527695 ], [ 72.2165145, 22.0517574 ], [ 72.2176065, 22.0509834 ], [ 72.2187307, 22.0458034 ], [ 72.2182489, 22.0442851 ], [ 72.2225528, 22.0390454 ], [ 72.2224564, 22.0382118 ], [ 72.2209468, 22.0359789 ], [ 72.2210111, 22.0281188 ], [ 72.2196722, 22.0235497 ], [ 72.2219205, 22.0212868 ], [ 72.2183874, 22.0175351 ], [ 72.2147901, 22.0122944 ], [ 72.212863, 22.0127113 ], [ 72.2114819, 22.0153018 ], [ 72.2082379, 22.0178328 ], [ 72.2018463, 22.0246216 ], [ 72.2036771, 22.0271525 ], [ 72.2027457, 22.0365608 ], [ 72.1941583, 22.0380927 ], [ 72.1907698, 22.0384649 ], [ 72.190288, 22.0423054 ], [ 72.1897099, 22.0435558 ], [ 72.1901917, 22.048185 ], [ 72.1904005, 22.0554338 ], [ 72.1897581, 22.0583362 ], [ 72.1893727, 22.0641407 ], [ 72.1915407, 22.0732043 ], [ 72.1919903, 22.074886 ], [ 72.1944153, 22.0769694 ], [ 72.1969527, 22.0800797 ], [ 72.1974505, 22.0813595 ], [ 72.1968242, 22.0848268 ], [ 72.1952664, 22.0908089 ], [ 72.1898223, 22.0915083 ], [ 72.1889551, 22.0920886 ], [ 72.188393, 22.092654 ], [ 72.1865141, 22.0977727 ], [ 72.1872047, 22.0980703 ], [ 72.1869317, 22.0985762 ], [ 72.185901663143284, 22.098950199414066 ], [ 72.18590166314327, 22.098950199414066 ], [ 72.1845549, 22.0994392 ], [ 72.1835592, 22.0995136 ], [ 72.1834628, 22.1003171 ], [ 72.1819372, 22.0999451 ], [ 72.1792071, 22.0991863 ], [ 72.179069321613298, 22.098950199414066 ], [ 72.1777136, 22.096627 ], [ 72.1826599, 22.0971031 ], [ 72.1847958, 22.0966716 ], [ 72.1862411, 22.0905857 ], [ 72.1928897, 22.0893357 ], [ 72.194335, 22.0851691 ], [ 72.1945167, 22.0819201 ], [ 72.1898836, 22.0828881 ], [ 72.1847735, 22.0806573 ], [ 72.1845918, 22.0760693 ], [ 72.1820936, 22.0726387 ], [ 72.1799133, 22.0680926 ], [ 72.1789822, 22.0653774 ], [ 72.1767337, 22.0559898 ], [ 72.1691936, 22.0578211 ], [ 72.1669225, 22.0578 ], [ 72.1625846, 22.0583052 ], [ 72.1626527, 22.0595681 ], [ 72.1634476, 22.0600101 ], [ 72.1645151, 22.0618413 ], [ 72.1644242, 22.0623044 ], [ 72.1621758, 22.0642408 ], [ 72.1609721, 22.0655037 ], [ 72.1579742, 22.0710813 ], [ 72.1585193, 22.0776478 ], [ 72.1540452, 22.0766586 ], [ 72.1521147, 22.0764902 ], [ 72.1477995, 22.0794577 ], [ 72.1451423, 22.0833722 ], [ 72.14194, 22.0918952 ], [ 72.1395553, 22.094694 ], [ 72.140918, 22.0960197 ], [ 72.1404865, 22.0962933 ], [ 72.138874, 22.0989447 ], [ 72.138857919002035, 22.099044023984533 ], [ 72.1383289, 22.1023115 ], [ 72.1370344, 22.1055205 ], [ 72.1371593, 22.1064252 ], [ 72.1409294, 22.1109386 ], [ 72.1410089, 22.1112963 ], [ 72.138681, 22.1118118 ], [ 72.1387037, 22.1120538 ], [ 72.141077, 22.1115804 ], [ 72.1413723, 22.1138633 ], [ 72.1423715, 22.1158201 ], [ 72.1427349, 22.1173876 ], [ 72.1426214, 22.1239203 ], [ 72.1410997, 22.125351 ], [ 72.1382521, 22.1255653 ], [ 72.138464, 22.1223554 ], [ 72.1372174, 22.1143801 ], [ 72.1371848, 22.1123571 ], [ 72.1380323, 22.1121698 ], [ 72.1379934, 22.1119825 ], [ 72.1369593, 22.1120689 ], [ 72.1365706, 22.1118817 ], [ 72.1317966, 22.108035 ], [ 72.1304593, 22.1075452 ], [ 72.1304982, 22.1056363 ], [ 72.1290598, 22.1050672 ], [ 72.1283911, 22.1051536 ], [ 72.1238582, 22.1049591 ], [ 72.1217123, 22.1046998 ], [ 72.1204682, 22.1043828 ], [ 72.1178423, 22.103454 ], [ 72.1156102, 22.103179 ], [ 72.1152253, 22.1029243 ], [ 72.1149064, 22.1029345 ], [ 72.1154672, 22.1046663 ], [ 72.1148185, 22.1047173 ], [ 72.1137959, 22.1039838 ], [ 72.1103238, 22.1038512 ], [ 72.1064206, 22.1040673 ], [ 72.1030773, 22.104269 ], [ 72.1006048, 22.103174 ], [ 72.1009781, 22.1025833 ], [ 72.1024864, 22.1026553 ], [ 72.1075312, 22.1018374 ], [ 72.1139967, 22.1006658 ], [ 72.1145245, 22.1018069 ], [ 72.1147444, 22.1017661 ], [ 72.1144915, 22.100727 ], [ 72.1178891, 22.1001055 ], [ 72.118931844237764, 22.099150199414066 ], [ 72.118931844237778, 22.099150199414066 ], [ 72.1296326, 22.0893468 ], [ 72.1350424, 22.0789133 ], [ 72.1369557, 22.0765085 ], [ 72.1389569, 22.0747559 ], [ 72.143817, 22.0710876 ], [ 72.1469838, 22.0702724 ], [ 72.1500846, 22.0695184 ], [ 72.1538451, 22.0649328 ], [ 72.1555384, 22.0639952 ], [ 72.156748, 22.0637099 ], [ 72.1573197, 22.0641379 ], [ 72.1594969, 22.0642398 ], [ 72.1602467, 22.0636108 ], [ 72.1613975, 22.0610167 ], [ 72.1608688, 22.0576155 ], [ 72.1610243, 22.0562607 ], [ 72.1616774, 22.0557707 ], [ 72.1651295, 22.0554536 ], [ 72.1669956, 22.0540124 ], [ 72.163419, 22.0501498 ], [ 72.157852, 22.0551942 ], [ 72.1557683, 22.0553095 ], [ 72.1474333, 22.0539259 ], [ 72.1401558, 22.0491409 ], [ 72.1327228, 22.0431738 ], [ 72.1354596, 22.0393109 ], [ 72.1387252, 22.0400893 ], [ 72.1409333, 22.036774 ], [ 72.1460338, 22.0280388 ], [ 72.1483352, 22.0281829 ], [ 72.1509166, 22.0210905 ], [ 72.1481797, 22.0195624 ], [ 72.1497659, 22.0166792 ], [ 72.1644522, 21.9998097 ], [ 72.1899551, 21.9939146 ], [ 72.1900795, 21.9914346 ], [ 72.2016178, 21.9866475 ], [ 72.200556479225156, 21.984775338671877 ], [ 72.1974815, 21.9793511 ], [ 72.1978547, 21.9766401 ], [ 72.1981164, 21.9590885 ], [ 72.1966869, 21.9569979 ], [ 72.1959612, 21.9531226 ], [ 72.1915629, 21.9465343 ], [ 72.1899685, 21.9462997 ], [ 72.1858561, 21.9523985 ], [ 72.1830412, 21.9534999 ], [ 72.1818757, 21.9565288 ], [ 72.181172, 21.9574161 ], [ 72.1795776, 21.960557 ], [ 72.1778403, 21.9603939 ], [ 72.1782581, 21.9595984 ], [ 72.1803384, 21.956944 ], [ 72.1806882, 21.9560931 ], [ 72.1806027, 21.9556892 ], [ 72.180315, 21.9553359 ], [ 72.1789233, 21.9551628 ], [ 72.1788455, 21.9555666 ], [ 72.1786589, 21.9555955 ], [ 72.1786125, 21.9559709 ], [ 72.1794056, 21.9561007 ], [ 72.17953, 21.9562882 ], [ 72.1767309, 21.9603841 ], [ 72.1757364, 21.9603045 ], [ 72.1737571, 21.9628744 ], [ 72.1678854, 21.9649343 ], [ 72.1684572, 21.9752742 ], [ 72.1731686, 21.9771857 ], [ 72.1741452, 21.9788916 ], [ 72.1729869, 21.9809345 ], [ 72.1707612, 21.9830616 ], [ 72.1721693, 21.9845568 ], [ 72.1663779, 21.9848727 ], [ 72.164151996283763, 21.984775338671877 ], [ 72.1639705, 21.9847674 ], [ 72.163960226720278, 21.984775338671877 ], [ 72.1627441, 21.9857151 ], [ 72.1599733, 21.9883054 ], [ 72.1574296, 21.9900533 ], [ 72.156067, 21.9908746 ], [ 72.153754, 21.9889775 ], [ 72.1528039, 21.9881892 ], [ 72.1521419, 21.9877133 ], [ 72.1499475, 21.9862098 ], [ 72.1477519, 21.9856572 ], [ 72.1472006, 21.9856475 ], [ 72.1468119, 21.9856665 ], [ 72.1464216, 21.9860171 ], [ 72.1454703, 21.9876343 ], [ 72.1445555, 21.9889688 ], [ 72.1415065, 21.9920449 ], [ 72.1408601, 21.9931644 ], [ 72.1411187, 21.9955335 ], [ 72.1410871, 21.9965678 ], [ 72.1409036, 21.9976203 ], [ 72.1405857, 21.9993972 ], [ 72.1391129, 22.0062426 ], [ 72.1356163, 22.0101471 ], [ 72.1345827, 22.0110441 ], [ 72.1339889, 22.0113704 ], [ 72.1284471, 22.0128179 ], [ 72.1281282, 22.0129301 ], [ 72.1202647, 22.0252768 ], [ 72.1190442, 22.0257151 ], [ 72.1179776, 22.0257762 ], [ 72.1142281, 22.0252972 ], [ 72.106762, 22.0163472 ], [ 72.1065641, 22.0162555 ], [ 72.10166, 22.0177336 ], [ 72.1017259, 22.0169894 ], [ 72.101704, 22.0167652 ], [ 72.100912, 22.0134989 ], [ 72.1006537, 22.0135586 ], [ 72.1014659, 22.0165891 ], [ 72.1014439, 22.0172313 ], [ 72.1013229, 22.0178328 ], [ 72.1006852, 22.0180978 ], [ 72.1002893, 22.0209011 ], [ 72.097417306249994, 22.024939122344446 ], [ 72.0963191, 22.0264832 ], [ 72.0931963, 22.0326397 ], [ 72.0905683, 22.0350554 ], [ 72.0840039, 22.0381233 ], [ 72.0840259, 22.0344132 ], [ 72.0781102, 22.0356363 ], [ 72.0778486, 22.0388713 ], [ 72.077351, 22.0414946 ], [ 72.0749407, 22.0471303 ], [ 72.073961, 22.0552735 ], [ 72.0723282, 22.0554897 ], [ 72.0720017, 22.0543655 ], [ 72.0707888, 22.0547402 ], [ 72.0709909, 22.0557923 ], [ 72.0696536, 22.0560373 ], [ 72.0691297, 22.0560933 ], [ 72.0599502, 22.0515118 ], [ 72.0506462, 22.0495135 ], [ 72.0583651, 22.036427 ], [ 72.068877, 22.0398312 ], [ 72.0712961, 22.0347351 ], [ 72.0699326, 22.03288 ], [ 72.0617518, 22.0296999 ], [ 72.0544727, 22.0314123 ], [ 72.0487329, 22.0329615 ], [ 72.0455222, 22.0313511 ], [ 72.0425093, 22.0315142 ], [ 72.0377812, 22.0298018 ], [ 72.0307, 22.0310453 ], [ 72.0273203, 22.029681 ], [ 72.0312787, 22.0220973 ], [ 72.0372604, 22.0209556 ], [ 72.04355, 22.0235448 ], [ 72.0448474, 22.0246456 ], [ 72.0538639, 22.027887 ], [ 72.0565249, 22.0278055 ], [ 72.0631223, 22.0259504 ], [ 72.0652775, 22.0250534 ], [ 72.079242, 22.0147374 ], [ 72.094548, 22.0089795 ], [ 72.097617306250001, 22.007278853613347 ], [ 72.097617306250001, 22.007278853613343 ], [ 72.0982646, 22.0069202 ], [ 72.100428, 22.013131 ], [ 72.1007689, 22.0129781 ], [ 72.0983062, 22.0051322 ], [ 72.097417306249994, 22.002279858022046 ], [ 72.0950515, 21.9946883 ], [ 72.097417306249994, 21.994721836125532 ], [ 72.0993618, 21.9947494 ], [ 72.0999556, 21.9927919 ], [ 72.0983282, 21.9899371 ], [ 72.097617306250001, 21.989454307805499 ], [ 72.097617306250001, 21.989454307805495 ], [ 72.0967668, 21.9888767 ], [ 72.0965689, 21.9881834 ], [ 72.097617306250001, 21.987924218401858 ], [ 72.0978884, 21.9878572 ], [ 72.0985261, 21.9887544 ], [ 72.1010111, 21.9894885 ], [ 72.1043099, 21.9888767 ], [ 72.1052115, 21.9890603 ], [ 72.1071806, 21.986876 ], [ 72.1085806, 21.9858411 ], [ 72.1118309, 21.9849615 ], [ 72.1119189, 21.9860686 ], [ 72.114173, 21.9874859 ], [ 72.1156904, 21.9859055 ], [ 72.117401957407154, 21.984975338671877 ], [ 72.117671534472848, 21.984828834581265 ], [ 72.117769970429279, 21.984775338671877 ], [ 72.1223599, 21.9822809 ], [ 72.1263415, 21.98026 ], [ 72.1261238, 21.983937 ], [ 72.1251752, 21.9838938 ], [ 72.125240868453076, 21.984959416698445 ], [ 72.1253618, 21.9869218 ], [ 72.1244132, 21.9906708 ], [ 72.1283786, 21.9923434 ], [ 72.1303845, 21.9924443 ], [ 72.1325771, 21.9928913 ], [ 72.1369001, 21.9919541 ], [ 72.1385366, 21.990941 ], [ 72.1396802, 21.9895238 ], [ 72.1413735, 21.9866893 ], [ 72.1412525, 21.9865262 ], [ 72.1387565, 21.9869646 ], [ 72.1363704, 21.9867097 ], [ 72.1348201, 21.9859043 ], [ 72.134294634439911, 21.984775338671877 ], [ 72.1339184, 21.983967 ], [ 72.132379, 21.9830085 ], [ 72.1310595, 21.9807246 ], [ 72.1291683, 21.9782774 ], [ 72.1265843, 21.9798621 ], [ 72.1254297, 21.9761199 ], [ 72.1283836, 21.9750855 ], [ 72.1301097, 21.9772919 ], [ 72.1339195, 21.9784166 ], [ 72.1357855, 21.9764266 ], [ 72.137636, 21.9754893 ], [ 72.140886, 21.9750279 ], [ 72.1471372, 21.9708026 ], [ 72.1509004, 21.9707737 ], [ 72.1512114, 21.9704276 ], [ 72.1561408, 21.9701104 ], [ 72.1564207, 21.9676876 ], [ 72.1481635, 21.9682501 ], [ 72.1481635, 21.9689134 ], [ 72.1443848, 21.9672406 ], [ 72.1437161, 21.9672406 ], [ 72.1417879, 21.9690144 ], [ 72.1404039, 21.9705286 ], [ 72.1338573, 21.9706151 ], [ 72.1332353, 21.9707737 ], [ 72.1326288, 21.9701681 ], [ 72.1317424, 21.9700815 ], [ 72.1313848, 21.9690721 ], [ 72.1305917, 21.9688413 ], [ 72.1284769, 21.9693028 ], [ 72.1276838, 21.9702978 ], [ 72.128819, 21.9735281 ], [ 72.1261288, 21.974451 ], [ 72.124636, 21.9742636 ], [ 72.1230279, 21.9697602 ], [ 72.117741, 21.9693119 ], [ 72.1174654, 21.9693069 ], [ 72.117455, 21.9698214 ], [ 72.1160738, 21.9699252 ], [ 72.1157956, 21.9700493 ], [ 72.1157852, 21.9705638 ], [ 72.1152312, 21.9706821 ], [ 72.1138553, 21.9705298 ], [ 72.1138396, 21.9713013 ], [ 72.1121802, 21.9715292 ], [ 72.1123072, 21.9720461 ], [ 72.111582, 21.9738341 ], [ 72.10992, 21.9741901 ], [ 72.1090825, 21.9746899 ], [ 72.1077039, 21.9746657 ], [ 72.1068899, 21.9740085 ], [ 72.1069003, 21.9734942 ], [ 72.1063463, 21.9736126 ], [ 72.1057871, 21.973989 ], [ 72.1054905, 21.9750129 ], [ 72.1038232, 21.9756262 ], [ 72.1027204, 21.9756067 ], [ 72.102442, 21.9757309 ], [ 72.1023333, 21.9764122 ], [ 72.1021481, 21.9766254 ], [ 72.1018723, 21.9766207 ], [ 72.101053, 21.9762208 ], [ 72.1012061, 21.9754517 ], [ 72.101074, 21.975192 ], [ 72.0993989, 21.9761915 ], [ 72.098943, 21.9782414 ], [ 72.0994839, 21.9787655 ], [ 72.0994735, 21.9792797 ], [ 72.0993308, 21.9795345 ], [ 72.0998797, 21.9796723 ], [ 72.1000145, 21.9798038 ], [ 72.0998667, 21.9803156 ], [ 72.0993152, 21.980306 ], [ 72.0990551, 21.9795296 ], [ 72.0984985, 21.979777 ], [ 72.0984881, 21.9802913 ], [ 72.0979366, 21.9802816 ], [ 72.0976765, 21.9795052 ], [ 72.0938192, 21.9793079 ], [ 72.0927321, 21.9785169 ], [ 72.0921781, 21.978636 ], [ 72.0920502, 21.9781193 ], [ 72.0917797, 21.9778573 ], [ 72.0916529, 21.9773406 ], [ 72.0908232, 21.977454 ], [ 72.090264, 21.9778305 ], [ 72.0902377, 21.9791162 ], [ 72.0894157, 21.9788443 ], [ 72.0898151, 21.9773954 ], [ 72.0902691, 21.9775732 ], [ 72.0902796, 21.977059 ], [ 72.090831, 21.9770688 ], [ 72.0908415, 21.9765543 ], [ 72.0897387, 21.9765349 ], [ 72.08963, 21.9772162 ], [ 72.0891795, 21.9769104 ], [ 72.0861415, 21.9771136 ], [ 72.0855822, 21.9774901 ], [ 72.0855664, 21.9782614 ], [ 72.0847393, 21.9782468 ], [ 72.0847077, 21.9797896 ], [ 72.0825047, 21.9796214 ], [ 72.0808451, 21.9798492 ], [ 72.0805643, 21.9801013 ], [ 72.0800154, 21.9799633 ], [ 72.0801634, 21.9794515 ], [ 72.0808663, 21.9788205 ], [ 72.0825284, 21.9784648 ], [ 72.0822632, 21.9779456 ], [ 72.0817117, 21.9779357 ], [ 72.0817329, 21.976907 ], [ 72.0809032, 21.9770204 ], [ 72.0803411, 21.977525 ], [ 72.078398, 21.978134 ], [ 72.0783876, 21.9786483 ], [ 72.0761793, 21.9787371 ], [ 72.0759009, 21.9788611 ], [ 72.0763035, 21.9793827 ], [ 72.0764312, 21.9798996 ], [ 72.0756174, 21.9792415 ], [ 72.0747901, 21.9792268 ], [ 72.0742309, 21.9796031 ], [ 72.0740714, 21.9806292 ], [ 72.0735095, 21.9811336 ], [ 72.0726612, 21.9821474 ], [ 72.0726401, 21.9831761 ], [ 72.072359, 21.9834283 ], [ 72.0722112, 21.9839401 ], [ 72.0716571, 21.9840584 ], [ 72.070858596291586, 21.984775338671877 ], [ 72.0708142, 21.9848152 ], [ 72.0669277, 21.9860317 ], [ 72.0666467, 21.9862841 ], [ 72.0649897, 21.9863835 ], [ 72.0650003, 21.9858692 ], [ 72.0666546, 21.9858987 ], [ 72.0666652, 21.9853844 ], [ 72.0688788, 21.9850378 ], [ 72.069019432703186, 21.984975338671877 ], [ 72.0699924, 21.9845432 ], [ 72.0708221, 21.9844298 ], [ 72.0709701, 21.983918 ], [ 72.071813, 21.9831614 ], [ 72.0726824, 21.9811189 ], [ 72.0726928, 21.9806046 ], [ 72.0735358, 21.9798479 ], [ 72.0736847, 21.979336 ], [ 72.0742362, 21.9793459 ], [ 72.0742468, 21.9788316 ], [ 72.0747981, 21.9788414 ], [ 72.0750948, 21.9778178 ], [ 72.0739816, 21.9783124 ], [ 72.0738327, 21.9788242 ], [ 72.0724276, 21.9800854 ], [ 72.0719935, 21.9811066 ], [ 72.0714475, 21.9808395 ], [ 72.07159, 21.980585 ], [ 72.0716006, 21.9800707 ], [ 72.0710599, 21.9795464 ], [ 72.070933, 21.9790297 ], [ 72.0701031, 21.9791431 ], [ 72.0692867, 21.9786141 ], [ 72.0679134, 21.9783323 ], [ 72.0670969, 21.9778031 ], [ 72.065721, 21.9776504 ], [ 72.065869, 21.9771385 ], [ 72.0654666, 21.9766169 ], [ 72.0660179, 21.9766267 ], [ 72.0657527, 21.9761075 ], [ 72.067305, 21.9764801 ], [ 72.0673965, 21.9766513 ], [ 72.067672, 21.9766562 ], [ 72.0676773, 21.9763992 ], [ 72.0674069, 21.976137 ], [ 72.0693316, 21.9764287 ], [ 72.0694583, 21.9769454 ], [ 72.069594, 21.977076 ], [ 72.0701455, 21.9770858 ], [ 72.0712562, 21.9767203 ], [ 72.0713536, 21.9765525 ], [ 72.0715344, 21.9765963 ], [ 72.072078, 21.9769923 ], [ 72.0720886, 21.976478 ], [ 72.0726399, 21.9764878 ], [ 72.0725227, 21.9754566 ], [ 72.0722523, 21.9751947 ], [ 72.0722575, 21.9749374 ], [ 72.0728194, 21.974433 ], [ 72.0729737, 21.9736642 ], [ 72.0738007, 21.9736789 ], [ 72.0738113, 21.9731644 ], [ 72.0746384, 21.9731794 ], [ 72.0746437, 21.9729221 ], [ 72.0738219, 21.9726502 ], [ 72.0738272, 21.9723931 ], [ 72.0757518, 21.9726846 ], [ 72.0757622, 21.9721703 ], [ 72.0763137, 21.9721801 ], [ 72.0763294, 21.9714088 ], [ 72.0754996, 21.971522 ], [ 72.074951, 21.9713842 ], [ 72.0753851, 21.9703629 ], [ 72.0755261, 21.9702365 ], [ 72.0793963, 21.9697908 ], [ 72.0796667, 21.9700529 ], [ 72.0804911, 21.9701966 ], [ 72.0806389, 21.9696848 ], [ 72.0807799, 21.9695581 ], [ 72.0818854, 21.9694496 ], [ 72.0820069, 21.9702236 ], [ 72.0818642, 21.9704784 ], [ 72.0824131, 21.9706162 ], [ 72.0826835, 21.9708783 ], [ 72.0837862, 21.970898 ], [ 72.084868, 21.9719461 ], [ 72.0856951, 21.9719609 ], [ 72.0862623, 21.9711992 ], [ 72.0869542, 21.9711449 ], [ 72.0905416, 21.9699374 ], [ 72.0907903, 21.9707581 ], [ 72.091971, 21.9703501 ], [ 72.0926092, 21.9717897 ], [ 72.0953516, 21.9709739 ], [ 72.0961147, 21.9723033 ], [ 72.0992842, 21.9711018 ], [ 72.098577, 21.9689104 ], [ 72.1041957, 21.9677404 ], [ 72.1024688, 21.9658602 ], [ 72.1019252, 21.965815 ], [ 72.1002171, 21.9661629 ], [ 72.099279, 21.9641929 ], [ 72.0973947, 21.9640148 ], [ 72.0947044, 21.963989 ], [ 72.0943261, 21.9645614 ], [ 72.09461, 21.9657752 ], [ 72.0934371, 21.9648635 ], [ 72.0909039, 21.9623914 ], [ 72.0886539, 21.9621098 ], [ 72.088786, 21.9623695 ], [ 72.0887756, 21.9628838 ], [ 72.0886329, 21.9631386 ], [ 72.0878034, 21.963252 ], [ 72.0875329, 21.9629898 ], [ 72.0869842, 21.962852 ], [ 72.0869893, 21.9625948 ], [ 72.0875433, 21.9624755 ], [ 72.0879695, 21.9618405 ], [ 72.0885314, 21.9613359 ], [ 72.0886801, 21.9608241 ], [ 72.0895072, 21.9608388 ], [ 72.0893794, 21.9603221 ], [ 72.0895202, 21.9601954 ], [ 72.0906231, 21.9602149 ], [ 72.0911848, 21.9597105 ], [ 72.0931145, 21.9597447 ], [ 72.0947606, 21.9601601 ], [ 72.094331, 21.9609242 ], [ 72.0943101, 21.9619528 ], [ 72.0944458, 21.9620834 ], [ 72.0955484, 21.962103 ], [ 72.0956831, 21.9622344 ], [ 72.0958111, 21.9627511 ], [ 72.0966433, 21.9625086 ], [ 72.0966329, 21.9630229 ], [ 72.0988383, 21.963062 ], [ 72.0983341, 21.9607379 ], [ 72.0977826, 21.9607281 ], [ 72.0977019, 21.957897 ], [ 72.0973044, 21.9571182 ], [ 72.0978559, 21.957128 ], [ 72.0976879, 21.9564408 ], [ 72.0984202, 21.9564943 ], [ 72.099788, 21.9570329 ], [ 72.1011638, 21.9571864 ], [ 72.1011534, 21.9577006 ], [ 72.1025395, 21.9573389 ], [ 72.1032413, 21.9567086 ], [ 72.1035327, 21.955942 ], [ 72.1038136, 21.9556897 ], [ 72.1037179, 21.95363 ], [ 72.1031691, 21.9534912 ], [ 72.102064, 21.9536009 ], [ 72.1017674, 21.9546245 ], [ 72.1003864, 21.9547284 ], [ 72.1001056, 21.9549806 ], [ 72.0995569, 21.9548428 ], [ 72.0996994, 21.954588 ], [ 72.0997202, 21.9535595 ], [ 72.0994499, 21.9532973 ], [ 72.099455, 21.9530403 ], [ 72.1001577, 21.952409 ], [ 72.1007143, 21.9521616 ], [ 72.1018196, 21.952053 ], [ 72.1019674, 21.9515411 ], [ 72.1021082, 21.9514145 ], [ 72.1037701, 21.9510584 ], [ 72.1037805, 21.9505442 ], [ 72.1043344, 21.9504249 ], [ 72.1044743, 21.950299 ], [ 72.10449, 21.9495277 ], [ 72.1046308, 21.9494011 ], [ 72.1062823, 21.9495593 ], [ 72.1057517, 21.9485209 ], [ 72.1052031, 21.9483822 ], [ 72.1049326, 21.94812 ], [ 72.104384, 21.9479823 ], [ 72.1045316, 21.9474705 ], [ 72.1046726, 21.9473438 ], [ 72.1057752, 21.9473633 ], [ 72.1063212, 21.9476302 ], [ 72.1071483, 21.9476447 ], [ 72.1079908, 21.9468878 ], [ 72.1085446, 21.9467695 ], [ 72.1077438, 21.9454689 ], [ 72.1071846, 21.9458447 ], [ 72.1033256, 21.9457766 ], [ 72.1030447, 21.9460288 ], [ 72.0961405, 21.9465504 ], [ 72.0964318, 21.9457838 ], [ 72.0958805, 21.9457742 ], [ 72.0958648, 21.9465455 ], [ 72.0953108, 21.946664 ], [ 72.0947491, 21.9471684 ], [ 72.092544, 21.9471295 ], [ 72.0922657, 21.9472537 ], [ 72.0924397, 21.9454559 ], [ 72.0920424, 21.9446772 ], [ 72.0909425, 21.9445287 ], [ 72.090672, 21.9442665 ], [ 72.0898478, 21.9441238 ], [ 72.0898582, 21.9436096 ], [ 72.0893069, 21.9435997 ], [ 72.089047, 21.9428233 ], [ 72.0887688, 21.9429466 ], [ 72.0882175, 21.9429369 ], [ 72.08804, 21.9427171 ], [ 72.0882411, 21.94178 ], [ 72.0879627, 21.9419035 ], [ 72.0863089, 21.941874 ], [ 72.0846629, 21.9414593 ], [ 72.0848861, 21.9440358 ], [ 72.0854375, 21.9440456 ], [ 72.0854322, 21.9443028 ], [ 72.0843271, 21.9444113 ], [ 72.0835053, 21.9441395 ], [ 72.0829646, 21.9436154 ], [ 72.0824133, 21.9436056 ], [ 72.081597, 21.9430766 ], [ 72.0810457, 21.9430668 ], [ 72.0793813, 21.9435517 ], [ 72.0763415, 21.9438838 ], [ 72.0763519, 21.9433695 ], [ 72.0769058, 21.9432505 ], [ 72.0771893, 21.94287 ], [ 72.0763624, 21.9428553 ], [ 72.0762504, 21.941567 ], [ 72.0763993, 21.9410552 ], [ 72.0755671, 21.9412977 ], [ 72.0755356, 21.9428405 ], [ 72.0752598, 21.9428356 ], [ 72.0752863, 21.9415498 ], [ 72.074735, 21.94154 ], [ 72.0747244, 21.9420545 ], [ 72.0744515, 21.9419205 ], [ 72.0739001, 21.9419106 ], [ 72.0730627, 21.9424102 ], [ 72.072501, 21.9429146 ], [ 72.0708391, 21.9432713 ], [ 72.0708287, 21.9437857 ], [ 72.0702827, 21.9435187 ], [ 72.0702933, 21.9430044 ], [ 72.0680909, 21.942836 ], [ 72.0678177, 21.9427029 ], [ 72.0681145, 21.9416793 ], [ 72.0670041, 21.9420448 ], [ 72.0667232, 21.9422971 ], [ 72.0647937, 21.9422626 ], [ 72.0645233, 21.9420006 ], [ 72.0639748, 21.9418624 ], [ 72.0639642, 21.9423769 ], [ 72.062859, 21.9424852 ], [ 72.0614915, 21.9419464 ], [ 72.0603916, 21.9417984 ], [ 72.060683, 21.941032 ], [ 72.0612317, 21.94117 ], [ 72.0615019, 21.9414319 ], [ 72.0625993, 21.9417088 ], [ 72.0627391, 21.9415833 ], [ 72.062755, 21.9408118 ], [ 72.062896, 21.9406852 ], [ 72.0653872, 21.9402153 ], [ 72.0664898, 21.940235 ], [ 72.0670515, 21.9397305 ], [ 72.0725773, 21.9391864 ], [ 72.0725877, 21.9386721 ], [ 72.0739739, 21.9383106 ], [ 72.0745356, 21.9378061 ], [ 72.0756408, 21.9376976 ], [ 72.0758465, 21.9343571 ], [ 72.0759952, 21.9338453 ], [ 72.076271, 21.9338502 ], [ 72.0762498, 21.9348787 ], [ 72.0768011, 21.9348885 ], [ 72.0771029, 21.9336077 ], [ 72.0775106, 21.9338721 ], [ 72.0772088, 21.9351529 ], [ 72.0771931, 21.9359244 ], [ 72.0775805, 21.9372176 ], [ 72.0781319, 21.9372274 ], [ 72.0781162, 21.9379989 ], [ 72.0805941, 21.9381711 ], [ 72.0811559, 21.9376666 ], [ 72.0844686, 21.9374682 ], [ 72.0888814, 21.9374183 ], [ 72.0893152, 21.9363969 ], [ 72.089596, 21.9361448 ], [ 72.0893938, 21.9325396 ], [ 72.0889965, 21.931761 ], [ 72.0895503, 21.9316417 ], [ 72.0899763, 21.9310065 ], [ 72.0905433, 21.9302448 ], [ 72.0909651, 21.9298661 ], [ 72.0915189, 21.9297475 ], [ 72.0915346, 21.9289762 ], [ 72.0920884, 21.928857 ], [ 72.0922284, 21.9287313 ], [ 72.0923772, 21.9282193 ], [ 72.0929309, 21.9281 ], [ 72.0933516, 21.927722 ], [ 72.0937865, 21.9267009 ], [ 72.0943377, 21.9267105 ], [ 72.0940725, 21.9261913 ], [ 72.0946238, 21.9262012 ], [ 72.0943639, 21.9254247 ], [ 72.0932666, 21.925148 ], [ 72.0932719, 21.924891 ], [ 72.093823, 21.9249006 ], [ 72.093558, 21.9243815 ], [ 72.0916418, 21.9237041 ], [ 72.0913715, 21.9234419 ], [ 72.0902742, 21.9231654 ], [ 72.0891927, 21.9221172 ], [ 72.0864367, 21.9220683 ], [ 72.0853475, 21.9214064 ], [ 72.0851086, 21.9196015 ], [ 72.0857865, 21.920128 ], [ 72.0864577, 21.9210398 ], [ 72.0867332, 21.9210447 ], [ 72.0870141, 21.9207924 ], [ 72.0897754, 21.9205841 ], [ 72.0908882, 21.9200893 ], [ 72.0936416, 21.9202671 ], [ 72.0934562, 21.922579 ], [ 72.0937266, 21.9228411 ], [ 72.0941196, 21.923877 ], [ 72.0949491, 21.9237625 ], [ 72.0952299, 21.9235104 ], [ 72.0957837, 21.9233919 ], [ 72.0955236, 21.9226156 ], [ 72.0963505, 21.9226302 ], [ 72.0962175, 21.9223705 ], [ 72.0958463, 21.9203061 ], [ 72.0952951, 21.9202962 ], [ 72.0953002, 21.9200392 ], [ 72.0975104, 21.9198209 ], [ 72.0973668, 21.9200757 ], [ 72.097479, 21.9213639 ], [ 72.0988544, 21.9215164 ], [ 72.0996917, 21.9210167 ], [ 72.1007941, 21.921036 ], [ 72.1021798, 21.9206752 ], [ 72.1023276, 21.9201632 ], [ 72.1031804, 21.918892 ], [ 72.1036463, 21.9163278 ], [ 72.1028247, 21.916056 ], [ 72.10283, 21.9157988 ], [ 72.1036593, 21.9156844 ], [ 72.1046572, 21.9140303 ], [ 72.10551, 21.9127591 ], [ 72.1055151, 21.9125019 ], [ 72.104858, 21.9109468 ], [ 72.1043093, 21.910808 ], [ 72.104039, 21.9105461 ], [ 72.1034879, 21.9105363 ], [ 72.1032148, 21.9104034 ], [ 72.1032252, 21.9098891 ], [ 72.1043197, 21.9102938 ], [ 72.1051362, 21.9108226 ], [ 72.1058064, 21.9117353 ], [ 72.105929, 21.9125092 ], [ 72.1075877, 21.9122811 ], [ 72.1070211, 21.913043 ], [ 72.1061942, 21.9130284 ], [ 72.1059031, 21.913795 ], [ 72.1050712, 21.9140375 ], [ 72.105198, 21.9145542 ], [ 72.1043505, 21.9155684 ], [ 72.1043191, 21.9171114 ], [ 72.1058224, 21.9177804 ], [ 72.1059572, 21.917912 ], [ 72.1058948, 21.9209978 ], [ 72.1060305, 21.9211284 ], [ 72.1065816, 21.921138 ], [ 72.1067164, 21.9212696 ], [ 72.1068442, 21.9217863 ], [ 72.1073955, 21.9217959 ], [ 72.107252, 21.9220507 ], [ 72.1072416, 21.922565 ], [ 72.1077824, 21.9230891 ], [ 72.1079103, 21.9236058 ], [ 72.1090101, 21.9237532 ], [ 72.1103959, 21.9233922 ], [ 72.1105437, 21.9228804 ], [ 72.1109653, 21.9225015 ], [ 72.1115191, 21.922383 ], [ 72.1115295, 21.9218687 ], [ 72.1137474, 21.9212641 ], [ 72.1162303, 21.9211794 ], [ 72.1163781, 21.9206676 ], [ 72.1166587, 21.9204153 ], [ 72.1168075, 21.9199033 ], [ 72.1179124, 21.9197937 ], [ 72.1186087, 21.9194204 ], [ 72.1184818, 21.9189037 ], [ 72.1171116, 21.9184934 ], [ 72.1160092, 21.9184741 ], [ 72.115736, 21.918341 ], [ 72.1157517, 21.9175695 ], [ 72.1152031, 21.9174308 ], [ 72.1146623, 21.9169069 ], [ 72.1138355, 21.9168923 ], [ 72.1132739, 21.917397 ], [ 72.1124497, 21.9172543 ], [ 72.1123218, 21.9167375 ], [ 72.111654, 21.9156969 ], [ 72.1111029, 21.9156873 ], [ 72.111001, 21.9138846 ], [ 72.110328, 21.913101 ], [ 72.1078529, 21.9128003 ], [ 72.1081545, 21.9115193 ], [ 72.1089787, 21.9116619 ], [ 72.109795, 21.9121908 ], [ 72.1117268, 21.9120966 ], [ 72.111578, 21.9126085 ], [ 72.1118432, 21.9131276 ], [ 72.1125198, 21.9137822 ], [ 72.1138873, 21.9143208 ], [ 72.114163, 21.9143255 ], [ 72.1143029, 21.9141998 ], [ 72.1144514, 21.913688 ], [ 72.1139003, 21.9136784 ], [ 72.1140532, 21.9129092 ], [ 72.1139211, 21.9126497 ], [ 72.1158527, 21.9125546 ], [ 72.1161309, 21.9124312 ], [ 72.1158345, 21.913455 ], [ 72.116664, 21.9133405 ], [ 72.1172099, 21.9136073 ], [ 72.11761, 21.9142579 ], [ 72.1175996, 21.9147721 ], [ 72.1177353, 21.9149027 ], [ 72.1180109, 21.9149076 ], [ 72.1181507, 21.914782 ], [ 72.1182995, 21.91427 ], [ 72.1188479, 21.9144077 ], [ 72.1191288, 21.9141554 ], [ 72.1196799, 21.9141651 ], [ 72.1200747, 21.9150728 ], [ 72.121578, 21.9157419 ], [ 72.1217128, 21.9158732 ], [ 72.1218355, 21.9166472 ], [ 72.1232187, 21.9164142 ], [ 72.1233664, 21.9159022 ], [ 72.1244894, 21.9148929 ], [ 72.1246379, 21.9143809 ], [ 72.1240868, 21.9143713 ], [ 72.1240919, 21.9141142 ], [ 72.1246431, 21.9141239 ], [ 72.1246483, 21.9138666 ], [ 72.1240997, 21.9137279 ], [ 72.1235589, 21.913204 ], [ 72.1219131, 21.9127897 ], [ 72.1219286, 21.9120184 ], [ 72.1224771, 21.912156 ], [ 72.1227476, 21.9124181 ], [ 72.1241282, 21.912314 ], [ 72.1241488, 21.9112855 ], [ 72.1244244, 21.9112902 ], [ 72.124414, 21.9118046 ], [ 72.1246922, 21.9116803 ], [ 72.1257946, 21.9116996 ], [ 72.1259345, 21.9115739 ], [ 72.1259447, 21.9110596 ], [ 72.1258126, 21.9107999 ], [ 72.1263639, 21.9108096 ], [ 72.1262307, 21.9105501 ], [ 72.1261295, 21.9087476 ], [ 72.123657, 21.908318 ], [ 72.1233764, 21.9085703 ], [ 72.1217177, 21.9087986 ], [ 72.120345, 21.9085172 ], [ 72.1192503, 21.9081127 ], [ 72.1192607, 21.9075983 ], [ 72.118712, 21.9074595 ], [ 72.1181713, 21.9069356 ], [ 72.1176228, 21.9067978 ], [ 72.1176124, 21.9073121 ], [ 72.1173369, 21.9073074 ], [ 72.117214, 21.9065334 ], [ 72.1165412, 21.9057498 ], [ 72.116263, 21.9058733 ], [ 72.1151634, 21.9057256 ], [ 72.1151736, 21.9052114 ], [ 72.1121424, 21.9051581 ], [ 72.1121475, 21.904901 ], [ 72.1154673, 21.9043157 ], [ 72.1157378, 21.9045777 ], [ 72.1165593, 21.9048494 ], [ 72.1173705, 21.9056353 ], [ 72.1192944, 21.9059264 ], [ 72.1194342, 21.9058005 ], [ 72.1195881, 21.9050315 ], [ 72.1198636, 21.9050364 ], [ 72.1198532, 21.9055506 ], [ 72.120953, 21.9056981 ], [ 72.1212233, 21.90596 ], [ 72.1234253, 21.9061277 ], [ 72.1234408, 21.9053562 ], [ 72.1248162, 21.9055085 ], [ 72.1256455, 21.9053947 ], [ 72.1255125, 21.9051352 ], [ 72.1255278, 21.9043637 ], [ 72.1252575, 21.9041018 ], [ 72.1251305, 21.903585 ], [ 72.1259545, 21.9037275 ], [ 72.1260946, 21.9036019 ], [ 72.1262792, 21.9012898 ], [ 72.1271033, 21.9014323 ], [ 72.1273815, 21.9013091 ], [ 72.1275034, 21.9020829 ], [ 72.1279042, 21.9027326 ], [ 72.1290091, 21.9026238 ], [ 72.1291568, 21.9021118 ], [ 72.1291894, 21.901401 ], [ 72.1293494, 21.9006324 ], [ 72.1414226, 21.9221981 ], [ 72.1478831, 21.9193583 ], [ 72.1477613, 21.9230161 ], [ 72.1475432, 21.9273965 ], [ 72.1507368, 21.9342462 ], [ 72.152701, 21.9380225 ], [ 72.1548424, 21.9425792 ], [ 72.1630381, 21.9420926 ], [ 72.1654553, 21.9414586 ], [ 72.1751541, 21.939053 ], [ 72.1798758, 21.9373333 ], [ 72.1824652, 21.9362355 ], [ 72.1831909, 21.9359468 ], [ 72.1838992, 21.9356317 ], [ 72.1849349, 21.9373463 ], [ 72.1853539, 21.9380569 ], [ 72.1859299, 21.9379517 ], [ 72.1864812, 21.9379611 ], [ 72.1866211, 21.9378354 ], [ 72.1905287, 21.9369523 ], [ 72.1942789, 21.9377897 ], [ 72.1979596, 21.9381118 ], [ 72.200668, 21.9380474 ], [ 72.2031681, 21.9375321 ], [ 72.2060154, 21.9377253 ], [ 72.2083766, 21.9391425 ], [ 72.210599, 21.943394 ], [ 72.2125435, 21.9462927 ], [ 72.2140713, 21.9475166 ], [ 72.2173353, 21.946808 ], [ 72.2196965, 21.9446824 ], [ 72.221016, 21.9420413 ], [ 72.2228911, 21.9390781 ], [ 72.2247662, 21.935213 ], [ 72.2269092, 21.9295523 ], [ 72.2285952, 21.9262288 ], [ 72.2310189, 21.9228074 ], [ 72.2362876, 21.9172352 ], [ 72.2403973, 21.914889 ], [ 72.2435585, 21.9119562 ], [ 72.2499864, 21.9001264 ], [ 72.2544121, 21.8887845 ], [ 72.2560982, 21.883211 ], [ 72.2559928, 21.8777351 ], [ 72.254939, 21.8689341 ], [ 72.2538853, 21.8576876 ], [ 72.254939, 21.8478094 ], [ 72.2565197, 21.8401803 ], [ 72.2576788, 21.8297141 ], [ 72.2574259, 21.8193057 ], [ 72.2564986, 21.8099924 ], [ 72.2564143, 21.7983303 ], [ 72.256394593720415, 21.796775 ], [ 72.25633, 21.791677 ], [ 72.2577631, 21.7832229 ], [ 72.2601235, 21.7706975 ], [ 72.2626525, 21.76005 ], [ 72.263801704854487, 21.756625617187503 ], [ 72.2646757, 21.7540213 ], [ 72.2607136, 21.7482272 ], [ 72.2577631, 21.7511243 ], [ 72.2547283, 21.7553523 ], [ 72.254052739271629, 21.756625617187503 ], [ 72.2518621, 21.7607546 ], [ 72.2503447, 21.7670962 ], [ 72.2495017, 21.7705409 ], [ 72.249586, 21.7801699 ], [ 72.2500075, 21.7845537 ], [ 72.250429, 21.78745 ], [ 72.2498389, 21.7912073 ], [ 72.2480686, 21.7941035 ], [ 72.2461297, 21.7952776 ], [ 72.2436007, 21.7954342 ], [ 72.2393014, 21.7951994 ], [ 72.2348335, 21.7951211 ], [ 72.2318829, 21.7951994 ], [ 72.2293539, 21.7959038 ], [ 72.22809206280894, 21.796775 ], [ 72.2260662, 21.7981737 ], [ 72.2231157, 21.799974 ], [ 72.2178891, 21.8034962 ], [ 72.2148543, 21.8052181 ], [ 72.2134212, 21.8067052 ], [ 72.2129154, 21.8093663 ], [ 72.2124939, 21.8121838 ], [ 72.2123253, 21.8158622 ], [ 72.2116509, 21.8179753 ], [ 72.2103021, 21.819697 ], [ 72.2082789, 21.8218101 ], [ 72.2014506, 21.8255665 ], [ 72.1982472, 21.8271316 ], [ 72.1955496, 21.8283055 ], [ 72.1929363, 21.8285402 ], [ 72.1884684, 21.828462 ], [ 72.1856865, 21.8279142 ], [ 72.1834947, 21.8259578 ], [ 72.1821459, 21.8241578 ], [ 72.1818087, 21.8225144 ], [ 72.1822302, 21.8204014 ], [ 72.1824831, 21.8189927 ], [ 72.1809657, 21.8169579 ], [ 72.1780152, 21.81461 ], [ 72.1746432, 21.8128099 ], [ 72.1722828, 21.8124969 ], [ 72.1693323, 21.8124186 ], [ 72.1670562, 21.8117925 ], [ 72.1657917, 21.8101489 ], [ 72.1635156, 21.8083488 ], [ 72.1611552, 21.8070183 ], [ 72.1571931, 21.805766 ], [ 72.1536197, 21.8051664 ], [ 72.1512459, 21.8050195 ], [ 72.1500252, 21.8053973 ], [ 72.1495278, 21.8057541 ], [ 72.1487818, 21.8077272 ], [ 72.1482166, 21.8089235 ], [ 72.1474253, 21.8098051 ], [ 72.1461819, 21.8105397 ], [ 72.1449386, 21.8105607 ], [ 72.1438308, 21.8100569 ], [ 72.1430622, 21.8093223 ], [ 72.1423161, 21.8093433 ], [ 72.1410501, 21.810036 ], [ 72.1400328, 21.8109385 ], [ 72.1388346, 21.8116731 ], [ 72.1362122, 21.8130164 ], [ 72.1323464, 21.8155979 ], [ 72.12995, 21.8176547 ], [ 72.1280284, 21.8198375 ], [ 72.1275763, 21.8208029 ], [ 72.127531, 21.8212436 ], [ 72.1280962, 21.8217683 ], [ 72.1271919, 21.8226288 ], [ 72.1266946, 21.822251 ], [ 72.1263329, 21.8213905 ], [ 72.1263781, 21.8204251 ], [ 72.1271919, 21.8192498 ], [ 72.1296561, 21.8166683 ], [ 72.1322107, 21.8143806 ], [ 72.1352853, 21.8123237 ], [ 72.1379529, 21.8112323 ], [ 72.1393998, 21.8104767 ], [ 72.1414118, 21.8091964 ], [ 72.1434239, 21.8086507 ], [ 72.1448029, 21.8081259 ], [ 72.1471541, 21.8068666 ], [ 72.1480131, 21.8059431 ], [ 72.1488496, 21.8050405 ], [ 72.1499347, 21.8044948 ], [ 72.1512007, 21.804012 ], [ 72.1520146, 21.80397 ], [ 72.1574234, 21.8046225 ], [ 72.1594692, 21.8049833 ], [ 72.1637685, 21.8065486 ], [ 72.1672248, 21.8087401 ], [ 72.1691637, 21.8102272 ], [ 72.1707654, 21.8101489 ], [ 72.1735473, 21.8103837 ], [ 72.1775094, 21.8120273 ], [ 72.18105, 21.8146883 ], [ 72.1848435, 21.8192275 ], [ 72.1858551, 21.8238448 ], [ 72.1866981, 21.826036 ], [ 72.1882998, 21.8264273 ], [ 72.1918404, 21.8266621 ], [ 72.1947909, 21.8264273 ], [ 72.1982472, 21.8253317 ], [ 72.204654, 21.8220448 ], [ 72.2077731, 21.8197753 ], [ 72.2087004, 21.8179753 ], [ 72.2090376, 21.8152361 ], [ 72.2089533, 21.8111664 ], [ 72.2098806, 21.8078009 ], [ 72.2108922, 21.8060008 ], [ 72.215613, 21.8015394 ], [ 72.222263060369826, 21.796795582523263 ], [ 72.2225256, 21.7966083 ], [ 72.2276679, 21.7930077 ], [ 72.2322201, 21.7917553 ], [ 72.2366881, 21.7917553 ], [ 72.2396386, 21.7912073 ], [ 72.2424205, 21.7890939 ], [ 72.243685, 21.7844754 ], [ 72.2434321, 21.7784477 ], [ 72.2438536, 21.7667831 ], [ 72.244239, 21.7651362 ], [ 72.2446966, 21.7631817 ], [ 72.24665507246219, 21.756425617187503 ], [ 72.246655072462175, 21.756425617187503 ], [ 72.247057, 21.7550391 ], [ 72.250665, 21.7454554 ], [ 72.2549812, 21.7336158 ], [ 72.2589601, 21.7247824 ], [ 72.266446, 21.7108734 ], [ 72.268739, 21.7055476 ], [ 72.2746062, 21.6961485 ], [ 72.2782764, 21.6920052 ], [ 72.2789907, 21.6906024 ], [ 72.2792706, 21.6903498 ], [ 72.2795603, 21.6895826 ], [ 72.2798404, 21.6893299 ], [ 72.2805626, 21.6875408 ], [ 72.2811129, 21.6875497 ], [ 72.2812694, 21.6865233 ], [ 72.2815543, 21.6860133 ], [ 72.2818585, 21.6844747 ], [ 72.281999, 21.6843479 ], [ 72.2825518, 21.6842288 ], [ 72.2825662, 21.6834571 ], [ 72.282713, 21.6829449 ], [ 72.2827372, 21.681659 ], [ 72.2830171, 21.6814063 ], [ 72.2831649, 21.6808941 ], [ 72.2837153, 21.6809032 ], [ 72.2834641, 21.6796127 ], [ 72.2840145, 21.6796215 ], [ 72.2841806, 21.6780806 ], [ 72.2850205, 21.6773226 ], [ 72.2850543, 21.6755221 ], [ 72.2853439, 21.674755 ], [ 72.2853824, 21.6726973 ], [ 72.2845595, 21.6652226 ], [ 72.2851099, 21.6652317 ], [ 72.2854044, 21.6642073 ], [ 72.2862322, 21.6640918 ], [ 72.2869317, 21.6634605 ], [ 72.2872165, 21.6629506 ], [ 72.2879168, 21.6623184 ], [ 72.2884696, 21.6621991 ], [ 72.2886259, 21.6611725 ], [ 72.2894752, 21.6599 ], [ 72.2897553, 21.6596473 ], [ 72.2903295, 21.6583702 ], [ 72.2914493, 21.6573594 ], [ 72.2918746, 21.6567227 ], [ 72.2929799, 21.6564834 ], [ 72.2938198, 21.6557253 ], [ 72.2945144, 21.6553511 ], [ 72.2945287, 21.6545794 ], [ 72.2953685, 21.6538213 ], [ 72.2956533, 21.6533114 ], [ 72.2970528, 21.6520478 ], [ 72.2976223, 21.6510279 ], [ 72.2981821, 21.6505224 ], [ 72.2984716, 21.6497554 ], [ 72.2990362, 21.6489926 ], [ 72.2990458, 21.6484781 ], [ 72.2996106, 21.6477155 ], [ 72.300455, 21.6467002 ], [ 72.3011553, 21.6460678 ], [ 72.3018496, 21.6456936 ], [ 72.3021392, 21.6449264 ], [ 72.3024191, 21.6446737 ], [ 72.3027515, 21.6415917 ], [ 72.3030362, 21.6410818 ], [ 72.3030458, 21.6405673 ], [ 72.3033305, 21.6400574 ], [ 72.3036391, 21.6382614 ], [ 72.305964, 21.6316097 ], [ 72.3064439, 21.6280153 ], [ 72.3055383, 21.6255416 ], [ 72.3038133, 21.6215899 ], [ 72.3026839, 21.6194135 ], [ 72.3017803, 21.6178099 ], [ 72.3007946, 21.6166071 ], [ 72.2991107, 21.6149271 ], [ 72.296441, 21.6120824 ], [ 72.2922107, 21.6075193 ], [ 72.2904446, 21.6052282 ], [ 72.2875491, 21.6010659 ], [ 72.2859062, 21.5987365 ], [ 72.2847357, 21.5976481 ], [ 72.2837911, 21.5963879 ], [ 72.2833598, 21.5956241 ], [ 72.2842018, 21.5965407 ], [ 72.2854339, 21.59803 ], [ 72.2860089, 21.5983928 ], [ 72.2864402, 21.5981827 ], [ 72.2858857, 21.5973044 ], [ 72.2845098, 21.5957196 ], [ 72.2827643, 21.5934092 ], [ 72.2817786, 21.5919389 ], [ 72.2793553, 21.5893993 ], [ 72.2779178, 21.587528 ], [ 72.2762339, 21.5845682 ], [ 72.2742214, 21.5819712 ], [ 72.2718393, 21.5780946 ], [ 72.2703607, 21.5747718 ], [ 72.2688616, 21.5709142 ], [ 72.2688616, 21.5702076 ], [ 72.2690054, 21.5690617 ], [ 72.2684714, 21.5656814 ], [ 72.2677732, 21.563466 ], [ 72.2659045, 21.5598563 ], [ 72.2641795, 21.5564949 ], [ 72.263892, 21.5553107 ], [ 72.2640152, 21.5534963 ], [ 72.2645491, 21.5491988 ], [ 72.2654321, 21.5466393 ], [ 72.2657503, 21.545792 ], [ 72.265813, 21.5424484 ], [ 72.2644962, 21.5393393 ], [ 72.2642504, 21.5377916 ], [ 72.263985, 21.5372726 ], [ 72.2638673, 21.5362416 ], [ 72.2633175, 21.5362325 ], [ 72.2626732, 21.5339063 ], [ 72.2627021, 21.5323631 ], [ 72.2623288, 21.5302987 ], [ 72.261779, 21.5302898 ], [ 72.2612583, 21.5287376 ], [ 72.2607085, 21.5287285 ], [ 72.2603246, 21.5271785 ], [ 72.2600546, 21.5269167 ], [ 72.2588952, 21.5227812 ], [ 72.2583456, 21.5227721 ], [ 72.2582269, 21.521741 ], [ 72.2579618, 21.5212222 ], [ 72.2580196, 21.5181356 ], [ 72.2576369, 21.5165856 ], [ 72.2570871, 21.5165765 ], [ 72.2569686, 21.5155455 ], [ 72.2561778, 21.5137315 ], [ 72.2559077, 21.5134698 ], [ 72.2556618, 21.511922 ], [ 72.2553917, 21.5116603 ], [ 72.2554159, 21.5103743 ], [ 72.2551459, 21.5101125 ], [ 72.2551604, 21.5093411 ], [ 72.2546252, 21.5085603 ], [ 72.2541287, 21.5057221 ], [ 72.254418, 21.5049549 ], [ 72.2544469, 21.5034117 ], [ 72.2531356, 21.5000455 ], [ 72.2518049, 21.4977081 ], [ 72.2513229, 21.4940982 ], [ 72.2510531, 21.4938364 ], [ 72.2502721, 21.491508 ], [ 72.250002, 21.4912464 ], [ 72.2498748, 21.4907297 ], [ 72.2493252, 21.4907206 ], [ 72.2489366, 21.4894278 ], [ 72.2486667, 21.4891661 ], [ 72.2481413, 21.487871 ], [ 72.2478712, 21.4876093 ], [ 72.2476159, 21.4865758 ], [ 72.2473458, 21.4863142 ], [ 72.2472332, 21.4850258 ], [ 72.2466836, 21.4850168 ], [ 72.2464426, 21.4832118 ], [ 72.245893, 21.4832029 ], [ 72.2457648, 21.4826862 ], [ 72.2454949, 21.4824244 ], [ 72.2452345, 21.4816482 ], [ 72.2449646, 21.4813866 ], [ 72.244714, 21.4800959 ], [ 72.2441789, 21.4793154 ], [ 72.2435312, 21.4772464 ], [ 72.2429816, 21.4772373 ], [ 72.2428584, 21.4764634 ], [ 72.2423233, 21.4756828 ], [ 72.2423281, 21.4754256 ], [ 72.2428873, 21.4749202 ], [ 72.2430398, 21.474151 ], [ 72.2424902, 21.4741419 ], [ 72.2423717, 21.4731107 ], [ 72.2418319, 21.4725874 ], [ 72.2411744, 21.4710326 ], [ 72.240625, 21.4710236 ], [ 72.2403695, 21.4699903 ], [ 72.2395499, 21.4697195 ], [ 72.2392899, 21.4689434 ], [ 72.2387403, 21.4689344 ], [ 72.23848, 21.4681581 ], [ 72.2379304, 21.4681491 ], [ 72.2374101, 21.4665968 ], [ 72.2368605, 21.4665877 ], [ 72.2368849, 21.4653016 ], [ 72.2363352, 21.4652925 ], [ 72.2358149, 21.4637403 ], [ 72.2352653, 21.4637312 ], [ 72.2352944, 21.462188 ], [ 72.234745, 21.4621789 ], [ 72.234646, 21.460119 ], [ 72.2352294, 21.4583277 ], [ 72.2352585, 21.4567845 ], [ 72.2349935, 21.4562655 ], [ 72.2341886, 21.4552232 ], [ 72.2333838, 21.4541806 ], [ 72.232844, 21.4536571 ], [ 72.2327168, 21.4531406 ], [ 72.2318926, 21.453127 ], [ 72.2319024, 21.4526125 ], [ 72.2313528, 21.4526034 ], [ 72.2312247, 21.4520867 ], [ 72.2308229, 21.4515655 ], [ 72.2302735, 21.4515564 ], [ 72.2301453, 21.4510397 ], [ 72.2293356, 21.4502544 ], [ 72.2292084, 21.4497378 ], [ 72.228659, 21.4497288 ], [ 72.2285309, 21.449212 ], [ 72.2277212, 21.4484267 ], [ 72.2273292, 21.4473912 ], [ 72.2265097, 21.4471202 ], [ 72.2261168, 21.4460846 ], [ 72.225577, 21.4455611 ], [ 72.2250519, 21.4442659 ], [ 72.2247821, 21.4440043 ], [ 72.2249491, 21.4424634 ], [ 72.2254986, 21.4424725 ], [ 72.2253801, 21.4414413 ], [ 72.2248405, 21.4409178 ], [ 72.2244483, 21.4398822 ], [ 72.2239013, 21.4397441 ], [ 72.2233593, 21.4393496 ], [ 72.2233689, 21.4388352 ], [ 72.2228219, 21.438697 ], [ 72.2217401, 21.437779 ], [ 72.221485, 21.4367456 ], [ 72.220391, 21.4364702 ], [ 72.2204007, 21.4359558 ], [ 72.2201236, 21.4360794 ], [ 72.2187524, 21.4359283 ], [ 72.2188991, 21.4354163 ], [ 72.2187671, 21.4351569 ], [ 72.2198611, 21.4354322 ], [ 72.2197329, 21.4349157 ], [ 72.2189283, 21.4338732 ], [ 72.2189382, 21.4333587 ], [ 72.218962741162088, 21.433314845786036 ], [ 72.2190809, 21.4331037 ], [ 72.2179869, 21.4328284 ], [ 72.2178588, 21.4323116 ], [ 72.2173192, 21.4317881 ], [ 72.2171969, 21.4310143 ], [ 72.2166475, 21.4310051 ], [ 72.2165341, 21.4297169 ], [ 72.2162642, 21.4294551 ], [ 72.2161517, 21.4281669 ], [ 72.2156048, 21.4280287 ], [ 72.2150627, 21.4276341 ], [ 72.2146698, 21.4265986 ], [ 72.2138603, 21.4258133 ], [ 72.2133256, 21.4250325 ], [ 72.2132035, 21.4242585 ], [ 72.2126541, 21.4242495 ], [ 72.2126687, 21.4234778 ], [ 72.2121194, 21.4234687 ], [ 72.212216, 21.4233007 ], [ 72.212399, 21.423216 ], [ 72.2124088, 21.4227018 ], [ 72.212134, 21.422697 ], [ 72.2120315, 21.4231215 ], [ 72.2115798, 21.4229452 ], [ 72.2115897, 21.4224307 ], [ 72.2110402, 21.4224217 ], [ 72.2110501, 21.4219072 ], [ 72.2105031, 21.421769 ], [ 72.2094239, 21.420722 ], [ 72.2083351, 21.4201892 ], [ 72.2072559, 21.4191421 ], [ 72.2064343, 21.4190002 ], [ 72.2063064, 21.4184835 ], [ 72.2060365, 21.4182217 ], [ 72.2059095, 21.417705 ], [ 72.2053625, 21.4175668 ], [ 72.2045507, 21.4169106 ], [ 72.2042909, 21.4161344 ], [ 72.2034717, 21.4158634 ], [ 72.2034816, 21.4153491 ], [ 72.2026575, 21.4153353 ], [ 72.2025296, 21.4148186 ], [ 72.2022597, 21.4145568 ], [ 72.2021327, 21.4140401 ], [ 72.2015859, 21.4139019 ], [ 72.2004993, 21.413241 ], [ 72.200784, 21.4127312 ], [ 72.200237, 21.4125929 ], [ 72.1999673, 21.4123311 ], [ 72.1994203, 21.4121939 ], [ 72.1994351, 21.4114222 ], [ 72.1988858, 21.4114132 ], [ 72.1990325, 21.410901 ], [ 72.1986307, 21.4103797 ], [ 72.198079, 21.4104986 ], [ 72.1978093, 21.4102368 ], [ 72.1972574, 21.4103566 ], [ 72.1972672, 21.4098424 ], [ 72.196718, 21.4098331 ], [ 72.1964581, 21.4090569 ], [ 72.195639, 21.4087861 ], [ 72.1955111, 21.4082693 ], [ 72.1952414, 21.4080076 ], [ 72.1951143, 21.4074908 ], [ 72.1942928, 21.407348 ], [ 72.1940157, 21.4074723 ], [ 72.1937656, 21.4061818 ], [ 72.1929443, 21.4060389 ], [ 72.1926744, 21.4057772 ], [ 72.1921276, 21.4056398 ], [ 72.192412, 21.40513 ], [ 72.1915882, 21.4051162 ], [ 72.1913283, 21.40434 ], [ 72.1907813, 21.4042019 ], [ 72.1905116, 21.4039401 ], [ 72.1899649, 21.4038027 ], [ 72.1899747, 21.4032882 ], [ 72.1896976, 21.4034118 ], [ 72.1891508, 21.4032744 ], [ 72.1890229, 21.4027577 ], [ 72.1883516, 21.4019747 ], [ 72.18753, 21.4018318 ], [ 72.1867159, 21.4013035 ], [ 72.1861741, 21.4009089 ], [ 72.1861839, 21.4003946 ], [ 72.1848157, 21.4001144 ], [ 72.1846878, 21.3995976 ], [ 72.1842862, 21.3990764 ], [ 72.1834672, 21.3988053 ], [ 72.1837468, 21.3985527 ], [ 72.1837517, 21.3982956 ], [ 72.1834771, 21.3982909 ], [ 72.1833793, 21.3984582 ], [ 72.1829254, 21.3984098 ], [ 72.1818441, 21.3974916 ], [ 72.1818539, 21.3969773 ], [ 72.1813047, 21.3969681 ], [ 72.1811767, 21.3964514 ], [ 72.1807751, 21.3959301 ], [ 72.1802283, 21.3957917 ], [ 72.1796867, 21.3953971 ], [ 72.1795587, 21.3948804 ], [ 72.1791571, 21.3943591 ], [ 72.1786103, 21.394221 ], [ 72.1783406, 21.393959 ], [ 72.1777889, 21.3940788 ], [ 72.177661, 21.3935621 ], [ 72.1772595, 21.3930408 ], [ 72.1767052, 21.3932888 ], [ 72.1765823, 21.3925149 ], [ 72.1763126, 21.3922531 ], [ 72.1761856, 21.3917364 ], [ 72.1753618, 21.3917226 ], [ 72.175234, 21.3912058 ], [ 72.1749643, 21.3909439 ], [ 72.1748422, 21.3901701 ], [ 72.1740233, 21.3898991 ], [ 72.1739004, 21.3891251 ], [ 72.173361, 21.3886014 ], [ 72.1728267, 21.3878207 ], [ 72.1722924, 21.3870399 ], [ 72.1721703, 21.386266 ], [ 72.1716235, 21.3861276 ], [ 72.171354, 21.3858658 ], [ 72.1708072, 21.3857284 ], [ 72.1705574, 21.3844378 ], [ 72.1700082, 21.3844285 ], [ 72.1698951, 21.3831403 ], [ 72.1703174, 21.3826328 ], [ 72.1697683, 21.3826235 ], [ 72.1700775, 21.3808279 ], [ 72.1692537, 21.3808141 ], [ 72.1691308, 21.3800401 ], [ 72.1680671, 21.3782212 ], [ 72.1675277, 21.3776976 ], [ 72.1674009, 21.3771809 ], [ 72.1668517, 21.3771717 ], [ 72.1671361, 21.3766619 ], [ 72.1665871, 21.3766527 ], [ 72.1660626, 21.3753574 ], [ 72.1652438, 21.3750862 ], [ 72.1649891, 21.374053 ], [ 72.1641703, 21.3737817 ], [ 72.1641802, 21.3732675 ], [ 72.1636311, 21.3732582 ], [ 72.1633763, 21.3722248 ], [ 72.1628297, 21.3720864 ], [ 72.1622879, 21.3716918 ], [ 72.1620282, 21.3709156 ], [ 72.1614792, 21.3709063 ], [ 72.1613512, 21.3703896 ], [ 72.1606852, 21.3693491 ], [ 72.1601386, 21.3692108 ], [ 72.1590601, 21.3681635 ], [ 72.1579741, 21.3675024 ], [ 72.1577196, 21.366469 ], [ 72.1571703, 21.3664597 ], [ 72.1570426, 21.365943 ], [ 72.1567731, 21.3656812 ], [ 72.156646, 21.3651645 ], [ 72.156097, 21.3651552 ], [ 72.155338, 21.3617978 ], [ 72.1547914, 21.3616595 ], [ 72.1542497, 21.3612648 ], [ 72.15399, 21.3604886 ], [ 72.153441, 21.3604792 ], [ 72.153313, 21.3599624 ], [ 72.1519653, 21.3586532 ], [ 72.1515687, 21.3578748 ], [ 72.1510222, 21.3577364 ], [ 72.1504807, 21.3573418 ], [ 72.1499564, 21.3560466 ], [ 72.1494073, 21.3560371 ], [ 72.1492796, 21.3555206 ], [ 72.1490099, 21.3552586 ], [ 72.1488831, 21.3547419 ], [ 72.148334, 21.3547326 ], [ 72.1482062, 21.3542159 ], [ 72.1472658, 21.3531709 ], [ 72.1467167, 21.3531615 ], [ 72.146589, 21.3526447 ], [ 72.145918, 21.3518615 ], [ 72.1453714, 21.3517232 ], [ 72.14483, 21.3513285 ], [ 72.1448398, 21.3508141 ], [ 72.1442907, 21.3508048 ], [ 72.1443008, 21.3502904 ], [ 72.1434822, 21.3500193 ], [ 72.1433544, 21.3495026 ], [ 72.1430849, 21.3492407 ], [ 72.1429581, 21.3487239 ], [ 72.1418649, 21.3484482 ], [ 72.1417372, 21.3479315 ], [ 72.1413359, 21.34741 ], [ 72.1405122, 21.347396 ], [ 72.1403845, 21.3468793 ], [ 72.1398504, 21.3460983 ], [ 72.1391796, 21.3453151 ], [ 72.1383611, 21.3450439 ], [ 72.1383711, 21.3445296 ], [ 72.1378245, 21.3443911 ], [ 72.136744, 21.3434728 ], [ 72.136754, 21.3429583 ], [ 72.1362074, 21.34282 ], [ 72.1351293, 21.3417725 ], [ 72.1345828, 21.3416349 ], [ 72.134455, 21.3411184 ], [ 72.1337893, 21.3400779 ], [ 72.1329708, 21.3398065 ], [ 72.132843, 21.33929 ], [ 72.1325735, 21.339028 ], [ 72.1324467, 21.3385113 ], [ 72.1319003, 21.338373 ], [ 72.1313588, 21.3379782 ], [ 72.1310993, 21.3372019 ], [ 72.1305502, 21.3371927 ], [ 72.1302959, 21.3361592 ], [ 72.1297468, 21.3361498 ], [ 72.1297568, 21.3356355 ], [ 72.1292078, 21.335626 ], [ 72.1286839, 21.3343308 ], [ 72.1278653, 21.3340594 ], [ 72.1274731, 21.3330237 ], [ 72.1269343, 21.3325 ], [ 72.1264002, 21.331719 ], [ 72.1262736, 21.3312023 ], [ 72.1257245, 21.3311931 ], [ 72.1253323, 21.3301571 ], [ 72.124524, 21.3293715 ], [ 72.1241328, 21.3283358 ], [ 72.1235839, 21.3283265 ], [ 72.1231966, 21.3270334 ], [ 72.1226578, 21.3265096 ], [ 72.1222717, 21.3252167 ], [ 72.1217226, 21.3252074 ], [ 72.1211989, 21.323912 ], [ 72.1206499, 21.3239026 ], [ 72.1201311, 21.3223501 ], [ 72.119582, 21.3223407 ], [ 72.1190632, 21.3207882 ], [ 72.1185143, 21.3207788 ], [ 72.1182651, 21.3194883 ], [ 72.117716, 21.3194788 ], [ 72.1174718, 21.3179311 ], [ 72.1169228, 21.3179217 ], [ 72.1166786, 21.3163738 ], [ 72.1161295, 21.3163645 ], [ 72.116002, 21.3158478 ], [ 72.1157425, 21.3150715 ], [ 72.1152036, 21.3145476 ], [ 72.1149443, 21.3137714 ], [ 72.1146748, 21.3135095 ], [ 72.1141511, 21.3122142 ], [ 72.1138818, 21.3119523 ], [ 72.1133579, 21.3106571 ], [ 72.1130885, 21.3103951 ], [ 72.1124482, 21.3080687 ], [ 72.1116249, 21.3080545 ], [ 72.1116147, 21.308569 ], [ 72.110789, 21.308683 ], [ 72.1096811, 21.3091785 ], [ 72.1080067, 21.310565 ], [ 72.1078236, 21.3128773 ], [ 72.1079589, 21.3130079 ], [ 72.1087797, 21.3131509 ], [ 72.108851, 21.3164966 ], [ 72.1089861, 21.3166272 ], [ 72.1098069, 21.3167703 ], [ 72.1099286, 21.3175442 ], [ 72.1096491, 21.3177967 ], [ 72.1096391, 21.318311 ], [ 72.1093596, 21.3185635 ], [ 72.1093545, 21.3188207 ], [ 72.109624, 21.3190825 ], [ 72.1096138, 21.319597 ], [ 72.1090398, 21.3208733 ], [ 72.1082012, 21.3216308 ], [ 72.1076372, 21.3223928 ], [ 72.107073, 21.3231549 ], [ 72.107063, 21.3236692 ], [ 72.1073274, 21.3241883 ], [ 72.1080065, 21.3245854 ], [ 72.1103781, 21.3248428 ], [ 72.1106009, 21.3252738 ], [ 72.111008, 21.325538 ], [ 72.1107487, 21.3247618 ], [ 72.1104792, 21.3244998 ], [ 72.1115746, 21.3246468 ], [ 72.1124055, 21.3242757 ], [ 72.1125323, 21.3247924 ], [ 72.112937, 21.3251847 ], [ 72.1137502, 21.3257132 ], [ 72.1145712, 21.3258564 ], [ 72.114561, 21.3263707 ], [ 72.1140173, 21.3261042 ], [ 72.1140022, 21.3268757 ], [ 72.1129016, 21.326985 ], [ 72.1123427, 21.32749 ], [ 72.1115217, 21.3273477 ], [ 72.1115117, 21.3278619 ], [ 72.1120606, 21.3278714 ], [ 72.1120454, 21.3286429 ], [ 72.1131384, 21.328919 ], [ 72.1131284, 21.3294333 ], [ 72.1136748, 21.3295709 ], [ 72.1145007, 21.3294569 ], [ 72.1143529, 21.3299689 ], [ 72.1150144, 21.3312666 ], [ 72.114468, 21.3311282 ], [ 72.1139292, 21.3306043 ], [ 72.1133777, 21.330724 ], [ 72.1133675, 21.3312384 ], [ 72.1139165, 21.3312477 ], [ 72.1138188, 21.3314149 ], [ 72.1122645, 21.3314766 ], [ 72.1121621, 21.3296741 ], [ 72.1120303, 21.3294146 ], [ 72.1106529, 21.329648 ], [ 72.110658, 21.3293909 ], [ 72.1112095, 21.3292713 ], [ 72.1113488, 21.3291454 ], [ 72.111222, 21.3286289 ], [ 72.1106731, 21.3286194 ], [ 72.1112573, 21.3268285 ], [ 72.10851, 21.3269096 ], [ 72.106853, 21.3273955 ], [ 72.1065735, 21.327648 ], [ 72.1057451, 21.3278908 ], [ 72.1051861, 21.3283959 ], [ 72.1046346, 21.3285153 ], [ 72.1043448, 21.3292823 ], [ 72.102975, 21.3291296 ], [ 72.1026981, 21.3292537 ], [ 72.1027132, 21.3284822 ], [ 72.1021641, 21.3284728 ], [ 72.1021744, 21.3279585 ], [ 72.099981, 21.3277914 ], [ 72.099709, 21.3276586 ], [ 72.0999912, 21.3272772 ], [ 72.1005452, 21.3270294 ], [ 72.1035593, 21.3273388 ], [ 72.1041133, 21.327091 ], [ 72.1048168, 21.3262031 ], [ 72.1056554, 21.3254458 ], [ 72.1059398, 21.3249362 ], [ 72.1059449, 21.324679 ], [ 72.1056754, 21.3244172 ], [ 72.1052843, 21.3233813 ], [ 72.1044611, 21.3233671 ], [ 72.1044662, 21.3231099 ], [ 72.1055665, 21.3229999 ], [ 72.10628, 21.3215977 ], [ 72.1071184, 21.3208402 ], [ 72.1076826, 21.3200782 ], [ 72.1079821, 21.3187971 ], [ 72.1072394, 21.314668 ], [ 72.1068434, 21.3138895 ], [ 72.1054762, 21.3136087 ], [ 72.1054662, 21.314123 ], [ 72.1043632, 21.3143613 ], [ 72.1043531, 21.3148755 ], [ 72.1035248, 21.3151186 ], [ 72.1036765, 21.3143494 ], [ 72.1043758, 21.3137179 ], [ 72.1052042, 21.3134749 ], [ 72.1054837, 21.3132224 ], [ 72.1065841, 21.3131131 ], [ 72.1065941, 21.3125989 ], [ 72.104396, 21.3126892 ], [ 72.1032906, 21.3130564 ], [ 72.1031428, 21.3135684 ], [ 72.1027215, 21.3140757 ], [ 72.1021702, 21.3141944 ], [ 72.1007752, 21.3153284 ], [ 72.1006274, 21.3158404 ], [ 72.0997888, 21.3165977 ], [ 72.0994992, 21.3173645 ], [ 72.0994839, 21.318136 ], [ 72.0989249, 21.318641 ], [ 72.0983609, 21.319403 ], [ 72.0977867, 21.3206794 ], [ 72.0975072, 21.3209319 ], [ 72.0973603, 21.3214439 ], [ 72.0959829, 21.3216773 ], [ 72.0959727, 21.3221916 ], [ 72.0951468, 21.3223055 ], [ 72.0926514, 21.3235486 ], [ 72.0918126, 21.3243059 ], [ 72.0912613, 21.3244255 ], [ 72.0912511, 21.3249398 ], [ 72.0904225, 21.3251827 ], [ 72.089985, 21.3264614 ], [ 72.0892842, 21.327221 ], [ 72.0887351, 21.3272116 ], [ 72.0885771, 21.3282378 ], [ 72.0868998, 21.3297523 ], [ 72.0861938, 21.3307691 ], [ 72.0850908, 21.3310073 ], [ 72.0848011, 21.331774 ], [ 72.0842521, 21.3317644 ], [ 72.0842418, 21.3322789 ], [ 72.0828593, 21.3327693 ], [ 72.0825696, 21.3335361 ], [ 72.0817436, 21.3336499 ], [ 72.081187, 21.3340265 ], [ 72.0814411, 21.33506 ], [ 72.0806151, 21.3351738 ], [ 72.0800585, 21.3355504 ], [ 72.0800483, 21.3360649 ], [ 72.0795044, 21.335798 ], [ 72.079936, 21.3347765 ], [ 72.0805002, 21.3340146 ], [ 72.0810595, 21.3335098 ], [ 72.0814843, 21.3328736 ], [ 72.0825924, 21.3323783 ], [ 72.083301, 21.3312335 ], [ 72.0845495, 21.3306115 ], [ 72.0849735, 21.3299761 ], [ 72.0856677, 21.3296019 ], [ 72.0866457, 21.3287189 ], [ 72.0869353, 21.3279521 ], [ 72.0874945, 21.3274473 ], [ 72.0883382, 21.3264329 ], [ 72.0889126, 21.3251566 ], [ 72.0896119, 21.3245251 ], [ 72.0901634, 21.3244064 ], [ 72.0903205, 21.3233802 ], [ 72.0912942, 21.3227534 ], [ 72.0926918, 21.3214913 ], [ 72.0940717, 21.3211297 ], [ 72.0940819, 21.3206153 ], [ 72.0960133, 21.3201343 ], [ 72.0960285, 21.3193626 ], [ 72.09658, 21.3192432 ], [ 72.0969988, 21.318865 ], [ 72.0975628, 21.3181029 ], [ 72.0975779, 21.3173314 ], [ 72.098142, 21.3165694 ], [ 72.0985643, 21.3160621 ], [ 72.0974615, 21.3163002 ], [ 72.0973137, 21.3168122 ], [ 72.0966128, 21.317572 ], [ 72.0957894, 21.3175576 ], [ 72.0957742, 21.3183293 ], [ 72.0949508, 21.318315 ], [ 72.0950978, 21.317803 ], [ 72.0953772, 21.3175507 ], [ 72.0953874, 21.3170362 ], [ 72.0972072, 21.3152668 ], [ 72.0963813, 21.3153807 ], [ 72.0936064, 21.3168763 ], [ 72.0919521, 21.3172341 ], [ 72.0923734, 21.3167268 ], [ 72.0925263, 21.3159578 ], [ 72.0933522, 21.3158429 ], [ 72.0934915, 21.3157172 ], [ 72.0936393, 21.3152052 ], [ 72.0922594, 21.3155667 ], [ 72.090318, 21.3165622 ], [ 72.0894821, 21.3171914 ], [ 72.0893341, 21.3177034 ], [ 72.0884955, 21.3184605 ], [ 72.088064, 21.319482 ], [ 72.0872381, 21.319596 ], [ 72.0861226, 21.3204775 ], [ 72.0859746, 21.3209895 ], [ 72.0852738, 21.3217491 ], [ 72.0847223, 21.3218676 ], [ 72.0838861, 21.3224968 ], [ 72.0835964, 21.3232636 ], [ 72.082768, 21.3235064 ], [ 72.08262, 21.3240184 ], [ 72.0823405, 21.3242707 ], [ 72.0823303, 21.3247852 ], [ 72.0817712, 21.3252898 ], [ 72.0806531, 21.3262995 ], [ 72.0802265, 21.327064 ], [ 72.0785696, 21.3275495 ], [ 72.0785594, 21.328064 ], [ 72.0769049, 21.3284206 ], [ 72.0763458, 21.3289254 ], [ 72.0755146, 21.3292972 ], [ 72.0755044, 21.3298117 ], [ 72.0746811, 21.3297973 ], [ 72.0746709, 21.3303116 ], [ 72.0727495, 21.3302781 ], [ 72.0727393, 21.3307924 ], [ 72.0708179, 21.3307589 ], [ 72.0708077, 21.3312732 ], [ 72.0702589, 21.3312637 ], [ 72.0704057, 21.3307517 ], [ 72.0711103, 21.3298632 ], [ 72.0719362, 21.3297495 ], [ 72.0719413, 21.3294922 ], [ 72.0711179, 21.3294779 ], [ 72.0714001, 21.3290965 ], [ 72.0727724, 21.3291205 ], [ 72.0731965, 21.3284851 ], [ 72.073075, 21.3277113 ], [ 72.0738984, 21.3277255 ], [ 72.0739035, 21.3274684 ], [ 72.0733545, 21.3274588 ], [ 72.0733647, 21.3269445 ], [ 72.0747423, 21.3267113 ], [ 72.0747523, 21.3261968 ], [ 72.0755758, 21.3262112 ], [ 72.0751789, 21.3254325 ], [ 72.075184, 21.3251753 ], [ 72.075604, 21.3247963 ], [ 72.0758784, 21.3248011 ], [ 72.0764146, 21.3254541 ], [ 72.0758656, 21.3254444 ], [ 72.0758605, 21.3257017 ], [ 72.0772277, 21.3259827 ], [ 72.0769379, 21.3267495 ], [ 72.0780385, 21.3266395 ], [ 72.0790164, 21.3257565 ], [ 72.0795805, 21.3249946 ], [ 72.0795907, 21.3244803 ], [ 72.0804346, 21.3234658 ], [ 72.0804549, 21.3224373 ], [ 72.0807446, 21.3216705 ], [ 72.0810241, 21.321418 ], [ 72.0811772, 21.3206489 ], [ 72.0817287, 21.3205295 ], [ 72.0824322, 21.3196418 ], [ 72.08258, 21.3191298 ], [ 72.0820311, 21.3191203 ], [ 72.0820209, 21.3196346 ], [ 72.080923, 21.3196155 ], [ 72.0812052, 21.3192341 ], [ 72.0830115, 21.3181082 ], [ 72.0831594, 21.3175962 ], [ 72.0837109, 21.3174768 ], [ 72.0852479, 21.3160889 ], [ 72.0853957, 21.3155769 ], [ 72.0859472, 21.3154575 ], [ 72.0863709, 21.3148221 ], [ 72.0872095, 21.3140649 ], [ 72.0873624, 21.3132957 ], [ 72.0879115, 21.3133051 ], [ 72.0880583, 21.3127933 ], [ 72.0891713, 21.3120407 ], [ 72.0893191, 21.3115287 ], [ 72.0912479, 21.3111759 ], [ 72.09262, 21.3111995 ], [ 72.0928996, 21.3109472 ], [ 72.0959287, 21.3104851 ], [ 72.0964826, 21.3102373 ], [ 72.0969064, 21.3096019 ], [ 72.0980243, 21.3085922 ], [ 72.0987287, 21.3077034 ], [ 72.0999757, 21.3070823 ], [ 72.1005098, 21.3056355 ], [ 72.1006926, 21.305551 ], [ 72.1007994, 21.3048688 ], [ 72.1009848, 21.3046552 ], [ 72.1008079, 21.3044356 ], [ 72.1019629, 21.3015442 ], [ 72.1021456, 21.30146 ], [ 72.1022422, 21.3012919 ], [ 72.102425, 21.3012074 ], [ 72.1025268, 21.3007822 ], [ 72.1029916, 21.3003163 ], [ 72.1035455, 21.3000685 ], [ 72.1042437, 21.299438 ], [ 72.1049604, 21.2979068 ], [ 72.1055068, 21.2980443 ], [ 72.1057761, 21.2983061 ], [ 72.1063274, 21.2981874 ], [ 72.1063174, 21.2987019 ], [ 72.1071407, 21.298716 ], [ 72.1071507, 21.2982016 ], [ 72.1066045, 21.2980632 ], [ 72.106335, 21.2978013 ], [ 72.1052399, 21.2976542 ], [ 72.1058013, 21.2970203 ], [ 72.1074478, 21.2970487 ], [ 72.1077274, 21.2967962 ], [ 72.1113023, 21.2964722 ], [ 72.1111596, 21.296727 ], [ 72.1111445, 21.2974985 ], [ 72.1115516, 21.2977627 ], [ 72.111988, 21.296484 ], [ 72.1119114, 21.2933955 ], [ 72.1113628, 21.2933861 ], [ 72.1110059, 21.2905499 ], [ 72.1104671, 21.2900262 ], [ 72.1096691, 21.2887263 ], [ 72.109283, 21.2874333 ], [ 72.1087344, 21.2874239 ], [ 72.1082157, 21.2858712 ], [ 72.1076669, 21.2858618 ], [ 72.1075442, 21.285088 ], [ 72.106452, 21.2825841 ], [ 72.1066348, 21.2824997 ], [ 72.1066448, 21.2819854 ], [ 72.1064656, 21.2818937 ], [ 72.1061664, 21.2783755 ], [ 72.1058922, 21.2783708 ], [ 72.1057391, 21.2813668 ], [ 72.1052828, 21.2814473 ], [ 72.1051704, 21.2801591 ], [ 72.1042407, 21.2785996 ], [ 72.1034125, 21.2788425 ], [ 72.1031229, 21.2796093 ], [ 72.1025818, 21.2792137 ], [ 72.1020356, 21.2790761 ], [ 72.1020254, 21.2795904 ], [ 72.1014768, 21.2795809 ], [ 72.1014665, 21.2800954 ], [ 72.1004641, 21.2799897 ], [ 72.0996977, 21.2792931 ], [ 72.0993068, 21.2782574 ], [ 72.098758, 21.2782479 ], [ 72.0986304, 21.2777312 ], [ 72.0980918, 21.2772073 ], [ 72.0976958, 21.2764288 ], [ 72.0971471, 21.2764193 ], [ 72.0966287, 21.2748667 ], [ 72.0960799, 21.2748573 ], [ 72.0963694, 21.2740905 ], [ 72.0958232, 21.2739519 ], [ 72.0952821, 21.2735571 ], [ 72.0957083, 21.2727928 ], [ 72.0964023, 21.2724184 ], [ 72.0975023, 21.2723092 ], [ 72.09761070445218, 21.271759460085303 ], [ 72.097654, 21.2715399 ], [ 72.0979336, 21.2712876 ], [ 72.0975008, 21.265363 ], [ 72.0973692, 21.2651035 ], [ 72.0987359, 21.2653844 ], [ 72.0982175, 21.2638318 ], [ 72.0976688, 21.2638223 ], [ 72.0976788, 21.263308 ], [ 72.0974019, 21.2634315 ], [ 72.0968557, 21.2632939 ], [ 72.0965966, 21.2625176 ], [ 72.0960453, 21.2626363 ], [ 72.0955066, 21.2621124 ], [ 72.0946937, 21.261584 ], [ 72.0941451, 21.2615743 ], [ 72.0938682, 21.2616987 ], [ 72.0941224, 21.2627322 ], [ 72.093848, 21.2627274 ], [ 72.0937204, 21.2622107 ], [ 72.0931817, 21.2616868 ], [ 72.0925267, 21.2601321 ], [ 72.0917087, 21.2598607 ], [ 72.0921299, 21.2593534 ], [ 72.0921451, 21.2585819 ], [ 72.0916064, 21.258058 ], [ 72.0913072, 21.2571113 ], [ 72.0925822, 21.2573031 ], [ 72.0920487, 21.256522 ], [ 72.0913208, 21.2564211 ], [ 72.0912307, 21.2562508 ], [ 72.090682, 21.2562411 ], [ 72.0904002, 21.2566218 ], [ 72.0901233, 21.2567461 ], [ 72.0899958, 21.2562294 ], [ 72.0894571, 21.2557055 ], [ 72.0893356, 21.2549316 ], [ 72.0887869, 21.2549221 ], [ 72.0882738, 21.2531124 ], [ 72.0877276, 21.2529739 ], [ 72.0871865, 21.2525791 ], [ 72.0869376, 21.2512886 ], [ 72.0863889, 21.2512791 ], [ 72.0859971, 21.2502432 ], [ 72.0857278, 21.2499813 ], [ 72.0856013, 21.2494645 ], [ 72.0847833, 21.2491931 ], [ 72.0845242, 21.2484169 ], [ 72.0839755, 21.2484075 ], [ 72.0839653, 21.2489217 ], [ 72.084514, 21.2489312 ], [ 72.0848998, 21.2502243 ], [ 72.0848947, 21.2504814 ], [ 72.084336, 21.2509862 ], [ 72.0841789, 21.2520126 ], [ 72.0852738, 21.2521597 ], [ 72.0856771, 21.252553 ], [ 72.0858047, 21.2530697 ], [ 72.0847125, 21.2527936 ], [ 72.0847022, 21.253308 ], [ 72.0852485, 21.2534456 ], [ 72.0857845, 21.2540984 ], [ 72.0844205, 21.2536885 ], [ 72.0841511, 21.2534265 ], [ 72.082782, 21.2532748 ], [ 72.0826544, 21.2527581 ], [ 72.0822536, 21.2522366 ], [ 72.0817024, 21.2523551 ], [ 72.0805847, 21.2533647 ], [ 72.0800336, 21.2534844 ], [ 72.0798858, 21.2539964 ], [ 72.0794645, 21.2545035 ], [ 72.0789134, 21.2546222 ], [ 72.078634, 21.2548745 ], [ 72.0778085, 21.2549894 ], [ 72.0776403, 21.2565299 ], [ 72.0773609, 21.2567824 ], [ 72.0769041, 21.2590897 ], [ 72.0766323, 21.2589559 ], [ 72.0759018, 21.2589839 ], [ 72.0759485, 21.2588159 ], [ 72.0765125, 21.258054 ], [ 72.0765227, 21.2575396 ], [ 72.076802, 21.2572872 ], [ 72.0766805, 21.2565133 ], [ 72.0761268, 21.2567609 ], [ 72.0759638, 21.2580444 ], [ 72.0755374, 21.2588089 ], [ 72.0749888, 21.2587992 ], [ 72.0749786, 21.2593137 ], [ 72.0757108, 21.2591566 ], [ 72.0756641, 21.2593256 ], [ 72.0748257, 21.2600827 ], [ 72.0745412, 21.2605923 ], [ 72.0743842, 21.2616186 ], [ 72.0738355, 21.2616091 ], [ 72.0737081, 21.2610924 ], [ 72.0740383, 21.2582683 ], [ 72.0745972, 21.2577635 ], [ 72.0754456, 21.2564919 ], [ 72.0765989, 21.2536821 ], [ 72.077432, 21.253182 ], [ 72.0779958, 21.2524199 ], [ 72.0778693, 21.2519032 ], [ 72.0792436, 21.2517979 ], [ 72.0796673, 21.2511627 ], [ 72.0805055, 21.2504054 ], [ 72.0805155, 21.2498911 ], [ 72.081494, 21.2490072 ], [ 72.0820451, 21.2488885 ], [ 72.0821971, 21.2481194 ], [ 72.081943, 21.247086 ], [ 72.0818468, 21.2450263 ], [ 72.0813006, 21.2448877 ], [ 72.0807597, 21.2444929 ], [ 72.0809319, 21.2426949 ], [ 72.0810746, 21.2424402 ], [ 72.0799824, 21.242164 ], [ 72.0797283, 21.2411306 ], [ 72.078085, 21.240973 ], [ 72.0778132, 21.2408401 ], [ 72.0776858, 21.2403234 ], [ 72.0774165, 21.2400614 ], [ 72.0775694, 21.2392924 ], [ 72.0778436, 21.2392971 ], [ 72.0779703, 21.2398138 ], [ 72.0786488, 21.2402109 ], [ 72.0794717, 21.2402253 ], [ 72.0800128, 21.240621 ], [ 72.0807639, 21.2372895 ], [ 72.0807792, 21.236518 ], [ 72.0811961, 21.236268 ], [ 72.0813227, 21.2367847 ], [ 72.0809723, 21.2406377 ], [ 72.0812315, 21.2414139 ], [ 72.0817699, 21.2419378 ], [ 72.0829289, 21.2458167 ], [ 72.0834851, 21.24544 ], [ 72.0848669, 21.2449493 ], [ 72.0858391, 21.2443236 ], [ 72.0858593, 21.2432948 ], [ 72.0861438, 21.2427851 ], [ 72.086824, 21.2361081 ], [ 72.0871386, 21.2340556 ], [ 72.0877024, 21.2332935 ], [ 72.088002, 21.2320123 ], [ 72.0891143, 21.2312597 ], [ 72.0894038, 21.2304929 ], [ 72.0894189, 21.2297214 ], [ 72.090267, 21.2284498 ], [ 72.0902772, 21.2279354 ], [ 72.0911152, 21.227178 ], [ 72.091819, 21.2262894 ], [ 72.093198, 21.2259276 ], [ 72.0932082, 21.2254133 ], [ 72.09348, 21.2255462 ], [ 72.0945771, 21.2255651 ], [ 72.0955543, 21.2246819 ], [ 72.096123, 21.2236626 ], [ 72.0960014, 21.2228889 ], [ 72.0965499, 21.2228983 ], [ 72.0967017, 21.2221291 ], [ 72.0985027, 21.2212591 ], [ 72.0997805, 21.2212406 ], [ 72.0998665, 21.2216691 ], [ 72.100415, 21.2216783 ], [ 72.1001507, 21.2211593 ], [ 72.0999716, 21.2210679 ], [ 72.1000483, 21.2193567 ], [ 72.1007697, 21.2175683 ], [ 72.1015951, 21.2174534 ], [ 72.1018744, 21.2172009 ], [ 72.1024253, 21.2170822 ], [ 72.1022978, 21.2165655 ], [ 72.102438, 21.2164389 ], [ 72.1032634, 21.2163247 ], [ 72.1031407, 21.2155509 ], [ 72.1034301, 21.214784 ], [ 72.1045421, 21.2140314 ], [ 72.1048315, 21.2132646 ], [ 72.1055302, 21.212633 ], [ 72.1058045, 21.2126375 ], [ 72.1060738, 21.2128995 ], [ 72.1066223, 21.2129089 ], [ 72.1075992, 21.2120257 ], [ 72.1081628, 21.2112635 ], [ 72.1083104, 21.2107515 ], [ 72.1091358, 21.2106366 ], [ 72.1092749, 21.2105107 ], [ 72.10928, 21.2102537 ], [ 72.1087465, 21.2094727 ], [ 72.1084972, 21.208182 ], [ 72.1089217, 21.2075457 ], [ 72.1094726, 21.207427 ], [ 72.1100613, 21.205379 ], [ 72.1095127, 21.2053695 ], [ 72.1099336, 21.2048622 ], [ 72.1100912, 21.2038358 ], [ 72.1095427, 21.2038265 ], [ 72.1094403, 21.2020238 ], [ 72.1100037, 21.2012616 ], [ 72.1107024, 21.20063 ], [ 72.1112558, 21.2003822 ], [ 72.1116792, 21.1997468 ], [ 72.1116843, 21.1994895 ], [ 72.1110141, 21.1987063 ], [ 72.1107374, 21.1988297 ], [ 72.1085486, 21.1985351 ], [ 72.1058211, 21.1977165 ], [ 72.1052726, 21.1977071 ], [ 72.1036472, 21.1966502 ], [ 72.1025503, 21.1966313 ], [ 72.1017378, 21.1961028 ], [ 72.1011993, 21.1955791 ], [ 72.0992796, 21.1955461 ], [ 72.0973702, 21.1949987 ], [ 72.0968217, 21.1949893 ], [ 72.0962781, 21.1947228 ], [ 72.0924565, 21.193757 ], [ 72.0924667, 21.1932425 ], [ 72.091098, 21.19309 ], [ 72.0905546, 21.1928233 ], [ 72.0897319, 21.1928091 ], [ 72.0880967, 21.1922665 ], [ 72.0861974, 21.1912045 ], [ 72.0856565, 21.1908099 ], [ 72.085534, 21.1900359 ], [ 72.0854074, 21.1895192 ], [ 72.0859585, 21.1893996 ], [ 72.0866561, 21.1887691 ], [ 72.0868037, 21.1882571 ], [ 72.0846127, 21.1880902 ], [ 72.0838, 21.1875616 ], [ 72.0827032, 21.1875427 ], [ 72.0805197, 21.1869904 ], [ 72.0802505, 21.1867284 ], [ 72.0797021, 21.186719 ], [ 72.0791611, 21.1863242 ], [ 72.0787746, 21.1850312 ], [ 72.0786582, 21.184 ], [ 72.0759238, 21.1835665 ], [ 72.0753855, 21.1830426 ], [ 72.0745705, 21.182643 ], [ 72.0744481, 21.1818691 ], [ 72.0740474, 21.1813476 ], [ 72.0710389, 21.1809091 ], [ 72.0691296, 21.1803616 ], [ 72.0677688, 21.1798235 ], [ 72.0666873, 21.1790329 ], [ 72.0658646, 21.1790186 ], [ 72.0642296, 21.1784758 ], [ 72.0634197, 21.177819 ], [ 72.0634299, 21.1773045 ], [ 72.0626074, 21.1772904 ], [ 72.0618255, 21.1752185 ], [ 72.0623738, 21.1752282 ], [ 72.0624095, 21.1734279 ], [ 72.061861, 21.1734185 ], [ 72.0618408, 21.174447 ], [ 72.0610156, 21.174561 ], [ 72.0585532, 21.1742609 ], [ 72.0580098, 21.173994 ], [ 72.0574615, 21.1739846 ], [ 72.05638, 21.173194 ], [ 72.0558316, 21.1731843 ], [ 72.0547503, 21.1723937 ], [ 72.052308, 21.1710649 ], [ 72.0517699, 21.170541 ], [ 72.0498711, 21.1694788 ], [ 72.049333, 21.1689549 ], [ 72.048244, 21.1685504 ], [ 72.0481166, 21.1680337 ], [ 72.0477161, 21.1675122 ], [ 72.0471678, 21.1675026 ], [ 72.0470404, 21.1669859 ], [ 72.0465023, 21.166462 ], [ 72.0459744, 21.1654238 ], [ 72.0458735, 21.1636211 ], [ 72.0453252, 21.1636117 ], [ 72.0453354, 21.1630972 ], [ 72.0439673, 21.1629443 ], [ 72.0417637, 21.1634202 ], [ 72.0414946, 21.1631583 ], [ 72.0398497, 21.1631295 ], [ 72.0393065, 21.1628627 ], [ 72.038484, 21.1628483 ], [ 72.0382151, 21.1625863 ], [ 72.0373976, 21.1623147 ], [ 72.036588, 21.1616578 ], [ 72.0364761, 21.1603696 ], [ 72.0360756, 21.1598481 ], [ 72.03389, 21.1594234 ], [ 72.0330778, 21.1588946 ], [ 72.0317072, 21.1588706 ], [ 72.0298034, 21.1580655 ], [ 72.0281638, 21.1577793 ], [ 72.0262602, 21.1569742 ], [ 72.0259911, 21.1567122 ], [ 72.0248998, 21.1564357 ], [ 72.0240877, 21.1559069 ], [ 72.0216256, 21.1556062 ], [ 72.0197169, 21.1550581 ], [ 72.0189047, 21.1545293 ], [ 72.0183564, 21.1545196 ], [ 72.0167348, 21.1533338 ], [ 72.0164814, 21.1523004 ], [ 72.0159331, 21.1522908 ], [ 72.0156743, 21.1515143 ], [ 72.0148547, 21.1513709 ], [ 72.0145857, 21.1511089 ], [ 72.0137685, 21.1508372 ], [ 72.0118753, 21.1495176 ], [ 72.0107866, 21.1491127 ], [ 72.0106594, 21.148596 ], [ 72.0102589, 21.1480745 ], [ 72.0097133, 21.1479358 ], [ 72.0091727, 21.1475408 ], [ 72.0090508, 21.1467669 ], [ 72.0085129, 21.1462429 ], [ 72.0084022, 21.1449547 ], [ 72.0078539, 21.1449449 ], [ 72.0078643, 21.1444306 ], [ 72.0084124, 21.1444403 ], [ 72.0080163, 21.1436616 ], [ 72.0079573, 21.1398018 ], [ 72.008508, 21.1396824 ], [ 72.0086471, 21.1395567 ], [ 72.0085417, 21.1380114 ], [ 72.0096432, 21.1377737 ], [ 72.0091106, 21.1369923 ], [ 72.0102121, 21.1367546 ], [ 72.0101004, 21.1354664 ], [ 72.0097052, 21.1346877 ], [ 72.0094285, 21.1348109 ], [ 72.0088804, 21.1348013 ], [ 72.0077658, 21.1356824 ], [ 72.0081661, 21.136204 ], [ 72.0078662, 21.1374849 ], [ 72.007587, 21.1377372 ], [ 72.00744, 21.1382492 ], [ 72.0044224, 21.1383238 ], [ 72.0041457, 21.138448 ], [ 72.0053372, 21.1405272 ], [ 72.005327, 21.1410415 ], [ 72.0051852, 21.1412962 ], [ 72.0046369, 21.1412866 ], [ 72.0049008, 21.1418056 ], [ 72.0043498, 21.1419241 ], [ 72.0040707, 21.1421764 ], [ 72.002969, 21.1424142 ], [ 72.0007762, 21.1423752 ], [ 72.0, 21.1421173 ], [ 71.9982002, 21.1421362 ], [ 71.9976596, 21.1425321 ], [ 71.9975842, 21.1456204 ], [ 71.9974529, 21.1458801 ], [ 71.9969048, 21.1458897 ], [ 71.9973516, 21.1476826 ], [ 71.9974918, 21.1478082 ], [ 71.9985882, 21.1477888 ], [ 72.0, 21.1481507 ], [ 71.9995808, 21.1494437 ], [ 72.0, 21.1534232 ], [ 72.0016498, 21.1534525 ], [ 72.0020527, 21.153846 ], [ 72.0021799, 21.1543628 ], [ 72.0032894, 21.1537389 ], [ 72.0038403, 21.1536204 ], [ 72.0040783, 21.1554253 ], [ 72.001611, 21.1553817 ], [ 72.0018488, 21.1571866 ], [ 72.00376, 21.1576058 ], [ 72.0040393, 21.1573535 ], [ 72.0043136, 21.1573584 ], [ 72.0048488, 21.1580114 ], [ 72.0037471, 21.1582492 ], [ 72.0037316, 21.1590207 ], [ 72.0042773, 21.1591584 ], [ 72.0050841, 21.1599445 ], [ 72.0056324, 21.1599543 ], [ 72.0061858, 21.1597069 ], [ 72.0070212, 21.1590789 ], [ 72.0068734, 21.1595909 ], [ 72.0063147, 21.1600955 ], [ 72.006563, 21.161386 ], [ 72.0072359, 21.1620407 ], [ 72.0085963, 21.1625793 ], [ 72.0091342, 21.1631033 ], [ 72.0099463, 21.1636321 ], [ 72.010492, 21.1637708 ], [ 72.0106131, 21.1645448 ], [ 72.0112809, 21.1654565 ], [ 72.0118318, 21.165338 ], [ 72.0124806, 21.1671503 ], [ 72.0128845, 21.1675429 ], [ 72.0138358, 21.167946 ], [ 72.0137997, 21.169746 ], [ 72.0132359, 21.1705079 ], [ 72.0132255, 21.1710222 ], [ 72.0136296, 21.1714147 ], [ 72.0141752, 21.1715534 ], [ 72.0141856, 21.1710392 ], [ 72.0152797, 21.1711866 ], [ 72.0158176, 21.1717107 ], [ 72.0167639, 21.1723711 ], [ 72.0167535, 21.1728853 ], [ 72.0170225, 21.1731473 ], [ 72.0171344, 21.1744355 ], [ 72.0168601, 21.1744306 ], [ 72.0166118, 21.1731401 ], [ 72.0157893, 21.1731255 ], [ 72.0152667, 21.17183 ], [ 72.0144443, 21.1718156 ], [ 72.0141391, 21.1733537 ], [ 72.0135959, 21.1730868 ], [ 72.013296, 21.1743677 ], [ 72.0130217, 21.1743629 ], [ 72.0127734, 21.1730723 ], [ 72.0122251, 21.1730626 ], [ 72.0125946, 21.1751271 ], [ 72.0127269, 21.1753867 ], [ 72.0116354, 21.17511 ], [ 72.0117373, 21.174685 ], [ 72.0119199, 21.1746007 ], [ 72.0119613, 21.1725434 ], [ 72.011413, 21.1725336 ], [ 72.0112599, 21.1733026 ], [ 72.0115532, 21.1745056 ], [ 72.0110973, 21.1745861 ], [ 72.0111181, 21.1735574 ], [ 72.0102982, 21.173414 ], [ 72.009468, 21.1737855 ], [ 72.0094782, 21.1732713 ], [ 72.0100291, 21.1731518 ], [ 72.0103111, 21.1727714 ], [ 72.0092143, 21.1727521 ], [ 72.0095094, 21.1717283 ], [ 72.010055, 21.1718661 ], [ 72.0106137, 21.1713614 ], [ 72.0117129, 21.1712527 ], [ 72.0116012, 21.1699645 ], [ 72.0113323, 21.1697026 ], [ 72.0112162, 21.1686714 ], [ 72.0106679, 21.1686617 ], [ 72.0105407, 21.168145 ], [ 72.0098713, 21.1673614 ], [ 72.0082315, 21.1670751 ], [ 72.0083527, 21.167849 ], [ 72.0086216, 21.168111 ], [ 72.0086165, 21.1683682 ], [ 72.0079057, 21.1696419 ], [ 72.0065504, 21.168846 ], [ 72.0065608, 21.1683318 ], [ 72.0071091, 21.1683416 ], [ 72.0067076, 21.1678199 ], [ 72.0061852, 21.1665243 ], [ 72.0057849, 21.1660029 ], [ 72.0046857, 21.1661116 ], [ 72.0038709, 21.1657116 ], [ 72.0041556, 21.1652021 ], [ 72.0019597, 21.1652915 ], [ 72.0016908, 21.1650294 ], [ 72.000602, 21.1646247 ], [ 72.0007592, 21.1635984 ], [ 72.0002264, 21.1628173 ], [ 72.0003797, 21.1620483 ], [ 72.0, 21.1619517 ], [ 71.9994086, 21.1612802 ], [ 71.9988654, 21.1615472 ], [ 71.998612, 21.1625807 ], [ 71.9980637, 21.1625903 ], [ 71.9981796, 21.1615593 ], [ 71.9980378, 21.1613045 ], [ 71.9974895, 21.1613144 ], [ 71.9975311, 21.1633714 ], [ 71.9969828, 21.1633813 ], [ 71.9970934, 21.1620931 ], [ 71.9963929, 21.1613337 ], [ 71.9972155, 21.1613191 ], [ 71.9974585, 21.1597714 ], [ 71.9982835, 21.159885 ], [ 71.9984226, 21.1600114 ], [ 71.998581, 21.1610377 ], [ 71.9996749, 21.1608891 ], [ 72.0, 21.1604981 ], [ 72.0, 21.159861 ], [ 71.9999257, 21.1597275 ], [ 71.9990981, 21.159485 ], [ 71.9992296, 21.1592254 ], [ 71.9992193, 21.1587111 ], [ 71.9990775, 21.1584563 ], [ 71.9988059, 21.1585894 ], [ 71.9982576, 21.158599 ], [ 71.9976989, 21.1580946 ], [ 71.9968739, 21.157981 ], [ 71.9970157, 21.1582358 ], [ 71.9970312, 21.1590072 ], [ 71.996636, 21.1597859 ], [ 71.9952601, 21.1595531 ], [ 71.9950015, 21.1603293 ], [ 71.9944532, 21.1603391 ], [ 71.9944687, 21.1611106 ], [ 71.9950197, 21.1612289 ], [ 71.9953017, 21.1616103 ], [ 71.9939282, 21.1615056 ], [ 71.9936515, 21.1613822 ], [ 71.9938946, 21.1598345 ], [ 71.9949911, 21.159815 ], [ 71.9944222, 21.1587961 ], [ 71.9949705, 21.1587865 ], [ 71.9949601, 21.158272 ], [ 71.9944118, 21.1582819 ], [ 71.9945173, 21.1567364 ], [ 71.9940964, 21.1562295 ], [ 71.9935481, 21.1562392 ], [ 71.9935377, 21.1557249 ], [ 71.9927154, 21.1557394 ], [ 71.9924619, 21.1567729 ], [ 71.9913601, 21.1565351 ], [ 71.9910705, 21.1557685 ], [ 71.9891463, 21.1555453 ], [ 71.9891361, 21.1550309 ], [ 71.9877706, 21.1553123 ], [ 71.9879433, 21.1571101 ], [ 71.98866, 21.1586408 ], [ 71.9881117, 21.1586506 ], [ 71.9879639, 21.1581386 ], [ 71.9874052, 21.157634 ], [ 71.9875118, 21.1560887 ], [ 71.9858568, 21.1556034 ], [ 71.9859881, 21.1553439 ], [ 71.9858309, 21.1543176 ], [ 71.9852826, 21.1543272 ], [ 71.9855491, 21.1539362 ], [ 71.9860023, 21.1538876 ], [ 71.9863896, 21.1548222 ], [ 71.9877653, 21.1550553 ], [ 71.9874808, 21.1545457 ], [ 71.9866534, 21.154303 ], [ 71.986643, 21.1537888 ], [ 71.9861862, 21.1537084 ], [ 71.9855309, 21.1530366 ], [ 71.9860792, 21.1530269 ], [ 71.9861798, 21.1512244 ], [ 71.9865837, 21.1508309 ], [ 71.9871344, 21.1509504 ], [ 71.9871242, 21.1504359 ], [ 71.9887715, 21.1505351 ], [ 71.9890509, 21.1507875 ], [ 71.9904292, 21.1511494 ], [ 71.9905192, 21.1488324 ], [ 71.991595, 21.1477844 ], [ 71.9918588, 21.1472652 ], [ 71.9918278, 21.1457223 ], [ 71.9913965, 21.1447009 ], [ 71.9919446, 21.1446913 ], [ 71.991955, 21.1452055 ], [ 71.9923606, 21.1449411 ], [ 71.9923451, 21.1441696 ], [ 71.9920607, 21.1436603 ], [ 71.9920503, 21.1431458 ], [ 71.9914918, 21.1426414 ], [ 71.9914865, 21.1423841 ], [ 71.9916215, 21.1422526 ], [ 71.9924413, 21.1421099 ], [ 71.9921569, 21.1416005 ], [ 71.9916086, 21.1416102 ], [ 71.9917349, 21.1410935 ], [ 71.9918698, 21.1409621 ], [ 71.9924181, 21.1409523 ], [ 71.9926972, 21.1412046 ], [ 71.9935196, 21.14119 ], [ 71.9951747, 21.1416752 ], [ 71.9973674, 21.1416364 ], [ 71.9979104, 21.1413696 ], [ 72.0, 21.1413856 ], [ 72.0007917, 21.1416038 ], [ 72.0027156, 21.1413807 ], [ 72.0038095, 21.1415291 ], [ 72.0035509, 21.1407529 ], [ 72.0027311, 21.1406092 ], [ 72.0024623, 21.1403471 ], [ 72.0, 21.1403034 ], [ 71.9965192, 21.1403652 ], [ 71.9948643, 21.1398801 ], [ 71.994316, 21.1398897 ], [ 71.9937575, 21.1393851 ], [ 71.9926611, 21.1394045 ], [ 71.9904449, 21.1382866 ], [ 71.9904347, 21.1377722 ], [ 71.9898942, 21.1381672 ], [ 71.9888029, 21.1384437 ], [ 71.9882444, 21.137939 ], [ 71.9874119, 21.1374393 ], [ 71.9857568, 21.136954 ], [ 71.9854776, 21.1367017 ], [ 71.9838227, 21.1362163 ], [ 71.9829849, 21.1354594 ], [ 71.9824368, 21.135469 ], [ 71.9805026, 21.1347313 ], [ 71.9802285, 21.1347362 ], [ 71.9799545, 21.134741 ], [ 71.9794011, 21.1344936 ], [ 71.9780331, 21.1346467 ], [ 71.9778853, 21.1341347 ], [ 71.9771851, 21.1333753 ], [ 71.9760862, 21.1332656 ], [ 71.975251, 21.1326376 ], [ 71.9752355, 21.1318661 ], [ 71.9746874, 21.1318757 ], [ 71.9748137, 21.131359 ], [ 71.9734175, 21.1300972 ], [ 71.9728539, 21.1293354 ], [ 71.9719959, 21.1275497 ], [ 71.9716961, 21.1262687 ], [ 71.9714168, 21.1260164 ], [ 71.9714117, 21.1257591 ], [ 71.9718029, 21.1247232 ], [ 71.9726251, 21.1247089 ], [ 71.9726353, 21.1252231 ], [ 71.9738477, 21.1241728 ], [ 71.9739749, 21.1236561 ], [ 71.9742516, 21.1237794 ], [ 71.9756247, 21.1238844 ], [ 71.975599, 21.1225985 ], [ 71.9747793, 21.1227412 ], [ 71.9745103, 21.1230031 ], [ 71.9720384, 21.1227894 ], [ 71.971767, 21.1229232 ], [ 71.9717772, 21.1234374 ], [ 71.9715005, 21.1233133 ], [ 71.9698611, 21.1235992 ], [ 71.9676659, 21.1235096 ], [ 71.9676763, 21.1240239 ], [ 71.9586315, 21.1241823 ], [ 71.958616, 21.1234108 ], [ 71.9569715, 21.1234395 ], [ 71.9569766, 21.1236966 ], [ 71.9575249, 21.1236871 ], [ 71.9575351, 21.1242014 ], [ 71.9561569, 21.1238391 ], [ 71.9556088, 21.1238487 ], [ 71.9542282, 21.1233583 ], [ 71.953949, 21.1231059 ], [ 71.9534007, 21.1231154 ], [ 71.9520152, 21.1223679 ], [ 71.9514644, 21.1222492 ], [ 71.9517309, 21.1218584 ], [ 71.9522815, 21.1219778 ], [ 71.9517079, 21.1207015 ], [ 71.9514338, 21.1207062 ], [ 71.951444, 21.1212207 ], [ 71.9506168, 21.1209778 ], [ 71.9506066, 21.1204633 ], [ 71.9495177, 21.1208678 ], [ 71.9489696, 21.1208774 ], [ 71.9473074, 21.1200063 ], [ 71.9470484, 21.1207826 ], [ 71.9456807, 21.1209345 ], [ 71.9454117, 21.1211965 ], [ 71.9448661, 21.1213352 ], [ 71.9448559, 21.1208207 ], [ 71.9445818, 21.1208255 ], [ 71.944592, 21.1213399 ], [ 71.9426708, 21.1212443 ], [ 71.9418434, 21.1210012 ], [ 71.9410212, 21.1210156 ], [ 71.9404654, 21.1206399 ], [ 71.9401711, 21.1196159 ], [ 71.9407192, 21.1196064 ], [ 71.9407141, 21.1193492 ], [ 71.9396179, 21.1193683 ], [ 71.9397493, 21.1191088 ], [ 71.9398564, 21.1175633 ], [ 71.941232, 21.1177967 ], [ 71.9414805, 21.1165061 ], [ 71.9403894, 21.1167822 ], [ 71.9400849, 21.1152439 ], [ 71.9389861, 21.1151339 ], [ 71.9379024, 21.1157964 ], [ 71.9379177, 21.1165679 ], [ 71.9373618, 21.1161912 ], [ 71.9370878, 21.1161959 ], [ 71.9368188, 21.1164579 ], [ 71.9357224, 21.116477 ], [ 71.9335196, 21.1160005 ], [ 71.9332507, 21.1162624 ], [ 71.9324284, 21.1162766 ], [ 71.9318751, 21.116029 ], [ 71.9302282, 21.1159294 ], [ 71.9302131, 21.1151577 ], [ 71.929939, 21.1151627 ], [ 71.929949, 21.1156769 ], [ 71.9288502, 21.1155669 ], [ 71.9285737, 21.1154435 ], [ 71.928695, 21.1146696 ], [ 71.9271579, 21.1131526 ], [ 71.9266072, 21.113033 ], [ 71.9254958, 21.1122804 ], [ 71.9249375, 21.1117756 ], [ 71.923019, 21.1118087 ], [ 71.92275, 21.1120706 ], [ 71.9205624, 21.1123656 ], [ 71.9202859, 21.1122422 ], [ 71.920301, 21.1130137 ], [ 71.9186589, 21.1131702 ], [ 71.9178317, 21.1129272 ], [ 71.9167355, 21.1129461 ], [ 71.9161823, 21.1126983 ], [ 71.9134314, 21.1122311 ], [ 71.9120611, 21.1122547 ], [ 71.8983173, 21.1104324 ], [ 71.897830612500002, 21.110270574973391 ], [ 71.8961095, 21.1096983 ], [ 71.8955514, 21.1091933 ], [ 71.8950009, 21.1090744 ], [ 71.8949859, 21.1083029 ], [ 71.8941636, 21.1083169 ], [ 71.8944127, 21.1070264 ], [ 71.8916497, 21.1059154 ], [ 71.8913706, 21.1056629 ], [ 71.8894397, 21.105053 ], [ 71.8891506, 21.1042863 ], [ 71.8896989, 21.1042768 ], [ 71.8888567, 21.1032623 ], [ 71.8883086, 21.1032715 ], [ 71.888161, 21.1027595 ], [ 71.887603, 21.1022545 ], [ 71.88704, 21.1014923 ], [ 71.8870349, 21.1012351 ], [ 71.8875681, 21.1004541 ], [ 71.8875531, 21.0996826 ], [ 71.8867161, 21.0989251 ], [ 71.8864322, 21.0984154 ], [ 71.8864172, 21.0976439 ], [ 71.8862757, 21.0973889 ], [ 71.8851744, 21.0971504 ], [ 71.8847431, 21.0961287 ], [ 71.8844639, 21.0958761 ], [ 71.8843025, 21.0945926 ], [ 71.8837544, 21.0946019 ], [ 71.8837446, 21.0940876 ], [ 71.8826533, 21.0943634 ], [ 71.8825059, 21.0938514 ], [ 71.882283362970298, 21.09365 ], [ 71.8822269, 21.0935989 ], [ 71.8817964, 21.0925772 ], [ 71.8806928, 21.0922095 ], [ 71.8801373, 21.0918334 ], [ 71.8799799, 21.090807 ], [ 71.8795594, 21.0902997 ], [ 71.8787421, 21.0905707 ], [ 71.8784534, 21.089804 ], [ 71.8776337, 21.0899461 ], [ 71.8768215, 21.0904743 ], [ 71.876271, 21.0903555 ], [ 71.8764025, 21.090096 ], [ 71.8763827, 21.0890672 ], [ 71.8762411, 21.0888123 ], [ 71.8751449, 21.088831 ], [ 71.8748956, 21.0901215 ], [ 71.8746191, 21.0899971 ], [ 71.869405, 21.0897 ], [ 71.869116, 21.088933 ], [ 71.8688444, 21.0890659 ], [ 71.8677482, 21.0890844 ], [ 71.8671927, 21.0887083 ], [ 71.8674471, 21.0876751 ], [ 71.866625, 21.0876889 ], [ 71.8667715, 21.0882009 ], [ 71.8666397, 21.0884604 ], [ 71.8644451, 21.0883685 ], [ 71.8633388, 21.0878726 ], [ 71.8625169, 21.0878865 ], [ 71.8611368, 21.0873951 ], [ 71.8603146, 21.0874091 ], [ 71.8592062, 21.0867851 ], [ 71.8591963, 21.0862706 ], [ 71.8583742, 21.0862846 ], [ 71.8582218, 21.0855154 ], [ 71.857106, 21.084505 ], [ 71.8569597, 21.083993 ], [ 71.8566881, 21.0841256 ], [ 71.85614, 21.0841349 ], [ 71.855861, 21.0838824 ], [ 71.8542094, 21.0835246 ], [ 71.8544539, 21.0819769 ], [ 71.8539108, 21.0822434 ], [ 71.8537635, 21.0817312 ], [ 71.8533432, 21.0812237 ], [ 71.8530716, 21.0813566 ], [ 71.8516964, 21.0811224 ], [ 71.851141, 21.0807463 ], [ 71.8509937, 21.0802341 ], [ 71.8507148, 21.0799816 ], [ 71.8505685, 21.0794694 ], [ 71.8511166, 21.0794604 ], [ 71.8510969, 21.0784314 ], [ 71.8505464, 21.0783116 ], [ 71.8502674, 21.0780591 ], [ 71.8497193, 21.0780684 ], [ 71.8483271, 21.0769344 ], [ 71.8484783, 21.0777036 ], [ 71.8483468, 21.0779631 ], [ 71.8477987, 21.0779724 ], [ 71.8478085, 21.0784868 ], [ 71.8450657, 21.0784037 ], [ 71.8436908, 21.0781695 ], [ 71.8420319, 21.0774254 ], [ 71.8403804, 21.0770676 ], [ 71.8400916, 21.0763007 ], [ 71.839546, 21.0764381 ], [ 71.8384352, 21.0756847 ], [ 71.8378849, 21.0755658 ], [ 71.8378751, 21.0750514 ], [ 71.8367741, 21.0748125 ], [ 71.8369008, 21.0742959 ], [ 71.8367594, 21.074041 ], [ 71.8364878, 21.0741737 ], [ 71.8351177, 21.0741965 ], [ 71.8329157, 21.0737187 ], [ 71.8326369, 21.0734662 ], [ 71.8318123, 21.0733517 ], [ 71.8318027, 21.0728374 ], [ 71.8315311, 21.0729701 ], [ 71.83043, 21.0727312 ], [ 71.8301512, 21.0724785 ], [ 71.8296006, 21.0723596 ], [ 71.8295861, 21.0715879 ], [ 71.8287639, 21.0716017 ], [ 71.8279079, 21.0698149 ], [ 71.8262661, 21.0699705 ], [ 71.8251627, 21.0696034 ], [ 71.8251775, 21.0703749 ], [ 71.8246294, 21.0703842 ], [ 71.8246439, 21.0711557 ], [ 71.823281, 21.0715639 ], [ 71.822185, 21.0715821 ], [ 71.8216322, 21.0713341 ], [ 71.8199832, 21.0711041 ], [ 71.8197042, 21.0708516 ], [ 71.8188823, 21.0708652 ], [ 71.8174975, 21.0701164 ], [ 71.8169495, 21.0701255 ], [ 71.8158437, 21.0696293 ], [ 71.815286, 21.069124 ], [ 71.8133485, 21.068127 ], [ 71.8128004, 21.068136 ], [ 71.8116899, 21.0673827 ], [ 71.8111321, 21.0668773 ], [ 71.8100265, 21.066381 ], [ 71.80919, 21.0656231 ], [ 71.8086443, 21.0657611 ], [ 71.8086347, 21.0652468 ], [ 71.8080841, 21.0651268 ], [ 71.8078053, 21.0648741 ], [ 71.8072548, 21.064755 ], [ 71.8069664, 21.0639879 ], [ 71.8061444, 21.0640015 ], [ 71.8058558, 21.0632345 ], [ 71.8047549, 21.0629954 ], [ 71.8047452, 21.062481 ], [ 71.8041973, 21.0624901 ], [ 71.8040501, 21.0619779 ], [ 71.80363, 21.0614702 ], [ 71.8030796, 21.0613502 ], [ 71.8019715, 21.0607257 ], [ 71.8018244, 21.0602137 ], [ 71.8014041, 21.0597061 ], [ 71.8008537, 21.0595861 ], [ 71.800575, 21.0593334 ], [ 71.7997505, 21.0592187 ], [ 71.7996033, 21.0587067 ], [ 71.7991832, 21.058199 ], [ 71.7986353, 21.0582081 ], [ 71.7984833, 21.0574386 ], [ 71.7979208, 21.056676 ], [ 71.7973633, 21.0561706 ], [ 71.7959309, 21.0528495 ], [ 71.7953107, 21.0490006 ], [ 71.7948859, 21.0482357 ], [ 71.7937849, 21.0479964 ], [ 71.7940879, 21.0495352 ], [ 71.7935398, 21.0495443 ], [ 71.7935495, 21.0500586 ], [ 71.7930038, 21.0501958 ], [ 71.7924655, 21.0507191 ], [ 71.7919199, 21.0508573 ], [ 71.7920996, 21.0531699 ], [ 71.7922419, 21.0534249 ], [ 71.7916938, 21.0534339 ], [ 71.7917131, 21.0544627 ], [ 71.7922563, 21.0541965 ], [ 71.792266, 21.0547108 ], [ 71.7925375, 21.0545774 ], [ 71.7936336, 21.0545592 ], [ 71.7939027, 21.0542977 ], [ 71.7941767, 21.0542931 ], [ 71.7947296, 21.0545413 ], [ 71.7955659, 21.0552994 ], [ 71.7961115, 21.0551621 ], [ 71.796546, 21.0564415 ], [ 71.796551, 21.0566987 ], [ 71.7962865, 21.0572175 ], [ 71.7962913, 21.0574747 ], [ 71.79657, 21.0577274 ], [ 71.7967173, 21.0582396 ], [ 71.7956067, 21.0574861 ], [ 71.7954549, 21.0567167 ], [ 71.7940609, 21.0554532 ], [ 71.7939148, 21.054941 ], [ 71.7928188, 21.0549592 ], [ 71.7928379, 21.0559879 ], [ 71.79229, 21.055997 ], [ 71.7922996, 21.0565114 ], [ 71.7917515, 21.0565203 ], [ 71.7917419, 21.056006 ], [ 71.7906508, 21.0562812 ], [ 71.7906604, 21.0567957 ], [ 71.789021, 21.0570797 ], [ 71.7890163, 21.0568227 ], [ 71.789836, 21.05668 ], [ 71.7901027, 21.0562901 ], [ 71.7870934, 21.0565968 ], [ 71.7870983, 21.0568541 ], [ 71.7876462, 21.0568452 ], [ 71.7876511, 21.0571022 ], [ 71.7865574, 21.0572485 ], [ 71.7862811, 21.0571247 ], [ 71.7862762, 21.0568677 ], [ 71.7868243, 21.0568586 ], [ 71.7868195, 21.0566014 ], [ 71.7843629, 21.0571563 ], [ 71.7845043, 21.0574112 ], [ 71.7845234, 21.0584402 ], [ 71.7842639, 21.0592162 ], [ 71.7842877, 21.0605023 ], [ 71.7838868, 21.0610234 ], [ 71.7836128, 21.0610279 ], [ 71.7838677, 21.0599945 ], [ 71.7833244, 21.0602608 ], [ 71.7836224, 21.0615424 ], [ 71.7830768, 21.0616794 ], [ 71.7819998, 21.0627263 ], [ 71.7817258, 21.0627308 ], [ 71.7811705, 21.0623544 ], [ 71.7811611, 21.0618399 ], [ 71.780887, 21.0618444 ], [ 71.7808967, 21.0623589 ], [ 71.780077, 21.0625004 ], [ 71.7798005, 21.0623768 ], [ 71.7797957, 21.0621196 ], [ 71.7803438, 21.0621107 ], [ 71.7807353, 21.061075 ], [ 71.7811395, 21.0606821 ], [ 71.7823601, 21.0600193 ], [ 71.7824737, 21.058731 ], [ 71.7816589, 21.0591298 ], [ 71.7800195, 21.0594139 ], [ 71.7794644, 21.0590376 ], [ 71.7800004, 21.0583852 ], [ 71.781368, 21.0582345 ], [ 71.7814903, 21.0574608 ], [ 71.7816253, 21.0573294 ], [ 71.782719, 21.0571833 ], [ 71.7827046, 21.0564116 ], [ 71.7840698, 21.0561319 ], [ 71.7840603, 21.0556174 ], [ 71.7835122, 21.0556265 ], [ 71.7840316, 21.0540743 ], [ 71.7845795, 21.0540654 ], [ 71.7845748, 21.0538081 ], [ 71.7837479, 21.0535643 ], [ 71.7837623, 21.054336 ], [ 71.7829403, 21.0543494 ], [ 71.7829307, 21.053835 ], [ 71.7821136, 21.0541056 ], [ 71.7818205, 21.0530814 ], [ 71.7831856, 21.0528017 ], [ 71.7831713, 21.05203 ], [ 71.7826256, 21.0521673 ], [ 71.7823493, 21.0520436 ], [ 71.782609, 21.0512674 ], [ 71.7809602, 21.0510372 ], [ 71.7807054, 21.0520705 ], [ 71.7801501, 21.0516932 ], [ 71.7795997, 21.051574 ], [ 71.7797315, 21.0513145 ], [ 71.7795759, 21.050288 ], [ 71.7804026, 21.0505316 ], [ 71.7803882, 21.0497601 ], [ 71.7792875, 21.0495209 ], [ 71.7792684, 21.048492 ], [ 71.7800904, 21.0484785 ], [ 71.7801, 21.048993 ], [ 71.7811958, 21.048975 ], [ 71.7813229, 21.0484583 ], [ 71.7825468, 21.0479236 ], [ 71.7825563, 21.0484381 ], [ 71.7830995, 21.048172 ], [ 71.7829717, 21.0486887 ], [ 71.7827024, 21.0489503 ], [ 71.7824476, 21.0499837 ], [ 71.7825875, 21.0501096 ], [ 71.7831378, 21.0502296 ], [ 71.7831425, 21.0504869 ], [ 71.7825946, 21.0504957 ], [ 71.7828878, 21.0515201 ], [ 71.7831616, 21.0515156 ], [ 71.7831522, 21.0510013 ], [ 71.783426, 21.0509968 ], [ 71.7834357, 21.0515112 ], [ 71.7838415, 21.0512472 ], [ 71.7839694, 21.0507305 ], [ 71.7847961, 21.0509743 ], [ 71.7848008, 21.0512315 ], [ 71.7842529, 21.0512404 ], [ 71.7842576, 21.0514976 ], [ 71.7869976, 21.0514528 ], [ 71.7869881, 21.0509384 ], [ 71.7875385, 21.0510574 ], [ 71.7879369, 21.0504082 ], [ 71.787881, 21.0497248 ], [ 71.7883365, 21.0497579 ], [ 71.7886152, 21.0500106 ], [ 71.7891631, 21.0500017 ], [ 71.7898309, 21.0490907 ], [ 71.7896848, 21.0485785 ], [ 71.7877717, 21.0488671 ], [ 71.7876903, 21.0495519 ], [ 71.787512, 21.0496433 ], [ 71.7873554, 21.0486167 ], [ 71.7874905, 21.0484853 ], [ 71.7885793, 21.048082 ], [ 71.7885697, 21.0475676 ], [ 71.7896776, 21.0481922 ], [ 71.7905117, 21.0488221 ], [ 71.7903644, 21.0483099 ], [ 71.7900856, 21.0480573 ], [ 71.7900809, 21.0478 ], [ 71.7902161, 21.0476689 ], [ 71.7904899, 21.0476643 ], [ 71.7907687, 21.047917 ], [ 71.7918647, 21.0478989 ], [ 71.7919989, 21.0477687 ], [ 71.791994, 21.0475114 ], [ 71.7912903, 21.0464938 ], [ 71.7918407, 21.0466129 ], [ 71.7926819, 21.0476282 ], [ 71.7954217, 21.0475832 ], [ 71.7955559, 21.0474528 ], [ 71.7956836, 21.0469361 ], [ 71.7970512, 21.0467845 ], [ 71.7981327, 21.0459947 ], [ 71.7992287, 21.0459767 ], [ 71.7997863, 21.0464821 ], [ 71.8006129, 21.0467258 ], [ 71.8019853, 21.0468322 ], [ 71.801843, 21.0465772 ], [ 71.801819, 21.0452912 ], [ 71.8022136, 21.0443839 ], [ 71.8030355, 21.0443702 ], [ 71.8031696, 21.0442398 ], [ 71.8034147, 21.0426921 ], [ 71.8032686, 21.0421799 ], [ 71.8046481, 21.0426717 ], [ 71.8047749, 21.042155 ], [ 71.8049099, 21.0420238 ], [ 71.8054555, 21.0418866 ], [ 71.8055727, 21.0408554 ], [ 71.8054313, 21.0406005 ], [ 71.8062582, 21.0408441 ], [ 71.8062147, 21.0385292 ], [ 71.8051357, 21.0394472 ], [ 71.8045925, 21.0397135 ], [ 71.7982865, 21.0395602 ], [ 71.7971858, 21.0393209 ], [ 71.796907, 21.0390682 ], [ 71.7963567, 21.0389492 ], [ 71.796371, 21.0397208 ], [ 71.7958207, 21.0396006 ], [ 71.7955421, 21.0393479 ], [ 71.7941697, 21.0392425 ], [ 71.7940227, 21.0387303 ], [ 71.7937439, 21.0384776 ], [ 71.7937296, 21.0377059 ], [ 71.7938622, 21.0374464 ], [ 71.7930403, 21.03746 ], [ 71.7928932, 21.0369478 ], [ 71.7924731, 21.0364402 ], [ 71.7916513, 21.0364536 ], [ 71.7918502, 21.0397951 ], [ 71.7917281, 21.0405691 ], [ 71.7906226, 21.0400726 ], [ 71.790637, 21.0408443 ], [ 71.7895362, 21.040605 ], [ 71.7895459, 21.0411194 ], [ 71.7889906, 21.0407422 ], [ 71.7884402, 21.0406229 ], [ 71.7884499, 21.0411374 ], [ 71.7890002, 21.0412567 ], [ 71.7894179, 21.0416362 ], [ 71.789565, 21.0421482 ], [ 71.7901129, 21.0421393 ], [ 71.7901225, 21.0426537 ], [ 71.7890218, 21.0424145 ], [ 71.7890314, 21.0429289 ], [ 71.7871208, 21.0433457 ], [ 71.7857507, 21.0433682 ], [ 71.7851981, 21.04312 ], [ 71.7846502, 21.0431289 ], [ 71.7840926, 21.0426235 ], [ 71.7813385, 21.0418968 ], [ 71.7810598, 21.0416441 ], [ 71.7805117, 21.041653 ], [ 71.7799543, 21.0411476 ], [ 71.7788439, 21.0403939 ], [ 71.7782937, 21.0402746 ], [ 71.7780006, 21.0392504 ], [ 71.7774527, 21.0392593 ], [ 71.7771548, 21.0379777 ], [ 71.7763376, 21.0382483 ], [ 71.7760781, 21.0390246 ], [ 71.7747177, 21.0395613 ], [ 71.7748876, 21.0413595 ], [ 71.7760169, 21.0431421 ], [ 71.776036, 21.044171 ], [ 71.7759042, 21.0444303 ], [ 71.7767285, 21.0445451 ], [ 71.7775576, 21.044918 ], [ 71.7775481, 21.0444035 ], [ 71.7780961, 21.0443946 ], [ 71.777846, 21.0456851 ], [ 71.7770263, 21.0458267 ], [ 71.7767572, 21.0460884 ], [ 71.7759352, 21.0461019 ], [ 71.7745723, 21.0465105 ], [ 71.7746993, 21.0459938 ], [ 71.7749687, 21.0457322 ], [ 71.7750917, 21.0449582 ], [ 71.7740006, 21.0452334 ], [ 71.7741658, 21.0467743 ], [ 71.7745867, 21.0472822 ], [ 71.7715824, 21.0478458 ], [ 71.7717285, 21.048358 ], [ 71.7716062, 21.0491317 ], [ 71.7713321, 21.0491363 ], [ 71.7713132, 21.0481073 ], [ 71.7707651, 21.0481164 ], [ 71.7706657, 21.0501763 ], [ 71.7701272, 21.0506997 ], [ 71.7700052, 21.0514736 ], [ 71.7697311, 21.051478 ], [ 71.7694238, 21.0496819 ], [ 71.7680586, 21.0499616 ], [ 71.7677702, 21.0491943 ], [ 71.7685922, 21.0491811 ], [ 71.7687003, 21.0476354 ], [ 71.7684168, 21.0471255 ], [ 71.7684024, 21.0463538 ], [ 71.7685351, 21.0460945 ], [ 71.7674416, 21.0462404 ], [ 71.7671724, 21.0465022 ], [ 71.7652664, 21.0471769 ], [ 71.7652711, 21.0474341 ], [ 71.765819, 21.0474251 ], [ 71.7658237, 21.0476823 ], [ 71.7652758, 21.0476914 ], [ 71.7652853, 21.0482056 ], [ 71.764468, 21.0484763 ], [ 71.7647279, 21.0477002 ], [ 71.7633626, 21.0479798 ], [ 71.7632441, 21.0490108 ], [ 71.7636888, 21.0508046 ], [ 71.7631409, 21.0508134 ], [ 71.7631503, 21.0513279 ], [ 71.7623236, 21.0510841 ], [ 71.7623142, 21.0505696 ], [ 71.7617661, 21.0505785 ], [ 71.7617566, 21.0500642 ], [ 71.7609322, 21.0499484 ], [ 71.7606606, 21.050082 ], [ 71.7606701, 21.0505965 ], [ 71.7603937, 21.0504717 ], [ 71.7598458, 21.0504808 ], [ 71.7595741, 21.0506142 ], [ 71.7587854, 21.0524281 ], [ 71.7579681, 21.0526987 ], [ 71.7579823, 21.0534702 ], [ 71.7577082, 21.0534748 ], [ 71.7578164, 21.0519293 ], [ 71.7580857, 21.0516675 ], [ 71.75861, 21.0503727 ], [ 71.7584591, 21.0496033 ], [ 71.7590072, 21.0495942 ], [ 71.7588555, 21.0488248 ], [ 71.7589882, 21.0485655 ], [ 71.757623, 21.0488448 ], [ 71.7578874, 21.048326 ], [ 71.7570702, 21.0485967 ], [ 71.7569233, 21.0480843 ], [ 71.7570371, 21.0467961 ], [ 71.757311, 21.0467917 ], [ 71.7573301, 21.0478204 ], [ 71.7589787, 21.048051 ], [ 71.7589693, 21.0475366 ], [ 71.7592433, 21.047532 ], [ 71.7592575, 21.0483037 ], [ 71.761447, 21.0481391 ], [ 71.7628027, 21.0473451 ], [ 71.7633484, 21.0472081 ], [ 71.7633389, 21.0466936 ], [ 71.7638868, 21.0466847 ], [ 71.7640044, 21.0456536 ], [ 71.7642735, 21.045392 ], [ 71.7642641, 21.0448775 ], [ 71.7641229, 21.0446226 ], [ 71.7635748, 21.0446314 ], [ 71.7635701, 21.0443742 ], [ 71.76494, 21.0443519 ], [ 71.7650575, 21.0433209 ], [ 71.7654618, 21.042928 ], [ 71.7665602, 21.0430391 ], [ 71.7665506, 21.0425247 ], [ 71.7671057, 21.0429011 ], [ 71.7687521, 21.0430034 ], [ 71.7685812, 21.0412053 ], [ 71.7689689, 21.0399123 ], [ 71.7700696, 21.0401518 ], [ 71.770461, 21.0391162 ], [ 71.7704372, 21.0378301 ], [ 71.7708248, 21.0365373 ], [ 71.7702769, 21.0365462 ], [ 71.7702675, 21.0360319 ], [ 71.7713658, 21.0361421 ], [ 71.7715495, 21.0363559 ], [ 71.7716612, 21.0372956 ], [ 71.7722066, 21.0371576 ], [ 71.7724758, 21.0368959 ], [ 71.7727475, 21.0367632 ], [ 71.7728935, 21.0372756 ], [ 71.7733144, 21.0377832 ], [ 71.7724879, 21.0375394 ], [ 71.7722376, 21.0388299 ], [ 71.7725117, 21.0388254 ], [ 71.7726385, 21.0383088 ], [ 71.7727736, 21.0381775 ], [ 71.774141, 21.038027 ], [ 71.7739942, 21.0375148 ], [ 71.7747827, 21.0357008 ], [ 71.7754561, 21.0350461 ], [ 71.7765377, 21.0342567 ], [ 71.777898, 21.0337199 ], [ 71.778172, 21.0337154 ], [ 71.7798252, 21.034203 ], [ 71.7811904, 21.0339233 ], [ 71.7821369, 21.033265 ], [ 71.7821034, 21.0314646 ], [ 71.781962, 21.0312096 ], [ 71.7808615, 21.0309703 ], [ 71.7805731, 21.0302032 ], [ 71.7748224, 21.0304254 ], [ 71.7742697, 21.0301771 ], [ 71.7734478, 21.0301905 ], [ 71.7709704, 21.0295882 ], [ 71.7706774, 21.0285638 ], [ 71.7695769, 21.0283243 ], [ 71.7695625, 21.0275528 ], [ 71.7657152, 21.0269718 ], [ 71.7651673, 21.0269807 ], [ 71.7640549, 21.0260987 ], [ 71.7640454, 21.0255842 ], [ 71.7634975, 21.0255931 ], [ 71.7633507, 21.0250809 ], [ 71.7630719, 21.0248282 ], [ 71.7630577, 21.0240565 ], [ 71.7633268, 21.0237949 ], [ 71.7633174, 21.0232805 ], [ 71.7634525, 21.0231491 ], [ 71.763998, 21.0230121 ], [ 71.7640074, 21.0235266 ], [ 71.7642815, 21.023522 ], [ 71.7643941, 21.0222338 ], [ 71.7642482, 21.0217216 ], [ 71.7634217, 21.0214778 ], [ 71.7634312, 21.0219923 ], [ 71.7620543, 21.0216283 ], [ 71.7614969, 21.0211227 ], [ 71.7598462, 21.020764 ], [ 71.7601437, 21.0220456 ], [ 71.7595935, 21.0219254 ], [ 71.7593147, 21.0216727 ], [ 71.7582119, 21.0213051 ], [ 71.7580887, 21.022079 ], [ 71.7582308, 21.022334 ], [ 71.7571327, 21.0222227 ], [ 71.7549458, 21.0225154 ], [ 71.7546767, 21.022777 ], [ 71.7533068, 21.0227993 ], [ 71.7524803, 21.0225553 ], [ 71.7516466, 21.0219261 ], [ 71.7514951, 21.0211567 ], [ 71.7510751, 21.0206489 ], [ 71.7508035, 21.0207815 ], [ 71.7499817, 21.0207948 ], [ 71.7497032, 21.0205419 ], [ 71.7488812, 21.0205553 ], [ 71.7480689, 21.021083 ], [ 71.7461513, 21.021114 ], [ 71.7455962, 21.0207375 ], [ 71.7453081, 21.0199702 ], [ 71.7425758, 21.0203998 ], [ 71.7417446, 21.0198987 ], [ 71.7409203, 21.0197838 ], [ 71.7410379, 21.0187526 ], [ 71.7407593, 21.0184999 ], [ 71.7407498, 21.0179855 ], [ 71.7408827, 21.017726 ], [ 71.7395106, 21.017619 ], [ 71.7378551, 21.0170029 ], [ 71.738001, 21.017515 ], [ 71.7385584, 21.0180208 ], [ 71.7384454, 21.019309 ], [ 71.7373495, 21.0193266 ], [ 71.7372263, 21.0201006 ], [ 71.7366971, 21.0211382 ], [ 71.7365746, 21.0219121 ], [ 71.7346548, 21.0218139 ], [ 71.7338234, 21.0213126 ], [ 71.7321634, 21.0204393 ], [ 71.7322904, 21.0199227 ], [ 71.7320118, 21.0196698 ], [ 71.7318566, 21.0186432 ], [ 71.7299436, 21.0189312 ], [ 71.729953, 21.0194457 ], [ 71.7285832, 21.0194676 ], [ 71.7283233, 21.0202436 ], [ 71.7277708, 21.0199953 ], [ 71.7277801, 21.0205098 ], [ 71.7275038, 21.020385 ], [ 71.7203764, 21.0202419 ], [ 71.71885, 21.020006494369643 ], [ 71.71885, 21.020006494369646 ], [ 71.7173535, 21.0197757 ], [ 71.7170749, 21.0195228 ], [ 71.716527, 21.0195317 ], [ 71.7151434, 21.0187817 ], [ 71.7145955, 21.0187906 ], [ 71.7132118, 21.0180407 ], [ 71.7123853, 21.0177967 ], [ 71.7118279, 21.0172909 ], [ 71.7109969, 21.0167895 ], [ 71.7101704, 21.0165455 ], [ 71.7087773, 21.0152811 ], [ 71.7076769, 21.0150414 ], [ 71.7068412, 21.0142828 ], [ 71.7057314, 21.0135285 ], [ 71.704905, 21.0132845 ], [ 71.7040738, 21.0127831 ], [ 71.7029595, 21.0117715 ], [ 71.7018546, 21.0112745 ], [ 71.7004617, 21.01001 ], [ 71.6999092, 21.0097615 ], [ 71.6987949, 21.00875 ], [ 71.6965872, 21.0078849 ], [ 71.6962948, 21.0068604 ], [ 71.6957469, 21.0068691 ], [ 71.6960392, 21.0078936 ], [ 71.6943887, 21.0075334 ], [ 71.6916493, 21.0075767 ], [ 71.6894486, 21.007097 ], [ 71.6869648, 21.006107 ], [ 71.6866862, 21.0058541 ], [ 71.6853074, 21.0053612 ], [ 71.6841933, 21.0043497 ], [ 71.6828144, 21.0038568 ], [ 71.6822596, 21.0034801 ], [ 71.682113, 21.0029677 ], [ 71.6814148, 21.0022068 ], [ 71.6808671, 21.0022155 ], [ 71.6801542, 21.0006829 ], [ 71.6795925, 20.9999197 ], [ 71.679127, 20.9968394 ], [ 71.6780291, 20.9967277 ], [ 71.6777505, 20.9964746 ], [ 71.6763717, 20.9959817 ], [ 71.6760931, 20.9957288 ], [ 71.6752714, 20.9957419 ], [ 71.6749998, 20.9958751 ], [ 71.6747397, 20.9966511 ], [ 71.6733723, 20.9968008 ], [ 71.673103, 20.9970624 ], [ 71.6703821, 20.9981344 ], [ 71.6649036, 20.9982202 ], [ 71.663251, 20.9977315 ], [ 71.6613288, 20.9975043 ], [ 71.6605071, 20.9975171 ], [ 71.6594024, 20.9970197 ], [ 71.6588544, 20.9970284 ], [ 71.6571973, 20.9962822 ], [ 71.6541841, 20.9963293 ], [ 71.6514267, 20.9953431 ], [ 71.6511482, 20.9950902 ], [ 71.6497696, 20.9945969 ], [ 71.6492126, 20.994091 ], [ 71.64756, 20.9936022 ], [ 71.647003, 20.9930962 ], [ 71.6461767, 20.9928517 ], [ 71.645346, 20.9923501 ], [ 71.6447891, 20.9918441 ], [ 71.643965, 20.9917286 ], [ 71.6438185, 20.9912163 ], [ 71.6433992, 20.9907082 ], [ 71.6414749, 20.9903516 ], [ 71.6411964, 20.9900987 ], [ 71.6378868, 20.9888634 ], [ 71.635399, 20.9876154 ], [ 71.6345638, 20.9868564 ], [ 71.6337352, 20.9864837 ], [ 71.6337263, 20.9859692 ], [ 71.6331784, 20.9859777 ], [ 71.6331693, 20.9854631 ], [ 71.6326216, 20.9854716 ], [ 71.6323296, 20.9844468 ], [ 71.6320558, 20.9844512 ], [ 71.6320648, 20.9849657 ], [ 71.6317908, 20.9849698 ], [ 71.6307821, 20.982155 ], [ 71.6307371, 20.9795826 ], [ 71.6315228, 20.9775119 ], [ 71.6323219, 20.9762131 ], [ 71.6330002, 20.9758162 ], [ 71.6343563, 20.9750231 ], [ 71.6350246, 20.9741127 ], [ 71.6350202, 20.9738555 ], [ 71.6347418, 20.9736024 ], [ 71.6345963, 20.97309 ], [ 71.6326677, 20.9724762 ], [ 71.6323893, 20.9722231 ], [ 71.6301915, 20.9718715 ], [ 71.630178, 20.9710999 ], [ 71.6290781, 20.9708595 ], [ 71.6294975, 20.9713677 ], [ 71.6295063, 20.9718821 ], [ 71.629646, 20.9720082 ], [ 71.630196, 20.9721288 ], [ 71.6302051, 20.9726434 ], [ 71.6296551, 20.9725227 ], [ 71.6290983, 20.9720167 ], [ 71.6277222, 20.9716525 ], [ 71.627845, 20.9708785 ], [ 71.6281143, 20.9706172 ], [ 71.6282383, 20.9698432 ], [ 71.6279667, 20.9699757 ], [ 71.6271452, 20.9699883 ], [ 71.6257689, 20.969624 ], [ 71.62576, 20.9691095 ], [ 71.6235666, 20.9690142 ], [ 71.6232905, 20.9688903 ], [ 71.6232816, 20.9683758 ], [ 71.6213599, 20.9681481 ], [ 71.6215054, 20.9686604 ], [ 71.6222017, 20.9692925 ], [ 71.6228927, 20.9696684 ], [ 71.6230437, 20.970438 ], [ 71.6219458, 20.9703257 ], [ 71.6211287, 20.9705956 ], [ 71.6203069, 20.9706083 ], [ 71.619465174218746, 20.970326808326103 ], [ 71.6192047, 20.9702397 ], [ 71.6189129, 20.969215 ], [ 71.6183697, 20.9694805 ], [ 71.6185196, 20.9702503 ], [ 71.6190762, 20.9707563 ], [ 71.619465174218746, 20.971593624224017 ], [ 71.6197883, 20.9722892 ], [ 71.6206122, 20.9724047 ], [ 71.6208906, 20.9726578 ], [ 71.6219862, 20.972641 ], [ 71.6221249, 20.972768 ], [ 71.6222714, 20.9732804 ], [ 71.6230953, 20.9733958 ], [ 71.623234, 20.9735228 ], [ 71.6232654, 20.9753234 ], [ 71.6222102, 20.9776555 ], [ 71.6214065, 20.9786973 ], [ 71.6207358, 20.9794796 ], [ 71.6196445, 20.9797536 ], [ 71.6196536, 20.9802681 ], [ 71.617743, 20.9806829 ], [ 71.6174735, 20.9809445 ], [ 71.6150129, 20.9812395 ], [ 71.6130955, 20.981269 ], [ 71.6122693, 20.9810244 ], [ 71.6114476, 20.9810369 ], [ 71.6100692, 20.9805434 ], [ 71.6092474, 20.9805561 ], [ 71.6081429, 20.9800585 ], [ 71.607595, 20.9800668 ], [ 71.6070427, 20.9798179 ], [ 71.606495, 20.9798264 ], [ 71.6062234, 20.9799596 ], [ 71.6063999, 20.9822728 ], [ 71.6066783, 20.9825259 ], [ 71.6072529, 20.9840609 ], [ 71.6079494, 20.9846931 ], [ 71.6084973, 20.9846846 ], [ 71.6090384, 20.9842909 ], [ 71.6090518, 20.9850626 ], [ 71.6101452, 20.9849167 ], [ 71.6105443, 20.9842677 ], [ 71.6112229, 20.983871 ], [ 71.6114969, 20.9838668 ], [ 71.6117753, 20.9841197 ], [ 71.6128709, 20.9841029 ], [ 71.6131425, 20.9839706 ], [ 71.6131559, 20.9847423 ], [ 71.6137039, 20.9847339 ], [ 71.6137082, 20.9849912 ], [ 71.6101563, 20.9855602 ], [ 71.610065, 20.9857305 ], [ 71.608248, 20.9861042 ], [ 71.6079785, 20.9863656 ], [ 71.6078872, 20.9865359 ], [ 71.6066133, 20.9866438 ], [ 71.606522, 20.9868141 ], [ 71.6055222, 20.9869178 ], [ 71.6054309, 20.9870881 ], [ 71.6038764, 20.9868139 ], [ 71.6036046, 20.9869471 ], [ 71.6035958, 20.9864327 ], [ 71.6027696, 20.9861881 ], [ 71.6031622, 20.9851528 ], [ 71.6031442, 20.9841237 ], [ 71.6034137, 20.9838623 ], [ 71.6032684, 20.9833499 ], [ 71.6018944, 20.9831136 ], [ 71.6018855, 20.982599 ], [ 71.6010592, 20.9823544 ], [ 71.6010503, 20.98184 ], [ 71.6005026, 20.9818483 ], [ 71.6006345, 20.981589 ], [ 71.6006256, 20.9810745 ], [ 71.6011512, 20.9797799 ], [ 71.6011378, 20.979008 ], [ 71.601915, 20.976423 ], [ 71.6017651, 20.9756534 ], [ 71.6020435, 20.9759063 ], [ 71.6023174, 20.9759022 ], [ 71.6023128, 20.9756449 ], [ 71.6021306, 20.9755593 ], [ 71.6022907, 20.9743588 ], [ 71.6011994, 20.9746326 ], [ 71.6014601, 20.9738568 ], [ 71.599534, 20.9733716 ], [ 71.5995205, 20.9725998 ], [ 71.600066, 20.9724624 ], [ 71.6004697, 20.9720708 ], [ 71.6004608, 20.9715561 ], [ 71.6011393, 20.9711594 ], [ 71.6016782, 20.9706364 ], [ 71.6033104, 20.9699687 ], [ 71.6033015, 20.9694542 ], [ 71.604671, 20.9694333 ], [ 71.6046621, 20.9689188 ], [ 71.6071248, 20.9687521 ], [ 71.6098704, 20.9690965 ], [ 71.6098613, 20.9685818 ], [ 71.6101374, 20.9687058 ], [ 71.6117785, 20.9685525 ], [ 71.6114823, 20.9672705 ], [ 71.6101151, 20.9674197 ], [ 71.6095585, 20.9669135 ], [ 71.6076324, 20.9664283 ], [ 71.6065234, 20.9656735 ], [ 71.6056884, 20.9649143 ], [ 71.6051406, 20.9649226 ], [ 71.6043257, 20.9653216 ], [ 71.6047494, 20.966087 ], [ 71.6046264, 20.9668608 ], [ 71.6040764, 20.9667402 ], [ 71.6035219, 20.9663631 ], [ 71.6036494, 20.9658464 ], [ 71.6039189, 20.965585 ], [ 71.6037736, 20.9650726 ], [ 71.6032236, 20.9649519 ], [ 71.6026668, 20.9644457 ], [ 71.6015691, 20.9643344 ], [ 71.6015825, 20.9651061 ], [ 71.6021303, 20.9650978 ], [ 71.6017413, 20.9663902 ], [ 71.6013399, 20.9669111 ], [ 71.598612, 20.9675954 ], [ 71.5969666, 20.9674924 ], [ 71.5969532, 20.9667207 ], [ 71.5966816, 20.966853 ], [ 71.59531, 20.9667457 ], [ 71.5951131, 20.9658069 ], [ 71.5952922, 20.9657168 ], [ 71.5952877, 20.9654593 ], [ 71.5950138, 20.9654635 ], [ 71.5947466, 20.9658532 ], [ 71.594475, 20.9659865 ], [ 71.5946026, 20.9654699 ], [ 71.5948719, 20.9652084 ], [ 71.5948675, 20.9649511 ], [ 71.5945892, 20.9646981 ], [ 71.594567, 20.9634119 ], [ 71.5946999, 20.9631524 ], [ 71.5941522, 20.9631609 ], [ 71.5940059, 20.9626483 ], [ 71.5935867, 20.9621401 ], [ 71.5919413, 20.9620362 ], [ 71.5916651, 20.961912 ], [ 71.5916519, 20.9611403 ], [ 71.591378, 20.9611445 ], [ 71.5913869, 20.9616589 ], [ 71.5908369, 20.9615383 ], [ 71.5905585, 20.9612851 ], [ 71.5875415, 20.9610736 ], [ 71.5858895, 20.9605841 ], [ 71.5856111, 20.960331 ], [ 71.5836829, 20.9597173 ], [ 71.5836742, 20.9592029 ], [ 71.5834004, 20.959207 ], [ 71.583409, 20.9597215 ], [ 71.5820375, 20.9596132 ], [ 71.5806549, 20.9588623 ], [ 71.5795616, 20.9590078 ], [ 71.5794155, 20.9584954 ], [ 71.5785805, 20.957736 ], [ 71.5784353, 20.9572237 ], [ 71.5778876, 20.957232 ], [ 71.5781437, 20.9561987 ], [ 71.5792371, 20.9560532 ], [ 71.5793712, 20.955923 ], [ 71.5797604, 20.9546304 ], [ 71.5789367, 20.9545138 ], [ 71.5759241, 20.9545593 ], [ 71.5742743, 20.9541987 ], [ 71.5740137, 20.9549746 ], [ 71.5726334, 20.9543516 ], [ 71.5687948, 20.9541522 ], [ 71.5671407, 20.9535344 ], [ 71.5672728, 20.9532751 ], [ 71.5672639, 20.9527604 ], [ 71.5665535, 20.9512273 ], [ 71.5660057, 20.9512356 ], [ 71.565997, 20.9507209 ], [ 71.5654493, 20.9507292 ], [ 71.5654404, 20.9502148 ], [ 71.5637952, 20.9501105 ], [ 71.5635257, 20.9503717 ], [ 71.5618869, 20.9506536 ], [ 71.5616173, 20.950915 ], [ 71.5610696, 20.9509234 ], [ 71.5607937, 20.9507992 ], [ 71.5608024, 20.9513138 ], [ 71.5602524, 20.9511929 ], [ 71.5596982, 20.9508156 ], [ 71.5594111, 20.9500481 ], [ 71.55887, 20.9504418 ], [ 71.5583244, 20.950579 ], [ 71.5583157, 20.9500645 ], [ 71.5577723, 20.9503299 ], [ 71.5577812, 20.9508445 ], [ 71.5564074, 20.9506077 ], [ 71.5565484, 20.9508631 ], [ 71.556438, 20.9524085 ], [ 71.5558903, 20.9524168 ], [ 71.5558991, 20.9529313 ], [ 71.5545276, 20.9528228 ], [ 71.5534212, 20.9521965 ], [ 71.5534125, 20.951682 ], [ 71.5525886, 20.9515652 ], [ 71.5520475, 20.9519596 ], [ 71.5520562, 20.9524743 ], [ 71.5493153, 20.9523862 ], [ 71.5490437, 20.9525193 ], [ 71.5488931, 20.9517497 ], [ 71.5486149, 20.9514964 ], [ 71.5484697, 20.950984 ], [ 71.5490175, 20.9509757 ], [ 71.5487349, 20.9504654 ], [ 71.5484633, 20.9505975 ], [ 71.5476417, 20.9506098 ], [ 71.5462636, 20.9501158 ], [ 71.545442, 20.950128 ], [ 71.5443378, 20.9496298 ], [ 71.5436102, 20.9496814 ], [ 71.5433768, 20.9495161 ], [ 71.5429708, 20.9497793 ], [ 71.5426839, 20.9490118 ], [ 71.5413059, 20.9485176 ], [ 71.5411598, 20.9480052 ], [ 71.5408816, 20.9477519 ], [ 71.5407364, 20.9472396 ], [ 71.5393649, 20.9471307 ], [ 71.5385346, 20.9466285 ], [ 71.5371524, 20.9458771 ], [ 71.5357765, 20.9455121 ], [ 71.5357678, 20.9449974 ], [ 71.5349421, 20.9447525 ], [ 71.5349506, 20.945267 ], [ 71.5338487, 20.9448969 ], [ 71.533301, 20.944905 ], [ 71.5330294, 20.9450383 ], [ 71.5331744, 20.9455506 ], [ 71.5335922, 20.94593 ], [ 71.534142, 20.9460509 ], [ 71.5341551, 20.9468228 ], [ 71.5360829, 20.9474369 ], [ 71.5362216, 20.9475641 ], [ 71.5363892, 20.9493628 ], [ 71.5369372, 20.9493547 ], [ 71.5370821, 20.9498672 ], [ 71.5383259, 20.9504915 ], [ 71.5391562, 20.9509938 ], [ 71.5397039, 20.9509857 ], [ 71.5405386, 20.9517451 ], [ 71.5416427, 20.9522433 ], [ 71.5421991, 20.9527497 ], [ 71.5427491, 20.9528706 ], [ 71.5428942, 20.9533832 ], [ 71.5430337, 20.9535093 ], [ 71.5444097, 20.9538752 ], [ 71.5441141, 20.952593 ], [ 71.5448069, 20.9530972 ], [ 71.544853, 20.9532654 ], [ 71.5446748, 20.9533565 ], [ 71.5446792, 20.9536138 ], [ 71.544953, 20.9536098 ], [ 71.5450434, 20.9534386 ], [ 71.5452225, 20.9533484 ], [ 71.5453085, 20.9529201 ], [ 71.5454877, 20.9528298 ], [ 71.5455051, 20.9538589 ], [ 71.5449574, 20.953867 ], [ 71.5450982, 20.9541222 ], [ 71.5451069, 20.9546368 ], [ 71.5455247, 20.9550161 ], [ 71.5469073, 20.9557674 ], [ 71.5474527, 20.955631 ], [ 71.5475979, 20.9561435 ], [ 71.548294, 20.9567759 ], [ 71.548846, 20.957025 ], [ 71.5502373, 20.958291 ], [ 71.5512063, 20.9589201 ], [ 71.551215, 20.9594346 ], [ 71.5519154, 20.9603244 ], [ 71.5527393, 20.9604412 ], [ 71.5528846, 20.9609536 ], [ 71.5539976, 20.9619662 ], [ 71.5541437, 20.9624786 ], [ 71.5546914, 20.9624705 ], [ 71.5551193, 20.9634934 ], [ 71.5556758, 20.9639997 ], [ 71.5562367, 20.9647633 ], [ 71.5566589, 20.9653998 ], [ 71.5572089, 20.9655206 ], [ 71.5579194, 20.9670539 ], [ 71.5586156, 20.9676863 ], [ 71.5591656, 20.9678071 ], [ 71.5591743, 20.9683217 ], [ 71.5597243, 20.9684416 ], [ 71.5600025, 20.9686948 ], [ 71.5605525, 20.9688156 ], [ 71.5606803, 20.9682991 ], [ 71.5610872, 20.9680356 ], [ 71.5609628, 20.9688094 ], [ 71.5608353, 20.9693259 ], [ 71.5682633, 20.9711437 ], [ 71.5685415, 20.9713968 ], [ 71.5712938, 20.9721273 ], [ 71.5739373, 20.9745323 ], [ 71.5742199, 20.9750426 ], [ 71.5750549, 20.975802 ], [ 71.5758942, 20.9768186 ], [ 71.5778557, 20.9793622 ], [ 71.5784257, 20.9806402 ], [ 71.5795521, 20.9824244 ], [ 71.5801089, 20.9829305 ], [ 71.5805423, 20.9842106 ], [ 71.5810902, 20.9842023 ], [ 71.5812399, 20.9849719 ], [ 71.581658, 20.985351 ], [ 71.583032, 20.9855877 ], [ 71.5833102, 20.9858407 ], [ 71.5923896, 20.9880186 ], [ 71.5928067, 20.9883987 ], [ 71.592953, 20.988911 ], [ 71.5935009, 20.9889027 ], [ 71.593929, 20.9899254 ], [ 71.5944901, 20.9906888 ], [ 71.5956171, 20.9924729 ], [ 71.5961783, 20.9932363 ], [ 71.5971531, 20.9941216 ], [ 71.5982576, 20.9946194 ], [ 71.5988144, 20.9951255 ], [ 71.6026808, 20.9968676 ], [ 71.6035026, 20.9968551 ], [ 71.6043155, 20.996328 ], [ 71.604993, 20.995932 ], [ 71.6049842, 20.9954175 ], [ 71.6052537, 20.9951562 ], [ 71.6052448, 20.9946417 ], [ 71.6055098, 20.9941229 ], [ 71.6057479, 20.9920607 ], [ 71.6047093, 20.987445 ], [ 71.6055311, 20.9874323 ], [ 71.6056213, 20.9872612 ], [ 71.6063506, 20.9872907 ], [ 71.6067126, 20.9869872 ], [ 71.6079874, 20.98688 ], [ 71.6080777, 20.986709 ], [ 71.6082569, 20.9866186 ], [ 71.6083472, 20.9864476 ], [ 71.6100726, 20.9861637 ], [ 71.6100412, 20.9868487 ], [ 71.6093705, 20.9876309 ], [ 71.6080053, 20.9879091 ], [ 71.6078946, 20.9894548 ], [ 71.6083126, 20.9898337 ], [ 71.6091323, 20.9896931 ], [ 71.6091412, 20.9902076 ], [ 71.6096912, 20.9903274 ], [ 71.6101083, 20.9907073 ], [ 71.6102771, 20.992506 ], [ 71.6097294, 20.9925143 ], [ 71.6098881, 20.9937986 ], [ 71.6111325, 20.9944223 ], [ 71.6125156, 20.995173 ], [ 71.6133463, 20.995675 ], [ 71.6137679, 20.9963121 ], [ 71.61446, 20.9966871 ], [ 71.6155736, 20.9976992 ], [ 71.6161261, 20.9979481 ], [ 71.6188609, 20.9976487 ], [ 71.619465174218746, 20.996343134219007 ], [ 71.6195205, 20.9962236 ], [ 71.6200594, 20.9957007 ], [ 71.6199095, 20.9949311 ], [ 71.6204595, 20.9950509 ], [ 71.6205982, 20.9951779 ], [ 71.6207492, 20.9959475 ], [ 71.6212992, 20.9960671 ], [ 71.6221346, 20.9968262 ], [ 71.6229563, 20.9968135 ], [ 71.6230905, 20.9966833 ], [ 71.6232191, 20.9961667 ], [ 71.624326, 20.9967925 ], [ 71.6248717, 20.9966559 ], [ 71.6248851, 20.9974276 ], [ 71.6254353, 20.9975472 ], [ 71.6271058, 20.9990654 ], [ 71.6280754, 20.9996942 ], [ 71.6282151, 20.9998201 ], [ 71.6287653, 20.9999409 ], [ 71.6289333, 21.0017394 ], [ 71.6296345, 21.0026286 ], [ 71.6301822, 21.0026201 ], [ 71.6303166, 21.0024899 ], [ 71.6304404, 21.0017162 ], [ 71.6315317, 21.0014419 ], [ 71.6320525, 20.99989 ], [ 71.634794, 20.9999757 ], [ 71.6367207, 21.0004604 ], [ 71.636999, 21.0007135 ], [ 71.6380971, 21.0008256 ], [ 71.6382427, 21.001338 ], [ 71.6386607, 21.0017169 ], [ 71.6397611, 21.0019573 ], [ 71.6405965, 21.0027162 ], [ 71.6416991, 21.0030855 ], [ 71.6418582, 21.0043695 ], [ 71.6424152, 21.0048755 ], [ 71.6425617, 21.0053879 ], [ 71.6431096, 21.0053794 ], [ 71.6432551, 21.0058917 ], [ 71.6435335, 21.0061448 ], [ 71.64368, 21.006657 ], [ 71.6442302, 21.0067768 ], [ 71.6486088, 21.0064514 ], [ 71.6487477, 21.0065782 ], [ 71.6487567, 21.0070926 ], [ 71.6480905, 21.0081323 ], [ 71.6469879, 21.007763 ], [ 71.6461659, 21.0077759 ], [ 71.6453532, 21.0083032 ], [ 71.6437095, 21.0083287 ], [ 71.6426093, 21.0080885 ], [ 71.6417783, 21.0075867 ], [ 71.6412326, 21.0077243 ], [ 71.6407987, 21.0064446 ], [ 71.6407851, 21.0056729 ], [ 71.640219, 21.0046523 ], [ 71.640069, 21.0038827 ], [ 71.6381537, 21.0040407 ], [ 71.6378843, 21.0043022 ], [ 71.636793, 21.0045765 ], [ 71.6365167, 21.0044525 ], [ 71.6365078, 21.003938 ], [ 71.6359599, 21.0039465 ], [ 71.6363523, 21.0029112 ], [ 71.6363478, 21.002654 ], [ 71.6359282, 21.0021458 ], [ 71.6351064, 21.0021586 ], [ 71.634677, 21.0011359 ], [ 71.6342574, 21.0006277 ], [ 71.6334379, 21.0007687 ], [ 71.6326252, 21.0012958 ], [ 71.6320841, 21.0016906 ], [ 71.6320932, 21.0022051 ], [ 71.6315453, 21.0022136 ], [ 71.6317042, 21.0034977 ], [ 71.6313389, 21.0060766 ], [ 71.631065, 21.0060807 ], [ 71.6309095, 21.0050539 ], [ 71.6304901, 21.0045459 ], [ 71.6302183, 21.0046782 ], [ 71.6283007, 21.0047078 ], [ 71.6280246, 21.0045839 ], [ 71.6275906, 21.0033039 ], [ 71.6266054, 21.0017753 ], [ 71.6255118, 21.0019205 ], [ 71.6244317, 21.0028381 ], [ 71.6245727, 21.0030932 ], [ 71.6249097, 21.0066904 ], [ 71.6247777, 21.0069498 ], [ 71.6253257, 21.0069414 ], [ 71.6250652, 21.0077173 ], [ 71.6242455, 21.0078583 ], [ 71.6234328, 21.0083854 ], [ 71.6228826, 21.0082656 ], [ 71.6228736, 21.0077511 ], [ 71.6223257, 21.0077596 ], [ 71.6223168, 21.0072452 ], [ 71.6217689, 21.0072535 ], [ 71.6220293, 21.0064776 ], [ 71.620938, 21.0067517 ], [ 71.6209244, 21.00598 ], [ 71.6214723, 21.0059715 ], [ 71.6211894, 21.0054614 ], [ 71.6200958, 21.0056063 ], [ 71.619465174218746, 21.006116884382227 ], [ 71.6192852, 21.0062626 ], [ 71.6192943, 21.006777 ], [ 71.6184612, 21.0061461 ], [ 71.617911, 21.0060265 ], [ 71.6176551, 21.0070596 ], [ 71.6162875, 21.0072089 ], [ 71.6157373, 21.007089 ], [ 71.6158649, 21.0065725 ], [ 71.6164037, 21.0060495 ], [ 71.6163948, 21.0055351 ], [ 71.6162538, 21.0052799 ], [ 71.61598, 21.0052841 ], [ 71.6159934, 21.006056 ], [ 71.6140847, 21.0065999 ], [ 71.6144861, 21.006079 ], [ 71.6146146, 21.0055625 ], [ 71.6140735, 21.0059564 ], [ 71.6135279, 21.0060938 ], [ 71.6135413, 21.0068655 ], [ 71.6140892, 21.0068571 ], [ 71.6138331, 21.0078904 ], [ 71.6135593, 21.0078946 ], [ 71.6134083, 21.007125 ], [ 71.6131299, 21.0068719 ], [ 71.6129843, 21.0063595 ], [ 71.612158, 21.0061149 ], [ 71.611929, 21.0086916 ], [ 71.6110981, 21.0081896 ], [ 71.6112435, 21.008702 ], [ 71.6113833, 21.008828 ], [ 71.6119333, 21.0089488 ], [ 71.6119424, 21.0094633 ], [ 71.6108397, 21.0090938 ], [ 71.610283, 21.0085876 ], [ 71.6097328, 21.008468 ], [ 71.6097417, 21.0089825 ], [ 71.6102896, 21.0089739 ], [ 71.6102941, 21.0092312 ], [ 71.6097462, 21.0092397 ], [ 71.6097551, 21.0097541 ], [ 71.6092072, 21.0097626 ], [ 71.6094633, 21.0087294 ], [ 71.6089154, 21.0087377 ], [ 71.608911, 21.0084805 ], [ 71.6094589, 21.0084722 ], [ 71.6094544, 21.0082149 ], [ 71.6083608, 21.0083599 ], [ 71.6078106, 21.0082401 ], [ 71.6080711, 21.0074642 ], [ 71.6075277, 21.0077298 ], [ 71.6075366, 21.0082442 ], [ 71.6061669, 21.0082652 ], [ 71.6058706, 21.0069832 ], [ 71.6050465, 21.0068668 ], [ 71.6044918, 21.0064897 ], [ 71.6042045, 21.0057222 ], [ 71.6036543, 21.0056014 ], [ 71.6033759, 21.0053484 ], [ 71.6022756, 21.005108 ], [ 71.602004, 21.0052412 ], [ 71.601986, 21.0042123 ], [ 71.6006186, 21.0043614 ], [ 71.6000773, 21.004756 ], [ 71.5998258, 21.0060465 ], [ 71.5992779, 21.0060548 ], [ 71.5994412, 21.0075963 ], [ 71.5997196, 21.0078494 ], [ 71.5998658, 21.0083618 ], [ 71.5993179, 21.0083701 ], [ 71.599309, 21.0078556 ], [ 71.5990373, 21.0079879 ], [ 71.5984894, 21.0079962 ], [ 71.5982132, 21.0078723 ], [ 71.5982221, 21.0083869 ], [ 71.596839, 21.007636 ], [ 71.5968524, 21.0084077 ], [ 71.5965761, 21.0082828 ], [ 71.5960305, 21.0084204 ], [ 71.5961803, 21.00919 ], [ 71.5960482, 21.0094493 ], [ 71.5957721, 21.0093244 ], [ 71.5949501, 21.009337 ], [ 71.594674, 21.009213 ], [ 71.5946651, 21.0086984 ], [ 71.5941238, 21.0090923 ], [ 71.5927519, 21.0089849 ], [ 71.5925045, 21.0105326 ], [ 71.5914064, 21.0104202 ], [ 71.5911348, 21.0105534 ], [ 71.5911437, 21.0110681 ], [ 71.5906874, 21.0109864 ], [ 71.5907188, 21.0103026 ], [ 71.590578, 21.0100473 ], [ 71.5916738, 21.0100306 ], [ 71.591382, 21.0090059 ], [ 71.5919299, 21.0089976 ], [ 71.5916426, 21.0082299 ], [ 71.5902707, 21.0081217 ], [ 71.5894553, 21.0085205 ], [ 71.5888587, 21.0056991 ], [ 71.5874933, 21.0059772 ], [ 71.5875022, 21.0064916 ], [ 71.5880501, 21.0064833 ], [ 71.588059, 21.006998 ], [ 71.5875111, 21.0070063 ], [ 71.5875154, 21.0072635 ], [ 71.5886113, 21.0072469 ], [ 71.5886158, 21.0075041 ], [ 71.5866937, 21.007276 ], [ 71.5864019, 21.0062512 ], [ 71.586128, 21.0062554 ], [ 71.5864285, 21.0077946 ], [ 71.5858806, 21.0078029 ], [ 71.5860216, 21.0080581 ], [ 71.5860348, 21.0088299 ], [ 71.5870008, 21.0092007 ], [ 71.5874225, 21.0098381 ], [ 71.5881189, 21.0104703 ], [ 71.5886668, 21.0104619 ], [ 71.5897761, 21.011217 ], [ 71.590503, 21.0111654 ], [ 71.5910152, 21.0115846 ], [ 71.5911614, 21.012097 ], [ 71.5900611, 21.0118564 ], [ 71.59007, 21.012371 ], [ 71.5897938, 21.0122461 ], [ 71.5889719, 21.0122586 ], [ 71.5886958, 21.0121346 ], [ 71.5887046, 21.0126491 ], [ 71.5873259, 21.0121554 ], [ 71.5873127, 21.0113837 ], [ 71.585671, 21.0115368 ], [ 71.5848447, 21.011292 ], [ 71.5845663, 21.011039 ], [ 71.5840161, 21.0109191 ], [ 71.5838698, 21.0104068 ], [ 71.5834504, 21.0098985 ], [ 71.5842724, 21.0098861 ], [ 71.5846517, 21.008079 ], [ 71.5845109, 21.0078239 ], [ 71.5834149, 21.0078405 ], [ 71.5834238, 21.008355 ], [ 71.5839717, 21.0083467 ], [ 71.5831809, 21.0101599 ], [ 71.5829069, 21.0101641 ], [ 71.5828982, 21.0096494 ], [ 71.5826241, 21.0096538 ], [ 71.5826374, 21.0104255 ], [ 71.5809914, 21.0103213 ], [ 71.5807196, 21.0104546 ], [ 71.5804589, 21.0112304 ], [ 71.5796326, 21.0109857 ], [ 71.5796283, 21.0107284 ], [ 71.5801739, 21.010591 ], [ 71.5815217, 21.0092839 ], [ 71.5823414, 21.0091433 ], [ 71.582186, 21.0081165 ], [ 71.5825886, 21.0075958 ], [ 71.5820407, 21.0076041 ], [ 71.5825754, 21.0068239 ], [ 71.5820252, 21.0067031 ], [ 71.5803837, 21.0068571 ], [ 71.5805247, 21.0071123 ], [ 71.580397, 21.007629 ], [ 71.5798424, 21.0072508 ], [ 71.5790161, 21.0070061 ], [ 71.5773767, 21.0072883 ], [ 71.5771072, 21.0075496 ], [ 71.5762898, 21.0078193 ], [ 71.5757485, 21.008214 ], [ 71.5760091, 21.0074381 ], [ 71.5749133, 21.0074548 ], [ 71.5746527, 21.0082306 ], [ 71.5743786, 21.0082348 ], [ 71.5746394, 21.0074589 ], [ 71.5738198, 21.0075995 ], [ 71.5730089, 21.0082556 ], [ 71.5728846, 21.0090293 ], [ 71.5726151, 21.0092907 ], [ 71.5724918, 21.0100645 ], [ 71.5719439, 21.0100728 ], [ 71.5722091, 21.0095542 ], [ 71.5716612, 21.0095625 ], [ 71.5714839, 21.0072493 ], [ 71.5717491, 21.0067307 ], [ 71.5717447, 21.0064733 ], [ 71.5714663, 21.0062202 ], [ 71.5713121, 21.0051934 ], [ 71.5715861, 21.0051892 ], [ 71.5715948, 21.0057037 ], [ 71.5721429, 21.0056954 ], [ 71.572651, 21.0033718 ], [ 71.5721031, 21.0033801 ], [ 71.5721119, 21.0038946 ], [ 71.5712902, 21.003907 ], [ 71.5710382, 21.0051973 ], [ 71.5704924, 21.0053338 ], [ 71.5699511, 21.0057284 ], [ 71.5699643, 21.0065003 ], [ 71.5696905, 21.0065045 ], [ 71.5696772, 21.0057326 ], [ 71.5691314, 21.0058691 ], [ 71.5685769, 21.005492 ], [ 71.568709, 21.0052327 ], [ 71.5699203, 21.0039276 ], [ 71.5682788, 21.0040807 ], [ 71.5680027, 21.0039568 ], [ 71.5679982, 21.0036993 ], [ 71.5699137, 21.0035413 ], [ 71.5723682, 21.0028615 ], [ 71.5720634, 21.0010649 ], [ 71.570696, 21.0012136 ], [ 71.5695892, 21.0005874 ], [ 71.5694429, 21.0000751 ], [ 71.5688729, 20.9987971 ], [ 71.5679849, 20.9949507 ], [ 71.5674195, 20.9939299 ], [ 71.5664436, 20.9929154 ], [ 71.5647978, 20.992811 ], [ 71.5637086, 20.9932138 ], [ 71.5638496, 20.9934691 ], [ 71.5638583, 20.9939836 ], [ 71.5635932, 20.9945022 ], [ 71.5636064, 20.9952739 ], [ 71.5629483, 20.9968279 ], [ 71.5634962, 20.9968195 ], [ 71.5628417, 20.9986307 ], [ 71.5628504, 20.9991452 ], [ 71.5629923, 20.9994003 ], [ 71.5618965, 20.999417 ], [ 71.5619052, 20.9999314 ], [ 71.5572526, 21.0002588 ], [ 71.5571063, 20.9997464 ], [ 71.5565497, 20.9992401 ], [ 71.5564043, 20.9987275 ], [ 71.5555847, 20.9988681 ], [ 71.5547695, 20.9992667 ], [ 71.5549146, 20.9997793 ], [ 71.5541235, 21.0015924 ], [ 71.5537436, 21.0033994 ], [ 71.5542915, 21.0033911 ], [ 71.5544412, 21.0041609 ], [ 71.5543091, 21.0044202 ], [ 71.554857, 21.0044119 ], [ 71.5545918, 21.0049305 ], [ 71.5551397, 21.0049224 ], [ 71.5551484, 21.0054368 ], [ 71.5556964, 21.0054287 ], [ 71.5555633, 21.005688 ], [ 71.5555722, 21.0062025 ], [ 71.5558504, 21.0064555 ], [ 71.5557447, 21.0082584 ], [ 71.5554707, 21.0082626 ], [ 71.5551792, 21.0072376 ], [ 71.5543573, 21.0072501 ], [ 71.5543749, 21.008279 ], [ 71.5540987, 21.0081541 ], [ 71.5535506, 21.0081624 ], [ 71.553279, 21.0082954 ], [ 71.5532702, 21.007781 ], [ 71.551348, 21.0075525 ], [ 71.5510959, 21.008843 ], [ 71.5502741, 21.0088553 ], [ 71.5505393, 21.0083366 ], [ 71.5488933, 21.0082321 ], [ 71.5486215, 21.0083654 ], [ 71.5486083, 21.0075935 ], [ 71.5488846, 21.0077177 ], [ 71.5505261, 21.0075648 ], [ 71.5507871, 21.0067889 ], [ 71.5491454, 21.0069418 ], [ 71.5488736, 21.0070749 ], [ 71.548723, 21.0063053 ], [ 71.5488298, 21.0045024 ], [ 71.5493779, 21.0044941 ], [ 71.5489532, 21.0037284 ], [ 71.5489445, 21.003214 ], [ 71.5492097, 21.0026954 ], [ 71.5493297, 21.0016644 ], [ 71.5485057, 21.0015476 ], [ 71.5482273, 21.0012943 ], [ 71.5471314, 21.0013108 ], [ 71.545479, 21.0008209 ], [ 71.5449311, 21.000829 ], [ 71.5429959, 20.9998286 ], [ 71.5421742, 20.9998409 ], [ 71.5419024, 20.9999741 ], [ 71.5416546, 21.0015219 ], [ 71.5413805, 21.0015258 ], [ 71.5413719, 21.0010114 ], [ 71.5411001, 21.0011437 ], [ 71.538902, 21.000791 ], [ 71.538654, 21.0023385 ], [ 71.5370126, 21.0024912 ], [ 71.5367364, 21.0023673 ], [ 71.5368686, 21.002108 ], [ 71.5368555, 21.0013361 ], [ 71.5365771, 21.001083 ], [ 71.5365728, 21.0008256 ], [ 71.537373, 20.9995272 ], [ 71.5373554, 20.9984981 ], [ 71.5372146, 20.9982429 ], [ 71.5341859, 20.9973869 ], [ 71.5336293, 20.9968804 ], [ 71.5330793, 20.9967604 ], [ 71.5330706, 20.9962459 ], [ 71.5319683, 20.9958759 ], [ 71.53169, 20.9956228 ], [ 71.5308659, 20.9955068 ], [ 71.5307415, 20.9962805 ], [ 71.530472, 20.9965419 ], [ 71.5298353, 20.999382 ], [ 71.5309355, 20.999623 ], [ 71.5309398, 20.9998802 ], [ 71.5293004, 21.000162 ], [ 71.5292917, 20.9996474 ], [ 71.5287482, 20.9999129 ], [ 71.5287612, 21.0006846 ], [ 71.5282154, 21.0008209 ], [ 71.5276762, 21.0013436 ], [ 71.5271303, 21.0014809 ], [ 71.5272798, 21.0022506 ], [ 71.5271477, 21.00251 ], [ 71.5267319, 21.0022588 ], [ 71.5265737, 21.0009745 ], [ 71.5257563, 21.0012438 ], [ 71.5257433, 21.0004722 ], [ 71.5243864, 21.0012643 ], [ 71.5245098, 21.0004905 ], [ 71.5239491, 20.9997267 ], [ 71.5237996, 20.9989569 ], [ 71.5232517, 20.9989651 ], [ 71.5233666, 20.9976768 ], [ 71.5232258, 20.9974215 ], [ 71.5226799, 20.9975578 ], [ 71.521871, 20.9983418 ], [ 71.5213275, 20.9986071 ], [ 71.5191358, 20.9986396 ], [ 71.5183225, 20.9991664 ], [ 71.5172332, 20.9995689 ], [ 71.517374, 20.9998241 ], [ 71.517259, 21.0011125 ], [ 71.5167068, 21.0008634 ], [ 71.5165866, 21.0018944 ], [ 71.5160474, 21.0024172 ], [ 71.5161978, 21.0031868 ], [ 71.5156476, 21.0030658 ], [ 71.5153758, 21.0031991 ], [ 71.515521, 21.0037114 ], [ 71.5157992, 21.0039647 ], [ 71.5159497, 21.0047345 ], [ 71.5153974, 21.0044854 ], [ 71.5153889, 21.0039707 ], [ 71.5148408, 21.0039789 ], [ 71.5149644, 21.0032051 ], [ 71.5148236, 21.0029498 ], [ 71.5134452, 21.0024555 ], [ 71.5134365, 21.0019411 ], [ 71.5129846, 21.0021165 ], [ 71.5128843, 21.0016918 ], [ 71.5120625, 21.0017041 ], [ 71.5123428, 21.0020855 ], [ 71.513312, 21.0027148 ], [ 71.5134581, 21.0032274 ], [ 71.5129037, 21.002849 ], [ 71.5123535, 21.002729 ], [ 71.5123622, 21.0032435 ], [ 71.5120882, 21.0032476 ], [ 71.5119336, 21.0022206 ], [ 71.511377, 21.0017141 ], [ 71.5113685, 21.0011996 ], [ 71.5109493, 21.000691 ], [ 71.5101275, 21.0007033 ], [ 71.5098663, 21.0014792 ], [ 71.5079487, 21.0015073 ], [ 71.5078198, 21.0020238 ], [ 71.5075501, 21.0022852 ], [ 71.5071568, 21.0033204 ], [ 71.5063307, 21.0030753 ], [ 71.5069678, 21.0002352 ], [ 71.506827, 20.9999798 ], [ 71.5057289, 20.999867 ], [ 71.5046374, 21.0001403 ], [ 71.5035393, 21.0000282 ], [ 71.5035352, 20.999771 ], [ 71.5049007, 20.9994935 ], [ 71.504892, 20.9989791 ], [ 71.5051661, 20.9989751 ], [ 71.5051746, 20.9994895 ], [ 71.5057161, 20.9990951 ], [ 71.5062662, 20.9992161 ], [ 71.5063898, 20.9984423 ], [ 71.5067926, 20.9979218 ], [ 71.5059706, 20.9979339 ], [ 71.5059793, 20.9984483 ], [ 71.5054314, 20.9984565 ], [ 71.5055635, 20.9981972 ], [ 71.5053927, 20.996141 ], [ 71.5073148, 20.9963701 ], [ 71.5074297, 20.9950817 ], [ 71.5072889, 20.9948264 ], [ 71.5064628, 20.9945812 ], [ 71.5064585, 20.994324 ], [ 71.5075607, 20.9946933 ], [ 71.5102938, 20.9942675 ], [ 71.5104087, 20.9929791 ], [ 71.5105441, 20.9928481 ], [ 71.5110899, 20.9927118 ], [ 71.5107901, 20.9911722 ], [ 71.5121642, 20.9914092 ], [ 71.5121727, 20.9919237 ], [ 71.5129946, 20.9919116 ], [ 71.5127121, 20.9914011 ], [ 71.5148971, 20.9909825 ], [ 71.515562, 20.989815 ], [ 71.516776, 20.9886387 ], [ 71.5186869, 20.988225 ], [ 71.5185452, 20.9879696 ], [ 71.5186654, 20.9869386 ], [ 71.5164696, 20.9867137 ], [ 71.5161827, 20.985946 ], [ 71.5167306, 20.9859379 ], [ 71.5167219, 20.9854232 ], [ 71.5139848, 20.985592 ], [ 71.5134348, 20.9854718 ], [ 71.5124326, 20.9829133 ], [ 71.5121542, 20.98266 ], [ 71.5122573, 20.9805999 ], [ 71.5136333, 20.9809653 ], [ 71.5146066, 20.9818519 ], [ 71.5147527, 20.9823644 ], [ 71.518881, 20.983461 ], [ 71.5191593, 20.9837141 ], [ 71.5202594, 20.9839553 ], [ 71.521094, 20.9847149 ], [ 71.5213681, 20.9847107 ], [ 71.5230029, 20.9841719 ], [ 71.5231373, 20.9840416 ], [ 71.5231286, 20.9835272 ], [ 71.5229878, 20.9832718 ], [ 71.5235335, 20.9831348 ], [ 71.5236678, 20.9830046 ], [ 71.5239158, 20.9814569 ], [ 71.5244507, 20.9806769 ], [ 71.5246987, 20.9791293 ], [ 71.5258907, 20.9766665 ], [ 71.5268425, 20.9762669 ], [ 71.5269712, 20.9757504 ], [ 71.5294322, 20.9754565 ], [ 71.5292861, 20.9749439 ], [ 71.5299627, 20.9744193 ], [ 71.5301078, 20.9749318 ], [ 71.5302473, 20.9750579 ], [ 71.5307973, 20.9751789 ], [ 71.5310886, 20.9762038 ], [ 71.5324603, 20.9763117 ], [ 71.5327385, 20.9765648 ], [ 71.5349343, 20.9767895 ], [ 71.5371256, 20.9767568 ], [ 71.5383295, 20.9750668 ], [ 71.5389886, 20.973513 ], [ 71.5395342, 20.9733756 ], [ 71.5396686, 20.9732454 ], [ 71.5396599, 20.9727309 ], [ 71.5406038, 20.9718158 ], [ 71.5411494, 20.9716793 ], [ 71.5412772, 20.9711628 ], [ 71.5419515, 20.970509 ], [ 71.5424951, 20.9702435 ], [ 71.5438449, 20.9690658 ], [ 71.543858, 20.9698377 ], [ 71.545497, 20.9695559 ], [ 71.5454883, 20.9690415 ], [ 71.5490468, 20.9688591 ], [ 71.5506945, 20.9690917 ], [ 71.5523314, 20.9686816 ], [ 71.552327, 20.9684244 ], [ 71.5517791, 20.9684327 ], [ 71.5524503, 20.9676506 ], [ 71.5524329, 20.9666215 ], [ 71.5520137, 20.9661131 ], [ 71.5514703, 20.9663786 ], [ 71.5514616, 20.9658642 ], [ 71.5506378, 20.9657474 ], [ 71.5498073, 20.965245 ], [ 71.5487119, 20.9652615 ], [ 71.5484401, 20.9653947 ], [ 71.548427, 20.9646228 ], [ 71.5476141, 20.9651498 ], [ 71.5477, 20.9647213 ], [ 71.5478793, 20.9646311 ], [ 71.5478748, 20.9643737 ], [ 71.5476009, 20.9643779 ], [ 71.5475096, 20.9645482 ], [ 71.5470555, 20.9645143 ], [ 71.5456729, 20.9637629 ], [ 71.5434686, 20.9630239 ], [ 71.5429209, 20.963032 ], [ 71.5426427, 20.9627789 ], [ 71.5407124, 20.9620358 ], [ 71.5401647, 20.9620439 ], [ 71.5387865, 20.9615497 ], [ 71.5385083, 20.9612966 ], [ 71.5376824, 20.9610515 ], [ 71.5371258, 20.9605452 ], [ 71.5365781, 20.9605533 ], [ 71.5360216, 20.9600469 ], [ 71.5351978, 20.9599311 ], [ 71.5354586, 20.9591551 ], [ 71.5351804, 20.958902 ], [ 71.5349065, 20.958906 ], [ 71.5349109, 20.9591634 ], [ 71.5351891, 20.9594164 ], [ 71.5338198, 20.9594369 ], [ 71.5335285, 20.9584119 ], [ 71.5324265, 20.9580418 ], [ 71.5321483, 20.9577886 ], [ 71.5313223, 20.9575436 ], [ 71.5308684, 20.9575909 ], [ 71.5308497, 20.9564807 ], [ 71.5310267, 20.9562613 ], [ 71.5323983, 20.95637 ], [ 71.5315594, 20.9553531 ], [ 71.5323809, 20.955341 ], [ 71.5323896, 20.9558555 ], [ 71.5337548, 20.9555779 ], [ 71.533194, 20.9548143 ], [ 71.5318224, 20.9547054 ], [ 71.5293445, 20.9539702 ], [ 71.5274231, 20.9537415 ], [ 71.5271449, 20.9534883 ], [ 71.5263233, 20.9535004 ], [ 71.5260451, 20.9532473 ], [ 71.5230152, 20.9522628 ], [ 71.5224588, 20.9517565 ], [ 71.5205461, 20.952042 ], [ 71.5189028, 20.9520662 ], [ 71.5186312, 20.9521995 ], [ 71.5183874, 20.9540044 ], [ 71.5194828, 20.9539882 ], [ 71.5194915, 20.9545026 ], [ 71.5214129, 20.9547315 ], [ 71.5214303, 20.9557606 ], [ 71.520063, 20.9559092 ], [ 71.5184068, 20.9551617 ], [ 71.5173112, 20.9551777 ], [ 71.5154114, 20.9562352 ], [ 71.5148657, 20.9563724 ], [ 71.5147412, 20.9571462 ], [ 71.5142063, 20.957926 ], [ 71.5142107, 20.9581832 ], [ 71.5146284, 20.9585627 ], [ 71.5157261, 20.9586756 ], [ 71.5157304, 20.9589328 ], [ 71.5151827, 20.9589409 ], [ 71.5147886, 20.9599761 ], [ 71.5139884, 20.9612745 ], [ 71.5131838, 20.9623157 ], [ 71.5138049, 20.9666812 ], [ 71.5135352, 20.9669426 ], [ 71.513009, 20.9682369 ], [ 71.5127652, 20.9700418 ], [ 71.5118242, 20.9710851 ], [ 71.5112785, 20.9712214 ], [ 71.5110088, 20.9714826 ], [ 71.5104632, 20.9716198 ], [ 71.510476, 20.9723917 ], [ 71.508837, 20.9726731 ], [ 71.5085458, 20.9716481 ], [ 71.5093655, 20.9715068 ], [ 71.5101785, 20.9709802 ], [ 71.5113914, 20.9698048 ], [ 71.5121829, 20.9679918 ], [ 71.5121615, 20.9667054 ], [ 71.511879, 20.9661949 ], [ 71.5115707, 20.9641409 ], [ 71.5118274, 20.9631078 ], [ 71.5116565, 20.9610517 ], [ 71.5108306, 20.9608065 ], [ 71.5109627, 20.9605472 ], [ 71.5109542, 20.9600326 ], [ 71.5105352, 20.9595242 ], [ 71.4995603, 20.958527 ], [ 71.4992844, 20.9584028 ], [ 71.4991341, 20.957633 ], [ 71.499539, 20.9572407 ], [ 71.4999387, 20.9565918 ], [ 71.5000633, 20.9558181 ], [ 71.4995133, 20.9556971 ], [ 71.4992351, 20.9554439 ], [ 71.4981396, 20.9554599 ], [ 71.4978637, 20.9553357 ], [ 71.4977176, 20.9548232 ], [ 71.4974396, 20.9545699 ], [ 71.4972944, 20.9540574 ], [ 71.4967467, 20.9540653 ], [ 71.4957365, 20.9509921 ], [ 71.4954583, 20.9507389 ], [ 71.4954413, 20.9497098 ], [ 71.4955764, 20.9495786 ], [ 71.4961243, 20.9495707 ], [ 71.4964023, 20.9498239 ], [ 71.4986083, 20.9506928 ], [ 71.4985998, 20.9501781 ], [ 71.5002623, 20.9513114 ], [ 71.50081, 20.9513034 ], [ 71.5019183, 20.9520591 ], [ 71.5024683, 20.9521802 ], [ 71.5026132, 20.9526926 ], [ 71.5030309, 20.9530721 ], [ 71.5035809, 20.9531931 ], [ 71.5035894, 20.9537077 ], [ 71.5052434, 20.9543263 ], [ 71.5057998, 20.9548328 ], [ 71.5071778, 20.9553271 ], [ 71.5077255, 20.9553191 ], [ 71.507995, 20.9550577 ], [ 71.5090907, 20.9550417 ], [ 71.5093687, 20.9552949 ], [ 71.5110228, 20.9559143 ], [ 71.5110357, 20.9566862 ], [ 71.5124093, 20.9569232 ], [ 71.5124008, 20.9564087 ], [ 71.5129485, 20.9564006 ], [ 71.5138724, 20.9543284 ], [ 71.5149506, 20.953283 ], [ 71.5156098, 20.9517294 ], [ 71.5161577, 20.9517213 ], [ 71.5160116, 20.9512087 ], [ 71.5155926, 20.9507003 ], [ 71.5147754, 20.9509697 ], [ 71.5146121, 20.9494282 ], [ 71.5147367, 20.9486542 ], [ 71.515569, 20.9492849 ], [ 71.516119, 20.9494059 ], [ 71.516264, 20.9499184 ], [ 71.5165422, 20.9501717 ], [ 71.5166968, 20.9511987 ], [ 71.5177945, 20.9513106 ], [ 71.5183379, 20.9510453 ], [ 71.5188856, 20.9510371 ], [ 71.51902, 20.9509071 ], [ 71.5190156, 20.9506497 ], [ 71.5185966, 20.9501413 ], [ 71.5180468, 20.9500203 ], [ 71.5174904, 20.9495138 ], [ 71.5166603, 20.9490114 ], [ 71.5158344, 20.9487663 ], [ 71.5152779, 20.9482598 ], [ 71.5147281, 20.9481398 ], [ 71.5147195, 20.9476251 ], [ 71.5144479, 20.9477574 ], [ 71.5138979, 20.9476374 ], [ 71.513752, 20.9471248 ], [ 71.5133329, 20.9466162 ], [ 71.512507, 20.9463711 ], [ 71.5124985, 20.9458566 ], [ 71.5119485, 20.9457357 ], [ 71.5111164, 20.945105 ], [ 71.5111077, 20.9445905 ], [ 71.5105579, 20.9444694 ], [ 71.5094473, 20.9435856 ], [ 71.5088782, 20.9423072 ], [ 71.5083305, 20.9423153 ], [ 71.5072987, 20.9379559 ], [ 71.5070205, 20.9377026 ], [ 71.5053175, 20.934125 ], [ 71.505309, 20.9336104 ], [ 71.5058438, 20.9328306 ], [ 71.5063787, 20.9320508 ], [ 71.5077265, 20.9307442 ], [ 71.5079916, 20.9302256 ], [ 71.5090699, 20.9291804 ], [ 71.509335, 20.928662 ], [ 71.5109523, 20.927094 ], [ 71.5114828, 20.926057 ], [ 71.5118877, 20.9256646 ], [ 71.5124331, 20.9255284 ], [ 71.5125611, 20.9250118 ], [ 71.5132352, 20.9243581 ], [ 71.5135091, 20.9243541 ], [ 71.5143392, 20.9248565 ], [ 71.5154344, 20.9248404 ], [ 71.5155688, 20.9247102 ], [ 71.5155516, 20.9236811 ], [ 71.5151328, 20.9231725 ], [ 71.5145851, 20.9231806 ], [ 71.5145766, 20.9226662 ], [ 71.5137529, 20.9225492 ], [ 71.5129185, 20.9217894 ], [ 71.512095, 20.9216733 ], [ 71.5119319, 20.9201317 ], [ 71.5115131, 20.9196233 ], [ 71.5109633, 20.9195021 ], [ 71.5098529, 20.9186183 ], [ 71.5098444, 20.9181037 ], [ 71.5090209, 20.9179867 ], [ 71.5081865, 20.9172271 ], [ 71.5070784, 20.9164713 ], [ 71.5059831, 20.9164874 ], [ 71.5057051, 20.9162341 ], [ 71.5051596, 20.9163713 ], [ 71.5051768, 20.9174004 ], [ 71.5046312, 20.9175365 ], [ 71.5032836, 20.9188431 ], [ 71.5013776, 20.9195148 ], [ 71.5013691, 20.9190001 ], [ 71.4991657, 20.9182604 ], [ 71.498879, 20.9174927 ], [ 71.4983315, 20.9175006 ], [ 71.4983229, 20.9169861 ], [ 71.4975057, 20.9172555 ], [ 71.4975142, 20.9177699 ], [ 71.4969688, 20.9179062 ], [ 71.4958864, 20.9186939 ], [ 71.4948038, 20.9194819 ], [ 71.493995, 20.9202657 ], [ 71.4929062, 20.920668 ], [ 71.4929147, 20.9211825 ], [ 71.4923693, 20.9213188 ], [ 71.491828, 20.921713 ], [ 71.4922468, 20.9222216 ], [ 71.4921188, 20.9227382 ], [ 71.4926664, 20.9227302 ], [ 71.4928113, 20.9232428 ], [ 71.4933676, 20.9237493 ], [ 71.4934178, 20.9241747 ], [ 71.4932396, 20.9242658 ], [ 71.4931236, 20.9255543 ], [ 71.4932695, 20.9260668 ], [ 71.4921593, 20.9251819 ], [ 71.4899559, 20.924442 ], [ 71.4893997, 20.9239355 ], [ 71.4877524, 20.9237021 ], [ 71.4874743, 20.9234488 ], [ 71.4866486, 20.9232035 ], [ 71.4860926, 20.922697 ], [ 71.4847149, 20.9222023 ], [ 71.4844367, 20.9219491 ], [ 71.4838871, 20.9218289 ], [ 71.4837157, 20.9197728 ], [ 71.4839852, 20.9195114 ], [ 71.4842464, 20.9187355 ], [ 71.4840929, 20.9177085 ], [ 71.4827323, 20.918243 ], [ 71.4827408, 20.9187574 ], [ 71.480582455078121, 20.919425527507354 ], [ 71.4805609, 20.9194322 ], [ 71.4800217, 20.9199546 ], [ 71.4797478, 20.9199585 ], [ 71.4794698, 20.9197053 ], [ 71.4772708, 20.9192226 ], [ 71.4750803, 20.9192543 ], [ 71.4742693, 20.9199098 ], [ 71.4741404, 20.9204265 ], [ 71.4738709, 20.9206877 ], [ 71.4730831, 20.9227578 ], [ 71.4730916, 20.9232723 ], [ 71.4732332, 20.9235276 ], [ 71.4726855, 20.9235356 ], [ 71.4728051, 20.9225046 ], [ 71.4733358, 20.9214675 ], [ 71.4733273, 20.9209529 ], [ 71.4741192, 20.91914 ], [ 71.4753413, 20.9184785 ], [ 71.477254, 20.9181935 ], [ 71.4783534, 20.9184348 ], [ 71.4799964, 20.918411 ], [ 71.480382455078114, 20.918263490835468 ], [ 71.4824458, 20.9174751 ], [ 71.4824417, 20.9172178 ], [ 71.4807924, 20.9168553 ], [ 71.480582455078121, 20.916744330741061 ], [ 71.480582455078121, 20.916744330741057 ], [ 71.4791347, 20.9159791 ], [ 71.4793957, 20.9152035 ], [ 71.4802235, 20.915577 ], [ 71.480582455078121, 20.915849495225174 ], [ 71.4810555, 20.9162086 ], [ 71.480582455078121, 20.915145226291326 ], [ 71.4804868, 20.9149302 ], [ 71.4810344, 20.9149223 ], [ 71.4807478, 20.9141543 ], [ 71.480382455078114, 20.914159638373288 ], [ 71.4802003, 20.9141623 ], [ 71.4801918, 20.9136478 ], [ 71.4793661, 20.9134025 ], [ 71.4793619, 20.9131453 ], [ 71.4801812, 20.9130041 ], [ 71.4803156, 20.9128741 ], [ 71.4801621, 20.9118468 ], [ 71.4796146, 20.9118548 ], [ 71.4796019, 20.9110829 ], [ 71.4771396, 20.911247 ], [ 71.4763099, 20.9107444 ], [ 71.4757622, 20.9107523 ], [ 71.4752082, 20.9103747 ], [ 71.4750625, 20.9098622 ], [ 71.4747845, 20.9096089 ], [ 71.4747802, 20.9093517 ], [ 71.475185, 20.9089593 ], [ 71.4762803, 20.9089434 ], [ 71.4765562, 20.9090685 ], [ 71.4765477, 20.9085539 ], [ 71.4776365, 20.9081517 ], [ 71.4779104, 20.9081477 ], [ 71.4787444, 20.9089077 ], [ 71.4792963, 20.909157 ], [ 71.4801177, 20.9091451 ], [ 71.480382455078114, 20.909386785924646 ], [ 71.4805343, 20.9095254 ], [ 71.480582455078121, 20.909654469055802 ], [ 71.4808208, 20.9102933 ], [ 71.4815207, 20.9111833 ], [ 71.4820703, 20.9113044 ], [ 71.4820788, 20.9118191 ], [ 71.4826286, 20.9119393 ], [ 71.4827671, 20.9120663 ], [ 71.4827883, 20.9133528 ], [ 71.4825229, 20.9138712 ], [ 71.4825441, 20.9151576 ], [ 71.4826836, 20.9152838 ], [ 71.4851479, 20.9152479 ], [ 71.4855477, 20.9145993 ], [ 71.4864915, 20.9136843 ], [ 71.487037, 20.9135482 ], [ 71.4868869, 20.9127784 ], [ 71.4861901, 20.9120166 ], [ 71.4850886, 20.9116461 ], [ 71.4842544, 20.9108862 ], [ 71.4837047, 20.910766 ], [ 71.4835588, 20.9102534 ], [ 71.4827248, 20.9094936 ], [ 71.4823018, 20.9087278 ], [ 71.4814762, 20.9084825 ], [ 71.4813184, 20.9079997 ], [ 71.4811874, 20.9075855 ], [ 71.480382455078114, 20.907597163027603 ], [ 71.4803661, 20.9075974 ], [ 71.4798123, 20.9072199 ], [ 71.4787985, 20.9038892 ], [ 71.4789336, 20.903758 ], [ 71.4800247, 20.9034849 ], [ 71.480582455078121, 20.902505787761804 ], [ 71.4806896, 20.9023177 ], [ 71.48081, 20.9012867 ], [ 71.481086, 20.9014108 ], [ 71.4824528, 20.9012627 ], [ 71.4824358, 20.9002336 ], [ 71.4810689, 20.9003817 ], [ 71.480382455078114, 20.899860985678465 ], [ 71.4802372, 20.8997508 ], [ 71.4800871, 20.898981 ], [ 71.4798091, 20.8987278 ], [ 71.4797921, 20.8976987 ], [ 71.4799253, 20.8974394 ], [ 71.4791018, 20.8973222 ], [ 71.4782699, 20.8966913 ], [ 71.4778249, 20.8946392 ], [ 71.477958, 20.8943798 ], [ 71.4771389, 20.8945199 ], [ 71.4768629, 20.8943957 ], [ 71.4771239, 20.8936199 ], [ 71.4776717, 20.8936119 ], [ 71.4774919, 20.8910412 ], [ 71.477065, 20.8900181 ], [ 71.475972, 20.8901621 ], [ 71.4754286, 20.8904273 ], [ 71.4743294, 20.8901859 ], [ 71.4740514, 20.8899327 ], [ 71.4729542, 20.8898202 ], [ 71.4729457, 20.8893058 ], [ 71.4726741, 20.8894379 ], [ 71.4721266, 20.8894458 ], [ 71.4715726, 20.8890682 ], [ 71.4718338, 20.8882925 ], [ 71.4712842, 20.8881712 ], [ 71.4704502, 20.8874112 ], [ 71.4696269, 20.887295 ], [ 71.4696184, 20.8867805 ], [ 71.4687928, 20.886535 ], [ 71.4682202, 20.8849992 ], [ 71.4668492, 20.88489 ], [ 71.4662975, 20.8846405 ], [ 71.4654763, 20.8846524 ], [ 71.4646507, 20.8844069 ], [ 71.4638189, 20.883776 ], [ 71.4631047, 20.881985 ], [ 71.4626861, 20.8814762 ], [ 71.4618607, 20.8812309 ], [ 71.4615702, 20.8802056 ], [ 71.4607594, 20.8808603 ], [ 71.460216, 20.8811255 ], [ 71.4591209, 20.8811412 ], [ 71.4571964, 20.8806541 ], [ 71.4555434, 20.8800349 ], [ 71.4554186, 20.8808089 ], [ 71.4547471, 20.8815906 ], [ 71.4533701, 20.8810956 ], [ 71.4533784, 20.8816102 ], [ 71.4511862, 20.8815125 ], [ 71.4503733, 20.8820389 ], [ 71.4498237, 20.8819185 ], [ 71.4498153, 20.8814039 ], [ 71.4489962, 20.8815439 ], [ 71.4484424, 20.8811663 ], [ 71.448255, 20.8780809 ], [ 71.4481143, 20.8778255 ], [ 71.4475647, 20.8777042 ], [ 71.4459244, 20.8778569 ], [ 71.4459161, 20.8773423 ], [ 71.4453665, 20.8772211 ], [ 71.4450884, 20.8769677 ], [ 71.444539, 20.8768473 ], [ 71.4442485, 20.8758221 ], [ 71.4436989, 20.8757008 ], [ 71.4431452, 20.8753232 ], [ 71.4425727, 20.8737872 ], [ 71.4420253, 20.8737951 ], [ 71.4417224, 20.8719979 ], [ 71.441175, 20.8720058 ], [ 71.4408804, 20.8707233 ], [ 71.4397876, 20.8708671 ], [ 71.4395095, 20.8706137 ], [ 71.4381348, 20.8702478 ], [ 71.4375664, 20.8689692 ], [ 71.4364695, 20.8688556 ], [ 71.434014, 20.8694054 ], [ 71.4337362, 20.8691519 ], [ 71.4309864, 20.868419 ], [ 71.4307084, 20.8681655 ], [ 71.4296093, 20.8679238 ], [ 71.4279669, 20.8679472 ], [ 71.4254971, 20.8675967 ], [ 71.4256918, 20.8685349 ], [ 71.4252378, 20.8685006 ], [ 71.4249599, 20.8682472 ], [ 71.4230397, 20.868017 ], [ 71.4227679, 20.86815 ], [ 71.4230705, 20.8699472 ], [ 71.4217018, 20.8699665 ], [ 71.4215562, 20.869454 ], [ 71.42086, 20.8686917 ], [ 71.4203166, 20.8689567 ], [ 71.4203249, 20.8694713 ], [ 71.4195016, 20.869354 ], [ 71.4186721, 20.8688509 ], [ 71.4175772, 20.8688664 ], [ 71.4148275, 20.8681332 ], [ 71.4137201, 20.8673768 ], [ 71.4123472, 20.8671389 ], [ 71.4115383, 20.8679223 ], [ 71.4107213, 20.8681911 ], [ 71.4104516, 20.8684523 ], [ 71.4090809, 20.8683434 ], [ 71.4090726, 20.8678287 ], [ 71.4079798, 20.8679724 ], [ 71.4074364, 20.8682374 ], [ 71.4066132, 20.8681208 ], [ 71.4066213, 20.8686354 ], [ 71.4044293, 20.8685371 ], [ 71.4038757, 20.8681593 ], [ 71.4038675, 20.8676447 ], [ 71.4030443, 20.8675271 ], [ 71.4027664, 20.8672737 ], [ 71.4013894, 20.8667783 ], [ 71.4005559, 20.8660179 ], [ 71.4000085, 20.8660257 ], [ 71.3994529, 20.8655188 ], [ 71.3989054, 20.8655263 ], [ 71.398362, 20.8657913 ], [ 71.3978144, 20.8657991 ], [ 71.3972629, 20.8655494 ], [ 71.3967154, 20.8655572 ], [ 71.3964438, 20.86569 ], [ 71.3964559, 20.8664619 ], [ 71.3950872, 20.8664812 ], [ 71.3950913, 20.8667384 ], [ 71.3956389, 20.8667307 ], [ 71.3955096, 20.8672472 ], [ 71.3959288, 20.8677562 ], [ 71.3942843, 20.86765 ], [ 71.3923641, 20.8674196 ], [ 71.3912609, 20.8669202 ], [ 71.3893406, 20.8666896 ], [ 71.3887891, 20.8664402 ], [ 71.3879679, 20.8664515 ], [ 71.387688, 20.8660699 ], [ 71.3874102, 20.8658165 ], [ 71.3872282, 20.8657305 ], [ 71.3868466, 20.8647949 ], [ 71.3865727, 20.8647987 ], [ 71.3867213, 20.8655687 ], [ 71.3871405, 20.8660775 ], [ 71.3873215, 20.8661625 ], [ 71.3875994, 20.866416 ], [ 71.3882539, 20.8672196 ], [ 71.3912692, 20.8674349 ], [ 71.3923701, 20.8678059 ], [ 71.3922614, 20.8696089 ], [ 71.3919957, 20.8701274 ], [ 71.3920121, 20.8711565 ], [ 71.3916183, 20.8721914 ], [ 71.3935283, 20.8717783 ], [ 71.394897, 20.871759 ], [ 71.3950356, 20.8718862 ], [ 71.3950437, 20.8724008 ], [ 71.394654, 20.873693 ], [ 71.3941065, 20.8737006 ], [ 71.3941146, 20.8742152 ], [ 71.3935691, 20.8743511 ], [ 71.3927561, 20.8748771 ], [ 71.3919367, 20.8750177 ], [ 71.3916508, 20.8742498 ], [ 71.3913771, 20.8742536 ], [ 71.3911155, 20.8750293 ], [ 71.385107, 20.8760136 ], [ 71.38373, 20.875518 ], [ 71.3829088, 20.8755294 ], [ 71.3818056, 20.87503 ], [ 71.3809844, 20.8750416 ], [ 71.3782223, 20.8735358 ], [ 71.3776669, 20.8730289 ], [ 71.3771172, 20.8729083 ], [ 71.3769719, 20.8723956 ], [ 71.3766941, 20.8721421 ], [ 71.3765495, 20.8716293 ], [ 71.376002, 20.8716371 ], [ 71.3754263, 20.8698435 ], [ 71.3748787, 20.8698512 ], [ 71.3747292, 20.8690812 ], [ 71.3744514, 20.8688276 ], [ 71.3743068, 20.868315 ], [ 71.3729402, 20.8684621 ], [ 71.3726705, 20.8687233 ], [ 71.371036, 20.8692606 ], [ 71.3707663, 20.8695218 ], [ 71.3688602, 20.870192 ], [ 71.3688682, 20.8707066 ], [ 71.3677752, 20.8708499 ], [ 71.3675034, 20.8709828 ], [ 71.3675115, 20.8714974 ], [ 71.3664206, 20.87177 ], [ 71.3667003, 20.8721516 ], [ 71.3675236, 20.8722693 ], [ 71.367668, 20.8727821 ], [ 71.368369, 20.8738017 ], [ 71.366177, 20.8737031 ], [ 71.3656334, 20.8739678 ], [ 71.3618551, 20.8774948 ], [ 71.3617258, 20.8780113 ], [ 71.3609165, 20.8787945 ], [ 71.3601114, 20.8798352 ], [ 71.3585331, 20.8839746 ], [ 71.358545, 20.8847465 ], [ 71.3599502, 20.8870432 ], [ 71.3605058, 20.8875503 ], [ 71.3606512, 20.8880631 ], [ 71.3611987, 20.8880555 ], [ 71.3616251, 20.889079 ], [ 71.3624626, 20.8900969 ], [ 71.3627444, 20.8906076 ], [ 71.3638557, 20.8916218 ], [ 71.3641377, 20.8921324 ], [ 71.3648326, 20.8927658 ], [ 71.3653822, 20.8928873 ], [ 71.3655268, 20.8934001 ], [ 71.3659439, 20.8937798 ], [ 71.3733365, 20.8936773 ], [ 71.3752409, 20.8928788 ], [ 71.3763199, 20.8918344 ], [ 71.3771412, 20.8918231 ], [ 71.3776929, 20.8920727 ], [ 71.378665, 20.8929603 ], [ 71.3792246, 20.8937246 ], [ 71.3789914, 20.8963014 ], [ 71.3787256, 20.8968198 ], [ 71.3781229, 20.9019752 ], [ 71.3805892, 20.9020691 ], [ 71.381259, 20.9011595 ], [ 71.381372, 20.8996138 ], [ 71.382737, 20.8993373 ], [ 71.3829946, 20.8983044 ], [ 71.3835482, 20.8986822 ], [ 71.3845121, 20.8990553 ], [ 71.3842992, 20.9029185 ], [ 71.3844448, 20.9034312 ], [ 71.3838993, 20.9035669 ], [ 71.3833578, 20.903961 ], [ 71.383366, 20.9044757 ], [ 71.3828182, 20.9044832 ], [ 71.3828264, 20.9049979 ], [ 71.3822747, 20.9047482 ], [ 71.3822545, 20.9034617 ], [ 71.379788, 20.903367 ], [ 71.3786888, 20.9031249 ], [ 71.3778734, 20.9035227 ], [ 71.3780341, 20.9050646 ], [ 71.3788717, 20.9060823 ], [ 71.3797096, 20.9071001 ], [ 71.3804128, 20.9082479 ], [ 71.3812323, 20.9081082 ], [ 71.3809666, 20.9086267 ], [ 71.3815162, 20.9087472 ], [ 71.3820721, 20.9092541 ], [ 71.3826217, 20.9093757 ], [ 71.3823316, 20.9083503 ], [ 71.3826054, 20.9083466 ], [ 71.383032, 20.90937 ], [ 71.3838738, 20.910645 ], [ 71.3837494, 20.9114188 ], [ 71.3829281, 20.9114303 ], [ 71.3826704, 20.9124632 ], [ 71.381847, 20.9123456 ], [ 71.3815691, 20.9120922 ], [ 71.3810214, 20.9120997 ], [ 71.3793886, 20.9127663 ], [ 71.3797111, 20.9158501 ], [ 71.3808065, 20.9158347 ], [ 71.3808105, 20.9160922 ], [ 71.380263, 20.9160997 ], [ 71.3802669, 20.916357 ], [ 71.3813684, 20.9167272 ], [ 71.3851981, 20.9164165 ], [ 71.3853325, 20.9162863 ], [ 71.3854618, 20.9157697 ], [ 71.3871087, 20.9160041 ], [ 71.3871006, 20.9154896 ], [ 71.3873765, 20.915614 ], [ 71.3879241, 20.9156062 ], [ 71.3888923, 20.9162366 ], [ 71.3889046, 20.9170084 ], [ 71.3887721, 20.9172676 ], [ 71.3893198, 20.91726 ], [ 71.3890541, 20.9177784 ], [ 71.3879445, 20.9168928 ], [ 71.387397, 20.9169003 ], [ 71.3871252, 20.9170334 ], [ 71.3875476, 20.9177994 ], [ 71.3874193, 20.9183159 ], [ 71.3868715, 20.9183237 ], [ 71.387004, 20.9180644 ], [ 71.3868594, 20.9175518 ], [ 71.3843928, 20.9174571 ], [ 71.3830277, 20.9177334 ], [ 71.3822184, 20.9185168 ], [ 71.3814051, 20.9190428 ], [ 71.3792142, 20.9190735 ], [ 71.3786706, 20.9193384 ], [ 71.3775896, 20.9202547 ], [ 71.3772027, 20.9218041 ], [ 71.3768005, 20.9223244 ], [ 71.3762548, 20.9224603 ], [ 71.3759849, 20.9227213 ], [ 71.3754393, 20.9228582 ], [ 71.3754272, 20.9220861 ], [ 71.3759749, 20.9220786 ], [ 71.3761033, 20.921562 ], [ 71.376373, 20.921301 ], [ 71.376768, 20.920266 ], [ 71.3759485, 20.9204057 ], [ 71.3740437, 20.9212042 ], [ 71.3735021, 20.9215983 ], [ 71.3732444, 20.9226312 ], [ 71.3722084, 20.9237799 ], [ 71.3718712, 20.922393 ], [ 71.372139, 20.9220028 ], [ 71.3726825, 20.921738 ], [ 71.3733526, 20.9208283 ], [ 71.3737578, 20.9204361 ], [ 71.3747056, 20.9197801 ], [ 71.3745529, 20.9187527 ], [ 71.3731917, 20.9192865 ], [ 71.3701836, 20.9195856 ], [ 71.3701794, 20.9193282 ], [ 71.3732697, 20.9187469 ], [ 71.3745489, 20.9184955 ], [ 71.3746731, 20.9177217 ], [ 71.3752046, 20.9166849 ], [ 71.3751883, 20.9156558 ], [ 71.3756996, 20.9133324 ], [ 71.3765128, 20.9128064 ], [ 71.3766421, 20.9122899 ], [ 71.3771877, 20.9121532 ], [ 71.3774576, 20.911892 ], [ 71.3786791, 20.9112322 ], [ 71.3788084, 20.9107157 ], [ 71.3804535, 20.910821 ], [ 71.3805879, 20.9106907 ], [ 71.3807171, 20.9101744 ], [ 71.3796156, 20.9098032 ], [ 71.3779505, 20.9084114 ], [ 71.3775189, 20.9071307 ], [ 71.3769632, 20.9066236 ], [ 71.3763953, 20.9053449 ], [ 71.3761174, 20.9050914 ], [ 71.3770545, 20.8950415 ], [ 71.3769141, 20.8947862 ], [ 71.3758209, 20.8949296 ], [ 71.3750076, 20.8954556 ], [ 71.3733688, 20.8957357 ], [ 71.3656984, 20.8955847 ], [ 71.3648789, 20.8957251 ], [ 71.3648952, 20.8967544 ], [ 71.3654427, 20.8967469 ], [ 71.3650558, 20.8982963 ], [ 71.3653537, 20.8998363 ], [ 71.3663227, 20.9004658 ], [ 71.367434, 20.9014798 ], [ 71.3679836, 20.9016013 ], [ 71.3681363, 20.9026286 ], [ 71.3670692, 20.9044449 ], [ 71.3672229, 20.9054723 ], [ 71.3655578, 20.9040793 ], [ 71.3652819, 20.903955 ], [ 71.3651365, 20.9034422 ], [ 71.3645767, 20.9026779 ], [ 71.3642787, 20.9011379 ], [ 71.3638564, 20.9003717 ], [ 71.3627591, 20.9002577 ], [ 71.3622135, 20.9003944 ], [ 71.3619559, 20.9014275 ], [ 71.3605949, 20.901961 ], [ 71.3604414, 20.9009336 ], [ 71.360023, 20.9004248 ], [ 71.3578224, 20.8998113 ], [ 71.3561796, 20.899834 ], [ 71.3556261, 20.899456 ], [ 71.3557544, 20.8989395 ], [ 71.3550543, 20.8979198 ], [ 71.3545045, 20.8977983 ], [ 71.3536752, 20.897295 ], [ 71.3528538, 20.8973063 ], [ 71.3523, 20.8969283 ], [ 71.3522961, 20.8966709 ], [ 71.3528417, 20.8965343 ], [ 71.3529761, 20.8964042 ], [ 71.3529642, 20.8956323 ], [ 71.3528236, 20.895377 ], [ 71.352094, 20.8952986 ], [ 71.3521347, 20.895129 ], [ 71.3526703, 20.8943496 ], [ 71.3527956, 20.8935758 ], [ 71.3522481, 20.8935834 ], [ 71.3522399, 20.8930688 ], [ 71.3527875, 20.8930612 ], [ 71.352912, 20.8922874 ], [ 71.3527716, 20.8920321 ], [ 71.3516824, 20.8924326 ], [ 71.3514125, 20.8926936 ], [ 71.350867, 20.8928302 ], [ 71.3506051, 20.8936061 ], [ 71.3500575, 20.8936134 ], [ 71.3504518, 20.8925787 ], [ 71.3507215, 20.8923177 ], [ 71.350851, 20.8918011 ], [ 71.3492122, 20.892081 ], [ 71.3487005, 20.8944042 ], [ 71.3478791, 20.8944156 ], [ 71.3478712, 20.8939009 ], [ 71.3470538, 20.8941695 ], [ 71.3470817, 20.8959707 ], [ 71.3462603, 20.895982 ], [ 71.3462683, 20.8964965 ], [ 71.3459946, 20.8965002 ], [ 71.3459825, 20.8957284 ], [ 71.3452569, 20.8959072 ], [ 71.3451611, 20.8957397 ], [ 71.3443416, 20.8958792 ], [ 71.3440719, 20.8961402 ], [ 71.3435242, 20.8961478 ], [ 71.3432484, 20.8960232 ], [ 71.3432445, 20.895766 ], [ 71.3437901, 20.8956293 ], [ 71.3441944, 20.8952383 ], [ 71.3443197, 20.8944643 ], [ 71.344734, 20.8947161 ], [ 71.3448793, 20.8952288 ], [ 71.346095, 20.8941827 ], [ 71.3462244, 20.8936662 ], [ 71.3456828, 20.8940593 ], [ 71.3448593, 20.8939423 ], [ 71.3448674, 20.894457 ], [ 71.3445896, 20.8942033 ], [ 71.3424112, 20.8950052 ], [ 71.3422817, 20.8955218 ], [ 71.3420118, 20.8957828 ], [ 71.3418835, 20.8962993 ], [ 71.3413299, 20.8959204 ], [ 71.3405085, 20.8959317 ], [ 71.3396969, 20.8965866 ], [ 71.3397049, 20.8971013 ], [ 71.3388756, 20.8965979 ], [ 71.3387461, 20.8971143 ], [ 71.3384764, 20.8973755 ], [ 71.3383479, 20.8978918 ], [ 71.337888, 20.8975524 ], [ 71.3379207, 20.8968684 ], [ 71.3383239, 20.8963481 ], [ 71.3372347, 20.8967486 ], [ 71.3366871, 20.8967561 ], [ 71.3364093, 20.8965025 ], [ 71.3358597, 20.8963817 ], [ 71.3358557, 20.8961245 ], [ 71.3369449, 20.8957231 ], [ 71.3373452, 20.8950746 ], [ 71.3380201, 20.8944216 ], [ 71.3385658, 20.8942859 ], [ 71.338538, 20.8924847 ], [ 71.3393634, 20.8927308 ], [ 71.3393515, 20.8919589 ], [ 71.339903, 20.8922088 ], [ 71.339895, 20.8916942 ], [ 71.3404446, 20.8918147 ], [ 71.3407143, 20.8915537 ], [ 71.34126, 20.891418 ], [ 71.3413505, 20.891247 ], [ 71.3418056, 20.8912814 ], [ 71.3434363, 20.890487 ], [ 71.3437062, 20.890226 ], [ 71.3456068, 20.8891704 ], [ 71.3524355, 20.8880472 ], [ 71.3537984, 20.8876428 ], [ 71.353613, 20.8845571 ], [ 71.354018, 20.884165 ], [ 71.3559285, 20.8837531 ], [ 71.356057, 20.8832366 ], [ 71.355747, 20.8809247 ], [ 71.3556066, 20.8806692 ], [ 71.3537001, 20.8813385 ], [ 71.3531605, 20.8818607 ], [ 71.3526151, 20.8819973 ], [ 71.3524858, 20.8825139 ], [ 71.3518179, 20.8835524 ], [ 71.3504548, 20.8839567 ], [ 71.3485384, 20.8839831 ], [ 71.3479848, 20.8836051 ], [ 71.3479768, 20.8830905 ], [ 71.3474272, 20.882969 ], [ 71.3468737, 20.882591 ], [ 71.3468657, 20.8820763 ], [ 71.3463182, 20.8820839 ], [ 71.3463102, 20.8815692 ], [ 71.3457625, 20.8815768 ], [ 71.3450538, 20.8800423 ], [ 71.3442203, 20.8792818 ], [ 71.3440759, 20.878769 ], [ 71.342709, 20.8789159 ], [ 71.3421676, 20.8793097 ], [ 71.3417882, 20.8813738 ], [ 71.34207, 20.8818847 ], [ 71.3420821, 20.8826566 ], [ 71.3416797, 20.8831769 ], [ 71.341299735937497, 20.883271438179833 ], [ 71.3411343, 20.8833126 ], [ 71.3403248, 20.8840958 ], [ 71.3370553, 20.8851699 ], [ 71.3266276, 20.8837681 ], [ 71.3260721, 20.8832608 ], [ 71.3249689, 20.8827611 ], [ 71.323862, 20.8820041 ], [ 71.3233065, 20.8814968 ], [ 71.322759, 20.8815044 ], [ 71.3222075, 20.8812546 ], [ 71.3197414, 20.8811597 ], [ 71.319596, 20.8806469 ], [ 71.319178, 20.8801379 ], [ 71.3180808, 20.8800238 ], [ 71.3178032, 20.8797701 ], [ 71.3167021, 20.8793995 ], [ 71.3160646, 20.8824965 ], [ 71.3155288, 20.8832757 ], [ 71.3147389, 20.8853453 ], [ 71.3147469, 20.8858599 ], [ 71.3148882, 20.8861154 ], [ 71.3140668, 20.8861266 ], [ 71.3138128, 20.8874167 ], [ 71.3136308, 20.8873307 ], [ 71.3135271, 20.8866486 ], [ 71.3129795, 20.886656 ], [ 71.3129716, 20.8861413 ], [ 71.3124259, 20.886277 ], [ 71.3119761, 20.8865811 ], [ 71.3119655, 20.8830667 ], [ 71.3114063, 20.8823022 ], [ 71.3107104, 20.8815394 ], [ 71.309893, 20.8818078 ], [ 71.3099009, 20.8823224 ], [ 71.3085339, 20.8824691 ], [ 71.3082581, 20.8823447 ], [ 71.3083906, 20.8820856 ], [ 71.3083789, 20.8813135 ], [ 71.3090519, 20.8805324 ], [ 71.3079608, 20.8808045 ], [ 71.3079686, 20.8813192 ], [ 71.3076949, 20.8813228 ], [ 71.3074054, 20.8802973 ], [ 71.3079529, 20.8802899 ], [ 71.3076713, 20.879779 ], [ 71.3071237, 20.8797864 ], [ 71.3071198, 20.879529 ], [ 71.3076673, 20.8795216 ], [ 71.3076633, 20.8792644 ], [ 71.3046478, 20.8790476 ], [ 71.3049138, 20.8785294 ], [ 71.3040924, 20.8785403 ], [ 71.3042249, 20.8782812 ], [ 71.3042052, 20.8769947 ], [ 71.3037871, 20.8764855 ], [ 71.302696, 20.8767577 ], [ 71.302958, 20.875982 ], [ 71.3032337, 20.8761066 ], [ 71.305418, 20.8756915 ], [ 71.3052729, 20.8751788 ], [ 71.3054082, 20.8750478 ], [ 71.3059559, 20.8750404 ], [ 71.3073366, 20.875794 ], [ 71.3087053, 20.8757754 ], [ 71.3089752, 20.8755144 ], [ 71.3097966, 20.8755033 ], [ 71.3103481, 20.8757531 ], [ 71.31281, 20.8755917 ], [ 71.3129584, 20.8763617 ], [ 71.3130977, 20.8764882 ], [ 71.3163829, 20.8764437 ], [ 71.3175509, 20.8751003 ], [ 71.3182797, 20.8751311 ], [ 71.3185594, 20.8755139 ], [ 71.317738, 20.875525 ], [ 71.3178824, 20.8760378 ], [ 71.3182993, 20.8764177 ], [ 71.3207673, 20.8766416 ], [ 71.3211835, 20.8770225 ], [ 71.3213288, 20.8775352 ], [ 71.3218782, 20.877656 ], [ 71.322156, 20.8779094 ], [ 71.3227015, 20.8777739 ], [ 71.3228459, 20.8782867 ], [ 71.3235486, 20.8794347 ], [ 71.3240982, 20.8795564 ], [ 71.3242424, 20.8800691 ], [ 71.3248019, 20.8808336 ], [ 71.325913, 20.881848 ], [ 71.3263299, 20.8822279 ], [ 71.3298971, 20.882694 ], [ 71.3342777, 20.8826343 ], [ 71.3359324, 20.8833838 ], [ 71.3375771, 20.8834904 ], [ 71.3375692, 20.8829758 ], [ 71.3378429, 20.882972 ], [ 71.3378508, 20.8834866 ], [ 71.3383925, 20.8830928 ], [ 71.3400252, 20.8824275 ], [ 71.3401536, 20.8819109 ], [ 71.3400012, 20.8808835 ], [ 71.3372655, 20.8810493 ], [ 71.336714, 20.8807994 ], [ 71.3361662, 20.880807 ], [ 71.3358945, 20.8809399 ], [ 71.3357451, 20.8801697 ], [ 71.3347716, 20.8791536 ], [ 71.3339462, 20.8789075 ], [ 71.3345784, 20.8755532 ], [ 71.3345665, 20.8747813 ], [ 71.3348325, 20.8742631 ], [ 71.3350506, 20.8706569 ], [ 71.3346244, 20.8696333 ], [ 71.3340768, 20.8696409 ], [ 71.3340689, 20.8691262 ], [ 71.3337971, 20.8692582 ], [ 71.3332477, 20.8691374 ], [ 71.332954, 20.8678546 ], [ 71.3321307, 20.8677367 ], [ 71.3313016, 20.8672332 ], [ 71.3304804, 20.8672445 ], [ 71.3302046, 20.86712 ], [ 71.3300474, 20.8658354 ], [ 71.3307223, 20.8651824 ], [ 71.3318173, 20.8651674 ], [ 71.3322373, 20.8658055 ], [ 71.3330666, 20.866309 ], [ 71.333212, 20.8668218 ], [ 71.3337614, 20.8669423 ], [ 71.3345945, 20.8677031 ], [ 71.3352846, 20.8680801 ], [ 71.3355781, 20.869363 ], [ 71.3361335, 20.8698701 ], [ 71.336693, 20.8706345 ], [ 71.3367329, 20.8732075 ], [ 71.3362012, 20.8742444 ], [ 71.3359513, 20.8757919 ], [ 71.3356816, 20.8760529 ], [ 71.3357094, 20.8778541 ], [ 71.3361366, 20.8788777 ], [ 71.336686, 20.8789983 ], [ 71.3369638, 20.8792519 ], [ 71.3394238, 20.8789608 ], [ 71.340511, 20.8784313 ], [ 71.341299735937497, 20.877668000869587 ], [ 71.3413203, 20.8776481 ], [ 71.3418638, 20.8773833 ], [ 71.34405, 20.877096 ], [ 71.3448754, 20.8773421 ], [ 71.345847, 20.87823 ], [ 71.3464066, 20.8789943 ], [ 71.3468277, 20.8796314 ], [ 71.3473773, 20.8797531 ], [ 71.3473853, 20.8802676 ], [ 71.3479349, 20.8803884 ], [ 71.3482125, 20.8806418 ], [ 71.3504068, 20.8808692 ], [ 71.3512201, 20.8803432 ], [ 71.3517657, 20.8802075 ], [ 71.3518941, 20.879691 ], [ 71.352569, 20.879038 ], [ 71.3533822, 20.878512 ], [ 71.3582981, 20.8776722 ], [ 71.3585678, 20.877411 ], [ 71.3591135, 20.8772753 ], [ 71.3593711, 20.8762423 ], [ 71.3599165, 20.8761056 ], [ 71.3603167, 20.8754572 ], [ 71.3609955, 20.8750614 ], [ 71.3613957, 20.8744129 ], [ 71.3630141, 20.8728465 ], [ 71.3632798, 20.8723281 ], [ 71.3640891, 20.8715449 ], [ 71.3647559, 20.870377 ], [ 71.3653013, 20.8702413 ], [ 71.3654457, 20.8707539 ], [ 71.365585, 20.8708803 ], [ 71.3658589, 20.8708764 ], [ 71.366263, 20.8704853 ], [ 71.3661186, 20.8699726 ], [ 71.3666661, 20.869965 ], [ 71.366658, 20.8694504 ], [ 71.3682945, 20.8690412 ], [ 71.3690955, 20.8677433 ], [ 71.3701906, 20.8677282 ], [ 71.3704603, 20.8674672 ], [ 71.3721027, 20.8674443 ], [ 71.3723724, 20.8671833 ], [ 71.3745544, 20.8666382 ], [ 71.3746888, 20.8665082 ], [ 71.3749464, 20.8654751 ], [ 71.3756211, 20.8648219 ], [ 71.3761645, 20.8645572 ], [ 71.3769857, 20.8645456 ], [ 71.3775414, 20.8650527 ], [ 71.377815, 20.8650489 ], [ 71.3783584, 20.864784 ], [ 71.3799968, 20.8645039 ], [ 71.3802726, 20.8646292 ], [ 71.3802645, 20.8641145 ], [ 71.3810857, 20.864103 ], [ 71.3811613, 20.8602417 ], [ 71.3810169, 20.859729 ], [ 71.3815642, 20.8597214 ], [ 71.3816926, 20.8592049 ], [ 71.3818279, 20.8590739 ], [ 71.3831966, 20.8590548 ], [ 71.3834743, 20.8593082 ], [ 71.3847564, 20.8597645 ], [ 71.3848532, 20.8599329 ], [ 71.3866846, 20.8605097 ], [ 71.3867816, 20.8606781 ], [ 71.3872363, 20.8607594 ], [ 71.3873331, 20.8609278 ], [ 71.3876067, 20.860924 ], [ 71.3876028, 20.8606666 ], [ 71.3873249, 20.8604131 ], [ 71.3868693, 20.8603311 ], [ 71.3864956, 20.85991 ], [ 71.3849409, 20.8595859 ], [ 71.3842894, 20.8589113 ], [ 71.3831906, 20.8586694 ], [ 71.3831864, 20.858412 ], [ 71.3837339, 20.8584045 ], [ 71.383448, 20.8576364 ], [ 71.3828986, 20.8575148 ], [ 71.3823429, 20.8570079 ], [ 71.3806965, 20.8567736 ], [ 71.380145, 20.8565237 ], [ 71.3787763, 20.8565428 ], [ 71.3785068, 20.856804 ], [ 71.3765905, 20.8568306 ], [ 71.3743887, 20.856089 ], [ 71.3735593, 20.8555859 ], [ 71.3713635, 20.8552308 ], [ 71.3712182, 20.854718 ], [ 71.3707999, 20.8542092 ], [ 71.3697111, 20.8546097 ], [ 71.3691617, 20.8544891 ], [ 71.3691535, 20.8539745 ], [ 71.3680526, 20.8536033 ], [ 71.3672314, 20.8536146 ], [ 71.3666759, 20.8531077 ], [ 71.3661265, 20.852987 ], [ 71.3661144, 20.8522151 ], [ 71.3652932, 20.8522264 ], [ 71.3653012, 20.8527411 ], [ 71.3647538, 20.8527486 ], [ 71.3647617, 20.8532633 ], [ 71.3653093, 20.8532557 ], [ 71.3650517, 20.8542886 ], [ 71.3639547, 20.8541746 ], [ 71.3636829, 20.8543075 ], [ 71.363675, 20.853793 ], [ 71.3634032, 20.853925 ], [ 71.3628538, 20.8538044 ], [ 71.362568, 20.8530363 ], [ 71.3614671, 20.8526649 ], [ 71.3609196, 20.8526725 ], [ 71.3598328, 20.8532022 ], [ 71.359559, 20.853206 ], [ 71.3587279, 20.8525744 ], [ 71.3587158, 20.8518025 ], [ 71.3581664, 20.851681 ], [ 71.3578886, 20.8514275 ], [ 71.3548736, 20.8512117 ], [ 71.3545958, 20.850958 ], [ 71.3540485, 20.8509656 ], [ 71.3537767, 20.8510985 ], [ 71.3539171, 20.851354 ], [ 71.3539251, 20.8518685 ], [ 71.3536595, 20.8523869 ], [ 71.3529876, 20.8531682 ], [ 71.351621, 20.8533152 ], [ 71.3513452, 20.8531907 ], [ 71.3514577, 20.8516451 ], [ 71.3507538, 20.850368 ], [ 71.3496589, 20.8503829 ], [ 71.3494051, 20.8516732 ], [ 71.3483102, 20.8516883 ], [ 71.3480485, 20.852464 ], [ 71.345583, 20.8523685 ], [ 71.3444762, 20.8516118 ], [ 71.3433811, 20.8516267 ], [ 71.3422764, 20.8509989 ], [ 71.3422683, 20.8504842 ], [ 71.341499735937504, 20.850404316426765 ], [ 71.3411715, 20.8503702 ], [ 71.3403443, 20.8499958 ], [ 71.3400587, 20.8492277 ], [ 71.3395132, 20.8493634 ], [ 71.3392356, 20.8491098 ], [ 71.3386881, 20.8491174 ], [ 71.3378748, 20.8496432 ], [ 71.3370536, 20.8496543 ], [ 71.336776, 20.8494009 ], [ 71.3362286, 20.8494082 ], [ 71.3359587, 20.8496692 ], [ 71.335685, 20.849673 ], [ 71.3343046, 20.8489199 ], [ 71.3334834, 20.848931 ], [ 71.3332076, 20.8488065 ], [ 71.3331957, 20.8480346 ], [ 71.3309961, 20.8474207 ], [ 71.3307183, 20.8471671 ], [ 71.3298973, 20.8471784 ], [ 71.329084, 20.847704 ], [ 71.3274397, 20.8475982 ], [ 71.3274318, 20.8470837 ], [ 71.3233278, 20.8472676 ], [ 71.3219514, 20.8467715 ], [ 71.3203071, 20.8466657 ], [ 71.3200175, 20.8456401 ], [ 71.3194702, 20.8456475 ], [ 71.3194622, 20.8451329 ], [ 71.3189128, 20.8450112 ], [ 71.3178022, 20.8439968 ], [ 71.3155947, 20.842869 ], [ 71.3156027, 20.8433837 ], [ 71.3150532, 20.843262 ], [ 71.3142241, 20.8427585 ], [ 71.3136688, 20.8422512 ], [ 71.3128399, 20.8417477 ], [ 71.3120109, 20.8412442 ], [ 71.3100831, 20.840498 ], [ 71.3092619, 20.8405092 ], [ 71.3078856, 20.840013 ], [ 71.3070565, 20.8395094 ], [ 71.3056762, 20.838756 ], [ 71.3048531, 20.8386388 ], [ 71.3042821, 20.8371023 ], [ 71.3037367, 20.8372378 ], [ 71.303467, 20.8374988 ], [ 71.3029196, 20.8375062 ], [ 71.3018168, 20.8370062 ], [ 71.3009937, 20.8368891 ], [ 71.3007083, 20.8361208 ], [ 71.2987905, 20.8360174 ], [ 71.2979654, 20.8357711 ], [ 71.2976877, 20.8355175 ], [ 71.2968667, 20.8355286 ], [ 71.296591, 20.8354041 ], [ 71.2963018, 20.8343784 ], [ 71.2954825, 20.8345177 ], [ 71.2952128, 20.8347787 ], [ 71.2949391, 20.8347823 ], [ 71.2941062, 20.8340214 ], [ 71.2935569, 20.8339004 ], [ 71.2934118, 20.8333877 ], [ 71.2931342, 20.833134 ], [ 71.292837, 20.8315939 ], [ 71.2924192, 20.8310847 ], [ 71.2915961, 20.8309666 ], [ 71.2913186, 20.8307129 ], [ 71.2893988, 20.8304812 ], [ 71.2882923, 20.8297239 ], [ 71.2871937, 20.8294812 ], [ 71.2869161, 20.8292276 ], [ 71.2860911, 20.8289811 ], [ 71.2849847, 20.8282238 ], [ 71.2844373, 20.8282312 ], [ 71.283882, 20.8277239 ], [ 71.2830572, 20.8274774 ], [ 71.282236, 20.8274884 ], [ 71.2819663, 20.8277494 ], [ 71.2814209, 20.8278859 ], [ 71.2817061, 20.8286541 ], [ 71.2811606, 20.8287897 ], [ 71.2808909, 20.8290505 ], [ 71.2800697, 20.8290614 ], [ 71.2792391, 20.8284296 ], [ 71.2789537, 20.8276613 ], [ 71.2781327, 20.8276721 ], [ 71.2781209, 20.8269002 ], [ 71.277296, 20.8266538 ], [ 71.2770107, 20.8258855 ], [ 71.276739, 20.8260174 ], [ 71.275918, 20.8260282 ], [ 71.2748134, 20.8253999 ], [ 71.2746685, 20.8248872 ], [ 71.2731404, 20.8233633 ], [ 71.2712264, 20.8235168 ], [ 71.2706772, 20.8233958 ], [ 71.2706694, 20.8228811 ], [ 71.2703976, 20.8230131 ], [ 71.2676609, 20.8230494 ], [ 71.2668301, 20.8224173 ], [ 71.2668225, 20.8219027 ], [ 71.2662731, 20.8217808 ], [ 71.2659956, 20.8215271 ], [ 71.2646195, 20.8210306 ], [ 71.2637983, 20.8210414 ], [ 71.2635228, 20.8209169 ], [ 71.2632298, 20.8196339 ], [ 71.2626825, 20.8196411 ], [ 71.2623973, 20.8188728 ], [ 71.2621255, 20.8190046 ], [ 71.2615781, 20.8190117 ], [ 71.2607456, 20.8182506 ], [ 71.2599208, 20.8180042 ], [ 71.2588106, 20.8169893 ], [ 71.2582595, 20.8167392 ], [ 71.2577121, 20.8167464 ], [ 71.2574345, 20.8164928 ], [ 71.2557887, 20.8162571 ], [ 71.2546863, 20.8157568 ], [ 71.2516643, 20.8150244 ], [ 71.2502844, 20.8142703 ], [ 71.2497371, 20.8142775 ], [ 71.2489085, 20.8137736 ], [ 71.2478138, 20.813788 ], [ 71.2467095, 20.8131596 ], [ 71.246702, 20.8126449 ], [ 71.2458809, 20.8126557 ], [ 71.2458885, 20.8131703 ], [ 71.2447844, 20.812541 ], [ 71.2445107, 20.8125445 ], [ 71.2439709, 20.8130664 ], [ 71.2417759, 20.8127094 ], [ 71.2417681, 20.8121947 ], [ 71.2409452, 20.8120764 ], [ 71.2398543, 20.812348 ], [ 71.238484, 20.8122376 ], [ 71.2383353, 20.8114674 ], [ 71.2376402, 20.8107044 ], [ 71.236268, 20.810465 ], [ 71.2359526, 20.8076379 ], [ 71.234856, 20.8075232 ], [ 71.234303, 20.8071448 ], [ 71.2342954, 20.8066302 ], [ 71.2337481, 20.8066372 ], [ 71.2337405, 20.8061225 ], [ 71.2331932, 20.8061297 ], [ 71.2329082, 20.8053612 ], [ 71.2320834, 20.8051146 ], [ 71.2320758, 20.8045999 ], [ 71.2312586, 20.8048679 ], [ 71.2309964, 20.8056436 ], [ 71.2301735, 20.8055251 ], [ 71.2296186, 20.8050176 ], [ 71.2287919, 20.8046426 ], [ 71.2287844, 20.804128 ], [ 71.2252247, 20.8040452 ], [ 71.2244001, 20.8037986 ], [ 71.2205687, 20.8038481 ], [ 71.2191968, 20.8036084 ], [ 71.2180945, 20.803108 ], [ 71.2172716, 20.8029904 ], [ 71.2172641, 20.8024758 ], [ 71.215354, 20.8028861 ], [ 71.2137009, 20.8021354 ], [ 71.2128798, 20.802146 ], [ 71.2106831, 20.8016595 ], [ 71.2095735, 20.8006443 ], [ 71.2068163, 20.7992646 ], [ 71.2066714, 20.7987517 ], [ 71.2058392, 20.7979904 ], [ 71.2052807, 20.7972253 ], [ 71.2051369, 20.7967124 ], [ 71.2045895, 20.7967196 ], [ 71.2045672, 20.7951754 ], [ 71.2037481, 20.7953144 ], [ 71.2032064, 20.7957077 ], [ 71.2029477, 20.7967406 ], [ 71.203495, 20.7967336 ], [ 71.2040685, 20.7985279 ], [ 71.2046177, 20.7986491 ], [ 71.2050333, 20.7990303 ], [ 71.2051781, 20.799543 ], [ 71.2062764, 20.7997863 ], [ 71.2062839, 20.8003009 ], [ 71.2068332, 20.8004221 ], [ 71.2075336, 20.8015718 ], [ 71.2083695, 20.8025905 ], [ 71.2085145, 20.8031034 ], [ 71.2098846, 20.803214 ], [ 71.2107131, 20.8037181 ], [ 71.2112605, 20.8037111 ], [ 71.2115304, 20.8034502 ], [ 71.2123514, 20.8034397 ], [ 71.2131798, 20.8039437 ], [ 71.213729, 20.8040656 ], [ 71.2137215, 20.803551 ], [ 71.2145519, 20.8041834 ], [ 71.2152412, 20.804561 ], [ 71.2153862, 20.8050738 ], [ 71.2162089, 20.8051915 ], [ 71.216393, 20.8054871 ], [ 71.2162164, 20.8057061 ], [ 71.2166396, 20.8066018 ], [ 71.2169171, 20.8068556 ], [ 71.2176224, 20.8082616 ], [ 71.2195457, 20.8087515 ], [ 71.2222824, 20.8087162 ], [ 71.2229756, 20.809351 ], [ 71.2231204, 20.809864 ], [ 71.2236678, 20.8098568 ], [ 71.2239679, 20.8116545 ], [ 71.2245152, 20.8116474 ], [ 71.2246629, 20.8124175 ], [ 71.2248021, 20.812544 ], [ 71.2253514, 20.8126661 ], [ 71.2254952, 20.813179 ], [ 71.2256345, 20.8133053 ], [ 71.2261837, 20.8134274 ], [ 71.2263126, 20.812911 ], [ 71.226448, 20.81278 ], [ 71.2272671, 20.8126411 ], [ 71.2272709, 20.8128985 ], [ 71.2267235, 20.8129055 ], [ 71.2267311, 20.8134202 ], [ 71.2275502, 20.8132805 ], [ 71.2278201, 20.8130195 ], [ 71.2283693, 20.8131416 ], [ 71.2282208, 20.8123714 ], [ 71.2283561, 20.8122404 ], [ 71.2289016, 20.8121051 ], [ 71.2287681, 20.8123642 ], [ 71.2287757, 20.8128789 ], [ 71.2290531, 20.8131327 ], [ 71.2290569, 20.8133899 ], [ 71.2285209, 20.8141692 ], [ 71.2283922, 20.8146855 ], [ 71.2264763, 20.8147105 ], [ 71.2268789, 20.8141905 ], [ 71.2267349, 20.8136776 ], [ 71.2264612, 20.8136812 ], [ 71.2263771, 20.8143659 ], [ 71.2261989, 20.8144567 ], [ 71.2263467, 20.8152268 ], [ 71.2266241, 20.8154807 ], [ 71.2266354, 20.8162527 ], [ 71.225963, 20.8170335 ], [ 71.22541, 20.8166542 ], [ 71.2248626, 20.8166613 ], [ 71.2245927, 20.8169222 ], [ 71.2240473, 20.8170584 ], [ 71.2240397, 20.8165438 ], [ 71.2245871, 20.8165366 ], [ 71.2248456, 20.8155037 ], [ 71.2242964, 20.8153818 ], [ 71.2240189, 20.815128 ], [ 71.2234697, 20.8150068 ], [ 71.2236362, 20.8170637 ], [ 71.2237753, 20.8171902 ], [ 71.2245984, 20.8173087 ], [ 71.2246097, 20.8180805 ], [ 71.2254308, 20.81807 ], [ 71.2251873, 20.8201321 ], [ 71.22464, 20.8201391 ], [ 71.2245101, 20.8206557 ], [ 71.2239704, 20.8211773 ], [ 71.2242591, 20.8222032 ], [ 71.2242667, 20.8227178 ], [ 71.2244077, 20.8229734 ], [ 71.2238604, 20.8229804 ], [ 71.2238679, 20.823495 ], [ 71.2234124, 20.8234124 ], [ 71.2234493, 20.8229859 ], [ 71.2238528, 20.8224657 ], [ 71.2233055, 20.8224729 ], [ 71.2235602, 20.8211826 ], [ 71.2227354, 20.820936 ], [ 71.2225409, 20.8199966 ], [ 71.2229012, 20.8199919 ], [ 71.2229978, 20.8201605 ], [ 71.2232714, 20.8201569 ], [ 71.2232677, 20.8198997 ], [ 71.2230858, 20.8198135 ], [ 71.2229864, 20.8193884 ], [ 71.2224391, 20.8193956 ], [ 71.2223512, 20.8198229 ], [ 71.222173, 20.8199138 ], [ 71.2221654, 20.8193992 ], [ 71.2213461, 20.8195379 ], [ 71.2208963, 20.8198418 ], [ 71.2207969, 20.819417 ], [ 71.2195241, 20.8196022 ], [ 71.219151, 20.8191809 ], [ 71.2202457, 20.8191667 ], [ 71.2199607, 20.8183983 ], [ 71.218866, 20.8184124 ], [ 71.2188736, 20.8189271 ], [ 71.217505, 20.8189448 ], [ 71.2177863, 20.8194559 ], [ 71.2169634, 20.8193374 ], [ 71.2158611, 20.8188369 ], [ 71.2153136, 20.8188439 ], [ 71.215038, 20.8187194 ], [ 71.2150342, 20.8184619 ], [ 71.2183225, 20.8186768 ], [ 71.2183149, 20.8181622 ], [ 71.2207723, 20.8177437 ], [ 71.2209069, 20.8176139 ], [ 71.2214466, 20.8170921 ], [ 71.2215651, 20.8158037 ], [ 71.2210178, 20.8158108 ], [ 71.2210102, 20.8152962 ], [ 71.2199118, 20.815053 ], [ 71.2194856, 20.814029 ], [ 71.2189307, 20.8135215 ], [ 71.2185094, 20.8127547 ], [ 71.2179602, 20.8126326 ], [ 71.2171316, 20.8121287 ], [ 71.2165767, 20.8116211 ], [ 71.2160293, 20.8116281 ], [ 71.2143665, 20.8102346 ], [ 71.2143591, 20.8097199 ], [ 71.2127114, 20.8093546 ], [ 71.212434, 20.8091008 ], [ 71.2116111, 20.8089832 ], [ 71.211596, 20.8079539 ], [ 71.2104996, 20.8078388 ], [ 71.2099539, 20.8079751 ], [ 71.2098354, 20.8092635 ], [ 71.2099766, 20.809519 ], [ 71.209431, 20.8096544 ], [ 71.2047674, 20.8089422 ], [ 71.2023025, 20.8088456 ], [ 71.2022949, 20.808331 ], [ 71.2017475, 20.808338 ], [ 71.2017551, 20.8088526 ], [ 71.201204, 20.8086024 ], [ 71.2010592, 20.8080894 ], [ 71.2006417, 20.8075801 ], [ 71.1992769, 20.8078551 ], [ 71.1992845, 20.8083697 ], [ 71.1984635, 20.8083801 ], [ 71.1984559, 20.8078655 ], [ 71.199007, 20.8081159 ], [ 71.199262, 20.8068256 ], [ 71.1987184, 20.80709 ], [ 71.198726, 20.8076047 ], [ 71.1984523, 20.8076082 ], [ 71.1984448, 20.8070936 ], [ 71.198173, 20.8072253 ], [ 71.1970764, 20.807111 ], [ 71.1970838, 20.8076258 ], [ 71.1965364, 20.8076328 ], [ 71.196544, 20.8081475 ], [ 71.1962703, 20.8081509 ], [ 71.1959817, 20.8071252 ], [ 71.1954325, 20.8070031 ], [ 71.195155, 20.8067492 ], [ 71.194606, 20.8066279 ], [ 71.1958182, 20.8053255 ], [ 71.1956746, 20.8048126 ], [ 71.1954009, 20.8048161 ], [ 71.1954083, 20.8053308 ], [ 71.1943174, 20.8056022 ], [ 71.1943248, 20.8061168 ], [ 71.1929564, 20.8061342 ], [ 71.1930891, 20.8058753 ], [ 71.1930284, 20.8046767 ], [ 71.1937551, 20.8045799 ], [ 71.1934703, 20.8038112 ], [ 71.1926455, 20.8035644 ], [ 71.1926381, 20.8030498 ], [ 71.1918209, 20.8033176 ], [ 71.1915527, 20.8037067 ], [ 71.1912809, 20.8038394 ], [ 71.1914024, 20.8028082 ], [ 71.1916723, 20.8025474 ], [ 71.1920685, 20.8015128 ], [ 71.1926158, 20.8015058 ], [ 71.192471, 20.8009929 ], [ 71.1920535, 20.8004835 ], [ 71.1893095, 20.8000038 ], [ 71.1883809, 20.8020747 ], [ 71.1878447, 20.8028536 ], [ 71.1874421, 20.8033735 ], [ 71.1858075, 20.8039091 ], [ 71.1852824, 20.8054601 ], [ 71.1847313, 20.8052098 ], [ 71.1848566, 20.8044361 ], [ 71.1851265, 20.8041752 ], [ 71.1851006, 20.8023739 ], [ 71.1849606, 20.8021184 ], [ 71.1811256, 20.8019097 ], [ 71.180837, 20.8008838 ], [ 71.1778287, 20.8010503 ], [ 71.1761902, 20.8013285 ], [ 71.1759148, 20.8012038 ], [ 71.1759222, 20.8017184 ], [ 71.1748292, 20.8018606 ], [ 71.1740158, 20.8023856 ], [ 71.1729228, 20.8025287 ], [ 71.1727744, 20.8017583 ], [ 71.1720797, 20.8009949 ], [ 71.1739935, 20.8008417 ], [ 71.1748071, 20.8003166 ], [ 71.1756208, 20.7997914 ], [ 71.1761662, 20.7996563 ], [ 71.1761588, 20.7991416 ], [ 71.1767062, 20.7991346 ], [ 71.1767026, 20.7988774 ], [ 71.1761552, 20.7988842 ], [ 71.1761515, 20.798627 ], [ 71.1772462, 20.798613 ], [ 71.1763992, 20.7968222 ], [ 71.1744856, 20.7969747 ], [ 71.1739309, 20.7964669 ], [ 71.1728324, 20.7962235 ], [ 71.1722779, 20.7957156 ], [ 71.1695395, 20.7956221 ], [ 71.1694095, 20.7961386 ], [ 71.1691396, 20.7963994 ], [ 71.1687442, 20.7974338 ], [ 71.1681968, 20.7974408 ], [ 71.1683407, 20.7979537 ], [ 71.168208, 20.7982129 ], [ 71.1680262, 20.7981265 ], [ 71.167901, 20.7959003 ], [ 71.1670802, 20.7959107 ], [ 71.1670764, 20.7956532 ], [ 71.1695264, 20.7947209 ], [ 71.1711685, 20.7947003 ], [ 71.1714384, 20.7944395 ], [ 71.1728067, 20.7944221 ], [ 71.1736313, 20.7946691 ], [ 71.1741861, 20.7951768 ], [ 71.1747353, 20.7952989 ], [ 71.1749904, 20.7940087 ], [ 71.1744412, 20.7938867 ], [ 71.1741639, 20.7936328 ], [ 71.1714219, 20.7932819 ], [ 71.1714293, 20.7937965 ], [ 71.1697873, 20.7938173 ], [ 71.1697799, 20.7933026 ], [ 71.1708782, 20.7935461 ], [ 71.1708708, 20.7930314 ], [ 71.1714182, 20.7930244 ], [ 71.1714072, 20.7922526 ], [ 71.1708598, 20.7922594 ], [ 71.1709852, 20.7914858 ], [ 71.1713868, 20.7908368 ], [ 71.1716604, 20.7908332 ], [ 71.1717988, 20.7909606 ], [ 71.1724962, 20.7918523 ], [ 71.1738644, 20.7918349 ], [ 71.1746965, 20.7925965 ], [ 71.1757948, 20.79284 ], [ 71.1769005, 20.7935981 ], [ 71.1782798, 20.7943527 ], [ 71.1791082, 20.794857 ], [ 71.1799328, 20.7951038 ], [ 71.1804894, 20.7957407 ], [ 71.1799421, 20.7957475 ], [ 71.1807759, 20.7966374 ], [ 71.1815988, 20.7967561 ], [ 71.181595, 20.7964988 ], [ 71.1810477, 20.7965056 ], [ 71.1810403, 20.795991 ], [ 71.1818632, 20.7961087 ], [ 71.1829653, 20.7966096 ], [ 71.183788, 20.7967283 ], [ 71.1839318, 20.7972412 ], [ 71.1848957, 20.7976145 ], [ 71.1850339, 20.7977419 ], [ 71.1851787, 20.7982548 ], [ 71.1854505, 20.7981221 ], [ 71.189829, 20.7980664 ], [ 71.1902444, 20.7984476 ], [ 71.1908067, 20.7994699 ], [ 71.1912214, 20.799722 ], [ 71.1913503, 20.7992055 ], [ 71.1917576, 20.798943 ], [ 71.1917649, 20.7994576 ], [ 71.1923142, 20.799579 ], [ 71.1931501, 20.8005977 ], [ 71.194524, 20.8009666 ], [ 71.1942541, 20.8012274 ], [ 71.1942577, 20.8014848 ], [ 71.1945313, 20.8014812 ], [ 71.1946221, 20.8013104 ], [ 71.1953488, 20.8012134 ], [ 71.1953524, 20.8014708 ], [ 71.194805, 20.8014778 ], [ 71.194537, 20.8018668 ], [ 71.1948162, 20.8022497 ], [ 71.1950898, 20.8022463 ], [ 71.1950862, 20.8019889 ], [ 71.1949044, 20.8019027 ], [ 71.1949033, 20.8018214 ], [ 71.1961826, 20.8021032 ], [ 71.1968757, 20.8027383 ], [ 71.1974342, 20.8035032 ], [ 71.197579, 20.8040161 ], [ 71.1981208, 20.8036226 ], [ 71.198668, 20.8036156 ], [ 71.1992191, 20.8038659 ], [ 71.1997664, 20.8038589 ], [ 71.2000363, 20.803598 ], [ 71.20031, 20.8035945 ], [ 71.2005875, 20.8038483 ], [ 71.203877, 20.8041926 ], [ 71.2038696, 20.803678 ], [ 71.2055079, 20.8033996 ], [ 71.2057629, 20.8021093 ], [ 71.2049381, 20.8018626 ], [ 71.2047895, 20.8010923 ], [ 71.2045121, 20.8008385 ], [ 71.2043682, 20.8003257 ], [ 71.2038211, 20.8003327 ], [ 71.2031138, 20.7987974 ], [ 71.2028366, 20.7985436 ], [ 71.2022631, 20.7967494 ], [ 71.2022556, 20.7962348 ], [ 71.2027916, 20.7954557 ], [ 71.2029178, 20.794682 ], [ 71.206747, 20.7945036 ], [ 71.2070225, 20.7946292 ], [ 71.2072849, 20.7938536 ], [ 71.206464, 20.7938642 ], [ 71.2065965, 20.7936052 ], [ 71.2065892, 20.7930904 ], [ 71.2064489, 20.7928349 ], [ 71.2045317, 20.7927304 ], [ 71.2039768, 20.7922227 ], [ 71.2034278, 20.7921015 ], [ 71.2031427, 20.7913331 ], [ 71.2025956, 20.7913401 ], [ 71.2025769, 20.7900535 ], [ 71.2031242, 20.7900466 ], [ 71.2028392, 20.7892781 ], [ 71.2014692, 20.7891664 ], [ 71.2011919, 20.7889126 ], [ 71.1998237, 20.7889301 ], [ 71.1992726, 20.7886799 ], [ 71.1981781, 20.7886939 ], [ 71.1962476, 20.7876892 ], [ 71.1951531, 20.7877031 ], [ 71.1945984, 20.7871955 ], [ 71.19377, 20.7866912 ], [ 71.1926718, 20.786448 ], [ 71.1885618, 20.7861148 ], [ 71.1885542, 20.7856001 ], [ 71.1882805, 20.7856035 ], [ 71.1882881, 20.7861182 ], [ 71.1877389, 20.7859961 ], [ 71.1871842, 20.7854884 ], [ 71.1838876, 20.78463 ], [ 71.1838802, 20.7841154 ], [ 71.182231, 20.7836215 ], [ 71.1822384, 20.7841361 ], [ 71.1814083, 20.7835028 ], [ 71.1775756, 20.7834232 ], [ 71.1775682, 20.7829086 ], [ 71.1701745, 20.7826158 ], [ 71.1677081, 20.7823896 ], [ 71.1668835, 20.7821426 ], [ 71.1660626, 20.782153 ], [ 71.1646871, 20.7816555 ], [ 71.1641399, 20.7816625 ], [ 71.1627644, 20.7811651 ], [ 71.1622171, 20.7811719 ], [ 71.1597398, 20.7801736 ], [ 71.1594624, 20.7799197 ], [ 71.158087, 20.7794221 ], [ 71.1569778, 20.7784066 ], [ 71.1553269, 20.7777842 ], [ 71.1553197, 20.7772696 ], [ 71.1544951, 20.7770226 ], [ 71.1544877, 20.7765079 ], [ 71.1533896, 20.7762643 ], [ 71.153245, 20.7757513 ], [ 71.1529678, 20.7754975 ], [ 71.1525469, 20.7747306 ], [ 71.1517223, 20.7744835 ], [ 71.1514305, 20.7732002 ], [ 71.1508833, 20.773207 ], [ 71.1504505, 20.7716682 ], [ 71.1501732, 20.7714144 ], [ 71.1498449, 20.7675576 ], [ 71.1495677, 20.7673036 ], [ 71.1495531, 20.7662743 ], [ 71.149125, 20.7649927 ], [ 71.1472025, 20.7645021 ], [ 71.1473498, 20.7652724 ], [ 71.1477697, 20.7659101 ], [ 71.1483188, 20.7660324 ], [ 71.1480596, 20.7670651 ], [ 71.1472426, 20.7673327 ], [ 71.1473679, 20.7665591 ], [ 71.147087, 20.7660477 ], [ 71.1466444, 20.7637368 ], [ 71.1488241, 20.7630657 ], [ 71.149094, 20.7628048 ], [ 71.149913, 20.7626665 ], [ 71.1499058, 20.7621517 ], [ 71.1493586, 20.7621587 ], [ 71.1494913, 20.7618995 ], [ 71.1494839, 20.7613849 ], [ 71.1490668, 20.7608753 ], [ 71.1482424, 20.7606283 ], [ 71.1487605, 20.7585627 ], [ 71.1465681, 20.7583327 ], [ 71.1465752, 20.7588474 ], [ 71.1457508, 20.7586004 ], [ 71.1457436, 20.7580855 ], [ 71.1454719, 20.7582173 ], [ 71.1435567, 20.7582411 ], [ 71.1421814, 20.7577434 ], [ 71.1413534, 20.757239 ], [ 71.1399854, 20.7572562 ], [ 71.137793, 20.757026 ], [ 71.1369687, 20.756779 ], [ 71.1347799, 20.7568062 ], [ 71.132872, 20.7573446 ], [ 71.1312303, 20.7573649 ], [ 71.1304169, 20.7578899 ], [ 71.1298697, 20.7578965 ], [ 71.1287699, 20.7575246 ], [ 71.1287771, 20.7580392 ], [ 71.1279544, 20.7579203 ], [ 71.1274019, 20.7575416 ], [ 71.1272574, 20.7570286 ], [ 71.1268402, 20.7565189 ], [ 71.1260177, 20.7564 ], [ 71.1251878, 20.7557672 ], [ 71.1249, 20.7547412 ], [ 71.1246282, 20.7548729 ], [ 71.1235301, 20.7546291 ], [ 71.1218886, 20.7546493 ], [ 71.1213379, 20.7543987 ], [ 71.1207924, 20.7545346 ], [ 71.1207996, 20.7550492 ], [ 71.1197053, 20.7550628 ], [ 71.1197161, 20.7558349 ], [ 71.1194407, 20.755709 ], [ 71.1175254, 20.7557327 ], [ 71.1167153, 20.7565149 ], [ 71.1131729, 20.7575881 ], [ 71.1066101, 20.757926 ], [ 71.1060593, 20.7576754 ], [ 71.1046913, 20.7576922 ], [ 71.1038669, 20.7574448 ], [ 71.1027726, 20.7574582 ], [ 71.0994823, 20.7569836 ], [ 71.0992069, 20.7568589 ], [ 71.0992139, 20.7573736 ], [ 71.095659, 20.7575452 ], [ 71.0953889, 20.7578058 ], [ 71.0932001, 20.7578324 ], [ 71.0915513, 20.7573378 ], [ 71.0910041, 20.7573444 ], [ 71.0907271, 20.7570904 ], [ 71.0877032, 20.7560976 ], [ 71.0871561, 20.7561042 ], [ 71.0849567, 20.7553588 ], [ 71.0844024, 20.7548508 ], [ 71.0830274, 20.7543526 ], [ 71.0821977, 20.7537196 ], [ 71.0820535, 20.7532067 ], [ 71.0816363, 20.7526969 ], [ 71.0810875, 20.7525745 ], [ 71.0794249, 20.7510502 ], [ 71.0788758, 20.7509285 ], [ 71.0783075, 20.749391 ], [ 71.0777603, 20.7493978 ], [ 71.0768588, 20.7434885 ], [ 71.0779512, 20.7433462 ], [ 71.0784914, 20.7428247 ], [ 71.0791697, 20.7424308 ], [ 71.0795664, 20.7413966 ], [ 71.0806571, 20.741126 ], [ 71.080089, 20.7395885 ], [ 71.0809096, 20.7395784 ], [ 71.0807652, 20.7390655 ], [ 71.0800712, 20.7383018 ], [ 71.0789718, 20.7379285 ], [ 71.078144, 20.7374237 ], [ 71.0767726, 20.7371829 ], [ 71.0764955, 20.7369289 ], [ 71.0754012, 20.7369421 ], [ 71.0751242, 20.7366879 ], [ 71.0742999, 20.7364405 ], [ 71.0740229, 20.7361865 ], [ 71.0732022, 20.7361963 ], [ 71.0721009, 20.7356949 ], [ 71.0704596, 20.7357145 ], [ 71.0699159, 20.7359786 ], [ 71.0696424, 20.7359818 ], [ 71.0693653, 20.7357278 ], [ 71.0685445, 20.7357376 ], [ 71.0680009, 20.7360016 ], [ 71.0666348, 20.7361472 ], [ 71.0666279, 20.7356325 ], [ 71.0652635, 20.7359062 ], [ 71.0649724, 20.7346227 ], [ 71.0638764, 20.7345068 ], [ 71.0636046, 20.7346391 ], [ 71.0634884, 20.736185 ], [ 71.0633555, 20.7364439 ], [ 71.063134297656248, 20.736462583597906 ], [ 71.063134297656248, 20.736462583597909 ], [ 71.0598025, 20.736744 ], [ 71.0597957, 20.7362292 ], [ 71.0592467, 20.7361067 ], [ 71.0584156, 20.7353445 ], [ 71.0567742, 20.7353641 ], [ 71.0562217, 20.734985 ], [ 71.0562149, 20.7344703 ], [ 71.0553924, 20.7343509 ], [ 71.0545613, 20.7335887 ], [ 71.0534687, 20.733731 ], [ 71.0531813, 20.7327047 ], [ 71.0523589, 20.7325854 ], [ 71.0520818, 20.7323312 ], [ 71.0515347, 20.7323379 ], [ 71.0507037, 20.7315756 ], [ 71.0501529, 20.7313246 ], [ 71.0496059, 20.7313312 ], [ 71.0493289, 20.7310772 ], [ 71.04878, 20.7309555 ], [ 71.0490605, 20.7314669 ], [ 71.0460495, 20.7313736 ], [ 71.0457795, 20.7316342 ], [ 71.0449605, 20.7317731 ], [ 71.0450008, 20.7326309 ], [ 71.044656, 20.7335762 ], [ 71.0438369, 20.7345299 ], [ 71.0428152, 20.7350156 ], [ 71.0417502, 20.7352167 ], [ 71.038388, 20.7358337 ], [ 71.0355036, 20.7357494 ], [ 71.0336726, 20.736414 ], [ 71.0310127, 20.737109 ], [ 71.028805, 20.7378121 ], [ 71.0262459, 20.7383733 ], [ 71.0179081, 20.7387657 ], [ 71.0162702, 20.7391118 ], [ 71.0151742, 20.739155 ], [ 71.0134599, 20.7389851 ], [ 71.011997, 20.7386998 ], [ 71.0099802, 20.7383802 ], [ 71.0087765, 20.738158 ], [ 71.0072611, 20.7377164 ], [ 71.0052283, 20.7370639 ], [ 71.0039195, 20.7364712 ], [ 71.0028542, 20.7358139 ], [ 71.0020524, 20.7354951 ], [ 71.001225, 20.7349899 ], [ 71.000087, 20.734312 ], [ 70.9992964, 20.7339827 ], [ 70.9985849, 20.7334715 ], [ 70.9977123, 20.7329875 ], [ 70.9966193, 20.7323123 ], [ 70.9957096, 20.7317077 ], [ 70.9945778, 20.7311154 ], [ 70.9939156, 20.7305707 ], [ 70.993499, 20.7300606 ], [ 70.992898, 20.7293959 ], [ 70.9922136, 20.7286649 ], [ 70.9917578, 20.7279516 ], [ 70.9908525, 20.7264876 ], [ 70.9905869, 20.7258856 ], [ 70.989818, 20.7242894 ], [ 70.9896311, 20.7236899 ], [ 70.9894417, 20.723233 ], [ 70.9891289, 20.7227953 ], [ 70.9885609, 20.7222618 ], [ 70.9876964, 20.7217868 ], [ 70.9872531, 20.7215034 ], [ 70.9870295, 20.7214625 ], [ 70.9866068, 20.7217547 ], [ 70.986728, 20.7220561 ], [ 70.986414, 20.7224232 ], [ 70.9861956, 20.7226843 ], [ 70.9860825, 20.7229536 ], [ 70.9863092, 20.7232709 ], [ 70.9858948, 20.7239708 ], [ 70.9852946, 20.7247288 ], [ 70.9849424, 20.7249544 ], [ 70.9845383, 20.7250506 ], [ 70.9837453, 20.7250707 ], [ 70.9835467, 20.724841 ], [ 70.9831599, 20.725124 ], [ 70.983317, 20.7253688 ], [ 70.9830378, 20.7254341 ], [ 70.9829287, 20.7252913 ], [ 70.9828546, 20.7250996 ], [ 70.982795, 20.7248674 ], [ 70.9825573, 20.7248995 ], [ 70.9825972, 20.7250628 ], [ 70.9826583, 20.7252539 ], [ 70.9827856, 20.7254783 ], [ 70.982916, 20.7255868 ], [ 70.9836575, 20.7261335 ], [ 70.9843468, 20.7267113 ], [ 70.9857924, 20.7278587 ], [ 70.9857471, 20.7279193 ], [ 70.9858637, 20.7280223 ], [ 70.9858054, 20.7281192 ], [ 70.9861487, 20.7283858 ], [ 70.9862588, 20.7282404 ], [ 70.9872829, 20.729134 ], [ 70.9871189, 20.7295991 ], [ 70.9875224, 20.7298694 ], [ 70.9877928, 20.7294594 ], [ 70.9892178, 20.7300578 ], [ 70.989122, 20.7302397 ], [ 70.9893099, 20.7303367 ], [ 70.9894143, 20.7301624 ], [ 70.9906648, 20.7308143 ], [ 70.9922578, 20.7318378 ], [ 70.9925813, 20.7320818 ], [ 70.9928356, 20.7329221 ], [ 70.9932743, 20.7337952 ], [ 70.9938283, 20.7343036 ], [ 70.9943754, 20.7342972 ], [ 70.9949192, 20.7340336 ], [ 70.9954663, 20.7340271 ], [ 70.9958812, 20.7344089 ], [ 70.996304, 20.7353046 ], [ 70.9968528, 20.7354273 ], [ 70.9972796, 20.7367094 ], [ 70.9975565, 20.7369636 ], [ 70.9979876, 20.738503 ], [ 70.9974387, 20.7383802 ], [ 70.9966198, 20.7385189 ], [ 70.9968984, 20.7389013 ], [ 70.9977209, 20.7390209 ], [ 70.9978638, 20.739534 ], [ 70.9985535, 20.7399117 ], [ 70.9991074, 20.7404201 ], [ 71.0002051, 20.7406646 ], [ 71.000482, 20.7409188 ], [ 71.0029613, 20.742177 ], [ 71.0037821, 20.7421674 ], [ 71.004059, 20.7424216 ], [ 71.0054304, 20.7426631 ], [ 71.0057024, 20.7425316 ], [ 71.0055718, 20.7430479 ], [ 71.0053015, 20.7433086 ], [ 71.005172, 20.7438249 ], [ 71.0046266, 20.7439595 ], [ 71.0040845, 20.7443524 ], [ 71.0036939, 20.7459013 ], [ 71.0038447, 20.7469292 ], [ 71.0032975, 20.7469355 ], [ 71.0031739, 20.7479666 ], [ 71.0025073, 20.7492615 ], [ 71.0022337, 20.7492645 ], [ 71.0022269, 20.7487499 ], [ 71.001406, 20.7487595 ], [ 71.0013994, 20.7482447 ], [ 71.0016729, 20.7482415 ], [ 71.0013926, 20.74773 ], [ 71.0002981, 20.7477427 ], [ 71.0000381, 20.7487754 ], [ 70.9994875, 20.7485244 ], [ 70.9994707, 20.7472375 ], [ 70.9981025, 20.7472534 ], [ 70.9981127, 20.7480256 ], [ 70.997839, 20.7480286 ], [ 70.997695, 20.7475155 ], [ 70.9972785, 20.7470056 ], [ 70.9959071, 20.746764 ], [ 70.9959137, 20.7472789 ], [ 70.9953614, 20.7468988 ], [ 70.9945374, 20.7466508 ], [ 70.9942603, 20.7463966 ], [ 70.9901547, 20.7463161 ], [ 70.9901615, 20.7468308 ], [ 70.9896092, 20.7464507 ], [ 70.9893321, 20.7461965 ], [ 70.9876905, 20.7462154 ], [ 70.9854968, 20.7458551 ], [ 70.98549, 20.7453403 ], [ 70.9849428, 20.7453467 ], [ 70.9850759, 20.7450878 ], [ 70.9850657, 20.7443155 ], [ 70.984926, 20.7440598 ], [ 70.9843788, 20.7440661 ], [ 70.9838485, 20.7453592 ], [ 70.9827523, 20.7452428 ], [ 70.9822017, 20.7449918 ], [ 70.9813826, 20.7451303 ], [ 70.981376, 20.7446157 ], [ 70.9806504, 20.7447928 ], [ 70.9805518, 20.7443677 ], [ 70.9797309, 20.7443772 ], [ 70.9797378, 20.7448918 ], [ 70.9804656, 20.7449712 ], [ 70.9801543, 20.7454019 ], [ 70.9800247, 20.7459183 ], [ 70.9797512, 20.7459213 ], [ 70.9796072, 20.7454082 ], [ 70.9791906, 20.7448982 ], [ 70.9778292, 20.7454288 ], [ 70.9775423, 20.7444023 ], [ 70.9767215, 20.7444117 ], [ 70.9764578, 20.745187 ], [ 70.975909, 20.7450642 ], [ 70.9756321, 20.74481 ], [ 70.9737168, 20.7448319 ], [ 70.9728927, 20.7445839 ], [ 70.9687854, 20.7443738 ], [ 70.9682414, 20.7446374 ], [ 70.9665966, 20.7443987 ], [ 70.9663263, 20.7446593 ], [ 70.9655055, 20.7446686 ], [ 70.9645081, 20.7449782 ], [ 70.9646797, 20.7442925 ], [ 70.9638572, 20.7441727 ], [ 70.9635803, 20.7439185 ], [ 70.9583819, 20.7439778 ], [ 70.9578379, 20.7442413 ], [ 70.9548283, 20.7442757 ], [ 70.9545531, 20.7441505 ], [ 70.9545597, 20.7446652 ], [ 70.9504556, 20.7447119 ], [ 70.9504622, 20.7452265 ], [ 70.9490859, 20.7445983 ], [ 70.9471708, 20.7446198 ], [ 70.9460797, 20.7448897 ], [ 70.938422, 20.7452335 ], [ 70.9345834, 20.7446338 ], [ 70.9345736, 20.7438616 ], [ 70.9341183, 20.7437782 ], [ 70.9341099, 20.7440708 ], [ 70.9340207, 20.7440192 ], [ 70.9340296, 20.7441252 ], [ 70.9329334, 20.7440084 ], [ 70.9326631, 20.7442689 ], [ 70.932116, 20.7442749 ], [ 70.9312885, 20.7437693 ], [ 70.9307431, 20.7439047 ], [ 70.9308826, 20.7441606 ], [ 70.9307527, 20.7446769 ], [ 70.9299319, 20.744686 ], [ 70.9296486, 20.7439169 ], [ 70.9291014, 20.7439232 ], [ 70.9291145, 20.7449527 ], [ 70.9282952, 20.7450901 ], [ 70.9277546, 20.745611 ], [ 70.9269402, 20.7461349 ], [ 70.9258457, 20.7461471 ], [ 70.924481, 20.7464199 ], [ 70.9217352, 20.7456784 ], [ 70.9173557, 20.745599 ], [ 70.9170918, 20.7463743 ], [ 70.9143541, 20.7462757 ], [ 70.9132532, 20.7457729 ], [ 70.905312, 20.7453464 ], [ 70.902856, 20.7458884 ], [ 70.8984717, 20.7454221 ], [ 70.8979197, 20.7450424 ], [ 70.8979132, 20.7445278 ], [ 70.8992765, 20.7441262 ], [ 70.9006477, 20.7443683 ], [ 70.9066671, 20.7443017 ], [ 70.906944, 20.744556 ], [ 70.9088576, 20.7444066 ], [ 70.9089875, 20.7438903 ], [ 70.9091232, 20.7437597 ], [ 70.9096688, 20.7436253 ], [ 70.9096622, 20.7431105 ], [ 70.9113056, 20.7432205 ], [ 70.9140465, 20.7435766 ], [ 70.9137664, 20.7430649 ], [ 70.9121232, 20.742954 ], [ 70.9107454, 20.742197 ], [ 70.9099181, 20.7416915 ], [ 70.9069004, 20.7410819 ], [ 70.9068939, 20.7405671 ], [ 70.9063451, 20.7404441 ], [ 70.904961, 20.7391723 ], [ 70.903308, 20.73829 ], [ 70.9030249, 20.737521 ], [ 70.901652, 20.7371496 ], [ 70.9008248, 20.7366438 ], [ 70.9002776, 20.7366499 ], [ 70.9000007, 20.7363955 ], [ 70.8967065, 20.7355314 ], [ 70.8967129, 20.7360462 ], [ 70.8906825, 20.7352112 ], [ 70.890412, 20.7354717 ], [ 70.8882234, 20.7354957 ], [ 70.8852217, 20.7361727 ], [ 70.8849386, 20.7354034 ], [ 70.8843914, 20.7354095 ], [ 70.884385, 20.7348947 ], [ 70.883841, 20.7351581 ], [ 70.8838314, 20.7343859 ], [ 70.8832875, 20.7346493 ], [ 70.8832778, 20.7338771 ], [ 70.882457, 20.7338861 ], [ 70.8827259, 20.7334966 ], [ 70.8846394, 20.7333473 ], [ 70.8843595, 20.7328355 ], [ 70.8838108, 20.7327125 ], [ 70.8835339, 20.7324581 ], [ 70.8829868, 20.7324641 ], [ 70.8824443, 20.7328565 ], [ 70.8821612, 20.7320874 ], [ 70.8813389, 20.7319672 ], [ 70.8783324, 20.7322575 ], [ 70.8764158, 20.7321502 ], [ 70.8761263, 20.7308663 ], [ 70.8728384, 20.7305155 ], [ 70.8725649, 20.7305185 ], [ 70.8717473, 20.7307848 ], [ 70.870664, 20.7316979 ], [ 70.8704062, 20.7329878 ], [ 70.8698605, 20.733122 ], [ 70.8690476, 20.733775 ], [ 70.8689199, 20.7345486 ], [ 70.868379, 20.7350693 ], [ 70.8679786, 20.7358459 ], [ 70.8674313, 20.7358519 ], [ 70.8670331, 20.736886 ], [ 70.8662249, 20.7379243 ], [ 70.8663686, 20.7384376 ], [ 70.8658214, 20.7384435 ], [ 70.8656904, 20.7389599 ], [ 70.86542, 20.7392201 ], [ 70.8652899, 20.7397365 ], [ 70.8647426, 20.7397423 ], [ 70.8646116, 20.7402587 ], [ 70.8638035, 20.741297 ], [ 70.863835, 20.743871 ], [ 70.8644043, 20.7456667 ], [ 70.8646812, 20.7459211 ], [ 70.8648373, 20.7474639 ], [ 70.8653846, 20.747458 ], [ 70.8652536, 20.7479742 ], [ 70.8654192, 20.7502893 ], [ 70.8643247, 20.7503012 ], [ 70.8641937, 20.7508173 ], [ 70.8636528, 20.751338 ], [ 70.8636749, 20.7531398 ], [ 70.8640905, 20.753521 ], [ 70.8646379, 20.7535151 ], [ 70.8649099, 20.7533838 ], [ 70.8650558, 20.7541545 ], [ 70.8649257, 20.7546709 ], [ 70.8643784, 20.7546767 ], [ 70.8641144, 20.7554518 ], [ 70.8638375, 20.7551974 ], [ 70.8635638, 20.7552004 ], [ 70.863567, 20.7554579 ], [ 70.8638437, 20.7557122 ], [ 70.8643911, 20.7557062 ], [ 70.8643973, 20.756221 ], [ 70.8649446, 20.7562152 ], [ 70.8646931, 20.7580197 ], [ 70.8608605, 20.7579322 ], [ 70.8605853, 20.7578069 ], [ 70.8607122, 20.7570332 ], [ 70.8604355, 20.7567788 ], [ 70.8601523, 20.7560095 ], [ 70.859736, 20.7554992 ], [ 70.8567182, 20.7548878 ], [ 70.8550764, 20.7549056 ], [ 70.8534408, 20.7554382 ], [ 70.8528982, 20.7558306 ], [ 70.8527672, 20.7563469 ], [ 70.8524967, 20.7566072 ], [ 70.8523667, 20.7571235 ], [ 70.8518193, 20.7571294 ], [ 70.8508925, 20.7597136 ], [ 70.8500809, 20.7604945 ], [ 70.8495493, 20.7617873 ], [ 70.8490083, 20.762308 ], [ 70.8484703, 20.7630861 ], [ 70.8486233, 20.7643715 ], [ 70.848076, 20.7643775 ], [ 70.8482155, 20.7646334 ], [ 70.8482312, 20.7659203 ], [ 70.8475663, 20.767472 ], [ 70.8472926, 20.7674748 ], [ 70.8472864, 20.7669602 ], [ 70.8461949, 20.7672293 ], [ 70.8464778, 20.7679986 ], [ 70.8459305, 20.7680044 ], [ 70.845943, 20.7690339 ], [ 70.8456695, 20.7690369 ], [ 70.8453739, 20.7672382 ], [ 70.8451922, 20.7671517 ], [ 70.845094, 20.7667262 ], [ 70.8449123, 20.7666397 ], [ 70.8449503, 20.7662131 ], [ 70.8445217, 20.7646731 ], [ 70.8440664, 20.7645894 ], [ 70.8443686, 20.7633875 ], [ 70.8445045, 20.7632569 ], [ 70.8450501, 20.7631229 ], [ 70.844481, 20.7613271 ], [ 70.843108, 20.7609551 ], [ 70.8422871, 20.760964 ], [ 70.842015, 20.7610961 ], [ 70.8420212, 20.7616107 ], [ 70.8398305, 20.7615051 ], [ 70.8392879, 20.7618975 ], [ 70.8398195, 20.7606047 ], [ 70.8392739, 20.7607389 ], [ 70.8384591, 20.7612624 ], [ 70.8377318, 20.7613108 ], [ 70.837907, 20.7608827 ], [ 70.8373599, 20.7608884 ], [ 70.8373661, 20.7614032 ], [ 70.8375466, 20.761489 ], [ 70.8375054, 20.7616591 ], [ 70.8371017, 20.7621783 ], [ 70.8354599, 20.7621959 ], [ 70.8354661, 20.7627107 ], [ 70.8351924, 20.7627136 ], [ 70.8350426, 20.7616856 ], [ 70.8347659, 20.761431 ], [ 70.8344829, 20.7606618 ], [ 70.8344674, 20.7593749 ], [ 70.8348706, 20.7587266 ], [ 70.8354162, 20.7585924 ], [ 70.8358139, 20.7575586 ], [ 70.8360843, 20.7572981 ], [ 70.8359418, 20.7567848 ], [ 70.8364875, 20.7566499 ], [ 70.8366224, 20.7565202 ], [ 70.8366192, 20.7562628 ], [ 70.8360596, 20.755239 ], [ 70.8361843, 20.754208 ], [ 70.8356372, 20.7542139 ], [ 70.8357704, 20.7539551 ], [ 70.8357126, 20.7527561 ], [ 70.8360254, 20.7524078 ], [ 70.8361533, 20.7516342 ], [ 70.8353323, 20.7516429 ], [ 70.8353263, 20.7511281 ], [ 70.8342316, 20.7511398 ], [ 70.8340851, 20.750369 ], [ 70.8336689, 20.7498587 ], [ 70.8331216, 20.7498646 ], [ 70.8328573, 20.7506397 ], [ 70.8325837, 20.7506425 ], [ 70.8324308, 20.7493571 ], [ 70.8329719, 20.7488364 ], [ 70.833103, 20.7483203 ], [ 70.8325557, 20.7483259 ], [ 70.8325619, 20.7488408 ], [ 70.8322868, 20.7487145 ], [ 70.8317394, 20.7487204 ], [ 70.8314674, 20.7488525 ], [ 70.8316099, 20.7493658 ], [ 70.8312062, 20.749885 ], [ 70.8309326, 20.7498878 ], [ 70.8311968, 20.7491127 ], [ 70.8306481, 20.7489895 ], [ 70.8303712, 20.7487349 ], [ 70.8281777, 20.7483726 ], [ 70.828031, 20.7476019 ], [ 70.8281622, 20.7470857 ], [ 70.8273414, 20.7470944 ], [ 70.8267725, 20.7452985 ], [ 70.8254011, 20.7450557 ], [ 70.8253888, 20.744026 ], [ 70.8259345, 20.7438911 ], [ 70.8260694, 20.7437614 ], [ 70.8259144, 20.7422184 ], [ 70.8253656, 20.7420952 ], [ 70.8245432, 20.7419755 ], [ 70.8248122, 20.7415862 ], [ 70.8259037, 20.7413172 ], [ 70.826454, 20.7415688 ], [ 70.8271452, 20.7422054 ], [ 70.8272887, 20.7427187 ], [ 70.827836, 20.742713 ], [ 70.8279785, 20.7432263 ], [ 70.8283941, 20.7436076 ], [ 70.8294901, 20.7437251 ], [ 70.8294839, 20.7432103 ], [ 70.8308551, 20.7434531 ], [ 70.8305969, 20.7447429 ], [ 70.8297776, 20.7448799 ], [ 70.829235, 20.7452723 ], [ 70.8292442, 20.7460445 ], [ 70.8306139, 20.7461581 ], [ 70.8317039, 20.7457608 ], [ 70.8318277, 20.7447298 ], [ 70.8316884, 20.7444739 ], [ 70.8325107, 20.7445934 ], [ 70.8330641, 20.7451024 ], [ 70.8337904, 20.745054 ], [ 70.8336254, 20.7462553 ], [ 70.8344495, 20.7465038 ], [ 70.8347107, 20.7454713 ], [ 70.8341571, 20.7449625 ], [ 70.8337432, 20.7447094 ], [ 70.8335975, 20.7439387 ], [ 70.8333208, 20.7436843 ], [ 70.8338679, 20.7436784 ], [ 70.8340106, 20.7441918 ], [ 70.8343325, 20.7446145 ], [ 70.8345219, 20.7447888 ], [ 70.8349734, 20.7445671 ], [ 70.8360664, 20.7444272 ], [ 70.8362119, 20.745198 ], [ 70.8363508, 20.7453246 ], [ 70.836898, 20.7453188 ], [ 70.8379987, 20.7458219 ], [ 70.8388212, 20.7459423 ], [ 70.8388275, 20.7464571 ], [ 70.8393716, 20.7461938 ], [ 70.8395171, 20.7469646 ], [ 70.8402094, 20.7476002 ], [ 70.8413039, 20.7475885 ], [ 70.8424109, 20.7486064 ], [ 70.8429615, 20.7488578 ], [ 70.8443451, 20.7501301 ], [ 70.8451692, 20.7503787 ], [ 70.8459962, 20.7508846 ], [ 70.8465498, 20.7513936 ], [ 70.847097, 20.7513877 ], [ 70.8473739, 20.7516421 ], [ 70.8481979, 20.7518907 ], [ 70.8495753, 20.7526482 ], [ 70.8503979, 20.7527684 ], [ 70.8507921, 20.7514771 ], [ 70.8513332, 20.7509564 ], [ 70.8518647, 20.7496637 ], [ 70.8524058, 20.749143 ], [ 70.8525368, 20.7486266 ], [ 70.8515311, 20.7482915 ], [ 70.8512544, 20.7480371 ], [ 70.8509777, 20.7477828 ], [ 70.8508825, 20.7476147 ], [ 70.8536156, 20.7473278 ], [ 70.8548057, 20.7439685 ], [ 70.8547993, 20.7434539 ], [ 70.8546598, 20.743198 ], [ 70.8530229, 20.7436013 ], [ 70.8527524, 20.7438616 ], [ 70.8511185, 20.7445233 ], [ 70.8513984, 20.7450351 ], [ 70.8503007, 20.7447894 ], [ 70.8502977, 20.744532 ], [ 70.8508449, 20.7445261 ], [ 70.8508386, 20.7440114 ], [ 70.851386, 20.7440054 ], [ 70.851516, 20.7434892 ], [ 70.8520569, 20.7429685 ], [ 70.8520475, 20.7421963 ], [ 70.8523179, 20.741936 ], [ 70.8536515, 20.7390901 ], [ 70.8536453, 20.7385752 ], [ 70.8552525, 20.7357263 ], [ 70.8552431, 20.7349542 ], [ 70.8560545, 20.734173 ], [ 70.856176, 20.7328846 ], [ 70.8572735, 20.7331301 ], [ 70.8571425, 20.7336465 ], [ 70.8568721, 20.7339067 ], [ 70.8555387, 20.7367529 ], [ 70.8555449, 20.7372677 ], [ 70.8554117, 20.7375265 ], [ 70.8570548, 20.737637 ], [ 70.8571896, 20.7375074 ], [ 70.8570376, 20.7362218 ], [ 70.8575833, 20.7360869 ], [ 70.8579885, 20.7356968 ], [ 70.8579823, 20.7351819 ], [ 70.8583852, 20.7345337 ], [ 70.8589308, 20.7343995 ], [ 70.8593187, 20.7325932 ], [ 70.8598566, 20.7318153 ], [ 70.8599843, 20.7310415 ], [ 70.861357, 20.7314123 ], [ 70.8624498, 20.7312723 ], [ 70.8629781, 20.7297221 ], [ 70.8637974, 20.7295839 ], [ 70.8642024, 20.729194 ], [ 70.8646008, 20.72816 ], [ 70.8640535, 20.7281659 ], [ 70.8643224, 20.7277763 ], [ 70.8654152, 20.7276363 ], [ 70.8654088, 20.7271215 ], [ 70.8665063, 20.727367 ], [ 70.8664969, 20.7265949 ], [ 70.8670425, 20.7264598 ], [ 70.8678569, 20.7259361 ], [ 70.8682622, 20.725546 ], [ 70.8683899, 20.7247724 ], [ 70.8686666, 20.7250268 ], [ 70.8689403, 20.7250237 ], [ 70.8689371, 20.7247663 ], [ 70.8687554, 20.72468 ], [ 70.8687966, 20.7245104 ], [ 70.8689323, 20.7243798 ], [ 70.869478, 20.7242456 ], [ 70.8694748, 20.7239882 ], [ 70.8683805, 20.7240001 ], [ 70.8682274, 20.7227147 ], [ 70.8684914, 20.7219396 ], [ 70.8687619, 20.7216792 ], [ 70.8687587, 20.7214218 ], [ 70.8683425, 20.7209115 ], [ 70.8677953, 20.7209175 ], [ 70.8678017, 20.7214322 ], [ 70.8672546, 20.7214382 ], [ 70.8673846, 20.7209219 ], [ 70.8672451, 20.720666 ], [ 70.866426, 20.7208032 ], [ 70.8658836, 20.7211957 ], [ 70.8657526, 20.7217119 ], [ 70.8652117, 20.7222326 ], [ 70.8650849, 20.7230062 ], [ 70.8648112, 20.7230092 ], [ 70.8645283, 20.72224 ], [ 70.8637091, 20.7223772 ], [ 70.8628853, 20.7221286 ], [ 70.8626084, 20.7218743 ], [ 70.8609607, 20.7213772 ], [ 70.8604073, 20.7208684 ], [ 70.8595835, 20.7206199 ], [ 70.8582062, 20.7198625 ], [ 70.8573839, 20.7197431 ], [ 70.8573682, 20.7184562 ], [ 70.856821, 20.718462 ], [ 70.8566617, 20.7166618 ], [ 70.8559407, 20.7135806 ], [ 70.8537538, 20.7137323 ], [ 70.8531988, 20.7130952 ], [ 70.8537443, 20.7129603 ], [ 70.8553873, 20.7130716 ], [ 70.855381, 20.7125569 ], [ 70.857024, 20.7126675 ], [ 70.8571618, 20.7127951 ], [ 70.857168, 20.7133099 ], [ 70.857035, 20.7135686 ], [ 70.8575837, 20.7136911 ], [ 70.8580046, 20.7145879 ], [ 70.8580108, 20.7151028 ], [ 70.8576165, 20.716394 ], [ 70.8587141, 20.7166397 ], [ 70.8587235, 20.7174118 ], [ 70.8595457, 20.7175312 ], [ 70.8603633, 20.7172649 ], [ 70.8607653, 20.7166174 ], [ 70.8606228, 20.7161043 ], [ 70.8614419, 20.7159661 ], [ 70.8618439, 20.7153188 ], [ 70.8619717, 20.714545 ], [ 70.8614245, 20.7145511 ], [ 70.8615545, 20.7140347 ], [ 70.8622327, 20.7135125 ], [ 70.8622421, 20.7142848 ], [ 70.8630643, 20.714404 ], [ 70.8636084, 20.7141408 ], [ 70.8641554, 20.7141349 ], [ 70.8644323, 20.7143893 ], [ 70.8649809, 20.7145125 ], [ 70.8644243, 20.7137463 ], [ 70.865245, 20.7137374 ], [ 70.864965, 20.7132256 ], [ 70.8655122, 20.7132196 ], [ 70.8656422, 20.7127034 ], [ 70.8659569, 20.7125301 ], [ 70.8660531, 20.7126989 ], [ 70.8663266, 20.712696 ], [ 70.8663234, 20.7124386 ], [ 70.8659095, 20.7121855 ], [ 70.86577, 20.7119296 ], [ 70.8686381, 20.711645 ], [ 70.868343, 20.7098425 ], [ 70.8686103, 20.7093247 ], [ 70.8688554, 20.7070052 ], [ 70.8690807, 20.7065756 ], [ 70.871714, 20.7058153 ], [ 70.8730818, 20.7058004 ], [ 70.8733521, 20.7055401 ], [ 70.8738976, 20.7054059 ], [ 70.8736178, 20.7048941 ], [ 70.872794, 20.7046456 ], [ 70.8722453, 20.7045225 ], [ 70.8716982, 20.7045284 ], [ 70.871148, 20.704277 ], [ 70.8684126, 20.7043067 ], [ 70.8681421, 20.704567 ], [ 70.8664961, 20.7041992 ], [ 70.8665088, 20.7052288 ], [ 70.864869, 20.7053747 ], [ 70.8645986, 20.7056352 ], [ 70.8594075, 20.7062062 ], [ 70.855041, 20.7072311 ], [ 70.8518819, 20.70764 ], [ 70.8481219, 20.7074547 ], [ 70.8466642, 20.7073335 ], [ 70.8456495, 20.7070706 ], [ 70.8443654, 20.7066254 ], [ 70.8433377, 20.7063575 ], [ 70.8413438, 20.705628 ], [ 70.8410382, 20.7055222 ], [ 70.84052, 20.7053795 ], [ 70.8396933, 20.7048733 ], [ 70.838038, 20.7037331 ], [ 70.8373232, 20.7032289 ], [ 70.8368611, 20.7027948 ], [ 70.83626, 20.7022498 ], [ 70.8358847, 20.7018572 ], [ 70.8355318, 20.7014234 ], [ 70.8353147, 20.7010128 ], [ 70.834737, 20.7000799 ], [ 70.8343032, 20.699561 ], [ 70.8338512, 20.6988003 ], [ 70.8335931, 20.6981171 ], [ 70.8334847, 20.6975761 ], [ 70.8334065, 20.6970954 ], [ 70.8331999, 20.6969767 ], [ 70.8329832, 20.6969295 ], [ 70.8327994, 20.6969868 ], [ 70.8327381, 20.6971397 ], [ 70.8328616, 20.6974458 ], [ 70.8328396, 20.6979345 ], [ 70.8329131, 20.6982926 ], [ 70.8331295, 20.6986392 ], [ 70.8331977, 20.699017 ], [ 70.8329273, 20.6996688 ], [ 70.8321159, 20.7004496 ], [ 70.8321191, 20.700707 ], [ 70.8321645, 20.7011507 ], [ 70.8326786, 20.7017308 ], [ 70.833148, 20.7066168 ], [ 70.8334217, 20.706614 ], [ 70.8335517, 20.7060977 ], [ 70.8333752, 20.7027531 ], [ 70.8339239, 20.7028756 ], [ 70.8344771, 20.7033844 ], [ 70.8352994, 20.7035048 ], [ 70.8358836, 20.7065877 ], [ 70.8364323, 20.7067102 ], [ 70.8372592, 20.7072162 ], [ 70.8386424, 20.7084885 ], [ 70.8397383, 20.7086061 ], [ 70.8398808, 20.7091194 ], [ 70.8401575, 20.7093738 ], [ 70.8433412, 20.7124288 ], [ 70.8434712, 20.7119126 ], [ 70.8436069, 20.711782 ], [ 70.8438806, 20.711779 ], [ 70.8441573, 20.7120334 ], [ 70.8466177, 20.7118788 ], [ 70.8466239, 20.7123936 ], [ 70.8477197, 20.7125101 ], [ 70.8482699, 20.7127616 ], [ 70.8499114, 20.712744 ], [ 70.8507383, 20.71325 ], [ 70.8518326, 20.7132383 ], [ 70.8526594, 20.713744 ], [ 70.8533856, 20.7136957 ], [ 70.853485, 20.7141219 ], [ 70.8510229, 20.7141483 ], [ 70.8511779, 20.7156911 ], [ 70.8514546, 20.7159457 ], [ 70.8514608, 20.7164603 ], [ 70.8523066, 20.7185106 ], [ 70.8527205, 20.7187637 ], [ 70.8527332, 20.7197932 ], [ 70.8530066, 20.7197903 ], [ 70.8528789, 20.7205639 ], [ 70.8522047, 20.7213435 ], [ 70.8519312, 20.7213464 ], [ 70.8512185, 20.7190372 ], [ 70.8509418, 20.7187828 ], [ 70.8509169, 20.7167236 ], [ 70.8506402, 20.7164692 ], [ 70.8504977, 20.7159559 ], [ 70.8496753, 20.7158357 ], [ 70.8494034, 20.7159676 ], [ 70.8491172, 20.7149412 ], [ 70.8474727, 20.7147013 ], [ 70.8474695, 20.7144439 ], [ 70.8488343, 20.7141719 ], [ 70.8485513, 20.7134027 ], [ 70.8471868, 20.7136747 ], [ 70.8471803, 20.7131598 ], [ 70.8458125, 20.7131746 ], [ 70.8458188, 20.7136894 ], [ 70.8444463, 20.7133175 ], [ 70.8407524, 20.7106806 ], [ 70.8381901, 20.7111726 ], [ 70.8369143, 20.7101533 ], [ 70.8361943, 20.7096735 ], [ 70.8345376, 20.708404 ], [ 70.8326027, 20.7072034 ], [ 70.8323414, 20.7077834 ], [ 70.8319382, 20.7084318 ], [ 70.8314358, 20.7092347 ], [ 70.8304519, 20.7097615 ], [ 70.8300545, 20.7101235 ], [ 70.8297372, 20.7105114 ], [ 70.8294581, 20.71087 ], [ 70.8292337, 20.7110347 ], [ 70.8291034, 20.7115511 ], [ 70.8280061, 20.7113052 ], [ 70.8280031, 20.7110478 ], [ 70.8283755, 20.7103506 ], [ 70.8286795, 20.7099464 ], [ 70.8289285, 20.7094889 ], [ 70.8289045, 20.709254 ], [ 70.828716, 20.708551 ], [ 70.8286432, 20.7074371 ], [ 70.8286022, 20.7068378 ], [ 70.8286247, 20.7058928 ], [ 70.8284753, 20.7022213 ], [ 70.8287458, 20.7019609 ], [ 70.8287428, 20.7017035 ], [ 70.8284661, 20.7014491 ], [ 70.8282832, 20.700233 ], [ 70.8282794, 20.6986882 ], [ 70.8284877, 20.6983347 ], [ 70.8305825, 20.69802 ], [ 70.8307203, 20.6981478 ], [ 70.8305965, 20.6991788 ], [ 70.8319673, 20.6994216 ], [ 70.8316814, 20.698395 ], [ 70.8311342, 20.6984006 ], [ 70.8309908, 20.6978873 ], [ 70.8309657, 20.6971997 ], [ 70.8313107, 20.6971826 ], [ 70.8315058, 20.6973533 ], [ 70.8317781, 20.6973212 ], [ 70.8318905, 20.6970442 ], [ 70.8322099, 20.696894 ], [ 70.8323697, 20.6967376 ], [ 70.8326519, 20.6965785 ], [ 70.8330683, 20.6966549 ], [ 70.8335864, 20.6968077 ], [ 70.8340348, 20.6971703 ], [ 70.8341308, 20.697339 ], [ 70.8344043, 20.6973362 ], [ 70.8344013, 20.6970788 ], [ 70.8342198, 20.6969922 ], [ 70.8342609, 20.6968229 ], [ 70.834667, 20.696432 ], [ 70.8352127, 20.6962978 ], [ 70.8356039, 20.6947492 ], [ 70.8359591, 20.6941785 ], [ 70.8359961, 20.6932005 ], [ 70.8361512, 20.6931191 ], [ 70.8367655, 20.6931257 ], [ 70.8370322, 20.692888 ], [ 70.837605, 20.6924554 ], [ 70.8380316, 20.6918917 ], [ 70.8383019, 20.6916312 ], [ 70.8385985, 20.690558 ], [ 70.8382481, 20.6902196 ], [ 70.8376031, 20.6903517 ], [ 70.8374998, 20.6905036 ], [ 70.8376094, 20.6908663 ], [ 70.8368008, 20.6907546 ], [ 70.8362386, 20.6904916 ], [ 70.8362783, 20.6909065 ], [ 70.8362501, 20.6911641 ], [ 70.8357889, 20.691574 ], [ 70.8353252, 20.6916727 ], [ 70.8348817, 20.6915386 ], [ 70.8343315, 20.6912871 ], [ 70.8325999, 20.6910518 ], [ 70.8320166, 20.6911256 ], [ 70.8318745, 20.6914026 ], [ 70.8301288, 20.6914679 ], [ 70.8298464, 20.6914151 ], [ 70.8293984, 20.6910426 ], [ 70.8289473, 20.6905542 ], [ 70.8285752, 20.6903184 ], [ 70.8280282, 20.6903243 ], [ 70.8277577, 20.6905845 ], [ 70.8266636, 20.6905963 ], [ 70.8263932, 20.6908565 ], [ 70.8258477, 20.6909915 ], [ 70.8257052, 20.6911274 ], [ 70.8256203, 20.6913423 ], [ 70.8255008, 20.6914601 ], [ 70.8252958, 20.6915104 ], [ 70.8251513, 20.6914217 ], [ 70.8239377, 20.6913974 ], [ 70.8236672, 20.6916577 ], [ 70.8232521, 20.691884 ], [ 70.8225249, 20.6917189 ], [ 70.8219993, 20.6919033 ], [ 70.8220166, 20.6920491 ], [ 70.8224434, 20.6923147 ], [ 70.8224465, 20.6925721 ], [ 70.822176, 20.6928323 ], [ 70.8219602, 20.6936387 ], [ 70.8213176, 20.6940306 ], [ 70.8206116, 20.6941825 ], [ 70.8195102, 20.6942551 ], [ 70.818507, 20.6948013 ], [ 70.8171547, 20.6961028 ], [ 70.816609, 20.6962377 ], [ 70.8166153, 20.6967526 ], [ 70.8147035, 20.69703 ], [ 70.8144391, 20.6978051 ], [ 70.8127993, 20.6979506 ], [ 70.8125289, 20.6982109 ], [ 70.8108891, 20.6983574 ], [ 70.8108954, 20.6988722 ], [ 70.8089866, 20.6994071 ], [ 70.8087222, 20.7001822 ], [ 70.8073575, 20.7004539 ], [ 70.8068286, 20.7020039 ], [ 70.8040932, 20.7020327 ], [ 70.8043546, 20.7010001 ], [ 70.8032635, 20.7012691 ], [ 70.8032696, 20.7017839 ], [ 70.8013577, 20.7020614 ], [ 70.8013639, 20.702576 ], [ 70.8008183, 20.70271 ], [ 70.8005478, 20.7029703 ], [ 70.799458, 20.7033683 ], [ 70.7994641, 20.7038832 ], [ 70.7983745, 20.7042802 ], [ 70.7972925, 20.7053213 ], [ 70.7953926, 20.7066282 ], [ 70.7937589, 20.7072893 ], [ 70.7934943, 20.7080642 ], [ 70.7926767, 20.7083301 ], [ 70.7926828, 20.708845 ], [ 70.7921356, 20.7088506 ], [ 70.7921416, 20.7093655 ], [ 70.7902327, 20.7099002 ], [ 70.7902388, 20.710415 ], [ 70.7896931, 20.710549 ], [ 70.7894227, 20.7108092 ], [ 70.7883329, 20.7112071 ], [ 70.788339, 20.7117219 ], [ 70.786702, 20.7121247 ], [ 70.7861609, 20.712645 ], [ 70.784968859374999, 20.713108089880752 ], [ 70.7847992, 20.713174 ], [ 70.7845285, 20.7134343 ], [ 70.7828901, 20.7137087 ], [ 70.7826196, 20.7139689 ], [ 70.7807105, 20.7145036 ], [ 70.7788001, 20.71491 ], [ 70.778806, 20.7154248 ], [ 70.7771691, 20.7158274 ], [ 70.7768986, 20.7160876 ], [ 70.7749895, 20.7166221 ], [ 70.7730759, 20.7167711 ], [ 70.7730819, 20.7172859 ], [ 70.7725348, 20.7172914 ], [ 70.7725406, 20.7178062 ], [ 70.7717215, 20.7179431 ], [ 70.7673636, 20.7196616 ], [ 70.767099, 20.7204365 ], [ 70.7602755, 20.7219219 ], [ 70.7597314, 20.722185 ], [ 70.7553568, 20.722487 ], [ 70.7550818, 20.7223615 ], [ 70.7547992, 20.7215921 ], [ 70.7531591, 20.7217372 ], [ 70.7526061, 20.7212279 ], [ 70.7512322, 20.720727 ], [ 70.7501288, 20.7199659 ], [ 70.7476665, 20.7199911 ], [ 70.7457559, 20.720397 ], [ 70.7457618, 20.7209119 ], [ 70.744663, 20.7205363 ], [ 70.7438421, 20.7205446 ], [ 70.7430273, 20.7210678 ], [ 70.7419344, 20.721208 ], [ 70.7416696, 20.7219829 ], [ 70.7400309, 20.722257 ], [ 70.7397662, 20.7230321 ], [ 70.738129, 20.7234343 ], [ 70.7378584, 20.7236943 ], [ 70.7362182, 20.7238402 ], [ 70.7362241, 20.7243549 ], [ 70.7351298, 20.724366 ], [ 70.7349983, 20.7248822 ], [ 70.734457, 20.7254025 ], [ 70.7343265, 20.7259187 ], [ 70.7324171, 20.7264528 ], [ 70.7321523, 20.7272279 ], [ 70.7307887, 20.7276272 ], [ 70.7299737, 20.7281502 ], [ 70.7286085, 20.7284214 ], [ 70.7283379, 20.7286817 ], [ 70.7266977, 20.7288272 ], [ 70.7267036, 20.729342 ], [ 70.7242424, 20.7294949 ], [ 70.7239718, 20.7297552 ], [ 70.7231538, 20.7300207 ], [ 70.7228832, 20.730281 ], [ 70.7220654, 20.7305465 ], [ 70.7209796, 20.7313297 ], [ 70.7174371, 20.7326524 ], [ 70.7171663, 20.7329124 ], [ 70.7152583, 20.7335756 ], [ 70.715264, 20.7340905 ], [ 70.7136252, 20.7343641 ], [ 70.713631, 20.734879 ], [ 70.7130852, 20.7350126 ], [ 70.7128146, 20.7352728 ], [ 70.7109077, 20.7360642 ], [ 70.7098148, 20.736204 ], [ 70.7098206, 20.7367189 ], [ 70.7087305, 20.7371154 ], [ 70.7079181, 20.7378958 ], [ 70.7060085, 20.7384297 ], [ 70.7046663, 20.7383632 ], [ 70.703915, 20.7387926 ], [ 70.7025802, 20.7394543 ], [ 70.7016219, 20.7400159 ], [ 70.7006699, 20.7407518 ], [ 70.7000217, 20.7413475 ], [ 70.699617, 20.7416972 ], [ 70.6987991, 20.7422725 ], [ 70.6982756, 20.7426168 ], [ 70.6971141, 20.743287 ], [ 70.6963103, 20.7439838 ], [ 70.6956626, 20.7445837 ], [ 70.6950635, 20.7452074 ], [ 70.694394, 20.7457904 ], [ 70.6932338, 20.7462791 ], [ 70.6923245, 20.7468038 ], [ 70.6910561, 20.7473303 ], [ 70.6904569, 20.7476159 ], [ 70.6895386, 20.7479467 ], [ 70.6888144, 20.748245 ], [ 70.6872408, 20.7487843 ], [ 70.6865349, 20.7490602 ], [ 70.6853366, 20.7498326 ], [ 70.6846216, 20.7503902 ], [ 70.6837074, 20.7510067 ], [ 70.6830593, 20.751531 ], [ 70.6818048, 20.7521842 ], [ 70.681673, 20.7527003 ], [ 70.681226, 20.7530868 ], [ 70.6804521, 20.7536128 ], [ 70.6799485, 20.7541028 ], [ 70.6796165, 20.7545408 ], [ 70.6781992, 20.7554044 ], [ 70.6778154, 20.7560002 ], [ 70.6761076, 20.7567446 ], [ 70.6755659, 20.7572647 ], [ 70.6742032, 20.7577929 ], [ 70.6729384, 20.7583172 ], [ 70.6721236, 20.7587064 ], [ 70.6712085, 20.7592384 ], [ 70.6704699, 20.7594877 ], [ 70.6699513, 20.7598164 ], [ 70.6696747, 20.760005 ], [ 70.669715, 20.7601451 ], [ 70.6702509, 20.7600966 ], [ 70.6710298, 20.759958 ], [ 70.6715828, 20.7597104 ], [ 70.6723262, 20.7594433 ], [ 70.6738918, 20.7589426 ], [ 70.6747071, 20.7586704 ], [ 70.6749343, 20.7586653 ], [ 70.6749241, 20.7587237 ], [ 70.6751751, 20.7587616 ], [ 70.675136, 20.7590151 ], [ 70.6751025, 20.759232 ], [ 70.6748521, 20.7591925 ], [ 70.6748405, 20.7592652 ], [ 70.6744939, 20.7593348 ], [ 70.6741142, 20.7595949 ], [ 70.6740894, 20.7597418 ], [ 70.6745787, 20.7599149 ], [ 70.6746358, 20.760014 ], [ 70.6744972, 20.7604407 ], [ 70.674318, 20.7604941 ], [ 70.6740439, 20.7603392 ], [ 70.6738005, 20.7603355 ], [ 70.6737059, 20.7605948 ], [ 70.673609, 20.7608081 ], [ 70.6735202, 20.7611472 ], [ 70.6735628, 20.7618667 ], [ 70.6734897, 20.7626385 ], [ 70.6735852, 20.7638493 ], [ 70.6738617, 20.764104 ], [ 70.6742956, 20.7652079 ], [ 70.6744859, 20.7653449 ], [ 70.6744996, 20.7655805 ], [ 70.6733595, 20.7656014 ], [ 70.6721706, 20.765625 ], [ 70.6721532, 20.765427 ], [ 70.672332, 20.7651775 ], [ 70.6722931, 20.7645733 ], [ 70.672337, 20.7643657 ], [ 70.6723297, 20.7642196 ], [ 70.6722882, 20.7640051 ], [ 70.6722775, 20.7637808 ], [ 70.6724566, 20.763065 ], [ 70.6724908, 20.7628094 ], [ 70.6724735, 20.7623155 ], [ 70.6724394, 20.7621177 ], [ 70.6721331, 20.7616795 ], [ 70.6718945, 20.761307 ], [ 70.6718384, 20.7611715 ], [ 70.6717894, 20.7610368 ], [ 70.6716598, 20.7609856 ], [ 70.6714927, 20.7610018 ], [ 70.6713112, 20.7611122 ], [ 70.6711786, 20.7612442 ], [ 70.6709798, 20.7614032 ], [ 70.6707781, 20.7614867 ], [ 70.6705505, 20.7614894 ], [ 70.6703719, 20.7614355 ], [ 70.6703805, 20.7612819 ], [ 70.670346, 20.7612065 ], [ 70.6702595, 20.7612011 ], [ 70.6701408, 20.7612898 ], [ 70.6697682, 20.7613696 ], [ 70.6693937, 20.7613211 ], [ 70.6692871, 20.7612565 ], [ 70.6693937, 20.7611083 ], [ 70.6694542, 20.7609979 ], [ 70.6694292, 20.7609411 ], [ 70.6693735, 20.7608995 ], [ 70.6693038, 20.7609007 ], [ 70.6692352, 20.7609251 ], [ 70.6690834, 20.761092 ], [ 70.6684958, 20.7614526 ], [ 70.668, 20.7616668 ], [ 70.6669072, 20.7618168 ], [ 70.665488, 20.7617393 ], [ 70.6651962, 20.7616623 ], [ 70.6645239, 20.761407 ], [ 70.6640309, 20.7611651 ], [ 70.6636438, 20.7609479 ], [ 70.663038, 20.7608134 ], [ 70.662613, 20.7608298 ], [ 70.662558, 20.7606812 ], [ 70.6640432, 20.7594506 ], [ 70.6639886, 20.7593918 ], [ 70.6624881, 20.7606053 ], [ 70.6623527, 20.7604973 ], [ 70.662269, 20.7604824 ], [ 70.6622172, 20.7605011 ], [ 70.6620997, 20.7605666 ], [ 70.6620161, 20.7604694 ], [ 70.6619424, 20.7602757 ], [ 70.6619185, 20.7600932 ], [ 70.6618906, 20.7598063 ], [ 70.6619021, 20.7596586 ], [ 70.6619645, 20.7595104 ], [ 70.6624925, 20.7592087 ], [ 70.6628647, 20.7590082 ], [ 70.6633997, 20.7587392 ], [ 70.663756, 20.7586081 ], [ 70.6640311, 20.7584626 ], [ 70.6641706, 20.7584011 ], [ 70.6642358, 20.7583459 ], [ 70.6642721, 20.7582891 ], [ 70.6642917, 20.7582091 ], [ 70.6642857, 20.7580527 ], [ 70.6644805, 20.7572443 ], [ 70.6646213, 20.7570771 ], [ 70.6647368, 20.7568795 ], [ 70.6647904, 20.7567268 ], [ 70.6648101, 20.7565845 ], [ 70.665039, 20.7560606 ], [ 70.6652009, 20.7560205 ], [ 70.6654117, 20.7560908 ], [ 70.665245, 20.7565498 ], [ 70.6654535, 20.7566192 ], [ 70.6663584, 20.7540492 ], [ 70.6661723, 20.7539877 ], [ 70.6654688, 20.7558991 ], [ 70.6653547, 20.7558554 ], [ 70.6653431, 20.7557984 ], [ 70.6653042, 20.755731 ], [ 70.6652379, 20.7556745 ], [ 70.6651755, 20.755573 ], [ 70.6653675, 20.7549615 ], [ 70.6658122, 20.7537371 ], [ 70.6658572, 20.753737 ], [ 70.6659565, 20.7535968 ], [ 70.6660441, 20.7534347 ], [ 70.6661376, 20.7532381 ], [ 70.6661629, 20.7531324 ], [ 70.6661493, 20.7529872 ], [ 70.6660675, 20.7528484 ], [ 70.665937, 20.7527792 ], [ 70.6658319, 20.7527828 ], [ 70.6657092, 20.7528666 ], [ 70.6655982, 20.7530104 ], [ 70.6653964, 20.7533737 ], [ 70.6652618, 20.7540763 ], [ 70.6648211, 20.7551641 ], [ 70.6646265, 20.7556436 ], [ 70.6642779, 20.7561207 ], [ 70.6641825, 20.7563556 ], [ 70.6641883, 20.7565249 ], [ 70.6642487, 20.7566888 ], [ 70.6639099, 20.7577085 ], [ 70.6637735, 20.7579489 ], [ 70.6635685, 20.7581641 ], [ 70.6627492, 20.7586815 ], [ 70.6625012, 20.7588257 ], [ 70.6622594, 20.7589529 ], [ 70.6620462, 20.7589905 ], [ 70.6619177, 20.7589613 ], [ 70.6617541, 20.7588976 ], [ 70.6615858, 20.7587734 ], [ 70.6612188, 20.7585404 ], [ 70.6607124, 20.7582586 ], [ 70.660426, 20.7580859 ], [ 70.6602594, 20.7580836 ], [ 70.6602149, 20.7582051 ], [ 70.6602826, 20.7584249 ], [ 70.6601243, 20.7587621 ], [ 70.659952, 20.7589576 ], [ 70.659709, 20.7591066 ], [ 70.6590437, 20.7593152 ], [ 70.6584103, 20.7593673 ], [ 70.6578209, 20.7593174 ], [ 70.657267, 20.7591736 ], [ 70.6566177, 20.7590246 ], [ 70.6564019, 20.7590322 ], [ 70.6560042, 20.7591624 ], [ 70.655335, 20.7594902 ], [ 70.6546565, 20.7599479 ], [ 70.653706, 20.760407 ], [ 70.6534323, 20.7605684 ], [ 70.6529688, 20.7610312 ], [ 70.6527136, 20.761417 ], [ 70.6524347, 20.7617031 ], [ 70.6519387, 20.7620056 ], [ 70.6512624, 20.7623915 ], [ 70.6509875, 20.762551 ], [ 70.6501692, 20.7628683 ], [ 70.6494486, 20.7629868 ], [ 70.6486261, 20.762913 ], [ 70.6478937, 20.7628814 ], [ 70.6468215, 20.7630326 ], [ 70.6449789, 20.7634815 ], [ 70.6447078, 20.7637415 ], [ 70.6430728, 20.7644013 ], [ 70.6423754, 20.7648797 ], [ 70.6417141, 20.7653148 ], [ 70.6406304, 20.766355 ], [ 70.639544, 20.7671377 ], [ 70.6368182, 20.7681934 ], [ 70.6359972, 20.7682012 ], [ 70.635722, 20.7680757 ], [ 70.6357275, 20.7685905 ], [ 70.6335421, 20.7689971 ], [ 70.6327183, 20.7687474 ], [ 70.6318918, 20.7682403 ], [ 70.6297009, 20.7681329 ], [ 70.6297064, 20.7686478 ], [ 70.6286115, 20.768658 ], [ 70.6283295, 20.7678884 ], [ 70.6277821, 20.7678937 ], [ 70.6277876, 20.7684085 ], [ 70.6258774, 20.7689415 ], [ 70.6250239, 20.7692007 ], [ 70.6239696, 20.7697319 ], [ 70.6233505, 20.7701372 ], [ 70.6220621, 20.7705221 ], [ 70.6213646, 20.7710004 ], [ 70.6201545, 20.7713125 ], [ 70.6192229, 20.7714987 ], [ 70.6185913, 20.7716779 ], [ 70.6179689, 20.7717188 ], [ 70.6155028, 20.7714847 ], [ 70.6152278, 20.771359 ], [ 70.6154905, 20.7703267 ], [ 70.6146695, 20.7703344 ], [ 70.6149487, 20.7708466 ], [ 70.6133091, 20.7711195 ], [ 70.6133146, 20.7716344 ], [ 70.6130396, 20.7715077 ], [ 70.6122184, 20.7715155 ], [ 70.611946, 20.7716472 ], [ 70.6119543, 20.7724195 ], [ 70.6127754, 20.7724117 ], [ 70.6127808, 20.7729266 ], [ 70.6133282, 20.7729215 ], [ 70.6132019, 20.7739524 ], [ 70.6129335, 20.7744699 ], [ 70.611987, 20.7755085 ], [ 70.610624, 20.7760362 ], [ 70.6106294, 20.776551 ], [ 70.6100819, 20.7765561 ], [ 70.6100874, 20.7770709 ], [ 70.6062567, 20.7772352 ], [ 70.6046174, 20.7775079 ], [ 70.6040725, 20.7777704 ], [ 70.6010643, 20.778056 ], [ 70.6007933, 20.7783159 ], [ 70.5994261, 20.7784578 ], [ 70.5994208, 20.777943 ], [ 70.5972379, 20.7786066 ], [ 70.5969668, 20.7788664 ], [ 70.5939666, 20.7799241 ], [ 70.5928799, 20.7807066 ], [ 70.5920615, 20.7809717 ], [ 70.5917905, 20.7812316 ], [ 70.5896074, 20.7818959 ], [ 70.5896128, 20.7824108 ], [ 70.5885164, 20.7822917 ], [ 70.5879665, 20.7820394 ], [ 70.5857765, 20.7820596 ], [ 70.5855015, 20.7819339 ], [ 70.5853696, 20.7824501 ], [ 70.5850986, 20.78271 ], [ 70.5844308, 20.7842609 ], [ 70.5833399, 20.7846567 ], [ 70.5827965, 20.7850483 ], [ 70.5828018, 20.7855631 ], [ 70.5822543, 20.7855682 ], [ 70.5822598, 20.786083 ], [ 70.5817136, 20.7862163 ], [ 70.5811702, 20.7866079 ], [ 70.5809071, 20.7876402 ], [ 70.5798162, 20.788036 ], [ 70.5792742, 20.7885557 ], [ 70.5776357, 20.7889575 ], [ 70.5775036, 20.7894735 ], [ 70.5765567, 20.7905121 ], [ 70.5760094, 20.7905172 ], [ 70.5760147, 20.791032 ], [ 70.5743789, 20.7916901 ], [ 70.5738366, 20.79221 ], [ 70.5724694, 20.7923518 ], [ 70.5724747, 20.7928666 ], [ 70.5721995, 20.79274 ], [ 70.5705597, 20.7930123 ], [ 70.5702887, 20.7932724 ], [ 70.5672774, 20.7932998 ], [ 70.5664588, 20.7935648 ], [ 70.5629028, 20.7938547 ], [ 70.5626318, 20.7941146 ], [ 70.5615407, 20.7945111 ], [ 70.5612749, 20.7952858 ], [ 70.5601825, 20.7955533 ], [ 70.5600504, 20.7960694 ], [ 70.5597794, 20.7963293 ], [ 70.5589765, 20.7981388 ], [ 70.5589818, 20.7986536 ], [ 70.558577, 20.7991722 ], [ 70.5580294, 20.7991771 ], [ 70.5578975, 20.7996933 ], [ 70.5574925, 20.8002119 ], [ 70.5569463, 20.800345 ], [ 70.5564027, 20.8007366 ], [ 70.556137, 20.8015115 ], [ 70.5553182, 20.8017763 ], [ 70.5553235, 20.8022911 ], [ 70.554776, 20.802296 ], [ 70.5545102, 20.8030709 ], [ 70.5528729, 20.8036005 ], [ 70.552878, 20.8041153 ], [ 70.5504209, 20.8047808 ], [ 70.5495995, 20.8047882 ], [ 70.5493245, 20.8046625 ], [ 70.5493296, 20.8051773 ], [ 70.547683, 20.8048056 ], [ 70.5468618, 20.8048129 ], [ 70.5460351, 20.8043055 ], [ 70.5438423, 20.8040679 ], [ 70.543291, 20.8036871 ], [ 70.5432857, 20.8031722 ], [ 70.5427382, 20.8031771 ], [ 70.5427251, 20.80189 ], [ 70.5419038, 20.8018974 ], [ 70.5419141, 20.8029271 ], [ 70.5413679, 20.8030603 ], [ 70.5410969, 20.8033202 ], [ 70.5405507, 20.8034542 ], [ 70.5405454, 20.8029394 ], [ 70.5394581, 20.8037215 ], [ 70.5396076, 20.8050074 ], [ 70.5397476, 20.8052637 ], [ 70.5378352, 20.8056665 ], [ 70.5370098, 20.8052881 ], [ 70.5371566, 20.8063166 ], [ 70.5367518, 20.8068352 ], [ 70.5362029, 20.8067109 ], [ 70.5359264, 20.8064559 ], [ 70.5351052, 20.8064633 ], [ 70.5348327, 20.806595 ], [ 70.5349796, 20.8076234 ], [ 70.5347083, 20.8078832 ], [ 70.5345772, 20.8083994 ], [ 70.5329384, 20.8087997 ], [ 70.5323961, 20.8093194 ], [ 70.5302135, 20.8101114 ], [ 70.5293988, 20.8107627 ], [ 70.5294039, 20.8112775 ], [ 70.5283101, 20.8114156 ], [ 70.5274938, 20.8119379 ], [ 70.5247599, 20.8123487 ], [ 70.5244759, 20.8113215 ], [ 70.5239282, 20.8113263 ], [ 70.5239334, 20.8118413 ], [ 70.5233846, 20.8117169 ], [ 70.5231121, 20.8118485 ], [ 70.5228459, 20.8126232 ], [ 70.520662, 20.8132858 ], [ 70.519576, 20.814197 ], [ 70.5193099, 20.8149717 ], [ 70.5179437, 20.8152412 ], [ 70.5178165, 20.8162722 ], [ 70.5175452, 20.8165321 ], [ 70.5174141, 20.817048 ], [ 70.5168664, 20.817053 ], [ 70.5166004, 20.8178277 ], [ 70.5152313, 20.8178398 ], [ 70.5152366, 20.8183546 ], [ 70.5133213, 20.8184997 ], [ 70.512505, 20.819022 ], [ 70.5119612, 20.8194134 ], [ 70.5116951, 20.8201881 ], [ 70.5111487, 20.8203211 ], [ 70.5103324, 20.8208432 ], [ 70.5095188, 20.8216228 ], [ 70.508151, 20.821764 ], [ 70.5081561, 20.8222788 ], [ 70.507003421093756, 20.822414014548976 ], [ 70.5046004, 20.8226959 ], [ 70.5040554, 20.8229581 ], [ 70.503234, 20.8229652 ], [ 70.5010512, 20.8237568 ], [ 70.5002347, 20.8242788 ], [ 70.4994184, 20.8248008 ], [ 70.498876, 20.8253206 ], [ 70.4969592, 20.8253374 ], [ 70.4966842, 20.8252115 ], [ 70.4965543, 20.8259849 ], [ 70.4961493, 20.8265033 ], [ 70.4956029, 20.8266364 ], [ 70.4950603, 20.8271561 ], [ 70.493695, 20.8275545 ], [ 70.4937001, 20.8280694 ], [ 70.49288, 20.8282049 ], [ 70.4915184, 20.8289891 ], [ 70.4898755, 20.8290034 ], [ 70.4890503, 20.8286249 ], [ 70.4889204, 20.8293984 ], [ 70.4881091, 20.8304353 ], [ 70.4881166, 20.8312075 ], [ 70.4883956, 20.8317199 ], [ 70.4881319, 20.832752 ], [ 70.4878605, 20.8330119 ], [ 70.4873281, 20.8345613 ], [ 70.4869229, 20.8350798 ], [ 70.4863752, 20.8350845 ], [ 70.4863803, 20.8355993 ], [ 70.4858339, 20.8357324 ], [ 70.481725, 20.8356396 ], [ 70.4817301, 20.8361546 ], [ 70.4806347, 20.8361641 ], [ 70.4806398, 20.8366789 ], [ 70.4798182, 20.8366859 ], [ 70.4798233, 20.8372009 ], [ 70.4781828, 20.8374725 ], [ 70.4780505, 20.8379885 ], [ 70.4777791, 20.8382484 ], [ 70.4776477, 20.8387643 ], [ 70.4770987, 20.83864 ], [ 70.4768275, 20.8388997 ], [ 70.4762784, 20.8387762 ], [ 70.476286, 20.8395485 ], [ 70.4757358, 20.8392958 ], [ 70.475472, 20.8403279 ], [ 70.4746504, 20.8403349 ], [ 70.4746555, 20.8408498 ], [ 70.4721896, 20.8407418 ], [ 70.4719144, 20.840616 ], [ 70.4719095, 20.8401011 ], [ 70.4713618, 20.8401058 ], [ 70.4716232, 20.8388163 ], [ 70.4688834, 20.8387107 ], [ 70.4686122, 20.8389703 ], [ 70.4669728, 20.839371 ], [ 70.4669777, 20.8398859 ], [ 70.4664313, 20.8400189 ], [ 70.4658887, 20.8405385 ], [ 70.4650696, 20.8408029 ], [ 70.4647982, 20.8410628 ], [ 70.4631601, 20.8415916 ], [ 70.4623448, 20.8422427 ], [ 70.4622123, 20.8427587 ], [ 70.4619411, 20.8430185 ], [ 70.4618095, 20.8435345 ], [ 70.4607141, 20.8435439 ], [ 70.4607192, 20.8440588 ], [ 70.4590785, 20.8443302 ], [ 70.4590834, 20.844845 ], [ 70.458537, 20.8449779 ], [ 70.4582656, 20.8452378 ], [ 70.4566273, 20.8457666 ], [ 70.4563559, 20.8460265 ], [ 70.4552631, 20.8462931 ], [ 70.4544465, 20.846815 ], [ 70.4533573, 20.8474683 ], [ 70.4532248, 20.8479843 ], [ 70.4529534, 20.8482442 ], [ 70.4528218, 20.8487602 ], [ 70.4525466, 20.8486333 ], [ 70.4514538, 20.8489 ], [ 70.4500843, 20.8489115 ], [ 70.4489815, 20.8481486 ], [ 70.4476135, 20.8482894 ], [ 70.4477549, 20.8488031 ], [ 70.4480312, 20.8490582 ], [ 70.4480386, 20.8498305 ], [ 70.4474983, 20.8506074 ], [ 70.4473692, 20.8513808 ], [ 70.4462713, 20.8511327 ], [ 70.4462762, 20.8516477 ], [ 70.4457296, 20.8517806 ], [ 70.4451868, 20.8522999 ], [ 70.4440951, 20.8526959 ], [ 70.4441, 20.8532107 ], [ 70.4435523, 20.8532155 ], [ 70.4432883, 20.8542474 ], [ 70.4421964, 20.8546424 ], [ 70.4416487, 20.8546469 ], [ 70.4413735, 20.8545211 ], [ 70.4413686, 20.8540062 ], [ 70.4408196, 20.8538815 ], [ 70.4402669, 20.8533714 ], [ 70.4388976, 20.8533829 ], [ 70.438081, 20.8539045 ], [ 70.4367237, 20.8552034 ], [ 70.4361772, 20.855337 ], [ 70.4361821, 20.855852 ], [ 70.4353629, 20.8561162 ], [ 70.4350989, 20.8571484 ], [ 70.4345523, 20.8572812 ], [ 70.4342809, 20.8575409 ], [ 70.4331877, 20.8578076 ], [ 70.4326425, 20.8580695 ], [ 70.4323697, 20.8582011 ], [ 70.4322373, 20.8587171 ], [ 70.4319659, 20.8589767 ], [ 70.4315652, 20.86001 ], [ 70.4310175, 20.8600145 ], [ 70.4306158, 20.8610478 ], [ 70.430073, 20.8615672 ], [ 70.4296699, 20.862343 ], [ 70.4280254, 20.8622275 ], [ 70.4277527, 20.8623589 ], [ 70.4277576, 20.8628739 ], [ 70.425301, 20.8637949 ], [ 70.4247568, 20.8641861 ], [ 70.4244903, 20.8649607 ], [ 70.4239438, 20.8650935 ], [ 70.4233994, 20.8654848 ], [ 70.4232669, 20.8660007 ], [ 70.4227239, 20.8665203 ], [ 70.4213762, 20.8688486 ], [ 70.4200188, 20.8701472 ], [ 70.4193492, 20.8716974 ], [ 70.4188013, 20.8717019 ], [ 70.4190825, 20.8724721 ], [ 70.4179891, 20.8727386 ], [ 70.417994, 20.8732534 ], [ 70.4174474, 20.8733863 ], [ 70.4166329, 20.8741653 ], [ 70.4155421, 20.8746893 ], [ 70.4147264, 20.8753402 ], [ 70.4137405, 20.8763724 ], [ 70.4129792, 20.8778199 ], [ 70.4125856, 20.8783731 ], [ 70.4079161, 20.8824049 ], [ 70.4063545, 20.8838425 ], [ 70.4051606, 20.8844334 ], [ 70.4044081, 20.8847016 ], [ 70.4042343, 20.884584 ], [ 70.4041385, 20.8837499 ], [ 70.4038748, 20.8832852 ], [ 70.403719, 20.8833804 ], [ 70.4039228, 20.8838786 ], [ 70.4040246, 20.8847184 ], [ 70.4041145, 20.8854909 ], [ 70.4040369, 20.8856499 ], [ 70.4036281, 20.8859296 ], [ 70.4027011, 20.8862987 ], [ 70.4019119, 20.8862891 ], [ 70.4015042, 20.8848168 ], [ 70.4013212, 20.884949 ], [ 70.4017624, 20.8869034 ], [ 70.4007843, 20.8874084 ], [ 70.3994636, 20.8887312 ], [ 70.3984201, 20.8893772 ], [ 70.398086, 20.8899902 ], [ 70.3976077, 20.8904137 ], [ 70.3974751, 20.8909296 ], [ 70.3965263, 20.8919673 ], [ 70.395434, 20.8923621 ], [ 70.3951625, 20.8926218 ], [ 70.3946159, 20.8927554 ], [ 70.3943038, 20.8932474 ], [ 70.3927077, 20.8938007 ], [ 70.3921032, 20.8942701 ], [ 70.3905244, 20.8947191 ], [ 70.3902528, 20.8949788 ], [ 70.3886531, 20.895374 ], [ 70.3880695, 20.8958981 ], [ 70.3872488, 20.896033 ], [ 70.3867043, 20.8964241 ], [ 70.3864465, 20.897196 ], [ 70.3860488, 20.897361 ], [ 70.3858931, 20.8975889 ], [ 70.3853477, 20.8978508 ], [ 70.3847984, 20.8977268 ], [ 70.3848032, 20.8982419 ], [ 70.3812488, 20.899043 ], [ 70.3812558, 20.8998153 ], [ 70.3798848, 20.8996972 ], [ 70.3793381, 20.8998308 ], [ 70.3793428, 20.9003456 ], [ 70.3779742, 20.9004849 ], [ 70.3774205, 20.8998463 ], [ 70.3767302, 20.8993369 ], [ 70.3765915, 20.8990805 ], [ 70.3764099, 20.8989935 ], [ 70.3761336, 20.8987382 ], [ 70.3758572, 20.898483 ], [ 70.3757625, 20.8983148 ], [ 70.3752146, 20.8983192 ], [ 70.3752169, 20.8985768 ], [ 70.3756714, 20.8986607 ], [ 70.3759478, 20.8989158 ], [ 70.3762241, 20.8991712 ], [ 70.3764586, 20.8995966 ], [ 70.377053, 20.8999368 ], [ 70.3773294, 20.9001922 ], [ 70.3772946, 20.9011345 ], [ 70.3775734, 20.9016473 ], [ 70.3775756, 20.9019047 ], [ 70.3771698, 20.9024229 ], [ 70.3760729, 20.9023025 ], [ 70.3752568, 20.9029533 ], [ 70.3752498, 20.9021808 ], [ 70.3749771, 20.9023114 ], [ 70.374154, 20.9021897 ], [ 70.3745715, 20.9029587 ], [ 70.3750064, 20.9055299 ], [ 70.37693, 20.9061576 ], [ 70.3772063, 20.9064129 ], [ 70.3799485, 20.9066482 ], [ 70.3802201, 20.9063885 ], [ 70.3807669, 20.9062558 ], [ 70.3807622, 20.905741 ], [ 70.3813089, 20.9056074 ], [ 70.3817159, 20.9052182 ], [ 70.3815747, 20.9047045 ], [ 70.3823966, 20.9046979 ], [ 70.3824883, 20.9045273 ], [ 70.3837663, 20.9046868 ], [ 70.3837616, 20.9041719 ], [ 70.3840356, 20.9041697 ], [ 70.383783, 20.9064889 ], [ 70.382961, 20.9064955 ], [ 70.3829657, 20.9070103 ], [ 70.3824153, 20.9067575 ], [ 70.3824201, 20.9072723 ], [ 70.3818722, 20.9072768 ], [ 70.3817395, 20.9077928 ], [ 70.3813337, 20.9083108 ], [ 70.3810585, 20.908184 ], [ 70.3788642, 20.9079442 ], [ 70.3783129, 20.907563 ], [ 70.3783174, 20.9080778 ], [ 70.3772158, 20.9074426 ], [ 70.3752967, 20.9073297 ], [ 70.3750111, 20.9060447 ], [ 70.374463, 20.9060493 ], [ 70.3742008, 20.9073386 ], [ 70.3736529, 20.907343 ], [ 70.3737777, 20.9060548 ], [ 70.3739139, 20.9059243 ], [ 70.3744607, 20.9057917 ], [ 70.3743209, 20.9055354 ], [ 70.3744467, 20.9042472 ], [ 70.373627, 20.9045112 ], [ 70.373759, 20.9039952 ], [ 70.3736131, 20.9029665 ], [ 70.3719703, 20.9031079 ], [ 70.370871, 20.902731 ], [ 70.3708663, 20.9022162 ], [ 70.3700432, 20.9020935 ], [ 70.3697705, 20.9022249 ], [ 70.3699, 20.9014515 ], [ 70.3703067, 20.9009332 ], [ 70.3692084, 20.9006847 ], [ 70.3695719, 20.9002543 ], [ 70.3700256, 20.9001632 ], [ 70.3703844, 20.8992181 ], [ 70.3705643, 20.899129 ], [ 70.370656, 20.8989584 ], [ 70.3708359, 20.8988694 ], [ 70.3719211, 20.8977015 ], [ 70.3731029, 20.896879 ], [ 70.3735592, 20.8970453 ], [ 70.3735545, 20.8965303 ], [ 70.3746467, 20.8961349 ], [ 70.3749172, 20.8957471 ], [ 70.3738225, 20.8958841 ], [ 70.3730065, 20.8965348 ], [ 70.3729138, 20.8967044 ], [ 70.372462, 20.8969249 ], [ 70.3719141, 20.8969293 ], [ 70.3716414, 20.8970606 ], [ 70.3715085, 20.8975766 ], [ 70.3707385, 20.898524 ], [ 70.370467, 20.8987837 ], [ 70.370288, 20.8988737 ], [ 70.3700175, 20.8992617 ], [ 70.3697448, 20.8993931 ], [ 70.3696119, 20.899909 ], [ 70.3689298, 20.9001719 ], [ 70.3689251, 20.8996571 ], [ 70.3672861, 20.9001852 ], [ 70.3672906, 20.9007 ], [ 70.3664664, 20.9004492 ], [ 70.3664711, 20.900964 ], [ 70.3659243, 20.9010967 ], [ 70.3656527, 20.9013562 ], [ 70.3648319, 20.9014921 ], [ 70.3648366, 20.9020069 ], [ 70.3629234, 20.9025371 ], [ 70.3626565, 20.9033116 ], [ 70.3612889, 20.90358 ], [ 70.3612937, 20.904095 ], [ 70.3593781, 20.9043675 ], [ 70.3593827, 20.9048826 ], [ 70.3574696, 20.9054127 ], [ 70.3574742, 20.9059276 ], [ 70.3569274, 20.9060602 ], [ 70.3566558, 20.9063197 ], [ 70.355835, 20.9064554 ], [ 70.3557044, 20.907229 ], [ 70.3552986, 20.9077471 ], [ 70.354205, 20.9080132 ], [ 70.3540722, 20.9085291 ], [ 70.3536662, 20.9090474 ], [ 70.3523008, 20.9095732 ], [ 70.3523056, 20.910088 ], [ 70.3514859, 20.9103519 ], [ 70.351353, 20.9108678 ], [ 70.3504039, 20.9119052 ], [ 70.3495842, 20.9121693 ], [ 70.349591, 20.9129415 ], [ 70.3490431, 20.9129459 ], [ 70.3489102, 20.9134619 ], [ 70.3475517, 20.9147599 ], [ 70.3474197, 20.9152759 ], [ 70.3455088, 20.9160634 ], [ 70.3464891, 20.9169175 ], [ 70.3470243, 20.9170812 ], [ 70.3471631, 20.9172084 ], [ 70.3482602, 20.917329 ], [ 70.3483496, 20.9169009 ], [ 70.3485307, 20.9169402 ], [ 70.3489448, 20.9173235 ], [ 70.3490914, 20.9183522 ], [ 70.3499145, 20.9184741 ], [ 70.3510209, 20.9196244 ], [ 70.3513601, 20.9203194 ], [ 70.3513042, 20.920652 ], [ 70.3511714, 20.9211679 ], [ 70.3518637, 20.9219349 ], [ 70.3518707, 20.9227072 ], [ 70.3510463, 20.9224562 ], [ 70.3507045, 20.921455 ], [ 70.350567, 20.9197155 ], [ 70.3493757, 20.9195082 ], [ 70.3490994, 20.9192528 ], [ 70.3482774, 20.9192594 ], [ 70.3480047, 20.9193908 ], [ 70.348007, 20.9196482 ], [ 70.348281, 20.9196459 ], [ 70.3471941, 20.9206845 ], [ 70.3463721, 20.9206909 ], [ 70.3463676, 20.9201761 ], [ 70.3466414, 20.9201738 ], [ 70.3466437, 20.9204314 ], [ 70.3472819, 20.9200803 ], [ 70.3470429, 20.9191409 ], [ 70.3464902, 20.9186302 ], [ 70.3464857, 20.9181154 ], [ 70.345416, 20.916233 ], [ 70.343593, 20.916336 ], [ 70.343326, 20.9171105 ], [ 70.3419559, 20.9171213 ], [ 70.3416889, 20.9178956 ], [ 70.340594, 20.9180326 ], [ 70.3384076, 20.9186937 ], [ 70.3384122, 20.9192088 ], [ 70.3364987, 20.9197385 ], [ 70.3365033, 20.9202536 ], [ 70.3359565, 20.9203861 ], [ 70.3356847, 20.9206457 ], [ 70.3337724, 20.9213048 ], [ 70.334051, 20.9218175 ], [ 70.33323, 20.9219521 ], [ 70.332143, 20.9229905 ], [ 70.3313234, 20.9232543 ], [ 70.3307798, 20.9237735 ], [ 70.3294165, 20.9245565 ], [ 70.3275008, 20.9248289 ], [ 70.327229, 20.9250886 ], [ 70.3258601, 20.9252284 ], [ 70.3255929, 20.9260028 ], [ 70.3250459, 20.9261354 ], [ 70.3247741, 20.9263949 ], [ 70.3242274, 20.9265284 ], [ 70.3242319, 20.9270432 ], [ 70.3228582, 20.9266673 ], [ 70.3223137, 20.9270581 ], [ 70.3223183, 20.927573 ], [ 70.3206751, 20.927714 ], [ 70.3198588, 20.9283645 ], [ 70.31987, 20.9296518 ], [ 70.3187762, 20.9299177 ], [ 70.3187807, 20.9304325 ], [ 70.3176868, 20.9306985 ], [ 70.3176982, 20.9319857 ], [ 70.3168737, 20.9317346 ], [ 70.3167407, 20.9322505 ], [ 70.3164689, 20.9325102 ], [ 70.316611, 20.9330239 ], [ 70.3155171, 20.9332898 ], [ 70.3155216, 20.9338047 ], [ 70.3149747, 20.9339374 ], [ 70.3141571, 20.9344584 ], [ 70.3136135, 20.9349776 ], [ 70.3125207, 20.9353726 ], [ 70.3125162, 20.9348578 ], [ 70.3119681, 20.9348619 ], [ 70.3115657, 20.935895 ], [ 70.3102066, 20.9371927 ], [ 70.3093956, 20.9384862 ], [ 70.308446, 20.9395234 ], [ 70.3073531, 20.9399175 ], [ 70.3070813, 20.9401772 ], [ 70.3062603, 20.9403125 ], [ 70.3062648, 20.9408275 ], [ 70.305172, 20.9412216 ], [ 70.3038084, 20.9420044 ], [ 70.3032637, 20.9423953 ], [ 70.303268, 20.9429101 ], [ 70.3021729, 20.9430468 ], [ 70.3016271, 20.9433084 ], [ 70.3013542, 20.9434397 ], [ 70.3013608, 20.9442122 ], [ 70.2997165, 20.9442246 ], [ 70.2997231, 20.9449969 ], [ 70.2978093, 20.9455265 ], [ 70.2978137, 20.9460413 ], [ 70.2961737, 20.9465688 ], [ 70.2961782, 20.9470836 ], [ 70.2945372, 20.9474819 ], [ 70.2931735, 20.9482647 ], [ 70.292358, 20.9490432 ], [ 70.291812, 20.9493048 ], [ 70.2907235, 20.9502146 ], [ 70.2910019, 20.9507275 ], [ 70.2896351, 20.9511235 ], [ 70.2888193, 20.9519022 ], [ 70.2882735, 20.9521638 ], [ 70.2866422, 20.9537209 ], [ 70.2858201, 20.953727 ], [ 70.2855449, 20.9536009 ], [ 70.2855493, 20.9541158 ], [ 70.2839102, 20.9547714 ], [ 70.2828207, 20.955552 ], [ 70.2822724, 20.9555561 ], [ 70.2819972, 20.9554299 ], [ 70.2817364, 20.9569766 ], [ 70.2800942, 20.9572463 ], [ 70.280235, 20.9577602 ], [ 70.2796935, 20.9585368 ], [ 70.2792871, 20.9590547 ], [ 70.2787402, 20.9591872 ], [ 70.2781962, 20.9597062 ], [ 70.2776492, 20.9598394 ], [ 70.2772463, 20.9608723 ], [ 70.2765682, 20.9616499 ], [ 70.275747, 20.9617842 ], [ 70.2752032, 20.9623032 ], [ 70.2743852, 20.9628243 ], [ 70.2719227, 20.9633577 ], [ 70.270833, 20.9641382 ], [ 70.2697441, 20.9650479 ], [ 70.2697485, 20.9655627 ], [ 70.2686544, 20.9658285 ], [ 70.2685211, 20.9663444 ], [ 70.2681148, 20.9668623 ], [ 70.2664746, 20.9673894 ], [ 70.2663414, 20.9679054 ], [ 70.265935, 20.9684234 ], [ 70.2648386, 20.9684316 ], [ 70.2645733, 20.9694633 ], [ 70.2640239, 20.9693382 ], [ 70.262933, 20.9699904 ], [ 70.2629373, 20.9705053 ], [ 70.2623901, 20.9706378 ], [ 70.2613002, 20.9714181 ], [ 70.2607562, 20.9719371 ], [ 70.2580227, 20.9728589 ], [ 70.2580292, 20.9736313 ], [ 70.2574811, 20.9736353 ], [ 70.2572132, 20.9744098 ], [ 70.2558472, 20.9749347 ], [ 70.2558513, 20.9754497 ], [ 70.2550312, 20.9757132 ], [ 70.255172, 20.9762271 ], [ 70.2542218, 20.9772639 ], [ 70.2536735, 20.9772681 ], [ 70.2536822, 20.9782977 ], [ 70.2531339, 20.9783019 ], [ 70.253138, 20.9788167 ], [ 70.2523168, 20.9789511 ], [ 70.2517676, 20.9788267 ], [ 70.2516408, 20.9801152 ], [ 70.2505527, 20.981153 ], [ 70.2504204, 20.9816689 ], [ 70.2498723, 20.9816729 ], [ 70.2497389, 20.9821889 ], [ 70.248651, 20.9832267 ], [ 70.2485187, 20.9837426 ], [ 70.2479715, 20.9838749 ], [ 70.2468834, 20.9849127 ], [ 70.2463363, 20.985046 ], [ 70.2466147, 20.9855589 ], [ 70.2457944, 20.9858224 ], [ 70.2457988, 20.9863372 ], [ 70.2449753, 20.986214 ], [ 70.2438861, 20.9871237 ], [ 70.2437549, 20.987897 ], [ 70.242667, 20.9889348 ], [ 70.2423972, 20.9894518 ], [ 70.2400864, 20.9917859 ], [ 70.2395393, 20.991918 ], [ 70.2376351, 20.9937343 ], [ 70.2370878, 20.9938674 ], [ 70.2368222, 20.9948993 ], [ 70.2360008, 20.9950335 ], [ 70.2349126, 20.9960713 ], [ 70.2343664, 20.9963327 ], [ 70.2332783, 20.9973705 ], [ 70.2319128, 20.9980244 ], [ 70.2321912, 20.9985374 ], [ 70.2313698, 20.9986716 ], [ 70.2300052, 20.9994538 ], [ 70.2289086, 20.9994618 ], [ 70.228837982812507, 20.999396524467297 ], [ 70.2286323, 20.9992064 ], [ 70.2275325, 20.9988286 ], [ 70.2275368, 20.9993435 ], [ 70.2269895, 20.9994758 ], [ 70.2264442, 20.9998662 ], [ 70.2261808, 21.0011556 ], [ 70.2253571, 21.0010322 ], [ 70.2248098, 21.0011654 ], [ 70.2246765, 21.0016812 ], [ 70.2239978, 21.0024585 ], [ 70.2234495, 21.0024625 ], [ 70.2234537, 21.0029774 ], [ 70.2229063, 21.0031097 ], [ 70.2212603, 21.0029932 ], [ 70.2211333, 21.0042815 ], [ 70.2204546, 21.0050588 ], [ 70.2199063, 21.0050626 ], [ 70.2199105, 21.0055776 ], [ 70.219362, 21.0055816 ], [ 70.2193662, 21.0060964 ], [ 70.2177234, 21.0063657 ], [ 70.21759, 21.0068815 ], [ 70.2174554, 21.0071401 ], [ 70.2158156, 21.007795 ], [ 70.2149982, 21.0084449 ], [ 70.2152766, 21.0089579 ], [ 70.2147293, 21.00909 ], [ 70.2136408, 21.0101278 ], [ 70.2125505, 21.010908 ], [ 70.2114599, 21.0116882 ], [ 70.2106404, 21.0120805 ], [ 70.2106467, 21.012853 ], [ 70.209551, 21.0129891 ], [ 70.2090058, 21.0133795 ], [ 70.208744, 21.0149263 ], [ 70.207373, 21.014936 ], [ 70.2073792, 21.0157084 ], [ 70.2065588, 21.0159717 ], [ 70.2065628, 21.0164867 ], [ 70.2054681, 21.0167519 ], [ 70.2054722, 21.0172667 ], [ 70.2043775, 21.0175321 ], [ 70.2042441, 21.0180478 ], [ 70.2039719, 21.0183073 ], [ 70.2038395, 21.0188231 ], [ 70.2021984, 21.0193497 ], [ 70.2019304, 21.020124 ], [ 70.2011088, 21.0202582 ], [ 70.2002914, 21.020908 ], [ 70.2000234, 21.0216823 ], [ 70.1992027, 21.0219456 ], [ 70.1990693, 21.0224616 ], [ 70.1983904, 21.0232387 ], [ 70.1978431, 21.0233708 ], [ 70.1975709, 21.0236301 ], [ 70.1970235, 21.0237632 ], [ 70.1968901, 21.0242792 ], [ 70.1956669, 21.0255751 ], [ 70.194572, 21.0258403 ], [ 70.1944386, 21.0263561 ], [ 70.1929432, 21.0279116 ], [ 70.1918493, 21.0283049 ], [ 70.191305, 21.0288237 ], [ 70.1893936, 21.029867 ], [ 70.1888493, 21.0303858 ], [ 70.1877535, 21.0305226 ], [ 70.1878941, 21.0310365 ], [ 70.1877595, 21.0312948 ], [ 70.1869379, 21.031429 ], [ 70.1863925, 21.0318195 ], [ 70.1862591, 21.0323353 ], [ 70.1858521, 21.0328532 ], [ 70.1847573, 21.0331181 ], [ 70.1847614, 21.0336332 ], [ 70.1842139, 21.0337653 ], [ 70.1839417, 21.0340246 ], [ 70.182848, 21.0344188 ], [ 70.1828519, 21.0349339 ], [ 70.1823046, 21.035066 ], [ 70.1812128, 21.0357176 ], [ 70.1809446, 21.036492 ], [ 70.180397, 21.0366239 ], [ 70.1801249, 21.0368834 ], [ 70.1795773, 21.0370163 ], [ 70.1790411, 21.0385649 ], [ 70.1776699, 21.0385744 ], [ 70.1775363, 21.0390903 ], [ 70.1765891, 21.0406417 ], [ 70.1760406, 21.0406454 ], [ 70.1760447, 21.0411605 ], [ 70.1754963, 21.0411642 ], [ 70.1755002, 21.0416791 ], [ 70.1749527, 21.0418112 ], [ 70.1738639, 21.0428486 ], [ 70.1730442, 21.043241 ], [ 70.1729105, 21.0437568 ], [ 70.1719593, 21.0447932 ], [ 70.1711385, 21.0450563 ], [ 70.1712791, 21.0455704 ], [ 70.1710069, 21.0458297 ], [ 70.1708743, 21.0463457 ], [ 70.1697794, 21.0466107 ], [ 70.1697834, 21.0471255 ], [ 70.1692349, 21.0471293 ], [ 70.1692388, 21.0476443 ], [ 70.1686913, 21.0477762 ], [ 70.1681459, 21.0481667 ], [ 70.1678777, 21.048941 ], [ 70.1667815, 21.0490767 ], [ 70.1659639, 21.0497265 ], [ 70.1656976, 21.0507583 ], [ 70.1651491, 21.050762 ], [ 70.1651451, 21.050247 ], [ 70.1635014, 21.0505158 ], [ 70.1632411, 21.05232 ], [ 70.1621472, 21.0527133 ], [ 70.1616027, 21.0532319 ], [ 70.1605065, 21.0533685 ], [ 70.1605104, 21.0538834 ], [ 70.1599629, 21.0540155 ], [ 70.1596908, 21.0542748 ], [ 70.1585966, 21.0546689 ], [ 70.1584649, 21.0554422 ], [ 70.158058, 21.0559599 ], [ 70.1569629, 21.0562249 ], [ 70.1566966, 21.0572566 ], [ 70.1561491, 21.0573886 ], [ 70.1547866, 21.058557 ], [ 70.1545184, 21.0593313 ], [ 70.1534231, 21.0595963 ], [ 70.1532895, 21.0601121 ], [ 70.1527469, 21.0608881 ], [ 70.15193, 21.0616662 ], [ 70.1517974, 21.062182 ], [ 70.1507021, 21.062447 ], [ 70.1507061, 21.0629618 ], [ 70.1501576, 21.0629656 ], [ 70.1496189, 21.0642564 ], [ 70.1482513, 21.0647807 ], [ 70.1482574, 21.0655532 ], [ 70.1477087, 21.0655568 ], [ 70.1477127, 21.0660718 ], [ 70.1466174, 21.0663366 ], [ 70.1463491, 21.0671109 ], [ 70.1449796, 21.0673776 ], [ 70.1448459, 21.0678934 ], [ 70.1445736, 21.0681527 ], [ 70.1444409, 21.0686687 ], [ 70.1438913, 21.0685432 ], [ 70.1430714, 21.0689353 ], [ 70.1429397, 21.0697085 ], [ 70.1426673, 21.0699678 ], [ 70.1421285, 21.0712589 ], [ 70.1415838, 21.0717775 ], [ 70.1413154, 21.0725518 ], [ 70.1406362, 21.0733288 ], [ 70.1400884, 21.0734607 ], [ 70.1395428, 21.073851 ], [ 70.139409, 21.0743668 ], [ 70.1376403, 21.076181 ], [ 70.1370926, 21.0763131 ], [ 70.1357299, 21.0774813 ], [ 70.1354613, 21.0782555 ], [ 70.1346384, 21.078261 ], [ 70.1345048, 21.0787769 ], [ 70.1336876, 21.0795547 ], [ 70.1330102, 21.0805891 ], [ 70.1319157, 21.0809822 ], [ 70.1310977, 21.0816318 ], [ 70.1311015, 21.0821468 ], [ 70.1305539, 21.0822787 ], [ 70.1294615, 21.08293 ], [ 70.1294674, 21.0837025 ], [ 70.1289197, 21.0838344 ], [ 70.1281005, 21.0843549 ], [ 70.1275558, 21.0848733 ], [ 70.1267358, 21.0852655 ], [ 70.1267396, 21.0857805 ], [ 70.1259176, 21.0859141 ], [ 70.1251004, 21.0866921 ], [ 70.1242803, 21.0870841 ], [ 70.1240117, 21.0878584 ], [ 70.1231898, 21.087992 ], [ 70.1229174, 21.0882513 ], [ 70.1223697, 21.0883842 ], [ 70.1223735, 21.088899 ], [ 70.1215524, 21.0891619 ], [ 70.1212839, 21.0899363 ], [ 70.1207352, 21.0899398 ], [ 70.120739, 21.0904547 ], [ 70.119097, 21.0909805 ], [ 70.1192374, 21.0914946 ], [ 70.1188303, 21.0920122 ], [ 70.1182826, 21.0921442 ], [ 70.1171899, 21.0927954 ], [ 70.1170561, 21.0933112 ], [ 70.116649, 21.0938289 ], [ 70.1161013, 21.0939608 ], [ 70.1150106, 21.0948695 ], [ 70.1148768, 21.0953855 ], [ 70.1144697, 21.095903 ], [ 70.1139189, 21.0956492 ], [ 70.1137851, 21.0961651 ], [ 70.113378, 21.0966826 ], [ 70.1128293, 21.0966862 ], [ 70.1128331, 21.0972012 ], [ 70.1122854, 21.0973331 ], [ 70.1106498, 21.0987603 ], [ 70.110516, 21.0992763 ], [ 70.1091537, 21.1005724 ], [ 70.1088832, 21.1010891 ], [ 70.1079064, 21.1023566 ], [ 70.1063001, 21.1041957 ], [ 70.1058724, 21.1047918 ], [ 70.1052123, 21.1054904 ], [ 70.1035486, 21.1063001 ], [ 70.1021617, 21.1064903 ], [ 70.1019965, 21.1064214 ], [ 70.1020095, 21.1055087 ], [ 70.1018163, 21.1055071 ], [ 70.1018071, 21.1067644 ], [ 70.1001353, 21.106826 ], [ 70.1001415, 21.1071321 ], [ 70.1017346, 21.1070559 ], [ 70.10334, 21.1067337 ], [ 70.1034583, 21.1072933 ], [ 70.1017443, 21.1076383 ], [ 70.1000873, 21.1077021 ], [ 70.1000545, 21.1073297 ], [ 70.0999009, 21.107379 ], [ 70.1000238, 21.1083313 ], [ 70.0984989, 21.1083657 ], [ 70.0989188, 21.1078485 ], [ 70.0990431, 21.1072735 ], [ 70.0999747, 21.1056466 ], [ 70.1002182, 21.1053848 ], [ 70.1002328, 21.1052255 ], [ 70.0999586, 21.105101 ], [ 70.0998612, 21.1053273 ], [ 70.0996879, 21.1057267 ], [ 70.0986131, 21.107471 ], [ 70.0981331, 21.1081914 ], [ 70.0978241, 21.1082413 ], [ 70.0972773, 21.1085025 ], [ 70.0961873, 21.1095393 ], [ 70.0950955, 21.1103188 ], [ 70.0945477, 21.1104516 ], [ 70.0945534, 21.1112239 ], [ 70.0934587, 21.1116168 ], [ 70.0929127, 21.1120069 ], [ 70.0926458, 21.1130387 ], [ 70.0910034, 21.1135641 ], [ 70.0907385, 21.1148533 ], [ 70.0893703, 21.115377 ], [ 70.0893739, 21.115892 ], [ 70.0888262, 21.1160237 ], [ 70.0882811, 21.1165422 ], [ 70.0877332, 21.1166748 ], [ 70.0875994, 21.1171908 ], [ 70.0867817, 21.1179684 ], [ 70.0858331, 21.1195193 ], [ 70.0850108, 21.1196529 ], [ 70.0841905, 21.1200449 ], [ 70.0840565, 21.1205607 ], [ 70.0831042, 21.1215966 ], [ 70.0825553, 21.1216002 ], [ 70.0824232, 21.1223734 ], [ 70.0820159, 21.1228911 ], [ 70.0814661, 21.1227654 ], [ 70.0809201, 21.1231555 ], [ 70.0803807, 21.1244463 ], [ 70.0798328, 21.1245781 ], [ 70.0790142, 21.1252275 ], [ 70.0787455, 21.1260016 ], [ 70.0781975, 21.1261333 ], [ 70.0765612, 21.1275603 ], [ 70.0762924, 21.1283344 ], [ 70.0757436, 21.128338 ], [ 70.0756096, 21.1288538 ], [ 70.0752023, 21.1293713 ], [ 70.0746534, 21.1293749 ], [ 70.074657, 21.1298897 ], [ 70.0738356, 21.1301524 ], [ 70.0737018, 21.1306682 ], [ 70.0731565, 21.1311866 ], [ 70.0730235, 21.1317024 ], [ 70.0722021, 21.1319651 ], [ 70.0722059, 21.13248 ], [ 70.071658, 21.1326119 ], [ 70.0713854, 21.132871 ], [ 70.0708375, 21.1330037 ], [ 70.0707054, 21.1337769 ], [ 70.070162, 21.1345527 ], [ 70.0700327, 21.1355835 ], [ 70.0694846, 21.1357153 ], [ 70.0689386, 21.1361054 ], [ 70.0686697, 21.1368795 ], [ 70.0681208, 21.1368829 ], [ 70.0681246, 21.1373979 ], [ 70.0673032, 21.1376606 ], [ 70.0673068, 21.1381755 ], [ 70.0667589, 21.1383072 ], [ 70.0659411, 21.1390848 ], [ 70.0651216, 21.1396049 ], [ 70.0637521, 21.1400003 ], [ 70.0636217, 21.1410309 ], [ 70.0629417, 21.1418077 ], [ 70.0623937, 21.1419394 ], [ 70.0613023, 21.1428479 ], [ 70.061306, 21.1433628 ], [ 70.0607572, 21.1433662 ], [ 70.060623, 21.1438821 ], [ 70.0602155, 21.1443996 ], [ 70.0591197, 21.1446639 ], [ 70.0585799, 21.1459547 ], [ 70.0580301, 21.1458288 ], [ 70.0572114, 21.1464783 ], [ 70.0570772, 21.146994 ], [ 70.0568046, 21.1472532 ], [ 70.0564026, 21.1485431 ], [ 70.0558519, 21.1482891 ], [ 70.0558555, 21.1488039 ], [ 70.0550322, 21.148809 ], [ 70.0544924, 21.1500999 ], [ 70.0539434, 21.1501033 ], [ 70.0538094, 21.1506191 ], [ 70.0535366, 21.1508782 ], [ 70.0534036, 21.151394 ], [ 70.0528557, 21.1515257 ], [ 70.0523104, 21.1520441 ], [ 70.0517623, 21.1521766 ], [ 70.0514951, 21.1532082 ], [ 70.0506699, 21.1529558 ], [ 70.0498593, 21.1547633 ], [ 70.0493104, 21.1547667 ], [ 70.049314, 21.1552817 ], [ 70.0487659, 21.1554132 ], [ 70.0474017, 21.1565809 ], [ 70.0474055, 21.1570957 ], [ 70.0468564, 21.1570991 ], [ 70.0467224, 21.1576149 ], [ 70.0459061, 21.1586499 ], [ 70.0437249, 21.1607232 ], [ 70.0435916, 21.161239 ], [ 70.0430428, 21.1612424 ], [ 70.0429086, 21.1617581 ], [ 70.042365, 21.162534 ], [ 70.0412743, 21.1635707 ], [ 70.0410035, 21.1640872 ], [ 70.0399128, 21.1651239 ], [ 70.0396419, 21.1656406 ], [ 70.0382785, 21.1669362 ], [ 70.0380075, 21.1674529 ], [ 70.036104, 21.1700394 ], [ 70.0354236, 21.170816 ], [ 70.0348748, 21.1708194 ], [ 70.0344696, 21.1718517 ], [ 70.0336516, 21.1726292 ], [ 70.0331078, 21.1734049 ], [ 70.0329748, 21.1739207 ], [ 70.0324265, 21.1740524 ], [ 70.0302439, 21.1759972 ], [ 70.0301097, 21.176513 ], [ 70.0295643, 21.1770312 ], [ 70.0291585, 21.1778061 ], [ 70.0286102, 21.1779379 ], [ 70.028064, 21.1783278 ], [ 70.0275238, 21.1796185 ], [ 70.0261547, 21.1801418 ], [ 70.0261602, 21.1809141 ], [ 70.0256119, 21.1810458 ], [ 70.0245183, 21.1816965 ], [ 70.0243841, 21.1822123 ], [ 70.0237037, 21.1829889 ], [ 70.0231555, 21.1831204 ], [ 70.0215191, 21.1846753 ], [ 70.0209708, 21.1848078 ], [ 70.0208366, 21.1853236 ], [ 70.0204289, 21.1858409 ], [ 70.019607, 21.1861034 ], [ 70.0193395, 21.187135 ], [ 70.0187914, 21.1872665 ], [ 70.0179723, 21.1879156 ], [ 70.0179757, 21.1884306 ], [ 70.0174267, 21.1884338 ], [ 70.0172925, 21.1889496 ], [ 70.0164741, 21.1897269 ], [ 70.0162033, 21.1902437 ], [ 70.0152498, 21.1912792 ], [ 70.0147017, 21.1914107 ], [ 70.0141553, 21.1918008 ], [ 70.0141587, 21.1923157 ], [ 70.0136096, 21.1923191 ], [ 70.0133403, 21.193093 ], [ 70.0127922, 21.1932246 ], [ 70.0122458, 21.1936147 ], [ 70.0125238, 21.1941278 ], [ 70.0119748, 21.1941312 ], [ 70.0117055, 21.1949052 ], [ 70.0106091, 21.1951692 ], [ 70.0106144, 21.1959416 ], [ 70.0100661, 21.1960732 ], [ 70.0092468, 21.1967222 ], [ 70.0091126, 21.197238 ], [ 70.0082942, 21.1980153 ], [ 70.0074775, 21.1990501 ], [ 70.007346, 21.1998233 ], [ 70.0067977, 21.1999549 ], [ 70.0059776, 21.2004748 ], [ 70.005431, 21.2008647 ], [ 70.0054363, 21.2016371 ], [ 70.004888, 21.2017687 ], [ 70.0035231, 21.202936 ], [ 70.0036633, 21.20345 ], [ 70.0032555, 21.2039673 ], [ 70.0027072, 21.2040989 ], [ 70.0021608, 21.2044888 ], [ 70.0021659, 21.2052612 ], [ 70.0013432, 21.2053945 ], [ 70.0005238, 21.2060435 ], [ 70.0002579, 21.2073325 ], [ 69.999436, 21.2075948 ], [ 69.9994394, 21.2081096 ], [ 69.9988911, 21.2082412 ], [ 69.9980718, 21.2088902 ], [ 69.9979374, 21.209406 ], [ 69.9975295, 21.2099235 ], [ 69.9969805, 21.2099267 ], [ 69.9965751, 21.210959 ], [ 69.9949379, 21.2125135 ], [ 69.9946667, 21.2130301 ], [ 69.9933025, 21.2143255 ], [ 69.9930313, 21.214842 ], [ 69.9923505, 21.2156184 ], [ 69.9918015, 21.2156216 ], [ 69.9918049, 21.2161367 ], [ 69.9912557, 21.2161399 ], [ 69.9913959, 21.216654 ], [ 69.9903044, 21.2176902 ], [ 69.9900334, 21.218207 ], [ 69.9881232, 21.2200204 ], [ 69.987852, 21.220537 ], [ 69.9870334, 21.2213143 ], [ 69.9866289, 21.2223464 ], [ 69.9860805, 21.222478 ], [ 69.985261, 21.223127 ], [ 69.9851283, 21.2239002 ], [ 69.9847204, 21.2244175 ], [ 69.9841719, 21.224549 ], [ 69.9833524, 21.2251979 ], [ 69.9832198, 21.2259711 ], [ 69.9828119, 21.2264886 ], [ 69.9822627, 21.2264916 ], [ 69.9821283, 21.2270074 ], [ 69.981449, 21.2280412 ], [ 69.9809007, 21.2281727 ], [ 69.980081, 21.2288218 ], [ 69.9796754, 21.2298539 ], [ 69.9789947, 21.2306303 ], [ 69.9784462, 21.2307619 ], [ 69.9778996, 21.2311518 ], [ 69.9776301, 21.2319257 ], [ 69.9770808, 21.2319289 ], [ 69.9769465, 21.2324445 ], [ 69.9766736, 21.2327036 ], [ 69.9765418, 21.2334768 ], [ 69.9759933, 21.2336084 ], [ 69.9754475, 21.2341264 ], [ 69.974899, 21.2342587 ], [ 69.9747646, 21.2347745 ], [ 69.9742205, 21.2355502 ], [ 69.9728559, 21.2368454 ], [ 69.9725847, 21.2373619 ], [ 69.9717658, 21.2381391 ], [ 69.9716324, 21.2386549 ], [ 69.9710831, 21.2386581 ], [ 69.9710865, 21.2391729 ], [ 69.9705373, 21.2391761 ], [ 69.9705407, 21.239691 ], [ 69.9699922, 21.2398225 ], [ 69.9691725, 21.2404714 ], [ 69.9690381, 21.2409871 ], [ 69.9679463, 21.2420232 ], [ 69.9678129, 21.242539 ], [ 69.9672636, 21.2425422 ], [ 69.967267, 21.2430571 ], [ 69.9664447, 21.2433194 ], [ 69.9663103, 21.243835 ], [ 69.9657643, 21.244353 ], [ 69.9656308, 21.2448688 ], [ 69.9650824, 21.2450004 ], [ 69.9645356, 21.2453901 ], [ 69.9644012, 21.2459059 ], [ 69.9637218, 21.2469397 ], [ 69.9628996, 21.2472018 ], [ 69.962765, 21.2477176 ], [ 69.9622209, 21.2484931 ], [ 69.9618127, 21.2490104 ], [ 69.9612634, 21.2490136 ], [ 69.9609954, 21.250045 ], [ 69.9604462, 21.2500482 ], [ 69.9603116, 21.2505638 ], [ 69.9597656, 21.2510818 ], [ 69.9593593, 21.2518567 ], [ 69.9588098, 21.2518597 ], [ 69.9589501, 21.252374 ], [ 69.9581311, 21.253151 ], [ 69.9575885, 21.2541841 ], [ 69.9562236, 21.2554793 ], [ 69.9559539, 21.2562532 ], [ 69.9548618, 21.2572893 ], [ 69.9543192, 21.2583222 ], [ 69.9532272, 21.2593583 ], [ 69.9529558, 21.2598748 ], [ 69.9518637, 21.2609109 ], [ 69.9515923, 21.2614275 ], [ 69.950092, 21.2629809 ], [ 69.9495428, 21.2629839 ], [ 69.9495494, 21.2640138 ], [ 69.9487269, 21.2642759 ], [ 69.9484589, 21.2653075 ], [ 69.9476365, 21.2655694 ], [ 69.9476397, 21.2660844 ], [ 69.9470913, 21.2662158 ], [ 69.9465452, 21.2667338 ], [ 69.9459966, 21.2668661 ], [ 69.9461368, 21.2673802 ], [ 69.9447717, 21.2686754 ], [ 69.9445003, 21.2691918 ], [ 69.9423158, 21.271264 ], [ 69.9420444, 21.2717803 ], [ 69.9390408, 21.2746295 ], [ 69.9387694, 21.275146 ], [ 69.9376772, 21.276182 ], [ 69.9374058, 21.2766985 ], [ 69.9360404, 21.2779935 ], [ 69.9357688, 21.2785099 ], [ 69.9344035, 21.2798049 ], [ 69.9341321, 21.2803214 ], [ 69.9324937, 21.2818754 ], [ 69.9318138, 21.282909 ], [ 69.9309913, 21.283171 ], [ 69.9309945, 21.283686 ], [ 69.9304459, 21.2838174 ], [ 69.9301727, 21.2840763 ], [ 69.9298996, 21.2843354 ], [ 69.9279872, 21.28602 ], [ 69.9278526, 21.2865358 ], [ 69.9273064, 21.2870536 ], [ 69.9271727, 21.2875694 ], [ 69.9266233, 21.2875724 ], [ 69.9264888, 21.288088 ], [ 69.9259441, 21.2888635 ], [ 69.9248516, 21.2898994 ], [ 69.92458, 21.2904159 ], [ 69.9232145, 21.2917108 ], [ 69.9229429, 21.2922273 ], [ 69.9221236, 21.2930043 ], [ 69.9218522, 21.2935206 ], [ 69.9210327, 21.2942976 ], [ 69.920488, 21.2950731 ], [ 69.9202181, 21.295847 ], [ 69.9198097, 21.2963641 ], [ 69.919261, 21.2964955 ], [ 69.9187141, 21.296885 ], [ 69.918581, 21.2976582 ], [ 69.9176262, 21.2986934 ], [ 69.9170767, 21.2986964 ], [ 69.9168084, 21.2997278 ], [ 69.9162597, 21.2998591 ], [ 69.9154394, 21.3005078 ], [ 69.9151728, 21.3017966 ], [ 69.9146241, 21.3019277 ], [ 69.9140769, 21.3023174 ], [ 69.9140802, 21.3028325 ], [ 69.9135305, 21.3028353 ], [ 69.9133975, 21.3036085 ], [ 69.9113533, 21.3061944 ], [ 69.9108046, 21.3063258 ], [ 69.9102574, 21.3067153 ], [ 69.9101227, 21.3072311 ], [ 69.9095763, 21.3077489 ], [ 69.9094442, 21.3085221 ], [ 69.9088947, 21.3085251 ], [ 69.90876, 21.3090407 ], [ 69.9079405, 21.3098177 ], [ 69.9071225, 21.3108521 ], [ 69.9067156, 21.3116266 ], [ 69.9061669, 21.311758 ], [ 69.9056198, 21.3121475 ], [ 69.905485, 21.3126633 ], [ 69.904667, 21.3136975 ], [ 69.9045347, 21.3144707 ], [ 69.903986, 21.3146019 ], [ 69.9034389, 21.3149916 ], [ 69.9034419, 21.3155064 ], [ 69.9028925, 21.3155095 ], [ 69.9027577, 21.3160252 ], [ 69.9023491, 21.3165423 ], [ 69.9017997, 21.3165452 ], [ 69.9016649, 21.317061 ], [ 69.9013916, 21.3173199 ], [ 69.9013949, 21.3178349 ], [ 69.9009862, 21.318352 ], [ 69.9001635, 21.318614 ], [ 69.8996218, 21.3199043 ], [ 69.899073, 21.3200354 ], [ 69.8982525, 21.3206839 ], [ 69.8982557, 21.3211989 ], [ 69.8977061, 21.3212019 ], [ 69.8974378, 21.3222331 ], [ 69.8966133, 21.3222377 ], [ 69.8964786, 21.3227533 ], [ 69.8956589, 21.32353 ], [ 69.8955251, 21.3240458 ], [ 69.8949755, 21.3240487 ], [ 69.8948407, 21.3245644 ], [ 69.8942943, 21.3250823 ], [ 69.8941605, 21.3255979 ], [ 69.8936109, 21.3256009 ], [ 69.893443082787201, 21.326027132596085 ], [ 69.8932045, 21.3266331 ], [ 69.8921115, 21.3276688 ], [ 69.8919777, 21.3281844 ], [ 69.8914281, 21.3281874 ], [ 69.8910233, 21.3294769 ], [ 69.8899303, 21.3305127 ], [ 69.88966, 21.3312864 ], [ 69.8892514, 21.3318035 ], [ 69.8881537, 21.3320668 ], [ 69.8881584, 21.3328392 ], [ 69.8876096, 21.3329704 ], [ 69.8862425, 21.3341369 ], [ 69.8863811, 21.3343936 ], [ 69.8863841, 21.3349086 ], [ 69.8862488, 21.3351668 ], [ 69.8856992, 21.3351696 ], [ 69.8854289, 21.3359436 ], [ 69.8848793, 21.3359464 ], [ 69.884746, 21.3367196 ], [ 69.8840641, 21.3374956 ], [ 69.8832412, 21.3377574 ], [ 69.8828347, 21.3387895 ], [ 69.8821528, 21.3395656 ], [ 69.8813299, 21.3398273 ], [ 69.8811964, 21.3406005 ], [ 69.8801034, 21.3416361 ], [ 69.8795599, 21.3426689 ], [ 69.87874, 21.3434455 ], [ 69.8786062, 21.3439613 ], [ 69.8780564, 21.3439642 ], [ 69.8779216, 21.3444798 ], [ 69.8772397, 21.3452558 ], [ 69.8764166, 21.3455176 ], [ 69.8762834, 21.3462908 ], [ 69.875328, 21.3473257 ], [ 69.8747784, 21.3473286 ], [ 69.8742363, 21.3486189 ], [ 69.8736875, 21.3487498 ], [ 69.8731401, 21.3491394 ], [ 69.8727334, 21.3501715 ], [ 69.8723248, 21.3506886 ], [ 69.871775, 21.3506914 ], [ 69.8720543, 21.3514624 ], [ 69.8712314, 21.3517241 ], [ 69.8710964, 21.3522399 ], [ 69.8706878, 21.352757 ], [ 69.8698647, 21.3530188 ], [ 69.869596, 21.35405 ], [ 69.8690464, 21.3540528 ], [ 69.8686396, 21.3550849 ], [ 69.8682308, 21.355602 ], [ 69.8676812, 21.3556049 ], [ 69.8675463, 21.3561205 ], [ 69.8669997, 21.3566383 ], [ 69.8665924, 21.3574128 ], [ 69.8660426, 21.3574157 ], [ 69.8663206, 21.3579292 ], [ 69.8657716, 21.3580603 ], [ 69.8652242, 21.3584499 ], [ 69.8649538, 21.3592236 ], [ 69.8644041, 21.3592265 ], [ 69.8644072, 21.3597415 ], [ 69.8638574, 21.3597443 ], [ 69.8637224, 21.3602599 ], [ 69.8629039, 21.3612941 ], [ 69.8626336, 21.3620679 ], [ 69.8623603, 21.3623268 ], [ 69.8622263, 21.3628424 ], [ 69.8616765, 21.3628453 ], [ 69.8616795, 21.3633603 ], [ 69.8611299, 21.3633631 ], [ 69.860995, 21.3638787 ], [ 69.8604482, 21.3643964 ], [ 69.8603144, 21.3649122 ], [ 69.8597646, 21.364915 ], [ 69.8597676, 21.3654298 ], [ 69.8592178, 21.3654327 ], [ 69.8590829, 21.3659485 ], [ 69.8588096, 21.3662072 ], [ 69.8586756, 21.366723 ], [ 69.8578525, 21.3669846 ], [ 69.8577175, 21.3675003 ], [ 69.8570369, 21.3685336 ], [ 69.8564879, 21.3686648 ], [ 69.8559403, 21.3690543 ], [ 69.8558054, 21.3695699 ], [ 69.8547119, 21.3706054 ], [ 69.8538933, 21.3716394 ], [ 69.8538961, 21.3721545 ], [ 69.853214, 21.3729303 ], [ 69.852665, 21.3730615 ], [ 69.8521174, 21.3734508 ], [ 69.8519825, 21.3739666 ], [ 69.8506155, 21.3752609 ], [ 69.8499362, 21.3765517 ], [ 69.8493864, 21.3765546 ], [ 69.8489795, 21.3775865 ], [ 69.8476124, 21.3788808 ], [ 69.84748, 21.379654 ], [ 69.8469302, 21.3796568 ], [ 69.8466597, 21.3804306 ], [ 69.8461106, 21.3805616 ], [ 69.8455629, 21.3809511 ], [ 69.845703, 21.3814654 ], [ 69.845294, 21.3819823 ], [ 69.8447449, 21.3821134 ], [ 69.8439239, 21.3827617 ], [ 69.8439298, 21.3837916 ], [ 69.8428324, 21.384183 ], [ 69.8422849, 21.3845723 ], [ 69.8421513, 21.3853455 ], [ 69.8407841, 21.3866398 ], [ 69.8406516, 21.3874128 ], [ 69.8401025, 21.387544 ], [ 69.839008, 21.388451 ], [ 69.8388729, 21.3889666 ], [ 69.8375057, 21.3902608 ], [ 69.8369617, 21.3912935 ], [ 69.8355945, 21.3925878 ], [ 69.8353225, 21.3931042 ], [ 69.8339551, 21.3943982 ], [ 69.8330022, 21.395948 ], [ 69.8324524, 21.3959507 ], [ 69.8320453, 21.3969826 ], [ 69.8317718, 21.3972416 ], [ 69.8316378, 21.3977572 ], [ 69.8310886, 21.3978881 ], [ 69.8302673, 21.3985364 ], [ 69.8302704, 21.3990512 ], [ 69.8294469, 21.3993128 ], [ 69.8293133, 21.400086 ], [ 69.8282193, 21.4011214 ], [ 69.8280853, 21.4016369 ], [ 69.8275355, 21.4016398 ], [ 69.8275384, 21.4021546 ], [ 69.8269884, 21.4021573 ], [ 69.8268534, 21.402673 ], [ 69.826033, 21.4034495 ], [ 69.8257608, 21.4039658 ], [ 69.8243934, 21.4052599 ], [ 69.8231666, 21.4070684 ], [ 69.8226168, 21.4070711 ], [ 69.8228946, 21.4075846 ], [ 69.8223454, 21.4077156 ], [ 69.8217977, 21.4081051 ], [ 69.8216626, 21.4086207 ], [ 69.8212536, 21.4091376 ], [ 69.8207036, 21.4091402 ], [ 69.8205686, 21.409656 ], [ 69.820023, 21.4104311 ], [ 69.8192023, 21.4112075 ], [ 69.8190683, 21.4117231 ], [ 69.8185184, 21.4117258 ], [ 69.8185227, 21.4124982 ], [ 69.8176992, 21.4127598 ], [ 69.8177021, 21.4132748 ], [ 69.8171521, 21.4132775 ], [ 69.816745, 21.4143094 ], [ 69.8155151, 21.4156027 ], [ 69.8149653, 21.4156054 ], [ 69.8148315, 21.4163786 ], [ 69.8142846, 21.416896 ], [ 69.8141504, 21.4174118 ], [ 69.8133269, 21.4176732 ], [ 69.8131918, 21.4181888 ], [ 69.8125106, 21.4192221 ], [ 69.8119606, 21.4192247 ], [ 69.8115533, 21.4202567 ], [ 69.8107327, 21.4210331 ], [ 69.8105985, 21.4215487 ], [ 69.8100485, 21.4215513 ], [ 69.8095057, 21.4228414 ], [ 69.8089565, 21.4229724 ], [ 69.8084086, 21.4233617 ], [ 69.8082734, 21.4238773 ], [ 69.8077263, 21.424395 ], [ 69.8075921, 21.4249106 ], [ 69.8070428, 21.4250416 ], [ 69.8064951, 21.4254307 ], [ 69.8060876, 21.4264627 ], [ 69.8051315, 21.4274972 ], [ 69.8045815, 21.4274999 ], [ 69.804312, 21.4285311 ], [ 69.8037622, 21.4285337 ], [ 69.8040398, 21.4290474 ], [ 69.8032148, 21.4290514 ], [ 69.8028075, 21.4300831 ], [ 69.8017132, 21.4311185 ], [ 69.8013069, 21.4321502 ], [ 69.8002082, 21.4324129 ], [ 69.8002124, 21.4331854 ], [ 69.7996624, 21.433188 ], [ 69.7996667, 21.4339605 ], [ 69.7991173, 21.4340915 ], [ 69.7980222, 21.4349983 ], [ 69.7980264, 21.4357707 ], [ 69.7972027, 21.4360321 ], [ 69.7970676, 21.4365477 ], [ 69.7969321, 21.4368059 ], [ 69.7963819, 21.4368085 ], [ 69.7962483, 21.4375815 ], [ 69.7952918, 21.4386161 ], [ 69.7947418, 21.4386188 ], [ 69.7944723, 21.4396499 ], [ 69.7939223, 21.4396526 ], [ 69.7936514, 21.4404262 ], [ 69.7928278, 21.4406876 ], [ 69.7926926, 21.4412033 ], [ 69.7921453, 21.4417208 ], [ 69.7920111, 21.4422364 ], [ 69.7911874, 21.4424978 ], [ 69.7910536, 21.4432708 ], [ 69.7906443, 21.4437877 ], [ 69.790095, 21.4439187 ], [ 69.7895469, 21.4443079 ], [ 69.7894131, 21.4450811 ], [ 69.7890039, 21.445598 ], [ 69.7884537, 21.4456004 ], [ 69.7884566, 21.4461154 ], [ 69.7879066, 21.4461181 ], [ 69.7879107, 21.4468905 ], [ 69.7873613, 21.4470213 ], [ 69.7865403, 21.4477977 ], [ 69.7859911, 21.4479295 ], [ 69.7858557, 21.4484451 ], [ 69.7847612, 21.4494802 ], [ 69.7844889, 21.4499964 ], [ 69.7836692, 21.4510302 ], [ 69.7828484, 21.4518064 ], [ 69.78203, 21.4530977 ], [ 69.7812105, 21.4541315 ], [ 69.7799801, 21.4554246 ], [ 69.7794299, 21.4554271 ], [ 69.7797078, 21.4559408 ], [ 69.7791576, 21.4559434 ], [ 69.7790225, 21.456459 ], [ 69.7782014, 21.4572353 ], [ 69.7780671, 21.4577509 ], [ 69.7775169, 21.4577535 ], [ 69.7773817, 21.4582691 ], [ 69.7760132, 21.4595628 ], [ 69.7753315, 21.4605959 ], [ 69.7747815, 21.4605985 ], [ 69.7747841, 21.4611134 ], [ 69.7742341, 21.461116 ], [ 69.7738265, 21.4621478 ], [ 69.7727316, 21.4631827 ], [ 69.7708199, 21.4657665 ], [ 69.7705475, 21.4662827 ], [ 69.7697263, 21.4670589 ], [ 69.7694539, 21.4675751 ], [ 69.7680854, 21.4688688 ], [ 69.768088, 21.4693838 ], [ 69.7682273, 21.4696407 ], [ 69.7674008, 21.469387 ], [ 69.7671325, 21.4706756 ], [ 69.7665817, 21.470549 ], [ 69.7657598, 21.4711969 ], [ 69.7656244, 21.4717125 ], [ 69.7649414, 21.4724881 ], [ 69.7641173, 21.4727493 ], [ 69.763982, 21.4732649 ], [ 69.7630251, 21.4742991 ], [ 69.7622013, 21.4745605 ], [ 69.7622039, 21.4750754 ], [ 69.7616545, 21.4752061 ], [ 69.7605589, 21.4761128 ], [ 69.7604249, 21.476886 ], [ 69.7594678, 21.4779202 ], [ 69.7589176, 21.4779226 ], [ 69.7587836, 21.4786958 ], [ 69.7578267, 21.47973 ], [ 69.7570026, 21.4799912 ], [ 69.7567329, 21.4810224 ], [ 69.7561833, 21.4811532 ], [ 69.7553614, 21.4818011 ], [ 69.755226, 21.4823167 ], [ 69.7549524, 21.4825754 ], [ 69.7548178, 21.483091 ], [ 69.7537188, 21.4833534 ], [ 69.7535861, 21.484384 ], [ 69.7530385, 21.4849013 ], [ 69.7529042, 21.4854169 ], [ 69.7520801, 21.4856781 ], [ 69.7518102, 21.4867092 ], [ 69.7512608, 21.48684 ], [ 69.750165, 21.4877467 ], [ 69.7496214, 21.4890364 ], [ 69.7490718, 21.4891672 ], [ 69.7485235, 21.4895563 ], [ 69.7483895, 21.4903294 ], [ 69.7470204, 21.4916231 ], [ 69.7466122, 21.4923972 ], [ 69.7457881, 21.4926584 ], [ 69.7457908, 21.4931734 ], [ 69.7452406, 21.4931759 ], [ 69.7451051, 21.4936915 ], [ 69.7438741, 21.4949842 ], [ 69.7433239, 21.4949867 ], [ 69.7431898, 21.4957599 ], [ 69.7425063, 21.4965354 ], [ 69.741681, 21.4965389 ], [ 69.7416836, 21.497054 ], [ 69.7411334, 21.4970564 ], [ 69.7414111, 21.4975701 ], [ 69.740587, 21.4978313 ], [ 69.7405897, 21.4983462 ], [ 69.7400395, 21.4983486 ], [ 69.7394957, 21.4996385 ], [ 69.7389461, 21.4997691 ], [ 69.738124, 21.500417 ], [ 69.7381264, 21.5009319 ], [ 69.7375763, 21.5009343 ], [ 69.7374408, 21.5014499 ], [ 69.7366194, 21.502226 ], [ 69.736073, 21.5030009 ], [ 69.7359384, 21.5035164 ], [ 69.7351144, 21.5037776 ], [ 69.7348456, 21.5050662 ], [ 69.734296, 21.5051968 ], [ 69.7332, 21.5061033 ], [ 69.7334816, 21.5073896 ], [ 69.7332058, 21.5072615 ], [ 69.7326555, 21.5072639 ], [ 69.7321077, 21.5077814 ], [ 69.7315581, 21.507913 ], [ 69.7311501, 21.5089447 ], [ 69.7307403, 21.5094614 ], [ 69.7296411, 21.5097238 ], [ 69.7295082, 21.5107542 ], [ 69.7293723, 21.5110124 ], [ 69.728822, 21.5110148 ], [ 69.7288246, 21.5115297 ], [ 69.728275, 21.5116605 ], [ 69.7277265, 21.5120494 ], [ 69.727591, 21.512565 ], [ 69.7264956, 21.5135998 ], [ 69.726223, 21.5141159 ], [ 69.7248535, 21.5154093 ], [ 69.7238987, 21.5169583 ], [ 69.7233489, 21.5170889 ], [ 69.7225268, 21.5177368 ], [ 69.7223911, 21.5182522 ], [ 69.7212956, 21.519287 ], [ 69.7211624, 21.52006 ], [ 69.7206126, 21.5201906 ], [ 69.7195164, 21.521097 ], [ 69.7195202, 21.5218695 ], [ 69.7189703, 21.5220001 ], [ 69.7178741, 21.5229065 ], [ 69.7174659, 21.5239383 ], [ 69.7160964, 21.5252314 ], [ 69.7158237, 21.5257476 ], [ 69.7144542, 21.5270409 ], [ 69.7141828, 21.5278145 ], [ 69.713499, 21.5285899 ], [ 69.7126748, 21.528851 ], [ 69.7125417, 21.5298814 ], [ 69.7117199, 21.5306574 ], [ 69.7114472, 21.5311736 ], [ 69.7095296, 21.5329842 ], [ 69.7092569, 21.5335002 ], [ 69.7082992, 21.5345342 ], [ 69.7077489, 21.5345366 ], [ 69.7073406, 21.5355682 ], [ 69.7069307, 21.5360849 ], [ 69.7061064, 21.5363459 ], [ 69.7059707, 21.5368615 ], [ 69.7050131, 21.5378955 ], [ 69.7044633, 21.5380261 ], [ 69.7039146, 21.5384151 ], [ 69.7036432, 21.5391887 ], [ 69.7030934, 21.5393193 ], [ 69.7017235, 21.5406124 ], [ 69.7006258, 21.5412613 ], [ 69.7004903, 21.5417769 ], [ 69.6998063, 21.5425521 ], [ 69.6989819, 21.5428131 ], [ 69.6987105, 21.5435867 ], [ 69.6970617, 21.5441085 ], [ 69.6969273, 21.5448816 ], [ 69.6965173, 21.5453983 ], [ 69.6954177, 21.5456602 ], [ 69.6951475, 21.5466914 ], [ 69.6945963, 21.5465644 ], [ 69.6937725, 21.5469547 ], [ 69.6935009, 21.5477283 ], [ 69.6926759, 21.5478598 ], [ 69.691854, 21.5486359 ], [ 69.6910307, 21.5491541 ], [ 69.6902057, 21.5492868 ], [ 69.690208, 21.5498018 ], [ 69.6896581, 21.5499324 ], [ 69.6893841, 21.5501909 ], [ 69.6882851, 21.5505822 ], [ 69.6880148, 21.5516132 ], [ 69.6866398, 21.5518764 ], [ 69.6863694, 21.5529074 ], [ 69.6858196, 21.553038 ], [ 69.6849968, 21.5536856 ], [ 69.6847252, 21.5544591 ], [ 69.6838995, 21.5544625 ], [ 69.6836279, 21.5552361 ], [ 69.6830774, 21.5552384 ], [ 69.6830811, 21.5560108 ], [ 69.6825311, 21.5561412 ], [ 69.681983, 21.5566585 ], [ 69.6814332, 21.5567899 ], [ 69.6814368, 21.5575623 ], [ 69.680887, 21.5576929 ], [ 69.6803389, 21.5582102 ], [ 69.6797889, 21.5583416 ], [ 69.6796532, 21.5588572 ], [ 69.6740748, 21.5642463 ], [ 69.672307106250003, 21.565771872817393 ], [ 69.6679574, 21.5695258 ], [ 69.6621337, 21.5759428 ], [ 69.6573223, 21.581348 ], [ 69.6526253, 21.5867054 ], [ 69.6483431, 21.5913925 ], [ 69.6453334, 21.5942592 ], [ 69.6443057, 21.5958974 ], [ 69.6412225, 21.5990826 ], [ 69.6383841, 21.6018127 ], [ 69.6355701, 21.6047703 ], [ 69.6329519, 21.607614 ], [ 69.6306028, 21.609707 ], [ 69.6284495, 21.6118227 ], [ 69.6264913, 21.61391 ], [ 69.6225406, 21.6179486 ], [ 69.6177656, 21.6229888 ], [ 69.6135875, 21.6270578 ], [ 69.609475, 21.630207406269687 ], [ 69.60945686766037, 21.630221293134266 ], [ 69.609275, 21.630360578611075 ], [ 69.6089206, 21.630632 ], [ 69.6078423, 21.6320133 ], [ 69.6068875, 21.6327912 ], [ 69.6051347, 21.6344533 ], [ 69.6042044, 21.6350279 ], [ 69.6035434, 21.635392 ], [ 69.603066, 21.6357846 ], [ 69.6030263, 21.6358325 ], [ 69.6026131, 21.6363308 ], [ 69.6024233, 21.6368826 ], [ 69.6022887, 21.6372638 ], [ 69.6019805, 21.6373969 ], [ 69.6005566, 21.6375198 ], [ 69.5985638, 21.6379986 ], [ 69.5968035, 21.638272 ], [ 69.59594, 21.6384447 ], [ 69.595306, 21.638343 ], [ 69.5947604, 21.6382186 ], [ 69.5939211, 21.6379005 ], [ 69.5935623, 21.6380066 ], [ 69.5923208, 21.6382729 ], [ 69.591716, 21.6386576 ], [ 69.5915568, 21.639131 ], [ 69.5905062, 21.6392467 ], [ 69.5903423, 21.6385665 ], [ 69.5898378, 21.637977 ], [ 69.5897105, 21.637178 ], [ 69.5904745, 21.6367046 ], [ 69.5914932, 21.6362016 ], [ 69.5923845, 21.6356689 ], [ 69.5928302, 21.6350475 ], [ 69.5929575, 21.6343669 ], [ 69.5929333, 21.6339596 ], [ 69.592671, 21.6333608 ], [ 69.5916523, 21.6311711 ], [ 69.592098, 21.6309344 ], [ 69.591716, 21.630017 ], [ 69.5912385, 21.630165 ], [ 69.5896468, 21.6271466 ], [ 69.5899333, 21.6270282 ], [ 69.5892343, 21.6255477 ], [ 69.5889303, 21.625553 ], [ 69.5885645, 21.6246608 ], [ 69.5886918, 21.6238914 ], [ 69.5888192, 21.6238026 ], [ 69.589567, 21.6207686 ], [ 69.5893571, 21.6207176 ], [ 69.589324, 21.620823 ], [ 69.588851, 21.6206065 ], [ 69.5889147, 21.6198963 ], [ 69.590952, 21.6179727 ], [ 69.591334, 21.6177951 ], [ 69.5913658, 21.6175288 ], [ 69.5911748, 21.6172624 ], [ 69.5909202, 21.617292 ], [ 69.5905382, 21.6179135 ], [ 69.5888828, 21.6195412 ], [ 69.5885008, 21.6202514 ], [ 69.5876413, 21.6232404 ], [ 69.587705, 21.6241281 ], [ 69.5879915, 21.6248976 ], [ 69.591389, 21.6314749 ], [ 69.5919021, 21.6325104 ], [ 69.591694, 21.6330679 ], [ 69.5910024, 21.6336767 ], [ 69.5896804, 21.6349568 ], [ 69.5887562, 21.6355257 ], [ 69.5874709, 21.6363393 ], [ 69.5870683, 21.6365566 ], [ 69.5847127, 21.6379178 ], [ 69.5805425, 21.6406105 ], [ 69.5776138, 21.6427113 ], [ 69.5742077, 21.645108 ], [ 69.5694963, 21.6488361 ], [ 69.5662175, 21.6516174 ], [ 69.5629387, 21.6544577 ], [ 69.5608441, 21.6561149 ], [ 69.5609832, 21.6563719 ], [ 69.5604328, 21.6565019 ], [ 69.5582368, 21.6584411 ], [ 69.5581005, 21.6589565 ], [ 69.5574154, 21.6597312 ], [ 69.5565901, 21.6599914 ], [ 69.5564538, 21.6605068 ], [ 69.5554942, 21.6615401 ], [ 69.5549439, 21.6616701 ], [ 69.5543948, 21.6621871 ], [ 69.5530197, 21.6627066 ], [ 69.552745, 21.662965 ], [ 69.5521947, 21.663096 ], [ 69.5520595, 21.663869 ], [ 69.5510998, 21.664902 ], [ 69.5505489, 21.6649039 ], [ 69.5504126, 21.6654193 ], [ 69.5500019, 21.6659357 ], [ 69.5494515, 21.6660657 ], [ 69.5491769, 21.6663241 ], [ 69.5486265, 21.6664551 ], [ 69.5484903, 21.6669706 ], [ 69.5479412, 21.6674874 ], [ 69.5478061, 21.6680028 ], [ 69.5472555, 21.6681328 ], [ 69.5450597, 21.6702001 ], [ 69.5439592, 21.6705904 ], [ 69.5439613, 21.6711052 ], [ 69.5434107, 21.6712354 ], [ 69.5425872, 21.6720105 ], [ 69.5420372, 21.6722698 ], [ 69.5406647, 21.6735616 ], [ 69.5401147, 21.6738209 ], [ 69.5390166, 21.6748546 ], [ 69.5384667, 21.6751137 ], [ 69.5376432, 21.675889 ], [ 69.5362682, 21.6765374 ], [ 69.5361319, 21.6770528 ], [ 69.5347592, 21.6783449 ], [ 69.5340749, 21.679377 ], [ 69.5335243, 21.679507 ], [ 69.5327003, 21.6801538 ], [ 69.5324275, 21.6809272 ], [ 69.5310522, 21.6814465 ], [ 69.5311922, 21.6822186 ], [ 69.5307813, 21.6827348 ], [ 69.5302308, 21.682865 ], [ 69.5294068, 21.6835117 ], [ 69.5294086, 21.6840268 ], [ 69.5285821, 21.6840292 ], [ 69.5288594, 21.6845435 ], [ 69.528034, 21.6848035 ], [ 69.5280359, 21.6853184 ], [ 69.5274854, 21.6854486 ], [ 69.5266608, 21.6859661 ], [ 69.5261112, 21.6863545 ], [ 69.5258384, 21.6871279 ], [ 69.5252879, 21.6872579 ], [ 69.5241883, 21.6879056 ], [ 69.5239155, 21.6886788 ], [ 69.5233646, 21.6886807 ], [ 69.5233665, 21.6891955 ], [ 69.5225409, 21.6894556 ], [ 69.5222682, 21.690229 ], [ 69.5217177, 21.690359 ], [ 69.5203442, 21.6915225 ], [ 69.5202079, 21.6920379 ], [ 69.5195224, 21.6928124 ], [ 69.5189713, 21.6928141 ], [ 69.5189732, 21.6933291 ], [ 69.5181476, 21.6935892 ], [ 69.5184249, 21.6941033 ], [ 69.5173238, 21.6943643 ], [ 69.5173257, 21.6948793 ], [ 69.5167751, 21.6950092 ], [ 69.5162255, 21.6953976 ], [ 69.5160891, 21.695913 ], [ 69.5158144, 21.6961713 ], [ 69.5156791, 21.6966867 ], [ 69.5137532, 21.6974652 ], [ 69.5136167, 21.6979806 ], [ 69.5129312, 21.6987552 ], [ 69.5123801, 21.6987569 ], [ 69.5118347, 21.7003034 ], [ 69.5110085, 21.7004344 ], [ 69.5101841, 21.701081 ], [ 69.5100477, 21.7015964 ], [ 69.5090876, 21.7026293 ], [ 69.5085364, 21.702631 ], [ 69.5084009, 21.703404 ], [ 69.5079898, 21.7039201 ], [ 69.5074393, 21.7040502 ], [ 69.5068897, 21.7044386 ], [ 69.5067532, 21.704954 ], [ 69.5060675, 21.7057285 ], [ 69.505517, 21.7058583 ], [ 69.5038691, 21.7074083 ], [ 69.5033185, 21.7075393 ], [ 69.5033202, 21.7080541 ], [ 69.5027697, 21.7081842 ], [ 69.5008471, 21.7099923 ], [ 69.5000218, 21.7103815 ], [ 69.4998863, 21.7111545 ], [ 69.498926, 21.7121872 ], [ 69.4983748, 21.7121889 ], [ 69.4982391, 21.7129617 ], [ 69.4975534, 21.7137362 ], [ 69.4967268, 21.7137389 ], [ 69.4964557, 21.7150271 ], [ 69.4953548, 21.7154161 ], [ 69.4945304, 21.7160628 ], [ 69.4946686, 21.7163199 ], [ 69.494534, 21.7170927 ], [ 69.4939832, 21.7172227 ], [ 69.4931588, 21.7178693 ], [ 69.4930224, 21.7183847 ], [ 69.4923365, 21.7191592 ], [ 69.4917857, 21.7192891 ], [ 69.4912359, 21.7196775 ], [ 69.490964, 21.7207081 ], [ 69.4904132, 21.7208381 ], [ 69.489314, 21.721743 ], [ 69.4890411, 21.7225162 ], [ 69.4882153, 21.7227761 ], [ 69.4880787, 21.7232915 ], [ 69.4875302, 21.7240657 ], [ 69.4871191, 21.7245818 ], [ 69.486568, 21.7245833 ], [ 69.4862968, 21.7258715 ], [ 69.4851957, 21.7262607 ], [ 69.4838218, 21.7274238 ], [ 69.4835487, 21.728197 ], [ 69.482723, 21.7284569 ], [ 69.4824499, 21.7292303 ], [ 69.4818988, 21.7292318 ], [ 69.4819005, 21.7297468 ], [ 69.4813497, 21.7298766 ], [ 69.4805251, 21.7305232 ], [ 69.4799783, 21.7318122 ], [ 69.479427, 21.7318139 ], [ 69.4792913, 21.7325867 ], [ 69.4788802, 21.7331029 ], [ 69.4783295, 21.7332327 ], [ 69.476681, 21.7347825 ], [ 69.4761303, 21.7349131 ], [ 69.4755833, 21.7362023 ], [ 69.4750326, 21.7363321 ], [ 69.4747578, 21.7365903 ], [ 69.474207, 21.7367211 ], [ 69.4739349, 21.7377519 ], [ 69.4731086, 21.7378825 ], [ 69.4722838, 21.7385291 ], [ 69.4722864, 21.7393015 ], [ 69.4711853, 21.7396905 ], [ 69.4703609, 21.7404652 ], [ 69.4687094, 21.741114 ], [ 69.4687111, 21.741629 ], [ 69.4670583, 21.7418912 ], [ 69.4670608, 21.7426636 ], [ 69.4654085, 21.7430541 ], [ 69.4651337, 21.7433123 ], [ 69.463482, 21.7439611 ], [ 69.4634837, 21.7444761 ], [ 69.4626574, 21.7446067 ], [ 69.4623826, 21.7448649 ], [ 69.4618317, 21.7449957 ], [ 69.461695, 21.7455111 ], [ 69.4614204, 21.7457693 ], [ 69.4612847, 21.7462847 ], [ 69.4599071, 21.7464168 ], [ 69.4588071, 21.7471923 ], [ 69.4582558, 21.7471938 ], [ 69.4579799, 21.7470664 ], [ 69.4579814, 21.7475812 ], [ 69.4574306, 21.7477111 ], [ 69.4563303, 21.7483584 ], [ 69.4563318, 21.7488732 ], [ 69.4557807, 21.7488747 ], [ 69.4557822, 21.7493898 ], [ 69.4549557, 21.7495204 ], [ 69.4546797, 21.7493928 ], [ 69.4545431, 21.7499082 ], [ 69.453857, 21.7506825 ], [ 69.4533061, 21.7508124 ], [ 69.4519321, 21.7521034 ], [ 69.4511063, 21.7524924 ], [ 69.450834, 21.7535232 ], [ 69.450283, 21.7536528 ], [ 69.4500082, 21.7539112 ], [ 69.4494575, 21.7540418 ], [ 69.449459, 21.7545568 ], [ 69.4489079, 21.7545583 ], [ 69.4489094, 21.7550732 ], [ 69.4483584, 21.755203 ], [ 69.4472581, 21.7558502 ], [ 69.4469856, 21.756881 ], [ 69.4464348, 21.7570106 ], [ 69.4458846, 21.7573988 ], [ 69.445613, 21.7586871 ], [ 69.4447865, 21.7588175 ], [ 69.4442364, 21.7592057 ], [ 69.4440997, 21.7597211 ], [ 69.4436883, 21.760237 ], [ 69.4423108, 21.7604982 ], [ 69.4421749, 21.7612711 ], [ 69.4414887, 21.7620454 ], [ 69.4409377, 21.762175 ], [ 69.4403881, 21.7626916 ], [ 69.4387342, 21.7626959 ], [ 69.4368075, 21.7636028 ], [ 69.436809, 21.7641178 ], [ 69.4359822, 21.7641199 ], [ 69.4359837, 21.7646349 ], [ 69.4351568, 21.764637 ], [ 69.4351583, 21.765152 ], [ 69.4337816, 21.7656706 ], [ 69.4335083, 21.7664438 ], [ 69.4329574, 21.7665735 ], [ 69.4318567, 21.7672206 ], [ 69.4318589, 21.767993 ], [ 69.4313076, 21.7679944 ], [ 69.4315849, 21.7685086 ], [ 69.431034, 21.7686385 ], [ 69.4299332, 21.7692854 ], [ 69.4299347, 21.7698004 ], [ 69.4293834, 21.7698018 ], [ 69.4295223, 21.7703164 ], [ 69.4278729, 21.7718656 ], [ 69.4274622, 21.7726392 ], [ 69.4266361, 21.7728987 ], [ 69.4264993, 21.7734141 ], [ 69.4262243, 21.7736723 ], [ 69.4260886, 21.7741877 ], [ 69.4255376, 21.7743174 ], [ 69.4249873, 21.7747056 ], [ 69.424714, 21.7754786 ], [ 69.4241627, 21.7754801 ], [ 69.4240258, 21.7759953 ], [ 69.4236144, 21.7765115 ], [ 69.4230623, 21.7762554 ], [ 69.4229255, 21.7767706 ], [ 69.4225138, 21.7772867 ], [ 69.4216877, 21.7775462 ], [ 69.42114, 21.778835 ], [ 69.4197631, 21.7793536 ], [ 69.4197654, 21.7801261 ], [ 69.4192145, 21.7802557 ], [ 69.4183897, 21.7810303 ], [ 69.4178387, 21.7811609 ], [ 69.417566, 21.7821915 ], [ 69.4170147, 21.782193 ], [ 69.4170162, 21.7827078 ], [ 69.4161899, 21.7829675 ], [ 69.4159164, 21.7837405 ], [ 69.4153653, 21.7838702 ], [ 69.4150905, 21.7841283 ], [ 69.4145394, 21.7842589 ], [ 69.4144025, 21.7847743 ], [ 69.4131661, 21.7860648 ], [ 69.4126148, 21.7860662 ], [ 69.4126163, 21.7865812 ], [ 69.4120652, 21.7867108 ], [ 69.4101402, 21.7883897 ], [ 69.4101417, 21.7889047 ], [ 69.4098656, 21.7887762 ], [ 69.4093146, 21.7889068 ], [ 69.409316, 21.7894219 ], [ 69.408765, 21.7895515 ], [ 69.4079393, 21.7900684 ], [ 69.4073891, 21.7904564 ], [ 69.4072523, 21.7909718 ], [ 69.4065656, 21.791746 ], [ 69.4057393, 21.7920055 ], [ 69.4054672, 21.7932935 ], [ 69.4043651, 21.7935538 ], [ 69.4043664, 21.7940688 ], [ 69.4029888, 21.7943296 ], [ 69.4029909, 21.7951021 ], [ 69.4021644, 21.7953616 ], [ 69.4018909, 21.7961346 ], [ 69.4007888, 21.7963948 ], [ 69.4005159, 21.7974254 ], [ 69.3996896, 21.7976849 ], [ 69.3999667, 21.7981992 ], [ 69.3991396, 21.7982013 ], [ 69.3990026, 21.7987165 ], [ 69.398591, 21.7992325 ], [ 69.3980395, 21.7992338 ], [ 69.3980417, 21.8000062 ], [ 69.3972152, 21.8002657 ], [ 69.3969423, 21.8012963 ], [ 69.3963914, 21.801426 ], [ 69.3958412, 21.8019423 ], [ 69.3952903, 21.8020728 ], [ 69.3950174, 21.8031034 ], [ 69.3944662, 21.803233 ], [ 69.3936409, 21.8038792 ], [ 69.3937796, 21.8043937 ], [ 69.3935054, 21.8049095 ], [ 69.3926809, 21.8059414 ], [ 69.3907558, 21.8077482 ], [ 69.3903455, 21.8087792 ], [ 69.3897943, 21.8089087 ], [ 69.3889688, 21.8095549 ], [ 69.3888318, 21.8100703 ], [ 69.3882825, 21.8108439 ], [ 69.3878707, 21.8113598 ], [ 69.3873192, 21.8113612 ], [ 69.3869079, 21.8123922 ], [ 69.3866329, 21.8126501 ], [ 69.3864969, 21.8131655 ], [ 69.3859454, 21.8131669 ], [ 69.3858083, 21.8136821 ], [ 69.3852583, 21.8141984 ], [ 69.385123, 21.8149711 ], [ 69.3845715, 21.8149724 ], [ 69.3848486, 21.8154868 ], [ 69.3842971, 21.815488 ], [ 69.3841601, 21.8160034 ], [ 69.3838851, 21.8162614 ], [ 69.3832011, 21.8180654 ], [ 69.3826496, 21.8180667 ], [ 69.3825125, 21.8185821 ], [ 69.3819631, 21.8193557 ], [ 69.3805891, 21.8211614 ], [ 69.3783884, 21.8232262 ], [ 69.3777021, 21.8242578 ], [ 69.3771506, 21.8242591 ], [ 69.3770136, 21.8247743 ], [ 69.3763268, 21.8255484 ], [ 69.3757756, 21.8256779 ], [ 69.3749499, 21.8263239 ], [ 69.3745385, 21.8273549 ], [ 69.3741266, 21.8278707 ], [ 69.3732999, 21.8281302 ], [ 69.3733014, 21.828645 ], [ 69.3727501, 21.8287747 ], [ 69.3724751, 21.8290327 ], [ 69.3713729, 21.8294218 ], [ 69.3710998, 21.8304524 ], [ 69.3705487, 21.8305821 ], [ 69.3699985, 21.8310982 ], [ 69.3686214, 21.8318737 ], [ 69.3680703, 21.8320041 ], [ 69.3679333, 21.8325195 ], [ 69.3675213, 21.8330353 ], [ 69.3661438, 21.8335534 ], [ 69.36587, 21.8343264 ], [ 69.3642158, 21.8345876 ], [ 69.3642179, 21.83536 ], [ 69.3625628, 21.8352345 ], [ 69.3617362, 21.8354938 ], [ 69.3609087, 21.8354955 ], [ 69.3606337, 21.8357537 ], [ 69.3589792, 21.8358866 ], [ 69.3589811, 21.836659 ], [ 69.357051, 21.8367915 ], [ 69.3567759, 21.8370495 ], [ 69.3553979, 21.8374392 ], [ 69.3553997, 21.8382116 ], [ 69.3534685, 21.8379584 ], [ 69.3533315, 21.8384736 ], [ 69.3530563, 21.8387316 ], [ 69.3529203, 21.839247 ], [ 69.3518172, 21.8393776 ], [ 69.3512671, 21.8398937 ], [ 69.3498889, 21.8402833 ], [ 69.3497519, 21.8407985 ], [ 69.3493398, 21.8413144 ], [ 69.3482374, 21.8415741 ], [ 69.3479633, 21.8423473 ], [ 69.3474118, 21.8423485 ], [ 69.347413, 21.8428633 ], [ 69.3479647, 21.8428622 ], [ 69.3479652, 21.8431198 ], [ 69.346862, 21.843122 ], [ 69.3468634, 21.8436371 ], [ 69.3463121, 21.8437665 ], [ 69.3457617, 21.8442825 ], [ 69.3449339, 21.8441561 ], [ 69.3449352, 21.8446711 ], [ 69.3441083, 21.8449302 ], [ 69.3438356, 21.8462182 ], [ 69.342733, 21.8464779 ], [ 69.3427343, 21.846993 ], [ 69.3410807, 21.8475114 ], [ 69.3408067, 21.8482844 ], [ 69.3402554, 21.8484139 ], [ 69.3386041, 21.8499621 ], [ 69.3380531, 21.8502207 ], [ 69.3372276, 21.8509948 ], [ 69.3366761, 21.8511252 ], [ 69.3365391, 21.8516405 ], [ 69.3342004, 21.8539627 ], [ 69.3330981, 21.8543507 ], [ 69.3322724, 21.8551247 ], [ 69.330344, 21.8561585 ], [ 69.3295179, 21.8568043 ], [ 69.3295192, 21.8573193 ], [ 69.3289677, 21.8574488 ], [ 69.3281414, 21.8579653 ], [ 69.3270405, 21.8589975 ], [ 69.3264894, 21.859256 ], [ 69.3251132, 21.8605463 ], [ 69.3245612, 21.8604191 ], [ 69.3245629, 21.8611916 ], [ 69.3240116, 21.8613209 ], [ 69.3234608, 21.8617087 ], [ 69.323462, 21.8622237 ], [ 69.3229097, 21.8619672 ], [ 69.3227725, 21.8624824 ], [ 69.3223603, 21.8629982 ], [ 69.321809, 21.8631277 ], [ 69.3212582, 21.8635153 ], [ 69.3212599, 21.8642878 ], [ 69.3207084, 21.8644172 ], [ 69.3196065, 21.8650634 ], [ 69.3194693, 21.8655786 ], [ 69.3180928, 21.8668688 ], [ 69.3178182, 21.8673844 ], [ 69.3178194, 21.8678994 ], [ 69.3176825, 21.868157 ], [ 69.3171305, 21.8680288 ], [ 69.3160293, 21.869061 ], [ 69.3152021, 21.8691918 ], [ 69.314928, 21.8699648 ], [ 69.3138248, 21.8700952 ], [ 69.3135495, 21.8703532 ], [ 69.3129982, 21.8704834 ], [ 69.3129993, 21.8709984 ], [ 69.3118963, 21.8712579 ], [ 69.3118974, 21.8717729 ], [ 69.3113457, 21.8717739 ], [ 69.3113469, 21.8722889 ], [ 69.3099687, 21.8728066 ], [ 69.3098315, 21.8733218 ], [ 69.3094193, 21.8738374 ], [ 69.3083163, 21.8740971 ], [ 69.308179, 21.8746123 ], [ 69.3074915, 21.875386 ], [ 69.3066644, 21.875645 ], [ 69.3065272, 21.8761602 ], [ 69.3055642, 21.8771919 ], [ 69.3050125, 21.8771931 ], [ 69.3047383, 21.8779659 ], [ 69.3039112, 21.878225 ], [ 69.3039124, 21.87874 ], [ 69.3033607, 21.878741 ], [ 69.3032233, 21.8792562 ], [ 69.3028111, 21.879772 ], [ 69.3017081, 21.8800315 ], [ 69.3014338, 21.8808045 ], [ 69.3003312, 21.8811921 ], [ 69.2992293, 21.8819666 ], [ 69.2986778, 21.8820969 ], [ 69.2985404, 21.8826121 ], [ 69.2981282, 21.8831279 ], [ 69.2975767, 21.8832571 ], [ 69.2973013, 21.8835151 ], [ 69.2967498, 21.8836453 ], [ 69.2967515, 21.8844178 ], [ 69.2956487, 21.8848054 ], [ 69.2934457, 21.886741 ], [ 69.2930335, 21.8877718 ], [ 69.2909691, 21.8898353 ], [ 69.2901418, 21.8900942 ], [ 69.290143, 21.8906092 ], [ 69.2895913, 21.8907385 ], [ 69.2893159, 21.8909963 ], [ 69.2884886, 21.8911271 ], [ 69.2884896, 21.8916419 ], [ 69.2868353, 21.8921598 ], [ 69.2868362, 21.8926748 ], [ 69.2860091, 21.8929338 ], [ 69.2860101, 21.8934488 ], [ 69.2851825, 21.8934501 ], [ 69.284908, 21.8942231 ], [ 69.2835297, 21.8947404 ], [ 69.2832552, 21.8955134 ], [ 69.2827037, 21.8956427 ], [ 69.2824284, 21.8959007 ], [ 69.2818767, 21.8960307 ], [ 69.2817393, 21.8965459 ], [ 69.2800868, 21.8980936 ], [ 69.2799504, 21.8986089 ], [ 69.2793989, 21.8987381 ], [ 69.2788478, 21.8991258 ], [ 69.2788489, 21.8996406 ], [ 69.2782972, 21.8997699 ], [ 69.2777461, 21.9001575 ], [ 69.2776087, 21.9006727 ], [ 69.2765081, 21.9022195 ], [ 69.2756818, 21.9029933 ], [ 69.2749944, 21.9040245 ], [ 69.2744429, 21.9041537 ], [ 69.2736166, 21.9049275 ], [ 69.2730653, 21.9051859 ], [ 69.2719634, 21.9062176 ], [ 69.2714121, 21.906476 ], [ 69.2705856, 21.9071216 ], [ 69.2705866, 21.9076366 ], [ 69.2689321, 21.9081543 ], [ 69.2686574, 21.9089271 ], [ 69.2681056, 21.9089281 ], [ 69.2681067, 21.9094431 ], [ 69.2672792, 21.9097018 ], [ 69.2671418, 21.910217 ], [ 69.26604, 21.9112488 ], [ 69.265765, 21.9117642 ], [ 69.2643877, 21.9130537 ], [ 69.2642513, 21.913569 ], [ 69.2636996, 21.9136982 ], [ 69.2631487, 21.914214 ], [ 69.262597, 21.914344 ], [ 69.2625985, 21.9151167 ], [ 69.2620468, 21.9152458 ], [ 69.2617712, 21.9155038 ], [ 69.2612197, 21.9156338 ], [ 69.2610821, 21.916149 ], [ 69.2601186, 21.9171804 ], [ 69.2592914, 21.9174393 ], [ 69.2590173, 21.9184695 ], [ 69.2584656, 21.9185988 ], [ 69.257088, 21.91976 ], [ 69.2570889, 21.9202751 ], [ 69.2565372, 21.9204041 ], [ 69.2559859, 21.9207918 ], [ 69.2555733, 21.9218222 ], [ 69.2551609, 21.922338 ], [ 69.2543335, 21.9225967 ], [ 69.2543345, 21.9231116 ], [ 69.2537824, 21.9231125 ], [ 69.253645, 21.9236277 ], [ 69.2533694, 21.9238855 ], [ 69.2530939, 21.9241435 ], [ 69.2522674, 21.9249173 ], [ 69.2514412, 21.9259485 ], [ 69.2511662, 21.9264639 ], [ 69.2497886, 21.9277534 ], [ 69.2484119, 21.9295578 ], [ 69.2480003, 21.9305884 ], [ 69.2474486, 21.9307175 ], [ 69.2468975, 21.9312333 ], [ 69.2463458, 21.9313633 ], [ 69.2462082, 21.9318785 ], [ 69.2455201, 21.9326519 ], [ 69.2446926, 21.9329107 ], [ 69.2446936, 21.9334257 ], [ 69.2441415, 21.9334264 ], [ 69.2440045, 21.9341993 ], [ 69.2433163, 21.9349726 ], [ 69.2416607, 21.9351034 ], [ 69.2405581, 21.9358774 ], [ 69.2397299, 21.9357504 ], [ 69.2394556, 21.9367808 ], [ 69.2389039, 21.9369099 ], [ 69.2386284, 21.9371677 ], [ 69.2380765, 21.9372977 ], [ 69.2378022, 21.938328 ], [ 69.2372506, 21.938457 ], [ 69.236975, 21.938715 ], [ 69.2364231, 21.9388451 ], [ 69.2361489, 21.9398753 ], [ 69.2355972, 21.9400044 ], [ 69.2350459, 21.9403918 ], [ 69.2350466, 21.9409069 ], [ 69.2344949, 21.941036 ], [ 69.2333923, 21.9419392 ], [ 69.2332547, 21.9424544 ], [ 69.2328421, 21.9429698 ], [ 69.2322902, 21.9430989 ], [ 69.2317389, 21.9434863 ], [ 69.2316013, 21.9440016 ], [ 69.2306374, 21.9450329 ], [ 69.2300854, 21.9450337 ], [ 69.2300867, 21.9458061 ], [ 69.2292591, 21.9460647 ], [ 69.2292604, 21.9468371 ], [ 69.2287081, 21.9467088 ], [ 69.2284324, 21.9468383 ], [ 69.2282946, 21.9473535 ], [ 69.2269166, 21.9486428 ], [ 69.2260903, 21.949674 ], [ 69.2262296, 21.9501887 ], [ 69.2256777, 21.9503177 ], [ 69.224851, 21.9510913 ], [ 69.2242991, 21.9512214 ], [ 69.2242999, 21.9517362 ], [ 69.223748, 21.9517369 ], [ 69.2236102, 21.9522522 ], [ 69.2229219, 21.9530255 ], [ 69.2223698, 21.9530263 ], [ 69.221957, 21.9540567 ], [ 69.2212685, 21.9548301 ], [ 69.2207168, 21.9549592 ], [ 69.2204411, 21.955217 ], [ 69.2198892, 21.9552178 ], [ 69.2196133, 21.9553474 ], [ 69.2193385, 21.9561202 ], [ 69.2187864, 21.956121 ], [ 69.2186488, 21.956636 ], [ 69.2180975, 21.9571518 ], [ 69.2179606, 21.957667 ], [ 69.217133, 21.9579256 ], [ 69.2169952, 21.9584408 ], [ 69.2164445, 21.9592138 ], [ 69.2160317, 21.9597294 ], [ 69.2154796, 21.9597301 ], [ 69.2153419, 21.9602453 ], [ 69.2147909, 21.9610184 ], [ 69.2139641, 21.9617919 ], [ 69.2138272, 21.9623071 ], [ 69.2132753, 21.9623079 ], [ 69.2131376, 21.9628229 ], [ 69.2123105, 21.9635965 ], [ 69.2121738, 21.9641117 ], [ 69.2116218, 21.9641123 ], [ 69.2116225, 21.9646273 ], [ 69.2107947, 21.9648859 ], [ 69.2106569, 21.9654011 ], [ 69.2101056, 21.9659167 ], [ 69.2092791, 21.9669477 ], [ 69.2083156, 21.9684939 ], [ 69.2077635, 21.9684946 ], [ 69.2080408, 21.9692667 ], [ 69.2072126, 21.9692676 ], [ 69.206938, 21.9702981 ], [ 69.2063861, 21.970427 ], [ 69.2058346, 21.9708144 ], [ 69.2056972, 21.971587 ], [ 69.2045946, 21.9726182 ], [ 69.2041824, 21.9736487 ], [ 69.2036303, 21.9736494 ], [ 69.2034925, 21.9741646 ], [ 69.2029412, 21.9746802 ], [ 69.2023904, 21.9757108 ], [ 69.2018391, 21.9762264 ], [ 69.2008754, 21.9777726 ], [ 69.2000476, 21.978031 ], [ 69.1996346, 21.9790614 ], [ 69.1982561, 21.9803506 ], [ 69.1979807, 21.9808658 ], [ 69.197292, 21.9816392 ], [ 69.1967401, 21.9817681 ], [ 69.1961886, 21.9822837 ], [ 69.1953608, 21.9825422 ], [ 69.1945335, 21.9831873 ], [ 69.1945341, 21.9837023 ], [ 69.1939818, 21.9835738 ], [ 69.1937061, 21.9838316 ], [ 69.1931542, 21.9839614 ], [ 69.1931548, 21.9844765 ], [ 69.1923268, 21.9846057 ], [ 69.192051, 21.9848635 ], [ 69.1914991, 21.9849934 ], [ 69.1912243, 21.9860236 ], [ 69.1898446, 21.9865402 ], [ 69.18957, 21.9875704 ], [ 69.1890179, 21.9876993 ], [ 69.1881905, 21.9883445 ], [ 69.1879159, 21.9893748 ], [ 69.1873638, 21.9895037 ], [ 69.1870881, 21.9897615 ], [ 69.186536, 21.9898913 ], [ 69.1863982, 21.9904063 ], [ 69.1858471, 21.9911795 ], [ 69.1850198, 21.9919529 ], [ 69.1848828, 21.992468 ], [ 69.1843307, 21.9924685 ], [ 69.1841928, 21.9929837 ], [ 69.1837798, 21.9934991 ], [ 69.1832277, 21.9934997 ], [ 69.1830898, 21.9940149 ], [ 69.1824014, 21.9950455 ], [ 69.1818492, 21.9950463 ], [ 69.1818501, 21.9958187 ], [ 69.1810221, 21.9960771 ], [ 69.1807471, 21.9968497 ], [ 69.1801949, 21.9968505 ], [ 69.1800571, 21.9973655 ], [ 69.1797811, 21.9976233 ], [ 69.1796443, 21.9981385 ], [ 69.1790922, 21.9982674 ], [ 69.1785405, 21.9986547 ], [ 69.1782654, 21.9994273 ], [ 69.1777131, 21.9994281 ], [ 69.1775753, 21.9999431 ], [ 69.1770238, 22.0004587 ], [ 69.1768868, 22.0009737 ], [ 69.1760588, 22.0012321 ], [ 69.1757836, 22.0020049 ], [ 69.1752313, 22.0020055 ], [ 69.1750936, 22.0025207 ], [ 69.1742665, 22.0035515 ], [ 69.1720601, 22.0056137 ], [ 69.1716473, 22.0063865 ], [ 69.1708191, 22.0066448 ], [ 69.1702686, 22.0079329 ], [ 69.1697165, 22.0080618 ], [ 69.1691646, 22.008449 ], [ 69.1687511, 22.0094793 ], [ 69.1683381, 22.0099947 ], [ 69.1677859, 22.0099952 ], [ 69.1676479, 22.0105105 ], [ 69.1670966, 22.0112835 ], [ 69.1666834, 22.0117989 ], [ 69.1661312, 22.0117994 ], [ 69.1659932, 22.0123145 ], [ 69.1646141, 22.0136033 ], [ 69.1643385, 22.0141185 ], [ 69.1629594, 22.0154073 ], [ 69.1628224, 22.0159225 ], [ 69.1622701, 22.015923 ], [ 69.1621321, 22.0164381 ], [ 69.1610287, 22.0174691 ], [ 69.1607532, 22.0179843 ], [ 69.1596498, 22.0190153 ], [ 69.1589613, 22.0203035 ], [ 69.1581333, 22.0205617 ], [ 69.1579951, 22.0210769 ], [ 69.1577194, 22.0213345 ], [ 69.1573068, 22.0223649 ], [ 69.1567545, 22.0223655 ], [ 69.156647848938917, 22.022762933404149 ], [ 69.1566163, 22.0228805 ], [ 69.1557891, 22.0239113 ], [ 69.1549615, 22.0246845 ], [ 69.1546859, 22.0251997 ], [ 69.1523415, 22.0275193 ], [ 69.1517893, 22.0275197 ], [ 69.1516511, 22.0280349 ], [ 69.1497199, 22.0298391 ], [ 69.1494444, 22.0303543 ], [ 69.1487553, 22.0311273 ], [ 69.1482028, 22.0311279 ], [ 69.1477893, 22.0321581 ], [ 69.1469615, 22.0329313 ], [ 69.1466859, 22.0334466 ], [ 69.1459968, 22.0342196 ], [ 69.1454446, 22.0343485 ], [ 69.1451686, 22.0346061 ], [ 69.1446164, 22.0347359 ], [ 69.1447545, 22.0352508 ], [ 69.1440654, 22.0360238 ], [ 69.1435132, 22.0361525 ], [ 69.1429611, 22.0365397 ], [ 69.1426861, 22.0375698 ], [ 69.1421338, 22.0376987 ], [ 69.1415818, 22.0380858 ], [ 69.1414438, 22.0386008 ], [ 69.1407545, 22.039374 ], [ 69.1399263, 22.0396321 ], [ 69.1393752, 22.04092 ], [ 69.1388229, 22.0410487 ], [ 69.1382709, 22.0414358 ], [ 69.1378572, 22.0424662 ], [ 69.1367534, 22.043497 ], [ 69.1363402, 22.0442698 ], [ 69.135788, 22.0442702 ], [ 69.1357884, 22.0447852 ], [ 69.1349602, 22.0450434 ], [ 69.1348222, 22.045816 ], [ 69.1334425, 22.0471045 ], [ 69.1333053, 22.0476197 ], [ 69.1324769, 22.0478777 ], [ 69.1323389, 22.0483929 ], [ 69.1304072, 22.0501967 ], [ 69.1302699, 22.0507119 ], [ 69.1297175, 22.0507123 ], [ 69.1295795, 22.0512273 ], [ 69.1291662, 22.0517427 ], [ 69.1286137, 22.0517431 ], [ 69.1284756, 22.0522581 ], [ 69.1279239, 22.0530311 ], [ 69.12544, 22.0553503 ], [ 69.1248885, 22.0563806 ], [ 69.1237846, 22.0574114 ], [ 69.1233714, 22.0581842 ], [ 69.122819, 22.0583129 ], [ 69.1222669, 22.0587 ], [ 69.1221288, 22.059215 ], [ 69.1207487, 22.0605034 ], [ 69.1204729, 22.0610186 ], [ 69.1188169, 22.0625648 ], [ 69.1186799, 22.0633373 ], [ 69.1181276, 22.063466 ], [ 69.1172994, 22.0641107 ], [ 69.1172998, 22.0646257 ], [ 69.1164714, 22.0648839 ], [ 69.1164718, 22.0653987 ], [ 69.1156432, 22.0656569 ], [ 69.1156436, 22.0661717 ], [ 69.1148152, 22.0664299 ], [ 69.1148156, 22.0669447 ], [ 69.113987, 22.0672029 ], [ 69.1138489, 22.0677179 ], [ 69.1132968, 22.0682333 ], [ 69.1131596, 22.0687484 ], [ 69.1126071, 22.0687487 ], [ 69.1126077, 22.0695212 ], [ 69.1117793, 22.0697792 ], [ 69.1117799, 22.0705516 ], [ 69.1109513, 22.0708098 ], [ 69.1109517, 22.0713246 ], [ 69.1103994, 22.0714533 ], [ 69.1098472, 22.0718404 ], [ 69.109709, 22.0723554 ], [ 69.1091571, 22.0731282 ], [ 69.1086049, 22.0736436 ], [ 69.1086052, 22.0741587 ], [ 69.1077772, 22.0749315 ], [ 69.1075013, 22.0754467 ], [ 69.106121, 22.0767351 ], [ 69.1057079, 22.0777652 ], [ 69.1051554, 22.0777655 ], [ 69.1051558, 22.0782806 ], [ 69.1046032, 22.0782809 ], [ 69.1044654, 22.079311 ], [ 69.1040519, 22.0798262 ], [ 69.1034994, 22.0799547 ], [ 69.1029472, 22.0803418 ], [ 69.1028092, 22.0811144 ], [ 69.1019808, 22.0818873 ], [ 69.1011532, 22.0834327 ], [ 69.1006009, 22.0839481 ], [ 69.1006013, 22.0844629 ], [ 69.0992212, 22.0862662 ], [ 69.098393, 22.0870392 ], [ 69.0974276, 22.0885847 ], [ 69.0965988, 22.0888426 ], [ 69.096461, 22.0898727 ], [ 69.0957712, 22.0906455 ], [ 69.0949426, 22.0909035 ], [ 69.0948045, 22.0916759 ], [ 69.0936999, 22.0927066 ], [ 69.0934242, 22.0934792 ], [ 69.0928719, 22.0939944 ], [ 69.0913545, 22.0963127 ], [ 69.0908018, 22.0963129 ], [ 69.0906635, 22.0968279 ], [ 69.089559, 22.0978585 ], [ 69.0894216, 22.0983735 ], [ 69.088593, 22.0986315 ], [ 69.0885932, 22.0991464 ], [ 69.0880407, 22.0992751 ], [ 69.0874883, 22.099662 ], [ 69.0873501, 22.100177 ], [ 69.0863841, 22.1012074 ], [ 69.0855554, 22.1014654 ], [ 69.085417, 22.1019804 ], [ 69.0847272, 22.1027532 ], [ 69.0841747, 22.1028818 ], [ 69.0836223, 22.1032688 ], [ 69.0833463, 22.1040413 ], [ 69.0822413, 22.1042994 ], [ 69.0821029, 22.1048145 ], [ 69.0814131, 22.1055871 ], [ 69.0805843, 22.1058451 ], [ 69.0805847, 22.1063601 ], [ 69.0789271, 22.1068759 ], [ 69.0789275, 22.1076483 ], [ 69.0783749, 22.1077769 ], [ 69.0775463, 22.1082923 ], [ 69.0767177, 22.1090651 ], [ 69.0756128, 22.1098379 ], [ 69.0739555, 22.1107404 ], [ 69.0736796, 22.111513 ], [ 69.0731269, 22.1116415 ], [ 69.0722983, 22.112286 ], [ 69.0721598, 22.112801 ], [ 69.07147, 22.1135739 ], [ 69.070641, 22.1138317 ], [ 69.0706414, 22.1146041 ], [ 69.0700889, 22.1147326 ], [ 69.0695365, 22.1152478 ], [ 69.0689839, 22.1153773 ], [ 69.0688455, 22.1158923 ], [ 69.0682931, 22.1164074 ], [ 69.0681555, 22.116665 ], [ 69.0673267, 22.1169228 ], [ 69.0671882, 22.1174378 ], [ 69.066912, 22.1176954 ], [ 69.0669122, 22.1182104 ], [ 69.0658073, 22.1192408 ], [ 69.0655314, 22.1200133 ], [ 69.0647028, 22.1207861 ], [ 69.064013, 22.1223312 ], [ 69.0626316, 22.1228468 ], [ 69.0624932, 22.1233618 ], [ 69.0620793, 22.1238768 ], [ 69.060974, 22.1241348 ], [ 69.0609742, 22.1246496 ], [ 69.0598689, 22.125036 ], [ 69.0593165, 22.125551 ], [ 69.0582114, 22.1260664 ], [ 69.0573825, 22.1267109 ], [ 69.0573828, 22.1272259 ], [ 69.05683, 22.1273542 ], [ 69.0554488, 22.1285139 ], [ 69.055449, 22.129029 ], [ 69.0548964, 22.1291573 ], [ 69.0543437, 22.1295442 ], [ 69.0543439, 22.1300592 ], [ 69.0537913, 22.1300594 ], [ 69.0536527, 22.1305744 ], [ 69.052824, 22.131347 ], [ 69.0522717, 22.1323771 ], [ 69.0514428, 22.1331499 ], [ 69.0508905, 22.13418 ], [ 69.0497854, 22.1352102 ], [ 69.0496478, 22.1359826 ], [ 69.0490952, 22.1361112 ], [ 69.0485426, 22.1366264 ], [ 69.0479899, 22.1367557 ], [ 69.0475753, 22.1377857 ], [ 69.0464702, 22.1388159 ], [ 69.046194, 22.1395884 ], [ 69.0455038, 22.140361 ], [ 69.0446747, 22.1406188 ], [ 69.0443987, 22.1416489 ], [ 69.0438459, 22.1417772 ], [ 69.043017, 22.1424217 ], [ 69.0431547, 22.1429365 ], [ 69.0417733, 22.1442244 ], [ 69.0414972, 22.1449968 ], [ 69.0409446, 22.1455118 ], [ 69.0406682, 22.1462845 ], [ 69.0401156, 22.1467995 ], [ 69.0395632, 22.1475721 ], [ 69.0395634, 22.1480872 ], [ 69.0388729, 22.1488596 ], [ 69.0383201, 22.1488598 ], [ 69.0379054, 22.1498898 ], [ 69.0370763, 22.1506625 ], [ 69.0361099, 22.1522075 ], [ 69.0355571, 22.1523361 ], [ 69.0350043, 22.1527228 ], [ 69.0347282, 22.1534952 ], [ 69.0341753, 22.1536237 ], [ 69.0336227, 22.1540104 ], [ 69.0332079, 22.1550405 ], [ 69.0321024, 22.1560705 ], [ 69.0319648, 22.1568431 ], [ 69.0314122, 22.1569715 ], [ 69.0308593, 22.1574865 ], [ 69.0303065, 22.1576158 ], [ 69.0297541, 22.1589032 ], [ 69.0292012, 22.1590318 ], [ 69.0286484, 22.1594185 ], [ 69.0286486, 22.1599335 ], [ 69.0280958, 22.1599335 ], [ 69.0279571, 22.1604485 ], [ 69.0274044, 22.1609635 ], [ 69.0268516, 22.1617362 ], [ 69.026714, 22.1622512 ], [ 69.0261612, 22.1623795 ], [ 69.0256085, 22.1627662 ], [ 69.0251935, 22.1637963 ], [ 69.024088, 22.1648263 ], [ 69.0238117, 22.1653413 ], [ 69.0224297, 22.166629 ], [ 69.0216006, 22.1679165 ], [ 69.0207715, 22.1686889 ], [ 69.0207715, 22.1692039 ], [ 69.0193895, 22.1704914 ], [ 69.0191132, 22.1710064 ], [ 69.0181463, 22.1720365 ], [ 69.0175932, 22.1720367 ], [ 69.0173171, 22.1730665 ], [ 69.0167641, 22.1731949 ], [ 69.015935, 22.1738392 ], [ 69.0157962, 22.174354 ], [ 69.0153821, 22.174869 ], [ 69.0148293, 22.1749974 ], [ 69.0142763, 22.175384 ], [ 69.0141378, 22.1758991 ], [ 69.0127556, 22.1771865 ], [ 69.0124793, 22.1779592 ], [ 69.012065, 22.178474 ], [ 69.0109593, 22.1787316 ], [ 69.0108206, 22.1792466 ], [ 69.01013, 22.1800191 ], [ 69.009577, 22.1801474 ], [ 69.0079183, 22.1815642 ], [ 69.0077798, 22.182079 ], [ 69.007089, 22.1828514 ], [ 69.0065362, 22.1828516 ], [ 69.0061209, 22.1838815 ], [ 69.0052916, 22.1846539 ], [ 69.005154, 22.185169 ], [ 69.004601, 22.185169 ], [ 69.0044623, 22.1856838 ], [ 69.0039095, 22.1861988 ], [ 69.0039095, 22.1867138 ], [ 69.0037717, 22.1869713 ], [ 69.0029421, 22.1872289 ], [ 69.0028036, 22.1877437 ], [ 69.0022506, 22.1885161 ], [ 69.0008683, 22.1898036 ], [ 69.0000387, 22.1908335 ], [ 68.9992094, 22.1921209 ], [ 68.9983799, 22.1928934 ], [ 68.9982421, 22.1934082 ], [ 68.9976893, 22.1934082 ], [ 68.9975504, 22.1939232 ], [ 68.996721, 22.1946957 ], [ 68.9965832, 22.1954681 ], [ 68.9960302, 22.1955965 ], [ 68.9949242, 22.196498 ], [ 68.9947855, 22.1972704 ], [ 68.9934029, 22.1985577 ], [ 68.9934029, 22.1990727 ], [ 68.9920204, 22.20036 ], [ 68.9917439, 22.2011325 ], [ 68.9907766, 22.2021623 ], [ 68.9902236, 22.2021623 ], [ 68.9900847, 22.2029348 ], [ 68.9896704, 22.2034496 ], [ 68.9888409, 22.203707 ], [ 68.9885644, 22.2047371 ], [ 68.9880113, 22.2048652 ], [ 68.9871816, 22.2055093 ], [ 68.9867664, 22.2065392 ], [ 68.9862132, 22.2073116 ], [ 68.9853837, 22.2083415 ], [ 68.984554, 22.2091137 ], [ 68.9838632, 22.2101436 ], [ 68.98331, 22.2102719 ], [ 68.9824804, 22.2109159 ], [ 68.9819272, 22.2122033 ], [ 68.9810975, 22.2124607 ], [ 68.9809588, 22.213233 ], [ 68.9798526, 22.2142629 ], [ 68.9798524, 22.2147779 ], [ 68.9797146, 22.2150353 ], [ 68.9791616, 22.2150351 ], [ 68.9784695, 22.21658 ], [ 68.9776398, 22.2173523 ], [ 68.9773633, 22.2178673 ], [ 68.9773631, 22.2183821 ], [ 68.9765334, 22.2191546 ], [ 68.9762569, 22.219412 ], [ 68.9757035, 22.2206993 ], [ 68.9751505, 22.2212141 ], [ 68.9751503, 22.2217291 ], [ 68.9743206, 22.2225014 ], [ 68.9737674, 22.2235312 ], [ 68.9729375, 22.2243035 ], [ 68.9727995, 22.2250759 ], [ 68.9722465, 22.2250757 ], [ 68.9721076, 22.2255908 ], [ 68.9715544, 22.2261056 ], [ 68.9704478, 22.2286802 ], [ 68.9701711, 22.2289376 ], [ 68.9696177, 22.2302249 ], [ 68.9690645, 22.2307397 ], [ 68.9685113, 22.2315121 ], [ 68.9680966, 22.232542 ], [ 68.9675434, 22.2326701 ], [ 68.9667137, 22.2333141 ], [ 68.9661601, 22.2346013 ], [ 68.9652769, 22.2350319 ], [ 68.9650043, 22.2354231 ], [ 68.9642238, 22.2364033 ], [ 68.9631174, 22.2366605 ], [ 68.9628407, 22.2374329 ], [ 68.9622875, 22.2375611 ], [ 68.9609044, 22.2383331 ], [ 68.9589685, 22.2384618 ], [ 68.9589687, 22.2376894 ], [ 68.9581389, 22.2376892 ], [ 68.9581388, 22.2382042 ], [ 68.9575856, 22.2382041 ], [ 68.9571696, 22.2405212 ], [ 68.9566162, 22.2412934 ], [ 68.9564782, 22.2418085 ], [ 68.955925, 22.2418083 ], [ 68.9557861, 22.2425807 ], [ 68.9559248, 22.2428381 ], [ 68.9553716, 22.242838 ], [ 68.9538486, 22.2466998 ], [ 68.9535716, 22.2482445 ], [ 68.9530182, 22.2490167 ], [ 68.9530174, 22.2508192 ], [ 68.953184429697984, 22.251544766702072 ], [ 68.9534323, 22.2526215 ], [ 68.954262, 22.2526219 ], [ 68.954262, 22.2531368 ], [ 68.954815, 22.2532653 ], [ 68.9557825, 22.2541672 ], [ 68.9560586, 22.255197 ], [ 68.956474, 22.255583 ], [ 68.957857, 22.2555834 ], [ 68.9581335, 22.255841 ], [ 68.9600698, 22.2557132 ], [ 68.9599309, 22.256228 ], [ 68.9602068, 22.2582879 ], [ 68.960069, 22.2585454 ], [ 68.9597923, 22.2585454 ], [ 68.9593773, 22.2572579 ], [ 68.9591008, 22.2570003 ], [ 68.9592399, 22.2559704 ], [ 68.95841, 22.2562277 ], [ 68.9582707, 22.2582874 ], [ 68.957994, 22.2585448 ], [ 68.9574402, 22.2600895 ], [ 68.9568868, 22.2608618 ], [ 68.9563334, 22.2613766 ], [ 68.955503, 22.2629213 ], [ 68.9546729, 22.2636935 ], [ 68.9541193, 22.2649806 ], [ 68.9538426, 22.265238 ], [ 68.9530123, 22.2665253 ], [ 68.9516277, 22.270902 ], [ 68.9507969, 22.2732189 ], [ 68.9505202, 22.2734764 ], [ 68.9502433, 22.2742488 ], [ 68.9488596, 22.2755357 ], [ 68.9474752, 22.2786249 ], [ 68.9471985, 22.2788823 ], [ 68.9466445, 22.2806844 ], [ 68.9460909, 22.2811993 ], [ 68.9458141, 22.2819715 ], [ 68.9455372, 22.282229 ], [ 68.9444293, 22.2855758 ], [ 68.9441526, 22.2858332 ], [ 68.9430448, 22.2884076 ], [ 68.9427681, 22.288665 ], [ 68.9402752, 22.295101 ], [ 68.9399985, 22.2953582 ], [ 68.9398602, 22.2963881 ], [ 68.9404136, 22.2963885 ], [ 68.9397203, 22.2987054 ], [ 68.9394436, 22.2989628 ], [ 68.9391664, 22.2999925 ], [ 68.9384748, 22.3007648 ], [ 68.9379216, 22.300507 ], [ 68.9380588, 22.3017944 ], [ 68.9377816, 22.3033393 ], [ 68.9375047, 22.3035965 ], [ 68.9372276, 22.3046264 ], [ 68.9366738, 22.3053987 ], [ 68.9363943, 22.3115778 ], [ 68.9366708, 22.312093 ], [ 68.9370851, 22.3146678 ], [ 68.9376385, 22.3147963 ], [ 68.9377763, 22.3149256 ], [ 68.9379142, 22.3169855 ], [ 68.9384676, 22.317114 ], [ 68.9388821, 22.3175007 ], [ 68.9394346, 22.3200758 ], [ 68.9402637, 22.3221359 ], [ 68.9408161, 22.3247109 ], [ 68.9410927, 22.3252259 ], [ 68.9410915, 22.3280581 ], [ 68.9416443, 22.3296031 ], [ 68.941921, 22.3298607 ], [ 68.9421972, 22.3314056 ], [ 68.9428891, 22.3323066 ], [ 68.9434427, 22.3323068 ], [ 68.9439963, 22.3320495 ], [ 68.9445498, 22.3320497 ], [ 68.9446876, 22.332179 ], [ 68.9448263, 22.3323073 ], [ 68.9451032, 22.3323073 ], [ 68.9455181, 22.3314068 ], [ 68.945657, 22.3312777 ], [ 68.9500851, 22.3315366 ], [ 68.9503618, 22.331794 ], [ 68.9514688, 22.3319237 ], [ 68.9514686, 22.3324385 ], [ 68.9531289, 22.3330822 ], [ 68.9538201, 22.3337265 ], [ 68.9543733, 22.3344992 ], [ 68.9549265, 22.3352718 ], [ 68.9557562, 22.3370743 ], [ 68.9560329, 22.3373319 ], [ 68.9565861, 22.3386194 ], [ 68.9563079, 22.3429964 ], [ 68.9552, 22.3455708 ], [ 68.9552, 22.3460858 ], [ 68.9554765, 22.3466008 ], [ 68.9561688, 22.3472442 ], [ 68.9567224, 22.3473737 ], [ 68.95686, 22.3478885 ], [ 68.9571367, 22.3481461 ], [ 68.9582431, 22.3509787 ], [ 68.958519, 22.3540684 ], [ 68.9572707, 22.364367 ], [ 68.9564402, 22.3646243 ], [ 68.956578, 22.3651393 ], [ 68.957685, 22.3661693 ], [ 68.9578231, 22.3684867 ], [ 68.9586536, 22.3686152 ], [ 68.9587914, 22.3687445 ], [ 68.9593444, 22.3710618 ], [ 68.9594833, 22.3711901 ], [ 68.9600369, 22.3713194 ], [ 68.9600367, 22.3718344 ], [ 68.9605905, 22.3718346 ], [ 68.9607282, 22.3723496 ], [ 68.9610049, 22.3726071 ], [ 68.9612814, 22.3736371 ], [ 68.9622506, 22.3745381 ], [ 68.9628044, 22.3746673 ], [ 68.9629422, 22.3751824 ], [ 68.9636345, 22.3758257 ], [ 68.9641883, 22.375955 ], [ 68.964326, 22.3767274 ], [ 68.9651563, 22.3775001 ], [ 68.9659864, 22.3793026 ], [ 68.9662631, 22.37956 ], [ 68.9673693, 22.3849673 ], [ 68.9684759, 22.3888295 ], [ 68.9690295, 22.3896021 ], [ 68.9695831, 22.3901172 ], [ 68.9705521, 22.3924345 ], [ 68.9711059, 22.392563 ], [ 68.9712438, 22.3926921 ], [ 68.9713826, 22.3934645 ], [ 68.9719363, 22.3934647 ], [ 68.9720741, 22.3944946 ], [ 68.9723508, 22.3947522 ], [ 68.9724897, 22.395267 ], [ 68.9730435, 22.3952672 ], [ 68.9740117, 22.3973271 ], [ 68.9745653, 22.3978421 ], [ 68.9749809, 22.399387 ], [ 68.9755347, 22.3993872 ], [ 68.9765027, 22.4022194 ], [ 68.9770565, 22.402992 ], [ 68.9780261, 22.4036354 ], [ 68.9787176, 22.4042795 ], [ 68.9820399, 22.4091719 ], [ 68.9831472, 22.4109744 ], [ 68.9834241, 22.4117469 ], [ 68.983701, 22.4120043 ], [ 68.9843935, 22.4135492 ], [ 68.9849473, 22.4136775 ], [ 68.9850852, 22.4138068 ], [ 68.9852242, 22.4143216 ], [ 68.9857781, 22.41445 ], [ 68.986055, 22.4147076 ], [ 68.9866088, 22.4148368 ], [ 68.9867467, 22.4153517 ], [ 68.9879932, 22.4165101 ], [ 68.9891009, 22.4172825 ], [ 68.9904853, 22.4177975 ], [ 68.991731, 22.4189567 ], [ 68.9921468, 22.4195998 ], [ 68.9927008, 22.4197291 ], [ 68.9933925, 22.421274 ], [ 68.9942232, 22.4223039 ], [ 68.9949161, 22.423462 ], [ 68.9953309, 22.4241062 ], [ 68.9958847, 22.4248786 ], [ 68.9967155, 22.4261661 ], [ 68.9972695, 22.4266811 ], [ 68.9978233, 22.427711 ], [ 68.9990701, 22.4288691 ], [ 68.9996239, 22.4289982 ], [ 68.9997618, 22.4295133 ], [ 68.9999009, 22.4296416 ], [ 69.0014237, 22.431573 ], [ 69.0015626, 22.432088 ], [ 69.0021166, 22.432088 ], [ 69.0022546, 22.4326028 ], [ 69.0025315, 22.4328603 ], [ 69.0033623, 22.4341477 ], [ 69.0047473, 22.4364649 ], [ 69.0051633, 22.4374947 ], [ 69.005717, 22.4376231 ], [ 69.0064092, 22.4382672 ], [ 69.0065481, 22.438782 ], [ 69.007102, 22.438782 ], [ 69.00724, 22.439297 ], [ 69.009041, 22.4409701 ], [ 69.0101489, 22.4417423 ], [ 69.0112568, 22.4425148 ], [ 69.0118108, 22.4426438 ], [ 69.0118108, 22.4431587 ], [ 69.0123647, 22.443287 ], [ 69.0140268, 22.4448317 ], [ 69.0184587, 22.4466336 ], [ 69.0187357, 22.446891 ], [ 69.0217826, 22.4479205 ], [ 69.0224747, 22.448307 ], [ 69.0226138, 22.4488221 ], [ 69.0231678, 22.4488219 ], [ 69.0231678, 22.4493369 ], [ 69.0253838, 22.4499797 ], [ 69.026769, 22.4507519 ], [ 69.0276, 22.4515242 ], [ 69.0281542, 22.4516533 ], [ 69.0281542, 22.4521683 ], [ 69.0287083, 22.4522964 ], [ 69.0295394, 22.4530687 ], [ 69.0309245, 22.4538408 ], [ 69.0339718, 22.4551275 ], [ 69.0342489, 22.4553849 ], [ 69.0367422, 22.4564144 ], [ 69.0381273, 22.4571864 ], [ 69.0395125, 22.4579585 ], [ 69.0408979, 22.4587306 ], [ 69.041452, 22.4592454 ], [ 69.0428372, 22.4600175 ], [ 69.0442226, 22.4607894 ], [ 69.0456078, 22.461304 ], [ 69.0461621, 22.4618188 ], [ 69.0480477, 22.4623855 ], [ 69.0497637, 22.463105 ], [ 69.0516686, 22.4641867 ], [ 69.0550279, 22.465678 ], [ 69.0555822, 22.4661929 ], [ 69.0566905, 22.4667073 ], [ 69.0580761, 22.4679942 ], [ 69.0586302, 22.4682515 ], [ 69.0609856, 22.4704395 ], [ 69.0612628, 22.4709543 ], [ 69.0623713, 22.4719838 ], [ 69.0630647, 22.4728842 ], [ 69.0637572, 22.4737856 ], [ 69.0645888, 22.4745576 ], [ 69.0651434, 22.4755873 ], [ 69.0663055, 22.4773193 ], [ 69.0664325, 22.4779838 ], [ 69.0667714, 22.4788409 ], [ 69.067485, 22.4797639 ], [ 69.0679488, 22.4801266 ], [ 69.0680736, 22.4800112 ], [ 69.0683591, 22.4793189 ], [ 69.0687158, 22.4788574 ], [ 69.0688229, 22.4786266 ], [ 69.0686623, 22.4783958 ], [ 69.068698, 22.4780827 ], [ 69.0691618, 22.47772 ], [ 69.0698932, 22.4775717 ], [ 69.0711597, 22.4776376 ], [ 69.072676, 22.4779178 ], [ 69.0742815, 22.4784947 ], [ 69.0750307, 22.4786101 ], [ 69.076101, 22.4787585 ], [ 69.0766183, 22.4789233 ], [ 69.0771891, 22.4788409 ], [ 69.0775816, 22.4788244 ], [ 69.07842, 22.4789728 ], [ 69.0789552, 22.4790222 ], [ 69.0792762, 22.478709 ], [ 69.0796152, 22.4781816 ], [ 69.0799898, 22.4773409 ], [ 69.0805428, 22.4761047 ], [ 69.0808639, 22.4756102 ], [ 69.0815239, 22.4752805 ], [ 69.0824158, 22.4750332 ], [ 69.0833791, 22.4746047 ], [ 69.0835575, 22.4739948 ], [ 69.0831865, 22.4731541 ], [ 69.0826727, 22.4725607 ], [ 69.0824444, 22.4720068 ], [ 69.0804893, 22.470121 ], [ 69.0802181, 22.4700946 ], [ 69.0801182, 22.4693825 ], [ 69.0796616, 22.4683935 ], [ 69.079105, 22.4682484 ], [ 69.0780918, 22.4660592 ], [ 69.0777778, 22.4658482 ], [ 69.077364, 22.4657823 ], [ 69.0772355, 22.4654394 ], [ 69.0765933, 22.4655845 ], [ 69.0761224, 22.4646218 ], [ 69.0760796, 22.463725 ], [ 69.0760225, 22.4630392 ], [ 69.0759369, 22.4624853 ], [ 69.0760368, 22.4619974 ], [ 69.0763079, 22.4619314 ], [ 69.0762794, 22.4616808 ], [ 69.0759797, 22.4616808 ], [ 69.0753803, 22.4609423 ], [ 69.0751662, 22.4602565 ], [ 69.074995, 22.4596235 ], [ 69.0743956, 22.4588322 ], [ 69.0740567, 22.4577111 ], [ 69.0742172, 22.4571177 ], [ 69.0743421, 22.4562934 ], [ 69.0744135, 22.455601 ], [ 69.0742886, 22.4549085 ], [ 69.0740567, 22.4543645 ], [ 69.0738783, 22.4540348 ], [ 69.0733253, 22.4533589 ], [ 69.0727366, 22.4529137 ], [ 69.0723977, 22.4527818 ], [ 69.0721301, 22.4528808 ], [ 69.0716128, 22.4529302 ], [ 69.0710955, 22.4527489 ], [ 69.0708636, 22.4524356 ], [ 69.0699895, 22.4523697 ], [ 69.0691868, 22.452551 ], [ 69.0683662, 22.4528808 ], [ 69.0680273, 22.4528313 ], [ 69.0677062, 22.4528972 ], [ 69.0677062, 22.4531116 ], [ 69.0669213, 22.4530126 ], [ 69.0661899, 22.4527324 ], [ 69.0655484, 22.4521573 ], [ 69.0654091, 22.4516425 ], [ 69.0647168, 22.4508704 ], [ 69.0641628, 22.4508706 ], [ 69.0640235, 22.4503556 ], [ 69.0636083, 22.449841 ], [ 69.0622233, 22.4497123 ], [ 69.0616692, 22.4493267 ], [ 69.0616692, 22.4490693 ], [ 69.0625, 22.4490689 ], [ 69.0622226, 22.4480392 ], [ 69.0613917, 22.4480394 ], [ 69.0613913, 22.4475246 ], [ 69.0602834, 22.4472675 ], [ 69.0602832, 22.4467525 ], [ 69.0591751, 22.4466238 ], [ 69.0586212, 22.4463666 ], [ 69.0577899, 22.4457236 ], [ 69.0577896, 22.4449512 ], [ 69.0572356, 22.4448223 ], [ 69.0566815, 22.4443074 ], [ 69.0558502, 22.443922 ], [ 69.0558501, 22.443407 ], [ 69.0552961, 22.4432779 ], [ 69.0547419, 22.4427633 ], [ 69.0539109, 22.4425061 ], [ 69.0530797, 22.4418631 ], [ 69.0529406, 22.4413482 ], [ 69.0512781, 22.4398039 ], [ 69.0504465, 22.4380018 ], [ 69.0504464, 22.437487 ], [ 69.0501693, 22.4372296 ], [ 69.0500311, 22.4367147 ], [ 69.0494774, 22.4367149 ], [ 69.048924, 22.4385172 ], [ 69.0475392, 22.4387752 ], [ 69.0475393, 22.4392902 ], [ 69.0467083, 22.439033 ], [ 69.0465819, 22.4400428 ], [ 69.0448944, 22.4391154 ], [ 69.0434949, 22.4380001 ], [ 69.0433007, 22.4378208 ], [ 69.0428592, 22.4374133 ], [ 69.0429947, 22.436983 ], [ 69.0439381, 22.4369738 ], [ 69.0437988, 22.435944 ], [ 69.0433836, 22.4354291 ], [ 69.0428298, 22.4354293 ], [ 69.043521, 22.433112 ], [ 69.0437973, 22.4315671 ], [ 69.0444898, 22.4304078 ], [ 69.0450438, 22.4302793 ], [ 69.045181, 22.4282196 ], [ 69.0449041, 22.4279621 ], [ 69.0449039, 22.4274473 ], [ 69.0454575, 22.4266747 ], [ 69.0460111, 22.425902 ], [ 69.0468414, 22.4240995 ], [ 69.0471183, 22.4238419 ], [ 69.0473948, 22.4228121 ], [ 69.0476716, 22.4225545 ], [ 69.0485017, 22.4202369 ], [ 69.0487784, 22.4199793 ], [ 69.0501621, 22.4171468 ], [ 69.0509924, 22.4158591 ], [ 69.0515456, 22.4137992 ], [ 69.0529291, 22.4109665 ], [ 69.0534826, 22.4104515 ], [ 69.0537593, 22.409679 ], [ 69.0536208, 22.4081341 ], [ 69.0525131, 22.4082629 ], [ 69.0516822, 22.4076199 ], [ 69.0514048, 22.4063326 ], [ 69.050851, 22.4064611 ], [ 69.0505743, 22.4067185 ], [ 69.0502974, 22.4067187 ], [ 69.0497435, 22.4064613 ], [ 69.0483588, 22.4063335 ], [ 69.0480822, 22.407106 ], [ 69.0478053, 22.4071062 ], [ 69.0472509, 22.4055615 ], [ 69.04675, 22.4055233 ], [ 69.0466926, 22.4013432 ], [ 69.045865, 22.4007981 ], [ 69.0466956, 22.4006696 ], [ 69.0468332, 22.3998971 ], [ 69.047249, 22.3995105 ], [ 69.0478026, 22.3993819 ], [ 69.0478024, 22.3988669 ], [ 69.0483564, 22.3988667 ], [ 69.0483562, 22.3983519 ], [ 69.0486331, 22.39848 ], [ 69.0533398, 22.3977063 ], [ 69.0538935, 22.3974485 ], [ 69.0572148, 22.3943577 ], [ 69.0588758, 22.3935847 ], [ 69.062198, 22.3926828 ], [ 69.0621978, 22.3921678 ], [ 69.0630283, 22.3920383 ], [ 69.0638585, 22.3912655 ], [ 69.0644121, 22.3910079 ], [ 69.0648268, 22.3903644 ], [ 69.0648266, 22.3901069 ], [ 69.0638576, 22.3890775 ], [ 69.0666265, 22.3894621 ], [ 69.0680107, 22.3894615 ], [ 69.0696716, 22.3886885 ], [ 69.0757627, 22.3888149 ], [ 69.0757625, 22.3882999 ], [ 69.0768701, 22.3886851 ], [ 69.0774238, 22.3886849 ], [ 69.0785316, 22.389071 ], [ 69.0788079, 22.388041 ], [ 69.0793617, 22.3880408 ], [ 69.0793613, 22.3875258 ], [ 69.081023, 22.3881682 ], [ 69.0824072, 22.3882967 ], [ 69.0824076, 22.3888115 ], [ 69.0835149, 22.3885536 ], [ 69.0835153, 22.389326 ], [ 69.0840693, 22.3894539 ], [ 69.0842072, 22.389583 ], [ 69.0842076, 22.3903555 ], [ 69.0843467, 22.3904838 ], [ 69.0849005, 22.3904834 ], [ 69.0865626, 22.3920274 ], [ 69.0876705, 22.3925418 ], [ 69.0879474, 22.3925416 ], [ 69.0882241, 22.392284 ], [ 69.0907162, 22.3927975 ], [ 69.0909933, 22.3930548 ], [ 69.091547, 22.3931837 ], [ 69.0916854, 22.3936985 ], [ 69.0937631, 22.3945982 ], [ 69.0947321, 22.3952417 ], [ 69.0947326, 22.3960141 ], [ 69.0948716, 22.3961423 ], [ 69.0984711, 22.3960119 ], [ 69.0986087, 22.3954968 ], [ 69.0987474, 22.3953676 ], [ 69.0990243, 22.3953674 ], [ 69.1009634, 22.3966535 ], [ 69.1017946, 22.3974254 ], [ 69.1037332, 22.3980684 ], [ 69.1030439, 22.4027032 ], [ 69.1023527, 22.4034762 ], [ 69.0990303, 22.4037357 ], [ 69.0993102, 22.4081126 ], [ 69.1009719, 22.4084972 ], [ 69.1020804, 22.4095265 ], [ 69.1040182, 22.4090103 ], [ 69.1067874, 22.4090085 ], [ 69.1087262, 22.4095222 ], [ 69.1090033, 22.4097794 ], [ 69.1103877, 22.4097784 ], [ 69.1105257, 22.4096501 ], [ 69.1108018, 22.4086201 ], [ 69.1106623, 22.4068178 ], [ 69.1112161, 22.4068174 ], [ 69.1116302, 22.4057873 ], [ 69.1120458, 22.4054003 ], [ 69.1139832, 22.4043691 ], [ 69.1145366, 22.4038537 ], [ 69.115644, 22.4037246 ], [ 69.1156436, 22.4032097 ], [ 69.118135, 22.4023063 ], [ 69.1186882, 22.4017909 ], [ 69.119242, 22.4016622 ], [ 69.1193796, 22.4011472 ], [ 69.1200719, 22.4007601 ], [ 69.1206249, 22.3999873 ], [ 69.1267143, 22.3974078 ], [ 69.1274051, 22.3965067 ], [ 69.1287835, 22.3898112 ], [ 69.1289222, 22.3896819 ], [ 69.1291991, 22.3896817 ], [ 69.1296145, 22.3903254 ], [ 69.12962, 22.3962474 ], [ 69.1298976, 22.3970196 ], [ 69.1304518, 22.3975341 ], [ 69.1305912, 22.3980489 ], [ 69.1314219, 22.3981765 ], [ 69.1319762, 22.3986909 ], [ 69.134746, 22.3997185 ], [ 69.1375154, 22.4002313 ], [ 69.1376536, 22.4003602 ], [ 69.137932, 22.4019049 ], [ 69.1384863, 22.4024193 ], [ 69.1383499, 22.4039642 ], [ 69.1472096, 22.403055 ], [ 69.1505334, 22.4040816 ], [ 69.1513642, 22.4042101 ], [ 69.1517802, 22.4052396 ], [ 69.1524737, 22.4058822 ], [ 69.1530278, 22.4061391 ], [ 69.1537203, 22.4067826 ], [ 69.1539978, 22.4072973 ], [ 69.1548294, 22.4080689 ], [ 69.1553841, 22.4088408 ], [ 69.1559392, 22.4101275 ], [ 69.1559401, 22.4109 ], [ 69.1562174, 22.4111572 ], [ 69.1563569, 22.411672 ], [ 69.1566337, 22.4116718 ], [ 69.1566328, 22.4108994 ], [ 69.1582947, 22.4112834 ], [ 69.1592644, 22.4121842 ], [ 69.1599582, 22.4130841 ], [ 69.1616203, 22.4134692 ], [ 69.1618959, 22.412439 ], [ 69.1621729, 22.4125669 ], [ 69.1646653, 22.4125645 ], [ 69.1648034, 22.4126936 ], [ 69.164804, 22.4132084 ], [ 69.1643894, 22.4134664 ], [ 69.1643897, 22.4137238 ], [ 69.1646666, 22.4137236 ], [ 69.1647607, 22.4135535 ], [ 69.1660499, 22.412563 ], [ 69.1670182, 22.4121763 ], [ 69.1671563, 22.4116613 ], [ 69.1685413, 22.4119172 ], [ 69.1686798, 22.412432 ], [ 69.1685432, 22.4134621 ], [ 69.1693737, 22.413332 ], [ 69.1696504, 22.4130742 ], [ 69.170481, 22.4130735 ], [ 69.1710352, 22.4133303 ], [ 69.171728, 22.4142311 ], [ 69.171729, 22.4150035 ], [ 69.1714525, 22.4152613 ], [ 69.1713151, 22.4157764 ], [ 69.1721459, 22.4157756 ], [ 69.173395, 22.4186064 ], [ 69.1732587, 22.4198939 ], [ 69.1740894, 22.419893 ], [ 69.1738135, 22.4206656 ], [ 69.1732597, 22.4206664 ], [ 69.1731217, 22.4214388 ], [ 69.1740919, 22.4218236 ], [ 69.1745073, 22.4222097 ], [ 69.1746469, 22.4227246 ], [ 69.1752009, 22.4228523 ], [ 69.1760323, 22.4233662 ], [ 69.1765867, 22.4237523 ], [ 69.1767237, 22.4229797 ], [ 69.1776927, 22.4223347 ], [ 69.1807377, 22.4213014 ], [ 69.1835065, 22.4210408 ], [ 69.1887686, 22.4212921 ], [ 69.1918155, 22.4218036 ], [ 69.1920928, 22.4220606 ], [ 69.1926467, 22.42206 ], [ 69.1927845, 22.4219315 ], [ 69.1929227, 22.4214165 ], [ 69.1934768, 22.4215441 ], [ 69.193615, 22.421673 ], [ 69.1937552, 22.4227028 ], [ 69.1940323, 22.4227025 ], [ 69.1943073, 22.4214148 ], [ 69.1948611, 22.421285 ], [ 69.1951374, 22.4208988 ], [ 69.1940295, 22.4207709 ], [ 69.1931979, 22.4201286 ], [ 69.1930582, 22.419614 ], [ 69.1922264, 22.4188425 ], [ 69.192086, 22.4170404 ], [ 69.1915324, 22.4172986 ], [ 69.1919431, 22.4142084 ], [ 69.1922192, 22.4136932 ], [ 69.1922154, 22.410861 ], [ 69.192906, 22.4093154 ], [ 69.1923523, 22.409316 ], [ 69.1924887, 22.4082859 ], [ 69.1941463, 22.4054517 ], [ 69.1948384, 22.4050642 ], [ 69.1953916, 22.4045486 ], [ 69.1974664, 22.4036454 ], [ 69.1974661, 22.403388 ], [ 69.1969115, 22.4028737 ], [ 69.196911, 22.4023587 ], [ 69.19788, 22.4019709 ], [ 69.2009257, 22.4019671 ], [ 69.201203, 22.4022243 ], [ 69.2023107, 22.4023521 ], [ 69.2020332, 22.4018374 ], [ 69.2000939, 22.4011958 ], [ 69.1995396, 22.4008108 ], [ 69.1993999, 22.4002959 ], [ 69.1985679, 22.399267 ], [ 69.1984284, 22.3982373 ], [ 69.1978747, 22.3982381 ], [ 69.1975949, 22.3961786 ], [ 69.1981485, 22.396178 ], [ 69.1981472, 22.395148 ], [ 69.1978705, 22.3952767 ], [ 69.1970397, 22.3951495 ], [ 69.1971761, 22.3941194 ], [ 69.1978679, 22.3934744 ], [ 69.199529, 22.3933439 ], [ 69.1993897, 22.3930867 ], [ 69.1998028, 22.3912838 ], [ 69.1973113, 22.3914152 ], [ 69.1967573, 22.3912876 ], [ 69.1975857, 22.3897418 ], [ 69.1970321, 22.3897426 ], [ 69.1978601, 22.3879391 ], [ 69.1973069, 22.3883256 ], [ 69.1953685, 22.3880705 ], [ 69.1945373, 22.3876857 ], [ 69.1945366, 22.3871708 ], [ 69.19426, 22.3872993 ], [ 69.1909376, 22.3873033 ], [ 69.1906609, 22.387433 ], [ 69.1903829, 22.3866607 ], [ 69.1895526, 22.38679 ], [ 69.1884447, 22.3865339 ], [ 69.1881676, 22.3862767 ], [ 69.1876137, 22.3861491 ], [ 69.187474, 22.3856343 ], [ 69.1867813, 22.3848628 ], [ 69.1862277, 22.3848633 ], [ 69.1860881, 22.3843485 ], [ 69.185395, 22.3833194 ], [ 69.1842878, 22.383449 ], [ 69.1837335, 22.3830639 ], [ 69.1833164, 22.3820344 ], [ 69.1824848, 22.3812631 ], [ 69.1819291, 22.3797187 ], [ 69.1812364, 22.3789471 ], [ 69.1806827, 22.3788185 ], [ 69.1792984, 22.3788201 ], [ 69.1779148, 22.3792083 ], [ 69.1776369, 22.3784362 ], [ 69.177083, 22.3783077 ], [ 69.1765288, 22.3779225 ], [ 69.1763893, 22.3774077 ], [ 69.1755574, 22.3763787 ], [ 69.1755564, 22.3756063 ], [ 69.1761085, 22.3743183 ], [ 69.1761079, 22.3738034 ], [ 69.1756925, 22.3732888 ], [ 69.1745848, 22.3730325 ], [ 69.1744453, 22.3725178 ], [ 69.1740299, 22.3720032 ], [ 69.1734761, 22.372004 ], [ 69.1734759, 22.3717464 ], [ 69.1756906, 22.3717441 ], [ 69.175966, 22.3707138 ], [ 69.1766583, 22.3712281 ], [ 69.1770754, 22.3722574 ], [ 69.1795678, 22.3728979 ], [ 69.1812289, 22.3730253 ], [ 69.1812281, 22.3725103 ], [ 69.1817817, 22.3723804 ], [ 69.1828892, 22.3725084 ], [ 69.1827496, 22.3719938 ], [ 69.1821952, 22.3714793 ], [ 69.1817789, 22.3701924 ], [ 69.1812253, 22.3701931 ], [ 69.1808082, 22.3691637 ], [ 69.1805309, 22.3689064 ], [ 69.180391, 22.3673617 ], [ 69.1795609, 22.3676203 ], [ 69.1795619, 22.3683925 ], [ 69.1784547, 22.3685222 ], [ 69.1773472, 22.3682659 ], [ 69.176793, 22.3678807 ], [ 69.1772064, 22.3668503 ], [ 69.1770678, 22.3663357 ], [ 69.1765141, 22.3662069 ], [ 69.1759599, 22.3658218 ], [ 69.1760966, 22.3647919 ], [ 69.175958, 22.3642771 ], [ 69.1756813, 22.3644056 ], [ 69.1748509, 22.3644065 ], [ 69.1742969, 22.3641497 ], [ 69.1731884, 22.36325 ], [ 69.1733245, 22.3617052 ], [ 69.1734632, 22.3615759 ], [ 69.1740168, 22.361447 ], [ 69.1737382, 22.3601599 ], [ 69.1726307, 22.3597743 ], [ 69.1720769, 22.3597749 ], [ 69.1718004, 22.3599044 ], [ 69.1716596, 22.3583597 ], [ 69.1713824, 22.3581026 ], [ 69.1709654, 22.3563007 ], [ 69.1734562, 22.3559114 ], [ 69.1759475, 22.3559087 ], [ 69.1762245, 22.3561659 ], [ 69.1776088, 22.3562935 ], [ 69.1774689, 22.3555213 ], [ 69.1762221, 22.3542353 ], [ 69.1756685, 22.3541068 ], [ 69.1751142, 22.3535923 ], [ 69.1745604, 22.3534648 ], [ 69.1738654, 22.3514056 ], [ 69.1738635, 22.3498607 ], [ 69.174415, 22.3483153 ], [ 69.1746916, 22.3480577 ], [ 69.1745521, 22.3467704 ], [ 69.1734451, 22.3468998 ], [ 69.1731686, 22.3471576 ], [ 69.172062, 22.3475455 ], [ 69.1717868, 22.3488331 ], [ 69.1676347, 22.3485801 ], [ 69.1673567, 22.3475504 ], [ 69.1654192, 22.3475525 ], [ 69.1658316, 22.3457496 ], [ 69.1654164, 22.3452351 ], [ 69.1673534, 22.3448465 ], [ 69.1676299, 22.3445888 ], [ 69.1688741, 22.3439443 ], [ 69.1688732, 22.3431718 ], [ 69.1694262, 22.3426562 ], [ 69.1692854, 22.3403391 ], [ 69.168178, 22.3400828 ], [ 69.1685899, 22.3377651 ], [ 69.1687286, 22.3376358 ], [ 69.1696963, 22.3372489 ], [ 69.1696951, 22.3362191 ], [ 69.169141, 22.3357048 ], [ 69.1691391, 22.3341599 ], [ 69.1695532, 22.3328721 ], [ 69.1687227, 22.3327437 ], [ 69.1681688, 22.3323586 ], [ 69.1677464, 22.3266946 ], [ 69.1676082, 22.3264372 ], [ 69.166501, 22.3263092 ], [ 69.1659471, 22.3259241 ], [ 69.1656676, 22.3236071 ], [ 69.1637297, 22.3229649 ], [ 69.1626216, 22.3220652 ], [ 69.1619272, 22.3202637 ], [ 69.1608191, 22.319235 ], [ 69.1606808, 22.3187201 ], [ 69.1601272, 22.3187207 ], [ 69.1601266, 22.3182057 ], [ 69.1592964, 22.3180773 ], [ 69.1581884, 22.3171777 ], [ 69.1577696, 22.3143459 ], [ 69.1580439, 22.3120284 ], [ 69.1591454, 22.3073926 ], [ 69.1599741, 22.3061046 ], [ 69.161075, 22.3009539 ], [ 69.1638356, 22.2955442 ], [ 69.1643869, 22.2937413 ], [ 69.165216, 22.2929679 ], [ 69.1663202, 22.2909071 ], [ 69.1671478, 22.2888464 ], [ 69.167423, 22.2875588 ], [ 69.171838, 22.2780277 ], [ 69.172113, 22.2767398 ], [ 69.1728044, 22.276095 ], [ 69.1744636, 22.2755782 ], [ 69.1752929, 22.2750625 ], [ 69.1763984, 22.2742889 ], [ 69.1775041, 22.2735153 ], [ 69.178333, 22.2727419 ], [ 69.178886, 22.2724837 ], [ 69.179715, 22.2717105 ], [ 69.1841378, 22.2691307 ], [ 69.1860737, 22.268871 ], [ 69.1870406, 22.2682267 ], [ 69.1870397, 22.2674543 ], [ 69.1869015, 22.267197 ], [ 69.1863481, 22.2671976 ], [ 69.1863476, 22.2666826 ], [ 69.1857942, 22.2666833 ], [ 69.1857932, 22.2659109 ], [ 69.18524, 22.2659115 ], [ 69.1848233, 22.264882 ], [ 69.184408, 22.2643675 ], [ 69.1849612, 22.2642379 ], [ 69.18579, 22.2634645 ], [ 69.1863428, 22.2632063 ], [ 69.1867566, 22.2625626 ], [ 69.1881378, 22.2612736 ], [ 69.188966, 22.2599852 ], [ 69.1896571, 22.2593403 ], [ 69.1902102, 22.2592114 ], [ 69.1902094, 22.2586964 ], [ 69.1913156, 22.2584376 ], [ 69.18941650892009, 22.251544766702072 ], [ 69.189416508920104, 22.251544766702072 ], [ 69.1878407, 22.2458253 ], [ 69.1878393, 22.2447954 ], [ 69.1882542, 22.2444084 ], [ 69.1901896, 22.2438911 ], [ 69.1906048, 22.2445348 ], [ 69.193199750760883, 22.251544766702072 ], [ 69.1954636, 22.2576603 ], [ 69.1960168, 22.2576597 ], [ 69.1960176, 22.2581745 ], [ 69.1971242, 22.2583016 ], [ 69.1996125, 22.2575261 ], [ 69.2034821, 22.2554615 ], [ 69.2054177, 22.254944 ], [ 69.2081835, 22.2548122 ], [ 69.2081842, 22.2553273 ], [ 69.2087376, 22.2554548 ], [ 69.2097061, 22.2560976 ], [ 69.2101238, 22.2576419 ], [ 69.2104005, 22.2576416 ], [ 69.2103997, 22.2571267 ], [ 69.21427, 22.2557051 ], [ 69.2181417, 22.2551849 ], [ 69.2192474, 22.2546686 ], [ 69.2211835, 22.254666 ], [ 69.2217371, 22.2549226 ], [ 69.2308641, 22.2543949 ], [ 69.2314169, 22.2541368 ], [ 69.2344586, 22.2536174 ], [ 69.2352876, 22.2531012 ], [ 69.235978, 22.2527145 ], [ 69.2359771, 22.2521995 ], [ 69.235608166148197, 22.251344766702072 ], [ 69.2354218, 22.250913 ], [ 69.2355579, 22.2493679 ], [ 69.2366643, 22.2493662 ], [ 69.23765484666329, 22.251344766702072 ], [ 69.23767279130054, 22.251380610204524 ], [ 69.237754974363028, 22.251544766702072 ], [ 69.2384677, 22.2529684 ], [ 69.2390222, 22.2537399 ], [ 69.2398538, 22.2547686 ], [ 69.240415, 22.2594023 ], [ 69.2415231, 22.2604306 ], [ 69.2419404, 22.2614599 ], [ 69.2436002, 22.2615856 ], [ 69.244431, 22.2620993 ], [ 69.2449852, 22.2626134 ], [ 69.2466452, 22.2628684 ], [ 69.2480292, 22.2633813 ], [ 69.2488601, 22.263895 ], [ 69.2491371, 22.2641521 ], [ 69.2516285, 22.2651781 ], [ 69.2527365, 22.2659489 ], [ 69.2538442, 22.2667194 ], [ 69.2549521, 22.2674902 ], [ 69.2571647, 22.2672292 ], [ 69.2649116, 22.2679891 ], [ 69.2665724, 22.2685015 ], [ 69.2701691, 22.2687529 ], [ 69.272383, 22.2692641 ], [ 69.275702, 22.2690012 ], [ 69.2759782, 22.2687432 ], [ 69.2784665, 22.2680957 ], [ 69.2784656, 22.2675807 ], [ 69.27653, 22.2679699 ], [ 69.2759772, 22.2682282 ], [ 69.275424, 22.2682292 ], [ 69.2745934, 22.2678449 ], [ 69.2745949, 22.2686172 ], [ 69.2718289, 22.2687502 ], [ 69.2704446, 22.2682375 ], [ 69.2698914, 22.2682384 ], [ 69.2693376, 22.2679819 ], [ 69.2679545, 22.2679842 ], [ 69.2671243, 22.2677281 ], [ 69.2651876, 22.267603 ], [ 69.2657393, 22.2668296 ], [ 69.2643567, 22.2670893 ], [ 69.2646319, 22.2663165 ], [ 69.2626954, 22.2663197 ], [ 69.263659, 22.2640009 ], [ 69.2635191, 22.2629712 ], [ 69.2640723, 22.2629702 ], [ 69.2642078, 22.2616826 ], [ 69.2647601, 22.2611668 ], [ 69.264891, 22.257047 ], [ 69.2651679, 22.2571747 ], [ 69.2657211, 22.257174 ], [ 69.2661349, 22.2567875 ], [ 69.2661339, 22.2562725 ], [ 69.2662724, 22.2561432 ], [ 69.2673785, 22.256013 ], [ 69.2683422, 22.2539517 ], [ 69.2683412, 22.2534367 ], [ 69.2682029, 22.2531795 ], [ 69.2690326, 22.2530489 ], [ 69.2693085, 22.2527909 ], [ 69.2704149, 22.2527892 ], [ 69.270692, 22.253046 ], [ 69.2715223, 22.2533021 ], [ 69.2723537, 22.2540732 ], [ 69.2731846, 22.2545868 ], [ 69.2745675, 22.2545845 ], [ 69.2747051, 22.254456 ], [ 69.2748428, 22.2539408 ], [ 69.2762256, 22.2538092 ], [ 69.2770538, 22.2530355 ], [ 69.2784365, 22.2529047 ], [ 69.278435, 22.2521324 ], [ 69.2798173, 22.2517433 ], [ 69.280024599669062, 22.25147195432957 ], [ 69.2805064, 22.2508413 ], [ 69.2809211, 22.2504541 ], [ 69.2820264, 22.2499372 ], [ 69.282303, 22.2499366 ], [ 69.2825801, 22.2501936 ], [ 69.2828566, 22.2501933 ], [ 69.2835469, 22.2498062 ], [ 69.2836841, 22.2490336 ], [ 69.2842373, 22.2490326 ], [ 69.2841021, 22.2508351 ], [ 69.283829664655755, 22.251344766702072 ], [ 69.2838266, 22.2513505 ], [ 69.2829984, 22.2521245 ], [ 69.2824467, 22.2528979 ], [ 69.28231, 22.2534131 ], [ 69.2814794, 22.2530279 ], [ 69.2806497, 22.2530292 ], [ 69.2803732, 22.2531589 ], [ 69.2800982, 22.2539319 ], [ 69.2806514, 22.2539309 ], [ 69.2803768, 22.2549612 ], [ 69.2817593, 22.2547013 ], [ 69.2809317, 22.2557327 ], [ 69.2806548, 22.255604 ], [ 69.2801016, 22.2556049 ], [ 69.2798247, 22.2554771 ], [ 69.2799604, 22.2544469 ], [ 69.2796833, 22.2541901 ], [ 69.2798196, 22.2529024 ], [ 69.2776077, 22.2534212 ], [ 69.2777466, 22.2539358 ], [ 69.2774705, 22.2541938 ], [ 69.2774711, 22.2544512 ], [ 69.2777481, 22.2547083 ], [ 69.2780273, 22.2559952 ], [ 69.2783044, 22.2562522 ], [ 69.2781675, 22.2567673 ], [ 69.277614, 22.2565108 ], [ 69.2776158, 22.2575406 ], [ 69.2781689, 22.2574106 ], [ 69.278445, 22.2571526 ], [ 69.2809347, 22.2572776 ], [ 69.2810715, 22.2567623 ], [ 69.2821759, 22.2557306 ], [ 69.2827264, 22.2544422 ], [ 69.2825871, 22.2536699 ], [ 69.2836928, 22.2532813 ], [ 69.2845215, 22.252765 ], [ 69.2850736, 22.252249 ], [ 69.2857638, 22.2518621 ], [ 69.285848676802132, 22.251544766702072 ], [ 69.2859016, 22.2513469 ], [ 69.2864544, 22.2512167 ], [ 69.2868682, 22.2508302 ], [ 69.2874187, 22.249542 ], [ 69.2876947, 22.249284 ], [ 69.2878313, 22.2482538 ], [ 69.288108, 22.2482534 ], [ 69.2881095, 22.2490258 ], [ 69.2886621, 22.2487673 ], [ 69.2885261, 22.2500549 ], [ 69.2888037, 22.2505694 ], [ 69.2888048, 22.2510844 ], [ 69.288596092556318, 22.251344766702072 ], [ 69.288596092556304, 22.251344766702072 ], [ 69.2883915, 22.2516 ], [ 69.2878383, 22.2516009 ], [ 69.2878398, 22.2523734 ], [ 69.2872868, 22.2525027 ], [ 69.2870108, 22.2527606 ], [ 69.2864573, 22.2526333 ], [ 69.2864584, 22.2531483 ], [ 69.2856289, 22.2532781 ], [ 69.2845236, 22.2537949 ], [ 69.283695, 22.2544405 ], [ 69.2835584, 22.2554707 ], [ 69.2832823, 22.2557285 ], [ 69.282181, 22.2583053 ], [ 69.2817701, 22.2601084 ], [ 69.2826, 22.2601069 ], [ 69.2827336, 22.2580468 ], [ 69.2834244, 22.2574015 ], [ 69.2842539, 22.2572717 ], [ 69.2848041, 22.2557259 ], [ 69.2842509, 22.255727 ], [ 69.2845259, 22.254954 ], [ 69.2848024, 22.2549536 ], [ 69.2848035, 22.2554684 ], [ 69.2861864, 22.255466 ], [ 69.286187, 22.2557236 ], [ 69.2856338, 22.2557245 ], [ 69.2856344, 22.255982 ], [ 69.2861876, 22.255981 ], [ 69.2861885, 22.2564959 ], [ 69.2856357, 22.2566251 ], [ 69.2848071, 22.2572708 ], [ 69.2848077, 22.2575282 ], [ 69.2853609, 22.2575272 ], [ 69.284947, 22.2583004 ], [ 69.2850889, 22.2598451 ], [ 69.2845361, 22.2599742 ], [ 69.28426, 22.2602322 ], [ 69.2837069, 22.2603624 ], [ 69.2835692, 22.2608776 ], [ 69.283293, 22.2611356 ], [ 69.2830186, 22.2621659 ], [ 69.2827425, 22.2624238 ], [ 69.2827446, 22.2634537 ], [ 69.2819194, 22.2657725 ], [ 69.2820632, 22.2683469 ], [ 69.2831706, 22.2687308 ], [ 69.2834476, 22.2689878 ], [ 69.284001, 22.2689869 ], [ 69.2848324, 22.2697578 ], [ 69.2856625, 22.2698856 ], [ 69.2859419, 22.2711725 ], [ 69.2864953, 22.2712997 ], [ 69.2871883, 22.2722001 ], [ 69.2873282, 22.2727149 ], [ 69.2884346, 22.2727128 ], [ 69.2882964, 22.2729706 ], [ 69.2882974, 22.2734854 ], [ 69.2909284, 22.2746391 ], [ 69.2912055, 22.2748959 ], [ 69.2924947, 22.2753679 ], [ 69.2930056, 22.2760519 ], [ 69.2935605, 22.2768232 ], [ 69.2941154, 22.2775947 ], [ 69.2946703, 22.2783662 ], [ 69.2953658, 22.2799097 ], [ 69.2956423, 22.2799092 ], [ 69.2956408, 22.2791367 ], [ 69.296194, 22.2791358 ], [ 69.2956364, 22.277077 ], [ 69.2948075, 22.2775934 ], [ 69.2946671, 22.2768213 ], [ 69.2942516, 22.276307 ], [ 69.2936982, 22.2763082 ], [ 69.2938356, 22.2760504 ], [ 69.2938345, 22.2755353 ], [ 69.2936962, 22.2752781 ], [ 69.2934198, 22.275407 ], [ 69.2928664, 22.2754079 ], [ 69.2924497, 22.2747655 ], [ 69.291757, 22.2739942 ], [ 69.2912036, 22.2739954 ], [ 69.2914777, 22.2727075 ], [ 69.2931369, 22.2724469 ], [ 69.2931358, 22.271932 ], [ 69.2967296, 22.2707665 ], [ 69.2971422, 22.269865 ], [ 69.2976945, 22.269349 ], [ 69.2976933, 22.268834 ], [ 69.297555, 22.2685767 ], [ 69.2983851, 22.2687036 ], [ 69.2994905, 22.2681866 ], [ 69.3000437, 22.2681855 ], [ 69.3001819, 22.2683146 ], [ 69.2999092, 22.2701173 ], [ 69.2997718, 22.2703751 ], [ 69.300602, 22.2705019 ], [ 69.3011564, 22.2710158 ], [ 69.3018483, 22.2714011 ], [ 69.3019882, 22.2719158 ], [ 69.3025414, 22.2719148 ], [ 69.3025398, 22.2711424 ], [ 69.3028164, 22.2711418 ], [ 69.3029558, 22.2719141 ], [ 69.3030949, 22.272042 ], [ 69.3036485, 22.2721702 ], [ 69.3037874, 22.2726848 ], [ 69.3042038, 22.2730698 ], [ 69.30435070312501, 22.273069561003592 ], [ 69.304452443040276, 22.273069395483123 ], [ 69.304550703125017, 22.273069235623982 ], [ 69.304757, 22.2730689 ], [ 69.3050339, 22.2731974 ], [ 69.3050328, 22.2726826 ], [ 69.3055861, 22.2726814 ], [ 69.3057251, 22.2731963 ], [ 69.3061412, 22.2735811 ], [ 69.3066946, 22.2735801 ], [ 69.3078027, 22.2743505 ], [ 69.3089091, 22.2742201 ], [ 69.3089108, 22.2749925 ], [ 69.309464, 22.2749914 ], [ 69.3094646, 22.2752488 ], [ 69.3089116, 22.2753783 ], [ 69.3083595, 22.2758942 ], [ 69.3075296, 22.2758958 ], [ 69.3072526, 22.275768 ], [ 69.3072548, 22.2767979 ], [ 69.3069779, 22.2766693 ], [ 69.306148, 22.2766708 ], [ 69.3058717, 22.2768005 ], [ 69.3058729, 22.2773155 ], [ 69.3053195, 22.2773165 ], [ 69.3053212, 22.2780889 ], [ 69.3058744, 22.278088 ], [ 69.3057385, 22.2793754 ], [ 69.3051868, 22.280149 ], [ 69.3053272, 22.2809211 ], [ 69.3047734, 22.2806648 ], [ 69.3047723, 22.2801498 ], [ 69.3044956, 22.2801503 ], [ 69.3043586, 22.280923 ], [ 69.3035302, 22.2816969 ], [ 69.303533, 22.2829844 ], [ 69.3032586, 22.2840146 ], [ 69.3033979, 22.2842719 ], [ 69.302568, 22.2842736 ], [ 69.3025691, 22.2847884 ], [ 69.3020157, 22.2847895 ], [ 69.3020146, 22.2842745 ], [ 69.3017381, 22.2842751 ], [ 69.3017391, 22.2847899 ], [ 69.3011849, 22.2844043 ], [ 69.3009084, 22.2844049 ], [ 69.3003558, 22.2847926 ], [ 69.3003563, 22.28505 ], [ 69.3009097, 22.285049 ], [ 69.3004964, 22.2860796 ], [ 69.3004975, 22.2865947 ], [ 69.3006366, 22.2867226 ], [ 69.30435070312501, 22.286715704628968 ], [ 69.30435070312501, 22.286715704628971 ], [ 69.3067232, 22.2867113 ], [ 69.3078281, 22.2859368 ], [ 69.3094881, 22.2859335 ], [ 69.3117031, 22.2867016 ], [ 69.3122565, 22.2867007 ], [ 69.3133648, 22.2874709 ], [ 69.3140581, 22.2883713 ], [ 69.3147528, 22.2895281 ], [ 69.3155825, 22.2893981 ], [ 69.3153036, 22.2883688 ], [ 69.3158574, 22.2886253 ], [ 69.3158562, 22.2881103 ], [ 69.3164096, 22.2881091 ], [ 69.3161306, 22.2870798 ], [ 69.3153006, 22.2870815 ], [ 69.3152994, 22.2865665 ], [ 69.3141928, 22.2865686 ], [ 69.3141923, 22.2863112 ], [ 69.3155752, 22.2861792 ], [ 69.3158513, 22.2859213 ], [ 69.3164047, 22.2859201 ], [ 69.3172357, 22.2864335 ], [ 69.320279, 22.2864276 ], [ 69.3204166, 22.2862991 ], [ 69.3205542, 22.2857839 ], [ 69.3211076, 22.2857827 ], [ 69.3212442, 22.2852675 ], [ 69.3215204, 22.2850095 ], [ 69.3215192, 22.2844945 ], [ 69.322348, 22.283978 ], [ 69.3223461, 22.2832055 ], [ 69.3217918, 22.2826916 ], [ 69.3213748, 22.2816625 ], [ 69.3205455, 22.2819216 ], [ 69.3205438, 22.2811492 ], [ 69.3197131, 22.2808935 ], [ 69.3197109, 22.2798636 ], [ 69.3202641, 22.2798625 ], [ 69.3204037, 22.2806346 ], [ 69.3210974, 22.2812764 ], [ 69.3216506, 22.2812755 ], [ 69.3219267, 22.2810173 ], [ 69.3222034, 22.2810169 ], [ 69.3231732, 22.2819165 ], [ 69.3235901, 22.282559 ], [ 69.3241437, 22.2826869 ], [ 69.3241425, 22.2821721 ], [ 69.3244192, 22.2821715 ], [ 69.3245589, 22.2829436 ], [ 69.3252524, 22.2835854 ], [ 69.3258057, 22.2835843 ], [ 69.3263578, 22.2830683 ], [ 69.3266345, 22.2830677 ], [ 69.3269118, 22.2833246 ], [ 69.3274652, 22.2833236 ], [ 69.3277422, 22.2835805 ], [ 69.3280189, 22.2835799 ], [ 69.3281565, 22.2834514 ], [ 69.3281546, 22.282679 ], [ 69.327739, 22.2821649 ], [ 69.328292, 22.2820345 ], [ 69.3284296, 22.281906 ], [ 69.3282888, 22.2806189 ], [ 69.3310564, 22.2811282 ], [ 69.3310577, 22.2816431 ], [ 69.3316109, 22.2816419 ], [ 69.33175, 22.2821568 ], [ 69.3318891, 22.2822847 ], [ 69.3324427, 22.2824127 ], [ 69.3325818, 22.2829273 ], [ 69.3327209, 22.2830555 ], [ 69.3332745, 22.2831834 ], [ 69.3332777, 22.2844709 ], [ 69.3341076, 22.2844692 ], [ 69.3341087, 22.284984 ], [ 69.3352147, 22.2847243 ], [ 69.3354939, 22.2857536 ], [ 69.3349407, 22.2857548 ], [ 69.3349418, 22.2862698 ], [ 69.3324516, 22.2861456 ], [ 69.3321747, 22.2860178 ], [ 69.3324585, 22.289107 ], [ 69.3330119, 22.2891059 ], [ 69.3328749, 22.2898785 ], [ 69.33343, 22.2906499 ], [ 69.3334308, 22.2909073 ], [ 69.3327413, 22.2916812 ], [ 69.3332947, 22.2916801 ], [ 69.3330204, 22.2927105 ], [ 69.3335738, 22.2927094 ], [ 69.333575, 22.2932242 ], [ 69.3341284, 22.2932231 ], [ 69.3341272, 22.2927083 ], [ 69.3344037, 22.2927077 ], [ 69.3345453, 22.2942522 ], [ 69.3348233, 22.2947665 ], [ 69.3351042, 22.2965682 ], [ 69.3348282, 22.2968264 ], [ 69.3346916, 22.2973416 ], [ 69.3357989, 22.2975967 ], [ 69.335938, 22.2981114 ], [ 69.3364931, 22.2988827 ], [ 69.3376018, 22.2996527 ], [ 69.3382954, 22.3002945 ], [ 69.3385721, 22.300294 ], [ 69.3400902, 22.2988751 ], [ 69.3402276, 22.2983599 ], [ 69.3421631, 22.2978409 ], [ 69.3423022, 22.2983556 ], [ 69.3428569, 22.2988693 ], [ 69.3434122, 22.2996406 ], [ 69.3435523, 22.3001552 ], [ 69.3452126, 22.30028 ], [ 69.3454901, 22.3005368 ], [ 69.3471508, 22.3007908 ], [ 69.3477048, 22.3010471 ], [ 69.3507485, 22.3010405 ], [ 69.3513032, 22.3015542 ], [ 69.3532402, 22.3016793 ], [ 69.3535131, 22.3001339 ], [ 69.3540667, 22.3002609 ], [ 69.3546188, 22.2997447 ], [ 69.3554489, 22.299743 ], [ 69.355725, 22.2994848 ], [ 69.357385, 22.2994813 ], [ 69.3575232, 22.2996102 ], [ 69.357942, 22.3008965 ], [ 69.3596012, 22.3005062 ], [ 69.3609826, 22.2997307 ], [ 69.3619495, 22.2993427 ], [ 69.3618078, 22.2977982 ], [ 69.3623608, 22.2976678 ], [ 69.3627743, 22.2972811 ], [ 69.363049, 22.2965081 ], [ 69.3634634, 22.2961206 ], [ 69.3642935, 22.2961188 ], [ 69.3654029, 22.2971462 ], [ 69.3665107, 22.2975302 ], [ 69.3665128, 22.2983027 ], [ 69.367066, 22.2983015 ], [ 69.3672052, 22.298816 ], [ 69.3673444, 22.2989441 ], [ 69.3690051, 22.2991978 ], [ 69.3692816, 22.2990689 ], [ 69.3694207, 22.2995835 ], [ 69.3698373, 22.2999683 ], [ 69.370114, 22.2999676 ], [ 69.3703899, 22.2997096 ], [ 69.3720493, 22.2994482 ], [ 69.3724623, 22.2988041 ], [ 69.3723224, 22.298032 ], [ 69.371769, 22.2980333 ], [ 69.3719055, 22.2975179 ], [ 69.3725959, 22.2968723 ], [ 69.3739798, 22.2969984 ], [ 69.3739777, 22.2962259 ], [ 69.3748074, 22.2960948 ], [ 69.375494, 22.29442 ], [ 69.3754872, 22.2918453 ], [ 69.3757632, 22.2915873 ], [ 69.3759006, 22.2910721 ], [ 69.3770062, 22.2906827 ], [ 69.377419, 22.2900386 ], [ 69.3775558, 22.2892658 ], [ 69.3767257, 22.2892677 ], [ 69.3771389, 22.2887519 ], [ 69.3772763, 22.2882365 ], [ 69.3789363, 22.2882327 ], [ 69.378935, 22.2877177 ], [ 69.3805953, 22.2878423 ], [ 69.381148, 22.2875835 ], [ 69.3877877, 22.2875676 ], [ 69.3880652, 22.2878245 ], [ 69.3924917, 22.2878139 ], [ 69.3944277, 22.2875518 ], [ 69.39512, 22.2879368 ], [ 69.3952623, 22.2892237 ], [ 69.3958146, 22.2888356 ], [ 69.3960913, 22.2888351 ], [ 69.3962294, 22.2889638 ], [ 69.396236, 22.2912811 ], [ 69.3972067, 22.291922 ], [ 69.3977603, 22.2920498 ], [ 69.3977575, 22.2910199 ], [ 69.3991404, 22.2908872 ], [ 69.399693, 22.2906285 ], [ 69.4010759, 22.2904968 ], [ 69.4012124, 22.2899815 ], [ 69.4013509, 22.2898519 ], [ 69.4019041, 22.2898506 ], [ 69.4020423, 22.2899795 ], [ 69.4020446, 22.2907519 ], [ 69.4021839, 22.2908799 ], [ 69.4038442, 22.2910048 ], [ 69.4031453, 22.2886894 ], [ 69.4031417, 22.2874021 ], [ 69.403556, 22.2870142 ], [ 69.4074286, 22.2867472 ], [ 69.4085363, 22.2871311 ], [ 69.4083944, 22.2861016 ], [ 69.4085329, 22.2859719 ], [ 69.4090863, 22.2859706 ], [ 69.4093636, 22.2862274 ], [ 69.4104704, 22.2862246 ], [ 69.4107461, 22.2859664 ], [ 69.4118518, 22.2855778 ], [ 69.4119865, 22.2845476 ], [ 69.412676, 22.2836442 ], [ 69.4132294, 22.2836429 ], [ 69.4143367, 22.2838974 ], [ 69.4148892, 22.2836387 ], [ 69.4159958, 22.2836359 ], [ 69.4165507, 22.2841494 ], [ 69.4176577, 22.2842756 ], [ 69.4175157, 22.2832462 ], [ 69.4170975, 22.2819598 ], [ 69.4187571, 22.2818264 ], [ 69.4188952, 22.2819553 ], [ 69.4190357, 22.2824697 ], [ 69.4201426, 22.2825952 ], [ 69.4206951, 22.2823363 ], [ 69.421525, 22.2823342 ], [ 69.4220776, 22.2820753 ], [ 69.4223541, 22.2820745 ], [ 69.422909, 22.2825881 ], [ 69.4234624, 22.2825865 ], [ 69.4245669, 22.2819405 ], [ 69.4247111, 22.2839999 ], [ 69.4244352, 22.2842581 ], [ 69.424167, 22.287091 ], [ 69.4244477, 22.2883775 ], [ 69.4250026, 22.288891 ], [ 69.4251428, 22.2894057 ], [ 69.4270816, 22.2900437 ], [ 69.427498, 22.2906869 ], [ 69.4283303, 22.2914571 ], [ 69.428611, 22.2927436 ], [ 69.429305, 22.2933851 ], [ 69.4301358, 22.2936404 ], [ 69.4304133, 22.2938971 ], [ 69.4326284, 22.294406 ], [ 69.4331833, 22.2949196 ], [ 69.4337367, 22.294918 ], [ 69.4345683, 22.2954308 ], [ 69.4367841, 22.2961972 ], [ 69.4373369, 22.2960675 ], [ 69.4376168, 22.2970966 ], [ 69.4387236, 22.2970936 ], [ 69.4388599, 22.2965784 ], [ 69.4389982, 22.2964488 ], [ 69.4395512, 22.2963189 ], [ 69.4392713, 22.2952898 ], [ 69.4401012, 22.2952875 ], [ 69.4402407, 22.2958022 ], [ 69.44038, 22.2959301 ], [ 69.4406567, 22.2959294 ], [ 69.44107, 22.2955425 ], [ 69.4409298, 22.2947704 ], [ 69.441483, 22.2947689 ], [ 69.4420404, 22.2960547 ], [ 69.4412108, 22.2961853 ], [ 69.4403825, 22.2967024 ], [ 69.4398291, 22.2967039 ], [ 69.439552, 22.2965765 ], [ 69.4394155, 22.2973491 ], [ 69.4390026, 22.2978653 ], [ 69.439556, 22.2978638 ], [ 69.4396954, 22.2983784 ], [ 69.4398347, 22.2985062 ], [ 69.4414947, 22.2985017 ], [ 69.4419105, 22.2988872 ], [ 69.4417752, 22.29966 ], [ 69.442329, 22.2997869 ], [ 69.4424671, 22.2999156 ], [ 69.4426117, 22.3017175 ], [ 69.4431655, 22.3018443 ], [ 69.4438602, 22.3030016 ], [ 69.4444153, 22.3035149 ], [ 69.4445558, 22.3040295 ], [ 69.4451095, 22.3041562 ], [ 69.4452479, 22.3042851 ], [ 69.4453883, 22.3047995 ], [ 69.4459421, 22.3049263 ], [ 69.4467746, 22.3056965 ], [ 69.4470513, 22.3056958 ], [ 69.4471887, 22.3055671 ], [ 69.4469088, 22.304538 ], [ 69.4464926, 22.3040241 ], [ 69.4456618, 22.3037689 ], [ 69.4457981, 22.3032537 ], [ 69.4455197, 22.3027394 ], [ 69.4453745, 22.3004227 ], [ 69.4459279, 22.3004212 ], [ 69.4460674, 22.3009356 ], [ 69.4466223, 22.3014491 ], [ 69.4469022, 22.3024782 ], [ 69.4473189, 22.3028628 ], [ 69.4481496, 22.3029897 ], [ 69.4480114, 22.3032475 ], [ 69.4481545, 22.3045345 ], [ 69.4487079, 22.304533 ], [ 69.4481594, 22.3060792 ], [ 69.4495437, 22.3063329 ], [ 69.449542, 22.305818 ], [ 69.4500967, 22.3062023 ], [ 69.4503734, 22.3062015 ], [ 69.4505108, 22.3060728 ], [ 69.4505091, 22.3055578 ], [ 69.450785, 22.3052996 ], [ 69.4509213, 22.3045268 ], [ 69.4500914, 22.3045291 ], [ 69.4502284, 22.3042713 ], [ 69.4502267, 22.3037564 ], [ 69.4503651, 22.3036268 ], [ 69.4509181, 22.3034969 ], [ 69.450501, 22.3029832 ], [ 69.4503605, 22.3022112 ], [ 69.4495304, 22.3022134 ], [ 69.4495289, 22.3016986 ], [ 69.4503588, 22.3016961 ], [ 69.4500797, 22.3009246 ], [ 69.4495268, 22.3010545 ], [ 69.4492498, 22.3009269 ], [ 69.4492481, 22.3004119 ], [ 69.4500789, 22.300667 ], [ 69.4499385, 22.3001526 ], [ 69.4495223, 22.2996387 ], [ 69.448693, 22.2998986 ], [ 69.4489685, 22.2995111 ], [ 69.4497981, 22.2993805 ], [ 69.4491035, 22.29861 ], [ 69.4490593, 22.2984404 ], [ 69.4495182, 22.2983514 ], [ 69.449239, 22.2975797 ], [ 69.4486864, 22.2978388 ], [ 69.4485452, 22.2970668 ], [ 69.448129, 22.2965531 ], [ 69.4500681, 22.29732 ], [ 69.4502037, 22.2965472 ], [ 69.450064, 22.2960328 ], [ 69.4508941, 22.2960303 ], [ 69.4508958, 22.2965453 ], [ 69.4511721, 22.2964153 ], [ 69.4528317, 22.2962824 ], [ 69.4525525, 22.2955107 ], [ 69.4531059, 22.2955092 ], [ 69.4531042, 22.2949944 ], [ 69.4514441, 22.2949989 ], [ 69.4514433, 22.2947415 ], [ 69.4519967, 22.29474 ], [ 69.4517183, 22.2942257 ], [ 69.4531022, 22.2943503 ], [ 69.4533796, 22.2946069 ], [ 69.4539334, 22.2947345 ], [ 69.4530991, 22.2934495 ], [ 69.4522692, 22.2934518 ], [ 69.4522709, 22.2939668 ], [ 69.4506092, 22.2934565 ], [ 69.4506108, 22.2939713 ], [ 69.4500576, 22.293973 ], [ 69.4501929, 22.2932002 ], [ 69.4500542, 22.292943 ], [ 69.4495021, 22.2933304 ], [ 69.4489483, 22.2932036 ], [ 69.4492226, 22.2924304 ], [ 69.4483925, 22.2924327 ], [ 69.4483942, 22.2929477 ], [ 69.44784, 22.2926918 ], [ 69.4478417, 22.2932066 ], [ 69.4467357, 22.2934673 ], [ 69.4467342, 22.2929523 ], [ 69.4472876, 22.2929507 ], [ 69.447147, 22.2924361 ], [ 69.4465913, 22.2916653 ], [ 69.4465888, 22.2908929 ], [ 69.4464501, 22.2906359 ], [ 69.44728, 22.2906336 ], [ 69.4474163, 22.2901182 ], [ 69.4476922, 22.28986 ], [ 69.4474097, 22.2880585 ], [ 69.4469937, 22.2875446 ], [ 69.4505905, 22.2876631 ], [ 69.4519752, 22.2880458 ], [ 69.4519735, 22.2875308 ], [ 69.4533581, 22.2879128 ], [ 69.4534962, 22.2880417 ], [ 69.4536418, 22.290101 ], [ 69.4541951, 22.2900993 ], [ 69.4544775, 22.2919008 ], [ 69.4548912, 22.2916423 ], [ 69.4550275, 22.2908695 ], [ 69.4553042, 22.2908687 ], [ 69.4553067, 22.2916412 ], [ 69.4557204, 22.2913824 ], [ 69.4559954, 22.2908668 ], [ 69.4559929, 22.2900944 ], [ 69.4562679, 22.2895786 ], [ 69.4561284, 22.2890641 ], [ 69.4552976, 22.288809 ], [ 69.4550184, 22.2880373 ], [ 69.4555722, 22.2881641 ], [ 69.4557104, 22.2882928 ], [ 69.455851, 22.2888073 ], [ 69.4566816, 22.2890624 ], [ 69.4566801, 22.2885476 ], [ 69.4572329, 22.2884168 ], [ 69.4573703, 22.2882881 ], [ 69.4573696, 22.2880307 ], [ 69.4569525, 22.2872594 ], [ 69.4577826, 22.2872571 ], [ 69.4577843, 22.2877721 ], [ 69.4588895, 22.2873822 ], [ 69.4590269, 22.2872535 ], [ 69.4591624, 22.2862233 ], [ 69.46027, 22.2864777 ], [ 69.460132, 22.2867355 ], [ 69.4602732, 22.2875075 ], [ 69.4608266, 22.287506 ], [ 69.4613739, 22.2857022 ], [ 69.4599916, 22.2859636 ], [ 69.460267, 22.2855761 ], [ 69.4613728, 22.2853155 ], [ 69.4619277, 22.2858288 ], [ 69.4627576, 22.2858266 ], [ 69.4628952, 22.2856979 ], [ 69.4630315, 22.284925 ], [ 69.4634467, 22.2851813 ], [ 69.4634501, 22.2862112 ], [ 69.4631743, 22.2864694 ], [ 69.462765, 22.2880154 ], [ 69.4633178, 22.2878846 ], [ 69.4649799, 22.288524 ], [ 69.4649816, 22.289039 ], [ 69.4635975, 22.2887854 ], [ 69.4638791, 22.2903295 ], [ 69.4633259, 22.290331 ], [ 69.4631887, 22.2908464 ], [ 69.4627759, 22.2913626 ], [ 69.4633293, 22.2913609 ], [ 69.4631921, 22.2918763 ], [ 69.4633318, 22.2921333 ], [ 69.4622256, 22.2922647 ], [ 69.4619485, 22.2921373 ], [ 69.4622208, 22.2908491 ], [ 69.4616676, 22.2908508 ], [ 69.461943, 22.2904633 ], [ 69.4624958, 22.2903335 ], [ 69.4624951, 22.2900759 ], [ 69.4608338, 22.2896941 ], [ 69.4602792, 22.2893098 ], [ 69.4602766, 22.2885374 ], [ 69.4583412, 22.2889286 ], [ 69.4577892, 22.2893168 ], [ 69.4577918, 22.2900893 ], [ 69.4575151, 22.29009 ], [ 69.4575134, 22.2895752 ], [ 69.456961, 22.2898341 ], [ 69.4568255, 22.2908644 ], [ 69.4559988, 22.2918967 ], [ 69.4560005, 22.2924115 ], [ 69.4562779, 22.2926682 ], [ 69.4562789, 22.2929258 ], [ 69.4560029, 22.293184 ], [ 69.4560054, 22.2939564 ], [ 69.456283, 22.2942131 ], [ 69.4564235, 22.2947275 ], [ 69.4558701, 22.2947292 ], [ 69.4558684, 22.2942142 ], [ 69.4550392, 22.2944741 ], [ 69.4543537, 22.2965357 ], [ 69.4545009, 22.2991101 ], [ 69.4550543, 22.2991084 ], [ 69.4553384, 22.3014249 ], [ 69.4556151, 22.301424 ], [ 69.4556117, 22.3003941 ], [ 69.4560271, 22.3006506 ], [ 69.4563055, 22.3011647 ], [ 69.4563114, 22.302967 ], [ 69.4567319, 22.3045105 ], [ 69.457562, 22.3045083 ], [ 69.4578345, 22.3032201 ], [ 69.4583879, 22.3032185 ], [ 69.4583896, 22.3037336 ], [ 69.4589421, 22.3034744 ], [ 69.4589438, 22.3039895 ], [ 69.4592205, 22.3039885 ], [ 69.459355, 22.3029583 ], [ 69.4589387, 22.3024446 ], [ 69.4597688, 22.3024423 ], [ 69.4594879, 22.3011556 ], [ 69.4586571, 22.3009006 ], [ 69.4586588, 22.3014155 ], [ 69.4578277, 22.3011603 ], [ 69.4579648, 22.3009025 ], [ 69.4579623, 22.3001301 ], [ 69.4581006, 22.3000006 ], [ 69.458654, 22.2999989 ], [ 69.4589317, 22.3002556 ], [ 69.4594849, 22.3002541 ], [ 69.4597625, 22.3005107 ], [ 69.4600392, 22.30051 ], [ 69.4601766, 22.3003813 ], [ 69.4603129, 22.2996085 ], [ 69.4589294, 22.2996124 ], [ 69.4593424, 22.2990963 ], [ 69.4594794, 22.298581 ], [ 69.4580961, 22.2985848 ], [ 69.4579555, 22.2980704 ], [ 69.4575393, 22.2975567 ], [ 69.4586465, 22.2976818 ], [ 69.4589241, 22.2979384 ], [ 69.460032, 22.2983219 ], [ 69.4600286, 22.2972921 ], [ 69.4589211, 22.2970379 ], [ 69.4589194, 22.2965228 ], [ 69.4594728, 22.2965213 ], [ 69.4594711, 22.2960063 ], [ 69.4597478, 22.2960055 ], [ 69.4597495, 22.2965206 ], [ 69.4601632, 22.2962618 ], [ 69.4600177, 22.2939451 ], [ 69.4611252, 22.2941993 ], [ 69.4609855, 22.2939422 ], [ 69.4611176, 22.2918821 ], [ 69.4613943, 22.2918814 ], [ 69.4615406, 22.2944556 ], [ 69.4614044, 22.294971 ], [ 69.4608512, 22.2949725 ], [ 69.4609923, 22.296002 ], [ 69.460582, 22.2972906 ], [ 69.4614121, 22.2972881 ], [ 69.4614136, 22.2978031 ], [ 69.4608604, 22.2978046 ], [ 69.4610024, 22.2990915 ], [ 69.4611417, 22.2992195 ], [ 69.4619717, 22.2992172 ], [ 69.4622475, 22.2989589 ], [ 69.4628009, 22.2989573 ], [ 69.4629392, 22.2990861 ], [ 69.462803, 22.2996015 ], [ 69.4622498, 22.299603 ], [ 69.4621125, 22.3001184 ], [ 69.4615609, 22.3006349 ], [ 69.4617141, 22.3050114 ], [ 69.462267, 22.3048806 ], [ 69.4626803, 22.3044937 ], [ 69.4628175, 22.3039783 ], [ 69.4633709, 22.3039768 ], [ 69.4633692, 22.3034618 ], [ 69.463922, 22.3033312 ], [ 69.4643354, 22.3029441 ], [ 69.4644726, 22.3024289 ], [ 69.4653025, 22.3024264 ], [ 69.4650241, 22.3019124 ], [ 69.4655775, 22.3019107 ], [ 69.4654361, 22.3011388 ], [ 69.4651587, 22.3008821 ], [ 69.465157, 22.3003671 ], [ 69.4644631, 22.2995967 ], [ 69.4639097, 22.2995982 ], [ 69.464046, 22.299083 ], [ 69.4639029, 22.2975385 ], [ 69.4643184, 22.2977948 ], [ 69.4651526, 22.2990798 ], [ 69.465432, 22.2998513 ], [ 69.4658487, 22.3002359 ], [ 69.4664025, 22.3003635 ], [ 69.4664042, 22.3008785 ], [ 69.4669562, 22.3004903 ], [ 69.4675093, 22.3003603 ], [ 69.4673686, 22.2998458 ], [ 69.4670912, 22.2995892 ], [ 69.4666731, 22.2985604 ], [ 69.4661199, 22.2985621 ], [ 69.4656992, 22.2970184 ], [ 69.4654217, 22.2967617 ], [ 69.4650037, 22.2957332 ], [ 69.4658338, 22.2957307 ], [ 69.4658372, 22.2967606 ], [ 69.4663902, 22.2966298 ], [ 69.467218, 22.2959842 ], [ 69.4670808, 22.2964996 ], [ 69.466805, 22.2967578 ], [ 69.4668077, 22.2975302 ], [ 69.4675028, 22.2984289 ], [ 69.4677795, 22.2984281 ], [ 69.4679169, 22.2982994 ], [ 69.4677765, 22.2975274 ], [ 69.4683299, 22.2975259 ], [ 69.4680488, 22.2962393 ], [ 69.4688793, 22.2963652 ], [ 69.4691551, 22.2961068 ], [ 69.4699848, 22.2959763 ], [ 69.4699831, 22.2954612 ], [ 69.4702598, 22.2954605 ], [ 69.4705406, 22.296747 ], [ 69.4716465, 22.2964864 ], [ 69.4716501, 22.2975162 ], [ 69.4719267, 22.2975155 ], [ 69.4728833, 22.2941654 ], [ 69.4728799, 22.2931356 ], [ 69.4732944, 22.292877 ], [ 69.4734374, 22.2944213 ], [ 69.4737151, 22.294678 ], [ 69.4737177, 22.2954505 ], [ 69.4738568, 22.2955782 ], [ 69.4744108, 22.2957058 ], [ 69.4745469, 22.2951906 ], [ 69.4748226, 22.2949322 ], [ 69.4746805, 22.2936453 ], [ 69.4755104, 22.2936429 ], [ 69.4755077, 22.2928704 ], [ 69.4746778, 22.2928729 ], [ 69.4746752, 22.2921006 ], [ 69.4755053, 22.2920982 ], [ 69.475507, 22.292613 ], [ 69.4760607, 22.2927396 ], [ 69.4764782, 22.29364 ], [ 69.4764809, 22.2944125 ], [ 69.4760698, 22.2954435 ], [ 69.4755164, 22.2954452 ], [ 69.4751089, 22.2977636 ], [ 69.474696, 22.2982798 ], [ 69.475249, 22.298149 ], [ 69.4758011, 22.2977615 ], [ 69.475664, 22.2982769 ], [ 69.4752511, 22.2987931 ], [ 69.4760808, 22.2986614 ], [ 69.4767706, 22.2982737 ], [ 69.476906, 22.2972433 ], [ 69.4788423, 22.2971085 ], [ 69.4791186, 22.2969795 ], [ 69.4791212, 22.2977517 ], [ 69.4785678, 22.2977534 ], [ 69.4784316, 22.2985262 ], [ 69.4780188, 22.2990424 ], [ 69.4788489, 22.2990399 ], [ 69.4788453, 22.2980101 ], [ 69.4792607, 22.2982664 ], [ 69.4796807, 22.2995525 ], [ 69.4788515, 22.2998124 ], [ 69.4788542, 22.3005848 ], [ 69.4785775, 22.3005856 ], [ 69.4785739, 22.2995557 ], [ 69.4766381, 22.2998188 ], [ 69.4766389, 22.3000764 ], [ 69.4771923, 22.3000747 ], [ 69.4771932, 22.3003321 ], [ 69.4763631, 22.3003346 ], [ 69.4763648, 22.3008496 ], [ 69.475534, 22.3005945 ], [ 69.4755314, 22.299822 ], [ 69.4738725, 22.3002127 ], [ 69.4735951, 22.299956 ], [ 69.472765, 22.2999585 ], [ 69.4719362, 22.3003476 ], [ 69.4713872, 22.3016364 ], [ 69.4708341, 22.3017665 ], [ 69.4705584, 22.3020246 ], [ 69.4700054, 22.3021554 ], [ 69.470008, 22.3029279 ], [ 69.4680728, 22.3034484 ], [ 69.4679358, 22.3039638 ], [ 69.4672471, 22.3047381 ], [ 69.4666941, 22.3048679 ], [ 69.465315, 22.3061592 ], [ 69.4647619, 22.30629 ], [ 69.4644896, 22.3075782 ], [ 69.465043, 22.3075765 ], [ 69.464493, 22.3086081 ], [ 69.4636629, 22.3086103 ], [ 69.4631137, 22.3098993 ], [ 69.4628366, 22.309771 ], [ 69.4614526, 22.3096466 ], [ 69.4618697, 22.3104177 ], [ 69.4607731, 22.3135105 ], [ 69.4602214, 22.3140271 ], [ 69.4602222, 22.3142845 ], [ 69.4606395, 22.3147984 ], [ 69.4600865, 22.3149282 ], [ 69.4595346, 22.3154446 ], [ 69.4589816, 22.3155754 ], [ 69.4592677, 22.3184068 ], [ 69.4606512, 22.3184028 ], [ 69.460377, 22.319176 ], [ 69.4598236, 22.3191775 ], [ 69.4601037, 22.3202066 ], [ 69.4609339, 22.3202043 ], [ 69.4609322, 22.3196893 ], [ 69.461486, 22.3198161 ], [ 69.4617637, 22.3200728 ], [ 69.4623174, 22.3202004 ], [ 69.4621778, 22.3199433 ], [ 69.462176, 22.3194283 ], [ 69.462452, 22.3191701 ], [ 69.4625892, 22.3186547 ], [ 69.4620356, 22.3186564 ], [ 69.4620322, 22.3176266 ], [ 69.4612021, 22.3176288 ], [ 69.4609228, 22.3168572 ], [ 69.4598153, 22.316603 ], [ 69.4600906, 22.3162155 ], [ 69.4603673, 22.3162147 ], [ 69.460922, 22.3165997 ], [ 69.4610583, 22.3160845 ], [ 69.4613341, 22.3158262 ], [ 69.4614713, 22.315311 ], [ 69.4623006, 22.3150511 ], [ 69.4621641, 22.3158239 ], [ 69.4617514, 22.3163399 ], [ 69.4623048, 22.3163384 ], [ 69.4620298, 22.3168541 ], [ 69.4625828, 22.3167233 ], [ 69.4628587, 22.3164652 ], [ 69.4634121, 22.3164635 ], [ 69.4636896, 22.3167201 ], [ 69.4650732, 22.3167162 ], [ 69.4653503, 22.3168447 ], [ 69.4653486, 22.3163297 ], [ 69.465902, 22.3163281 ], [ 69.4659037, 22.316843 ], [ 69.466733, 22.3165831 ], [ 69.4667347, 22.3170981 ], [ 69.4661813, 22.3170996 ], [ 69.466183, 22.3176147 ], [ 69.4656296, 22.3176162 ], [ 69.4659077, 22.3180012 ], [ 69.4667378, 22.3179987 ], [ 69.4668761, 22.3181276 ], [ 69.4667417, 22.3191579 ], [ 69.4661874, 22.318902 ], [ 69.4664624, 22.3183862 ], [ 69.4650791, 22.3185185 ], [ 69.464803, 22.3186485 ], [ 69.4646657, 22.3191637 ], [ 69.4643898, 22.3194221 ], [ 69.4642537, 22.3199373 ], [ 69.4653605, 22.3199343 ], [ 69.4653622, 22.3204491 ], [ 69.4664696, 22.3205742 ], [ 69.4667459, 22.3204451 ], [ 69.4667476, 22.3209602 ], [ 69.4675779, 22.3209577 ], [ 69.4673046, 22.3219883 ], [ 69.466751, 22.32199 ], [ 69.4664718, 22.3212183 ], [ 69.4659182, 22.32122 ], [ 69.4660579, 22.3217345 ], [ 69.4659209, 22.3219923 ], [ 69.4653675, 22.321994 ], [ 69.4655096, 22.3232809 ], [ 69.4656493, 22.3235379 ], [ 69.4650957, 22.3235394 ], [ 69.4652346, 22.3237967 ], [ 69.4652405, 22.3255988 ], [ 69.4653798, 22.3257267 ], [ 69.4659337, 22.3258543 ], [ 69.4659362, 22.3266268 ], [ 69.4662131, 22.326626 ], [ 69.4663482, 22.3258532 ], [ 69.4668992, 22.3250792 ], [ 69.4668984, 22.3248216 ], [ 69.4666198, 22.3243075 ], [ 69.4666191, 22.3240501 ], [ 69.4667574, 22.3239205 ], [ 69.4670343, 22.3239197 ], [ 69.4671725, 22.3240484 ], [ 69.4673131, 22.3245631 ], [ 69.4675894, 22.324433 ], [ 69.46842, 22.3245599 ], [ 69.4681458, 22.3253331 ], [ 69.4673165, 22.3255929 ], [ 69.4670424, 22.3263661 ], [ 69.4664888, 22.3263676 ], [ 69.4674605, 22.3273949 ], [ 69.4680165, 22.3281656 ], [ 69.468157, 22.3286801 ], [ 69.46705, 22.3286833 ], [ 69.4670509, 22.3289407 ], [ 69.4692679, 22.329835 ], [ 69.4701016, 22.3308624 ], [ 69.4725939, 22.3313701 ], [ 69.4728716, 22.3316268 ], [ 69.4750882, 22.3323928 ], [ 69.4752265, 22.3325215 ], [ 69.4753671, 22.3330361 ], [ 69.4811802, 22.3334047 ], [ 69.4813185, 22.3335334 ], [ 69.4825665, 22.334173 ], [ 69.4831218, 22.3346863 ], [ 69.4853393, 22.3357095 ], [ 69.4870052, 22.3372493 ], [ 69.488528904687513, 22.337952252372972 ], [ 69.4886686, 22.3380167 ], [ 69.4892219, 22.338015 ], [ 69.4894992, 22.3381433 ], [ 69.4894966, 22.337371 ], [ 69.488328904687506, 22.337012800623814 ], [ 69.4870031, 22.3366061 ], [ 69.4870003, 22.3358337 ], [ 69.4875548, 22.3360894 ], [ 69.4874142, 22.335575 ], [ 69.4863036, 22.3345485 ], [ 69.4861637, 22.3340339 ], [ 69.4853337, 22.3340363 ], [ 69.4853327, 22.3337789 ], [ 69.4867169, 22.3339031 ], [ 69.4872722, 22.3344164 ], [ 69.488528904687513, 22.334329319001878 ], [ 69.4892089, 22.3342822 ], [ 69.4892063, 22.3335098 ], [ 69.4902184, 22.3335944 ], [ 69.4903142, 22.333764 ], [ 69.4905918, 22.3340206 ], [ 69.4910505, 22.3341068 ], [ 69.4913282, 22.3343635 ], [ 69.4914238, 22.334533 ], [ 69.4921592, 22.3346184 ], [ 69.492255, 22.334788 ], [ 69.4925327, 22.3350446 ], [ 69.4929483, 22.3353007 ], [ 69.4930889, 22.3358152 ], [ 69.4922586, 22.3358178 ], [ 69.4919846, 22.336591 ], [ 69.4914312, 22.3365927 ], [ 69.4912949, 22.3373655 ], [ 69.4910191, 22.3376239 ], [ 69.4910199, 22.3378813 ], [ 69.4912977, 22.338138 ], [ 69.4914384, 22.3386525 ], [ 69.4919917, 22.3386507 ], [ 69.4919927, 22.3389082 ], [ 69.4906081, 22.3386549 ], [ 69.4904665, 22.337883 ], [ 69.4906035, 22.3373676 ], [ 69.49005, 22.3373693 ], [ 69.4893945, 22.3479274 ], [ 69.489674, 22.3486989 ], [ 69.4899615, 22.3517878 ], [ 69.4903809, 22.3528163 ], [ 69.4909345, 22.3528146 ], [ 69.4910751, 22.3535867 ], [ 69.4913527, 22.3538433 ], [ 69.4914952, 22.3548726 ], [ 69.4920492, 22.3549992 ], [ 69.4924671, 22.3558996 ], [ 69.4930226, 22.3564128 ], [ 69.4935814, 22.357956 ], [ 69.4942754, 22.3583396 ], [ 69.49497, 22.3592391 ], [ 69.4955255, 22.3597522 ], [ 69.4963595, 22.3607796 ], [ 69.4971962, 22.3625793 ], [ 69.4980305, 22.3636067 ], [ 69.4990019, 22.3642468 ], [ 69.5014969, 22.3652689 ], [ 69.5020524, 22.3657823 ], [ 69.5031611, 22.3661654 ], [ 69.5031592, 22.3656505 ], [ 69.50399, 22.3657762 ], [ 69.5045457, 22.3662894 ], [ 69.5059314, 22.3668 ], [ 69.5067619, 22.3667974 ], [ 69.5068995, 22.3666687 ], [ 69.5068938, 22.365124 ], [ 69.5073087, 22.364865 ], [ 69.5074493, 22.3656371 ], [ 69.50842, 22.3660198 ], [ 69.5111947, 22.3678133 ], [ 69.5117502, 22.3683266 ], [ 69.5127211, 22.3689675 ], [ 69.5128617, 22.3694819 ], [ 69.5134155, 22.3694802 ], [ 69.5135551, 22.3699947 ], [ 69.5145279, 22.3708924 ], [ 69.5148046, 22.3708915 ], [ 69.5150806, 22.3706331 ], [ 69.5159101, 22.3703731 ], [ 69.516186, 22.3701147 ], [ 69.5175672, 22.3693379 ], [ 69.5183958, 22.3688203 ], [ 69.5189494, 22.3688186 ], [ 69.5192253, 22.3685602 ], [ 69.5217128, 22.3675224 ], [ 69.5219887, 22.367264 ], [ 69.5233712, 22.3668737 ], [ 69.5233693, 22.3663587 ], [ 69.5272418, 22.3655738 ], [ 69.5272436, 22.3660888 ], [ 69.5300123, 22.3662081 ], [ 69.5330601, 22.3669703 ], [ 69.5341675, 22.3669667 ], [ 69.5347229, 22.3674799 ], [ 69.5361072, 22.3674753 ], [ 69.5366617, 22.3677309 ], [ 69.5386005, 22.3679818 ], [ 69.5388781, 22.3682385 ], [ 69.5402627, 22.3683631 ], [ 69.5401249, 22.368621 ], [ 69.5404086, 22.3704222 ], [ 69.5408259, 22.3708066 ], [ 69.5415188, 22.3711909 ], [ 69.5416598, 22.3717053 ], [ 69.5399998, 22.3719684 ], [ 69.539728, 22.3732566 ], [ 69.5441576, 22.37337 ], [ 69.544295, 22.3732413 ], [ 69.5442931, 22.3727265 ], [ 69.5438743, 22.371698 ], [ 69.5444281, 22.3716961 ], [ 69.544426, 22.3711812 ], [ 69.5435955, 22.3711841 ], [ 69.5435946, 22.3709265 ], [ 69.5444245, 22.3707945 ], [ 69.5448378, 22.3704075 ], [ 69.5451115, 22.3696341 ], [ 69.545938, 22.3686014 ], [ 69.5462107, 22.3675706 ], [ 69.545794, 22.3670571 ], [ 69.5466256, 22.3673118 ], [ 69.5470352, 22.3660231 ], [ 69.5474494, 22.365635 ], [ 69.5480025, 22.3655048 ], [ 69.5479994, 22.3647326 ], [ 69.5485545, 22.3651164 ], [ 69.5488314, 22.3651155 ], [ 69.5499356, 22.3643393 ], [ 69.550766, 22.3643364 ], [ 69.5511792, 22.3639493 ], [ 69.5517288, 22.3629176 ], [ 69.5521429, 22.3625296 ], [ 69.5523245, 22.3624882 ], [ 69.5524203, 22.3626577 ], [ 69.552879, 22.3627439 ], [ 69.5531569, 22.3630004 ], [ 69.5532527, 22.3631699 ], [ 69.5539883, 22.363255 ], [ 69.5542661, 22.3635114 ], [ 69.5543619, 22.363681 ], [ 69.5548208, 22.363767 ], [ 69.5549166, 22.3639365 ], [ 69.5553754, 22.3640227 ], [ 69.5554712, 22.3641922 ], [ 69.5562068, 22.3642773 ], [ 69.5564846, 22.3645337 ], [ 69.5565806, 22.3647033 ], [ 69.5573162, 22.3647883 ], [ 69.557594, 22.3650448 ], [ 69.5576898, 22.3652143 ], [ 69.55898, 22.3655549 ], [ 69.559076, 22.3657244 ], [ 69.5596296, 22.3657225 ], [ 69.5593568, 22.3667533 ], [ 69.5599098, 22.3666224 ], [ 69.5600472, 22.3664935 ], [ 69.5601822, 22.3654632 ], [ 69.5591688, 22.3653782 ], [ 69.5590739, 22.3652096 ], [ 69.5577826, 22.3648681 ], [ 69.5576878, 22.3646995 ], [ 69.5574099, 22.364443 ], [ 69.5566734, 22.3643568 ], [ 69.5565785, 22.3641882 ], [ 69.5563007, 22.3639318 ], [ 69.5555642, 22.3638458 ], [ 69.5554693, 22.3636772 ], [ 69.5550094, 22.3635902 ], [ 69.5549146, 22.3634217 ], [ 69.5544549, 22.3633347 ], [ 69.5541771, 22.3630782 ], [ 69.5540822, 22.3629095 ], [ 69.5533455, 22.3628235 ], [ 69.5532506, 22.3626549 ], [ 69.552973, 22.3623984 ], [ 69.5525131, 22.3623115 ], [ 69.5524183, 22.3621429 ], [ 69.5510333, 22.3618902 ], [ 69.551444, 22.3608588 ], [ 69.552255, 22.3559643 ], [ 69.552116, 22.3557072 ], [ 69.5507307, 22.3553253 ], [ 69.550175, 22.3548123 ], [ 69.5493442, 22.3546868 ], [ 69.5492013, 22.3536573 ], [ 69.5497528, 22.3531406 ], [ 69.5498857, 22.3515954 ], [ 69.5487794, 22.3518566 ], [ 69.5489134, 22.3508263 ], [ 69.5491892, 22.350568 ], [ 69.5489083, 22.349539 ], [ 69.5484916, 22.3490255 ], [ 69.5451658, 22.3478775 ], [ 69.5421213, 22.3478879 ], [ 69.5415666, 22.3476322 ], [ 69.5410132, 22.3476341 ], [ 69.5396343, 22.3489261 ], [ 69.5385266, 22.3488014 ], [ 69.5385256, 22.348544 ], [ 69.5396322, 22.3484111 ], [ 69.5397696, 22.3482824 ], [ 69.5397668, 22.3475099 ], [ 69.5389324, 22.3464829 ], [ 69.5390654, 22.3449376 ], [ 69.5401735, 22.3451915 ], [ 69.5401695, 22.3441616 ], [ 69.5405852, 22.3444177 ], [ 69.5407269, 22.3451896 ], [ 69.5434961, 22.3455661 ], [ 69.543774, 22.3458225 ], [ 69.5448821, 22.3460764 ], [ 69.5459851, 22.3450427 ], [ 69.5476462, 22.3451663 ], [ 69.5476441, 22.3446513 ], [ 69.5501355, 22.3447713 ], [ 69.5502741, 22.3449 ], [ 69.5502771, 22.3456723 ], [ 69.5501402, 22.3459303 ], [ 69.5470977, 22.3464555 ], [ 69.5472376, 22.34697 ], [ 69.5473771, 22.3470977 ], [ 69.5482073, 22.3470949 ], [ 69.548485, 22.3473516 ], [ 69.5493149, 22.3472204 ], [ 69.5493179, 22.3479928 ], [ 69.5515305, 22.3475986 ], [ 69.5522185, 22.3466955 ], [ 69.5523544, 22.3459227 ], [ 69.5529078, 22.3459208 ], [ 69.5531775, 22.3441178 ], [ 69.5526241, 22.3441195 ], [ 69.552622, 22.3436046 ], [ 69.5551113, 22.3432094 ], [ 69.5552497, 22.3433381 ], [ 69.5553907, 22.3438526 ], [ 69.5559442, 22.3438507 ], [ 69.555941, 22.3430783 ], [ 69.5576054, 22.3439734 ], [ 69.5584351, 22.3438422 ], [ 69.558432, 22.3430698 ], [ 69.5589854, 22.3430679 ], [ 69.5589887, 22.3438403 ], [ 69.559542, 22.3438384 ], [ 69.5595381, 22.3428086 ], [ 69.5600915, 22.3428067 ], [ 69.5599567, 22.3438369 ], [ 69.5614852, 22.3452472 ], [ 69.562316, 22.3453735 ], [ 69.5623181, 22.3458885 ], [ 69.562872, 22.3460148 ], [ 69.5632884, 22.3463999 ], [ 69.5634292, 22.3469144 ], [ 69.5639834, 22.3470408 ], [ 69.5642612, 22.3472973 ], [ 69.5650924, 22.3475519 ], [ 69.5656481, 22.3480648 ], [ 69.5664795, 22.3483194 ], [ 69.5671735, 22.3489611 ], [ 69.5675976, 22.3510193 ], [ 69.568151, 22.3510174 ], [ 69.568291, 22.3515319 ], [ 69.5694024, 22.3525577 ], [ 69.5699592, 22.3533283 ], [ 69.5705178, 22.3546137 ], [ 69.5705211, 22.3553859 ], [ 69.5706603, 22.3555137 ], [ 69.5726001, 22.3560219 ], [ 69.5734326, 22.3565339 ], [ 69.5737093, 22.3565328 ], [ 69.573985, 22.3562744 ], [ 69.575368, 22.3560121 ], [ 69.5756437, 22.3557535 ], [ 69.5761967, 22.3556233 ], [ 69.5763326, 22.3551079 ], [ 69.5767465, 22.3547199 ], [ 69.5772997, 22.3545895 ], [ 69.5774354, 22.3540741 ], [ 69.5782604, 22.3527838 ], [ 69.579227, 22.3521363 ], [ 69.5800569, 22.3520051 ], [ 69.5797758, 22.3509762 ], [ 69.5803288, 22.350845 ], [ 69.5807409, 22.3502004 ], [ 69.5812924, 22.3496834 ], [ 69.5812912, 22.349426 ], [ 69.5810123, 22.3489121 ], [ 69.5811491, 22.3483967 ], [ 69.5800404, 22.348014 ], [ 69.5775477, 22.3476371 ], [ 69.5775447, 22.3468647 ], [ 69.5772678, 22.3468658 ], [ 69.5772699, 22.3473807 ], [ 69.5764386, 22.3471261 ], [ 69.5764364, 22.3466112 ], [ 69.575883, 22.3466131 ], [ 69.575742, 22.3460989 ], [ 69.5750474, 22.3453289 ], [ 69.5742175, 22.34546 ], [ 69.5725543, 22.3448227 ], [ 69.5722744, 22.3440514 ], [ 69.57089, 22.3439271 ], [ 69.5700603, 22.3440592 ], [ 69.5700582, 22.3435441 ], [ 69.569504, 22.343417 ], [ 69.568949, 22.3430333 ], [ 69.5689469, 22.3425183 ], [ 69.5695016, 22.3427738 ], [ 69.5693564, 22.3412295 ], [ 69.5689376, 22.3402011 ], [ 69.568385, 22.3404604 ], [ 69.5683871, 22.3409754 ], [ 69.5681104, 22.3409764 ], [ 69.5678295, 22.3399475 ], [ 69.5672759, 22.3399496 ], [ 69.566996, 22.3391781 ], [ 69.5675496, 22.3391762 ], [ 69.5675475, 22.3386611 ], [ 69.5664405, 22.3386651 ], [ 69.5665774, 22.3384071 ], [ 69.5664373, 22.3378927 ], [ 69.5656082, 22.3381531 ], [ 69.5665721, 22.3371198 ], [ 69.5665679, 22.33609 ], [ 69.566982, 22.3357018 ], [ 69.5678123, 22.3356989 ], [ 69.5682253, 22.3353117 ], [ 69.5683621, 22.3347963 ], [ 69.5672561, 22.3350577 ], [ 69.567254, 22.3345428 ], [ 69.5680843, 22.3345398 ], [ 69.5683527, 22.3324791 ], [ 69.5678002, 22.3327386 ], [ 69.5677981, 22.3322236 ], [ 69.5689051, 22.3322198 ], [ 69.568618, 22.3296462 ], [ 69.5680644, 22.3296481 ], [ 69.5680624, 22.3291331 ], [ 69.567509, 22.3291352 ], [ 69.5673608, 22.3268184 ], [ 69.5676363, 22.32656 ], [ 69.5674912, 22.3247583 ], [ 69.5669378, 22.3247602 ], [ 69.5669367, 22.3245028 ], [ 69.5674897, 22.3243716 ], [ 69.5679026, 22.3239843 ], [ 69.5680395, 22.3234689 ], [ 69.5685925, 22.3233378 ], [ 69.5690043, 22.3226933 ], [ 69.5689981, 22.3211484 ], [ 69.5688592, 22.3208916 ], [ 69.5683052, 22.3207642 ], [ 69.5680276, 22.3205077 ], [ 69.5663672, 22.3205136 ], [ 69.56609, 22.3203862 ], [ 69.5660888, 22.3201287 ], [ 69.5683022, 22.3199919 ], [ 69.5685798, 22.3202484 ], [ 69.5702408, 22.3203716 ], [ 69.5707817, 22.3172801 ], [ 69.5699505, 22.3170256 ], [ 69.5699484, 22.3165107 ], [ 69.5705023, 22.316637 ], [ 69.5711909, 22.3159914 ], [ 69.5713277, 22.3154759 ], [ 69.5707743, 22.315478 ], [ 69.5707711, 22.3147056 ], [ 69.5704944, 22.3147065 ], [ 69.5704965, 22.3152214 ], [ 69.5693861, 22.3143238 ], [ 69.5688325, 22.3143257 ], [ 69.5685564, 22.3144559 ], [ 69.5685585, 22.3149708 ], [ 69.566621, 22.3148485 ], [ 69.5655127, 22.3144665 ], [ 69.5652319, 22.3134376 ], [ 69.5666159, 22.313561 ], [ 69.5682771, 22.3138127 ], [ 69.5693835, 22.3136806 ], [ 69.5694717, 22.3122231 ], [ 69.5697928, 22.3123918 ], [ 69.5699357, 22.3134211 ], [ 69.5707649, 22.3131607 ], [ 69.5709049, 22.3136752 ], [ 69.5715997, 22.3143161 ], [ 69.5718764, 22.3143149 ], [ 69.5720138, 22.3141862 ], [ 69.5720117, 22.3136714 ], [ 69.5717339, 22.3134149 ], [ 69.5718696, 22.3126419 ], [ 69.5713162, 22.312644 ], [ 69.571171, 22.3110997 ], [ 69.5706146, 22.3103291 ], [ 69.5706123, 22.3098143 ], [ 69.5703336, 22.3093004 ], [ 69.5704704, 22.308785 ], [ 69.5696409, 22.3089161 ], [ 69.5688097, 22.3086616 ], [ 69.5682548, 22.3082777 ], [ 69.5682536, 22.3080203 ], [ 69.5690843, 22.3081456 ], [ 69.56936, 22.3078872 ], [ 69.5699138, 22.3080144 ], [ 69.5699117, 22.3074996 ], [ 69.5704662, 22.3077551 ], [ 69.5704642, 22.3072401 ], [ 69.5712952, 22.3074947 ], [ 69.5710217, 22.3082681 ], [ 69.5704683, 22.3082699 ], [ 69.571168, 22.3103272 ], [ 69.5717244, 22.3110978 ], [ 69.5718664, 22.3118696 ], [ 69.572697, 22.3119949 ], [ 69.5728355, 22.3121237 ], [ 69.5729764, 22.3126381 ], [ 69.5735297, 22.312636 ], [ 69.5738013, 22.3113478 ], [ 69.5746314, 22.3113448 ], [ 69.5747639, 22.3100571 ], [ 69.5746241, 22.3095427 ], [ 69.5751784, 22.3097982 ], [ 69.5755857, 22.3079944 ], [ 69.5761368, 22.3074775 ], [ 69.5761359, 22.30722 ], [ 69.5755793, 22.3064497 ], [ 69.5755772, 22.3059347 ], [ 69.57599, 22.3052892 ], [ 69.5770964, 22.3051569 ], [ 69.5768227, 22.3059303 ], [ 69.5759917, 22.3056757 ], [ 69.5759949, 22.3064482 ], [ 69.5771011, 22.3063151 ], [ 69.5775129, 22.3056704 ], [ 69.5773729, 22.305156 ], [ 69.5779268, 22.3052822 ], [ 69.5780652, 22.3054109 ], [ 69.5780674, 22.3059258 ], [ 69.5777917, 22.3061843 ], [ 69.5766966, 22.3090203 ], [ 69.5761465, 22.3097946 ], [ 69.5764273, 22.3108235 ], [ 69.5765666, 22.3109513 ], [ 69.5768433, 22.3109503 ], [ 69.5772553, 22.3103057 ], [ 69.5773899, 22.3092754 ], [ 69.5776666, 22.3092743 ], [ 69.5776687, 22.3097893 ], [ 69.578222, 22.3097872 ], [ 69.5786282, 22.3077262 ], [ 69.5791784, 22.3069519 ], [ 69.5790363, 22.3059224 ], [ 69.5784829, 22.3059245 ], [ 69.5784797, 22.305152 ], [ 69.584014, 22.3052605 ], [ 69.5841525, 22.3053892 ], [ 69.5842933, 22.3059035 ], [ 69.5831871, 22.3060358 ], [ 69.5823598, 22.3066829 ], [ 69.582223, 22.3071983 ], [ 69.5819474, 22.3074569 ], [ 69.5805768, 22.3105514 ], [ 69.580581, 22.3115812 ], [ 69.5794785, 22.3126149 ], [ 69.5792039, 22.3131308 ], [ 69.5792048, 22.3133883 ], [ 69.5794838, 22.3139023 ], [ 69.5794912, 22.3157044 ], [ 69.5800478, 22.3164748 ], [ 69.5808811, 22.3172442 ], [ 69.5810221, 22.3177587 ], [ 69.5815755, 22.3177568 ], [ 69.5815777, 22.3182716 ], [ 69.5829601, 22.3180093 ], [ 69.582677, 22.3164656 ], [ 69.5821236, 22.3164674 ], [ 69.5821215, 22.3159526 ], [ 69.5812914, 22.3159554 ], [ 69.5822508, 22.3138923 ], [ 69.5823865, 22.3131195 ], [ 69.5832181, 22.3135022 ], [ 69.5836354, 22.3141448 ], [ 69.5836365, 22.3144022 ], [ 69.5833608, 22.3146608 ], [ 69.583364, 22.3154332 ], [ 69.5836439, 22.3162045 ], [ 69.5840612, 22.3165888 ], [ 69.585168, 22.3165848 ], [ 69.5853054, 22.3164561 ], [ 69.5853043, 22.3161985 ], [ 69.5850264, 22.315942 ], [ 69.5844677, 22.3146568 ], [ 69.5844666, 22.3143994 ], [ 69.5847412, 22.3138834 ], [ 69.5850115, 22.3123376 ], [ 69.5852859, 22.3118216 ], [ 69.585285, 22.3115642 ], [ 69.584724, 22.309764 ], [ 69.5836129, 22.3087381 ], [ 69.583842, 22.307795 ], [ 69.5841631, 22.3079638 ], [ 69.5844441, 22.3089927 ], [ 69.5852774, 22.3097621 ], [ 69.5854216, 22.3110488 ], [ 69.5861107, 22.3105313 ], [ 69.5867964, 22.3089842 ], [ 69.5862442, 22.3092437 ], [ 69.5862398, 22.3082138 ], [ 69.5867932, 22.3082117 ], [ 69.5866522, 22.3076973 ], [ 69.5860956, 22.3069269 ], [ 69.5851234, 22.3059006 ], [ 69.58457, 22.3059025 ], [ 69.5848452, 22.3055149 ], [ 69.585952, 22.3055109 ], [ 69.5860903, 22.3056396 ], [ 69.5865112, 22.3069254 ], [ 69.5867879, 22.3069245 ], [ 69.5865037, 22.3051233 ], [ 69.5870576, 22.3052495 ], [ 69.5881638, 22.3051172 ], [ 69.5881659, 22.3056321 ], [ 69.5883479, 22.305719 ], [ 69.588306, 22.3061465 ], [ 69.5876201, 22.3074363 ], [ 69.5870667, 22.3074383 ], [ 69.5872111, 22.3089827 ], [ 69.5874889, 22.3092391 ], [ 69.5874899, 22.3094966 ], [ 69.5869408, 22.3105283 ], [ 69.5868072, 22.3115587 ], [ 69.5859782, 22.3118192 ], [ 69.5861215, 22.3131061 ], [ 69.5862608, 22.3132338 ], [ 69.5870914, 22.3133599 ], [ 69.5870873, 22.31233 ], [ 69.5876407, 22.3123282 ], [ 69.5876448, 22.313358 ], [ 69.5881982, 22.3133559 ], [ 69.5883394, 22.3141278 ], [ 69.5886172, 22.3143843 ], [ 69.5887603, 22.3154136 ], [ 69.5893133, 22.3152824 ], [ 69.5894505, 22.3151537 ], [ 69.5895872, 22.3146383 ], [ 69.5901406, 22.3146362 ], [ 69.5909828, 22.3174654 ], [ 69.5912595, 22.3174642 ], [ 69.5912562, 22.316692 ], [ 69.5915329, 22.3166908 ], [ 69.5916739, 22.3174627 ], [ 69.5919518, 22.3177192 ], [ 69.5920928, 22.3182336 ], [ 69.5923689, 22.3181034 ], [ 69.5937531, 22.3182276 ], [ 69.5937563, 22.3189999 ], [ 69.5945864, 22.3189968 ], [ 69.5941667, 22.3179687 ], [ 69.5934721, 22.3171987 ], [ 69.5931958, 22.317328 ], [ 69.5926424, 22.31733 ], [ 69.5923662, 22.3174603 ], [ 69.5925019, 22.3169449 ], [ 69.5922188, 22.3154011 ], [ 69.591941, 22.3151446 ], [ 69.5918009, 22.3146302 ], [ 69.5926331, 22.315142 ], [ 69.5929045, 22.3138538 ], [ 69.5920733, 22.3135994 ], [ 69.5919323, 22.3130849 ], [ 69.5909599, 22.3120586 ], [ 69.5904065, 22.3120605 ], [ 69.5898478, 22.3107753 ], [ 69.5892944, 22.3107774 ], [ 69.5891512, 22.3097479 ], [ 69.5888733, 22.3094915 ], [ 69.5883146, 22.3082063 ], [ 69.5884502, 22.3074332 ], [ 69.5887193, 22.3056302 ], [ 69.5884417, 22.3053737 ], [ 69.5903783, 22.3053665 ], [ 69.5901039, 22.3058825 ], [ 69.5892727, 22.3056281 ], [ 69.5890036, 22.3074314 ], [ 69.5888669, 22.3079468 ], [ 69.5897025, 22.309231 ], [ 69.5902591, 22.3100014 ], [ 69.5904001, 22.3105158 ], [ 69.5912302, 22.3105128 ], [ 69.5915112, 22.3115417 ], [ 69.5917879, 22.3115406 ], [ 69.5917856, 22.3110258 ], [ 69.5920623, 22.3110246 ], [ 69.5923434, 22.3120535 ], [ 69.5934519, 22.3124353 ], [ 69.5942848, 22.3130762 ], [ 69.5942825, 22.3125614 ], [ 69.5945598, 22.3126886 ], [ 69.5970506, 22.3128086 ], [ 69.5970463, 22.3117789 ], [ 69.596215, 22.3115243 ], [ 69.5964863, 22.3102361 ], [ 69.5959329, 22.3102382 ], [ 69.5956486, 22.3084368 ], [ 69.5950952, 22.3084389 ], [ 69.5949542, 22.3079245 ], [ 69.5945375, 22.3074111 ], [ 69.5934307, 22.3074151 ], [ 69.5934284, 22.3069003 ], [ 69.5948125, 22.3070235 ], [ 69.5952286, 22.3074087 ], [ 69.5953696, 22.3079229 ], [ 69.595923, 22.3079211 ], [ 69.5969009, 22.3102346 ], [ 69.5969053, 22.3112645 ], [ 69.5977386, 22.3120337 ], [ 69.5984398, 22.314091 ], [ 69.5989931, 22.3140889 ], [ 69.5991353, 22.3151182 ], [ 69.5999699, 22.316145 ], [ 69.6000143, 22.3163138 ], [ 69.5995575, 22.3166614 ], [ 69.5996964, 22.3169184 ], [ 69.599703, 22.3184631 ], [ 69.6003016, 22.3188059 ], [ 69.6003976, 22.3189755 ], [ 69.6012288, 22.3192299 ], [ 69.6009476, 22.3182011 ], [ 69.6006709, 22.3182021 ], [ 69.6006732, 22.3187169 ], [ 69.6002564, 22.318461 ], [ 69.6002043, 22.3164892 ], [ 69.6003865, 22.3164009 ], [ 69.6003844, 22.3158859 ], [ 69.6017696, 22.3162665 ], [ 69.6025991, 22.3161352 ], [ 69.6023201, 22.3156213 ], [ 69.6039814, 22.3158727 ], [ 69.6041217, 22.3163869 ], [ 69.6048166, 22.3170276 ], [ 69.6062018, 22.317409 ], [ 69.6059228, 22.3168951 ], [ 69.6064758, 22.316764 ], [ 69.6066131, 22.3166351 ], [ 69.6064719, 22.3158634 ], [ 69.6075792, 22.3159874 ], [ 69.6077166, 22.3158587 ], [ 69.6078533, 22.3153433 ], [ 69.6084061, 22.3152119 ], [ 69.6085433, 22.3150832 ], [ 69.6088077, 22.3122501 ], [ 69.6090778, 22.3107043 ], [ 69.609475, 22.310455918238837 ], [ 69.6094923, 22.3104451 ], [ 69.6093634, 22.3127629 ], [ 69.609475, 22.313370578730151 ], [ 69.6096469, 22.3143066 ], [ 69.609648, 22.314564 ], [ 69.609475, 22.314791288071532 ], [ 69.6082723, 22.3163714 ], [ 69.6081366, 22.316887 ], [ 69.6073076, 22.3171475 ], [ 69.6073099, 22.3176625 ], [ 69.6062029, 22.3176666 ], [ 69.606343, 22.3181809 ], [ 69.6068998, 22.3189513 ], [ 69.6085668, 22.3204897 ], [ 69.6088457, 22.3210036 ], [ 69.609475, 22.321584503923216 ], [ 69.6096792, 22.321773 ], [ 69.6101005, 22.3230586 ], [ 69.6117609, 22.3230524 ], [ 69.6117686, 22.3248547 ], [ 69.612322, 22.3248526 ], [ 69.6127491, 22.3276831 ], [ 69.6133105, 22.3294831 ], [ 69.6141496, 22.3315398 ], [ 69.6144275, 22.3317961 ], [ 69.6147098, 22.3330824 ], [ 69.6149877, 22.3333387 ], [ 69.6151334, 22.334883 ], [ 69.6156868, 22.334881 ], [ 69.615418, 22.3366842 ], [ 69.6159722, 22.3368105 ], [ 69.6166686, 22.3379668 ], [ 69.6165329, 22.3384822 ], [ 69.6170871, 22.3386084 ], [ 69.6172254, 22.3387371 ], [ 69.6172288, 22.3395094 ], [ 69.6176456, 22.3397653 ], [ 69.6176433, 22.3392504 ], [ 69.619305, 22.3395014 ], [ 69.6188973, 22.3413053 ], [ 69.6191765, 22.3418191 ], [ 69.6189052, 22.3431076 ], [ 69.6189098, 22.3441374 ], [ 69.6184997, 22.3451688 ], [ 69.6190532, 22.3451667 ], [ 69.6189155, 22.3454247 ], [ 69.6189189, 22.346197 ], [ 69.6191969, 22.3464534 ], [ 69.6190657, 22.3479987 ], [ 69.6198962, 22.3479955 ], [ 69.6198984, 22.3485105 ], [ 69.6193449, 22.3485126 ], [ 69.6194838, 22.3487694 ], [ 69.6193494, 22.3495424 ], [ 69.6204541, 22.3490233 ], [ 69.6206045, 22.3518549 ], [ 69.6204679, 22.3521128 ], [ 69.6196363, 22.3518584 ], [ 69.6193687, 22.3539191 ], [ 69.6199223, 22.353917 ], [ 69.6199257, 22.3546895 ], [ 69.6204792, 22.3546874 ], [ 69.6204826, 22.3554597 ], [ 69.6213131, 22.3554566 ], [ 69.6214579, 22.3570008 ], [ 69.6209066, 22.3575179 ], [ 69.6206354, 22.3588061 ], [ 69.6209134, 22.3590626 ], [ 69.6209145, 22.35932 ], [ 69.6205021, 22.3598365 ], [ 69.6199491, 22.3599669 ], [ 69.6193972, 22.3603557 ], [ 69.6188584, 22.3637048 ], [ 69.6196888, 22.3637016 ], [ 69.61969, 22.363959 ], [ 69.6191364, 22.3639613 ], [ 69.6192764, 22.3644755 ], [ 69.6191432, 22.3655059 ], [ 69.6196968, 22.3655039 ], [ 69.619699, 22.3660187 ], [ 69.6213609, 22.3662699 ], [ 69.6213872, 22.3721913 ], [ 69.6216641, 22.3721903 ], [ 69.6217998, 22.3716749 ], [ 69.621917, 22.3667826 ], [ 69.6230253, 22.3670357 ], [ 69.6228761, 22.3647191 ], [ 69.62329, 22.3643309 ], [ 69.6260523, 22.3630331 ], [ 69.6266064, 22.3631601 ], [ 69.6266042, 22.3626451 ], [ 69.6274352, 22.3627702 ], [ 69.6277108, 22.3625116 ], [ 69.6293692, 22.3619904 ], [ 69.6313023, 22.3609529 ], [ 69.6337905, 22.3602999 ], [ 69.6337882, 22.3597851 ], [ 69.6343418, 22.3597828 ], [ 69.6344762, 22.35901 ], [ 69.6354437, 22.3586195 ], [ 69.6362717, 22.3581013 ], [ 69.6384838, 22.3575778 ], [ 69.639314, 22.3575744 ], [ 69.6398665, 22.3573149 ], [ 69.6408306, 22.3564103 ], [ 69.6412422, 22.3555071 ], [ 69.6420714, 22.3552465 ], [ 69.6427587, 22.354343 ], [ 69.6437249, 22.353695 ], [ 69.6448273, 22.3526608 ], [ 69.6456571, 22.3525292 ], [ 69.6457926, 22.3520138 ], [ 69.6462065, 22.3516254 ], [ 69.6486939, 22.3508431 ], [ 69.6488311, 22.3507142 ], [ 69.6489678, 22.3501988 ], [ 69.6500742, 22.3500652 ], [ 69.6502116, 22.3499363 ], [ 69.6503467, 22.3491635 ], [ 69.6511772, 22.3491601 ], [ 69.6513042, 22.3468424 ], [ 69.6507459, 22.3458148 ], [ 69.6504596, 22.3437562 ], [ 69.6510095, 22.3429817 ], [ 69.650868, 22.3422098 ], [ 69.651146, 22.3424663 ], [ 69.6514227, 22.3424651 ], [ 69.6514216, 22.3422077 ], [ 69.6512386, 22.3421198 ], [ 69.6515571, 22.3416921 ], [ 69.6515535, 22.3409199 ], [ 69.6519661, 22.3402741 ], [ 69.6525191, 22.3401435 ], [ 69.6522399, 22.3396298 ], [ 69.6527933, 22.3396275 ], [ 69.6526521, 22.3391132 ], [ 69.6534775, 22.33808 ], [ 69.6533373, 22.3375657 ], [ 69.654167, 22.337433 ], [ 69.6545798, 22.3370458 ], [ 69.6547162, 22.3365302 ], [ 69.6538859, 22.3365336 ], [ 69.6538848, 22.3362762 ], [ 69.6544382, 22.3362739 ], [ 69.654159, 22.33576 ], [ 69.6552668, 22.3358838 ], [ 69.6562329, 22.3354943 ], [ 69.6563694, 22.3349787 ], [ 69.6571991, 22.3348462 ], [ 69.6577502, 22.3343291 ], [ 69.6583031, 22.3341985 ], [ 69.6577544, 22.3352306 ], [ 69.6572016, 22.335361 ], [ 69.6566499, 22.33575 ], [ 69.6566523, 22.3362648 ], [ 69.6558232, 22.3365256 ], [ 69.6559634, 22.3370401 ], [ 69.6563809, 22.3374241 ], [ 69.6574873, 22.3372913 ], [ 69.6573509, 22.3378069 ], [ 69.6574904, 22.3379346 ], [ 69.658874, 22.337929 ], [ 69.6599829, 22.3383111 ], [ 69.6597098, 22.3390845 ], [ 69.6572184, 22.3389654 ], [ 69.6569411, 22.3388384 ], [ 69.6569387, 22.3383234 ], [ 69.6550039, 22.3388462 ], [ 69.6543186, 22.3403937 ], [ 69.654043, 22.3406523 ], [ 69.6540466, 22.3414247 ], [ 69.6537712, 22.3416833 ], [ 69.654054, 22.3429694 ], [ 69.653922, 22.3442572 ], [ 69.6544754, 22.344255 ], [ 69.6546087, 22.3432247 ], [ 69.6550218, 22.342708 ], [ 69.6544682, 22.3427103 ], [ 69.654466, 22.3421954 ], [ 69.6555735, 22.3423192 ], [ 69.655712, 22.3424478 ], [ 69.6557181, 22.343735 ], [ 69.6554425, 22.3439936 ], [ 69.655307, 22.3445092 ], [ 69.6564129, 22.3442472 ], [ 69.6560033, 22.3455362 ], [ 69.6561428, 22.345664 ], [ 69.6569731, 22.3456606 ], [ 69.6573847, 22.3450157 ], [ 69.6579358, 22.3444984 ], [ 69.6579309, 22.3434687 ], [ 69.6587576, 22.3426929 ], [ 69.6588916, 22.3416625 ], [ 69.659723, 22.3419167 ], [ 69.6602681, 22.3401121 ], [ 69.6606839, 22.3403678 ], [ 69.6606937, 22.3424275 ], [ 69.6594548, 22.3437199 ], [ 69.6589012, 22.3437222 ], [ 69.6590403, 22.343979 ], [ 69.6591853, 22.3452657 ], [ 69.6611227, 22.3452578 ], [ 69.6611203, 22.344743 ], [ 69.6616756, 22.3451265 ], [ 69.6622297, 22.3452535 ], [ 69.6620859, 22.3442242 ], [ 69.6618067, 22.3437103 ], [ 69.6618043, 22.3431954 ], [ 69.6623097, 22.3422512 ], [ 69.6624919, 22.3421627 ], [ 69.6623603, 22.343708 ], [ 69.662782, 22.3449936 ], [ 69.6645769, 22.344214 ], [ 69.6647096, 22.3429261 ], [ 69.6649863, 22.342925 ], [ 69.6649887, 22.3434398 ], [ 69.6652656, 22.3434387 ], [ 69.6653985, 22.3424083 ], [ 69.6655368, 22.3422786 ], [ 69.6663665, 22.3421469 ], [ 69.6658081, 22.3411193 ], [ 69.6647022, 22.3413812 ], [ 69.6648389, 22.3411232 ], [ 69.6648341, 22.3400934 ], [ 69.6644146, 22.3390654 ], [ 69.6641379, 22.3390665 ], [ 69.6638648, 22.3398399 ], [ 69.6624834, 22.3403606 ], [ 69.6624809, 22.3398456 ], [ 69.6635862, 22.3394546 ], [ 69.6639976, 22.3388095 ], [ 69.6641316, 22.3377793 ], [ 69.6646863, 22.3380344 ], [ 69.6648218, 22.3375188 ], [ 69.6655111, 22.3368719 ], [ 69.666064, 22.3367415 ], [ 69.6660664, 22.3372563 ], [ 69.665513, 22.3372586 ], [ 69.6651084, 22.3395774 ], [ 69.6655289, 22.3406056 ], [ 69.6662178, 22.3400877 ], [ 69.6663543, 22.3395723 ], [ 69.6669077, 22.33957 ], [ 69.6666334, 22.340086 ], [ 69.6674643, 22.3402109 ], [ 69.6676028, 22.3403395 ], [ 69.6677442, 22.3408539 ], [ 69.66719, 22.3407269 ], [ 69.666912, 22.3404706 ], [ 69.6663579, 22.3403448 ], [ 69.6666457, 22.3426606 ], [ 69.6677496, 22.3420119 ], [ 69.6683025, 22.3418815 ], [ 69.6683049, 22.3423964 ], [ 69.6677521, 22.342527 ], [ 69.6674765, 22.3427855 ], [ 69.6663713, 22.3431767 ], [ 69.6659619, 22.3444657 ], [ 69.6654108, 22.3449828 ], [ 69.665001, 22.3460144 ], [ 69.6638957, 22.3464047 ], [ 69.6636202, 22.3466632 ], [ 69.6633446, 22.346922 ], [ 69.661967, 22.3482147 ], [ 69.661414, 22.3483463 ], [ 69.6612811, 22.3496341 ], [ 69.66073, 22.3501512 ], [ 69.6605947, 22.3506668 ], [ 69.6597642, 22.3506702 ], [ 69.6594924, 22.351701 ], [ 69.6589394, 22.3518316 ], [ 69.6583877, 22.3522206 ], [ 69.6585353, 22.3542795 ], [ 69.6588132, 22.354536 ], [ 69.6582741, 22.3576277 ], [ 69.6584227, 22.3596868 ], [ 69.6589763, 22.3596846 ], [ 69.6588387, 22.3599425 ], [ 69.6588532, 22.3630319 ], [ 69.6587166, 22.3632901 ], [ 69.6581628, 22.3632922 ], [ 69.6576202, 22.3656116 ], [ 69.6584507, 22.3656082 ], [ 69.6585934, 22.3666375 ], [ 69.6584567, 22.3668955 ], [ 69.6576262, 22.3668989 ], [ 69.658047, 22.3681845 ], [ 69.657915, 22.3694723 ], [ 69.6584688, 22.36947 ], [ 69.6588956, 22.3720429 ], [ 69.6589005, 22.3730728 ], [ 69.6591796, 22.3735866 ], [ 69.659181, 22.3738441 ], [ 69.6589052, 22.3741026 ], [ 69.6587699, 22.374618 ], [ 69.6593235, 22.3746159 ], [ 69.6594699, 22.3764175 ], [ 69.6600271, 22.3771877 ], [ 69.6600502, 22.3820792 ], [ 69.6613093, 22.384777 ], [ 69.6618636, 22.384904 ], [ 69.6615952, 22.3867072 ], [ 69.6627045, 22.3870884 ], [ 69.6635349, 22.387085 ], [ 69.6640899, 22.3873402 ], [ 69.6660284, 22.3874615 ], [ 69.6660309, 22.3879763 ], [ 69.6652016, 22.3882372 ], [ 69.6653469, 22.3897813 ], [ 69.6656249, 22.3900378 ], [ 69.6654894, 22.3905532 ], [ 69.6660437, 22.3906792 ], [ 69.6661823, 22.3908078 ], [ 69.6663236, 22.3913222 ], [ 69.6671543, 22.3913186 ], [ 69.6671505, 22.3905464 ], [ 69.667706, 22.3909299 ], [ 69.6685378, 22.3911839 ], [ 69.6704807, 22.3922056 ], [ 69.6710345, 22.3922033 ], [ 69.6713132, 22.3925887 ], [ 69.6714953, 22.3926756 ], [ 69.6715926, 22.3931026 ], [ 69.6718695, 22.3931015 ], [ 69.6718668, 22.3925864 ], [ 69.6716839, 22.3924987 ], [ 69.6716835, 22.3924175 ], [ 69.672307106250003, 22.392340565968073 ], [ 69.6724195, 22.3923267 ], [ 69.672307106250003, 22.39253713242017 ], [ 69.6722817, 22.3925847 ], [ 69.6722841, 22.3930998 ], [ 69.672307106250003, 22.393120797114356 ], [ 69.6724238, 22.3932273 ], [ 69.672507106250009, 22.393226958971464 ], [ 69.6740849, 22.3932205 ], [ 69.6746361, 22.3927032 ], [ 69.6768485, 22.3921791 ], [ 69.6771265, 22.3924354 ], [ 69.6801745, 22.3929376 ], [ 69.6804495, 22.3925505 ], [ 69.6798957, 22.392553 ], [ 69.679892, 22.3917805 ], [ 69.6782297, 22.3915301 ], [ 69.6785045, 22.3911423 ], [ 69.6793346, 22.3910106 ], [ 69.6786381, 22.3902411 ], [ 69.6784966, 22.3894693 ], [ 69.6787733, 22.3894681 ], [ 69.6787759, 22.389983 ], [ 69.6796058, 22.3898505 ], [ 69.6797443, 22.389979 ], [ 69.6797468, 22.3904938 ], [ 69.6798863, 22.3906216 ], [ 69.6812707, 22.3906157 ], [ 69.6814079, 22.3904868 ], [ 69.6812675, 22.3899726 ], [ 69.6818213, 22.3899703 ], [ 69.6818186, 22.3894553 ], [ 69.6826504, 22.3897093 ], [ 69.682509, 22.389195 ], [ 69.682231, 22.3889387 ], [ 69.6820893, 22.3881669 ], [ 69.6829224, 22.3886783 ], [ 69.6829197, 22.3881635 ], [ 69.6824599, 22.3880767 ], [ 69.6823635, 22.3876509 ], [ 69.6834722, 22.3879036 ], [ 69.6833397, 22.3891914 ], [ 69.6834811, 22.3897057 ], [ 69.6837579, 22.3897046 ], [ 69.6837553, 22.3891897 ], [ 69.6854172, 22.3893109 ], [ 69.6856927, 22.3890523 ], [ 69.6873512, 22.3885303 ], [ 69.6879023, 22.388013 ], [ 69.6892847, 22.3876214 ], [ 69.6892822, 22.3871066 ], [ 69.6917719, 22.3867093 ], [ 69.6920475, 22.3864507 ], [ 69.6926018, 22.3865774 ], [ 69.6927334, 22.3852895 ], [ 69.6928715, 22.3851599 ], [ 69.6934247, 22.3850293 ], [ 69.6934285, 22.3858015 ], [ 69.6939821, 22.3857993 ], [ 69.6942539, 22.3847681 ], [ 69.6945308, 22.3847669 ], [ 69.6945359, 22.3857968 ], [ 69.6948127, 22.3857957 ], [ 69.6949481, 22.3852801 ], [ 69.6956375, 22.3846331 ], [ 69.696468, 22.3846295 ], [ 69.6975714, 22.3838524 ], [ 69.6982599, 22.3832062 ], [ 69.6986704, 22.3821746 ], [ 69.6981161, 22.3820478 ], [ 69.6975606, 22.3816645 ], [ 69.697558, 22.3811495 ], [ 69.6978354, 22.3812767 ], [ 69.6982937, 22.381234 ], [ 69.6983898, 22.3814033 ], [ 69.6986666, 22.3814022 ], [ 69.6986653, 22.3811448 ], [ 69.6984822, 22.3810571 ], [ 69.698386, 22.3806311 ], [ 69.697833, 22.3807617 ], [ 69.6975548, 22.3805054 ], [ 69.6970004, 22.3803795 ], [ 69.6970887, 22.3791795 ], [ 69.6972716, 22.3792194 ], [ 69.6978271, 22.3796036 ], [ 69.6978247, 22.3790886 ], [ 69.6983782, 22.3790864 ], [ 69.6983756, 22.3785713 ], [ 69.7016976, 22.378557 ], [ 69.7012869, 22.3795887 ], [ 69.7007371, 22.3803634 ], [ 69.7007526, 22.3834528 ], [ 69.7013128, 22.3847376 ], [ 69.7011877, 22.3873128 ], [ 69.7017415, 22.3873105 ], [ 69.7016077, 22.3883409 ], [ 69.7023036, 22.3889811 ], [ 69.7032739, 22.3893634 ], [ 69.7034155, 22.3898777 ], [ 69.7028619, 22.3898801 ], [ 69.7030036, 22.390652 ], [ 69.7035599, 22.3911644 ], [ 69.7038407, 22.3919355 ], [ 69.7042584, 22.3923196 ], [ 69.7053658, 22.3923147 ], [ 69.705503, 22.3921858 ], [ 69.7057747, 22.3911548 ], [ 69.7059129, 22.3910249 ], [ 69.7064661, 22.3908943 ], [ 69.7063259, 22.3906375 ], [ 69.7064595, 22.389607 ], [ 69.7070133, 22.3896046 ], [ 69.7070093, 22.3888323 ], [ 69.7075631, 22.3888299 ], [ 69.7072901, 22.3896034 ], [ 69.7078437, 22.389601 ], [ 69.707849, 22.3906309 ], [ 69.7070197, 22.3908919 ], [ 69.7066092, 22.3919234 ], [ 69.7063336, 22.3921822 ], [ 69.7064765, 22.3929539 ], [ 69.7073056, 22.3926928 ], [ 69.7073019, 22.3919204 ], [ 69.7081337, 22.3921742 ], [ 69.7079883, 22.3908877 ], [ 69.7082637, 22.390629 ], [ 69.7083988, 22.389856 ], [ 69.7089524, 22.3898537 ], [ 69.7088148, 22.3901117 ], [ 69.7085549, 22.3934598 ], [ 69.7082794, 22.3937184 ], [ 69.7082886, 22.3955207 ], [ 69.708152, 22.3957786 ], [ 69.7087056, 22.3957762 ], [ 69.7087082, 22.3962912 ], [ 69.7078783, 22.3964229 ], [ 69.7073264, 22.3968121 ], [ 69.7073227, 22.3960397 ], [ 69.7067689, 22.3960421 ], [ 69.7070405, 22.3950111 ], [ 69.7056589, 22.395532 ], [ 69.7055238, 22.396305 ], [ 69.7052482, 22.3965638 ], [ 69.7048386, 22.3975953 ], [ 69.7056693, 22.3975917 ], [ 69.7055394, 22.3993944 ], [ 69.7052639, 22.3996531 ], [ 69.7052665, 22.400168 ], [ 69.705406, 22.4002957 ], [ 69.705959, 22.400165 ], [ 69.7062399, 22.4009363 ], [ 69.7054079, 22.4006824 ], [ 69.7054119, 22.4014547 ], [ 69.704303, 22.401202 ], [ 69.7045852, 22.4022307 ], [ 69.7048613, 22.4021003 ], [ 69.7054151, 22.4020979 ], [ 69.7055538, 22.4022264 ], [ 69.7056965, 22.4029983 ], [ 69.704589, 22.403003 ], [ 69.7051544, 22.4053177 ], [ 69.705568, 22.4050585 ], [ 69.7055653, 22.4045435 ], [ 69.7059792, 22.4041551 ], [ 69.7065324, 22.4040243 ], [ 69.7065349, 22.4045394 ], [ 69.7059811, 22.4045418 ], [ 69.7058488, 22.4058297 ], [ 69.7059904, 22.4063439 ], [ 69.7054366, 22.4063464 ], [ 69.7057154, 22.4067308 ], [ 69.7073773, 22.4068527 ], [ 69.7073812, 22.4076252 ], [ 69.707935, 22.4076227 ], [ 69.7079403, 22.4086526 ], [ 69.7090497, 22.4090334 ], [ 69.7096062, 22.4095458 ], [ 69.710715, 22.4097985 ], [ 69.7112714, 22.4103109 ], [ 69.7123809, 22.4106926 ], [ 69.7123822, 22.4109501 ], [ 69.711276, 22.4112124 ], [ 69.7114153, 22.4114692 ], [ 69.7112799, 22.4119848 ], [ 69.7107254, 22.411858 ], [ 69.7104472, 22.4116017 ], [ 69.7098934, 22.4116042 ], [ 69.708505, 22.410838 ], [ 69.7073969, 22.4107146 ], [ 69.706578, 22.4130353 ], [ 69.7060235, 22.4129085 ], [ 69.7057453, 22.4126522 ], [ 69.7051915, 22.4126546 ], [ 69.7049152, 22.4127851 ], [ 69.7049256, 22.4148446 ], [ 69.7047426, 22.4147569 ], [ 69.704506, 22.414074 ], [ 69.7040885, 22.4135611 ], [ 69.7036714, 22.4133054 ], [ 69.7035321, 22.4130485 ], [ 69.7032552, 22.4130497 ], [ 69.7032578, 22.4135647 ], [ 69.7037167, 22.4136503 ], [ 69.7038143, 22.4140771 ], [ 69.7029823, 22.4138232 ], [ 69.7033996, 22.4143364 ], [ 69.7034022, 22.4148514 ], [ 69.7035417, 22.414979 ], [ 69.704554, 22.414934 ], [ 69.704788, 22.4151028 ], [ 69.7050675, 22.4156165 ], [ 69.7050688, 22.4158739 ], [ 69.7045188, 22.4166486 ], [ 69.7041157, 22.4189676 ], [ 69.7046702, 22.4190933 ], [ 69.7049484, 22.4193496 ], [ 69.7055022, 22.4193471 ], [ 69.7066137, 22.4201147 ], [ 69.7096649, 22.4211311 ], [ 69.7099431, 22.4213874 ], [ 69.7113304, 22.4218962 ], [ 69.7116086, 22.4221525 ], [ 69.7124406, 22.4224063 ], [ 69.7127188, 22.4226626 ], [ 69.7132728, 22.4226601 ], [ 69.7141061, 22.4231714 ], [ 69.7160458, 22.4234201 ], [ 69.7166009, 22.4236752 ], [ 69.7182631, 22.423797 ], [ 69.7184077, 22.4250837 ], [ 69.7180153, 22.429462 ], [ 69.7174614, 22.4294645 ], [ 69.7180206, 22.4304919 ], [ 69.7174667, 22.4304944 ], [ 69.7177517, 22.4320379 ], [ 69.7183054, 22.4320355 ], [ 69.7180378, 22.4338387 ], [ 69.7188692, 22.4339634 ], [ 69.7191476, 22.4342195 ], [ 69.719979, 22.434345 ], [ 69.7198481, 22.4358903 ], [ 69.7192981, 22.4366652 ], [ 69.7190278, 22.4379536 ], [ 69.7187522, 22.4382124 ], [ 69.7182075, 22.4400169 ], [ 69.7183612, 22.4428483 ], [ 69.7175304, 22.4428521 ], [ 69.7172453, 22.4413086 ], [ 69.7153047, 22.4409306 ], [ 69.7147488, 22.4405473 ], [ 69.7146139, 22.4413203 ], [ 69.7132357, 22.4426136 ], [ 69.7131004, 22.4431292 ], [ 69.7053457, 22.4431632 ], [ 69.7057579, 22.4426465 ], [ 69.7057553, 22.4421317 ], [ 69.7065797, 22.4408406 ], [ 69.7069923, 22.4401948 ], [ 69.7072694, 22.4401936 ], [ 69.7078245, 22.4404486 ], [ 69.7100407, 22.4405681 ], [ 69.7097585, 22.4395395 ], [ 69.7080955, 22.4392893 ], [ 69.7087402, 22.4386017 ], [ 69.7091994, 22.4385121 ], [ 69.7091968, 22.4379971 ], [ 69.708643, 22.4379995 ], [ 69.7085498, 22.4384263 ], [ 69.7072627, 22.4389064 ], [ 69.7069872, 22.4391649 ], [ 69.7064327, 22.439039 ], [ 69.7064378, 22.4400689 ], [ 69.7058827, 22.4398139 ], [ 69.7058851, 22.4403288 ], [ 69.7050556, 22.4405898 ], [ 69.7049231, 22.4418778 ], [ 69.7039622, 22.4434267 ], [ 69.6801433, 22.4433997 ], [ 69.6798651, 22.4431434 ], [ 69.6793106, 22.4430173 ], [ 69.6793079, 22.4425025 ], [ 69.6784784, 22.4427635 ], [ 69.6777769, 22.4409642 ], [ 69.6772204, 22.4404516 ], [ 69.676798, 22.4389086 ], [ 69.6762441, 22.4389109 ], [ 69.6759708, 22.4396845 ], [ 69.6754151, 22.4393001 ], [ 69.6751382, 22.4393012 ], [ 69.6745867, 22.4398185 ], [ 69.6740335, 22.43995 ], [ 69.6741751, 22.4407217 ], [ 69.6740384, 22.4409799 ], [ 69.6734845, 22.4409822 ], [ 69.673902, 22.4414953 ], [ 69.6739466, 22.4416641 ], [ 69.6734883, 22.4417544 ], [ 69.673672, 22.44218 ], [ 69.673215, 22.442528 ], [ 69.6728065, 22.4440744 ], [ 69.672507106250009, 22.444637372240841 ], [ 69.6719831, 22.4456227 ], [ 69.6717135, 22.4471685 ], [ 69.6718698, 22.4507724 ], [ 69.6722836, 22.450513 ], [ 69.672307106250003, 22.450378738137456 ], [ 69.6724189, 22.4497402 ], [ 69.672507106250009, 22.449739817879063 ], [ 69.6729729, 22.4497378 ], [ 69.6725495, 22.4481948 ], [ 69.672444459088695, 22.448098027945477 ], [ 69.6722713, 22.4479385 ], [ 69.6722613, 22.445879 ], [ 69.672307106250003, 22.445807319438806 ], [ 69.6730861, 22.4445883 ], [ 69.6736325, 22.4430411 ], [ 69.6739082, 22.4427826 ], [ 69.6738623, 22.4423554 ], [ 69.6740447, 22.4422672 ], [ 69.6741369, 22.4418395 ], [ 69.6743191, 22.441751 ], [ 69.6743216, 22.4422658 ], [ 69.6745979, 22.4421356 ], [ 69.6759827, 22.4421298 ], [ 69.6762609, 22.442386 ], [ 69.6782034, 22.4431504 ], [ 69.6784816, 22.4434066 ], [ 69.6798676, 22.4436582 ], [ 69.6801458, 22.4439145 ], [ 69.6815319, 22.444166 ], [ 69.702857, 22.4439464 ], [ 69.7032849, 22.4465191 ], [ 69.7035631, 22.4467754 ], [ 69.7037046, 22.4472897 ], [ 69.704258, 22.4471581 ], [ 69.7043966, 22.4472866 ], [ 69.7048203, 22.4488296 ], [ 69.7053743, 22.4488272 ], [ 69.7052367, 22.4490852 ], [ 69.7052391, 22.4496 ], [ 69.7055175, 22.4498563 ], [ 69.7060792, 22.4513985 ], [ 69.7077541, 22.4539659 ], [ 69.7083107, 22.4544783 ], [ 69.7087332, 22.4557637 ], [ 69.7092871, 22.4557614 ], [ 69.7094277, 22.4562757 ], [ 69.7097061, 22.4565318 ], [ 69.710124, 22.4569158 ], [ 69.7109556, 22.4570413 ], [ 69.7109596, 22.4578135 ], [ 69.7115135, 22.4578111 ], [ 69.7119337, 22.4588391 ], [ 69.7120734, 22.4589668 ], [ 69.7126268, 22.458836 ], [ 69.7127674, 22.4593503 ], [ 69.713324, 22.4598629 ], [ 69.7134655, 22.4603771 ], [ 69.7145742, 22.4605006 ], [ 69.7147127, 22.4606291 ], [ 69.7145774, 22.4611445 ], [ 69.7179059, 22.4620303 ], [ 69.7198456, 22.4621509 ], [ 69.7199862, 22.4626652 ], [ 69.7201259, 22.4627929 ], [ 69.7206799, 22.4627905 ], [ 69.7208186, 22.462919 ], [ 69.7212399, 22.463947 ], [ 69.7217925, 22.4636869 ], [ 69.7224939, 22.465486 ], [ 69.7231888, 22.4658687 ], [ 69.7236073, 22.466511 ], [ 69.7244436, 22.467537 ], [ 69.7258352, 22.4688179 ], [ 69.725977, 22.4693322 ], [ 69.7265317, 22.469458 ], [ 69.727368, 22.4704841 ], [ 69.7282004, 22.4707377 ], [ 69.7298624, 22.4707302 ], [ 69.7306908, 22.4702116 ], [ 69.7312442, 22.4700808 ], [ 69.7313361, 22.4696531 ], [ 69.7315184, 22.4695646 ], [ 69.7315171, 22.4693072 ], [ 69.73124, 22.4693085 ], [ 69.7311457, 22.4694779 ], [ 69.7301353, 22.4699566 ], [ 69.727643, 22.470097 ], [ 69.7273606, 22.4690685 ], [ 69.7268067, 22.469071 ], [ 69.726804, 22.4685561 ], [ 69.7262499, 22.4685586 ], [ 69.7262406, 22.4667565 ], [ 69.7248583, 22.4672775 ], [ 69.7247165, 22.4667633 ], [ 69.7238815, 22.4659948 ], [ 69.7223451, 22.463427 ], [ 69.7217912, 22.4634295 ], [ 69.7212185, 22.4598277 ], [ 69.720389, 22.4600889 ], [ 69.7205322, 22.461118 ], [ 69.7203956, 22.4613762 ], [ 69.718733, 22.4612543 ], [ 69.7181803, 22.4615144 ], [ 69.7176256, 22.4613885 ], [ 69.7176216, 22.460616 ], [ 69.7154045, 22.4603685 ], [ 69.7158129, 22.4590795 ], [ 69.7158089, 22.458307 ], [ 69.7162202, 22.4574036 ], [ 69.7170505, 22.4572717 ], [ 69.7170531, 22.4577867 ], [ 69.7176058, 22.4575266 ], [ 69.7176084, 22.4580417 ], [ 69.7178855, 22.4580403 ], [ 69.7178828, 22.4575255 ], [ 69.7195474, 22.458033 ], [ 69.71955, 22.4585478 ], [ 69.7198269, 22.4585467 ], [ 69.7198243, 22.4580318 ], [ 69.7212119, 22.4585404 ], [ 69.7213459, 22.4577674 ], [ 69.7220342, 22.4568629 ], [ 69.7228651, 22.4568591 ], [ 69.7230025, 22.4567302 ], [ 69.7236861, 22.4549251 ], [ 69.7242406, 22.4550507 ], [ 69.7243793, 22.4551793 ], [ 69.7248074, 22.4574945 ], [ 69.7256383, 22.4574907 ], [ 69.7260425, 22.4554293 ], [ 69.7265925, 22.4546544 ], [ 69.7269977, 22.452593 ], [ 69.7264438, 22.4525954 ], [ 69.7264425, 22.452338 ], [ 69.7269957, 22.4522063 ], [ 69.7276815, 22.4510453 ], [ 69.7276789, 22.4505302 ], [ 69.7282261, 22.4492405 ], [ 69.7282221, 22.4484683 ], [ 69.728495, 22.4476947 ], [ 69.728491, 22.4469222 ], [ 69.7287666, 22.4466635 ], [ 69.7293085, 22.4443441 ], [ 69.729303, 22.4433142 ], [ 69.7295772, 22.4427981 ], [ 69.7301191, 22.4404785 ], [ 69.7301055, 22.4379039 ], [ 69.730931, 22.4368705 ], [ 69.7309284, 22.4363554 ], [ 69.731474, 22.4348083 ], [ 69.7314714, 22.4342934 ], [ 69.7320185, 22.4330037 ], [ 69.7320172, 22.4327463 ], [ 69.7311769, 22.4309478 ], [ 69.7311756, 22.4306903 ], [ 69.7313137, 22.4305605 ], [ 69.731867, 22.4304297 ], [ 69.7320023, 22.4299143 ], [ 69.7322778, 22.4296556 ], [ 69.7324141, 22.42914 ], [ 69.7329694, 22.4293949 ], [ 69.7329639, 22.4283651 ], [ 69.7335198, 22.4287484 ], [ 69.7371266, 22.4300192 ], [ 69.7374048, 22.4302755 ], [ 69.7396203, 22.4302653 ], [ 69.7404483, 22.4297465 ], [ 69.7412778, 22.4294853 ], [ 69.7416906, 22.4290976 ], [ 69.7416893, 22.4288402 ], [ 69.7405719, 22.4270432 ], [ 69.7405706, 22.4267858 ], [ 69.7411204, 22.4260109 ], [ 69.7411053, 22.4231789 ], [ 69.7408271, 22.4229226 ], [ 69.7405489, 22.4226665 ], [ 69.7404081, 22.4221523 ], [ 69.7412381, 22.4220192 ], [ 69.7417947, 22.4225316 ], [ 69.7426248, 22.4223995 ], [ 69.7424844, 22.4221426 ], [ 69.7424802, 22.4213704 ], [ 69.742341, 22.4211135 ], [ 69.7406781, 22.4208637 ], [ 69.7409495, 22.4198327 ], [ 69.7403952, 22.419706 ], [ 69.7398386, 22.4191937 ], [ 69.7384513, 22.4186851 ], [ 69.7381731, 22.418429 ], [ 69.7376186, 22.4183031 ], [ 69.737616, 22.4177883 ], [ 69.7384466, 22.4177845 ], [ 69.7384438, 22.4172695 ], [ 69.7388601, 22.4175252 ], [ 69.739003, 22.4182969 ], [ 69.7398331, 22.4181638 ], [ 69.7402459, 22.4177762 ], [ 69.7403822, 22.4172608 ], [ 69.7412136, 22.4173851 ], [ 69.7414918, 22.4176414 ], [ 69.7420463, 22.417768 ], [ 69.7421869, 22.4182823 ], [ 69.742605, 22.418666 ], [ 69.7453733, 22.418525 ], [ 69.745099, 22.4190411 ], [ 69.7467585, 22.4186469 ], [ 69.7503576, 22.4185019 ], [ 69.7502213, 22.4190175 ], [ 69.7506428, 22.4200453 ], [ 69.7495366, 22.420308 ], [ 69.7495379, 22.4205654 ], [ 69.7506475, 22.4209461 ], [ 69.7507862, 22.4210746 ], [ 69.750928, 22.4215889 ], [ 69.7512049, 22.4215875 ], [ 69.751202, 22.4210725 ], [ 69.7514797, 22.4211995 ], [ 69.7525859, 22.420937 ], [ 69.7556277, 22.4201504 ], [ 69.7564585, 22.4201466 ], [ 69.7571523, 22.4205299 ], [ 69.7574334, 22.421301 ], [ 69.7585494, 22.4228404 ], [ 69.7586925, 22.4236121 ], [ 69.7592464, 22.4236095 ], [ 69.7595303, 22.4248954 ], [ 69.7589771, 22.4250264 ], [ 69.7578745, 22.425933 ], [ 69.7571928, 22.427996 ], [ 69.7572221, 22.4334023 ], [ 69.7579183, 22.4340423 ], [ 69.7590283, 22.4344237 ], [ 69.7591606, 22.4333932 ], [ 69.759299, 22.4332634 ], [ 69.759852, 22.4331326 ], [ 69.7599747, 22.4302999 ], [ 69.7601128, 22.4301702 ], [ 69.7614969, 22.4300353 ], [ 69.7616292, 22.4290048 ], [ 69.7625968, 22.4286136 ], [ 69.7628722, 22.4283549 ], [ 69.7637015, 22.4280935 ], [ 69.7641117, 22.427191 ], [ 69.764387, 22.4269323 ], [ 69.7645233, 22.4264167 ], [ 69.7650763, 22.4262849 ], [ 69.7659043, 22.425766 ], [ 69.7664553, 22.4252485 ], [ 69.7675587, 22.4244709 ], [ 69.7689391, 22.4236921 ], [ 69.7693504, 22.4230468 ], [ 69.7707278, 22.4217529 ], [ 69.7710019, 22.4212368 ], [ 69.7715401, 22.4184021 ], [ 69.7715358, 22.4176299 ], [ 69.7718083, 22.4168561 ], [ 69.7718027, 22.4158264 ], [ 69.7727467, 22.4111876 ], [ 69.7735789, 22.4114411 ], [ 69.773711, 22.4104106 ], [ 69.7769935, 22.4031861 ], [ 69.7772691, 22.4029274 ], [ 69.7775416, 22.4021538 ], [ 69.777817, 22.4018949 ], [ 69.7787737, 22.3995732 ], [ 69.7779431, 22.3995772 ], [ 69.7780795, 22.3993192 ], [ 69.7775088, 22.3962324 ], [ 69.7772304, 22.3959763 ], [ 69.7769465, 22.3946904 ], [ 69.7766681, 22.3944343 ], [ 69.7761045, 22.3926348 ], [ 69.7760986, 22.391605 ], [ 69.7758176, 22.390834 ], [ 69.7755392, 22.3905779 ], [ 69.7749771, 22.3890359 ], [ 69.7741294, 22.3859505 ], [ 69.7745437, 22.385691 ], [ 69.7746858, 22.3864626 ], [ 69.7751032, 22.3867182 ], [ 69.7752353, 22.3856876 ], [ 69.7755106, 22.3854288 ], [ 69.77537, 22.3849145 ], [ 69.7745401, 22.3850468 ], [ 69.7742627, 22.3849198 ], [ 69.7742612, 22.3846624 ], [ 69.7748149, 22.3846598 ], [ 69.7739701, 22.3820894 ], [ 69.7734165, 22.382092 ], [ 69.7735515, 22.3815764 ], [ 69.7743791, 22.3810574 ], [ 69.7743749, 22.3802852 ], [ 69.7747864, 22.3795108 ], [ 69.7742326, 22.3795135 ], [ 69.7746375, 22.3777093 ], [ 69.7743593, 22.3774532 ], [ 69.7743479, 22.3753937 ], [ 69.7742084, 22.3751368 ], [ 69.7733802, 22.3755265 ], [ 69.7728259, 22.3754009 ], [ 69.7732362, 22.3746265 ], [ 69.7737872, 22.374109 ], [ 69.7740597, 22.3733353 ], [ 69.7741842, 22.3707601 ], [ 69.7746004, 22.3710157 ], [ 69.7746033, 22.3715305 ], [ 69.775164, 22.3728151 ], [ 69.7751669, 22.37333 ], [ 69.7758622, 22.3738416 ], [ 69.7758423, 22.3702374 ], [ 69.7748287, 22.3701536 ], [ 69.7747322, 22.3697278 ], [ 69.7752872, 22.3699826 ], [ 69.7752844, 22.3694676 ], [ 69.775838, 22.3694649 ], [ 69.7758323, 22.3684353 ], [ 69.7766641, 22.3686887 ], [ 69.7766598, 22.3679163 ], [ 69.7772133, 22.3679136 ], [ 69.7772105, 22.3673988 ], [ 69.7777641, 22.3673961 ], [ 69.7776223, 22.3668819 ], [ 69.7778977, 22.3666231 ], [ 69.7778936, 22.3658507 ], [ 69.7783071, 22.3654621 ], [ 69.7791345, 22.3649433 ], [ 69.7796874, 22.3648123 ], [ 69.7800935, 22.3632655 ], [ 69.780085, 22.3617208 ], [ 69.7803589, 22.3612047 ], [ 69.7803517, 22.3599174 ], [ 69.7805809, 22.3592315 ], [ 69.7810398, 22.3591418 ], [ 69.781037, 22.3586267 ], [ 69.7813137, 22.3586254 ], [ 69.7812107, 22.3650624 ], [ 69.7813504, 22.3651899 ], [ 69.7819047, 22.3653166 ], [ 69.781906, 22.365574 ], [ 69.7807989, 22.3655793 ], [ 69.7803889, 22.366611 ], [ 69.7799771, 22.3671279 ], [ 69.7794228, 22.3670015 ], [ 69.7788714, 22.3673908 ], [ 69.7779136, 22.3694551 ], [ 69.7779221, 22.3709998 ], [ 69.77848, 22.3717694 ], [ 69.7784872, 22.3730567 ], [ 69.7789043, 22.373312 ], [ 69.7790364, 22.3722816 ], [ 69.7793118, 22.3720229 ], [ 69.778741, 22.3689361 ], [ 69.779151, 22.3679044 ], [ 69.7797046, 22.3679017 ], [ 69.7795672, 22.3681599 ], [ 69.7797117, 22.369189 ], [ 69.7805407, 22.3689274 ], [ 69.7802683, 22.3697012 ], [ 69.7808219, 22.3696985 ], [ 69.7807276, 22.3698679 ], [ 69.7797176, 22.3702187 ], [ 69.7795758, 22.3697046 ], [ 69.7794364, 22.3694477 ], [ 69.7791597, 22.3694491 ], [ 69.7793018, 22.3702207 ], [ 69.7804148, 22.3712451 ], [ 69.7804192, 22.3720176 ], [ 69.7801451, 22.3725337 ], [ 69.7801927, 22.3732173 ], [ 69.7800122, 22.3734351 ], [ 69.7794594, 22.373567 ], [ 69.7793249, 22.37434 ], [ 69.7790495, 22.3745987 ], [ 69.7791926, 22.3753704 ], [ 69.778639, 22.3753731 ], [ 69.7787826, 22.3764022 ], [ 69.7786462, 22.3766604 ], [ 69.7791997, 22.3766577 ], [ 69.7793449, 22.3779442 ], [ 69.7800395, 22.3783266 ], [ 69.7807376, 22.3794823 ], [ 69.7811548, 22.3797376 ], [ 69.7811519, 22.3792228 ], [ 69.782538, 22.3796018 ], [ 69.7829565, 22.3802438 ], [ 69.7839302, 22.3810115 ], [ 69.7839274, 22.3804967 ], [ 69.784481, 22.380494 ], [ 69.7843405, 22.3802372 ], [ 69.7843377, 22.3797223 ], [ 69.7844751, 22.3794642 ], [ 69.7839215, 22.3794668 ], [ 69.7839172, 22.3786946 ], [ 69.7841941, 22.3786932 ], [ 69.7841969, 22.3792081 ], [ 69.7847505, 22.3792054 ], [ 69.7844679, 22.3781769 ], [ 69.7850217, 22.3781742 ], [ 69.784742, 22.3776607 ], [ 69.7836339, 22.3775369 ], [ 69.783078, 22.3771538 ], [ 69.7833621, 22.3784398 ], [ 69.7822506, 22.3776728 ], [ 69.7822475, 22.3771578 ], [ 69.7814158, 22.3769043 ], [ 69.7816896, 22.3763882 ], [ 69.7808578, 22.3761347 ], [ 69.7803831, 22.3733925 ], [ 69.7805653, 22.3733041 ], [ 69.7805694, 22.3740765 ], [ 69.7808463, 22.3740752 ], [ 69.7809799, 22.3733022 ], [ 69.7811181, 22.3731724 ], [ 69.7825029, 22.3732948 ], [ 69.7822304, 22.3740684 ], [ 69.7819535, 22.3740697 ], [ 69.7819506, 22.3735549 ], [ 69.7811217, 22.3738163 ], [ 69.7812682, 22.3753604 ], [ 69.7818248, 22.3758726 ], [ 69.781968, 22.3766443 ], [ 69.7827998, 22.3768977 ], [ 69.7827955, 22.3761253 ], [ 69.7836267, 22.3762497 ], [ 69.7841833, 22.3767618 ], [ 69.7850158, 22.3771444 ], [ 69.7848669, 22.375343 ], [ 69.7850043, 22.3750848 ], [ 69.7844507, 22.3750875 ], [ 69.784168, 22.3740591 ], [ 69.7830593, 22.373807 ], [ 69.783055, 22.3730346 ], [ 69.7822247, 22.3730387 ], [ 69.7823611, 22.3727806 ], [ 69.7823553, 22.3717507 ], [ 69.7817989, 22.3712385 ], [ 69.7817543, 22.371069 ], [ 69.7822132, 22.370979 ], [ 69.7826191, 22.3694324 ], [ 69.7826076, 22.3673727 ], [ 69.7824683, 22.367116 ], [ 69.7830226, 22.3672415 ], [ 69.7831614, 22.3673701 ], [ 69.7831642, 22.3678849 ], [ 69.7834439, 22.3683986 ], [ 69.7834452, 22.368656 ], [ 69.7831699, 22.3689148 ], [ 69.7833175, 22.3704589 ], [ 69.7841479, 22.3704547 ], [ 69.7841493, 22.3707121 ], [ 69.7835957, 22.370715 ], [ 69.7835972, 22.3709724 ], [ 69.7849818, 22.3710939 ], [ 69.7855348, 22.3709629 ], [ 69.7853944, 22.3707061 ], [ 69.7853887, 22.3696764 ], [ 69.7855261, 22.3694182 ], [ 69.7849726, 22.3694209 ], [ 69.784971, 22.3691635 ], [ 69.7866312, 22.3690263 ], [ 69.7867698, 22.3691548 ], [ 69.7867728, 22.3696696 ], [ 69.7866363, 22.3699278 ], [ 69.7871905, 22.3700533 ], [ 69.7877471, 22.3705657 ], [ 69.7885783, 22.3706908 ], [ 69.7889988, 22.3717186 ], [ 69.7894159, 22.3719739 ], [ 69.7894129, 22.3714591 ], [ 69.790797, 22.3714523 ], [ 69.7908057, 22.372997 ], [ 69.79136, 22.3731225 ], [ 69.7917784, 22.3737645 ], [ 69.7916463, 22.3747951 ], [ 69.791092, 22.3746685 ], [ 69.7899869, 22.3750607 ], [ 69.7904074, 22.3760884 ], [ 69.7906858, 22.3763445 ], [ 69.7905537, 22.377375 ], [ 69.7911073, 22.3773721 ], [ 69.7911045, 22.3768573 ], [ 69.7913812, 22.376856 ], [ 69.7913842, 22.3773708 ], [ 69.7916624, 22.3776269 ], [ 69.7947051, 22.3772255 ], [ 69.7949835, 22.3774816 ], [ 69.7969206, 22.3773438 ], [ 69.7965019, 22.3768308 ], [ 69.7965004, 22.3765734 ], [ 69.7966386, 22.3764436 ], [ 69.7969153, 22.3764422 ], [ 69.7973322, 22.3768267 ], [ 69.7974757, 22.3775984 ], [ 69.7963698, 22.3778613 ], [ 69.7963727, 22.3783763 ], [ 69.7947117, 22.3783844 ], [ 69.7944409, 22.3794156 ], [ 69.7952698, 22.379154 ], [ 69.7952727, 22.3796689 ], [ 69.7944437, 22.3799304 ], [ 69.7944452, 22.3801878 ], [ 69.7952757, 22.3801839 ], [ 69.7950018, 22.3807 ], [ 69.7955554, 22.3806974 ], [ 69.7955583, 22.3812122 ], [ 69.7950047, 22.3812149 ], [ 69.7947323, 22.3819886 ], [ 69.7927907, 22.3813542 ], [ 69.7919603, 22.3813581 ], [ 69.7916843, 22.3814887 ], [ 69.7915482, 22.3820043 ], [ 69.7912729, 22.3822631 ], [ 69.7919858, 22.3858639 ], [ 69.7928157, 22.3857306 ], [ 69.793091, 22.3854719 ], [ 69.7936439, 22.3853409 ], [ 69.7940689, 22.387141 ], [ 69.7950419, 22.3877794 ], [ 69.795459, 22.388164 ], [ 69.79602, 22.3894485 ], [ 69.7964577, 22.3933082 ], [ 69.7972882, 22.3933041 ], [ 69.7972897, 22.3935615 ], [ 69.7961838, 22.3938244 ], [ 69.7964768, 22.396655 ], [ 69.7984156, 22.3967737 ], [ 69.7991124, 22.3976719 ], [ 69.800919, 22.398821 ], [ 69.8025802, 22.3988127 ], [ 69.8039623, 22.3984201 ], [ 69.8036824, 22.3979066 ], [ 69.8045146, 22.3981599 ], [ 69.8045116, 22.397645 ], [ 69.8050653, 22.3976424 ], [ 69.8050623, 22.3971273 ], [ 69.8056161, 22.3971247 ], [ 69.80561, 22.3960948 ], [ 69.8050557, 22.3959684 ], [ 69.8044997, 22.3955855 ], [ 69.8044966, 22.3950707 ], [ 69.8056042, 22.395065 ], [ 69.8056057, 22.3953226 ], [ 69.8050519, 22.3953252 ], [ 69.8050534, 22.3955827 ], [ 69.8058831, 22.3954494 ], [ 69.8061585, 22.3951907 ], [ 69.8069876, 22.3949289 ], [ 69.808095, 22.3949234 ], [ 69.8083711, 22.3947938 ], [ 69.8083742, 22.3953088 ], [ 69.8094823, 22.3954315 ], [ 69.809621, 22.39556 ], [ 69.8097629, 22.3960741 ], [ 69.8103152, 22.395814 ], [ 69.8100442, 22.396845 ], [ 69.8105964, 22.3965849 ], [ 69.8103286, 22.3981309 ], [ 69.8108822, 22.3981281 ], [ 69.8108793, 22.3976133 ], [ 69.8114344, 22.3978679 ], [ 69.8114314, 22.397353 ], [ 69.8117083, 22.3973517 ], [ 69.8117128, 22.3981239 ], [ 69.811589825390627, 22.398124544078684 ], [ 69.8111591, 22.3981268 ], [ 69.81138982539062, 22.398409932857277 ], [ 69.8115769, 22.3986395 ], [ 69.8115813, 22.399412 ], [ 69.8111725, 22.4004437 ], [ 69.8100651, 22.4004494 ], [ 69.8100621, 22.3999344 ], [ 69.8095099, 22.4001946 ], [ 69.8093813, 22.4019975 ], [ 69.8095233, 22.4025116 ], [ 69.8100778, 22.4026371 ], [ 69.8104949, 22.4030217 ], [ 69.8109181, 22.4043069 ], [ 69.81138982539062, 22.404084574960752 ], [ 69.8114704, 22.4040466 ], [ 69.8114749, 22.4048189 ], [ 69.811589825390627, 22.404818339692028 ], [ 69.8120287, 22.4048162 ], [ 69.812033, 22.4055885 ], [ 69.8125853, 22.4053282 ], [ 69.8132874, 22.407127 ], [ 69.8138608, 22.4104709 ], [ 69.8144189, 22.4112405 ], [ 69.814422, 22.4117554 ], [ 69.8149803, 22.412525 ], [ 69.8153999, 22.4131661 ], [ 69.8159544, 22.4132923 ], [ 69.8162373, 22.4143209 ], [ 69.8167903, 22.4141888 ], [ 69.817209, 22.4148308 ], [ 69.817074, 22.4153464 ], [ 69.8179047, 22.4153422 ], [ 69.8180457, 22.4158563 ], [ 69.8187421, 22.4164961 ], [ 69.8201281, 22.4167465 ], [ 69.821517, 22.4175118 ], [ 69.8223486, 22.4176367 ], [ 69.8222112, 22.4178949 ], [ 69.8222142, 22.4184097 ], [ 69.8226338, 22.4190508 ], [ 69.8231884, 22.419177 ], [ 69.8231899, 22.4194346 ], [ 69.8226361, 22.4194375 ], [ 69.8225002, 22.4199531 ], [ 69.8220884, 22.42047 ], [ 69.8218115, 22.4204715 ], [ 69.8218085, 22.4199565 ], [ 69.8209806, 22.4204757 ], [ 69.8209822, 22.4207331 ], [ 69.8215361, 22.4207302 ], [ 69.8216862, 22.4227892 ], [ 69.8218259, 22.4229166 ], [ 69.8223804, 22.423043 ], [ 69.8226648, 22.4243288 ], [ 69.8232165, 22.4239395 ], [ 69.8240464, 22.423807 ], [ 69.8240525, 22.4248366 ], [ 69.8251617, 22.4250884 ], [ 69.8251647, 22.4256034 ], [ 69.8259961, 22.4257274 ], [ 69.8261349, 22.4258559 ], [ 69.8261456, 22.427658 ], [ 69.8268468, 22.4290699 ], [ 69.8279551, 22.4291935 ], [ 69.8275469, 22.4304828 ], [ 69.8275516, 22.4312551 ], [ 69.82783, 22.4315112 ], [ 69.8281161, 22.4330544 ], [ 69.8283945, 22.4333105 ], [ 69.828541, 22.434597 ], [ 69.829095, 22.4345941 ], [ 69.829098, 22.435109 ], [ 69.8285442, 22.4351118 ], [ 69.8288234, 22.4354961 ], [ 69.8293764, 22.4353651 ], [ 69.8295191, 22.4361366 ], [ 69.8300791, 22.4371636 ], [ 69.8306452, 22.4392203 ], [ 69.8309237, 22.4394762 ], [ 69.8307888, 22.4399918 ], [ 69.8313426, 22.439989 ], [ 69.8320453, 22.4417875 ], [ 69.8320513, 22.4428173 ], [ 69.8319149, 22.4430755 ], [ 69.8324688, 22.4430727 ], [ 69.8323344, 22.4438457 ], [ 69.832616, 22.4446166 ], [ 69.832215, 22.4469357 ], [ 69.8335247, 22.4509091 ], [ 69.8341106, 22.4509204 ], [ 69.8347969, 22.4509337 ], [ 69.8444267, 22.4511197 ], [ 69.848297, 22.4499413 ], [ 69.8481564, 22.4496847 ], [ 69.8481501, 22.448655 ], [ 69.8473116, 22.4473721 ], [ 69.8471689, 22.4466006 ], [ 69.8457856, 22.4468652 ], [ 69.8455134, 22.4476389 ], [ 69.8452363, 22.4476404 ], [ 69.8441129, 22.4450717 ], [ 69.8463246, 22.4444161 ], [ 69.8471554, 22.4444117 ], [ 69.8472944, 22.4445403 ], [ 69.8472974, 22.4450551 ], [ 69.8471609, 22.4453133 ], [ 69.8479918, 22.4453089 ], [ 69.8474427, 22.4460842 ], [ 69.8479957, 22.4459521 ], [ 69.8488219, 22.4451753 ], [ 69.8493751, 22.4450441 ], [ 69.8495036, 22.4434989 ], [ 69.8501925, 22.4428512 ], [ 69.8510226, 22.4427185 ], [ 69.8510703, 22.442238 ], [ 69.8519003, 22.4421045 ], [ 69.8520376, 22.4419755 ], [ 69.852036, 22.441718 ], [ 69.8517575, 22.4414621 ], [ 69.8517559, 22.4412047 ], [ 69.8518941, 22.4410747 ], [ 69.8524481, 22.4410718 ], [ 69.8525868, 22.4412002 ], [ 69.8527319, 22.4422293 ], [ 69.8532859, 22.4422264 ], [ 69.8533777, 22.4429634 ], [ 69.8544902, 22.4437298 ], [ 69.8549124, 22.4447574 ], [ 69.8571248, 22.4442309 ], [ 69.8571216, 22.443716 ], [ 69.8590587, 22.4434482 ], [ 69.8590556, 22.4429334 ], [ 69.8604418, 22.4431834 ], [ 69.8600721, 22.4424478 ], [ 69.859515, 22.4419359 ], [ 69.8593738, 22.4414217 ], [ 69.8618663, 22.4414085 ], [ 69.8619645, 22.4431753 ], [ 69.8621044, 22.4433029 ], [ 69.864596, 22.4431611 ], [ 69.8645928, 22.4426463 ], [ 69.8693017, 22.4427493 ], [ 69.8695793, 22.4428771 ], [ 69.8697571, 22.4411087 ], [ 69.8694257, 22.439396 ], [ 69.8698863, 22.4395632 ], [ 69.869741, 22.4385343 ], [ 69.869318, 22.4372493 ], [ 69.868765, 22.4373805 ], [ 69.8684874, 22.4372537 ], [ 69.8698728, 22.4365834 ], [ 69.8698321, 22.4351997 ], [ 69.8720099, 22.4329515 ], [ 69.8728432, 22.4333337 ], [ 69.87284, 22.4328189 ], [ 69.8722853, 22.4326926 ], [ 69.8720576, 22.4324712 ], [ 69.8681734, 22.431334 ], [ 69.8680313, 22.4308199 ], [ 69.8677529, 22.430564 ], [ 69.86761, 22.4297923 ], [ 69.8670563, 22.4297953 ], [ 69.8671878, 22.4287649 ], [ 69.8674632, 22.428506 ], [ 69.86746, 22.4279912 ], [ 69.8682924, 22.4277159 ], [ 69.8687002, 22.4269547 ], [ 69.8703528, 22.4255292 ], [ 69.8710389, 22.4246249 ], [ 69.8713301, 22.4242201 ], [ 69.8717285, 22.4241063 ], [ 69.8722734, 22.4226869 ], [ 69.8724106, 22.422558 ], [ 69.8725463, 22.4220424 ], [ 69.8736022, 22.4218726 ], [ 69.8741535, 22.421484 ], [ 69.8738816, 22.4222577 ], [ 69.8733278, 22.4222608 ], [ 69.8731936, 22.4230338 ], [ 69.8729693, 22.4233272 ], [ 69.8728346, 22.423843 ], [ 69.8733367, 22.4236762 ], [ 69.8737491, 22.4232884 ], [ 69.8738831, 22.4225152 ], [ 69.8747139, 22.4225106 ], [ 69.8745829, 22.4237987 ], [ 69.8737572, 22.4245754 ], [ 69.8733471, 22.42535 ], [ 69.8722919, 22.4256479 ], [ 69.8724314, 22.4259046 ], [ 69.8724445, 22.4279641 ], [ 69.8717622, 22.4295126 ], [ 69.8723169, 22.4296379 ], [ 69.8725955, 22.4298938 ], [ 69.8730976, 22.4297281 ], [ 69.8731008, 22.430243 ], [ 69.8739322, 22.4303668 ], [ 69.8742108, 22.4306227 ], [ 69.8758747, 22.4310003 ], [ 69.8756028, 22.4317741 ], [ 69.8767088, 22.4315106 ], [ 69.8772739, 22.4333097 ], [ 69.8767209, 22.4334411 ], [ 69.8758942, 22.4340895 ], [ 69.8761775, 22.4351179 ], [ 69.8750715, 22.4353813 ], [ 69.8753508, 22.4357656 ], [ 69.8764633, 22.4365318 ], [ 69.877018, 22.436658 ], [ 69.8764593, 22.4358886 ], [ 69.8770123, 22.4357565 ], [ 69.8772877, 22.4354976 ], [ 69.8778415, 22.4354945 ], [ 69.8781169, 22.4352356 ], [ 69.8792221, 22.4348438 ], [ 69.8790995, 22.4374189 ], [ 69.878829, 22.4384503 ], [ 69.8780046, 22.4394845 ], [ 69.8781484, 22.4402562 ], [ 69.8771312, 22.4396582 ], [ 69.8764722, 22.4379481 ], [ 69.876289, 22.4378606 ], [ 69.8756334, 22.4366654 ], [ 69.8754501, 22.4365779 ], [ 69.8751717, 22.436322 ], [ 69.8747929, 22.4351254 ], [ 69.8746096, 22.4350377 ], [ 69.8743737, 22.4346127 ], [ 69.8743658, 22.4333256 ], [ 69.8739475, 22.4328128 ], [ 69.8736706, 22.4328143 ], [ 69.8738199, 22.4346157 ], [ 69.8744213, 22.435215 ], [ 69.8743803, 22.4356425 ], [ 69.8750794, 22.4366684 ], [ 69.8752618, 22.4367552 ], [ 69.8756415, 22.4379527 ], [ 69.8761006, 22.4380379 ], [ 69.8763382, 22.4387213 ], [ 69.8766168, 22.4389772 ], [ 69.8767606, 22.4397487 ], [ 69.8769428, 22.4398355 ], [ 69.876767, 22.4407786 ], [ 69.8762123, 22.4406523 ], [ 69.8756561, 22.4402696 ], [ 69.8762308, 22.4436134 ], [ 69.8767848, 22.4436104 ], [ 69.8766491, 22.444126 ], [ 69.8777666, 22.4456646 ], [ 69.8779105, 22.4464361 ], [ 69.878465, 22.4465614 ], [ 69.8791626, 22.4474592 ], [ 69.8793049, 22.4479733 ], [ 69.8801365, 22.4480971 ], [ 69.8811095, 22.4487359 ], [ 69.8812533, 22.4495074 ], [ 69.8818063, 22.4493753 ], [ 69.8826406, 22.4498856 ], [ 69.8830579, 22.4502698 ], [ 69.8833397, 22.4510407 ], [ 69.8833446, 22.451813 ], [ 69.8843185, 22.4524509 ], [ 69.8850163, 22.4533486 ], [ 69.8858521, 22.4541163 ], [ 69.8857173, 22.4546319 ], [ 69.8865474, 22.4544981 ], [ 69.8873848, 22.4555234 ], [ 69.8884918, 22.4553891 ], [ 69.8886332, 22.4559031 ], [ 69.889884, 22.4565395 ], [ 69.8907158, 22.4566641 ], [ 69.8907192, 22.4571789 ], [ 69.8921057, 22.4574287 ], [ 69.8921006, 22.4566563 ], [ 69.8927959, 22.4571674 ], [ 69.8932159, 22.4578083 ], [ 69.8943272, 22.458317 ], [ 69.8954417, 22.4593407 ], [ 69.8959955, 22.4593375 ], [ 69.8961327, 22.4592086 ], [ 69.8961312, 22.4589511 ], [ 69.8955738, 22.4584393 ], [ 69.8955721, 22.4581817 ], [ 69.8965396, 22.4577897 ], [ 69.8982015, 22.4577807 ], [ 69.8983402, 22.457909 ], [ 69.8984825, 22.4584231 ], [ 69.8979286, 22.4584261 ], [ 69.897932, 22.4589411 ], [ 69.8998708, 22.4589302 ], [ 69.8998674, 22.4584153 ], [ 69.8990348, 22.4581626 ], [ 69.8993051, 22.4571313 ], [ 69.9023535, 22.4573717 ], [ 69.9023485, 22.4565994 ], [ 69.9029033, 22.4567245 ], [ 69.9030405, 22.4565954 ], [ 69.9031745, 22.4558224 ], [ 69.9045583, 22.4556854 ], [ 69.9049692, 22.45504 ], [ 69.9052327, 22.4529789 ], [ 69.905093, 22.4527223 ], [ 69.9048161, 22.4527238 ], [ 69.9048212, 22.4534962 ], [ 69.9042656, 22.4532418 ], [ 69.9044001, 22.4527262 ], [ 69.9039819, 22.4522137 ], [ 69.9045358, 22.4522105 ], [ 69.9042489, 22.4506675 ], [ 69.9048037, 22.4507926 ], [ 69.9050798, 22.4506627 ], [ 69.905083, 22.4511776 ], [ 69.9067456, 22.4512966 ], [ 69.9068828, 22.4511676 ], [ 69.9068794, 22.4506527 ], [ 69.9064578, 22.4496253 ], [ 69.9059038, 22.4496283 ], [ 69.9059023, 22.4493709 ], [ 69.9078418, 22.4494883 ], [ 69.9081204, 22.4497442 ], [ 69.9092298, 22.4499954 ], [ 69.9095043, 22.4496081 ], [ 69.9089503, 22.4496111 ], [ 69.9089488, 22.4493537 ], [ 69.9095026, 22.4493507 ], [ 69.9094994, 22.4488359 ], [ 69.9100531, 22.4488326 ], [ 69.9100565, 22.4493475 ], [ 69.9108866, 22.4492137 ], [ 69.911299, 22.4488257 ], [ 69.9118479, 22.4480502 ], [ 69.9118445, 22.4475354 ], [ 69.9122571, 22.4470181 ], [ 69.9111491, 22.4470243 ], [ 69.9111459, 22.4465095 ], [ 69.9114236, 22.4466361 ], [ 69.9125315, 22.4466299 ], [ 69.9128091, 22.4467576 ], [ 69.9126651, 22.4459859 ], [ 69.9121045, 22.4449593 ], [ 69.9121028, 22.4447019 ], [ 69.912241, 22.444572 ], [ 69.9130718, 22.4445673 ], [ 69.9136207, 22.4437918 ], [ 69.9141737, 22.4436605 ], [ 69.9143032, 22.4423724 ], [ 69.9147175, 22.4421128 ], [ 69.914726, 22.4433998 ], [ 69.9155551, 22.4431377 ], [ 69.91556, 22.44391 ], [ 69.9180509, 22.4436384 ], [ 69.9180475, 22.4431235 ], [ 69.9183245, 22.443122 ], [ 69.9183277, 22.4436368 ], [ 69.9191586, 22.4436321 ], [ 69.9191552, 22.4431173 ], [ 69.9194323, 22.4431156 ], [ 69.9194357, 22.4436306 ], [ 69.9205434, 22.4436242 ], [ 69.9205468, 22.444139 ], [ 69.9194398, 22.4442738 ], [ 69.9191646, 22.4445327 ], [ 69.9180584, 22.4447964 ], [ 69.9177832, 22.4450555 ], [ 69.9172302, 22.4451878 ], [ 69.9169584, 22.4459617 ], [ 69.9164035, 22.4458357 ], [ 69.9161276, 22.4459665 ], [ 69.9157184, 22.4469984 ], [ 69.915587, 22.448029 ], [ 69.9153094, 22.4479014 ], [ 69.9147562, 22.4480337 ], [ 69.9146409, 22.4516387 ], [ 69.9147808, 22.4517661 ], [ 69.9156126, 22.4518907 ], [ 69.9157623, 22.4536918 ], [ 69.9164612, 22.4545885 ], [ 69.917292, 22.4545837 ], [ 69.9175672, 22.4543248 ], [ 69.9181221, 22.4544509 ], [ 69.9182567, 22.4539351 ], [ 69.9188055, 22.4531596 ], [ 69.9193561, 22.4526416 ], [ 69.9199031, 22.4516087 ], [ 69.920729, 22.4508317 ], [ 69.9212777, 22.4500562 ], [ 69.9215343, 22.4469653 ], [ 69.9212555, 22.4467096 ], [ 69.9212419, 22.4446501 ], [ 69.9220677, 22.4438729 ], [ 69.9226114, 22.4423252 ], [ 69.9226097, 22.4420678 ], [ 69.9223294, 22.4415544 ], [ 69.9224581, 22.440009 ], [ 69.9219042, 22.4400122 ], [ 69.9220405, 22.439754 ], [ 69.9220354, 22.4389816 ], [ 69.9221728, 22.4387234 ], [ 69.9210633, 22.4384722 ], [ 69.9207914, 22.4392462 ], [ 69.9205145, 22.4392477 ], [ 69.9203722, 22.4387336 ], [ 69.9199539, 22.4382212 ], [ 69.9191221, 22.4380967 ], [ 69.918288, 22.4375866 ], [ 69.9171803, 22.4375928 ], [ 69.9169025, 22.4374662 ], [ 69.9168991, 22.4369514 ], [ 69.9160675, 22.4368268 ], [ 69.914953, 22.4358034 ], [ 69.913007, 22.4346563 ], [ 69.9130036, 22.4341415 ], [ 69.9124506, 22.4342728 ], [ 69.9105071, 22.4335116 ], [ 69.9085619, 22.4324927 ], [ 69.9077269, 22.4318542 ], [ 69.9078617, 22.4313386 ], [ 69.9075831, 22.4310827 ], [ 69.9074417, 22.4305686 ], [ 69.9088271, 22.430689 ], [ 69.9099399, 22.431455 ], [ 69.9117435, 22.4320889 ], [ 69.9117452, 22.4323464 ], [ 69.9117486, 22.4328614 ], [ 69.9121669, 22.4332447 ], [ 69.9127209, 22.4332415 ], [ 69.9129968, 22.4331118 ], [ 69.9130002, 22.4336267 ], [ 69.9135532, 22.4334944 ], [ 69.9136904, 22.4333653 ], [ 69.9138259, 22.4328497 ], [ 69.9146551, 22.4325875 ], [ 69.9146583, 22.4331024 ], [ 69.9152113, 22.4329701 ], [ 69.9153485, 22.432841 ], [ 69.915395, 22.433267 ], [ 69.915214, 22.4333566 ], [ 69.9152174, 22.4338714 ], [ 69.9141113, 22.4341353 ], [ 69.9143907, 22.4345193 ], [ 69.9149437, 22.4343879 ], [ 69.9146719, 22.4351619 ], [ 69.9152266, 22.435287 ], [ 69.9153654, 22.4354153 ], [ 69.9155077, 22.4359294 ], [ 69.9157847, 22.4359279 ], [ 69.9157813, 22.4354131 ], [ 69.9163351, 22.4354099 ], [ 69.9163385, 22.4359247 ], [ 69.9174453, 22.4357892 ], [ 69.9177241, 22.4360451 ], [ 69.918001, 22.4360436 ], [ 69.918138, 22.4359145 ], [ 69.9181346, 22.4353997 ], [ 69.9177163, 22.4348871 ], [ 69.9171616, 22.434761 ], [ 69.916883, 22.4345051 ], [ 69.9157728, 22.4341258 ], [ 69.9155857, 22.4334422 ], [ 69.9171533, 22.4334739 ], [ 69.9179891, 22.4342415 ], [ 69.9188233, 22.4347516 ], [ 69.9195175, 22.4351343 ], [ 69.9198014, 22.4361625 ], [ 69.9207736, 22.4365427 ], [ 69.9218881, 22.4375662 ], [ 69.9227197, 22.4376905 ], [ 69.9227112, 22.4364033 ], [ 69.923265, 22.4364002 ], [ 69.9229983, 22.4379464 ], [ 69.9235523, 22.4379432 ], [ 69.9238377, 22.4392288 ], [ 69.9232839, 22.439232 ], [ 69.9232856, 22.4394894 ], [ 69.9238403, 22.4396145 ], [ 69.9245364, 22.4402547 ], [ 69.925374, 22.4412796 ], [ 69.9254188, 22.4414482 ], [ 69.9252385, 22.4416661 ], [ 69.9246838, 22.441541 ], [ 69.9246804, 22.4410262 ], [ 69.9238496, 22.4410309 ], [ 69.9241522, 22.4448909 ], [ 69.9247059, 22.4448876 ], [ 69.9245687, 22.4451458 ], [ 69.9245738, 22.4459183 ], [ 69.9251329, 22.4466873 ], [ 69.9251448, 22.4484894 ], [ 69.9254287, 22.4495176 ], [ 69.9258471, 22.4499009 ], [ 69.9264011, 22.4498977 ], [ 69.9270869, 22.4489931 ], [ 69.9270852, 22.4487357 ], [ 69.9268065, 22.44848 ], [ 69.9266532, 22.4461638 ], [ 69.927207, 22.4461606 ], [ 69.9270663, 22.4459039 ], [ 69.9264954, 22.4433327 ], [ 69.9262168, 22.4430768 ], [ 69.9260735, 22.4423053 ], [ 69.9255198, 22.4423086 ], [ 69.9256095, 22.4416232 ], [ 69.9266231, 22.4416582 ], [ 69.9267621, 22.4417865 ], [ 69.9269044, 22.4423006 ], [ 69.9274583, 22.4422974 ], [ 69.9278819, 22.4435822 ], [ 69.9282994, 22.4438372 ], [ 69.928296, 22.4433224 ], [ 69.9285729, 22.4433208 ], [ 69.928446, 22.4451237 ], [ 69.9281724, 22.4456401 ], [ 69.9281758, 22.4461551 ], [ 69.9284545, 22.4464108 ], [ 69.9285986, 22.4471823 ], [ 69.9280431, 22.4469281 ], [ 69.9281845, 22.4474422 ], [ 69.9283243, 22.4475696 ], [ 69.9288781, 22.4475665 ], [ 69.929017, 22.4476949 ], [ 69.9290635, 22.4481209 ], [ 69.9286037, 22.4479547 ], [ 69.9287469, 22.4487262 ], [ 69.9291644, 22.4489812 ], [ 69.9292542, 22.4482961 ], [ 69.9294364, 22.4482072 ], [ 69.9295829, 22.4494938 ], [ 69.9301453, 22.4507776 ], [ 69.9301557, 22.4523223 ], [ 69.9305776, 22.4532205 ], [ 69.9341824, 22.4538438 ], [ 69.9341841, 22.4541012 ], [ 69.9314128, 22.4538597 ], [ 69.931286, 22.4556625 ], [ 69.9311495, 22.4559209 ], [ 69.9322567, 22.4557852 ], [ 69.93336, 22.4551358 ], [ 69.9330883, 22.4559096 ], [ 69.9322591, 22.4561719 ], [ 69.9321253, 22.4569451 ], [ 69.9318501, 22.457204 ], [ 69.9315817, 22.4584928 ], [ 69.9317224, 22.4587495 ], [ 69.9310278, 22.458496 ], [ 69.9311616, 22.4577228 ], [ 69.9303325, 22.4579852 ], [ 69.9301969, 22.4585008 ], [ 69.9303427, 22.4595297 ], [ 69.930756, 22.45927 ], [ 69.9308915, 22.4587542 ], [ 69.9310739, 22.4588408 ], [ 69.9310416, 22.4605556 ], [ 69.9306301, 22.4610729 ], [ 69.9300762, 22.4610759 ], [ 69.9300796, 22.4615909 ], [ 69.9298025, 22.4615924 ], [ 69.9297991, 22.4610776 ], [ 69.9289682, 22.4610823 ], [ 69.9290994, 22.4600519 ], [ 69.9295067, 22.4587621 ], [ 69.9289528, 22.4587654 ], [ 69.9289511, 22.4585079 ], [ 69.9297819, 22.4585032 ], [ 69.9307354, 22.4561808 ], [ 69.9308675, 22.4551502 ], [ 69.9303136, 22.4551534 ], [ 69.9301676, 22.4541245 ], [ 69.92933, 22.4530995 ], [ 69.9289064, 22.4518147 ], [ 69.9280764, 22.4519477 ], [ 69.9266831, 22.4506684 ], [ 69.9261274, 22.4504142 ], [ 69.9239117, 22.4504269 ], [ 69.9236358, 22.4505576 ], [ 69.9236392, 22.4510725 ], [ 69.923086, 22.451204 ], [ 69.9222586, 22.4517236 ], [ 69.9217072, 22.4521133 ], [ 69.9215717, 22.4526291 ], [ 69.920746, 22.4534061 ], [ 69.9206129, 22.4541793 ], [ 69.9211669, 22.4541761 ], [ 69.9207562, 22.4549508 ], [ 69.9207579, 22.4552082 ], [ 69.9213168, 22.4559772 ], [ 69.9218843, 22.4580335 ], [ 69.9218911, 22.4590634 ], [ 69.922031, 22.4591908 ], [ 69.9228611, 22.4590577 ], [ 69.9227256, 22.4595735 ], [ 69.9228654, 22.4597009 ], [ 69.9234202, 22.459827 ], [ 69.9234168, 22.4593121 ], [ 69.9236936, 22.4593104 ], [ 69.923842, 22.4608544 ], [ 69.9235666, 22.4611133 ], [ 69.9233119, 22.4644616 ], [ 69.9237398, 22.4662613 ], [ 69.9231858, 22.4662645 ], [ 69.923179, 22.4652348 ], [ 69.9226241, 22.4651088 ], [ 69.9223455, 22.4648529 ], [ 69.9217915, 22.4648561 ], [ 69.9201389, 22.4662819 ], [ 69.9201423, 22.4667967 ], [ 69.9195893, 22.4669283 ], [ 69.9190378, 22.467318 ], [ 69.9190412, 22.4678328 ], [ 69.918488, 22.4679642 ], [ 69.9173861, 22.4688721 ], [ 69.9175292, 22.4696436 ], [ 69.9176691, 22.469771 ], [ 69.9190548, 22.4698923 ], [ 69.9187811, 22.4704087 ], [ 69.9182272, 22.4704119 ], [ 69.9182323, 22.4711842 ], [ 69.9187863, 22.4711811 ], [ 69.9187897, 22.471696 ], [ 69.9185118, 22.4715684 ], [ 69.9176808, 22.4715731 ], [ 69.917403, 22.4714465 ], [ 69.9173996, 22.4709315 ], [ 69.9168456, 22.4709347 ], [ 69.9171278, 22.4717054 ], [ 69.9168499, 22.4715779 ], [ 69.9157418, 22.4715841 ], [ 69.9154657, 22.4717149 ], [ 69.9154674, 22.4719723 ], [ 69.9160214, 22.4719691 ], [ 69.9160231, 22.4722265 ], [ 69.915193, 22.4723596 ], [ 69.9146415, 22.4727493 ], [ 69.9146449, 22.4732641 ], [ 69.9157528, 22.4732579 ], [ 69.9157562, 22.4737727 ], [ 69.9163094, 22.4736404 ], [ 69.9168609, 22.4732516 ], [ 69.9172828, 22.474279 ], [ 69.9177012, 22.4746623 ], [ 69.9188101, 22.4747852 ], [ 69.9188118, 22.4750426 ], [ 69.9171506, 22.4751804 ], [ 69.9168728, 22.4750538 ], [ 69.9172945, 22.4760812 ], [ 69.917852, 22.4765928 ], [ 69.917996, 22.4773643 ], [ 69.9168862, 22.4771131 ], [ 69.9166042, 22.4763424 ], [ 69.9163281, 22.4764722 ], [ 69.915774, 22.4764754 ], [ 69.9149456, 22.4768668 ], [ 69.9150921, 22.4781532 ], [ 69.9153706, 22.4784091 ], [ 69.9152378, 22.4791821 ], [ 69.9157917, 22.4791791 ], [ 69.9159382, 22.4804654 ], [ 69.9160781, 22.4805928 ], [ 69.916633, 22.4807188 ], [ 69.9166347, 22.4809763 ], [ 69.9160807, 22.4809795 ], [ 69.9160824, 22.4812369 ], [ 69.9169125, 22.4811031 ], [ 69.9173234, 22.4804574 ], [ 69.9180131, 22.4799386 ], [ 69.9178876, 22.4819989 ], [ 69.9180301, 22.482513 ], [ 69.9172005, 22.4827752 ], [ 69.9173455, 22.4838043 ], [ 69.9174852, 22.4839316 ], [ 69.9180401, 22.4840577 ], [ 69.9183291, 22.4858581 ], [ 69.9194396, 22.4862374 ], [ 69.9202742, 22.4867477 ], [ 69.9208282, 22.4867445 ], [ 69.9209654, 22.4866154 ], [ 69.9211009, 22.4860999 ], [ 69.9216558, 22.4862248 ], [ 69.9224905, 22.4867349 ], [ 69.9241525, 22.4867254 ], [ 69.9242897, 22.4865964 ], [ 69.9242863, 22.4860815 ], [ 69.9240076, 22.4858256 ], [ 69.9238594, 22.4842819 ], [ 69.9244124, 22.4841496 ], [ 69.9245496, 22.4840205 ], [ 69.9245462, 22.4835056 ], [ 69.9246844, 22.4833756 ], [ 69.9256509, 22.4829844 ], [ 69.9259193, 22.4816956 ], [ 69.9264683, 22.4809201 ], [ 69.9274332, 22.4801422 ], [ 69.9272977, 22.4806578 ], [ 69.9275901, 22.4829732 ], [ 69.9287033, 22.4837391 ], [ 69.9288475, 22.4845106 ], [ 69.9296776, 22.4843767 ], [ 69.9299563, 22.4846325 ], [ 69.9305105, 22.4846292 ], [ 69.9314751, 22.4839806 ], [ 69.9320206, 22.4826903 ], [ 69.932151, 22.4814023 ], [ 69.9315969, 22.4814055 ], [ 69.9322822, 22.4803716 ], [ 69.9319983, 22.4793435 ], [ 69.9319947, 22.4788286 ], [ 69.9321329, 22.4786986 ], [ 69.9326868, 22.4786954 ], [ 69.9329648, 22.478823 ], [ 69.9332349, 22.4777918 ], [ 69.9334173, 22.4778784 ], [ 69.9335154, 22.4783049 ], [ 69.9337923, 22.4783034 ], [ 69.9337889, 22.4777886 ], [ 69.9336056, 22.4777011 ], [ 69.933643, 22.4767597 ], [ 69.9340573, 22.4764998 ], [ 69.9341988, 22.4770139 ], [ 69.9340694, 22.4783017 ], [ 69.9351765, 22.4781662 ], [ 69.9353154, 22.4782945 ], [ 69.9355993, 22.4793227 ], [ 69.9357392, 22.4794501 ], [ 69.9365695, 22.479317 ], [ 69.9364337, 22.4798328 ], [ 69.9371312, 22.4804718 ], [ 69.9379622, 22.4804671 ], [ 69.9393498, 22.4808455 ], [ 69.9393551, 22.4816179 ], [ 69.9385224, 22.4813652 ], [ 69.9383937, 22.4829107 ], [ 69.9385335, 22.4830381 ], [ 69.9396409, 22.4829035 ], [ 69.9396426, 22.4831609 ], [ 69.9390884, 22.4831641 ], [ 69.9390903, 22.4834215 ], [ 69.9401975, 22.4832858 ], [ 69.9403345, 22.4831567 ], [ 69.9401931, 22.4826427 ], [ 69.9410232, 22.4825087 ], [ 69.9411604, 22.4823796 ], [ 69.9410085, 22.480321 ], [ 69.9415617, 22.4801885 ], [ 69.9418369, 22.4799296 ], [ 69.942114, 22.4799279 ], [ 69.9425333, 22.4805695 ], [ 69.9432289, 22.4809511 ], [ 69.9451672, 22.4808116 ], [ 69.9443466, 22.4823611 ], [ 69.9460087, 22.4823512 ], [ 69.9460053, 22.4818364 ], [ 69.9454511, 22.4818396 ], [ 69.9454477, 22.4813248 ], [ 69.9460034, 22.481579 ], [ 69.9457195, 22.4805508 ], [ 69.9462735, 22.4805476 ], [ 69.946415, 22.4810617 ], [ 69.9462875, 22.4826071 ], [ 69.9468414, 22.4826039 ], [ 69.946845, 22.4831188 ], [ 69.9462892, 22.4828646 ], [ 69.9461536, 22.4833801 ], [ 69.9462997, 22.4844091 ], [ 69.9446367, 22.4842898 ], [ 69.9440845, 22.4845504 ], [ 69.9438074, 22.4845519 ], [ 69.9435286, 22.4842962 ], [ 69.9424198, 22.4841745 ], [ 69.9424249, 22.4849468 ], [ 69.9418683, 22.4845633 ], [ 69.9415912, 22.484565 ], [ 69.941316, 22.4848241 ], [ 69.9410389, 22.4848256 ], [ 69.9407601, 22.4845699 ], [ 69.9399291, 22.4845746 ], [ 69.939653, 22.4847054 ], [ 69.9396581, 22.4854779 ], [ 69.9410433, 22.4854697 ], [ 69.941045, 22.4857271 ], [ 69.9396617, 22.4859927 ], [ 69.939395, 22.4875389 ], [ 69.9399491, 22.4875357 ], [ 69.9399439, 22.4867632 ], [ 69.9407758, 22.4868867 ], [ 69.9413273, 22.4864979 ], [ 69.9417494, 22.4875251 ], [ 69.9418892, 22.4876525 ], [ 69.9429973, 22.4876461 ], [ 69.9432735, 22.4875162 ], [ 69.9432769, 22.4880311 ], [ 69.9427229, 22.4880343 ], [ 69.9427263, 22.4885491 ], [ 69.9446664, 22.4886661 ], [ 69.9449418, 22.488407 ], [ 69.9460472, 22.4880148 ], [ 69.9460506, 22.4885296 ], [ 69.9467853, 22.4883556 ], [ 69.9468819, 22.4885249 ], [ 69.9471587, 22.4885232 ], [ 69.947157, 22.4882658 ], [ 69.9469737, 22.4881783 ], [ 69.9468747, 22.4874951 ], [ 69.9474288, 22.4874918 ], [ 69.9476989, 22.4864605 ], [ 69.9479758, 22.4864588 ], [ 69.9481191, 22.4872303 ], [ 69.9488148, 22.487612 ], [ 69.9490918, 22.4876103 ], [ 69.949229, 22.4874813 ], [ 69.9492272, 22.4872238 ], [ 69.9485282, 22.4861981 ], [ 69.9479741, 22.4862013 ], [ 69.948107, 22.4854283 ], [ 69.9479671, 22.4851717 ], [ 69.9487998, 22.4854242 ], [ 69.948931, 22.4843938 ], [ 69.949069, 22.4842637 ], [ 69.949346, 22.484262 ], [ 69.9499019, 22.4845162 ], [ 69.9501788, 22.4845145 ], [ 69.950316, 22.4843854 ], [ 69.9503126, 22.4838706 ], [ 69.9500338, 22.4836149 ], [ 69.9497462, 22.4820719 ], [ 69.9500213, 22.4818128 ], [ 69.9501516, 22.4805247 ], [ 69.9504286, 22.4805232 ], [ 69.9504322, 22.4810381 ], [ 69.950672544531258, 22.481036624428665 ], [ 69.9507091, 22.4810364 ], [ 69.9507057, 22.4805215 ], [ 69.9509826, 22.4805198 ], [ 69.9507197, 22.4825811 ], [ 69.9512746, 22.482706 ], [ 69.9515543, 22.483091 ], [ 69.9510002, 22.4830942 ], [ 69.9511417, 22.4836083 ], [ 69.9512816, 22.4837358 ], [ 69.9534987, 22.4838519 ], [ 69.9536403, 22.484366 ], [ 69.9543368, 22.4848766 ], [ 69.9540527, 22.4838485 ], [ 69.9559909, 22.4837079 ], [ 69.9565458, 22.4838337 ], [ 69.9566751, 22.4825457 ], [ 69.9569503, 22.4822868 ], [ 69.9568087, 22.4817727 ], [ 69.9573636, 22.4818976 ], [ 69.9576424, 22.4821533 ], [ 69.9584753, 22.4824059 ], [ 69.9588966, 22.4833049 ], [ 69.9589036, 22.4843346 ], [ 69.9595993, 22.4847162 ], [ 69.9607127, 22.485482 ], [ 69.9618208, 22.4854754 ], [ 69.9622313, 22.4848298 ], [ 69.9622224, 22.4835425 ], [ 69.9623606, 22.4834125 ], [ 69.9631916, 22.4834076 ], [ 69.9633288, 22.4832785 ], [ 69.9633252, 22.4827636 ], [ 69.9631854, 22.482507 ], [ 69.9642935, 22.4825004 ], [ 69.9644279, 22.4819848 ], [ 69.9648422, 22.4817247 ], [ 69.9648457, 22.4822397 ], [ 69.9652589, 22.4819797 ], [ 69.9653925, 22.4812066 ], [ 69.9659457, 22.4810742 ], [ 69.9660829, 22.4809451 ], [ 69.9654914, 22.4755423 ], [ 69.9653515, 22.4752857 ], [ 69.9661825, 22.4752807 ], [ 69.9659021, 22.4747674 ], [ 69.9672871, 22.4747591 ], [ 69.9671515, 22.4752749 ], [ 69.9667401, 22.4757922 ], [ 69.967294, 22.475789 ], [ 69.9672959, 22.4760464 ], [ 69.966742, 22.4760496 ], [ 69.9663385, 22.4778542 ], [ 69.9666172, 22.4781099 ], [ 69.9666333, 22.4804268 ], [ 69.9669121, 22.4806825 ], [ 69.9669157, 22.4811974 ], [ 69.9671944, 22.4814533 ], [ 69.9673371, 22.4819674 ], [ 69.9678902, 22.4818347 ], [ 69.9684407, 22.4813166 ], [ 69.9689937, 22.4811849 ], [ 69.9689901, 22.4806701 ], [ 69.9695443, 22.4806669 ], [ 69.9695407, 22.480152 ], [ 69.970923, 22.479757 ], [ 69.9716032, 22.47808 ], [ 69.9720166, 22.4776909 ], [ 69.9725698, 22.4775593 ], [ 69.9718839, 22.4785932 ], [ 69.9718875, 22.479108 ], [ 69.9720274, 22.4792354 ], [ 69.9734124, 22.4792271 ], [ 69.9736877, 22.4789679 ], [ 69.9753496, 22.4789579 ], [ 69.9764613, 22.4794661 ], [ 69.9767384, 22.4794644 ], [ 69.9775666, 22.4790738 ], [ 69.9773005, 22.48062 ], [ 69.9756375, 22.4805009 ], [ 69.9753623, 22.48076 ], [ 69.973979, 22.4810258 ], [ 69.9734277, 22.4814157 ], [ 69.9737102, 22.4821864 ], [ 69.9734322, 22.4820588 ], [ 69.9728782, 22.4820622 ], [ 69.9726031, 22.4823214 ], [ 69.971495, 22.482328 ], [ 69.9698374, 22.4829821 ], [ 69.969841, 22.4834969 ], [ 69.9692878, 22.4836285 ], [ 69.9681869, 22.484665 ], [ 69.9662504, 22.4850632 ], [ 69.966254, 22.485578 ], [ 69.9651459, 22.4855846 ], [ 69.9654282, 22.4863552 ], [ 69.9662595, 22.4863503 ], [ 69.9658469, 22.4868676 ], [ 69.9657142, 22.4876408 ], [ 69.9648851, 22.4879031 ], [ 69.9647548, 22.4891911 ], [ 69.9650336, 22.489447 ], [ 69.9650372, 22.4899619 ], [ 69.9657384, 22.4911157 ], [ 69.9671253, 22.4913648 ], [ 69.9682389, 22.4921305 ], [ 69.9690718, 22.4923828 ], [ 69.9693506, 22.4926387 ], [ 69.9699055, 22.4927646 ], [ 69.9699019, 22.4922495 ], [ 69.9715677, 22.4927545 ], [ 69.9712942, 22.4932711 ], [ 69.9726758, 22.4927477 ], [ 69.9725405, 22.4932635 ], [ 69.972129, 22.4937808 ], [ 69.9740718, 22.4942839 ], [ 69.97394, 22.4953146 ], [ 69.9743589, 22.4956978 ], [ 69.9749138, 22.4958235 ], [ 69.9750553, 22.4963376 ], [ 69.9757548, 22.497234 ], [ 69.9763097, 22.4973597 ], [ 69.9767321, 22.4983869 ], [ 69.976872, 22.4985143 ], [ 69.9777032, 22.4985094 ], [ 69.9781156, 22.4981212 ], [ 69.9782491, 22.497348 ], [ 69.978666, 22.497603 ], [ 69.9788104, 22.4983745 ], [ 69.9782564, 22.4983777 ], [ 69.9778476, 22.49941 ], [ 69.977850963118357, 22.4999 ], [ 69.977850963118371, 22.4999 ], [ 69.9778529, 22.5001822 ], [ 69.9789811, 22.5030072 ], [ 69.9795388, 22.5035189 ], [ 69.979687, 22.5048052 ], [ 69.9802409, 22.5048018 ], [ 69.9803846, 22.5055733 ], [ 69.9806633, 22.505829 ], [ 69.9809478, 22.506857 ], [ 69.9817843, 22.5076241 ], [ 69.9822113, 22.5091662 ], [ 69.983872, 22.5088987 ], [ 69.9831842, 22.5096751 ], [ 69.9836221, 22.5127619 ], [ 69.9841763, 22.5127585 ], [ 69.984318, 22.5132724 ], [ 69.9845968, 22.5135283 ], [ 69.9844624, 22.5140439 ], [ 69.9850175, 22.5141688 ], [ 69.9858542, 22.514936 ], [ 69.9864093, 22.5150618 ], [ 69.9865418, 22.5142886 ], [ 69.9864019, 22.514032 ], [ 69.9869561, 22.5140286 ], [ 69.9866718, 22.5130006 ], [ 69.9861177, 22.513004 ], [ 69.9856943, 22.5119768 ], [ 69.9854154, 22.5117211 ], [ 69.9854118, 22.5112062 ], [ 69.9855497, 22.5110762 ], [ 69.9866571, 22.5109413 ], [ 69.9866626, 22.5117135 ], [ 69.9880479, 22.511705 ], [ 69.9881806, 22.5109318 ], [ 69.9883186, 22.5108018 ], [ 69.9899793, 22.5105342 ], [ 69.9901183, 22.5106625 ], [ 69.9902609, 22.5111766 ], [ 69.990816, 22.5113013 ], [ 69.990955, 22.5114296 ], [ 69.9910977, 22.5119437 ], [ 69.9913747, 22.511942 ], [ 69.9915091, 22.5114262 ], [ 69.9917843, 22.5111671 ], [ 69.9919196, 22.5106513 ], [ 69.9923365, 22.5109063 ], [ 69.9927573, 22.5115468 ], [ 69.9938656, 22.51154 ], [ 69.9947004, 22.5120497 ], [ 69.9953953, 22.5124321 ], [ 69.9952611, 22.5129477 ], [ 69.9930481, 22.5134763 ], [ 69.993467, 22.5139887 ], [ 69.9934688, 22.5142461 ], [ 69.9931935, 22.5145052 ], [ 69.9933418, 22.5157914 ], [ 69.9936189, 22.5157897 ], [ 69.9936151, 22.5152748 ], [ 69.9938932, 22.5154015 ], [ 69.9944473, 22.5153981 ], [ 69.9952759, 22.5150072 ], [ 69.9952795, 22.5155221 ], [ 69.9963832, 22.5148711 ], [ 69.9980457, 22.5148609 ], [ 69.9981846, 22.5149893 ], [ 69.9980502, 22.5155049 ], [ 69.9986044, 22.5155015 ], [ 69.9986008, 22.5149866 ], [ 70.0005412, 22.5151029 ], [ 70.001099, 22.5156143 ], [ 70.0022082, 22.5157366 ], [ 70.0020655, 22.5152225 ], [ 70.0016467, 22.5147103 ], [ 70.0021999, 22.5145776 ], [ 70.0023371, 22.5144485 ], [ 70.0023352, 22.5141911 ], [ 70.0020544, 22.513678 ], [ 70.0020489, 22.5129057 ], [ 70.0023241, 22.5126466 ], [ 70.0023222, 22.512389 ], [ 70.0017644, 22.5118778 ], [ 70.0016225, 22.5113637 ], [ 70.0010685, 22.5113671 ], [ 70.0014762, 22.5103348 ], [ 70.0016142, 22.5102047 ], [ 70.0024445, 22.5100713 ], [ 70.0023091, 22.5105871 ], [ 70.0028671, 22.5110985 ], [ 70.0027346, 22.5118717 ], [ 70.0032887, 22.5118681 ], [ 70.003283, 22.5110959 ], [ 70.004256, 22.5116046 ], [ 70.0042598, 22.5121195 ], [ 70.0037149, 22.5134102 ], [ 70.0037168, 22.5136676 ], [ 70.0038569, 22.513795 ], [ 70.0044101, 22.5136632 ], [ 70.0044155, 22.5144355 ], [ 70.0046926, 22.5144338 ], [ 70.0048215, 22.5131458 ], [ 70.0049595, 22.5130157 ], [ 70.0055136, 22.5130123 ], [ 70.0057926, 22.513268 ], [ 70.0063477, 22.5133937 ], [ 70.0063515, 22.5139086 ], [ 70.0069047, 22.5137759 ], [ 70.0070436, 22.5139042 ], [ 70.0071863, 22.5144183 ], [ 70.0066321, 22.5144217 ], [ 70.0066359, 22.5149365 ], [ 70.0060827, 22.5150683 ], [ 70.0055323, 22.5155867 ], [ 70.0047038, 22.5159785 ], [ 70.0046945, 22.5146912 ], [ 70.0035834, 22.5143115 ], [ 70.0030302, 22.5144442 ], [ 70.0031738, 22.5152157 ], [ 70.0030394, 22.5157313 ], [ 70.0035936, 22.5157279 ], [ 70.0033203, 22.5162444 ], [ 70.0027642, 22.5159906 ], [ 70.002768, 22.5165054 ], [ 70.0033231, 22.5166302 ], [ 70.003462, 22.5167585 ], [ 70.0038856, 22.5177855 ], [ 70.0033295, 22.5175317 ], [ 70.0033352, 22.5183039 ], [ 70.0038903, 22.5184287 ], [ 70.0043082, 22.5188127 ], [ 70.0044509, 22.5193268 ], [ 70.004727, 22.5191958 ], [ 70.0052813, 22.5191924 ], [ 70.0059706, 22.5188023 ], [ 70.0061041, 22.5180291 ], [ 70.0063811, 22.5180274 ], [ 70.0063849, 22.5185423 ], [ 70.0077684, 22.5182762 ], [ 70.0076314, 22.5185345 ], [ 70.0076352, 22.5190494 ], [ 70.008054, 22.5194325 ], [ 70.009582, 22.5200669 ], [ 70.0095839, 22.5203244 ], [ 70.0087622, 22.5216167 ], [ 70.0087658, 22.5221316 ], [ 70.0091867, 22.5227721 ], [ 70.0105758, 22.5232782 ], [ 70.0108548, 22.523534 ], [ 70.0116879, 22.5237861 ], [ 70.0126639, 22.5246816 ], [ 70.0128066, 22.5251955 ], [ 70.0169593, 22.5246543 ], [ 70.0164541, 22.531351 ], [ 70.0203316, 22.531069 ], [ 70.0204546, 22.5290087 ], [ 70.0208595, 22.5274616 ], [ 70.0219697, 22.527712 ], [ 70.021685, 22.526684 ], [ 70.0211309, 22.5266876 ], [ 70.0216756, 22.5253969 ], [ 70.0238943, 22.5256402 ], [ 70.0234875, 22.5269301 ], [ 70.0233628, 22.528733 ], [ 70.0228086, 22.5287364 ], [ 70.0228143, 22.5295086 ], [ 70.0233666, 22.5292478 ], [ 70.0233703, 22.5297626 ], [ 70.0228162, 22.529766 ], [ 70.0230961, 22.5301501 ], [ 70.0244817, 22.5301412 ], [ 70.024892, 22.5294954 ], [ 70.0262528, 22.5261401 ], [ 70.0263843, 22.5251095 ], [ 70.0283259, 22.5253546 ], [ 70.027902, 22.5243276 ], [ 70.0278982, 22.5238127 ], [ 70.0281734, 22.5235534 ], [ 70.0281696, 22.5230386 ], [ 70.027606, 22.5217551 ], [ 70.027585, 22.5189233 ], [ 70.0278583, 22.5184068 ], [ 70.0278506, 22.5173769 ], [ 70.0281258, 22.5171178 ], [ 70.0282611, 22.516602 ], [ 70.0288152, 22.5165984 ], [ 70.0286743, 22.5163419 ], [ 70.0286705, 22.5158271 ], [ 70.0288086, 22.5156971 ], [ 70.0293637, 22.5158228 ], [ 70.0297693, 22.5145328 ], [ 70.0307347, 22.5138827 ], [ 70.0312879, 22.5137507 ], [ 70.0312917, 22.5142658 ], [ 70.0307376, 22.5142692 ], [ 70.0304681, 22.5153007 ], [ 70.0299139, 22.5153043 ], [ 70.0295074, 22.5165941 ], [ 70.0289591, 22.5173699 ], [ 70.0285629, 22.5199467 ], [ 70.0289761, 22.5196867 ], [ 70.029796, 22.5181369 ], [ 70.0302101, 22.5178768 ], [ 70.0298094, 22.5199388 ], [ 70.0295342, 22.5201981 ], [ 70.0295399, 22.5209704 ], [ 70.0301056, 22.5225113 ], [ 70.0303845, 22.522767 ], [ 70.030554, 22.5268849 ], [ 70.0311082, 22.5268813 ], [ 70.0307017, 22.5281713 ], [ 70.0312864, 22.5322865 ], [ 70.0311522, 22.5328021 ], [ 70.0317045, 22.5325411 ], [ 70.031575, 22.5338292 ], [ 70.0306172, 22.5353801 ], [ 70.0300638, 22.5355118 ], [ 70.0289602, 22.5361629 ], [ 70.0293849, 22.5374474 ], [ 70.0293981, 22.5392493 ], [ 70.029262, 22.5395077 ], [ 70.0298173, 22.5396324 ], [ 70.0339731, 22.5394774 ], [ 70.0338495, 22.5415377 ], [ 70.0341284, 22.5417934 ], [ 70.0341303, 22.5420508 ], [ 70.0338551, 22.5423102 ], [ 70.0337247, 22.5433406 ], [ 70.0331715, 22.5434725 ], [ 70.0323448, 22.5441219 ], [ 70.0323486, 22.5446367 ], [ 70.0317945, 22.5446401 ], [ 70.0316591, 22.5451559 ], [ 70.0311088, 22.5456744 ], [ 70.0308374, 22.5464485 ], [ 70.0308508, 22.5482504 ], [ 70.0305756, 22.5485095 ], [ 70.0305832, 22.5495394 ], [ 70.0308621, 22.5497949 ], [ 70.0315661, 22.551206 ], [ 70.0326756, 22.5513279 ], [ 70.0326795, 22.5518427 ], [ 70.0329566, 22.551841 ], [ 70.0326661, 22.5500408 ], [ 70.0354393, 22.5502805 ], [ 70.0355852, 22.5513092 ], [ 70.035449, 22.5515676 ], [ 70.0384966, 22.5514188 ], [ 70.0391919, 22.5518008 ], [ 70.0396158, 22.5528278 ], [ 70.0410006, 22.5526898 ], [ 70.042115, 22.5534549 ], [ 70.0430874, 22.5538352 ], [ 70.0429532, 22.554351 ], [ 70.0418445, 22.5543582 ], [ 70.041723, 22.5566759 ], [ 70.0414516, 22.5574498 ], [ 70.0414575, 22.5582221 ], [ 70.0409165, 22.5600278 ], [ 70.0406414, 22.5602869 ], [ 70.0401437, 22.5620038 ], [ 70.0399625, 22.5620934 ], [ 70.0398273, 22.5626091 ], [ 70.039552, 22.5628684 ], [ 70.0395597, 22.5638981 ], [ 70.0390112, 22.564674 ], [ 70.0391675, 22.5669898 ], [ 70.0402753, 22.5668535 ], [ 70.0408239, 22.5660777 ], [ 70.041101, 22.5660758 ], [ 70.0412401, 22.5662041 ], [ 70.0413832, 22.566718 ], [ 70.0422155, 22.5668408 ], [ 70.0423546, 22.5669692 ], [ 70.0425151, 22.5698 ], [ 70.0430704, 22.5699246 ], [ 70.0434924, 22.5708235 ], [ 70.0436325, 22.5709506 ], [ 70.0444631, 22.570817 ], [ 70.0444669, 22.5713319 ], [ 70.045851, 22.5710656 ], [ 70.0459793, 22.5697775 ], [ 70.0456982, 22.5692644 ], [ 70.0445818, 22.5682419 ], [ 70.0444397, 22.567728 ], [ 70.0433282, 22.5673485 ], [ 70.0413743, 22.5655592 ], [ 70.0405401, 22.565179 ], [ 70.0401063, 22.5628649 ], [ 70.0403346, 22.5621786 ], [ 70.0407939, 22.5620881 ], [ 70.0409243, 22.5610574 ], [ 70.0411957, 22.5602833 ], [ 70.0414709, 22.5600242 ], [ 70.042002, 22.5569314 ], [ 70.0425448, 22.5553833 ], [ 70.0426827, 22.5552533 ], [ 70.0437886, 22.5548603 ], [ 70.0439188, 22.5538297 ], [ 70.0451579, 22.5526628 ], [ 70.047095, 22.5522644 ], [ 70.046812, 22.551494 ], [ 70.0473652, 22.5513612 ], [ 70.0477757, 22.5507154 ], [ 70.047909, 22.5499422 ], [ 70.0495669, 22.5492875 ], [ 70.0506695, 22.5485078 ], [ 70.0512229, 22.5483759 ], [ 70.0513571, 22.5478603 ], [ 70.0520454, 22.5472117 ], [ 70.0534272, 22.5466878 ], [ 70.0537045, 22.5466859 ], [ 70.0539834, 22.5469416 ], [ 70.0548148, 22.5469361 ], [ 70.0559177, 22.5461567 ], [ 70.056747, 22.5458938 ], [ 70.0570222, 22.5456345 ], [ 70.0575756, 22.5455026 ], [ 70.0575695, 22.5447303 ], [ 70.0592333, 22.5448477 ], [ 70.0595115, 22.5449749 ], [ 70.0596457, 22.5444593 ], [ 70.0607483, 22.5436797 ], [ 70.0612947, 22.5426462 ], [ 70.0612809, 22.5408443 ], [ 70.0609999, 22.5403313 ], [ 70.06085, 22.5387876 ], [ 70.0597394, 22.5385375 ], [ 70.0595907, 22.5372514 ], [ 70.0597277, 22.536993 ], [ 70.0591734, 22.5369966 ], [ 70.0597207, 22.5360915 ], [ 70.061565, 22.5360388 ], [ 70.0613864, 22.5364672 ], [ 70.0622197, 22.5367192 ], [ 70.0622138, 22.5359469 ], [ 70.0617532, 22.5358613 ], [ 70.0619309, 22.5351764 ], [ 70.062348, 22.5354311 ], [ 70.0627691, 22.5360715 ], [ 70.0633232, 22.5360679 ], [ 70.0635984, 22.5358086 ], [ 70.0638755, 22.5358067 ], [ 70.0641547, 22.5360622 ], [ 70.0655393, 22.5359248 ], [ 70.0655332, 22.5351525 ], [ 70.0663646, 22.5351471 ], [ 70.0663607, 22.5346322 ], [ 70.067468, 22.5344958 ], [ 70.0676052, 22.5343665 ], [ 70.0677324, 22.532821 ], [ 70.0681496, 22.5330758 ], [ 70.0684325, 22.5338462 ], [ 70.0684465, 22.5356481 ], [ 70.0680392, 22.5366806 ], [ 70.0674848, 22.5366842 ], [ 70.0674888, 22.537199 ], [ 70.065554, 22.537855 ], [ 70.0650027, 22.5382453 ], [ 70.0648676, 22.5387611 ], [ 70.0645926, 22.5390204 ], [ 70.0646064, 22.5408223 ], [ 70.0647464, 22.5409497 ], [ 70.0655776, 22.5409443 ], [ 70.066128, 22.5404256 ], [ 70.0669585, 22.5402918 ], [ 70.0669604, 22.5405492 ], [ 70.066131, 22.5408121 ], [ 70.066135, 22.5413272 ], [ 70.0675196, 22.5411886 ], [ 70.0676566, 22.5410595 ], [ 70.0676527, 22.5405447 ], [ 70.068067, 22.5402845 ], [ 70.0680707, 22.5407993 ], [ 70.0684841, 22.5405392 ], [ 70.0688953, 22.5398925 ], [ 70.0697247, 22.5396294 ], [ 70.0699999, 22.5393703 ], [ 70.0719377, 22.5390998 ], [ 70.072637, 22.5399966 ], [ 70.0726389, 22.540254 ], [ 70.0723658, 22.5407708 ], [ 70.0723756, 22.5420578 ], [ 70.0726547, 22.5423136 ], [ 70.0727999, 22.5430849 ], [ 70.0734882, 22.5425653 ], [ 70.0740284, 22.5407598 ], [ 70.0745788, 22.5402412 ], [ 70.0747118, 22.539468 ], [ 70.075265, 22.5393351 ], [ 70.075402, 22.5392058 ], [ 70.0755253, 22.5371455 ], [ 70.0759424, 22.5374003 ], [ 70.0759484, 22.5381726 ], [ 70.0760883, 22.5382998 ], [ 70.0766436, 22.5384253 ], [ 70.0767857, 22.5389392 ], [ 70.0769258, 22.5390665 ], [ 70.0777572, 22.5390611 ], [ 70.0780373, 22.5394457 ], [ 70.0774829, 22.5394495 ], [ 70.0774869, 22.5399643 ], [ 70.0783174, 22.5398295 ], [ 70.0784544, 22.5397003 ], [ 70.0784444, 22.5384132 ], [ 70.0781652, 22.5381576 ], [ 70.0768968, 22.5353344 ], [ 70.0763425, 22.5353381 ], [ 70.0764707, 22.5340501 ], [ 70.0754933, 22.5330269 ], [ 70.074383, 22.5327768 ], [ 70.0743788, 22.532262 ], [ 70.0754882, 22.5323827 ], [ 70.0756254, 22.5322537 ], [ 70.0756215, 22.5317388 ], [ 70.0753423, 22.5314833 ], [ 70.0749192, 22.5304563 ], [ 70.0738107, 22.5304636 ], [ 70.0739467, 22.5302053 ], [ 70.0739409, 22.529433 ], [ 70.0735217, 22.528921 ], [ 70.0729666, 22.5287955 ], [ 70.0724083, 22.5282845 ], [ 70.0718532, 22.5281599 ], [ 70.0719893, 22.5279016 ], [ 70.0719853, 22.5273867 ], [ 70.0717062, 22.527131 ], [ 70.071142, 22.5258477 ], [ 70.070863, 22.525592 ], [ 70.0705799, 22.5248216 ], [ 70.0700218, 22.5243106 ], [ 70.0691768, 22.5225141 ], [ 70.0686166, 22.5217454 ], [ 70.0686086, 22.5207158 ], [ 70.0687466, 22.5205857 ], [ 70.0693009, 22.520582 ], [ 70.0698591, 22.5210932 ], [ 70.0704141, 22.5212187 ], [ 70.0705561, 22.5217326 ], [ 70.0712524, 22.5221136 ], [ 70.0719496, 22.522753 ], [ 70.0722306, 22.5232659 ], [ 70.0734869, 22.5244156 ], [ 70.074042, 22.5245411 ], [ 70.0743251, 22.5253115 ], [ 70.0726585, 22.5248078 ], [ 70.0728007, 22.5253217 ], [ 70.0729407, 22.5254491 ], [ 70.0734948, 22.5254453 ], [ 70.073774, 22.525701 ], [ 70.0746062, 22.5258246 ], [ 70.0747404, 22.5253089 ], [ 70.0748783, 22.5251786 ], [ 70.0751554, 22.5251769 ], [ 70.0752945, 22.5253051 ], [ 70.0753024, 22.5263347 ], [ 70.0760006, 22.5269732 ], [ 70.0775292, 22.5276071 ], [ 70.0776761, 22.5286358 ], [ 70.0782304, 22.528632 ], [ 70.0782363, 22.5294043 ], [ 70.0785136, 22.5294026 ], [ 70.0786436, 22.528372 ], [ 70.0783644, 22.5281163 ], [ 70.0783624, 22.5278588 ], [ 70.0789127, 22.5273404 ], [ 70.0790477, 22.5268246 ], [ 70.0793247, 22.5268227 ], [ 70.0794688, 22.527594 ], [ 70.0796088, 22.5277214 ], [ 70.0807173, 22.5277139 ], [ 70.0814045, 22.5270662 ], [ 70.0820866, 22.5256453 ], [ 70.0829169, 22.5255115 ], [ 70.0829108, 22.5247392 ], [ 70.0834652, 22.5247354 ], [ 70.0831981, 22.5260244 ], [ 70.0823688, 22.5262875 ], [ 70.0822357, 22.5270607 ], [ 70.0810053, 22.5291284 ], [ 70.0804512, 22.5291321 ], [ 70.0804591, 22.5301618 ], [ 70.0810144, 22.5302864 ], [ 70.0835183, 22.5315566 ], [ 70.0846286, 22.5318067 ], [ 70.0862913, 22.5317953 ], [ 70.0872637, 22.5321754 ], [ 70.087431, 22.5357783 ], [ 70.0868768, 22.5357821 ], [ 70.0867417, 22.5362979 ], [ 70.0864667, 22.5365572 ], [ 70.0864706, 22.537072 ], [ 70.0868898, 22.5374549 ], [ 70.087444, 22.5374512 ], [ 70.0882714, 22.5369306 ], [ 70.089721339611373, 22.536535270871536 ], [ 70.0902072, 22.5364028 ], [ 70.0911694, 22.5354956 ], [ 70.0915804, 22.5348488 ], [ 70.0924109, 22.534715 ], [ 70.092557, 22.5357437 ], [ 70.0917318, 22.5365217 ], [ 70.091881, 22.5378078 ], [ 70.092158, 22.5378059 ], [ 70.0921541, 22.5372911 ], [ 70.0924311, 22.5372892 ], [ 70.0924412, 22.5385763 ], [ 70.0929964, 22.5387008 ], [ 70.0934147, 22.5390845 ], [ 70.0934599, 22.5392531 ], [ 70.0927265, 22.5396041 ], [ 70.0930066, 22.5399879 ], [ 70.0932837, 22.539986 ], [ 70.0936508, 22.5394279 ], [ 70.09411, 22.5393372 ], [ 70.0938248, 22.5383094 ], [ 70.0929934, 22.5383151 ], [ 70.0928241, 22.5344547 ], [ 70.0925449, 22.5341992 ], [ 70.0925408, 22.5336844 ], [ 70.0926778, 22.533426 ], [ 70.0912934, 22.5335636 ], [ 70.0910151, 22.5334372 ], [ 70.0911081, 22.5332667 ], [ 70.0915665, 22.5330469 ], [ 70.093231, 22.533293 ], [ 70.0943385, 22.5331573 ], [ 70.0950836, 22.5398454 ], [ 70.0955047, 22.5404857 ], [ 70.0991072, 22.5404612 ], [ 70.0993863, 22.5407167 ], [ 70.0996636, 22.5407148 ], [ 70.0999386, 22.5404555 ], [ 70.1038163, 22.5401714 ], [ 70.1040955, 22.540427 ], [ 70.1137913, 22.5399745 ], [ 70.113502, 22.5384319 ], [ 70.1151646, 22.5384203 ], [ 70.1151605, 22.5379055 ], [ 70.1168231, 22.537894 ], [ 70.1168293, 22.5386662 ], [ 70.1184899, 22.5383973 ], [ 70.118492, 22.5386547 ], [ 70.1176617, 22.5387887 ], [ 70.1160062, 22.5397018 ], [ 70.1158734, 22.540475 ], [ 70.1154623, 22.5409926 ], [ 70.1151831, 22.5407371 ], [ 70.1143508, 22.5406137 ], [ 70.1140716, 22.5403582 ], [ 70.1137946, 22.5403601 ], [ 70.1132444, 22.5408789 ], [ 70.1110244, 22.5405084 ], [ 70.1111644, 22.5407649 ], [ 70.1111686, 22.5412797 ], [ 70.1106184, 22.5417983 ], [ 70.1102094, 22.5425736 ], [ 70.1079894, 22.5422022 ], [ 70.1077133, 22.5423334 ], [ 70.1077175, 22.5428482 ], [ 70.1074404, 22.5428501 ], [ 70.1072971, 22.5423362 ], [ 70.107018, 22.5420807 ], [ 70.1067347, 22.5413103 ], [ 70.1063155, 22.5407983 ], [ 70.1054831, 22.5406749 ], [ 70.1043818, 22.541584 ], [ 70.1046619, 22.5419677 ], [ 70.104939, 22.5419658 ], [ 70.1050762, 22.5418365 ], [ 70.1052111, 22.5413207 ], [ 70.1054882, 22.5413189 ], [ 70.1056345, 22.5423476 ], [ 70.1060537, 22.5427305 ], [ 70.1091102, 22.5437392 ], [ 70.1096645, 22.5437354 ], [ 70.1100745, 22.5430894 ], [ 70.1115889, 22.5417917 ], [ 70.1117311, 22.5423056 ], [ 70.1118711, 22.542433 ], [ 70.1129796, 22.5424253 ], [ 70.1131166, 22.542296 ], [ 70.1132495, 22.5415228 ], [ 70.113946, 22.5420329 ], [ 70.1143674, 22.542673 ], [ 70.1146445, 22.5426711 ], [ 70.1147815, 22.5425419 ], [ 70.1147774, 22.542027 ], [ 70.1144982, 22.5417717 ], [ 70.1143559, 22.5412578 ], [ 70.1150907, 22.5410828 ], [ 70.1154655, 22.5413784 ], [ 70.1174073, 22.5416222 ], [ 70.1179658, 22.5421333 ], [ 70.1185199, 22.5421295 ], [ 70.118657, 22.5420002 ], [ 70.1187919, 22.5414844 ], [ 70.1207318, 22.5414708 ], [ 70.1207152, 22.5394115 ], [ 70.1198858, 22.5396747 ], [ 70.1196192, 22.5409637 ], [ 70.1193421, 22.5409656 ], [ 70.1194738, 22.5401924 ], [ 70.1193338, 22.5399359 ], [ 70.1187794, 22.5399399 ], [ 70.118769, 22.5386528 ], [ 70.1193234, 22.5386488 ], [ 70.1193171, 22.5378766 ], [ 70.1184878, 22.5381399 ], [ 70.1186239, 22.5378815 ], [ 70.1184753, 22.5365954 ], [ 70.1190297, 22.5365914 ], [ 70.1188864, 22.5360777 ], [ 70.1191614, 22.5358182 ], [ 70.1194304, 22.5347866 ], [ 70.1188719, 22.5342758 ], [ 70.1187297, 22.5337619 ], [ 70.1181756, 22.5337657 ], [ 70.1179046, 22.5345398 ], [ 70.1184598, 22.5346642 ], [ 70.1185989, 22.5347925 ], [ 70.1184651, 22.5353083 ], [ 70.1170805, 22.5354461 ], [ 70.1145793, 22.5345629 ], [ 70.1148533, 22.5341745 ], [ 70.1155426, 22.533784 ], [ 70.1162243, 22.5323629 ], [ 70.117886, 22.532223 ], [ 70.1178902, 22.5327379 ], [ 70.1184443, 22.5327341 ], [ 70.1184485, 22.5332489 ], [ 70.1187256, 22.533247 ], [ 70.1189964, 22.5324727 ], [ 70.1184423, 22.5324767 ], [ 70.118711, 22.5314451 ], [ 70.1170474, 22.5313274 ], [ 70.1167683, 22.5310718 ], [ 70.1156568, 22.530694 ], [ 70.1157989, 22.5312077 ], [ 70.1162192, 22.5317197 ], [ 70.1145577, 22.5318596 ], [ 70.1140066, 22.5322501 ], [ 70.1140108, 22.5327649 ], [ 70.1145649, 22.5327609 ], [ 70.1143022, 22.5345647 ], [ 70.113746, 22.5343113 ], [ 70.11388, 22.5337955 ], [ 70.1133154, 22.5325122 ], [ 70.113303, 22.5309677 ], [ 70.1130217, 22.5304548 ], [ 70.1130115, 22.5291677 ], [ 70.1127324, 22.5289121 ], [ 70.1125901, 22.5283982 ], [ 70.1120359, 22.528402 ], [ 70.1120318, 22.5278872 ], [ 70.1117547, 22.5278891 ], [ 70.1117588, 22.5284039 ], [ 70.1112026, 22.5281505 ], [ 70.1111985, 22.5276356 ], [ 70.1106443, 22.5276394 ], [ 70.1100777, 22.5260987 ], [ 70.1095235, 22.5261025 ], [ 70.1090972, 22.5248182 ], [ 70.1083988, 22.5240509 ], [ 70.1050749, 22.5242019 ], [ 70.1047966, 22.5240756 ], [ 70.1050677, 22.5233015 ], [ 70.1045124, 22.523176 ], [ 70.1039552, 22.5227942 ], [ 70.1036679, 22.521509 ], [ 70.1031138, 22.5215128 ], [ 70.1033807, 22.5202238 ], [ 70.1036577, 22.5202219 ], [ 70.1039429, 22.5212497 ], [ 70.1044982, 22.5213741 ], [ 70.1046371, 22.5215024 ], [ 70.1046413, 22.5220172 ], [ 70.1045052, 22.5222756 ], [ 70.1056167, 22.5226536 ], [ 70.1058959, 22.5229091 ], [ 70.1081145, 22.5231512 ], [ 70.1083895, 22.5228919 ], [ 70.1086666, 22.52289 ], [ 70.1090849, 22.5232737 ], [ 70.1089509, 22.5237895 ], [ 70.1106156, 22.5240356 ], [ 70.1104211, 22.5225799 ], [ 70.1108813, 22.5226173 ], [ 70.1113035, 22.5235158 ], [ 70.1114436, 22.5236432 ], [ 70.1119989, 22.5237685 ], [ 70.1115889, 22.5245436 ], [ 70.1115952, 22.5253158 ], [ 70.11132, 22.5255753 ], [ 70.1113221, 22.5258328 ], [ 70.1128518, 22.5264652 ], [ 70.113406, 22.5264614 ], [ 70.113543, 22.5263323 ], [ 70.1136779, 22.5258163 ], [ 70.1142351, 22.5261983 ], [ 70.1153446, 22.5263198 ], [ 70.1153466, 22.5265772 ], [ 70.1147925, 22.526581 ], [ 70.1149346, 22.5270949 ], [ 70.1160491, 22.5278594 ], [ 70.1162109, 22.5306901 ], [ 70.1164871, 22.5305591 ], [ 70.1175965, 22.5306804 ], [ 70.1174449, 22.5291369 ], [ 70.1171658, 22.5288815 ], [ 70.1171535, 22.527337 ], [ 70.1168681, 22.5263092 ], [ 70.1174181, 22.5257904 ], [ 70.1182287, 22.5232106 ], [ 70.1180616, 22.5196077 ], [ 70.1252759, 22.5208445 ], [ 70.125278, 22.5211019 ], [ 70.1244489, 22.5213652 ], [ 70.1245972, 22.5226513 ], [ 70.1250166, 22.523034 ], [ 70.1264029, 22.5231535 ], [ 70.1254411, 22.52419 ], [ 70.1253071, 22.5247058 ], [ 70.1258613, 22.524702 ], [ 70.1254988, 22.5259031 ], [ 70.1247624, 22.5258675 ], [ 70.1244863, 22.5259987 ], [ 70.1244905, 22.5265135 ], [ 70.1253207, 22.5263786 ], [ 70.1262848, 22.5257286 ], [ 70.1264113, 22.5241832 ], [ 70.1266883, 22.5241813 ], [ 70.1268327, 22.5249526 ], [ 70.1269728, 22.5250798 ], [ 70.1283581, 22.5250701 ], [ 70.1291831, 22.524292 ], [ 70.1297352, 22.5240306 ], [ 70.1304222, 22.5233828 ], [ 70.1305507, 22.5220947 ], [ 70.1358248, 22.5232157 ], [ 70.1359639, 22.5233438 ], [ 70.1358301, 22.5238596 ], [ 70.1344477, 22.524255 ], [ 70.1341707, 22.5242571 ], [ 70.1338915, 22.5240015 ], [ 70.1333374, 22.5240055 ], [ 70.1330614, 22.5241365 ], [ 70.1332056, 22.5249078 ], [ 70.1330718, 22.5254236 ], [ 70.133626, 22.5254198 ], [ 70.1339095, 22.52619 ], [ 70.133078, 22.5261958 ], [ 70.133351, 22.5256791 ], [ 70.1314103, 22.5255636 ], [ 70.1311344, 22.5256946 ], [ 70.1311385, 22.5262094 ], [ 70.1308615, 22.5262115 ], [ 70.1308573, 22.5256967 ], [ 70.1291958, 22.5258365 ], [ 70.1289197, 22.5259677 ], [ 70.1286488, 22.5267418 ], [ 70.1278167, 22.5266184 ], [ 70.1272635, 22.5267515 ], [ 70.1272655, 22.5270089 ], [ 70.1280968, 22.5270032 ], [ 70.1280988, 22.5272607 ], [ 70.1269905, 22.5272684 ], [ 70.1269947, 22.5277832 ], [ 70.1294969, 22.5287953 ], [ 70.1294906, 22.5280231 ], [ 70.1306012, 22.5282727 ], [ 70.1301954, 22.5295627 ], [ 70.1303355, 22.5296901 ], [ 70.1311678, 22.5298133 ], [ 70.1310372, 22.5308441 ], [ 70.1311784, 22.5311004 ], [ 70.130347, 22.5311062 ], [ 70.1306409, 22.5331637 ], [ 70.1298117, 22.533427 ], [ 70.1299539, 22.5339409 ], [ 70.1300941, 22.5340681 ], [ 70.1306494, 22.5341934 ], [ 70.130645, 22.5336785 ], [ 70.1314753, 22.5335436 ], [ 70.1320253, 22.5330248 ], [ 70.1328577, 22.5331482 ], [ 70.1323203, 22.5352113 ], [ 70.131763, 22.5348286 ], [ 70.1309316, 22.5348345 ], [ 70.1304742, 22.5351357 ], [ 70.1300992, 22.5347122 ], [ 70.1295451, 22.5347159 ], [ 70.1295492, 22.5352308 ], [ 70.1302859, 22.5353132 ], [ 70.1305207, 22.5354814 ], [ 70.1305333, 22.5370259 ], [ 70.1299854, 22.5378021 ], [ 70.1299958, 22.5390892 ], [ 70.130137, 22.5393457 ], [ 70.1279233, 22.5397469 ], [ 70.1270971, 22.5403967 ], [ 70.1269622, 22.5409125 ], [ 70.1266872, 22.5411718 ], [ 70.1264164, 22.541946 ], [ 70.1261414, 22.5422055 ], [ 70.1261497, 22.5432351 ], [ 70.1274024, 22.5438694 ], [ 70.1321157, 22.5440937 ], [ 70.1323907, 22.5438344 ], [ 70.1329439, 22.5437021 ], [ 70.1330862, 22.544216 ], [ 70.1332262, 22.5443434 ], [ 70.1393251, 22.5445577 ], [ 70.1401606, 22.5450667 ], [ 70.1404377, 22.5450646 ], [ 70.1408497, 22.5446761 ], [ 70.1408371, 22.5431316 ], [ 70.1404135, 22.5421049 ], [ 70.1398603, 22.542237 ], [ 70.1376422, 22.5421246 ], [ 70.137776, 22.5416086 ], [ 70.1373566, 22.5410968 ], [ 70.1368034, 22.5412289 ], [ 70.1359669, 22.5405918 ], [ 70.1356772, 22.5390492 ], [ 70.1348437, 22.5387976 ], [ 70.1348416, 22.5385402 ], [ 70.1367857, 22.5390414 ], [ 70.1366424, 22.5385275 ], [ 70.1369618, 22.5383553 ], [ 70.1370648, 22.5392967 ], [ 70.137619, 22.539293 ], [ 70.1376106, 22.5382633 ], [ 70.13715, 22.5381779 ], [ 70.1370521, 22.5377522 ], [ 70.136498, 22.5377562 ], [ 70.1360712, 22.5364721 ], [ 70.1359268, 22.5357008 ], [ 70.1350935, 22.5354493 ], [ 70.13481, 22.5346789 ], [ 70.1339798, 22.5348131 ], [ 70.1337016, 22.5346868 ], [ 70.1335541, 22.5336581 ], [ 70.1331285, 22.5323739 ], [ 70.1339597, 22.532368 ], [ 70.1338229, 22.5326264 ], [ 70.1338271, 22.5331412 ], [ 70.1341085, 22.5336541 ], [ 70.1348047, 22.534035 ], [ 70.1356362, 22.5340291 ], [ 70.1357732, 22.5338998 ], [ 70.1359079, 22.5333841 ], [ 70.1363253, 22.5336385 ], [ 70.1364874, 22.5364691 ], [ 70.1373177, 22.5363342 ], [ 70.1377276, 22.535688 ], [ 70.1377191, 22.5346585 ], [ 70.1381321, 22.534269 ], [ 70.1384092, 22.5342669 ], [ 70.1388276, 22.5346506 ], [ 70.1392512, 22.5355481 ], [ 70.1400835, 22.5356713 ], [ 70.1398127, 22.5364457 ], [ 70.1406441, 22.5364396 ], [ 70.1407862, 22.5369535 ], [ 70.1410656, 22.537209 ], [ 70.1410741, 22.5382387 ], [ 70.140938, 22.5384971 ], [ 70.1414933, 22.5386214 ], [ 70.1417726, 22.5388768 ], [ 70.142605, 22.5390002 ], [ 70.142982, 22.5343637 ], [ 70.142, 22.5328261 ], [ 70.1428312, 22.5328201 ], [ 70.1426879, 22.5323064 ], [ 70.1429629, 22.5320469 ], [ 70.1429523, 22.5307598 ], [ 70.1430892, 22.5305014 ], [ 70.14226, 22.5307647 ], [ 70.1422644, 22.5312795 ], [ 70.1414309, 22.531028 ], [ 70.1415585, 22.52974 ], [ 70.1408597, 22.5289726 ], [ 70.1403067, 22.5291049 ], [ 70.13947, 22.5284676 ], [ 70.1394744, 22.5289824 ], [ 70.1391973, 22.5289845 ], [ 70.1390435, 22.5271835 ], [ 70.1395934, 22.5266647 ], [ 70.1395744, 22.524348 ], [ 70.1394343, 22.5240915 ], [ 70.1399885, 22.5240875 ], [ 70.140137, 22.5253737 ], [ 70.1405562, 22.5257564 ], [ 70.1411115, 22.5258817 ], [ 70.1411136, 22.5261391 ], [ 70.1402823, 22.526145 ], [ 70.1404332, 22.5276885 ], [ 70.1422485, 22.5293485 ], [ 70.1428027, 22.5293446 ], [ 70.1432124, 22.5286986 ], [ 70.1434704, 22.5263797 ], [ 70.1437433, 22.525863 ], [ 70.1437327, 22.5245759 ], [ 70.1435925, 22.5243194 ], [ 70.1427613, 22.5243255 ], [ 70.1427592, 22.5240681 ], [ 70.1444163, 22.5234122 ], [ 70.1457955, 22.5226302 ], [ 70.1460703, 22.5223707 ], [ 70.1471756, 22.5219772 ], [ 70.1470408, 22.5224929 ], [ 70.146907, 22.5230087 ], [ 70.1463528, 22.5230127 ], [ 70.1464929, 22.5232692 ], [ 70.1465014, 22.5242988 ], [ 70.1463655, 22.5245572 ], [ 70.146182, 22.5244701 ], [ 70.146357, 22.5235275 ], [ 70.1458049, 22.5237889 ], [ 70.1456702, 22.5243047 ], [ 70.1452572, 22.5245651 ], [ 70.1452614, 22.52508 ], [ 70.1455384, 22.5250779 ], [ 70.1456293, 22.52465 ], [ 70.1459939, 22.5246475 ], [ 70.1459988, 22.5252436 ], [ 70.1455407, 22.5253353 ], [ 70.1456808, 22.5255918 ], [ 70.146099, 22.5258462 ], [ 70.1461897, 22.5254183 ], [ 70.1466499, 22.5254557 ], [ 70.1473305, 22.5240354 ], [ 70.1476055, 22.5237761 ], [ 70.1477403, 22.5232603 ], [ 70.1480174, 22.5232582 ], [ 70.1478847, 22.5240316 ], [ 70.1476097, 22.5242909 ], [ 70.1474844, 22.5258363 ], [ 70.1466532, 22.5258424 ], [ 70.1466596, 22.5266145 ], [ 70.1472117, 22.5263533 ], [ 70.1473604, 22.5276392 ], [ 70.1472243, 22.5278978 ], [ 70.1466713, 22.5280299 ], [ 70.1458454, 22.5286799 ], [ 70.1460344, 22.5348568 ], [ 70.1457594, 22.5351162 ], [ 70.1456256, 22.535632 ], [ 70.1453474, 22.5355048 ], [ 70.1447932, 22.5355088 ], [ 70.1442421, 22.5358993 ], [ 70.1443993, 22.5382151 ], [ 70.1438493, 22.5387339 ], [ 70.1438578, 22.5397636 ], [ 70.1445543, 22.5401442 ], [ 70.1456637, 22.5402656 ], [ 70.1458104, 22.5412943 ], [ 70.1460896, 22.5415496 ], [ 70.1459898, 22.5461841 ], [ 70.1487705, 22.5473222 ], [ 70.1559792, 22.5476572 ], [ 70.1559663, 22.5461126 ], [ 70.1595711, 22.5463442 ], [ 70.1599949, 22.5473708 ], [ 70.1606913, 22.5477515 ], [ 70.1620771, 22.5477416 ], [ 70.1629106, 22.547993 ], [ 70.1654014, 22.5475893 ], [ 70.1658079, 22.5465566 ], [ 70.1664959, 22.5459076 ], [ 70.1676, 22.5453846 ], [ 70.1682869, 22.5447365 ], [ 70.1684216, 22.5442208 ], [ 70.1689748, 22.5440875 ], [ 70.1699366, 22.5431799 ], [ 70.1707527, 22.5413721 ], [ 70.1717155, 22.5404636 ], [ 70.1730978, 22.5400679 ], [ 70.1732468, 22.5413538 ], [ 70.1747833, 22.5427581 ], [ 70.1753366, 22.5426258 ], [ 70.1752084, 22.5439138 ], [ 70.1750725, 22.5441724 ], [ 70.1725796, 22.5443187 ], [ 70.1723035, 22.5444498 ], [ 70.1721797, 22.5462529 ], [ 70.171907, 22.5467696 ], [ 70.1719113, 22.5472844 ], [ 70.1724698, 22.5477953 ], [ 70.1724741, 22.5483102 ], [ 70.1727535, 22.5485655 ], [ 70.1733296, 22.5511355 ], [ 70.1734696, 22.5512629 ], [ 70.1740251, 22.551388 ], [ 70.1743152, 22.5529304 ], [ 70.1751477, 22.5530525 ], [ 70.1754271, 22.5533081 ], [ 70.1759824, 22.5534332 ], [ 70.1766943, 22.5557447 ], [ 70.1766987, 22.5562595 ], [ 70.1769803, 22.5567724 ], [ 70.177002, 22.5593464 ], [ 70.1772836, 22.5598594 ], [ 70.1773033, 22.5621759 ], [ 70.1768967, 22.5632086 ], [ 70.1774511, 22.5632047 ], [ 70.1774534, 22.5634621 ], [ 70.176899, 22.5634661 ], [ 70.1773229, 22.5644927 ], [ 70.1773252, 22.5647501 ], [ 70.1769143, 22.565268 ], [ 70.1777457, 22.5652619 ], [ 70.1777501, 22.5657768 ], [ 70.1771957, 22.5657807 ], [ 70.1772001, 22.5662956 ], [ 70.1777535, 22.5661623 ], [ 70.1783044, 22.5657726 ], [ 70.1780383, 22.5670618 ], [ 70.1785926, 22.5670576 ], [ 70.1790166, 22.5680843 ], [ 70.1792959, 22.5683396 ], [ 70.1793025, 22.5691119 ], [ 70.1799992, 22.5694925 ], [ 70.1806972, 22.5701313 ], [ 70.1812581, 22.5708996 ], [ 70.1816819, 22.571797 ], [ 70.1833439, 22.5716566 ], [ 70.1833483, 22.5721714 ], [ 70.1827939, 22.5721754 ], [ 70.1830744, 22.572559 ], [ 70.1836287, 22.5725549 ], [ 70.1843333, 22.5739661 ], [ 70.1850323, 22.574604 ], [ 70.1864225, 22.5751086 ], [ 70.1868455, 22.576007 ], [ 70.1869858, 22.5761342 ], [ 70.1871249, 22.5762623 ], [ 70.1874042, 22.5765176 ], [ 70.1879697, 22.5778006 ], [ 70.1883893, 22.5781833 ], [ 70.189222, 22.5783062 ], [ 70.1893645, 22.57882 ], [ 70.1906267, 22.5804834 ], [ 70.1914583, 22.5804774 ], [ 70.191879, 22.5811183 ], [ 70.1924378, 22.581629 ], [ 70.1925813, 22.5821427 ], [ 70.191752, 22.5824063 ], [ 70.1917631, 22.5836934 ], [ 70.1923174, 22.5836892 ], [ 70.1923197, 22.5839467 ], [ 70.1909359, 22.5842143 ], [ 70.1910829, 22.585243 ], [ 70.1917886, 22.5866531 ], [ 70.192343, 22.586649 ], [ 70.1931702, 22.5861281 ], [ 70.1937234, 22.5859956 ], [ 70.1941498, 22.5872797 ], [ 70.1941543, 22.5877945 ], [ 70.1944359, 22.5883073 ], [ 70.1947264, 22.5898495 ], [ 70.1950058, 22.590105 ], [ 70.1948877, 22.5924228 ], [ 70.1954399, 22.5921612 ], [ 70.195550468980784, 22.593620937499999 ], [ 70.195550468980798, 22.593620937499999 ], [ 70.1955958, 22.5942194 ], [ 70.1953208, 22.5944789 ], [ 70.1954666, 22.59525 ], [ 70.1960211, 22.5952458 ], [ 70.1961702, 22.596532 ], [ 70.196452, 22.5970447 ], [ 70.1964632, 22.5983318 ], [ 70.1953698, 22.6001419 ], [ 70.1955178, 22.6011704 ], [ 70.1960721, 22.6011663 ], [ 70.1960678, 22.6006516 ], [ 70.196345, 22.6006495 ], [ 70.1964875, 22.6011632 ], [ 70.1973282, 22.6021867 ], [ 70.1976121, 22.6029569 ], [ 70.1978916, 22.6032122 ], [ 70.1983157, 22.6041096 ], [ 70.1988712, 22.6042345 ], [ 70.199005, 22.6037187 ], [ 70.199693, 22.6030695 ], [ 70.2016348, 22.6031842 ], [ 70.2017773, 22.6036979 ], [ 70.2023361, 22.6042086 ], [ 70.2023407, 22.6047234 ], [ 70.2019298, 22.6052415 ], [ 70.2013741, 22.6051164 ], [ 70.2010991, 22.6053759 ], [ 70.2002675, 22.6053821 ], [ 70.1997164, 22.6057728 ], [ 70.1997208, 22.6062876 ], [ 70.2002753, 22.6062834 ], [ 70.2002776, 22.6065409 ], [ 70.199723, 22.606545 ], [ 70.1998657, 22.6070589 ], [ 70.1997342, 22.6078321 ], [ 70.2013966, 22.6076905 ], [ 70.2019521, 22.6078155 ], [ 70.2015448, 22.6088482 ], [ 70.2016883, 22.6093621 ], [ 70.2000271, 22.609632 ], [ 70.1998969, 22.6106626 ], [ 70.2004558, 22.6111733 ], [ 70.2007399, 22.6119434 ], [ 70.2006151, 22.6134889 ], [ 70.1997833, 22.6134951 ], [ 70.199926, 22.6140088 ], [ 70.2010417, 22.6147728 ], [ 70.2013278, 22.6158003 ], [ 70.2016074, 22.6160557 ], [ 70.201898, 22.6175981 ], [ 70.2020383, 22.6177253 ], [ 70.2028712, 22.6178482 ], [ 70.2025985, 22.6183651 ], [ 70.2042632, 22.6184809 ], [ 70.2045414, 22.6186079 ], [ 70.2045371, 22.6180931 ], [ 70.2048143, 22.618091 ], [ 70.2048187, 22.6186059 ], [ 70.2056484, 22.6183422 ], [ 70.2053666, 22.6178295 ], [ 70.2059222, 22.6179536 ], [ 70.2067629, 22.6189769 ], [ 70.2073186, 22.619102 ], [ 70.2074613, 22.6196157 ], [ 70.2080203, 22.6201264 ], [ 70.2080249, 22.6206412 ], [ 70.2084435, 22.6208954 ], [ 70.2085771, 22.6203796 ], [ 70.2087151, 22.6202494 ], [ 70.2092685, 22.6201169 ], [ 70.2092639, 22.6196021 ], [ 70.2098185, 22.6195979 ], [ 70.2095344, 22.6188278 ], [ 70.2105112, 22.6195928 ], [ 70.2107952, 22.6203628 ], [ 70.2110748, 22.6206181 ], [ 70.2116406, 22.6219011 ], [ 70.2119201, 22.6221564 ], [ 70.2127744, 22.6247242 ], [ 70.2133539, 22.6275514 ], [ 70.2132225, 22.6283246 ], [ 70.2140532, 22.6281893 ], [ 70.2146032, 22.6276703 ], [ 70.2151579, 22.627666 ], [ 70.2152949, 22.6275367 ], [ 70.2154295, 22.6270209 ], [ 70.216542, 22.6273981 ], [ 70.2170965, 22.627394 ], [ 70.2179239, 22.6268727 ], [ 70.2184784, 22.6268686 ], [ 70.2188905, 22.6264798 ], [ 70.219025, 22.6259638 ], [ 70.2193023, 22.6259617 ], [ 70.2193091, 22.626734 ], [ 70.220142, 22.6268559 ], [ 70.220417, 22.6265964 ], [ 70.2206943, 22.6265943 ], [ 70.2213928, 22.627233 ], [ 70.2219587, 22.6285157 ], [ 70.2222382, 22.628771 ], [ 70.2225268, 22.6300561 ], [ 70.2228065, 22.6303112 ], [ 70.2231042, 22.6326259 ], [ 70.2233838, 22.632881 ], [ 70.2235299, 22.6336523 ], [ 70.2240844, 22.633648 ], [ 70.223823, 22.635452 ], [ 70.2243777, 22.6354478 ], [ 70.2231407, 22.6367444 ], [ 70.223143, 22.6370018 ], [ 70.2232832, 22.637129 ], [ 70.2238391, 22.6372539 ], [ 70.2238436, 22.6377686 ], [ 70.2243981, 22.6377644 ], [ 70.2244027, 22.6382793 ], [ 70.2249574, 22.6382751 ], [ 70.2251001, 22.6387888 ], [ 70.2253796, 22.6390441 ], [ 70.2253911, 22.640331 ], [ 70.2255314, 22.6404582 ], [ 70.226087, 22.6405832 ], [ 70.2260895, 22.6408406 ], [ 70.2252598, 22.6411044 ], [ 70.2252643, 22.6416191 ], [ 70.2258166, 22.6413575 ], [ 70.2258213, 22.6418723 ], [ 70.2263735, 22.6416108 ], [ 70.2265185, 22.6423819 ], [ 70.22708, 22.6431498 ], [ 70.2270823, 22.6434072 ], [ 70.2268073, 22.6436667 ], [ 70.2268096, 22.6439241 ], [ 70.2269498, 22.6440513 ], [ 70.2275045, 22.6440472 ], [ 70.2279258, 22.6446879 ], [ 70.2280762, 22.6459738 ], [ 70.2286321, 22.6460978 ], [ 70.2287714, 22.6462259 ], [ 70.2293397, 22.6477661 ], [ 70.2297608, 22.6482777 ], [ 70.2292063, 22.6482819 ], [ 70.2292131, 22.6490541 ], [ 70.2300428, 22.6487905 ], [ 70.2301878, 22.6495616 ], [ 70.230747, 22.6500721 ], [ 70.230754, 22.6508444 ], [ 70.2306181, 22.6511027 ], [ 70.2311726, 22.6510986 ], [ 70.2311749, 22.651356 ], [ 70.2306204, 22.6513601 ], [ 70.2313223, 22.6523845 ], [ 70.2313339, 22.6536716 ], [ 70.2314741, 22.6537986 ], [ 70.2325847, 22.6539194 ], [ 70.2323142, 22.6546937 ], [ 70.2317595, 22.6546979 ], [ 70.231764, 22.6552127 ], [ 70.2331473, 22.6548154 ], [ 70.2332843, 22.6546862 ], [ 70.2331416, 22.6541725 ], [ 70.2336962, 22.6541681 ], [ 70.2334096, 22.6531407 ], [ 70.2339644, 22.6531364 ], [ 70.2343707, 22.6521037 ], [ 70.2351957, 22.651325 ], [ 70.2353303, 22.6508092 ], [ 70.235885, 22.6508049 ], [ 70.2360186, 22.6502889 ], [ 70.2362936, 22.6500294 ], [ 70.2364282, 22.6495136 ], [ 70.2355962, 22.64952 ], [ 70.2355937, 22.6492626 ], [ 70.2361484, 22.6492583 ], [ 70.2362821, 22.6487425 ], [ 70.23642, 22.6486123 ], [ 70.2372531, 22.6487349 ], [ 70.2366892, 22.6477096 ], [ 70.2372439, 22.6477053 ], [ 70.2375073, 22.6461587 ], [ 70.2380621, 22.6461545 ], [ 70.2379205, 22.645898 ], [ 70.2381817, 22.6440942 ], [ 70.2381586, 22.64152 ], [ 70.2384221, 22.6399734 ], [ 70.2381426, 22.6397183 ], [ 70.2381401, 22.6394609 ], [ 70.2384151, 22.6392014 ], [ 70.2388224, 22.6381685 ], [ 70.2392401, 22.6384227 ], [ 70.2395221, 22.6389353 ], [ 70.2402227, 22.6397022 ], [ 70.2396682, 22.6397064 ], [ 70.2395336, 22.6402224 ], [ 70.2389836, 22.6407415 ], [ 70.23885, 22.6412573 ], [ 70.2394047, 22.641253 ], [ 70.2394185, 22.6427975 ], [ 70.2399744, 22.6429215 ], [ 70.2403932, 22.6433048 ], [ 70.2403956, 22.6435622 ], [ 70.2401207, 22.6438217 ], [ 70.2399918, 22.6448525 ], [ 70.2405463, 22.6448481 ], [ 70.2404094, 22.6451067 ], [ 70.2404142, 22.6456213 ], [ 70.2405544, 22.6457485 ], [ 70.2413875, 22.6458714 ], [ 70.2413921, 22.646386 ], [ 70.2419456, 22.6462526 ], [ 70.2429099, 22.6456021 ], [ 70.2426117, 22.6432876 ], [ 70.2427417, 22.6422569 ], [ 70.2438543, 22.642634 ], [ 70.2445576, 22.6437873 ], [ 70.2455368, 22.6446803 ], [ 70.2465126, 22.6453167 ], [ 70.2466565, 22.6458304 ], [ 70.2472112, 22.645826 ], [ 70.2475047, 22.6476257 ], [ 70.2480605, 22.6477497 ], [ 70.2484818, 22.6483904 ], [ 70.249179, 22.6487706 ], [ 70.250011, 22.6487642 ], [ 70.2502919, 22.6491486 ], [ 70.2497372, 22.6491528 ], [ 70.2500216, 22.649923 ], [ 70.2494669, 22.6499273 ], [ 70.2494762, 22.6509568 ], [ 70.2528052, 22.6510591 ], [ 70.2542036, 22.6523354 ], [ 70.2547606, 22.6525884 ], [ 70.2551819, 22.6532292 ], [ 70.2553304, 22.6542575 ], [ 70.2564397, 22.6542488 ], [ 70.2564444, 22.6547636 ], [ 70.256998, 22.6546302 ], [ 70.2572788, 22.6550146 ], [ 70.2567241, 22.655019 ], [ 70.256317, 22.6560519 ], [ 70.2561998, 22.6583696 ], [ 70.255644, 22.6582446 ], [ 70.2545417, 22.6590256 ], [ 70.2528789, 22.6591677 ], [ 70.2527491, 22.6601985 ], [ 70.2519333, 22.6620069 ], [ 70.2516631, 22.6627812 ], [ 70.2508566, 22.665619 ], [ 70.2505816, 22.6658787 ], [ 70.2504527, 22.6669094 ], [ 70.2518407, 22.6670267 ], [ 70.2543438, 22.6677795 ], [ 70.2546249, 22.6681637 ], [ 70.2535177, 22.6684299 ], [ 70.2536582, 22.6686863 ], [ 70.2536653, 22.6694584 ], [ 70.2546423, 22.6700938 ], [ 70.2552017, 22.6706043 ], [ 70.2574194, 22.6704588 ], [ 70.2572781, 22.6702023 ], [ 70.257128, 22.6689165 ], [ 70.2585183, 22.6692911 ], [ 70.2596279, 22.6692824 ], [ 70.2597649, 22.6691532 ], [ 70.259897, 22.6683798 ], [ 70.2601743, 22.6683777 ], [ 70.2601813, 22.6691499 ], [ 70.260736, 22.6691456 ], [ 70.2607313, 22.6686308 ], [ 70.2610099, 22.6687568 ], [ 70.2615646, 22.6687525 ], [ 70.2622635, 22.6693909 ], [ 70.2621323, 22.6701641 ], [ 70.2610205, 22.6699156 ], [ 70.2610252, 22.6704304 ], [ 70.2604705, 22.6704348 ], [ 70.2604752, 22.6709496 ], [ 70.261031, 22.6710734 ], [ 70.2611705, 22.6712015 ], [ 70.2610369, 22.6717173 ], [ 70.2607585, 22.6715903 ], [ 70.2599263, 22.6715969 ], [ 70.2590989, 22.6721182 ], [ 70.2588216, 22.6721205 ], [ 70.2585419, 22.6718653 ], [ 70.2571528, 22.6716187 ], [ 70.2563265, 22.6722692 ], [ 70.2561919, 22.6727852 ], [ 70.2557812, 22.6733032 ], [ 70.2543896, 22.6727992 ], [ 70.2542575, 22.6735725 ], [ 70.2531643, 22.675383 ], [ 70.2528963, 22.6764147 ], [ 70.252922, 22.6792461 ], [ 70.2532042, 22.6797589 ], [ 70.2540433, 22.6805245 ], [ 70.2540479, 22.6810394 ], [ 70.2541883, 22.6811666 ], [ 70.2547441, 22.6812913 ], [ 70.2551692, 22.6823176 ], [ 70.2551787, 22.6833472 ], [ 70.2555986, 22.6837296 ], [ 70.2567082, 22.6837209 ], [ 70.2568453, 22.6835916 ], [ 70.2567024, 22.6830779 ], [ 70.2578131, 22.6831974 ], [ 70.2585026, 22.6828063 ], [ 70.2584979, 22.6822915 ], [ 70.2583573, 22.6820352 ], [ 70.259743, 22.6818952 ], [ 70.2602955, 22.6816334 ], [ 70.2619598, 22.6816204 ], [ 70.2626421, 22.6804569 ], [ 70.2627766, 22.6799411 ], [ 70.2636088, 22.6799345 ], [ 70.2634742, 22.6804504 ], [ 70.2638933, 22.6807045 ], [ 70.264022, 22.6796738 ], [ 70.2644349, 22.6792839 ], [ 70.2649885, 22.6791513 ], [ 70.2649932, 22.6796661 ], [ 70.2663779, 22.6793977 ], [ 70.265966, 22.679916 ], [ 70.2661123, 22.6806869 ], [ 70.2666648, 22.6804251 ], [ 70.2666695, 22.68094 ], [ 70.2672242, 22.6809356 ], [ 70.2670896, 22.6814516 ], [ 70.2668146, 22.6817111 ], [ 70.2665444, 22.6824854 ], [ 70.2665515, 22.6832577 ], [ 70.2666918, 22.6833849 ], [ 70.2678014, 22.683376 ], [ 70.2690386, 22.6822083 ], [ 70.2693111, 22.6816912 ], [ 70.2691635, 22.6806629 ], [ 70.2702754, 22.6809114 ], [ 70.2701433, 22.6816848 ], [ 70.2702837, 22.6818118 ], [ 70.2708384, 22.6818075 ], [ 70.2709755, 22.6816782 ], [ 70.2709707, 22.6811634 ], [ 70.2706886, 22.6806508 ], [ 70.2708135, 22.6791051 ], [ 70.2716457, 22.6790985 ], [ 70.2715255, 22.681159 ], [ 70.2716659, 22.681286 ], [ 70.2727766, 22.6814064 ], [ 70.2727814, 22.6819212 ], [ 70.2725028, 22.6817942 ], [ 70.2719481, 22.6817986 ], [ 70.2716717, 22.6819299 ], [ 70.2715374, 22.6824459 ], [ 70.2712624, 22.6827056 ], [ 70.2711289, 22.6832214 ], [ 70.2697443, 22.6834898 ], [ 70.2694741, 22.6842643 ], [ 70.2691955, 22.6841373 ], [ 70.2683644, 22.684273 ], [ 70.2685098, 22.6850441 ], [ 70.2692074, 22.6854244 ], [ 70.270049, 22.6864472 ], [ 70.2708823, 22.6865699 ], [ 70.2710254, 22.6870836 ], [ 70.2711656, 22.6872106 ], [ 70.2739409, 22.6873178 ], [ 70.273804, 22.6875763 ], [ 70.2739503, 22.6883474 ], [ 70.2736717, 22.6882204 ], [ 70.27173, 22.6882359 ], [ 70.2708931, 22.6877277 ], [ 70.2703334, 22.6872172 ], [ 70.2694965, 22.686709 ], [ 70.2678311, 22.6865941 ], [ 70.2675464, 22.6858241 ], [ 70.2667156, 22.6859589 ], [ 70.2658868, 22.686352 ], [ 70.2661762, 22.6876368 ], [ 70.2667298, 22.6875032 ], [ 70.2674262, 22.6878844 ], [ 70.2672951, 22.6886576 ], [ 70.2664654, 22.6889216 ], [ 70.2660583, 22.6899545 ], [ 70.2660724, 22.6914988 ], [ 70.2662127, 22.691626 ], [ 70.2667676, 22.6916217 ], [ 70.2671868, 22.692005 ], [ 70.2674737, 22.6930324 ], [ 70.2676139, 22.6931594 ], [ 70.2687235, 22.6931507 ], [ 70.2703822, 22.6924945 ], [ 70.2702454, 22.6927528 ], [ 70.2702501, 22.6932677 ], [ 70.2703905, 22.6933949 ], [ 70.2709464, 22.6935196 ], [ 70.2709488, 22.693777 ], [ 70.2703939, 22.6937814 ], [ 70.2703988, 22.6942962 ], [ 70.271787, 22.6944134 ], [ 70.2739991, 22.6936236 ], [ 70.2744088, 22.6929772 ], [ 70.2749564, 22.6922006 ], [ 70.2756445, 22.6915512 ], [ 70.2761981, 22.6914185 ], [ 70.2761934, 22.6909037 ], [ 70.276747, 22.69077 ], [ 70.2775744, 22.6902486 ], [ 70.2789494, 22.6889505 ], [ 70.2797768, 22.6884291 ], [ 70.2814376, 22.6880301 ], [ 70.2814328, 22.6875155 ], [ 70.2836472, 22.6869829 ], [ 70.2833771, 22.6877572 ], [ 70.282821, 22.6876324 ], [ 70.282546, 22.6878921 ], [ 70.2817126, 22.6877706 ], [ 70.2819947, 22.6882832 ], [ 70.28144, 22.6882875 ], [ 70.2815831, 22.6888012 ], [ 70.2811722, 22.6893195 ], [ 70.2797876, 22.6895878 ], [ 70.2797923, 22.6901027 ], [ 70.278684, 22.6902397 ], [ 70.2784077, 22.6903712 ], [ 70.2780008, 22.6914041 ], [ 70.2777258, 22.6916636 ], [ 70.2775924, 22.6921796 ], [ 70.2781471, 22.6921752 ], [ 70.2781495, 22.6924325 ], [ 70.277041, 22.6925697 ], [ 70.2764897, 22.6929607 ], [ 70.2763554, 22.6934765 ], [ 70.2759445, 22.6939948 ], [ 70.2753873, 22.6937417 ], [ 70.275392, 22.6942565 ], [ 70.2748348, 22.6940034 ], [ 70.2748398, 22.6945183 ], [ 70.2742849, 22.6945228 ], [ 70.2742896, 22.6950375 ], [ 70.2729038, 22.6951768 ], [ 70.2726275, 22.6953081 ], [ 70.2726347, 22.6960804 ], [ 70.2701391, 22.6962285 ], [ 70.2682019, 22.6967587 ], [ 70.2671006, 22.6976687 ], [ 70.2671078, 22.698441 ], [ 70.2676602, 22.6981792 ], [ 70.2678031, 22.6986929 ], [ 70.2687782, 22.6990709 ], [ 70.2693378, 22.6995812 ], [ 70.2701699, 22.6995746 ], [ 70.271007, 22.7000828 ], [ 70.2726691, 22.6998122 ], [ 70.2732215, 22.6995504 ], [ 70.2739087, 22.6989018 ], [ 70.274179, 22.6981274 ], [ 70.2745933, 22.6978668 ], [ 70.274598, 22.6983814 ], [ 70.2759862, 22.6984986 ], [ 70.2762626, 22.6983682 ], [ 70.2762673, 22.698883 ], [ 70.2754374, 22.6991471 ], [ 70.275303, 22.6996631 ], [ 70.2748921, 22.7001811 ], [ 70.2732323, 22.7007092 ], [ 70.273237, 22.701224 ], [ 70.2735134, 22.7010926 ], [ 70.274623, 22.7010838 ], [ 70.274904, 22.701468 ], [ 70.2688042, 22.7019023 ], [ 70.267135, 22.7014007 ], [ 70.2665754, 22.7008902 ], [ 70.2649097, 22.7007751 ], [ 70.2648059, 22.7046373 ], [ 70.2650857, 22.7048925 ], [ 70.2650904, 22.7054073 ], [ 70.2653703, 22.7056625 ], [ 70.2653797, 22.7066922 ], [ 70.26552, 22.7068192 ], [ 70.2657974, 22.7068171 ], [ 70.2660726, 22.7065574 ], [ 70.2663501, 22.7065553 ], [ 70.2666298, 22.7068105 ], [ 70.2677396, 22.7068016 ], [ 70.2680193, 22.7070569 ], [ 70.2688539, 22.7073077 ], [ 70.2696863, 22.7073011 ], [ 70.2705128, 22.7066513 ], [ 70.2705175, 22.7071662 ], [ 70.2721798, 22.7068955 ], [ 70.271907, 22.7074126 ], [ 70.273568, 22.7070127 ], [ 70.2738432, 22.7067532 ], [ 70.2741206, 22.7067509 ], [ 70.2744003, 22.7070061 ], [ 70.2749564, 22.7071308 ], [ 70.2745445, 22.7076491 ], [ 70.2745493, 22.7081637 ], [ 70.2749719, 22.7088035 ], [ 70.2760841, 22.709052 ], [ 70.2763639, 22.7093072 ], [ 70.2771987, 22.709558 ], [ 70.2783083, 22.7095491 ], [ 70.2794134, 22.7090254 ], [ 70.2799611, 22.7082488 ], [ 70.2805158, 22.7082444 ], [ 70.2831355, 22.7065506 ], [ 70.2832699, 22.7060346 ], [ 70.2843759, 22.7056392 ], [ 70.2852011, 22.7048604 ], [ 70.2865835, 22.7043344 ], [ 70.2868585, 22.7040749 ], [ 70.2893457, 22.7030252 ], [ 70.2899004, 22.7030206 ], [ 70.2904614, 22.70366 ], [ 70.289354, 22.7039265 ], [ 70.2893589, 22.7044412 ], [ 70.2877003, 22.7050977 ], [ 70.2868753, 22.7058766 ], [ 70.2852179, 22.7066621 ], [ 70.2843928, 22.707441 ], [ 70.2832879, 22.7079647 ], [ 70.2824616, 22.7086154 ], [ 70.2824663, 22.7091301 ], [ 70.2813589, 22.7093964 ], [ 70.2813639, 22.7099112 ], [ 70.2802563, 22.7101775 ], [ 70.2801219, 22.7106935 ], [ 70.279711, 22.7112115 ], [ 70.2791575, 22.7113442 ], [ 70.278331, 22.7119949 ], [ 70.2784716, 22.7122512 ], [ 70.2786443, 22.7158535 ], [ 70.2791992, 22.7158492 ], [ 70.2792064, 22.7166213 ], [ 70.2800388, 22.7166147 ], [ 70.2796269, 22.7171329 ], [ 70.2799259, 22.7194472 ], [ 70.2793782, 22.7202238 ], [ 70.2793877, 22.7212535 ], [ 70.2785793, 22.7238341 ], [ 70.2784625, 22.7261518 ], [ 70.2820781, 22.7270233 ], [ 70.2822176, 22.7271514 ], [ 70.2823616, 22.7276649 ], [ 70.2862486, 22.7278911 ], [ 70.286251, 22.7281486 ], [ 70.2854187, 22.7281554 ], [ 70.2851508, 22.7291871 ], [ 70.2845958, 22.7291915 ], [ 70.2843111, 22.7284217 ], [ 70.283481, 22.7286857 ], [ 70.2841815, 22.7294523 ], [ 70.2846043, 22.7300921 ], [ 70.2859928, 22.73021 ], [ 70.2861359, 22.7307237 ], [ 70.2871161, 22.7316163 ], [ 70.2876721, 22.7317409 ], [ 70.2878152, 22.7322546 ], [ 70.2879556, 22.7323818 ], [ 70.2887893, 22.7325043 ], [ 70.2889324, 22.733018 ], [ 70.2893516, 22.733272 ], [ 70.2893466, 22.7327571 ], [ 70.2896243, 22.7327549 ], [ 70.2897674, 22.7332686 ], [ 70.2901877, 22.7336509 ], [ 70.2907426, 22.7336464 ], [ 70.2908796, 22.7335169 ], [ 70.29087, 22.7324874 ], [ 70.291008, 22.7323572 ], [ 70.2915617, 22.7322243 ], [ 70.2912892, 22.7327415 ], [ 70.2918441, 22.7327369 ], [ 70.2917144, 22.7337677 ], [ 70.2919943, 22.7340229 ], [ 70.2919993, 22.7345375 ], [ 70.2921397, 22.7346647 ], [ 70.2929722, 22.7346579 ], [ 70.2931093, 22.7345286 ], [ 70.2932436, 22.7340127 ], [ 70.2937974, 22.733879 ], [ 70.2939344, 22.7337498 ], [ 70.2939271, 22.7329775 ], [ 70.2937864, 22.7327212 ], [ 70.2924003, 22.7328607 ], [ 70.2921215, 22.7327346 ], [ 70.2919775, 22.7322211 ], [ 70.2914177, 22.7317106 ], [ 70.2912746, 22.7311971 ], [ 70.2923882, 22.7315738 ], [ 70.2929431, 22.7315693 ], [ 70.2932181, 22.7313096 ], [ 70.2937732, 22.7313051 ], [ 70.2939102, 22.7311758 ], [ 70.2939029, 22.7304035 ], [ 70.2937634, 22.7302756 ], [ 70.2942227, 22.7302312 ], [ 70.2943196, 22.7304001 ], [ 70.2947379, 22.7306541 ], [ 70.2944701, 22.7316861 ], [ 70.2947645, 22.7334855 ], [ 70.2950444, 22.7337407 ], [ 70.2950516, 22.734513 ], [ 70.295192, 22.73464 ], [ 70.2960246, 22.7346333 ], [ 70.2963009, 22.7345027 ], [ 70.2964464, 22.7352739 ], [ 70.2967263, 22.735529 ], [ 70.296736, 22.7365585 ], [ 70.2972958, 22.7370688 ], [ 70.2971697, 22.738357 ], [ 70.2977246, 22.7383525 ], [ 70.2984374, 22.740406 ], [ 70.2987173, 22.7406611 ], [ 70.2992869, 22.7422009 ], [ 70.2999873, 22.7428384 ], [ 70.3005447, 22.7430913 ], [ 70.301804, 22.7442398 ], [ 70.3026462, 22.7452625 ], [ 70.3029286, 22.7457751 ], [ 70.303629, 22.7464126 ], [ 70.3044627, 22.7465349 ], [ 70.3044676, 22.7470497 ], [ 70.3053015, 22.747171 ], [ 70.3055814, 22.7474262 ], [ 70.3092, 22.7485555 ], [ 70.3090756, 22.7501009 ], [ 70.309216, 22.7502279 ], [ 70.3103285, 22.7504763 ], [ 70.3108885, 22.7509866 ], [ 70.3119027, 22.7509376 ], [ 70.3119998, 22.7511066 ], [ 70.3122773, 22.7511043 ], [ 70.3122748, 22.7508469 ], [ 70.3119949, 22.7505917 ], [ 70.31243840434675, 22.750588077381913 ], [ 70.3128274, 22.7505849 ], [ 70.3126906, 22.7508435 ], [ 70.312698, 22.7516156 ], [ 70.3138577, 22.7522086 ], [ 70.3141077, 22.7539208 ], [ 70.3143903, 22.7544334 ], [ 70.3148316, 22.7570038 ], [ 70.3153867, 22.7569992 ], [ 70.3155324, 22.7577702 ], [ 70.3156728, 22.7578974 ], [ 70.3162279, 22.7578928 ], [ 70.3167806, 22.7576309 ], [ 70.3174678, 22.756982 ], [ 70.3173196, 22.7559537 ], [ 70.3178758, 22.7560773 ], [ 70.3180128, 22.7559478 ], [ 70.3180079, 22.7554332 ], [ 70.3184211, 22.7550431 ], [ 70.3200862, 22.7550295 ], [ 70.3209212, 22.7552799 ], [ 70.3212013, 22.755535 ], [ 70.3217562, 22.7555303 ], [ 70.3224434, 22.7548817 ], [ 70.3232661, 22.7538452 ], [ 70.3236766, 22.7531977 ], [ 70.3249635, 22.7526316 ], [ 70.3251988, 22.7527995 ], [ 70.3253455, 22.7535706 ], [ 70.3260811, 22.7533946 ], [ 70.3270168, 22.7541998 ], [ 70.3272944, 22.7541973 ], [ 70.3275681, 22.7538095 ], [ 70.3270119, 22.7536849 ], [ 70.3262691, 22.753217 ], [ 70.3258906, 22.7525364 ], [ 70.3251516, 22.752454 ], [ 70.3253281, 22.7517688 ], [ 70.3261595, 22.7516328 ], [ 70.326849, 22.7512413 ], [ 70.3269833, 22.7507254 ], [ 70.3275383, 22.7507208 ], [ 70.3273891, 22.7496923 ], [ 70.326966, 22.7489236 ], [ 70.3264109, 22.7489282 ], [ 70.326406, 22.7484135 ], [ 70.3247371, 22.7480408 ], [ 70.3244608, 22.7481722 ], [ 70.3244559, 22.7476573 ], [ 70.3233434, 22.7474092 ], [ 70.3233383, 22.7468943 ], [ 70.3225033, 22.7466439 ], [ 70.3222011, 22.7440722 ], [ 70.3220172, 22.7439853 ], [ 70.321966882357174, 22.743209048364111 ], [ 70.3219062, 22.7422729 ], [ 70.3216288, 22.7422752 ], [ 70.321635805712305, 22.743009048364112 ], [ 70.321646, 22.7440769 ], [ 70.3218289, 22.7441629 ], [ 70.3218017, 22.7458775 ], [ 70.3220816, 22.7461327 ], [ 70.3222308, 22.747161 ], [ 70.3216745, 22.7470365 ], [ 70.3213946, 22.7467813 ], [ 70.3197307, 22.7469242 ], [ 70.3197257, 22.7464096 ], [ 70.318337, 22.7462918 ], [ 70.3180607, 22.7464232 ], [ 70.3176564, 22.7477137 ], [ 70.3178031, 22.7484846 ], [ 70.3166904, 22.7482364 ], [ 70.3171013, 22.7477182 ], [ 70.3175058, 22.7464279 ], [ 70.3164869, 22.7460903 ], [ 70.3163908, 22.7459221 ], [ 70.3158358, 22.7459267 ], [ 70.3158382, 22.7461841 ], [ 70.3162986, 22.746268 ], [ 70.3164031, 22.7472092 ], [ 70.315848, 22.7472138 ], [ 70.3158407, 22.7464415 ], [ 70.315007, 22.7463192 ], [ 70.3138908, 22.7456853 ], [ 70.3139836, 22.7455148 ], [ 70.3144432, 22.7454234 ], [ 70.3144358, 22.7446511 ], [ 70.3136057, 22.7449155 ], [ 70.313512, 22.745085 ], [ 70.3133296, 22.7450459 ], [ 70.3124922, 22.7445381 ], [ 70.3119335, 22.7441569 ], [ 70.3116485, 22.7433871 ], [ 70.3099798, 22.7430142 ], [ 70.309972247601749, 22.743009048364112 ], [ 70.3094211, 22.7426331 ], [ 70.3094162, 22.7421183 ], [ 70.3088613, 22.7421228 ], [ 70.3088564, 22.741608 ], [ 70.3083013, 22.7416125 ], [ 70.3084347, 22.7410966 ], [ 70.3087097, 22.7408371 ], [ 70.3085543, 22.7390363 ], [ 70.308093, 22.7389516 ], [ 70.307997, 22.7387836 ], [ 70.3085519, 22.7387791 ], [ 70.3085445, 22.7380068 ], [ 70.3071559, 22.7378891 ], [ 70.3066022, 22.7380227 ], [ 70.3061756, 22.7369966 ], [ 70.3057549, 22.7364852 ], [ 70.3027038, 22.7366383 ], [ 70.3021463, 22.7363854 ], [ 70.3013077, 22.7357492 ], [ 70.301303, 22.7352344 ], [ 70.3001941, 22.7353716 ], [ 70.2990805, 22.7349951 ], [ 70.2987885, 22.7334528 ], [ 70.2979535, 22.7332022 ], [ 70.2978095, 22.7326885 ], [ 70.2971091, 22.7319221 ], [ 70.2965528, 22.7317974 ], [ 70.2954343, 22.7309061 ], [ 70.2954296, 22.7303912 ], [ 70.2946908, 22.7303086 ], [ 70.2944109, 22.7300535 ], [ 70.2933287, 22.7283489 ], [ 70.2929008, 22.7270652 ], [ 70.2920671, 22.7269429 ], [ 70.2915086, 22.7265617 ], [ 70.2912238, 22.7257917 ], [ 70.2903914, 22.7257985 ], [ 70.290681, 22.7270832 ], [ 70.2912359, 22.7270786 ], [ 70.2912408, 22.7275935 ], [ 70.2898498, 22.7272181 ], [ 70.2845778, 22.7272606 ], [ 70.2792926, 22.7258877 ], [ 70.2796748, 22.7222809 ], [ 70.2802202, 22.7212467 ], [ 70.280213, 22.7204746 ], [ 70.280488, 22.7202149 ], [ 70.2806224, 22.7196989 ], [ 70.2808999, 22.7196969 ], [ 70.2807751, 22.7212423 ], [ 70.2814752, 22.7218798 ], [ 70.2823064, 22.7217449 ], [ 70.2821552, 22.7204589 ], [ 70.2824279, 22.719942 ], [ 70.2826908, 22.7183954 ], [ 70.282966, 22.7181357 ], [ 70.2830836, 22.715818 ], [ 70.2839159, 22.7158114 ], [ 70.2840662, 22.7170972 ], [ 70.2846379, 22.7188946 ], [ 70.2852024, 22.7199197 ], [ 70.2856215, 22.7201737 ], [ 70.2860276, 22.7191408 ], [ 70.2863026, 22.7188811 ], [ 70.286293, 22.7178517 ], [ 70.2865632, 22.7170771 ], [ 70.2869775, 22.7168165 ], [ 70.2868721, 22.7204211 ], [ 70.2871542, 22.7209337 ], [ 70.2873032, 22.721962 ], [ 70.2878592, 22.7220858 ], [ 70.2881391, 22.722341 ], [ 70.2889715, 22.7223344 ], [ 70.2892478, 22.7222039 ], [ 70.2893933, 22.7229749 ], [ 70.2895338, 22.7231021 ], [ 70.2917534, 22.7230841 ], [ 70.2918904, 22.7229548 ], [ 70.2920225, 22.7221815 ], [ 70.2925774, 22.7221769 ], [ 70.2925821, 22.7226918 ], [ 70.2934158, 22.7228133 ], [ 70.2936957, 22.7230684 ], [ 70.2942506, 22.7230639 ], [ 70.2943877, 22.7229346 ], [ 70.294522, 22.7224187 ], [ 70.2953544, 22.7224118 ], [ 70.2953665, 22.7236989 ], [ 70.2961977, 22.723563 ], [ 70.2968872, 22.7231718 ], [ 70.2968825, 22.722657 ], [ 70.2974324, 22.7221376 ], [ 70.29743, 22.7218802 ], [ 70.2970095, 22.7213688 ], [ 70.2978443, 22.7216196 ], [ 70.2979582, 22.7190444 ], [ 70.2982308, 22.7185273 ], [ 70.2982236, 22.7177551 ], [ 70.2976613, 22.7169875 ], [ 70.297791, 22.7159567 ], [ 70.2972361, 22.7159613 ], [ 70.2973646, 22.7149305 ], [ 70.2976396, 22.714671 ], [ 70.297774, 22.714155 ], [ 70.2997173, 22.7142675 ], [ 70.3005521, 22.7145181 ], [ 70.3027715, 22.7145001 ], [ 70.3038777, 22.7141053 ], [ 70.3046906, 22.7120393 ], [ 70.3055228, 22.7120325 ], [ 70.3055252, 22.71229 ], [ 70.3049703, 22.7122945 ], [ 70.3048482, 22.7140974 ], [ 70.3045831, 22.7153867 ], [ 70.3047235, 22.7155137 ], [ 70.3052784, 22.7155092 ], [ 70.3055594, 22.7158936 ], [ 70.3050045, 22.7158982 ], [ 70.3053236, 22.7202714 ], [ 70.3044899, 22.7201491 ], [ 70.3042149, 22.7204088 ], [ 70.3036613, 22.7205424 ], [ 70.3039435, 22.721055 ], [ 70.3033886, 22.7210596 ], [ 70.3033935, 22.7215744 ], [ 70.3022873, 22.721969 ], [ 70.301736, 22.7223601 ], [ 70.3017507, 22.7239044 ], [ 70.3023056, 22.7238998 ], [ 70.3027409, 22.7259558 ], [ 70.3035831, 22.7269785 ], [ 70.3037271, 22.7274922 ], [ 70.3051168, 22.7277382 ], [ 70.305265, 22.7287666 ], [ 70.3045742, 22.7290297 ], [ 70.3042869, 22.7280025 ], [ 70.3031758, 22.7278823 ], [ 70.3020575, 22.7269909 ], [ 70.3023275, 22.7262164 ], [ 70.3017726, 22.726221 ], [ 70.301478, 22.7244215 ], [ 70.3006432, 22.7241709 ], [ 70.3003512, 22.7226288 ], [ 70.2997963, 22.7226334 ], [ 70.2992559, 22.7241822 ], [ 70.2984236, 22.724189 ], [ 70.2983037, 22.7262493 ], [ 70.2978953, 22.7270248 ], [ 70.2970641, 22.7271597 ], [ 70.2965128, 22.7275508 ], [ 70.2966534, 22.727807 ], [ 70.2966583, 22.7283219 ], [ 70.2970811, 22.7289616 ], [ 70.2976373, 22.7290862 ], [ 70.2975029, 22.7296022 ], [ 70.2976615, 22.7316602 ], [ 70.2982153, 22.7315266 ], [ 70.2983523, 22.7313971 ], [ 70.2986201, 22.7303653 ], [ 70.2990344, 22.7301045 ], [ 70.2989, 22.7306205 ], [ 70.299049, 22.7316488 ], [ 70.2996039, 22.7316443 ], [ 70.2997469, 22.732158 ], [ 70.3004474, 22.7327955 ], [ 70.3012846, 22.7333035 ], [ 70.3023946, 22.7332945 ], [ 70.3026696, 22.7330348 ], [ 70.3046109, 22.7328906 ], [ 70.3047441, 22.7323748 ], [ 70.3052918, 22.731598 ], [ 70.3051463, 22.7308269 ], [ 70.3056999, 22.7306933 ], [ 70.3058369, 22.730564 ], [ 70.3058322, 22.7300491 ], [ 70.3054115, 22.7295377 ], [ 70.3048566, 22.7295423 ], [ 70.3052243, 22.7291121 ], [ 70.3056878, 22.7294064 ], [ 70.3065215, 22.7295286 ], [ 70.3069518, 22.7310696 ], [ 70.3072317, 22.7313247 ], [ 70.3073757, 22.7318384 ], [ 70.3093183, 22.7318225 ], [ 70.3087706, 22.7325993 ], [ 70.3096018, 22.7324632 ], [ 70.3097388, 22.732334 ], [ 70.3100064, 22.731302 ], [ 70.3098658, 22.7310457 ], [ 70.3090335, 22.7310525 ], [ 70.3091667, 22.7305368 ], [ 70.3098548, 22.729887 ], [ 70.3106872, 22.7298802 ], [ 70.311389, 22.7307759 ], [ 70.3115356, 22.731547 ], [ 70.3120905, 22.7315424 ], [ 70.3124, 22.732827861431868 ], [ 70.3125235, 22.7333408 ], [ 70.3124073, 22.7356583 ], [ 70.3126, 22.73562443958539 ], [ 70.3134203, 22.7354803 ], [ 70.3140784, 22.7362877 ], [ 70.3151896, 22.7364077 ], [ 70.316185, 22.7389737 ], [ 70.3163255, 22.7391007 ], [ 70.318274, 22.7397288 ], [ 70.3182691, 22.7392139 ], [ 70.3191028, 22.7393353 ], [ 70.3202079, 22.7388114 ], [ 70.3204853, 22.7388091 ], [ 70.3206248, 22.7389371 ], [ 70.3207715, 22.739708 ], [ 70.3213228, 22.739317 ], [ 70.3229828, 22.7387883 ], [ 70.3238104, 22.7382667 ], [ 70.324495, 22.7373606 ], [ 70.3243343, 22.7350452 ], [ 70.3237794, 22.7350497 ], [ 70.3239127, 22.7345337 ], [ 70.3241877, 22.7342741 ], [ 70.3243096, 22.7324712 ], [ 70.3251408, 22.7323351 ], [ 70.3255504, 22.7316887 ], [ 70.3255452, 22.7311739 ], [ 70.3258178, 22.7306568 ], [ 70.3258055, 22.7293699 ], [ 70.3260805, 22.7291102 ], [ 70.3262147, 22.7285942 ], [ 70.3267696, 22.7285897 ], [ 70.3267647, 22.7280749 ], [ 70.3273183, 22.727941 ], [ 70.3282803, 22.7270325 ], [ 70.328412, 22.7262593 ], [ 70.3270198, 22.725756 ], [ 70.3271531, 22.72524 ], [ 70.3265906, 22.7244725 ], [ 70.3265683, 22.7221559 ], [ 70.3271058, 22.7203497 ], [ 70.3269601, 22.7195785 ], [ 70.3277951, 22.719829 ], [ 70.3276509, 22.7193155 ], [ 70.327371, 22.7190603 ], [ 70.3272253, 22.7182894 ], [ 70.3277802, 22.7182847 ], [ 70.3274878, 22.7167426 ], [ 70.3283201, 22.7167358 ], [ 70.3281759, 22.7162221 ], [ 70.327896, 22.7159669 ], [ 70.3277479, 22.7149386 ], [ 70.327193, 22.7149431 ], [ 70.3273113, 22.7128828 ], [ 70.3275838, 22.7123657 ], [ 70.3275789, 22.7118511 ], [ 70.3279892, 22.7112036 ], [ 70.328543, 22.7110707 ], [ 70.328258, 22.7103009 ], [ 70.33048, 22.7105398 ], [ 70.330195, 22.70977 ], [ 70.3315847, 22.7100159 ], [ 70.3315897, 22.7105306 ], [ 70.331866, 22.7103992 ], [ 70.3349215, 22.7107602 ], [ 70.3349164, 22.7102455 ], [ 70.3368597, 22.7103574 ], [ 70.3371359, 22.710227 ], [ 70.337141, 22.7107417 ], [ 70.3393617, 22.7108515 ], [ 70.3399153, 22.7107184 ], [ 70.3399077, 22.7099464 ], [ 70.3393517, 22.7098218 ], [ 70.3390718, 22.7095668 ], [ 70.3376807, 22.7091928 ], [ 70.3376758, 22.708678 ], [ 70.3393441, 22.7090497 ], [ 70.3394812, 22.7089203 ], [ 70.3396103, 22.7078895 ], [ 70.3398877, 22.7078872 ], [ 70.3398928, 22.708402 ], [ 70.3404475, 22.7083973 ], [ 70.3405908, 22.708911 ], [ 70.3407312, 22.709038 ], [ 70.3421222, 22.709413 ], [ 70.3422555, 22.708897 ], [ 70.3425303, 22.7086373 ], [ 70.3423846, 22.7078662 ], [ 70.3426634, 22.7079921 ], [ 70.342932814843749, 22.707989841926778 ], [ 70.342932814843749, 22.707989841926775 ], [ 70.343773, 22.7079828 ], [ 70.34391, 22.7078534 ], [ 70.3440442, 22.7073374 ], [ 70.3445989, 22.7073329 ], [ 70.344594, 22.706818 ], [ 70.3450121, 22.7070719 ], [ 70.3450298, 22.7088736 ], [ 70.3453097, 22.7091287 ], [ 70.3451765, 22.7096447 ], [ 70.34601, 22.7097659 ], [ 70.3461495, 22.7098938 ], [ 70.3462937, 22.7104075 ], [ 70.3468486, 22.7104028 ], [ 70.3468561, 22.711175 ], [ 70.3474124, 22.7112986 ], [ 70.3478317, 22.7116816 ], [ 70.347976, 22.7121953 ], [ 70.3485309, 22.7121905 ], [ 70.348536, 22.7127054 ], [ 70.3490895, 22.7125716 ], [ 70.3492266, 22.7124421 ], [ 70.3492215, 22.7119273 ], [ 70.3497688, 22.7111505 ], [ 70.3498979, 22.7101197 ], [ 70.3504515, 22.7099859 ], [ 70.3515624, 22.7101057 ], [ 70.3515549, 22.7093334 ], [ 70.3521098, 22.7093289 ], [ 70.3521149, 22.7098435 ], [ 70.3523923, 22.7098413 ], [ 70.3523821, 22.7088116 ], [ 70.3526596, 22.7088093 ], [ 70.3526647, 22.7093242 ], [ 70.3530778, 22.7090632 ], [ 70.3536174, 22.7075141 ], [ 70.3543052, 22.7068643 ], [ 70.3556909, 22.7067243 ], [ 70.3556936, 22.7069817 ], [ 70.3551387, 22.7069864 ], [ 70.3548815, 22.7090478 ], [ 70.3557125, 22.7089118 ], [ 70.355852, 22.7090397 ], [ 70.3559964, 22.7095532 ], [ 70.3562738, 22.709551 ], [ 70.3564069, 22.709035 ], [ 70.356821, 22.7087742 ], [ 70.3568261, 22.7092888 ], [ 70.357381, 22.7092841 ], [ 70.3572366, 22.7087706 ], [ 70.3579244, 22.7081208 ], [ 70.3584793, 22.7081161 ], [ 70.3721245, 22.7131478 ], [ 70.3732368, 22.7133956 ], [ 70.3749052, 22.7137679 ], [ 70.3747711, 22.7142839 ], [ 70.3744962, 22.7145436 ], [ 70.3745014, 22.7150584 ], [ 70.374642, 22.7151854 ], [ 70.3757542, 22.7154332 ], [ 70.3771402, 22.7152932 ], [ 70.3771351, 22.7147783 ], [ 70.3776938, 22.7151592 ], [ 70.3785286, 22.7154094 ], [ 70.3796384, 22.7153998 ], [ 70.380058, 22.7157827 ], [ 70.3803458, 22.7168099 ], [ 70.3806257, 22.7170648 ], [ 70.3806308, 22.7175797 ], [ 70.3809109, 22.7178346 ], [ 70.3807779, 22.7183506 ], [ 70.3816102, 22.7183434 ], [ 70.3816129, 22.7186009 ], [ 70.380783, 22.7188655 ], [ 70.3809264, 22.719379 ], [ 70.3807985, 22.7204098 ], [ 70.380521, 22.720412 ], [ 70.3802358, 22.7196424 ], [ 70.3791249, 22.7195228 ], [ 70.3785711, 22.7196568 ], [ 70.3787172, 22.7204277 ], [ 70.3789971, 22.7206827 ], [ 70.3794242, 22.7217086 ], [ 70.3783105, 22.7213317 ], [ 70.3777505, 22.7208216 ], [ 70.377473, 22.7208241 ], [ 70.3766457, 22.7213461 ], [ 70.3760908, 22.7213508 ], [ 70.3758121, 22.7212249 ], [ 70.3760844, 22.7207078 ], [ 70.3752534, 22.7208431 ], [ 70.3749786, 22.721103 ], [ 70.3741487, 22.7213674 ], [ 70.3735977, 22.7217589 ], [ 70.3736028, 22.7222735 ], [ 70.3741577, 22.7222688 ], [ 70.3741655, 22.723041 ], [ 70.3758313, 22.7231548 ], [ 70.3763838, 22.7228927 ], [ 70.3769387, 22.7228879 ], [ 70.3774987, 22.7233979 ], [ 70.3780536, 22.7233931 ], [ 70.3783337, 22.7236481 ], [ 70.3786112, 22.7236458 ], [ 70.3788848, 22.7232578 ], [ 70.3783299, 22.7232625 ], [ 70.3783273, 22.7230051 ], [ 70.3794331, 22.722609 ], [ 70.3797081, 22.7223493 ], [ 70.3802617, 22.7222162 ], [ 70.3802721, 22.7232457 ], [ 70.380827, 22.723241 ], [ 70.3811173, 22.7245254 ], [ 70.3802849, 22.7245326 ], [ 70.3802798, 22.724018 ], [ 70.3797249, 22.7240227 ], [ 70.3798812, 22.7258233 ], [ 70.3814142, 22.726453 ], [ 70.3815537, 22.726581 ], [ 70.3814206, 22.727097 ], [ 70.3811432, 22.7270994 ], [ 70.3811379, 22.7265846 ], [ 70.3786369, 22.7262196 ], [ 70.3772509, 22.7263608 ], [ 70.3772458, 22.725846 ], [ 70.3769684, 22.7258484 ], [ 70.3768342, 22.7263644 ], [ 70.3762846, 22.726884 ], [ 70.3762897, 22.7273986 ], [ 70.3765722, 22.727911 ], [ 70.37658, 22.7286832 ], [ 70.3767204, 22.7288103 ], [ 70.3775529, 22.7288031 ], [ 70.3781001, 22.7280261 ], [ 70.3783776, 22.7280238 ], [ 70.378517, 22.7281518 ], [ 70.3785274, 22.7291813 ], [ 70.3775722, 22.7307339 ], [ 70.3764598, 22.7304861 ], [ 70.3764649, 22.731001 ], [ 70.37591, 22.7310057 ], [ 70.3760585, 22.732034 ], [ 70.3764804, 22.7325453 ], [ 70.3756505, 22.7328097 ], [ 70.3756454, 22.732295 ], [ 70.3748104, 22.7320448 ], [ 70.3744118, 22.7338501 ], [ 70.3745522, 22.7339771 ], [ 70.3751071, 22.7339724 ], [ 70.3756569, 22.7334528 ], [ 70.3767669, 22.7334432 ], [ 70.3778716, 22.7329189 ], [ 70.3782834, 22.7325296 ], [ 70.3784176, 22.7320136 ], [ 70.3795261, 22.7318749 ], [ 70.3809096, 22.7314774 ], [ 70.3810608, 22.7327632 ], [ 70.3812012, 22.7328902 ], [ 70.3823125, 22.7330096 ], [ 70.3823072, 22.732495 ], [ 70.3845246, 22.7322183 ], [ 70.3835633, 22.7332563 ], [ 70.3837077, 22.7337698 ], [ 70.3828739, 22.7336479 ], [ 70.3825977, 22.7337794 ], [ 70.3828829, 22.7345492 ], [ 70.3820466, 22.7341699 ], [ 70.3803817, 22.7341843 ], [ 70.3795558, 22.7348354 ], [ 70.3796966, 22.7350915 ], [ 70.3797043, 22.7358637 ], [ 70.3798463, 22.7361198 ], [ 70.3790113, 22.7358698 ], [ 70.378744, 22.7369017 ], [ 70.3795766, 22.7368945 ], [ 70.3795972, 22.7389535 ], [ 70.3801521, 22.7389488 ], [ 70.3809897, 22.7394564 ], [ 70.3807149, 22.7397161 ], [ 70.3807174, 22.7399735 ], [ 70.380995, 22.7399711 ], [ 70.3810876, 22.7398006 ], [ 70.3812698, 22.7397114 ], [ 70.3811358, 22.7402274 ], [ 70.380586, 22.7407469 ], [ 70.380453, 22.7412629 ], [ 70.3796204, 22.7412701 ], [ 70.3794889, 22.7420435 ], [ 70.378980357944371, 22.743009048364112 ], [ 70.3789442, 22.7430777 ], [ 70.37901666717903, 22.743209048364111 ], [ 70.3792269, 22.7435901 ], [ 70.378965, 22.7451368 ], [ 70.37869, 22.7453967 ], [ 70.3785569, 22.7459127 ], [ 70.3782781, 22.7457859 ], [ 70.3777244, 22.7459199 ], [ 70.3778705, 22.7466908 ], [ 70.3770457, 22.74747 ], [ 70.3769126, 22.747986 ], [ 70.377745, 22.7479788 ], [ 70.3780122, 22.7469469 ], [ 70.3785673, 22.7469422 ], [ 70.3784409, 22.7482302 ], [ 70.3785815, 22.7483574 ], [ 70.3791377, 22.7484816 ], [ 70.3792838, 22.7492527 ], [ 70.3794242, 22.7493797 ], [ 70.3799807, 22.7495041 ], [ 70.3801241, 22.7500176 ], [ 70.3809617, 22.7505252 ], [ 70.3811061, 22.7510387 ], [ 70.3819413, 22.751289 ], [ 70.3820744, 22.750773 ], [ 70.3826242, 22.7502534 ], [ 70.3826138, 22.7492238 ], [ 70.3828888, 22.7489641 ], [ 70.3827376, 22.7476783 ], [ 70.3831559, 22.7479321 ], [ 70.3834981, 22.7543644 ], [ 70.3833651, 22.7548803 ], [ 70.3839202, 22.7548754 ], [ 70.3839253, 22.7553903 ], [ 70.3833717, 22.7555233 ], [ 70.3828204, 22.7559147 ], [ 70.3825533, 22.7569467 ], [ 70.3808856, 22.7567036 ], [ 70.3811579, 22.7561865 ], [ 70.3803267, 22.7563218 ], [ 70.3800517, 22.7565817 ], [ 70.3786654, 22.7567227 ], [ 70.3796465, 22.7577439 ], [ 70.3797911, 22.7582576 ], [ 70.3806236, 22.7582504 ], [ 70.3806183, 22.7577356 ], [ 70.3817312, 22.7579833 ], [ 70.3821572, 22.7590092 ], [ 70.3824375, 22.7592642 ], [ 70.3827331, 22.7610637 ], [ 70.3819107, 22.7621003 ], [ 70.3816384, 22.7626174 ], [ 70.3808136, 22.7633969 ], [ 70.3805412, 22.763914 ], [ 70.3805543, 22.7652009 ], [ 70.3812551, 22.765838 ], [ 70.3820889, 22.7659599 ], [ 70.3822324, 22.7664734 ], [ 70.3826531, 22.7668556 ], [ 70.3837646, 22.766975 ], [ 70.3837697, 22.7674899 ], [ 70.3846025, 22.7674825 ], [ 70.3846049, 22.7677399 ], [ 70.3840498, 22.7677448 ], [ 70.3841933, 22.7682583 ], [ 70.3843339, 22.7683853 ], [ 70.384889, 22.7683806 ], [ 70.3862715, 22.7678537 ], [ 70.3865465, 22.767594 ], [ 70.3871016, 22.7675891 ], [ 70.3884841, 22.7670623 ], [ 70.3890406, 22.7671865 ], [ 70.3890353, 22.7666719 ], [ 70.389589, 22.7665379 ], [ 70.389864, 22.766278 ], [ 70.3926355, 22.7658682 ], [ 70.3926406, 22.7663831 ], [ 70.3956898, 22.7659697 ], [ 70.39625, 22.7664797 ], [ 70.3968064, 22.766604 ], [ 70.396534, 22.7671213 ], [ 70.3979192, 22.7668516 ], [ 70.3979245, 22.7673664 ], [ 70.3990385, 22.7677424 ], [ 70.3998765, 22.7682498 ], [ 70.4002963, 22.7686327 ], [ 70.4004407, 22.7691463 ], [ 70.4009944, 22.7690123 ], [ 70.4011341, 22.7691402 ], [ 70.4018495, 22.7711931 ], [ 70.401572, 22.7711956 ], [ 70.4015667, 22.7706807 ], [ 70.4012904, 22.7708115 ], [ 70.4007353, 22.7708163 ], [ 70.3998948, 22.7700516 ], [ 70.3993371, 22.7697991 ], [ 70.398782, 22.7698038 ], [ 70.3976758, 22.7702001 ], [ 70.3975469, 22.7712309 ], [ 70.3979678, 22.7716129 ], [ 70.3990793, 22.7717323 ], [ 70.3990844, 22.772247 ], [ 70.3979755, 22.772385 ], [ 70.3968757, 22.7734243 ], [ 70.396322, 22.7735583 ], [ 70.3963246, 22.7738157 ], [ 70.396881, 22.7739389 ], [ 70.3973008, 22.7743218 ], [ 70.3974454, 22.7748355 ], [ 70.3988319, 22.7746942 ], [ 70.3999315, 22.7736549 ], [ 70.4027058, 22.7735023 ], [ 70.402452, 22.7758212 ], [ 70.4016193, 22.7758285 ], [ 70.401614, 22.7753137 ], [ 70.4005038, 22.7753235 ], [ 70.4006578, 22.7768665 ], [ 70.4007984, 22.7769935 ], [ 70.4016323, 22.7771154 ], [ 70.4013652, 22.7781474 ], [ 70.3997066, 22.7788049 ], [ 70.3961008, 22.7790939 ], [ 70.3952759, 22.7798733 ], [ 70.3927778, 22.7798953 ], [ 70.3903798, 22.7804715 ], [ 70.390281, 22.7800461 ], [ 70.3894522, 22.780439 ], [ 70.3886208, 22.7805755 ], [ 70.3887565, 22.7803169 ], [ 70.388613, 22.7798032 ], [ 70.3883367, 22.779934 ], [ 70.3866713, 22.7799484 ], [ 70.3847323, 22.7803519 ], [ 70.3847427, 22.7813814 ], [ 70.3839113, 22.7815169 ], [ 70.3836323, 22.781391 ], [ 70.3836272, 22.7808762 ], [ 70.384185, 22.7811289 ], [ 70.3838969, 22.7801016 ], [ 70.3827854, 22.7799822 ], [ 70.3822341, 22.7803734 ], [ 70.3822392, 22.7808883 ], [ 70.3816854, 22.7810213 ], [ 70.3811341, 22.7814127 ], [ 70.3808644, 22.7821873 ], [ 70.3814195, 22.7821823 ], [ 70.3814222, 22.7824398 ], [ 70.3805921, 22.7827044 ], [ 70.3807355, 22.7832179 ], [ 70.3810156, 22.7834728 ], [ 70.3808826, 22.7839888 ], [ 70.3819903, 22.7837219 ], [ 70.3819954, 22.7842366 ], [ 70.3828268, 22.7841003 ], [ 70.3833741, 22.7833233 ], [ 70.3836518, 22.7833209 ], [ 70.3844896, 22.7838285 ], [ 70.3872641, 22.7836762 ], [ 70.3869814, 22.7831638 ], [ 70.3883732, 22.7835373 ], [ 70.3904979, 22.7834781 ], [ 70.3903227, 22.7841644 ], [ 70.3892137, 22.7843022 ], [ 70.3886612, 22.7845645 ], [ 70.3850527, 22.7845959 ], [ 70.3831135, 22.7849992 ], [ 70.3838251, 22.7867949 ], [ 70.3839657, 22.7869219 ], [ 70.3845221, 22.7870463 ], [ 70.3846658, 22.7875598 ], [ 70.3849459, 22.7878147 ], [ 70.3849512, 22.7883296 ], [ 70.3850916, 22.7884566 ], [ 70.3862046, 22.7887044 ], [ 70.386627, 22.7893447 ], [ 70.3876055, 22.7899792 ], [ 70.3884384, 22.789972 ], [ 70.3888451, 22.789068 ], [ 70.3892594, 22.788807 ], [ 70.3892698, 22.7898365 ], [ 70.3895499, 22.7900914 ], [ 70.3898276, 22.790089 ], [ 70.3898249, 22.7898315 ], [ 70.3895448, 22.7895766 ], [ 70.3901012, 22.7897 ], [ 70.3902409, 22.789828 ], [ 70.3901078, 22.7903439 ], [ 70.3909406, 22.7903367 ], [ 70.3908039, 22.7905953 ], [ 70.3908143, 22.7916248 ], [ 70.3909549, 22.7917518 ], [ 70.39151, 22.7917471 ], [ 70.3916471, 22.7916176 ], [ 70.3916393, 22.7908453 ], [ 70.3919117, 22.7903282 ], [ 70.3919064, 22.7898134 ], [ 70.3917656, 22.7895573 ], [ 70.392597, 22.7894209 ], [ 70.392734, 22.7892914 ], [ 70.3931403, 22.7882583 ], [ 70.3939731, 22.7882509 ], [ 70.3938364, 22.7885095 ], [ 70.3939861, 22.7895378 ], [ 70.3931534, 22.7895452 ], [ 70.392747, 22.7905783 ], [ 70.3927548, 22.7913505 ], [ 70.3930377, 22.7918627 ], [ 70.3940164, 22.7924974 ], [ 70.3948491, 22.79249 ], [ 70.3949861, 22.7923606 ], [ 70.3951201, 22.7918446 ], [ 70.3962331, 22.7920924 ], [ 70.3952715, 22.7931304 ], [ 70.3951411, 22.7939037 ], [ 70.3956975, 22.794027 ], [ 70.3959778, 22.7942819 ], [ 70.3973685, 22.7945273 ], [ 70.3976433, 22.7942674 ], [ 70.3990313, 22.7942553 ], [ 70.3993063, 22.7939954 ], [ 70.4009666, 22.793466 ], [ 70.4012416, 22.7932061 ], [ 70.4026297, 22.793194 ], [ 70.4030388, 22.7925473 ], [ 70.4035888, 22.7920277 ], [ 70.4037228, 22.7915118 ], [ 70.4045556, 22.7915044 ], [ 70.4045609, 22.7920192 ], [ 70.405249, 22.7914983 ], [ 70.4057937, 22.7904639 ], [ 70.4064841, 22.7900712 ], [ 70.4075839, 22.7890319 ], [ 70.4081379, 22.7888988 ], [ 70.4078549, 22.7883865 ], [ 70.409798, 22.7883693 ], [ 70.4099311, 22.7878533 ], [ 70.4103439, 22.787463 ], [ 70.4125567, 22.7866713 ], [ 70.4126935, 22.7865418 ], [ 70.4125501, 22.7860283 ], [ 70.4136576, 22.7857611 ], [ 70.4133934, 22.7870504 ], [ 70.4120093, 22.7874483 ], [ 70.4114595, 22.787968 ], [ 70.409802, 22.7887548 ], [ 70.4092522, 22.7892746 ], [ 70.4081471, 22.789799 ], [ 70.406221, 22.7914896 ], [ 70.406087, 22.7920056 ], [ 70.4052622, 22.7927852 ], [ 70.4051292, 22.7933012 ], [ 70.4045728, 22.7931768 ], [ 70.4042978, 22.7934367 ], [ 70.4029124, 22.7937064 ], [ 70.4012534, 22.7943649 ], [ 70.4016799, 22.7953908 ], [ 70.4026559, 22.7957679 ], [ 70.4029375, 22.7961519 ], [ 70.4023823, 22.7961568 ], [ 70.4025259, 22.7966703 ], [ 70.4026665, 22.7967973 ], [ 70.4034992, 22.79679 ], [ 70.4036389, 22.7969179 ], [ 70.4037912, 22.7982037 ], [ 70.4043479, 22.7983271 ], [ 70.4051885, 22.7990918 ], [ 70.4057425, 22.7989587 ], [ 70.4057478, 22.7994734 ], [ 70.4063004, 22.7992112 ], [ 70.4061742, 22.8004993 ], [ 70.4064571, 22.8010117 ], [ 70.4065079, 22.8016949 ], [ 70.4060466, 22.8015301 ], [ 70.4060543, 22.8023021 ], [ 70.4057769, 22.8023046 ], [ 70.4057689, 22.8015325 ], [ 70.4052163, 22.8017949 ], [ 70.4049307, 22.8010251 ], [ 70.4041006, 22.8012899 ], [ 70.4036996, 22.8028378 ], [ 70.40371, 22.8038673 ], [ 70.4038506, 22.8039943 ], [ 70.4055164, 22.8039797 ], [ 70.4056533, 22.8038502 ], [ 70.4057873, 22.8033341 ], [ 70.4063426, 22.8033294 ], [ 70.4064703, 22.8022986 ], [ 70.4066998, 22.8018693 ], [ 70.4077162, 22.8019009 ], [ 70.4078557, 22.8020289 ], [ 70.4081466, 22.8033133 ], [ 70.4087071, 22.8038232 ], [ 70.4087151, 22.8045953 ], [ 70.4084401, 22.8048552 ], [ 70.408448, 22.8056274 ], [ 70.408731, 22.8061396 ], [ 70.4090245, 22.8076815 ], [ 70.4093048, 22.8079364 ], [ 70.4101827, 22.8123046 ], [ 70.4104656, 22.8128168 ], [ 70.4106208, 22.81436 ], [ 70.4128472, 22.814855 ], [ 70.4115841, 22.8135792 ], [ 70.4114405, 22.8130655 ], [ 70.4119984, 22.813318 ], [ 70.4119904, 22.8125459 ], [ 70.4111549, 22.8122959 ], [ 70.4115574, 22.8110054 ], [ 70.4114178, 22.8108775 ], [ 70.4124325, 22.8108277 ], [ 70.4125323, 22.8112541 ], [ 70.4128086, 22.8111224 ], [ 70.4130823, 22.8107344 ], [ 70.4126206, 22.8106499 ], [ 70.4128007, 22.8103503 ], [ 70.4147468, 22.8105906 ], [ 70.4150271, 22.8108453 ], [ 70.4166941, 22.8109597 ], [ 70.4165469, 22.8101889 ], [ 70.4169611, 22.8099277 ], [ 70.4169664, 22.8104426 ], [ 70.4172441, 22.8104401 ], [ 70.4172388, 22.8099253 ], [ 70.4175164, 22.8099228 ], [ 70.4175217, 22.8104377 ], [ 70.4186281, 22.8100411 ], [ 70.4195928, 22.8093895 ], [ 70.4194465, 22.8086187 ], [ 70.4200042, 22.808871 ], [ 70.4201346, 22.8080976 ], [ 70.4199937, 22.8078415 ], [ 70.4205476, 22.8077075 ], [ 70.4209594, 22.8073182 ], [ 70.4210855, 22.80603 ], [ 70.4216406, 22.8060251 ], [ 70.4214934, 22.8052541 ], [ 70.4216313, 22.8051237 ], [ 70.423022, 22.8053687 ], [ 70.4234314, 22.8047221 ], [ 70.4242562, 22.8039425 ], [ 70.4249292, 22.8018773 ], [ 70.4257608, 22.8017406 ], [ 70.4260356, 22.8014808 ], [ 70.427421, 22.8012111 ], [ 70.427833, 22.8008217 ], [ 70.4279668, 22.8003056 ], [ 70.4288037, 22.8006837 ], [ 70.4296379, 22.8008055 ], [ 70.4289515, 22.8015838 ], [ 70.4286846, 22.8026159 ], [ 70.4281346, 22.8031356 ], [ 70.4280018, 22.8036516 ], [ 70.4271717, 22.8039164 ], [ 70.4273127, 22.8041725 ], [ 70.4273259, 22.8054594 ], [ 70.4276064, 22.8057144 ], [ 70.4276224, 22.8072587 ], [ 70.427908, 22.8080283 ], [ 70.4279214, 22.8093152 ], [ 70.4280634, 22.8095713 ], [ 70.4275083, 22.8095762 ], [ 70.4273851, 22.8111218 ], [ 70.427806, 22.8115036 ], [ 70.4283626, 22.8116278 ], [ 70.4285062, 22.8121413 ], [ 70.4286468, 22.8122683 ], [ 70.4294811, 22.81239 ], [ 70.4296249, 22.8129035 ], [ 70.4306037, 22.8135378 ], [ 70.4317183, 22.8139143 ], [ 70.4315871, 22.8146877 ], [ 70.4313121, 22.8149476 ], [ 70.4311792, 22.8154635 ], [ 70.4306253, 22.8155968 ], [ 70.430074, 22.8159884 ], [ 70.4302178, 22.8165019 ], [ 70.4311993, 22.8173934 ], [ 70.4317559, 22.8175176 ], [ 70.431764, 22.8182898 ], [ 70.4325969, 22.8182823 ], [ 70.4327434, 22.8190532 ], [ 70.432884, 22.8191802 ], [ 70.4337156, 22.8190443 ], [ 70.433579, 22.8193031 ], [ 70.4335845, 22.8198177 ], [ 70.4341477, 22.8205849 ], [ 70.4340229, 22.8218731 ], [ 70.4345795, 22.8219963 ], [ 70.4356982, 22.8227584 ], [ 70.4362535, 22.8227535 ], [ 70.4390382, 22.8235006 ], [ 70.4393185, 22.8237553 ], [ 70.4407122, 22.8242575 ], [ 70.4409925, 22.8245125 ], [ 70.4448933, 22.8257642 ], [ 70.4451736, 22.826019 ], [ 70.446008, 22.8261405 ], [ 70.4457358, 22.8266578 ], [ 70.4449027, 22.8266654 ], [ 70.4449082, 22.8271802 ], [ 70.4462966, 22.8271676 ], [ 70.4462911, 22.8266527 ], [ 70.4485164, 22.8270182 ], [ 70.4493548, 22.8275253 ], [ 70.4501877, 22.8275178 ], [ 70.4577162, 22.8304097 ], [ 70.4574274, 22.8293826 ], [ 70.454919, 22.8285044 ], [ 70.4532503, 22.8282621 ], [ 70.4521314, 22.8275002 ], [ 70.447953, 22.8262511 ], [ 70.4476725, 22.8259963 ], [ 70.4471159, 22.8258731 ], [ 70.4471078, 22.825101 ], [ 70.4479394, 22.8249642 ], [ 70.4482142, 22.8247043 ], [ 70.4490445, 22.8244393 ], [ 70.4493195, 22.8241795 ], [ 70.4498761, 22.8243036 ], [ 70.4494236, 22.8209616 ], [ 70.4496986, 22.8207017 ], [ 70.4498324, 22.8201855 ], [ 70.4503877, 22.8201806 ], [ 70.450396, 22.8209527 ], [ 70.4509513, 22.8209476 ], [ 70.4512452, 22.8224894 ], [ 70.4517978, 22.8222269 ], [ 70.4520864, 22.8232539 ], [ 70.452643, 22.823377 ], [ 70.4533435, 22.8240147 ], [ 70.4540545, 22.8255525 ], [ 70.4546098, 22.8255474 ], [ 70.4543376, 22.8260647 ], [ 70.4548929, 22.8260596 ], [ 70.4548984, 22.8265745 ], [ 70.4554552, 22.8266975 ], [ 70.4557354, 22.8269525 ], [ 70.4562922, 22.8270765 ], [ 70.4564359, 22.82759 ], [ 70.4574179, 22.8284815 ], [ 70.4582563, 22.8289886 ], [ 70.4596487, 22.8293624 ], [ 70.4596432, 22.8288476 ], [ 70.4590866, 22.8287236 ], [ 70.4574054, 22.8273237 ], [ 70.4564113, 22.8252736 ], [ 70.4558479, 22.8245066 ], [ 70.4558451, 22.8242492 ], [ 70.455983, 22.8241188 ], [ 70.4562607, 22.8241161 ], [ 70.4566808, 22.8244989 ], [ 70.4568256, 22.8250124 ], [ 70.4579403, 22.8253879 ], [ 70.4593423, 22.826662 ], [ 70.4601807, 22.8271691 ], [ 70.4607373, 22.8272932 ], [ 70.4608675, 22.8265199 ], [ 70.4618301, 22.8256096 ], [ 70.4632102, 22.8248247 ], [ 70.4636192, 22.824178 ], [ 70.4634451, 22.8208334 ], [ 70.4642794, 22.820954 ], [ 70.4644192, 22.8210818 ], [ 70.4655462, 22.8226159 ], [ 70.465691, 22.8231294 ], [ 70.4662478, 22.8232524 ], [ 70.4663875, 22.8233804 ], [ 70.4664096, 22.8254393 ], [ 70.4669758, 22.8264637 ], [ 70.4675368, 22.8269733 ], [ 70.468103, 22.8279976 ], [ 70.4681059, 22.8282551 ], [ 70.4676954, 22.8287737 ], [ 70.4668651, 22.8290387 ], [ 70.4664591, 22.8300719 ], [ 70.4664619, 22.8303293 ], [ 70.4666026, 22.8304563 ], [ 70.467158, 22.8304512 ], [ 70.4677078, 22.8299313 ], [ 70.4682618, 22.8297981 ], [ 70.4685504, 22.8308249 ], [ 70.469103, 22.8305624 ], [ 70.4692469, 22.8310759 ], [ 70.4699456, 22.8314552 ], [ 70.4705065, 22.8319648 ], [ 70.4713408, 22.8320861 ], [ 70.4712072, 22.8326022 ], [ 70.4719059, 22.8329814 ], [ 70.4723289, 22.8336215 ], [ 70.4726175, 22.8346484 ], [ 70.472898, 22.8349031 ], [ 70.4731896, 22.8361874 ], [ 70.474042, 22.8379814 ], [ 70.4740558, 22.8392683 ], [ 70.4747617, 22.8402913 ], [ 70.4739314, 22.8405563 ], [ 70.4740724, 22.8408124 ], [ 70.474089, 22.8423567 ], [ 70.4743752, 22.8431263 ], [ 70.4747963, 22.8435079 ], [ 70.4753531, 22.8436319 ], [ 70.4748061, 22.8444093 ], [ 70.4742506, 22.8444144 ], [ 70.473959, 22.8431301 ], [ 70.4731233, 22.8428804 ], [ 70.4728373, 22.8421108 ], [ 70.4714432, 22.841609 ], [ 70.4714378, 22.8410942 ], [ 70.4706046, 22.841102 ], [ 70.4704599, 22.8405884 ], [ 70.4690465, 22.8382849 ], [ 70.4686139, 22.8367446 ], [ 70.4683376, 22.8368754 ], [ 70.4675047, 22.8368831 ], [ 70.4672242, 22.8366281 ], [ 70.4666674, 22.8365051 ], [ 70.4665143, 22.8352195 ], [ 70.4655319, 22.8341989 ], [ 70.4652542, 22.8342016 ], [ 70.4652626, 22.8349736 ], [ 70.4649849, 22.8349761 ], [ 70.4645459, 22.8329211 ], [ 70.4641216, 22.8321526 ], [ 70.4646768, 22.8321475 ], [ 70.4643828, 22.8306058 ], [ 70.463272, 22.830616 ], [ 70.463011, 22.8321628 ], [ 70.4635676, 22.8322861 ], [ 70.4637073, 22.832414 ], [ 70.4637101, 22.8326712 ], [ 70.4634351, 22.8329313 ], [ 70.4633024, 22.8334473 ], [ 70.4638562, 22.8333131 ], [ 70.4639961, 22.8334408 ], [ 70.464018, 22.8354998 ], [ 70.4643068, 22.8365268 ], [ 70.4654368, 22.8383182 ], [ 70.466289, 22.8401122 ], [ 70.4665695, 22.8403669 ], [ 70.4677162, 22.8437026 ], [ 70.4679966, 22.8439574 ], [ 70.4696931, 22.8467731 ], [ 70.4719702, 22.8519001 ], [ 70.4725339, 22.8526671 ], [ 70.4739473, 22.8549706 ], [ 70.4739501, 22.8552278 ], [ 70.4736751, 22.8554879 ], [ 70.4735508, 22.8567759 ], [ 70.4729953, 22.8567812 ], [ 70.4730008, 22.8572959 ], [ 70.4735563, 22.8572908 ], [ 70.4731448, 22.8578094 ], [ 70.4728753, 22.8585841 ], [ 70.4724648, 22.8591027 ], [ 70.4716345, 22.8593677 ], [ 70.4717866, 22.8606533 ], [ 70.4715116, 22.8609133 ], [ 70.4713816, 22.8616867 ], [ 70.4702722, 22.8618251 ], [ 70.4697209, 22.8622168 ], [ 70.4700027, 22.8625998 ], [ 70.4713928, 22.8627162 ], [ 70.4713956, 22.8629734 ], [ 70.4702847, 22.8629838 ], [ 70.4698787, 22.8640171 ], [ 70.4698813, 22.8642745 ], [ 70.4700221, 22.8644015 ], [ 70.4702998, 22.8643989 ], [ 70.4713998, 22.8633592 ], [ 70.4722342, 22.8634805 ], [ 70.4720838, 22.8624523 ], [ 70.4722217, 22.8623219 ], [ 70.4724996, 22.8623193 ], [ 70.4729197, 22.862702 ], [ 70.4732391, 22.8665601 ], [ 70.4733799, 22.8666869 ], [ 70.4739354, 22.8666818 ], [ 70.4744867, 22.8662911 ], [ 70.4746305, 22.8668044 ], [ 70.4751943, 22.8675714 ], [ 70.4756156, 22.8679532 ], [ 70.4764489, 22.8679454 ], [ 70.4767252, 22.8678147 ], [ 70.4768719, 22.8685856 ], [ 70.4765969, 22.8688455 ], [ 70.4766026, 22.8693601 ], [ 70.4770267, 22.8699993 ], [ 70.4778598, 22.8699916 ], [ 70.4781348, 22.8697317 ], [ 70.4784124, 22.869729 ], [ 70.4785523, 22.8698568 ], [ 70.4786972, 22.8703703 ], [ 70.4781418, 22.8703754 ], [ 70.4780108, 22.8711488 ], [ 70.4784306, 22.8714024 ], [ 70.4784251, 22.8708876 ], [ 70.4792582, 22.8708799 ], [ 70.479405, 22.8716508 ], [ 70.4785829, 22.872688 ], [ 70.4785886, 22.8732027 ], [ 70.4787292, 22.8733297 ], [ 70.4792862, 22.8734537 ], [ 70.479289, 22.8737111 ], [ 70.4787349, 22.8738443 ], [ 70.4781835, 22.8742361 ], [ 70.4781864, 22.8744933 ], [ 70.4790195, 22.8744856 ], [ 70.478608, 22.8750042 ], [ 70.4782113, 22.8768097 ], [ 70.4770975, 22.8765627 ], [ 70.4775081, 22.8760441 ], [ 70.4775026, 22.8755294 ], [ 70.4770752, 22.8745037 ], [ 70.4765211, 22.8746372 ], [ 70.4754171, 22.8752913 ], [ 70.4754255, 22.8760634 ], [ 70.4759809, 22.8760583 ], [ 70.4757116, 22.876833 ], [ 70.4740507, 22.8773631 ], [ 70.4743395, 22.8783901 ], [ 70.4751714, 22.8782533 ], [ 70.4755833, 22.8778638 ], [ 70.4754394, 22.8773503 ], [ 70.4782155, 22.8771953 ], [ 70.4783553, 22.8773232 ], [ 70.4779615, 22.879386 ], [ 70.4774045, 22.879262 ], [ 70.4768532, 22.8796538 ], [ 70.4771393, 22.8804232 ], [ 70.4765838, 22.8804285 ], [ 70.47687, 22.8811979 ], [ 70.4774255, 22.8811928 ], [ 70.4775583, 22.8806769 ], [ 70.4783805, 22.8796396 ], [ 70.4782365, 22.8791261 ], [ 70.4793502, 22.8793731 ], [ 70.4797384, 22.8767956 ], [ 70.4801529, 22.8765344 ], [ 70.4801584, 22.877049 ], [ 70.4807139, 22.8770439 ], [ 70.4807167, 22.8773013 ], [ 70.4798862, 22.8775663 ], [ 70.4800274, 22.8778224 ], [ 70.4800331, 22.8783372 ], [ 70.4797581, 22.8785971 ], [ 70.4797636, 22.8791119 ], [ 70.4806137, 22.8806483 ], [ 70.4810337, 22.8809018 ], [ 70.4811663, 22.8803858 ], [ 70.4818556, 22.8798645 ], [ 70.481722, 22.8803807 ], [ 70.481447, 22.8806406 ], [ 70.4814636, 22.8821849 ], [ 70.4817443, 22.8824397 ], [ 70.4816114, 22.8829556 ], [ 70.4835489, 22.8822936 ], [ 70.484939, 22.8824098 ], [ 70.4849335, 22.8818952 ], [ 70.485489, 22.8818899 ], [ 70.484925, 22.8811229 ], [ 70.4854806, 22.8811178 ], [ 70.4851971, 22.8806056 ], [ 70.4865887, 22.88085 ], [ 70.4863279, 22.8823968 ], [ 70.4857738, 22.8825302 ], [ 70.4854988, 22.8827903 ], [ 70.4843905, 22.8830579 ], [ 70.4841155, 22.8833179 ], [ 70.4838379, 22.8833206 ], [ 70.483278, 22.8829401 ], [ 70.4830115, 22.8839723 ], [ 70.483292, 22.884227 ], [ 70.4835698, 22.8842244 ], [ 70.483567, 22.883967 ], [ 70.4832865, 22.8837122 ], [ 70.4846766, 22.8838275 ], [ 70.4848165, 22.8839553 ], [ 70.4848193, 22.8842127 ], [ 70.4845443, 22.8844727 ], [ 70.48455, 22.8849874 ], [ 70.4849726, 22.8854982 ], [ 70.4841408, 22.8856343 ], [ 70.4835893, 22.8860259 ], [ 70.4835978, 22.886798 ], [ 70.484434, 22.8870477 ], [ 70.4844283, 22.8865328 ], [ 70.4847061, 22.8865304 ], [ 70.4847116, 22.887045 ], [ 70.4852657, 22.8869106 ], [ 70.4856723, 22.8860065 ], [ 70.4859471, 22.8857466 ], [ 70.4859416, 22.8852318 ], [ 70.4862166, 22.8849719 ], [ 70.4864831, 22.8839398 ], [ 70.4871711, 22.8832894 ], [ 70.4882778, 22.8828934 ], [ 70.4884079, 22.8821201 ], [ 70.4882667, 22.881864 ], [ 70.4871527, 22.8816169 ], [ 70.4883882, 22.8803183 ], [ 70.4885135, 22.8790303 ], [ 70.4893468, 22.8790224 ], [ 70.489502, 22.8805653 ], [ 70.490144829687495, 22.881954093893537 ], [ 70.4902138, 22.8821031 ], [ 70.4896583, 22.8821083 ], [ 70.4899416, 22.8826203 ], [ 70.4893861, 22.8826256 ], [ 70.4893918, 22.8831403 ], [ 70.4899486, 22.8832633 ], [ 70.4900885, 22.8833913 ], [ 70.490144829687495, 22.883590844710785 ], [ 70.4902334, 22.8839046 ], [ 70.490144829687495, 22.883864487898602 ], [ 70.4899543, 22.8837782 ], [ 70.4888431, 22.8837886 ], [ 70.4885668, 22.8839203 ], [ 70.4885697, 22.8841777 ], [ 70.4891251, 22.8841724 ], [ 70.489128, 22.8844298 ], [ 70.4877364, 22.8841855 ], [ 70.4884415, 22.8852083 ], [ 70.4885865, 22.8857218 ], [ 70.4877545, 22.8858579 ], [ 70.4874753, 22.8857322 ], [ 70.4876222, 22.886503 ], [ 70.4880478, 22.8872713 ], [ 70.4874937, 22.8874047 ], [ 70.4869424, 22.8877965 ], [ 70.486945, 22.8880537 ], [ 70.4877785, 22.888046 ], [ 70.4875118, 22.8890781 ], [ 70.4869564, 22.8890832 ], [ 70.4866702, 22.8883138 ], [ 70.4863924, 22.8883164 ], [ 70.4861257, 22.8893484 ], [ 70.4866814, 22.8893433 ], [ 70.4868282, 22.890114 ], [ 70.486969, 22.890241 ], [ 70.4871087, 22.8903688 ], [ 70.4873894, 22.8906235 ], [ 70.487395, 22.8911384 ], [ 70.4869858, 22.8917851 ], [ 70.4867093, 22.8919169 ], [ 70.4868533, 22.8924304 ], [ 70.4869942, 22.8925572 ], [ 70.487272, 22.8925548 ], [ 70.487409, 22.8924251 ], [ 70.4873576, 22.8917411 ], [ 70.4878163, 22.89152 ], [ 70.4889261, 22.8913814 ], [ 70.4886566, 22.8921561 ], [ 70.4900497, 22.8925287 ], [ 70.49025613220482, 22.892716477213661 ], [ 70.4904702, 22.8929112 ], [ 70.490485990364959, 22.894353318749999 ], [ 70.490485990364945, 22.894353318749999 ], [ 70.4905012, 22.8957424 ], [ 70.4898184, 22.8967783 ], [ 70.4889836, 22.896657 ], [ 70.4875876, 22.8960271 ], [ 70.4874426, 22.8955135 ], [ 70.4870208, 22.8950027 ], [ 70.4864653, 22.895008 ], [ 70.4866093, 22.8955215 ], [ 70.4863344, 22.8957814 ], [ 70.4866316, 22.8975803 ], [ 70.4871985, 22.8986046 ], [ 70.4877598, 22.8991142 ], [ 70.4880544, 22.9006559 ], [ 70.4873687, 22.9014343 ], [ 70.48487, 22.9015859 ], [ 70.4843158, 22.9017203 ], [ 70.4844599, 22.9022338 ], [ 70.4847403, 22.9024886 ], [ 70.4847432, 22.902746 ], [ 70.4836543, 22.9048152 ], [ 70.4836572, 22.9050726 ], [ 70.4842211, 22.9058396 ], [ 70.484224, 22.906097 ], [ 70.483674, 22.9066169 ], [ 70.4831323, 22.9079089 ], [ 70.4831351, 22.9081663 ], [ 70.483276, 22.9082932 ], [ 70.4838329, 22.9084171 ], [ 70.4834241, 22.9091932 ], [ 70.483427, 22.9094506 ], [ 70.4839881, 22.9099601 ], [ 70.4844124, 22.9105991 ], [ 70.4849681, 22.9105939 ], [ 70.4871809, 22.9096729 ], [ 70.4875802, 22.9081248 ], [ 70.4877182, 22.9079942 ], [ 70.4893824, 22.9077212 ], [ 70.4897915, 22.9070743 ], [ 70.4911665, 22.9057745 ], [ 70.491433, 22.9047424 ], [ 70.492533, 22.9037025 ], [ 70.4928051, 22.9031852 ], [ 70.4947301, 22.9013654 ], [ 70.4950023, 22.9008479 ], [ 70.4954166, 22.9005867 ], [ 70.4954336, 22.9021308 ], [ 70.4968212, 22.9019887 ], [ 70.4976475, 22.9013378 ], [ 70.4989395, 22.9051866 ], [ 70.4996388, 22.9055657 ], [ 70.5003427, 22.9064602 ], [ 70.5003512, 22.9072323 ], [ 70.4995264, 22.9080123 ], [ 70.4992542, 22.9085298 ], [ 70.4971935, 22.9106084 ], [ 70.4966394, 22.9107418 ], [ 70.4958144, 22.9115217 ], [ 70.4955366, 22.9115243 ], [ 70.4944154, 22.9106345 ], [ 70.4942703, 22.910121 ], [ 70.4925865, 22.9085925 ], [ 70.4921618, 22.9078242 ], [ 70.4916061, 22.9078295 ], [ 70.4913368, 22.9086043 ], [ 70.489677, 22.9092629 ], [ 70.4874755, 22.9112143 ], [ 70.4869339, 22.9125065 ], [ 70.4874895, 22.9125012 ], [ 70.486539, 22.9145693 ], [ 70.4854642, 22.9179255 ], [ 70.4854727, 22.9186976 ], [ 70.485904, 22.9199805 ], [ 70.4864581, 22.9198462 ], [ 70.4868815, 22.9204861 ], [ 70.4887063, 22.9221418 ], [ 70.4898233, 22.922646 ], [ 70.4901011, 22.9226434 ], [ 70.4905131, 22.9222538 ], [ 70.4907798, 22.9212219 ], [ 70.4909178, 22.9210913 ], [ 70.4931348, 22.9205559 ], [ 70.4934099, 22.9202958 ], [ 70.4939641, 22.9201624 ], [ 70.4940885, 22.9188741 ], [ 70.4945014, 22.9184837 ], [ 70.4957443, 22.917829 ], [ 70.4960193, 22.9175691 ], [ 70.4965608, 22.9162769 ], [ 70.4965551, 22.9157622 ], [ 70.4971051, 22.9152423 ], [ 70.4975152, 22.9145944 ], [ 70.4986224, 22.9141983 ], [ 70.4988719, 22.911622 ], [ 70.4999817, 22.9114823 ], [ 70.5009437, 22.9105729 ], [ 70.502313, 22.9087583 ], [ 70.5028516, 22.9072087 ], [ 70.5045014, 22.9056489 ], [ 70.5044986, 22.9053914 ], [ 70.5036566, 22.9046271 ], [ 70.5037876, 22.9038537 ], [ 70.5043417, 22.9037194 ], [ 70.5047537, 22.9033298 ], [ 70.5048873, 22.9028139 ], [ 70.505443, 22.9028086 ], [ 70.5054402, 22.9025511 ], [ 70.5048845, 22.9025564 ], [ 70.5051538, 22.9017817 ], [ 70.5104235, 22.9009596 ], [ 70.5100178, 22.9019928 ], [ 70.5096072, 22.9025116 ], [ 70.5090472, 22.9021304 ], [ 70.5082153, 22.9022675 ], [ 70.5079461, 22.9030422 ], [ 70.5076683, 22.9030448 ], [ 70.5076598, 22.9022728 ], [ 70.507107, 22.9025353 ], [ 70.5071013, 22.9020206 ], [ 70.5068235, 22.9020233 ], [ 70.5056127, 22.9056383 ], [ 70.5050627, 22.9061582 ], [ 70.5050798, 22.9077025 ], [ 70.5034413, 22.9102918 ], [ 70.5026192, 22.9113293 ], [ 70.5015192, 22.9123693 ], [ 70.500845, 22.9141773 ], [ 70.5002907, 22.9143109 ], [ 70.4989144, 22.9154825 ], [ 70.4989201, 22.9159974 ], [ 70.4983644, 22.9160025 ], [ 70.4976976, 22.9185827 ], [ 70.4977089, 22.9196122 ], [ 70.4981304, 22.919994 ], [ 70.4989696, 22.9205009 ], [ 70.5025857, 22.9208532 ], [ 70.5025942, 22.9216252 ], [ 70.5020399, 22.9217587 ], [ 70.5009272, 22.9216411 ], [ 70.5009216, 22.9211263 ], [ 70.5006437, 22.9211289 ], [ 70.5007906, 22.9218996 ], [ 70.5023264, 22.9225283 ], [ 70.5026042, 22.9225256 ], [ 70.5030162, 22.9221361 ], [ 70.5031499, 22.9216199 ], [ 70.5037042, 22.9214855 ], [ 70.5046662, 22.9205761 ], [ 70.5056207, 22.9188934 ], [ 70.5067333, 22.9190121 ], [ 70.5067276, 22.9184973 ], [ 70.5072833, 22.9184922 ], [ 70.5072776, 22.9179773 ], [ 70.5081111, 22.9179694 ], [ 70.508244, 22.9174534 ], [ 70.508794, 22.9169333 ], [ 70.5096103, 22.9153812 ], [ 70.5109794, 22.9135664 ], [ 70.5109652, 22.9122797 ], [ 70.5111032, 22.9121491 ], [ 70.511381, 22.9121465 ], [ 70.5122215, 22.9127825 ], [ 70.5123315, 22.9102075 ], [ 70.513827, 22.9072329 ], [ 70.5141049, 22.9072302 ], [ 70.5154982, 22.9076033 ], [ 70.515504, 22.9081181 ], [ 70.5166123, 22.9078501 ], [ 70.5167594, 22.9086209 ], [ 70.5174644, 22.9095147 ], [ 70.5185785, 22.9097613 ], [ 70.5188592, 22.9100161 ], [ 70.5196927, 22.9100081 ], [ 70.5203795, 22.9093586 ], [ 70.5205131, 22.9088424 ], [ 70.5213494, 22.9090919 ], [ 70.5209667, 22.9121843 ], [ 70.5204197, 22.9129616 ], [ 70.5203043, 22.9150219 ], [ 70.5225356, 22.9157726 ], [ 70.5224076, 22.9168035 ], [ 70.5235305, 22.9178223 ], [ 70.523814, 22.9183344 ], [ 70.5236928, 22.9198798 ], [ 70.5223065, 22.9201505 ], [ 70.5225931, 22.9209199 ], [ 70.5214859, 22.9213162 ], [ 70.5209333, 22.9215789 ], [ 70.5203818, 22.9219707 ], [ 70.5201183, 22.9232603 ], [ 70.5206726, 22.9231257 ], [ 70.5209476, 22.9228656 ], [ 70.5215046, 22.9229896 ], [ 70.5216373, 22.9224735 ], [ 70.5217753, 22.922343 ], [ 70.5239952, 22.9220643 ], [ 70.5242701, 22.9218042 ], [ 70.5253844, 22.922051 ], [ 70.5256651, 22.9223056 ], [ 70.5262222, 22.9224294 ], [ 70.5259472, 22.9226895 ], [ 70.5259588, 22.923719 ], [ 70.5262353, 22.9235872 ], [ 70.5270701, 22.9237082 ], [ 70.526529, 22.9250004 ], [ 70.5270831, 22.924866 ], [ 70.5276331, 22.9243459 ], [ 70.527911, 22.9243432 ], [ 70.5281916, 22.9245978 ], [ 70.5293031, 22.9245872 ], [ 70.5298688, 22.9254831 ], [ 70.5287603, 22.9257511 ], [ 70.5286668, 22.925921 ], [ 70.5276503, 22.92589 ], [ 70.526549, 22.9268019 ], [ 70.5264269, 22.9283476 ], [ 70.5256021, 22.9291276 ], [ 70.5252001, 22.9304184 ], [ 70.5263131, 22.930536 ], [ 70.5271438, 22.9302706 ], [ 70.5282466, 22.9294878 ], [ 70.5288023, 22.9294825 ], [ 70.5290845, 22.9298662 ], [ 70.5274231, 22.9303971 ], [ 70.5271597, 22.9316864 ], [ 70.5268818, 22.9316893 ], [ 70.5268732, 22.9309172 ], [ 70.5265953, 22.9309199 ], [ 70.526601, 22.9314345 ], [ 70.5257703, 22.9316999 ], [ 70.525779, 22.9324719 ], [ 70.5263347, 22.9324666 ], [ 70.5256511, 22.9335027 ], [ 70.5256569, 22.9340176 ], [ 70.5257977, 22.9341444 ], [ 70.5260756, 22.9341417 ], [ 70.5263506, 22.9338817 ], [ 70.5266284, 22.933879 ], [ 70.5271899, 22.9343884 ], [ 70.5277471, 22.9345122 ], [ 70.5277529, 22.9350268 ], [ 70.5269193, 22.935035 ], [ 70.5270693, 22.9360631 ], [ 70.5263954, 22.9378713 ], [ 70.5186248, 22.9388463 ], [ 70.5172398, 22.9392461 ], [ 70.5172514, 22.9402755 ], [ 70.517807, 22.9402703 ], [ 70.5179627, 22.9418131 ], [ 70.5176878, 22.9420731 ], [ 70.5176906, 22.9423304 ], [ 70.5179713, 22.9425851 ], [ 70.5181166, 22.9430985 ], [ 70.5186694, 22.9428359 ], [ 70.5186809, 22.9438652 ], [ 70.5300727, 22.9436267 ], [ 70.5303477, 22.9433666 ], [ 70.5309036, 22.9433614 ], [ 70.5313271, 22.9440011 ], [ 70.5317473, 22.9442546 ], [ 70.5317414, 22.9437397 ], [ 70.5320194, 22.9437371 ], [ 70.5320251, 22.9442517 ], [ 70.5323031, 22.9442491 ], [ 70.5324358, 22.9437331 ], [ 70.5328501, 22.9434717 ], [ 70.5325925, 22.9452759 ], [ 70.5245367, 22.9456108 ], [ 70.5245309, 22.9450962 ], [ 70.52259, 22.9455005 ], [ 70.5189788, 22.9456641 ], [ 70.519251, 22.9451468 ], [ 70.5184188, 22.9452831 ], [ 70.5181438, 22.945543 ], [ 70.5156456, 22.9458244 ], [ 70.5145803, 22.9457224 ], [ 70.5117552, 22.9458614 ], [ 70.5081425, 22.9458958 ], [ 70.5014818, 22.9467312 ], [ 70.4888429, 22.9470487 ], [ 70.4873119, 22.9471221 ], [ 70.4770325, 22.9474755 ], [ 70.4720191, 22.9464925 ], [ 70.4714606, 22.9462402 ], [ 70.4709048, 22.9462455 ], [ 70.4692457, 22.9470331 ], [ 70.4689679, 22.9470355 ], [ 70.4681299, 22.9466577 ], [ 70.4681355, 22.9471723 ], [ 70.4673032, 22.9473084 ], [ 70.4670238, 22.9471827 ], [ 70.4670295, 22.9476974 ], [ 70.466475, 22.9478308 ], [ 70.465647, 22.9483532 ], [ 70.4645436, 22.9491357 ], [ 70.4641729, 22.9494257 ], [ 70.4611469, 22.9503761 ], [ 70.4579594, 22.9510485 ], [ 70.4562884, 22.9520053 ], [ 70.4559819, 22.9522599 ], [ 70.4556923, 22.9526747 ], [ 70.45344, 22.9548428 ], [ 70.4534152, 22.9551216 ], [ 70.4525613, 22.9556748 ], [ 70.4526258, 22.9561502 ], [ 70.4481379, 22.9579102 ], [ 70.4453478, 22.959053 ], [ 70.4443449, 22.9595559 ], [ 70.443908, 22.9598347 ], [ 70.4437856, 22.9600248 ], [ 70.4435433, 22.9604644 ], [ 70.4435855, 22.9608846 ], [ 70.4438031, 22.9609913 ], [ 70.4441085, 22.9609622 ], [ 70.4441542, 22.9611303 ], [ 70.4451968, 22.9610269 ], [ 70.44526, 22.96114 ], [ 70.4461551, 22.9610333 ], [ 70.4461095, 22.9607844 ], [ 70.446931, 22.9606487 ], [ 70.4472504, 22.9605517 ], [ 70.4507234, 22.9596332 ], [ 70.4560021, 22.9578462 ], [ 70.4590242, 22.9568995 ], [ 70.462986, 22.9564241 ], [ 70.4646546, 22.9564119 ], [ 70.4657356, 22.9565891 ], [ 70.4682397, 22.9568234 ], [ 70.4687927, 22.9565609 ], [ 70.4704589, 22.9564171 ], [ 70.4707061, 22.9535834 ], [ 70.471262, 22.9535783 ], [ 70.4715288, 22.9525464 ], [ 70.4729225, 22.9529191 ], [ 70.4730624, 22.9530468 ], [ 70.4732102, 22.9538176 ], [ 70.4779501, 22.9551888 ], [ 70.479341, 22.955305 ], [ 70.4790686, 22.9558223 ], [ 70.4807375, 22.955935 ], [ 70.4809231, 22.9562313 ], [ 70.4807418, 22.9563215 ], [ 70.4807447, 22.9565789 ], [ 70.4810225, 22.9565762 ], [ 70.4811153, 22.9564056 ], [ 70.4812977, 22.9563164 ], [ 70.481306, 22.9570884 ], [ 70.4821384, 22.9569514 ], [ 70.4832542, 22.9573275 ], [ 70.4832571, 22.9575849 ], [ 70.4827012, 22.9575902 ], [ 70.4829834, 22.9579731 ], [ 70.4843757, 22.9582175 ], [ 70.4845128, 22.958088 ], [ 70.4846466, 22.9575719 ], [ 70.4856245, 22.9580776 ], [ 70.4857779, 22.959363 ], [ 70.4863353, 22.9594861 ], [ 70.4867558, 22.9598688 ], [ 70.4871845, 22.9608943 ], [ 70.4882933, 22.9606265 ], [ 70.4879985, 22.9590848 ], [ 70.489113, 22.9593319 ], [ 70.4892629, 22.96036 ], [ 70.4898299, 22.9613842 ], [ 70.4908103, 22.9620181 ], [ 70.4913746, 22.9627849 ], [ 70.4927698, 22.9632865 ], [ 70.4930507, 22.9635413 ], [ 70.4975018, 22.9638858 ], [ 70.4975075, 22.9644006 ], [ 70.4980618, 22.9642663 ], [ 70.498337, 22.9640062 ], [ 70.4988942, 22.9641302 ], [ 70.4988885, 22.9636153 ], [ 70.4994458, 22.9637384 ], [ 70.500549, 22.9629557 ], [ 70.5016564, 22.9625596 ], [ 70.5013729, 22.9620476 ], [ 70.504145, 22.9613774 ], [ 70.5060875, 22.9611015 ], [ 70.5066449, 22.9612254 ], [ 70.5063612, 22.9607133 ], [ 70.5080274, 22.9605683 ], [ 70.5085861, 22.9608204 ], [ 70.5088639, 22.9608178 ], [ 70.5094141, 22.9602976 ], [ 70.5119096, 22.9597592 ], [ 70.5138494, 22.9592258 ], [ 70.5144024, 22.9589631 ], [ 70.5163477, 22.9589446 ], [ 70.5166227, 22.9586845 ], [ 70.5174536, 22.9584192 ], [ 70.5185653, 22.9584086 ], [ 70.5191168, 22.9580177 ], [ 70.5191226, 22.9585324 ], [ 70.5195362, 22.958271 ], [ 70.5196698, 22.957755 ], [ 70.5199491, 22.9578805 ], [ 70.5235562, 22.9573311 ], [ 70.5249457, 22.9573179 ], [ 70.5255046, 22.9575698 ], [ 70.5274513, 22.9576802 ], [ 70.52746, 22.9584522 ], [ 70.5291291, 22.9585645 ], [ 70.5335611, 22.9572347 ], [ 70.5390931, 22.9548646 ], [ 70.542703, 22.9545721 ], [ 70.5428399, 22.9544426 ], [ 70.5432164, 22.9508355 ], [ 70.5451632, 22.9509448 ], [ 70.5453001, 22.9508151 ], [ 70.5454278, 22.9497843 ], [ 70.5476424, 22.9489905 ], [ 70.5475439, 22.9525949 ], [ 70.5481054, 22.9531043 ], [ 70.5488109, 22.9539979 ], [ 70.5499285, 22.9545018 ], [ 70.5503492, 22.9548841 ], [ 70.5507782, 22.9559094 ], [ 70.5521634, 22.9555093 ], [ 70.5523005, 22.9553799 ], [ 70.552706, 22.9543462 ], [ 70.5535382, 22.954209 ], [ 70.5538132, 22.9539489 ], [ 70.5557512, 22.9532869 ], [ 70.5560379, 22.9540563 ], [ 70.5543706, 22.9540725 ], [ 70.5545119, 22.9543286 ], [ 70.5545267, 22.9556154 ], [ 70.5543912, 22.9558741 ], [ 70.5524532, 22.9565362 ], [ 70.5499519, 22.9565605 ], [ 70.5471787, 22.9571024 ], [ 70.5466288, 22.9576225 ], [ 70.5457964, 22.9577599 ], [ 70.5457905, 22.9572451 ], [ 70.5452349, 22.9572506 ], [ 70.5449482, 22.9564812 ], [ 70.5430056, 22.9567575 ], [ 70.5424645, 22.9580497 ], [ 70.5394103, 22.9583368 ], [ 70.5391498, 22.9598835 ], [ 70.5330487, 22.9611005 ], [ 70.5283256, 22.9612753 ], [ 70.5283632, 22.964621 ], [ 70.5241986, 22.9650466 ], [ 70.5236456, 22.9653094 ], [ 70.5216987, 22.9651999 ], [ 70.5218314, 22.9646838 ], [ 70.52169, 22.9644279 ], [ 70.5189064, 22.964068 ], [ 70.5161143, 22.9629368 ], [ 70.516267, 22.9642224 ], [ 70.515992, 22.9644823 ], [ 70.5160007, 22.9652544 ], [ 70.5165651, 22.9660211 ], [ 70.5167104, 22.9665346 ], [ 70.5208866, 22.9671376 ], [ 70.521591, 22.9680323 ], [ 70.5222907, 22.968411 ], [ 70.5261933, 22.9694031 ], [ 70.5275915, 22.9701619 ], [ 70.53149, 22.9707682 ], [ 70.5316343, 22.9712816 ], [ 70.5315161, 22.9730844 ], [ 70.53235, 22.9730763 ], [ 70.532683, 22.9779635 ], [ 70.5282387, 22.9782638 ], [ 70.528354, 22.9762037 ], [ 70.5287656, 22.9756849 ], [ 70.5254143, 22.974301 ], [ 70.5220818, 22.9745904 ], [ 70.5218053, 22.9747223 ], [ 70.5213389, 22.9827059 ], [ 70.5274626, 22.9834191 ], [ 70.5278675, 22.9823857 ], [ 70.5310487, 22.9809389 ], [ 70.5368728, 22.9797248 ], [ 70.537608, 22.9833211 ], [ 70.5383135, 22.9842146 ], [ 70.5402578, 22.9840674 ], [ 70.5414836, 22.9940937 ], [ 70.5342574, 22.9942921 ], [ 70.5325866, 22.9940508 ], [ 70.5323058, 22.9937962 ], [ 70.5311924, 22.9936786 ], [ 70.5316233, 22.9949616 ], [ 70.5317832, 22.9967616 ], [ 70.5284502, 22.9970511 ], [ 70.5275437, 22.9906253 ], [ 70.5200512, 22.9918552 ], [ 70.5183905, 22.992515 ], [ 70.5182712, 22.9943178 ], [ 70.5198813, 23.0015093 ], [ 70.5121058, 23.002356 ], [ 70.5135388, 23.0062031 ], [ 70.5193714, 23.0056325 ], [ 70.5195243, 23.0069179 ], [ 70.5198051, 23.0071727 ], [ 70.5198253, 23.0089742 ], [ 70.5202659, 23.011029 ], [ 70.5222135, 23.0111386 ], [ 70.5230419, 23.0106159 ], [ 70.5277596, 23.0097983 ], [ 70.5283171, 23.009922 ], [ 70.5287539, 23.0117194 ], [ 70.5294668, 23.013257 ], [ 70.5319661, 23.0129753 ], [ 70.5329049, 23.0222322 ], [ 70.5348499, 23.0220842 ], [ 70.5362356, 23.0216852 ], [ 70.5353893, 23.0122577 ], [ 70.5358497, 23.0121655 ], [ 70.535566, 23.0116535 ], [ 70.5364014, 23.0117737 ], [ 70.5416722, 23.010693 ], [ 70.5433403, 23.0106767 ], [ 70.5472252, 23.0099958 ], [ 70.5473549, 23.0092222 ], [ 70.5473343, 23.0074208 ], [ 70.5470359, 23.0056219 ], [ 70.5480049, 23.005226 ], [ 70.5505055, 23.0050733 ], [ 70.5509338, 23.0060986 ], [ 70.5517826, 23.0073772 ], [ 70.5520812, 23.0091761 ], [ 70.5523621, 23.0094306 ], [ 70.5529359, 23.0109693 ], [ 70.5532169, 23.0112239 ], [ 70.5539359, 23.013276 ], [ 70.5478342, 23.0146227 ], [ 70.5484284, 23.0179629 ], [ 70.5548143, 23.0171282 ], [ 70.5558253, 23.0204643 ], [ 70.5566713, 23.0214854 ], [ 70.5589487, 23.0260959 ], [ 70.5595108, 23.0266053 ], [ 70.5596563, 23.0271186 ], [ 70.5602124, 23.0271131 ], [ 70.5600757, 23.0273719 ], [ 70.5602243, 23.0281426 ], [ 70.5607803, 23.0281371 ], [ 70.5609277, 23.0289077 ], [ 70.5697809, 23.0369273 ], [ 70.5703399, 23.0371791 ], [ 70.5713231, 23.0380706 ], [ 70.5716072, 23.0385826 ], [ 70.5728725, 23.0397277 ], [ 70.5734301, 23.0398513 ], [ 70.5734242, 23.0393367 ], [ 70.5745439, 23.0399685 ], [ 70.5787181, 23.0401844 ], [ 70.5788551, 23.0400547 ], [ 70.5788491, 23.0395401 ], [ 70.5781454, 23.038775 ], [ 70.5767535, 23.0386597 ], [ 70.5759103, 23.0378959 ], [ 70.574792, 23.0373923 ], [ 70.5739489, 23.0366285 ], [ 70.5731103, 23.0362513 ], [ 70.5726807, 23.0352259 ], [ 70.5722581, 23.0347154 ], [ 70.5717019, 23.0347209 ], [ 70.5719755, 23.0343316 ], [ 70.5736395, 23.0339294 ], [ 70.5736335, 23.0334147 ], [ 70.573913, 23.0335402 ], [ 70.5747472, 23.0335319 ], [ 70.5750222, 23.0332719 ], [ 70.5764112, 23.0331297 ], [ 70.5761451, 23.0341619 ], [ 70.5755858, 23.0339101 ], [ 70.5757304, 23.0344234 ], [ 70.5760115, 23.034678 ], [ 70.576163, 23.035706 ], [ 70.5767191, 23.0357005 ], [ 70.5768637, 23.0362138 ], [ 70.5775667, 23.0368498 ], [ 70.578123, 23.0368443 ], [ 70.5792262, 23.0360611 ], [ 70.5803354, 23.0357926 ], [ 70.5804724, 23.0356631 ], [ 70.580606, 23.0351469 ], [ 70.5811621, 23.0351415 ], [ 70.5810196, 23.0348854 ], [ 70.5810077, 23.0338561 ], [ 70.5812827, 23.0335958 ], [ 70.5815518, 23.0328211 ], [ 70.5821018, 23.0323008 ], [ 70.5823709, 23.0315259 ], [ 70.5826459, 23.0312658 ], [ 70.5827794, 23.0307497 ], [ 70.5836121, 23.0306123 ], [ 70.5837491, 23.0304826 ], [ 70.5841517, 23.0291917 ], [ 70.5847062, 23.029057 ], [ 70.5856714, 23.0284044 ], [ 70.5858018, 23.0276308 ], [ 70.5863566, 23.027496 ], [ 70.5873216, 23.0268434 ], [ 70.5877272, 23.0258098 ], [ 70.5880067, 23.0259353 ], [ 70.589397, 23.0259213 ], [ 70.5913341, 23.0251297 ], [ 70.5917911, 23.024827 ], [ 70.5917523, 23.0252547 ], [ 70.5912052, 23.0260322 ], [ 70.5909362, 23.0268071 ], [ 70.5906733, 23.0280967 ], [ 70.5915225, 23.0293751 ], [ 70.591668, 23.0298884 ], [ 70.5922242, 23.0298827 ], [ 70.5922333, 23.0306548 ], [ 70.5941827, 23.0308925 ], [ 70.5941857, 23.03115 ], [ 70.5936297, 23.0311554 ], [ 70.5937773, 23.0319262 ], [ 70.5940583, 23.0321808 ], [ 70.5943484, 23.0332074 ], [ 70.5946297, 23.0334618 ], [ 70.5946327, 23.0337192 ], [ 70.5943575, 23.0339795 ], [ 70.5943696, 23.0350088 ], [ 70.5949319, 23.0355179 ], [ 70.5953569, 23.0361566 ], [ 70.5961912, 23.0361483 ], [ 70.5970315, 23.0366544 ], [ 70.5974975, 23.0371239 ], [ 70.5975983, 23.0375501 ], [ 70.596764, 23.0375584 ], [ 70.5971989, 23.0390984 ], [ 70.59748, 23.0393529 ], [ 70.5980513, 23.040634 ], [ 70.5983324, 23.0408886 ], [ 70.5980695, 23.0421781 ], [ 70.5980755, 23.0426929 ], [ 70.5982167, 23.0428198 ], [ 70.5993335, 23.0431949 ], [ 70.5997623, 23.0442201 ], [ 70.6000434, 23.0444747 ], [ 70.5999109, 23.0449908 ], [ 70.5990797, 23.0452565 ], [ 70.5992275, 23.0460271 ], [ 70.5993684, 23.0461539 ], [ 70.5999262, 23.0462775 ], [ 70.6001227, 23.0474739 ], [ 70.5993836, 23.0474408 ], [ 70.5991071, 23.0475727 ], [ 70.5992516, 23.0480861 ], [ 70.5998139, 23.048595 ], [ 70.5999596, 23.0491084 ], [ 70.5974401, 23.0477177 ], [ 70.5957716, 23.0477347 ], [ 70.5954949, 23.0478666 ], [ 70.5956365, 23.0481225 ], [ 70.5955102, 23.0491533 ], [ 70.5960647, 23.0490186 ], [ 70.5962018, 23.0488889 ], [ 70.5960572, 23.0483756 ], [ 70.5966134, 23.0483699 ], [ 70.5963291, 23.0478581 ], [ 70.5968854, 23.0478525 ], [ 70.5970362, 23.0488806 ], [ 70.5973172, 23.049135 ], [ 70.5970513, 23.0501673 ], [ 70.5970574, 23.050682 ], [ 70.5963717, 23.051461 ], [ 70.5960921, 23.0513348 ], [ 70.5955359, 23.0513403 ], [ 70.5949842, 23.0517324 ], [ 70.5948508, 23.0522486 ], [ 70.5944403, 23.0527674 ], [ 70.5938795, 23.0523866 ], [ 70.5922033, 23.0517604 ], [ 70.5919132, 23.050734 ], [ 70.5907977, 23.0504877 ], [ 70.5906521, 23.0499744 ], [ 70.5899483, 23.0492093 ], [ 70.5893906, 23.0490859 ], [ 70.5877039, 23.0475584 ], [ 70.5871462, 23.0474359 ], [ 70.5884123, 23.04871 ], [ 70.5884153, 23.0489674 ], [ 70.5878712, 23.0500023 ], [ 70.5879232, 23.0506856 ], [ 70.587462, 23.0506495 ], [ 70.5860564, 23.0493767 ], [ 70.5857784, 23.0493794 ], [ 70.5852267, 23.0497716 ], [ 70.5850933, 23.0502877 ], [ 70.5842679, 23.0510681 ], [ 70.5837208, 23.0518457 ], [ 70.5837329, 23.0528751 ], [ 70.5829075, 23.0536555 ], [ 70.5820884, 23.0549505 ], [ 70.5814025, 23.0557296 ], [ 70.5808478, 23.0558634 ], [ 70.5802961, 23.0562554 ], [ 70.5803052, 23.0570275 ], [ 70.5808614, 23.057022 ], [ 70.5810549, 23.0579611 ], [ 70.5808735, 23.0580515 ], [ 70.5808765, 23.0583087 ], [ 70.5811545, 23.0583059 ], [ 70.5812471, 23.0581352 ], [ 70.5819903, 23.0584259 ], [ 70.5831118, 23.0591868 ], [ 70.5843764, 23.0603327 ], [ 70.5846607, 23.0608447 ], [ 70.5853609, 23.0612233 ], [ 70.5862012, 23.0617296 ], [ 70.5867635, 23.0622388 ], [ 70.5887194, 23.0629912 ], [ 70.5900169, 23.0631949 ], [ 70.5915142, 23.0641218 ], [ 70.5913686, 23.0636084 ], [ 70.5906648, 23.0628434 ], [ 70.5902052, 23.0630169 ], [ 70.5901086, 23.062849 ], [ 70.5895524, 23.0628545 ], [ 70.5895493, 23.0625973 ], [ 70.5901056, 23.0625916 ], [ 70.5891195, 23.061572 ], [ 70.588978, 23.0613161 ], [ 70.5914794, 23.0611618 ], [ 70.5925949, 23.0614079 ], [ 70.5927319, 23.0612783 ], [ 70.5931254, 23.0592153 ], [ 70.5942394, 23.0593323 ], [ 70.5956361, 23.059833 ], [ 70.5961938, 23.0599564 ], [ 70.5963414, 23.0607271 ], [ 70.5966227, 23.0609817 ], [ 70.5967682, 23.0614949 ], [ 70.5978852, 23.0618693 ], [ 70.5985877, 23.062506 ], [ 70.599153, 23.0632724 ], [ 70.5997183, 23.064039 ], [ 70.6001483, 23.0650641 ], [ 70.6045998, 23.0651471 ], [ 70.6048808, 23.0654017 ], [ 70.6104465, 23.0656024 ], [ 70.6115542, 23.0652055 ], [ 70.6117083, 23.0664909 ], [ 70.6110286, 23.0677848 ], [ 70.6051711, 23.0664283 ], [ 70.6043369, 23.0664368 ], [ 70.6040617, 23.0666969 ], [ 70.6012775, 23.0664678 ], [ 70.6010008, 23.0665997 ], [ 70.6007349, 23.0676319 ], [ 70.599627, 23.0680288 ], [ 70.5990708, 23.0680344 ], [ 70.5976739, 23.0675338 ], [ 70.59461, 23.067179 ], [ 70.5944977, 23.0694967 ], [ 70.5936877, 23.0715638 ], [ 70.593277, 23.0720828 ], [ 70.5999676, 23.0733021 ], [ 70.5999736, 23.0738167 ], [ 70.6038615, 23.0732626 ], [ 70.6029058, 23.0748165 ], [ 70.6018054, 23.0758573 ], [ 70.6007141, 23.07767 ], [ 70.6007172, 23.0779273 ], [ 70.6010014, 23.0784393 ], [ 70.6019831, 23.0790722 ], [ 70.6024044, 23.0794546 ], [ 70.6029729, 23.0804782 ], [ 70.60452, 23.0818778 ], [ 70.6050795, 23.0821295 ], [ 70.6064854, 23.083402 ], [ 70.6070449, 23.0836538 ], [ 70.609576, 23.0859443 ], [ 70.6101352, 23.086196 ], [ 70.6115414, 23.0874686 ], [ 70.6121008, 23.0877203 ], [ 70.6128065, 23.0886143 ], [ 70.6135102, 23.0892501 ], [ 70.614256079687493, 23.089699118329772 ], [ 70.6143509, 23.0897562 ], [ 70.6144560796875, 23.08976487998714 ], [ 70.6157432, 23.0898711 ], [ 70.6157186, 23.0878124 ], [ 70.6151637, 23.0879464 ], [ 70.614256079687493, 23.087330910621489 ], [ 70.6140418, 23.0871856 ], [ 70.6129199, 23.0864249 ], [ 70.6118058, 23.0863081 ], [ 70.6117935, 23.0852788 ], [ 70.614294, 23.0849959 ], [ 70.6142817, 23.0839664 ], [ 70.6144560796875, 23.0839646129374 ], [ 70.6148379, 23.0839607 ], [ 70.6148441, 23.0844754 ], [ 70.6156801, 23.0845952 ], [ 70.6158171, 23.0844655 ], [ 70.6159506, 23.0839494 ], [ 70.6151131, 23.0837005 ], [ 70.6160738, 23.0826612 ], [ 70.6163458, 23.0821437 ], [ 70.6179963, 23.0805825 ], [ 70.6182683, 23.0800649 ], [ 70.6199186, 23.0785037 ], [ 70.6201906, 23.0779862 ], [ 70.6208787, 23.0773351 ], [ 70.6211569, 23.0773323 ], [ 70.6215814, 23.0779719 ], [ 70.6224281, 23.0789927 ], [ 70.6235531, 23.0800106 ], [ 70.6238375, 23.0805224 ], [ 70.6248224, 23.0814128 ], [ 70.6252469, 23.0820522 ], [ 70.6263718, 23.0830702 ], [ 70.6266561, 23.083582 ], [ 70.6277812, 23.0845999 ], [ 70.6280655, 23.0851117 ], [ 70.6290505, 23.0860019 ], [ 70.6312913, 23.0872658 ], [ 70.6321352, 23.0880291 ], [ 70.6332509, 23.088275 ], [ 70.6343729, 23.0890356 ], [ 70.6349307, 23.089159 ], [ 70.6346682, 23.0904485 ], [ 70.6369044, 23.0913257 ], [ 70.638311, 23.092598 ], [ 70.6394298, 23.0931011 ], [ 70.6398545, 23.0937405 ], [ 70.6397283, 23.0947713 ], [ 70.6400097, 23.0950259 ], [ 70.6416772, 23.0948794 ], [ 70.6418173, 23.095007 ], [ 70.6418298, 23.0960365 ], [ 70.6419709, 23.0961633 ], [ 70.6425289, 23.0962865 ], [ 70.6422444, 23.0957747 ], [ 70.6428023, 23.0958972 ], [ 70.6429426, 23.096025 ], [ 70.6429456, 23.0962822 ], [ 70.6426738, 23.0967999 ], [ 70.6426801, 23.0973145 ], [ 70.6431025, 23.0976957 ], [ 70.6433807, 23.0976929 ], [ 70.6437927, 23.097303 ], [ 70.6446116, 23.0960076 ], [ 70.6447419, 23.095234 ], [ 70.6452966, 23.0950991 ], [ 70.6454336, 23.0949694 ], [ 70.645567, 23.0944532 ], [ 70.6477829, 23.0936581 ], [ 70.6482217, 23.0954551 ], [ 70.6480862, 23.0957139 ], [ 70.6486426, 23.095708 ], [ 70.6487938, 23.096736 ], [ 70.6493565, 23.097245 ], [ 70.6500634, 23.0981378 ], [ 70.6506213, 23.0982612 ], [ 70.6507536, 23.0977451 ], [ 70.651437, 23.0967084 ], [ 70.6500397, 23.0962083 ], [ 70.6511289, 23.0942661 ], [ 70.6516836, 23.0941319 ], [ 70.6516901, 23.0946468 ], [ 70.6525277, 23.0948953 ], [ 70.65266, 23.0943792 ], [ 70.6532068, 23.0936014 ], [ 70.6552605, 23.090877 ], [ 70.6558169, 23.0908711 ], [ 70.6567948, 23.0912474 ], [ 70.656798, 23.0915047 ], [ 70.6543416, 23.0953911 ], [ 70.6529728, 23.097207 ], [ 70.6521603, 23.0990172 ], [ 70.6521635, 23.0992744 ], [ 70.6534236, 23.0999044 ], [ 70.6536097, 23.1002004 ], [ 70.6511996, 23.1000567 ], [ 70.6510758, 23.1013449 ], [ 70.6502539, 23.1023829 ], [ 70.6492932, 23.1034226 ], [ 70.6481836, 23.1036916 ], [ 70.6457489, 23.1093791 ], [ 70.6479855, 23.1102563 ], [ 70.6485419, 23.1102504 ], [ 70.6493641, 23.1092123 ], [ 70.651596, 23.1097037 ], [ 70.656632, 23.1119673 ], [ 70.6577543, 23.1127277 ], [ 70.6580325, 23.1127246 ], [ 70.659801, 23.1094893 ], [ 70.660076, 23.1092291 ], [ 70.660753, 23.1076778 ], [ 70.6609367, 23.1077634 ], [ 70.6601013, 23.1112879 ], [ 70.6587419, 23.1138758 ], [ 70.6587451, 23.1141332 ], [ 70.6594459, 23.1145114 ], [ 70.6608401, 23.1147541 ], [ 70.6609804, 23.1148819 ], [ 70.6611263, 23.115395 ], [ 70.6628035, 23.1160204 ], [ 70.6639625, 23.116342037158077 ], [ 70.673972, 23.1191198 ], [ 70.6726224, 23.1224801 ], [ 70.6754128, 23.1230934 ], [ 70.6762459, 23.1229563 ], [ 70.6770422, 23.1198594 ], [ 70.6789945, 23.1202242 ], [ 70.6796944, 23.1206033 ], [ 70.6796976, 23.1208605 ], [ 70.6783878, 23.1238745 ], [ 70.6782062, 23.1239648 ], [ 70.6775294, 23.1255163 ], [ 70.6768407, 23.1260384 ], [ 70.6768503, 23.1268104 ], [ 70.6771285, 23.1268074 ], [ 70.6774897, 23.1258616 ], [ 70.6779505, 23.1257692 ], [ 70.6785802, 23.1240486 ], [ 70.6790361, 23.1235696 ], [ 70.6795927, 23.1235636 ], [ 70.6798741, 23.123818 ], [ 70.6804305, 23.1238121 ], [ 70.680712, 23.1240665 ], [ 70.6818297, 23.1244411 ], [ 70.6814247, 23.1254748 ], [ 70.6808747, 23.1259955 ], [ 70.6803738, 23.1269418 ], [ 70.6801924, 23.1270323 ], [ 70.6800592, 23.1275485 ], [ 70.6797842, 23.1278087 ], [ 70.6797874, 23.1280659 ], [ 70.6802085, 23.1283188 ], [ 70.6805664, 23.1271158 ], [ 70.6814311, 23.1259896 ], [ 70.6819813, 23.1254689 ], [ 70.682391, 23.1248206 ], [ 70.6846122, 23.1244113 ], [ 70.6847443, 23.1238951 ], [ 70.6854258, 23.1227293 ], [ 70.6859824, 23.1227233 ], [ 70.6862638, 23.1229777 ], [ 70.686822, 23.1231009 ], [ 70.6868284, 23.1236156 ], [ 70.6876645, 23.1237348 ], [ 70.688509, 23.1244978 ], [ 70.6910291, 23.1257577 ], [ 70.6922888, 23.1263882 ], [ 70.6924349, 23.1269013 ], [ 70.6929881, 23.1266381 ], [ 70.6929947, 23.1271527 ], [ 70.6935494, 23.1270176 ], [ 70.6945341, 23.1279081 ], [ 70.6948189, 23.1284199 ], [ 70.6962262, 23.1296915 ], [ 70.6963723, 23.1302049 ], [ 70.6969304, 23.130327 ], [ 70.6983313, 23.1310841 ], [ 70.6987564, 23.1317233 ], [ 70.699879, 23.1324834 ], [ 70.7007269, 23.1335037 ], [ 70.7011495, 23.1338847 ], [ 70.7031054, 23.1345074 ], [ 70.7010733, 23.1389047 ], [ 70.7007981, 23.139165 ], [ 70.7005298, 23.1399401 ], [ 70.7002548, 23.1402003 ], [ 70.7001401, 23.1406613 ], [ 70.6959372, 23.1398605 ], [ 70.6948176, 23.1393578 ], [ 70.6928666, 23.1391213 ], [ 70.6925899, 23.1392534 ], [ 70.6921979, 23.1413166 ], [ 70.6913857, 23.143127 ], [ 70.6911365, 23.1454458 ], [ 70.6912778, 23.1455726 ], [ 70.6976959, 23.1469196 ], [ 70.6972943, 23.1482107 ], [ 70.6971654, 23.1489843 ], [ 70.6966088, 23.1489903 ], [ 70.6958031, 23.1513152 ], [ 70.6980342, 23.1516768 ], [ 70.699432, 23.1521765 ], [ 70.7022281, 23.1531757 ], [ 70.7041793, 23.153412 ], [ 70.7061257, 23.1532629 ], [ 70.7062578, 23.1527465 ], [ 70.7068047, 23.1519686 ], [ 70.7073515, 23.1511905 ], [ 70.7073417, 23.1504186 ], [ 70.7070601, 23.1501642 ], [ 70.707322, 23.1488745 ], [ 70.7077318, 23.1482262 ], [ 70.7080102, 23.1482232 ], [ 70.70857, 23.1484745 ], [ 70.7105178, 23.1484534 ], [ 70.7109266, 23.1478061 ], [ 70.7113251, 23.1462574 ], [ 70.712443, 23.1466309 ], [ 70.7125832, 23.1467584 ], [ 70.7125898, 23.1472731 ], [ 70.7123181, 23.1477909 ], [ 70.7120627, 23.1495951 ], [ 70.7117877, 23.1498556 ], [ 70.7115454, 23.1526892 ], [ 70.712253, 23.1535819 ], [ 70.7130945, 23.1540875 ], [ 70.7144957, 23.1548444 ], [ 70.715897, 23.1556012 ], [ 70.7227558, 23.1587439 ], [ 70.7227592, 23.1590013 ], [ 70.721669, 23.1608147 ], [ 70.7207151, 23.1623693 ], [ 70.7212734, 23.1624915 ], [ 70.7223965, 23.1632513 ], [ 70.7235195, 23.1640111 ], [ 70.7240827, 23.1645197 ], [ 70.7250646, 23.1651529 ], [ 70.725068, 23.1654101 ], [ 70.7243825, 23.1661897 ], [ 70.7215813, 23.1648043 ], [ 70.7185001, 23.1632938 ], [ 70.7131795, 23.1607781 ], [ 70.7098138, 23.1587558 ], [ 70.7092506, 23.1582472 ], [ 70.7084092, 23.1577416 ], [ 70.7075677, 23.1572358 ], [ 70.7067263, 23.1567303 ], [ 70.7058849, 23.1562247 ], [ 70.7056067, 23.1562277 ], [ 70.7045048, 23.1571408 ], [ 70.704375, 23.1579143 ], [ 70.7030062, 23.1597308 ], [ 70.7024659, 23.1610234 ], [ 70.7021909, 23.1612838 ], [ 70.6997575, 23.1669722 ], [ 70.6986768, 23.1695575 ], [ 70.6981591, 23.1726516 ], [ 70.6978839, 23.1729119 ], [ 70.6965475, 23.1773016 ], [ 70.696137, 23.1778208 ], [ 70.6975318, 23.1780631 ], [ 70.6975385, 23.1785777 ], [ 70.6986566, 23.1789514 ], [ 70.6992198, 23.17946 ], [ 70.69992, 23.1798389 ], [ 70.7025762, 23.1807106 ], [ 70.7036995, 23.1814705 ], [ 70.7045443, 23.1822333 ], [ 70.7059425, 23.1827331 ], [ 70.7073506, 23.1840047 ], [ 70.7079106, 23.1842558 ], [ 70.7084657, 23.1841216 ], [ 70.7086142, 23.184892 ], [ 70.7115554, 23.1862751 ], [ 70.714357, 23.1876607 ], [ 70.7144891, 23.1871445 ], [ 70.7150361, 23.1863664 ], [ 70.7158578, 23.185328 ], [ 70.7166832, 23.1845469 ], [ 70.71723, 23.1837688 ], [ 70.7176397, 23.1831205 ], [ 70.7193082, 23.182974 ], [ 70.7194403, 23.1824579 ], [ 70.7194207, 23.1809139 ], [ 70.7199642, 23.1798784 ], [ 70.7209306, 23.1792241 ], [ 70.7214872, 23.179218 ], [ 70.7221876, 23.1795968 ], [ 70.7221943, 23.1801114 ], [ 70.7216507, 23.181147 ], [ 70.7200003, 23.1827091 ], [ 70.7194568, 23.1837446 ], [ 70.7183959, 23.1878741 ], [ 70.7182803, 23.1896767 ], [ 70.7177237, 23.189683 ], [ 70.7178656, 23.1899387 ], [ 70.7177499, 23.1917416 ], [ 70.7222219, 23.1931077 ], [ 70.723892, 23.1930895 ], [ 70.7255558, 23.1925565 ], [ 70.726243, 23.191906 ], [ 70.7273199, 23.1890631 ], [ 70.7273003, 23.1875191 ], [ 70.7270153, 23.1870075 ], [ 70.7271285, 23.1849474 ], [ 70.7307354, 23.1840065 ], [ 70.7311409, 23.1831018 ], [ 70.7311309, 23.1823297 ], [ 70.730144, 23.181311 ], [ 70.7295857, 23.1811882 ], [ 70.7284607, 23.1803001 ], [ 70.7278875, 23.1790196 ], [ 70.7295543, 23.178744 ], [ 70.7298127, 23.1771969 ], [ 70.731206, 23.1773099 ], [ 70.7313464, 23.1774375 ], [ 70.7317777, 23.178462 ], [ 70.734006, 23.1785658 ], [ 70.7344148, 23.1779183 ], [ 70.7345445, 23.1771449 ], [ 70.7355248, 23.1776488 ], [ 70.735528, 23.177906 ], [ 70.7308924, 23.1854206 ], [ 70.730899, 23.1859355 ], [ 70.7306238, 23.1861957 ], [ 70.7295568, 23.1898105 ], [ 70.7292818, 23.190071 ], [ 70.7284732, 23.1921388 ], [ 70.7283774, 23.1954857 ], [ 70.7290663, 23.1949633 ], [ 70.729855, 23.1913515 ], [ 70.7303721, 23.1882575 ], [ 70.7311806, 23.1861897 ], [ 70.7314556, 23.1859292 ], [ 70.7317208, 23.1848969 ], [ 70.7322676, 23.1841188 ], [ 70.7330859, 23.182823 ], [ 70.7336327, 23.1820449 ], [ 70.7341795, 23.1812666 ], [ 70.7347295, 23.1807459 ], [ 70.7352729, 23.1797104 ], [ 70.735686, 23.1793193 ], [ 70.7365144, 23.1787956 ], [ 70.7372046, 23.1784023 ], [ 70.7371882, 23.1771156 ], [ 70.7374632, 23.1768554 ], [ 70.7377316, 23.1760803 ], [ 70.7382782, 23.1753022 ], [ 70.7388281, 23.1747813 ], [ 70.7390538, 23.1740943 ], [ 70.7392362, 23.1740047 ], [ 70.7392328, 23.1737474 ], [ 70.7389546, 23.1737505 ], [ 70.738861, 23.1739204 ], [ 70.7381262, 23.1742744 ], [ 70.7379965, 23.1750478 ], [ 70.7373112, 23.1758276 ], [ 70.7370328, 23.1758306 ], [ 70.7374199, 23.1735101 ], [ 70.7477926, 23.157696 ], [ 70.7486108, 23.1564001 ], [ 70.7487437, 23.1558839 ], [ 70.7490219, 23.1558807 ], [ 70.7491706, 23.1566513 ], [ 70.7493203, 23.1574216 ], [ 70.7498769, 23.1574154 ], [ 70.7497438, 23.1579317 ], [ 70.7483692, 23.1592338 ], [ 70.7479689, 23.160525 ], [ 70.7465807, 23.1607977 ], [ 70.7461895, 23.162861 ], [ 70.7456429, 23.1636392 ], [ 70.7450929, 23.16416 ], [ 70.744553, 23.1654528 ], [ 70.7440032, 23.1659737 ], [ 70.7436029, 23.1672649 ], [ 70.7430461, 23.167271 ], [ 70.7430561, 23.168043 ], [ 70.7433328, 23.1679109 ], [ 70.7438894, 23.1679047 ], [ 70.7450077, 23.1682787 ], [ 70.744603, 23.1693127 ], [ 70.7440565, 23.1700909 ], [ 70.7435099, 23.170869 ], [ 70.7429599, 23.1713899 ], [ 70.7425528, 23.1721665 ], [ 70.7417212, 23.1724329 ], [ 70.7418731, 23.1734607 ], [ 70.7416015, 23.1739786 ], [ 70.7416081, 23.1744932 ], [ 70.7445528, 23.176133 ], [ 70.7453978, 23.1768958 ], [ 70.7473594, 23.1779034 ], [ 70.7482044, 23.1786662 ], [ 70.7493246, 23.1791683 ], [ 70.7501697, 23.1799311 ], [ 70.7510081, 23.1801791 ], [ 70.7512897, 23.1804333 ], [ 70.7521281, 23.1806815 ], [ 70.7524097, 23.1809357 ], [ 70.7532432, 23.1807981 ], [ 70.7532364, 23.1802834 ], [ 70.7540748, 23.1805316 ], [ 70.7542033, 23.179758 ], [ 70.7550283, 23.1789767 ], [ 70.7552999, 23.178459 ], [ 70.7561249, 23.1776777 ], [ 70.7573443, 23.1750905 ], [ 70.7581793, 23.175081 ], [ 70.7583078, 23.1743076 ], [ 70.7591294, 23.1732689 ], [ 70.7590992, 23.1709531 ], [ 70.7604537, 23.1681069 ], [ 70.7604503, 23.1678495 ], [ 70.7600266, 23.1673396 ], [ 70.7577917, 23.1667206 ], [ 70.75695, 23.1662152 ], [ 70.7536087, 23.1661243 ], [ 70.7536019, 23.1656097 ], [ 70.7527637, 23.1653617 ], [ 70.7530285, 23.1643292 ], [ 70.7566382, 23.1636452 ], [ 70.7585862, 23.1636235 ], [ 70.7599844, 23.1641226 ], [ 70.7616527, 23.1639756 ], [ 70.7627321, 23.1613899 ], [ 70.7641388, 23.1625318 ], [ 70.764417, 23.1625288 ], [ 70.7657984, 23.1617412 ], [ 70.7664787, 23.1605758 ], [ 70.7665945, 23.158773 ], [ 70.7643581, 23.158026 ], [ 70.7646163, 23.1564789 ], [ 70.7651712, 23.1563436 ], [ 70.7658578, 23.1556928 ], [ 70.7662674, 23.1550446 ], [ 70.7671022, 23.1550351 ], [ 70.7685004, 23.1555341 ], [ 70.7689224, 23.1559159 ], [ 70.7690687, 23.156429 ], [ 70.7699037, 23.1564195 ], [ 70.7665191, 23.1636637 ], [ 70.7665225, 23.1639211 ], [ 70.7672271, 23.1645562 ], [ 70.7686187, 23.1645405 ], [ 70.7708349, 23.1637435 ], [ 70.7736145, 23.1634549 ], [ 70.7744563, 23.1639601 ], [ 70.7750198, 23.1644685 ], [ 70.7803278, 23.1659527 ], [ 70.7811628, 23.1659433 ], [ 70.782544, 23.1651555 ], [ 70.7844939, 23.1652627 ], [ 70.7840931, 23.1665539 ], [ 70.7842498, 23.1678389 ], [ 70.7848013, 23.1674462 ], [ 70.784968859374999, 23.167444393105232 ], [ 70.7850795, 23.1674432 ], [ 70.785168859375005, 23.167483236191412 ], [ 70.7856395, 23.1676941 ], [ 70.7859179, 23.1676909 ], [ 70.7860547, 23.1675613 ], [ 70.7874121, 23.1649722 ], [ 70.7880999, 23.1643205 ], [ 70.7882819, 23.1642778 ], [ 70.7871681, 23.1675486 ], [ 70.7871749, 23.1680633 ], [ 70.7878763, 23.1684409 ], [ 70.7889997, 23.1692001 ], [ 70.7892781, 23.1691971 ], [ 70.7902293, 23.1675138 ], [ 70.7903622, 23.1669975 ], [ 70.7906404, 23.1669945 ], [ 70.7903964, 23.1695707 ], [ 70.7962668, 23.1714337 ], [ 70.7968234, 23.1714273 ], [ 70.79885, 23.1669007 ], [ 70.7993998, 23.1663798 ], [ 70.7999392, 23.1650869 ], [ 70.7999184, 23.163543 ], [ 70.7997765, 23.1632872 ], [ 70.7992199, 23.1632935 ], [ 70.7992095, 23.1625216 ], [ 70.7986546, 23.1626562 ], [ 70.7980912, 23.1621479 ], [ 70.7964146, 23.1616522 ], [ 70.7944527, 23.1606452 ], [ 70.793331, 23.1600151 ], [ 70.7956308, 23.155099 ], [ 70.7957464, 23.1532961 ], [ 70.7974178, 23.1534054 ], [ 70.798256, 23.1536531 ], [ 70.799091, 23.1536435 ], [ 70.804672, 23.1547384 ], [ 70.8051165, 23.1567921 ], [ 70.8050054, 23.1588522 ], [ 70.8055637, 23.1589741 ], [ 70.8065459, 23.1596066 ], [ 70.8066924, 23.1601198 ], [ 70.8086438, 23.1603547 ], [ 70.8083414, 23.1585566 ], [ 70.8077865, 23.1586911 ], [ 70.8072248, 23.158312 ], [ 70.8072178, 23.1577974 ], [ 70.8088944, 23.1582929 ], [ 70.8087445, 23.1575225 ], [ 70.8083206, 23.1570126 ], [ 70.807764, 23.157019 ], [ 70.8076175, 23.1565061 ], [ 70.8077364, 23.1549605 ], [ 70.8099713, 23.1555777 ], [ 70.8113645, 23.1556909 ], [ 70.8109604, 23.156725 ], [ 70.8109742, 23.1577543 ], [ 70.8119539, 23.1581287 ], [ 70.8120944, 23.1582561 ], [ 70.812533, 23.1597953 ], [ 70.8136444, 23.1596533 ], [ 70.8143448, 23.1600317 ], [ 70.8144915, 23.1605448 ], [ 70.8154546, 23.1597616 ], [ 70.8154442, 23.1589896 ], [ 70.815719, 23.1587291 ], [ 70.8158481, 23.1579555 ], [ 70.8172395, 23.1579395 ], [ 70.8175005, 23.1566497 ], [ 70.8180552, 23.1565142 ], [ 70.8181923, 23.1563844 ], [ 70.8183249, 23.155868 ], [ 70.8169301, 23.1556269 ], [ 70.8171944, 23.1545944 ], [ 70.8174744, 23.1547193 ], [ 70.8180311, 23.1547129 ], [ 70.8184427, 23.1543226 ], [ 70.8182972, 23.1538096 ], [ 70.8177406, 23.1538161 ], [ 70.8175941, 23.1533029 ], [ 70.8167453, 23.1522833 ], [ 70.8164497, 23.151 ], [ 70.8161679, 23.1507458 ], [ 70.8158793, 23.1499771 ], [ 70.8153123, 23.1492115 ], [ 70.8148886, 23.1487017 ], [ 70.8143302, 23.1485791 ], [ 70.8134884, 23.1480741 ], [ 70.8123633, 23.1471865 ], [ 70.8122065, 23.1459017 ], [ 70.8124385, 23.1457291 ], [ 70.8128991, 23.1456363 ], [ 70.8127353, 23.1438367 ], [ 70.8121719, 23.1433285 ], [ 70.8117411, 23.1423039 ], [ 70.8100698, 23.1421941 ], [ 70.8097933, 23.1423264 ], [ 70.8097865, 23.1418117 ], [ 70.8089483, 23.141564 ], [ 70.8089413, 23.1410493 ], [ 70.8100594, 23.141422 ], [ 70.8111741, 23.1415384 ], [ 70.8111673, 23.1410238 ], [ 70.8114455, 23.1410206 ], [ 70.8114525, 23.1415352 ], [ 70.8131237, 23.1416443 ], [ 70.8136784, 23.1415095 ], [ 70.8133934, 23.1409981 ], [ 70.8128385, 23.1411328 ], [ 70.8122768, 23.1407537 ], [ 70.8123692, 23.1405829 ], [ 70.8136612, 23.140223 ], [ 70.8135145, 23.1397099 ], [ 70.8132329, 23.1394558 ], [ 70.8132295, 23.1391984 ], [ 70.8133673, 23.1390678 ], [ 70.8136455, 23.1390646 ], [ 70.8139273, 23.1393186 ], [ 70.8147638, 23.1394383 ], [ 70.8147568, 23.1389236 ], [ 70.8153132, 23.1389172 ], [ 70.8154416, 23.1381436 ], [ 70.8159912, 23.1376225 ], [ 70.8159738, 23.136336 ], [ 70.8163864, 23.1359448 ], [ 70.816936, 23.1354237 ], [ 70.8199931, 23.135131 ], [ 70.8202679, 23.1348705 ], [ 70.8208226, 23.1347359 ], [ 70.8206759, 23.1342228 ], [ 70.8214967, 23.1331839 ], [ 70.8214864, 23.132412 ], [ 70.8221703, 23.1315029 ], [ 70.8235561, 23.1311013 ], [ 70.8235631, 23.1316159 ], [ 70.8246778, 23.1317312 ], [ 70.8248146, 23.1316014 ], [ 70.8250721, 23.1300542 ], [ 70.8253918, 23.1298809 ], [ 70.8254897, 23.1300495 ], [ 70.8257681, 23.1300463 ], [ 70.8257646, 23.1297889 ], [ 70.8253433, 23.1295364 ], [ 70.8251977, 23.1290234 ], [ 70.8315916, 23.1285628 ], [ 70.832155, 23.1290709 ], [ 70.832993, 23.1293186 ], [ 70.8343843, 23.1293024 ], [ 70.8353453, 23.1283908 ], [ 70.8353348, 23.127619 ], [ 70.8351926, 23.1273632 ], [ 70.8337999, 23.1272502 ], [ 70.8332399, 23.1269994 ], [ 70.831567, 23.1267615 ], [ 70.8312854, 23.1265075 ], [ 70.830729, 23.1265139 ], [ 70.8304525, 23.1266462 ], [ 70.8304385, 23.1256171 ], [ 70.8323896, 23.1258516 ], [ 70.8325107, 23.1245636 ], [ 70.8327853, 23.124303 ], [ 70.8327819, 23.1240455 ], [ 70.8324967, 23.1235343 ], [ 70.8316515, 23.1227721 ], [ 70.8316411, 23.122 ], [ 70.8312138, 23.1212328 ], [ 70.8300993, 23.1211168 ], [ 70.8287116, 23.1213901 ], [ 70.8276092, 23.122175 ], [ 70.8253801, 23.1219435 ], [ 70.8237005, 23.1211909 ], [ 70.8228572, 23.1205577 ], [ 70.8229496, 23.1203869 ], [ 70.8236901, 23.1204188 ], [ 70.8239717, 23.120673 ], [ 70.8259175, 23.1205222 ], [ 70.8259105, 23.1200076 ], [ 70.8250758, 23.1200172 ], [ 70.8252006, 23.1189864 ], [ 70.8253384, 23.1188556 ], [ 70.8267328, 23.119097 ], [ 70.827856, 23.119856 ], [ 70.829249, 23.119969 ], [ 70.829242, 23.1194544 ], [ 70.8297984, 23.1194479 ], [ 70.8297914, 23.1189333 ], [ 70.8306241, 23.1187944 ], [ 70.831314, 23.1184009 ], [ 70.8313104, 23.1181434 ], [ 70.8306014, 23.1171223 ], [ 70.8289341, 23.1172699 ], [ 70.8286542, 23.117145 ], [ 70.8286506, 23.1168875 ], [ 70.8294835, 23.1167488 ], [ 70.8300293, 23.1159703 ], [ 70.8302113, 23.1159276 ], [ 70.8305893, 23.1162213 ], [ 70.8311475, 23.116344 ], [ 70.8308623, 23.1158325 ], [ 70.8303994, 23.1157494 ], [ 70.8304304, 23.114808 ], [ 70.8300067, 23.1142982 ], [ 70.8286158, 23.1143143 ], [ 70.8286088, 23.1137999 ], [ 70.8244325, 23.1135908 ], [ 70.8242858, 23.1130777 ], [ 70.8240042, 23.1128237 ], [ 70.8238483, 23.1115387 ], [ 70.8221809, 23.1116861 ], [ 70.8207969, 23.1122168 ], [ 70.8199709, 23.1128702 ], [ 70.8197171, 23.1146747 ], [ 70.8191571, 23.1144237 ], [ 70.8194215, 23.1133912 ], [ 70.8174724, 23.1132846 ], [ 70.8169126, 23.1130336 ], [ 70.8149636, 23.112928 ], [ 70.8149566, 23.1124133 ], [ 70.8135587, 23.1119146 ], [ 70.8135553, 23.1116573 ], [ 70.8141118, 23.1116509 ], [ 70.8141048, 23.1111363 ], [ 70.8146612, 23.1111298 ], [ 70.814668, 23.1116445 ], [ 70.8152261, 23.1117664 ], [ 70.8156481, 23.112148 ], [ 70.8157946, 23.1126609 ], [ 70.8160711, 23.1125286 ], [ 70.817184, 23.1125158 ], [ 70.8174656, 23.11277 ], [ 70.819691, 23.1127443 ], [ 70.8202388, 23.1120951 ], [ 70.8174516, 23.1117407 ], [ 70.8171717, 23.1116158 ], [ 70.8171683, 23.1113583 ], [ 70.8191191, 23.1115933 ], [ 70.8191121, 23.1110786 ], [ 70.8196703, 23.1112003 ], [ 70.8199449, 23.1109399 ], [ 70.8216105, 23.1106632 ], [ 70.8218853, 23.1104028 ], [ 70.8252253, 23.1104933 ], [ 70.8253499, 23.1094625 ], [ 70.8252078, 23.1092068 ], [ 70.8257659, 23.1093285 ], [ 70.8260477, 23.1095825 ], [ 70.8266058, 23.1097052 ], [ 70.8265918, 23.1086759 ], [ 70.8271533, 23.109055 ], [ 70.8287332, 23.1095109 ], [ 70.8285704, 23.1109692 ], [ 70.8289838, 23.1107071 ], [ 70.8293805, 23.1091584 ], [ 70.8290989, 23.1089042 ], [ 70.8289142, 23.108818 ], [ 70.8288137, 23.1083929 ], [ 70.8290936, 23.1085179 ], [ 70.82965, 23.1085114 ], [ 70.8304897, 23.1088881 ], [ 70.8311569, 23.1068216 ], [ 70.8312614, 23.1042467 ], [ 70.8320961, 23.104237 ], [ 70.8318109, 23.1037256 ], [ 70.8309728, 23.103478 ], [ 70.8309658, 23.1029633 ], [ 70.8315206, 23.1028278 ], [ 70.8316574, 23.102698 ], [ 70.8320611, 23.1016638 ], [ 70.8331703, 23.1013937 ], [ 70.8325965, 23.1001134 ], [ 70.8323183, 23.1001168 ], [ 70.8323253, 23.1006313 ], [ 70.8320471, 23.1006347 ], [ 70.8320401, 23.10012 ], [ 70.8306476, 23.100007 ], [ 70.8300964, 23.1003999 ], [ 70.8302282, 23.0998836 ], [ 70.8303659, 23.099753 ], [ 70.8317551, 23.0996086 ], [ 70.8320227, 23.0988333 ], [ 70.8289647, 23.098997 ], [ 70.8284049, 23.0987462 ], [ 70.8270123, 23.0986341 ], [ 70.8270089, 23.0983767 ], [ 70.8295105, 23.0982187 ], [ 70.829922, 23.0978284 ], [ 70.8299152, 23.0973138 ], [ 70.8297731, 23.097058 ], [ 70.8303276, 23.0969223 ], [ 70.830877, 23.0964013 ], [ 70.8315667, 23.0960078 ], [ 70.8316958, 23.0952342 ], [ 70.8319738, 23.095231 ], [ 70.8321265, 23.0962586 ], [ 70.8324081, 23.0965126 ], [ 70.8327001, 23.0975387 ], [ 70.8333051, 23.0978766 ], [ 70.8332669, 23.0983041 ], [ 70.8334083, 23.0984307 ], [ 70.8339664, 23.0985534 ], [ 70.8339734, 23.0990681 ], [ 70.8345296, 23.0990616 ], [ 70.8342374, 23.0980356 ], [ 70.8347955, 23.0981573 ], [ 70.834936, 23.0982848 ], [ 70.8346751, 23.0995746 ], [ 70.8349743, 23.1011153 ], [ 70.8355377, 23.1016235 ], [ 70.8355691, 23.1039393 ], [ 70.8352945, 23.1041998 ], [ 70.8359348, 23.1103689 ], [ 70.8366534, 23.1120331 ], [ 70.8372117, 23.1121557 ], [ 70.8373572, 23.1126687 ], [ 70.8377802, 23.1130493 ], [ 70.8388948, 23.1131654 ], [ 70.8391554, 23.1118756 ], [ 70.838599, 23.1118821 ], [ 70.838592, 23.1113674 ], [ 70.8397029, 23.1112255 ], [ 70.8406638, 23.1103139 ], [ 70.8407965, 23.1097976 ], [ 70.8429205, 23.1093457 ], [ 70.843022, 23.1097717 ], [ 70.8438564, 23.1097619 ], [ 70.843763, 23.1099318 ], [ 70.8424691, 23.1100355 ], [ 70.84234, 23.1108091 ], [ 70.84277, 23.1117044 ], [ 70.8436063, 23.1118237 ], [ 70.8432026, 23.1128579 ], [ 70.8433633, 23.1144001 ], [ 70.8425323, 23.1146672 ], [ 70.8425393, 23.1151818 ], [ 70.8442085, 23.1151624 ], [ 70.8442015, 23.1146477 ], [ 70.8446217, 23.1149 ], [ 70.8446252, 23.1151574 ], [ 70.8442191, 23.1159342 ], [ 70.8433879, 23.1162013 ], [ 70.843395, 23.1167159 ], [ 70.8447806, 23.1163132 ], [ 70.8449174, 23.1161833 ], [ 70.8447683, 23.1154132 ], [ 70.8453264, 23.1155349 ], [ 70.8458881, 23.1159148 ], [ 70.8458811, 23.1154001 ], [ 70.8467158, 23.1153903 ], [ 70.8468473, 23.1148741 ], [ 70.8478161, 23.1144763 ], [ 70.8486508, 23.1144665 ], [ 70.8492017, 23.1140745 ], [ 70.8488088, 23.1158806 ], [ 70.8491185, 23.1181932 ], [ 70.8506685, 23.1195899 ], [ 70.8515067, 23.1198375 ], [ 70.8526319, 23.1207254 ], [ 70.8527598, 23.1199518 ], [ 70.8524782, 23.1196978 ], [ 70.8524746, 23.1194406 ], [ 70.8530134, 23.1181474 ], [ 70.8530063, 23.1176328 ], [ 70.8534153, 23.1169841 ], [ 70.8542463, 23.1167169 ], [ 70.8550809, 23.1167072 ], [ 70.85731, 23.1169382 ], [ 70.8581516, 23.117443 ], [ 70.8603824, 23.1178032 ], [ 70.8605389, 23.1190883 ], [ 70.8613877, 23.1201075 ], [ 70.8616942, 23.1221627 ], [ 70.862543, 23.1231822 ], [ 70.8633882, 23.1239442 ], [ 70.8641127, 23.1259945 ], [ 70.8646691, 23.1259879 ], [ 70.8651002, 23.1270123 ], [ 70.8651215, 23.1285562 ], [ 70.8649866, 23.1288151 ], [ 70.86443, 23.1288218 ], [ 70.8644479, 23.1301083 ], [ 70.8655555, 23.1297087 ], [ 70.8663829, 23.1291841 ], [ 70.8673438, 23.1282725 ], [ 70.8677526, 23.1276239 ], [ 70.8702565, 23.1275942 ], [ 70.8703933, 23.1274644 ], [ 70.8707968, 23.1264302 ], [ 70.8713532, 23.1264235 ], [ 70.8713427, 23.1256515 ], [ 70.8730208, 23.1262746 ], [ 70.8738571, 23.1263937 ], [ 70.8739743, 23.1248482 ], [ 70.8735362, 23.1233094 ], [ 70.8807963, 23.1251525 ], [ 70.8814967, 23.1255307 ], [ 70.8819505, 23.1280988 ], [ 70.8813939, 23.1281055 ], [ 70.8815398, 23.1286184 ], [ 70.8798921, 23.1301822 ], [ 70.8793462, 23.1309607 ], [ 70.8788509, 23.1353417 ], [ 70.879436, 23.1373935 ], [ 70.8805632, 23.1384095 ], [ 70.8805704, 23.138924 ], [ 70.8809938, 23.1393046 ], [ 70.8818267, 23.1391665 ], [ 70.8819473, 23.1378783 ], [ 70.8802311, 23.1345532 ], [ 70.8803493, 23.1330075 ], [ 70.8809076, 23.1331293 ], [ 70.8816224, 23.1345366 ], [ 70.8831639, 23.1352903 ], [ 70.8831567, 23.1347756 ], [ 70.8842642, 23.1343759 ], [ 70.8845388, 23.1341153 ], [ 70.8859246, 23.1337131 ], [ 70.8860559, 23.1331967 ], [ 70.8863306, 23.1329361 ], [ 70.8864593, 23.1321625 ], [ 70.8867377, 23.1321593 ], [ 70.8870697, 23.1360155 ], [ 70.889292, 23.1357316 ], [ 70.8891272, 23.1339321 ], [ 70.889265, 23.1338013 ], [ 70.8901015, 23.1339204 ], [ 70.8909072, 23.131852 ], [ 70.8950967, 23.1329592 ], [ 70.8962096, 23.1329459 ], [ 70.8970406, 23.1326785 ], [ 70.8980049, 23.132024 ], [ 70.8981336, 23.1312504 ], [ 70.8998102, 23.1317448 ], [ 70.899821, 23.1325167 ], [ 70.9006575, 23.132635 ], [ 70.9020378, 23.1318463 ], [ 70.9034252, 23.1315721 ], [ 70.9035621, 23.1314422 ], [ 70.9036944, 23.1309259 ], [ 70.904529, 23.1309159 ], [ 70.9045362, 23.1314305 ], [ 70.9050926, 23.1314237 ], [ 70.9044256, 23.1334906 ], [ 70.9044366, 23.1342625 ], [ 70.9068183, 23.1353914 ], [ 70.9071001, 23.1356454 ], [ 70.9079367, 23.1357643 ], [ 70.907673, 23.136797 ], [ 70.9037724, 23.1364575 ], [ 70.9034961, 23.13659 ], [ 70.9025545, 23.1389176 ], [ 70.9020053, 23.1394388 ], [ 70.9018739, 23.1399552 ], [ 70.9007628, 23.1400967 ], [ 70.9004808, 23.1398429 ], [ 70.8993625, 23.1394708 ], [ 70.8993553, 23.1389561 ], [ 70.8987989, 23.1389629 ], [ 70.8989011, 23.1363882 ], [ 70.8985976, 23.1345904 ], [ 70.8988722, 23.1343296 ], [ 70.8988613, 23.1335577 ], [ 70.8987191, 23.1333022 ], [ 70.8978881, 23.1335694 ], [ 70.8977556, 23.1340858 ], [ 70.8969319, 23.1348677 ], [ 70.8969499, 23.1361542 ], [ 70.8971003, 23.1369246 ], [ 70.8948764, 23.1370795 ], [ 70.8940453, 23.1373468 ], [ 70.8932179, 23.1378715 ], [ 70.8918429, 23.1390465 ], [ 70.8917106, 23.1395628 ], [ 70.890894, 23.1408594 ], [ 70.8906447, 23.1429212 ], [ 70.8898206, 23.1437031 ], [ 70.8895534, 23.1444783 ], [ 70.8895642, 23.1452502 ], [ 70.8909879, 23.1475494 ], [ 70.8915553, 23.1483147 ], [ 70.8916129, 23.1524315 ], [ 70.8913528, 23.1537214 ], [ 70.8948006, 23.1614004 ], [ 70.8957877, 23.1622889 ], [ 70.8991306, 23.1625059 ], [ 70.8996946, 23.1630139 ], [ 70.908876, 23.1627747 ], [ 70.9093075, 23.1637989 ], [ 70.9105692, 23.1644263 ], [ 70.9125208, 23.1646601 ], [ 70.9133521, 23.1643925 ], [ 70.9141869, 23.1643825 ], [ 70.9144689, 23.1646363 ], [ 70.9153037, 23.1646263 ], [ 70.9230808, 23.1635021 ], [ 70.9244649, 23.1629705 ], [ 70.9259357, 23.1618824 ], [ 70.9272366, 23.1621646 ], [ 70.9275186, 23.1624184 ], [ 70.9375291, 23.1617809 ], [ 70.9391912, 23.1612457 ], [ 70.9411131, 23.1594207 ], [ 70.9424934, 23.1586316 ], [ 70.9431793, 23.1579801 ], [ 70.9437247, 23.1572014 ], [ 70.9442589, 23.1556507 ], [ 70.9445335, 23.1553901 ], [ 70.9453422, 23.1535787 ], [ 70.9457006, 23.1494566 ], [ 70.9462553, 23.1493207 ], [ 70.9465297, 23.1490599 ], [ 70.9481974, 23.1489111 ], [ 70.9482086, 23.149683 ], [ 70.9486217, 23.1494205 ], [ 70.9487538, 23.1489043 ], [ 70.9493122, 23.1490255 ], [ 70.9495849, 23.1486367 ], [ 70.9490285, 23.1486435 ], [ 70.9491632, 23.1483846 ], [ 70.9491559, 23.1478699 ], [ 70.9487315, 23.1473604 ], [ 70.9476204, 23.1475023 ], [ 70.9473384, 23.1472485 ], [ 70.9437176, 23.1470359 ], [ 70.9428773, 23.1466607 ], [ 70.9427302, 23.1461478 ], [ 70.9423061, 23.1456384 ], [ 70.9417495, 23.1456452 ], [ 70.9418809, 23.1451289 ], [ 70.9427081, 23.144604 ], [ 70.942697, 23.1438321 ], [ 70.9408629, 23.1420533 ], [ 70.9397444, 23.1416806 ], [ 70.9383553, 23.1418269 ], [ 70.9383626, 23.1423415 ], [ 70.9344654, 23.1422602 ], [ 70.9339036, 23.1418815 ], [ 70.9338998, 23.1416242 ], [ 70.9347344, 23.141614 ], [ 70.9347234, 23.1408422 ], [ 70.9336049, 23.1404693 ], [ 70.9330504, 23.1406053 ], [ 70.9330393, 23.1398333 ], [ 70.9324828, 23.1398403 ], [ 70.9324791, 23.1395829 ], [ 70.9330338, 23.139447 ], [ 70.9331704, 23.1393171 ], [ 70.9333027, 23.1388008 ], [ 70.9341392, 23.1389187 ], [ 70.9344212, 23.1391725 ], [ 70.9366507, 23.1394025 ], [ 70.9371997, 23.1388811 ], [ 70.9374779, 23.1388777 ], [ 70.9377599, 23.1391315 ], [ 70.9391566, 23.1395008 ], [ 70.9395883, 23.140525 ], [ 70.9398701, 23.1407788 ], [ 70.9400171, 23.1412918 ], [ 70.9414101, 23.1414027 ], [ 70.9416847, 23.1411421 ], [ 70.9422392, 23.141007 ], [ 70.9422318, 23.1404923 ], [ 70.9430684, 23.1406103 ], [ 70.9444539, 23.1402077 ], [ 70.9444392, 23.1391784 ], [ 70.9469599, 23.1403048 ], [ 70.9472381, 23.1403014 ], [ 70.9481834, 23.1383602 ], [ 70.9483212, 23.1382294 ], [ 70.9488758, 23.1380943 ], [ 70.9494063, 23.1362863 ], [ 70.9513518, 23.136133 ], [ 70.9519045, 23.1358688 ], [ 70.9524611, 23.135862 ], [ 70.9530211, 23.1361124 ], [ 70.9552505, 23.1363421 ], [ 70.9565189, 23.137485 ], [ 70.9565227, 23.1377422 ], [ 70.9559736, 23.1382636 ], [ 70.9555681, 23.1390408 ], [ 70.953895, 23.1388042 ], [ 70.9540373, 23.1390597 ], [ 70.9536541, 23.1413806 ], [ 70.9553178, 23.1409735 ], [ 70.9561375, 23.139934 ], [ 70.9575212, 23.139402 ], [ 70.9577956, 23.1391413 ], [ 70.9589067, 23.1389992 ], [ 70.9588992, 23.1384848 ], [ 70.9583428, 23.1384916 ], [ 70.9583316, 23.1377197 ], [ 70.9586117, 23.1378444 ], [ 70.9597245, 23.1378306 ], [ 70.9613883, 23.1374243 ], [ 70.9613957, 23.1379389 ], [ 70.9597338, 23.1384744 ], [ 70.9594707, 23.1395069 ], [ 70.9586359, 23.1395173 ], [ 70.9583634, 23.1399062 ], [ 70.958087, 23.1400389 ], [ 70.9580906, 23.1402961 ], [ 70.9589255, 23.1402857 ], [ 70.9587357, 23.1398611 ], [ 70.9597563, 23.1400181 ], [ 70.9597489, 23.1395035 ], [ 70.9611343, 23.1390998 ], [ 70.9616833, 23.1385783 ], [ 70.9627924, 23.1383071 ], [ 70.9630668, 23.1380463 ], [ 70.9644505, 23.1375144 ], [ 70.9658396, 23.1373689 ], [ 70.9658323, 23.1368543 ], [ 70.9663868, 23.1367182 ], [ 70.9675015, 23.1368335 ], [ 70.9677947, 23.1378592 ], [ 70.9686295, 23.1378488 ], [ 70.9685399, 23.1382761 ], [ 70.9680785, 23.1382411 ], [ 70.9669544, 23.1374833 ], [ 70.9661143, 23.1371081 ], [ 70.9658472, 23.1378836 ], [ 70.9647363, 23.1380255 ], [ 70.9644616, 23.1382863 ], [ 70.9639071, 23.1384224 ], [ 70.9640959, 23.1388461 ], [ 70.9633564, 23.1388148 ], [ 70.96308, 23.1389474 ], [ 70.9629479, 23.1394636 ], [ 70.9626735, 23.1397244 ], [ 70.9622715, 23.1407588 ], [ 70.9625478, 23.1406263 ], [ 70.9631044, 23.1406193 ], [ 70.9633883, 23.1410022 ], [ 70.9611679, 23.1414154 ], [ 70.9581075, 23.1414536 ], [ 70.957833, 23.1417142 ], [ 70.9558948, 23.1423821 ], [ 70.9559022, 23.1428968 ], [ 70.9550676, 23.1429072 ], [ 70.9549355, 23.1434235 ], [ 70.954112, 23.1442056 ], [ 70.9541194, 23.1447203 ], [ 70.9548415, 23.1465127 ], [ 70.9554, 23.1466341 ], [ 70.9556818, 23.1468879 ], [ 70.9559602, 23.1468845 ], [ 70.9562347, 23.1466237 ], [ 70.9579003, 23.1463457 ], [ 70.959002, 23.14556 ], [ 70.9598368, 23.1455496 ], [ 70.9599772, 23.145677 ], [ 70.9598461, 23.1461931 ], [ 70.9592897, 23.1462001 ], [ 70.9592972, 23.1467148 ], [ 70.9584624, 23.1467252 ], [ 70.95847, 23.1472396 ], [ 70.957637, 23.1473783 ], [ 70.957088, 23.1478998 ], [ 70.9565335, 23.1480359 ], [ 70.9564051, 23.1488095 ], [ 70.9558561, 23.1493309 ], [ 70.9554541, 23.1503653 ], [ 70.9537884, 23.1506433 ], [ 70.9536561, 23.1511597 ], [ 70.9533817, 23.1514203 ], [ 70.952573, 23.1532319 ], [ 70.9520277, 23.1540105 ], [ 70.9520353, 23.1545252 ], [ 70.9514862, 23.1550466 ], [ 70.9509519, 23.1565974 ], [ 70.950147, 23.1586662 ], [ 70.9504737, 23.1620075 ], [ 70.9507707, 23.1632906 ], [ 70.950496, 23.1635513 ], [ 70.9505408, 23.166639 ], [ 70.9516801, 23.1684261 ], [ 70.9529496, 23.1695681 ], [ 70.954074, 23.1703262 ], [ 70.956868, 23.1710634 ], [ 70.9574359, 23.1718283 ], [ 70.9579925, 23.1718215 ], [ 70.9585454, 23.1715573 ], [ 70.9599406, 23.1717973 ], [ 70.9603705, 23.172693 ], [ 70.9610799, 23.1735845 ], [ 70.9622006, 23.1740852 ], [ 70.9638665, 23.1738072 ], [ 70.9642779, 23.1734163 ], [ 70.9645412, 23.1723838 ], [ 70.9635452, 23.1708521 ], [ 70.9629867, 23.1707299 ], [ 70.9618678, 23.1703583 ], [ 70.9617132, 23.1693309 ], [ 70.9611417, 23.1683086 ], [ 70.96127, 23.167535 ], [ 70.9632086, 23.1668671 ], [ 70.9634832, 23.1666063 ], [ 70.964867, 23.1660742 ], [ 70.9652783, 23.1656836 ], [ 70.9652634, 23.1646545 ], [ 70.9657584, 23.1634492 ], [ 70.9659408, 23.1633592 ], [ 70.9665272, 23.1654106 ], [ 70.9670857, 23.165532 ], [ 70.9683545, 23.1666745 ], [ 70.9690676, 23.1678232 ], [ 70.9696259, 23.1679453 ], [ 70.968565, 23.1620398 ], [ 70.9681367, 23.1612731 ], [ 70.9659219, 23.1620727 ], [ 70.9653465, 23.1607932 ], [ 70.9642297, 23.1605498 ], [ 70.9639402, 23.1597815 ], [ 70.9633838, 23.1597883 ], [ 70.9629134, 23.1561914 ], [ 70.9633256, 23.1557998 ], [ 70.9641528, 23.1552748 ], [ 70.964431, 23.1552714 ], [ 70.9651394, 23.1561636 ], [ 70.9665495, 23.1574328 ], [ 70.9673993, 23.1584515 ], [ 70.9683981, 23.1601113 ], [ 70.9689545, 23.1601043 ], [ 70.9696442, 23.1597102 ], [ 70.9694979, 23.1591973 ], [ 70.9700564, 23.1593186 ], [ 70.970479, 23.1596998 ], [ 70.9703516, 23.1604734 ], [ 70.972023, 23.1605808 ], [ 70.9736888, 23.1603025 ], [ 70.9739634, 23.1600417 ], [ 70.9747943, 23.1597739 ], [ 70.9756291, 23.1597635 ], [ 70.97618, 23.159371 ], [ 70.9761876, 23.1598856 ], [ 70.9795191, 23.159329 ], [ 70.9796691, 23.1600992 ], [ 70.9795342, 23.1603583 ], [ 70.9800908, 23.1603513 ], [ 70.9802409, 23.1611213 ], [ 70.9805229, 23.1613751 ], [ 70.9806701, 23.1618881 ], [ 70.9812284, 23.1620092 ], [ 70.981937, 23.1629015 ], [ 70.9827793, 23.1634055 ], [ 70.9827944, 23.1644347 ], [ 70.9825351, 23.1657246 ], [ 70.9831031, 23.1664895 ], [ 70.9828929, 23.1711243 ], [ 70.9836024, 23.1720156 ], [ 70.9850014, 23.1725127 ], [ 70.9872278, 23.1724845 ], [ 70.9888899, 23.1719489 ], [ 71.0008407, 23.170768 ], [ 71.0027944, 23.1711296 ], [ 71.0020171, 23.1749996 ], [ 71.003136, 23.1753709 ], [ 71.004249, 23.1753568 ], [ 71.0045312, 23.1756106 ], [ 71.0059303, 23.1761075 ], [ 71.0078783, 23.1760825 ], [ 71.0081528, 23.1758217 ], [ 71.0095404, 23.1755467 ], [ 71.0120258, 23.1742283 ], [ 71.0147931, 23.1731634 ], [ 71.015525, 23.173063640967239 ], [ 71.015669894531499, 23.173043891632201 ], [ 71.015725, 23.173036380676827 ], [ 71.0189596, 23.1725955 ], [ 71.019234, 23.1723347 ], [ 71.0208999, 23.1720559 ], [ 71.0214487, 23.1715341 ], [ 71.0264461, 23.1706979 ], [ 71.0339556, 23.1703437 ], [ 71.0389802, 23.171308 ], [ 71.040101, 23.1718081 ], [ 71.0426152, 23.1724193 ], [ 71.0426232, 23.172934 ], [ 71.045976, 23.1737905 ], [ 71.0476496, 23.1740262 ], [ 71.049049, 23.1745227 ], [ 71.0498915, 23.1750264 ], [ 71.0504559, 23.1755337 ], [ 71.0524196, 23.1765375 ], [ 71.0532544, 23.1765265 ], [ 71.0540972, 23.1770302 ], [ 71.0548023, 23.1776648 ], [ 71.0553706, 23.1784293 ], [ 71.0555122, 23.1785558 ], [ 71.0562172, 23.1791903 ], [ 71.0563687, 23.1799602 ], [ 71.0572036, 23.1799495 ], [ 71.0572115, 23.1804639 ], [ 71.0580482, 23.1805813 ], [ 71.0590316, 23.1812122 ], [ 71.0597456, 23.1823604 ], [ 71.0603022, 23.182353 ], [ 71.0617133, 23.1836212 ], [ 71.0628325, 23.1839929 ], [ 71.0628403, 23.1845076 ], [ 71.063134297656248, 23.184571219682546 ], [ 71.063134297656248, 23.18457121968255 ], [ 71.063399, 23.1846285 ], [ 71.0660798, 23.1870383 ], [ 71.0662274, 23.1875511 ], [ 71.066784, 23.1875439 ], [ 71.0669344, 23.1883139 ], [ 71.0676407, 23.1889474 ], [ 71.0682013, 23.1891974 ], [ 71.0707416, 23.19148 ], [ 71.0713022, 23.1917298 ], [ 71.0728543, 23.1931252 ], [ 71.0734268, 23.194147 ], [ 71.0742776, 23.1951651 ], [ 71.0749837, 23.1957986 ], [ 71.0758208, 23.1959168 ], [ 71.0758288, 23.1964312 ], [ 71.0763854, 23.1964238 ], [ 71.0761149, 23.1969421 ], [ 71.0766736, 23.197063 ], [ 71.0768142, 23.1971902 ], [ 71.0769618, 23.197703 ], [ 71.0775184, 23.1976956 ], [ 71.0775264, 23.1982101 ], [ 71.078085, 23.198331 ], [ 71.0790686, 23.1989617 ], [ 71.0792162, 23.1994745 ], [ 71.079773, 23.1994671 ], [ 71.0799236, 23.2002371 ], [ 71.0820533, 23.2029103 ], [ 71.0834451, 23.202892 ], [ 71.083702919332481, 23.203124098349431 ], [ 71.0838681, 23.2032728 ], [ 71.0844447, 23.2045518 ], [ 71.0852876, 23.2050553 ], [ 71.0854352, 23.205568 ], [ 71.0865526, 23.2058105 ], [ 71.0865606, 23.206325 ], [ 71.0871192, 23.2064458 ], [ 71.0875462, 23.207084 ], [ 71.0886757, 23.2080982 ], [ 71.0888272, 23.2088682 ], [ 71.0893859, 23.2089889 ], [ 71.0900954, 23.2098806 ], [ 71.0908017, 23.2105142 ], [ 71.0913625, 23.210764 ], [ 71.0927741, 23.2120318 ], [ 71.0933349, 23.2122817 ], [ 71.094182, 23.2130424 ], [ 71.0947407, 23.2131641 ], [ 71.0954602, 23.2146984 ], [ 71.095612, 23.2154684 ], [ 71.0961646, 23.2152038 ], [ 71.0961727, 23.2157183 ], [ 71.0970077, 23.2157071 ], [ 71.0970157, 23.2162218 ], [ 71.0975745, 23.2163424 ], [ 71.0978569, 23.216596 ], [ 71.099119, 23.2172229 ], [ 71.0992666, 23.2177357 ], [ 71.1003861, 23.2181061 ], [ 71.101374, 23.218994 ], [ 71.1018021, 23.2196312 ], [ 71.1034844, 23.2203807 ], [ 71.1045998, 23.2204949 ], [ 71.1047467, 23.2210076 ], [ 71.1085314, 23.2226291 ], [ 71.109088, 23.2226215 ], [ 71.1100559, 23.2222229 ], [ 71.1103139, 23.220933 ], [ 71.1104517, 23.220802 ], [ 71.1118393, 23.2205259 ], [ 71.1129448, 23.2199965 ], [ 71.1147272, 23.2183004 ], [ 71.1148588, 23.2177839 ], [ 71.1154135, 23.2176474 ], [ 71.119851, 23.2165582 ], [ 71.1212305, 23.2157676 ], [ 71.1264989, 23.2144098 ], [ 71.1303711, 23.2128135 ], [ 71.133429, 23.2125147 ], [ 71.1337032, 23.2122537 ], [ 71.134534, 23.2119852 ], [ 71.1348083, 23.211724 ], [ 71.1370228, 23.210922 ], [ 71.1381239, 23.210135 ], [ 71.1403382, 23.2093329 ], [ 71.1406125, 23.2090719 ], [ 71.1417196, 23.2086712 ], [ 71.1418502, 23.2081549 ], [ 71.1425382, 23.2076308 ], [ 71.1425465, 23.2081454 ], [ 71.1435078, 23.2073603 ], [ 71.1433609, 23.2068476 ], [ 71.1441959, 23.2068362 ], [ 71.1443263, 23.2063199 ], [ 71.1447382, 23.2059277 ], [ 71.1499852, 23.2032828 ], [ 71.150278011236239, 23.203188121371348 ], [ 71.1516469, 23.2027455 ], [ 71.1519211, 23.2024845 ], [ 71.1524758, 23.2023486 ], [ 71.1526062, 23.2018323 ], [ 71.1530179, 23.2014403 ], [ 71.1535726, 23.2013044 ], [ 71.153703, 23.200788 ], [ 71.1538406, 23.2006569 ], [ 71.159112, 23.1995554 ], [ 71.1596603, 23.1990332 ], [ 71.1629793, 23.1977011 ], [ 71.163806, 23.1971749 ], [ 71.1643543, 23.1966529 ], [ 71.1653174, 23.1959967 ], [ 71.1666674, 23.193405 ], [ 71.1674609, 23.1908208 ], [ 71.1680866, 23.1864378 ], [ 71.16753, 23.1864454 ], [ 71.1665059, 23.1833717 ], [ 71.1664934, 23.1826 ], [ 71.1667635, 23.1820816 ], [ 71.1666081, 23.1810544 ], [ 71.1668865, 23.1810506 ], [ 71.1671813, 23.1820759 ], [ 71.1677378, 23.1820682 ], [ 71.167889, 23.182838 ], [ 71.1684578, 23.1836021 ], [ 71.168882, 23.1839818 ], [ 71.169719, 23.1840993 ], [ 71.1701857, 23.1871808 ], [ 71.1707548, 23.1879449 ], [ 71.1709027, 23.1884575 ], [ 71.1723004, 23.1888238 ], [ 71.1728651, 23.1893305 ], [ 71.1759472, 23.1905745 ], [ 71.1829128, 23.1909927 ], [ 71.1856831, 23.1901823 ], [ 71.1942849, 23.1885187 ], [ 71.1953979, 23.188503 ], [ 71.1965026, 23.1879731 ], [ 71.2034554, 23.1876185 ], [ 71.2037379, 23.187872 ], [ 71.2040161, 23.187868 ], [ 71.2041528, 23.1877378 ], [ 71.2042798, 23.1869642 ], [ 71.2081735, 23.1867805 ], [ 71.2087216, 23.1862581 ], [ 71.2098282, 23.185857 ], [ 71.2098367, 23.1863715 ], [ 71.2103869, 23.1859774 ], [ 71.2112197, 23.1858376 ], [ 71.2113499, 23.185321 ], [ 71.2129942, 23.183754 ], [ 71.2132639, 23.1832356 ], [ 71.2142278, 23.1825783 ], [ 71.2150626, 23.1825666 ], [ 71.2161586, 23.181522 ], [ 71.2171257, 23.1811228 ], [ 71.2172569, 23.1806062 ], [ 71.2178133, 23.1805985 ], [ 71.217805, 23.1800839 ], [ 71.2180832, 23.1800801 ], [ 71.2182346, 23.1808499 ], [ 71.2183763, 23.1809759 ], [ 71.2186545, 23.1809722 ], [ 71.218791, 23.1808419 ], [ 71.2187825, 23.1803275 ], [ 71.217935, 23.1795675 ], [ 71.2179265, 23.179053 ], [ 71.2186079, 23.1781423 ], [ 71.2194383, 23.1778733 ], [ 71.2202752, 23.1779907 ], [ 71.2204054, 23.1774741 ], [ 71.220819, 23.1772111 ], [ 71.2202922, 23.1790196 ], [ 71.2197358, 23.1790275 ], [ 71.21974, 23.1792848 ], [ 71.2208573, 23.1795263 ], [ 71.2207092, 23.1790137 ], [ 71.2212573, 23.1784913 ], [ 71.2211059, 23.1777215 ], [ 71.2216623, 23.1777138 ], [ 71.221784, 23.1766828 ], [ 71.2225975, 23.1753847 ], [ 71.2224502, 23.1748722 ], [ 71.2232894, 23.1751175 ], [ 71.2232809, 23.174603 ], [ 71.2238373, 23.1745953 ], [ 71.2239845, 23.1751079 ], [ 71.2241261, 23.1752339 ], [ 71.2246848, 23.1753553 ], [ 71.2248065, 23.1743243 ], [ 71.2246593, 23.1738117 ], [ 71.2241049, 23.1739478 ], [ 71.2238246, 23.1738234 ], [ 71.2242287, 23.1730459 ], [ 71.2242244, 23.1727886 ], [ 71.223942, 23.1725352 ], [ 71.2239335, 23.1720207 ], [ 71.2235081, 23.1715121 ], [ 71.224345, 23.1716286 ], [ 71.2244814, 23.1714983 ], [ 71.2247426, 23.1704655 ], [ 71.22488, 23.1703343 ], [ 71.2262692, 23.1701865 ], [ 71.2264206, 23.1709563 ], [ 71.2267031, 23.1712097 ], [ 71.2268511, 23.1717221 ], [ 71.2274034, 23.1714571 ], [ 71.2274162, 23.1722288 ], [ 71.2276923, 23.1720958 ], [ 71.228527, 23.172084 ], [ 71.2288095, 23.1723373 ], [ 71.2335353, 23.172013 ], [ 71.2349159, 23.1713505 ], [ 71.2349244, 23.171865 ], [ 71.2354808, 23.1718572 ], [ 71.2355596, 23.1682538 ], [ 71.2358337, 23.1679926 ], [ 71.2356736, 23.1667081 ], [ 71.2351172, 23.1667161 ], [ 71.2351043, 23.1659444 ], [ 71.2334372, 23.1660962 ], [ 71.2331569, 23.165972 ], [ 71.2327006, 23.1636626 ], [ 71.2321355, 23.1631561 ], [ 71.2317016, 23.162133 ], [ 71.2311495, 23.162398 ], [ 71.2309928, 23.161371 ], [ 71.2304194, 23.16035 ], [ 71.230268, 23.1595802 ], [ 71.2297093, 23.1594588 ], [ 71.229427, 23.1592056 ], [ 71.2283098, 23.158964 ], [ 71.2274773, 23.159105 ], [ 71.228021, 23.1583254 ], [ 71.2271841, 23.158208 ], [ 71.2263389, 23.1575772 ], [ 71.2263474, 23.1580918 ], [ 71.2255043, 23.1575891 ], [ 71.2253349, 23.1557902 ], [ 71.2251921, 23.1555348 ], [ 71.2246398, 23.1558 ], [ 71.2243448, 23.1547749 ], [ 71.2240686, 23.154907 ], [ 71.2235101, 23.1547868 ], [ 71.2235058, 23.1545295 ], [ 71.2240601, 23.1543925 ], [ 71.224334, 23.1541313 ], [ 71.2248904, 23.1541236 ], [ 71.2251709, 23.1542487 ], [ 71.2251624, 23.1537342 ], [ 71.2253463, 23.1538191 ], [ 71.2254491, 23.1542447 ], [ 71.2262835, 23.154233 ], [ 71.2267175, 23.1552561 ], [ 71.2269998, 23.1555093 ], [ 71.2268698, 23.1560259 ], [ 71.2282588, 23.1558771 ], [ 71.2289645, 23.1565108 ], [ 71.2298203, 23.1577853 ], [ 71.2299726, 23.1585551 ], [ 71.230527, 23.158418 ], [ 71.2306634, 23.158288 ], [ 71.2307946, 23.1577715 ], [ 71.2316356, 23.1581451 ], [ 71.2327485, 23.1581292 ], [ 71.2336001, 23.1591464 ], [ 71.2352758, 23.1595091 ], [ 71.2350722, 23.1556524 ], [ 71.2352096, 23.1555212 ], [ 71.2354878, 23.1555173 ], [ 71.2356286, 23.1556445 ], [ 71.2357768, 23.156157 ], [ 71.2366071, 23.1558879 ], [ 71.2366199, 23.1566596 ], [ 71.2371741, 23.1565225 ], [ 71.2373107, 23.1563925 ], [ 71.2374374, 23.1556187 ], [ 71.2379938, 23.1556108 ], [ 71.2379768, 23.1545819 ], [ 71.2385332, 23.154574 ], [ 71.2386889, 23.155601 ], [ 71.2384236, 23.1563766 ], [ 71.2384362, 23.1571485 ], [ 71.2381796, 23.1584386 ], [ 71.2383211, 23.1585649 ], [ 71.2397144, 23.1586741 ], [ 71.2393052, 23.1591946 ], [ 71.2391837, 23.1602256 ], [ 71.2402022, 23.1602986 ], [ 71.2403007, 23.160467 ], [ 71.2411333, 23.160326 ], [ 71.2412697, 23.1601959 ], [ 71.2414009, 23.1596794 ], [ 71.2416791, 23.1596754 ], [ 71.2418261, 23.160188 ], [ 71.2425286, 23.1605634 ], [ 71.2433633, 23.1605516 ], [ 71.2435041, 23.1606787 ], [ 71.2435126, 23.1611931 ], [ 71.2442151, 23.1615687 ], [ 71.2446426, 23.1622063 ], [ 71.2456298, 23.1629642 ], [ 71.2458823, 23.1614167 ], [ 71.2467148, 23.1612757 ], [ 71.2468513, 23.1611455 ], [ 71.2466997, 23.1603759 ], [ 71.2472625, 23.1607533 ], [ 71.2486602, 23.1611198 ], [ 71.2486643, 23.161377 ], [ 71.2481079, 23.1613849 ], [ 71.2482552, 23.1618975 ], [ 71.2497987, 23.1626473 ], [ 71.2499288, 23.1621309 ], [ 71.2500662, 23.1619998 ], [ 71.2503444, 23.1619958 ], [ 71.2506269, 23.1622491 ], [ 71.2517377, 23.162105 ], [ 71.2517292, 23.1615906 ], [ 71.2536766, 23.1615626 ], [ 71.2541236, 23.1633574 ], [ 71.2546929, 23.1641211 ], [ 71.2551366, 23.1656586 ], [ 71.255691, 23.1655216 ], [ 71.2558274, 23.1653916 ], [ 71.2558187, 23.1648769 ], [ 71.2563667, 23.1643545 ], [ 71.2563536, 23.1635828 ], [ 71.2567628, 23.1630623 ], [ 71.2562064, 23.1630703 ], [ 71.2563408, 23.162811 ], [ 71.2561805, 23.1615267 ], [ 71.2553459, 23.1615388 ], [ 71.2557498, 23.1607611 ], [ 71.2561633, 23.1604978 ], [ 71.2561761, 23.1612695 ], [ 71.2570108, 23.1612576 ], [ 71.2570023, 23.1607431 ], [ 71.2574644, 23.160824 ], [ 71.2574277, 23.1612515 ], [ 71.2577103, 23.1615048 ], [ 71.2580013, 23.1622727 ], [ 71.2578756, 23.1630463 ], [ 71.2589907, 23.1631585 ], [ 71.2591315, 23.1632857 ], [ 71.2590015, 23.1638021 ], [ 71.2576105, 23.1638221 ], [ 71.2581777, 23.1644568 ], [ 71.2590123, 23.1644449 ], [ 71.2598341, 23.1636611 ], [ 71.2603882, 23.163525 ], [ 71.2603753, 23.1627531 ], [ 71.2598189, 23.1627611 ], [ 71.2598146, 23.1625038 ], [ 71.260371, 23.1624959 ], [ 71.2599446, 23.1619875 ], [ 71.2599359, 23.1614728 ], [ 71.259793, 23.1612177 ], [ 71.2595105, 23.1609644 ], [ 71.2592279, 23.1607112 ], [ 71.2603451, 23.1609525 ], [ 71.2597757, 23.1601888 ], [ 71.2589454, 23.1604579 ], [ 71.2589541, 23.1609724 ], [ 71.2592366, 23.1612256 ], [ 71.2595192, 23.1614789 ], [ 71.2586823, 23.1613619 ], [ 71.2576519, 23.1606452 ], [ 71.2572674, 23.1599673 ], [ 71.2567154, 23.1602326 ], [ 71.2568454, 23.1597161 ], [ 71.2569828, 23.1595851 ], [ 71.2575371, 23.1594488 ], [ 71.2572502, 23.1589383 ], [ 71.2564156, 23.1589503 ], [ 71.2566874, 23.15856 ], [ 71.257522, 23.1585481 ], [ 71.258361, 23.1587934 ], [ 71.2586434, 23.1590466 ], [ 71.259202, 23.1591676 ], [ 71.2592107, 23.1596822 ], [ 71.2597692, 23.1598025 ], [ 71.2603343, 23.1603088 ], [ 71.2608928, 23.1604299 ], [ 71.2606061, 23.1599194 ], [ 71.2611646, 23.1600396 ], [ 71.2617297, 23.1605462 ], [ 71.2636836, 23.1609045 ], [ 71.2636749, 23.1603901 ], [ 71.2642313, 23.1603819 ], [ 71.2641005, 23.1608985 ], [ 71.2638267, 23.1611597 ], [ 71.2638352, 23.1616743 ], [ 71.2639769, 23.1618004 ], [ 71.2650898, 23.1617843 ], [ 71.2669367, 23.1614598 ], [ 71.2670351, 23.1616282 ], [ 71.2664787, 23.1616361 ], [ 71.2664874, 23.1621508 ], [ 71.2659331, 23.1622869 ], [ 71.2653833, 23.1626811 ], [ 71.2653918, 23.1631958 ], [ 71.265944, 23.1629304 ], [ 71.2660913, 23.163443 ], [ 71.2670763, 23.1640716 ], [ 71.268463, 23.1637943 ], [ 71.2698563, 23.1639034 ], [ 71.2695868, 23.1644218 ], [ 71.2687566, 23.1646911 ], [ 71.2693237, 23.1653258 ], [ 71.2698802, 23.1653177 ], [ 71.271006, 23.1660735 ], [ 71.2715624, 23.1660653 ], [ 71.2718365, 23.1658041 ], [ 71.2726689, 23.1656639 ], [ 71.2726775, 23.1661784 ], [ 71.274636, 23.166793 ], [ 71.2757618, 23.1675486 ], [ 71.2765967, 23.1675365 ], [ 71.277164, 23.1681719 ], [ 71.2766074, 23.1681801 ], [ 71.2767548, 23.1686924 ], [ 71.2771791, 23.169072 ], [ 71.2788594, 23.1696913 ], [ 71.2785681, 23.1689236 ], [ 71.2796853, 23.1691648 ], [ 71.2798327, 23.1696771 ], [ 71.2799745, 23.1698034 ], [ 71.2805331, 23.1699243 ], [ 71.2806806, 23.1704369 ], [ 71.2819438, 23.1710614 ], [ 71.2833481, 23.1718128 ], [ 71.2836307, 23.1720661 ], [ 71.2850306, 23.1725603 ], [ 71.2858741, 23.1730627 ], [ 71.2864392, 23.1735692 ], [ 71.2872784, 23.1738143 ], [ 71.2881219, 23.1743167 ], [ 71.2895261, 23.1750682 ], [ 71.2909304, 23.1758196 ], [ 71.2914868, 23.1758115 ], [ 71.2923347, 23.1765711 ], [ 71.2948609, 23.1778208 ], [ 71.2962587, 23.1781869 ], [ 71.2962674, 23.1787013 ], [ 71.298226, 23.1793156 ], [ 71.2993522, 23.180071 ], [ 71.3029826, 23.1807898 ], [ 71.3040956, 23.1807735 ], [ 71.3046609, 23.1812798 ], [ 71.3057828, 23.181778 ], [ 71.3068979, 23.1818907 ], [ 71.3069024, 23.1821479 ], [ 71.3060676, 23.1821602 ], [ 71.3060765, 23.1826747 ], [ 71.3056541, 23.1824235 ], [ 71.3055112, 23.1821683 ], [ 71.3049546, 23.1821765 ], [ 71.3052394, 23.1825579 ], [ 71.305704, 23.1827677 ], [ 71.3058026, 23.1829361 ], [ 71.3063613, 23.1830561 ], [ 71.3066439, 23.1833091 ], [ 71.3072027, 23.1834301 ], [ 71.307185, 23.1824012 ], [ 71.3076063, 23.1826522 ], [ 71.3080396, 23.183546 ], [ 71.3097136, 23.1837788 ], [ 71.3099962, 23.1840319 ], [ 71.3105528, 23.1840237 ], [ 71.3111135, 23.1842728 ], [ 71.3125248, 23.1854104 ], [ 71.3125159, 23.1848958 ], [ 71.3133573, 23.1852691 ], [ 71.3144726, 23.1853817 ], [ 71.3143241, 23.1848693 ], [ 71.3147308, 23.1842196 ], [ 71.3152874, 23.1842114 ], [ 71.3175244, 23.1848223 ], [ 71.3173936, 23.1853386 ], [ 71.3169812, 23.1856021 ], [ 71.3167251, 23.1868924 ], [ 71.3178382, 23.1868759 ], [ 71.3179546, 23.1855877 ], [ 71.3181861, 23.1854146 ], [ 71.320318, 23.1854239 ], [ 71.3205919, 23.1851625 ], [ 71.3228157, 23.1850014 ], [ 71.3225463, 23.1855201 ], [ 71.3270005, 23.1855824 ], [ 71.327833, 23.1854418 ], [ 71.3278419, 23.1859565 ], [ 71.3289595, 23.1861971 ], [ 71.3289504, 23.1856826 ], [ 71.3303396, 23.1855329 ], [ 71.3308982, 23.1856539 ], [ 71.3310279, 23.1851373 ], [ 71.3311653, 23.1850062 ], [ 71.3328304, 23.1847242 ], [ 71.3333825, 23.1844586 ], [ 71.3367124, 23.1838947 ], [ 71.3368489, 23.1837644 ], [ 71.3369795, 23.1832479 ], [ 71.3389271, 23.183219 ], [ 71.3389183, 23.1827045 ], [ 71.340029, 23.1825588 ], [ 71.3408548, 23.1820321 ], [ 71.341347798232306, 23.181933230159082 ], [ 71.3422415, 23.181754 ], [ 71.3433454, 23.181223 ], [ 71.3450148, 23.1811982 ], [ 71.3480621, 23.1803808 ], [ 71.3511046, 23.1793063 ], [ 71.353878, 23.1787503 ], [ 71.3611029, 23.1781273 ], [ 71.3627633, 23.1775879 ], [ 71.3635888, 23.1770608 ], [ 71.3658056, 23.1765129 ], [ 71.367093693946714, 23.176344328032997 ], [ 71.3680269, 23.1762222 ], [ 71.3727521, 23.1758937 ], [ 71.3730326, 23.1760187 ], [ 71.3730235, 23.1755042 ], [ 71.3741386, 23.1756155 ], [ 71.3744213, 23.1758686 ], [ 71.3763735, 23.1760965 ], [ 71.3766563, 23.1763494 ], [ 71.377215, 23.1764702 ], [ 71.3772014, 23.1756985 ], [ 71.3774796, 23.1756943 ], [ 71.3774886, 23.1762086 ], [ 71.379995, 23.1762989 ], [ 71.3809751, 23.1766705 ], [ 71.3811284, 23.1774401 ], [ 71.3819607, 23.1772984 ], [ 71.3833382, 23.1765057 ], [ 71.3847247, 23.1762273 ], [ 71.3852902, 23.1767334 ], [ 71.3861273, 23.1768499 ], [ 71.3861409, 23.1776216 ], [ 71.3875366, 23.1778576 ], [ 71.3875274, 23.1773432 ], [ 71.3897555, 23.1774375 ], [ 71.3905856, 23.1771676 ], [ 71.3908592, 23.1769062 ], [ 71.3911375, 23.176902 ], [ 71.3917029, 23.177408 ], [ 71.3942025, 23.1771126 ], [ 71.394768, 23.1776187 ], [ 71.3957891, 23.1778198 ], [ 71.3958923, 23.1782453 ], [ 71.3967317, 23.1784896 ], [ 71.3967179, 23.1777181 ], [ 71.3959762, 23.1776408 ], [ 71.395874, 23.1772163 ], [ 71.3964327, 23.177336 ], [ 71.3967063, 23.1770746 ], [ 71.3972628, 23.1770661 ], [ 71.3975457, 23.177319 ], [ 71.3983803, 23.1773063 ], [ 71.3985211, 23.1774333 ], [ 71.39867, 23.1779455 ], [ 71.3972743, 23.1777096 ], [ 71.3975708, 23.1787342 ], [ 71.3967362, 23.1787469 ], [ 71.3967453, 23.1792613 ], [ 71.3978606, 23.1793726 ], [ 71.3982705, 23.1789808 ], [ 71.3984009, 23.1784643 ], [ 71.3997967, 23.1787004 ], [ 71.4000566, 23.1776671 ], [ 71.4008934, 23.1777826 ], [ 71.4017351, 23.1781561 ], [ 71.4017213, 23.1773846 ], [ 71.4025674, 23.1780143 ], [ 71.4042435, 23.1783751 ], [ 71.4042344, 23.1778606 ], [ 71.4050713, 23.1779761 ], [ 71.4052123, 23.1781029 ], [ 71.4053703, 23.1791298 ], [ 71.4070327, 23.1787179 ], [ 71.4089825, 23.1788172 ], [ 71.4089963, 23.1795889 ], [ 71.4095527, 23.1795804 ], [ 71.4095574, 23.1798376 ], [ 71.4084446, 23.1798546 ], [ 71.4087366, 23.1806219 ], [ 71.4081777, 23.1805015 ], [ 71.407612, 23.1799956 ], [ 71.4064969, 23.1798845 ], [ 71.4066494, 23.1806539 ], [ 71.4076398, 23.1815388 ], [ 71.4082008, 23.1817875 ], [ 71.4098702, 23.181762 ], [ 71.4102801, 23.1813702 ], [ 71.4104105, 23.1808536 ], [ 71.4126409, 23.1810769 ], [ 71.4126317, 23.1805624 ], [ 71.4148551, 23.1803991 ], [ 71.4159749, 23.1807684 ], [ 71.4159656, 23.180254 ], [ 71.4162438, 23.1802496 ], [ 71.4162578, 23.1810213 ], [ 71.4190331, 23.1805923 ], [ 71.4204289, 23.1808281 ], [ 71.42265, 23.1805367 ], [ 71.4243215, 23.1806399 ], [ 71.4243308, 23.1811543 ], [ 71.4257173, 23.1808758 ], [ 71.4254531, 23.1816516 ], [ 71.4260072, 23.181514 ], [ 71.4268326, 23.1809867 ], [ 71.4279454, 23.1809695 ], [ 71.4285111, 23.1814755 ], [ 71.4290699, 23.1815959 ], [ 71.4291992, 23.1810793 ], [ 71.4296101, 23.1806866 ], [ 71.4318265, 23.1801377 ], [ 71.4329418, 23.1802496 ], [ 71.4328254, 23.1815378 ], [ 71.4329696, 23.181793 ], [ 71.431859, 23.1819383 ], [ 71.4310337, 23.1824656 ], [ 71.4282584, 23.1828948 ], [ 71.4285598, 23.1841766 ], [ 71.4296751, 23.1842876 ], [ 71.4313351, 23.1837474 ], [ 71.433285, 23.1838463 ], [ 71.4332758, 23.1833318 ], [ 71.4352257, 23.1834299 ], [ 71.4355016, 23.1832974 ], [ 71.4356496, 23.1838098 ], [ 71.4366307, 23.18418 ], [ 71.4377437, 23.1841629 ], [ 71.4383049, 23.1844114 ], [ 71.4394154, 23.1842659 ], [ 71.4396749, 23.1832328 ], [ 71.440505, 23.1829627 ], [ 71.4405143, 23.183477 ], [ 71.4399579, 23.1834857 ], [ 71.4402431, 23.1838667 ], [ 71.4410824, 23.1841111 ], [ 71.4446993, 23.1840549 ], [ 71.4455386, 23.1842991 ], [ 71.449705, 23.1838487 ], [ 71.4498342, 23.1833322 ], [ 71.4501077, 23.1830706 ], [ 71.4500983, 23.1825562 ], [ 71.4502357, 23.182425 ], [ 71.4505139, 23.1824206 ], [ 71.4506549, 23.1825477 ], [ 71.4505256, 23.1830642 ], [ 71.451082, 23.1830555 ], [ 71.4511595, 23.1821128 ], [ 71.4516197, 23.1820179 ], [ 71.4516103, 23.1815036 ], [ 71.4518909, 23.1816274 ], [ 71.4527256, 23.1816144 ], [ 71.4535507, 23.1810869 ], [ 71.4549418, 23.1810651 ], [ 71.4555076, 23.1815709 ], [ 71.4560641, 23.1815622 ], [ 71.4569106, 23.1821927 ], [ 71.4566135, 23.1811681 ], [ 71.4571722, 23.1812878 ], [ 71.4574551, 23.1815405 ], [ 71.4577333, 23.1815361 ], [ 71.458007, 23.1812747 ], [ 71.4588391, 23.1811336 ], [ 71.4589403, 23.1790736 ], [ 71.4587968, 23.1788185 ], [ 71.4582404, 23.1788272 ], [ 71.4582498, 23.1793416 ], [ 71.4576934, 23.1793503 ], [ 71.457818, 23.1785766 ], [ 71.457488, 23.1781547 ], [ 71.4568329, 23.1779483 ], [ 71.4559866, 23.1773188 ], [ 71.4559771, 23.1768043 ], [ 71.4548645, 23.1768217 ], [ 71.4548737, 23.1773362 ], [ 71.4540391, 23.1773492 ], [ 71.4541589, 23.1763182 ], [ 71.4545721, 23.1760544 ], [ 71.4545815, 23.1765688 ], [ 71.4556872, 23.1761653 ], [ 71.4568047, 23.176405 ], [ 71.4570877, 23.1766578 ], [ 71.4576464, 23.1767782 ], [ 71.4576511, 23.1770355 ], [ 71.4570947, 23.1770442 ], [ 71.4571041, 23.1775586 ], [ 71.4576675, 23.1779353 ], [ 71.4582239, 23.1779266 ], [ 71.4593557, 23.1789381 ], [ 71.460478, 23.179435 ], [ 71.4613126, 23.179422 ], [ 71.4615931, 23.1795467 ], [ 71.4615836, 23.1790323 ], [ 71.465205, 23.179233 ], [ 71.4654409, 23.1769136 ], [ 71.4679282, 23.1759737 ], [ 71.4690457, 23.1762135 ], [ 71.473504, 23.1765299 ], [ 71.4735135, 23.1770442 ], [ 71.4740724, 23.1771636 ], [ 71.4743553, 23.1774165 ], [ 71.4754704, 23.177528 ], [ 71.4754798, 23.1780425 ], [ 71.4763145, 23.1780292 ], [ 71.4763286, 23.1788009 ], [ 71.4766046, 23.1786675 ], [ 71.4774392, 23.1786544 ], [ 71.4779884, 23.1782602 ], [ 71.4780026, 23.1790319 ], [ 71.4796671, 23.1787484 ], [ 71.479556, 23.1802938 ], [ 71.4794222, 23.1805531 ], [ 71.4810914, 23.1805269 ], [ 71.4811056, 23.1812986 ], [ 71.4858351, 23.1812239 ], [ 71.4858446, 23.1817382 ], [ 71.4864035, 23.1818576 ], [ 71.4878089, 23.1826072 ], [ 71.4892022, 23.1827144 ], [ 71.4891927, 23.1821999 ], [ 71.4908644, 23.1823016 ], [ 71.4922649, 23.1827939 ], [ 71.4967163, 23.1827234 ], [ 71.5008799, 23.1821426 ], [ 71.5022638, 23.1817353 ], [ 71.502412, 23.1822475 ], [ 71.5028346, 23.1824979 ], [ 71.5028202, 23.1817265 ], [ 71.5044942, 23.181957 ], [ 71.5042063, 23.1814471 ], [ 71.5053144, 23.1811721 ], [ 71.5051797, 23.1814316 ], [ 71.5051891, 23.1819461 ], [ 71.5056142, 23.1823246 ], [ 71.5061706, 23.1823158 ], [ 71.5072785, 23.1820409 ], [ 71.5078399, 23.1822893 ], [ 71.5100655, 23.1822538 ], [ 71.5106267, 23.1825021 ], [ 71.5159173, 23.1826749 ], [ 71.5173133, 23.1829098 ], [ 71.5184212, 23.1826348 ], [ 71.5187043, 23.1828875 ], [ 71.5206469, 23.1825991 ], [ 71.5209204, 23.1823375 ], [ 71.521479, 23.1824575 ], [ 71.5214694, 23.1819432 ], [ 71.5218911, 23.1821937 ], [ 71.5220404, 23.1827058 ], [ 71.5234218, 23.1821691 ], [ 71.5234119, 23.1816548 ], [ 71.5242443, 23.1815123 ], [ 71.5246539, 23.1811203 ], [ 71.524779, 23.1803464 ], [ 71.5267215, 23.180058 ], [ 71.5267119, 23.1795437 ], [ 71.5264359, 23.1796762 ], [ 71.5236469, 23.1793356 ], [ 71.523642, 23.1790784 ], [ 71.5247548, 23.1790604 ], [ 71.5248837, 23.1785439 ], [ 71.5250209, 23.1784125 ], [ 71.5261337, 23.1783948 ], [ 71.5269634, 23.1781241 ], [ 71.5289107, 23.1780929 ], [ 71.5291914, 23.1782175 ], [ 71.5288986, 23.1774503 ], [ 71.5294575, 23.1775696 ], [ 71.5297404, 23.1778223 ], [ 71.5322466, 23.1779109 ], [ 71.5322418, 23.1776539 ], [ 71.5314025, 23.1774101 ], [ 71.531494, 23.1772388 ], [ 71.5322345, 23.1772676 ], [ 71.5330787, 23.1777686 ], [ 71.5333569, 23.1777641 ], [ 71.5336304, 23.1775023 ], [ 71.5344673, 23.177618 ], [ 71.5344577, 23.1771035 ], [ 71.5348793, 23.1773541 ], [ 71.5350286, 23.1778661 ], [ 71.5353068, 23.1778618 ], [ 71.535297, 23.1773473 ], [ 71.5388965, 23.1763883 ], [ 71.5390328, 23.1762581 ], [ 71.5391626, 23.1757414 ], [ 71.541105, 23.1754528 ], [ 71.5412339, 23.1749361 ], [ 71.5413711, 23.1748049 ], [ 71.543311, 23.174388 ], [ 71.5432964, 23.1736165 ], [ 71.5446947, 23.1739793 ], [ 71.5449801, 23.1743611 ], [ 71.5472104, 23.1745823 ], [ 71.546947, 23.1753583 ], [ 71.5480522, 23.174954 ], [ 71.5508341, 23.174909 ], [ 71.5519421, 23.1746338 ], [ 71.5561074, 23.1741806 ], [ 71.556194, 23.1737524 ], [ 71.556932, 23.1736527 ], [ 71.5566637, 23.1741717 ], [ 71.5594333, 23.173483 ], [ 71.5697013, 23.1720294 ], [ 71.5730343, 23.1717176 ], [ 71.5735858, 23.1714513 ], [ 71.5758184, 23.1718011 ], [ 71.5758086, 23.1712868 ], [ 71.5777583, 23.171383 ], [ 71.5847075, 23.1710119 ], [ 71.5849808, 23.1707501 ], [ 71.585259, 23.1707456 ], [ 71.5855421, 23.1709981 ], [ 71.5877723, 23.1712188 ], [ 71.5899976, 23.1711821 ], [ 71.5916617, 23.1708975 ], [ 71.5919449, 23.17115 ], [ 71.5927793, 23.1711364 ], [ 71.5941751, 23.1713706 ], [ 71.5961123, 23.1708242 ], [ 71.5983351, 23.1706592 ], [ 71.5980471, 23.1701494 ], [ 71.599716, 23.1701219 ], [ 71.5997111, 23.1698648 ], [ 71.5988715, 23.1696214 ], [ 71.5988666, 23.1693642 ], [ 71.5999792, 23.1693458 ], [ 71.5999893, 23.1698601 ], [ 71.6005381, 23.1694647 ], [ 71.6024653, 23.1684038 ], [ 71.603856, 23.1683808 ], [ 71.6041293, 23.168119 ], [ 71.6052444, 23.1682296 ], [ 71.6052344, 23.1677153 ], [ 71.608021, 23.1679264 ], [ 71.6077279, 23.1671595 ], [ 71.6080085, 23.1672831 ], [ 71.610795, 23.1674942 ], [ 71.6119027, 23.1672184 ], [ 71.6121758, 23.1669567 ], [ 71.6127296, 23.1668193 ], [ 71.6128532, 23.1660455 ], [ 71.6127046, 23.1655333 ], [ 71.613539, 23.1655195 ], [ 71.613529, 23.1650052 ], [ 71.6146341, 23.1646004 ], [ 71.6157492, 23.164711 ], [ 71.6157592, 23.1652254 ], [ 71.6179719, 23.164545 ], [ 71.618245, 23.1642833 ], [ 71.619465174218746, 23.163953629333133 ], [ 71.619465174218746, 23.163953629333136 ], [ 71.6212896, 23.1634607 ], [ 71.6221979, 23.1623761 ], [ 71.6229384, 23.1624042 ], [ 71.6243217, 23.1619958 ], [ 71.6243317, 23.1625101 ], [ 71.6282255, 23.1624452 ], [ 71.6282155, 23.1619308 ], [ 71.6293281, 23.1619123 ], [ 71.6294566, 23.1613955 ], [ 71.6295937, 23.1612642 ], [ 71.6301474, 23.1611268 ], [ 71.6305018, 23.1601793 ], [ 71.6306836, 23.1600888 ], [ 71.6306936, 23.1606031 ], [ 71.6320767, 23.1601937 ], [ 71.6323498, 23.1599319 ], [ 71.6340136, 23.1596467 ], [ 71.635116, 23.1591137 ], [ 71.6356571, 23.158333 ], [ 71.6362109, 23.1581956 ], [ 71.6359378, 23.1584573 ], [ 71.6359429, 23.1587146 ], [ 71.6362211, 23.1587098 ], [ 71.6363124, 23.1585386 ], [ 71.6384385, 23.1582863 ], [ 71.6389871, 23.1578917 ], [ 71.6389973, 23.1584061 ], [ 71.639409, 23.1581419 ], [ 71.6395334, 23.1573681 ], [ 71.6403678, 23.1573541 ], [ 71.6403829, 23.1581256 ], [ 71.6409391, 23.1581162 ], [ 71.6409291, 23.1576019 ], [ 71.6434347, 23.1576881 ], [ 71.6439885, 23.1575505 ], [ 71.6439783, 23.1570362 ], [ 71.6462009, 23.1568697 ], [ 71.64702, 23.1560843 ], [ 71.6486887, 23.1560563 ], [ 71.6489618, 23.1557943 ], [ 71.6497911, 23.1555231 ], [ 71.6506154, 23.1549949 ], [ 71.6520034, 23.1548433 ], [ 71.6519932, 23.1543288 ], [ 71.6531083, 23.1544383 ], [ 71.6556012, 23.1538816 ], [ 71.6561523, 23.1536152 ], [ 71.6580966, 23.1534541 ], [ 71.6580863, 23.1529399 ], [ 71.6599342, 23.152739 ], [ 71.6600434, 23.1534212 ], [ 71.660319, 23.1532876 ], [ 71.6608752, 23.1532782 ], [ 71.6619748, 23.1526169 ], [ 71.661985, 23.1531313 ], [ 71.6628066, 23.1524738 ], [ 71.6641871, 23.1519359 ], [ 71.6661287, 23.1516458 ], [ 71.6664018, 23.151384 ], [ 71.6677871, 23.1511032 ], [ 71.6680603, 23.1508414 ], [ 71.6691676, 23.1505653 ], [ 71.6700045, 23.1506802 ], [ 71.6699943, 23.1501659 ], [ 71.6722166, 23.149999 ], [ 71.6760844, 23.1486471 ], [ 71.68245, 23.1469954 ], [ 71.683274, 23.1464668 ], [ 71.6841107, 23.1465817 ], [ 71.6842339, 23.1458078 ], [ 71.6846439, 23.1454144 ], [ 71.6857459, 23.1448811 ], [ 71.6865598, 23.1438384 ], [ 71.6879527, 23.1439437 ], [ 71.6879425, 23.1434292 ], [ 71.6896136, 23.143529 ], [ 71.6901595, 23.1430051 ], [ 71.6940321, 23.1419098 ], [ 71.694305, 23.1416481 ], [ 71.6959684, 23.1413623 ], [ 71.6962413, 23.1411003 ], [ 71.6976265, 23.1408195 ], [ 71.6984505, 23.1402908 ], [ 71.6998383, 23.1401389 ], [ 71.6998279, 23.1396244 ], [ 71.7014938, 23.1394668 ], [ 71.7023178, 23.1389382 ], [ 71.7059171, 23.1381047 ], [ 71.7075856, 23.1380761 ], [ 71.7078586, 23.1378142 ], [ 71.7098051, 23.1377807 ], [ 71.710078, 23.1375188 ], [ 71.7145321, 23.1376993 ], [ 71.7156523, 23.1380663 ], [ 71.7156574, 23.1383234 ], [ 71.7139865, 23.1382232 ], [ 71.7137136, 23.1384851 ], [ 71.7100908, 23.1381621 ], [ 71.7101063, 23.1389334 ], [ 71.705943, 23.1393905 ], [ 71.7001241, 23.1405193 ], [ 71.6998512, 23.1407813 ], [ 71.6979124, 23.1412009 ], [ 71.6979226, 23.1417152 ], [ 71.6973639, 23.1415957 ], [ 71.6959839, 23.1421338 ], [ 71.695711, 23.1423957 ], [ 71.6943307, 23.1429338 ], [ 71.6937849, 23.1434577 ], [ 71.6929557, 23.1437291 ], [ 71.6926828, 23.1439909 ], [ 71.6921292, 23.1441294 ], [ 71.6921394, 23.1446439 ], [ 71.6902058, 23.1453196 ], [ 71.6899328, 23.1455815 ], [ 71.6882719, 23.1459962 ], [ 71.6882821, 23.1465105 ], [ 71.6863458, 23.147058 ], [ 71.686356, 23.1475725 ], [ 71.68469, 23.1477289 ], [ 71.6822026, 23.1485432 ], [ 71.6819296, 23.1488049 ], [ 71.6802636, 23.1489624 ], [ 71.6802738, 23.1494768 ], [ 71.6783347, 23.1498953 ], [ 71.6780618, 23.150157 ], [ 71.6764008, 23.1505717 ], [ 71.676411, 23.151086 ], [ 71.6741912, 23.151381 ], [ 71.6742014, 23.1518953 ], [ 71.6728136, 23.152047 ], [ 71.6703233, 23.1527329 ], [ 71.6703335, 23.1532472 ], [ 71.6686724, 23.1536607 ], [ 71.6678484, 23.1541892 ], [ 71.6664628, 23.15447 ], [ 71.6661899, 23.1547318 ], [ 71.6645237, 23.154889 ], [ 71.6645339, 23.1554035 ], [ 71.660931, 23.1561071 ], [ 71.6584432, 23.1569208 ], [ 71.6545596, 23.1575008 ], [ 71.6542867, 23.1577628 ], [ 71.6504029, 23.1583426 ], [ 71.65013, 23.1586046 ], [ 71.6484662, 23.1588898 ], [ 71.6481931, 23.1591515 ], [ 71.6457027, 23.159837 ], [ 71.6457178, 23.1606085 ], [ 71.6443322, 23.1608892 ], [ 71.6443423, 23.1614035 ], [ 71.6404536, 23.1617261 ], [ 71.6404636, 23.1622404 ], [ 71.6388023, 23.1626537 ], [ 71.6385292, 23.1629155 ], [ 71.6376999, 23.1631867 ], [ 71.6374268, 23.1634485 ], [ 71.6365974, 23.1637197 ], [ 71.6363243, 23.1639814 ], [ 71.6346655, 23.1645237 ], [ 71.6343924, 23.1647856 ], [ 71.6327337, 23.1653279 ], [ 71.6324606, 23.1655896 ], [ 71.6305211, 23.1660085 ], [ 71.6305311, 23.1665227 ], [ 71.6288698, 23.1669361 ], [ 71.6285967, 23.1671978 ], [ 71.6280378, 23.167079 ], [ 71.6280478, 23.1675934 ], [ 71.6269403, 23.1678692 ], [ 71.6266772, 23.1686452 ], [ 71.6247326, 23.1688058 ], [ 71.6244595, 23.1690676 ], [ 71.6236275, 23.1692107 ], [ 71.6239157, 23.1697204 ], [ 71.6230837, 23.1698624 ], [ 71.6228106, 23.1701241 ], [ 71.620876, 23.1708 ], [ 71.620886, 23.1713144 ], [ 71.6203274, 23.1711946 ], [ 71.619665174218753, 23.171256789219779 ], [ 71.6153279, 23.1716641 ], [ 71.6153228, 23.1714069 ], [ 71.6167061, 23.1709977 ], [ 71.619665174218753, 23.170359765949389 ], [ 71.6205853, 23.1701614 ], [ 71.6208584, 23.1698994 ], [ 71.621688, 23.1696284 ], [ 71.6219611, 23.1693666 ], [ 71.6227931, 23.1692245 ], [ 71.622783, 23.1687102 ], [ 71.6233368, 23.1685719 ], [ 71.6234729, 23.1684415 ], [ 71.6233243, 23.1679295 ], [ 71.6238806, 23.1679202 ], [ 71.6238705, 23.1674057 ], [ 71.624427, 23.1673965 ], [ 71.6245555, 23.1668797 ], [ 71.6252438, 23.1664819 ], [ 71.6260682, 23.1659536 ], [ 71.626612, 23.165302 ], [ 71.6260556, 23.1653112 ], [ 71.6263137, 23.164278 ], [ 71.6243567, 23.163796 ], [ 71.6243667, 23.1643103 ], [ 71.6238104, 23.1643196 ], [ 71.6240735, 23.1635435 ], [ 71.6235173, 23.1635528 ], [ 71.6235273, 23.164067 ], [ 71.6229709, 23.1640763 ], [ 71.6232591, 23.164586 ], [ 71.6221467, 23.1646046 ], [ 71.6217488, 23.1656403 ], [ 71.6213423, 23.1661615 ], [ 71.6207859, 23.1661708 ], [ 71.6207759, 23.1656565 ], [ 71.619665174218753, 23.165777478056565 ], [ 71.6193877, 23.1658077 ], [ 71.6180119, 23.1666025 ], [ 71.6166286, 23.1670119 ], [ 71.6166437, 23.1677834 ], [ 71.6160849, 23.1676635 ], [ 71.6158018, 23.167411 ], [ 71.615248, 23.1675492 ], [ 71.615258, 23.1680636 ], [ 71.6133134, 23.1682241 ], [ 71.6077802, 23.1698595 ], [ 71.6075069, 23.1701213 ], [ 71.6063918, 23.1700115 ], [ 71.6062994, 23.1701818 ], [ 71.605843, 23.1704061 ], [ 71.6033395, 23.1704475 ], [ 71.6030664, 23.1707093 ], [ 71.6019586, 23.1709848 ], [ 71.6002898, 23.1710124 ], [ 71.5983525, 23.171559 ], [ 71.5961272, 23.1715957 ], [ 71.5955757, 23.171862 ], [ 71.5922478, 23.1724314 ], [ 71.5819554, 23.1726006 ], [ 71.5597457, 23.1752789 ], [ 71.5594724, 23.1755405 ], [ 71.5561441, 23.1761092 ], [ 71.5555926, 23.1763755 ], [ 71.5517102, 23.177082 ], [ 71.5514467, 23.1778582 ], [ 71.5511685, 23.1778627 ], [ 71.5511587, 23.1773483 ], [ 71.5475446, 23.177535 ], [ 71.5461587, 23.1778147 ], [ 71.5456072, 23.1780808 ], [ 71.5439428, 23.1783651 ], [ 71.5436695, 23.1786269 ], [ 71.5411804, 23.1794388 ], [ 71.5378517, 23.1800071 ], [ 71.5375784, 23.1802687 ], [ 71.5356359, 23.1805573 ], [ 71.5353626, 23.1808191 ], [ 71.5336958, 23.180975 ], [ 71.5337054, 23.1814893 ], [ 71.5314822, 23.1816533 ], [ 71.5312089, 23.1819151 ], [ 71.5300912, 23.1816756 ], [ 71.5295372, 23.1818138 ], [ 71.5295469, 23.182328 ], [ 71.5289929, 23.1824653 ], [ 71.5287196, 23.1827268 ], [ 71.5259521, 23.1835431 ], [ 71.5234507, 23.1837123 ], [ 71.5237385, 23.1842222 ], [ 71.5153995, 23.1847412 ], [ 71.515126, 23.185003 ], [ 71.5115142, 23.1853178 ], [ 71.5101303, 23.1857264 ], [ 71.5101207, 23.185212 ], [ 71.5056716, 23.185411 ], [ 71.5053983, 23.1856728 ], [ 71.4934398, 23.1861199 ], [ 71.4931593, 23.1859962 ], [ 71.4931687, 23.1865106 ], [ 71.491226, 23.1867986 ], [ 71.4912354, 23.1873131 ], [ 71.4917919, 23.1873042 ], [ 71.4917968, 23.1875614 ], [ 71.4912426, 23.1876985 ], [ 71.4909691, 23.18796 ], [ 71.4898539, 23.1878495 ], [ 71.4898588, 23.1881067 ], [ 71.4904175, 23.1882262 ], [ 71.4912617, 23.1887272 ], [ 71.4918278, 23.1892328 ], [ 71.4923865, 23.1893532 ], [ 71.4923914, 23.1896102 ], [ 71.4909977, 23.1895032 ], [ 71.4904365, 23.1892549 ], [ 71.4893237, 23.1892725 ], [ 71.4882226, 23.1899336 ], [ 71.4889463, 23.1914658 ], [ 71.4893689, 23.1917164 ], [ 71.4892103, 23.1906898 ], [ 71.4896233, 23.1904259 ], [ 71.4897858, 23.1917098 ], [ 71.4902107, 23.1920886 ], [ 71.4914742, 23.1927121 ], [ 71.4913547, 23.1937431 ], [ 71.4924747, 23.1941109 ], [ 71.4994354, 23.1942577 ], [ 71.500541, 23.1938546 ], [ 71.5002772, 23.1946306 ], [ 71.5008361, 23.1947501 ], [ 71.5016684, 23.1946085 ], [ 71.5016828, 23.1953802 ], [ 71.5025127, 23.1951097 ], [ 71.5023212, 23.1946858 ], [ 71.5030619, 23.1947145 ], [ 71.5032029, 23.1948414 ], [ 71.5030788, 23.1956153 ], [ 71.5033545, 23.1954817 ], [ 71.5041916, 23.1955975 ], [ 71.5042156, 23.1968835 ], [ 71.5047722, 23.1968746 ], [ 71.5047816, 23.1973891 ], [ 71.5043182, 23.197308 ], [ 71.5042205, 23.1971407 ], [ 71.5033857, 23.197154 ], [ 71.5034724, 23.1967257 ], [ 71.5039327, 23.1966308 ], [ 71.5039277, 23.1963736 ], [ 71.5033713, 23.1963825 ], [ 71.5032789, 23.1965527 ], [ 71.5025414, 23.1966529 ], [ 71.5032557, 23.1976707 ], [ 71.5033037, 23.2002426 ], [ 71.5040166, 23.2011313 ], [ 71.5051343, 23.2013707 ], [ 71.50624, 23.2009676 ], [ 71.5062209, 23.1999389 ], [ 71.5076168, 23.2001738 ], [ 71.5069351, 23.2009566 ], [ 71.5068062, 23.2014732 ], [ 71.5062496, 23.2014821 ], [ 71.5062592, 23.2019965 ], [ 71.5084972, 23.2026036 ], [ 71.5087803, 23.2028563 ], [ 71.5104522, 23.2029587 ], [ 71.5102885, 23.2016748 ], [ 71.5108306, 23.2008945 ], [ 71.5112413, 23.2005015 ], [ 71.5117977, 23.2004926 ], [ 71.5120784, 23.2006172 ], [ 71.5120687, 23.2001027 ], [ 71.5126253, 23.2000938 ], [ 71.5126108, 23.1993224 ], [ 71.5131674, 23.1993135 ], [ 71.5131768, 23.1998279 ], [ 71.5137359, 23.1999472 ], [ 71.513924, 23.200242 ], [ 71.5137431, 23.2003333 ], [ 71.5137478, 23.2005905 ], [ 71.514026, 23.200586 ], [ 71.5141177, 23.200415 ], [ 71.5145777, 23.2003201 ], [ 71.514732549210763, 23.203025 ], [ 71.5147837, 23.2039185 ], [ 71.5142369, 23.2044418 ], [ 71.5136949, 23.2052224 ], [ 71.5138489, 23.2059918 ], [ 71.5132948, 23.2061288 ], [ 71.512748, 23.206652 ], [ 71.5108002, 23.2066831 ], [ 71.5105195, 23.2065594 ], [ 71.510611, 23.2063883 ], [ 71.5110712, 23.2062934 ], [ 71.5113254, 23.2050029 ], [ 71.5093728, 23.2047769 ], [ 71.5095306, 23.2058034 ], [ 71.5096728, 23.2059294 ], [ 71.5105099, 23.2060451 ], [ 71.5102388, 23.2064348 ], [ 71.5080247, 23.2071139 ], [ 71.5081921, 23.2086548 ], [ 71.5086221, 23.2092906 ], [ 71.5094594, 23.2094064 ], [ 71.5095883, 23.2088897 ], [ 71.5097255, 23.2087586 ], [ 71.5105579, 23.208617 ], [ 71.510428, 23.2091337 ], [ 71.5101545, 23.2093953 ], [ 71.5101689, 23.210167 ], [ 71.5105989, 23.2108028 ], [ 71.5117119, 23.210785 ], [ 71.5119854, 23.2105232 ], [ 71.5125395, 23.2103862 ], [ 71.5126684, 23.2098697 ], [ 71.5129419, 23.2096081 ], [ 71.513043, 23.2075482 ], [ 71.5135996, 23.2075393 ], [ 71.5137864, 23.2101091 ], [ 71.5133934, 23.2114017 ], [ 71.5125611, 23.2115433 ], [ 71.5117384, 23.2122001 ], [ 71.5114841, 23.2134905 ], [ 71.5100976, 23.2137699 ], [ 71.510112, 23.2145414 ], [ 71.5095554, 23.2145503 ], [ 71.5096989, 23.2148054 ], [ 71.5094399, 23.2158385 ], [ 71.508893, 23.2163618 ], [ 71.509047, 23.2171313 ], [ 71.5096036, 23.2171224 ], [ 71.5096132, 23.2176368 ], [ 71.5101697, 23.2176278 ], [ 71.5100396, 23.2181445 ], [ 71.5097661, 23.2184061 ], [ 71.5095601, 23.2222685 ], [ 71.5091528, 23.2227895 ], [ 71.5077612, 23.2228118 ], [ 71.5080636, 23.2240933 ], [ 71.5069553, 23.2243683 ], [ 71.5071035, 23.2248804 ], [ 71.5073866, 23.2251333 ], [ 71.507689, 23.2264147 ], [ 71.5086754, 23.2270418 ], [ 71.5089538, 23.2270373 ], [ 71.5092273, 23.2267757 ], [ 71.5095055, 23.2267712 ], [ 71.5099298, 23.2271509 ], [ 71.5100838, 23.2279201 ], [ 71.5095272, 23.227929 ], [ 71.5099682, 23.2292084 ], [ 71.5102513, 23.2294612 ], [ 71.5104006, 23.2299734 ], [ 71.5115091, 23.2296984 ], [ 71.5119068, 23.2286629 ], [ 71.5131475, 23.2279993 ], [ 71.5138308, 23.2273458 ], [ 71.5143728, 23.2265652 ], [ 71.5143585, 23.2257937 ], [ 71.5147716, 23.2255298 ], [ 71.5149198, 23.226042 ], [ 71.5150619, 23.2261679 ], [ 71.5164605, 23.2265317 ], [ 71.5163307, 23.2270485 ], [ 71.5157884, 23.227829 ], [ 71.515803, 23.2286005 ], [ 71.5155295, 23.2288621 ], [ 71.5151318, 23.2298976 ], [ 71.5145752, 23.2299065 ], [ 71.5151462, 23.2306693 ], [ 71.5145872, 23.2305491 ], [ 71.514304, 23.2302964 ], [ 71.5137452, 23.2301772 ], [ 71.5137306, 23.2294055 ], [ 71.5101511, 23.231521 ], [ 71.5100307, 23.232552 ], [ 71.5097573, 23.2328137 ], [ 71.5093643, 23.2341063 ], [ 71.5099209, 23.2340974 ], [ 71.5099306, 23.2346119 ], [ 71.5086274, 23.2342868 ], [ 71.5085295, 23.2341197 ], [ 71.5082511, 23.2341241 ], [ 71.508256, 23.2343813 ], [ 71.5085392, 23.234634 ], [ 71.5090958, 23.2346251 ], [ 71.5088317, 23.2354011 ], [ 71.5082776, 23.2355382 ], [ 71.5077282, 23.2359334 ], [ 71.5078765, 23.2364455 ], [ 71.5077425, 23.2367049 ], [ 71.5060678, 23.2364745 ], [ 71.5058136, 23.2377648 ], [ 71.5072076, 23.2378708 ], [ 71.5073957, 23.2381656 ], [ 71.5066629, 23.238523 ], [ 71.5066679, 23.2387803 ], [ 71.5075027, 23.238767 ], [ 71.5075894, 23.2383386 ], [ 71.5102955, 23.2392369 ], [ 71.5102859, 23.2387224 ], [ 71.5105643, 23.2387181 ], [ 71.5105788, 23.2394896 ], [ 71.5128077, 23.2395822 ], [ 71.512944, 23.2394518 ], [ 71.5130693, 23.238678 ], [ 71.5139018, 23.2385355 ], [ 71.5140381, 23.2384053 ], [ 71.5140186, 23.2373764 ], [ 71.514156, 23.2372452 ], [ 71.5147126, 23.2372361 ], [ 71.515833, 23.2376047 ], [ 71.5158427, 23.2381189 ], [ 71.5166801, 23.2382339 ], [ 71.5175248, 23.2387347 ], [ 71.5182728, 23.2391968 ], [ 71.5205936, 23.2390719 ], [ 71.5203248, 23.2395909 ], [ 71.5186392, 23.2398695 ], [ 71.5166994, 23.2392626 ], [ 71.5158741, 23.2397903 ], [ 71.5155958, 23.2397948 ], [ 71.5153127, 23.2395421 ], [ 71.5144753, 23.2394272 ], [ 71.5144849, 23.2399417 ], [ 71.5097557, 23.2401456 ], [ 71.5091967, 23.2400263 ], [ 71.509187, 23.2395119 ], [ 71.5080714, 23.2394006 ], [ 71.50751, 23.2391524 ], [ 71.5061135, 23.2389173 ], [ 71.5058376, 23.2390509 ], [ 71.5058232, 23.2382792 ], [ 71.5049835, 23.2380354 ], [ 71.5052521, 23.2375164 ], [ 71.5038582, 23.2374096 ], [ 71.5032942, 23.2370331 ], [ 71.5032848, 23.2365189 ], [ 71.5018954, 23.2366691 ], [ 71.5007966, 23.2374584 ], [ 71.4999737, 23.2381152 ], [ 71.4999831, 23.2386296 ], [ 71.4980421, 23.239046 ], [ 71.4972167, 23.2395737 ], [ 71.4966624, 23.2397115 ], [ 71.4967964, 23.2394522 ], [ 71.496648, 23.23894 ], [ 71.495813, 23.2389532 ], [ 71.4955492, 23.2397292 ], [ 71.4944407, 23.240004 ], [ 71.4944551, 23.2407757 ], [ 71.4938983, 23.2407846 ], [ 71.4941861, 23.2412945 ], [ 71.4936295, 23.2413034 ], [ 71.4939223, 23.2420706 ], [ 71.4933655, 23.2420794 ], [ 71.4936511, 23.2424603 ], [ 71.4947667, 23.2425716 ], [ 71.4949295, 23.2438555 ], [ 71.4942532, 23.2448954 ], [ 71.4939748, 23.2448997 ], [ 71.4939557, 23.243871 ], [ 71.4931183, 23.2437551 ], [ 71.4928351, 23.2435024 ], [ 71.4917242, 23.2436491 ], [ 71.4914125, 23.241853 ], [ 71.4900255, 23.2421324 ], [ 71.4900304, 23.2423896 ], [ 71.4908654, 23.2423764 ], [ 71.4908748, 23.2428908 ], [ 71.4897663, 23.2431656 ], [ 71.4899192, 23.243935 ], [ 71.4902024, 23.2441877 ], [ 71.4903517, 23.2446999 ], [ 71.4897951, 23.2447088 ], [ 71.4898045, 23.2452233 ], [ 71.4895261, 23.2452276 ], [ 71.4894976, 23.2436844 ], [ 71.4892192, 23.2436888 ], [ 71.4888251, 23.2449815 ], [ 71.4885515, 23.2452431 ], [ 71.4884415, 23.2467886 ], [ 71.4876112, 23.2470588 ], [ 71.4874811, 23.2475756 ], [ 71.4872075, 23.2478371 ], [ 71.4868144, 23.2491297 ], [ 71.4859794, 23.2491429 ], [ 71.4855995, 23.2512072 ], [ 71.4849327, 23.2527613 ], [ 71.4835456, 23.2530407 ], [ 71.483425, 23.2540717 ], [ 71.4828826, 23.2548521 ], [ 71.4828922, 23.2553665 ], [ 71.4824942, 23.2564019 ], [ 71.481659, 23.2564151 ], [ 71.4815337, 23.2571889 ], [ 71.48126, 23.2574504 ], [ 71.4811309, 23.2579672 ], [ 71.480582455078121, 23.258102554979818 ], [ 71.4805766, 23.258104 ], [ 71.4803029, 23.2583658 ], [ 71.4794727, 23.258636 ], [ 71.4789253, 23.2591592 ], [ 71.4780926, 23.2593015 ], [ 71.4779625, 23.259818 ], [ 71.476868, 23.2608645 ], [ 71.4768728, 23.2611218 ], [ 71.4771559, 23.2613745 ], [ 71.4770315, 23.2621484 ], [ 71.4764723, 23.262028 ], [ 71.4759085, 23.2616515 ], [ 71.4758847, 23.2603656 ], [ 71.4747783, 23.2607683 ], [ 71.4742311, 23.2612917 ], [ 71.4734031, 23.261691 ], [ 71.4730039, 23.2627264 ], [ 71.4733203, 23.2647797 ], [ 71.4729128, 23.2653006 ], [ 71.472356, 23.2653094 ], [ 71.4719807, 23.2676309 ], [ 71.4727246, 23.2701919 ], [ 71.4721678, 23.2702008 ], [ 71.472047, 23.2712317 ], [ 71.4721916, 23.2714867 ], [ 71.4716348, 23.2714954 ], [ 71.471649, 23.2722671 ], [ 71.4708091, 23.2720231 ], [ 71.470818492818267, 23.272533421076641 ], [ 71.4708233, 23.2727946 ], [ 71.4702665, 23.2728035 ], [ 71.4700166, 23.274351 ], [ 71.4694621, 23.2744878 ], [ 71.4691884, 23.2747496 ], [ 71.4686341, 23.2748874 ], [ 71.4683698, 23.2756634 ], [ 71.4678153, 23.2758003 ], [ 71.4667184, 23.2767184 ], [ 71.4665976, 23.2777494 ], [ 71.4664636, 23.2780089 ], [ 71.4656259, 23.2778929 ], [ 71.4647932, 23.2780352 ], [ 71.4648074, 23.2788067 ], [ 71.4642529, 23.2789435 ], [ 71.4637032, 23.2793385 ], [ 71.4637127, 23.279853 ], [ 71.463151, 23.2796046 ], [ 71.464106, 23.2785604 ], [ 71.4640824, 23.2772745 ], [ 71.4643561, 23.2770129 ], [ 71.4644863, 23.2764962 ], [ 71.4661449, 23.2758265 ], [ 71.4665502, 23.2751773 ], [ 71.468339, 23.273991 ], [ 71.4691718, 23.2738498 ], [ 71.4690274, 23.2735948 ], [ 71.4690179, 23.2730804 ], [ 71.4692916, 23.2728188 ], [ 71.469313114100686, 23.272733421076641 ], [ 71.4694218, 23.2723021 ], [ 71.470257, 23.272289 ], [ 71.4702332, 23.2710031 ], [ 71.4710733, 23.2712471 ], [ 71.4710589, 23.2704754 ], [ 71.4705021, 23.2704843 ], [ 71.4704974, 23.270227 ], [ 71.4710542, 23.2702181 ], [ 71.4708718, 23.2679055 ], [ 71.4705887, 23.2676528 ], [ 71.4704214, 23.2661117 ], [ 71.4698696, 23.2663777 ], [ 71.4696148, 23.2676682 ], [ 71.4701716, 23.2676593 ], [ 71.4699026, 23.2681781 ], [ 71.4685012, 23.2676855 ], [ 71.4688331, 23.2630494 ], [ 71.4693755, 23.262269 ], [ 71.4693424, 23.2604686 ], [ 71.4690593, 23.2602157 ], [ 71.4687666, 23.2594485 ], [ 71.4688732, 23.2576459 ], [ 71.4694299, 23.2576372 ], [ 71.4695781, 23.2581494 ], [ 71.4698612, 23.2584022 ], [ 71.4698896, 23.2599454 ], [ 71.4700317, 23.2600713 ], [ 71.4705908, 23.2601917 ], [ 71.4712578, 23.2586375 ], [ 71.4715314, 23.2583758 ], [ 71.4715173, 23.2576043 ], [ 71.4719234, 23.2569541 ], [ 71.4722016, 23.2569498 ], [ 71.473044, 23.2573229 ], [ 71.4730344, 23.2568086 ], [ 71.4735936, 23.2569279 ], [ 71.4738696, 23.2567954 ], [ 71.4740225, 23.2575648 ], [ 71.4741646, 23.2576907 ], [ 71.4747236, 23.257811 ], [ 71.4747284, 23.2580683 ], [ 71.4738956, 23.2582095 ], [ 71.4730701, 23.2587371 ], [ 71.4725205, 23.2591322 ], [ 71.472126, 23.2604247 ], [ 71.4721546, 23.2619679 ], [ 71.472299, 23.2622229 ], [ 71.4717422, 23.2622318 ], [ 71.4718905, 23.2627439 ], [ 71.4723133, 23.2629946 ], [ 71.4724424, 23.262478 ], [ 71.4732587, 23.2614361 ], [ 71.4733887, 23.2609193 ], [ 71.4739431, 23.2607816 ], [ 71.4747641, 23.2599968 ], [ 71.4753184, 23.2598598 ], [ 71.475309, 23.2593455 ], [ 71.4758705, 23.2595939 ], [ 71.4759996, 23.2590773 ], [ 71.4768204, 23.2582924 ], [ 71.4768157, 23.2580352 ], [ 71.4765326, 23.2577825 ], [ 71.4765184, 23.2570108 ], [ 71.4769293, 23.2566181 ], [ 71.4771111, 23.2565746 ], [ 71.4772147, 23.2569999 ], [ 71.4777715, 23.2569912 ], [ 71.4779196, 23.2575034 ], [ 71.4783424, 23.257754 ], [ 71.4781742, 23.2562129 ], [ 71.4784383, 23.2554368 ], [ 71.4787119, 23.2551753 ], [ 71.4788421, 23.2546587 ], [ 71.4793965, 23.2545207 ], [ 71.4800799, 23.2538674 ], [ 71.4799317, 23.253355 ], [ 71.480382455078114, 23.253242961670701 ], [ 71.4804861, 23.2532172 ], [ 71.4808913, 23.252568 ], [ 71.4817121, 23.2517833 ], [ 71.4817025, 23.2512688 ], [ 71.4825233, 23.2504841 ], [ 71.4826486, 23.2497103 ], [ 71.4832054, 23.2497014 ], [ 71.4831958, 23.249187 ], [ 71.4837501, 23.2490492 ], [ 71.4838864, 23.2489188 ], [ 71.4837287, 23.2478921 ], [ 71.4842853, 23.2478834 ], [ 71.4846737, 23.2463336 ], [ 71.4849474, 23.2460721 ], [ 71.4848998, 23.2435 ], [ 71.4844732, 23.2429921 ], [ 71.4836358, 23.2428763 ], [ 71.483072, 23.2424998 ], [ 71.4829228, 23.2419876 ], [ 71.4823519, 23.2412248 ], [ 71.482347, 23.2409676 ], [ 71.4826206, 23.240706 ], [ 71.4827459, 23.2399322 ], [ 71.4821893, 23.2399409 ], [ 71.4824534, 23.2391649 ], [ 71.4813472, 23.2395678 ], [ 71.4807905, 23.2395767 ], [ 71.4805146, 23.2397101 ], [ 71.4805052, 23.2391957 ], [ 71.480382455078114, 23.23922603198827 ], [ 71.4799508, 23.2393327 ], [ 71.4786688, 23.2401654 ], [ 71.4786579, 23.2395697 ], [ 71.4791158, 23.2393459 ], [ 71.4796605, 23.2386945 ], [ 71.4788255, 23.2387077 ], [ 71.4786955, 23.2392242 ], [ 71.4782831, 23.2394881 ], [ 71.4781151, 23.2379471 ], [ 71.4776885, 23.2374393 ], [ 71.4775033, 23.2373537 ], [ 71.4775441, 23.2371842 ], [ 71.4780913, 23.236661 ], [ 71.4780722, 23.2356323 ], [ 71.4776458, 23.2351244 ], [ 71.4770892, 23.2351331 ], [ 71.476959, 23.2356499 ], [ 71.4764165, 23.2364302 ], [ 71.4764212, 23.2366875 ], [ 71.477415, 23.2377009 ], [ 71.4765776, 23.237585 ], [ 71.4749242, 23.2385119 ], [ 71.4749336, 23.2390263 ], [ 71.4740986, 23.2390396 ], [ 71.4740892, 23.2385251 ], [ 71.4735326, 23.2385338 ], [ 71.4736242, 23.2383628 ], [ 71.4743628, 23.2382635 ], [ 71.4743534, 23.2377491 ], [ 71.4751882, 23.237736 ], [ 71.4751788, 23.2372216 ], [ 71.4760138, 23.2372083 ], [ 71.4758694, 23.2369534 ], [ 71.4758505, 23.2359245 ], [ 71.477082, 23.234747 ], [ 71.4776386, 23.2347381 ], [ 71.4783411, 23.2351135 ], [ 71.4784997, 23.2361401 ], [ 71.4801578, 23.2354703 ], [ 71.480382455078114, 23.235255417890009 ], [ 71.4807049, 23.234947 ], [ 71.4812591, 23.2348101 ], [ 71.4805439, 23.2337924 ], [ 71.4803957, 23.23328 ], [ 71.480382455078114, 23.233277769905367 ], [ 71.4789994, 23.2330449 ], [ 71.4790088, 23.2335591 ], [ 71.4770582, 23.2334609 ], [ 71.4765063, 23.233727 ], [ 71.4748435, 23.2341396 ], [ 71.4743107, 23.2354342 ], [ 71.4751455, 23.2354212 ], [ 71.4751551, 23.2359354 ], [ 71.4748743, 23.2358109 ], [ 71.4737611, 23.2358285 ], [ 71.4734851, 23.2359619 ], [ 71.4730956, 23.2375117 ], [ 71.4725955, 23.2382029 ], [ 71.4724144, 23.2382942 ], [ 71.4724192, 23.2385514 ], [ 71.4726976, 23.238547 ], [ 71.4727892, 23.2383758 ], [ 71.4731553, 23.2383701 ], [ 71.472841, 23.238802 ], [ 71.4729949, 23.2395714 ], [ 71.4724335, 23.2393231 ], [ 71.472443, 23.2398373 ], [ 71.4735611, 23.2400772 ], [ 71.4735658, 23.2403342 ], [ 71.4719935, 23.2405279 ], [ 71.4718911, 23.2401034 ], [ 71.4713343, 23.2401121 ], [ 71.4715985, 23.2393361 ], [ 71.4714133, 23.2392507 ], [ 71.4713012, 23.2383117 ], [ 71.470471, 23.238582 ], [ 71.4706, 23.2380655 ], [ 71.4707375, 23.2379343 ], [ 71.4712918, 23.2377973 ], [ 71.4712821, 23.2372828 ], [ 71.4718389, 23.2372741 ], [ 71.4720841, 23.2354694 ], [ 71.4695768, 23.2353798 ], [ 71.4690272, 23.2357748 ], [ 71.4689017, 23.2365485 ], [ 71.4686282, 23.2368101 ], [ 71.4686847, 23.2374926 ], [ 71.4685037, 23.2375839 ], [ 71.4685084, 23.2378411 ], [ 71.4687868, 23.2378368 ], [ 71.4688783, 23.2376655 ], [ 71.4689663, 23.2376642 ], [ 71.4688057, 23.2388655 ], [ 71.4693553, 23.2384705 ], [ 71.4699094, 23.2383337 ], [ 71.4697794, 23.2388502 ], [ 71.4695057, 23.2391118 ], [ 71.4693814, 23.2398855 ], [ 71.4679801, 23.239393 ], [ 71.4682444, 23.2386172 ], [ 71.4668573, 23.2388961 ], [ 71.4670102, 23.2396655 ], [ 71.4668764, 23.239925 ], [ 71.4660436, 23.2400662 ], [ 71.465494, 23.2404612 ], [ 71.4656422, 23.2409734 ], [ 71.4660673, 23.2413522 ], [ 71.4682893, 23.2410602 ], [ 71.4688482, 23.2411804 ], [ 71.4688531, 23.2414376 ], [ 71.4674638, 23.2415877 ], [ 71.4671877, 23.2417211 ], [ 71.4671973, 23.2422354 ], [ 71.4669189, 23.2422399 ], [ 71.4669094, 23.2417254 ], [ 71.4666335, 23.2418579 ], [ 71.4632933, 23.2419103 ], [ 71.4624678, 23.2424378 ], [ 71.4619181, 23.2428328 ], [ 71.4619276, 23.2433473 ], [ 71.4613663, 23.2430987 ], [ 71.461236, 23.2436154 ], [ 71.4608284, 23.2441363 ], [ 71.4602718, 23.244145 ], [ 71.4602812, 23.2446595 ], [ 71.4597269, 23.2447963 ], [ 71.4594532, 23.2450579 ], [ 71.4586182, 23.2450709 ], [ 71.4580567, 23.2448226 ], [ 71.455547, 23.2446045 ], [ 71.455178125, 23.244610264707205 ], [ 71.4533202, 23.2446393 ], [ 71.4527681, 23.2449052 ], [ 71.4516502, 23.2446653 ], [ 71.4511888, 23.2447132 ], [ 71.450525, 23.2440401 ], [ 71.453299, 23.2434824 ], [ 71.4534283, 23.2429657 ], [ 71.4535655, 23.2428345 ], [ 71.4538439, 23.2428302 ], [ 71.454127, 23.243083 ], [ 71.454978125, 23.243265617733208 ], [ 71.4552451, 23.2433229 ], [ 71.4560754, 23.2430526 ], [ 71.456759, 23.242399 ], [ 71.457028, 23.2418804 ], [ 71.4571393, 23.240335 ], [ 71.4565802, 23.2402146 ], [ 71.454978125, 23.240363596721533 ], [ 71.4549125, 23.2403697 ], [ 71.4546483, 23.2411458 ], [ 71.4543676, 23.241021 ], [ 71.453811, 23.2410297 ], [ 71.453535, 23.2411632 ], [ 71.4535256, 23.2406487 ], [ 71.4524145, 23.2407942 ], [ 71.4518649, 23.2411893 ], [ 71.4518556, 23.2406748 ], [ 71.4510276, 23.2410732 ], [ 71.4507492, 23.2410776 ], [ 71.4501879, 23.240829 ], [ 71.4490722, 23.2407183 ], [ 71.4493364, 23.2399422 ], [ 71.4488728, 23.239861 ], [ 71.4489136, 23.2396916 ], [ 71.4497394, 23.2391641 ], [ 71.4498696, 23.2386476 ], [ 71.4504286, 23.238767 ], [ 71.4511123, 23.2381135 ], [ 71.4512378, 23.2373397 ], [ 71.4515184, 23.2374635 ], [ 71.4526294, 23.237318 ], [ 71.4528749, 23.2355132 ], [ 71.4503674, 23.2354232 ], [ 71.4500915, 23.2355567 ], [ 71.4499612, 23.2360732 ], [ 71.4495536, 23.2365941 ], [ 71.4484451, 23.2368687 ], [ 71.4484591, 23.2376404 ], [ 71.4470769, 23.2381764 ], [ 71.4468407, 23.2404956 ], [ 71.4462816, 23.2403754 ], [ 71.4451542, 23.2396211 ], [ 71.4434842, 23.239647 ], [ 71.4432083, 23.2397804 ], [ 71.4432175, 23.2402949 ], [ 71.4426632, 23.2404317 ], [ 71.4418376, 23.2409591 ], [ 71.4415593, 23.2409634 ], [ 71.4412693, 23.2403251 ], [ 71.4423803, 23.2401789 ], [ 71.4425165, 23.2400484 ], [ 71.4426375, 23.2390175 ], [ 71.4437484, 23.238871 ], [ 71.4438849, 23.2387408 ], [ 71.4440059, 23.2377098 ], [ 71.4428972, 23.2379842 ], [ 71.4429064, 23.2384986 ], [ 71.4423498, 23.2385073 ], [ 71.4421537, 23.2378262 ], [ 71.4423334, 23.2376068 ], [ 71.4428855, 23.2373408 ], [ 71.443704, 23.236428 ], [ 71.4431474, 23.2364367 ], [ 71.4428503, 23.2354121 ], [ 71.4449922, 23.235981 ], [ 71.4450909, 23.2361492 ], [ 71.4445343, 23.2361579 ], [ 71.4444181, 23.2374461 ], [ 71.4445717, 23.2382155 ], [ 71.4454045, 23.2380734 ], [ 71.4456781, 23.2378118 ], [ 71.4470675, 23.2376621 ], [ 71.4471967, 23.2371454 ], [ 71.4480176, 23.2363609 ], [ 71.4482865, 23.2358421 ], [ 71.4481385, 23.2353299 ], [ 71.4461831, 23.234974 ], [ 71.4459095, 23.2352354 ], [ 71.4453553, 23.2353732 ], [ 71.4453646, 23.2358876 ], [ 71.4451794, 23.235802 ], [ 71.4450722, 23.2351203 ], [ 71.4456288, 23.2351116 ], [ 71.4453364, 23.2343444 ], [ 71.4442207, 23.2342325 ], [ 71.4439473, 23.2344941 ], [ 71.4400576, 23.2349411 ], [ 71.4400716, 23.2357126 ], [ 71.4392366, 23.2357256 ], [ 71.4389769, 23.2367587 ], [ 71.4384203, 23.2367674 ], [ 71.4384298, 23.2372819 ], [ 71.4378755, 23.2374187 ], [ 71.4373257, 23.2378135 ], [ 71.437172, 23.2370441 ], [ 71.4367456, 23.2365361 ], [ 71.4356369, 23.2368107 ], [ 71.435488, 23.2362983 ], [ 71.4350616, 23.2357905 ], [ 71.4339437, 23.2355504 ], [ 71.4339529, 23.2360649 ], [ 71.4333963, 23.2360736 ], [ 71.433104, 23.2353063 ], [ 71.4317146, 23.2354559 ], [ 71.4303138, 23.234963 ], [ 71.4294788, 23.2349759 ], [ 71.4289267, 23.2352418 ], [ 71.4278157, 23.2353881 ], [ 71.427825, 23.2359024 ], [ 71.4264404, 23.2363093 ], [ 71.4242183, 23.2366009 ], [ 71.4239422, 23.2367343 ], [ 71.423812, 23.2372509 ], [ 71.4232692, 23.2380311 ], [ 71.4221745, 23.2390772 ], [ 71.422045, 23.2395937 ], [ 71.4203725, 23.2394903 ], [ 71.4200966, 23.2396238 ], [ 71.4198322, 23.2403996 ], [ 71.4192709, 23.2401511 ], [ 71.4195353, 23.239375 ], [ 71.4167496, 23.2392889 ], [ 71.4164689, 23.2391651 ], [ 71.4165982, 23.2386485 ], [ 71.4167356, 23.2385172 ], [ 71.4189554, 23.2380976 ], [ 71.4183756, 23.2368201 ], [ 71.4175381, 23.2367039 ], [ 71.4166893, 23.2359451 ], [ 71.4161302, 23.2358254 ], [ 71.4161395, 23.2363399 ], [ 71.4158588, 23.2362152 ], [ 71.4153045, 23.2363527 ], [ 71.4150076, 23.2353282 ], [ 71.4141726, 23.235341 ], [ 71.4140099, 23.2340571 ], [ 71.4142835, 23.2337956 ], [ 71.414131, 23.2330262 ], [ 71.4145527, 23.233277 ], [ 71.414966, 23.2330133 ], [ 71.4152629, 23.2340379 ], [ 71.4161002, 23.2341532 ], [ 71.4165241, 23.2345331 ], [ 71.4166731, 23.2350452 ], [ 71.4175128, 23.2352896 ], [ 71.4177679, 23.2339993 ], [ 71.4186145, 23.2346291 ], [ 71.4191733, 23.2347495 ], [ 71.4193213, 23.2352618 ], [ 71.4194633, 23.2353877 ], [ 71.4208528, 23.2352382 ], [ 71.4205559, 23.2342136 ], [ 71.4213954, 23.234458 ], [ 71.4214733, 23.2335153 ], [ 71.4216528, 23.2332959 ], [ 71.4224878, 23.2332828 ], [ 71.4226243, 23.2331526 ], [ 71.4224763, 23.2326402 ], [ 71.4219197, 23.2326489 ], [ 71.422049, 23.2321324 ], [ 71.4221864, 23.232001 ], [ 71.4226466, 23.2319534 ], [ 71.4230259, 23.2322454 ], [ 71.4241393, 23.2322282 ], [ 71.4260922, 23.2324554 ], [ 71.4270543, 23.2317978 ], [ 71.426897, 23.230771 ], [ 71.4255029, 23.2306635 ], [ 71.4249511, 23.2309294 ], [ 71.4241136, 23.2308141 ], [ 71.4242053, 23.2306429 ], [ 71.4232693, 23.2303125 ], [ 71.4230051, 23.2310885 ], [ 71.4210475, 23.2306041 ], [ 71.4210382, 23.2300897 ], [ 71.4190853, 23.2298625 ], [ 71.4190807, 23.2296053 ], [ 71.4199155, 23.2295924 ], [ 71.4199063, 23.2290779 ], [ 71.4204631, 23.2290693 ], [ 71.4205547, 23.2288982 ], [ 71.4210172, 23.2289317 ], [ 71.4212909, 23.2286703 ], [ 71.4232368, 23.2285121 ], [ 71.4231442, 23.2286822 ], [ 71.4224066, 23.2287822 ], [ 71.4221329, 23.2290435 ], [ 71.4221376, 23.2293008 ], [ 71.4224158, 23.2292964 ], [ 71.4225075, 23.2291254 ], [ 71.4229702, 23.2291588 ], [ 71.4232601, 23.229798 ], [ 71.4238169, 23.2297895 ], [ 71.4238214, 23.2300468 ], [ 71.4246564, 23.2300337 ], [ 71.4263194, 23.2296217 ], [ 71.426876, 23.2296132 ], [ 71.427159, 23.2298661 ], [ 71.4274374, 23.2298617 ], [ 71.427711, 23.2296003 ], [ 71.428822, 23.2294548 ], [ 71.4283807, 23.2281753 ], [ 71.4283574, 23.2268891 ], [ 71.4282142, 23.2266342 ], [ 71.4262727, 23.2270496 ], [ 71.4257231, 23.2274444 ], [ 71.4263077, 23.2289791 ], [ 71.4244479, 23.2286621 ], [ 71.4243502, 23.2284949 ], [ 71.4249046, 23.2283571 ], [ 71.4250408, 23.2282269 ], [ 71.4248836, 23.2272002 ], [ 71.4234875, 23.2269644 ], [ 71.4234687, 23.2259356 ], [ 71.4229121, 23.2259441 ], [ 71.4229307, 23.2269731 ], [ 71.4212516, 23.2264843 ], [ 71.4212376, 23.2257126 ], [ 71.420412, 23.2262399 ], [ 71.4204213, 23.2267544 ], [ 71.4198645, 23.2267629 ], [ 71.4195538, 23.2249668 ], [ 71.4201127, 23.2250863 ], [ 71.420815, 23.2254618 ], [ 71.420667, 23.2249496 ], [ 71.4212236, 23.2249411 ], [ 71.4209314, 23.2241736 ], [ 71.418705, 23.224208 ], [ 71.4187143, 23.2247224 ], [ 71.4178793, 23.2247353 ], [ 71.4181437, 23.2239593 ], [ 71.4164691, 23.2237277 ], [ 71.4162047, 23.2245038 ], [ 71.4160197, 23.2244181 ], [ 71.4159125, 23.2237364 ], [ 71.4156366, 23.2238687 ], [ 71.413969, 23.2240235 ], [ 71.4140985, 23.223507 ], [ 71.4143722, 23.2232454 ], [ 71.4143629, 23.2227309 ], [ 71.4142196, 23.222476 ], [ 71.4128326, 23.2227546 ], [ 71.413259, 23.2232626 ], [ 71.4138433, 23.2247973 ], [ 71.4141716, 23.2251371 ], [ 71.4141401, 23.2258219 ], [ 71.4140061, 23.2260812 ], [ 71.4145649, 23.2262008 ], [ 71.4148479, 23.2264539 ], [ 71.4154069, 23.2265743 ], [ 71.4151611, 23.228379 ], [ 71.414602, 23.2282586 ], [ 71.4143191, 23.2280056 ], [ 71.4129229, 23.2277699 ], [ 71.4126491, 23.2280313 ], [ 71.4118165, 23.2281732 ], [ 71.4120764, 23.2271399 ], [ 71.4081752, 23.2269426 ], [ 71.4079108, 23.2277185 ], [ 71.4076324, 23.2277228 ], [ 71.4077196, 23.2272944 ], [ 71.4079016, 23.227204 ], [ 71.4079747, 23.226004 ], [ 71.4083, 23.2261689 ], [ 71.4085268, 23.2257383 ], [ 71.4086147, 23.225737 ], [ 71.408718, 23.2261624 ], [ 71.4092747, 23.2261539 ], [ 71.4095391, 23.2253779 ], [ 71.408802, 23.225558 ], [ 71.4085646, 23.2253928 ], [ 71.4083332, 23.2255652 ], [ 71.4078692, 23.2254036 ], [ 71.4077812, 23.2258309 ], [ 71.4073264, 23.2261838 ], [ 71.4073357, 23.2266982 ], [ 71.4059441, 23.2267194 ], [ 71.4059534, 23.2272339 ], [ 71.4051229, 23.227504 ], [ 71.4049925, 23.2280205 ], [ 71.4047188, 23.2282819 ], [ 71.4047419, 23.229568 ], [ 71.4039254, 23.2306098 ], [ 71.4037959, 23.2311263 ], [ 71.4029632, 23.2312671 ], [ 71.4025066, 23.2315722 ], [ 71.4021259, 23.2311518 ], [ 71.4015691, 23.2311603 ], [ 71.4017126, 23.2314155 ], [ 71.4014996, 23.2326166 ], [ 71.4014117, 23.2326179 ], [ 71.4013092, 23.2321934 ], [ 71.4002098, 23.2329821 ], [ 71.4002189, 23.2334966 ], [ 71.400778, 23.2336162 ], [ 71.400919, 23.2337432 ], [ 71.4010677, 23.2342554 ], [ 71.4005111, 23.2342639 ], [ 71.4005204, 23.2347784 ], [ 71.401077, 23.2347699 ], [ 71.4009741, 23.2368298 ], [ 71.4005663, 23.2373507 ], [ 71.3997267, 23.2371061 ], [ 71.3999776, 23.2355586 ], [ 71.3991448, 23.2356996 ], [ 71.398871, 23.2359609 ], [ 71.3983166, 23.2360985 ], [ 71.3980452, 23.2364881 ], [ 71.395547, 23.2369126 ], [ 71.3958184, 23.2365221 ], [ 71.3969273, 23.2362478 ], [ 71.3973374, 23.2358562 ], [ 71.3973144, 23.2345701 ], [ 71.3971711, 23.2343149 ], [ 71.3969859, 23.2342293 ], [ 71.3968836, 23.2338048 ], [ 71.3985466, 23.233393 ], [ 71.3986831, 23.2332628 ], [ 71.3985351, 23.2327504 ], [ 71.3979785, 23.2327589 ], [ 71.3979692, 23.2322445 ], [ 71.3988042, 23.2322318 ], [ 71.3982338, 23.2314686 ], [ 71.3987904, 23.2314601 ], [ 71.3987814, 23.2309456 ], [ 71.3996139, 23.2308039 ], [ 71.3998878, 23.2305423 ], [ 71.4007228, 23.2305297 ], [ 71.4015485, 23.2300023 ], [ 71.4021074, 23.2301229 ], [ 71.4019494, 23.2290963 ], [ 71.4023605, 23.2287035 ], [ 71.4034714, 23.2285584 ], [ 71.4034531, 23.2275295 ], [ 71.4023444, 23.2278037 ], [ 71.402595, 23.2262562 ], [ 71.40343, 23.2262433 ], [ 71.4031424, 23.2257332 ], [ 71.4020337, 23.2260075 ], [ 71.4020429, 23.2265219 ], [ 71.4017647, 23.2265261 ], [ 71.4017555, 23.2260116 ], [ 71.4012011, 23.2261484 ], [ 71.4003754, 23.2266756 ], [ 71.3995427, 23.2268173 ], [ 71.3999689, 23.2273255 ], [ 71.3999736, 23.2275826 ], [ 71.3991524, 23.2283671 ], [ 71.3990229, 23.2288837 ], [ 71.3984661, 23.2288922 ], [ 71.3984754, 23.2294066 ], [ 71.398197, 23.2294108 ], [ 71.398457, 23.2283777 ], [ 71.3976266, 23.2286476 ], [ 71.3974686, 23.2276209 ], [ 71.397599, 23.2271044 ], [ 71.398434, 23.2270916 ], [ 71.3987054, 23.2267011 ], [ 71.3985179, 23.2264873 ], [ 71.3986963, 23.2261866 ], [ 71.3992507, 23.22605 ], [ 71.3992459, 23.2257927 ], [ 71.3981327, 23.2258098 ], [ 71.3981235, 23.2252953 ], [ 71.4000694, 23.2251365 ], [ 71.400475, 23.2244875 ], [ 71.4004612, 23.2237158 ], [ 71.4005961, 23.2234565 ], [ 71.4000395, 23.223465 ], [ 71.3997383, 23.2221832 ], [ 71.398066, 23.2220797 ], [ 71.3955659, 23.2223751 ], [ 71.3952852, 23.2222511 ], [ 71.395276, 23.2217366 ], [ 71.396111, 23.221724 ], [ 71.3961155, 23.2219812 ], [ 71.3977808, 23.2216984 ], [ 71.3986158, 23.2216858 ], [ 71.3983236, 23.2209182 ], [ 71.3977647, 23.2207979 ], [ 71.3969207, 23.2202961 ], [ 71.3957891, 23.2192842 ], [ 71.3949564, 23.2194259 ], [ 71.3949426, 23.2186542 ], [ 71.394386, 23.2186627 ], [ 71.3945064, 23.2176317 ], [ 71.3943631, 23.2173766 ], [ 71.3927001, 23.2177875 ], [ 71.3921505, 23.2181823 ], [ 71.39228, 23.2176657 ], [ 71.392691, 23.217273 ], [ 71.3932454, 23.2171364 ], [ 71.3925353, 23.2163753 ], [ 71.3923875, 23.2158631 ], [ 71.3929441, 23.2158546 ], [ 71.3927678, 23.2137988 ], [ 71.3929029, 23.2135395 ], [ 71.3917874, 23.2134274 ], [ 71.3915136, 23.2136888 ], [ 71.3909547, 23.2135692 ], [ 71.390964, 23.2140836 ], [ 71.3895771, 23.214362 ], [ 71.3892713, 23.212823 ], [ 71.3889931, 23.2128272 ], [ 71.3885933, 23.2138623 ], [ 71.3876381, 23.2149062 ], [ 71.3868078, 23.215176 ], [ 71.3867986, 23.2146616 ], [ 71.386242, 23.2146699 ], [ 71.3869235, 23.2138878 ], [ 71.3870541, 23.2133713 ], [ 71.3876084, 23.2132337 ], [ 71.3881558, 23.2127107 ], [ 71.3887101, 23.2125741 ], [ 71.3887009, 23.2120596 ], [ 71.3892552, 23.2119222 ], [ 71.3893917, 23.211792 ], [ 71.3897935, 23.2108848 ], [ 71.3903478, 23.2107482 ], [ 71.3906079, 23.2097151 ], [ 71.3911643, 23.2097066 ], [ 71.3910155, 23.2091944 ], [ 71.3917048, 23.2087975 ], [ 71.393094, 23.2086482 ], [ 71.3930849, 23.2081337 ], [ 71.3939197, 23.2081211 ], [ 71.3940447, 23.2073471 ], [ 71.3939037, 23.2072203 ], [ 71.3943639, 23.2071727 ], [ 71.3945512, 23.2069937 ], [ 71.3941613, 23.2060589 ], [ 71.3941522, 23.2055446 ], [ 71.3935956, 23.2055529 ], [ 71.3935911, 23.2052957 ], [ 71.3940034, 23.2050322 ], [ 71.3942724, 23.2045136 ], [ 71.3942633, 23.2039992 ], [ 71.3944005, 23.203868 ], [ 71.3949549, 23.2037313 ], [ 71.3950465, 23.2035601 ], [ 71.394671826609226, 23.203225 ], [ 71.3943847, 23.2029682 ], [ 71.394005269480601, 23.203210386760446 ], [ 71.3935589, 23.2034953 ], [ 71.393550581768707, 23.203025 ], [ 71.3935498, 23.2029808 ], [ 71.3939621, 23.2027172 ], [ 71.3942221, 23.2016841 ], [ 71.3949091, 23.2011591 ], [ 71.3949182, 23.2016735 ], [ 71.3954884, 23.2024367 ], [ 71.3954748, 23.201665 ], [ 71.3951919, 23.2014121 ], [ 71.3954701, 23.2014078 ], [ 71.3957164, 23.199603 ], [ 71.3959946, 23.1995989 ], [ 71.395788978868566, 23.203225 ], [ 71.3957829, 23.2033322 ], [ 71.395895123718432, 23.203225 ], [ 71.3963302, 23.2028094 ], [ 71.396512, 23.2027659 ], [ 71.396431422868346, 23.203225 ], [ 71.3963463, 23.20371 ], [ 71.395792, 23.2038466 ], [ 71.3952423, 23.2042415 ], [ 71.394987, 23.2055318 ], [ 71.3944304, 23.2055403 ], [ 71.3947201, 23.2061787 ], [ 71.3951441, 23.2065586 ], [ 71.3952928, 23.207071 ], [ 71.3961254, 23.206929 ], [ 71.3964884, 23.2063685 ], [ 71.3966704, 23.2062781 ], [ 71.3966659, 23.2060209 ], [ 71.3963875, 23.206025 ], [ 71.3961138, 23.2062864 ], [ 71.3962433, 23.2057699 ], [ 71.397211, 23.2053688 ], [ 71.3977674, 23.2053603 ], [ 71.3979084, 23.2054873 ], [ 71.3979176, 23.2060018 ], [ 71.397644, 23.2062632 ], [ 71.3972454, 23.2072983 ], [ 71.3980802, 23.2072857 ], [ 71.3975419, 23.2083231 ], [ 71.3969855, 23.2083316 ], [ 71.396744, 23.2103936 ], [ 71.3961873, 23.2104021 ], [ 71.3959227, 23.2111779 ], [ 71.3953616, 23.2109292 ], [ 71.3953523, 23.2104148 ], [ 71.3956307, 23.2104106 ], [ 71.3954635, 23.2088693 ], [ 71.3958723, 23.2083484 ], [ 71.3953157, 23.2083569 ], [ 71.3946334, 23.2091392 ], [ 71.3949207, 23.2096495 ], [ 71.3949254, 23.2099067 ], [ 71.3938305, 23.2109525 ], [ 71.3938351, 23.2112097 ], [ 71.3945474, 23.2120989 ], [ 71.3951017, 23.2119623 ], [ 71.3953983, 23.2129871 ], [ 71.3959549, 23.2129785 ], [ 71.3961027, 23.2134907 ], [ 71.3962446, 23.2136168 ], [ 71.3968035, 23.2137374 ], [ 71.3971976, 23.212445 ], [ 71.3978823, 23.2117909 ], [ 71.3992599, 23.210998 ], [ 71.3996653, 23.210349 ], [ 71.3996563, 23.2098345 ], [ 71.3997935, 23.2097034 ], [ 71.4009044, 23.2095582 ], [ 71.4010246, 23.2085272 ], [ 71.4015674, 23.207747 ], [ 71.4015491, 23.2067181 ], [ 71.4012662, 23.2064652 ], [ 71.4006867, 23.2051876 ], [ 71.4006774, 23.2046731 ], [ 71.4009511, 23.2044117 ], [ 71.401077, 23.203638 ], [ 71.4005204, 23.2036465 ], [ 71.4002559, 23.2044223 ], [ 71.3996948, 23.2041736 ], [ 71.3996901, 23.2039164 ], [ 71.4002467, 23.2039079 ], [ 71.40026516034186, 23.203225 ], [ 71.40026835907787, 23.203106669752792 ], [ 71.400270566797232, 23.203025 ], [ 71.4003302, 23.200819 ], [ 71.4007436, 23.2005556 ], [ 71.4008914, 23.2010678 ], [ 71.4011741, 23.2013208 ], [ 71.4011972, 23.202607 ], [ 71.4010609, 23.2027372 ], [ 71.4015255, 23.2029468 ], [ 71.4017128, 23.2027678 ], [ 71.4020274, 23.2023369 ], [ 71.4021579, 23.2018204 ], [ 71.402712, 23.2016828 ], [ 71.4032593, 23.2011598 ], [ 71.4038137, 23.2010232 ], [ 71.4035491, 23.201799 ], [ 71.4024406, 23.2020732 ], [ 71.402201199225786, 23.203025 ], [ 71.4021807, 23.2031065 ], [ 71.4014939, 23.2036316 ], [ 71.4013782, 23.2049198 ], [ 71.4019324, 23.2047822 ], [ 71.4023378, 23.2041332 ], [ 71.4027511, 23.2038697 ], [ 71.4027649, 23.2046412 ], [ 71.403602, 23.2047567 ], [ 71.4038849, 23.2050096 ], [ 71.4055523, 23.2048559 ], [ 71.4052648, 23.2043458 ], [ 71.4058237, 23.2044654 ], [ 71.4059647, 23.2045924 ], [ 71.4061134, 23.2051046 ], [ 71.406663, 23.2047098 ], [ 71.4069414, 23.2047056 ], [ 71.4072242, 23.2049585 ], [ 71.4086249, 23.2054516 ], [ 71.4089031, 23.2054475 ], [ 71.4091767, 23.2051859 ], [ 71.410007, 23.204916 ], [ 71.4105544, 23.2043928 ], [ 71.4113867, 23.204252 ], [ 71.411238, 23.2037397 ], [ 71.4113752, 23.2036085 ], [ 71.4119295, 23.2034718 ], [ 71.411880306756757, 23.203225 ], [ 71.4117761, 23.2027022 ], [ 71.4109135, 23.2011717 ], [ 71.4109042, 23.2006573 ], [ 71.4104782, 23.2001492 ], [ 71.4113106, 23.2000075 ], [ 71.411447, 23.1998771 ], [ 71.4115774, 23.1993605 ], [ 71.4126857, 23.1990863 ], [ 71.4123937, 23.198319 ], [ 71.4121178, 23.1984513 ], [ 71.4115612, 23.1984599 ], [ 71.4109955, 23.197954 ], [ 71.4101514, 23.1974524 ], [ 71.4093191, 23.1975941 ], [ 71.4093005, 23.1965652 ], [ 71.4087439, 23.1965739 ], [ 71.4085952, 23.1960615 ], [ 71.4083123, 23.1958087 ], [ 71.4082939, 23.1947797 ], [ 71.4078539, 23.1935 ], [ 71.4084105, 23.1934915 ], [ 71.4084058, 23.1932343 ], [ 71.4075665, 23.1929897 ], [ 71.4078125, 23.191185 ], [ 71.4072559, 23.1911935 ], [ 71.4072467, 23.1906792 ], [ 71.409199, 23.1909066 ], [ 71.4092038, 23.1911638 ], [ 71.4083735, 23.1914337 ], [ 71.408526, 23.1922033 ], [ 71.4081183, 23.192724 ], [ 71.4089509, 23.1925822 ], [ 71.4090917, 23.1927092 ], [ 71.4091055, 23.1934807 ], [ 71.4088365, 23.1939995 ], [ 71.4088411, 23.1942568 ], [ 71.4092637, 23.1945076 ], [ 71.409393, 23.193991 ], [ 71.4098063, 23.1937274 ], [ 71.4099634, 23.194754 ], [ 71.4103882, 23.1951332 ], [ 71.4120577, 23.1951075 ], [ 71.4129017, 23.1956091 ], [ 71.4140148, 23.1955921 ], [ 71.4145666, 23.1953263 ], [ 71.4159556, 23.1951768 ], [ 71.4159416, 23.1944051 ], [ 71.4153852, 23.1944136 ], [ 71.4153759, 23.1938992 ], [ 71.4151, 23.1940317 ], [ 71.4142652, 23.1940445 ], [ 71.4137018, 23.1936677 ], [ 71.4136972, 23.1934104 ], [ 71.4142537, 23.1934019 ], [ 71.4142399, 23.1926302 ], [ 71.4131268, 23.1926472 ], [ 71.4131176, 23.1921328 ], [ 71.4142351, 23.192373 ], [ 71.4130807, 23.1900751 ], [ 71.4122414, 23.1898308 ], [ 71.4122552, 23.1906025 ], [ 71.4116918, 23.1902246 ], [ 71.4097394, 23.1899973 ], [ 71.4083459, 23.1898905 ], [ 71.4083504, 23.1901475 ], [ 71.4086288, 23.1901434 ], [ 71.4086334, 23.1904006 ], [ 71.4077987, 23.1904133 ], [ 71.4069569, 23.1900398 ], [ 71.4061153, 23.1896673 ], [ 71.4061246, 23.1901817 ], [ 71.4052852, 23.1899372 ], [ 71.4052945, 23.1904516 ], [ 71.4047311, 23.1900738 ], [ 71.4041745, 23.1900823 ], [ 71.4038985, 23.1902158 ], [ 71.4038059, 23.1903859 ], [ 71.4027971, 23.1908754 ], [ 71.4008494, 23.190905 ], [ 71.3986166, 23.1905537 ], [ 71.3986258, 23.1910682 ], [ 71.3975081, 23.1908277 ], [ 71.397499, 23.1903135 ], [ 71.39611, 23.1904628 ], [ 71.3958364, 23.1907242 ], [ 71.3952822, 23.1908618 ], [ 71.395273, 23.1903473 ], [ 71.3922284, 23.1912936 ], [ 71.3919547, 23.1915552 ], [ 71.3913981, 23.1915637 ], [ 71.3911221, 23.191697 ], [ 71.3911085, 23.1909253 ], [ 71.3908301, 23.1909294 ], [ 71.3908394, 23.1914439 ], [ 71.3900046, 23.1914565 ], [ 71.3898558, 23.1909444 ], [ 71.3894298, 23.1904361 ], [ 71.3877627, 23.1905896 ], [ 71.3869324, 23.1908595 ], [ 71.385263, 23.1908848 ], [ 71.3847111, 23.1911506 ], [ 71.382761, 23.1910519 ], [ 71.3824644, 23.1900273 ], [ 71.3813539, 23.1901723 ], [ 71.3802316, 23.1896747 ], [ 71.3743975, 23.1902774 ], [ 71.3733004, 23.191195 ], [ 71.3732868, 23.1904233 ], [ 71.3724612, 23.1909502 ], [ 71.3724703, 23.1914647 ], [ 71.3721919, 23.191469 ], [ 71.3721692, 23.1901829 ], [ 71.371891, 23.190187 ], [ 71.3719001, 23.1907015 ], [ 71.3707803, 23.190332 ], [ 71.3699477, 23.1904736 ], [ 71.3696831, 23.1912494 ], [ 71.3694026, 23.1911247 ], [ 71.3682896, 23.1911413 ], [ 71.3672875, 23.191342341479771 ], [ 71.3669029, 23.1914195 ], [ 71.3666268, 23.1915528 ], [ 71.3666179, 23.1910383 ], [ 71.3663395, 23.1910425 ], [ 71.3663486, 23.1915569 ], [ 71.3646814, 23.1917102 ], [ 71.363858, 23.1923664 ], [ 71.3635661, 23.1915989 ], [ 71.3627336, 23.1917395 ], [ 71.3624531, 23.1916155 ], [ 71.3624622, 23.19213 ], [ 71.3619033, 23.1920092 ], [ 71.3616206, 23.1917563 ], [ 71.3610662, 23.1918937 ], [ 71.3610753, 23.1924082 ], [ 71.3602428, 23.1925488 ], [ 71.3588651, 23.1933413 ], [ 71.3583153, 23.1937361 ], [ 71.3583244, 23.1942505 ], [ 71.3572114, 23.1942672 ], [ 71.3572023, 23.1937527 ], [ 71.3569239, 23.1937569 ], [ 71.356933, 23.1942713 ], [ 71.355544, 23.1944203 ], [ 71.3552702, 23.1946816 ], [ 71.3541571, 23.1946983 ], [ 71.3536073, 23.1950929 ], [ 71.3536164, 23.1956074 ], [ 71.3525011, 23.1954951 ], [ 71.3522273, 23.1957565 ], [ 71.350284, 23.1960428 ], [ 71.3500101, 23.1963042 ], [ 71.3475079, 23.1964707 ], [ 71.3472431, 23.1972466 ], [ 71.3464129, 23.1975161 ], [ 71.3461481, 23.1982919 ], [ 71.3447523, 23.1980555 ], [ 71.3447703, 23.1990844 ], [ 71.3456074, 23.1992001 ], [ 71.3458924, 23.1995822 ], [ 71.3445896, 23.199256 ], [ 71.3444875, 23.1988313 ], [ 71.3442091, 23.1988355 ], [ 71.3441209, 23.199263 ], [ 71.3439398, 23.1993541 ], [ 71.3439264, 23.1985824 ], [ 71.3430961, 23.1988521 ], [ 71.3431095, 23.1996238 ], [ 71.3428313, 23.199628 ], [ 71.3428222, 23.1991135 ], [ 71.342544, 23.1991177 ], [ 71.3425529, 23.1996321 ], [ 71.3414376, 23.1995197 ], [ 71.3408878, 23.1999141 ], [ 71.340614, 23.2001755 ], [ 71.3406006, 23.1994038 ], [ 71.3400508, 23.1997975 ], [ 71.3394964, 23.1999349 ], [ 71.3395053, 23.2004494 ], [ 71.3386661, 23.2002046 ], [ 71.3389757, 23.202001 ], [ 71.3386973, 23.2020052 ], [ 71.3386839, 23.2012335 ], [ 71.3384989, 23.2011477 ], [ 71.3381141, 23.20047 ], [ 71.336727, 23.200748 ], [ 71.337012, 23.2011292 ], [ 71.3383116, 23.2013265 ], [ 71.3381364, 23.2017561 ], [ 71.3364645, 23.201652 ], [ 71.3361817, 23.2013989 ], [ 71.3356251, 23.201407 ], [ 71.3353513, 23.2016684 ], [ 71.3345187, 23.20181 ], [ 71.3345321, 23.2025817 ], [ 71.3336994, 23.2027223 ], [ 71.333069882068187, 23.203025 ], [ 71.332956417699933, 23.203079558675036 ], [ 71.332653946863815, 23.203225 ], [ 71.3325953, 23.2032532 ], [ 71.3320475, 23.2037759 ], [ 71.3312127, 23.2037882 ], [ 71.33093, 23.2035352 ], [ 71.3300974, 23.2036765 ], [ 71.3298236, 23.2039379 ], [ 71.3299532, 23.2034214 ], [ 71.330159149310873, 23.203225 ], [ 71.3302271, 23.2031602 ], [ 71.330206497468353, 23.203025 ], [ 71.3300706, 23.2021332 ], [ 71.3297924, 23.2021373 ], [ 71.3298013, 23.2026518 ], [ 71.3292447, 23.2026601 ], [ 71.3292358, 23.2021456 ], [ 71.3275705, 23.2024276 ], [ 71.3278578, 23.2029379 ], [ 71.3270228, 23.2029502 ], [ 71.327217437001352, 23.2031824850974 ], [ 71.3274488, 23.2034586 ], [ 71.3274666, 23.2044875 ], [ 71.3273324, 23.2047468 ], [ 71.327054, 23.2047508 ], [ 71.3270319, 23.2034647 ], [ 71.323975, 23.2037673 ], [ 71.3238444, 23.2042838 ], [ 71.3231625, 23.2050657 ], [ 71.3226013, 23.2048168 ], [ 71.3226147, 23.2055885 ], [ 71.3220538, 23.2053394 ], [ 71.3220449, 23.2048249 ], [ 71.3213076, 23.2050046 ], [ 71.3209183, 23.2040697 ], [ 71.3200878, 23.2043392 ], [ 71.3198274, 23.2053722 ], [ 71.3196423, 23.2052864 ], [ 71.3195314, 23.2043475 ], [ 71.3189791, 23.2046128 ], [ 71.3188484, 23.2051294 ], [ 71.3185745, 23.2053908 ], [ 71.3184448, 23.2059073 ], [ 71.3179814, 23.2058257 ], [ 71.3181487, 23.2048824 ], [ 71.3173161, 23.205023 ], [ 71.3164923, 23.2056788 ], [ 71.3164968, 23.205936 ], [ 71.3170532, 23.2059277 ], [ 71.3169315, 23.2069587 ], [ 71.3170755, 23.207214 ], [ 71.315958, 23.2069731 ], [ 71.3159667, 23.2074875 ], [ 71.3142902, 23.2071258 ], [ 71.3140075, 23.2068727 ], [ 71.3126161, 23.2068931 ], [ 71.311494, 23.2063951 ], [ 71.3112158, 23.2063993 ], [ 71.3109419, 23.2066605 ], [ 71.3087132, 23.206565 ], [ 71.3088431, 23.2060485 ], [ 71.3078431, 23.2045195 ], [ 71.3067255, 23.2042785 ], [ 71.3067342, 23.204793 ], [ 71.3064537, 23.204668 ], [ 71.3056212, 23.2048094 ], [ 71.3056299, 23.2053239 ], [ 71.3050712, 23.2052029 ], [ 71.304508, 23.2048257 ], [ 71.304212, 23.2038007 ], [ 71.3039338, 23.2038049 ], [ 71.3039425, 23.2043193 ], [ 71.3025577, 23.2047251 ], [ 71.3017361, 23.2055091 ], [ 71.3009034, 23.2056503 ], [ 71.3008945, 23.2051358 ], [ 71.3003445, 23.2055295 ], [ 71.3001617, 23.2055728 ], [ 71.3000597, 23.2051481 ], [ 71.2989508, 23.2054216 ], [ 71.2986858, 23.2061974 ], [ 71.2981292, 23.2062055 ], [ 71.2982591, 23.205689 ], [ 71.2983942, 23.2054297 ], [ 71.2975594, 23.205442 ], [ 71.2975505, 23.2049275 ], [ 71.2972723, 23.2049315 ], [ 71.297281, 23.205446 ], [ 71.2958852, 23.2052091 ], [ 71.2961856, 23.2064913 ], [ 71.2970226, 23.2066072 ], [ 71.2971634, 23.2067342 ], [ 71.2973118, 23.2072467 ], [ 71.2959115, 23.2067525 ], [ 71.2959204, 23.207267 ], [ 71.2956399, 23.207142 ], [ 71.2950833, 23.2071502 ], [ 71.2946176, 23.2069402 ], [ 71.2945157, 23.2065157 ], [ 71.2939656, 23.2069092 ], [ 71.2928525, 23.2069254 ], [ 71.2925719, 23.2068013 ], [ 71.2925588, 23.2060296 ], [ 71.2917284, 23.2062989 ], [ 71.2914632, 23.2070748 ], [ 71.2903434, 23.2067047 ], [ 71.2895084, 23.2067168 ], [ 71.2889474, 23.2064677 ], [ 71.2872776, 23.2064921 ], [ 71.2864339, 23.2059897 ], [ 71.2844859, 23.2060179 ], [ 71.2842031, 23.2057648 ], [ 71.2839249, 23.2057688 ], [ 71.2833749, 23.2061632 ], [ 71.2833661, 23.2056487 ], [ 71.2786437, 23.2062318 ], [ 71.2789089, 23.2054562 ], [ 71.2777913, 23.205215 ], [ 71.2775305, 23.2062479 ], [ 71.2761391, 23.2062681 ], [ 71.2764109, 23.2058778 ], [ 71.2769652, 23.2057415 ], [ 71.2769609, 23.2054843 ], [ 71.2758433, 23.2052432 ], [ 71.2755519, 23.2044754 ], [ 71.2749953, 23.2044836 ], [ 71.2750039, 23.204998 ], [ 71.2747257, 23.205002 ], [ 71.274717, 23.2044875 ], [ 71.2736016, 23.2043745 ], [ 71.2727711, 23.2046438 ], [ 71.2722232, 23.2051664 ], [ 71.2713925, 23.2054357 ], [ 71.2708425, 23.20583 ], [ 71.2708339, 23.2053155 ], [ 71.2705555, 23.2053197 ], [ 71.2704247, 23.205836 ], [ 71.2700162, 23.2063566 ], [ 71.269738, 23.2063607 ], [ 71.2697293, 23.2058463 ], [ 71.2683356, 23.2057372 ], [ 71.2680616, 23.2059984 ], [ 71.2672311, 23.2062677 ], [ 71.2661287, 23.2069273 ], [ 71.2658374, 23.2061596 ], [ 71.2655591, 23.2061636 ], [ 71.2655677, 23.206678 ], [ 71.2652895, 23.2066822 ], [ 71.2649981, 23.2059145 ], [ 71.2641633, 23.2059264 ], [ 71.2647068, 23.2051466 ], [ 71.263037, 23.2051708 ], [ 71.2630457, 23.2056852 ], [ 71.2627673, 23.2056892 ], [ 71.2627586, 23.2051747 ], [ 71.2622, 23.2050536 ], [ 71.2619174, 23.2048003 ], [ 71.2602476, 23.2048243 ], [ 71.2599735, 23.2050857 ], [ 71.2591385, 23.2050976 ], [ 71.2571775, 23.2043539 ], [ 71.2566231, 23.2044909 ], [ 71.2566144, 23.2039765 ], [ 71.2549403, 23.2037433 ], [ 71.255346895697272, 23.203225 ], [ 71.2553487, 23.2032227 ], [ 71.255309714731098, 23.203025 ], [ 71.2551969, 23.2024529 ], [ 71.2543621, 23.2024649 ], [ 71.254505, 23.2027202 ], [ 71.254510154052483, 23.203025 ], [ 71.254511085946305, 23.203080110273003 ], [ 71.254513535976685, 23.203225 ], [ 71.2545137, 23.2032347 ], [ 71.2543793, 23.203494 ], [ 71.2538184, 23.2032447 ], [ 71.253828603278052, 23.203225 ], [ 71.2539527, 23.2029854 ], [ 71.2539399, 23.2022137 ], [ 71.2540752, 23.2019544 ], [ 71.2532402, 23.2019665 ], [ 71.2533661, 23.2011927 ], [ 71.2532187, 23.2006801 ], [ 71.2509902, 23.200583 ], [ 71.25044, 23.2009772 ], [ 71.2511482, 23.2017391 ], [ 71.2512965, 23.2022515 ], [ 71.2524054, 23.2019784 ], [ 71.2518596, 23.2026289 ], [ 71.2507464, 23.202645 ], [ 71.2504702, 23.202778 ], [ 71.2505577, 23.2023498 ], [ 71.2510181, 23.2022554 ], [ 71.251014, 23.2019982 ], [ 71.2504574, 23.2020063 ], [ 71.2503644, 23.2021764 ], [ 71.2496224, 23.2020182 ], [ 71.2496352, 23.2027899 ], [ 71.2485179, 23.2025486 ], [ 71.248397451176075, 23.203025 ], [ 71.2482567, 23.2035817 ], [ 71.2477001, 23.2035896 ], [ 71.247690663482658, 23.203025 ], [ 71.2476829, 23.2025605 ], [ 71.2474047, 23.2025645 ], [ 71.247412306393315, 23.203025 ], [ 71.2474132, 23.2030791 ], [ 71.247135, 23.2030831 ], [ 71.2471219, 23.2023112 ], [ 71.2468437, 23.2023152 ], [ 71.24670243313183, 23.203025 ], [ 71.2465869, 23.2036055 ], [ 71.2463086, 23.2036094 ], [ 71.246301041876521, 23.203153786868693 ], [ 71.2462958, 23.2028378 ], [ 71.2457392, 23.2028457 ], [ 71.245743414479264, 23.20309978700385 ], [ 71.245752, 23.2036174 ], [ 71.2443648, 23.2038945 ], [ 71.2443563, 23.20338 ], [ 71.2438061, 23.2037733 ], [ 71.2435277, 23.2037773 ], [ 71.2424037, 23.2031505 ], [ 71.242401699416789, 23.203025 ], [ 71.2423996, 23.2028933 ], [ 71.2429562, 23.2028854 ], [ 71.2426649, 23.2021177 ], [ 71.2412712, 23.2020084 ], [ 71.2409887, 23.201755 ], [ 71.2401537, 23.2017669 ], [ 71.2384925, 23.2023051 ], [ 71.2382185, 23.2025665 ], [ 71.2368248, 23.2024581 ], [ 71.2368333, 23.2029725 ], [ 71.236553, 23.2028474 ], [ 71.2348853, 23.2030003 ], [ 71.2350153, 23.2024838 ], [ 71.2352894, 23.2022226 ], [ 71.2351421, 23.20171 ], [ 71.2340289, 23.2017259 ], [ 71.2339065, 23.2027569 ], [ 71.2340503, 23.2030122 ], [ 71.2329329, 23.2027707 ], [ 71.2333414, 23.2022503 ], [ 71.2331854, 23.2012233 ], [ 71.2317961, 23.2013711 ], [ 71.2309698, 23.2018975 ], [ 71.2298566, 23.2019134 ], [ 71.229011, 23.2012825 ], [ 71.2289981, 23.2005108 ], [ 71.2276046, 23.2004014 ], [ 71.2270501, 23.2005384 ], [ 71.2270586, 23.2010528 ], [ 71.2267804, 23.2010568 ], [ 71.2267676, 23.2002849 ], [ 71.2262151, 23.2005501 ], [ 71.2262066, 23.2000356 ], [ 71.2245602, 23.2014737 ], [ 71.2237339, 23.2020001 ], [ 71.2226207, 23.2020158 ], [ 71.2223467, 23.202277 ], [ 71.221788, 23.2021566 ], [ 71.2217965, 23.2026711 ], [ 71.2209573, 23.2024257 ], [ 71.2209488, 23.2019111 ], [ 71.2192767, 23.2018056 ], [ 71.2189942, 23.2015524 ], [ 71.2170462, 23.2015798 ], [ 71.2167657, 23.2014556 ], [ 71.2166515, 23.203001 ], [ 71.216505235849056, 23.203225 ], [ 71.2159732, 23.2040398 ], [ 71.2154187, 23.2041759 ], [ 71.2151446, 23.2044371 ], [ 71.2137594, 23.204843 ], [ 71.2134939, 23.2056187 ], [ 71.2129394, 23.2057546 ], [ 71.212389, 23.2061488 ], [ 71.2123975, 23.2066633 ], [ 71.2135086, 23.2065185 ], [ 71.2143521, 23.2070213 ], [ 71.2154654, 23.2070056 ], [ 71.2164453, 23.2073783 ], [ 71.2168802, 23.2084013 ], [ 71.217437, 23.2083936 ], [ 71.2174412, 23.2086508 ], [ 71.2168846, 23.2086586 ], [ 71.2175969, 23.2096779 ], [ 71.2181747, 23.2109562 ], [ 71.2180445, 23.2114728 ], [ 71.2191599, 23.2115852 ], [ 71.219434, 23.211324 ], [ 71.2199885, 23.211188 ], [ 71.2201486, 23.2124722 ], [ 71.2200184, 23.2129888 ], [ 71.21974, 23.2129927 ], [ 71.2194448, 23.2119676 ], [ 71.2175007, 23.2122524 ], [ 71.2174922, 23.2117378 ], [ 71.2166572, 23.2117497 ], [ 71.216526, 23.212266 ], [ 71.216252, 23.2125272 ], [ 71.2164001, 23.2130398 ], [ 71.2158434, 23.2130477 ], [ 71.2159991, 23.2140747 ], [ 71.216706, 23.2147075 ], [ 71.2172648, 23.2148289 ], [ 71.2172733, 23.2153433 ], [ 71.2192195, 23.2151866 ], [ 71.219502, 23.2154401 ], [ 71.2203414, 23.2156856 ], [ 71.2206239, 23.2159389 ], [ 71.2211784, 23.2158028 ], [ 71.2210516, 23.2165765 ], [ 71.2211934, 23.2167028 ], [ 71.2220305, 23.21682 ], [ 71.2223472, 23.2191313 ], [ 71.2230341, 23.218607 ], [ 71.2233038, 23.2180885 ], [ 71.2237175, 23.2178255 ], [ 71.223595, 23.2188564 ], [ 71.2237432, 23.2193688 ], [ 71.2234627, 23.2192437 ], [ 71.2226298, 23.2193847 ], [ 71.2226468, 23.2204136 ], [ 71.223197, 23.2200194 ], [ 71.2240342, 23.2201367 ], [ 71.2240471, 23.2209084 ], [ 71.2226638, 23.2214427 ], [ 71.2225496, 23.2229882 ], [ 71.2222841, 23.2237638 ], [ 71.222314, 23.2255646 ], [ 71.2224557, 23.2256907 ], [ 71.2235735, 23.2259322 ], [ 71.223856, 23.2261857 ], [ 71.2246933, 23.2263029 ], [ 71.2244234, 23.2268213 ], [ 71.2238689, 23.2269574 ], [ 71.2235948, 23.2272186 ], [ 71.2227617, 23.2273594 ], [ 71.2227447, 23.2263305 ], [ 71.2219182, 23.2268568 ], [ 71.221931, 23.2276285 ], [ 71.2224877, 23.2276206 ], [ 71.2222179, 23.228139 ], [ 71.2211087, 23.2284121 ], [ 71.220712, 23.2297043 ], [ 71.2206031, 23.231507 ], [ 71.2211597, 23.231499 ], [ 71.2208898, 23.2320175 ], [ 71.2203353, 23.2321535 ], [ 71.2200613, 23.2324147 ], [ 71.2192282, 23.2325555 ], [ 71.2186971, 23.234107 ], [ 71.2192539, 23.2340991 ], [ 71.2192665, 23.2348708 ], [ 71.2187097, 23.2348787 ], [ 71.2185786, 23.2353953 ], [ 71.2180346, 23.2361749 ], [ 71.2178073, 23.2392658 ], [ 71.2185187, 23.2401558 ], [ 71.2196364, 23.2403973 ], [ 71.2203425, 23.2410311 ], [ 71.2204844, 23.2411573 ], [ 71.2216107, 23.2419133 ], [ 71.2220384, 23.242551 ], [ 71.2230282, 23.2434372 ], [ 71.2241503, 23.2439358 ], [ 71.2254219, 23.2450762 ], [ 71.2257088, 23.2455867 ], [ 71.2268394, 23.2465999 ], [ 71.2269876, 23.2471125 ], [ 71.2281034, 23.247225 ], [ 71.2295082, 23.2479768 ], [ 71.229936, 23.2486145 ], [ 71.2305013, 23.249121 ], [ 71.2307925, 23.2498889 ], [ 71.231358, 23.2503954 ], [ 71.231949, 23.2524455 ], [ 71.232523, 23.2534667 ], [ 71.2332259, 23.2538422 ], [ 71.2337914, 23.2543488 ], [ 71.2346351, 23.2548513 ], [ 71.2351941, 23.2549725 ], [ 71.2356326, 23.2562527 ], [ 71.2364808, 23.2570127 ], [ 71.2367677, 23.2575232 ], [ 71.2374752, 23.258156 ], [ 71.2385952, 23.2585264 ], [ 71.2387426, 23.2590388 ], [ 71.2388843, 23.259165 ], [ 71.2402807, 23.2594024 ], [ 71.2405634, 23.2596557 ], [ 71.2419556, 23.2596358 ], [ 71.242636, 23.258726 ], [ 71.2435959, 23.2578112 ], [ 71.2449794, 23.2572767 ], [ 71.2458146, 23.2572648 ], [ 71.2466541, 23.2575102 ], [ 71.2475067, 23.2585272 ], [ 71.2494685, 23.2592711 ], [ 71.2500363, 23.2599067 ], [ 71.2494793, 23.2599146 ], [ 71.2494837, 23.2601718 ], [ 71.2500406, 23.2601639 ], [ 71.2500491, 23.2606784 ], [ 71.2489399, 23.2609515 ], [ 71.2493786, 23.2622318 ], [ 71.2494045, 23.2637753 ], [ 71.2495464, 23.2639014 ], [ 71.2501053, 23.2640225 ], [ 71.2504054, 23.2653047 ], [ 71.2512406, 23.2652928 ], [ 71.2512493, 23.2658073 ], [ 71.2523651, 23.2659195 ], [ 71.2526458, 23.2660445 ], [ 71.2523457, 23.2647623 ], [ 71.2506666, 23.2642718 ], [ 71.2507793, 23.2627264 ], [ 71.2511909, 23.262334 ], [ 71.2536968, 23.2622981 ], [ 71.2539709, 23.2620367 ], [ 71.2550867, 23.2621499 ], [ 71.2550954, 23.2626644 ], [ 71.2556479, 23.262399 ], [ 71.2556566, 23.2629137 ], [ 71.2559329, 23.2627804 ], [ 71.2576012, 23.2626283 ], [ 71.2574702, 23.2631448 ], [ 71.2571962, 23.263406 ], [ 71.257066, 23.2639226 ], [ 71.2601374, 23.264393 ], [ 71.2601287, 23.2638785 ], [ 71.2614266, 23.2639473 ], [ 71.2615252, 23.2641157 ], [ 71.262082, 23.2641076 ], [ 71.2620603, 23.2628214 ], [ 71.2637462, 23.2636973 ], [ 71.2651468, 23.2641917 ], [ 71.2659822, 23.2641796 ], [ 71.2662563, 23.2639184 ], [ 71.2668131, 23.2639103 ], [ 71.2670894, 23.2637782 ], [ 71.2672498, 23.2650622 ], [ 71.2685163, 23.265816 ], [ 71.268773, 23.2645257 ], [ 71.2682162, 23.2645338 ], [ 71.268488, 23.2641433 ], [ 71.2687664, 23.2641393 ], [ 71.2690491, 23.2643926 ], [ 71.2704456, 23.2646296 ], [ 71.270722, 23.2644975 ], [ 71.270735, 23.2652692 ], [ 71.2712941, 23.2653894 ], [ 71.2726993, 23.2661408 ], [ 71.273265, 23.2666474 ], [ 71.2743829, 23.2668883 ], [ 71.2746658, 23.2671416 ], [ 71.2752249, 23.2672626 ], [ 71.2749552, 23.2677812 ], [ 71.2757926, 23.2678972 ], [ 71.2762164, 23.2682775 ], [ 71.2763647, 23.2687899 ], [ 71.2774806, 23.2689019 ], [ 71.2794471, 23.2699025 ], [ 71.2801538, 23.270536 ], [ 71.2804878, 23.2712145 ], [ 71.2801215, 23.2712198 ], [ 71.279741, 23.2707993 ], [ 71.2794625, 23.2708033 ], [ 71.2794713, 23.2713177 ], [ 71.2801712, 23.271565 ], [ 71.2806004, 23.2722015 ], [ 71.2810242, 23.2725818 ], [ 71.2811725, 23.2730942 ], [ 71.2817316, 23.2732144 ], [ 71.2818726, 23.2733414 ], [ 71.2820211, 23.2738537 ], [ 71.283137, 23.2739658 ], [ 71.2834199, 23.2742189 ], [ 71.2856496, 23.2743155 ], [ 71.2856409, 23.273801 ], [ 71.2869109, 23.2748118 ], [ 71.287198, 23.2753223 ], [ 71.2870682, 23.2758386 ], [ 71.287625, 23.2758305 ], [ 71.2877507, 23.2750569 ], [ 71.2884384, 23.2745323 ], [ 71.2884604, 23.2758184 ], [ 71.2890194, 23.2759384 ], [ 71.2893024, 23.2761917 ], [ 71.2901377, 23.2761794 ], [ 71.2904139, 23.2760471 ], [ 71.2904314, 23.2770762 ], [ 71.2909905, 23.2771962 ], [ 71.2918348, 23.2776984 ], [ 71.2923916, 23.2776903 ], [ 71.2929574, 23.2781966 ], [ 71.2937926, 23.2781845 ], [ 71.2940756, 23.2784376 ], [ 71.2946303, 23.2783013 ], [ 71.2947779, 23.2788137 ], [ 71.2961922, 23.2800796 ], [ 71.2962009, 23.2805941 ], [ 71.2963428, 23.2807201 ], [ 71.2971761, 23.2805797 ], [ 71.2971893, 23.2813514 ], [ 71.2980247, 23.2813391 ], [ 71.2980334, 23.2818537 ], [ 71.2985904, 23.2818454 ], [ 71.2985993, 23.2823599 ], [ 71.2988754, 23.2822268 ], [ 71.2994324, 23.2822187 ], [ 71.2995734, 23.2823457 ], [ 71.3000092, 23.2833686 ], [ 71.300566, 23.2833603 ], [ 71.3007136, 23.2838728 ], [ 71.3008556, 23.2839989 ], [ 71.3014148, 23.2841198 ], [ 71.3018762, 23.2866861 ], [ 71.3023076, 23.2874515 ], [ 71.3017507, 23.2874597 ], [ 71.3017552, 23.2877169 ], [ 71.3042725, 23.2883228 ], [ 71.3045552, 23.2885759 ], [ 71.3053951, 23.2888208 ], [ 71.305961, 23.2893272 ], [ 71.3067941, 23.2891867 ], [ 71.3065246, 23.2897054 ], [ 71.3070837, 23.2898252 ], [ 71.3080689, 23.2904544 ], [ 71.3080735, 23.2907116 ], [ 71.3073955, 23.2917509 ], [ 71.3087879, 23.2917303 ], [ 71.3093759, 23.2935228 ], [ 71.3082576, 23.293282 ], [ 71.3082487, 23.2927675 ], [ 71.3060342, 23.2935719 ], [ 71.3067431, 23.2943334 ], [ 71.3068918, 23.2948458 ], [ 71.3074486, 23.2948377 ], [ 71.3075964, 23.29535 ], [ 71.3077384, 23.2954763 ], [ 71.3091373, 23.295842 ], [ 71.3092895, 23.2966116 ], [ 71.3095724, 23.2968649 ], [ 71.309721, 23.2973773 ], [ 71.3105586, 23.2974931 ], [ 71.3108349, 23.2973608 ], [ 71.3109826, 23.2978732 ], [ 71.3111245, 23.2979993 ], [ 71.3116792, 23.297863 ], [ 71.311827, 23.2983754 ], [ 71.3119689, 23.2985014 ], [ 71.3139183, 23.2984727 ], [ 71.3143288, 23.2980811 ], [ 71.3143245, 23.2978239 ], [ 71.3140415, 23.2975708 ], [ 71.3141723, 23.2970543 ], [ 71.3136153, 23.2970624 ], [ 71.3136064, 23.2965479 ], [ 71.3147181, 23.2964026 ], [ 71.3148591, 23.2965296 ], [ 71.3150077, 23.297042 ], [ 71.3164023, 23.2971495 ], [ 71.3166853, 23.2974026 ], [ 71.3178038, 23.2976434 ], [ 71.3180801, 23.2975111 ], [ 71.318089, 23.2980255 ], [ 71.3186459, 23.2980174 ], [ 71.3186548, 23.2985319 ], [ 71.3192118, 23.2985235 ], [ 71.3193594, 23.2990359 ], [ 71.3197843, 23.2994152 ], [ 71.3203435, 23.299536 ], [ 71.320357, 23.3003077 ], [ 71.3209139, 23.3002994 ], [ 71.3209051, 23.2997849 ], [ 71.3217427, 23.2999008 ], [ 71.3225872, 23.3004028 ], [ 71.3242602, 23.3005071 ], [ 71.324408, 23.3010195 ], [ 71.3251158, 23.3016519 ], [ 71.325675, 23.3017726 ], [ 71.3256841, 23.3022871 ], [ 71.3262411, 23.3022788 ], [ 71.3263887, 23.3027912 ], [ 71.3266716, 23.3030444 ], [ 71.326542, 23.3035608 ], [ 71.3273774, 23.3035485 ], [ 71.3273862, 23.3040629 ], [ 71.3285047, 23.3043035 ], [ 71.3282352, 23.3048222 ], [ 71.332415, 23.3048883 ], [ 71.3329765, 23.3051372 ], [ 71.3339665, 23.3060234 ], [ 71.3342539, 23.3065337 ], [ 71.3349574, 23.3069087 ], [ 71.3357907, 23.3067681 ], [ 71.3357996, 23.3072826 ], [ 71.3363588, 23.3074024 ], [ 71.3364998, 23.3075294 ], [ 71.3366486, 23.3080418 ], [ 71.3372012, 23.3077762 ], [ 71.3372101, 23.3082907 ], [ 71.3377671, 23.3082824 ], [ 71.3379149, 23.3087947 ], [ 71.3380568, 23.3089208 ], [ 71.3391687, 23.308776 ], [ 71.3390334, 23.3090353 ], [ 71.3391866, 23.3098049 ], [ 71.3397459, 23.3099248 ], [ 71.340312, 23.3104309 ], [ 71.3404529, 23.3105579 ], [ 71.3406062, 23.3113275 ], [ 71.341499735937504, 23.311607057497916 ], [ 71.3425671, 23.311941 ], [ 71.342991, 23.3123211 ], [ 71.3431398, 23.3128335 ], [ 71.343699, 23.3129533 ], [ 71.3439821, 23.3132064 ], [ 71.3445369, 23.3130699 ], [ 71.3445459, 23.3135844 ], [ 71.3448222, 23.3134511 ], [ 71.3456576, 23.3134387 ], [ 71.3465068, 23.3141977 ], [ 71.3479016, 23.314306 ], [ 71.3479152, 23.3150777 ], [ 71.3493101, 23.3151848 ], [ 71.3498761, 23.315691 ], [ 71.3507162, 23.3159357 ], [ 71.3509991, 23.3161888 ], [ 71.3515586, 23.3163094 ], [ 71.3515675, 23.3168238 ], [ 71.3521246, 23.3168155 ], [ 71.3522997, 23.3188713 ], [ 71.3521698, 23.3193878 ], [ 71.3527293, 23.3195076 ], [ 71.3528702, 23.3196345 ], [ 71.3527406, 23.320151 ], [ 71.3521834, 23.3201595 ], [ 71.352188, 23.3204167 ], [ 71.3530235, 23.3204041 ], [ 71.3530281, 23.3206613 ], [ 71.3521925, 23.320674 ], [ 71.3526325, 23.3219537 ], [ 71.3534817, 23.3227129 ], [ 71.3536304, 23.3232253 ], [ 71.3541876, 23.3232168 ], [ 71.3543399, 23.3239864 ], [ 71.354623, 23.3242394 ], [ 71.3547808, 23.3252663 ], [ 71.3558973, 23.3253776 ], [ 71.3561713, 23.3251162 ], [ 71.356726, 23.3249798 ], [ 71.3567351, 23.3254942 ], [ 71.3572923, 23.3254857 ], [ 71.3570228, 23.3260043 ], [ 71.3589793, 23.3263604 ], [ 71.3652983, 23.3292245 ], [ 71.365744, 23.3307615 ], [ 71.3646321, 23.3309064 ], [ 71.3635247, 23.3313096 ], [ 71.3634259, 23.3336267 ], [ 71.3644172, 23.3345118 ], [ 71.3649766, 23.3346324 ], [ 71.364846, 23.3351489 ], [ 71.3652711, 23.335528 ], [ 71.3672875, 23.335497597917882 ], [ 71.3674996, 23.3354944 ], [ 71.3736461, 23.3364303 ], [ 71.3775665, 23.3375292 ], [ 71.3781511, 23.339064 ], [ 71.3787103, 23.3391837 ], [ 71.3791346, 23.3395636 ], [ 71.3792836, 23.3400759 ], [ 71.3756669, 23.3403882 ], [ 71.375276, 23.3419378 ], [ 71.375002, 23.3421994 ], [ 71.3750067, 23.3424566 ], [ 71.3759982, 23.3433415 ], [ 71.3768385, 23.3435861 ], [ 71.3771216, 23.3438391 ], [ 71.379647, 23.3448299 ], [ 71.3800713, 23.3452098 ], [ 71.3802202, 23.3457221 ], [ 71.3807797, 23.3458418 ], [ 71.3816291, 23.3466006 ], [ 71.3841592, 23.3478486 ], [ 71.3875113, 23.348312 ], [ 71.3905988, 23.3495515 ], [ 71.3908819, 23.3498043 ], [ 71.3936861, 23.3507905 ], [ 71.394241, 23.3506539 ], [ 71.3937532, 23.3545206 ], [ 71.391602461981449, 23.355399542153283 ], [ 71.391460133274478, 23.355457707629085 ], [ 71.391113069588442, 23.355599542153282 ], [ 71.3901569, 23.3559903 ], [ 71.3893327, 23.3566465 ], [ 71.3890679, 23.3574226 ], [ 71.3862888, 23.3578504 ], [ 71.384905, 23.3583861 ], [ 71.371523, 23.358075 ], [ 71.3673167, 23.3565949 ], [ 71.3672875, 23.35659066450047 ], [ 71.367104037497526, 23.356564053016101 ], [ 71.3670875, 23.356561654229694 ], [ 71.3608907, 23.3556628 ], [ 71.360784190325447, 23.355599542153282 ], [ 71.3600458, 23.355161 ], [ 71.3539031, 23.3544817 ], [ 71.3533412, 23.3542328 ], [ 71.350834, 23.3542706 ], [ 71.3491556, 23.3539102 ], [ 71.3490249, 23.3544267 ], [ 71.3486166, 23.3549474 ], [ 71.3477829, 23.3550882 ], [ 71.3427637, 23.3549062 ], [ 71.341638, 23.3542802 ], [ 71.3414892, 23.3537679 ], [ 71.3404966, 23.3527535 ], [ 71.3399372, 23.3526327 ], [ 71.3390901, 23.3520028 ], [ 71.3391793, 23.3491712 ], [ 71.3398604, 23.34826 ], [ 71.3399969, 23.3481298 ], [ 71.3399789, 23.3471009 ], [ 71.3396958, 23.3468478 ], [ 71.3393496, 23.3429935 ], [ 71.3389232, 23.3424853 ], [ 71.3378066, 23.3423729 ], [ 71.3364341, 23.3435517 ], [ 71.3360337, 23.3445868 ], [ 71.3346633, 23.3458937 ], [ 71.3339854, 23.3469331 ], [ 71.3334282, 23.3469414 ], [ 71.3324887, 23.3490138 ], [ 71.3311271, 23.3508351 ], [ 71.330862, 23.3516108 ], [ 71.3305879, 23.3518722 ], [ 71.3301974, 23.3534218 ], [ 71.3296425, 23.3535583 ], [ 71.3277147, 23.3548735 ], [ 71.3252163, 23.3554252 ], [ 71.3243806, 23.3554377 ], [ 71.3196129, 23.3537074 ], [ 71.3182065, 23.3529563 ], [ 71.3167934, 23.3518198 ], [ 71.3166403, 23.3510502 ], [ 71.316074, 23.3505441 ], [ 71.3156388, 23.3495212 ], [ 71.3153602, 23.3495254 ], [ 71.3153736, 23.3502971 ], [ 71.314531, 23.3499232 ], [ 71.3106308, 23.3499809 ], [ 71.3100691, 23.3497318 ], [ 71.3089393, 23.3488484 ], [ 71.3086473, 23.3480808 ], [ 71.3072543, 23.3481013 ], [ 71.3071234, 23.3486178 ], [ 71.3067149, 23.3491385 ], [ 71.304758, 23.3487809 ], [ 71.3039134, 23.3482787 ], [ 71.3019321, 23.3465069 ], [ 71.3008089, 23.3460087 ], [ 71.299133, 23.345776 ], [ 71.2980121, 23.3454071 ], [ 71.2978633, 23.3448947 ], [ 71.2972973, 23.3443884 ], [ 71.2965792, 23.3431124 ], [ 71.294618, 23.3424974 ], [ 71.2934904, 23.341742 ], [ 71.2929312, 23.341622 ], [ 71.2929177, 23.3408503 ], [ 71.2918057, 23.3409949 ], [ 71.2915294, 23.3411279 ], [ 71.2909986, 23.3426796 ], [ 71.2904349, 23.3423014 ], [ 71.2898777, 23.3423095 ], [ 71.2896036, 23.3425709 ], [ 71.28877, 23.3427121 ], [ 71.2887613, 23.3421977 ], [ 71.2879255, 23.3422099 ], [ 71.2879342, 23.3427244 ], [ 71.2870941, 23.3424793 ], [ 71.2870852, 23.3419648 ], [ 71.2859642, 23.3415949 ], [ 71.2854071, 23.3416031 ], [ 71.2845649, 23.3412298 ], [ 71.2845736, 23.3417442 ], [ 71.2840187, 23.3418805 ], [ 71.2837444, 23.3421419 ], [ 71.2826324, 23.3422872 ], [ 71.2826235, 23.3417728 ], [ 71.2820663, 23.3417809 ], [ 71.2827843, 23.3430569 ], [ 71.2827932, 23.3435713 ], [ 71.2821103, 23.3443532 ], [ 71.2812723, 23.3442364 ], [ 71.2793069, 23.3433649 ], [ 71.2791846, 23.3443959 ], [ 71.2783708, 23.3456942 ], [ 71.2776881, 23.3464761 ], [ 71.2754615, 23.3466367 ], [ 71.2737768, 23.3458892 ], [ 71.2717959, 23.3441168 ], [ 71.2712343, 23.3438677 ], [ 71.2701047, 23.3429839 ], [ 71.2690767, 23.3399113 ], [ 71.2686505, 23.3394029 ], [ 71.2672555, 23.3392939 ], [ 71.2669747, 23.3391699 ], [ 71.2668174, 23.3381429 ], [ 71.2654027, 23.3368769 ], [ 71.2642578, 23.3350922 ], [ 71.2638231, 23.3340693 ], [ 71.2632636, 23.3339484 ], [ 71.2610134, 23.3326944 ], [ 71.2593224, 23.3315613 ], [ 71.2588866, 23.3305384 ], [ 71.2581777, 23.3297768 ], [ 71.2576184, 23.3296556 ], [ 71.256774, 23.3291533 ], [ 71.2559252, 23.3283935 ], [ 71.253958, 23.3273927 ], [ 71.2525434, 23.3261264 ], [ 71.2500127, 23.324748 ], [ 71.2498641, 23.3242357 ], [ 71.2491554, 23.323474 ], [ 71.2444048, 23.3226411 ], [ 71.2438433, 23.3223918 ], [ 71.2432884, 23.3225288 ], [ 71.2428874, 23.3235638 ], [ 71.2426131, 23.323825 ], [ 71.2418207, 23.3264094 ], [ 71.2418509, 23.3282101 ], [ 71.2424253, 23.3292311 ], [ 71.2427384, 23.3312852 ], [ 71.2430214, 23.3315384 ], [ 71.2436001, 23.3328166 ], [ 71.2447316, 23.3338297 ], [ 71.2455848, 23.3348467 ], [ 71.2458719, 23.3353572 ], [ 71.2465753, 23.3357325 ], [ 71.2472865, 23.3366233 ], [ 71.2481351, 23.3373831 ], [ 71.2487271, 23.339433 ], [ 71.2494349, 23.3400657 ], [ 71.2499962, 23.3403148 ], [ 71.2511236, 23.3410707 ], [ 71.2514088, 23.3414528 ], [ 71.2508516, 23.3414609 ], [ 71.2517069, 23.3426061 ], [ 71.2532495, 23.3432275 ], [ 71.2532538, 23.3434847 ], [ 71.2515086, 23.3473695 ], [ 71.2501113, 23.3471323 ], [ 71.2499628, 23.3466199 ], [ 71.2495368, 23.3461113 ], [ 71.2489817, 23.3462475 ], [ 71.24758, 23.3457529 ], [ 71.244794, 23.345793 ], [ 71.2442325, 23.3455437 ], [ 71.2425543, 23.3451823 ], [ 71.2427105, 23.3462092 ], [ 71.2428524, 23.3463354 ], [ 71.2434075, 23.3461994 ], [ 71.2437163, 23.347996 ], [ 71.2442737, 23.3479881 ], [ 71.2441382, 23.3482472 ], [ 71.2441469, 23.3487618 ], [ 71.2445717, 23.3491411 ], [ 71.2448503, 23.3491372 ], [ 71.2451246, 23.348876 ], [ 71.2454031, 23.348872 ], [ 71.2455441, 23.348999 ], [ 71.2456969, 23.3497688 ], [ 71.2462563, 23.3498888 ], [ 71.2466802, 23.3502693 ], [ 71.2468288, 23.3507817 ], [ 71.2473859, 23.3507737 ], [ 71.2476819, 23.3517987 ], [ 71.2471246, 23.3518066 ], [ 71.2474162, 23.3525743 ], [ 71.2479756, 23.3526945 ], [ 71.2481166, 23.3528217 ], [ 71.2482652, 23.3533341 ], [ 71.2488223, 23.3533262 ], [ 71.248831, 23.3538406 ], [ 71.2493882, 23.3538325 ], [ 71.2493969, 23.3543471 ], [ 71.2507878, 23.354198 ], [ 71.2517777, 23.3550848 ], [ 71.2519261, 23.3555972 ], [ 71.2524855, 23.3557174 ], [ 71.2530514, 23.3562237 ], [ 71.2552935, 23.3569635 ], [ 71.2564254, 23.3579763 ], [ 71.2592421, 23.3597369 ], [ 71.261917, 23.3613711 ], [ 71.2624916, 23.3623919 ], [ 71.2634783, 23.3630205 ], [ 71.2641852, 23.3636539 ], [ 71.2642158, 23.3654547 ], [ 71.2650737, 23.3667287 ], [ 71.2659227, 23.3674883 ], [ 71.266776, 23.3685051 ], [ 71.2667849, 23.3690196 ], [ 71.2663804, 23.3697975 ], [ 71.2638836, 23.3704764 ], [ 71.2636093, 23.3707376 ], [ 71.2622226, 23.3711441 ], [ 71.2623789, 23.3721712 ], [ 71.2628083, 23.3728077 ], [ 71.2633678, 23.3729287 ], [ 71.2632323, 23.373188 ], [ 71.2632498, 23.3742169 ], [ 71.2635328, 23.3744702 ], [ 71.2636813, 23.3749825 ], [ 71.2600544, 23.3747777 ], [ 71.2599234, 23.3752942 ], [ 71.2600937, 23.3770929 ], [ 71.2606534, 23.3772129 ], [ 71.2607944, 23.3773401 ], [ 71.2608117, 23.378369 ], [ 71.2606774, 23.3786284 ], [ 71.2598412, 23.3786404 ], [ 71.2598456, 23.3788977 ], [ 71.2609626, 23.3790096 ], [ 71.2623689, 23.3797612 ], [ 71.2630716, 23.3801375 ], [ 71.263076, 23.3803947 ], [ 71.2628017, 23.3806559 ], [ 71.2626717, 23.3811725 ], [ 71.2621143, 23.3811804 ], [ 71.2619875, 23.3819542 ], [ 71.2615789, 23.3824747 ], [ 71.260745, 23.3826151 ], [ 71.2601964, 23.3831375 ], [ 71.2593625, 23.3832787 ], [ 71.2599352, 23.3841706 ], [ 71.2604946, 23.3842915 ], [ 71.2607558, 23.3832587 ], [ 71.2632618, 23.3830933 ], [ 71.2639645, 23.3834694 ], [ 71.2641175, 23.3842392 ], [ 71.2646749, 23.3842311 ], [ 71.2645481, 23.3850048 ], [ 71.2649818, 23.3858986 ], [ 71.2655415, 23.3860196 ], [ 71.265406, 23.3862789 ], [ 71.2654148, 23.3867933 ], [ 71.2655568, 23.3869194 ], [ 71.2661164, 23.3870406 ], [ 71.266264, 23.3875529 ], [ 71.266406, 23.3876792 ], [ 71.2678059, 23.3880453 ], [ 71.2672793, 23.389854 ], [ 71.2689624, 23.3904722 ], [ 71.2693865, 23.3908525 ], [ 71.269535, 23.3913651 ], [ 71.2700947, 23.3914851 ], [ 71.2702357, 23.3916121 ], [ 71.2702532, 23.392641 ], [ 71.269979, 23.3929024 ], [ 71.2698488, 23.3934189 ], [ 71.2690083, 23.3931738 ], [ 71.2691648, 23.3942006 ], [ 71.2698686, 23.394576 ], [ 71.2712599, 23.3944276 ], [ 71.2712686, 23.3949421 ], [ 71.2721047, 23.3949298 ], [ 71.2721223, 23.3959589 ], [ 71.2729584, 23.3959466 ], [ 71.273106, 23.3964592 ], [ 71.2736723, 23.3969655 ], [ 71.2742428, 23.3977291 ], [ 71.274539, 23.398754 ], [ 71.2751053, 23.3992603 ], [ 71.2752583, 23.40003 ], [ 71.2744266, 23.4002995 ], [ 71.2745698, 23.4005546 ], [ 71.2752759, 23.4010589 ], [ 71.275267, 23.4005444 ], [ 71.2758246, 23.4005363 ], [ 71.2759503, 23.3997625 ], [ 71.2764944, 23.3989827 ], [ 71.2771807, 23.3983291 ], [ 71.2780145, 23.3981887 ], [ 71.2780058, 23.3976743 ], [ 71.278844, 23.3977903 ], [ 71.2791272, 23.3980434 ], [ 71.2802419, 23.3980271 ], [ 71.2810693, 23.3975004 ], [ 71.2818921, 23.3967166 ], [ 71.2827238, 23.3964471 ], [ 71.28356, 23.3964348 ], [ 71.2844005, 23.3966799 ], [ 71.2855195, 23.3969209 ], [ 71.2866433, 23.3974189 ], [ 71.2870674, 23.3977992 ], [ 71.2870852, 23.3988281 ], [ 71.2872271, 23.3989542 ], [ 71.2877868, 23.3990751 ], [ 71.2877957, 23.3995896 ], [ 71.2883553, 23.3997096 ], [ 71.2893634, 23.4016249 ], [ 71.2899342, 23.4023885 ], [ 71.2910667, 23.4034011 ], [ 71.2912154, 23.4039135 ], [ 71.2917728, 23.4039054 ], [ 71.2920691, 23.4049302 ], [ 71.2931886, 23.4051711 ], [ 71.2933362, 23.4056835 ], [ 71.2940402, 23.4060587 ], [ 71.2946065, 23.406565 ], [ 71.2953094, 23.4069409 ], [ 71.2954581, 23.4074535 ], [ 71.2960177, 23.4075733 ], [ 71.2971461, 23.4083288 ], [ 71.2979954, 23.4090882 ], [ 71.2988406, 23.4095903 ], [ 71.3002319, 23.4094416 ], [ 71.300223, 23.4089271 ], [ 71.3016167, 23.4089065 ], [ 71.3019132, 23.4099315 ], [ 71.3027448, 23.4096618 ], [ 71.3030504, 23.4112012 ], [ 71.3022141, 23.4112135 ], [ 71.3022232, 23.4117279 ], [ 71.3027783, 23.4115907 ], [ 71.304322, 23.4122116 ], [ 71.3044707, 23.412724 ], [ 71.3050258, 23.4125865 ], [ 71.3053069, 23.4127117 ], [ 71.3050147, 23.4119439 ], [ 71.3061319, 23.4120556 ], [ 71.306986, 23.4130723 ], [ 71.3075456, 23.4131931 ], [ 71.3072759, 23.4137117 ], [ 71.3081143, 23.4138275 ], [ 71.3086805, 23.4143337 ], [ 71.3092358, 23.4141974 ], [ 71.3092447, 23.4147119 ], [ 71.3106361, 23.4145622 ], [ 71.3125962, 23.4150477 ], [ 71.3128795, 23.4153008 ], [ 71.3134346, 23.4151643 ], [ 71.3135824, 23.4156767 ], [ 71.3148485, 23.4163008 ], [ 71.3151271, 23.4162966 ], [ 71.3154016, 23.4160352 ], [ 71.3162332, 23.4157657 ], [ 71.3176268, 23.4157449 ], [ 71.31791, 23.415998 ], [ 71.3187508, 23.4162429 ], [ 71.319737, 23.4168719 ], [ 71.3196115, 23.4176457 ], [ 71.3179325, 23.4172841 ], [ 71.3176493, 23.4170311 ], [ 71.3170941, 23.4171685 ], [ 71.317085, 23.416654 ], [ 71.3162489, 23.4166663 ], [ 71.3162579, 23.4171808 ], [ 71.317656, 23.4174174 ], [ 71.317665, 23.4179318 ], [ 71.3193486, 23.4185497 ], [ 71.3215785, 23.4185164 ], [ 71.3221269, 23.4179938 ], [ 71.3224057, 23.4179897 ], [ 71.3225469, 23.4181167 ], [ 71.3226956, 23.4186291 ], [ 71.3232555, 23.4187489 ], [ 71.3235386, 23.419002 ], [ 71.3246535, 23.4189853 ], [ 71.3254987, 23.4194873 ], [ 71.3260562, 23.419479 ], [ 71.3266181, 23.4197279 ], [ 71.3277287, 23.4194541 ], [ 71.3296798, 23.4194249 ], [ 71.3302328, 23.4191594 ], [ 71.332184, 23.4191303 ], [ 71.3338654, 23.4196198 ], [ 71.3341487, 23.4198729 ], [ 71.3366709, 23.420607 ], [ 71.3369542, 23.42086 ], [ 71.3389052, 23.4208307 ], [ 71.3393297, 23.4212108 ], [ 71.3391999, 23.4217273 ], [ 71.3405868, 23.4213202 ], [ 71.341499735937504, 23.421306525203914 ], [ 71.3428166, 23.4212868 ], [ 71.3442171, 23.4216521 ], [ 71.3439702, 23.4234569 ], [ 71.3445253, 23.4233195 ], [ 71.345348, 23.4225351 ], [ 71.3456266, 23.422531 ], [ 71.3461887, 23.4227799 ], [ 71.3475779, 23.4225017 ], [ 71.3481354, 23.4224934 ], [ 71.3495427, 23.4232441 ], [ 71.3501093, 23.42375 ], [ 71.3515121, 23.4242435 ], [ 71.3517954, 23.4244966 ], [ 71.3534769, 23.4249857 ], [ 71.3537602, 23.4252388 ], [ 71.3557251, 23.425981 ], [ 71.3560084, 23.4262341 ], [ 71.3574113, 23.4267273 ], [ 71.357978, 23.4272335 ], [ 71.3591067, 23.4279882 ], [ 71.3610761, 23.4289876 ], [ 71.3621957, 23.429228 ], [ 71.3623839, 23.429523 ], [ 71.3613686, 23.4297551 ], [ 71.3566206, 23.4293123 ], [ 71.3557799, 23.4290677 ], [ 71.3524257, 23.4286037 ], [ 71.3515803, 23.4281017 ], [ 71.3498988, 23.4276126 ], [ 71.3482263, 23.4276378 ], [ 71.3473809, 23.427136 ], [ 71.3465446, 23.4271484 ], [ 71.3456994, 23.4266466 ], [ 71.3434558, 23.4259084 ], [ 71.3431725, 23.4256553 ], [ 71.341499735937504, 23.425423786261835 ], [ 71.3414955, 23.4254232 ], [ 71.3409288, 23.4249171 ], [ 71.3403715, 23.4249254 ], [ 71.337287, 23.4239426 ], [ 71.3358956, 23.4240925 ], [ 71.3358865, 23.423578 ], [ 71.3350549, 23.4238477 ], [ 71.3350458, 23.4233333 ], [ 71.3302936, 23.4226325 ], [ 71.3302982, 23.4228897 ], [ 71.3319752, 23.423122 ], [ 71.3319797, 23.4233792 ], [ 71.3308669, 23.423524 ], [ 71.326951, 23.4228105 ], [ 71.3263891, 23.4225616 ], [ 71.3247121, 23.4223293 ], [ 71.3149516, 23.422217 ], [ 71.3141107, 23.4219723 ], [ 71.3138276, 23.421719 ], [ 71.3118741, 23.4216198 ], [ 71.3115819, 23.4208523 ], [ 71.3104647, 23.4207396 ], [ 71.3082237, 23.4201301 ], [ 71.3085091, 23.4205113 ], [ 71.3093543, 23.4210135 ], [ 71.3107569, 23.4215073 ], [ 71.3113233, 23.4220135 ], [ 71.312717, 23.4219929 ], [ 71.3128582, 23.4221199 ], [ 71.3130069, 23.4226323 ], [ 71.3102196, 23.4226735 ], [ 71.3102284, 23.4231879 ], [ 71.3096732, 23.4233244 ], [ 71.308556, 23.4232127 ], [ 71.3085649, 23.4237272 ], [ 71.3080096, 23.4238636 ], [ 71.3071823, 23.4243904 ], [ 71.3066248, 23.4243987 ], [ 71.3063439, 23.4242747 ], [ 71.3060784, 23.4250503 ], [ 71.3071935, 23.4250339 ], [ 71.3069281, 23.4258097 ], [ 71.3055276, 23.425444 ], [ 71.3052445, 23.425191 ], [ 71.3032887, 23.4249625 ], [ 71.3024435, 23.4244603 ], [ 71.2996382, 23.4234726 ], [ 71.2985231, 23.423489 ], [ 71.2979612, 23.4232399 ], [ 71.2954481, 23.4230195 ], [ 71.294061, 23.4234265 ], [ 71.2943575, 23.4244512 ], [ 71.2949172, 23.4245712 ], [ 71.2950584, 23.4246982 ], [ 71.2953592, 23.4259802 ], [ 71.2952249, 23.4262395 ], [ 71.2941143, 23.4265132 ], [ 71.2938665, 23.428318 ], [ 71.292756, 23.4285914 ], [ 71.2924904, 23.4293673 ], [ 71.2910922, 23.4291305 ], [ 71.2910833, 23.428616 ], [ 71.2899682, 23.4286325 ], [ 71.2898197, 23.4281201 ], [ 71.2889699, 23.4273607 ], [ 71.2888178, 23.4265909 ], [ 71.2874195, 23.4263541 ], [ 71.2874107, 23.4258396 ], [ 71.288247, 23.4258275 ], [ 71.2882426, 23.4255701 ], [ 71.2868465, 23.4254616 ], [ 71.2865656, 23.4253374 ], [ 71.2862691, 23.4243127 ], [ 71.2857095, 23.4241917 ], [ 71.2854262, 23.4239386 ], [ 71.2845855, 23.4236935 ], [ 71.2843024, 23.4234404 ], [ 71.2837471, 23.4235777 ], [ 71.2837603, 23.4243493 ], [ 71.2820922, 23.424631 ], [ 71.2818002, 23.4238634 ], [ 71.2815237, 23.4239957 ], [ 71.2809639, 23.4238757 ], [ 71.281234, 23.4233571 ], [ 71.2806741, 23.4232361 ], [ 71.280391, 23.4229831 ], [ 71.2792693, 23.4226139 ], [ 71.279265, 23.4223567 ], [ 71.2798225, 23.4223486 ], [ 71.2795348, 23.4218381 ], [ 71.2784177, 23.4217253 ], [ 71.2781412, 23.4218585 ], [ 71.2778492, 23.4210908 ], [ 71.276732, 23.420978 ], [ 71.2761767, 23.4211152 ], [ 71.2760676, 23.4229179 ], [ 71.2752489, 23.4239591 ], [ 71.275271, 23.4252452 ], [ 71.2755541, 23.4254985 ], [ 71.2761381, 23.4270337 ], [ 71.2761689, 23.4288343 ], [ 71.2764521, 23.4290874 ], [ 71.2766008, 23.4296 ], [ 71.276041, 23.429479 ], [ 71.2754747, 23.4289727 ], [ 71.2740743, 23.4286075 ], [ 71.2739255, 23.4280951 ], [ 71.2733549, 23.4273316 ], [ 71.2727885, 23.4268252 ], [ 71.272632, 23.4257982 ], [ 71.2712338, 23.4255612 ], [ 71.2709287, 23.424022 ], [ 71.2703689, 23.423901 ], [ 71.2695218, 23.4232705 ], [ 71.2693687, 23.4225007 ], [ 71.2689423, 23.4219923 ], [ 71.268106, 23.4220046 ], [ 71.2679575, 23.421492 ], [ 71.2673867, 23.4207285 ], [ 71.2669603, 23.4202201 ], [ 71.2661219, 23.4201031 ], [ 71.265279, 23.41973 ], [ 71.2652616, 23.4187009 ], [ 71.2647063, 23.4188372 ], [ 71.2638613, 23.4183348 ], [ 71.2624653, 23.4182269 ], [ 71.2623341, 23.4187434 ], [ 71.2620597, 23.4190046 ], [ 71.2615241, 23.4202989 ], [ 71.2618686, 23.4241535 ], [ 71.2621518, 23.4244066 ], [ 71.2624479, 23.4254316 ], [ 71.2634351, 23.42606 ], [ 71.2645632, 23.4268156 ], [ 71.2654128, 23.4275752 ], [ 71.2665343, 23.4279453 ], [ 71.2666821, 23.4284578 ], [ 71.266824, 23.4285839 ], [ 71.2685056, 23.4290742 ], [ 71.2690718, 23.4295805 ], [ 71.2696316, 23.4297014 ], [ 71.2697968, 23.4312427 ], [ 71.2700799, 23.431496 ], [ 71.2700932, 23.4322677 ], [ 71.2703808, 23.4327782 ], [ 71.271368, 23.4334066 ], [ 71.2719278, 23.4335276 ], [ 71.2716577, 23.434046 ], [ 71.2713767, 23.4339211 ], [ 71.2708191, 23.4339292 ], [ 71.2705383, 23.433805 ], [ 71.2702462, 23.4330373 ], [ 71.2696887, 23.4330454 ], [ 71.2696798, 23.432531 ], [ 71.2691223, 23.4325391 ], [ 71.2688305, 23.4317714 ], [ 71.2682706, 23.4316504 ], [ 71.2665717, 23.4301314 ], [ 71.2660098, 23.4298823 ], [ 71.2643109, 23.4283631 ], [ 71.2637488, 23.4281138 ], [ 71.2626186, 23.4272303 ], [ 71.2629148, 23.4282552 ], [ 71.2615078, 23.4275036 ], [ 71.2614991, 23.4269891 ], [ 71.2609393, 23.4268681 ], [ 71.2589662, 23.4256102 ], [ 71.2578337, 23.4245973 ], [ 71.256712, 23.4242282 ], [ 71.2565634, 23.4237156 ], [ 71.2558539, 23.422954 ], [ 71.2552964, 23.4229621 ], [ 71.2552877, 23.4224476 ], [ 71.254728, 23.4223265 ], [ 71.2541639, 23.4219492 ], [ 71.2541552, 23.4214348 ], [ 71.2527592, 23.4213257 ], [ 71.2524761, 23.4210725 ], [ 71.2488348, 23.4200959 ], [ 71.2474411, 23.4201159 ], [ 71.2460539, 23.4205223 ], [ 71.2460626, 23.4210367 ], [ 71.2457838, 23.4210407 ], [ 71.2457751, 23.4205263 ], [ 71.2452242, 23.4209197 ], [ 71.2435625, 23.4215873 ], [ 71.2434398, 23.4226183 ], [ 71.2428997, 23.4236553 ], [ 71.2429344, 23.4257132 ], [ 71.2432262, 23.4264809 ], [ 71.2431047, 23.4275119 ], [ 71.2436623, 23.4275039 ], [ 71.2427035, 23.4285468 ], [ 71.2428564, 23.4293166 ], [ 71.2425753, 23.4291915 ], [ 71.2422966, 23.4291955 ], [ 71.2417456, 23.4295897 ], [ 71.2416275, 23.430878 ], [ 71.2419106, 23.4311312 ], [ 71.2419191, 23.4316457 ], [ 71.2416447, 23.4319071 ], [ 71.241649, 23.4321643 ], [ 71.2419365, 23.4326748 ], [ 71.242237, 23.433957 ], [ 71.2421024, 23.4342161 ], [ 71.2412618, 23.433971 ], [ 71.2412748, 23.4347426 ], [ 71.2404385, 23.4347547 ], [ 71.2402769, 23.4334705 ], [ 71.2397107, 23.432964 ], [ 71.239702, 23.4324495 ], [ 71.2399764, 23.4321883 ], [ 71.2402334, 23.430898 ], [ 71.2403691, 23.4306389 ], [ 71.2395349, 23.4307789 ], [ 71.2389838, 23.4311734 ], [ 71.2391314, 23.4316858 ], [ 71.2388613, 23.4322042 ], [ 71.238883, 23.4334905 ], [ 71.2380596, 23.4342741 ], [ 71.2369834, 23.4366054 ], [ 71.2361644, 23.4376462 ], [ 71.2361816, 23.4386754 ], [ 71.2357813, 23.4397103 ], [ 71.2349492, 23.4399795 ], [ 71.2352584, 23.4417761 ], [ 71.2347008, 23.4417842 ], [ 71.2347093, 23.4422987 ], [ 71.2352671, 23.4422907 ], [ 71.2351314, 23.4425499 ], [ 71.2351488, 23.4435788 ], [ 71.2348743, 23.4438402 ], [ 71.2348959, 23.4451263 ], [ 71.2354752, 23.4464045 ], [ 71.2366209, 23.4481892 ], [ 71.2366381, 23.4492182 ], [ 71.2369299, 23.4499859 ], [ 71.2379214, 23.4508717 ], [ 71.2390454, 23.4513703 ], [ 71.2399036, 23.4526445 ], [ 71.2407422, 23.4527615 ], [ 71.2408898, 23.4532741 ], [ 71.2421646, 23.4544132 ], [ 71.2432863, 23.4547834 ], [ 71.2434341, 23.4552958 ], [ 71.2440047, 23.4560596 ], [ 71.247403, 23.4590983 ], [ 71.2485489, 23.4608829 ], [ 71.2493941, 23.4613852 ], [ 71.2495426, 23.4618978 ], [ 71.2503793, 23.4618857 ], [ 71.250248, 23.4624022 ], [ 71.2503901, 23.4625283 ], [ 71.2509499, 23.4626492 ], [ 71.2508144, 23.4629086 ], [ 71.2508407, 23.4644519 ], [ 71.2505706, 23.4649705 ], [ 71.2505749, 23.4652278 ], [ 71.2511414, 23.4657341 ], [ 71.2512899, 23.4662467 ], [ 71.2524098, 23.4664876 ], [ 71.2525574, 23.4670002 ], [ 71.2526995, 23.4671263 ], [ 71.2532572, 23.4671183 ], [ 71.2535317, 23.466857 ], [ 71.2540894, 23.466849 ], [ 71.2543638, 23.4665876 ], [ 71.2554793, 23.4665716 ], [ 71.2563245, 23.4670739 ], [ 71.2568822, 23.4670658 ], [ 71.2571589, 23.4669337 ], [ 71.2573154, 23.4679605 ], [ 71.258165, 23.4687201 ], [ 71.2583137, 23.4692327 ], [ 71.2588715, 23.4692246 ], [ 71.2591722, 23.4705067 ], [ 71.2594489, 23.4703735 ], [ 71.2600066, 23.4703656 ], [ 71.2601478, 23.4704926 ], [ 71.2602963, 23.4710049 ], [ 71.2614118, 23.4709889 ], [ 71.2614162, 23.4712461 ], [ 71.2608584, 23.4712542 ], [ 71.2613069, 23.4730488 ], [ 71.2611769, 23.4735651 ], [ 71.2622945, 23.4736772 ], [ 71.2625778, 23.4739305 ], [ 71.2628565, 23.4739263 ], [ 71.2631312, 23.4736651 ], [ 71.2639633, 23.4733956 ], [ 71.2647998, 23.4733835 ], [ 71.265512, 23.4742741 ], [ 71.2655163, 23.4745315 ], [ 71.2652419, 23.4747927 ], [ 71.2652549, 23.4755644 ], [ 71.2653971, 23.4756904 ], [ 71.265676, 23.4756865 ], [ 71.2659505, 23.4754253 ], [ 71.2673404, 23.4751476 ], [ 71.2677428, 23.4742418 ], [ 71.268155, 23.4738494 ], [ 71.2701026, 23.4735636 ], [ 71.2703859, 23.4738169 ], [ 71.2723402, 23.4739174 ], [ 71.272488, 23.4744298 ], [ 71.2727711, 23.4746831 ], [ 71.2730809, 23.4764797 ], [ 71.2726719, 23.4770002 ], [ 71.2721098, 23.4767511 ], [ 71.2717131, 23.4780433 ], [ 71.2714387, 23.4783047 ], [ 71.270646, 23.4808893 ], [ 71.2706549, 23.4814037 ], [ 71.2717968, 23.4829308 ], [ 71.2712831, 23.4855113 ], [ 71.2705995, 23.4862931 ], [ 71.2700418, 23.4863013 ], [ 71.2701939, 23.4870709 ], [ 71.2706239, 23.4877074 ], [ 71.2711839, 23.4878284 ], [ 71.2711926, 23.4883429 ], [ 71.2717526, 23.4884629 ], [ 71.2718938, 23.4885901 ], [ 71.2717681, 23.4893636 ], [ 71.2723258, 23.4893555 ], [ 71.2720601, 23.4901314 ], [ 71.2712256, 23.4902718 ], [ 71.2709512, 23.490533 ], [ 71.2701168, 23.4906744 ], [ 71.27013, 23.491446 ], [ 71.2690187, 23.4917195 ], [ 71.2688964, 23.4927505 ], [ 71.2683563, 23.4937876 ], [ 71.2683695, 23.4945593 ], [ 71.2685139, 23.4948144 ], [ 71.2679559, 23.4948225 ], [ 71.2681037, 23.4953349 ], [ 71.2683871, 23.4955882 ], [ 71.2685358, 23.4961005 ], [ 71.2679781, 23.4961087 ], [ 71.2681259, 23.4966211 ], [ 71.268268, 23.4967473 ], [ 71.268828, 23.4968683 ], [ 71.2688191, 23.4963538 ], [ 71.2693791, 23.4964738 ], [ 71.2695203, 23.4966008 ], [ 71.2693946, 23.4973746 ], [ 71.2699546, 23.4974946 ], [ 71.2700958, 23.4976216 ], [ 71.2701177, 23.4989078 ], [ 71.2704012, 23.499161 ], [ 71.2705632, 23.5004451 ], [ 71.2711232, 23.5005651 ], [ 71.2712644, 23.5006921 ], [ 71.2711342, 23.5012086 ], [ 71.2703018, 23.5014782 ], [ 71.2700361, 23.5022538 ], [ 71.270594, 23.5022457 ], [ 71.2703328, 23.5032788 ], [ 71.2697749, 23.5032869 ], [ 71.2696834, 23.5061185 ], [ 71.2708123, 23.5068739 ], [ 71.2708522, 23.509189 ], [ 71.2715698, 23.5103358 ], [ 71.2724088, 23.5104528 ], [ 71.2722776, 23.5109694 ], [ 71.2720032, 23.5112306 ], [ 71.2720253, 23.5125167 ], [ 71.2727341, 23.5131493 ], [ 71.2741355, 23.5135152 ], [ 71.2741266, 23.5130007 ], [ 71.2748323, 23.513505 ], [ 71.2749811, 23.5140174 ], [ 71.275258, 23.5138843 ], [ 71.2758157, 23.513876 ], [ 71.2769404, 23.5143742 ], [ 71.2780561, 23.5143579 ], [ 71.2781975, 23.514485 ], [ 71.2783462, 23.5149973 ], [ 71.2797431, 23.5151051 ], [ 71.2805668, 23.5143211 ], [ 71.2825105, 23.5137781 ], [ 71.2844653, 23.5138785 ], [ 71.2844963, 23.5156791 ], [ 71.2853332, 23.5156668 ], [ 71.2854634, 23.5151502 ], [ 71.285601, 23.5150193 ], [ 71.28588, 23.5150151 ], [ 71.2867301, 23.5157745 ], [ 71.2878459, 23.5157581 ], [ 71.2881226, 23.5156258 ], [ 71.287996, 23.5163995 ], [ 71.2895441, 23.5171487 ], [ 71.2895352, 23.5166343 ], [ 71.2903721, 23.516622 ], [ 71.2902969, 23.517821 ], [ 71.2890019, 23.5180567 ], [ 71.288435, 23.5175505 ], [ 71.2875959, 23.5174347 ], [ 71.2876048, 23.5179491 ], [ 71.2873258, 23.5179531 ], [ 71.2873169, 23.5174386 ], [ 71.2867613, 23.5175751 ], [ 71.2859178, 23.517202 ], [ 71.2859355, 23.5182309 ], [ 71.2864957, 23.5183509 ], [ 71.2872169, 23.5197558 ], [ 71.2873593, 23.519882 ], [ 71.289593, 23.5199782 ], [ 71.2895001, 23.5201483 ], [ 71.2890417, 23.5203717 ], [ 71.288484, 23.5203801 ], [ 71.2876583, 23.5210359 ], [ 71.2875316, 23.5218096 ], [ 71.2876738, 23.5219357 ], [ 71.2885106, 23.5219234 ], [ 71.2886518, 23.5220504 ], [ 71.2886607, 23.5225649 ], [ 71.2885261, 23.5228242 ], [ 71.2882449, 23.5226991 ], [ 71.2876892, 23.5228365 ], [ 71.2878416, 23.5236061 ], [ 71.2879839, 23.5237322 ], [ 71.2885439, 23.5238531 ], [ 71.2882738, 23.5243715 ], [ 71.2893965, 23.5247407 ], [ 71.2895377, 23.5248677 ], [ 71.2896866, 23.52538 ], [ 71.2885662, 23.5251393 ], [ 71.289002, 23.5261619 ], [ 71.2899899, 23.5267902 ], [ 71.2911081, 23.5269028 ], [ 71.2910992, 23.5263884 ], [ 71.293621, 23.5269941 ], [ 71.2964108, 23.5269529 ], [ 71.2994615, 23.5258786 ], [ 71.3008563, 23.525858 ], [ 71.3016012, 23.5260637 ], [ 71.3017, 23.5262319 ], [ 71.3025346, 23.5260905 ], [ 71.3028091, 23.5258291 ], [ 71.303088, 23.525825 ], [ 71.3037917, 23.5262011 ], [ 71.3039406, 23.5267134 ], [ 71.3047731, 23.5264437 ], [ 71.3053311, 23.5264354 ], [ 71.3053354, 23.5266927 ], [ 71.3056123, 23.5265594 ], [ 71.3070049, 23.5264107 ], [ 71.3095155, 23.5263734 ], [ 71.3092455, 23.526892 ], [ 71.3089642, 23.5267671 ], [ 71.3071071, 23.5268353 ], [ 71.3047866, 23.5272154 ], [ 71.3045053, 23.5270905 ], [ 71.3028359, 23.5273725 ], [ 71.3022825, 23.527638 ], [ 71.2981092, 23.5283434 ], [ 71.2981047, 23.5280862 ], [ 71.2986626, 23.5280778 ], [ 71.2986582, 23.5278206 ], [ 71.2972612, 23.5277121 ], [ 71.2961496, 23.527986 ], [ 71.2941946, 23.5278866 ], [ 71.2942035, 23.528401 ], [ 71.2911349, 23.5284462 ], [ 71.2912827, 23.5289586 ], [ 71.2915662, 23.5292118 ], [ 71.2917195, 23.5299814 ], [ 71.2925564, 23.529969 ], [ 71.2924343, 23.531 ], [ 71.2924432, 23.5315144 ], [ 71.2924655, 23.5328006 ], [ 71.2931746, 23.533433 ], [ 71.294016, 23.5336779 ], [ 71.2956877, 23.533525 ], [ 71.2954176, 23.5340436 ], [ 71.2948552, 23.5337945 ], [ 71.2947242, 23.5343111 ], [ 71.2948866, 23.5355951 ], [ 71.2943241, 23.5353462 ], [ 71.2943419, 23.5363751 ], [ 71.2948998, 23.5363668 ], [ 71.2949132, 23.5371385 ], [ 71.294632, 23.5370136 ], [ 71.2937951, 23.537026 ], [ 71.2935184, 23.5371591 ], [ 71.2937132, 23.5378397 ], [ 71.2935295, 23.5378017 ], [ 71.2929648, 23.5374246 ], [ 71.2929737, 23.5379391 ], [ 71.2915766, 23.5378306 ], [ 71.2904672, 23.5382332 ], [ 71.2910519, 23.5397684 ], [ 71.2913288, 23.5396352 ], [ 71.2921657, 23.5396229 ], [ 71.2924492, 23.539876 ], [ 71.2955205, 23.5399599 ], [ 71.2952281, 23.5391922 ], [ 71.29467, 23.5392005 ], [ 71.294762, 23.5390294 ], [ 71.2952213, 23.538806 ], [ 71.2968953, 23.5387813 ], [ 71.2975855, 23.5383855 ], [ 71.2977121, 23.5376118 ], [ 71.298418, 23.538116 ], [ 71.2984314, 23.5388877 ], [ 71.2988571, 23.5392668 ], [ 71.3013681, 23.5392298 ], [ 71.3016494, 23.5393547 ], [ 71.3016405, 23.5388403 ], [ 71.3010824, 23.5388484 ], [ 71.3010735, 23.5383339 ], [ 71.3007966, 23.5384662 ], [ 71.2999574, 23.5383506 ], [ 71.3000875, 23.537834 ], [ 71.2995161, 23.5370706 ], [ 71.2995116, 23.5368134 ], [ 71.2996494, 23.5366822 ], [ 71.3002052, 23.5365458 ], [ 71.3002186, 23.5373175 ], [ 71.300772, 23.5370519 ], [ 71.3009245, 23.5378215 ], [ 71.301208, 23.5380748 ], [ 71.301357, 23.5385872 ], [ 71.3021916, 23.5384456 ], [ 71.3027518, 23.5385664 ], [ 71.3027609, 23.5390808 ], [ 71.3033188, 23.5390727 ], [ 71.3031878, 23.5395893 ], [ 71.3034713, 23.5398423 ], [ 71.3033456, 23.5406159 ], [ 71.3039037, 23.5406078 ], [ 71.3036382, 23.5413836 ], [ 71.3030801, 23.5413918 ], [ 71.3033659, 23.5417732 ], [ 71.3039261, 23.5418939 ], [ 71.3037951, 23.5424105 ], [ 71.3035206, 23.5426717 ], [ 71.303525, 23.5429289 ], [ 71.3038085, 23.5431821 ], [ 71.30425, 23.5444621 ], [ 71.3036919, 23.5444702 ], [ 71.3036785, 23.5436985 ], [ 71.3033995, 23.5437027 ], [ 71.3034084, 23.5442171 ], [ 71.3011631, 23.5434785 ], [ 71.301154, 23.542964 ], [ 71.2989175, 23.5427399 ], [ 71.2992234, 23.5442791 ], [ 71.2983865, 23.5442914 ], [ 71.298626561669806, 23.54502160625 ], [ 71.2989758, 23.5460839 ], [ 71.2978597, 23.5461003 ], [ 71.2980032, 23.5463555 ], [ 71.2980255, 23.5476416 ], [ 71.298309, 23.5478947 ], [ 71.2984579, 23.5484071 ], [ 71.2995762, 23.5485188 ], [ 71.3007057, 23.549274 ], [ 71.3012661, 23.5493948 ], [ 71.3012704, 23.549652 ], [ 71.3004335, 23.5496643 ], [ 71.3007191, 23.5500457 ], [ 71.3021232, 23.5505394 ], [ 71.3029737, 23.5512988 ], [ 71.3040965, 23.5516684 ], [ 71.3032774, 23.5527098 ], [ 71.2996547, 23.5530207 ], [ 71.2996635, 23.5535352 ], [ 71.298543, 23.5532944 ], [ 71.298552, 23.5538089 ], [ 71.29911, 23.5538005 ], [ 71.2991145, 23.5540578 ], [ 71.2971657, 23.5543439 ], [ 71.2974672, 23.5556259 ], [ 71.296909, 23.5556342 ], [ 71.2969181, 23.5561487 ], [ 71.2988735, 23.5562479 ], [ 71.299157, 23.556501 ], [ 71.3016817, 23.5572356 ], [ 71.3018699, 23.5575306 ], [ 71.3016907, 23.5577501 ], [ 71.3008557, 23.5578915 ], [ 71.3010083, 23.5586611 ], [ 71.3012918, 23.5589141 ], [ 71.3014407, 23.5594265 ], [ 71.3020011, 23.5595465 ], [ 71.3028516, 23.5603057 ], [ 71.3035554, 23.5606817 ], [ 71.3037045, 23.561194 ], [ 71.3045416, 23.5611818 ], [ 71.3049776, 23.5622044 ], [ 71.3058281, 23.5629636 ], [ 71.3059773, 23.563476 ], [ 71.3087833, 23.5643345 ], [ 71.3090669, 23.5645875 ], [ 71.3099064, 23.5647041 ], [ 71.3099198, 23.5654758 ], [ 71.3093594, 23.5653551 ], [ 71.3087924, 23.5648489 ], [ 71.3073904, 23.5644841 ], [ 71.3073044, 23.567573 ], [ 71.3071699, 23.5678323 ], [ 71.3082838, 23.5676866 ], [ 71.308425, 23.5678136 ], [ 71.3082995, 23.5685873 ], [ 71.3088554, 23.5684499 ], [ 71.30913, 23.5681885 ], [ 71.3105229, 23.5680398 ], [ 71.3105274, 23.568297 ], [ 71.3088622, 23.5688363 ], [ 71.3092937, 23.5696017 ], [ 71.3100032, 23.5702339 ], [ 71.310428, 23.570614 ], [ 71.3104369, 23.5711284 ], [ 71.3107206, 23.5713815 ], [ 71.3108741, 23.5721511 ], [ 71.3114345, 23.5722709 ], [ 71.3115756, 23.572398 ], [ 71.3117293, 23.5731676 ], [ 71.3125686, 23.5732832 ], [ 71.3134216, 23.5741715 ], [ 71.3123008, 23.5739309 ], [ 71.3122124, 23.5743585 ], [ 71.3120309, 23.5744496 ], [ 71.3120219, 23.5739351 ], [ 71.3106242, 23.5738268 ], [ 71.3100593, 23.5734497 ], [ 71.3100504, 23.5729353 ], [ 71.3094923, 23.5729436 ], [ 71.3091997, 23.5721761 ], [ 71.3083602, 23.5720595 ], [ 71.3072305, 23.5713044 ], [ 71.3066724, 23.5713127 ], [ 71.3063889, 23.5710596 ], [ 71.3052659, 23.5706907 ], [ 71.3049688, 23.569666 ], [ 71.3055291, 23.5697858 ], [ 71.3056705, 23.5699128 ], [ 71.3055405, 23.5704293 ], [ 71.3072237, 23.570919 ], [ 71.3070657, 23.5698922 ], [ 71.3064896, 23.5688716 ], [ 71.3059226, 23.5683655 ], [ 71.3054864, 23.5673426 ], [ 71.3049262, 23.5672218 ], [ 71.304359, 23.5667157 ], [ 71.3035129, 23.5662137 ], [ 71.3021132, 23.5659771 ], [ 71.3018297, 23.565724 ], [ 71.3012738, 23.5658614 ], [ 71.3009812, 23.5650939 ], [ 71.3001419, 23.5649771 ], [ 71.2984541, 23.5642303 ], [ 71.297896, 23.5642384 ], [ 71.2967709, 23.5637406 ], [ 71.2953713, 23.563504 ], [ 71.2942372, 23.5624915 ], [ 71.2917034, 23.5612424 ], [ 71.290574, 23.5604872 ], [ 71.2889019, 23.560641 ], [ 71.2885006, 23.561676 ], [ 71.2885052, 23.5619332 ], [ 71.2893511, 23.5624354 ], [ 71.2893557, 23.5626926 ], [ 71.2889554, 23.5637276 ], [ 71.2861493, 23.562868 ], [ 71.28335, 23.5623946 ], [ 71.280535, 23.5610213 ], [ 71.2803772, 23.5599945 ], [ 71.2799459, 23.5592288 ], [ 71.2788231, 23.5588589 ], [ 71.2768654, 23.5586303 ], [ 71.2757403, 23.5581322 ], [ 71.2707153, 23.5580774 ], [ 71.2710011, 23.5584588 ], [ 71.2771888, 23.5611986 ], [ 71.278464, 23.5623381 ], [ 71.2788964, 23.5631037 ], [ 71.2766484, 23.5622356 ], [ 71.2749786, 23.5625174 ], [ 71.2724672, 23.5625541 ], [ 71.2702236, 23.5619442 ], [ 71.2699181, 23.5604048 ], [ 71.2665717, 23.5605819 ], [ 71.2662882, 23.5603286 ], [ 71.2640603, 23.5606183 ], [ 71.2620983, 23.5601324 ], [ 71.2604239, 23.5601568 ], [ 71.2598569, 23.5596505 ], [ 71.2534411, 23.5598727 ], [ 71.2527167, 23.5583394 ], [ 71.252708, 23.5578249 ], [ 71.2525645, 23.5575698 ], [ 71.2517252, 23.5574528 ], [ 71.2511737, 23.557847 ], [ 71.2509078, 23.5586229 ], [ 71.2484052, 23.5591736 ], [ 71.2482565, 23.5586612 ], [ 71.2478295, 23.5581528 ], [ 71.245595, 23.5580561 ], [ 71.2453181, 23.5581891 ], [ 71.2451869, 23.5587057 ], [ 71.2447776, 23.5592262 ], [ 71.249262, 23.5603188 ], [ 71.2496866, 23.5606989 ], [ 71.2496955, 23.5612135 ], [ 71.2495608, 23.5614726 ], [ 71.2476141, 23.5618863 ], [ 71.2464978, 23.5619024 ], [ 71.2447972, 23.5603832 ], [ 71.2431229, 23.5604074 ], [ 71.2414574, 23.5609461 ], [ 71.2408993, 23.560954 ], [ 71.2400709, 23.5614806 ], [ 71.239238, 23.5617499 ], [ 71.2381197, 23.5616378 ], [ 71.2373911, 23.5598472 ], [ 71.2372346, 23.5588204 ], [ 71.234987, 23.5579516 ], [ 71.2313593, 23.5580037 ], [ 71.2310781, 23.5578795 ], [ 71.2304895, 23.5560869 ], [ 71.225179, 23.5556484 ], [ 71.2250564, 23.5566794 ], [ 71.2246513, 23.5574571 ], [ 71.2232648, 23.5579916 ], [ 71.2231463, 23.5592797 ], [ 71.2223223, 23.5600634 ], [ 71.2226445, 23.5626319 ], [ 71.2233688, 23.5641653 ], [ 71.2222546, 23.5643095 ], [ 71.2205736, 23.563948 ], [ 71.2198989, 23.5570105 ], [ 71.2173831, 23.556789 ], [ 71.2173918, 23.5573035 ], [ 71.2171106, 23.5571784 ], [ 71.2154383, 23.5573314 ], [ 71.2151722, 23.5581071 ], [ 71.2146164, 23.5582432 ], [ 71.2135109, 23.5589026 ], [ 71.2128386, 23.560456 ], [ 71.212843, 23.5607132 ], [ 71.213275, 23.561479 ], [ 71.2127169, 23.561487 ], [ 71.2123151, 23.562522 ], [ 71.2123495, 23.56458 ], [ 71.2120747, 23.5648412 ], [ 71.2106135, 23.569236 ], [ 71.2100533, 23.5691148 ], [ 71.2097698, 23.5688616 ], [ 71.2080998, 23.5691426 ], [ 71.2075481, 23.5695369 ], [ 71.2073077, 23.5718561 ], [ 71.2067517, 23.5719922 ], [ 71.205646, 23.5726516 ], [ 71.2052442, 23.5736866 ], [ 71.2049694, 23.5739478 ], [ 71.204839, 23.5744641 ], [ 71.2014964, 23.5748971 ], [ 71.1972864, 23.573542 ], [ 71.1971293, 23.5725149 ], [ 71.1968417, 23.5720045 ], [ 71.1959872, 23.5709873 ], [ 71.1942872, 23.5694675 ], [ 71.1939995, 23.5689568 ], [ 71.1939825, 23.5679279 ], [ 71.1931239, 23.5666535 ], [ 71.1924096, 23.5656344 ], [ 71.1893654, 23.5672211 ], [ 71.1888498, 23.5698015 ], [ 71.1874629, 23.5703356 ], [ 71.1887481, 23.5721186 ], [ 71.1887568, 23.5726331 ], [ 71.1876831, 23.5752212 ], [ 71.1872734, 23.5757417 ], [ 71.1867132, 23.5756204 ], [ 71.1864361, 23.5757535 ], [ 71.1863045, 23.57627 ], [ 71.1860297, 23.5765312 ], [ 71.1860468, 23.5775601 ], [ 71.1863344, 23.5780706 ], [ 71.1864958, 23.5793549 ], [ 71.1848275, 23.5797639 ], [ 71.1842758, 23.5801581 ], [ 71.1850071, 23.5822063 ], [ 71.1850156, 23.5827208 ], [ 71.1861619, 23.5845057 ], [ 71.1867755, 23.5878421 ], [ 71.1873552, 23.5891205 ], [ 71.1870974, 23.5904106 ], [ 71.186138, 23.5914533 ], [ 71.1839092, 23.5917421 ], [ 71.1839177, 23.5922566 ], [ 71.1836344, 23.5920031 ], [ 71.1833552, 23.5920071 ], [ 71.1833595, 23.5922643 ], [ 71.1836429, 23.5925178 ], [ 71.1830846, 23.5925255 ], [ 71.1835198, 23.5935486 ], [ 71.1840866, 23.5940553 ], [ 71.1846619, 23.5950764 ], [ 71.1848148, 23.5958462 ], [ 71.1867793, 23.5964612 ], [ 71.187204, 23.5968417 ], [ 71.1872297, 23.5983853 ], [ 71.1869591, 23.5989037 ], [ 71.1865707, 23.6007103 ], [ 71.1837814, 23.6008778 ], [ 71.1832252, 23.6010146 ], [ 71.1832337, 23.6015291 ], [ 71.1823983, 23.6016691 ], [ 71.1821235, 23.6019303 ], [ 71.1815652, 23.6019381 ], [ 71.1804336, 23.6010539 ], [ 71.1805217, 23.6006257 ], [ 71.1807043, 23.6005355 ], [ 71.1807001, 23.6002783 ], [ 71.180421, 23.6002821 ], [ 71.180146, 23.6005433 ], [ 71.1799974, 23.6000307 ], [ 71.1790039, 23.5990156 ], [ 71.1784435, 23.5988942 ], [ 71.1781602, 23.598641 ], [ 71.1750959, 23.5990704 ], [ 71.17598, 23.6018884 ], [ 71.1754217, 23.6018961 ], [ 71.175565, 23.6021515 ], [ 71.175908, 23.6060063 ], [ 71.1767582, 23.6067663 ], [ 71.1770502, 23.607534 ], [ 71.1770713, 23.6088203 ], [ 71.1765257, 23.6095998 ], [ 71.1752911, 23.6109037 ], [ 71.1727893, 23.6115816 ], [ 71.1722394, 23.6121038 ], [ 71.171679, 23.6119834 ], [ 71.1712257, 23.6099315 ], [ 71.1706463, 23.6086531 ], [ 71.1706421, 23.6083957 ], [ 71.1711919, 23.6078734 ], [ 71.1714499, 23.6065833 ], [ 71.1714287, 23.605297 ], [ 71.1711411, 23.6047865 ], [ 71.1711241, 23.6037574 ], [ 71.171657, 23.6022061 ], [ 71.1716357, 23.6009199 ], [ 71.1712091, 23.6004113 ], [ 71.1698113, 23.6003017 ], [ 71.1695278, 23.6000485 ], [ 71.1678508, 23.5999436 ], [ 71.1681173, 23.5991679 ], [ 71.1686756, 23.5991602 ], [ 71.1683879, 23.5986495 ], [ 71.1675505, 23.5986612 ], [ 71.1671524, 23.5999534 ], [ 71.1675374, 23.6063807 ], [ 71.1671277, 23.606901 ], [ 71.1665714, 23.6070369 ], [ 71.1662964, 23.6072981 ], [ 71.1651861, 23.6076999 ], [ 71.1643909, 23.6102841 ], [ 71.1635576, 23.6105531 ], [ 71.1636168, 23.6141547 ], [ 71.1627812, 23.6142945 ], [ 71.1622208, 23.6141741 ], [ 71.1623514, 23.6136576 ], [ 71.1617637, 23.6118647 ], [ 71.1604868, 23.610596 ], [ 71.159647, 23.6104784 ], [ 71.1593637, 23.6102252 ], [ 71.1588033, 23.6101048 ], [ 71.1586463, 23.6090778 ], [ 71.1582197, 23.608569 ], [ 71.1556966, 23.6079604 ], [ 71.1540216, 23.6079836 ], [ 71.1529113, 23.6083854 ], [ 71.1529196, 23.6088999 ], [ 71.1523613, 23.6089077 ], [ 71.1521073, 23.610455 ], [ 71.151549, 23.6104627 ], [ 71.1514172, 23.6109793 ], [ 71.1501825, 23.6122828 ], [ 71.1462719, 23.612208 ], [ 71.144026, 23.6114671 ], [ 71.1437425, 23.6112136 ], [ 71.1420632, 23.6109795 ], [ 71.1412341, 23.6115056 ], [ 71.1398363, 23.6113966 ], [ 71.1398446, 23.6119112 ], [ 71.1392821, 23.6116616 ], [ 71.1392904, 23.6121762 ], [ 71.1387319, 23.6121838 ], [ 71.1387446, 23.6129557 ], [ 71.1381861, 23.6129632 ], [ 71.1380629, 23.6139942 ], [ 71.1383628, 23.6152766 ], [ 71.1382279, 23.6155359 ], [ 71.1373925, 23.6156756 ], [ 71.1340256, 23.6146926 ], [ 71.1273292, 23.6150418 ], [ 71.1242789, 23.6163703 ], [ 71.1234517, 23.6170254 ], [ 71.1236032, 23.6177952 ], [ 71.1244658, 23.6193272 ], [ 71.1244781, 23.6200991 ], [ 71.1239281, 23.6206211 ], [ 71.1235263, 23.6216559 ], [ 71.1188006, 23.6230071 ], [ 71.1193798, 23.6242858 ], [ 71.1210653, 23.6249056 ], [ 71.1261201, 23.6266376 ], [ 71.1305917, 23.6268335 ], [ 71.1328172, 23.6262883 ], [ 71.1347548, 23.6252323 ], [ 71.1358591, 23.6244452 ], [ 71.1369635, 23.6236582 ], [ 71.1375134, 23.623136 ], [ 71.1386178, 23.6223488 ], [ 71.1394471, 23.6218226 ], [ 71.1425015, 23.6207513 ], [ 71.1461352, 23.6209583 ], [ 71.1471224, 23.6215884 ], [ 71.1479937, 23.6236349 ], [ 71.1480523, 23.6272363 ], [ 71.1476508, 23.6282711 ], [ 71.1456922, 23.6280409 ], [ 71.145806, 23.6264954 ], [ 71.1462044, 23.6252034 ], [ 71.1456503, 23.6254684 ], [ 71.1450666, 23.6239326 ], [ 71.1433893, 23.6238267 ], [ 71.1431143, 23.6240878 ], [ 71.1414475, 23.6246255 ], [ 71.1411725, 23.6248867 ], [ 71.1392243, 23.6252998 ], [ 71.1392326, 23.6258145 ], [ 71.1356259, 23.6272788 ], [ 71.1350736, 23.6276729 ], [ 71.1349419, 23.6281892 ], [ 71.134532, 23.6287096 ], [ 71.1325879, 23.6293792 ], [ 71.1297935, 23.6292894 ], [ 71.1300812, 23.6298001 ], [ 71.1295227, 23.6298077 ], [ 71.1295144, 23.6292932 ], [ 71.126445, 23.6294635 ], [ 71.1239238, 23.6289834 ], [ 71.1216902, 23.629014 ], [ 71.1202899, 23.6287759 ], [ 71.1101844, 23.6255686 ], [ 71.1090655, 23.6254555 ], [ 71.109357, 23.6262236 ], [ 71.1087987, 23.6262312 ], [ 71.1090861, 23.6267419 ], [ 71.1082485, 23.6267532 ], [ 71.1081001, 23.6262407 ], [ 71.1071069, 23.625225 ], [ 71.1062651, 23.6249791 ], [ 71.1061168, 23.6244665 ], [ 71.1056902, 23.6239575 ], [ 71.1051298, 23.623836 ], [ 71.1039984, 23.6229513 ], [ 71.103707, 23.6221832 ], [ 71.1031464, 23.6220619 ], [ 71.1020194, 23.6214342 ], [ 71.1014364, 23.6198982 ], [ 71.1003196, 23.6199133 ], [ 71.1005906, 23.6193951 ], [ 71.1000321, 23.6194026 ], [ 71.100024, 23.6188882 ], [ 71.0994636, 23.6187666 ], [ 71.0986157, 23.6181352 ], [ 71.0986074, 23.6176207 ], [ 71.098047, 23.6174992 ], [ 71.0974804, 23.6169921 ], [ 71.0966346, 23.616489 ], [ 71.0960742, 23.6163684 ], [ 71.0963239, 23.6233125 ], [ 71.0966072, 23.6235659 ], [ 71.0977528, 23.6253518 ], [ 71.0979011, 23.6258644 ], [ 71.0984615, 23.6259849 ], [ 71.0986027, 23.6261121 ], [ 71.0987511, 23.6266247 ], [ 71.0995866, 23.6264843 ], [ 71.1001532, 23.6269914 ], [ 71.1043538, 23.6277063 ], [ 71.1051997, 23.6282095 ], [ 71.1057664, 23.6287164 ], [ 71.1080166, 23.629715 ], [ 71.1110943, 23.6300596 ], [ 71.1108316, 23.6310925 ], [ 71.1080495, 23.6317731 ], [ 71.1021857, 23.6318528 ], [ 71.1013439, 23.6316069 ], [ 71.1004982, 23.6311036 ], [ 71.0979769, 23.6306232 ], [ 71.0962891, 23.629874 ], [ 71.0946078, 23.6295113 ], [ 71.0945995, 23.6289967 ], [ 71.0940391, 23.6288751 ], [ 71.0929119, 23.6282476 ], [ 71.0926205, 23.6274795 ], [ 71.0912285, 23.6277557 ], [ 71.0913595, 23.6272393 ], [ 71.0905095, 23.6264788 ], [ 71.089631, 23.6239175 ], [ 71.0895902, 23.6213448 ], [ 71.0893028, 23.6208341 ], [ 71.0888314, 23.6174952 ], [ 71.0893939, 23.6177451 ], [ 71.0895209, 23.6169713 ], [ 71.0919518, 23.6117924 ], [ 71.092227, 23.6115314 ], [ 71.0938408, 23.6076499 ], [ 71.0938285, 23.606878 ], [ 71.0935371, 23.6061101 ], [ 71.0919777, 23.6045871 ], [ 71.0911379, 23.6044694 ], [ 71.090009, 23.6037126 ], [ 71.0894487, 23.603592 ], [ 71.0891451, 23.6020521 ], [ 71.0880285, 23.6020672 ], [ 71.0878802, 23.6015544 ], [ 71.0874538, 23.6010456 ], [ 71.0868996, 23.6013104 ], [ 71.0866082, 23.6005423 ], [ 71.0860478, 23.6004208 ], [ 71.0854814, 23.5999137 ], [ 71.0846358, 23.5994104 ], [ 71.08379, 23.5989073 ], [ 71.0812755, 23.5988128 ], [ 71.0812837, 23.5993272 ], [ 71.0796127, 23.599607 ], [ 71.079625, 23.6003788 ], [ 71.0790625, 23.600129 ], [ 71.0789306, 23.6006453 ], [ 71.0786554, 23.6009063 ], [ 71.0785245, 23.6014227 ], [ 71.077687, 23.601434 ], [ 71.0774201, 23.6022095 ], [ 71.0763094, 23.6026098 ], [ 71.0757592, 23.6031318 ], [ 71.0724315, 23.604592 ], [ 71.0724436, 23.6053639 ], [ 71.0716059, 23.6053751 ], [ 71.0713389, 23.6061505 ], [ 71.0710578, 23.6060252 ], [ 71.0704993, 23.6060326 ], [ 71.06967, 23.6065584 ], [ 71.0688344, 23.6066986 ], [ 71.0687025, 23.607215 ], [ 71.068017, 23.6079961 ], [ 71.0674608, 23.6081316 ], [ 71.0669083, 23.6085255 ], [ 71.0669204, 23.6092972 ], [ 71.0663621, 23.6093047 ], [ 71.0662302, 23.6098211 ], [ 71.065955, 23.6100821 ], [ 71.0656919, 23.6111148 ], [ 71.0648745, 23.6124123 ], [ 71.0648826, 23.6129269 ], [ 71.0637819, 23.6139708 ], [ 71.0635349, 23.6160326 ], [ 71.063677, 23.616159 ], [ 71.0642376, 23.6162805 ], [ 71.0646719, 23.6173042 ], [ 71.0649552, 23.6175576 ], [ 71.064824, 23.618074 ], [ 71.0639824, 23.6178279 ], [ 71.0641297, 23.6183406 ], [ 71.0637193, 23.6188606 ], [ 71.0626046, 23.6190037 ], [ 71.0623234, 23.6188793 ], [ 71.0621913, 23.6193956 ], [ 71.0615099, 23.620434 ], [ 71.0606762, 23.6207024 ], [ 71.0606844, 23.6212168 ], [ 71.060128, 23.6213525 ], [ 71.0584506, 23.6212465 ], [ 71.0583024, 23.620734 ], [ 71.0578762, 23.620225 ], [ 71.0573156, 23.6201033 ], [ 71.0561888, 23.6194754 ], [ 71.0558976, 23.6187073 ], [ 71.0554823, 23.61897 ], [ 71.0559216, 23.6202509 ], [ 71.0553633, 23.6202582 ], [ 71.0555103, 23.6207708 ], [ 71.0547008, 23.6225829 ], [ 71.0540193, 23.6236211 ], [ 71.0534629, 23.6237568 ], [ 71.0529125, 23.6242786 ], [ 71.0517936, 23.6241652 ], [ 71.0516736, 23.6254535 ], [ 71.0521009, 23.6259624 ], [ 71.0512673, 23.6262308 ], [ 71.0511391, 23.6270044 ], [ 71.0508639, 23.6272654 ], [ 71.0507328, 23.6277818 ], [ 71.0501743, 23.6277891 ], [ 71.0504736, 23.6290719 ], [ 71.04964, 23.6293401 ], [ 71.0495279, 23.6311429 ], [ 71.0491215, 23.6319201 ], [ 71.0485651, 23.6320558 ], [ 71.0480146, 23.6325776 ], [ 71.0474582, 23.6327141 ], [ 71.0470667, 23.6345206 ], [ 71.0471187, 23.6378651 ], [ 71.0468596, 23.639155 ], [ 71.0465842, 23.639416 ], [ 71.0460458, 23.6407097 ], [ 71.045268, 23.6445797 ], [ 71.0455593, 23.6453478 ], [ 71.0455833, 23.6468916 ], [ 71.045316, 23.647667 ], [ 71.04534, 23.6492106 ], [ 71.0456233, 23.6494642 ], [ 71.0456313, 23.6499787 ], [ 71.0456352, 23.6502359 ], [ 71.0465132, 23.6527976 ], [ 71.0465852, 23.6574283 ], [ 71.0468966, 23.6594827 ], [ 71.0477505, 23.6605009 ], [ 71.0488838, 23.661515 ], [ 71.0491711, 23.6620259 ], [ 71.0494744, 23.6635659 ], [ 71.0506197, 23.6653519 ], [ 71.0510552, 23.6663754 ], [ 71.0521784, 23.666746 ], [ 71.0528904, 23.6676377 ], [ 71.0539046, 23.6699401 ], [ 71.0558618, 23.6700423 ], [ 71.0583676, 23.6694944 ], [ 71.0585048, 23.6693644 ], [ 71.0586369, 23.6688481 ], [ 71.0597481, 23.6684468 ], [ 71.0603068, 23.6684394 ], [ 71.0642311, 23.6692882 ], [ 71.0643786, 23.6698008 ], [ 71.0653708, 23.6706878 ], [ 71.0664961, 23.6711875 ], [ 71.0673502, 23.6722053 ], [ 71.067911, 23.672327 ], [ 71.0680582, 23.6728395 ], [ 71.069475, 23.6741072 ], [ 71.0703332, 23.6753824 ], [ 71.0713215, 23.6760119 ], [ 71.0718883, 23.676519 ], [ 71.0730178, 23.6772758 ], [ 71.0735806, 23.6775256 ], [ 71.0742886, 23.6781599 ], [ 71.0745761, 23.6786706 ], [ 71.0751754, 23.6812359 ], [ 71.0765923, 23.6825033 ], [ 71.0770281, 23.6835267 ], [ 71.0804007, 23.6847681 ], [ 71.0809837, 23.6863041 ], [ 71.0781882, 23.6862126 ], [ 71.0762247, 23.6857242 ], [ 71.0734148, 23.6847328 ], [ 71.0717388, 23.6847551 ], [ 71.0697894, 23.6851676 ], [ 71.0696575, 23.685684 ], [ 71.0685562, 23.686728 ], [ 71.0672122, 23.6900911 ], [ 71.0669977, 23.6942111 ], [ 71.0662162, 23.6978238 ], [ 71.0656657, 23.6983459 ], [ 71.0656696, 23.6986031 ], [ 71.0659571, 23.699114 ], [ 71.0659652, 23.6996284 ], [ 71.0654186, 23.7004077 ], [ 71.0644657, 23.7019643 ], [ 71.0639089, 23.7021 ], [ 71.0636335, 23.702361 ], [ 71.0630767, 23.7024974 ], [ 71.0626936, 23.7048183 ], [ 71.0618675, 23.7056014 ], [ 71.0609267, 23.7079299 ], [ 71.0603678, 23.7079372 ], [ 71.0605271, 23.7092217 ], [ 71.0602559, 23.7097399 ], [ 71.0602843, 23.7115407 ], [ 71.0594702, 23.7130954 ], [ 71.0594784, 23.7136101 ], [ 71.0597658, 23.7141207 ], [ 71.05979, 23.7156645 ], [ 71.0593876, 23.7166991 ], [ 71.0585492, 23.7167102 ], [ 71.0584171, 23.7172266 ], [ 71.0578664, 23.7177486 ], [ 71.056773, 23.7193069 ], [ 71.0569495, 23.7216204 ], [ 71.0575103, 23.7217412 ], [ 71.0579352, 23.7221221 ], [ 71.0579473, 23.7228937 ], [ 71.0571372, 23.7247059 ], [ 71.0571656, 23.7265067 ], [ 71.058028, 23.7280391 ], [ 71.0580321, 23.7282963 ], [ 71.05735, 23.7293347 ], [ 71.0556776, 23.7296142 ], [ 71.0555534, 23.7306452 ], [ 71.0558611, 23.7324422 ], [ 71.0553264, 23.7339933 ], [ 71.0553427, 23.7350223 ], [ 71.0556262, 23.7352759 ], [ 71.0564927, 23.7370655 ], [ 71.0573432, 23.7378263 ], [ 71.0579265, 23.7393623 ], [ 71.0586316, 23.7397384 ], [ 71.0603085, 23.7397161 ], [ 71.060721, 23.739325 ], [ 71.061402, 23.7381576 ], [ 71.0618106, 23.7375093 ], [ 71.0627749, 23.7365955 ], [ 71.0636093, 23.7363269 ], [ 71.0655676, 23.7364299 ], [ 71.0660981, 23.7346216 ], [ 71.0672098, 23.7342203 ], [ 71.0697207, 23.7339295 ], [ 71.0701495, 23.7345673 ], [ 71.0701537, 23.7348246 ], [ 71.0697431, 23.7353447 ], [ 71.0689087, 23.7356133 ], [ 71.0687768, 23.7361296 ], [ 71.06823, 23.7369088 ], [ 71.0678195, 23.737429 ], [ 71.0667076, 23.7378295 ], [ 71.065604, 23.7387452 ], [ 71.0654719, 23.7392617 ], [ 71.0642472, 23.7413366 ], [ 71.0603489, 23.7422887 ], [ 71.0581132, 23.7423186 ], [ 71.0570013, 23.7427197 ], [ 71.0566018, 23.7440117 ], [ 71.0555001, 23.7450555 ], [ 71.0552327, 23.745831 ], [ 71.0546859, 23.7466102 ], [ 71.0538636, 23.7476505 ], [ 71.0538677, 23.7479077 ], [ 71.0541552, 23.7484186 ], [ 71.0540442, 23.7502213 ], [ 71.0529242, 23.7501071 ], [ 71.0523612, 23.7498572 ], [ 71.0518023, 23.7498646 ], [ 71.0506923, 23.750394 ], [ 71.0498639, 23.7510487 ], [ 71.0501595, 23.752074 ], [ 71.0512816, 23.7523165 ], [ 71.0514491, 23.7541154 ], [ 71.0503714, 23.756703 ], [ 71.0498447, 23.7587684 ], [ 71.0502168, 23.7646818 ], [ 71.0505045, 23.7651925 ], [ 71.0510129, 23.7708468 ], [ 71.0504538, 23.7708542 ], [ 71.0511017, 23.7765066 ], [ 71.0516568, 23.7762418 ], [ 71.0518082, 23.7770118 ], [ 71.0519505, 23.7771381 ], [ 71.0525116, 23.7772598 ], [ 71.052104, 23.7780371 ], [ 71.0522845, 23.7806079 ], [ 71.0517254, 23.7806153 ], [ 71.0521605, 23.7816387 ], [ 71.052110798866721, 23.7831217734375 ], [ 71.052110798866735, 23.7831217734375 ], [ 71.0520656, 23.7844705 ], [ 71.0526267, 23.7845913 ], [ 71.0536188, 23.7854792 ], [ 71.0536269, 23.7859937 ], [ 71.0529446, 23.787032 ], [ 71.0523877, 23.7871675 ], [ 71.051561, 23.7879506 ], [ 71.0498836, 23.7879729 ], [ 71.049602, 23.7878483 ], [ 71.0494536, 23.7873357 ], [ 71.0480276, 23.7855535 ], [ 71.0480195, 23.7850388 ], [ 71.048279, 23.7837489 ], [ 71.0478481, 23.7829827 ], [ 71.04744319185663, 23.7831217734375 ], [ 71.0459012, 23.7836514 ], [ 71.04535, 23.7841732 ], [ 71.0436868, 23.7850963 ], [ 71.0436948, 23.7856109 ], [ 71.0428602, 23.7858793 ], [ 71.0419174, 23.7882076 ], [ 71.0419496, 23.7902656 ], [ 71.0414064, 23.7913021 ], [ 71.0411711, 23.7941358 ], [ 71.0408995, 23.794654 ], [ 71.0406602, 23.7972303 ], [ 71.0398454, 23.798785 ], [ 71.0398615, 23.7998139 ], [ 71.0394506, 23.800334 ], [ 71.0400099, 23.8003267 ], [ 71.0400219, 23.8010985 ], [ 71.0408607, 23.8010874 ], [ 71.0407245, 23.8013465 ], [ 71.0407326, 23.801861 ], [ 71.0413037, 23.8026255 ], [ 71.0413158, 23.8033972 ], [ 71.0411805, 23.8036563 ], [ 71.0406233, 23.8037918 ], [ 71.0395151, 23.8044503 ], [ 71.039519, 23.8047075 ], [ 71.0400783, 23.8047001 ], [ 71.0400862, 23.8052146 ], [ 71.0434597, 23.8063274 ], [ 71.0441764, 23.8074763 ], [ 71.0447477, 23.8082407 ], [ 71.0453191, 23.8090052 ], [ 71.0457449, 23.8093849 ], [ 71.0465878, 23.8096311 ], [ 71.0474428, 23.8106491 ], [ 71.0485693, 23.8111486 ], [ 71.048849, 23.811145 ], [ 71.0496757, 23.810362 ], [ 71.0521943, 23.8104576 ], [ 71.0526538, 23.8130246 ], [ 71.0529414, 23.8135355 ], [ 71.0539306, 23.8141651 ], [ 71.0544899, 23.8141577 ], [ 71.0548987, 23.8135094 ], [ 71.0548501, 23.8104223 ], [ 71.0554013, 23.8099003 ], [ 71.0555336, 23.8093839 ], [ 71.0560907, 23.8092473 ], [ 71.0564995, 23.808599 ], [ 71.0566277, 23.8078254 ], [ 71.0583194, 23.808703 ], [ 71.0600011, 23.8089379 ], [ 71.0607059, 23.8093149 ], [ 71.061018, 23.8113692 ], [ 71.0618853, 23.8131588 ], [ 71.0624566, 23.8139231 ], [ 71.0635914, 23.8149371 ], [ 71.0647426, 23.8169802 ], [ 71.0651686, 23.8173601 ], [ 71.0679771, 23.8180944 ], [ 71.0689696, 23.8189821 ], [ 71.0688384, 23.8194984 ], [ 71.0682812, 23.8196341 ], [ 71.0680057, 23.8198952 ], [ 71.0654889, 23.8199288 ], [ 71.0635417, 23.8205986 ], [ 71.0628909, 23.8236952 ], [ 71.0629072, 23.8247241 ], [ 71.0639168, 23.82664 ], [ 71.0658703, 23.8263565 ], [ 71.0662792, 23.8257082 ], [ 71.068622, 23.8234892 ], [ 71.0689017, 23.8234854 ], [ 71.0701778, 23.8246268 ], [ 71.0701862, 23.8251412 ], [ 71.0696432, 23.8261777 ], [ 71.0689567, 23.8269588 ], [ 71.0681219, 23.8272274 ], [ 71.0685938, 23.8305661 ], [ 71.0679115, 23.8316047 ], [ 71.0665152, 23.8317515 ], [ 71.0639881, 23.8311425 ], [ 71.0638397, 23.83063 ], [ 71.0631247, 23.8296103 ], [ 71.0620021, 23.829368 ], [ 71.061994, 23.8288534 ], [ 71.0614347, 23.8288609 ], [ 71.0614428, 23.8293754 ], [ 71.0608815, 23.8292539 ], [ 71.0597689, 23.8296551 ], [ 71.0590936, 23.8312079 ], [ 71.0591017, 23.8317226 ], [ 71.0595381, 23.832746 ], [ 71.0600994, 23.8328666 ], [ 71.0609465, 23.8333699 ], [ 71.0619391, 23.8342576 ], [ 71.0622268, 23.8347685 ], [ 71.062231, 23.8350257 ], [ 71.061824, 23.8358031 ], [ 71.0604298, 23.836079 ], [ 71.0598908, 23.8373729 ], [ 71.0593336, 23.8375086 ], [ 71.0585046, 23.8381633 ], [ 71.0579737, 23.8399717 ], [ 71.056855, 23.8399866 ], [ 71.0570147, 23.8412711 ], [ 71.0568794, 23.8415302 ], [ 71.0554769, 23.8412915 ], [ 71.0557931, 23.8436031 ], [ 71.0563525, 23.8435958 ], [ 71.0560809, 23.844114 ], [ 71.0569159, 23.8438454 ], [ 71.0570633, 23.8443582 ], [ 71.0572058, 23.8444844 ], [ 71.0586022, 23.8443376 ], [ 71.0579146, 23.8451187 ], [ 71.0579308, 23.8461476 ], [ 71.0575199, 23.8466678 ], [ 71.0586347, 23.8463956 ], [ 71.0591249, 23.8481017 ], [ 71.0583835, 23.8482002 ], [ 71.0582941, 23.8486275 ], [ 71.0578363, 23.8489794 ], [ 71.0577467, 23.8494068 ], [ 71.0575647, 23.8494977 ], [ 71.0575687, 23.8497549 ], [ 71.0578484, 23.8497511 ], [ 71.0584882, 23.848801 ], [ 71.0589511, 23.8487073 ], [ 71.0588188, 23.8492236 ], [ 71.0598125, 23.8501104 ], [ 71.0603738, 23.8502321 ], [ 71.0605296, 23.8512591 ], [ 71.0600291, 23.8522066 ], [ 71.0598471, 23.8522977 ], [ 71.0598511, 23.8525549 ], [ 71.0601308, 23.8525511 ], [ 71.0608174, 23.85177 ], [ 71.0613604, 23.8507335 ], [ 71.0617743, 23.8503415 ], [ 71.0619573, 23.8502985 ], [ 71.0622119, 23.8514941 ], [ 71.0620765, 23.8517532 ], [ 71.0612374, 23.8517643 ], [ 71.0612497, 23.8525362 ], [ 71.0606902, 23.8525436 ], [ 71.0607023, 23.8533155 ], [ 71.0620928, 23.8527821 ], [ 71.0622444, 23.8535521 ], [ 71.0630917, 23.8540554 ], [ 71.0632402, 23.854568 ], [ 71.0624011, 23.8545793 ], [ 71.0632544, 23.855468 ], [ 71.0638159, 23.8555895 ], [ 71.0637082, 23.8576494 ], [ 71.0645636, 23.8586672 ], [ 71.0645717, 23.8591818 ], [ 71.0644364, 23.859441 ], [ 71.063879, 23.8595765 ], [ 71.0630501, 23.8602313 ], [ 71.0636381, 23.8620248 ], [ 71.0630765, 23.8619031 ], [ 71.0627929, 23.8616496 ], [ 71.0622313, 23.8615288 ], [ 71.0622232, 23.8610144 ], [ 71.0616638, 23.8610219 ], [ 71.0618072, 23.8612773 ], [ 71.0617086, 23.8638516 ], [ 71.062268, 23.8638443 ], [ 71.0622843, 23.8648732 ], [ 71.0628416, 23.8647367 ], [ 71.0635549, 23.8656282 ], [ 71.0638467, 23.8663962 ], [ 71.0644184, 23.8671605 ], [ 71.065274, 23.8681782 ], [ 71.0654307, 23.8692054 ], [ 71.0648651, 23.8688265 ], [ 71.0643035, 23.8687059 ], [ 71.0643119, 23.8692204 ], [ 71.0648732, 23.8693411 ], [ 71.0651571, 23.8695946 ], [ 71.0659983, 23.8697123 ], [ 71.0661459, 23.8702251 ], [ 71.0669974, 23.8709854 ], [ 71.0670442, 23.8711537 ], [ 71.0665802, 23.8711193 ], [ 71.0657288, 23.8703589 ], [ 71.0648875, 23.8702419 ], [ 71.0651735, 23.8706235 ], [ 71.0663047, 23.8713803 ], [ 71.0674298, 23.8717517 ], [ 71.0675774, 23.8722642 ], [ 71.0687127, 23.8732782 ], [ 71.0690006, 23.8737891 ], [ 71.0698522, 23.8745494 ], [ 71.0697208, 23.875066 ], [ 71.0705602, 23.8750546 ], [ 71.071588, 23.8781285 ], [ 71.0721761, 23.8799217 ], [ 71.0721884, 23.8806934 ], [ 71.0720531, 23.8809526 ], [ 71.0728924, 23.8809414 ], [ 71.0729047, 23.8817131 ], [ 71.0734644, 23.8817055 ], [ 71.0736159, 23.8824755 ], [ 71.0747515, 23.8834893 ], [ 71.0749, 23.8840021 ], [ 71.0760212, 23.8841151 ], [ 71.0764547, 23.8850102 ], [ 71.0775902, 23.8860242 ], [ 71.0778824, 23.8867921 ], [ 71.0781663, 23.8870455 ], [ 71.0790344, 23.888835 ], [ 71.0796021, 23.8893421 ], [ 71.0796105, 23.8898565 ], [ 71.0794751, 23.8901157 ], [ 71.0800348, 23.8901081 ], [ 71.0801824, 23.8906207 ], [ 71.0804662, 23.8908741 ], [ 71.0819187, 23.8941996 ], [ 71.0822026, 23.894453 ], [ 71.0836469, 23.8972638 ], [ 71.0842188, 23.8980279 ], [ 71.0847868, 23.8985348 ], [ 71.0855012, 23.8994254 ], [ 71.0863426, 23.899543 ], [ 71.0862188, 23.900574 ], [ 71.0872049, 23.9009461 ], [ 71.0876301, 23.9013268 ], [ 71.0877788, 23.9018393 ], [ 71.0883385, 23.9018318 ], [ 71.0884861, 23.9023443 ], [ 71.0901897, 23.903865 ], [ 71.0903593, 23.9056639 ], [ 71.0909208, 23.9057845 ], [ 71.091166949553227, 23.90615 ], [ 71.091253815763551, 23.906278984999005 ], [ 71.091301641511208, 23.90635 ], [ 71.0913504, 23.9064224 ], [ 71.0929127, 23.9078157 ], [ 71.0971432, 23.9098166 ], [ 71.0977112, 23.9103233 ], [ 71.0988387, 23.9108227 ], [ 71.0996908, 23.911583 ], [ 71.104477, 23.9133186 ], [ 71.108123, 23.9137832 ], [ 71.1098104, 23.9142748 ], [ 71.1117858, 23.9152768 ], [ 71.1124955, 23.9159107 ], [ 71.1126611, 23.9174522 ], [ 71.1137824, 23.9175651 ], [ 71.113924, 23.9176923 ], [ 71.1139281, 23.9179495 ], [ 71.1139323, 23.9182067 ], [ 71.1146429, 23.9188397 ], [ 71.1166185, 23.9198418 ], [ 71.1171865, 23.9203487 ], [ 71.1191581, 23.9210933 ], [ 71.1205783, 23.9223602 ], [ 71.1217102, 23.9231166 ], [ 71.1235477, 23.9242494 ], [ 71.1236966, 23.924762 ], [ 71.124816, 23.9247465 ], [ 71.1249638, 23.9252591 ], [ 71.1253904, 23.9256386 ], [ 71.1273662, 23.9266405 ], [ 71.1299018, 23.9276346 ], [ 71.1301859, 23.9278881 ], [ 71.1346762, 23.9285976 ], [ 71.1355242, 23.9291003 ], [ 71.1363723, 23.9296032 ], [ 71.14339, 23.9307919 ], [ 71.143954, 23.9310413 ], [ 71.1442337, 23.9310374 ], [ 71.1445095, 23.9307764 ], [ 71.1450691, 23.9307684 ], [ 71.1475985, 23.9313768 ], [ 71.1476028, 23.931634 ], [ 71.147043, 23.931642 ], [ 71.1473293, 23.9320234 ], [ 71.1477964, 23.9322335 ], [ 71.1478954, 23.9324019 ], [ 71.1481753, 23.932398 ], [ 71.148171, 23.9321407 ], [ 71.147985, 23.9320549 ], [ 71.1480264, 23.9318854 ], [ 71.1484424, 23.9316223 ], [ 71.148455, 23.932394 ], [ 71.1492948, 23.9323823 ], [ 71.1494469, 23.9331521 ], [ 71.149731, 23.9334053 ], [ 71.1498799, 23.9339179 ], [ 71.1512857, 23.9342838 ], [ 71.1515697, 23.9345371 ], [ 71.1524116, 23.9346543 ], [ 71.1519997, 23.9351748 ], [ 71.1521615, 23.936459 ], [ 71.1544027, 23.9365558 ], [ 71.1545442, 23.9366828 ], [ 71.1545571, 23.9374545 ], [ 71.1548455, 23.9379652 ], [ 71.1555563, 23.9385979 ], [ 71.1597672, 23.9393106 ], [ 71.1611753, 23.9398055 ], [ 71.1617436, 23.940312 ], [ 71.1634335, 23.9409319 ], [ 71.1634422, 23.9414463 ], [ 71.1614807, 23.9413449 ], [ 71.1611967, 23.9410916 ], [ 71.1600749, 23.9409791 ], [ 71.1602188, 23.9412345 ], [ 71.1602273, 23.9417489 ], [ 71.1600921, 23.9420082 ], [ 71.1592483, 23.9417627 ], [ 71.1592311, 23.9407338 ], [ 71.1586777, 23.9411271 ], [ 71.1575539, 23.9408856 ], [ 71.1564388, 23.9411585 ], [ 71.1558789, 23.9411664 ], [ 71.1555949, 23.940913 ], [ 71.1544688, 23.9405433 ], [ 71.1544773, 23.941058 ], [ 71.1550392, 23.9411782 ], [ 71.1558875, 23.9416809 ], [ 71.1564473, 23.941673 ], [ 71.1575796, 23.942429 ], [ 71.1584235, 23.9426745 ], [ 71.1592632, 23.9426626 ], [ 71.1606712, 23.9431574 ], [ 71.1609553, 23.9434106 ], [ 71.1615172, 23.943532 ], [ 71.1615259, 23.9440464 ], [ 71.1634936, 23.9445333 ], [ 71.1634851, 23.9440188 ], [ 71.1660146, 23.9446259 ], [ 71.1671471, 23.9453819 ], [ 71.1677069, 23.945374 ], [ 71.1702388, 23.9461101 ], [ 71.1707986, 23.9461022 ], [ 71.1721936, 23.9458251 ], [ 71.1724779, 23.9460784 ], [ 71.1752855, 23.9465531 ], [ 71.1780864, 23.9466425 ], [ 71.1778152, 23.947161 ], [ 71.1775331, 23.947036 ], [ 71.1738903, 23.9468302 ], [ 71.1713734, 23.946995 ], [ 71.17153, 23.948022 ], [ 71.1716727, 23.9481481 ], [ 71.1727988, 23.9485185 ], [ 71.1725317, 23.9492942 ], [ 71.1733692, 23.9491534 ], [ 71.1742133, 23.9493987 ], [ 71.1761704, 23.9492428 ], [ 71.1761791, 23.9497572 ], [ 71.1784161, 23.9495964 ], [ 71.1786047, 23.9498916 ], [ 71.1784225, 23.9499827 ], [ 71.1784268, 23.95024 ], [ 71.1787067, 23.950236 ], [ 71.1787992, 23.9500649 ], [ 71.1789823, 23.9499748 ], [ 71.1789736, 23.9494603 ], [ 71.1792535, 23.9494564 ], [ 71.1792707, 23.9504853 ], [ 71.1800997, 23.9498298 ], [ 71.1803796, 23.9498259 ], [ 71.1808097, 23.9504634 ], [ 71.1808184, 23.9509778 ], [ 71.1816667, 23.9514804 ], [ 71.1818094, 23.9516066 ], [ 71.182929, 23.9515905 ], [ 71.1834843, 23.9513254 ], [ 71.1837642, 23.9513214 ], [ 71.1840485, 23.9515747 ], [ 71.1846062, 23.9514386 ], [ 71.1843393, 23.9522142 ], [ 71.1834953, 23.9519689 ], [ 71.1835039, 23.9524834 ], [ 71.1846257, 23.9525956 ], [ 71.185754, 23.9530942 ], [ 71.1868865, 23.95385 ], [ 71.1874463, 23.9538419 ], [ 71.1880105, 23.9540912 ], [ 71.1902562, 23.9544456 ], [ 71.1896833, 23.9536818 ], [ 71.1888436, 23.9536939 ], [ 71.1888349, 23.9531795 ], [ 71.186867, 23.9526928 ], [ 71.1868583, 23.9521783 ], [ 71.1877001, 23.9522946 ], [ 71.1899568, 23.9532915 ], [ 71.1908095, 23.9540513 ], [ 71.1922068, 23.9539032 ], [ 71.1920968, 23.9557058 ], [ 71.1918213, 23.955967 ], [ 71.1918256, 23.9562243 ], [ 71.1922526, 23.9566036 ], [ 71.1930944, 23.9567208 ], [ 71.1932469, 23.9574904 ], [ 71.1933896, 23.9576166 ], [ 71.1956376, 23.958099 ], [ 71.1959218, 23.9583522 ], [ 71.1981675, 23.9587066 ], [ 71.1978746, 23.9579389 ], [ 71.1973147, 23.9579468 ], [ 71.1975903, 23.9576856 ], [ 71.1975816, 23.9571711 ], [ 71.1981435, 23.9572914 ], [ 71.198699, 23.957026 ], [ 71.2001008, 23.9571351 ], [ 71.1999515, 23.9566227 ], [ 71.20018, 23.9561923 ], [ 71.2006453, 23.9562261 ], [ 71.2010711, 23.9566066 ], [ 71.2012204, 23.957119 ], [ 71.2020622, 23.957235 ], [ 71.2030524, 23.9578646 ], [ 71.2032015, 23.958377 ], [ 71.2010386, 23.9572904 ], [ 71.2009405, 23.957123 ], [ 71.2003807, 23.9571311 ], [ 71.200385, 23.9573883 ], [ 71.2010887, 23.9576355 ], [ 71.2012378, 23.9581479 ], [ 71.2023641, 23.9585172 ], [ 71.2025056, 23.9586442 ], [ 71.2026549, 23.9591568 ], [ 71.2063068, 23.9598761 ], [ 71.2067438, 23.960899 ], [ 71.2068863, 23.9610252 ], [ 71.2080016, 23.9607518 ], [ 71.2082771, 23.9604906 ], [ 71.2107986, 23.9605834 ], [ 71.2102255, 23.9598198 ], [ 71.2107853, 23.9598117 ], [ 71.2108734, 23.9593834 ], [ 71.2110566, 23.9592932 ], [ 71.2110652, 23.9598077 ], [ 71.2121826, 23.9596625 ], [ 71.2127447, 23.9597835 ], [ 71.212736, 23.959269 ], [ 71.2135778, 23.9593851 ], [ 71.2138621, 23.9596382 ], [ 71.2152639, 23.959747 ], [ 71.2146821, 23.958469 ], [ 71.2163682, 23.9588302 ], [ 71.2166525, 23.9590835 ], [ 71.2172144, 23.9592044 ], [ 71.2172232, 23.9597189 ], [ 71.2175009, 23.9595856 ], [ 71.218905, 23.9598226 ], [ 71.2197447, 23.9598105 ], [ 71.2203089, 23.9600596 ], [ 71.2225547, 23.9604136 ], [ 71.2225591, 23.9606709 ], [ 71.2220015, 23.9608071 ], [ 71.21976, 23.9607113 ], [ 71.2196417, 23.9619995 ], [ 71.220073, 23.9626361 ], [ 71.2214725, 23.9626157 ], [ 71.2217504, 23.9624836 ], [ 71.2217591, 23.962998 ], [ 71.2239962, 23.9628364 ], [ 71.2242805, 23.9630897 ], [ 71.2248403, 23.9630816 ], [ 71.2251159, 23.9628202 ], [ 71.2256734, 23.9626839 ], [ 71.2256646, 23.9621694 ], [ 71.2251047, 23.9621776 ], [ 71.225096, 23.9616631 ], [ 71.2262178, 23.9617752 ], [ 71.2263595, 23.9619022 ], [ 71.2265088, 23.9624146 ], [ 71.227344, 23.9621451 ], [ 71.2270819, 23.9631781 ], [ 71.2283232, 23.9621309 ], [ 71.2285678, 23.9600691 ], [ 71.2287061, 23.9599379 ], [ 71.2298278, 23.9600508 ], [ 71.2298367, 23.9605652 ], [ 71.2292769, 23.9605733 ], [ 71.2297141, 23.9615962 ], [ 71.2304253, 23.9622286 ], [ 71.2335022, 23.9620557 ], [ 71.2335111, 23.9625701 ], [ 71.2340709, 23.962562 ], [ 71.234062, 23.9620475 ], [ 71.23687, 23.9625212 ], [ 71.2371321, 23.9614881 ], [ 71.2379719, 23.961476 ], [ 71.2375604, 23.9619965 ], [ 71.2375647, 23.9622537 ], [ 71.238138, 23.9630173 ], [ 71.2388471, 23.9635215 ], [ 71.2389732, 23.9627478 ], [ 71.2391113, 23.9626166 ], [ 71.2393912, 23.9626126 ], [ 71.2396757, 23.9628657 ], [ 71.2402378, 23.9629867 ], [ 71.239949, 23.9624762 ], [ 71.2416239, 23.9621944 ], [ 71.2416196, 23.9619372 ], [ 71.2410575, 23.9618164 ], [ 71.240773, 23.9615633 ], [ 71.2402111, 23.9614433 ], [ 71.240299, 23.961015 ], [ 71.2407619, 23.9609205 ], [ 71.240753, 23.9604063 ], [ 71.2424347, 23.9605098 ], [ 71.2427101, 23.9602484 ], [ 71.2432699, 23.9602403 ], [ 71.2443941, 23.9604811 ], [ 71.2446717, 23.960349 ], [ 71.2444319, 23.962668 ], [ 71.2449917, 23.9626599 ], [ 71.2447207, 23.9631783 ], [ 71.2435967, 23.9629375 ], [ 71.2439032, 23.9644768 ], [ 71.2450229, 23.9644603 ], [ 71.2450408, 23.9654892 ], [ 71.2441966, 23.9652443 ], [ 71.2442055, 23.9657587 ], [ 71.2447653, 23.9657506 ], [ 71.2449182, 23.9665202 ], [ 71.2450609, 23.9666463 ], [ 71.2461782, 23.9665017 ], [ 71.2461917, 23.9672734 ], [ 71.2456318, 23.9672817 ], [ 71.2456407, 23.9677962 ], [ 71.2462005, 23.9677878 ], [ 71.2467915, 23.9695803 ], [ 71.2469768, 23.9696652 ], [ 71.2472612, 23.9699183 ], [ 71.2473604, 23.9700865 ], [ 71.2476403, 23.9700823 ], [ 71.2476358, 23.9698251 ], [ 71.2474496, 23.9697395 ], [ 71.2471654, 23.9694864 ], [ 71.2473447, 23.9691857 ], [ 71.2476247, 23.9691817 ], [ 71.2477664, 23.9693087 ], [ 71.2476538, 23.970854 ], [ 71.2484889, 23.9705845 ], [ 71.2483531, 23.9708438 ], [ 71.2485114, 23.9718706 ], [ 71.2493512, 23.9718583 ], [ 71.2490847, 23.9726342 ], [ 71.2496445, 23.9726259 ], [ 71.24956, 23.9733104 ], [ 71.2479805, 23.9735503 ], [ 71.2462965, 23.9733178 ], [ 71.2443436, 23.9737327 ], [ 71.2443481, 23.9739899 ], [ 71.2451901, 23.9741057 ], [ 71.2457588, 23.9746121 ], [ 71.2464649, 23.974988 ], [ 71.2466143, 23.9755004 ], [ 71.2471763, 23.9756204 ], [ 71.2476071, 23.9762577 ], [ 71.2474899, 23.9775459 ], [ 71.2485984, 23.9768859 ], [ 71.2491561, 23.9767497 ], [ 71.2491695, 23.9775213 ], [ 71.2502892, 23.9775049 ], [ 71.2504377, 23.9780173 ], [ 71.2505804, 23.9781433 ], [ 71.2517023, 23.978256 ], [ 71.2517114, 23.9787704 ], [ 71.2528333, 23.9788821 ], [ 71.2529705, 23.9787519 ], [ 71.2529616, 23.9782375 ], [ 71.2530998, 23.9781063 ], [ 71.2550527, 23.9776922 ], [ 71.2546458, 23.9784701 ], [ 71.2542308, 23.9787334 ], [ 71.2542353, 23.9789906 ], [ 71.2545152, 23.9789865 ], [ 71.2546076, 23.9788154 ], [ 71.2550707, 23.9787211 ], [ 71.2552236, 23.9794907 ], [ 71.255508, 23.9797438 ], [ 71.2559441, 23.9806374 ], [ 71.2576305, 23.9809989 ], [ 71.2577834, 23.9817686 ], [ 71.2584905, 23.9821437 ], [ 71.2596237, 23.9828988 ], [ 71.2600544, 23.9835361 ], [ 71.260766, 23.9841685 ], [ 71.2613237, 23.984032 ], [ 71.2614812, 23.9850589 ], [ 71.2617656, 23.9853119 ], [ 71.2618106, 23.987884 ], [ 71.2615351, 23.9881454 ], [ 71.261409, 23.9889192 ], [ 71.2619713, 23.989039 ], [ 71.262113, 23.989166 ], [ 71.2624109, 23.9901908 ], [ 71.2635443, 23.990946 ], [ 71.2635713, 23.9924892 ], [ 71.2641582, 23.9940243 ], [ 71.2641718, 23.9947959 ], [ 71.2644608, 23.9953062 ], [ 71.2643347, 23.99608 ], [ 71.2654568, 23.9961915 ], [ 71.2671502, 23.9969385 ], [ 71.2696745, 23.9971583 ], [ 71.2705235, 23.9976602 ], [ 71.2712298, 23.9980362 ], [ 71.270986, 24.0000982 ], [ 71.2705755, 24.0006188 ], [ 71.2686133, 24.0005187 ], [ 71.2674867, 24.0001499 ], [ 71.2674685, 23.999121 ], [ 71.2669062, 23.9990003 ], [ 71.2663396, 23.9986232 ], [ 71.2656796, 24.0009485 ], [ 71.2650074, 24.0025022 ], [ 71.2641584, 24.0020001 ], [ 71.2637199, 24.0009774 ], [ 71.2627223, 23.999963 ], [ 71.2618824, 23.9999755 ], [ 71.2618959, 24.0007472 ], [ 71.2613358, 24.0007553 ], [ 71.2609335, 24.0017905 ], [ 71.260523, 24.0023112 ], [ 71.2596874, 24.0025807 ], [ 71.2595649, 24.0036117 ], [ 71.260423, 24.0046281 ], [ 71.2611368, 24.0053894 ], [ 71.2597369, 24.0054102 ], [ 71.259719, 24.0043813 ], [ 71.2591589, 24.0043894 ], [ 71.2594568, 24.0054142 ], [ 71.2588968, 24.0054225 ], [ 71.2589013, 24.0056797 ], [ 71.2597414, 24.0056672 ], [ 71.2598898, 24.0061796 ], [ 71.2606016, 24.006812 ], [ 71.2617193, 24.0066672 ], [ 71.2618679, 24.0071796 ], [ 71.2620106, 24.0073057 ], [ 71.2625728, 24.0074264 ], [ 71.2627214, 24.0079388 ], [ 71.2630058, 24.0081921 ], [ 71.2630238, 24.0092208 ], [ 71.2637378, 24.0099821 ], [ 71.2631778, 24.0099904 ], [ 71.2630508, 24.0107642 ], [ 71.2627755, 24.0110256 ], [ 71.2626449, 24.0115421 ], [ 71.2643203, 24.0112599 ], [ 71.2643294, 24.0117744 ], [ 71.2648917, 24.0118942 ], [ 71.2650334, 24.0120212 ], [ 71.265192, 24.0130481 ], [ 71.2646343, 24.0131845 ], [ 71.2643587, 24.0134459 ], [ 71.2629631, 24.0137237 ], [ 71.2621141, 24.0132217 ], [ 71.2615541, 24.0132301 ], [ 71.2612763, 24.0133633 ], [ 71.2614294, 24.0141327 ], [ 71.2615721, 24.014259 ], [ 71.2624145, 24.0143756 ], [ 71.2624188, 24.0146328 ], [ 71.2610232, 24.0149106 ], [ 71.2617409, 24.0159292 ], [ 71.2643016, 24.018207 ], [ 71.2650293, 24.0197398 ], [ 71.2644691, 24.0197481 ], [ 71.264215153060704, 24.021021090426501 ], [ 71.2642117, 24.0210384 ], [ 71.2619737, 24.0211996 ], [ 71.2614203, 24.0215943 ], [ 71.2614249, 24.0218515 ], [ 71.2633873, 24.0219507 ], [ 71.2636742, 24.0223327 ], [ 71.2619985, 24.0226149 ], [ 71.2622852, 24.0229961 ], [ 71.2645277, 24.0230921 ], [ 71.2642612, 24.0238677 ], [ 71.2614653, 24.0241664 ], [ 71.2617522, 24.0245476 ], [ 71.2645526, 24.0245062 ], [ 71.2646944, 24.0246332 ], [ 71.2645638, 24.0251497 ], [ 71.2617679, 24.0254483 ], [ 71.261777, 24.0259628 ], [ 71.2654175, 24.0259089 ], [ 71.2651465, 24.0264276 ], [ 71.2629129, 24.026846 ], [ 71.2620796, 24.0272448 ], [ 71.2620839, 24.027502 ], [ 71.2651599, 24.0271992 ], [ 71.2648934, 24.0279749 ], [ 71.2620975, 24.0282735 ], [ 71.2621066, 24.028788 ], [ 71.2626666, 24.0287797 ], [ 71.2623956, 24.0292983 ], [ 71.26156, 24.029568 ], [ 71.2617086, 24.0300804 ], [ 71.2618512, 24.0302064 ], [ 71.2657652, 24.029763 ], [ 71.2656292, 24.0300223 ], [ 71.2656382, 24.0305368 ], [ 71.2657809, 24.0306629 ], [ 71.2685815, 24.0306215 ], [ 71.268866, 24.0308745 ], [ 71.2694262, 24.0308662 ], [ 71.2697017, 24.0306048 ], [ 71.2702595, 24.0304684 ], [ 71.2704126, 24.031238 ], [ 71.2708422, 24.0317462 ], [ 71.2703759, 24.0316646 ], [ 71.2702776, 24.0314973 ], [ 71.2699975, 24.0315014 ], [ 71.2700021, 24.0317585 ], [ 71.2702867, 24.0320116 ], [ 71.2683375, 24.0326833 ], [ 71.2677775, 24.0326916 ], [ 71.266384, 24.0330987 ], [ 71.2666866, 24.0343805 ], [ 71.2672466, 24.0343722 ], [ 71.2672512, 24.0346294 ], [ 71.2666912, 24.0346377 ], [ 71.2670028, 24.0364342 ], [ 71.2678429, 24.0364217 ], [ 71.267852, 24.0369361 ], [ 71.2653224, 24.0364589 ], [ 71.2654528, 24.0359426 ], [ 71.2659569, 24.0352508 ], [ 71.26614, 24.0351605 ], [ 71.2661355, 24.0349033 ], [ 71.2658554, 24.0349074 ], [ 71.265762, 24.0350775 ], [ 71.2650244, 24.0354343 ], [ 71.2651121, 24.0350059 ], [ 71.2655753, 24.0349116 ], [ 71.2655708, 24.0346543 ], [ 71.2650108, 24.0346627 ], [ 71.2649174, 24.0348328 ], [ 71.2638951, 24.0349363 ], [ 71.2638906, 24.0346791 ], [ 71.2647307, 24.0346668 ], [ 71.2647216, 24.0341524 ], [ 71.2633258, 24.0344302 ], [ 71.2635923, 24.0336545 ], [ 71.2630323, 24.0336627 ], [ 71.2626433, 24.0354695 ], [ 71.2627974, 24.0362391 ], [ 71.2588741, 24.0361679 ], [ 71.2583207, 24.0365625 ], [ 71.2583387, 24.0375914 ], [ 71.2588966, 24.037454 ], [ 71.2593275, 24.0380913 ], [ 71.2600418, 24.0388526 ], [ 71.2594793, 24.0387318 ], [ 71.2577787, 24.0375995 ], [ 71.2579316, 24.0383691 ], [ 71.2582162, 24.0386222 ], [ 71.2586592, 24.0399021 ], [ 71.257539, 24.0399188 ], [ 71.257701, 24.0412026 ], [ 71.2579902, 24.0417129 ], [ 71.2583016, 24.0435094 ], [ 71.2585863, 24.0437624 ], [ 71.2587448, 24.0447893 ], [ 71.2593028, 24.0446519 ], [ 71.2595874, 24.0449051 ], [ 71.260432, 24.0451499 ], [ 71.2607189, 24.0455321 ], [ 71.2593185, 24.0455527 ], [ 71.259341, 24.0468388 ], [ 71.2599011, 24.0468305 ], [ 71.2597696, 24.047347 ], [ 71.259494, 24.0476084 ], [ 71.2594986, 24.0478656 ], [ 71.2604952, 24.0487509 ], [ 71.2614908, 24.0496371 ], [ 71.2624784, 24.0500079 ], [ 71.2626201, 24.050135 ], [ 71.2627698, 24.0506473 ], [ 71.2638856, 24.0503735 ], [ 71.2640342, 24.0508859 ], [ 71.2647416, 24.051261 ], [ 71.2654526, 24.051894 ], [ 71.2657418, 24.0524043 ], [ 71.2656158, 24.053178 ], [ 71.2661761, 24.0531697 ], [ 71.2663065, 24.0526532 ], [ 71.2665821, 24.052392 ], [ 71.2667, 24.0511038 ], [ 71.2683784, 24.0509497 ], [ 71.268959, 24.0520994 ], [ 71.2681187, 24.0521119 ], [ 71.2684124, 24.0528794 ], [ 71.2692527, 24.052867 ], [ 71.2691393, 24.0544122 ], [ 71.2694239, 24.0546653 ], [ 71.2692978, 24.0554391 ], [ 71.269858, 24.0554307 ], [ 71.2698671, 24.0559452 ], [ 71.2704228, 24.0556797 ], [ 71.2702912, 24.0561962 ], [ 71.2700157, 24.0564576 ], [ 71.270206, 24.0592848 ], [ 71.2696413, 24.0590359 ], [ 71.2696322, 24.0585215 ], [ 71.2690765, 24.058787 ], [ 71.2693702, 24.0595545 ], [ 71.2688123, 24.059691 ], [ 71.2685367, 24.0599524 ], [ 71.2679743, 24.0598325 ], [ 71.2683803, 24.0590546 ], [ 71.2682317, 24.0585422 ], [ 71.2668289, 24.0584339 ], [ 71.2657152, 24.0588369 ], [ 71.2657197, 24.0590941 ], [ 71.2662799, 24.0590858 ], [ 71.2662935, 24.0598573 ], [ 71.265731, 24.0597367 ], [ 71.2645993, 24.0591106 ], [ 71.2645948, 24.0588533 ], [ 71.2654351, 24.0588411 ], [ 71.2654216, 24.0580694 ], [ 71.2648635, 24.0582058 ], [ 71.2634608, 24.0580983 ], [ 71.2634517, 24.057584 ], [ 71.2628915, 24.0575921 ], [ 71.2629006, 24.0581066 ], [ 71.2623426, 24.0582431 ], [ 71.2615112, 24.05877 ], [ 71.260113, 24.0589197 ], [ 71.2601039, 24.0584052 ], [ 71.2595437, 24.0584135 ], [ 71.2592816, 24.0594466 ], [ 71.2587146, 24.0590686 ], [ 71.2578766, 24.05921 ], [ 71.2578675, 24.0586955 ], [ 71.2589881, 24.0586791 ], [ 71.2586898, 24.0576543 ], [ 71.2581274, 24.0575336 ], [ 71.2578427, 24.0572805 ], [ 71.2564423, 24.0573011 ], [ 71.2561644, 24.0574343 ], [ 71.2561733, 24.0579488 ], [ 71.2558909, 24.0578239 ], [ 71.2544927, 24.0579735 ], [ 71.2547637, 24.0574549 ], [ 71.253928, 24.0577246 ], [ 71.2537785, 24.0572123 ], [ 71.2534939, 24.056959 ], [ 71.2534421, 24.0565328 ], [ 71.2536254, 24.0564426 ], [ 71.2536209, 24.0561854 ], [ 71.2533408, 24.0561896 ], [ 71.2532474, 24.0563597 ], [ 71.2525027, 24.05633 ], [ 71.251938, 24.0560811 ], [ 71.2508153, 24.0559694 ], [ 71.2508017, 24.0551977 ], [ 71.2505239, 24.05533 ], [ 71.2499637, 24.0553383 ], [ 71.2493946, 24.054832 ], [ 71.2474271, 24.0544755 ], [ 71.2478378, 24.0539548 ], [ 71.2475307, 24.0524156 ], [ 71.2468176, 24.0516543 ], [ 71.2462574, 24.0516625 ], [ 71.2462708, 24.0524341 ], [ 71.2448749, 24.052712 ], [ 71.2451728, 24.0537367 ], [ 71.2446148, 24.053873 ], [ 71.2440635, 24.0543958 ], [ 71.2429409, 24.0542841 ], [ 71.2432075, 24.0535082 ], [ 71.2402247, 24.0537209 ], [ 71.2402525, 24.0527796 ], [ 71.2403886, 24.0525203 ], [ 71.239546, 24.0524037 ], [ 71.2386969, 24.0519015 ], [ 71.2381278, 24.0513952 ], [ 71.2364381, 24.0509053 ], [ 71.235869, 24.0503992 ], [ 71.2350287, 24.0504115 ], [ 71.2339017, 24.0500423 ], [ 71.2339152, 24.050814 ], [ 71.233355, 24.0508222 ], [ 71.2333593, 24.0510794 ], [ 71.2339195, 24.0510713 ], [ 71.2340681, 24.0515836 ], [ 71.2342108, 24.0517097 ], [ 71.2350488, 24.0515693 ], [ 71.2350622, 24.052341 ], [ 71.234502, 24.0523493 ], [ 71.2345109, 24.0528637 ], [ 71.2350711, 24.0528554 ], [ 71.2347999, 24.053374 ], [ 71.2342374, 24.0532531 ], [ 71.2334039, 24.0536517 ], [ 71.233386, 24.0526228 ], [ 71.2325457, 24.052635 ], [ 71.2327209, 24.0546908 ], [ 71.2339305, 24.0598189 ], [ 71.2345173, 24.061354 ], [ 71.2349448, 24.0617333 ], [ 71.2357897, 24.0619783 ], [ 71.2366434, 24.0627375 ], [ 71.2374837, 24.0627252 ], [ 71.2388912, 24.0630911 ], [ 71.2390395, 24.0636035 ], [ 71.2398934, 24.0643629 ], [ 71.2397628, 24.0648792 ], [ 71.240323, 24.0648711 ], [ 71.2403319, 24.0653856 ], [ 71.2414525, 24.0653691 ], [ 71.2414659, 24.0661408 ], [ 71.2420284, 24.0662608 ], [ 71.242313, 24.0665139 ], [ 71.2431578, 24.0667588 ], [ 71.2435887, 24.0673961 ], [ 71.2444381, 24.0678981 ], [ 71.2444854, 24.0680663 ], [ 71.2435564, 24.0680799 ], [ 71.2434581, 24.0679125 ], [ 71.243178, 24.0679166 ], [ 71.2431824, 24.0681739 ], [ 71.244176, 24.0689312 ], [ 71.2444649, 24.0694415 ], [ 71.2446078, 24.0695676 ], [ 71.2454504, 24.0696844 ], [ 71.2454638, 24.070456 ], [ 71.2440588, 24.0702194 ], [ 71.2442072, 24.0707318 ], [ 71.2444918, 24.0709849 ], [ 71.2446413, 24.0714972 ], [ 71.2452017, 24.0714889 ], [ 71.2453502, 24.0720013 ], [ 71.2462041, 24.0727607 ], [ 71.2462512, 24.0729287 ], [ 71.246069, 24.07302 ], [ 71.2460735, 24.0732773 ], [ 71.2463536, 24.0732731 ], [ 71.246446, 24.073102 ], [ 71.2466292, 24.0730117 ], [ 71.2466383, 24.0735262 ], [ 71.2471985, 24.0735178 ], [ 71.2469252, 24.0739074 ], [ 71.2466471, 24.0740406 ], [ 71.2465201, 24.0748144 ], [ 71.2468048, 24.0750675 ], [ 71.2469543, 24.0755798 ], [ 71.2463873, 24.0752016 ], [ 71.2439618, 24.075278 ], [ 71.2435789, 24.0748575 ], [ 71.2430187, 24.0748658 ], [ 71.2433056, 24.075247 ], [ 71.2437732, 24.0754568 ], [ 71.2438726, 24.075625 ], [ 71.2455647, 24.076243 ], [ 71.2475281, 24.0763432 ], [ 71.2476812, 24.0771128 ], [ 71.2486778, 24.0779983 ], [ 71.2492404, 24.0781191 ], [ 71.2492538, 24.0788907 ], [ 71.2486934, 24.0788989 ], [ 71.2485799, 24.0804443 ], [ 71.2480285, 24.0809669 ], [ 71.248042, 24.0817386 ], [ 71.2479068, 24.0819979 ], [ 71.247062, 24.081753 ], [ 71.2470529, 24.0812387 ], [ 71.2448227, 24.0819142 ], [ 71.2439802, 24.0817983 ], [ 71.2442826, 24.0830803 ], [ 71.2456834, 24.0830597 ], [ 71.2455474, 24.083319 ], [ 71.2451321, 24.0835825 ], [ 71.245141, 24.0840967 ], [ 71.2454213, 24.0840928 ], [ 71.2455092, 24.0836645 ], [ 71.2459749, 24.0836981 ], [ 71.2464014, 24.0840782 ], [ 71.2462707, 24.0845948 ], [ 71.2459883, 24.0844698 ], [ 71.2454302, 24.0846072 ], [ 71.2451635, 24.0853829 ], [ 71.2446008, 24.0852621 ], [ 71.2443162, 24.085009 ], [ 71.2431888, 24.0846401 ], [ 71.2428953, 24.0838726 ], [ 71.2423327, 24.0837516 ], [ 71.2414787, 24.0829924 ], [ 71.2411985, 24.0829964 ], [ 71.2406471, 24.0835192 ], [ 71.2398133, 24.0839178 ], [ 71.240405, 24.08571 ], [ 71.2409654, 24.0857017 ], [ 71.2409475, 24.084673 ], [ 71.2412276, 24.0846688 ], [ 71.2412366, 24.0851833 ], [ 71.2417902, 24.0847887 ], [ 71.2426284, 24.0846482 ], [ 71.2423618, 24.0854241 ], [ 71.2437626, 24.0854035 ], [ 71.2439112, 24.0859159 ], [ 71.2441958, 24.0861689 ], [ 71.2443498, 24.0869385 ], [ 71.2446299, 24.0869344 ], [ 71.2446211, 24.0864199 ], [ 71.2449012, 24.086416 ], [ 71.2449102, 24.0869304 ], [ 71.2454706, 24.0869221 ], [ 71.2453816, 24.0873494 ], [ 71.2446436, 24.0877061 ], [ 71.2449305, 24.0880873 ], [ 71.2454929, 24.0882083 ], [ 71.2455765, 24.0875227 ], [ 71.2460399, 24.0874282 ], [ 71.2459038, 24.0876876 ], [ 71.2457866, 24.0889758 ], [ 71.245224, 24.088855 ], [ 71.2449393, 24.0886017 ], [ 71.2435317, 24.088237 ], [ 71.2435228, 24.0877225 ], [ 71.2440875, 24.0879716 ], [ 71.2440698, 24.0869427 ], [ 71.2415504, 24.0871079 ], [ 71.2399564, 24.0866573 ], [ 71.2398492, 24.0859754 ], [ 71.2390042, 24.0857305 ], [ 71.238561, 24.0844506 ], [ 71.2378477, 24.0836893 ], [ 71.2372941, 24.0840828 ], [ 71.2356152, 24.0842364 ], [ 71.2356241, 24.0847509 ], [ 71.2361799, 24.0844855 ], [ 71.236189, 24.085 ], [ 71.237025, 24.0847305 ], [ 71.2370338, 24.0852449 ], [ 71.2353529, 24.0852695 ], [ 71.235344, 24.084755 ], [ 71.2345973, 24.0846774 ], [ 71.2344944, 24.0842529 ], [ 71.2336585, 24.0845224 ], [ 71.233365, 24.0837548 ], [ 71.2300049, 24.0839319 ], [ 71.2277747, 24.0846082 ], [ 71.2280639, 24.0851185 ], [ 71.2272232, 24.0851308 ], [ 71.2273157, 24.0849597 ], [ 71.227499, 24.0848696 ], [ 71.2274946, 24.0846123 ], [ 71.2272144, 24.0846163 ], [ 71.227121, 24.0847866 ], [ 71.2266585, 24.0848817 ], [ 71.2266496, 24.0843674 ], [ 71.225262, 24.0851593 ], [ 71.2251304, 24.0856758 ], [ 71.2247196, 24.0861963 ], [ 71.2233208, 24.0863449 ], [ 71.2222089, 24.0868758 ], [ 71.2213707, 24.087017 ], [ 71.2213795, 24.0875314 ], [ 71.2205368, 24.0874146 ], [ 71.219983, 24.0878091 ], [ 71.2199919, 24.0883235 ], [ 71.2194315, 24.0883317 ], [ 71.2194226, 24.0878172 ], [ 71.2189605, 24.0879926 ], [ 71.2189974, 24.087566 ], [ 71.2198292, 24.0870395 ], [ 71.2196806, 24.0865269 ], [ 71.2194026, 24.0866592 ], [ 71.2188401, 24.0865392 ], [ 71.2189486, 24.0847365 ], [ 71.2190849, 24.0844774 ], [ 71.2182442, 24.0844895 ], [ 71.2182665, 24.0857756 ], [ 71.2177061, 24.0857838 ], [ 71.217828, 24.0847528 ], [ 71.2176795, 24.0842404 ], [ 71.2182399, 24.0842323 ], [ 71.2184979, 24.0829421 ], [ 71.21822, 24.0830743 ], [ 71.2162609, 24.0832319 ], [ 71.2156697, 24.0814394 ], [ 71.2151136, 24.0817048 ], [ 71.2152711, 24.0827316 ], [ 71.2149953, 24.082993 ], [ 71.2150261, 24.0847934 ], [ 71.2147504, 24.0850548 ], [ 71.2146196, 24.0855713 ], [ 71.2154623, 24.0856872 ], [ 71.216169, 24.0860633 ], [ 71.2163228, 24.0868329 ], [ 71.2152, 24.0867203 ], [ 71.2149154, 24.086467 ], [ 71.2129562, 24.0866244 ], [ 71.2132629, 24.0881638 ], [ 71.2138211, 24.0880266 ], [ 71.2140968, 24.0877652 ], [ 71.2146551, 24.087629 ], [ 71.2141168, 24.0889232 ], [ 71.2135519, 24.0886741 ], [ 71.2135608, 24.0891886 ], [ 71.2127203, 24.0892007 ], [ 71.2129114, 24.0896241 ], [ 71.2118863, 24.0895983 ], [ 71.2116084, 24.0897314 ], [ 71.2116217, 24.0905031 ], [ 71.2107766, 24.0902581 ], [ 71.2107678, 24.0897437 ], [ 71.2099273, 24.0897558 ], [ 71.2096338, 24.0889881 ], [ 71.2085173, 24.0892615 ], [ 71.2085219, 24.0895188 ], [ 71.2090823, 24.0895107 ], [ 71.2092482, 24.0910519 ], [ 71.208701, 24.0918318 ], [ 71.2082902, 24.0923523 ], [ 71.2077298, 24.0923604 ], [ 71.2078781, 24.0928728 ], [ 71.207599817968756, 24.093405198365808 ], [ 71.2074716, 24.0936505 ], [ 71.207399817968749, 24.093637943914789 ], [ 71.2070051, 24.0935689 ], [ 71.2069069, 24.0934014 ], [ 71.2066266, 24.0934056 ], [ 71.2066309, 24.0936628 ], [ 71.2069156, 24.0939159 ], [ 71.2063552, 24.093924 ], [ 71.2065124, 24.0949508 ], [ 71.2063773, 24.0952101 ], [ 71.205252, 24.0949692 ], [ 71.2054049, 24.0957388 ], [ 71.2059785, 24.0965023 ], [ 71.2061278, 24.0970147 ], [ 71.2066905, 24.0971349 ], [ 71.207399817968749, 24.097554228409546 ], [ 71.20754, 24.0976371 ], [ 71.207599817968756, 24.097643107895003 ], [ 71.2086631, 24.0977499 ], [ 71.20854, 24.0987809 ], [ 71.2089675, 24.0991602 ], [ 71.2095302, 24.0992812 ], [ 71.2096786, 24.0997936 ], [ 71.2105281, 24.1002959 ], [ 71.2106774, 24.1008083 ], [ 71.2115158, 24.1006671 ], [ 71.2117918, 24.1004057 ], [ 71.2129059, 24.1000041 ], [ 71.2126477, 24.1012944 ], [ 71.212083, 24.1010453 ], [ 71.2121754, 24.1008743 ], [ 71.2123588, 24.1007839 ], [ 71.2123544, 24.1005267 ], [ 71.2120741, 24.1005309 ], [ 71.2118005, 24.1009202 ], [ 71.2112423, 24.1010574 ], [ 71.2112512, 24.1015719 ], [ 71.2118071, 24.1013065 ], [ 71.21196, 24.1020761 ], [ 71.2116385, 24.1022496 ], [ 71.2115359, 24.1018251 ], [ 71.2109753, 24.1018331 ], [ 71.2116886, 24.1025947 ], [ 71.2121051, 24.1023315 ], [ 71.2121138, 24.1028459 ], [ 71.2123941, 24.1028418 ], [ 71.2123852, 24.1023273 ], [ 71.2126655, 24.1023233 ], [ 71.2129811, 24.104377 ], [ 71.2135415, 24.1043689 ], [ 71.2135548, 24.1051406 ], [ 71.2141108, 24.1048752 ], [ 71.2141197, 24.1053897 ], [ 71.2132834, 24.105659 ], [ 71.2133011, 24.1066879 ], [ 71.2138615, 24.1066798 ], [ 71.2137387, 24.1077108 ], [ 71.2140233, 24.1079639 ], [ 71.2141771, 24.1087337 ], [ 71.2152937, 24.1084602 ], [ 71.2151442, 24.1079476 ], [ 71.214575, 24.1074413 ], [ 71.2144264, 24.1069289 ], [ 71.2149847, 24.1067917 ], [ 71.2151221, 24.1066616 ], [ 71.2157878, 24.1045936 ], [ 71.2160679, 24.1045894 ], [ 71.2162164, 24.105102 ], [ 71.2169286, 24.1057344 ], [ 71.2176353, 24.1061105 ], [ 71.2175045, 24.1066271 ], [ 71.2183451, 24.1066148 ], [ 71.2184937, 24.1071272 ], [ 71.2192013, 24.1075023 ], [ 71.2200554, 24.1082619 ], [ 71.2208983, 24.1083787 ], [ 71.2209027, 24.1086359 ], [ 71.2197863, 24.1089094 ], [ 71.2197952, 24.1094239 ], [ 71.2203512, 24.1091585 ], [ 71.2203601, 24.109673 ], [ 71.2205455, 24.1097578 ], [ 71.220369, 24.1101874 ], [ 71.2192346, 24.109432 ], [ 71.219537, 24.110714 ], [ 71.2178513, 24.1104813 ], [ 71.217829, 24.1091952 ], [ 71.2167126, 24.1094687 ], [ 71.2170193, 24.1110079 ], [ 71.2164546, 24.1107588 ], [ 71.2164412, 24.1099871 ], [ 71.2150378, 24.1098784 ], [ 71.2147553, 24.1097543 ], [ 71.2147642, 24.1102687 ], [ 71.2142038, 24.1102768 ], [ 71.2146413, 24.1112997 ], [ 71.2157933, 24.1130841 ], [ 71.2159471, 24.1138537 ], [ 71.2153822, 24.1136046 ], [ 71.2153769, 24.1147245 ], [ 71.2162518, 24.1152638 ], [ 71.2168144, 24.1153848 ], [ 71.2169452, 24.1148682 ], [ 71.2172212, 24.114607 ], [ 71.2172123, 24.1140926 ], [ 71.2170681, 24.1138374 ], [ 71.2181913, 24.1139493 ], [ 71.2187608, 24.1144556 ], [ 71.2196058, 24.1147006 ], [ 71.2198906, 24.1149536 ], [ 71.2201707, 24.1149497 ], [ 71.2203081, 24.1148195 ], [ 71.220431, 24.1137885 ], [ 71.2208554, 24.1140396 ], [ 71.2207335, 24.1150706 ], [ 71.2218566, 24.1151823 ], [ 71.2219985, 24.1153093 ], [ 71.2218812, 24.1165976 ], [ 71.2207557, 24.1163566 ], [ 71.2206239, 24.1168731 ], [ 71.220213, 24.1173936 ], [ 71.2213383, 24.1176346 ], [ 71.2213429, 24.1178918 ], [ 71.220224, 24.1180362 ], [ 71.2196725, 24.1185588 ], [ 71.2191142, 24.118696 ], [ 71.2191185, 24.1189533 ], [ 71.2199571, 24.1188121 ], [ 71.2202329, 24.1185507 ], [ 71.2213561, 24.1186635 ], [ 71.2212244, 24.1191801 ], [ 71.2209486, 24.1194413 ], [ 71.220953, 24.1196985 ], [ 71.2213784, 24.1199497 ], [ 71.2217804, 24.1189147 ], [ 71.222197, 24.1186512 ], [ 71.2223455, 24.1191636 ], [ 71.222773, 24.1195429 ], [ 71.223616, 24.1196597 ], [ 71.2236114, 24.1194025 ], [ 71.2230511, 24.1194106 ], [ 71.2230422, 24.1188962 ], [ 71.2236003, 24.118759 ], [ 71.2241543, 24.1183655 ], [ 71.2243028, 24.1188778 ], [ 71.2241764, 24.1196516 ], [ 71.2250172, 24.1196393 ], [ 71.2250216, 24.1198966 ], [ 71.2244612, 24.1199047 ], [ 71.2243722, 24.1203322 ], [ 71.223914, 24.1206845 ], [ 71.2239184, 24.1209417 ], [ 71.224479, 24.1209336 ], [ 71.224567, 24.1205053 ], [ 71.2267211, 24.1209009 ], [ 71.2267299, 24.1214154 ], [ 71.2261671, 24.1212944 ], [ 71.2258891, 24.1214276 ], [ 71.225898, 24.1219421 ], [ 71.2264542, 24.1216767 ], [ 71.2264631, 24.1221912 ], [ 71.2247815, 24.1222156 ], [ 71.2250484, 24.1214399 ], [ 71.2244901, 24.1215762 ], [ 71.2242144, 24.1218376 ], [ 71.2237498, 24.1218848 ], [ 71.2236472, 24.1214603 ], [ 71.2225217, 24.1212194 ], [ 71.2226479, 24.1204458 ], [ 71.2225039, 24.1201905 ], [ 71.2216653, 24.1203309 ], [ 71.2208313, 24.1207295 ], [ 71.2208401, 24.1212439 ], [ 71.2206536, 24.1211581 ], [ 71.2202573, 24.1199659 ], [ 71.2188583, 24.1201145 ], [ 71.2185757, 24.1199903 ], [ 71.2185625, 24.1192186 ], [ 71.2179998, 24.1190978 ], [ 71.217715, 24.1188446 ], [ 71.2168698, 24.1185996 ], [ 71.2157489, 24.1186159 ], [ 71.2146213, 24.1182468 ], [ 71.2147094, 24.1178185 ], [ 71.2157356, 24.1178442 ], [ 71.2160093, 24.1174547 ], [ 71.2154487, 24.1174628 ], [ 71.2152992, 24.1169504 ], [ 71.2148706, 24.1164422 ], [ 71.2129065, 24.1163415 ], [ 71.2126307, 24.1166029 ], [ 71.2115119, 24.116748 ], [ 71.2115032, 24.1162337 ], [ 71.2109426, 24.1162417 ], [ 71.2109337, 24.1157274 ], [ 71.2103711, 24.1156064 ], [ 71.2100864, 24.1153532 ], [ 71.2095281, 24.1154904 ], [ 71.2102459, 24.1165091 ], [ 71.2103019, 24.1171918 ], [ 71.2101195, 24.1172829 ], [ 71.2101106, 24.1167684 ], [ 71.2095546, 24.1170338 ], [ 71.2096986, 24.1172889 ], [ 71.2097075, 24.1178034 ], [ 71.2095723, 24.1180627 ], [ 71.2084535, 24.1182069 ], [ 71.2081688, 24.1179538 ], [ 71.207399817968749, 24.117876812794325 ], [ 71.2059224, 24.1177289 ], [ 71.203378, 24.1164792 ], [ 71.2022571, 24.1164955 ], [ 71.2019791, 24.1166286 ], [ 71.2016812, 24.1156038 ], [ 71.2012189, 24.1157792 ], [ 71.2011206, 24.1156117 ], [ 71.2008403, 24.1156159 ], [ 71.2008449, 24.1158731 ], [ 71.2010303, 24.115958 ], [ 71.2011382, 24.1166407 ], [ 71.2005778, 24.1166488 ], [ 71.2004283, 24.1161364 ], [ 71.2005557, 24.1153626 ], [ 71.199159, 24.1156401 ], [ 71.1997721, 24.1187187 ], [ 71.1989271, 24.1184736 ], [ 71.1990755, 24.118986 ], [ 71.2002097, 24.1197416 ], [ 71.2002142, 24.1199988 ], [ 71.1999383, 24.12026 ], [ 71.1999471, 24.1207745 ], [ 71.2002448, 24.1217994 ], [ 71.2001097, 24.1220585 ], [ 71.1998294, 24.1220627 ], [ 71.1998207, 24.1215482 ], [ 71.1992601, 24.1215562 ], [ 71.1992733, 24.1223279 ], [ 71.1989931, 24.122332 ], [ 71.1988436, 24.1218194 ], [ 71.1985119, 24.1213972 ], [ 71.1988303, 24.1210479 ], [ 71.1989534, 24.120017 ], [ 71.198117, 24.1202863 ], [ 71.1982524, 24.120027 ], [ 71.1980995, 24.1192574 ], [ 71.1975389, 24.1192655 ], [ 71.197806, 24.1184896 ], [ 71.1969609, 24.1182445 ], [ 71.197228, 24.1174689 ], [ 71.1963894, 24.1176091 ], [ 71.1961068, 24.1174849 ], [ 71.1960938, 24.1167132 ], [ 71.1946903, 24.1166044 ], [ 71.1944123, 24.1167374 ], [ 71.1945563, 24.1169928 ], [ 71.1944253, 24.1175091 ], [ 71.1938627, 24.1173882 ], [ 71.193011, 24.1167576 ], [ 71.1931418, 24.1162411 ], [ 71.1929978, 24.115986 ], [ 71.1902063, 24.1166688 ], [ 71.1882424, 24.1165688 ], [ 71.188516, 24.1161784 ], [ 71.1890743, 24.1160423 ], [ 71.1890655, 24.1155278 ], [ 71.1876642, 24.1155479 ], [ 71.1876512, 24.1147762 ], [ 71.1868126, 24.1149164 ], [ 71.1862586, 24.1153107 ], [ 71.1859653, 24.1145429 ], [ 71.185129, 24.1148123 ], [ 71.1854397, 24.1166089 ], [ 71.184599, 24.116621 ], [ 71.1844671, 24.1171373 ], [ 71.1841911, 24.1173985 ], [ 71.1840604, 24.1179151 ], [ 71.1834998, 24.117923 ], [ 71.1834911, 24.1174086 ], [ 71.1826502, 24.1174207 ], [ 71.1822556, 24.1189701 ], [ 71.1824006, 24.1192252 ], [ 71.18184, 24.1192334 ], [ 71.1807714, 24.122336 ], [ 71.1802131, 24.1224723 ], [ 71.1796591, 24.1228665 ], [ 71.1797899, 24.12235 ], [ 71.1799284, 24.122219 ], [ 71.1804867, 24.1220827 ], [ 71.1803331, 24.1213131 ], [ 71.1799044, 24.1208047 ], [ 71.1794378, 24.1207229 ], [ 71.1794705, 24.1200391 ], [ 71.1801564, 24.1191283 ], [ 71.1803395, 24.119085 ], [ 71.1804387, 24.1192532 ], [ 71.180719, 24.1192492 ], [ 71.1807147, 24.118992 ], [ 71.1805283, 24.1189062 ], [ 71.1807081, 24.1186057 ], [ 71.1808457, 24.1184757 ], [ 71.1808368, 24.1179612 ], [ 71.1811127, 24.1177 ], [ 71.1815162, 24.116665 ], [ 71.1803887, 24.1162948 ], [ 71.180104, 24.1160415 ], [ 71.1792632, 24.1160534 ], [ 71.1787115, 24.116576 ], [ 71.1778706, 24.1165879 ], [ 71.1759133, 24.1168731 ], [ 71.1756308, 24.116749 ], [ 71.1756221, 24.1162345 ], [ 71.1748797, 24.1164139 ], [ 71.1747771, 24.1159892 ], [ 71.1744968, 24.1159931 ], [ 71.1745055, 24.1165076 ], [ 71.1746909, 24.1165926 ], [ 71.1752186, 24.1172695 ], [ 71.1750878, 24.1177858 ], [ 71.1742492, 24.117926 ], [ 71.1736973, 24.1184484 ], [ 71.1722961, 24.1184683 ], [ 71.1720201, 24.1187297 ], [ 71.1706166, 24.1186214 ], [ 71.1707302, 24.1170759 ], [ 71.1705862, 24.1168208 ], [ 71.1697476, 24.1169608 ], [ 71.1686374, 24.1176202 ], [ 71.1685185, 24.1189085 ], [ 71.1679666, 24.1194309 ], [ 71.1678443, 24.1204619 ], [ 71.167562, 24.1203367 ], [ 71.1670014, 24.1203447 ], [ 71.1661692, 24.120871 ], [ 71.165889, 24.120875 ], [ 71.1656043, 24.1206218 ], [ 71.1650417, 24.1205015 ], [ 71.1654486, 24.1197238 ], [ 71.1654355, 24.1189521 ], [ 71.1652917, 24.118697 ], [ 71.1636079, 24.1185917 ], [ 71.1625042, 24.1196365 ], [ 71.1619479, 24.1199017 ], [ 71.1599818, 24.1196722 ], [ 71.1596971, 24.119419 ], [ 71.1591345, 24.1192988 ], [ 71.1590069, 24.1200723 ], [ 71.1591496, 24.1201986 ], [ 71.1602728, 24.1203118 ], [ 71.1604212, 24.1208244 ], [ 71.1609903, 24.1213309 ], [ 71.160999, 24.1218453 ], [ 71.1605877, 24.1223657 ], [ 71.1603074, 24.1223696 ], [ 71.1602944, 24.1215979 ], [ 71.1597317, 24.1214768 ], [ 71.1585934, 24.1204637 ], [ 71.1569011, 24.119845 ], [ 71.156927, 24.1213883 ], [ 71.1558058, 24.121404 ], [ 71.1558145, 24.1219187 ], [ 71.1549757, 24.1220585 ], [ 71.1544218, 24.1224528 ], [ 71.1543027, 24.123741 ], [ 71.1540266, 24.1240022 ], [ 71.1539043, 24.125033 ], [ 71.1533414, 24.1249119 ], [ 71.15249, 24.1242812 ], [ 71.1520475, 24.1230009 ], [ 71.152026, 24.1217147 ], [ 71.151882, 24.1214594 ], [ 71.1496399, 24.121491 ], [ 71.1496614, 24.1227773 ], [ 71.1505021, 24.1227654 ], [ 71.1505108, 24.1232798 ], [ 71.1502284, 24.1231547 ], [ 71.1491093, 24.1232995 ], [ 71.1492233, 24.1217542 ], [ 71.1490749, 24.1212417 ], [ 71.1496355, 24.1212337 ], [ 71.149627, 24.1207193 ], [ 71.1487862, 24.1207312 ], [ 71.1487947, 24.1212456 ], [ 71.147387, 24.120879 ], [ 71.1468264, 24.1208869 ], [ 71.1462702, 24.1211521 ], [ 71.1445907, 24.1213048 ], [ 71.1448538, 24.1202719 ], [ 71.1437262, 24.1199013 ], [ 71.1431592, 24.1195239 ], [ 71.1431507, 24.1190094 ], [ 71.141191, 24.1191649 ], [ 71.1409128, 24.119298 ], [ 71.1412103, 24.1203229 ], [ 71.1406476, 24.1202018 ], [ 71.1403717, 24.120463 ], [ 71.139535, 24.1207319 ], [ 71.138414, 24.1207476 ], [ 71.1381379, 24.1210088 ], [ 71.1372972, 24.1210207 ], [ 71.1359001, 24.1212974 ], [ 71.1356155, 24.1210442 ], [ 71.1336578, 24.1213288 ], [ 71.1333798, 24.1214619 ], [ 71.1333711, 24.1209474 ], [ 71.1328107, 24.1209551 ], [ 71.1331122, 24.1222375 ], [ 71.1345157, 24.122346 ], [ 71.1346577, 24.1224732 ], [ 71.1345306, 24.1232468 ], [ 71.1373379, 24.1234649 ], [ 71.1372014, 24.123724 ], [ 71.1373549, 24.1244938 ], [ 71.1362316, 24.1243804 ], [ 71.1356626, 24.1238737 ], [ 71.1350999, 24.1237535 ], [ 71.1351084, 24.1242679 ], [ 71.1342717, 24.1245369 ], [ 71.1340171, 24.1260842 ], [ 71.1328918, 24.1258427 ], [ 71.1329045, 24.1266144 ], [ 71.1315053, 24.1267622 ], [ 71.1312292, 24.1270234 ], [ 71.1292651, 24.1269224 ], [ 71.1292608, 24.1266652 ], [ 71.1298213, 24.1266575 ], [ 71.1298087, 24.1258858 ], [ 71.1275705, 24.1261742 ], [ 71.128144, 24.1269381 ], [ 71.1275834, 24.1269459 ], [ 71.1275919, 24.1274603 ], [ 71.1264707, 24.127476 ], [ 71.1263598, 24.1292787 ], [ 71.1262245, 24.1295378 ], [ 71.1256595, 24.1292883 ], [ 71.1253581, 24.1280062 ], [ 71.1259166, 24.1278693 ], [ 71.126054, 24.1277391 ], [ 71.1259058, 24.1272265 ], [ 71.1264643, 24.1270897 ], [ 71.12701, 24.1261819 ], [ 71.1264494, 24.1261899 ], [ 71.1267085, 24.1248998 ], [ 71.1272691, 24.124892 ], [ 71.1269759, 24.1241241 ], [ 71.1252901, 24.1238903 ], [ 71.126116, 24.1229778 ], [ 71.1272307, 24.1225768 ], [ 71.127218, 24.1218051 ], [ 71.1249778, 24.1219644 ], [ 71.1235681, 24.1214694 ], [ 71.1227272, 24.1214811 ], [ 71.1224511, 24.1217423 ], [ 71.1213279, 24.1216297 ], [ 71.1214549, 24.1208561 ], [ 71.1212982, 24.1198291 ], [ 71.1210179, 24.1198329 ], [ 71.1210264, 24.1203475 ], [ 71.1204658, 24.1203553 ], [ 71.1203381, 24.1211288 ], [ 71.1204828, 24.1213842 ], [ 71.1179625, 24.1215473 ], [ 71.1171279, 24.1219453 ], [ 71.1172719, 24.1222007 ], [ 71.1172804, 24.1227151 ], [ 71.1168646, 24.1229782 ], [ 71.1168731, 24.1234927 ], [ 71.1171534, 24.1234887 ], [ 71.1172417, 24.1230606 ], [ 71.1174252, 24.1229705 ], [ 71.1174464, 24.1242566 ], [ 71.1180049, 24.1241198 ], [ 71.1181466, 24.124247 ], [ 71.1182957, 24.1247593 ], [ 71.1171787, 24.1250323 ], [ 71.1171872, 24.1255467 ], [ 71.1177478, 24.125539 ], [ 71.1177522, 24.1257962 ], [ 71.1171916, 24.1258039 ], [ 71.1172084, 24.1268329 ], [ 71.1177711, 24.1269533 ], [ 71.117913, 24.1270804 ], [ 71.1183551, 24.1283607 ], [ 71.1177924, 24.1282394 ], [ 71.1175142, 24.1283725 ], [ 71.1175184, 24.1286297 ], [ 71.1180789, 24.1286219 ], [ 71.1182271, 24.1291345 ], [ 71.1187962, 24.1296412 ], [ 71.1190935, 24.1306662 ], [ 71.1198094, 24.1315563 ], [ 71.1203723, 24.1316777 ], [ 71.1201047, 24.1324532 ], [ 71.1206652, 24.1324454 ], [ 71.1208134, 24.132958 ], [ 71.121098, 24.1332114 ], [ 71.1215337, 24.1341054 ], [ 71.1240565, 24.1340702 ], [ 71.1251863, 24.1345692 ], [ 71.1254666, 24.1345652 ], [ 71.1258758, 24.1339168 ], [ 71.1259952, 24.1326285 ], [ 71.126704, 24.1331334 ], [ 71.1275703, 24.134665 ], [ 71.1287087, 24.1356782 ], [ 71.1288578, 24.1361908 ], [ 71.1294184, 24.1361831 ], [ 71.1296817, 24.1351502 ], [ 71.1299619, 24.1351462 ], [ 71.1301145, 24.135916 ], [ 71.1305418, 24.1362955 ], [ 71.1313914, 24.1367983 ], [ 71.1325189, 24.1371689 ], [ 71.1326501, 24.1366525 ], [ 71.1327886, 24.1365214 ], [ 71.1330689, 24.1365176 ], [ 71.1340687, 24.1376618 ], [ 71.1345238, 24.1397138 ], [ 71.1333983, 24.1394722 ], [ 71.133249, 24.1389599 ], [ 71.1328206, 24.1384513 ], [ 71.1314169, 24.1383416 ], [ 71.1311322, 24.1380884 ], [ 71.1305717, 24.1380961 ], [ 71.1302955, 24.1383573 ], [ 71.1300152, 24.1383613 ], [ 71.1286053, 24.1378663 ], [ 71.127484, 24.137882 ], [ 71.127208, 24.1381432 ], [ 71.126367, 24.1381549 ], [ 71.1260888, 24.1382878 ], [ 71.1262583, 24.1400865 ], [ 71.1261228, 24.1403458 ], [ 71.1249867, 24.1394605 ], [ 71.1244218, 24.139211 ], [ 71.1241415, 24.139215 ], [ 71.1235851, 24.13948 ], [ 71.1230245, 24.1394879 ], [ 71.1227399, 24.1392345 ], [ 71.1221814, 24.1393715 ], [ 71.1229156, 24.1414195 ], [ 71.1234849, 24.1419262 ], [ 71.1235231, 24.1442415 ], [ 71.1224316, 24.1460576 ], [ 71.1224358, 24.146315 ], [ 71.123298, 24.1475894 ], [ 71.123604, 24.1491288 ], [ 71.1243201, 24.150019 ], [ 71.1254458, 24.1502605 ], [ 71.1260192, 24.1510245 ], [ 71.1265821, 24.1511458 ], [ 71.1265906, 24.1516603 ], [ 71.1299396, 24.1507126 ], [ 71.1307722, 24.1501863 ], [ 71.1310525, 24.1501825 ], [ 71.1313371, 24.1504357 ], [ 71.1327431, 24.1506733 ], [ 71.1328807, 24.1505433 ], [ 71.1336875, 24.1484735 ], [ 71.1339635, 24.1482125 ], [ 71.1343632, 24.1469203 ], [ 71.1338003, 24.1467992 ], [ 71.1326684, 24.1461723 ], [ 71.1326512, 24.1451432 ], [ 71.1351613, 24.1443363 ], [ 71.1355599, 24.1430441 ], [ 71.1356707, 24.1412417 ], [ 71.1370787, 24.1416074 ], [ 71.1390389, 24.1414516 ], [ 71.1390302, 24.1409372 ], [ 71.1404318, 24.1409175 ], [ 71.1405843, 24.1416873 ], [ 71.1415724, 24.1420589 ], [ 71.1449404, 24.1422689 ], [ 71.145367, 24.1426493 ], [ 71.1453755, 24.1431638 ], [ 71.1449684, 24.1439413 ], [ 71.1444099, 24.1440774 ], [ 71.1435819, 24.144861 ], [ 71.142469, 24.1453911 ], [ 71.140511, 24.145676 ], [ 71.140235, 24.1459372 ], [ 71.1396765, 24.146074 ], [ 71.1396851, 24.1465885 ], [ 71.13716, 24.1464949 ], [ 71.1368818, 24.1466278 ], [ 71.1363467, 24.1481791 ], [ 71.1357862, 24.148187 ], [ 71.13596, 24.150243 ], [ 71.1370942, 24.150999 ], [ 71.1377062, 24.1540778 ], [ 71.141239, 24.1557003 ], [ 71.1457546, 24.1574378 ], [ 71.1466128, 24.158455 ], [ 71.1483078, 24.1592029 ], [ 71.1490234, 24.1600938 ], [ 71.1490319, 24.1606083 ], [ 71.1486291, 24.1616433 ], [ 71.1469362, 24.1610233 ], [ 71.1460973, 24.1611643 ], [ 71.1456935, 24.1621991 ], [ 71.1451413, 24.1627215 ], [ 71.144747, 24.1642707 ], [ 71.1430734, 24.1648088 ], [ 71.1430821, 24.1653233 ], [ 71.1416824, 24.1654713 ], [ 71.1411301, 24.1659935 ], [ 71.1402934, 24.1662626 ], [ 71.1397412, 24.166785 ], [ 71.1394609, 24.1667888 ], [ 71.1388937, 24.1664113 ], [ 71.1386004, 24.1656436 ], [ 71.1374832, 24.1659165 ], [ 71.1373341, 24.165404 ], [ 71.1363362, 24.1643889 ], [ 71.1340995, 24.1648056 ], [ 71.1329867, 24.1653357 ], [ 71.1310306, 24.1657495 ], [ 71.1310391, 24.1662641 ], [ 71.1324452, 24.1665017 ], [ 71.1325977, 24.1672715 ], [ 71.1333097, 24.1679043 ], [ 71.1350048, 24.1686523 ], [ 71.1355741, 24.169159 ], [ 71.136281, 24.1695355 ], [ 71.1362938, 24.1703072 ], [ 71.1371436, 24.1708099 ], [ 71.1373014, 24.1718368 ], [ 71.1367365, 24.1715875 ], [ 71.1367535, 24.1726164 ], [ 71.1387268, 24.1732316 ], [ 71.1388688, 24.1733586 ], [ 71.138886, 24.1743875 ], [ 71.1394681, 24.1756659 ], [ 71.1397529, 24.1759192 ], [ 71.139902, 24.1764318 ], [ 71.1387784, 24.1763184 ], [ 71.1384938, 24.1760651 ], [ 71.1379328, 24.1760728 ], [ 71.1376569, 24.176334 ], [ 71.1370982, 24.1764711 ], [ 71.1372636, 24.1780125 ], [ 71.138122, 24.1790296 ], [ 71.1381349, 24.1798012 ], [ 71.1379994, 24.1800606 ], [ 71.1388406, 24.1800486 ], [ 71.1384324, 24.1808264 ], [ 71.1384409, 24.1813408 ], [ 71.1387257, 24.1815941 ], [ 71.1388748, 24.1821065 ], [ 71.138314, 24.1821144 ], [ 71.1386074, 24.1828821 ], [ 71.13749, 24.1831552 ], [ 71.1374944, 24.1834125 ], [ 71.138892, 24.1831356 ], [ 71.1389136, 24.1844217 ], [ 71.1383526, 24.1844295 ], [ 71.1383613, 24.1849439 ], [ 71.1392025, 24.1849322 ], [ 71.1389349, 24.1857079 ], [ 71.1380895, 24.1854624 ], [ 71.1378219, 24.186238 ], [ 71.1372589, 24.1861169 ], [ 71.1369742, 24.1858636 ], [ 71.1361309, 24.1857472 ], [ 71.1363261, 24.1864278 ], [ 71.1361438, 24.1865189 ], [ 71.1360115, 24.1870352 ], [ 71.1357353, 24.1872964 ], [ 71.1357397, 24.1875536 ], [ 71.136631, 24.1878861 ], [ 71.1365896, 24.1880564 ], [ 71.136178, 24.1885767 ], [ 71.1358933, 24.1883234 ], [ 71.1356129, 24.1883274 ], [ 71.1356172, 24.1885846 ], [ 71.1360415, 24.188836 ], [ 71.1360502, 24.1893505 ], [ 71.1356429, 24.190128 ], [ 71.1364819, 24.1899872 ], [ 71.136758, 24.189726 ], [ 71.1376015, 24.1898432 ], [ 71.1373146, 24.1894608 ], [ 71.1377784, 24.1894138 ], [ 71.1378776, 24.189582 ], [ 71.1381581, 24.1895782 ], [ 71.1381538, 24.189321 ], [ 71.1379672, 24.189235 ], [ 71.1381473, 24.1889347 ], [ 71.1392668, 24.1887906 ], [ 71.1391218, 24.1885355 ], [ 71.1392498, 24.1877617 ], [ 71.1414887, 24.1874729 ], [ 71.1413352, 24.1867033 ], [ 71.1416113, 24.1864421 ], [ 71.1420152, 24.1854074 ], [ 71.1414545, 24.1854151 ], [ 71.1414501, 24.1851579 ], [ 71.1420088, 24.185021 ], [ 71.1428413, 24.1844947 ], [ 71.1431154, 24.1841053 ], [ 71.1425544, 24.1841133 ], [ 71.1425416, 24.1833416 ], [ 71.1432836, 24.1831613 ], [ 71.1433915, 24.1838441 ], [ 71.1439523, 24.1838362 ], [ 71.1439695, 24.1848651 ], [ 71.1428542, 24.1852664 ], [ 71.1422914, 24.1851462 ], [ 71.1424395, 24.1856585 ], [ 71.1434324, 24.1862873 ], [ 71.1439952, 24.1864087 ], [ 71.1440039, 24.1869231 ], [ 71.1423258, 24.187204 ], [ 71.1429166, 24.1889967 ], [ 71.1412297, 24.1887631 ], [ 71.1412212, 24.1882486 ], [ 71.1392755, 24.1893051 ], [ 71.1392798, 24.1895623 ], [ 71.1409623, 24.1895387 ], [ 71.1409708, 24.1900532 ], [ 71.1393866, 24.1902442 ], [ 71.1392883, 24.1900768 ], [ 71.1390079, 24.1900808 ], [ 71.1390122, 24.190338 ], [ 71.1394367, 24.1905894 ], [ 71.1400147, 24.1916103 ], [ 71.1400275, 24.1923822 ], [ 71.1404658, 24.1934051 ], [ 71.139905, 24.193413 ], [ 71.1398964, 24.1928986 ], [ 71.1393356, 24.1929065 ], [ 71.139484, 24.1934189 ], [ 71.1401961, 24.1940517 ], [ 71.1407591, 24.194173 ], [ 71.1411965, 24.1951959 ], [ 71.1423312, 24.1959519 ], [ 71.1424847, 24.1967217 ], [ 71.1430477, 24.1968419 ], [ 71.1431897, 24.1969689 ], [ 71.1432025, 24.1977407 ], [ 71.1426546, 24.1985202 ], [ 71.1416907, 24.1995629 ], [ 71.1430929, 24.1995432 ], [ 71.1432413, 24.2000558 ], [ 71.1433842, 24.2001819 ], [ 71.1439451, 24.2001741 ], [ 71.1444974, 24.1996517 ], [ 71.1450561, 24.1995156 ], [ 71.1450474, 24.1990012 ], [ 71.1470105, 24.1989734 ], [ 71.1470148, 24.1992306 ], [ 71.1464539, 24.1992386 ], [ 71.1464626, 24.199753 ], [ 71.1473061, 24.1998695 ], [ 71.147593, 24.2002518 ], [ 71.1456386, 24.2007939 ], [ 71.1456514, 24.2015655 ], [ 71.1462101, 24.2014285 ], [ 71.146352, 24.2015557 ], [ 71.1462209, 24.2020721 ], [ 71.1450991, 24.2020879 ], [ 71.1451035, 24.2023452 ], [ 71.14651, 24.2025827 ], [ 71.1465142, 24.20284 ], [ 71.1442749, 24.2031288 ], [ 71.1445618, 24.2035102 ], [ 71.1454053, 24.2036273 ], [ 71.1451335, 24.2041458 ], [ 71.1440096, 24.2040326 ], [ 71.1434552, 24.2044268 ], [ 71.1434594, 24.204684 ], [ 71.1440226, 24.2048042 ], [ 71.1443095, 24.2051866 ], [ 71.1434702, 24.2053266 ], [ 71.143194, 24.2055878 ], [ 71.1423549, 24.2057286 ], [ 71.1425032, 24.2062412 ], [ 71.1427879, 24.2064945 ], [ 71.1429718, 24.2090649 ], [ 71.1421347, 24.2093338 ], [ 71.1422872, 24.2101036 ], [ 71.1424301, 24.2102299 ], [ 71.1432715, 24.210218 ], [ 71.1438238, 24.2096956 ], [ 71.1449457, 24.2096799 ], [ 71.145511, 24.2099292 ], [ 71.1457915, 24.2099252 ], [ 71.145929, 24.209795 ], [ 71.146044, 24.2082497 ], [ 71.1463242, 24.2082457 ], [ 71.1463373, 24.2090174 ], [ 71.1474548, 24.2087443 ], [ 71.1473097, 24.2084892 ], [ 71.1473012, 24.2079747 ], [ 71.1475773, 24.2077135 ], [ 71.147573, 24.2074563 ], [ 71.1472881, 24.207203 ], [ 71.1471398, 24.2066905 ], [ 71.1474225, 24.2068146 ], [ 71.1491031, 24.2066627 ], [ 71.149116, 24.2074344 ], [ 71.1510727, 24.2070205 ], [ 71.1527446, 24.206354 ], [ 71.1526597, 24.2070386 ], [ 71.1513575, 24.2072737 ], [ 71.1510814, 24.2075349 ], [ 71.1496813, 24.2076838 ], [ 71.1498296, 24.2081962 ], [ 71.1499725, 24.2083225 ], [ 71.1505335, 24.2083145 ], [ 71.1508096, 24.2080533 ], [ 71.1516508, 24.2080414 ], [ 71.1522161, 24.2082907 ], [ 71.1530704, 24.2090505 ], [ 71.1536357, 24.2092998 ], [ 71.1547707, 24.2100556 ], [ 71.1556119, 24.2100437 ], [ 71.1558903, 24.2099116 ], [ 71.155899, 24.210426 ], [ 71.1542205, 24.2107071 ], [ 71.1543645, 24.2109624 ], [ 71.1541014, 24.2119953 ], [ 71.1536898, 24.2125156 ], [ 71.1545312, 24.2125037 ], [ 71.1546839, 24.2132735 ], [ 71.1551182, 24.2140392 ], [ 71.1542811, 24.2143083 ], [ 71.1542853, 24.2145655 ], [ 71.1554029, 24.2142924 ], [ 71.1554116, 24.2148069 ], [ 71.1534505, 24.2149628 ], [ 71.152896, 24.2153571 ], [ 71.1526285, 24.2161327 ], [ 71.1534656, 24.2158636 ], [ 71.153614, 24.2163761 ], [ 71.1537569, 24.2165022 ], [ 71.1543201, 24.2166234 ], [ 71.1544684, 24.2171359 ], [ 71.1565877, 24.2180059 ], [ 71.1567296, 24.2181331 ], [ 71.1568833, 24.2189027 ], [ 71.155757, 24.2186613 ], [ 71.1560332, 24.2184001 ], [ 71.1560288, 24.2181429 ], [ 71.1557483, 24.2181469 ], [ 71.1556548, 24.218317 ], [ 71.1549069, 24.2181588 ], [ 71.1546482, 24.2194489 ], [ 71.1532435, 24.2193397 ], [ 71.152689, 24.2197339 ], [ 71.1525743, 24.2212794 ], [ 71.1524388, 24.2215385 ], [ 71.1521562, 24.2214134 ], [ 71.1510341, 24.2214292 ], [ 71.1493577, 24.2218394 ], [ 71.149401, 24.2244117 ], [ 71.146596, 24.2244514 ], [ 71.1463284, 24.225227 ], [ 71.1457674, 24.2252348 ], [ 71.1457544, 24.2244631 ], [ 71.1451978, 24.2247282 ], [ 71.1452065, 24.2252427 ], [ 71.1446454, 24.2252506 ], [ 71.144654, 24.2257651 ], [ 71.145215, 24.2257572 ], [ 71.1452193, 24.2260144 ], [ 71.1446605, 24.2261505 ], [ 71.1441059, 24.2265447 ], [ 71.1438039, 24.2252625 ], [ 71.143243, 24.2252705 ], [ 71.1433611, 24.2239823 ], [ 71.1432171, 24.2237271 ], [ 71.1427544, 24.2239023 ], [ 71.1426518, 24.2234776 ], [ 71.1423713, 24.2234816 ], [ 71.1422819, 24.2239089 ], [ 71.1420993, 24.224 ], [ 71.1420145, 24.2246846 ], [ 71.1418319, 24.2247757 ], [ 71.1418147, 24.2237468 ], [ 71.1412579, 24.2240119 ], [ 71.1409903, 24.2247876 ], [ 71.1398727, 24.2250605 ], [ 71.139864, 24.224546 ], [ 71.1390268, 24.2248152 ], [ 71.1386229, 24.22585 ], [ 71.1385131, 24.2276526 ], [ 71.1376673, 24.2274071 ], [ 71.1376801, 24.2281788 ], [ 71.1371213, 24.2283149 ], [ 71.1368451, 24.2285761 ], [ 71.1362842, 24.228584 ], [ 71.1357145, 24.2280773 ], [ 71.1351513, 24.2279571 ], [ 71.13516, 24.2284716 ], [ 71.13404, 24.2286154 ], [ 71.1337574, 24.2284912 ], [ 71.1337531, 24.228234 ], [ 71.134314, 24.2282261 ], [ 71.1340207, 24.2274583 ], [ 71.1326204, 24.2276061 ], [ 71.1320529, 24.2272287 ], [ 71.1324647, 24.2267082 ], [ 71.1324603, 24.226451 ], [ 71.1320315, 24.2259424 ], [ 71.1300723, 24.2262272 ], [ 71.130068, 24.22597 ], [ 71.1314662, 24.2256931 ], [ 71.1311772, 24.2251826 ], [ 71.1300595, 24.2254555 ], [ 71.129188, 24.2236666 ], [ 71.128627, 24.2236746 ], [ 71.1283337, 24.2229067 ], [ 71.1266486, 24.2228012 ], [ 71.1249784, 24.2235963 ], [ 71.1244174, 24.2236043 ], [ 71.1241347, 24.2234799 ], [ 71.1239812, 24.2227103 ], [ 71.1236964, 24.2224568 ], [ 71.123548, 24.2219443 ], [ 71.1227045, 24.2218271 ], [ 71.1221349, 24.2213204 ], [ 71.1210109, 24.2212079 ], [ 71.1210024, 24.2206935 ], [ 71.1207219, 24.2206973 ], [ 71.1207304, 24.2212117 ], [ 71.1196063, 24.2210983 ], [ 71.1187541, 24.2204674 ], [ 71.1187456, 24.219953 ], [ 71.1173452, 24.2201006 ], [ 71.1170627, 24.2199764 ], [ 71.1168034, 24.2212665 ], [ 71.1176407, 24.2209976 ], [ 71.1176577, 24.2220265 ], [ 71.1170946, 24.2219052 ], [ 71.1168098, 24.2216519 ], [ 71.1153946, 24.2208997 ], [ 71.1137095, 24.2207948 ], [ 71.1137223, 24.2215665 ], [ 71.1148421, 24.2214219 ], [ 71.1154159, 24.2221858 ], [ 71.1168204, 24.2222954 ], [ 71.1168332, 24.2230671 ], [ 71.1166467, 24.2229811 ], [ 71.1165443, 24.2225564 ], [ 71.115146, 24.2228333 ], [ 71.1151502, 24.2230906 ], [ 71.1164577, 24.2231599 ], [ 71.1162893, 24.2241038 ], [ 71.1154435, 24.2238583 ], [ 71.115435, 24.2233438 ], [ 71.113463, 24.2228566 ], [ 71.1131614, 24.2215744 ], [ 71.1120436, 24.2218471 ], [ 71.1117418, 24.2205648 ], [ 71.1109045, 24.2208337 ], [ 71.110913, 24.2213482 ], [ 71.111474, 24.2213404 ], [ 71.1114825, 24.2218549 ], [ 71.1109194, 24.2217337 ], [ 71.1100631, 24.2208454 ], [ 71.1089368, 24.2206037 ], [ 71.1087877, 24.2200911 ], [ 71.1085029, 24.2198379 ], [ 71.1084944, 24.2193234 ], [ 71.1086331, 24.2191924 ], [ 71.1091941, 24.2191845 ], [ 71.109608, 24.2187935 ], [ 71.1097403, 24.2182769 ], [ 71.1099257, 24.218362 ], [ 71.1098926, 24.2190467 ], [ 71.1096165, 24.2193079 ], [ 71.1094895, 24.2200815 ], [ 71.1097677, 24.2199484 ], [ 71.1111723, 24.2200582 ], [ 71.1110232, 24.2195457 ], [ 71.1112564, 24.2193727 ], [ 71.1120032, 24.219403 ], [ 71.1121451, 24.21953 ], [ 71.1124426, 24.2205551 ], [ 71.112868, 24.2208065 ], [ 71.1126976, 24.2190078 ], [ 71.1128363, 24.2188768 ], [ 71.113395, 24.2187409 ], [ 71.1129654, 24.2182321 ], [ 71.1129183, 24.2180632 ], [ 71.1131018, 24.217973 ], [ 71.1130977, 24.2177158 ], [ 71.112817, 24.2177197 ], [ 71.1127234, 24.2178898 ], [ 71.1119735, 24.2176022 ], [ 71.1116889, 24.2173489 ], [ 71.1108452, 24.2172325 ], [ 71.1108578, 24.2180042 ], [ 71.1105732, 24.2177507 ], [ 71.1102927, 24.2177547 ], [ 71.1102969, 24.2180119 ], [ 71.1104825, 24.218097 ], [ 71.1107769, 24.218946 ], [ 71.1103097, 24.2187836 ], [ 71.1103012, 24.2182692 ], [ 71.1101147, 24.2181834 ], [ 71.1101434, 24.2172421 ], [ 71.1104156, 24.2167237 ], [ 71.110518, 24.2144068 ], [ 71.1099614, 24.2146717 ], [ 71.1099529, 24.2141573 ], [ 71.1088437, 24.2149445 ], [ 71.1087114, 24.215461 ], [ 71.1082997, 24.2159811 ], [ 71.108019, 24.2159851 ], [ 71.1085505, 24.2141768 ], [ 71.1068718, 24.2144572 ], [ 71.1067395, 24.2149736 ], [ 71.1064632, 24.2152348 ], [ 71.106332, 24.2157511 ], [ 71.1057732, 24.215887 ], [ 71.1046681, 24.2169316 ], [ 71.1043876, 24.2169354 ], [ 71.1038225, 24.2166859 ], [ 71.103542, 24.2166899 ], [ 71.1032657, 24.2169509 ], [ 71.1024243, 24.2169626 ], [ 71.1021415, 24.2168382 ], [ 71.1016017, 24.2181321 ], [ 71.1010408, 24.2181399 ], [ 71.1010323, 24.2176254 ], [ 71.1001867, 24.2173799 ], [ 71.100339, 24.2181497 ], [ 71.1012016, 24.2194241 ], [ 71.101914, 24.2200571 ], [ 71.1044511, 24.220794 ], [ 71.1047357, 24.2210475 ], [ 71.105299, 24.2211686 ], [ 71.1057699, 24.2242497 ], [ 71.1066325, 24.2255243 ], [ 71.106641, 24.2260388 ], [ 71.1065055, 24.2262979 ], [ 71.1048246, 24.2264495 ], [ 71.1042593, 24.2262 ], [ 71.1022957, 24.226227 ], [ 71.1020174, 24.2263601 ], [ 71.1017495, 24.2271355 ], [ 71.1011907, 24.2272714 ], [ 71.1006359, 24.2276655 ], [ 71.1008053, 24.2294642 ], [ 71.1005458, 24.2307543 ], [ 71.1008391, 24.2315222 ], [ 71.1011238, 24.2317755 ], [ 71.1012772, 24.2325453 ], [ 71.1007163, 24.232553 ], [ 71.1007204, 24.2328103 ], [ 71.101562, 24.2327987 ], [ 71.1015747, 24.2335704 ], [ 71.101292, 24.2334453 ], [ 71.0982041, 24.2333597 ], [ 71.0983566, 24.2341295 ], [ 71.0986412, 24.2343827 ], [ 71.0986497, 24.2348972 ], [ 71.0985142, 24.2351565 ], [ 71.0982315, 24.2350312 ], [ 71.0976726, 24.235168 ], [ 71.0982464, 24.235932 ], [ 71.0959958, 24.2355767 ], [ 71.0954264, 24.2350699 ], [ 71.0945804, 24.2348242 ], [ 71.0928953, 24.2347192 ], [ 71.0929036, 24.2352336 ], [ 71.0923447, 24.2353695 ], [ 71.0920684, 24.2356307 ], [ 71.0901047, 24.2356577 ], [ 71.0895477, 24.2359227 ], [ 71.0887167, 24.2365778 ], [ 71.0890225, 24.2381174 ], [ 71.0895813, 24.2379805 ], [ 71.090425, 24.2380981 ], [ 71.0901361, 24.2375874 ], [ 71.0906993, 24.2377078 ], [ 71.0909841, 24.2379613 ], [ 71.0921103, 24.238203 ], [ 71.0925454, 24.2390981 ], [ 71.0932619, 24.2399883 ], [ 71.0946626, 24.2398409 ], [ 71.0946416, 24.2385547 ], [ 71.0949221, 24.2385508 ], [ 71.0950744, 24.2393206 ], [ 71.0955021, 24.2397003 ], [ 71.0963417, 24.2395604 ], [ 71.09635, 24.2400749 ], [ 71.0955084, 24.2400866 ], [ 71.0955169, 24.240601 ], [ 71.0950499, 24.240519 ], [ 71.0949474, 24.2400943 ], [ 71.0943863, 24.2401019 ], [ 71.0942969, 24.2405294 ], [ 71.0941141, 24.2406203 ], [ 71.0941268, 24.241392 ], [ 71.0935677, 24.2415279 ], [ 71.0910408, 24.2414345 ], [ 71.0910281, 24.2406628 ], [ 71.0896212, 24.2404247 ], [ 71.0898934, 24.2399065 ], [ 71.0890518, 24.239918 ], [ 71.0889236, 24.2406918 ], [ 71.0890686, 24.2409469 ], [ 71.0885074, 24.2409546 ], [ 71.0890939, 24.2424905 ], [ 71.0879737, 24.2426339 ], [ 71.0871259, 24.2422601 ], [ 71.0873937, 24.2414846 ], [ 71.0862757, 24.2417571 ], [ 71.0861476, 24.2425309 ], [ 71.0856377, 24.2429639 ], [ 71.0849922, 24.24323 ], [ 71.0850297, 24.2428034 ], [ 71.0851682, 24.2426725 ], [ 71.0857273, 24.2425366 ], [ 71.0858544, 24.241763 ], [ 71.0854258, 24.2412542 ], [ 71.0831773, 24.2410278 ], [ 71.0830699, 24.2430877 ], [ 71.0826581, 24.2436078 ], [ 71.0820969, 24.2436156 ], [ 71.0823901, 24.2443835 ], [ 71.0821073, 24.2442582 ], [ 71.0818206, 24.2438766 ], [ 71.08154, 24.2438804 ], [ 71.0815441, 24.2441378 ], [ 71.0817297, 24.2442226 ], [ 71.0817394, 24.2448184 ], [ 71.0798692, 24.2446751 ], [ 71.0802978, 24.2451839 ], [ 71.080612, 24.247238 ], [ 71.0807549, 24.2473642 ], [ 71.0818813, 24.2476061 ], [ 71.0820232, 24.2477333 ], [ 71.0821848, 24.2490176 ], [ 71.082748, 24.2491382 ], [ 71.0834594, 24.2497721 ], [ 71.0843222, 24.2510467 ], [ 71.0844755, 24.2518165 ], [ 71.0839123, 24.2516951 ], [ 71.0833406, 24.2510601 ], [ 71.0830601, 24.2510641 ], [ 71.0830642, 24.2513213 ], [ 71.0832498, 24.2514063 ], [ 71.0839395, 24.2533676 ], [ 71.0828089, 24.2528685 ], [ 71.0826598, 24.2523559 ], [ 71.0820901, 24.2518492 ], [ 71.081942, 24.2513366 ], [ 71.080533, 24.2509696 ], [ 71.0799633, 24.2504627 ], [ 71.0788348, 24.2500926 ], [ 71.0786857, 24.24958 ], [ 71.078257, 24.2490713 ], [ 71.0754388, 24.2483379 ], [ 71.0754723, 24.2503958 ], [ 71.0749091, 24.2502744 ], [ 71.0746305, 24.2504073 ], [ 71.0743542, 24.2506685 ], [ 71.0740569, 24.2496432 ], [ 71.0734999, 24.2499081 ], [ 71.0736481, 24.2504207 ], [ 71.0745024, 24.2511811 ], [ 71.0750843, 24.2524595 ], [ 71.0753691, 24.2527129 ], [ 71.0755182, 24.2532255 ], [ 71.0749571, 24.2532332 ], [ 71.0749612, 24.2534905 ], [ 71.0755224, 24.2534827 ], [ 71.0755265, 24.2537399 ], [ 71.0749654, 24.2537477 ], [ 71.075683, 24.2547671 ], [ 71.0763912, 24.2551429 ], [ 71.0772372, 24.2553886 ], [ 71.0800639, 24.2566365 ], [ 71.0813447, 24.2577772 ], [ 71.0816337, 24.2582878 ], [ 71.08231912221521, 24.258722107812499 ], [ 71.0826267, 24.258917 ], [ 71.0831964, 24.2594239 ], [ 71.0834768, 24.2594199 ], [ 71.0840338, 24.2591552 ], [ 71.0845951, 24.2591474 ], [ 71.0857237, 24.2595182 ], [ 71.0858803, 24.2605454 ], [ 71.0863122, 24.2611822 ], [ 71.087443, 24.2616813 ], [ 71.0881585, 24.2625725 ], [ 71.08821, 24.2629979 ], [ 71.0860484, 24.2622151 ], [ 71.0840548, 24.2604413 ], [ 71.0834895, 24.2601918 ], [ 71.0801162, 24.2598524 ], [ 71.0801287, 24.2606243 ], [ 71.0809663, 24.2603555 ], [ 71.0814035, 24.2613786 ], [ 71.0814245, 24.2626649 ], [ 71.0819939, 24.2631716 ], [ 71.0824322, 24.2641948 ], [ 71.0784891, 24.2633477 ], [ 71.0779197, 24.262841 ], [ 71.0767972, 24.2628563 ], [ 71.0756664, 24.2623572 ], [ 71.0737023, 24.262384 ], [ 71.073137, 24.2621344 ], [ 71.0711665, 24.2617756 ], [ 71.0710174, 24.2612631 ], [ 71.0707327, 24.2610098 ], [ 71.0705846, 24.2604971 ], [ 71.0694727, 24.2611552 ], [ 71.066384, 24.261069 ], [ 71.0663757, 24.2605543 ], [ 71.065247, 24.2601833 ], [ 71.0635615, 24.260078 ], [ 71.0639902, 24.2605868 ], [ 71.0641393, 24.2610994 ], [ 71.0647025, 24.26122 ], [ 71.0651291, 24.2616006 ], [ 71.0652824, 24.2623704 ], [ 71.0635885, 24.2617498 ], [ 71.063334297656255, 24.261580525875416 ], [ 71.063021, 24.2613719 ], [ 71.062728, 24.260604 ], [ 71.0618883, 24.2607435 ], [ 71.0610548, 24.2612695 ], [ 71.0602151, 24.2614099 ], [ 71.0607887, 24.2621741 ], [ 71.0588163, 24.2616862 ], [ 71.0582924, 24.2640091 ], [ 71.0599843, 24.2645006 ], [ 71.0599885, 24.2647579 ], [ 71.0585916, 24.2651623 ], [ 71.0574693, 24.2651775 ], [ 71.0571865, 24.2650531 ], [ 71.057199, 24.265825 ], [ 71.0563593, 24.2659645 ], [ 71.0555279, 24.2666193 ], [ 71.0556511, 24.2655885 ], [ 71.0560643, 24.2650684 ], [ 71.0552225, 24.2650797 ], [ 71.05521, 24.2643081 ], [ 71.0546488, 24.2643156 ], [ 71.0546239, 24.2627721 ], [ 71.0550486, 24.2630236 ], [ 71.0554803, 24.2636605 ], [ 71.0568811, 24.2635135 ], [ 71.0568687, 24.2627418 ], [ 71.0577084, 24.2626012 ], [ 71.0581227, 24.2622102 ], [ 71.0579662, 24.2611831 ], [ 71.0571246, 24.2611945 ], [ 71.0569713, 24.2604247 ], [ 71.0562578, 24.2596624 ], [ 71.055148, 24.2604492 ], [ 71.055412, 24.2594165 ], [ 71.0534396, 24.2589285 ], [ 71.0529114, 24.2609941 ], [ 71.0523502, 24.2610017 ], [ 71.0524735, 24.2599709 ], [ 71.0527458, 24.2594525 ], [ 71.0527377, 24.258938 ], [ 71.0523088, 24.2584292 ], [ 71.0514714, 24.2586978 ], [ 71.0514795, 24.2592124 ], [ 71.0500807, 24.2594886 ], [ 71.0500684, 24.2587167 ], [ 71.0492308, 24.2589854 ], [ 71.0495237, 24.2597533 ], [ 71.0486819, 24.2597647 ], [ 71.0488464, 24.2613062 ], [ 71.0487148, 24.2618227 ], [ 71.0479671, 24.2617443 ], [ 71.0479658, 24.261663 ], [ 71.0481495, 24.261573 ], [ 71.0481414, 24.2610584 ], [ 71.0478607, 24.2610622 ], [ 71.0477711, 24.2614895 ], [ 71.0467466, 24.2615919 ], [ 71.0467343, 24.2608201 ], [ 71.0461731, 24.2608276 ], [ 71.046577, 24.259793 ], [ 71.0464289, 24.2592805 ], [ 71.0444627, 24.2591778 ], [ 71.0438974, 24.258928 ], [ 71.042773, 24.258815 ], [ 71.0430454, 24.2582967 ], [ 71.0419189, 24.2580546 ], [ 71.04222, 24.259337 ], [ 71.0427832, 24.2594576 ], [ 71.0434946, 24.2600918 ], [ 71.0436559, 24.2613761 ], [ 71.0442193, 24.2614967 ], [ 71.0453395, 24.2613534 ], [ 71.0450671, 24.2618717 ], [ 71.0459068, 24.2617314 ], [ 71.0460488, 24.2618586 ], [ 71.0459212, 24.2626322 ], [ 71.0464825, 24.2626246 ], [ 71.0464867, 24.2628819 ], [ 71.0450856, 24.2630289 ], [ 71.0442357, 24.2625258 ], [ 71.0428265, 24.2621591 ], [ 71.0431234, 24.2631845 ], [ 71.0429371, 24.2630985 ], [ 71.0428388, 24.262931 ], [ 71.0425581, 24.2629346 ], [ 71.0425623, 24.263192 ], [ 71.0429868, 24.2634436 ], [ 71.0429951, 24.263958 ], [ 71.0428594, 24.2642171 ], [ 71.0417328, 24.263975 ], [ 71.0417369, 24.2642323 ], [ 71.0423002, 24.2643528 ], [ 71.0430197, 24.2655016 ], [ 71.0431688, 24.2660142 ], [ 71.0440106, 24.2660028 ], [ 71.0431894, 24.2673003 ], [ 71.0426281, 24.2673079 ], [ 71.0426116, 24.2662789 ], [ 71.041774, 24.2665475 ], [ 71.041481, 24.2657794 ], [ 71.0409218, 24.2659151 ], [ 71.040369, 24.2664371 ], [ 71.0392444, 24.2663241 ], [ 71.0395311, 24.2667057 ], [ 71.0406598, 24.2670771 ], [ 71.0406515, 24.2665624 ], [ 71.0409322, 24.2665587 ], [ 71.0413814, 24.2683538 ], [ 71.0415241, 24.26848 ], [ 71.0420875, 24.2686016 ], [ 71.0422907, 24.269797 ], [ 71.0415426, 24.2696382 ], [ 71.0414531, 24.2700656 ], [ 71.0412703, 24.2701565 ], [ 71.0412622, 24.269642 ], [ 71.0406988, 24.2695205 ], [ 71.0401314, 24.2691425 ], [ 71.0405436, 24.2686224 ], [ 71.0405355, 24.2681079 ], [ 71.0403914, 24.2678526 ], [ 71.0395455, 24.2676067 ], [ 71.0392813, 24.2686394 ], [ 71.0387201, 24.2686469 ], [ 71.0387078, 24.2678751 ], [ 71.0392731, 24.2681249 ], [ 71.0391242, 24.2676122 ], [ 71.0388394, 24.2673587 ], [ 71.0388229, 24.2663298 ], [ 71.0390994, 24.2660688 ], [ 71.0390913, 24.2655543 ], [ 71.0389473, 24.2652988 ], [ 71.0386627, 24.2650453 ], [ 71.0395024, 24.2649051 ], [ 71.0397789, 24.2646441 ], [ 71.0403381, 24.2645084 ], [ 71.0396073, 24.2627171 ], [ 71.0391786, 24.2622081 ], [ 71.034685, 24.2620111 ], [ 71.0346768, 24.2614965 ], [ 71.0341197, 24.2617613 ], [ 71.0345483, 24.2622703 ], [ 71.0345564, 24.2627847 ], [ 71.0344207, 24.2630438 ], [ 71.0355453, 24.2631569 ], [ 71.0359719, 24.2635377 ], [ 71.03598, 24.2640522 ], [ 71.0351546, 24.2650924 ], [ 71.0350229, 24.2656088 ], [ 71.0344618, 24.2656163 ], [ 71.0344699, 24.2661308 ], [ 71.0350271, 24.265866 ], [ 71.0350352, 24.2663804 ], [ 71.0339129, 24.2663956 ], [ 71.033921, 24.26691 ], [ 71.0336404, 24.2669138 ], [ 71.0339006, 24.2656239 ], [ 71.0333434, 24.2658885 ], [ 71.0332108, 24.266405 ], [ 71.0323894, 24.2677025 ], [ 71.0325508, 24.2689868 ], [ 71.0305967, 24.2696558 ], [ 71.030316, 24.2696594 ], [ 71.0294659, 24.2691563 ], [ 71.0286139, 24.2685248 ], [ 71.0288864, 24.2680066 ], [ 71.0283251, 24.268014 ], [ 71.0287252, 24.2667222 ], [ 71.0285568, 24.2649233 ], [ 71.0279934, 24.2648017 ], [ 71.0277088, 24.2645483 ], [ 71.0263058, 24.264567 ], [ 71.026021, 24.2643133 ], [ 71.0240467, 24.2636968 ], [ 71.0240386, 24.2631824 ], [ 71.0254395, 24.2630346 ], [ 71.0257139, 24.2626454 ], [ 71.0240324, 24.2627961 ], [ 71.0234773, 24.2631899 ], [ 71.023156, 24.260621 ], [ 71.0223142, 24.2606322 ], [ 71.0224459, 24.2601158 ], [ 71.0227224, 24.259855 ], [ 71.0225744, 24.2593423 ], [ 71.0214519, 24.2593572 ], [ 71.0216203, 24.2611561 ], [ 71.0212163, 24.2621907 ], [ 71.0217774, 24.2621833 ], [ 71.0216489, 24.2629569 ], [ 71.0217937, 24.2632122 ], [ 71.0212325, 24.2632198 ], [ 71.0212244, 24.2627051 ], [ 71.0203865, 24.2629737 ], [ 71.020407, 24.2642599 ], [ 71.0192845, 24.2642748 ], [ 71.0190486, 24.2671083 ], [ 71.0182047, 24.2669903 ], [ 71.0179261, 24.2671232 ], [ 71.0179343, 24.2676377 ], [ 71.0170904, 24.2675197 ], [ 71.016523, 24.2671419 ], [ 71.0165393, 24.2681708 ], [ 71.0171006, 24.2681635 ], [ 71.0171168, 24.2691924 ], [ 71.0165555, 24.2691998 ], [ 71.0162871, 24.2699754 ], [ 71.0160065, 24.269979 ], [ 71.0164107, 24.2689444 ], [ 71.0164026, 24.26843 ], [ 71.016118, 24.2681765 ], [ 71.0159537, 24.2666348 ], [ 71.0153926, 24.2666422 ], [ 71.015667, 24.2662521 ], [ 71.0162263, 24.2661166 ], [ 71.0162059, 24.2648303 ], [ 71.0156447, 24.2648378 ], [ 71.0156568, 24.2656095 ], [ 71.0142497, 24.2653708 ], [ 71.0144019, 24.2661408 ], [ 71.014266, 24.2663999 ], [ 71.0137048, 24.2664073 ], [ 71.0136886, 24.2653784 ], [ 71.0131274, 24.2653857 ], [ 71.0128347, 24.2646176 ], [ 71.013957, 24.2646029 ], [ 71.0139488, 24.2640882 ], [ 71.0145102, 24.2640809 ], [ 71.0144939, 24.2630518 ], [ 71.0156164, 24.263037 ], [ 71.0153155, 24.2617545 ], [ 71.014189, 24.261512 ], [ 71.0137513, 24.2604886 ], [ 71.0135954, 24.2594615 ], [ 71.0119076, 24.2592266 ], [ 71.0118179, 24.2596539 ], [ 71.0110781, 24.2600094 ], [ 71.0110862, 24.2605239 ], [ 71.0093985, 24.260289 ], [ 71.0093903, 24.2597745 ], [ 71.0110721, 24.2596231 ], [ 71.011619, 24.2587157 ], [ 71.0110579, 24.2587231 ], [ 71.0111896, 24.2582068 ], [ 71.0117426, 24.2576849 ], [ 71.0118632, 24.2563967 ], [ 71.0113019, 24.2564043 ], [ 71.0115765, 24.2560142 ], [ 71.0126927, 24.2556139 ], [ 71.0128407, 24.2561264 ], [ 71.0136946, 24.2568872 ], [ 71.0135629, 24.2574035 ], [ 71.0141261, 24.2575243 ], [ 71.01498, 24.2582848 ], [ 71.0155453, 24.2585347 ], [ 71.0172289, 24.2585124 ], [ 71.0179197, 24.2578603 ], [ 71.0179116, 24.2573459 ], [ 71.0171943, 24.2563262 ], [ 71.0166332, 24.2563336 ], [ 71.0164803, 24.2555636 ], [ 71.0161957, 24.2553101 ], [ 71.0161915, 24.2550529 ], [ 71.0163302, 24.2549219 ], [ 71.0168895, 24.2547864 ], [ 71.017005, 24.253241 ], [ 71.0175538, 24.2524617 ], [ 71.0179549, 24.2511699 ], [ 71.0168326, 24.2511848 ], [ 71.0166837, 24.2506721 ], [ 71.016399, 24.2504186 ], [ 71.0163869, 24.2496469 ], [ 71.0165257, 24.249516 ], [ 71.0176419, 24.2491157 ], [ 71.0176338, 24.2486012 ], [ 71.0170726, 24.2486086 ], [ 71.0170645, 24.2480941 ], [ 71.0173471, 24.2482185 ], [ 71.0193091, 24.2480643 ], [ 71.0192928, 24.2470353 ], [ 71.019856, 24.2471559 ], [ 71.0199938, 24.2470259 ], [ 71.0203988, 24.2459913 ], [ 71.0212405, 24.2459802 ], [ 71.0209721, 24.2467556 ], [ 71.0215313, 24.2466192 ], [ 71.0218078, 24.2463582 ], [ 71.0223669, 24.2462225 ], [ 71.02207, 24.2451973 ], [ 71.0226311, 24.2451898 ], [ 71.0227628, 24.2446734 ], [ 71.0230394, 24.2444124 ], [ 71.0231637, 24.2433816 ], [ 71.0226026, 24.243389 ], [ 71.0225863, 24.2423601 ], [ 71.0217447, 24.2423712 ], [ 71.0218804, 24.2421121 ], [ 71.0218683, 24.2413404 ], [ 71.0215755, 24.2405723 ], [ 71.0211471, 24.2400633 ], [ 71.021708, 24.240056 ], [ 71.0215633, 24.2398006 ], [ 71.0216878, 24.2387696 ], [ 71.0225294, 24.2387585 ], [ 71.022653, 24.2377277 ], [ 71.0223684, 24.2374742 ], [ 71.0222204, 24.2369615 ], [ 71.0216593, 24.236969 ], [ 71.0213382, 24.2344001 ], [ 71.0193743, 24.2344262 ], [ 71.0190817, 24.2336581 ], [ 71.018801, 24.2336619 ], [ 71.0188133, 24.2344338 ], [ 71.0176769, 24.2335477 ], [ 71.0171138, 24.233427 ], [ 71.0172454, 24.2329106 ], [ 71.0173841, 24.2327796 ], [ 71.0179432, 24.2326441 ], [ 71.017935, 24.2321295 ], [ 71.0184962, 24.2321221 ], [ 71.018488, 24.2316077 ], [ 71.0196082, 24.2314636 ], [ 71.0198908, 24.2315889 ], [ 71.0195899, 24.2303064 ], [ 71.0187585, 24.2309603 ], [ 71.0181953, 24.2308396 ], [ 71.0186075, 24.2303194 ], [ 71.0184597, 24.2298069 ], [ 71.0190206, 24.2297995 ], [ 71.018732, 24.2292886 ], [ 71.0176141, 24.2295608 ], [ 71.0175774, 24.2272455 ], [ 71.0158863, 24.2267534 ], [ 71.0157738, 24.2285559 ], [ 71.0156381, 24.228815 ], [ 71.015073, 24.2285651 ], [ 71.0147763, 24.22754 ], [ 71.0142193, 24.2278046 ], [ 71.014272, 24.231149 ], [ 71.0134223, 24.2306455 ], [ 71.0135459, 24.2296146 ], [ 71.0132612, 24.2293612 ], [ 71.0131093, 24.2285912 ], [ 71.0122718, 24.2288596 ], [ 71.0122637, 24.2283451 ], [ 71.0136644, 24.2281975 ], [ 71.0138022, 24.2280675 ], [ 71.0139186, 24.226522 ], [ 71.0147602, 24.2265109 ], [ 71.0144674, 24.2257428 ], [ 71.0153091, 24.2257316 ], [ 71.0144472, 24.2244567 ], [ 71.0138902, 24.2247213 ], [ 71.0138984, 24.2252357 ], [ 71.0133372, 24.2252433 ], [ 71.0130447, 24.2244752 ], [ 71.012201, 24.2243572 ], [ 71.011634, 24.2239792 ], [ 71.011485, 24.2234665 ], [ 71.0112006, 24.223213 ], [ 71.0111925, 24.2226986 ], [ 71.0109078, 24.2224449 ], [ 71.0110365, 24.2216714 ], [ 71.0090689, 24.22144 ], [ 71.0089201, 24.2209273 ], [ 71.008351, 24.2204202 ], [ 71.0080543, 24.2193949 ], [ 71.008183, 24.2186213 ], [ 71.0084635, 24.2186177 ], [ 71.0084714, 24.2191321 ], [ 71.0087521, 24.2191284 ], [ 71.0090123, 24.2178384 ], [ 71.0087339, 24.2179704 ], [ 71.0078902, 24.2178532 ], [ 71.007626, 24.2188859 ], [ 71.0070609, 24.2186362 ], [ 71.0071537, 24.2184652 ], [ 71.0073374, 24.2183752 ], [ 71.0074302, 24.2182042 ], [ 71.0076139, 24.2181142 ], [ 71.0076098, 24.217857 ], [ 71.0073293, 24.2178607 ], [ 71.0072356, 24.2180307 ], [ 71.0071469, 24.218032 ], [ 71.0071416, 24.2176935 ], [ 71.0073253, 24.2176033 ], [ 71.0073212, 24.2173461 ], [ 71.0070407, 24.2173499 ], [ 71.0069469, 24.21752 ], [ 71.0059267, 24.2178791 ], [ 71.0060195, 24.2177082 ], [ 71.0062032, 24.2176183 ], [ 71.0061993, 24.217361 ], [ 71.0059188, 24.2173646 ], [ 71.0056442, 24.2177538 ], [ 71.0048007, 24.2176366 ], [ 71.0048128, 24.2184085 ], [ 71.0042478, 24.2181586 ], [ 71.0042558, 24.2186731 ], [ 71.0036948, 24.2186804 ], [ 71.0033981, 24.2176551 ], [ 71.0025527, 24.217409 ], [ 71.0025406, 24.2166372 ], [ 71.0011341, 24.2163984 ], [ 71.0008254, 24.2146012 ], [ 70.9985873, 24.2150161 ], [ 70.9963594, 24.2160747 ], [ 70.9955179, 24.2160857 ], [ 70.9949649, 24.2166075 ], [ 70.9941254, 24.2167477 ], [ 70.9941174, 24.2162331 ], [ 70.9935605, 24.2164977 ], [ 70.9935684, 24.2170123 ], [ 70.9930054, 24.2168904 ], [ 70.9921658, 24.2170307 ], [ 70.9921579, 24.216516 ], [ 70.9915967, 24.2165234 ], [ 70.9918693, 24.2160053 ], [ 70.9910279, 24.2160163 ], [ 70.9910358, 24.2165307 ], [ 70.9896293, 24.2162919 ], [ 70.989224, 24.2173264 ], [ 70.9891042, 24.2186145 ], [ 70.9896672, 24.2187352 ], [ 70.989809, 24.2188626 ], [ 70.9902463, 24.2198861 ], [ 70.9885673, 24.2201654 ], [ 70.9885752, 24.2206799 ], [ 70.9894166, 24.2206689 ], [ 70.9890074, 24.2214461 ], [ 70.9890154, 24.2219607 ], [ 70.9894448, 24.2224697 ], [ 70.9888837, 24.2224771 ], [ 70.9890314, 24.2229896 ], [ 70.9887549, 24.2232506 ], [ 70.9887589, 24.2235079 ], [ 70.989332, 24.2242724 ], [ 70.9897612, 24.2247814 ], [ 70.9886412, 24.2249242 ], [ 70.9877975, 24.2248071 ], [ 70.9876648, 24.2253234 ], [ 70.9873883, 24.2255842 ], [ 70.9873923, 24.2258415 ], [ 70.9876767, 24.2260951 ], [ 70.9878254, 24.2266078 ], [ 70.9850301, 24.2272871 ], [ 70.9847536, 24.2275479 ], [ 70.9841946, 24.2276844 ], [ 70.9841866, 24.2271699 ], [ 70.9836276, 24.2273054 ], [ 70.9830725, 24.2276989 ], [ 70.9833371, 24.2266662 ], [ 70.9824973, 24.2268055 ], [ 70.9811067, 24.2275956 ], [ 70.9805457, 24.2276027 ], [ 70.979716, 24.2283856 ], [ 70.9774777, 24.228801 ], [ 70.9774856, 24.2293157 ], [ 70.9769245, 24.2293228 ], [ 70.9766281, 24.2282975 ], [ 70.9755119, 24.2286974 ], [ 70.9752354, 24.2289584 ], [ 70.9738387, 24.2293629 ], [ 70.9738466, 24.2298774 ], [ 70.9732855, 24.2298847 ], [ 70.9731526, 24.2304011 ], [ 70.9724637, 24.2311818 ], [ 70.9721832, 24.2311856 ], [ 70.9722721, 24.2307573 ], [ 70.9724558, 24.2306674 ], [ 70.9724518, 24.2304102 ], [ 70.9721713, 24.2304137 ], [ 70.9718967, 24.2308029 ], [ 70.9716181, 24.2309356 ], [ 70.9717618, 24.2311911 ], [ 70.9717737, 24.2319628 ], [ 70.971638, 24.2322219 ], [ 70.9702392, 24.2324973 ], [ 70.9702312, 24.2319828 ], [ 70.968552, 24.2322618 ], [ 70.9684191, 24.2327781 ], [ 70.9681424, 24.2330391 ], [ 70.9682951, 24.2338089 ], [ 70.9668944, 24.2339554 ], [ 70.9666159, 24.2340881 ], [ 70.9667595, 24.2343434 ], [ 70.9667714, 24.2351153 ], [ 70.9666355, 24.2353742 ], [ 70.9655153, 24.2355169 ], [ 70.9649621, 24.2360388 ], [ 70.9641264, 24.236436 ], [ 70.9642742, 24.2369488 ], [ 70.965549, 24.2377042 ], [ 70.965541, 24.2371896 ], [ 70.9666652, 24.2373034 ], [ 70.9672244, 24.2371678 ], [ 70.9670993, 24.2381988 ], [ 70.9672441, 24.2384542 ], [ 70.966683, 24.2384614 ], [ 70.966675, 24.2379469 ], [ 70.9658394, 24.2383432 ], [ 70.9649958, 24.2382259 ], [ 70.964606, 24.2402894 ], [ 70.9641934, 24.2408095 ], [ 70.9636344, 24.2409448 ], [ 70.9627907, 24.2408275 ], [ 70.9630555, 24.2397949 ], [ 70.9622139, 24.2398057 ], [ 70.962081, 24.2403221 ], [ 70.9616684, 24.240842 ], [ 70.9613879, 24.2408456 ], [ 70.96138, 24.2403311 ], [ 70.9597005, 24.2406101 ], [ 70.9599929, 24.2413782 ], [ 70.9588746, 24.24165 ], [ 70.9588825, 24.2421644 ], [ 70.9586, 24.2420389 ], [ 70.9580389, 24.2420461 ], [ 70.956642, 24.2424506 ], [ 70.956634, 24.2419361 ], [ 70.9563535, 24.2419397 ], [ 70.956252, 24.2445141 ], [ 70.9566892, 24.2455377 ], [ 70.9555667, 24.2455521 ], [ 70.9553019, 24.2465848 ], [ 70.9538952, 24.2463455 ], [ 70.9541836, 24.2468566 ], [ 70.9533458, 24.2471246 ], [ 70.9534934, 24.2476373 ], [ 70.9533575, 24.2478964 ], [ 70.9527984, 24.2480318 ], [ 70.9508304, 24.2477997 ], [ 70.9499788, 24.2471678 ], [ 70.949975, 24.2469104 ], [ 70.9505361, 24.2469032 ], [ 70.950232, 24.2453633 ], [ 70.9496747, 24.2456279 ], [ 70.9492691, 24.2466623 ], [ 70.9492808, 24.2474339 ], [ 70.9491449, 24.2476931 ], [ 70.9485837, 24.2477002 ], [ 70.9490237, 24.2489813 ], [ 70.9490277, 24.2492385 ], [ 70.9484743, 24.2497602 ], [ 70.9483464, 24.2505337 ], [ 70.9480638, 24.2504082 ], [ 70.9475025, 24.2504154 ], [ 70.9469493, 24.2509373 ], [ 70.9455463, 24.2509552 ], [ 70.94359, 24.2514948 ], [ 70.9424773, 24.2521527 ], [ 70.9423445, 24.2526691 ], [ 70.9420678, 24.2529299 ], [ 70.9420716, 24.2531871 ], [ 70.942497, 24.253439 ], [ 70.9424891, 24.2529246 ], [ 70.9430502, 24.2529174 ], [ 70.9430581, 24.2534319 ], [ 70.9436193, 24.2534247 ], [ 70.9436233, 24.2536819 ], [ 70.9416552, 24.2534498 ], [ 70.9416707, 24.2544787 ], [ 70.940827, 24.2543604 ], [ 70.9405426, 24.2541068 ], [ 70.9399793, 24.2539858 ], [ 70.9399716, 24.2534712 ], [ 70.9385666, 24.25336 ], [ 70.9377151, 24.252728 ], [ 70.9375626, 24.251958 ], [ 70.9368499, 24.2511952 ], [ 70.9354488, 24.2513413 ], [ 70.9351721, 24.2516022 ], [ 70.934611, 24.2516093 ], [ 70.9340557, 24.2520026 ], [ 70.9337867, 24.2527781 ], [ 70.9332235, 24.2526562 ], [ 70.9326565, 24.2522778 ], [ 70.9325002, 24.2512506 ], [ 70.9326333, 24.2507343 ], [ 70.932074, 24.2508696 ], [ 70.9317915, 24.2507448 ], [ 70.9317837, 24.2502304 ], [ 70.9306613, 24.2502446 ], [ 70.9308089, 24.2507573 ], [ 70.9319468, 24.2517723 ], [ 70.932239, 24.2525405 ], [ 70.9325235, 24.2527942 ], [ 70.9325314, 24.2533086 ], [ 70.9321266, 24.254343 ], [ 70.9315652, 24.2543502 ], [ 70.9314322, 24.2548666 ], [ 70.9311555, 24.2551274 ], [ 70.9311712, 24.2561565 ], [ 70.931744, 24.256921 ], [ 70.9321731, 24.2574302 ], [ 70.9307741, 24.2577053 ], [ 70.9302477, 24.2600278 ], [ 70.9280068, 24.2603135 ], [ 70.9282931, 24.2606955 ], [ 70.9299865, 24.2613177 ], [ 70.9299905, 24.2615749 ], [ 70.9291506, 24.2617138 ], [ 70.9288661, 24.2614602 ], [ 70.9283029, 24.2613391 ], [ 70.9285951, 24.2621073 ], [ 70.9291564, 24.2621002 ], [ 70.9293078, 24.2628701 ], [ 70.9294505, 24.2629966 ], [ 70.9298807, 24.2636348 ], [ 70.9310188, 24.2646498 ], [ 70.9311674, 24.2651625 ], [ 70.9317306, 24.2652835 ], [ 70.9335677, 24.2661612 ], [ 70.9337163, 24.266674 ], [ 70.934463, 24.266752 ], [ 70.934562, 24.2669204 ], [ 70.9340009, 24.2669276 ], [ 70.9361362, 24.268959 ], [ 70.9365771, 24.2702398 ], [ 70.9374152, 24.2699718 ], [ 70.9371579, 24.271519 ], [ 70.9363161, 24.2715297 ], [ 70.9364598, 24.2717853 ], [ 70.9363511, 24.2738452 ], [ 70.9366299, 24.2737125 ], [ 70.9377544, 24.2738272 ], [ 70.937906, 24.2745972 ], [ 70.9380487, 24.2747237 ], [ 70.9397325, 24.2747021 ], [ 70.9402007, 24.2749128 ], [ 70.9402997, 24.2750814 ], [ 70.9405804, 24.2750778 ], [ 70.9405764, 24.2748204 ], [ 70.94039, 24.2747344 ], [ 70.940288, 24.2743096 ], [ 70.9397248, 24.2741877 ], [ 70.9391576, 24.2738093 ], [ 70.9391498, 24.2732948 ], [ 70.9397149, 24.2735449 ], [ 70.9395624, 24.2727749 ], [ 70.9399703, 24.2718686 ], [ 70.9405295, 24.2717333 ], [ 70.940377, 24.2709633 ], [ 70.9406537, 24.2707025 ], [ 70.9407867, 24.2701861 ], [ 70.9413479, 24.270179 ], [ 70.9412033, 24.2699236 ], [ 70.9413244, 24.2686354 ], [ 70.941607, 24.2687601 ], [ 70.9430122, 24.2688713 ], [ 70.9430043, 24.2683566 ], [ 70.9438463, 24.2683459 ], [ 70.9435853, 24.2696358 ], [ 70.9430239, 24.269643 ], [ 70.9430317, 24.2701576 ], [ 70.9419052, 24.2699146 ], [ 70.9417762, 24.2706881 ], [ 70.94095, 24.271728 ], [ 70.9409735, 24.2732716 ], [ 70.9412579, 24.2735252 ], [ 70.9414067, 24.274038 ], [ 70.9425272, 24.2738945 ], [ 70.943381, 24.2746556 ], [ 70.9450725, 24.2751485 ], [ 70.9462109, 24.2761633 ], [ 70.9467722, 24.2761561 ], [ 70.9470508, 24.2760242 ], [ 70.9472023, 24.2767943 ], [ 70.9476297, 24.2771742 ], [ 70.9481931, 24.2772961 ], [ 70.9482088, 24.2783252 ], [ 70.9487701, 24.2783181 ], [ 70.9484775, 24.2775498 ], [ 70.9507287, 24.2779064 ], [ 70.9510152, 24.2782891 ], [ 70.9493352, 24.2785681 ], [ 70.9493432, 24.2790826 ], [ 70.9499064, 24.2792035 ], [ 70.9500481, 24.2793309 ], [ 70.9501969, 24.2798437 ], [ 70.9490644, 24.2792143 ], [ 70.9465386, 24.2792468 ], [ 70.9462598, 24.2793795 ], [ 70.9462677, 24.2798939 ], [ 70.945985, 24.2797684 ], [ 70.9445798, 24.2796583 ], [ 70.9445877, 24.2801727 ], [ 70.9440264, 24.2801799 ], [ 70.9440304, 24.2804373 ], [ 70.9448724, 24.2804265 ], [ 70.9448801, 24.280941 ], [ 70.9454433, 24.281062 ], [ 70.9465641, 24.2809195 ], [ 70.9461504, 24.2814394 ], [ 70.9461583, 24.2819539 ], [ 70.9463031, 24.2822094 ], [ 70.9451823, 24.2823519 ], [ 70.9443345, 24.2819773 ], [ 70.9446034, 24.2812018 ], [ 70.9437654, 24.2814698 ], [ 70.9440655, 24.2827526 ], [ 70.9435023, 24.2826307 ], [ 70.9432177, 24.282377 ], [ 70.9423757, 24.2823878 ], [ 70.9420971, 24.2825205 ], [ 70.9420069, 24.2829478 ], [ 70.9412609, 24.2829166 ], [ 70.9409842, 24.2831774 ], [ 70.9404208, 24.2830565 ], [ 70.9405099, 24.2826284 ], [ 70.9406938, 24.2825384 ], [ 70.9406898, 24.2822812 ], [ 70.9404091, 24.2822848 ], [ 70.9401324, 24.2825456 ], [ 70.9399759, 24.2815182 ], [ 70.9395359, 24.2802374 ], [ 70.9381307, 24.2801262 ], [ 70.9375713, 24.2802625 ], [ 70.9375558, 24.2792334 ], [ 70.9361485, 24.2789939 ], [ 70.9361562, 24.2795086 ], [ 70.9353105, 24.2792619 ], [ 70.9353182, 24.2797766 ], [ 70.9367255, 24.2800158 ], [ 70.9367372, 24.2807877 ], [ 70.9356047, 24.2801584 ], [ 70.9339207, 24.2801799 ], [ 70.9336422, 24.2803124 ], [ 70.9339383, 24.2813379 ], [ 70.9342171, 24.2812052 ], [ 70.9347784, 24.2811982 ], [ 70.9354855, 24.2815757 ], [ 70.9353691, 24.2831209 ], [ 70.9331217, 24.2830204 ], [ 70.9328431, 24.2831531 ], [ 70.9325429, 24.2818703 ], [ 70.931697, 24.2816239 ], [ 70.9314046, 24.2808556 ], [ 70.9308433, 24.2808628 ], [ 70.9305511, 24.2800945 ], [ 70.929711, 24.2802334 ], [ 70.9294343, 24.2804942 ], [ 70.9288748, 24.2806303 ], [ 70.9290342, 24.2819149 ], [ 70.9300228, 24.2822878 ], [ 70.9303073, 24.2825416 ], [ 70.9317223, 24.2832956 ], [ 70.9322855, 24.2834175 ], [ 70.9322933, 24.2839319 ], [ 70.9328567, 24.2840531 ], [ 70.9342717, 24.284807 ], [ 70.9353963, 24.2849217 ], [ 70.935404, 24.2854364 ], [ 70.9373785, 24.286054 ], [ 70.9472057, 24.2861856 ], [ 70.9488977, 24.2866785 ], [ 70.9507353, 24.287556 ], [ 70.9506032, 24.2880723 ], [ 70.9514473, 24.2881897 ], [ 70.951589, 24.2883169 ], [ 70.9517378, 24.2888297 ], [ 70.9489272, 24.2886085 ], [ 70.9489232, 24.2883511 ], [ 70.9497652, 24.2883404 ], [ 70.9497572, 24.2878259 ], [ 70.9494787, 24.2879576 ], [ 70.9461067, 24.2877437 ], [ 70.9455531, 24.2882653 ], [ 70.9444286, 24.2881515 ], [ 70.9444206, 24.2876369 ], [ 70.9438593, 24.2876441 ], [ 70.9438673, 24.2881587 ], [ 70.9433057, 24.2881659 ], [ 70.943298, 24.2876513 ], [ 70.9427385, 24.2877868 ], [ 70.9424618, 24.2880476 ], [ 70.9413392, 24.288062 ], [ 70.9399417, 24.2884662 ], [ 70.9396766, 24.2894987 ], [ 70.9385501, 24.2892559 ], [ 70.9388249, 24.288866 ], [ 70.9396648, 24.288727 ], [ 70.9396611, 24.2884698 ], [ 70.9376924, 24.2882375 ], [ 70.9376807, 24.2874658 ], [ 70.9371213, 24.2876012 ], [ 70.9368387, 24.2874764 ], [ 70.936827, 24.2867047 ], [ 70.9351409, 24.286597 ], [ 70.9342912, 24.2860933 ], [ 70.9328799, 24.2855966 ], [ 70.9283855, 24.2853965 ], [ 70.9269742, 24.2848998 ], [ 70.9264052, 24.2843923 ], [ 70.9258438, 24.2843995 ], [ 70.924251578515623, 24.283797693296552 ], [ 70.9238677, 24.2836526 ], [ 70.9230236, 24.283535 ], [ 70.9229022, 24.2848231 ], [ 70.9230468, 24.2850786 ], [ 70.9219204, 24.2848355 ], [ 70.9219126, 24.2843211 ], [ 70.9213494, 24.284199 ], [ 70.920215, 24.2834415 ], [ 70.9190924, 24.2834556 ], [ 70.9188136, 24.2835881 ], [ 70.9199595, 24.2851177 ], [ 70.918831, 24.2847454 ], [ 70.9162993, 24.284392 ], [ 70.9163923, 24.2842209 ], [ 70.916576, 24.2841311 ], [ 70.9165723, 24.2838739 ], [ 70.9162916, 24.2838773 ], [ 70.9160166, 24.2842663 ], [ 70.915738, 24.2843989 ], [ 70.9154456, 24.2836307 ], [ 70.915165, 24.2836343 ], [ 70.9151727, 24.2841487 ], [ 70.9146114, 24.2841559 ], [ 70.9147044, 24.283985 ], [ 70.9148883, 24.2838951 ], [ 70.9147357, 24.2831251 ], [ 70.9143077, 24.2826157 ], [ 70.9134694, 24.2828837 ], [ 70.9137579, 24.2833946 ], [ 70.9123564, 24.2835405 ], [ 70.9120739, 24.283416 ], [ 70.9116291, 24.2818775 ], [ 70.9112011, 24.2813683 ], [ 70.9109223, 24.2815001 ], [ 70.9095152, 24.2812604 ], [ 70.9078312, 24.2812816 ], [ 70.9058781, 24.282078 ], [ 70.9050436, 24.2826031 ], [ 70.9039306, 24.2832608 ], [ 70.9039384, 24.2837754 ], [ 70.9030983, 24.2839142 ], [ 70.902535, 24.283793 ], [ 70.9022657, 24.2845683 ], [ 70.9003011, 24.2845929 ], [ 70.9000051, 24.2835673 ], [ 70.8994419, 24.2834453 ], [ 70.8985921, 24.2829412 ], [ 70.8984039, 24.2827269 ], [ 70.8984419, 24.2823003 ], [ 70.898298, 24.2820448 ], [ 70.8971735, 24.2819297 ], [ 70.896322, 24.2812975 ], [ 70.8963143, 24.280783 ], [ 70.8954723, 24.2807934 ], [ 70.895282, 24.2774507 ], [ 70.8958318, 24.2766719 ], [ 70.8956843, 24.2761591 ], [ 70.895123, 24.2761661 ], [ 70.8958127, 24.2753855 ], [ 70.8960703, 24.2738384 ], [ 70.8964861, 24.2734468 ], [ 70.897601, 24.2729181 ], [ 70.898443, 24.2729077 ], [ 70.8987255, 24.2730332 ], [ 70.898718, 24.2725188 ], [ 70.900123, 24.2726293 ], [ 70.9037618, 24.271941 ], [ 70.9037581, 24.2716838 ], [ 70.9031948, 24.2715617 ], [ 70.9026278, 24.2711833 ], [ 70.9027599, 24.270667 ], [ 70.9026163, 24.2704114 ], [ 70.9017705, 24.2701648 ], [ 70.9017628, 24.2696501 ], [ 70.9009248, 24.269918 ], [ 70.9009172, 24.2694035 ], [ 70.9000752, 24.2694141 ], [ 70.9002073, 24.2688977 ], [ 70.9006231, 24.2685061 ], [ 70.9014574, 24.2679811 ], [ 70.9022992, 24.2679705 ], [ 70.9024371, 24.2678405 ], [ 70.9025626, 24.2668097 ], [ 70.903124, 24.2668027 ], [ 70.9031315, 24.2673173 ], [ 70.904529, 24.2669132 ], [ 70.9098571, 24.2665891 ], [ 70.9123751, 24.2660429 ], [ 70.9132092, 24.2655177 ], [ 70.9140472, 24.2652498 ], [ 70.9147348, 24.2643411 ], [ 70.9147155, 24.2630548 ], [ 70.9148544, 24.2629238 ], [ 70.9152653, 24.2622759 ], [ 70.9158149, 24.2614971 ], [ 70.9159249, 24.2594371 ], [ 70.915085, 24.2595759 ], [ 70.9142489, 24.2599728 ], [ 70.9139567, 24.2592045 ], [ 70.9108699, 24.2592434 ], [ 70.9106125, 24.2607906 ], [ 70.9103318, 24.260794 ], [ 70.9103165, 24.2597649 ], [ 70.9094708, 24.2595182 ], [ 70.9096029, 24.2590019 ], [ 70.9094592, 24.2587464 ], [ 70.908058, 24.2588923 ], [ 70.9075006, 24.2591565 ], [ 70.9049752, 24.2591882 ], [ 70.9038565, 24.2594595 ], [ 70.9035798, 24.2597203 ], [ 70.9024534, 24.259477 ], [ 70.9010504, 24.2594946 ], [ 70.9002124, 24.2597624 ], [ 70.8996569, 24.2601557 ], [ 70.8993916, 24.2611884 ], [ 70.8982691, 24.2612024 ], [ 70.8982576, 24.2604305 ], [ 70.8976983, 24.2605659 ], [ 70.8974214, 24.2608265 ], [ 70.8965778, 24.2607089 ], [ 70.8964179, 24.2594243 ], [ 70.8966946, 24.2591635 ], [ 70.896824, 24.2583899 ], [ 70.8973871, 24.258511 ], [ 70.8976639, 24.2582504 ], [ 70.8987845, 24.2581081 ], [ 70.898636, 24.2575953 ], [ 70.8980633, 24.2568306 ], [ 70.8976352, 24.2563213 ], [ 70.8967953, 24.25646 ], [ 70.8965127, 24.2563353 ], [ 70.8962207, 24.255567 ], [ 70.895102, 24.2558382 ], [ 70.8950945, 24.2553238 ], [ 70.8945314, 24.2552017 ], [ 70.8936781, 24.2544404 ], [ 70.8922771, 24.2545868 ], [ 70.8925462, 24.2538116 ], [ 70.8908569, 24.253446 ], [ 70.8897363, 24.2535891 ], [ 70.8894443, 24.2528208 ], [ 70.8880431, 24.2529664 ], [ 70.8860599, 24.2517044 ], [ 70.8852181, 24.251715 ], [ 70.8843687, 24.2512107 ], [ 70.882962, 24.2509709 ], [ 70.8821145, 24.2505959 ], [ 70.8821032, 24.249824 ], [ 70.8815419, 24.249831 ], [ 70.8813935, 24.2493181 ], [ 70.8809656, 24.2488089 ], [ 70.8798375, 24.2484364 ], [ 70.8789845, 24.2476749 ], [ 70.8775776, 24.2474349 ], [ 70.8773009, 24.2476957 ], [ 70.8767416, 24.2478318 ], [ 70.876753, 24.2486035 ], [ 70.8764685, 24.2483497 ], [ 70.8761879, 24.2483532 ], [ 70.8761916, 24.2486105 ], [ 70.8763771, 24.2486957 ], [ 70.8764799, 24.2491215 ], [ 70.8756305, 24.2486175 ], [ 70.8756381, 24.2491319 ], [ 70.8753574, 24.2491353 ], [ 70.8753498, 24.2486209 ], [ 70.8739431, 24.2483808 ], [ 70.8739507, 24.2488955 ], [ 70.87367, 24.2488989 ], [ 70.8736589, 24.248127 ], [ 70.8691637, 24.2477959 ], [ 70.8683292, 24.2483207 ], [ 70.8672126, 24.248721 ], [ 70.8666702, 24.2500142 ], [ 70.8655385, 24.2493844 ], [ 70.8644103, 24.2490127 ], [ 70.8644028, 24.2484982 ], [ 70.8638435, 24.2486332 ], [ 70.863288, 24.2490265 ], [ 70.8635799, 24.2497947 ], [ 70.8627381, 24.2498051 ], [ 70.8627305, 24.2492905 ], [ 70.8613387, 24.2500796 ], [ 70.8614674, 24.249306 ], [ 70.8613238, 24.2490505 ], [ 70.8607645, 24.2491856 ], [ 70.8601977, 24.2488068 ], [ 70.8603262, 24.2480335 ], [ 70.8601826, 24.2477777 ], [ 70.8599021, 24.2477813 ], [ 70.8599095, 24.2482958 ], [ 70.8593427, 24.2479163 ], [ 70.8582185, 24.2478017 ], [ 70.8583546, 24.2475428 ], [ 70.8583397, 24.2465137 ], [ 70.858196, 24.2462582 ], [ 70.8553882, 24.2461633 ], [ 70.8545372, 24.2455309 ], [ 70.8545296, 24.2450163 ], [ 70.8539722, 24.2452805 ], [ 70.8539611, 24.2445086 ], [ 70.8531231, 24.244776 ], [ 70.8531117, 24.2440044 ], [ 70.8522737, 24.2442718 ], [ 70.8519821, 24.2435035 ], [ 70.8514188, 24.2433812 ], [ 70.8505697, 24.2428768 ], [ 70.8497167, 24.2421153 ], [ 70.8488713, 24.2418683 ], [ 70.8480295, 24.2418785 ], [ 70.8477471, 24.2417537 ], [ 70.8477398, 24.2412391 ], [ 70.8484861, 24.2413175 ], [ 70.8485852, 24.2414861 ], [ 70.8488658, 24.2414827 ], [ 70.8488621, 24.2412255 ], [ 70.848437, 24.2409734 ], [ 70.8482934, 24.2407176 ], [ 70.8471692, 24.2406024 ], [ 70.8457551, 24.2398475 ], [ 70.8446309, 24.239733 ], [ 70.8447634, 24.2392166 ], [ 70.84462, 24.2389611 ], [ 70.8437855, 24.2394857 ], [ 70.8432059, 24.2382062 ], [ 70.8412399, 24.2381009 ], [ 70.8404001, 24.2382402 ], [ 70.8399934, 24.2392744 ], [ 70.8395805, 24.239794 ], [ 70.8378951, 24.2396853 ], [ 70.8376164, 24.2398178 ], [ 70.8376237, 24.2403323 ], [ 70.8365033, 24.240474 ], [ 70.8362265, 24.2407347 ], [ 70.8351023, 24.2406201 ], [ 70.8348437, 24.2421671 ], [ 70.834279, 24.2419167 ], [ 70.8344077, 24.2411431 ], [ 70.8350968, 24.2402338 ], [ 70.8364922, 24.2397021 ], [ 70.8373266, 24.2391775 ], [ 70.8378804, 24.2386562 ], [ 70.8387203, 24.2385179 ], [ 70.8385536, 24.2367186 ], [ 70.8388305, 24.236458 ], [ 70.8389639, 24.2359416 ], [ 70.8381259, 24.236209 ], [ 70.838812, 24.2351714 ], [ 70.8386648, 24.2346587 ], [ 70.8381036, 24.2346655 ], [ 70.8379518, 24.2338953 ], [ 70.8376676, 24.2336413 ], [ 70.8376564, 24.2328696 ], [ 70.8367963, 24.2315933 ], [ 70.8360843, 24.2308299 ], [ 70.8358056, 24.2309615 ], [ 70.8349639, 24.2309717 ], [ 70.8332731, 24.2304774 ], [ 70.8329889, 24.2302234 ], [ 70.8315861, 24.2302404 ], [ 70.8310193, 24.2298617 ], [ 70.8310121, 24.229347 ], [ 70.8298953, 24.229746 ], [ 70.8296185, 24.2300066 ], [ 70.8287785, 24.2301459 ], [ 70.828911, 24.2296296 ], [ 70.8294648, 24.2291083 ], [ 70.8295945, 24.2283347 ], [ 70.8290316, 24.2282125 ], [ 70.8284631, 24.2277046 ], [ 70.8273408, 24.2277182 ], [ 70.8267853, 24.2281113 ], [ 70.8269141, 24.2273378 ], [ 70.8267668, 24.2268248 ], [ 70.8253605, 24.2265844 ], [ 70.8253678, 24.2270989 ], [ 70.8248012, 24.2267194 ], [ 70.8239558, 24.2264721 ], [ 70.8228335, 24.2264856 ], [ 70.822555, 24.2266181 ], [ 70.8224399, 24.2284207 ], [ 70.8225843, 24.2286763 ], [ 70.8221172, 24.2285933 ], [ 70.821451, 24.2279178 ], [ 70.8203251, 24.227674 ], [ 70.8203178, 24.2271594 ], [ 70.8175013, 24.2264211 ], [ 70.8173677, 24.2269373 ], [ 70.8170908, 24.2271979 ], [ 70.8169693, 24.2284861 ], [ 70.8158434, 24.2282421 ], [ 70.8160983, 24.2264379 ], [ 70.8155374, 24.2264446 ], [ 70.8152386, 24.2251614 ], [ 70.8143968, 24.2251714 ], [ 70.8141273, 24.2259467 ], [ 70.8138466, 24.2259501 ], [ 70.8136446, 24.2247534 ], [ 70.8138284, 24.2246636 ], [ 70.8138249, 24.2244064 ], [ 70.8135442, 24.2244098 ], [ 70.8134503, 24.2245797 ], [ 70.8127007, 24.2242907 ], [ 70.8121397, 24.2242973 ], [ 70.8115841, 24.2246904 ], [ 70.8112889, 24.2236646 ], [ 70.8104472, 24.2236746 ], [ 70.8104546, 24.2241892 ], [ 70.8096111, 24.2240701 ], [ 70.8093323, 24.2242024 ], [ 70.8093214, 24.2234306 ], [ 70.8084797, 24.2234406 ], [ 70.8088929, 24.222921 ], [ 70.8087457, 24.2224083 ], [ 70.8081883, 24.2226721 ], [ 70.8081955, 24.2231868 ], [ 70.8076308, 24.2229361 ], [ 70.8076236, 24.2224215 ], [ 70.8059439, 24.2226988 ], [ 70.805933, 24.2219269 ], [ 70.8067729, 24.2217878 ], [ 70.8070479, 24.221399 ], [ 70.8056434, 24.2212866 ], [ 70.8048054, 24.2215538 ], [ 70.8031239, 24.2217029 ], [ 70.803131, 24.2222174 ], [ 70.8036922, 24.2222108 ], [ 70.8034189, 24.2227286 ], [ 70.80398, 24.222722 ], [ 70.8039946, 24.2237511 ], [ 70.8025882, 24.2235105 ], [ 70.8025954, 24.2240252 ], [ 70.80175, 24.2237778 ], [ 70.8017574, 24.2242924 ], [ 70.8006315, 24.2240484 ], [ 70.8008976, 24.2230159 ], [ 70.8000541, 24.2228968 ], [ 70.7989211, 24.2221382 ], [ 70.7986406, 24.2221414 ], [ 70.7983635, 24.222402 ], [ 70.7978043, 24.2225377 ], [ 70.7978115, 24.2230524 ], [ 70.796693, 24.2233228 ], [ 70.7966784, 24.2222937 ], [ 70.7977988, 24.2221514 ], [ 70.7979368, 24.2220216 ], [ 70.797926, 24.2212497 ], [ 70.7977825, 24.2209942 ], [ 70.7944161, 24.2210339 ], [ 70.7946894, 24.220516 ], [ 70.7935673, 24.2205292 ], [ 70.7935745, 24.2210437 ], [ 70.7916213, 24.2218386 ], [ 70.7917684, 24.2223516 ], [ 70.7919109, 24.2224782 ], [ 70.7930349, 24.2225941 ], [ 70.792758, 24.2228547 ], [ 70.7927616, 24.2231119 ], [ 70.793042, 24.2231087 ], [ 70.7931352, 24.2229378 ], [ 70.7934624, 24.2231036 ], [ 70.793614, 24.2238738 ], [ 70.7933335, 24.2238772 ], [ 70.7933263, 24.2233625 ], [ 70.7924883, 24.2236298 ], [ 70.7924013, 24.2243143 ], [ 70.7905316, 24.2241675 ], [ 70.7908048, 24.2236496 ], [ 70.7902456, 24.2237844 ], [ 70.7899685, 24.224045 ], [ 70.7894093, 24.2241807 ], [ 70.78942, 24.2249526 ], [ 70.7880209, 24.2252263 ], [ 70.7880029, 24.2239399 ], [ 70.788287, 24.2241939 ], [ 70.7885677, 24.2241905 ], [ 70.7885641, 24.2239333 ], [ 70.7881392, 24.223681 ], [ 70.7881356, 24.2234236 ], [ 70.7885533, 24.2231614 ], [ 70.7882583, 24.2221355 ], [ 70.7876954, 24.2220131 ], [ 70.7874114, 24.2217591 ], [ 70.7865678, 24.2216407 ], [ 70.786981, 24.2211212 ], [ 70.7868268, 24.2200938 ], [ 70.7854259, 24.2202384 ], [ 70.7851471, 24.2203708 ], [ 70.7852978, 24.221141 ], [ 70.7851759, 24.2224291 ], [ 70.785040056096278, 24.222430697594021 ], [ 70.7846147, 24.2224357 ], [ 70.7846075, 24.221921 ], [ 70.7840464, 24.2219276 ], [ 70.7839128, 24.2224438 ], [ 70.7823792, 24.2231047 ], [ 70.7821023, 24.2233654 ], [ 70.7815429, 24.2235009 ], [ 70.7815501, 24.2240155 ], [ 70.7821076, 24.2237517 ], [ 70.7821184, 24.2245236 ], [ 70.780998, 24.2246649 ], [ 70.7807156, 24.22454 ], [ 70.7808517, 24.2242811 ], [ 70.7807013, 24.2235109 ], [ 70.779579, 24.2235239 ], [ 70.7794276, 24.2227538 ], [ 70.778716, 24.22199 ], [ 70.7784373, 24.2221216 ], [ 70.777315, 24.2221346 ], [ 70.7770326, 24.2220097 ], [ 70.7768848, 24.2214967 ], [ 70.7764573, 24.2209872 ], [ 70.7756138, 24.2208677 ], [ 70.7750474, 24.220489 ], [ 70.7750545, 24.2210034 ], [ 70.774211, 24.2208842 ], [ 70.773927, 24.2206302 ], [ 70.773087, 24.2207691 ], [ 70.7733605, 24.2202512 ], [ 70.7727994, 24.2202578 ], [ 70.7730729, 24.21974 ], [ 70.7716754, 24.2201418 ], [ 70.7711214, 24.2206629 ], [ 70.7702798, 24.2206727 ], [ 70.7700028, 24.2209331 ], [ 70.768046, 24.2214706 ], [ 70.767769, 24.2217311 ], [ 70.7658139, 24.2223975 ], [ 70.7660874, 24.2218798 ], [ 70.7635607, 24.2217798 ], [ 70.7632783, 24.2216549 ], [ 70.7632713, 24.2211405 ], [ 70.761872, 24.2214139 ], [ 70.7618614, 24.2206421 ], [ 70.7612985, 24.2205194 ], [ 70.760448, 24.2198864 ], [ 70.7605412, 24.2197156 ], [ 70.7615703, 24.2198734 ], [ 70.7612791, 24.2191047 ], [ 70.7590294, 24.2187443 ], [ 70.7587453, 24.2184903 ], [ 70.7579037, 24.2184999 ], [ 70.7576267, 24.2187606 ], [ 70.7570674, 24.2188961 ], [ 70.7571604, 24.2187252 ], [ 70.7573443, 24.2186356 ], [ 70.7573409, 24.2183782 ], [ 70.7570602, 24.2183816 ], [ 70.7569661, 24.2185515 ], [ 70.7556646, 24.2189123 ], [ 70.7559593, 24.2199382 ], [ 70.7568009, 24.2199286 ], [ 70.7563972, 24.2212198 ], [ 70.7558432, 24.2217409 ], [ 70.7558467, 24.2219981 ], [ 70.7559892, 24.2221248 ], [ 70.7568291, 24.2219868 ], [ 70.7565698, 24.2235338 ], [ 70.7548811, 24.2231669 ], [ 70.7543146, 24.2227878 ], [ 70.7543076, 24.2222733 ], [ 70.7514879, 24.2212763 ], [ 70.751218, 24.2220514 ], [ 70.7506533, 24.2218006 ], [ 70.7503587, 24.2207747 ], [ 70.7497994, 24.2209093 ], [ 70.748407, 24.2216974 ], [ 70.7481302, 24.2219579 ], [ 70.7470096, 24.2220998 ], [ 70.7467149, 24.2210739 ], [ 70.7475567, 24.2210643 ], [ 70.7475497, 24.2205496 ], [ 70.7464275, 24.2205625 ], [ 70.7464099, 24.2192762 ], [ 70.7455683, 24.2192858 ], [ 70.7454345, 24.219802 ], [ 70.7450211, 24.2203213 ], [ 70.7444549, 24.2199414 ], [ 70.7436149, 24.2200802 ], [ 70.7436008, 24.2190509 ], [ 70.7431375, 24.2192251 ], [ 70.742899, 24.219059 ], [ 70.7419262, 24.2197129 ], [ 70.7410863, 24.2198517 ], [ 70.7413494, 24.2185621 ], [ 70.7399483, 24.2187063 ], [ 70.7391033, 24.2184585 ], [ 70.7388193, 24.2182045 ], [ 70.7374148, 24.2180923 ], [ 70.737508, 24.2179216 ], [ 70.7382528, 24.2178254 ], [ 70.7379654, 24.217314 ], [ 70.7374078, 24.2175778 ], [ 70.7373135, 24.2177477 ], [ 70.7360102, 24.2179792 ], [ 70.7351634, 24.2176033 ], [ 70.7351564, 24.2170887 ], [ 70.7345987, 24.2173525 ], [ 70.7341914, 24.2183863 ], [ 70.7341984, 24.218901 ], [ 70.7340621, 24.2191599 ], [ 70.7371481, 24.2191248 ], [ 70.7365976, 24.2199031 ], [ 70.7377216, 24.2200184 ], [ 70.7382914, 24.2206557 ], [ 70.7377302, 24.2206621 ], [ 70.7376104, 24.2222074 ], [ 70.7374742, 24.2224663 ], [ 70.736913, 24.2224727 ], [ 70.7370563, 24.2227284 ], [ 70.7370633, 24.2232431 ], [ 70.7366499, 24.2237625 ], [ 70.7363728, 24.2240229 ], [ 70.7365662, 24.2247042 ], [ 70.7363832, 24.2247948 ], [ 70.7363868, 24.225052 ], [ 70.7366673, 24.2250488 ], [ 70.7369444, 24.2247883 ], [ 70.7369514, 24.225303 ], [ 70.7361132, 24.2255699 ], [ 70.7359083, 24.2241157 ], [ 70.7335637, 24.2237976 ], [ 70.7335705, 24.2243123 ], [ 70.7332884, 24.2241862 ], [ 70.7324485, 24.2243249 ], [ 70.7328618, 24.2238055 ], [ 70.7328548, 24.2232909 ], [ 70.7327115, 24.2230354 ], [ 70.7321521, 24.2231699 ], [ 70.7318699, 24.2230448 ], [ 70.7320062, 24.2227859 ], [ 70.7319958, 24.222014 ], [ 70.7318523, 24.2217583 ], [ 70.7310143, 24.2220252 ], [ 70.7312844, 24.2212503 ], [ 70.730725, 24.2213848 ], [ 70.7296167, 24.2224266 ], [ 70.7284927, 24.2223113 ], [ 70.7284857, 24.2217967 ], [ 70.7268059, 24.222073 ], [ 70.7268128, 24.2225876 ], [ 70.7259746, 24.2228545 ], [ 70.7259814, 24.2233691 ], [ 70.724673, 24.2232954 ], [ 70.7248541, 24.2229955 ], [ 70.7256923, 24.2227286 ], [ 70.7261073, 24.2223383 ], [ 70.7259572, 24.221568 ], [ 70.7251154, 24.2215776 ], [ 70.7251086, 24.221063 ], [ 70.7256698, 24.2210565 ], [ 70.7258026, 24.2205404 ], [ 70.7260797, 24.2202799 ], [ 70.7260761, 24.2200227 ], [ 70.7257922, 24.2197685 ], [ 70.7261961, 24.2184773 ], [ 70.7242356, 24.2187568 ], [ 70.7240776, 24.217472 ], [ 70.7242149, 24.217213 ], [ 70.7236539, 24.2172195 ], [ 70.7236607, 24.2177339 ], [ 70.7222562, 24.2176207 ], [ 70.721697, 24.2177562 ], [ 70.7214059, 24.2169876 ], [ 70.7205626, 24.2168679 ], [ 70.7199945, 24.2163597 ], [ 70.7194335, 24.2163659 ], [ 70.7191495, 24.2161119 ], [ 70.7183044, 24.2158641 ], [ 70.7138138, 24.2157865 ], [ 70.7138104, 24.2155292 ], [ 70.7143715, 24.2155228 ], [ 70.7143646, 24.2150084 ], [ 70.7138053, 24.2151427 ], [ 70.7132493, 24.2155355 ], [ 70.7136834, 24.21656 ], [ 70.7138414, 24.2178449 ], [ 70.7129964, 24.2175971 ], [ 70.7130032, 24.2181115 ], [ 70.712442, 24.218118 ], [ 70.7121822, 24.2196649 ], [ 70.7119017, 24.219668 ], [ 70.7120174, 24.2178655 ], [ 70.7121563, 24.2177347 ], [ 70.7127157, 24.2176001 ], [ 70.7127123, 24.2173429 ], [ 70.7101856, 24.2172421 ], [ 70.7096263, 24.2173777 ], [ 70.7096331, 24.2178921 ], [ 70.7090669, 24.217512 ], [ 70.7076658, 24.2176568 ], [ 70.7079703, 24.2194548 ], [ 70.706552, 24.2183123 ], [ 70.7057036, 24.2178071 ], [ 70.7034576, 24.2177041 ], [ 70.7034644, 24.2182187 ], [ 70.7040272, 24.2183406 ], [ 70.7042153, 24.2186364 ], [ 70.7034695, 24.2186041 ], [ 70.702337, 24.2178449 ], [ 70.7017741, 24.217723 ], [ 70.701931, 24.2190078 ], [ 70.7017947, 24.2192667 ], [ 70.7009512, 24.2191469 ], [ 70.6995485, 24.2191626 ], [ 70.6987034, 24.2189148 ], [ 70.697571, 24.2181554 ], [ 70.6970081, 24.2180335 ], [ 70.6973092, 24.219574 ], [ 70.6953487, 24.2198532 ], [ 70.6956462, 24.2211367 ], [ 70.6934033, 24.2212898 ], [ 70.6928388, 24.2210388 ], [ 70.6925583, 24.2210418 ], [ 70.692281, 24.2213022 ], [ 70.6897577, 24.2214595 ], [ 70.689901, 24.2217152 ], [ 70.689918, 24.2230017 ], [ 70.6896441, 24.2235194 ], [ 70.6895179, 24.2245502 ], [ 70.6887706, 24.2244699 ], [ 70.6889433, 24.2235271 ], [ 70.6881015, 24.2235366 ], [ 70.6879709, 24.22431 ], [ 70.6878327, 24.2244396 ], [ 70.6885808, 24.2246481 ], [ 70.6884024, 24.2250771 ], [ 70.6875608, 24.2250866 ], [ 70.6872631, 24.2238031 ], [ 70.6869826, 24.2238063 ], [ 70.6868486, 24.2243225 ], [ 70.6869996, 24.2250928 ], [ 70.6864368, 24.2249698 ], [ 70.6861578, 24.2251021 ], [ 70.6858637, 24.224076 ], [ 70.6864249, 24.2240698 ], [ 70.6862671, 24.2227848 ], [ 70.6859832, 24.2225306 ], [ 70.6856857, 24.2212472 ], [ 70.6852586, 24.2207373 ], [ 70.6841329, 24.2204924 ], [ 70.6842861, 24.2215202 ], [ 70.6845736, 24.2220316 ], [ 70.6846269, 24.2227144 ], [ 70.6838794, 24.222554 ], [ 70.6834716, 24.2235878 ], [ 70.683058, 24.224107 ], [ 70.6828717, 24.2240206 ], [ 70.6829036, 24.2230794 ], [ 70.6827605, 24.2228237 ], [ 70.6819153, 24.2225757 ], [ 70.6820384, 24.2212875 ], [ 70.6818951, 24.2210318 ], [ 70.6807711, 24.2209152 ], [ 70.6804941, 24.2211754 ], [ 70.6782478, 24.221072 ], [ 70.678258, 24.2218439 ], [ 70.6763007, 24.2223803 ], [ 70.6757598, 24.2239303 ], [ 70.6768787, 24.2236606 ], [ 70.6767447, 24.2241767 ], [ 70.6761901, 24.2246974 ], [ 70.6761935, 24.2249549 ], [ 70.6764776, 24.2252091 ], [ 70.6764842, 24.2257235 ], [ 70.6753754, 24.2267651 ], [ 70.6753822, 24.2272797 ], [ 70.6752457, 24.2275387 ], [ 70.6760875, 24.2275294 ], [ 70.6760941, 24.2280439 ], [ 70.6763748, 24.2280408 ], [ 70.676368, 24.2275262 ], [ 70.6769291, 24.2275202 ], [ 70.6769427, 24.2285493 ], [ 70.6777777, 24.2280253 ], [ 70.6781913, 24.2275062 ], [ 70.6784617, 24.2267313 ], [ 70.6784315, 24.2244154 ], [ 70.6789756, 24.2231227 ], [ 70.6788257, 24.2223523 ], [ 70.6793869, 24.2223463 ], [ 70.6793769, 24.2215742 ], [ 70.6796573, 24.2215712 ], [ 70.6795402, 24.2233739 ], [ 70.6792631, 24.2236343 ], [ 70.679313, 24.2240599 ], [ 70.6788528, 24.2244107 ], [ 70.6790263, 24.2269823 ], [ 70.6787492, 24.2272427 ], [ 70.6786161, 24.2277589 ], [ 70.6797299, 24.2271027 ], [ 70.6802911, 24.2270966 ], [ 70.6805768, 24.2274799 ], [ 70.6802962, 24.2274829 ], [ 70.680303, 24.2279976 ], [ 70.6805834, 24.2279945 ], [ 70.6805937, 24.2287664 ], [ 70.680313, 24.2287694 ], [ 70.6800223, 24.2280006 ], [ 70.6780599, 24.2281505 ], [ 70.6776969, 24.2292246 ], [ 70.6766789, 24.2298388 ], [ 70.6763816, 24.2285555 ], [ 70.6747923, 24.2284844 ], [ 70.673755379687506, 24.225816199910025 ], [ 70.673532, 24.2252414 ], [ 70.6729724, 24.2253758 ], [ 70.6724164, 24.2257683 ], [ 70.6724702, 24.2298851 ], [ 70.6721896, 24.2298883 ], [ 70.6721828, 24.2293737 ], [ 70.6716216, 24.2293799 ], [ 70.671715, 24.2292091 ], [ 70.6718989, 24.2291195 ], [ 70.6718923, 24.2286048 ], [ 70.6716116, 24.2286078 ], [ 70.6715207, 24.2290352 ], [ 70.6711516, 24.2290391 ], [ 70.6710437, 24.2280994 ], [ 70.6704825, 24.2281057 ], [ 70.6704759, 24.227591 ], [ 70.6710371, 24.2275848 ], [ 70.6711299, 24.2239811 ], [ 70.671546, 24.2235901 ], [ 70.6721055, 24.2234557 ], [ 70.6722319, 24.2224249 ], [ 70.6717982, 24.2214003 ], [ 70.6715141, 24.2211461 ], [ 70.6712336, 24.2211492 ], [ 70.671237, 24.2214066 ], [ 70.6715209, 24.2216608 ], [ 70.6709581, 24.2215377 ], [ 70.6706742, 24.2212835 ], [ 70.6696445, 24.2210783 ], [ 70.6698241, 24.22065 ], [ 70.6692629, 24.2206562 ], [ 70.6692697, 24.2211707 ], [ 70.6695536, 24.2214251 ], [ 70.6689925, 24.2214311 ], [ 70.6688282, 24.2196317 ], [ 70.668685, 24.2193758 ], [ 70.6681289, 24.2197674 ], [ 70.6670066, 24.2197798 ], [ 70.6667279, 24.219912 ], [ 70.6670252, 24.2211955 ], [ 70.6675863, 24.2211892 ], [ 70.6677194, 24.2206731 ], [ 70.6681372, 24.2204111 ], [ 70.6680066, 24.2211847 ], [ 70.6682905, 24.2214389 ], [ 70.6685383, 24.223524 ], [ 70.6687437, 24.2238781 ], [ 70.6691692, 24.2242599 ], [ 70.6696005, 24.2250272 ], [ 70.6694899, 24.2273446 ], [ 70.6699382, 24.2293982 ], [ 70.6693771, 24.2294045 ], [ 70.6693837, 24.2299191 ], [ 70.6691975, 24.2298326 ], [ 70.6690964, 24.2294075 ], [ 70.6688159, 24.2294107 ], [ 70.6688225, 24.2299252 ], [ 70.6690078, 24.2300108 ], [ 70.6693922, 24.2305619 ], [ 70.6705128, 24.2304213 ], [ 70.6703754, 24.2306802 ], [ 70.6705362, 24.2322225 ], [ 70.6699717, 24.2319713 ], [ 70.6699651, 24.2314568 ], [ 70.6694039, 24.2314629 ], [ 70.6694105, 24.2319775 ], [ 70.6696912, 24.2319745 ], [ 70.6696946, 24.2322317 ], [ 70.6688545, 24.2323691 ], [ 70.6680076, 24.2319928 ], [ 70.6682748, 24.2309605 ], [ 70.6671524, 24.2309728 ], [ 70.6671457, 24.2304583 ], [ 70.6674279, 24.2305835 ], [ 70.6679892, 24.2305772 ], [ 70.6682648, 24.2301886 ], [ 70.6677035, 24.2301949 ], [ 70.6683945, 24.2294153 ], [ 70.6682446, 24.2286449 ], [ 70.668527, 24.22877 ], [ 70.6693669, 24.2286326 ], [ 70.6691673, 24.2275169 ], [ 70.6690527, 24.2260626 ], [ 70.6693334, 24.2260596 ], [ 70.66933, 24.2258021 ], [ 70.6679271, 24.2258176 ], [ 70.6679204, 24.225303 ], [ 70.6682954, 24.2252104 ], [ 70.6681943, 24.2247853 ], [ 70.668475, 24.2247823 ], [ 70.6679434, 24.2242012 ], [ 70.6676131, 24.2232476 ], [ 70.6667747, 24.2235141 ], [ 70.666237, 24.2253215 ], [ 70.6670786, 24.2253123 ], [ 70.6669446, 24.2258284 ], [ 70.6662537, 24.226608 ], [ 70.665829, 24.2263553 ], [ 70.665412, 24.2266171 ], [ 70.6651045, 24.2245617 ], [ 70.6655704, 24.2246443 ], [ 70.6653918, 24.2250734 ], [ 70.665953, 24.2250671 ], [ 70.6659463, 24.2245527 ], [ 70.6657602, 24.2244661 ], [ 70.6656591, 24.224041 ], [ 70.6648174, 24.2240503 ], [ 70.6648307, 24.2250794 ], [ 70.6642663, 24.2248284 ], [ 70.6645302, 24.2235387 ], [ 70.6650913, 24.2235326 ], [ 70.6650779, 24.2225033 ], [ 70.6656439, 24.2228827 ], [ 70.6659246, 24.2228796 ], [ 70.6666171, 24.2222293 ], [ 70.6664606, 24.2209443 ], [ 70.6656222, 24.2212108 ], [ 70.665629, 24.2217254 ], [ 70.6645033, 24.2214803 ], [ 70.6650745, 24.2222461 ], [ 70.6639556, 24.2225156 ], [ 70.6632771, 24.2243245 ], [ 70.6632937, 24.2256111 ], [ 70.664149, 24.2266309 ], [ 70.6644394, 24.2273998 ], [ 70.6650495, 24.2277381 ], [ 70.6651482, 24.2279068 ], [ 70.6643064, 24.2279159 ], [ 70.6641924, 24.229976 ], [ 70.6636379, 24.2304967 ], [ 70.6636445, 24.2310114 ], [ 70.6642159, 24.231777 ], [ 70.6640826, 24.2322932 ], [ 70.6636579, 24.2320405 ], [ 70.6635149, 24.2317847 ], [ 70.6626797, 24.2323085 ], [ 70.6627662, 24.2316232 ], [ 70.6629503, 24.2315336 ], [ 70.6629469, 24.2312763 ], [ 70.6626664, 24.2312794 ], [ 70.6623892, 24.2315396 ], [ 70.6622416, 24.2310267 ], [ 70.6619577, 24.2307725 ], [ 70.6618112, 24.2302593 ], [ 70.6615305, 24.2302624 ], [ 70.6608621, 24.232843 ], [ 70.6605848, 24.2331034 ], [ 70.6604517, 24.2336196 ], [ 70.6590486, 24.2336349 ], [ 70.658898, 24.2328645 ], [ 70.65833, 24.2323559 ], [ 70.6581635, 24.230299 ], [ 70.6587231, 24.2301639 ], [ 70.6588611, 24.230034 ], [ 70.6589753, 24.2279741 ], [ 70.6584141, 24.2279804 ], [ 70.6582799, 24.2284963 ], [ 70.6571711, 24.2295379 ], [ 70.6571943, 24.2313391 ], [ 70.6577721, 24.2326194 ], [ 70.6580562, 24.2328736 ], [ 70.6581059, 24.2332992 ], [ 70.6570779, 24.2331416 ], [ 70.6565334, 24.2344343 ], [ 70.6562527, 24.2344374 ], [ 70.6563459, 24.2308335 ], [ 70.6559188, 24.2303236 ], [ 70.6553593, 24.2304578 ], [ 70.6548031, 24.2308503 ], [ 70.6546691, 24.2313665 ], [ 70.6543916, 24.2316267 ], [ 70.654262, 24.2324003 ], [ 70.6534202, 24.2324094 ], [ 70.6535699, 24.2331798 ], [ 70.6532926, 24.2334402 ], [ 70.6531694, 24.2347282 ], [ 70.6528889, 24.2347313 ], [ 70.6527347, 24.2337035 ], [ 70.6523077, 24.2331936 ], [ 70.6531495, 24.2331843 ], [ 70.6527182, 24.232417 ], [ 70.652849, 24.2316436 ], [ 70.6542469, 24.2312419 ], [ 70.654385, 24.2311123 ], [ 70.6543784, 24.2305976 ], [ 70.6540945, 24.2303434 ], [ 70.6540879, 24.2298288 ], [ 70.653804, 24.2295744 ], [ 70.6535134, 24.2288055 ], [ 70.6528025, 24.2280412 ], [ 70.6522446, 24.2283047 ], [ 70.6524376, 24.2289862 ], [ 70.6522546, 24.2290766 ], [ 70.6522612, 24.2295912 ], [ 70.6524465, 24.2296768 ], [ 70.651994, 24.2306235 ], [ 70.6517133, 24.2306266 ], [ 70.6518365, 24.2293385 ], [ 70.6516935, 24.2290828 ], [ 70.6511355, 24.2293461 ], [ 70.6511554, 24.23089 ], [ 70.6503153, 24.2310272 ], [ 70.6497591, 24.2314198 ], [ 70.6497524, 24.2309051 ], [ 70.6491896, 24.2307821 ], [ 70.6486218, 24.2302737 ], [ 70.648059, 24.2301514 ], [ 70.6484595, 24.2286031 ], [ 70.649437, 24.228206 ], [ 70.6504104, 24.2275527 ], [ 70.6504037, 24.227038 ], [ 70.64997, 24.2260133 ], [ 70.6494088, 24.2260195 ], [ 70.6494221, 24.2270486 ], [ 70.6480225, 24.2273211 ], [ 70.6481425, 24.2257757 ], [ 70.6479993, 24.22552 ], [ 70.6468738, 24.2252748 ], [ 70.6468902, 24.2265614 ], [ 70.6457613, 24.2260588 ], [ 70.6454674, 24.2250327 ], [ 70.6463092, 24.2250237 ], [ 70.6461586, 24.2242533 ], [ 70.6457317, 24.2237432 ], [ 70.6448899, 24.2237522 ], [ 70.6447623, 24.2247831 ], [ 70.644211, 24.225561 ], [ 70.6442276, 24.2268475 ], [ 70.644802, 24.2278706 ], [ 70.6456536, 24.2286336 ], [ 70.6460832, 24.2292718 ], [ 70.646646, 24.2293948 ], [ 70.6463754, 24.2301697 ], [ 70.6449626, 24.229413 ], [ 70.6449692, 24.2299276 ], [ 70.6435695, 24.2302 ], [ 70.6435761, 24.2307146 ], [ 70.6427311, 24.2304665 ], [ 70.6427277, 24.2302091 ], [ 70.6432873, 24.2300739 ], [ 70.6434255, 24.2299443 ], [ 70.6434221, 24.2296868 ], [ 70.6429951, 24.2291769 ], [ 70.6418694, 24.2289316 ], [ 70.6415757, 24.2279055 ], [ 70.6412951, 24.2279085 ], [ 70.6412238, 24.2298794 ], [ 70.6407604, 24.229973 ], [ 70.6408969, 24.2297143 ], [ 70.6408836, 24.228685 ], [ 70.640163, 24.2271488 ], [ 70.6393244, 24.2274151 ], [ 70.6397613, 24.2286971 ], [ 70.6401892, 24.2292072 ], [ 70.6396281, 24.2292132 ], [ 70.6396379, 24.2299851 ], [ 70.6390719, 24.2296046 ], [ 70.6387912, 24.2296077 ], [ 70.6385139, 24.2298681 ], [ 70.6379545, 24.2300032 ], [ 70.6378235, 24.2307766 ], [ 70.6381074, 24.231031 ], [ 70.6382548, 24.231544 ], [ 70.6376886, 24.2311637 ], [ 70.6368468, 24.2311728 ], [ 70.6357294, 24.2315712 ], [ 70.6360002, 24.2307963 ], [ 70.6348778, 24.2308084 ], [ 70.6348746, 24.230551 ], [ 70.6362758, 24.2304067 ], [ 70.6368254, 24.2295007 ], [ 70.6359853, 24.2296379 ], [ 70.635708, 24.2298983 ], [ 70.6352429, 24.2299439 ], [ 70.6351452, 24.2297761 ], [ 70.6348645, 24.2297791 ], [ 70.6348679, 24.2300365 ], [ 70.6351518, 24.2302907 ], [ 70.6340261, 24.2300454 ], [ 70.6340327, 24.23056 ], [ 70.6329152, 24.2309577 ], [ 70.632359, 24.23135 ], [ 70.6320981, 24.2328968 ], [ 70.6326593, 24.232891 ], [ 70.6325415, 24.2346935 ], [ 70.6329726, 24.235461 ], [ 70.6324115, 24.235467 ], [ 70.6324213, 24.2362389 ], [ 70.6318602, 24.236245 ], [ 70.6315697, 24.2354759 ], [ 70.6312907, 24.2356073 ], [ 70.6304489, 24.2356162 ], [ 70.6298942, 24.2361369 ], [ 70.6293314, 24.2360146 ], [ 70.629338, 24.2365292 ], [ 70.6287768, 24.2365353 ], [ 70.628767, 24.2357634 ], [ 70.6284864, 24.2357664 ], [ 70.6283554, 24.2365398 ], [ 70.6284994, 24.2367955 ], [ 70.6279383, 24.2368016 ], [ 70.6278504, 24.2374861 ], [ 70.6275731, 24.2377464 ], [ 70.6268239, 24.2374564 ], [ 70.6262562, 24.2369478 ], [ 70.6256965, 24.237083 ], [ 70.6257064, 24.2378549 ], [ 70.6265482, 24.2378458 ], [ 70.6262775, 24.2386207 ], [ 70.6231972, 24.2391684 ], [ 70.6231908, 24.2386538 ], [ 70.6220747, 24.2391803 ], [ 70.6218039, 24.2399552 ], [ 70.6209621, 24.2399641 ], [ 70.6206912, 24.2407392 ], [ 70.6190091, 24.2408853 ], [ 70.6187302, 24.2410174 ], [ 70.6191377, 24.2399836 ], [ 70.619131, 24.2394689 ], [ 70.6188472, 24.2392147 ], [ 70.6186977, 24.2384442 ], [ 70.618417, 24.2384472 ], [ 70.6184236, 24.2389618 ], [ 70.6172979, 24.2387165 ], [ 70.6178492, 24.2379386 ], [ 70.6172881, 24.2379444 ], [ 70.617197, 24.2383718 ], [ 70.6167334, 24.2384651 ], [ 70.6170237, 24.239234 ], [ 70.6164641, 24.2393682 ], [ 70.6159094, 24.2398889 ], [ 70.6153497, 24.2400238 ], [ 70.6150594, 24.239255 ], [ 70.6144983, 24.2392608 ], [ 70.6160086, 24.2366713 ], [ 70.6158623, 24.2361582 ], [ 70.6147415, 24.2362984 ], [ 70.6141868, 24.236819 ], [ 70.6133465, 24.2369569 ], [ 70.6130757, 24.2377318 ], [ 70.6125145, 24.2377379 ], [ 70.612521, 24.2382525 ], [ 70.6119596, 24.2382584 ], [ 70.6118254, 24.2387745 ], [ 70.611548, 24.2390348 ], [ 70.6115512, 24.2392922 ], [ 70.6121254, 24.2403155 ], [ 70.6126931, 24.2408241 ], [ 70.6127094, 24.2421106 ], [ 70.6122955, 24.2426298 ], [ 70.6080957, 24.2434462 ], [ 70.6079453, 24.2426757 ], [ 70.6083537, 24.241642 ], [ 70.6052669, 24.2416747 ], [ 70.6052702, 24.241932 ], [ 70.6058315, 24.2419261 ], [ 70.6058347, 24.2421833 ], [ 70.6047105, 24.2420662 ], [ 70.6041558, 24.2425867 ], [ 70.6035962, 24.2427216 ], [ 70.6045907, 24.2437405 ], [ 70.6045971, 24.2442552 ], [ 70.6041864, 24.2450316 ], [ 70.6013849, 24.2454466 ], [ 70.600827, 24.2457099 ], [ 70.5994221, 24.2455963 ], [ 70.5993278, 24.2457662 ], [ 70.5985803, 24.2456052 ], [ 70.5988561, 24.2452158 ], [ 70.5985675, 24.2445761 ], [ 70.5982868, 24.2445789 ], [ 70.5980141, 24.2452247 ], [ 70.5949303, 24.2455145 ], [ 70.5946531, 24.2457747 ], [ 70.5921401, 24.2468305 ], [ 70.591016, 24.2467139 ], [ 70.5910288, 24.2477432 ], [ 70.5918706, 24.2477343 ], [ 70.5915996, 24.2485092 ], [ 70.5904786, 24.2486492 ], [ 70.5902014, 24.2489095 ], [ 70.5862692, 24.2486931 ], [ 70.5854225, 24.2483164 ], [ 70.5855592, 24.2480576 ], [ 70.5855495, 24.2472858 ], [ 70.5856871, 24.2470268 ], [ 70.5842855, 24.2471697 ], [ 70.5823307, 24.2479622 ], [ 70.58205, 24.247965 ], [ 70.5814839, 24.2475853 ], [ 70.5816302, 24.2480985 ], [ 70.5827623, 24.2488588 ], [ 70.5827782, 24.2501453 ], [ 70.5819489, 24.2511833 ], [ 70.5818187, 24.2519567 ], [ 70.5806992, 24.2522257 ], [ 70.5808423, 24.2524816 ], [ 70.580855, 24.2535109 ], [ 70.5811388, 24.2537653 ], [ 70.5810054, 24.2542814 ], [ 70.5801634, 24.2542901 ], [ 70.5801572, 24.2537755 ], [ 70.5777193, 24.2531975 ], [ 70.5778992, 24.2527694 ], [ 70.5767782, 24.2529093 ], [ 70.5756461, 24.2521491 ], [ 70.5750831, 24.2520266 ], [ 70.5750768, 24.251512 ], [ 70.5731075, 24.2511459 ], [ 70.571143, 24.2511663 ], [ 70.5708638, 24.2512982 ], [ 70.5704583, 24.2525891 ], [ 70.5704647, 24.2531038 ], [ 70.569919, 24.2543961 ], [ 70.5699349, 24.2556827 ], [ 70.5709256, 24.2563154 ], [ 70.571487, 24.2563096 ], [ 70.5716284, 24.2564373 ], [ 70.5719217, 24.2574636 ], [ 70.5726318, 24.2580992 ], [ 70.5731946, 24.2582224 ], [ 70.5733407, 24.2587358 ], [ 70.5736246, 24.2589902 ], [ 70.5747758, 24.2612943 ], [ 70.5750596, 24.2615487 ], [ 70.5750818, 24.26335 ], [ 70.5748043, 24.2636101 ], [ 70.5746709, 24.2641262 ], [ 70.5752305, 24.2639913 ], [ 70.5759239, 24.2633411 ], [ 70.5761918, 24.262309 ], [ 70.5756051, 24.2602563 ], [ 70.5750311, 24.2592328 ], [ 70.5741764, 24.2582124 ], [ 70.5743046, 24.2571816 ], [ 70.575432, 24.2575555 ], [ 70.5759933, 24.2575498 ], [ 70.5776867, 24.2583043 ], [ 70.5783959, 24.2589406 ], [ 70.5782657, 24.259714 ], [ 70.5799527, 24.2599539 ], [ 70.5799591, 24.2604685 ], [ 70.5805204, 24.2604627 ], [ 70.5805268, 24.2609773 ], [ 70.5810882, 24.2609715 ], [ 70.5812343, 24.2614846 ], [ 70.581802, 24.2619934 ], [ 70.5820923, 24.2627624 ], [ 70.5825185, 24.2631436 ], [ 70.5835051, 24.2635197 ], [ 70.5836556, 24.2642903 ], [ 70.5842169, 24.2642844 ], [ 70.5842233, 24.2647991 ], [ 70.5847863, 24.2649214 ], [ 70.5849277, 24.2650489 ], [ 70.5853404, 24.2657025 ], [ 70.5863272, 24.2660788 ], [ 70.5863336, 24.2665934 ], [ 70.586197, 24.2668522 ], [ 70.5847919, 24.2667376 ], [ 70.5831159, 24.2673989 ], [ 70.5833085, 24.2680805 ], [ 70.5828432, 24.2680448 ], [ 70.582564, 24.2681767 ], [ 70.5825799, 24.2694632 ], [ 70.582296, 24.2692088 ], [ 70.5820153, 24.2692118 ], [ 70.5820186, 24.2694691 ], [ 70.5822038, 24.2695549 ], [ 70.5816162, 24.2710173 ], [ 70.5813387, 24.2712776 ], [ 70.581345, 24.2717922 ], [ 70.5814875, 24.2719191 ], [ 70.5820488, 24.2719132 ], [ 70.5821904, 24.2720408 ], [ 70.5822062, 24.2733273 ], [ 70.5820696, 24.273586 ], [ 70.5831892, 24.2733171 ], [ 70.5833417, 24.2743449 ], [ 70.5832083, 24.274861 ], [ 70.5837696, 24.2748552 ], [ 70.5836321, 24.2751139 ], [ 70.5837825, 24.2758845 ], [ 70.5849101, 24.2762581 ], [ 70.5850514, 24.2763859 ], [ 70.5850611, 24.2771578 ], [ 70.585291298906711, 24.277767516023196 ], [ 70.589167, 24.275278 ], [ 70.592778, 24.271667 ], [ 70.598333, 24.269167 ], [ 70.602778, 24.265833 ], [ 70.6075, 24.262778 ], [ 70.613056, 24.260278 ], [ 70.617778, 24.257222 ], [ 70.623056, 24.254444 ], [ 70.627778, 24.251389 ], [ 70.633333, 24.248889 ], [ 70.638611, 24.246111 ], [ 70.644167, 24.243611 ], [ 70.650556, 24.241389 ], [ 70.658056, 24.24 ], [ 70.664167, 24.24 ], [ 70.669722, 24.240833 ], [ 70.675556, 24.241667 ], [ 70.681111, 24.242778 ], [ 70.686667, 24.243611 ], [ 70.693056, 24.243611 ], [ 70.699722, 24.242778 ], [ 70.704167, 24.239722 ], [ 70.708889, 24.236667 ], [ 70.713889, 24.235 ], [ 70.718889, 24.236667 ], [ 70.722778, 24.24 ], [ 70.728056, 24.241667 ], [ 70.734167, 24.241667 ], [ 70.740833, 24.240833 ], [ 70.748333, 24.239444 ], [ 70.754722, 24.237222 ], [ 70.761944, 24.235833 ], [ 70.767778, 24.236667 ], [ 70.773333, 24.2375 ], [ 70.778889, 24.238333 ], [ 70.785, 24.238333 ], [ 70.790833, 24.239444 ], [ 70.795833, 24.241111 ], [ 70.800833, 24.242778 ], [ 70.806111, 24.244444 ], [ 70.810556, 24.246944 ], [ 70.815556, 24.248611 ], [ 70.820278, 24.251389 ], [ 70.824722, 24.253889 ], [ 70.829167, 24.256389 ], [ 70.834167, 24.258056 ], [ 70.838889, 24.260556 ], [ 70.843889, 24.262222 ], [ 70.849444, 24.263056 ], [ 70.854722, 24.264722 ], [ 70.860278, 24.265833 ], [ 70.865833, 24.266667 ], [ 70.871111, 24.268333 ], [ 70.876111, 24.27 ], [ 70.880556, 24.2725 ], [ 70.885833, 24.274444 ], [ 70.886944, 24.278333 ], [ 70.883056, 24.281944 ], [ 70.878611, 24.285 ], [ 70.873889, 24.288056 ], [ 70.869444, 24.291389 ], [ 70.865556, 24.295 ], [ 70.863889, 24.299444 ], [ 70.862778, 24.304722 ], [ 70.862778, 24.310278 ], [ 70.864444, 24.316944 ], [ 70.867778, 24.321111 ], [ 70.8725, 24.323889 ], [ 70.876944, 24.326389 ], [ 70.881944, 24.328056 ], [ 70.887222, 24.329722 ], [ 70.891667, 24.332222 ], [ 70.895556, 24.335556 ], [ 70.900278, 24.338056 ], [ 70.904167, 24.341389 ], [ 70.9075, 24.345556 ], [ 70.911667, 24.349167 ], [ 70.916111, 24.351667 ], [ 70.92, 24.355 ], [ 70.924167, 24.358333 ], [ 70.928056, 24.361667 ], [ 70.9325, 24.364167 ], [ 70.937222, 24.366667 ], [ 70.941667, 24.369167 ], [ 70.946667, 24.370833 ], [ 70.951944, 24.372778 ], [ 70.956944, 24.374444 ], [ 70.963056, 24.374444 ], [ 70.969444, 24.374444 ], [ 70.975833, 24.3725 ], [ 70.982222, 24.370278 ], [ 70.986667, 24.367222 ], [ 70.992222, 24.364444 ], [ 70.998611, 24.3625 ], [ 71.006111, 24.360833 ], [ 71.012222, 24.360833 ], [ 71.017778, 24.361667 ], [ 71.0270006, 24.3468562 ], [ 71.0424716, 24.3497592 ], [ 71.0586076, 24.3606762 ], [ 71.060996, 24.364466 ], [ 71.0643831, 24.3702908 ], [ 71.0675839, 24.3756529 ], [ 71.0745433, 24.3834688 ], [ 71.0769992, 24.3863744 ], [ 71.0818185, 24.3905444 ], [ 71.0850032, 24.3932345 ], [ 71.0853597, 24.393326 ], [ 71.1071912, 24.3950333 ], [ 71.1123067, 24.3965126 ], [ 71.1210786, 24.4014683 ], [ 71.1244045, 24.4053432 ], [ 71.1275491, 24.420485 ], [ 71.1273646, 24.4209022 ], [ 71.1263088, 24.4216651 ], [ 71.1169168, 24.4281554 ], [ 71.1093487, 24.4333658 ], [ 71.1037343, 24.4373686 ], [ 71.0968464, 24.4376235 ], [ 71.092778, 24.443333 ], [ 71.0875, 24.445833 ], [ 71.081944, 24.448611 ], [ 71.075278, 24.449444 ], [ 71.068889, 24.449444 ], [ 71.061667, 24.450833 ], [ 71.055278, 24.453611 ], [ 71.049722, 24.456389 ], [ 71.044444, 24.458889 ], [ 71.038611, 24.458056 ], [ 71.033611, 24.456389 ], [ 71.028611, 24.454722 ], [ 71.023333, 24.453056 ], [ 71.016667, 24.453611 ], [ 71.010833, 24.455 ], [ 71.006111, 24.458056 ], [ 71.003333, 24.462222 ], [ 71.000556, 24.466389 ], [ 70.999722, 24.471667 ], [ 70.998611, 24.476667 ], [ 70.995833, 24.480833 ], [ 70.995833, 24.486389 ], [ 70.995833, 24.492222 ], [ 70.9975, 24.498889 ], [ 70.998333, 24.505 ], [ 70.999167, 24.511111 ], [ 70.999167, 24.516667 ], [ 71.000833, 24.523333 ], [ 71.003333, 24.529444 ], [ 71.005556, 24.535 ], [ 71.005556, 24.540833 ], [ 71.001944, 24.544444 ], [ 70.996389, 24.546944 ], [ 70.990833, 24.549722 ], [ 70.985278, 24.552222 ], [ 70.980556, 24.555278 ], [ 70.979722, 24.560556 ], [ 70.981944, 24.566389 ], [ 70.983333, 24.571667 ], [ 70.9825, 24.576944 ], [ 70.981667, 24.581944 ], [ 70.979722, 24.586667 ], [ 70.977778, 24.591389 ], [ 70.976944, 24.596389 ], [ 70.977778, 24.6025 ], [ 70.98, 24.608333 ], [ 70.982222, 24.614167 ], [ 70.9856161, 24.6166534 ], [ 70.990208, 24.6198331 ], [ 70.9956012, 24.6247853 ], [ 71.0019956, 24.6312027 ], [ 71.0087474, 24.6379148 ], [ 71.0104641, 24.638695 ], [ 71.0133823, 24.6395922 ], [ 71.01909, 24.6408404 ], [ 71.0278776, 24.6403699 ], [ 71.0338485, 24.6422342 ], [ 71.0392067, 24.6439566 ], [ 71.0478756, 24.6467689 ], [ 71.0502628, 24.6475061 ], [ 71.057537, 24.6507055 ], [ 71.0606451, 24.6525484 ], [ 71.063985, 24.6545415 ], [ 71.0689404, 24.6573109 ], [ 71.0724884, 24.6593483 ], [ 71.0758049, 24.6613071 ], [ 71.0785706, 24.663878 ], [ 71.0814915, 24.6665851 ], [ 71.0838653, 24.6688105 ], [ 71.0853751, 24.6702325 ], [ 71.0868345, 24.6716208 ], [ 71.0893295, 24.6747294 ], [ 71.0907518, 24.6765534 ], [ 71.0933192, 24.6796689 ], [ 71.0958295, 24.682779 ], [ 71.0992783, 24.6870932 ], [ 71.0993134, 24.6872172 ], [ 71.099326, 24.6873613 ], [ 71.0992646, 24.6875872 ], [ 71.0988695, 24.6880653 ], [ 71.0971701, 24.6900049 ], [ 71.095852, 24.6915176 ], [ 71.0950401, 24.6916621 ], [ 71.0929662, 24.6937983 ], [ 71.0918518, 24.6949058 ], [ 71.0909537, 24.6959388 ], [ 71.0884075, 24.6989549 ], [ 71.0865833, 24.7002767 ], [ 71.0846564, 24.7020504 ], [ 71.0831506, 24.7034267 ], [ 71.0809764, 24.7054206 ], [ 71.0786418, 24.7073371 ], [ 71.0773924, 24.708445 ], [ 71.0750133, 24.710618 ], [ 71.0728303, 24.7125636 ], [ 71.070287, 24.7148844 ], [ 71.0669659, 24.717732 ], [ 71.0667465, 24.7180012 ], [ 71.0656038, 24.7206262 ], [ 71.0646766, 24.7226996 ], [ 71.0639307, 24.7245997 ], [ 71.0635396, 24.7255048 ], [ 71.0630295, 24.7268267 ], [ 71.061874, 24.7293604 ], [ 71.060682, 24.7320198 ], [ 71.0593559, 24.7350513 ], [ 71.0577281, 24.738665 ], [ 71.0572206, 24.7398043 ], [ 71.05546, 24.7438873 ], [ 71.054025, 24.7471064 ], [ 71.0531002, 24.7491924 ], [ 71.0522285, 24.7513988 ], [ 71.0518672, 24.7525697 ], [ 71.0514455, 24.7541033 ], [ 71.0514426, 24.7545824 ], [ 71.0507924, 24.7552356 ], [ 71.0503161, 24.7559162 ], [ 71.0487727, 24.7589389 ], [ 71.0481593, 24.760487 ], [ 71.0477851, 24.7617372 ], [ 71.0464821, 24.7638934 ], [ 71.045424, 24.7660907 ], [ 71.0444302, 24.7683272 ], [ 71.043176, 24.7712653 ], [ 71.0418076, 24.7743741 ], [ 71.0408192, 24.7766312 ], [ 71.0394107, 24.7794727 ], [ 71.0384017, 24.7816169 ], [ 71.0373851, 24.7838935 ], [ 71.035896, 24.787189 ], [ 71.0349406, 24.7895143 ], [ 71.033501, 24.7932147 ], [ 71.0322519, 24.7965221 ], [ 71.0312844, 24.7990885 ], [ 71.0302564, 24.8019628 ], [ 71.0296872, 24.8042895 ], [ 71.0286985, 24.8081164 ], [ 71.0285234, 24.808534 ], [ 71.0263309, 24.8114327 ], [ 71.0243169, 24.8137745 ], [ 71.0225716, 24.8159637 ], [ 71.0204786, 24.8184685 ], [ 71.0193642, 24.8197666 ], [ 71.0194766, 24.8200846 ], [ 71.0190085, 24.8203842 ], [ 71.0177044, 24.822677 ], [ 71.0162984, 24.8253046 ], [ 71.0144032, 24.8286711 ], [ 71.0135148, 24.8302626 ], [ 71.0117864, 24.8332937 ], [ 71.0109396, 24.834946 ], [ 71.0116708, 24.8356315 ], [ 71.0124779, 24.83661 ], [ 71.0125825, 24.8368142 ], [ 71.0125498, 24.8369194 ], [ 71.0123942, 24.8370501 ], [ 71.0121581, 24.8370557 ], [ 71.0115616, 24.8367285 ], [ 71.0108447, 24.8369529 ], [ 71.0103254, 24.8377168 ], [ 71.0097364, 24.8381797 ], [ 71.0096519, 24.8383036 ], [ 71.0096591, 24.8388581 ], [ 71.0095982, 24.8389898 ], [ 71.0089824, 24.8395421 ], [ 71.0082566, 24.8401579 ], [ 71.0075989, 24.8410247 ], [ 71.0067975, 24.8422609 ], [ 71.0060196, 24.8434884 ], [ 71.0046445, 24.8456743 ], [ 71.0036078, 24.8472883 ], [ 71.0020489, 24.8495379 ], [ 71.0008781, 24.8512621 ], [ 71.0003047, 24.8521994 ], [ 70.9995443, 24.8537176 ], [ 70.9972142, 24.857227 ], [ 70.9964881, 24.8591966 ], [ 70.9949893, 24.8618218 ], [ 70.9947402, 24.8623701 ], [ 70.9926124, 24.864813 ], [ 70.9923278, 24.8653255 ], [ 70.9919874, 24.8670662 ], [ 70.9905988, 24.8703792 ], [ 70.9888095, 24.8712185 ], [ 70.9875907, 24.8724809 ], [ 70.9873139, 24.8728583 ], [ 70.9869296, 24.8732555 ], [ 70.9866608, 24.8735297 ], [ 70.9862671, 24.8739587 ], [ 70.984871, 24.875795 ], [ 70.9834239, 24.8777239 ], [ 70.9827432, 24.878687 ], [ 70.9813967, 24.880427 ], [ 70.9795913, 24.8828155 ], [ 70.9775123, 24.885563 ], [ 70.9753078, 24.8884543 ], [ 70.9730695, 24.8913585 ], [ 70.9707639, 24.8943389 ], [ 70.9695652, 24.8959586 ], [ 70.9690864, 24.8965877 ], [ 70.9684274, 24.8975667 ], [ 70.9671467, 24.8992783 ], [ 70.9663103, 24.9003984 ], [ 70.9647348, 24.9024352 ], [ 70.9633454, 24.9042233 ], [ 70.9620781, 24.9058769 ], [ 70.9618281, 24.906269 ], [ 70.9609575, 24.9072793 ], [ 70.960299, 24.9081804 ], [ 70.9587825, 24.9101662 ], [ 70.9575076, 24.9118633 ], [ 70.956016, 24.9138013 ], [ 70.9557669, 24.9142112 ], [ 70.9530637, 24.9169189 ], [ 70.9526464, 24.9176981 ], [ 70.9513989, 24.9193843 ], [ 70.9487955, 24.9216382 ], [ 70.9452464, 24.9259562 ], [ 70.9451433, 24.9261725 ], [ 70.9407779, 24.9353351 ], [ 70.9388992, 24.9394104 ], [ 70.9385076, 24.9413989 ], [ 70.9379809, 24.9427579 ], [ 70.9355594, 24.9497445 ], [ 70.932787, 24.9586381 ], [ 70.9323815, 24.9599772 ], [ 70.9300394, 24.967712 ], [ 70.9283313, 24.9719934 ], [ 70.9280102, 24.9740621 ], [ 70.9278078, 24.9758253 ], [ 70.9263186, 24.9788596 ], [ 70.9223704, 24.9918042 ], [ 70.9217353, 24.9938862 ], [ 70.9185338, 25.0058891 ], [ 70.9162378, 25.0156935 ], [ 70.9136393, 25.0265588 ], [ 70.9108219, 25.0391436 ], [ 70.9098069, 25.0417604 ], [ 70.9098427, 25.0491434 ], [ 70.909516, 25.0497883 ], [ 70.9089678, 25.0507321 ], [ 70.9076401, 25.0525779 ], [ 70.9071074, 25.0566619 ], [ 70.9069507, 25.0584876 ], [ 70.906393, 25.0613589 ], [ 70.9054777, 25.0640089 ], [ 70.9051794, 25.0661727 ], [ 70.9049568, 25.0677723 ], [ 70.9042556, 25.0700381 ], [ 70.9037417, 25.07261 ], [ 70.903753, 25.0731036 ], [ 70.9027407, 25.0770179 ], [ 70.9024178, 25.0804336 ], [ 70.9006545, 25.0900926 ], [ 70.899204, 25.098278 ], [ 70.898336, 25.1028959 ], [ 70.8977867, 25.1049123 ], [ 70.8972422, 25.1080474 ], [ 70.8968662, 25.1116681 ], [ 70.8967251, 25.1148293 ], [ 70.8968329, 25.1156686 ], [ 70.8967852, 25.116575 ], [ 70.8963528, 25.1178471 ], [ 70.8955953, 25.1197112 ], [ 70.8955251, 25.1223481 ], [ 70.8942692, 25.1277436 ], [ 70.8932827, 25.1325084 ], [ 70.8932404, 25.1333763 ], [ 70.8929598, 25.1342184 ], [ 70.8924507, 25.1367656 ], [ 70.8916342, 25.1394939 ], [ 70.8910345, 25.1448838 ], [ 70.8900823, 25.1474982 ], [ 70.889872, 25.1483966 ], [ 70.8892567, 25.1492391 ], [ 70.880855, 25.1569316 ], [ 70.877433, 25.1600668 ], [ 70.8764073, 25.1608854 ], [ 70.8741741, 25.1630548 ], [ 70.8721555, 25.1648071 ], [ 70.8705574, 25.1661845 ], [ 70.8656351, 25.1707211 ], [ 70.8654714, 25.1715324 ], [ 70.8652832, 25.1719091 ], [ 70.8645268, 25.1730865 ], [ 70.8639308, 25.1736948 ], [ 70.8610308, 25.1753178 ], [ 70.8567924, 25.1781845 ], [ 70.8562586, 25.1789215 ], [ 70.8548848, 25.1805473 ], [ 70.8546557, 25.1809415 ], [ 70.8539176, 25.1814964 ], [ 70.8523592, 25.1828431 ], [ 70.8490622, 25.1860456 ], [ 70.8463521, 25.1885407 ], [ 70.8445406, 25.1905548 ], [ 70.8444998, 25.1915693 ], [ 70.8439827, 25.1922348 ], [ 70.843002, 25.1928858 ], [ 70.8423653, 25.1931222 ], [ 70.839865, 25.1949864 ], [ 70.8398081, 25.1950288 ], [ 70.8389884, 25.1957482 ], [ 70.8386566, 25.1960802 ], [ 70.8371809, 25.1975571 ], [ 70.8342516, 25.2004886 ], [ 70.8288207, 25.2057 ], [ 70.8269227, 25.207719 ], [ 70.8266127, 25.2080487 ], [ 70.8247298, 25.2097911 ], [ 70.8216608, 25.2127328 ], [ 70.8197451, 25.2147086 ], [ 70.8168012, 25.217537 ], [ 70.8149558, 25.219489 ], [ 70.8143088, 25.2203703 ], [ 70.8142568, 25.2206333 ], [ 70.8131576, 25.2227439 ], [ 70.8126164, 25.2230986 ], [ 70.8105505, 25.2235728 ], [ 70.8094036, 25.2260152 ], [ 70.808887, 25.2266437 ], [ 70.8052548, 25.2289012 ], [ 70.8022303, 25.2312401 ], [ 70.8002911, 25.2329429 ], [ 70.7972747, 25.2358753 ], [ 70.794438, 25.2391502 ], [ 70.7910192, 25.2418587 ], [ 70.7812082, 25.2511881 ], [ 70.7705384, 25.2611121 ], [ 70.7679565, 25.263843 ], [ 70.7676608, 25.2641413 ], [ 70.76688, 25.2649289 ], [ 70.7662579, 25.2655564 ], [ 70.7653541, 25.266468 ], [ 70.7639858, 25.2678482 ], [ 70.7615187, 25.2701812 ], [ 70.7614548, 25.2702417 ], [ 70.7608106, 25.2708758 ], [ 70.7554944, 25.2761084 ], [ 70.7528589, 25.2785702 ], [ 70.7501901, 25.2884294 ], [ 70.7480958, 25.2958182 ], [ 70.745309, 25.3064131 ], [ 70.7441401, 25.3104732 ], [ 70.7436203, 25.3134798 ], [ 70.7433328, 25.314198 ], [ 70.7430844, 25.3153274 ], [ 70.7415765, 25.3208768 ], [ 70.739325, 25.3286408 ], [ 70.7385917, 25.3309905 ], [ 70.7382124, 25.3324901 ], [ 70.7382123, 25.3324967 ], [ 70.7382017, 25.332976 ], [ 70.7364239, 25.3344397 ], [ 70.7323014, 25.3378685 ], [ 70.7309678, 25.3389192 ], [ 70.7248674, 25.3441194 ], [ 70.7179226, 25.3500262 ], [ 70.7160772, 25.3514689 ], [ 70.7158144, 25.3518659 ], [ 70.7153648, 25.3520506 ], [ 70.7135082, 25.35371 ], [ 70.7061638, 25.3601011 ], [ 70.6997061, 25.365614 ], [ 70.6935874, 25.3711848 ], [ 70.6858123, 25.3782234 ], [ 70.6825748, 25.381337 ], [ 70.6796898, 25.384336 ], [ 70.6741591, 25.3895095 ], [ 70.6690259, 25.3946465 ], [ 70.6663802, 25.3971674 ], [ 70.6693215, 25.4065682 ], [ 70.6712184, 25.4125713 ], [ 70.6725585, 25.416819 ], [ 70.6734092, 25.4201051 ], [ 70.6736377, 25.4312105 ], [ 70.6737225, 25.4382262 ], [ 70.6739032, 25.4458403 ], [ 70.6741876, 25.4538148 ], [ 70.6741978, 25.4555406 ], [ 70.6744327, 25.4565839 ], [ 70.6743281, 25.4582021 ], [ 70.6739961, 25.4590613 ], [ 70.6726619, 25.4615276 ], [ 70.6735449, 25.4639648 ], [ 70.6737888, 25.4648717 ], [ 70.6738421, 25.4667036 ], [ 70.6749799, 25.47365 ], [ 70.675695, 25.4791669 ], [ 70.6759573, 25.4828744 ], [ 70.676476, 25.4883033 ], [ 70.676373, 25.4892064 ], [ 70.6769105, 25.4931591 ], [ 70.6773032, 25.495462 ], [ 70.6772158, 25.4978771 ], [ 70.677344, 25.5008142 ], [ 70.6780339, 25.5043695 ], [ 70.6779427, 25.5054826 ], [ 70.6787103, 25.5106848 ], [ 70.678772, 25.5142427 ], [ 70.6791395, 25.5174219 ], [ 70.6797118, 25.522856 ], [ 70.6796206, 25.5259164 ], [ 70.6791464, 25.5266502 ], [ 70.6755072, 25.5284307 ], [ 70.672847, 25.5299027 ], [ 70.6686322, 25.5309889 ], [ 70.6690372, 25.5380463 ], [ 70.6693328, 25.5424805 ], [ 70.6694765, 25.5457436 ], [ 70.6697764, 25.5512514 ], [ 70.6700484, 25.5587199 ], [ 70.6703, 25.5660302 ], [ 70.6706014, 25.5726568 ], [ 70.6707683, 25.5795279 ], [ 70.6708187, 25.5861852 ], [ 70.670801, 25.5914264 ], [ 70.6708874, 25.5935809 ], [ 70.6713187, 25.5971982 ], [ 70.6712929, 25.5978363 ], [ 70.6713278, 25.5982248 ], [ 70.6714807, 25.5991484 ], [ 70.6717044, 25.6003486 ], [ 70.672037, 25.6029867 ], [ 70.6724221, 25.6067571 ], [ 70.6729827, 25.6093616 ], [ 70.6728293, 25.6128634 ], [ 70.6724634, 25.6173503 ], [ 70.6724087, 25.6198414 ], [ 70.6721609, 25.6230783 ], [ 70.6720134, 25.6237405 ], [ 70.6718728, 25.6285874 ], [ 70.6718004, 25.6300562 ], [ 70.6716325, 25.6317984 ], [ 70.6716239, 25.6325814 ], [ 70.673267, 25.6383256 ], [ 70.6734011, 25.6385727 ], [ 70.6740234, 25.6392604 ], [ 70.674672, 25.6431985 ], [ 70.6750625, 25.6460038 ], [ 70.6752969, 25.6495766 ], [ 70.6754031, 25.6511206 ], [ 70.675379, 25.6517706 ], [ 70.6749879, 25.6549814 ], [ 70.675372, 25.6607903 ], [ 70.6752991, 25.6663929 ], [ 70.675364, 25.6731942 ], [ 70.6754182, 25.6746016 ], [ 70.6753822, 25.675951 ], [ 70.6740513, 25.6786328 ], [ 70.6728293, 25.6807818 ], [ 70.6723476, 25.6817192 ], [ 70.6717054, 25.6831879 ], [ 70.6707415, 25.6848761 ], [ 70.6699033, 25.6862178 ], [ 70.6685622, 25.6888704 ], [ 70.6674842, 25.6911654 ], [ 70.6664183, 25.6930807 ], [ 70.6656163, 25.694431 ], [ 70.6643018, 25.6969788 ], [ 70.6630511, 25.6995291 ], [ 70.6616534, 25.7019554 ], [ 70.6611448, 25.7028718 ], [ 70.6565808, 25.7066976 ], [ 70.6521139, 25.7102801 ], [ 70.6484027, 25.7133998 ], [ 70.6477118, 25.7135159 ], [ 70.6455792, 25.7138303 ], [ 70.6442563, 25.7139698 ], [ 70.6393575, 25.7143248 ], [ 70.6376385, 25.714305 ], [ 70.6359556, 25.7144785 ], [ 70.632463, 25.7148385 ], [ 70.6274306, 25.7152907 ], [ 70.6243184, 25.7156283 ], [ 70.6226104, 25.715775 ], [ 70.6216574, 25.7155879 ], [ 70.6200569, 25.7156756 ], [ 70.6197004, 25.7156708 ], [ 70.6157561, 25.7159112 ], [ 70.6119397, 25.7160239 ], [ 70.608117, 25.7158711 ], [ 70.6069652, 25.7156379 ], [ 70.6027136, 25.7144741 ], [ 70.6017445, 25.7141812 ], [ 70.6002001, 25.7137078 ], [ 70.5939658, 25.7119098 ], [ 70.5936751, 25.7118267 ], [ 70.5933454, 25.7117286 ], [ 70.58608, 25.708584 ], [ 70.5766463, 25.7045478 ], [ 70.5733515, 25.7031173 ], [ 70.570405, 25.7018265 ], [ 70.5665183, 25.7001434 ], [ 70.5653746, 25.6996924 ], [ 70.5604093, 25.6974618 ], [ 70.5579314, 25.6962945 ], [ 70.5528303, 25.6937238 ], [ 70.5514488, 25.6931282 ], [ 70.5487442, 25.6920618 ], [ 70.5477278, 25.6916483 ], [ 70.5445276, 25.6906048 ], [ 70.5429984, 25.6900267 ], [ 70.5368788, 25.6875344 ], [ 70.5364001, 25.6873485 ], [ 70.5297898, 25.6846068 ], [ 70.524553, 25.6847451 ], [ 70.5026566, 25.6860107 ], [ 70.500705, 25.6859237 ], [ 70.4998284, 25.6857439 ], [ 70.4985185, 25.685857 ], [ 70.4846525, 25.6851309 ], [ 70.466348, 25.6840045 ], [ 70.4504694, 25.683463 ], [ 70.4434377, 25.6825193 ], [ 70.4400592, 25.6817961 ], [ 70.4390389, 25.6818561 ], [ 70.4362043, 25.6815921 ], [ 70.4144505, 25.6786314 ], [ 70.3974528, 25.6764065 ], [ 70.3874342, 25.674986 ], [ 70.3592346, 25.6811995 ], [ 70.3020434, 25.7020074 ], [ 70.3011561, 25.7023651 ], [ 70.2970137, 25.7039834 ], [ 70.2699276, 25.7144004 ], [ 70.2637113, 25.7211658 ], [ 70.2605213, 25.7319829 ], [ 70.2603769, 25.7324412 ], [ 70.2575749, 25.7410669 ], [ 70.2558011, 25.7465637 ], [ 70.2545611, 25.7505528 ], [ 70.2537431, 25.7526256 ], [ 70.2528418, 25.7561323 ], [ 70.2487187, 25.7618565 ], [ 70.2448269, 25.7668152 ], [ 70.2381921, 25.7752301 ], [ 70.2315258, 25.7835241 ], [ 70.2235548, 25.7940326 ], [ 70.2150672, 25.801228 ], [ 70.207428, 25.8082512 ], [ 70.1985091, 25.8160899 ], [ 70.1891922, 25.8219628 ], [ 70.1823933, 25.8251952 ], [ 70.175529, 25.8290947 ], [ 70.1674523, 25.8409539 ], [ 70.1597898, 25.8524836 ], [ 70.153995, 25.8608531 ], [ 70.1520264, 25.8637583 ], [ 70.1451761, 25.8741901 ], [ 70.1384523, 25.8839956 ], [ 70.1316245, 25.8942171 ], [ 70.1280303, 25.8993372 ], [ 70.1227206, 25.9074624 ], [ 70.1167339, 25.9158841 ], [ 70.1108341, 25.9245726 ], [ 70.1025525, 25.9367907 ], [ 70.1013852, 25.93851 ], [ 70.1006385, 25.9412925 ], [ 70.0991944, 25.9493887 ], [ 70.0982117, 25.9576348 ], [ 70.0971291, 25.9678963 ], [ 70.0961785, 25.9769223 ], [ 70.09542, 25.9843805 ], [ 70.0938493, 25.9979955 ], [ 70.0947763, 25.999605 ], [ 70.0963717, 26.0016232 ], [ 70.0955638, 26.0058988 ], [ 70.0960283, 26.0067493 ], [ 70.0962032, 26.0089747 ], [ 70.095653, 26.0096923 ], [ 70.0945188, 26.0107123 ], [ 70.0938286, 26.0123853 ], [ 70.0939598, 26.0132385 ], [ 70.0947799, 26.0149669 ], [ 70.0942377, 26.0155727 ], [ 70.0939949, 26.0170886 ], [ 70.0938208, 26.0186727 ], [ 70.0917332, 26.0205279 ], [ 70.0907566, 26.0257469 ], [ 70.0898543, 26.0362384 ], [ 70.089709, 26.0377504 ], [ 70.0888432, 26.0431545 ], [ 70.0885686, 26.0479105 ], [ 70.0878712, 26.0506779 ], [ 70.08773, 26.0540689 ], [ 70.0874657, 26.0570596 ], [ 70.0864182, 26.068928 ], [ 70.0861449, 26.0714873 ], [ 70.0858069, 26.0747018 ], [ 70.085424, 26.0819152 ], [ 70.0905933, 26.0912573 ], [ 70.0911992, 26.0914238 ], [ 70.0982008, 26.099361 ], [ 70.1036682, 26.1074217 ], [ 70.1057754, 26.1104892 ], [ 70.1086032, 26.1139576 ], [ 70.1104328, 26.1162181 ], [ 70.1166743, 26.1238061 ], [ 70.1184478, 26.1249611 ], [ 70.1219639, 26.129715 ], [ 70.126364, 26.135626 ], [ 70.1272648, 26.1362857 ], [ 70.1328099, 26.1439599 ], [ 70.1370119, 26.1497776 ], [ 70.1385864, 26.1498725 ], [ 70.1424128, 26.1556171 ], [ 70.1456765, 26.1624423 ], [ 70.1501955, 26.1720022 ], [ 70.1531873, 26.178423 ], [ 70.1542532, 26.1815295 ], [ 70.1563657, 26.1871469 ], [ 70.1596916, 26.1958466 ], [ 70.1606438, 26.1978249 ], [ 70.1660125, 26.2089644 ], [ 70.1695675, 26.2170623 ], [ 70.172247, 26.2297764 ], [ 70.1748751, 26.2419348 ], [ 70.1758374, 26.2461294 ], [ 70.1768771, 26.2508584 ], [ 70.1736294, 26.2624975 ], [ 70.1710175, 26.2722522 ], [ 70.169435, 26.2780263 ], [ 70.1668585, 26.2874137 ], [ 70.1650024, 26.2943028 ], [ 70.1676535, 26.3026453 ], [ 70.1711409, 26.3135747 ], [ 70.1728232, 26.318789 ], [ 70.1743665, 26.3227986 ], [ 70.1771088, 26.3299674 ], [ 70.1771828, 26.3319766 ], [ 70.1789788, 26.3374838 ], [ 70.1810398, 26.3438248 ], [ 70.181999, 26.3484253 ], [ 70.1827849, 26.3522594 ], [ 70.1844833, 26.3606905 ], [ 70.1863361, 26.3697487 ], [ 70.1861307, 26.372133 ], [ 70.186916, 26.3746947 ], [ 70.1860245, 26.379318 ], [ 70.1833047, 26.3942588 ], [ 70.1822544, 26.4007947 ], [ 70.180836, 26.4099184 ], [ 70.1800678, 26.4149429 ], [ 70.1786436, 26.4233699 ], [ 70.179342, 26.4323559 ], [ 70.179754, 26.4378723 ], [ 70.180468, 26.4438663 ], [ 70.1819657, 26.4555954 ], [ 70.1826916, 26.4587022 ], [ 70.1840911, 26.4647701 ], [ 70.184523, 26.4672096 ], [ 70.1848266, 26.4728698 ], [ 70.1852359, 26.4747915 ], [ 70.1862739, 26.4794218 ], [ 70.1861001, 26.482818 ], [ 70.1857123, 26.4888255 ], [ 70.1856516, 26.48966 ], [ 70.1850025, 26.4940194 ], [ 70.1834426, 26.4992529 ], [ 70.1832655, 26.5019572 ], [ 70.1816294, 26.5050277 ], [ 70.1808333, 26.50982 ], [ 70.1810871, 26.5146928 ], [ 70.1808532, 26.5163872 ], [ 70.1795673, 26.5247036 ], [ 70.1778743, 26.5370633 ], [ 70.1776072, 26.5405946 ], [ 70.1776957, 26.5409929 ], [ 70.1766067, 26.5443872 ], [ 70.1763787, 26.5462003 ], [ 70.1766968, 26.5486141 ], [ 70.1752457, 26.552429 ], [ 70.1722964, 26.5544401 ], [ 70.167161, 26.5578129 ], [ 70.1624253, 26.5609175 ], [ 70.1572116, 26.5643486 ], [ 70.153044, 26.5664204 ], [ 70.1450339, 26.5703399 ], [ 70.1402874, 26.5719534 ], [ 70.1315327, 26.5792976 ], [ 70.1292941, 26.5810746 ], [ 70.1264215, 26.5828774 ], [ 70.1182772, 26.5880119 ], [ 70.1137175, 26.5889478 ], [ 70.107395, 26.5901399 ], [ 70.1002732, 26.5917143 ], [ 70.0855495, 26.5949973 ], [ 70.0769605, 26.5967697 ], [ 70.0708183, 26.5982605 ], [ 70.05602, 26.6018705 ], [ 70.0450412, 26.599996 ], [ 70.0371748, 26.5985848 ], [ 70.0269041, 26.5967256 ], [ 70.0139222, 26.5944653 ], [ 70.0031472, 26.5928478 ], [ 69.9954402, 26.5916951 ], [ 69.9943099, 26.5915018 ], [ 69.9931426, 26.5914361 ], [ 69.9868464, 26.591013 ], [ 69.9844313, 26.5905079 ], [ 69.8868902, 26.5673512 ], [ 69.8243224, 26.590009 ], [ 69.8196672, 26.591512 ], [ 69.8165679, 26.5925172 ], [ 69.8149257, 26.5928274 ], [ 69.8068063, 26.5951897 ], [ 69.7928974, 26.5994098 ], [ 69.7896681, 26.6013352 ], [ 69.7894417, 26.601433 ], [ 69.7894025, 26.6017573 ], [ 69.7895205, 26.6022005 ], [ 69.7898086, 26.602978 ], [ 69.7899835, 26.605959 ], [ 69.7879498, 26.607395 ], [ 69.785575, 26.6086094 ], [ 69.7821139, 26.6108833 ], [ 69.7795953, 26.6118406 ], [ 69.7789918, 26.612184 ], [ 69.776654, 26.6140262 ], [ 69.7734482, 26.6166352 ], [ 69.7711887, 26.6179128 ], [ 69.7690424, 26.6200915 ], [ 69.7699216, 26.6214013 ], [ 69.7692559, 26.6216689 ], [ 69.7664607, 26.6247933 ], [ 69.7657317, 26.6261217 ], [ 69.7656013, 26.6269261 ], [ 69.7646929, 26.6279966 ], [ 69.7636635, 26.6284728 ], [ 69.7609765, 26.6288771 ], [ 69.7593445, 26.6289282 ], [ 69.7578232, 26.6285628 ], [ 69.7572546, 26.6286254 ], [ 69.7563557, 26.6293356 ], [ 69.7555745, 26.6322981 ], [ 69.7555321, 26.6359625 ], [ 69.7529658, 26.6373052 ], [ 69.7523285, 26.6377645 ], [ 69.7507851, 26.638957 ], [ 69.7462522, 26.6398556 ], [ 69.7448065, 26.63959 ], [ 69.7437397, 26.640216 ], [ 69.7424499, 26.6412672 ], [ 69.7411106, 26.6436247 ], [ 69.7368073, 26.6460252 ], [ 69.7354405, 26.6468558 ], [ 69.7344618, 26.6475369 ], [ 69.7320348, 26.6499987 ], [ 69.7311994, 26.650773 ], [ 69.7307093, 26.6508456 ], [ 69.729968, 26.6506735 ], [ 69.7291097, 26.6509082 ], [ 69.7267821, 26.6524608 ], [ 69.7232485, 26.6544251 ], [ 69.7155522, 26.6580409 ], [ 69.7083043, 26.6614826 ], [ 69.7040316, 26.6631912 ], [ 69.6939309, 26.6668187 ], [ 69.6933177, 26.6684976 ], [ 69.6864679, 26.6717898 ], [ 69.6837315, 26.6728818 ], [ 69.6814028, 26.6741243 ], [ 69.6807588, 26.6750838 ], [ 69.6762959, 26.6759856 ], [ 69.6731765, 26.6768978 ], [ 69.6688619, 26.6784321 ], [ 69.6684204, 26.6778583 ], [ 69.6676398, 26.6780557 ], [ 69.6631453, 26.6800721 ], [ 69.6583541, 26.6823146 ], [ 69.6575135, 26.6833682 ], [ 69.6569625, 26.6830557 ], [ 69.6560334, 26.6830854 ], [ 69.6464467, 26.6871777 ], [ 69.6391334, 26.6903012 ], [ 69.630443, 26.6940568 ], [ 69.6254251, 26.696166 ], [ 69.6218095, 26.6976733 ], [ 69.6196487, 26.6988048 ], [ 69.6156517, 26.7006206 ], [ 69.6051916, 26.7048384 ], [ 69.6005718, 26.7070126 ], [ 69.5996657, 26.7073346 ], [ 69.5948463, 26.7094105 ], [ 69.5940138, 26.7099841 ], [ 69.5912028, 26.7110062 ], [ 69.587039, 26.7126197 ], [ 69.582277, 26.7153942 ], [ 69.577478, 26.718274 ], [ 69.5757442, 26.7198796 ], [ 69.569264, 26.7202735 ], [ 69.5668339, 26.7213142 ], [ 69.5605339, 26.7238384 ], [ 69.5532308, 26.726855 ], [ 69.5510097, 26.7283401 ], [ 69.543931, 26.7333063 ], [ 69.5411815, 26.7344655 ], [ 69.5360051, 26.734894 ], [ 69.5337719, 26.7352651 ], [ 69.5300485, 26.736802 ], [ 69.5280746, 26.7376363 ], [ 69.5250531, 26.7390175 ], [ 69.5203649, 26.7412356 ], [ 69.5173104, 26.7427203 ], [ 69.516436, 26.7429912 ], [ 69.5114431, 26.7443079 ], [ 69.5109037, 26.7457038 ], [ 69.5095325, 26.7492078 ], [ 69.5084626, 26.7519308 ], [ 69.50753, 26.7543551 ], [ 69.5077392, 26.75579 ], [ 69.5064912, 26.7578871 ], [ 69.5052957, 26.7598746 ], [ 69.5038395, 26.7623584 ], [ 69.502735, 26.7648536 ], [ 69.5013711, 26.7678486 ], [ 69.5006431, 26.7694069 ], [ 69.4991655, 26.7727288 ], [ 69.4980224, 26.7753483 ], [ 69.4971848, 26.7772631 ], [ 69.4965025, 26.7788759 ], [ 69.4966485, 26.7792872 ], [ 69.496574, 26.7796242 ], [ 69.4967606, 26.7808043 ], [ 69.4961327, 26.7813958 ], [ 69.4958592, 26.7817626 ], [ 69.4952557, 26.7827027 ], [ 69.4952109, 26.7830894 ], [ 69.4946157, 26.7844425 ], [ 69.4942423, 26.7851007 ], [ 69.4935364, 26.787498 ], [ 69.4935058, 26.788098 ], [ 69.4929208, 26.7898171 ], [ 69.4918466, 26.7922174 ], [ 69.4912857, 26.7926812 ], [ 69.4903295, 26.7947802 ], [ 69.4902748, 26.795419 ], [ 69.4899438, 26.7959297 ], [ 69.4884206, 26.7970212 ], [ 69.4880963, 26.7974282 ], [ 69.4872243, 26.8000787 ], [ 69.485887, 26.8050368 ], [ 69.4862598, 26.8082686 ], [ 69.4864653, 26.8098103 ], [ 69.4865393, 26.8121252 ], [ 69.4867753, 26.8142542 ], [ 69.4873219, 26.8165786 ], [ 69.4878487, 26.8194597 ], [ 69.489405, 26.8276539 ], [ 69.4902971, 26.8320235 ], [ 69.4906275, 26.8335959 ], [ 69.4910851, 26.8350076 ], [ 69.4924165, 26.8397659 ], [ 69.4946626, 26.8479898 ], [ 69.4955821, 26.8527094 ], [ 69.4962462, 26.854753 ], [ 69.4976994, 26.8608419 ], [ 69.498445, 26.8646823 ], [ 69.4993044, 26.8673621 ], [ 69.499658, 26.8710229 ], [ 69.500719, 26.87969 ], [ 69.5014808, 26.8855168 ], [ 69.5024287, 26.8940598 ], [ 69.5032913, 26.901125 ], [ 69.5040563, 26.9082719 ], [ 69.5046866, 26.9134673 ], [ 69.5055674, 26.9201529 ], [ 69.5074208, 26.9258169 ], [ 69.509315, 26.9309942 ], [ 69.5098284, 26.9334554 ], [ 69.51061, 26.9379184 ], [ 69.510537, 26.9401049 ], [ 69.5087367, 26.9484802 ], [ 69.5102795, 26.9619004 ], [ 69.5119875, 26.9763515 ], [ 69.5135282, 26.9884787 ], [ 69.5156836, 27.0052388 ], [ 69.5151558, 27.0097811 ], [ 69.5206865, 27.0230152 ], [ 69.5229202, 27.028542 ], [ 69.526509, 27.0367867 ], [ 69.5321996, 27.0499154 ], [ 69.5366628, 27.060483 ], [ 69.5428565, 27.0751107 ], [ 69.5447149, 27.0797715 ], [ 69.5487746, 27.0892282 ], [ 69.5523499, 27.0979081 ], [ 69.5544855, 27.1026841 ], [ 69.558629, 27.1123968 ], [ 69.5645824, 27.1268945 ], [ 69.5726387, 27.1455954 ], [ 69.5787166, 27.1601665 ], [ 69.5814148, 27.1660226 ], [ 69.5827892, 27.1694292 ], [ 69.5847445, 27.1745488 ], [ 69.5872192, 27.1805087 ], [ 69.590256, 27.1832846 ], [ 69.5956644, 27.1880968 ], [ 69.5997274, 27.1917809 ], [ 69.6015888, 27.1930251 ], [ 69.6073234, 27.1961709 ], [ 69.6143756, 27.2011786 ], [ 69.6219055, 27.2046472 ], [ 69.6269483, 27.2082883 ], [ 69.6282158, 27.209358 ], [ 69.6376216, 27.2170301 ], [ 69.6417985, 27.2202053 ], [ 69.6662598, 27.2455687 ], [ 69.6737018, 27.2532264 ], [ 69.6796239, 27.2592031 ], [ 69.6805742, 27.2601445 ], [ 69.6853678, 27.2646164 ], [ 69.6925776, 27.2713621 ], [ 69.6939294, 27.2718251 ], [ 69.6947663, 27.2738787 ], [ 69.6985496, 27.2777803 ], [ 69.7032816, 27.2828246 ], [ 69.7082275, 27.2863702 ], [ 69.7114247, 27.2878114 ], [ 69.715506, 27.2920844 ], [ 69.7170386, 27.2932261 ], [ 69.7291837, 27.3005418 ], [ 69.7378643, 27.3059319 ], [ 69.7416517, 27.3083826 ], [ 69.7479024, 27.3121918 ], [ 69.761061, 27.3199472 ], [ 69.7625021, 27.3208304 ], [ 69.7696032, 27.3274082 ], [ 69.7749058, 27.3324059 ], [ 69.7801108, 27.3376059 ], [ 69.7849207, 27.3423914 ], [ 69.7930311, 27.348401 ], [ 69.8015005, 27.3549467 ], [ 69.8076556, 27.3591304 ], [ 69.8162044, 27.3650309 ], [ 69.8330932, 27.3779423 ], [ 69.8381271, 27.3824781 ], [ 69.8394666, 27.3835313 ], [ 69.8506471, 27.3919897 ], [ 69.8559826, 27.395899 ], [ 69.8639713, 27.4013723 ], [ 69.8663096, 27.4043003 ], [ 69.8706441, 27.4083011 ], [ 69.8747103, 27.4120061 ], [ 69.8792486, 27.4180662 ], [ 69.8855035, 27.4251206 ], [ 69.8934965, 27.4340162 ], [ 69.894527, 27.4355202 ], [ 69.9073587, 27.4545791 ], [ 69.9086462, 27.4548019 ], [ 69.9108413, 27.4596334 ], [ 69.914929, 27.4663287 ], [ 69.9189126, 27.4727656 ], [ 69.9199973, 27.4728922 ], [ 69.9245441, 27.480983 ], [ 69.9297305, 27.489787 ], [ 69.9347816, 27.4968944 ], [ 69.943944, 27.5040861 ], [ 69.9591146, 27.5162129 ], [ 69.9648653, 27.5174271 ], [ 69.9677577, 27.5229942 ], [ 69.9819241, 27.5324256 ], [ 69.9848209, 27.5322734 ], [ 69.9855504, 27.5348383 ], [ 69.9948845, 27.5417326 ], [ 69.9983993, 27.5433859 ], [ 70.0034563, 27.5426201 ], [ 70.0062727, 27.5466668 ], [ 70.0091641, 27.5504884 ], [ 70.0204613, 27.5579006 ], [ 70.0232776, 27.5596595 ], [ 70.0256862, 27.5611578 ], [ 70.026625, 27.5614769 ], [ 70.0274136, 27.5620098 ], [ 70.0273655, 27.5627459 ], [ 70.0319843, 27.5726097 ], [ 70.0354031, 27.5800518 ], [ 70.0375955, 27.5847252 ], [ 70.0402026, 27.5902699 ], [ 70.0431852, 27.5967433 ], [ 70.0464039, 27.6035919 ], [ 70.0482063, 27.6075631 ], [ 70.0518434, 27.6153693 ], [ 70.0530214, 27.6180173 ], [ 70.0543325, 27.6207779 ], [ 70.0564353, 27.6253327 ], [ 70.0578301, 27.6284201 ], [ 70.059772, 27.6325658 ], [ 70.0626457, 27.6386518 ], [ 70.0637202, 27.6410426 ], [ 70.066102, 27.6461563 ], [ 70.0682977, 27.6507951 ], [ 70.0709836, 27.6567565 ], [ 70.073065, 27.6613706 ], [ 70.0757258, 27.6678265 ], [ 70.0815371, 27.6819119 ], [ 70.0859289, 27.6925736 ], [ 70.0887291, 27.6993369 ], [ 70.0914006, 27.7059002 ], [ 70.0946407, 27.7142213 ], [ 70.0983636, 27.7234429 ], [ 70.1015501, 27.730624 ], [ 70.1036208, 27.7355436 ], [ 70.1060165, 27.7414629 ], [ 70.1075797, 27.7450474 ], [ 70.1117859, 27.7545727 ], [ 70.1147042, 27.7611237 ], [ 70.1176224, 27.7690205 ], [ 70.1199377, 27.7755981 ], [ 70.1224032, 27.7817701 ], [ 70.1252571, 27.7886583 ], [ 70.1268471, 27.7922631 ], [ 70.1280079, 27.7942581 ], [ 70.1335011, 27.8048126 ], [ 70.1395758, 27.8118663 ], [ 70.1469545, 27.8200934 ], [ 70.1551905, 27.8267145 ], [ 70.1594, 27.8305282 ], [ 70.164958, 27.8356643 ], [ 70.1780789, 27.847586 ], [ 70.1852785, 27.8540883 ], [ 70.1936893, 27.8616192 ], [ 70.1989894, 27.8665035 ], [ 70.2057271, 27.8758621 ], [ 70.207676, 27.878419 ], [ 70.2118533, 27.8827577 ], [ 70.2173142, 27.8882844 ], [ 70.2225392, 27.8942603 ], [ 70.2284937, 27.9009289 ], [ 70.2372699, 27.9050017 ], [ 70.2414895, 27.9072346 ], [ 70.2459388, 27.9092588 ], [ 70.252022, 27.9122647 ], [ 70.2533738, 27.9130056 ], [ 70.2565496, 27.9146661 ], [ 70.2637164, 27.9182748 ], [ 70.268244, 27.9205405 ], [ 70.2742522, 27.9235575 ], [ 70.2799492, 27.9259914 ], [ 70.2846484, 27.9283342 ], [ 70.2891009, 27.9307405 ], [ 70.2966068, 27.9347676 ], [ 70.2974549, 27.9352017 ], [ 70.3021149, 27.9393012 ], [ 70.3062563, 27.9430858 ], [ 70.3118852, 27.9481958 ], [ 70.3152363, 27.9516223 ], [ 70.3195708, 27.9560467 ], [ 70.3293447, 27.9660173 ], [ 70.3369729, 27.973767 ], [ 70.3417795, 27.9785936 ], [ 70.3451805, 27.9821068 ], [ 70.3486459, 27.9855735 ], [ 70.3555875, 27.9926112 ], [ 70.3633444, 28.0004551 ], [ 70.3696959, 28.0070112 ], [ 70.3730326, 28.0106206 ], [ 70.3794806, 28.0113613 ], [ 70.3895871, 28.0124477 ], [ 70.4006378, 28.0137742 ], [ 70.4100363, 28.0149861 ], [ 70.4160659, 28.0157822 ], [ 70.4248206, 28.0168999 ], [ 70.4334037, 28.0178849 ], [ 70.4392901, 28.0185929 ], [ 70.4481215, 28.0213263 ], [ 70.4557519, 28.0234445 ], [ 70.46343, 28.0256569 ], [ 70.4693872, 28.0272996 ], [ 70.4755895, 28.0290701 ], [ 70.4808144, 28.0305101 ], [ 70.4901662, 28.0329965 ], [ 70.4989784, 28.0344591 ], [ 70.505877, 28.0355571 ], [ 70.5133335, 28.0334553 ], [ 70.5211871, 28.031182 ], [ 70.5228677, 28.0309031 ], [ 70.523211, 28.0308557 ], [ 70.5267768, 28.0302837 ], [ 70.5333283, 28.0292368 ], [ 70.5391756, 28.0283082 ], [ 70.540699, 28.0279781 ], [ 70.5464427, 28.0267034 ], [ 70.553814, 28.0250631 ], [ 70.5543719, 28.0248078 ], [ 70.5606804, 28.0219661 ], [ 70.5695961, 28.0179413 ], [ 70.5759261, 28.0150903 ], [ 70.5801853, 28.0124443 ], [ 70.585024, 28.0106622 ], [ 70.5887018, 28.0090931 ], [ 70.5936839, 27.9996523 ], [ 70.5943384, 27.9984866 ], [ 70.5973532, 27.9923365 ], [ 70.6028963, 27.9872741 ], [ 70.6088438, 27.9818695 ], [ 70.6111022, 27.9797287 ], [ 70.6156228, 27.975554 ], [ 70.6183034, 27.9731525 ], [ 70.6230954, 27.9687449 ], [ 70.627718, 27.9644594 ], [ 70.6348489, 27.9579477 ], [ 70.641629, 27.9517597 ], [ 70.6468228, 27.9471447 ], [ 70.6536726, 27.9409395 ], [ 70.6620671, 27.9333089 ], [ 70.6642344, 27.9312097 ], [ 70.6709507, 27.9253875 ], [ 70.6746607, 27.9223858 ], [ 70.6758623, 27.9212956 ], [ 70.6761432, 27.9125529 ], [ 70.6772051, 27.8870462 ], [ 70.676624, 27.8694967 ], [ 70.6828762, 27.8276275 ], [ 70.6974352, 27.8095986 ], [ 70.7107819, 27.7897881 ], [ 70.7148696, 27.7837495 ], [ 70.7127839, 27.7777143 ], [ 70.725356, 27.7689315 ], [ 70.7304564, 27.7604803 ], [ 70.7334991, 27.7560902 ], [ 70.7345978, 27.7505416 ], [ 70.7384323, 27.7414185 ], [ 70.7423848, 27.7377855 ], [ 70.7499465, 27.7323214 ], [ 70.7552227, 27.724613 ], [ 70.7586269, 27.7196844 ], [ 70.7609932, 27.7193505 ], [ 70.7706094, 27.7180218 ], [ 70.8418494, 27.70822 ], [ 70.8429529, 27.708068 ], [ 70.8437608, 27.7079581 ], [ 70.8470344, 27.7075247 ], [ 70.8498896, 27.7071502 ], [ 70.8568033, 27.7064792 ], [ 70.857657, 27.7063483 ], [ 70.8605739, 27.7058337 ], [ 70.8641802, 27.7052213 ], [ 70.8671571, 27.7044234 ], [ 70.8718188, 27.7031698 ], [ 70.8741564, 27.7037347 ], [ 70.8792705, 27.7049902 ], [ 70.8813082, 27.705231 ], [ 70.8835353, 27.7054932 ], [ 70.8842712, 27.7055312 ], [ 70.8858905, 27.7056012 ], [ 70.8905216, 27.705805 ], [ 70.8953338, 27.7066675 ], [ 70.8983314, 27.7071972 ], [ 70.9001781, 27.707089 ], [ 70.90333, 27.7069033 ], [ 70.9061484, 27.7067283 ], [ 70.90965, 27.7092591 ], [ 70.9113119, 27.710156 ], [ 70.9157601, 27.7120519 ], [ 70.9219324, 27.7147052 ], [ 70.9275565, 27.717134 ], [ 70.9315304, 27.7188424 ], [ 70.9375329, 27.721416 ], [ 70.9425801, 27.7235759 ], [ 70.9514708, 27.7273676 ], [ 70.957473, 27.7277161 ], [ 70.9631867, 27.7279179 ], [ 70.9670206, 27.7301492 ], [ 70.9690977, 27.7315324 ], [ 70.9740888, 27.734772 ], [ 70.9796941, 27.7373773 ], [ 70.9868856, 27.741405 ], [ 70.9918675, 27.7430695 ], [ 70.9971011, 27.7462528 ], [ 71.0031414, 27.7483043 ], [ 71.0086405, 27.7509168 ], [ 71.0137962, 27.7537277 ], [ 71.0199567, 27.7564094 ], [ 71.0261633, 27.7588551 ], [ 71.0332706, 27.7616079 ], [ 71.0409101, 27.7645775 ], [ 71.0450777, 27.7637483 ], [ 71.0468651, 27.7634502 ], [ 71.0522502, 27.7673212 ], [ 71.0527376, 27.7676814 ], [ 71.0529041, 27.7677484 ], [ 71.0575291, 27.7694842 ], [ 71.0596303, 27.7705555 ], [ 71.0670214, 27.7737836 ], [ 71.073228, 27.7765175 ], [ 71.0804169, 27.7795873 ], [ 71.0836415, 27.7809998 ], [ 71.0881808, 27.7849784 ], [ 71.0921371, 27.7863067 ], [ 71.095315, 27.7875506 ], [ 71.0998034, 27.7893099 ], [ 71.105399, 27.79164 ], [ 71.1069139, 27.7927481 ], [ 71.1137546, 27.7957278 ], [ 71.1214558, 27.7991326 ], [ 71.1234572, 27.800411 ], [ 71.1307528, 27.8025368 ], [ 71.1368431, 27.8055186 ], [ 71.1430755, 27.8081013 ], [ 71.1463874, 27.8106692 ], [ 71.1541599, 27.8137483 ], [ 71.1588109, 27.8155563 ], [ 71.1694684, 27.819127 ], [ 71.1766315, 27.8215708 ], [ 71.1827614, 27.8235952 ], [ 71.1876591, 27.8260736 ], [ 71.1944457, 27.8294119 ], [ 71.203048, 27.8336909 ], [ 71.2146255, 27.8358228 ], [ 71.2246527, 27.8372179 ], [ 71.2329568, 27.8392201 ], [ 71.2358321, 27.8397889 ], [ 71.2426911, 27.8410526 ], [ 71.2508831, 27.8427683 ], [ 71.260678, 27.8448212 ], [ 71.2671856, 27.8468845 ], [ 71.2686103, 27.8470714 ], [ 71.2765368, 27.8481362 ], [ 71.2824859, 27.8494012 ], [ 71.2915137, 27.8512762 ], [ 71.2969409, 27.8524534 ], [ 71.3051302, 27.8546446 ], [ 71.3080855, 27.8552033 ], [ 71.3167608, 27.856758 ], [ 71.3201018, 27.857449 ], [ 71.3265219, 27.8588367 ], [ 71.3360062, 27.8608998 ], [ 71.3433619, 27.8624942 ], [ 71.3524696, 27.8644425 ], [ 71.3637043, 27.8668331 ], [ 71.3709747, 27.868436 ], [ 71.3831444, 27.8711457 ], [ 71.3868437, 27.8712254 ], [ 71.3956328, 27.8714525 ], [ 71.4057098, 27.8716446 ], [ 71.4113259, 27.871728 ], [ 71.4206717, 27.8718807 ], [ 71.4336343, 27.8721216 ], [ 71.4403763, 27.8724289 ], [ 71.4473281, 27.8727642 ], [ 71.4561574, 27.8723658 ], [ 71.4637899, 27.8719884 ], [ 71.4715661, 27.8719134 ], [ 71.4796959, 27.8720045 ], [ 71.4882731, 27.8723564 ], [ 71.4978641, 27.8728581 ], [ 71.5062836, 27.8733109 ], [ 71.5150914, 27.8737842 ], [ 71.5243713, 27.8742518 ], [ 71.5349693, 27.8746847 ], [ 71.5428866, 27.8748142 ], [ 71.5518001, 27.8749261 ], [ 71.5609668, 27.8750427 ], [ 71.5690419, 27.8752144 ], [ 71.5756278, 27.8752812 ], [ 71.5834384, 27.8754003 ], [ 71.5893339, 27.8754344 ], [ 71.5960855, 27.8755952 ], [ 71.6022176, 27.875691 ], [ 71.6084537, 27.8758014 ], [ 71.6154495, 27.875902 ], [ 71.6217655, 27.8759371 ], [ 71.6272732, 27.8760082 ], [ 71.6338124, 27.87604 ], [ 71.6404804, 27.8761272 ], [ 71.6469627, 27.876159 ], [ 71.6514399, 27.8762126 ], [ 71.66037, 27.8763434 ], [ 71.6656298, 27.8758821 ], [ 71.6797549, 27.881347 ], [ 71.6884758, 27.8846429 ], [ 71.6982294, 27.8882858 ], [ 71.7077411, 27.8919048 ], [ 71.7171626, 27.8953654 ], [ 71.724212, 27.8980104 ], [ 71.7335198, 27.9014286 ], [ 71.7390741, 27.9034605 ], [ 71.7474632, 27.9065799 ], [ 71.750456, 27.907656 ], [ 71.7545295, 27.9091843 ], [ 71.7587221, 27.9107577 ], [ 71.7608735, 27.9114865 ], [ 71.7626757, 27.9121739 ], [ 71.7644963, 27.9128428 ], [ 71.769335, 27.9145455 ], [ 71.7700217, 27.9146341 ], [ 71.7742725, 27.9153549 ], [ 71.7766754, 27.9157772 ], [ 71.7801009, 27.917441 ], [ 71.7838654, 27.9192515 ], [ 71.7864765, 27.9204851 ], [ 71.7964334, 27.9245562 ], [ 71.799578, 27.9257748 ], [ 71.8026964, 27.9270211 ], [ 71.8035568, 27.9272351 ], [ 71.8051189, 27.9276548 ], [ 71.8070536, 27.9282977 ], [ 71.8081885, 27.9286857 ], [ 71.8115831, 27.9298964 ], [ 71.815829, 27.9313678 ], [ 71.8221437, 27.9338081 ], [ 71.8266184, 27.9355155 ], [ 71.8283632, 27.9361359 ], [ 71.830237, 27.936783 ], [ 71.8332717, 27.9378681 ], [ 71.8350535, 27.9385055 ], [ 71.8384558, 27.9397284 ], [ 71.8416222, 27.9409153 ], [ 71.8457541, 27.9424885 ], [ 71.8465794, 27.9427873 ], [ 71.8473889, 27.9431304 ], [ 71.8492252, 27.9438265 ], [ 71.8494725, 27.9439488 ], [ 71.8541132, 27.9457373 ], [ 71.8586625, 27.9474942 ], [ 71.8631112, 27.9492824 ], [ 71.8685135, 27.951375 ], [ 71.8746297, 27.9535552 ], [ 71.8780283, 27.9548055 ], [ 71.8795009, 27.9553435 ], [ 71.8804343, 27.9555558 ], [ 71.8845973, 27.9565703 ], [ 71.8897442, 27.9578861 ], [ 71.8915885, 27.9582787 ], [ 71.8942954, 27.959138 ], [ 71.8950735, 27.9593029 ], [ 71.898956, 27.9600752 ], [ 71.8995815, 27.9617274 ], [ 71.9008467, 27.9652071 ], [ 71.9014086, 27.9701914 ], [ 71.9018161, 27.9733889 ], [ 71.9021149, 27.9745461 ], [ 71.9024088, 27.976177 ], [ 71.9029788, 27.9793809 ], [ 71.9038406, 27.9841346 ], [ 71.9046131, 27.9884617 ], [ 71.905484, 27.9933765 ], [ 71.9060711, 27.9966815 ], [ 71.9069141, 28.001442 ], [ 71.9069694, 28.0021475 ], [ 71.9074154, 28.0075459 ], [ 71.9084813, 28.0105689 ], [ 71.9088252, 28.0129161 ], [ 71.9092289, 28.0157164 ], [ 71.9096524, 28.0185825 ], [ 71.9101408, 28.0221664 ], [ 71.9110632, 28.0249506 ], [ 71.9115334, 28.0279541 ], [ 71.9119651, 28.0303326 ], [ 71.9123679, 28.0325743 ], [ 71.9129295, 28.0356144 ], [ 71.91365, 28.039663 ], [ 71.9144176, 28.0435444 ], [ 71.9148527, 28.0462152 ], [ 71.9153188, 28.0489211 ], [ 71.9155168, 28.050099 ], [ 71.9164362, 28.0545762 ], [ 71.9171084, 28.0581444 ], [ 71.9175606, 28.0607675 ], [ 71.9181974, 28.0639907 ], [ 71.9190222, 28.069029 ], [ 71.9204431, 28.0763391 ], [ 71.9208668, 28.0786731 ], [ 71.9215216, 28.0821094 ], [ 71.9219672, 28.0845632 ], [ 71.9223712, 28.0869059 ], [ 71.9228529, 28.0894679 ], [ 71.9233417, 28.0922128 ], [ 71.9236694, 28.0939969 ], [ 71.9243029, 28.0974297 ], [ 71.9251253, 28.1018601 ], [ 71.9256844, 28.1049052 ], [ 71.9260871, 28.1070669 ], [ 71.9268142, 28.1109627 ], [ 71.9276463, 28.1154205 ], [ 71.9283828, 28.118722 ], [ 71.9290292, 28.1216076 ], [ 71.9321602, 28.1255984 ], [ 71.9332411, 28.1270011 ], [ 71.935118, 28.129364 ], [ 71.9369727, 28.131526 ], [ 71.937765, 28.1326234 ], [ 71.9383312, 28.1334353 ], [ 71.9392436, 28.1346441 ], [ 71.9400437, 28.1356092 ], [ 71.9410188, 28.1367852 ], [ 71.943194, 28.1395512 ], [ 71.9454144, 28.1424057 ], [ 71.948001, 28.1457411 ], [ 71.9636388, 28.1653511 ], [ 71.9662009, 28.1684617 ], [ 71.9688117, 28.1718609 ], [ 71.9725092, 28.1766413 ], [ 71.9771137, 28.182304 ], [ 71.9828383, 28.1894322 ], [ 71.9862016, 28.1937664 ], [ 71.9913165, 28.2001253 ], [ 71.997352, 28.2074685 ], [ 72.0017386, 28.2131683 ], [ 72.0057174, 28.2181912 ], [ 72.0066052, 28.2188171 ], [ 72.0130591, 28.2234876 ], [ 72.0357393, 28.2402937 ], [ 72.044272, 28.2469338 ], [ 72.049653, 28.2511509 ], [ 72.0574829, 28.2567901 ], [ 72.0646637, 28.2620916 ], [ 72.0702905, 28.2664625 ], [ 72.0787255, 28.2726451 ], [ 72.0818848, 28.2750135 ], [ 72.082288, 28.2752818 ], [ 72.0867195, 28.2787062 ], [ 72.0898343, 28.2809006 ], [ 72.0909022, 28.2818045 ], [ 72.0939639, 28.284376 ], [ 72.0964902, 28.2861695 ], [ 72.1005023, 28.2890222 ], [ 72.1057546, 28.2927132 ], [ 72.1111743, 28.2964913 ], [ 72.1119168, 28.2966352 ], [ 72.1122673, 28.2969046 ], [ 72.1150021, 28.2987621 ], [ 72.1185664, 28.3014843 ], [ 72.1215694, 28.303524 ], [ 72.1247023, 28.3057901 ], [ 72.1285105, 28.3086331 ], [ 72.1319767, 28.3112063 ], [ 72.136427, 28.3163037 ], [ 72.1406405, 28.3211036 ], [ 72.1486353, 28.3301901 ], [ 72.1517692, 28.3337737 ], [ 72.155998, 28.3385166 ], [ 72.1592338, 28.3419168 ], [ 72.1619651, 28.344806 ], [ 72.1643083, 28.3472683 ], [ 72.1667727, 28.3498947 ], [ 72.1688318, 28.3519532 ], [ 72.1720655, 28.3551866 ], [ 72.1792789, 28.3633731 ], [ 72.1805806, 28.3644425 ], [ 72.1827455, 28.3663384 ], [ 72.1861554, 28.3700608 ], [ 72.1901132, 28.3743797 ], [ 72.1911639, 28.3754933 ], [ 72.1935987, 28.3781217 ], [ 72.195566, 28.3802137 ], [ 72.1963475, 28.3803393 ], [ 72.1982684, 28.3826389 ], [ 72.1996797, 28.3843409 ], [ 72.2007815, 28.3856748 ], [ 72.2019214, 28.3870198 ], [ 72.2028775, 28.3880717 ], [ 72.2039035, 28.3892724 ], [ 72.2051039, 28.390875 ], [ 72.20592, 28.3918842 ], [ 72.2061855, 28.3921443 ], [ 72.2076565, 28.3938046 ], [ 72.2083373, 28.3956531 ], [ 72.2095083, 28.39941 ], [ 72.2116891, 28.4060879 ], [ 72.2123244, 28.4080231 ], [ 72.2131162, 28.410382 ], [ 72.2137764, 28.4123217 ], [ 72.2148811, 28.4159517 ], [ 72.215839, 28.418884 ], [ 72.2166575, 28.4212074 ], [ 72.2173738, 28.4234015 ], [ 72.2181709, 28.4257941 ], [ 72.2191903, 28.4287302 ], [ 72.2197053, 28.430549 ], [ 72.2201975, 28.4319895 ], [ 72.2213822, 28.4354239 ], [ 72.2226281, 28.4392344 ], [ 72.2233491, 28.441362 ], [ 72.2247014, 28.4454551 ], [ 72.2253658, 28.4474946 ], [ 72.2259205, 28.4492662 ], [ 72.2266951, 28.4515532 ], [ 72.2275145, 28.4541036 ], [ 72.2285265, 28.4571259 ], [ 72.2298786, 28.461219 ], [ 72.2306189, 28.4634037 ], [ 72.2311165, 28.464815 ], [ 72.2325866, 28.469274 ], [ 72.2337142, 28.4726455 ], [ 72.2380178, 28.484913 ], [ 72.2399874, 28.4904872 ], [ 72.2434528, 28.5001894 ], [ 72.247339, 28.5110654 ], [ 72.2553867, 28.5335607 ], [ 72.2656255, 28.5622279 ], [ 72.2670728, 28.5657704 ], [ 72.2681208, 28.5682166 ], [ 72.268499, 28.5693072 ], [ 72.2701644, 28.5747962 ], [ 72.2711723, 28.5776877 ], [ 72.2756141, 28.5898931 ], [ 72.2815568, 28.6067415 ], [ 72.2834579, 28.6125322 ], [ 72.289579, 28.63394 ], [ 72.2928269, 28.6448764 ], [ 72.2941235, 28.6488279 ], [ 72.2981822, 28.6617478 ], [ 72.3005803, 28.6688228 ], [ 72.3007295, 28.6692087 ], [ 72.3090065, 28.6787492 ], [ 72.3112708, 28.6810039 ], [ 72.3133039, 28.68343 ], [ 72.3158298, 28.6860912 ], [ 72.3173643, 28.68802 ], [ 72.3203978, 28.6919715 ], [ 72.3262445, 28.6983899 ], [ 72.3306554, 28.7031193 ], [ 72.3325635, 28.7053112 ], [ 72.3359667, 28.7092827 ], [ 72.338643, 28.7123317 ], [ 72.3415476, 28.715705 ], [ 72.3462618, 28.721239 ], [ 72.3502471, 28.7260447 ], [ 72.3527493, 28.7291075 ], [ 72.3556268, 28.7325527 ], [ 72.3588655, 28.7357365 ], [ 72.3610033, 28.7378704 ], [ 72.3610191, 28.7382655 ], [ 72.3626241, 28.7398967 ], [ 72.3659825, 28.7433253 ], [ 72.3712949, 28.7487689 ], [ 72.374041, 28.7515951 ], [ 72.3754576, 28.7530046 ], [ 72.3769049, 28.7543999 ], [ 72.3831481, 28.7602605 ], [ 72.3857166, 28.7632457 ], [ 72.3887518, 28.7667843 ], [ 72.3940229, 28.7720076 ], [ 72.4014483, 28.7792279 ], [ 72.4041997, 28.7819084 ], [ 72.4120988, 28.7857811 ], [ 72.4160808, 28.786917 ], [ 72.4191745, 28.7879222 ], [ 72.4260871, 28.7905389 ], [ 72.4358954, 28.7942609 ], [ 72.4436925, 28.7972056 ], [ 72.4493415, 28.7993593 ], [ 72.4498428, 28.799364 ], [ 72.4500528, 28.7993677 ], [ 72.4523378, 28.8001635 ], [ 72.4559304, 28.8015079 ], [ 72.4608463, 28.8034169 ], [ 72.4715398, 28.8075849 ], [ 72.4799946, 28.8107869 ], [ 72.4840914, 28.8130025 ], [ 72.4952301, 28.8189789 ], [ 72.5077244, 28.8257392 ], [ 72.5170349, 28.8307673 ], [ 72.5236943, 28.8343618 ], [ 72.5299889, 28.8377646 ], [ 72.5349687, 28.8404097 ], [ 72.53978, 28.8430703 ], [ 72.544807, 28.8457933 ], [ 72.5486308, 28.8478142 ], [ 72.552616, 28.8499164 ], [ 72.5575915, 28.8524329 ], [ 72.5640508, 28.856164 ], [ 72.56878, 28.8587297 ], [ 72.5740066, 28.8614588 ], [ 72.5806826, 28.8650834 ], [ 72.5844844, 28.8671194 ], [ 72.5892142, 28.8696835 ], [ 72.5935653, 28.8720436 ], [ 72.6008485, 28.876005 ], [ 72.6060107, 28.8787751 ], [ 72.6077332, 28.8798893 ], [ 72.6140262, 28.8833107 ], [ 72.6216523, 28.887515 ], [ 72.6303019, 28.8920643 ], [ 72.6359731, 28.895066 ], [ 72.6436868, 28.8990989 ], [ 72.6438207, 28.8991867 ], [ 72.6516523, 28.9033575 ], [ 72.6560277, 28.9056409 ], [ 72.6601138, 28.9078346 ], [ 72.6649203, 28.9103854 ], [ 72.6704105, 28.9132872 ], [ 72.6754439, 28.9159642 ], [ 72.680196, 28.9185125 ], [ 72.683122, 28.9200747 ], [ 72.6888252, 28.9231049 ], [ 72.6916032, 28.9245975 ], [ 72.7012592, 28.9296371 ], [ 72.708881, 28.9336557 ], [ 72.7141952, 28.9364853 ], [ 72.7181507, 28.9386239 ], [ 72.723226, 28.9414146 ], [ 72.7272858, 28.9436837 ], [ 72.7335592, 28.9468833 ], [ 72.7395848, 28.9491442 ], [ 72.7817393, 28.9649669 ], [ 72.7902505, 28.9681609 ], [ 72.7962319, 28.9704162 ], [ 72.7986032, 28.9713542 ], [ 72.8017636, 28.972599 ], [ 72.8046309, 28.9736277 ], [ 72.8073021, 28.9745562 ], [ 72.8100334, 28.9755427 ], [ 72.8148598, 28.9773603 ], [ 72.8300872, 28.983053 ], [ 72.8361643, 28.985342 ], [ 72.846916, 28.9893526 ], [ 72.8559341, 28.9927219 ], [ 72.861258, 28.9947146 ], [ 72.8667482, 28.9967796 ], [ 72.877451, 29.0007787 ], [ 72.8879972, 29.0047521 ], [ 72.8971068, 29.0081844 ], [ 72.9084262, 29.01239 ], [ 72.9179631, 29.0159865 ], [ 72.9254095, 29.0187347 ], [ 72.9317818, 29.0211616 ], [ 72.9387628, 29.0237776 ], [ 72.9454954, 29.0263214 ], [ 72.9465324, 29.0267103 ], [ 72.9477684, 29.0289366 ], [ 72.9486031, 29.0304425 ], [ 72.9505662, 29.0346174 ], [ 72.9543969, 29.0427223 ], [ 72.9559528, 29.0459909 ], [ 72.9620248, 29.0589436 ], [ 72.9681156, 29.071919 ], [ 72.9742206, 29.0849639 ], [ 72.9767582, 29.0904168 ], [ 72.9790418, 29.0952082 ], [ 72.9806643, 29.0983589 ], [ 72.9868744, 29.1120293 ], [ 72.9901902, 29.1191991 ], [ 72.993014, 29.1253472 ], [ 72.9946233, 29.1287643 ], [ 72.9963654, 29.1324207 ], [ 72.999704, 29.1395738 ], [ 73.0033137, 29.1474024 ], [ 73.0055512, 29.1522552 ], [ 73.0101716, 29.1569995 ], [ 73.0195196, 29.166634 ], [ 73.0278001, 29.1751749 ], [ 73.0349817, 29.1700328 ], [ 73.0369113, 29.1721329 ], [ 73.0383736, 29.1743187 ], [ 73.0396997, 29.1763512 ], [ 73.0413029, 29.1787952 ], [ 73.0429039, 29.1813361 ], [ 73.0440556, 29.1831238 ], [ 73.04794, 29.1869925 ], [ 73.0538916, 29.1928596 ], [ 73.06131, 29.2002702 ], [ 73.0644707, 29.20335 ], [ 73.0651536, 29.205364 ], [ 73.0687751, 29.2110881 ], [ 73.0708678, 29.2143249 ], [ 73.0738413, 29.2188701 ], [ 73.076376, 29.2227132 ], [ 73.0744861, 29.2237963 ], [ 73.0808526, 29.2304388 ], [ 73.0857648, 29.235708 ], [ 73.0929526, 29.2478889 ], [ 73.0964668, 29.2536921 ], [ 73.098671, 29.2574957 ], [ 73.1011405, 29.2618275 ], [ 73.1233061, 29.2993491 ], [ 73.1278057, 29.3070046 ], [ 73.1320903, 29.3143394 ], [ 73.1370921, 29.3227728 ], [ 73.1418777, 29.3308658 ], [ 73.1459149, 29.3377076 ], [ 73.148849, 29.3427271 ], [ 73.151072, 29.3465307 ], [ 73.1537869, 29.3510906 ], [ 73.1557256, 29.354394 ], [ 73.1598512, 29.361482 ], [ 73.1664317, 29.3726812 ], [ 73.1725251, 29.3829998 ], [ 73.1762598, 29.3896269 ], [ 73.1814253, 29.3966041 ], [ 73.1853388, 29.405146 ], [ 73.2273275, 29.4762941 ], [ 73.2367603, 29.4922887 ], [ 73.2453294, 29.5068312 ], [ 73.2509245, 29.516309 ], [ 73.2605906, 29.532743 ], [ 73.263643, 29.5379167 ], [ 73.2688529, 29.5467625 ], [ 73.2731884, 29.5541554 ], [ 73.2796982, 29.5650015 ], [ 73.2835428, 29.5715145 ], [ 73.2854461, 29.5808528 ], [ 73.2886803, 29.5900424 ], [ 73.2894807, 29.5921747 ], [ 73.2896497, 29.5930601 ], [ 73.2915417, 29.5982279 ], [ 73.2924236, 29.6008721 ], [ 73.2942159, 29.6059733 ], [ 73.2965076, 29.6124016 ], [ 73.2988534, 29.6196654 ], [ 73.3075813, 29.6471875 ], [ 73.312971, 29.664225 ], [ 73.3463571, 29.7704252 ], [ 73.3512117, 29.7855493 ], [ 73.3532035, 29.7923967 ], [ 73.3580572, 29.8094145 ], [ 73.3607767, 29.8186079 ], [ 73.3629005, 29.8256362 ], [ 73.3663246, 29.8377941 ], [ 73.3690175, 29.8468088 ], [ 73.3715439, 29.8553115 ], [ 73.3741964, 29.8642414 ], [ 73.3758212, 29.869939 ], [ 73.3774239, 29.8756343 ], [ 73.3782414, 29.8784126 ], [ 73.3806607, 29.8865123 ], [ 73.3831761, 29.8950558 ], [ 73.3854665, 29.9028328 ], [ 73.3863382, 29.9058124 ], [ 73.3869527, 29.9078814 ], [ 73.388054, 29.9117144 ], [ 73.3904229, 29.9187642 ], [ 73.3909068, 29.9206184 ], [ 73.3924474, 29.9266639 ], [ 73.3931327, 29.9288643 ], [ 73.394965, 29.9353877 ], [ 73.3969713, 29.940778 ], [ 73.3976212, 29.9431331 ], [ 73.3979438, 29.9442673 ], [ 73.3985943, 29.9450371 ], [ 73.4020009, 29.9463495 ], [ 73.4054806, 29.9476563 ], [ 73.4131399, 29.9504545 ], [ 73.4206627, 29.9532437 ], [ 73.4281506, 29.9559769 ], [ 73.4362589, 29.9589428 ], [ 73.4416432, 29.9608802 ], [ 73.4493883, 29.9637054 ], [ 73.4567733, 29.9663786 ], [ 73.4615065, 29.9681234 ], [ 73.4654073, 29.9695326 ], [ 73.4722855, 29.9720572 ], [ 73.4792885, 29.974617 ], [ 73.4883984, 29.9779717 ], [ 73.4976794, 29.9813694 ], [ 73.5067651, 29.9846554 ], [ 73.5131455, 29.9869677 ], [ 73.5235621, 29.9907913 ], [ 73.5297159, 29.9930031 ], [ 73.5334922, 29.9942849 ], [ 73.5349937, 29.9949486 ], [ 73.5390245, 29.9964193 ], [ 73.5426291, 29.9978068 ], [ 73.545086, 29.9986955 ], [ 73.5567617, 30.0029338 ], [ 73.5717493, 30.0084326 ], [ 73.5762114, 30.0100612 ], [ 73.5815319, 30.0120118 ], [ 73.5862445, 30.0136269 ], [ 73.5919828, 30.0156145 ], [ 73.595312, 30.0168412 ], [ 73.5991068, 30.0180782 ], [ 73.6100432, 30.0207178 ], [ 73.6143959, 30.0217271 ], [ 73.6233566, 30.0238636 ], [ 73.6310814, 30.0256509 ], [ 73.6384204, 30.0273684 ], [ 73.6470781, 30.0293999 ], [ 73.6494599, 30.0298675 ], [ 73.6556681, 30.031455 ], [ 73.661466, 30.0327814 ], [ 73.6614583, 30.0339083 ], [ 73.6614338, 30.0339173 ], [ 73.6667939, 30.0338681 ], [ 73.6710103, 30.0350384 ], [ 73.6724925, 30.0360443 ], [ 73.6730746, 30.0360527 ], [ 73.6734147, 30.0362356 ], [ 73.6740509, 30.0365705 ], [ 73.6750514, 30.0367952 ], [ 73.683038, 30.0387178 ], [ 73.6863038, 30.0394882 ], [ 73.6911972, 30.040619 ], [ 73.6994338, 30.0425768 ], [ 73.7080115, 30.0445569 ], [ 73.7158623, 30.0463953 ], [ 73.7240811, 30.0483284 ], [ 73.731344, 30.0500084 ], [ 73.7408294, 30.0522557 ], [ 73.7481609, 30.053951 ], [ 73.7499825, 30.0543418 ], [ 73.7509259, 30.0547773 ], [ 73.752767, 30.0552178 ], [ 73.7564034, 30.0560739 ], [ 73.7605944, 30.0570835 ], [ 73.7647797, 30.0580534 ], [ 73.7666551, 30.0585038 ], [ 73.7680102, 30.0588007 ], [ 73.770343, 30.0592956 ], [ 73.7778846, 30.0610226 ], [ 73.7816011, 30.0618639 ], [ 73.7861351, 30.0629278 ], [ 73.7929277, 30.0644173 ], [ 73.7947459, 30.064348 ], [ 73.7959798, 30.0641646 ], [ 73.7997376, 30.0650532 ], [ 73.807288, 30.0668759 ], [ 73.8095668, 30.0695203 ], [ 73.8139415, 30.0751361 ], [ 73.8173415, 30.0794658 ], [ 73.821464, 30.0848759 ], [ 73.8241039, 30.087511 ], [ 73.8252497, 30.0885331 ], [ 73.8299838, 30.0926069 ], [ 73.8351878, 30.0956618 ], [ 73.8388887, 30.0983249 ], [ 73.8454339, 30.1030234 ], [ 73.8541741, 30.109352 ], [ 73.8582516, 30.1121549 ], [ 73.8671916, 30.1184689 ], [ 73.871158, 30.1213833 ], [ 73.8727244, 30.122471 ], [ 73.8788061, 30.12633 ], [ 73.8859113, 30.132001 ], [ 73.8895247, 30.1349415 ], [ 73.8945973, 30.1382076 ], [ 73.8994081, 30.1415413 ], [ 73.9075878, 30.1473367 ], [ 73.9084145, 30.1480947 ], [ 73.909497, 30.1494014 ], [ 73.9102486, 30.1496273 ], [ 73.911602, 30.150331 ], [ 73.9127596, 30.1510366 ], [ 73.9188842, 30.155464 ], [ 73.9248221, 30.1599484 ], [ 73.9317717, 30.1651755 ], [ 73.9381221, 30.1698964 ], [ 73.945481, 30.1755529 ], [ 73.9511415, 30.1799259 ], [ 73.9580557, 30.1852016 ], [ 73.9663164, 30.1915801 ], [ 73.9743072, 30.1978005 ], [ 73.9739095, 30.2000681 ], [ 73.973942, 30.2008282 ], [ 73.973706, 30.2014256 ], [ 73.973126, 30.2053141 ], [ 73.9723431, 30.2095959 ], [ 73.9720518, 30.2107336 ], [ 73.9719027, 30.2114888 ], [ 73.9715252, 30.2148751 ], [ 73.9705509, 30.2214608 ], [ 73.9694267, 30.2251846 ], [ 73.9688806, 30.2347571 ], [ 73.9658679, 30.2484128 ], [ 73.9655493, 30.2570113 ], [ 73.9636857, 30.2643906 ], [ 73.961247, 30.2705054 ], [ 73.9540265, 30.2824365 ], [ 73.9504152, 30.2873274 ], [ 73.9441806, 30.2966831 ], [ 73.9413507, 30.3011606 ], [ 73.9386714, 30.3065418 ], [ 73.934205, 30.3171932 ], [ 73.9324562, 30.3207903 ], [ 73.9263311, 30.3257737 ], [ 73.9230094, 30.3294742 ], [ 73.9183177, 30.3333635 ], [ 73.9148673, 30.3375453 ], [ 73.9111737, 30.3419346 ], [ 73.9101483, 30.3426144 ], [ 73.9101202, 30.3431837 ], [ 73.9084432, 30.3451389 ], [ 73.9076917, 30.3459908 ], [ 73.9044904, 30.3496627 ], [ 73.8979587, 30.3542131 ], [ 73.8895263, 30.3572785 ], [ 73.8825381, 30.3598493 ], [ 73.8843062, 30.3636481 ], [ 73.8868087, 30.3657554 ], [ 73.8905821, 30.3674694 ], [ 73.8930921, 30.3675157 ], [ 73.8953226, 30.3694457 ], [ 73.9011757, 30.3713054 ], [ 73.9094466, 30.377015 ], [ 73.9125783, 30.3805045 ], [ 73.9151693, 30.3816239 ], [ 73.9179851, 30.3856407 ], [ 73.9214511, 30.3964668 ], [ 73.9329803, 30.3996326 ], [ 73.9378705, 30.4016221 ], [ 73.9431555, 30.4071737 ], [ 73.9465984, 30.4129201 ], [ 73.9493053, 30.4162778 ], [ 73.9525786, 30.4186663 ], [ 73.9651705, 30.4237122 ], [ 73.9680496, 30.43233 ], [ 73.9713364, 30.4369391 ], [ 73.9748984, 30.4440907 ], [ 73.9744687, 30.4451803 ], [ 73.9725219, 30.4449657 ], [ 73.9650917, 30.4428683 ], [ 73.9590814, 30.4412219 ], [ 73.9526232, 30.4396387 ], [ 73.9485231, 30.4387285 ], [ 73.946364, 30.4383049 ], [ 73.9389911, 30.4380403 ], [ 73.9374896, 30.4369326 ], [ 73.9306618, 30.4384547 ], [ 73.9277006, 30.4390851 ], [ 73.9383275, 30.4450073 ], [ 73.9398478, 30.4449601 ], [ 73.9395973, 30.4510604 ], [ 73.9397829, 30.4522008 ], [ 73.9377331, 30.4552432 ], [ 73.9334341, 30.4627837 ], [ 73.9357971, 30.4640238 ], [ 73.9377648, 30.4648311 ], [ 73.9405409, 30.4653568 ], [ 73.9425364, 30.4659501 ], [ 73.9426657, 30.46584 ], [ 73.9435755, 30.465865 ], [ 73.945371, 30.46533 ], [ 73.9459466, 30.4620947 ], [ 73.9470506, 30.4613678 ], [ 73.9492398, 30.4587922 ], [ 73.9536197, 30.4569417 ], [ 73.9540927, 30.4567796 ], [ 73.9581745, 30.4559458 ], [ 73.9644387, 30.455028 ], [ 73.968283, 30.4603681 ], [ 73.9702928, 30.4679444 ], [ 73.9697784, 30.4683452 ], [ 73.9695129, 30.4693167 ], [ 73.9695531, 30.4696671 ], [ 73.9697671, 30.4700463 ], [ 73.9701528, 30.4704406 ], [ 73.9707966, 30.4708309 ], [ 73.9716908, 30.4758907 ], [ 73.9715423, 30.4780484 ], [ 73.971238, 30.4780842 ], [ 73.9694565, 30.4822406 ], [ 73.9688766, 30.4836557 ], [ 73.9774121, 30.4932866 ], [ 73.9805643, 30.4985544 ], [ 73.981367, 30.4994587 ], [ 73.9848739, 30.5033113 ], [ 73.9886683, 30.5077273 ], [ 73.99754, 30.5124067 ], [ 74.0086575, 30.5121652 ], [ 74.0153923, 30.5127408 ], [ 74.0204457, 30.513565 ], [ 74.0201138, 30.5156855 ], [ 74.0125082, 30.5216418 ], [ 74.0126189, 30.5241433 ], [ 74.0203321, 30.5266416 ], [ 74.025159, 30.5236093 ], [ 74.0264154, 30.5241371 ], [ 74.0335256, 30.5261146 ], [ 74.0338703, 30.5261992 ], [ 74.0359535, 30.5260321 ], [ 74.0406581, 30.5256992 ], [ 74.0426692, 30.5255613 ], [ 74.0465461, 30.5255102 ], [ 74.0508001, 30.5254903 ], [ 74.0520285, 30.5234016 ], [ 74.0538616, 30.5203531 ], [ 74.054839, 30.5192473 ], [ 74.055727, 30.5181894 ], [ 74.0565808, 30.5175949 ], [ 74.0578806, 30.517228 ], [ 74.059366, 30.5172606 ], [ 74.0609592, 30.5173528 ], [ 74.0629658, 30.5176525 ], [ 74.0641317, 30.5178983 ], [ 74.0660544, 30.5185746 ], [ 74.0682151, 30.5194303 ], [ 74.0725077, 30.5218818 ], [ 74.074002, 30.5232136 ], [ 74.0759099, 30.5264469 ], [ 74.0776482, 30.5281388 ], [ 74.0799444, 30.5302964 ], [ 74.0822514, 30.5325007 ], [ 74.0847402, 30.5365619 ], [ 74.0867167, 30.5397959 ], [ 74.0894867, 30.5442978 ], [ 74.0902084, 30.5457561 ], [ 74.0919567, 30.5493873 ], [ 74.0914288, 30.5500751 ], [ 74.0906894, 30.5507358 ], [ 74.0905708, 30.5506917 ], [ 74.0905738, 30.5508252 ], [ 74.0816273, 30.5535679 ], [ 74.0778384, 30.5547262 ], [ 74.0776772, 30.5548246 ], [ 74.0763192, 30.5551508 ], [ 74.0765444, 30.555984 ], [ 74.0767545, 30.5564368 ], [ 74.0779508, 30.5562024 ], [ 74.0818526, 30.5597485 ], [ 74.0882695, 30.5655778 ], [ 74.0965849, 30.5729962 ], [ 74.0994092, 30.5751119 ], [ 74.1027894, 30.5778697 ], [ 74.1029975, 30.5805765 ], [ 74.099847, 30.5838333 ], [ 74.1001527, 30.5918542 ], [ 74.1003265, 30.5951923 ], [ 74.0970108, 30.6002757 ], [ 74.1030474, 30.6023581 ], [ 74.10405, 30.606906 ], [ 74.1034701, 30.6121079 ], [ 74.0993052, 30.6124519 ], [ 74.1045644, 30.6169513 ], [ 74.1051728, 30.6170307 ], [ 74.1129555, 30.6104011 ], [ 74.1170389, 30.6067982 ], [ 74.1182271, 30.6076341 ], [ 74.1204791, 30.6114754 ], [ 74.1197819, 30.611679 ], [ 74.1201459, 30.6126585 ], [ 74.1207502, 30.6126155 ], [ 74.1258494, 30.6168128 ], [ 74.1360761, 30.6250161 ], [ 74.1388838, 30.6261988 ], [ 74.140204, 30.6263746 ], [ 74.1412758, 30.6274414 ], [ 74.1454123, 30.6286193 ], [ 74.1473972, 30.6290026 ], [ 74.1491031, 30.6297485 ], [ 74.1539804, 30.6325097 ], [ 74.1595095, 30.6400545 ], [ 74.1697828, 30.6473959 ], [ 74.1720203, 30.6490103 ], [ 74.1736871, 30.6500751 ], [ 74.1823619, 30.6591629 ], [ 74.188583, 30.6603129 ], [ 74.1946024, 30.6638586 ], [ 74.197363, 30.6663595 ], [ 74.2006728, 30.6692692 ], [ 74.2038786, 30.6719795 ], [ 74.2078354, 30.6762588 ], [ 74.2094431, 30.6785933 ], [ 74.210538, 30.6802898 ], [ 74.2122283, 30.6845434 ], [ 74.2150221, 30.6880619 ], [ 74.2158187, 30.6889227 ], [ 74.2165129, 30.6893702 ], [ 74.2169865, 30.6895077 ], [ 74.2198195, 30.6920748 ], [ 74.2216724, 30.6961775 ], [ 74.2219089, 30.6975 ], [ 74.2228284, 30.6994433 ], [ 74.2278259, 30.7099259 ], [ 74.2312865, 30.7171201 ], [ 74.2334204, 30.7216363 ], [ 74.2377404, 30.721723 ], [ 74.2518123, 30.7219443 ], [ 74.2650185, 30.722156 ], [ 74.2728468, 30.7318384 ], [ 74.2820644, 30.729987 ], [ 74.2874385, 30.7356033 ], [ 74.2871735, 30.7364706 ], [ 74.2823176, 30.7407069 ], [ 74.2798017, 30.7428181 ], [ 74.2792599, 30.7435332 ], [ 74.2782294, 30.745664 ], [ 74.2757548, 30.7501394 ], [ 74.2742313, 30.7541322 ], [ 74.2723591, 30.7570535 ], [ 74.2687649, 30.7623128 ], [ 74.2666358, 30.7654496 ], [ 74.2654739, 30.7667932 ], [ 74.2642226, 30.7681341 ], [ 74.2623641, 30.770135 ], [ 74.2615546, 30.7719934 ], [ 74.2637798, 30.7732471 ], [ 74.2652807, 30.7736278 ], [ 74.2668695, 30.7741109 ], [ 74.2684176, 30.7747085 ], [ 74.2739309, 30.7720847 ], [ 74.276903, 30.7729517 ], [ 74.2835839, 30.7732337 ], [ 74.2896843, 30.7739223 ], [ 74.2960626, 30.7752663 ], [ 74.3026426, 30.7783838 ], [ 74.3087728, 30.790109 ], [ 74.3017328, 30.7910666 ], [ 74.2996267, 30.7941891 ], [ 74.2986193, 30.795213 ], [ 74.2981955, 30.7971198 ], [ 74.2981504, 30.7998762 ], [ 74.3000462, 30.8027731 ], [ 74.3023556, 30.8025768 ], [ 74.3029838, 30.8036536 ], [ 74.3031305, 30.8040121 ], [ 74.303664, 30.8053506 ], [ 74.3038973, 30.8079211 ], [ 74.3043479, 30.8083902 ], [ 74.3058747, 30.809783 ], [ 74.3076428, 30.8121138 ], [ 74.3084855, 30.8136425 ], [ 74.3101581, 30.816076 ], [ 74.3106554, 30.8172185 ], [ 74.3121119, 30.8187199 ], [ 74.3132212, 30.8193091 ], [ 74.3137499, 30.8195579 ], [ 74.3182112, 30.8230227 ], [ 74.3189177, 30.8239661 ], [ 74.3196784, 30.8247926 ], [ 74.3203902, 30.8255858 ], [ 74.3212528, 30.8268835 ], [ 74.3206075, 30.8320703 ], [ 74.3225398, 30.8368515 ], [ 74.3237028, 30.8382522 ], [ 74.323331, 30.8392273 ], [ 74.3222174, 30.8407108 ], [ 74.3214937, 30.843373 ], [ 74.3215959, 30.8444291 ], [ 74.3227299, 30.8456063 ], [ 74.3239771, 30.8468429 ], [ 74.3267033, 30.8478418 ], [ 74.3292571, 30.8487703 ], [ 74.3334365, 30.8497397 ], [ 74.3354696, 30.8490213 ], [ 74.3365699, 30.8487887 ], [ 74.3373804, 30.8482729 ], [ 74.3385842, 30.8479289 ], [ 74.3409333, 30.8477539 ], [ 74.3418361, 30.8483203 ], [ 74.342137, 30.84913 ], [ 74.3411629, 30.8510827 ], [ 74.3412154, 30.8523478 ], [ 74.3448911, 30.8528875 ], [ 74.348069, 30.8535332 ], [ 74.3528482, 30.8518108 ], [ 74.3536475, 30.8483572 ], [ 74.3539785, 30.8476194 ], [ 74.3545546, 30.847215 ], [ 74.357141, 30.8460249 ], [ 74.3640772, 30.8459973 ], [ 74.368302, 30.8482006 ], [ 74.3699886, 30.8518743 ], [ 74.3676333, 30.8557073 ], [ 74.3725613, 30.8564897 ], [ 74.3747919, 30.8566799 ], [ 74.3781878, 30.8570672 ], [ 74.3834066, 30.8594365 ], [ 74.3838599, 30.86059 ], [ 74.3831263, 30.8613871 ], [ 74.3765798, 30.8653587 ], [ 74.3716513, 30.8682896 ], [ 74.3672838, 30.8706544 ], [ 74.36259, 30.8741523 ], [ 74.3664545, 30.8808656 ], [ 74.3678798, 30.8849073 ], [ 74.3687762, 30.8850822 ], [ 74.3704301, 30.8865927 ], [ 74.3711698, 30.887699 ], [ 74.3716381, 30.8885364 ], [ 74.3726541, 30.8911972 ], [ 74.3727105, 30.8920898 ], [ 74.3731391, 30.8929267 ], [ 74.3733472, 30.8940775 ], [ 74.3741583, 30.8942635 ], [ 74.3758379, 30.8942041 ], [ 74.3840122, 30.8939127 ], [ 74.3872046, 30.8972722 ], [ 74.3893144, 30.8994213 ], [ 74.3937637, 30.9036344 ], [ 74.3969222, 30.907307 ], [ 74.3976821, 30.9081313 ], [ 74.3983376, 30.908065 ], [ 74.3989867, 30.9080429 ], [ 74.401052, 30.908221 ], [ 74.4071889, 30.9083711 ], [ 74.417241, 30.9070313 ], [ 74.4201309, 30.9067896 ], [ 74.423047, 30.9064421 ], [ 74.4241917, 30.9072513 ], [ 74.4254073, 30.9093335 ], [ 74.4259459, 30.9157474 ], [ 74.4250318, 30.9205447 ], [ 74.4267463, 30.9240597 ], [ 74.428355, 30.9272158 ], [ 74.4301553, 30.9305708 ], [ 74.4302629, 30.9311743 ], [ 74.4301631, 30.9316331 ], [ 74.4296527, 30.9322046 ], [ 74.4287134, 30.9323282 ], [ 74.4261709, 30.9317804 ], [ 74.4230896, 30.9305791 ], [ 74.4206174, 30.9306682 ], [ 74.4206877, 30.9313303 ], [ 74.4213319, 30.9323031 ], [ 74.4237821, 30.9356133 ], [ 74.4245672, 30.9366601 ], [ 74.4253606, 30.9376015 ], [ 74.4253207, 30.9378056 ], [ 74.4255304, 30.9380278 ], [ 74.4262895, 30.9389768 ], [ 74.4274678, 30.9400673 ], [ 74.4277612, 30.9400171 ], [ 74.430588, 30.9407533 ], [ 74.4354382, 30.9405824 ], [ 74.4356295, 30.9407077 ], [ 74.4380476, 30.9406149 ], [ 74.4380897, 30.9405274 ], [ 74.4383596, 30.9404287 ], [ 74.4385147, 30.9404813 ], [ 74.438602, 30.9406355 ], [ 74.4397115, 30.940762 ], [ 74.4409759, 30.9415548 ], [ 74.441397, 30.9436519 ], [ 74.4434816, 30.9445716 ], [ 74.4435498, 30.9470483 ], [ 74.4435959, 30.9486387 ], [ 74.4433963, 30.9502305 ], [ 74.4521618, 30.9500465 ], [ 74.4542958, 30.9499237 ], [ 74.4553289, 30.9501109 ], [ 74.4562264, 30.9504698 ], [ 74.4572505, 30.9511139 ], [ 74.4543577, 30.9546838 ], [ 74.4558281, 30.9551581 ], [ 74.4583207, 30.9552048 ], [ 74.4605147, 30.9552639 ], [ 74.4664027, 30.9553651 ], [ 74.47023, 30.954432 ], [ 74.4737909, 30.9527838 ], [ 74.4748401, 30.9527792 ], [ 74.4761864, 30.9520836 ], [ 74.4761622, 30.9506841 ], [ 74.4864941, 30.9507457 ], [ 74.4917947, 30.9518048 ], [ 74.4980764, 30.9531297 ], [ 74.4989299, 30.9533496 ], [ 74.4996337, 30.9539109 ], [ 74.5019324, 30.9599317 ], [ 74.5025809, 30.9621402 ], [ 74.5030535, 30.9629862 ], [ 74.5034763, 30.963218 ], [ 74.5049933, 30.9638225 ], [ 74.5098057, 30.9661569 ], [ 74.5115159, 30.9685557 ], [ 74.5126982, 30.9708242 ], [ 74.517081, 30.9759665 ], [ 74.5223987, 30.9798023 ], [ 74.5251447, 30.9818314 ], [ 74.5270357, 30.9836577 ], [ 74.5288988, 30.9845678 ], [ 74.5313221, 30.9857766 ], [ 74.532704, 30.9862089 ], [ 74.5348318, 30.9864623 ], [ 74.5358425, 30.9869762 ], [ 74.5385019, 30.9870597 ], [ 74.5406678, 30.9870841 ], [ 74.5445878, 30.9871843 ], [ 74.5467497, 30.9875568 ], [ 74.5514097, 30.9868902 ], [ 74.5518418, 30.9875476 ], [ 74.5517662, 30.9880997 ], [ 74.5469734, 30.9933827 ], [ 74.5469626, 30.99349 ], [ 74.5468519, 30.9943677 ], [ 74.5455327, 30.9953963 ], [ 74.5442367, 30.9969097 ], [ 74.5442721, 30.9971543 ], [ 74.5451503, 30.9975447 ], [ 74.54563, 30.9989613 ], [ 74.5457771, 30.9992723 ], [ 74.5456478, 30.9995063 ], [ 74.5428524, 31.0045658 ], [ 74.5417997, 31.0063257 ], [ 74.5404674, 31.0085531 ], [ 74.5413917, 31.0091242 ], [ 74.5433028, 31.0095368 ], [ 74.5443091, 31.0110908 ], [ 74.5441817, 31.0158872 ], [ 74.5434666, 31.0177379 ], [ 74.5451546, 31.0222308 ], [ 74.5465576, 31.0259535 ], [ 74.5468709, 31.0267069 ], [ 74.5473483, 31.0267635 ], [ 74.5507628, 31.0293087 ], [ 74.5509623, 31.0296358 ], [ 74.5509881, 31.0298707 ], [ 74.5505992, 31.0305096 ], [ 74.5506155, 31.0307296 ], [ 74.5498683, 31.0327618 ], [ 74.5497073, 31.032905 ], [ 74.5496212, 31.0330927 ], [ 74.5548111, 31.0361635 ], [ 74.5575879, 31.0378138 ], [ 74.5587086, 31.0370593 ], [ 74.5588821, 31.0370122 ], [ 74.5592246, 31.0371696 ], [ 74.5592828, 31.0379135 ], [ 74.5593901, 31.0382169 ], [ 74.5594279, 31.0392053 ], [ 74.5603769, 31.0418896 ], [ 74.560496, 31.0425328 ], [ 74.5606768, 31.0430117 ], [ 74.5611132, 31.04467 ], [ 74.5612848, 31.045907 ], [ 74.5626267, 31.0474459 ], [ 74.5631063, 31.0481298 ], [ 74.563263, 31.048421 ], [ 74.5634429, 31.0484421 ], [ 74.566153, 31.0498664 ], [ 74.5685112, 31.050985 ], [ 74.5692772, 31.0512887 ], [ 74.5700663, 31.0515383 ], [ 74.5712449, 31.051757 ], [ 74.5739969, 31.051849 ], [ 74.5782224, 31.0518122 ], [ 74.5808145, 31.0517051 ], [ 74.5841812, 31.0514735 ], [ 74.5857707, 31.0507906 ], [ 74.5876236, 31.0498186 ], [ 74.5883526, 31.0492606 ], [ 74.5891739, 31.048478 ], [ 74.5899936, 31.0471075 ], [ 74.5905321, 31.0446527 ], [ 74.595756, 31.0364167 ], [ 74.5965988, 31.0362416 ], [ 74.6008892, 31.0386037 ], [ 74.6063609, 31.0401306 ], [ 74.6134827, 31.0429435 ], [ 74.6184775, 31.0426585 ], [ 74.6266797, 31.0438728 ], [ 74.6308597, 31.0453141 ], [ 74.6339292, 31.0453247 ], [ 74.635759, 31.0463294 ], [ 74.6388462, 31.0466479 ], [ 74.6495123, 31.0476948 ], [ 74.6594842, 31.0486806 ], [ 74.671434, 31.0520617 ], [ 74.680001, 31.0588815 ], [ 74.6885207, 31.0659581 ], [ 74.6902897, 31.0683269 ], [ 74.6912671, 31.0683641 ], [ 74.691464, 31.068218 ], [ 74.6921163, 31.0684826 ], [ 74.6936028, 31.0684877 ], [ 74.6935663, 31.0689159 ], [ 74.6941076, 31.0688925 ], [ 74.6955281, 31.0708811 ], [ 74.7001613, 31.0768252 ], [ 74.702143, 31.081812 ], [ 74.7015116, 31.0840558 ], [ 74.7018511, 31.0853201 ], [ 74.7029685, 31.0888009 ], [ 74.7039679, 31.0914709 ], [ 74.7039368, 31.0928577 ], [ 74.7038376, 31.0953489 ], [ 74.7037078, 31.0960003 ], [ 74.7034433, 31.0966613 ], [ 74.7033526, 31.0983292 ], [ 74.7011221, 31.1002598 ], [ 74.6999489, 31.1022009 ], [ 74.6997504, 31.1029988 ], [ 74.7000696, 31.105937 ], [ 74.7001141, 31.1090975 ], [ 74.7000278, 31.1118982 ], [ 74.6990294, 31.1134409 ], [ 74.6960774, 31.1159655 ], [ 74.694334, 31.1168436 ], [ 74.694643, 31.1171444 ], [ 74.6934209, 31.1181846 ], [ 74.6923422, 31.1196478 ], [ 74.6915053, 31.1199876 ], [ 74.6916931, 31.1221561 ], [ 74.6922574, 31.1239094 ], [ 74.6907661, 31.1271331 ], [ 74.6895269, 31.129318 ], [ 74.6863244, 31.1290636 ], [ 74.6821948, 31.1285309 ], [ 74.6732159, 31.1249638 ], [ 74.6699028, 31.1253459 ], [ 74.6664681, 31.1262725 ], [ 74.6596096, 31.1359302 ], [ 74.6571226, 31.1344259 ], [ 74.6522109, 31.1304807 ], [ 74.6507969, 31.1304779 ], [ 74.6487133, 31.1296991 ], [ 74.6474001, 31.1289589 ], [ 74.645485, 31.1276796 ], [ 74.6441128, 31.1254028 ], [ 74.6437459, 31.1248968 ], [ 74.6421795, 31.1239994 ], [ 74.6415066, 31.123421 ], [ 74.6408566, 31.1222213 ], [ 74.639478, 31.1208473 ], [ 74.6382034, 31.1200574 ], [ 74.6369177, 31.1194759 ], [ 74.6353838, 31.120512 ], [ 74.6338872, 31.1218108 ], [ 74.6342756, 31.1240279 ], [ 74.6334591, 31.1269926 ], [ 74.6325783, 31.1283133 ], [ 74.6326255, 31.1289525 ], [ 74.6342741, 31.1316166 ], [ 74.6312228, 31.1343726 ], [ 74.6274488, 31.1321328 ], [ 74.6222861, 31.134391 ], [ 74.6189526, 31.1329235 ], [ 74.6179152, 31.1327894 ], [ 74.6098471, 31.1351046 ], [ 74.6030096, 31.1353213 ], [ 74.5997931, 31.1329667 ], [ 74.5988157, 31.1307599 ], [ 74.5956888, 31.1306813 ], [ 74.5956995, 31.1293965 ], [ 74.595236, 31.1279262 ], [ 74.5953283, 31.1258322 ], [ 74.5997534, 31.1206259 ], [ 74.6016567, 31.1182397 ], [ 74.6022409, 31.117442 ], [ 74.6023793, 31.117138 ], [ 74.6029527, 31.1154589 ], [ 74.6033921, 31.1146901 ], [ 74.6035975, 31.1142501 ], [ 74.6042005, 31.113637 ], [ 74.604907, 31.113186 ], [ 74.6055539, 31.1128296 ], [ 74.6069342, 31.1125513 ], [ 74.607844, 31.1117411 ], [ 74.6081846, 31.1110862 ], [ 74.607646, 31.1096702 ], [ 74.60783, 31.108838 ], [ 74.6081058, 31.106473 ], [ 74.6085124, 31.1053932 ], [ 74.6084335, 31.1043464 ], [ 74.6087479, 31.1030369 ], [ 74.6086052, 31.1017646 ], [ 74.6077625, 31.100455 ], [ 74.6082072, 31.0986677 ], [ 74.6067566, 31.0969107 ], [ 74.6064476, 31.0966057 ], [ 74.6059563, 31.0963723 ], [ 74.6038455, 31.0964641 ], [ 74.6030686, 31.0960852 ], [ 74.6023826, 31.0955073 ], [ 74.6024051, 31.0945913 ], [ 74.600202, 31.0945482 ], [ 74.5990509, 31.0944104 ], [ 74.598717, 31.0942723 ], [ 74.5979826, 31.0935734 ], [ 74.5978228, 31.0933141 ], [ 74.5978329, 31.0924902 ], [ 74.5981886, 31.0916537 ], [ 74.5983206, 31.0916176 ], [ 74.5988466, 31.089634 ], [ 74.5984947, 31.0894218 ], [ 74.5975906, 31.0901905 ], [ 74.5967789, 31.090445 ], [ 74.5964131, 31.0904267 ], [ 74.5957524, 31.0900142 ], [ 74.5949461, 31.0900318 ], [ 74.5936543, 31.090285 ], [ 74.5926072, 31.0902999 ], [ 74.5925788, 31.091732 ], [ 74.5923905, 31.0926845 ], [ 74.5921998, 31.0929101 ], [ 74.5919136, 31.0934271 ], [ 74.5911762, 31.0936883 ], [ 74.5905449, 31.0938224 ], [ 74.5887531, 31.0937668 ], [ 74.5876741, 31.0934514 ], [ 74.586922, 31.092965 ], [ 74.5854189, 31.0919626 ], [ 74.5850565, 31.0909789 ], [ 74.5852335, 31.0903511 ], [ 74.5858352, 31.0893526 ], [ 74.5862064, 31.0888985 ], [ 74.586296, 31.0886792 ], [ 74.5861246, 31.0884616 ], [ 74.5856697, 31.088314 ], [ 74.5845603, 31.0883643 ], [ 74.5841118, 31.0885165 ], [ 74.5833048, 31.088531 ], [ 74.5815809, 31.0886224 ], [ 74.5805485, 31.0884525 ], [ 74.5798807, 31.0883512 ], [ 74.5791954, 31.0881081 ], [ 74.5786366, 31.0875199 ], [ 74.5774616, 31.087493 ], [ 74.5758402, 31.0870609 ], [ 74.5741611, 31.0871117 ], [ 74.5739691, 31.0873175 ], [ 74.5738446, 31.0873623 ], [ 74.5735796, 31.0872527 ], [ 74.5734702, 31.0869776 ], [ 74.5728697, 31.0867896 ], [ 74.570693, 31.0830859 ], [ 74.5703999, 31.0828266 ], [ 74.5688975, 31.0831438 ], [ 74.5662912, 31.0835334 ], [ 74.5650089, 31.08373 ], [ 74.5644625, 31.0841706 ], [ 74.5622779, 31.0846994 ], [ 74.560854, 31.0842551 ], [ 74.5592591, 31.0845395 ], [ 74.5583182, 31.0853944 ], [ 74.5569519, 31.0861796 ], [ 74.5551961, 31.0863665 ], [ 74.5538507, 31.0867607 ], [ 74.5526105, 31.087561 ], [ 74.5522108, 31.089704 ], [ 74.5520491, 31.0940702 ], [ 74.5522661, 31.0978227 ], [ 74.5509531, 31.101056 ], [ 74.5506677, 31.1021531 ], [ 74.5513954, 31.1032155 ], [ 74.551727, 31.1046031 ], [ 74.55158, 31.1069403 ], [ 74.5515757, 31.1080102 ], [ 74.5514598, 31.1131749 ], [ 74.5503403, 31.114707 ], [ 74.5501471, 31.1155709 ], [ 74.5500683, 31.1230029 ], [ 74.5452457, 31.1236522 ], [ 74.5392885, 31.1250671 ], [ 74.53159, 31.1280528 ], [ 74.5269739, 31.1298148 ], [ 74.5252525, 31.1303626 ], [ 74.5194533, 31.1312153 ], [ 74.5146555, 31.1318991 ], [ 74.5146451, 31.1318001 ], [ 74.5139116, 31.1317071 ], [ 74.5136063, 31.1316906 ], [ 74.5132401, 31.1317319 ], [ 74.5130822, 31.1319289 ], [ 74.5127332, 31.1325245 ], [ 74.5133172, 31.1326222 ], [ 74.5151672, 31.138457 ], [ 74.5164482, 31.141924 ], [ 74.5166772, 31.1491611 ], [ 74.5169771, 31.1518147 ], [ 74.5146565, 31.1581742 ], [ 74.5142552, 31.1595063 ], [ 74.5140361, 31.1597517 ], [ 74.514094, 31.1603186 ], [ 74.5141801, 31.1606402 ], [ 74.514156, 31.1636538 ], [ 74.5141401, 31.1671384 ], [ 74.5141122, 31.1685786 ], [ 74.5135506, 31.1699985 ], [ 74.5125622, 31.1724484 ], [ 74.5122594, 31.1729009 ], [ 74.5119069, 31.1729803 ], [ 74.5118399, 31.1732022 ], [ 74.5125214, 31.1782062 ], [ 74.5128333, 31.180543 ], [ 74.519894, 31.1820841 ], [ 74.5207222, 31.1826445 ], [ 74.5232918, 31.1894466 ], [ 74.5233293, 31.1970737 ], [ 74.5263651, 31.2024047 ], [ 74.5273296, 31.2058932 ], [ 74.5274819, 31.2111962 ], [ 74.527108, 31.2147559 ], [ 74.5270308, 31.2156276 ], [ 74.5266478, 31.2177517 ], [ 74.526166, 31.2204093 ], [ 74.5244441, 31.2229489 ], [ 74.5222345, 31.2258114 ], [ 74.5215532, 31.2262853 ], [ 74.5196697, 31.2273445 ], [ 74.5192636, 31.2281142 ], [ 74.5246061, 31.2342709 ], [ 74.529154, 31.2389866 ], [ 74.5315482, 31.2428062 ], [ 74.5330904, 31.2455677 ], [ 74.5333055, 31.2460147 ], [ 74.533486, 31.2466512 ], [ 74.5343763, 31.2496545 ], [ 74.5335437, 31.2528464 ], [ 74.5284561, 31.2596467 ], [ 74.5248587, 31.2634407 ], [ 74.5222715, 31.2690238 ], [ 74.5243931, 31.2721949 ], [ 74.526393, 31.2748656 ], [ 74.5286181, 31.2777623 ], [ 74.531575, 31.2819531 ], [ 74.5339064, 31.2874549 ], [ 74.5350222, 31.2904681 ], [ 74.5362983, 31.2936155 ], [ 74.5386447, 31.2985739 ], [ 74.5432549, 31.3029132 ], [ 74.5432083, 31.3055867 ], [ 74.5414289, 31.3068728 ], [ 74.5384613, 31.30802 ], [ 74.5382333, 31.3082478 ], [ 74.5354025, 31.3107232 ], [ 74.535469, 31.3116486 ], [ 74.5360832, 31.3124556 ], [ 74.5389806, 31.3181907 ], [ 74.5388969, 31.3240936 ], [ 74.5389317, 31.3290073 ], [ 74.5407835, 31.3305469 ], [ 74.5437163, 31.3323441 ], [ 74.5506063, 31.3341086 ], [ 74.5495506, 31.3365499 ], [ 74.5479289, 31.3391776 ], [ 74.5504583, 31.344074 ], [ 74.5515623, 31.3479961 ], [ 74.5522773, 31.3496514 ], [ 74.5548485, 31.3561666 ], [ 74.5530584, 31.3613342 ], [ 74.5544285, 31.3647692 ], [ 74.5611453, 31.3674717 ], [ 74.5686909, 31.3703238 ], [ 74.5718151, 31.3700192 ], [ 74.5760653, 31.3723868 ], [ 74.5793231, 31.3743589 ], [ 74.5814185, 31.3759922 ], [ 74.5861247, 31.3798013 ], [ 74.5868081, 31.3805153 ], [ 74.5879888, 31.384005 ], [ 74.5889662, 31.3941061 ], [ 74.5934278, 31.4015445 ], [ 74.5947764, 31.4042368 ], [ 74.595716, 31.4064003 ], [ 74.5958927, 31.4094965 ], [ 74.5973375, 31.4127658 ], [ 74.5969688, 31.4128263 ], [ 74.5964178, 31.413421 ], [ 74.596758, 31.4140025 ], [ 74.5968051, 31.414083 ], [ 74.5979956, 31.4136596 ], [ 74.6005405, 31.4140784 ], [ 74.6037935, 31.4147288 ], [ 74.6043522, 31.4182819 ], [ 74.6079047, 31.4198915 ], [ 74.6087947, 31.4210373 ], [ 74.6108868, 31.4212191 ], [ 74.6118401, 31.4212397 ], [ 74.6129226, 31.4211843 ], [ 74.6143689, 31.42058 ], [ 74.6169379, 31.4190863 ], [ 74.6172962, 31.4189608 ], [ 74.6193433, 31.4188221 ], [ 74.6205455, 31.4192881 ], [ 74.6211109, 31.4204669 ], [ 74.6221703, 31.424147 ], [ 74.6225276, 31.4256296 ], [ 74.6235758, 31.4287451 ], [ 74.6267038, 31.4282246 ], [ 74.6305319, 31.4221543 ], [ 74.6305303, 31.4218792 ], [ 74.6309058, 31.4209096 ], [ 74.6332044, 31.4178411 ], [ 74.634155, 31.4175458 ], [ 74.6350476, 31.4170546 ], [ 74.6360111, 31.4169996 ], [ 74.6371124, 31.4170189 ], [ 74.6393215, 31.4153346 ], [ 74.6441886, 31.4149478 ], [ 74.6467313, 31.4176589 ], [ 74.6479829, 31.4207251 ], [ 74.6481052, 31.4220664 ], [ 74.6494688, 31.4231156 ], [ 74.6523441, 31.4242504 ], [ 74.6534599, 31.4243264 ], [ 74.6553214, 31.4250501 ], [ 74.6557414, 31.4254493 ], [ 74.6553729, 31.4276506 ], [ 74.6537485, 31.4298949 ], [ 74.6514445, 31.4321739 ], [ 74.6506887, 31.4327676 ], [ 74.6478986, 31.4359235 ], [ 74.644621, 31.4382381 ], [ 74.641067, 31.4412502 ], [ 74.6410493, 31.4466611 ], [ 74.6460656, 31.4486556 ], [ 74.6511409, 31.4506509 ], [ 74.6532137, 31.4523816 ], [ 74.6545296, 31.4543608 ], [ 74.652122, 31.4604574 ], [ 74.6498473, 31.4651569 ], [ 74.6417971, 31.4727153 ], [ 74.6409399, 31.4735759 ], [ 74.6369311, 31.4782892 ], [ 74.6336494, 31.4795781 ], [ 74.6355433, 31.482488 ], [ 74.6379369, 31.485124 ], [ 74.6337103, 31.4869726 ], [ 74.6329893, 31.4870544 ], [ 74.6176514, 31.4885087 ], [ 74.6157255, 31.4898344 ], [ 74.6152637, 31.4919477 ], [ 74.6145507, 31.4944745 ], [ 74.6132466, 31.496854 ], [ 74.6123792, 31.4995028 ], [ 74.6052998, 31.5007446 ], [ 74.5940029, 31.5027457 ], [ 74.5927106, 31.4975076 ], [ 74.5864363, 31.4985336 ], [ 74.58574, 31.4987481 ], [ 74.5883643, 31.5042696 ], [ 74.5841039, 31.5126257 ], [ 74.5850706, 31.5169942 ], [ 74.5865436, 31.5193372 ], [ 74.5896075, 31.5200492 ], [ 74.5916514, 31.5212046 ], [ 74.5935718, 31.5222789 ], [ 74.5959426, 31.5234496 ], [ 74.6010485, 31.5224808 ], [ 74.6040968, 31.5225874 ], [ 74.6069343, 31.523857 ], [ 74.6078967, 31.5241787 ], [ 74.6100012, 31.5243785 ], [ 74.6145577, 31.526096 ], [ 74.6148814, 31.5286434 ], [ 74.6151467, 31.53245 ], [ 74.6170398, 31.5392255 ], [ 74.6170978, 31.5438714 ], [ 74.6178182, 31.5488344 ], [ 74.6201463, 31.5528851 ], [ 74.6171916, 31.558462 ], [ 74.6094701, 31.5631979 ], [ 74.6168086, 31.5669743 ], [ 74.617595, 31.5693839 ], [ 74.6108077, 31.5700294 ], [ 74.6025921, 31.5740939 ], [ 74.59322, 31.5753457 ], [ 74.5925811, 31.5764206 ], [ 74.5918544, 31.5764273 ], [ 74.5910304, 31.5770378 ], [ 74.5903008, 31.5779884 ], [ 74.5887215, 31.5793156 ], [ 74.5859321, 31.5808145 ], [ 74.5853742, 31.581436 ], [ 74.5862668, 31.5828874 ], [ 74.5869485, 31.5834847 ], [ 74.5834978, 31.5856934 ], [ 74.5817747, 31.5864214 ], [ 74.5810546, 31.5871877 ], [ 74.5817702, 31.5878909 ], [ 74.5814581, 31.5888961 ], [ 74.5808738, 31.5907506 ], [ 74.5809055, 31.5910543 ], [ 74.5813715, 31.5909608 ], [ 74.5815677, 31.5917034 ], [ 74.5813388, 31.5917405 ], [ 74.5811427, 31.5924831 ], [ 74.5808266, 31.5925574 ], [ 74.5810773, 31.5935599 ], [ 74.5809251, 31.5942479 ], [ 74.579726, 31.5944882 ], [ 74.5794099, 31.5948594 ], [ 74.5782003, 31.5951286 ], [ 74.5778625, 31.5949987 ], [ 74.5765438, 31.5957784 ], [ 74.5748547, 31.5977648 ], [ 74.5749964, 31.5985445 ], [ 74.5756175, 31.5984238 ], [ 74.5760534, 31.5984424 ], [ 74.5770778, 31.5984981 ], [ 74.577445, 31.5994365 ], [ 74.5789181, 31.5997016 ], [ 74.5783709, 31.6000489 ], [ 74.5770513, 31.6004509 ], [ 74.576311, 31.6004509 ], [ 74.5761929, 31.6007891 ], [ 74.5757531, 31.6007434 ], [ 74.5755366, 31.6030704 ], [ 74.5755278, 31.6031649 ], [ 74.5755142, 31.603213 ], [ 74.5753776, 31.6036949 ], [ 74.5752032, 31.6038717 ], [ 74.5745166, 31.6039813 ], [ 74.5742188, 31.603969 ], [ 74.5732747, 31.6037771 ], [ 74.5731218, 31.6043286 ], [ 74.5730145, 31.6049865 ], [ 74.5731647, 31.6054068 ], [ 74.5719363, 31.6056718 ], [ 74.5710512, 31.6059505 ], [ 74.5697074, 31.6061483 ], [ 74.569348, 31.6061757 ], [ 74.5692112, 31.606549 ], [ 74.5688732, 31.6066312 ], [ 74.5673851, 31.6069657 ], [ 74.5665804, 31.6070205 ], [ 74.5642201, 31.6072489 ], [ 74.5630399, 31.607523 ], [ 74.5619992, 31.607523 ], [ 74.5600895, 31.6072124 ], [ 74.5588986, 31.6073129 ], [ 74.5573322, 31.6076053 ], [ 74.5554986, 31.6078154 ], [ 74.5557154, 31.6087456 ], [ 74.5445875, 31.6099564 ], [ 74.5425083, 31.6161375 ], [ 74.5505922, 31.6319371 ], [ 74.5502692, 31.6327456 ], [ 74.549434, 31.6337623 ], [ 74.5501807, 31.6382542 ], [ 74.549891, 31.6447945 ], [ 74.5456429, 31.6495156 ], [ 74.5413836, 31.6494503 ], [ 74.5396981, 31.6513399 ], [ 74.5397812, 31.6527268 ], [ 74.5402453, 31.6526944 ], [ 74.5417832, 31.6603647 ], [ 74.5369542, 31.6647499 ], [ 74.5320447, 31.6685084 ], [ 74.5333139, 31.6704917 ], [ 74.536112, 31.6725708 ], [ 74.537113, 31.6772238 ], [ 74.5347838, 31.6799766 ], [ 74.5347462, 31.6810037 ], [ 74.5322914, 31.682434 ], [ 74.5322013, 31.6825558 ], [ 74.5282231, 31.6853035 ], [ 74.5254202, 31.6878123 ], [ 74.5169975, 31.6901115 ], [ 74.5089959, 31.6941876 ], [ 74.5084616, 31.6943236 ], [ 74.5057456, 31.6968664 ], [ 74.5050853, 31.70366 ], [ 74.5032522, 31.7044336 ], [ 74.5023617, 31.7058863 ], [ 74.4727797, 31.7205672 ], [ 74.4897281, 31.7285954 ], [ 74.4950803, 31.7406377 ], [ 74.5517237, 31.7531261 ], [ 74.5441415, 31.7763187 ], [ 74.5548458, 31.791483 ], [ 74.5494937, 31.7981732 ], [ 74.5601979, 31.8151217 ], [ 74.5557378, 31.82761 ], [ 74.5802684, 31.8436664 ], [ 74.5833905, 31.8570467 ], [ 74.5958788, 31.8646289 ], [ 74.5990009, 31.8851454 ], [ 74.6266536, 31.8829154 ], [ 74.6378039, 31.8967417 ], [ 74.6507383, 31.8980798 ], [ 74.6596585, 31.9181503 ], [ 74.6846351, 31.9230564 ], [ 74.7011375, 31.9163662 ], [ 74.7091657, 31.9194883 ], [ 74.7073817, 31.9355447 ], [ 74.7247761, 31.9431269 ], [ 74.7394945, 31.9386668 ], [ 74.7457387, 31.9417889 ], [ 74.7457387, 31.9516011 ], [ 74.759565, 31.946249 ], [ 74.8014901, 31.9618594 ], [ 74.8090723, 31.9551692 ], [ 74.8197766, 31.9765778 ], [ 74.8184385, 31.9975403 ], [ 74.8456452, 32.0091366 ], [ 74.8402931, 32.0202869 ], [ 74.8652697, 32.023855 ], [ 74.8621477, 32.0452635 ], [ 74.8795421, 32.0519537 ], [ 74.8978286, 32.0497237 ], [ 74.9087938, 32.05784 ], [ 74.9133308, 32.059797 ], [ 74.9151359, 32.0586531 ], [ 74.9177378, 32.056765 ], [ 74.9184208, 32.0578538 ], [ 74.919673, 32.0608996 ], [ 74.926633, 32.0648548 ], [ 74.9335118, 32.0641658 ], [ 74.9445048, 32.0614508 ], [ 74.9468466, 32.0596041 ], [ 74.9481475, 32.0583913 ], [ 74.9512047, 32.0576333 ], [ 74.9524732, 32.0577022 ], [ 74.9539367, 32.0585704 ], [ 74.9602301, 32.0574403 ], [ 74.9717272, 32.0534985 ], [ 74.976492, 32.0483574 ], [ 74.9746869, 32.0406796 ], [ 74.992383, 32.0434795 ], [ 74.9990732, 32.0341133 ], [ 75.0102235, 32.0452635 ], [ 75.0240498, 32.0492777 ], [ 75.0285099, 32.0425875 ], [ 75.0579467, 32.062212 ], [ 75.0922896, 32.0595359 ], [ 75.0976417, 32.0702402 ], [ 75.1163742, 32.0827285 ], [ 75.1444729, 32.0827285 ], [ 75.1528666, 32.0796743 ], [ 75.157299, 32.0724997 ], [ 75.1587197, 32.0685029 ], [ 75.1645434, 32.0680101 ], [ 75.1682665, 32.0714403 ], [ 75.1716796, 32.0791604 ], [ 75.1747524, 32.0811752 ], [ 75.1814226, 32.0818561 ], [ 75.1850599, 32.0836205 ], [ 75.1854811, 32.0954395 ], [ 75.1874098, 32.0993881 ], [ 75.1890171, 32.100171 ], [ 75.1935577, 32.100103 ], [ 75.1933166, 32.1152492 ], [ 75.1953182, 32.1166254 ], [ 75.1986207, 32.1175294 ], [ 75.2047729, 32.1155255 ], [ 75.2121219, 32.1190949 ], [ 75.2226459, 32.1129794 ], [ 75.2249841, 32.1052698 ], [ 75.2234533, 32.0913544 ], [ 75.2276923, 32.0846254 ], [ 75.2332009, 32.0843039 ], [ 75.2390878, 32.0875451 ], [ 75.2719819, 32.1126888 ], [ 75.2744807, 32.118002 ], [ 75.2771416, 32.1349828 ], [ 75.2832306, 32.1378983 ], [ 75.2833164, 32.138587 ], [ 75.2835637, 32.1395345 ], [ 75.2836721, 32.140835 ], [ 75.2854176, 32.1436406 ], [ 75.3100478, 32.1552196 ], [ 75.3177519, 32.1709027 ], [ 75.3168892, 32.1925214 ], [ 75.3227257, 32.201465 ], [ 75.3336141, 32.2045597 ], [ 75.3197642, 32.2081699 ], [ 75.3133423, 32.2130805 ], [ 75.3176505, 32.2180531 ], [ 75.3337261, 32.2190884 ], [ 75.3400117, 32.2175825 ], [ 75.3431267, 32.2188531 ], [ 75.3464642, 32.2179589 ], [ 75.3522445, 32.2221524 ], [ 75.3591467, 32.2270411 ], [ 75.376912, 32.2285177 ], [ 75.3784608, 32.2302949 ], [ 75.3792897, 32.2306241 ], [ 75.3792897, 32.2321355 ], [ 75.3798449, 32.2323144 ], [ 75.3805054, 32.2381763 ], [ 75.380441, 32.2389594 ], [ 75.3795238, 32.2407992 ], [ 75.377048, 32.2459809 ], [ 75.3779824, 32.250509 ], [ 75.3796607, 32.2527224 ], [ 75.3780851, 32.2572163 ], [ 75.3780748, 32.2579004 ], [ 75.3791787, 32.2614601 ], [ 75.3791636, 32.2633951 ], [ 75.3842456, 32.2701772 ], [ 75.3842975, 32.2709576 ], [ 75.3840733, 32.2716786 ], [ 75.3803842, 32.2733852 ], [ 75.3780394, 32.276442 ], [ 75.3769225, 32.2771806 ], [ 75.3726243, 32.2791677 ], [ 75.3709593, 32.279728 ], [ 75.3679172, 32.2806754 ], [ 75.3605653, 32.2830792 ], [ 75.3560956, 32.286664 ], [ 75.3502978, 32.2905372 ], [ 75.3459738, 32.2915444 ], [ 75.3392641, 32.2931758 ], [ 75.3379954, 32.2947649 ], [ 75.3358885, 32.2951562 ], [ 75.3300786, 32.2974425 ], [ 75.3255283, 32.2958061 ], [ 75.3213768, 32.2971471 ], [ 75.3213912, 32.2982484 ], [ 75.3237182, 32.3019564 ], [ 75.3303106, 32.3066877 ], [ 75.332102, 32.3076155 ], [ 75.3351006, 32.3109031 ], [ 75.3352683, 32.3140043 ], [ 75.3361985, 32.3159551 ], [ 75.3374366, 32.3189749 ], [ 75.3377093, 32.3206882 ], [ 75.3376019, 32.3208698 ], [ 75.3376463, 32.321795 ], [ 75.3342436, 32.3261729 ], [ 75.3340637, 32.3287964 ], [ 75.3318397, 32.3271301 ], [ 75.3269616, 32.32817 ], [ 75.3269764, 32.3294729 ], [ 75.3259904, 32.3328988 ], [ 75.3259311, 32.3337069 ], [ 75.3259756, 32.335157 ], [ 75.3258392, 32.3358555 ], [ 75.3257132, 32.3371615 ], [ 75.3254679, 32.3390535 ], [ 75.3242608, 32.3415705 ], [ 75.322062, 32.3439314 ], [ 75.3195055, 32.3437475 ], [ 75.3162981, 32.3437834 ], [ 75.3141638, 32.34462 ], [ 75.3115085, 32.3453736 ], [ 75.3097129, 32.3444403 ], [ 75.3074666, 32.3443965 ], [ 75.3054965, 32.3447963 ], [ 75.2994727, 32.3470641 ], [ 75.3010453, 32.3519178 ], [ 75.2998292, 32.3537777 ], [ 75.289937, 32.356434 ], [ 75.2875626, 32.3616421 ], [ 75.2888742, 32.3656895 ], [ 75.2901533, 32.3678148 ], [ 75.2905936, 32.3692316 ], [ 75.2904772, 32.3705152 ], [ 75.285668, 32.3725016 ], [ 75.2840123, 32.3723979 ], [ 75.2745136, 32.375869 ], [ 75.2712949, 32.3780117 ], [ 75.2703671, 32.3766482 ], [ 75.2675626, 32.3750986 ], [ 75.2620452, 32.3737316 ], [ 75.2589136, 32.3761039 ], [ 75.2577498, 32.3764138 ], [ 75.257278, 32.3770203 ], [ 75.2570421, 32.3777951 ], [ 75.2571994, 32.3782909 ], [ 75.2586756, 32.3814421 ], [ 75.2606358, 32.3867519 ], [ 75.2579305, 32.3874534 ], [ 75.2574496, 32.3878596 ], [ 75.257546, 32.3891054 ], [ 75.2571341, 32.3895672 ], [ 75.2544991, 32.3907706 ], [ 75.2503822, 32.391993 ], [ 75.2465446, 32.3901097 ], [ 75.2459917, 32.3891335 ], [ 75.2435381, 32.3870282 ], [ 75.2419536, 32.3869959 ], [ 75.2381356, 32.3888364 ], [ 75.2352766, 32.3903818 ], [ 75.2314451, 32.3993966 ], [ 75.1975483, 32.4043027 ], [ 75.1924867, 32.4197993 ], [ 75.1881696, 32.4248652 ], [ 75.1796357, 32.4256002 ], [ 75.1603038, 32.4162893 ], [ 75.1477062, 32.4132018 ], [ 75.1395668, 32.414561 ], [ 75.1279705, 32.4212512 ], [ 75.1208343, 32.4413217 ], [ 75.0824773, 32.4801247 ], [ 75.0365381, 32.492167 ], [ 75.0213737, 32.4854768 ], [ 74.9999652, 32.4591622 ], [ 74.9794487, 32.4475659 ], [ 74.9491199, 32.454256 ], [ 74.9335095, 32.4676364 ], [ 74.8996126, 32.4662983 ], [ 74.8789707, 32.4823957 ], [ 74.8803808, 32.4848627 ], [ 74.8843251, 32.490461 ], [ 74.8770995, 32.4938421 ], [ 74.8715245, 32.4886992 ], [ 74.8691958, 32.4862684 ], [ 74.867784, 32.4852862 ], [ 74.8655425, 32.4867963 ], [ 74.864349, 32.4865876 ], [ 74.863796, 32.4872997 ], [ 74.8631264, 32.4896937 ], [ 74.8623114, 32.4906021 ], [ 74.8584835, 32.493794 ], [ 74.8558781, 32.4945674 ], [ 74.8545828, 32.4945183 ], [ 74.8540734, 32.4929224 ], [ 74.849474, 32.4925787 ], [ 74.8481641, 32.4905776 ], [ 74.8458936, 32.4905776 ], [ 74.8451804, 32.4922717 ], [ 74.841105, 32.4928978 ], [ 74.835387, 32.4961811 ], [ 74.8295194, 32.4953654 ], [ 74.8257497, 32.4961265 ], [ 74.8196804, 32.4980906 ], [ 74.8175383, 32.4924253 ], [ 74.814863, 32.4873701 ], [ 74.8136436, 32.484985 ], [ 74.8124065, 32.4803636 ], [ 74.8048251, 32.4827041 ], [ 74.8009902, 32.4829725 ], [ 74.8002656, 32.4797524 ], [ 74.7961303, 32.4773223 ], [ 74.7879834, 32.4784256 ], [ 74.7834239, 32.479648 ], [ 74.7688442, 32.4828383 ], [ 74.7656455, 32.4816308 ], [ 74.7550951, 32.482883 ], [ 74.7526563, 32.4785746 ], [ 74.7487154, 32.4793051 ], [ 74.7422297, 32.4785746 ], [ 74.7344008, 32.4803785 ], [ 74.7294702, 32.4808258 ], [ 74.7268901, 32.47607 ], [ 74.7174354, 32.4772776 ], [ 74.7168875, 32.4766216 ], [ 74.7138479, 32.4771583 ], [ 74.7134768, 32.4778292 ], [ 74.7116388, 32.4783212 ], [ 74.7129112, 32.4828085 ], [ 74.7140776, 32.4877726 ], [ 74.711091, 32.490411 ], [ 74.7116742, 32.491216 ], [ 74.7088643, 32.4935413 ], [ 74.7060367, 32.4935711 ], [ 74.7008764, 32.4926618 ], [ 74.6986672, 32.4904242 ], [ 74.6967762, 32.4886653 ], [ 74.6964228, 32.4887994 ], [ 74.6948323, 32.4880988 ], [ 74.6940547, 32.4867423 ], [ 74.6883465, 32.4868616 ], [ 74.6871978, 32.4895299 ], [ 74.6855543, 32.4913037 ], [ 74.6812069, 32.4927198 ], [ 74.683522, 32.4958798 ], [ 74.6855013, 32.499457 ], [ 74.6859784, 32.5038538 ], [ 74.6818784, 32.5118271 ], [ 74.6844878, 32.5168483 ], [ 74.688421, 32.521112 ], [ 74.6899821, 32.5234098 ], [ 74.6906172, 32.5272978 ], [ 74.6904925, 32.5324432 ], [ 74.6901721, 32.5341783 ], [ 74.6880031, 32.5349992 ], [ 74.6864502, 32.5355394 ], [ 74.6859942, 32.535607 ], [ 74.685606, 32.5355031 ], [ 74.6851377, 32.5354875 ], [ 74.6830179, 32.5359602 ], [ 74.679561, 32.5366927 ], [ 74.6766648, 32.5376434 ], [ 74.6752167, 32.538246 ], [ 74.674244, 32.538946 ], [ 74.6697016, 32.5405681 ], [ 74.6656408, 32.5427862 ], [ 74.6634779, 32.5445004 ], [ 74.6620237, 32.5456899 ], [ 74.6616046, 32.5463652 ], [ 74.6610685, 32.5478819 ], [ 74.6608405, 32.5496584 ], [ 74.6608405, 32.5502869 ], [ 74.6612287, 32.5519646 ], [ 74.661161, 32.5526813 ], [ 74.6610486, 32.5538627 ], [ 74.661135, 32.554068 ], [ 74.6651334, 32.5534547 ], [ 74.668056, 32.5530918 ], [ 74.6706245, 32.5528241 ], [ 74.6714277, 32.5526942 ], [ 74.6720488, 32.5525367 ], [ 74.6723944, 32.5524501 ], [ 74.6725999, 32.5525682 ], [ 74.6729221, 32.5530091 ], [ 74.6732537, 32.5536901 ], [ 74.6738561, 32.5550796 ], [ 74.674183, 32.557024 ], [ 74.6745846, 32.5604484 ], [ 74.6748041, 32.5625581 ], [ 74.6748872, 32.563681 ], [ 74.6750051, 32.564726 ], [ 74.6747774, 32.5654798 ], [ 74.6741391, 32.566285 ], [ 74.6737529, 32.5671141 ], [ 74.6732773, 32.5679501 ], [ 74.6730211, 32.5681043 ], [ 74.6727324, 32.5686564 ], [ 74.6726091, 32.5688011 ], [ 74.6719063, 32.5687016 ], [ 74.6712465, 32.5685841 ], [ 74.6706081, 32.5685977 ], [ 74.6699622, 32.5687187 ], [ 74.6696564, 32.5686779 ], [ 74.6689751, 32.5682981 ], [ 74.6683474, 32.5682213 ], [ 74.6678485, 32.5681218 ], [ 74.667575, 32.5679003 ], [ 74.6675964, 32.5676245 ], [ 74.6679022, 32.5672855 ], [ 74.6678754, 32.5670142 ], [ 74.6677305, 32.5668515 ], [ 74.6675428, 32.5668017 ], [ 74.6669044, 32.5667927 ], [ 74.666545, 32.5668786 ], [ 74.6662929, 32.5668108 ], [ 74.6662285, 32.5666164 ], [ 74.6663519, 32.5663361 ], [ 74.6663841, 32.5661145 ], [ 74.6661695, 32.5658297 ], [ 74.6644582, 32.5647718 ], [ 74.6633263, 32.5642067 ], [ 74.6627094, 32.5639942 ], [ 74.6617224, 32.5638495 ], [ 74.661422, 32.5639173 ], [ 74.661261, 32.5641569 ], [ 74.6608909, 32.564392 ], [ 74.6598341, 32.5649391 ], [ 74.6595873, 32.5651516 ], [ 74.6593674, 32.5651923 ], [ 74.6592172, 32.5651516 ], [ 74.6590294, 32.5649572 ], [ 74.6589061, 32.5648532 ], [ 74.6586808, 32.5648306 ], [ 74.6579887, 32.5648758 ], [ 74.6575435, 32.56493 ], [ 74.6572699, 32.5649933 ], [ 74.6571412, 32.56493 ], [ 74.6568676, 32.5646769 ], [ 74.6564867, 32.564496 ], [ 74.6562775, 32.5644689 ], [ 74.6560146, 32.5645774 ], [ 74.6556552, 32.5647311 ], [ 74.6553336, 32.5647601 ], [ 74.6549847, 32.564713 ], [ 74.6543034, 32.5649662 ], [ 74.6533002, 32.5651516 ], [ 74.6523776, 32.5654861 ], [ 74.6522377, 32.5718646 ], [ 74.6538812, 32.5780449 ], [ 74.6556213, 32.5810855 ], [ 74.65106, 32.5834921 ], [ 74.6511437, 32.5851672 ], [ 74.6516463, 32.5863067 ], [ 74.6514977, 32.5875786 ], [ 74.6519714, 32.5886426 ], [ 74.6539991, 32.5892916 ], [ 74.6564206, 32.5910927 ], [ 74.6575466, 32.5927876 ], [ 74.6597766, 32.597092 ], [ 74.6559545, 32.5984094 ], [ 74.6544637, 32.5987615 ], [ 74.6533645, 32.5993851 ], [ 74.6521398, 32.5999672 ], [ 74.6496132, 32.5982155 ], [ 74.6454354, 32.599053 ], [ 74.6421609, 32.6003342 ], [ 74.6420135, 32.6025718 ], [ 74.6391704, 32.6036744 ], [ 74.6393635, 32.6058164 ], [ 74.640093, 32.6085639 ], [ 74.6398356, 32.6113746 ], [ 74.6389074, 32.614246 ], [ 74.6415591, 32.6151186 ], [ 74.6434683, 32.614462 ], [ 74.645768, 32.6139157 ], [ 74.6492098, 32.6137129 ], [ 74.6509967, 32.6135827 ], [ 74.6536644, 32.6143992 ], [ 74.6550624, 32.614847 ], [ 74.6553821, 32.6188878 ], [ 74.6555318, 32.6207828 ], [ 74.6551525, 32.6243657 ], [ 74.655705, 32.6270448 ], [ 74.6568224, 32.6306838 ], [ 74.653456, 32.6315327 ], [ 74.6564249, 32.6327903 ], [ 74.6554265, 32.6366448 ], [ 74.6564073, 32.6367267 ], [ 74.6637817, 32.6350063 ], [ 74.6672457, 32.6376293 ], [ 74.6706079, 32.6385485 ], [ 74.6723996, 32.6447894 ], [ 74.6779121, 32.6490466 ], [ 74.6804404, 32.6489476 ], [ 74.6817343, 32.6514246 ], [ 74.6855854, 32.6511523 ], [ 74.6884666, 32.6508 ], [ 74.6902927, 32.652295 ], [ 74.6914836, 32.6537588 ], [ 74.693433, 32.6569781 ], [ 74.6953481, 32.6603708 ], [ 74.6967697, 32.6659685 ], [ 74.6916584, 32.66768 ], [ 74.6898935, 32.6697089 ], [ 74.6685275, 32.6942674 ], [ 74.6570312, 32.7040903 ], [ 74.6602475, 32.7168039 ], [ 74.6640262, 32.7250009 ], [ 74.6626671, 32.7270493 ], [ 74.6549658, 32.7290739 ], [ 74.6607777, 32.7345999 ], [ 74.6642238, 32.7390595 ], [ 74.6658807, 32.7451975 ], [ 74.6679476, 32.747317 ], [ 74.6737768, 32.7541549 ], [ 74.6776391, 32.7614993 ], [ 74.6783902, 32.7694746 ], [ 74.6783902, 32.7710082 ], [ 74.6816732, 32.7762133 ], [ 74.6825744, 32.7805071 ], [ 74.6851279, 32.7869473 ], [ 74.6890761, 32.7935855 ], [ 74.6943196, 32.8023484 ], [ 74.6959826, 32.8042332 ], [ 74.6970233, 32.8073443 ], [ 74.6971725, 32.8114285 ], [ 74.6987496, 32.8128172 ], [ 74.7017859, 32.8135385 ], [ 74.7053586, 32.8172174 ], [ 74.7050152, 32.8244033 ], [ 74.7045324, 32.8349962 ], [ 74.7049636, 32.8385665 ], [ 74.7052547, 32.8419661 ], [ 74.6940766, 32.8406332 ], [ 74.6875706, 32.837576 ], [ 74.6825929, 32.8364509 ], [ 74.6788814, 32.8342374 ], [ 74.67664, 32.8315958 ], [ 74.667747, 32.8247712 ], [ 74.6654037, 32.8238539 ], [ 74.6631914, 32.8248446 ], [ 74.6603532, 32.8269727 ], [ 74.6585484, 32.8298102 ], [ 74.6543566, 32.8291131 ], [ 74.6479671, 32.8248201 ], [ 74.6424287, 32.8196434 ], [ 74.6410447, 32.8184352 ], [ 74.6393173, 32.8159557 ], [ 74.6373754, 32.8143687 ], [ 74.6330333, 32.8075592 ], [ 74.6396097, 32.7981812 ], [ 74.6455917, 32.793948 ], [ 74.6493323, 32.7926388 ], [ 74.6533494, 32.790204 ], [ 74.6579924, 32.7868391 ], [ 74.6552707, 32.7836821 ], [ 74.653626, 32.7808677 ], [ 74.6470618, 32.7808799 ], [ 74.6423751, 32.7817488 ], [ 74.6407013, 32.782226 ], [ 74.6395806, 32.782226 ], [ 74.6380232, 32.7806474 ], [ 74.6358982, 32.7790077 ], [ 74.6326089, 32.7766703 ], [ 74.6325361, 32.7746511 ], [ 74.6317792, 32.7707962 ], [ 74.6305566, 32.769609 ], [ 74.6305932, 32.76735 ], [ 74.6316124, 32.7659426 ], [ 74.6322025, 32.7643503 ], [ 74.6340214, 32.7626279 ], [ 74.6383878, 32.7598495 ], [ 74.6382277, 32.7580258 ], [ 74.6389264, 32.7571812 ], [ 74.637238, 32.7517709 ], [ 74.6357098, 32.7521381 ], [ 74.6350402, 32.7515628 ], [ 74.6325659, 32.7521381 ], [ 74.6273844, 32.7555165 ], [ 74.624357, 32.7565815 ], [ 74.624488, 32.7573403 ], [ 74.6229598, 32.7593355 ], [ 74.6213005, 32.7605839 ], [ 74.6175308, 32.7615019 ], [ 74.6130672, 32.7595607 ], [ 74.6128489, 32.7581899 ], [ 74.6058844, 32.7581077 ], [ 74.6033399, 32.7574872 ], [ 74.6001299, 32.7566696 ], [ 74.5964852, 32.7567301 ], [ 74.5934633, 32.7561058 ], [ 74.5908654, 32.751766 ], [ 74.5887271, 32.7508742 ], [ 74.5836551, 32.7538616 ], [ 74.5822237, 32.7534901 ], [ 74.5794668, 32.7497744 ], [ 74.5776289, 32.7501608 ], [ 74.5777526, 32.7505918 ], [ 74.5766392, 32.7511269 ], [ 74.5758086, 32.7506364 ], [ 74.5751017, 32.751335 ], [ 74.5756849, 32.7527767 ], [ 74.5756849, 32.7560167 ], [ 74.5736349, 32.7574583 ], [ 74.5706129, 32.7586621 ], [ 74.5689871, 32.7600294 ], [ 74.565594, 32.7600739 ], [ 74.5623776, 32.7590188 ], [ 74.5595324, 32.7582311 ], [ 74.5545841, 32.7569233 ], [ 74.5487522, 32.7526429 ], [ 74.5464548, 32.7484069 ], [ 74.5450764, 32.7466828 ], [ 74.5454298, 32.7485407 ], [ 74.5429204, 32.7503986 ], [ 74.5431148, 32.751662 ], [ 74.5418777, 32.7515876 ], [ 74.540888, 32.7499379 ], [ 74.5376894, 32.7498635 ], [ 74.5364169, 32.7499379 ], [ 74.4959011, 32.7644387 ], [ 74.4951336, 32.7647134 ], [ 74.4836371, 32.7697982 ], [ 74.4597216, 32.7809938 ], [ 74.459167, 32.780278 ], [ 74.451944, 32.779167 ], [ 74.443889, 32.777222 ], [ 74.436111, 32.775 ], [ 74.428056, 32.773056 ], [ 74.4230972, 32.7722926 ], [ 74.420833, 32.771944 ], [ 74.413889, 32.771667 ], [ 74.408611, 32.771667 ], [ 74.407222, 32.772778 ], [ 74.407222, 32.773611 ], [ 74.404722, 32.780278 ], [ 74.402222, 32.786944 ], [ 74.399722, 32.793611 ], [ 74.3975, 32.800278 ], [ 74.397241, 32.8009687 ], [ 74.390778, 32.801758 ], [ 74.388039, 32.803448 ], [ 74.378952, 32.801624 ], [ 74.3564689, 32.7752404 ], [ 74.3510278, 32.778339 ], [ 74.3466306, 32.7760915 ], [ 74.3382633, 32.7789242 ], [ 74.3275444, 32.7829551 ], [ 74.3262577, 32.7894975 ], [ 74.3180059, 32.8034142 ], [ 74.314689, 32.8204231 ], [ 74.2873764, 32.8332281 ], [ 74.2867777, 32.8334416 ], [ 74.2862266, 32.8337097 ], [ 74.2857075, 32.8337745 ], [ 74.2844715, 32.8337812 ], [ 74.2841932, 32.8337868 ], [ 74.2838795, 32.8338499 ], [ 74.2832579, 32.8338287 ], [ 74.2830243, 32.8338368 ], [ 74.2827704, 32.8338651 ], [ 74.2823961, 32.8339521 ], [ 74.2821342, 32.8340145 ], [ 74.2817803, 32.8340628 ], [ 74.2814273, 32.834074 ], [ 74.2813459, 32.8340286 ], [ 74.2806471, 32.8340166 ], [ 74.2714133, 32.8388583 ], [ 74.261574, 32.836632 ], [ 74.253395, 32.846275 ], [ 74.238182, 32.849991 ], [ 74.230431, 32.851505 ], [ 74.210419, 32.857155 ], [ 74.202423, 32.859833 ], [ 74.183487, 32.865696 ], [ 74.167, 32.874767 ], [ 74.156708, 32.886765 ], [ 74.1531051, 32.8895747 ], [ 74.1417378, 32.8964798 ], [ 74.1349407, 32.8997305 ], [ 74.1271685, 32.9002552 ], [ 74.1165289, 32.9039709 ], [ 74.1130503, 32.9049119 ], [ 74.110901, 32.906738 ], [ 74.0904031, 32.9091765 ], [ 74.0867062, 32.9090421 ], [ 74.0797926, 32.9105572 ], [ 74.0744219, 32.9089443 ], [ 74.0633603, 32.9130132 ], [ 74.0637969, 32.9156891 ], [ 74.0632584, 32.9200265 ], [ 74.0591103, 32.9212238 ], [ 74.0606677, 32.928664 ], [ 74.0603911, 32.9343078 ], [ 74.0513915, 32.9363732 ], [ 74.037562, 32.9297637 ], [ 74.0278203, 32.9305471 ], [ 74.0171612, 32.9360895 ], [ 74.014923, 32.940022 ], [ 74.006462, 32.948277 ], [ 73.998421, 32.947937 ], [ 73.990639, 32.946201 ], [ 73.963821, 32.943371 ], [ 73.953461, 32.949799 ], [ 73.9538106, 32.9546962 ], [ 73.954437, 32.96347 ], [ 73.953186, 32.970455 ], [ 73.941841, 32.983624 ], [ 73.936295, 32.989513 ], [ 73.926003, 33.001507 ], [ 73.908554, 32.998066 ], [ 73.891914, 32.995541 ], [ 73.8808285, 32.9995235 ], [ 73.8736831, 33.001395 ], [ 73.8647352, 33.0042383 ], [ 73.8568388, 33.0044183 ], [ 73.8487707, 33.0098526 ], [ 73.8387486, 33.0127385 ], [ 73.8354012, 33.011515 ], [ 73.8337919, 33.008438 ], [ 73.8282343, 33.0059728 ], [ 73.8247797, 33.0019419 ], [ 73.8176557, 33.0007541 ], [ 73.8112399, 33.0002683 ], [ 73.8051459, 33.0006822 ], [ 73.7990305, 33.0006102 ], [ 73.7964555, 32.9983247 ], [ 73.7968847, 32.9922237 ], [ 73.7953612, 32.9882462 ], [ 73.7925932, 32.9863204 ], [ 73.7875721, 32.9808666 ], [ 73.7836453, 32.9776086 ], [ 73.7806412, 32.9769245 ], [ 73.7795683, 32.9774285 ], [ 73.7782594, 32.9788326 ], [ 73.7769076, 32.9815326 ], [ 73.7745043, 32.9826305 ], [ 73.7724243, 32.9828756 ], [ 73.7695704, 32.9831096 ], [ 73.7659226, 32.9849815 ], [ 73.7631975, 32.9875913 ], [ 73.7613521, 32.9917489 ], [ 73.7602793, 32.99722 ], [ 73.760408, 33.0029067 ], [ 73.7617384, 33.0100685 ], [ 73.7624036, 33.0145489 ], [ 73.7604295, 33.0178595 ], [ 73.7536274, 33.0225554 ], [ 73.7516104, 33.0268012 ], [ 73.7477051, 33.0316945 ], [ 73.7457095, 33.034141 ], [ 73.7450229, 33.0375229 ], [ 73.7456451, 33.0404729 ], [ 73.7478553, 33.0439445 ], [ 73.7504517, 33.0461568 ], [ 73.7513529, 33.0483691 ], [ 73.751031, 33.0505274 ], [ 73.7494431, 33.0528475 ], [ 73.7403236, 33.0597356 ], [ 73.7353025, 33.0623612 ], [ 73.7258182, 33.0641055 ], [ 73.7169562, 33.0668209 ], [ 73.7102829, 33.0691406 ], [ 73.7028313, 33.0721302 ], [ 73.6983467, 33.0726157 ], [ 73.6916304, 33.0726517 ], [ 73.6856437, 33.0727595 ], [ 73.6771036, 33.0731731 ], [ 73.6671945, 33.0750813 ], [ 73.6584398, 33.0789111 ], [ 73.648819, 33.083328 ], [ 73.6461016, 33.0877567 ], [ 73.6401579, 33.0936713 ], [ 73.6356732, 33.0996933 ], [ 73.6334845, 33.1057508 ], [ 73.6334631, 33.1120776 ], [ 73.6349866, 33.1184398 ], [ 73.6379906, 33.1249633 ], [ 73.63698, 33.1275266 ], [ 73.6330103, 33.1317494 ], [ 73.6307143, 33.134858 ], [ 73.630371, 33.1383618 ], [ 73.6332034, 33.1412186 ], [ 73.6358642, 33.1465367 ], [ 73.6375379, 33.1538485 ], [ 73.6412286, 33.1553755 ], [ 73.6486744, 33.1548186 ], [ 73.6560987, 33.1593814 ], [ 73.6608409, 33.1670873 ], [ 73.6627764, 33.1846502 ], [ 73.6656328, 33.193546 ], [ 73.6679932, 33.2010155 ], [ 73.6677357, 33.2055759 ], [ 73.6640879, 33.207874 ], [ 73.6569425, 33.2108901 ], [ 73.6514708, 33.2145883 ], [ 73.6457201, 33.2145165 ], [ 73.6409136, 33.2112671 ], [ 73.6386176, 33.2089871 ], [ 73.6366118, 33.210103 ], [ 73.6339725, 33.2160811 ], [ 73.6303462, 33.2220947 ], [ 73.6309899, 33.2236205 ], [ 73.6336077, 33.2244103 ], [ 73.6372555, 33.2237821 ], [ 73.6390795, 33.2242129 ], [ 73.6388529, 33.2268014 ], [ 73.636856, 33.2303189 ], [ 73.6360325, 33.2317695 ], [ 73.6325134, 33.2327746 ], [ 73.6239088, 33.2345361 ], [ 73.6145224, 33.2612334 ], [ 73.5917515, 33.3223527 ], [ 73.5658736, 33.369983 ], [ 73.5740018, 33.3922942 ], [ 73.588978, 33.4078233 ], [ 73.5887991, 33.4127237 ], [ 73.5905554, 33.4146377 ], [ 73.5969782, 33.4147563 ], [ 73.6014671, 33.4191441 ], [ 73.6020525, 33.4237181 ], [ 73.5992717, 33.4249668 ], [ 73.5944582, 33.4213565 ], [ 73.5885877, 33.4223473 ], [ 73.5865387, 33.4247089 ], [ 73.5880998, 33.4261747 ], [ 73.5922791, 33.4264869 ], [ 73.5950436, 33.4297441 ], [ 73.5956616, 33.4329605 ], [ 73.5945233, 33.4362039 ], [ 73.5947672, 33.4386466 ], [ 73.5994181, 33.440275 ], [ 73.6053374, 33.4377102 ], [ 73.610901, 33.4400528 ], [ 73.6178265, 33.4490135 ], [ 73.6217579, 33.4495905 ], [ 73.6279089, 33.4485386 ], [ 73.6307015, 33.4490247 ], [ 73.6322833, 33.4567744 ], [ 73.6332265, 33.4601662 ], [ 73.6310149, 33.4623775 ], [ 73.6242987, 33.4633136 ], [ 73.6193063, 33.4639648 ], [ 73.6186559, 33.4649008 ], [ 73.619843, 33.4686857 ], [ 73.6211845, 33.4740417 ], [ 73.6202495, 33.476499 ], [ 73.6175338, 33.4779911 ], [ 73.6155499, 33.4759293 ], [ 73.6147693, 33.4726874 ], [ 73.6125577, 33.4708968 ], [ 73.6101184, 33.4717921 ], [ 73.6094679, 33.4731079 ], [ 73.6102647, 33.4772857 ], [ 73.611128, 33.4812944 ], [ 73.6099558, 33.4832266 ], [ 73.6058615, 33.4840916 ], [ 73.6042641, 33.4863461 ], [ 73.6048493, 33.4910118 ], [ 73.6031842, 33.4937154 ], [ 73.6024265, 33.4973447 ], [ 73.6035161, 33.4996907 ], [ 73.6055651, 33.5023893 ], [ 73.6073864, 33.502552 ], [ 73.6095655, 33.501535 ], [ 73.6128992, 33.4983076 ], [ 73.6161353, 33.49706 ], [ 73.6182389, 33.4977809 ], [ 73.6171598, 33.5004366 ], [ 73.6124926, 33.5067691 ], [ 73.6103298, 33.5117724 ], [ 73.611999, 33.5138766 ], [ 73.6135984, 33.5155687 ], [ 73.6163289, 33.5153815 ], [ 73.6188609, 33.5147106 ], [ 73.6201269, 33.5156052 ], [ 73.6214303, 33.5185705 ], [ 73.6264354, 33.5210614 ], [ 73.6282808, 33.5251042 ], [ 73.6354477, 33.5257303 ], [ 73.6389882, 33.5245139 ], [ 73.6397607, 33.5251937 ], [ 73.6387736, 33.5337437 ], [ 73.6373359, 33.5348706 ], [ 73.628195, 33.5347275 ], [ 73.6271865, 33.5355145 ], [ 73.6244399, 33.5377681 ], [ 73.6229808, 33.5411483 ], [ 73.6225731, 33.5438847 ], [ 73.6237532, 33.5478727 ], [ 73.6270792, 33.5493213 ], [ 73.6271865, 33.5503227 ], [ 73.6253196, 33.553166 ], [ 73.6254698, 33.5583517 ], [ 73.6255557, 33.5630365 ], [ 73.6283068, 33.5675311 ], [ 73.6290104, 33.5683825 ], [ 73.629182, 33.5695089 ], [ 73.6249467, 33.5733142 ], [ 73.6223585, 33.5777685 ], [ 73.6188394, 33.5808791 ], [ 73.6136252, 33.5844364 ], [ 73.6075312, 33.5856341 ], [ 73.6060338, 33.5874749 ], [ 73.6054284, 33.5888159 ], [ 73.6054928, 33.5910502 ], [ 73.6071879, 33.5947323 ], [ 73.6102134, 33.5970737 ], [ 73.6111576, 33.6004338 ], [ 73.6094195, 33.6040975 ], [ 73.6075186, 33.604762 ], [ 73.6059004, 33.605009 ], [ 73.6042697, 33.6027035 ], [ 73.6018879, 33.5997725 ], [ 73.5983044, 33.5995223 ], [ 73.5963518, 33.6007733 ], [ 73.5937554, 33.6068855 ], [ 73.5902149, 33.6120322 ], [ 73.5860736, 33.6156062 ], [ 73.5839324, 33.6174785 ], [ 73.581031, 33.6170357 ], [ 73.5781388, 33.6154557 ], [ 73.5768253, 33.6154453 ], [ 73.5736925, 33.617125 ], [ 73.5701734, 33.6175539 ], [ 73.5683281, 33.6177683 ], [ 73.5677018, 33.6192939 ], [ 73.5791516, 33.6386255 ], [ 73.5670237, 33.6668826 ], [ 73.5733323, 33.6751972 ], [ 73.5812716, 33.6834539 ], [ 73.6010127, 33.7014501 ], [ 73.6059394, 33.7195924 ], [ 73.6067547, 33.7259531 ], [ 73.5984377, 33.7416137 ], [ 73.5989441, 33.7503278 ], [ 73.5757699, 33.76298 ], [ 73.5596079, 33.7813447 ], [ 73.5781045, 33.8423468 ], [ 73.5891509, 33.8609725 ], [ 73.5878462, 33.8728814 ], [ 73.5937771, 33.8768008 ], [ 73.5924658, 33.8845347 ], [ 73.5939142, 33.8872066 ], [ 73.5938498, 33.8882665 ], [ 73.5933455, 33.8900922 ], [ 73.5915431, 33.892488 ], [ 73.5851597, 33.9045876 ], [ 73.5757189, 33.911048 ], [ 73.5694474, 33.9152892 ], [ 73.5660215, 33.9187548 ], [ 73.5634166, 33.9216799 ], [ 73.5616046, 33.9260968 ], [ 73.5588582, 33.9291392 ], [ 73.5506614, 33.9355054 ], [ 73.5461669, 33.9407682 ], [ 73.5383391, 33.9578418 ], [ 73.5357728, 33.9675233 ], [ 73.5323848, 33.9711283 ], [ 73.531861, 33.9735116 ], [ 73.533305, 33.9772801 ], [ 73.5308388, 33.9815537 ], [ 73.5272709, 33.9894996 ], [ 73.5136885, 34.0013148 ], [ 73.509294, 34.0367643 ], [ 73.4986167, 34.0716161 ], [ 73.49791, 34.100277 ], [ 73.4900765, 34.1264708 ], [ 73.4906516, 34.1513278 ], [ 73.490025, 34.1847975 ], [ 73.4950976, 34.1935019 ], [ 73.4928059, 34.2029862 ], [ 73.4962906, 34.2075789 ], [ 73.4875575, 34.222363 ], [ 73.4752879, 34.2442902 ], [ 73.4718718, 34.2583374 ], [ 73.4844288, 34.2732192 ], [ 73.4850411, 34.2733193 ], [ 73.4854917, 34.2746314 ], [ 73.4845583, 34.2766439 ], [ 73.481919, 34.2790731 ], [ 73.4807496, 34.2823886 ], [ 73.48105, 34.2838336 ], [ 73.4816937, 34.2859168 ], [ 73.4808676, 34.2878935 ], [ 73.4791724, 34.2891345 ], [ 73.4777133, 34.2902248 ], [ 73.4767985, 34.2899706 ], [ 73.4746234, 34.2898437 ], [ 73.4731321, 34.2893916 ], [ 73.4726386, 34.2886736 ], [ 73.4729068, 34.2863511 ], [ 73.4721558, 34.2833017 ], [ 73.4713618, 34.2812982 ], [ 73.4699671, 34.2798266 ], [ 73.468744, 34.2792415 ], [ 73.4667055, 34.2790199 ], [ 73.4651713, 34.2795872 ], [ 73.4635298, 34.2787628 ], [ 73.46265, 34.2776635 ], [ 73.462253, 34.2745339 ], [ 73.4622316, 34.2739754 ], [ 73.4605257, 34.2735675 ], [ 73.4572749, 34.273869 ], [ 73.4566204, 34.2748353 ], [ 73.4549467, 34.2765109 ], [ 73.4537022, 34.2771759 ], [ 73.4535627, 34.2781333 ], [ 73.4540026, 34.2789046 ], [ 73.4543566, 34.2793479 ], [ 73.455408, 34.2793301 ], [ 73.4576611, 34.2784968 ], [ 73.4587125, 34.2781511 ], [ 73.4594635, 34.2787007 ], [ 73.4597103, 34.2795163 ], [ 73.4589593, 34.2808904 ], [ 73.4585087, 34.2828584 ], [ 73.4590022, 34.2859345 ], [ 73.4597318, 34.2882924 ], [ 73.4593777, 34.2899146 ], [ 73.458852, 34.2905971 ], [ 73.4569208, 34.2903489 ], [ 73.4556441, 34.2913949 ], [ 73.4541957, 34.2916874 ], [ 73.4536163, 34.2924142 ], [ 73.4521572, 34.2929549 ], [ 73.4528439, 34.2941604 ], [ 73.4530584, 34.2949581 ], [ 73.4524683, 34.2961459 ], [ 73.4510521, 34.2967929 ], [ 73.4489171, 34.2970942 ], [ 73.4466474, 34.2986148 ], [ 73.4456984, 34.2994607 ], [ 73.4447972, 34.300737 ], [ 73.4444593, 34.3010073 ], [ 73.4431244, 34.3011986 ], [ 73.4425827, 34.3018313 ], [ 73.4428442, 34.3029501 ], [ 73.4437876, 34.3042 ], [ 73.4444414, 34.3046783 ], [ 73.4462907, 34.3052955 ], [ 73.447178, 34.3057044 ], [ 73.4476637, 34.3064374 ], [ 73.4475886, 34.3069644 ], [ 73.4468414, 34.3086231 ], [ 73.4453564, 34.3109838 ], [ 73.4446278, 34.3123339 ], [ 73.4444691, 34.3142857 ], [ 73.4441048, 34.3158826 ], [ 73.4436658, 34.3181737 ], [ 73.4431988, 34.3201176 ], [ 73.4435444, 34.3209816 ], [ 73.4432082, 34.321267 ], [ 73.4424143, 34.3214907 ], [ 73.4391826, 34.3223315 ], [ 73.4384728, 34.3229794 ], [ 73.4379404, 34.3232108 ], [ 73.4356428, 34.3232725 ], [ 73.4350637, 34.3236582 ], [ 73.4344846, 34.3250852 ], [ 73.4339802, 34.3254015 ], [ 73.4334946, 34.325548 ], [ 73.4318881, 34.3256174 ], [ 73.4302536, 34.3272295 ], [ 73.4299173, 34.327808 ], [ 73.4300948, 34.3288956 ], [ 73.4301789, 34.3295897 ], [ 73.4298987, 34.3298674 ], [ 73.4264709, 34.3302531 ], [ 73.4262094, 34.3305076 ], [ 73.4268351, 34.3313252 ], [ 73.4274796, 34.3322584 ], [ 73.4276477, 34.3330374 ], [ 73.427162, 34.335035 ], [ 73.4267884, 34.335328 ], [ 73.4226135, 34.3368165 ], [ 73.4227442, 34.337125 ], [ 73.4248831, 34.338305 ], [ 73.4260599, 34.3404027 ], [ 73.4263028, 34.340796 ], [ 73.4284323, 34.3416521 ], [ 73.4295344, 34.3431019 ], [ 73.4295037, 34.3435327 ], [ 73.4291158, 34.3440604 ], [ 73.428434, 34.34423 ], [ 73.4271544, 34.3441992 ], [ 73.4251743, 34.3444614 ], [ 73.4220472, 34.3444245 ], [ 73.4193106, 34.3442548 ], [ 73.4186007, 34.3441391 ], [ 73.4181711, 34.3444476 ], [ 73.4181244, 34.3453807 ], [ 73.4174799, 34.347378 ], [ 73.4153598, 34.3489357 ], [ 73.4119787, 34.3503468 ], [ 73.4110634, 34.350262 ], [ 73.4104189, 34.3497531 ], [ 73.410064, 34.3483342 ], [ 73.4095596, 34.3472623 ], [ 73.4081026, 34.3464063 ], [ 73.4071406, 34.3465529 ], [ 73.4063093, 34.3471081 ], [ 73.4055434, 34.3484807 ], [ 73.4046848, 34.3514545 ], [ 73.4035505, 34.3530315 ], [ 73.4034511, 34.3542143 ], [ 73.4043962, 34.3559063 ], [ 73.4037595, 34.3579515 ], [ 73.4039386, 34.3602512 ], [ 73.4034013, 34.3614996 ], [ 73.4013319, 34.3633393 ], [ 73.3995908, 34.3650229 ], [ 73.3970139, 34.3667639 ], [ 73.3956807, 34.3687185 ], [ 73.3943276, 34.3724632 ], [ 73.3935513, 34.3735425 ], [ 73.3904375, 34.3750992 ], [ 73.3910941, 34.3760928 ], [ 73.3925268, 34.3767908 ], [ 73.3945863, 34.377965 ], [ 73.3967751, 34.3806255 ], [ 73.398331, 34.38234 ], [ 73.398605, 34.387771 ], [ 73.39943, 34.393608 ], [ 73.399719, 34.39888 ], [ 73.400818, 34.40471 ], [ 73.402206, 34.409156 ], [ 73.403057, 34.411997 ], [ 73.40387, 34.41471 ], [ 73.405258, 34.419159 ], [ 73.406937, 34.424438 ], [ 73.409713, 34.42916 ], [ 73.411651, 34.433053 ], [ 73.413314, 34.437493 ], [ 73.416093, 34.441932 ], [ 73.418236, 34.446216 ], [ 73.418319, 34.446381 ], [ 73.420532, 34.450828 ], [ 73.422486, 34.45527 ], [ 73.424699, 34.459717 ], [ 73.426087, 34.463051 ], [ 73.427764, 34.468598 ], [ 73.430816, 34.474159 ], [ 73.432206, 34.479158 ], [ 73.433045, 34.484436 ], [ 73.434143, 34.48999 ], [ 73.434982, 34.495827 ], [ 73.435258, 34.501106 ], [ 73.436097, 34.50666 ], [ 73.436919, 34.511941 ], [ 73.438034, 34.517768 ], [ 73.438034, 34.523049 ], [ 73.43831, 34.528045 ], [ 73.439148, 34.533882 ], [ 73.440263, 34.539163 ], [ 73.440536, 34.544717 ], [ 73.441361, 34.549995 ], [ 73.442749, 34.554994 ], [ 73.445525, 34.558884 ], [ 73.44832, 34.56305 ], [ 73.451661, 34.565826 ], [ 73.455551, 34.568329 ], [ 73.460267, 34.570549 ], [ 73.464707, 34.571937 ], [ 73.470534, 34.572219 ], [ 73.47638, 34.572769 ], [ 73.482757, 34.572769 ], [ 73.488877, 34.572495 ], [ 73.495254, 34.572495 ], [ 73.501663, 34.572219 ], [ 73.507493, 34.572219 ], [ 73.514435, 34.572495 ], [ 73.51944, 34.572495 ], [ 73.526093, 34.57361 ], [ 73.530548, 34.574715 ], [ 73.535537, 34.576103 ], [ 73.540818, 34.577773 ], [ 73.545258, 34.578881 ], [ 73.549424, 34.581384 ], [ 73.554427, 34.58194 ], [ 73.559708, 34.584435 ], [ 73.563309, 34.584992 ], [ 73.569991, 34.586106 ], [ 73.575272, 34.587211 ], [ 73.581665, 34.587768 ], [ 73.587203, 34.586938 ], [ 73.592484, 34.584716 ], [ 73.596374, 34.582496 ], [ 73.600814, 34.57972 ], [ 73.603866, 34.576942 ], [ 73.607483, 34.57361 ], [ 73.610535, 34.570831 ], [ 73.614425, 34.568055 ], [ 73.619706, 34.565826 ], [ 73.624984, 34.56388 ], [ 73.631364, 34.56388 ], [ 73.637207, 34.564994 ], [ 73.641098, 34.566941 ], [ 73.644715, 34.570549 ], [ 73.647217, 34.57361 ], [ 73.649418, 34.576686 ], [ 73.649993, 34.577491 ], [ 73.652206, 34.58194 ], [ 73.654433, 34.586938 ], [ 73.656097, 34.591378 ], [ 73.658034, 34.595824 ], [ 73.659714, 34.600829 ], [ 73.661102, 34.605271 ], [ 73.662766, 34.611106 ], [ 73.664992, 34.615548 ], [ 73.666656, 34.621102 ], [ 73.668044, 34.625549 ], [ 73.670257, 34.629988 ], [ 73.672486, 34.634993 ], [ 73.673309, 34.640274 ], [ 73.674423, 34.645828 ], [ 73.674697, 34.6511 ], [ 73.674697, 34.656379 ], [ 73.674148, 34.661103 ], [ 73.67221, 34.665267 ], [ 73.671372, 34.668884 ], [ 73.66832, 34.672768 ], [ 73.666091, 34.676658 ], [ 73.663039, 34.679717 ], [ 73.661102, 34.684159 ], [ 73.661927, 34.689431 ], [ 73.663604, 34.694436 ], [ 73.666932, 34.697487 ], [ 73.670257, 34.700546 ], [ 73.67276, 34.703324 ], [ 73.677475, 34.7061 ], [ 73.682204, 34.708047 ], [ 73.685532, 34.710549 ], [ 73.689972, 34.713052 ], [ 73.693313, 34.715545 ], [ 73.698028, 34.717765 ], [ 73.699998, 34.721099 ], [ 73.703599, 34.724709 ], [ 73.706375, 34.7286 ], [ 73.709153, 34.732208 ], [ 73.711106, 34.736107 ], [ 73.711929, 34.741379 ], [ 73.714997, 34.746384 ], [ 73.715819, 34.751938 ], [ 73.717483, 34.757499 ], [ 73.719147, 34.762215 ], [ 73.720535, 34.767213 ], [ 73.723313, 34.770272 ], [ 73.726379, 34.775267 ], [ 73.729706, 34.778328 ], [ 73.732209, 34.781104 ], [ 73.736375, 34.784721 ], [ 73.7397, 34.787217 ], [ 73.743591, 34.789161 ], [ 73.747483, 34.792222 ], [ 73.752213, 34.794442 ], [ 73.756103, 34.796386 ], [ 73.760269, 34.799438 ], [ 73.765548, 34.800545 ], [ 73.770539, 34.801658 ], [ 73.776383, 34.802216 ], [ 73.781937, 34.802216 ], [ 73.788314, 34.801933 ], [ 73.794144, 34.802489 ], [ 73.799423, 34.803604 ], [ 73.803862, 34.8061 ], [ 73.807755, 34.80777 ], [ 73.812484, 34.810273 ], [ 73.815263, 34.813324 ], [ 73.819153, 34.816383 ], [ 73.821929, 34.819717 ], [ 73.826095, 34.822769 ], [ 73.829437, 34.825272 ], [ 73.833879, 34.826942 ], [ 73.839706, 34.828048 ], [ 73.845536, 34.828606 ], [ 73.852479, 34.827218 ], [ 73.859421, 34.826386 ], [ 73.866379, 34.825554 ], [ 73.872483, 34.824996 ], [ 73.879701, 34.824716 ], [ 73.886107, 34.82444 ], [ 73.891662, 34.82444 ], [ 73.89833, 34.824716 ], [ 73.90277, 34.826104 ], [ 73.907761, 34.82666 ], [ 73.912491, 34.82888 ], [ 73.916381, 34.831382 ], [ 73.920531, 34.834434 ], [ 73.923875, 34.836936 ], [ 73.9272, 34.839988 ], [ 73.929703, 34.843322 ], [ 73.933869, 34.845825 ], [ 73.937194, 34.849433 ], [ 73.941926, 34.851386 ], [ 73.947204, 34.85305 ], [ 73.95166, 34.853608 ], [ 73.956649, 34.85527 ], [ 73.96193, 34.85694 ], [ 73.966659, 34.858331 ], [ 73.970536, 34.860275 ], [ 73.975541, 34.861938 ], [ 73.979707, 34.864997 ], [ 73.983048, 34.867493 ], [ 73.986373, 34.870544 ], [ 73.989425, 34.874993 ], [ 73.991365, 34.878601 ], [ 73.994141, 34.882492 ], [ 73.996367, 34.886941 ], [ 73.998596, 34.89138 ], [ 74.000823, 34.896385 ], [ 74.002213, 34.900269 ], [ 74.004132, 34.904574 ], [ 74.00444, 34.905265 ], [ 74.007218, 34.908882 ], [ 74.01027, 34.913322 ], [ 74.012773, 34.916382 ], [ 74.015029, 34.918292 ], [ 74.016387, 34.919441 ], [ 74.020264, 34.922493 ], [ 74.02304, 34.925827 ], [ 74.026933, 34.92833 ], [ 74.030548, 34.931937 ], [ 74.033875, 34.934433 ], [ 74.036378, 34.937492 ], [ 74.039154, 34.941375 ], [ 74.042755, 34.944992 ], [ 74.045533, 34.948876 ], [ 74.049148, 34.952491 ], [ 74.05165, 34.955552 ], [ 74.053314, 34.960823 ], [ 74.054428, 34.966384 ], [ 74.055251, 34.971656 ], [ 74.054702, 34.976378 ], [ 74.054153, 34.981659 ], [ 74.054153, 34.986381 ], [ 74.054428, 34.99166 ], [ 74.055816, 34.996102 ], [ 74.059983, 34.999161 ], [ 74.063308, 35.002219 ], [ 74.068055, 35.003883 ], [ 74.071381, 35.006944 ], [ 74.07582, 35.008888 ], [ 74.078599, 35.01194 ], [ 74.082765, 35.014998 ], [ 74.085265, 35.018326 ], [ 74.087205, 35.024995 ], [ 74.086655, 35.029159 ], [ 74.084426, 35.033607 ], [ 74.082213, 35.037215 ], [ 74.079437, 35.04055 ], [ 74.077211, 35.04416 ], [ 74.073318, 35.046943 ], [ 74.072508, 35.047826 ], [ 74.070266, 35.05027 ], [ 74.068082, 35.053332 ], [ 74.06749, 35.054161 ], [ 74.065261, 35.057212 ], [ 74.062196, 35.060547 ], [ 74.061371, 35.064713 ], [ 74.060256, 35.069442 ], [ 74.060256, 35.074714 ], [ 74.126488, 35.124629 ], [ 74.124421, 35.127487 ], [ 74.119981, 35.130272 ], [ 74.117893, 35.131463 ], [ 74.116088, 35.132492 ], [ 74.112198, 35.135268 ], [ 74.107758, 35.137497 ], [ 74.103318, 35.140273 ], [ 74.099425, 35.142493 ], [ 74.097039, 35.143991 ], [ 74.094986, 35.145271 ], [ 74.09027, 35.147218 ], [ 74.085541, 35.149438 ], [ 74.080276, 35.151099 ], [ 74.074432, 35.150826 ], [ 74.069154, 35.148879 ], [ 74.064422, 35.147218 ], [ 74.060532, 35.145271 ], [ 74.055251, 35.143608 ], [ 74.049989, 35.141937 ], [ 74.044984, 35.141381 ], [ 74.040111, 35.141969 ], [ 74.038039, 35.14222 ], [ 74.031662, 35.143325 ], [ 74.027772, 35.145545 ], [ 74.024993, 35.149438 ], [ 74.022767, 35.152772 ], [ 74.019715, 35.155824 ], [ 74.018327, 35.16027 ], [ 74.01471, 35.163605 ], [ 74.011382, 35.1661 ], [ 74.008331, 35.169442 ], [ 74.003875, 35.171662 ], [ 73.999146, 35.174164 ], [ 73.994706, 35.176384 ], [ 73.987764, 35.177216 ], [ 73.980819, 35.178048 ], [ 73.973603, 35.17888 ], [ 73.967484, 35.179436 ], [ 73.960542, 35.181382 ], [ 73.955261, 35.183326 ], [ 73.951386, 35.185546 ], [ 73.94748, 35.188324 ], [ 73.943863, 35.1911 ], [ 73.940811, 35.194152 ], [ 73.936921, 35.197486 ], [ 73.933869, 35.200272 ], [ 73.930268, 35.20305 ], [ 73.924987, 35.20527 ], [ 73.923389, 35.205911 ], [ 73.920823, 35.20694 ], [ 73.915542, 35.209434 ], [ 73.909423, 35.210548 ], [ 73.903046, 35.21138 ], [ 73.896653, 35.211104 ], [ 73.891099, 35.211663 ], [ 73.88443, 35.211104 ], [ 73.878586, 35.210275 ], [ 73.873597, 35.209716 ], [ 73.867751, 35.208602 ], [ 73.862489, 35.207496 ], [ 73.856643, 35.207496 ], [ 73.849716, 35.207772 ], [ 73.844985, 35.209434 ], [ 73.839706, 35.211104 ], [ 73.834991, 35.214156 ], [ 73.831939, 35.216102 ], [ 73.828049, 35.219437 ], [ 73.824432, 35.222213 ], [ 73.82138, 35.224991 ], [ 73.817489, 35.227767 ], [ 73.813872, 35.231101 ], [ 73.809143, 35.23333 ], [ 73.804703, 35.236106 ], [ 73.799988, 35.23777 ], [ 73.793868, 35.239158 ], [ 73.786653, 35.23999 ], [ 73.781098, 35.240546 ], [ 73.779702, 35.240252 ], [ 73.775818, 35.239434 ], [ 73.76999, 35.238326 ], [ 73.764709, 35.236656 ], [ 73.760819, 35.234162 ], [ 73.756942, 35.232765 ], [ 73.752778, 35.229431 ], [ 73.748871, 35.227487 ], [ 73.744981, 35.225547 ], [ 73.741088, 35.223045 ], [ 73.73581, 35.221374 ], [ 73.730545, 35.21971 ], [ 73.726654, 35.221374 ], [ 73.723603, 35.224991 ], [ 73.721374, 35.229431 ], [ 73.720824, 35.233604 ], [ 73.719986, 35.238326 ], [ 73.718598, 35.241936 ], [ 73.71666, 35.246941 ], [ 73.715819, 35.251105 ], [ 73.714431, 35.255272 ], [ 73.713317, 35.259994 ], [ 73.712494, 35.263611 ], [ 73.710265, 35.2686 ], [ 73.709426, 35.272217 ], [ 73.707213, 35.275825 ], [ 73.70526, 35.280823 ], [ 73.704437, 35.283882 ], [ 73.702484, 35.288604 ], [ 73.701096, 35.293053 ], [ 73.699706, 35.297219 ], [ 73.698867, 35.301932 ], [ 73.698318, 35.306655 ], [ 73.697755, 35.311936 ], [ 73.698028, 35.317214 ], [ 73.698318, 35.322219 ], [ 73.698867, 35.326941 ], [ 73.699143, 35.332771 ], [ 73.698594, 35.337494 ], [ 73.698867, 35.342765 ], [ 73.698318, 35.348046 ], [ 73.698318, 35.352493 ], [ 73.697755, 35.357215 ], [ 73.697206, 35.362769 ], [ 73.697479, 35.367767 ], [ 73.698318, 35.373046 ], [ 73.699416, 35.3786 ], [ 73.699416, 35.383881 ], [ 73.700547, 35.389718 ], [ 73.701935, 35.394714 ], [ 73.703599, 35.399719 ], [ 73.70526, 35.404708 ], [ 73.707489, 35.409157 ], [ 73.709426, 35.413605 ], [ 73.713043, 35.416664 ], [ 73.714997, 35.420548 ], [ 73.719147, 35.424165 ], [ 73.721923, 35.42749 ], [ 73.725816, 35.429161 ], [ 73.730545, 35.431663 ], [ 73.734985, 35.432771 ], [ 73.740265, 35.434715 ], [ 73.744981, 35.436935 ], [ 73.748871, 35.438325 ], [ 73.753601, 35.441101 ], [ 73.756942, 35.443879 ], [ 73.760819, 35.446099 ], [ 73.764436, 35.449433 ], [ 73.767212, 35.453048 ], [ 73.76999, 35.456939 ], [ 73.772766, 35.461105 ], [ 73.774995, 35.464995 ], [ 73.776932, 35.468879 ], [ 73.780549, 35.472489 ], [ 73.782486, 35.47638 ], [ 73.785538, 35.480546 ], [ 73.788879, 35.483605 ], [ 73.790817, 35.487495 ], [ 73.794434, 35.491935 ], [ 73.79721, 35.494996 ], [ 73.799988, 35.498879 ], [ 73.80304, 35.503052 ], [ 73.806777, 35.504112 ], [ 73.789704, 35.516105 ], [ 73.780273, 35.522491 ], [ 73.773315, 35.522491 ], [ 73.767761, 35.519989 ], [ 73.761108, 35.520547 ], [ 73.754166, 35.520547 ], [ 73.747483, 35.521103 ], [ 73.741653, 35.522218 ], [ 73.736099, 35.524711 ], [ 73.731094, 35.526657 ], [ 73.726379, 35.529716 ], [ 73.719712, 35.531104 ], [ 73.713882, 35.532212 ], [ 73.70694, 35.53138 ], [ 73.700271, 35.531936 ], [ 73.698517, 35.532077 ], [ 73.693313, 35.532494 ], [ 73.686646, 35.532494 ], [ 73.679702, 35.53305 ], [ 73.673035, 35.532768 ], [ 73.667205, 35.533882 ], [ 73.660263, 35.534438 ], [ 73.654433, 35.535829 ], [ 73.648879, 35.538331 ], [ 73.64415, 35.541383 ], [ 73.638322, 35.542771 ], [ 73.632476, 35.543883 ], [ 73.625809, 35.544998 ], [ 73.619859, 35.545517 ], [ 73.608032, 35.546944 ], [ 73.601929, 35.548608 ], [ 73.596374, 35.550545 ], [ 73.591096, 35.55166 ], [ 73.584717, 35.553048 ], [ 73.577774, 35.553879 ], [ 73.570832, 35.555267 ], [ 73.564986, 35.554711 ], [ 73.559142, 35.554162 ], [ 73.553315, 35.553604 ], [ 73.547485, 35.553048 ], [ 73.541092, 35.552772 ], [ 73.534715, 35.553321 ], [ 73.528595, 35.554711 ], [ 73.523314, 35.556938 ], [ 73.518601, 35.558602 ], [ 73.513886, 35.56166 ], [ 73.508605, 35.563324 ], [ 73.503876, 35.564995 ], [ 73.497756, 35.566941 ], [ 73.493043, 35.568603 ], [ 73.486098, 35.569444 ], [ 73.478867, 35.570273 ], [ 73.473313, 35.569717 ], [ 73.466933, 35.570273 ], [ 73.46054, 35.570549 ], [ 73.453598, 35.571381 ], [ 73.446929, 35.571381 ], [ 73.439971, 35.571664 ], [ 73.433594, 35.57222 ], [ 73.427201, 35.572495 ], [ 73.420257, 35.573325 ], [ 73.414429, 35.573325 ], [ 73.407487, 35.574715 ], [ 73.400818, 35.576659 ], [ 73.395264, 35.577774 ], [ 73.390548, 35.579994 ], [ 73.385819, 35.582214 ], [ 73.381087, 35.58416 ], [ 73.376648, 35.586936 ], [ 73.372757, 35.589714 ], [ 73.368867, 35.591102 ], [ 73.363602, 35.594154 ], [ 73.358321, 35.595825 ], [ 73.353592, 35.597488 ], [ 73.347488, 35.599435 ], [ 73.341095, 35.600274 ], [ 73.334153, 35.601388 ], [ 73.327774, 35.601662 ], [ 73.321654, 35.603608 ], [ 73.314698, 35.604164 ], [ 73.309144, 35.605552 ], [ 73.301926, 35.606384 ], [ 73.301102, 35.606534 ], [ 73.295823, 35.607498 ], [ 73.291932, 35.610274 ], [ 73.285813, 35.611665 ], [ 73.281097, 35.613885 ], [ 73.277207, 35.616661 ], [ 73.272767, 35.61888 ], [ 73.268051, 35.621659 ], [ 73.264161, 35.623879 ], [ 73.260268, 35.626098 ], [ 73.255555, 35.628327 ], [ 73.251099, 35.631659 ], [ 73.246643, 35.633882 ], [ 73.242753, 35.636108 ], [ 73.238876, 35.638887 ], [ 73.234986, 35.641107 ], [ 73.23027, 35.643883 ], [ 73.226653, 35.646661 ], [ 73.222763, 35.649993 ], [ 73.220536, 35.653045 ], [ 73.217208, 35.655823 ], [ 73.213607, 35.659157 ], [ 73.209717, 35.661933 ], [ 73.2061, 35.665268 ], [ 73.202209, 35.667497 ], [ 73.198868, 35.66999 ], [ 73.193587, 35.673051 ], [ 73.189697, 35.674995 ], [ 73.185257, 35.677491 ], [ 73.180542, 35.679717 ], [ 73.175263, 35.681937 ], [ 73.170532, 35.683601 ], [ 73.166657, 35.685821 ], [ 73.161376, 35.688882 ], [ 73.157212, 35.69027 ], [ 73.153595, 35.693604 ], [ 73.149719, 35.695824 ], [ 73.146377, 35.6986 ], [ 73.14276, 35.701934 ], [ 73.139709, 35.705551 ], [ 73.136108, 35.708886 ], [ 73.13443, 35.711379 ], [ 73.131362, 35.715828 ], [ 73.129149, 35.719153 ], [ 73.126084, 35.722763 ], [ 73.124696, 35.72638 ], [ 73.121644, 35.730271 ], [ 73.120254, 35.734437 ], [ 73.117202, 35.738328 ], [ 73.116379, 35.741935 ], [ 73.114426, 35.746102 ], [ 73.113038, 35.751107 ], [ 73.113038, 35.754997 ], [ 73.111648, 35.759995 ], [ 73.111924, 35.76555 ], [ 73.111924, 35.770828 ], [ 73.112762, 35.7761 ], [ 73.113877, 35.781663 ], [ 73.1147, 35.787498 ], [ 73.114989, 35.79222 ], [ 73.116379, 35.797774 ], [ 73.117478, 35.803322 ], [ 73.119705, 35.807771 ], [ 73.12053, 35.813605 ], [ 73.122207, 35.818603 ], [ 73.123032, 35.823052 ], [ 73.124696, 35.82888 ], [ 73.125259, 35.833878 ], [ 73.124144, 35.8386 ], [ 73.121093, 35.842491 ], [ 73.118041, 35.845269 ], [ 73.114989, 35.847772 ], [ 73.11026, 35.850548 ], [ 73.106369, 35.853326 ], [ 73.10193, 35.855828 ], [ 73.097214, 35.858048 ], [ 73.092483, 35.860275 ], [ 73.087204, 35.861939 ], [ 73.081666, 35.863609 ], [ 73.074708, 35.864441 ], [ 73.068878, 35.863327 ], [ 73.063599, 35.862771 ], [ 73.058868, 35.861107 ], [ 73.054977, 35.859161 ], [ 73.049712, 35.856658 ], [ 73.045822, 35.854997 ], [ 73.041931, 35.85305 ], [ 73.036377, 35.850548 ], [ 73.031937, 35.849433 ], [ 73.028045, 35.847489 ], [ 73.022217, 35.846381 ], [ 73.017488, 35.843879 ], [ 73.016482, 35.84359 ], [ 73.013611, 35.842767 ], [ 73.008332, 35.840827 ], [ 73.003052, 35.839715 ], [ 72.998031, 35.8386 ], [ 72.993317, 35.836654 ], [ 72.988312, 35.836105 ], [ 72.98166, 35.835266 ], [ 72.976379, 35.833878 ], [ 72.971374, 35.833878 ], [ 72.963609, 35.834161 ], [ 72.956375, 35.834993 ], [ 72.950821, 35.836105 ], [ 72.944701, 35.837493 ], [ 72.938584, 35.8386 ], [ 72.931366, 35.838883 ], [ 72.924987, 35.838883 ], [ 72.919143, 35.8386 ], [ 72.912766, 35.839715 ], [ 72.905824, 35.840545 ], [ 72.89804, 35.841376 ], [ 72.891663, 35.841376 ], [ 72.885268, 35.842767 ], [ 72.878312, 35.843605 ], [ 72.872758, 35.845269 ], [ 72.866654, 35.846381 ], [ 72.860535, 35.847772 ], [ 72.854156, 35.848328 ], [ 72.847763, 35.849716 ], [ 72.842484, 35.851386 ], [ 72.841737, 35.851623 ], [ 72.836381, 35.853326 ], [ 72.831376, 35.854438 ], [ 72.825272, 35.856102 ], [ 72.817489, 35.856941 ], [ 72.811096, 35.857216 ], [ 72.805818, 35.85527 ], [ 72.800537, 35.854714 ], [ 72.796097, 35.85305 ], [ 72.791366, 35.851104 ], [ 72.786652, 35.848877 ], [ 72.78221, 35.84694 ], [ 72.778869, 35.844993 ], [ 72.774429, 35.843047 ], [ 72.769714, 35.841376 ], [ 72.764435, 35.838883 ], [ 72.759995, 35.838325 ], [ 72.754715, 35.835822 ], [ 72.749999, 35.834717 ], [ 72.744981, 35.833602 ], [ 72.738877, 35.832497 ], [ 72.733047, 35.831941 ], [ 72.728042, 35.830551 ], [ 72.723313, 35.829438 ], [ 72.718324, 35.828331 ], [ 72.714597, 35.826959 ], [ 72.713043, 35.826387 ], [ 72.708327, 35.825272 ], [ 72.703049, 35.823608 ], [ 72.698593, 35.82222 ], [ 72.693313, 35.82055 ], [ 72.688583, 35.818603 ], [ 72.683594, 35.818054 ], [ 72.676926, 35.817498 ], [ 72.670822, 35.81833 ], [ 72.665268, 35.82055 ], [ 72.659989, 35.82222 ], [ 72.654435, 35.824164 ], [ 72.649993, 35.826387 ], [ 72.644439, 35.828048 ], [ 72.640275, 35.829719 ], [ 72.634155, 35.831941 ], [ 72.628861, 35.833878 ], [ 72.627487, 35.834366 ], [ 72.624145, 35.835549 ], [ 72.618867, 35.837769 ], [ 72.613037, 35.838325 ], [ 72.606095, 35.839715 ], [ 72.599152, 35.841103 ], [ 72.593049, 35.842217 ], [ 72.586654, 35.843605 ], [ 72.582473, 35.843936 ], [ 72.579711, 35.844155 ], [ 72.574998, 35.845825 ], [ 72.570267, 35.848601 ], [ 72.568054, 35.851936 ], [ 72.564988, 35.855553 ], [ 72.563598, 35.859992 ], [ 72.561095, 35.863053 ], [ 72.559707, 35.866661 ], [ 72.55664, 35.870545 ], [ 72.554429, 35.874162 ], [ 72.551377, 35.878043 ], [ 72.549148, 35.881104 ], [ 72.545258, 35.883331 ], [ 72.541935, 35.886648 ], [ 72.541367, 35.887214 ], [ 72.53749, 35.889434 ], [ 72.532212, 35.891663 ], [ 72.528321, 35.893883 ], [ 72.521377, 35.895271 ], [ 72.516664, 35.896942 ], [ 72.512771, 35.900269 ], [ 72.512771, 35.904709 ], [ 72.513885, 35.910546 ], [ 72.515823, 35.914993 ], [ 72.518052, 35.918885 ], [ 72.520538, 35.922493 ], [ 72.523606, 35.926942 ], [ 72.524994, 35.930823 ], [ 72.527772, 35.935822 ], [ 72.529983, 35.939429 ], [ 72.532212, 35.944434 ], [ 72.534988, 35.948327 ], [ 72.536378, 35.952774 ], [ 72.538589, 35.957214 ], [ 72.541367, 35.962212 ], [ 72.543594, 35.965829 ], [ 72.545531, 35.969712 ], [ 72.549148, 35.973603 ], [ 72.551085, 35.977211 ], [ 72.554429, 35.981101 ], [ 72.557205, 35.984718 ], [ 72.559418, 35.989158 ], [ 72.561645, 35.993051 ], [ 72.56456, 36.001946 ], [ 72.566941, 36.007507 ], [ 72.566941, 36.012223 ], [ 72.566376, 36.017501 ], [ 72.565537, 36.021667 ], [ 72.563858, 36.025834 ], [ 72.561082, 36.029724 ], [ 72.559402, 36.033341 ], [ 72.555801, 36.036666 ], [ 72.552749, 36.039727 ], [ 72.548859, 36.043059 ], [ 72.545807, 36.045838 ], [ 72.542466, 36.048614 ], [ 72.538026, 36.051392 ], [ 72.534974, 36.054444 ], [ 72.531922, 36.057778 ], [ 72.52942, 36.06083 ], [ 72.526642, 36.06472 ], [ 72.524978, 36.067779 ], [ 72.521912, 36.072228 ], [ 72.521363, 36.07695 ], [ 72.519973, 36.081116 ], [ 72.519134, 36.08583 ], [ 72.518585, 36.090554 ], [ 72.520249, 36.096109 ], [ 72.520814, 36.101111 ], [ 72.522475, 36.106948 ], [ 72.524688, 36.11139 ], [ 72.526917, 36.115837 ], [ 72.529693, 36.119445 ], [ 72.531647, 36.123328 ], [ 72.534409, 36.126938 ], [ 72.537185, 36.130822 ], [ 72.539963, 36.134719 ], [ 72.54219, 36.139718 ], [ 72.543854, 36.144713 ], [ 72.544692, 36.150268 ], [ 72.544692, 36.15499 ], [ 72.543854, 36.1586 ], [ 72.542739, 36.163872 ], [ 72.541916, 36.168045 ], [ 72.539687, 36.173043 ], [ 72.539138, 36.176934 ], [ 72.539138, 36.182205 ], [ 72.538575, 36.186928 ], [ 72.539414, 36.192208 ], [ 72.539414, 36.197197 ], [ 72.540253, 36.202476 ], [ 72.542739, 36.20803 ], [ 72.54358, 36.213035 ], [ 72.545517, 36.217468 ], [ 72.547195, 36.223022 ], [ 72.549987, 36.226913 ], [ 72.552765, 36.231355 ], [ 72.554978, 36.234413 ], [ 72.558319, 36.238304 ], [ 72.561095, 36.241905 ], [ 72.564696, 36.245795 ], [ 72.567215, 36.248298 ], [ 72.571381, 36.251359 ], [ 72.575272, 36.253852 ], [ 72.579162, 36.256355 ], [ 72.583328, 36.25885 ], [ 72.587205, 36.260788 ], [ 72.592484, 36.263017 ], [ 72.596374, 36.264405 ], [ 72.602204, 36.26551 ], [ 72.607483, 36.266624 ], [ 72.614151, 36.267174 ], [ 72.620528, 36.266351 ], [ 72.627473, 36.26551 ], [ 72.63388, 36.264405 ], [ 72.639434, 36.26329 ], [ 72.644149, 36.26107 ], [ 72.650269, 36.259124 ], [ 72.656646, 36.259124 ], [ 72.663315, 36.2594 ], [ 72.666932, 36.260781 ], [ 72.67247, 36.262725 ], [ 72.67691, 36.264398 ], [ 72.680253, 36.267449 ], [ 72.683578, 36.270782 ], [ 72.686357, 36.273277 ], [ 72.692667, 36.2745054 ], [ 72.7018025, 36.2743591 ], [ 72.7070145, 36.27311 ], [ 72.7111982, 36.2760422 ], [ 72.7140014, 36.2831151 ], [ 72.7156985, 36.2839153 ], [ 72.7196239, 36.2848742 ], [ 72.7208135, 36.2890931 ], [ 72.7267612, 36.2912025 ], [ 72.7304488, 36.2962839 ], [ 72.735088, 36.2990642 ], [ 72.7437716, 36.2996394 ], [ 72.7497194, 36.2994477 ], [ 72.7541207, 36.2975302 ], [ 72.7574514, 36.2973385 ], [ 72.7588788, 36.2994477 ], [ 72.7603063, 36.3037617 ], [ 72.7629233, 36.3056789 ], [ 72.7698226, 36.3078837 ], [ 72.7725586, 36.311718 ], [ 72.7730344, 36.3142101 ], [ 72.7775546, 36.3168939 ], [ 72.7821939, 36.3206319 ], [ 72.7858814, 36.3216861 ], [ 72.7908775, 36.3263823 ], [ 72.7964684, 36.3266698 ], [ 72.8018213, 36.3283948 ], [ 72.8027729, 36.3336655 ], [ 72.8053899, 36.3368277 ], [ 72.8053899, 36.3432476 ], [ 72.807888, 36.3457388 ], [ 72.8108618, 36.3480382 ], [ 72.8121703, 36.3508166 ], [ 72.8153821, 36.3538824 ], [ 72.8195455, 36.355032 ], [ 72.8229952, 36.3591513 ], [ 72.8308461, 36.3600135 ], [ 72.8346527, 36.3636536 ], [ 72.8413141, 36.3642283 ], [ 72.846667, 36.3642283 ], [ 72.8496409, 36.363462 ], [ 72.854637, 36.3643241 ], [ 72.8555886, 36.3678683 ], [ 72.8558265, 36.373232 ], [ 72.8607036, 36.3764884 ], [ 72.8614174, 36.3795532 ], [ 72.8642723, 36.3813728 ], [ 72.8659376, 36.383767 ], [ 72.8715285, 36.3847246 ], [ 72.8746213, 36.3871187 ], [ 72.8756919, 36.3906618 ], [ 72.8720043, 36.39679 ], [ 72.8691494, 36.402439 ], [ 72.8671272, 36.4113425 ], [ 72.8714095, 36.4139272 ], [ 72.8747402, 36.4183306 ], [ 72.8827102, 36.4259881 ], [ 72.8823533, 36.4317307 ], [ 72.8785468, 36.4385255 ], [ 72.8828291, 36.442162 ], [ 72.8902043, 36.4481904 ], [ 72.8930592, 36.4507739 ], [ 72.8984121, 36.4556536 ], [ 72.9047167, 36.4593849 ], [ 72.91685, 36.4542184 ], [ 72.9199428, 36.4538357 ], [ 72.9230357, 36.4531659 ], [ 72.9264853, 36.4530703 ], [ 72.9333847, 36.4559406 ], [ 72.9380239, 36.456419 ], [ 72.9412357, 36.4600546 ], [ 72.9474213, 36.4603416 ], [ 72.966335, 36.456706 ], [ 72.9687141, 36.4549838 ], [ 72.9728775, 36.4545054 ], [ 72.9806095, 36.4579498 ], [ 72.9823938, 36.4601503 ], [ 72.9832265, 36.4649337 ], [ 72.9862003, 36.4680906 ], [ 72.9860814, 36.4698125 ], [ 72.9837023, 36.4736388 ], [ 72.9846539, 36.476604 ], [ 72.9847729, 36.4792822 ], [ 72.9765651, 36.485499 ], [ 72.9739481, 36.4902809 ], [ 72.9747807, 36.4946799 ], [ 72.9789441, 36.4980269 ], [ 72.9862003, 36.4991744 ], [ 72.9866762, 36.5013737 ], [ 72.9822749, 36.5075887 ], [ 72.9798958, 36.5123692 ], [ 72.9835834, 36.5143769 ], [ 72.9942892, 36.5145682 ], [ 72.9991664, 36.5164802 ], [ 73.0029729, 36.518679 ], [ 73.0080879, 36.519157 ], [ 73.0172474, 36.5224073 ], [ 73.0211729, 36.5261354 ], [ 73.0253363, 36.5274736 ], [ 73.0321167, 36.5295766 ], [ 73.0344958, 36.5312015 ], [ 73.0410382, 36.5302456 ], [ 73.0454395, 36.529003 ], [ 73.0488892, 36.5296721 ], [ 73.0511493, 36.5322529 ], [ 73.0513873, 36.536554 ], [ 73.0497219, 36.5395168 ], [ 73.052101, 36.5425751 ], [ 73.0526958, 36.5454421 ], [ 73.0499598, 36.5504114 ], [ 73.051982, 36.5537559 ], [ 73.0522199, 36.5585336 ], [ 73.0562644, 36.5614956 ], [ 73.0565023, 36.5655084 ], [ 73.0586435, 36.5678969 ], [ 73.067565, 36.5677058 ], [ 73.0725611, 36.5700942 ], [ 73.0764866, 36.5713362 ], [ 73.0764866, 36.5782143 ], [ 73.0757729, 36.5857605 ], [ 73.078152, 36.5918733 ], [ 73.0802931, 36.5939744 ], [ 73.0850513, 36.5962665 ], [ 73.0886199, 36.5974126 ], [ 73.0921886, 36.6008506 ], [ 73.0969467, 36.6067712 ], [ 73.0963519, 36.6092539 ], [ 73.090999, 36.61441 ], [ 73.0816016, 36.6189929 ], [ 73.0760108, 36.6213798 ], [ 73.072799, 36.625294 ], [ 73.0706578, 36.6343629 ], [ 73.075416, 36.6404718 ], [ 73.0748212, 36.6422853 ], [ 73.0711337, 36.6461031 ], [ 73.0704199, 36.6511613 ], [ 73.0742265, 36.6587957 ], [ 73.0735127, 36.6637577 ], [ 73.0711337, 36.672822 ], [ 73.0689925, 36.6792141 ], [ 73.0717284, 36.6825531 ], [ 73.0794605, 36.6828393 ], [ 73.0912369, 36.6819807 ], [ 73.0996827, 36.6831254 ], [ 73.1026565, 36.6845564 ], [ 73.1086042, 36.6856057 ], [ 73.1159794, 36.691329 ], [ 73.1278748, 36.6987687 ], [ 73.1397702, 36.7022022 ], [ 73.1479781, 36.7063984 ], [ 73.1568996, 36.7084011 ], [ 73.1634421, 36.7127877 ], [ 73.1699846, 36.7162206 ], [ 73.1743859, 36.7196532 ], [ 73.1739101, 36.7265182 ], [ 73.1935375, 36.7234672 ], [ 73.2137598, 36.7174602 ], [ 73.2258931, 36.7120249 ], [ 73.2324356, 36.7121202 ], [ 73.2335062, 36.7087826 ], [ 73.2377885, 36.707066 ], [ 73.246948, 36.7062077 ], [ 73.2562264, 36.7065892 ], [ 73.265029, 36.7058262 ], [ 73.2763297, 36.7059216 ], [ 73.2826343, 36.7048725 ], [ 73.2950055, 36.7032513 ], [ 73.3030944, 36.703442 ], [ 73.3082094, 36.7030605 ], [ 73.3097558, 36.7045864 ], [ 73.309161, 36.7087826 ], [ 73.3164173, 36.7116434 ], [ 73.3253388, 36.7120249 ], [ 73.3292643, 36.7158391 ], [ 73.3348552, 36.7177462 ], [ 73.3448473, 36.7176509 ], [ 73.3463937, 36.7210835 ], [ 73.3469885, 36.7243253 ], [ 73.3503192, 36.7279483 ], [ 73.3485349, 36.7307131 ], [ 73.3436578, 36.7322384 ], [ 73.343182, 36.7369097 ], [ 73.3549584, 36.7368144 ], [ 73.3624525, 36.7392929 ], [ 73.3707793, 36.7334778 ], [ 73.3821989, 36.7339544 ], [ 73.3874329, 36.7319524 ], [ 73.3944512, 36.7344311 ], [ 73.4151493, 36.7326198 ], [ 73.4296617, 36.7263275 ], [ 73.4435793, 36.7211788 ], [ 73.4457205, 36.7260414 ], [ 73.4507166, 36.7302364 ], [ 73.4579728, 36.7360517 ], [ 73.4653479, 36.7368144 ], [ 73.4707009, 36.7341451 ], [ 73.4724852, 36.7296644 ], [ 73.4805741, 36.724802 ], [ 73.4873545, 36.7197486 ], [ 73.4959192, 36.7144088 ], [ 73.5000826, 36.7134552 ], [ 73.5135244, 36.7224184 ], [ 73.5178067, 36.7261368 ], [ 73.5230407, 36.7266135 ], [ 73.5236355, 36.7219416 ], [ 73.51971, 36.7171741 ], [ 73.524944, 36.7135506 ], [ 73.5348172, 36.713932 ], [ 73.5450473, 36.7163159 ], [ 73.5500433, 36.7187951 ], [ 73.5540878, 36.7162206 ], [ 73.5631283, 36.7162206 ], [ 73.5707414, 36.7214649 ], [ 73.5752616, 36.7238485 ], [ 73.579544, 36.7243253 ], [ 73.5863244, 36.710213 ], [ 73.5947701, 36.6999132 ], [ 73.5948891, 36.6948582 ], [ 73.6020263, 36.6949536 ], [ 73.6117806, 36.6980057 ], [ 73.6168956, 36.6949536 ], [ 73.6226054, 36.6945721 ], [ 73.6324786, 36.6977196 ], [ 73.6398538, 36.6981011 ], [ 73.6485374, 36.6916152 ], [ 73.6535335, 36.6910429 ], [ 73.6622172, 36.6936182 ], [ 73.6748263, 36.690089 ], [ 73.6864838, 36.6902798 ], [ 73.6900524, 36.6907567 ], [ 73.6930263, 36.6939044 ], [ 73.6973087, 36.7010577 ], [ 73.7050407, 36.7066845 ], [ 73.7070629, 36.7101176 ], [ 73.7090851, 36.713646 ], [ 73.714557, 36.7145995 ], [ 73.7244302, 36.7144088 ], [ 73.7312106, 36.7111666 ], [ 73.7403701, 36.7092594 ], [ 73.7446524, 36.7065892 ], [ 73.7495296, 36.7084965 ], [ 73.7545256, 36.7090686 ], [ 73.7654694, 36.7055401 ], [ 73.7726067, 36.7054448 ], [ 73.7811714, 36.7061123 ], [ 73.7884276, 36.7016299 ], [ 73.7947322, 36.7013438 ], [ 73.7990145, 36.6997225 ], [ 73.8025831, 36.700867 ], [ 73.805557, 36.7053494 ], [ 73.8097204, 36.7074475 ], [ 73.8163818, 36.7084965 ], [ 73.8241139, 36.7115481 ], [ 73.8312511, 36.7088779 ], [ 73.8414812, 36.7085918 ], [ 73.8556367, 36.7003901 ], [ 73.8619413, 36.6994363 ], [ 73.8686027, 36.7005808 ], [ 73.8741936, 36.700867 ], [ 73.8825204, 36.7033466 ], [ 73.8839478, 36.7059216 ], [ 73.8829962, 36.7103084 ], [ 73.8865648, 36.7156484 ], [ 73.8889439, 36.725088 ], [ 73.8890629, 36.7282343 ], [ 73.8806171, 36.7306177 ], [ 73.8762158, 36.7359564 ], [ 73.878357, 36.7405321 ], [ 73.8833531, 36.7451075 ], [ 73.8844236, 36.7488249 ], [ 73.8841857, 36.7512077 ], [ 73.8888249, 36.7523514 ], [ 73.8896576, 36.7542576 ], [ 73.8868027, 36.7570214 ], [ 73.8818066, 36.7692193 ], [ 73.8766916, 36.7703628 ], [ 73.8683648, 36.7777948 ], [ 73.8628929, 36.7766515 ], [ 73.8559936, 36.7790335 ], [ 73.849808, 36.784464 ], [ 73.8482616, 36.7917994 ], [ 73.8330354, 36.7918947 ], [ 73.8250655, 36.7958955 ], [ 73.8151923, 36.7991341 ], [ 73.8103152, 36.7978959 ], [ 73.8060328, 36.7943714 ], [ 73.8002041, 36.794943 ], [ 73.7988956, 36.7987531 ], [ 73.7969923, 36.8025631 ], [ 73.7980629, 36.8094206 ], [ 73.7955648, 36.8196105 ], [ 73.7896171, 36.8201818 ], [ 73.7815282, 36.8178964 ], [ 73.7727256, 36.8146586 ], [ 73.7641609, 36.8146586 ], [ 73.7571426, 36.818563 ], [ 73.7519086, 36.8218959 ], [ 73.7478642, 36.8272282 ], [ 73.7375152, 36.8281803 ], [ 73.7335897, 36.8299894 ], [ 73.7266903, 36.8315128 ], [ 73.7237165, 36.8353211 ], [ 73.7115832, 36.8352259 ], [ 73.7050407, 36.8351307 ], [ 73.7020668, 36.8378917 ], [ 73.6935021, 36.8547408 ], [ 73.6831531, 36.8674941 ], [ 73.6693544, 36.8874765 ], [ 73.662574, 36.8963241 ], [ 73.654106, 36.908791 ], [ 73.654681, 36.909124 ], [ 73.655316, 36.90941 ], [ 73.655961, 36.90992 ], [ 73.656573, 36.910116 ], [ 73.657059, 36.910484 ], [ 73.657858, 36.910742 ], [ 73.658822, 36.910972 ], [ 73.65958, 36.910881 ], [ 73.660169, 36.910893 ], [ 73.660913, 36.911123 ], [ 73.661638, 36.911188 ], [ 73.662438, 36.91107 ], [ 73.664927, 36.910966 ], [ 73.66605, 36.91115 ], [ 73.667808, 36.911715 ], [ 73.669876, 36.911588 ], [ 73.670821, 36.911559 ], [ 73.671733, 36.911591 ], [ 73.672299, 36.911795 ], [ 73.674972, 36.913161 ], [ 73.675814, 36.913393 ], [ 73.676614, 36.913276 ], [ 73.677302, 36.91329 ], [ 73.678518, 36.913458 ], [ 73.67899, 36.913585 ], [ 73.679589, 36.913539 ], [ 73.680885, 36.913731 ], [ 73.681656, 36.913788 ], [ 73.682078, 36.913716 ], [ 73.682686, 36.913707 ], [ 73.684172, 36.914261 ], [ 73.685267, 36.914431 ], [ 73.686623, 36.914482 ], [ 73.687329, 36.914662 ], [ 73.687722, 36.914858 ], [ 73.688423, 36.91502 ], [ 73.688774, 36.915336 ], [ 73.689448, 36.915296 ], [ 73.69013, 36.915668 ], [ 73.690682, 36.915631 ], [ 73.69158, 36.915797 ], [ 73.691983, 36.915559 ], [ 73.692775, 36.914937 ], [ 73.693308, 36.915015 ], [ 73.693781, 36.914859 ], [ 73.694231, 36.91452 ], [ 73.694807, 36.914385 ], [ 73.695658, 36.914277 ], [ 73.697689, 36.914195 ], [ 73.699847, 36.913752 ], [ 73.700013, 36.913405 ], [ 73.70022, 36.913257 ], [ 73.700695, 36.912735 ], [ 73.701413, 36.912247 ], [ 73.701893, 36.911837 ], [ 73.7025, 36.911114 ], [ 73.70302, 36.910763 ], [ 73.703631, 36.910669 ], [ 73.70398, 36.910459 ], [ 73.704563, 36.910491 ], [ 73.705054, 36.910455 ], [ 73.705396, 36.910359 ], [ 73.705815, 36.910185 ], [ 73.706206, 36.909808 ], [ 73.706496, 36.909703 ], [ 73.706808, 36.909443 ], [ 73.70697, 36.909219 ], [ 73.707263, 36.909075 ], [ 73.707457, 36.908882 ], [ 73.707949, 36.908799 ], [ 73.7083, 36.908833 ], [ 73.709292, 36.908655 ], [ 73.709353, 36.908372 ], [ 73.709639, 36.908014 ], [ 73.710091, 36.907871 ], [ 73.710307, 36.907619 ], [ 73.710593, 36.907401 ], [ 73.711033, 36.907307 ], [ 73.711354, 36.907037 ], [ 73.711747, 36.906951 ], [ 73.712316, 36.906554 ], [ 73.713075, 36.906416 ], [ 73.713892, 36.905751 ], [ 73.715447, 36.905149 ], [ 73.715815, 36.904964 ], [ 73.71617, 36.904876 ], [ 73.717172, 36.904827 ], [ 73.718084, 36.904813 ], [ 73.718805, 36.904859 ], [ 73.72037, 36.904583 ], [ 73.721027, 36.904622 ], [ 73.722139, 36.904339 ], [ 73.72457, 36.904244 ], [ 73.726348, 36.903942 ], [ 73.72705, 36.903963 ], [ 73.727516, 36.903921 ], [ 73.728051, 36.903962 ], [ 73.728391, 36.90381 ], [ 73.729278, 36.903744 ], [ 73.729975, 36.903559 ], [ 73.730429, 36.90352 ], [ 73.733337, 36.903569 ], [ 73.733889, 36.903485 ], [ 73.734376, 36.903195 ], [ 73.734868, 36.903018 ], [ 73.735714, 36.903268 ], [ 73.736602, 36.903633 ], [ 73.736922, 36.903926 ], [ 73.737791, 36.904548 ], [ 73.738284, 36.904755 ], [ 73.738536, 36.904974 ], [ 73.738882, 36.905178 ], [ 73.739146, 36.905443 ], [ 73.739348, 36.905756 ], [ 73.740132, 36.905763 ], [ 73.740403, 36.905867 ], [ 73.740858, 36.906635 ], [ 73.741227, 36.906788 ], [ 73.741671, 36.9069 ], [ 73.7427, 36.906959 ], [ 73.743135, 36.907223 ], [ 73.743359, 36.907429 ], [ 73.743887, 36.90763 ], [ 73.744292, 36.90773 ], [ 73.744727, 36.907759 ], [ 73.746385, 36.909026 ], [ 73.746693, 36.90918 ], [ 73.747671, 36.90937 ], [ 73.748787, 36.910053 ], [ 73.74969, 36.910472 ], [ 73.750002, 36.910737 ], [ 73.751266, 36.911423 ], [ 73.7521, 36.912051 ], [ 73.75286, 36.912156 ], [ 73.753143, 36.912117 ], [ 73.75327, 36.911899 ], [ 73.753507, 36.911727 ], [ 73.753921, 36.911581 ], [ 73.754186, 36.911565 ], [ 73.754549, 36.911174 ], [ 73.754938, 36.910883 ], [ 73.755245, 36.910559 ], [ 73.755852, 36.910118 ], [ 73.755927, 36.909795 ], [ 73.75616, 36.909605 ], [ 73.756052, 36.909427 ], [ 73.756146, 36.909129 ], [ 73.756468, 36.908765 ], [ 73.756983, 36.908395 ], [ 73.757304, 36.908313 ], [ 73.757489, 36.908178 ], [ 73.757483, 36.907776 ], [ 73.757631, 36.907356 ], [ 73.758053, 36.906909 ], [ 73.75801, 36.906504 ], [ 73.757924, 36.906265 ], [ 73.757564, 36.905866 ], [ 73.75759, 36.90559 ], [ 73.757982, 36.90526 ], [ 73.758403, 36.905207 ], [ 73.759083, 36.905311 ], [ 73.75932, 36.905178 ], [ 73.759886, 36.905058 ], [ 73.76051, 36.904999 ], [ 73.762256, 36.905171 ], [ 73.763784, 36.905137 ], [ 73.765652, 36.90485 ], [ 73.766338, 36.904973 ], [ 73.767499, 36.905401 ], [ 73.768827, 36.905738 ], [ 73.769689, 36.905606 ], [ 73.770612, 36.905597 ], [ 73.771285, 36.905418 ], [ 73.771755, 36.903665 ], [ 73.772119, 36.903398 ], [ 73.772067, 36.902694 ], [ 73.772488, 36.901877 ], [ 73.773013, 36.901143 ], [ 73.773042, 36.899774 ], [ 73.772761, 36.898672 ], [ 73.773213, 36.898735 ], [ 73.773871, 36.898752 ], [ 73.774307, 36.898553 ], [ 73.77484, 36.89846 ], [ 73.775003, 36.898156 ], [ 73.775978, 36.897781 ], [ 73.777321, 36.897667 ], [ 73.778693, 36.897762 ], [ 73.779472, 36.897676 ], [ 73.780096, 36.897669 ], [ 73.780709, 36.897469 ], [ 73.781187, 36.897477 ], [ 73.781429, 36.897618 ], [ 73.781824, 36.897976 ], [ 73.782325, 36.898122 ], [ 73.783643, 36.898267 ], [ 73.784061, 36.898459 ], [ 73.784817, 36.89854 ], [ 73.784989, 36.898927 ], [ 73.785183, 36.899148 ], [ 73.785602, 36.899288 ], [ 73.786106, 36.899596 ], [ 73.786683, 36.899719 ], [ 73.787153, 36.900054 ], [ 73.788231, 36.900374 ], [ 73.788886, 36.900483 ], [ 73.789502, 36.900802 ], [ 73.790045, 36.9009 ], [ 73.790977, 36.900675 ], [ 73.7915, 36.900492 ], [ 73.792199, 36.90041 ], [ 73.79408, 36.900018 ], [ 73.795337, 36.899634 ], [ 73.795535, 36.899253 ], [ 73.796122, 36.898804 ], [ 73.79727, 36.898114 ], [ 73.798222, 36.897295 ], [ 73.79924, 36.896729 ], [ 73.799656, 36.896045 ], [ 73.799433, 36.895412 ], [ 73.799755, 36.893767 ], [ 73.79937, 36.893142 ], [ 73.798555, 36.89243 ], [ 73.799085, 36.892021 ], [ 73.799558, 36.890889 ], [ 73.799916, 36.890602 ], [ 73.800641, 36.890567 ], [ 73.801932, 36.890615 ], [ 73.802481, 36.890987 ], [ 73.803034, 36.891175 ], [ 73.803421, 36.891249 ], [ 73.804879, 36.891309 ], [ 73.805209, 36.891424 ], [ 73.806835, 36.891454 ], [ 73.807849, 36.891581 ], [ 73.808277, 36.891557 ], [ 73.809262, 36.891679 ], [ 73.810351, 36.891732 ], [ 73.813032, 36.891333 ], [ 73.813643, 36.891276 ], [ 73.813936, 36.891153 ], [ 73.814134, 36.890976 ], [ 73.814612, 36.890831 ], [ 73.815059, 36.890824 ], [ 73.815696, 36.891119 ], [ 73.816062, 36.891472 ], [ 73.816592, 36.891675 ], [ 73.816636, 36.892349 ], [ 73.816555, 36.892811 ], [ 73.817223, 36.893478 ], [ 73.81774, 36.893733 ], [ 73.817904, 36.894092 ], [ 73.818654, 36.894459 ], [ 73.818972, 36.894932 ], [ 73.819338, 36.895336 ], [ 73.819746, 36.895642 ], [ 73.820123, 36.89583 ], [ 73.820502, 36.896181 ], [ 73.822893, 36.897159 ], [ 73.823378, 36.897323 ], [ 73.824291, 36.897528 ], [ 73.826354, 36.898658 ], [ 73.827306, 36.899294 ], [ 73.827609, 36.899985 ], [ 73.827737, 36.900572 ], [ 73.828265, 36.90109 ], [ 73.827843, 36.901639 ], [ 73.827018, 36.902523 ], [ 73.825552, 36.903308 ], [ 73.825102, 36.903652 ], [ 73.825155, 36.904137 ], [ 73.825354, 36.904617 ], [ 73.825367, 36.906176 ], [ 73.825302, 36.906492 ], [ 73.824861, 36.906967 ], [ 73.825056, 36.907619 ], [ 73.824882, 36.907991 ], [ 73.825062, 36.908303 ], [ 73.825618, 36.908645 ], [ 73.825925, 36.909164 ], [ 73.825964, 36.90969 ], [ 73.826709, 36.910476 ], [ 73.826833, 36.91114 ], [ 73.826519, 36.911726 ], [ 73.825999, 36.912368 ], [ 73.825784, 36.912957 ], [ 73.826204, 36.913627 ], [ 73.826413, 36.914143 ], [ 73.826955, 36.914716 ], [ 73.828313, 36.915873 ], [ 73.829445, 36.917201 ], [ 73.830228, 36.918227 ], [ 73.831082, 36.919147 ], [ 73.831484, 36.920124 ], [ 73.831542, 36.920628 ], [ 73.832107, 36.922606 ], [ 73.832424, 36.923351 ], [ 73.832941, 36.923548 ], [ 73.833804, 36.924313 ], [ 73.83444, 36.92449 ], [ 73.835193, 36.924931 ], [ 73.835923, 36.925282 ], [ 73.841253, 36.925945 ], [ 73.843619, 36.925977 ], [ 73.844178, 36.925576 ], [ 73.846377, 36.924684 ], [ 73.84796, 36.923974 ], [ 73.847952, 36.922434 ], [ 73.848133, 36.921717 ], [ 73.847996, 36.921379 ], [ 73.847853, 36.920642 ], [ 73.848585, 36.919965 ], [ 73.849604, 36.919447 ], [ 73.849955, 36.918911 ], [ 73.850261, 36.918668 ], [ 73.851294, 36.9183 ], [ 73.852568, 36.917719 ], [ 73.852887, 36.917626 ], [ 73.853672, 36.917529 ], [ 73.855276, 36.917463 ], [ 73.855816, 36.917275 ], [ 73.856479, 36.91718 ], [ 73.856949, 36.917195 ], [ 73.857547, 36.91732 ], [ 73.858262, 36.917331 ], [ 73.85877, 36.91711 ], [ 73.860235, 36.916325 ], [ 73.861123, 36.915963 ], [ 73.862091, 36.915816 ], [ 73.862571, 36.915819 ], [ 73.862893, 36.915688 ], [ 73.863419, 36.915588 ], [ 73.863875, 36.915405 ], [ 73.86432, 36.915414 ], [ 73.864801, 36.915331 ], [ 73.865276, 36.915173 ], [ 73.865814, 36.915119 ], [ 73.866456, 36.91499 ], [ 73.868333, 36.914981 ], [ 73.869611, 36.914752 ], [ 73.870128, 36.914568 ], [ 73.870843, 36.914483 ], [ 73.872075, 36.914405 ], [ 73.872647, 36.91443 ], [ 73.873279, 36.914397 ], [ 73.874431, 36.914226 ], [ 73.874985, 36.914313 ], [ 73.875313, 36.914247 ], [ 73.876343, 36.914222 ], [ 73.876886, 36.914176 ], [ 73.878006, 36.913933 ], [ 73.878901, 36.913913 ], [ 73.879784, 36.91375 ], [ 73.880195, 36.913813 ], [ 73.880604, 36.913771 ], [ 73.88121, 36.913589 ], [ 73.881567, 36.913353 ], [ 73.881933, 36.91329 ], [ 73.88414, 36.913003 ], [ 73.885406, 36.913034 ], [ 73.886607, 36.912767 ], [ 73.88684, 36.912948 ], [ 73.887122, 36.913083 ], [ 73.888644, 36.912915 ], [ 73.889779, 36.913007 ], [ 73.890237, 36.913014 ], [ 73.89062, 36.912967 ], [ 73.890465, 36.912521 ], [ 73.89065, 36.912287 ], [ 73.890765, 36.911833 ], [ 73.891108, 36.911214 ], [ 73.891421, 36.911044 ], [ 73.89139, 36.91074 ], [ 73.89166, 36.910452 ], [ 73.891795, 36.910168 ], [ 73.892387, 36.909699 ], [ 73.892696, 36.909375 ], [ 73.893174, 36.909177 ], [ 73.893992, 36.908533 ], [ 73.895485, 36.90783 ], [ 73.895815, 36.907773 ], [ 73.896003, 36.907316 ], [ 73.896665, 36.906506 ], [ 73.897128, 36.906156 ], [ 73.89744, 36.905793 ], [ 73.898461, 36.905127 ], [ 73.899447, 36.904629 ], [ 73.90162, 36.903374 ], [ 73.903142, 36.90274 ], [ 73.905253, 36.901659 ], [ 73.90677, 36.900804 ], [ 73.90738, 36.90023 ], [ 73.90761, 36.898855 ], [ 73.907381, 36.898209 ], [ 73.906662, 36.89777 ], [ 73.905048, 36.89553 ], [ 73.904393, 36.893806 ], [ 73.904461, 36.892642 ], [ 73.905066, 36.891746 ], [ 73.905061, 36.891121 ], [ 73.90527, 36.890376 ], [ 73.904781, 36.889371 ], [ 73.904964, 36.888328 ], [ 73.904886, 36.887129 ], [ 73.904043, 36.886531 ], [ 73.902844, 36.885833 ], [ 73.901521, 36.885482 ], [ 73.899708, 36.885237 ], [ 73.898453, 36.884328 ], [ 73.897896, 36.883577 ], [ 73.897375, 36.88276 ], [ 73.896521, 36.882022 ], [ 73.894395, 36.881226 ], [ 73.893333, 36.880525 ], [ 73.892046, 36.879803 ], [ 73.892177, 36.87877 ], [ 73.892667, 36.878157 ], [ 73.894455, 36.877699 ], [ 73.894976, 36.877505 ], [ 73.89618, 36.877211 ], [ 73.896612, 36.876993 ], [ 73.897519, 36.876812 ], [ 73.898394, 36.876818 ], [ 73.899359, 36.876546 ], [ 73.90038, 36.876486 ], [ 73.901281, 36.876589 ], [ 73.902464, 36.876218 ], [ 73.903407, 36.876172 ], [ 73.904961, 36.875452 ], [ 73.907463, 36.874503 ], [ 73.908406, 36.874255 ], [ 73.909313, 36.874074 ], [ 73.910694, 36.87302 ], [ 73.911288, 36.872086 ], [ 73.911675, 36.870886 ], [ 73.911936, 36.870334 ], [ 73.912681, 36.869858 ], [ 73.912921, 36.869128 ], [ 73.914651, 36.869367 ], [ 73.915797, 36.869872 ], [ 73.916756, 36.870187 ], [ 73.917365, 36.870625 ], [ 73.919063, 36.871355 ], [ 73.923731, 36.872973 ], [ 73.92433, 36.873271 ], [ 73.924752, 36.873621 ], [ 73.925757, 36.874008 ], [ 73.926404, 36.873874 ], [ 73.929228, 36.87402 ], [ 73.930103, 36.874431 ], [ 73.931087, 36.875044 ], [ 73.932234, 36.87474 ], [ 73.933198, 36.873861 ], [ 73.934043, 36.872843 ], [ 73.935065, 36.872075 ], [ 73.935941, 36.871172 ], [ 73.937488, 36.870736 ], [ 73.939121, 36.869092 ], [ 73.940121, 36.86845 ], [ 73.940825, 36.867921 ], [ 73.942227, 36.867854 ], [ 73.944562, 36.866793 ], [ 73.94526, 36.86675 ], [ 73.946271, 36.866854 ], [ 73.946516, 36.866447 ], [ 73.947173, 36.865946 ], [ 73.948278, 36.864679 ], [ 73.948445, 36.864285 ], [ 73.947971, 36.863541 ], [ 73.948013, 36.862987 ], [ 73.947618, 36.861622 ], [ 73.947634, 36.860871 ], [ 73.948192, 36.86051 ], [ 73.948953, 36.860395 ], [ 73.949984, 36.860576 ], [ 73.951313, 36.860441 ], [ 73.95234, 36.860098 ], [ 73.953314, 36.860066 ], [ 73.954164, 36.859774 ], [ 73.954857, 36.859207 ], [ 73.955727, 36.859194 ], [ 73.956431, 36.859372 ], [ 73.955931, 36.858228 ], [ 73.956041, 36.857622 ], [ 73.956234, 36.857224 ], [ 73.956865, 36.85693 ], [ 73.957698, 36.856681 ], [ 73.957771, 36.856244 ], [ 73.957412, 36.855721 ], [ 73.95674, 36.855355 ], [ 73.95609, 36.85446 ], [ 73.955501, 36.853796 ], [ 73.954761, 36.853685 ], [ 73.954079, 36.852472 ], [ 73.954471, 36.851796 ], [ 73.954533, 36.851219 ], [ 73.9548, 36.850282 ], [ 73.956792, 36.84815 ], [ 73.95712, 36.847546 ], [ 73.957053, 36.846891 ], [ 73.956304, 36.844113 ], [ 73.9567, 36.843254 ], [ 73.95743, 36.842518 ], [ 73.958301, 36.842505 ], [ 73.959317, 36.842426 ], [ 73.960593, 36.842099 ], [ 73.961474, 36.842024 ], [ 73.963595, 36.842193 ], [ 73.964866, 36.84215 ], [ 73.965622, 36.842319 ], [ 73.966919, 36.842372 ], [ 73.966847, 36.841293 ], [ 73.96728, 36.84057 ], [ 73.966571, 36.839867 ], [ 73.966363, 36.839398 ], [ 73.966697, 36.839117 ], [ 73.967953, 36.838914 ], [ 73.969151, 36.838499 ], [ 73.970043, 36.837957 ], [ 73.971038, 36.837599 ], [ 73.971367, 36.837298 ], [ 73.971846, 36.836647 ], [ 73.972717, 36.836533 ], [ 73.974051, 36.836216 ], [ 73.975458, 36.836269 ], [ 73.976896, 36.83654 ], [ 73.977959, 36.836432 ], [ 73.979308, 36.83587 ], [ 73.980419, 36.835632 ], [ 73.980882, 36.835631 ], [ 73.981357, 36.835365 ], [ 73.982118, 36.834846 ], [ 73.982936, 36.834135 ], [ 73.984735, 36.832906 ], [ 73.985584, 36.832614 ], [ 73.98635, 36.832013 ], [ 73.987346, 36.831453 ], [ 73.988164, 36.831449 ], [ 73.988966, 36.831792 ], [ 73.989148, 36.832468 ], [ 73.989825, 36.832651 ], [ 73.990341, 36.832842 ], [ 73.991034, 36.832679 ], [ 73.991394, 36.832191 ], [ 73.991838, 36.831708 ], [ 73.993078, 36.831245 ], [ 73.99436, 36.830229 ], [ 73.995058, 36.830187 ], [ 73.995491, 36.830878 ], [ 73.996653, 36.830935 ], [ 73.997533, 36.831769 ], [ 73.999116, 36.83258 ], [ 74.00019, 36.832915 ], [ 74.000538, 36.833602 ], [ 74.001085, 36.834414 ], [ 74.00184, 36.834685 ], [ 74.00199, 36.835474 ], [ 74.00232, 36.836079 ], [ 74.003385, 36.836827 ], [ 74.004765, 36.837128 ], [ 74.006516, 36.837174 ], [ 74.007189, 36.836762 ], [ 74.007464, 36.836498 ], [ 74.008667, 36.835739 ], [ 74.009568, 36.83506 ], [ 74.010339, 36.834165 ], [ 74.011186, 36.833961 ], [ 74.012589, 36.833755 ], [ 74.013187, 36.833822 ], [ 74.013954, 36.83333 ], [ 74.015023, 36.832922 ], [ 74.01581, 36.832502 ], [ 74.016605, 36.831943 ], [ 74.01771, 36.831666 ], [ 74.019759, 36.831367 ], [ 74.022219, 36.830881 ], [ 74.023345, 36.830764 ], [ 74.023925, 36.82993 ], [ 74.024936, 36.828979 ], [ 74.027003, 36.827409 ], [ 74.028324, 36.827658 ], [ 74.029405, 36.828215 ], [ 74.030402, 36.828636 ], [ 74.031088, 36.828686 ], [ 74.031741, 36.828869 ], [ 74.032515, 36.828904 ], [ 74.034206, 36.828231 ], [ 74.034566, 36.827776 ], [ 74.035946, 36.827236 ], [ 74.038017, 36.826933 ], [ 74.039507, 36.826373 ], [ 74.041091, 36.826486 ], [ 74.041888, 36.826604 ], [ 74.042972, 36.826834 ], [ 74.043514, 36.826785 ], [ 74.044093, 36.826617 ], [ 74.045404, 36.826416 ], [ 74.04598, 36.826235 ], [ 74.04712, 36.826253 ], [ 74.048114, 36.826411 ], [ 74.049295, 36.827076 ], [ 74.050165, 36.827959 ], [ 74.050611, 36.82823 ], [ 74.0511, 36.828656 ], [ 74.053666, 36.829972 ], [ 74.054794, 36.830696 ], [ 74.055173, 36.831229 ], [ 74.055602, 36.832106 ], [ 74.056389, 36.832691 ], [ 74.056972, 36.833037 ], [ 74.057237, 36.833491 ], [ 74.057463, 36.834141 ], [ 74.057799, 36.834682 ], [ 74.059142, 36.835015 ], [ 74.061971, 36.838281 ], [ 74.062666, 36.839284 ], [ 74.062949, 36.839886 ], [ 74.065299, 36.841091 ], [ 74.066767, 36.841037 ], [ 74.067302, 36.841127 ], [ 74.067855, 36.8407 ], [ 74.068418, 36.840723 ], [ 74.069188, 36.840909 ], [ 74.069887, 36.840506 ], [ 74.070554, 36.839819 ], [ 74.071367, 36.839658 ], [ 74.072061, 36.839406 ], [ 74.072691, 36.839504 ], [ 74.073198, 36.839412 ], [ 74.074968, 36.839278 ], [ 74.075835, 36.839145 ], [ 74.076591, 36.838944 ], [ 74.078232, 36.838343 ], [ 74.078883, 36.837936 ], [ 74.080294, 36.837842 ], [ 74.081094, 36.838136 ], [ 74.082002, 36.83807 ], [ 74.083194, 36.838356 ], [ 74.083908, 36.83859 ], [ 74.084849, 36.838644 ], [ 74.085797, 36.838635 ], [ 74.087417, 36.838126 ], [ 74.089954, 36.838417 ], [ 74.091882, 36.838518 ], [ 74.092031, 36.839307 ], [ 74.092791, 36.839709 ], [ 74.093148, 36.840159 ], [ 74.094815, 36.841325 ], [ 74.095362, 36.841627 ], [ 74.095675, 36.841921 ], [ 74.095875, 36.842224 ], [ 74.096612, 36.842291 ], [ 74.097407, 36.842234 ], [ 74.098267, 36.842077 ], [ 74.098996, 36.841781 ], [ 74.099646, 36.8417 ], [ 74.100593, 36.84169 ], [ 74.101177, 36.841458 ], [ 74.101933, 36.841509 ], [ 74.10466, 36.84115 ], [ 74.104907, 36.840703 ], [ 74.105277, 36.839781 ], [ 74.106021, 36.839118 ], [ 74.106596, 36.838687 ], [ 74.107253, 36.838466 ], [ 74.10776, 36.838374 ], [ 74.108348, 36.838154 ], [ 74.109448, 36.837941 ], [ 74.110506, 36.838162 ], [ 74.111257, 36.838113 ], [ 74.112877, 36.838107 ], [ 74.113704, 36.838333 ], [ 74.114813, 36.838319 ], [ 74.115216, 36.838271 ], [ 74.115769, 36.838007 ], [ 74.116162, 36.837922 ], [ 74.116895, 36.837889 ], [ 74.11753, 36.837924 ], [ 74.118114, 36.838107 ], [ 74.118984, 36.838237 ], [ 74.119982, 36.837992 ], [ 74.12079, 36.83822 ], [ 74.121111, 36.838963 ], [ 74.121998, 36.839814 ], [ 74.12268, 36.840341 ], [ 74.123393, 36.841575 ], [ 74.123513, 36.842341 ], [ 74.124092, 36.843174 ], [ 74.124733, 36.844396 ], [ 74.125211, 36.845535 ], [ 74.125339, 36.8465 ], [ 74.124761, 36.847606 ], [ 74.124262, 36.848323 ], [ 74.12417, 36.848915 ], [ 74.124833, 36.849207 ], [ 74.125382, 36.849345 ], [ 74.126111, 36.849875 ], [ 74.12689, 36.850084 ], [ 74.127745, 36.849815 ], [ 74.128714, 36.849701 ], [ 74.130329, 36.849232 ], [ 74.131606, 36.849225 ], [ 74.131887, 36.849399 ], [ 74.1329, 36.849865 ], [ 74.133543, 36.850424 ], [ 74.133809, 36.851301 ], [ 74.133598, 36.851965 ], [ 74.133988, 36.852619 ], [ 74.134484, 36.853067 ], [ 74.134934, 36.853598 ], [ 74.133739, 36.854491 ], [ 74.133455, 36.855144 ], [ 74.132366, 36.85558 ], [ 74.131064, 36.856255 ], [ 74.130609, 36.857214 ], [ 74.129924, 36.858101 ], [ 74.129544, 36.858746 ], [ 74.129135, 36.859284 ], [ 74.12896, 36.860667 ], [ 74.129151, 36.861358 ], [ 74.129781, 36.862119 ], [ 74.130106, 36.862622 ], [ 74.129893, 36.8637 ], [ 74.130112, 36.864323 ], [ 74.13089, 36.865032 ], [ 74.131727, 36.865367 ], [ 74.132461, 36.865834 ], [ 74.132936, 36.866373 ], [ 74.13334, 36.867075 ], [ 74.133827, 36.867575 ], [ 74.13412, 36.867959 ], [ 74.134266, 36.868321 ], [ 74.134597, 36.868761 ], [ 74.134958, 36.869896 ], [ 74.135469, 36.871067 ], [ 74.136276, 36.872133 ], [ 74.136773, 36.873256 ], [ 74.137167, 36.873673 ], [ 74.138108, 36.873877 ], [ 74.138672, 36.873899 ], [ 74.139019, 36.874061 ], [ 74.139377, 36.874346 ], [ 74.13951, 36.87491 ], [ 74.140546, 36.876047 ], [ 74.141029, 36.876447 ], [ 74.141454, 36.876971 ], [ 74.142268, 36.878737 ], [ 74.142939, 36.879478 ], [ 74.145348, 36.880365 ], [ 74.145532, 36.880694 ], [ 74.145753, 36.880904 ], [ 74.146998, 36.881791 ], [ 74.148614, 36.882335 ], [ 74.149027, 36.882985 ], [ 74.151206, 36.884678 ], [ 74.152045, 36.884056 ], [ 74.152332, 36.883916 ], [ 74.152903, 36.883837 ], [ 74.153804, 36.883561 ], [ 74.154233, 36.883263 ], [ 74.154626, 36.882835 ], [ 74.154926, 36.882743 ], [ 74.155341, 36.88273 ], [ 74.156215, 36.882903 ], [ 74.158652, 36.883935 ], [ 74.159166, 36.884655 ], [ 74.159577, 36.885468 ], [ 74.159959, 36.885924 ], [ 74.159807, 36.88634 ], [ 74.159636, 36.886521 ], [ 74.15977, 36.886709 ], [ 74.159662, 36.887329 ], [ 74.158563, 36.887561 ], [ 74.158069, 36.887832 ], [ 74.157825, 36.887877 ], [ 74.157725, 36.88802 ], [ 74.157877, 36.888317 ], [ 74.157846, 36.888542 ], [ 74.158017, 36.888698 ], [ 74.158053, 36.889161 ], [ 74.157969, 36.889446 ], [ 74.157726, 36.889702 ], [ 74.157087, 36.89 ], [ 74.156854, 36.890223 ], [ 74.156681, 36.890492 ], [ 74.155293, 36.891446 ], [ 74.154861, 36.891846 ], [ 74.154403, 36.892026 ], [ 74.153798, 36.892438 ], [ 74.153366, 36.892626 ], [ 74.152884, 36.892714 ], [ 74.152619, 36.892994 ], [ 74.152474, 36.893367 ], [ 74.152719, 36.893657 ], [ 74.152691, 36.894195 ], [ 74.152862, 36.894427 ], [ 74.152907, 36.894631 ], [ 74.152836, 36.895569 ], [ 74.153062, 36.895747 ], [ 74.153228, 36.896815 ], [ 74.153198, 36.897135 ], [ 74.153365, 36.898165 ], [ 74.153706, 36.898161 ], [ 74.154673, 36.898415 ], [ 74.15517, 36.898632 ], [ 74.155766, 36.898697 ], [ 74.156172, 36.898803 ], [ 74.15671, 36.898827 ], [ 74.157177, 36.898979 ], [ 74.157657, 36.89884 ], [ 74.159003, 36.898884 ], [ 74.159564, 36.899122 ], [ 74.160397, 36.899574 ], [ 74.161452, 36.899934 ], [ 74.161807, 36.900107 ], [ 74.161948, 36.900319 ], [ 74.16222, 36.900449 ], [ 74.163152, 36.900704 ], [ 74.163417, 36.900809 ], [ 74.163525, 36.900944 ], [ 74.163911, 36.900976 ], [ 74.164345, 36.900923 ], [ 74.164767, 36.901 ], [ 74.165231, 36.90114 ], [ 74.165445, 36.901403 ], [ 74.165713, 36.90156 ], [ 74.166313, 36.90147 ], [ 74.166736, 36.901675 ], [ 74.167045, 36.901728 ], [ 74.167719, 36.902074 ], [ 74.168465, 36.902214 ], [ 74.169772, 36.902374 ], [ 74.17001, 36.902466 ], [ 74.170731, 36.902938 ], [ 74.171448, 36.903186 ], [ 74.171838, 36.903231 ], [ 74.172029, 36.903324 ], [ 74.172935, 36.904894 ], [ 74.17322, 36.90524 ], [ 74.173529, 36.905974 ], [ 74.173524, 36.906213 ], [ 74.173187, 36.906358 ], [ 74.173019, 36.906691 ], [ 74.17344, 36.907828 ], [ 74.173127, 36.908059 ], [ 74.172983, 36.908349 ], [ 74.172927, 36.908616 ], [ 74.172993, 36.909195 ], [ 74.172837, 36.90957 ], [ 74.172405, 36.909713 ], [ 74.172255, 36.909856 ], [ 74.172118, 36.910254 ], [ 74.172054, 36.910536 ], [ 74.172035, 36.911149 ], [ 74.172142, 36.911708 ], [ 74.172306, 36.912083 ], [ 74.172615, 36.912393 ], [ 74.172792, 36.912688 ], [ 74.173096, 36.912851 ], [ 74.17336, 36.913208 ], [ 74.173389, 36.913441 ], [ 74.1736, 36.913608 ], [ 74.173956, 36.913742 ], [ 74.175674, 36.915902 ], [ 74.175816, 36.916159 ], [ 74.175927, 36.916518 ], [ 74.176887, 36.916574 ], [ 74.177187, 36.916468 ], [ 74.177477, 36.916492 ], [ 74.177767, 36.9166 ], [ 74.178498, 36.916428 ], [ 74.178973, 36.916399 ], [ 74.179863, 36.9165 ], [ 74.180035, 36.91661 ], [ 74.180747, 36.916499 ], [ 74.180967, 36.916356 ], [ 74.18113, 36.915922 ], [ 74.181883, 36.915148 ], [ 74.182009, 36.91492 ], [ 74.18197, 36.91465 ], [ 74.182163, 36.91441 ], [ 74.182342, 36.914416 ], [ 74.182653, 36.914346 ], [ 74.182881, 36.91415 ], [ 74.183124, 36.913874 ], [ 74.183439, 36.913264 ], [ 74.184064, 36.912797 ], [ 74.184276, 36.91254 ], [ 74.184571, 36.912454 ], [ 74.185087, 36.912186 ], [ 74.185734, 36.912094 ], [ 74.186004, 36.912006 ], [ 74.186473, 36.911696 ], [ 74.187328, 36.911501 ], [ 74.188092, 36.911452 ], [ 74.188761, 36.91131 ], [ 74.189061, 36.911159 ], [ 74.189647, 36.910634 ], [ 74.190122, 36.910471 ], [ 74.190933, 36.909693 ], [ 74.191158, 36.909697 ], [ 74.191387, 36.909758 ], [ 74.191625, 36.909894 ], [ 74.19299, 36.910224 ], [ 74.193968, 36.910174 ], [ 74.194302, 36.910229 ], [ 74.194454, 36.910438 ], [ 74.19485, 36.91072 ], [ 74.196238, 36.91109 ], [ 74.197011, 36.911154 ], [ 74.199179, 36.911485 ], [ 74.200074, 36.91118 ], [ 74.200525, 36.910892 ], [ 74.20115, 36.910335 ], [ 74.201687, 36.910102 ], [ 74.201869, 36.909908 ], [ 74.201926, 36.909602 ], [ 74.202185, 36.909388 ], [ 74.202613, 36.908545 ], [ 74.202873, 36.908208 ], [ 74.203101, 36.907537 ], [ 74.203487, 36.906843 ], [ 74.203578, 36.906191 ], [ 74.203565, 36.905891 ], [ 74.203645, 36.905626 ], [ 74.203798, 36.905367 ], [ 74.20379, 36.90504 ], [ 74.204025, 36.90474 ], [ 74.203894, 36.904308 ], [ 74.205328, 36.904142 ], [ 74.205697, 36.90419 ], [ 74.206177, 36.904172 ], [ 74.206697, 36.90434 ], [ 74.207375, 36.90435 ], [ 74.207746, 36.904577 ], [ 74.208146, 36.904741 ], [ 74.208923, 36.904893 ], [ 74.209506, 36.905203 ], [ 74.209922, 36.90555 ], [ 74.211944, 36.906397 ], [ 74.212827, 36.906889 ], [ 74.213383, 36.907101 ], [ 74.213791, 36.907378 ], [ 74.21422, 36.907345 ], [ 74.215433, 36.906681 ], [ 74.215833, 36.906544 ], [ 74.216227, 36.906299 ], [ 74.21676, 36.906342 ], [ 74.217788, 36.905565 ], [ 74.218217, 36.904808 ], [ 74.218646, 36.904435 ], [ 74.21892, 36.90393 ], [ 74.219316, 36.903435 ], [ 74.220585, 36.902761 ], [ 74.220838, 36.902433 ], [ 74.221055, 36.902233 ], [ 74.221469, 36.901978 ], [ 74.221726, 36.901707 ], [ 74.221664, 36.901314 ], [ 74.221525, 36.901026 ], [ 74.222001, 36.900651 ], [ 74.222421, 36.900202 ], [ 74.222421, 36.899562 ], [ 74.222559, 36.899076 ], [ 74.222534, 36.898773 ], [ 74.222732, 36.898077 ], [ 74.223381, 36.89717 ], [ 74.223558, 36.896831 ], [ 74.223867, 36.896748 ], [ 74.224308, 36.896758 ], [ 74.224593, 36.896846 ], [ 74.225057, 36.896813 ], [ 74.225422, 36.896848 ], [ 74.225731, 36.896811 ], [ 74.226208, 36.896436 ], [ 74.226921, 36.896235 ], [ 74.227842, 36.896137 ], [ 74.228262, 36.896201 ], [ 74.228466, 36.896426 ], [ 74.228715, 36.896554 ], [ 74.228927, 36.896764 ], [ 74.229418, 36.8967 ], [ 74.230298, 36.896456 ], [ 74.230795, 36.896372 ], [ 74.231645, 36.896018 ], [ 74.231864, 36.896042 ], [ 74.233136, 36.895931 ], [ 74.234488, 36.89594 ], [ 74.23472, 36.89575 ], [ 74.234983, 36.895676 ], [ 74.235122, 36.895536 ], [ 74.235699, 36.895654 ], [ 74.236026, 36.895594 ], [ 74.236396, 36.895392 ], [ 74.236757, 36.89507 ], [ 74.237211, 36.894872 ], [ 74.238187, 36.894847 ], [ 74.239359, 36.894889 ], [ 74.239721, 36.894784 ], [ 74.240582, 36.894819 ], [ 74.24113, 36.894956 ], [ 74.241673, 36.895208 ], [ 74.242228, 36.895395 ], [ 74.242834, 36.895701 ], [ 74.243103, 36.895709 ], [ 74.243465, 36.896034 ], [ 74.244085, 36.896733 ], [ 74.244226, 36.897496 ], [ 74.244234, 36.89791 ], [ 74.24438, 36.898223 ], [ 74.244918, 36.898797 ], [ 74.245401, 36.899003 ], [ 74.246741, 36.899053 ], [ 74.247328, 36.899119 ], [ 74.248212, 36.899104 ], [ 74.248972, 36.899029 ], [ 74.25032, 36.899065 ], [ 74.251647, 36.899366 ], [ 74.25206, 36.899278 ], [ 74.252825, 36.899471 ], [ 74.253796, 36.899646 ], [ 74.254489, 36.899711 ], [ 74.255408, 36.899607 ], [ 74.256483, 36.899897 ], [ 74.257093, 36.899965 ], [ 74.257628, 36.900354 ], [ 74.258029, 36.900562 ], [ 74.258281, 36.90083 ], [ 74.259429, 36.901728 ], [ 74.260232, 36.901933 ], [ 74.261071, 36.902267 ], [ 74.261638, 36.902394 ], [ 74.262094, 36.902586 ], [ 74.262752, 36.902779 ], [ 74.263265, 36.903006 ], [ 74.263724, 36.903383 ], [ 74.265091, 36.904042 ], [ 74.265634, 36.90425 ], [ 74.265944, 36.904469 ], [ 74.266052, 36.904776 ], [ 74.266238, 36.905017 ], [ 74.266736, 36.905362 ], [ 74.266972, 36.905914 ], [ 74.267743, 36.906945 ], [ 74.267816, 36.907335 ], [ 74.267977, 36.907703 ], [ 74.268239, 36.907879 ], [ 74.26839, 36.90855 ], [ 74.268634, 36.908832 ], [ 74.268833, 36.909167 ], [ 74.268855, 36.909547 ], [ 74.270149, 36.911693 ], [ 74.27078, 36.912301 ], [ 74.271082, 36.912451 ], [ 74.272108, 36.91218 ], [ 74.273351, 36.91201 ], [ 74.273657, 36.911878 ], [ 74.273958, 36.91181 ], [ 74.274266, 36.911894 ], [ 74.274921, 36.911781 ], [ 74.275181, 36.91165 ], [ 74.276122, 36.911542 ], [ 74.276762, 36.911246 ], [ 74.277314, 36.9111 ], [ 74.277647, 36.911148 ], [ 74.278694, 36.911168 ], [ 74.280146, 36.911069 ], [ 74.28051, 36.911143 ], [ 74.280666, 36.911492 ], [ 74.280984, 36.911786 ], [ 74.281314, 36.911906 ], [ 74.282665, 36.912209 ], [ 74.283089, 36.912247 ], [ 74.283604, 36.912479 ], [ 74.284278, 36.912689 ], [ 74.284504, 36.912949 ], [ 74.284941, 36.913074 ], [ 74.285264, 36.913085 ], [ 74.28567, 36.913011 ], [ 74.28631, 36.913272 ], [ 74.286777, 36.913545 ], [ 74.287453, 36.913678 ], [ 74.287791, 36.913661 ], [ 74.288445, 36.913541 ], [ 74.289119, 36.913539 ], [ 74.289438, 36.913494 ], [ 74.290185, 36.913069 ], [ 74.29045, 36.913001 ], [ 74.291042, 36.913085 ], [ 74.29221, 36.912987 ], [ 74.292944, 36.912814 ], [ 74.293908, 36.912491 ], [ 74.294409, 36.912418 ], [ 74.29454, 36.912337 ], [ 74.294881, 36.912415 ], [ 74.295869, 36.913073 ], [ 74.296113, 36.913528 ], [ 74.296603, 36.91397 ], [ 74.296913, 36.914535 ], [ 74.29774, 36.914909 ], [ 74.298162, 36.91528 ], [ 74.298577, 36.915454 ], [ 74.29945, 36.916294 ], [ 74.300373, 36.916509 ], [ 74.300399, 36.916728 ], [ 74.300544, 36.916952 ], [ 74.30089, 36.917132 ], [ 74.301265, 36.917204 ], [ 74.301558, 36.917407 ], [ 74.30206, 36.917552 ], [ 74.302719, 36.917668 ], [ 74.30307, 36.917822 ], [ 74.303559, 36.917918 ], [ 74.304174, 36.918132 ], [ 74.3058, 36.918571 ], [ 74.306612, 36.918852 ], [ 74.307126, 36.919213 ], [ 74.307289, 36.919247 ], [ 74.307434, 36.919041 ], [ 74.307893, 36.918906 ], [ 74.309291, 36.918906 ], [ 74.309859, 36.919417 ], [ 74.309907, 36.919678 ], [ 74.310121, 36.920106 ], [ 74.310436, 36.920561 ], [ 74.310686, 36.921546 ], [ 74.310682, 36.921918 ], [ 74.310871, 36.922383 ], [ 74.311356, 36.92298 ], [ 74.311538, 36.923594 ], [ 74.311676, 36.923837 ], [ 74.311934, 36.924085 ], [ 74.312042, 36.924302 ], [ 74.311888, 36.924772 ], [ 74.312647, 36.925844 ], [ 74.312785, 36.925914 ], [ 74.313295, 36.92643 ], [ 74.313886, 36.92668 ], [ 74.31392, 36.927231 ], [ 74.31429, 36.927798 ], [ 74.314376, 36.928108 ], [ 74.314568, 36.928458 ], [ 74.314502, 36.929033 ], [ 74.314127, 36.929429 ], [ 74.314145, 36.929752 ], [ 74.314062, 36.930094 ], [ 74.31408, 36.930372 ], [ 74.314243, 36.930874 ], [ 74.314343, 36.931105 ], [ 74.314615, 36.931274 ], [ 74.314716, 36.931511 ], [ 74.31478, 36.931954 ], [ 74.314936, 36.932092 ], [ 74.315172, 36.932472 ], [ 74.315504, 36.933884 ], [ 74.316345, 36.934441 ], [ 74.316693, 36.934755 ], [ 74.317, 36.935135 ], [ 74.317292, 36.93576 ], [ 74.31695, 36.93615 ], [ 74.316905, 36.936843 ], [ 74.316649, 36.93737 ], [ 74.316448, 36.938015 ], [ 74.315913, 36.938305 ], [ 74.316668, 36.938571 ], [ 74.317434, 36.938943 ], [ 74.317868, 36.939229 ], [ 74.318296, 36.939234 ], [ 74.319117, 36.939378 ], [ 74.320228, 36.940181 ], [ 74.320773, 36.940439 ], [ 74.3213, 36.940375 ], [ 74.321875, 36.940526 ], [ 74.323595, 36.940666 ], [ 74.323933, 36.940861 ], [ 74.324432, 36.94091 ], [ 74.324926, 36.94107 ], [ 74.325378, 36.94116 ], [ 74.325537, 36.941394 ], [ 74.325744, 36.941541 ], [ 74.326023, 36.941651 ], [ 74.326276, 36.94188 ], [ 74.327129, 36.942351 ], [ 74.32744, 36.942448 ], [ 74.328341, 36.943007 ], [ 74.328793, 36.943187 ], [ 74.33029, 36.94406 ], [ 74.331219, 36.944376 ], [ 74.332126, 36.944915 ], [ 74.332695, 36.945003 ], [ 74.332929, 36.945165 ], [ 74.333055, 36.94545 ], [ 74.332884, 36.945814 ], [ 74.332896, 36.945985 ], [ 74.333458, 36.947201 ], [ 74.333466, 36.947827 ], [ 74.333598, 36.948091 ], [ 74.333654, 36.948376 ], [ 74.333638, 36.948789 ], [ 74.333377, 36.949298 ], [ 74.33333, 36.949556 ], [ 74.333065, 36.950136 ], [ 74.333175, 36.950366 ], [ 74.333363, 36.950485 ], [ 74.333676, 36.950505 ], [ 74.33403, 36.950587 ], [ 74.334617, 36.951246 ], [ 74.336057, 36.952068 ], [ 74.336507, 36.952406 ], [ 74.338278, 36.95348 ], [ 74.338723, 36.953929 ], [ 74.339214, 36.954286 ], [ 74.339386, 36.954777 ], [ 74.339933, 36.955207 ], [ 74.340833, 36.95554 ], [ 74.341697, 36.955657 ], [ 74.342749, 36.956154 ], [ 74.343366, 36.956577 ], [ 74.343892, 36.957189 ], [ 74.345013, 36.95789 ], [ 74.345745, 36.959499 ], [ 74.345864, 36.960186 ], [ 74.346029, 36.960481 ], [ 74.346363, 36.960529 ], [ 74.346705, 36.960734 ], [ 74.347112, 36.961087 ], [ 74.349341, 36.962186 ], [ 74.350169, 36.962302 ], [ 74.350803, 36.962059 ], [ 74.352314, 36.96177 ], [ 74.353535, 36.961674 ], [ 74.35484, 36.961799 ], [ 74.355438, 36.961983 ], [ 74.356215, 36.962128 ], [ 74.357131, 36.962478 ], [ 74.358095, 36.963042 ], [ 74.358306, 36.962946 ], [ 74.358453, 36.962746 ], [ 74.359052, 36.962464 ], [ 74.359603, 36.962396 ], [ 74.360174, 36.9621 ], [ 74.360816, 36.962059 ], [ 74.361351, 36.961974 ], [ 74.362188, 36.961993 ], [ 74.362848, 36.962491 ], [ 74.363707, 36.962845 ], [ 74.364175, 36.962906 ], [ 74.364877, 36.962867 ], [ 74.366655, 36.962982 ], [ 74.367713, 36.963369 ], [ 74.368293, 36.964303 ], [ 74.368884, 36.964891 ], [ 74.369276, 36.964979 ], [ 74.370953, 36.964557 ], [ 74.372035, 36.964346 ], [ 74.372796, 36.964265 ], [ 74.373914, 36.964226 ], [ 74.374421, 36.964127 ], [ 74.376451, 36.963564 ], [ 74.377788, 36.963377 ], [ 74.378784, 36.963367 ], [ 74.380075, 36.963227 ], [ 74.380947, 36.963329 ], [ 74.382558, 36.96327 ], [ 74.38332, 36.963405 ], [ 74.384774, 36.963509 ], [ 74.387375, 36.963851 ], [ 74.387638, 36.964026 ], [ 74.388036, 36.964049 ], [ 74.388375, 36.96437 ], [ 74.388881, 36.964654 ], [ 74.390594, 36.966076 ], [ 74.391403, 36.966465 ], [ 74.392205, 36.967173 ], [ 74.39426, 36.968412 ], [ 74.39443, 36.968726 ], [ 74.394155, 36.969446 ], [ 74.394319, 36.970508 ], [ 74.394425, 36.970935 ], [ 74.394749, 36.971246 ], [ 74.394656, 36.971767 ], [ 74.394777, 36.972032 ], [ 74.39518, 36.972629 ], [ 74.395223, 36.973125 ], [ 74.395311, 36.973441 ], [ 74.395642, 36.973521 ], [ 74.396061, 36.973534 ], [ 74.396536, 36.973491 ], [ 74.397104, 36.973611 ], [ 74.398051, 36.973986 ], [ 74.399042, 36.974175 ], [ 74.399884, 36.974168 ], [ 74.400637, 36.974228 ], [ 74.401726, 36.974214 ], [ 74.402398, 36.97411 ], [ 74.403324, 36.973852 ], [ 74.404308, 36.973716 ], [ 74.405716, 36.973312 ], [ 74.406006, 36.973629 ], [ 74.407209, 36.974028 ], [ 74.407605, 36.974383 ], [ 74.408152, 36.974513 ], [ 74.408563, 36.97454 ], [ 74.40922, 36.974681 ], [ 74.410165, 36.974706 ], [ 74.410995, 36.974784 ], [ 74.411934, 36.975085 ], [ 74.413732, 36.975273 ], [ 74.415585, 36.975017 ], [ 74.415238, 36.975521 ], [ 74.415096, 36.975821 ], [ 74.415236, 36.976242 ], [ 74.415635, 36.976738 ], [ 74.415781, 36.977221 ], [ 74.416426, 36.977703 ], [ 74.417627, 36.978907 ], [ 74.418118, 36.979692 ], [ 74.418723, 36.980289 ], [ 74.418346, 36.980684 ], [ 74.418282, 36.980925 ], [ 74.417822, 36.981278 ], [ 74.417677, 36.981655 ], [ 74.417708, 36.982154 ], [ 74.417806, 36.982506 ], [ 74.417801, 36.982788 ], [ 74.417659, 36.983261 ], [ 74.417787, 36.98355 ], [ 74.418068, 36.983792 ], [ 74.418152, 36.984224 ], [ 74.418356, 36.984659 ], [ 74.418751, 36.985186 ], [ 74.419368, 36.986254 ], [ 74.419755, 36.986579 ], [ 74.420176, 36.987409 ], [ 74.420629, 36.987843 ], [ 74.420928, 36.988535 ], [ 74.420848, 36.988805 ], [ 74.42043, 36.989054 ], [ 74.420032, 36.989503 ], [ 74.419719, 36.989745 ], [ 74.419512, 36.990026 ], [ 74.418426, 36.990907 ], [ 74.417227, 36.991637 ], [ 74.416514, 36.991934 ], [ 74.414811, 36.99282 ], [ 74.4143, 36.992945 ], [ 74.414037, 36.993198 ], [ 74.413695, 36.993248 ], [ 74.413876, 36.993431 ], [ 74.414198, 36.993564 ], [ 74.414324, 36.993803 ], [ 74.41473, 36.994239 ], [ 74.415612, 36.995396 ], [ 74.416358, 36.996159 ], [ 74.416933, 36.997446 ], [ 74.4175, 36.998206 ], [ 74.418115, 36.999362 ], [ 74.417498, 37.000095 ], [ 74.417391, 37.00045 ], [ 74.417147, 37.000963 ], [ 74.416897, 37.001668 ], [ 74.416971, 37.002241 ], [ 74.416807, 37.002999 ], [ 74.416919, 37.003723 ], [ 74.417282, 37.0041 ], [ 74.417655, 37.00487 ], [ 74.417903, 37.005987 ], [ 74.418631, 37.006539 ], [ 74.419163, 37.006878 ], [ 74.419329, 37.007322 ], [ 74.419929, 37.007582 ], [ 74.42054, 37.008019 ], [ 74.422183, 37.008734 ], [ 74.423524, 37.009802 ], [ 74.425982, 37.010774 ], [ 74.426558, 37.01115 ], [ 74.427167, 37.010665 ], [ 74.427328, 37.010177 ], [ 74.427748, 37.009511 ], [ 74.428194, 37.009088 ], [ 74.428564, 37.008576 ], [ 74.42879, 37.007852 ], [ 74.429411, 37.007344 ], [ 74.43031, 37.006879 ], [ 74.430851, 37.006765 ], [ 74.431378, 37.00652 ], [ 74.432192, 37.006282 ], [ 74.433002, 37.006102 ], [ 74.433632, 37.005772 ], [ 74.434439, 37.00558 ], [ 74.435509, 37.00593 ], [ 74.436597, 37.00586 ], [ 74.438294, 37.006014 ], [ 74.438826, 37.00579 ], [ 74.439868, 37.005256 ], [ 74.440343, 37.004738 ], [ 74.440817, 37.004355 ], [ 74.441249, 37.004092 ], [ 74.441746, 37.003586 ], [ 74.442214, 37.003302 ], [ 74.443585, 37.002892 ], [ 74.444205, 37.002555 ], [ 74.445036, 37.002384 ], [ 74.445499, 37.002127 ], [ 74.44597, 37.001983 ], [ 74.446502, 37.001886 ], [ 74.447731, 37.001821 ], [ 74.448246, 37.00188 ], [ 74.448957, 37.001871 ], [ 74.449431, 37.001912 ], [ 74.450495, 37.002107 ], [ 74.454512, 37.003829 ], [ 74.456176, 37.004214 ], [ 74.455988, 37.003645 ], [ 74.456177, 37.003342 ], [ 74.45642, 37.00259 ], [ 74.456772, 37.002318 ], [ 74.457085, 37.001756 ], [ 74.457225, 37.001641 ], [ 74.457395, 37.001588 ], [ 74.457726, 37.001176 ], [ 74.458052, 37.00111 ], [ 74.45831, 37.000884 ], [ 74.458481, 37.000815 ], [ 74.458928, 37.000819 ], [ 74.459407, 37.000597 ], [ 74.459453, 37.000509 ], [ 74.459403, 37.000305 ], [ 74.45954, 37.000222 ], [ 74.459588, 37.000117 ], [ 74.460071, 36.999889 ], [ 74.460155, 36.999806 ], [ 74.46018, 36.999658 ], [ 74.460295, 36.999538 ], [ 74.460554, 36.999379 ], [ 74.460692, 36.999213 ], [ 74.460898, 36.999102 ], [ 74.460991, 36.998986 ], [ 74.461573, 36.998857 ], [ 74.462181, 36.998781 ], [ 74.462845, 36.998797 ], [ 74.463339, 36.998716 ], [ 74.464453, 36.998857 ], [ 74.464793, 36.998731 ], [ 74.465079, 36.998259 ], [ 74.465835, 36.997582 ], [ 74.466034, 36.997312 ], [ 74.466336, 36.996531 ], [ 74.46665, 36.995871 ], [ 74.466881, 36.995517 ], [ 74.46711, 36.994939 ], [ 74.467657, 36.994286 ], [ 74.469161, 36.992831 ], [ 74.469763, 36.992392 ], [ 74.470577, 36.991593 ], [ 74.471149, 36.991104 ], [ 74.471387, 36.990636 ], [ 74.47235, 36.990284 ], [ 74.473589, 36.989683 ], [ 74.474103, 36.989597 ], [ 74.475512, 36.989249 ], [ 74.477061, 36.989237 ], [ 74.477476, 36.988903 ], [ 74.477536, 36.988561 ], [ 74.477805, 36.988327 ], [ 74.478928, 36.988167 ], [ 74.479654, 36.988296 ], [ 74.480381, 36.988252 ], [ 74.481696, 36.987669 ], [ 74.483828, 36.987108 ], [ 74.484514, 36.98683 ], [ 74.485255, 36.98667 ], [ 74.486076, 36.986666 ], [ 74.4877, 36.987025 ], [ 74.488938, 36.987754 ], [ 74.489464, 36.987893 ], [ 74.490161, 36.988002 ], [ 74.490711, 36.988181 ], [ 74.491484, 36.988002 ], [ 74.491945, 36.987689 ], [ 74.493041, 36.987216 ], [ 74.493727, 36.986639 ], [ 74.494194, 36.986433 ], [ 74.494399, 36.986141 ], [ 74.494462, 36.985767 ], [ 74.494865, 36.985242 ], [ 74.495417, 36.984785 ], [ 74.495523, 36.984263 ], [ 74.496646, 36.982811 ], [ 74.497917, 36.981937 ], [ 74.498222, 36.981531 ], [ 74.499811, 36.981032 ], [ 74.499829, 36.980366 ], [ 74.499687, 36.97968 ], [ 74.499459, 36.978984 ], [ 74.499497, 36.978563 ], [ 74.499333, 36.97797 ], [ 74.499459, 36.976833 ], [ 74.499358, 36.976165 ], [ 74.499783, 36.975807 ], [ 74.499884, 36.975566 ], [ 74.500176, 36.97529 ], [ 74.500705, 36.974189 ], [ 74.501046, 36.973611 ], [ 74.501385, 36.973288 ], [ 74.501967, 36.972807 ], [ 74.50361, 36.971687 ], [ 74.504158, 36.971383 ], [ 74.505154, 36.971068 ], [ 74.505915, 36.97063 ], [ 74.505789, 36.970176 ], [ 74.506014, 36.969785 ], [ 74.505789, 36.969272 ], [ 74.505835, 36.968749 ], [ 74.505732, 36.967559 ], [ 74.506271, 36.966017 ], [ 74.507104, 36.965629 ], [ 74.508881, 36.964688 ], [ 74.510079, 36.964412 ], [ 74.510522, 36.964249 ], [ 74.511201, 36.963902 ], [ 74.512018, 36.96376 ], [ 74.512702, 36.963476 ], [ 74.51361, 36.963444 ], [ 74.514878, 36.96355 ], [ 74.515841, 36.963756 ], [ 74.516619, 36.962736 ], [ 74.517316, 36.962113 ], [ 74.520508, 36.96022 ], [ 74.522092, 36.959441 ], [ 74.523348, 36.959505 ], [ 74.524689, 36.959445 ], [ 74.52623, 36.959634 ], [ 74.527146, 36.959416 ], [ 74.527981, 36.959334 ], [ 74.528681, 36.959366 ], [ 74.529457, 36.959116 ], [ 74.530335, 36.958498 ], [ 74.530877, 36.958049 ], [ 74.531432, 36.957814 ], [ 74.533234, 36.957225 ], [ 74.534055, 36.957221 ], [ 74.535915, 36.958307 ], [ 74.538939, 36.960281 ], [ 74.539267, 36.960953 ], [ 74.539834, 36.961753 ], [ 74.540011, 36.962567 ], [ 74.540648, 36.963233 ], [ 74.541054, 36.964139 ], [ 74.541139, 36.964619 ], [ 74.542785, 36.96549 ], [ 74.543046, 36.966479 ], [ 74.543524, 36.967085 ], [ 74.543462, 36.967637 ], [ 74.543555, 36.968448 ], [ 74.543396, 36.969119 ], [ 74.543616, 36.969874 ], [ 74.543513, 36.970535 ], [ 74.54364, 36.970996 ], [ 74.543312, 36.971488 ], [ 74.543359, 36.971874 ], [ 74.543499, 36.972294 ], [ 74.543927, 36.972763 ], [ 74.5432, 36.97315 ], [ 74.542529, 36.973609 ], [ 74.541488, 36.974066 ], [ 74.541127, 36.974438 ], [ 74.540505, 36.974729 ], [ 74.539788, 36.975153 ], [ 74.53885, 36.97624 ], [ 74.538108, 36.976789 ], [ 74.537841, 36.977156 ], [ 74.537315, 36.978098 ], [ 74.536912, 36.978451 ], [ 74.536316, 36.979139 ], [ 74.535525, 36.979766 ], [ 74.535727, 36.980238 ], [ 74.536497, 36.981084 ], [ 74.536746, 36.981726 ], [ 74.536995, 36.982151 ], [ 74.53738, 36.982596 ], [ 74.537799, 36.983983 ], [ 74.538138, 36.984691 ], [ 74.538801, 36.985753 ], [ 74.539083, 36.986815 ], [ 74.538219, 36.98787 ], [ 74.537552, 36.989783 ], [ 74.537279, 36.990323 ], [ 74.53717, 36.990881 ], [ 74.535537, 36.991615 ], [ 74.534708, 36.992215 ], [ 74.534405, 36.992569 ], [ 74.534022, 36.992746 ], [ 74.533391, 36.99293 ], [ 74.532861, 36.993019 ], [ 74.53205, 36.993267 ], [ 74.531442, 36.993684 ], [ 74.530988, 36.993861 ], [ 74.530583, 36.994165 ], [ 74.530223, 36.994574 ], [ 74.529379, 36.995187 ], [ 74.528915, 36.995467 ], [ 74.528587, 36.99586 ], [ 74.528424, 36.996202 ], [ 74.527244, 36.996894 ], [ 74.526745, 36.997461 ], [ 74.526539, 36.997912 ], [ 74.526523, 36.998274 ], [ 74.526296, 36.998784 ], [ 74.526327, 37.000106 ], [ 74.526254, 37.000872 ], [ 74.526299, 37.002315 ], [ 74.526157, 37.002811 ], [ 74.525844, 37.003054 ], [ 74.525619, 37.003643 ], [ 74.525449, 37.004312 ], [ 74.524014, 37.005126 ], [ 74.523689, 37.005461 ], [ 74.52292, 37.005804 ], [ 74.522238, 37.00621 ], [ 74.521489, 37.00656 ], [ 74.519538, 37.008225 ], [ 74.519424, 37.008548 ], [ 74.518706, 37.009725 ], [ 74.518175, 37.010095 ], [ 74.517649, 37.01034 ], [ 74.517267, 37.010663 ], [ 74.517105, 37.011151 ], [ 74.517643, 37.011938 ], [ 74.517806, 37.012439 ], [ 74.518119, 37.012972 ], [ 74.518168, 37.013795 ], [ 74.518281, 37.014384 ], [ 74.518692, 37.015304 ], [ 74.518966, 37.016945 ], [ 74.51893, 37.017367 ], [ 74.519382, 37.01746 ], [ 74.52005, 37.017495 ], [ 74.520856, 37.01772 ], [ 74.521547, 37.018054 ], [ 74.522385, 37.018357 ], [ 74.523383, 37.018428 ], [ 74.524153, 37.018645 ], [ 74.525252, 37.018874 ], [ 74.528794, 37.019919 ], [ 74.529774, 37.020256 ], [ 74.531143, 37.020996 ], [ 74.532869, 37.022192 ], [ 74.53345, 37.022423 ], [ 74.534065, 37.023178 ], [ 74.534198, 37.023791 ], [ 74.534819, 37.024456 ], [ 74.535339, 37.025129 ], [ 74.535561, 37.025521 ], [ 74.536078, 37.025567 ], [ 74.536331, 37.025513 ], [ 74.53826, 37.025509 ], [ 74.539389, 37.025458 ], [ 74.540241, 37.025367 ], [ 74.541293, 37.024968 ], [ 74.542124, 37.024744 ], [ 74.543337, 37.024561 ], [ 74.545479, 37.024519 ], [ 74.546255, 37.024647 ], [ 74.54702, 37.024846 ], [ 74.548124, 37.025035 ], [ 74.549548, 37.025481 ], [ 74.550539, 37.02614 ], [ 74.551155, 37.026619 ], [ 74.551697, 37.026926 ], [ 74.552421, 37.0277 ], [ 74.552599, 37.028316 ], [ 74.554188, 37.029889 ], [ 74.554953, 37.030313 ], [ 74.555448, 37.0305 ], [ 74.55601, 37.030549 ], [ 74.556501, 37.030384 ], [ 74.55811, 37.030015 ], [ 74.560236, 37.029691 ], [ 74.561323, 37.029814 ], [ 74.563296, 37.030595 ], [ 74.564626, 37.030852 ], [ 74.5653719, 37.030077 ], [ 74.567462, 37.029708 ], [ 74.5695511, 37.030199 ], [ 74.571764, 37.029585 ], [ 74.5729931, 37.029708 ], [ 74.5743449, 37.030937 ], [ 74.5801222, 37.030568 ], [ 74.5856539, 37.033641 ], [ 74.5882351, 37.03401 ], [ 74.5917998, 37.03487 ], [ 74.5941352, 37.036222 ], [ 74.5972081, 37.036099 ], [ 74.5992968, 37.037206 ], [ 74.6022481, 37.037329 ], [ 74.6054431, 37.040033 ], [ 74.6072669, 37.039642 ], [ 74.6108521, 37.042122 ], [ 74.6151541, 37.041754 ], [ 74.6185961, 37.044458 ], [ 74.620193, 37.044827 ], [ 74.624373, 37.047285 ], [ 74.6238809, 37.054168 ], [ 74.6234449, 37.05728 ], [ 74.622406, 37.059823 ], [ 74.625602, 37.061298 ], [ 74.6300272, 37.062404 ], [ 74.6356741, 37.066324 ], [ 74.640352, 37.067812 ], [ 74.6460061, 37.069533 ], [ 74.6515372, 37.06941 ], [ 74.6557769, 37.076308 ], [ 74.6590921, 37.078984 ], [ 74.6633369, 37.080774 ], [ 74.667951, 37.082416 ], [ 74.6747888, 37.083176 ], [ 74.690685, 37.084107 ], [ 74.6975261, 37.083977 ], [ 74.7019699, 37.082359 ], [ 74.7040129, 37.079845 ], [ 74.7062431, 37.076889 ], [ 74.7069919, 37.07452 ], [ 74.705895, 37.071259 ], [ 74.70572, 37.068592 ], [ 74.7072112, 37.065485 ], [ 74.710548, 37.062975 ], [ 74.7148061, 37.061208 ], [ 74.7188791, 37.059292 ], [ 74.7214751, 37.057077 ], [ 74.7214841, 37.05441 ], [ 74.7198349, 37.050703 ], [ 74.7176371, 37.045366 ], [ 74.7167281, 37.041216 ], [ 74.717482, 37.037366 ], [ 74.720074, 37.035891 ], [ 74.7232189, 37.034714 ], [ 74.7237841, 37.031901 ], [ 74.7245869, 37.029473 ], [ 74.7310709, 37.024304 ], [ 74.734587, 37.022682 ], [ 74.739209, 37.021655 ], [ 74.743826, 37.02211 ], [ 74.7493661, 37.022566 ], [ 74.754351, 37.023465 ], [ 74.7595199, 37.024661 ], [ 74.763769, 37.024818 ], [ 74.7676541, 37.023048 ], [ 74.771352, 37.022018 ], [ 74.7741229, 37.022023 ], [ 74.7757811, 37.023508 ], [ 74.7778061, 37.025882 ], [ 74.781311, 37.027517 ], [ 74.7859298, 37.027674 ], [ 74.7888851, 37.027976 ], [ 74.794419, 37.031096 ], [ 74.794599, 37.032874 ], [ 74.793299, 37.03539 ], [ 74.7916279, 37.038201 ], [ 74.7910642, 37.041607 ], [ 74.7923501, 37.04472 ], [ 74.795485, 37.046799 ], [ 74.7976979, 37.048729 ], [ 74.798986, 37.050805 ], [ 74.80157, 37.051994 ], [ 74.805633, 37.053186 ], [ 74.8104368, 37.053638 ], [ 74.8163498, 37.054091 ], [ 74.8211551, 37.054099 ], [ 74.8266959, 37.05544 ], [ 74.832791, 37.057374 ], [ 74.836669, 37.058713 ], [ 74.839072, 37.058568 ], [ 74.8411081, 37.05709 ], [ 74.8414822, 37.055313 ], [ 74.840935, 37.051757 ], [ 74.8407578, 37.047905 ], [ 74.841138, 37.04287 ], [ 74.8428098, 37.038428 ], [ 74.845408, 37.032951 ], [ 74.846155, 37.0291 ], [ 74.845791, 37.026434 ], [ 74.8433941, 37.023912 ], [ 74.8402621, 37.019909 ], [ 74.8398982, 37.017538 ], [ 74.8421212, 37.014431 ], [ 74.844711, 37.01236 ], [ 74.8480399, 37.010291 ], [ 74.8497089, 37.006738 ], [ 74.85223, 37.00212 ], [ 74.854269, 36.998123 ], [ 74.8576012, 36.993831 ], [ 74.8627891, 36.984653 ], [ 74.8639019, 36.981396 ], [ 74.8668622, 36.978288 ], [ 74.869637, 36.974884 ], [ 74.8722262, 36.972517 ], [ 74.8738912, 36.970001 ], [ 74.8738958, 36.967483 ], [ 74.8750079, 36.964521 ], [ 74.8775959, 36.96245 ], [ 74.8801829, 36.960527 ], [ 74.8812938, 36.95801 ], [ 74.8809281, 36.955936 ], [ 74.8811171, 36.95327 ], [ 74.882597, 36.951049 ], [ 74.8844449, 36.949422 ], [ 74.8857409, 36.946609 ], [ 74.8857449, 36.943942 ], [ 74.8855642, 36.941572 ], [ 74.8837231, 36.938904 ], [ 74.8837271, 36.936386 ], [ 74.8852049, 36.934906 ], [ 74.8883441, 36.933724 ], [ 74.8912961, 36.933578 ], [ 74.896277, 36.93462 ], [ 74.8986761, 36.934622 ], [ 74.9016299, 36.933439 ], [ 74.9040311, 36.931367 ], [ 74.9060629, 36.92974 ], [ 74.9082769, 36.929445 ], [ 74.9101219, 36.929743 ], [ 74.9119651, 36.931818 ], [ 74.913439, 36.9333 ], [ 74.916761, 36.933155 ], [ 74.920451, 36.93375 ], [ 74.9213708, 36.935824 ], [ 74.921, 36.938194 ], [ 74.9191511, 36.941303 ], [ 74.9163791, 36.944412 ], [ 74.916193, 36.946041 ], [ 74.918407, 36.946339 ], [ 74.9217301, 36.945601 ], [ 74.926714, 36.945011 ], [ 74.931881, 36.945459 ], [ 74.9324329, 36.946348 ], [ 74.930215, 36.95005 ], [ 74.9305822, 36.952865 ], [ 74.930026, 36.954938 ], [ 74.9263331, 36.957306 ], [ 74.9246699, 36.958934 ], [ 74.9232641, 36.962074 ], [ 74.9227072, 36.965036 ], [ 74.92252, 36.96785 ], [ 74.9210378, 36.972886 ], [ 74.9188199, 36.975254 ], [ 74.9169709, 36.977475 ], [ 74.9169698, 36.978512 ], [ 74.9189999, 36.978957 ], [ 74.9217701, 36.978959 ], [ 74.9245388, 36.979257 ], [ 74.928785, 36.979408 ], [ 74.9328451, 36.981484 ], [ 74.9352442, 36.983559 ], [ 74.9389349, 36.985487 ], [ 74.9439191, 36.987415 ], [ 74.9470579, 36.988157 ], [ 74.9514892, 36.9889 ], [ 74.9546291, 36.988012 ], [ 74.9581369, 36.987865 ], [ 74.9625682, 36.988756 ], [ 74.9664461, 36.990238 ], [ 74.9697682, 36.993053 ], [ 74.9712449, 36.995424 ], [ 74.973645, 36.996906 ], [ 74.9760458, 36.997202 ], [ 74.9775229, 36.996462 ], [ 74.9791861, 36.994389 ], [ 74.9797402, 36.992315 ], [ 74.981587, 36.990241 ], [ 74.9845418, 36.989501 ], [ 74.9884201, 36.989798 ], [ 74.992298, 36.990983 ], [ 74.9952518, 36.992613 ], [ 74.997099, 36.994687 ], [ 74.9989451, 36.997353 ], [ 74.9999254, 36.9979211 ], [ 75.002269, 36.999279 ], [ 75.004871, 37.001243 ], [ 75.007705, 37.00097 ], [ 75.0098581, 37.000152 ], [ 75.0147322, 37.003152 ], [ 75.0166762, 37.007128 ], [ 75.021295, 37.011571 ], [ 75.0264682, 37.014681 ], [ 75.0292459, 37.01624 ], [ 75.0355189, 37.015123 ], [ 75.039952, 37.014677 ], [ 75.0432769, 37.013491 ], [ 75.0430901, 37.011121 ], [ 75.043643, 37.007566 ], [ 75.0480739, 37.00475 ], [ 75.0530588, 37.003562 ], [ 75.060446, 37.002078 ], [ 75.0713429, 37.00222 ], [ 75.075962, 37.004142 ], [ 75.080479, 37.007671 ], [ 75.0851269, 37.008395 ], [ 75.0892079, 37.008392 ], [ 75.0931769, 37.009661 ], [ 75.098052, 37.010657 ], [ 75.105648, 37.011014 ], [ 75.1103201, 37.007967 ], [ 75.1145659, 37.006778 ], [ 75.11494, 37.010036 ], [ 75.116974, 37.011367 ], [ 75.1197449, 37.011513 ], [ 75.1254728, 37.012544 ], [ 75.127693, 37.014911 ], [ 75.128805, 37.017132 ], [ 75.128994, 37.019502 ], [ 75.130475, 37.02113 ], [ 75.132509, 37.022461 ], [ 75.1345448, 37.024532 ], [ 75.1376891, 37.026454 ], [ 75.140645, 37.026747 ], [ 75.1436021, 37.026891 ], [ 75.1465552, 37.025555 ], [ 75.1487681, 37.02333 ], [ 75.1506098, 37.020661 ], [ 75.152083, 37.018141 ], [ 75.1520779, 37.015771 ], [ 75.1572511, 37.016505 ], [ 75.1611308, 37.016648 ], [ 75.1638982, 37.015015 ], [ 75.166294, 37.012642 ], [ 75.168135, 37.009677 ], [ 75.1672069, 37.007456 ], [ 75.1657241, 37.005236 ], [ 75.1627649, 37.003463 ], [ 75.1594349, 37.000505 ], [ 75.158321, 36.99784 ], [ 75.1581259, 36.992952 ], [ 75.1594129, 36.990136 ], [ 75.1625482, 36.988206 ], [ 75.1658692, 36.98672 ], [ 75.1693748, 36.985826 ], [ 75.1734382, 36.986117 ], [ 75.1739879, 36.984635 ], [ 75.1754588, 36.98167 ], [ 75.1778539, 36.979592 ], [ 75.1815421, 36.977513 ], [ 75.1857851, 36.976025 ], [ 75.19221, 36.974688 ], [ 75.194995, 36.974278 ], [ 75.19856, 36.976476 ], [ 75.2024542, 36.975257 ], [ 75.2070668, 36.974361 ], [ 75.2113109, 36.973316 ], [ 75.2162911, 36.971826 ], [ 75.215916, 36.969605 ], [ 75.216092, 36.96679 ], [ 75.2179342, 36.965305 ], [ 75.221622, 36.963965 ], [ 75.2256799, 36.962773 ], [ 75.2299189, 36.960543 ], [ 75.233421, 36.959055 ], [ 75.236189, 36.958901 ], [ 75.2376679, 36.959639 ], [ 75.240441, 36.960818 ], [ 75.24284, 36.960517 ], [ 75.2480111, 36.961395 ], [ 75.2507842, 36.962722 ], [ 75.2518958, 36.964201 ], [ 75.2541131, 36.964493 ], [ 75.2574341, 36.964041 ], [ 75.260759, 36.964923 ], [ 75.264827, 36.96684 ], [ 75.267783, 36.967425 ], [ 75.269453, 36.969792 ], [ 75.270753, 36.972159 ], [ 75.2742601, 36.972003 ], [ 75.2786932, 36.972437 ], [ 75.281467, 36.973763 ], [ 75.285346, 36.974495 ], [ 75.2899619, 36.974483 ], [ 75.293469, 36.974327 ], [ 75.298262, 36.972389 ], [ 75.3015751, 36.969863 ], [ 75.30507, 36.966743 ], [ 75.3074629, 36.965107 ], [ 75.3106072, 36.966432 ], [ 75.313571, 36.969091 ], [ 75.315789, 36.969826 ], [ 75.3185491, 36.967596 ], [ 75.3202012, 36.965222 ], [ 75.321112, 36.962405 ], [ 75.3220249, 36.960032 ], [ 75.324236, 36.959138 ], [ 75.327187, 36.958537 ], [ 75.331615, 36.958228 ], [ 75.3351221, 36.95807 ], [ 75.3386249, 36.957172 ], [ 75.3421342, 36.957754 ], [ 75.3463778, 36.957298 ], [ 75.3517289, 36.956986 ], [ 75.35579, 36.957122 ], [ 75.3589271, 36.956816 ], [ 75.3611371, 36.95592 ], [ 75.363345, 36.954432 ], [ 75.365919, 36.952351 ], [ 75.3684919, 36.950121 ], [ 75.3714371, 36.948334 ], [ 75.3753049, 36.946841 ], [ 75.378811, 36.946681 ], [ 75.381763, 36.946672 ], [ 75.3854569, 36.947104 ], [ 75.3900779, 36.948571 ], [ 75.3939619, 36.950187 ], [ 75.393419, 36.952263 ], [ 75.3939839, 36.954483 ], [ 75.3962018, 36.955068 ], [ 75.3995239, 36.955057 ], [ 75.4017322, 36.953716 ], [ 75.4022722, 36.951196 ], [ 75.4044739, 36.948671 ], [ 75.4072351, 36.947328 ], [ 75.4096252, 36.945542 ], [ 75.4083169, 36.942584 ], [ 75.4077481, 36.939624 ], [ 75.4058632, 36.936584 ], [ 75.4037161, 36.9362 ], [ 75.4010809, 36.935661 ], [ 75.3976609, 36.934264 ], [ 75.3940591, 36.9333 ], [ 75.390728, 36.931386 ], [ 75.3883211, 36.929616 ], [ 75.387019, 36.927546 ], [ 75.387195, 36.925916 ], [ 75.389027, 36.923392 ], [ 75.3901229, 36.921315 ], [ 75.3906629, 36.918499 ], [ 75.390647, 36.915536 ], [ 75.3893381, 36.911985 ], [ 75.3876619, 36.90888 ], [ 75.3863558, 36.905922 ], [ 75.385606, 36.903406 ], [ 75.3867112, 36.903254 ], [ 75.3909502, 36.9025 ], [ 75.3944468, 36.901155 ], [ 75.3972041, 36.89922 ], [ 75.4005172, 36.897876 ], [ 75.4041949, 36.895908 ], [ 75.4071329, 36.893528 ], [ 75.409708, 36.892186 ], [ 75.41726, 36.89053 ], [ 75.4202048, 36.889483 ], [ 75.421858, 36.888144 ], [ 75.4225859, 36.886364 ], [ 75.422025, 36.885033 ], [ 75.420725, 36.883408 ], [ 75.4194218, 36.881191 ], [ 75.4199618, 36.878671 ], [ 75.4216099, 36.876591 ], [ 75.4228901, 36.874661 ], [ 75.423245, 36.872141 ], [ 75.4228552, 36.868291 ], [ 75.4235719, 36.864585 ], [ 75.4252042, 36.859691 ], [ 75.4270229, 36.855389 ], [ 75.4281828, 36.8504021 ], [ 75.4286456, 36.8503725 ], [ 75.428825, 36.847976 ], [ 75.4297132, 36.8419 ], [ 75.4298662, 36.836418 ], [ 75.4302071, 36.831381 ], [ 75.429265, 36.827829 ], [ 75.4277749, 36.824872 ], [ 75.4244392, 36.821476 ], [ 75.4233199, 36.818962 ], [ 75.4236698, 36.815554 ], [ 75.4238311, 36.811435 ], [ 75.4230589, 36.805069 ], [ 75.4223062, 36.802109 ], [ 75.420454, 36.800189 ], [ 75.420077, 36.798561 ], [ 75.4222781, 36.796924 ], [ 75.4250339, 36.795729 ], [ 75.426313, 36.793799 ], [ 75.4268461, 36.79039 ], [ 75.4253471, 36.785655 ], [ 75.4227472, 36.781665 ], [ 75.4214321, 36.777077 ], [ 75.42086, 36.773376 ], [ 75.4219469, 36.770113 ], [ 75.4250609, 36.767288 ], [ 75.4268969, 36.766244 ], [ 75.4279852, 36.763278 ], [ 75.4298111, 36.760605 ], [ 75.4320139, 36.75956 ], [ 75.4353248, 36.758955 ], [ 75.4345778, 36.757032 ], [ 75.4345609, 36.75407 ], [ 75.4347301, 36.751403 ], [ 75.436191, 36.749324 ], [ 75.4383899, 36.747686 ], [ 75.4407799, 36.747085 ], [ 75.443535, 36.746037 ], [ 75.4448141, 36.744403 ], [ 75.4448011, 36.742181 ], [ 75.446442, 36.739509 ], [ 75.4478971, 36.736393 ], [ 75.4499009, 36.732978 ], [ 75.450803, 36.729864 ], [ 75.4513351, 36.726307 ], [ 75.452058, 36.72423 ], [ 75.4546241, 36.722443 ], [ 75.4599521, 36.720941 ], [ 75.461782, 36.719304 ], [ 75.464347, 36.717517 ], [ 75.4669181, 36.716618 ], [ 75.469865, 36.717199 ], [ 75.4713461, 36.718674 ], [ 75.47265, 36.721187 ], [ 75.475057, 36.723696 ], [ 75.47764, 36.724723 ], [ 75.4828081, 36.72722 ], [ 75.4868452, 36.72898 ], [ 75.489057, 36.731427 ], [ 75.4913171, 36.734147 ], [ 75.495011, 36.736206 ], [ 75.497783, 36.737824 ], [ 75.4992641, 36.739151 ], [ 75.5007329, 36.7387 ], [ 75.50293, 36.736913 ], [ 75.5049391, 36.734535 ], [ 75.5073029, 36.730229 ], [ 75.510778, 36.726955 ], [ 75.514991, 36.723974 ], [ 75.519396, 36.722326 ], [ 75.5230691, 36.721273 ], [ 75.527298, 36.72081 ], [ 75.530241, 36.720648 ], [ 75.5324539, 36.721379 ], [ 75.5339422, 36.723595 ], [ 75.5356241, 36.72729 ], [ 75.536752, 36.73084 ], [ 75.5373211, 36.733208 ], [ 75.5371591, 36.736319 ], [ 75.5362591, 36.739286 ], [ 75.5366429, 36.741506 ], [ 75.536654, 36.743136 ], [ 75.534826, 36.744922 ], [ 75.5321029, 36.750415 ], [ 75.531011, 36.752345 ], [ 75.529359, 36.752945 ], [ 75.5277149, 36.754878 ], [ 75.5273581, 36.756509 ], [ 75.5288431, 36.75828 ], [ 75.530875, 36.759308 ], [ 75.5330951, 36.760779 ], [ 75.5338432, 36.762554 ], [ 75.533305, 36.764482 ], [ 75.5331379, 36.767001 ], [ 75.5331592, 36.770111 ], [ 75.5339051, 36.771441 ], [ 75.5359319, 36.77158 ], [ 75.53961, 36.770971 ], [ 75.543844, 36.770804 ], [ 75.549551, 36.770777 ], [ 75.5543419, 36.7712 ], [ 75.5589521, 36.772215 ], [ 75.5630129, 36.773529 ], [ 75.5670712, 36.774547 ], [ 75.568172, 36.773949 ], [ 75.5685202, 36.771281 ], [ 75.5685029, 36.768911 ], [ 75.5701492, 36.767422 ], [ 75.5736412, 36.766664 ], [ 75.577694, 36.766941 ], [ 75.5823038, 36.767807 ], [ 75.5872819, 36.768672 ], [ 75.592067, 36.7685 ], [ 75.6027472, 36.768594 ], [ 75.6055091, 36.76858 ], [ 75.6091901, 36.768413 ], [ 75.6130568, 36.768393 ], [ 75.6167422, 36.768819 ], [ 75.6213458, 36.768943 ], [ 75.6261248, 36.767881 ], [ 75.629435, 36.767419 ], [ 75.632936, 36.767697 ], [ 75.6357059, 36.768719 ], [ 75.6373748, 36.770191 ], [ 75.6403229, 36.770324 ], [ 75.6425272, 36.769719 ], [ 75.6452729, 36.767779 ], [ 75.648213, 36.76717 ], [ 75.6515318, 36.767745 ], [ 75.654477, 36.76758 ], [ 75.6579668, 36.766672 ], [ 75.6621889, 36.765167 ], [ 75.6658688, 36.764851 ], [ 75.6699188, 36.764828 ], [ 75.673418, 36.764956 ], [ 75.6758041, 36.764054 ], [ 75.6857099, 36.759998 ], [ 75.6893768, 36.758347 ], [ 75.6933908, 36.754324 ], [ 75.6950231, 36.751648 ], [ 75.6962881, 36.748975 ], [ 75.6981101, 36.74689 ], [ 75.7001329, 36.74673 ], [ 75.7028948, 36.746862 ], [ 75.70584, 36.746845 ], [ 75.7113631, 36.74696 ], [ 75.714687, 36.748125 ], [ 75.7172819, 36.750035 ], [ 75.7195099, 36.752095 ], [ 75.7217189, 36.752082 ], [ 75.7241039, 36.751179 ], [ 75.7268489, 36.749533 ], [ 75.7307009, 36.748028 ], [ 75.7334419, 36.745937 ], [ 75.7382011, 36.743093 ], [ 75.7422349, 36.741587 ], [ 75.7468192, 36.73978 ], [ 75.7506539, 36.736646 ], [ 75.7565669, 36.731491 ], [ 75.763292, 36.727332 ], [ 75.7658138, 36.724879 ], [ 75.7684069, 36.724879 ], [ 75.7702991, 36.724179 ], [ 75.7759741, 36.721306 ], [ 75.7841029, 36.718713 ], [ 75.792371, 36.714789 ], [ 75.7941232, 36.712057 ], [ 75.803792, 36.710235 ], [ 75.809147, 36.700318 ], [ 75.8107991, 36.697622 ], [ 75.8170361, 36.696922 ], [ 75.8218, 36.693979 ], [ 75.826075, 36.692507 ], [ 75.8314739, 36.684592 ], [ 75.8346059, 36.682345 ], [ 75.8389291, 36.680726 ], [ 75.844404, 36.676238 ], [ 75.8487161, 36.673665 ], [ 75.854637, 36.67394 ], [ 75.859744, 36.671996 ], [ 75.864847, 36.669735 ], [ 75.868753, 36.666211 ], [ 75.8714681, 36.662059 ], [ 75.872984, 36.656645 ], [ 75.8792228, 36.650243 ], [ 75.8827321, 36.646722 ], [ 75.8850548, 36.642891 ], [ 75.888166, 36.639054 ], [ 75.8928679, 36.636476 ], [ 75.89876, 36.634525 ], [ 75.9054409, 36.632568 ], [ 75.911314, 36.629027 ], [ 75.9148139, 36.624869 ], [ 75.9190792, 36.618798 ], [ 75.924545, 36.614306 ], [ 75.928441, 36.610462 ], [ 75.9315251, 36.604717 ], [ 75.9363412, 36.6011622 ], [ 75.939002, 36.6010933 ], [ 75.945096, 36.6029193 ], [ 75.9423923, 36.6000253 ], [ 75.9394741, 36.598027 ], [ 75.9406328, 36.5928932 ], [ 75.938487, 36.5861394 ], [ 75.9350538, 36.581246 ], [ 75.9257841, 36.5730437 ], [ 75.9242228, 36.56865 ], [ 75.9259688, 36.564659 ], [ 75.9330799, 36.55954 ], [ 75.9397601, 36.555871 ], [ 75.9446071, 36.548961 ], [ 75.9481088, 36.542062 ], [ 75.9526061, 36.5372951 ], [ 75.9574985, 36.5360537 ], [ 75.9635066, 36.5309503 ], [ 75.9644521, 36.522764 ], [ 75.970643, 36.516204 ], [ 75.9768559, 36.511451 ], [ 75.9821911, 36.508153 ], [ 75.9874928, 36.502322 ], [ 75.9901021, 36.496153 ], [ 75.9931492, 36.489256 ], [ 75.9980541, 36.484496 ], [ 75.9989764, 36.4854585 ], [ 75.9992557, 36.4858865 ], [ 76.0020305, 36.486596 ], [ 76.0211657, 36.4862441 ], [ 76.0233892, 36.4858014 ], [ 76.0258665, 36.4860462 ], [ 76.0305941, 36.4845212 ], [ 76.0400415, 36.4834441 ], [ 76.0425696, 36.4819091 ], [ 76.0481798, 36.48087 ], [ 76.0531173, 36.4801655 ], [ 76.0536729, 36.4804023 ], [ 76.054219, 36.4799527 ], [ 76.0542209, 36.4794952 ], [ 76.0561438, 36.4790677 ], [ 76.0605893, 36.4790919 ], [ 76.0644932, 36.4777536 ], [ 76.0692272, 36.4775464 ], [ 76.0725759, 36.4757962 ], [ 76.0728334, 36.4753355 ], [ 76.0772885, 36.474274 ], [ 76.0778562, 36.4735959 ], [ 76.0809305, 36.4715792 ], [ 76.0839903, 36.4695756 ], [ 76.0845567, 36.4695793 ], [ 76.0887322, 36.465573 ], [ 76.0898651, 36.465576 ], [ 76.0934994, 36.4623604 ], [ 76.0952536, 36.4615743 ], [ 76.0972415, 36.4596405 ], [ 76.100336, 36.4571752 ], [ 76.1068586, 36.4510047 ], [ 76.1102523, 36.4485458 ], [ 76.1136604, 36.4455802 ], [ 76.119225, 36.4423844 ], [ 76.1220073, 36.4401718 ], [ 76.1251036, 36.4374592 ], [ 76.1303857, 36.431529 ], [ 76.1350285, 36.4265892 ], [ 76.1381352, 36.4236297 ], [ 76.1437156, 36.4179477 ], [ 76.1477574, 36.4132632 ], [ 76.1508528, 36.4100428 ], [ 76.1545695, 36.4055977 ], [ 76.1595232, 36.4019065 ], [ 76.1672661, 36.3947408 ], [ 76.1731349, 36.390302 ], [ 76.1777571, 36.388097 ], [ 76.1805262, 36.3873635 ], [ 76.1836003, 36.3876283 ], [ 76.1866608, 36.3881351 ], [ 76.1918687, 36.388406 ], [ 76.194629, 36.3886772 ], [ 76.1986356, 36.3874455 ], [ 76.202336, 36.384991 ], [ 76.2073676, 36.3814704 ], [ 76.2101611, 36.3783228 ], [ 76.2121165, 36.3767589 ], [ 76.2132499, 36.3763033 ], [ 76.2149141, 36.3756529 ], [ 76.2171251, 36.3736592 ], [ 76.2193844, 36.3702933 ], [ 76.2202047, 36.3700688 ], [ 76.2207711, 36.3696413 ], [ 76.2249117, 36.366177 ], [ 76.2254666, 36.3661756 ], [ 76.2283104, 36.3630735 ], [ 76.2291334, 36.3628534 ], [ 76.2308405, 36.3611492 ], [ 76.2316612, 36.3604938 ], [ 76.234171, 36.3595967 ], [ 76.2358442, 36.3579096 ], [ 76.238626, 36.3555778 ], [ 76.2408582, 36.3549349 ], [ 76.2414245, 36.3542515 ], [ 76.2436563, 36.3526931 ], [ 76.246956, 36.3518128 ], [ 76.2472426, 36.3513657 ], [ 76.2483544, 36.3504562 ], [ 76.251129, 36.350691 ], [ 76.2525284, 36.3491324 ], [ 76.2547611, 36.3477937 ], [ 76.2688918, 36.347195 ], [ 76.2800763, 36.3483857 ], [ 76.2844636, 36.3483357 ], [ 76.2878426, 36.3489194 ], [ 76.2921421, 36.3490963 ], [ 76.2930427, 36.3497213 ], [ 76.2954478, 36.3502303 ], [ 76.2973903, 36.3504645 ], [ 76.2995766, 36.3518214 ], [ 76.3017946, 36.3522859 ], [ 76.3026379, 36.3522859 ], [ 76.3037267, 36.3531841 ], [ 76.3111839, 36.3563399 ], [ 76.3151961, 36.3576007 ], [ 76.3241353, 36.361788 ], [ 76.3282402, 36.3625073 ], [ 76.3407629, 36.3625195 ], [ 76.3438043, 36.362754 ], [ 76.352408, 36.3598739 ], [ 76.360787, 36.3534165 ], [ 76.36547, 36.3514051 ], [ 76.369133, 36.3476176 ], [ 76.3746616, 36.3456055 ], [ 76.3749487, 36.3449518 ], [ 76.3760461, 36.3447233 ], [ 76.3782424, 36.3418609 ], [ 76.379976, 36.3395902 ], [ 76.3826094, 36.3374548 ], [ 76.3833979, 36.3372558 ], [ 76.3859177, 36.3347634 ], [ 76.3867034, 36.3345643 ], [ 76.3888092, 36.33218 ], [ 76.3893757, 36.3317205 ], [ 76.3931122, 36.3286339 ], [ 76.397262, 36.3264174 ], [ 76.4011526, 36.3215115 ], [ 76.4022868, 36.3215125 ], [ 76.4042391, 36.3194928 ], [ 76.4058207, 36.3191125 ], [ 76.4081329, 36.3181638 ], [ 76.4114733, 36.3159167 ], [ 76.4123135, 36.3150364 ], [ 76.4131343, 36.3150354 ], [ 76.4142342, 36.3143623 ], [ 76.4203467, 36.3132808 ], [ 76.4209126, 36.3128346 ], [ 76.4217334, 36.3128335 ], [ 76.4250617, 36.3110437 ], [ 76.4253469, 36.3106142 ], [ 76.4281337, 36.3101732 ], [ 76.4284225, 36.3097168 ], [ 76.430339, 36.3083782 ], [ 76.432004, 36.308161 ], [ 76.4340718, 36.301713 ], [ 76.4365607, 36.2884371 ], [ 76.4402083, 36.2830488 ], [ 76.4455287, 36.2781434 ], [ 76.4494513, 36.2716426 ], [ 76.4500366, 36.2694054 ], [ 76.448371, 36.2662784 ], [ 76.4478027, 36.2662802 ], [ 76.4464383, 36.2646991 ], [ 76.4456306, 36.2644671 ], [ 76.4450753, 36.2637869 ], [ 76.4431343, 36.2630963 ], [ 76.4423249, 36.2630977 ], [ 76.4415142, 36.2624301 ], [ 76.4384626, 36.2594945 ], [ 76.4381956, 36.2588156 ], [ 76.4376302, 36.258813 ], [ 76.4367977, 36.2576916 ], [ 76.4357223, 36.257692 ], [ 76.4324252, 36.252071 ], [ 76.4332462, 36.251163 ], [ 76.4371347, 36.248944 ], [ 76.4382654, 36.2489448 ], [ 76.4391104, 36.2489531 ], [ 76.4409971, 36.2479995 ], [ 76.4440958, 36.2471919 ], [ 76.4449401, 36.2465088 ], [ 76.4457602, 36.2465166 ], [ 76.4496197, 36.2449477 ], [ 76.4512858, 36.2439536 ], [ 76.4540839, 36.2418422 ], [ 76.4560238, 36.2413969 ], [ 76.4560356, 36.2404812 ], [ 76.4571327, 36.2404901 ], [ 76.4579865, 36.2391426 ], [ 76.464666, 36.2326741 ], [ 76.4739403, 36.2211167 ], [ 76.4748767, 36.219416 ], [ 76.479193, 36.2138639 ], [ 76.4817068, 36.2114093 ], [ 76.4885182, 36.21064 ], [ 76.4890837, 36.21018 ], [ 76.4897213, 36.2100761 ], [ 76.4933236, 36.2098749 ], [ 76.4983097, 36.2085475 ], [ 76.4985869, 36.2080906 ], [ 76.5046696, 36.2072252 ], [ 76.5057888, 36.2067717 ], [ 76.5066195, 36.2058814 ], [ 76.5092062, 36.2041866 ], [ 76.510338, 36.2035043 ], [ 76.5111898, 36.203279 ], [ 76.5117532, 36.2026122 ], [ 76.5127316, 36.202322 ], [ 76.5132965, 36.2023289 ], [ 76.5152263, 36.2002796 ], [ 76.5188259, 36.1989732 ], [ 76.5191141, 36.1985164 ], [ 76.521053, 36.1985238 ], [ 76.525947, 36.1977326 ], [ 76.5278837, 36.1970842 ], [ 76.5355953, 36.1960078 ], [ 76.536127, 36.1955558 ], [ 76.536832, 36.1954172 ], [ 76.537962, 36.1954262 ], [ 76.5407178, 36.193887 ], [ 76.5421042, 36.1936586 ], [ 76.5423812, 36.1932016 ], [ 76.5448627, 36.192757 ], [ 76.5492939, 36.1886644 ], [ 76.549859, 36.1886621 ], [ 76.5504016, 36.1877568 ], [ 76.5525736, 36.1859093 ], [ 76.5537614, 36.1853716 ], [ 76.5561203, 36.1809995 ], [ 76.558247, 36.1768787 ], [ 76.5629732, 36.1730653 ], [ 76.58098, 36.1681887 ], [ 76.5870432, 36.1679756 ], [ 76.587896, 36.1675163 ], [ 76.5950833, 36.1661933 ], [ 76.595626, 36.1657323 ], [ 76.6011647, 36.1655489 ], [ 76.6025607, 36.1660028 ], [ 76.6039283, 36.16779 ], [ 76.6088878, 36.1695799 ], [ 76.6099739, 36.1704948 ], [ 76.6149674, 36.1732013 ], [ 76.6160545, 36.1734336 ], [ 76.6171434, 36.1745416 ], [ 76.619074, 36.176124 ], [ 76.6201723, 36.1763519 ], [ 76.6204495, 36.1768109 ], [ 76.6218247, 36.1770442 ], [ 76.6226664, 36.1770516 ], [ 76.6254321, 36.1790588 ], [ 76.6306755, 36.1806424 ], [ 76.6320534, 36.1815359 ], [ 76.6330663, 36.1816587 ], [ 76.6335913, 36.1825446 ], [ 76.6364484, 36.184468 ], [ 76.6372798, 36.1849242 ], [ 76.6422578, 36.1847106 ], [ 76.6444494, 36.1840299 ], [ 76.6481047, 36.1746207 ], [ 76.6647957, 36.1580606 ], [ 76.6675811, 36.1562682 ], [ 76.6680094, 36.1559216 ], [ 76.6814672, 36.1455307 ], [ 76.6847905, 36.1441704 ], [ 76.685975, 36.1432364 ], [ 76.6887853, 36.140941 ], [ 76.6917194, 36.138576 ], [ 76.6933817, 36.1383472 ], [ 76.6961771, 36.1358897 ], [ 76.6972733, 36.1358971 ], [ 76.6975582, 36.1352333 ], [ 76.6981118, 36.1352393 ], [ 76.7005988, 36.1330049 ], [ 76.701139, 36.1323235 ], [ 76.7019848, 36.1300668 ], [ 76.703736, 36.1288604 ], [ 76.7064454, 36.1251478 ], [ 76.7070871, 36.1225728 ], [ 76.7070667, 36.1148242 ], [ 76.7067887, 36.1139071 ], [ 76.7087305, 36.1074172 ], [ 76.7129234, 36.0993481 ], [ 76.7132187, 36.0975478 ], [ 76.7129397, 36.0968553 ], [ 76.7168607, 36.0872442 ], [ 76.7196277, 36.0832085 ], [ 76.7213196, 36.0823015 ], [ 76.7215743, 36.0816235 ], [ 76.7224235, 36.0809567 ], [ 76.7240819, 36.0807364 ], [ 76.7260034, 36.0784771 ], [ 76.7294524, 36.0776661 ], [ 76.7306665, 36.0770106 ], [ 76.7320723, 36.0770101 ], [ 76.7387329, 36.0744848 ], [ 76.7395738, 36.0744961 ], [ 76.7451192, 36.070211 ], [ 76.7510229, 36.0680079 ], [ 76.7542349, 36.0672414 ], [ 76.7582522, 36.0653981 ], [ 76.7592081, 36.0650565 ], [ 76.7603257, 36.0650639 ], [ 76.7669701, 36.0623799 ], [ 76.7720032, 36.0603081 ], [ 76.7745085, 36.0587868 ], [ 76.7749821, 36.0583777 ], [ 76.7797026, 36.0565874 ], [ 76.7805495, 36.0556956 ], [ 76.7819311, 36.0545755 ], [ 76.7824954, 36.054577 ], [ 76.7841543, 36.0541225 ], [ 76.7847158, 36.0534365 ], [ 76.7855319, 36.0525531 ], [ 76.788563, 36.052097 ], [ 76.789968, 36.0514221 ], [ 76.7976975, 36.0496465 ], [ 76.8007285, 36.0489926 ], [ 76.8018529, 36.0478586 ], [ 76.8024012, 36.046058 ], [ 76.8011953, 36.0445666 ], [ 76.8009148, 36.0439099 ], [ 76.8004731, 36.0433851 ], [ 76.7991064, 36.0418052 ], [ 76.7988386, 36.038426 ], [ 76.8010756, 36.0328193 ], [ 76.8085979, 36.0204708 ], [ 76.8077633, 36.0186625 ], [ 76.8061057, 36.0171132 ], [ 76.8049865, 36.0168814 ], [ 76.7831929, 36.0157056 ], [ 76.7785232, 36.0137855 ], [ 76.7777045, 36.0137883 ], [ 76.7770145, 36.0131463 ], [ 76.7732838, 36.0116749 ], [ 76.7727305, 36.0109951 ], [ 76.7702662, 36.0094348 ], [ 76.7697019, 36.0094378 ], [ 76.769146, 36.0087534 ], [ 76.7682293, 36.0080173 ], [ 76.7656342, 36.0047289 ], [ 76.7543437, 35.9900789 ], [ 76.7535311, 35.9885087 ], [ 76.7529803, 35.9864806 ], [ 76.7546209, 35.9833249 ], [ 76.7543408, 35.9826725 ], [ 76.7419997, 35.970967 ], [ 76.74119, 35.970763 ], [ 76.7356596, 35.9671217 ], [ 76.7340089, 35.9664524 ], [ 76.7301581, 35.9628651 ], [ 76.7290855, 35.9628673 ], [ 76.7282519, 35.9619526 ], [ 76.7235655, 35.9558907 ], [ 76.7227707, 35.9534305 ], [ 76.7269165, 35.9487084 ], [ 76.7294204, 35.9466881 ], [ 76.730515, 35.9466863 ], [ 76.7338666, 35.9433334 ], [ 76.7349601, 35.942882 ], [ 76.7404964, 35.9348143 ], [ 76.7409668, 35.9344051 ], [ 76.7418189, 35.9341785 ], [ 76.7466871, 35.9290736 ], [ 76.7527243, 35.9211179 ], [ 76.7560447, 35.918429 ], [ 76.7577006, 35.9182082 ], [ 76.76572, 35.909682 ], [ 76.7716873, 35.9044212 ], [ 76.7733525, 35.9030765 ], [ 76.7790269, 35.8986775 ], [ 76.7856816, 35.8899445 ], [ 76.7901132, 35.8761161 ], [ 76.7912901, 35.8701895 ], [ 76.7940692, 35.8627682 ], [ 76.7988067, 35.8558145 ], [ 76.8015596, 35.8535587 ], [ 76.8026751, 35.8535659 ], [ 76.8037794, 35.8504117 ], [ 76.804319, 35.8499766 ], [ 76.8059747, 35.849526 ], [ 76.806814, 35.8495325 ], [ 76.8076369, 35.847749 ], [ 76.8117921, 35.8448039 ], [ 76.8134471, 35.8443757 ], [ 76.8151023, 35.843943 ], [ 76.8153772, 35.8434894 ], [ 76.816025, 35.8433305 ], [ 76.8171493, 35.8424204 ], [ 76.8202911, 35.8413539 ], [ 76.8232373, 35.8399646 ], [ 76.8246077, 35.839738 ], [ 76.8250614, 35.8392112 ], [ 76.8267161, 35.8380904 ], [ 76.8294723, 35.8369762 ], [ 76.8308426, 35.836754 ], [ 76.8314047, 35.8362967 ], [ 76.8366701, 35.8354082 ], [ 76.8380468, 35.8347499 ], [ 76.8385867, 35.8342966 ], [ 76.8429827, 35.8340935 ], [ 76.8441268, 35.833957 ], [ 76.8452189, 35.8335048 ], [ 76.8534623, 35.83276 ], [ 76.8540243, 35.8323026 ], [ 76.857888, 35.8311631 ], [ 76.8620522, 35.8280234 ], [ 76.8637036, 35.8269022 ], [ 76.8647968, 35.8269085 ], [ 76.8653581, 35.8264735 ], [ 76.8697121, 35.8222307 ], [ 76.8758686, 35.8152501 ], [ 76.8763513, 35.8148586 ], [ 76.8771987, 35.8141544 ], [ 76.8847263, 35.8073779 ], [ 76.8855331, 35.8071496 ], [ 76.8913442, 35.8026624 ], [ 76.8930046, 35.8010821 ], [ 76.8949429, 35.7997362 ], [ 76.900466, 35.7975057 ], [ 76.9027736, 35.7955636 ], [ 76.9036657, 35.7953412 ], [ 76.9095839, 35.7914398 ], [ 76.9178516, 35.7897569 ], [ 76.9190813, 35.7891897 ], [ 76.9288582, 35.7874161 ], [ 76.9313253, 35.7860927 ], [ 76.9352244, 35.7840569 ], [ 76.9431788, 35.783739 ], [ 76.9569814, 35.7838475 ], [ 76.9589129, 35.7840749 ], [ 76.9619702, 35.7831662 ], [ 76.9677331, 35.7831594 ], [ 76.9721342, 35.7820491 ], [ 76.9735345, 35.7813855 ], [ 76.9776742, 35.7813905 ], [ 76.9834523, 35.7793325 ], [ 76.9892489, 35.7788803 ], [ 76.9955751, 35.7766425 ], [ 77.0009579, 35.7762772 ], [ 77.0016552, 35.7762084 ], [ 77.003585, 35.7755447 ], [ 77.004433, 35.7750916 ], [ 77.0206637, 35.7746434 ], [ 77.0248017, 35.7759831 ], [ 77.033321, 35.7764174 ], [ 77.0338719, 35.7766697 ], [ 77.03497, 35.7771068 ], [ 77.0382888, 35.7782252 ], [ 77.0394149, 35.7782219 ], [ 77.0399468, 35.7786808 ], [ 77.0427204, 35.7786788 ], [ 77.0438071, 35.7793496 ], [ 77.0440854, 35.7797951 ], [ 77.0471125, 35.7800268 ], [ 77.0487619, 35.7809229 ], [ 77.0490097, 35.7813769 ], [ 77.0512202, 35.7818104 ], [ 77.0526246, 35.7820413 ], [ 77.0534349, 35.7827297 ], [ 77.054521, 35.7836433 ], [ 77.0579655, 35.7841787 ], [ 77.0586579, 35.7842984 ], [ 77.0608706, 35.7851906 ], [ 77.0620696, 35.7863308 ], [ 77.0638289, 35.7877954 ], [ 77.0647318, 35.7881076 ], [ 77.0658492, 35.7883379 ], [ 77.0671859, 35.7901416 ], [ 77.0677488, 35.7901466 ], [ 77.0688665, 35.790368 ], [ 77.0691442, 35.7910608 ], [ 77.0702334, 35.7921811 ], [ 77.0740753, 35.7932716 ], [ 77.0753837, 35.7944586 ], [ 77.0762225, 35.7946886 ], [ 77.0787697, 35.7968769 ], [ 77.0798651, 35.7971068 ], [ 77.0801433, 35.7975657 ], [ 77.081515, 35.7977912 ], [ 77.0858483, 35.7971492 ], [ 77.0933553, 35.7959849 ], [ 77.0999716, 35.7959835 ], [ 77.1057883, 35.7986804 ], [ 77.1133402, 35.7984693 ], [ 77.1138784, 35.7980331 ], [ 77.115668, 35.7977796 ], [ 77.1167894, 35.7968674 ], [ 77.1181671, 35.796634 ], [ 77.1195362, 35.796414 ], [ 77.122574, 35.7867726 ], [ 77.126998, 35.782704 ], [ 77.1280995, 35.78225 ], [ 77.1361032, 35.7818071 ], [ 77.1363871, 35.7813755 ], [ 77.1416322, 35.7714596 ], [ 77.143542, 35.7696785 ], [ 77.1457531, 35.7685366 ], [ 77.1506262, 35.7674386 ], [ 77.1537563, 35.7662938 ], [ 77.1554119, 35.766294 ], [ 77.1584282, 35.7680708 ], [ 77.1603598, 35.768071 ], [ 77.1642257, 35.7667402 ], [ 77.1653247, 35.7642529 ], [ 77.1650431, 35.7635871 ], [ 77.1656066, 35.7602094 ], [ 77.1658828, 35.7586352 ], [ 77.1631572, 35.744426 ], [ 77.163135, 35.7405212 ], [ 77.1672819, 35.7345794 ], [ 77.1692157, 35.733464 ], [ 77.1753165, 35.7317285 ], [ 77.1802374, 35.7309632 ], [ 77.186036, 35.7314131 ], [ 77.1882202, 35.7327891 ], [ 77.19373, 35.7329867 ], [ 77.1986543, 35.730606 ], [ 77.2028331, 35.7275697 ], [ 77.2072267, 35.7264667 ], [ 77.2105287, 35.7264616 ], [ 77.2114467, 35.7267103 ], [ 77.2130967, 35.7276051 ], [ 77.2171253, 35.7286957 ], [ 77.2210177, 35.7282366 ], [ 77.2221123, 35.727116 ], [ 77.2245821, 35.714978 ], [ 77.225975, 35.7133764 ], [ 77.2281865, 35.7124851 ], [ 77.2392139, 35.7127067 ], [ 77.2557145, 35.709996 ], [ 77.2587403, 35.7099855 ], [ 77.2656219, 35.7095188 ], [ 77.2664348, 35.7090817 ], [ 77.2678358, 35.7090859 ], [ 77.270857, 35.7099705 ], [ 77.272226, 35.7113192 ], [ 77.2741536, 35.7178457 ], [ 77.2761115, 35.7193747 ], [ 77.2775463, 35.7204049 ], [ 77.2801725, 35.718296 ], [ 77.2827169, 35.7162621 ], [ 77.2854571, 35.7110688 ], [ 77.2865463, 35.7106135 ], [ 77.2904121, 35.7094865 ], [ 77.292629, 35.7092784 ], [ 77.2931886, 35.7088238 ], [ 77.2986686, 35.7081267 ], [ 77.3027523, 35.7048795 ], [ 77.3072036, 35.7020561 ], [ 77.3096928, 35.7013976 ], [ 77.310806, 35.7000248 ], [ 77.3141115, 35.6991314 ], [ 77.3152037, 35.6991259 ], [ 77.3165673, 35.7000154 ], [ 77.3215294, 35.7072006 ], [ 77.3249985, 35.7165801 ], [ 77.3267567, 35.7186632 ], [ 77.327599, 35.7190901 ], [ 77.3383212, 35.7195346 ], [ 77.3508463, 35.7182336 ], [ 77.3557258, 35.7182228 ], [ 77.3584377, 35.71772 ], [ 77.3691711, 35.7044237 ], [ 77.3702514, 35.6990326 ], [ 77.3697241, 35.6967706 ], [ 77.3708137, 35.6951901 ], [ 77.3749208, 35.6940648 ], [ 77.3762927, 35.6934018 ], [ 77.3801822, 35.6938298 ], [ 77.3820904, 35.6935933 ], [ 77.3832012, 35.6931332 ], [ 77.3837643, 35.692017 ], [ 77.3854052, 35.6904402 ], [ 77.3865014, 35.6897684 ], [ 77.3881431, 35.6857216 ], [ 77.3921675, 35.6803204 ], [ 77.3932843, 35.678857 ], [ 77.3969484, 35.6697382 ], [ 77.4016053, 35.6625327 ], [ 77.4032601, 35.6614058 ], [ 77.4040978, 35.6611799 ], [ 77.4132652, 35.6617539 ], [ 77.4221068, 35.6616207 ], [ 77.4230822, 35.6609064 ], [ 77.4258531, 35.6597823 ], [ 77.4264155, 35.6597817 ], [ 77.4269413, 35.6593261 ], [ 77.4293464, 35.6568062 ], [ 77.429681, 35.6563927 ], [ 77.4302097, 35.6548122 ], [ 77.4310447, 35.6545816 ], [ 77.4365768, 35.6458264 ], [ 77.4379117, 35.6410899 ], [ 77.4373424, 35.6390565 ], [ 77.4359791, 35.6372768 ], [ 77.4337821, 35.6323481 ], [ 77.4335077, 35.6303145 ], [ 77.4367971, 35.6222182 ], [ 77.4362618, 35.6203921 ], [ 77.4348614, 35.6190482 ], [ 77.4315627, 35.6179371 ], [ 77.4281694, 35.6134177 ], [ 77.4276986, 35.6127806 ], [ 77.4271369, 35.6105445 ], [ 77.4285256, 35.6091926 ], [ 77.431907, 35.6073303 ], [ 77.4373262, 35.6032929 ], [ 77.4389712, 35.6021787 ], [ 77.4439233, 35.601037 ], [ 77.4450405, 35.600608 ], [ 77.4452904, 35.6001481 ], [ 77.4464032, 35.599917 ], [ 77.4466863, 35.5994532 ], [ 77.44777, 35.5985466 ], [ 77.4536663, 35.5958118 ], [ 77.4549764, 35.5947555 ], [ 77.4560096, 35.5945052 ], [ 77.4568505, 35.5936084 ], [ 77.4645385, 35.5800616 ], [ 77.4655989, 35.5733167 ], [ 77.4643004, 35.5696158 ], [ 77.4633819, 35.5680449 ], [ 77.460662, 35.5632245 ], [ 77.4598094, 35.5558028 ], [ 77.461172, 35.5497145 ], [ 77.4608928, 35.5481393 ], [ 77.4606132, 35.5477076 ], [ 77.4619756, 35.5461206 ], [ 77.4628123, 35.5458943 ], [ 77.4633783, 35.5452049 ], [ 77.4658607, 35.5442871 ], [ 77.466665, 35.5442809 ], [ 77.4677803, 35.5431584 ], [ 77.4688705, 35.5420445 ], [ 77.4712466, 35.5415752 ], [ 77.4749584, 35.5399685 ], [ 77.4783947, 35.5388619 ], [ 77.4786438, 35.5384289 ], [ 77.4797641, 35.5381977 ], [ 77.4800359, 35.5377335 ], [ 77.482605, 35.5366141 ], [ 77.4836923, 35.5363824 ], [ 77.4861472, 35.5336812 ], [ 77.4865967, 35.5320085 ], [ 77.4860357, 35.5305868 ], [ 77.4836864, 35.5278334 ], [ 77.4823169, 35.5273722 ], [ 77.4812226, 35.5271717 ], [ 77.4806647, 35.5264927 ], [ 77.4784576, 35.5249208 ], [ 77.4754064, 35.5238047 ], [ 77.4748711, 35.5233512 ], [ 77.474592, 35.5228924 ], [ 77.4724145, 35.5211137 ], [ 77.4693116, 35.5215994 ], [ 77.4677186, 35.5220442 ], [ 77.4635934, 35.5240634 ], [ 77.4619412, 35.5251916 ], [ 77.4517828, 35.5265813 ], [ 77.4465559, 35.5249913 ], [ 77.4457476, 35.524313 ], [ 77.4413205, 35.5189531 ], [ 77.4402307, 35.518059 ], [ 77.4352896, 35.5173867 ], [ 77.4322683, 35.5182826 ], [ 77.4311599, 35.5187209 ], [ 77.4306017, 35.5191807 ], [ 77.4286958, 35.5216734 ], [ 77.4275833, 35.5216794 ], [ 77.4254097, 35.5239429 ], [ 77.4240145, 35.5241516 ], [ 77.420721, 35.5255115 ], [ 77.4193511, 35.5264319 ], [ 77.4166128, 35.5270977 ], [ 77.4133127, 35.5266655 ], [ 77.4127576, 35.5271028 ], [ 77.4088991, 35.5282334 ], [ 77.406699, 35.5298165 ], [ 77.4059171, 35.5309121 ], [ 77.4026286, 35.5345991 ], [ 77.4009825, 35.5368837 ], [ 77.3974891, 35.5404864 ], [ 77.3969591, 35.5416353 ], [ 77.3961257, 35.5418343 ], [ 77.3958419, 35.5425683 ], [ 77.3950964, 35.5427731 ], [ 77.3918768, 35.5458215 ], [ 77.3855413, 35.5485345 ], [ 77.3847259, 35.5485402 ], [ 77.3838926, 35.5492163 ], [ 77.3814357, 35.549224 ], [ 77.3805906, 35.5496883 ], [ 77.3783943, 35.5503481 ], [ 77.3672951, 35.550332 ], [ 77.3594749, 35.5496543 ], [ 77.3486872, 35.5477151 ], [ 77.3453946, 35.5468226 ], [ 77.3426573, 35.5447772 ], [ 77.3378974, 35.5433848 ], [ 77.3375427, 35.5428841 ], [ 77.3319249, 35.5411991 ], [ 77.3266926, 35.5376247 ], [ 77.3245921, 35.5372365 ], [ 77.3227022, 35.5367978 ], [ 77.327817, 35.5341615 ], [ 77.328055, 35.5315441 ], [ 77.333142, 35.5286282 ], [ 77.3382867, 35.5244057 ], [ 77.3394764, 35.5179812 ], [ 77.3365354, 35.5150545 ], [ 77.336859, 35.5127464 ], [ 77.3399289, 35.5105299 ], [ 77.3399289, 35.5037431 ], [ 77.3563706, 35.4941866 ], [ 77.3620813, 35.4998973 ], [ 77.3715991, 35.4982317 ], [ 77.3704697, 35.4901694 ], [ 77.3768087, 35.4831965 ], [ 77.3813549, 35.4734853 ], [ 77.3892071, 35.4725335 ], [ 77.3920625, 35.470392 ], [ 77.3954042, 35.470608 ], [ 77.3994597, 35.472545 ], [ 77.4075102, 35.4737556 ], [ 77.4194346, 35.4704264 ], [ 77.4243981, 35.4713344 ], [ 77.4267588, 35.4681868 ], [ 77.4303301, 35.4657656 ], [ 77.4317995, 35.4663469 ], [ 77.4338726, 35.4654566 ], [ 77.4364436, 35.4634655 ], [ 77.442315, 35.4618311 ], [ 77.4466732, 35.4627996 ], [ 77.4515156, 35.4668551 ], [ 77.4583853, 35.4684312 ], [ 77.4631979, 35.4707896 ], [ 77.4650138, 35.4732108 ], [ 77.4714906, 35.4762373 ], [ 77.4770092, 35.4787201 ], [ 77.4808122, 35.4801112 ], [ 77.4826281, 35.4838641 ], [ 77.4892259, 35.484651 ], [ 77.4976396, 35.4878591 ], [ 77.5009687, 35.4893724 ], [ 77.5039953, 35.4888881 ], [ 77.5086561, 35.4872538 ], [ 77.5108957, 35.485559 ], [ 77.5122253, 35.4858585 ], [ 77.5169842, 35.4846687 ], [ 77.5193699, 35.4865274 ], [ 77.5219727, 35.4862248 ], [ 77.5243605, 35.4841929 ], [ 77.5286435, 35.4853826 ], [ 77.5345922, 35.4887138 ], [ 77.5405409, 35.488 ], [ 77.5426824, 35.4841929 ], [ 77.5500587, 35.483479 ], [ 77.5593707, 35.4867759 ], [ 77.5719627, 35.4842575 ], [ 77.5826573, 35.4796719 ], [ 77.5786001, 35.4698088 ], [ 77.5921752, 35.465871 ], [ 77.5952685, 35.4689643 ], [ 77.601693, 35.470154 ], [ 77.6050242, 35.4730094 ], [ 77.6162077, 35.4696781 ], [ 77.6295327, 35.4623018 ], [ 77.6419059, 35.4680125 ], [ 77.6376229, 35.4765786 ], [ 77.6388126, 35.4832411 ], [ 77.6521244, 35.4867759 ], [ 77.6554688, 35.4846687 ], [ 77.6659384, 35.4715817 ], [ 77.6716492, 35.4668228 ], [ 77.6781407, 35.4652842 ], [ 77.6824378, 35.4618585 ], [ 77.682352, 35.4588523 ], [ 77.68545, 35.4563532 ], [ 77.6868777, 35.4532599 ], [ 77.6905917, 35.4517909 ], [ 77.6915359, 35.4554965 ], [ 77.6952058, 35.46135 ], [ 77.6994888, 35.4639674 ], [ 77.7068652, 35.4632536 ], [ 77.707817, 35.4618259 ], [ 77.7141952, 35.4612992 ], [ 77.7156543, 35.4627673 ], [ 77.7189159, 35.461439 ], [ 77.7246665, 35.4654238 ], [ 77.7348804, 35.4694782 ], [ 77.7280424, 35.4739612 ], [ 77.7282803, 35.4763406 ], [ 77.7313736, 35.4787201 ], [ 77.7318495, 35.4808616 ], [ 77.7423191, 35.4956143 ], [ 77.7426051, 35.4970152 ], [ 77.7468108, 35.4961067 ], [ 77.7527962, 35.4980874 ], [ 77.7544544, 35.4977558 ], [ 77.7573208, 35.5026119 ], [ 77.764924, 35.5018009 ], [ 77.7687312, 35.4996593 ], [ 77.7799146, 35.4982317 ], [ 77.78277, 35.5046562 ], [ 77.7876891, 35.5059125 ], [ 77.7903843, 35.5058459 ], [ 77.792527, 35.5089424 ], [ 77.7931541, 35.5089525 ], [ 77.7943009, 35.5090111 ], [ 77.7955573, 35.5092954 ], [ 77.7967705, 35.509478 ], [ 77.797885, 35.5093812 ], [ 77.8002299, 35.513395 ], [ 77.8004268, 35.5140499 ], [ 77.8008466, 35.5153545 ], [ 77.8013975, 35.5156935 ], [ 77.8024043, 35.5171012 ], [ 77.8026681, 35.5173163 ], [ 77.8029498, 35.5180949 ], [ 77.8029453, 35.5186611 ], [ 77.8033551, 35.5193785 ], [ 77.8044853, 35.5196252 ], [ 77.8052096, 35.5200346 ], [ 77.8074853, 35.5200373 ], [ 77.8084417, 35.5201314 ], [ 77.8123442, 35.5220556 ], [ 77.8126358, 35.5221479 ], [ 77.8133495, 35.5220053 ], [ 77.8143705, 35.5219797 ], [ 77.8147381, 35.5216933 ], [ 77.8158485, 35.5205605 ], [ 77.8173325, 35.5189629 ], [ 77.8179562, 35.5179862 ], [ 77.8179574, 35.5179005 ], [ 77.8196577, 35.5166575 ], [ 77.8212074, 35.515287 ], [ 77.8222515, 35.5145297 ], [ 77.822616, 35.5141799 ], [ 77.8226635, 35.5140721 ], [ 77.8227031, 35.5134588 ], [ 77.8227186, 35.5132183 ], [ 77.8227839, 35.5130868 ], [ 77.8230172, 35.5126455 ], [ 77.8230597, 35.512364 ], [ 77.823169, 35.5118533 ], [ 77.8231456, 35.5113299 ], [ 77.8234097, 35.5111134 ], [ 77.8235992, 35.5111204 ], [ 77.8238737, 35.5109541 ], [ 77.8245091, 35.5104027 ], [ 77.8247285, 35.5100561 ], [ 77.8249741, 35.5098202 ], [ 77.8252746, 35.5093341 ], [ 77.8257027, 35.508566 ], [ 77.8261679, 35.5081135 ], [ 77.826585, 35.5076905 ], [ 77.8264151, 35.50706 ], [ 77.8264076, 35.5069223 ], [ 77.8263207, 35.5061815 ], [ 77.8262943, 35.5057609 ], [ 77.8266573, 35.5052538 ], [ 77.826862, 35.5049047 ], [ 77.8279398, 35.5039801 ], [ 77.8296586, 35.5035277 ], [ 77.8313774, 35.5045229 ], [ 77.8334581, 35.5054275 ], [ 77.8346342, 35.505337 ], [ 77.836172, 35.5046133 ], [ 77.8374385, 35.5040705 ], [ 77.8386146, 35.5038896 ], [ 77.840062, 35.5040705 ], [ 77.8407857, 35.5021708 ], [ 77.8417808, 35.5008138 ], [ 77.8431378, 35.500271 ], [ 77.8437256, 35.4985452 ], [ 77.8442764, 35.4968929 ], [ 77.846304, 35.495386 ], [ 77.8487783, 35.494187 ], [ 77.8509177, 35.4924007 ], [ 77.8524181, 35.4915768 ], [ 77.8536394, 35.4906669 ], [ 77.855555, 35.4926544 ], [ 77.8601048, 35.5001496 ], [ 77.8625627, 35.5002903 ], [ 77.8669243, 35.4982086 ], [ 77.8709045, 35.4957195 ], [ 77.8723762, 35.4942436 ], [ 77.8747552, 35.4923602 ], [ 77.8765798, 35.4908106 ], [ 77.8759811, 35.4869313 ], [ 77.878522, 35.4829432 ], [ 77.8802072, 35.4818528 ], [ 77.8821897, 35.4796721 ], [ 77.8851286, 35.4792685 ], [ 77.888936, 35.4796756 ], [ 77.8903249, 35.4776402 ], [ 77.8906122, 35.4765865 ], [ 77.8925279, 35.4750061 ], [ 77.8934901, 35.4742201 ], [ 77.8967612, 35.4742201 ], [ 77.8986821, 35.4717015 ], [ 77.8998315, 35.4680377 ], [ 77.9012683, 35.466146 ], [ 77.9030403, 35.4653318 ], [ 77.9060575, 35.4652121 ], [ 77.9087874, 35.4628175 ], [ 77.9109904, 35.4620991 ], [ 77.9127205, 35.4637128 ], [ 77.912068, 35.4652839 ], [ 77.9136006, 35.4689477 ], [ 77.9148022, 35.4707507 ], [ 77.9166856, 35.4722376 ], [ 77.9179742, 35.4739227 ], [ 77.9189654, 35.4769956 ], [ 77.918294, 35.4779994 ], [ 77.9206647, 35.4820223 ], [ 77.9215028, 35.4824533 ], [ 77.9214788, 35.4835788 ], [ 77.920521, 35.4854227 ], [ 77.9173362, 35.4883441 ], [ 77.9182222, 35.4905471 ], [ 77.9200558, 35.4929549 ], [ 77.9240974, 35.4972106 ] ], [ [ 88.9183607, 26.325603 ], [ 88.9189707, 26.3243152 ], [ 88.9199874, 26.3226207 ], [ 88.9210719, 26.3209262 ], [ 88.9224952, 26.3192995 ], [ 88.9234442, 26.3180795 ], [ 88.924881, 26.3188928 ], [ 88.9249488, 26.3182829 ], [ 88.9250844, 26.3178762 ], [ 88.92522, 26.3174017 ], [ 88.9256944, 26.3169273 ], [ 88.9261011, 26.3160461 ], [ 88.9227799, 26.3149278 ], [ 88.9231866, 26.3143178 ], [ 88.9237288, 26.3137078 ], [ 88.9247455, 26.31364 ], [ 88.9254233, 26.31303 ], [ 88.9259655, 26.3123522 ], [ 88.9263722, 26.3118777 ], [ 88.9273211, 26.3109288 ], [ 88.9284734, 26.3106577 ], [ 88.9290834, 26.3098444 ], [ 88.9296256, 26.3082177 ], [ 88.9302356, 26.3061843 ], [ 88.9305067, 26.3048965 ], [ 88.9305067, 26.3036765 ], [ 88.9302356, 26.3027953 ], [ 88.9292189, 26.302592 ], [ 88.9280667, 26.3021176 ], [ 88.9268467, 26.3018464 ], [ 88.9261011, 26.301982 ], [ 88.9255589, 26.3014398 ], [ 88.9248811, 26.300762 ], [ 88.9243388, 26.2998808 ], [ 88.9238644, 26.2987964 ], [ 88.9235255, 26.2978475 ], [ 88.9235255, 26.2970341 ], [ 88.9233764, 26.2963224 ], [ 88.9237153, 26.2957124 ], [ 88.9243931, 26.2948313 ], [ 88.9250031, 26.2941535 ], [ 88.9263587, 26.2932046 ], [ 88.9276465, 26.2925268 ], [ 88.9284598, 26.2919846 ], [ 88.929612, 26.2920524 ], [ 88.9306965, 26.2923235 ], [ 88.9320521, 26.2925946 ], [ 88.9332721, 26.2925946 ], [ 88.9353733, 26.2915101 ], [ 88.9376778, 26.2899512 ], [ 88.9399822, 26.2881212 ], [ 88.9414056, 26.2871045 ], [ 88.9420834, 26.2864945 ], [ 88.9433034, 26.28663 ], [ 88.9438456, 26.2861556 ], [ 88.944049, 26.2850711 ], [ 88.9445234, 26.2837833 ], [ 88.9447946, 26.2824955 ], [ 88.9455401, 26.2811399 ], [ 88.9469635, 26.2798521 ], [ 88.9491324, 26.2776154 ], [ 88.9506913, 26.2763276 ], [ 88.9525891, 26.2751076 ], [ 88.9535516, 26.2748365 ], [ 88.9543649, 26.2753109 ], [ 88.9552461, 26.2757176 ], [ 88.9563305, 26.2757176 ], [ 88.9572117, 26.2761243 ], [ 88.9589061, 26.2766665 ], [ 88.9604651, 26.2770732 ], [ 88.9623629, 26.2775477 ], [ 88.9639896, 26.277751 ], [ 88.9661585, 26.2778865 ], [ 88.9675819, 26.2779543 ], [ 88.969073, 26.2780899 ], [ 88.9700219, 26.2784288 ], [ 88.9704964, 26.2786999 ], [ 88.970903, 26.2786999 ], [ 88.9721908, 26.278361 ], [ 88.9728008, 26.2789032 ], [ 88.9738853, 26.2816144 ], [ 88.973072, 26.2822922 ], [ 88.9733431, 26.2827666 ], [ 88.9751053, 26.2843933 ], [ 88.9757831, 26.2840544 ], [ 88.9760542, 26.2845289 ], [ 88.9769354, 26.2843256 ], [ 88.9782909, 26.2839189 ], [ 88.9793076, 26.2838511 ], [ 88.980121, 26.2837155 ], [ 88.9809343, 26.2836478 ], [ 88.9811377, 26.2858506 ], [ 88.9814766, 26.2870028 ], [ 88.9817477, 26.2882228 ], [ 88.9822221, 26.2883584 ], [ 88.9822899, 26.2889684 ], [ 88.9826288, 26.290324 ], [ 88.9830355, 26.2916118 ], [ 88.9832388, 26.2928318 ], [ 88.983171, 26.2935774 ], [ 88.9826966, 26.2941196 ], [ 88.9824932, 26.2941874 ], [ 88.9828321, 26.2943907 ], [ 88.9833066, 26.2944585 ], [ 88.9836455, 26.2948652 ], [ 88.9838488, 26.2954074 ], [ 88.9843911, 26.2956785 ], [ 88.9843233, 26.2962886 ], [ 88.9841877, 26.296763 ], [ 88.9837133, 26.2973052 ], [ 88.9833744, 26.2979153 ], [ 88.9833066, 26.2985253 ], [ 88.9833066, 26.2994064 ], [ 88.9829677, 26.3000164 ], [ 88.9829407, 26.3004644 ], [ 88.9829273, 26.300841 ], [ 88.9829283, 26.3011858 ], [ 88.9791721, 26.3012364 ], [ 88.978901, 26.2996097 ], [ 88.9769354, 26.3000164 ], [ 88.9765965, 26.2988642 ], [ 88.9759187, 26.2989997 ], [ 88.975512, 26.2975086 ], [ 88.9751731, 26.2960852 ], [ 88.9735464, 26.2962886 ], [ 88.9733431, 26.2956785 ], [ 88.9713097, 26.295543 ], [ 88.970903, 26.2951363 ], [ 88.9693441, 26.2952041 ], [ 88.9691408, 26.2958141 ], [ 88.968463, 26.2959497 ], [ 88.9682597, 26.2975764 ], [ 88.9673785, 26.2975764 ], [ 88.9670396, 26.2962208 ], [ 88.9655485, 26.2962208 ], [ 88.9648029, 26.2959497 ], [ 88.9639896, 26.2958819 ], [ 88.9622951, 26.295543 ], [ 88.9603295, 26.2952719 ], [ 88.9601939, 26.2958819 ], [ 88.9609395, 26.2965597 ], [ 88.9603973, 26.2970341 ], [ 88.9605328, 26.2975764 ], [ 88.960804, 26.2977119 ], [ 88.9607362, 26.3000842 ], [ 88.962024, 26.3000842 ], [ 88.9624984, 26.3000842 ], [ 88.9633796, 26.3003553 ], [ 88.963854, 26.3004231 ], [ 88.9639218, 26.3038798 ], [ 88.9635151, 26.3038798 ], [ 88.9635151, 26.3042187 ], [ 88.9624307, 26.3042187 ], [ 88.9622544, 26.3056421 ], [ 88.96117, 26.3055065 ], [ 88.9602888, 26.3053032 ], [ 88.9593399, 26.3050321 ], [ 88.9593399, 26.3043543 ], [ 88.9585266, 26.304422 ], [ 88.9580521, 26.3047609 ], [ 88.9575099, 26.3049643 ], [ 88.9566288, 26.3052354 ], [ 88.9560188, 26.3052354 ], [ 88.9552732, 26.3047609 ], [ 88.9543921, 26.304422 ], [ 88.9537143, 26.3040154 ], [ 88.9531043, 26.3040154 ], [ 88.9531043, 26.3057776 ], [ 88.9527654, 26.3073365 ], [ 88.953172, 26.3074721 ], [ 88.9530365, 26.3082177 ], [ 88.9535109, 26.3082854 ], [ 88.954731, 26.3082854 ], [ 88.9558154, 26.3082854 ], [ 88.9562899, 26.3084888 ], [ 88.9562221, 26.3092344 ], [ 88.9558154, 26.3093021 ], [ 88.9545276, 26.309641 ], [ 88.9539854, 26.3097766 ], [ 88.9535787, 26.3098444 ], [ 88.9537821, 26.3103866 ], [ 88.9537143, 26.3107255 ], [ 88.9534135, 26.3113524 ], [ 88.9529899, 26.3115643 ], [ 88.9525663, 26.3125174 ], [ 88.9523545, 26.3134705 ], [ 88.9520367, 26.3145296 ], [ 88.9520367, 26.3152709 ], [ 88.9518249, 26.3167536 ], [ 88.9510836, 26.3169654 ], [ 88.9496009, 26.3172831 ], [ 88.9484546, 26.3184184 ], [ 88.9476413, 26.3175373 ], [ 88.9436423, 26.3161139 ], [ 88.9369457, 26.3129961 ], [ 88.9365391, 26.3153684 ], [ 88.9358613, 26.3154361 ], [ 88.9357257, 26.3167239 ], [ 88.9352513, 26.3182829 ], [ 88.9349124, 26.3196384 ], [ 88.9349801, 26.3204518 ], [ 88.9350475, 26.3213328 ], [ 88.9357799, 26.320994 ], [ 88.9363222, 26.3211296 ], [ 88.9364577, 26.3217396 ], [ 88.9370677, 26.3222818 ], [ 88.93761, 26.322824 ], [ 88.93822, 26.3228918 ], [ 88.93944, 26.3231629 ], [ 88.9407956, 26.3231629 ], [ 88.9419478, 26.3230952 ], [ 88.9418801, 26.3242474 ], [ 88.9419478, 26.3248574 ], [ 88.9419478, 26.3262808 ], [ 88.9419478, 26.3281108 ], [ 88.9418801, 26.3293986 ], [ 88.9414734, 26.3304831 ], [ 88.9408634, 26.3312964 ], [ 88.9397111, 26.3325164 ], [ 88.9387622, 26.3333976 ], [ 88.9380844, 26.3342109 ], [ 88.9381522, 26.3347532 ], [ 88.9370677, 26.3346176 ], [ 88.9355088, 26.3342109 ], [ 88.9344244, 26.3335331 ], [ 88.9316454, 26.3325842 ], [ 88.9290698, 26.3321776 ], [ 88.9273753, 26.3312964 ], [ 88.9273076, 26.3318387 ], [ 88.9273076, 26.3327876 ], [ 88.9274431, 26.3339398 ], [ 88.9274431, 26.3348887 ], [ 88.9270364, 26.3352276 ], [ 88.9252742, 26.3350243 ], [ 88.9233086, 26.3349565 ], [ 88.9210041, 26.3350921 ], [ 88.9210041, 26.3340076 ], [ 88.9210041, 26.3331942 ], [ 88.921343, 26.3318387 ], [ 88.921343, 26.3306356 ], [ 88.921343, 26.3300764 ], [ 88.921343, 26.3292631 ], [ 88.9223597, 26.3293986 ], [ 88.923173, 26.3279753 ], [ 88.923783, 26.3270263 ], [ 88.923173, 26.3263486 ], [ 88.9221564, 26.3260097 ], [ 88.9205974, 26.3260774 ], [ 88.9196485, 26.3260774 ], [ 88.9183607, 26.325603 ] ] ], [ [ [ 93.6738356, 7.0046052 ], [ 93.6665906, 7.0040184 ], [ 93.6638461, 7.0093355 ], [ 93.6716021, 7.0135934 ], [ 93.6754413, 7.0246192 ], [ 93.6690832, 7.0294954 ], [ 93.672545, 7.0347683 ], [ 93.6648796, 7.042362 ], [ 93.6685051, 7.057461 ], [ 93.6651, 7.0654 ], [ 93.6594, 7.0676 ], [ 93.6588, 7.072 ], [ 93.6622, 7.0774 ], [ 93.6671, 7.0785 ], [ 93.6661, 7.0863 ], [ 93.6588, 7.0876 ], [ 93.6573, 7.0934 ], [ 93.6587, 7.1005 ], [ 93.6638311, 7.1046638 ], [ 93.6730005, 7.109198 ], [ 93.6749791, 7.1141018 ], [ 93.669678, 7.1172187 ], [ 93.658, 7.1109 ], [ 93.6564901, 7.1179925 ], [ 93.6568949, 7.1276063 ], [ 93.6677, 7.1383 ], [ 93.678, 7.1442 ], [ 93.678, 7.1532 ], [ 93.6735, 7.1574 ], [ 93.6723, 7.1738 ], [ 93.6911697, 7.1905716 ], [ 93.7009697, 7.1898019 ], [ 93.7157654, 7.1903798 ], [ 93.7262044, 7.1879964 ], [ 93.7335131, 7.1865578 ], [ 93.7380956, 7.1912826 ], [ 93.7415, 7.1931 ], [ 93.7419864, 7.1960036 ], [ 93.7455952, 7.1988586 ], [ 93.7496528, 7.2013213 ], [ 93.7528011, 7.2071646 ], [ 93.7575691, 7.2119849 ], [ 93.7648011, 7.2134946 ], [ 93.767333, 7.2070478 ], [ 93.7757895, 7.2067743 ], [ 93.780666, 7.2109973 ], [ 93.7899229, 7.2116832 ], [ 93.7978, 7.2048 ], [ 93.8017105, 7.202208 ], [ 93.8062011, 7.2072434 ], [ 93.8071, 7.2094 ], [ 93.8043, 7.2255 ], [ 93.8195461, 7.2354804 ], [ 93.8298, 7.2304 ], [ 93.8348, 7.2369 ], [ 93.8427, 7.2369 ], [ 93.8429, 7.2201 ], [ 93.851, 7.2133 ], [ 93.8686, 7.2158 ], [ 93.8795, 7.2024 ], [ 93.8821, 7.197 ], [ 93.8822, 7.1724 ], [ 93.8923, 7.1475 ], [ 93.8839699, 7.1358884 ], [ 93.8897, 7.1257 ], [ 93.8899869, 7.119062 ], [ 93.8862089, 7.1064396 ], [ 93.8912, 7.0949 ], [ 93.897, 7.0791 ], [ 93.9048867, 7.0758336 ], [ 93.9060518, 7.0687028 ], [ 93.9072332, 7.0631827 ], [ 93.9129548, 7.0543633 ], [ 93.916838, 7.0483775 ], [ 93.9130995, 7.0418 ], [ 93.9144972, 7.0315194 ], [ 93.9154178, 7.0306293 ], [ 93.9154532, 7.0295272 ], [ 93.9148363, 7.0281131 ], [ 93.9149393, 7.0262709 ], [ 93.9152482, 7.0253552 ], [ 93.9159918, 7.0241828 ], [ 93.9168597, 7.0234204 ], [ 93.9182716, 7.0228071 ], [ 93.920308, 7.0225664 ], [ 93.922134, 7.0231563 ], [ 93.9229752, 7.0236696 ], [ 93.9243055, 7.0247919 ], [ 93.9257432, 7.0259249 ], [ 93.9269545, 7.026567 ], [ 93.9280016, 7.0261677 ], [ 93.9285381, 7.02568 ], [ 93.9298255, 7.0238463 ], [ 93.9318897, 7.0206859 ], [ 93.9327244, 7.0203952 ], [ 93.9336654, 7.0202994 ], [ 93.9341825, 7.0199522 ], [ 93.9343799, 7.0190759 ], [ 93.9344368, 7.0177459 ], [ 93.9349142, 7.0159974 ], [ 93.9357274, 7.0144672 ], [ 93.9375106, 7.0120723 ], [ 93.9399857, 7.0099256 ], [ 93.9428471, 7.008817 ], [ 93.9438191, 7.0087989 ], [ 93.9446742, 7.0086594 ], [ 93.9453888, 7.008045 ], [ 93.945385, 7.0071564 ], [ 93.9454885, 7.0055021 ], [ 93.945643, 7.0039272 ], [ 93.9459842, 7.002842 ], [ 93.9461167, 7.0022755 ], [ 93.9460405, 7.0018107 ], [ 93.9460987, 7.0014854 ], [ 93.9463581, 7.0008166 ], [ 93.9466596, 7.0004109 ], [ 93.9467803, 6.9998231 ], [ 93.946805, 6.9992417 ], [ 93.946599, 6.998386 ], [ 93.9463275, 6.9974926 ], [ 93.9458614, 6.9965975 ], [ 93.9450948, 6.9956743 ], [ 93.9447225, 6.9948458 ], [ 93.9443958, 6.9942489 ], [ 93.9441761, 6.9937165 ], [ 93.9440155, 6.9935333 ], [ 93.9435756, 6.9931441 ], [ 93.9434562, 6.9934904 ], [ 93.9432315, 6.9937002 ], [ 93.943121, 6.9939369 ], [ 93.9429437, 6.9941129 ], [ 93.9427385, 6.9941304 ], [ 93.9426982, 6.9944427 ], [ 93.9425172, 6.9946059 ], [ 93.941793, 6.9951075 ], [ 93.9419024, 6.9953364 ], [ 93.9419268, 6.9956434 ], [ 93.9419038, 6.9962107 ], [ 93.9418778, 6.9966441 ], [ 93.9416283, 6.9969865 ], [ 93.9406072, 6.9975932 ], [ 93.9391325, 6.9983357 ], [ 93.9382334, 6.9987199 ], [ 93.93748, 6.998858 ], [ 93.9367448, 6.9991477 ], [ 93.9352658, 6.999834 ], [ 93.934551, 7.0002594 ], [ 93.9340041, 7.0006617 ], [ 93.9341806, 7.0009559 ], [ 93.9336908, 7.0012626 ], [ 93.9331944, 7.0014452 ], [ 93.9329052, 7.001951 ], [ 93.9328095, 7.0021315 ], [ 93.9326273, 7.0026643 ], [ 93.9328465, 7.0027917 ], [ 93.9326939, 7.0031905 ], [ 93.9327735, 7.0034205 ], [ 93.9325796, 7.0049247 ], [ 93.9325954, 7.0057646 ], [ 93.9323127, 7.0064637 ], [ 93.9316988, 7.0062584 ], [ 93.9313548, 7.006909 ], [ 93.9313238, 7.0075363 ], [ 93.9307568, 7.0078789 ], [ 93.9303888, 7.0084332 ], [ 93.9303225, 7.008619 ], [ 93.9306135, 7.0089166 ], [ 93.9305199, 7.0097051 ], [ 93.9290402, 7.0114153 ], [ 93.9279641, 7.0117268 ], [ 93.9270054, 7.0117877 ], [ 93.9263453, 7.0117609 ], [ 93.9255943, 7.0116174 ], [ 93.9239338, 7.0110825 ], [ 93.9228826, 7.0104732 ], [ 93.9214978, 7.0095856 ], [ 93.920614, 7.0089523 ], [ 93.9196256, 7.008184 ], [ 93.918314, 7.007101 ], [ 93.9168082, 7.005812 ], [ 93.9157359, 7.004676 ], [ 93.9151286, 7.0039075 ], [ 93.9142647, 7.0023945 ], [ 93.9135456, 7.0007003 ], [ 93.9133565, 7.0000907 ], [ 93.913139, 6.9987989 ], [ 93.9132143, 6.9975235 ], [ 93.9133294, 6.9973201 ], [ 93.9134168, 6.997192 ], [ 93.913456, 6.9969846 ], [ 93.9133916, 6.9967506 ], [ 93.9137764, 6.9955018 ], [ 93.9140836, 6.9946791 ], [ 93.9141603, 6.9940168 ], [ 93.9141378, 6.9935035 ], [ 93.9145991, 6.9930099 ], [ 93.9152499, 6.9925339 ], [ 93.9162003, 6.992267 ], [ 93.9168275, 6.9926233 ], [ 93.917224, 6.9929354 ], [ 93.9176354, 6.9930717 ], [ 93.9181263, 6.9928203 ], [ 93.9193043, 6.9920078 ], [ 93.9198509, 6.9912219 ], [ 93.9205247, 6.9909025 ], [ 93.9211727, 6.9908279 ], [ 93.9287121, 6.9859929 ], [ 93.9286071, 6.9798254 ], [ 93.9289984, 6.9731899 ], [ 93.9338199, 6.9670891 ], [ 93.9352264, 6.9632279 ], [ 93.9380545, 6.960738 ], [ 93.9414341, 6.9586272 ], [ 93.9442537, 6.9565058 ], [ 93.9445004, 6.955232 ], [ 93.9433945, 6.9537075 ], [ 93.9425714, 6.9514407 ], [ 93.9408483, 6.9519646 ], [ 93.9387605, 6.9513555 ], [ 93.934926, 6.9535195 ], [ 93.9284808, 6.9558121 ], [ 93.9235523, 6.9517082 ], [ 93.9206223, 6.9509763 ], [ 93.918092, 6.9480853 ], [ 93.9161634, 6.9454553 ], [ 93.9158958, 6.9380032 ], [ 93.9162385, 6.9351843 ], [ 93.9150519, 6.932822 ], [ 93.9139983, 6.9344153 ], [ 93.9127452, 6.9342769 ], [ 93.9106981, 6.9334163 ], [ 93.9089708, 6.931184 ], [ 93.9077992, 6.9282082 ], [ 93.9079365, 6.9251153 ], [ 93.9085223, 6.9229916 ], [ 93.9099471, 6.9206911 ], [ 93.9111209, 6.9197197 ], [ 93.912096, 6.9194201 ], [ 93.9128461, 6.9182542 ], [ 93.9140992, 6.9172999 ], [ 93.914685, 6.916712 ], [ 93.9144168, 6.9157832 ], [ 93.9142601, 6.9145946 ], [ 93.9151764, 6.9132057 ], [ 93.914175, 6.9120609 ], [ 93.9128053, 6.9116741 ], [ 93.9121723, 6.9096505 ], [ 93.9122538, 6.9076438 ], [ 93.910063, 6.906583 ], [ 93.9088657, 6.9058225 ], [ 93.907855, 6.9061995 ], [ 93.9063251, 6.9068663 ], [ 93.9052329, 6.9062997 ], [ 93.9058079, 6.907533 ], [ 93.9046728, 6.9083255 ], [ 93.9012267, 6.9082935 ], [ 93.8982355, 6.9061846 ], [ 93.8963473, 6.9032045 ], [ 93.8958044, 6.8998835 ], [ 93.8964245, 6.8982432 ], [ 93.898802, 6.8976702 ], [ 93.8996989, 6.8961875 ], [ 93.8977377, 6.8955122 ], [ 93.8958838, 6.8933862 ], [ 93.8958966, 6.8893579 ], [ 93.8968043, 6.8870188 ], [ 93.897878, 6.8856539 ], [ 93.898669, 6.886237 ], [ 93.8991561, 6.8859388 ], [ 93.8990123, 6.8845967 ], [ 93.9010298, 6.881647 ], [ 93.9010528, 6.8733256 ], [ 93.8946199, 6.8692776 ], [ 93.8946199, 6.8576473 ], [ 93.8940183, 6.8490519 ], [ 93.8975571, 6.8416202 ], [ 93.9077963, 6.8402608 ], [ 93.9117303, 6.8354 ], [ 93.9059383, 6.8254073 ], [ 93.9012727, 6.8113961 ], [ 93.8951538, 6.8043131 ], [ 93.8898405, 6.8046175 ], [ 93.8856248, 6.7966451 ], [ 93.8811771, 6.7962466 ], [ 93.8728727, 6.815396 ], [ 93.8676727, 6.817296 ], [ 93.8520881, 6.8150626 ], [ 93.8500727, 6.8067961 ], [ 93.8470273, 6.8000518 ], [ 93.8499727, 6.7853965 ], [ 93.8452727, 6.7746967 ], [ 93.8396727, 6.7717968 ], [ 93.8387727, 6.760797 ], [ 93.8353727, 6.7562971 ], [ 93.8272727, 6.7559971 ], [ 93.8079727, 6.763197 ], [ 93.8050727, 6.7690968 ], [ 93.8103727, 6.7780967 ], [ 93.8062727, 6.7873965 ], [ 93.8111727, 6.7969963 ], [ 93.8085727, 6.8057962 ], [ 93.8162848, 6.8118007 ], [ 93.8152842, 6.8160266 ], [ 93.8137287, 6.8186482 ], [ 93.8109518, 6.8168655 ], [ 93.8077958, 6.8134788 ], [ 93.8011727, 6.8160136 ], [ 93.7849727, 6.8346956 ], [ 93.7931727, 6.8477954 ], [ 93.7927727, 6.8517953 ], [ 93.7754727, 6.8599952 ], [ 93.7726727, 6.8748949 ], [ 93.7746727, 6.8793948 ], [ 93.7879727, 6.8799948 ], [ 93.7873727, 6.8831947 ], [ 93.7789727, 6.8856947 ], [ 93.7768727, 6.8944945 ], [ 93.7701078, 6.8965557 ], [ 93.7646985, 6.9093251 ], [ 93.7672996, 6.9120507 ], [ 93.7653413, 6.9155125 ], [ 93.7602189, 6.9150632 ], [ 93.7561649, 6.9080471 ], [ 93.7503973, 6.9082733 ], [ 93.7431078, 6.9209381 ], [ 93.7410078, 6.928138 ], [ 93.7469078, 6.9339379 ], [ 93.7446078, 6.9526377 ], [ 93.7396078, 6.9642375 ], [ 93.731756, 6.9687162 ], [ 93.7330241, 6.9785606 ], [ 93.7308788, 6.9820111 ], [ 93.7293131, 6.9845292 ], [ 93.7274351, 6.9909446 ], [ 93.7215351, 6.9959446 ], [ 93.7145121, 6.9921286 ], [ 93.7087078, 6.9886788 ], [ 93.7044791, 6.9938789 ], [ 93.7032592, 7.008356 ], [ 93.6883, 7.0176 ], [ 93.6788, 7.0183 ], [ 93.6738356, 7.0046052 ] ] ], [ [ [ 93.71212, 7.20754 ], [ 93.7121, 7.20764 ], [ 93.71214, 7.20774 ], [ 93.71225, 7.20788 ], [ 93.71232, 7.20803 ], [ 93.71234, 7.20841 ], [ 93.71222, 7.20873 ], [ 93.71214, 7.20911 ], [ 93.71202, 7.20938 ], [ 93.71171, 7.21048 ], [ 93.71155, 7.21072 ], [ 93.71147, 7.21094 ], [ 93.71145, 7.21124 ], [ 93.71146, 7.2116 ], [ 93.7115, 7.21194 ], [ 93.71157, 7.21212 ], [ 93.71162, 7.21249 ], [ 93.71163, 7.21334 ], [ 93.71177, 7.2137 ], [ 93.71184, 7.21401 ], [ 93.71184, 7.2142 ], [ 93.71168, 7.21475 ], [ 93.71158, 7.21486 ], [ 93.71143, 7.21521 ], [ 93.71142, 7.21539 ], [ 93.71132, 7.21552 ], [ 93.71115, 7.21602 ], [ 93.71104, 7.21617 ], [ 93.71088, 7.21629 ], [ 93.71074, 7.21646 ], [ 93.71063, 7.21665 ], [ 93.71057, 7.21686 ], [ 93.71031, 7.21746 ], [ 93.71026, 7.21766 ], [ 93.71031, 7.21779 ], [ 93.71077, 7.21814 ], [ 93.71076, 7.21826 ], [ 93.71069, 7.21838 ], [ 93.7106, 7.21842 ], [ 93.7103, 7.21846 ], [ 93.7102, 7.2186 ], [ 93.71001, 7.2187 ], [ 93.70995, 7.21894 ], [ 93.70989, 7.21898 ], [ 93.70981, 7.21891 ], [ 93.70975, 7.2189 ], [ 93.70965, 7.21897 ], [ 93.70943, 7.2193 ], [ 93.70936, 7.21952 ], [ 93.70935, 7.21966 ], [ 93.70945, 7.21976 ], [ 93.70958, 7.21979 ], [ 93.70978, 7.21994 ], [ 93.70978, 7.22017 ], [ 93.70969, 7.22025 ], [ 93.70922, 7.22027 ], [ 93.70879, 7.22009 ], [ 93.70864, 7.22014 ], [ 93.70859, 7.22025 ], [ 93.70862, 7.22046 ], [ 93.70861, 7.22067 ], [ 93.70852, 7.22083 ], [ 93.70851, 7.22096 ], [ 93.70862, 7.22112 ], [ 93.70872, 7.22122 ], [ 93.70889, 7.22168 ], [ 93.70904, 7.22193 ], [ 93.70906, 7.22206 ], [ 93.70901, 7.22216 ], [ 93.70883, 7.2223 ], [ 93.70875, 7.22243 ], [ 93.70875, 7.22269 ], [ 93.70868, 7.22274 ], [ 93.70856, 7.22274 ], [ 93.70852, 7.22278 ], [ 93.70858, 7.22294 ], [ 93.70849, 7.22344 ], [ 93.70843, 7.22361 ], [ 93.70847, 7.22382 ], [ 93.70849, 7.22425 ], [ 93.70843, 7.22429 ], [ 93.7082, 7.22432 ], [ 93.70808, 7.2243 ], [ 93.70798, 7.2244 ], [ 93.70791, 7.22453 ], [ 93.7078, 7.22458 ], [ 93.70774, 7.22485 ], [ 93.7078, 7.22515 ], [ 93.70792, 7.22541 ], [ 93.70779, 7.22566 ], [ 93.70771, 7.22595 ], [ 93.70748, 7.22634 ], [ 93.70731, 7.22648 ], [ 93.70691, 7.2266 ], [ 93.70669, 7.22676 ], [ 93.70675, 7.227 ], [ 93.70703, 7.22715 ], [ 93.70731, 7.2274 ], [ 93.70813, 7.22844 ], [ 93.70837, 7.22892 ], [ 93.70861, 7.2291 ], [ 93.70871, 7.2294 ], [ 93.70872, 7.22991 ], [ 93.70861, 7.23019 ], [ 93.70869, 7.23051 ], [ 93.7089, 7.23053 ], [ 93.70912, 7.23049 ], [ 93.70994, 7.23 ], [ 93.71006, 7.22986 ], [ 93.70992, 7.22833 ], [ 93.71009, 7.22789 ], [ 93.71051, 7.22733 ], [ 93.71098, 7.22692 ], [ 93.71141, 7.22662 ], [ 93.71143, 7.22641 ], [ 93.71126, 7.2262 ], [ 93.7112, 7.22583 ], [ 93.71138, 7.22551 ], [ 93.71207, 7.22505 ], [ 93.71246, 7.22459 ], [ 93.71283, 7.22408 ], [ 93.71307, 7.22346 ], [ 93.71328, 7.22275 ], [ 93.71319, 7.22235 ], [ 93.71304, 7.22185 ], [ 93.71319, 7.22153 ], [ 93.71431, 7.22087 ], [ 93.71486, 7.22048 ], [ 93.71554, 7.2197 ], [ 93.71576, 7.21938 ], [ 93.71579, 7.2191 ], [ 93.71572, 7.21893 ], [ 93.71566, 7.21869 ], [ 93.71601, 7.218 ], [ 93.71638, 7.21709 ], [ 93.71694, 7.21635 ], [ 93.71838, 7.21479 ], [ 93.71923, 7.21383 ], [ 93.7199, 7.21331 ], [ 93.72005, 7.2133 ], [ 93.72022, 7.21339 ], [ 93.72032, 7.21349 ], [ 93.7204, 7.21351 ], [ 93.72052, 7.21348 ], [ 93.72059, 7.21342 ], [ 93.72059, 7.21328 ], [ 93.72051, 7.2131 ], [ 93.72052, 7.21303 ], [ 93.72065, 7.21296 ], [ 93.72095, 7.2126 ], [ 93.72099, 7.21252 ], [ 93.72096, 7.21236 ], [ 93.72092, 7.21231 ], [ 93.72079, 7.2123 ], [ 93.72054, 7.21241 ], [ 93.72047, 7.2124 ], [ 93.72025, 7.21223 ], [ 93.72017, 7.21222 ], [ 93.72002, 7.21225 ], [ 93.71994, 7.2122 ], [ 93.71987, 7.21203 ], [ 93.71965, 7.21175 ], [ 93.71949, 7.21165 ], [ 93.71923, 7.21155 ], [ 93.71915, 7.21146 ], [ 93.71915, 7.21138 ], [ 93.71925, 7.21127 ], [ 93.71945, 7.21123 ], [ 93.71954, 7.21119 ], [ 93.71956, 7.21111 ], [ 93.7195, 7.21076 ], [ 93.71939, 7.21038 ], [ 93.71936, 7.21009 ], [ 93.71906, 7.20915 ], [ 93.71898, 7.20898 ], [ 93.71884, 7.20856 ], [ 93.71874, 7.20844 ], [ 93.71867, 7.2083 ], [ 93.71869, 7.20816 ], [ 93.7188, 7.20809 ], [ 93.71911, 7.20807 ], [ 93.71918, 7.208 ], [ 93.71926, 7.20786 ], [ 93.71928, 7.2076 ], [ 93.71924, 7.20753 ], [ 93.71907, 7.20739 ], [ 93.71906, 7.20726 ], [ 93.7191, 7.20701 ], [ 93.71903, 7.20657 ], [ 93.71885, 7.20632 ], [ 93.71877, 7.20627 ], [ 93.71862, 7.20628 ], [ 93.71828, 7.20651 ], [ 93.71802, 7.20658 ], [ 93.71772, 7.20662 ], [ 93.71767, 7.20668 ], [ 93.71731, 7.20674 ], [ 93.71719, 7.20679 ], [ 93.71682, 7.20684 ], [ 93.71671, 7.20689 ], [ 93.71668, 7.20695 ], [ 93.71639, 7.20695 ], [ 93.71606, 7.20704 ], [ 93.71588, 7.20701 ], [ 93.71569, 7.20709 ], [ 93.71552, 7.20712 ], [ 93.71538, 7.20719 ], [ 93.71503, 7.20718 ], [ 93.71496, 7.20721 ], [ 93.71502, 7.20731 ], [ 93.715, 7.20737 ], [ 93.71464, 7.20725 ], [ 93.71435, 7.2071 ], [ 93.71424, 7.20707 ], [ 93.7141, 7.20708 ], [ 93.71388, 7.20723 ], [ 93.71367, 7.20726 ], [ 93.71343, 7.20718 ], [ 93.7131, 7.20718 ], [ 93.71295, 7.20722 ], [ 93.71281, 7.20741 ], [ 93.71252, 7.2076 ], [ 93.71232, 7.20758 ], [ 93.71224, 7.20754 ], [ 93.71212, 7.20754 ] ] ], [ [ [ 93.634397190072633, 7.3443927 ], [ 93.6347955, 7.3450425 ], [ 93.6356586, 7.3471424 ], [ 93.6350652, 7.3485736 ], [ 93.6341886, 7.3512621 ], [ 93.6341482, 7.3537633 ], [ 93.6338785, 7.3554352 ], [ 93.6335008, 7.3572007 ], [ 93.6330558, 7.3590331 ], [ 93.63284, 7.3598757 ], [ 93.6333255, 7.362631 ], [ 93.63308, 7.36461 ], [ 93.63298, 7.36681 ], [ 93.6330979, 7.3677965 ], [ 93.6327877, 7.3689334 ], [ 93.6331383, 7.3693413 ], [ 93.6331383, 7.3699031 ], [ 93.6334148, 7.3711402 ], [ 93.63325, 7.37164 ], [ 93.6336171, 7.3722437 ], [ 93.6342375, 7.3723105 ], [ 93.6347432, 7.3714412 ], [ 93.6354917, 7.371381 ], [ 93.6361053, 7.3714479 ], [ 93.6372651, 7.3714746 ], [ 93.6388633, 7.3723908 ], [ 93.6394094, 7.3729926 ], [ 93.6402658, 7.3731398 ], [ 93.6408795, 7.3726783 ], [ 93.6415538, 7.3722637 ], [ 93.6426327, 7.3714947 ], [ 93.6429766, 7.3709797 ], [ 93.6432598, 7.3704581 ], [ 93.6432867, 7.3701104 ], [ 93.6438532, 7.3695954 ], [ 93.6451697, 7.3691747 ], [ 93.6454764, 7.3690303 ], [ 93.6456434, 7.3688945 ], [ 93.6457167, 7.3688511 ], [ 93.6458025, 7.3687753 ], [ 93.6458915, 7.3687769 ], [ 93.6459508, 7.3687645 ], [ 93.6461785, 7.3686825 ], [ 93.6462831, 7.3686809 ], [ 93.646386, 7.3686701 ], [ 93.6465639, 7.3686082 ], [ 93.6468057, 7.3685092 ], [ 93.6471708, 7.3683854 ], [ 93.6472597, 7.3683746 ], [ 93.6473549, 7.3683699 ], [ 93.6475203, 7.3683606 ], [ 93.6478058, 7.3682802 ], [ 93.6485578, 7.3680187 ], [ 93.6489572, 7.3678949 ], [ 93.6492318, 7.3678578 ], [ 93.6495126, 7.3678547 ], [ 93.6500462, 7.3679444 ], [ 93.6506079, 7.3681301 ], [ 93.6513006, 7.3684086 ], [ 93.6516656, 7.3685386 ], [ 93.6522304, 7.3686376 ], [ 93.6524645, 7.368749 ], [ 93.652739, 7.3689842 ], [ 93.6534879, 7.3695938 ], [ 93.65419, 7.3702096 ], [ 93.6545863, 7.3705129 ], [ 93.6548733, 7.3707326 ], [ 93.6552384, 7.3711163 ], [ 93.6555629, 7.3714444 ], [ 93.6559436, 7.3717229 ], [ 93.6564054, 7.3721004 ], [ 93.6569234, 7.3725027 ], [ 93.6573228, 7.372905 ], [ 93.6576348, 7.3733723 ], [ 93.6578876, 7.3738705 ], [ 93.6582277, 7.3744677 ], [ 93.6585491, 7.3749226 ], [ 93.6588923, 7.3753744 ], [ 93.6593697, 7.3760119 ], [ 93.659869, 7.3766277 ], [ 93.6602434, 7.3771847 ], [ 93.6605804, 7.3777355 ], [ 93.6606928, 7.3778655 ], [ 93.6610766, 7.3780898 ], [ 93.6612223, 7.378267 ], [ 93.6613789, 7.3784749 ], [ 93.6614374, 7.3785176 ], [ 93.661476, 7.3785187 ], [ 93.6615863, 7.3784847 ], [ 93.6617253, 7.3784771 ], [ 93.6620077, 7.3784147 ], [ 93.6621148, 7.3783436 ], [ 93.6622207, 7.3783206 ], [ 93.6623762, 7.3783458 ], [ 93.6624831, 7.3784308 ], [ 93.662558, 7.3784679 ], [ 93.662714, 7.3784679 ], [ 93.662817, 7.3784896 ], [ 93.6629512, 7.378553 ], [ 93.6630682, 7.3786536 ], [ 93.663038, 7.3787673 ], [ 93.6630358, 7.3788121 ], [ 93.6630501, 7.378822 ], [ 93.6630755, 7.3788045 ], [ 93.6631075, 7.3787684 ], [ 93.6631571, 7.3787552 ], [ 93.6631891, 7.3787793 ], [ 93.6632597, 7.378869 ], [ 93.6635156, 7.3790452 ], [ 93.6637498, 7.3791545 ], [ 93.6640088, 7.3792489 ], [ 93.6641242, 7.3793387 ], [ 93.6642537, 7.3793882 ], [ 93.6646094, 7.3794052 ], [ 93.6648996, 7.3794392 ], [ 93.6650229, 7.3793866 ], [ 93.6651851, 7.379286 ], [ 93.6653177, 7.3791932 ], [ 93.6653614, 7.3790648 ], [ 93.6653833, 7.378958 ], [ 93.6654114, 7.3789008 ], [ 93.6654722, 7.378825 ], [ 93.6654987, 7.3787275 ], [ 93.6655377, 7.3785604 ], [ 93.6655081, 7.3784397 ], [ 93.6655346, 7.3783484 ], [ 93.6656345, 7.3782154 ], [ 93.6656844, 7.3781395 ], [ 93.6657437, 7.3780359 ], [ 93.6657889, 7.3779895 ], [ 93.6659387, 7.3778641 ], [ 93.6660167, 7.3777202 ], [ 93.6661321, 7.3776135 ], [ 93.666388, 7.3773504 ], [ 93.6666142, 7.3771307 ], [ 93.6668607, 7.3769822 ], [ 93.6671915, 7.3767346 ], [ 93.6675129, 7.3765227 ], [ 93.6679326, 7.3763942 ], [ 93.6682758, 7.3763494 ], [ 93.6686456, 7.3763834 ], [ 93.6689576, 7.3763803 ], [ 93.6693882, 7.3763463 ], [ 93.6697829, 7.3762488 ], [ 93.6700872, 7.3761714 ], [ 93.6703228, 7.3761173 ], [ 93.6706785, 7.3759254 ], [ 93.6709515, 7.3756253 ], [ 93.6711606, 7.3753406 ], [ 93.6712963, 7.3749243 ], [ 93.6714118, 7.3745329 ], [ 93.6715091, 7.3738595 ], [ 93.6715444, 7.3735969 ], [ 93.6714262, 7.3733839 ], [ 93.6713326, 7.3732818 ], [ 93.6712265, 7.3731271 ], [ 93.671111, 7.3730497 ], [ 93.6709644, 7.3729507 ], [ 93.6708832, 7.3728702 ], [ 93.6708208, 7.3727155 ], [ 93.6707366, 7.3724865 ], [ 93.670593, 7.3723101 ], [ 93.6704558, 7.3722916 ], [ 93.6702592, 7.3723875 ], [ 93.6700595, 7.372437 ], [ 93.6699752, 7.3724958 ], [ 93.669944, 7.3726691 ], [ 93.6699883, 7.3728244 ], [ 93.6700478, 7.372925 ], [ 93.6700589, 7.372983 ], [ 93.6700489, 7.3730388 ], [ 93.6700103, 7.3731668 ], [ 93.6699838, 7.3732128 ], [ 93.6698669, 7.3733298 ], [ 93.6698239, 7.3733812 ], [ 93.6697908, 7.3734272 ], [ 93.6697764, 7.3734731 ], [ 93.6697798, 7.373518 ], [ 93.6697963, 7.3735366 ], [ 93.6698206, 7.3735585 ], [ 93.6698206, 7.3735836 ], [ 93.6697963, 7.3736187 ], [ 93.6697709, 7.3736526 ], [ 93.6697169, 7.3737532 ], [ 93.6696529, 7.3737926 ], [ 93.6696176, 7.3738429 ], [ 93.6695536, 7.3738955 ], [ 93.6695051, 7.3739436 ], [ 93.6694984, 7.374018 ], [ 93.6694962, 7.3740836 ], [ 93.6694653, 7.3741383 ], [ 93.6693991, 7.3741646 ], [ 93.6693285, 7.3741712 ], [ 93.6691564, 7.3741996 ], [ 93.6690991, 7.3742324 ], [ 93.6690417, 7.3742434 ], [ 93.6689998, 7.3742324 ], [ 93.6689424, 7.3741865 ], [ 93.6689027, 7.3740968 ], [ 93.66881, 7.3739786 ], [ 93.668735, 7.3739524 ], [ 93.6686247, 7.373983 ], [ 93.6685629, 7.3740574 ], [ 93.668468, 7.374134 ], [ 93.6683533, 7.3741383 ], [ 93.6683202, 7.3740793 ], [ 93.6682673, 7.3739786 ], [ 93.668179, 7.3739195 ], [ 93.6681415, 7.3738101 ], [ 93.6681062, 7.3737664 ], [ 93.6680687, 7.373762 ], [ 93.66804, 7.3738014 ], [ 93.6680113, 7.3738145 ], [ 93.6679098, 7.373716 ], [ 93.6678039, 7.373657 ], [ 93.6677355, 7.3735366 ], [ 93.6676914, 7.3734097 ], [ 93.667607, 7.3733611 ], [ 93.6674437, 7.3733173 ], [ 93.6671944, 7.3733873 ], [ 93.6670642, 7.3734464 ], [ 93.6669076, 7.3735121 ], [ 93.6667906, 7.3735165 ], [ 93.6666516, 7.3735493 ], [ 93.6665215, 7.3736127 ], [ 93.6664111, 7.3736499 ], [ 93.6663074, 7.3736434 ], [ 93.6661309, 7.373674 ], [ 93.6660052, 7.3737178 ], [ 93.665939, 7.3736215 ], [ 93.6658926, 7.3735777 ], [ 93.6657647, 7.3736105 ], [ 93.6656543, 7.3734114 ], [ 93.6654999, 7.3733502 ], [ 93.6654822, 7.3732561 ], [ 93.6655506, 7.3732035 ], [ 93.665661, 7.3731948 ], [ 93.6657757, 7.3732014 ], [ 93.6659853, 7.3731795 ], [ 93.6661729, 7.3731423 ], [ 93.6664376, 7.3730723 ], [ 93.6666274, 7.3730022 ], [ 93.6667752, 7.3728819 ], [ 93.666837, 7.3727637 ], [ 93.6668811, 7.3726149 ], [ 93.6668833, 7.3724508 ], [ 93.6668502, 7.3723436 ], [ 93.6667598, 7.3722036 ], [ 93.6667399, 7.3719519 ], [ 93.6668458, 7.3717265 ], [ 93.666912, 7.3715734 ], [ 93.6669539, 7.371499 ], [ 93.6669694, 7.3713939 ], [ 93.6669297, 7.3713195 ], [ 93.6668524, 7.3712911 ], [ 93.6668414, 7.3711707 ], [ 93.6667664, 7.370942 ], [ 93.6666561, 7.3708238 ], [ 93.6665193, 7.370675 ], [ 93.6665943, 7.3705919 ], [ 93.6667443, 7.3705613 ], [ 93.6667576, 7.3704037 ], [ 93.6666252, 7.3703074 ], [ 93.6665546, 7.3701761 ], [ 93.6666428, 7.3700361 ], [ 93.6667223, 7.3698435 ], [ 93.6669826, 7.3698523 ], [ 93.6675431, 7.3699223 ], [ 93.6677505, 7.3699004 ], [ 93.6679799, 7.3698041 ], [ 93.6681476, 7.3696597 ], [ 93.6683065, 7.3694715 ], [ 93.668483, 7.3694409 ], [ 93.6687125, 7.3694497 ], [ 93.668818, 7.3695044 ], [ 93.6688577, 7.36957 ], [ 93.6689724, 7.3696291 ], [ 93.6690298, 7.3696772 ], [ 93.6691181, 7.3697932 ], [ 93.6692041, 7.3698413 ], [ 93.6693696, 7.3698588 ], [ 93.6695086, 7.3698151 ], [ 93.6696961, 7.3698523 ], [ 93.6697756, 7.370023 ], [ 93.6698153, 7.3700995 ], [ 93.6698837, 7.3701871 ], [ 93.6699256, 7.3701914 ], [ 93.669977, 7.3701799 ], [ 93.6700961, 7.3699742 ], [ 93.6702197, 7.3696175 ], [ 93.6703851, 7.3692193 ], [ 93.6703873, 7.3689676 ], [ 93.6703631, 7.368821 ], [ 93.6702638, 7.3686635 ], [ 93.6702285, 7.3684512 ], [ 93.6701667, 7.3683046 ], [ 93.6701601, 7.368228 ], [ 93.6700917, 7.3681689 ], [ 93.6700409, 7.3681624 ], [ 93.669977, 7.3682018 ], [ 93.6699218, 7.3682696 ], [ 93.6698049, 7.3683199 ], [ 93.6696063, 7.3682915 ], [ 93.6694871, 7.3681624 ], [ 93.6694187, 7.3680223 ], [ 93.6693834, 7.367891 ], [ 93.6691893, 7.367832 ], [ 93.6690856, 7.3677794 ], [ 93.6689554, 7.3675519 ], [ 93.6687193, 7.3672893 ], [ 93.6684479, 7.3670004 ], [ 93.6681986, 7.3665628 ], [ 93.6679747, 7.3660322 ], [ 93.6678624, 7.3657815 ], [ 93.6677926, 7.3656591 ], [ 93.6676801, 7.3656263 ], [ 93.6675004, 7.3656361 ], [ 93.6672601, 7.3657197 ], [ 93.6670511, 7.3658156 ], [ 93.6668046, 7.3658589 ], [ 93.6665113, 7.3657444 ], [ 93.6659933, 7.3655464 ], [ 93.6656969, 7.3653669 ], [ 93.6655845, 7.3653266 ], [ 93.665441, 7.3653823 ], [ 93.6652662, 7.365274 ], [ 93.6651664, 7.3651472 ], [ 93.6650977, 7.3649646 ], [ 93.6651133, 7.364748 ], [ 93.6652288, 7.3644694 ], [ 93.6652662, 7.3643271 ], [ 93.6652569, 7.3641909 ], [ 93.6653068, 7.3640455 ], [ 93.6652662, 7.363965 ], [ 93.6653037, 7.3638103 ], [ 93.6654035, 7.3637051 ], [ 93.6655346, 7.3635844 ], [ 93.6654597, 7.3634606 ], [ 93.665441, 7.3633059 ], [ 93.6655221, 7.3630954 ], [ 93.665649, 7.3630042 ], [ 93.6658222, 7.3630058 ], [ 93.6660203, 7.3629609 ], [ 93.666103, 7.3629068 ], [ 93.6661732, 7.3628603 ], [ 93.6661748, 7.3626932 ], [ 93.666142, 7.362554 ], [ 93.6661592, 7.3624751 ], [ 93.666156, 7.3624317 ], [ 93.6661202, 7.3623621 ], [ 93.6660874, 7.3623327 ], [ 93.6660952, 7.3622987 ], [ 93.6660843, 7.3622724 ], [ 93.6660406, 7.3622538 ], [ 93.6660141, 7.3622383 ], [ 93.6660156, 7.3621826 ], [ 93.666039, 7.3621207 ], [ 93.6660281, 7.3620356 ], [ 93.6661654, 7.3619969 ], [ 93.6663355, 7.3619846 ], [ 93.6664384, 7.3620851 ], [ 93.6664915, 7.36213 ], [ 93.666543, 7.3622182 ], [ 93.6665664, 7.3622724 ], [ 93.6665461, 7.3623404 ], [ 93.666518, 7.3624101 ], [ 93.666532, 7.362441 ], [ 93.6665664, 7.3624751 ], [ 93.6665882, 7.362472 ], [ 93.6665991, 7.3624642 ], [ 93.6666319, 7.3624286 ], [ 93.6666709, 7.3624333 ], [ 93.6667005, 7.3624611 ], [ 93.666713, 7.3625308 ], [ 93.6666849, 7.3626097 ], [ 93.6666834, 7.3626484 ], [ 93.6666943, 7.3626716 ], [ 93.6667239, 7.3626592 ], [ 93.666752, 7.3626422 ], [ 93.6667832, 7.362636 ], [ 93.6668098, 7.3626824 ], [ 93.6667942, 7.3627257 ], [ 93.666791, 7.3627613 ], [ 93.666816, 7.3628077 ], [ 93.666841, 7.362882 ], [ 93.66683, 7.3630522 ], [ 93.6667161, 7.3631853 ], [ 93.6667193, 7.3633121 ], [ 93.6667567, 7.3633276 ], [ 93.6668035, 7.3633075 ], [ 93.6668191, 7.3632564 ], [ 93.6668644, 7.3631915 ], [ 93.6669471, 7.3631497 ], [ 93.6670204, 7.3631543 ], [ 93.667075, 7.3632178 ], [ 93.6670656, 7.3632905 ], [ 93.6670235, 7.3633849 ], [ 93.6669767, 7.363487 ], [ 93.666972, 7.3635721 ], [ 93.6670141, 7.3636479 ], [ 93.6670407, 7.3636943 ], [ 93.6670656, 7.3637593 ], [ 93.6670906, 7.363815 ], [ 93.6671249, 7.3638785 ], [ 93.6671468, 7.3639558 ], [ 93.6672107, 7.3640022 ], [ 93.6673168, 7.3640781 ], [ 93.6673948, 7.3640904 ], [ 93.6674884, 7.3640951 ], [ 93.6676226, 7.3641508 ], [ 93.6677412, 7.3642127 ], [ 93.6677708, 7.3642514 ], [ 93.6677849, 7.3643024 ], [ 93.6677599, 7.3643875 ], [ 93.6677895, 7.3644076 ], [ 93.6678145, 7.3644123 ], [ 93.6678519, 7.3643396 ], [ 93.6679019, 7.3642312 ], [ 93.6679393, 7.3641941 ], [ 93.6680501, 7.3641523 ], [ 93.6681421, 7.3641384 ], [ 93.6682014, 7.364092 ], [ 93.6682482, 7.3640084 ], [ 93.6682748, 7.3638785 ], [ 93.6682904, 7.363682 ], [ 93.668306, 7.3635319 ], [ 93.6683637, 7.3633818 ], [ 93.6684417, 7.3633029 ], [ 93.6685353, 7.3632611 ], [ 93.6686196, 7.3631961 ], [ 93.6687568, 7.3629748 ], [ 93.6687787, 7.3628387 ], [ 93.6688115, 7.3627474 ], [ 93.6688551, 7.3627041 ], [ 93.6689519, 7.3625942 ], [ 93.6690626, 7.3625354 ], [ 93.6692514, 7.3624812 ], [ 93.66937, 7.3624735 ], [ 93.6694121, 7.362523 ], [ 93.6694152, 7.3625973 ], [ 93.6693809, 7.3627133 ], [ 93.6693887, 7.3627907 ], [ 93.6693575, 7.3629269 ], [ 93.6693466, 7.363012 ], [ 93.66937, 7.3630893 ], [ 93.6693653, 7.3631683 ], [ 93.6693045, 7.3633385 ], [ 93.6692701, 7.3634978 ], [ 93.6692405, 7.3636665 ], [ 93.669267, 7.3637887 ], [ 93.6693045, 7.3639202 ], [ 93.6693965, 7.3640549 ], [ 93.669462, 7.3642947 ], [ 93.6695463, 7.3646568 ], [ 93.6696227, 7.3648285 ], [ 93.6697413, 7.3648858 ], [ 93.6698724, 7.3649399 ], [ 93.6699551, 7.3650188 ], [ 93.6701126, 7.3651519 ], [ 93.6701953, 7.3652695 ], [ 93.6702546, 7.3653267 ], [ 93.6702764, 7.3654258 ], [ 93.6702296, 7.3655681 ], [ 93.6702203, 7.3656965 ], [ 93.6702468, 7.3657832 ], [ 93.670253, 7.3659658 ], [ 93.670278, 7.3660942 ], [ 93.6703779, 7.3662071 ], [ 93.6704918, 7.3662489 ], [ 93.6706306, 7.3662628 ], [ 93.6707133, 7.3662814 ], [ 93.6707897, 7.3663387 ], [ 93.6708147, 7.366399 ], [ 93.6707851, 7.3665522 ], [ 93.6708194, 7.3666172 ], [ 93.6708709, 7.3666589 ], [ 93.67103, 7.3666961 ], [ 93.6713249, 7.3667177 ], [ 93.6715456, 7.3667164 ], [ 93.6718576, 7.3667814 ], [ 93.6720698, 7.3669238 ], [ 93.6722009, 7.3670785 ], [ 93.6723382, 7.3672054 ], [ 93.6724692, 7.3672177 ], [ 93.6727732, 7.3671872 ], [ 93.6730887, 7.367196 ], [ 93.6733447, 7.3671829 ], [ 93.6735212, 7.367126 ], [ 93.6738985, 7.36701 ], [ 93.6742272, 7.3669837 ], [ 93.6747148, 7.3670494 ], [ 93.6750017, 7.3671566 ], [ 93.6752135, 7.3673317 ], [ 93.6752731, 7.3674498 ], [ 93.6753084, 7.367638 ], [ 93.6752686, 7.3678743 ], [ 93.6751098, 7.3683907 ], [ 93.6751076, 7.3688481 ], [ 93.6751561, 7.3690384 ], [ 93.6752201, 7.3691369 ], [ 93.6754496, 7.3694192 ], [ 93.6754893, 7.3695505 ], [ 93.675604, 7.3697146 ], [ 93.6759041, 7.3699268 ], [ 93.6763101, 7.3702901 ], [ 93.6766101, 7.3705002 ], [ 93.6770272, 7.3707212 ], [ 93.6775258, 7.3712923 ], [ 93.677667, 7.3716271 ], [ 93.6776869, 7.3718634 ], [ 93.677656, 7.3719268 ], [ 93.6774662, 7.3719881 ], [ 93.6773669, 7.3720756 ], [ 93.6772941, 7.3723054 ], [ 93.6772544, 7.3723973 ], [ 93.6771267, 7.3723474 ], [ 93.6770394, 7.372335 ], [ 93.6770222, 7.3724015 ], [ 93.6770378, 7.3724541 ], [ 93.677069, 7.372547 ], [ 93.6770519, 7.3726971 ], [ 93.677069, 7.3728564 ], [ 93.6771611, 7.3730081 ], [ 93.6771985, 7.3731489 ], [ 93.6773857, 7.3733949 ], [ 93.6776322, 7.3736254 ], [ 93.677949, 7.3740215 ], [ 93.6783749, 7.3743588 ], [ 93.6789599, 7.3746451 ], [ 93.6797587, 7.3750783 ], [ 93.6804359, 7.3754574 ], [ 93.6810615, 7.3759773 ], [ 93.6812893, 7.3763053 ], [ 93.681528, 7.3768375 ], [ 93.6818988, 7.3774437 ], [ 93.6822297, 7.378052 ], [ 93.6826026, 7.3788682 ], [ 93.6826909, 7.3793583 ], [ 93.6826599, 7.3796088 ], [ 93.6827018, 7.3797532 ], [ 93.682682, 7.3798714 ], [ 93.6825981, 7.3799239 ], [ 93.682543, 7.3800311 ], [ 93.6825496, 7.3801427 ], [ 93.6826246, 7.3802631 ], [ 93.6826798, 7.3804228 ], [ 93.6826864, 7.3805541 ], [ 93.6826599, 7.3807335 ], [ 93.682607, 7.3808079 ], [ 93.6824966, 7.3808845 ], [ 93.6822914, 7.3809304 ], [ 93.6821238, 7.3809436 ], [ 93.6820936, 7.380953 ], [ 93.6820598, 7.3809676 ], [ 93.6820752, 7.3810238 ], [ 93.6821798, 7.3811035 ], [ 93.6822507, 7.3811723 ], [ 93.6822717, 7.3812672 ], [ 93.6823388, 7.3813647 ], [ 93.6823481, 7.3814668 ], [ 93.682359, 7.381555 ], [ 93.682462, 7.3818304 ], [ 93.6825743, 7.3822435 ], [ 93.6824963, 7.3823271 ], [ 93.6824776, 7.3824106 ], [ 93.6824464, 7.382457 ], [ 93.6823013, 7.3825421 ], [ 93.6822218, 7.3826102 ], [ 93.6822342, 7.3827123 ], [ 93.682253, 7.3828531 ], [ 93.6822342, 7.3829614 ], [ 93.6822015, 7.3830001 ], [ 93.682164, 7.3830125 ], [ 93.6821047, 7.38298 ], [ 93.6819799, 7.3829382 ], [ 93.6819035, 7.3829599 ], [ 93.6818754, 7.3830156 ], [ 93.681905, 7.3831239 ], [ 93.6820299, 7.3833049 ], [ 93.6820517, 7.3833792 ], [ 93.6819518, 7.3835385 ], [ 93.6820798, 7.3834937 ], [ 93.6821047, 7.3835416 ], [ 93.6820907, 7.3835927 ], [ 93.6819877, 7.3836345 ], [ 93.6819456, 7.383667 ], [ 93.6819206, 7.3836979 ], [ 93.6819222, 7.3837613 ], [ 93.6819191, 7.3837629 ], [ 93.6818582, 7.3837552 ], [ 93.6818504, 7.3837969 ], [ 93.6818036, 7.3839315 ], [ 93.6819893, 7.3841017 ], [ 93.6821063, 7.3843416 ], [ 93.6822077, 7.3845365 ], [ 93.6823809, 7.3848645 ], [ 93.682412, 7.3849687 ], [ 93.6823878, 7.3850081 ], [ 93.6822984, 7.3850147 ], [ 93.6822554, 7.3850322 ], [ 93.6822554, 7.3850738 ], [ 93.6823094, 7.3850825 ], [ 93.6823977, 7.3850606 ], [ 93.682412, 7.3850366 ], [ 93.6824738, 7.3850366 ], [ 93.6825334, 7.3850902 ], [ 93.6825643, 7.3851274 ], [ 93.6826161, 7.3851219 ], [ 93.6826614, 7.3850858 ], [ 93.6826845, 7.3850289 ], [ 93.6827474, 7.3849392 ], [ 93.6828246, 7.3848648 ], [ 93.6828831, 7.3848287 ], [ 93.6829471, 7.3848156 ], [ 93.6829868, 7.3848112 ], [ 93.6830155, 7.3848385 ], [ 93.683058, 7.3848382 ], [ 93.6830949, 7.3847827 ], [ 93.6832008, 7.3847412 ], [ 93.6832968, 7.3847554 ], [ 93.6834535, 7.3848549 ], [ 93.6835838, 7.3849852 ], [ 93.6839192, 7.3853782 ], [ 93.6841096, 7.3856428 ], [ 93.684186, 7.3857047 ], [ 93.6842217, 7.3857196 ], [ 93.6842382, 7.3857579 ], [ 93.6842195, 7.3858268 ], [ 93.6842283, 7.3858596 ], [ 93.6842548, 7.385864 ], [ 93.6843154, 7.3858662 ], [ 93.6843452, 7.3858826 ], [ 93.6844589, 7.3859515 ], [ 93.6845548, 7.3860423 ], [ 93.6848065, 7.3863343 ], [ 93.6850007, 7.3865312 ], [ 93.6852743, 7.3866888 ], [ 93.6856494, 7.3869338 ], [ 93.685945, 7.3870607 ], [ 93.6862657, 7.3870642 ], [ 93.6868658, 7.3870511 ], [ 93.6872387, 7.387132 ], [ 93.6877064, 7.3873749 ], [ 93.6880948, 7.3876725 ], [ 93.688728, 7.3879985 ], [ 93.6893877, 7.3884865 ], [ 93.6900121, 7.3889941 ], [ 93.6905924, 7.3896089 ], [ 93.6907402, 7.3897512 ], [ 93.6910094, 7.3898606 ], [ 93.6912345, 7.3898671 ], [ 93.6915412, 7.3897949 ], [ 93.691678, 7.3898299 ], [ 93.6917398, 7.3898715 ], [ 93.6918567, 7.3900225 ], [ 93.6918655, 7.390121 ], [ 93.6918633, 7.390215 ], [ 93.6919185, 7.3902697 ], [ 93.6920156, 7.3902785 ], [ 93.6921413, 7.3902216 ], [ 93.6922185, 7.3900684 ], [ 93.6922605, 7.3899043 ], [ 93.692298, 7.3896308 ], [ 93.6923686, 7.3893048 ], [ 93.6925252, 7.3891451 ], [ 93.6927834, 7.3889394 ], [ 93.6931496, 7.3888125 ], [ 93.693538, 7.3888365 ], [ 93.6941425, 7.3890247 ], [ 93.6945617, 7.3892895 ], [ 93.6949126, 7.3895805 ], [ 93.6950891, 7.3898212 ], [ 93.6954134, 7.3902194 ], [ 93.6955259, 7.3904229 ], [ 93.6956363, 7.3905783 ], [ 93.6957113, 7.3906045 ], [ 93.6959341, 7.3906111 ], [ 93.6960511, 7.3906045 ], [ 93.6962585, 7.3905104 ], [ 93.6963357, 7.3904579 ], [ 93.6964703, 7.3903244 ], [ 93.6965652, 7.3901625 ], [ 93.69664, 7.39001 ], [ 93.6967108, 7.389773 ], [ 93.6968167, 7.3897118 ], [ 93.6969336, 7.3897052 ], [ 93.6970594, 7.3896943 ], [ 93.6971477, 7.3896418 ], [ 93.6972381, 7.3895608 ], [ 93.6973286, 7.389528 ], [ 93.697536, 7.3895433 ], [ 93.6979067, 7.3896658 ], [ 93.6979949, 7.389738 ], [ 93.698006, 7.3898102 ], [ 93.6981405, 7.3898212 ], [ 93.6982553, 7.3899196 ], [ 93.6982619, 7.3899809 ], [ 93.698167, 7.3901669 ], [ 93.6981582, 7.3902632 ], [ 93.6981847, 7.3903266 ], [ 93.6982222, 7.3903398 ], [ 93.698295, 7.3902916 ], [ 93.6984494, 7.390261 ], [ 93.6990365, 7.3900932 ], [ 93.6994227, 7.3901736 ], [ 93.6995323, 7.3903533 ], [ 93.6995657, 7.3906795 ], [ 93.6995323, 7.3910673 ], [ 93.6992987, 7.3912942 ], [ 93.6991604, 7.3913793 ], [ 93.699127, 7.3915685 ], [ 93.6994179, 7.3915685 ], [ 93.6997564, 7.3914739 ], [ 93.6999376, 7.3910342 ], [ 93.7006624, 7.3909632 ], [ 93.7020106, 7.3911762 ], [ 93.7043607, 7.3917676 ], [ 93.7053238, 7.3923161 ], [ 93.7053906, 7.3929213 ], [ 93.70713, 7.39529 ], [ 93.70772, 7.39747 ], [ 93.70648, 7.40007 ], [ 93.7047819, 7.4002171 ], [ 93.7045661, 7.400645 ], [ 93.7034467, 7.4015411 ], [ 93.7038378, 7.4020359 ], [ 93.7050111, 7.4024906 ], [ 93.7059282, 7.4040554 ], [ 93.7068415, 7.4056223 ], [ 93.7079743, 7.4093123 ], [ 93.708035, 7.4098606 ], [ 93.7077923, 7.4101013 ], [ 93.7076911, 7.4114119 ], [ 93.7067201, 7.4118131 ], [ 93.7065718, 7.4120472 ], [ 93.70662, 7.4126 ], [ 93.7069157, 7.4127493 ], [ 93.7076574, 7.4135985 ], [ 93.7087633, 7.4159656 ], [ 93.7097141, 7.4174701 ], [ 93.7101996, 7.4183193 ], [ 93.71075, 7.41968 ], [ 93.7096371, 7.4203549 ], [ 93.7092853, 7.4221154 ], [ 93.7097034, 7.4239208 ], [ 93.7095011, 7.4251244 ], [ 93.7084492, 7.4255256 ], [ 93.707586, 7.4267693 ], [ 93.7065071, 7.4275984 ], [ 93.70641, 7.42793 ], [ 93.707141, 7.4288822 ], [ 93.7077074, 7.4290561 ], [ 93.7076, 7.43002 ], [ 93.7078018, 7.4329343 ], [ 93.7072219, 7.4353949 ], [ 93.7075321, 7.4364513 ], [ 93.7073028, 7.4383235 ], [ 93.70653, 7.43965 ], [ 93.7059272, 7.4409045 ], [ 93.7053203, 7.4413725 ], [ 93.7051315, 7.4422685 ], [ 93.7054282, 7.4432045 ], [ 93.7057654, 7.4437796 ], [ 93.7058328, 7.4442342 ], [ 93.7063048, 7.44394 ], [ 93.7068038, 7.4435389 ], [ 93.7072893, 7.4433383 ], [ 93.70821, 7.44294 ], [ 93.70905, 7.443 ], [ 93.7101754, 7.4442342 ], [ 93.7107418, 7.4446354 ], [ 93.7118747, 7.4443947 ], [ 93.7122658, 7.4439133 ], [ 93.7122388, 7.442897 ], [ 93.712522, 7.442215 ], [ 93.7127243, 7.4400753 ], [ 93.7129833, 7.4393753 ], [ 93.7135065, 7.4388852 ], [ 93.713956, 7.4379191 ], [ 93.7137462, 7.4368033 ], [ 93.714437, 7.435903 ], [ 93.7151195, 7.4352147 ], [ 93.7150622, 7.4345906 ], [ 93.7158442, 7.4335126 ], [ 93.7168551, 7.4328885 ], [ 93.7179994, 7.4326804 ], [ 93.718686, 7.4318861 ], [ 93.7184381, 7.4313188 ], [ 93.7194108, 7.4302029 ], [ 93.7196587, 7.4289169 ], [ 93.7193345, 7.4270257 ], [ 93.7201164, 7.4256261 ], [ 93.7196015, 7.4242266 ], [ 93.7204407, 7.4218247 ], [ 93.7212608, 7.4209926 ], [ 93.7211845, 7.4200847 ], [ 93.720536, 7.4198389 ], [ 93.7203644, 7.4182313 ], [ 93.721, 7.41165 ], [ 93.7205551, 7.4087181 ], [ 93.7207, 7.40523 ], [ 93.7205932, 7.4034602 ], [ 93.72153, 7.40061 ], [ 93.72442, 7.39699 ], [ 93.7261624, 7.3949869 ], [ 93.7274784, 7.3943816 ], [ 93.7289088, 7.394741 ], [ 93.7299578, 7.3929631 ], [ 93.7306826, 7.392547 ], [ 93.7311403, 7.3926794 ], [ 93.7312166, 7.3918661 ], [ 93.7309305, 7.3911663 ], [ 93.7350501, 7.3889155 ], [ 93.7369002, 7.3875158 ], [ 93.740276, 7.3845842 ], [ 93.74485, 7.38205 ], [ 93.74653, 7.38201 ], [ 93.7480575, 7.3819172 ], [ 93.748973, 7.3809148 ], [ 93.7504035, 7.3780776 ], [ 93.7514143, 7.3761294 ], [ 93.7527303, 7.3760537 ], [ 93.7541417, 7.3764699 ], [ 93.7562205, 7.3734435 ], [ 93.756068, 7.372668 ], [ 93.7562587, 7.3715899 ], [ 93.7566211, 7.3705685 ], [ 93.7578989, 7.3687905 ], [ 93.7567164, 7.3673151 ], [ 93.7559917, 7.3661424 ], [ 93.7551525, 7.3648562 ], [ 93.7544468, 7.3628512 ], [ 93.7543896, 7.3617162 ], [ 93.755553, 7.3606002 ], [ 93.7557247, 7.3599004 ], [ 93.7557056, 7.3594275 ], [ 93.7550762, 7.3593897 ], [ 93.7544047, 7.359043 ], [ 93.7534932, 7.359087 ], [ 93.75211, 7.35833 ], [ 93.7503804, 7.3578702 ], [ 93.7496557, 7.3581634 ], [ 93.7491789, 7.3578324 ], [ 93.7476245, 7.3561773 ], [ 93.7469569, 7.3542385 ], [ 93.7469951, 7.3535764 ], [ 93.7471, 7.3528387 ], [ 93.7475482, 7.3528576 ], [ 93.747901, 7.3528198 ], [ 93.74828, 7.3526 ], [ 93.74822, 7.35166 ], [ 93.7474051, 7.3512498 ], [ 93.7465946, 7.3510512 ], [ 93.7461654, 7.3505594 ], [ 93.74573, 7.35054 ], [ 93.74465, 7.34999 ], [ 93.7442486, 7.3490839 ], [ 93.7435334, 7.3486962 ], [ 93.74148, 7.34644 ], [ 93.74099, 7.34514 ], [ 93.740374187500578, 7.3441927 ], [ 93.7395759, 7.3429647 ], [ 93.73856, 7.34189 ], [ 93.73839, 7.34173 ], [ 93.73742, 7.33917 ], [ 93.73696, 7.33748 ], [ 93.73692, 7.33559 ], [ 93.73679, 7.33379 ], [ 93.73618, 7.33216 ], [ 93.7351225, 7.3309339 ], [ 93.73531, 7.33045 ], [ 93.73503, 7.32914 ], [ 93.73487, 7.32767 ], [ 93.7340654, 7.3263532 ], [ 93.7333215, 7.3254073 ], [ 93.7329687, 7.3241115 ], [ 93.73212, 7.32299 ], [ 93.7312808, 7.3230805 ], [ 93.7306419, 7.322986 ], [ 93.7298885, 7.3226549 ], [ 93.7289826, 7.3220307 ], [ 93.7284676, 7.3212172 ], [ 93.728706, 7.3204795 ], [ 93.7281529, 7.3188053 ], [ 93.7274091, 7.3177554 ], [ 93.7267511, 7.3166677 ], [ 93.7265222, 7.3154192 ], [ 93.72525, 7.31294 ], [ 93.7253016, 7.3117019 ], [ 93.72483, 7.3111 ], [ 93.7249106, 7.3102453 ], [ 93.7246, 7.30995 ], [ 93.72371, 7.30915 ], [ 93.7227173, 7.3078238 ], [ 93.7214903, 7.3070716 ], [ 93.72002, 7.30722 ], [ 93.71969, 7.30711 ], [ 93.71851, 7.30643 ], [ 93.71834, 7.30636 ], [ 93.7176467, 7.3061821 ], [ 93.7172017, 7.3065098 ], [ 93.7167971, 7.3068509 ], [ 93.7162576, 7.307065 ], [ 93.7154282, 7.307085 ], [ 93.7145516, 7.3070716 ], [ 93.71383, 7.30654 ], [ 93.7131288, 7.3062958 ], [ 93.71179, 7.30544 ], [ 93.7112003, 7.3054263 ], [ 93.7100365, 7.3054505 ], [ 93.7081769, 7.3053465 ], [ 93.7065367, 7.3048735 ], [ 93.7050872, 7.3028209 ], [ 93.70531, 7.30123 ], [ 93.7052302, 7.2990752 ], [ 93.7045532, 7.2990941 ], [ 93.7040478, 7.2989428 ], [ 93.70333, 7.29827 ], [ 93.70157, 7.29737 ], [ 93.7008245, 7.2967105 ], [ 93.7008054, 7.296247 ], [ 93.7000139, 7.2960294 ], [ 93.6991938, 7.2952065 ], [ 93.6989363, 7.2945444 ], [ 93.6982211, 7.294043 ], [ 93.6972961, 7.2937214 ], [ 93.696209, 7.2931633 ], [ 93.6954366, 7.2931255 ], [ 93.6945401, 7.2933809 ], [ 93.6932242, 7.2932201 ], [ 93.6927378, 7.2927282 ], [ 93.6924136, 7.2922553 ], [ 93.6921656, 7.2919242 ], [ 93.6910022, 7.2919715 ], [ 93.6895622, 7.291508 ], [ 93.6878457, 7.2912905 ], [ 93.6865297, 7.290931 ], [ 93.6855761, 7.2905337 ], [ 93.6852996, 7.2900608 ], [ 93.6843078, 7.2888027 ], [ 93.683564, 7.2882541 ], [ 93.6828583, 7.2872703 ], [ 93.6819714, 7.2867784 ], [ 93.6799116, 7.2856906 ], [ 93.6793204, 7.2851987 ], [ 93.6782, 7.28429 ], [ 93.67744, 7.28344 ], [ 93.67704, 7.28213 ], [ 93.67692, 7.28066 ], [ 93.6767646, 7.2793718 ], [ 93.6774894, 7.2787286 ], [ 93.6775752, 7.2783313 ], [ 93.67715, 7.2781 ], [ 93.6765739, 7.2775556 ], [ 93.6757729, 7.2770732 ], [ 93.67541, 7.27633 ], [ 93.6747716, 7.2751246 ], [ 93.6738084, 7.2729962 ], [ 93.67267, 7.27072 ], [ 93.6719298, 7.269988 ], [ 93.67083, 7.26809 ], [ 93.67048, 7.26719 ], [ 93.6701274, 7.2661002 ], [ 93.66985, 7.26507 ], [ 93.66962, 7.26401 ], [ 93.6699081, 7.2627231 ], [ 93.669212, 7.2622406 ], [ 93.6689354, 7.2613892 ], [ 93.669231, 7.2608122 ], [ 93.6686957, 7.2599346 ], [ 93.6677786, 7.2588577 ], [ 93.667138, 7.2583895 ], [ 93.6665042, 7.2574195 ], [ 93.6653848, 7.2567707 ], [ 93.6635979, 7.2562757 ], [ 93.6625864, 7.2558944 ], [ 93.6614131, 7.2551385 ], [ 93.6600982, 7.2540148 ], [ 93.6582843, 7.2521418 ], [ 93.6578125, 7.2517482 ], [ 93.6541528, 7.2473072 ], [ 93.653515, 7.246922 ], [ 93.6520585, 7.2466945 ], [ 93.6513235, 7.2461059 ], [ 93.6506425, 7.2463601 ], [ 93.6499344, 7.2461527 ], [ 93.6493613, 7.2456978 ], [ 93.6486802, 7.2455105 ], [ 93.6482555, 7.2444512 ], [ 93.64784, 7.24395 ], [ 93.6471361, 7.244498 ], [ 93.646536, 7.2449863 ], [ 93.6458482, 7.2451335 ], [ 93.64528, 7.2456 ], [ 93.64448, 7.24728 ], [ 93.64205, 7.25082 ], [ 93.6407, 7.25198 ], [ 93.6396886, 7.2530026 ], [ 93.6393447, 7.2536514 ], [ 93.63881, 7.25603 ], [ 93.6369131, 7.2594751 ], [ 93.6357783, 7.2606954 ], [ 93.6346721, 7.2619724 ], [ 93.6336135, 7.2630319 ], [ 93.631506, 7.2643658 ], [ 93.6309243, 7.2642428 ], [ 93.6304857, 7.264082 ], [ 93.629904, 7.2640252 ], [ 93.6295893, 7.2637793 ], [ 93.6296465, 7.2645549 ], [ 93.6294653, 7.2646401 ], [ 93.6292743, 7.2653609 ], [ 93.6290787, 7.2663977 ], [ 93.6287078, 7.2684311 ], [ 93.6290585, 7.2689261 ], [ 93.6297058, 7.2692605 ], [ 93.6300969, 7.269187 ], [ 93.6302116, 7.2689261 ], [ 93.6304273, 7.2689729 ], [ 93.6307038, 7.2696485 ], [ 93.6308993, 7.2701635 ], [ 93.6313983, 7.2699562 ], [ 93.631985, 7.2699696 ], [ 93.6324638, 7.2698759 ], [ 93.6329223, 7.2705849 ], [ 93.6335561, 7.2716284 ], [ 93.6337719, 7.2725448 ], [ 93.63397, 7.27402 ], [ 93.6341495, 7.2751936 ], [ 93.6340821, 7.2767654 ], [ 93.6339405, 7.2777219 ], [ 93.6327942, 7.2787587 ], [ 93.6323761, 7.2789594 ], [ 93.6322547, 7.2792537 ], [ 93.6324368, 7.2795145 ], [ 93.632929, 7.279568 ], [ 93.6343451, 7.2808255 ], [ 93.63452, 7.28142 ], [ 93.6350194, 7.2831867 ], [ 93.6350666, 7.2848521 ], [ 93.634871, 7.2878152 ], [ 93.6340619, 7.2898218 ], [ 93.6332932, 7.2918752 ], [ 93.63246, 7.29484 ], [ 93.631722, 7.2972796 ], [ 93.6304004, 7.2993129 ], [ 93.6292271, 7.3025166 ], [ 93.6282021, 7.3046703 ], [ 93.6269007, 7.3058742 ], [ 93.6260578, 7.3065096 ], [ 93.6245541, 7.3072119 ], [ 93.623691, 7.3077202 ], [ 93.6232392, 7.3077804 ], [ 93.6225918, 7.3086298 ], [ 93.6223963, 7.3094993 ], [ 93.62244, 7.30994 ], [ 93.6227806, 7.3101681 ], [ 93.6230841, 7.3101748 ], [ 93.6231852, 7.3098203 ], [ 93.623401, 7.309312 ], [ 93.6241697, 7.3091247 ], [ 93.6252014, 7.3092451 ], [ 93.6263073, 7.3095327 ], [ 93.6285055, 7.3117666 ], [ 93.629254, 7.3118536 ], [ 93.6301374, 7.3119807 ], [ 93.6313983, 7.3132247 ], [ 93.63259, 7.31697 ], [ 93.63361, 7.31823 ], [ 93.6356228, 7.318099 ], [ 93.6373579, 7.3205645 ], [ 93.6376276, 7.3232665 ], [ 93.6376546, 7.3251124 ], [ 93.6376681, 7.3272258 ], [ 93.6375602, 7.3293393 ], [ 93.6374793, 7.3306367 ], [ 93.6371286, 7.3318005 ], [ 93.6371286, 7.3331247 ], [ 93.6368319, 7.3338871 ], [ 93.6363464, 7.3347298 ], [ 93.6359014, 7.3352648 ], [ 93.6341077, 7.3354655 ], [ 93.6336762, 7.336268 ], [ 93.633312, 7.3370706 ], [ 93.6334739, 7.3383546 ], [ 93.6335413, 7.3399731 ], [ 93.6333525, 7.3426884 ], [ 93.634397190072633, 7.3443927 ] ] ], [ [ [ 93.548675, 7.5147248 ], [ 93.5480033, 7.5129858 ], [ 93.5464731, 7.5118388 ], [ 93.5459133, 7.5119498 ], [ 93.5456894, 7.5112098 ], [ 93.5447564, 7.5109878 ], [ 93.5439354, 7.5115798 ], [ 93.5432263, 7.5111358 ], [ 93.5425918, 7.5116538 ], [ 93.5428904, 7.5128008 ], [ 93.5420693, 7.5138368 ], [ 93.5415842, 7.5135038 ], [ 93.5409497, 7.5137998 ], [ 93.5411363, 7.5154648 ], [ 93.542144, 7.5158718 ], [ 93.5419947, 7.5165378 ], [ 93.5425545, 7.5167598 ], [ 93.5424799, 7.5184988 ], [ 93.5408751, 7.5196088 ], [ 93.5410244, 7.5219028 ], [ 93.5417708, 7.5227907 ], [ 93.5413603, 7.5237157 ], [ 93.5425918, 7.5247517 ], [ 93.5435622, 7.5251957 ], [ 93.5443086, 7.5246037 ], [ 93.5453535, 7.5233827 ], [ 93.5468463, 7.5216808 ], [ 93.5483392, 7.5196828 ], [ 93.5493841, 7.5193498 ], [ 93.5503171, 7.5184988 ], [ 93.5503918, 7.5176478 ], [ 93.5499439, 7.5172408 ], [ 93.5496827, 7.5158348 ], [ 93.548675, 7.5147248 ] ] ], [ [ [ 93.4686585, 7.8824157 ], [ 93.4667148, 7.8798649 ], [ 93.4622245, 7.872942 ], [ 93.4550467, 7.8745396 ], [ 93.4532517, 7.8791836 ], [ 93.4512079, 7.8868484 ], [ 93.4488623, 7.890422 ], [ 93.4460475, 7.8950222 ], [ 93.4423794, 7.8991405 ], [ 93.4368883, 7.9020003 ], [ 93.4276691, 7.9064147 ], [ 93.4181196, 7.9074207 ], [ 93.4127415, 7.9093336 ], [ 93.4071369, 7.9075137 ], [ 93.4046033, 7.9033276 ], [ 93.397812, 7.9015877 ], [ 93.395335, 7.8986492 ], [ 93.39401, 7.89424 ], [ 93.3896406, 7.8897231 ], [ 93.3851374, 7.8862169 ], [ 93.3814633, 7.8852592 ], [ 93.38127, 7.8841738 ], [ 93.3800451, 7.8829954 ], [ 93.3735352, 7.8846846 ], [ 93.3726972, 7.8864723 ], [ 93.3697457, 7.8858477 ], [ 93.3603, 7.887 ], [ 93.35401, 7.89092 ], [ 93.3507, 7.89386 ], [ 93.3491705, 7.8987946 ], [ 93.3461653, 7.9000869 ], [ 93.3444826, 7.9053523 ], [ 93.344723, 7.9065198 ], [ 93.3471079, 7.9062644 ], [ 93.3475121, 7.9099862 ], [ 93.3460121, 7.9145641 ], [ 93.3442073, 7.917437 ], [ 93.3443514, 7.9190185 ], [ 93.3467263, 7.9236525 ], [ 93.3453676, 7.9302052 ], [ 93.34173, 7.93281 ], [ 93.33742, 7.93608 ], [ 93.3337491, 7.9352169 ], [ 93.3324762, 7.9319289 ], [ 93.330771, 7.9280931 ], [ 93.3323473, 7.9261194 ], [ 93.3326051, 7.9244596 ], [ 93.3309292, 7.9231827 ], [ 93.32751, 7.92494 ], [ 93.32222, 7.92788 ], [ 93.3191887, 7.9330255 ], [ 93.3192459, 7.938991 ], [ 93.3186824, 7.9436753 ], [ 93.3155137, 7.9481062 ], [ 93.3134615, 7.9521657 ], [ 93.3122346, 7.95505 ], [ 93.3113988, 7.9581664 ], [ 93.3111365, 7.9617807 ], [ 93.3123012, 7.9630817 ], [ 93.3135904, 7.9643584 ], [ 93.3150729, 7.9666565 ], [ 93.3158446, 7.9701092 ], [ 93.3194559, 7.9713802 ], [ 93.3237745, 7.9738697 ], [ 93.3248322, 7.9782903 ], [ 93.3239679, 7.9828702 ], [ 93.3229992, 7.9887666 ], [ 93.32311, 7.99372 ], [ 93.32739, 8.00158 ], [ 93.330478, 8.0063597 ], [ 93.33367, 8.00978 ], [ 93.3373749, 8.0122957 ], [ 93.3420803, 8.0104447 ], [ 93.3462668, 8.0146891 ], [ 93.34921, 8.01602 ], [ 93.3509108, 8.0151041 ], [ 93.35064, 8.0119494 ], [ 93.3508224, 8.0093317 ], [ 93.3541951, 8.0077971 ], [ 93.3588441, 8.0091511 ], [ 93.3634335, 8.0126902 ], [ 93.3677081, 8.0171566 ], [ 93.37567, 8.02259 ], [ 93.380023, 8.0245261 ], [ 93.3829868, 8.0226305 ], [ 93.3850709, 8.0213434 ], [ 93.3899463, 8.0199097 ], [ 93.3969909, 8.0193066 ], [ 93.4019136, 8.0134584 ], [ 93.4045574, 8.0060347 ], [ 93.4042057, 7.9993251 ], [ 93.403328, 7.9883893 ], [ 93.4054345, 7.9831792 ], [ 93.4049025, 7.9811086 ], [ 93.4029733, 7.9796586 ], [ 93.4030977, 7.9776616 ], [ 93.4021529, 7.9758671 ], [ 93.3949761, 7.9711506 ], [ 93.3990369, 7.9647671 ], [ 93.403338, 7.9655757 ], [ 93.4140032, 7.96043 ], [ 93.4231187, 7.959798 ], [ 93.4278507, 7.9652207 ], [ 93.4335105, 7.9647633 ], [ 93.435118, 7.9569172 ], [ 93.4407118, 7.9531174 ], [ 93.4453607, 7.9504091 ], [ 93.4498273, 7.9447214 ], [ 93.4546567, 7.941648 ], [ 93.4628921, 7.934837 ], [ 93.4654165, 7.9292587 ], [ 93.4663914, 7.9247324 ], [ 93.4662353, 7.9147471 ], [ 93.4695369, 7.9082938 ], [ 93.4697781, 7.9056978 ], [ 93.4700288, 7.9036437 ], [ 93.4704226, 7.9032769 ], [ 93.4703136, 7.9028424 ], [ 93.4705643, 7.9009576 ], [ 93.4708492, 7.9008222 ], [ 93.4711568, 7.9000886 ], [ 93.4720119, 7.8995628 ], [ 93.4721823, 7.8990051 ], [ 93.4720798, 7.8977184 ], [ 93.4726153, 7.8974814 ], [ 93.4729457, 7.8965559 ], [ 93.4735496, 7.8962173 ], [ 93.4736636, 7.8956982 ], [ 93.4734471, 7.8951451 ], [ 93.4735496, 7.8942309 ], [ 93.4737092, 7.8933506 ], [ 93.4740168, 7.8928427 ], [ 93.4738509, 7.8924378 ], [ 93.4734357, 7.8923799 ], [ 93.4730483, 7.8920865 ], [ 93.4718177, 7.8908901 ], [ 93.4710884, 7.8896486 ], [ 93.4707922, 7.8886554 ], [ 93.4704731, 7.8868269 ], [ 93.4695616, 7.8858111 ], [ 93.4695388, 7.8849985 ], [ 93.4703592, 7.8847728 ], [ 93.4700814, 7.8836648 ], [ 93.4692197, 7.8831926 ], [ 93.4686585, 7.8824157 ] ] ], [ [ [ 93.5774482, 7.9335304 ], [ 93.5766648, 7.9326609 ], [ 93.5760976, 7.9314234 ], [ 93.5760471, 7.9309116 ], [ 93.5760567, 7.9307224 ], [ 93.5762047, 7.9306468 ], [ 93.5764554, 7.9305758 ], [ 93.576539, 7.9303795 ], [ 93.5765987, 7.9302826 ], [ 93.5767061, 7.9301951 ], [ 93.5768709, 7.9301265 ], [ 93.5769774, 7.9299826 ], [ 93.5770517, 7.9298856 ], [ 93.577126, 7.929782 ], [ 93.5771902, 7.9297184 ], [ 93.5772509, 7.929588 ], [ 93.5773218, 7.929491 ], [ 93.57718, 7.9293572 ], [ 93.5771024, 7.9293472 ], [ 93.5769234, 7.9293225 ], [ 93.5767478, 7.9293673 ], [ 93.5765486, 7.9293171 ], [ 93.5763257, 7.9294007 ], [ 93.5760657, 7.9296515 ], [ 93.5757085, 7.9299231 ], [ 93.5754016, 7.9302674 ], [ 93.5751736, 7.9301879 ], [ 93.5749922, 7.9299893 ], [ 93.5748107, 7.9301879 ], [ 93.5747152, 7.9302636 ], [ 93.5744764, 7.9300744 ], [ 93.5742281, 7.9301312 ], [ 93.5740658, 7.9303298 ], [ 93.5738652, 7.9305096 ], [ 93.5733442, 7.930458 ], [ 93.5727904, 7.9309262 ], [ 93.5724392, 7.9317958 ], [ 93.5715883, 7.9320366 ], [ 93.5710345, 7.9325048 ], [ 93.5703592, 7.9326385 ], [ 93.5697109, 7.9327589 ], [ 93.5693867, 7.9334947 ], [ 93.5680496, 7.9346986 ], [ 93.56552, 7.93532 ], [ 93.5571334, 7.9447537 ], [ 93.5495697, 7.9494624 ], [ 93.5385622, 7.9584225 ], [ 93.5380273, 7.9584698 ], [ 93.5382183, 7.959113 ], [ 93.5384189, 7.9595103 ], [ 93.5391734, 7.9597751 ], [ 93.5371296, 7.9624235 ], [ 93.5349902, 7.9634829 ], [ 93.5297185, 7.9665662 ], [ 93.5284488, 7.9671547 ], [ 93.5270036, 7.9679573 ], [ 93.5266525, 7.9680509 ], [ 93.5259501, 7.9676898 ], [ 93.5257475, 7.9683318 ], [ 93.5248156, 7.9681847 ], [ 93.5240997, 7.9685994 ], [ 93.5248156, 7.9695892 ], [ 93.5252883, 7.970151 ], [ 93.5253693, 7.970579 ], [ 93.524748, 7.9711274 ], [ 93.5239917, 7.9715822 ], [ 93.523681, 7.9712746 ], [ 93.5233569, 7.9703249 ], [ 93.5232083, 7.9701109 ], [ 93.5183118, 7.974287 ], [ 93.5175125, 7.9758701 ], [ 93.5163639, 7.979718 ], [ 93.5118558, 7.9820521 ], [ 93.5093039, 7.9842007 ], [ 93.50822, 7.9847874 ], [ 93.508615, 7.9854981 ], [ 93.5078316, 7.9855516 ], [ 93.5076831, 7.9859796 ], [ 93.5084665, 7.9861803 ], [ 93.5083719, 7.9865013 ], [ 93.508507, 7.9885477 ], [ 93.5075685, 7.9914697 ], [ 93.5063999, 7.9924534 ], [ 93.5059407, 7.993617 ], [ 93.5052519, 7.993724 ], [ 93.5053329, 7.9940852 ], [ 93.5063999, 7.9944463 ], [ 93.5069537, 7.9954628 ], [ 93.5066836, 7.9963188 ], [ 93.5069942, 7.9968539 ], [ 93.5079667, 7.9959577 ], [ 93.50848, 7.9957036 ], [ 93.5091823, 7.9961048 ], [ 93.5091958, 7.9973086 ], [ 93.5098846, 7.9970144 ], [ 93.5101278, 7.9968672 ], [ 93.5111002, 7.9965997 ], [ 93.5114639, 7.9976737 ], [ 93.512247, 7.997617 ], [ 93.5125718, 7.9985627 ], [ 93.5132021, 7.9983547 ], [ 93.5142697, 7.9973224 ], [ 93.5140651, 7.9943195 ], [ 93.5172946, 7.9930366 ], [ 93.5225997, 7.9917462 ], [ 93.5246939, 7.9930826 ], [ 93.524275, 7.9983823 ], [ 93.5264622, 7.9990735 ], [ 93.5264157, 8.0006404 ], [ 93.5276526, 8.0016335 ], [ 93.5284168, 8.0047879 ], [ 93.5297894, 8.0047246 ], [ 93.5323732, 8.005849 ], [ 93.5320447, 8.0072309 ], [ 93.5310424, 8.0106301 ], [ 93.53056, 8.01442 ], [ 93.53033, 8.01488 ], [ 93.5283071, 8.0190674 ], [ 93.5298451, 8.0206762 ], [ 93.5300325, 8.0230747 ], [ 93.5312431, 8.0251849 ], [ 93.5354622, 8.0228339 ], [ 93.5362456, 8.0214965 ], [ 93.5352461, 8.0191426 ], [ 93.5351128, 8.0172852 ], [ 93.5351128, 8.0160598 ], [ 93.5338108, 8.0157023 ], [ 93.5347469, 8.0148513 ], [ 93.5346448, 8.0126388 ], [ 93.5355809, 8.0132174 ], [ 93.5360915, 8.0121026 ], [ 93.5366702, 8.0115154 ], [ 93.5371722, 8.0132089 ], [ 93.5379041, 8.0144939 ], [ 93.5377745, 8.0173555 ], [ 93.5416558, 8.0154581 ], [ 93.5424569, 8.0138812 ], [ 93.54084, 8.0140089 ], [ 93.5397848, 8.0131323 ], [ 93.5392488, 8.0119385 ], [ 93.5414281, 8.0093859 ], [ 93.5405624, 8.0059242 ], [ 93.5440677, 8.0038593 ], [ 93.5464164, 8.0016807 ], [ 93.5523568, 8.0022256 ], [ 93.55008, 8.01034 ], [ 93.5495176, 8.0145273 ], [ 93.55008, 8.02057 ], [ 93.5458701, 8.0214045 ], [ 93.5449171, 8.0239166 ], [ 93.5441244, 8.0244556 ], [ 93.5440957, 8.0253257 ], [ 93.5445255, 8.0256378 ], [ 93.5450575, 8.0265996 ], [ 93.5447117, 8.0271493 ], [ 93.5450572, 8.0276869 ], [ 93.5463306, 8.026801 ], [ 93.547517, 8.0262614 ], [ 93.5482408, 8.0262946 ], [ 93.5492774, 8.0268805 ], [ 93.5506094, 8.0270606 ], [ 93.5511633, 8.0268053 ], [ 93.5528934, 8.0248372 ], [ 93.5578693, 8.0245658 ], [ 93.5595982, 8.0241766 ], [ 93.5608722, 8.0234262 ], [ 93.5617863, 8.0236015 ], [ 93.5619889, 8.0241633 ], [ 93.5621645, 8.0247651 ], [ 93.5626044, 8.0247544 ], [ 93.5636907, 8.0239894 ], [ 93.5646446, 8.0222128 ], [ 93.5655331, 8.0193617 ], [ 93.5656211, 8.0171642 ], [ 93.566076, 8.0153864 ], [ 93.5677214, 8.0138875 ], [ 93.5686263, 8.0120627 ], [ 93.5692186, 8.0116065 ], [ 93.5702551, 8.0117369 ], [ 93.5707487, 8.0112155 ], [ 93.5711911, 8.0100471 ], [ 93.5715385, 8.0082666 ], [ 93.5717524, 8.0075497 ], [ 93.5731015, 8.0058553 ], [ 93.5746975, 8.0032484 ], [ 93.5751066, 8.0021412 ], [ 93.5757011, 7.9994685 ], [ 93.576244, 7.9984583 ], [ 93.5785213, 7.9969596 ], [ 93.5793419, 7.9956931 ], [ 93.579403, 7.9929349 ], [ 93.5798473, 7.9920225 ], [ 93.5813939, 7.9920877 ], [ 93.5821836, 7.9920877 ], [ 93.5820006, 7.9914713 ], [ 93.5818385, 7.9908426 ], [ 93.5837159, 7.9819365 ], [ 93.5806904, 7.9808664 ], [ 93.5802582, 7.9777632 ], [ 93.5824193, 7.9754091 ], [ 93.58225, 7.97148 ], [ 93.5814613, 7.9701404 ], [ 93.5800941, 7.9686899 ], [ 93.5796067, 7.9680005 ], [ 93.5793043, 7.9671582 ], [ 93.57908, 7.9648522 ], [ 93.5791002, 7.9642837 ], [ 93.5794689, 7.9634594 ], [ 93.5803244, 7.9625632 ], [ 93.5807278, 7.9625715 ], [ 93.5812129, 7.9629705 ], [ 93.5814926, 7.9629705 ], [ 93.5815922, 7.962732 ], [ 93.5813693, 7.9623307 ], [ 93.5816057, 7.9622438 ], [ 93.5815314, 7.9620833 ], [ 93.5812951, 7.9618291 ], [ 93.581241, 7.9613208 ], [ 93.58157, 7.95738 ], [ 93.5794567, 7.9561564 ], [ 93.5791463, 7.9551254 ], [ 93.5789362, 7.9536924 ], [ 93.5792418, 7.9534607 ], [ 93.5795522, 7.9532337 ], [ 93.5798101, 7.9530445 ], [ 93.579896, 7.9526614 ], [ 93.5801826, 7.9525527 ], [ 93.5804882, 7.9522831 ], [ 93.5807651, 7.9522642 ], [ 93.581109, 7.952023 ], [ 93.5811042, 7.9517865 ], [ 93.5809371, 7.9514602 ], [ 93.5807413, 7.9510676 ], [ 93.580684, 7.9504906 ], [ 93.5811137, 7.9505379 ], [ 93.5812188, 7.9504055 ], [ 93.5813907, 7.9502305 ], [ 93.5813095, 7.950013 ], [ 93.5811969, 7.9498308 ], [ 93.5813143, 7.9494265 ], [ 93.5810373, 7.9492799 ], [ 93.580875, 7.9495306 ], [ 93.5807556, 7.9497103 ], [ 93.5802064, 7.9495495 ], [ 93.5799553, 7.9479391 ], [ 93.579707, 7.9469553 ], [ 93.5797166, 7.946 ], [ 93.5799076, 7.9455932 ], [ 93.5802991, 7.9452716 ], [ 93.5801855, 7.9416044 ], [ 93.5803071, 7.9409957 ], [ 93.5802598, 7.9408151 ], [ 93.5802936, 7.9404138 ], [ 93.5804894, 7.9402533 ], [ 93.5807595, 7.9400861 ], [ 93.5806582, 7.9398587 ], [ 93.5806042, 7.9396379 ], [ 93.5808203, 7.9392834 ], [ 93.5807595, 7.938628 ], [ 93.5806245, 7.938347 ], [ 93.5805907, 7.9378722 ], [ 93.5804016, 7.9378922 ], [ 93.580172, 7.938133 ], [ 93.5800234, 7.9380126 ], [ 93.5795912, 7.9376447 ], [ 93.5790712, 7.9371097 ], [ 93.5786795, 7.9363405 ], [ 93.578693, 7.935986 ], [ 93.5788551, 7.9358723 ], [ 93.5789902, 7.9357586 ], [ 93.5788597, 7.9355102 ], [ 93.5786795, 7.9351967 ], [ 93.5788146, 7.9348422 ], [ 93.579015, 7.9345805 ], [ 93.5789137, 7.9340387 ], [ 93.5789204, 7.9336708 ], [ 93.5783937, 7.933711 ], [ 93.578002, 7.9335438 ], [ 93.5774482, 7.9335304 ] ] ], [ [ [ 88.28354, 21.76905 ], [ 88.28274, 21.76993 ], [ 88.28122, 21.77147 ], [ 88.27979, 21.77216 ], [ 88.27802, 21.77322 ], [ 88.27434, 21.7758 ], [ 88.26999, 21.78156 ], [ 88.267, 21.78542 ], [ 88.26502, 21.78858 ], [ 88.26426, 21.7909 ], [ 88.26383, 21.7927 ], [ 88.27072, 21.79116 ], [ 88.27796, 21.79058 ], [ 88.28075, 21.79007 ], [ 88.28109, 21.78999 ], [ 88.28284, 21.78939 ], [ 88.28475, 21.78835 ], [ 88.2864, 21.78697 ], [ 88.28736, 21.78509 ], [ 88.28781, 21.78315 ], [ 88.28788, 21.78121 ], [ 88.28747, 21.77928 ], [ 88.28579, 21.77625 ], [ 88.28435, 21.77311 ], [ 88.28369, 21.77024 ], [ 88.28354, 21.76905 ] ] ], [ [ [ 88.949746697272872, 21.796775 ], [ 88.949746697272886, 21.796775 ], [ 88.953844, 21.8026278 ], [ 88.9557322, 21.8029466 ], [ 88.9569339, 21.8024684 ], [ 88.9589938, 21.8015121 ], [ 88.964487, 21.7991214 ], [ 88.9677485, 21.7983244 ], [ 88.9706668, 21.798962 ], [ 88.9728984, 21.8002371 ], [ 88.9747866, 21.8011934 ], [ 88.9759883, 21.8019903 ], [ 88.9768466, 21.8037435 ], [ 88.9775332, 21.806453 ], [ 88.9785632, 21.8105967 ], [ 88.9792498, 21.8142623 ], [ 88.9801081, 21.8192026 ], [ 88.9797648, 21.8212743 ], [ 88.9785632, 21.8231867 ], [ 88.9761599, 21.825099 ], [ 88.9739283, 21.8262145 ], [ 88.9718684, 21.8271706 ], [ 88.9696368, 21.827808 ], [ 88.9670619, 21.8274893 ], [ 88.9662036, 21.8284454 ], [ 88.9670619, 21.8297202 ], [ 88.9684352, 21.8319512 ], [ 88.9692935, 21.8322699 ], [ 88.9699801, 21.8332259 ], [ 88.9704951, 21.8349788 ], [ 88.9706668, 21.8364129 ], [ 88.9708384, 21.838325 ], [ 88.9713534, 21.8411931 ], [ 88.9720401, 21.8431052 ], [ 88.9728984, 21.8439019 ], [ 88.9728984, 21.8426272 ], [ 88.9723834, 21.8394404 ], [ 88.9732417, 21.838803 ], [ 88.9742717, 21.8362535 ], [ 88.975645, 21.8352975 ], [ 88.9778766, 21.8317918 ], [ 88.9794215, 21.8314731 ], [ 88.9801081, 21.8322699 ], [ 88.9806231, 21.8338633 ], [ 88.9845713, 21.8343414 ], [ 88.9874896, 21.8348194 ], [ 88.9885196, 21.8340227 ], [ 88.9883479, 21.8324292 ], [ 88.9864596, 21.8303577 ], [ 88.9828547, 21.825099 ], [ 88.9838847, 21.8236647 ], [ 88.9854297, 21.8235054 ], [ 88.9868029, 21.8238241 ], [ 88.9881762, 21.8243022 ], [ 88.9902362, 21.8239835 ], [ 88.9921244, 21.823346 ], [ 88.994871, 21.8215931 ], [ 88.996416, 21.8199994 ], [ 88.9972743, 21.8168121 ], [ 88.9972743, 21.8147404 ], [ 88.9955577, 21.814581 ], [ 88.9945277, 21.8139435 ], [ 88.9933261, 21.813306 ], [ 88.9924678, 21.8117123 ], [ 88.9917811, 21.8093217 ], [ 88.9921244, 21.806453 ], [ 88.9921244, 21.8015121 ], [ 88.9909228, 21.7980057 ], [ 88.989928665422326, 21.796775 ], [ 88.9898928, 21.7967306 ], [ 88.9883479, 21.7927458 ], [ 88.985773, 21.7890797 ], [ 88.9821681, 21.7846165 ], [ 88.9790782, 21.7817472 ], [ 88.9759883, 21.7783997 ], [ 88.9727267, 21.7748926 ], [ 88.9715251, 21.7747332 ], [ 88.9691218, 21.7758491 ], [ 88.9680919, 21.7753709 ], [ 88.9675769, 21.7771244 ], [ 88.9648303, 21.7791967 ], [ 88.963972, 21.7793561 ], [ 88.9613971, 21.7815878 ], [ 88.9593371, 21.7823849 ], [ 88.9574488, 21.7830225 ], [ 88.9560756, 21.7839789 ], [ 88.9567622, 21.7846165 ], [ 88.9547023, 21.7838195 ], [ 88.9430293, 21.7844571 ], [ 88.942686, 21.7854135 ], [ 88.9433726, 21.7862105 ], [ 88.9440593, 21.7874857 ], [ 88.9456042, 21.7906737 ], [ 88.9462909, 21.7908331 ], [ 88.9471492, 21.7930646 ], [ 88.949746697272872, 21.796775 ] ] ], [ [ [ 88.3116382, 21.8533316 ], [ 88.311366, 21.8537204 ], [ 88.3119211, 21.8541016 ], [ 88.3124738, 21.8542264 ], [ 88.3127612, 21.8555114 ], [ 88.3133127, 21.8555068 ], [ 88.3135979, 21.8565344 ], [ 88.3149826, 21.8571664 ], [ 88.315817, 21.8579321 ], [ 88.3188597, 21.8589376 ], [ 88.3196919, 21.8594458 ], [ 88.3216269, 21.8599451 ], [ 88.3232838, 21.8601893 ], [ 88.3238378, 21.8604424 ], [ 88.324665, 21.8604358 ], [ 88.3254947, 21.8606864 ], [ 88.3337676, 21.8606197 ], [ 88.3373477, 21.8600759 ], [ 88.337621, 21.8598162 ], [ 88.3392696, 21.8591596 ], [ 88.3392649, 21.8586448 ], [ 88.3403619, 21.8579918 ], [ 88.3409122, 21.8578591 ], [ 88.3411831, 21.857342 ], [ 88.3409073, 21.8573443 ], [ 88.3409001, 21.856572 ], [ 88.3406244, 21.8565743 ], [ 88.3408905, 21.8555424 ], [ 88.3419924, 21.8554042 ], [ 88.3425463, 21.8556571 ], [ 88.3428221, 21.8556548 ], [ 88.3447451, 21.8548669 ], [ 88.3519122, 21.8545509 ], [ 88.3524624, 21.854418 ], [ 88.3523193, 21.8539043 ], [ 88.3525926, 21.8536446 ], [ 88.3524431, 21.8523587 ], [ 88.3518916, 21.8523632 ], [ 88.3517412, 21.8510772 ], [ 88.351463, 21.8508221 ], [ 88.351146, 21.8464483 ], [ 88.3514168, 21.8459312 ], [ 88.3519321, 21.8420653 ], [ 88.3517584, 21.8382052 ], [ 88.3512069, 21.8382097 ], [ 88.3506047, 21.8328085 ], [ 88.3500534, 21.832813 ], [ 88.3501859, 21.8322971 ], [ 88.3498837, 21.8294677 ], [ 88.3501182, 21.8250894 ], [ 88.3503866, 21.8243148 ], [ 88.3503794, 21.8235426 ], [ 88.3509115, 21.8214787 ], [ 88.3511848, 21.821219 ], [ 88.3514484, 21.8199297 ], [ 88.3525342, 21.8181187 ], [ 88.3528073, 21.817859 ], [ 88.3530759, 21.8170845 ], [ 88.353349, 21.8168248 ], [ 88.3534826, 21.8163088 ], [ 88.3540303, 21.8159178 ], [ 88.3545803, 21.8157849 ], [ 88.3547128, 21.8152689 ], [ 88.3552569, 21.8144921 ], [ 88.3563499, 21.8134536 ], [ 88.3568892, 21.812162 ], [ 88.3577088, 21.8113829 ], [ 88.3582481, 21.8100913 ], [ 88.3587947, 21.8095719 ], [ 88.3590628, 21.8087974 ], [ 88.3596094, 21.808278 ], [ 88.3595924, 21.8064759 ], [ 88.3587557, 21.8054532 ], [ 88.3584752, 21.8049405 ], [ 88.3581849, 21.8033982 ], [ 88.357624, 21.8023731 ], [ 88.3567897, 21.8016076 ], [ 88.3564851, 21.7985209 ], [ 88.3568723, 21.7956859 ], [ 88.3532473, 21.796075 ], [ 88.3512232, 21.7967565 ], [ 88.3501333, 21.7976652 ], [ 88.3480647, 21.7985327 ], [ 88.3464187, 21.7989251 ], [ 88.3425928, 21.7993175 ], [ 88.3397679, 21.7982022 ], [ 88.3382999, 21.797562 ], [ 88.3352303, 21.7944227 ], [ 88.3320718, 21.7895691 ], [ 88.3300476, 21.7866981 ], [ 88.3290022, 21.78581 ], [ 88.3280902, 21.7842196 ], [ 88.327067, 21.7832075 ], [ 88.3259549, 21.782877 ], [ 88.3234859, 21.7820095 ], [ 88.3220096, 21.7815519 ], [ 88.3193441, 21.7812272 ], [ 88.3173265, 21.7818467 ], [ 88.3159497, 21.7819858 ], [ 88.3154008, 21.7822478 ], [ 88.3134774, 21.782907 ], [ 88.3109992, 21.7831843 ], [ 88.3101769, 21.7837055 ], [ 88.3079708, 21.7835938 ], [ 88.3019164, 21.7846715 ], [ 88.3005337, 21.7841675 ], [ 88.2999826, 21.7841718 ], [ 88.2992895, 21.7837915 ], [ 88.2991476, 21.7832778 ], [ 88.2985951, 21.7831529 ], [ 88.2981778, 21.7827706 ], [ 88.2980359, 21.7822567 ], [ 88.2963867, 21.7827846 ], [ 88.2956787, 21.7807305 ], [ 88.2955401, 21.7806025 ], [ 88.2952646, 21.7806046 ], [ 88.2927932, 21.7816538 ], [ 88.2917, 21.7826921 ], [ 88.2907407, 21.7833436 ], [ 88.2904742, 21.7843756 ], [ 88.2896543, 21.7851542 ], [ 88.2891122, 21.7861883 ], [ 88.2887027, 21.7865772 ], [ 88.2878805, 21.7870985 ], [ 88.2871945, 21.7874905 ], [ 88.2870616, 21.7880064 ], [ 88.2865105, 21.7880106 ], [ 88.2862462, 21.7892999 ], [ 88.2859707, 21.789302 ], [ 88.285966, 21.7887872 ], [ 88.2851449, 21.7894368 ], [ 88.2834969, 21.7900936 ], [ 88.2835014, 21.7906084 ], [ 88.2791015, 21.7918006 ], [ 88.2785502, 21.791805 ], [ 88.2780013, 21.7920665 ], [ 88.2650552, 21.793196 ], [ 88.2645084, 21.7937152 ], [ 88.2636838, 21.7939788 ], [ 88.2629998, 21.7946282 ], [ 88.2630112, 21.7959153 ], [ 88.2659692, 21.8031011 ], [ 88.2665216, 21.8032251 ], [ 88.2676311, 21.803989 ], [ 88.2687407, 21.8047528 ], [ 88.2709641, 21.8067953 ], [ 88.2723493, 21.807557 ], [ 88.2731831, 21.8083228 ], [ 88.2748427, 21.8089541 ], [ 88.2751253, 21.8097242 ], [ 88.2762338, 21.8103589 ], [ 88.2770618, 21.8104816 ], [ 88.2770665, 21.8109964 ], [ 88.2781771, 21.8118885 ], [ 88.2790087, 21.8123969 ], [ 88.2806673, 21.8128991 ], [ 88.2809454, 21.8131542 ], [ 88.2820491, 21.8132748 ], [ 88.2823317, 21.814045 ], [ 88.2850988, 21.8151816 ], [ 88.2873065, 21.8154218 ], [ 88.2884163, 21.8161854 ], [ 88.2892479, 21.8166938 ], [ 88.2909066, 21.8171958 ], [ 88.292292, 21.8179573 ], [ 88.2934016, 21.8187208 ], [ 88.2939531, 21.8187167 ], [ 88.2942275, 21.8185861 ], [ 88.2945103, 21.8193562 ], [ 88.295343, 21.8199928 ], [ 88.2958956, 21.8201177 ], [ 88.2961875, 21.8219176 ], [ 88.2950882, 21.8223118 ], [ 88.2946777, 21.8227017 ], [ 88.2942738, 21.8237346 ], [ 88.2956558, 21.8241096 ], [ 88.2964829, 21.824103 ], [ 88.2978662, 21.824607 ], [ 88.2984175, 21.8246027 ], [ 88.2992493, 21.8251111 ], [ 88.2998053, 21.8256216 ], [ 88.3025715, 21.8266295 ], [ 88.3034057, 21.8273952 ], [ 88.3045108, 21.8276439 ], [ 88.3059011, 21.8289202 ], [ 88.3067293, 21.8290427 ], [ 88.307147, 21.8295543 ], [ 88.3077055, 21.8303222 ], [ 88.3078486, 21.8308359 ], [ 88.3083999, 21.8308316 ], [ 88.30882, 21.8316006 ], [ 88.3089678, 21.8326291 ], [ 88.3095191, 21.8326248 ], [ 88.3100846, 21.834165 ], [ 88.3106361, 21.8341606 ], [ 88.3109283, 21.8359605 ], [ 88.3114796, 21.8359559 ], [ 88.3116288, 21.8372421 ], [ 88.3126131, 21.8392937 ], [ 88.3131646, 21.8392893 ], [ 88.3133114, 21.8403179 ], [ 88.3150058, 21.8446809 ], [ 88.3150245, 21.8467403 ], [ 88.3142209, 21.8493211 ], [ 88.3136741, 21.8498404 ], [ 88.3136811, 21.8506127 ], [ 88.3125876, 21.851651 ], [ 88.312319, 21.8524256 ], [ 88.3116382, 21.8533316 ] ] ], [ [ [ 88.45939, 21.80111 ], [ 88.45651, 21.80284 ], [ 88.45439, 21.80455 ], [ 88.45236, 21.80709 ], [ 88.45058, 21.81031 ], [ 88.45001, 21.81167 ], [ 88.44976, 21.813 ], [ 88.45051, 21.8147 ], [ 88.452, 21.81591 ], [ 88.45754, 21.8188 ], [ 88.46367, 21.82091 ], [ 88.46663, 21.82196 ], [ 88.47032, 21.82384 ], [ 88.47221, 21.82581 ], [ 88.47497, 21.8313 ], [ 88.47653, 21.83366 ], [ 88.47788, 21.83432 ], [ 88.47981, 21.83463 ], [ 88.48185, 21.83476 ], [ 88.48476, 21.83449 ], [ 88.48884, 21.83449 ], [ 88.48899, 21.83438 ], [ 88.48972, 21.83209 ], [ 88.49133, 21.82865 ], [ 88.49303, 21.82673 ], [ 88.49559, 21.8244 ], [ 88.49728, 21.82209 ], [ 88.49863, 21.81897 ], [ 88.49964, 21.81522 ], [ 88.49979, 21.81259 ], [ 88.49853, 21.8106 ], [ 88.49659, 21.80841 ], [ 88.49375, 21.80685 ], [ 88.4901, 21.80309 ], [ 88.48711, 21.80136 ], [ 88.48548, 21.79941 ], [ 88.48494, 21.79913 ], [ 88.48342, 21.79938 ], [ 88.48233, 21.79996 ], [ 88.48115, 21.80063 ], [ 88.48025, 21.80043 ], [ 88.47786, 21.79969 ], [ 88.47479, 21.7998 ], [ 88.47185, 21.79969 ], [ 88.46693, 21.79985 ], [ 88.46312, 21.80009 ], [ 88.45939, 21.80111 ] ] ], [ [ [ 88.7371166, 21.7967976 ], [ 88.7383182, 21.7980727 ], [ 88.7388332, 21.7995072 ], [ 88.7395199, 21.8017386 ], [ 88.7402065, 21.803173 ], [ 88.7420948, 21.8050856 ], [ 88.7444981, 21.8079544 ], [ 88.746043, 21.8097075 ], [ 88.7479313, 21.8114606 ], [ 88.7491329, 21.8127356 ], [ 88.7503345, 21.8138512 ], [ 88.7511928, 21.8135325 ], [ 88.7517078, 21.8125762 ], [ 88.7513645, 21.8114606 ], [ 88.7501629, 21.8081138 ], [ 88.7494762, 21.8046075 ], [ 88.7499912, 21.799826 ], [ 88.7505062, 21.7975946 ], [ 88.750576437973848, 21.796975 ], [ 88.7508495, 21.7945662 ], [ 88.7511928, 21.7902625 ], [ 88.7522228, 21.78564 ], [ 88.7537678, 21.7827707 ], [ 88.7553127, 21.7800608 ], [ 88.7541111, 21.7786262 ], [ 88.7534244, 21.7778291 ], [ 88.7510212, 21.7767132 ], [ 88.7491329, 21.7752785 ], [ 88.7463863, 21.7719308 ], [ 88.7434681, 21.7732062 ], [ 88.7417515, 21.7736844 ], [ 88.7360866, 21.7749597 ], [ 88.7355717, 21.7776697 ], [ 88.7345417, 21.7794232 ], [ 88.7333401, 21.7794232 ], [ 88.7314518, 21.7794232 ], [ 88.7293919, 21.7792638 ], [ 88.7288769, 21.7803796 ], [ 88.7285335, 21.7819737 ], [ 88.7281902, 21.7830895 ], [ 88.7290485, 21.7851618 ], [ 88.7292202, 21.7865964 ], [ 88.7288769, 21.7899437 ], [ 88.7283619, 21.7913783 ], [ 88.7280186, 21.7931316 ], [ 88.7293919, 21.794088 ], [ 88.7300785, 21.7952037 ], [ 88.7319668, 21.7960007 ], [ 88.733855, 21.7960007 ], [ 88.734885, 21.7960007 ], [ 88.7371166, 21.7967976 ] ] ], [ [ [ 88.8837952, 21.8294946 ], [ 88.8870567, 21.8315661 ], [ 88.88946, 21.8330003 ], [ 88.8922066, 21.8342751 ], [ 88.8927216, 21.8360279 ], [ 88.8875717, 21.8449509 ], [ 88.8863701, 21.8465443 ], [ 88.8868851, 21.8479783 ], [ 88.8872284, 21.8489342 ], [ 88.88843, 21.8494122 ], [ 88.89049, 21.8497309 ], [ 88.8913483, 21.8503682 ], [ 88.9002747, 21.8498902 ], [ 88.9018196, 21.8502089 ], [ 88.9035362, 21.8497309 ], [ 88.9055962, 21.8489342 ], [ 88.9074844, 21.8479783 ], [ 88.9093727, 21.8475003 ], [ 88.9104027, 21.8486156 ], [ 88.911776, 21.8484563 ], [ 88.912291, 21.8475003 ], [ 88.9119476, 21.8462256 ], [ 88.9121193, 21.8455883 ], [ 88.9146942, 21.8439949 ], [ 88.9158958, 21.8451103 ], [ 88.9160675, 21.8465443 ], [ 88.9157242, 21.8479783 ], [ 88.9150375, 21.8495716 ], [ 88.9141792, 21.8508462 ], [ 88.9138359, 21.8529175 ], [ 88.9143509, 21.8541921 ], [ 88.9160675, 21.8540327 ], [ 88.9170975, 21.8538734 ], [ 88.9176125, 21.8532361 ], [ 88.920874, 21.8538734 ], [ 88.922934, 21.8524395 ], [ 88.9249939, 21.8508462 ], [ 88.9270538, 21.8503682 ], [ 88.9292854, 21.8503682 ], [ 88.9316887, 21.8502089 ], [ 88.9351219, 21.8513242 ], [ 88.9359802, 21.8521208 ], [ 88.9375252, 21.8513242 ], [ 88.9387268, 21.8500496 ], [ 88.9385551, 21.8492529 ], [ 88.9368385, 21.8476596 ], [ 88.9351219, 21.8476596 ], [ 88.9337486, 21.8463849 ], [ 88.933062, 21.8449509 ], [ 88.9332336, 21.8419235 ], [ 88.9327187, 21.8395334 ], [ 88.932032, 21.83794 ], [ 88.9294571, 21.8380993 ], [ 88.9267105, 21.838418 ], [ 88.9243072, 21.8373026 ], [ 88.9234489, 21.8363466 ], [ 88.922934, 21.8345938 ], [ 88.922934, 21.8322035 ], [ 88.9234489, 21.830132 ], [ 88.9243072, 21.8285385 ], [ 88.9241356, 21.8263075 ], [ 88.9234489, 21.8243952 ], [ 88.9210457, 21.8243952 ], [ 88.9186424, 21.8255107 ], [ 88.9165825, 21.8267856 ], [ 88.9145225, 21.8271043 ], [ 88.9128059, 21.8267856 ], [ 88.910231, 21.8255107 ], [ 88.9093727, 21.8242359 ], [ 88.9078278, 21.8232797 ], [ 88.9057678, 21.8228016 ], [ 88.9021629, 21.8216861 ], [ 88.899588, 21.8197738 ], [ 88.8968414, 21.8175427 ], [ 88.8946098, 21.8154709 ], [ 88.8930649, 21.8137178 ], [ 88.8908333, 21.8126022 ], [ 88.8886017, 21.8122835 ], [ 88.8870567, 21.8122835 ], [ 88.8861984, 21.812921 ], [ 88.8858551, 21.8145147 ], [ 88.8846535, 21.8161084 ], [ 88.8832802, 21.817702 ], [ 88.8819069, 21.8192957 ], [ 88.8808769, 21.8207299 ], [ 88.8808769, 21.8216861 ], [ 88.8819069, 21.8239171 ], [ 88.8825935, 21.8266262 ], [ 88.8825935, 21.8285385 ], [ 88.8837952, 21.8294946 ] ] ], [ [ [ 88.723477671118076, 21.796975 ], [ 88.7230404, 21.7988697 ], [ 88.7218388, 21.8026949 ], [ 88.7211521, 21.8050856 ], [ 88.7202938, 21.8063606 ], [ 88.7180622, 21.8082732 ], [ 88.7158306, 21.8095482 ], [ 88.7144573, 21.8101857 ], [ 88.712569, 21.810345 ], [ 88.7106808, 21.8100263 ], [ 88.7082775, 21.8113013 ], [ 88.7074192, 21.8140106 ], [ 88.7067326, 21.817676 ], [ 88.7053593, 21.8187916 ], [ 88.7051876, 21.8215007 ], [ 88.7048443, 21.8245286 ], [ 88.7046726, 21.8259628 ], [ 88.7062176, 21.8280344 ], [ 88.7075909, 21.827397 ], [ 88.7101658, 21.8264409 ], [ 88.7120541, 21.8254847 ], [ 88.7144573, 21.825166 ], [ 88.7168606, 21.8261221 ], [ 88.7190922, 21.827397 ], [ 88.7197788, 21.8294686 ], [ 88.7197788, 21.8316995 ], [ 88.7208088, 21.8329743 ], [ 88.7235554, 21.8340897 ], [ 88.7273319, 21.8360019 ], [ 88.7311085, 21.8371173 ], [ 88.7360866, 21.8382327 ], [ 88.7402065, 21.8398261 ], [ 88.7443264, 21.8414195 ], [ 88.7463863, 21.8434909 ], [ 88.7489612, 21.8466776 ], [ 88.7515362, 21.8493862 ], [ 88.7520512, 21.8509795 ], [ 88.7534244, 21.8516168 ], [ 88.7563427, 21.8544847 ], [ 88.7585743, 21.8571932 ], [ 88.7597759, 21.8581491 ], [ 88.7614925, 21.8573525 ], [ 88.7637241, 21.8556 ], [ 88.7657841, 21.8538474 ], [ 88.7680157, 21.8528915 ], [ 88.7687023, 21.8519355 ], [ 88.7685306, 21.8500236 ], [ 88.7685306, 21.8477929 ], [ 88.7676723, 21.8449249 ], [ 88.7666424, 21.8425349 ], [ 88.7654407, 21.8396668 ], [ 88.7645824, 21.8352052 ], [ 88.7640674, 21.8315401 ], [ 88.7642391, 21.8288312 ], [ 88.7654407, 21.8259628 ], [ 88.767329, 21.8248473 ], [ 88.768874, 21.8243692 ], [ 88.7704189, 21.8243692 ], [ 88.7723072, 21.8235724 ], [ 88.7740238, 21.8234131 ], [ 88.7762554, 21.8235724 ], [ 88.7765987, 21.8227756 ], [ 88.7764271, 21.8215007 ], [ 88.7760837, 21.8202258 ], [ 88.7747105, 21.8178354 ], [ 88.7741955, 21.8151262 ], [ 88.7748821, 21.8132137 ], [ 88.7752254, 21.8101857 ], [ 88.7741955, 21.8082732 ], [ 88.7731655, 21.8066794 ], [ 88.7700756, 21.8041293 ], [ 88.768359, 21.8012604 ], [ 88.7671574, 21.7988697 ], [ 88.766817291774132, 21.796975 ], [ 88.7666424, 21.7960007 ], [ 88.7659557, 21.7926535 ], [ 88.7649258, 21.7886686 ], [ 88.7635525, 21.7869152 ], [ 88.7608059, 21.7835677 ], [ 88.7580593, 21.7811767 ], [ 88.7559994, 21.7827707 ], [ 88.7547977, 21.7843648 ], [ 88.7534244, 21.7885092 ], [ 88.75196505430273, 21.796775 ], [ 88.7517078, 21.7982321 ], [ 88.7511928, 21.8026949 ], [ 88.7510212, 21.8042887 ], [ 88.7525661, 21.8108231 ], [ 88.7529095, 21.8124169 ], [ 88.7527378, 21.8140106 ], [ 88.7515362, 21.8151262 ], [ 88.7481029, 21.8175167 ], [ 88.7463863, 21.8187916 ], [ 88.7448414, 21.8199071 ], [ 88.7436397, 21.8216601 ], [ 88.7441547, 21.8202258 ], [ 88.746043, 21.8179948 ], [ 88.7479313, 21.8167198 ], [ 88.7487896, 21.8151262 ], [ 88.7474163, 21.8141699 ], [ 88.7451847, 21.8109825 ], [ 88.7427814, 21.8087513 ], [ 88.7405498, 21.80652 ], [ 88.7391766, 21.8044481 ], [ 88.7381466, 21.8023761 ], [ 88.7372883, 21.7999854 ], [ 88.7360866, 21.797754 ], [ 88.73437, 21.7974352 ], [ 88.7323101, 21.7974352 ], [ 88.730327688895855, 21.796975 ], [ 88.7295635, 21.7967976 ], [ 88.7278469, 21.7956819 ], [ 88.7266453, 21.7944068 ], [ 88.725272, 21.7945662 ], [ 88.7240703, 21.7952037 ], [ 88.7235554, 21.7966382 ], [ 88.723477671118076, 21.796975 ] ] ], [ [ [ 88.792145222208291, 21.796975 ], [ 88.7937649, 21.7972758 ], [ 88.7951382, 21.7987103 ], [ 88.7959965, 21.8011011 ], [ 88.7961681, 21.8049262 ], [ 88.7956531, 21.8087513 ], [ 88.7949665, 21.8109825 ], [ 88.7941082, 21.8130544 ], [ 88.7923916, 21.8143293 ], [ 88.7913616, 21.8156043 ], [ 88.7905033, 21.817676 ], [ 88.78913, 21.8216601 ], [ 88.7882717, 21.8240505 ], [ 88.7863834, 21.8256441 ], [ 88.7836368, 21.8266002 ], [ 88.7807186, 21.8264409 ], [ 88.777457, 21.8267596 ], [ 88.7755688, 21.8266002 ], [ 88.7711056, 21.8264409 ], [ 88.7685306, 21.8270783 ], [ 88.7666424, 21.8280344 ], [ 88.7664707, 21.8293092 ], [ 88.767844, 21.8366393 ], [ 88.769389, 21.8412602 ], [ 88.7697323, 21.8439689 ], [ 88.7704189, 21.8455623 ], [ 88.7714489, 21.8460403 ], [ 88.7724789, 21.8459606 ], [ 88.7747105, 21.8458013 ], [ 88.7763412, 21.8455623 ], [ 88.7776287, 21.8444469 ], [ 88.7781437, 21.8428536 ], [ 88.7848385, 21.8424552 ], [ 88.7862118, 21.8429332 ], [ 88.7865551, 21.8446063 ], [ 88.7869842, 21.8465979 ], [ 88.7878426, 21.8474743 ], [ 88.790675, 21.8481116 ], [ 88.7913616, 21.8503422 ], [ 88.7914474, 21.8523338 ], [ 88.7929066, 21.8534491 ], [ 88.7970264, 21.8530508 ], [ 88.798743, 21.8535288 ], [ 88.799258, 21.8548034 ], [ 88.8011463, 21.8549627 ], [ 88.8020046, 21.8540067 ], [ 88.801833, 21.8511389 ], [ 88.8019188, 21.8498642 ], [ 88.8028629, 21.8489082 ], [ 88.8044079, 21.8485896 ], [ 88.8074978, 21.8493862 ], [ 88.8095577, 21.8501829 ], [ 88.8208874, 21.8505015 ], [ 88.8224323, 21.8501829 ], [ 88.8227756, 21.8492269 ], [ 88.8212307, 21.8461996 ], [ 88.8203724, 21.8439689 ], [ 88.8188274, 21.8415788 ], [ 88.8188274, 21.8390294 ], [ 88.8196857, 21.8363206 ], [ 88.8202007, 21.8339304 ], [ 88.8208874, 21.8310621 ], [ 88.8214023, 21.8275563 ], [ 88.821059, 21.825166 ], [ 88.8195141, 21.822935 ], [ 88.8174541, 21.8199071 ], [ 88.8152225, 21.8160824 ], [ 88.811961, 21.8095482 ], [ 88.8095577, 21.8062012 ], [ 88.8068111, 21.8038106 ], [ 88.8035496, 21.8003041 ], [ 88.80064699400377, 21.796975 ], [ 88.8006313, 21.796957 ], [ 88.7978847, 21.7937692 ], [ 88.7953098, 21.7907407 ], [ 88.7925632, 21.7923347 ], [ 88.7905033, 21.7936098 ], [ 88.78913, 21.7958413 ], [ 88.790135658266237, 21.796775 ], [ 88.79016, 21.7967976 ], [ 88.7920483, 21.796957 ], [ 88.792145222208291, 21.796975 ] ] ], [ [ [ 88.59365, 21.849141516853933 ], [ 88.59476, 21.84815 ], [ 88.59648, 21.84729 ], [ 88.59886, 21.84628 ], [ 88.60031, 21.84588 ], [ 88.60178, 21.84526 ], [ 88.60252, 21.84472 ], [ 88.60306, 21.84399 ], [ 88.60323, 21.84354 ], [ 88.60351, 21.84237 ], [ 88.60357, 21.84158 ], [ 88.60352, 21.84082 ], [ 88.60342, 21.84023 ], [ 88.60357, 21.83886 ], [ 88.60366, 21.8378 ], [ 88.60402, 21.83699 ], [ 88.60411, 21.83641 ], [ 88.60459, 21.83593 ], [ 88.60504, 21.83516 ], [ 88.60692, 21.83352 ], [ 88.60828, 21.83272 ], [ 88.60944, 21.83208 ], [ 88.61053, 21.83183 ], [ 88.6128, 21.83117 ], [ 88.61454, 21.83081 ], [ 88.61624, 21.83041 ], [ 88.61707, 21.83008 ], [ 88.61735, 21.82979 ], [ 88.61746, 21.8293 ], [ 88.61776, 21.82877 ], [ 88.61729, 21.82775 ], [ 88.61653, 21.8266 ], [ 88.61537, 21.82537 ], [ 88.61379, 21.82439 ], [ 88.6123, 21.82354 ], [ 88.60931, 21.82141 ], [ 88.60873, 21.82081 ], [ 88.60794, 21.8192 ], [ 88.60704, 21.8166 ], [ 88.6069, 21.81514 ], [ 88.60752, 21.81404 ], [ 88.60801, 21.81261 ], [ 88.60902, 21.81128 ], [ 88.60979, 21.811 ], [ 88.61061, 21.81056 ], [ 88.61111, 21.8099 ], [ 88.61205, 21.80821 ], [ 88.61306, 21.8049 ], [ 88.61354, 21.80272 ], [ 88.61354, 21.80193 ], [ 88.61372, 21.80141 ], [ 88.61402, 21.80032 ], [ 88.61396, 21.79911 ], [ 88.61392, 21.79876 ], [ 88.61388, 21.79864 ], [ 88.61243, 21.79817 ], [ 88.61156, 21.79844 ], [ 88.6096053, 21.798103 ], [ 88.6070303, 21.7979436 ], [ 88.6051421, 21.7976248 ], [ 88.60372, 21.79798 ], [ 88.60187, 21.79715 ], [ 88.5954273, 21.7972691 ], [ 88.5942395, 21.7973502 ], [ 88.5938454, 21.7977307 ], [ 88.5936878, 21.798404 ], [ 88.5938139, 21.7991358 ], [ 88.5937824, 21.7997797 ], [ 88.5937193, 21.800292 ], [ 88.5940346, 21.8006872 ], [ 88.5939873, 21.8011409 ], [ 88.59385, 21.800846666569075 ], [ 88.5937824, 21.8007018 ], [ 88.5935775, 21.8004091 ], [ 88.5935302, 21.8001895 ], [ 88.5934829, 21.7995163 ], [ 88.591544, 21.8006286 ], [ 88.5909608, 21.8009213 ], [ 88.5916071, 21.8003359 ], [ 88.592474, 21.7998236 ], [ 88.5932937, 21.7991358 ], [ 88.593341, 21.7985942 ], [ 88.593073, 21.7977453 ], [ 88.5917978, 21.7978613 ], [ 88.58809, 21.79888 ], [ 88.58519, 21.80193 ], [ 88.58257, 21.80745 ], [ 88.5786, 21.81295 ], [ 88.57677, 21.81583 ], [ 88.57631, 21.81773 ], [ 88.5762, 21.82057 ], [ 88.57846, 21.8272 ], [ 88.57977, 21.83303 ], [ 88.58129, 21.8385 ], [ 88.58279, 21.84224 ], [ 88.58509, 21.84594 ], [ 88.58712, 21.8483 ], [ 88.58947, 21.8505 ], [ 88.59111, 21.85225 ], [ 88.59178, 21.85149 ], [ 88.59298, 21.84974 ], [ 88.59365, 21.849141516853933 ] ] ], [ [ [ 88.6971195, 21.8420569 ], [ 88.6983211, 21.8423755 ], [ 88.6996944, 21.8439689 ], [ 88.7007244, 21.8458809 ], [ 88.7012394, 21.8485896 ], [ 88.701926, 21.8512982 ], [ 88.7022694, 21.8540067 ], [ 88.7031277, 21.8552813 ], [ 88.7041576, 21.8557593 ], [ 88.7057026, 21.8554407 ], [ 88.7075909, 21.855122 ], [ 88.7098225, 21.8540067 ], [ 88.7120541, 21.8527321 ], [ 88.7177189, 21.8548034 ], [ 88.7276752, 21.8581491 ], [ 88.7297352, 21.8592644 ], [ 88.7304218, 21.8618135 ], [ 88.7304218, 21.863088 ], [ 88.7314518, 21.8642032 ], [ 88.734885, 21.8637252 ], [ 88.7379749, 21.8624507 ], [ 88.7419231, 21.8608575 ], [ 88.7441547, 21.8597423 ], [ 88.7472446, 21.8575118 ], [ 88.7493046, 21.8549627 ], [ 88.7515362, 21.8519355 ], [ 88.7506779, 21.8500236 ], [ 88.7489612, 21.8479523 ], [ 88.7453564, 21.8438096 ], [ 88.7426098, 21.8420569 ], [ 88.7410648, 21.8411008 ], [ 88.7376316, 21.8399855 ], [ 88.7345417, 21.8391887 ], [ 88.7305935, 21.8382327 ], [ 88.7263019, 21.8364799 ], [ 88.7213238, 21.8344084 ], [ 88.7192638, 21.833293 ], [ 88.7178905, 21.8312214 ], [ 88.7177189, 21.8293092 ], [ 88.7168606, 21.827397 ], [ 88.7142857, 21.8266002 ], [ 88.713084, 21.8267596 ], [ 88.7113674, 21.8275563 ], [ 88.7094791, 21.8286718 ], [ 88.7063892, 21.8296279 ], [ 88.7048443, 21.8289905 ], [ 88.703986, 21.8278751 ], [ 88.7032993, 21.8267596 ], [ 88.7026127, 21.8250066 ], [ 88.7022694, 21.8264409 ], [ 88.701926, 21.8277157 ], [ 88.7022694, 21.8294686 ], [ 88.7015827, 21.830584 ], [ 88.7008961, 21.8326556 ], [ 88.7000378, 21.8352052 ], [ 88.6991794, 21.8364799 ], [ 88.6983211, 21.8366393 ], [ 88.6976345, 21.837914 ], [ 88.6971195, 21.8393481 ], [ 88.6967762, 21.8403041 ], [ 88.6971195, 21.8420569 ] ] ], [ [ [ 88.777624, 21.8664692 ], [ 88.778654, 21.867425 ], [ 88.7807139, 21.8690181 ], [ 88.7820872, 21.8702926 ], [ 88.7836322, 21.8726822 ], [ 88.7846622, 21.873638 ], [ 88.7860354, 21.875231 ], [ 88.7872371, 21.8763461 ], [ 88.7889537, 21.8780984 ], [ 88.7901553, 21.8782577 ], [ 88.791357, 21.8776205 ], [ 88.7922153, 21.8765054 ], [ 88.7925586, 21.8753903 ], [ 88.7925586, 21.873638 ], [ 88.7925586, 21.8722043 ], [ 88.7911853, 21.8709298 ], [ 88.7891254, 21.869496 ], [ 88.7872371, 21.8683809 ], [ 88.7863788, 21.8671064 ], [ 88.7863788, 21.8655133 ], [ 88.7868938, 21.8642388 ], [ 88.7875804, 21.8637609 ], [ 88.789812, 21.8634422 ], [ 88.791357, 21.8639202 ], [ 88.7923869, 21.8647167 ], [ 88.7935885, 21.8656726 ], [ 88.7947902, 21.867425 ], [ 88.7954768, 21.869496 ], [ 88.7963351, 21.8718856 ], [ 88.7971934, 21.8734787 ], [ 88.7983951, 21.8758682 ], [ 88.8007983, 21.8776205 ], [ 88.8002833, 21.8758682 ], [ 88.799425, 21.8733194 ], [ 88.7995967, 21.8706112 ], [ 88.800455, 21.8690181 ], [ 88.801485, 21.8677437 ], [ 88.8040599, 21.8667878 ], [ 88.8062915, 21.8663099 ], [ 88.8090381, 21.8667878 ], [ 88.8117847, 21.867903 ], [ 88.8133296, 21.8686995 ], [ 88.8145312, 21.8696554 ], [ 88.8165912, 21.8696554 ], [ 88.8186511, 21.8704519 ], [ 88.8208827, 21.8707705 ], [ 88.8224277, 21.8704519 ], [ 88.823286, 21.8690181 ], [ 88.823801, 21.8666285 ], [ 88.8250026, 21.8650354 ], [ 88.8262042, 21.8636015 ], [ 88.8284358, 21.8629643 ], [ 88.8298091, 21.8620084 ], [ 88.8284358, 21.8581848 ], [ 88.8270625, 21.8546797 ], [ 88.8255176, 21.8502185 ], [ 88.8244876, 21.8463946 ], [ 88.8236293, 21.8436859 ], [ 88.8220843, 21.8403398 ], [ 88.821741, 21.8395431 ], [ 88.8210544, 21.8409771 ], [ 88.8213977, 21.8427298 ], [ 88.822256, 21.8441639 ], [ 88.8231143, 21.8459166 ], [ 88.823801, 21.8471912 ], [ 88.8241443, 21.8489439 ], [ 88.8241443, 21.8498999 ], [ 88.8234576, 21.8510152 ], [ 88.8219127, 21.8514931 ], [ 88.8174495, 21.8513338 ], [ 88.8131579, 21.8510152 ], [ 88.8109263, 21.8506965 ], [ 88.8092097, 21.8506965 ], [ 88.8080081, 21.8500592 ], [ 88.8057765, 21.8492625 ], [ 88.8045749, 21.8492625 ], [ 88.8032016, 21.8497405 ], [ 88.8025149, 21.8505372 ], [ 88.8026866, 21.8521305 ], [ 88.8026866, 21.8540424 ], [ 88.8021716, 21.855317 ], [ 88.8006267, 21.8557949 ], [ 88.7989101, 21.8551576 ], [ 88.7980517, 21.854361 ], [ 88.7975368, 21.8535644 ], [ 88.7942752, 21.853883 ], [ 88.7922153, 21.853883 ], [ 88.790842, 21.8529271 ], [ 88.7906703, 21.8511745 ], [ 88.7904986, 21.8489439 ], [ 88.788267, 21.8481472 ], [ 88.7870654, 21.8479879 ], [ 88.7862071, 21.8467132 ], [ 88.7860354, 21.8446419 ], [ 88.7856921, 21.8432079 ], [ 88.7843188, 21.8428892 ], [ 88.7807139, 21.8430485 ], [ 88.778654, 21.8433672 ], [ 88.7783107, 21.8448012 ], [ 88.7774524, 21.8457572 ], [ 88.7760791, 21.8463946 ], [ 88.7743625, 21.8463946 ], [ 88.7717876, 21.8467132 ], [ 88.7712726, 21.8495812 ], [ 88.7714442, 21.8518118 ], [ 88.7721309, 21.8527678 ], [ 88.7740192, 21.8537237 ], [ 88.7767657, 21.8545203 ], [ 88.7795123, 21.8556356 ], [ 88.7810573, 21.8567509 ], [ 88.7822589, 21.8578661 ], [ 88.7829455, 21.8593 ], [ 88.7827739, 21.8604152 ], [ 88.7817439, 21.8621677 ], [ 88.779169, 21.8636015 ], [ 88.7779674, 21.8645574 ], [ 88.7774524, 21.865354 ], [ 88.777624, 21.8664692 ] ] ], [ [ [ 68.402001, 23.4366914 ], [ 68.4006061, 23.4366859 ], [ 68.399904, 23.4375848 ], [ 68.3996063, 23.4417026 ], [ 68.3993228, 23.4427311 ], [ 68.399575, 23.4486529 ], [ 68.4017804, 23.4545823 ], [ 68.4026141, 23.4553578 ], [ 68.4027517, 23.4558732 ], [ 68.4044241, 23.4562652 ], [ 68.4060938, 23.4573013 ], [ 68.4069286, 23.4578194 ], [ 68.4080412, 23.4585958 ], [ 68.4088749, 23.4593712 ], [ 68.4094319, 23.4596309 ], [ 68.4108214, 23.4609233 ], [ 68.411934, 23.4616997 ], [ 68.4127689, 23.4622178 ], [ 68.416949, 23.4635205 ], [ 68.4189017, 23.463657 ], [ 68.418904, 23.4631422 ], [ 68.4183459, 23.4631401 ], [ 68.418347, 23.4628827 ], [ 68.4175105, 23.4627504 ], [ 68.4138896, 23.4611922 ], [ 68.4124978, 23.4604147 ], [ 68.4111083, 23.4591223 ], [ 68.4102735, 23.4586043 ], [ 68.4066524, 23.4571752 ], [ 68.4066547, 23.4566602 ], [ 68.4060966, 23.4566581 ], [ 68.406099, 23.4561433 ], [ 68.4052625, 23.456011 ], [ 68.4038707, 23.4552335 ], [ 68.4035929, 23.4549749 ], [ 68.4024786, 23.454585 ], [ 68.4029034, 23.453042 ], [ 68.4037441, 23.452273 ], [ 68.4038864, 23.4517587 ], [ 68.4058401, 23.451637 ], [ 68.4064005, 23.4511242 ], [ 68.4072382, 23.4509991 ], [ 68.4072404, 23.4504843 ], [ 68.40752, 23.4503561 ], [ 68.4083565, 23.4504884 ], [ 68.4082187, 23.449973 ], [ 68.4076642, 23.4491987 ], [ 68.4069694, 23.4486812 ], [ 68.4069671, 23.449196 ], [ 68.4064096, 23.4490647 ], [ 68.4062703, 23.448936 ], [ 68.4059959, 23.4479052 ], [ 68.4062794, 23.4468766 ], [ 68.4055876, 23.445715 ], [ 68.4050301, 23.4455846 ], [ 68.4048925, 23.4450692 ], [ 68.4047539, 23.4449396 ], [ 68.4036392, 23.444678 ], [ 68.4032219, 23.4442905 ], [ 68.402121, 23.4409398 ], [ 68.4021266, 23.4396527 ], [ 68.4029694, 23.4383688 ], [ 68.4029753, 23.4370817 ], [ 68.402001, 23.4366914 ] ] ], [ [ [ 68.5087285, 23.3200603 ], [ 68.5081704, 23.3201867 ], [ 68.5076111, 23.3206999 ], [ 68.505655, 23.3219809 ], [ 68.5023052, 23.3232574 ], [ 68.5018852, 23.3236428 ], [ 68.5013218, 23.3251856 ], [ 68.5013018, 23.3305915 ], [ 68.5004337, 23.3390843 ], [ 68.5008474, 23.3403727 ], [ 68.5016824, 23.3407611 ], [ 68.5047387, 23.3436025 ], [ 68.505851, 23.3443783 ], [ 68.5066854, 23.3448958 ], [ 68.5077992, 23.3452861 ], [ 68.5080838, 23.3437424 ], [ 68.5078049, 23.3437414 ], [ 68.5078068, 23.3432266 ], [ 68.507528, 23.3432256 ], [ 68.5072539, 23.3419376 ], [ 68.5064176, 23.3419349 ], [ 68.5064204, 23.3411627 ], [ 68.5080952, 23.3406531 ], [ 68.508235, 23.3403961 ], [ 68.5082369, 23.3398813 ], [ 68.5076813, 23.3393645 ], [ 68.5072721, 23.3370465 ], [ 68.5103405, 23.3365413 ], [ 68.5102044, 23.335511 ], [ 68.5093719, 23.3344787 ], [ 68.5093728, 23.3342213 ], [ 68.5096525, 23.3339646 ], [ 68.5097981, 23.3324205 ], [ 68.5103571, 23.3320357 ], [ 68.5125873, 23.3320427 ], [ 68.512867, 23.331786 ], [ 68.5139825, 23.3316613 ], [ 68.5141233, 23.3311468 ], [ 68.514403, 23.3308902 ], [ 68.5145476, 23.3296035 ], [ 68.5117608, 23.3293373 ], [ 68.5113479, 23.3277915 ], [ 68.5105163, 23.3265018 ], [ 68.510102, 23.3255989 ], [ 68.509266, 23.3254681 ], [ 68.5089922, 23.3241801 ], [ 68.5101076, 23.3240544 ], [ 68.5106633, 23.324571 ], [ 68.5117778, 23.3247036 ], [ 68.5115004, 23.3243162 ], [ 68.5108045, 23.3239284 ], [ 68.5105295, 23.3228977 ], [ 68.5099748, 23.3221236 ], [ 68.5088636, 23.3210903 ], [ 68.5085868, 23.3205747 ], [ 68.5087285, 23.3200603 ] ] ], [ [ [ 68.5864213, 23.3457709 ], [ 68.5861418, 23.3460276 ], [ 68.5857214, 23.3465413 ], [ 68.5857199, 23.3470561 ], [ 68.5854402, 23.3473129 ], [ 68.5852998, 23.3478274 ], [ 68.5847417, 23.3479542 ], [ 68.5843217, 23.3483396 ], [ 68.5840809, 23.3503099 ], [ 68.5838976, 23.350398 ], [ 68.5839017, 23.3491109 ], [ 68.5833436, 23.3492377 ], [ 68.5829229, 23.3498805 ], [ 68.5820841, 23.3506507 ], [ 68.5819435, 23.3511651 ], [ 68.5822227, 23.3510366 ], [ 68.5841748, 23.3509136 ], [ 68.584271, 23.3504866 ], [ 68.5849176, 23.3502309 ], [ 68.5848723, 23.3506581 ], [ 68.5845925, 23.3509147 ], [ 68.5843113, 23.3516864 ], [ 68.5840318, 23.3519431 ], [ 68.5836113, 23.3528425 ], [ 68.5827744, 23.3529693 ], [ 68.5830507, 23.3537425 ], [ 68.5824927, 23.3538692 ], [ 68.5815143, 23.3545106 ], [ 68.5813737, 23.3550251 ], [ 68.5805374, 23.355023 ], [ 68.5806746, 23.3555382 ], [ 68.5801153, 23.3560515 ], [ 68.5795553, 23.3568223 ], [ 68.5788537, 23.3583651 ], [ 68.5790365, 23.3584532 ], [ 68.5787122, 23.3588796 ], [ 68.578426, 23.3611957 ], [ 68.577866, 23.3619665 ], [ 68.5773058, 23.3627374 ], [ 68.5760433, 23.3653082 ], [ 68.5757645, 23.3653074 ], [ 68.5757621, 23.3660799 ], [ 68.5771567, 23.3659544 ], [ 68.5782733, 23.3655717 ], [ 68.5784139, 23.3650572 ], [ 68.5789739, 23.3642865 ], [ 68.5798146, 23.3630015 ], [ 68.5803746, 23.3622307 ], [ 68.5823323, 23.3604339 ], [ 68.5828923, 23.3596631 ], [ 68.5834525, 23.3588922 ], [ 68.5840125, 23.3581215 ], [ 68.5862567, 23.353751 ], [ 68.5868159, 23.3532375 ], [ 68.5869575, 23.3527231 ], [ 68.5877959, 23.3520812 ], [ 68.5889123, 23.3516985 ], [ 68.5891936, 23.3509268 ], [ 68.5900316, 23.3504142 ], [ 68.589609, 23.3517002 ], [ 68.5893213, 23.3545314 ], [ 68.5887606, 23.3555596 ], [ 68.588062, 23.3562009 ], [ 68.5875039, 23.3563286 ], [ 68.5862391, 23.3594146 ], [ 68.5859596, 23.3596713 ], [ 68.5845564, 23.3624993 ], [ 68.5846923, 23.3637869 ], [ 68.585527, 23.3644322 ], [ 68.5860847, 23.3644337 ], [ 68.5880335, 23.3654687 ], [ 68.5891484, 23.3656008 ], [ 68.5888707, 23.3652133 ], [ 68.5881743, 23.3648259 ], [ 68.588175, 23.3645685 ], [ 68.5884548, 23.3643116 ], [ 68.5886033, 23.3614802 ], [ 68.589161, 23.3614817 ], [ 68.5895829, 23.3601956 ], [ 68.5904217, 23.3594256 ], [ 68.5902843, 23.3589104 ], [ 68.590842, 23.3589117 ], [ 68.5909824, 23.3583972 ], [ 68.5908439, 23.3582678 ], [ 68.590008, 23.3581374 ], [ 68.5900095, 23.3576223 ], [ 68.5922393, 23.3578856 ], [ 68.5923799, 23.3573711 ], [ 68.5926594, 23.3571145 ], [ 68.5925245, 23.3558268 ], [ 68.593082, 23.3558283 ], [ 68.5932227, 23.3553139 ], [ 68.5929446, 23.3550557 ], [ 68.5929454, 23.3547983 ], [ 68.5932249, 23.3545416 ], [ 68.5936468, 23.3535129 ], [ 68.5944825, 23.3537726 ], [ 68.5944865, 23.3524853 ], [ 68.5939291, 23.3523547 ], [ 68.5936515, 23.3519682 ], [ 68.594488, 23.3519705 ], [ 68.594213, 23.3506826 ], [ 68.5950503, 23.3504273 ], [ 68.5953323, 23.3493982 ], [ 68.5961686, 23.3494004 ], [ 68.5963092, 23.348886 ], [ 68.5961707, 23.3487563 ], [ 68.5956133, 23.3486267 ], [ 68.5956143, 23.3483693 ], [ 68.5961718, 23.3483706 ], [ 68.5958976, 23.3468253 ], [ 68.5975689, 23.3473445 ], [ 68.5974306, 23.3468293 ], [ 68.5971525, 23.3465711 ], [ 68.597436, 23.3450272 ], [ 68.5977156, 23.3447705 ], [ 68.5981382, 23.3434844 ], [ 68.5989747, 23.3434866 ], [ 68.5989762, 23.3429716 ], [ 68.599255, 23.3429724 ], [ 68.5992527, 23.3437446 ], [ 68.600367, 23.3440051 ], [ 68.6003686, 23.34349 ], [ 68.6012051, 23.3434923 ], [ 68.60135, 23.3414332 ], [ 68.6012119, 23.3411754 ], [ 68.6017696, 23.3411767 ], [ 68.6017726, 23.340147 ], [ 68.6023302, 23.3401485 ], [ 68.6035904, 23.3380922 ], [ 68.6041495, 23.3375787 ], [ 68.6042909, 23.3370642 ], [ 68.6048486, 23.3370656 ], [ 68.6055496, 23.3355227 ], [ 68.6059743, 23.3334643 ], [ 68.606533, 23.333079 ], [ 68.6070909, 23.3329522 ], [ 68.6073667, 23.3339826 ], [ 68.6079242, 23.3339841 ], [ 68.6077866, 23.3332113 ], [ 68.6075086, 23.3329533 ], [ 68.6073712, 23.3324381 ], [ 68.6076496, 23.332567 ], [ 68.6084859, 23.3325691 ], [ 68.6096022, 23.3321861 ], [ 68.6098832, 23.3314145 ], [ 68.609604, 23.331542 ], [ 68.6082105, 23.3314103 ], [ 68.608209, 23.3319253 ], [ 68.6054194, 23.3325613 ], [ 68.6045816, 23.3330741 ], [ 68.6040225, 23.3335876 ], [ 68.6034646, 23.3337153 ], [ 68.6034631, 23.3342302 ], [ 68.6029051, 23.334357 ], [ 68.6026254, 23.3346138 ], [ 68.6020675, 23.3347416 ], [ 68.6019261, 23.3352561 ], [ 68.6017868, 23.335384 ], [ 68.6009501, 23.335511 ], [ 68.6009486, 23.3360259 ], [ 68.6001119, 23.3361521 ], [ 68.5992739, 23.3366649 ], [ 68.5981584, 23.3367911 ], [ 68.5981569, 23.337306 ], [ 68.5970416, 23.3373031 ], [ 68.5970401, 23.337818 ], [ 68.5964821, 23.3379448 ], [ 68.5963419, 23.3380737 ], [ 68.5962015, 23.3385881 ], [ 68.5942491, 23.3388405 ], [ 68.5941068, 23.3396125 ], [ 68.5936872, 23.3402545 ], [ 68.5922909, 23.3410232 ], [ 68.5914521, 23.3417934 ], [ 68.5908942, 23.341921 ], [ 68.5904738, 23.3424349 ], [ 68.5901919, 23.3434638 ], [ 68.5900526, 23.3435917 ], [ 68.5892162, 23.3435895 ], [ 68.5879558, 23.34526 ], [ 68.5879543, 23.3457749 ], [ 68.5877182, 23.3462007 ], [ 68.5875349, 23.3462888 ], [ 68.5878114, 23.3470618 ], [ 68.5872538, 23.3470602 ], [ 68.5865515, 23.3486031 ], [ 68.5862718, 23.3488597 ], [ 68.5864094, 23.3496324 ], [ 68.5855725, 23.3497584 ], [ 68.5851089, 23.3500553 ], [ 68.5862775, 23.3470576 ], [ 68.5862355, 23.3463729 ], [ 68.5864198, 23.3462857 ], [ 68.5865152, 23.3461162 ], [ 68.5866993, 23.3460291 ], [ 68.5867001, 23.3457716 ], [ 68.5864213, 23.3457709 ] ] ], [ [ [ 68.4250312, 23.4013817 ], [ 68.429216, 23.4011396 ], [ 68.4292171, 23.4008822 ], [ 68.4297749, 23.400884 ], [ 68.4306161, 23.3998574 ], [ 68.4283837, 23.4001067 ], [ 68.4281104, 23.3988187 ], [ 68.4188957, 23.4012297 ], [ 68.4152629, 23.4027608 ], [ 68.4113523, 23.4040332 ], [ 68.4103727, 23.4046735 ], [ 68.4095281, 23.4064724 ], [ 68.4089611, 23.4085297 ], [ 68.4089518, 23.4105892 ], [ 68.409365, 23.4118778 ], [ 68.4099212, 23.4122656 ], [ 68.4113147, 23.4125283 ], [ 68.4124322, 23.4121467 ], [ 68.4127169, 23.4108608 ], [ 68.4138343, 23.4104784 ], [ 68.4141143, 23.410222 ], [ 68.4146728, 23.4100957 ], [ 68.4146751, 23.4095809 ], [ 68.4160686, 23.4098436 ], [ 68.4160709, 23.4093288 ], [ 68.4177467, 23.4088202 ], [ 68.418168, 23.4080494 ], [ 68.4190081, 23.4072802 ], [ 68.419715, 23.4052235 ], [ 68.4202744, 23.4048389 ], [ 68.4213907, 23.4047147 ], [ 68.4213929, 23.4041999 ], [ 68.4219509, 23.4042019 ], [ 68.4225165, 23.4024021 ], [ 68.4236339, 23.4020196 ], [ 68.4241939, 23.4015068 ], [ 68.4250312, 23.4013817 ] ] ], [ [ [ 68.2342, 23.58242 ], [ 68.23324, 23.58253 ], [ 68.23115, 23.58289 ], [ 68.22565, 23.58344 ], [ 68.22393, 23.58338 ], [ 68.22067, 23.58406 ], [ 68.21866, 23.58469 ], [ 68.21684, 23.58537 ], [ 68.2147, 23.58586 ], [ 68.21336, 23.58652 ], [ 68.21316, 23.58673 ], [ 68.21323, 23.58849 ], [ 68.21389, 23.59059 ], [ 68.21467, 23.5917 ], [ 68.21577, 23.59176 ], [ 68.2168, 23.59143 ], [ 68.21775, 23.59017 ], [ 68.21857, 23.58881 ], [ 68.21953, 23.58812 ], [ 68.22256, 23.58729 ], [ 68.22628, 23.58677 ], [ 68.22991, 23.58629 ], [ 68.23188, 23.58618 ], [ 68.23402, 23.5864 ], [ 68.23567, 23.58672 ], [ 68.2366, 23.58642 ], [ 68.23834, 23.58556 ], [ 68.23852, 23.58509 ], [ 68.23812, 23.58458 ], [ 68.23655, 23.58383 ], [ 68.23359, 23.58361 ], [ 68.23429, 23.58317 ], [ 68.23471, 23.58271 ], [ 68.2342, 23.58242 ] ] ], [ [ [ 68.44351, 23.57375 ], [ 68.44205, 23.57618 ], [ 68.44165, 23.58193 ], [ 68.44175, 23.58505 ], [ 68.43954, 23.58669 ], [ 68.43879, 23.5905 ], [ 68.44001, 23.59619 ], [ 68.4398, 23.60387 ], [ 68.43781, 23.60686 ], [ 68.43592, 23.61312 ], [ 68.43568, 23.61665 ], [ 68.43666, 23.61878 ], [ 68.44312, 23.62108 ], [ 68.45085, 23.62376 ], [ 68.45744, 23.62414 ], [ 68.46383, 23.62288 ], [ 68.4659, 23.62093 ], [ 68.46612, 23.61784 ], [ 68.46514, 23.61334 ], [ 68.46539, 23.60744 ], [ 68.46575, 23.60228 ], [ 68.46577, 23.60128 ], [ 68.4654, 23.59862 ], [ 68.46556, 23.59629 ], [ 68.46593, 23.59407 ], [ 68.4666, 23.59248 ], [ 68.46645, 23.59146 ], [ 68.46585, 23.59041 ], [ 68.46426, 23.58777 ], [ 68.46166, 23.58375 ], [ 68.46082, 23.58147 ], [ 68.46162, 23.57948 ], [ 68.46206, 23.57788 ], [ 68.46126, 23.57671 ], [ 68.45998, 23.57593 ], [ 68.45806, 23.57579 ], [ 68.45211, 23.57307 ], [ 68.44942, 23.57232 ], [ 68.44638, 23.57185 ], [ 68.44351, 23.57375 ] ] ], [ [ [ 68.2252563, 23.6992534 ], [ 68.2241382, 23.6992478 ], [ 68.2235776, 23.6995023 ], [ 68.22022, 23.7000004 ], [ 68.2179762, 23.7012761 ], [ 68.2174139, 23.7017881 ], [ 68.2168541, 23.7019144 ], [ 68.2165723, 23.7022986 ], [ 68.2160117, 23.7025532 ], [ 68.2148889, 23.7033198 ], [ 68.213766, 23.7040864 ], [ 68.2129229, 23.7048543 ], [ 68.2122211, 23.7052374 ], [ 68.2116558, 23.706264 ], [ 68.2106742, 23.7069021 ], [ 68.2088464, 23.7085664 ], [ 68.2074377, 23.7103612 ], [ 68.206874, 23.7111306 ], [ 68.2056009, 23.7136981 ], [ 68.2061592, 23.7138291 ], [ 68.2064372, 23.714088 ], [ 68.2083911, 23.7146129 ], [ 68.210908, 23.7144974 ], [ 68.2110458, 23.7147556 ], [ 68.2110365, 23.7163001 ], [ 68.2111752, 23.7165581 ], [ 68.2108955, 23.7165568 ], [ 68.2108925, 23.7170716 ], [ 68.2114493, 23.71746 ], [ 68.2128456, 23.7177246 ], [ 68.2139685, 23.716958 ], [ 68.2162058, 23.7168412 ], [ 68.2166279, 23.7163284 ], [ 68.2166354, 23.7150414 ], [ 68.2162189, 23.7146528 ], [ 68.2151015, 23.7145188 ], [ 68.2148265, 23.7137452 ], [ 68.2151068, 23.7136174 ], [ 68.2176222, 23.7137594 ], [ 68.2179063, 23.7129884 ], [ 68.2184655, 23.7129913 ], [ 68.2185647, 23.7123073 ], [ 68.2193086, 23.7122234 ], [ 68.2190314, 23.7118354 ], [ 68.2187519, 23.711834 ], [ 68.2183744, 23.7121302 ], [ 68.2179117, 23.7120871 ], [ 68.2173495, 23.7125991 ], [ 68.2159509, 23.7127212 ], [ 68.2159541, 23.7122064 ], [ 68.2165131, 23.7122092 ], [ 68.2165192, 23.7111797 ], [ 68.2170784, 23.7111825 ], [ 68.2176483, 23.7093835 ], [ 68.2187689, 23.7090026 ], [ 68.2196075, 23.7090068 ], [ 68.2201695, 23.7084948 ], [ 68.2212901, 23.7081147 ], [ 68.2215757, 23.7070865 ], [ 68.2235319, 23.7072247 ], [ 68.2240894, 23.7074848 ], [ 68.2266054, 23.7074974 ], [ 68.2280055, 23.7071187 ], [ 68.2281463, 23.706862 ], [ 68.2281523, 23.7058323 ], [ 68.2277373, 23.7051863 ], [ 68.2267621, 23.7045384 ], [ 68.2262168, 23.7022188 ], [ 68.2260782, 23.702089 ], [ 68.2255199, 23.701958 ], [ 68.225523, 23.7014432 ], [ 68.2260843, 23.7010595 ], [ 68.2269236, 23.7009353 ], [ 68.2265069, 23.7004184 ], [ 68.2263706, 23.699903 ], [ 68.2258123, 23.6997711 ], [ 68.2252563, 23.6992534 ] ] ], [ [ [ 68.5034, 23.73879 ], [ 68.50297, 23.73862 ], [ 68.50223, 23.73858 ], [ 68.50119, 23.73843 ], [ 68.49976, 23.73816 ], [ 68.49755, 23.73748 ], [ 68.49647, 23.73688 ], [ 68.49527, 23.73613 ], [ 68.49428, 23.73548 ], [ 68.49295, 23.73511 ], [ 68.49235, 23.73515 ], [ 68.49188, 23.73542 ], [ 68.49114, 23.73598 ], [ 68.49022, 23.7369 ], [ 68.48991, 23.73747 ], [ 68.48959, 23.73774 ], [ 68.48937, 23.73777 ], [ 68.4892, 23.73776 ], [ 68.48876, 23.73764 ], [ 68.48836, 23.73756 ], [ 68.48806, 23.73756 ], [ 68.48785, 23.73766 ], [ 68.4877, 23.73776 ], [ 68.48755, 23.73793 ], [ 68.48748, 23.73812 ], [ 68.48748, 23.73826 ], [ 68.48771, 23.73903 ], [ 68.48864, 23.74126 ], [ 68.4889, 23.74208 ], [ 68.4891, 23.74323 ], [ 68.48915, 23.74409 ], [ 68.48914, 23.74548 ], [ 68.48911, 23.74606 ], [ 68.48905, 23.74663 ], [ 68.48889, 23.74735 ], [ 68.48866, 23.74812 ], [ 68.4884, 23.74865 ], [ 68.48803, 23.74914 ], [ 68.48731, 23.74999 ], [ 68.48691, 23.75038 ], [ 68.48665, 23.75067 ], [ 68.48591, 23.75126 ], [ 68.48404, 23.75309 ], [ 68.48317, 23.75343 ], [ 68.48237, 23.75338 ], [ 68.48192, 23.7532 ], [ 68.48146, 23.75285 ], [ 68.48087, 23.75225 ], [ 68.48052, 23.75177 ], [ 68.47979, 23.7504 ], [ 68.47932, 23.74975 ], [ 68.47867, 23.74916 ], [ 68.47828, 23.74903 ], [ 68.47773, 23.749 ], [ 68.47728, 23.74913 ], [ 68.47556, 23.75 ], [ 68.47422, 23.75101 ], [ 68.4735, 23.75173 ], [ 68.4729, 23.75251 ], [ 68.47225, 23.75346 ], [ 68.47173, 23.7543 ], [ 68.47155, 23.75471 ], [ 68.47151, 23.75494 ], [ 68.47142, 23.75516 ], [ 68.47118, 23.75552 ], [ 68.47004, 23.75695 ], [ 68.46886, 23.7587 ], [ 68.46845, 23.75925 ], [ 68.46802, 23.75993 ], [ 68.46773, 23.76025 ], [ 68.46718, 23.76125 ], [ 68.46682, 23.76178 ], [ 68.4664, 23.76255 ], [ 68.46603, 23.76337 ], [ 68.46577, 23.76422 ], [ 68.46567, 23.76465 ], [ 68.46559, 23.76478 ], [ 68.46517, 23.76523 ], [ 68.46489, 23.76572 ], [ 68.46435, 23.7674 ], [ 68.46422, 23.76809 ], [ 68.4642, 23.7687 ], [ 68.46432, 23.76926 ], [ 68.46439, 23.76946 ], [ 68.46452, 23.76967 ], [ 68.46466, 23.76983 ], [ 68.46548, 23.77058 ], [ 68.46617, 23.77091 ], [ 68.46657, 23.77127 ], [ 68.46679, 23.77157 ], [ 68.46683, 23.77201 ], [ 68.46678, 23.7726 ], [ 68.46685, 23.77345 ], [ 68.46684, 23.7737 ], [ 68.46673, 23.77414 ], [ 68.46649, 23.77453 ], [ 68.46631, 23.77475 ], [ 68.46609, 23.77515 ], [ 68.46595, 23.77572 ], [ 68.46595, 23.77602 ], [ 68.46605, 23.77687 ], [ 68.46621, 23.77762 ], [ 68.46637, 23.7782 ], [ 68.4665, 23.77851 ], [ 68.46655, 23.77871 ], [ 68.46648, 23.77886 ], [ 68.46626, 23.7791 ], [ 68.46603, 23.7793 ], [ 68.46503, 23.78059 ], [ 68.46446, 23.78136 ], [ 68.4638, 23.78196 ], [ 68.46239, 23.78317 ], [ 68.46199, 23.7836 ], [ 68.46178, 23.78389 ], [ 68.46144, 23.78455 ], [ 68.46131, 23.78513 ], [ 68.46129, 23.78557 ], [ 68.4613, 23.78607 ], [ 68.46144, 23.78707 ], [ 68.46197, 23.78824 ], [ 68.46205, 23.78837 ], [ 68.46222, 23.78888 ], [ 68.46225, 23.78939 ], [ 68.4622, 23.78987 ], [ 68.46208, 23.79023 ], [ 68.46185, 23.79059 ], [ 68.46163, 23.79076 ], [ 68.46127, 23.79094 ], [ 68.46064, 23.79116 ], [ 68.46, 23.79126 ], [ 68.45793, 23.79138 ], [ 68.45758, 23.79149 ], [ 68.45744, 23.79165 ], [ 68.45735, 23.79182 ], [ 68.45737, 23.79204 ], [ 68.45748, 23.79257 ], [ 68.45765, 23.79374 ], [ 68.45774, 23.79414 ], [ 68.45781, 23.79459 ], [ 68.45795, 23.79514 ], [ 68.45815, 23.79561 ], [ 68.45821, 23.79591 ], [ 68.45828, 23.79609 ], [ 68.45841, 23.79667 ], [ 68.4584, 23.79673 ], [ 68.45856, 23.79747 ], [ 68.45859, 23.79867 ], [ 68.45855, 23.79926 ], [ 68.45827, 23.80091 ], [ 68.45801, 23.80187 ], [ 68.45815, 23.80205 ], [ 68.45816, 23.80215 ], [ 68.45811, 23.80226 ], [ 68.45796, 23.80234 ], [ 68.45791, 23.80245 ], [ 68.45783, 23.80255 ], [ 68.45766, 23.80304 ], [ 68.45719, 23.80411 ], [ 68.45687, 23.80493 ], [ 68.45644, 23.80597 ], [ 68.45605, 23.80659 ], [ 68.45524, 23.80802 ], [ 68.45451, 23.80943 ], [ 68.45425, 23.80977 ], [ 68.45408, 23.81056 ], [ 68.45411, 23.81125 ], [ 68.45391, 23.81223 ], [ 68.45375, 23.81265 ], [ 68.45373, 23.81286 ], [ 68.4538, 23.81312 ], [ 68.45394, 23.81333 ], [ 68.45541, 23.81521 ], [ 68.45588, 23.81576 ], [ 68.45686, 23.81651 ], [ 68.45745, 23.81688 ], [ 68.45792, 23.81726 ], [ 68.45988, 23.81812 ], [ 68.46075, 23.8184 ], [ 68.46176, 23.81858 ], [ 68.46256, 23.81877 ], [ 68.4636, 23.81897 ], [ 68.46629, 23.81912 ], [ 68.46796, 23.81907 ], [ 68.46888, 23.81919 ], [ 68.47004, 23.81941 ], [ 68.47104, 23.81968 ], [ 68.4721, 23.81978 ], [ 68.47255, 23.81995 ], [ 68.47306, 23.82009 ], [ 68.47403, 23.82025 ], [ 68.47538, 23.82074 ], [ 68.47578, 23.82093 ], [ 68.47683, 23.82132 ], [ 68.47761, 23.82175 ], [ 68.47836, 23.82222 ], [ 68.47889, 23.82259 ], [ 68.47942, 23.82292 ], [ 68.47991, 23.82329 ], [ 68.48128, 23.8244 ], [ 68.48188, 23.8251 ], [ 68.48234, 23.82558 ], [ 68.48293, 23.82592 ], [ 68.48354, 23.82637 ], [ 68.48451, 23.82669 ], [ 68.48543, 23.8275 ], [ 68.486, 23.82795 ], [ 68.48655, 23.8283 ], [ 68.48691, 23.82836 ], [ 68.48734, 23.82839 ], [ 68.48785, 23.8286 ], [ 68.4882, 23.8288 ], [ 68.48827, 23.82903 ], [ 68.48854, 23.82923 ], [ 68.48886, 23.82929 ], [ 68.48918, 23.82939 ], [ 68.4897, 23.82925 ], [ 68.48987, 23.82938 ], [ 68.49028, 23.82958 ], [ 68.49049, 23.82971 ], [ 68.49077, 23.82976 ], [ 68.49108, 23.82969 ], [ 68.49147, 23.82952 ], [ 68.49171, 23.82949 ], [ 68.4923, 23.82948 ], [ 68.49299, 23.82951 ], [ 68.49372, 23.82985 ], [ 68.49395, 23.83001 ], [ 68.49411, 23.83004 ], [ 68.49449, 23.82999 ], [ 68.49488, 23.83 ], [ 68.49515, 23.82996 ], [ 68.49689, 23.82998 ], [ 68.49807, 23.82982 ], [ 68.49933, 23.8298 ], [ 68.49976, 23.82971 ], [ 68.50017, 23.82955 ], [ 68.5005, 23.82935 ], [ 68.50097, 23.82923 ], [ 68.50225, 23.82882 ], [ 68.50319, 23.82841 ], [ 68.50388, 23.82791 ], [ 68.50549, 23.82699 ], [ 68.50594, 23.82666 ], [ 68.50622, 23.8264 ], [ 68.50686, 23.82597 ], [ 68.50711, 23.82575 ], [ 68.50725, 23.82567 ], [ 68.5074, 23.82548 ], [ 68.50766, 23.82524 ], [ 68.50786, 23.82519 ], [ 68.50796, 23.82513 ], [ 68.50824, 23.82489 ], [ 68.5087, 23.82457 ], [ 68.50912, 23.8243 ], [ 68.5092, 23.82406 ], [ 68.5093, 23.82384 ], [ 68.50932, 23.82364 ], [ 68.50961, 23.82308 ], [ 68.50963, 23.82298 ], [ 68.50978, 23.82274 ], [ 68.50987, 23.82264 ], [ 68.50995, 23.8225 ], [ 68.51022, 23.82222 ], [ 68.51085, 23.82166 ], [ 68.51113, 23.82136 ], [ 68.51146, 23.82108 ], [ 68.51211, 23.82062 ], [ 68.51287, 23.81999 ], [ 68.51319, 23.81965 ], [ 68.51423, 23.81879 ], [ 68.51462, 23.8185 ], [ 68.51491, 23.81832 ], [ 68.517, 23.81745 ], [ 68.51746, 23.81729 ], [ 68.51803, 23.81718 ], [ 68.51835, 23.81714 ], [ 68.51851, 23.81704 ], [ 68.51874, 23.81696 ], [ 68.51882, 23.81689 ], [ 68.51876, 23.81606 ], [ 68.51872, 23.81595 ], [ 68.51867, 23.81453 ], [ 68.51872, 23.81321 ], [ 68.51869, 23.81262 ], [ 68.51872, 23.81212 ], [ 68.51887, 23.81143 ], [ 68.51905, 23.81082 ], [ 68.51913, 23.81065 ], [ 68.51923, 23.81027 ], [ 68.5193, 23.81016 ], [ 68.51934, 23.80993 ], [ 68.51947, 23.80947 ], [ 68.51976, 23.80877 ], [ 68.5198, 23.80856 ], [ 68.51999, 23.80815 ], [ 68.52053, 23.80651 ], [ 68.52065, 23.80617 ], [ 68.52111, 23.80531 ], [ 68.5214, 23.80453 ], [ 68.52174, 23.80379 ], [ 68.52217, 23.80301 ], [ 68.52254, 23.80235 ], [ 68.52246, 23.8022 ], [ 68.52242, 23.80199 ], [ 68.52222, 23.80184 ], [ 68.52122, 23.80147 ], [ 68.52015, 23.80097 ], [ 68.51921, 23.80035 ], [ 68.51856, 23.79983 ], [ 68.5175, 23.79885 ], [ 68.51747, 23.79875 ], [ 68.51742, 23.79868 ], [ 68.51732, 23.79863 ], [ 68.51685, 23.79818 ], [ 68.51643, 23.79786 ], [ 68.51611, 23.79763 ], [ 68.51571, 23.79752 ], [ 68.51562, 23.79747 ], [ 68.51546, 23.79729 ], [ 68.51516, 23.79711 ], [ 68.51444, 23.79624 ], [ 68.51379, 23.79527 ], [ 68.51371, 23.79512 ], [ 68.51327, 23.79447 ], [ 68.51298, 23.79391 ], [ 68.51287, 23.79365 ], [ 68.51273, 23.79344 ], [ 68.5125, 23.79301 ], [ 68.51206, 23.79193 ], [ 68.5119, 23.79143 ], [ 68.51146, 23.78976 ], [ 68.51125, 23.78918 ], [ 68.51125, 23.78903 ], [ 68.51118, 23.78878 ], [ 68.51116, 23.78848 ], [ 68.51123, 23.78762 ], [ 68.51122, 23.78748 ], [ 68.51127, 23.78737 ], [ 68.51121, 23.78724 ], [ 68.51125, 23.78712 ], [ 68.51119, 23.78699 ], [ 68.51123, 23.78649 ], [ 68.51129, 23.78628 ], [ 68.51127, 23.78618 ], [ 68.51139, 23.78587 ], [ 68.5114, 23.78569 ], [ 68.51155, 23.78545 ], [ 68.51157, 23.78488 ], [ 68.51175, 23.78462 ], [ 68.51183, 23.78419 ], [ 68.51193, 23.78406 ], [ 68.51196, 23.78383 ], [ 68.51207, 23.78349 ], [ 68.51214, 23.78336 ], [ 68.5123, 23.78321 ], [ 68.51234, 23.783 ], [ 68.51248, 23.78271 ], [ 68.51268, 23.78245 ], [ 68.51292, 23.7824 ], [ 68.51306, 23.78242 ], [ 68.51321, 23.78237 ], [ 68.51334, 23.78237 ], [ 68.51355, 23.78225 ], [ 68.51367, 23.78215 ], [ 68.51371, 23.78206 ], [ 68.51385, 23.78194 ], [ 68.51398, 23.78166 ], [ 68.51405, 23.78157 ], [ 68.51417, 23.78147 ], [ 68.5143, 23.78132 ], [ 68.51437, 23.78128 ], [ 68.51444, 23.78108 ], [ 68.51473, 23.78059 ], [ 68.51472, 23.78054 ], [ 68.51455, 23.78028 ], [ 68.51457, 23.78011 ], [ 68.51463, 23.78 ], [ 68.51486, 23.7798 ], [ 68.51515, 23.77961 ], [ 68.51534, 23.77924 ], [ 68.51557, 23.77889 ], [ 68.5158, 23.77877 ], [ 68.51649, 23.778 ], [ 68.5171, 23.77767 ], [ 68.51821, 23.77687 ], [ 68.51856, 23.77668 ], [ 68.52013, 23.77604 ], [ 68.52082, 23.7757 ], [ 68.5215, 23.77494 ], [ 68.52194, 23.77414 ], [ 68.52222, 23.77303 ], [ 68.52225, 23.77247 ], [ 68.52212, 23.7716 ], [ 68.52188, 23.77031 ], [ 68.52155, 23.76763 ], [ 68.52119, 23.76607 ], [ 68.52079, 23.76473 ], [ 68.5203, 23.76323 ], [ 68.51973, 23.76195 ], [ 68.51931, 23.76126 ], [ 68.51919, 23.76093 ], [ 68.51904, 23.7602 ], [ 68.51819, 23.75783 ], [ 68.51738, 23.75618 ], [ 68.51731, 23.75608 ], [ 68.51716, 23.75598 ], [ 68.51703, 23.75579 ], [ 68.51667, 23.75545 ], [ 68.51658, 23.75533 ], [ 68.51625, 23.755 ], [ 68.51615, 23.75493 ], [ 68.51543, 23.75404 ], [ 68.5154, 23.75397 ], [ 68.51518, 23.75379 ], [ 68.51508, 23.75368 ], [ 68.51493, 23.75343 ], [ 68.51491, 23.75335 ], [ 68.51443, 23.75269 ], [ 68.5144, 23.75261 ], [ 68.5144, 23.75253 ], [ 68.51425, 23.75239 ], [ 68.51405, 23.75228 ], [ 68.51385, 23.75213 ], [ 68.51363, 23.7519 ], [ 68.51333, 23.75147 ], [ 68.51312, 23.75111 ], [ 68.51268, 23.7505 ], [ 68.51223, 23.74993 ], [ 68.51172, 23.74961 ], [ 68.51097, 23.74907 ], [ 68.50974, 23.74761 ], [ 68.50866, 23.74642 ], [ 68.50614, 23.74279 ], [ 68.5048, 23.74137 ], [ 68.50445, 23.74087 ], [ 68.5039, 23.73957 ], [ 68.5034, 23.73879 ] ] ], [ [ [ 68.59205, 23.79284 ], [ 68.58842, 23.79076 ], [ 68.58301, 23.78963 ], [ 68.57803, 23.78991 ], [ 68.57449, 23.79132 ], [ 68.5749, 23.7937 ], [ 68.57841, 23.79666 ], [ 68.58413, 23.80105 ], [ 68.58694, 23.80539 ], [ 68.58753, 23.80909 ], [ 68.58646, 23.81196 ], [ 68.58804, 23.81415 ], [ 68.59587, 23.81592 ], [ 68.59598, 23.81841 ], [ 68.59313, 23.81903 ], [ 68.58951, 23.81978 ], [ 68.58823, 23.82151 ], [ 68.58898, 23.82584 ], [ 68.59253, 23.82783 ], [ 68.59347, 23.83019 ], [ 68.59313, 23.8329 ], [ 68.5962, 23.83443 ], [ 68.60119, 23.83342 ], [ 68.60484, 23.82961 ], [ 68.60969, 23.82826 ], [ 68.61828, 23.82948 ], [ 68.62403, 23.83081 ], [ 68.6258, 23.83011 ], [ 68.62272, 23.82648 ], [ 68.61726, 23.82187 ], [ 68.61454, 23.81892 ], [ 68.6109, 23.81838 ], [ 68.6084, 23.8165 ], [ 68.60204, 23.80953 ], [ 68.59766, 23.8022 ], [ 68.5939, 23.79416 ], [ 68.59323, 23.79358 ], [ 68.59267, 23.79315 ], [ 68.59205, 23.79284 ] ] ], [ [ [ 68.5816232, 23.7174885 ], [ 68.5816198, 23.7185184 ], [ 68.583017, 23.7187796 ], [ 68.5834342, 23.7192956 ], [ 68.5835729, 23.7198108 ], [ 68.5841321, 23.7198123 ], [ 68.584546, 23.7213579 ], [ 68.5842658, 23.7216146 ], [ 68.5842641, 23.7221294 ], [ 68.5845848, 23.7230714 ], [ 68.5838422, 23.7230289 ], [ 68.5835615, 23.7234146 ], [ 68.5843994, 23.7236743 ], [ 68.5845396, 23.7234173 ], [ 68.5849603, 23.723161 ], [ 68.5853718, 23.7254789 ], [ 68.5849516, 23.7258635 ], [ 68.584392, 23.7259911 ], [ 68.5843905, 23.7265059 ], [ 68.5841113, 23.7263761 ], [ 68.5827133, 23.7263723 ], [ 68.5815973, 23.725597 ], [ 68.58076, 23.7250799 ], [ 68.5802013, 23.7249501 ], [ 68.5802028, 23.7244352 ], [ 68.5807621, 23.7244367 ], [ 68.5806235, 23.7239215 ], [ 68.5804846, 23.7237921 ], [ 68.5782503, 23.7230136 ], [ 68.5768526, 23.7228816 ], [ 68.5775445, 23.7249429 ], [ 68.5781011, 23.7257166 ], [ 68.5792164, 23.7267493 ], [ 68.5800511, 23.7280387 ], [ 68.5801898, 23.7285539 ], [ 68.5807485, 23.7286838 ], [ 68.5821442, 23.7294598 ], [ 68.5832625, 23.7294628 ], [ 68.583543, 23.7292062 ], [ 68.5882966, 23.7292188 ], [ 68.5885765, 23.7290914 ], [ 68.588575, 23.7296063 ], [ 68.5919288, 23.73013 ], [ 68.5923493, 23.7296163 ], [ 68.5924944, 23.7280722 ], [ 68.5919352, 23.7280706 ], [ 68.5919359, 23.7278132 ], [ 68.5913767, 23.7278117 ], [ 68.5913784, 23.7272969 ], [ 68.5922179, 23.7270417 ], [ 68.5920792, 23.7265265 ], [ 68.5923597, 23.7262697 ], [ 68.5925024, 23.7254978 ], [ 68.5919435, 23.7253672 ], [ 68.5918036, 23.7252385 ], [ 68.5915281, 23.7239506 ], [ 68.5913892, 23.7238212 ], [ 68.5905508, 23.7236908 ], [ 68.590832, 23.7231767 ], [ 68.5902727, 23.7231752 ], [ 68.5904137, 23.7226607 ], [ 68.5897163, 23.7222721 ], [ 68.5891571, 23.7222708 ], [ 68.5885967, 23.7226558 ], [ 68.5890204, 23.7211124 ], [ 68.5890246, 23.7198253 ], [ 68.5888857, 23.7196957 ], [ 68.587488, 23.7195638 ], [ 68.5872117, 23.7185333 ], [ 68.5866528, 23.7184027 ], [ 68.586513, 23.718274 ], [ 68.5863754, 23.7177588 ], [ 68.5846974, 23.7178826 ], [ 68.5816232, 23.7174885 ] ] ], [ [ [ 68.46624, 23.7201 ], [ 68.46563, 23.72044 ], [ 68.46391, 23.72169 ], [ 68.46155, 23.72352 ], [ 68.46101, 23.72429 ], [ 68.45875, 23.72599 ], [ 68.45663, 23.7269 ], [ 68.4552, 23.72723 ], [ 68.45411, 23.72712 ], [ 68.45294, 23.72696 ], [ 68.45227, 23.72715 ], [ 68.45149, 23.72777 ], [ 68.45037, 23.72922 ], [ 68.44905, 23.73101 ], [ 68.44836, 23.73212 ], [ 68.44759, 23.73323 ], [ 68.44623, 23.73533 ], [ 68.44555, 23.73644 ], [ 68.44537, 23.73692 ], [ 68.44526, 23.73745 ], [ 68.44546, 23.73787 ], [ 68.44583, 23.73792 ], [ 68.44635, 23.73767 ], [ 68.44697, 23.7375 ], [ 68.44789, 23.73738 ], [ 68.44898, 23.73766 ], [ 68.45093, 23.7386 ], [ 68.45194, 23.73945 ], [ 68.45204, 23.73987 ], [ 68.45165, 23.74034 ], [ 68.45107, 23.74048 ], [ 68.45054, 23.74026 ], [ 68.44899, 23.7401 ], [ 68.44819, 23.74018 ], [ 68.44715, 23.74021 ], [ 68.44526, 23.7398 ], [ 68.44488, 23.73992 ], [ 68.44418, 23.74038 ], [ 68.44339, 23.74068 ], [ 68.44297, 23.74074 ], [ 68.44193, 23.74072 ], [ 68.44152, 23.74064 ], [ 68.44105, 23.74047 ], [ 68.44039, 23.74019 ], [ 68.43972, 23.73987 ], [ 68.43891, 23.73924 ], [ 68.43806, 23.73904 ], [ 68.43765, 23.73908 ], [ 68.43722, 23.73924 ], [ 68.43693, 23.73954 ], [ 68.43672, 23.73994 ], [ 68.43648, 23.74018 ], [ 68.43632, 23.74045 ], [ 68.43614, 23.74089 ], [ 68.43614, 23.74126 ], [ 68.43641, 23.74155 ], [ 68.43671, 23.74192 ], [ 68.43689, 23.74254 ], [ 68.43772, 23.74321 ], [ 68.43906, 23.74595 ], [ 68.44035, 23.74743 ], [ 68.44178, 23.75009 ], [ 68.4422, 23.75135 ], [ 68.44291, 23.75396 ], [ 68.44363, 23.75416 ], [ 68.44404, 23.75439 ], [ 68.44469, 23.75481 ], [ 68.44517, 23.75526 ], [ 68.44535, 23.75557 ], [ 68.44558, 23.75576 ], [ 68.44563, 23.75601 ], [ 68.44582, 23.75635 ], [ 68.44637, 23.75674 ], [ 68.44667, 23.75704 ], [ 68.44686, 23.7573 ], [ 68.44727, 23.75759 ], [ 68.44776, 23.75829 ], [ 68.44811, 23.75927 ], [ 68.44861, 23.76036 ], [ 68.44881, 23.76159 ], [ 68.44892, 23.76304 ], [ 68.44954, 23.76508 ], [ 68.45038, 23.76587 ], [ 68.45067, 23.76652 ], [ 68.45127, 23.76742 ], [ 68.452, 23.7683 ], [ 68.45307, 23.7698 ], [ 68.4538, 23.77122 ], [ 68.45436, 23.7734 ], [ 68.45466, 23.77587 ], [ 68.45497, 23.77797 ], [ 68.45502, 23.77864 ], [ 68.45477, 23.78005 ], [ 68.4544, 23.78193 ], [ 68.45419, 23.78329 ], [ 68.45417, 23.78409 ], [ 68.45372, 23.78561 ], [ 68.45319, 23.78691 ], [ 68.45288, 23.78735 ], [ 68.45249, 23.78771 ], [ 68.45205, 23.78806 ], [ 68.4518, 23.78829 ], [ 68.45142, 23.78878 ], [ 68.45114, 23.78897 ], [ 68.45082, 23.78923 ], [ 68.45035, 23.78982 ], [ 68.45009, 23.78999 ], [ 68.44964, 23.79052 ], [ 68.44949, 23.79076 ], [ 68.44941, 23.79097 ], [ 68.44942, 23.79127 ], [ 68.44946, 23.79152 ], [ 68.44945, 23.79167 ], [ 68.44933, 23.79186 ], [ 68.44934, 23.79199 ], [ 68.44966, 23.79236 ], [ 68.44971, 23.7925 ], [ 68.44968, 23.79275 ], [ 68.4497, 23.79293 ], [ 68.44987, 23.79329 ], [ 68.44995, 23.79372 ], [ 68.45, 23.7947 ], [ 68.45006, 23.79522 ], [ 68.45007, 23.79602 ], [ 68.45025, 23.79689 ], [ 68.45032, 23.79746 ], [ 68.45026, 23.79806 ], [ 68.45005, 23.79938 ], [ 68.45008, 23.79964 ], [ 68.45004, 23.79978 ], [ 68.44997, 23.79991 ], [ 68.44969, 23.80018 ], [ 68.44962, 23.80036 ], [ 68.44955, 23.80064 ], [ 68.44942, 23.80092 ], [ 68.4493, 23.80131 ], [ 68.44932, 23.80193 ], [ 68.44928, 23.80214 ], [ 68.44894, 23.80249 ], [ 68.44882, 23.80278 ], [ 68.44874, 23.80305 ], [ 68.44867, 23.80344 ], [ 68.44854, 23.80356 ], [ 68.44835, 23.80362 ], [ 68.4482, 23.80377 ], [ 68.44796, 23.80444 ], [ 68.4479, 23.80491 ], [ 68.44785, 23.8056 ], [ 68.44786, 23.80613 ], [ 68.4479, 23.8062 ], [ 68.44832, 23.80609 ], [ 68.44852, 23.80611 ], [ 68.44864, 23.80617 ], [ 68.44871, 23.80636 ], [ 68.44867, 23.80724 ], [ 68.44871, 23.80748 ], [ 68.44888, 23.80781 ], [ 68.44889, 23.80806 ], [ 68.44881, 23.80845 ], [ 68.4488, 23.80869 ], [ 68.44894, 23.80902 ], [ 68.44935, 23.80957 ], [ 68.44972, 23.80978 ], [ 68.45006, 23.80981 ], [ 68.45132, 23.80953 ], [ 68.45202, 23.80933 ], [ 68.45282, 23.809 ], [ 68.45353, 23.80846 ], [ 68.45397, 23.80803 ], [ 68.45444, 23.80736 ], [ 68.45542, 23.80576 ], [ 68.45572, 23.80521 ], [ 68.45623, 23.80408 ], [ 68.4569, 23.80278 ], [ 68.45725, 23.80197 ], [ 68.45745, 23.80127 ], [ 68.45771, 23.79992 ], [ 68.45776, 23.79899 ], [ 68.45766, 23.79758 ], [ 68.45734, 23.79608 ], [ 68.45696, 23.79485 ], [ 68.45686, 23.79446 ], [ 68.45671, 23.79342 ], [ 68.45673, 23.79199 ], [ 68.45684, 23.79135 ], [ 68.45695, 23.79105 ], [ 68.45727, 23.79076 ], [ 68.45775, 23.7907 ], [ 68.45937, 23.79072 ], [ 68.46066, 23.79064 ], [ 68.46109, 23.79056 ], [ 68.4613, 23.7905 ], [ 68.46148, 23.7904 ], [ 68.4617, 23.79014 ], [ 68.46177, 23.79001 ], [ 68.46182, 23.78983 ], [ 68.46168, 23.78907 ], [ 68.46157, 23.78872 ], [ 68.46111, 23.78775 ], [ 68.46101, 23.78743 ], [ 68.461, 23.787 ], [ 68.46093, 23.78644 ], [ 68.46096, 23.78537 ], [ 68.46102, 23.78488 ], [ 68.46117, 23.78436 ], [ 68.4614, 23.78391 ], [ 68.46173, 23.78336 ], [ 68.46207, 23.78298 ], [ 68.46266, 23.78243 ], [ 68.46387, 23.78143 ], [ 68.46429, 23.78098 ], [ 68.46477, 23.78031 ], [ 68.46519, 23.77976 ], [ 68.4658, 23.77905 ], [ 68.46599, 23.77888 ], [ 68.46607, 23.77878 ], [ 68.4661, 23.77869 ], [ 68.46564, 23.77715 ], [ 68.46552, 23.77581 ], [ 68.46561, 23.77528 ], [ 68.46575, 23.77493 ], [ 68.46589, 23.77474 ], [ 68.46623, 23.77449 ], [ 68.46643, 23.77424 ], [ 68.4665, 23.77403 ], [ 68.46655, 23.77308 ], [ 68.46654, 23.77269 ], [ 68.46663, 23.77184 ], [ 68.46658, 23.77163 ], [ 68.46642, 23.77144 ], [ 68.46574, 23.77112 ], [ 68.46537, 23.771 ], [ 68.46518, 23.77088 ], [ 68.4645, 23.77003 ], [ 68.46414, 23.76962 ], [ 68.464, 23.76934 ], [ 68.46387, 23.76872 ], [ 68.46386, 23.76805 ], [ 68.46409, 23.76703 ], [ 68.46429, 23.766 ], [ 68.46462, 23.76477 ], [ 68.46599, 23.76125 ], [ 68.46651, 23.76008 ], [ 68.46713, 23.75892 ], [ 68.46832, 23.75699 ], [ 68.47003, 23.75476 ], [ 68.47045, 23.75387 ], [ 68.47058, 23.75305 ], [ 68.47069, 23.75261 ], [ 68.47099, 23.75205 ], [ 68.4714, 23.75167 ], [ 68.47212, 23.75109 ], [ 68.47285, 23.75059 ], [ 68.47338, 23.75029 ], [ 68.47428, 23.74973 ], [ 68.47631, 23.74882 ], [ 68.47682, 23.74847 ], [ 68.477, 23.74838 ], [ 68.47776, 23.74815 ], [ 68.47814, 23.74812 ], [ 68.47865, 23.74819 ], [ 68.47929, 23.7484 ], [ 68.48, 23.74879 ], [ 68.48034, 23.74905 ], [ 68.48085, 23.74953 ], [ 68.4816, 23.75036 ], [ 68.48186, 23.7506 ], [ 68.48212, 23.7508 ], [ 68.48249, 23.75096 ], [ 68.48274, 23.75102 ], [ 68.48328, 23.75102 ], [ 68.48387, 23.75097 ], [ 68.4844, 23.75083 ], [ 68.48478, 23.75065 ], [ 68.48532, 23.75031 ], [ 68.48548, 23.7501 ], [ 68.48604, 23.74874 ], [ 68.48619, 23.74809 ], [ 68.48623, 23.74681 ], [ 68.48615, 23.74561 ], [ 68.48586, 23.7449 ], [ 68.48588, 23.74461 ], [ 68.48604, 23.74434 ], [ 68.48616, 23.74423 ], [ 68.48622, 23.74412 ], [ 68.48625, 23.74328 ], [ 68.48622, 23.74294 ], [ 68.48603, 23.7419 ], [ 68.48588, 23.74144 ], [ 68.48514, 23.73958 ], [ 68.4848, 23.73851 ], [ 68.48462, 23.73786 ], [ 68.48432, 23.73707 ], [ 68.48416, 23.73579 ], [ 68.48421, 23.73472 ], [ 68.4842, 23.7342 ], [ 68.48432, 23.7334 ], [ 68.48449, 23.7326 ], [ 68.48485, 23.73212 ], [ 68.48514, 23.73183 ], [ 68.48569, 23.73117 ], [ 68.48624, 23.73063 ], [ 68.48654, 23.73022 ], [ 68.48685, 23.72971 ], [ 68.48712, 23.72933 ], [ 68.48717, 23.72914 ], [ 68.48704, 23.72905 ], [ 68.48651, 23.72893 ], [ 68.48506, 23.72874 ], [ 68.48343, 23.7284 ], [ 68.48204, 23.72816 ], [ 68.48065, 23.72834 ], [ 68.47918, 23.72862 ], [ 68.47775, 23.72931 ], [ 68.47677, 23.72954 ], [ 68.47475, 23.72949 ], [ 68.47182, 23.72869 ], [ 68.46976, 23.72756 ], [ 68.46881, 23.72625 ], [ 68.46768, 23.724 ], [ 68.46691, 23.72024 ], [ 68.46654, 23.7201 ], [ 68.46624, 23.7201 ] ] ], [ [ [ 68.7462324, 23.9700032 ], [ 68.7472343, 23.9700032 ], [ 68.7471227, 23.9708953 ], [ 68.7472117, 23.9708954 ], [ 68.747004788356776, 23.971837671961087 ], [ 68.74696171052949, 23.97218195803379 ], [ 68.7474894, 23.9721829 ], [ 68.7474888, 23.9724403 ], [ 68.746964874635751, 23.972439411673932 ], [ 68.74701640236573, 23.973726678165548 ], [ 68.7472062, 23.973727 ], [ 68.7472057, 23.9739844 ], [ 68.747027792760051, 23.974011233160489 ], [ 68.7472343, 23.9791702 ], [ 68.747008753984176, 23.98104982074188 ], [ 68.7474718, 23.9811925 ], [ 68.7471932, 23.9804199 ], [ 68.7477534, 23.9804208 ], [ 68.7477545, 23.979906 ], [ 68.7491543, 23.9804231 ], [ 68.7491552, 23.9799082 ], [ 68.748595, 23.9799073 ], [ 68.7487356, 23.9793926 ], [ 68.7495774, 23.9786217 ], [ 68.7495786, 23.9781069 ], [ 68.7494395, 23.9778493 ], [ 68.7502803, 23.9775932 ], [ 68.7500012, 23.977078 ], [ 68.7505616, 23.9770789 ], [ 68.750564, 23.9757918 ], [ 68.7500036, 23.9757909 ], [ 68.7500048, 23.975276 ], [ 68.750565, 23.975277 ], [ 68.7505655, 23.9750196 ], [ 68.7497251, 23.9750182 ], [ 68.749726, 23.9745034 ], [ 68.7502858, 23.9747616 ], [ 68.7504264, 23.9742471 ], [ 68.7502871, 23.9741176 ], [ 68.7497271, 23.9739886 ], [ 68.7500106, 23.972187 ], [ 68.750571, 23.972188 ], [ 68.7502922, 23.9714151 ], [ 68.7514134, 23.9711596 ], [ 68.751695, 23.9703877 ], [ 68.7522552, 23.9703887 ], [ 68.7519742, 23.9709031 ], [ 68.752534, 23.9711615 ], [ 68.7525364, 23.9698744 ], [ 68.7533765, 23.9700039 ], [ 68.7542161, 23.97052 ], [ 68.7547755, 23.9709077 ], [ 68.7547765, 23.9703928 ], [ 68.7550569, 23.9702641 ], [ 68.7567375, 23.9703959 ], [ 68.7564567, 23.970781 ], [ 68.7558961, 23.9709094 ], [ 68.7556139, 23.9719387 ], [ 68.7572958, 23.9714265 ], [ 68.7575731, 23.9729714 ], [ 68.757853, 23.9731001 ], [ 68.7589736, 23.9731018 ], [ 68.7595332, 23.9734892 ], [ 68.7598156, 23.9722027 ], [ 68.7606561, 23.972204 ], [ 68.760657, 23.9716892 ], [ 68.7598167, 23.9716879 ], [ 68.7600996, 23.9701437 ], [ 68.7612202, 23.9701454 ], [ 68.7612215, 23.9693732 ], [ 68.7615016, 23.9693737 ], [ 68.7615003, 23.970146 ], [ 68.7620601, 23.9704042 ], [ 68.7617829, 23.9688593 ], [ 68.7612229, 23.9687293 ], [ 68.7609431, 23.9684715 ], [ 68.7601032, 23.9682127 ], [ 68.7594036, 23.9675684 ], [ 68.7594051, 23.9667962 ], [ 68.7589862, 23.9662808 ], [ 68.7606676, 23.966026 ], [ 68.7605279, 23.9655108 ], [ 68.7603886, 23.9653815 ], [ 68.7595479, 23.9655093 ], [ 68.7595504, 23.9642222 ], [ 68.758709, 23.9647357 ], [ 68.7587114, 23.9634486 ], [ 68.758151, 23.9634478 ], [ 68.7582945, 23.9613887 ], [ 68.7585752, 23.9611316 ], [ 68.7584376, 23.9601018 ], [ 68.758998, 23.9599735 ], [ 68.7592786, 23.9597164 ], [ 68.7598386, 23.9598466 ], [ 68.75984, 23.9590744 ], [ 68.7606799, 23.9593329 ], [ 68.7611004, 23.9588189 ], [ 68.761242, 23.9583042 ], [ 68.7604019, 23.9581738 ], [ 68.7601216, 23.9583025 ], [ 68.7601229, 23.9575302 ], [ 68.7606829, 23.9576593 ], [ 68.7654451, 23.9575384 ], [ 68.7654461, 23.9570235 ], [ 68.7676869, 23.9570269 ], [ 68.7679656, 23.9577998 ], [ 68.7688059, 23.9578009 ], [ 68.7689447, 23.9583159 ], [ 68.7688046, 23.9585732 ], [ 68.7693648, 23.9585741 ], [ 68.7700605, 23.9608918 ], [ 68.7700592, 23.9616641 ], [ 68.7697785, 23.9619211 ], [ 68.7700569, 23.9629511 ], [ 68.7700554, 23.9637234 ], [ 68.7697749, 23.9639804 ], [ 68.7694933, 23.9647523 ], [ 68.7692128, 23.9650094 ], [ 68.7690722, 23.965524 ], [ 68.7696319, 23.9659105 ], [ 68.7707524, 23.9659122 ], [ 68.7713117, 23.9664278 ], [ 68.772152, 23.9665582 ], [ 68.7721533, 23.965786 ], [ 68.7713126, 23.965913 ], [ 68.7703332, 23.9650111 ], [ 68.7703338, 23.9647536 ], [ 68.7706143, 23.9644966 ], [ 68.7706181, 23.9624373 ], [ 68.7708995, 23.9616654 ], [ 68.7710463, 23.9580617 ], [ 68.7707662, 23.9580613 ], [ 68.7707653, 23.9585762 ], [ 68.769925, 23.9585749 ], [ 68.7699263, 23.9578026 ], [ 68.7693661, 23.9578018 ], [ 68.7693671, 23.957287 ], [ 68.770488, 23.9570313 ], [ 68.7706285, 23.9565166 ], [ 68.7703487, 23.9562587 ], [ 68.7703497, 23.9557438 ], [ 68.7704907, 23.9554868 ], [ 68.7696506, 23.9553562 ], [ 68.7692306, 23.9549701 ], [ 68.7692316, 23.954455 ], [ 68.7686723, 23.9539394 ], [ 68.7685336, 23.9534244 ], [ 68.7690941, 23.9532961 ], [ 68.7721733, 23.9543303 ], [ 68.7727335, 23.9543312 ], [ 68.7741335, 23.9547198 ], [ 68.7744145, 23.9542054 ], [ 68.7710543, 23.9535563 ], [ 68.7707747, 23.9532985 ], [ 68.7699344, 23.9532974 ], [ 68.7688154, 23.9525235 ], [ 68.7679751, 23.9525221 ], [ 68.765176, 23.9514881 ], [ 68.762375, 23.951484 ], [ 68.7620945, 23.9516127 ], [ 68.7620955, 23.9510978 ], [ 68.7616744, 23.9513545 ], [ 68.761534, 23.9518691 ], [ 68.7595737, 23.9516087 ], [ 68.7595727, 23.9521235 ], [ 68.7609728, 23.9523832 ], [ 68.7609713, 23.9531555 ], [ 68.7604111, 23.9531545 ], [ 68.7606893, 23.9541846 ], [ 68.7612495, 23.9541855 ], [ 68.7613896, 23.9539283 ], [ 68.7613915, 23.9528986 ], [ 68.7612524, 23.952641 ], [ 68.7615328, 23.9525123 ], [ 68.7623731, 23.9525136 ], [ 68.7629326, 23.9529011 ], [ 68.7629335, 23.9523862 ], [ 68.7632136, 23.9523866 ], [ 68.7634918, 23.9534167 ], [ 68.7629316, 23.9534159 ], [ 68.7630707, 23.9536735 ], [ 68.7626462, 23.9562469 ], [ 68.762086, 23.9562462 ], [ 68.7619469, 23.9554737 ], [ 68.7615281, 23.9550865 ], [ 68.7606882, 23.9548277 ], [ 68.7604085, 23.9545699 ], [ 68.7592881, 23.9545681 ], [ 68.7590076, 23.9548251 ], [ 68.7576064, 23.9552095 ], [ 68.7580274, 23.9544378 ], [ 68.7578893, 23.9536654 ], [ 68.7576092, 23.953665 ], [ 68.7573263, 23.955209 ], [ 68.7566264, 23.9546932 ], [ 68.7564878, 23.954178 ], [ 68.7562078, 23.9541776 ], [ 68.7562068, 23.9546924 ], [ 68.755086, 23.9548189 ], [ 68.7548067, 23.9544327 ], [ 68.7553669, 23.9544337 ], [ 68.7555079, 23.9536616 ], [ 68.7553688, 23.953404 ], [ 68.7562096, 23.9531479 ], [ 68.7562106, 23.9526331 ], [ 68.7567704, 23.9528914 ], [ 68.7566307, 23.9523762 ], [ 68.7563512, 23.9521184 ], [ 68.7562125, 23.9516034 ], [ 68.7550927, 23.9513441 ], [ 68.754953, 23.9508291 ], [ 68.7546734, 23.9505713 ], [ 68.7541197, 23.9472239 ], [ 68.75384, 23.9469661 ], [ 68.7537029, 23.9456786 ], [ 68.755103, 23.9458092 ], [ 68.7562242, 23.9454254 ], [ 68.7562232, 23.9459402 ], [ 68.7565033, 23.9459406 ], [ 68.7566443, 23.9451685 ], [ 68.7565056, 23.9446535 ], [ 68.757066, 23.9445252 ], [ 68.7581851, 23.9452993 ], [ 68.759584, 23.9460736 ], [ 68.7609847, 23.9459476 ], [ 68.7615472, 23.9446614 ], [ 68.7646279, 23.9447945 ], [ 68.7651875, 23.9450527 ], [ 68.7660265, 23.9458262 ], [ 68.7668662, 23.946085 ], [ 68.7671459, 23.9463428 ], [ 68.7685457, 23.9467315 ], [ 68.7688233, 23.948019 ], [ 68.7693835, 23.9480198 ], [ 68.7693826, 23.9485346 ], [ 68.7707825, 23.9489224 ], [ 68.7716218, 23.9494386 ], [ 68.7727422, 23.9494403 ], [ 68.7733015, 23.9499559 ], [ 68.7738617, 23.9499566 ], [ 68.7741414, 23.9502146 ], [ 68.7747012, 23.9503445 ], [ 68.7747005, 23.9508593 ], [ 68.7758201, 23.9512468 ], [ 68.7763803, 23.9512475 ], [ 68.7775001, 23.9516357 ], [ 68.7776405, 23.9511211 ], [ 68.777921, 23.950864 ], [ 68.7777823, 23.950349 ], [ 68.7791824, 23.9506085 ], [ 68.7789049, 23.9490636 ], [ 68.7786249, 23.949063 ], [ 68.7786239, 23.9495779 ], [ 68.7777836, 23.9495768 ], [ 68.7777846, 23.9490619 ], [ 68.7763843, 23.9489307 ], [ 68.7759643, 23.9485444 ], [ 68.775406, 23.947514 ], [ 68.7752676, 23.9467414 ], [ 68.7744274, 23.9467402 ], [ 68.7744266, 23.9472551 ], [ 68.7738664, 23.9472543 ], [ 68.7738673, 23.9467395 ], [ 68.7730265, 23.9469956 ], [ 68.7733058, 23.9475108 ], [ 68.7724655, 23.9475097 ], [ 68.7724663, 23.9469948 ], [ 68.772186, 23.9471226 ], [ 68.7710656, 23.9471209 ], [ 68.7709254, 23.9469926 ], [ 68.7709263, 23.9464777 ], [ 68.7706466, 23.9462197 ], [ 68.7705081, 23.9457047 ], [ 68.7699475, 23.9459614 ], [ 68.7699482, 23.9454465 ], [ 68.7657487, 23.9445388 ], [ 68.7653287, 23.9441525 ], [ 68.7651905, 23.94338 ], [ 68.7660308, 23.9433811 ], [ 68.7660312, 23.9431237 ], [ 68.7654712, 23.943123 ], [ 68.7654722, 23.9426081 ], [ 68.7649118, 23.9427355 ], [ 68.7643506, 23.9432494 ], [ 68.7632304, 23.9431196 ], [ 68.763231, 23.9428621 ], [ 68.7637914, 23.9427338 ], [ 68.7643525, 23.9422197 ], [ 68.765193, 23.9420927 ], [ 68.7646339, 23.9414481 ], [ 68.7632336, 23.9414458 ], [ 68.7612739, 23.9409279 ], [ 68.7595935, 23.9409253 ], [ 68.759314, 23.9406675 ], [ 68.7584737, 23.9406662 ], [ 68.7581938, 23.9405374 ], [ 68.7581924, 23.9413097 ], [ 68.7577723, 23.9410515 ], [ 68.7576351, 23.9397642 ], [ 68.757214, 23.9400211 ], [ 68.7567933, 23.9406635 ], [ 68.7562331, 23.9406626 ], [ 68.7560928, 23.940534 ], [ 68.7559556, 23.9392468 ], [ 68.7567963, 23.9389907 ], [ 68.7570783, 23.9379614 ], [ 68.7565183, 23.9379606 ], [ 68.7563792, 23.9371882 ], [ 68.7566602, 23.9366737 ], [ 68.7570832, 23.9353872 ], [ 68.756523, 23.9353864 ], [ 68.7565239, 23.9348716 ], [ 68.7554034, 23.9351271 ], [ 68.7554047, 23.9343549 ], [ 68.7559649, 23.9343558 ], [ 68.7559653, 23.9340984 ], [ 68.7554054, 23.9339684 ], [ 68.7549857, 23.9335821 ], [ 68.7542877, 23.9326794 ], [ 68.7523285, 23.9320332 ], [ 68.7519099, 23.9310028 ], [ 68.7517706, 23.9308735 ], [ 68.7327211, 23.9336732 ], [ 68.731881, 23.9336716 ], [ 68.7307591, 23.934442 ], [ 68.7296387, 23.9345692 ], [ 68.7296381, 23.9348266 ], [ 68.7307576, 23.9352143 ], [ 68.731878, 23.935088 ], [ 68.7317358, 23.9358599 ], [ 68.7313155, 23.9362449 ], [ 68.730475, 23.9363726 ], [ 68.7304745, 23.9366301 ], [ 68.7321545, 23.9368903 ], [ 68.7324367, 23.9358612 ], [ 68.7335574, 23.9356057 ], [ 68.7331358, 23.9361198 ], [ 68.732994, 23.9371492 ], [ 68.7332741, 23.9371498 ], [ 68.7336948, 23.9366355 ], [ 68.7335563, 23.9361205 ], [ 68.7341165, 23.9361215 ], [ 68.7341154, 23.9366363 ], [ 68.7346755, 23.9366372 ], [ 68.7343966, 23.936122 ], [ 68.7355174, 23.9358665 ], [ 68.7355162, 23.9363813 ], [ 68.7357963, 23.9363819 ], [ 68.7359369, 23.9358673 ], [ 68.7362174, 23.9356102 ], [ 68.736359, 23.9350958 ], [ 68.7400008, 23.934587 ], [ 68.7397224, 23.9338143 ], [ 68.7408428, 23.9336871 ], [ 68.7411227, 23.9338166 ], [ 68.7411237, 23.9333018 ], [ 68.7416835, 23.933431 ], [ 68.7430842, 23.9333052 ], [ 68.7432227, 23.9338202 ], [ 68.7430815, 23.9345923 ], [ 68.7433614, 23.934721 ], [ 68.7444816, 23.9347229 ], [ 68.7447619, 23.9345951 ], [ 68.7448989, 23.9358824 ], [ 68.7447583, 23.936397 ], [ 68.7453178, 23.9367835 ], [ 68.7455979, 23.9367841 ], [ 68.7461586, 23.9363993 ], [ 68.7462977, 23.9366569 ], [ 68.7462968, 23.9371717 ], [ 68.7467164, 23.9376873 ], [ 68.7461562, 23.9376864 ], [ 68.7464353, 23.9382018 ], [ 68.7458751, 23.9382008 ], [ 68.7460137, 23.9387159 ], [ 68.7458738, 23.9388438 ], [ 68.7455937, 23.9388434 ], [ 68.7450341, 23.9385851 ], [ 68.7430741, 23.9383244 ], [ 68.7405531, 23.9385775 ], [ 68.7402724, 23.9388346 ], [ 68.7391522, 23.9388327 ], [ 68.7385911, 23.9393466 ], [ 68.7380309, 23.9393456 ], [ 68.7377506, 23.9394741 ], [ 68.7380328, 23.938445 ], [ 68.7369122, 23.9385713 ], [ 68.7360724, 23.9383125 ], [ 68.7349519, 23.9384397 ], [ 68.7349504, 23.939212 ], [ 68.7352305, 23.9392126 ], [ 68.7352314, 23.9386977 ], [ 68.7363514, 23.9388278 ], [ 68.7366319, 23.9387 ], [ 68.7366308, 23.9392148 ], [ 68.7371902, 23.9396015 ], [ 68.7380301, 23.9397321 ], [ 68.7377493, 23.9401173 ], [ 68.7366281, 23.9405019 ], [ 68.7369067, 23.9412747 ], [ 68.7363465, 23.9412738 ], [ 68.7363454, 23.9417886 ], [ 68.7355058, 23.9415297 ], [ 68.7355047, 23.9420445 ], [ 68.7360649, 23.9420455 ], [ 68.7360638, 23.9425603 ], [ 68.7352238, 23.9424297 ], [ 68.734805, 23.9415286 ], [ 68.734386, 23.9412704 ], [ 68.7343843, 23.9420426 ], [ 68.7338243, 23.9420417 ], [ 68.7338232, 23.9425565 ], [ 68.7329834, 23.9422976 ], [ 68.7329825, 23.9428124 ], [ 68.7324223, 23.9428115 ], [ 68.7322807, 23.9433261 ], [ 68.7320001, 23.943583 ], [ 68.7318579, 23.9448699 ], [ 68.7304567, 23.9452532 ], [ 68.7303159, 23.9453821 ], [ 68.729894, 23.946411 ], [ 68.7296143, 23.9462813 ], [ 68.7290541, 23.9462802 ], [ 68.7287742, 23.9461515 ], [ 68.7286327, 23.9466662 ], [ 68.7284928, 23.9467941 ], [ 68.7279324, 23.9469222 ], [ 68.7282114, 23.9474376 ], [ 68.7276512, 23.9474367 ], [ 68.7277903, 23.9476943 ], [ 68.7276491, 23.9484664 ], [ 68.7254072, 23.9489772 ], [ 68.7252656, 23.9494917 ], [ 68.7237241, 23.950132 ], [ 68.723444, 23.9501317 ], [ 68.7220464, 23.9488419 ], [ 68.7214862, 23.948841 ], [ 68.7213459, 23.9487125 ], [ 68.721208, 23.94794 ], [ 68.7195287, 23.947422 ], [ 68.7198077, 23.9479374 ], [ 68.7192477, 23.9478071 ], [ 68.7189681, 23.9475493 ], [ 68.7178476, 23.9476764 ], [ 68.7179876, 23.9474193 ], [ 68.7178498, 23.9466467 ], [ 68.7164497, 23.946515 ], [ 68.7161687, 23.9469011 ], [ 68.7164486, 23.9470298 ], [ 68.7175692, 23.9469035 ], [ 68.7171473, 23.9474176 ], [ 68.7171462, 23.9479325 ], [ 68.7170061, 23.9481897 ], [ 68.7175663, 23.9481906 ], [ 68.7179848, 23.9487064 ], [ 68.7179804, 23.9507658 ], [ 68.7181203, 23.9510234 ], [ 68.7164397, 23.9510203 ], [ 68.716716, 23.9528226 ], [ 68.7141953, 23.9526888 ], [ 68.7136347, 23.952817 ], [ 68.7134932, 23.9533316 ], [ 68.7136302, 23.9548763 ], [ 68.7141904, 23.9548774 ], [ 68.7143295, 23.9551351 ], [ 68.7141881, 23.9559071 ], [ 68.7133484, 23.955648 ], [ 68.7133495, 23.9551332 ], [ 68.7130694, 23.9551328 ], [ 68.7133473, 23.9561628 ], [ 68.7127869, 23.95629 ], [ 68.7126461, 23.9564189 ], [ 68.7123624, 23.9579631 ], [ 68.7119423, 23.9582197 ], [ 68.7119434, 23.9577049 ], [ 68.7116633, 23.9577043 ], [ 68.7113809, 23.9587334 ], [ 68.7109608, 23.9584752 ], [ 68.7113843, 23.9571889 ], [ 68.7094229, 23.9574426 ], [ 68.7094217, 23.9579574 ], [ 68.708023, 23.9571825 ], [ 68.7081613, 23.9576977 ], [ 68.7088604, 23.9584713 ], [ 68.7083002, 23.9584701 ], [ 68.7081585, 23.9589848 ], [ 68.7080186, 23.9591127 ], [ 68.707458, 23.9592409 ], [ 68.7074569, 23.9597557 ], [ 68.7080171, 23.9597567 ], [ 68.7080165, 23.9600141 ], [ 68.7068967, 23.9597546 ], [ 68.7071745, 23.9607848 ], [ 68.7085745, 23.9610449 ], [ 68.7082927, 23.9618166 ], [ 68.7091324, 23.9620757 ], [ 68.7091335, 23.9615609 ], [ 68.7094138, 23.9615612 ], [ 68.7094125, 23.9620761 ], [ 68.710813, 23.9622071 ], [ 68.7110925, 23.962465 ], [ 68.7133323, 23.962984 ], [ 68.7138916, 23.9633717 ], [ 68.7138933, 23.9625994 ], [ 68.7150144, 23.9623441 ], [ 68.7144556, 23.961699 ], [ 68.7124951, 23.9615671 ], [ 68.7124968, 23.9607948 ], [ 68.7133371, 23.9607964 ], [ 68.7133359, 23.9613112 ], [ 68.7138961, 23.9613123 ], [ 68.7138978, 23.9605401 ], [ 68.715578, 23.9608005 ], [ 68.7158604, 23.9597714 ], [ 68.7169802, 23.9600309 ], [ 68.7169791, 23.9605457 ], [ 68.7172594, 23.9605463 ], [ 68.7173994, 23.9602891 ], [ 68.7174023, 23.959002 ], [ 68.7171227, 23.9587442 ], [ 68.7175472, 23.956943 ], [ 68.7178273, 23.9569434 ], [ 68.7181052, 23.9579736 ], [ 68.7183854, 23.9579742 ], [ 68.7181091, 23.9561717 ], [ 68.71895, 23.9559158 ], [ 68.7189489, 23.9564306 ], [ 68.7195091, 23.9564318 ], [ 68.7195081, 23.9569466 ], [ 68.7197878, 23.9570753 ], [ 68.7206285, 23.9569485 ], [ 68.7203492, 23.9565614 ], [ 68.7197893, 23.9564322 ], [ 68.7197903, 23.9559173 ], [ 68.7203509, 23.9557892 ], [ 68.7206315, 23.9555323 ], [ 68.7209116, 23.9555329 ], [ 68.7211912, 23.9557907 ], [ 68.7217512, 23.9559209 ], [ 68.7217523, 23.9554061 ], [ 68.7237141, 23.9548948 ], [ 68.7237151, 23.95438 ], [ 68.7231549, 23.9543791 ], [ 68.723156, 23.9538642 ], [ 68.7253953, 23.9546404 ], [ 68.7256769, 23.9538686 ], [ 68.7270783, 23.9534845 ], [ 68.7276396, 23.9529708 ], [ 68.7293212, 23.9524588 ], [ 68.7296018, 23.952202 ], [ 68.730162, 23.9522029 ], [ 68.7310016, 23.9525909 ], [ 68.7310027, 23.9520761 ], [ 68.7318443, 23.9514337 ], [ 68.7332448, 23.9514361 ], [ 68.7338046, 23.9515662 ], [ 68.7338037, 23.952081 ], [ 68.7332435, 23.9520801 ], [ 68.7332424, 23.9525949 ], [ 68.7349233, 23.9524686 ], [ 68.7354824, 23.9529844 ], [ 68.7360424, 23.9531146 ], [ 68.7360403, 23.9541443 ], [ 68.7371601, 23.9544036 ], [ 68.7364625, 23.9528578 ], [ 68.7360437, 23.9524705 ], [ 68.7354837, 23.9523413 ], [ 68.7354848, 23.9518264 ], [ 68.7368844, 23.9522146 ], [ 68.7377247, 23.9522159 ], [ 68.7380054, 23.9519591 ], [ 68.7385659, 23.9518317 ], [ 68.7395436, 23.9528631 ], [ 68.7396831, 23.9533781 ], [ 68.7402439, 23.9531216 ], [ 68.740942, 23.9538952 ], [ 68.7415007, 23.9546684 ], [ 68.7414998, 23.9551832 ], [ 68.7423386, 23.9559568 ], [ 68.742478, 23.956472 ], [ 68.7430382, 23.9564728 ], [ 68.7430392, 23.955958 ], [ 68.7433197, 23.9558294 ], [ 68.7441598, 23.9559598 ], [ 68.7442972, 23.9569899 ], [ 68.7440161, 23.9575042 ], [ 68.744015, 23.958019 ], [ 68.7444336, 23.9590494 ], [ 68.744994, 23.9590504 ], [ 68.7451329, 23.959308 ], [ 68.745269, 23.9616249 ], [ 68.7447084, 23.9617523 ], [ 68.744146, 23.9629103 ], [ 68.745266, 23.9631694 ], [ 68.7454045, 23.9636847 ], [ 68.745684, 23.9639425 ], [ 68.7455436, 23.9644571 ], [ 68.7461038, 23.964458 ], [ 68.7460998, 23.9665174 ], [ 68.7455395, 23.9665164 ], [ 68.7456786, 23.9667741 ], [ 68.7456776, 23.9672889 ], [ 68.7455378, 23.967417 ], [ 68.7446971, 23.9675448 ], [ 68.7448362, 23.9678024 ], [ 68.7448351, 23.9683172 ], [ 68.744695, 23.9685745 ], [ 68.7452554, 23.9685752 ], [ 68.7449742, 23.9690897 ], [ 68.7463743, 23.9693494 ], [ 68.7462333, 23.9696066 ], [ 68.7462324, 23.9700032 ] ] ], [ [ [ 68.771479451055328, 24.328586613443317 ], [ 68.7715141, 24.3285994 ], [ 68.7730604, 24.3291675 ], [ 68.7780604, 24.3308335 ], [ 68.7830604, 24.3327785 ], [ 68.7886154, 24.3336115 ], [ 68.7944484, 24.3344445 ], [ 68.8005604, 24.3347225 ], [ 68.8066714, 24.3350005 ], [ 68.8130604, 24.3350005 ], [ 68.8191714, 24.3352785 ], [ 68.8247264, 24.3327785 ], [ 68.8266714, 24.3280565 ], [ 68.8294484, 24.3238895 ], [ 68.8309112, 24.3205431 ], [ 68.830922644796885, 24.320516945210187 ], [ 68.8306537, 24.3203216 ], [ 68.8305148, 24.3195492 ], [ 68.8299527, 24.319806 ], [ 68.8300941, 24.3187765 ], [ 68.8299544, 24.3185189 ], [ 68.8293925, 24.3186467 ], [ 68.8291117, 24.318518 ], [ 68.829394, 24.3174887 ], [ 68.8288321, 24.3174881 ], [ 68.8288329, 24.3169733 ], [ 68.8282712, 24.3169727 ], [ 68.8284118, 24.3164581 ], [ 68.8282721, 24.3162005 ], [ 68.8271487, 24.3160701 ], [ 68.8268677, 24.3161988 ], [ 68.8267254, 24.3172282 ], [ 68.8268662, 24.3173568 ], [ 68.8274277, 24.3174864 ], [ 68.8270049, 24.3182583 ], [ 68.8271451, 24.3187731 ], [ 68.8265832, 24.3187726 ], [ 68.826584, 24.3182577 ], [ 68.8260223, 24.3181279 ], [ 68.8246176, 24.3182555 ], [ 68.8247569, 24.3187705 ], [ 68.8246159, 24.3195426 ], [ 68.8243351, 24.3195422 ], [ 68.8243356, 24.3190273 ], [ 68.8234933, 24.3188973 ], [ 68.823212, 24.319026 ], [ 68.8232132, 24.3182539 ], [ 68.8234938, 24.3183825 ], [ 68.8240557, 24.318383 ], [ 68.8243371, 24.3179979 ], [ 68.8234944, 24.3179967 ], [ 68.8237768, 24.3169674 ], [ 68.8243387, 24.3168389 ], [ 68.8247601, 24.3164537 ], [ 68.8249021, 24.3156817 ], [ 68.8246212, 24.3156815 ], [ 68.8243392, 24.3164533 ], [ 68.8237773, 24.3165809 ], [ 68.8232149, 24.317095 ], [ 68.8226528, 24.3172235 ], [ 68.8227917, 24.317996 ], [ 68.8219476, 24.3190247 ], [ 68.8218064, 24.3197968 ], [ 68.8215258, 24.3196671 ], [ 68.8209639, 24.3197956 ], [ 68.8209631, 24.3203105 ], [ 68.8181553, 24.3194057 ], [ 68.8175942, 24.3188903 ], [ 68.8156282, 24.3187597 ], [ 68.8157677, 24.3190173 ], [ 68.8157669, 24.3195322 ], [ 68.8156267, 24.3197894 ], [ 68.8153459, 24.319789 ], [ 68.8153468, 24.3190168 ], [ 68.8139429, 24.3186285 ], [ 68.8128195, 24.3184989 ], [ 68.8128187, 24.3190137 ], [ 68.8133806, 24.3190143 ], [ 68.8132389, 24.3195289 ], [ 68.8133797, 24.3196575 ], [ 68.8139414, 24.319658 ], [ 68.8147847, 24.3192734 ], [ 68.814924, 24.3197884 ], [ 68.815485, 24.320304 ], [ 68.8155196, 24.3210619 ], [ 68.815528, 24.3212451 ], [ 68.8150627, 24.3212039 ], [ 68.8130973, 24.3206868 ], [ 68.8128167, 24.320429 ], [ 68.8111317, 24.3201695 ], [ 68.8105702, 24.3199113 ], [ 68.8100085, 24.3199107 ], [ 68.8088856, 24.3193944 ], [ 68.8080429, 24.3193934 ], [ 68.8077624, 24.3191356 ], [ 68.806639, 24.319006 ], [ 68.8066386, 24.3192634 ], [ 68.807481, 24.3193927 ], [ 68.8076209, 24.3195219 ], [ 68.8077611, 24.320037 ], [ 68.8057951, 24.3197771 ], [ 68.8062151, 24.3202923 ], [ 68.8063553, 24.3208073 ], [ 68.8066364, 24.3206786 ], [ 68.8077596, 24.3209374 ], [ 68.8083207, 24.321453 ], [ 68.8088826, 24.3213254 ], [ 68.8088819, 24.3218402 ], [ 68.8097248, 24.3217121 ], [ 68.8100053, 24.3219699 ], [ 68.810567, 24.3220997 ], [ 68.8101444, 24.322614 ], [ 68.810144, 24.3228714 ], [ 68.8102848, 24.3229999 ], [ 68.8116895, 24.3228733 ], [ 68.8116891, 24.3231307 ], [ 68.8111272, 24.3231301 ], [ 68.8115473, 24.3236454 ], [ 68.8116876, 24.3241604 ], [ 68.8111257, 24.3241596 ], [ 68.8111253, 24.324417 ], [ 68.8116872, 24.3244178 ], [ 68.8118252, 24.3257051 ], [ 68.8122464, 24.3262203 ], [ 68.8114033, 24.3264768 ], [ 68.8116834, 24.326992 ], [ 68.8105592, 24.3272479 ], [ 68.8102772, 24.3280198 ], [ 68.8099964, 24.3280194 ], [ 68.8099975, 24.3272471 ], [ 68.8088741, 24.3269884 ], [ 68.8094379, 24.3257021 ], [ 68.8085955, 24.3254435 ], [ 68.8083132, 24.3264728 ], [ 68.8077518, 24.3260855 ], [ 68.8071903, 24.3259566 ], [ 68.8069081, 24.3267285 ], [ 68.8060654, 24.3267274 ], [ 68.8066241, 24.3287875 ], [ 68.8077477, 24.3289171 ], [ 68.808028, 24.329304 ], [ 68.8071852, 24.3293029 ], [ 68.8074646, 24.3303329 ], [ 68.8069032, 24.3299457 ], [ 68.8057796, 24.3299442 ], [ 68.8054982, 24.3302012 ], [ 68.8038127, 24.3301991 ], [ 68.8024086, 24.3298117 ], [ 68.8024092, 24.3295543 ], [ 68.8038133, 24.3298134 ], [ 68.803814, 24.3292985 ], [ 68.8029715, 24.3291683 ], [ 68.8026904, 24.3292972 ], [ 68.8026912, 24.3287824 ], [ 68.8032531, 24.3287831 ], [ 68.8029733, 24.3280105 ], [ 68.8035352, 24.3280113 ], [ 68.8035356, 24.3277538 ], [ 68.8024122, 24.3274949 ], [ 68.8024135, 24.3267227 ], [ 68.8018516, 24.3267219 ], [ 68.8018509, 24.3272367 ], [ 68.8012888, 24.3273643 ], [ 68.8007261, 24.3278784 ], [ 68.800164, 24.3280067 ], [ 68.8010049, 24.329295 ], [ 68.800443, 24.3292942 ], [ 68.8001608, 24.3300661 ], [ 68.7970705, 24.3301902 ], [ 68.7967893, 24.3304473 ], [ 68.7953846, 24.3304454 ], [ 68.7951034, 24.3305741 ], [ 68.7951026, 24.3310889 ], [ 68.7942601, 24.3309587 ], [ 68.7939796, 24.3307009 ], [ 68.7934177, 24.3307002 ], [ 68.793137, 24.3305715 ], [ 68.7932778, 24.3300568 ], [ 68.7931382, 24.3297992 ], [ 68.7937001, 24.3298 ], [ 68.7937014, 24.3290277 ], [ 68.7931395, 24.3290269 ], [ 68.7928573, 24.3297988 ], [ 68.7922954, 24.3297981 ], [ 68.7925755, 24.3303133 ], [ 68.79089, 24.330311 ], [ 68.7906112, 24.3290235 ], [ 68.7911724, 24.3294101 ], [ 68.7914532, 24.3294104 ], [ 68.7915935, 24.3292823 ], [ 68.7915938, 24.3290249 ], [ 68.7911739, 24.3285095 ], [ 68.7920166, 24.3285106 ], [ 68.7920153, 24.3292829 ], [ 68.7928581, 24.329284 ], [ 68.7931416, 24.32774 ], [ 68.7928603, 24.3278678 ], [ 68.7922988, 24.3277389 ], [ 68.7922996, 24.3272241 ], [ 68.7925802, 24.3273526 ], [ 68.7934232, 24.3273537 ], [ 68.7937038, 24.3274834 ], [ 68.7938446, 24.3269687 ], [ 68.7941259, 24.3267117 ], [ 68.7941272, 24.3259394 ], [ 68.7939877, 24.3256818 ], [ 68.7934258, 24.3256811 ], [ 68.7937076, 24.3251666 ], [ 68.792584, 24.325036 ], [ 68.7923033, 24.3249073 ], [ 68.7920238, 24.3241347 ], [ 68.7914619, 24.3241339 ], [ 68.7914612, 24.3246488 ], [ 68.7908991, 24.3247763 ], [ 68.7906177, 24.3250334 ], [ 68.7900556, 24.3251617 ], [ 68.7899155, 24.3246467 ], [ 68.789635, 24.3243889 ], [ 68.7894969, 24.323359 ], [ 68.788935, 24.3233583 ], [ 68.7892175, 24.322329 ], [ 68.7883746, 24.3224562 ], [ 68.7880934, 24.322713 ], [ 68.7875315, 24.3227123 ], [ 68.787251, 24.3224545 ], [ 68.7864084, 24.322325 ], [ 68.7862684, 24.32181 ], [ 68.785568, 24.3210368 ], [ 68.7850057, 24.3212934 ], [ 68.785007, 24.3205212 ], [ 68.7841643, 24.3205201 ], [ 68.7844459, 24.3201339 ], [ 68.7866933, 24.3200088 ], [ 68.7866942, 24.319494 ], [ 68.7872559, 24.3194947 ], [ 68.7872552, 24.3200096 ], [ 68.7878169, 24.3200103 ], [ 68.7878186, 24.3189808 ], [ 68.7880992, 24.3191094 ], [ 68.7903472, 24.3187268 ], [ 68.7903476, 24.3184694 ], [ 68.7895048, 24.3184683 ], [ 68.7895054, 24.3182109 ], [ 68.7900671, 24.3182116 ], [ 68.7900675, 24.3179542 ], [ 68.7895058, 24.3179534 ], [ 68.7896466, 24.3174388 ], [ 68.7897878, 24.3173099 ], [ 68.7903497, 24.3171825 ], [ 68.7903514, 24.3161528 ], [ 68.791193, 24.3167969 ], [ 68.7925974, 24.316799 ], [ 68.7927373, 24.3169283 ], [ 68.7930161, 24.3182158 ], [ 68.7931569, 24.3183441 ], [ 68.7951225, 24.3187334 ], [ 68.7951232, 24.3182186 ], [ 68.7954039, 24.3183471 ], [ 68.7959658, 24.3183479 ], [ 68.7970881, 24.3191216 ], [ 68.7982115, 24.3192522 ], [ 68.7982124, 24.3187376 ], [ 68.7970892, 24.3184787 ], [ 68.7970896, 24.3182213 ], [ 68.7976515, 24.3180927 ], [ 68.7990559, 24.3182239 ], [ 68.7990546, 24.318996 ], [ 68.7998974, 24.3189971 ], [ 68.7998977, 24.3187397 ], [ 68.799336, 24.3187389 ], [ 68.7993368, 24.3182243 ], [ 68.8007405, 24.3187408 ], [ 68.8008813, 24.3182262 ], [ 68.8010223, 24.3180973 ], [ 68.8021459, 24.3180988 ], [ 68.8024275, 24.3177134 ], [ 68.8001809, 24.3173239 ], [ 68.7999004, 24.3170661 ], [ 68.7990576, 24.3170649 ], [ 68.797935, 24.3165488 ], [ 68.7954073, 24.316288 ], [ 68.7951263, 24.3164167 ], [ 68.795127, 24.3159018 ], [ 68.7914769, 24.3149956 ], [ 68.7903542, 24.3144792 ], [ 68.7886691, 24.3143486 ], [ 68.7886698, 24.3138338 ], [ 68.7878271, 24.3139608 ], [ 68.7816504, 24.3122795 ], [ 68.7816511, 24.3117646 ], [ 68.7802463, 24.31202 ], [ 68.7805245, 24.3135649 ], [ 68.7799632, 24.3133067 ], [ 68.7796836, 24.3125341 ], [ 68.7790921, 24.3125523 ], [ 68.7793707, 24.3138398 ], [ 68.7799326, 24.3138405 ], [ 68.7806315, 24.315386 ], [ 68.7807712, 24.3161584 ], [ 68.7816139, 24.3161598 ], [ 68.7814699, 24.3179613 ], [ 68.7817502, 24.3182191 ], [ 68.7818899, 24.3189915 ], [ 68.7813282, 24.3189908 ], [ 68.7813276, 24.3192482 ], [ 68.7818895, 24.319249 ], [ 68.7820286, 24.319764 ], [ 68.7825896, 24.3202796 ], [ 68.7827296, 24.3207946 ], [ 68.7821679, 24.3206648 ], [ 68.7816068, 24.3202782 ], [ 68.7816054, 24.3210505 ], [ 68.7810437, 24.3210496 ], [ 68.7810424, 24.3218218 ], [ 68.7818852, 24.3218231 ], [ 68.7818846, 24.3220806 ], [ 68.7813229, 24.3220796 ], [ 68.7814614, 24.3228521 ], [ 68.7811802, 24.3231091 ], [ 68.7810379, 24.324396 ], [ 68.7815998, 24.3243967 ], [ 68.7814548, 24.3267131 ], [ 68.7813144, 24.3269704 ], [ 68.7810335, 24.32697 ], [ 68.7808957, 24.3251681 ], [ 68.7807561, 24.3249105 ], [ 68.7799133, 24.3249091 ], [ 68.7799143, 24.3243943 ], [ 68.7804762, 24.324395 ], [ 68.7799169, 24.3228498 ], [ 68.7793552, 24.322849 ], [ 68.7792159, 24.3218192 ], [ 68.7793579, 24.3213047 ], [ 68.7782333, 24.3218178 ], [ 68.7782314, 24.3228475 ], [ 68.7776699, 24.3227175 ], [ 68.7771074, 24.3231032 ], [ 68.7771071, 24.3233607 ], [ 68.7776688, 24.3233614 ], [ 68.7765402, 24.3261913 ], [ 68.7762592, 24.3261909 ], [ 68.7759797, 24.3254183 ], [ 68.7751367, 24.3255451 ], [ 68.7745743, 24.3259309 ], [ 68.774572, 24.327218 ], [ 68.7740101, 24.3272172 ], [ 68.774011, 24.3267024 ], [ 68.7734488, 24.3269588 ], [ 68.7731655, 24.3282455 ], [ 68.7737274, 24.3282463 ], [ 68.773727, 24.3285037 ], [ 68.7717606, 24.3283716 ], [ 68.7714796, 24.3285003 ], [ 68.771479451055328, 24.328586613443317 ] ] ], [ [ [ 68.605849394273477, 23.203025 ], [ 68.6049628, 23.20384 ], [ 68.6038463, 23.2046096 ], [ 68.6027301, 23.205379 ], [ 68.6021722, 23.2056351 ], [ 68.601056, 23.2064047 ], [ 68.5997987, 23.2075605 ], [ 68.5996583, 23.2080749 ], [ 68.5991009, 23.2082018 ], [ 68.5982623, 23.2092294 ], [ 68.597426, 23.2094847 ], [ 68.5970064, 23.2098703 ], [ 68.5968662, 23.2103847 ], [ 68.5960303, 23.210511 ], [ 68.5954716, 23.2110243 ], [ 68.5946352, 23.2112796 ], [ 68.5940767, 23.2117931 ], [ 68.5932395, 23.2123059 ], [ 68.5907296, 23.2133291 ], [ 68.5900308, 23.2139714 ], [ 68.5896095, 23.2152573 ], [ 68.588774, 23.2152552 ], [ 68.5875115, 23.2180838 ], [ 68.586952, 23.2188546 ], [ 68.5869503, 23.2193696 ], [ 68.5862533, 23.2197534 ], [ 68.5849957, 23.220909 ], [ 68.5841569, 23.2219366 ], [ 68.5824752, 23.2252789 ], [ 68.5824687, 23.2273384 ], [ 68.5833005, 23.2286277 ], [ 68.5835767, 23.2294008 ], [ 68.5838545, 23.2296589 ], [ 68.5856498, 23.2348126 ], [ 68.5862068, 23.2348141 ], [ 68.5859259, 23.2355856 ], [ 68.5867609, 23.2358453 ], [ 68.5868981, 23.2363605 ], [ 68.5871758, 23.2366187 ], [ 68.5873141, 23.2371339 ], [ 68.58787, 23.2375211 ], [ 68.588705, 23.2377806 ], [ 68.5889828, 23.2380388 ], [ 68.5942697, 23.2401121 ], [ 68.59789, 23.2405081 ], [ 68.597891, 23.2402507 ], [ 68.5973338, 23.2402492 ], [ 68.5973345, 23.2399917 ], [ 68.5962206, 23.2398596 ], [ 68.5937156, 23.239081 ], [ 68.5928813, 23.2385639 ], [ 68.5917694, 23.2377888 ], [ 68.5906581, 23.2367561 ], [ 68.5901015, 23.2366262 ], [ 68.5894154, 23.2330203 ], [ 68.5895585, 23.231991 ], [ 68.5903941, 23.2319931 ], [ 68.5906704, 23.2327661 ], [ 68.5912276, 23.2327676 ], [ 68.5916434, 23.2332836 ], [ 68.5917815, 23.2337988 ], [ 68.5926165, 23.2340585 ], [ 68.5926211, 23.2325138 ], [ 68.5909509, 23.2321229 ], [ 68.5908116, 23.2319942 ], [ 68.5908201, 23.2291624 ], [ 68.5913797, 23.2283915 ], [ 68.5915218, 23.2276196 ], [ 68.5931951, 23.2269799 ], [ 68.5951454, 23.2268566 ], [ 68.5954262, 23.2260849 ], [ 68.597657, 23.2253184 ], [ 68.5977966, 23.2250613 ], [ 68.5976602, 23.2242887 ], [ 68.5962682, 23.2240277 ], [ 68.5961299, 23.2235125 ], [ 68.5955744, 23.2229961 ], [ 68.5950197, 23.2222223 ], [ 68.5948823, 23.2217071 ], [ 68.5943257, 23.2215765 ], [ 68.5939093, 23.2209322 ], [ 68.5940514, 23.2201604 ], [ 68.5946095, 23.2197752 ], [ 68.5951671, 23.2196484 ], [ 68.5955899, 23.2178474 ], [ 68.5962913, 23.2163044 ], [ 68.5976844, 23.2161789 ], [ 68.599214, 23.2168268 ], [ 68.599633, 23.2165705 ], [ 68.5996337, 23.2163131 ], [ 68.5993553, 23.2163123 ], [ 68.5992589, 23.2164809 ], [ 68.5991711, 23.2164807 ], [ 68.5985209, 23.2159235 ], [ 68.5979641, 23.2157939 ], [ 68.5979656, 23.2152791 ], [ 68.5985239, 23.2148939 ], [ 68.5996392, 23.214511 ], [ 68.5999201, 23.2137393 ], [ 68.6007564, 23.2134839 ], [ 68.6007587, 23.2127117 ], [ 68.6010376, 23.2125832 ], [ 68.6021518, 23.212586 ], [ 68.6024294, 23.2128442 ], [ 68.60577, 23.2134966 ], [ 68.6054967, 23.2116939 ], [ 68.6049386, 23.2120782 ], [ 68.6038244, 23.2120753 ], [ 68.6036849, 23.2119468 ], [ 68.6035477, 23.2114316 ], [ 68.6054978, 23.2113072 ], [ 68.6066108, 23.2116967 ], [ 68.6068864, 23.2127272 ], [ 68.6077205, 23.2132441 ], [ 68.6077227, 23.2124718 ], [ 68.6082797, 23.2124732 ], [ 68.6084215, 23.2114437 ], [ 68.6091191, 23.211188 ], [ 68.6088428, 23.210415 ], [ 68.610794, 23.209905 ], [ 68.6112128, 23.2093911 ], [ 68.611354, 23.2088767 ], [ 68.6096821, 23.2091299 ], [ 68.6095409, 23.2096444 ], [ 68.6082858, 23.2104136 ], [ 68.608288, 23.2096414 ], [ 68.6075475, 23.209551 ], [ 68.6075919, 23.2093821 ], [ 68.6084298, 23.2086119 ], [ 68.6085717, 23.20784 ], [ 68.6094092, 23.207198 ], [ 68.6105245, 23.2068151 ], [ 68.6108051, 23.2060434 ], [ 68.6110841, 23.2059149 ], [ 68.6144266, 23.2057948 ], [ 68.614708, 23.2047657 ], [ 68.614151, 23.2047644 ], [ 68.6141525, 23.2042496 ], [ 68.6158229, 23.204511 ], [ 68.6164766, 23.2038279 ], [ 68.6169391, 23.2037414 ], [ 68.617108088306637, 23.203225 ], [ 68.61736, 23.2024552 ], [ 68.6173644, 23.2009105 ], [ 68.617226, 23.2007811 ], [ 68.6166694, 23.2006514 ], [ 68.6166709, 23.2001366 ], [ 68.6175063, 23.2001386 ], [ 68.6173674, 23.1998808 ], [ 68.6175101, 23.1988514 ], [ 68.6177889, 23.1987228 ], [ 68.6205728, 23.1991163 ], [ 68.620436, 23.1980861 ], [ 68.6198805, 23.1975699 ], [ 68.6193256, 23.1967964 ], [ 68.6191884, 23.1962812 ], [ 68.6203024, 23.1962838 ], [ 68.6203039, 23.195769 ], [ 68.6208609, 23.1957703 ], [ 68.6210004, 23.1955131 ], [ 68.6211436, 23.1942262 ], [ 68.6217006, 23.1942277 ], [ 68.6217021, 23.1937126 ], [ 68.6211451, 23.1937113 ], [ 68.6211459, 23.1934539 ], [ 68.6222599, 23.1934565 ], [ 68.6225405, 23.1926849 ], [ 68.621705, 23.192683 ], [ 68.6217065, 23.1921681 ], [ 68.6222646, 23.1917828 ], [ 68.6233784, 23.1917854 ], [ 68.6242124, 23.1923023 ], [ 68.6247685, 23.1926903 ], [ 68.6249085, 23.1921757 ], [ 68.6242147, 23.1915301 ], [ 68.6236581, 23.1914004 ], [ 68.6236594, 23.1908856 ], [ 68.6256082, 23.1911475 ], [ 68.6254698, 23.1906323 ], [ 68.6253339, 23.1896023 ], [ 68.6258913, 23.1894745 ], [ 68.6261705, 23.1892177 ], [ 68.6272848, 23.189092 ], [ 68.6272861, 23.1885771 ], [ 68.6278459, 23.1875488 ], [ 68.6283077, 23.18738 ], [ 68.6284029, 23.1875501 ], [ 68.6286815, 23.1875507 ], [ 68.6286821, 23.1872933 ], [ 68.6284044, 23.1870351 ], [ 68.6289616, 23.1869073 ], [ 68.6295197, 23.1865229 ], [ 68.6293778, 23.187295 ], [ 68.6281217, 23.1885792 ], [ 68.6275611, 23.189865 ], [ 68.6286726, 23.1907682 ], [ 68.6297866, 23.1907709 ], [ 68.6320123, 23.1915484 ], [ 68.634519, 23.1914259 ], [ 68.6349419, 23.1893673 ], [ 68.6355003, 23.1888538 ], [ 68.635642, 23.1880818 ], [ 68.6364776, 23.1880838 ], [ 68.6371759, 23.1870557 ], [ 68.637178, 23.1862832 ], [ 68.6374572, 23.1860264 ], [ 68.638299, 23.1837113 ], [ 68.6385781, 23.1834547 ], [ 68.6385787, 23.1831972 ], [ 68.6384403, 23.1830676 ], [ 68.6373262, 23.1831942 ], [ 68.6373247, 23.1837093 ], [ 68.6367675, 23.1838361 ], [ 68.6356507, 23.1848633 ], [ 68.6344388, 23.1856735 ], [ 68.6328618, 23.1864016 ], [ 68.6311909, 23.1863976 ], [ 68.6295214, 23.1858788 ], [ 68.6275715, 23.1861317 ], [ 68.6272922, 23.1863885 ], [ 68.624783, 23.1874123 ], [ 68.6233886, 23.1881812 ], [ 68.6224109, 23.1890804 ], [ 68.6218516, 23.1898514 ], [ 68.6214334, 23.1902362 ], [ 68.620876, 23.1903639 ], [ 68.6207348, 23.1908784 ], [ 68.6198972, 23.1916488 ], [ 68.6193381, 23.1924197 ], [ 68.6190567, 23.1934488 ], [ 68.6189176, 23.1935768 ], [ 68.618082, 23.1935749 ], [ 68.616966, 23.1943445 ], [ 68.6155734, 23.1943411 ], [ 68.6154341, 23.1942124 ], [ 68.615437, 23.1931827 ], [ 68.615859, 23.1918964 ], [ 68.6194814, 23.191133 ], [ 68.6198573, 23.1901916 ], [ 68.6200414, 23.1901044 ], [ 68.6200421, 23.189847 ], [ 68.6197635, 23.1898465 ], [ 68.6189255, 23.190745 ], [ 68.6178102, 23.1912572 ], [ 68.6161393, 23.191253 ], [ 68.6154407, 23.1918954 ], [ 68.6153005, 23.1924101 ], [ 68.6147435, 23.1924085 ], [ 68.6148815, 23.1926663 ], [ 68.6148792, 23.1934388 ], [ 68.6146001, 23.1936954 ], [ 68.6143186, 23.1947245 ], [ 68.6137594, 23.1954955 ], [ 68.6123633, 23.1967794 ], [ 68.6118032, 23.1978077 ], [ 68.6066375, 23.2025571 ], [ 68.6060798, 23.2028132 ], [ 68.605849394273477, 23.203025 ] ] ], [ [ [ 68.5547875, 23.256891248523722 ], [ 68.5538163, 23.2575085 ], [ 68.5532592, 23.2575068 ], [ 68.5531197, 23.257378 ], [ 68.5529836, 23.2566054 ], [ 68.5518687, 23.2567305 ], [ 68.5517285, 23.2568592 ], [ 68.5515852, 23.2581461 ], [ 68.5524211, 23.2581484 ], [ 68.5518617, 23.2587901 ], [ 68.5510241, 23.2593024 ], [ 68.5490704, 23.2603266 ], [ 68.5475351, 23.2609662 ], [ 68.5475334, 23.2614812 ], [ 68.5469744, 23.2619944 ], [ 68.5464138, 23.2630225 ], [ 68.5464111, 23.2637948 ], [ 68.546826, 23.2648258 ], [ 68.545152, 23.265464 ], [ 68.5443144, 23.2659766 ], [ 68.5436141, 23.2668761 ], [ 68.5423569, 23.2680305 ], [ 68.541379, 23.2686716 ], [ 68.5396956, 23.2720135 ], [ 68.5399636, 23.2751034 ], [ 68.539954, 23.2779352 ], [ 68.5393894, 23.279993 ], [ 68.5393735, 23.2846269 ], [ 68.5397857, 23.2864302 ], [ 68.5400641, 23.2865593 ], [ 68.5411792, 23.2864343 ], [ 68.5414614, 23.2854052 ], [ 68.5411828, 23.2854045 ], [ 68.5411855, 23.2846322 ], [ 68.5409067, 23.2846315 ], [ 68.5417525, 23.281802 ], [ 68.5434253, 23.2815494 ], [ 68.5432881, 23.2807768 ], [ 68.5427343, 23.2797454 ], [ 68.5425981, 23.2789726 ], [ 68.5428759, 23.279231 ], [ 68.5431547, 23.2792317 ], [ 68.5431554, 23.2789743 ], [ 68.5429719, 23.2788853 ], [ 68.5424654, 23.2769127 ], [ 68.542475, 23.2740809 ], [ 68.5434641, 23.2702223 ], [ 68.5445776, 23.2704829 ], [ 68.5444334, 23.2717698 ], [ 68.5441539, 23.2720263 ], [ 68.5441496, 23.2733136 ], [ 68.5447043, 23.2740875 ], [ 68.5448424, 23.2746028 ], [ 68.5453992, 23.2747326 ], [ 68.5459549, 23.2752491 ], [ 68.5473469, 23.2756398 ], [ 68.5476298, 23.2743535 ], [ 68.5470724, 23.2743518 ], [ 68.5470734, 23.2740943 ], [ 68.5484675, 23.2738409 ], [ 68.5477731, 23.2730666 ], [ 68.547496, 23.272551 ], [ 68.5475022, 23.2707489 ], [ 68.5473643, 23.2704911 ], [ 68.5476432, 23.2703627 ], [ 68.5490365, 23.2703667 ], [ 68.5501537, 23.2695977 ], [ 68.5507128, 23.2690843 ], [ 68.5518277, 23.2689592 ], [ 68.5528086, 23.2671599 ], [ 68.552812, 23.2661303 ], [ 68.5525342, 23.2658719 ], [ 68.5523979, 23.2650993 ], [ 68.5532346, 23.2648441 ], [ 68.5535107, 23.2656173 ], [ 68.5540685, 23.2654897 ], [ 68.554348, 23.2652331 ], [ 68.5547875, 23.265132928835289 ], [ 68.5554633, 23.2649789 ], [ 68.5560224, 23.2644655 ], [ 68.5571382, 23.264083 ], [ 68.5576997, 23.2627972 ], [ 68.5588171, 23.2618989 ], [ 68.5599316, 23.2619021 ], [ 68.5602095, 23.2621603 ], [ 68.5618804, 23.2624225 ], [ 68.5627147, 23.2629396 ], [ 68.5632714, 23.2630704 ], [ 68.5635527, 23.2622989 ], [ 68.5629959, 23.2621681 ], [ 68.5623007, 23.261523 ], [ 68.5611889, 23.2607475 ], [ 68.5613312, 23.2599757 ], [ 68.5630046, 23.2594654 ], [ 68.5632866, 23.2584364 ], [ 68.5638443, 23.2583089 ], [ 68.5644032, 23.2577955 ], [ 68.5666347, 23.2570293 ], [ 68.5688645, 23.2567782 ], [ 68.5694225, 23.2565223 ], [ 68.5744378, 23.2565359 ], [ 68.5772223, 23.2570583 ], [ 68.577778, 23.2575746 ], [ 68.5783351, 23.2575761 ], [ 68.5802888, 23.2565516 ], [ 68.5808475, 23.2560382 ], [ 68.5833563, 23.2556591 ], [ 68.5837762, 23.254888 ], [ 68.5843349, 23.2543746 ], [ 68.5850369, 23.2528318 ], [ 68.5830885, 23.2521826 ], [ 68.578076, 23.251397 ], [ 68.5733412, 23.2508693 ], [ 68.5722265, 23.2509953 ], [ 68.5722272, 23.2507379 ], [ 68.5733429, 23.2503542 ], [ 68.5739018, 23.2498409 ], [ 68.5747392, 23.2493283 ], [ 68.5761338, 23.2488173 ], [ 68.5766927, 23.2483038 ], [ 68.5772499, 23.2483053 ], [ 68.5775281, 23.2484353 ], [ 68.5772527, 23.2474047 ], [ 68.5789252, 23.2471518 ], [ 68.5792062, 23.2463803 ], [ 68.5786494, 23.2462495 ], [ 68.5764206, 23.2462437 ], [ 68.5708437, 23.2477731 ], [ 68.5705642, 23.2480297 ], [ 68.5686124, 23.2485393 ], [ 68.5683329, 23.2487959 ], [ 68.5672185, 23.2487929 ], [ 68.5666604, 23.2490488 ], [ 68.5652633, 23.2503321 ], [ 68.5647052, 23.250588 ], [ 68.5547875, 23.256891248523722 ] ] ], [ [ [ 68.5545875, 23.293399897262713 ], [ 68.5535474, 23.2962525 ], [ 68.5543459, 23.3075821 ], [ 68.5545875, 23.308403116196239 ], [ 68.5558623, 23.3127352 ], [ 68.5566963, 23.3133806 ], [ 68.5572529, 23.3136398 ], [ 68.5586462, 23.3137728 ], [ 68.5586487, 23.3130006 ], [ 68.5580913, 23.3129989 ], [ 68.5580921, 23.3127414 ], [ 68.5576744, 23.3124829 ], [ 68.5576769, 23.3117106 ], [ 68.5579573, 23.3111966 ], [ 68.5581032, 23.3093948 ], [ 68.5589394, 23.3093973 ], [ 68.5586633, 23.3086241 ], [ 68.5581057, 23.3086226 ], [ 68.5576914, 23.3073342 ], [ 68.5578388, 23.3050176 ], [ 68.5583964, 23.3050193 ], [ 68.5590968, 23.3037341 ], [ 68.5599365, 23.3027067 ], [ 68.5599373, 23.3024493 ], [ 68.5597988, 23.3023196 ], [ 68.5567334, 23.3021828 ], [ 68.5571586, 23.2998669 ], [ 68.5580016, 23.2978099 ], [ 68.5588403, 23.2970399 ], [ 68.5592622, 23.2960113 ], [ 68.5598196, 23.2960129 ], [ 68.5599609, 23.295241 ], [ 68.5610817, 23.2934421 ], [ 68.5616408, 23.2929288 ], [ 68.5622008, 23.292158 ], [ 68.563606, 23.2885578 ], [ 68.5634722, 23.2870127 ], [ 68.5643091, 23.2867577 ], [ 68.5645893, 23.2862435 ], [ 68.5623612, 23.2858507 ], [ 68.5612465, 23.2858477 ], [ 68.560967, 23.2861043 ], [ 68.560409, 23.2862319 ], [ 68.5602677, 23.2867464 ], [ 68.5597086, 23.2872597 ], [ 68.5594274, 23.2880312 ], [ 68.5588683, 23.2885445 ], [ 68.5583076, 23.2895727 ], [ 68.5578887, 23.2899571 ], [ 68.5564935, 23.2904682 ], [ 68.5552352, 23.2916235 ], [ 68.5545875, 23.293399897262717 ], [ 68.5545875, 23.293399897262713 ] ] ], [ [ [ 68.6421164, 23.2666166 ], [ 68.641559, 23.2666152 ], [ 68.6414178, 23.2671299 ], [ 68.6404407, 23.2680282 ], [ 68.6384874, 23.2690535 ], [ 68.6369491, 23.2709813 ], [ 68.6363897, 23.2717523 ], [ 68.6358289, 23.2730382 ], [ 68.6349811, 23.2774126 ], [ 68.63414, 23.2792128 ], [ 68.6332948, 23.2825576 ], [ 68.6330147, 23.2830718 ], [ 68.632171, 23.2859017 ], [ 68.6316121, 23.2864153 ], [ 68.6299323, 23.2892431 ], [ 68.6293734, 23.2897566 ], [ 68.6293663, 23.2923311 ], [ 68.629643, 23.293104 ], [ 68.629777, 23.2951639 ], [ 68.6303334, 23.2955509 ], [ 68.6317261, 23.2958116 ], [ 68.6370219, 23.2956957 ], [ 68.6371621, 23.2951811 ], [ 68.6380003, 23.2944107 ], [ 68.6381415, 23.2938963 ], [ 68.6395358, 23.293642 ], [ 68.6399561, 23.2926131 ], [ 68.6402425, 23.2897819 ], [ 68.6392693, 23.2891357 ], [ 68.6364819, 23.2892584 ], [ 68.6360606, 23.2902873 ], [ 68.6350833, 23.2911856 ], [ 68.6345256, 23.2913134 ], [ 68.6343842, 23.291828 ], [ 68.633966, 23.2920845 ], [ 68.6339667, 23.2918269 ], [ 68.6336881, 23.2918263 ], [ 68.6338304, 23.2905394 ], [ 68.6343899, 23.2897685 ], [ 68.6352366, 23.2859087 ], [ 68.6357953, 23.2853952 ], [ 68.6366361, 23.2835952 ], [ 68.6366397, 23.2823079 ], [ 68.6377594, 23.2805084 ], [ 68.6379032, 23.2789641 ], [ 68.63846, 23.2792229 ], [ 68.6383305, 23.2753608 ], [ 68.6388913, 23.2740751 ], [ 68.6396002, 23.2697001 ], [ 68.6401576, 23.2697014 ], [ 68.6401561, 23.2702163 ], [ 68.6404349, 23.270217 ], [ 68.6414137, 23.2686746 ], [ 68.6421164, 23.2666166 ] ] ], [ [ [ 88.1330362, 21.9022595 ], [ 88.1321366, 21.9017441 ], [ 88.1311067, 21.900979 ], [ 88.1295598, 21.9009085 ], [ 88.1281615, 21.901331 ], [ 88.1276827, 21.901592 ], [ 88.1271098, 21.9019394 ], [ 88.1265635, 21.9021877 ], [ 88.1261943, 21.9026012 ], [ 88.1258307, 21.903312 ], [ 88.125498, 21.9039434 ], [ 88.12549, 21.9044549 ], [ 88.1253339, 21.90564 ], [ 88.1247116, 21.9064411 ], [ 88.1238399, 21.9072651 ], [ 88.1236227, 21.90769 ], [ 88.1232603, 21.9080431 ], [ 88.1227303, 21.9084898 ], [ 88.1223381, 21.9090515 ], [ 88.1220544, 21.9093755 ], [ 88.1216931, 21.9096247 ], [ 88.1216626, 21.9100487 ], [ 88.1209835, 21.9107045 ], [ 88.120184, 21.9114563 ], [ 88.1194225, 21.9123776 ], [ 88.1187051, 21.9133021 ], [ 88.1181674, 21.9142521 ], [ 88.1177928, 21.9149787 ], [ 88.1174935, 21.9157165 ], [ 88.1177276, 21.916639 ], [ 88.1175126, 21.9176381 ], [ 88.1178356, 21.9181691 ], [ 88.1181836, 21.9185779 ], [ 88.1183272, 21.9186723 ], [ 88.1190139, 21.9194867 ], [ 88.120304, 21.9204269 ], [ 88.1205685, 21.9202267 ], [ 88.1215458, 21.9209714 ], [ 88.1215356, 21.9211879 ], [ 88.1226093, 21.9220858 ], [ 88.1235044, 21.9228917 ], [ 88.1242064, 21.9235172 ], [ 88.1245584, 21.9239619 ], [ 88.1250622, 21.9244291 ], [ 88.1254829, 21.9247375 ], [ 88.1261635, 21.9250181 ], [ 88.1267684, 21.9251584 ], [ 88.1273695, 21.9252569 ], [ 88.1282657, 21.9255372 ], [ 88.1288555, 21.9256074 ], [ 88.1293697, 21.925453 ], [ 88.1296716, 21.9256726 ], [ 88.1299747, 21.9258459 ], [ 88.1304731, 21.9260275 ], [ 88.1310485, 21.9262247 ], [ 88.1315522, 21.9263737 ], [ 88.1319454, 21.9264479 ], [ 88.1322735, 21.9264211 ], [ 88.1325911, 21.9263229 ], [ 88.1329856, 21.9260306 ], [ 88.134129, 21.9250116 ], [ 88.1345695, 21.924494 ], [ 88.1349136, 21.9242013 ], [ 88.1351082, 21.9239718 ], [ 88.1355202, 21.9232544 ], [ 88.1354721, 21.9229772 ], [ 88.1356413, 21.9229658 ], [ 88.1359699, 21.9225913 ], [ 88.1364452, 21.9218486 ], [ 88.1368972, 21.9213047 ], [ 88.1371467, 21.9209288 ], [ 88.1375008, 21.9204459 ], [ 88.1379253, 21.919816 ], [ 88.1385588, 21.9191598 ], [ 88.139097, 21.918574 ], [ 88.1394457, 21.9183226 ], [ 88.1396254, 21.9180875 ], [ 88.140011, 21.9175505 ], [ 88.1405983, 21.9168744 ], [ 88.1410139, 21.9163515 ], [ 88.141514, 21.9158339 ], [ 88.1421926, 21.9151497 ], [ 88.1425495, 21.91469 ], [ 88.1425336, 21.9142873 ], [ 88.1420051, 21.9134033 ], [ 88.1413585, 21.9122889 ], [ 88.1409101, 21.9114624 ], [ 88.1406417, 21.9109934 ], [ 88.1401801, 21.9102484 ], [ 88.1399157, 21.9099858 ], [ 88.1393722, 21.9093096 ], [ 88.1391525, 21.9088277 ], [ 88.1389323, 21.9083805 ], [ 88.1386384, 21.9080755 ], [ 88.1381165, 21.9076708 ], [ 88.137774, 21.9072372 ], [ 88.1370481, 21.9065035 ], [ 88.1365892, 21.9058774 ], [ 88.1362641, 21.9054742 ], [ 88.135774, 21.9049463 ], [ 88.1351388, 21.9040862 ], [ 88.1345661, 21.9034804 ], [ 88.1340248, 21.9028798 ], [ 88.1334229, 21.9025823 ], [ 88.1330362, 21.9022595 ] ] ], [ [ [ 88.1672998, 21.9212191 ], [ 88.1665443, 21.920378 ], [ 88.1655621, 21.9214118 ], [ 88.1651655, 21.9221127 ], [ 88.1641833, 21.9243381 ], [ 88.1634466, 21.9260728 ], [ 88.1626911, 21.9284207 ], [ 88.1622756, 21.9306284 ], [ 88.1619733, 21.9326258 ], [ 88.16186, 21.9333968 ], [ 88.1616522, 21.9348861 ], [ 88.1616476, 21.9372596 ], [ 88.1617125, 21.9373853 ], [ 88.1620013, 21.9374127 ], [ 88.1629178, 21.9370587 ], [ 88.1638433, 21.9366382 ], [ 88.1646366, 21.9361826 ], [ 88.1655949, 21.9357829 ], [ 88.1664877, 21.9353591 ], [ 88.1675189, 21.9348687 ], [ 88.1682019, 21.9340915 ], [ 88.1689998, 21.9337647 ], [ 88.1694378, 21.9333104 ], [ 88.1707753, 21.9326784 ], [ 88.1710775, 21.9318724 ], [ 88.1712664, 21.9306284 ], [ 88.1709149, 21.9284083 ], [ 88.1706327, 21.9276379 ], [ 88.170152, 21.9264057 ], [ 88.1694909, 21.9248462 ], [ 88.1684143, 21.9228136 ], [ 88.1672998, 21.9212191 ] ] ], [ [ [ 88.7222296, 21.9302972 ], [ 88.7230879, 21.9309341 ], [ 88.7239462, 21.9306156 ], [ 88.7249762, 21.9293417 ], [ 88.7265211, 21.9266346 ], [ 88.7289244, 21.9229719 ], [ 88.7308127, 21.9204239 ], [ 88.7325293, 21.9191499 ], [ 88.7345892, 21.9180352 ], [ 88.7376791, 21.9170796 ], [ 88.7402541, 21.9172389 ], [ 88.742829, 21.9180352 ], [ 88.7452322, 21.9188314 ], [ 88.7464339, 21.9196277 ], [ 88.7474638, 21.9205832 ], [ 88.7490088, 21.9221757 ], [ 88.7507254, 21.9234497 ], [ 88.7527853, 21.9250421 ], [ 88.7548453, 21.9256791 ], [ 88.7577635, 21.9261569 ], [ 88.7605101, 21.9259976 ], [ 88.7636, 21.9253606 ], [ 88.7677199, 21.9255199 ], [ 88.7711531, 21.9245644 ], [ 88.772226, 21.9232108 ], [ 88.7723118, 21.9212998 ], [ 88.7726981, 21.9162037 ], [ 88.7708098, 21.9148899 ], [ 88.7690932, 21.9146908 ], [ 88.7670332, 21.9154075 ], [ 88.7650591, 21.9143723 ], [ 88.765617, 21.9122223 ], [ 88.7662178, 21.9113862 ], [ 88.7649733, 21.9100723 ], [ 88.7637287, 21.9095945 ], [ 88.7634713, 21.9097936 ], [ 88.7618405, 21.9109482 ], [ 88.7609822, 21.9110278 ], [ 88.760038, 21.9115056 ], [ 88.759566, 21.911864 ], [ 88.7589222, 21.9119834 ], [ 88.7587506, 21.9115056 ], [ 88.758536, 21.9089972 ], [ 88.7590081, 21.9073648 ], [ 88.7604243, 21.9067675 ], [ 88.7614971, 21.9067675 ], [ 88.7619692, 21.9065286 ], [ 88.7629134, 21.9058916 ], [ 88.765102, 21.9037016 ], [ 88.7662178, 21.9035025 ], [ 88.7669474, 21.902308 ], [ 88.7669474, 21.9007949 ], [ 88.7672049, 21.9000384 ], [ 88.7693507, 21.8958176 ], [ 88.7700373, 21.8931895 ], [ 88.7701231, 21.8922338 ], [ 88.7702948, 21.8903224 ], [ 88.7699515, 21.8882516 ], [ 88.7690932, 21.8871366 ], [ 88.7680632, 21.885703 ], [ 88.7670332, 21.8841101 ], [ 88.7663466, 21.8828358 ], [ 88.7663466, 21.8815614 ], [ 88.7672049, 21.8799685 ], [ 88.7682349, 21.8786941 ], [ 88.7663466, 21.8783755 ], [ 88.7610251, 21.8793313 ], [ 88.7579352, 21.8804464 ], [ 88.7586218, 21.8821986 ], [ 88.7589651, 21.8837915 ], [ 88.7584502, 21.8852252 ], [ 88.7572485, 21.8868181 ], [ 88.7548453, 21.8872959 ], [ 88.751927, 21.8877738 ], [ 88.7507254, 21.8887295 ], [ 88.7507254, 21.8906409 ], [ 88.751412, 21.8933487 ], [ 88.7508971, 21.8955787 ], [ 88.7491804, 21.8970122 ], [ 88.7454039, 21.8986049 ], [ 88.742314, 21.8997198 ], [ 88.7366492, 21.8994013 ], [ 88.7332159, 21.8994013 ], [ 88.731156, 21.8994013 ], [ 88.7289244, 21.8998791 ], [ 88.7266928, 21.900994 ], [ 88.7249762, 21.9029053 ], [ 88.7232596, 21.9046572 ], [ 88.7211996, 21.9073648 ], [ 88.719483, 21.9097537 ], [ 88.7181097, 21.9138945 ], [ 88.7181097, 21.9156463 ], [ 88.7179381, 21.9186722 ], [ 88.7179381, 21.9212202 ], [ 88.7184531, 21.9231312 ], [ 88.7191397, 21.9248829 ], [ 88.720513, 21.9277493 ], [ 88.7213713, 21.929501 ], [ 88.7222296, 21.9302972 ] ] ], [ [ [ 88.4591499, 21.8239038 ], [ 88.4590168, 21.8244199 ], [ 88.4588807, 21.8245494 ], [ 88.4569535, 21.8248238 ], [ 88.4542098, 21.8261351 ], [ 88.4514608, 21.8269317 ], [ 88.4511877, 21.8271914 ], [ 88.4495387, 21.8277208 ], [ 88.4492655, 21.8279807 ], [ 88.4476114, 21.8279952 ], [ 88.4474719, 21.8278682 ], [ 88.4473294, 21.8273545 ], [ 88.4484256, 21.826701 ], [ 88.4547443, 21.8244575 ], [ 88.4551521, 21.8239391 ], [ 88.4552852, 21.8234231 ], [ 88.4547339, 21.8234281 ], [ 88.4543043, 21.8218871 ], [ 88.4538874, 21.8215042 ], [ 88.453059, 21.8213833 ], [ 88.4530537, 21.8208684 ], [ 88.452501, 21.8207441 ], [ 88.451805, 21.8201071 ], [ 88.4516624, 21.8195936 ], [ 88.4505572, 21.8193458 ], [ 88.4504135, 21.8188323 ], [ 88.4501353, 21.8185772 ], [ 88.4495514, 21.8185905 ], [ 88.4494415, 21.8180684 ], [ 88.4487337, 21.8169751 ], [ 88.4484555, 21.8160177 ], [ 88.4474738, 21.8143057 ], [ 88.4473217, 21.8129386 ], [ 88.4472907, 21.8098495 ], [ 88.4478161, 21.8072706 ], [ 88.4486301, 21.8059764 ], [ 88.4486248, 21.8054615 ], [ 88.449171, 21.804942 ], [ 88.4499875, 21.8039049 ], [ 88.4501208, 21.803389 ], [ 88.4506681, 21.8029975 ], [ 88.4512181, 21.8028645 ], [ 88.4512104, 21.8020922 ], [ 88.4517615, 21.8020873 ], [ 88.4517564, 21.8015725 ], [ 88.4523064, 21.8014385 ], [ 88.4531255, 21.800659 ], [ 88.4547728, 21.8000015 ], [ 88.4547651, 21.7992293 ], [ 88.4553149, 21.7990953 ], [ 88.455588, 21.7988354 ], [ 88.4564135, 21.7986999 ], [ 88.4564084, 21.798185 ], [ 88.4583326, 21.7976532 ], [ 88.4585978, 21.7966211 ], [ 88.4594181, 21.7959698 ], [ 88.4610654, 21.7953122 ], [ 88.4611975, 21.7947961 ], [ 88.4606331, 21.7935139 ], [ 88.4604802, 21.7919707 ], [ 88.4593789, 21.7921087 ], [ 88.45856, 21.7928883 ], [ 88.4580113, 21.7931504 ], [ 88.4569166, 21.7939325 ], [ 88.455822, 21.7947144 ], [ 88.4543198, 21.796144 ], [ 88.4536403, 21.7970505 ], [ 88.4530917, 21.7973128 ], [ 88.4519996, 21.7983521 ], [ 88.4514496, 21.7984861 ], [ 88.4513166, 21.7990021 ], [ 88.4499512, 21.8003013 ], [ 88.4495449, 21.800948 ], [ 88.4459732, 21.8021382 ], [ 88.4458401, 21.8026541 ], [ 88.4451578, 21.8033033 ], [ 88.4443309, 21.8033105 ], [ 88.443499, 21.8028029 ], [ 88.4399131, 21.8025768 ], [ 88.4349386, 21.801333 ], [ 88.4342452, 21.8009533 ], [ 88.4338258, 21.8003128 ], [ 88.4321669, 21.7998123 ], [ 88.4307914, 21.8000818 ], [ 88.4302425, 21.800344 ], [ 88.429835, 21.8009915 ], [ 88.4292888, 21.801511 ], [ 88.4292939, 21.8020259 ], [ 88.4290208, 21.8022858 ], [ 88.4282221, 21.8051244 ], [ 88.4282297, 21.8058966 ], [ 88.4279617, 21.8066713 ], [ 88.4279694, 21.8074434 ], [ 88.4274308, 21.8087352 ], [ 88.4274359, 21.80925 ], [ 88.4268948, 21.8102844 ], [ 88.4263485, 21.8108042 ], [ 88.425942, 21.8114507 ], [ 88.4245714, 21.8122349 ], [ 88.4226417, 21.8125149 ], [ 88.4208745, 21.8123548 ], [ 88.4195359, 21.812164 ], [ 88.4182236, 21.8115173 ], [ 88.4179454, 21.8112621 ], [ 88.4169711, 21.81037 ], [ 88.4168288, 21.8098563 ], [ 88.4162762, 21.809732 ], [ 88.4158585, 21.8093498 ], [ 88.415716, 21.8088361 ], [ 88.4151647, 21.8088408 ], [ 88.4151597, 21.808326 ], [ 88.4146084, 21.8083307 ], [ 88.414465, 21.8078172 ], [ 88.4141868, 21.8075621 ], [ 88.4137638, 21.806536 ], [ 88.4132112, 21.8064114 ], [ 88.4125153, 21.8057743 ], [ 88.4120959, 21.805134 ], [ 88.4115434, 21.8050104 ], [ 88.4114, 21.8044967 ], [ 88.4112614, 21.8043687 ], [ 88.4107088, 21.8042451 ], [ 88.4105655, 21.8037316 ], [ 88.408763, 21.802588 ], [ 88.4079284, 21.8018229 ], [ 88.4068209, 21.8013173 ], [ 88.4064007, 21.8006777 ], [ 88.4044536, 21.7988925 ], [ 88.4043113, 21.7983788 ], [ 88.4037587, 21.7982542 ], [ 88.4032025, 21.7977441 ], [ 88.4015423, 21.7971151 ], [ 88.4018481, 21.8002017 ], [ 88.4023994, 21.8001969 ], [ 88.4025618, 21.80277 ], [ 88.4022936, 21.8035445 ], [ 88.4023036, 21.8045742 ], [ 88.4020356, 21.8053487 ], [ 88.402043, 21.8061209 ], [ 88.4017698, 21.8063808 ], [ 88.4015092, 21.8079276 ], [ 88.4012386, 21.8084447 ], [ 88.4012537, 21.8099892 ], [ 88.400983, 21.8105065 ], [ 88.4009906, 21.8112786 ], [ 88.3996523, 21.815409 ], [ 88.3991084, 21.816186 ], [ 88.3988453, 21.8174753 ], [ 88.3983015, 21.8182523 ], [ 88.3983064, 21.8187669 ], [ 88.3974918, 21.820061 ], [ 88.3974969, 21.8205759 ], [ 88.3966823, 21.8218699 ], [ 88.3966874, 21.8223848 ], [ 88.3964142, 21.8226447 ], [ 88.3953338, 21.8249707 ], [ 88.3947876, 21.82549 ], [ 88.3945219, 21.8265222 ], [ 88.3942486, 21.8267819 ], [ 88.3931707, 21.8293653 ], [ 88.3931783, 21.8301376 ], [ 88.392915, 21.8314269 ], [ 88.3934964, 21.8345112 ], [ 88.3940653, 21.8363084 ], [ 88.3957519, 21.8396409 ], [ 88.3968698, 21.8411761 ], [ 88.3977045, 21.8419412 ], [ 88.3982635, 21.8427089 ], [ 88.3993839, 21.8445014 ], [ 88.4002286, 21.8462963 ], [ 88.4005243, 21.8483532 ], [ 88.4025098, 21.8539998 ], [ 88.40253, 21.8560591 ], [ 88.4022618, 21.8568338 ], [ 88.4008904, 21.8576176 ], [ 88.4006398, 21.8601942 ], [ 88.4003716, 21.8609687 ], [ 88.4003792, 21.861741 ], [ 88.400111, 21.8625155 ], [ 88.400121, 21.8635452 ], [ 88.3998502, 21.8640623 ], [ 88.3996472, 21.8715297 ], [ 88.3997906, 21.8720434 ], [ 88.4003421, 21.8720387 ], [ 88.4009088, 21.8735784 ], [ 88.4014605, 21.8735737 ], [ 88.4020295, 21.8753709 ], [ 88.4025812, 21.8753662 ], [ 88.4030044, 21.8763923 ], [ 88.4032826, 21.8766474 ], [ 88.4034261, 21.8771609 ], [ 88.4039777, 21.8771564 ], [ 88.4039827, 21.8776712 ], [ 88.4045355, 21.8777947 ], [ 88.4053705, 21.8785599 ], [ 88.4062028, 21.8790676 ], [ 88.4067557, 21.8791921 ], [ 88.4070392, 21.8799619 ], [ 88.4084243, 21.8805932 ], [ 88.4100944, 21.8821235 ], [ 88.4106485, 21.8823762 ], [ 88.4117617, 21.8833964 ], [ 88.4125916, 21.8836467 ], [ 88.4142616, 21.885177 ], [ 88.414812, 21.8850439 ], [ 88.4155086, 21.8858103 ], [ 88.4156521, 21.8863239 ], [ 88.4162076, 21.8867049 ], [ 88.4167579, 21.8865718 ], [ 88.4174546, 21.8873382 ], [ 88.417598, 21.8878517 ], [ 88.4181535, 21.8882328 ], [ 88.4187063, 21.8883571 ], [ 88.4188515, 21.8891282 ], [ 88.4199826, 21.8919502 ], [ 88.4200031, 21.8940093 ], [ 88.4192036, 21.8968481 ], [ 88.4192113, 21.8976202 ], [ 88.4186723, 21.898912 ], [ 88.4185553, 21.9009725 ], [ 88.4202166, 21.9016013 ], [ 88.4210494, 21.9021089 ], [ 88.4218768, 21.9021018 ], [ 88.4232508, 21.9015752 ], [ 88.4235241, 21.9013153 ], [ 88.4254512, 21.900913 ], [ 88.4257192, 21.9001382 ], [ 88.4279144, 21.8989604 ], [ 88.4314975, 21.8986718 ], [ 88.4320543, 21.8991819 ], [ 88.4339915, 21.899809 ], [ 88.4346908, 21.9008326 ], [ 88.4348345, 21.9013463 ], [ 88.4353848, 21.9012123 ], [ 88.436492, 21.9015892 ], [ 88.4367755, 21.902359 ], [ 88.4373272, 21.9023543 ], [ 88.4373325, 21.9028691 ], [ 88.4381626, 21.9031191 ], [ 88.4384487, 21.9041464 ], [ 88.4390042, 21.9045272 ], [ 88.4395572, 21.9046516 ], [ 88.4395676, 21.9056812 ], [ 88.4398447, 21.9058071 ], [ 88.4431522, 21.9055206 ], [ 88.4439745, 21.9049986 ], [ 88.4519724, 21.9047999 ], [ 88.4523778, 21.9040241 ], [ 88.4525135, 21.9037655 ], [ 88.4522378, 21.9037678 ], [ 88.4522325, 21.9032532 ], [ 88.4525084, 21.9032507 ], [ 88.4526275, 21.9014476 ], [ 88.4534368, 21.8996385 ], [ 88.4537099, 21.8993787 ], [ 88.4542459, 21.8978292 ], [ 88.455612, 21.89653 ], [ 88.455745, 21.8960141 ], [ 88.4568392, 21.8951029 ], [ 88.4573895, 21.8949698 ], [ 88.4573842, 21.894455 ], [ 88.460958, 21.8932645 ], [ 88.4612313, 21.8930046 ], [ 88.4628836, 21.8927325 ], [ 88.4631567, 21.8924726 ], [ 88.4686649, 21.8916512 ], [ 88.4689382, 21.8913913 ], [ 88.4705916, 21.8912484 ], [ 88.4705863, 21.8907336 ], [ 88.4744436, 21.8903125 ], [ 88.47499, 21.8897928 ], [ 88.4771897, 21.8891299 ], [ 88.4789501, 21.886025 ], [ 88.4793377, 21.8834473 ], [ 88.4812655, 21.8831725 ], [ 88.4815333, 21.8823978 ], [ 88.4820811, 21.8820063 ], [ 88.4826312, 21.8818731 ], [ 88.4829966, 21.8772362 ], [ 88.4835348, 21.8759442 ], [ 88.4835003, 21.8725979 ], [ 88.483893, 21.870535 ], [ 88.4833415, 21.8705399 ], [ 88.4833388, 21.8702825 ], [ 88.4838903, 21.8702776 ], [ 88.484285, 21.868472 ], [ 88.4838665, 21.867961 ], [ 88.4846938, 21.8679534 ], [ 88.4859023, 21.8648535 ], [ 88.4858862, 21.8633089 ], [ 88.4857475, 21.8631812 ], [ 88.4851946, 21.8630578 ], [ 88.485873, 21.862022 ], [ 88.4870716, 21.8578924 ], [ 88.4876231, 21.8578875 ], [ 88.4883012, 21.8568516 ], [ 88.4882906, 21.8558219 ], [ 88.4880096, 21.8553097 ], [ 88.4885397, 21.8532455 ], [ 88.4896239, 21.8514337 ], [ 88.4898622, 21.8478276 ], [ 88.4901353, 21.8475677 ], [ 88.4898168, 21.8434517 ], [ 88.4892602, 21.8429419 ], [ 88.488409, 21.8406327 ], [ 88.4872956, 21.8396131 ], [ 88.4870145, 21.8391007 ], [ 88.486319, 21.838463 ], [ 88.4843812, 21.8377081 ], [ 88.4799699, 21.8377478 ], [ 88.4752725, 21.8367601 ], [ 88.4747184, 21.8365076 ], [ 88.4727885, 21.836525 ], [ 88.4718323, 21.8374348 ], [ 88.4712914, 21.8384694 ], [ 88.4703362, 21.8393785 ], [ 88.4697874, 21.8396409 ], [ 88.4691041, 21.840291 ], [ 88.4682956, 21.8421001 ], [ 88.4673402, 21.8430092 ], [ 88.4659656, 21.843408 ], [ 88.4663682, 21.8423747 ], [ 88.4663602, 21.8416025 ], [ 88.4674447, 21.8397909 ], [ 88.4685369, 21.8387514 ], [ 88.4690805, 21.8379743 ], [ 88.4692109, 21.8372009 ], [ 88.4683865, 21.8374657 ], [ 88.4686437, 21.8356613 ], [ 88.4691913, 21.8352699 ], [ 88.4697426, 21.8352649 ], [ 88.4705738, 21.8356441 ], [ 88.47069, 21.8335838 ], [ 88.4704037, 21.8325566 ], [ 88.4695662, 21.8315343 ], [ 88.4681746, 21.8302595 ], [ 88.4673292, 21.8284651 ], [ 88.467457, 21.8274341 ], [ 88.4663502, 21.8270574 ], [ 88.4655127, 21.8260351 ], [ 88.4644048, 21.8255301 ], [ 88.4632943, 21.8247677 ], [ 88.4624672, 21.8247751 ], [ 88.4597025, 21.8240272 ], [ 88.4591499, 21.8239038 ] ] ], [ [ [ 88.620586291322311, 21.796975 ], [ 88.6201, 21.79804 ], [ 88.61893, 21.80023 ], [ 88.61875, 21.80369 ], [ 88.61871, 21.80567 ], [ 88.61723, 21.8097 ], [ 88.61624, 21.81126 ], [ 88.61361, 21.81429 ], [ 88.61217, 21.8165 ], [ 88.61243, 21.81766 ], [ 88.6156, 21.81981 ], [ 88.61773, 21.82148 ], [ 88.61951, 21.82329 ], [ 88.62065, 21.82503 ], [ 88.62148, 21.82718 ], [ 88.62184, 21.82957 ], [ 88.62065, 21.83177 ], [ 88.61895, 21.8336 ], [ 88.6165, 21.83502 ], [ 88.61329, 21.83594 ], [ 88.61067, 21.83618 ], [ 88.60915, 21.83665 ], [ 88.60837, 21.83802 ], [ 88.60808, 21.84114 ], [ 88.60758, 21.84357 ], [ 88.6063, 21.84628 ], [ 88.60472, 21.84796 ], [ 88.60238, 21.84916 ], [ 88.59813, 21.85045 ], [ 88.59627, 21.85152 ], [ 88.59458, 21.85415 ], [ 88.59456, 21.85519 ], [ 88.59755, 21.86157 ], [ 88.60128, 21.86988 ], [ 88.60404, 21.87698 ], [ 88.60678, 21.88163 ], [ 88.61209, 21.88855 ], [ 88.61616, 21.89413 ], [ 88.62033, 21.89774 ], [ 88.62636, 21.89531 ], [ 88.62668, 21.88968 ], [ 88.62741, 21.88372 ], [ 88.62969, 21.88091 ], [ 88.63379, 21.87933 ], [ 88.63458, 21.87705 ], [ 88.63238, 21.8747 ], [ 88.63126, 21.87155 ], [ 88.63324, 21.86911 ], [ 88.63646, 21.86922 ], [ 88.63829, 21.87103 ], [ 88.64105, 21.8719 ], [ 88.64817, 21.87058 ], [ 88.65284, 21.86852 ], [ 88.6535506, 21.8664638 ], [ 88.6504607, 21.8597725 ], [ 88.6499457, 21.8502131 ], [ 88.6496024, 21.8436805 ], [ 88.64927, 21.83258 ], [ 88.64758, 21.82596 ], [ 88.64579, 21.8204 ], [ 88.64413, 21.81535 ], [ 88.64434, 21.81423 ], [ 88.64399, 21.81332 ], [ 88.64289, 21.81268 ], [ 88.64271, 21.81138 ], [ 88.64189, 21.8063 ], [ 88.64262, 21.80228 ], [ 88.642334363207539, 21.796775 ], [ 88.64218, 21.7938 ], [ 88.64238, 21.789 ], [ 88.64217, 21.78832 ], [ 88.64174, 21.78777 ], [ 88.63868, 21.78575 ], [ 88.6356, 21.78728 ], [ 88.6318, 21.78785 ], [ 88.62912, 21.78857 ], [ 88.62736, 21.78882 ], [ 88.62231, 21.7932 ], [ 88.620586291322311, 21.796975 ] ] ], [ [ [ 88.5447226, 21.9042047 ], [ 88.5460959, 21.9042047 ], [ 88.5474692, 21.9034083 ], [ 88.5491858, 21.9029305 ], [ 88.5509024, 21.9018156 ], [ 88.5527907, 21.9010193 ], [ 88.5550223, 21.8999044 ], [ 88.5589705, 21.8983116 ], [ 88.5624037, 21.8968781 ], [ 88.5641203, 21.8967188 ], [ 88.5654936, 21.8975152 ], [ 88.5670386, 21.8981523 ], [ 88.5687552, 21.8997451 ], [ 88.5708151, 21.9007007 ], [ 88.5715018, 21.8992673 ], [ 88.5723601, 21.8970374 ], [ 88.5740767, 21.8940111 ], [ 88.5756216, 21.8909847 ], [ 88.5761366, 21.8895512 ], [ 88.5763083, 21.887799 ], [ 88.5761366, 21.8858876 ], [ 88.5752783, 21.8825425 ], [ 88.57442, 21.8785601 ], [ 88.5735617, 21.8737811 ], [ 88.5728751, 21.8691612 ], [ 88.5730467, 21.8639039 ], [ 88.5727034, 21.8581685 ], [ 88.5723601, 21.8556194 ], [ 88.5711584, 21.8533888 ], [ 88.5696135, 21.8506803 ], [ 88.5680685, 21.8478123 ], [ 88.5673819, 21.8446257 ], [ 88.5663519, 21.8400049 ], [ 88.5651503, 21.8360213 ], [ 88.5639487, 21.832675 ], [ 88.5624037, 21.8298067 ], [ 88.5603438, 21.8298067 ], [ 88.5575972, 21.8286912 ], [ 88.5558806, 21.8270977 ], [ 88.5533057, 21.8288506 ], [ 88.552104, 21.8301254 ], [ 88.5512457, 21.8315596 ], [ 88.5510741, 21.8337904 ], [ 88.5524474, 21.8353839 ], [ 88.5560522, 21.8390488 ], [ 88.5577689, 21.8417576 ], [ 88.5591421, 21.8455817 ], [ 88.5591421, 21.8492463 ], [ 88.5591421, 21.8529109 ], [ 88.5582838, 21.856416 ], [ 88.5567389, 21.8588058 ], [ 88.5548506, 21.8627887 ], [ 88.553649, 21.8654971 ], [ 88.5527907, 21.868046 ], [ 88.5524474, 21.8710729 ], [ 88.5524474, 21.8734625 ], [ 88.553134, 21.8761706 ], [ 88.5548506, 21.8793566 ], [ 88.5524474, 21.8766485 ], [ 88.551589, 21.8736218 ], [ 88.5514174, 21.8701171 ], [ 88.5522757, 21.8669309 ], [ 88.5533057, 21.8637446 ], [ 88.5553656, 21.8600804 ], [ 88.5574255, 21.856416 ], [ 88.5582838, 21.8533888 ], [ 88.5582838, 21.850043 ], [ 88.5579405, 21.845263 ], [ 88.5563956, 21.8412796 ], [ 88.5545073, 21.8390488 ], [ 88.5517607, 21.8360213 ], [ 88.5503874, 21.8345872 ], [ 88.5502158, 21.833153 ], [ 88.5502158, 21.8310815 ], [ 88.5510741, 21.8293286 ], [ 88.5527907, 21.8269383 ], [ 88.553649, 21.8247073 ], [ 88.554679, 21.822317 ], [ 88.5543356, 21.8191297 ], [ 88.5527907, 21.8168986 ], [ 88.5510741, 21.817058 ], [ 88.5498724, 21.8178548 ], [ 88.5484991, 21.8183329 ], [ 88.5476408, 21.8204046 ], [ 88.5467825, 21.8224763 ], [ 88.5455809, 21.8258228 ], [ 88.5445509, 21.8280538 ], [ 88.5431776, 21.8301254 ], [ 88.540946, 21.8312409 ], [ 88.5390578, 21.8317189 ], [ 88.5373412, 21.8336311 ], [ 88.5347662, 21.8339498 ], [ 88.5333929, 21.8355432 ], [ 88.5332213, 21.8396862 ], [ 88.5327063, 21.8420763 ], [ 88.531848, 21.844785 ], [ 88.5306464, 21.847653 ], [ 88.5306464, 21.8489276 ], [ 88.5327063, 21.8506803 ], [ 88.5352812, 21.8514769 ], [ 88.5375128, 21.8535482 ], [ 88.5394011, 21.8546634 ], [ 88.5407744, 21.855938 ], [ 88.5418043, 21.8572126 ], [ 88.5438643, 21.8575312 ], [ 88.543521, 21.8610363 ], [ 88.5433493, 21.863426 ], [ 88.543006, 21.8653378 ], [ 88.5418043, 21.8678867 ], [ 88.541461, 21.8693205 ], [ 88.5426627, 21.8712322 ], [ 88.5459242, 21.8734625 ], [ 88.5479842, 21.8753741 ], [ 88.5491858, 21.8771264 ], [ 88.5503874, 21.879038 ], [ 88.5502158, 21.8815867 ], [ 88.5503874, 21.8842947 ], [ 88.5495291, 21.8871619 ], [ 88.5493574, 21.8906662 ], [ 88.5486708, 21.8928961 ], [ 88.5464392, 21.8954446 ], [ 88.5438643, 21.8970374 ], [ 88.5407744, 21.8992673 ], [ 88.5411177, 21.9005415 ], [ 88.5416327, 21.9024527 ], [ 88.5423193, 21.9032491 ], [ 88.5447226, 21.9042047 ] ] ], [ [ [ 88.9697203, 21.8907571 ], [ 88.9741835, 21.8918721 ], [ 88.9812216, 21.8925092 ], [ 88.9820799, 21.8926685 ], [ 88.9863715, 21.8902792 ], [ 88.9934096, 21.8869342 ], [ 89.0009627, 21.8829519 ], [ 89.0085158, 21.8791289 ], [ 89.0157256, 21.8751464 ], [ 89.0239653, 21.8695707 ], [ 89.0267119, 21.8671811 ], [ 89.0292868, 21.8649507 ], [ 89.0304885, 21.8622424 ], [ 89.0304885, 21.8603306 ], [ 89.0303168, 21.8561883 ], [ 89.0292868, 21.8537984 ], [ 89.0286002, 21.8507712 ], [ 89.0263686, 21.8493372 ], [ 89.0248236, 21.8493372 ], [ 89.0153823, 21.8499746 ], [ 89.0128073, 21.8507712 ], [ 89.0095458, 21.8526831 ], [ 89.0073142, 21.854595 ], [ 89.0059409, 21.8557103 ], [ 89.0055976, 21.8581001 ], [ 89.0054259, 21.8606492 ], [ 89.0050826, 21.863039 ], [ 89.0035376, 21.8651101 ], [ 89.001821, 21.8665439 ], [ 88.9994177, 21.8690928 ], [ 88.9978728, 21.8708452 ], [ 88.9963278, 21.8713231 ], [ 88.9947829, 21.870208 ], [ 88.9935813, 21.8678183 ], [ 88.991178, 21.867659 ], [ 88.9898047, 21.8687742 ], [ 88.9879164, 21.8698893 ], [ 88.9886031, 21.8687742 ], [ 88.9899764, 21.8671811 ], [ 88.9915213, 21.8663845 ], [ 88.9925513, 21.8667032 ], [ 88.9951262, 21.8679776 ], [ 88.9956412, 21.8694114 ], [ 88.9970145, 21.86973 ], [ 88.9980445, 21.8679776 ], [ 88.9999327, 21.8663845 ], [ 89.0030226, 21.8639949 ], [ 89.0031943, 21.8620831 ], [ 89.0031943, 21.8598526 ], [ 89.0035376, 21.8581001 ], [ 89.0042243, 21.8561883 ], [ 89.0064559, 21.8534798 ], [ 89.011434, 21.8499746 ], [ 89.0141806, 21.8485406 ], [ 89.0169272, 21.8482219 ], [ 89.0198454, 21.8480626 ], [ 89.0227637, 21.8477439 ], [ 89.025167, 21.8467879 ], [ 89.0277419, 21.8455133 ], [ 89.0298018, 21.8432826 ], [ 89.0296301, 21.8334033 ], [ 89.0287718, 21.8303757 ], [ 89.0232787, 21.8219298 ], [ 89.0203604, 21.8182645 ], [ 89.0188155, 21.8165114 ], [ 89.0164122, 21.8163521 ], [ 89.0143523, 21.8171489 ], [ 89.0146956, 21.8161927 ], [ 89.0138373, 21.8147584 ], [ 89.0097174, 21.8131647 ], [ 89.0054259, 21.8126866 ], [ 89.001821, 21.8133241 ], [ 88.9985594, 21.8147584 ], [ 88.9987311, 21.8165114 ], [ 88.9970145, 21.8206549 ], [ 88.9959845, 21.8220892 ], [ 88.9903197, 21.825117 ], [ 88.9874014, 21.8252763 ], [ 88.9861998, 21.8244796 ], [ 88.9848265, 21.8241608 ], [ 88.9844832, 21.8254357 ], [ 88.9846549, 21.8265512 ], [ 88.9856848, 21.827826 ], [ 88.9872298, 21.8297383 ], [ 88.9892897, 21.8327659 ], [ 88.989633, 21.8345188 ], [ 88.9884314, 21.8357935 ], [ 88.9798483, 21.8348374 ], [ 88.9793334, 21.8335627 ], [ 88.9781317, 21.8322879 ], [ 88.9769301, 21.8340407 ], [ 88.9759001, 21.8361122 ], [ 88.9745268, 21.8370683 ], [ 88.9740119, 21.8391397 ], [ 88.9729819, 21.8405738 ], [ 88.9740119, 21.8423265 ], [ 88.9740119, 21.8434419 ], [ 88.9740119, 21.8450353 ], [ 88.9746985, 21.8466286 ], [ 88.9733252, 21.8466286 ], [ 88.9724669, 21.8453539 ], [ 88.9712653, 21.8436012 ], [ 88.9702353, 21.8413705 ], [ 88.9697203, 21.8380243 ], [ 88.9697203, 21.8356342 ], [ 88.968862, 21.8338814 ], [ 88.9676604, 21.8322879 ], [ 88.9661154, 21.830057 ], [ 88.9647421, 21.8276667 ], [ 88.9618239, 21.8260731 ], [ 88.9573607, 21.8263918 ], [ 88.9547858, 21.8302163 ], [ 88.9534125, 21.8319692 ], [ 88.9515242, 21.8356342 ], [ 88.9510092, 21.8386617 ], [ 88.9515242, 21.8410518 ], [ 88.9544425, 21.8450353 ], [ 88.9561591, 21.8474253 ], [ 88.9580474, 21.8491779 ], [ 88.9601073, 21.8512492 ], [ 88.9614806, 21.8531611 ], [ 88.9628539, 21.8558696 ], [ 88.9657721, 21.8585781 ], [ 88.9680037, 21.8606492 ], [ 88.9721236, 21.8622424 ], [ 88.9764151, 21.8638355 ], [ 88.97899, 21.865588 ], [ 88.98002, 21.8673404 ], [ 88.980535, 21.8687742 ], [ 88.9798483, 21.870208 ], [ 88.9784751, 21.8725975 ], [ 88.9767584, 21.8746685 ], [ 88.9755568, 21.8765801 ], [ 88.9750418, 21.8784917 ], [ 88.9697203, 21.8907571 ] ] ], [ [ [ 88.7175472, 21.9053002 ], [ 88.7187488, 21.906415 ], [ 88.7196072, 21.9053002 ], [ 88.7209804, 21.9037075 ], [ 88.7221821, 21.9019555 ], [ 88.724242, 21.9003628 ], [ 88.7259586, 21.8990886 ], [ 88.7283619, 21.8982922 ], [ 88.7316234, 21.8978144 ], [ 88.7350567, 21.8978144 ], [ 88.7372883, 21.8979737 ], [ 88.7395199, 21.8986108 ], [ 88.7419231, 21.8986108 ], [ 88.7436397, 21.8979737 ], [ 88.7482746, 21.8959031 ], [ 88.7494762, 21.8947881 ], [ 88.7494762, 21.8933546 ], [ 88.7493046, 21.8917618 ], [ 88.7489612, 21.8901689 ], [ 88.7491329, 21.8885761 ], [ 88.7499912, 21.8873018 ], [ 88.7518795, 21.8865053 ], [ 88.7547977, 21.8857089 ], [ 88.7559994, 21.885231 ], [ 88.7568577, 21.8845939 ], [ 88.7570293, 21.8830009 ], [ 88.756171, 21.8817266 ], [ 88.7559994, 21.8804522 ], [ 88.7565143, 21.8793372 ], [ 88.7575443, 21.8783814 ], [ 88.7599476, 21.8779035 ], [ 88.7633808, 21.8766291 ], [ 88.767329, 21.8766291 ], [ 88.7692173, 21.8769477 ], [ 88.7709339, 21.8761512 ], [ 88.7719639, 21.875514 ], [ 88.7728222, 21.8731245 ], [ 88.7741955, 21.8704163 ], [ 88.7752254, 21.8693011 ], [ 88.7748821, 21.867708 ], [ 88.7747105, 21.8661149 ], [ 88.7736805, 21.8659556 ], [ 88.7716206, 21.8651591 ], [ 88.7700756, 21.8649997 ], [ 88.7681873, 21.865637 ], [ 88.7661274, 21.8662742 ], [ 88.7632091, 21.8662742 ], [ 88.7650974, 21.8659556 ], [ 88.767329, 21.8651591 ], [ 88.7697323, 21.8642032 ], [ 88.7716206, 21.8643625 ], [ 88.7731655, 21.8648404 ], [ 88.7747105, 21.8648404 ], [ 88.7755688, 21.8642032 ], [ 88.7762554, 21.8629287 ], [ 88.7783153, 21.8613355 ], [ 88.7802036, 21.8606982 ], [ 88.7803753, 21.8594237 ], [ 88.780032, 21.8584678 ], [ 88.7783153, 21.8579898 ], [ 88.7757404, 21.8571932 ], [ 88.7733372, 21.8563966 ], [ 88.7714489, 21.8554407 ], [ 88.7704189, 21.8538474 ], [ 88.7692173, 21.8536881 ], [ 88.7675007, 21.8540067 ], [ 88.7647541, 21.8562373 ], [ 88.7620075, 21.8586271 ], [ 88.7599476, 21.8592644 ], [ 88.7585743, 21.8589457 ], [ 88.7575443, 21.8575118 ], [ 88.7558277, 21.8556 ], [ 88.7546261, 21.8541661 ], [ 88.7535961, 21.8530508 ], [ 88.7520512, 21.8525728 ], [ 88.7505062, 21.8543254 ], [ 88.7484463, 21.8573525 ], [ 88.7456997, 21.859583 ], [ 88.7427814, 21.8614948 ], [ 88.7384899, 21.863088 ], [ 88.7352283, 21.8643625 ], [ 88.7328251, 21.8649997 ], [ 88.7309368, 21.8649997 ], [ 88.7305935, 21.8669115 ], [ 88.7305935, 21.8694604 ], [ 88.7305935, 21.8731245 ], [ 88.7297352, 21.8707349 ], [ 88.7295635, 21.8683453 ], [ 88.7295635, 21.8657963 ], [ 88.7292202, 21.8627693 ], [ 88.7287052, 21.8599016 ], [ 88.7269886, 21.8587864 ], [ 88.7256153, 21.8586271 ], [ 88.7223537, 21.8576712 ], [ 88.7194355, 21.8568746 ], [ 88.7163456, 21.8557593 ], [ 88.7139423, 21.8544847 ], [ 88.7115391, 21.8543254 ], [ 88.7093075, 21.8557593 ], [ 88.7065609, 21.8570339 ], [ 88.7043293, 21.8573525 ], [ 88.7026127, 21.8565559 ], [ 88.701411, 21.8556 ], [ 88.7008961, 21.8548034 ], [ 88.7002094, 21.8532101 ], [ 88.6995228, 21.8509795 ], [ 88.6979778, 21.8489082 ], [ 88.6990078, 21.8525728 ], [ 88.7003811, 21.8557593 ], [ 88.6998661, 21.8568746 ], [ 88.6988361, 21.8586271 ], [ 88.6998661, 21.860061 ], [ 88.7002094, 21.8616541 ], [ 88.7012394, 21.8622914 ], [ 88.7036426, 21.8657963 ], [ 88.704501, 21.8689825 ], [ 88.7065609, 21.8723279 ], [ 88.7069042, 21.873921 ], [ 88.7081058, 21.875514 ], [ 88.7101658, 21.8798151 ], [ 88.7113674, 21.8818859 ], [ 88.7134273, 21.8882575 ], [ 88.714629, 21.8898504 ], [ 88.7144573, 21.8923989 ], [ 88.7163456, 21.899885 ], [ 88.7172039, 21.9033889 ], [ 88.7175472, 21.9053002 ] ] ], [ [ [ 88.8906616, 21.9139264 ], [ 88.8906616, 21.911856 ], [ 88.8906616, 21.9102634 ], [ 88.8903183, 21.9083522 ], [ 88.8916916, 21.9069188 ], [ 88.8934082, 21.9062818 ], [ 88.8947815, 21.906441 ], [ 88.8968414, 21.9077152 ], [ 88.8982147, 21.9093078 ], [ 88.899588, 21.9093078 ], [ 88.900618, 21.9080337 ], [ 88.8999313, 21.9061225 ], [ 88.8982147, 21.9053262 ], [ 88.8951248, 21.9042113 ], [ 88.8939232, 21.9034149 ], [ 88.8928932, 21.9011851 ], [ 88.8932365, 21.9000702 ], [ 88.8954681, 21.8991146 ], [ 88.9100594, 21.893062 ], [ 88.910746, 21.8922656 ], [ 88.912291, 21.8903542 ], [ 88.9141792, 21.8887614 ], [ 88.9162392, 21.8882835 ], [ 88.9181274, 21.8890799 ], [ 88.9191574, 21.8903542 ], [ 88.9196724, 21.8922656 ], [ 88.9207024, 21.8964069 ], [ 88.9346069, 21.8967254 ], [ 88.9354652, 21.8959291 ], [ 88.9364952, 21.8951327 ], [ 88.9344353, 21.8858942 ], [ 88.9347786, 21.8825491 ], [ 88.9359802, 21.8812747 ], [ 88.9380402, 21.8806375 ], [ 88.9399284, 21.8806375 ], [ 88.9425034, 21.8809561 ], [ 88.9428467, 21.8822305 ], [ 88.9443916, 21.8831862 ], [ 88.9461082, 21.8839827 ], [ 88.9478249, 21.8850977 ], [ 88.9490265, 21.8846199 ], [ 88.9490265, 21.8836641 ], [ 88.9491981, 21.8822305 ], [ 88.9491981, 21.8806375 ], [ 88.9500565, 21.8768144 ], [ 88.9514297, 21.8745842 ], [ 88.9570946, 21.869805 ], [ 88.9570946, 21.8690085 ], [ 88.9557213, 21.868212 ], [ 88.9534897, 21.8669375 ], [ 88.9516014, 21.865663 ], [ 88.9502281, 21.8637512 ], [ 88.9502281, 21.8619988 ], [ 88.9505714, 21.8599276 ], [ 88.9519447, 21.8572192 ], [ 88.9526314, 21.8513242 ], [ 88.9519447, 21.8492529 ], [ 88.9505714, 21.8473409 ], [ 88.9476532, 21.8411268 ], [ 88.9466232, 21.8409675 ], [ 88.9459366, 21.8431982 ], [ 88.94422, 21.8454289 ], [ 88.9419884, 21.8484563 ], [ 88.9419884, 21.8495716 ], [ 88.9414734, 21.8522801 ], [ 88.9395851, 21.8537141 ], [ 88.9378685, 21.8541921 ], [ 88.9267105, 21.8524395 ], [ 88.9248222, 21.8529175 ], [ 88.9248222, 21.8540327 ], [ 88.9176125, 21.8608835 ], [ 88.9170975, 21.8672561 ], [ 88.9160675, 21.8710795 ], [ 88.9158958, 21.8731505 ], [ 88.9160675, 21.8764958 ], [ 88.9158958, 21.8779295 ], [ 88.9148659, 21.8792039 ], [ 88.9129776, 21.8803189 ], [ 88.910746, 21.8804782 ], [ 88.9067978, 21.8792039 ], [ 88.9059395, 21.8792039 ], [ 88.9050812, 21.8804782 ], [ 88.9049095, 21.884142 ], [ 88.9025063, 21.886372 ], [ 88.898558, 21.8871685 ], [ 88.8970131, 21.8882835 ], [ 88.8961548, 21.8895578 ], [ 88.8954681, 21.8943363 ], [ 88.8946098, 21.8952919 ], [ 88.8882584, 21.8960883 ], [ 88.8867134, 21.8972033 ], [ 88.8855118, 21.9000702 ], [ 88.8839668, 21.9003888 ], [ 88.8819069, 21.9008666 ], [ 88.8803619, 21.900548 ], [ 88.8795036, 21.8991146 ], [ 88.879332, 21.8976811 ], [ 88.8795036, 21.8960883 ], [ 88.8801903, 21.8946548 ], [ 88.8796753, 21.8933806 ], [ 88.8707489, 21.8981589 ], [ 88.8705772, 21.8995924 ], [ 88.8710922, 21.9008666 ], [ 88.8719505, 21.9007073 ], [ 88.8726372, 21.8992739 ], [ 88.8740105, 21.8979997 ], [ 88.8750404, 21.8976811 ], [ 88.876757, 21.8989553 ], [ 88.876757, 21.8995924 ], [ 88.876757, 21.9007073 ], [ 88.877272, 21.9018222 ], [ 88.878302, 21.9023 ], [ 88.8796753, 21.9026186 ], [ 88.8813919, 21.9019815 ], [ 88.8827652, 21.9015037 ], [ 88.8848251, 21.9015037 ], [ 88.8858551, 21.9029371 ], [ 88.8860268, 21.9043705 ], [ 88.8853401, 21.9070781 ], [ 88.8856834, 21.9089893 ], [ 88.8863701, 21.9110597 ], [ 88.8877434, 21.9139264 ], [ 88.8906616, 21.9139264 ] ] ], [ [ [ 88.8202805, 21.9276219 ], [ 88.8219971, 21.9282589 ], [ 88.823027, 21.9277811 ], [ 88.8264603, 21.9255517 ], [ 88.8293785, 21.9230038 ], [ 88.8353867, 21.9185448 ], [ 88.8482613, 21.9115375 ], [ 88.8506645, 21.9107412 ], [ 88.8546127, 21.9105819 ], [ 88.8590759, 21.9107412 ], [ 88.8621658, 21.911856 ], [ 88.866114, 21.9128115 ], [ 88.8695473, 21.9147226 ], [ 88.8717789, 21.9158374 ], [ 88.8734955, 21.916793 ], [ 88.8758987, 21.9171115 ], [ 88.8774437, 21.9166337 ], [ 88.8800186, 21.9158374 ], [ 88.8867134, 21.9144041 ], [ 88.8841385, 21.9081929 ], [ 88.8843101, 21.9066003 ], [ 88.8848251, 21.9038927 ], [ 88.8837952, 21.9024593 ], [ 88.8822502, 21.9026186 ], [ 88.8803619, 21.9034149 ], [ 88.8789886, 21.9037335 ], [ 88.8769287, 21.9026186 ], [ 88.8752121, 21.9008666 ], [ 88.8752121, 21.8994331 ], [ 88.8741821, 21.8989553 ], [ 88.8731522, 21.8995924 ], [ 88.8729805, 21.9008666 ], [ 88.8717789, 21.9023 ], [ 88.8704056, 21.9013444 ], [ 88.8697189, 21.9000702 ], [ 88.8695473, 21.8984775 ], [ 88.8700623, 21.8968847 ], [ 88.8781303, 21.8927435 ], [ 88.8796753, 21.8924249 ], [ 88.8812202, 21.8932213 ], [ 88.8813919, 21.8940177 ], [ 88.8812202, 21.8949734 ], [ 88.8812202, 21.8960883 ], [ 88.8812202, 21.8976811 ], [ 88.8810486, 21.8992739 ], [ 88.8827652, 21.8994331 ], [ 88.8848251, 21.898796 ], [ 88.8853401, 21.8979997 ], [ 88.8856834, 21.8965662 ], [ 88.8870567, 21.8952919 ], [ 88.888945, 21.8949734 ], [ 88.8925499, 21.8940177 ], [ 88.8940948, 21.8938584 ], [ 88.8944382, 21.891947 ], [ 88.8944382, 21.8897171 ], [ 88.8956398, 21.8876463 ], [ 88.8975281, 21.8868499 ], [ 88.900103, 21.8860535 ], [ 88.9023346, 21.8849384 ], [ 88.9035362, 21.8825491 ], [ 88.9040512, 21.8784074 ], [ 88.9057678, 21.8772923 ], [ 88.9083427, 21.8776109 ], [ 88.9100594, 21.8784074 ], [ 88.9116043, 21.8793632 ], [ 88.9129776, 21.8790446 ], [ 88.9143509, 21.8782481 ], [ 88.9140076, 21.8764958 ], [ 88.9140076, 21.8731505 ], [ 88.9148659, 21.8678933 ], [ 88.9157242, 21.8619988 ], [ 88.9148659, 21.8619988 ], [ 88.9148659, 21.8610429 ], [ 88.9162392, 21.8597683 ], [ 88.9195007, 21.8565819 ], [ 88.9205307, 21.85467 ], [ 88.9177841, 21.8540327 ], [ 88.9164108, 21.8548294 ], [ 88.9143509, 21.8548294 ], [ 88.9128059, 21.8540327 ], [ 88.9131493, 21.8505275 ], [ 88.9145225, 21.8494122 ], [ 88.9146942, 21.8455883 ], [ 88.9134926, 21.8463849 ], [ 88.9131493, 21.8473409 ], [ 88.9128059, 21.8482969 ], [ 88.9110893, 21.8495716 ], [ 88.9100594, 21.8492529 ], [ 88.909201, 21.8482969 ], [ 88.9062828, 21.8494122 ], [ 88.9037079, 21.8506869 ], [ 88.9016479, 21.8510055 ], [ 88.8994163, 21.8505275 ], [ 88.8978714, 21.8508462 ], [ 88.8947815, 21.8508462 ], [ 88.8916916, 21.8508462 ], [ 88.889975, 21.8506869 ], [ 88.8858551, 21.8487749 ], [ 88.8856834, 21.8473409 ], [ 88.8861984, 21.8454289 ], [ 88.8870567, 21.8446323 ], [ 88.8891167, 21.8403301 ], [ 88.8916916, 21.8368246 ], [ 88.8916916, 21.8358685 ], [ 88.8908333, 21.8349125 ], [ 88.8875717, 21.8331596 ], [ 88.8843101, 21.8318848 ], [ 88.8824219, 21.8302913 ], [ 88.8817352, 21.8315661 ], [ 88.8810486, 21.8334783 ], [ 88.8801903, 21.8357092 ], [ 88.8796753, 21.8395334 ], [ 88.879332, 21.8422422 ], [ 88.878302, 21.8455883 ], [ 88.878302, 21.8467036 ], [ 88.8786453, 21.8497309 ], [ 88.878817, 21.8519615 ], [ 88.8789886, 21.8532361 ], [ 88.8774437, 21.8541921 ], [ 88.8757271, 21.8543514 ], [ 88.8731522, 21.8543514 ], [ 88.8702339, 21.8540327 ], [ 88.8692039, 21.8540327 ], [ 88.8678307, 21.855148 ], [ 88.866629, 21.8557853 ], [ 88.8643974, 21.8557853 ], [ 88.8604492, 21.8561039 ], [ 88.8592476, 21.8567412 ], [ 88.858046, 21.8576972 ], [ 88.8573593, 21.859131 ], [ 88.858046, 21.8604056 ], [ 88.8595909, 21.8621581 ], [ 88.8609642, 21.8639105 ], [ 88.8637966, 21.8639902 ], [ 88.8664574, 21.8635123 ], [ 88.8677448, 21.8641495 ], [ 88.8692898, 21.8655037 ], [ 88.8688606, 21.865902 ], [ 88.8678307, 21.8671764 ], [ 88.8668865, 21.8682916 ], [ 88.8670582, 21.8703626 ], [ 88.8670582, 21.8729911 ], [ 88.8669723, 21.873947 ], [ 88.8664574, 21.873947 ], [ 88.866629, 21.8725132 ], [ 88.866629, 21.8701236 ], [ 88.8664574, 21.868212 ], [ 88.867659, 21.8666189 ], [ 88.868689, 21.8655037 ], [ 88.8673157, 21.8645478 ], [ 88.8662857, 21.8640699 ], [ 88.8638824, 21.8645478 ], [ 88.8613075, 21.8653444 ], [ 88.8583893, 21.8664595 ], [ 88.855471, 21.8683713 ], [ 88.8547844, 21.8699643 ], [ 88.8549561, 21.8723539 ], [ 88.8551277, 21.8758586 ], [ 88.8549561, 21.885257 ], [ 88.8540977, 21.8868499 ], [ 88.8534111, 21.8878056 ], [ 88.8540977, 21.8882835 ], [ 88.8551277, 21.8881242 ], [ 88.857016, 21.8878056 ], [ 88.8558144, 21.8890799 ], [ 88.8540977, 21.8897171 ], [ 88.8520378, 21.8906728 ], [ 88.8516945, 21.8917878 ], [ 88.8510078, 21.8943363 ], [ 88.8482613, 21.8979997 ], [ 88.8432831, 21.9029371 ], [ 88.8396782, 21.9061225 ], [ 88.83573, 21.90883 ], [ 88.8334984, 21.9102634 ], [ 88.8276619, 21.9121745 ], [ 88.825087, 21.9137671 ], [ 88.8238853, 21.9155189 ], [ 88.8223404, 21.9190225 ], [ 88.8213104, 21.9222075 ], [ 88.8206238, 21.9252332 ], [ 88.8202805, 21.9276219 ] ] ], [ [ [ 88.8922066, 21.9150412 ], [ 88.9007896, 21.9175892 ], [ 88.9050812, 21.9188633 ], [ 88.9081711, 21.9202965 ], [ 88.9100594, 21.9228445 ], [ 88.9121193, 21.9249147 ], [ 88.9138359, 21.9260295 ], [ 88.9162392, 21.9260295 ], [ 88.9181274, 21.925711 ], [ 88.9210457, 21.9249147 ], [ 88.9237923, 21.9234815 ], [ 88.9255089, 21.9217298 ], [ 88.9279121, 21.9196595 ], [ 88.9299721, 21.9179077 ], [ 88.9323753, 21.9158374 ], [ 88.9371819, 21.9134486 ], [ 88.9373535, 21.9121745 ], [ 88.9395851, 21.9120152 ], [ 88.9632744, 21.9023 ], [ 88.9703125, 21.8991146 ], [ 88.974604, 21.8964069 ], [ 88.9732307, 21.8956105 ], [ 88.9711708, 21.8951327 ], [ 88.9689392, 21.8944955 ], [ 88.9677376, 21.8938584 ], [ 88.9663643, 21.8924249 ], [ 88.9663643, 21.8903542 ], [ 88.9663643, 21.8881242 ], [ 88.9675659, 21.885257 ], [ 88.9684242, 21.8836641 ], [ 88.9701408, 21.8804782 ], [ 88.9716858, 21.8774516 ], [ 88.9728874, 21.8749028 ], [ 88.9742607, 21.8720353 ], [ 88.975634, 21.8701236 ], [ 88.976149, 21.8685306 ], [ 88.9775223, 21.8675747 ], [ 88.976149, 21.8669375 ], [ 88.9742607, 21.8663002 ], [ 88.9708275, 21.8658223 ], [ 88.9680809, 21.8650257 ], [ 88.9656776, 21.8639105 ], [ 88.9629311, 21.8616801 ], [ 88.9603561, 21.8583344 ], [ 88.9589828, 21.8559446 ], [ 88.9582962, 21.8543514 ], [ 88.9572662, 21.8545107 ], [ 88.9567512, 21.8535548 ], [ 88.9564079, 21.8522801 ], [ 88.9558929, 21.8549887 ], [ 88.9546913, 21.8557853 ], [ 88.9526314, 21.859609 ], [ 88.9522881, 21.8621581 ], [ 88.9526314, 21.8635919 ], [ 88.9545197, 21.8653444 ], [ 88.9565796, 21.8664595 ], [ 88.9581245, 21.8670968 ], [ 88.9591545, 21.8683713 ], [ 88.9591545, 21.8699643 ], [ 88.9586395, 21.8712388 ], [ 88.9570946, 21.8725132 ], [ 88.9540047, 21.8749028 ], [ 88.9526314, 21.8761772 ], [ 88.9516014, 21.8800003 ], [ 88.9516014, 21.8833455 ], [ 88.9509148, 21.8854163 ], [ 88.9490265, 21.886372 ], [ 88.9467949, 21.886372 ], [ 88.944735, 21.8847791 ], [ 88.9430183, 21.8839827 ], [ 88.9413017, 21.8823898 ], [ 88.9390701, 21.8817526 ], [ 88.9371819, 21.8823898 ], [ 88.9363235, 21.8836641 ], [ 88.9363235, 21.8855756 ], [ 88.9376968, 21.8948141 ], [ 88.9378685, 21.8964069 ], [ 88.9359802, 21.8973625 ], [ 88.9342636, 21.8978404 ], [ 88.9323753, 21.8976811 ], [ 88.921389, 21.8976811 ], [ 88.9201874, 21.8972033 ], [ 88.9193291, 21.8960883 ], [ 88.9184708, 21.8921063 ], [ 88.9176125, 21.8905135 ], [ 88.9162392, 21.8895578 ], [ 88.9153809, 21.8892392 ], [ 88.9140076, 21.8898764 ], [ 88.9128059, 21.8913099 ], [ 88.9116043, 21.8925842 ], [ 88.9105743, 21.894177 ], [ 88.8951248, 21.9003888 ], [ 88.8947815, 21.901663 ], [ 88.8952965, 21.9030964 ], [ 88.8966698, 21.9038927 ], [ 88.8982147, 21.9046891 ], [ 88.9002747, 21.9050076 ], [ 88.9013046, 21.9066003 ], [ 88.9013046, 21.9085115 ], [ 88.9002747, 21.9101041 ], [ 88.8987297, 21.9105819 ], [ 88.8970131, 21.9096263 ], [ 88.8958115, 21.9083522 ], [ 88.8940948, 21.9073966 ], [ 88.8922066, 21.9073966 ], [ 88.8916916, 21.9089893 ], [ 88.8916916, 21.9107412 ], [ 88.8916916, 21.9121745 ], [ 88.8918632, 21.9132893 ], [ 88.8922066, 21.9150412 ] ] ], [ [ [ 88.8154739, 21.8997517 ], [ 88.8168472, 21.899911 ], [ 88.8218254, 21.8989553 ], [ 88.8254303, 21.898796 ], [ 88.8283485, 21.8983182 ], [ 88.8302368, 21.8975218 ], [ 88.8324684, 21.8962476 ], [ 88.8347, 21.8946548 ], [ 88.8360733, 21.8932213 ], [ 88.8372749, 21.8921063 ], [ 88.8386482, 21.8898764 ], [ 88.8395065, 21.8882835 ], [ 88.8400215, 21.8860535 ], [ 88.8401932, 21.8836641 ], [ 88.8401932, 21.8819119 ], [ 88.8401932, 21.8803189 ], [ 88.8398499, 21.8785667 ], [ 88.8389915, 21.8768144 ], [ 88.8309235, 21.8648664 ], [ 88.8293785, 21.8647071 ], [ 88.8276619, 21.8650257 ], [ 88.8264603, 21.8659816 ], [ 88.8249153, 21.8688492 ], [ 88.824572, 21.8701236 ], [ 88.8237137, 21.8710795 ], [ 88.8218254, 21.8721946 ], [ 88.8195938, 21.871876 ], [ 88.8173622, 21.8715574 ], [ 88.8151306, 21.8709202 ], [ 88.8130707, 21.8704423 ], [ 88.8111824, 21.8693271 ], [ 88.8092941, 21.8685306 ], [ 88.8063759, 21.8672561 ], [ 88.8007111, 21.870283 ], [ 88.8008827, 21.871876 ], [ 88.8024277, 21.8763365 ], [ 88.8036293, 21.8782481 ], [ 88.8044876, 21.8792039 ], [ 88.8074059, 21.8809561 ], [ 88.8091225, 21.8823898 ], [ 88.8101524, 21.8850977 ], [ 88.8104958, 21.8900356 ], [ 88.8106674, 21.8932213 ], [ 88.8116974, 21.8954512 ], [ 88.813929, 21.8976811 ], [ 88.8154739, 21.8997517 ] ] ], [ [ [ 88.5460434, 21.9435856 ], [ 88.5468544, 21.9420333 ], [ 88.5474006, 21.9415134 ], [ 88.5479356, 21.9399639 ], [ 88.5482087, 21.9397039 ], [ 88.5482004, 21.9389316 ], [ 88.5487438, 21.9381543 ], [ 88.5492537, 21.9342883 ], [ 88.5483174, 21.9242577 ], [ 88.548585, 21.923483 ], [ 88.5485739, 21.9224533 ], [ 88.5496467, 21.9196117 ], [ 88.5495036, 21.9190982 ], [ 88.5500511, 21.9187064 ], [ 88.5508731, 21.9181838 ], [ 88.5514235, 21.9180503 ], [ 88.5514149, 21.9172781 ], [ 88.5527901, 21.9168785 ], [ 88.5533361, 21.9163586 ], [ 88.5549857, 21.9158283 ], [ 88.5552586, 21.9155682 ], [ 88.5569082, 21.9150377 ], [ 88.5571811, 21.9147778 ], [ 88.5588305, 21.9142473 ], [ 88.5591037, 21.9139872 ], [ 88.5604773, 21.9134593 ], [ 88.5607502, 21.9131995 ], [ 88.5623983, 21.9125406 ], [ 88.5623926, 21.912026 ], [ 88.5643178, 21.9114928 ], [ 88.5643123, 21.910978 ], [ 88.5654085, 21.9103236 ], [ 88.5662305, 21.9098009 ], [ 88.5667806, 21.9096674 ], [ 88.5670481, 21.9088925 ], [ 88.5675998, 21.9088872 ], [ 88.567867, 21.9081125 ], [ 88.5684187, 21.9081072 ], [ 88.5693724, 21.9070685 ], [ 88.5696425, 21.906551 ], [ 88.5704588, 21.9055136 ], [ 88.5705746, 21.9034531 ], [ 88.5700229, 21.9034584 ], [ 88.5695975, 21.9024329 ], [ 88.5689014, 21.9017954 ], [ 88.5683469, 21.9015433 ], [ 88.5672324, 21.9005244 ], [ 88.5661248, 21.9001492 ], [ 88.565981, 21.8996357 ], [ 88.5655635, 21.8992532 ], [ 88.5636243, 21.8984992 ], [ 88.5625212, 21.8985098 ], [ 88.5603202, 21.8990454 ], [ 88.5559296, 21.9011464 ], [ 88.5553836, 21.9016663 ], [ 88.5496193, 21.9042949 ], [ 88.5485189, 21.9045627 ], [ 88.5476969, 21.9050853 ], [ 88.5463206, 21.9053558 ], [ 88.5460475, 21.9056157 ], [ 88.5435652, 21.9056389 ], [ 88.5430107, 21.9053868 ], [ 88.542459, 21.9053919 ], [ 88.5420407, 21.9050101 ], [ 88.541342, 21.9041154 ], [ 88.5400933, 21.9034839 ], [ 88.5395278, 21.9022021 ], [ 88.5392299, 21.9001454 ], [ 88.5397705, 21.8991108 ], [ 88.539895, 21.8978224 ], [ 88.5420808, 21.895871 ], [ 88.5434543, 21.8953431 ], [ 88.5445463, 21.8943032 ], [ 88.5450967, 21.8941698 ], [ 88.5453641, 21.8933951 ], [ 88.5459156, 21.8933898 ], [ 88.5457523, 21.8910746 ], [ 88.5462845, 21.8892677 ], [ 88.5465297, 21.8864339 ], [ 88.5470591, 21.8843694 ], [ 88.547307, 21.881793 ], [ 88.5467444, 21.8807686 ], [ 88.546452, 21.8792267 ], [ 88.5458922, 21.8784598 ], [ 88.5453324, 21.8776928 ], [ 88.5449122, 21.8770526 ], [ 88.5440793, 21.8765456 ], [ 88.5435278, 21.8765509 ], [ 88.542135, 21.8752768 ], [ 88.5407535, 21.8750322 ], [ 88.5394996, 21.873886 ], [ 88.5375389, 21.8710727 ], [ 88.5374921, 21.866697 ], [ 88.5380354, 21.8659196 ], [ 88.5385813, 21.8653997 ], [ 88.5385732, 21.8646274 ], [ 88.5388461, 21.8643675 ], [ 88.5388406, 21.8638527 ], [ 88.5391109, 21.8633354 ], [ 88.538813, 21.8612787 ], [ 88.5376743, 21.8579429 ], [ 88.5367, 21.8570506 ], [ 88.5347588, 21.8560389 ], [ 88.5342074, 21.8560442 ], [ 88.5328232, 21.8555422 ], [ 88.5322717, 21.8555473 ], [ 88.5314392, 21.8550402 ], [ 88.5300549, 21.8545382 ], [ 88.5290799, 21.8536467 ], [ 88.528937, 21.8531332 ], [ 88.5283855, 21.8531383 ], [ 88.52838, 21.8526235 ], [ 88.5275543, 21.8527593 ], [ 88.5264596, 21.8535418 ], [ 88.5245308, 21.8536888 ], [ 88.5245363, 21.8542037 ], [ 88.5237106, 21.8543396 ], [ 88.5234375, 21.8545994 ], [ 88.5228875, 21.8547336 ], [ 88.5227544, 21.8552498 ], [ 88.5220725, 21.8558992 ], [ 88.5209737, 21.8562959 ], [ 88.5208408, 21.8568121 ], [ 88.5194838, 21.8588839 ], [ 88.5192245, 21.8604309 ], [ 88.5189514, 21.8606907 ], [ 88.5188194, 21.8612069 ], [ 88.5177206, 21.8616027 ], [ 88.51635, 21.8623876 ], [ 88.516077, 21.8626474 ], [ 88.5149782, 21.8630442 ], [ 88.5148451, 21.8635601 ], [ 88.5138873, 21.8642122 ], [ 88.5128188, 21.8643716 ], [ 88.5117841, 21.8651306 ], [ 88.5083953, 21.8664511 ], [ 88.5084008, 21.8669659 ], [ 88.5078506, 21.8670992 ], [ 88.5070287, 21.8676215 ], [ 88.5062095, 21.8684014 ], [ 88.5048348, 21.8688003 ], [ 88.5048429, 21.8695726 ], [ 88.5042927, 21.8697058 ], [ 88.5034709, 21.8702282 ], [ 88.5029247, 21.8707482 ], [ 88.5010079, 21.8720527 ], [ 88.4999102, 21.8725775 ], [ 88.4990937, 21.8736147 ], [ 88.4984078, 21.8740075 ], [ 88.4975993, 21.8758168 ], [ 88.4966439, 21.8767261 ], [ 88.4960937, 21.8768602 ], [ 88.4962768, 21.8812348 ], [ 88.4960117, 21.882267 ], [ 88.4960493, 21.8858704 ], [ 88.496758, 21.8876661 ], [ 88.4973097, 21.887661 ], [ 88.4980149, 21.8891991 ], [ 88.4988529, 21.8902212 ], [ 88.5005239, 21.8917506 ], [ 88.5006677, 21.8922641 ], [ 88.5014978, 21.892514 ], [ 88.5019164, 21.893025 ], [ 88.5023415, 21.8940507 ], [ 88.5031755, 21.8946863 ], [ 88.5037285, 21.8948103 ], [ 88.5038741, 21.8955813 ], [ 88.5044311, 21.8960912 ], [ 88.5048642, 21.8978891 ], [ 88.5054157, 21.897884 ], [ 88.5068489, 21.9030194 ], [ 88.5074006, 21.9030144 ], [ 88.5076873, 21.9040415 ], [ 88.5082404, 21.9041647 ], [ 88.5085189, 21.9044195 ], [ 88.509072, 21.9045436 ], [ 88.5093558, 21.9053133 ], [ 88.5099115, 21.9056939 ], [ 88.5107444, 21.906201 ], [ 88.5135191, 21.9077202 ], [ 88.5149037, 21.9082221 ], [ 88.5151823, 21.9084771 ], [ 88.5165696, 21.9092365 ], [ 88.51879, 21.9105032 ], [ 88.5190657, 21.9105005 ], [ 88.5196119, 21.9099808 ], [ 88.520714, 21.9098423 ], [ 88.5211326, 21.9103533 ], [ 88.5218391, 21.9118912 ], [ 88.5223908, 21.9118861 ], [ 88.5236454, 21.9131617 ], [ 88.5246386, 21.9157266 ], [ 88.5251903, 21.9157215 ], [ 88.5253305, 21.9159776 ], [ 88.5253443, 21.9172647 ], [ 88.5250712, 21.9175245 ], [ 88.5248036, 21.9182993 ], [ 88.5247538, 21.9265372 ], [ 88.5253055, 21.9265321 ], [ 88.5251863, 21.9283352 ], [ 88.5254703, 21.9291048 ], [ 88.5255032, 21.9321936 ], [ 88.5241732, 21.9368396 ], [ 88.5241816, 21.9376116 ], [ 88.5233675, 21.9389063 ], [ 88.5231054, 21.9401958 ], [ 88.5225618, 21.9409732 ], [ 88.5225673, 21.941488 ], [ 88.5222968, 21.9420053 ], [ 88.5214773, 21.9427851 ], [ 88.5212069, 21.9433024 ], [ 88.5209202, 21.9440189 ], [ 88.5200525, 21.944874 ], [ 88.5196403, 21.9452462 ], [ 88.5190763, 21.9456386 ], [ 88.5183388, 21.9461416 ], [ 88.5174277, 21.9467955 ], [ 88.5157899, 21.9477311 ], [ 88.5139244, 21.948717 ], [ 88.512894, 21.9492904 ], [ 88.5120328, 21.9498228 ], [ 88.5112362, 21.9503628 ], [ 88.5101494, 21.9509549 ], [ 88.5089408, 21.9515384 ], [ 88.5081627, 21.9519039 ], [ 88.5077828, 21.9524361 ], [ 88.507103, 21.9533429 ], [ 88.5065539, 21.9536052 ], [ 88.5049145, 21.9551648 ], [ 88.5029873, 21.9555691 ], [ 88.5025836, 21.9566024 ], [ 88.5021742, 21.9569919 ], [ 88.5005214, 21.9572644 ], [ 88.499975, 21.9577842 ], [ 88.4994244, 21.9579184 ], [ 88.4992914, 21.9584345 ], [ 88.4987476, 21.9592117 ], [ 88.4973815, 21.9605113 ], [ 88.4968486, 21.9623181 ], [ 88.496302, 21.9628379 ], [ 88.4960395, 21.9641274 ], [ 88.4963695, 21.9692729 ], [ 88.4967945, 21.9702986 ], [ 88.4981865, 21.971444 ], [ 88.4987399, 21.9715681 ], [ 88.4991587, 21.972079 ], [ 88.4994934, 21.973532 ], [ 88.4993133, 21.9736222 ], [ 88.499316, 21.9738796 ], [ 88.4995919, 21.9738772 ], [ 88.4996841, 21.9737065 ], [ 88.5001398, 21.9734856 ], [ 88.5012424, 21.9733472 ], [ 88.5041693, 21.976152 ], [ 88.5043131, 21.9766655 ], [ 88.5068064, 21.9775432 ], [ 88.5076397, 21.9780503 ], [ 88.5081971, 21.97856 ], [ 88.5093063, 21.9790646 ], [ 88.5098639, 21.9795744 ], [ 88.511249, 21.9800765 ], [ 88.5126425, 21.9813508 ], [ 88.5134732, 21.9816005 ], [ 88.5143067, 21.9821077 ], [ 88.514864, 21.9826175 ], [ 88.5162521, 21.9833769 ], [ 88.5184696, 21.9842578 ], [ 88.5186098, 21.9845139 ], [ 88.5186688, 21.9859694 ], [ 88.5179436, 21.9867076 ], [ 88.5173931, 21.986842 ], [ 88.5173957, 21.9870992 ], [ 88.5182292, 21.9876065 ], [ 88.5188595, 21.9861436 ], [ 88.5190408, 21.9860544 ], [ 88.5190353, 21.9855396 ], [ 88.5195858, 21.9854054 ], [ 88.5201322, 21.9848855 ], [ 88.5206843, 21.9848804 ], [ 88.5217935, 21.9853848 ], [ 88.5226216, 21.9853772 ], [ 88.5239933, 21.9845921 ], [ 88.526466, 21.9835396 ], [ 88.5272857, 21.9827596 ], [ 88.5294853, 21.9819669 ], [ 88.5303076, 21.9814443 ], [ 88.5319621, 21.9813007 ], [ 88.5322297, 21.980526 ], [ 88.5336055, 21.9801264 ], [ 88.5338786, 21.9798666 ], [ 88.5352558, 21.9795963 ], [ 88.5366272, 21.9788112 ], [ 88.5380043, 21.9785407 ], [ 88.5388349, 21.9787904 ], [ 88.5391137, 21.9790452 ], [ 88.5410538, 21.9797993 ], [ 88.5413326, 21.9800541 ], [ 88.5418859, 21.980178 ], [ 88.5418914, 21.9806929 ], [ 88.5424435, 21.9806876 ], [ 88.544549, 21.9840144 ], [ 88.5456807, 21.9865778 ], [ 88.5458304, 21.9876061 ], [ 88.5463823, 21.9876008 ], [ 88.546531, 21.9886292 ], [ 88.547384, 21.9909378 ], [ 88.5476627, 21.9911926 ], [ 88.5488003, 21.9942708 ], [ 88.5490791, 21.9945256 ], [ 88.549513, 21.9963236 ], [ 88.5500651, 21.9963183 ], [ 88.5500848, 21.99812 ], [ 88.5506366, 21.9981149 ], [ 88.5506535, 21.9996592 ], [ 88.5509281, 21.9995275 ], [ 88.5512027, 21.9993965 ], [ 88.5521878, 22.0011892 ], [ 88.5535818, 22.002463 ], [ 88.5540076, 22.0034887 ], [ 88.5551188, 22.0041211 ], [ 88.5578787, 22.004095 ], [ 88.558428, 22.0038323 ], [ 88.5595208, 22.0027923 ], [ 88.5622639, 22.0012217 ], [ 88.56639, 21.9998953 ], [ 88.5691443, 21.9993542 ], [ 88.5694174, 21.9990941 ], [ 88.5727238, 21.9985475 ], [ 88.572997, 21.9982875 ], [ 88.5768468, 21.9969635 ], [ 88.5771199, 21.9967034 ], [ 88.5784913, 21.995918 ], [ 88.5795911, 21.9955218 ], [ 88.5816376, 21.9934426 ], [ 88.5821811, 21.9926653 ], [ 88.5832594, 21.9903381 ], [ 88.5836423, 21.9875027 ], [ 88.5833663, 21.9875056 ], [ 88.5833607, 21.9869907 ], [ 88.5829434, 21.9867373 ], [ 88.5826474, 21.9849382 ], [ 88.5816776, 21.9845611 ], [ 88.5797345, 21.9835502 ], [ 88.578761, 21.9829165 ], [ 88.5786177, 21.9824029 ], [ 88.5780658, 21.9824082 ], [ 88.5779216, 21.9818947 ], [ 88.5777827, 21.981767 ], [ 88.5772293, 21.9816441 ], [ 88.5765219, 21.9801064 ], [ 88.5762431, 21.9798516 ], [ 88.5753955, 21.9780578 ], [ 88.5750541, 21.9721406 ], [ 88.575808, 21.9654406 ], [ 88.5760755, 21.9646657 ], [ 88.5760641, 21.9636362 ], [ 88.5763316, 21.9628613 ], [ 88.5763061, 21.9605449 ], [ 88.5757485, 21.9600354 ], [ 88.5756052, 21.9595219 ], [ 88.572839, 21.9589044 ], [ 88.5684242, 21.9589467 ], [ 88.5678751, 21.9592092 ], [ 88.5671919, 21.9598598 ], [ 88.5666514, 21.9608947 ], [ 88.565696, 21.9618042 ], [ 88.5651469, 21.9620669 ], [ 88.5639175, 21.9632374 ], [ 88.5636472, 21.9637549 ], [ 88.5628279, 21.9645349 ], [ 88.5617438, 21.9663472 ], [ 88.5617495, 21.966862 ], [ 88.5609441, 21.9689289 ], [ 88.5601275, 21.9699664 ], [ 88.5598629, 21.9709985 ], [ 88.5587703, 21.9720386 ], [ 88.5586383, 21.9725547 ], [ 88.558088, 21.9726882 ], [ 88.5578147, 21.9729482 ], [ 88.5558914, 21.9737386 ], [ 88.5545145, 21.9740091 ], [ 88.5498205, 21.9737961 ], [ 88.5492658, 21.973544 ], [ 88.5481621, 21.9735543 ], [ 88.5473314, 21.9733049 ], [ 88.5465034, 21.9733126 ], [ 88.5445635, 21.9725585 ], [ 88.5433087, 21.9714124 ], [ 88.5421853, 21.9696211 ], [ 88.5418956, 21.9683368 ], [ 88.5416168, 21.9680819 ], [ 88.5413242, 21.9665402 ], [ 88.5410455, 21.9662854 ], [ 88.5407113, 21.9608827 ], [ 88.5409483, 21.9572765 ], [ 88.5412159, 21.9565018 ], [ 88.541202, 21.9552149 ], [ 88.5414586, 21.9534105 ], [ 88.5419908, 21.9516037 ], [ 88.5425261, 21.9500541 ], [ 88.5433316, 21.9479872 ], [ 88.5441483, 21.9469498 ], [ 88.5444129, 21.9459176 ], [ 88.5455055, 21.9448778 ], [ 88.5454998, 21.9443629 ], [ 88.5457729, 21.9441029 ], [ 88.5460434, 21.9435856 ] ] ], [ [ [ 88.634, 21.87076 ], [ 88.63351, 21.87124 ], [ 88.63333, 21.87236 ], [ 88.63407, 21.87362 ], [ 88.63593, 21.87554 ], [ 88.63648, 21.87702 ], [ 88.63612, 21.87896 ], [ 88.6352, 21.88027 ], [ 88.63219, 21.88182 ], [ 88.63024, 21.88295 ], [ 88.62924, 21.88456 ], [ 88.62874, 21.88899 ], [ 88.62853, 21.89405 ], [ 88.62783, 21.89639 ], [ 88.62699, 21.8974 ], [ 88.62452, 21.89942 ], [ 88.62347, 21.90096 ], [ 88.62343, 21.90158 ], [ 88.62667, 21.90439 ], [ 88.62971, 21.90749 ], [ 88.63213, 21.91082 ], [ 88.63418, 21.91526 ], [ 88.63622, 21.92027 ], [ 88.6382, 21.9215 ], [ 88.64017, 21.92133 ], [ 88.64335, 21.91939 ], [ 88.64805, 21.91702 ], [ 88.65119, 21.91649 ], [ 88.65293, 21.91671 ], [ 88.65434, 21.91632 ], [ 88.65876, 21.91467 ], [ 88.66235, 21.91363 ], [ 88.66371, 21.91338 ], [ 88.6641, 21.9133 ], [ 88.66635, 21.91313 ], [ 88.66718, 21.91279 ], [ 88.66692, 21.91128 ], [ 88.666, 21.90814 ], [ 88.66511, 21.90562 ], [ 88.664, 21.90433 ], [ 88.66324, 21.90311 ], [ 88.66182, 21.90233 ], [ 88.661, 21.90112 ], [ 88.65958, 21.89849 ], [ 88.65889, 21.89766 ], [ 88.6587, 21.89661 ], [ 88.65864, 21.89549 ], [ 88.65789, 21.89374 ], [ 88.65701, 21.89134 ], [ 88.65645, 21.88877 ], [ 88.65545, 21.88629 ], [ 88.65418, 21.88458 ], [ 88.65338, 21.88272 ], [ 88.65281, 21.88124 ], [ 88.65267, 21.87981 ], [ 88.65261, 21.87803 ], [ 88.65283, 21.87659 ], [ 88.65246, 21.87589 ], [ 88.65238, 21.8749 ], [ 88.65209, 21.87347 ], [ 88.65146, 21.87279 ], [ 88.65039, 21.87232 ], [ 88.64931, 21.87195 ], [ 88.64828, 21.87208 ], [ 88.64638, 21.87264 ], [ 88.64446, 21.87344 ], [ 88.64298, 21.87375 ], [ 88.6411, 21.87379 ], [ 88.63977, 21.87361 ], [ 88.63871, 21.87319 ], [ 88.63563, 21.87129 ], [ 88.634, 21.87076 ] ] ], [ [ [ 88.7725264, 21.9239274 ], [ 88.7740713, 21.9244052 ], [ 88.775788, 21.9232904 ], [ 88.7764746, 21.9226534 ], [ 88.7780196, 21.9215387 ], [ 88.7800795, 21.9202647 ], [ 88.7816244, 21.9189907 ], [ 88.7836844, 21.9183537 ], [ 88.7857443, 21.9172389 ], [ 88.7881476, 21.9166019 ], [ 88.7900359, 21.9164426 ], [ 88.7924391, 21.9166019 ], [ 88.7939841, 21.9173981 ], [ 88.795529, 21.9177167 ], [ 88.7969023, 21.9183537 ], [ 88.7977606, 21.9189907 ], [ 88.7989622, 21.9194684 ], [ 88.8005072, 21.9181944 ], [ 88.7998206, 21.9170796 ], [ 88.7987906, 21.9156463 ], [ 88.7969023, 21.9146908 ], [ 88.7958723, 21.914213 ], [ 88.7953574, 21.9121427 ], [ 88.794499, 21.9107093 ], [ 88.7936407, 21.9100723 ], [ 88.7917525, 21.9086389 ], [ 88.7896925, 21.9072055 ], [ 88.7878043, 21.9062499 ], [ 88.7867743, 21.904498 ], [ 88.7898642, 21.9064092 ], [ 88.7929541, 21.9086389 ], [ 88.7951857, 21.909913 ], [ 88.795529, 21.9108686 ], [ 88.796044, 21.9123019 ], [ 88.7969023, 21.9134167 ], [ 88.7986189, 21.9148501 ], [ 88.7998206, 21.9159649 ], [ 88.8010222, 21.9166019 ], [ 88.8023955, 21.9158056 ], [ 88.8030821, 21.9145315 ], [ 88.8051421, 21.9118241 ], [ 88.807202, 21.9091167 ], [ 88.8087469, 21.9070462 ], [ 88.8113219, 21.9046572 ], [ 88.8135535, 21.902746 ], [ 88.8142401, 21.900994 ], [ 88.8135535, 21.8994013 ], [ 88.8113219, 21.8971714 ], [ 88.8097769, 21.8951008 ], [ 88.8078886, 21.8933487 ], [ 88.8090903, 21.8933487 ], [ 88.8089186, 21.8922338 ], [ 88.8087469, 21.8890481 ], [ 88.8085753, 21.8855437 ], [ 88.807717, 21.8833137 ], [ 88.8054854, 21.8815614 ], [ 88.8025671, 21.8794906 ], [ 88.8006789, 21.8786941 ], [ 88.7984473, 21.877579 ], [ 88.7969023, 21.8756674 ], [ 88.7957007, 21.8731186 ], [ 88.795014, 21.8702511 ], [ 88.7936407, 21.8677022 ], [ 88.7924391, 21.8659498 ], [ 88.7903792, 21.8645159 ], [ 88.7883192, 21.8646753 ], [ 88.7872893, 21.8657904 ], [ 88.7881476, 21.8678615 ], [ 88.7898642, 21.8688173 ], [ 88.7915808, 21.8697732 ], [ 88.7931258, 21.8715256 ], [ 88.7934691, 21.8726407 ], [ 88.7936407, 21.8755081 ], [ 88.7929541, 21.8774197 ], [ 88.7915808, 21.8785348 ], [ 88.7888342, 21.8788534 ], [ 88.7869459, 21.8783755 ], [ 88.785401, 21.8767825 ], [ 88.7836844, 21.8742337 ], [ 88.7807661, 21.8710476 ], [ 88.7776762, 21.8689766 ], [ 88.7768179, 21.8702511 ], [ 88.7756163, 21.8718442 ], [ 88.774758, 21.8735965 ], [ 88.7740713, 21.8750302 ], [ 88.7738997, 21.8764639 ], [ 88.7730414, 21.8774197 ], [ 88.7711531, 21.8778976 ], [ 88.7692648, 21.8790127 ], [ 88.7682349, 21.8804464 ], [ 88.7673766, 21.8817207 ], [ 88.7675482, 21.883473 ], [ 88.7690932, 21.8853845 ], [ 88.7702948, 21.8871366 ], [ 88.7709814, 21.8884109 ], [ 88.7713248, 21.8903224 ], [ 88.7709814, 21.8917559 ], [ 88.7704665, 21.8941451 ], [ 88.7697798, 21.8960565 ], [ 88.7687498, 21.8982864 ], [ 88.7673766, 21.9005162 ], [ 88.7673766, 21.9017904 ], [ 88.7668616, 21.9032238 ], [ 88.7663466, 21.9040202 ], [ 88.7654883, 21.9041794 ], [ 88.7637717, 21.9057721 ], [ 88.762055, 21.906887 ], [ 88.7613684, 21.9072055 ], [ 88.7603384, 21.9070462 ], [ 88.7591368, 21.9076833 ], [ 88.7587935, 21.909276 ], [ 88.7589651, 21.9105501 ], [ 88.7591368, 21.9116649 ], [ 88.7601668, 21.9108686 ], [ 88.7618834, 21.9105501 ], [ 88.7632567, 21.9095945 ], [ 88.7636, 21.9087982 ], [ 88.7653166, 21.909913 ], [ 88.7666899, 21.9113464 ], [ 88.7658316, 21.9124612 ], [ 88.7653166, 21.9140538 ], [ 88.7670332, 21.9150093 ], [ 88.7680632, 21.9146908 ], [ 88.7692648, 21.914213 ], [ 88.7708098, 21.9145315 ], [ 88.7730414, 21.9161241 ], [ 88.7730414, 21.9181944 ], [ 88.7725264, 21.9216979 ], [ 88.7725264, 21.9239274 ] ] ], [ [ [ 88.59365, 21.947989971872424 ], [ 88.5950837, 21.9462169 ], [ 88.5962853, 21.9435101 ], [ 88.5973153, 21.9403255 ], [ 88.5992036, 21.9371409 ], [ 88.6017785, 21.9342747 ], [ 88.6045251, 21.9320454 ], [ 88.607615, 21.9298161 ], [ 88.6096749, 21.9279052 ], [ 88.6107049, 21.9261535 ], [ 88.6112199, 21.9231278 ], [ 88.6103616, 21.9201021 ], [ 88.6093316, 21.9173948 ], [ 88.6074433, 21.9143689 ], [ 88.6057267, 21.9116615 ], [ 88.6040101, 21.9094318 ], [ 88.6016068, 21.9062465 ], [ 88.5995469, 21.9046539 ], [ 88.595942, 21.9021056 ], [ 88.59385, 21.900358610602353 ], [ 88.59385, 21.900358610602357 ], [ 88.5925088, 21.8992386 ], [ 88.5885606, 21.896531 ], [ 88.5865006, 21.8944603 ], [ 88.5828957, 21.8920711 ], [ 88.5787759, 21.8896819 ], [ 88.5772309, 21.8915933 ], [ 88.576201, 21.8947789 ], [ 88.5748277, 21.8984423 ], [ 88.574141, 21.9006721 ], [ 88.5734544, 21.903539 ], [ 88.5734544, 21.9062465 ], [ 88.575171, 21.9079985 ], [ 88.5765443, 21.9097504 ], [ 88.5782609, 21.9115023 ], [ 88.5803208, 21.9143689 ], [ 88.5813508, 21.9164393 ], [ 88.5811791, 21.9185096 ], [ 88.5803208, 21.9197836 ], [ 88.5798058, 21.9213761 ], [ 88.5798058, 21.9232871 ], [ 88.5810075, 21.9248795 ], [ 88.5799775, 21.9248795 ], [ 88.5791192, 21.9232871 ], [ 88.5787759, 21.9210576 ], [ 88.5798058, 21.9186688 ], [ 88.5798058, 21.917554 ], [ 88.5796342, 21.9154837 ], [ 88.5779176, 21.9132541 ], [ 88.5755143, 21.9110245 ], [ 88.5732827, 21.9089541 ], [ 88.5719094, 21.9068836 ], [ 88.5713944, 21.908317 ], [ 88.5696778, 21.9103874 ], [ 88.5676179, 21.91198 ], [ 88.5648713, 21.9140504 ], [ 88.562468, 21.9154837 ], [ 88.5600648, 21.9164393 ], [ 88.5571465, 21.9170763 ], [ 88.5540566, 21.9183503 ], [ 88.5519967, 21.9197836 ], [ 88.5502801, 21.9221723 ], [ 88.5499368, 21.9240833 ], [ 88.5504517, 21.9256758 ], [ 88.5513101, 21.9279052 ], [ 88.5519967, 21.9301345 ], [ 88.551825, 21.9323639 ], [ 88.5514817, 21.9352301 ], [ 88.5511384, 21.9373002 ], [ 88.5499368, 21.9408032 ], [ 88.5480485, 21.9431916 ], [ 88.5461602, 21.9468538 ], [ 88.5453019, 21.9494013 ], [ 88.543242, 21.9565659 ], [ 88.5425553, 21.9607053 ], [ 88.542727, 21.9657998 ], [ 88.5444436, 21.9697798 ], [ 88.5454736, 21.9713717 ], [ 88.5471902, 21.9720085 ], [ 88.5497651, 21.9728045 ], [ 88.5521684, 21.9729636 ], [ 88.5554299, 21.9731228 ], [ 88.5576615, 21.9720085 ], [ 88.5593781, 21.9702574 ], [ 88.5614381, 21.9650038 ], [ 88.5628114, 21.9622974 ], [ 88.5652146, 21.9594317 ], [ 88.5674462, 21.9579988 ], [ 88.5713944, 21.9576804 ], [ 88.574141, 21.9579988 ], [ 88.576201, 21.9583172 ], [ 88.5780892, 21.9578396 ], [ 88.5844407, 21.9540185 ], [ 88.5899339, 21.950675 ], [ 88.5930238, 21.9487644 ], [ 88.59365, 21.947989971872424 ] ] ], [ [ [ 88.7252684, 21.9718775 ], [ 88.72544, 21.9749021 ], [ 88.7256117, 21.9777675 ], [ 88.7262983, 21.9788818 ], [ 88.7285299, 21.9788818 ], [ 88.7316198, 21.9788818 ], [ 88.7348814, 21.9787226 ], [ 88.7386579, 21.9788818 ], [ 88.7415762, 21.9788818 ], [ 88.7456961, 21.9795185 ], [ 88.7474127, 21.979041 ], [ 88.7494726, 21.9785634 ], [ 88.7511892, 21.9776083 ], [ 88.7530775, 21.9766532 ], [ 88.7544508, 21.9750613 ], [ 88.7547941, 21.9729918 ], [ 88.7537641, 21.9702855 ], [ 88.7532492, 21.9675792 ], [ 88.7515326, 21.96344 ], [ 88.7510176, 21.9613703 ], [ 88.7499876, 21.9593006 ], [ 88.7499876, 21.9559572 ], [ 88.7510176, 21.9546835 ], [ 88.7525625, 21.9534098 ], [ 88.7542791, 21.9526138 ], [ 88.7559957, 21.9521361 ], [ 88.7575407, 21.9519769 ], [ 88.7606306, 21.9508624 ], [ 88.7623472, 21.9499071 ], [ 88.7637205, 21.9486333 ], [ 88.7659521, 21.9460858 ], [ 88.7676687, 21.9443344 ], [ 88.770072, 21.9435382 ], [ 88.7717886, 21.9429013 ], [ 88.7736769, 21.9416275 ], [ 88.7759085, 21.9413091 ], [ 88.7767668, 21.9413091 ], [ 88.7783117, 21.9416275 ], [ 88.7795134, 21.9424237 ], [ 88.7805433, 21.9436975 ], [ 88.78123, 21.9444936 ], [ 88.781745, 21.9459266 ], [ 88.7822599, 21.9475188 ], [ 88.7832899, 21.9492702 ], [ 88.7843199, 21.9507032 ], [ 88.7855215, 21.9518177 ], [ 88.7867231, 21.9524546 ], [ 88.7879248, 21.95134 ], [ 88.7875814, 21.9492702 ], [ 88.7872381, 21.9470411 ], [ 88.7870665, 21.944812 ], [ 88.7870665, 21.9424237 ], [ 88.7882681, 21.9406722 ], [ 88.789813, 21.9395576 ], [ 88.7920446, 21.9390799 ], [ 88.7965078, 21.9393983 ], [ 88.7992544, 21.9395576 ], [ 88.8018293, 21.9392391 ], [ 88.8037176, 21.9381245 ], [ 88.8054342, 21.9370099 ], [ 88.8059492, 21.9365322 ], [ 88.8057775, 21.935736 ], [ 88.8056059, 21.9346214 ], [ 88.8047476, 21.9327105 ], [ 88.8032026, 21.9306404 ], [ 88.8011427, 21.9282518 ], [ 88.7994261, 21.9263409 ], [ 88.7966795, 21.9242707 ], [ 88.7947912, 21.9229967 ], [ 88.7927313, 21.9215635 ], [ 88.7906713, 21.9202895 ], [ 88.7894697, 21.9204487 ], [ 88.7877531, 21.9209265 ], [ 88.7856932, 21.9217227 ], [ 88.7832899, 21.9229967 ], [ 88.7819166, 21.9247485 ], [ 88.7788267, 21.9266594 ], [ 88.7764234, 21.9276148 ], [ 88.7743635, 21.9280926 ], [ 88.7726469, 21.929048 ], [ 88.7704153, 21.9295258 ], [ 88.7662954, 21.930322 ], [ 88.7630339, 21.9304812 ], [ 88.759429, 21.9307997 ], [ 88.7577124, 21.9307997 ], [ 88.7563391, 21.9306404 ], [ 88.7544508, 21.9301627 ], [ 88.7523909, 21.9295258 ], [ 88.7494726, 21.9282518 ], [ 88.7470694, 21.9268186 ], [ 88.7458677, 21.9260224 ], [ 88.7436361, 21.923793 ], [ 88.7429495, 21.9223597 ], [ 88.7417479, 21.921882 ], [ 88.7391729, 21.922519 ], [ 88.7364263, 21.9236337 ], [ 88.7345381, 21.92443 ], [ 88.7329931, 21.9261817 ], [ 88.7300749, 21.9314366 ], [ 88.7288732, 21.9341437 ], [ 88.7281866, 21.9354175 ], [ 88.7257833, 21.9366914 ], [ 88.7257833, 21.9387614 ], [ 88.7250967, 21.9397168 ], [ 88.7233801, 21.9425829 ], [ 88.7237234, 21.946245 ], [ 88.7250967, 21.9497479 ], [ 88.7250967, 21.9524546 ], [ 88.7242384, 21.952773 ], [ 88.7245817, 21.955002 ], [ 88.7237234, 21.9565941 ], [ 88.7238951, 21.9591414 ], [ 88.7233801, 21.9605743 ], [ 88.7245817, 21.9618479 ], [ 88.7238951, 21.9677384 ], [ 88.7237234, 21.9696487 ], [ 88.7252684, 21.9694895 ], [ 88.7252684, 21.9718775 ] ] ], [ [ [ 72.278954, 22.0918256 ], [ 72.2778476, 22.0919364 ], [ 72.2774084, 22.0932153 ], [ 72.2773838, 22.0945013 ], [ 72.2770978, 22.095011 ], [ 72.2773541, 22.0960445 ], [ 72.2773345, 22.0970732 ], [ 72.2763244, 22.0993718 ], [ 72.2757701, 22.0994907 ], [ 72.2754866, 22.0998725 ], [ 72.2763072, 22.1002717 ], [ 72.2768616, 22.1001526 ], [ 72.2771277, 22.1006716 ], [ 72.275462, 22.1011585 ], [ 72.2754719, 22.100644 ], [ 72.2750525, 22.1008942 ], [ 72.2751712, 22.1019254 ], [ 72.2757157, 22.1023199 ], [ 72.2765461, 22.1022055 ], [ 72.2763978, 22.1027177 ], [ 72.2759769, 22.1030961 ], [ 72.2754223, 22.1032159 ], [ 72.2754373, 22.1024444 ], [ 72.2751613, 22.1024397 ], [ 72.2748604, 22.1037211 ], [ 72.2754125, 22.1037304 ], [ 72.2756737, 22.1045064 ], [ 72.2764919, 22.1050347 ], [ 72.2769152, 22.1045272 ], [ 72.2770636, 22.104015 ], [ 72.2773396, 22.1040197 ], [ 72.2775958, 22.105053 ], [ 72.2784238, 22.1050668 ], [ 72.2784189, 22.105324 ], [ 72.2778669, 22.1053148 ], [ 72.277862, 22.105572 ], [ 72.2784138, 22.1055812 ], [ 72.2782655, 22.1060932 ], [ 72.2779846, 22.1063459 ], [ 72.2778372, 22.1068579 ], [ 72.2783868, 22.1069953 ], [ 72.2792222, 22.1066238 ], [ 72.2792124, 22.1071382 ], [ 72.2786603, 22.107129 ], [ 72.2786554, 22.1073862 ], [ 72.2797544, 22.1076618 ], [ 72.2800156, 22.108438 ], [ 72.2794635, 22.1084287 ], [ 72.2794488, 22.1092002 ], [ 72.2788992, 22.1090621 ], [ 72.2787633, 22.1089316 ], [ 72.278507, 22.1078982 ], [ 72.2781008, 22.1075051 ], [ 72.2772827, 22.106977 ], [ 72.2770067, 22.1069723 ], [ 72.2764497, 22.1072202 ], [ 72.2750674, 22.1073263 ], [ 72.2750574, 22.1078407 ], [ 72.2758854, 22.1078545 ], [ 72.2758756, 22.1083688 ], [ 72.2764276, 22.1083781 ], [ 72.2771022, 22.1091611 ], [ 72.2769498, 22.1099305 ], [ 72.276398, 22.1099212 ], [ 72.2762496, 22.1104332 ], [ 72.2761095, 22.1105591 ], [ 72.274998, 22.1109269 ], [ 72.2748695, 22.1104102 ], [ 72.2736378, 22.1098751 ], [ 72.2730511, 22.1116663 ], [ 72.2733248, 22.111799 ], [ 72.2752568, 22.1118313 ], [ 72.2755378, 22.1115788 ], [ 72.2763658, 22.1115926 ], [ 72.2766442, 22.111469 ], [ 72.2762099, 22.1124909 ], [ 72.275929, 22.1127434 ], [ 72.2756382, 22.1135104 ], [ 72.2752173, 22.1138887 ], [ 72.2746627, 22.1140086 ], [ 72.2746529, 22.114523 ], [ 72.2741009, 22.1145138 ], [ 72.2740761, 22.1157997 ], [ 72.2746282, 22.115809 ], [ 72.2749289, 22.1145276 ], [ 72.2754809, 22.1145368 ], [ 72.2757718, 22.1137699 ], [ 72.2763237, 22.1137791 ], [ 72.2763337, 22.1132647 ], [ 72.2768931, 22.1128876 ], [ 72.2777261, 22.1126444 ], [ 72.2788277, 22.1127918 ], [ 72.2789701, 22.1125368 ], [ 72.2787238, 22.1109891 ], [ 72.2784526, 22.1107273 ], [ 72.2780687, 22.1091773 ], [ 72.2786208, 22.1091864 ], [ 72.278611, 22.1097009 ], [ 72.2797149, 22.1097192 ], [ 72.2797247, 22.1092049 ], [ 72.2800009, 22.1092095 ], [ 72.279981, 22.1102382 ], [ 72.2802571, 22.1102429 ], [ 72.2802719, 22.1094712 ], [ 72.2808289, 22.1092233 ], [ 72.280819, 22.1097377 ], [ 72.2816471, 22.1097515 ], [ 72.2816569, 22.1092371 ], [ 72.2811048, 22.1092278 ], [ 72.2812473, 22.108973 ], [ 72.2811296, 22.1079419 ], [ 72.2819527, 22.1082129 ], [ 72.2817013, 22.1069224 ], [ 72.2825244, 22.1071934 ], [ 72.2830615, 22.1079742 ], [ 72.2822384, 22.1077031 ], [ 72.2823513, 22.1089914 ], [ 72.2830269, 22.1097744 ], [ 72.2819205, 22.1098842 ], [ 72.2817795, 22.110011 ], [ 72.2817746, 22.1102681 ], [ 72.2820457, 22.1105298 ], [ 72.2820211, 22.1118158 ], [ 72.2825631, 22.1123395 ], [ 72.2825484, 22.113111 ], [ 72.2818491, 22.1136139 ], [ 72.2817204, 22.1130972 ], [ 72.2813118, 22.1128332 ], [ 72.2812821, 22.1143764 ], [ 72.2807302, 22.1143671 ], [ 72.2814, 22.1154074 ], [ 72.2823467, 22.1164521 ], [ 72.2809716, 22.116172 ], [ 72.2809667, 22.1164293 ], [ 72.2815187, 22.1164383 ], [ 72.281218, 22.1177198 ], [ 72.2809421, 22.1177152 ], [ 72.2809519, 22.1172008 ], [ 72.2805323, 22.117451 ], [ 72.2801065, 22.1180866 ], [ 72.2795544, 22.1180775 ], [ 72.279281, 22.1179447 ], [ 72.2792711, 22.1184591 ], [ 72.279823, 22.1184684 ], [ 72.2795422, 22.1187209 ], [ 72.2795223, 22.1197496 ], [ 72.2800695, 22.1200161 ], [ 72.2799103, 22.1188146 ], [ 72.2809222, 22.118744 ], [ 72.280937, 22.1179723 ], [ 72.2812131, 22.117977 ], [ 72.2812033, 22.1184913 ], [ 72.2817553, 22.1185005 ], [ 72.2811834, 22.1195202 ], [ 72.2820065, 22.119791 ], [ 72.282149, 22.1195362 ], [ 72.282332, 22.1172238 ], [ 72.2837268, 22.1164752 ], [ 72.283717, 22.1169895 ], [ 72.2845352, 22.1175177 ], [ 72.2845501, 22.1167462 ], [ 72.285659, 22.1165073 ], [ 72.2857818, 22.1172811 ], [ 72.2860528, 22.1175431 ], [ 72.2861815, 22.1180596 ], [ 72.2875567, 22.1183399 ], [ 72.2877247, 22.1190259 ], [ 72.2872734, 22.1187205 ], [ 72.2869973, 22.118716 ], [ 72.2864403, 22.118964 ], [ 72.2855017, 22.1197608 ], [ 72.2850455, 22.1197126 ], [ 72.2842246, 22.1193134 ], [ 72.284205, 22.1203421 ], [ 72.2853091, 22.1203607 ], [ 72.2856873, 22.1199399 ], [ 72.286147, 22.11986 ], [ 72.2858661, 22.1201125 ], [ 72.2852993, 22.1208749 ], [ 72.2858514, 22.1208842 ], [ 72.2859534, 22.1204589 ], [ 72.2861371, 22.1203745 ], [ 72.2864206, 22.1199927 ], [ 72.2872486, 22.1200065 ], [ 72.2875223, 22.1201401 ], [ 72.2879103, 22.1192051 ], [ 72.2880916, 22.1192488 ], [ 72.2883552, 22.1198967 ], [ 72.2889073, 22.1199059 ], [ 72.2894741, 22.1191435 ], [ 72.2884607, 22.1192955 ], [ 72.2875665, 22.1178254 ], [ 72.2886658, 22.118101 ], [ 72.2886559, 22.1186152 ], [ 72.2897601, 22.1186336 ], [ 72.2894987, 22.1178575 ], [ 72.2900507, 22.1178666 ], [ 72.2901834, 22.1181261 ], [ 72.2901893, 22.1200961 ], [ 72.2900041, 22.1203096 ], [ 72.2894495, 22.1204295 ], [ 72.2897404, 22.1196625 ], [ 72.2893208, 22.1199127 ], [ 72.2891685, 22.120682 ], [ 72.2886166, 22.1206729 ], [ 72.2885919, 22.1219588 ], [ 72.2894201, 22.1219726 ], [ 72.2897058, 22.1214627 ], [ 72.2894299, 22.1214582 ], [ 72.2894397, 22.1209437 ], [ 72.2901761, 22.1207863 ], [ 72.2902677, 22.1209575 ], [ 72.2908173, 22.1210949 ], [ 72.2910984, 22.1208422 ], [ 72.2919288, 22.1207279 ], [ 72.2919239, 22.1209851 ], [ 72.2913719, 22.1209759 ], [ 72.2913669, 22.1212331 ], [ 72.2921951, 22.1212469 ], [ 72.292307, 22.1203072 ], [ 72.2924907, 22.1202227 ], [ 72.2925104, 22.119194 ], [ 72.292232, 22.1193174 ], [ 72.2916676, 22.1199517 ], [ 72.2922197, 22.1199609 ], [ 72.2921216, 22.120128 ], [ 72.2911082, 22.120328 ], [ 72.2908272, 22.1205805 ], [ 72.2903683, 22.1206135 ], [ 72.2903749, 22.120275 ], [ 72.2905586, 22.1201906 ], [ 72.2905684, 22.1196761 ], [ 72.2911229, 22.1195563 ], [ 72.2919657, 22.1187984 ], [ 72.2930723, 22.1186886 ], [ 72.2930821, 22.1181743 ], [ 72.2919755, 22.1182841 ], [ 72.2914335, 22.1177606 ], [ 72.2903269, 22.1178713 ], [ 72.2906176, 22.1171042 ], [ 72.2911696, 22.1171135 ], [ 72.2914703, 22.115832 ], [ 72.292015, 22.1162265 ], [ 72.2931116, 22.1166311 ], [ 72.2929976, 22.1153429 ], [ 72.2927266, 22.1150811 ], [ 72.2927315, 22.1148239 ], [ 72.2930124, 22.1145712 ], [ 72.2931607, 22.1140592 ], [ 72.2937128, 22.1140683 ], [ 72.2938553, 22.1138133 ], [ 72.2937276, 22.1132968 ], [ 72.2942821, 22.1131768 ], [ 72.294844, 22.1126716 ], [ 72.2956744, 22.1125572 ], [ 72.29597, 22.111533 ], [ 72.2951445, 22.1113902 ], [ 72.2948757, 22.1110002 ], [ 72.2954278, 22.1110095 ], [ 72.2947962, 22.1079116 ], [ 72.2948256, 22.1063686 ], [ 72.2942883, 22.1055879 ], [ 72.2930664, 22.1045385 ], [ 72.2930566, 22.1050528 ], [ 72.2927807, 22.1050483 ], [ 72.2927905, 22.1045338 ], [ 72.2914178, 22.1041248 ], [ 72.2910156, 22.1034754 ], [ 72.2900625, 22.102816 ], [ 72.288961, 22.1026695 ], [ 72.2889659, 22.1024123 ], [ 72.2900698, 22.1024306 ], [ 72.2903556, 22.1019207 ], [ 72.2898037, 22.1019116 ], [ 72.2895473, 22.1008782 ], [ 72.2889978, 22.10074 ], [ 72.2887268, 22.1004782 ], [ 72.2881747, 22.1004692 ], [ 72.2879037, 22.1002074 ], [ 72.2869445, 22.099806 ], [ 72.286817, 22.0992892 ], [ 72.2862624, 22.0994083 ], [ 72.2861216, 22.0995349 ], [ 72.2859742, 22.1000471 ], [ 72.2851511, 22.0997761 ], [ 72.2848899, 22.0989999 ], [ 72.285442, 22.0990091 ], [ 72.2853329, 22.0974637 ], [ 72.285198, 22.0973323 ], [ 72.2846484, 22.0971949 ], [ 72.2847958, 22.0966829 ], [ 72.2850766, 22.0964302 ], [ 72.2852348, 22.0954038 ], [ 72.2846854, 22.0952656 ], [ 72.2845493, 22.0951352 ], [ 72.2845592, 22.0946208 ], [ 72.2841581, 22.0939704 ], [ 72.2830517, 22.0940812 ], [ 72.2830419, 22.0945956 ], [ 72.2819453, 22.094191 ], [ 72.2808389, 22.0943017 ], [ 72.2811347, 22.0932775 ], [ 72.2805851, 22.0931392 ], [ 72.2804492, 22.0930088 ], [ 72.280459, 22.0924943 ], [ 72.2806025, 22.0922395 ], [ 72.2800504, 22.0922303 ], [ 72.2801929, 22.0919755 ], [ 72.2801978, 22.0917183 ], [ 72.2800627, 22.0915869 ], [ 72.2797867, 22.0915824 ], [ 72.2792299, 22.0918304 ], [ 72.278954, 22.0918256 ] ] ], [ [ [ 69.4498616, 22.3192055 ], [ 69.4504151, 22.319204 ], [ 69.4504142, 22.3189466 ], [ 69.4499547, 22.3188592 ], [ 69.4498601, 22.3186906 ], [ 69.4469457, 22.316124 ], [ 69.4473556, 22.3143206 ], [ 69.446802, 22.3143221 ], [ 69.4469368, 22.3132919 ], [ 69.44638, 22.3122635 ], [ 69.4462398, 22.3114914 ], [ 69.4459631, 22.3114922 ], [ 69.4459646, 22.3120072 ], [ 69.4454112, 22.3120087 ], [ 69.4454136, 22.312781 ], [ 69.445967, 22.3127795 ], [ 69.4459678, 22.3130371 ], [ 69.4454148, 22.3131667 ], [ 69.4445868, 22.3138133 ], [ 69.4444422, 22.3120114 ], [ 69.4441647, 22.3117545 ], [ 69.4443012, 22.3109819 ], [ 69.4437472, 22.3108541 ], [ 69.4436081, 22.3107262 ], [ 69.4437444, 22.3099536 ], [ 69.4451279, 22.3099498 ], [ 69.4449867, 22.3091777 ], [ 69.4452617, 22.3086619 ], [ 69.4454942, 22.3084915 ], [ 69.4456769, 22.3085317 ], [ 69.4462318, 22.309045 ], [ 69.4467858, 22.3091728 ], [ 69.4469186, 22.3076275 ], [ 69.4467805, 22.3074988 ], [ 69.4462265, 22.307372 ], [ 69.446225, 22.306857 ], [ 69.4451169, 22.3064735 ], [ 69.4448395, 22.3062166 ], [ 69.4445628, 22.3062174 ], [ 69.4440101, 22.3064765 ], [ 69.4434567, 22.306478 ], [ 69.4431793, 22.3062212 ], [ 69.4426255, 22.3060946 ], [ 69.442898, 22.3048063 ], [ 69.4437281, 22.3048041 ], [ 69.4435877, 22.3042896 ], [ 69.4431719, 22.303904 ], [ 69.442201, 22.3032635 ], [ 69.4420608, 22.3024915 ], [ 69.4401222, 22.3019817 ], [ 69.4401199, 22.3012093 ], [ 69.43874, 22.3023713 ], [ 69.4381863, 22.3022444 ], [ 69.4380515, 22.3035323 ], [ 69.4376382, 22.3039192 ], [ 69.4370852, 22.3040498 ], [ 69.4374981, 22.3035336 ], [ 69.4374932, 22.3019889 ], [ 69.4377692, 22.3017307 ], [ 69.4379047, 22.3007005 ], [ 69.4384584, 22.3008271 ], [ 69.4387361, 22.301084 ], [ 69.4398423, 22.3009526 ], [ 69.4392863, 22.3000526 ], [ 69.4370719, 22.299801 ], [ 69.4365168, 22.2992877 ], [ 69.4356864, 22.2991617 ], [ 69.4362358, 22.2978727 ], [ 69.4356824, 22.2978742 ], [ 69.4356809, 22.2973594 ], [ 69.4351271, 22.2972316 ], [ 69.4345722, 22.2967181 ], [ 69.4331872, 22.2962068 ], [ 69.4329098, 22.2959502 ], [ 69.4306955, 22.2956986 ], [ 69.430418, 22.2954419 ], [ 69.4290347, 22.2954455 ], [ 69.4284821, 22.2957045 ], [ 69.4282054, 22.2957052 ], [ 69.4279279, 22.2954484 ], [ 69.4259912, 22.2954535 ], [ 69.4226718, 22.2957198 ], [ 69.4223961, 22.295978 ], [ 69.4215664, 22.2961093 ], [ 69.4217049, 22.2963663 ], [ 69.4217066, 22.2968812 ], [ 69.4210171, 22.2975262 ], [ 69.4201876, 22.2976576 ], [ 69.4195016, 22.2997192 ], [ 69.4193641, 22.2998477 ], [ 69.4188111, 22.2999785 ], [ 69.4192271, 22.3004922 ], [ 69.4192301, 22.3015221 ], [ 69.4189559, 22.3022953 ], [ 69.4186868, 22.3048708 ], [ 69.4184108, 22.305129 ], [ 69.4186991, 22.3089902 ], [ 69.4189773, 22.3095045 ], [ 69.4189797, 22.3102767 ], [ 69.4187038, 22.3105349 ], [ 69.4187068, 22.3115648 ], [ 69.4185698, 22.3118228 ], [ 69.4202341, 22.313234 ], [ 69.4246662, 22.3147674 ], [ 69.4268862, 22.3168212 ], [ 69.428271, 22.3172042 ], [ 69.4286871, 22.3177181 ], [ 69.4288276, 22.3182327 ], [ 69.4293813, 22.3183595 ], [ 69.4299364, 22.3188728 ], [ 69.4313201, 22.3188693 ], [ 69.4324257, 22.3184805 ], [ 69.4324273, 22.3189955 ], [ 69.4351937, 22.3187307 ], [ 69.4360175, 22.3166687 ], [ 69.4362946, 22.3167961 ], [ 69.438508, 22.3166619 ], [ 69.4387903, 22.3184635 ], [ 69.4410045, 22.3185858 ], [ 69.4421146, 22.3196126 ], [ 69.4437746, 22.3194797 ], [ 69.4439117, 22.3192219 ], [ 69.4440398, 22.3158745 ], [ 69.4445924, 22.3156154 ], [ 69.4445941, 22.3161305 ], [ 69.4448712, 22.316258 ], [ 69.4462549, 22.3162541 ], [ 69.4473649, 22.3172809 ], [ 69.4479192, 22.317537 ], [ 69.4493068, 22.3188205 ], [ 69.4497659, 22.319036 ], [ 69.4498616, 22.3192055 ] ] ], [ [ [ 69.44354, 22.34296 ], [ 69.43863, 22.34337 ], [ 69.4339, 22.34469 ], [ 69.42784, 22.34519 ], [ 69.425, 22.34447 ], [ 69.42311, 22.34433 ], [ 69.42143, 22.34577 ], [ 69.41899, 22.34945 ], [ 69.41835, 22.35157 ], [ 69.4192, 22.35452 ], [ 69.42392, 22.3591 ], [ 69.42758, 22.36003 ], [ 69.42849, 22.36117 ], [ 69.42854, 22.36289 ], [ 69.42728, 22.36416 ], [ 69.42527, 22.3642 ], [ 69.42318, 22.36295 ], [ 69.42076, 22.36297 ], [ 69.41804, 22.36445 ], [ 69.41625, 22.36674 ], [ 69.41505, 22.36964 ], [ 69.41607, 22.37412 ], [ 69.41758, 22.37634 ], [ 69.4192, 22.37767 ], [ 69.41904, 22.3795 ], [ 69.41863, 22.38215 ], [ 69.41736, 22.38442 ], [ 69.41611, 22.38631 ], [ 69.41618, 22.38794 ], [ 69.41765, 22.3893 ], [ 69.42062, 22.39041 ], [ 69.42288, 22.39052 ], [ 69.42465, 22.38942 ], [ 69.42719, 22.38826 ], [ 69.42997, 22.38389 ], [ 69.43375, 22.37922 ], [ 69.43452, 22.3775 ], [ 69.43457, 22.37488 ], [ 69.43549, 22.37417 ], [ 69.43662, 22.37432 ], [ 69.43856, 22.3729 ], [ 69.44043, 22.37175 ], [ 69.44197, 22.37183 ], [ 69.44326, 22.37176 ], [ 69.4456, 22.37002 ], [ 69.44762, 22.36979 ], [ 69.44894, 22.37015 ], [ 69.4501, 22.36968 ], [ 69.45545, 22.36556 ], [ 69.45979, 22.36188 ], [ 69.46065, 22.36127 ], [ 69.46318, 22.3594 ], [ 69.46522, 22.35717 ], [ 69.46592, 22.35491 ], [ 69.46593, 22.3521 ], [ 69.46455, 22.35022 ], [ 69.46189, 22.34857 ], [ 69.45714, 22.34623 ], [ 69.45417, 22.34503 ], [ 69.44879, 22.34375 ], [ 69.44354, 22.34296 ] ] ], [ [ [ 69.31874, 22.37605 ], [ 69.31767, 22.37664 ], [ 69.31733, 22.37782 ], [ 69.31764, 22.37927 ], [ 69.31823, 22.38165 ], [ 69.31862, 22.38245 ], [ 69.31871, 22.38288 ], [ 69.31841, 22.38353 ], [ 69.3183, 22.38425 ], [ 69.31637, 22.38495 ], [ 69.3158, 22.3854 ], [ 69.31527, 22.38595 ], [ 69.31459, 22.38641 ], [ 69.31396, 22.38622 ], [ 69.31348, 22.38574 ], [ 69.31305, 22.38462 ], [ 69.31263, 22.38448 ], [ 69.31225, 22.38486 ], [ 69.3123, 22.39084 ], [ 69.31242, 22.39429 ], [ 69.31311, 22.39473 ], [ 69.31618, 22.39576 ], [ 69.31885, 22.39691 ], [ 69.32026, 22.39774 ], [ 69.32107, 22.39863 ], [ 69.32272, 22.40051 ], [ 69.32361, 22.40078 ], [ 69.32441, 22.40094 ], [ 69.3258, 22.40173 ], [ 69.32679, 22.40245 ], [ 69.32715, 22.40287 ], [ 69.32788, 22.40298 ], [ 69.32838, 22.40278 ], [ 69.32935, 22.40312 ], [ 69.3301, 22.40359 ], [ 69.33056, 22.40455 ], [ 69.33074, 22.40484 ], [ 69.33412, 22.40416 ], [ 69.33421, 22.40363 ], [ 69.3348, 22.40239 ], [ 69.3356, 22.40144 ], [ 69.33623, 22.40115 ], [ 69.33906, 22.40095 ], [ 69.34113, 22.40101 ], [ 69.34257, 22.40056 ], [ 69.34832, 22.39983 ], [ 69.35165, 22.39915 ], [ 69.35332, 22.39856 ], [ 69.35369, 22.39714 ], [ 69.35298, 22.39483 ], [ 69.35184, 22.39389 ], [ 69.35053, 22.39355 ], [ 69.34934, 22.3941 ], [ 69.34861, 22.39496 ], [ 69.34713, 22.39517 ], [ 69.34427, 22.39529 ], [ 69.34274, 22.39504 ], [ 69.34189, 22.39447 ], [ 69.34065, 22.39398 ], [ 69.34, 22.3938 ], [ 69.3388, 22.3943 ], [ 69.33764, 22.39436 ], [ 69.33683, 22.39397 ], [ 69.33566, 22.39288 ], [ 69.33577, 22.3924 ], [ 69.33633, 22.3922 ], [ 69.33699, 22.39239 ], [ 69.338, 22.39228 ], [ 69.33895, 22.39131 ], [ 69.34003, 22.38994 ], [ 69.34064, 22.3895 ], [ 69.34057, 22.38871 ], [ 69.34011, 22.38819 ], [ 69.33989, 22.38752 ], [ 69.33993, 22.38667 ], [ 69.33986, 22.38543 ], [ 69.3397, 22.38368 ], [ 69.3397, 22.38337 ], [ 69.33987, 22.38241 ], [ 69.34019, 22.38163 ], [ 69.34008, 22.3811 ], [ 69.33947, 22.3805 ], [ 69.33841, 22.37978 ], [ 69.33778, 22.37893 ], [ 69.33673, 22.37794 ], [ 69.3359, 22.37735 ], [ 69.33518, 22.37635 ], [ 69.33478, 22.37515 ], [ 69.33469, 22.37423 ], [ 69.33377, 22.37349 ], [ 69.33304, 22.37297 ], [ 69.33245, 22.37262 ], [ 69.33168, 22.37258 ], [ 69.32968, 22.37367 ], [ 69.32855, 22.37398 ], [ 69.32661, 22.37502 ], [ 69.32498, 22.37611 ], [ 69.32356, 22.37661 ], [ 69.32151, 22.37648 ], [ 69.31979, 22.37645 ], [ 69.31874, 22.37605 ] ] ], [ [ [ 88.8497867, 22.1029694 ], [ 88.851675, 22.1013789 ], [ 88.8521899, 22.1002656 ], [ 88.8544215, 22.0981979 ], [ 88.8566531, 22.0959712 ], [ 88.8599147, 22.0932672 ], [ 88.8630046, 22.0911995 ], [ 88.8660945, 22.0892908 ], [ 88.8679828, 22.0880183 ], [ 88.8678111, 22.0861095 ], [ 88.8674678, 22.0838826 ], [ 88.8497867, 22.0878592 ], [ 88.8415469, 22.0897679 ], [ 88.8422336, 22.0921538 ], [ 88.8434352, 22.0945397 ], [ 88.8446368, 22.0961302 ], [ 88.8448085, 22.098516 ], [ 88.8446368, 22.1001065 ], [ 88.8439502, 22.0996294 ], [ 88.8441219, 22.0981979 ], [ 88.8432636, 22.0956531 ], [ 88.8418903, 22.0932672 ], [ 88.840517, 22.0902451 ], [ 88.840517, 22.0892908 ], [ 88.8672961, 22.0830872 ], [ 88.8681545, 22.082451 ], [ 88.8672961, 22.0821328 ], [ 88.8664378, 22.0810193 ], [ 88.8616313, 22.0799058 ], [ 88.8556232, 22.0795877 ], [ 88.8532199, 22.0794286 ], [ 88.8513316, 22.0791105 ], [ 88.849615, 22.077997 ], [ 88.8480701, 22.0770425 ], [ 88.8463535, 22.0752927 ], [ 88.8453235, 22.0746564 ], [ 88.8444652, 22.0737019 ], [ 88.8415469, 22.0727474 ], [ 88.8381137, 22.0724293 ], [ 88.8369121, 22.0737019 ], [ 88.8358821, 22.0756108 ], [ 88.8350238, 22.0762471 ], [ 88.8346805, 22.0775197 ], [ 88.8339938, 22.0786332 ], [ 88.8329639, 22.0819737 ], [ 88.8319339, 22.0842007 ], [ 88.8279857, 22.0872229 ], [ 88.8269557, 22.0886545 ], [ 88.8255824, 22.0904042 ], [ 88.8243808, 22.0915176 ], [ 88.8233508, 22.0918357 ], [ 88.8224925, 22.0921538 ], [ 88.8221492, 22.0946987 ], [ 88.8221492, 22.1001065 ], [ 88.8218059, 22.101856 ], [ 88.8204326, 22.1036055 ], [ 88.819231, 22.1048779 ], [ 88.8173427, 22.1063093 ], [ 88.818201, 22.1113985 ], [ 88.8190593, 22.1107624 ], [ 88.8199176, 22.1099672 ], [ 88.8218059, 22.109172 ], [ 88.8248958, 22.1102853 ], [ 88.8250674, 22.1115576 ], [ 88.8236942, 22.1102853 ], [ 88.8216342, 22.1101262 ], [ 88.8202609, 22.1112395 ], [ 88.818716, 22.1123528 ], [ 88.8175143, 22.1123528 ], [ 88.817171, 22.1099672 ], [ 88.8168277, 22.1080587 ], [ 88.8161411, 22.1056731 ], [ 88.8183727, 22.1037646 ], [ 88.8209476, 22.1013789 ], [ 88.8211192, 22.0972436 ], [ 88.8209476, 22.0923129 ], [ 88.8216342, 22.0911995 ], [ 88.8245525, 22.0900861 ], [ 88.8254108, 22.0884954 ], [ 88.8254108, 22.0872229 ], [ 88.8240375, 22.0859504 ], [ 88.8216342, 22.0854732 ], [ 88.8194026, 22.0843598 ], [ 88.817686, 22.0832463 ], [ 88.8161411, 22.0819737 ], [ 88.8137378, 22.0814965 ], [ 88.8118495, 22.0822919 ], [ 88.806528, 22.0838826 ], [ 88.806013, 22.084837 ], [ 88.8036098, 22.0883364 ], [ 88.8037814, 22.0900861 ], [ 88.8041248, 22.0919948 ], [ 88.8041248, 22.0937444 ], [ 88.8029231, 22.0958121 ], [ 88.8015498, 22.0967664 ], [ 88.8006915, 22.0974026 ], [ 88.8003482, 22.0988341 ], [ 88.8013782, 22.1021741 ], [ 88.8017215, 22.1042417 ], [ 88.8022365, 22.1064683 ], [ 88.8012065, 22.1078997 ], [ 88.8008632, 22.1088539 ], [ 88.7998332, 22.109172 ], [ 88.7984599, 22.1104443 ], [ 88.8005199, 22.1126708 ], [ 88.8012065, 22.1137841 ], [ 88.8027515, 22.1155334 ], [ 88.8027515, 22.118396 ], [ 88.8037814, 22.1207814 ], [ 88.8054981, 22.1236438 ], [ 88.8077297, 22.1255521 ], [ 88.8096179, 22.1257111 ], [ 88.8116779, 22.125075 ], [ 88.8142528, 22.1238028 ], [ 88.817171, 22.1228487 ], [ 88.8209476, 22.1220536 ], [ 88.8242091, 22.1228487 ], [ 88.8282215, 22.1244327 ], [ 88.8302115, 22.1246054 ], [ 88.8317724, 22.124484 ], [ 88.8351955, 22.1231667 ], [ 88.8398303, 22.1222126 ], [ 88.8434352, 22.1207814 ], [ 88.8453235, 22.1198272 ], [ 88.8466968, 22.1174418 ], [ 88.8473834, 22.1155334 ], [ 88.8485851, 22.1048779 ], [ 88.8497867, 22.1029694 ] ] ], [ [ [ 88.9188113, 22.1601635 ], [ 88.9205279, 22.1595276 ], [ 88.9219012, 22.1588917 ], [ 88.9227595, 22.1584147 ], [ 88.9237895, 22.1580968 ], [ 88.9241328, 22.1568249 ], [ 88.9243045, 22.15603 ], [ 88.9231029, 22.155076 ], [ 88.9220729, 22.1539631 ], [ 88.9217296, 22.1528502 ], [ 88.9219012, 22.1515783 ], [ 88.9234462, 22.1506243 ], [ 88.9248195, 22.1504653 ], [ 88.9256778, 22.1514193 ], [ 88.9268794, 22.1525322 ], [ 88.9273944, 22.1538041 ], [ 88.928596, 22.1545991 ], [ 88.930141, 22.1542811 ], [ 88.930656, 22.1534862 ], [ 88.9297977, 22.1523732 ], [ 88.9292827, 22.1506243 ], [ 88.9292827, 22.1483984 ], [ 88.9294543, 22.1461725 ], [ 88.9303126, 22.1447415 ], [ 88.9316859, 22.1441055 ], [ 88.9337459, 22.1436285 ], [ 88.9358058, 22.1431515 ], [ 88.9359775, 22.1423565 ], [ 88.9358058, 22.1410845 ], [ 88.9339175, 22.1401305 ], [ 88.9325442, 22.1391764 ], [ 88.9316859, 22.1393354 ], [ 88.9304843, 22.1390174 ], [ 88.930141, 22.1377454 ], [ 88.9297977, 22.1364733 ], [ 88.9303126, 22.1352013 ], [ 88.9315143, 22.1339292 ], [ 88.9328876, 22.1328161 ], [ 88.9349475, 22.131226 ], [ 88.9373508, 22.1294768 ], [ 88.938724, 22.1282047 ], [ 88.9390674, 22.1269325 ], [ 88.9383807, 22.1262964 ], [ 88.9366641, 22.1256604 ], [ 88.9344325, 22.1255013 ], [ 88.9323726, 22.1251833 ], [ 88.9311709, 22.1240702 ], [ 88.9292827, 22.1234341 ], [ 88.9263644, 22.1234341 ], [ 88.9239612, 22.1243882 ], [ 88.9212146, 22.1250243 ], [ 88.918983, 22.1258194 ], [ 88.9152064, 22.1286817 ], [ 88.9114299, 22.131862 ], [ 88.9095416, 22.1337702 ], [ 88.9091983, 22.1363143 ], [ 88.9091983, 22.1393354 ], [ 88.9090266, 22.1418795 ], [ 88.908855, 22.1445825 ], [ 88.90834, 22.1466495 ], [ 88.9069667, 22.1495114 ], [ 88.9057651, 22.1515783 ], [ 88.9035335, 22.1545991 ], [ 88.9019885, 22.1566659 ], [ 88.8994136, 22.1580968 ], [ 88.897697, 22.1601635 ], [ 88.8958087, 22.1615944 ], [ 88.8942637, 22.164138 ], [ 88.8942637, 22.1669996 ], [ 88.8942637, 22.1689072 ], [ 88.8949504, 22.1708149 ], [ 88.895637, 22.1714508 ], [ 88.8968387, 22.1712918 ], [ 88.898212, 22.170179 ], [ 88.9006152, 22.1692252 ], [ 88.9026752, 22.1679534 ], [ 88.9050784, 22.1666816 ], [ 88.9069667, 22.1655688 ], [ 88.9076533, 22.1646149 ], [ 88.9103999, 22.1625482 ], [ 88.9117732, 22.1614354 ], [ 88.9136615, 22.1607995 ], [ 88.9162364, 22.1604815 ], [ 88.9188113, 22.1601635 ] ] ], [ [ [ 89.0196479, 22.2060419 ], [ 89.0182746, 22.2077901 ], [ 89.0172446, 22.2098562 ], [ 89.0172446, 22.2114454 ], [ 89.0187895, 22.2131936 ], [ 89.0211928, 22.2141471 ], [ 89.0232527, 22.2141471 ], [ 89.0249694, 22.214306 ], [ 89.0265143, 22.2136703 ], [ 89.0277159, 22.2125579 ], [ 89.0296042, 22.2133525 ], [ 89.0306342, 22.2136703 ], [ 89.0325225, 22.2127168 ], [ 89.0337241, 22.2109686 ], [ 89.0337241, 22.2089026 ], [ 89.0335524, 22.2069955 ], [ 89.0344107, 22.2055651 ], [ 89.0366423, 22.2052473 ], [ 89.0399039, 22.2049294 ], [ 89.0419638, 22.2049294 ], [ 89.0433371, 22.205883 ], [ 89.0441954, 22.2063598 ], [ 89.0450537, 22.2057241 ], [ 89.045912, 22.203499 ], [ 89.045912, 22.2017508 ], [ 89.047457, 22.2014329 ], [ 89.0491736, 22.2015918 ], [ 89.0508902, 22.2033401 ], [ 89.0522635, 22.2033401 ], [ 89.0531218, 22.2019097 ], [ 89.0531218, 22.1990489 ], [ 89.0555251, 22.1974595 ], [ 89.0572417, 22.1968237 ], [ 89.0589583, 22.196188 ], [ 89.0593016, 22.1949164 ], [ 89.0603316, 22.1939628 ], [ 89.0611899, 22.1934859 ], [ 89.0608466, 22.1915786 ], [ 89.0593016, 22.1914197 ], [ 89.057585, 22.1918965 ], [ 89.056555, 22.1931681 ], [ 89.0556967, 22.1931681 ], [ 89.0548384, 22.1926912 ], [ 89.0534651, 22.1915786 ], [ 89.0534651, 22.1899891 ], [ 89.0534651, 22.1883997 ], [ 89.0532935, 22.1868102 ], [ 89.0531218, 22.1856975 ], [ 89.0538085, 22.1844259 ], [ 89.0543234, 22.1836311 ], [ 89.0553534, 22.1825184 ], [ 89.05707, 22.1817236 ], [ 89.0582717, 22.1812468 ], [ 89.05913, 22.180452 ], [ 89.0606749, 22.1787034 ], [ 89.0622199, 22.1785444 ], [ 89.0622199, 22.1764779 ], [ 89.0617049, 22.1740935 ], [ 89.0613616, 22.1696424 ], [ 89.0615332, 22.1651911 ], [ 89.0625632, 22.1608987 ], [ 89.0639365, 22.1574011 ], [ 89.0651381, 22.1540624 ], [ 89.0666831, 22.1508826 ], [ 89.0683997, 22.1477027 ], [ 89.0701163, 22.1456358 ], [ 89.0718329, 22.1445228 ], [ 89.0744078, 22.1438868 ], [ 89.0768111, 22.1442048 ], [ 89.0790427, 22.1445228 ], [ 89.0812743, 22.1457948 ], [ 89.0843642, 22.1478617 ], [ 89.0857375, 22.1491337 ], [ 89.0886557, 22.1527905 ], [ 89.0893424, 22.1534264 ], [ 89.0902007, 22.1545394 ], [ 89.091574, 22.1561292 ], [ 89.0929473, 22.1570831 ], [ 89.0943206, 22.1570831 ], [ 89.0953505, 22.1561292 ], [ 89.0963805, 22.1553343 ], [ 89.0963805, 22.1540624 ], [ 89.0956938, 22.1523135 ], [ 89.0938056, 22.1500876 ], [ 89.0924323, 22.1475437 ], [ 89.091059, 22.1459538 ], [ 89.0883124, 22.1440458 ], [ 89.0845359, 22.1418198 ], [ 89.0805876, 22.1394347 ], [ 89.0764678, 22.1370496 ], [ 89.0730345, 22.1348235 ], [ 89.0689147, 22.1324383 ], [ 89.0663397, 22.1305302 ], [ 89.0651381, 22.1295761 ], [ 89.0639365, 22.129099 ], [ 89.0625632, 22.128463 ], [ 89.0618766, 22.1306892 ], [ 89.0610182, 22.1337104 ], [ 89.0601599, 22.1373677 ], [ 89.05913, 22.1391167 ], [ 89.0568984, 22.1411838 ], [ 89.0548384, 22.1432508 ], [ 89.0532935, 22.1448408 ], [ 89.0515769, 22.1461128 ], [ 89.0519202, 22.1477027 ], [ 89.0529502, 22.1484977 ], [ 89.0541518, 22.1489747 ], [ 89.0539801, 22.1500876 ], [ 89.0538085, 22.1512006 ], [ 89.0520919, 22.1527905 ], [ 89.0508902, 22.1540624 ], [ 89.0505469, 22.1550163 ], [ 89.0498603, 22.1543804 ], [ 89.0527785, 22.1510416 ], [ 89.0531218, 22.1499286 ], [ 89.0519202, 22.1488157 ], [ 89.0510619, 22.1478617 ], [ 89.0505469, 22.1457948 ], [ 89.0481436, 22.1478617 ], [ 89.0453971, 22.1484977 ], [ 89.0423072, 22.1497697 ], [ 89.0388739, 22.1508826 ], [ 89.037329, 22.1516776 ], [ 89.0371573, 22.1531085 ], [ 89.037844, 22.1550163 ], [ 89.036814, 22.1539034 ], [ 89.0361273, 22.1527905 ], [ 89.0342391, 22.1543804 ], [ 89.0311492, 22.1570831 ], [ 89.0287459, 22.1597859 ], [ 89.0258277, 22.1634424 ], [ 89.0244544, 22.1653501 ], [ 89.0237677, 22.1656681 ], [ 89.0235961, 22.1670988 ], [ 89.0249694, 22.1718679 ], [ 89.0259993, 22.1747293 ], [ 89.027201, 22.1790213 ], [ 89.0275443, 22.1831542 ], [ 89.0277159, 22.1869691 ], [ 89.0270293, 22.1922144 ], [ 89.0263426, 22.1955522 ], [ 89.024626, 22.1995257 ], [ 89.0232527, 22.2025454 ], [ 89.0213645, 22.2042937 ], [ 89.0196479, 22.2060419 ] ] ], [ [ [ 88.0483923, 21.9155833 ], [ 88.0483923, 21.9164495 ], [ 88.0485196, 21.9170204 ], [ 88.0486894, 21.9179457 ], [ 88.0490365, 21.9194885 ], [ 88.0493693, 21.9203003 ], [ 88.0495788, 21.9211235 ], [ 88.0498869, 21.9235587 ], [ 88.0501457, 21.9245991 ], [ 88.0503552, 21.9260625 ], [ 88.0505277, 21.9270686 ], [ 88.0504785, 21.9274116 ], [ 88.050614, 21.9279718 ], [ 88.0506263, 21.9286691 ], [ 88.0508975, 21.9291607 ], [ 88.0511193, 21.9296981 ], [ 88.0510207, 21.9299267 ], [ 88.0509714, 21.9303611 ], [ 88.051033, 21.9308184 ], [ 88.0511316, 21.9313329 ], [ 88.0512179, 21.9319159 ], [ 88.0513781, 21.9321332 ], [ 88.0515014, 21.9323732 ], [ 88.0515137, 21.9330477 ], [ 88.0515137, 21.9338023 ], [ 88.0514767, 21.9346597 ], [ 88.0514644, 21.9352084 ], [ 88.0514644, 21.9356885 ], [ 88.0514151, 21.9361801 ], [ 88.0514767, 21.9368317 ], [ 88.051526, 21.9374719 ], [ 88.0516493, 21.9382721 ], [ 88.0517232, 21.9392781 ], [ 88.0520806, 21.9406728 ], [ 88.0523024, 21.9420789 ], [ 88.0530665, 21.9449367 ], [ 88.0545454, 21.9503664 ], [ 88.0553835, 21.9526411 ], [ 88.0557655, 21.9535099 ], [ 88.0560367, 21.9544015 ], [ 88.056924, 21.9569619 ], [ 88.0576142, 21.9587678 ], [ 88.0597832, 21.9647914 ], [ 88.0599804, 21.9656143 ], [ 88.0603378, 21.9663801 ], [ 88.0613361, 21.9688831 ], [ 88.0618414, 21.9702318 ], [ 88.0622604, 21.9718433 ], [ 88.0625685, 21.9725176 ], [ 88.062815, 21.9729176 ], [ 88.0635175, 21.9748834 ], [ 88.0635421, 21.9755462 ], [ 88.0636777, 21.9759234 ], [ 88.0638379, 21.9762434 ], [ 88.0642323, 21.9767691 ], [ 88.0649717, 21.9779577 ], [ 88.0651935, 21.9790663 ], [ 88.0662165, 21.9813976 ], [ 88.0681951, 21.9852307 ], [ 88.0686935, 21.9863474 ], [ 88.0694569, 21.9872034 ], [ 88.0699718, 21.987829 ], [ 88.0703801, 21.9898869 ], [ 88.070966, 21.9910393 ], [ 88.0715874, 21.9918624 ], [ 88.0723361, 21.9932837 ], [ 88.0740376, 21.9962414 ], [ 88.0754934, 21.9987107 ], [ 88.076872, 22.0007889 ], [ 88.0781744, 22.0027274 ], [ 88.0804454, 22.0052871 ], [ 88.0823204, 22.0072539 ], [ 88.0841279, 22.0091975 ], [ 88.0853132, 22.0100811 ], [ 88.0859232, 22.0107204 ], [ 88.0865385, 22.011148 ], [ 88.087175, 22.0116412 ], [ 88.0878294, 22.0120647 ], [ 88.0883739, 22.0124056 ], [ 88.0888173, 22.0127454 ], [ 88.08927, 22.01316 ], [ 88.0906881, 22.0138621 ], [ 88.0925298, 22.0149508 ], [ 88.0944411, 22.0158429 ], [ 88.0974259, 22.0170091 ], [ 88.1003511, 22.0182156 ], [ 88.1019456, 22.0180002 ], [ 88.1035933, 22.0168735 ], [ 88.1045066, 22.0162311 ], [ 88.1064983, 22.0162193 ], [ 88.1079081, 22.0160383 ], [ 88.1099552, 22.0159983 ], [ 88.1118074, 22.0161698 ], [ 88.1132174, 22.0163602 ], [ 88.1142072, 22.0164936 ], [ 88.1153545, 22.0166154 ], [ 88.1157723, 22.0165921 ], [ 88.1162221, 22.0167082 ], [ 88.1166421, 22.0168644 ], [ 88.11717, 22.01696 ], [ 88.1191445, 22.0174647 ], [ 88.1197402, 22.0176447 ], [ 88.1208566, 22.0181157 ], [ 88.1232377, 22.0190361 ], [ 88.1261534, 22.020107 ], [ 88.1282491, 22.0207824 ], [ 88.1297236, 22.0213131 ], [ 88.131059, 22.0219224 ], [ 88.13224, 22.02245 ], [ 88.1326785, 22.022772 ], [ 88.13328, 22.02294 ], [ 88.1340344, 22.0234703 ], [ 88.1349221, 22.0238571 ], [ 88.1353217, 22.0240287 ], [ 88.1357474, 22.0241222 ], [ 88.1358879, 22.0243103 ], [ 88.1363274, 22.0244369 ], [ 88.13693, 22.02479 ], [ 88.13727, 22.02486 ], [ 88.1374, 22.02507 ], [ 88.13809, 22.02528 ], [ 88.13928, 22.02587 ], [ 88.13973, 22.02579 ], [ 88.14011, 22.02578 ], [ 88.14044, 22.02588 ], [ 88.14066, 22.02606 ], [ 88.14086, 22.02635 ], [ 88.14091, 22.02651 ], [ 88.1409867, 22.026401 ], [ 88.1414539, 22.0258236 ], [ 88.1416591, 22.0256267 ], [ 88.1418857, 22.0254824 ], [ 88.1424095, 22.0253446 ], [ 88.1429474, 22.0252593 ], [ 88.143542, 22.025233 ], [ 88.1441366, 22.0251412 ], [ 88.1444763, 22.0251018 ], [ 88.1447524, 22.024964 ], [ 88.1447949, 22.0247803 ], [ 88.1446462, 22.0246162 ], [ 88.144441, 22.02438 ], [ 88.144087, 22.0241241 ], [ 88.1437685, 22.023855 ], [ 88.1435066, 22.0235729 ], [ 88.1431598, 22.0233104 ], [ 88.1428483, 22.0231398 ], [ 88.1425298, 22.0227658 ], [ 88.1422537, 22.0225492 ], [ 88.1419706, 22.0223196 ], [ 88.1417158, 22.0219127 ], [ 88.141376, 22.021834 ], [ 88.1409159, 22.0211909 ], [ 88.1405832, 22.0209219 ], [ 88.1403284, 22.0206134 ], [ 88.1391817, 22.0194716 ], [ 88.1385942, 22.0188089 ], [ 88.1379642, 22.0181461 ], [ 88.1371573, 22.0176014 ], [ 88.1368317, 22.0172733 ], [ 88.1366052, 22.0168993 ], [ 88.1353366, 22.0154281 ], [ 88.1348853, 22.0149286 ], [ 88.1341898, 22.0142005 ], [ 88.1338062, 22.0134773 ], [ 88.1326204, 22.0117677 ], [ 88.1313545, 22.0099381 ], [ 88.130426, 22.0088052 ], [ 88.1291874, 22.0065255 ], [ 88.1282045, 22.005038 ], [ 88.1274804, 22.00389 ], [ 88.1267167, 22.0023961 ], [ 88.1264088, 22.0018946 ], [ 88.125917, 22.0011894 ], [ 88.125037, 21.9998622 ], [ 88.1242794, 21.9986782 ], [ 88.1233956, 21.9972543 ], [ 88.1222788, 21.9954537 ], [ 88.1208864, 21.992944 ], [ 88.1199241, 21.991752 ], [ 88.1192348, 21.990754 ], [ 88.1189046, 21.9902329 ], [ 88.1185843, 21.9898569 ], [ 88.1181562, 21.9892985 ], [ 88.1176959, 21.9885205 ], [ 88.1169233, 21.9873365 ], [ 88.115428, 21.984958 ], [ 88.1141471, 21.9832617 ], [ 88.1131522, 21.9820424 ], [ 88.1119071, 21.9798805 ], [ 88.1114169, 21.9788745 ], [ 88.1109651, 21.9778982 ], [ 88.1103451, 21.9769023 ], [ 88.1093993, 21.9754899 ], [ 88.1082492, 21.9738809 ], [ 88.1076126, 21.9727297 ], [ 88.1069253, 21.9718404 ], [ 88.106197, 21.9707129 ], [ 88.1055081, 21.9686213 ], [ 88.1050202, 21.9686589 ], [ 88.1045816, 21.968154 ], [ 88.1042093, 21.9669423 ], [ 88.102596, 21.9651531 ], [ 88.1006812, 21.962731 ], [ 88.0984882, 21.9595738 ], [ 88.0975339, 21.9585039 ], [ 88.0969743, 21.9571714 ], [ 88.0950735, 21.9541156 ], [ 88.0935261, 21.9519392 ], [ 88.0920137, 21.9500455 ], [ 88.0911013, 21.94815 ], [ 88.0900476, 21.9468332 ], [ 88.0895455, 21.945897 ], [ 88.0892936, 21.9450006 ], [ 88.08799, 21.94257 ], [ 88.08694, 21.94072 ], [ 88.0852744, 21.9393244 ], [ 88.0843195, 21.9380843 ], [ 88.082452, 21.93523 ], [ 88.0804148, 21.9324544 ], [ 88.0778046, 21.9285764 ], [ 88.0756825, 21.9259188 ], [ 88.0717779, 21.9237336 ], [ 88.0681279, 21.9207807 ], [ 88.0636927, 21.9188317 ], [ 88.0595546, 21.9170008 ], [ 88.0573688, 21.9160361 ], [ 88.054504, 21.9150517 ], [ 88.0532944, 21.9144414 ], [ 88.0518938, 21.9143823 ], [ 88.0498778, 21.9143429 ], [ 88.0491775, 21.9144611 ], [ 88.0485833, 21.914973 ], [ 88.0483923, 21.9155833 ] ] ], [ [ [ 88.5937982, 21.9865487 ], [ 88.5960298, 21.9863895 ], [ 88.5967164, 21.9876629 ], [ 88.597918, 21.9890955 ], [ 88.599463, 21.989573 ], [ 88.600493, 21.9908464 ], [ 88.6015229, 21.9918014 ], [ 88.6020379, 21.993234 ], [ 88.6027245, 21.9953031 ], [ 88.6039262, 21.9965765 ], [ 88.6058145, 21.9976906 ], [ 88.6042695, 21.9948256 ], [ 88.6032395, 21.9911647 ], [ 88.6018662, 21.985912 ], [ 88.6001496, 21.9795447 ], [ 88.5986047, 21.9709485 ], [ 88.5986047, 21.9666502 ], [ 88.6001496, 21.9602821 ], [ 88.6022096, 21.9567795 ], [ 88.6049561, 21.9507294 ], [ 88.6077027, 21.9456344 ], [ 88.611136, 21.9419722 ], [ 88.6133676, 21.9392653 ], [ 88.6145692, 21.9370361 ], [ 88.6147408, 21.935603 ], [ 88.6138825, 21.9335329 ], [ 88.6126809, 21.932259 ], [ 88.611136, 21.9319406 ], [ 88.609591, 21.9320998 ], [ 88.6070161, 21.9333737 ], [ 88.6051278, 21.9344884 ], [ 88.6034112, 21.9346476 ], [ 88.6013513, 21.9362399 ], [ 88.6001496, 21.9381507 ], [ 88.598948, 21.9403799 ], [ 88.5977464, 21.943246 ], [ 88.5955148, 21.9472266 ], [ 88.5939698, 21.9496149 ], [ 88.593695918214109, 21.949773668870421 ], [ 88.5925965, 21.950411 ], [ 88.5900216, 21.9518439 ], [ 88.5865884, 21.9537545 ], [ 88.5836701, 21.9555058 ], [ 88.5792069, 21.9580532 ], [ 88.5773187, 21.9594861 ], [ 88.577662, 21.9617149 ], [ 88.5773187, 21.963307 ], [ 88.577147, 21.9660134 ], [ 88.5768037, 21.968879 ], [ 88.5762887, 21.9720629 ], [ 88.576117, 21.9747691 ], [ 88.576632, 21.9765202 ], [ 88.5769753, 21.978908 ], [ 88.577662, 21.9800223 ], [ 88.5790353, 21.9816141 ], [ 88.5798936, 21.9825692 ], [ 88.5814385, 21.9832059 ], [ 88.5828118, 21.984161 ], [ 88.5838418, 21.9847977 ], [ 88.5847001, 21.9860712 ], [ 88.5860734, 21.9871854 ], [ 88.5869317, 21.9881404 ], [ 88.5889916, 21.9881404 ], [ 88.5903649, 21.9878221 ], [ 88.5919099, 21.9871854 ], [ 88.59365, 21.986598670311921 ], [ 88.5937982, 21.9865487 ] ] ], [ [ [ 88.9688092, 21.9207516 ], [ 88.9694959, 21.9226626 ], [ 88.9710408, 21.9240958 ], [ 88.9718991, 21.9263252 ], [ 88.9724141, 21.9282361 ], [ 88.9720708, 21.9298285 ], [ 88.9698392, 21.9315802 ], [ 88.9676076, 21.9326948 ], [ 88.9657193, 21.933491 ], [ 88.9650327, 21.9342872 ], [ 88.966406, 21.9352426 ], [ 88.9679509, 21.9358796 ], [ 88.9724141, 21.9369942 ], [ 88.975504, 21.9379496 ], [ 88.977049, 21.9393826 ], [ 88.9773923, 21.9412934 ], [ 88.9767057, 21.9441595 ], [ 88.9782506, 21.9584889 ], [ 88.9777356, 21.9596034 ], [ 88.977049, 21.9605586 ], [ 88.975504, 21.9602402 ], [ 88.9727574, 21.960877 ], [ 88.9710408, 21.9619915 ], [ 88.9684659, 21.9621507 ], [ 88.9665776, 21.9615138 ], [ 88.964861, 21.9619915 ], [ 88.9636594, 21.9631059 ], [ 88.9633161, 21.9650163 ], [ 88.964861, 21.9674043 ], [ 88.9667493, 21.9685187 ], [ 88.9682943, 21.9699514 ], [ 88.9696675, 21.9701106 ], [ 88.9705259, 21.9713842 ], [ 88.9696675, 21.9729761 ], [ 88.9684659, 21.9737721 ], [ 88.966406, 21.9742497 ], [ 88.964346, 21.974568 ], [ 88.9624578, 21.9760007 ], [ 88.9610845, 21.9772742 ], [ 88.9588529, 21.9785477 ], [ 88.9591962, 21.9799804 ], [ 88.9593679, 21.981413 ], [ 88.9619428, 21.9815722 ], [ 88.9641744, 21.9817314 ], [ 88.9670926, 21.9820498 ], [ 88.9694959, 21.9823681 ], [ 88.9710408, 21.9836416 ], [ 88.9731008, 21.9855517 ], [ 88.9736158, 21.9865068 ], [ 88.9758474, 21.9858701 ], [ 88.9784223, 21.9853926 ], [ 88.9821988, 21.984915 ], [ 88.9851171, 21.9845967 ], [ 88.9864904, 21.9844375 ], [ 88.9875203, 21.9833232 ], [ 88.9873487, 21.9817314 ], [ 88.987177, 21.9785477 ], [ 88.9873487, 21.9760007 ], [ 88.987692, 21.9739313 ], [ 88.9883786, 21.9723394 ], [ 88.9895803, 21.9710658 ], [ 88.9909536, 21.970429 ], [ 88.9933568, 21.9696331 ], [ 88.9957601, 21.9702698 ], [ 89.0064031, 21.9798212 ], [ 89.0082914, 21.9810947 ], [ 89.0103513, 21.9815722 ], [ 89.0120679, 21.9810947 ], [ 89.0132695, 21.9799804 ], [ 89.0141278, 21.9783885 ], [ 89.0141278, 21.9774334 ], [ 89.0139562, 21.9760007 ], [ 89.0125829, 21.974568 ], [ 89.0106946, 21.9724985 ], [ 89.0081197, 21.9705882 ], [ 89.0062314, 21.9694739 ], [ 89.0041715, 21.9675635 ], [ 89.0021115, 21.9661307 ], [ 89.0007383, 21.9650163 ], [ 88.9995366, 21.9640611 ], [ 88.9985067, 21.9637427 ], [ 88.997305, 21.9627875 ], [ 88.9959317, 21.9615138 ], [ 88.9947301, 21.9597626 ], [ 88.9930135, 21.9572152 ], [ 88.9919835, 21.9553047 ], [ 88.9918119, 21.9519612 ], [ 88.9914685, 21.9492545 ], [ 88.9914685, 21.9473439 ], [ 88.9928418, 21.9447964 ], [ 88.9947301, 21.9425672 ], [ 88.9966184, 21.9408157 ], [ 88.9986783, 21.9397011 ], [ 89.0022832, 21.9377903 ], [ 89.0069181, 21.936198 ], [ 89.010008, 21.9350834 ], [ 89.0113813, 21.9339687 ], [ 89.0127546, 21.9328541 ], [ 89.0144712, 21.930784 ], [ 89.0165311, 21.9290323 ], [ 89.0187627, 21.9252105 ], [ 89.0199643, 21.9226626 ], [ 89.0209943, 21.9209108 ], [ 89.021166, 21.9201146 ], [ 89.0215093, 21.918522 ], [ 89.0199643, 21.9142221 ], [ 89.0187627, 21.9131073 ], [ 89.0175611, 21.9102406 ], [ 89.0167028, 21.9088073 ], [ 89.0153295, 21.908011 ], [ 89.0151578, 21.9064183 ], [ 89.0151578, 21.9040293 ], [ 89.0144712, 21.9024366 ], [ 89.0120679, 21.9025959 ], [ 89.0088063, 21.9025959 ], [ 89.0048581, 21.9030737 ], [ 88.9998799, 21.9041886 ], [ 88.9971334, 21.9051442 ], [ 88.9947301, 21.9059405 ], [ 88.9904386, 21.9089665 ], [ 88.9821988, 21.9145407 ], [ 88.974989, 21.9186813 ], [ 88.9725858, 21.9196368 ], [ 88.9708692, 21.9201146 ], [ 88.9688092, 21.9207516 ] ] ], [ [ [ 88.7501817, 21.9825692 ], [ 88.7512116, 21.9840018 ], [ 88.7529283, 21.9844794 ], [ 88.7543015, 21.9849569 ], [ 88.7555032, 21.9852753 ], [ 88.7570481, 21.9846386 ], [ 88.7594514, 21.984161 ], [ 88.7625413, 21.9836835 ], [ 88.7656312, 21.9840018 ], [ 88.7688928, 21.9852753 ], [ 88.7700944, 21.9863895 ], [ 88.7711244, 21.9879813 ], [ 88.772326, 21.9894138 ], [ 88.7736993, 21.9894138 ], [ 88.7752442, 21.9887771 ], [ 88.7767892, 21.9876629 ], [ 88.7778192, 21.9863895 ], [ 88.7793641, 21.9854344 ], [ 88.7802224, 21.9840018 ], [ 88.7812524, 21.9836835 ], [ 88.7831407, 21.9827284 ], [ 88.7836556, 21.9812958 ], [ 88.7826257, 21.9801815 ], [ 88.7809091, 21.9784304 ], [ 88.7805657, 21.9769978 ], [ 88.7809091, 21.9749283 ], [ 88.781939, 21.9731772 ], [ 88.7836556, 21.9723813 ], [ 88.7857156, 21.9717445 ], [ 88.7889771, 21.9709485 ], [ 88.7927537, 21.9703117 ], [ 88.7967019, 21.9706301 ], [ 88.8015084, 21.9698341 ], [ 88.8045983, 21.9691974 ], [ 88.8070016, 21.9690382 ], [ 88.8130097, 21.9690382 ], [ 88.8174729, 21.9695158 ], [ 88.8193612, 21.9706301 ], [ 88.8209062, 21.9715853 ], [ 88.8231378, 21.973018 ], [ 88.8251977, 21.9741324 ], [ 88.826571, 21.9742915 ], [ 88.8291459, 21.9755651 ], [ 88.8305192, 21.9768386 ], [ 88.8329225, 21.9777937 ], [ 88.8344674, 21.9782713 ], [ 88.8365273, 21.9785896 ], [ 88.8380723, 21.9784304 ], [ 88.8396172, 21.9777937 ], [ 88.8409905, 21.976361 ], [ 88.8421922, 21.9747691 ], [ 88.8435655, 21.9703117 ], [ 88.8433938, 21.9676054 ], [ 88.8425355, 21.962511 ], [ 88.8423638, 21.9604413 ], [ 88.8411622, 21.9588492 ], [ 88.8399606, 21.9561427 ], [ 88.8392739, 21.9531176 ], [ 88.8385873, 21.9502518 ], [ 88.8387589, 21.9448383 ], [ 88.8397889, 21.9424499 ], [ 88.8413339, 21.939743 ], [ 88.8437371, 21.9379915 ], [ 88.8466554, 21.9362399 ], [ 88.8499169, 21.9352845 ], [ 88.8660531, 21.9309851 ], [ 88.8672547, 21.9303482 ], [ 88.869143, 21.9290743 ], [ 88.870173, 21.9274818 ], [ 88.870173, 21.9257302 ], [ 88.8698297, 21.9238192 ], [ 88.869143, 21.922386 ], [ 88.8682847, 21.9214305 ], [ 88.8660531, 21.9209527 ], [ 88.8624482, 21.919838 ], [ 88.859015, 21.9190417 ], [ 88.8567834, 21.9188825 ], [ 88.8548951, 21.919201 ], [ 88.8457971, 21.922386 ], [ 88.8439088, 21.9228637 ], [ 88.8421922, 21.9242969 ], [ 88.838244, 21.9297112 ], [ 88.836699, 21.9316221 ], [ 88.8353257, 21.9330552 ], [ 88.8334374, 21.9346476 ], [ 88.8310342, 21.9368769 ], [ 88.8296609, 21.9378322 ], [ 88.827086, 21.9391061 ], [ 88.8248544, 21.9394246 ], [ 88.8226228, 21.9400615 ], [ 88.8203912, 21.9410168 ], [ 88.8176446, 21.9410168 ], [ 88.814383, 21.9403799 ], [ 88.8123231, 21.9395838 ], [ 88.8121514, 21.9410168 ], [ 88.8126664, 21.943246 ], [ 88.8130097, 21.9454751 ], [ 88.8128381, 21.9473858 ], [ 88.8124948, 21.9486596 ], [ 88.8119798, 21.9499333 ], [ 88.8119798, 21.9527992 ], [ 88.8118081, 21.9540729 ], [ 88.8109498, 21.9524808 ], [ 88.8107781, 21.9496149 ], [ 88.8118081, 21.946112 ], [ 88.8111215, 21.9424499 ], [ 88.8099198, 21.9392653 ], [ 88.8088899, 21.9391061 ], [ 88.8070016, 21.9394246 ], [ 88.8049417, 21.9400615 ], [ 88.8028817, 21.9411761 ], [ 88.8015084, 21.9416537 ], [ 88.7989335, 21.941813 ], [ 88.7958436, 21.941813 ], [ 88.794127, 21.9413353 ], [ 88.7918954, 21.9411761 ], [ 88.7903504, 21.941813 ], [ 88.7901788, 21.9427683 ], [ 88.7896638, 21.9443606 ], [ 88.7900071, 21.9469081 ], [ 88.7903504, 21.948978 ], [ 88.7903504, 21.9515255 ], [ 88.7900071, 21.9527992 ], [ 88.7879472, 21.9543913 ], [ 88.7870889, 21.9550282 ], [ 88.7853723, 21.9547098 ], [ 88.783999, 21.9540729 ], [ 88.782969, 21.95264 ], [ 88.7810807, 21.9500925 ], [ 88.7795358, 21.9472266 ], [ 88.7781625, 21.944679 ], [ 88.7771325, 21.9427683 ], [ 88.7749009, 21.9435645 ], [ 88.7731843, 21.944679 ], [ 88.7697511, 21.9464305 ], [ 88.7683778, 21.9477042 ], [ 88.7661462, 21.9492964 ], [ 88.7640862, 21.9513663 ], [ 88.761683, 21.9529584 ], [ 88.7592797, 21.9539137 ], [ 88.7551599, 21.9551874 ], [ 88.7530999, 21.955665 ], [ 88.7522416, 21.9563019 ], [ 88.7520699, 21.957894 ], [ 88.7532716, 21.9606005 ], [ 88.7546449, 21.9645806 ], [ 88.7567048, 21.9691974 ], [ 88.7573914, 21.9722221 ], [ 88.7575631, 21.973814 ], [ 88.7570481, 21.9750875 ], [ 88.7561898, 21.9768386 ], [ 88.7544732, 21.9781121 ], [ 88.7534432, 21.9793856 ], [ 88.7518983, 21.980659 ], [ 88.7506967, 21.9814549 ], [ 88.7501817, 21.9825692 ] ] ], [ [ [ 89.0058881, 21.9860293 ], [ 89.0091497, 21.9873027 ], [ 89.0125829, 21.9892128 ], [ 89.0158445, 21.991282 ], [ 89.0177327, 21.9933512 ], [ 89.019621, 21.9951021 ], [ 89.0245992, 21.9954204 ], [ 89.0280324, 21.9957387 ], [ 89.030264, 21.9958979 ], [ 89.0321523, 21.9981262 ], [ 89.0330106, 21.9997179 ], [ 89.031809, 22.0011503 ], [ 89.0333539, 22.0029011 ], [ 89.0357572, 22.0051293 ], [ 89.0373021, 22.0065617 ], [ 89.0393621, 22.0084715 ], [ 89.0402204, 22.0103813 ], [ 89.040907, 22.0119728 ], [ 89.0433103, 22.013246 ], [ 89.0522367, 22.0134051 ], [ 89.0554982, 22.0124502 ], [ 89.0615064, 22.0113362 ], [ 89.0656263, 22.0113362 ], [ 89.0687162, 22.0111771 ], [ 89.0699178, 22.0097447 ], [ 89.0709478, 22.0084715 ], [ 89.0719777, 22.0065617 ], [ 89.0736943, 22.0035377 ], [ 89.0750676, 21.9974896 ], [ 89.0759259, 21.9949429 ], [ 89.0766126, 21.992237 ], [ 89.0771276, 21.9895311 ], [ 89.0778142, 21.9863476 ], [ 89.0776426, 21.9833232 ], [ 89.0774709, 21.9804579 ], [ 89.0767842, 21.9790253 ], [ 89.0752393, 21.9752048 ], [ 89.0735227, 21.9705882 ], [ 89.0730077, 21.9688371 ], [ 89.0719777, 21.970429 ], [ 89.0711194, 21.972021 ], [ 89.0707761, 21.9764783 ], [ 89.0712911, 21.9823681 ], [ 89.0711194, 21.9834824 ], [ 89.0699178, 21.9847558 ], [ 89.0676862, 21.9852334 ], [ 89.0651113, 21.9853926 ], [ 89.0596181, 21.984915 ], [ 89.0524083, 21.9841191 ], [ 89.0494901, 21.9836416 ], [ 89.051035, 21.9833232 ], [ 89.0597898, 21.9842783 ], [ 89.0652829, 21.9847558 ], [ 89.0675145, 21.9845967 ], [ 89.0697461, 21.9838008 ], [ 89.0704328, 21.9825273 ], [ 89.0699178, 21.9764783 ], [ 89.0703469, 21.9719414 ], [ 89.0712911, 21.9694739 ], [ 89.0721494, 21.9674043 ], [ 89.0712911, 21.9643795 ], [ 89.0711194, 21.960081 ], [ 89.0704328, 21.9561008 ], [ 89.0695745, 21.9510059 ], [ 89.0682012, 21.9465478 ], [ 89.0657979, 21.9411342 ], [ 89.064253, 21.9366757 ], [ 89.0625363, 21.9339687 ], [ 89.0606536, 21.9327275 ], [ 89.0579015, 21.9322171 ], [ 89.0548116, 21.9312617 ], [ 89.05155, 21.930147 ], [ 89.0506917, 21.9314209 ], [ 89.0491468, 21.9326948 ], [ 89.0474301, 21.9330133 ], [ 89.0453702, 21.9330133 ], [ 89.0438253, 21.9326948 ], [ 89.0426236, 21.9339687 ], [ 89.0426236, 21.9360388 ], [ 89.0422803, 21.9476623 ], [ 89.0415937, 21.946707 ], [ 89.0417653, 21.9366757 ], [ 89.0415937, 21.9336503 ], [ 89.0433103, 21.9318987 ], [ 89.0455419, 21.9322171 ], [ 89.0474301, 21.9322171 ], [ 89.0481168, 21.9317394 ], [ 89.0484601, 21.9303063 ], [ 89.0489751, 21.9296693 ], [ 89.0481168, 21.9290323 ], [ 89.0446836, 21.9285546 ], [ 89.0393621, 21.9282361 ], [ 89.0369588, 21.9274399 ], [ 89.0335256, 21.9266437 ], [ 89.031809, 21.9264845 ], [ 89.0304357, 21.9264845 ], [ 89.0258008, 21.9309432 ], [ 89.020651, 21.9365165 ], [ 89.0163594, 21.9395419 ], [ 89.0130979, 21.9408157 ], [ 89.008978, 21.942408 ], [ 89.0060598, 21.9433633 ], [ 89.0039998, 21.9447964 ], [ 89.0014249, 21.9468662 ], [ 89.0003949, 21.9487769 ], [ 88.9998799, 21.9521204 ], [ 89.0010816, 21.9561008 ], [ 89.0173894, 21.9723394 ], [ 89.0184194, 21.9750456 ], [ 89.0184194, 21.9775926 ], [ 89.0177327, 21.9809355 ], [ 89.0156728, 21.9834824 ], [ 89.0132695, 21.984915 ], [ 89.0106946, 21.9857109 ], [ 89.0091497, 21.9852334 ], [ 89.0076047, 21.9850742 ], [ 89.0058881, 21.9853926 ], [ 89.0058881, 21.9860293 ] ] ], [ [ [ 88.9459366, 22.002128 ], [ 88.9469665, 22.0016505 ], [ 88.9488548, 22.0005364 ], [ 88.9503998, 21.9995814 ], [ 88.9519447, 21.9989448 ], [ 88.954863, 21.9986264 ], [ 88.9557213, 21.9978306 ], [ 88.9564079, 21.9965573 ], [ 88.9584679, 21.9949656 ], [ 88.9603561, 21.9944881 ], [ 88.963446, 21.994329 ], [ 88.9665359, 21.9940106 ], [ 88.9677376, 21.9932148 ], [ 88.9684242, 21.9911456 ], [ 88.9691109, 21.989713 ], [ 88.9701408, 21.9885988 ], [ 88.9718574, 21.9876437 ], [ 88.9720291, 21.986052 ], [ 88.9691109, 21.9831868 ], [ 88.9608711, 21.98255 ], [ 88.9586395, 21.9822317 ], [ 88.9582962, 21.980799 ], [ 88.9574379, 21.979048 ], [ 88.9589828, 21.9776153 ], [ 88.9596695, 21.9769786 ], [ 88.9610428, 21.9757051 ], [ 88.963446, 21.9741132 ], [ 88.9668793, 21.9733172 ], [ 88.9689392, 21.9725213 ], [ 88.9691109, 21.9714069 ], [ 88.9675659, 21.9701334 ], [ 88.965506, 21.9687006 ], [ 88.9641327, 21.9672678 ], [ 88.9625877, 21.9655166 ], [ 88.9624161, 21.963447 ], [ 88.963961, 21.9615366 ], [ 88.9663643, 21.9607405 ], [ 88.9684242, 21.9612181 ], [ 88.9703125, 21.9615366 ], [ 88.9715141, 21.9608997 ], [ 88.9730591, 21.9601037 ], [ 88.9752907, 21.9596261 ], [ 88.9770073, 21.95883 ], [ 88.9754623, 21.9438637 ], [ 88.9764923, 21.941953 ], [ 88.976149, 21.9408384 ], [ 88.975634, 21.9395646 ], [ 88.9742607, 21.9386092 ], [ 88.9709991, 21.9379723 ], [ 88.9677376, 21.9368577 ], [ 88.9653343, 21.93638 ], [ 88.9631027, 21.9351061 ], [ 88.9610428, 21.9363004 ], [ 88.959412, 21.9380519 ], [ 88.9590687, 21.939485 ], [ 88.9590687, 21.9409977 ], [ 88.9596695, 21.9433064 ], [ 88.9603561, 21.9456948 ], [ 88.9592403, 21.9475258 ], [ 88.9584679, 21.9481627 ], [ 88.9576096, 21.9481627 ], [ 88.9588112, 21.9470482 ], [ 88.9598412, 21.945456 ], [ 88.9591545, 21.9432268 ], [ 88.9584679, 21.9406792 ], [ 88.9584679, 21.9389277 ], [ 88.9591545, 21.9371761 ], [ 88.9610428, 21.9354246 ], [ 88.9629311, 21.9344692 ], [ 88.9636177, 21.9328768 ], [ 88.9653343, 21.9317621 ], [ 88.9677376, 21.9306475 ], [ 88.9703125, 21.9292143 ], [ 88.9703125, 21.9282589 ], [ 88.9699692, 21.9269849 ], [ 88.9682526, 21.9253925 ], [ 88.9670509, 21.924437 ], [ 88.9661926, 21.9226853 ], [ 88.9619011, 21.9241185 ], [ 88.954863, 21.9260295 ], [ 88.9498848, 21.9277811 ], [ 88.9445633, 21.9295328 ], [ 88.9414734, 21.9320806 ], [ 88.9378685, 21.9351061 ], [ 88.9356369, 21.9379723 ], [ 88.933577, 21.9395646 ], [ 88.9322037, 21.9417938 ], [ 88.931002, 21.9443414 ], [ 88.9308304, 21.9472074 ], [ 88.9311737, 21.9495957 ], [ 88.9301437, 21.949118 ], [ 88.9289421, 21.9537353 ], [ 88.9273972, 21.9589893 ], [ 88.9265388, 21.9624918 ], [ 88.9275688, 21.9637654 ], [ 88.9291138, 21.9656758 ], [ 88.9313454, 21.9664718 ], [ 88.9337486, 21.967427 ], [ 88.9351219, 21.9693374 ], [ 88.9380402, 21.9723621 ], [ 88.9411301, 21.9750683 ], [ 88.943705, 21.9788888 ], [ 88.9454216, 21.9820725 ], [ 88.9469665, 21.9862112 ], [ 88.9474815, 21.9901905 ], [ 88.9476532, 21.9941698 ], [ 88.9473099, 21.9973531 ], [ 88.9467949, 21.9994222 ], [ 88.9459366, 22.002128 ] ] ], [ [ [ 88.650068, 21.972946 ], [ 88.6562478, 21.963235 ], [ 88.658651, 21.9627574 ], [ 88.6617409, 21.964031 ], [ 88.6632859, 21.9651454 ], [ 88.6648308, 21.9659414 ], [ 88.6665474, 21.9653046 ], [ 88.6665474, 21.9638718 ], [ 88.6653458, 21.9616429 ], [ 88.6648308, 21.9592549 ], [ 88.6655175, 21.9567075 ], [ 88.6672341, 21.9536825 ], [ 88.6684357, 21.9517719 ], [ 88.6704957, 21.9506574 ], [ 88.6728989, 21.9508166 ], [ 88.6765038, 21.9514535 ], [ 88.6835419, 21.9527272 ], [ 88.6857735, 21.9527272 ], [ 88.6878335, 21.9520903 ], [ 88.6868035, 21.951135 ], [ 88.6850869, 21.9500205 ], [ 88.6830269, 21.948906 ], [ 88.68169, 21.94717 ], [ 88.67876, 21.94401 ], [ 88.6771, 21.94354 ], [ 88.67336, 21.94639 ], [ 88.66867, 21.9494 ], [ 88.66571, 21.95077 ], [ 88.66368, 21.95256 ], [ 88.66057, 21.95368 ], [ 88.65667, 21.95462 ], [ 88.65446, 21.95459 ], [ 88.6512, 21.95444 ], [ 88.64337, 21.9544 ], [ 88.64139, 21.9536 ], [ 88.63994, 21.9526 ], [ 88.63822, 21.9513 ], [ 88.63587, 21.9512 ], [ 88.63411, 21.95169 ], [ 88.63295, 21.95268 ], [ 88.63109, 21.95529 ], [ 88.62928, 21.95772 ], [ 88.62875, 21.95974 ], [ 88.6285, 21.96302 ], [ 88.62862, 21.96548 ], [ 88.62913, 21.96866 ], [ 88.6305, 21.97445 ], [ 88.63117, 21.97782 ], [ 88.63157, 21.98274 ], [ 88.63246, 21.98659 ], [ 88.63479, 21.9958 ], [ 88.6387383, 21.9982553 ], [ 88.6419999, 22.0000061 ], [ 88.6430298, 22.0014385 ], [ 88.6438881, 22.0033484 ], [ 88.6452614, 22.0044625 ], [ 88.6466347, 22.00494 ], [ 88.648008, 22.0046217 ], [ 88.6504113, 22.0038259 ], [ 88.6526429, 22.0031893 ], [ 88.6529862, 22.0001653 ], [ 88.6535012, 21.997937 ], [ 88.6555611, 21.996982 ], [ 88.6576211, 21.9961862 ], [ 88.6598527, 21.9957087 ], [ 88.6617409, 21.98584 ], [ 88.6624276, 21.9839299 ], [ 88.6643159, 21.9829748 ], [ 88.6722123, 21.9809054 ], [ 88.6746155, 21.9807462 ], [ 88.6770188, 21.982338 ], [ 88.6783921, 21.9839299 ], [ 88.6790787, 21.9864767 ], [ 88.6795937, 21.9901377 ], [ 88.680452, 21.9920478 ], [ 88.6818253, 21.9925253 ], [ 88.6830269, 21.9925253 ], [ 88.6859452, 21.9914111 ], [ 88.6893784, 21.9883868 ], [ 88.6912667, 21.9856808 ], [ 88.6912667, 21.9842482 ], [ 88.6907517, 21.9820197 ], [ 88.6876618, 21.9783585 ], [ 88.6850869, 21.9750155 ], [ 88.6849152, 21.9734236 ], [ 88.6854302, 21.9723093 ], [ 88.6868035, 21.9708765 ], [ 88.6885201, 21.9697622 ], [ 88.6909234, 21.9681702 ], [ 88.6924683, 21.9670558 ], [ 88.69415, 21.96448 ], [ 88.6938416, 21.9598917 ], [ 88.6928116, 21.9565483 ], [ 88.6902367, 21.955593 ], [ 88.6868035, 21.954797 ], [ 88.6807953, 21.9536825 ], [ 88.6749589, 21.9524088 ], [ 88.6715256, 21.9514535 ], [ 88.6699807, 21.9514535 ], [ 88.6682641, 21.9543193 ], [ 88.6665474, 21.9576628 ], [ 88.6667191, 21.9597325 ], [ 88.6668908, 21.9622798 ], [ 88.6679207, 21.963235 ], [ 88.6677491, 21.9654638 ], [ 88.6667191, 21.9668966 ], [ 88.6643159, 21.9668966 ], [ 88.6619126, 21.9657822 ], [ 88.6600243, 21.9645086 ], [ 88.6588227, 21.9637126 ], [ 88.6564194, 21.9638718 ], [ 88.6504113, 21.9734236 ], [ 88.650068, 21.972946 ] ] ], [ [ [ 88.64641, 22.0073 ], [ 88.64687, 22.00952 ], [ 88.64872, 22.0129 ], [ 88.65094, 22.01604 ], [ 88.65298, 22.01782 ], [ 88.65358, 22.01804 ], [ 88.65752, 22.02041 ], [ 88.65841, 22.02027 ], [ 88.66187, 22.01841 ], [ 88.66593, 22.01705 ], [ 88.66745, 22.01711 ], [ 88.66899, 22.01768 ], [ 88.67222, 22.01874 ], [ 88.67416, 22.01876 ], [ 88.67572, 22.01834 ], [ 88.6815, 22.0149 ], [ 88.68411, 22.01385 ], [ 88.68711, 22.01289 ], [ 88.69099, 22.01188 ], [ 88.69297, 22.01043 ], [ 88.69747, 22.00559 ], [ 88.70174, 22.00327 ], [ 88.70698, 22.00191 ], [ 88.7103, 22.00192 ], [ 88.71371, 22.00139 ], [ 88.71547, 22.00093 ], [ 88.71535, 21.99992 ], [ 88.71272, 21.99596 ], [ 88.70935, 21.99365 ], [ 88.70259, 21.98641 ], [ 88.69894, 21.97984 ], [ 88.6965, 21.97691 ], [ 88.69455, 21.97343 ], [ 88.69345, 21.97014 ], [ 88.6909234, 21.9705581 ], [ 88.6881768, 21.9716725 ], [ 88.6864602, 21.973742 ], [ 88.6898934, 21.978836 ], [ 88.692125, 21.9820197 ], [ 88.6933266, 21.9844074 ], [ 88.692125, 21.9872726 ], [ 88.6898934, 21.9898194 ], [ 88.6856019, 21.9928436 ], [ 88.6828553, 21.9934803 ], [ 88.6802804, 21.9936395 ], [ 88.6790787, 21.992207 ], [ 88.6783921, 21.9899786 ], [ 88.6771905, 21.9847257 ], [ 88.6765038, 21.983134 ], [ 88.6749589, 21.9818605 ], [ 88.6728989, 21.9815421 ], [ 88.6679207, 21.9826564 ], [ 88.6636292, 21.984089 ], [ 88.6625992, 21.9875909 ], [ 88.6615693, 21.9918886 ], [ 88.6610543, 21.9947537 ], [ 88.6603676, 21.9965045 ], [ 88.6541878, 21.9982553 ], [ 88.6536728, 22.0031893 ], [ 88.6514412, 22.0046217 ], [ 88.6486947, 22.0052583 ], [ 88.6473214, 22.0055766 ], [ 88.6466347, 22.0066907 ], [ 88.64641, 22.0073 ] ] ], [ [ [ 88.9798998, 22.0383255 ], [ 88.9816164, 22.0407122 ], [ 88.983848, 22.0429398 ], [ 88.9852213, 22.044531 ], [ 88.9862513, 22.0464403 ], [ 88.9862513, 22.0491451 ], [ 88.985393, 22.0534409 ], [ 88.9852213, 22.0550319 ], [ 88.986423, 22.055191 ], [ 88.9883112, 22.0550319 ], [ 88.9896845, 22.0543955 ], [ 88.9914011, 22.0543955 ], [ 88.9929461, 22.0545546 ], [ 88.9951777, 22.055191 ], [ 88.9968943, 22.0559865 ], [ 88.9991259, 22.0571002 ], [ 89.0004992, 22.0580548 ], [ 89.0017008, 22.0588503 ], [ 89.0025591, 22.0575775 ], [ 89.0041041, 22.0547137 ], [ 89.0049624, 22.0531227 ], [ 89.0058207, 22.0516908 ], [ 89.007194, 22.050418 ], [ 89.0087389, 22.0505771 ], [ 89.0107989, 22.0521681 ], [ 89.0111422, 22.0547137 ], [ 89.0123438, 22.0577366 ], [ 89.0126871, 22.0596458 ], [ 89.0137171, 22.0610776 ], [ 89.0145754, 22.0620322 ], [ 89.0156054, 22.0625094 ], [ 89.0161204, 22.0618731 ], [ 89.0164637, 22.0607594 ], [ 89.0164637, 22.0590094 ], [ 89.0159487, 22.0569411 ], [ 89.015777, 22.0548728 ], [ 89.0159487, 22.0531227 ], [ 89.0159487, 22.0516908 ], [ 89.016292, 22.0507362 ], [ 89.0174937, 22.0502589 ], [ 89.0197253, 22.0497816 ], [ 89.0219569, 22.0497816 ], [ 89.0235018, 22.0507362 ], [ 89.0259051, 22.0508953 ], [ 89.0286517, 22.0510544 ], [ 89.0315699, 22.0505771 ], [ 89.0346598, 22.0502589 ], [ 89.037578, 22.0496225 ], [ 89.0398096, 22.0488269 ], [ 89.0413546, 22.0481905 ], [ 89.0420412, 22.0469176 ], [ 89.0428995, 22.044531 ], [ 89.0441012, 22.0423034 ], [ 89.0447878, 22.040394 ], [ 89.0458178, 22.0386437 ], [ 89.0468478, 22.0367343 ], [ 89.0478777, 22.034984 ], [ 89.0447878, 22.0365752 ], [ 89.0435862, 22.0368934 ], [ 89.0416979, 22.0362569 ], [ 89.0404963, 22.0351431 ], [ 89.0387797, 22.034984 ], [ 89.0365481, 22.0356204 ], [ 89.0346598, 22.0365752 ], [ 89.0325999, 22.0373708 ], [ 89.0319132, 22.0386437 ], [ 89.0305399, 22.0402349 ], [ 89.02951, 22.0411896 ], [ 89.0277933, 22.0416669 ], [ 89.0255617, 22.0421443 ], [ 89.0229868, 22.0424625 ], [ 89.0205836, 22.0416669 ], [ 89.0200686, 22.0391211 ], [ 89.0207981, 22.0395189 ], [ 89.0211844, 22.0412691 ], [ 89.0229868, 22.0420249 ], [ 89.0254759, 22.0417465 ], [ 89.0276646, 22.0412691 ], [ 89.0292525, 22.0407122 ], [ 89.0301966, 22.0399167 ], [ 89.0314841, 22.0384846 ], [ 89.0322136, 22.037331 ], [ 89.034574, 22.0362569 ], [ 89.0363764, 22.035342 ], [ 89.0387797, 22.0345861 ], [ 89.0405821, 22.034785 ], [ 89.0419125, 22.036058 ], [ 89.0436291, 22.0365752 ], [ 89.0446162, 22.0362967 ], [ 89.047749, 22.0343077 ], [ 89.0506243, 22.0318015 ], [ 89.0544009, 22.027505 ], [ 89.0566325, 22.0247998 ], [ 89.0602373, 22.021617 ], [ 89.0636706, 22.0176386 ], [ 89.0667605, 22.0142965 ], [ 89.0683054, 22.0123868 ], [ 89.0657305, 22.0119093 ], [ 89.0624689, 22.0120685 ], [ 89.0576624, 22.0130234 ], [ 89.0550875, 22.0138191 ], [ 89.051311, 22.0142965 ], [ 89.0483927, 22.0142965 ], [ 89.0456461, 22.0142965 ], [ 89.0430712, 22.0142965 ], [ 89.0413546, 22.0135008 ], [ 89.0398096, 22.0120685 ], [ 89.038608, 22.0099995 ], [ 89.0372347, 22.0079306 ], [ 89.0346598, 22.0057024 ], [ 89.0322565, 22.0033151 ], [ 89.0312266, 22.0017235 ], [ 89.0293383, 22.0014052 ], [ 89.0255617, 22.0007685 ], [ 89.0228152, 22.0006093 ], [ 89.0214419, 22.0018826 ], [ 89.0217852, 22.0041108 ], [ 89.0231585, 22.0066573 ], [ 89.0243601, 22.0092038 ], [ 89.0257334, 22.0107953 ], [ 89.0253901, 22.0125459 ], [ 89.0236735, 22.0146148 ], [ 89.0235018, 22.015888 ], [ 89.0245318, 22.0189117 ], [ 89.0231585, 22.0206622 ], [ 89.0202402, 22.0212988 ], [ 89.0176653, 22.0220945 ], [ 89.0186953, 22.0208214 ], [ 89.0210986, 22.0201848 ], [ 89.0226435, 22.0195482 ], [ 89.0231585, 22.0185934 ], [ 89.0223002, 22.0160471 ], [ 89.0224718, 22.0146148 ], [ 89.0236735, 22.0130234 ], [ 89.0245318, 22.0117502 ], [ 89.0223002, 22.0079306 ], [ 89.0210986, 22.0055433 ], [ 89.0202402, 22.0034742 ], [ 89.0200686, 22.0017235 ], [ 89.0212702, 22.0004502 ], [ 89.0226435, 21.9994952 ], [ 89.0262484, 21.9994952 ], [ 89.0291666, 22.0001319 ], [ 89.0300249, 22.000291 ], [ 89.0310549, 21.9993361 ], [ 89.0288233, 21.9969486 ], [ 89.0253901, 21.9969486 ], [ 89.0219569, 21.9972669 ], [ 89.0193819, 21.9969486 ], [ 89.0171503, 21.9955161 ], [ 89.0123438, 21.9918552 ], [ 89.0089106, 21.9899452 ], [ 89.0065073, 21.9881943 ], [ 89.0041041, 21.98708 ], [ 89.0025591, 21.9866025 ], [ 89.0013575, 21.9856474 ], [ 89.0022158, 21.9846924 ], [ 89.0030741, 21.9838965 ], [ 89.0015292, 21.9824638 ], [ 88.9994692, 21.9805536 ], [ 88.9972376, 21.9778475 ], [ 88.995006, 21.9754597 ], [ 88.9926028, 21.9733902 ], [ 88.9922594, 21.9767332 ], [ 88.9922594, 21.9794394 ], [ 88.9920878, 21.9823047 ], [ 88.9912295, 21.9846924 ], [ 88.9891695, 21.9866025 ], [ 88.9857363, 21.9886718 ], [ 88.9824747, 21.9894676 ], [ 88.9792132, 21.9902635 ], [ 88.9771532, 21.9904227 ], [ 88.9757799, 21.9915369 ], [ 88.9792132, 21.9913777 ], [ 88.9817881, 21.9915369 ], [ 88.9841914, 21.9932878 ], [ 88.9855646, 21.9947203 ], [ 88.9871096, 21.9961528 ], [ 88.9884829, 21.9980628 ], [ 88.9908861, 21.9990177 ], [ 88.9927744, 21.9999727 ], [ 88.9943194, 22.0017235 ], [ 88.995006, 22.0041108 ], [ 88.9963793, 22.0050658 ], [ 88.9994692, 22.0058616 ], [ 89.0011858, 22.0064982 ], [ 89.0020441, 22.0082489 ], [ 89.0023875, 22.0099995 ], [ 89.0017008, 22.0112727 ], [ 88.9996409, 22.0120685 ], [ 88.9977526, 22.0117502 ], [ 88.9967226, 22.010477 ], [ 88.995521, 22.0092038 ], [ 88.9941477, 22.0077714 ], [ 88.9922594, 22.0080897 ], [ 88.9919161, 22.0096812 ], [ 88.9914011, 22.0125459 ], [ 88.9910578, 22.0141374 ], [ 88.9893412, 22.0162063 ], [ 88.9903712, 22.0184343 ], [ 88.9920878, 22.0193891 ], [ 88.9919161, 22.0200257 ], [ 88.9901995, 22.0193891 ], [ 88.9891695, 22.0185934 ], [ 88.9883112, 22.0168428 ], [ 88.9881396, 22.0157288 ], [ 88.9896845, 22.0141374 ], [ 88.9901995, 22.0125459 ], [ 88.9903712, 22.0098404 ], [ 88.9903712, 22.007294 ], [ 88.9936327, 22.0068165 ], [ 88.9951777, 22.0071348 ], [ 88.996036, 22.008408 ], [ 88.9972376, 22.0095221 ], [ 88.9986109, 22.0109544 ], [ 89.0003275, 22.0106361 ], [ 89.0010142, 22.0098404 ], [ 89.0010142, 22.0085672 ], [ 89.0004992, 22.007294 ], [ 88.9984392, 22.0069756 ], [ 88.996551, 22.0061799 ], [ 88.9948344, 22.0055433 ], [ 88.9939761, 22.0045883 ], [ 88.9931177, 22.0026784 ], [ 88.9926028, 22.001246 ], [ 88.9901995, 21.9999727 ], [ 88.9881396, 21.9993361 ], [ 88.9860796, 21.9974261 ], [ 88.983848, 21.9948794 ], [ 88.9819598, 21.9928102 ], [ 88.9790415, 21.9923327 ], [ 88.9750933, 21.9928102 ], [ 88.9750933, 21.9942428 ], [ 88.9769816, 21.9969486 ], [ 88.9785265, 21.9993361 ], [ 88.9795565, 22.002201 ], [ 88.9788699, 22.0049066 ], [ 88.9776682, 22.0074531 ], [ 88.9740633, 22.0103178 ], [ 88.9714884, 22.0117502 ], [ 88.9690852, 22.0128642 ], [ 88.9685702, 22.0149331 ], [ 88.9689135, 22.0163654 ], [ 88.9709734, 22.0195482 ], [ 88.973205, 22.0240041 ], [ 88.974235, 22.0281415 ], [ 88.9761233, 22.0306876 ], [ 88.9773249, 22.0327562 ], [ 88.9786982, 22.0359387 ], [ 88.9798998, 22.0383255 ] ] ], [ [ [ 88.9376705, 22.0583768 ], [ 88.9392154, 22.0569449 ], [ 88.9397304, 22.0558312 ], [ 88.9411037, 22.0536038 ], [ 88.941447, 22.0515355 ], [ 88.941962, 22.049308 ], [ 88.9443653, 22.0464441 ], [ 88.9462536, 22.0454894 ], [ 88.9476268, 22.044853 ], [ 88.9479702, 22.0427845 ], [ 88.9498584, 22.0423072 ], [ 88.9517467, 22.0427845 ], [ 88.95209, 22.0440574 ], [ 88.9524334, 22.044853 ], [ 88.9560383, 22.0432619 ], [ 88.9570682, 22.0421481 ], [ 88.9579265, 22.0396022 ], [ 88.9589565, 22.0388066 ], [ 88.9605014, 22.0381701 ], [ 88.9611881, 22.0373745 ], [ 88.9611881, 22.0361016 ], [ 88.9598148, 22.0349877 ], [ 88.9582699, 22.0335556 ], [ 88.9587848, 22.0321235 ], [ 88.9572399, 22.0316461 ], [ 88.9555233, 22.0313279 ], [ 88.9538067, 22.0310096 ], [ 88.95312, 22.0292592 ], [ 88.954665, 22.0275088 ], [ 88.9555233, 22.0260766 ], [ 88.9543216, 22.0255992 ], [ 88.9522617, 22.0254401 ], [ 88.9510601, 22.0248035 ], [ 88.9507168, 22.0224165 ], [ 88.95209, 22.020666 ], [ 88.9538067, 22.0205069 ], [ 88.9553516, 22.0213026 ], [ 88.9562099, 22.0222574 ], [ 88.9580982, 22.0227348 ], [ 88.9589565, 22.0222574 ], [ 88.9589565, 22.0211434 ], [ 88.9579265, 22.019552 ], [ 88.9556949, 22.0190746 ], [ 88.9539783, 22.0179606 ], [ 88.9532917, 22.0160509 ], [ 88.9550083, 22.0144595 ], [ 88.9570682, 22.0135046 ], [ 88.9598148, 22.0130271 ], [ 88.9618747, 22.0130271 ], [ 88.9622181, 22.0138229 ], [ 88.9629047, 22.0155735 ], [ 88.9635914, 22.0170058 ], [ 88.964793, 22.0170058 ], [ 88.9656513, 22.0163692 ], [ 88.9659946, 22.0152552 ], [ 88.9663379, 22.0135046 ], [ 88.9675396, 22.0106399 ], [ 88.9690845, 22.0090484 ], [ 88.9714878, 22.007616 ], [ 88.9745777, 22.0060245 ], [ 88.9757793, 22.0041146 ], [ 88.9757793, 22.0026822 ], [ 88.9752643, 22.000454 ], [ 88.9733761, 21.9979074 ], [ 88.9718311, 21.9958382 ], [ 88.9711445, 21.9926549 ], [ 88.9716594, 21.9894714 ], [ 88.9708011, 21.9902673 ], [ 88.9682262, 21.9945649 ], [ 88.9659946, 21.9950424 ], [ 88.9618747, 21.9953607 ], [ 88.9586132, 21.9963157 ], [ 88.9570682, 21.9979074 ], [ 88.9555233, 21.9996582 ], [ 88.9539783, 21.9998173 ], [ 88.9505451, 22.000454 ], [ 88.9486568, 22.0017273 ], [ 88.9471119, 22.0036372 ], [ 88.9483135, 22.0030005 ], [ 88.9505451, 22.0026822 ], [ 88.952605, 22.0031597 ], [ 88.9550083, 22.0047513 ], [ 88.9565532, 22.0063428 ], [ 88.9568966, 22.0077752 ], [ 88.9565532, 22.0088893 ], [ 88.9558666, 22.0095259 ], [ 88.9548366, 22.0100033 ], [ 88.95312, 22.009685 ], [ 88.9522617, 22.0084118 ], [ 88.9543216, 22.0092076 ], [ 88.9556949, 22.0084118 ], [ 88.9556949, 22.0069794 ], [ 88.95415, 22.0049104 ], [ 88.9515751, 22.0037963 ], [ 88.9493435, 22.0037963 ], [ 88.9467685, 22.0050696 ], [ 88.9450519, 22.0047513 ], [ 88.9431637, 22.0082527 ], [ 88.9411037, 22.0115948 ], [ 88.9392154, 22.0144595 ], [ 88.9378421, 22.0178015 ], [ 88.9361255, 22.0248035 ], [ 88.9354389, 22.0294183 ], [ 88.9349239, 22.0526492 ], [ 88.9361255, 22.0567858 ], [ 88.9376705, 22.0583768 ] ] ], [ [ [ 88.8700013, 21.9306667 ], [ 88.868113, 21.9320998 ], [ 88.8619332, 21.9340106 ], [ 88.857985, 21.9351253 ], [ 88.8542085, 21.9359215 ], [ 88.8507752, 21.9370361 ], [ 88.8480287, 21.9379915 ], [ 88.8457971, 21.9392653 ], [ 88.8435655, 21.9410168 ], [ 88.8421922, 21.9429276 ], [ 88.8413339, 21.944679 ], [ 88.8409905, 21.9480227 ], [ 88.8413339, 21.9516847 ], [ 88.8421922, 21.9547098 ], [ 88.8432221, 21.9585308 ], [ 88.8439088, 21.9604413 ], [ 88.8447671, 21.9621926 ], [ 88.8454537, 21.9650582 ], [ 88.8454537, 21.9687198 ], [ 88.8454537, 21.9720629 ], [ 88.8449388, 21.973814 ], [ 88.8439088, 21.9758834 ], [ 88.8423638, 21.9777937 ], [ 88.8413339, 21.978908 ], [ 88.8413339, 21.9812958 ], [ 88.8413339, 21.9836835 ], [ 88.8415055, 21.9865487 ], [ 88.8413339, 21.9878221 ], [ 88.8404756, 21.9887771 ], [ 88.8404756, 21.9870262 ], [ 88.8404756, 21.9840018 ], [ 88.8403039, 21.9816141 ], [ 88.8401322, 21.9798631 ], [ 88.8387589, 21.9803407 ], [ 88.8370423, 21.9804998 ], [ 88.8344674, 21.9795447 ], [ 88.8322358, 21.978908 ], [ 88.8300042, 21.9779529 ], [ 88.8274293, 21.9768386 ], [ 88.8248544, 21.9754059 ], [ 88.8221078, 21.973814 ], [ 88.8197045, 21.9723813 ], [ 88.8179879, 21.9711077 ], [ 88.816443, 21.9707893 ], [ 88.8135247, 21.9704709 ], [ 88.8102632, 21.9704709 ], [ 88.8064866, 21.9704709 ], [ 88.8025384, 21.9709485 ], [ 88.7994485, 21.9715853 ], [ 88.7956719, 21.9719037 ], [ 88.7922387, 21.9720629 ], [ 88.7891488, 21.9720629 ], [ 88.7869172, 21.9723813 ], [ 88.7848573, 21.9733364 ], [ 88.782969, 21.9744507 ], [ 88.7822823, 21.976361 ], [ 88.7822823, 21.9774753 ], [ 88.783484, 21.9787488 ], [ 88.7846856, 21.9801815 ], [ 88.7858872, 21.9811366 ], [ 88.7858872, 21.9822509 ], [ 88.7879472, 21.9833651 ], [ 88.7913804, 21.9847977 ], [ 88.795157, 21.9863895 ], [ 88.7985902, 21.9876629 ], [ 88.8030534, 21.9892547 ], [ 88.8071732, 21.9914831 ], [ 88.8128381, 21.9945073 ], [ 88.815413, 21.9959398 ], [ 88.8167863, 21.997054 ], [ 88.8185029, 21.9994414 ], [ 88.8181596, 22.0015105 ], [ 88.8176446, 21.9999189 ], [ 88.8166146, 21.9984864 ], [ 88.8140397, 21.9968948 ], [ 88.8107781, 21.9949848 ], [ 88.8059716, 21.9925973 ], [ 88.8009934, 21.9905281 ], [ 88.7970452, 21.9887771 ], [ 88.7924104, 21.986867 ], [ 88.7886338, 21.9851161 ], [ 88.7867455, 21.9843202 ], [ 88.7852006, 21.9846386 ], [ 88.783999, 21.9854344 ], [ 88.7822823, 21.985912 ], [ 88.7809091, 21.9879813 ], [ 88.7797074, 21.9894138 ], [ 88.7771325, 21.9906872 ], [ 88.7750726, 21.9911647 ], [ 88.7730126, 21.9914831 ], [ 88.7704377, 21.9902097 ], [ 88.7692361, 21.989573 ], [ 88.7678628, 21.9879813 ], [ 88.7664895, 21.9867079 ], [ 88.7649445, 21.9862303 ], [ 88.7625413, 21.985912 ], [ 88.7609963, 21.9860712 ], [ 88.7591081, 21.9870262 ], [ 88.7556748, 21.9871854 ], [ 88.7541299, 21.9876629 ], [ 88.7549882, 21.988618 ], [ 88.7567048, 21.9906872 ], [ 88.7580781, 21.9922789 ], [ 88.7599664, 21.9949848 ], [ 88.7609963, 21.9967356 ], [ 88.7615113, 21.9996006 ], [ 88.761683, 22.0034204 ], [ 88.761683, 22.005012 ], [ 88.7628846, 22.0064444 ], [ 88.7666612, 22.0085134 ], [ 88.7699227, 22.0104232 ], [ 88.771811, 22.0109006 ], [ 88.7730126, 22.0110598 ], [ 88.7740426, 22.0110598 ], [ 88.7745576, 22.0096274 ], [ 88.7754159, 22.0085134 ], [ 88.7761025, 22.0073993 ], [ 88.7759309, 22.0093091 ], [ 88.7750726, 22.0112189 ], [ 88.7738709, 22.0116964 ], [ 88.7719827, 22.0116964 ], [ 88.7699227, 22.0112189 ], [ 88.7682061, 22.0105823 ], [ 88.7664895, 22.0094683 ], [ 88.7640862, 22.0088317 ], [ 88.762713, 22.0080359 ], [ 88.7618546, 22.0083542 ], [ 88.7618546, 22.0093091 ], [ 88.761683, 22.0112189 ], [ 88.7618546, 22.0128104 ], [ 88.7623696, 22.0144019 ], [ 88.7640862, 22.0153568 ], [ 88.7652879, 22.015675 ], [ 88.7670045, 22.0155159 ], [ 88.7687211, 22.0151976 ], [ 88.7706094, 22.0147202 ], [ 88.7735276, 22.014561 ], [ 88.7764459, 22.0147202 ], [ 88.7779908, 22.0147202 ], [ 88.7797074, 22.0153568 ], [ 88.7812524, 22.0161525 ], [ 88.782969, 22.0172665 ], [ 88.7855439, 22.019017 ], [ 88.7888055, 22.0215633 ], [ 88.7912087, 22.0233138 ], [ 88.7948136, 22.0252234 ], [ 88.8003068, 22.0282469 ], [ 88.8020234, 22.0292016 ], [ 88.8030534, 22.0290425 ], [ 88.804255, 22.0279286 ], [ 88.805285, 22.026019 ], [ 88.8058, 22.0245868 ], [ 88.8080316, 22.0225181 ], [ 88.8104348, 22.0204493 ], [ 88.8131814, 22.0193353 ], [ 88.8145547, 22.0191762 ], [ 88.8183312, 22.0196536 ], [ 88.8246827, 22.0214041 ], [ 88.8262277, 22.021245 ], [ 88.8279443, 22.0209267 ], [ 88.8296609, 22.0204493 ], [ 88.8332658, 22.0196536 ], [ 88.8406472, 22.017903 ], [ 88.8456254, 22.0172665 ], [ 88.8494019, 22.0171073 ], [ 88.8538651, 22.0180622 ], [ 88.8562684, 22.0183805 ], [ 88.8578134, 22.0191762 ], [ 88.8603883, 22.020131 ], [ 88.8634782, 22.0221998 ], [ 88.8648515, 22.0233138 ], [ 88.8657098, 22.0244277 ], [ 88.8669114, 22.0241094 ], [ 88.8679414, 22.0228363 ], [ 88.8689713, 22.0214041 ], [ 88.870173, 22.0191762 ], [ 88.870688, 22.0174256 ], [ 88.8700013, 22.0164708 ], [ 88.8682847, 22.0151976 ], [ 88.8672547, 22.0144019 ], [ 88.8674264, 22.0107415 ], [ 88.8677697, 22.0081951 ], [ 88.8672547, 22.0064444 ], [ 88.8663964, 22.0064444 ], [ 88.8643365, 22.0069218 ], [ 88.8524919, 22.0078768 ], [ 88.8507752, 22.0072402 ], [ 88.8641648, 22.0062852 ], [ 88.8667397, 22.0054895 ], [ 88.8677697, 22.0053303 ], [ 88.8682847, 22.0061261 ], [ 88.868628, 22.0077176 ], [ 88.8684564, 22.0094683 ], [ 88.868113, 22.0118555 ], [ 88.868628, 22.013447 ], [ 88.869658, 22.0147202 ], [ 88.8694863, 22.012333 ], [ 88.8694863, 22.0105823 ], [ 88.8700013, 22.0089908 ], [ 88.870688, 22.0081951 ], [ 88.8703446, 22.0097866 ], [ 88.8703446, 22.0113781 ], [ 88.870688, 22.0129696 ], [ 88.8710313, 22.0148793 ], [ 88.8724046, 22.0148793 ], [ 88.8734345, 22.0137653 ], [ 88.8749795, 22.0124921 ], [ 88.8768678, 22.0116964 ], [ 88.878756, 22.0112189 ], [ 88.880816, 22.0110598 ], [ 88.8830476, 22.0110598 ], [ 88.8856225, 22.0112189 ], [ 88.8871674, 22.0107415 ], [ 88.8876824, 22.0089908 ], [ 88.8890557, 22.0072402 ], [ 88.8895707, 22.0058078 ], [ 88.8902574, 22.0038979 ], [ 88.890429, 22.0023063 ], [ 88.8897424, 21.9997597 ], [ 88.8892274, 21.9988048 ], [ 88.8883691, 21.9976906 ], [ 88.8873391, 21.9962581 ], [ 88.8864808, 21.9953031 ], [ 88.8857942, 21.9938706 ], [ 88.8859658, 21.9921198 ], [ 88.8859658, 21.9911647 ], [ 88.8845925, 21.9898914 ], [ 88.8859658, 21.9902097 ], [ 88.8866525, 21.9908464 ], [ 88.8863091, 21.9929156 ], [ 88.8873391, 21.995144 ], [ 88.8890557, 21.997054 ], [ 88.890429, 21.9992823 ], [ 88.890944, 22.001033 ], [ 88.8911157, 22.0027838 ], [ 88.8906007, 22.0051711 ], [ 88.8900857, 22.0066035 ], [ 88.8892274, 22.0080359 ], [ 88.8885407, 22.0093091 ], [ 88.8880258, 22.0112189 ], [ 88.8895707, 22.0110598 ], [ 88.8921456, 22.0115372 ], [ 88.8979821, 22.012333 ], [ 88.8993554, 22.012333 ], [ 88.901072, 22.0115372 ], [ 88.902102, 22.0109006 ], [ 88.9034753, 22.0097866 ], [ 88.9039903, 22.0078768 ], [ 88.9045052, 22.0045345 ], [ 88.9039903, 22.0007147 ], [ 88.9033036, 21.996099 ], [ 88.9027886, 21.9911647 ], [ 88.9027886, 21.9867079 ], [ 88.9029603, 21.9846386 ], [ 88.9039903, 21.9817733 ], [ 88.9050202, 21.9776345 ], [ 88.9055352, 21.9749283 ], [ 88.9055352, 21.9739732 ], [ 88.9038186, 21.9731772 ], [ 88.901587, 21.9719037 ], [ 88.8995271, 21.9707893 ], [ 88.8979821, 21.9703117 ], [ 88.8962655, 21.9693566 ], [ 88.8943772, 21.9687198 ], [ 88.8931756, 21.9687198 ], [ 88.891974, 21.9677646 ], [ 88.890944, 21.9674462 ], [ 88.8887124, 21.967287 ], [ 88.8873391, 21.9682422 ], [ 88.8863091, 21.9690382 ], [ 88.8852792, 21.9685606 ], [ 88.8871674, 21.967287 ], [ 88.8895707, 21.9663318 ], [ 88.8906007, 21.9663318 ], [ 88.8918023, 21.9671278 ], [ 88.8928323, 21.967287 ], [ 88.8942056, 21.9679238 ], [ 88.8964372, 21.9685606 ], [ 88.8983254, 21.9690382 ], [ 88.8996987, 21.9698341 ], [ 88.9022737, 21.9714261 ], [ 88.9041619, 21.9723813 ], [ 88.9058785, 21.9723813 ], [ 88.9072518, 21.9712669 ], [ 88.9075952, 21.9698341 ], [ 88.9082818, 21.967287 ], [ 88.9082818, 21.965695 ], [ 88.9086251, 21.9620334 ], [ 88.9079385, 21.9615557 ], [ 88.9075952, 21.9591676 ], [ 88.9069085, 21.9555058 ], [ 88.9063935, 21.9520031 ], [ 88.9058785, 21.9486596 ], [ 88.9057069, 21.9459528 ], [ 88.9062219, 21.9437237 ], [ 88.9063935, 21.9414945 ], [ 88.9060502, 21.939743 ], [ 88.9051919, 21.9389469 ], [ 88.9038186, 21.9391061 ], [ 88.902617, 21.9394246 ], [ 88.9017587, 21.9405392 ], [ 88.9019303, 21.9421314 ], [ 88.9019303, 21.9437237 ], [ 88.9012437, 21.9449975 ], [ 88.8988404, 21.9453159 ], [ 88.8969521, 21.9453159 ], [ 88.8950639, 21.944679 ], [ 88.8971238, 21.944679 ], [ 88.8996987, 21.9445198 ], [ 88.9009004, 21.943246 ], [ 88.900557, 21.9411761 ], [ 88.901072, 21.9394246 ], [ 88.9027886, 21.9383099 ], [ 88.9050202, 21.9368769 ], [ 88.9058785, 21.9357622 ], [ 88.9067368, 21.9340106 ], [ 88.9074235, 21.932259 ], [ 88.9075952, 21.9305074 ], [ 88.9074235, 21.9287558 ], [ 88.9060502, 21.9271633 ], [ 88.9045052, 21.9263671 ], [ 88.9014153, 21.9249339 ], [ 88.8993554, 21.9235007 ], [ 88.8972955, 21.9222267 ], [ 88.8931756, 21.9215897 ], [ 88.8888841, 21.9206342 ], [ 88.8863091, 21.9206342 ], [ 88.8842492, 21.921749 ], [ 88.8820176, 21.9227045 ], [ 88.8799577, 21.9227045 ], [ 88.8772111, 21.9227045 ], [ 88.8751512, 21.9227045 ], [ 88.8730912, 21.9227045 ], [ 88.8725762, 21.9246154 ], [ 88.8725762, 21.9265264 ], [ 88.8717179, 21.9285965 ], [ 88.8708596, 21.929552 ], [ 88.8700013, 21.9306667 ] ] ], [ [ [ 88.7587647, 22.0066035 ], [ 88.760138, 22.0029429 ], [ 88.7599664, 21.9997597 ], [ 88.7594514, 21.9967356 ], [ 88.7580781, 21.9940298 ], [ 88.7563615, 21.9921198 ], [ 88.7543015, 21.9898914 ], [ 88.7524133, 21.9876629 ], [ 88.7491517, 21.9857528 ], [ 88.7455468, 21.9833651 ], [ 88.7436585, 21.9827284 ], [ 88.7426286, 21.9863895 ], [ 88.7422852, 21.9884588 ], [ 88.7438302, 21.9903689 ], [ 88.749495, 21.9956215 ], [ 88.7527566, 21.9983273 ], [ 88.7555032, 22.0023063 ], [ 88.7587647, 22.0066035 ] ] ], [ [ [ 88.888193, 22.0574815 ], [ 88.8900813, 22.0568451 ], [ 88.8924846, 22.0558905 ], [ 88.8945445, 22.0549359 ], [ 88.8966044, 22.0538222 ], [ 88.8978061, 22.0527085 ], [ 88.898836, 22.0515948 ], [ 88.9007243, 22.0506401 ], [ 88.9027843, 22.0503219 ], [ 88.9032992, 22.0495264 ], [ 88.9039859, 22.0479353 ], [ 88.9032992, 22.0469807 ], [ 88.9020976, 22.0441167 ], [ 88.9010676, 22.0410935 ], [ 88.900381, 22.0374338 ], [ 88.9002093, 22.0361609 ], [ 88.900896, 22.0352061 ], [ 88.901411, 22.0332967 ], [ 88.9015826, 22.028682 ], [ 88.9022693, 22.0248628 ], [ 88.9019259, 22.0237489 ], [ 88.9017543, 22.0221575 ], [ 88.9017543, 22.0183382 ], [ 88.8995227, 22.0173833 ], [ 88.8969478, 22.0161102 ], [ 88.8943728, 22.014837 ], [ 88.8921412, 22.0143596 ], [ 88.889738, 22.0145187 ], [ 88.8871631, 22.014837 ], [ 88.8852748, 22.0146779 ], [ 88.8816699, 22.0146779 ], [ 88.8802966, 22.0143596 ], [ 88.87755, 22.0145187 ], [ 88.8761767, 22.0146779 ], [ 88.8753184, 22.0165876 ], [ 88.8749751, 22.0191339 ], [ 88.8748034, 22.0208844 ], [ 88.8742885, 22.0231123 ], [ 88.8725719, 22.0254993 ], [ 88.8717135, 22.0270907 ], [ 88.8699969, 22.0275681 ], [ 88.867937, 22.0278863 ], [ 88.866392, 22.0282046 ], [ 88.8645038, 22.0278863 ], [ 88.8638171, 22.0288411 ], [ 88.8615855, 22.0309098 ], [ 88.8590106, 22.0336149 ], [ 88.8559207, 22.0364791 ], [ 88.8535174, 22.0391841 ], [ 88.8523158, 22.0409344 ], [ 88.8526591, 22.0418891 ], [ 88.8540324, 22.0425256 ], [ 88.8566073, 22.043162 ], [ 88.8591823, 22.0433211 ], [ 88.8619288, 22.043162 ], [ 88.8648471, 22.0428438 ], [ 88.8696536, 22.0425256 ], [ 88.8754901, 22.0428438 ], [ 88.8885364, 22.044594 ], [ 88.8909396, 22.0457078 ], [ 88.8921412, 22.0471398 ], [ 88.8924846, 22.0490491 ], [ 88.8912829, 22.0511174 ], [ 88.8893947, 22.053504 ], [ 88.8878497, 22.0547768 ], [ 88.8864764, 22.0563678 ], [ 88.8861331, 22.0571633 ], [ 88.888193, 22.0574815 ] ] ], [ [ [ 88.7623345, 22.0213321 ], [ 88.7621628, 22.0253105 ], [ 88.7616479, 22.0276975 ], [ 88.7606179, 22.031994 ], [ 88.7599312, 22.0348582 ], [ 88.7576996, 22.0380406 ], [ 88.7556397, 22.0424959 ], [ 88.7535798, 22.0471101 ], [ 88.7520348, 22.0496558 ], [ 88.7523781, 22.0515651 ], [ 88.7527215, 22.052997 ], [ 88.7552964, 22.052997 ], [ 88.7573563, 22.0528379 ], [ 88.7595879, 22.0522015 ], [ 88.7659394, 22.0510878 ], [ 88.7710892, 22.0510878 ], [ 88.7731492, 22.0512469 ], [ 88.7760674, 22.0493376 ], [ 88.779844, 22.0459963 ], [ 88.7796723, 22.0444052 ], [ 88.7784707, 22.0423368 ], [ 88.778299, 22.0389953 ], [ 88.7789857, 22.0367677 ], [ 88.7807023, 22.0353356 ], [ 88.7837922, 22.0348582 ], [ 88.7873971, 22.0339035 ], [ 88.789972, 22.0331078 ], [ 88.7911736, 22.030721 ], [ 88.7911736, 22.0291297 ], [ 88.7887703, 22.0276975 ], [ 88.7858521, 22.0257879 ], [ 88.7824189, 22.0232418 ], [ 88.7791573, 22.0208547 ], [ 88.7762391, 22.0197408 ], [ 88.7721192, 22.020059 ], [ 88.7667977, 22.0206956 ], [ 88.7623345, 22.0213321 ] ] ], [ [ [ 88.9594715, 22.0594905 ], [ 88.9606731, 22.0582177 ], [ 88.9625614, 22.0572631 ], [ 88.9639347, 22.0564676 ], [ 88.963763, 22.055513 ], [ 88.963763, 22.0540811 ], [ 88.9622181, 22.0540811 ], [ 88.9613598, 22.0531265 ], [ 88.9605014, 22.0516946 ], [ 88.9605014, 22.0501036 ], [ 88.9617031, 22.0485125 ], [ 88.963763, 22.0467623 ], [ 88.9673679, 22.0440574 ], [ 88.9708011, 22.0411934 ], [ 88.973891, 22.0396022 ], [ 88.9762943, 22.0388066 ], [ 88.9774959, 22.0378519 ], [ 88.9773243, 22.0370563 ], [ 88.976466, 22.0361016 ], [ 88.974921, 22.034033 ], [ 88.9725177, 22.0303731 ], [ 88.9709728, 22.026554 ], [ 88.9683979, 22.0208251 ], [ 88.9659946, 22.0179606 ], [ 88.9651363, 22.0190746 ], [ 88.963248, 22.0189155 ], [ 88.9625614, 22.0165283 ], [ 88.9611881, 22.0138229 ], [ 88.9586132, 22.0141412 ], [ 88.9563816, 22.0147778 ], [ 88.9553516, 22.0157326 ], [ 88.954665, 22.0173241 ], [ 88.9556949, 22.0182789 ], [ 88.9575832, 22.0187563 ], [ 88.9591282, 22.0197112 ], [ 88.9601581, 22.0216208 ], [ 88.9596431, 22.0235305 ], [ 88.9574115, 22.0236896 ], [ 88.9550083, 22.0228939 ], [ 88.9543216, 22.02178 ], [ 88.9524334, 22.0213026 ], [ 88.9515751, 22.0230531 ], [ 88.9522617, 22.0246444 ], [ 88.95312, 22.0246444 ], [ 88.9539783, 22.0251218 ], [ 88.9551799, 22.0248035 ], [ 88.9562099, 22.0255992 ], [ 88.9565532, 22.0267131 ], [ 88.9555233, 22.027827 ], [ 88.9543216, 22.0295775 ], [ 88.9548366, 22.0305322 ], [ 88.9587848, 22.0308505 ], [ 88.9596431, 22.0321235 ], [ 88.9596431, 22.0330783 ], [ 88.9601581, 22.0343512 ], [ 88.9618747, 22.035306 ], [ 88.9622181, 22.0367381 ], [ 88.9615314, 22.0388066 ], [ 88.9596431, 22.0394431 ], [ 88.9584415, 22.040716 ], [ 88.9575832, 22.0431027 ], [ 88.9555233, 22.0442165 ], [ 88.9532917, 22.0451712 ], [ 88.9519184, 22.0454894 ], [ 88.9508884, 22.0443756 ], [ 88.9508884, 22.0431027 ], [ 88.9496868, 22.0431027 ], [ 88.9484852, 22.043421 ], [ 88.9483135, 22.0442165 ], [ 88.9481418, 22.0454894 ], [ 88.9476268, 22.0461259 ], [ 88.9457386, 22.046285 ], [ 88.9443653, 22.0473987 ], [ 88.9433353, 22.0486716 ], [ 88.9426487, 22.0504218 ], [ 88.9421337, 22.0512173 ], [ 88.9421337, 22.0526492 ], [ 88.941447, 22.0545584 ], [ 88.9405887, 22.0559903 ], [ 88.9399021, 22.057104 ], [ 88.9388721, 22.058695 ], [ 88.9381855, 22.0596496 ], [ 88.9388721, 22.0607632 ], [ 88.9399021, 22.0615587 ], [ 88.941447, 22.0617178 ], [ 88.9445369, 22.0610814 ], [ 88.9495151, 22.0601268 ], [ 88.9539783, 22.0596496 ], [ 88.9594715, 22.0594905 ] ] ], [ [ [ 88.8321658, 22.049588 ], [ 88.8313075, 22.0475196 ], [ 88.8307925, 22.0462467 ], [ 88.8304492, 22.0444965 ], [ 88.8306209, 22.0408369 ], [ 88.8309642, 22.0376546 ], [ 88.8316508, 22.0346313 ], [ 88.8325091, 22.0322444 ], [ 88.8328525, 22.029221 ], [ 88.8323375, 22.026834 ], [ 88.8311359, 22.026834 ], [ 88.8290759, 22.026834 ], [ 88.8263293, 22.0269932 ], [ 88.8239261, 22.026834 ], [ 88.8216945, 22.0266749 ], [ 88.8180896, 22.0260384 ], [ 88.8155147, 22.0254018 ], [ 88.8139697, 22.0249244 ], [ 88.8125964, 22.0265158 ], [ 88.8120814, 22.029221 ], [ 88.8113948, 22.0300166 ], [ 88.8096782, 22.0306531 ], [ 88.8079616, 22.031767 ], [ 88.8059016, 22.0331992 ], [ 88.8033267, 22.0333583 ], [ 88.8014384, 22.0333583 ], [ 88.7990352, 22.03304 ], [ 88.7974902, 22.0319261 ], [ 88.7952586, 22.0311305 ], [ 88.794057, 22.030494 ], [ 88.7931987, 22.0322444 ], [ 88.7921687, 22.0338356 ], [ 88.7909671, 22.0344721 ], [ 88.7897655, 22.0352678 ], [ 88.7877055, 22.0360634 ], [ 88.7856456, 22.0365407 ], [ 88.7837573, 22.0365407 ], [ 88.7813541, 22.036859 ], [ 88.7804957, 22.0373363 ], [ 88.7801524, 22.0389275 ], [ 88.7804957, 22.0406778 ], [ 88.781869, 22.0430645 ], [ 88.7827273, 22.0446556 ], [ 88.7830707, 22.0449739 ], [ 88.784444, 22.0456103 ], [ 88.7877055, 22.0588159 ], [ 88.7883922, 22.0597704 ], [ 88.7892505, 22.058975 ], [ 88.7895938, 22.0569067 ], [ 88.7907954, 22.0549975 ], [ 88.7928554, 22.0540429 ], [ 88.7974902, 22.0546793 ], [ 88.7998935, 22.0549975 ], [ 88.8009234, 22.0561112 ], [ 88.8019534, 22.057384 ], [ 88.8026401, 22.0586568 ], [ 88.8034984, 22.0616795 ], [ 88.8038417, 22.0631114 ], [ 88.8059016, 22.0640659 ], [ 88.8067599, 22.0640659 ], [ 88.8105365, 22.0612023 ], [ 88.8119098, 22.0602477 ], [ 88.816373, 22.0613614 ], [ 88.8182612, 22.0615205 ], [ 88.8191196, 22.0612023 ], [ 88.8203212, 22.059134 ], [ 88.8222095, 22.057384 ], [ 88.8256427, 22.0549975 ], [ 88.8277026, 22.0532474 ], [ 88.8290759, 22.0516564 ], [ 88.8314792, 22.0503835 ], [ 88.8321658, 22.049588 ] ] ], [ [ [ 88.8702746, 22.0806103 ], [ 88.870618, 22.0785423 ], [ 88.8704463, 22.0761562 ], [ 88.869588, 22.0744064 ], [ 88.8683864, 22.0718611 ], [ 88.868043, 22.0685204 ], [ 88.8682147, 22.065975 ], [ 88.8694163, 22.064225 ], [ 88.8697597, 22.0627932 ], [ 88.8721629, 22.0615205 ], [ 88.8769694, 22.0597704 ], [ 88.881776, 22.0572249 ], [ 88.8845225, 22.0554748 ], [ 88.8867541, 22.0537247 ], [ 88.8896724, 22.0507017 ], [ 88.8912173, 22.0486334 ], [ 88.8901874, 22.0470423 ], [ 88.8872691, 22.0462467 ], [ 88.8840076, 22.0454512 ], [ 88.8788577, 22.0448148 ], [ 88.8721629, 22.0449739 ], [ 88.8637515, 22.0456103 ], [ 88.8604899, 22.0456103 ], [ 88.8565417, 22.045133 ], [ 88.8543101, 22.0444965 ], [ 88.8522502, 22.0433827 ], [ 88.8512202, 22.0425872 ], [ 88.8503619, 22.040996 ], [ 88.8501903, 22.0397231 ], [ 88.8513919, 22.038291 ], [ 88.8527652, 22.0363816 ], [ 88.8534518, 22.0349495 ], [ 88.8543101, 22.0336765 ], [ 88.8561984, 22.0309714 ], [ 88.8601466, 22.0266749 ], [ 88.8604899, 22.0254018 ], [ 88.8587733, 22.0246062 ], [ 88.8572284, 22.0238105 ], [ 88.8551684, 22.023174 ], [ 88.8524219, 22.0222191 ], [ 88.8496753, 22.0217417 ], [ 88.8462421, 22.0217417 ], [ 88.8434955, 22.0222191 ], [ 88.8417789, 22.0226966 ], [ 88.8402339, 22.0236514 ], [ 88.838689, 22.0242879 ], [ 88.8374873, 22.0246062 ], [ 88.8359424, 22.0250836 ], [ 88.8349124, 22.0284253 ], [ 88.8342258, 22.0316079 ], [ 88.8326808, 22.0371772 ], [ 88.8326808, 22.0408369 ], [ 88.8318225, 22.0427463 ], [ 88.8328525, 22.0472014 ], [ 88.8337108, 22.0491107 ], [ 88.8337108, 22.0500653 ], [ 88.8352557, 22.0497471 ], [ 88.836629, 22.0499062 ], [ 88.8380023, 22.0503835 ], [ 88.8393756, 22.0521337 ], [ 88.8416072, 22.0540429 ], [ 88.8407489, 22.0549975 ], [ 88.8398906, 22.0538838 ], [ 88.8390323, 22.0527701 ], [ 88.8383456, 22.0516564 ], [ 88.837144, 22.0511791 ], [ 88.8357707, 22.0513382 ], [ 88.8343974, 22.0505426 ], [ 88.8328525, 22.0511791 ], [ 88.8316508, 22.0514973 ], [ 88.8302775, 22.052611 ], [ 88.8289043, 22.0537247 ], [ 88.8278743, 22.0546793 ], [ 88.8263293, 22.0559521 ], [ 88.8242694, 22.057384 ], [ 88.8222095, 22.0586568 ], [ 88.8210078, 22.0602477 ], [ 88.8198062, 22.0616795 ], [ 88.8198062, 22.0631114 ], [ 88.8215228, 22.0647023 ], [ 88.8228961, 22.0666113 ], [ 88.8239261, 22.0674068 ], [ 88.8256427, 22.0685204 ], [ 88.8273593, 22.0696339 ], [ 88.8292476, 22.069793 ], [ 88.8304492, 22.0694749 ], [ 88.8318225, 22.0672477 ], [ 88.8325091, 22.0650204 ], [ 88.8330241, 22.0637477 ], [ 88.8345691, 22.0640659 ], [ 88.836114, 22.0647023 ], [ 88.837144, 22.0656568 ], [ 88.8378306, 22.0667704 ], [ 88.837659, 22.0685204 ], [ 88.837144, 22.0704294 ], [ 88.836114, 22.0720202 ], [ 88.837659, 22.0720202 ], [ 88.838689, 22.0715429 ], [ 88.8400622, 22.0713838 ], [ 88.8422938, 22.071702 ], [ 88.8445254, 22.0728156 ], [ 88.8476153, 22.0750427 ], [ 88.8496753, 22.0769516 ], [ 88.8512202, 22.077906 ], [ 88.8527652, 22.0785423 ], [ 88.8556834, 22.0787014 ], [ 88.8587733, 22.0788605 ], [ 88.8618632, 22.0788605 ], [ 88.8646098, 22.0794968 ], [ 88.8668414, 22.0802921 ], [ 88.8682147, 22.0812465 ], [ 88.869588, 22.0812465 ], [ 88.8702746, 22.0806103 ] ] ], [ [ [ 88.9041575, 22.0864342 ], [ 88.9048442, 22.0850026 ], [ 88.9043292, 22.0842073 ], [ 88.9031276, 22.0834119 ], [ 88.9010676, 22.0816622 ], [ 88.8984927, 22.0795942 ], [ 88.8952312, 22.0762537 ], [ 88.8935145, 22.0733903 ], [ 88.8923129, 22.070845 ], [ 88.8914546, 22.0681406 ], [ 88.8912829, 22.0660725 ], [ 88.8912829, 22.0632088 ], [ 88.8912829, 22.060027 ], [ 88.8893947, 22.060027 ], [ 88.8854465, 22.0592315 ], [ 88.8830432, 22.0587542 ], [ 88.8809833, 22.0605043 ], [ 88.8784083, 22.0612997 ], [ 88.8736018, 22.0627316 ], [ 88.8710269, 22.063527 ], [ 88.8708552, 22.0663906 ], [ 88.8708552, 22.0700496 ], [ 88.8713702, 22.072913 ], [ 88.8724002, 22.0760946 ], [ 88.8727435, 22.0800714 ], [ 88.8720569, 22.0811849 ], [ 88.8711986, 22.0822984 ], [ 88.8703403, 22.0840482 ], [ 88.8703403, 22.0854798 ], [ 88.8703403, 22.0865932 ], [ 88.8734302, 22.085957 ], [ 88.8768634, 22.0845254 ], [ 88.8787517, 22.08373 ], [ 88.8821849, 22.08373 ], [ 88.8861331, 22.0848435 ], [ 88.888193, 22.086116 ], [ 88.8888797, 22.0869114 ], [ 88.8895663, 22.0870704 ], [ 88.8933429, 22.0880248 ], [ 88.8954028, 22.088502 ], [ 88.8966044, 22.0886611 ], [ 88.8986644, 22.0880248 ], [ 88.901411, 22.0870704 ], [ 88.9041575, 22.0864342 ] ] ], [ [ [ 88.8000651, 22.1066955 ], [ 88.8005801, 22.1051051 ], [ 88.8005801, 22.1041508 ], [ 88.8000651, 22.1027194 ], [ 88.7995502, 22.101447 ], [ 88.7985202, 22.0993794 ], [ 88.7985202, 22.098266 ], [ 88.7986919, 22.0971527 ], [ 88.7995502, 22.0965165 ], [ 88.8004085, 22.0958803 ], [ 88.8016101, 22.0947669 ], [ 88.8026401, 22.0934944 ], [ 88.8024684, 22.0915857 ], [ 88.8019534, 22.0893589 ], [ 88.8019534, 22.0880864 ], [ 88.8026401, 22.0868139 ], [ 88.8034984, 22.0847461 ], [ 88.8053866, 22.0834735 ], [ 88.8065883, 22.0828372 ], [ 88.8096782, 22.0815647 ], [ 88.8146564, 22.0804512 ], [ 88.816888, 22.0812465 ], [ 88.8186046, 22.0820419 ], [ 88.8198062, 22.0828372 ], [ 88.8232394, 22.0839507 ], [ 88.8252994, 22.0847461 ], [ 88.826501, 22.0861776 ], [ 88.8277026, 22.0861776 ], [ 88.8292476, 22.0849051 ], [ 88.8304492, 22.0831554 ], [ 88.8318225, 22.0815647 ], [ 88.8323375, 22.0801331 ], [ 88.8343974, 22.0745654 ], [ 88.836629, 22.0686794 ], [ 88.8368007, 22.0667704 ], [ 88.8357707, 22.0651795 ], [ 88.8340541, 22.0645432 ], [ 88.8335391, 22.0658159 ], [ 88.8330241, 22.0677249 ], [ 88.8307925, 22.0704294 ], [ 88.8297626, 22.0710657 ], [ 88.8287326, 22.0709066 ], [ 88.826501, 22.0702703 ], [ 88.8244411, 22.0686794 ], [ 88.8223811, 22.0670886 ], [ 88.8206645, 22.0650204 ], [ 88.8187762, 22.0627932 ], [ 88.8131114, 22.0616795 ], [ 88.8119098, 22.0618386 ], [ 88.8096782, 22.0634296 ], [ 88.8081332, 22.0647023 ], [ 88.8064166, 22.0651795 ], [ 88.8047, 22.0647023 ], [ 88.8033267, 22.0637477 ], [ 88.8022967, 22.0619977 ], [ 88.8012668, 22.0596113 ], [ 88.8004085, 22.0575431 ], [ 88.7985202, 22.0562703 ], [ 88.7968036, 22.0554748 ], [ 88.7956019, 22.0553157 ], [ 88.7937137, 22.0554748 ], [ 88.7923404, 22.055793 ], [ 88.7913104, 22.0572249 ], [ 88.7906238, 22.0597704 ], [ 88.7895938, 22.0612023 ], [ 88.7882205, 22.0615205 ], [ 88.7863322, 22.0610432 ], [ 88.7856456, 22.0594522 ], [ 88.7830707, 22.0487925 ], [ 88.782384, 22.0467241 ], [ 88.7815257, 22.0479969 ], [ 88.7801524, 22.0499062 ], [ 88.7775775, 22.0518155 ], [ 88.7746593, 22.0538838 ], [ 88.7715694, 22.0537247 ], [ 88.7681361, 22.0535656 ], [ 88.7641879, 22.0529292 ], [ 88.7622996, 22.0534065 ], [ 88.7590381, 22.054202 ], [ 88.7550899, 22.0554748 ], [ 88.7513133, 22.0561112 ], [ 88.7489101, 22.0567476 ], [ 88.7482234, 22.0594522 ], [ 88.7492534, 22.0610432 ], [ 88.7518283, 22.0666113 ], [ 88.7538882, 22.0712248 ], [ 88.7559482, 22.0748836 ], [ 88.7568065, 22.0772697 ], [ 88.7576648, 22.0790195 ], [ 88.7595531, 22.0806103 ], [ 88.7679645, 22.0839507 ], [ 88.7700244, 22.0855414 ], [ 88.7725993, 22.0874502 ], [ 88.7753459, 22.0911086 ], [ 88.7763759, 22.0934944 ], [ 88.7774058, 22.0971527 ], [ 88.7786075, 22.1009699 ], [ 88.7792941, 22.1027194 ], [ 88.7815257, 22.104787 ], [ 88.7830707, 22.1063774 ], [ 88.7856456, 22.1066955 ], [ 88.7895938, 22.1071726 ], [ 88.793027, 22.1074907 ], [ 88.7957736, 22.108445 ], [ 88.7976619, 22.108445 ], [ 88.7992068, 22.1078088 ], [ 88.8000651, 22.1066955 ] ] ], [ [ [ 88.9958248, 22.1243669 ], [ 88.9965114, 22.1232538 ], [ 88.9970264, 22.1215045 ], [ 88.9985713, 22.1210275 ], [ 89.0001163, 22.1207094 ], [ 89.0025196, 22.1208684 ], [ 89.0033779, 22.1205504 ], [ 89.0047512, 22.1200733 ], [ 89.0052661, 22.1188011 ], [ 89.0052661, 22.1172108 ], [ 89.0052661, 22.1137121 ], [ 89.0049228, 22.1092591 ], [ 89.0044078, 22.1068735 ], [ 89.0037212, 22.1059192 ], [ 89.0025196, 22.1052831 ], [ 89.0004596, 22.1043288 ], [ 88.9983997, 22.1035336 ], [ 88.9953098, 22.1027383 ], [ 88.9944515, 22.1013069 ], [ 88.9951381, 22.098444 ], [ 88.9968547, 22.0963764 ], [ 88.9989147, 22.0943086 ], [ 88.999773, 22.0922409 ], [ 88.999258, 22.0911275 ], [ 88.997713, 22.0904913 ], [ 88.9946231, 22.0900141 ], [ 88.9925632, 22.0892188 ], [ 88.9903316, 22.0884235 ], [ 88.98913, 22.0876282 ], [ 88.98913, 22.0865147 ], [ 88.9898166, 22.0850831 ], [ 88.9913616, 22.0838106 ], [ 88.9930782, 22.082538 ], [ 88.9949665, 22.0811064 ], [ 88.997713, 22.0803111 ], [ 89.0006313, 22.0811064 ], [ 89.0023479, 22.0826971 ], [ 89.0038928, 22.0842878 ], [ 89.0045795, 22.0846059 ], [ 89.0057811, 22.0844469 ], [ 89.0066394, 22.082538 ], [ 89.0080127, 22.0804701 ], [ 89.0097293, 22.0790385 ], [ 89.0124759, 22.0776068 ], [ 89.0147075, 22.0771296 ], [ 89.0179691, 22.0768114 ], [ 89.0207157, 22.0766524 ], [ 89.0231189, 22.0772887 ], [ 89.0253505, 22.0776068 ], [ 89.0267238, 22.0776068 ], [ 89.0277538, 22.0768114 ], [ 89.0275821, 22.075857 ], [ 89.0274105, 22.0733117 ], [ 89.0274105, 22.0707665 ], [ 89.0274105, 22.0679029 ], [ 89.0275821, 22.0650394 ], [ 89.0284404, 22.0621758 ], [ 89.0284404, 22.0599485 ], [ 89.0284404, 22.0583575 ], [ 89.0275821, 22.0567665 ], [ 89.0267238, 22.0553346 ], [ 89.0260372, 22.0540618 ], [ 89.0258655, 22.052789 ], [ 89.0246639, 22.0529481 ], [ 89.0224323, 22.0523117 ], [ 89.0191707, 22.0515162 ], [ 89.0177974, 22.0519935 ], [ 89.0174541, 22.0526299 ], [ 89.0169391, 22.05438 ], [ 89.0174541, 22.0558119 ], [ 89.0183124, 22.0583575 ], [ 89.0186557, 22.0613803 ], [ 89.0181407, 22.062653 ], [ 89.0169391, 22.0636076 ], [ 89.0152225, 22.0637667 ], [ 89.0145359, 22.0647212 ], [ 89.0138492, 22.0642439 ], [ 89.0135059, 22.0628121 ], [ 89.0126476, 22.0624939 ], [ 89.0114459, 22.0607439 ], [ 89.0105876, 22.0581984 ], [ 89.0095577, 22.0548573 ], [ 89.008871, 22.052789 ], [ 89.0071544, 22.0524708 ], [ 89.0062961, 22.0542209 ], [ 89.0049228, 22.0566074 ], [ 89.0038928, 22.0588348 ], [ 89.0026912, 22.0599485 ], [ 89.0016612, 22.0599485 ], [ 89.0011463, 22.0607439 ], [ 89.0008029, 22.0631303 ], [ 89.0008029, 22.0647212 ], [ 88.9996013, 22.0615394 ], [ 88.9999446, 22.0601076 ], [ 89.000288, 22.059153 ], [ 88.998743, 22.0581984 ], [ 88.9963397, 22.0569256 ], [ 88.9939365, 22.0561301 ], [ 88.9913616, 22.0558119 ], [ 88.9894733, 22.0564483 ], [ 88.9872417, 22.0567665 ], [ 88.9853534, 22.0567665 ], [ 88.9841518, 22.0561301 ], [ 88.9836368, 22.05438 ], [ 88.9838085, 22.0529481 ], [ 88.9844951, 22.0502434 ], [ 88.9848384, 22.0476977 ], [ 88.9841518, 22.0451519 ], [ 88.9826068, 22.0440381 ], [ 88.9805469, 22.0421288 ], [ 88.9793453, 22.0406967 ], [ 88.9783153, 22.0395829 ], [ 88.9772853, 22.0406967 ], [ 88.9752254, 22.0413332 ], [ 88.9716205, 22.0430835 ], [ 88.9680156, 22.0459475 ], [ 88.9647541, 22.0486523 ], [ 88.9628658, 22.051198 ], [ 88.9630374, 22.0523117 ], [ 88.9650974, 22.0535845 ], [ 88.9661273, 22.0548573 ], [ 88.9664707, 22.0570847 ], [ 88.9654407, 22.0581984 ], [ 88.9645824, 22.0589939 ], [ 88.9630374, 22.0601076 ], [ 88.9630374, 22.060903 ], [ 88.9661273, 22.0624939 ], [ 88.9685306, 22.0632894 ], [ 88.9704189, 22.0648803 ], [ 88.9721355, 22.0664712 ], [ 88.9748821, 22.0690165 ], [ 88.9771137, 22.0721982 ], [ 88.9793453, 22.0761751 ], [ 88.9810619, 22.0796748 ], [ 88.9826068, 22.0855603 ], [ 88.9838085, 22.0911275 ], [ 88.9844951, 22.0951039 ], [ 88.9863834, 22.1011479 ], [ 88.9881, 22.1052831 ], [ 88.989645, 22.1092591 ], [ 88.9918766, 22.1141892 ], [ 88.9937648, 22.118483 ], [ 88.9958248, 22.1243669 ] ] ], [ [ [ 88.9258494, 22.1754249 ], [ 88.9278094, 22.1756149 ], [ 88.929526, 22.1746611 ], [ 88.931586, 22.1733894 ], [ 88.9341609, 22.1746611 ], [ 88.9353625, 22.1760918 ], [ 88.9367358, 22.1773635 ], [ 88.9374225, 22.17943 ], [ 88.9384524, 22.1799068 ], [ 88.9405124, 22.1805427 ], [ 88.9448039, 22.1813375 ], [ 88.9463488, 22.1824502 ], [ 88.9475505, 22.1840397 ], [ 88.9472072, 22.1851524 ], [ 88.9461772, 22.1869009 ], [ 88.9451472, 22.1875367 ], [ 88.9436023, 22.1888083 ], [ 88.9430873, 22.1899209 ], [ 88.9439456, 22.1903977 ], [ 88.9448039, 22.1902388 ], [ 88.9460055, 22.1899209 ], [ 88.9470355, 22.1891262 ], [ 88.9490954, 22.1889672 ], [ 88.9516703, 22.1889672 ], [ 88.9537303, 22.1889672 ], [ 88.9563052, 22.1892851 ], [ 88.9578502, 22.189762 ], [ 88.9592234, 22.189603 ], [ 88.9617984, 22.1888083 ], [ 88.9621417, 22.1845166 ], [ 88.963515, 22.1811785 ], [ 88.9648883, 22.1756149 ], [ 88.9660899, 22.1717997 ], [ 88.9679782, 22.1670306 ], [ 88.9702098, 22.1635331 ], [ 88.973128, 22.1600356 ], [ 88.9753596, 22.1578098 ], [ 88.9758746, 22.1565379 ], [ 88.9772479, 22.155425 ], [ 88.9794795, 22.1539942 ], [ 88.9815394, 22.1524043 ], [ 88.9830844, 22.1506554 ], [ 88.984801, 22.1484295 ], [ 88.9851443, 22.1468395 ], [ 88.9849727, 22.1452495 ], [ 88.9846293, 22.1435005 ], [ 88.9854876, 22.1425465 ], [ 88.9854876, 22.1401615 ], [ 88.9841143, 22.1387305 ], [ 88.9827411, 22.1365044 ], [ 88.9820544, 22.1344372 ], [ 88.9811961, 22.1325291 ], [ 88.9801661, 22.1318931 ], [ 88.9784495, 22.1330061 ], [ 88.9772479, 22.1347553 ], [ 88.9758746, 22.1366634 ], [ 88.9745013, 22.1384124 ], [ 88.972613, 22.1396845 ], [ 88.9705531, 22.1406385 ], [ 88.9700381, 22.1427055 ], [ 88.9695231, 22.1452495 ], [ 88.9695231, 22.1471575 ], [ 88.9690081, 22.1487474 ], [ 88.9696948, 22.1500194 ], [ 88.9707248, 22.1524043 ], [ 88.9708964, 22.1546301 ], [ 88.9700381, 22.15622 ], [ 88.9672915, 22.156379 ], [ 88.9659182, 22.1566969 ], [ 88.9652316, 22.1582868 ], [ 88.964545, 22.1593996 ], [ 88.963, 22.1600356 ], [ 88.9616267, 22.1589227 ], [ 88.9604251, 22.1584458 ], [ 88.9580218, 22.1576508 ], [ 88.9551036, 22.1576508 ], [ 88.9539019, 22.1581278 ], [ 88.9552752, 22.1570149 ], [ 88.9569919, 22.1568559 ], [ 88.9585368, 22.1570149 ], [ 88.9612834, 22.1579688 ], [ 88.9636866, 22.1589227 ], [ 88.964545, 22.1581278 ], [ 88.9650599, 22.1568559 ], [ 88.9655749, 22.155902 ], [ 88.9671199, 22.155584 ], [ 88.9690081, 22.155584 ], [ 88.9700381, 22.1551071 ], [ 88.9698665, 22.1536762 ], [ 88.9696948, 22.1519273 ], [ 88.9684932, 22.1504964 ], [ 88.9681498, 22.1479525 ], [ 88.9686648, 22.1462035 ], [ 88.9691798, 22.1430235 ], [ 88.9688365, 22.1411155 ], [ 88.9714114, 22.1395255 ], [ 88.9743297, 22.1374584 ], [ 88.9762179, 22.1344372 ], [ 88.9787928, 22.131416 ], [ 88.9803378, 22.130939 ], [ 88.9823977, 22.131734 ], [ 88.9823977, 22.1328471 ], [ 88.9834277, 22.1336422 ], [ 88.9839427, 22.1353913 ], [ 88.9849727, 22.1376174 ], [ 88.9861743, 22.1371404 ], [ 88.9861743, 22.1357093 ], [ 88.985831, 22.1323701 ], [ 88.9851443, 22.1301439 ], [ 88.9844577, 22.1252143 ], [ 88.984286, 22.1212388 ], [ 88.9831372, 22.1205962 ], [ 88.9817639, 22.1210733 ], [ 88.9801332, 22.1216299 ], [ 88.9780732, 22.1221069 ], [ 88.97567, 22.1226635 ], [ 88.9731809, 22.1231406 ], [ 88.9707776, 22.1234586 ], [ 88.9687177, 22.1242537 ], [ 88.9682027, 22.1248898 ], [ 88.968546, 22.12648 ], [ 88.9688893, 22.1280702 ], [ 88.9676877, 22.1293424 ], [ 88.9682027, 22.1275932 ], [ 88.967516, 22.125844 ], [ 88.9668294, 22.1244128 ], [ 88.9668294, 22.1232996 ], [ 88.9682027, 22.1231406 ], [ 88.9702626, 22.1228225 ], [ 88.9724942, 22.1225045 ], [ 88.9754125, 22.1221864 ], [ 88.978159, 22.1215503 ], [ 88.9803906, 22.1209142 ], [ 88.9810773, 22.1201191 ], [ 88.9827939, 22.119642 ], [ 88.9836522, 22.1188469 ], [ 88.9831372, 22.1180518 ], [ 88.9822789, 22.1151892 ], [ 88.9809056, 22.1118495 ], [ 88.9785024, 22.1069193 ], [ 88.9759274, 22.1019889 ], [ 88.9742108, 22.0986489 ], [ 88.9730092, 22.0943545 ], [ 88.9716359, 22.0897418 ], [ 88.9702626, 22.0843336 ], [ 88.9699193, 22.0824248 ], [ 88.9678594, 22.0821067 ], [ 88.9664861, 22.0841746 ], [ 88.9652844, 22.0864015 ], [ 88.9651128, 22.0886284 ], [ 88.9640828, 22.0918096 ], [ 88.9616796, 22.0933206 ], [ 88.9602204, 22.0943147 ], [ 88.9579888, 22.0952293 ], [ 88.956916, 22.0959053 ], [ 88.9564439, 22.0984899 ], [ 88.956873, 22.0996827 ], [ 88.9567872, 22.1001201 ], [ 88.9561435, 22.1008756 ], [ 88.9561864, 22.1016708 ], [ 88.9548131, 22.102148 ], [ 88.9534398, 22.1024661 ], [ 88.9522382, 22.1026251 ], [ 88.9522382, 22.1037384 ], [ 88.9529248, 22.1044541 ], [ 88.9535256, 22.1048517 ], [ 88.9552423, 22.1045337 ], [ 88.9569589, 22.1044541 ], [ 88.958418, 22.1046132 ], [ 88.9593621, 22.1051698 ], [ 88.9599629, 22.105806 ], [ 88.9616796, 22.1060446 ], [ 88.9639112, 22.1066012 ], [ 88.9654561, 22.1086687 ], [ 88.9658853, 22.1104182 ], [ 88.9670011, 22.1120085 ], [ 88.968031, 22.1129627 ], [ 88.9694043, 22.1145531 ], [ 88.9683743, 22.114076 ], [ 88.9666577, 22.1126447 ], [ 88.9651128, 22.1102591 ], [ 88.9647695, 22.1085097 ], [ 88.9633962, 22.1070783 ], [ 88.9615079, 22.1067603 ], [ 88.959448, 22.1064422 ], [ 88.9585897, 22.1053289 ], [ 88.956873, 22.1050108 ], [ 88.9551564, 22.1051698 ], [ 88.9534398, 22.1053289 ], [ 88.9522382, 22.1046927 ], [ 88.9513799, 22.1037384 ], [ 88.9517232, 22.1019889 ], [ 88.9536115, 22.1018299 ], [ 88.9554997, 22.1013527 ], [ 88.9556714, 22.1005575 ], [ 88.9565297, 22.0997623 ], [ 88.9558811, 22.0983504 ], [ 88.9563961, 22.0954874 ], [ 88.9579411, 22.0945331 ], [ 88.9601727, 22.0937378 ], [ 88.9625759, 22.0916701 ], [ 88.9636059, 22.0903976 ], [ 88.9637775, 22.0872164 ], [ 88.9644642, 22.0854666 ], [ 88.9653225, 22.0843532 ], [ 88.9661808, 22.0826034 ], [ 88.9670391, 22.0810127 ], [ 88.9668674, 22.0789448 ], [ 88.9656658, 22.077195 ], [ 88.9641209, 22.0756042 ], [ 88.961031, 22.0740135 ], [ 88.9575977, 22.0735362 ], [ 88.9531345, 22.0735362 ], [ 88.9460964, 22.0738544 ], [ 88.9409466, 22.0732181 ], [ 88.9364834, 22.0719454 ], [ 88.9332218, 22.0703546 ], [ 88.9291019, 22.0674911 ], [ 88.9254971, 22.0649457 ], [ 88.9241238, 22.0646275 ], [ 88.9242954, 22.0633548 ], [ 88.9225788, 22.0582638 ], [ 88.9217205, 22.0530135 ], [ 88.9222355, 22.0444218 ], [ 88.9234371, 22.0386936 ], [ 88.9239521, 22.0336018 ], [ 88.9241238, 22.0285097 ], [ 88.9244671, 22.0237357 ], [ 88.9261837, 22.0153013 ], [ 88.9273853, 22.0124367 ], [ 88.927557, 22.0113227 ], [ 88.928587, 22.0070256 ], [ 88.9296169, 22.0032058 ], [ 88.9304752, 22.0022509 ], [ 88.9308186, 22.0009776 ], [ 88.9316769, 21.9995451 ], [ 88.9335651, 21.9952477 ], [ 88.9351101, 21.9922235 ], [ 88.9351101, 21.9903134 ], [ 88.9328785, 21.9884034 ], [ 88.9297886, 21.9863341 ], [ 88.9263554, 21.9841056 ], [ 88.9201756, 21.9810811 ], [ 88.9177723, 21.9807628 ], [ 88.9177723, 21.981877 ], [ 88.9167423, 21.9821954 ], [ 88.9157124, 21.9856974 ], [ 88.9148541, 21.9891992 ], [ 88.9136524, 21.9938152 ], [ 88.9139957, 21.9954069 ], [ 88.9148541, 21.998431 ], [ 88.9155407, 22.0028875 ], [ 88.9162273, 22.007503 ], [ 88.9162273, 22.0110044 ], [ 88.9160557, 22.0137099 ], [ 88.9157124, 22.016097 ], [ 88.9150257, 22.0186433 ], [ 88.9141674, 22.0210304 ], [ 88.9129658, 22.0243723 ], [ 88.9115925, 22.0273958 ], [ 88.9090176, 22.0320105 ], [ 88.9083309, 22.0348747 ], [ 88.9090176, 22.0366251 ], [ 88.9097042, 22.0383754 ], [ 88.9109058, 22.0398075 ], [ 88.9114208, 22.0413986 ], [ 88.9114208, 22.0439444 ], [ 88.9114208, 22.0460129 ], [ 88.9105625, 22.0487177 ], [ 88.9098759, 22.0517407 ], [ 88.9088459, 22.0547637 ], [ 88.9078159, 22.0579456 ], [ 88.9069576, 22.0596957 ], [ 88.9071293, 22.0609684 ], [ 88.9078159, 22.061923 ], [ 88.906271, 22.0608093 ], [ 88.9054127, 22.0608093 ], [ 88.9045544, 22.0616048 ], [ 88.9021511, 22.063673 ], [ 88.9016361, 22.0647866 ], [ 88.9030094, 22.0660593 ], [ 88.9036961, 22.0668547 ], [ 88.904211, 22.0681274 ], [ 88.905241, 22.0697183 ], [ 88.906271, 22.0716273 ], [ 88.9071293, 22.073059 ], [ 88.9076443, 22.075127 ], [ 88.9093609, 22.0779904 ], [ 88.9109058, 22.079422 ], [ 88.9121075, 22.0803765 ], [ 88.9136524, 22.0810127 ], [ 88.9162273, 22.0821262 ], [ 88.9186306, 22.0833988 ], [ 88.9210339, 22.0857848 ], [ 88.9232655, 22.0875345 ], [ 88.9246388, 22.0894432 ], [ 88.9273853, 22.0921472 ], [ 88.9287586, 22.0937378 ], [ 88.9306469, 22.0961236 ], [ 88.9313335, 22.0983504 ], [ 88.9315052, 22.1005771 ], [ 88.9316769, 22.1016904 ], [ 88.9320202, 22.1042351 ], [ 88.9311619, 22.1069389 ], [ 88.9301319, 22.1104377 ], [ 88.9292736, 22.1126642 ], [ 88.927557, 22.1156859 ], [ 88.9253254, 22.1190255 ], [ 88.9237804, 22.1217289 ], [ 88.9242954, 22.1230011 ], [ 88.9254971, 22.1225241 ], [ 88.9272137, 22.122206 ], [ 88.9301319, 22.122206 ], [ 88.9318485, 22.1225241 ], [ 88.9333935, 22.1239553 ], [ 88.9347668, 22.1247504 ], [ 88.9369984, 22.1245913 ], [ 88.93923, 22.1258635 ], [ 88.9404316, 22.1274537 ], [ 88.9406033, 22.1285668 ], [ 88.9390583, 22.1288849 ], [ 88.9382, 22.130157 ], [ 88.9369984, 22.1309521 ], [ 88.9356251, 22.1320652 ], [ 88.9342518, 22.1333373 ], [ 88.9325352, 22.1349274 ], [ 88.9311619, 22.1368355 ], [ 88.9313335, 22.1381075 ], [ 88.9327068, 22.1389025 ], [ 88.9337368, 22.1387435 ], [ 88.9354534, 22.1392206 ], [ 88.9364834, 22.1406516 ], [ 88.9369984, 22.1420826 ], [ 88.9368267, 22.1438316 ], [ 88.9351101, 22.1438316 ], [ 88.9330502, 22.1446266 ], [ 88.9309902, 22.1449446 ], [ 88.9301319, 22.1463756 ], [ 88.9299603, 22.1487605 ], [ 88.9303036, 22.1509864 ], [ 88.9309902, 22.1535303 ], [ 88.9318914, 22.153888 ], [ 88.9328356, 22.1528148 ], [ 88.9333506, 22.1520596 ], [ 88.9338226, 22.1517416 ], [ 88.9352388, 22.1519404 ], [ 88.9357109, 22.1526558 ], [ 88.9359255, 22.1538483 ], [ 88.9362259, 22.1551996 ], [ 88.9364834, 22.1560741 ], [ 88.9359684, 22.1552791 ], [ 88.9356251, 22.1538483 ], [ 88.9354534, 22.1525763 ], [ 88.9349384, 22.1519404 ], [ 88.9337368, 22.1519404 ], [ 88.9330502, 22.1528943 ], [ 88.9320202, 22.1541662 ], [ 88.9308186, 22.1552791 ], [ 88.9297886, 22.1552791 ], [ 88.9284153, 22.1548022 ], [ 88.9266987, 22.1546432 ], [ 88.9258404, 22.1533713 ], [ 88.9249821, 22.1520994 ], [ 88.9242954, 22.1513044 ], [ 88.9234371, 22.1516224 ], [ 88.9227505, 22.1525763 ], [ 88.9230938, 22.1543252 ], [ 88.9241238, 22.1551202 ], [ 88.9249821, 22.1560741 ], [ 88.9248104, 22.1578229 ], [ 88.9239521, 22.1589358 ], [ 88.9225788, 22.1594127 ], [ 88.9212055, 22.1600487 ], [ 88.9206996, 22.1609584 ], [ 88.9227595, 22.1617533 ], [ 88.9246478, 22.1633431 ], [ 88.9256778, 22.1650919 ], [ 88.9263644, 22.1676355 ], [ 88.9263644, 22.1708149 ], [ 88.9261928, 22.1733584 ], [ 88.9258494, 22.1754249 ] ] ], [ [ [ 89.0133102, 22.1726688 ], [ 89.0133102, 22.1707611 ], [ 89.0133102, 22.1698073 ], [ 89.0141685, 22.1688535 ], [ 89.0139968, 22.1680586 ], [ 89.0143401, 22.1648792 ], [ 89.0146835, 22.1629714 ], [ 89.0151985, 22.1602688 ], [ 89.0165717, 22.1577251 ], [ 89.0182884, 22.1540684 ], [ 89.020005, 22.1513656 ], [ 89.0213783, 22.1492987 ], [ 89.0191467, 22.1500936 ], [ 89.0146835, 22.1515245 ], [ 89.0110786, 22.1524785 ], [ 89.0102203, 22.1534324 ], [ 89.0102203, 22.1550223 ], [ 89.0112502, 22.1577251 ], [ 89.0109069, 22.1597918 ], [ 89.0107353, 22.1588379 ], [ 89.0100486, 22.1564532 ], [ 89.0090186, 22.1542274 ], [ 89.0095336, 22.1524785 ], [ 89.0107353, 22.1516835 ], [ 89.0138252, 22.1508886 ], [ 89.0196617, 22.1492987 ], [ 89.0234382, 22.1473907 ], [ 89.0265281, 22.1453238 ], [ 89.0328796, 22.1416668 ], [ 89.0388877, 22.1383277 ], [ 89.0467841, 22.1337164 ], [ 89.0500457, 22.1316493 ], [ 89.0502174, 22.1299001 ], [ 89.0488441, 22.1267198 ], [ 89.0466125, 22.1235393 ], [ 89.041806, 22.1181325 ], [ 89.0382011, 22.1132025 ], [ 89.0354545, 22.1100218 ], [ 89.0308196, 22.110817 ], [ 89.0266998, 22.110976 ], [ 89.0229232, 22.111135 ], [ 89.0198333, 22.1116121 ], [ 89.0165717, 22.1133615 ], [ 89.0170867, 22.1144748 ], [ 89.0188033, 22.115588 ], [ 89.0208633, 22.1160651 ], [ 89.0239532, 22.1171783 ], [ 89.0272148, 22.1186096 ], [ 89.029618, 22.1195637 ], [ 89.0309913, 22.120995 ], [ 89.0304763, 22.1221081 ], [ 89.0292747, 22.1233803 ], [ 89.0272148, 22.1249705 ], [ 89.0249832, 22.1268788 ], [ 89.0225799, 22.128946 ], [ 89.0201766, 22.1306952 ], [ 89.0181167, 22.1324443 ], [ 89.0157134, 22.1341935 ], [ 89.0126235, 22.1365786 ], [ 89.009877, 22.1394407 ], [ 89.0097053, 22.1413487 ], [ 89.008847, 22.1432568 ], [ 89.0090186, 22.1426208 ], [ 89.0090186, 22.1417463 ], [ 89.0090186, 22.1416866 ], [ 89.0090186, 22.1410307 ], [ 89.008847, 22.1388047 ], [ 89.0105636, 22.1368966 ], [ 89.0136535, 22.1346705 ], [ 89.0150268, 22.1335574 ], [ 89.0181167, 22.1313312 ], [ 89.0212066, 22.128628 ], [ 89.0225799, 22.1273558 ], [ 89.0275581, 22.1233803 ], [ 89.0292747, 22.1219491 ], [ 89.0294464, 22.1208359 ], [ 89.0282447, 22.1201998 ], [ 89.0242965, 22.1189276 ], [ 89.0208633, 22.1178144 ], [ 89.0167434, 22.115906 ], [ 89.0146835, 22.1144748 ], [ 89.0148551, 22.1128844 ], [ 89.0170867, 22.1116121 ], [ 89.0193183, 22.110817 ], [ 89.0234382, 22.1098627 ], [ 89.0256698, 22.1097037 ], [ 89.0318496, 22.1093856 ], [ 89.0347679, 22.1095447 ], [ 89.0356262, 22.1085904 ], [ 89.0356262, 22.1073181 ], [ 89.0351112, 22.1049325 ], [ 89.0339095, 22.1012744 ], [ 89.0332229, 22.0980934 ], [ 89.0320213, 22.0947533 ], [ 89.0313346, 22.0933218 ], [ 89.0315063, 22.0868003 ], [ 89.0332229, 22.076938 ], [ 89.0356262, 22.0680295 ], [ 89.0375144, 22.0599159 ], [ 89.0387161, 22.0553021 ], [ 89.0385444, 22.0529156 ], [ 89.028588, 22.0529156 ], [ 89.0284164, 22.0546657 ], [ 89.0289314, 22.0557794 ], [ 89.029618, 22.0568931 ], [ 89.0304763, 22.058325 ], [ 89.0303047, 22.0613478 ], [ 89.029618, 22.0637342 ], [ 89.029103, 22.0678704 ], [ 89.0289314, 22.0710521 ], [ 89.029103, 22.0732792 ], [ 89.029103, 22.0758245 ], [ 89.0289314, 22.0780515 ], [ 89.0279014, 22.0786878 ], [ 89.0258415, 22.0783697 ], [ 89.0222366, 22.0778925 ], [ 89.0186317, 22.0777334 ], [ 89.0146835, 22.0777334 ], [ 89.0121086, 22.0788469 ], [ 89.0100486, 22.0801195 ], [ 89.0085037, 22.0820283 ], [ 89.0069587, 22.0839371 ], [ 89.0061004, 22.0850506 ], [ 89.0047271, 22.0855278 ], [ 89.0030105, 22.0848915 ], [ 89.0012939, 22.0834599 ], [ 88.9999206, 22.0823465 ], [ 88.9985473, 22.0810739 ], [ 88.9970023, 22.081233 ], [ 88.9952857, 22.0823465 ], [ 88.9930541, 22.0840962 ], [ 88.9911659, 22.0853687 ], [ 88.9903076, 22.0864822 ], [ 88.9908225, 22.0874366 ], [ 88.9921958, 22.0880728 ], [ 88.9952857, 22.0891863 ], [ 88.9968307, 22.0891863 ], [ 88.9995773, 22.0904588 ], [ 89.0004356, 22.0914131 ], [ 89.0006072, 22.0926856 ], [ 88.9995773, 22.0945943 ], [ 88.997689, 22.096821 ], [ 88.9963157, 22.0987296 ], [ 88.9959724, 22.1007973 ], [ 88.996144, 22.1019106 ], [ 88.9975173, 22.1022287 ], [ 89.0002639, 22.103183 ], [ 89.0023239, 22.1041372 ], [ 89.0038688, 22.1050915 ], [ 89.0054138, 22.1065229 ], [ 89.0055854, 22.1076362 ], [ 89.0055854, 22.1087495 ], [ 89.0059287, 22.1119302 ], [ 89.0059287, 22.115747 ], [ 89.0059287, 22.1186096 ], [ 89.0050704, 22.1205179 ], [ 89.0031822, 22.121472 ], [ 89.0011222, 22.121313 ], [ 88.9990623, 22.121313 ], [ 88.997689, 22.1217901 ], [ 88.9970023, 22.1229032 ], [ 88.9964874, 22.1254476 ], [ 88.996659, 22.1283099 ], [ 88.9968307, 22.1311722 ], [ 88.997174, 22.1372146 ], [ 88.9963157, 22.1423028 ], [ 88.9940841, 22.1477087 ], [ 88.9921958, 22.1526375 ], [ 88.9896209, 22.1569301 ], [ 88.9849861, 22.1612227 ], [ 88.9813812, 22.1645612 ], [ 88.9765746, 22.1699663 ], [ 88.974858, 22.1740995 ], [ 88.9738281, 22.1790273 ], [ 88.9738281, 22.1830012 ], [ 88.9736564, 22.1874519 ], [ 88.9734847, 22.190472 ], [ 88.9733131, 22.1936509 ], [ 88.9755447, 22.1930151 ], [ 88.9788062, 22.193333 ], [ 88.9822395, 22.1938098 ], [ 88.9849861, 22.1946045 ], [ 88.9877326, 22.195876 ], [ 88.9911659, 22.1976244 ], [ 88.9937408, 22.1984191 ], [ 88.996144, 22.198737 ], [ 88.9997489, 22.1988959 ], [ 89.0036971, 22.1982601 ], [ 89.0079887, 22.1969886 ], [ 89.0124519, 22.1952403 ], [ 89.0143401, 22.1944456 ], [ 89.0145118, 22.1925383 ], [ 89.0146835, 22.190313 ], [ 89.0134818, 22.1849087 ], [ 89.0134818, 22.1814117 ], [ 89.0129669, 22.1779146 ], [ 89.0129669, 22.1753712 ], [ 89.0133102, 22.1726688 ] ] ], [ [ [ 69.60929, 22.45057 ], [ 69.61915, 22.45705 ], [ 69.62377, 22.45914 ], [ 69.62485, 22.45932 ], [ 69.62517, 22.45935 ], [ 69.62832, 22.45942 ], [ 69.63021, 22.45891 ], [ 69.63056, 22.4573 ], [ 69.63295, 22.45575 ], [ 69.63796, 22.45332 ], [ 69.64291, 22.44977 ], [ 69.64636, 22.44472 ], [ 69.64793, 22.44041 ], [ 69.64707, 22.43835 ], [ 69.64531, 22.43492 ], [ 69.64558, 22.43237 ], [ 69.64898, 22.43205 ], [ 69.65425, 22.43071 ], [ 69.65627, 22.42817 ], [ 69.65635, 22.42546 ], [ 69.65405, 22.42361 ], [ 69.64853, 22.42068 ], [ 69.64382, 22.4162 ], [ 69.64144, 22.41323 ], [ 69.63703, 22.40745 ], [ 69.63518, 22.40681 ], [ 69.6332, 22.40719 ], [ 69.62999, 22.40902 ], [ 69.61899, 22.41306 ], [ 69.61297, 22.41686 ], [ 69.609275, 22.41798811946903 ], [ 69.60845, 22.41824 ], [ 69.60391, 22.42127 ], [ 69.59902, 22.4238 ], [ 69.59342, 22.42866 ], [ 69.59015, 22.43309 ], [ 69.58858, 22.43747 ], [ 69.59079, 22.44203 ], [ 69.59429, 22.44412 ], [ 69.60929, 22.45057 ] ] ], [ [ [ 69.085473, 22.4212515 ], [ 69.0853342, 22.4217665 ], [ 69.0849196, 22.4221525 ], [ 69.0840889, 22.4222821 ], [ 69.0842292, 22.4258867 ], [ 69.0847835, 22.4266588 ], [ 69.0853376, 22.4271734 ], [ 69.0853386, 22.4287183 ], [ 69.0858931, 22.4297478 ], [ 69.0854798, 22.4323227 ], [ 69.0888043, 22.4339941 ], [ 69.0896351, 22.4341228 ], [ 69.0897735, 22.4346376 ], [ 69.0900507, 22.434895 ], [ 69.0903282, 22.4356673 ], [ 69.0906053, 22.4359245 ], [ 69.0907459, 22.4384993 ], [ 69.0915767, 22.4384987 ], [ 69.0918542, 22.4392709 ], [ 69.0924085, 22.4396565 ], [ 69.0932395, 22.4399134 ], [ 69.0954554, 22.4400413 ], [ 69.0958706, 22.440556 ], [ 69.0961492, 22.4428731 ], [ 69.0960114, 22.4430014 ], [ 69.0954575, 22.4431309 ], [ 69.095458, 22.4439033 ], [ 69.0965659, 22.4439028 ], [ 69.0964276, 22.4449326 ], [ 69.0957362, 22.4458338 ], [ 69.0943514, 22.4459638 ], [ 69.0943518, 22.4464788 ], [ 69.093798, 22.4466074 ], [ 69.0936591, 22.4467366 ], [ 69.0936597, 22.4477665 ], [ 69.0931061, 22.4482817 ], [ 69.093246, 22.449569 ], [ 69.0943541, 22.4498258 ], [ 69.0944164, 22.4514266 ], [ 69.0944205, 22.4515311 ], [ 69.0944945, 22.4534304 ], [ 69.0939415, 22.4547181 ], [ 69.0931112, 22.456006 ], [ 69.0928358, 22.4583233 ], [ 69.0931131, 22.4585805 ], [ 69.0936682, 22.4603826 ], [ 69.0938079, 22.4614123 ], [ 69.0932539, 22.4614127 ], [ 69.0932541, 22.4616701 ], [ 69.0935312, 22.4617982 ], [ 69.0974093, 22.461796 ], [ 69.1001802, 22.4628241 ], [ 69.1026742, 22.4641099 ], [ 69.10406, 22.4648814 ], [ 69.1071084, 22.4664244 ], [ 69.1115419, 22.4679661 ], [ 69.1120965, 22.4684807 ], [ 69.1156992, 22.4702804 ], [ 69.1162537, 22.470795 ], [ 69.1173626, 22.4715665 ], [ 69.1187479, 22.471823 ], [ 69.122905, 22.4736223 ], [ 69.1270624, 22.4756788 ], [ 69.1284478, 22.4759351 ], [ 69.128725, 22.4761923 ], [ 69.1303873, 22.476191 ], [ 69.1326043, 22.4769617 ], [ 69.1370373, 22.4772153 ], [ 69.1373142, 22.4769577 ], [ 69.1386993, 22.4769564 ], [ 69.140362, 22.4774699 ], [ 69.1423011, 22.4772108 ], [ 69.1425778, 22.4769532 ], [ 69.1436857, 22.4765663 ], [ 69.1436848, 22.4757939 ], [ 69.1447921, 22.4748914 ], [ 69.1475615, 22.4739882 ], [ 69.1485279, 22.4714127 ], [ 69.1504652, 22.4696085 ], [ 69.1506037, 22.4690934 ], [ 69.1503266, 22.4690936 ], [ 69.1503262, 22.4688362 ], [ 69.1494948, 22.4684503 ], [ 69.1483856, 22.4674216 ], [ 69.1474149, 22.4667791 ], [ 69.1471372, 22.4662645 ], [ 69.1464417, 22.4629181 ], [ 69.1458876, 22.4627894 ], [ 69.145333, 22.4622749 ], [ 69.1442248, 22.4620184 ], [ 69.1438082, 22.461633 ], [ 69.1435289, 22.4593161 ], [ 69.1432514, 22.4588013 ], [ 69.1432491, 22.4567415 ], [ 69.1440768, 22.4533938 ], [ 69.1446298, 22.4523634 ], [ 69.1446279, 22.4505611 ], [ 69.1443502, 22.4500464 ], [ 69.1440709, 22.4477295 ], [ 69.1439327, 22.4476004 ], [ 69.1436559, 22.4476006 ], [ 69.1435169, 22.4477298 ], [ 69.1432438, 22.4515922 ], [ 69.142691, 22.4526225 ], [ 69.1418607, 22.4533957 ], [ 69.1413081, 22.4546835 ], [ 69.1413102, 22.4567432 ], [ 69.1418655, 22.4580301 ], [ 69.14242, 22.4585446 ], [ 69.1427003, 22.461634 ], [ 69.1418706, 22.462922 ], [ 69.1409023, 22.4638236 ], [ 69.1403485, 22.4640815 ], [ 69.1397946, 22.4640821 ], [ 69.1396555, 22.463954 ], [ 69.1395164, 22.4629241 ], [ 69.1381312, 22.4629252 ], [ 69.1379929, 22.4634405 ], [ 69.1370244, 22.4640844 ], [ 69.1361936, 22.4643426 ], [ 69.1353633, 22.4651158 ], [ 69.1342559, 22.4658891 ], [ 69.1328715, 22.4666625 ], [ 69.1317634, 22.4666635 ], [ 69.1309316, 22.4658918 ], [ 69.1287156, 22.4658935 ], [ 69.1270532, 22.4655091 ], [ 69.1269148, 22.4662817 ], [ 69.1262231, 22.466668 ], [ 69.1253924, 22.4671836 ], [ 69.1248388, 22.4676988 ], [ 69.1226234, 22.468473 ], [ 69.1223463, 22.4684731 ], [ 69.1209607, 22.4679593 ], [ 69.1179133, 22.4678334 ], [ 69.1176355, 22.4668037 ], [ 69.1170815, 22.4669322 ], [ 69.1168048, 22.46719 ], [ 69.1159736, 22.4671906 ], [ 69.1154193, 22.4666759 ], [ 69.1145879, 22.4664191 ], [ 69.1140333, 22.4656472 ], [ 69.1132017, 22.4651328 ], [ 69.1118164, 22.4646189 ], [ 69.1109846, 22.463847 ], [ 69.1102913, 22.4634616 ], [ 69.1100139, 22.462947 ], [ 69.108905, 22.4619179 ], [ 69.1080725, 22.4601161 ], [ 69.1080715, 22.4588287 ], [ 69.1091764, 22.4547085 ], [ 69.1094531, 22.4544509 ], [ 69.1097287, 22.4526484 ], [ 69.1088967, 22.4513615 ], [ 69.1087568, 22.4490443 ], [ 69.1082031, 22.449173 ], [ 69.1077865, 22.4485301 ], [ 69.1077857, 22.4475002 ], [ 69.1079245, 22.4472426 ], [ 69.1073705, 22.447243 ], [ 69.1069532, 22.445441 ], [ 69.1069515, 22.4431237 ], [ 69.1077789, 22.4387463 ], [ 69.1080556, 22.4382311 ], [ 69.1087479, 22.4374582 ], [ 69.1073628, 22.4370725 ], [ 69.1066693, 22.4364297 ], [ 69.1063921, 22.4359149 ], [ 69.1034824, 22.4332129 ], [ 69.100159, 22.433215 ], [ 69.0991887, 22.4325724 ], [ 69.098496, 22.4314138 ], [ 69.0948954, 22.4311585 ], [ 69.0935098, 22.429872 ], [ 69.0926788, 22.4296149 ], [ 69.0918474, 22.4288431 ], [ 69.0912934, 22.4285858 ], [ 69.0906002, 22.427943 ], [ 69.0900456, 22.4271708 ], [ 69.0892137, 22.4253691 ], [ 69.0892131, 22.4243392 ], [ 69.0883811, 22.4225373 ], [ 69.0874117, 22.4216363 ], [ 69.085473, 22.4212515 ] ] ], [ [ [ 69.35197, 22.50519 ], [ 69.35076, 22.50465 ], [ 69.3492, 22.50462 ], [ 69.34686, 22.50476 ], [ 69.34484, 22.50543 ], [ 69.34044, 22.50717 ], [ 69.33802, 22.50751 ], [ 69.33659, 22.50738 ], [ 69.33519, 22.50772 ], [ 69.33195, 22.50919 ], [ 69.32935, 22.51088 ], [ 69.32474, 22.51429 ], [ 69.31671, 22.51953 ], [ 69.31577, 22.52108 ], [ 69.31579, 22.52336 ], [ 69.3171, 22.52502 ], [ 69.3201, 22.52654 ], [ 69.32279, 22.52755 ], [ 69.32467, 22.52721 ], [ 69.32924, 22.52498 ], [ 69.33081, 22.52507 ], [ 69.33259, 22.52593 ], [ 69.33727, 22.52574 ], [ 69.34117, 22.52526 ], [ 69.34813, 22.52514 ], [ 69.35188, 22.52465 ], [ 69.3544, 22.52102 ], [ 69.35691, 22.51428 ], [ 69.35706, 22.51004 ], [ 69.35501, 22.50761 ], [ 69.35233, 22.50538 ], [ 69.35197, 22.50519 ] ] ], [ [ [ 69.2929, 22.45846 ], [ 69.29276, 22.45886 ], [ 69.29286, 22.45929 ], [ 69.29477, 22.46255 ], [ 69.29537, 22.46351 ], [ 69.29698, 22.46702 ], [ 69.29835, 22.46978 ], [ 69.29878, 22.47116 ], [ 69.29923, 22.47201 ], [ 69.30034, 22.47336 ], [ 69.30102, 22.47369 ], [ 69.30166, 22.47378 ], [ 69.3022, 22.47368 ], [ 69.30273, 22.47324 ], [ 69.30357, 22.47124 ], [ 69.30417, 22.47025 ], [ 69.30519, 22.46978 ], [ 69.30586, 22.46975 ], [ 69.30666, 22.46981 ], [ 69.30742, 22.47006 ], [ 69.30789, 22.47049 ], [ 69.30949, 22.47151 ], [ 69.31055, 22.47173 ], [ 69.31179, 22.47164 ], [ 69.31347, 22.47183 ], [ 69.31549, 22.47235 ], [ 69.31582, 22.47248 ], [ 69.31676, 22.4726 ], [ 69.31744, 22.47248 ], [ 69.31861, 22.47207 ], [ 69.32027, 22.47107 ], [ 69.32173, 22.47041 ], [ 69.32309, 22.46988 ], [ 69.32407, 22.46938 ], [ 69.3245, 22.46901 ], [ 69.32477, 22.46847 ], [ 69.32477, 22.46787 ], [ 69.32481, 22.46707 ], [ 69.32518, 22.466 ], [ 69.32645, 22.4643 ], [ 69.32738, 22.46313 ], [ 69.32755, 22.46223 ], [ 69.32692, 22.45915 ], [ 69.32647, 22.4575 ], [ 69.32579, 22.45642 ], [ 69.32353, 22.45418 ], [ 69.32183, 22.45262 ], [ 69.32075, 22.45171 ], [ 69.31993, 22.45133 ], [ 69.31462, 22.45163 ], [ 69.3129, 22.4517 ], [ 69.31106, 22.45216 ], [ 69.30976, 22.45253 ], [ 69.30872, 22.45258 ], [ 69.30769, 22.45273 ], [ 69.30645, 22.45321 ], [ 69.30471, 22.45354 ], [ 69.30402, 22.45363 ], [ 69.3035, 22.45373 ], [ 69.30264, 22.45414 ], [ 69.30061, 22.45485 ], [ 69.29988, 22.45532 ], [ 69.29894, 22.4565 ], [ 69.29709, 22.45749 ], [ 69.29657, 22.45783 ], [ 69.29485, 22.45807 ], [ 69.29394, 22.45807 ], [ 69.29324, 22.45822 ], [ 69.2929, 22.45846 ] ] ], [ [ [ 69.94388, 22.52367 ], [ 69.94346, 22.52124 ], [ 69.94206, 22.51933 ], [ 69.94016, 22.51892 ], [ 69.93644, 22.51899 ], [ 69.93272, 22.51913 ], [ 69.93028, 22.51838 ], [ 69.92842, 22.51716 ], [ 69.92095, 22.51439 ], [ 69.91447, 22.51214 ], [ 69.91308, 22.51215 ], [ 69.91127, 22.51306 ], [ 69.90857, 22.51348 ], [ 69.9052, 22.51392 ], [ 69.90184, 22.51426 ], [ 69.89846, 22.51377 ], [ 69.89519, 22.51521 ], [ 69.8898, 22.51763 ], [ 69.88366, 22.51973 ], [ 69.88026, 22.52018 ], [ 69.87715, 22.52023 ], [ 69.87121, 22.52182 ], [ 69.86408, 22.52488 ], [ 69.86301, 22.52632 ], [ 69.86348, 22.52902 ], [ 69.86512, 22.53035 ], [ 69.86725, 22.53088 ], [ 69.86898, 22.53058 ], [ 69.87526, 22.52811 ], [ 69.88722, 22.52371 ], [ 69.89028, 22.52303 ], [ 69.89349, 22.52319 ], [ 69.89578, 22.52369 ], [ 69.89736, 22.52448 ], [ 69.89839, 22.52614 ], [ 69.90062, 22.53062 ], [ 69.9023, 22.53653 ], [ 69.90413, 22.54248 ], [ 69.90581, 22.54461 ], [ 69.90925, 22.54694 ], [ 69.91306, 22.54859 ], [ 69.91802, 22.54916 ], [ 69.92114, 22.54872 ], [ 69.92434, 22.54764 ], [ 69.92808, 22.54645 ], [ 69.93143, 22.54445 ], [ 69.93184, 22.5441 ], [ 69.93199, 22.54378 ], [ 69.93211, 22.54334 ], [ 69.9324, 22.54062 ], [ 69.93323, 22.53685 ], [ 69.93468, 22.53432 ], [ 69.93767, 22.53246 ], [ 69.93978, 22.53053 ], [ 69.94278, 22.52724 ], [ 69.94388, 22.52367 ] ] ], [ [ [ 69.95708, 22.59523 ], [ 69.95665, 22.59532 ], [ 69.95636, 22.59521 ], [ 69.95624, 22.59512 ], [ 69.95602, 22.59515 ], [ 69.9557, 22.595 ], [ 69.95559, 22.59499 ], [ 69.95541, 22.59504 ], [ 69.95501, 22.59498 ], [ 69.95483, 22.59498 ], [ 69.95454, 22.59491 ], [ 69.95282, 22.59499 ], [ 69.95269, 22.59503 ], [ 69.95279, 22.59533 ], [ 69.95276, 22.59542 ], [ 69.95267, 22.59553 ], [ 69.95254, 22.59554 ], [ 69.95165, 22.59576 ], [ 69.95119, 22.59582 ], [ 69.95083, 22.5959 ], [ 69.95058, 22.59602 ], [ 69.95044, 22.59626 ], [ 69.95023, 22.59635 ], [ 69.9499, 22.59658 ], [ 69.94943, 22.59681 ], [ 69.94923, 22.59701 ], [ 69.94841, 22.59729 ], [ 69.94801, 22.5975 ], [ 69.94766, 22.59778 ], [ 69.94746, 22.59799 ], [ 69.94729, 22.59834 ], [ 69.94721, 22.59843 ], [ 69.94708, 22.59848 ], [ 69.94692, 22.5984 ], [ 69.94679, 22.59826 ], [ 69.94675, 22.59826 ], [ 69.94671, 22.59829 ], [ 69.94669, 22.59836 ], [ 69.94681, 22.59894 ], [ 69.94688, 22.5991 ], [ 69.94693, 22.59931 ], [ 69.94693, 22.59948 ], [ 69.94717, 22.5998 ], [ 69.94723, 22.60001 ], [ 69.94721, 22.60013 ], [ 69.94711, 22.60021 ], [ 69.94692, 22.60021 ], [ 69.94661, 22.60017 ], [ 69.94636, 22.60007 ], [ 69.94585, 22.60008 ], [ 69.94577, 22.60011 ], [ 69.94582, 22.60017 ], [ 69.94657, 22.60047 ], [ 69.94709, 22.60075 ], [ 69.94738, 22.60103 ], [ 69.94756, 22.60124 ], [ 69.94798, 22.60198 ], [ 69.94809, 22.60207 ], [ 69.94812, 22.60215 ], [ 69.94806, 22.6022 ], [ 69.94804, 22.60226 ], [ 69.94811, 22.60235 ], [ 69.94837, 22.60253 ], [ 69.94848, 22.60275 ], [ 69.94855, 22.60308 ], [ 69.94859, 22.60358 ], [ 69.94851, 22.60383 ], [ 69.94835, 22.60455 ], [ 69.94801, 22.6058 ], [ 69.94796, 22.60641 ], [ 69.94806, 22.60704 ], [ 69.9483, 22.60751 ], [ 69.94848, 22.60779 ], [ 69.94879, 22.60808 ], [ 69.94902, 22.60816 ], [ 69.94921, 22.6082 ], [ 69.94938, 22.60809 ], [ 69.94955, 22.60794 ], [ 69.94966, 22.60723 ], [ 69.94953, 22.60694 ], [ 69.94957, 22.60673 ], [ 69.94969, 22.60662 ], [ 69.9499, 22.60656 ], [ 69.95003, 22.60639 ], [ 69.95004, 22.60624 ], [ 69.95013, 22.60614 ], [ 69.95048, 22.60604 ], [ 69.95101, 22.60572 ], [ 69.9513, 22.60568 ], [ 69.95146, 22.60605 ], [ 69.95177, 22.60655 ], [ 69.95187, 22.60663 ], [ 69.95196, 22.60657 ], [ 69.95202, 22.60639 ], [ 69.95197, 22.60614 ], [ 69.95188, 22.60606 ], [ 69.95178, 22.60592 ], [ 69.95177, 22.60584 ], [ 69.9518, 22.60565 ], [ 69.95193, 22.60545 ], [ 69.95208, 22.6055 ], [ 69.95229, 22.60578 ], [ 69.95291, 22.60592 ], [ 69.9531, 22.6059 ], [ 69.95361, 22.60526 ], [ 69.95401, 22.60515 ], [ 69.95496, 22.60496 ], [ 69.95615, 22.60452 ], [ 69.9576, 22.60382 ], [ 69.95876, 22.60334 ], [ 69.9603, 22.60244 ], [ 69.96162, 22.60176 ], [ 69.96318, 22.60069 ], [ 69.9634, 22.60047 ], [ 69.96354, 22.60026 ], [ 69.96363, 22.6 ], [ 69.96375, 22.59939 ], [ 69.96376, 22.59922 ], [ 69.96371, 22.59886 ], [ 69.96373, 22.59869 ], [ 69.96367, 22.59847 ], [ 69.96356, 22.5982 ], [ 69.96341, 22.598 ], [ 69.9634, 22.59791 ], [ 69.96334, 22.59782 ], [ 69.96297, 22.59752 ], [ 69.96274, 22.59726 ], [ 69.96266, 22.59722 ], [ 69.96264, 22.59717 ], [ 69.96268, 22.59712 ], [ 69.96268, 22.59708 ], [ 69.96255, 22.59697 ], [ 69.96247, 22.59696 ], [ 69.96241, 22.59684 ], [ 69.96215, 22.59652 ], [ 69.96189, 22.59628 ], [ 69.96167, 22.59617 ], [ 69.96153, 22.59618 ], [ 69.96146, 22.59621 ], [ 69.96125, 22.59609 ], [ 69.96107, 22.59603 ], [ 69.96099, 22.59597 ], [ 69.96095, 22.59598 ], [ 69.96096, 22.59603 ], [ 69.96124, 22.59631 ], [ 69.9613, 22.59649 ], [ 69.9613, 22.59657 ], [ 69.96141, 22.59681 ], [ 69.96146, 22.59703 ], [ 69.9616, 22.59738 ], [ 69.96189, 22.59785 ], [ 69.9619, 22.59798 ], [ 69.96184, 22.59803 ], [ 69.96164, 22.59799 ], [ 69.96155, 22.59791 ], [ 69.96129, 22.59775 ], [ 69.96098, 22.59766 ], [ 69.96072, 22.59755 ], [ 69.96048, 22.59731 ], [ 69.9604, 22.59716 ], [ 69.96011, 22.59696 ], [ 69.95997, 22.59693 ], [ 69.95996, 22.59683 ], [ 69.95978, 22.59662 ], [ 69.95959, 22.59654 ], [ 69.95943, 22.5965 ], [ 69.95933, 22.59644 ], [ 69.95927, 22.59635 ], [ 69.95925, 22.59625 ], [ 69.95928, 22.59611 ], [ 69.95925, 22.59598 ], [ 69.95919, 22.59587 ], [ 69.95911, 22.59579 ], [ 69.95853, 22.59555 ], [ 69.95818, 22.59546 ], [ 69.95803, 22.59556 ], [ 69.95798, 22.59554 ], [ 69.95792, 22.5954 ], [ 69.95775, 22.59534 ], [ 69.95708, 22.59523 ] ] ], [ [ [ 69.94384, 22.53694 ], [ 69.94371, 22.53691 ], [ 69.9432, 22.53691 ], [ 69.94281, 22.53704 ], [ 69.94243, 22.53726 ], [ 69.94138, 22.5378 ], [ 69.93946, 22.5389 ], [ 69.93934, 22.53894 ], [ 69.93908, 22.53908 ], [ 69.93833, 22.5394 ], [ 69.93823, 22.53951 ], [ 69.93814, 22.53971 ], [ 69.93811, 22.5401 ], [ 69.93798, 22.54082 ], [ 69.9379, 22.54165 ], [ 69.93798, 22.54202 ], [ 69.93815, 22.5424 ], [ 69.93807, 22.54333 ], [ 69.93809, 22.54337 ], [ 69.93826, 22.54331 ], [ 69.93836, 22.54335 ], [ 69.9384, 22.5434 ], [ 69.93839, 22.54368 ], [ 69.93835, 22.54373 ], [ 69.93826, 22.54373 ], [ 69.93819, 22.54368 ], [ 69.93811, 22.54358 ], [ 69.93804, 22.54361 ], [ 69.93802, 22.54377 ], [ 69.93803, 22.54502 ], [ 69.93815, 22.54534 ], [ 69.93815, 22.54571 ], [ 69.93809, 22.54608 ], [ 69.93794, 22.54622 ], [ 69.93792, 22.54631 ], [ 69.93881, 22.54634 ], [ 69.93923, 22.54643 ], [ 69.93925, 22.54652 ], [ 69.93912, 22.5468 ], [ 69.93912, 22.54697 ], [ 69.93929, 22.54726 ], [ 69.93941, 22.54753 ], [ 69.9395, 22.54788 ], [ 69.93951, 22.54802 ], [ 69.93956, 22.54815 ], [ 69.9403, 22.54864 ], [ 69.94047, 22.54888 ], [ 69.94064, 22.54922 ], [ 69.94083, 22.54949 ], [ 69.94087, 22.54977 ], [ 69.94105, 22.54993 ], [ 69.94099, 22.55007 ], [ 69.94088, 22.55012 ], [ 69.94088, 22.55023 ], [ 69.94099, 22.55033 ], [ 69.94165, 22.55061 ], [ 69.94207, 22.55076 ], [ 69.94248, 22.55086 ], [ 69.94319, 22.55089 ], [ 69.94349, 22.55099 ], [ 69.94422, 22.55114 ], [ 69.945, 22.55119 ], [ 69.9464, 22.55133 ], [ 69.94769, 22.55151 ], [ 69.9489, 22.5516 ], [ 69.94968, 22.55163 ], [ 69.95227, 22.55092 ], [ 69.95252, 22.55077 ], [ 69.95288, 22.55043 ], [ 69.95358, 22.54966 ], [ 69.95489, 22.54798 ], [ 69.95582, 22.54687 ], [ 69.9566, 22.54602 ], [ 69.95745, 22.54519 ], [ 69.95758, 22.54502 ], [ 69.95759, 22.54492 ], [ 69.95754, 22.54481 ], [ 69.95653, 22.54349 ], [ 69.95601, 22.54275 ], [ 69.95578, 22.54237 ], [ 69.95566, 22.54211 ], [ 69.95529, 22.54145 ], [ 69.95472, 22.54026 ], [ 69.95459, 22.53992 ], [ 69.95434, 22.53913 ], [ 69.95424, 22.53873 ], [ 69.95423, 22.53861 ], [ 69.95427, 22.53847 ], [ 69.95352, 22.53756 ], [ 69.95323, 22.53731 ], [ 69.95295, 22.53714 ], [ 69.95081, 22.53607 ], [ 69.95015, 22.53581 ], [ 69.94949, 22.53564 ], [ 69.94919, 22.53562 ], [ 69.94874, 22.53564 ], [ 69.94809, 22.53571 ], [ 69.94789, 22.53576 ], [ 69.94774, 22.53585 ], [ 69.94765, 22.53594 ], [ 69.94754, 22.53594 ], [ 69.94744, 22.53586 ], [ 69.94714, 22.53592 ], [ 69.94682, 22.5361 ], [ 69.94629, 22.53633 ], [ 69.94629, 22.53651 ], [ 69.94627, 22.53657 ], [ 69.94622, 22.53658 ], [ 69.94608, 22.5365 ], [ 69.94561, 22.53653 ], [ 69.9455, 22.53652 ], [ 69.94526, 22.53656 ], [ 69.9447, 22.53671 ], [ 69.94402, 22.53695 ], [ 69.94384, 22.53694 ] ] ], [ [ [ 69.96738, 22.54607 ], [ 69.96623, 22.54587 ], [ 69.96469, 22.54573 ], [ 69.964, 22.54575 ], [ 69.96304, 22.54597 ], [ 69.96131, 22.54696 ], [ 69.96094, 22.54741 ], [ 69.96097, 22.54754 ], [ 69.96138, 22.54783 ], [ 69.96135, 22.54807 ], [ 69.96116, 22.54839 ], [ 69.96089, 22.54854 ], [ 69.96056, 22.54854 ], [ 69.96026, 22.54858 ], [ 69.95963, 22.54879 ], [ 69.95908, 22.54911 ], [ 69.95837, 22.54976 ], [ 69.95765, 22.55058 ], [ 69.95741, 22.55099 ], [ 69.95734, 22.55134 ], [ 69.95731, 22.55179 ], [ 69.9574, 22.5522 ], [ 69.95762, 22.55274 ], [ 69.95759, 22.55311 ], [ 69.95738, 22.55401 ], [ 69.95695, 22.55528 ], [ 69.95688, 22.55637 ], [ 69.95698, 22.55707 ], [ 69.95704, 22.55771 ], [ 69.95695, 22.55814 ], [ 69.95675, 22.55834 ], [ 69.95654, 22.55882 ], [ 69.95655, 22.55937 ], [ 69.95652, 22.55999 ], [ 69.9566, 22.5604 ], [ 69.95671, 22.56081 ], [ 69.95675, 22.56116 ], [ 69.95674, 22.56126 ], [ 69.95665, 22.56128 ], [ 69.95656, 22.56123 ], [ 69.95641, 22.56107 ], [ 69.95631, 22.56108 ], [ 69.95616, 22.56117 ], [ 69.95607, 22.56151 ], [ 69.95623, 22.56246 ], [ 69.95628, 22.56316 ], [ 69.95623, 22.5635 ], [ 69.95613, 22.56364 ], [ 69.95615, 22.56372 ], [ 69.95634, 22.56382 ], [ 69.95652, 22.56384 ], [ 69.95671, 22.56389 ], [ 69.95674, 22.564 ], [ 69.95669, 22.56429 ], [ 69.95659, 22.56451 ], [ 69.95667, 22.56464 ], [ 69.95681, 22.56479 ], [ 69.95687, 22.56497 ], [ 69.95645, 22.56552 ], [ 69.95639, 22.56582 ], [ 69.95639, 22.56597 ], [ 69.95649, 22.56601 ], [ 69.95663, 22.56595 ], [ 69.95677, 22.56609 ], [ 69.95668, 22.56625 ], [ 69.95692, 22.56666 ], [ 69.95692, 22.56702 ], [ 69.95659, 22.56773 ], [ 69.95652, 22.56783 ], [ 69.95659, 22.5679 ], [ 69.95674, 22.56777 ], [ 69.95696, 22.56744 ], [ 69.9571, 22.56747 ], [ 69.95722, 22.56772 ], [ 69.9573, 22.56809 ], [ 69.95754, 22.56827 ], [ 69.95794, 22.56844 ], [ 69.95832, 22.56868 ], [ 69.95866, 22.56907 ], [ 69.95911, 22.57027 ], [ 69.95912, 22.57055 ], [ 69.95925, 22.57106 ], [ 69.95953, 22.57146 ], [ 69.95973, 22.57162 ], [ 69.95977, 22.5718 ], [ 69.95973, 22.57192 ], [ 69.95918, 22.57228 ], [ 69.95912, 22.57243 ], [ 69.95902, 22.57251 ], [ 69.95906, 22.57276 ], [ 69.95911, 22.57281 ], [ 69.95911, 22.57292 ], [ 69.95907, 22.57302 ], [ 69.95895, 22.57312 ], [ 69.95895, 22.57322 ], [ 69.95913, 22.57319 ], [ 69.95917, 22.57326 ], [ 69.95897, 22.57342 ], [ 69.9589, 22.57351 ], [ 69.95897, 22.57353 ], [ 69.95916, 22.57344 ], [ 69.95945, 22.57337 ], [ 69.96002, 22.57337 ], [ 69.96008, 22.57342 ], [ 69.96002, 22.57368 ], [ 69.96002, 22.57377 ], [ 69.96012, 22.57372 ], [ 69.96022, 22.57371 ], [ 69.96045, 22.57392 ], [ 69.96083, 22.5741 ], [ 69.96118, 22.57436 ], [ 69.96157, 22.57446 ], [ 69.96177, 22.5746 ], [ 69.96215, 22.57479 ], [ 69.96248, 22.57492 ], [ 69.96271, 22.57511 ], [ 69.96282, 22.57523 ], [ 69.96296, 22.57532 ], [ 69.9632, 22.57539 ], [ 69.9646, 22.57668 ], [ 69.96543, 22.57735 ], [ 69.96577, 22.57758 ], [ 69.9662, 22.57776 ], [ 69.96722, 22.57792 ], [ 69.96824, 22.57835 ], [ 69.96852, 22.57858 ], [ 69.96883, 22.57871 ], [ 69.96934, 22.57872 ], [ 69.96954, 22.57865 ], [ 69.96976, 22.57847 ], [ 69.96983, 22.57835 ], [ 69.96973, 22.57805 ], [ 69.96976, 22.57788 ], [ 69.97007, 22.57775 ], [ 69.97107, 22.57775 ], [ 69.97146, 22.57785 ], [ 69.97171, 22.57788 ], [ 69.97194, 22.57787 ], [ 69.97255, 22.57806 ], [ 69.97286, 22.57822 ], [ 69.97337, 22.57906 ], [ 69.97368, 22.57928 ], [ 69.97393, 22.57932 ], [ 69.97424, 22.57914 ], [ 69.97448, 22.57897 ], [ 69.97472, 22.57875 ], [ 69.97497, 22.57882 ], [ 69.97511, 22.57905 ], [ 69.97522, 22.57915 ], [ 69.97516, 22.57934 ], [ 69.97513, 22.57957 ], [ 69.97519, 22.57977 ], [ 69.97534, 22.57997 ], [ 69.97578, 22.58025 ], [ 69.97623, 22.58047 ], [ 69.97733, 22.58082 ], [ 69.97803, 22.58111 ], [ 69.98015, 22.58183 ], [ 69.9808, 22.58214 ], [ 69.98136, 22.58244 ], [ 69.98212, 22.5828 ], [ 69.98294, 22.58304 ], [ 69.98497, 22.58409 ], [ 69.98576, 22.58455 ], [ 69.98607, 22.5847 ], [ 69.98631, 22.58474 ], [ 69.98654, 22.58458 ], [ 69.98665, 22.58441 ], [ 69.98685, 22.58396 ], [ 69.98695, 22.58393 ], [ 69.98715, 22.58402 ], [ 69.98736, 22.58417 ], [ 69.98763, 22.58432 ], [ 69.98867, 22.58466 ], [ 69.98921, 22.58486 ], [ 69.98949, 22.58505 ], [ 69.98979, 22.58533 ], [ 69.99042, 22.58571 ], [ 69.99078, 22.58602 ], [ 69.99119, 22.5862 ], [ 69.99156, 22.58632 ], [ 69.99188, 22.58627 ], [ 69.99212, 22.58616 ], [ 69.99245, 22.58591 ], [ 69.99269, 22.58593 ], [ 69.99283, 22.58611 ], [ 69.99291, 22.58632 ], [ 69.9932, 22.58674 ], [ 69.99448, 22.58905 ], [ 69.99529, 22.59012 ], [ 69.99545, 22.5904 ], [ 69.99571, 22.59108 ], [ 69.99594, 22.59199 ], [ 69.99618, 22.59214 ], [ 69.99656, 22.59229 ], [ 69.99753, 22.5923 ], [ 69.99892, 22.59279 ], [ 69.99941, 22.59307 ], [ 69.99992, 22.59355 ], [ 70.00014, 22.59424 ], [ 70.00007, 22.59517 ], [ 70.00009, 22.59604 ], [ 69.99998, 22.59712 ], [ 69.99999, 22.59822 ], [ 70.00007, 22.5986 ], [ 70.00004, 22.59874 ], [ 70.00003, 22.59896 ], [ 70.00008, 22.59924 ], [ 70.00016, 22.59935 ], [ 70.00031, 22.59937 ], [ 70.00061, 22.59937 ], [ 70.00105, 22.59945 ], [ 70.00151, 22.59947 ], [ 70.0019, 22.5994 ], [ 70.00227, 22.59942 ], [ 70.0026, 22.59955 ], [ 70.00336, 22.59964 ], [ 70.00377, 22.59974 ], [ 70.00404, 22.59974 ], [ 70.00451, 22.59948 ], [ 70.00481, 22.59936 ], [ 70.00491, 22.59927 ], [ 70.00502, 22.59921 ], [ 70.00515, 22.59929 ], [ 70.00527, 22.59953 ], [ 70.00586, 22.6002 ], [ 70.00629, 22.60055 ], [ 70.00643, 22.60085 ], [ 70.00684, 22.60112 ], [ 70.007, 22.6011 ], [ 70.00705, 22.60098 ], [ 70.00702, 22.60089 ], [ 70.00696, 22.60081 ], [ 70.00655, 22.60065 ], [ 70.00649, 22.6006 ], [ 70.00644, 22.60049 ], [ 70.00645, 22.60036 ], [ 70.0065, 22.60026 ], [ 70.00663, 22.60029 ], [ 70.0068, 22.6004 ], [ 70.00699, 22.60049 ], [ 70.00698, 22.60036 ], [ 70.00683, 22.60029 ], [ 70.00654, 22.59998 ], [ 70.00656, 22.59977 ], [ 70.00666, 22.59968 ], [ 70.0068, 22.59964 ], [ 70.00699, 22.5997 ], [ 70.0076, 22.5998 ], [ 70.00774, 22.59995 ], [ 70.00774, 22.6001 ], [ 70.00787, 22.60028 ], [ 70.00816, 22.60034 ], [ 70.00848, 22.60036 ], [ 70.0092, 22.6005 ], [ 70.00969, 22.60048 ], [ 70.00997, 22.60058 ], [ 70.01018, 22.60074 ], [ 70.01068, 22.60101 ], [ 70.01099, 22.60115 ], [ 70.01135, 22.60124 ], [ 70.01154, 22.60124 ], [ 70.0119, 22.60106 ], [ 70.01206, 22.60103 ], [ 70.01226, 22.6011 ], [ 70.01241, 22.6011 ], [ 70.01256, 22.60091 ], [ 70.01269, 22.60086 ], [ 70.01306, 22.60076 ], [ 70.01328, 22.60067 ], [ 70.0135, 22.6007 ], [ 70.01382, 22.60069 ], [ 70.01396, 22.60064 ], [ 70.0141, 22.6005 ], [ 70.01429, 22.60038 ], [ 70.01442, 22.60033 ], [ 70.01477, 22.60033 ], [ 70.01492, 22.60022 ], [ 70.01501, 22.60005 ], [ 70.01518, 22.59983 ], [ 70.01539, 22.5995 ], [ 70.0156, 22.59933 ], [ 70.01644, 22.59882 ], [ 70.01657, 22.59877 ], [ 70.0168, 22.59861 ], [ 70.01695, 22.59843 ], [ 70.01716, 22.59812 ], [ 70.01723, 22.59795 ], [ 70.01733, 22.59788 ], [ 70.01744, 22.5979 ], [ 70.0175, 22.59787 ], [ 70.01754, 22.59776 ], [ 70.01774, 22.59749 ], [ 70.01788, 22.59742 ], [ 70.01809, 22.59737 ], [ 70.01829, 22.59736 ], [ 70.01843, 22.5973 ], [ 70.01859, 22.59716 ], [ 70.01908, 22.59658 ], [ 70.0193, 22.59614 ], [ 70.01943, 22.59603 ], [ 70.01961, 22.59598 ], [ 70.01987, 22.59587 ], [ 70.02034, 22.59559 ], [ 70.02051, 22.59519 ], [ 70.0207, 22.5949 ], [ 70.02096, 22.5947 ], [ 70.02135, 22.59468 ], [ 70.02157, 22.59479 ], [ 70.02229, 22.59569 ], [ 70.02247, 22.59582 ], [ 70.02266, 22.59587 ], [ 70.02307, 22.59605 ], [ 70.02344, 22.59615 ], [ 70.02386, 22.59617 ], [ 70.02431, 22.59609 ], [ 70.02462, 22.5961 ], [ 70.02541, 22.59605 ], [ 70.02562, 22.59593 ], [ 70.02593, 22.59582 ], [ 70.02634, 22.59577 ], [ 70.02667, 22.59564 ], [ 70.02701, 22.59559 ], [ 70.02751, 22.59559 ], [ 70.02775, 22.59552 ], [ 70.02808, 22.59554 ], [ 70.02842, 22.59564 ], [ 70.02856, 22.59571 ], [ 70.02862, 22.59585 ], [ 70.02862, 22.59601 ], [ 70.02869, 22.59605 ], [ 70.02889, 22.59583 ], [ 70.02936, 22.59552 ], [ 70.02951, 22.59531 ], [ 70.02956, 22.5951 ], [ 70.02958, 22.59487 ], [ 70.02965, 22.59464 ], [ 70.02962, 22.59428 ], [ 70.02965, 22.59404 ], [ 70.02977, 22.59386 ], [ 70.02989, 22.59377 ], [ 70.03008, 22.59377 ], [ 70.0303, 22.59385 ], [ 70.03051, 22.59388 ], [ 70.03065, 22.59396 ], [ 70.03092, 22.59406 ], [ 70.03145, 22.59406 ], [ 70.03264, 22.59353 ], [ 70.03326, 22.59298 ], [ 70.03372, 22.59242 ], [ 70.03388, 22.59219 ], [ 70.03409, 22.59182 ], [ 70.03419, 22.59149 ], [ 70.03422, 22.59109 ], [ 70.03422, 22.59042 ], [ 70.03437, 22.59014 ], [ 70.0345, 22.58976 ], [ 70.03451, 22.58888 ], [ 70.03465, 22.5887 ], [ 70.03501, 22.58846 ], [ 70.03562, 22.58786 ], [ 70.03584, 22.58756 ], [ 70.03602, 22.58708 ], [ 70.03608, 22.58674 ], [ 70.03608, 22.5863 ], [ 70.03599, 22.58585 ], [ 70.03561, 22.58532 ], [ 70.03485, 22.58453 ], [ 70.0344, 22.58428 ], [ 70.03417, 22.5842 ], [ 70.03356, 22.58413 ], [ 70.03314, 22.58398 ], [ 70.03277, 22.58373 ], [ 70.03252, 22.58334 ], [ 70.03241, 22.58311 ], [ 70.03235, 22.58292 ], [ 70.03232, 22.58273 ], [ 70.03235, 22.58252 ], [ 70.03243, 22.58243 ], [ 70.03246, 22.58229 ], [ 70.03283, 22.58228 ], [ 70.03304, 22.58222 ], [ 70.03301, 22.58216 ], [ 70.03278, 22.58205 ], [ 70.03276, 22.58196 ], [ 70.03281, 22.58191 ], [ 70.03321, 22.58182 ], [ 70.03342, 22.58153 ], [ 70.03342, 22.58138 ], [ 70.03356, 22.58118 ], [ 70.03375, 22.5811 ], [ 70.03396, 22.58112 ], [ 70.0341, 22.58105 ], [ 70.0341, 22.5808 ], [ 70.03421, 22.58061 ], [ 70.03419, 22.58053 ], [ 70.03377, 22.5805 ], [ 70.03361, 22.58052 ], [ 70.03358, 22.58045 ], [ 70.03364, 22.58029 ], [ 70.03366, 22.58008 ], [ 70.03385, 22.57949 ], [ 70.03408, 22.57857 ], [ 70.0342, 22.57825 ], [ 70.03436, 22.57811 ], [ 70.03466, 22.57804 ], [ 70.03553, 22.57793 ], [ 70.03597, 22.57759 ], [ 70.03639, 22.5772 ], [ 70.03658, 22.57673 ], [ 70.03695, 22.57597 ], [ 70.03699, 22.57536 ], [ 70.03693, 22.57513 ], [ 70.03676, 22.57482 ], [ 70.03638, 22.57433 ], [ 70.03607, 22.5738 ], [ 70.03558, 22.57335 ], [ 70.03516, 22.57312 ], [ 70.03464, 22.5729 ], [ 70.03392, 22.57268 ], [ 70.03348, 22.57249 ], [ 70.03234, 22.57209 ], [ 70.03172, 22.57182 ], [ 70.03068, 22.57109 ], [ 70.03023, 22.57067 ], [ 70.02978, 22.57033 ], [ 70.02935, 22.5699 ], [ 70.02853, 22.56926 ], [ 70.02747, 22.56819 ], [ 70.02644, 22.56731 ], [ 70.02618, 22.56718 ], [ 70.02592, 22.56696 ], [ 70.02532, 22.5662 ], [ 70.02479, 22.56575 ], [ 70.02271, 22.56379 ], [ 70.02085, 22.56253 ], [ 70.01905, 22.56174 ], [ 70.01717, 22.56046 ], [ 70.01596, 22.55956 ], [ 70.0144, 22.55861 ], [ 70.01313, 22.55821 ], [ 70.01209, 22.55767 ], [ 70.00897, 22.55542 ], [ 70.0074, 22.55451 ], [ 70.00618, 22.55395 ], [ 70.00482, 22.55373 ], [ 70.00357, 22.55363 ], [ 70.00209, 22.55371 ], [ 70.00175, 22.55377 ], [ 70.00066, 22.55355 ], [ 70.00004, 22.55335 ], [ 69.99979, 22.55324 ], [ 69.99947, 22.55314 ], [ 69.998, 22.55259 ], [ 69.99654, 22.55175 ], [ 69.9961, 22.55153 ], [ 69.99426, 22.55084 ], [ 69.99301, 22.55047 ], [ 69.99204, 22.55009 ], [ 69.99131, 22.54958 ], [ 69.99015, 22.54867 ], [ 69.98937, 22.54818 ], [ 69.98854, 22.54777 ], [ 69.98741, 22.5474 ], [ 69.9861, 22.54723 ], [ 69.98535, 22.54704 ], [ 69.985, 22.54691 ], [ 69.98424, 22.54677 ], [ 69.98325, 22.54677 ], [ 69.98245, 22.54686 ], [ 69.98164, 22.54702 ], [ 69.98113, 22.5472 ], [ 69.98081, 22.54728 ], [ 69.98045, 22.54728 ], [ 69.98001, 22.54733 ], [ 69.97943, 22.54743 ], [ 69.97869, 22.5479 ], [ 69.97823, 22.54816 ], [ 69.97674, 22.54808 ], [ 69.97612, 22.54808 ], [ 69.97565, 22.54797 ], [ 69.97519, 22.54775 ], [ 69.97481, 22.54753 ], [ 69.97343, 22.54723 ], [ 69.97161, 22.54678 ], [ 69.96972, 22.54637 ], [ 69.96738, 22.54607 ] ] ], [ [ [ 70.2669464, 22.7110558 ], [ 70.2665391, 22.7120887 ], [ 70.2659913, 22.7128653 ], [ 70.2660008, 22.7138949 ], [ 70.2657281, 22.7144119 ], [ 70.2658721, 22.7149256 ], [ 70.2650409, 22.7150603 ], [ 70.2647659, 22.71532 ], [ 70.2633809, 22.7155884 ], [ 70.2632429, 22.7157186 ], [ 70.2631093, 22.7162346 ], [ 70.2620008, 22.7163714 ], [ 70.2615899, 22.7170187 ], [ 70.261616, 22.7198501 ], [ 70.2621779, 22.7206179 ], [ 70.2627375, 22.7211283 ], [ 70.2628815, 22.7216421 ], [ 70.26344, 22.7220233 ], [ 70.2648309, 22.722399 ], [ 70.2648379, 22.7231711 ], [ 70.2656727, 22.7234219 ], [ 70.2656657, 22.7226498 ], [ 70.2659432, 22.7226475 ], [ 70.2659501, 22.7234198 ], [ 70.2667861, 22.7237987 ], [ 70.2670635, 22.7237967 ], [ 70.2681664, 22.7230155 ], [ 70.2701063, 22.7227428 ], [ 70.270385, 22.7228698 ], [ 70.2703778, 22.7220975 ], [ 70.2689929, 22.7223659 ], [ 70.2689904, 22.7221085 ], [ 70.2681558, 22.7218577 ], [ 70.2681533, 22.7216003 ], [ 70.2687082, 22.7215959 ], [ 70.2691193, 22.7210779 ], [ 70.2692157, 22.7164436 ], [ 70.2697706, 22.7164391 ], [ 70.2694979, 22.7169562 ], [ 70.2703327, 22.717207 ], [ 70.2706173, 22.717977 ], [ 70.2711722, 22.7179724 ], [ 70.2707627, 22.7187481 ], [ 70.2702125, 22.7192673 ], [ 70.2703731, 22.7215827 ], [ 70.2720439, 22.7222125 ], [ 70.2723236, 22.7224678 ], [ 70.273437, 22.7228454 ], [ 70.273705, 22.7218137 ], [ 70.2742599, 22.7218091 ], [ 70.2739681, 22.7202671 ], [ 70.2742469, 22.7203931 ], [ 70.2748018, 22.7203886 ], [ 70.275352, 22.7198694 ], [ 70.2766434, 22.7198184 ], [ 70.2767428, 22.720245 ], [ 70.2761879, 22.7202493 ], [ 70.2760535, 22.7207653 ], [ 70.2757783, 22.7210248 ], [ 70.2756449, 22.7215407 ], [ 70.27509, 22.7215451 ], [ 70.2750923, 22.7218025 ], [ 70.2756485, 22.7219263 ], [ 70.2759235, 22.7216668 ], [ 70.2767572, 22.7217893 ], [ 70.2770274, 22.7210149 ], [ 70.2781348, 22.7207486 ], [ 70.2785459, 22.7202304 ], [ 70.2786802, 22.7197146 ], [ 70.2768316, 22.7196409 ], [ 70.2767332, 22.7192153 ], [ 70.2770119, 22.7193414 ], [ 70.2778432, 22.7192064 ], [ 70.278254, 22.7186884 ], [ 70.2785194, 22.7173992 ], [ 70.2783801, 22.717271 ], [ 70.2778239, 22.7171473 ], [ 70.2773811, 22.7143192 ], [ 70.2771011, 22.7140641 ], [ 70.2772261, 22.7125185 ], [ 70.272794, 22.7133261 ], [ 70.2727868, 22.712554 ], [ 70.2719534, 22.7124313 ], [ 70.2716736, 22.7121762 ], [ 70.2711199, 22.7123098 ], [ 70.2711151, 22.711795 ], [ 70.2708388, 22.7119254 ], [ 70.2700065, 22.711932 ], [ 70.2694493, 22.7116791 ], [ 70.2686181, 22.7118148 ], [ 70.2688908, 22.7112977 ], [ 70.2669464, 22.7110558 ] ] ], [ [ [ 71.492839128549463, 23.203225 ], [ 71.4923778, 23.203889 ], [ 71.4901517, 23.2039243 ], [ 71.4882135, 23.2044696 ], [ 71.4878076, 23.2051195 ], [ 71.4875532, 23.20641 ], [ 71.4877261, 23.2082082 ], [ 71.4874479, 23.2082125 ], [ 71.4871506, 23.2071882 ], [ 71.4854904, 23.2077291 ], [ 71.485783, 23.2084962 ], [ 71.4863396, 23.2084873 ], [ 71.4864878, 23.2089995 ], [ 71.4860897, 23.2100351 ], [ 71.4866463, 23.2100262 ], [ 71.4869056, 23.2089929 ], [ 71.4874645, 23.2091124 ], [ 71.4877475, 23.2093651 ], [ 71.4883065, 23.2094854 ], [ 71.4884547, 23.2099976 ], [ 71.4883351, 23.2110286 ], [ 71.4894458, 23.210882 ], [ 71.4908514, 23.2116315 ], [ 71.4916862, 23.2116183 ], [ 71.4928064, 23.2119869 ], [ 71.4928208, 23.2127586 ], [ 71.4942097, 23.2126074 ], [ 71.4944832, 23.2123458 ], [ 71.4947614, 23.2123412 ], [ 71.4953228, 23.2125896 ], [ 71.4956012, 23.2125852 ], [ 71.4964239, 23.2119294 ], [ 71.4964335, 23.2124439 ], [ 71.4969901, 23.212435 ], [ 71.4972874, 23.2134594 ], [ 71.498115, 23.2130598 ], [ 71.4989499, 23.2130466 ], [ 71.4997919, 23.2134197 ], [ 71.4999259, 23.2131602 ], [ 71.5008811, 23.212116 ], [ 71.5003245, 23.2121246 ], [ 71.500315, 23.2116104 ], [ 71.5005932, 23.2116058 ], [ 71.501274, 23.2108232 ], [ 71.5009671, 23.2092845 ], [ 71.5005382, 23.2086476 ], [ 71.4999792, 23.2085284 ], [ 71.4998253, 23.2077589 ], [ 71.4996841, 23.2076321 ], [ 71.4991253, 23.2075129 ], [ 71.4988709, 23.2088032 ], [ 71.4983144, 23.208812 ], [ 71.4981844, 23.2093288 ], [ 71.4980481, 23.209459 ], [ 71.497587, 23.209507 ], [ 71.4974844, 23.2090825 ], [ 71.4969255, 23.2089623 ], [ 71.4966401, 23.2085815 ], [ 71.498206, 23.2081296 ], [ 71.4983097, 23.2085548 ], [ 71.4985879, 23.2085505 ], [ 71.4985783, 23.208036 ], [ 71.4983931, 23.2079506 ], [ 71.4984292, 23.2075238 ], [ 71.4989761, 23.2070007 ], [ 71.4989712, 23.2067434 ], [ 71.4985401, 23.2059786 ], [ 71.4990965, 23.2059697 ], [ 71.4992256, 23.2054529 ], [ 71.4990846, 23.2053261 ], [ 71.4982475, 23.2052112 ], [ 71.4985161, 23.2046924 ], [ 71.4979597, 23.2047013 ], [ 71.4976622, 23.2036769 ], [ 71.4965516, 23.2038228 ], [ 71.4958484, 23.2034484 ], [ 71.495753081792387, 23.203225 ], [ 71.495741713315695, 23.203198355377154 ], [ 71.49566774767635, 23.203025 ], [ 71.4954123, 23.2024263 ], [ 71.4948535, 23.2023061 ], [ 71.4945753, 23.2023104 ], [ 71.494438, 23.2024418 ], [ 71.494309, 23.2029583 ], [ 71.49292, 23.2031086 ], [ 71.492839128549463, 23.203225 ] ] ], [ [ [ 71.4809527, 23.2031696 ], [ 71.48125, 23.204194 ], [ 71.4815307, 23.2043178 ], [ 71.4829219, 23.2042959 ], [ 71.4843179, 23.204531 ], [ 71.4857021, 23.2041237 ], [ 71.485685466467061, 23.203225 ], [ 71.485684113367171, 23.203151892808862 ], [ 71.485681764779528, 23.203025 ], [ 71.4856783, 23.2028378 ], [ 71.4862347, 23.2028289 ], [ 71.486494, 23.2017958 ], [ 71.4870434, 23.2014006 ], [ 71.4875998, 23.2013919 ], [ 71.4878805, 23.2015165 ], [ 71.4880096, 23.2009999 ], [ 71.4878686, 23.2008731 ], [ 71.487312, 23.2008818 ], [ 71.4870362, 23.2010152 ], [ 71.487679, 23.1981751 ], [ 71.4873959, 23.1979222 ], [ 71.4872383, 23.1968956 ], [ 71.4847293, 23.1966781 ], [ 71.4849981, 23.1961592 ], [ 71.4830385, 23.1955465 ], [ 71.4819113, 23.1947926 ], [ 71.4805178, 23.1946864 ], [ 71.4803687, 23.1941742 ], [ 71.4796617, 23.1935416 ], [ 71.4791052, 23.1935503 ], [ 71.4779852, 23.1931825 ], [ 71.4783925, 23.1926616 ], [ 71.4783878, 23.1924044 ], [ 71.4776807, 23.1917718 ], [ 71.4768461, 23.191785 ], [ 71.475165, 23.1911687 ], [ 71.4754243, 23.1901354 ], [ 71.4748677, 23.1901443 ], [ 71.4747187, 23.1896321 ], [ 71.4745777, 23.1895051 ], [ 71.4723542, 23.1896692 ], [ 71.4721861, 23.1881283 ], [ 71.4720451, 23.1880013 ], [ 71.4706518, 23.187895 ], [ 71.4706469, 23.1876378 ], [ 71.4714817, 23.1876248 ], [ 71.4714723, 23.1871103 ], [ 71.4720357, 23.187487 ], [ 71.473151, 23.1875985 ], [ 71.4731415, 23.187084 ], [ 71.4745328, 23.1870621 ], [ 71.4742615, 23.1874518 ], [ 71.4734245, 23.1873369 ], [ 71.4739952, 23.1880997 ], [ 71.4734411, 23.1882366 ], [ 71.4731699, 23.1886272 ], [ 71.4740117, 23.1889995 ], [ 71.4748488, 23.1891154 ], [ 71.4748393, 23.1886009 ], [ 71.4756739, 23.1885879 ], [ 71.4756645, 23.1880734 ], [ 71.4764991, 23.1880604 ], [ 71.4764897, 23.187546 ], [ 71.4753768, 23.1875635 ], [ 71.4753674, 23.1870491 ], [ 71.476202, 23.1870358 ], [ 71.4764566, 23.1857455 ], [ 71.4742285, 23.1856514 ], [ 71.4728231, 23.1849017 ], [ 71.4722691, 23.1850394 ], [ 71.4722597, 23.1845252 ], [ 71.4708709, 23.184675 ], [ 71.470588, 23.1844223 ], [ 71.467801, 23.1842088 ], [ 71.4672398, 23.1839602 ], [ 71.4661081, 23.1829489 ], [ 71.4649858, 23.1824518 ], [ 71.4627649, 23.182744 ], [ 71.4624914, 23.1830056 ], [ 71.460275, 23.1835548 ], [ 71.4601378, 23.183686 ], [ 71.4600085, 23.1842025 ], [ 71.4591714, 23.1840865 ], [ 71.4588979, 23.1843481 ], [ 71.4580658, 23.1844902 ], [ 71.4578015, 23.1852662 ], [ 71.4594757, 23.1854974 ], [ 71.4594802, 23.1857546 ], [ 71.4578133, 23.1859088 ], [ 71.4569645, 23.1851502 ], [ 71.4566862, 23.1851545 ], [ 71.456549, 23.1852857 ], [ 71.4561487, 23.1861921 ], [ 71.4553164, 23.1863341 ], [ 71.4553258, 23.1868485 ], [ 71.4544935, 23.1869897 ], [ 71.4542198, 23.1872513 ], [ 71.4519917, 23.1871579 ], [ 71.4520011, 23.1876722 ], [ 71.4497728, 23.1875779 ], [ 71.4489289, 23.1870765 ], [ 71.4486505, 23.1870808 ], [ 71.4480988, 23.1873467 ], [ 71.4458753, 23.1875104 ], [ 71.4457874, 23.1879377 ], [ 71.4444889, 23.1877892 ], [ 71.4446322, 23.1880442 ], [ 71.4448091, 23.1900997 ], [ 71.4456462, 23.190215 ], [ 71.4459291, 23.1904679 ], [ 71.4470397, 23.1903224 ], [ 71.4470304, 23.1898079 ], [ 71.4475893, 23.1899274 ], [ 71.448155, 23.1904331 ], [ 71.4487138, 23.1905535 ], [ 71.4488618, 23.1910659 ], [ 71.4484521, 23.1914577 ], [ 71.4448325, 23.1913859 ], [ 71.4451249, 23.1921532 ], [ 71.4442926, 23.1922942 ], [ 71.443608, 23.1929485 ], [ 71.4430656, 23.1937289 ], [ 71.4430703, 23.1939861 ], [ 71.4435069, 23.1950084 ], [ 71.4440586, 23.1947425 ], [ 71.444202, 23.1949977 ], [ 71.4440728, 23.1955142 ], [ 71.4446362, 23.1958909 ], [ 71.445195, 23.1960113 ], [ 71.4449074, 23.1955011 ], [ 71.4457375, 23.1952311 ], [ 71.4457282, 23.1947166 ], [ 71.4462799, 23.1944507 ], [ 71.4460251, 23.1957412 ], [ 71.4465815, 23.1957325 ], [ 71.446591, 23.1962469 ], [ 71.4471474, 23.1962382 ], [ 71.4467906, 23.1971844 ], [ 71.4466097, 23.1972757 ], [ 71.4464795, 23.1977924 ], [ 71.4456634, 23.1988342 ], [ 71.4454179, 23.2006389 ], [ 71.4457103, 23.2014063 ], [ 71.4457337, 23.2026922 ], [ 71.4450478, 23.2032175 ], [ 71.445009375048727, 23.203025 ], [ 71.4448942, 23.202448 ], [ 71.4439044, 23.2015626 ], [ 71.4427891, 23.2014516 ], [ 71.442710960857326, 23.203025 ], [ 71.4426868, 23.2035115 ], [ 71.4431281, 23.2047911 ], [ 71.4436846, 23.2047824 ], [ 71.443694, 23.2052968 ], [ 71.4439747, 23.2054206 ], [ 71.4445311, 23.2054121 ], [ 71.4456371, 23.2050094 ], [ 71.4456279, 23.2044949 ], [ 71.4464627, 23.2044819 ], [ 71.4467269, 23.203706 ], [ 71.4472833, 23.2036973 ], [ 71.4472928, 23.2042118 ], [ 71.4492453, 23.2044386 ], [ 71.4495001, 23.2031483 ], [ 71.4508866, 23.2028693 ], [ 71.4503937, 23.2011636 ], [ 71.4507598, 23.2011579 ], [ 71.4508584, 23.2013261 ], [ 71.4511368, 23.2013218 ], [ 71.4511321, 23.2010646 ], [ 71.4509469, 23.2009789 ], [ 71.4515256, 23.199772 ], [ 71.4516511, 23.1989982 ], [ 71.4510945, 23.1990069 ], [ 71.451219, 23.1982331 ], [ 71.4510758, 23.197978 ], [ 71.4519106, 23.197965 ], [ 71.4518964, 23.1971935 ], [ 71.45134, 23.1972021 ], [ 71.451859, 23.1951356 ], [ 71.4513956, 23.1950545 ], [ 71.4512931, 23.19463 ], [ 71.4518426, 23.194235 ], [ 71.4523967, 23.1940982 ], [ 71.4525258, 23.1935817 ], [ 71.4519554, 23.1928187 ], [ 71.4513895, 23.1923129 ], [ 71.4513848, 23.1920557 ], [ 71.4517932, 23.1915348 ], [ 71.4501191, 23.1913036 ], [ 71.4501143, 23.1910464 ], [ 71.4503903, 23.190913 ], [ 71.4512251, 23.1908999 ], [ 71.4523262, 23.19024 ], [ 71.4523404, 23.1910116 ], [ 71.4540074, 23.1908567 ], [ 71.4542833, 23.190724 ], [ 71.4542927, 23.1912384 ], [ 71.4548467, 23.1911007 ], [ 71.4559456, 23.1903118 ], [ 71.4564056, 23.190264 ], [ 71.4564071, 23.1903452 ], [ 71.4562262, 23.1904365 ], [ 71.4562309, 23.1906937 ], [ 71.4565092, 23.1906894 ], [ 71.4566008, 23.1905182 ], [ 71.4570608, 23.1904235 ], [ 71.4571525, 23.1902522 ], [ 71.4573345, 23.1901619 ], [ 71.4576222, 23.190672 ], [ 71.4567874, 23.1906851 ], [ 71.4567968, 23.1911993 ], [ 71.4554126, 23.1916064 ], [ 71.454578, 23.1916195 ], [ 71.4536154, 23.1922781 ], [ 71.4536294, 23.1930498 ], [ 71.4542, 23.1938128 ], [ 71.4543538, 23.1945822 ], [ 71.4557496, 23.1948177 ], [ 71.4560372, 23.1953278 ], [ 71.4554808, 23.1953365 ], [ 71.4549807, 23.1984316 ], [ 71.4555371, 23.1984229 ], [ 71.4559822, 23.1999597 ], [ 71.4565483, 23.2004654 ], [ 71.4565623, 23.2012371 ], [ 71.4561501, 23.2015008 ], [ 71.4561408, 23.2009863 ], [ 71.455454, 23.2015117 ], [ 71.455401355689759, 23.203225 ], [ 71.455367, 23.2043431 ], [ 71.455051556974396, 23.204131759889162 ], [ 71.4548034, 23.2039655 ], [ 71.4536929, 23.204112 ], [ 71.4541191, 23.2046198 ], [ 71.4542774, 23.2056465 ], [ 71.4539945, 23.2053938 ], [ 71.4537163, 23.2053981 ], [ 71.453721, 23.2056552 ], [ 71.454004, 23.2059081 ], [ 71.455117, 23.2058907 ], [ 71.455178125, 23.205711109148993 ], [ 71.4556452, 23.2043388 ], [ 71.4559236, 23.2043344 ], [ 71.4559423, 23.2053634 ], [ 71.4576167, 23.2055943 ], [ 71.4577789, 23.2068782 ], [ 71.4576449, 23.2071377 ], [ 71.4584844, 23.2073819 ], [ 71.4585033, 23.2084106 ], [ 71.4590599, 23.2084019 ], [ 71.4589344, 23.2091757 ], [ 71.4595144, 23.2104531 ], [ 71.4597974, 23.210706 ], [ 71.4599465, 23.2112182 ], [ 71.4604137, 23.2115558 ], [ 71.4605218, 23.2122382 ], [ 71.4594135, 23.2125129 ], [ 71.4590567, 23.2134592 ], [ 71.4583167, 23.2134301 ], [ 71.458453, 23.2132998 ], [ 71.4582769, 23.2112443 ], [ 71.4577203, 23.211253 ], [ 71.4577108, 23.2107385 ], [ 71.4563099, 23.210246 ], [ 71.4561797, 23.2107625 ], [ 71.4552134, 23.211163 ], [ 71.454978125, 23.211387968477737 ], [ 71.4548025, 23.2115559 ], [ 71.4544279, 23.2138772 ], [ 71.454978125, 23.213868599645167 ], [ 71.4549845, 23.2138685 ], [ 71.4547297, 23.215159 ], [ 71.4538949, 23.2151721 ], [ 71.4539042, 23.2156863 ], [ 71.455178125, 23.215813344199052 ], [ 71.4561353, 23.2159088 ], [ 71.4564277, 23.2166761 ], [ 71.4550385, 23.216826 ], [ 71.454978125, 23.216883734693884 ], [ 71.4549013, 23.2169572 ], [ 71.4542389, 23.2187686 ], [ 71.4534041, 23.2187816 ], [ 71.4538728, 23.2216043 ], [ 71.4543096, 23.2226266 ], [ 71.454978125, 23.223123827808624 ], [ 71.4551561, 23.2232562 ], [ 71.4557127, 23.2232475 ], [ 71.4565572, 23.2237489 ], [ 71.4576726, 23.2238606 ], [ 71.4580803, 23.2233395 ], [ 71.4582103, 23.222823 ], [ 71.4587669, 23.2228143 ], [ 71.4590595, 23.2235816 ], [ 71.4604487, 23.2234308 ], [ 71.4607222, 23.2231692 ], [ 71.4635076, 23.2232547 ], [ 71.4634982, 23.2227402 ], [ 71.4640548, 23.2227315 ], [ 71.4645972, 23.2219511 ], [ 71.4637622, 23.2219642 ], [ 71.4637575, 23.2217069 ], [ 71.4634793, 23.2217113 ], [ 71.4634651, 23.2209398 ], [ 71.4609533, 23.2205928 ], [ 71.4598306, 23.2200957 ], [ 71.4595524, 23.2201001 ], [ 71.4592789, 23.2203616 ], [ 71.4584487, 23.2206319 ], [ 71.4574262, 23.2204312 ], [ 71.4573237, 23.2200067 ], [ 71.4578803, 23.219998 ], [ 71.4578662, 23.2192265 ], [ 71.458701, 23.2192135 ], [ 71.4591087, 23.2186924 ], [ 71.4592389, 23.2181759 ], [ 71.4595194, 23.2182997 ], [ 71.460911, 23.2182779 ], [ 71.4617363, 23.2177504 ], [ 71.4628471, 23.2176047 ], [ 71.4628376, 23.2170904 ], [ 71.4639461, 23.2168156 ], [ 71.4638159, 23.2173324 ], [ 71.4635424, 23.2175939 ], [ 71.4631444, 23.2186293 ], [ 71.4639839, 23.2188735 ], [ 71.4644103, 23.2193813 ], [ 71.4645594, 23.2198935 ], [ 71.4653967, 23.2200086 ], [ 71.4673375, 23.2195926 ], [ 71.4673281, 23.2190781 ], [ 71.4681606, 23.218936 ], [ 71.4687078, 23.2184129 ], [ 71.4695331, 23.2178854 ], [ 71.4703704, 23.2180012 ], [ 71.4707779, 23.2174803 ], [ 71.4709032, 23.2167066 ], [ 71.4697949, 23.2169812 ], [ 71.4700542, 23.2159479 ], [ 71.4711627, 23.2156733 ], [ 71.4718295, 23.2141192 ], [ 71.4723717, 23.2133388 ], [ 71.4729189, 23.2128156 ], [ 71.4729047, 23.2120439 ], [ 71.4731782, 23.2117824 ], [ 71.4731593, 23.2107536 ], [ 71.4732942, 23.2104941 ], [ 71.4727376, 23.2105028 ], [ 71.4727329, 23.2102458 ], [ 71.4735677, 23.2102326 ], [ 71.4734186, 23.2097204 ], [ 71.4736921, 23.2094588 ], [ 71.4736779, 23.2086871 ], [ 71.4728242, 23.2076714 ], [ 71.4728004, 23.2063855 ], [ 71.4723693, 23.2056204 ], [ 71.4729259, 23.2056117 ], [ 71.4724986, 23.2051039 ], [ 71.4724938, 23.2048466 ], [ 71.4727673, 23.2045851 ], [ 71.4727626, 23.2043278 ], [ 71.4726216, 23.204201 ], [ 71.4723434, 23.2042054 ], [ 71.4720697, 23.2044669 ], [ 71.4715156, 23.2046047 ], [ 71.4716448, 23.2040882 ], [ 71.4716401, 23.2038309 ], [ 71.4714991, 23.2037039 ], [ 71.4701054, 23.2035977 ], [ 71.4701007, 23.2033405 ], [ 71.4709355, 23.2033275 ], [ 71.4707911, 23.2030723 ], [ 71.470803023446265, 23.203025 ], [ 71.4709213, 23.2025558 ], [ 71.4700865, 23.2025688 ], [ 71.4700818, 23.2023118 ], [ 71.4711876, 23.2019079 ], [ 71.4723007, 23.2018905 ], [ 71.4725838, 23.2021434 ], [ 71.4736968, 23.2021258 ], [ 71.4739703, 23.2018642 ], [ 71.4756327, 23.2014526 ], [ 71.4753402, 23.2006852 ], [ 71.4758943, 23.2005474 ], [ 71.4761678, 23.2002859 ], [ 71.4775615, 23.200393 ], [ 71.4775709, 23.2009075 ], [ 71.4778516, 23.2010313 ], [ 71.4789622, 23.2008856 ], [ 71.4789527, 23.2003711 ], [ 71.4781179, 23.2003843 ], [ 71.4781132, 23.2001271 ], [ 71.479495, 23.1995907 ], [ 71.4796384, 23.1998457 ], [ 71.4798064, 23.2013868 ], [ 71.4800871, 23.2015106 ], [ 71.4809219, 23.2014974 ], [ 71.4811977, 23.2013649 ], [ 71.4817875, 23.2031564 ], [ 71.4809527, 23.2031696 ] ] ], [ [ [ 71.4386298, 23.1869791 ], [ 71.4355691, 23.1870266 ], [ 71.4322397, 23.1875926 ], [ 71.4316878, 23.1878586 ], [ 71.4314096, 23.1878627 ], [ 71.4308484, 23.1876142 ], [ 71.4297331, 23.1875032 ], [ 71.4297426, 23.1880177 ], [ 71.429186, 23.1880262 ], [ 71.4294736, 23.1885363 ], [ 71.4286366, 23.1884203 ], [ 71.4283536, 23.1881672 ], [ 71.4277972, 23.1881759 ], [ 71.4275235, 23.1884375 ], [ 71.4214001, 23.1884036 ], [ 71.4214094, 23.1889179 ], [ 71.4205746, 23.1889308 ], [ 71.4205653, 23.1884165 ], [ 71.4194478, 23.1881763 ], [ 71.4191881, 23.1892095 ], [ 71.4177946, 23.1891018 ], [ 71.4172474, 23.1896248 ], [ 71.4162799, 23.190026 ], [ 71.4163123, 23.1918266 ], [ 71.4159048, 23.1923473 ], [ 71.4164612, 23.1923388 ], [ 71.4161968, 23.1931148 ], [ 71.4170361, 23.1933592 ], [ 71.4170454, 23.1938737 ], [ 71.417326, 23.1939975 ], [ 71.4189955, 23.1939718 ], [ 71.4198348, 23.1942161 ], [ 71.4204007, 23.1947221 ], [ 71.4212378, 23.1948383 ], [ 71.4213718, 23.1945788 ], [ 71.4212145, 23.1935522 ], [ 71.4217734, 23.1936718 ], [ 71.4219598, 23.1938856 ], [ 71.4217987, 23.1950869 ], [ 71.4215205, 23.1950912 ], [ 71.4215253, 23.1953484 ], [ 71.4220864, 23.195597 ], [ 71.4222111, 23.1948232 ], [ 71.4227583, 23.1943002 ], [ 71.4228887, 23.1937837 ], [ 71.4221471, 23.1937066 ], [ 71.4220446, 23.1932821 ], [ 71.4239947, 23.1933802 ], [ 71.4273243, 23.1928143 ], [ 71.4278715, 23.1922914 ], [ 71.4309322, 23.1922441 ], [ 71.4320522, 23.192613 ], [ 71.4320382, 23.1918415 ], [ 71.4331675, 23.192724 ], [ 71.434285, 23.192964 ], [ 71.4345587, 23.1927024 ], [ 71.435674, 23.1928143 ], [ 71.4355814, 23.1929846 ], [ 71.4351221, 23.1930802 ], [ 71.4351268, 23.1933373 ], [ 71.4356832, 23.1933288 ], [ 71.4357749, 23.1931575 ], [ 71.4362329, 23.192934 ], [ 71.4401281, 23.1928735 ], [ 71.4412272, 23.1920846 ], [ 71.4417743, 23.1915614 ], [ 71.4423285, 23.1914248 ], [ 71.442453, 23.1906508 ], [ 71.4427267, 23.1903895 ], [ 71.442722, 23.1901322 ], [ 71.4424343, 23.1896221 ], [ 71.4422723, 23.1883382 ], [ 71.4417135, 23.1882178 ], [ 71.4400255, 23.1872148 ], [ 71.4391907, 23.1872277 ], [ 71.4386298, 23.1869791 ] ] ], [ [ [ 71.415178788077029, 23.203225 ], [ 71.4151291, 23.2034227 ], [ 71.415412, 23.2036756 ], [ 71.4154166, 23.2039328 ], [ 71.4150066, 23.2043246 ], [ 71.4144478, 23.204205 ], [ 71.4140484, 23.2052403 ], [ 71.413636, 23.205504 ], [ 71.4136222, 23.2047323 ], [ 71.4125137, 23.2050065 ], [ 71.412523, 23.205521 ], [ 71.4136407, 23.2057612 ], [ 71.413784, 23.2060162 ], [ 71.4138163, 23.2078168 ], [ 71.4140993, 23.2080696 ], [ 71.4138394, 23.2091027 ], [ 71.4135657, 23.2093643 ], [ 71.4135704, 23.2096215 ], [ 71.4140068, 23.210644 ], [ 71.4145634, 23.2106355 ], [ 71.4145727, 23.2111498 ], [ 71.4154052, 23.211008 ], [ 71.4162285, 23.2103526 ], [ 71.4161027, 23.2111263 ], [ 71.4155555, 23.2116493 ], [ 71.415426, 23.2121658 ], [ 71.4151476, 23.2121702 ], [ 71.4151384, 23.2116557 ], [ 71.414582, 23.2116642 ], [ 71.4145912, 23.2121787 ], [ 71.4137587, 23.2123197 ], [ 71.413485, 23.2125813 ], [ 71.4120911, 23.2124745 ], [ 71.4119607, 23.212991 ], [ 71.4114181, 23.2137712 ], [ 71.4110104, 23.2142919 ], [ 71.4115716, 23.2145406 ], [ 71.4122529, 23.2137584 ], [ 71.4123788, 23.2129846 ], [ 71.4129352, 23.2129761 ], [ 71.4133614, 23.2134841 ], [ 71.4135151, 23.2142535 ], [ 71.4140717, 23.214245 ], [ 71.4140624, 23.2137306 ], [ 71.4154584, 23.2139664 ], [ 71.4154723, 23.2147381 ], [ 71.4146398, 23.2148791 ], [ 71.4140807, 23.2147595 ], [ 71.41409, 23.215274 ], [ 71.4163211, 23.2154968 ], [ 71.4160613, 23.21653 ], [ 71.4166109, 23.2161352 ], [ 71.4174481, 23.2162515 ], [ 71.4171767, 23.216641 ], [ 71.4166224, 23.2167788 ], [ 71.4166364, 23.2175503 ], [ 71.4177541, 23.2177905 ], [ 71.4178413, 23.217362 ], [ 71.4185799, 23.2172632 ], [ 71.4185706, 23.2167487 ], [ 71.4174574, 23.2167659 ], [ 71.4175491, 23.2165947 ], [ 71.4177311, 23.2165043 ], [ 71.4179955, 23.2157285 ], [ 71.4190099, 23.2155431 ], [ 71.4191087, 23.2157113 ], [ 71.4199435, 23.2156984 ], [ 71.4198178, 23.2164722 ], [ 71.4195442, 23.2167338 ], [ 71.4195487, 23.216991 ], [ 71.4198316, 23.2172439 ], [ 71.4202682, 23.2182664 ], [ 71.4211078, 23.2185106 ], [ 71.4212418, 23.2182513 ], [ 71.4212232, 23.2172224 ], [ 71.4210822, 23.2170955 ], [ 71.4205256, 23.217104 ], [ 71.4202497, 23.2172375 ], [ 71.4202404, 23.216723 ], [ 71.42079, 23.2163282 ], [ 71.4210683, 23.2163238 ], [ 71.4216296, 23.2165726 ], [ 71.4241365, 23.2166629 ], [ 71.4241457, 23.2171774 ], [ 71.4233062, 23.216933 ], [ 71.4232276, 23.217875 ], [ 71.4228613, 23.2178806 ], [ 71.4227496, 23.2169417 ], [ 71.422193, 23.2169502 ], [ 71.4222117, 23.2179791 ], [ 71.4226742, 23.2180594 ], [ 71.4227728, 23.2182276 ], [ 71.4232353, 23.2183082 ], [ 71.4233342, 23.2184764 ], [ 71.4240749, 23.2185525 ], [ 71.4241782, 23.218978 ], [ 71.4250132, 23.2189649 ], [ 71.4249993, 23.2181934 ], [ 71.4242622, 23.2183736 ], [ 71.4241643, 23.2182063 ], [ 71.4234226, 23.2181292 ], [ 71.4234211, 23.2180479 ], [ 71.4238813, 23.2179534 ], [ 71.4238721, 23.2174389 ], [ 71.4241527, 23.2175627 ], [ 71.4255419, 23.2174131 ], [ 71.4256851, 23.2176682 ], [ 71.4255744, 23.2192137 ], [ 71.4258573, 23.2194665 ], [ 71.4261357, 23.2194622 ], [ 71.426131, 23.219205 ], [ 71.4258481, 23.2189521 ], [ 71.4261265, 23.2189477 ], [ 71.4263907, 23.2181719 ], [ 71.4277823, 23.2181503 ], [ 71.4277728, 23.2176359 ], [ 71.4291575, 23.2172282 ], [ 71.42999, 23.2170872 ], [ 71.4299993, 23.2176015 ], [ 71.4305536, 23.2174639 ], [ 71.4311147, 23.2177124 ], [ 71.4322302, 23.2178243 ], [ 71.4322164, 23.2170526 ], [ 71.4327753, 23.2171723 ], [ 71.4336078, 23.2170311 ], [ 71.4336171, 23.2175455 ], [ 71.4344521, 23.2175327 ], [ 71.4344426, 23.2170182 ], [ 71.4363907, 23.216988 ], [ 71.4363814, 23.2164735 ], [ 71.4372117, 23.2162035 ], [ 71.4372209, 23.2167179 ], [ 71.4383294, 23.2164435 ], [ 71.4383202, 23.215929 ], [ 71.4388766, 23.2159203 ], [ 71.4390106, 23.215661 ], [ 71.4390013, 23.2151466 ], [ 71.4388581, 23.2148914 ], [ 71.4396882, 23.2146213 ], [ 71.4403648, 23.2135816 ], [ 71.4403553, 23.2130672 ], [ 71.4402121, 23.2128122 ], [ 71.4415988, 23.2125335 ], [ 71.4416766, 23.2091874 ], [ 71.4413842, 23.2084202 ], [ 71.4406728, 23.2075302 ], [ 71.4399696, 23.2071556 ], [ 71.4398216, 23.2066435 ], [ 71.439265, 23.2066521 ], [ 71.439116, 23.2061398 ], [ 71.4385502, 23.205634 ], [ 71.4382673, 23.2053811 ], [ 71.4378223, 23.2038444 ], [ 71.4372657, 23.2038529 ], [ 71.437140511723413, 23.203225 ], [ 71.4371123, 23.2030835 ], [ 71.437046837366537, 23.203025 ], [ 71.4368293, 23.2028306 ], [ 71.43624, 23.2010387 ], [ 71.4356696, 23.2002757 ], [ 71.4357906, 23.1992447 ], [ 71.436347, 23.199236 ], [ 71.436361, 23.2000077 ], [ 71.4366394, 23.2000033 ], [ 71.4367732, 23.199744 ], [ 71.4367592, 23.1989723 ], [ 71.4366182, 23.1988455 ], [ 71.4360641, 23.1989831 ], [ 71.4360548, 23.1984686 ], [ 71.4354982, 23.1984773 ], [ 71.4353447, 23.1977079 ], [ 71.4352037, 23.1975809 ], [ 71.4329777, 23.1976155 ], [ 71.4327018, 23.1977487 ], [ 71.4326925, 23.1972343 ], [ 71.4338055, 23.1972171 ], [ 71.4335201, 23.1968351 ], [ 71.4324073, 23.1968523 ], [ 71.4318554, 23.1971182 ], [ 71.4307399, 23.1970073 ], [ 71.4304805, 23.1980404 ], [ 71.4268792, 23.1989961 ], [ 71.4263321, 23.1995191 ], [ 71.4254997, 23.199661 ], [ 71.4251936, 23.198122 ], [ 71.4249176, 23.1982545 ], [ 71.4238046, 23.1982717 ], [ 71.4224064, 23.1979077 ], [ 71.4222574, 23.1973955 ], [ 71.420716, 23.1967754 ], [ 71.4201593, 23.1967841 ], [ 71.4193385, 23.1975686 ], [ 71.4190603, 23.1975728 ], [ 71.4189184, 23.1974469 ], [ 71.4187704, 23.1969345 ], [ 71.4176736, 23.1978514 ], [ 71.4165606, 23.1978686 ], [ 71.4157213, 23.1976242 ], [ 71.4146105, 23.1977703 ], [ 71.4142111, 23.1988056 ], [ 71.4140957, 23.2000938 ], [ 71.4149303, 23.200081 ], [ 71.4153888, 23.2023894 ], [ 71.415178788077043, 23.203225 ], [ 71.415178788077029, 23.203225 ] ] ], [ [ [ 71.2651652, 23.5110729 ], [ 71.2640516, 23.5112173 ], [ 71.2639138, 23.5113485 ], [ 71.2636524, 23.5123814 ], [ 71.2629711, 23.5132914 ], [ 71.2624154, 23.5134286 ], [ 71.2625763, 23.5147127 ], [ 71.2630085, 23.5154783 ], [ 71.2618904, 23.5153655 ], [ 71.2613258, 23.5149883 ], [ 71.2611947, 23.5155048 ], [ 71.261058, 23.515635 ], [ 71.2605022, 23.515772 ], [ 71.2602408, 23.5168051 ], [ 71.2596829, 23.5168132 ], [ 71.2596917, 23.5173277 ], [ 71.2591338, 23.5173358 ], [ 71.2592773, 23.517591 ], [ 71.2591601, 23.5188792 ], [ 71.2608494, 23.5197548 ], [ 71.2616863, 23.5197426 ], [ 71.2622529, 23.5202489 ], [ 71.2639267, 23.5202247 ], [ 71.2647724, 23.5207269 ], [ 71.2661803, 23.5214783 ], [ 71.2670151, 23.5213379 ], [ 71.2670238, 23.5218524 ], [ 71.2684252, 23.5222175 ], [ 71.2723353, 23.5224177 ], [ 71.2728909, 23.5222814 ], [ 71.2735745, 23.5214995 ], [ 71.2741104, 23.5202052 ], [ 71.2742283, 23.518917 ], [ 71.2739493, 23.5189212 ], [ 71.273945, 23.5186639 ], [ 71.273666, 23.5186679 ], [ 71.2736571, 23.5181534 ], [ 71.2730992, 23.5181616 ], [ 71.2729416, 23.5171347 ], [ 71.2725171, 23.5167545 ], [ 71.2716757, 23.5165095 ], [ 71.2708257, 23.5157501 ], [ 71.2702655, 23.5156299 ], [ 71.2701168, 23.5151175 ], [ 71.2688509, 23.5144923 ], [ 71.2684254, 23.514113 ], [ 71.2682776, 23.5136006 ], [ 71.267722, 23.5137369 ], [ 71.2663251, 23.513629 ], [ 71.2661761, 23.5131166 ], [ 71.2658928, 23.5128635 ], [ 71.2660108, 23.5115753 ], [ 71.2651741, 23.5115874 ], [ 71.2651652, 23.5110729 ] ] ], [ [ [ 71.0799618, 23.3907862 ], [ 71.083876, 23.3915061 ], [ 71.0841587, 23.3917595 ], [ 71.0847163, 23.3917521 ], [ 71.0855604, 23.3922556 ], [ 71.0941969, 23.3918827 ], [ 71.0944715, 23.3916217 ], [ 71.0955844, 23.3914787 ], [ 71.0955762, 23.390964 ], [ 71.0966851, 23.3905628 ], [ 71.0972426, 23.3905552 ], [ 71.0975173, 23.3902942 ], [ 71.098628, 23.390022 ], [ 71.0989026, 23.389761 ], [ 71.1027845, 23.3884223 ], [ 71.1055717, 23.3883847 ], [ 71.1067027, 23.3893987 ], [ 71.1117278, 23.3898455 ], [ 71.1198391, 23.3915371 ], [ 71.1256881, 23.3912003 ], [ 71.1259627, 23.3909392 ], [ 71.1281842, 23.3903944 ], [ 71.1368327, 23.3907909 ], [ 71.1379515, 23.391033 ], [ 71.1407387, 23.3909948 ], [ 71.1418495, 23.3907223 ], [ 71.1454726, 23.3906726 ], [ 71.146858, 23.3901388 ], [ 71.1471326, 23.3898778 ], [ 71.1479667, 23.3897382 ], [ 71.1479583, 23.3892237 ], [ 71.1487966, 23.3893403 ], [ 71.1504605, 23.3888028 ], [ 71.1543539, 23.3882347 ], [ 71.1562925, 23.3874359 ], [ 71.1571201, 23.3869098 ], [ 71.1598988, 23.3863568 ], [ 71.160452, 23.386092 ], [ 71.1610095, 23.3860842 ], [ 71.1615711, 23.3863337 ], [ 71.1624072, 23.3863222 ], [ 71.1649281, 23.3870593 ], [ 71.1668873, 23.3875467 ], [ 71.168002, 23.3875312 ], [ 71.1699572, 23.3877614 ], [ 71.1707975, 23.3880071 ], [ 71.1749738, 23.3876917 ], [ 71.1752567, 23.3879451 ], [ 71.1758141, 23.3879374 ], [ 71.1769373, 23.3884363 ], [ 71.1786138, 23.3886703 ], [ 71.1791753, 23.3889198 ], [ 71.1797326, 23.3889118 ], [ 71.1802943, 23.3891613 ], [ 71.1830793, 23.3889942 ], [ 71.1837629, 23.3882129 ], [ 71.1838901, 23.3874392 ], [ 71.1836113, 23.3874429 ], [ 71.183603, 23.3869285 ], [ 71.1802312, 23.3853027 ], [ 71.1793909, 23.385057 ], [ 71.179108, 23.3848037 ], [ 71.1785506, 23.3848115 ], [ 71.177706, 23.3843086 ], [ 71.1765913, 23.3843241 ], [ 71.1737791, 23.3828194 ], [ 71.1732135, 23.3823125 ], [ 71.1689912, 23.3797981 ], [ 71.163671, 23.3783278 ], [ 71.1619865, 23.3775792 ], [ 71.1488262, 23.3739009 ], [ 71.1474204, 23.3731483 ], [ 71.1435023, 23.3721729 ], [ 71.1376378, 23.3714811 ], [ 71.1273269, 23.3716217 ], [ 71.1226017, 23.3724579 ], [ 71.1223271, 23.3727189 ], [ 71.1200977, 23.3727491 ], [ 71.1150937, 23.3735889 ], [ 71.1145405, 23.3738536 ], [ 71.1098028, 23.3739177 ], [ 71.1084135, 23.3741938 ], [ 71.083873, 23.3734934 ], [ 71.0805449, 23.3745671 ], [ 71.0774833, 23.3748652 ], [ 71.0763765, 23.3753944 ], [ 71.0685891, 23.3765271 ], [ 71.0655434, 23.3778538 ], [ 71.0630431, 23.3784016 ], [ 71.0623517, 23.3787971 ], [ 71.0618182, 23.3803481 ], [ 71.0609981, 23.3813881 ], [ 71.0610021, 23.3816454 ], [ 71.0618541, 23.3826635 ], [ 71.0620019, 23.3831763 ], [ 71.0631208, 23.3834187 ], [ 71.0628539, 23.3841942 ], [ 71.0634115, 23.3841868 ], [ 71.0640008, 23.3862377 ], [ 71.0651215, 23.3866085 ], [ 71.0712574, 23.3867846 ], [ 71.072663, 23.387538 ], [ 71.0732224, 23.3876597 ], [ 71.0732304, 23.3881742 ], [ 71.0779947, 23.3897831 ], [ 71.0799618, 23.3907862 ] ] ], [ [ [ 71.0273608, 23.7059283 ], [ 71.026802, 23.7059357 ], [ 71.0265266, 23.7061965 ], [ 71.0240199, 23.7067441 ], [ 71.0237387, 23.7066195 ], [ 71.0237466, 23.707134 ], [ 71.0231877, 23.7071413 ], [ 71.0230554, 23.7076577 ], [ 71.022084, 23.7080559 ], [ 71.0215251, 23.7080633 ], [ 71.0212439, 23.7079387 ], [ 71.0211195, 23.7089695 ], [ 71.0208439, 23.7092306 ], [ 71.0207128, 23.7097469 ], [ 71.0201539, 23.7097543 ], [ 71.0201618, 23.7102687 ], [ 71.019603, 23.7102761 ], [ 71.0192032, 23.7115679 ], [ 71.0183809, 23.7126078 ], [ 71.0178299, 23.7131296 ], [ 71.0180533, 23.7185305 ], [ 71.0186141, 23.7186514 ], [ 71.0191809, 23.7191587 ], [ 71.0197417, 23.7192804 ], [ 71.0207351, 23.7202967 ], [ 71.0217492, 23.7225995 ], [ 71.0225916, 23.7228457 ], [ 71.0228829, 23.7236138 ], [ 71.0226035, 23.7236174 ], [ 71.0226075, 23.7238748 ], [ 71.0228868, 23.7238711 ], [ 71.0233215, 23.7248947 ], [ 71.0238883, 23.725402 ], [ 71.0240365, 23.7259145 ], [ 71.0245954, 23.7259073 ], [ 71.0249902, 23.7243583 ], [ 71.0249741, 23.7233292 ], [ 71.0238326, 23.7218002 ], [ 71.0233822, 23.7197475 ], [ 71.0242164, 23.7194793 ], [ 71.0246273, 23.7189593 ], [ 71.0247594, 23.7184428 ], [ 71.0261388, 23.7172665 ], [ 71.0266956, 23.7171309 ], [ 71.0269551, 23.7158408 ], [ 71.0272365, 23.7159654 ], [ 71.0280728, 23.7158263 ], [ 71.0283402, 23.7150508 ], [ 71.0288931, 23.7146571 ], [ 71.02945, 23.7145216 ], [ 71.0301361, 23.7137407 ], [ 71.0309545, 23.7124434 ], [ 71.031186, 23.7093525 ], [ 71.0300365, 23.707309 ], [ 71.0294697, 23.7068017 ], [ 71.0293227, 23.706289 ], [ 71.0276441, 23.706182 ], [ 71.0273608, 23.7059283 ] ] ], [ [ [ 70.405405042586551, 24.392126045644098 ], [ 70.4054137, 24.3921367 ], [ 70.4075082, 24.3947144 ], [ 70.4108412, 24.3988814 ], [ 70.4147302, 24.4022144 ], [ 70.4191752, 24.4047144 ], [ 70.4238972, 24.4072144 ], [ 70.4288972, 24.4091594 ], [ 70.4344522, 24.4099924 ], [ 70.4408412, 24.4099924 ], [ 70.4463972, 24.4108254 ], [ 70.4525082, 24.4111034 ], [ 70.4583412, 24.4119364 ], [ 70.4638972, 24.4127704 ], [ 70.4694522, 24.4136034 ], [ 70.4758412, 24.4138814 ], [ 70.4813972, 24.4147144 ], [ 70.4869522, 24.4155484 ], [ 70.4921652, 24.4163 ], [ 70.492237508397309, 24.416310321374223 ], [ 70.4922367, 24.4162972 ], [ 70.4921562, 24.4149905 ], [ 70.4918721, 24.414736 ], [ 70.491726, 24.4142228 ], [ 70.4922881, 24.4142173 ], [ 70.4924068, 24.4124147 ], [ 70.4914689, 24.4106258 ], [ 70.4912986, 24.4080539 ], [ 70.4921491, 24.4086884 ], [ 70.4944064, 24.4094383 ], [ 70.4952614, 24.4104591 ], [ 70.4961045, 24.4104508 ], [ 70.4966694, 24.4107025 ], [ 70.4980747, 24.4106887 ], [ 70.4989206, 24.4109377 ], [ 70.5025768, 24.4111588 ], [ 70.5042705, 24.4117857 ], [ 70.5044014, 24.4110125 ], [ 70.5048157, 24.4103644 ], [ 70.5053778, 24.4103589 ], [ 70.5059427, 24.4106107 ], [ 70.5065048, 24.410605 ], [ 70.5067828, 24.410345 ], [ 70.507003421093756, 24.410309066645791 ], [ 70.5084657, 24.4100709 ], [ 70.5105621, 24.4091497 ], [ 70.5111026, 24.4073429 ], [ 70.5110813, 24.4055415 ], [ 70.5104948, 24.4034886 ], [ 70.5097836, 24.4027237 ], [ 70.5086581, 24.4026058 ], [ 70.5075296, 24.4022316 ], [ 70.5073823, 24.4017182 ], [ 70.5069554, 24.4012077 ], [ 70.5058299, 24.4010898 ], [ 70.5052648, 24.4008383 ], [ 70.503017, 24.4008606 ], [ 70.502739, 24.4011206 ], [ 70.4996543, 24.4016659 ], [ 70.4985364, 24.4021917 ], [ 70.4971314, 24.4022055 ], [ 70.4940586, 24.40378 ], [ 70.4932247, 24.4045602 ], [ 70.4929439, 24.4045631 ], [ 70.4923772, 24.404183 ], [ 70.4922302, 24.4036699 ], [ 70.4915192, 24.4029048 ], [ 70.4901081, 24.4024039 ], [ 70.4899611, 24.4018908 ], [ 70.4896772, 24.4016362 ], [ 70.4893871, 24.400867 ], [ 70.489103, 24.4006124 ], [ 70.489082, 24.3988112 ], [ 70.4886519, 24.3980433 ], [ 70.4883725, 24.3981743 ], [ 70.4855627, 24.3982019 ], [ 70.4849977, 24.3979501 ], [ 70.4844357, 24.3979556 ], [ 70.4838692, 24.3975755 ], [ 70.4841457, 24.3971864 ], [ 70.4847061, 24.3970528 ], [ 70.4841351, 24.3962862 ], [ 70.4835733, 24.3962917 ], [ 70.4835672, 24.395777 ], [ 70.4841306, 24.3958999 ], [ 70.4852531, 24.3957606 ], [ 70.4836891, 24.3942318 ], [ 70.4835432, 24.3937186 ], [ 70.4829813, 24.3937241 ], [ 70.4828522, 24.3947547 ], [ 70.4831363, 24.3950093 ], [ 70.4832862, 24.3957799 ], [ 70.4827197, 24.395399 ], [ 70.4815914, 24.3950244 ], [ 70.4813194, 24.3957991 ], [ 70.4810369, 24.3956727 ], [ 70.4804765, 24.3958073 ], [ 70.4803264, 24.3950367 ], [ 70.4804644, 24.3947782 ], [ 70.4799025, 24.3947836 ], [ 70.4800365, 24.3942675 ], [ 70.4797496, 24.3937557 ], [ 70.4790386, 24.3929906 ], [ 70.4784767, 24.3929961 ], [ 70.4784706, 24.3924814 ], [ 70.4779087, 24.3924869 ], [ 70.4781777, 24.3914548 ], [ 70.4773319, 24.3912057 ], [ 70.4773168, 24.3899192 ], [ 70.4767549, 24.3899246 ], [ 70.476749, 24.38941 ], [ 70.4759119, 24.3899328 ], [ 70.4760431, 24.3891596 ], [ 70.4759, 24.3889037 ], [ 70.4750571, 24.3889118 ], [ 70.475347, 24.389681 ], [ 70.4750647, 24.3895546 ], [ 70.4742217, 24.3895629 ], [ 70.4739394, 24.3894374 ], [ 70.4739303, 24.3886653 ], [ 70.4730875, 24.3886736 ], [ 70.4727976, 24.3879044 ], [ 70.4699821, 24.387417 ], [ 70.4699879, 24.3879316 ], [ 70.4638023, 24.387605 ], [ 70.4595805, 24.3870029 ], [ 70.4601512, 24.3877695 ], [ 70.4579021, 24.3876619 ], [ 70.4562223, 24.3881928 ], [ 70.4539745, 24.3882144 ], [ 70.4534185, 24.3887345 ], [ 70.4522932, 24.3886171 ], [ 70.4518859, 24.3899076 ], [ 70.4511928, 24.3906865 ], [ 70.4506323, 24.3908199 ], [ 70.4503542, 24.39108 ], [ 70.4495128, 24.3912172 ], [ 70.4489333, 24.3896786 ], [ 70.4461221, 24.3895763 ], [ 70.4444436, 24.3902363 ], [ 70.4444378, 24.3897217 ], [ 70.4424667, 24.3893539 ], [ 70.4399379, 24.3893779 ], [ 70.4379609, 24.3884964 ], [ 70.4380547, 24.3883257 ], [ 70.438239, 24.3882365 ], [ 70.4382361, 24.3879791 ], [ 70.4379551, 24.3879817 ], [ 70.4378604, 24.3881516 ], [ 70.4371108, 24.3878606 ], [ 70.4368269, 24.387606 ], [ 70.4362635, 24.3874831 ], [ 70.4359738, 24.3867137 ], [ 70.4354119, 24.3867192 ], [ 70.4346916, 24.3851819 ], [ 70.434121, 24.3844151 ], [ 70.4338633, 24.3841325 ], [ 70.4338516, 24.3831032 ], [ 70.433422, 24.3823351 ], [ 70.4322954, 24.3820885 ], [ 70.4322035, 24.3825156 ], [ 70.4317392, 24.3826084 ], [ 70.4311627, 24.3813272 ], [ 70.4300346, 24.3809513 ], [ 70.429467, 24.3804419 ], [ 70.4277726, 24.3796859 ], [ 70.4269284, 24.3795655 ], [ 70.4269225, 24.3790509 ], [ 70.4241117, 24.3789482 ], [ 70.4235555, 24.3794682 ], [ 70.4221508, 24.3794814 ], [ 70.4218669, 24.3792266 ], [ 70.4204621, 24.3792399 ], [ 70.4201797, 24.3791144 ], [ 70.4201741, 24.3785997 ], [ 70.4184884, 24.3786154 ], [ 70.4184825, 24.3781008 ], [ 70.4159469, 24.3774807 ], [ 70.4136993, 24.3775016 ], [ 70.4120236, 24.3784185 ], [ 70.4121665, 24.3786746 ], [ 70.4121781, 24.3797039 ], [ 70.4124617, 24.3799585 ], [ 70.4124761, 24.3812452 ], [ 70.4126199, 24.3815013 ], [ 70.411499, 24.3817689 ], [ 70.4115046, 24.3822837 ], [ 70.4120665, 24.3822784 ], [ 70.4120722, 24.3827931 ], [ 70.4109513, 24.3830609 ], [ 70.4109599, 24.3838328 ], [ 70.4103981, 24.3838381 ], [ 70.4102684, 24.3848687 ], [ 70.409578, 24.3859046 ], [ 70.4101399, 24.3858993 ], [ 70.4088893, 24.3871977 ], [ 70.4088978, 24.3879698 ], [ 70.4082074, 24.3890055 ], [ 70.4073672, 24.3892707 ], [ 70.4070949, 24.3900454 ], [ 70.4065328, 24.3900505 ], [ 70.4064005, 24.3908239 ], [ 70.4061223, 24.3910837 ], [ 70.406269, 24.3915971 ], [ 70.405426, 24.391605 ], [ 70.4054317, 24.3921163 ], [ 70.4054317, 24.3921197 ], [ 70.405405042586551, 24.392126045644098 ] ] ], [ [ [ 70.515779580920594, 24.421238625540607 ], [ 70.5197247, 24.4227784 ], [ 70.5255587, 24.4236114 ], [ 70.5308357, 24.4258334 ], [ 70.5358357, 24.4277784 ], [ 70.5408357, 24.4294444 ], [ 70.5455587, 24.4319444 ], [ 70.5505587, 24.4336114 ], [ 70.5555587, 24.4352784 ], [ 70.5613917, 24.4363894 ], [ 70.5675027, 24.4363894 ], [ 70.5738917, 24.4341674 ], [ 70.5794467, 24.4316674 ], [ 70.5814067, 24.4303985 ], [ 70.5814435, 24.4303732 ], [ 70.581472842254229, 24.43035422003986 ], [ 70.5809955, 24.4284997 ], [ 70.5793011, 24.4278737 ], [ 70.5787326, 24.4273649 ], [ 70.578169, 24.4272427 ], [ 70.5780216, 24.4267295 ], [ 70.5747519, 24.4236755 ], [ 70.5741883, 24.4235522 ], [ 70.573904, 24.4232978 ], [ 70.5719273, 24.4225464 ], [ 70.5699601, 24.4225668 ], [ 70.5696823, 24.4228269 ], [ 70.5685564, 24.4227104 ], [ 70.5682882, 24.4237426 ], [ 70.5680072, 24.4237454 ], [ 70.5678598, 24.4232323 ], [ 70.5671482, 24.4224676 ], [ 70.5651843, 24.4227454 ], [ 70.565056, 24.423776 ], [ 70.5646413, 24.424295 ], [ 70.5643586, 24.4241688 ], [ 70.5621104, 24.424192 ], [ 70.5618309, 24.4243241 ], [ 70.5619773, 24.4248373 ], [ 70.5622614, 24.4250916 ], [ 70.562412, 24.425862 ], [ 70.5615657, 24.4256135 ], [ 70.5615595, 24.4250988 ], [ 70.5595922, 24.4251191 ], [ 70.558867, 24.4233253 ], [ 70.5585827, 24.4230709 ], [ 70.5580049, 24.42179 ], [ 70.5577207, 24.4215356 ], [ 70.5575744, 24.4210225 ], [ 70.5570123, 24.4210281 ], [ 70.5570061, 24.4205137 ], [ 70.5553168, 24.4202737 ], [ 70.5549072, 24.4213073 ], [ 70.5549137, 24.4218218 ], [ 70.5550579, 24.4220777 ], [ 70.5544958, 24.4220835 ], [ 70.5545083, 24.4231126 ], [ 70.552819, 24.4228728 ], [ 70.5529558, 24.422614 ], [ 70.5529212, 24.4197836 ], [ 70.5523278, 24.4172162 ], [ 70.5510479, 24.4159425 ], [ 70.5496413, 24.4158278 ], [ 70.5488061, 24.4164802 ], [ 70.5486525, 24.4154525 ], [ 70.5479411, 24.4146878 ], [ 70.5470981, 24.4146963 ], [ 70.5469477, 24.4139259 ], [ 70.545668, 24.4126522 ], [ 70.5428517, 24.4121661 ], [ 70.5429452, 24.4119955 ], [ 70.5431295, 24.4119061 ], [ 70.5431233, 24.4113914 ], [ 70.5436869, 24.4115139 ], [ 70.5439709, 24.4117683 ], [ 70.5448156, 24.4118889 ], [ 70.5446619, 24.4108611 ], [ 70.5447999, 24.4106023 ], [ 70.5439537, 24.4103536 ], [ 70.5439475, 24.409839 ], [ 70.5445079, 24.409704 ], [ 70.5446464, 24.4095746 ], [ 70.54464, 24.4090599 ], [ 70.5439256, 24.4080378 ], [ 70.5419507, 24.4074141 ], [ 70.5408267, 24.4074254 ], [ 70.5402663, 24.4075604 ], [ 70.5407186, 24.4101293 ], [ 70.5403038, 24.4106481 ], [ 70.5366523, 24.4108135 ], [ 70.5360887, 24.410691 ], [ 70.5363822, 24.4117173 ], [ 70.5358203, 24.4117231 ], [ 70.5361136, 24.4127494 ], [ 70.5355485, 24.4124978 ], [ 70.5348269, 24.4109611 ], [ 70.5342556, 24.4101949 ], [ 70.5332601, 24.4091756 ], [ 70.5324202, 24.4094413 ], [ 70.5325665, 24.4099546 ], [ 70.5328506, 24.410209 ], [ 70.5328598, 24.4109811 ], [ 70.532582, 24.4112412 ], [ 70.5324574, 24.4125292 ], [ 70.5322711, 24.4124426 ], [ 70.5318861, 24.411763 ], [ 70.5316997, 24.4116762 ], [ 70.5317234, 24.4099631 ], [ 70.53129, 24.4089382 ], [ 70.5298802, 24.4085659 ], [ 70.5284769, 24.4087091 ], [ 70.5287485, 24.4079344 ], [ 70.527623, 24.4078167 ], [ 70.5264898, 24.4070561 ], [ 70.5250847, 24.4070703 ], [ 70.5248054, 24.4072022 ], [ 70.5248114, 24.4077169 ], [ 70.5239685, 24.4077252 ], [ 70.5238337, 24.4082414 ], [ 70.5235557, 24.4085014 ], [ 70.5221785, 24.4108314 ], [ 70.5219099, 24.4118635 ], [ 70.5216319, 24.4121236 ], [ 70.5216504, 24.4136675 ], [ 70.5213756, 24.414185 ], [ 70.5205419, 24.4149654 ], [ 70.5199952, 24.4162576 ], [ 70.5197173, 24.4165179 ], [ 70.5193085, 24.4175513 ], [ 70.5187481, 24.4176851 ], [ 70.5179128, 24.4183374 ], [ 70.5177778, 24.4188533 ], [ 70.517225, 24.4196309 ], [ 70.5161133, 24.4206715 ], [ 70.5158383, 24.421189 ], [ 70.5157975, 24.4212202 ], [ 70.515779580920594, 24.421238625540607 ] ] ], [ [ [ 70.29633088285955, 24.357386639367228 ], [ 70.2986446, 24.3593696 ], [ 70.3030896, 24.3618697 ], [ 70.3075336, 24.3643697 ], [ 70.3128116, 24.3663147 ], [ 70.3186446, 24.3677037 ], [ 70.319335987378153, 24.367841939730994 ], [ 70.3194082, 24.3676789 ], [ 70.3199701, 24.367674 ], [ 70.3201046, 24.3671582 ], [ 70.3179595, 24.367106 ], [ 70.3181878, 24.366941 ], [ 70.3184197, 24.3667661 ], [ 70.3185139, 24.3665944 ], [ 70.3188581, 24.3665086 ], [ 70.3190641, 24.3662085 ], [ 70.3193338, 24.3659895 ], [ 70.3194921, 24.3658423 ], [ 70.3199724, 24.3652653 ], [ 70.3201478, 24.3649513 ], [ 70.3203835, 24.3647576 ], [ 70.3205452, 24.364575 ], [ 70.3205597, 24.3643671 ], [ 70.3205851, 24.3641921 ], [ 70.3207481, 24.3638918 ], [ 70.3207373, 24.3636805 ], [ 70.3208206, 24.3633438 ], [ 70.3208496, 24.3632184 ], [ 70.3210307, 24.363093 ], [ 70.3209836, 24.3627431 ], [ 70.3210307, 24.3624196 ], [ 70.3210245, 24.3622669 ], [ 70.3210126, 24.3620202 ], [ 70.3210634, 24.3617562 ], [ 70.3212228, 24.3615614 ], [ 70.3213888, 24.3614162 ], [ 70.3213797, 24.361266 ], [ 70.3215482, 24.361129 ], [ 70.3216442, 24.3612264 ], [ 70.3217765, 24.3611554 ], [ 70.3219341, 24.3611307 ], [ 70.3220464, 24.3610333 ], [ 70.3220787, 24.3609837 ], [ 70.3220742, 24.360914 ], [ 70.3221639, 24.3607989 ], [ 70.3222255, 24.3607114 ], [ 70.3224302, 24.3606998 ], [ 70.3225751, 24.3606388 ], [ 70.3228179, 24.3605579 ], [ 70.3230407, 24.3606569 ], [ 70.3232273, 24.3605744 ], [ 70.323307, 24.3604952 ], [ 70.3233578, 24.3604077 ], [ 70.3235498, 24.3603302 ], [ 70.3237219, 24.3602526 ], [ 70.3239034, 24.3601409 ], [ 70.3242608, 24.3600425 ], [ 70.324539, 24.3597756 ], [ 70.3248399, 24.3595271 ], [ 70.325039, 24.3591848 ], [ 70.3256459, 24.359017 ], [ 70.3259403, 24.3586804 ], [ 70.3268281, 24.3587858 ], [ 70.3274976, 24.3587374 ], [ 70.3285484, 24.3584276 ], [ 70.3296912, 24.3580644 ], [ 70.3301641, 24.3578933 ], [ 70.3304152, 24.3577252 ], [ 70.3304254, 24.3575759 ], [ 70.3301702, 24.357136 ], [ 70.3298731, 24.3568257 ], [ 70.329695, 24.3565205 ], [ 70.3294745, 24.3561722 ], [ 70.3291741, 24.3560067 ], [ 70.3288049, 24.3557014 ], [ 70.3285861, 24.355356 ], [ 70.328296, 24.3551392 ], [ 70.3280831, 24.3548782 ], [ 70.3277498, 24.3545514 ], [ 70.3274237, 24.3543336 ], [ 70.3270384, 24.3540867 ], [ 70.3267873, 24.3537311 ], [ 70.3261953, 24.3534621 ], [ 70.3259961, 24.3535908 ], [ 70.3260758, 24.3537823 ], [ 70.325862, 24.3537493 ], [ 70.3256192, 24.3535875 ], [ 70.3253765, 24.3534324 ], [ 70.3250685, 24.3529934 ], [ 70.3248185, 24.3529009 ], [ 70.3245612, 24.3531383 ], [ 70.3217722, 24.3518301 ], [ 70.3214927, 24.3519616 ], [ 70.3209135, 24.3518671 ], [ 70.3197749, 24.3517923 ], [ 70.319154, 24.3515656 ], [ 70.3183503, 24.3513815 ], [ 70.3175957, 24.3513432 ], [ 70.3148134, 24.3510572 ], [ 70.3139362, 24.3510148 ], [ 70.3129033, 24.350924 ], [ 70.3126, 24.350893592627553 ], [ 70.3125113, 24.3508847 ], [ 70.3124, 24.350696906280668 ], [ 70.3122056, 24.3503689 ], [ 70.3119221, 24.350114 ], [ 70.3110767, 24.3498639 ], [ 70.3093914, 24.3498785 ], [ 70.3085513, 24.3501431 ], [ 70.3074279, 24.3501529 ], [ 70.3065904, 24.3506747 ], [ 70.3054708, 24.3510709 ], [ 70.305476, 24.3515857 ], [ 70.3049142, 24.3515904 ], [ 70.3047784, 24.3521064 ], [ 70.304363, 24.3526246 ], [ 70.3029584, 24.3526367 ], [ 70.3029637, 24.3531514 ], [ 70.3024033, 24.3532844 ], [ 70.3012888, 24.3541952 ], [ 70.3011531, 24.3547112 ], [ 70.3007374, 24.3552294 ], [ 70.3001771, 24.3553625 ], [ 70.2996191, 24.3557537 ], [ 70.2994834, 24.3562697 ], [ 70.2990702, 24.3568128 ], [ 70.2973913, 24.3574702 ], [ 70.29633088285955, 24.357386639367228 ] ] ], [ [ [ 70.328086211014309, 24.369397339927463 ], [ 70.3281493, 24.3694068 ], [ 70.3297302, 24.3697144 ], [ 70.3361192, 24.3697144 ], [ 70.3422302, 24.3697144 ], [ 70.3483412, 24.3699924 ], [ 70.3547302, 24.3699924 ], [ 70.3613972, 24.3691594 ], [ 70.3686192, 24.3677704 ], [ 70.3755642, 24.3669364 ], [ 70.3811192, 24.3677704 ], [ 70.3861192, 24.3697144 ], [ 70.3902862, 24.3730484 ], [ 70.3936192, 24.3772144 ], [ 70.3969522, 24.3813814 ], [ 70.398257389959369, 24.383095092149237 ], [ 70.3982803, 24.3830737 ], [ 70.3984453, 24.3829195 ], [ 70.3985778, 24.3821461 ], [ 70.3997059, 24.3825213 ], [ 70.4005487, 24.3825135 ], [ 70.4009654, 24.382124 ], [ 70.402058, 24.3792832 ], [ 70.4016201, 24.377743 ], [ 70.402182, 24.3777377 ], [ 70.4021877, 24.3782525 ], [ 70.4030276, 24.3779874 ], [ 70.4031592, 24.377214 ], [ 70.4034372, 24.3769541 ], [ 70.4035668, 24.3759235 ], [ 70.4041272, 24.3757891 ], [ 70.4042659, 24.3756596 ], [ 70.4042631, 24.3754022 ], [ 70.4039764, 24.3748902 ], [ 70.4039679, 24.3741184 ], [ 70.4042459, 24.3738583 ], [ 70.4042402, 24.3733436 ], [ 70.4039566, 24.3730889 ], [ 70.4032376, 24.3715515 ], [ 70.4026785, 24.3718141 ], [ 70.402512, 24.3694994 ], [ 70.4027902, 24.3692393 ], [ 70.4029254, 24.3687233 ], [ 70.4017974, 24.3683474 ], [ 70.4012357, 24.3683525 ], [ 70.4009575, 24.3686126 ], [ 70.4006766, 24.368615 ], [ 70.3998282, 24.3681082 ], [ 70.3978475, 24.3668398 ], [ 70.3964302, 24.3656952 ], [ 70.3962835, 24.3651817 ], [ 70.3958571, 24.364671 ], [ 70.3950116, 24.3644213 ], [ 70.3944355, 24.3631399 ], [ 70.3938738, 24.363145 ], [ 70.3941461, 24.3623705 ], [ 70.3935844, 24.3623756 ], [ 70.3937186, 24.3618598 ], [ 70.3927247, 24.3608394 ], [ 70.3921614, 24.3607154 ], [ 70.3913104, 24.3599513 ], [ 70.3898972, 24.3591921 ], [ 70.3848241, 24.3576944 ], [ 70.382296, 24.3577175 ], [ 70.3814561, 24.3579825 ], [ 70.3806134, 24.3579902 ], [ 70.3794996, 24.3589014 ], [ 70.3785464, 24.3617411 ], [ 70.377853, 24.3625194 ], [ 70.3770061, 24.3621407 ], [ 70.3758825, 24.3621509 ], [ 70.3756001, 24.3620252 ], [ 70.3757319, 24.361252 ], [ 70.3760099, 24.3609921 ], [ 70.3759738, 24.3576468 ], [ 70.3752637, 24.3568812 ], [ 70.3747005, 24.356757 ], [ 70.373282, 24.3554831 ], [ 70.3724351, 24.3551051 ], [ 70.3724297, 24.3545905 ], [ 70.3715882, 24.3547264 ], [ 70.3710208, 24.3542168 ], [ 70.3662456, 24.3542599 ], [ 70.3659676, 24.3545198 ], [ 70.3642875, 24.3550496 ], [ 70.3640095, 24.3553094 ], [ 70.3628901, 24.355706 ], [ 70.3627546, 24.3562219 ], [ 70.3619201, 24.3570016 ], [ 70.3615075, 24.3577774 ], [ 70.3609456, 24.3577823 ], [ 70.3608103, 24.3582983 ], [ 70.3599757, 24.3590779 ], [ 70.3601388, 24.3611354 ], [ 70.360702, 24.3612584 ], [ 70.3611297, 24.3618986 ], [ 70.3609952, 24.3624143 ], [ 70.3587396, 24.3616625 ], [ 70.3584505, 24.3608931 ], [ 70.3578872, 24.3607689 ], [ 70.35732, 24.3602594 ], [ 70.3564745, 24.3600095 ], [ 70.3545094, 24.3601562 ], [ 70.353493, 24.357077 ], [ 70.3523584, 24.3560577 ], [ 70.3520719, 24.3555455 ], [ 70.351362, 24.3547797 ], [ 70.3508016, 24.3549129 ], [ 70.3505234, 24.3551728 ], [ 70.3502426, 24.3551753 ], [ 70.3471443, 24.3544308 ], [ 70.3462962, 24.3539235 ], [ 70.3437653, 24.3536888 ], [ 70.3434858, 24.3538203 ], [ 70.3436746, 24.3542448 ], [ 70.3426459, 24.3540851 ], [ 70.3427831, 24.3538266 ], [ 70.3427776, 24.3533119 ], [ 70.3426349, 24.3530558 ], [ 70.3420719, 24.3529316 ], [ 70.3415045, 24.3524219 ], [ 70.3406565, 24.3519146 ], [ 70.3398111, 24.3516648 ], [ 70.3392452, 24.3512841 ], [ 70.3392397, 24.3507695 ], [ 70.3386767, 24.3506453 ], [ 70.3383445, 24.3504157 ], [ 70.337502, 24.3504231 ], [ 70.3361028, 24.3509502 ], [ 70.3352668, 24.3516013 ], [ 70.3347008, 24.3543896 ], [ 70.3343778, 24.3552096 ], [ 70.3340055, 24.3560494 ], [ 70.333716, 24.3563764 ], [ 70.3334785, 24.3569918 ], [ 70.3331379, 24.3576718 ], [ 70.3331826, 24.3579239 ], [ 70.3333437, 24.3589322 ], [ 70.3329893, 24.3599295 ], [ 70.332848, 24.3608505 ], [ 70.3326451, 24.3613357 ], [ 70.3323408, 24.3613588 ], [ 70.3320053, 24.3611468 ], [ 70.3316039, 24.3611328 ], [ 70.3313201, 24.3612898 ], [ 70.3310653, 24.3618869 ], [ 70.3306612, 24.3625388 ], [ 70.3304853, 24.3634875 ], [ 70.3302972, 24.3640291 ], [ 70.3297744, 24.3649428 ], [ 70.3295361, 24.365404 ], [ 70.3291341, 24.3661646 ], [ 70.3285978, 24.3668445 ], [ 70.3277108, 24.3678816 ], [ 70.3277136, 24.3681388 ], [ 70.3279971, 24.3683938 ], [ 70.328086211014309, 24.369397339927463 ] ] ], [ [ [ 70.9985227, 23.7939222 ], [ 70.9985304, 23.7944367 ], [ 70.9979732, 23.7945722 ], [ 70.9971424, 23.7950976 ], [ 70.9960396, 23.7961411 ], [ 70.9949271, 23.7965419 ], [ 70.9947948, 23.7970583 ], [ 70.9942473, 23.7978373 ], [ 70.993696, 23.798359 ], [ 70.9928808, 23.7999135 ], [ 70.9928965, 23.8009426 ], [ 70.993655, 23.8047925 ], [ 70.9947733, 23.8047782 ], [ 70.9953522, 23.8060573 ], [ 70.9959173, 23.8064355 ], [ 70.9973214, 23.8068037 ], [ 70.9980356, 23.8078237 ], [ 70.9981838, 23.8083365 ], [ 70.9998714, 23.8089575 ], [ 71.000155, 23.8092112 ], [ 71.0026657, 23.8087929 ], [ 71.0029256, 23.807503 ], [ 71.0023663, 23.8075104 ], [ 71.0023465, 23.806224 ], [ 71.002067, 23.8062276 ], [ 71.0021983, 23.8057113 ], [ 71.0024741, 23.8054503 ], [ 71.0027419, 23.8046748 ], [ 71.0030174, 23.804414 ], [ 71.0030097, 23.8038995 ], [ 71.003561, 23.8033777 ], [ 71.0043722, 23.8015659 ], [ 71.0049195, 23.8007869 ], [ 71.0050479, 23.8000131 ], [ 71.0056071, 23.8000059 ], [ 71.0060103, 23.7989713 ], [ 71.0054155, 23.7966633 ], [ 71.0044196, 23.7955177 ], [ 71.0027302, 23.7947678 ], [ 71.002173, 23.7949041 ], [ 71.0021651, 23.7943896 ], [ 70.9985227, 23.7939222 ] ] ], [ [ [ 70.9922469, 23.8041671 ], [ 70.9905693, 23.8041887 ], [ 70.987781, 23.8047392 ], [ 70.9868156, 23.8056529 ], [ 70.9861307, 23.8065618 ], [ 70.984602, 23.8072254 ], [ 70.9845136, 23.8105716 ], [ 70.9853563, 23.8108181 ], [ 70.9852239, 23.8113344 ], [ 70.9854112, 23.8144198 ], [ 70.9859704, 23.8144126 ], [ 70.9862618, 23.8151809 ], [ 70.9865395, 23.8150483 ], [ 70.9876601, 23.8151628 ], [ 70.9885185, 23.8164383 ], [ 70.988239, 23.8164419 ], [ 70.9882467, 23.8169566 ], [ 70.9885264, 23.816953 ], [ 70.9885342, 23.8174675 ], [ 70.9896567, 23.8177103 ], [ 70.9902356, 23.8189895 ], [ 70.9907969, 23.8191104 ], [ 70.9922148, 23.8203786 ], [ 70.9952889, 23.8202108 ], [ 70.9965153, 23.8181363 ], [ 70.9964879, 23.8163353 ], [ 70.9956017, 23.813259 ], [ 70.9955663, 23.8109436 ], [ 70.9952826, 23.8106899 ], [ 70.994696, 23.8088963 ], [ 70.9949402, 23.8065773 ], [ 70.9936725, 23.80595 ], [ 70.9931114, 23.805829 ], [ 70.9929632, 23.8053163 ], [ 70.9922469, 23.8041671 ] ] ], [ [ [ 70.9188238, 24.2655761 ], [ 70.9188314, 24.2660905 ], [ 70.9185488, 24.265965 ], [ 70.9168652, 24.2659864 ], [ 70.9160272, 24.2662542 ], [ 70.9151929, 24.2667792 ], [ 70.9140705, 24.2667934 ], [ 70.9135053, 24.2665432 ], [ 70.9126634, 24.2665539 ], [ 70.9123885, 24.2669437 ], [ 70.9132305, 24.2669331 ], [ 70.9136624, 24.2676997 ], [ 70.9138187, 24.2687269 ], [ 70.9152296, 24.2692238 ], [ 70.9159423, 24.2699868 ], [ 70.9158102, 24.2705031 ], [ 70.9163734, 24.2706242 ], [ 70.9169423, 24.2711317 ], [ 70.9183532, 24.2716284 ], [ 70.9186378, 24.2718822 ], [ 70.9189185, 24.2718786 ], [ 70.9194759, 24.2716142 ], [ 70.9205964, 24.2714719 ], [ 70.9207401, 24.2717274 ], [ 70.9206119, 24.272501 ], [ 70.9164023, 24.2725541 ], [ 70.9168304, 24.2730633 ], [ 70.916979, 24.273576 ], [ 70.9130442, 24.2732393 ], [ 70.9124925, 24.27389 ], [ 70.9130597, 24.2742684 ], [ 70.9144706, 24.2747652 ], [ 70.9195242, 24.2748306 ], [ 70.9195165, 24.274316 ], [ 70.9200757, 24.2741799 ], [ 70.9209255, 24.2746838 ], [ 70.922048, 24.2746696 ], [ 70.9231765, 24.2750417 ], [ 70.9229151, 24.2763315 ], [ 70.9234764, 24.2763245 ], [ 70.9234842, 24.2768389 ], [ 70.9229228, 24.2768461 ], [ 70.923219, 24.2778716 ], [ 70.9234978, 24.277739 ], [ 70.9243398, 24.2777284 ], [ 70.9260313, 24.2782215 ], [ 70.9274346, 24.2782037 ], [ 70.9277193, 24.2784574 ], [ 70.9285611, 24.2784468 ], [ 70.9291186, 24.2781824 ], [ 70.92968, 24.2781752 ], [ 70.9299625, 24.2783007 ], [ 70.9299548, 24.2777862 ], [ 70.9305161, 24.277779 ], [ 70.9308083, 24.2785473 ], [ 70.931931, 24.278533 ], [ 70.9321999, 24.2777577 ], [ 70.9316386, 24.2777649 ], [ 70.9316348, 24.2775076 ], [ 70.9310714, 24.2773855 ], [ 70.9308818, 24.2770901 ], [ 70.9319096, 24.2771177 ], [ 70.932194, 24.2773714 ], [ 70.935291, 24.2779756 ], [ 70.9354074, 24.2764303 ], [ 70.9351228, 24.2761767 ], [ 70.935115, 24.275662 ], [ 70.9359413, 24.2746224 ], [ 70.9359376, 24.2743651 ], [ 70.9357956, 24.2742377 ], [ 70.9343965, 24.2745129 ], [ 70.9327106, 24.2744061 ], [ 70.9327028, 24.2738917 ], [ 70.9313016, 24.2740376 ], [ 70.9310247, 24.2742984 ], [ 70.9296216, 24.2743162 ], [ 70.9293371, 24.2740625 ], [ 70.9290565, 24.2740661 ], [ 70.9289175, 24.2741969 ], [ 70.9287854, 24.2747133 ], [ 70.9270918, 24.2740911 ], [ 70.9262345, 24.2730727 ], [ 70.9253848, 24.2725689 ], [ 70.9248215, 24.2724477 ], [ 70.9248293, 24.2729622 ], [ 70.9245486, 24.2729658 ], [ 70.924673, 24.271935 ], [ 70.9243885, 24.2716813 ], [ 70.9240962, 24.270913 ], [ 70.9228164, 24.2697709 ], [ 70.9222532, 24.2696498 ], [ 70.9221047, 24.269137 ], [ 70.9218202, 24.2688834 ], [ 70.921793, 24.2670824 ], [ 70.920521, 24.2664547 ], [ 70.9199578, 24.2663338 ], [ 70.9199501, 24.2658191 ], [ 70.9188238, 24.2655761 ] ] ], [ [ [ 68.90635, 23.995884092492563 ], [ 68.90635, 23.995884092492567 ], [ 68.9060339, 23.9957871 ], [ 68.9063134, 23.9968169 ], [ 68.90615, 23.996741733666546 ], [ 68.905193, 23.9963015 ], [ 68.9051927, 23.9968164 ], [ 68.9046323, 23.996816 ], [ 68.904913, 23.9960439 ], [ 68.9018311, 23.9957844 ], [ 68.9018319, 23.9947547 ], [ 68.9015516, 23.9947546 ], [ 68.9014093, 23.9970713 ], [ 68.900709, 23.9974565 ], [ 68.8998684, 23.9974559 ], [ 68.8997279, 23.9973276 ], [ 68.8995886, 23.9968128 ], [ 68.8984681, 23.9965546 ], [ 68.8984682, 23.9962972 ], [ 68.8990286, 23.9962976 ], [ 68.8986083, 23.9957823 ], [ 68.898469, 23.9952675 ], [ 68.8979086, 23.9952671 ], [ 68.8981883, 23.9960396 ], [ 68.8976278, 23.9961673 ], [ 68.8973475, 23.9964246 ], [ 68.8965066, 23.9965533 ], [ 68.8960851, 23.9975826 ], [ 68.8953845, 23.9982252 ], [ 68.8939835, 23.9982242 ], [ 68.8935633, 23.9975809 ], [ 68.8935635, 23.9973234 ], [ 68.8939848, 23.996809 ], [ 68.8928638, 23.9968082 ], [ 68.8928644, 23.9962934 ], [ 68.8924433, 23.9965504 ], [ 68.8921623, 23.9975799 ], [ 68.8920226, 23.9977081 ], [ 68.8914622, 23.9977077 ], [ 68.8913218, 23.9975793 ], [ 68.8911825, 23.9970643 ], [ 68.8900621, 23.9966771 ], [ 68.8895017, 23.9966767 ], [ 68.8892212, 23.9969339 ], [ 68.8886607, 23.9970626 ], [ 68.8885206, 23.9965476 ], [ 68.8879608, 23.995775 ], [ 68.8875414, 23.9953881 ], [ 68.8861405, 23.9952588 ], [ 68.8860003, 23.9947438 ], [ 68.8857204, 23.9944862 ], [ 68.8855813, 23.9939713 ], [ 68.8838999, 23.9942274 ], [ 68.8838992, 23.9949997 ], [ 68.8830587, 23.9949991 ], [ 68.8830591, 23.9944843 ], [ 68.8824987, 23.9944837 ], [ 68.8824983, 23.9949986 ], [ 68.8813775, 23.9948685 ], [ 68.8809572, 23.9944826 ], [ 68.8805382, 23.9935809 ], [ 68.879978, 23.9934522 ], [ 68.8801171, 23.9939672 ], [ 68.8798366, 23.9942242 ], [ 68.8796966, 23.9947391 ], [ 68.8788561, 23.9946092 ], [ 68.8785758, 23.9947381 ], [ 68.8785766, 23.9939659 ], [ 68.8780162, 23.9938362 ], [ 68.8777365, 23.9934505 ], [ 68.8782968, 23.9934508 ], [ 68.877737, 23.9928063 ], [ 68.8763362, 23.9926771 ], [ 68.8761961, 23.992162 ], [ 68.8746563, 23.9913885 ], [ 68.8746558, 23.9919033 ], [ 68.8738156, 23.991516 ], [ 68.8733955, 23.9908727 ], [ 68.8729759, 23.9906149 ], [ 68.8729754, 23.9911297 ], [ 68.8726953, 23.9911295 ], [ 68.8724176, 23.988555 ], [ 68.8710167, 23.9884248 ], [ 68.8708763, 23.9882964 ], [ 68.8707372, 23.9877814 ], [ 68.8701768, 23.9877808 ], [ 68.8701765, 23.9882957 ], [ 68.8696164, 23.9879088 ], [ 68.8687763, 23.9873932 ], [ 68.8679359, 23.9873924 ], [ 68.8676556, 23.9875213 ], [ 68.8675155, 23.9870063 ], [ 68.867376, 23.986877 ], [ 68.8668157, 23.9870057 ], [ 68.8668164, 23.9862335 ], [ 68.866256, 23.9862331 ], [ 68.8661162, 23.9854607 ], [ 68.8659767, 23.9853314 ], [ 68.8654165, 23.9852027 ], [ 68.8651371, 23.9844301 ], [ 68.865978, 23.9841734 ], [ 68.865838, 23.9836586 ], [ 68.8661184, 23.9834013 ], [ 68.8662598, 23.9826291 ], [ 68.8656994, 23.9826287 ], [ 68.8656989, 23.9831435 ], [ 68.8654188, 23.9830141 ], [ 68.8645783, 23.9830133 ], [ 68.8642978, 23.9832705 ], [ 68.8634573, 23.9832698 ], [ 68.8631774, 23.9830122 ], [ 68.8626172, 23.9828833 ], [ 68.8626168, 23.9833981 ], [ 68.8620564, 23.9833977 ], [ 68.862057, 23.9828829 ], [ 68.8617767, 23.9828825 ], [ 68.8617762, 23.9833974 ], [ 68.861216, 23.983397 ], [ 68.8612165, 23.9828821 ], [ 68.8603757, 23.9831388 ], [ 68.8603762, 23.982624 ], [ 68.8598159, 23.9826234 ], [ 68.8596758, 23.9821084 ], [ 68.8595365, 23.9819791 ], [ 68.8589761, 23.9819787 ], [ 68.8585558, 23.9815926 ], [ 68.8584167, 23.9810776 ], [ 68.8578565, 23.981077 ], [ 68.8575777, 23.9797897 ], [ 68.8570169, 23.9801749 ], [ 68.8558962, 23.9801738 ], [ 68.8550553, 23.9805595 ], [ 68.8550563, 23.9797873 ], [ 68.8558967, 23.9797882 ], [ 68.8558969, 23.9795308 ], [ 68.8553367, 23.9795302 ], [ 68.8554768, 23.9790156 ], [ 68.8544974, 23.9784998 ], [ 68.8543556, 23.9795293 ], [ 68.854216, 23.9796574 ], [ 68.8533753, 23.9797858 ], [ 68.8539364, 23.9790141 ], [ 68.8528153, 23.9793987 ], [ 68.8522551, 23.9793981 ], [ 68.8519746, 23.9796553 ], [ 68.8491729, 23.9797816 ], [ 68.8491734, 23.9792668 ], [ 68.8483328, 23.9793943 ], [ 68.847773, 23.979008 ], [ 68.8477724, 23.9795229 ], [ 68.847212, 23.9795223 ], [ 68.8472126, 23.9790075 ], [ 68.8469325, 23.9790073 ], [ 68.8467913, 23.9795219 ], [ 68.8465108, 23.979779 ], [ 68.8463706, 23.9802938 ], [ 68.8444099, 23.9800343 ], [ 68.8444091, 23.9805491 ], [ 68.844207400000016, 23.980595106175258 ], [ 68.8438488, 23.9806769 ], [ 68.8435683, 23.9809339 ], [ 68.843288, 23.9809337 ], [ 68.8431476, 23.9808054 ], [ 68.8430086, 23.9802904 ], [ 68.8427285, 23.98029 ], [ 68.8427276, 23.9810623 ], [ 68.842167, 23.98119 ], [ 68.8418866, 23.9814471 ], [ 68.8416065, 23.9814469 ], [ 68.8413265, 23.9811891 ], [ 68.8410464, 23.9811889 ], [ 68.8404855, 23.9817032 ], [ 68.839645, 23.9817022 ], [ 68.8393645, 23.9819593 ], [ 68.8390843, 23.9819591 ], [ 68.8388045, 23.9817013 ], [ 68.8379642, 23.9815722 ], [ 68.8378246, 23.9807997 ], [ 68.8376851, 23.9806705 ], [ 68.8368448, 23.9805414 ], [ 68.8368442, 23.9810562 ], [ 68.8362838, 23.9810556 ], [ 68.8365649, 23.9802836 ], [ 68.8360047, 23.980283 ], [ 68.8358635, 23.9807977 ], [ 68.835443, 23.9813121 ], [ 68.8360034, 23.9813127 ], [ 68.8357212, 23.982857 ], [ 68.8348809, 23.9827268 ], [ 68.8347405, 23.9825985 ], [ 68.8346015, 23.9820834 ], [ 68.8334806, 23.9823397 ], [ 68.8334812, 23.9818249 ], [ 68.832921, 23.981695 ], [ 68.8326412, 23.9814372 ], [ 68.832361, 23.981437 ], [ 68.8303989, 23.982207 ], [ 68.8289985, 23.9819481 ], [ 68.8281578, 23.9820764 ], [ 68.8284369, 23.9828489 ], [ 68.8275966, 23.9825905 ], [ 68.8275961, 23.9831054 ], [ 68.8281563, 23.9831061 ], [ 68.8284358, 23.9836211 ], [ 68.8267548, 23.9836192 ], [ 68.8267541, 23.9841341 ], [ 68.8259134, 23.9842615 ], [ 68.825773, 23.9841329 ], [ 68.8256341, 23.9836181 ], [ 68.825354, 23.9836177 ], [ 68.825353, 23.98439 ], [ 68.8250729, 23.9842605 ], [ 68.8242324, 23.9842596 ], [ 68.8238125, 23.983616 ], [ 68.8236739, 23.9828436 ], [ 68.8231136, 23.9829712 ], [ 68.8228331, 23.9832282 ], [ 68.8222725, 23.9833567 ], [ 68.8222721, 23.9836141 ], [ 68.8231126, 23.9836151 ], [ 68.8236719, 23.9843881 ], [ 68.8219911, 23.9842569 ], [ 68.8211499, 23.9847708 ], [ 68.8208698, 23.9847704 ], [ 68.8197503, 23.9838687 ], [ 68.8197492, 23.984641 ], [ 68.819189, 23.9845111 ], [ 68.8190486, 23.9843826 ], [ 68.8189098, 23.9838676 ], [ 68.8186295, 23.9838674 ], [ 68.8186288, 23.9843822 ], [ 68.8180686, 23.9843815 ], [ 68.8180678, 23.9848963 ], [ 68.8175076, 23.9847665 ], [ 68.8173672, 23.9846381 ], [ 68.8172283, 23.9841231 ], [ 68.8144267, 23.9841197 ], [ 68.8145666, 23.9838625 ], [ 68.8145677, 23.9830902 ], [ 68.8141483, 23.9828322 ], [ 68.8141476, 23.9833471 ], [ 68.8135872, 23.9833465 ], [ 68.813866, 23.9843766 ], [ 68.8133056, 23.9843758 ], [ 68.813446, 23.9838612 ], [ 68.8133065, 23.9837319 ], [ 68.8127463, 23.9836028 ], [ 68.8133079, 23.9828313 ], [ 68.8127475, 23.9828305 ], [ 68.8127482, 23.9823157 ], [ 68.8124681, 23.9823153 ], [ 68.812326, 23.983345 ], [ 68.8119047, 23.9843741 ], [ 68.8110641, 23.9845013 ], [ 68.810224, 23.9842429 ], [ 68.8099442, 23.9839851 ], [ 68.808824, 23.9835981 ], [ 68.8088233, 23.9841129 ], [ 68.8082629, 23.9841122 ], [ 68.8081208, 23.9851416 ], [ 68.8079811, 23.9852698 ], [ 68.8074209, 23.9851407 ], [ 68.8074194, 23.9861704 ], [ 68.8065789, 23.9861694 ], [ 68.8064398, 23.9851396 ], [ 68.8063005, 23.9850103 ], [ 68.8051797, 23.9850088 ], [ 68.8049, 23.984751 ], [ 68.8043398, 23.9846221 ], [ 68.8042, 23.9841071 ], [ 68.8040607, 23.9839778 ], [ 68.8032204, 23.9838483 ], [ 68.8030805, 23.9833333 ], [ 68.802941, 23.983204 ], [ 68.8018201, 23.9834599 ], [ 68.8015394, 23.983717 ], [ 68.8012593, 23.9837166 ], [ 68.8009796, 23.983459 ], [ 68.8001393, 23.9833295 ], [ 68.7999994, 23.9828145 ], [ 68.7995802, 23.9824274 ], [ 68.7990202, 23.9822983 ], [ 68.7990193, 23.9828132 ], [ 68.7987392, 23.9828128 ], [ 68.7987399, 23.9822979 ], [ 68.7983188, 23.9825548 ], [ 68.7981784, 23.9830696 ], [ 68.7976184, 23.9829396 ], [ 68.7970588, 23.982424 ], [ 68.7964986, 23.9822951 ], [ 68.7969176, 23.9828105 ], [ 68.7970558, 23.9843552 ], [ 68.7964952, 23.9844826 ], [ 68.7962147, 23.9847396 ], [ 68.7948138, 23.9847379 ], [ 68.7945334, 23.9848666 ], [ 68.7945343, 23.9843518 ], [ 68.7953748, 23.9843529 ], [ 68.7950953, 23.9839661 ], [ 68.7943948, 23.9835794 ], [ 68.7941155, 23.9830641 ], [ 68.7932763, 23.9822908 ], [ 68.792577, 23.9819033 ], [ 68.7920166, 23.9819026 ], [ 68.7913151, 23.9822881 ], [ 68.7911746, 23.9828028 ], [ 68.7917348, 23.9829318 ], [ 68.7922945, 23.9833191 ], [ 68.7921548, 23.9828041 ], [ 68.7917358, 23.9822887 ], [ 68.7925761, 23.9824181 ], [ 68.7928566, 23.9822902 ], [ 68.793835, 23.9833212 ], [ 68.7938341, 23.983836 ], [ 68.7931327, 23.9847357 ], [ 68.7920113, 23.985249 ], [ 68.791451, 23.9852482 ], [ 68.7911709, 23.9851195 ], [ 68.7914498, 23.9858922 ], [ 68.789769, 23.9857606 ], [ 68.7892083, 23.9860173 ], [ 68.7880875, 23.9860158 ], [ 68.7878078, 23.985758 ], [ 68.7872474, 23.9857572 ], [ 68.7861276, 23.9852409 ], [ 68.7847273, 23.9849814 ], [ 68.7833262, 23.9851086 ], [ 68.7831839, 23.986138 ], [ 68.7830441, 23.9862662 ], [ 68.7822038, 23.9861367 ], [ 68.7820624, 23.9866514 ], [ 68.7819225, 23.9867795 ], [ 68.781362, 23.9869078 ], [ 68.7813602, 23.9879375 ], [ 68.7802393, 23.9880641 ], [ 68.7799596, 23.9878063 ], [ 68.779399, 23.9879347 ], [ 68.7794003, 23.9871624 ], [ 68.7782794, 23.9872891 ], [ 68.7779987, 23.9875461 ], [ 68.7763179, 23.9874153 ], [ 68.7763187, 23.9869005 ], [ 68.7749174, 23.9871558 ], [ 68.7749165, 23.9876706 ], [ 68.775197, 23.9875419 ], [ 68.7760373, 23.9876723 ], [ 68.7760363, 23.9881872 ], [ 68.7743557, 23.9879273 ], [ 68.774216, 23.9874123 ], [ 68.7740768, 23.9872828 ], [ 68.7735166, 23.9871537 ], [ 68.7735175, 23.9866389 ], [ 68.7732372, 23.9866385 ], [ 68.7732365, 23.9871534 ], [ 68.7726763, 23.9870235 ], [ 68.7725355, 23.9871524 ], [ 68.7723945, 23.9879245 ], [ 68.7721144, 23.9879241 ], [ 68.7721153, 23.9874093 ], [ 68.7715549, 23.9874083 ], [ 68.7716937, 23.9879233 ], [ 68.7715536, 23.9881806 ], [ 68.7721138, 23.9881815 ], [ 68.7721134, 23.9884389 ], [ 68.7712729, 23.9884376 ], [ 68.7719715, 23.9892108 ], [ 68.7718282, 23.99127 ], [ 68.7709881, 23.9910114 ], [ 68.7707061, 23.9920407 ], [ 68.7701457, 23.9920398 ], [ 68.7702845, 23.9925548 ], [ 68.7701446, 23.9926829 ], [ 68.7690238, 23.9926812 ], [ 68.767622, 23.993194 ], [ 68.7670618, 23.9930647 ], [ 68.7666373, 23.9951235 ], [ 68.7667766, 23.9958959 ], [ 68.7662162, 23.9958952 ], [ 68.7662153, 23.99641 ], [ 68.7650943, 23.9965364 ], [ 68.7648137, 23.9967935 ], [ 68.762852, 23.9969196 ], [ 68.7625742, 23.9956321 ], [ 68.7631346, 23.995633 ], [ 68.763135, 23.9953756 ], [ 68.7622949, 23.9951169 ], [ 68.7622939, 23.9956317 ], [ 68.7617335, 23.9956308 ], [ 68.7617345, 23.9951159 ], [ 68.7611737, 23.9953726 ], [ 68.761175, 23.9946003 ], [ 68.7606149, 23.9944703 ], [ 68.7604746, 23.9943418 ], [ 68.7603368, 23.9933119 ], [ 68.7599156, 23.9935686 ], [ 68.7596345, 23.994083 ], [ 68.7596339, 23.9943405 ], [ 68.7599137, 23.9945983 ], [ 68.7597727, 23.9953703 ], [ 68.7589328, 23.9949825 ], [ 68.7586527, 23.9949819 ], [ 68.7582312, 23.9953679 ], [ 68.75809, 23.9961399 ], [ 68.75753, 23.9960099 ], [ 68.7569704, 23.9956234 ], [ 68.7566882, 23.9966525 ], [ 68.7558473, 23.9967795 ], [ 68.7555674, 23.9966508 ], [ 68.7555665, 23.9971656 ], [ 68.7552862, 23.9971653 ], [ 68.7552877, 23.996393 ], [ 68.7550072, 23.9965208 ], [ 68.7544468, 23.9965198 ], [ 68.7540273, 23.9958761 ], [ 68.7536079, 23.9956179 ], [ 68.7538863, 23.9966481 ], [ 68.7522045, 23.9969027 ], [ 68.7522061, 23.9961305 ], [ 68.7515041, 23.9966442 ], [ 68.7513635, 23.9971588 ], [ 68.7508031, 23.9971579 ], [ 68.7508025, 23.9974153 ], [ 68.7516426, 23.9976742 ], [ 68.7512208, 23.9981883 ], [ 68.7513599, 23.9989608 ], [ 68.75108, 23.9988311 ], [ 68.7482773, 23.9992133 ], [ 68.7482767, 23.9994707 ], [ 68.749678, 23.9993437 ], [ 68.7505185, 23.9994743 ], [ 68.7507971, 24.0002469 ], [ 68.7510773, 24.0002475 ], [ 68.751218, 23.9997328 ], [ 68.7510789, 23.9994752 ], [ 68.7521994, 23.9996052 ], [ 68.752479, 23.999863 ], [ 68.7530392, 23.9999933 ], [ 68.753321, 23.9992214 ], [ 68.7536011, 23.9992218 ], [ 68.7538798, 23.9999946 ], [ 68.7547205, 23.9999959 ], [ 68.7547224, 23.9989662 ], [ 68.7555623, 23.9993531 ], [ 68.7569632, 23.9993554 ], [ 68.7572429, 23.9996134 ], [ 68.7597638, 24.0001322 ], [ 68.7600445, 23.9998751 ], [ 68.7603247, 23.9998755 ], [ 68.7606045, 24.0001335 ], [ 68.7611647, 24.0002635 ], [ 68.7608859, 23.9994907 ], [ 68.761726, 23.9997494 ], [ 68.7617269, 23.9992346 ], [ 68.7620068, 23.9993633 ], [ 68.7636882, 23.999366 ], [ 68.7664901, 23.9993703 ], [ 68.7670501, 23.9996285 ], [ 68.7673302, 23.9996289 ], [ 68.7676109, 23.999372 ], [ 68.7695721, 23.9995041 ], [ 68.7691499, 24.0002756 ], [ 68.7692892, 24.0010481 ], [ 68.7695693, 24.0010486 ], [ 68.7695702, 24.0005338 ], [ 68.7704103, 24.0007923 ], [ 68.7701312, 24.0002771 ], [ 68.7709715, 24.0004066 ], [ 68.7732111, 24.0015688 ], [ 68.7733512, 24.0013115 ], [ 68.7732125, 24.0007965 ], [ 68.7743342, 24.0002834 ], [ 68.7740526, 24.0010552 ], [ 68.7746131, 24.001056 ], [ 68.7746139, 24.0005412 ], [ 68.7751743, 24.0005421 ], [ 68.7747545, 24.0000265 ], [ 68.7747549, 23.9997691 ], [ 68.7750356, 23.9995123 ], [ 68.7751775, 23.9987402 ], [ 68.7760185, 23.9984839 ], [ 68.7760199, 23.9977116 ], [ 68.7774211, 23.9975846 ], [ 68.7782631, 23.9968135 ], [ 68.7788231, 23.9969436 ], [ 68.7788241, 23.9964287 ], [ 68.7793844, 23.9964295 ], [ 68.7793854, 23.9959146 ], [ 68.7796653, 23.9960433 ], [ 68.7807859, 23.9961741 ], [ 68.7805075, 23.9951439 ], [ 68.7813485, 23.9948878 ], [ 68.7814873, 23.9954028 ], [ 68.781767, 23.9956606 ], [ 68.781626, 23.9964327 ], [ 68.7821862, 23.9965618 ], [ 68.7824659, 23.9968196 ], [ 68.7830261, 23.9969494 ], [ 68.783027, 23.9964346 ], [ 68.7838675, 23.9964359 ], [ 68.7830248, 23.9977217 ], [ 68.7835852, 23.9977226 ], [ 68.7835861, 23.9972078 ], [ 68.7841461, 23.9974659 ], [ 68.7841469, 23.9969511 ], [ 68.7847069, 23.9972093 ], [ 68.7847078, 23.9966945 ], [ 68.7852676, 23.9969526 ], [ 68.7852686, 23.9964378 ], [ 68.7858288, 23.9965669 ], [ 68.7863897, 23.9961819 ], [ 68.7858269, 23.9977256 ], [ 68.7863873, 23.9977264 ], [ 68.7863886, 23.9969541 ], [ 68.7869495, 23.9965684 ], [ 68.7872296, 23.9965688 ], [ 68.7877893, 23.9970844 ], [ 68.7886296, 23.9972148 ], [ 68.7884895, 23.9969572 ], [ 68.7886313, 23.9961851 ], [ 68.7900327, 23.9959296 ], [ 68.7893306, 23.9967009 ], [ 68.7891901, 23.9972155 ], [ 68.7903102, 23.9976028 ], [ 68.7914309, 23.9976043 ], [ 68.7928325, 23.9972204 ], [ 68.7932533, 23.9967062 ], [ 68.7931149, 23.9959337 ], [ 68.7939554, 23.9959349 ], [ 68.793677, 23.9949048 ], [ 68.7939569, 23.9950335 ], [ 68.796759, 23.994909 ], [ 68.7967598, 23.9943941 ], [ 68.7981606, 23.9945242 ], [ 68.7984409, 23.9943964 ], [ 68.7984402, 23.9949112 ], [ 68.8006804, 23.9958147 ], [ 68.8018014, 23.9956878 ], [ 68.8018021, 23.995173 ], [ 68.8032026, 23.9954321 ], [ 68.8032035, 23.9949173 ], [ 68.8037639, 23.994918 ], [ 68.8037647, 23.9944032 ], [ 68.8046048, 23.9946618 ], [ 68.8048862, 23.9938899 ], [ 68.8051663, 23.9938903 ], [ 68.8051656, 23.9944051 ], [ 68.8062859, 23.9946638 ], [ 68.8061461, 23.9941488 ], [ 68.8062882, 23.9931193 ], [ 68.8065685, 23.9931197 ], [ 68.8065677, 23.9936345 ], [ 68.8082485, 23.993894 ], [ 68.8082497, 23.9931218 ], [ 68.8088095, 23.9935083 ], [ 68.8093697, 23.9936381 ], [ 68.8093693, 23.9938956 ], [ 68.8088089, 23.9938948 ], [ 68.8088085, 23.9941522 ], [ 68.8093689, 23.994153 ], [ 68.8092275, 23.9946676 ], [ 68.8093663, 23.9959549 ], [ 68.8104874, 23.9956988 ], [ 68.8100673, 23.9951834 ], [ 68.8099293, 23.9941535 ], [ 68.81077, 23.9940254 ], [ 68.8121718, 23.9933841 ], [ 68.8124509, 23.9941567 ], [ 68.8130113, 23.9941573 ], [ 68.8127329, 23.99287 ], [ 68.8132933, 23.9928706 ], [ 68.8127339, 23.9922259 ], [ 68.8121737, 23.992097 ], [ 68.8121741, 23.9918396 ], [ 68.812735, 23.9914537 ], [ 68.8135757, 23.9914548 ], [ 68.8146959, 23.9918426 ], [ 68.8149771, 23.9910708 ], [ 68.8155379, 23.9908139 ], [ 68.8155371, 23.9913287 ], [ 68.8166575, 23.9915877 ], [ 68.8166586, 23.9908154 ], [ 68.8169387, 23.9908156 ], [ 68.8169376, 23.9915879 ], [ 68.8174978, 23.9917168 ], [ 68.8177777, 23.9919746 ], [ 68.8183379, 23.9921044 ], [ 68.8177756, 23.9933909 ], [ 68.8183356, 23.9936489 ], [ 68.8183364, 23.9931341 ], [ 68.8188972, 23.9928774 ], [ 68.8188964, 23.9933922 ], [ 68.820858, 23.9931371 ], [ 68.8202956, 23.9946808 ], [ 68.8208558, 23.9948099 ], [ 68.8211357, 23.9950675 ], [ 68.8219758, 23.9953259 ], [ 68.8230967, 23.9951991 ], [ 68.8228174, 23.9946839 ], [ 68.823938, 23.9948133 ], [ 68.8242185, 23.9945563 ], [ 68.8247788, 23.9945569 ], [ 68.8250588, 23.9948147 ], [ 68.8264592, 23.9950738 ], [ 68.8275796, 23.9954616 ], [ 68.827581, 23.9944319 ], [ 68.8278611, 23.9945605 ], [ 68.8303819, 23.9950781 ], [ 68.8306618, 23.9953357 ], [ 68.8315023, 23.995466 ], [ 68.8312228, 23.9949507 ], [ 68.8326235, 23.9952097 ], [ 68.8326227, 23.9957245 ], [ 68.834024, 23.9955969 ], [ 68.8343037, 23.9958547 ], [ 68.8348639, 23.9959844 ], [ 68.8348633, 23.9964992 ], [ 68.8351436, 23.9964996 ], [ 68.8352835, 23.9962424 ], [ 68.8351445, 23.9957273 ], [ 68.8368253, 23.9959865 ], [ 68.8368263, 23.9952142 ], [ 68.8373863, 23.9956005 ], [ 68.838787, 23.9957311 ], [ 68.8387877, 23.9952163 ], [ 68.8401882, 23.9956035 ], [ 68.8404683, 23.9956037 ], [ 68.840749, 23.9953467 ], [ 68.8410291, 23.9953469 ], [ 68.841869, 23.9958627 ], [ 68.8424292, 23.9959923 ], [ 68.8425683, 23.9965073 ], [ 68.8431281, 23.9970227 ], [ 68.8432674, 23.9980526 ], [ 68.844207400000016, 23.998399117174898 ], [ 68.844207400000016, 23.998399117174895 ], [ 68.8446677, 23.9985688 ], [ 68.8446641, 24.001658 ], [ 68.8452243, 24.0017867 ], [ 68.846064, 24.0025599 ], [ 68.8469047, 24.0025606 ], [ 68.8477456, 24.002304 ], [ 68.848026, 24.0020469 ], [ 68.8488669, 24.0019195 ], [ 68.8485855, 24.0029488 ], [ 68.8497061, 24.0032074 ], [ 68.8494267, 24.0024349 ], [ 68.8499871, 24.0024355 ], [ 68.8502685, 24.001406 ], [ 68.8497081, 24.0014055 ], [ 68.8499897, 24.0001188 ], [ 68.8505499, 24.0002475 ], [ 68.8508298, 24.0005051 ], [ 68.8513904, 24.0005056 ], [ 68.8516703, 24.0006351 ], [ 68.8516713, 23.9998628 ], [ 68.8508304, 24.0001195 ], [ 68.850831, 23.9996047 ], [ 68.8494303, 23.9993459 ], [ 68.8492906, 23.9985735 ], [ 68.8484505, 23.9980577 ], [ 68.8484511, 23.9975429 ], [ 68.8483118, 23.9972855 ], [ 68.8488724, 23.9971567 ], [ 68.8491528, 23.9968997 ], [ 68.8505539, 23.996901 ], [ 68.853075, 23.9975474 ], [ 68.8530755, 23.9970326 ], [ 68.8541967, 23.996647 ], [ 68.8547576, 23.9961327 ], [ 68.8555985, 23.9960054 ], [ 68.8555991, 23.9954905 ], [ 68.8558792, 23.995619 ], [ 68.8564396, 23.9956196 ], [ 68.8578408, 23.9952352 ], [ 68.8582598, 23.9960078 ], [ 68.8582591, 23.9967801 ], [ 68.8578387, 23.9971654 ], [ 68.8575586, 23.9971651 ], [ 68.8569988, 23.9966497 ], [ 68.8550372, 23.996777 ], [ 68.8548958, 23.9975491 ], [ 68.855036, 23.9978067 ], [ 68.8539151, 23.9979339 ], [ 68.8533539, 23.9985775 ], [ 68.8539143, 23.998578 ], [ 68.8539141, 23.9988354 ], [ 68.8533538, 23.9988349 ], [ 68.8533534, 23.9990923 ], [ 68.8539136, 23.9993503 ], [ 68.8543339, 23.9988358 ], [ 68.8541948, 23.9983208 ], [ 68.8544753, 23.9981919 ], [ 68.8553158, 23.9981927 ], [ 68.8558767, 23.9976784 ], [ 68.857278, 23.9975514 ], [ 68.8568565, 23.9980658 ], [ 68.8567164, 23.9985807 ], [ 68.8561561, 23.9985801 ], [ 68.8561557, 23.9988375 ], [ 68.856996, 23.9990957 ], [ 68.8569965, 23.9985809 ], [ 68.8583976, 23.9985822 ], [ 68.8581167, 23.9990966 ], [ 68.8586773, 23.9990972 ], [ 68.8586764, 23.9998695 ], [ 68.8592368, 23.99987 ], [ 68.8592373, 23.9993552 ], [ 68.8614781, 24.0001295 ], [ 68.8611988, 23.9993569 ], [ 68.8625998, 23.9993582 ], [ 68.8628795, 23.9998732 ], [ 68.8617584, 24.0001297 ], [ 68.861758, 24.0003871 ], [ 68.8634394, 24.0003886 ], [ 68.8634399, 23.9998738 ], [ 68.8645607, 23.9998748 ], [ 68.8645601, 24.0003896 ], [ 68.8656809, 24.0003905 ], [ 68.8656805, 24.0009056 ], [ 68.8662405, 24.0012917 ], [ 68.8673613, 24.0012926 ], [ 68.8676412, 24.0015502 ], [ 68.8682018, 24.0014225 ], [ 68.8683411, 24.0016801 ], [ 68.8682005, 24.0027096 ], [ 68.8696017, 24.0024533 ], [ 68.8696013, 24.0029681 ], [ 68.8718425, 24.003485 ], [ 68.8725433, 24.0027133 ], [ 68.8725437, 24.0021985 ], [ 68.8724042, 24.0020692 ], [ 68.871844, 24.0019403 ], [ 68.8718442, 24.0016829 ], [ 68.8726849, 24.0016837 ], [ 68.8725444, 24.0014263 ], [ 68.8729678, 23.9988523 ], [ 68.8738083, 23.9991104 ], [ 68.8738087, 23.9985956 ], [ 68.8766098, 23.9994985 ], [ 68.8774505, 23.999499 ], [ 68.8791322, 23.9989855 ], [ 68.8827746, 23.9991176 ], [ 68.8827741, 23.9998899 ], [ 68.8838948, 23.9998906 ], [ 68.884456, 23.9991188 ], [ 68.8838956, 23.9991184 ], [ 68.8838958, 23.998861 ], [ 68.885297, 23.9986047 ], [ 68.8852965, 23.9991195 ], [ 68.886417, 23.999506 ], [ 68.886977, 23.9998929 ], [ 68.8869774, 23.9993781 ], [ 68.8875382, 23.9989919 ], [ 68.8878185, 23.9989921 ], [ 68.8880984, 23.9992497 ], [ 68.8892191, 23.9992507 ], [ 68.89118, 24.0000243 ], [ 68.8928612, 24.0001547 ], [ 68.8928604, 24.0009269 ], [ 68.8937011, 24.0009275 ], [ 68.8938406, 24.0011849 ], [ 68.8937005, 24.0016997 ], [ 68.8945412, 24.0017003 ], [ 68.8948204, 24.0029876 ], [ 68.8953807, 24.0028589 ], [ 68.896221, 24.0033743 ], [ 68.8976221, 24.0033752 ], [ 68.8981823, 24.003633 ], [ 68.8998636, 24.0035058 ], [ 68.899864, 24.002991 ], [ 68.9004246, 24.0029914 ], [ 68.9001432, 24.0045357 ], [ 68.9003269, 24.0046234 ], [ 68.900702, 24.0065954 ], [ 68.9009821, 24.0067237 ], [ 68.9029436, 24.0067251 ], [ 68.9046247, 24.0071127 ], [ 68.904624, 24.0081424 ], [ 68.9057449, 24.0078857 ], [ 68.9060258, 24.0071136 ], [ 68.9051849, 24.0073705 ], [ 68.9051853, 24.0068557 ], [ 68.9035041, 24.006468 ], [ 68.9029441, 24.0059528 ], [ 68.9018234, 24.0058239 ], [ 68.9018237, 24.0053091 ], [ 68.9012636, 24.0051794 ], [ 68.9011229, 24.0050511 ], [ 68.9009838, 24.0045363 ], [ 68.9005187, 24.0044474 ], [ 68.9004234, 24.0042785 ], [ 68.900984, 24.0041496 ], [ 68.9015442, 24.0044074 ], [ 68.9032257, 24.0042802 ], [ 68.9035055, 24.0047952 ], [ 68.9029451, 24.0047948 ], [ 68.9029447, 24.0053096 ], [ 68.9032248, 24.0054382 ], [ 68.90615, 24.005750346609563 ], [ 68.9068674, 24.0058269 ], [ 68.906867, 24.0063418 ], [ 68.9077075, 24.0065998 ], [ 68.9077079, 24.0060849 ], [ 68.907988, 24.0062134 ], [ 68.9088287, 24.0062138 ], [ 68.9096697, 24.0055712 ], [ 68.9096693, 24.0060861 ], [ 68.9107897, 24.0068591 ], [ 68.9112099, 24.0063444 ], [ 68.9110706, 24.0058296 ], [ 68.9119114, 24.0055725 ], [ 68.9119118, 24.0050577 ], [ 68.9124724, 24.0049288 ], [ 68.9127525, 24.0050583 ], [ 68.9127529, 24.0045434 ], [ 68.9133134, 24.0042862 ], [ 68.9130326, 24.0050583 ], [ 68.9138733, 24.0051872 ], [ 68.9141535, 24.005059 ], [ 68.914153, 24.0058313 ], [ 68.9147134, 24.0058315 ], [ 68.9147139, 24.0050592 ], [ 68.9152743, 24.0050596 ], [ 68.9152739, 24.0058318 ], [ 68.9166752, 24.0055752 ], [ 68.9166754, 24.0050603 ], [ 68.9172359, 24.0050607 ], [ 68.9172361, 24.0045459 ], [ 68.9180768, 24.0046746 ], [ 68.9183571, 24.0044174 ], [ 68.9189177, 24.0042894 ], [ 68.918918, 24.0037744 ], [ 68.920039, 24.0036459 ], [ 68.9203193, 24.0033886 ], [ 68.9208799, 24.0032607 ], [ 68.9214397, 24.0040331 ], [ 68.9205992, 24.0039037 ], [ 68.9204586, 24.0040328 ], [ 68.9204582, 24.0045476 ], [ 68.9205986, 24.004805 ], [ 68.9200382, 24.0048048 ], [ 68.9200379, 24.0053197 ], [ 68.9194775, 24.0053193 ], [ 68.9197568, 24.0066066 ], [ 68.9203172, 24.0067351 ], [ 68.9205973, 24.0069927 ], [ 68.9211577, 24.0069929 ], [ 68.921438, 24.0068649 ], [ 68.9214378, 24.0073798 ], [ 68.9219982, 24.0073799 ], [ 68.9219986, 24.0068651 ], [ 68.9222786, 24.0068653 ], [ 68.9222783, 24.0076376 ], [ 68.923399, 24.0077663 ], [ 68.9236791, 24.0080239 ], [ 68.9256408, 24.0078967 ], [ 68.9256404, 24.0084115 ], [ 68.926201, 24.0082826 ], [ 68.9270413, 24.0090552 ], [ 68.9295631, 24.0093138 ], [ 68.9312446, 24.008929 ], [ 68.931245, 24.0084142 ], [ 68.9329263, 24.0084147 ], [ 68.9329267, 24.0076425 ], [ 68.9334873, 24.0073854 ], [ 68.933767, 24.0081577 ], [ 68.9346073, 24.0088012 ], [ 68.9348876, 24.0088014 ], [ 68.9354482, 24.0085442 ], [ 68.9362888, 24.0086736 ], [ 68.9365695, 24.0076442 ], [ 68.9371299, 24.0076444 ], [ 68.9372701, 24.0066147 ], [ 68.9371306, 24.0063573 ], [ 68.937691, 24.0062284 ], [ 68.9382514, 24.0066151 ], [ 68.9389522, 24.0050709 ], [ 68.9388131, 24.0037837 ], [ 68.9393735, 24.0040414 ], [ 68.9392333, 24.003269 ], [ 68.9396547, 24.0017247 ], [ 68.9390944, 24.0017245 ], [ 68.9389541, 24.0009522 ], [ 68.9392346, 24.0004374 ], [ 68.9392346, 24.00018 ], [ 68.9385349, 23.9997931 ], [ 68.9382548, 23.9994074 ], [ 68.9388152, 23.9994075 ], [ 68.9383949, 23.9983777 ], [ 68.9378349, 23.9976052 ], [ 68.9379759, 23.996833 ], [ 68.9385361, 23.9972189 ], [ 68.9390964, 23.9973484 ], [ 68.9392367, 23.9960613 ], [ 68.9397972, 23.9955467 ], [ 68.9399381, 23.9950318 ], [ 68.9393777, 23.9950316 ], [ 68.9396581, 23.994517 ], [ 68.9388175, 23.9945166 ], [ 68.9392376, 23.994002 ], [ 68.9392376, 23.9937445 ], [ 68.9386776, 23.9929721 ], [ 68.9386778, 23.9927147 ], [ 68.938678, 23.9921998 ], [ 68.9385387, 23.9916848 ], [ 68.9376982, 23.9915554 ], [ 68.9375576, 23.991427 ], [ 68.937558, 23.9909122 ], [ 68.9378383, 23.990655 ], [ 68.9379791, 23.9901401 ], [ 68.9374187, 23.9901399 ], [ 68.9378386, 23.9896253 ], [ 68.9379794, 23.9891104 ], [ 68.9365786, 23.9891099 ], [ 68.9364387, 23.9878226 ], [ 68.935739, 23.9871785 ], [ 68.9350382, 23.9867924 ], [ 68.9347583, 23.9862775 ], [ 68.9347587, 23.9855053 ], [ 68.9355997, 23.9844758 ], [ 68.9356001, 23.983961 ], [ 68.9354605, 23.9838319 ], [ 68.9346202, 23.9837032 ], [ 68.9347598, 23.9834459 ], [ 68.93476, 23.9829309 ], [ 68.9350403, 23.9826737 ], [ 68.9349016, 23.9808717 ], [ 68.9343414, 23.9807423 ], [ 68.933921, 23.9798415 ], [ 68.9332217, 23.9789398 ], [ 68.9323813, 23.9788113 ], [ 68.9330808, 23.9795837 ], [ 68.9330806, 23.9798411 ], [ 68.9323803, 23.9804841 ], [ 68.9318201, 23.9804837 ], [ 68.9315398, 23.9807412 ], [ 68.930139, 23.9806123 ], [ 68.9304198, 23.9793252 ], [ 68.9298596, 23.979325 ], [ 68.9298593, 23.9798398 ], [ 68.9292991, 23.9797103 ], [ 68.9288785, 23.9793244 ], [ 68.9288789, 23.9785522 ], [ 68.9290197, 23.9782949 ], [ 68.9284593, 23.9782945 ], [ 68.928599, 23.9780373 ], [ 68.9285996, 23.9770076 ], [ 68.9279003, 23.9761057 ], [ 68.9267797, 23.975977 ], [ 68.9264988, 23.9772639 ], [ 68.9262187, 23.9772639 ], [ 68.9262189, 23.9767491 ], [ 68.9259388, 23.9767489 ], [ 68.9259383, 23.9777786 ], [ 68.925098, 23.9775208 ], [ 68.9252361, 23.9798375 ], [ 68.9249558, 23.980095 ], [ 68.924816, 23.9806096 ], [ 68.9256563, 23.9808674 ], [ 68.9255153, 23.9816397 ], [ 68.925235, 23.9818969 ], [ 68.9252348, 23.9821543 ], [ 68.9255149, 23.9824119 ], [ 68.9256551, 23.9829269 ], [ 68.9250947, 23.9827975 ], [ 68.9249543, 23.9826691 ], [ 68.9248152, 23.9818967 ], [ 68.9245349, 23.9818967 ], [ 68.9245347, 23.9824115 ], [ 68.9236944, 23.9821535 ], [ 68.9234132, 23.9836981 ], [ 68.9239736, 23.9836982 ], [ 68.9239734, 23.9839557 ], [ 68.9228526, 23.9842125 ], [ 68.9228523, 23.9847273 ], [ 68.9206107, 23.9849836 ], [ 68.9204699, 23.9854985 ], [ 68.9199092, 23.9862703 ], [ 68.9199088, 23.9867852 ], [ 68.9186478, 23.9878143 ], [ 68.9186483, 23.987042 ], [ 68.918088, 23.9870417 ], [ 68.9180876, 23.9875565 ], [ 68.9175272, 23.9875563 ], [ 68.917527, 23.9878137 ], [ 68.9200484, 23.9880725 ], [ 68.9200484, 23.9883299 ], [ 68.9194879, 23.9884578 ], [ 68.9192076, 23.9888443 ], [ 68.9203282, 23.9891023 ], [ 68.920328, 23.9893597 ], [ 68.9194873, 23.9894875 ], [ 68.9193467, 23.9896166 ], [ 68.9193463, 23.9901314 ], [ 68.9192066, 23.9902596 ], [ 68.9186463, 23.9902594 ], [ 68.9183658, 23.9906457 ], [ 68.9192065, 23.9906463 ], [ 68.9190653, 23.9914183 ], [ 68.9189256, 23.9915467 ], [ 68.917805, 23.9914178 ], [ 68.9180855, 23.9909031 ], [ 68.917245, 23.9906451 ], [ 68.9171042, 23.99116 ], [ 68.9166841, 23.9915453 ], [ 68.9161237, 23.9916742 ], [ 68.916544, 23.9909022 ], [ 68.9164049, 23.9901299 ], [ 68.9158445, 23.9901295 ], [ 68.9159838, 23.9906446 ], [ 68.9158441, 23.9907727 ], [ 68.9147232, 23.9909012 ], [ 68.9145831, 23.9901288 ], [ 68.9144437, 23.9899997 ], [ 68.9133231, 23.9898708 ], [ 68.913602, 23.9916729 ], [ 68.9123412, 23.9908999 ], [ 68.9119222, 23.9898699 ], [ 68.9113616, 23.9899978 ], [ 68.9112212, 23.9898695 ], [ 68.910802, 23.9889679 ], [ 68.9102418, 23.9888392 ], [ 68.9101018, 23.988067 ], [ 68.9106623, 23.9875523 ], [ 68.9106627, 23.9870375 ], [ 68.9109432, 23.9867803 ], [ 68.9110846, 23.9854934 ], [ 68.9105242, 23.9856213 ], [ 68.9094036, 23.9854922 ], [ 68.9094032, 23.9860073 ], [ 68.9082823, 23.9862639 ], [ 68.9082817, 23.9870362 ], [ 68.9088421, 23.9870366 ], [ 68.9087007, 23.988066 ], [ 68.9095406, 23.9890963 ], [ 68.9095404, 23.9893537 ], [ 68.9094008, 23.9894818 ], [ 68.9085603, 23.9894815 ], [ 68.9080001, 23.9890953 ], [ 68.9084191, 23.9901254 ], [ 68.9084189, 23.9903828 ], [ 68.9079989, 23.9906398 ], [ 68.9079995, 23.9898676 ], [ 68.9065983, 23.9902524 ], [ 68.90635, 23.990651229108725 ], [ 68.906209508081176, 23.990876892688149 ], [ 68.90615, 23.990972476880568 ], [ 68.9060373, 23.9911535 ], [ 68.9063174, 23.9912821 ], [ 68.90635, 23.991278388579584 ], [ 68.9074382, 23.9911545 ], [ 68.9074386, 23.9906396 ], [ 68.9077188, 23.9906396 ], [ 68.9079984, 23.9914121 ], [ 68.9085588, 23.9914125 ], [ 68.9082781, 23.9921845 ], [ 68.9071573, 23.992184 ], [ 68.9071566, 23.9932136 ], [ 68.9074369, 23.9932138 ], [ 68.9075765, 23.9929564 ], [ 68.9077175, 23.9924418 ], [ 68.908558, 23.9926996 ], [ 68.9089772, 23.9934722 ], [ 68.9089766, 23.9942444 ], [ 68.9086962, 23.9945017 ], [ 68.9085561, 23.9952737 ], [ 68.9091167, 23.9950167 ], [ 68.9093962, 23.9960466 ], [ 68.9099566, 23.9960469 ], [ 68.9099562, 23.9965618 ], [ 68.9085554, 23.9964317 ], [ 68.9077145, 23.9968179 ], [ 68.9075744, 23.9960454 ], [ 68.9071549, 23.9955304 ], [ 68.9077153, 23.9955308 ], [ 68.9077156, 23.9950159 ], [ 68.9071554, 23.9948863 ], [ 68.9065952, 23.9945004 ], [ 68.9068744, 23.996045 ], [ 68.90635, 23.995884092492563 ] ] ], [ [ [ 70.219779290795415, 24.332508287666425 ], [ 70.2198038, 24.3325165 ], [ 70.2222556, 24.3332586 ], [ 70.2286446, 24.3335366 ], [ 70.2347556, 24.3335366 ], [ 70.2422556, 24.3318696 ], [ 70.2489226, 24.3313146 ], [ 70.2544776, 24.3321476 ], [ 70.254956376991274, 24.332306733898523 ], [ 70.2547858, 24.3319742 ], [ 70.2545145, 24.3314903 ], [ 70.2543942, 24.3311869 ], [ 70.2540231, 24.3307475 ], [ 70.2534146, 24.330406 ], [ 70.2530202, 24.3302508 ], [ 70.2524725, 24.3298742 ], [ 70.2521275, 24.3297733 ], [ 70.2515128, 24.3297145 ], [ 70.2511456, 24.3294086 ], [ 70.2507551, 24.3292097 ], [ 70.2504657, 24.3289056 ], [ 70.2501114, 24.3286669 ], [ 70.2498501, 24.3283961 ], [ 70.2494002, 24.3280586 ], [ 70.2489564, 24.327726 ], [ 70.248481, 24.3271084 ], [ 70.2471822, 24.3265632 ], [ 70.245842, 24.3266274 ], [ 70.2451297, 24.3264407 ], [ 70.2443251, 24.3264599 ], [ 70.2439307, 24.3264827 ], [ 70.2431829, 24.3265781 ], [ 70.2423004, 24.326522 ], [ 70.2415633, 24.3264873 ], [ 70.2408459, 24.3267208 ], [ 70.2400621, 24.3270112 ], [ 70.2393701, 24.3273838 ], [ 70.2385656, 24.3275083 ], [ 70.2378818, 24.3276215 ], [ 70.2357114, 24.3261231 ], [ 70.2336222, 24.3255699 ], [ 70.231937, 24.3255837 ], [ 70.2315973, 24.3256413 ], [ 70.228637982812501, 24.326440806411863 ], [ 70.2280517, 24.3265992 ], [ 70.2268675, 24.3268389 ], [ 70.2260594, 24.3270218 ], [ 70.2248285, 24.3273719 ], [ 70.2240892, 24.3273204 ], [ 70.2239533, 24.3278363 ], [ 70.2232591, 24.3286139 ], [ 70.2218573, 24.3288827 ], [ 70.2214551, 24.3309448 ], [ 70.2208983, 24.331464 ], [ 70.2207634, 24.33198 ], [ 70.2202028, 24.3321127 ], [ 70.219779290795415, 24.332508287666425 ] ] ], [ [ [ 70.575934806555466, 24.344279793113564 ], [ 70.576032, 24.3437961 ], [ 70.5763828, 24.3422153 ], [ 70.5772158, 24.3369373 ], [ 70.5783268, 24.3319373 ], [ 70.5791608, 24.3266603 ], [ 70.5794378, 24.3211043 ], [ 70.5799396, 24.317918 ], [ 70.579940503081843, 24.317912298290722 ], [ 70.5799305, 24.3179097 ], [ 70.5792612, 24.3177327 ], [ 70.5772973, 24.3178822 ], [ 70.5775908, 24.3189086 ], [ 70.5770292, 24.3189145 ], [ 70.5771755, 24.3194276 ], [ 70.5780241, 24.3199334 ], [ 70.5780274, 24.3201908 ], [ 70.57775, 24.3203892 ], [ 70.5774414, 24.3204192 ], [ 70.5771987, 24.3205392 ], [ 70.5771987, 24.3206704 ], [ 70.5774465, 24.3208127 ], [ 70.577137, 24.3208053 ], [ 70.5768491, 24.3209178 ], [ 70.5767298, 24.3208053 ], [ 70.576845, 24.3205242 ], [ 70.5766352, 24.3203367 ], [ 70.5765323, 24.3205617 ], [ 70.576339, 24.3205916 ], [ 70.5762567, 24.3205317 ], [ 70.5762043, 24.3203379 ], [ 70.5758865, 24.3201268 ], [ 70.5753641, 24.3203705 ], [ 70.5750437, 24.3203532 ], [ 70.5746567, 24.3202333 ], [ 70.5744431, 24.320432 ], [ 70.5744431, 24.3205107 ], [ 70.5743073, 24.3206531 ], [ 70.5744307, 24.3208668 ], [ 70.5743562, 24.3210065 ], [ 70.5745727, 24.3210202 ], [ 70.5745002, 24.3212465 ], [ 70.5748087, 24.3212427 ], [ 70.5751008, 24.3213739 ], [ 70.5755163, 24.3214376 ], [ 70.5761214, 24.3216831 ], [ 70.5765577, 24.321593 ], [ 70.5767802, 24.3219131 ], [ 70.5778084, 24.321471 ], [ 70.577983, 24.3215346 ], [ 70.5780993, 24.3219269 ], [ 70.5785123, 24.3217732 ], [ 70.5787916, 24.3217361 ], [ 70.5787781, 24.3215688 ], [ 70.5789545, 24.3215134 ], [ 70.5792279, 24.3214975 ], [ 70.5791697, 24.321723 ], [ 70.5792211, 24.3221816 ], [ 70.5791016, 24.3224107 ], [ 70.5789386, 24.3221534 ], [ 70.5788629, 24.3220049 ], [ 70.5786652, 24.3220367 ], [ 70.5783756, 24.3222502 ], [ 70.5785372, 24.3225191 ], [ 70.5788025, 24.322709 ], [ 70.578287, 24.3226888 ], [ 70.5781474, 24.3224873 ], [ 70.5777169, 24.322482 ], [ 70.5767337, 24.3224025 ], [ 70.576233, 24.3226537 ], [ 70.5753608, 24.3227259 ], [ 70.5748336, 24.3230547 ], [ 70.5746104, 24.3235529 ], [ 70.5747791, 24.3242791 ], [ 70.5751778, 24.3248993 ], [ 70.5753022, 24.3269099 ], [ 70.5746291, 24.3292331 ], [ 70.57379, 24.3294992 ], [ 70.5728352, 24.3318253 ], [ 70.5725575, 24.3320853 ], [ 70.5717373, 24.3338954 ], [ 70.5714596, 24.3341555 ], [ 70.5709138, 24.3354478 ], [ 70.5706361, 24.3357081 ], [ 70.5698094, 24.3370035 ], [ 70.5689828, 24.3382987 ], [ 70.567339, 24.3416612 ], [ 70.5670614, 24.3419215 ], [ 70.5651618, 24.3473452 ], [ 70.5643351, 24.3486404 ], [ 70.563646, 24.3496769 ], [ 70.5630843, 24.3496827 ], [ 70.5632305, 24.3501959 ], [ 70.5629529, 24.3504561 ], [ 70.5621419, 24.3530379 ], [ 70.5624449, 24.3548362 ], [ 70.562732, 24.355348 ], [ 70.5637235, 24.3559806 ], [ 70.5651247, 24.3557088 ], [ 70.5660962, 24.3547986 ], [ 70.567188, 24.3522138 ], [ 70.5680243, 24.3516905 ], [ 70.5681557, 24.3509171 ], [ 70.5687174, 24.3509112 ], [ 70.568708, 24.3501394 ], [ 70.5692697, 24.3501335 ], [ 70.5692632, 24.3496189 ], [ 70.5698249, 24.3496132 ], [ 70.5699586, 24.349097 ], [ 70.5700981, 24.3489664 ], [ 70.5712183, 24.3486975 ], [ 70.571631, 24.3480504 ], [ 70.5727418, 24.3470095 ], [ 70.5728731, 24.3462361 ], [ 70.5737142, 24.3460982 ], [ 70.5742663, 24.3453204 ], [ 70.5751058, 24.3450543 ], [ 70.5759276, 24.3442842 ], [ 70.575934806555466, 24.344279793113564 ] ] ], [ [ [ 69.6466746, 22.7622021 ], [ 69.6495146, 22.760834 ], [ 69.6520155, 22.7587624 ], [ 69.6535414, 22.7577461 ], [ 69.6559152, 22.7562217 ], [ 69.658416, 22.7552054 ], [ 69.6609593, 22.7552054 ], [ 69.663884, 22.7546582 ], [ 69.6650285, 22.7534464 ], [ 69.6659187, 22.7519219 ], [ 69.6668088, 22.7516874 ], [ 69.6653252, 22.7507102 ], [ 69.6632482, 22.7504756 ], [ 69.6590942, 22.7517265 ], [ 69.655025, 22.7530555 ], [ 69.6491755, 22.7546191 ], [ 69.6432836, 22.7564953 ], [ 69.6379004, 22.7581761 ], [ 69.6343398, 22.7602868 ], [ 69.6332377, 22.7620848 ], [ 69.6339583, 22.7627102 ], [ 69.6362896, 22.7642346 ], [ 69.6398502, 22.7642346 ], [ 69.6423511, 22.7644691 ], [ 69.6444281, 22.7639609 ], [ 69.6466746, 22.7622021 ] ] ], [ [ [ 70.3751169, 22.8456873 ], [ 70.3748393, 22.8456896 ], [ 70.3745641, 22.8459494 ], [ 70.3742865, 22.8459519 ], [ 70.3732946, 22.8440303 ], [ 70.3732868, 22.8432581 ], [ 70.3734237, 22.8429995 ], [ 70.3728682, 22.8430042 ], [ 70.3728657, 22.842747 ], [ 70.3734172, 22.8423556 ], [ 70.3745293, 22.8424752 ], [ 70.374665, 22.8422167 ], [ 70.3746522, 22.8409296 ], [ 70.373775, 22.8365614 ], [ 70.373212, 22.8357939 ], [ 70.3732042, 22.8350218 ], [ 70.372924, 22.8347669 ], [ 70.3726386, 22.8339971 ], [ 70.3726308, 22.833225 ], [ 70.3706252, 22.8270644 ], [ 70.370474, 22.8257788 ], [ 70.3699187, 22.8257835 ], [ 70.3700493, 22.8250101 ], [ 70.3699096, 22.8248822 ], [ 70.369353, 22.8247587 ], [ 70.3691982, 22.8232156 ], [ 70.3689179, 22.8229606 ], [ 70.3687745, 22.8224471 ], [ 70.363783, 22.823133 ], [ 70.363508, 22.8233927 ], [ 70.3601837, 22.8241933 ], [ 70.3582426, 22.8244673 ], [ 70.3576898, 22.8247295 ], [ 70.3485473, 22.8268663 ], [ 70.3482683, 22.8267404 ], [ 70.3482734, 22.8272553 ], [ 70.3468888, 22.8276525 ], [ 70.3432854, 22.8283269 ], [ 70.3431563, 22.8293577 ], [ 70.3428811, 22.8296174 ], [ 70.3428911, 22.830647 ], [ 70.3426159, 22.8309067 ], [ 70.3423458, 22.8316813 ], [ 70.3423534, 22.8324533 ], [ 70.3420782, 22.832713 ], [ 70.3422328, 22.8342562 ], [ 70.3425091, 22.8341248 ], [ 70.3433436, 22.8342469 ], [ 70.3433485, 22.8347616 ], [ 70.3425142, 22.8346395 ], [ 70.3418259, 22.8352893 ], [ 70.3416925, 22.8358052 ], [ 70.3422479, 22.8358005 ], [ 70.3412882, 22.8370957 ], [ 70.3416189, 22.8424985 ], [ 70.341899, 22.8427536 ], [ 70.3426165, 22.8450642 ], [ 70.3420599, 22.8449398 ], [ 70.3419217, 22.84507 ], [ 70.3417885, 22.845586 ], [ 70.3428994, 22.8455765 ], [ 70.3429043, 22.8460914 ], [ 70.3440153, 22.8460819 ], [ 70.3442854, 22.8453076 ], [ 70.3456713, 22.8450384 ], [ 70.3455269, 22.8445247 ], [ 70.3453872, 22.8443968 ], [ 70.3442751, 22.8442779 ], [ 70.3441308, 22.8437644 ], [ 70.3435704, 22.8432543 ], [ 70.3421464, 22.8396625 ], [ 70.3418663, 22.8394076 ], [ 70.3418461, 22.8373484 ], [ 70.3421213, 22.8370887 ], [ 70.3423458, 22.8361447 ], [ 70.3425282, 22.8360557 ], [ 70.3425231, 22.8355408 ], [ 70.3430784, 22.8355361 ], [ 70.3430886, 22.8365658 ], [ 70.3436439, 22.836561 ], [ 70.3440398, 22.8344985 ], [ 70.3441614, 22.8326956 ], [ 70.344439, 22.8326932 ], [ 70.3445876, 22.8337215 ], [ 70.3448703, 22.8342341 ], [ 70.3453177, 22.8373191 ], [ 70.34504, 22.8373214 ], [ 70.3450349, 22.8368067 ], [ 70.3446205, 22.8370676 ], [ 70.3444872, 22.8375835 ], [ 70.3439304, 22.8374592 ], [ 70.3437924, 22.8375894 ], [ 70.3439444, 22.8388752 ], [ 70.3450576, 22.8391231 ], [ 70.344921, 22.8393817 ], [ 70.3449336, 22.8406686 ], [ 70.3452137, 22.8409237 ], [ 70.3455042, 22.8422084 ], [ 70.3457843, 22.8424633 ], [ 70.3463524, 22.8437455 ], [ 70.346237, 22.8460632 ], [ 70.3467923, 22.8460585 ], [ 70.3467871, 22.8455438 ], [ 70.3481784, 22.8457893 ], [ 70.3484762, 22.847846 ], [ 70.3481973, 22.8477194 ], [ 70.3473642, 22.8477264 ], [ 70.3472262, 22.8478566 ], [ 70.3471309, 22.8522335 ], [ 70.3468531, 22.8522358 ], [ 70.3468431, 22.8512063 ], [ 70.3462876, 22.851211 ], [ 70.3458554, 22.8496701 ], [ 70.3452923, 22.8489027 ], [ 70.3450019, 22.8476181 ], [ 70.3445832, 22.8473643 ], [ 70.3445883, 22.8478789 ], [ 70.3434749, 22.847631 ], [ 70.3436084, 22.847115 ], [ 70.3434687, 22.846987 ], [ 70.3429132, 22.8469918 ], [ 70.3427752, 22.8471222 ], [ 70.3426418, 22.847638 ], [ 70.3431948, 22.847376 ], [ 70.3433407, 22.8481469 ], [ 70.3439038, 22.8489145 ], [ 70.344336, 22.8504552 ], [ 70.3451716, 22.8507056 ], [ 70.3453177, 22.8514765 ], [ 70.3455978, 22.8517317 ], [ 70.3458856, 22.8527587 ], [ 70.3461659, 22.8530139 ], [ 70.346171, 22.8535287 ], [ 70.3460351, 22.8537873 ], [ 70.3465932, 22.85404 ], [ 70.3468633, 22.8532654 ], [ 70.3474188, 22.8532607 ], [ 70.3474314, 22.8545476 ], [ 70.3479907, 22.8549284 ], [ 70.3485473, 22.855053 ], [ 70.3482646, 22.8545406 ], [ 70.34882, 22.8545359 ], [ 70.3488149, 22.8540211 ], [ 70.3499283, 22.854269 ], [ 70.349931, 22.8545264 ], [ 70.3493755, 22.8545312 ], [ 70.3489737, 22.8560789 ], [ 70.3491512, 22.8599386 ], [ 70.3494288, 22.8599362 ], [ 70.3494212, 22.8591641 ], [ 70.3499741, 22.858902 ], [ 70.3499818, 22.859674 ], [ 70.3502608, 22.8598001 ], [ 70.3508149, 22.859667 ], [ 70.3515267, 22.8614629 ], [ 70.3519667, 22.8637757 ], [ 70.3528, 22.8637687 ], [ 70.3532619, 22.8683981 ], [ 70.3543908, 22.8701904 ], [ 70.3545352, 22.8707039 ], [ 70.3559215, 22.8704348 ], [ 70.3559266, 22.8709494 ], [ 70.3564821, 22.8709447 ], [ 70.3564872, 22.8714595 ], [ 70.3576008, 22.8717075 ], [ 70.3583101, 22.8732458 ], [ 70.3585904, 22.8735009 ], [ 70.3587374, 22.8742718 ], [ 70.3592931, 22.8742671 ], [ 70.3599947, 22.8750333 ], [ 70.3602851, 22.8763178 ], [ 70.3605654, 22.8765727 ], [ 70.3605707, 22.8770876 ], [ 70.3604348, 22.8773461 ], [ 70.3609903, 22.8773414 ], [ 70.3611313, 22.8775977 ], [ 70.3611364, 22.8781123 ], [ 70.3610007, 22.8783709 ], [ 70.3615562, 22.8783661 ], [ 70.3615484, 22.8775941 ], [ 70.3618263, 22.8775916 ], [ 70.3615613, 22.878881 ], [ 70.3621169, 22.8788763 ], [ 70.3621116, 22.8783614 ], [ 70.3623895, 22.878359 ], [ 70.3623972, 22.8791312 ], [ 70.3632356, 22.8796389 ], [ 70.3632305, 22.879124 ], [ 70.3635084, 22.8791218 ], [ 70.3635159, 22.8798938 ], [ 70.3640716, 22.8798891 ], [ 70.3645057, 22.8816873 ], [ 70.364786, 22.8819422 ], [ 70.3647964, 22.8829717 ], [ 70.3646605, 22.8832302 ], [ 70.3652162, 22.8832255 ], [ 70.3655093, 22.8847674 ], [ 70.3663452, 22.8850176 ], [ 70.3667665, 22.8855289 ], [ 70.367194, 22.8865548 ], [ 70.3677497, 22.88655 ], [ 70.3684617, 22.8883457 ], [ 70.3693029, 22.8891106 ], [ 70.3694499, 22.8898817 ], [ 70.3702834, 22.8898745 ], [ 70.3704295, 22.8906455 ], [ 70.3715588, 22.8924376 ], [ 70.371706, 22.8932085 ], [ 70.3725393, 22.8932013 ], [ 70.3726856, 22.8939723 ], [ 70.3732464, 22.8944822 ], [ 70.373391, 22.8949957 ], [ 70.3739464, 22.894991 ], [ 70.3740901, 22.8955045 ], [ 70.3746535, 22.8962718 ], [ 70.3752143, 22.8967817 ], [ 70.3759249, 22.89832 ], [ 70.3764806, 22.8983153 ], [ 70.3770517, 22.8998547 ], [ 70.3781655, 22.9001025 ], [ 70.3783118, 22.9008734 ], [ 70.3794335, 22.9018932 ], [ 70.3798637, 22.9031766 ], [ 70.3804193, 22.9031718 ], [ 70.380563, 22.9036853 ], [ 70.3811239, 22.9041953 ], [ 70.3812685, 22.9047088 ], [ 70.3832158, 22.9049492 ], [ 70.3833517, 22.9046906 ], [ 70.3833464, 22.904176 ], [ 70.3829275, 22.9039222 ], [ 70.3829328, 22.904437 ], [ 70.3826524, 22.904182 ], [ 70.3823745, 22.9041843 ], [ 70.382642, 22.9031524 ], [ 70.3834779, 22.9034026 ], [ 70.3834649, 22.9021157 ], [ 70.3851345, 22.9023586 ], [ 70.385407, 22.9018413 ], [ 70.38485, 22.9017171 ], [ 70.3820733, 22.9018704 ], [ 70.3817981, 22.9021302 ], [ 70.3820837, 22.9028999 ], [ 70.381528, 22.9029048 ], [ 70.3813757, 22.901619 ], [ 70.3810952, 22.901364 ], [ 70.3806607, 22.8995661 ], [ 70.3812163, 22.8995612 ], [ 70.3815072, 22.9008456 ], [ 70.3820615, 22.9007116 ], [ 70.3823407, 22.9008384 ], [ 70.3827516, 22.90032 ], [ 70.3827438, 22.8995479 ], [ 70.3824634, 22.899293 ], [ 70.3823197, 22.8987795 ], [ 70.383984, 22.8985075 ], [ 70.3843949, 22.8979891 ], [ 70.3843819, 22.8967022 ], [ 70.3838185, 22.8959348 ], [ 70.3833957, 22.8952947 ], [ 70.3820067, 22.8953068 ], [ 70.3810404, 22.895959 ], [ 70.3802708, 22.8979365 ], [ 70.3789769, 22.897907 ], [ 70.3787004, 22.8980386 ], [ 70.3786953, 22.8975239 ], [ 70.3781383, 22.8973996 ], [ 70.3777145, 22.8967602 ], [ 70.3777068, 22.8959879 ], [ 70.3775671, 22.89586 ], [ 70.3770101, 22.8957366 ], [ 70.377146, 22.895478 ], [ 70.3771407, 22.8949634 ], [ 70.376297, 22.8939411 ], [ 70.3757361, 22.893431 ], [ 70.3751729, 22.8926636 ], [ 70.3753044, 22.8918904 ], [ 70.3747488, 22.8918951 ], [ 70.3747436, 22.8913803 ], [ 70.374188, 22.8913852 ], [ 70.3743212, 22.8908692 ], [ 70.3745964, 22.8906094 ], [ 70.374728, 22.889836 ], [ 70.3738947, 22.8898434 ], [ 70.3738998, 22.890358 ], [ 70.3730651, 22.8902361 ], [ 70.372644, 22.8898541 ], [ 70.3723507, 22.8883123 ], [ 70.372211, 22.8881843 ], [ 70.3710986, 22.8880656 ], [ 70.371366, 22.8870337 ], [ 70.3716452, 22.8871596 ], [ 70.372755, 22.8870216 ], [ 70.3726104, 22.8865081 ], [ 70.3723301, 22.8862531 ], [ 70.3719049, 22.8853554 ], [ 70.3707937, 22.885365 ], [ 70.3705186, 22.8856249 ], [ 70.3699629, 22.8856296 ], [ 70.3694938, 22.8848207 ], [ 70.3699538, 22.8847292 ], [ 70.3699461, 22.883957 ], [ 70.3696658, 22.883702 ], [ 70.3707769, 22.8836925 ], [ 70.3709102, 22.8831766 ], [ 70.3707705, 22.8830486 ], [ 70.3702148, 22.8830533 ], [ 70.369246, 22.8834484 ], [ 70.3691128, 22.8839641 ], [ 70.3695737, 22.8840479 ], [ 70.369302, 22.8846462 ], [ 70.3688427, 22.8847388 ], [ 70.3686981, 22.8842251 ], [ 70.3677174, 22.8833323 ], [ 70.3670187, 22.8829526 ], [ 70.3667253, 22.8814107 ], [ 70.3658792, 22.880131 ], [ 70.3650381, 22.879366 ], [ 70.3633458, 22.8768063 ], [ 70.3629257, 22.8764234 ], [ 70.3620912, 22.8763023 ], [ 70.3622269, 22.8760437 ], [ 70.3622218, 22.8755291 ], [ 70.3613783, 22.8745066 ], [ 70.3608151, 22.8737392 ], [ 70.3603925, 22.8730989 ], [ 70.3598357, 22.8729753 ], [ 70.3594057, 22.871692 ], [ 70.3592661, 22.871564 ], [ 70.3582897, 22.8711868 ], [ 70.3581358, 22.8696436 ], [ 70.3586913, 22.8696389 ], [ 70.3586889, 22.8693815 ], [ 70.3575804, 22.8696483 ], [ 70.3577059, 22.8683603 ], [ 70.3575662, 22.8682323 ], [ 70.3567318, 22.8681112 ], [ 70.3565874, 22.8675975 ], [ 70.3560266, 22.8670876 ], [ 70.3551833, 22.8660651 ], [ 70.355168, 22.8645208 ], [ 70.3545945, 22.8627237 ], [ 70.3543143, 22.8624688 ], [ 70.3541708, 22.8619553 ], [ 70.3544471, 22.8618237 ], [ 70.3552818, 22.8619458 ], [ 70.3550117, 22.8627203 ], [ 70.3564029, 22.8629659 ], [ 70.3565439, 22.863222 ], [ 70.3565541, 22.8642516 ], [ 70.3568344, 22.8645066 ], [ 70.3569916, 22.866307 ], [ 70.3578274, 22.8665574 ], [ 70.3576855, 22.8663011 ], [ 70.3580822, 22.8642386 ], [ 70.3575267, 22.8642433 ], [ 70.3572362, 22.8629587 ], [ 70.3586248, 22.8629468 ], [ 70.3606331, 22.8693648 ], [ 70.3614689, 22.8696151 ], [ 70.3614793, 22.8706447 ], [ 70.3625928, 22.8708925 ], [ 70.3627285, 22.870634 ], [ 70.3628576, 22.8696032 ], [ 70.3636936, 22.8698534 ], [ 70.3638268, 22.8693374 ], [ 70.3636858, 22.8690813 ], [ 70.3678393, 22.8677587 ], [ 70.3687008, 22.8705827 ], [ 70.3681453, 22.8705875 ], [ 70.3681504, 22.8711023 ], [ 70.3687085, 22.8713548 ], [ 70.3687034, 22.87084 ], [ 70.3689812, 22.8708377 ], [ 70.369277, 22.872637 ], [ 70.3717743, 22.872358 ], [ 70.3721852, 22.8718396 ], [ 70.3721774, 22.8710675 ], [ 70.3715987, 22.8687559 ], [ 70.3713158, 22.8682435 ], [ 70.3711619, 22.8667003 ], [ 70.3816902, 22.8640352 ], [ 70.3815378, 22.8627495 ], [ 70.3812575, 22.8624945 ], [ 70.3809667, 22.86121 ], [ 70.3806864, 22.8609551 ], [ 70.3781037, 22.8527406 ], [ 70.3773762, 22.8494006 ], [ 70.3765418, 22.8492787 ], [ 70.3761156, 22.8483819 ], [ 70.3761105, 22.847867 ], [ 70.3752566, 22.8458152 ], [ 70.3751169, 22.8456873 ] ] ], [ [ [ 70.1910285, 23.0735684 ], [ 70.1908935, 23.0740841 ], [ 70.1907559, 23.0742136 ], [ 70.1902006, 23.0743469 ], [ 70.1906267, 23.0753733 ], [ 70.1911897, 23.0761412 ], [ 70.1917529, 23.0769093 ], [ 70.1923139, 23.0774198 ], [ 70.1924581, 23.0779337 ], [ 70.1952572, 23.0798426 ], [ 70.1960963, 23.080351 ], [ 70.1966539, 23.0804759 ], [ 70.1970751, 23.0809876 ], [ 70.1979211, 23.0822682 ], [ 70.1984845, 23.0830363 ], [ 70.1989113, 23.0840626 ], [ 70.1994688, 23.0841866 ], [ 70.20003, 23.0846973 ], [ 70.2028211, 23.0857056 ], [ 70.2056195, 23.0874861 ], [ 70.2064563, 23.0877371 ], [ 70.207568, 23.0876005 ], [ 70.2082562, 23.0868229 ], [ 70.2088058, 23.0860465 ], [ 70.2097616, 23.0839798 ], [ 70.2094834, 23.0839821 ], [ 70.2094811, 23.0837247 ], [ 70.2097593, 23.0837226 ], [ 70.2101668, 23.0826897 ], [ 70.2101347, 23.0790862 ], [ 70.2108052, 23.0762495 ], [ 70.2096913, 23.0761289 ], [ 70.2091303, 23.0756184 ], [ 70.2035618, 23.0751461 ], [ 70.2030031, 23.0748929 ], [ 70.1910285, 23.0735684 ] ] ], [ [ [ 70.8587664, 23.1216827 ], [ 70.8586375, 23.1224562 ], [ 70.8578207, 23.1237526 ], [ 70.8574393, 23.1263307 ], [ 70.8579957, 23.1263241 ], [ 70.8578774, 23.1278696 ], [ 70.8581626, 23.128381 ], [ 70.8579163, 23.1307 ], [ 70.8571028, 23.1322538 ], [ 70.8560042, 23.1332961 ], [ 70.8554619, 23.1343319 ], [ 70.8547757, 23.134983 ], [ 70.854221, 23.1351187 ], [ 70.8540885, 23.1356348 ], [ 70.8535391, 23.1361561 ], [ 70.8534075, 23.1366723 ], [ 70.8528528, 23.136807 ], [ 70.8524438, 23.1374557 ], [ 70.8518944, 23.1379769 ], [ 70.8514863, 23.1386246 ], [ 70.8509316, 23.1387603 ], [ 70.8509388, 23.1392748 ], [ 70.8503841, 23.1394095 ], [ 70.8498347, 23.1399308 ], [ 70.849007, 23.1404553 ], [ 70.8480378, 23.1408531 ], [ 70.8479063, 23.1413693 ], [ 70.8473499, 23.1413759 ], [ 70.8473569, 23.1418905 ], [ 70.8459639, 23.1417777 ], [ 70.8454145, 23.1422988 ], [ 70.8443051, 23.1425691 ], [ 70.8434773, 23.1430935 ], [ 70.8429278, 23.1436146 ], [ 70.8418218, 23.1441423 ], [ 70.8407088, 23.1441553 ], [ 70.8398812, 23.1446796 ], [ 70.8387681, 23.1446927 ], [ 70.8382187, 23.1452137 ], [ 70.8362709, 23.1452366 ], [ 70.8357249, 23.1460149 ], [ 70.8335024, 23.1462982 ], [ 70.8328114, 23.1466927 ], [ 70.8326799, 23.147209 ], [ 70.831012, 23.1473566 ], [ 70.8308742, 23.1474874 ], [ 70.8307424, 23.1480036 ], [ 70.8296347, 23.148402 ], [ 70.8287982, 23.1482835 ], [ 70.8286691, 23.149057 ], [ 70.8282573, 23.1494475 ], [ 70.8277026, 23.149583 ], [ 70.8275699, 23.1500992 ], [ 70.8272951, 23.1503598 ], [ 70.8264918, 23.1526853 ], [ 70.826217, 23.1529459 ], [ 70.8262344, 23.1542324 ], [ 70.8273614, 23.1552489 ], [ 70.8275151, 23.1562765 ], [ 70.8280768, 23.1566556 ], [ 70.8289186, 23.1571604 ], [ 70.8294771, 23.1572831 ], [ 70.8294841, 23.1577977 ], [ 70.8306094, 23.1586849 ], [ 70.8356201, 23.1587558 ], [ 70.8360301, 23.1582362 ], [ 70.8360231, 23.1577216 ], [ 70.8358827, 23.1575942 ], [ 70.8342147, 23.1577427 ], [ 70.8342078, 23.1572281 ], [ 70.8339295, 23.1572313 ], [ 70.8337583, 23.1549172 ], [ 70.833891, 23.1544008 ], [ 70.8347258, 23.1543912 ], [ 70.8349934, 23.1536159 ], [ 70.8361083, 23.1537312 ], [ 70.8369326, 23.1529495 ], [ 70.8374856, 23.1526857 ], [ 70.8380422, 23.1526792 ], [ 70.8385952, 23.1524154 ], [ 70.8397082, 23.1524023 ], [ 70.83999, 23.1526566 ], [ 70.8419345, 23.1523765 ], [ 70.8424839, 23.1518552 ], [ 70.8438787, 23.1520964 ], [ 70.8469361, 23.1518032 ], [ 70.8483329, 23.1521733 ], [ 70.8486041, 23.1516554 ], [ 70.8480475, 23.1516618 ], [ 70.8483117, 23.1506293 ], [ 70.849694, 23.1499693 ], [ 70.8505183, 23.1491875 ], [ 70.8530085, 23.1481289 ], [ 70.8532831, 23.1478682 ], [ 70.8538415, 23.1479909 ], [ 70.8538345, 23.1474762 ], [ 70.8554986, 23.1470701 ], [ 70.8557734, 23.1468095 ], [ 70.8571593, 23.1464076 ], [ 70.8571522, 23.145893 ], [ 70.8582705, 23.1462653 ], [ 70.8585523, 23.1465193 ], [ 70.8638392, 23.146457 ], [ 70.8649467, 23.1460584 ], [ 70.8650783, 23.145542 ], [ 70.8653531, 23.1452814 ], [ 70.8654856, 23.1447652 ], [ 70.8660367, 23.1443721 ], [ 70.8665914, 23.1442374 ], [ 70.8668554, 23.1432048 ], [ 70.8676865, 23.1429376 ], [ 70.868371, 23.1421574 ], [ 70.8682073, 23.1403579 ], [ 70.8687585, 23.1399648 ], [ 70.8695895, 23.1396976 ], [ 70.8720937, 23.1396679 ], [ 70.8729248, 23.1394007 ], [ 70.8745942, 23.1393808 ], [ 70.8759962, 23.1401362 ], [ 70.8771126, 23.1403802 ], [ 70.8776745, 23.1407601 ], [ 70.8776638, 23.1399881 ], [ 70.8782204, 23.1399815 ], [ 70.8780592, 23.1384394 ], [ 70.8774884, 23.1374167 ], [ 70.877203, 23.1369055 ], [ 70.877185, 23.135619 ], [ 70.8774596, 23.1353583 ], [ 70.8773067, 23.1343307 ], [ 70.8781378, 23.1340635 ], [ 70.877966, 23.1317492 ], [ 70.8775241, 23.1299531 ], [ 70.8764058, 23.1295798 ], [ 70.8752786, 23.128564 ], [ 70.8747186, 23.1283132 ], [ 70.8710983, 23.1280988 ], [ 70.8709605, 23.1282296 ], [ 70.870829, 23.128746 ], [ 70.8691686, 23.1294086 ], [ 70.8680665, 23.1301937 ], [ 70.8672336, 23.1303326 ], [ 70.8669696, 23.1313651 ], [ 70.8647456, 23.1315197 ], [ 70.8636256, 23.1310183 ], [ 70.8629172, 23.1301264 ], [ 70.8628923, 23.1283253 ], [ 70.8631633, 23.1278072 ], [ 70.8631421, 23.1262635 ], [ 70.8624186, 23.124213 ], [ 70.8618622, 23.1242196 ], [ 70.8612845, 23.1226823 ], [ 70.8604481, 23.122563 ], [ 70.8598845, 23.122055 ], [ 70.8587664, 23.1216827 ] ] ], [ [ [ 70.2246354, 22.9883767 ], [ 70.2256144, 22.9860245 ], [ 70.2257659, 22.9837684 ], [ 70.2271723, 22.9802724 ], [ 70.229282, 22.9763879 ], [ 70.2299852, 22.9725032 ], [ 70.2304071, 22.9696544 ], [ 70.2302665, 22.966676 ], [ 70.2285788, 22.965899 ], [ 70.2263284, 22.967194 ], [ 70.2237968, 22.9695249 ], [ 70.2168305, 22.9746094 ], [ 70.213374, 22.9765718 ], [ 70.209111, 22.9789585 ], [ 70.2055969, 22.9816103 ], [ 70.2037535, 22.9838909 ], [ 70.2024861, 22.9878154 ], [ 70.2013916, 22.9914746 ], [ 70.2006427, 22.993861 ], [ 70.1998937, 22.995611 ], [ 70.1986264, 22.9974671 ], [ 70.1988568, 22.9977853 ], [ 70.1999514, 22.9985277 ], [ 70.2009883, 22.9996413 ], [ 70.2016796, 23.0013382 ], [ 70.2014492, 23.0013382 ], [ 70.2008155, 23.0003307 ], [ 70.1995481, 22.9992701 ], [ 70.1977622, 22.9992701 ], [ 70.1961492, 22.9996943 ], [ 70.1945938, 23.0008079 ], [ 70.1934992, 23.0020806 ], [ 70.1931536, 23.0038835 ], [ 70.1931536, 23.0054213 ], [ 70.1915406, 23.0071712 ], [ 70.1917134, 23.0063758 ], [ 70.1923471, 23.0051031 ], [ 70.1925775, 23.0027699 ], [ 70.1926351, 23.0013912 ], [ 70.1921167, 23.0007019 ], [ 70.1906188, 23.0005428 ], [ 70.189121, 22.9993761 ], [ 70.1886602, 22.9987928 ], [ 70.1878537, 22.9998004 ], [ 70.1871624, 23.0017094 ], [ 70.1871624, 23.000914 ], [ 70.18722, 22.999111 ], [ 70.1875656, 22.9976792 ], [ 70.1875656, 22.9971489 ], [ 70.1872776, 22.9957701 ], [ 70.1862982, 22.9944444 ], [ 70.1854341, 22.9942323 ], [ 70.1827265, 22.995505 ], [ 70.1827841, 22.9951868 ], [ 70.1835907, 22.993861 ], [ 70.1854917, 22.9934368 ], [ 70.1871624, 22.9936489 ], [ 70.188833, 22.9945504 ], [ 70.1915406, 22.9953459 ], [ 70.1943634, 22.9953989 ], [ 70.1962644, 22.9945504 ], [ 70.1972438, 22.9928004 ], [ 70.1977622, 22.990414 ], [ 70.198972, 22.9842091 ], [ 70.200297, 22.9819816 ], [ 70.2025437, 22.9787464 ], [ 70.2085557, 22.9754485 ], [ 70.2124937, 22.9729882 ], [ 70.2153066, 22.9705279 ], [ 70.2185414, 22.9680675 ], [ 70.2209324, 22.9663841 ], [ 70.2230421, 22.9644416 ], [ 70.2244485, 22.9622401 ], [ 70.2250111, 22.9602976 ], [ 70.2243685, 22.9585889 ], [ 70.2218913, 22.9576872 ], [ 70.2164762, 22.9579524 ], [ 70.2116988, 22.9583479 ], [ 70.210308, 22.9582292 ], [ 70.2090623, 22.9588828 ], [ 70.2089285, 22.9593986 ], [ 70.2086493, 22.9592716 ], [ 70.2080935, 22.9592759 ], [ 70.2071258, 22.9599272 ], [ 70.2071373, 22.9612141 ], [ 70.20673, 22.962247 ], [ 70.206174, 22.9622511 ], [ 70.2064588, 22.9630213 ], [ 70.2053494, 22.9632871 ], [ 70.2054764, 22.961999 ], [ 70.206579, 22.960961 ], [ 70.2062897, 22.9596762 ], [ 70.2058699, 22.9592927 ], [ 70.2053127, 22.9591687 ], [ 70.2050508, 22.9609726 ], [ 70.204496, 22.9611051 ], [ 70.2040819, 22.9614948 ], [ 70.2039481, 22.9620107 ], [ 70.204504, 22.9620064 ], [ 70.2045062, 22.9622638 ], [ 70.2036724, 22.9622702 ], [ 70.2036769, 22.9627849 ], [ 70.2042307, 22.9625233 ], [ 70.2046516, 22.9630349 ], [ 70.2047956, 22.9635486 ], [ 70.2042375, 22.9632956 ], [ 70.204242, 22.9638104 ], [ 70.203686, 22.9638146 ], [ 70.2036907, 22.9643294 ], [ 70.2045268, 22.9645804 ], [ 70.2045337, 22.9653526 ], [ 70.2034184, 22.9649744 ], [ 70.2027172, 22.9643368 ], [ 70.2020126, 22.9631833 ], [ 70.2017346, 22.9631854 ], [ 70.2015962, 22.9633156 ], [ 70.2016009, 22.9638304 ], [ 70.2006331, 22.9643524 ], [ 70.2002042, 22.9630688 ], [ 70.1999239, 22.9628134 ], [ 70.1997809, 22.9622997 ], [ 70.1983934, 22.9625675 ], [ 70.1982585, 22.9630835 ], [ 70.1979827, 22.963343 ], [ 70.1979895, 22.9641151 ], [ 70.1981313, 22.9643715 ], [ 70.1970194, 22.9643799 ], [ 70.196871, 22.9633513 ], [ 70.1971466, 22.9630918 ], [ 70.1972815, 22.962576 ], [ 70.1961662, 22.9621978 ], [ 70.1953278, 22.9616892 ], [ 70.1947686, 22.9613078 ], [ 70.1946336, 22.9618236 ], [ 70.1943579, 22.9620831 ], [ 70.1941322, 22.963026 ], [ 70.1936726, 22.9631181 ], [ 70.1935399, 22.9638913 ], [ 70.1928489, 22.9642821 ], [ 70.1917359, 22.9641623 ], [ 70.1913004, 22.9621062 ], [ 70.1907332, 22.9608234 ], [ 70.1901615, 22.9590257 ], [ 70.1901547, 22.9582536 ], [ 70.1904305, 22.9579941 ], [ 70.1905654, 22.9574781 ], [ 70.1911179, 22.9570875 ], [ 70.1933449, 22.9574574 ], [ 70.1934811, 22.9571988 ], [ 70.1934766, 22.9566842 ], [ 70.1924987, 22.9560474 ], [ 70.1919383, 22.9555369 ], [ 70.190266, 22.9550346 ], [ 70.1874866, 22.9550553 ], [ 70.1861014, 22.9555806 ], [ 70.1858257, 22.9558401 ], [ 70.1852764, 22.9566165 ], [ 70.1841659, 22.9567539 ], [ 70.183899, 22.9580429 ], [ 70.18362, 22.9579159 ], [ 70.1819546, 22.9581858 ], [ 70.1805692, 22.9587108 ], [ 70.1450482, 22.9657934 ], [ 70.1457569, 22.9696049 ], [ 70.1462792, 22.9717342 ], [ 70.1466485, 22.9717115 ], [ 70.1473871, 22.9740122 ], [ 70.1478179, 22.9767661 ], [ 70.1478165, 22.9787671 ], [ 70.1487047, 22.9820715 ], [ 70.1387493, 22.984114 ], [ 70.1388686, 22.9846837 ], [ 70.1322269, 22.987738 ], [ 70.1331835, 22.9902352 ], [ 70.1338124, 22.992966 ], [ 70.1347623, 22.9937552 ], [ 70.1332389, 22.9946159 ], [ 70.137776, 23.0005174 ], [ 70.1439331, 23.0091443 ], [ 70.1468599, 23.0132221 ], [ 70.1518429, 23.0199216 ], [ 70.1555242, 23.0257722 ], [ 70.1574756, 23.0289697 ], [ 70.1588587, 23.0308892 ], [ 70.1595876, 23.0324333 ], [ 70.1588199, 23.0326649 ], [ 70.1591954, 23.0342792 ], [ 70.1603594, 23.0340517 ], [ 70.1623883, 23.0333414 ], [ 70.1637452, 23.0390209 ], [ 70.1643048, 23.0394023 ], [ 70.1710052, 23.0423136 ], [ 70.171738, 23.0466843 ], [ 70.1732963, 23.0568602 ], [ 70.1717919, 23.05894 ], [ 70.1725582, 23.0594066 ], [ 70.1735419, 23.0580954 ], [ 70.1758434, 23.0602701 ], [ 70.1761702, 23.0605516 ], [ 70.1764496, 23.0606778 ], [ 70.1781309, 23.0620815 ], [ 70.179095, 23.0610447 ], [ 70.1793687, 23.0605277 ], [ 70.181576, 23.058452 ], [ 70.1818497, 23.0579352 ], [ 70.184057, 23.0558593 ], [ 70.184192, 23.0553435 ], [ 70.1861245, 23.0536553 ], [ 70.1872324, 23.0531322 ], [ 70.1891749, 23.0526028 ], [ 70.1897268, 23.0520838 ], [ 70.1905567, 23.0515627 ], [ 70.1919406, 23.0507801 ], [ 70.1958209, 23.0492063 ], [ 70.1986, 23.0489279 ], [ 70.2005401, 23.0481409 ], [ 70.2049925, 23.0483645 ], [ 70.2077786, 23.0488579 ], [ 70.2100037, 23.0488409 ], [ 70.210918, 23.0488053 ], [ 70.2157363, 23.0481486 ], [ 70.2175458, 23.048532 ], [ 70.2179724, 23.0473723 ], [ 70.2179906, 23.0461596 ], [ 70.218227, 23.0454302 ], [ 70.2185834, 23.0441702 ], [ 70.2185605, 23.0435442 ], [ 70.2188149, 23.0435077 ], [ 70.2188144, 23.0433682 ], [ 70.2186966, 23.0433411 ], [ 70.2189137, 23.0421323 ], [ 70.2191051, 23.0421391 ], [ 70.2192596, 23.0412011 ], [ 70.2193939, 23.0409847 ], [ 70.2195216, 23.0402939 ], [ 70.2195408, 23.0401898 ], [ 70.21968, 23.0394371 ], [ 70.2200253, 23.0376139 ], [ 70.220911, 23.0373872 ], [ 70.2212369, 23.036527 ], [ 70.2212729, 23.0364318 ], [ 70.2216675, 23.03539 ], [ 70.221173, 23.0324513 ], [ 70.2210074, 23.0322955 ], [ 70.2209141, 23.0317983 ], [ 70.2208824, 23.0316113 ], [ 70.2208587, 23.0314711 ], [ 70.2208409, 23.0313657 ], [ 70.2207777, 23.0309927 ], [ 70.2209596, 23.0309444 ], [ 70.2209187, 23.0305031 ], [ 70.22061, 23.0291327 ], [ 70.2207278, 23.0289533 ], [ 70.2198905, 23.0261741 ], [ 70.2187665, 23.0263288 ], [ 70.2173977, 23.0258208 ], [ 70.2159333, 23.0259766 ], [ 70.2154071, 23.0260173 ], [ 70.2153629, 23.0262916 ], [ 70.2151311, 23.0263999 ], [ 70.2149361, 23.0259936 ], [ 70.2147484, 23.0259224 ], [ 70.2139941, 23.0260342 ], [ 70.2140249, 23.0254852 ], [ 70.2142296, 23.0252892 ], [ 70.2151716, 23.0252993 ], [ 70.215242, 23.0250477 ], [ 70.2141198, 23.024698 ], [ 70.214076, 23.0230351 ], [ 70.2150097, 23.0230677 ], [ 70.2150538, 23.0224852 ], [ 70.2164565, 23.0224595 ], [ 70.2164705, 23.0206429 ], [ 70.2147549, 23.0206424 ], [ 70.2143374, 23.0206373 ], [ 70.2143296, 23.0203787 ], [ 70.2140798, 23.0203763 ], [ 70.214085, 23.0195789 ], [ 70.2148011, 23.0195678 ], [ 70.2148377, 23.0187152 ], [ 70.2187489, 23.0197503 ], [ 70.2191482, 23.0203212 ], [ 70.2195138, 23.0206459 ], [ 70.2200745, 23.0205726 ], [ 70.2201291, 23.0204122 ], [ 70.2200042, 23.0203451 ], [ 70.2200016, 23.0202518 ], [ 70.220189, 23.0202661 ], [ 70.220306, 23.020156 ], [ 70.2200302, 23.0201009 ], [ 70.220012, 23.0197609 ], [ 70.21945, 23.0198255 ], [ 70.2193355, 23.0195789 ], [ 70.2189266, 23.0196752 ], [ 70.2148444, 23.018561 ], [ 70.2148276, 23.0174275 ], [ 70.2167341, 23.0174403 ], [ 70.2167234, 23.015894 ], [ 70.2167489, 23.013398 ], [ 70.2179079, 23.0134915 ], [ 70.2193724, 23.0145143 ], [ 70.2199611, 23.0147107 ], [ 70.2198691, 23.0149748 ], [ 70.2202896, 23.0151254 ], [ 70.2210953, 23.0133408 ], [ 70.221003, 23.0131231 ], [ 70.2195084, 23.0125537 ], [ 70.2198493, 23.0117794 ], [ 70.221729, 23.0124689 ], [ 70.2217945, 23.0122943 ], [ 70.2215375, 23.0121957 ], [ 70.2216803, 23.0119684 ], [ 70.2218311, 23.011245 ], [ 70.2227291, 23.0091039 ], [ 70.2228947, 23.0085112 ], [ 70.2229204, 23.0071429 ], [ 70.2234697, 23.0062587 ], [ 70.2235646, 23.0048309 ], [ 70.2239507, 22.9986212 ], [ 70.224384, 22.9924369 ], [ 70.2246354, 22.9883767 ] ] ], [ [ [ 70.3124, 23.06377801026655 ], [ 70.3143586, 23.0631304 ], [ 70.3165232, 23.0542583 ], [ 70.3124, 23.051307447782879 ], [ 70.31121, 23.0504558 ], [ 70.3025515, 23.0509991 ], [ 70.2982222, 23.0470154 ], [ 70.3003868, 23.0397721 ], [ 70.3092422, 23.0386855 ], [ 70.3124, 23.036669071915711 ], [ 70.3124, 23.036669071915707 ], [ 70.3188846, 23.0325283 ], [ 70.3269528, 23.0323472 ], [ 70.3352178, 23.0330716 ], [ 70.3360049, 23.0294496 ], [ 70.3214428, 23.0171341 ], [ 70.3177039, 23.0098892 ], [ 70.3269528, 23.005542 ], [ 70.3269528, 22.9977531 ], [ 70.3383663, 22.9968473 ], [ 70.3389567, 22.991594 ], [ 70.3403342, 22.9872463 ], [ 70.3346274, 22.9796374 ], [ 70.3220332, 22.968948 ], [ 70.3180975, 22.9617005 ], [ 70.3124, 22.957598881162685 ], [ 70.3072743, 22.9539089 ], [ 70.2962543, 22.9517345 ], [ 70.2824794, 22.9531841 ], [ 70.2799212, 22.9633312 ], [ 70.2696884, 22.9671361 ], [ 70.2655559, 22.9736587 ], [ 70.2604395, 22.9812679 ], [ 70.2519777, 22.9823549 ], [ 70.2500098, 22.9883332 ], [ 70.2509938, 22.9946736 ], [ 70.2559134, 23.0031873 ], [ 70.2629977, 23.0077156 ], [ 70.2683109, 23.0234731 ], [ 70.2738208, 23.0372368 ], [ 70.2779533, 23.0404964 ], [ 70.271853, 23.04611 ], [ 70.2868087, 23.0625872 ], [ 70.3017643, 23.0672947 ], [ 70.3124, 23.06377801026655 ] ] ], [ [ [ 71.2755229, 23.1698678 ], [ 71.2744099, 23.1698839 ], [ 71.2742725, 23.1700149 ], [ 71.2741557, 23.1713031 ], [ 71.2749903, 23.1712912 ], [ 71.2751376, 23.1718036 ], [ 71.2750034, 23.1720629 ], [ 71.2752839, 23.1721871 ], [ 71.2761185, 23.172175 ], [ 71.2763946, 23.1720427 ], [ 71.2764077, 23.1728145 ], [ 71.2730667, 23.1727336 ], [ 71.272784, 23.1724804 ], [ 71.2719493, 23.1724925 ], [ 71.2716668, 23.1722392 ], [ 71.2711104, 23.1722473 ], [ 71.2708363, 23.1725085 ], [ 71.2702799, 23.1725165 ], [ 71.2701425, 23.1726476 ], [ 71.2700168, 23.1734214 ], [ 71.2711298, 23.1734053 ], [ 71.2708603, 23.1739238 ], [ 71.2714167, 23.1739158 ], [ 71.2715641, 23.1744282 ], [ 71.2718467, 23.1746815 ], [ 71.2719949, 23.175194 ], [ 71.2728318, 23.1753101 ], [ 71.2731143, 23.1755634 ], [ 71.2742296, 23.1756764 ], [ 71.2739644, 23.176452 ], [ 71.2745273, 23.1768295 ], [ 71.275086, 23.1769504 ], [ 71.2748338, 23.178498 ], [ 71.2756664, 23.1783568 ], [ 71.2759403, 23.1780956 ], [ 71.2764946, 23.1779593 ], [ 71.2765033, 23.1784738 ], [ 71.278175, 23.1785779 ], [ 71.2787403, 23.1790842 ], [ 71.2790185, 23.1790803 ], [ 71.2792924, 23.1788189 ], [ 71.2798467, 23.1786828 ], [ 71.279838, 23.1781681 ], [ 71.2840117, 23.1781077 ], [ 71.2843029, 23.1788754 ], [ 71.2845791, 23.1787423 ], [ 71.285416, 23.1788593 ], [ 71.2857117, 23.1798841 ], [ 71.2868291, 23.1801252 ], [ 71.2868378, 23.1806397 ], [ 71.287116, 23.1806357 ], [ 71.2877979, 23.1798538 ], [ 71.2879289, 23.1793373 ], [ 71.2890463, 23.1795785 ], [ 71.2890374, 23.1790638 ], [ 71.288481, 23.1790719 ], [ 71.2885685, 23.1786437 ], [ 71.290972, 23.1782638 ], [ 71.2906807, 23.1774963 ], [ 71.2901221, 23.1773751 ], [ 71.2898393, 23.177122 ], [ 71.2890024, 23.177006 ], [ 71.2888541, 23.1764936 ], [ 71.2885715, 23.1762403 ], [ 71.2884241, 23.1757278 ], [ 71.2878654, 23.1756068 ], [ 71.2875828, 23.1753537 ], [ 71.2856309, 23.1751247 ], [ 71.2850699, 23.1748756 ], [ 71.2845135, 23.1748837 ], [ 71.2839482, 23.1743772 ], [ 71.2833897, 23.1742572 ], [ 71.2833678, 23.172971 ], [ 71.2828134, 23.1731071 ], [ 71.2814092, 23.1723556 ], [ 71.2800138, 23.1721184 ], [ 71.2791616, 23.1711016 ], [ 71.2786008, 23.1708525 ], [ 71.2780444, 23.1708605 ], [ 71.2766401, 23.170109 ], [ 71.2760837, 23.1701169 ], [ 71.2755229, 23.1698678 ] ] ], [ [ [ 70.8344591, 23.2978688 ], [ 70.8339019, 23.2978753 ], [ 70.8329388, 23.2987878 ], [ 70.8329458, 23.2993024 ], [ 70.8338063, 23.3010937 ], [ 70.8343952, 23.3034031 ], [ 70.8352556, 23.3051945 ], [ 70.835413, 23.3064795 ], [ 70.8359755, 23.3068584 ], [ 70.8365345, 23.3069809 ], [ 70.8378195, 23.3092822 ], [ 70.8385553, 23.3121043 ], [ 70.8393966, 23.3124801 ], [ 70.8399607, 23.3129881 ], [ 70.8413644, 23.3137437 ], [ 70.8419235, 23.3138662 ], [ 70.8420694, 23.3143791 ], [ 70.8429157, 23.3151414 ], [ 70.8437693, 23.3164181 ], [ 70.8444877, 23.3179537 ], [ 70.8464538, 23.3190881 ], [ 70.8470129, 23.3192107 ], [ 70.8473022, 23.3199794 ], [ 70.8481344, 23.3197121 ], [ 70.8494056, 23.3209839 ], [ 70.8498382, 23.3220081 ], [ 70.8506831, 23.3226411 ], [ 70.8512419, 23.3227637 ], [ 70.8525132, 23.3240353 ], [ 70.8527989, 23.3245468 ], [ 70.8539276, 23.3255628 ], [ 70.8544956, 23.3263281 ], [ 70.8550637, 23.3270933 ], [ 70.856643, 23.3304201 ], [ 70.8599813, 23.3299941 ], [ 70.8602563, 23.3297335 ], [ 70.8608118, 23.3295987 ], [ 70.8608082, 23.3293413 ], [ 70.8605296, 23.3293447 ], [ 70.8605224, 23.3288301 ], [ 70.860801, 23.3288269 ], [ 70.8606541, 23.3283139 ], [ 70.8600896, 23.3278059 ], [ 70.8599437, 23.3272929 ], [ 70.8593901, 23.3275568 ], [ 70.8593829, 23.3270421 ], [ 70.8588256, 23.3270487 ], [ 70.8585254, 23.3255082 ], [ 70.8576878, 23.3253891 ], [ 70.8572641, 23.3250085 ], [ 70.8571181, 23.3244955 ], [ 70.8559981, 23.3241223 ], [ 70.8547135, 23.3219505 ], [ 70.8549671, 23.3201461 ], [ 70.854814, 23.3191185 ], [ 70.8559214, 23.3185906 ], [ 70.8559286, 23.3191053 ], [ 70.8564857, 23.3190986 ], [ 70.8566067, 23.3178106 ], [ 70.8568817, 23.31755 ], [ 70.8568781, 23.3172926 ], [ 70.8563102, 23.3165273 ], [ 70.8554636, 23.3157653 ], [ 70.8551779, 23.315254 ], [ 70.8522157, 23.3125865 ], [ 70.8515133, 23.312209 ], [ 70.851087, 23.3115704 ], [ 70.8505315, 23.3117059 ], [ 70.8503775, 23.3106785 ], [ 70.8500955, 23.3104245 ], [ 70.8499494, 23.3099114 ], [ 70.8493922, 23.309918 ], [ 70.8492453, 23.309405 ], [ 70.8489632, 23.309151 ], [ 70.8483882, 23.3078711 ], [ 70.8474013, 23.3069815 ], [ 70.8457209, 23.3063583 ], [ 70.8455597, 23.3048161 ], [ 70.8448549, 23.3041807 ], [ 70.84373, 23.3034219 ], [ 70.842605, 23.302663 ], [ 70.8395228, 23.3014124 ], [ 70.8385385, 23.3007811 ], [ 70.8376816, 23.299247 ], [ 70.837259, 23.2988654 ], [ 70.8344591, 23.2978688 ] ] ], [ [ [ 71.093167, 23.2728847 ], [ 71.0928905, 23.2730167 ], [ 71.0923336, 23.273024 ], [ 71.0919213, 23.273416 ], [ 71.0917987, 23.274447 ], [ 71.093752, 23.2746782 ], [ 71.0942338, 23.2787891 ], [ 71.0946681, 23.2798125 ], [ 71.0971886, 23.2806791 ], [ 71.0983026, 23.2806642 ], [ 71.1010712, 23.2795978 ], [ 71.1052485, 23.2795417 ], [ 71.1077671, 23.2802799 ], [ 71.1097206, 23.2805109 ], [ 71.1125197, 23.2813744 ], [ 71.1128104, 23.2821423 ], [ 71.1133734, 23.2825203 ], [ 71.1142169, 23.2830236 ], [ 71.115329, 23.2828804 ], [ 71.115583, 23.281333 ], [ 71.1153046, 23.2813368 ], [ 71.1153005, 23.2810796 ], [ 71.1147414, 23.2809581 ], [ 71.1138979, 23.2804548 ], [ 71.1127718, 23.279698 ], [ 71.1116416, 23.2786838 ], [ 71.1088486, 23.2782068 ], [ 71.1080051, 23.2777035 ], [ 71.1049255, 23.2767156 ], [ 71.1045014, 23.2763357 ], [ 71.1043545, 23.2758229 ], [ 71.1032345, 23.2754516 ], [ 71.1004375, 23.2747171 ], [ 71.1001551, 23.2744635 ], [ 71.0995961, 23.2743429 ], [ 71.0995879, 23.2738282 ], [ 71.0973542, 23.2734718 ], [ 71.0967911, 23.2730938 ], [ 71.0967992, 23.2736082 ], [ 71.0962402, 23.2734865 ], [ 71.0956753, 23.2729794 ], [ 71.0945613, 23.2729944 ], [ 71.0940085, 23.2732592 ], [ 71.0931831, 23.2739138 ], [ 71.093167, 23.2728847 ] ] ], [ [ [ 71.199665, 23.279018 ], [ 71.1971588, 23.2790531 ], [ 71.1960492, 23.2793261 ], [ 71.1949521, 23.2803707 ], [ 71.1946737, 23.2803746 ], [ 71.1945317, 23.2802484 ], [ 71.1943847, 23.2797358 ], [ 71.1932686, 23.2796222 ], [ 71.1927137, 23.2797591 ], [ 71.1923208, 23.2813085 ], [ 71.1923378, 23.2823376 ], [ 71.1915149, 23.283121 ], [ 71.1913847, 23.2836373 ], [ 71.1908277, 23.2836453 ], [ 71.1904431, 23.2857091 ], [ 71.1905871, 23.2859643 ], [ 71.1903085, 23.2859683 ], [ 71.1903338, 23.2875118 ], [ 71.1906124, 23.2875079 ], [ 71.1905954, 23.2864789 ], [ 71.190874, 23.286475 ], [ 71.1908867, 23.2872469 ], [ 71.1922979, 23.2883844 ], [ 71.1942475, 23.2883572 ], [ 71.1992348, 23.2867435 ], [ 71.2036863, 23.2864238 ], [ 71.205066, 23.2856324 ], [ 71.2056209, 23.2854963 ], [ 71.2068524, 23.2841924 ], [ 71.2073839, 23.2826411 ], [ 71.2073627, 23.2813548 ], [ 71.2072217, 23.2812278 ], [ 71.2033127, 23.2806398 ], [ 71.2032998, 23.2798681 ], [ 71.199665, 23.279018 ] ] ], [ [ [ 71.1495108, 23.2779121 ], [ 71.1442239, 23.2782418 ], [ 71.1411812, 23.2795701 ], [ 71.1398011, 23.2803608 ], [ 71.1393891, 23.2807528 ], [ 71.1392585, 23.2812693 ], [ 71.1381487, 23.2815417 ], [ 71.1376246, 23.2836075 ], [ 71.137346, 23.2836112 ], [ 71.1373666, 23.2848976 ], [ 71.1376452, 23.2848938 ], [ 71.138796, 23.2871939 ], [ 71.1399245, 23.2880786 ], [ 71.1427259, 23.2890698 ], [ 71.144397, 23.2890469 ], [ 71.1449498, 23.2887819 ], [ 71.146596, 23.2872155 ], [ 71.1471488, 23.2869507 ], [ 71.1482464, 23.2859065 ], [ 71.149352, 23.2853765 ], [ 71.1532426, 23.2848086 ], [ 71.1560337, 23.2851567 ], [ 71.156713, 23.284118 ], [ 71.1567005, 23.2833463 ], [ 71.1561311, 23.2825821 ], [ 71.1552791, 23.2815646 ], [ 71.1542904, 23.280677 ], [ 71.1506453, 23.2791832 ], [ 71.1502167, 23.2785462 ], [ 71.1495108, 23.2779121 ] ] ], [ [ [ 71.015725, 23.296096594960964 ], [ 71.0158054, 23.2961567 ], [ 71.0163605, 23.2960214 ], [ 71.0163682, 23.296536 ], [ 71.0200008, 23.2972612 ], [ 71.0209286, 23.2941612 ], [ 71.0212032, 23.2939004 ], [ 71.021602, 23.2926086 ], [ 71.0213236, 23.2926122 ], [ 71.0213159, 23.2920975 ], [ 71.0210373, 23.2921011 ], [ 71.0211565, 23.2908129 ], [ 71.0208742, 23.2905593 ], [ 71.0207277, 23.2900465 ], [ 71.0212847, 23.2900393 ], [ 71.0214079, 23.2890083 ], [ 71.0211255, 23.2887547 ], [ 71.0212457, 23.2874665 ], [ 71.0234642, 23.286794 ], [ 71.0240135, 23.2862724 ], [ 71.0265183, 23.2861117 ], [ 71.0266336, 23.2845663 ], [ 71.0269042, 23.284048 ], [ 71.0268927, 23.2832763 ], [ 71.0267519, 23.283149 ], [ 71.026193, 23.283028 ], [ 71.0259027, 23.2822597 ], [ 71.0261792, 23.282127 ], [ 71.0270169, 23.2822453 ], [ 71.0270051, 23.2814735 ], [ 71.0275621, 23.2814663 ], [ 71.0275544, 23.2809516 ], [ 71.0292077, 23.2797719 ], [ 71.0297609, 23.2795075 ], [ 71.0311533, 23.2794893 ], [ 71.0314357, 23.279743 ], [ 71.0317143, 23.2797394 ], [ 71.0322673, 23.279475 ], [ 71.0350444, 23.2789242 ], [ 71.0353191, 23.2786634 ], [ 71.0372569, 23.2778662 ], [ 71.0400477, 23.2782164 ], [ 71.0400556, 23.2787309 ], [ 71.0406126, 23.2787237 ], [ 71.040512, 23.2812983 ], [ 71.0401045, 23.2819465 ], [ 71.0395494, 23.2820828 ], [ 71.0396921, 23.2823383 ], [ 71.0395808, 23.284141 ], [ 71.0404223, 23.2845158 ], [ 71.0426523, 23.2846158 ], [ 71.0429189, 23.2838403 ], [ 71.0440272, 23.2834394 ], [ 71.0459728, 23.2831567 ], [ 71.0476498, 23.2835213 ], [ 71.0480749, 23.2840305 ], [ 71.0482304, 23.2850577 ], [ 71.0493483, 23.2853003 ], [ 71.0493404, 23.2847859 ], [ 71.0496209, 23.2849104 ], [ 71.0512899, 23.2847604 ], [ 71.0512822, 23.2842459 ], [ 71.052955, 23.2843521 ], [ 71.0535082, 23.2840875 ], [ 71.0546222, 23.284073 ], [ 71.0548968, 23.2838122 ], [ 71.0554517, 23.2836766 ], [ 71.0557144, 23.2826438 ], [ 71.0545965, 23.2824011 ], [ 71.0545886, 23.2818866 ], [ 71.0540297, 23.2817647 ], [ 71.0534648, 23.2812574 ], [ 71.0527621, 23.2808811 ], [ 71.0527227, 23.2783085 ], [ 71.0524362, 23.2777974 ], [ 71.0524285, 23.277283 ], [ 71.0518596, 23.2765185 ], [ 71.0517129, 23.2760057 ], [ 71.0505931, 23.2756337 ], [ 71.0491987, 23.2755239 ], [ 71.0490471, 23.2747538 ], [ 71.0489065, 23.2746266 ], [ 71.0472315, 23.2743911 ], [ 71.0461096, 23.273891 ], [ 71.0441544, 23.2735309 ], [ 71.0441465, 23.2730165 ], [ 71.0419206, 23.2731737 ], [ 71.0410813, 23.2729273 ], [ 71.0407989, 23.2726736 ], [ 71.038014, 23.2727097 ], [ 71.0374493, 23.2722025 ], [ 71.0360607, 23.2724778 ], [ 71.0352174, 23.2719741 ], [ 71.0346604, 23.2719813 ], [ 71.0343839, 23.272114 ], [ 71.0343722, 23.2713421 ], [ 71.0338152, 23.2713493 ], [ 71.0338231, 23.271864 ], [ 71.0318717, 23.2717602 ], [ 71.031307, 23.2712527 ], [ 71.0304676, 23.2710063 ], [ 71.0296322, 23.271017 ], [ 71.029079, 23.2712816 ], [ 71.0271257, 23.2710496 ], [ 71.0268513, 23.2713104 ], [ 71.0254587, 23.2713283 ], [ 71.0251785, 23.2712038 ], [ 71.0251862, 23.2717184 ], [ 71.0243487, 23.2716001 ], [ 71.0240664, 23.2713463 ], [ 71.0212815, 23.2713822 ], [ 71.0204421, 23.2711357 ], [ 71.0187714, 23.2711573 ], [ 71.0159942, 23.2717077 ], [ 71.015648096927293, 23.271852984200912 ], [ 71.0137799, 23.2726372 ], [ 71.0137876, 23.2731518 ], [ 71.0132325, 23.2732871 ], [ 71.0126833, 23.2738088 ], [ 71.0121282, 23.273945 ], [ 71.0118653, 23.2749777 ], [ 71.0113102, 23.2751131 ], [ 71.0107629, 23.2757638 ], [ 71.0113198, 23.2757568 ], [ 71.0113236, 23.276014 ], [ 71.0107666, 23.2760212 ], [ 71.0106347, 23.2765375 ], [ 71.0098184, 23.2778347 ], [ 71.0098532, 23.2801503 ], [ 71.009304, 23.2806719 ], [ 71.009173, 23.2811883 ], [ 71.0100084, 23.2811775 ], [ 71.0100161, 23.2816921 ], [ 71.0091768, 23.2814455 ], [ 71.009331, 23.2824729 ], [ 71.0097608, 23.2832395 ], [ 71.0092038, 23.2832465 ], [ 71.0097802, 23.2845258 ], [ 71.0092231, 23.284533 ], [ 71.009227, 23.2847902 ], [ 71.009784, 23.284783 ], [ 71.0099305, 23.2852958 ], [ 71.0096597, 23.285814 ], [ 71.0096636, 23.2860713 ], [ 71.009946, 23.2863251 ], [ 71.0099653, 23.2876114 ], [ 71.010534, 23.2883761 ], [ 71.0105455, 23.289148 ], [ 71.011122, 23.2904273 ], [ 71.0115712, 23.2924803 ], [ 71.0121282, 23.2924731 ], [ 71.0124183, 23.2932414 ], [ 71.0129755, 23.2932342 ], [ 71.0148126, 23.2950119 ], [ 71.01496, 23.2955247 ], [ 71.015725, 23.296096594960964 ] ] ], [ [ [ 71.1055573, 23.281468 ], [ 71.1005505, 23.2819206 ], [ 71.1004129, 23.2820516 ], [ 71.100429, 23.2830807 ], [ 71.1002923, 23.2832108 ], [ 71.0991803, 23.2833548 ], [ 71.0991924, 23.2841265 ], [ 71.0986354, 23.284134 ], [ 71.0987783, 23.2843894 ], [ 71.0986556, 23.2854204 ], [ 71.09782, 23.2854315 ], [ 71.098528, 23.2861941 ], [ 71.0985481, 23.2874805 ], [ 71.0991132, 23.2879875 ], [ 71.0996864, 23.2890091 ], [ 71.0998382, 23.2897791 ], [ 71.1003954, 23.2897715 ], [ 71.10069, 23.2907968 ], [ 71.1023712, 23.2914173 ], [ 71.1029363, 23.2919242 ], [ 71.1034933, 23.2919169 ], [ 71.1037758, 23.2921703 ], [ 71.1046153, 23.2924164 ], [ 71.1057274, 23.2922733 ], [ 71.1059898, 23.2912404 ], [ 71.1057112, 23.2912442 ], [ 71.105703, 23.2907297 ], [ 71.106813, 23.2904574 ], [ 71.1065265, 23.2899467 ], [ 71.1079149, 23.2896706 ], [ 71.1083241, 23.2891505 ], [ 71.1085906, 23.288375 ], [ 71.1096883, 23.287331 ], [ 71.1098119, 23.2863 ], [ 71.1103729, 23.2865498 ], [ 71.1099141, 23.2839826 ], [ 71.109349, 23.2834755 ], [ 71.1092022, 23.282963 ], [ 71.1083666, 23.2829741 ], [ 71.1086371, 23.2824559 ], [ 71.1063989, 23.2818422 ], [ 71.1055654, 23.2819824 ], [ 71.1055573, 23.281468 ] ] ], [ [ [ 70.8014531, 23.1637828 ], [ 70.8013202, 23.164299 ], [ 70.7999564, 23.1663734 ], [ 70.7996986, 23.1679206 ], [ 70.798881, 23.1692167 ], [ 70.798606, 23.1694772 ], [ 70.7980804, 23.1717994 ], [ 70.7975342, 23.1725777 ], [ 70.7967232, 23.1743885 ], [ 70.79673, 23.1749032 ], [ 70.7964552, 23.1751636 ], [ 70.7959158, 23.1764566 ], [ 70.7950944, 23.1774955 ], [ 70.7945584, 23.1790457 ], [ 70.7942836, 23.1793061 ], [ 70.7938803, 23.1803401 ], [ 70.7936019, 23.1803433 ], [ 70.7936053, 23.1806008 ], [ 70.7972392, 23.181717 ], [ 70.797521, 23.181971 ], [ 70.8081443, 23.1853243 ], [ 70.8098908, 23.1806716 ], [ 70.8106807, 23.1773169 ], [ 70.8110849, 23.1762829 ], [ 70.8121947, 23.1760126 ], [ 70.8136799, 23.1726499 ], [ 70.8151452, 23.1677433 ], [ 70.8123569, 23.1673889 ], [ 70.8112367, 23.1668871 ], [ 70.8084469, 23.1664044 ], [ 70.80565, 23.1654071 ], [ 70.8050864, 23.1648988 ], [ 70.8014531, 23.1637828 ] ] ], [ [ [ 68.879713895596581, 24.267481328277221 ], [ 68.879722, 24.2675141 ], [ 68.880556, 24.270833 ], [ 68.8816734, 24.2753047 ], [ 68.881675598823321, 24.275312577103346 ], [ 68.8818204, 24.2750659 ], [ 68.8818213, 24.2740363 ], [ 68.8822435, 24.2733927 ], [ 68.8830861, 24.2732651 ], [ 68.8828049, 24.2737796 ], [ 68.8839283, 24.2735231 ], [ 68.8839277, 24.274038 ], [ 68.8842088, 24.2739091 ], [ 68.8847703, 24.2739094 ], [ 68.8850513, 24.2737813 ], [ 68.8850506, 24.2745536 ], [ 68.8844892, 24.2742958 ], [ 68.8847688, 24.275583 ], [ 68.8853303, 24.2757117 ], [ 68.8854701, 24.275841 ], [ 68.8856096, 24.2773855 ], [ 68.8864518, 24.2776435 ], [ 68.8864522, 24.2771287 ], [ 68.8858907, 24.2771283 ], [ 68.8861725, 24.2760988 ], [ 68.886734, 24.2760994 ], [ 68.8868735, 24.2766142 ], [ 68.8879958, 24.2776447 ], [ 68.8879948, 24.2786743 ], [ 68.8884163, 24.2790603 ], [ 68.8898204, 24.2790614 ], [ 68.8902405, 24.2797057 ], [ 68.8909424, 24.2803492 ], [ 68.891504, 24.2804787 ], [ 68.8912224, 24.2815082 ], [ 68.8900993, 24.28125 ], [ 68.8910802, 24.2827951 ], [ 68.8909392, 24.2840822 ], [ 68.8915011, 24.2839533 ], [ 68.8917822, 24.2836962 ], [ 68.8923437, 24.2838257 ], [ 68.8923441, 24.2833109 ], [ 68.8926249, 24.2833111 ], [ 68.8929048, 24.2843409 ], [ 68.8920625, 24.2843404 ], [ 68.8920621, 24.2845978 ], [ 68.8926238, 24.2845982 ], [ 68.8926234, 24.285113 ], [ 68.8943082, 24.2853715 ], [ 68.894307, 24.2866586 ], [ 68.8945879, 24.2866588 ], [ 68.8945884, 24.2858866 ], [ 68.8954312, 24.2856297 ], [ 68.8955705, 24.2864022 ], [ 68.8958512, 24.2866598 ], [ 68.8965525, 24.2880754 ], [ 68.8968334, 24.2880756 ], [ 68.8971144, 24.2878185 ], [ 68.8973953, 24.2878187 ], [ 68.8978156, 24.2882054 ], [ 68.8979559, 24.2892353 ], [ 68.8985178, 24.2889782 ], [ 68.8986569, 24.2900079 ], [ 68.8990781, 24.2905229 ], [ 68.8982356, 24.2905224 ], [ 68.8982352, 24.2910372 ], [ 68.8985161, 24.2909083 ], [ 68.8990778, 24.2909087 ], [ 68.90006, 24.2912959 ], [ 68.9000594, 24.2920682 ], [ 68.9011821, 24.292841 ], [ 68.9010419, 24.2933558 ], [ 68.9004801, 24.2933555 ], [ 68.9004796, 24.2941277 ], [ 68.9010413, 24.2939988 ], [ 68.9011811, 24.2941281 ], [ 68.9010407, 24.2946429 ], [ 68.9021643, 24.2943863 ], [ 68.902304, 24.2949011 ], [ 68.9027255, 24.2951587 ], [ 68.9030071, 24.2941292 ], [ 68.9024454, 24.294129 ], [ 68.902586, 24.2933568 ], [ 68.902727, 24.2932277 ], [ 68.9035693, 24.2933574 ], [ 68.9032879, 24.2941294 ], [ 68.9055346, 24.2943884 ], [ 68.9051131, 24.2938731 ], [ 68.9051133, 24.2936159 ], [ 68.9053945, 24.2931013 ], [ 68.9053951, 24.292329 ], [ 68.9049753, 24.2910415 ], [ 68.905537, 24.2910419 ], [ 68.9055363, 24.2920716 ], [ 68.906098, 24.292072 ], [ 68.90615, 24.292263896774177 ], [ 68.9062375, 24.2925868 ], [ 68.90635, 24.292689822662553 ], [ 68.9066589, 24.2929727 ], [ 68.9072206, 24.2931022 ], [ 68.9070791, 24.2938745 ], [ 68.9075006, 24.2943895 ], [ 68.9069388, 24.2943891 ], [ 68.9069383, 24.2951614 ], [ 68.9075, 24.2951617 ], [ 68.9075004, 24.2946469 ], [ 68.9083425, 24.2951623 ], [ 68.9083431, 24.2943901 ], [ 68.9086238, 24.2945184 ], [ 68.9094665, 24.2943906 ], [ 68.909466, 24.2951629 ], [ 68.9089043, 24.2951627 ], [ 68.9091845, 24.2959349 ], [ 68.9108695, 24.2961935 ], [ 68.9107283, 24.2964507 ], [ 68.9105875, 24.2977376 ], [ 68.9108683, 24.2976087 ], [ 68.9117109, 24.2976093 ], [ 68.9118508, 24.2977384 ], [ 68.9119912, 24.2985108 ], [ 68.9128338, 24.2986395 ], [ 68.9131146, 24.2985114 ], [ 68.9131142, 24.2990262 ], [ 68.9125525, 24.2990258 ], [ 68.9125521, 24.2995407 ], [ 68.9131139, 24.2996692 ], [ 68.9133945, 24.2999268 ], [ 68.9150796, 24.2999278 ], [ 68.9153603, 24.3003144 ], [ 68.9145177, 24.3003141 ], [ 68.9146574, 24.3005715 ], [ 68.9149439, 24.3010824 ], [ 68.9148031, 24.3023693 ], [ 68.9142412, 24.3024973 ], [ 68.9136793, 24.3028836 ], [ 68.9140996, 24.3033986 ], [ 68.9143801, 24.304171 ], [ 68.9146608, 24.3044287 ], [ 68.9148014, 24.3049435 ], [ 68.9142397, 24.3046857 ], [ 68.9146598, 24.3057156 ], [ 68.9146596, 24.305973 ], [ 68.9143786, 24.3062304 ], [ 68.9143784, 24.3064876 ], [ 68.9150809, 24.3068737 ], [ 68.9187314, 24.3081627 ], [ 68.9192931, 24.3081631 ], [ 68.9195742, 24.308035 ], [ 68.9197137, 24.3088074 ], [ 68.920007446189402, 24.309166392139403 ], [ 68.9201351, 24.3093224 ], [ 68.918948655693811, 24.309166392139403 ], [ 68.9181692, 24.3090639 ], [ 68.9181694, 24.308549 ], [ 68.9176075, 24.3088063 ], [ 68.917757617784872, 24.309219712815526 ], [ 68.9178879, 24.3095785 ], [ 68.9167643, 24.309578 ], [ 68.917045, 24.3099637 ], [ 68.9178876, 24.3102217 ], [ 68.9183081, 24.3106084 ], [ 68.9184487, 24.3111234 ], [ 68.9192913, 24.3111238 ], [ 68.91901, 24.3116384 ], [ 68.9184485, 24.3113806 ], [ 68.9184481, 24.3118955 ], [ 68.9190098, 24.3120242 ], [ 68.9191497, 24.3121533 ], [ 68.9190095, 24.3126681 ], [ 68.919852, 24.3127968 ], [ 68.9201327, 24.3130544 ], [ 68.9206944, 24.3131837 ], [ 68.9209749, 24.3139561 ], [ 68.9201321, 24.3142132 ], [ 68.9201323, 24.3136984 ], [ 68.9192897, 24.3136978 ], [ 68.9192899, 24.3131831 ], [ 68.9181665, 24.3130533 ], [ 68.9178859, 24.3127957 ], [ 68.9167624, 24.3126668 ], [ 68.9169019, 24.3131818 ], [ 68.9170429, 24.3133101 ], [ 68.9176044, 24.3134396 ], [ 68.9174634, 24.3136968 ], [ 68.9174631, 24.3142117 ], [ 68.9176039, 24.3144693 ], [ 68.9170422, 24.3143398 ], [ 68.9164806, 24.3139537 ], [ 68.9162004, 24.312924 ], [ 68.9159195, 24.3129238 ], [ 68.9159191, 24.3134387 ], [ 68.9147957, 24.3134381 ], [ 68.915357, 24.3140815 ], [ 68.9159187, 24.3142109 ], [ 68.916058, 24.3152406 ], [ 68.9159178, 24.3154978 ], [ 68.9150754, 24.3149826 ], [ 68.9150758, 24.3144678 ], [ 68.914233, 24.3147248 ], [ 68.9139514, 24.3157543 ], [ 68.912547, 24.3156243 ], [ 68.9105812, 24.31498 ], [ 68.9102996, 24.3160094 ], [ 68.9091762, 24.3158796 ], [ 68.9088949, 24.316137 ], [ 68.9080522, 24.3163939 ], [ 68.9072096, 24.316265 ], [ 68.9072092, 24.3167798 ], [ 68.9063667, 24.316522 ], [ 68.906647, 24.3172943 ], [ 68.90635, 24.317348553719658 ], [ 68.9052423, 24.3175509 ], [ 68.9052421, 24.3178083 ], [ 68.906241155907921, 24.317808833493721 ], [ 68.9063657, 24.3178089 ], [ 68.906505, 24.3185814 ], [ 68.906365, 24.3188386 ], [ 68.90635, 24.318837825109767 ], [ 68.9038369, 24.318708 ], [ 68.903275, 24.318965 ], [ 68.9027131, 24.3189646 ], [ 68.9024323, 24.3188361 ], [ 68.902152, 24.3180637 ], [ 68.9015903, 24.3180633 ], [ 68.9015905, 24.3178061 ], [ 68.9021522, 24.3178063 ], [ 68.9021525, 24.3172916 ], [ 68.90131, 24.3172911 ], [ 68.9013096, 24.3178059 ], [ 68.9005867, 24.3177264 ], [ 68.900573767512725, 24.31773494615004 ], [ 68.9005737, 24.3177363 ], [ 68.900556, 24.318056 ], [ 68.905, 24.320833 ], [ 68.91, 24.3225 ], [ 68.915278, 24.324444 ], [ 68.920833, 24.325278 ], [ 68.926944, 24.325556 ], [ 68.9325, 24.323056 ], [ 68.937222, 24.32 ], [ 68.941944, 24.316944 ], [ 68.945556, 24.313333 ], [ 68.950278, 24.310278 ], [ 68.953889, 24.306667 ], [ 68.956111, 24.301944 ], [ 68.958611, 24.297222 ], [ 68.959722, 24.292222 ], [ 68.961667, 24.2875 ], [ 68.963611, 24.283056 ], [ 68.965556, 24.278333 ], [ 68.9675, 24.273611 ], [ 68.970278, 24.269722 ], [ 68.973333, 24.265556 ], [ 68.976944, 24.261944 ], [ 68.980833, 24.258333 ], [ 68.988056, 24.256944 ], [ 68.994444, 24.257778 ], [ 69.0, 24.258611 ], [ 69.005833, 24.259722 ], [ 69.011389, 24.260556 ], [ 69.016389, 24.2625 ], [ 69.020833, 24.265 ], [ 69.026111, 24.266944 ], [ 69.030556, 24.269444 ], [ 69.035, 24.271944 ], [ 69.039444, 24.274722 ], [ 69.043889, 24.277222 ], [ 69.048333, 24.279722 ], [ 69.053056, 24.2825 ], [ 69.0575, 24.285 ], [ 69.061944, 24.2875 ], [ 69.066389, 24.290278 ], [ 69.070833, 24.292778 ], [ 69.075833, 24.294722 ], [ 69.080278, 24.297222 ], [ 69.087222, 24.296667 ], [ 69.093611, 24.294444 ], [ 69.099167, 24.291944 ], [ 69.105556, 24.29 ], [ 69.111944, 24.288056 ], [ 69.1175, 24.285556 ], [ 69.123889, 24.283333 ], [ 69.130556, 24.281389 ], [ 69.136111, 24.278889 ], [ 69.141667, 24.276389 ], [ 69.147222, 24.273889 ], [ 69.152778, 24.271111 ], [ 69.158333, 24.268611 ], [ 69.163611, 24.266111 ], [ 69.169444, 24.263611 ], [ 69.174722, 24.261111 ], [ 69.182222, 24.259722 ], [ 69.189444, 24.258056 ], [ 69.195, 24.259167 ], [ 69.200833, 24.26 ], [ 69.206389, 24.261111 ], [ 69.211944, 24.261944 ], [ 69.216944, 24.263889 ], [ 69.221667, 24.266389 ], [ 69.226667, 24.268056 ], [ 69.2285447, 24.2690715 ], [ 69.232778, 24.271667 ], [ 69.238056, 24.273611 ], [ 69.2425, 24.276111 ], [ 69.2475, 24.277778 ], [ 69.2525, 24.279722 ], [ 69.258333, 24.280556 ], [ 69.263333, 24.2825 ], [ 69.268333, 24.284167 ], [ 69.273333, 24.285833 ], [ 69.278611, 24.288333 ], [ 69.283611, 24.290278 ], [ 69.288889, 24.291944 ], [ 69.294444, 24.292778 ], [ 69.299444, 24.294722 ], [ 69.305, 24.295556 ], [ 69.310833, 24.296667 ], [ 69.316944, 24.296667 ], [ 69.324167, 24.295278 ], [ 69.331667, 24.293611 ], [ 69.338056, 24.291667 ], [ 69.345556, 24.290278 ], [ 69.352778, 24.288611 ], [ 69.36, 24.287222 ], [ 69.366944, 24.286389 ], [ 69.373611, 24.285833 ], [ 69.380278, 24.285 ], [ 69.386667, 24.285278 ], [ 69.392778, 24.285278 ], [ 69.398889, 24.285556 ], [ 69.404722, 24.286389 ], [ 69.410833, 24.286667 ], [ 69.416389, 24.2875 ], [ 69.422222, 24.288333 ], [ 69.428333, 24.288611 ], [ 69.435, 24.287778 ], [ 69.441944, 24.287222 ], [ 69.449167, 24.285556 ], [ 69.455556, 24.283611 ], [ 69.462778, 24.282222 ], [ 69.469722, 24.281389 ], [ 69.476389, 24.280833 ], [ 69.483333, 24.28 ], [ 69.489444, 24.280278 ], [ 69.496111, 24.279444 ], [ 69.5025, 24.279722 ], [ 69.508611, 24.279722 ], [ 69.514167, 24.280833 ], [ 69.519722, 24.281667 ], [ 69.526111, 24.281667 ], [ 69.531667, 24.282778 ], [ 69.538056, 24.282778 ], [ 69.543611, 24.283889 ], [ 69.5944482, 24.2986393 ], [ 69.7021445, 24.2018745 ], [ 69.7057582, 24.1988925 ], [ 69.7293643, 24.1765119 ], [ 69.7318624, 24.1741236 ], [ 69.7344895, 24.1728786 ], [ 69.7422246, 24.1713869 ], [ 69.7500026, 24.1719419 ], [ 69.7577806, 24.1716649 ], [ 69.7652806, 24.1713869 ], [ 69.7730586, 24.1719419 ], [ 69.7808356, 24.1716649 ], [ 69.7883356, 24.1716649 ], [ 69.7963916, 24.1719419 ], [ 69.8038916, 24.1719419 ], [ 69.8116696, 24.1716649 ], [ 69.8194466, 24.1722199 ], [ 69.8272246, 24.1719419 ], [ 69.8347246, 24.1716649 ], [ 69.8425026, 24.1722199 ], [ 69.8502806, 24.1719419 ], [ 69.8580586, 24.1724979 ], [ 69.8658356, 24.1722199 ], [ 69.8733356, 24.1719419 ], [ 69.8811136, 24.1724979 ], [ 69.8888916, 24.1722199 ], [ 69.8963916, 24.1722199 ], [ 69.9044466, 24.1724979 ], [ 69.9119466, 24.1724979 ], [ 69.9197246, 24.1722199 ], [ 69.9275026, 24.1727759 ], [ 69.9350026, 24.1724979 ], [ 69.9430586, 24.1730539 ], [ 69.9505586, 24.1727759 ], [ 69.9583356, 24.1724979 ], [ 69.9661136, 24.1730539 ], [ 69.9736136, 24.1727759 ], [ 69.9813916, 24.1724979 ], [ 69.9891696, 24.1730539 ], [ 69.9969466, 24.1727759 ], [ 70.0044466, 24.1724979 ], [ 70.0125026, 24.1730539 ], [ 70.0200026, 24.1727759 ], [ 70.0277806, 24.1727759 ], [ 70.0308356, 24.1733309 ], [ 70.0355586, 24.1758309 ], [ 70.0400026, 24.1786089 ], [ 70.0425583, 24.1821268 ], [ 70.0489844, 24.1925709 ], [ 70.0638907, 24.2001852 ], [ 70.0767979, 24.2292165 ], [ 70.1052158, 24.2943467 ], [ 70.1141531, 24.2972153 ], [ 70.1172081, 24.3036043 ], [ 70.1210971, 24.3091603 ], [ 70.1221097, 24.309225 ], [ 70.1258427, 24.3094413 ], [ 70.1313987, 24.3105533 ], [ 70.1372317, 24.3113863 ], [ 70.1433427, 24.3113863 ], [ 70.1488987, 24.3124973 ], [ 70.1552877, 24.3124973 ], [ 70.1613987, 24.3124973 ], [ 70.1675097, 24.3127753 ], [ 70.1738987, 24.3127753 ], [ 70.1794537, 24.3136083 ], [ 70.1850097, 24.3144413 ], [ 70.1905657, 24.3155533 ], [ 70.1958427, 24.3172193 ], [ 70.2002877, 24.3197193 ], [ 70.2047317, 24.3222193 ], [ 70.2088987, 24.3258303 ], [ 70.2127877, 24.3291643 ], [ 70.213534507246237, 24.329584422868859 ], [ 70.2135674, 24.3294819 ], [ 70.2137796, 24.3287663 ], [ 70.2139137, 24.3276975 ], [ 70.2139426, 24.3269869 ], [ 70.2136485, 24.3261627 ], [ 70.2139385, 24.3256452 ], [ 70.2139319, 24.3252969 ], [ 70.2136946, 24.3251007 ], [ 70.2240159, 24.2785944 ], [ 70.210353, 24.2608011 ], [ 70.1606898, 24.2467624 ], [ 70.1097291, 24.2179862 ], [ 70.0910783, 24.1902935 ], [ 70.0724274, 24.1487432 ], [ 70.0763311, 24.1368692 ], [ 70.0867409, 24.1273692 ], [ 70.1117193, 24.1192413 ], [ 70.1083289, 24.0828775 ], [ 70.0951914, 24.0259901 ], [ 70.0968866, 23.974886 ], [ 70.1011245, 23.9508756 ], [ 70.1201951, 23.9218248 ], [ 70.1409609, 23.9144642 ], [ 70.1727516, 23.9189909 ], [ 70.1713774, 23.9218327 ], [ 70.1711135, 23.9236363 ], [ 70.170563, 23.9246701 ], [ 70.17057, 23.9254422 ], [ 70.1714261, 23.9272375 ], [ 70.1714469, 23.9295537 ], [ 70.1717316, 23.9300663 ], [ 70.1720279, 23.9318657 ], [ 70.1725972, 23.9328911 ], [ 70.1734441, 23.9336567 ], [ 70.1738811, 23.935455 ], [ 70.1750067, 23.9360895 ], [ 70.1758538, 23.9368552 ], [ 70.176415, 23.9369799 ], [ 70.1767021, 23.9377499 ], [ 70.1786681, 23.9383779 ], [ 70.180628, 23.9383628 ], [ 70.1809104, 23.938618 ], [ 70.1828705, 23.938603 ], [ 70.1842753, 23.9391069 ], [ 70.1859553, 23.9390939 ], [ 70.1901649, 23.9400908 ], [ 70.1932451, 23.940067 ], [ 70.1957557, 23.9390179 ], [ 70.197431, 23.9384902 ], [ 70.1977087, 23.9382305 ], [ 70.1988253, 23.9378363 ], [ 70.1990863, 23.9357752 ], [ 70.2024331, 23.934333 ], [ 70.2060636, 23.9332749 ], [ 70.2083036, 23.9332574 ], [ 70.2096964, 23.9324741 ], [ 70.2102552, 23.9323417 ], [ 70.2106699, 23.9318236 ], [ 70.2108056, 23.9313076 ], [ 70.2119171, 23.9303976 ], [ 70.2138723, 23.9298675 ], [ 70.2144274, 23.9293483 ], [ 70.2166661, 23.9292024 ], [ 70.2169534, 23.9299722 ], [ 70.2180696, 23.9295768 ], [ 70.2197485, 23.9294352 ], [ 70.2204406, 23.9286577 ], [ 70.2205763, 23.9281419 ], [ 70.2216939, 23.9278756 ], [ 70.2226637, 23.9268383 ], [ 70.2233495, 23.9252885 ], [ 70.2244682, 23.9251504 ], [ 70.2253008, 23.9243717 ], [ 70.2280957, 23.9238346 ], [ 70.2287422052529, 23.923630737024645 ], [ 70.2306083, 23.9230423 ], [ 70.2314493, 23.9231648 ], [ 70.2318738, 23.9236762 ], [ 70.2320192, 23.9241897 ], [ 70.2342503, 23.9232706 ], [ 70.2350853, 23.9227491 ], [ 70.2356417, 23.922359 ], [ 70.235929, 23.9231288 ], [ 70.2370551, 23.9237628 ], [ 70.2395846, 23.9247718 ], [ 70.2407045, 23.9247629 ], [ 70.2423769, 23.9239773 ], [ 70.2440543, 23.9237062 ], [ 70.2448869, 23.9229274 ], [ 70.2465593, 23.9221417 ], [ 70.2473919, 23.9213628 ], [ 70.2501841, 23.9205679 ], [ 70.2518638, 23.9205543 ], [ 70.2524213, 23.9202923 ], [ 70.2538211, 23.920281 ], [ 70.2543835, 23.9205337 ], [ 70.2563446, 23.9206469 ], [ 70.2567591, 23.9201287 ], [ 70.2574446, 23.9185789 ], [ 70.2605228, 23.9184244 ], [ 70.2619263, 23.9187994 ], [ 70.2624988, 23.9200816 ], [ 70.2636249, 23.9207153 ], [ 70.2672607, 23.9202999 ], [ 70.2676852, 23.9208111 ], [ 70.2678307, 23.9213247 ], [ 70.2681119, 23.9214505 ], [ 70.2695105, 23.9213109 ], [ 70.2696349, 23.9197654 ], [ 70.2705952, 23.9176985 ], [ 70.2708751, 23.9176962 ], [ 70.2708802, 23.9182109 ], [ 70.2717162, 23.9178176 ], [ 70.2739571, 23.9179281 ], [ 70.2742472, 23.9189552 ], [ 70.2756508, 23.9193292 ], [ 70.2759333, 23.9195842 ], [ 70.2764945, 23.9197087 ], [ 70.2767668, 23.9189342 ], [ 70.2784442, 23.918663 ], [ 70.2789889, 23.9171141 ], [ 70.2795449, 23.9167231 ], [ 70.2803848, 23.9167161 ], [ 70.280946, 23.9168559 ], [ 70.2809562, 23.9178854 ], [ 70.2820734, 23.9176187 ], [ 70.2823635, 23.9186458 ], [ 70.2829235, 23.918641 ], [ 70.2830654, 23.9188973 ], [ 70.2830732, 23.9196694 ], [ 70.2829348, 23.9197989 ], [ 70.2823761, 23.9199327 ], [ 70.2825207, 23.9204462 ], [ 70.2828033, 23.9207011 ], [ 70.2829488, 23.9212147 ], [ 70.28379, 23.921336 ], [ 70.2846262, 23.9209433 ], [ 70.2843538, 23.9217178 ], [ 70.2863098, 23.9213148 ], [ 70.2874398, 23.9223349 ], [ 70.2885648, 23.9228402 ], [ 70.2896923, 23.9236029 ], [ 70.2908199, 23.9243657 ], [ 70.2916585, 23.9242303 ], [ 70.2919204, 23.9224265 ], [ 70.2916419, 23.9225569 ], [ 70.2899607, 23.922443 ], [ 70.2898125, 23.921672 ], [ 70.2899378, 23.9201268 ], [ 70.2907789, 23.9202479 ], [ 70.2916239, 23.9207556 ], [ 70.2938687, 23.9212513 ], [ 70.2969599, 23.922384 ], [ 70.2972554, 23.9239259 ], [ 70.2978165, 23.9240493 ], [ 70.2986642, 23.9248142 ], [ 70.2989441, 23.9248119 ], [ 70.3006161, 23.9240257 ], [ 70.3008962, 23.9240232 ], [ 70.3017413, 23.9245308 ], [ 70.3020212, 23.9245284 ], [ 70.302856, 23.9240066 ], [ 70.3036906, 23.9234847 ], [ 70.3042493, 23.9233519 ], [ 70.3045164, 23.9220627 ], [ 70.3056388, 23.9223105 ], [ 70.3059265, 23.9230803 ], [ 70.3087352, 23.9239567 ], [ 70.3126, 23.923923754043241 ], [ 70.3129348, 23.9239209 ], [ 70.3154649, 23.9249287 ], [ 70.3157475, 23.9251837 ], [ 70.3165901, 23.9254339 ], [ 70.3185471, 23.9251597 ], [ 70.3193924, 23.9256671 ], [ 70.3210775, 23.9261674 ], [ 70.322196, 23.9260296 ], [ 70.3222039, 23.9268017 ], [ 70.3241729, 23.9276851 ], [ 70.324738, 23.928195 ], [ 70.3281043, 23.9288098 ], [ 70.329341, 23.9293016 ], [ 70.3317756, 23.9324595 ], [ 70.3345472, 23.9358429 ], [ 70.3394913, 23.9409782 ], [ 70.340232, 23.9411252 ], [ 70.3414134, 23.9420728 ], [ 70.3427715, 23.94228 ], [ 70.3452789, 23.9425626 ], [ 70.3442485, 23.9418859 ], [ 70.3442042, 23.9409916 ], [ 70.3448713, 23.9404651 ], [ 70.3468116, 23.9396994 ], [ 70.3474031, 23.9395996 ], [ 70.347673, 23.9383528 ], [ 70.3485646, 23.9373942 ], [ 70.3487245, 23.936825 ], [ 70.3474782, 23.9371138 ], [ 70.3470947, 23.9359418 ], [ 70.3461973, 23.9360186 ], [ 70.3450321, 23.9354107 ], [ 70.3444031, 23.9343711 ], [ 70.3440399, 23.9331241 ], [ 70.3437442, 23.9321003 ], [ 70.3432463, 23.9315611 ], [ 70.3421856, 23.9305588 ], [ 70.3416131, 23.9305775 ], [ 70.3411623, 23.9301625 ], [ 70.3404582, 23.9294652 ], [ 70.3393382, 23.9287102 ], [ 70.3375675, 23.9284714 ], [ 70.3353026, 23.928581 ], [ 70.3331335, 23.929534 ], [ 70.3336479, 23.9280966 ], [ 70.3362733, 23.9258973 ], [ 70.3381787, 23.9257658 ], [ 70.3381547, 23.9263792 ], [ 70.3384903, 23.9267079 ], [ 70.3392333, 23.926664 ], [ 70.3400721, 23.9258534 ], [ 70.3405275, 23.9258096 ], [ 70.3406497, 23.9256455 ], [ 70.3405635, 23.9253496 ], [ 70.3409949, 23.9250428 ], [ 70.3420015, 23.9252729 ], [ 70.342397, 23.925492 ], [ 70.3426337, 23.9258523 ], [ 70.343123, 23.9271014 ], [ 70.3438762, 23.92717 ], [ 70.3453516, 23.9274392 ], [ 70.3474133, 23.9277404 ], [ 70.3479758, 23.9279928 ], [ 70.3487485, 23.9282086 ], [ 70.3490241, 23.9281209 ], [ 70.349163, 23.9274884 ], [ 70.3503907, 23.9261263 ], [ 70.3503663, 23.9274527 ], [ 70.350793, 23.9292641 ], [ 70.3503053, 23.9303015 ], [ 70.3500427, 23.9310894 ], [ 70.3497072, 23.9319657 ], [ 70.3501257, 23.9314953 ], [ 70.3504133, 23.9312325 ], [ 70.3506889, 23.9311065 ], [ 70.3512474, 23.9306177 ], [ 70.3512995, 23.9303364 ], [ 70.3509646, 23.9302357 ], [ 70.3508088, 23.9301042 ], [ 70.3508038, 23.9299177 ], [ 70.3509428, 23.9297298 ], [ 70.3509765, 23.9293375 ], [ 70.3509885, 23.929217 ], [ 70.3512342, 23.9290308 ], [ 70.3515398, 23.9290527 ], [ 70.3520791, 23.9292553 ], [ 70.3525354, 23.9292286 ], [ 70.3529179, 23.9290143 ], [ 70.3533374, 23.9285488 ], [ 70.3534542, 23.9282202 ], [ 70.3535783, 23.9280442 ], [ 70.3537778, 23.9274644 ], [ 70.3539364, 23.927108 ], [ 70.3539053, 23.9267845 ], [ 70.3538121, 23.9265367 ], [ 70.3535532, 23.9260825 ], [ 70.3534589, 23.9259897 ], [ 70.3533539, 23.9260086 ], [ 70.3532505, 23.9261688 ], [ 70.3531018, 23.9264375 ], [ 70.3531253, 23.9265024 ], [ 70.3531709, 23.9265135 ], [ 70.353209, 23.9266219 ], [ 70.3531539, 23.9266761 ], [ 70.3531624, 23.9267265 ], [ 70.3530353, 23.9268349 ], [ 70.3529336, 23.9268465 ], [ 70.35287, 23.9269124 ], [ 70.3528531, 23.9269898 ], [ 70.3526285, 23.927168 ], [ 70.3526243, 23.9272609 ], [ 70.3524887, 23.9273577 ], [ 70.3523235, 23.927381 ], [ 70.3521243, 23.9275746 ], [ 70.3520309, 23.9273836 ], [ 70.3519547, 23.9272287 ], [ 70.3518487, 23.9271203 ], [ 70.3518403, 23.9266749 ], [ 70.351908, 23.9262605 ], [ 70.3517979, 23.9257958 ], [ 70.3518318, 23.9256486 ], [ 70.3517259, 23.9252962 ], [ 70.3517695, 23.9251354 ], [ 70.3521392, 23.9244821 ], [ 70.3529765, 23.9242175 ], [ 70.3536679, 23.9234392 ], [ 70.3538002, 23.922666 ], [ 70.3546335, 23.9220147 ], [ 70.3579916, 23.9218569 ], [ 70.3581256, 23.9213409 ], [ 70.3584029, 23.921081 ], [ 70.3585326, 23.9200504 ], [ 70.3590884, 23.919659 ], [ 70.3610481, 23.9196416 ], [ 70.3621719, 23.9200183 ], [ 70.3624602, 23.9207877 ], [ 70.363584, 23.9211634 ], [ 70.3663834, 23.9211385 ], [ 70.3677697, 23.9198393 ], [ 70.368047, 23.9195794 ], [ 70.3694467, 23.9195671 ], [ 70.3705705, 23.9199436 ], [ 70.370864, 23.9212279 ], [ 70.3711455, 23.9213536 ], [ 70.3725452, 23.9213411 ], [ 70.3731024, 23.9210788 ], [ 70.3750621, 23.9210612 ], [ 70.3761901, 23.9218232 ], [ 70.3826318, 23.9220228 ], [ 70.3834772, 23.9225299 ], [ 70.3854395, 23.9227696 ], [ 70.3882473, 23.9235163 ], [ 70.3896472, 23.9235036 ], [ 70.3918812, 23.9229688 ], [ 70.394401, 23.9229459 ], [ 70.3991685, 23.9236747 ], [ 70.3997312, 23.923927 ], [ 70.4005711, 23.9239192 ], [ 70.4011282, 23.9236567 ], [ 70.4036478, 23.9236339 ], [ 70.4044904, 23.9238835 ], [ 70.4053386, 23.9246478 ], [ 70.4072983, 23.9246299 ], [ 70.4084127, 23.924105 ], [ 70.4089725, 23.9240997 ], [ 70.4103751, 23.9243443 ], [ 70.4140005, 23.9230241 ], [ 70.416236, 23.922618 ], [ 70.4169466, 23.9236408 ], [ 70.4180776, 23.9246599 ], [ 70.4182265, 23.9254307 ], [ 70.4207447, 23.9252783 ], [ 70.4210275, 23.9255331 ], [ 70.4229885, 23.9256441 ], [ 70.4227171, 23.9264186 ], [ 70.423277, 23.9264135 ], [ 70.4230056, 23.927188 ], [ 70.423287, 23.9273137 ], [ 70.4241269, 23.9273059 ], [ 70.4244096, 23.9275607 ], [ 70.4258137, 23.9279342 ], [ 70.4261021, 23.9287036 ], [ 70.4269405, 23.9285668 ], [ 70.4277861, 23.9290735 ], [ 70.4283461, 23.9290684 ], [ 70.4289088, 23.9293205 ], [ 70.4297487, 23.9293127 ], [ 70.4339383, 23.9283732 ], [ 70.4336525, 23.9278612 ], [ 70.4347738, 23.927979 ], [ 70.4364452, 23.9271912 ], [ 70.4398046, 23.9271598 ], [ 70.4414786, 23.9266293 ], [ 70.4420328, 23.9261094 ], [ 70.443984, 23.925319 ], [ 70.4448237, 23.925311 ], [ 70.4453866, 23.9255632 ], [ 70.4470692, 23.9258047 ], [ 70.4495973, 23.926553 ], [ 70.4507186, 23.9266717 ], [ 70.4509785, 23.9248675 ], [ 70.4546164, 23.924704 ], [ 70.4599384, 23.9249109 ], [ 70.4694742, 23.9263641 ], [ 70.4762581, 23.9268956 ], [ 70.4797983, 23.9273205 ], [ 70.4815181, 23.9267633 ], [ 70.4826335, 23.926367 ], [ 70.4847868, 23.9252449 ], [ 70.4863781, 23.9244604 ], [ 70.4873572, 23.923233 ], [ 70.4893932, 23.9234224 ], [ 70.4894904, 23.9219861 ], [ 70.4905632, 23.9210381 ], [ 70.4922439, 23.9214958 ], [ 70.4917075, 23.9236205 ], [ 70.4918147, 23.926072 ], [ 70.4933524, 23.927216 ], [ 70.4954265, 23.9265623 ], [ 70.4972145, 23.9238166 ], [ 70.5028497, 23.9181942 ], [ 70.5084997, 23.9143369 ], [ 70.516939, 23.9115255 ], [ 70.5223745, 23.910741 ], [ 70.5265226, 23.9109371 ], [ 70.5305992, 23.9111332 ], [ 70.535391, 23.9138138 ], [ 70.5367499, 23.9174097 ], [ 70.545848, 23.9212398 ], [ 70.5441729, 23.9216431 ], [ 70.5445985, 23.9221534 ], [ 70.5447482, 23.9229242 ], [ 70.5436314, 23.9231927 ], [ 70.5439266, 23.9244764 ], [ 70.5446713, 23.9245566 ], [ 70.5446815, 23.9254099 ], [ 70.5444987, 23.9255002 ], [ 70.5445019, 23.9257575 ], [ 70.5447818, 23.9257546 ], [ 70.544875, 23.925584 ], [ 70.5450587, 23.9254946 ], [ 70.5452043, 23.9260079 ], [ 70.5453462, 23.9261345 ], [ 70.5461846, 23.9259979 ], [ 70.5464798, 23.9272817 ], [ 70.5478811, 23.9273959 ], [ 70.5481642, 23.9276505 ], [ 70.5484441, 23.9276476 ], [ 70.548721, 23.9273874 ], [ 70.5492793, 23.9272536 ], [ 70.5492732, 23.9267389 ], [ 70.5503914, 23.9265985 ], [ 70.551225, 23.9260754 ], [ 70.5517788, 23.925555 ], [ 70.551962, 23.9255125 ], [ 70.5521997, 23.92568 ], [ 70.5524335, 23.9255078 ], [ 70.5528986, 23.9255437 ], [ 70.5531831, 23.9259274 ], [ 70.5526233, 23.925933 ], [ 70.5526295, 23.9264477 ], [ 70.5512358, 23.9269765 ], [ 70.5512421, 23.9274912 ], [ 70.5504037, 23.9276278 ], [ 70.5495715, 23.92828 ], [ 70.5495777, 23.9287947 ], [ 70.5484609, 23.9290633 ], [ 70.5486127, 23.9300912 ], [ 70.5488958, 23.9303458 ], [ 70.5490485, 23.9313736 ], [ 70.5479287, 23.9313849 ], [ 70.5479347, 23.9318996 ], [ 70.5484932, 23.9317648 ], [ 70.5489172, 23.932147 ], [ 70.5490669, 23.9329175 ], [ 70.5499037, 23.9326518 ], [ 70.5497817, 23.9341973 ], [ 70.5500678, 23.9347091 ], [ 70.5507758, 23.9353449 ], [ 70.5516204, 23.9357229 ], [ 70.5514675, 23.9346949 ], [ 70.5516064, 23.9345643 ], [ 70.5521665, 23.9345586 ], [ 70.5527355, 23.935325 ], [ 70.5538601, 23.9357002 ], [ 70.5540058, 23.9362133 ], [ 70.5542887, 23.9364679 ], [ 70.5544354, 23.936981 ], [ 70.5561198, 23.9373496 ], [ 70.556686, 23.9378586 ], [ 70.5580873, 23.9379735 ], [ 70.5579962, 23.9384006 ], [ 70.5578136, 23.938491 ], [ 70.5578166, 23.9387484 ], [ 70.5580965, 23.9387455 ], [ 70.5581899, 23.9385749 ], [ 70.558655, 23.9386108 ], [ 70.5592211, 23.9391198 ], [ 70.5611855, 23.9394862 ], [ 70.5611918, 23.9400009 ], [ 70.5623131, 23.9401177 ], [ 70.5648484, 23.9413787 ], [ 70.5656945, 23.9418848 ], [ 70.5676544, 23.9418648 ], [ 70.5679328, 23.9417336 ], [ 70.5680786, 23.942247 ], [ 70.5685036, 23.9426282 ], [ 70.5690651, 23.9427516 ], [ 70.5690746, 23.9435235 ], [ 70.5696329, 23.9433887 ], [ 70.5701991, 23.9438977 ], [ 70.5713237, 23.9442727 ], [ 70.5709126, 23.9450489 ], [ 70.5709281, 23.9463356 ], [ 70.5713534, 23.9467168 ], [ 70.5724764, 23.9469627 ], [ 70.5729005, 23.9473449 ], [ 70.5733256, 23.9477261 ], [ 70.5741719, 23.948232 ], [ 70.5761349, 23.9484692 ], [ 70.576418, 23.9487236 ], [ 70.5778241, 23.9492239 ], [ 70.5786705, 23.94973 ], [ 70.5820334, 23.9499527 ], [ 70.5845628, 23.9506987 ], [ 70.5856828, 23.9506871 ], [ 70.5861071, 23.9510693 ], [ 70.5862537, 23.9515824 ], [ 70.5865338, 23.9515796 ], [ 70.5865274, 23.9510649 ], [ 70.5870889, 23.9511874 ], [ 70.5876554, 23.9516962 ], [ 70.5882169, 23.9518194 ], [ 70.5884843, 23.9507873 ], [ 70.5890426, 23.9506524 ], [ 70.5893195, 23.9503921 ], [ 70.5912762, 23.9501146 ], [ 70.5917005, 23.9504966 ], [ 70.5918631, 23.9522965 ], [ 70.5921415, 23.9521644 ], [ 70.5927015, 23.9521587 ], [ 70.5929846, 23.9524131 ], [ 70.6008245, 23.9523314 ], [ 70.6027748, 23.9515391 ], [ 70.6030517, 23.9512789 ], [ 70.6052853, 23.9507408 ], [ 70.6058372, 23.9500922 ], [ 70.6049972, 23.9501008 ], [ 70.604994, 23.9498436 ], [ 70.6103153, 23.949916 ], [ 70.6107428, 23.9505554 ], [ 70.6113125, 23.9513214 ], [ 70.6120177, 23.9516996 ], [ 70.6134208, 23.9519423 ], [ 70.617624, 23.9521555 ], [ 70.617765, 23.952283 ], [ 70.617912, 23.9527962 ], [ 70.6190335, 23.9529126 ], [ 70.6218462, 23.9539122 ], [ 70.6224159, 23.9546784 ], [ 70.6229776, 23.9548015 ], [ 70.6231235, 23.9553148 ], [ 70.623832, 23.9559502 ], [ 70.6260785, 23.956441 ], [ 70.6266321, 23.9559205 ], [ 70.6274656, 23.955397 ], [ 70.6285807, 23.9549995 ], [ 70.6287105, 23.9542262 ], [ 70.6288494, 23.9540956 ], [ 70.6294077, 23.9539614 ], [ 70.6298143, 23.9529277 ], [ 70.6298078, 23.9524131 ], [ 70.6292414, 23.9519043 ], [ 70.6290921, 23.9511339 ], [ 70.6303646, 23.9521498 ], [ 70.6305115, 23.9526629 ], [ 70.6310698, 23.9525278 ], [ 70.6338713, 23.9526272 ], [ 70.6338778, 23.9531419 ], [ 70.636393, 23.9527285 ], [ 70.6372263, 23.952205 ], [ 70.6376409, 23.9518149 ], [ 70.6381879, 23.9507797 ], [ 70.6391569, 23.9498682 ], [ 70.6402703, 23.9493416 ], [ 70.6413805, 23.9485577 ], [ 70.641792, 23.9479103 ], [ 70.6424843, 23.947259 ], [ 70.6441575, 23.9467264 ], [ 70.6449876, 23.9459455 ], [ 70.6463826, 23.945545 ], [ 70.6465122, 23.9447716 ], [ 70.6473359, 23.943476 ], [ 70.6473162, 23.9419321 ], [ 70.6470331, 23.9416779 ], [ 70.6470297, 23.9414205 ], [ 70.6471686, 23.9412899 ], [ 70.64996, 23.940617 ], [ 70.6499568, 23.9403596 ], [ 70.6491168, 23.9403687 ], [ 70.6496687, 23.9397189 ], [ 70.6535716, 23.9383902 ], [ 70.6552546, 23.9386295 ], [ 70.6555379, 23.9388837 ], [ 70.6569377, 23.9388686 ], [ 70.6580509, 23.938342 ], [ 70.6628101, 23.9382904 ], [ 70.6630934, 23.9385448 ], [ 70.6639365, 23.938793 ], [ 70.6672928, 23.9384993 ], [ 70.6689658, 23.9379663 ], [ 70.669519, 23.9374456 ], [ 70.6709121, 23.9369158 ], [ 70.6714655, 23.9363951 ], [ 70.6736952, 23.9355989 ], [ 70.674805, 23.9348147 ], [ 70.6756415, 23.9345482 ], [ 70.675918, 23.9342878 ], [ 70.6831731, 23.932407 ], [ 70.6907282, 23.9320667 ], [ 70.6926944, 23.9325598 ], [ 70.6991296, 23.9322315 ], [ 70.7041735, 23.932562 ], [ 70.7041803, 23.9330767 ], [ 70.7044585, 23.9329444 ], [ 70.7058582, 23.9329289 ], [ 70.7086711, 23.933927 ], [ 70.7096724, 23.9355891 ], [ 70.7106611, 23.9362209 ], [ 70.7143039, 23.9364377 ], [ 70.7156968, 23.9359073 ], [ 70.7159733, 23.9356469 ], [ 70.7173663, 23.9351167 ], [ 70.718057, 23.934466 ], [ 70.7187335, 23.9326571 ], [ 70.7192933, 23.9326509 ], [ 70.7194192, 23.9316201 ], [ 70.7196923, 23.9311024 ], [ 70.7205218, 23.9303211 ], [ 70.7216176, 23.9285072 ], [ 70.7216142, 23.92825 ], [ 70.7213309, 23.9279958 ], [ 70.7211812, 23.9272254 ], [ 70.7217461, 23.9276047 ], [ 70.7225878, 23.9277244 ], [ 70.7225808, 23.9272097 ], [ 70.7231389, 23.9270744 ], [ 70.7259176, 23.9254991 ], [ 70.7267471, 23.9247178 ], [ 70.7273035, 23.9244541 ], [ 70.7282708, 23.9235431 ], [ 70.7283906, 23.9219977 ], [ 70.7275577, 23.9225218 ], [ 70.7276836, 23.921491 ], [ 70.7278223, 23.9213602 ], [ 70.7289368, 23.9209622 ], [ 70.7289436, 23.9214768 ], [ 70.7306163, 23.9209433 ], [ 70.7307626, 23.9214562 ], [ 70.7309047, 23.9215828 ], [ 70.7337004, 23.921294 ], [ 70.7350929, 23.9207637 ], [ 70.7370489, 23.9204842 ], [ 70.7373254, 23.9202237 ], [ 70.738718, 23.9196934 ], [ 70.7392708, 23.9191723 ], [ 70.7406635, 23.918642 ], [ 70.7409434, 23.9186388 ], [ 70.7420699, 23.9191406 ], [ 70.7437476, 23.9189933 ], [ 70.7438767, 23.91822 ], [ 70.7440154, 23.9180892 ], [ 70.7451332, 23.9179484 ], [ 70.7448603, 23.918466 ], [ 70.7443005, 23.9184725 ], [ 70.7445855, 23.9188548 ], [ 70.7454288, 23.9191026 ], [ 70.7476645, 23.9188198 ], [ 70.7479391, 23.9184311 ], [ 70.7465361, 23.9181897 ], [ 70.7468109, 23.9178002 ], [ 70.7470908, 23.917797 ], [ 70.7490604, 23.9185465 ], [ 70.7504583, 23.9184025 ], [ 70.7505908, 23.9178862 ], [ 70.7507295, 23.9177556 ], [ 70.7540812, 23.9172026 ], [ 70.7554738, 23.916672 ], [ 70.7574295, 23.9163923 ], [ 70.7582623, 23.9158682 ], [ 70.75938, 23.9157272 ], [ 70.7593836, 23.9159845 ], [ 70.7588238, 23.9159909 ], [ 70.7588308, 23.9165055 ], [ 70.7610646, 23.9160933 ], [ 70.7616174, 23.9155724 ], [ 70.7621755, 23.9154379 ], [ 70.7621651, 23.9146658 ], [ 70.7627264, 23.9147877 ], [ 70.7630099, 23.9150417 ], [ 70.7652507, 23.9151451 ], [ 70.7653798, 23.9143717 ], [ 70.7655183, 23.9142409 ], [ 70.7660765, 23.9141064 ], [ 70.7658001, 23.9143668 ], [ 70.7658035, 23.914624 ], [ 70.7660835, 23.9146208 ], [ 70.7661764, 23.9144502 ], [ 70.767754, 23.9139578 ], [ 70.7680303, 23.9136974 ], [ 70.7699791, 23.912903 ], [ 70.7702554, 23.9126424 ], [ 70.7713715, 23.9123723 ], [ 70.7726217, 23.9117149 ], [ 70.772748, 23.9106841 ], [ 70.7797432, 23.9104742 ], [ 70.7814295, 23.9109693 ], [ 70.7819893, 23.9109627 ], [ 70.7831018, 23.9104352 ], [ 70.784968859374999, 23.910413481388087 ], [ 70.7856206, 23.9104059 ], [ 70.7867472, 23.9109075 ], [ 70.7920649, 23.9108457 ], [ 70.7940311, 23.9113373 ], [ 70.795992, 23.9114435 ], [ 70.7961243, 23.9109274 ], [ 70.7968156, 23.9102755 ], [ 70.7977858, 23.9096212 ], [ 70.7976357, 23.908851 ], [ 70.7981936, 23.9087153 ], [ 70.7991602, 23.9078038 ], [ 70.799702, 23.9065108 ], [ 70.799985213380637, 23.90635 ], [ 70.800397, 23.9061162 ], [ 70.801916, 23.9046836 ], [ 70.8021887, 23.9041657 ], [ 70.8039851, 23.9024713 ], [ 70.8048211, 23.9022043 ], [ 70.805235, 23.9018138 ], [ 70.8053682, 23.9012976 ], [ 70.8064824, 23.9008981 ], [ 70.8068963, 23.9005076 ], [ 70.807026, 23.899734 ], [ 70.8075856, 23.8997276 ], [ 70.8075786, 23.899213 ], [ 70.8086962, 23.8990707 ], [ 70.8089723, 23.89881 ], [ 70.8098101, 23.8986721 ], [ 70.8098173, 23.8991867 ], [ 70.8114981, 23.899295 ], [ 70.8117816, 23.899549 ], [ 70.8123431, 23.8996715 ], [ 70.8126374, 23.9006974 ], [ 70.8131987, 23.9008191 ], [ 70.8137657, 23.9013269 ], [ 70.8148851, 23.9013139 ], [ 70.8171346, 23.9020593 ], [ 70.8179813, 23.9025639 ], [ 70.8185393, 23.9024292 ], [ 70.8186859, 23.9029419 ], [ 70.8188283, 23.9030686 ], [ 70.819953, 23.9034417 ], [ 70.8199602, 23.9039563 ], [ 70.82052, 23.9039497 ], [ 70.8202509, 23.9047248 ], [ 70.8216519, 23.9048365 ], [ 70.8225024, 23.9055983 ], [ 70.8241834, 23.9057076 ], [ 70.8240501, 23.9062239 ], [ 70.8237738, 23.9064844 ], [ 70.8236453, 23.907258 ], [ 70.8250464, 23.9073696 ], [ 70.8261749, 23.908 ], [ 70.8263036, 23.9072264 ], [ 70.8267201, 23.9069641 ], [ 70.8267273, 23.9074787 ], [ 70.8272871, 23.9074721 ], [ 70.8274374, 23.9082423 ], [ 70.8277209, 23.9084963 ], [ 70.8278685, 23.9090092 ], [ 70.8289934, 23.9093814 ], [ 70.8292769, 23.9096354 ], [ 70.8337802, 23.9113831 ], [ 70.8365808, 23.9114787 ], [ 70.836588, 23.9119933 ], [ 70.8402172, 23.9113061 ], [ 70.8404935, 23.9110455 ], [ 70.8422994, 23.9101236 ], [ 70.8425682, 23.9093483 ], [ 70.8436768, 23.908563 ], [ 70.8438099, 23.9080468 ], [ 70.8443678, 23.9079109 ], [ 70.844644, 23.9076503 ], [ 70.8454818, 23.9075122 ], [ 70.8456139, 23.9069958 ], [ 70.8465848, 23.9063404 ], [ 70.8478271, 23.905168 ], [ 70.8478125, 23.9041387 ], [ 70.847386, 23.9036292 ], [ 70.8455245, 23.9038204 ], [ 70.8458388, 23.903133 ], [ 70.8460894, 23.9010714 ], [ 70.8473329, 23.8998981 ], [ 70.8484412, 23.8991128 ], [ 70.8489972, 23.8988488 ], [ 70.8512323, 23.8985645 ], [ 70.8517883, 23.8983005 ], [ 70.8576575, 23.897715 ], [ 70.8579337, 23.8974543 ], [ 70.8593257, 23.8969229 ], [ 70.8601576, 23.8963982 ], [ 70.8605714, 23.8960075 ], [ 70.8607044, 23.8954914 ], [ 70.8640495, 23.8945498 ], [ 70.8641871, 23.8944197 ], [ 70.8643202, 23.8939036 ], [ 70.8657137, 23.8935003 ], [ 70.8673928, 23.8934799 ], [ 70.8699, 23.8926774 ], [ 70.8707322, 23.8921525 ], [ 70.8718403, 23.891367 ], [ 70.8740826, 23.891597 ], [ 70.8777203, 23.8915528 ], [ 70.8791119, 23.8910211 ], [ 70.8799439, 23.8904963 ], [ 70.8811858, 23.8893236 ], [ 70.8820104, 23.8882841 ], [ 70.8828201, 23.8862156 ], [ 70.8830775, 23.8846685 ], [ 70.883216, 23.8845377 ], [ 70.8846131, 23.8843924 ], [ 70.8846057, 23.8838777 ], [ 70.8854432, 23.8837384 ], [ 70.8873869, 23.8826853 ], [ 70.8898958, 23.8820115 ], [ 70.890024, 23.8812379 ], [ 70.8904387, 23.8808465 ], [ 70.8909964, 23.8807114 ], [ 70.8911283, 23.880195 ], [ 70.8914043, 23.8799344 ], [ 70.8915371, 23.8794181 ], [ 70.8920949, 23.8792822 ], [ 70.8934751, 23.8779784 ], [ 70.8945906, 23.8777074 ], [ 70.8948665, 23.8774468 ], [ 70.8965434, 23.8772979 ], [ 70.8965509, 23.8778123 ], [ 70.8971105, 23.8778055 ], [ 70.897103, 23.8772909 ], [ 70.8979404, 23.8771516 ], [ 70.8987724, 23.8766265 ], [ 70.8996099, 23.876488 ], [ 70.8996061, 23.8762308 ], [ 70.8985808, 23.876155 ], [ 70.8984832, 23.8759873 ], [ 70.900436, 23.8755766 ], [ 70.9005736, 23.8754468 ], [ 70.9004265, 23.874934 ], [ 70.9009862, 23.874927 ], [ 70.9009786, 23.8744124 ], [ 70.9001393, 23.8744228 ], [ 70.9001355, 23.8741656 ], [ 70.9006932, 23.8740295 ], [ 70.9009694, 23.8737689 ], [ 70.9015269, 23.8736337 ], [ 70.9015345, 23.8741484 ], [ 70.9020922, 23.8740123 ], [ 70.9031999, 23.8732266 ], [ 70.904597, 23.8730811 ], [ 70.9043097, 23.87257 ], [ 70.9051472, 23.8724305 ], [ 70.9056061, 23.8721268 ], [ 70.9057048, 23.8722954 ], [ 70.9059845, 23.872292 ], [ 70.9059809, 23.8720346 ], [ 70.9057949, 23.8719484 ], [ 70.9058367, 23.8717791 ], [ 70.9066647, 23.8709968 ], [ 70.9067975, 23.8704806 ], [ 70.9070773, 23.870477 ], [ 70.9072355, 23.8717619 ], [ 70.9073778, 23.8718883 ], [ 70.9079393, 23.8720104 ], [ 70.9079317, 23.8714957 ], [ 70.9084912, 23.8714889 ], [ 70.9084987, 23.8720034 ], [ 70.9089142, 23.8717411 ], [ 70.9090395, 23.8707101 ], [ 70.910442, 23.8709501 ], [ 70.9104345, 23.8704355 ], [ 70.9121151, 23.8705428 ], [ 70.912391, 23.870282 ], [ 70.9135063, 23.870011 ], [ 70.9140582, 23.8694893 ], [ 70.9148975, 23.8694789 ], [ 70.9157293, 23.8689539 ], [ 70.9174059, 23.8688048 ], [ 70.9172619, 23.8685492 ], [ 70.9172315, 23.866491 ], [ 70.91737, 23.8663602 ], [ 70.9190466, 23.8662111 ], [ 70.9194505, 23.8651767 ], [ 70.9197267, 23.8649159 ], [ 70.920271, 23.8638798 ], [ 70.9203923, 23.8625918 ], [ 70.9220746, 23.862828 ], [ 70.9217835, 23.8620597 ], [ 70.9223449, 23.8621809 ], [ 70.9227544, 23.861533 ], [ 70.922876, 23.8602448 ], [ 70.9195227, 23.860544 ], [ 70.9199228, 23.8592523 ], [ 70.9199153, 23.8587379 ], [ 70.9190608, 23.8577192 ], [ 70.9191748, 23.8559165 ], [ 70.9202974, 23.8561597 ], [ 70.9207013, 23.8551253 ], [ 70.9206369, 23.8507517 ], [ 70.9203534, 23.8504978 ], [ 70.920013, 23.8463848 ], [ 70.9202852, 23.8458668 ], [ 70.9202738, 23.8450949 ], [ 70.9199828, 23.8443266 ], [ 70.919941, 23.8414965 ], [ 70.9204891, 23.8407177 ], [ 70.9213092, 23.8394209 ], [ 70.921294, 23.8383918 ], [ 70.921003, 23.8376234 ], [ 70.9200094, 23.8366065 ], [ 70.9188867, 23.8363631 ], [ 70.918735, 23.8355929 ], [ 70.9178695, 23.8338025 ], [ 70.9178658, 23.8335453 ], [ 70.9191152, 23.8328859 ], [ 70.9213528, 23.8328581 ], [ 70.9230385, 23.8333516 ], [ 70.924435, 23.833206 ], [ 70.9249716, 23.8316553 ], [ 70.9221634, 23.8309184 ], [ 70.9221597, 23.8306612 ], [ 70.9229986, 23.8306506 ], [ 70.9229948, 23.8303934 ], [ 70.9218724, 23.8301501 ], [ 70.9214371, 23.8291261 ], [ 70.9211538, 23.8288723 ], [ 70.9207195, 23.8278485 ], [ 70.9131589, 23.8272987 ], [ 70.912316, 23.8270518 ], [ 70.9111878, 23.826423 ], [ 70.9110287, 23.8251384 ], [ 70.9112895, 23.8238485 ], [ 70.9111464, 23.8235929 ], [ 70.910587, 23.8235997 ], [ 70.9104129, 23.821286 ], [ 70.9108272, 23.8208944 ], [ 70.9119478, 23.8210097 ], [ 70.9120606, 23.819207 ], [ 70.9119176, 23.8189515 ], [ 70.9099561, 23.8187184 ], [ 70.9095061, 23.8166653 ], [ 70.9086409, 23.8148748 ], [ 70.9081954, 23.8130789 ], [ 70.9073566, 23.8130893 ], [ 70.9073491, 23.8125748 ], [ 70.9059489, 23.8124629 ], [ 70.9053859, 23.8122125 ], [ 70.9023097, 23.8122505 ], [ 70.901467, 23.8120037 ], [ 70.9003372, 23.8112456 ], [ 70.8975352, 23.8108946 ], [ 70.8973874, 23.8103817 ], [ 70.8969609, 23.8098723 ], [ 70.8949998, 23.8096391 ], [ 70.8945498, 23.807586 ], [ 70.8938363, 23.8065654 ], [ 70.8901973, 23.8063527 ], [ 70.8900384, 23.8050679 ], [ 70.8901769, 23.8049371 ], [ 70.8907343, 23.8048022 ], [ 70.8908512, 23.8032567 ], [ 70.8907082, 23.8030012 ], [ 70.8893045, 23.8026319 ], [ 70.8884562, 23.8019993 ], [ 70.8892746, 23.8005735 ], [ 70.8915135, 23.8006752 ], [ 70.8916604, 23.8011881 ], [ 70.8918025, 23.8013146 ], [ 70.8923617, 23.8013078 ], [ 70.8930546, 23.8009137 ], [ 70.8938599, 23.7985879 ], [ 70.8938526, 23.7980732 ], [ 70.8931353, 23.7967954 ], [ 70.8920113, 23.7964227 ], [ 70.891165, 23.7959184 ], [ 70.8892115, 23.7961997 ], [ 70.8875449, 23.7969921 ], [ 70.8861468, 23.7970091 ], [ 70.8850134, 23.7959937 ], [ 70.8844506, 23.7957432 ], [ 70.8813803, 23.7961672 ], [ 70.881347, 23.7938515 ], [ 70.8765844, 23.7932658 ], [ 70.876303, 23.7931411 ], [ 70.8761552, 23.7926281 ], [ 70.8751624, 23.7916109 ], [ 70.8737569, 23.7911133 ], [ 70.8734589, 23.7898302 ], [ 70.8726237, 23.7900978 ], [ 70.8723551, 23.7908731 ], [ 70.8703833, 23.7898676 ], [ 70.8700926, 23.7890991 ], [ 70.8692538, 23.7891093 ], [ 70.8692465, 23.7885947 ], [ 70.8684132, 23.7889903 ], [ 70.8675761, 23.7891295 ], [ 70.8674506, 23.7901604 ], [ 70.8677375, 23.7906716 ], [ 70.8677486, 23.7914435 ], [ 70.8673408, 23.7922205 ], [ 70.8667759, 23.7918408 ], [ 70.8662149, 23.7917194 ], [ 70.8659206, 23.7906935 ], [ 70.8628413, 23.7904735 ], [ 70.8637974, 23.7889179 ], [ 70.8639303, 23.7884017 ], [ 70.8647691, 23.7883915 ], [ 70.8644822, 23.7878803 ], [ 70.8650395, 23.7877444 ], [ 70.8654529, 23.7873539 ], [ 70.8657142, 23.7860642 ], [ 70.8633967, 23.7804306 ], [ 70.8631134, 23.7801768 ], [ 70.8623636, 23.7765832 ], [ 70.8620858, 23.7767147 ], [ 70.8604084, 23.7767349 ], [ 70.8598549, 23.777128 ], [ 70.8591847, 23.7791948 ], [ 70.8589271, 23.7807419 ], [ 70.8581066, 23.7820385 ], [ 70.8571431, 23.7830795 ], [ 70.8565857, 23.7832144 ], [ 70.8563098, 23.783475 ], [ 70.8560303, 23.7834784 ], [ 70.8546139, 23.7822087 ], [ 70.8537679, 23.7817041 ], [ 70.8504037, 23.7811018 ], [ 70.8503965, 23.7805871 ], [ 70.8498392, 23.7807221 ], [ 70.8495578, 23.7805971 ], [ 70.849554, 23.7803399 ], [ 70.8501113, 23.780204 ], [ 70.8505211, 23.7795563 ], [ 70.8510694, 23.7787776 ], [ 70.8509966, 23.7736317 ], [ 70.8508535, 23.7733762 ], [ 70.8491745, 23.7732672 ], [ 70.8483283, 23.7727627 ], [ 70.8474878, 23.7726446 ], [ 70.8467521, 23.7700799 ], [ 70.8460427, 23.7693165 ], [ 70.8452023, 23.7691974 ], [ 70.8438118, 23.7697287 ], [ 70.8402244, 23.7731169 ], [ 70.839393, 23.7736414 ], [ 70.8374378, 23.7737937 ], [ 70.8366914, 23.7704573 ], [ 70.8368027, 23.7683972 ], [ 70.8356791, 23.7680241 ], [ 70.8340017, 23.7680441 ], [ 70.8337239, 23.7681764 ], [ 70.8333221, 23.7694681 ], [ 70.8333438, 23.7710118 ], [ 70.8340613, 23.7722898 ], [ 70.8329483, 23.7726886 ], [ 70.8323947, 23.7730817 ], [ 70.8322616, 23.7735979 ], [ 70.83185, 23.7741175 ], [ 70.8312926, 23.7742524 ], [ 70.8310165, 23.774513 ], [ 70.8290596, 23.7745361 ], [ 70.8287835, 23.7747967 ], [ 70.8273911, 23.7751997 ], [ 70.827258, 23.775716 ], [ 70.8269819, 23.7759767 ], [ 70.8267275, 23.777781 ], [ 70.8263159, 23.7783006 ], [ 70.825479, 23.7784386 ], [ 70.8249161, 23.778188 ], [ 70.8237978, 23.7782012 ], [ 70.8235164, 23.7780763 ], [ 70.8233654, 23.7773061 ], [ 70.8227954, 23.7765408 ], [ 70.8230284, 23.7731927 ], [ 70.8243796, 23.7698313 ], [ 70.8252076, 23.7690494 ], [ 70.8260318, 23.7680103 ], [ 70.8265767, 23.7669746 ], [ 70.8273722, 23.7638771 ], [ 70.8284616, 23.7618054 ], [ 70.8289955, 23.7599977 ], [ 70.8289632, 23.757682 ], [ 70.8280959, 23.7556336 ], [ 70.8280887, 23.755119 ], [ 70.8287808, 23.7545962 ], [ 70.8292248, 23.7563923 ], [ 70.8305137, 23.7585639 ], [ 70.8333164, 23.7590455 ], [ 70.8334574, 23.7591729 ], [ 70.8336048, 23.7596858 ], [ 70.8344436, 23.7596758 ], [ 70.8345937, 23.760446 ], [ 70.8377084, 23.7632398 ], [ 70.8381373, 23.7638774 ], [ 70.8403809, 23.7643654 ], [ 70.8408052, 23.7647468 ], [ 70.8405582, 23.7670659 ], [ 70.8411282, 23.7678311 ], [ 70.8412758, 23.7683439 ], [ 70.8421163, 23.7684622 ], [ 70.8423994, 23.7687162 ], [ 70.8440787, 23.7688253 ], [ 70.8437918, 23.768314 ], [ 70.8446286, 23.7681749 ], [ 70.8449046, 23.7679143 ], [ 70.8468543, 23.7673762 ], [ 70.8471302, 23.7671156 ], [ 70.8476874, 23.7669806 ], [ 70.8475254, 23.7654386 ], [ 70.8468052, 23.7639032 ], [ 70.8462442, 23.7637809 ], [ 70.844547, 23.7623862 ], [ 70.8447902, 23.75981 ], [ 70.8442312, 23.7598166 ], [ 70.84408, 23.7590464 ], [ 70.8428044, 23.7577748 ], [ 70.8397241, 23.7574252 ], [ 70.8385969, 23.7567956 ], [ 70.838303, 23.7557699 ], [ 70.8377439, 23.7557765 ], [ 70.8371631, 23.7542394 ], [ 70.8366041, 23.754246 ], [ 70.8364493, 23.7532184 ], [ 70.8365878, 23.7530878 ], [ 70.837145, 23.7529529 ], [ 70.8371524, 23.7534675 ], [ 70.8388313, 23.7535758 ], [ 70.8399566, 23.754077 ], [ 70.841358, 23.7543176 ], [ 70.8414954, 23.7541878 ], [ 70.8414737, 23.752644 ], [ 70.8409001, 23.7516216 ], [ 70.8408711, 23.7495632 ], [ 70.8411399, 23.7487879 ], [ 70.8412548, 23.7469852 ], [ 70.8415343, 23.7469818 ], [ 70.8420002, 23.7503216 ], [ 70.8422869, 23.750833 ], [ 70.8434194, 23.7518487 ], [ 70.8437063, 23.75236 ], [ 70.8445557, 23.7531218 ], [ 70.8447033, 23.7536348 ], [ 70.8458267, 23.7540069 ], [ 70.8461062, 23.7540037 ], [ 70.8467883, 23.752838 ], [ 70.8474822, 23.7524431 ], [ 70.8488689, 23.7516546 ], [ 70.849987, 23.7516412 ], [ 70.8508292, 23.7518884 ], [ 70.8516751, 23.7523931 ], [ 70.8520994, 23.7527743 ], [ 70.8532467, 23.7548192 ], [ 70.8540998, 23.7558383 ], [ 70.8546661, 23.7563462 ], [ 70.8558099, 23.7581339 ], [ 70.8566594, 23.7588956 ], [ 70.8592593, 23.7647831 ], [ 70.8606753, 23.7660528 ], [ 70.8609622, 23.7665639 ], [ 70.8612639, 23.7681042 ], [ 70.8619686, 23.7684813 ], [ 70.862822, 23.7695004 ], [ 70.8647789, 23.7694768 ], [ 70.8651922, 23.7690863 ], [ 70.8657403, 23.7683076 ], [ 70.8657367, 23.7680504 ], [ 70.8654498, 23.7675391 ], [ 70.8654205, 23.7654807 ], [ 70.8645451, 23.7629181 ], [ 70.8639787, 23.7624102 ], [ 70.8634013, 23.7611305 ], [ 70.8631181, 23.7608765 ], [ 70.8625407, 23.7595968 ], [ 70.8619743, 23.7590889 ], [ 70.8616874, 23.7585779 ], [ 70.8616729, 23.7575486 ], [ 70.861386, 23.7570373 ], [ 70.8610662, 23.7542107 ], [ 70.8602021, 23.7524197 ], [ 70.8599187, 23.7521657 ], [ 70.8596211, 23.7508826 ], [ 70.8593378, 23.7506287 ], [ 70.8590327, 23.748831 ], [ 70.8587496, 23.7485771 ], [ 70.8584517, 23.747294 ], [ 70.8585445, 23.7439474 ], [ 70.8591036, 23.7439408 ], [ 70.8589669, 23.7441997 ], [ 70.8589779, 23.7449716 ], [ 70.85912, 23.745098 ], [ 70.8596789, 23.7450914 ], [ 70.8613451, 23.7442993 ], [ 70.863024, 23.7444082 ], [ 70.8631743, 23.7451784 ], [ 70.8640236, 23.7459402 ], [ 70.8643289, 23.7477378 ], [ 70.865458, 23.7484962 ], [ 70.8657558, 23.7497794 ], [ 70.8664642, 23.7504137 ], [ 70.868145, 23.7506507 ], [ 70.8692705, 23.7511517 ], [ 70.8698295, 23.7511449 ], [ 70.8709403, 23.7506168 ], [ 70.8723194, 23.7493135 ], [ 70.8737097, 23.748782 ], [ 70.8741229, 23.7483914 ], [ 70.874241, 23.7468459 ], [ 70.8784245, 23.7461513 ], [ 70.8809289, 23.7453488 ], [ 70.8817675, 23.7453386 ], [ 70.8823302, 23.7455891 ], [ 70.8831688, 23.7455788 ], [ 70.8837241, 23.7453148 ], [ 70.8844094, 23.7444063 ], [ 70.8848254, 23.7441438 ], [ 70.8852774, 23.7464543 ], [ 70.8858439, 23.7469621 ], [ 70.8858662, 23.7485059 ], [ 70.8863118, 23.7503018 ], [ 70.8868728, 23.7504231 ], [ 70.8870138, 23.7505505 ], [ 70.8870249, 23.7513224 ], [ 70.8873118, 23.7518334 ], [ 70.8874782, 23.7536327 ], [ 70.8880391, 23.7537542 ], [ 70.8881801, 23.7538816 ], [ 70.8883426, 23.7554235 ], [ 70.8889017, 23.7554167 ], [ 70.8890595, 23.7567015 ], [ 70.8896261, 23.7572091 ], [ 70.8900607, 23.7582332 ], [ 70.8906216, 23.7583545 ], [ 70.8909049, 23.7586085 ], [ 70.8914659, 23.7587306 ], [ 70.8914732, 23.7592452 ], [ 70.8923099, 23.759106 ], [ 70.8925859, 23.7588451 ], [ 70.8931449, 23.7588383 ], [ 70.8937076, 23.7590888 ], [ 70.8945464, 23.7590785 ], [ 70.8956569, 23.7585501 ], [ 70.8971735, 23.7571167 ], [ 70.8974455, 23.7565987 ], [ 70.8988244, 23.7552951 ], [ 70.8992219, 23.7537461 ], [ 70.9003343, 23.753346 ], [ 70.9007437, 23.7526981 ], [ 70.9007325, 23.7519262 ], [ 70.9004456, 23.7514152 ], [ 70.8998418, 23.7483347 ], [ 70.9002578, 23.7480721 ], [ 70.9004082, 23.7488423 ], [ 70.9005503, 23.7489687 ], [ 70.9011075, 23.7488336 ], [ 70.9018282, 23.7503689 ], [ 70.9026779, 23.7511303 ], [ 70.9028257, 23.7516431 ], [ 70.9039493, 23.7520149 ], [ 70.9042289, 23.7520115 ], [ 70.9049215, 23.7516174 ], [ 70.9049066, 23.7505883 ], [ 70.9040531, 23.7495694 ], [ 70.9030416, 23.7472659 ], [ 70.9019198, 23.7470224 ], [ 70.9019123, 23.7465078 ], [ 70.9013553, 23.7466429 ], [ 70.9005241, 23.7471678 ], [ 70.8999707, 23.7475611 ], [ 70.8998809, 23.7479882 ], [ 70.8994211, 23.7482107 ], [ 70.8991415, 23.7482141 ], [ 70.8977346, 23.7475885 ], [ 70.897587, 23.7470757 ], [ 70.8951782, 23.7447892 ], [ 70.8946173, 23.7446669 ], [ 70.8940527, 23.7442884 ], [ 70.8952876, 23.7427291 ], [ 70.8959644, 23.7411768 ], [ 70.8979191, 23.7410238 ], [ 70.9004271, 23.7404783 ], [ 70.9008514, 23.7408595 ], [ 70.9009992, 23.7413725 ], [ 70.9026687, 23.7408372 ], [ 70.9025135, 23.7398098 ], [ 70.9030612, 23.7390309 ], [ 70.9034753, 23.7386395 ], [ 70.9040325, 23.7385044 ], [ 70.9040175, 23.7374753 ], [ 70.9042969, 23.7374719 ], [ 70.9044437, 23.7379846 ], [ 70.9057393, 23.740542 ], [ 70.9074256, 23.741164 ], [ 70.9078499, 23.7415452 ], [ 70.9092812, 23.7438436 ], [ 70.9101347, 23.7448623 ], [ 70.9114099, 23.7460041 ], [ 70.9119726, 23.7462545 ], [ 70.913931, 23.7463594 ], [ 70.9137758, 23.745332 ], [ 70.9123445, 23.7430338 ], [ 70.9119973, 23.7384061 ], [ 70.9124114, 23.7380145 ], [ 70.9129686, 23.7378794 ], [ 70.912961, 23.7373647 ], [ 70.913518, 23.7372288 ], [ 70.9160145, 23.7359111 ], [ 70.9185261, 23.7356227 ], [ 70.9188019, 23.7353619 ], [ 70.9201994, 23.7353447 ], [ 70.9204825, 23.7355985 ], [ 70.9210434, 23.7357206 ], [ 70.9211939, 23.7364908 ], [ 70.921336, 23.7366172 ], [ 70.9218969, 23.7367393 ], [ 70.9220436, 23.7372521 ], [ 70.9221857, 23.7373785 ], [ 70.9230262, 23.7374972 ], [ 70.9230338, 23.7380119 ], [ 70.9235945, 23.738133 ], [ 70.9238779, 23.7383868 ], [ 70.9247163, 23.7383764 ], [ 70.9248537, 23.7382464 ], [ 70.9248348, 23.7369601 ], [ 70.9246917, 23.7367045 ], [ 70.9241328, 23.7367115 ], [ 70.9239812, 23.7359414 ], [ 70.9236979, 23.7356875 ], [ 70.9235511, 23.7351748 ], [ 70.9246652, 23.7349036 ], [ 70.925247, 23.7364403 ], [ 70.9258058, 23.7364333 ], [ 70.9258172, 23.7372052 ], [ 70.9283345, 23.737302 ], [ 70.9287474, 23.7369113 ], [ 70.928721, 23.7351103 ], [ 70.9282908, 23.7343437 ], [ 70.9288499, 23.7343367 ], [ 70.9289814, 23.7338204 ], [ 70.9299506, 23.7331646 ], [ 70.9305021, 23.7326429 ], [ 70.9321751, 23.7323647 ], [ 70.9332816, 23.7315789 ], [ 70.9355059, 23.730779 ], [ 70.9361908, 23.7298703 ], [ 70.9367421, 23.7293488 ], [ 70.9372859, 23.7283126 ], [ 70.9379791, 23.7279176 ], [ 70.9386641, 23.7270087 ], [ 70.9396293, 23.7260956 ], [ 70.9407395, 23.725567 ], [ 70.9411487, 23.7249189 ], [ 70.9423972, 23.7242595 ], [ 70.9428102, 23.7238688 ], [ 70.9429427, 23.7233524 ], [ 70.9435017, 23.7233455 ], [ 70.9430591, 23.721807 ], [ 70.9431649, 23.7194897 ], [ 70.9456818, 23.7195862 ], [ 70.9462485, 23.7200937 ], [ 70.9470905, 23.7203405 ], [ 70.9482084, 23.7203264 ], [ 70.9498773, 23.7197907 ], [ 70.9501568, 23.7197871 ], [ 70.9504401, 23.720041 ], [ 70.9529512, 23.719752 ], [ 70.9543541, 23.7201207 ], [ 70.9543619, 23.7206352 ], [ 70.9554834, 23.7208784 ], [ 70.9562046, 23.7224131 ], [ 70.9571927, 23.7230436 ], [ 70.9588655, 23.722765 ], [ 70.9605306, 23.721972 ], [ 70.9614832, 23.7202878 ], [ 70.9618971, 23.719896 ], [ 70.9630167, 23.7200109 ], [ 70.9631636, 23.7205237 ], [ 70.9633059, 23.7206501 ], [ 70.9658285, 23.7211326 ], [ 70.9663911, 23.7213829 ], [ 70.9668196, 23.7220211 ], [ 70.9668427, 23.7235649 ], [ 70.9675554, 23.724456 ], [ 70.9686809, 23.7249563 ], [ 70.9700782, 23.7249385 ], [ 70.9707665, 23.7242869 ], [ 70.9707627, 23.7240296 ], [ 70.9704794, 23.723776 ], [ 70.9704601, 23.7224895 ], [ 70.9698895, 23.7217248 ], [ 70.9694631, 23.7212156 ], [ 70.968621, 23.720969 ], [ 70.968473, 23.7204562 ], [ 70.9679026, 23.7196915 ], [ 70.9678988, 23.7194343 ], [ 70.9690048, 23.7186482 ], [ 70.9688462, 23.7173636 ], [ 70.9680041, 23.717117 ], [ 70.9678408, 23.7155751 ], [ 70.968947, 23.714789 ], [ 70.9692186, 23.714271 ], [ 70.9694749, 23.7127237 ], [ 70.9702938, 23.7114265 ], [ 70.9708101, 23.7085895 ], [ 70.9707714, 23.7060166 ], [ 70.9714607, 23.7053642 ], [ 70.9742586, 23.7055859 ], [ 70.9748156, 23.7054506 ], [ 70.974916, 23.702876 ], [ 70.9747729, 23.7026205 ], [ 70.9725261, 23.7018771 ], [ 70.9737559, 23.7000601 ], [ 70.9737482, 23.6995456 ], [ 70.9740237, 23.6992848 ], [ 70.9739888, 23.6969692 ], [ 70.9731352, 23.6959508 ], [ 70.9725648, 23.6951862 ], [ 70.9719867, 23.6939068 ], [ 70.9719789, 23.6933924 ], [ 70.9722545, 23.6931315 ], [ 70.972387, 23.6926152 ], [ 70.9743407, 23.6924612 ], [ 70.9763002, 23.6926934 ], [ 70.9768474, 23.6919144 ], [ 70.9774042, 23.6917791 ], [ 70.9773925, 23.6910074 ], [ 70.9779513, 23.6910002 ], [ 70.9782112, 23.6897103 ], [ 70.9798973, 23.6903315 ], [ 70.9804637, 23.690839 ], [ 70.9810224, 23.6908318 ], [ 70.9817068, 23.6899229 ], [ 70.9822227, 23.6870856 ], [ 70.982912, 23.686433 ], [ 70.9856979, 23.6858826 ], [ 70.9865281, 23.6853574 ], [ 70.9874919, 23.6844449 ], [ 70.9881556, 23.6821204 ], [ 70.9887124, 23.6819841 ], [ 70.989125, 23.6815933 ], [ 70.9891135, 23.6808214 ], [ 70.9888262, 23.6803105 ], [ 70.9889507, 23.6792795 ], [ 70.9900662, 23.6791361 ], [ 70.9931195, 23.6778102 ], [ 70.9947897, 23.6774031 ], [ 70.9949016, 23.6756005 ], [ 70.9947585, 23.6753449 ], [ 70.9939186, 23.6752268 ], [ 70.9936353, 23.674973 ], [ 70.9930747, 23.674852 ], [ 70.9936196, 23.6739439 ], [ 70.9947391, 23.6740586 ], [ 70.9948315, 23.6738877 ], [ 70.9958543, 23.6739151 ], [ 70.996558, 23.6742926 ], [ 70.9974234, 23.6760826 ], [ 70.9980095, 23.6778764 ], [ 70.9987183, 23.6785101 ], [ 70.9992807, 23.6787602 ], [ 71.0023575, 23.6789777 ], [ 71.0029143, 23.6788422 ], [ 71.0030416, 23.6780686 ], [ 71.003317, 23.6778078 ], [ 71.0034493, 23.6772914 ], [ 71.0037307, 23.677416 ], [ 71.0042894, 23.6774088 ], [ 71.0053988, 23.6768798 ], [ 71.010427, 23.6768146 ], [ 71.0107082, 23.6769399 ], [ 71.011111, 23.6759055 ], [ 71.0110834, 23.6741045 ], [ 71.0107923, 23.6733364 ], [ 71.0108931, 23.6707619 ], [ 71.0125591, 23.6700964 ], [ 71.0129719, 23.6697056 ], [ 71.0129481, 23.668162 ], [ 71.0123777, 23.6673973 ], [ 71.0123737, 23.6671401 ], [ 71.0125119, 23.6670093 ], [ 71.0130726, 23.667131 ], [ 71.0123344, 23.6645674 ], [ 71.0122989, 23.662252 ], [ 71.0121558, 23.6619964 ], [ 71.0116908, 23.661914 ], [ 71.01131, 23.6614927 ], [ 71.0104682, 23.6612465 ], [ 71.010564, 23.6584147 ], [ 71.0097065, 23.6571391 ], [ 71.0097993, 23.6540501 ], [ 71.0114673, 23.6535137 ], [ 71.0126763, 23.6504102 ], [ 71.012932, 23.6488628 ], [ 71.0132034, 23.6483448 ], [ 71.0131641, 23.6457719 ], [ 71.0134276, 23.6447392 ], [ 71.0138371, 23.6440902 ], [ 71.0143937, 23.6439547 ], [ 71.0145249, 23.6434383 ], [ 71.0150717, 23.6426593 ], [ 71.0154438, 23.6395667 ], [ 71.015566168956767, 23.63951868758361 ], [ 71.0184979, 23.6383684 ], [ 71.0191777, 23.6372021 ], [ 71.0191698, 23.6366876 ], [ 71.0185996, 23.6359231 ], [ 71.017746, 23.6349048 ], [ 71.0175831, 23.6333631 ], [ 71.0203658, 23.6326831 ], [ 71.0210496, 23.631774 ], [ 71.0210257, 23.6302303 ], [ 71.0215686, 23.629194 ], [ 71.0216967, 23.6284204 ], [ 71.0222533, 23.6282839 ], [ 71.0234994, 23.6276249 ], [ 71.0234718, 23.6258239 ], [ 71.0241565, 23.6249139 ], [ 71.0247129, 23.6247784 ], [ 71.0248441, 23.624262 ], [ 71.025812, 23.6236056 ], [ 71.0266417, 23.6230802 ], [ 71.0284423, 23.6221566 ], [ 71.0288458, 23.621122 ], [ 71.0321766, 23.6197918 ], [ 71.0321686, 23.6192771 ], [ 71.0327271, 23.6192698 ], [ 71.032276, 23.6172172 ], [ 71.0326795, 23.6161826 ], [ 71.0332359, 23.6160462 ], [ 71.0339235, 23.6153943 ], [ 71.0341907, 23.6146189 ], [ 71.0354378, 23.6139587 ], [ 71.0357129, 23.6136979 ], [ 71.0382098, 23.6126357 ], [ 71.0388974, 23.6119838 ], [ 71.0390295, 23.6114675 ], [ 71.0395899, 23.6115884 ], [ 71.0403053, 23.6127374 ], [ 71.0404653, 23.6140218 ], [ 71.0415821, 23.6140071 ], [ 71.0424597, 23.6165688 ], [ 71.0432402, 23.616433 ], [ 71.042866, 23.6157916 ], [ 71.0427109, 23.6147642 ], [ 71.0432693, 23.6147568 ], [ 71.0429781, 23.6139887 ], [ 71.0435366, 23.6139814 ], [ 71.0433805, 23.6129541 ], [ 71.0430934, 23.6124433 ], [ 71.0433525, 23.6111534 ], [ 71.0440371, 23.6102433 ], [ 71.0445954, 23.6102359 ], [ 71.0447781, 23.6097486 ], [ 71.0441582, 23.6090842 ], [ 71.0440664, 23.603167 ], [ 71.0445729, 23.5998151 ], [ 71.0448481, 23.5995542 ], [ 71.0453826, 23.5980031 ], [ 71.0463461, 23.5970895 ], [ 71.0469023, 23.5969538 ], [ 71.0470295, 23.5961802 ], [ 71.0474427, 23.5957884 ], [ 71.0485534, 23.5953881 ], [ 71.0485455, 23.5948736 ], [ 71.0493829, 23.5948625 ], [ 71.0492348, 23.5943499 ], [ 71.0493729, 23.594219 ], [ 71.0499291, 23.5940834 ], [ 71.0501924, 23.5930506 ], [ 71.0521384, 23.5925102 ], [ 71.0521304, 23.5919957 ], [ 71.0526866, 23.5918593 ], [ 71.0535162, 23.5913337 ], [ 71.0539284, 23.5909426 ], [ 71.0550168, 23.5891271 ], [ 71.0552759, 23.587837 ], [ 71.0552319, 23.5850071 ], [ 71.055475, 23.5826881 ], [ 71.0557462, 23.5821698 ], [ 71.0557381, 23.5816552 ], [ 71.0565634, 23.5808723 ], [ 71.0573808, 23.5795749 ], [ 71.0582062, 23.578792 ], [ 71.0583381, 23.5782757 ], [ 71.0588964, 23.5782683 ], [ 71.0588883, 23.5777536 ], [ 71.0594445, 23.5776172 ], [ 71.0601319, 23.5769651 ], [ 71.0605349, 23.5759306 ], [ 71.0610911, 23.5757941 ], [ 71.0617785, 23.5751422 ], [ 71.0623245, 23.574363 ], [ 71.0622844, 23.5717903 ], [ 71.0628307, 23.5710111 ], [ 71.0628265, 23.5707538 ], [ 71.0628225, 23.5704964 ], [ 71.0630975, 23.5702356 ], [ 71.0633646, 23.56946 ], [ 71.0633485, 23.568431 ], [ 71.0638826, 23.5668799 ], [ 71.0648539, 23.5664806 ], [ 71.0651291, 23.5662197 ], [ 71.0665205, 23.5659438 ], [ 71.0667955, 23.5656828 ], [ 71.0679119, 23.565668 ], [ 71.068195, 23.5659215 ], [ 71.0704258, 23.5657637 ], [ 71.07054504306079, 23.56536075 ], [ 71.0724135, 23.5590468 ], [ 71.0728225, 23.5583976 ], [ 71.0742058, 23.5576072 ], [ 71.0749463, 23.5575567 ], [ 71.075045, 23.5577251 ], [ 71.0837065, 23.5582521 ], [ 71.0838476, 23.5583793 ], [ 71.0838597, 23.5591511 ], [ 71.0835847, 23.5594121 ], [ 71.0835929, 23.5599266 ], [ 71.0841591, 23.5604337 ], [ 71.0838962, 23.5614666 ], [ 71.0837938, 23.5637837 ], [ 71.0843519, 23.5637763 ], [ 71.0839531, 23.5650682 ], [ 71.083954560596283, 23.56516075 ], [ 71.083955609767528, 23.565227230244673 ], [ 71.083957716936169, 23.56536075 ], [ 71.0839937, 23.5676408 ], [ 71.0837269, 23.5684163 ], [ 71.083739, 23.5691882 ], [ 71.0823882, 23.5720368 ], [ 71.082113, 23.5722978 ], [ 71.0820064, 23.5743577 ], [ 71.0825647, 23.5743503 ], [ 71.0825728, 23.5748648 ], [ 71.083131, 23.5748572 ], [ 71.0831391, 23.5753719 ], [ 71.0835613, 23.5756234 ], [ 71.0835694, 23.5761381 ], [ 71.084148, 23.5774169 ], [ 71.0848524, 23.577793 ], [ 71.085698, 23.5782963 ], [ 71.0865475, 23.5790568 ], [ 71.0871077, 23.5791783 ], [ 71.0869962, 23.580981 ], [ 71.0871444, 23.5814938 ], [ 71.088817, 23.581342 ], [ 71.088954, 23.581212 ], [ 71.089086, 23.5806956 ], [ 71.0910317, 23.5801549 ], [ 71.0910236, 23.5796402 ], [ 71.0924129, 23.5792352 ], [ 71.0933751, 23.578322 ], [ 71.0934948, 23.5770337 ], [ 71.0920952, 23.5767954 ], [ 71.0919469, 23.5762827 ], [ 71.0915207, 23.5757739 ], [ 71.0895628, 23.5755429 ], [ 71.0897889, 23.5721948 ], [ 71.0903451, 23.5720581 ], [ 71.0915823, 23.5708841 ], [ 71.09171, 23.5701103 ], [ 71.0928244, 23.5699663 ], [ 71.0935156, 23.5695715 ], [ 71.0939244, 23.5689221 ], [ 71.0958658, 23.5681239 ], [ 71.0975384, 23.5679733 ], [ 71.0975303, 23.5674586 ], [ 71.1031183, 23.5677688 ], [ 71.1050678, 23.5674849 ], [ 71.1053426, 23.5672239 ], [ 71.1086815, 23.5665357 ], [ 71.1086734, 23.5660213 ], [ 71.1103458, 23.5658695 ], [ 71.1106208, 23.5656085 ], [ 71.111671515508334, 23.56516075 ], [ 71.11167151550832, 23.56516075 ], [ 71.113116, 23.5645452 ], [ 71.1142303, 23.5644019 ], [ 71.114222, 23.5638875 ], [ 71.1161695, 23.5634745 ], [ 71.1164445, 23.5632135 ], [ 71.1197871, 23.5627824 ], [ 71.1199179, 23.5622659 ], [ 71.1203309, 23.5618739 ], [ 71.1211598, 23.5613479 ], [ 71.1217159, 23.5612122 ], [ 71.1217077, 23.5606975 ], [ 71.1225428, 23.5605571 ], [ 71.1228177, 23.5602961 ], [ 71.1239319, 23.5601526 ], [ 71.1237879, 23.5598973 ], [ 71.1239155, 23.5591235 ], [ 71.1253108, 23.5591045 ], [ 71.1253025, 23.55859 ], [ 71.1258586, 23.5584533 ], [ 71.1261336, 23.5581921 ], [ 71.1266938, 23.5583137 ], [ 71.1266854, 23.5577992 ], [ 71.1280827, 23.5579083 ], [ 71.1309689, 23.5551674 ], [ 71.1316525, 23.554257 ], [ 71.1344265, 23.5531895 ], [ 71.1360759, 23.5516231 ], [ 71.1364877, 23.5512318 ], [ 71.1389283, 23.546824 ], [ 71.1392033, 23.546563 ], [ 71.1400113, 23.5447507 ], [ 71.140703, 23.5443547 ], [ 71.1418026, 23.5433103 ], [ 71.1426376, 23.5431706 ], [ 71.1427682, 23.5426541 ], [ 71.143181, 23.5422621 ], [ 71.1440097, 23.5417359 ], [ 71.1445658, 23.5416002 ], [ 71.1446881, 23.5405692 ], [ 71.1444006, 23.5400585 ], [ 71.1432679, 23.5390449 ], [ 71.1432638, 23.5387877 ], [ 71.1434015, 23.5386567 ], [ 71.1442365, 23.5385169 ], [ 71.1432178, 23.5359578 ], [ 71.1432012, 23.5349289 ], [ 71.143339, 23.5347979 ], [ 71.1436181, 23.5347939 ], [ 71.1439013, 23.5350474 ], [ 71.1461396, 23.5354029 ], [ 71.146541, 23.5343681 ], [ 71.14652, 23.5330818 ], [ 71.1457981, 23.5315481 ], [ 71.1441218, 23.531442 ], [ 71.1432912, 23.5318399 ], [ 71.1431303, 23.5305554 ], [ 71.1445046, 23.52925 ], [ 71.1447752, 23.5287316 ], [ 71.1447625, 23.5279599 ], [ 71.144328, 23.5269367 ], [ 71.1437678, 23.5268153 ], [ 71.1432037, 23.5264375 ], [ 71.143466, 23.5254046 ], [ 71.1401035, 23.52455 ], [ 71.1395371, 23.5240431 ], [ 71.138696, 23.5237974 ], [ 71.1378506, 23.5232942 ], [ 71.1372844, 23.5227873 ], [ 71.1341948, 23.5215433 ], [ 71.1319629, 23.5215738 ], [ 71.1303014, 23.5223685 ], [ 71.1233328, 23.5228503 ], [ 71.1233409, 23.5233647 ], [ 71.1230599, 23.5232394 ], [ 71.1225019, 23.523247 ], [ 71.1222271, 23.5235082 ], [ 71.1216669, 23.5233876 ], [ 71.1216752, 23.5239021 ], [ 71.1208404, 23.5240417 ], [ 71.1200117, 23.5245675 ], [ 71.1194556, 23.5247042 ], [ 71.1193239, 23.5252207 ], [ 71.1189141, 23.5257408 ], [ 71.1177981, 23.5257562 ], [ 71.1178106, 23.5265278 ], [ 71.1166987, 23.5268004 ], [ 71.1165668, 23.5273167 ], [ 71.116157, 23.527837 ], [ 71.1155991, 23.5278446 ], [ 71.1157463, 23.5283572 ], [ 71.1154713, 23.5286182 ], [ 71.1153407, 23.5291347 ], [ 71.1147826, 23.5291423 ], [ 71.1145159, 23.5299177 ], [ 71.1139599, 23.5300536 ], [ 71.1125772, 23.5308442 ], [ 71.1100661, 23.5308784 ], [ 71.1086628, 23.5303827 ], [ 71.1081049, 23.5303902 ], [ 71.1056121, 23.5315825 ], [ 71.1053659, 23.5336443 ], [ 71.1048079, 23.5336518 ], [ 71.105095, 23.5341627 ], [ 71.10426, 23.5343022 ], [ 71.1039852, 23.5345632 ], [ 71.1023192, 23.5351003 ], [ 71.1017694, 23.5356223 ], [ 71.1001013, 23.5360313 ], [ 71.1001094, 23.5365458 ], [ 71.0987204, 23.5369501 ], [ 71.0976206, 23.5379943 ], [ 71.0965106, 23.5383957 ], [ 71.0965188, 23.5389102 ], [ 71.0959627, 23.5390459 ], [ 71.0948569, 23.5397045 ], [ 71.094865, 23.540219 ], [ 71.09403, 23.5403585 ], [ 71.093205, 23.5411415 ], [ 71.09182, 23.541804 ], [ 71.0916881, 23.5423203 ], [ 71.0907284, 23.5433625 ], [ 71.0893372, 23.5436386 ], [ 71.0892052, 23.5441549 ], [ 71.0886594, 23.5449342 ], [ 71.0881094, 23.5454562 ], [ 71.0873007, 23.5472683 ], [ 71.0873088, 23.5477828 ], [ 71.0870338, 23.5480438 ], [ 71.086903, 23.5485603 ], [ 71.0860699, 23.5488287 ], [ 71.085942, 23.5496025 ], [ 71.085392, 23.5501245 ], [ 71.0851251, 23.5509 ], [ 71.0851374, 23.5516718 ], [ 71.0845914, 23.5524511 ], [ 71.0837866, 23.5545204 ], [ 71.0838354, 23.5576076 ], [ 71.0837004, 23.5578667 ], [ 71.0751346, 23.5573781 ], [ 71.074897, 23.5572126 ], [ 71.0748889, 23.5566979 ], [ 71.0746057, 23.5564445 ], [ 71.0744545, 23.5556745 ], [ 71.0738964, 23.5556819 ], [ 71.0736052, 23.5549138 ], [ 71.073045, 23.5547922 ], [ 71.0721998, 23.5542887 ], [ 71.0713525, 23.5536573 ], [ 71.0713485, 23.5534001 ], [ 71.0719066, 23.5533925 ], [ 71.0717585, 23.5528799 ], [ 71.0720334, 23.5526189 ], [ 71.0718824, 23.5518489 ], [ 71.0724406, 23.5518416 ], [ 71.0722965, 23.5515862 ], [ 71.0722884, 23.5510716 ], [ 71.0725634, 23.5508106 ], [ 71.0726509, 23.5474643 ], [ 71.073209, 23.5474568 ], [ 71.0730489, 23.5461723 ], [ 71.0733158, 23.5453968 ], [ 71.0730085, 23.5435996 ], [ 71.0732835, 23.5433388 ], [ 71.0735464, 23.5423059 ], [ 71.0735222, 23.5407624 ], [ 71.0737932, 23.5402441 ], [ 71.0737528, 23.5376715 ], [ 71.0740278, 23.5374105 ], [ 71.0739633, 23.5332942 ], [ 71.0747842, 23.532254 ], [ 71.0750512, 23.5314785 ], [ 71.0753262, 23.5312175 ], [ 71.075175, 23.5304475 ], [ 71.0757331, 23.5304401 ], [ 71.0754419, 23.529672 ], [ 71.076, 23.5296645 ], [ 71.0759919, 23.52915 ], [ 71.0754337, 23.5291574 ], [ 71.0754298, 23.5289002 ], [ 71.0771058, 23.529006 ], [ 71.0772429, 23.528876 ], [ 71.0773708, 23.5281024 ], [ 71.0779287, 23.5280948 ], [ 71.0774816, 23.5262995 ], [ 71.0770514, 23.5255333 ], [ 71.0764933, 23.5255409 ], [ 71.0767643, 23.5250226 ], [ 71.0756522, 23.5252948 ], [ 71.0757792, 23.524521 ], [ 71.0763292, 23.523999 ], [ 71.076863, 23.5224481 ], [ 71.077138, 23.5221871 ], [ 71.0771177, 23.5209007 ], [ 71.0766915, 23.5203918 ], [ 71.0761336, 23.5203993 ], [ 71.0765436, 23.5198792 ], [ 71.0766755, 23.5193627 ], [ 71.0783513, 23.5194685 ], [ 71.0790384, 23.5188165 ], [ 71.0790263, 23.5180448 ], [ 71.079564, 23.5167509 ], [ 71.0803888, 23.515968 ], [ 71.0806556, 23.5151924 ], [ 71.0803404, 23.5128807 ], [ 71.0796312, 23.5121183 ], [ 71.0790712, 23.5119966 ], [ 71.0779573, 23.5121406 ], [ 71.0779493, 23.5116261 ], [ 71.081016, 23.511456 ], [ 71.0811529, 23.511326 ], [ 71.0807148, 23.5100453 ], [ 71.0801569, 23.5100527 ], [ 71.0798577, 23.5087702 ], [ 71.0804135, 23.5086335 ], [ 71.0811003, 23.5079815 ], [ 71.0806501, 23.5059289 ], [ 71.0798133, 23.5059403 ], [ 71.0792493, 23.5055613 ], [ 71.0784043, 23.505058 ], [ 71.0770074, 23.5049484 ], [ 71.0769992, 23.5044337 ], [ 71.0780206, 23.5045078 ], [ 71.0781192, 23.5046762 ], [ 71.0783982, 23.5046725 ], [ 71.0783941, 23.5044152 ], [ 71.0782086, 23.5043292 ], [ 71.0778201, 23.5033937 ], [ 71.078378, 23.5033861 ], [ 71.078529, 23.5041561 ], [ 71.0790992, 23.5049204 ], [ 71.0795222, 23.5051722 ], [ 71.0795262, 23.5054294 ], [ 71.0799357, 23.5055716 ], [ 71.081487, 23.5059178 ], [ 71.0816341, 23.5064305 ], [ 71.0822001, 23.5069376 ], [ 71.0823481, 23.5074502 ], [ 71.082906, 23.5074428 ], [ 71.0829142, 23.5079573 ], [ 71.0833281, 23.5076944 ], [ 71.0832958, 23.5056364 ], [ 71.0824305, 23.5038467 ], [ 71.0824224, 23.5033321 ], [ 71.083243, 23.5022918 ], [ 71.0843305, 23.5004761 ], [ 71.0843145, 23.499447 ], [ 71.0845893, 23.499186 ], [ 71.085127, 23.4978923 ], [ 71.0854018, 23.4976313 ], [ 71.0855337, 23.4971147 ], [ 71.0866433, 23.4967135 ], [ 71.0880261, 23.4959231 ], [ 71.0888425, 23.4946254 ], [ 71.090229, 23.4940922 ], [ 71.0916239, 23.4940735 ], [ 71.0952215, 23.492224 ], [ 71.0957794, 23.4922164 ], [ 71.096608, 23.4916906 ], [ 71.0975696, 23.4907776 ], [ 71.097968, 23.4894855 ], [ 71.0985239, 23.4893489 ], [ 71.0989357, 23.4889579 ], [ 71.0994772, 23.4879214 ], [ 71.1003018, 23.4871382 ], [ 71.1005643, 23.4861055 ], [ 71.10111, 23.485326 ], [ 71.1018017, 23.4849305 ], [ 71.1045826, 23.4843782 ], [ 71.1051364, 23.4841134 ], [ 71.1056942, 23.4841059 ], [ 71.1062479, 23.4838411 ], [ 71.1070725, 23.483058 ], [ 71.1076282, 23.4829221 ], [ 71.107759, 23.4824058 ], [ 71.1075874, 23.4803497 ], [ 71.1070294, 23.4803572 ], [ 71.1070213, 23.4798426 ], [ 71.1056269, 23.4798615 ], [ 71.1051916, 23.478838 ], [ 71.1047656, 23.4783293 ], [ 71.1011398, 23.4783782 ], [ 71.1014107, 23.4778598 ], [ 71.1008527, 23.4778673 ], [ 71.1008488, 23.4776101 ], [ 71.1014065, 23.4776025 ], [ 71.1015373, 23.4770862 ], [ 71.1020829, 23.4763068 ], [ 71.1020706, 23.4755351 ], [ 71.1013536, 23.4742582 ], [ 71.1002421, 23.4745304 ], [ 71.0999794, 23.4755632 ], [ 71.0980312, 23.4758467 ], [ 71.098158, 23.4750732 ], [ 71.0987036, 23.4742939 ], [ 71.0989499, 23.4722319 ], [ 71.0994995, 23.4717099 ], [ 71.0994791, 23.4704236 ], [ 71.0991922, 23.4699129 ], [ 71.0993198, 23.4691391 ], [ 71.0984791, 23.4688932 ], [ 71.0986099, 23.4683767 ], [ 71.0983269, 23.4681233 ], [ 71.0981799, 23.4676107 ], [ 71.0964986, 23.4671185 ], [ 71.0964944, 23.4668613 ], [ 71.0990043, 23.4668275 ], [ 71.0989962, 23.466313 ], [ 71.1001096, 23.466169 ], [ 71.1008002, 23.465774 ], [ 71.1009321, 23.4652576 ], [ 71.1020495, 23.4653708 ], [ 71.1027524, 23.4657477 ], [ 71.1026339, 23.4670359 ], [ 71.1031937, 23.4671565 ], [ 71.1039087, 23.4683053 ], [ 71.1048996, 23.469192 ], [ 71.1054594, 23.4693138 ], [ 71.1054675, 23.4698282 ], [ 71.1060253, 23.4698207 ], [ 71.1060334, 23.4703351 ], [ 71.1074341, 23.4707018 ], [ 71.108566, 23.4717158 ], [ 71.1096856, 23.4719579 ], [ 71.1108176, 23.4729719 ], [ 71.1113753, 23.4729643 ], [ 71.1122201, 23.4734674 ], [ 71.1132101, 23.4743552 ], [ 71.1137966, 23.4761484 ], [ 71.1142216, 23.4765283 ], [ 71.1150604, 23.4766458 ], [ 71.1150644, 23.4769032 ], [ 71.1142277, 23.4769146 ], [ 71.114662, 23.4779378 ], [ 71.1155068, 23.4784411 ], [ 71.115511, 23.4786984 ], [ 71.1146907, 23.4797388 ], [ 71.114703, 23.4805105 ], [ 71.1144324, 23.4810287 ], [ 71.1151753, 23.4838492 ], [ 71.1157352, 23.4839698 ], [ 71.1171502, 23.4852372 ], [ 71.1177102, 23.4853587 ], [ 71.1181485, 23.4866394 ], [ 71.1199888, 23.4882863 ], [ 71.1227945, 23.4892775 ], [ 71.1233606, 23.4897844 ], [ 71.1244845, 23.4902837 ], [ 71.1256166, 23.4912975 ], [ 71.1264617, 23.4918006 ], [ 71.1287055, 23.4925419 ], [ 71.1292717, 23.4930488 ], [ 71.1301167, 23.4935519 ], [ 71.1306747, 23.4935441 ], [ 71.1309576, 23.4937976 ], [ 71.1326395, 23.4942894 ], [ 71.1340341, 23.4942703 ], [ 71.1359784, 23.493729 ], [ 71.1384681, 23.4924082 ], [ 71.1391545, 23.4917558 ], [ 71.1399746, 23.4907154 ], [ 71.1407864, 23.4891603 ], [ 71.1407822, 23.488903 ], [ 71.1402078, 23.4878817 ], [ 71.1380833, 23.4858524 ], [ 71.1375233, 23.4857309 ], [ 71.1363912, 23.4847173 ], [ 71.1358291, 23.4844676 ], [ 71.1344138, 23.4832005 ], [ 71.1338519, 23.4829509 ], [ 71.1330048, 23.4823196 ], [ 71.1316996, 23.4792497 ], [ 71.1313711, 23.4761663 ], [ 71.1319041, 23.4746152 ], [ 71.1324494, 23.4738358 ], [ 71.1324371, 23.4730641 ], [ 71.1317113, 23.4712728 ], [ 71.132833, 23.471643 ], [ 71.1332613, 23.4722809 ], [ 71.1341186, 23.4735557 ], [ 71.1347385, 23.4774069 ], [ 71.1358956, 23.4799641 ], [ 71.1373191, 23.4817458 ], [ 71.1380271, 23.482379 ], [ 71.138868, 23.4826247 ], [ 71.1405395, 23.4824736 ], [ 71.1403953, 23.4822183 ], [ 71.1403704, 23.4806747 ], [ 71.1413409, 23.480275 ], [ 71.1418986, 23.4802673 ], [ 71.1428929, 23.481412 ], [ 71.144325, 23.4837082 ], [ 71.1448911, 23.4842149 ], [ 71.1456034, 23.4851053 ], [ 71.1489753, 23.4866027 ], [ 71.1496867, 23.4874939 ], [ 71.1505361, 23.4882542 ], [ 71.1508234, 23.4887647 ], [ 71.1518147, 23.4896513 ], [ 71.1523766, 23.4899008 ], [ 71.1540502, 23.4898777 ], [ 71.1546038, 23.4896127 ], [ 71.1552859, 23.4887031 ], [ 71.1557977, 23.4858656 ], [ 71.155781, 23.4848365 ], [ 71.1550676, 23.4838172 ], [ 71.1545076, 23.4836959 ], [ 71.1542244, 23.4834425 ], [ 71.1522596, 23.4826976 ], [ 71.1516956, 23.48232 ], [ 71.1515473, 23.4818074 ], [ 71.1506898, 23.4805326 ], [ 71.1492619, 23.4784939 ], [ 71.1484085, 23.4774763 ], [ 71.1478425, 23.4769696 ], [ 71.1472721, 23.4762055 ], [ 71.1464021, 23.474159 ], [ 71.146119, 23.4739055 ], [ 71.1459718, 23.473393 ], [ 71.1470895, 23.4735058 ], [ 71.1479385, 23.4742659 ], [ 71.1485006, 23.4745154 ], [ 71.1496285, 23.4752718 ], [ 71.1503358, 23.4759059 ], [ 71.1510481, 23.4767963 ], [ 71.1524467, 23.4770342 ], [ 71.1528584, 23.476643 ], [ 71.1528498, 23.4761285 ], [ 71.1519924, 23.4748537 ], [ 71.1505603, 23.4725578 ], [ 71.149568, 23.4715421 ], [ 71.1490082, 23.4714207 ], [ 71.1487253, 23.4711673 ], [ 71.1462071, 23.4706874 ], [ 71.1448022, 23.4700639 ], [ 71.1443585, 23.4685262 ], [ 71.1439323, 23.4680174 ], [ 71.1433724, 23.4678959 ], [ 71.1425255, 23.4672648 ], [ 71.1423772, 23.4667522 ], [ 71.1420942, 23.4664988 ], [ 71.1420901, 23.4662416 ], [ 71.1429058, 23.4649437 ], [ 71.1434427, 23.4636498 ], [ 71.143422, 23.4623635 ], [ 71.1427128, 23.4616012 ], [ 71.1421532, 23.4614799 ], [ 71.1413082, 23.4609768 ], [ 71.1399015, 23.4602242 ], [ 71.1393375, 23.4598464 ], [ 71.1391893, 23.4593338 ], [ 71.1386232, 23.4588269 ], [ 71.1380491, 23.4578056 ], [ 71.1380408, 23.4572911 ], [ 71.138586, 23.4565117 ], [ 71.138697, 23.454709 ], [ 71.1375752, 23.4543378 ], [ 71.1353486, 23.4546256 ], [ 71.1347971, 23.4550197 ], [ 71.1345308, 23.4557952 ], [ 71.1323144, 23.4567258 ], [ 71.1317567, 23.4567334 ], [ 71.1303502, 23.4559806 ], [ 71.1250149, 23.4537375 ], [ 71.124168, 23.4531063 ], [ 71.1242863, 23.451818 ], [ 71.1238563, 23.451052 ], [ 71.1221791, 23.4508175 ], [ 71.1218797, 23.4495349 ], [ 71.1235507, 23.4493831 ], [ 71.1263513, 23.4501168 ], [ 71.1274832, 23.4511308 ], [ 71.1294475, 23.4518759 ], [ 71.1300052, 23.4518683 ], [ 71.1308251, 23.4508279 ], [ 71.1319323, 23.4502981 ], [ 71.1323439, 23.4499069 ], [ 71.1324755, 23.4493905 ], [ 71.133314, 23.4495071 ], [ 71.133597, 23.4497606 ], [ 71.1366849, 23.451005 ], [ 71.1372426, 23.4509974 ], [ 71.137933, 23.4506024 ], [ 71.1383186, 23.4485385 ], [ 71.1371971, 23.4481675 ], [ 71.1366312, 23.4476606 ], [ 71.1338283, 23.4467988 ], [ 71.1328147, 23.4444967 ], [ 71.1323887, 23.443988 ], [ 71.1290345, 23.4435192 ], [ 71.1288863, 23.4430067 ], [ 71.1286034, 23.4427532 ], [ 71.1280128, 23.4407026 ], [ 71.1272957, 23.4394259 ], [ 71.1250508, 23.4385553 ], [ 71.1247678, 23.4383019 ], [ 71.1228038, 23.4375567 ], [ 71.1216885, 23.4375718 ], [ 71.1214118, 23.4377046 ], [ 71.1214201, 23.4382193 ], [ 71.1208624, 23.4382269 ], [ 71.1206854, 23.4359133 ], [ 71.1205426, 23.435658 ], [ 71.119421, 23.4352868 ], [ 71.1182895, 23.434273 ], [ 71.1166125, 23.4340384 ], [ 71.1152103, 23.4335427 ], [ 71.1132587, 23.4335691 ], [ 71.1129818, 23.433702 ], [ 71.1129901, 23.4342165 ], [ 71.1118728, 23.4341025 ], [ 71.1110281, 23.4335994 ], [ 71.109913, 23.4336145 ], [ 71.1096361, 23.4337472 ], [ 71.1092337, 23.434782 ], [ 71.1092379, 23.4350392 ], [ 71.1093798, 23.4351656 ], [ 71.1113417, 23.4357827 ], [ 71.1107964, 23.4365621 ], [ 71.109679, 23.4364482 ], [ 71.1074322, 23.4354491 ], [ 71.1037994, 23.4349836 ], [ 71.1018316, 23.4339808 ], [ 71.1007, 23.4329668 ], [ 71.0984513, 23.4318394 ], [ 71.0978571, 23.4295315 ], [ 71.0967357, 23.4291601 ], [ 71.0956206, 23.4291753 ], [ 71.0945116, 23.4295765 ], [ 71.0945035, 23.4290621 ], [ 71.0939499, 23.4293267 ], [ 71.0936872, 23.4303595 ], [ 71.0922952, 23.4305064 ], [ 71.0903275, 23.4295036 ], [ 71.0892122, 23.4295185 ], [ 71.085608, 23.4308532 ], [ 71.0853332, 23.4311142 ], [ 71.0847775, 23.4312509 ], [ 71.0846619, 23.4327963 ], [ 71.0842523, 23.4333164 ], [ 71.0831391, 23.4334595 ], [ 71.0814621, 23.4332244 ], [ 71.0806337, 23.4337502 ], [ 71.0784173, 23.4346808 ], [ 71.0781546, 23.4357135 ], [ 71.0787123, 23.4357062 ], [ 71.0787242, 23.436478 ], [ 71.0778777, 23.4358455 ], [ 71.0770372, 23.4355994 ], [ 71.0762009, 23.4356105 ], [ 71.0750977, 23.4363971 ], [ 71.073158, 23.4371949 ], [ 71.0695292, 23.4369857 ], [ 71.0684039, 23.4363578 ], [ 71.0682361, 23.4345587 ], [ 71.0690523, 23.4332613 ], [ 71.0697178, 23.4311938 ], [ 71.0702735, 23.4310573 ], [ 71.0705483, 23.4307965 ], [ 71.0722211, 23.4307742 ], [ 71.0729117, 23.4303796 ], [ 71.0730395, 23.4296058 ], [ 71.0735952, 23.4294694 ], [ 71.073732, 23.4293393 ], [ 71.0737201, 23.4285674 ], [ 71.0731504, 23.4278031 ], [ 71.0731463, 23.4275459 ], [ 71.0739667, 23.4265056 ], [ 71.0739467, 23.4252193 ], [ 71.0732342, 23.4241995 ], [ 71.0715574, 23.4239643 ], [ 71.0714094, 23.4234518 ], [ 71.0709837, 23.4229428 ], [ 71.0684746, 23.4229761 ], [ 71.0687734, 23.4242586 ], [ 71.0698925, 23.4245011 ], [ 71.0704821, 23.4265519 ], [ 71.0699225, 23.4264302 ], [ 71.0682259, 23.4249088 ], [ 71.0676641, 23.4246589 ], [ 71.0654358, 23.4248175 ], [ 71.0653118, 23.4258485 ], [ 71.0663181, 23.4277646 ], [ 71.0674394, 23.4281361 ], [ 71.0681639, 23.4299279 ], [ 71.0681799, 23.430957 ], [ 71.0674075, 23.4350844 ], [ 71.0664481, 23.4361263 ], [ 71.0636619, 23.4362915 ], [ 71.0633852, 23.4364242 ], [ 71.0631263, 23.4377143 ], [ 71.063684, 23.4377069 ], [ 71.063704, 23.4389933 ], [ 71.0625927, 23.4392652 ], [ 71.0623258, 23.4400407 ], [ 71.058719, 23.4412459 ], [ 71.0578904, 23.4417716 ], [ 71.0573387, 23.4421652 ], [ 71.056801, 23.4434589 ], [ 71.0551378, 23.4441237 ], [ 71.0531841, 23.4440212 ], [ 71.0526025, 23.4424848 ], [ 71.0506487, 23.4423815 ], [ 71.0498042, 23.441878 ], [ 71.0495252, 23.4418815 ], [ 71.0492504, 23.4421426 ], [ 71.0486948, 23.442279 ], [ 71.0485629, 23.4427954 ], [ 71.0481529, 23.4433153 ], [ 71.0473145, 23.4431972 ], [ 71.0467628, 23.4435909 ], [ 71.046472, 23.4428228 ], [ 71.0456315, 23.4425765 ], [ 71.0456394, 23.443091 ], [ 71.0436855, 23.4429874 ], [ 71.0431299, 23.4431238 ], [ 71.0431378, 23.4436385 ], [ 71.0439743, 23.4436275 ], [ 71.0436995, 23.4438884 ], [ 71.0438464, 23.4444011 ], [ 71.0445498, 23.4447774 ], [ 71.0455392, 23.4456655 ], [ 71.0455591, 23.4469519 ], [ 71.0451491, 23.447472 ], [ 71.0434859, 23.4481367 ], [ 71.0412512, 23.4479086 ], [ 71.0409743, 23.4480412 ], [ 71.0408422, 23.4485576 ], [ 71.0404325, 23.4490777 ], [ 71.0382036, 23.449235 ], [ 71.0368133, 23.4495105 ], [ 71.0359688, 23.4490068 ], [ 71.0351204, 23.4482459 ], [ 71.032595, 23.4472495 ], [ 71.0317487, 23.4466177 ], [ 71.0317447, 23.4463605 ], [ 71.0323024, 23.4463533 ], [ 71.0315929, 23.4455905 ], [ 71.0311594, 23.4445669 ], [ 71.0306018, 23.444574 ], [ 71.0307368, 23.4443149 ], [ 71.0306974, 23.4417423 ], [ 71.0302678, 23.4409759 ], [ 71.02777, 23.4417802 ], [ 71.0276498, 23.4430685 ], [ 71.0271038, 23.4438475 ], [ 71.0271197, 23.4448766 ], [ 71.0269845, 23.4451358 ], [ 71.0258692, 23.4451503 ], [ 71.0258613, 23.4446357 ], [ 71.0244633, 23.4443966 ], [ 71.024471, 23.444911 ], [ 71.0241923, 23.4449146 ], [ 71.0240445, 23.4444019 ], [ 71.0236188, 23.4438929 ], [ 71.0225015, 23.4437782 ], [ 71.0219477, 23.4440428 ], [ 71.0208343, 23.4441862 ], [ 71.0208265, 23.4436718 ], [ 71.0213822, 23.4435353 ], [ 71.0216572, 23.4432745 ], [ 71.0222147, 23.4432673 ], [ 71.0224956, 23.4433928 ], [ 71.0226268, 23.4428764 ], [ 71.0227647, 23.4427455 ], [ 71.0233223, 23.4427383 ], [ 71.023884, 23.4429883 ], [ 71.0244415, 23.442981 ], [ 71.0245786, 23.4428511 ], [ 71.0247107, 23.4423346 ], [ 71.0255453, 23.4421947 ], [ 71.0256821, 23.4420647 ], [ 71.0255355, 23.4415519 ], [ 71.0260911, 23.4414157 ], [ 71.0262282, 23.4412856 ], [ 71.0264912, 23.4402529 ], [ 71.0266292, 23.440122 ], [ 71.0308156, 23.4403249 ], [ 71.0310985, 23.4405786 ], [ 71.0327793, 23.4410713 ], [ 71.0336158, 23.4410603 ], [ 71.0338908, 23.4407995 ], [ 71.0358307, 23.4400023 ], [ 71.0362387, 23.4393541 ], [ 71.0370594, 23.438314 ], [ 71.0370397, 23.4370277 ], [ 71.0364703, 23.4362631 ], [ 71.0363274, 23.4360076 ], [ 71.0346525, 23.4359005 ], [ 71.0341006, 23.436294 ], [ 71.0340928, 23.4357795 ], [ 71.0338139, 23.4357831 ], [ 71.0338218, 23.4362977 ], [ 71.0335409, 23.4361722 ], [ 71.0327065, 23.4363121 ], [ 71.0321214, 23.4345185 ], [ 71.0304542, 23.4349258 ], [ 71.0301715, 23.4346721 ], [ 71.0276504, 23.433933 ], [ 71.023189, 23.4339908 ], [ 71.0212412, 23.4342734 ], [ 71.0190906, 23.4333125 ], [ 71.0189931, 23.4331448 ], [ 71.0178797, 23.4332875 ], [ 71.015725, 23.433204961867123 ], [ 71.012857, 23.4330951 ], [ 71.0092439, 23.4339137 ], [ 71.0064557, 23.4339494 ], [ 71.0056115, 23.4334457 ], [ 71.0043129, 23.433503 ], [ 71.0042153, 23.4333353 ], [ 71.003104, 23.4336069 ], [ 71.0027007, 23.4346415 ], [ 71.0022907, 23.4351615 ], [ 71.0011811, 23.4355612 ], [ 71.0000639, 23.4354472 ], [ 71.0001951, 23.4349309 ], [ 70.9999124, 23.4346772 ], [ 70.9997657, 23.4341645 ], [ 71.0003216, 23.4340282 ], [ 71.0007334, 23.4336374 ], [ 71.0011367, 23.432603 ], [ 71.000579, 23.43261 ], [ 71.0002847, 23.4315845 ], [ 70.9977714, 23.4313594 ], [ 70.9977636, 23.4308447 ], [ 70.9969252, 23.4307264 ], [ 70.9966483, 23.4308591 ], [ 70.9968028, 23.4318865 ], [ 70.9966678, 23.4321454 ], [ 70.9958273, 23.4318989 ], [ 70.9959354, 23.4298388 ], [ 70.9956527, 23.4295852 ], [ 70.995506, 23.4290723 ], [ 70.9946735, 23.4293403 ], [ 70.9946619, 23.4285684 ], [ 70.9932639, 23.4283289 ], [ 70.9935196, 23.4267818 ], [ 70.9940772, 23.4267746 ], [ 70.9942046, 23.426001 ], [ 70.9943425, 23.42587 ], [ 70.9957307, 23.4254669 ], [ 70.9955754, 23.4244395 ], [ 70.9951424, 23.4234157 ], [ 70.9906659, 23.4224435 ], [ 70.9910683, 23.4214091 ], [ 70.9913433, 23.4211482 ], [ 70.9914639, 23.41986 ], [ 70.9939615, 23.4190562 ], [ 70.9939538, 23.4185416 ], [ 70.9931135, 23.4182949 ], [ 70.9926793, 23.4172711 ], [ 70.9926718, 23.4167566 ], [ 70.9944709, 23.4158324 ], [ 70.9966954, 23.4154185 ], [ 70.99654, 23.4143911 ], [ 70.9961146, 23.413882 ], [ 70.9958377, 23.4140137 ], [ 70.9911042, 23.4144607 ], [ 70.9916001, 23.4103369 ], [ 70.9907676, 23.4106049 ], [ 70.9909143, 23.4111176 ], [ 70.9906778, 23.4139513 ], [ 70.9899967, 23.4149893 ], [ 70.9891603, 23.4150001 ], [ 70.9891681, 23.4155145 ], [ 70.9883297, 23.4153962 ], [ 70.9874971, 23.415664 ], [ 70.9863955, 23.4165792 ], [ 70.9861282, 23.4173546 ], [ 70.9852938, 23.4174934 ], [ 70.9847304, 23.417115 ], [ 70.984602, 23.4178888 ], [ 70.9839171, 23.4186693 ], [ 70.9830806, 23.4186801 ], [ 70.983073, 23.4181655 ], [ 70.9822365, 23.418176 ], [ 70.9823717, 23.4179171 ], [ 70.9822212, 23.4171469 ], [ 70.9813849, 23.4171575 ], [ 70.9813924, 23.4176722 ], [ 70.9811137, 23.4176758 ], [ 70.9811021, 23.4169039 ], [ 70.9797102, 23.4170496 ], [ 70.9783066, 23.4164246 ], [ 70.9782989, 23.4159099 ], [ 70.9757822, 23.4154272 ], [ 70.9757746, 23.4149126 ], [ 70.976609, 23.4147729 ], [ 70.9780048, 23.4148844 ], [ 70.9779973, 23.4143698 ], [ 70.9796718, 23.4144767 ], [ 70.9827291, 23.4137952 ], [ 70.9827213, 23.4132806 ], [ 70.9832807, 23.4134017 ], [ 70.98718, 23.4130948 ], [ 70.9880086, 23.4125695 ], [ 70.9886956, 23.4119181 ], [ 70.9889589, 23.4108854 ], [ 70.9895049, 23.4101063 ], [ 70.9893545, 23.4093363 ], [ 70.9890776, 23.409468 ], [ 70.9876818, 23.4093575 ], [ 70.9878169, 23.4090986 ], [ 70.9876665, 23.4083284 ], [ 70.9871089, 23.4083356 ], [ 70.9871012, 23.4078209 ], [ 70.9882144, 23.4076777 ], [ 70.9893352, 23.4080498 ], [ 70.9893276, 23.4075353 ], [ 70.9898852, 23.4075282 ], [ 70.9898967, 23.4083 ], [ 70.9904484, 23.4079065 ], [ 70.9915597, 23.4076351 ], [ 70.9951838, 23.4075888 ], [ 70.9960161, 23.4073208 ], [ 70.9968409, 23.4065384 ], [ 70.9973966, 23.406403 ], [ 70.9972412, 23.4053756 ], [ 70.9965332, 23.4046126 ], [ 70.9951335, 23.4042441 ], [ 70.9929035, 23.4042726 ], [ 70.9901195, 23.4045654 ], [ 70.9892794, 23.4043187 ], [ 70.9884431, 23.4043293 ], [ 70.9873357, 23.4048582 ], [ 70.9867782, 23.4048653 ], [ 70.9865034, 23.4051262 ], [ 70.9840059, 23.4059298 ], [ 70.9826121, 23.4059475 ], [ 70.9815026, 23.406348 ], [ 70.9813896, 23.4081509 ], [ 70.9815314, 23.4082772 ], [ 70.9823698, 23.4083957 ], [ 70.9823773, 23.4089103 ], [ 70.9815372, 23.4086637 ], [ 70.9815525, 23.4096928 ], [ 70.9809931, 23.4095707 ], [ 70.9804278, 23.4090632 ], [ 70.9798684, 23.4089421 ], [ 70.9798606, 23.4084276 ], [ 70.9773535, 23.4085875 ], [ 70.9762462, 23.4091161 ], [ 70.9754117, 23.4092558 ], [ 70.9754193, 23.4097704 ], [ 70.9740254, 23.409788 ], [ 70.9737582, 23.4105635 ], [ 70.9718122, 23.4109736 ], [ 70.9706971, 23.4109876 ], [ 70.9704832796875, 23.410962162906767 ], [ 70.9687419, 23.410755 ], [ 70.968465, 23.4108876 ], [ 70.9684573, 23.410373 ], [ 70.9678978, 23.4102509 ], [ 70.9673327, 23.4097434 ], [ 70.9664945, 23.4096257 ], [ 70.9664907, 23.4093684 ], [ 70.9670464, 23.4092324 ], [ 70.9674582, 23.4088415 ], [ 70.9674469, 23.4080696 ], [ 70.9665954, 23.4070511 ], [ 70.9658875, 23.4062879 ], [ 70.965053, 23.4064267 ], [ 70.9644917, 23.4061764 ], [ 70.9622596, 23.4060763 ], [ 70.9621084, 23.4053061 ], [ 70.9615395, 23.4045414 ], [ 70.9611143, 23.404032 ], [ 70.9594397, 23.4039239 ], [ 70.9577501, 23.4027875 ], [ 70.9577576, 23.4033021 ], [ 70.957477, 23.4031764 ], [ 70.9563619, 23.4031904 ], [ 70.9541449, 23.4041193 ], [ 70.9538774, 23.4048946 ], [ 70.9527661, 23.4051658 ], [ 70.9527737, 23.4056805 ], [ 70.9522161, 23.4056875 ], [ 70.9519525, 23.4067202 ], [ 70.9508412, 23.4069914 ], [ 70.9507087, 23.4075076 ], [ 70.9502985, 23.4080275 ], [ 70.9497391, 23.4079052 ], [ 70.9486297, 23.4083055 ], [ 70.9486372, 23.4088202 ], [ 70.9472471, 23.4090948 ], [ 70.9473634, 23.4075493 ], [ 70.9477726, 23.4069005 ], [ 70.9487383, 23.4062456 ], [ 70.9491477, 23.4055966 ], [ 70.9499803, 23.4053289 ], [ 70.951084, 23.4045431 ], [ 70.9541279, 23.402961 ], [ 70.955793, 23.4024255 ], [ 70.9573048, 23.4009918 ], [ 70.957301, 23.4007344 ], [ 70.9565934, 23.3999714 ], [ 70.9543688, 23.4003847 ], [ 70.9532613, 23.4009132 ], [ 70.9518674, 23.4009305 ], [ 70.9499311, 23.4019842 ], [ 70.9493719, 23.4018629 ], [ 70.9493792, 23.4023775 ], [ 70.9485393, 23.4021307 ], [ 70.9485015, 23.3995576 ], [ 70.9482246, 23.3996894 ], [ 70.9462677, 23.3993282 ], [ 70.9464029, 23.3990693 ], [ 70.9463953, 23.3985546 ], [ 70.9461128, 23.3983008 ], [ 70.9459663, 23.397788 ], [ 70.9473583, 23.3976416 ], [ 70.9476333, 23.3973807 ], [ 70.9487427, 23.3969814 ], [ 70.9488514, 23.3949213 ], [ 70.94814, 23.3939009 ], [ 70.9472999, 23.3936539 ], [ 70.947573, 23.3932641 ], [ 70.9484093, 23.3932536 ], [ 70.94869, 23.3933792 ], [ 70.9486824, 23.3928646 ], [ 70.9489612, 23.3928612 ], [ 70.9489687, 23.3933758 ], [ 70.9509181, 23.3932224 ], [ 70.9517469, 23.3926973 ], [ 70.9528561, 23.392298 ], [ 70.9529723, 23.3907525 ], [ 70.9536603, 23.3901001 ], [ 70.9547639, 23.3893142 ], [ 70.9555964, 23.3890464 ], [ 70.9566981, 23.3881324 ], [ 70.9568483, 23.3889026 ], [ 70.9575514, 23.3892793 ], [ 70.9583894, 23.389398 ], [ 70.9583819, 23.3888833 ], [ 70.9622823, 23.3887053 ], [ 70.963111, 23.3881802 ], [ 70.9636684, 23.3881732 ], [ 70.9638054, 23.3880434 ], [ 70.9639377, 23.387527 ], [ 70.9658909, 23.3876306 ], [ 70.9672806, 23.3873558 ], [ 70.9675556, 23.387095 ], [ 70.9681112, 23.3869599 ], [ 70.9679636, 23.3864471 ], [ 70.9681016, 23.3863161 ], [ 70.970283279687493, 23.386204960289923 ], [ 70.970283279687493, 23.386204960289927 ], [ 70.9714446, 23.3861458 ], [ 70.9715758, 23.3856295 ], [ 70.9717081, 23.3851131 ], [ 70.9772845, 23.385171 ], [ 70.9782654, 23.385545 ], [ 70.9784129, 23.3860578 ], [ 70.9792509, 23.3861753 ], [ 70.9795334, 23.3864291 ], [ 70.9826187, 23.3876767 ], [ 70.9831762, 23.3876697 ], [ 70.9835881, 23.3872789 ], [ 70.9843974, 23.3854673 ], [ 70.9848103, 23.3850755 ], [ 70.9856427, 23.3848077 ], [ 70.9878725, 23.3847794 ], [ 70.9889816, 23.3843796 ], [ 70.9888264, 23.3833522 ], [ 70.9889644, 23.3832214 ], [ 70.9892429, 23.3832178 ], [ 70.9895255, 23.3834717 ], [ 70.9898043, 23.3834681 ], [ 70.9904833, 23.3823019 ], [ 70.9906155, 23.3817856 ], [ 70.9917341, 23.3820287 ], [ 70.9915828, 23.3812585 ], [ 70.9910139, 23.3804938 ], [ 70.9905886, 23.3799846 ], [ 70.986108, 23.3786257 ], [ 70.9852603, 23.3778644 ], [ 70.9835765, 23.3771139 ], [ 70.9771433, 23.3756514 ], [ 70.970283279687493, 23.376134005596828 ], [ 70.970283279687493, 23.376134005596832 ], [ 70.9682322, 23.3762783 ], [ 70.9671211, 23.3765497 ], [ 70.9559725, 23.3766896 ], [ 70.95485, 23.3761889 ], [ 70.9445339, 23.3760602 ], [ 70.9420103, 23.3750623 ], [ 70.9400444, 23.3740572 ], [ 70.9392082, 23.3740676 ], [ 70.9386546, 23.3743318 ], [ 70.9358675, 23.3743664 ], [ 70.9339053, 23.3736187 ], [ 70.9305588, 23.3735318 ], [ 70.9305514, 23.3730171 ], [ 70.9299939, 23.3730241 ], [ 70.9300015, 23.3735386 ], [ 70.9277662, 23.3731797 ], [ 70.9260827, 23.3724284 ], [ 70.9238531, 23.372456 ], [ 70.922727, 23.3716977 ], [ 70.9210436, 23.3709464 ], [ 70.9171379, 23.370737 ], [ 70.9168556, 23.3704832 ], [ 70.913511, 23.370524 ], [ 70.9123925, 23.3702804 ], [ 70.911549, 23.369776 ], [ 70.9109862, 23.3693974 ], [ 70.9110786, 23.3692265 ], [ 70.9112612, 23.3691366 ], [ 70.9112574, 23.3688794 ], [ 70.9109788, 23.3688828 ], [ 70.9108852, 23.3690527 ], [ 70.9107019, 23.3690143 ], [ 70.9098546, 23.3682526 ], [ 70.9020399, 23.3675758 ], [ 70.9014789, 23.3673254 ], [ 70.9009214, 23.3673322 ], [ 70.9006464, 23.3675928 ], [ 70.8998121, 23.3677321 ], [ 70.8998195, 23.3682466 ], [ 70.8984315, 23.3686492 ], [ 70.8950869, 23.3686896 ], [ 70.89481, 23.3688221 ], [ 70.8944061, 23.3698565 ], [ 70.8948575, 23.372167 ], [ 70.8943001, 23.3721738 ], [ 70.8943075, 23.3726885 ], [ 70.8937518, 23.3728234 ], [ 70.8929267, 23.3736053 ], [ 70.8920922, 23.3737446 ], [ 70.8920996, 23.3742592 ], [ 70.8904273, 23.3742795 ], [ 70.8897044, 23.3724868 ], [ 70.8888573, 23.3717249 ], [ 70.8886966, 23.3701827 ], [ 70.886742, 23.3699491 ], [ 70.88621, 23.3717569 ], [ 70.885649, 23.3715063 ], [ 70.8852158, 23.3704821 ], [ 70.8852013, 23.369453 ], [ 70.8854691, 23.3686777 ], [ 70.8857441, 23.3684171 ], [ 70.8865549, 23.3666059 ], [ 70.8865402, 23.3655766 ], [ 70.8861117, 23.3648098 ], [ 70.8838749, 23.364322 ], [ 70.8837567, 23.3658675 ], [ 70.8834853, 23.3663855 ], [ 70.8828, 23.3671657 ], [ 70.8822444, 23.3673006 ], [ 70.8814156, 23.3678253 ], [ 70.8808581, 23.3678321 ], [ 70.8805776, 23.3677072 ], [ 70.8804305, 23.3671942 ], [ 70.8801482, 23.3669402 ], [ 70.8801264, 23.3653965 ], [ 70.8798405, 23.3648852 ], [ 70.8798078, 23.3625696 ], [ 70.8803398, 23.3607616 ], [ 70.880289, 23.3571595 ], [ 70.8804252, 23.3569005 ], [ 70.8798679, 23.3569071 ], [ 70.8795783, 23.3561387 ], [ 70.879021, 23.3561453 ], [ 70.87901, 23.3553734 ], [ 70.8784527, 23.35538 ], [ 70.8784598, 23.3558947 ], [ 70.8781812, 23.3558981 ], [ 70.8780268, 23.3548705 ], [ 70.8787114, 23.3539612 ], [ 70.8792671, 23.3538263 ], [ 70.8792633, 23.353569 ], [ 70.8787059, 23.3535756 ], [ 70.8786951, 23.3528038 ], [ 70.877309, 23.353335 ], [ 70.8768295, 23.3521417 ], [ 70.8770121, 23.3520519 ], [ 70.8770085, 23.3517945 ], [ 70.8767299, 23.3517979 ], [ 70.8766364, 23.3519678 ], [ 70.8761726, 23.3518045 ], [ 70.8760219, 23.3510344 ], [ 70.8754536, 23.3502691 ], [ 70.8751714, 23.3500153 ], [ 70.8752931, 23.348727 ], [ 70.8741748, 23.348483 ], [ 70.874292, 23.3469376 ], [ 70.8740096, 23.3466836 ], [ 70.8738528, 23.3453988 ], [ 70.8716163, 23.3449108 ], [ 70.8714368, 23.3420822 ], [ 70.8710085, 23.3413152 ], [ 70.8696224, 23.3418465 ], [ 70.8696296, 23.3423611 ], [ 70.8690686, 23.3421103 ], [ 70.868808, 23.3434003 ], [ 70.8682506, 23.3434069 ], [ 70.8683432, 23.343236 ], [ 70.8685258, 23.3431462 ], [ 70.8685222, 23.342889 ], [ 70.8682434, 23.3428922 ], [ 70.8679684, 23.3431529 ], [ 70.8676789, 23.3423844 ], [ 70.8665625, 23.3422685 ], [ 70.8660017, 23.3420179 ], [ 70.8612608, 23.341817 ], [ 70.8601372, 23.3411875 ], [ 70.8610977, 23.3401466 ], [ 70.8619121, 23.3385929 ], [ 70.8619049, 23.3380782 ], [ 70.8600692, 23.3362986 ], [ 70.8589492, 23.3359253 ], [ 70.858667, 23.3356715 ], [ 70.8578275, 23.3354241 ], [ 70.8569843, 23.3349193 ], [ 70.8553088, 23.3346819 ], [ 70.8530904, 23.3354802 ], [ 70.8514185, 23.3354999 ], [ 70.8502934, 23.3347412 ], [ 70.8488929, 23.334243 ], [ 70.8461028, 23.3340187 ], [ 70.8449936, 23.3344182 ], [ 70.8445895, 23.3354522 ], [ 70.844179, 23.3359718 ], [ 70.8433431, 23.3359816 ], [ 70.8433467, 23.3362391 ], [ 70.843904, 23.3362324 ], [ 70.8439076, 23.3364897 ], [ 70.8402975, 23.3374324 ], [ 70.8355568, 23.3372307 ], [ 70.8338919, 23.337765 ], [ 70.8333418, 23.3382861 ], [ 70.8325111, 23.3386823 ], [ 70.8322465, 23.3397148 ], [ 70.8316893, 23.3397214 ], [ 70.8315565, 23.3402375 ], [ 70.8312815, 23.3404982 ], [ 70.830788, 23.3419595 ], [ 70.8303242, 23.3417962 ], [ 70.8304701, 23.3423092 ], [ 70.8308957, 23.3428189 ], [ 70.8297827, 23.3429601 ], [ 70.8281019, 23.3423368 ], [ 70.8278127, 23.3415681 ], [ 70.8269768, 23.3415779 ], [ 70.8269732, 23.3413205 ], [ 70.8275306, 23.3413141 ], [ 70.827527, 23.3410567 ], [ 70.8269679, 23.3409342 ], [ 70.8266857, 23.3406802 ], [ 70.8255693, 23.3405649 ], [ 70.8255657, 23.3403077 ], [ 70.8261214, 23.340172 ], [ 70.8268088, 23.339521 ], [ 70.8267946, 23.3384917 ], [ 70.82762, 23.33771 ], [ 70.8276094, 23.3369382 ], [ 70.8267489, 23.3351468 ], [ 70.8262998, 23.3328357 ], [ 70.824619, 23.3322117 ], [ 70.8240547, 23.3317034 ], [ 70.8226563, 23.3313341 ], [ 70.8225024, 23.3303065 ], [ 70.8219275, 23.3290264 ], [ 70.821221, 23.3282627 ], [ 70.8206636, 23.3282691 ], [ 70.8200889, 23.326989 ], [ 70.8189691, 23.3266156 ], [ 70.8181261, 23.3261105 ], [ 70.8175637, 23.3257316 ], [ 70.8174168, 23.3252187 ], [ 70.8158638, 23.3236925 ], [ 70.8144743, 23.323966 ], [ 70.814599, 23.322935 ], [ 70.814317, 23.322681 ], [ 70.8143134, 23.3224237 ], [ 70.814585, 23.3219059 ], [ 70.8145676, 23.3206191 ], [ 70.8141431, 23.3201094 ], [ 70.813586, 23.3201158 ], [ 70.8136933, 23.3177985 ], [ 70.81284, 23.3165216 ], [ 70.8119902, 23.315502 ], [ 70.8102977, 23.3139775 ], [ 70.8094444, 23.3127004 ], [ 70.8096986, 23.310896 ], [ 70.810524, 23.3101145 ], [ 70.8110604, 23.3085642 ], [ 70.8110498, 23.3077923 ], [ 70.8107642, 23.3072809 ], [ 70.8107574, 23.3067662 ], [ 70.811304, 23.3059879 ], [ 70.8121223, 23.3046916 ], [ 70.8122552, 23.3041754 ], [ 70.8133643, 23.303776 ], [ 70.814193, 23.3032518 ], [ 70.8148802, 23.3026008 ], [ 70.81529, 23.3019522 ], [ 70.8158436, 23.3016885 ], [ 70.816806, 23.300777 ], [ 70.8170775, 23.3002591 ], [ 70.8183159, 23.2990864 ], [ 70.8194232, 23.2985587 ], [ 70.8198352, 23.2981684 ], [ 70.820788, 23.296484 ], [ 70.8238347, 23.295162 ], [ 70.8243796, 23.2942554 ], [ 70.8218621, 23.2935126 ], [ 70.8207092, 23.290695 ], [ 70.8201522, 23.2907014 ], [ 70.8200018, 23.2899312 ], [ 70.8194342, 23.2891656 ], [ 70.8184247, 23.2866039 ], [ 70.8178678, 23.2866103 ], [ 70.8179785, 23.2845502 ], [ 70.8185077, 23.2824852 ], [ 70.8190507, 23.2814495 ], [ 70.818898, 23.2804219 ], [ 70.8202871, 23.2801484 ], [ 70.8205517, 23.2791159 ], [ 70.8230654, 23.2796014 ], [ 70.8231798, 23.2777986 ], [ 70.8228872, 23.2767727 ], [ 70.8226052, 23.2765185 ], [ 70.8223093, 23.2752351 ], [ 70.821885, 23.2747254 ], [ 70.8210458, 23.2744778 ], [ 70.8208991, 23.2739647 ], [ 70.8204748, 23.273455 ], [ 70.8190804, 23.2733421 ], [ 70.8179592, 23.2728403 ], [ 70.8168436, 23.272725 ], [ 70.8171116, 23.2719498 ], [ 70.8159923, 23.2715763 ], [ 70.8154351, 23.2715827 ], [ 70.8143142, 23.2710809 ], [ 70.8112401, 23.2703444 ], [ 70.8101189, 23.2698426 ], [ 70.809562, 23.269849 ], [ 70.8087194, 23.2693442 ], [ 70.8067665, 23.2691093 ], [ 70.8062059, 23.2688583 ], [ 70.8036958, 23.2686298 ], [ 70.8006234, 23.2680222 ], [ 70.8003346, 23.2672535 ], [ 70.7994956, 23.2670057 ], [ 70.7994852, 23.2662338 ], [ 70.7986531, 23.2665007 ], [ 70.7983573, 23.2652172 ], [ 70.7975183, 23.2649696 ], [ 70.7973441, 23.2623979 ], [ 70.8000462, 23.2561904 ], [ 70.8003212, 23.2559299 ], [ 70.8003144, 23.2554153 ], [ 70.8005894, 23.2551548 ], [ 70.8013972, 23.2530866 ], [ 70.8019438, 23.2523083 ], [ 70.8019368, 23.2517937 ], [ 70.8027549, 23.2504975 ], [ 70.8027479, 23.2499829 ], [ 70.8032945, 23.2492046 ], [ 70.8081615, 23.2383395 ], [ 70.8111445, 23.232386 ], [ 70.8111375, 23.2318714 ], [ 70.8109953, 23.2316156 ], [ 70.8076351, 23.2302384 ], [ 70.8051171, 23.2293671 ], [ 70.8056497, 23.2275595 ], [ 70.8034136, 23.2269413 ], [ 70.7986544, 23.225066 ], [ 70.7986476, 23.2245516 ], [ 70.7978105, 23.2244319 ], [ 70.7966865, 23.2236727 ], [ 70.7919258, 23.2216682 ], [ 70.7908018, 23.220909 ], [ 70.7899562, 23.2201466 ], [ 70.7863163, 23.2186438 ], [ 70.785201, 23.2185282 ], [ 70.784968859374999, 23.219433355571439 ], [ 70.7849362, 23.2195607 ], [ 70.7793373, 23.2173078 ], [ 70.7809496, 23.2129145 ], [ 70.7820581, 23.2125155 ], [ 70.7824701, 23.2121252 ], [ 70.7843711, 23.2085006 ], [ 70.784968859374999, 23.207744815629564 ], [ 70.7851927, 23.2074618 ], [ 70.787273889439589, 23.203025 ], [ 70.7887124, 23.1999583 ], [ 70.7895406, 23.1994342 ], [ 70.7899449, 23.1984002 ], [ 70.7907852, 23.1987761 ], [ 70.7913488, 23.1992846 ], [ 70.7921908, 23.1997897 ], [ 70.7941464, 23.2002821 ], [ 70.7983495, 23.2022929 ], [ 70.799432900026346, 23.203025 ], [ 70.7994733, 23.2030523 ], [ 70.799664838517245, 23.203225 ], [ 70.8008825, 23.2043229 ], [ 70.8011609, 23.2043197 ], [ 70.8015693, 23.203672 ], [ 70.801953239667782, 23.203125110828275 ], [ 70.8021157, 23.2028937 ], [ 70.8026621, 23.2021154 ], [ 70.8032085, 23.2013371 ], [ 70.8037549, 23.2005586 ], [ 70.8045761, 23.1995199 ], [ 70.8044306, 23.1990067 ], [ 70.8033119, 23.1986331 ], [ 70.8027483, 23.1981248 ], [ 70.7999507, 23.1971275 ], [ 70.7991088, 23.1966223 ], [ 70.7985452, 23.1961141 ], [ 70.795466, 23.1948625 ], [ 70.7943422, 23.1941033 ], [ 70.7918251, 23.1932316 ], [ 70.7897984, 23.1978871 ], [ 70.7896701, 23.1986607 ], [ 70.7863108, 23.197283 ], [ 70.785168859375005, 23.196986532564669 ], [ 70.785089385829508, 23.196965899864775 ], [ 70.784968859374999, 23.196934609123318 ], [ 70.7768122, 23.194817 ], [ 70.775977, 23.1948264 ], [ 70.7754254, 23.1952192 ], [ 70.775439, 23.1962483 ], [ 70.774604, 23.1962577 ], [ 70.7746108, 23.1967724 ], [ 70.774054, 23.1967788 ], [ 70.7736631, 23.1988419 ], [ 70.7731199, 23.1998776 ], [ 70.7728585, 23.2011674 ], [ 70.771884136000764, 23.203025 ], [ 70.771884136000779, 23.203025 ], [ 70.771229, 23.204274 ], [ 70.770696, 23.2060816 ], [ 70.7696094, 23.2081526 ], [ 70.7690595, 23.2086735 ], [ 70.7668899, 23.213073 ], [ 70.7666147, 23.2133335 ], [ 70.7666215, 23.2138481 ], [ 70.7633619, 23.2200615 ], [ 70.7633719, 23.2208334 ], [ 70.7636571, 23.221345 ], [ 70.764362, 23.22198 ], [ 70.7710816, 23.2247355 ], [ 70.7727589, 23.2252312 ], [ 70.7749916, 23.2255926 ], [ 70.7747164, 23.225853 ], [ 70.7747198, 23.2261103 ], [ 70.7749984, 23.2261072 ], [ 70.7750908, 23.2259364 ], [ 70.7755535, 23.2259717 ], [ 70.7758353, 23.2262259 ], [ 70.7772343, 23.2267249 ], [ 70.7775161, 23.2269791 ], [ 70.780596, 23.228231 ], [ 70.7808778, 23.2284851 ], [ 70.785168859375005, 23.229846698266915 ], [ 70.7887083, 23.2309698 ], [ 70.7892651, 23.2309634 ], [ 70.7943012, 23.2327075 ], [ 70.794583, 23.2329617 ], [ 70.7951399, 23.2329553 ], [ 70.7980785, 23.2340802 ], [ 70.7980819, 23.2343376 ], [ 70.7972741, 23.2364057 ], [ 70.7959164, 23.2389948 ], [ 70.795112, 23.2413202 ], [ 70.794837, 23.2415807 ], [ 70.794844, 23.2420953 ], [ 70.7942974, 23.2428736 ], [ 70.7936327, 23.2451974 ], [ 70.7928007, 23.2454642 ], [ 70.7929462, 23.2459774 ], [ 70.7926712, 23.2462378 ], [ 70.7918634, 23.2483059 ], [ 70.7915883, 23.2485665 ], [ 70.7902371, 23.2516701 ], [ 70.7894155, 23.252709 ], [ 70.7894223, 23.2532236 ], [ 70.7883393, 23.2555521 ], [ 70.7880642, 23.2558126 ], [ 70.787396, 23.2578791 ], [ 70.7871158, 23.2577532 ], [ 70.7865588, 23.2577595 ], [ 70.7851715, 23.2581618 ], [ 70.785168859375005, 23.258154770524587 ], [ 70.7848827, 23.257393 ], [ 70.7837722, 23.2576631 ], [ 70.7837618, 23.256891 ], [ 70.7832048, 23.2568974 ], [ 70.7831946, 23.2561254 ], [ 70.7820789, 23.2560089 ], [ 70.7817969, 23.2557547 ], [ 70.7815185, 23.2557579 ], [ 70.7809683, 23.2562788 ], [ 70.7804114, 23.2562853 ], [ 70.7801345, 23.2564176 ], [ 70.7801277, 23.2559029 ], [ 70.777336, 23.2554198 ], [ 70.7770473, 23.254651 ], [ 70.7742505, 23.2537814 ], [ 70.7734048, 23.2530188 ], [ 70.7725626, 23.2525136 ], [ 70.7711666, 23.252272 ], [ 70.7692071, 23.2515221 ], [ 70.7689236, 23.2511395 ], [ 70.7680897, 23.2512773 ], [ 70.7661301, 23.2505272 ], [ 70.7655664, 23.2500188 ], [ 70.7650113, 23.2501543 ], [ 70.7650045, 23.2496396 ], [ 70.7644509, 23.2499031 ], [ 70.7644441, 23.2493885 ], [ 70.763607, 23.2492688 ], [ 70.7566061, 23.2463881 ], [ 70.7565926, 23.2453588 ], [ 70.755477, 23.2452422 ], [ 70.7546367, 23.2448659 ], [ 70.7550202, 23.2422879 ], [ 70.7550925, 23.2371399 ], [ 70.7562114, 23.237513 ], [ 70.7564932, 23.2377672 ], [ 70.757332, 23.2380152 ], [ 70.7578956, 23.2385236 ], [ 70.7584543, 23.2386464 ], [ 70.7585998, 23.2391596 ], [ 70.7601402, 23.2397854 ], [ 70.7609823, 23.2402906 ], [ 70.7615459, 23.240799 ], [ 70.7623881, 23.2413044 ], [ 70.7649079, 23.2423055 ], [ 70.7663171, 23.2435763 ], [ 70.7665956, 23.2435733 ], [ 70.7672863, 23.2431798 ], [ 70.7672658, 23.2416359 ], [ 70.768356, 23.2398222 ], [ 70.7682105, 23.2393091 ], [ 70.7665312, 23.2386841 ], [ 70.7662494, 23.2384299 ], [ 70.764847, 23.2376737 ], [ 70.7640048, 23.2371683 ], [ 70.7564445, 23.2340365 ], [ 70.7564377, 23.2335219 ], [ 70.756161, 23.2336531 ], [ 70.7553239, 23.2335344 ], [ 70.7548754, 23.2312231 ], [ 70.7543118, 23.2307147 ], [ 70.7541663, 23.2302015 ], [ 70.7538896, 23.2303329 ], [ 70.7516569, 23.2299721 ], [ 70.7531543, 23.2273819 ], [ 70.7548047, 23.2258192 ], [ 70.7550765, 23.2253015 ], [ 70.7550663, 23.2245295 ], [ 70.7549243, 23.2242738 ], [ 70.7543656, 23.2241509 ], [ 70.7529635, 23.2233943 ], [ 70.7521215, 23.222889 ], [ 70.7515579, 23.2223805 ], [ 70.7507159, 23.2218753 ], [ 70.7498739, 23.22137 ], [ 70.748195, 23.2207457 ], [ 70.7490067, 23.2189351 ], [ 70.7481681, 23.2186871 ], [ 70.7477334, 23.2174051 ], [ 70.7471699, 23.2168965 ], [ 70.7470243, 23.2163834 ], [ 70.7464658, 23.2162605 ], [ 70.7461842, 23.2160063 ], [ 70.7447886, 23.2157644 ], [ 70.7436667, 23.2151339 ], [ 70.7420882, 23.2115484 ], [ 70.7419363, 23.2105206 ], [ 70.7408176, 23.2101464 ], [ 70.7402542, 23.209638 ], [ 70.7394173, 23.2095191 ], [ 70.7392708, 23.209006 ], [ 70.7387074, 23.2084974 ], [ 70.738562, 23.2079842 ], [ 70.7380035, 23.2078614 ], [ 70.7365949, 23.20659 ], [ 70.7360349, 23.2063388 ], [ 70.7349079, 23.2053218 ], [ 70.7340712, 23.2052029 ], [ 70.7339381, 23.2057191 ], [ 70.7331128, 23.2065002 ], [ 70.732291, 23.2075387 ], [ 70.7318837, 23.2083153 ], [ 70.7313252, 23.2081923 ], [ 70.7310485, 23.2083246 ], [ 70.7306172, 23.2072999 ], [ 70.7301935, 23.2067897 ], [ 70.7279695, 23.2070715 ], [ 70.7279597, 23.2062997 ], [ 70.7265628, 23.2059285 ], [ 70.726006, 23.2059345 ], [ 70.7254524, 23.206198 ], [ 70.7237453, 23.2053023 ], [ 70.7236943, 23.2052617 ], [ 70.7236005, 23.2052641 ], [ 70.7234285, 23.2051827 ], [ 70.7230481, 23.2050126 ], [ 70.722712, 23.2048187 ], [ 70.7224421, 23.2046217 ], [ 70.7217447, 23.2040918 ], [ 70.7207534, 23.2033117 ], [ 70.720439710271592, 23.203025 ], [ 70.7202176, 23.202822 ], [ 70.7194818, 23.2021334 ], [ 70.718648, 23.2011084 ], [ 70.7183748, 23.2007141 ], [ 70.7176853, 23.1997194 ], [ 70.7171621, 23.1990217 ], [ 70.7166762, 23.1984833 ], [ 70.7162635, 23.1980227 ], [ 70.7158803, 23.1977043 ], [ 70.7157531, 23.197601 ], [ 70.7155643, 23.197523 ], [ 70.715357, 23.1974876 ], [ 70.7149738, 23.1974537 ], [ 70.7140083, 23.1974808 ], [ 70.713308, 23.1974922 ], [ 70.7121928, 23.1977796 ], [ 70.7104209, 23.1981532 ], [ 70.7080437, 23.1985422 ], [ 70.7046555, 23.1987702 ], [ 70.7026311, 23.198956 ], [ 70.6996051, 23.1992706 ], [ 70.6939236, 23.2010079 ], [ 70.6936549, 23.2017828 ], [ 70.6919911, 23.2023154 ], [ 70.6918579, 23.2028315 ], [ 70.691546252850543, 23.203225 ], [ 70.6910355, 23.2038699 ], [ 70.6906443, 23.205933 ], [ 70.6886972, 23.2060821 ], [ 70.6878571, 23.2057056 ], [ 70.6878507, 23.205191 ], [ 70.6859083, 23.2057266 ], [ 70.685646, 23.2070162 ], [ 70.6862045, 23.2071384 ], [ 70.6869081, 23.2077748 ], [ 70.687193, 23.2082864 ], [ 70.6878943, 23.2086644 ], [ 70.6887312, 23.2087846 ], [ 70.6884625, 23.2095597 ], [ 70.6870752, 23.2099602 ], [ 70.6856978, 23.2111335 ], [ 70.6856914, 23.2106189 ], [ 70.6851344, 23.2106249 ], [ 70.6849883, 23.2101116 ], [ 70.6847067, 23.2098574 ], [ 70.6841336, 23.2085765 ], [ 70.6834285, 23.207812 ], [ 70.6823213, 23.2083386 ], [ 70.6820525, 23.2091137 ], [ 70.6814975, 23.2092479 ], [ 70.6809471, 23.2097684 ], [ 70.6798301, 23.2095231 ], [ 70.6789949, 23.2095319 ], [ 70.6781677, 23.2101846 ], [ 70.6779085, 23.2117315 ], [ 70.6770749, 23.2118687 ], [ 70.6754124, 23.2125302 ], [ 70.6751501, 23.21382 ], [ 70.6748717, 23.213823 ], [ 70.6745676, 23.2117672 ], [ 70.6723483, 23.2124338 ], [ 70.6701369, 23.2137442 ], [ 70.6690312, 23.2143998 ], [ 70.670729, 23.216569 ], [ 70.6714326, 23.2172053 ], [ 70.6717175, 23.217717 ], [ 70.672702, 23.2184786 ], [ 70.6727116, 23.2192507 ], [ 70.67299, 23.2192477 ], [ 70.6729964, 23.2197623 ], [ 70.6724364, 23.219511 ], [ 70.6721484, 23.2187419 ], [ 70.6710314, 23.2184964 ], [ 70.6708757, 23.2172112 ], [ 70.6690424, 23.2153 ], [ 70.6684791, 23.2147912 ], [ 70.6676422, 23.2146718 ], [ 70.6669649, 23.2162233 ], [ 70.6671206, 23.2175085 ], [ 70.6665653, 23.2176427 ], [ 70.6654644, 23.2186837 ], [ 70.6649059, 23.2185614 ], [ 70.6647536, 23.2175336 ], [ 70.6655632, 23.215466 ], [ 70.6661106, 23.2146881 ], [ 70.6665222, 23.2141691 ], [ 70.6654069, 23.2140517 ], [ 70.6642981, 23.2144499 ], [ 70.6638927, 23.2154837 ], [ 70.6633423, 23.2160042 ], [ 70.6632098, 23.2165204 ], [ 70.6626498, 23.216269 ], [ 70.6625037, 23.2157557 ], [ 70.6599692, 23.2134662 ], [ 70.659403, 23.2127001 ], [ 70.6593965, 23.2121855 ], [ 70.6596687, 23.2116678 ], [ 70.6610448, 23.2103664 ], [ 70.6613168, 23.2098489 ], [ 70.6629683, 23.2082872 ], [ 70.6636536, 23.2073787 ], [ 70.6644761, 23.2063405 ], [ 70.6650297, 23.2060772 ], [ 70.6657141, 23.2051696 ], [ 70.6655689, 23.2046563 ], [ 70.6641722, 23.2042847 ], [ 70.6638906, 23.2040303 ], [ 70.6622202, 23.2040479 ], [ 70.6605402, 23.2032936 ], [ 70.660464265408805, 23.203225 ], [ 70.659977, 23.2027848 ], [ 70.6588634, 23.2027965 ], [ 70.658410278399145, 23.203225 ], [ 70.6563863, 23.205139 ], [ 70.6558328, 23.2054021 ], [ 70.6530788, 23.2078767 ], [ 70.6530724, 23.207362 ], [ 70.6525204, 23.2077535 ], [ 70.6519651, 23.2078884 ], [ 70.6516961, 23.2086633 ], [ 70.6505716, 23.2077739 ], [ 70.6497315, 23.207397 ], [ 70.6499974, 23.2063647 ], [ 70.6505557, 23.2064872 ], [ 70.6513973, 23.2069931 ], [ 70.6525077, 23.206724 ], [ 70.6527829, 23.2064637 ], [ 70.6538934, 23.2061948 ], [ 70.6547224, 23.2056712 ], [ 70.6571994, 23.2033288 ], [ 70.657417810034204, 23.203225 ], [ 70.657753, 23.2030657 ], [ 70.6581622, 23.2024184 ], [ 70.6581558, 23.2019037 ], [ 70.6577324, 23.2013934 ], [ 70.6566141, 23.2010186 ], [ 70.6557725, 23.2005127 ], [ 70.655211, 23.200133 ], [ 70.6556154, 23.1990993 ], [ 70.6558906, 23.1988391 ], [ 70.6558811, 23.198067 ], [ 70.6545941, 23.1952494 ], [ 70.6540388, 23.1953836 ], [ 70.6537636, 23.1956438 ], [ 70.6532068, 23.1956497 ], [ 70.6501603, 23.1969685 ], [ 70.6498819, 23.1969714 ], [ 70.6493221, 23.19672 ], [ 70.6465366, 23.1966208 ], [ 70.6466689, 23.1961048 ], [ 70.6470823, 23.195714 ], [ 70.6487464, 23.1951817 ], [ 70.6490216, 23.1949215 ], [ 70.6526343, 23.1943689 ], [ 70.6531879, 23.1941056 ], [ 70.6534614, 23.1937172 ], [ 70.6520664, 23.1934745 ], [ 70.6512091, 23.1916818 ], [ 70.6498188, 23.1918247 ], [ 70.6481374, 23.1909419 ], [ 70.6484111, 23.1905526 ], [ 70.6491019, 23.1901596 ], [ 70.6490955, 23.189645 ], [ 70.6486659, 23.18862 ], [ 70.6481076, 23.1884968 ], [ 70.6469815, 23.187479 ], [ 70.645588, 23.1873655 ], [ 70.6454546, 23.1878814 ], [ 70.6447717, 23.1889181 ], [ 70.6414109, 23.1872798 ], [ 70.6400127, 23.1867797 ], [ 70.6397313, 23.1865252 ], [ 70.6338606, 23.1845272 ], [ 70.6319073, 23.1841619 ], [ 70.6329583, 23.1790035 ], [ 70.6318402, 23.1786287 ], [ 70.6309989, 23.1781226 ], [ 70.6162276, 23.1767308 ], [ 70.6153894, 23.1764819 ], [ 70.6145544, 23.1764906 ], [ 70.6137162, 23.1762417 ], [ 70.6059239, 23.1764505 ], [ 70.605401, 23.179287 ], [ 70.6031772, 23.1795671 ], [ 70.6033066, 23.1787935 ], [ 70.6042569, 23.1767249 ], [ 70.5920078, 23.1767202 ], [ 70.5797495, 23.1759432 ], [ 70.5794925, 23.1777474 ], [ 70.5722566, 23.1779482 ], [ 70.5714184, 23.1776992 ], [ 70.567246, 23.177998 ], [ 70.5602855, 23.1779391 ], [ 70.5596692, 23.1727975 ], [ 70.5591139, 23.1729313 ], [ 70.5588327, 23.1726766 ], [ 70.5546425, 23.1714312 ], [ 70.5524127, 23.1711957 ], [ 70.5518531, 23.170944 ], [ 70.5501829, 23.1709604 ], [ 70.549906, 23.1710922 ], [ 70.5477533, 23.177548 ], [ 70.5463645, 23.1778191 ], [ 70.5464794, 23.1757588 ], [ 70.5472938, 23.1739491 ], [ 70.5471168, 23.1706049 ], [ 70.5401684, 23.1715734 ], [ 70.5396146, 23.1718363 ], [ 70.5379444, 23.1718525 ], [ 70.5373848, 23.1716006 ], [ 70.5362729, 23.1717406 ], [ 70.5362787, 23.1722553 ], [ 70.5357219, 23.1722608 ], [ 70.535055, 23.1748412 ], [ 70.5345071, 23.1756185 ], [ 70.53438, 23.1766493 ], [ 70.5341018, 23.176652 ], [ 70.53422, 23.1748493 ], [ 70.5348811, 23.1717542 ], [ 70.5346042, 23.1718852 ], [ 70.5340474, 23.1718905 ], [ 70.5329399, 23.1724161 ], [ 70.5304392, 23.172827 ], [ 70.5303054, 23.173343 ], [ 70.5300298, 23.173603 ], [ 70.5298972, 23.1741192 ], [ 70.5293373, 23.1738673 ], [ 70.5293432, 23.1743819 ], [ 70.5287836, 23.17413 ], [ 70.5289195, 23.1738712 ], [ 70.5289106, 23.1730992 ], [ 70.5293111, 23.1715511 ], [ 70.5251257, 23.1706904 ], [ 70.5220608, 23.1704626 ], [ 70.5215071, 23.1707253 ], [ 70.5134492, 23.1720899 ], [ 70.5117849, 23.1726206 ], [ 70.5070529, 23.172666 ], [ 70.5028688, 23.1719338 ], [ 70.5011988, 23.1719499 ], [ 70.4975901, 23.1728854 ], [ 70.4973204, 23.1736601 ], [ 70.4967636, 23.1736654 ], [ 70.496908, 23.1741789 ], [ 70.4966326, 23.1744388 ], [ 70.4963627, 23.1752137 ], [ 70.4963742, 23.176243 ], [ 70.495963, 23.1767618 ], [ 70.4954062, 23.1767671 ], [ 70.4958433, 23.1785645 ], [ 70.4962655, 23.1789463 ], [ 70.4987753, 23.1793088 ], [ 70.4982357, 23.1808584 ], [ 70.4946326, 23.1823078 ], [ 70.493255, 23.1836078 ], [ 70.492701, 23.1838705 ], [ 70.491873, 23.1845221 ], [ 70.4917418, 23.1852955 ], [ 70.4913304, 23.1858141 ], [ 70.4907751, 23.1859478 ], [ 70.4899471, 23.1865994 ], [ 70.4895404, 23.1876329 ], [ 70.4891291, 23.1881515 ], [ 70.4882911, 23.187902 ], [ 70.4872933, 23.1858525 ], [ 70.4870121, 23.1855977 ], [ 70.4861571, 23.1838041 ], [ 70.4853105, 23.1827826 ], [ 70.4851633, 23.1820117 ], [ 70.4846065, 23.1820169 ], [ 70.4841714, 23.1804768 ], [ 70.4813253, 23.174841 ], [ 70.4779087, 23.1679236 ], [ 70.4777615, 23.1671529 ], [ 70.4719386, 23.1692666 ], [ 70.4720915, 23.170552 ], [ 70.4746419, 23.1746463 ], [ 70.4752041, 23.1751559 ], [ 70.4757694, 23.1759228 ], [ 70.4769027, 23.1777138 ], [ 70.4783283, 23.1807892 ], [ 70.4802091, 23.1872061 ], [ 70.4774379, 23.18839 ], [ 70.4757662, 23.1882774 ], [ 70.4757211, 23.1841596 ], [ 70.4715438, 23.1840697 ], [ 70.4698679, 23.1835705 ], [ 70.4679233, 23.1839752 ], [ 70.467929, 23.1844898 ], [ 70.4673737, 23.1846233 ], [ 70.4659944, 23.1857949 ], [ 70.4657243, 23.1865696 ], [ 70.4651662, 23.1864456 ], [ 70.4648906, 23.1867057 ], [ 70.4640567, 23.1868425 ], [ 70.4637812, 23.1871024 ], [ 70.4635069, 23.1874906 ], [ 70.4637897, 23.1878744 ], [ 70.4632342, 23.1880079 ], [ 70.4621289, 23.1887903 ], [ 70.4613007, 23.189442 ], [ 70.4613064, 23.1899566 ], [ 70.4601957, 23.1902245 ], [ 70.4600615, 23.1907404 ], [ 70.4595103, 23.1912604 ], [ 70.4588315, 23.1928109 ], [ 70.4579963, 23.1928187 ], [ 70.4578315, 23.1905038 ], [ 70.4574032, 23.1894781 ], [ 70.4498989, 23.1907053 ], [ 70.4485124, 23.1912328 ], [ 70.4476842, 23.1918843 ], [ 70.4476869, 23.1921417 ], [ 70.4482439, 23.1921366 ], [ 70.4482465, 23.192394 ], [ 70.4468574, 23.1926641 ], [ 70.4469878, 23.1918907 ], [ 70.4475334, 23.1908561 ], [ 70.4475168, 23.189312 ], [ 70.4472355, 23.1890572 ], [ 70.4458048, 23.185467 ], [ 70.4455238, 23.185212 ], [ 70.4453796, 23.1846987 ], [ 70.4448228, 23.1847038 ], [ 70.4446719, 23.1836756 ], [ 70.4452178, 23.182641 ], [ 70.4457164, 23.1772313 ], [ 70.4452883, 23.1762056 ], [ 70.439448, 23.1767739 ], [ 70.4416236, 23.1849905 ], [ 70.4416345, 23.18602 ], [ 70.4414986, 23.1862785 ], [ 70.4364888, 23.1864526 ], [ 70.4348226, 23.1868544 ], [ 70.4346994, 23.1883999 ], [ 70.4342906, 23.1891757 ], [ 70.4323499, 23.1899655 ], [ 70.4322157, 23.1904815 ], [ 70.4325244, 23.1933101 ], [ 70.433376, 23.1948466 ], [ 70.4345308, 23.198697 ], [ 70.4356665, 23.2007457 ], [ 70.4359615, 23.2022874 ], [ 70.436289846512722, 23.203025 ], [ 70.4365321, 23.2035692 ], [ 70.4363989, 23.2040852 ], [ 70.4352892, 23.2044809 ], [ 70.4325062, 23.2046353 ], [ 70.431943918394524, 23.203225 ], [ 70.4317905, 23.2028402 ], [ 70.4313541, 23.2010424 ], [ 70.4294093, 23.2014458 ], [ 70.4288566, 23.2018374 ], [ 70.4290006, 23.2023507 ], [ 70.4295657, 23.2031178 ], [ 70.4297273, 23.2051755 ], [ 70.4266674, 23.2054607 ], [ 70.4256705, 23.2034106 ], [ 70.425465903294111, 23.203225 ], [ 70.4253894, 23.2031556 ], [ 70.425320768654842, 23.203025 ], [ 70.4228317, 23.1982885 ], [ 70.4225368, 23.1967467 ], [ 70.4216799, 23.1946954 ], [ 70.4207903, 23.1895556 ], [ 70.4203677, 23.1890445 ], [ 70.4168477, 23.1895027 ], [ 70.4160384, 23.1877966 ], [ 70.4142104, 23.1860113 ], [ 70.4133752, 23.1860188 ], [ 70.4135247, 23.187047 ], [ 70.4159147, 23.1892129 ], [ 70.4164741, 23.1894652 ], [ 70.4168954, 23.189848 ], [ 70.4174928, 23.1937036 ], [ 70.4180606, 23.194728 ], [ 70.4180931, 23.1978164 ], [ 70.418926001624868, 23.203225 ], [ 70.418926001624854, 23.203225 ], [ 70.4194389, 23.2065556 ], [ 70.4236319, 23.2080621 ], [ 70.4233698, 23.2096089 ], [ 70.4203081, 23.2097648 ], [ 70.4200311, 23.2098963 ], [ 70.4197663, 23.2111857 ], [ 70.4192067, 23.2109334 ], [ 70.4193346, 23.2099026 ], [ 70.4186253, 23.2086221 ], [ 70.4163964, 23.208513 ], [ 70.4155542, 23.2078776 ], [ 70.4155516, 23.2076202 ], [ 70.4166612, 23.2072237 ], [ 70.4167986, 23.2070942 ], [ 70.4167905, 23.2063222 ], [ 70.4165066, 23.20581 ], [ 70.4153821, 23.2047905 ], [ 70.4150982, 23.2042781 ], [ 70.4142549, 23.2035136 ], [ 70.414140009775522, 23.203225 ], [ 70.4135402, 23.2017183 ], [ 70.4127022, 23.2014684 ], [ 70.4121184, 23.1988997 ], [ 70.4115614, 23.1989047 ], [ 70.4112911, 23.1996794 ], [ 70.408507, 23.1997043 ], [ 70.4090018, 23.1937799 ], [ 70.4009251, 23.1935945 ], [ 70.4005499, 23.1977162 ], [ 70.4000037, 23.1987506 ], [ 70.4000252, 23.2008096 ], [ 70.4005902, 23.2015767 ], [ 70.401403272715058, 23.203225 ], [ 70.401403272715044, 23.203225 ], [ 70.4017279, 23.2038831 ], [ 70.4020224, 23.2054248 ], [ 70.4025902, 23.2064494 ], [ 70.4025954, 23.2069642 ], [ 70.401916, 23.2085146 ], [ 70.4005251, 23.2086552 ], [ 70.3994032, 23.2078929 ], [ 70.3985639, 23.2075147 ], [ 70.3981082, 23.2039154 ], [ 70.398840842278076, 23.203225 ], [ 70.3989355, 23.2031358 ], [ 70.398934344712117, 23.203025 ], [ 70.3989194, 23.2015917 ], [ 70.3980681, 23.2000547 ], [ 70.3980307, 23.1964516 ], [ 70.3988364, 23.1936132 ], [ 70.3988177, 23.1918115 ], [ 70.3982556, 23.1913018 ], [ 70.3985019, 23.1882109 ], [ 70.3987748, 23.1876936 ], [ 70.3987642, 23.1866641 ], [ 70.3986229, 23.186408 ], [ 70.3952847, 23.1866951 ], [ 70.3950143, 23.1874696 ], [ 70.3936196, 23.1872247 ], [ 70.3936142, 23.1867098 ], [ 70.3905544, 23.1869943 ], [ 70.3906958, 23.1872504 ], [ 70.3908516, 23.1887934 ], [ 70.390019, 23.1890581 ], [ 70.3893624, 23.1929249 ], [ 70.3892609, 23.1965293 ], [ 70.3881472, 23.1965391 ], [ 70.389117093282209, 23.203025 ], [ 70.3894926, 23.2055361 ], [ 70.3893566, 23.2057947 ], [ 70.3887998, 23.2057996 ], [ 70.388296386286271, 23.203025 ], [ 70.3879139, 23.2009169 ], [ 70.3873571, 23.2009219 ], [ 70.3873518, 23.200407 ], [ 70.3862407, 23.2006743 ], [ 70.3863821, 23.2009304 ], [ 70.3863953, 23.2022173 ], [ 70.385861071385804, 23.203025 ], [ 70.3857104, 23.2032528 ], [ 70.3843235, 23.2037799 ], [ 70.38425750419259, 23.203225 ], [ 70.3841706, 23.2024943 ], [ 70.3847168, 23.2014599 ], [ 70.3845675, 23.2004316 ], [ 70.3820576, 23.2000672 ], [ 70.3817805, 23.2001987 ], [ 70.3816461, 23.2007147 ], [ 70.3810973, 23.2014917 ], [ 70.380561785708281, 23.203025 ], [ 70.380561785708295, 23.203025 ], [ 70.3800152, 23.20459 ], [ 70.3779485, 23.2066673 ], [ 70.3776699, 23.2066697 ], [ 70.3783312, 23.2033178 ], [ 70.378460307263609, 23.203073368886141 ], [ 70.3791508, 23.2017661 ], [ 70.3797024, 23.2012466 ], [ 70.3799755, 23.2007293 ], [ 70.3799703, 23.2002146 ], [ 70.3798289, 23.1999585 ], [ 70.375651, 23.1998659 ], [ 70.375374, 23.1999975 ], [ 70.375404878853132, 23.203025 ], [ 70.3754055, 23.2030859 ], [ 70.3762409, 23.2030785 ], [ 70.3749198, 23.2100398 ], [ 70.3763148, 23.2102851 ], [ 70.3733148, 23.2164887 ], [ 70.3724755, 23.2161095 ], [ 70.3716388, 23.2159886 ], [ 70.37426529265565, 23.203225 ], [ 70.3742919, 23.2030957 ], [ 70.373257427829657, 23.203025 ], [ 70.3692761, 23.2027529 ], [ 70.368033236376576, 23.203225 ], [ 70.3665021, 23.2038066 ], [ 70.3662264, 23.2040664 ], [ 70.3653923, 23.2042027 ], [ 70.365676, 23.2047151 ], [ 70.3651203, 23.2048481 ], [ 70.3648446, 23.205108 ], [ 70.3642876, 23.2051127 ], [ 70.3640105, 23.2052443 ], [ 70.3640158, 23.2057591 ], [ 70.3635951, 23.2055053 ], [ 70.3631818, 23.2058946 ], [ 70.3634641, 23.2062787 ], [ 70.3629085, 23.2064117 ], [ 70.3612483, 23.2074556 ], [ 70.3604142, 23.207592 ], [ 70.3601462, 23.208624 ], [ 70.3581971, 23.2086408 ], [ 70.3583201, 23.2070954 ], [ 70.3581789, 23.2068393 ], [ 70.3531578, 23.2059812 ], [ 70.3517603, 23.2054783 ], [ 70.348972, 23.2051167 ], [ 70.349428, 23.2089736 ], [ 70.3498592, 23.2102569 ], [ 70.34569, 23.2110649 ], [ 70.3453857, 23.2084936 ], [ 70.3392636, 23.2089315 ], [ 70.3387093, 23.2091934 ], [ 70.3373182, 23.2093344 ], [ 70.3371837, 23.2098504 ], [ 70.3366344, 23.2106274 ], [ 70.3358068, 23.2114066 ], [ 70.3351264, 23.2129566 ], [ 70.332628, 23.21375 ], [ 70.3326331, 23.2142649 ], [ 70.3323547, 23.2142671 ], [ 70.3324628, 23.2111776 ], [ 70.3338269, 23.2083346 ], [ 70.3343763, 23.2075576 ], [ 70.334928, 23.2070383 ], [ 70.3356131, 23.2058737 ], [ 70.3372812, 23.2056021 ], [ 70.3375571, 23.2053424 ], [ 70.3394986, 23.2045537 ], [ 70.3400502, 23.2040341 ], [ 70.3414424, 23.2040222 ], [ 70.3439408, 23.2032288 ], [ 70.343954152934302, 23.203216226102175 ], [ 70.3449058, 23.2023201 ], [ 70.3453135, 23.201287 ], [ 70.3441986, 23.2011674 ], [ 70.3428142, 23.2019513 ], [ 70.3394831, 23.2030094 ], [ 70.3383693, 23.2030188 ], [ 70.3378087, 23.202638 ], [ 70.3375175, 23.2013535 ], [ 70.3380729, 23.2012195 ], [ 70.339319, 23.200566 ], [ 70.3391701, 23.1995376 ], [ 70.3383347, 23.1995448 ], [ 70.338734, 23.1977395 ], [ 70.3390098, 23.1974798 ], [ 70.3388609, 23.1964514 ], [ 70.3402568, 23.1968253 ], [ 70.3413782, 23.1975879 ], [ 70.3419402, 23.1980978 ], [ 70.3430578, 23.1984749 ], [ 70.3431837, 23.1971868 ], [ 70.343598, 23.1967967 ], [ 70.3441536, 23.1966637 ], [ 70.3444216, 23.1956319 ], [ 70.339124, 23.1949049 ], [ 70.3393766, 23.1923288 ], [ 70.3399323, 23.1921948 ], [ 70.3407573, 23.1911583 ], [ 70.3418658, 23.190634 ], [ 70.3424175, 23.1901145 ], [ 70.345199, 23.1898334 ], [ 70.3454787, 23.18996 ], [ 70.3454736, 23.1894454 ], [ 70.3449155, 23.189321 ], [ 70.3446344, 23.1890659 ], [ 70.3379501, 23.1888655 ], [ 70.3376728, 23.1889971 ], [ 70.3376779, 23.1895117 ], [ 70.3295747, 23.1866199 ], [ 70.3292963, 23.1866223 ], [ 70.3290193, 23.1867539 ], [ 70.326896, 23.197325 ], [ 70.3249522, 23.1978563 ], [ 70.323541418413029, 23.203025 ], [ 70.3234734, 23.2032742 ], [ 70.3223825, 23.2055998 ], [ 70.3215725, 23.2081806 ], [ 70.3212965, 23.2084403 ], [ 70.3204789, 23.210249 ], [ 70.320494, 23.2117933 ], [ 70.3202207, 23.2123104 ], [ 70.3200971, 23.2138559 ], [ 70.3198185, 23.2138582 ], [ 70.3198034, 23.2123138 ], [ 70.3186921, 23.2125805 ], [ 70.3196131, 23.2071676 ], [ 70.32114215103104, 23.203025 ], [ 70.3231393, 23.1976142 ], [ 70.3231317, 23.1968419 ], [ 70.3229905, 23.1965858 ], [ 70.3215957, 23.1963401 ], [ 70.3211674, 23.195314 ], [ 70.3208866, 23.1950591 ], [ 70.320031, 23.1930071 ], [ 70.3196089, 23.1924957 ], [ 70.3190508, 23.1923713 ], [ 70.3187698, 23.1921162 ], [ 70.3157008, 23.1914989 ], [ 70.3175555, 23.1961165 ], [ 70.3175832, 23.1989478 ], [ 70.3170365, 23.199982 ], [ 70.3164846, 23.2005013 ], [ 70.3156594, 23.2015378 ], [ 70.3148342, 23.2025743 ], [ 70.314373985556131, 23.203225 ], [ 70.3142848, 23.2033511 ], [ 70.3137356, 23.2041279 ], [ 70.3131862, 23.2049047 ], [ 70.3124, 23.206291350292297 ], [ 70.3111334, 23.2085253 ], [ 70.3089083, 23.2088013 ], [ 70.3098548, 23.2059621 ], [ 70.3104043, 23.2051853 ], [ 70.3111864, 23.2042367 ], [ 70.3113691, 23.2041477 ], [ 70.3113667, 23.2038903 ], [ 70.3110883, 23.2038926 ], [ 70.3109941, 23.2040623 ], [ 70.3099745, 23.2039018 ], [ 70.3101056, 23.2031286 ], [ 70.3106524, 23.2020944 ], [ 70.3114778, 23.2010579 ], [ 70.3123056, 23.2002789 ], [ 70.3124, 23.199917009955431 ], [ 70.3124402, 23.1997629 ], [ 70.3126, 23.199724416846649 ], [ 70.3129958, 23.1996291 ], [ 70.3134067, 23.1989827 ], [ 70.3139561, 23.1982059 ], [ 70.313951, 23.1976911 ], [ 70.314227, 23.1974314 ], [ 70.3150421, 23.1953654 ], [ 70.3148832, 23.1933074 ], [ 70.3140505, 23.1935718 ], [ 70.3133691, 23.195122 ], [ 70.3131056, 23.1966686 ], [ 70.3126, 23.197240349149581 ], [ 70.3124177, 23.1974465 ], [ 70.3124, 23.197445476280574 ], [ 70.3104674, 23.1973337 ], [ 70.3099131, 23.1975956 ], [ 70.308532, 23.1987659 ], [ 70.3083975, 23.1992817 ], [ 70.3068815, 23.2008387 ], [ 70.3057715, 23.2012337 ], [ 70.304935, 23.2011124 ], [ 70.3056231, 23.2003344 ], [ 70.3061699, 23.1993002 ], [ 70.3068628, 23.1989081 ], [ 70.307828, 23.1979995 ], [ 70.3085133, 23.1968351 ], [ 70.310732, 23.1959162 ], [ 70.3109703, 23.1917958 ], [ 70.3092946, 23.191295 ], [ 70.3094309, 23.1910364 ], [ 70.309426, 23.1905216 ], [ 70.3105296, 23.1894828 ], [ 70.3108031, 23.1889657 ], [ 70.3107955, 23.1881937 ], [ 70.3099352, 23.1856268 ], [ 70.30991, 23.183053 ], [ 70.3104544, 23.1817614 ], [ 70.3108675, 23.1812432 ], [ 70.3100297, 23.1809928 ], [ 70.3100348, 23.1815076 ], [ 70.3083655, 23.1816497 ], [ 70.3047401, 23.1810368 ], [ 70.3041684, 23.179497 ], [ 70.3036154, 23.1798873 ], [ 70.3025043, 23.1801538 ], [ 70.301111, 23.1800372 ], [ 70.3012347, 23.1784917 ], [ 70.3008127, 23.1779805 ], [ 70.2980225, 23.1773594 ], [ 70.2941225, 23.1771341 ], [ 70.2913313, 23.1763849 ], [ 70.2899269, 23.1751094 ], [ 70.2888086, 23.1746038 ], [ 70.2868598, 23.1746197 ], [ 70.2818292, 23.1726015 ], [ 70.2809891, 23.1720935 ], [ 70.2798683, 23.1713305 ], [ 70.2779171, 23.171089 ], [ 70.2759611, 23.1703326 ], [ 70.2748464, 23.1702133 ], [ 70.2744015, 23.1673855 ], [ 70.2757642, 23.1642855 ], [ 70.2757592, 23.1637709 ], [ 70.2756181, 23.1635146 ], [ 70.2675153, 23.1603621 ], [ 70.2672344, 23.1601069 ], [ 70.2663969, 23.1598561 ], [ 70.2650051, 23.1598673 ], [ 70.2636205, 23.1606507 ], [ 70.261396, 23.1609259 ], [ 70.2608419, 23.1611878 ], [ 70.2586185, 23.1615921 ], [ 70.258486, 23.1623653 ], [ 70.2591957, 23.163775 ], [ 70.2608683, 23.164019 ], [ 70.261289, 23.1644021 ], [ 70.2621507, 23.1672267 ], [ 70.2631339, 23.1681194 ], [ 70.2636931, 23.1683723 ], [ 70.2641161, 23.1690128 ], [ 70.2640065, 23.1721026 ], [ 70.2631713, 23.1721092 ], [ 70.2627388, 23.1705683 ], [ 70.2620337, 23.1695443 ], [ 70.255626, 23.1690807 ], [ 70.2558037, 23.1582683 ], [ 70.2544179, 23.1589225 ], [ 70.2521957, 23.1594549 ], [ 70.2513654, 23.1599763 ], [ 70.2505351, 23.1604978 ], [ 70.2480371, 23.1612897 ], [ 70.2463669, 23.1613029 ], [ 70.2460874, 23.1611769 ], [ 70.2458018, 23.1604069 ], [ 70.2438568, 23.1608079 ], [ 70.2421927, 23.1614651 ], [ 70.2420125, 23.1570907 ], [ 70.242145, 23.1563173 ], [ 70.2431259, 23.1570818 ], [ 70.2435535, 23.1581081 ], [ 70.2457888, 23.1589909 ], [ 70.2480203, 23.159488 ], [ 70.2505257, 23.1594681 ], [ 70.2527406, 23.1581634 ], [ 70.2557965, 23.1574961 ], [ 70.2559279, 23.1567229 ], [ 70.2564775, 23.1559463 ], [ 70.2578428, 23.1531039 ], [ 70.2581066, 23.1515573 ], [ 70.2585151, 23.1505244 ], [ 70.2579585, 23.150529 ], [ 70.2576704, 23.1495016 ], [ 70.2568354, 23.1495084 ], [ 70.256262, 23.147711 ], [ 70.2548655, 23.1472073 ], [ 70.2547186, 23.1464364 ], [ 70.2541524, 23.1454112 ], [ 70.2527487, 23.1441353 ], [ 70.2524633, 23.1433653 ], [ 70.2524465, 23.1415636 ], [ 70.2516045, 23.1407981 ], [ 70.2507551, 23.1392604 ], [ 70.2507527, 23.139003 ], [ 70.2517213, 23.1383513 ], [ 70.2531093, 23.1379546 ], [ 70.2529624, 23.1371837 ], [ 70.2523987, 23.136416 ], [ 70.2504266, 23.1338575 ], [ 70.2495822, 23.1328346 ], [ 70.2487377, 23.1318117 ], [ 70.2480354, 23.131045 ], [ 70.2474775, 23.1309202 ], [ 70.2466379, 23.130412 ], [ 70.2460777, 23.1300308 ], [ 70.2459333, 23.1295171 ], [ 70.2453696, 23.1287494 ], [ 70.2445251, 23.1277265 ], [ 70.2438228, 23.1269597 ], [ 70.243265, 23.126835 ], [ 70.2427048, 23.1264538 ], [ 70.2425605, 23.1259401 ], [ 70.2415775, 23.1249182 ], [ 70.2410197, 23.1247934 ], [ 70.2396164, 23.1235175 ], [ 70.2393371, 23.1233914 ], [ 70.2391927, 23.1228777 ], [ 70.2382097, 23.1218558 ], [ 70.2370953, 23.1217354 ], [ 70.2362641, 23.1221285 ], [ 70.2357192, 23.1234198 ], [ 70.2329422, 23.1240847 ], [ 70.2318385, 23.1251228 ], [ 70.2301723, 23.1255224 ], [ 70.2300373, 23.1260384 ], [ 70.2303626, 23.1311839 ], [ 70.2301006, 23.1329877 ], [ 70.230386, 23.1337577 ], [ 70.2304284, 23.1383908 ], [ 70.2312821, 23.1404434 ], [ 70.2312868, 23.1409582 ], [ 70.2304612, 23.1419943 ], [ 70.2301876, 23.1425112 ], [ 70.2294992, 23.1432888 ], [ 70.228837982812507, 23.143512905068491 ], [ 70.2275569, 23.1439471 ], [ 70.2270048, 23.144466 ], [ 70.2256179, 23.1449917 ], [ 70.2247829, 23.1449983 ], [ 70.2239421, 23.1443617 ], [ 70.2240691, 23.1430737 ], [ 70.225449, 23.1417758 ], [ 70.2262722, 23.1404825 ], [ 70.2269627, 23.1398331 ], [ 70.2276546, 23.139442 ], [ 70.2280666, 23.1387949 ], [ 70.2286221, 23.1386622 ], [ 70.228452, 23.1353173 ], [ 70.2278906, 23.1348068 ], [ 70.2275796, 23.1312056 ], [ 70.228236, 23.1268246 ], [ 70.2240766, 23.1285296 ], [ 70.2226863, 23.1286694 ], [ 70.2224885, 23.1222359 ], [ 70.2223475, 23.1219796 ], [ 70.2209595, 23.1223759 ], [ 70.2201246, 23.1223823 ], [ 70.2187296, 23.1220076 ], [ 70.2186809, 23.1166023 ], [ 70.2192375, 23.116598 ], [ 70.2196451, 23.1155653 ], [ 70.2201946, 23.1147887 ], [ 70.2201923, 23.1145313 ], [ 70.2196287, 23.1137636 ], [ 70.2193435, 23.1129934 ], [ 70.2193227, 23.110677 ], [ 70.2191817, 23.1104205 ], [ 70.2161114, 23.1094147 ], [ 70.2159672, 23.108901 ], [ 70.2155457, 23.1083893 ], [ 70.2130368, 23.107894 ], [ 70.2128926, 23.1073801 ], [ 70.2124709, 23.1068687 ], [ 70.2119133, 23.1067437 ], [ 70.2099563, 23.1057292 ], [ 70.2046557, 23.1042251 ], [ 70.2040946, 23.1037146 ], [ 70.2029782, 23.1033376 ], [ 70.202551, 23.1023111 ], [ 70.1991848, 23.0992478 ], [ 70.198902, 23.098735 ], [ 70.1972188, 23.0972034 ], [ 70.1960876, 23.0951527 ], [ 70.1960854, 23.0948953 ], [ 70.196778, 23.0945035 ], [ 70.1973299, 23.0939845 ], [ 70.2012114, 23.0924105 ], [ 70.2021766, 23.0915028 ], [ 70.202022, 23.089702 ], [ 70.2003481, 23.0892 ], [ 70.199778, 23.0876598 ], [ 70.198941, 23.0874088 ], [ 70.1990681, 23.0861208 ], [ 70.1980859, 23.0850985 ], [ 70.1969695, 23.0847205 ], [ 70.1961292, 23.0840838 ], [ 70.1958397, 23.0827989 ], [ 70.1952821, 23.082674 ], [ 70.1950016, 23.0824187 ], [ 70.1947234, 23.0824207 ], [ 70.1911226, 23.0842499 ], [ 70.1908444, 23.084252 ], [ 70.1886085, 23.0831108 ], [ 70.1884643, 23.0825971 ], [ 70.1881838, 23.0823417 ], [ 70.187758, 23.0813153 ], [ 70.1883133, 23.081182 ], [ 70.1891434, 23.080661 ], [ 70.1899735, 23.0801399 ], [ 70.1906607, 23.0792342 ], [ 70.1906539, 23.078462 ], [ 70.1900793, 23.0764071 ], [ 70.1896556, 23.0756381 ], [ 70.1890982, 23.075513 ], [ 70.1885384, 23.0751316 ], [ 70.1879684, 23.0735914 ], [ 70.1885248, 23.0735873 ], [ 70.1869604, 23.0697379 ], [ 70.1865392, 23.0692261 ], [ 70.1845862, 23.0685969 ], [ 70.1812447, 23.0682361 ], [ 70.1806771, 23.0669534 ], [ 70.1820657, 23.0666856 ], [ 70.1820589, 23.0659133 ], [ 70.1789956, 23.0655497 ], [ 70.1784371, 23.0652964 ], [ 70.1773165, 23.0644043 ], [ 70.1770317, 23.0636341 ], [ 70.1756363, 23.0631297 ], [ 70.1755039, 23.0625437 ], [ 70.1745114, 23.0617218 ], [ 70.1721646, 23.0600649 ], [ 70.1724738, 23.0596338 ], [ 70.1716739, 23.059174 ], [ 70.1715283, 23.059377 ], [ 70.1698825, 23.0586392 ], [ 70.1678106, 23.0574373 ], [ 70.1678342, 23.0571341 ], [ 70.1673645, 23.0557576 ], [ 70.1657393, 23.0562661 ], [ 70.1648058, 23.0539195 ], [ 70.1634424, 23.0524085 ], [ 70.1628773, 23.0513832 ], [ 70.1644807, 23.0485011 ], [ 70.1635806, 23.0475302 ], [ 70.160943, 23.0446412 ], [ 70.1589586, 23.0421446 ], [ 70.1577789, 23.0403018 ], [ 70.1550003, 23.0413008 ], [ 70.1540212, 23.0394762 ], [ 70.1520755, 23.0354994 ], [ 70.1556163, 23.0347363 ], [ 70.1570272, 23.0346664 ], [ 70.1585878, 23.0344385 ], [ 70.1581256, 23.0328152 ], [ 70.1523289, 23.0339249 ], [ 70.151845, 23.0335099 ], [ 70.1474431, 23.0274906 ], [ 70.1464245, 23.0259583 ], [ 70.1451601, 23.0242054 ], [ 70.144622, 23.0235062 ], [ 70.1435929, 23.0220164 ], [ 70.1431731, 23.0214141 ], [ 70.1425062, 23.0216446 ], [ 70.1420629, 23.0205415 ], [ 70.1402688, 23.0209555 ], [ 70.1401609, 23.020077 ], [ 70.1388937, 23.0203072 ], [ 70.1384244, 23.0178247 ], [ 70.1399803, 23.0175002 ], [ 70.1395158, 23.0164299 ], [ 70.1381986, 23.0166338 ], [ 70.1377565, 23.014391 ], [ 70.1346861, 23.0147343 ], [ 70.1344507, 23.0135435 ], [ 70.1357142, 23.0134592 ], [ 70.1386088, 23.011295 ], [ 70.1336299, 23.0075116 ], [ 70.1331952, 23.0077868 ], [ 70.1307894, 23.0058519 ], [ 70.1322783, 23.0042886 ], [ 70.1302626, 23.0018124 ], [ 70.1289724, 23.0003766 ], [ 70.1280572, 22.9996587 ], [ 70.1274669, 22.9996271 ], [ 70.1264848, 22.9975231 ], [ 70.1252546, 22.9960931 ], [ 70.1225121, 22.9983332 ], [ 70.1214573, 22.9966924 ], [ 70.1236286, 22.9950182 ], [ 70.1248105, 22.9936089 ], [ 70.1249057, 22.9932572 ], [ 70.1226992, 22.9910299 ], [ 70.1193921, 22.9878644 ], [ 70.1187078, 22.9872852 ], [ 70.1173913, 22.9862516 ], [ 70.1167786, 22.9856253 ], [ 70.1167118, 22.9850445 ], [ 70.1167074, 22.9845297 ], [ 70.1161472, 22.9840188 ], [ 70.1157244, 22.9832496 ], [ 70.1151673, 22.9831243 ], [ 70.1148872, 22.9828688 ], [ 70.1137751, 22.9828767 ], [ 70.1134982, 22.9830077 ], [ 70.1133544, 22.982494 ], [ 70.1126536, 22.9817267 ], [ 70.1118174, 22.9814751 ], [ 70.1118068, 22.980188 ], [ 70.111529, 22.9801899 ], [ 70.1104358, 22.9825144 ], [ 70.1101578, 22.9825163 ], [ 70.1108312, 22.9799374 ], [ 70.1106906, 22.9796811 ], [ 70.1087384, 22.9789225 ], [ 70.1085904, 22.9778937 ], [ 70.1088643, 22.977377 ], [ 70.108987, 22.9753167 ], [ 70.1064776, 22.974433 ], [ 70.1061975, 22.9741774 ], [ 70.1034113, 22.9734246 ], [ 70.1020151, 22.972662 ], [ 70.1003431, 22.9721589 ], [ 70.098396, 22.972044 ], [ 70.0983939, 22.9717866 ], [ 70.099784, 22.9717771 ], [ 70.0995018, 22.9712642 ], [ 70.0989446, 22.9711389 ], [ 70.0983846, 22.9706278 ], [ 70.0975464, 22.9701188 ], [ 70.0931049, 22.9709217 ], [ 70.0925521, 22.9713122 ], [ 70.0922678, 22.9705418 ], [ 70.0967093, 22.9697389 ], [ 70.0961389, 22.967941 ], [ 70.0939108, 22.9674415 ], [ 70.0934852, 22.9664148 ], [ 70.0927825, 22.9653899 ], [ 70.0899944, 22.9643795 ], [ 70.0897041, 22.9628369 ], [ 70.0860894, 22.9627325 ], [ 70.0833015, 22.9617219 ], [ 70.0785699, 22.9609818 ], [ 70.073265, 22.958058 ], [ 70.0729728, 22.956258 ], [ 70.0696283, 22.9551217 ], [ 70.0685164, 22.9551292 ], [ 70.0676856, 22.9555214 ], [ 70.0674238, 22.9575825 ], [ 70.066036, 22.9578493 ], [ 70.0659005, 22.9583651 ], [ 70.065486, 22.9586252 ], [ 70.0654799, 22.9578531 ], [ 70.0643692, 22.9579888 ], [ 70.0640923, 22.9581198 ], [ 70.0640881, 22.957605 ], [ 70.0635323, 22.9576087 ], [ 70.0647704, 22.9560559 ], [ 70.0655963, 22.9550206 ], [ 70.0660076, 22.9542455 ], [ 70.063777, 22.9533591 ], [ 70.063217, 22.952848 ], [ 70.0615432, 22.9520869 ], [ 70.0609834, 22.9515759 ], [ 70.0551275, 22.9491699 ], [ 70.0553994, 22.9483957 ], [ 70.0592936, 22.9487554 ], [ 70.0623601, 22.9498938 ], [ 70.0623501, 22.9486069 ], [ 70.0637387, 22.9484683 ], [ 70.0645807, 22.9494923 ], [ 70.0670883, 22.9502478 ], [ 70.0693138, 22.9504902 ], [ 70.0698717, 22.9507439 ], [ 70.0718194, 22.9509881 ], [ 70.0723773, 22.9512417 ], [ 70.0734892, 22.9512343 ], [ 70.0743189, 22.9507138 ], [ 70.0751528, 22.9507082 ], [ 70.0759887, 22.9509599 ], [ 70.0768226, 22.9509542 ], [ 70.0784861, 22.9504281 ], [ 70.0795969, 22.9502924 ], [ 70.0798647, 22.9490034 ], [ 70.0801425, 22.9490015 ], [ 70.0807107, 22.9505422 ], [ 70.0820974, 22.9501461 ], [ 70.0845969, 22.9498716 ], [ 70.0852883, 22.9494812 ], [ 70.0855619, 22.9489644 ], [ 70.0854194, 22.9484506 ], [ 70.0801335, 22.9478427 ], [ 70.0798555, 22.9478446 ], [ 70.0795755, 22.9475891 ], [ 70.0790186, 22.9474645 ], [ 70.0791529, 22.9469488 ], [ 70.078591, 22.9461803 ], [ 70.0777428, 22.9443842 ], [ 70.0774527, 22.9428416 ], [ 70.0771707, 22.9423287 ], [ 70.0771686, 22.9420712 ], [ 70.0775829, 22.9416819 ], [ 70.0778609, 22.94168 ], [ 70.0791305, 22.9441174 ], [ 70.0794105, 22.9443729 ], [ 70.079554, 22.9448868 ], [ 70.0812268, 22.9455184 ], [ 70.0831805, 22.9465349 ], [ 70.0884695, 22.9475282 ], [ 70.091527, 22.9475073 ], [ 70.0919403, 22.9471187 ], [ 70.0917934, 22.9460901 ], [ 70.0913315, 22.9460047 ], [ 70.0913431, 22.9419745 ], [ 70.0918825, 22.9399113 ], [ 70.0921582, 22.939652 ], [ 70.0927018, 22.9381038 ], [ 70.0926935, 22.9370741 ], [ 70.0929653, 22.9362999 ], [ 70.0933795, 22.9359106 ], [ 70.094488, 22.9355173 ], [ 70.0937742, 22.9332052 ], [ 70.0945995, 22.9321699 ], [ 70.095015, 22.9319097 ], [ 70.0951595, 22.932681 ], [ 70.0953, 22.9328082 ], [ 70.0966897, 22.9327987 ], [ 70.0977991, 22.9325335 ], [ 70.0980792, 22.9327891 ], [ 70.0997466, 22.9327775 ], [ 70.1000267, 22.9330329 ], [ 70.1008624, 22.9332846 ], [ 70.1014224, 22.9337955 ], [ 70.1030941, 22.9342988 ], [ 70.1042068, 22.9344201 ], [ 70.1042026, 22.9339053 ], [ 70.106427, 22.9340181 ], [ 70.1065644, 22.9338889 ], [ 70.1064196, 22.9331177 ], [ 70.106838, 22.9333721 ], [ 70.1072627, 22.9342697 ], [ 70.1089303, 22.9342582 ], [ 70.110602, 22.9347613 ], [ 70.1117199, 22.9355258 ], [ 70.1125536, 22.9355199 ], [ 70.1128293, 22.9352604 ], [ 70.1131074, 22.9352585 ], [ 70.1133873, 22.9355141 ], [ 70.1139431, 22.9355101 ], [ 70.1144969, 22.9352487 ], [ 70.1195014, 22.935471 ], [ 70.1200552, 22.9352096 ], [ 70.1211669, 22.9352018 ], [ 70.12158, 22.9348133 ], [ 70.1215736, 22.934041 ], [ 70.1203109, 22.9325054 ], [ 70.1194793, 22.9327687 ], [ 70.1194729, 22.9319964 ], [ 70.1205814, 22.9316022 ], [ 70.1208571, 22.9313427 ], [ 70.121413, 22.9313389 ], [ 70.1218261, 22.9309501 ], [ 70.1216834, 22.9304364 ], [ 70.1208507, 22.9305704 ], [ 70.1205717, 22.9304441 ], [ 70.1201417, 22.9289027 ], [ 70.1197212, 22.9283909 ], [ 70.1166632, 22.9282831 ], [ 70.1152705, 22.9279074 ], [ 70.1149864, 22.927137 ], [ 70.1138738, 22.9270157 ], [ 70.112759, 22.9266379 ], [ 70.1126154, 22.926124 ], [ 70.1121947, 22.9256122 ], [ 70.1099684, 22.9252412 ], [ 70.1096885, 22.9249856 ], [ 70.1082958, 22.9246097 ], [ 70.1080117, 22.9238394 ], [ 70.1074559, 22.9238433 ], [ 70.1071716, 22.923073 ], [ 70.1066148, 22.9229477 ], [ 70.1063349, 22.9226923 ], [ 70.1038297, 22.9221949 ], [ 70.1032697, 22.9216838 ], [ 70.1015984, 22.9211807 ], [ 70.0927018, 22.9207273 ], [ 70.091866, 22.9204755 ], [ 70.0879777, 22.9207596 ], [ 70.0860356, 22.9211595 ], [ 70.085931, 22.9255364 ], [ 70.0864992, 22.9270771 ], [ 70.0867791, 22.9273326 ], [ 70.0870838, 22.930677 ], [ 70.0873699, 22.9317048 ], [ 70.0877923, 22.9323449 ], [ 70.0883491, 22.9324704 ], [ 70.0884918, 22.9329841 ], [ 70.0886322, 22.9331115 ], [ 70.089189, 22.9332368 ], [ 70.0889174, 22.934011 ], [ 70.0886394, 22.9340128 ], [ 70.088496, 22.933499 ], [ 70.087096, 22.9322215 ], [ 70.0863894, 22.9306817 ], [ 70.0861125, 22.9308119 ], [ 70.0855557, 22.9306876 ], [ 70.0848339, 22.9273459 ], [ 70.0841272, 22.9258063 ], [ 70.0846831, 22.9258025 ], [ 70.084681, 22.9255451 ], [ 70.0841252, 22.9255489 ], [ 70.0831295, 22.9227239 ], [ 70.0831214, 22.9216944 ], [ 70.0833952, 22.9211777 ], [ 70.0832507, 22.9204064 ], [ 70.0826948, 22.9204101 ], [ 70.0824068, 22.9191249 ], [ 70.0818509, 22.9191287 ], [ 70.082135, 22.9198991 ], [ 70.0801868, 22.9195258 ], [ 70.0771299, 22.9195466 ], [ 70.0751919, 22.9204612 ], [ 70.0749222, 22.9214925 ], [ 70.0651849, 22.9201419 ], [ 70.0646302, 22.9202748 ], [ 70.064904, 22.9197581 ], [ 70.0637905, 22.9195082 ], [ 70.063641, 22.9182221 ], [ 70.0629386, 22.9171971 ], [ 70.0551541, 22.9167341 ], [ 70.0552726, 22.9141592 ], [ 70.0551301, 22.9136451 ], [ 70.0459513, 22.912547 ], [ 70.0403919, 22.912326 ], [ 70.0331817, 22.9143043 ], [ 70.0300687, 22.9068592 ], [ 70.025345, 22.9068896 ], [ 70.0256132, 22.9056009 ], [ 70.0292148, 22.9041612 ], [ 70.0297665, 22.9036428 ], [ 70.0303214, 22.9035109 ], [ 70.0303174, 22.9029961 ], [ 70.0286552, 22.90365 ], [ 70.0281033, 22.9041684 ], [ 70.0256094, 22.905086 ], [ 70.0258833, 22.9045693 ], [ 70.0250517, 22.9048322 ], [ 70.0247797, 22.9056061 ], [ 70.0242248, 22.9057381 ], [ 70.0228413, 22.9065192 ], [ 70.0222885, 22.9069093 ], [ 70.0222963, 22.907939 ], [ 70.0225731, 22.9078082 ], [ 70.0239615, 22.907671 ], [ 70.0238279, 22.908444 ], [ 70.0230039, 22.9097366 ], [ 70.0228693, 22.9102521 ], [ 70.019534, 22.9101444 ], [ 70.0181417, 22.9097677 ], [ 70.0179946, 22.908739 ], [ 70.0177149, 22.9084833 ], [ 70.0172948, 22.9079711 ], [ 70.0164601, 22.9078473 ], [ 70.0147862, 22.9069575 ], [ 70.0151969, 22.9061826 ], [ 70.0157487, 22.9056642 ], [ 70.0158824, 22.904891 ], [ 70.0075531, 22.9058447 ], [ 70.0022738, 22.9058781 ], [ 70.0019969, 22.9060089 ], [ 70.0017246, 22.9067829 ], [ 70.0011689, 22.9067865 ], [ 70.0013112, 22.9073003 ], [ 70.0018707, 22.9078118 ], [ 70.0018725, 22.9080692 ], [ 70.0016416, 22.9084969 ], [ 70.0011812, 22.9084593 ], [ 70.0007166, 22.9079879 ], [ 70.0003333, 22.9065343 ], [ 69.9989413, 22.9061565 ], [ 69.9947714, 22.9059252 ], [ 69.9900383, 22.9046676 ], [ 69.9892048, 22.9046729 ], [ 69.9883692, 22.9044205 ], [ 69.9819793, 22.9045893 ], [ 69.9819758, 22.9040745 ], [ 69.9786348, 22.9031937 ], [ 69.9778013, 22.9031989 ], [ 69.9758525, 22.9026959 ], [ 69.9744587, 22.9020613 ], [ 69.9744551, 22.9015464 ], [ 69.9736204, 22.9014224 ], [ 69.9725027, 22.9005287 ], [ 69.9724989, 22.9000138 ], [ 69.9719442, 22.9001456 ], [ 69.9716645, 22.8998898 ], [ 69.9680506, 22.8996545 ], [ 69.9677709, 22.8993988 ], [ 69.9630364, 22.8978828 ], [ 69.9605348, 22.8977698 ], [ 69.9605403, 22.8985421 ], [ 69.9602615, 22.8984145 ], [ 69.9510943, 22.8987271 ], [ 69.9485917, 22.8984846 ], [ 69.9477564, 22.8982321 ], [ 69.9327498, 22.8979352 ], [ 69.9323219, 22.8963932 ], [ 69.9319021, 22.8958808 ], [ 69.9324578, 22.8958776 ], [ 69.9323079, 22.8943338 ], [ 69.9320282, 22.8940781 ], [ 69.9320212, 22.8930484 ], [ 69.9321588, 22.8927901 ], [ 69.9310465, 22.8926674 ], [ 69.9282603, 22.8915258 ], [ 69.9279754, 22.8904977 ], [ 69.9274188, 22.8903718 ], [ 69.9268598, 22.8898602 ], [ 69.9263032, 22.8897351 ], [ 69.92602, 22.8889645 ], [ 69.9251848, 22.888712 ], [ 69.925042, 22.8881979 ], [ 69.9236371, 22.8858891 ], [ 69.922646, 22.8830632 ], [ 69.9218125, 22.8830679 ], [ 69.9215296, 22.8822973 ], [ 69.9209747, 22.8824287 ], [ 69.9204217, 22.8828186 ], [ 69.9205549, 22.8820456 ], [ 69.9201334, 22.8812756 ], [ 69.9190238, 22.8815395 ], [ 69.9190221, 22.881282 ], [ 69.9195778, 22.8812788 ], [ 69.9195761, 22.8810214 ], [ 69.9184631, 22.8807704 ], [ 69.9184597, 22.8802556 ], [ 69.9165131, 22.8800093 ], [ 69.9169259, 22.8794922 ], [ 69.9169191, 22.8784625 ], [ 69.9159403, 22.8774383 ], [ 69.9137135, 22.8768071 ], [ 69.91288, 22.876812 ], [ 69.9120414, 22.8760445 ], [ 69.9113011, 22.8758318 ], [ 69.9112055, 22.8756634 ], [ 69.9106489, 22.8755376 ], [ 69.9103693, 22.8752817 ], [ 69.9078622, 22.8742664 ], [ 69.9061954, 22.8742758 ], [ 69.9059186, 22.8744066 ], [ 69.9057757, 22.8738925 ], [ 69.9036789, 22.8718449 ], [ 69.9028447, 22.8717205 ], [ 69.9017267, 22.8706971 ], [ 69.900613, 22.8703178 ], [ 69.9001873, 22.8690329 ], [ 69.8997677, 22.8685204 ], [ 69.8992121, 22.8685236 ], [ 69.8992155, 22.8690384 ], [ 69.8986598, 22.8690416 ], [ 69.8983771, 22.8682709 ], [ 69.897265, 22.868148 ], [ 69.8961505, 22.8676394 ], [ 69.8944812, 22.8672631 ], [ 69.8944795, 22.8670057 ], [ 69.8953136, 22.8671291 ], [ 69.8955897, 22.8668702 ], [ 69.8966993, 22.8666066 ], [ 69.8969755, 22.8663476 ], [ 69.9008645, 22.8663255 ], [ 69.9011405, 22.8660666 ], [ 69.9019739, 22.8660619 ], [ 69.9039227, 22.8666948 ], [ 69.9037798, 22.8661807 ], [ 69.9030809, 22.8654125 ], [ 69.8933641, 22.8663679 ], [ 69.8915126, 22.8661615 ], [ 69.8914153, 22.8657357 ], [ 69.8928042, 22.8657279 ], [ 69.8928008, 22.8652131 ], [ 69.891135, 22.8653507 ], [ 69.8897502, 22.8660025 ], [ 69.8897536, 22.8665174 ], [ 69.8913238, 22.8663387 ], [ 69.8912809, 22.8665087 ], [ 69.8908681, 22.867026 ], [ 69.8897594, 22.8674178 ], [ 69.8892072, 22.8679358 ], [ 69.8883763, 22.868327 ], [ 69.8885181, 22.8688411 ], [ 69.8886583, 22.8689685 ], [ 69.8889362, 22.868967 ], [ 69.8893499, 22.868579 ], [ 69.889486, 22.8680634 ], [ 69.8911493, 22.8675393 ], [ 69.8915789, 22.8695964 ], [ 69.8914523, 22.871399 ], [ 69.8908959, 22.871273 ], [ 69.8906188, 22.8714038 ], [ 69.8904947, 22.8737213 ], [ 69.8902217, 22.8744952 ], [ 69.8902285, 22.8755249 ], [ 69.8899541, 22.8760413 ], [ 69.889265, 22.8768175 ], [ 69.8887103, 22.8769488 ], [ 69.8884342, 22.8772078 ], [ 69.8881563, 22.8772093 ], [ 69.8875982, 22.8768267 ], [ 69.8881371, 22.8742493 ], [ 69.8875814, 22.8742526 ], [ 69.8875782, 22.8737377 ], [ 69.8881337, 22.8737345 ], [ 69.888132, 22.8734771 ], [ 69.8875765, 22.8734801 ], [ 69.8875714, 22.8727079 ], [ 69.8881271, 22.8727048 ], [ 69.8879859, 22.8724482 ], [ 69.887981, 22.8716759 ], [ 69.8872818, 22.8709074 ], [ 69.8867264, 22.8709107 ], [ 69.886733, 22.8719403 ], [ 69.8839575, 22.8723414 ], [ 69.883678, 22.8720855 ], [ 69.8800666, 22.8721055 ], [ 69.8795075, 22.8715939 ], [ 69.8789528, 22.871726 ], [ 69.8786701, 22.8709553 ], [ 69.878393, 22.8710851 ], [ 69.8747816, 22.871105 ], [ 69.874503, 22.8709783 ], [ 69.8745013, 22.8707209 ], [ 69.8750569, 22.8707177 ], [ 69.8750537, 22.8702029 ], [ 69.8744981, 22.8702061 ], [ 69.8744898, 22.8689188 ], [ 69.8756035, 22.8692985 ], [ 69.8758829, 22.8695544 ], [ 69.8775521, 22.8699316 ], [ 69.8775489, 22.8694168 ], [ 69.8767154, 22.8694215 ], [ 69.8769908, 22.8690333 ], [ 69.8767105, 22.8686491 ], [ 69.8761541, 22.868523 ], [ 69.8755952, 22.8680112 ], [ 69.8750388, 22.8678861 ], [ 69.8750356, 22.8673713 ], [ 69.8725345, 22.8672558 ], [ 69.8719806, 22.8675162 ], [ 69.8711513, 22.8681649 ], [ 69.8708882, 22.8704831 ], [ 69.8683888, 22.8706251 ], [ 69.8675538, 22.8703722 ], [ 69.8625501, 22.8698846 ], [ 69.8617151, 22.8696317 ], [ 69.8608818, 22.8696362 ], [ 69.8594894, 22.8691288 ], [ 69.8569884, 22.869014 ], [ 69.857122, 22.868241 ], [ 69.8620607, 22.8584317 ], [ 69.8623369, 22.8581728 ], [ 69.8658989, 22.8504304 ], [ 69.8660318, 22.8493998 ], [ 69.865478, 22.8496603 ], [ 69.8647944, 22.8514662 ], [ 69.8642422, 22.851984 ], [ 69.8642454, 22.8524988 ], [ 69.8639693, 22.8527578 ], [ 69.8558755, 22.8687627 ], [ 69.8547636, 22.8686394 ], [ 69.852815, 22.8680067 ], [ 69.8525323, 22.8672359 ], [ 69.8514204, 22.8671127 ], [ 69.8500265, 22.8663478 ], [ 69.8491932, 22.8663524 ], [ 69.8480789, 22.8658434 ], [ 69.8444628, 22.8650904 ], [ 69.8439039, 22.8645784 ], [ 69.8427928, 22.8645843 ], [ 69.8419547, 22.8638164 ], [ 69.8408411, 22.8634367 ], [ 69.8405586, 22.8626657 ], [ 69.8394467, 22.8625425 ], [ 69.8386085, 22.8617746 ], [ 69.837772, 22.8612641 ], [ 69.8366586, 22.8608842 ], [ 69.836376, 22.8601135 ], [ 69.8355435, 22.8602461 ], [ 69.834707, 22.8597357 ], [ 69.8330387, 22.8594869 ], [ 69.8327593, 22.8592308 ], [ 69.831926, 22.8592352 ], [ 69.8316482, 22.8592367 ], [ 69.8302545, 22.8584716 ], [ 69.828864, 22.8582216 ], [ 69.8285847, 22.8579655 ], [ 69.8277499, 22.8577124 ], [ 69.8271912, 22.8572004 ], [ 69.825242, 22.8564382 ], [ 69.8246833, 22.8559262 ], [ 69.8238485, 22.8556731 ], [ 69.8235692, 22.8554172 ], [ 69.8227344, 22.8551641 ], [ 69.8221757, 22.8546521 ], [ 69.8213394, 22.8541414 ], [ 69.8193902, 22.8533792 ], [ 69.8182745, 22.8526126 ], [ 69.8174412, 22.852617 ], [ 69.8154938, 22.852112 ], [ 69.8149359, 22.8517292 ], [ 69.8147935, 22.851215 ], [ 69.8142333, 22.8504456 ], [ 69.8135348, 22.8496769 ], [ 69.8129786, 22.8495504 ], [ 69.8126992, 22.8492945 ], [ 69.8090884, 22.8493129 ], [ 69.8088113, 22.8494435 ], [ 69.8088143, 22.8499583 ], [ 69.8085357, 22.8498305 ], [ 69.8063144, 22.849971 ], [ 69.8063205, 22.8510006 ], [ 69.8060428, 22.8510022 ], [ 69.8060383, 22.8502299 ], [ 69.8046501, 22.850365 ], [ 69.8040916, 22.849853 ], [ 69.8027028, 22.84986 ], [ 69.8015872, 22.8490934 ], [ 69.8007531, 22.8489693 ], [ 69.8007501, 22.8484544 ], [ 69.7999153, 22.8482012 ], [ 69.7993507, 22.8466593 ], [ 69.7974035, 22.8461543 ], [ 69.7975358, 22.8451239 ], [ 69.7973959, 22.844867 ], [ 69.7968397, 22.8447408 ], [ 69.796002, 22.8439727 ], [ 69.7934948, 22.8426979 ], [ 69.7929385, 22.8425724 ], [ 69.792796, 22.8420583 ], [ 69.7919584, 22.84129 ], [ 69.7916777, 22.8407765 ], [ 69.7909793, 22.8400076 ], [ 69.7898682, 22.8400133 ], [ 69.7897246, 22.8392416 ], [ 69.7893039, 22.8384715 ], [ 69.7881914, 22.8382195 ], [ 69.7880491, 22.8377052 ], [ 69.7873507, 22.8369364 ], [ 69.7856828, 22.8366873 ], [ 69.7854006, 22.8359164 ], [ 69.7848446, 22.8357899 ], [ 69.7845653, 22.8355338 ], [ 69.7837306, 22.8352804 ], [ 69.782893, 22.8345123 ], [ 69.7820584, 22.8342588 ], [ 69.780663, 22.8331076 ], [ 69.7803795, 22.8320793 ], [ 69.7798232, 22.8319528 ], [ 69.7784273, 22.8306726 ], [ 69.7778711, 22.8305469 ], [ 69.7777287, 22.8300328 ], [ 69.7773097, 22.8295198 ], [ 69.7753621, 22.8288854 ], [ 69.7748036, 22.8283732 ], [ 69.773969, 22.8281197 ], [ 69.7734107, 22.8276075 ], [ 69.7714638, 22.8271022 ], [ 69.7706261, 22.8263339 ], [ 69.7692347, 22.8258258 ], [ 69.7683973, 22.8250576 ], [ 69.7675626, 22.8248041 ], [ 69.7670043, 22.8242919 ], [ 69.7661697, 22.8240385 ], [ 69.7650531, 22.8230141 ], [ 69.7619954, 22.8225138 ], [ 69.7617163, 22.8222577 ], [ 69.7608817, 22.8220043 ], [ 69.7606025, 22.8217482 ], [ 69.7539298, 22.8074897 ], [ 69.7529163, 22.7943719 ], [ 69.7504723, 22.790554 ], [ 69.7449055, 22.7855469 ], [ 69.7381027, 22.7807739 ], [ 69.7356545, 22.7808625 ], [ 69.7351744, 22.7806854 ], [ 69.7356065, 22.779092 ], [ 69.7369986, 22.7767462 ], [ 69.7374786, 22.7743561 ], [ 69.7348864, 22.7709036 ], [ 69.7333023, 22.7707708 ], [ 69.7284058, 22.7669642 ], [ 69.7266776, 22.7662117 ], [ 69.7254496, 22.7663147 ], [ 69.7235827, 22.7638733 ], [ 69.7215121, 22.7634664 ], [ 69.7202561, 22.7627778 ], [ 69.7201543, 22.761244 ], [ 69.7159921, 22.7534836 ], [ 69.7140239, 22.7524432 ], [ 69.7122717, 22.7531737 ], [ 69.7102075, 22.7548116 ], [ 69.7081433, 22.7577997 ], [ 69.7064632, 22.7618722 ], [ 69.7059831, 22.763333 ], [ 69.7060311, 22.764838 ], [ 69.7073273, 22.7656348 ], [ 69.7062712, 22.7654577 ], [ 69.7056711, 22.7647716 ], [ 69.7050231, 22.763333 ], [ 69.7028148, 22.7650372 ], [ 69.7008848, 22.7668456 ], [ 69.6967436, 22.7704451 ], [ 69.692263, 22.7735123 ], [ 69.6920933, 22.7733245 ], [ 69.6919575, 22.7721665 ], [ 69.6929758, 22.770539 ], [ 69.6923309, 22.7696 ], [ 69.6933831, 22.7683167 ], [ 69.6946051, 22.7687236 ], [ 69.695284, 22.7687236 ], [ 69.6962005, 22.7687862 ], [ 69.6987803, 22.7665327 ], [ 69.700172, 22.7657815 ], [ 69.7042114, 22.7626514 ], [ 69.7057389, 22.7610551 ], [ 69.7066214, 22.7580502 ], [ 69.7086849, 22.7546359 ], [ 69.7107971, 22.7527102 ], [ 69.7144058, 22.7504075 ], [ 69.7151865, 22.7492179 ], [ 69.7148131, 22.7479188 ], [ 69.7145925, 22.7469328 ], [ 69.7140833, 22.7468701 ], [ 69.7082788, 22.7507205 ], [ 69.7074981, 22.7513622 ], [ 69.7065477, 22.7513153 ], [ 69.7050032, 22.7518474 ], [ 69.7042564, 22.751957 ], [ 69.6997588, 22.7547116 ], [ 69.6975524, 22.7560733 ], [ 69.6930548, 22.7589843 ], [ 69.6906447, 22.7610189 ], [ 69.6870976, 22.7654636 ], [ 69.6859604, 22.766653 ], [ 69.6832788, 22.7694386 ], [ 69.6826848, 22.7710662 ], [ 69.6826339, 22.7721773 ], [ 69.6833128, 22.7731945 ], [ 69.6833637, 22.7737109 ], [ 69.6829903, 22.7735387 ], [ 69.6824811, 22.7724746 ], [ 69.6823623, 22.7710349 ], [ 69.6827527, 22.7695012 ], [ 69.6840426, 22.7677954 ], [ 69.6851797, 22.7667312 ], [ 69.6875898, 22.7638203 ], [ 69.6889306, 22.7621614 ], [ 69.6907975, 22.7601268 ], [ 69.6924099, 22.7588278 ], [ 69.6948538, 22.7570436 ], [ 69.6975015, 22.7552907 ], [ 69.6993684, 22.7541951 ], [ 69.7012184, 22.7532404 ], [ 69.7026748, 22.7522909 ], [ 69.7038149, 22.7511398 ], [ 69.704511, 22.7504537 ], [ 69.705063, 22.7497343 ], [ 69.704955, 22.7494576 ], [ 69.7043524, 22.7490059 ], [ 69.7195425, 22.7386283 ], [ 69.7193219, 22.7383622 ], [ 69.7150619, 22.7412736 ], [ 69.715012, 22.7406586 ], [ 69.7139559, 22.7389763 ], [ 69.7179389, 22.7361047 ], [ 69.7160923, 22.7343854 ], [ 69.7086493, 22.7327011 ], [ 69.7074942, 22.7324229 ], [ 69.7056689, 22.732118 ], [ 69.705051, 22.7320473 ], [ 69.6973943, 22.7306969 ], [ 69.6973463, 22.7308961 ], [ 69.7017387, 22.731671 ], [ 69.7018827, 22.7319587 ], [ 69.7011627, 22.7319809 ], [ 69.7012107, 22.7325122 ], [ 69.7022188, 22.734416 ], [ 69.7032749, 22.7362092 ], [ 69.7025548, 22.7366076 ], [ 69.7016187, 22.7376038 ], [ 69.7006586, 22.73829 ], [ 69.6978747, 22.7392957 ], [ 69.696803, 22.7392393 ], [ 69.6967454, 22.7390108 ], [ 69.6984155, 22.7389159 ], [ 69.6984054, 22.738431 ], [ 69.6889293, 22.738526 ], [ 69.6826291, 22.7385184 ], [ 69.6823197, 22.7393601 ], [ 69.6818572, 22.7394401 ], [ 69.6781448, 22.7308816 ], [ 69.6833982, 22.7291008 ], [ 69.6882511, 22.7296773 ], [ 69.6882824, 22.7295511 ], [ 69.6834116, 22.7290498 ], [ 69.6781279, 22.7308359 ], [ 69.672307106250003, 22.732651711034816 ], [ 69.6631285, 22.735515 ], [ 69.6629587, 22.7355463 ], [ 69.6679448, 22.7490352 ], [ 69.6681144, 22.7494066 ], [ 69.6692636, 22.7537673 ], [ 69.6681356, 22.7555241 ], [ 69.6652532, 22.755915 ], [ 69.6630067, 22.7567749 ], [ 69.6622667, 22.758173 ], [ 69.6626264, 22.7606053 ], [ 69.6638253, 22.7627611 ], [ 69.6654438, 22.7656354 ], [ 69.6660433, 22.7716603 ], [ 69.6661632, 22.7734843 ], [ 69.6669425, 22.7750872 ], [ 69.6694602, 22.7769111 ], [ 69.6708989, 22.778735 ], [ 69.6721577, 22.7810011 ], [ 69.672307106250003, 22.783802508735487 ], [ 69.6723375, 22.7843724 ], [ 69.671858, 22.7839303 ], [ 69.6716782, 22.7821617 ], [ 69.670779, 22.7800615 ], [ 69.6678417, 22.7784034 ], [ 69.6654438, 22.7776296 ], [ 69.664125, 22.7748661 ], [ 69.6639452, 22.7703337 ], [ 69.6635256, 22.7661882 ], [ 69.6622667, 22.7620425 ], [ 69.6609479, 22.7585047 ], [ 69.6612477, 22.7570122 ], [ 69.6600488, 22.7569016 ], [ 69.6574711, 22.7570675 ], [ 69.6552531, 22.7577308 ], [ 69.6526755, 22.7592786 ], [ 69.6507572, 22.7616555 ], [ 69.6469509, 22.7643715 ], [ 69.6456792, 22.7663648 ], [ 69.6461207, 22.770052 ], [ 69.6463005, 22.7734789 ], [ 69.6454613, 22.7702731 ], [ 69.6451616, 22.76762 ], [ 69.6443223, 22.7664592 ], [ 69.6431834, 22.7661828 ], [ 69.6420444, 22.7680069 ], [ 69.6410853, 22.7698309 ], [ 69.6391071, 22.7733131 ], [ 69.6385076, 22.7759109 ], [ 69.6378482, 22.7797798 ], [ 69.6377283, 22.7857488 ], [ 69.6375485, 22.7893411 ], [ 69.63587, 22.7927123 ], [ 69.6337719, 22.7959728 ], [ 69.6323932, 22.7977965 ], [ 69.6296957, 22.7996201 ], [ 69.630475, 22.7981833 ], [ 69.6329327, 22.7953096 ], [ 69.6362297, 22.7894516 ], [ 69.6361698, 22.7854172 ], [ 69.6356902, 22.7837039 ], [ 69.6344313, 22.7813826 ], [ 69.6345512, 22.778177 ], [ 69.6355703, 22.7751371 ], [ 69.640306, 22.7685043 ], [ 69.6407256, 22.7669567 ], [ 69.6401861, 22.7663486 ], [ 69.6363496, 22.7657406 ], [ 69.6328128, 22.7647456 ], [ 69.6298755, 22.7651879 ], [ 69.6276575, 22.7657406 ], [ 69.6247802, 22.7655748 ], [ 69.6229219, 22.7652984 ], [ 69.6210635, 22.7640271 ], [ 69.6190854, 22.7642482 ], [ 69.6171072, 22.7657406 ], [ 69.6173469, 22.7673436 ], [ 69.6189055, 22.7685596 ], [ 69.620524, 22.7704389 ], [ 69.6218459, 22.7713735 ], [ 69.6233182, 22.7713398 ], [ 69.6241223, 22.7712335 ], [ 69.6247395, 22.7713268 ], [ 69.6251544, 22.7716813 ], [ 69.6254174, 22.7722411 ], [ 69.6255085, 22.7727542 ], [ 69.6256866, 22.7732914 ], [ 69.6258272, 22.7738057 ], [ 69.6265242, 22.7743179 ], [ 69.6265253, 22.7745753 ], [ 69.6273583, 22.7745721 ], [ 69.6273605, 22.7750869 ], [ 69.6262483, 22.7747047 ], [ 69.6251337, 22.7738085 ], [ 69.6251313, 22.7732937 ], [ 69.6249925, 22.7726609 ], [ 69.62478, 22.7722037 ], [ 69.6245372, 22.7719239 ], [ 69.6241831, 22.7717 ], [ 69.6227724, 22.7718329 ], [ 69.6219571, 22.7718026 ], [ 69.6212434, 22.7713786 ], [ 69.6195649, 22.7703836 ], [ 69.6170472, 22.7684491 ], [ 69.6165779, 22.7662982 ], [ 69.6168747, 22.7647739 ], [ 69.6162388, 22.7636795 ], [ 69.6142042, 22.7642658 ], [ 69.6128478, 22.7660246 ], [ 69.6111099, 22.7671581 ], [ 69.6096053, 22.7698227 ], [ 69.609475, 22.770456178525905 ], [ 69.6089459, 22.7730285 ], [ 69.6076571, 22.7769654 ], [ 69.6068915, 22.7766605 ], [ 69.6083398, 22.7721357 ], [ 69.6088185, 22.7698512 ], [ 69.609275, 22.768850758057873 ], [ 69.6096444, 22.7680412 ], [ 69.6102788, 22.7670589 ], [ 69.6101232, 22.7666395 ], [ 69.6096803, 22.766474 ], [ 69.609275, 22.766635928101934 ], [ 69.6089622, 22.7667609 ], [ 69.6088903, 22.7662533 ], [ 69.609275, 22.76607590410768 ], [ 69.6093212, 22.7660546 ], [ 69.609475, 22.765972256485803 ], [ 69.6104344, 22.7654586 ], [ 69.6112004, 22.764664 ], [ 69.6123734, 22.7633837 ], [ 69.6131155, 22.7623131 ], [ 69.614061, 22.7617061 ], [ 69.6150425, 22.7617502 ], [ 69.6160719, 22.7615626 ], [ 69.6170174, 22.7611652 ], [ 69.6172568, 22.7606906 ], [ 69.6164788, 22.7603706 ], [ 69.6162514, 22.7598518 ], [ 69.6166584, 22.7595538 ], [ 69.6168738, 22.7600063 ], [ 69.6178912, 22.7598077 ], [ 69.6190881, 22.7598518 ], [ 69.6197225, 22.7591896 ], [ 69.6199499, 22.758715 ], [ 69.6195549, 22.757247 ], [ 69.61837, 22.7562867 ], [ 69.6162753, 22.7553375 ], [ 69.6141329, 22.7550174 ], [ 69.609475, 22.755590839854371 ], [ 69.6093811, 22.7556024 ], [ 69.6072775, 22.7560241 ], [ 69.6058472, 22.7563909 ], [ 69.6045015, 22.7569373 ], [ 69.6018608, 22.7575616 ], [ 69.5999312, 22.7582328 ], [ 69.599508, 22.7587479 ], [ 69.5993133, 22.7588104 ], [ 69.5991864, 22.7587167 ], [ 69.5988817, 22.7586543 ], [ 69.5980776, 22.7588962 ], [ 69.5954878, 22.7595518 ], [ 69.5919755, 22.7603635 ], [ 69.5903589, 22.7606991 ], [ 69.5875406, 22.7615341 ], [ 69.5846968, 22.7626736 ], [ 69.5808883, 22.7645076 ], [ 69.5787385, 22.7655846 ], [ 69.5783323, 22.7654051 ], [ 69.5731272, 22.7681053 ], [ 69.5729378, 22.7675636 ], [ 69.5723503, 22.7660911 ], [ 69.5723879, 22.7654312 ], [ 69.5720941, 22.7647435 ], [ 69.5715442, 22.7638128 ], [ 69.5710169, 22.7632571 ], [ 69.5705198, 22.7617011 ], [ 69.5697589, 22.7608398 ], [ 69.5688318, 22.7589177 ], [ 69.5686849, 22.7578827 ], [ 69.568667, 22.757846 ], [ 69.5685952, 22.7576983 ], [ 69.5671692, 22.7547694 ], [ 69.5671106, 22.754649 ], [ 69.5654849, 22.751519 ], [ 69.5654327, 22.7514051 ], [ 69.5642298, 22.7487818 ], [ 69.5641647, 22.7486398 ], [ 69.5635089, 22.7472096 ], [ 69.5642803, 22.7468164 ], [ 69.5651918, 22.7461425 ], [ 69.5659375, 22.7454999 ], [ 69.5665364, 22.7449337 ], [ 69.5667473, 22.7448087 ], [ 69.5669771, 22.744569 ], [ 69.5669921, 22.7443606 ], [ 69.5668076, 22.7442147 ], [ 69.5666306, 22.7441417 ], [ 69.5664422, 22.7442147 ], [ 69.5663179, 22.7443779 ], [ 69.5660882, 22.7449511 ], [ 69.5649507, 22.745948 ], [ 69.5641899, 22.7464169 ], [ 69.5633731, 22.7468018 ], [ 69.5565103, 22.7496434 ], [ 69.5500815, 22.752342 ], [ 69.5497722, 22.7526644 ], [ 69.5496604, 22.7530721 ], [ 69.5496607, 22.7535553 ], [ 69.553447, 22.7613245 ], [ 69.5572393, 22.7691056 ], [ 69.5598673, 22.7745766 ], [ 69.551227, 22.7791215 ], [ 69.5460563, 22.7812072 ], [ 69.5447875, 22.781461 ], [ 69.5440215, 22.7813617 ], [ 69.5435068, 22.7810527 ], [ 69.5425852, 22.7807327 ], [ 69.5412805, 22.7805892 ], [ 69.5400357, 22.7806113 ], [ 69.5384643, 22.7810541 ], [ 69.5380072, 22.7814599 ], [ 69.5371609, 22.7824118 ], [ 69.5368985, 22.7832312 ], [ 69.5367546, 22.7842378 ], [ 69.5372625, 22.7847606 ], [ 69.5368932, 22.7852137 ], [ 69.5338181, 22.7859566 ], [ 69.5321336, 22.7852366 ], [ 69.5288497, 22.7850025 ], [ 69.5211923, 22.7838603 ], [ 69.5182957, 22.7853146 ], [ 69.515791, 22.7852698 ], [ 69.513015, 22.7854071 ], [ 69.5080222, 22.7867102 ], [ 69.5055232, 22.7867182 ], [ 69.5026924, 22.7874406 ], [ 69.5011075, 22.7874274 ], [ 69.4993048, 22.7875293 ], [ 69.4975693, 22.7874466 ], [ 69.4960552, 22.7872535 ], [ 69.495639, 22.7874284 ], [ 69.49564, 22.7876859 ], [ 69.4958936, 22.7877997 ], [ 69.4961557, 22.7876976 ], [ 69.4964914, 22.7879413 ], [ 69.4969575, 22.7880719 ], [ 69.4977826, 22.7882767 ], [ 69.4992806, 22.788673 ], [ 69.4999007, 22.7886941 ], [ 69.5016528, 22.7887484 ], [ 69.5017091, 22.7891157 ], [ 69.501581, 22.7892219 ], [ 69.4994758, 22.7909657 ], [ 69.4963722, 22.7899656 ], [ 69.4965134, 22.7907374 ], [ 69.496792, 22.7909941 ], [ 69.4967929, 22.7912515 ], [ 69.4962395, 22.791768 ], [ 69.496104, 22.7925409 ], [ 69.4949942, 22.7928019 ], [ 69.4954083, 22.7922855 ], [ 69.4956814, 22.7909975 ], [ 69.4955421, 22.7907405 ], [ 69.494431, 22.7906148 ], [ 69.4941537, 22.7907448 ], [ 69.4940709, 22.7942608 ], [ 69.4938891, 22.79435 ], [ 69.4934637, 22.7920342 ], [ 69.4931851, 22.7917775 ], [ 69.4933189, 22.7902324 ], [ 69.4938742, 22.7902307 ], [ 69.4938725, 22.7897159 ], [ 69.4944278, 22.7897142 ], [ 69.4945215, 22.7895439 ], [ 69.4951195, 22.7891971 ], [ 69.495255, 22.7881668 ], [ 69.4927566, 22.7883029 ], [ 69.491926, 22.7889495 ], [ 69.4920653, 22.7892065 ], [ 69.4917969, 22.7917818 ], [ 69.49152, 22.7920402 ], [ 69.4904159, 22.7938457 ], [ 69.4902813, 22.794876 ], [ 69.4897264, 22.795006 ], [ 69.4883422, 22.7961691 ], [ 69.4883439, 22.7966841 ], [ 69.487789, 22.796814 ], [ 69.4875123, 22.7970723 ], [ 69.4866793, 22.797075 ], [ 69.4861229, 22.7968191 ], [ 69.4802874, 22.7955496 ], [ 69.4775096, 22.7953005 ], [ 69.4750124, 22.7958228 ], [ 69.469183, 22.7963549 ], [ 69.4680742, 22.7968731 ], [ 69.4669664, 22.7977779 ], [ 69.4669691, 22.7985503 ], [ 69.4666909, 22.798422 ], [ 69.4661356, 22.7984235 ], [ 69.4658587, 22.7986819 ], [ 69.4653038, 22.7988126 ], [ 69.4650298, 22.7998433 ], [ 69.4647519, 22.799844 ], [ 69.4646049, 22.7975274 ], [ 69.4644656, 22.7972704 ], [ 69.462245, 22.7975342 ], [ 69.4622467, 22.7980491 ], [ 69.4614138, 22.7980515 ], [ 69.4615505, 22.7975363 ], [ 69.4614085, 22.7965068 ], [ 69.4597434, 22.7967692 ], [ 69.4594692, 22.7977996 ], [ 69.4589133, 22.797672 ], [ 69.4586361, 22.7978021 ], [ 69.4583618, 22.7988327 ], [ 69.4580838, 22.7987043 ], [ 69.4572507, 22.7987068 ], [ 69.4569734, 22.7988366 ], [ 69.4569751, 22.7993517 ], [ 69.4553095, 22.7994845 ], [ 69.4550328, 22.7997429 ], [ 69.4531853, 22.8003037 ], [ 69.4532277, 22.7998773 ], [ 69.4535045, 22.7996189 ], [ 69.4536421, 22.7991037 ], [ 69.453181, 22.7990164 ], [ 69.4530859, 22.7988478 ], [ 69.453919, 22.7988453 ], [ 69.453778, 22.7983309 ], [ 69.4532209, 22.7978176 ], [ 69.4533577, 22.7970447 ], [ 69.4519676, 22.7965339 ], [ 69.4525208, 22.7958882 ], [ 69.4552949, 22.7951079 ], [ 69.4555718, 22.7948497 ], [ 69.456404, 22.7945898 ], [ 69.4570955, 22.7939448 ], [ 69.4576467, 22.7926558 ], [ 69.4582002, 22.7921394 ], [ 69.4581985, 22.7916244 ], [ 69.4580593, 22.7913674 ], [ 69.4569477, 22.7911132 ], [ 69.4572241, 22.7907257 ], [ 69.4580562, 22.7904658 ], [ 69.4590254, 22.7898198 ], [ 69.4590203, 22.7882751 ], [ 69.4591592, 22.7881457 ], [ 69.4594369, 22.7881447 ], [ 69.4599929, 22.7884006 ], [ 69.4616599, 22.7886533 ], [ 69.4624911, 22.788136 ], [ 69.4705436, 22.7882417 ], [ 69.4705444, 22.7884991 ], [ 69.4688793, 22.7887614 ], [ 69.4688803, 22.7890188 ], [ 69.4719354, 22.7892674 ], [ 69.4719336, 22.7887524 ], [ 69.4730447, 22.7888775 ], [ 69.4733233, 22.789134 ], [ 69.4763766, 22.7888675 ], [ 69.4765145, 22.7887388 ], [ 69.4765136, 22.7884813 ], [ 69.4760959, 22.7879676 ], [ 69.4749851, 22.787971 ], [ 69.4753994, 22.7874549 ], [ 69.4753977, 22.78694 ], [ 69.476091, 22.7865513 ], [ 69.4830331, 22.7867879 ], [ 69.4838653, 22.7865278 ], [ 69.484142, 22.7862697 ], [ 69.4846969, 22.7861396 ], [ 69.4844155, 22.7851107 ], [ 69.4838602, 22.7851124 ], [ 69.4838593, 22.7848548 ], [ 69.4846924, 22.7848523 ], [ 69.4848288, 22.7843369 ], [ 69.4855221, 22.7839484 ], [ 69.4860755, 22.7834316 ], [ 69.4866304, 22.7833018 ], [ 69.4864875, 22.7822723 ], [ 69.4855124, 22.7812455 ], [ 69.4849577, 22.7813755 ], [ 69.4846808, 22.7816337 ], [ 69.4844032, 22.7816346 ], [ 69.4841248, 22.781378 ], [ 69.4824574, 22.7809973 ], [ 69.4824567, 22.7807399 ], [ 69.4832896, 22.7807374 ], [ 69.4830101, 22.7802234 ], [ 69.4818991, 22.7800975 ], [ 69.4810643, 22.7795851 ], [ 69.4802291, 22.7789444 ], [ 69.4799489, 22.7781729 ], [ 69.4791159, 22.7781754 ], [ 69.479114, 22.7776605 ], [ 69.4793922, 22.7777879 ], [ 69.4802252, 22.7777854 ], [ 69.4807831, 22.7785562 ], [ 69.4813384, 22.7785545 ], [ 69.4816151, 22.7782961 ], [ 69.4818927, 22.7782954 ], [ 69.4824489, 22.7785511 ], [ 69.4838371, 22.7785469 ], [ 69.4927307, 22.7810943 ], [ 69.4963416, 22.7814696 ], [ 69.4963435, 22.7819845 ], [ 69.4957882, 22.7819863 ], [ 69.4957889, 22.7822438 ], [ 69.497454, 22.7819811 ], [ 69.4973119, 22.7812092 ], [ 69.495919, 22.7799262 ], [ 69.4955002, 22.7791551 ], [ 69.4924429, 22.778263 ], [ 69.4830023, 22.7780345 ], [ 69.481891, 22.7777803 ], [ 69.4807782, 22.7771406 ], [ 69.480637, 22.7766261 ], [ 69.4799398, 22.7755983 ], [ 69.4793845, 22.7756 ], [ 69.4792435, 22.7750856 ], [ 69.4785472, 22.7743152 ], [ 69.4746608, 22.7744551 ], [ 69.4738253, 22.7736853 ], [ 69.4724363, 22.773432 ], [ 69.4721587, 22.7734328 ], [ 69.4718818, 22.7736911 ], [ 69.4688306, 22.7744725 ], [ 69.465781, 22.7757686 ], [ 69.462451, 22.7762931 ], [ 69.4605102, 22.7770712 ], [ 69.4580124, 22.7773358 ], [ 69.4550547, 22.7778998 ], [ 69.4550545, 22.7778185 ], [ 69.4552373, 22.7777304 ], [ 69.4552365, 22.777473 ], [ 69.4549589, 22.7774738 ], [ 69.4546824, 22.7778603 ], [ 69.4548653, 22.7780765 ], [ 69.4548221, 22.7782464 ], [ 69.4544078, 22.7787626 ], [ 69.4536692, 22.7786762 ], [ 69.4534348, 22.7785078 ], [ 69.4527425, 22.7788956 ], [ 69.4469158, 22.780071 ], [ 69.4469149, 22.7798136 ], [ 69.4474698, 22.7796828 ], [ 69.4494074, 22.7778752 ], [ 69.4499617, 22.7776161 ], [ 69.4516276, 22.7776114 ], [ 69.4521838, 22.7778673 ], [ 69.4527391, 22.7778658 ], [ 69.4528769, 22.7777371 ], [ 69.4527368, 22.7772226 ], [ 69.4505153, 22.7770998 ], [ 69.4499593, 22.7768438 ], [ 69.4480167, 22.7771067 ], [ 69.443858, 22.7789206 ], [ 69.4433044, 22.7794369 ], [ 69.4424726, 22.7798259 ], [ 69.4424743, 22.7803409 ], [ 69.4416418, 22.7804713 ], [ 69.438871, 22.7822812 ], [ 69.4380398, 22.7827985 ], [ 69.4369317, 22.7835738 ], [ 69.4349939, 22.7853814 ], [ 69.4344394, 22.7856403 ], [ 69.4311171, 22.7887388 ], [ 69.4305628, 22.7889977 ], [ 69.4291784, 22.7902887 ], [ 69.4286238, 22.7905477 ], [ 69.4275165, 22.7915804 ], [ 69.4266839, 22.7917119 ], [ 69.4266854, 22.7922267 ], [ 69.4261305, 22.7923566 ], [ 69.425023, 22.7933893 ], [ 69.4244685, 22.7936482 ], [ 69.4236378, 22.7944227 ], [ 69.4225295, 22.7951982 ], [ 69.4211436, 22.795974 ], [ 69.4203129, 22.7967488 ], [ 69.4189268, 22.7975248 ], [ 69.4178185, 22.7983001 ], [ 69.41671, 22.7990752 ], [ 69.4158794, 22.7998499 ], [ 69.4153248, 22.8001086 ], [ 69.4142171, 22.8011413 ], [ 69.4128312, 22.8019173 ], [ 69.4120003, 22.8026919 ], [ 69.4111689, 22.803209 ], [ 69.4081188, 22.8047614 ], [ 69.4072872, 22.8052785 ], [ 69.4067335, 22.8057949 ], [ 69.4045156, 22.8070878 ], [ 69.4003547, 22.8086429 ], [ 69.3995231, 22.80916 ], [ 69.3986915, 22.8096769 ], [ 69.3981376, 22.8101933 ], [ 69.3950865, 22.8114881 ], [ 69.3936987, 22.8117489 ], [ 69.3934216, 22.8120071 ], [ 69.3889828, 22.8135628 ], [ 69.3859287, 22.8138277 ], [ 69.3762164, 22.816683 ], [ 69.3676161, 22.8200498 ], [ 69.3645632, 22.8208293 ], [ 69.360121, 22.8213543 ], [ 69.3571933, 22.8215926 ], [ 69.3547721, 22.820877 ], [ 69.3536011, 22.8186696 ], [ 69.3520215, 22.8187528 ], [ 69.3553937, 22.8253694 ], [ 69.3558293, 22.8266421 ], [ 69.3561939, 22.8272486 ], [ 69.356813, 22.828778 ], [ 69.3575052, 22.8302428 ], [ 69.358576, 22.8314868 ], [ 69.3595421, 22.8332087 ], [ 69.359478, 22.8338942 ], [ 69.3599649, 22.8347464 ], [ 69.3595172, 22.8354501 ], [ 69.3594278, 22.836051 ], [ 69.3592361, 22.8365263 ], [ 69.3592211, 22.8367912 ], [ 69.360162, 22.8369307 ], [ 69.3600723, 22.8374456 ], [ 69.356053, 22.8366217 ], [ 69.3561658, 22.8362451 ], [ 69.357281, 22.8350839 ], [ 69.3576119, 22.8350445 ], [ 69.3577024, 22.834064 ], [ 69.3570872, 22.8327696 ], [ 69.3562582, 22.8311462 ], [ 69.3550034, 22.829476 ], [ 69.354446, 22.8287049 ], [ 69.3531187, 22.8272416 ], [ 69.3523561, 22.8258776 ], [ 69.3518006, 22.8258788 ], [ 69.3513776, 22.8235626 ], [ 69.3509629, 22.8220192 ], [ 69.3505718, 22.8214687 ], [ 69.3487337, 22.8212513 ], [ 69.3485309, 22.8202824 ], [ 69.3483397, 22.8193692 ], [ 69.3470634, 22.8198617 ], [ 69.34593, 22.8206818 ], [ 69.3402735, 22.823728 ], [ 69.3343734, 22.8261688 ], [ 69.3306872, 22.8278871 ], [ 69.3269374, 22.8290879 ], [ 69.3254226, 22.8292441 ], [ 69.3222236, 22.8300447 ], [ 69.3204758, 22.8305914 ], [ 69.3172133, 22.8309526 ], [ 69.3145546, 22.8316555 ], [ 69.3120123, 22.8321241 ], [ 69.3103387, 22.8319679 ], [ 69.3066313, 22.8318703 ], [ 69.3044068, 22.8316458 ], [ 69.3036018, 22.8316848 ], [ 69.3031266, 22.8312365 ], [ 69.302712, 22.8308452 ], [ 69.300678, 22.8306604 ], [ 69.2988455, 22.8305335 ], [ 69.2944072, 22.8290886 ], [ 69.2921827, 22.8279756 ], [ 69.2885282, 22.8272727 ], [ 69.2875749, 22.8264038 ], [ 69.2865792, 22.8259645 ], [ 69.2842912, 22.8255837 ], [ 69.2795775, 22.8255544 ], [ 69.2784123, 22.8253689 ], [ 69.2746837, 22.8253689 ], [ 69.2714548, 22.8253163 ], [ 69.2696204, 22.8251541 ], [ 69.2681976, 22.8243675 ], [ 69.2665885, 22.8242526 ], [ 69.2625662, 22.8257021 ], [ 69.2565393, 22.827991 ], [ 69.2535774, 22.8291439 ], [ 69.2476552, 22.8300649 ], [ 69.242659, 22.8318748 ], [ 69.2393267, 22.8323947 ], [ 69.2340422, 22.8339833 ], [ 69.2322501, 22.8340786 ], [ 69.2307278, 22.834661 ], [ 69.2226134, 22.8360843 ], [ 69.2182243, 22.8368018 ], [ 69.2098915, 22.836813 ], [ 69.2060039, 22.8375903 ], [ 69.2035052, 22.838366 ], [ 69.2004498, 22.8383698 ], [ 69.1979491, 22.8378582 ], [ 69.1965602, 22.8378599 ], [ 69.1935067, 22.8391509 ], [ 69.1932292, 22.8394087 ], [ 69.1907303, 22.840184 ], [ 69.1898977, 22.8407 ], [ 69.1890656, 22.8414733 ], [ 69.1871225, 22.8425055 ], [ 69.1854579, 22.8440521 ], [ 69.1849027, 22.8443102 ], [ 69.1835156, 22.845599 ], [ 69.1801845, 22.8472768 ], [ 69.1799076, 22.8480494 ], [ 69.1793523, 22.8481785 ], [ 69.1785199, 22.8489517 ], [ 69.1774097, 22.8497253 ], [ 69.176577, 22.8502412 ], [ 69.1757439, 22.8504996 ], [ 69.1749115, 22.8512728 ], [ 69.173801, 22.851789 ], [ 69.1729686, 22.8525622 ], [ 69.1718584, 22.8533357 ], [ 69.1701926, 22.8541099 ], [ 69.1690824, 22.8548835 ], [ 69.1646409, 22.8577202 ], [ 69.1640858, 22.8582358 ], [ 69.1632531, 22.8587515 ], [ 69.16242, 22.8590097 ], [ 69.1613096, 22.8597833 ], [ 69.1599216, 22.8605571 ], [ 69.1590883, 22.8608154 ], [ 69.1579779, 22.8615888 ], [ 69.1554788, 22.8626211 ], [ 69.1527027, 22.8644261 ], [ 69.1513141, 22.8649422 ], [ 69.1510365, 22.8652 ], [ 69.1452045, 22.867265 ], [ 69.1427052, 22.8682972 ], [ 69.1424276, 22.8685548 ], [ 69.1343739, 22.8719088 ], [ 69.1340962, 22.8721666 ], [ 69.1332629, 22.8724245 ], [ 69.1313191, 22.8734561 ], [ 69.1302079, 22.8737145 ], [ 69.1290974, 22.8744877 ], [ 69.1282645, 22.8752607 ], [ 69.1263208, 22.8765497 ], [ 69.1249322, 22.8773231 ], [ 69.1193798, 22.8824765 ], [ 69.1188243, 22.8827343 ], [ 69.1177137, 22.8837649 ], [ 69.1171583, 22.8840229 ], [ 69.115976229687504, 22.88511974000328 ], [ 69.11577, 22.8853111 ], [ 69.1152146, 22.8855691 ], [ 69.1143817, 22.8863419 ], [ 69.1135485, 22.8868575 ], [ 69.1120047, 22.887839 ], [ 69.1105782, 22.8888043 ], [ 69.1074948, 22.8908907 ], [ 69.1066058, 22.8920114 ], [ 69.105217, 22.8927848 ], [ 69.1041063, 22.8938154 ], [ 69.103273, 22.8943308 ], [ 69.1027173, 22.8944602 ], [ 69.1027177, 22.8949753 ], [ 69.102162, 22.8951038 ], [ 69.1007733, 22.8958772 ], [ 69.09994, 22.8963926 ], [ 69.098551, 22.8971658 ], [ 69.0974401, 22.8979388 ], [ 69.0960509, 22.8984546 ], [ 69.09494, 22.8992276 ], [ 69.0913286, 22.901032 ], [ 69.0904953, 22.9018048 ], [ 69.0893843, 22.9025778 ], [ 69.0882732, 22.9033508 ], [ 69.0874399, 22.9038662 ], [ 69.0860506, 22.9043818 ], [ 69.0832724, 22.905928 ], [ 69.0818835, 22.906701 ], [ 69.08105, 22.9072164 ], [ 69.0793832, 22.908247 ], [ 69.0788277, 22.9087623 ], [ 69.0777164, 22.9095353 ], [ 69.0766051, 22.9100507 ], [ 69.0754938, 22.9108235 ], [ 69.0746605, 22.9115963 ], [ 69.0702152, 22.9141729 ], [ 69.0693815, 22.9144307 ], [ 69.0675085, 22.9156247 ], [ 69.0667932, 22.9160807 ], [ 69.064936, 22.9172646 ], [ 69.0624352, 22.9182954 ], [ 69.0621574, 22.918553 ], [ 69.06049, 22.9191977 ], [ 69.0604904, 22.9197127 ], [ 69.0596565, 22.9198412 ], [ 69.0591009, 22.9203565 ], [ 69.0566002, 22.9219021 ], [ 69.0538213, 22.9231903 ], [ 69.0488194, 22.9262814 ], [ 69.0477079, 22.9270541 ], [ 69.0468743, 22.9278267 ], [ 69.0457627, 22.9283419 ], [ 69.0452069, 22.9288569 ], [ 69.0393706, 22.9314332 ], [ 69.0390927, 22.9316906 ], [ 69.0360355, 22.9329786 ], [ 69.0340899, 22.933494 ], [ 69.0304768, 22.9352969 ], [ 69.0293651, 22.9360695 ], [ 69.0265857, 22.9373572 ], [ 69.0260298, 22.9378722 ], [ 69.025474, 22.9380015 ], [ 69.025474, 22.9385163 ], [ 69.0249181, 22.9386449 ], [ 69.0243623, 22.9391597 ], [ 69.0235284, 22.9396747 ], [ 69.0229726, 22.939804 ], [ 69.0229726, 22.940319 ], [ 69.0224167, 22.9404474 ], [ 69.0221387, 22.9407048 ], [ 69.0213048, 22.9409624 ], [ 69.0210268, 22.9412198 ], [ 69.0143557, 22.9440527 ], [ 69.0140778, 22.9443101 ], [ 69.0126879, 22.9448252 ], [ 69.0121319, 22.9453402 ], [ 69.010742, 22.9461126 ], [ 69.0099081, 22.9466275 ], [ 69.0073538, 22.9474161 ], [ 69.0057384, 22.9479149 ], [ 69.0043485, 22.9486874 ], [ 69.0024026, 22.9497172 ], [ 69.0010125, 22.9504897 ], [ 68.9999006, 22.9512619 ], [ 68.9979544, 22.9522918 ], [ 68.9926723, 22.9546087 ], [ 68.9912824, 22.9548662 ], [ 68.9898923, 22.9556384 ], [ 68.9873901, 22.9569255 ], [ 68.986556, 22.9571829 ], [ 68.9857218, 22.9576978 ], [ 68.9843317, 22.95847 ], [ 68.9837757, 22.9589848 ], [ 68.9826636, 22.9593714 ], [ 68.9826634, 22.9598862 ], [ 68.9779369, 22.9618161 ], [ 68.9751565, 22.9625881 ], [ 68.9748785, 22.9628456 ], [ 68.9732102, 22.9633602 ], [ 68.9729322, 22.9636176 ], [ 68.9715419, 22.9641323 ], [ 68.9704296, 22.9649043 ], [ 68.9695954, 22.9656766 ], [ 68.9690393, 22.9658057 ], [ 68.9690391, 22.9663205 ], [ 68.9684222, 22.9662601 ], [ 68.9640907, 22.968546 ], [ 68.9603807, 22.9705039 ], [ 68.9598628, 22.9708234 ], [ 68.9581943, 22.9718529 ], [ 68.9573599, 22.972625 ], [ 68.9559694, 22.973397 ], [ 68.9551352, 22.9741691 ], [ 68.9534665, 22.974941 ], [ 68.9506853, 22.9767423 ], [ 68.9495729, 22.9777718 ], [ 68.9484603, 22.9785439 ], [ 68.9442886, 22.9806021 ], [ 68.9406735, 22.9816305 ], [ 68.9392828, 22.9824023 ], [ 68.9381701, 22.9831742 ], [ 68.9373357, 22.9839463 ], [ 68.9367793, 22.9842035 ], [ 68.9353884, 22.9854902 ], [ 68.9334414, 22.9865193 ], [ 68.9306595, 22.9890925 ], [ 68.9301032, 22.9892216 ], [ 68.9299634, 22.9897365 ], [ 68.9267644, 22.9928244 ], [ 68.9262081, 22.9929525 ], [ 68.9259299, 22.9932097 ], [ 68.9245391, 22.993724 ], [ 68.9237045, 22.9944959 ], [ 68.9195325, 22.9957811 ], [ 68.9192541, 22.9960385 ], [ 68.9167508, 22.997067 ], [ 68.9145251, 22.998353 ], [ 68.9134123, 22.9991249 ], [ 68.9120214, 22.9996389 ], [ 68.9103518, 23.0011827 ], [ 68.909239, 23.0019544 ], [ 68.9081261, 23.0024686 ], [ 68.9075697, 23.0029833 ], [ 68.90635, 23.00360966403067 ], [ 68.9050659, 23.0042691 ], [ 68.9045092, 23.0047837 ], [ 68.901449, 23.0063265 ], [ 68.89505, 23.0094117 ], [ 68.8942152, 23.0099262 ], [ 68.8936586, 23.0104407 ], [ 68.8925457, 23.0109549 ], [ 68.8919889, 23.0114694 ], [ 68.8880937, 23.0135263 ], [ 68.8875369, 23.0140407 ], [ 68.8861456, 23.0148122 ], [ 68.8847544, 23.0155835 ], [ 68.8803019, 23.0181547 ], [ 68.8789107, 23.018926 ], [ 68.8750149, 23.0209827 ], [ 68.8741797, 23.0217544 ], [ 68.8722314, 23.02304 ], [ 68.8702832, 23.0243257 ], [ 68.8683352, 23.0253539 ], [ 68.8677784, 23.0258684 ], [ 68.8666654, 23.0262541 ], [ 68.8666648, 23.0267689 ], [ 68.8661084, 23.0268967 ], [ 68.8641604, 23.0279249 ], [ 68.8636036, 23.0284393 ], [ 68.8616554, 23.0294675 ], [ 68.8524706, 23.0346081 ], [ 68.8510788, 23.0353792 ], [ 68.8496872, 23.0361503 ], [ 68.8488518, 23.0369218 ], [ 68.846903, 23.0382072 ], [ 68.846068, 23.0387213 ], [ 68.8452328, 23.0392354 ], [ 68.8438414, 23.0397489 ], [ 68.8424496, 23.0405198 ], [ 68.8399444, 23.0418046 ], [ 68.837996, 23.0428324 ], [ 68.8360474, 23.0438602 ], [ 68.8340988, 23.044888 ], [ 68.8332632, 23.0456595 ], [ 68.8304795, 23.0472012 ], [ 68.8293657, 23.0479725 ], [ 68.8285301, 23.0487438 ], [ 68.8279733, 23.0490006 ], [ 68.8271378, 23.0497721 ], [ 68.826024, 23.0505433 ], [ 68.8221262, 23.052856 ], [ 68.8215696, 23.0529846 ], [ 68.8215689, 23.0534994 ], [ 68.8207341, 23.0536268 ], [ 68.8187853, 23.0546544 ], [ 68.8179499, 23.0551683 ], [ 68.8165579, 23.055939 ], [ 68.8151657, 23.0567098 ], [ 68.8137736, 23.0574805 ], [ 68.813495, 23.0577375 ], [ 68.81266, 23.057994 ], [ 68.8123694, 23.0582622 ], [ 68.8121028, 23.0585083 ], [ 68.8101542, 23.0592783 ], [ 68.8098756, 23.0595355 ], [ 68.8090406, 23.059792 ], [ 68.808762, 23.060049 ], [ 68.8076484, 23.0605625 ], [ 68.8065345, 23.0613335 ], [ 68.8056987, 23.0621048 ], [ 68.802636, 23.0636457 ], [ 68.8020788, 23.0641599 ], [ 68.7979019, 23.0664718 ], [ 68.7959527, 23.067499 ], [ 68.7940034, 23.0685262 ], [ 68.7903831, 23.0705812 ], [ 68.7889911, 23.0710942 ], [ 68.7887125, 23.0713512 ], [ 68.7850928, 23.072891 ], [ 68.7848142, 23.0731482 ], [ 68.7781325, 23.0754559 ], [ 68.7622654, 23.0792947 ], [ 68.7619866, 23.0795517 ], [ 68.7611514, 23.0798078 ], [ 68.7597587, 23.080578 ], [ 68.7583661, 23.0813484 ], [ 68.7539063, 23.0854606 ], [ 68.7533493, 23.0857171 ], [ 68.7508407, 23.0880303 ], [ 68.7502835, 23.0882867 ], [ 68.7494476, 23.0889295 ], [ 68.749307, 23.0894442 ], [ 68.7481919, 23.0904723 ], [ 68.7477736, 23.091244 ], [ 68.747217, 23.0912431 ], [ 68.7470764, 23.0917577 ], [ 68.7445674, 23.0940707 ], [ 68.7438702, 23.0950994 ], [ 68.7433138, 23.0950985 ], [ 68.7431732, 23.0956131 ], [ 68.7427551, 23.0961274 ], [ 68.7421983, 23.0962548 ], [ 68.7394104, 23.0988246 ], [ 68.7388534, 23.0990811 ], [ 68.7374593, 23.1003661 ], [ 68.7369025, 23.1004944 ], [ 68.7366226, 23.1012663 ], [ 68.7360658, 23.1013935 ], [ 68.734393, 23.1029354 ], [ 68.7338358, 23.103192 ], [ 68.7324418, 23.1044769 ], [ 68.7318846, 23.1047333 ], [ 68.7307693, 23.1057613 ], [ 68.7302125, 23.1058894 ], [ 68.7302114, 23.1064043 ], [ 68.7296546, 23.1065317 ], [ 68.7288186, 23.1070452 ], [ 68.7277031, 23.108073 ], [ 68.7257523, 23.1093568 ], [ 68.7238014, 23.1106407 ], [ 68.7218511, 23.111667 ], [ 68.7196202, 23.1137227 ], [ 68.719063, 23.1139792 ], [ 68.7179475, 23.115007 ], [ 68.7165542, 23.1157768 ], [ 68.7154388, 23.1168046 ], [ 68.7148816, 23.117061 ], [ 68.7140449, 23.1178318 ], [ 68.71293, 23.1186022 ], [ 68.7118149, 23.1193725 ], [ 68.7107, 23.1201427 ], [ 68.7095849, 23.1209131 ], [ 68.706798, 23.1224526 ], [ 68.7056829, 23.1232228 ], [ 68.7045673, 23.1242506 ], [ 68.7040101, 23.1245069 ], [ 68.7037311, 23.1247639 ], [ 68.703174, 23.1250202 ], [ 68.7017793, 23.1263048 ], [ 68.6998279, 23.1275883 ], [ 68.6989918, 23.1281017 ], [ 68.6964836, 23.1293842 ], [ 68.6950901, 23.1301538 ], [ 68.6942543, 23.1304095 ], [ 68.6934182, 23.1309229 ], [ 68.6928602, 23.1314368 ], [ 68.6917455, 23.1319493 ], [ 68.6911876, 23.1324632 ], [ 68.6900731, 23.132976 ], [ 68.6892362, 23.1337465 ], [ 68.6886788, 23.134003 ], [ 68.6875635, 23.1347732 ], [ 68.6847756, 23.1365696 ], [ 68.6842177, 23.1370835 ], [ 68.6833813, 23.1375967 ], [ 68.6819876, 23.1383663 ], [ 68.6786427, 23.1401616 ], [ 68.6772496, 23.1406736 ], [ 68.6769706, 23.1409304 ], [ 68.6730695, 23.1424672 ], [ 68.6716756, 23.1432366 ], [ 68.6711177, 23.1437503 ], [ 68.6677731, 23.145288 ], [ 68.6649848, 23.1470841 ], [ 68.6644267, 23.1475978 ], [ 68.6596873, 23.1501621 ], [ 68.6577353, 23.1514451 ], [ 68.6566191, 23.1524725 ], [ 68.6560616, 23.1527287 ], [ 68.6552245, 23.1534993 ], [ 68.6546669, 23.1537554 ], [ 68.6527138, 23.155425 ], [ 68.6525726, 23.1559395 ], [ 68.6521542, 23.1564536 ], [ 68.6515974, 23.1564522 ], [ 68.6514564, 23.1569669 ], [ 68.6497819, 23.1585078 ], [ 68.6495021, 23.1590221 ], [ 68.6478276, 23.160563 ], [ 68.6475477, 23.1610773 ], [ 68.645594, 23.162875 ], [ 68.6451748, 23.1636463 ], [ 68.644618, 23.1636452 ], [ 68.6446167, 23.16416 ], [ 68.6440595, 23.164287 ], [ 68.6421056, 23.1660848 ], [ 68.6409898, 23.1668546 ], [ 68.6404322, 23.1671107 ], [ 68.6395949, 23.1678811 ], [ 68.6376424, 23.1691638 ], [ 68.6334594, 23.1714711 ], [ 68.6326224, 23.1721133 ], [ 68.6326208, 23.1726282 ], [ 68.6320644, 23.1724978 ], [ 68.6312277, 23.1730107 ], [ 68.6303901, 23.1737811 ], [ 68.6289968, 23.1741644 ], [ 68.6287176, 23.1744212 ], [ 68.6287163, 23.1749361 ], [ 68.6281589, 23.1750631 ], [ 68.6273218, 23.1757051 ], [ 68.6272221, 23.177161 ], [ 68.6270391, 23.177249 ], [ 68.6270378, 23.1777639 ], [ 68.6272202, 23.177852 ], [ 68.6273147, 23.1782795 ], [ 68.6277756, 23.1783681 ], [ 68.6278709, 23.1785382 ], [ 68.6281495, 23.178539 ], [ 68.62815, 23.1782815 ], [ 68.6277327, 23.178023 ], [ 68.6275946, 23.1777652 ], [ 68.6274112, 23.1776764 ], [ 68.6274122, 23.1773375 ], [ 68.6275961, 23.1772504 ], [ 68.6280176, 23.1757066 ], [ 68.6295522, 23.1746805 ], [ 68.6288936, 23.1769075 ], [ 68.6287106, 23.1769956 ], [ 68.6288478, 23.1775108 ], [ 68.6294033, 23.178027 ], [ 68.6302324, 23.180346 ], [ 68.630928, 23.1807333 ], [ 68.6328779, 23.1804804 ], [ 68.633017, 23.1803524 ], [ 68.6331595, 23.1793229 ], [ 68.6320465, 23.1790629 ], [ 68.6320472, 23.1788055 ], [ 68.6339973, 23.1784235 ], [ 68.6344163, 23.1777813 ], [ 68.6344171, 23.1775238 ], [ 68.6344179, 23.1772664 ], [ 68.6349775, 23.1762379 ], [ 68.6352636, 23.1734067 ], [ 68.6356828, 23.1730209 ], [ 68.6367979, 23.1725087 ], [ 68.6395895, 23.1699406 ], [ 68.6451644, 23.1676363 ], [ 68.6455832, 23.1669941 ], [ 68.6464205, 23.1662237 ], [ 68.6472585, 23.1651958 ], [ 68.6486567, 23.1628818 ], [ 68.649215, 23.1623683 ], [ 68.6500529, 23.1613403 ], [ 68.6501941, 23.1608257 ], [ 68.6507509, 23.160827 ], [ 68.6511706, 23.1597981 ], [ 68.6514498, 23.1595413 ], [ 68.6520105, 23.1579979 ], [ 68.6528478, 23.1572273 ], [ 68.6531275, 23.1567131 ], [ 68.6539654, 23.1556853 ], [ 68.6545237, 23.1551716 ], [ 68.6550831, 23.154143 ], [ 68.6557813, 23.1535004 ], [ 68.6588476, 23.1519624 ], [ 68.6638622, 23.150686 ], [ 68.6641411, 23.1504292 ], [ 68.6649771, 23.1501735 ], [ 68.665256, 23.1499166 ], [ 68.6665101, 23.1492761 ], [ 68.6665119, 23.1485038 ], [ 68.6660961, 23.1479881 ], [ 68.6677667, 23.1478624 ], [ 68.6694411, 23.1463213 ], [ 68.6713923, 23.1452956 ], [ 68.6722294, 23.1445248 ], [ 68.6730648, 23.1443984 ], [ 68.6732048, 23.1438837 ], [ 68.6744596, 23.1432423 ], [ 68.6747385, 23.1429854 ], [ 68.6800322, 23.1411941 ], [ 68.6828175, 23.1405566 ], [ 68.6828181, 23.1402992 ], [ 68.6822615, 23.140298 ], [ 68.6822621, 23.1400406 ], [ 68.6830974, 23.139913 ], [ 68.6850485, 23.1388871 ], [ 68.6858848, 23.138374 ], [ 68.6867213, 23.1378609 ], [ 68.6875577, 23.1373476 ], [ 68.6883938, 23.1368342 ], [ 68.6892301, 23.1363211 ], [ 68.6900664, 23.1358078 ], [ 68.6914596, 23.1352956 ], [ 68.6924348, 23.1346545 ], [ 68.6925756, 23.1341398 ], [ 68.6939678, 23.1340134 ], [ 68.6943859, 23.1336284 ], [ 68.6945267, 23.1331138 ], [ 68.6959188, 23.1329873 ], [ 68.6966168, 23.1318306 ], [ 68.6967582, 23.1310586 ], [ 68.6995438, 23.1301623 ], [ 68.7006595, 23.1291347 ], [ 68.7012169, 23.1288783 ], [ 68.7020536, 23.1281075 ], [ 68.7026109, 23.1278511 ], [ 68.7040056, 23.1265666 ], [ 68.7045629, 23.1263101 ], [ 68.7059574, 23.1250255 ], [ 68.7067935, 23.1245122 ], [ 68.707212, 23.1238698 ], [ 68.7081887, 23.1229701 ], [ 68.7087459, 23.1227137 ], [ 68.7095826, 23.1219429 ], [ 68.7101399, 23.1216864 ], [ 68.7112554, 23.1206587 ], [ 68.7126489, 23.1198889 ], [ 68.7137631, 23.1195052 ], [ 68.7137642, 23.1189904 ], [ 68.714321, 23.1188622 ], [ 68.7157143, 23.1180922 ], [ 68.716551, 23.1173215 ], [ 68.7176659, 23.1165511 ], [ 68.7182233, 23.1162947 ], [ 68.7190598, 23.1155239 ], [ 68.719617, 23.1152674 ], [ 68.7207325, 23.1142397 ], [ 68.7212896, 23.1139832 ], [ 68.7221263, 23.1132123 ], [ 68.7226835, 23.1129558 ], [ 68.72352, 23.1121848 ], [ 68.7303459, 23.1084642 ], [ 68.7303474, 23.1076917 ], [ 68.7310445, 23.1073064 ], [ 68.7321594, 23.106536 ], [ 68.7329959, 23.1057651 ], [ 68.7335527, 23.1056377 ], [ 68.7335536, 23.1051229 ], [ 68.7341106, 23.1049945 ], [ 68.734947, 23.1042236 ], [ 68.7360619, 23.1034532 ], [ 68.7371766, 23.1026827 ], [ 68.7377336, 23.1024262 ], [ 68.7385701, 23.1016553 ], [ 68.7391273, 23.1013986 ], [ 68.7402424, 23.1003706 ], [ 68.7407995, 23.1001142 ], [ 68.7419146, 23.0990862 ], [ 68.7424718, 23.0988297 ], [ 68.7431683, 23.0981877 ], [ 68.7434474, 23.0976732 ], [ 68.7442837, 23.0969021 ], [ 68.7462372, 23.0940734 ], [ 68.7490248, 23.0915033 ], [ 68.7498621, 23.0902176 ], [ 68.7508377, 23.089575 ], [ 68.7519524, 23.0888044 ], [ 68.7525098, 23.0882903 ], [ 68.7527882, 23.0882907 ], [ 68.7529265, 23.0884202 ], [ 68.7529243, 23.0897075 ], [ 68.7512516, 23.0912495 ], [ 68.7506931, 23.0922784 ], [ 68.749857, 23.0930494 ], [ 68.7487404, 23.0948498 ], [ 68.7487356, 23.0974243 ], [ 68.7490135, 23.0976821 ], [ 68.7491501, 23.099227 ], [ 68.7474794, 23.0997392 ], [ 68.7470596, 23.1007685 ], [ 68.7470567, 23.102313 ], [ 68.7466387, 23.1028273 ], [ 68.7455247, 23.1032113 ], [ 68.74441, 23.1039819 ], [ 68.7438532, 23.10411 ], [ 68.7431535, 23.105911 ], [ 68.743153, 23.1061684 ], [ 68.7438481, 23.1068127 ], [ 68.7455166, 23.1075878 ], [ 68.7463501, 23.1083616 ], [ 68.7469061, 23.1086199 ], [ 68.7477396, 23.1093935 ], [ 68.7492688, 23.1100401 ], [ 68.749406, 23.1113275 ], [ 68.7505187, 23.111715 ], [ 68.7509348, 23.1121023 ], [ 68.7509339, 23.1126171 ], [ 68.7507948, 23.1128743 ], [ 68.7443935, 23.112735 ], [ 68.744115, 23.1128637 ], [ 68.7442522, 23.1136364 ], [ 68.74453, 23.1138942 ], [ 68.7446676, 23.1149242 ], [ 68.7443896, 23.1147946 ], [ 68.742998, 23.1147923 ], [ 68.7404903, 23.1162047 ], [ 68.7403495, 23.1167193 ], [ 68.739513, 23.1174903 ], [ 68.7392339, 23.1180047 ], [ 68.7372819, 23.1198036 ], [ 68.7365844, 23.1208322 ], [ 68.7354709, 23.1209586 ], [ 68.7349135, 23.1213444 ], [ 68.7349124, 23.1218592 ], [ 68.7360258, 23.1218611 ], [ 68.7360254, 23.1221185 ], [ 68.7354684, 23.1222459 ], [ 68.7349109, 23.1226314 ], [ 68.7347702, 23.1231461 ], [ 68.7342119, 23.1239176 ], [ 68.7330966, 23.1249456 ], [ 68.7322579, 23.1267462 ], [ 68.732396, 23.1275188 ], [ 68.7329524, 23.1276481 ], [ 68.7333682, 23.1282927 ], [ 68.7333679, 23.1285502 ], [ 68.7330889, 23.1288072 ], [ 68.731691, 23.1318941 ], [ 68.731273, 23.1324084 ], [ 68.7307162, 23.1324075 ], [ 68.7305754, 23.1329221 ], [ 68.7302966, 23.133179 ], [ 68.729459, 23.1344649 ], [ 68.7294584, 23.1347223 ], [ 68.7298757, 23.1351087 ], [ 68.7311709, 23.1355851 ], [ 68.7312662, 23.1357552 ], [ 68.7284822, 23.1358786 ], [ 68.7273669, 23.1367783 ], [ 68.7272257, 23.1375503 ], [ 68.7263879, 23.1388361 ], [ 68.7256909, 23.1396072 ], [ 68.7248568, 23.1390909 ], [ 68.7251379, 23.1378042 ], [ 68.7240241, 23.1379304 ], [ 68.719844, 23.1399828 ], [ 68.7190086, 23.1401104 ], [ 68.7191462, 23.1406256 ], [ 68.7195633, 23.1411412 ], [ 68.7190067, 23.1410109 ], [ 68.718451, 23.1404952 ], [ 68.7181726, 23.1404946 ], [ 68.7162205, 23.142165 ], [ 68.7158001, 23.1431941 ], [ 68.7157975, 23.1444812 ], [ 68.715937, 23.1446097 ], [ 68.7173291, 23.144484 ], [ 68.7171883, 23.1449986 ], [ 68.7173278, 23.1451272 ], [ 68.7178842, 23.1452574 ], [ 68.7178833, 23.1457722 ], [ 68.7195527, 23.1461608 ], [ 68.7198304, 23.1465481 ], [ 68.7170462, 23.1466713 ], [ 68.716489, 23.1467994 ], [ 68.7156495, 23.1488575 ], [ 68.7150927, 23.1488565 ], [ 68.715647, 23.1500157 ], [ 68.7162036, 23.1501457 ], [ 68.7162031, 23.1504033 ], [ 68.7145333, 23.1501427 ], [ 68.7145321, 23.1506577 ], [ 68.7139755, 23.1505275 ], [ 68.7134199, 23.1500115 ], [ 68.7128632, 23.1498822 ], [ 68.7128644, 23.1493674 ], [ 68.7123076, 23.1493664 ], [ 68.7122116, 23.149535 ], [ 68.712029, 23.1494942 ], [ 68.7112894, 23.1490185 ], [ 68.7114758, 23.1478202 ], [ 68.71064, 23.1480761 ], [ 68.7103594, 23.1491054 ], [ 68.7110986, 23.1491943 ], [ 68.7110521, 23.1503938 ], [ 68.7113295, 23.1509092 ], [ 68.7113289, 23.1511667 ], [ 68.7109101, 23.1519384 ], [ 68.7084042, 23.152062 ], [ 68.7081263, 23.151804 ], [ 68.7072917, 23.151545 ], [ 68.7056238, 23.1503838 ], [ 68.7059039, 23.1496119 ], [ 68.7045121, 23.1494802 ], [ 68.7025616, 23.1502489 ], [ 68.7014476, 23.1503759 ], [ 68.7017238, 23.1514063 ], [ 68.6983811, 23.1521721 ], [ 68.6983738, 23.155519 ], [ 68.6978171, 23.1553887 ], [ 68.6958665, 23.1561574 ], [ 68.6950298, 23.1567998 ], [ 68.6948884, 23.1575719 ], [ 68.6950275, 23.1578297 ], [ 68.6944709, 23.1576993 ], [ 68.6941931, 23.1574413 ], [ 68.6844581, 23.1533029 ], [ 68.6839013, 23.153302 ], [ 68.6827862, 23.1539436 ], [ 68.6826452, 23.1544583 ], [ 68.6818075, 23.1554864 ], [ 68.6809699, 23.1565144 ], [ 68.6801328, 23.1572852 ], [ 68.6798531, 23.1577994 ], [ 68.6770627, 23.1603683 ], [ 68.6762237, 23.1619111 ], [ 68.6759398, 23.1642275 ], [ 68.6756601, 23.164742 ], [ 68.6622644, 23.1770712 ], [ 68.6619844, 23.1775855 ], [ 68.6598913, 23.1796405 ], [ 68.6593341, 23.1797675 ], [ 68.6573802, 23.1815654 ], [ 68.656823, 23.1816934 ], [ 68.6565426, 23.1824651 ], [ 68.6559852, 23.1825921 ], [ 68.6523566, 23.1859309 ], [ 68.6517989, 23.186187 ], [ 68.6506826, 23.1870861 ], [ 68.6505416, 23.1876008 ], [ 68.6497042, 23.1883711 ], [ 68.6494243, 23.1888854 ], [ 68.6478892, 23.1904267 ], [ 68.6473318, 23.1905537 ], [ 68.6439818, 23.1936355 ], [ 68.6434241, 23.1938916 ], [ 68.6411907, 23.1959462 ], [ 68.6409115, 23.1962029 ], [ 68.6400741, 23.1969735 ], [ 68.6395163, 23.1972296 ], [ 68.6383999, 23.1981284 ], [ 68.6385358, 23.1991585 ], [ 68.6395088, 23.2000613 ], [ 68.6406206, 23.2008362 ], [ 68.6417325, 23.2016111 ], [ 68.6429837, 23.2022581 ], [ 68.6431221, 23.2027733 ], [ 68.6439576, 23.2027752 ], [ 68.643889342532304, 23.203025 ], [ 68.6436764, 23.2038043 ], [ 68.644233, 23.2039338 ], [ 68.6447887, 23.2044499 ], [ 68.6459028, 23.2044524 ], [ 68.647237078491116, 23.203225 ], [ 68.6481362, 23.2023979 ], [ 68.6486936, 23.2022709 ], [ 68.6486957, 23.2014985 ], [ 68.649253, 23.2013707 ], [ 68.6510672, 23.1997017 ], [ 68.6512082, 23.1991872 ], [ 68.6517656, 23.1990593 ], [ 68.6521839, 23.1986745 ], [ 68.6523248, 23.1981598 ], [ 68.6531604, 23.1981617 ], [ 68.6524611, 23.1991899 ], [ 68.6523203, 23.1999619 ], [ 68.6517629, 23.2000889 ], [ 68.6509257, 23.2007312 ], [ 68.6507839, 23.2015032 ], [ 68.6505048, 23.2017601 ], [ 68.650038676042243, 23.203225 ], [ 68.6495225, 23.2048472 ], [ 68.6484091, 23.2045873 ], [ 68.6484071, 23.2053596 ], [ 68.648964, 23.2053609 ], [ 68.6491015, 23.2058759 ], [ 68.6495184, 23.2063919 ], [ 68.6484046, 23.2062602 ], [ 68.6472886, 23.20703 ], [ 68.6470102, 23.2070294 ], [ 68.6467321, 23.2067712 ], [ 68.6456182, 23.2067688 ], [ 68.6450625, 23.2062526 ], [ 68.6417233, 23.205087 ], [ 68.6417219, 23.2056019 ], [ 68.6408864, 23.2056 ], [ 68.6410211, 23.2071451 ], [ 68.6414383, 23.2075316 ], [ 68.6419951, 23.2076622 ], [ 68.6417117, 23.2094635 ], [ 68.6403184, 23.2097177 ], [ 68.6404558, 23.2102329 ], [ 68.6405951, 23.2103617 ], [ 68.6417083, 23.2107508 ], [ 68.6417076, 23.2110082 ], [ 68.6408724, 23.2108771 ], [ 68.6400381, 23.2103603 ], [ 68.6386475, 23.2095849 ], [ 68.6378127, 23.2093254 ], [ 68.6361415, 23.2093216 ], [ 68.633911, 23.210218 ], [ 68.6339094, 23.2107328 ], [ 68.6325165, 23.2108578 ], [ 68.6322383, 23.2107289 ], [ 68.632237, 23.2112437 ], [ 68.6308429, 23.2117553 ], [ 68.6307017, 23.21227 ], [ 68.6297244, 23.2132974 ], [ 68.6288881, 23.2135529 ], [ 68.6286074, 23.2143246 ], [ 68.6291646, 23.2143259 ], [ 68.6287435, 23.2153547 ], [ 68.6284642, 23.2156115 ], [ 68.6283198, 23.2176707 ], [ 68.6327732, 23.2188391 ], [ 68.6333288, 23.2193554 ], [ 68.6352769, 23.2200039 ], [ 68.6354143, 23.2205191 ], [ 68.6355537, 23.2206478 ], [ 68.6369457, 23.2209084 ], [ 68.638058, 23.2216833 ], [ 68.6384736, 23.2223282 ], [ 68.6388118, 23.2231884 ], [ 68.6368056, 23.223748 ], [ 68.6352006, 23.2241729 ], [ 68.6296908, 23.2255255 ], [ 68.6263106, 23.2264601 ], [ 68.6168675, 23.2288415 ], [ 68.6149172, 23.2289659 ], [ 68.6150582, 23.2281938 ], [ 68.6172984, 23.2240802 ], [ 68.61758, 23.2230511 ], [ 68.6188401, 23.2208655 ], [ 68.6195371, 23.2204815 ], [ 68.6199592, 23.2191953 ], [ 68.619123, 23.2193216 ], [ 68.6182859, 23.2198343 ], [ 68.6177286, 23.2199623 ], [ 68.6175872, 23.2204767 ], [ 68.6170287, 23.2209903 ], [ 68.6145048, 23.2269052 ], [ 68.6128254, 23.229733 ], [ 68.6117057, 23.2315323 ], [ 68.6111472, 23.2320458 ], [ 68.6090478, 23.2356447 ], [ 68.6079338, 23.2355128 ], [ 68.6073757, 23.235898 ], [ 68.6072344, 23.2364127 ], [ 68.6063956, 23.2374402 ], [ 68.605556, 23.2387254 ], [ 68.6035976, 23.2415523 ], [ 68.6031771, 23.242581 ], [ 68.6065192, 23.2429751 ], [ 68.607217, 23.2423336 ], [ 68.6076373, 23.2416907 ], [ 68.6084746, 23.2411779 ], [ 68.6095897, 23.2409233 ], [ 68.6210111, 23.2412087 ], [ 68.6219847, 23.2415977 ], [ 68.622123, 23.2421129 ], [ 68.6288081, 23.2425145 ], [ 68.6289472, 23.2423866 ], [ 68.6290884, 23.2418719 ], [ 68.6318762, 23.2412344 ], [ 68.6322946, 23.2408498 ], [ 68.6324358, 23.2403352 ], [ 68.6338295, 23.240081 ], [ 68.6338301, 23.2398235 ], [ 68.6332729, 23.2398222 ], [ 68.6332752, 23.23905 ], [ 68.6343895, 23.2390526 ], [ 68.6342574, 23.2362204 ], [ 68.6335641, 23.2351891 ], [ 68.6330073, 23.2350585 ], [ 68.6327295, 23.2348005 ], [ 68.6318941, 23.2346703 ], [ 68.6318956, 23.2341554 ], [ 68.6338446, 23.2345455 ], [ 68.6342608, 23.2349332 ], [ 68.6350924, 23.2364798 ], [ 68.6350854, 23.2390541 ], [ 68.6353619, 23.2398271 ], [ 68.6360578, 23.2402144 ], [ 68.6393988, 23.2409946 ], [ 68.6405118, 23.2415119 ], [ 68.6505358, 23.2435941 ], [ 68.6533211, 23.2438577 ], [ 68.6547127, 23.2443756 ], [ 68.6552698, 23.2443769 ], [ 68.6554089, 23.244249 ], [ 68.6555581, 23.2406451 ], [ 68.6561152, 23.2406463 ], [ 68.6559767, 23.240131 ], [ 68.6561169, 23.2400021 ], [ 68.6569527, 23.240004 ], [ 68.6572319, 23.2397472 ], [ 68.6577894, 23.2396202 ], [ 68.6572283, 23.2411635 ], [ 68.6583434, 23.2409086 ], [ 68.658484, 23.2401365 ], [ 68.6593218, 23.239366 ], [ 68.6596017, 23.2388517 ], [ 68.659603, 23.2383369 ], [ 68.659325, 23.2380789 ], [ 68.6593264, 23.237564 ], [ 68.6601653, 23.2362787 ], [ 68.6603078, 23.2352492 ], [ 68.6586363, 23.2352454 ], [ 68.6587758, 23.2349884 ], [ 68.6587771, 23.2344735 ], [ 68.6583609, 23.2339577 ], [ 68.6594743, 23.2343458 ], [ 68.661425, 23.2340925 ], [ 68.6617042, 23.2338356 ], [ 68.6639328, 23.2338406 ], [ 68.664212, 23.2335837 ], [ 68.6653267, 23.2334578 ], [ 68.665328, 23.2329428 ], [ 68.6656063, 23.2330717 ], [ 68.6661634, 23.233073 ], [ 68.6667217, 23.2325593 ], [ 68.6678355, 23.232819 ], [ 68.6686713, 23.2328207 ], [ 68.6695082, 23.2323078 ], [ 68.6706225, 23.23231 ], [ 68.6709017, 23.2320532 ], [ 68.6720156, 23.2321847 ], [ 68.6721557, 23.2316701 ], [ 68.6728536, 23.2312849 ], [ 68.6734106, 23.231286 ], [ 68.6753626, 23.2305177 ], [ 68.6759209, 23.230004 ], [ 68.6775936, 23.2294926 ], [ 68.6777327, 23.2293647 ], [ 68.6778737, 23.22885 ], [ 68.6787079, 23.2294949 ], [ 68.6791687, 23.2297126 ], [ 68.6796801, 23.2303983 ], [ 68.6795346, 23.2332299 ], [ 68.6789772, 23.2333571 ], [ 68.6786981, 23.2336139 ], [ 68.6750731, 23.2350229 ], [ 68.6752101, 23.2357956 ], [ 68.674651, 23.2365667 ], [ 68.6742324, 23.2370808 ], [ 68.6772989, 23.2361855 ], [ 68.6778574, 23.2356718 ], [ 68.6803645, 23.2356769 ], [ 68.6823159, 23.235166 ], [ 68.6834305, 23.2350399 ], [ 68.6832889, 23.235812 ], [ 68.6827298, 23.2365831 ], [ 68.6827293, 23.2368406 ], [ 68.6830067, 23.2373561 ], [ 68.6720079, 23.2469389 ], [ 68.671509767690281, 23.249769979143583 ], [ 68.6703892, 23.2561386 ], [ 68.66637, 23.2615376 ], [ 68.6719421, 23.2644468 ], [ 68.6729469, 23.2669923 ], [ 68.6715163, 23.2736102 ], [ 68.6713547, 23.2745321 ], [ 68.6689752, 23.2787753 ], [ 68.666175, 23.2841756 ], [ 68.6637724, 23.2883756 ], [ 68.6727015, 23.2935855 ], [ 68.6790213, 23.2968173 ], [ 68.6793706, 23.3003369 ], [ 68.6821593, 23.3012 ], [ 68.6821604, 23.3006849 ], [ 68.682439, 23.3008138 ], [ 68.6832751, 23.3008155 ], [ 68.6849489, 23.3001758 ], [ 68.6849476, 23.3006906 ], [ 68.6832738, 23.3013304 ], [ 68.6827155, 23.3017159 ], [ 68.6829933, 23.3021023 ], [ 68.6846644, 23.3026205 ], [ 68.6855008, 23.3024939 ], [ 68.6854996, 23.3030087 ], [ 68.6882847, 23.303915 ], [ 68.688841, 23.3044309 ], [ 68.6938538, 23.3062429 ], [ 68.6958041, 23.3066331 ], [ 68.695803, 23.3071482 ], [ 68.6963601, 23.3072775 ], [ 68.6964987, 23.3074069 ], [ 68.6966357, 23.3086944 ], [ 68.7022135, 23.3072886 ], [ 68.7024928, 23.3070318 ], [ 68.704724, 23.3063927 ], [ 68.7045847, 23.3061351 ], [ 68.7045852, 23.3058777 ], [ 68.705284, 23.3052349 ], [ 68.7058421, 23.3049786 ], [ 68.7076569, 23.303309 ], [ 68.7084533, 23.3013387 ], [ 68.7097536, 23.3006093 ], [ 68.7104514, 23.2999675 ], [ 68.7105924, 23.2994529 ], [ 68.7111498, 23.299454 ], [ 68.7111509, 23.298939 ], [ 68.712266, 23.298812 ], [ 68.7124051, 23.2986838 ], [ 68.7125461, 23.2981692 ], [ 68.7131038, 23.298041 ], [ 68.7139415, 23.2972703 ], [ 68.7220279, 23.2954827 ], [ 68.7250936, 23.2954882 ], [ 68.7264862, 23.2960055 ], [ 68.7270424, 23.2965213 ], [ 68.7281558, 23.2972956 ], [ 68.7292696, 23.2978123 ], [ 68.7296863, 23.2981998 ], [ 68.7302422, 23.298973 ], [ 68.7316291, 23.3023221 ], [ 68.7316234, 23.305154 ], [ 68.7321777, 23.3066995 ], [ 68.7327338, 23.3074729 ], [ 68.7331515, 23.3078592 ], [ 68.7359358, 23.3094086 ], [ 68.7389061, 23.3093729 ], [ 68.7390016, 23.309543 ], [ 68.7362134, 23.309924 ], [ 68.7350991, 23.3096647 ], [ 68.7328717, 23.3083737 ], [ 68.7320367, 23.3077292 ], [ 68.731898, 23.3072139 ], [ 68.7316198, 23.3069562 ], [ 68.7307878, 23.3048951 ], [ 68.7307899, 23.3038654 ], [ 68.7299594, 23.3010321 ], [ 68.729404, 23.3000013 ], [ 68.7291278, 23.2987137 ], [ 68.7287113, 23.2981981 ], [ 68.7278755, 23.2980675 ], [ 68.7264835, 23.2972928 ], [ 68.7242554, 23.2965165 ], [ 68.7214679, 23.2967691 ], [ 68.7195153, 23.2975379 ], [ 68.7162639, 23.2983449 ], [ 68.7161698, 23.2979184 ], [ 68.7150536, 23.2985594 ], [ 68.7139371, 23.2993298 ], [ 68.7130997, 23.2999724 ], [ 68.7129587, 23.3004871 ], [ 68.7119814, 23.301515 ], [ 68.7103083, 23.3018976 ], [ 68.7094707, 23.3025402 ], [ 68.7087701, 23.3040834 ], [ 68.7084907, 23.3043404 ], [ 68.7075108, 23.3066555 ], [ 68.706953, 23.3067826 ], [ 68.7063943, 23.3072965 ], [ 68.7052777, 23.3080667 ], [ 68.7010933, 23.3096035 ], [ 68.6988625, 23.3099858 ], [ 68.6995559, 23.3112744 ], [ 68.7008094, 23.3119199 ], [ 68.7010876, 23.3121778 ], [ 68.7061027, 23.3132172 ], [ 68.7068869, 23.3132389 ], [ 68.7074977, 23.3125766 ], [ 68.7082384, 23.3124082 ], [ 68.7083352, 23.3120633 ], [ 68.7088929, 23.3119352 ], [ 68.7100101, 23.3109074 ], [ 68.7108472, 23.3105233 ], [ 68.7105667, 23.311295 ], [ 68.710009, 23.3114224 ], [ 68.7091711, 23.3121932 ], [ 68.7083335, 23.3128356 ], [ 68.7078164, 23.3133519 ], [ 68.7080524, 23.3138649 ], [ 68.7090563, 23.3142426 ], [ 68.7095591, 23.3149499 ], [ 68.7085732, 23.3149114 ], [ 68.7064164, 23.3146375 ], [ 68.7058756, 23.3140279 ], [ 68.7021997, 23.3134672 ], [ 68.698857, 23.3124311 ], [ 68.697465, 23.311656 ], [ 68.6969088, 23.31114 ], [ 68.692733, 23.308815 ], [ 68.6891112, 23.3080355 ], [ 68.6885529, 23.3084211 ], [ 68.688276, 23.3076483 ], [ 68.6874401, 23.3075173 ], [ 68.6860483, 23.3067422 ], [ 68.6846559, 23.3062245 ], [ 68.6829833, 23.3063504 ], [ 68.6830785, 23.3061807 ], [ 68.6832626, 23.3060936 ], [ 68.6832632, 23.3058361 ], [ 68.6829844, 23.3058356 ], [ 68.6828882, 23.3060042 ], [ 68.6818691, 23.3059614 ], [ 68.6807555, 23.3054443 ], [ 68.6790833, 23.3054409 ], [ 68.6785263, 23.3051824 ], [ 68.6757395, 23.3050484 ], [ 68.6755934, 23.3076224 ], [ 68.6767002, 23.3109715 ], [ 68.6776747, 23.3116167 ], [ 68.6782322, 23.3116178 ], [ 68.6796268, 23.3112349 ], [ 68.6797675, 23.3104629 ], [ 68.6799077, 23.310334 ], [ 68.6809268, 23.3102954 ], [ 68.6808824, 23.3104651 ], [ 68.6803237, 23.3109788 ], [ 68.6803225, 23.3114939 ], [ 68.6794845, 23.3122644 ], [ 68.6790649, 23.3130359 ], [ 68.6785074, 23.3130348 ], [ 68.6786452, 23.3135498 ], [ 68.677807, 23.3143205 ], [ 68.6773851, 23.3161217 ], [ 68.6743188, 23.3161153 ], [ 68.6743195, 23.3158579 ], [ 68.675156, 23.3157305 ], [ 68.6768304, 23.3149616 ], [ 68.6772488, 23.3145768 ], [ 68.6778083, 23.3138055 ], [ 68.6776713, 23.3130331 ], [ 68.6771137, 23.3130319 ], [ 68.6768368, 23.3122589 ], [ 68.6760007, 23.3122572 ], [ 68.676002, 23.3117424 ], [ 68.6748863, 23.3119975 ], [ 68.674885, 23.3125124 ], [ 68.6743273, 23.3126394 ], [ 68.672934, 23.3125082 ], [ 68.6727915, 23.3135377 ], [ 68.6722328, 23.3140514 ], [ 68.6720914, 23.3150809 ], [ 68.6726486, 23.3152103 ], [ 68.6727871, 23.3153398 ], [ 68.6729257, 23.315855 ], [ 68.6740398, 23.316243 ], [ 68.6744564, 23.3166305 ], [ 68.675009, 23.3186912 ], [ 68.6750064, 23.319721 ], [ 68.675146, 23.3198495 ], [ 68.6757032, 23.3199798 ], [ 68.6759801, 23.3207528 ], [ 68.6743088, 23.3202343 ], [ 68.674724, 23.321265 ], [ 68.6748635, 23.3213935 ], [ 68.6756994, 23.3215245 ], [ 68.6761133, 23.3230699 ], [ 68.6763915, 23.3233279 ], [ 68.6768079, 23.3242294 ], [ 68.6776446, 23.3241028 ], [ 68.6775078, 23.3228153 ], [ 68.6769515, 23.3222994 ], [ 68.6769079, 23.3221294 ], [ 68.6782067, 23.3221727 ], [ 68.6786253, 23.3217879 ], [ 68.6787682, 23.320501 ], [ 68.6793258, 23.3205022 ], [ 68.6802948, 23.3230786 ], [ 68.6808504, 23.323852 ], [ 68.6818251, 23.3244971 ], [ 68.6823813, 23.3250132 ], [ 68.6830768, 23.3254012 ], [ 68.6832156, 23.3259163 ], [ 68.6837727, 23.3260457 ], [ 68.6843292, 23.3265617 ], [ 68.6854433, 23.3269505 ], [ 68.6853471, 23.3271192 ], [ 68.6848852, 23.3272069 ], [ 68.6847429, 23.3282364 ], [ 68.6843239, 23.3287503 ], [ 68.6848812, 23.3288798 ], [ 68.6850198, 23.3290092 ], [ 68.6851585, 23.3295245 ], [ 68.6832056, 23.3301636 ], [ 68.6826471, 23.330549 ], [ 68.6826465, 23.3308064 ], [ 68.6837608, 23.3310661 ], [ 68.6837597, 23.3315811 ], [ 68.6832022, 23.33158 ], [ 68.683201, 23.3320949 ], [ 68.6804129, 23.3322175 ], [ 68.6801343, 23.3320886 ], [ 68.6802745, 23.331574 ], [ 68.6799969, 23.3310586 ], [ 68.6793023, 23.3302848 ], [ 68.6784666, 23.3300257 ], [ 68.6779134, 23.3282224 ], [ 68.6765204, 23.3278329 ], [ 68.6759627, 23.327961 ], [ 68.6762388, 23.3289913 ], [ 68.6767962, 23.3291207 ], [ 68.6769347, 23.3292502 ], [ 68.6767945, 23.3297649 ], [ 68.6756794, 23.3297624 ], [ 68.6756783, 23.3302774 ], [ 68.6742846, 23.3301453 ], [ 68.6734473, 23.3305301 ], [ 68.6731661, 23.3315594 ], [ 68.6726085, 23.3315581 ], [ 68.6723273, 23.3325874 ], [ 68.6703745, 23.3330981 ], [ 68.6703725, 23.3338705 ], [ 68.6698153, 23.3337401 ], [ 68.6692581, 23.3336106 ], [ 68.6692592, 23.3330958 ], [ 68.6687021, 23.3329654 ], [ 68.6684239, 23.3327074 ], [ 68.6678663, 23.3327063 ], [ 68.6674029, 23.3330034 ], [ 68.6666136, 23.331803 ], [ 68.6667599, 23.3292289 ], [ 68.666202, 23.3293561 ], [ 68.6659236, 23.3292272 ], [ 68.6659249, 23.3287123 ], [ 68.6664821, 23.3288416 ], [ 68.6666214, 23.3287136 ], [ 68.6666219, 23.3284562 ], [ 68.6663439, 23.3281982 ], [ 68.6662061, 23.327683 ], [ 68.6656484, 23.3278102 ], [ 68.6653702, 23.327552 ], [ 68.6642555, 23.3274214 ], [ 68.6643957, 23.3269068 ], [ 68.6646751, 23.32665 ], [ 68.6648168, 23.3258781 ], [ 68.6639799, 23.3261336 ], [ 68.6638433, 23.3248461 ], [ 68.6639835, 23.3247172 ], [ 68.6648202, 23.3245908 ], [ 68.6645439, 23.3235606 ], [ 68.6637074, 23.323687 ], [ 68.6631489, 23.3240724 ], [ 68.6628661, 23.3256163 ], [ 68.6617518, 23.3253566 ], [ 68.6623131, 23.3238131 ], [ 68.6617554, 23.3239403 ], [ 68.6614758, 23.3241971 ], [ 68.6600824, 23.3240658 ], [ 68.6602226, 23.3235511 ], [ 68.6605021, 23.3232943 ], [ 68.6606433, 23.3227798 ], [ 68.6598062, 23.3230353 ], [ 68.6595256, 23.323807 ], [ 68.6592468, 23.3238064 ], [ 68.6595301, 23.3220051 ], [ 68.660088, 23.3218771 ], [ 68.6605067, 23.3214923 ], [ 68.6605072, 23.3212349 ], [ 68.6593968, 23.3194303 ], [ 68.6589805, 23.3189146 ], [ 68.6581428, 23.3194277 ], [ 68.6577217, 23.3204564 ], [ 68.6571629, 23.3209701 ], [ 68.6567433, 23.3217414 ], [ 68.6561857, 23.3217403 ], [ 68.6563207, 23.3232852 ], [ 68.6572952, 23.3239304 ], [ 68.6609158, 23.3252256 ], [ 68.6617501, 23.3259998 ], [ 68.6623073, 23.32613 ], [ 68.6635503, 23.3305091 ], [ 68.663545, 23.3325687 ], [ 68.6632644, 23.3333404 ], [ 68.6624254, 23.3343683 ], [ 68.6624241, 23.3348834 ], [ 68.6622846, 23.3351404 ], [ 68.6620058, 23.3351398 ], [ 68.6621472, 23.3341103 ], [ 68.6627074, 23.3330818 ], [ 68.6625777, 23.3294774 ], [ 68.6620202, 23.3294763 ], [ 68.6615976, 23.3310198 ], [ 68.6611786, 23.3315339 ], [ 68.6600627, 23.3317889 ], [ 68.6600614, 23.3323037 ], [ 68.6595036, 23.3324309 ], [ 68.6592241, 23.3326877 ], [ 68.6583878, 23.3326859 ], [ 68.6575528, 23.3321691 ], [ 68.6564377, 23.3321667 ], [ 68.6561585, 23.3322952 ], [ 68.6561619, 23.3310081 ], [ 68.6572759, 23.3313961 ], [ 68.6575541, 23.3316543 ], [ 68.6600635, 23.3315314 ], [ 68.6600648, 23.3310166 ], [ 68.6614592, 23.3307622 ], [ 68.6616027, 23.3289605 ], [ 68.6607697, 23.3276713 ], [ 68.6606322, 23.3271563 ], [ 68.6567293, 23.3271478 ], [ 68.6565874, 23.3279197 ], [ 68.6561685, 23.3284337 ], [ 68.6547756, 23.328044 ], [ 68.6539397, 23.327914 ], [ 68.6539402, 23.3276564 ], [ 68.6553341, 23.3276596 ], [ 68.6553362, 23.3268871 ], [ 68.6564505, 23.327147 ], [ 68.656312, 23.326632 ], [ 68.6556176, 23.325858 ], [ 68.6550601, 23.3258569 ], [ 68.6550614, 23.3253419 ], [ 68.6525545, 23.3245641 ], [ 68.6525564, 23.3237919 ], [ 68.6536705, 23.3241799 ], [ 68.655064, 23.3243122 ], [ 68.6549287, 23.3225099 ], [ 68.6554897, 23.3212239 ], [ 68.6560485, 23.3207102 ], [ 68.6560512, 23.3196806 ], [ 68.6559128, 23.3194228 ], [ 68.6553557, 23.3192924 ], [ 68.6547996, 23.3187762 ], [ 68.6542424, 23.3186467 ], [ 68.6542464, 23.317102 ], [ 68.6553617, 23.3169754 ], [ 68.6555002, 23.3171049 ], [ 68.6556388, 23.3176201 ], [ 68.6550812, 23.3176188 ], [ 68.6553591, 23.3180051 ], [ 68.6564738, 23.3181368 ], [ 68.6567563, 23.3165927 ], [ 68.6578714, 23.3165952 ], [ 68.6578693, 23.3173676 ], [ 68.6581481, 23.3173682 ], [ 68.6581515, 23.3160809 ], [ 68.657594, 23.3160797 ], [ 68.6574554, 23.3155645 ], [ 68.6568992, 23.3150484 ], [ 68.6569, 23.314791 ], [ 68.6574587, 23.3142773 ], [ 68.65746, 23.3137624 ], [ 68.657182, 23.3135044 ], [ 68.6570444, 23.3129892 ], [ 68.6565821, 23.3128996 ], [ 68.6567667, 23.312602 ], [ 68.6570455, 23.3126025 ], [ 68.6573235, 23.3128607 ], [ 68.6578809, 23.3128618 ], [ 68.658579, 23.3122202 ], [ 68.6580313, 23.3083574 ], [ 68.6563696, 23.3042347 ], [ 68.6551198, 23.3026874 ], [ 68.6545626, 23.302557 ], [ 68.6526114, 23.3026819 ], [ 68.6524694, 23.3034538 ], [ 68.6517711, 23.3042247 ], [ 68.6512133, 23.3043517 ], [ 68.6500962, 23.3052506 ], [ 68.649955, 23.3057653 ], [ 68.6493961, 23.306279 ], [ 68.6488359, 23.3073073 ], [ 68.6479971, 23.3083353 ], [ 68.6474383, 23.3088488 ], [ 68.6472973, 23.3096209 ], [ 68.6464611, 23.309619 ], [ 68.6464585, 23.3106488 ], [ 68.6461803, 23.3103907 ], [ 68.6456229, 23.3103893 ], [ 68.6454817, 23.310904 ], [ 68.6449229, 23.3114177 ], [ 68.6438009, 23.3139894 ], [ 68.6437975, 23.3152767 ], [ 68.6442141, 23.3160499 ], [ 68.6433772, 23.3163054 ], [ 68.643512, 23.3178503 ], [ 68.6433725, 23.3181075 ], [ 68.6428149, 23.3181062 ], [ 68.6428163, 23.3175914 ], [ 68.6386346, 23.3177101 ], [ 68.6383557, 23.3178386 ], [ 68.6382192, 23.3165511 ], [ 68.6383598, 23.3162939 ], [ 68.6375231, 23.3164203 ], [ 68.636966, 23.3162907 ], [ 68.636824, 23.3170627 ], [ 68.6369625, 23.317578 ], [ 68.6366842, 23.3174481 ], [ 68.6350117, 23.3174441 ], [ 68.6341742, 23.3178289 ], [ 68.634033, 23.3183434 ], [ 68.6337535, 23.3186003 ], [ 68.6331926, 23.319886 ], [ 68.633189, 23.3211733 ], [ 68.6331869, 23.3219456 ], [ 68.6326216, 23.324776 ], [ 68.6335908, 23.3273528 ], [ 68.6341483, 23.327354 ], [ 68.6341468, 23.327869 ], [ 68.634704, 23.3279985 ], [ 68.6353988, 23.3286441 ], [ 68.6359535, 23.3296753 ], [ 68.6360863, 23.3322498 ], [ 68.6358079, 23.3321202 ], [ 68.6346921, 23.3323749 ], [ 68.6338539, 23.333017 ], [ 68.6338526, 23.3335318 ], [ 68.6348722, 23.3333644 ], [ 68.6346881, 23.3337913 ], [ 68.6316197, 23.3344273 ], [ 68.6310622, 23.334426 ], [ 68.6307838, 23.3342971 ], [ 68.6307824, 23.3348119 ], [ 68.630504, 23.3346821 ], [ 68.6296675, 23.33468 ], [ 68.6263186, 23.3359593 ], [ 68.6252009, 23.3368582 ], [ 68.6244948, 23.3399457 ], [ 68.6247677, 23.3420058 ], [ 68.6253232, 23.3427796 ], [ 68.6257361, 23.3448401 ], [ 68.6251784, 23.3448387 ], [ 68.6254538, 23.3461266 ], [ 68.6274058, 23.346002 ], [ 68.6275451, 23.3458741 ], [ 68.6274075, 23.3453589 ], [ 68.6268499, 23.3453575 ], [ 68.6268512, 23.3448427 ], [ 68.6285228, 23.3453615 ], [ 68.6283842, 23.3448463 ], [ 68.627968, 23.3443305 ], [ 68.6296414, 23.3440769 ], [ 68.6290862, 23.3433033 ], [ 68.6285284, 23.343302 ], [ 68.6282532, 23.3420141 ], [ 68.6302056, 23.3417614 ], [ 68.6299282, 23.3412459 ], [ 68.6290918, 23.3412438 ], [ 68.6290932, 23.3407289 ], [ 68.6307652, 23.3409903 ], [ 68.6307668, 23.3404755 ], [ 68.6310451, 23.3406044 ], [ 68.6332752, 23.3407388 ], [ 68.6334156, 23.3402243 ], [ 68.6336949, 23.3399675 ], [ 68.6335575, 23.3394522 ], [ 68.6329988, 23.3398367 ], [ 68.6324409, 23.3399646 ], [ 68.6324437, 23.3389348 ], [ 68.6343938, 23.3394543 ], [ 68.6342555, 23.3389391 ], [ 68.6338391, 23.3384231 ], [ 68.6352338, 23.3381689 ], [ 68.6348138, 23.3386828 ], [ 68.6348115, 23.3394553 ], [ 68.6341094, 23.3415131 ], [ 68.6352254, 23.3412583 ], [ 68.6349438, 23.3422874 ], [ 68.6343869, 23.3420287 ], [ 68.6343848, 23.3428009 ], [ 68.6348463, 23.3428896 ], [ 68.6348446, 23.3434859 ], [ 68.6347565, 23.3434855 ], [ 68.634106, 23.3428002 ], [ 68.6338272, 23.3427996 ], [ 68.6338257, 23.3433145 ], [ 68.6329894, 23.3433126 ], [ 68.6328473, 23.3440844 ], [ 68.6324282, 23.3445983 ], [ 68.6313118, 23.3449814 ], [ 68.6290782, 23.3461351 ], [ 68.6294946, 23.3466511 ], [ 68.6294923, 23.3474233 ], [ 68.6293527, 23.3476804 ], [ 68.6301888, 23.3478106 ], [ 68.6304666, 23.3481978 ], [ 68.6285141, 23.3484507 ], [ 68.6280918, 23.3497369 ], [ 68.6282296, 23.3505095 ], [ 68.6287872, 23.3505108 ], [ 68.6287858, 23.3510258 ], [ 68.6282285, 23.3508952 ], [ 68.6273906, 23.3514082 ], [ 68.6268316, 23.3519217 ], [ 68.6259943, 23.3521772 ], [ 68.6254356, 23.3525624 ], [ 68.6253392, 23.3527312 ], [ 68.6245982, 23.3529461 ], [ 68.6240393, 23.3533315 ], [ 68.6240372, 23.3541037 ], [ 68.6244988, 23.3541924 ], [ 68.6247308, 23.3551351 ], [ 68.6251478, 23.3557792 ], [ 68.6259843, 23.3557813 ], [ 68.6276586, 23.3552704 ], [ 68.6282164, 23.3552717 ], [ 68.6289104, 23.3561748 ], [ 68.6289083, 23.3569472 ], [ 68.6283491, 23.3574607 ], [ 68.6279293, 23.358232 ], [ 68.6262566, 23.3580988 ], [ 68.6256997, 23.3578401 ], [ 68.6251419, 23.3578387 ], [ 68.6248628, 23.3579673 ], [ 68.6244383, 23.3600256 ], [ 68.6245778, 23.3601544 ], [ 68.6254139, 23.3602855 ], [ 68.6254162, 23.3595133 ], [ 68.6259737, 23.3595146 ], [ 68.6258318, 23.3602865 ], [ 68.6255522, 23.3605433 ], [ 68.6254118, 23.3610578 ], [ 68.6242967, 23.360926 ], [ 68.6234593, 23.3613107 ], [ 68.6227543, 23.3638833 ], [ 68.6224748, 23.36414 ], [ 68.6226125, 23.3649126 ], [ 68.6217758, 23.3649105 ], [ 68.6220563, 23.3643965 ], [ 68.6214986, 23.3643951 ], [ 68.6214971, 23.36491 ], [ 68.620382, 23.3647781 ], [ 68.6192695, 23.3637455 ], [ 68.6187123, 23.3636161 ], [ 68.6191315, 23.3631022 ], [ 68.6191338, 23.3623299 ], [ 68.6185783, 23.3615562 ], [ 68.6184415, 23.3607835 ], [ 68.6192776, 23.3609138 ], [ 68.6194169, 23.360786 ], [ 68.619281, 23.3597558 ], [ 68.6201179, 23.3596287 ], [ 68.6205367, 23.3592439 ], [ 68.6205411, 23.3576994 ], [ 68.6204029, 23.3574416 ], [ 68.6190098, 23.3570515 ], [ 68.6178945, 23.3570489 ], [ 68.6176158, 23.3570481 ], [ 68.6153825, 23.3579442 ], [ 68.615241, 23.3584588 ], [ 68.6148218, 23.3589725 ], [ 68.6142642, 23.3589712 ], [ 68.6138388, 23.361287 ], [ 68.6139779, 23.3615448 ], [ 68.6131421, 23.3612853 ], [ 68.6129962, 23.3633445 ], [ 68.6135487, 23.3651479 ], [ 68.6139664, 23.3655346 ], [ 68.6145237, 23.3656652 ], [ 68.6136842, 23.366693 ], [ 68.6128467, 23.3669483 ], [ 68.6128454, 23.3674632 ], [ 68.6122873, 23.36759 ], [ 68.6111692, 23.3684887 ], [ 68.6108874, 23.3695178 ], [ 68.6103307, 23.3691298 ], [ 68.6083784, 23.3692541 ], [ 68.608237, 23.3697686 ], [ 68.6079573, 23.3700255 ], [ 68.6082279, 23.3728578 ], [ 68.6078063, 23.3741439 ], [ 68.6058539, 23.3742674 ], [ 68.6055753, 23.3741383 ], [ 68.6055731, 23.3749107 ], [ 68.6050149, 23.3750375 ], [ 68.6044561, 23.3754227 ], [ 68.6050119, 23.3760672 ], [ 68.6057074, 23.3764556 ], [ 68.6057067, 23.376713 ], [ 68.6054714, 23.3768814 ], [ 68.6047307, 23.3768389 ], [ 68.6038923, 23.3774807 ], [ 68.6038938, 23.3769659 ], [ 68.6036148, 23.3769652 ], [ 68.6040289, 23.3782534 ], [ 68.6040242, 23.3797981 ], [ 68.6037432, 23.3805696 ], [ 68.6031837, 23.3810831 ], [ 68.6030433, 23.3815975 ], [ 68.6010896, 23.3821075 ], [ 68.6010866, 23.3831373 ], [ 68.6005286, 23.3831358 ], [ 68.6002476, 23.3839075 ], [ 68.5991316, 23.3840328 ], [ 68.5988535, 23.3837746 ], [ 68.5980168, 23.3837726 ], [ 68.5968985, 23.3846711 ], [ 68.5967554, 23.3857005 ], [ 68.5963361, 23.3862142 ], [ 68.5968938, 23.3862158 ], [ 68.596893, 23.3864732 ], [ 68.5957768, 23.3867278 ], [ 68.5957783, 23.3862129 ], [ 68.5949416, 23.3862107 ], [ 68.5949393, 23.3869831 ], [ 68.595776, 23.3869852 ], [ 68.5952159, 23.3877561 ], [ 68.5946585, 23.3876255 ], [ 68.5943803, 23.3873673 ], [ 68.5935436, 23.3873651 ], [ 68.5932644, 23.3874936 ], [ 68.592983, 23.3882651 ], [ 68.5924253, 23.3882636 ], [ 68.5924222, 23.3892934 ], [ 68.5915852, 23.3894195 ], [ 68.590467, 23.3901889 ], [ 68.5899078, 23.3907022 ], [ 68.5894447, 23.3907417 ], [ 68.5896307, 23.3900583 ], [ 68.588794, 23.3900562 ], [ 68.5896335, 23.389157 ], [ 68.5910289, 23.3889031 ], [ 68.5914479, 23.3885185 ], [ 68.5913121, 23.3874885 ], [ 68.5904754, 23.3874862 ], [ 68.5911754, 23.3864584 ], [ 68.5913168, 23.3859438 ], [ 68.5915954, 23.3860729 ], [ 68.5921531, 23.3860742 ], [ 68.5925729, 23.3854322 ], [ 68.5931323, 23.3849188 ], [ 68.5938327, 23.3840192 ], [ 68.5955056, 23.3841526 ], [ 68.5952291, 23.3833796 ], [ 68.5943924, 23.3833775 ], [ 68.5945337, 23.3826055 ], [ 68.5955162, 23.3806769 ], [ 68.5960743, 23.3805501 ], [ 68.5962164, 23.3795206 ], [ 68.5967774, 23.3784923 ], [ 68.5977558, 23.3778508 ], [ 68.599151, 23.377597 ], [ 68.6002657, 23.3778572 ], [ 68.6016604, 23.3777325 ], [ 68.601244, 23.3769591 ], [ 68.6005496, 23.3761851 ], [ 68.5997129, 23.3761829 ], [ 68.5999949, 23.375154 ], [ 68.5991591, 23.3748943 ], [ 68.5995853, 23.3720636 ], [ 68.6001453, 23.3712927 ], [ 68.6009851, 23.3702651 ], [ 68.6018248, 23.3692375 ], [ 68.6019677, 23.3682082 ], [ 68.6025254, 23.3682095 ], [ 68.60309, 23.3658941 ], [ 68.604485, 23.3656403 ], [ 68.6046263, 23.3648682 ], [ 68.6056054, 23.3639693 ], [ 68.6061635, 23.3638423 ], [ 68.6060267, 23.3628123 ], [ 68.6056103, 23.3622963 ], [ 68.6044961, 23.361907 ], [ 68.6031023, 23.3617752 ], [ 68.6029647, 23.3610024 ], [ 68.6035247, 23.3602317 ], [ 68.6034827, 23.3595467 ], [ 68.6036668, 23.3594596 ], [ 68.6036676, 23.3592022 ], [ 68.6033888, 23.3592014 ], [ 68.6032924, 23.3593702 ], [ 68.6019938, 23.3594554 ], [ 68.6022712, 23.359971 ], [ 68.6008766, 23.3600958 ], [ 68.6003173, 23.3606091 ], [ 68.6000382, 23.3607376 ], [ 68.5998951, 23.3617669 ], [ 68.6003113, 23.3626686 ], [ 68.6008685, 23.3627992 ], [ 68.6005857, 23.3640857 ], [ 68.6000282, 23.3640842 ], [ 68.5998796, 23.3669156 ], [ 68.5990386, 23.3684581 ], [ 68.597221, 23.3702555 ], [ 68.5966628, 23.3703823 ], [ 68.5958248, 23.370895 ], [ 68.593588, 23.3728206 ], [ 68.5935848, 23.3738502 ], [ 68.5930267, 23.3739771 ], [ 68.5921886, 23.3744898 ], [ 68.5913504, 23.3750024 ], [ 68.5896729, 23.3764144 ], [ 68.5892493, 23.377958 ], [ 68.5884094, 23.3789854 ], [ 68.5879868, 23.3805289 ], [ 68.587429, 23.3805274 ], [ 68.5872756, 23.3849035 ], [ 68.5868562, 23.3854172 ], [ 68.5862981, 23.3855441 ], [ 68.5854593, 23.3861859 ], [ 68.584756, 23.3879861 ], [ 68.5840569, 23.3887565 ], [ 68.583221, 23.3884968 ], [ 68.5832274, 23.3864375 ], [ 68.5818312, 23.3869485 ], [ 68.5816889, 23.3877204 ], [ 68.5814092, 23.387977 ], [ 68.5812686, 23.3884917 ], [ 68.5801524, 23.3887461 ], [ 68.5787534, 23.3901577 ], [ 68.5781958, 23.3900279 ], [ 68.5790367, 23.3887431 ], [ 68.577921, 23.38874 ], [ 68.5779195, 23.3892549 ], [ 68.5768052, 23.3888653 ], [ 68.5756895, 23.3888623 ], [ 68.5754098, 23.389119 ], [ 68.5748517, 23.3892466 ], [ 68.5747035, 23.3918206 ], [ 68.5741802, 23.3948198 ], [ 68.5737171, 23.3951645 ], [ 68.5734415, 23.3941341 ], [ 68.5712106, 23.3939988 ], [ 68.5703746, 23.3937391 ], [ 68.5695396, 23.3932218 ], [ 68.5689836, 23.3927055 ], [ 68.5681484, 23.3921883 ], [ 68.5667543, 23.3920562 ], [ 68.5663304, 23.3935996 ], [ 68.5657702, 23.3943704 ], [ 68.5659059, 23.3956578 ], [ 68.5666474, 23.3954902 ], [ 68.5671563, 23.3969485 ], [ 68.5671546, 23.3974633 ], [ 68.5670148, 23.3977204 ], [ 68.5681301, 23.3978517 ], [ 68.5686891, 23.3974677 ], [ 68.5685468, 23.3982396 ], [ 68.5691029, 23.3987559 ], [ 68.5695185, 23.3997869 ], [ 68.5720278, 23.4000511 ], [ 68.5717473, 23.4005652 ], [ 68.5695147, 23.4009449 ], [ 68.5689569, 23.4009434 ], [ 68.5686784, 23.4008143 ], [ 68.5686808, 23.4000421 ], [ 68.5678445, 23.3999105 ], [ 68.5675665, 23.3996523 ], [ 68.5670089, 23.3995225 ], [ 68.5672845, 23.4005529 ], [ 68.5667267, 23.4005514 ], [ 68.5665825, 23.4018383 ], [ 68.5663472, 23.4020065 ], [ 68.5661643, 23.4019653 ], [ 68.5656077, 23.4015781 ], [ 68.5658043, 23.4009396 ], [ 68.5658814, 23.4004306 ], [ 68.5660508, 23.4001761 ], [ 68.5656965, 23.4001903 ], [ 68.5654038, 23.3999641 ], [ 68.5649878, 23.4000206 ], [ 68.563217, 23.3896751 ], [ 68.5636834, 23.3895701 ], [ 68.5662045, 23.3896085 ], [ 68.5669035, 23.3889674 ], [ 68.567045, 23.388453 ], [ 68.5695066, 23.3864476 ], [ 68.570885, 23.385059 ], [ 68.5714336, 23.3843646 ], [ 68.5718239, 23.3833214 ], [ 68.5726166, 23.3823835 ], [ 68.5730184, 23.3814912 ], [ 68.5725585, 23.3808457 ], [ 68.5716245, 23.3808976 ], [ 68.5704166, 23.3807391 ], [ 68.5645597, 23.3808512 ], [ 68.5634414, 23.3817495 ], [ 68.5634397, 23.3822643 ], [ 68.5628819, 23.3822628 ], [ 68.5621783, 23.3840629 ], [ 68.5617587, 23.3845766 ], [ 68.5612006, 23.3847034 ], [ 68.5609207, 23.38496 ], [ 68.559845353125013, 23.385946543540243 ], [ 68.5598018, 23.3859865 ], [ 68.558685, 23.38637 ], [ 68.5571376, 23.3902271 ], [ 68.5568579, 23.3904838 ], [ 68.5565663, 23.3943445 ], [ 68.5573987, 23.395634 ], [ 68.5578154, 23.3962783 ], [ 68.5589311, 23.3962815 ], [ 68.5596307, 23.395383 ], [ 68.559645353125006, 23.395329602227534 ], [ 68.559682620438963, 23.395193795595858 ], [ 68.559845353125013, 23.394600777864913 ], [ 68.5599131, 23.3943539 ], [ 68.5600535, 23.3942252 ], [ 68.5606117, 23.3940986 ], [ 68.5604742, 23.3933257 ], [ 68.5610346, 23.392555 ], [ 68.561595, 23.3917843 ], [ 68.5621545, 23.3912711 ], [ 68.5624359, 23.3904994 ], [ 68.5625776, 23.3899568 ], [ 68.5627338, 23.3896824 ], [ 68.5629704, 23.3895665 ], [ 68.5647567, 23.4006569 ], [ 68.5646942, 23.401202 ], [ 68.5640705, 23.4023462 ], [ 68.5632304, 23.4033736 ], [ 68.562949, 23.4041451 ], [ 68.5629447, 23.4054321 ], [ 68.5633603, 23.4064631 ], [ 68.562802, 23.4065898 ], [ 68.5622429, 23.4069748 ], [ 68.5623784, 23.408005 ], [ 68.5633531, 23.4086508 ], [ 68.5644688, 23.4086538 ], [ 68.5661408, 23.4091734 ], [ 68.5664185, 23.4095608 ], [ 68.5641873, 23.4094255 ], [ 68.5625117, 23.4100647 ], [ 68.5619367, 23.4152119 ], [ 68.5613788, 23.4152102 ], [ 68.5615162, 23.4157257 ], [ 68.5606735, 23.4175253 ], [ 68.5602503, 23.4190687 ], [ 68.5596929, 23.4189379 ], [ 68.5594147, 23.4186797 ], [ 68.5580203, 23.4185474 ], [ 68.5580222, 23.4180326 ], [ 68.5574642, 23.4180311 ], [ 68.5574667, 23.4172588 ], [ 68.556629, 23.4175138 ], [ 68.5566273, 23.4180286 ], [ 68.5557912, 23.4177689 ], [ 68.55552, 23.4154512 ], [ 68.555241, 23.4154505 ], [ 68.5552386, 23.4162227 ], [ 68.554681, 23.4160919 ], [ 68.554403, 23.4158338 ], [ 68.5532871, 23.4158305 ], [ 68.5530078, 23.4159589 ], [ 68.5530025, 23.4175036 ], [ 68.5527235, 23.4175026 ], [ 68.5521743, 23.4149267 ], [ 68.5499405, 23.4155635 ], [ 68.5491038, 23.415561 ], [ 68.5489205, 23.4153437 ], [ 68.5491059, 23.4149179 ], [ 68.5482686, 23.4150437 ], [ 68.5468725, 23.4154263 ], [ 68.5465901, 23.4164552 ], [ 68.5460318, 23.4165818 ], [ 68.5449133, 23.4173511 ], [ 68.5437961, 23.4177343 ], [ 68.5432293, 23.420307 ], [ 68.5418354, 23.4200454 ], [ 68.5418373, 23.4195306 ], [ 68.5410012, 23.4192707 ], [ 68.5410031, 23.4187559 ], [ 68.5404452, 23.4187542 ], [ 68.5409978, 23.4203004 ], [ 68.5426693, 23.4209485 ], [ 68.5435056, 23.42108 ], [ 68.5433641, 23.4215945 ], [ 68.5435036, 23.4217232 ], [ 68.5440615, 23.4217249 ], [ 68.5443412, 23.4214682 ], [ 68.5448991, 23.4214699 ], [ 68.5451777, 23.4215998 ], [ 68.5451794, 23.4210849 ], [ 68.5462962, 23.4208307 ], [ 68.5462945, 23.4213456 ], [ 68.545736, 23.4214724 ], [ 68.5454563, 23.4217289 ], [ 68.5446188, 23.4218557 ], [ 68.5446181, 23.4221131 ], [ 68.5479664, 23.4218653 ], [ 68.5476858, 23.4223794 ], [ 68.5468485, 23.4225053 ], [ 68.5462892, 23.4228903 ], [ 68.5464264, 23.4234055 ], [ 68.5469817, 23.4241794 ], [ 68.5468366, 23.425981 ], [ 68.5473945, 23.4259827 ], [ 68.5471121, 23.4270116 ], [ 68.5465536, 23.4271382 ], [ 68.545715, 23.4276506 ], [ 68.5437617, 23.4277742 ], [ 68.5437627, 23.4275166 ], [ 68.544321, 23.4273892 ], [ 68.5450201, 23.4267481 ], [ 68.5450316, 23.4234015 ], [ 68.5448935, 23.4231435 ], [ 68.5429403, 23.4232662 ], [ 68.5418218, 23.4240352 ], [ 68.5412633, 23.4241628 ], [ 68.5405593, 23.4259626 ], [ 68.5399986, 23.4267334 ], [ 68.5388774, 23.4282747 ], [ 68.5381777, 23.4290449 ], [ 68.5376198, 23.4290432 ], [ 68.5374781, 23.4295576 ], [ 68.5369182, 23.4300709 ], [ 68.5366366, 23.4308422 ], [ 68.5357969, 23.4316122 ], [ 68.5350955, 23.4328972 ], [ 68.5345374, 23.4328955 ], [ 68.5346756, 23.4331533 ], [ 68.5346729, 23.4339258 ], [ 68.5349927, 23.4348679 ], [ 68.5345308, 23.4348258 ], [ 68.5342513, 23.4349541 ], [ 68.5341076, 23.4359834 ], [ 68.5332598, 23.4390702 ], [ 68.5326992, 23.4398407 ], [ 68.5321358, 23.4413837 ], [ 68.5312959, 23.4421535 ], [ 68.5307334, 23.4434389 ], [ 68.530448, 23.4452401 ], [ 68.530726, 23.4454984 ], [ 68.5309997, 23.4470437 ], [ 68.5319736, 23.4479473 ], [ 68.5325306, 23.4482064 ], [ 68.5332256, 23.4488524 ], [ 68.5333618, 23.4498827 ], [ 68.5336414, 23.4497543 ], [ 68.5344784, 23.4497568 ], [ 68.5353146, 23.4500167 ], [ 68.5357304, 23.4506619 ], [ 68.5364263, 23.4513072 ], [ 68.5369838, 23.451438 ], [ 68.5369829, 23.4516954 ], [ 68.5361448, 23.4519503 ], [ 68.5358632, 23.4527218 ], [ 68.5353051, 23.4527201 ], [ 68.5354423, 23.4532355 ], [ 68.53586, 23.4536224 ], [ 68.5372526, 23.4543988 ], [ 68.5380887, 23.4546587 ], [ 68.5383664, 23.4550462 ], [ 68.5355775, 23.4546513 ], [ 68.5350211, 23.4541348 ], [ 68.5344635, 23.4540048 ], [ 68.5341881, 23.4529743 ], [ 68.5333492, 23.4534867 ], [ 68.5336264, 23.4540023 ], [ 68.5322312, 23.4539982 ], [ 68.5322295, 23.454513 ], [ 68.5316714, 23.4545113 ], [ 68.5316695, 23.4550261 ], [ 68.5308321, 23.455152 ], [ 68.5299935, 23.455536 ], [ 68.5305616, 23.452706 ], [ 68.5311201, 23.4525786 ], [ 68.5318213, 23.4514226 ], [ 68.5318258, 23.4501354 ], [ 68.5311352, 23.4483314 ], [ 68.5300186, 23.4484563 ], [ 68.5289012, 23.4488396 ], [ 68.5287576, 23.4498689 ], [ 68.5284767, 23.4503828 ], [ 68.5272169, 23.4516661 ], [ 68.5266584, 23.4517927 ], [ 68.5255401, 23.4524334 ], [ 68.5256782, 23.4526912 ], [ 68.5256763, 23.4532061 ], [ 68.5259534, 23.4537218 ], [ 68.525668, 23.455523 ], [ 68.5253881, 23.4557795 ], [ 68.5252463, 23.4565514 ], [ 68.5246877, 23.456678 ], [ 68.5227285, 23.4583457 ], [ 68.522163, 23.4604035 ], [ 68.5204877, 23.4606557 ], [ 68.5202023, 23.4624568 ], [ 68.5193641, 23.4627118 ], [ 68.5190804, 23.463998 ], [ 68.5185232, 23.4637388 ], [ 68.5180995, 23.4650248 ], [ 68.5180948, 23.4663119 ], [ 68.5186512, 23.4668284 ], [ 68.5186484, 23.4676007 ], [ 68.5187878, 23.4677294 ], [ 68.5207408, 23.4678647 ], [ 68.5207398, 23.4681221 ], [ 68.5179489, 23.4682418 ], [ 68.5176703, 23.4681127 ], [ 68.5169589, 23.4717144 ], [ 68.516678, 23.4722283 ], [ 68.5166761, 23.4727434 ], [ 68.5168152, 23.4730012 ], [ 68.5162571, 23.4729995 ], [ 68.5161142, 23.4737713 ], [ 68.5158341, 23.4740278 ], [ 68.5152713, 23.4753132 ], [ 68.5142895, 23.4768547 ], [ 68.5131727, 23.4769796 ], [ 68.5128941, 23.4768503 ], [ 68.5131761, 23.476079 ], [ 68.5123397, 23.475819 ], [ 68.5124834, 23.4745322 ], [ 68.5133244, 23.4735052 ], [ 68.5133348, 23.4706734 ], [ 68.5127786, 23.4701569 ], [ 68.5127824, 23.469127 ], [ 68.5133433, 23.4683567 ], [ 68.513348, 23.4670694 ], [ 68.5132099, 23.4668116 ], [ 68.5120933, 23.4669363 ], [ 68.5112541, 23.4674485 ], [ 68.5092946, 23.4691163 ], [ 68.5088718, 23.4701446 ], [ 68.5092813, 23.4727201 ], [ 68.5098394, 23.472722 ], [ 68.5099755, 23.4734946 ], [ 68.5098357, 23.4737517 ], [ 68.5084407, 23.4736181 ], [ 68.5078841, 23.4732306 ], [ 68.5077468, 23.472458 ], [ 68.5074688, 23.4721996 ], [ 68.5073316, 23.4716844 ], [ 68.5050986, 23.4718055 ], [ 68.5031403, 23.4730864 ], [ 68.5025817, 23.4732138 ], [ 68.5024397, 23.4737282 ], [ 68.5020196, 23.4742418 ], [ 68.5011815, 23.4744965 ], [ 68.5010394, 23.475011 ], [ 68.5004785, 23.4757813 ], [ 68.4998863, 23.4847897 ], [ 68.4996062, 23.4850461 ], [ 68.4996004, 23.4865906 ], [ 68.5002889, 23.4891673 ], [ 68.5016841, 23.4892999 ], [ 68.5019636, 23.4891726 ], [ 68.5019597, 23.4902022 ], [ 68.5025183, 23.4900748 ], [ 68.5030782, 23.489691 ], [ 68.5029351, 23.4904629 ], [ 68.5025151, 23.4909764 ], [ 68.5019568, 23.4909745 ], [ 68.5019559, 23.4912319 ], [ 68.5033499, 23.4916222 ], [ 68.5069774, 23.4918911 ], [ 68.5079563, 23.491251 ], [ 68.5080982, 23.4907365 ], [ 68.5086563, 23.4907384 ], [ 68.5096423, 23.4881673 ], [ 68.5099224, 23.4879106 ], [ 68.5102042, 23.4871393 ], [ 68.511465, 23.4859843 ], [ 68.5120237, 23.4858577 ], [ 68.5120266, 23.4850854 ], [ 68.5142583, 23.4853498 ], [ 68.513703, 23.4845759 ], [ 68.5142607, 23.4847059 ], [ 68.5146765, 23.4853512 ], [ 68.5153734, 23.485739 ], [ 68.5164892, 23.4858717 ], [ 68.5166264, 23.4863869 ], [ 68.5167659, 23.4865156 ], [ 68.5173242, 23.4865175 ], [ 68.5176038, 23.4863899 ], [ 68.5180182, 23.4874211 ], [ 68.5185735, 23.4881951 ], [ 68.5186986, 23.4923143 ], [ 68.5181405, 23.4923126 ], [ 68.5182813, 23.4917982 ], [ 68.5181554, 23.4881937 ], [ 68.5175977, 23.4880628 ], [ 68.5170413, 23.4875462 ], [ 68.5156487, 23.4867696 ], [ 68.5148122, 23.4865096 ], [ 68.5123004, 23.4865018 ], [ 68.5114607, 23.4871431 ], [ 68.5113169, 23.4881724 ], [ 68.5110368, 23.488429 ], [ 68.5108941, 23.4894583 ], [ 68.511356, 23.4895473 ], [ 68.5114512, 23.4897174 ], [ 68.510613, 23.4899722 ], [ 68.5101891, 23.491258 ], [ 68.5090689, 23.4922843 ], [ 68.5089279, 23.4927987 ], [ 68.5069718, 23.4934356 ], [ 68.5047374, 23.4938152 ], [ 68.5047353, 23.49433 ], [ 68.5036204, 23.4939399 ], [ 68.5033422, 23.4936815 ], [ 68.503063, 23.4936806 ], [ 68.502504, 23.4939363 ], [ 68.5005501, 23.4939301 ], [ 68.5002721, 23.4936717 ], [ 68.4994346, 23.4936691 ], [ 68.4983157, 23.4943094 ], [ 68.4987261, 23.4963702 ], [ 68.4992815, 23.4971442 ], [ 68.4995943, 23.4998885 ], [ 68.4994108, 23.4999764 ], [ 68.4994089, 23.5004912 ], [ 68.5002458, 23.5006222 ], [ 68.5012246, 23.4999822 ], [ 68.5013666, 23.4994678 ], [ 68.5016454, 23.499597 ], [ 68.5022035, 23.4995987 ], [ 68.5027633, 23.4992149 ], [ 68.5026202, 23.4999868 ], [ 68.5027599, 23.5001155 ], [ 68.5044342, 23.5002499 ], [ 68.504153, 23.5007639 ], [ 68.5024779, 23.5008868 ], [ 68.5008011, 23.5013963 ], [ 68.500521, 23.5016528 ], [ 68.4996832, 23.5017792 ], [ 68.4994, 23.5028082 ], [ 68.4988419, 23.5028063 ], [ 68.4989789, 23.5033217 ], [ 68.4981386, 23.5040913 ], [ 68.4970152, 23.5058896 ], [ 68.4967302, 23.5074334 ], [ 68.4958869, 23.508975 ], [ 68.4956019, 23.5105188 ], [ 68.4953218, 23.5107753 ], [ 68.4948996, 23.5118036 ], [ 68.4957382, 23.511549 ], [ 68.495456, 23.5123203 ], [ 68.4948977, 23.5123184 ], [ 68.4948958, 23.5128333 ], [ 68.4954535, 23.5129635 ], [ 68.4955921, 23.513093 ], [ 68.495308, 23.5143793 ], [ 68.4947469, 23.5151497 ], [ 68.4938848, 23.5215827 ], [ 68.4941619, 23.5220984 ], [ 68.4938661, 23.5264738 ], [ 68.4934458, 23.5269873 ], [ 68.4928869, 23.5271137 ], [ 68.4920464, 23.5278832 ], [ 68.4912074, 23.528267 ], [ 68.4912044, 23.5290395 ], [ 68.4906459, 23.5290376 ], [ 68.4907831, 23.5295528 ], [ 68.4906361, 23.5316118 ], [ 68.4897975, 23.5318665 ], [ 68.4896554, 23.5323808 ], [ 68.4893753, 23.5326375 ], [ 68.4893713, 23.5336671 ], [ 68.4895104, 23.5339249 ], [ 68.4889519, 23.5339232 ], [ 68.4890852, 23.5354681 ], [ 68.4899158, 23.5372729 ], [ 68.490194, 23.5375312 ], [ 68.490187, 23.5393332 ], [ 68.4899049, 23.5401047 ], [ 68.4890623, 23.5413889 ], [ 68.4885008, 23.5421595 ], [ 68.4879404, 23.5426724 ], [ 68.4868166, 23.5444707 ], [ 68.4856926, 23.5462689 ], [ 68.4858308, 23.5467843 ], [ 68.4852723, 23.5467824 ], [ 68.4851283, 23.5478117 ], [ 68.4847058, 23.5488401 ], [ 68.4897325, 23.5487274 ], [ 68.490288, 23.5495016 ], [ 68.4908465, 23.5495033 ], [ 68.4918268, 23.5486061 ], [ 68.4919687, 23.5480916 ], [ 68.4925278, 23.5479642 ], [ 68.4936476, 23.5471956 ], [ 68.4947646, 23.5471993 ], [ 68.4950428, 23.5474575 ], [ 68.4956008, 23.5475885 ], [ 68.4957368, 23.5483613 ], [ 68.4961553, 23.5486201 ], [ 68.4961592, 23.5475904 ], [ 68.4967176, 23.5475923 ], [ 68.4967117, 23.5491368 ], [ 68.4961534, 23.5491349 ], [ 68.4960527, 23.5503332 ], [ 68.4947546, 23.5497735 ], [ 68.4941982, 23.5492568 ], [ 68.4928026, 23.5491241 ], [ 68.4928015, 23.5493815 ], [ 68.4933596, 23.5495116 ], [ 68.4940545, 23.5501578 ], [ 68.4941868, 23.5522177 ], [ 68.4933492, 23.552215 ], [ 68.4934853, 23.5529877 ], [ 68.4943201, 23.5537627 ], [ 68.4943171, 23.554535 ], [ 68.4945915, 23.555823 ], [ 68.4938899, 23.5568504 ], [ 68.4936106, 23.5568495 ], [ 68.4940339, 23.5555637 ], [ 68.4940358, 23.5550489 ], [ 68.4938979, 23.5547911 ], [ 68.4936185, 23.5547901 ], [ 68.4933343, 23.5560763 ], [ 68.4924966, 23.5560736 ], [ 68.4922203, 23.5553004 ], [ 68.4913817, 23.555555 ], [ 68.4915119, 23.5578724 ], [ 68.4912316, 23.5581288 ], [ 68.4908092, 23.5591572 ], [ 68.4922056, 23.5591617 ], [ 68.4920644, 23.5594188 ], [ 68.4920604, 23.5604484 ], [ 68.4923367, 23.5612216 ], [ 68.4931715, 23.5619967 ], [ 68.4934469, 23.5630273 ], [ 68.4928725, 23.5671441 ], [ 68.4925675, 23.5738364 ], [ 68.4922853, 23.5746077 ], [ 68.4917247, 23.5751207 ], [ 68.4903174, 23.5779478 ], [ 68.4900302, 23.5800063 ], [ 68.4904426, 23.5818096 ], [ 68.4910013, 23.5818115 ], [ 68.4911364, 23.5828417 ], [ 68.4914148, 23.5830999 ], [ 68.4918242, 23.5856756 ], [ 68.4943345, 23.5865843 ], [ 68.4951706, 23.587102 ], [ 68.4958659, 23.5877482 ], [ 68.4966998, 23.5887807 ], [ 68.4969752, 23.5898111 ], [ 68.497532, 23.5903278 ], [ 68.4975743, 23.5907544 ], [ 68.4973913, 23.590713 ], [ 68.4965558, 23.5900672 ], [ 68.4964176, 23.589552 ], [ 68.495861, 23.5890352 ], [ 68.4957238, 23.58852 ], [ 68.4948858, 23.5885172 ], [ 68.4947476, 23.588002 ], [ 68.4940538, 23.58697 ], [ 68.4929376, 23.5867088 ], [ 68.4936323, 23.5874836 ], [ 68.4937705, 23.5879988 ], [ 68.4920946, 23.5879933 ], [ 68.4920956, 23.5877359 ], [ 68.4929336, 23.5877387 ], [ 68.4926573, 23.5869655 ], [ 68.4912606, 23.5869608 ], [ 68.4912587, 23.5874758 ], [ 68.4907, 23.5874739 ], [ 68.4911165, 23.5879901 ], [ 68.4912547, 23.5885055 ], [ 68.4918128, 23.5886355 ], [ 68.4919515, 23.5887652 ], [ 68.4920897, 23.5892804 ], [ 68.491531, 23.5892787 ], [ 68.4918073, 23.5900517 ], [ 68.4922269, 23.5897958 ], [ 68.49237, 23.5890239 ], [ 68.4927875, 23.5892826 ], [ 68.4929256, 23.5897981 ], [ 68.4937631, 23.589929 ], [ 68.4941791, 23.5905745 ], [ 68.4941632, 23.5946932 ], [ 68.4949984, 23.5954682 ], [ 68.4949973, 23.5957257 ], [ 68.494716, 23.5962396 ], [ 68.4944288, 23.5982979 ], [ 68.4945684, 23.5984267 ], [ 68.4951267, 23.5985576 ], [ 68.495264, 23.599073 ], [ 68.4955422, 23.5993314 ], [ 68.4954012, 23.5998457 ], [ 68.4942827, 23.6000995 ], [ 68.4934299, 23.6039581 ], [ 68.4925928, 23.6036981 ], [ 68.4930094, 23.6042142 ], [ 68.4935592, 23.6065329 ], [ 68.4938376, 23.6067912 ], [ 68.4939757, 23.6073064 ], [ 68.4945344, 23.6073083 ], [ 68.4943953, 23.6070504 ], [ 68.4943981, 23.6062781 ], [ 68.4950986, 23.6058939 ], [ 68.4959366, 23.6058965 ], [ 68.4964943, 23.6061558 ], [ 68.4992874, 23.606294 ], [ 68.4994227, 23.607324 ], [ 68.5003985, 23.6079704 ], [ 68.5009551, 23.6084869 ], [ 68.5029101, 23.6086225 ], [ 68.5029092, 23.6088799 ], [ 68.5017909, 23.6091337 ], [ 68.5017888, 23.6096485 ], [ 68.5006705, 23.6099024 ], [ 68.5008086, 23.6101603 ], [ 68.5008068, 23.6106752 ], [ 68.5010842, 23.6111908 ], [ 68.5010774, 23.6129929 ], [ 68.5013558, 23.6132511 ], [ 68.501494, 23.6137665 ], [ 68.5041902, 23.6141201 ], [ 68.5037211, 23.615833 ], [ 68.5031625, 23.6158313 ], [ 68.5035771, 23.6168623 ], [ 68.5044114, 23.6178946 ], [ 68.504551, 23.6180233 ], [ 68.5065066, 23.6180295 ], [ 68.5067865, 23.6179022 ], [ 68.5065013, 23.6194457 ], [ 68.5076174, 23.6198351 ], [ 68.5084537, 23.6203525 ], [ 68.508733, 23.6203535 ], [ 68.5090133, 23.6200968 ], [ 68.5098519, 23.6199713 ], [ 68.5094305, 23.6204848 ], [ 68.5094295, 23.6207423 ], [ 68.5095692, 23.620871 ], [ 68.5106864, 23.6210037 ], [ 68.5109629, 23.6217769 ], [ 68.507891, 23.6213805 ], [ 68.506771, 23.6220209 ], [ 68.5074584, 23.6248549 ], [ 68.5077302, 23.626915 ], [ 68.5071657, 23.6284578 ], [ 68.5073029, 23.6292306 ], [ 68.5078618, 23.6292323 ], [ 68.5078646, 23.6284601 ], [ 68.5082823, 23.6287188 ], [ 68.5084167, 23.6302637 ], [ 68.5075775, 23.6305185 ], [ 68.5077138, 23.6312913 ], [ 68.5082689, 23.6323227 ], [ 68.5082649, 23.6333523 ], [ 68.5088181, 23.6348987 ], [ 68.5090965, 23.6351571 ], [ 68.5092346, 23.6356723 ], [ 68.5105344, 23.6360214 ], [ 68.5109113, 23.6356776 ], [ 68.5114749, 23.6343922 ], [ 68.5118944, 23.6341361 ], [ 68.5124609, 23.6320785 ], [ 68.5124665, 23.630534 ], [ 68.5130273, 23.6300208 ], [ 68.5134503, 23.6291208 ], [ 68.5184822, 23.6283643 ], [ 68.5207198, 23.6277281 ], [ 68.520572, 23.6297871 ], [ 68.5202917, 23.6300435 ], [ 68.5198684, 23.6313293 ], [ 68.5162358, 23.6314463 ], [ 68.515676, 23.631702 ], [ 68.5148353, 23.6323435 ], [ 68.5146884, 23.634145 ], [ 68.5145484, 23.6344019 ], [ 68.5134316, 23.634141 ], [ 68.5134356, 23.6331114 ], [ 68.512315, 23.63388 ], [ 68.5121728, 23.6343945 ], [ 68.5117523, 23.634908 ], [ 68.5111897, 23.635936 ], [ 68.5106436, 23.6362967 ], [ 68.5092318, 23.6364446 ], [ 68.5090859, 23.6379887 ], [ 68.5096399, 23.6392775 ], [ 68.5094958, 23.6405642 ], [ 68.5100547, 23.6405661 ], [ 68.5100566, 23.6400513 ], [ 68.5103361, 23.640052 ], [ 68.5104734, 23.6405674 ], [ 68.5110303, 23.641084 ], [ 68.5124189, 23.6434051 ], [ 68.5128372, 23.6437921 ], [ 68.5139534, 23.6441822 ], [ 68.5138151, 23.643667 ], [ 68.5132581, 23.6431503 ], [ 68.5131218, 23.6423777 ], [ 68.5125629, 23.642376 ], [ 68.5129835, 23.6418624 ], [ 68.5131256, 23.641348 ], [ 68.5122874, 23.6413453 ], [ 68.5124303, 23.6403161 ], [ 68.5128514, 23.6399309 ], [ 68.5134108, 23.6398042 ], [ 68.5132724, 23.639289 ], [ 68.512994, 23.6390307 ], [ 68.5125792, 23.6379997 ], [ 68.5139738, 23.6386472 ], [ 68.5150925, 23.6383934 ], [ 68.5155125, 23.6380089 ], [ 68.5156546, 23.6374945 ], [ 68.5162135, 23.6374962 ], [ 68.5162163, 23.6367239 ], [ 68.5170545, 23.6367266 ], [ 68.5170564, 23.6362117 ], [ 68.5209687, 23.6360947 ], [ 68.5218079, 23.6358398 ], [ 68.5243227, 23.6358475 ], [ 68.5246007, 23.636235 ], [ 68.5218056, 23.6364839 ], [ 68.5218037, 23.6369987 ], [ 68.5228258, 23.636832 ], [ 68.522641, 23.6372588 ], [ 68.5220821, 23.6372571 ], [ 68.5222195, 23.6377723 ], [ 68.5226372, 23.6382885 ], [ 68.522078, 23.6384149 ], [ 68.5215178, 23.6387999 ], [ 68.5216514, 23.6403448 ], [ 68.5220696, 23.6407319 ], [ 68.5231868, 23.6408643 ], [ 68.523184, 23.6416366 ], [ 68.5237425, 23.6417666 ], [ 68.5240209, 23.642025 ], [ 68.5262541, 23.6426757 ], [ 68.5259717, 23.6434472 ], [ 68.5254134, 23.6433162 ], [ 68.5251348, 23.6430581 ], [ 68.5226232, 23.6421497 ], [ 68.5226251, 23.6416349 ], [ 68.5212271, 23.641888 ], [ 68.5220541, 23.6449796 ], [ 68.5212169, 23.6447198 ], [ 68.5212186, 23.6442049 ], [ 68.5198186, 23.6449728 ], [ 68.5198158, 23.6457451 ], [ 68.5209332, 23.6458768 ], [ 68.5210719, 23.6460065 ], [ 68.5212103, 23.6465217 ], [ 68.5228869, 23.6465268 ], [ 68.5228859, 23.6467842 ], [ 68.5217682, 23.6467808 ], [ 68.5217653, 23.6475531 ], [ 68.5195308, 23.6472888 ], [ 68.5199475, 23.6478048 ], [ 68.5202233, 23.6488354 ], [ 68.5205017, 23.6490938 ], [ 68.5207784, 23.6498668 ], [ 68.5214752, 23.650512 ], [ 68.5231503, 23.6509038 ], [ 68.5232877, 23.6514192 ], [ 68.5234276, 23.6515478 ], [ 68.5270594, 23.6518163 ], [ 68.5281745, 23.652592 ], [ 68.5301278, 23.6533703 ], [ 68.5304064, 23.6536285 ], [ 68.5315242, 23.6536319 ], [ 68.5318028, 23.6538902 ], [ 68.5323613, 23.654021 ], [ 68.532363, 23.6535062 ], [ 68.5339434, 23.6535986 ], [ 68.5340388, 23.6537687 ], [ 68.5345977, 23.6537704 ], [ 68.534596, 23.6542852 ], [ 68.5348753, 23.654286 ], [ 68.5348791, 23.6532563 ], [ 68.5356209, 23.6533461 ], [ 68.5354351, 23.6540303 ], [ 68.5362739, 23.6539036 ], [ 68.5376672, 23.6550667 ], [ 68.5371137, 23.6535205 ], [ 68.5358128, 23.6531707 ], [ 68.5355799, 23.6524861 ], [ 68.534606, 23.6514534 ], [ 68.5340471, 23.6514519 ], [ 68.5340488, 23.6509371 ], [ 68.5354461, 23.6509413 ], [ 68.5355826, 23.6517139 ], [ 68.536001, 23.6521008 ], [ 68.5373968, 23.6524916 ], [ 68.5373941, 23.6532639 ], [ 68.537953, 23.6532656 ], [ 68.5380887, 23.6542956 ], [ 68.5383664, 23.6548114 ], [ 68.5390632, 23.6554565 ], [ 68.539901, 23.6555882 ], [ 68.539627, 23.6540427 ], [ 68.5401859, 23.6540444 ], [ 68.5403206, 23.6553319 ], [ 68.5405992, 23.6555903 ], [ 68.5403144, 23.657134 ], [ 68.540451, 23.6581641 ], [ 68.5421282, 23.6580399 ], [ 68.5435247, 23.6583015 ], [ 68.543805, 23.6580448 ], [ 68.5460398, 23.6583089 ], [ 68.5467358, 23.6589549 ], [ 68.5474317, 23.6598573 ], [ 68.5479908, 23.659859 ], [ 68.5481295, 23.6599887 ], [ 68.5486831, 23.6615347 ], [ 68.5491016, 23.6619218 ], [ 68.5496604, 23.6619233 ], [ 68.5503548, 23.6630841 ], [ 68.5504932, 23.6635995 ], [ 68.5510517, 23.6637294 ], [ 68.5513302, 23.6639875 ], [ 68.5521683, 23.6641191 ], [ 68.551887, 23.6646332 ], [ 68.5513282, 23.6646317 ], [ 68.5514656, 23.6651469 ], [ 68.5520227, 23.6656632 ], [ 68.552021, 23.6661781 ], [ 68.5518814, 23.666306 ], [ 68.5523435, 23.6665241 ], [ 68.5522962, 23.6674661 ], [ 68.5524359, 23.6675948 ], [ 68.5532745, 23.6675971 ], [ 68.5534132, 23.6677267 ], [ 68.5535491, 23.6690142 ], [ 68.5541076, 23.669144 ], [ 68.5542465, 23.6692737 ], [ 68.5547875, 23.670607366081121 ], [ 68.5548727, 23.6708174 ], [ 68.5545875, 23.670885348612234 ], [ 68.5532622, 23.6712011 ], [ 68.5479473, 23.6724727 ], [ 68.5445943, 23.6722055 ], [ 68.5392911, 23.6701304 ], [ 68.5381738, 23.6699989 ], [ 68.5381719, 23.6705137 ], [ 68.5378923, 23.670513 ], [ 68.5378942, 23.6699981 ], [ 68.536775, 23.6703805 ], [ 68.5350984, 23.670247 ], [ 68.5350967, 23.6707619 ], [ 68.5345376, 23.6707602 ], [ 68.5339723, 23.6725606 ], [ 68.5311758, 23.6729378 ], [ 68.5306151, 23.673451 ], [ 68.5292182, 23.6733185 ], [ 68.5294958, 23.6738341 ], [ 68.5286572, 23.6738316 ], [ 68.5289479, 23.6707434 ], [ 68.5295074, 23.670616 ], [ 68.529647, 23.670488 ], [ 68.5296489, 23.6699732 ], [ 68.5295106, 23.6697154 ], [ 68.5289515, 23.6697137 ], [ 68.5292324, 23.6693279 ], [ 68.5306298, 23.6693323 ], [ 68.53105, 23.6689479 ], [ 68.5310555, 23.6674032 ], [ 68.5309171, 23.6671454 ], [ 68.5314756, 23.6672754 ], [ 68.5323114, 23.6680501 ], [ 68.5328699, 23.6681811 ], [ 68.532868, 23.6686959 ], [ 68.5342658, 23.6685708 ], [ 68.5344057, 23.668443 ], [ 68.5342681, 23.6679278 ], [ 68.5351067, 23.6679303 ], [ 68.5352422, 23.6689603 ], [ 68.535661, 23.6692191 ], [ 68.5356655, 23.667932 ], [ 68.5362246, 23.6679337 ], [ 68.536087, 23.667161 ], [ 68.5355298, 23.6666445 ], [ 68.5355336, 23.6656146 ], [ 68.5353953, 23.6653569 ], [ 68.5351157, 23.6653561 ], [ 68.5351129, 23.6661283 ], [ 68.533717, 23.6657375 ], [ 68.5334384, 23.6654793 ], [ 68.5323219, 23.6650902 ], [ 68.5321834, 23.664575 ], [ 68.5323265, 23.6638031 ], [ 68.5317674, 23.6638014 ], [ 68.5317703, 23.6630291 ], [ 68.5328886, 23.6629034 ], [ 68.5337289, 23.6623911 ], [ 68.5341488, 23.6620066 ], [ 68.5340114, 23.6614914 ], [ 68.5317725, 23.6623852 ], [ 68.5298152, 23.6626366 ], [ 68.5281399, 23.6622459 ], [ 68.5281416, 23.6617311 ], [ 68.5264663, 23.6613393 ], [ 68.5253516, 23.6604353 ], [ 68.5253535, 23.6599205 ], [ 68.5247946, 23.6599188 ], [ 68.5252161, 23.6591478 ], [ 68.5253609, 23.6578611 ], [ 68.5248024, 23.6577303 ], [ 68.524524, 23.657472 ], [ 68.5234076, 23.6570828 ], [ 68.5236897, 23.6563115 ], [ 68.522572, 23.6563081 ], [ 68.5228551, 23.6552792 ], [ 68.5245323, 23.6551552 ], [ 68.524672, 23.6550274 ], [ 68.5246739, 23.6545126 ], [ 68.5242588, 23.6534816 ], [ 68.5237005, 23.6533506 ], [ 68.5234219, 23.6530925 ], [ 68.5214654, 23.6532155 ], [ 68.5210409, 23.6545013 ], [ 68.5210381, 23.6552735 ], [ 68.520755, 23.6563024 ], [ 68.5207531, 23.6568173 ], [ 68.520469, 23.6581036 ], [ 68.5210241, 23.659135 ], [ 68.5218597, 23.6599099 ], [ 68.521998, 23.6604251 ], [ 68.5225569, 23.6604268 ], [ 68.5226943, 23.660942 ], [ 68.5231127, 23.6613291 ], [ 68.523671, 23.6614599 ], [ 68.5243628, 23.6632641 ], [ 68.5249041, 23.6681567 ], [ 68.5262792, 23.6743393 ], [ 68.5263237, 23.6751744 ], [ 68.5259464, 23.6750691 ], [ 68.5253982, 23.6751919 ], [ 68.5257961, 23.6752956 ], [ 68.526238, 23.6771214 ], [ 68.5268509, 23.6809525 ], [ 68.5276313, 23.6869571 ], [ 68.5272721, 23.6873507 ], [ 68.5271932, 23.6877056 ], [ 68.5274369, 23.687972 ], [ 68.5261646, 23.6890903 ], [ 68.5256571, 23.689307 ], [ 68.5255825, 23.6891934 ], [ 68.5247887, 23.6895451 ], [ 68.5249764, 23.6898905 ], [ 68.5255309, 23.6896761 ], [ 68.5266455, 23.6891417 ], [ 68.5270302, 23.6888771 ], [ 68.5273017, 23.6885884 ], [ 68.5278419, 23.688307 ], [ 68.5302832, 23.6881232 ], [ 68.5325166, 23.6889023 ], [ 68.5327952, 23.6891605 ], [ 68.5330747, 23.6891612 ], [ 68.5336357, 23.6886481 ], [ 68.5355924, 23.6886539 ], [ 68.5369882, 23.6891731 ], [ 68.5381067, 23.6890482 ], [ 68.5381086, 23.6885334 ], [ 68.5378286, 23.6886607 ], [ 68.5369901, 23.6886583 ], [ 68.5355941, 23.6881391 ], [ 68.5339175, 23.6880059 ], [ 68.5340577, 23.6877488 ], [ 68.5340604, 23.6869766 ], [ 68.5342015, 23.6867195 ], [ 68.533362, 23.6869745 ], [ 68.5333603, 23.6874893 ], [ 68.5314045, 23.687226 ], [ 68.5315455, 23.6867116 ], [ 68.531826, 23.6864551 ], [ 68.5322496, 23.6854266 ], [ 68.5328084, 23.6854283 ], [ 68.5329496, 23.6849138 ], [ 68.5336508, 23.6844011 ], [ 68.5333665, 23.6856874 ], [ 68.5339262, 23.68556 ], [ 68.5344866, 23.685176 ], [ 68.533923, 23.6864613 ], [ 68.5344824, 23.686334 ], [ 68.5346223, 23.686206 ], [ 68.5347642, 23.6856915 ], [ 68.5356034, 23.6855649 ], [ 68.5397939, 23.6862215 ], [ 68.5402163, 23.685193 ], [ 68.5403611, 23.6839063 ], [ 68.5413268, 23.6837212 ], [ 68.5415734, 23.6865955 ], [ 68.545007, 23.6893505 ], [ 68.5480923, 23.6936839 ], [ 68.5484009, 23.6970624 ], [ 68.5486935, 23.6993763 ], [ 68.5496582, 23.7032406 ], [ 68.5543731, 23.7143233 ], [ 68.5545875, 23.714681327483977 ], [ 68.555763, 23.7166443 ], [ 68.5563206, 23.7171606 ], [ 68.5579895, 23.7197397 ], [ 68.5586867, 23.7203848 ], [ 68.559845353125013, 23.720654984783124 ], [ 68.5609218, 23.720906 ], [ 68.5623198, 23.72091 ], [ 68.5648345, 23.721432 ], [ 68.5656716, 23.7219491 ], [ 68.5718159, 23.7240257 ], [ 68.5732144, 23.7239013 ], [ 68.5732153, 23.7236439 ], [ 68.5726564, 23.7235131 ], [ 68.5723777, 23.7232549 ], [ 68.5712593, 23.7232519 ], [ 68.5709802, 23.7231228 ], [ 68.5712622, 23.7223513 ], [ 68.5695856, 23.7220892 ], [ 68.5696812, 23.7219196 ], [ 68.5721032, 23.7217097 ], [ 68.5737795, 23.7221009 ], [ 68.5737829, 23.7210712 ], [ 68.5735028, 23.7211986 ], [ 68.572664, 23.7211963 ], [ 68.5723852, 23.7209382 ], [ 68.5687509, 23.7207998 ], [ 68.5687517, 23.7205424 ], [ 68.571269, 23.720292 ], [ 68.5715519, 23.7192631 ], [ 68.5707128, 23.7193889 ], [ 68.5701541, 23.7192591 ], [ 68.5707152, 23.7186167 ], [ 68.571554, 23.7186189 ], [ 68.5718328, 23.7188773 ], [ 68.5729507, 23.7190094 ], [ 68.5730917, 23.718495 ], [ 68.5733722, 23.7182383 ], [ 68.5733756, 23.7172086 ], [ 68.5728188, 23.7164349 ], [ 68.5724017, 23.7159189 ], [ 68.5715633, 23.7157873 ], [ 68.5712845, 23.7155292 ], [ 68.5704453, 23.715656 ], [ 68.5707283, 23.7146271 ], [ 68.5710076, 23.7147562 ], [ 68.5715667, 23.7147577 ], [ 68.572268, 23.7138592 ], [ 68.5722697, 23.7133443 ], [ 68.5717131, 23.7125704 ], [ 68.5717199, 23.710511 ], [ 68.5720029, 23.7094821 ], [ 68.5721435, 23.7093534 ], [ 68.5732626, 23.709099 ], [ 68.573543, 23.7088423 ], [ 68.5752204, 23.7088471 ], [ 68.5757787, 23.709106 ], [ 68.576338, 23.7091075 ], [ 68.5766188, 23.7087225 ], [ 68.57578, 23.7087203 ], [ 68.576063, 23.7076913 ], [ 68.5771803, 23.7079518 ], [ 68.5773179, 23.708467 ], [ 68.5774578, 23.7085957 ], [ 68.5785757, 23.7087278 ], [ 68.578574, 23.7092427 ], [ 68.5794128, 23.7092451 ], [ 68.5794145, 23.7087303 ], [ 68.5799736, 23.7087318 ], [ 68.5799753, 23.7082168 ], [ 68.5808141, 23.7082192 ], [ 68.5806778, 23.7069316 ], [ 68.5798416, 23.706157 ], [ 68.5798441, 23.7053848 ], [ 68.5799847, 23.7052561 ], [ 68.581103, 23.7052591 ], [ 68.5819384, 23.706291 ], [ 68.5822179, 23.7062918 ], [ 68.5823576, 23.7061638 ], [ 68.5824996, 23.7056494 ], [ 68.5827791, 23.7056501 ], [ 68.5827766, 23.7064224 ], [ 68.5838963, 23.7060389 ], [ 68.5843162, 23.7056543 ], [ 68.5843187, 23.704882 ], [ 68.5839016, 23.7043661 ], [ 68.5844602, 23.7044959 ], [ 68.5861384, 23.7042428 ], [ 68.586278, 23.7041151 ], [ 68.58642, 23.7036006 ], [ 68.5869779, 23.7039877 ], [ 68.5875366, 23.7041183 ], [ 68.5875341, 23.7048907 ], [ 68.5889324, 23.7047652 ], [ 68.5890713, 23.7048947 ], [ 68.58921, 23.7054099 ], [ 68.5897691, 23.7054114 ], [ 68.5897675, 23.7059263 ], [ 68.5908853, 23.7060574 ], [ 68.5917209, 23.7070894 ], [ 68.5932559, 23.7077375 ], [ 68.5932544, 23.7082523 ], [ 68.5931144, 23.7085093 ], [ 68.5953497, 23.7089009 ], [ 68.5954886, 23.7090304 ], [ 68.5954854, 23.7100601 ], [ 68.5961816, 23.7110916 ], [ 68.5956222, 23.7112185 ], [ 68.5950618, 23.7116036 ], [ 68.5950601, 23.7121185 ], [ 68.595619, 23.7122481 ], [ 68.5957579, 23.7123778 ], [ 68.5958966, 23.712893 ], [ 68.594777, 23.7132757 ], [ 68.5944967, 23.7135324 ], [ 68.5922576, 23.7142988 ], [ 68.5919781, 23.714298 ], [ 68.5911408, 23.7137809 ], [ 68.5903024, 23.7136505 ], [ 68.5903009, 23.7141653 ], [ 68.5908596, 23.714295 ], [ 68.5909985, 23.7144247 ], [ 68.5909921, 23.716484 ], [ 68.5912709, 23.7167422 ], [ 68.5914096, 23.7172574 ], [ 68.5919685, 23.717387 ], [ 68.5926642, 23.7182903 ], [ 68.5928027, 23.7188055 ], [ 68.5936411, 23.7189361 ], [ 68.59378, 23.7190655 ], [ 68.5941968, 23.7200964 ], [ 68.594756, 23.7200979 ], [ 68.5954489, 23.7219017 ], [ 68.5957277, 23.7221599 ], [ 68.5957237, 23.7234469 ], [ 68.5953024, 23.7242181 ], [ 68.6031338, 23.723466 ], [ 68.6032776, 23.7219219 ], [ 68.60398, 23.7210223 ], [ 68.6050987, 23.7208968 ], [ 68.6052364, 23.721412 ], [ 68.6055152, 23.7216702 ], [ 68.6059322, 23.722701 ], [ 68.6064918, 23.7225732 ], [ 68.6067721, 23.7223165 ], [ 68.6090111, 23.72155 ], [ 68.6095719, 23.7210364 ], [ 68.6106912, 23.7207819 ], [ 68.6112517, 23.7202683 ], [ 68.612092, 23.7197556 ], [ 68.6126513, 23.7197571 ], [ 68.6137687, 23.7201464 ], [ 68.6137664, 23.7209187 ], [ 68.6143255, 23.7209202 ], [ 68.614327, 23.7204054 ], [ 68.6148866, 23.7202776 ], [ 68.615447, 23.7198932 ], [ 68.6153495, 23.7203194 ], [ 68.6155403, 23.7204959 ], [ 68.6160045, 23.7204095 ], [ 68.616003, 23.7209244 ], [ 68.6154364, 23.7209175 ], [ 68.6157216, 23.7215668 ], [ 68.6168386, 23.7220843 ], [ 68.617398, 23.7219574 ], [ 68.617674, 23.7232453 ], [ 68.6181376, 23.7230767 ], [ 68.6182317, 23.7237614 ], [ 68.6193508, 23.7235069 ], [ 68.6193523, 23.722992 ], [ 68.6199115, 23.7229933 ], [ 68.6196297, 23.723765 ], [ 68.6201892, 23.7236371 ], [ 68.620329, 23.7235093 ], [ 68.6204708, 23.7229947 ], [ 68.6210298, 23.7229962 ], [ 68.621303, 23.7244672 ], [ 68.6220272, 23.7252258 ], [ 68.6225133, 23.7264339 ], [ 68.6246537, 23.7268663 ], [ 68.624653, 23.7271238 ], [ 68.6249327, 23.7271245 ], [ 68.6249304, 23.7278968 ], [ 68.6243716, 23.7277662 ], [ 68.6238138, 23.72725 ], [ 68.6224123, 23.7268611 ], [ 68.6219563, 23.7256603 ], [ 68.6216781, 23.7251447 ], [ 68.6210251, 23.7246688 ], [ 68.6201863, 23.7246669 ], [ 68.6199059, 23.7249236 ], [ 68.6176668, 23.7256904 ], [ 68.6154307, 23.7254273 ], [ 68.6151502, 23.7256841 ], [ 68.6145908, 23.7258119 ], [ 68.6144239, 23.7272747 ], [ 68.6133918, 23.7281297 ], [ 68.6129015, 23.7284081 ], [ 68.6127302, 23.7288172 ], [ 68.6124833, 23.7291532 ], [ 68.6124765, 23.73147 ], [ 68.6135865, 23.7343044 ], [ 68.6138616, 23.7358497 ], [ 68.6142786, 23.7368803 ], [ 68.6148378, 23.7368818 ], [ 68.6142748, 23.7381676 ], [ 68.615114, 23.7380404 ], [ 68.6158138, 23.7376565 ], [ 68.6158153, 23.7371417 ], [ 68.6160512, 23.7369724 ], [ 68.6162357, 23.7370136 ], [ 68.6170729, 23.7375305 ], [ 68.6174901, 23.7381755 ], [ 68.6181886, 23.738563 ], [ 68.6229387, 23.7398616 ], [ 68.6282521, 23.7397463 ], [ 68.6279696, 23.7407752 ], [ 68.6265713, 23.740772 ], [ 68.6267093, 23.741287 ], [ 68.6269883, 23.7415452 ], [ 68.6269868, 23.74206 ], [ 68.6276853, 23.7424475 ], [ 68.6288038, 23.7424501 ], [ 68.6290843, 23.7421933 ], [ 68.6307635, 23.7416826 ], [ 68.6313239, 23.7412982 ], [ 68.6310421, 23.7420699 ], [ 68.6304825, 23.7421967 ], [ 68.629642, 23.7427096 ], [ 68.6288017, 23.7432224 ], [ 68.6279609, 23.7438644 ], [ 68.6280958, 23.7454093 ], [ 68.6282357, 23.7455378 ], [ 68.6285154, 23.7455386 ], [ 68.6296369, 23.7445116 ], [ 68.6307577, 23.743742 ], [ 68.6315974, 23.7434864 ], [ 68.6321589, 23.7427155 ], [ 68.6329981, 23.7425892 ], [ 68.6332871, 23.7392434 ], [ 68.6344065, 23.7389886 ], [ 68.6345471, 23.7384741 ], [ 68.6351086, 23.7377032 ], [ 68.63567, 23.7369323 ], [ 68.6362307, 23.7364188 ], [ 68.6366524, 23.7357758 ], [ 68.6383324, 23.7350073 ], [ 68.6402927, 23.7342578 ], [ 68.6401351, 23.7349488 ], [ 68.6391516, 23.7353565 ], [ 68.6372111, 23.7360345 ], [ 68.6360899, 23.7369332 ], [ 68.6359482, 23.7374477 ], [ 68.6351058, 23.7387329 ], [ 68.6348212, 23.7405342 ], [ 68.6350994, 23.7410496 ], [ 68.6360767, 23.7416951 ], [ 68.6371931, 23.74247 ], [ 68.6385917, 23.7423451 ], [ 68.6385932, 23.7418302 ], [ 68.6391521, 23.7419599 ], [ 68.6413901, 23.7417076 ], [ 68.6430699, 23.7409391 ], [ 68.6439117, 23.7399115 ], [ 68.645495, 23.7391344 ], [ 68.645489, 23.7394904 ], [ 68.6446925, 23.7399667 ], [ 68.644189, 23.7408134 ], [ 68.6440429, 23.7412093 ], [ 68.6439072, 23.7415851 ], [ 68.6419486, 23.7419663 ], [ 68.6405471, 23.7431218 ], [ 68.6408477, 23.7454998 ], [ 68.6413776, 23.7462129 ], [ 68.641377, 23.7464704 ], [ 68.6419349, 23.7469865 ], [ 68.6420727, 23.7475017 ], [ 68.6423517, 23.7477597 ], [ 68.6429075, 23.7490481 ], [ 68.6434655, 23.7495643 ], [ 68.6440226, 23.7503379 ], [ 68.6444392, 23.7516259 ], [ 68.6433198, 23.7518809 ], [ 68.6433213, 23.7513658 ], [ 68.6427618, 23.7513647 ], [ 68.6430395, 23.7521375 ], [ 68.6413611, 23.7522619 ], [ 68.6410807, 23.7525187 ], [ 68.6402409, 23.7527743 ], [ 68.6391194, 23.7538013 ], [ 68.637999, 23.7544426 ], [ 68.6377172, 23.7552143 ], [ 68.637158, 23.7552129 ], [ 68.6370162, 23.7557274 ], [ 68.6356142, 23.7570113 ], [ 68.6354713, 23.7582982 ], [ 68.6357509, 23.7582987 ], [ 68.6357524, 23.7577839 ], [ 68.6363116, 23.7577852 ], [ 68.6351865, 23.7600993 ], [ 68.6346273, 23.760098 ], [ 68.6347601, 23.7624152 ], [ 68.6355955, 23.7637043 ], [ 68.6364288, 23.7657657 ], [ 68.637309, 23.766885 ], [ 68.6372636, 23.7673121 ], [ 68.638515, 23.7701468 ], [ 68.6393542, 23.7701487 ], [ 68.6390716, 23.7711778 ], [ 68.639631, 23.7711791 ], [ 68.639769, 23.7716943 ], [ 68.640188, 23.772081 ], [ 68.6407477, 23.771954 ], [ 68.6407463, 23.7724688 ], [ 68.6413058, 23.7724701 ], [ 68.6419988, 23.7745312 ], [ 68.6422778, 23.7747892 ], [ 68.6442254, 23.778655 ], [ 68.6445044, 23.7789132 ], [ 68.6450604, 23.7802016 ], [ 68.6453394, 23.7804596 ], [ 68.6460349, 23.7820058 ], [ 68.6465946, 23.7820069 ], [ 68.646731, 23.7830369 ], [ 68.6472884, 23.7838105 ], [ 68.6475654, 23.7848409 ], [ 68.6478444, 23.7850989 ], [ 68.6481215, 23.7861292 ], [ 68.6484005, 23.7863873 ], [ 68.6495133, 23.7887068 ], [ 68.6504846, 23.791798 ], [ 68.651044, 23.7917992 ], [ 68.6511806, 23.7928292 ], [ 68.6525734, 23.7951492 ], [ 68.6534105, 23.7959233 ], [ 68.6545269, 23.7969555 ], [ 68.6546658, 23.7974707 ], [ 68.6557843, 23.7977306 ], [ 68.6559223, 23.7982458 ], [ 68.6568996, 23.7991484 ], [ 68.6577382, 23.7994077 ], [ 68.6585755, 23.8001819 ], [ 68.6605312, 23.8012159 ], [ 68.6627675, 23.8019931 ], [ 68.6636068, 23.801995 ], [ 68.6666822, 23.8027738 ], [ 68.6680778, 23.804064 ], [ 68.6686371, 23.8041944 ], [ 68.6686357, 23.8047092 ], [ 68.6707763, 23.8053163 ], [ 68.6717098, 23.8061312 ], [ 68.6739459, 23.8070373 ], [ 68.6739472, 23.8065225 ], [ 68.6717111, 23.8056164 ], [ 68.6707331, 23.8049712 ], [ 68.6705943, 23.8047134 ], [ 68.6700351, 23.8045829 ], [ 68.6694768, 23.804067 ], [ 68.6675206, 23.8031622 ], [ 68.666965, 23.8016166 ], [ 68.6661254, 23.801743 ], [ 68.6655668, 23.8013561 ], [ 68.6655654, 23.801871 ], [ 68.6644471, 23.8016111 ], [ 68.6645877, 23.8010965 ], [ 68.6648682, 23.8008396 ], [ 68.66501, 23.8003252 ], [ 68.6638915, 23.8000653 ], [ 68.6641699, 23.8005807 ], [ 68.6636104, 23.8005795 ], [ 68.6633339, 23.7992919 ], [ 68.6624944, 23.7994183 ], [ 68.6616569, 23.7986442 ], [ 68.6608179, 23.798514 ], [ 68.6610965, 23.7990296 ], [ 68.6596983, 23.7987689 ], [ 68.6599814, 23.7974826 ], [ 68.6616599, 23.7974862 ], [ 68.6613789, 23.7980005 ], [ 68.6622175, 23.7982598 ], [ 68.6620791, 23.7974871 ], [ 68.6622198, 23.7973582 ], [ 68.6638981, 23.7974911 ], [ 68.6640362, 23.7980063 ], [ 68.6650135, 23.798909 ], [ 68.6661305, 23.7996835 ], [ 68.6675274, 23.8004588 ], [ 68.6686441, 23.8014909 ], [ 68.669761, 23.8022656 ], [ 68.6708803, 23.8022681 ], [ 68.6713004, 23.8018833 ], [ 68.670885, 23.8003378 ], [ 68.6700464, 23.8000785 ], [ 68.670047, 23.7998211 ], [ 68.6714462, 23.799695 ], [ 68.6725673, 23.798925 ], [ 68.6731271, 23.798798 ], [ 68.6728519, 23.7969955 ], [ 68.6734108, 23.7972541 ], [ 68.6735514, 23.7967394 ], [ 68.6739721, 23.796483 ], [ 68.6739703, 23.7972552 ], [ 68.6753698, 23.7970008 ], [ 68.6752281, 23.7975153 ], [ 68.6749478, 23.7977721 ], [ 68.674947, 23.7980296 ], [ 68.6750871, 23.7981581 ], [ 68.6756463, 23.7982885 ], [ 68.6753647, 23.7990602 ], [ 68.6745254, 23.7990585 ], [ 68.6746635, 23.7995735 ], [ 68.6750825, 23.7999602 ], [ 68.6759223, 23.7998336 ], [ 68.6760629, 23.7993191 ], [ 68.6774649, 23.7980349 ], [ 68.6778877, 23.7970061 ], [ 68.6784475, 23.796878 ], [ 68.6785872, 23.79675 ], [ 68.6794341, 23.7936627 ], [ 68.679436, 23.7928905 ], [ 68.6787402, 23.7916019 ], [ 68.6792997, 23.7916032 ], [ 68.6794411, 23.7908311 ], [ 68.6800024, 23.79006 ], [ 68.6805631, 23.7895463 ], [ 68.6811277, 23.7874881 ], [ 68.681689, 23.786717 ], [ 68.6821101, 23.7863312 ], [ 68.6826699, 23.7862042 ], [ 68.6825308, 23.785689 ], [ 68.683373, 23.7844036 ], [ 68.6833743, 23.7838888 ], [ 68.6846355, 23.7831192 ], [ 68.684494, 23.7836336 ], [ 68.6839326, 23.7844047 ], [ 68.6833711, 23.7851759 ], [ 68.6828073, 23.7869766 ], [ 68.6822466, 23.7874904 ], [ 68.6816847, 23.7885189 ], [ 68.6816803, 23.7903208 ], [ 68.6813999, 23.7905777 ], [ 68.6812592, 23.7910923 ], [ 68.6818196, 23.7907069 ], [ 68.6826595, 23.7904512 ], [ 68.6829398, 23.7901944 ], [ 68.6846193, 23.789812 ], [ 68.6846206, 23.7892972 ], [ 68.6849003, 23.7892978 ], [ 68.6848992, 23.7898126 ], [ 68.6854596, 23.7894272 ], [ 68.6885367, 23.7894335 ], [ 68.6888172, 23.7891766 ], [ 68.6904964, 23.7887943 ], [ 68.6904953, 23.7893091 ], [ 68.689376, 23.7894352 ], [ 68.6885355, 23.7899483 ], [ 68.6871364, 23.7900745 ], [ 68.6871352, 23.7905896 ], [ 68.6837773, 23.7909683 ], [ 68.681256, 23.7923794 ], [ 68.6808334, 23.7934083 ], [ 68.6809593, 23.7993293 ], [ 68.6813791, 23.7990726 ], [ 68.6816202, 23.796844 ], [ 68.6818047, 23.796885 ], [ 68.6822222, 23.7975298 ], [ 68.6829205, 23.7981745 ], [ 68.6837595, 23.7983053 ], [ 68.6839009, 23.7975334 ], [ 68.6840415, 23.7974045 ], [ 68.6856246, 23.7971097 ], [ 68.6857198, 23.797537 ], [ 68.6862798, 23.7972807 ], [ 68.6862787, 23.7977956 ], [ 68.6865584, 23.7977961 ], [ 68.686699, 23.7972817 ], [ 68.6869795, 23.7970248 ], [ 68.6879606, 23.7963828 ], [ 68.6893626, 23.7950985 ], [ 68.6899224, 23.7949713 ], [ 68.6899211, 23.7954862 ], [ 68.6893613, 23.7956134 ], [ 68.6888009, 23.7959988 ], [ 68.6885193, 23.7967704 ], [ 68.6879597, 23.7967693 ], [ 68.6876764, 23.7983132 ], [ 68.6871163, 23.7984404 ], [ 68.6859958, 23.7990821 ], [ 68.6851515, 23.8011399 ], [ 68.6845917, 23.8012669 ], [ 68.6840313, 23.8016523 ], [ 68.6836074, 23.8031961 ], [ 68.6838803, 23.8060282 ], [ 68.6847134, 23.8086043 ], [ 68.685132, 23.8092482 ], [ 68.6861099, 23.8096368 ], [ 68.6865276, 23.8106674 ], [ 68.6868073, 23.810668 ], [ 68.6869485, 23.8098959 ], [ 68.6873694, 23.8096393 ], [ 68.6870878, 23.8104111 ], [ 68.6876471, 23.8105404 ], [ 68.6884845, 23.8113144 ], [ 68.6890436, 23.8115729 ], [ 68.6901625, 23.8117045 ], [ 68.6901606, 23.8124767 ], [ 68.6907206, 23.8123486 ], [ 68.6911405, 23.8119638 ], [ 68.6910024, 23.8114486 ], [ 68.6896047, 23.8109311 ], [ 68.6887703, 23.8088698 ], [ 68.6879307, 23.8088681 ], [ 68.6879296, 23.809383 ], [ 68.68737, 23.8093818 ], [ 68.6873719, 23.8086096 ], [ 68.6868121, 23.8087368 ], [ 68.6865316, 23.8089936 ], [ 68.6862519, 23.8089931 ], [ 68.6856932, 23.8086062 ], [ 68.6852755, 23.8075758 ], [ 68.6849963, 23.8073178 ], [ 68.6851409, 23.805516 ], [ 68.6859803, 23.8055177 ], [ 68.6851453, 23.8037141 ], [ 68.6843059, 23.8037124 ], [ 68.684446, 23.8034552 ], [ 68.6844486, 23.8024255 ], [ 68.68515, 23.8017829 ], [ 68.6857096, 23.801784 ], [ 68.686407, 23.8024295 ], [ 68.6868255, 23.8030734 ], [ 68.6876648, 23.8030751 ], [ 68.6879453, 23.8028183 ], [ 68.6885045, 23.8029487 ], [ 68.6885057, 23.8024338 ], [ 68.6890649, 23.8025631 ], [ 68.6896255, 23.8021787 ], [ 68.6894839, 23.8026931 ], [ 68.6892035, 23.80295 ], [ 68.6892029, 23.8032074 ], [ 68.689343, 23.8033359 ], [ 68.6899028, 23.8032089 ], [ 68.6897612, 23.8037234 ], [ 68.6894807, 23.8039802 ], [ 68.6896181, 23.8052677 ], [ 68.690738, 23.8050125 ], [ 68.6907366, 23.8055274 ], [ 68.6912959, 23.8056567 ], [ 68.6924133, 23.8064312 ], [ 68.6954909, 23.8064374 ], [ 68.6961914, 23.8057956 ], [ 68.6968939, 23.8046381 ], [ 68.6974531, 23.8047684 ], [ 68.6975937, 23.8042539 ], [ 68.6985747, 23.8037409 ], [ 68.6985735, 23.8042558 ], [ 68.6980139, 23.8042547 ], [ 68.6982908, 23.8055423 ], [ 68.6966109, 23.8060539 ], [ 68.6967472, 23.8073412 ], [ 68.6957661, 23.808369 ], [ 68.6949262, 23.8086247 ], [ 68.6947822, 23.810169 ], [ 68.6957599, 23.8110715 ], [ 68.697157, 23.8118466 ], [ 68.6977166, 23.8118475 ], [ 68.6984165, 23.8114633 ], [ 68.698417, 23.8112059 ], [ 68.6981379, 23.8109479 ], [ 68.6981012, 23.807689 ], [ 68.6994046, 23.8078613 ], [ 68.6991277, 23.8065737 ], [ 68.6994076, 23.8065742 ], [ 68.699685, 23.8076045 ], [ 68.7001481, 23.8076929 ], [ 68.7009389, 23.8096663 ], [ 68.7014966, 23.8104397 ], [ 68.7027534, 23.8115999 ], [ 68.7033125, 23.8118585 ], [ 68.7044318, 23.8118606 ], [ 68.7051328, 23.8109615 ], [ 68.7051345, 23.8101893 ], [ 68.7054149, 23.8099322 ], [ 68.7054166, 23.80916 ], [ 68.7052777, 23.8089024 ], [ 68.7061175, 23.8087748 ], [ 68.7062571, 23.8086468 ], [ 68.7063987, 23.8081322 ], [ 68.7072379, 23.808262 ], [ 68.707517, 23.80852 ], [ 68.7080763, 23.8086502 ], [ 68.7080751, 23.8091651 ], [ 68.7089145, 23.8091666 ], [ 68.7089133, 23.8096816 ], [ 68.709473, 23.8096825 ], [ 68.7091914, 23.8104542 ], [ 68.7103112, 23.8101991 ], [ 68.7098888, 23.8112278 ], [ 68.7096083, 23.8114848 ], [ 68.709328, 23.8117417 ], [ 68.7094648, 23.8132866 ], [ 68.7100243, 23.8134159 ], [ 68.7103032, 23.8138029 ], [ 68.7094635, 23.8139296 ], [ 68.7077833, 23.8145705 ], [ 68.7076412, 23.8153425 ], [ 68.7083403, 23.8157294 ], [ 68.7091785, 23.8162459 ], [ 68.7102978, 23.816248 ], [ 68.710578, 23.8159912 ], [ 68.7128171, 23.8157379 ], [ 68.7129562, 23.8158672 ], [ 68.7129557, 23.8161246 ], [ 68.7125353, 23.8166387 ], [ 68.7133751, 23.8165111 ], [ 68.7136553, 23.8162543 ], [ 68.7142154, 23.8161271 ], [ 68.7145007, 23.8135533 ], [ 68.7149194, 23.8138114 ], [ 68.7147772, 23.8150983 ], [ 68.7156168, 23.8149708 ], [ 68.7157566, 23.8148428 ], [ 68.715898, 23.8143282 ], [ 68.7161776, 23.8144569 ], [ 68.7167372, 23.814458 ], [ 68.7168769, 23.8143301 ], [ 68.717019, 23.813558 ], [ 68.7181379, 23.8136882 ], [ 68.7192562, 23.814077 ], [ 68.7195344, 23.8148496 ], [ 68.7170143, 23.8157457 ], [ 68.7164537, 23.8161312 ], [ 68.7163565, 23.8165572 ], [ 68.7161728, 23.8166455 ], [ 68.7161723, 23.8169029 ], [ 68.7164522, 23.8169035 ], [ 68.7165476, 23.8167338 ], [ 68.7181329, 23.8160052 ], [ 68.7184127, 23.8160055 ], [ 68.7189704, 23.816908 ], [ 68.7178502, 23.8172917 ], [ 68.7170109, 23.8172902 ], [ 68.7167308, 23.8174189 ], [ 68.7167291, 23.8181911 ], [ 68.7147693, 23.8187024 ], [ 68.7149077, 23.8192174 ], [ 68.7150477, 23.8193459 ], [ 68.7181254, 23.8194807 ], [ 68.7185474, 23.8181943 ], [ 68.7192488, 23.8175517 ], [ 68.7198086, 23.8174244 ], [ 68.7196693, 23.8169093 ], [ 68.7193902, 23.8166514 ], [ 68.7193907, 23.8163939 ], [ 68.7195314, 23.816265 ], [ 68.7205109, 23.8158812 ], [ 68.7206525, 23.8153665 ], [ 68.7212121, 23.8153675 ], [ 68.7212133, 23.8148526 ], [ 68.7220528, 23.8147251 ], [ 68.7221927, 23.8145971 ], [ 68.7231757, 23.8130543 ], [ 68.7240161, 23.812541 ], [ 68.7238746, 23.8130556 ], [ 68.7235943, 23.8133125 ], [ 68.7234509, 23.8138494 ], [ 68.7230314, 23.814856 ], [ 68.7234505, 23.8153716 ], [ 68.7223304, 23.8157553 ], [ 68.7220502, 23.8160122 ], [ 68.7214903, 23.8161403 ], [ 68.7213488, 23.8166549 ], [ 68.7210685, 23.8169118 ], [ 68.7206421, 23.8202577 ], [ 68.7212017, 23.8202586 ], [ 68.7212, 23.8210309 ], [ 68.7220403, 23.8206459 ], [ 68.7231596, 23.8206478 ], [ 68.7234386, 23.8210348 ], [ 68.7216633, 23.8211193 ], [ 68.7214782, 23.8218037 ], [ 68.7220379, 23.8218046 ], [ 68.7220367, 23.8223195 ], [ 68.7209171, 23.8224457 ], [ 68.7203567, 23.8228313 ], [ 68.7203556, 23.8233461 ], [ 68.7209158, 23.8230898 ], [ 68.7207704, 23.8254064 ], [ 68.7206304, 23.8256634 ], [ 68.7200708, 23.8256625 ], [ 68.7197931, 23.8246323 ], [ 68.7190492, 23.8245425 ], [ 68.7189543, 23.8243733 ], [ 68.7181142, 23.8246292 ], [ 68.7181131, 23.8251441 ], [ 68.7195115, 23.8255323 ], [ 68.72007, 23.8260481 ], [ 68.7220271, 23.8268239 ], [ 68.7225867, 23.826825 ], [ 68.7239844, 23.8275997 ], [ 68.724544, 23.8276007 ], [ 68.7248232, 23.8278587 ], [ 68.7259428, 23.8277324 ], [ 68.7260812, 23.8282474 ], [ 68.7265005, 23.828634 ], [ 68.7281779, 23.8294092 ], [ 68.7290159, 23.830183 ], [ 68.730414, 23.8307003 ], [ 68.7315317, 23.8314744 ], [ 68.735166, 23.8332828 ], [ 68.7387064, 23.8340205 ], [ 68.7388022, 23.8341904 ], [ 68.7393618, 23.8341913 ], [ 68.7393624, 23.8339339 ], [ 68.7388982, 23.8338445 ], [ 68.7388033, 23.8336755 ], [ 68.7382439, 23.8335453 ], [ 68.7379645, 23.8332875 ], [ 68.7351673, 23.8326396 ], [ 68.7353083, 23.8318676 ], [ 68.7354489, 23.8317387 ], [ 68.7385277, 23.8314865 ], [ 68.7399284, 23.8307165 ], [ 68.7441263, 23.8305954 ], [ 68.7441272, 23.8300806 ], [ 68.7455268, 23.8299535 ], [ 68.7477666, 23.8293142 ], [ 68.7477681, 23.8285419 ], [ 68.7497283, 23.8279012 ], [ 68.7501482, 23.827516 ], [ 68.7504296, 23.8267443 ], [ 68.7502926, 23.8254569 ], [ 68.7514121, 23.8253297 ], [ 68.7539295, 23.8258485 ], [ 68.7550469, 23.82688 ], [ 68.7564455, 23.8272688 ], [ 68.7564465, 23.826754 ], [ 68.7578456, 23.826756 ], [ 68.7579859, 23.8262414 ], [ 68.7584066, 23.8259847 ], [ 68.7584056, 23.8264996 ], [ 68.7600849, 23.8263729 ], [ 68.7614826, 23.8271475 ], [ 68.7617625, 23.8271478 ], [ 68.7620426, 23.8270201 ], [ 68.7620416, 23.8275349 ], [ 68.7626011, 23.827664 ], [ 68.7628804, 23.827922 ], [ 68.7667967, 23.8287001 ], [ 68.7669358, 23.8288296 ], [ 68.7670753, 23.8293446 ], [ 68.7673553, 23.8292159 ], [ 68.7684744, 23.8293467 ], [ 68.7687521, 23.8306341 ], [ 68.7695914, 23.8307638 ], [ 68.7707109, 23.8306372 ], [ 68.7707137, 23.8290927 ], [ 68.7709934, 23.829093 ], [ 68.7714109, 23.8301233 ], [ 68.7715511, 23.8302518 ], [ 68.7729507, 23.8299965 ], [ 68.7736487, 23.8306415 ], [ 68.7736483, 23.8308989 ], [ 68.7730877, 23.831413 ], [ 68.772667, 23.8321847 ], [ 68.7782663, 23.8307765 ], [ 68.781625, 23.8303956 ], [ 68.7816264, 23.8296234 ], [ 68.7824661, 23.8294954 ], [ 68.7833064, 23.8289817 ], [ 68.7847069, 23.8282113 ], [ 68.7875063, 23.8275721 ], [ 68.7876445, 23.8283446 ], [ 68.7886233, 23.8289891 ], [ 68.7903028, 23.8287339 ], [ 68.7911435, 23.8279628 ], [ 68.7917035, 23.8277061 ], [ 68.7950618, 23.8275824 ], [ 68.7950609, 23.8280972 ], [ 68.7956205, 23.8280979 ], [ 68.7956197, 23.8286128 ], [ 68.7975789, 23.8284862 ], [ 68.7979987, 23.8281012 ], [ 68.7981402, 23.8273289 ], [ 68.7987001, 23.8272006 ], [ 68.7999614, 23.8255294 ], [ 68.8003823, 23.8251433 ], [ 68.802062, 23.8246307 ], [ 68.8029023, 23.8241169 ], [ 68.8048615, 23.8238619 ], [ 68.8054218, 23.8233478 ], [ 68.8071022, 23.8223202 ], [ 68.8082217, 23.8223215 ], [ 68.8112988, 23.8228403 ], [ 68.8138184, 23.8220711 ], [ 68.8149378, 23.8219441 ], [ 68.8146573, 23.8224586 ], [ 68.8140977, 23.822458 ], [ 68.8143757, 23.8237455 ], [ 68.8154948, 23.8238751 ], [ 68.816054, 23.8241331 ], [ 68.8194112, 23.8246519 ], [ 68.8205292, 23.8256829 ], [ 68.8238852, 23.826974 ], [ 68.8261236, 23.8272338 ], [ 68.8262629, 23.8273633 ], [ 68.8264025, 23.8278783 ], [ 68.828361, 23.8282662 ], [ 68.8336775, 23.8285294 ], [ 68.8345173, 23.8282728 ], [ 68.837810791406255, 23.828781332181155 ], [ 68.8378747, 23.8287912 ], [ 68.8403935, 23.8285364 ], [ 68.8406736, 23.8282794 ], [ 68.8431927, 23.827767 ], [ 68.8434728, 23.82751 ], [ 68.8465522, 23.8264833 ], [ 68.849071, 23.8262284 ], [ 68.849631, 23.8259715 ], [ 68.8555085, 23.8249475 ], [ 68.8563486, 23.8244334 ], [ 68.8583076, 23.8241777 ], [ 68.8597076, 23.8234068 ], [ 68.8613864, 23.8235374 ], [ 68.8619497, 23.8201915 ], [ 68.8633492, 23.8198061 ], [ 68.8636293, 23.8195489 ], [ 68.8672666, 23.8196812 ], [ 68.8674055, 23.8201962 ], [ 68.8678255, 23.8205822 ], [ 68.8720222, 23.8211006 ], [ 68.8745414, 23.8202021 ], [ 68.8746813, 23.8196874 ], [ 68.8749614, 23.8194302 ], [ 68.8748232, 23.8181429 ], [ 68.8742638, 23.8180133 ], [ 68.873425, 23.8173696 ], [ 68.8730058, 23.8163395 ], [ 68.872587, 23.8158243 ], [ 68.8720275, 23.8156946 ], [ 68.87007, 23.814406 ], [ 68.8672727, 23.8137604 ], [ 68.8671332, 23.812988 ], [ 68.8668536, 23.8127304 ], [ 68.8669948, 23.8119583 ], [ 68.8675543, 23.812087 ], [ 68.8678338, 23.8123446 ], [ 68.8748279, 23.8131227 ], [ 68.8779058, 23.8131252 ], [ 68.8781859, 23.8128679 ], [ 68.8787455, 23.8128685 ], [ 68.8793048, 23.8131263 ], [ 68.8795847, 23.8131265 ], [ 68.8798648, 23.8128693 ], [ 68.8807043, 23.8126126 ], [ 68.8809844, 23.8123554 ], [ 68.8837828, 23.8119717 ], [ 68.8836425, 23.8117143 ], [ 68.8836429, 23.8114569 ], [ 68.8840632, 23.8111996 ], [ 68.8840628, 23.8117145 ], [ 68.8846225, 23.8115858 ], [ 68.8851825, 23.8110713 ], [ 68.8857423, 23.8109436 ], [ 68.8858822, 23.8104287 ], [ 68.8865824, 23.8100428 ], [ 68.8874223, 23.8095285 ], [ 68.8882617, 23.8095291 ], [ 68.8893804, 23.8100447 ], [ 68.8899392, 23.8108175 ], [ 68.8910583, 23.8109473 ], [ 68.8910589, 23.8104325 ], [ 68.8913386, 23.810561 ], [ 68.893297, 23.8105623 ], [ 68.8934363, 23.8106916 ], [ 68.8934359, 23.8112064 ], [ 68.8930162, 23.8119785 ], [ 68.8935756, 23.812107 ], [ 68.8941348, 23.8126224 ], [ 68.8949742, 23.812623 ], [ 68.8952541, 23.8124949 ], [ 68.8949736, 23.8132669 ], [ 68.8927351, 23.8133937 ], [ 68.8924556, 23.813136 ], [ 68.8913367, 23.8127496 ], [ 68.8914754, 23.8135219 ], [ 68.8913358, 23.8137793 ], [ 68.8909158, 23.8135215 ], [ 68.8907767, 23.8132641 ], [ 68.8888183, 23.8130052 ], [ 68.8888179, 23.81352 ], [ 68.8904966, 23.8136495 ], [ 68.8920339, 23.8148095 ], [ 68.8923135, 23.8153246 ], [ 68.8924527, 23.8166117 ], [ 68.8918935, 23.8162248 ], [ 68.8913339, 23.8160961 ], [ 68.8917523, 23.8171261 ], [ 68.8927317, 23.8175124 ], [ 68.8932908, 23.8182851 ], [ 68.8941301, 23.8182856 ], [ 68.8942698, 23.8181575 ], [ 68.8944108, 23.8173854 ], [ 68.8955299, 23.8175143 ], [ 68.8956692, 23.8176436 ], [ 68.8956688, 23.8181584 ], [ 68.8953889, 23.8184157 ], [ 68.8955282, 23.8197029 ], [ 68.8969271, 23.8198322 ], [ 68.897487, 23.8197043 ], [ 68.8972078, 23.8186744 ], [ 68.8986066, 23.8190611 ], [ 68.8994461, 23.8190615 ], [ 68.9019653, 23.8177761 ], [ 68.9025253, 23.8172616 ], [ 68.9033652, 23.8167472 ], [ 68.90635, 23.815448684876177 ], [ 68.9086833, 23.8144336 ], [ 68.9112023, 23.813148 ], [ 68.9179177, 23.8131516 ], [ 68.9198765, 23.8126379 ], [ 68.9239354, 23.8089076 ], [ 68.9242155, 23.808393 ], [ 68.9249158, 23.8077493 ], [ 68.9253353, 23.8071065 ], [ 68.9282751, 23.8044043 ], [ 68.9288349, 23.8041471 ], [ 68.9320534, 23.8011887 ], [ 68.9323334, 23.800674 ], [ 68.9331732, 23.799902 ], [ 68.9340129, 23.7988727 ], [ 68.9344338, 23.7975858 ], [ 68.9333149, 23.7971987 ], [ 68.9330352, 23.7969411 ], [ 68.9307973, 23.7968118 ], [ 68.9307976, 23.7960396 ], [ 68.934994, 23.7961696 ], [ 68.9361133, 23.7956553 ], [ 68.936953, 23.7948833 ], [ 68.9375126, 23.7946262 ], [ 68.9386323, 23.7935969 ], [ 68.9391919, 23.7933397 ], [ 68.9403113, 23.7923104 ], [ 68.940871, 23.7920532 ], [ 68.9419904, 23.7910239 ], [ 68.9428299, 23.7905094 ], [ 68.9473066, 23.7889664 ], [ 68.9548604, 23.787939 ], [ 68.9554198, 23.7876818 ], [ 68.9570985, 23.787554 ], [ 68.9570985, 23.7870392 ], [ 68.9576581, 23.7869101 ], [ 68.9580775, 23.7860097 ], [ 68.9579384, 23.7849801 ], [ 68.9607356, 23.7861386 ], [ 68.9657708, 23.7869122 ], [ 68.9660505, 23.7871696 ], [ 68.9666099, 23.7871698 ], [ 68.9671694, 23.7876848 ], [ 68.9682882, 23.7879424 ], [ 68.968568, 23.7881999 ], [ 68.9694071, 23.7883293 ], [ 68.9694071, 23.7888442 ], [ 68.9699666, 23.7888442 ], [ 68.9703861, 23.7865274 ], [ 68.9699673, 23.7857551 ], [ 68.9736039, 23.7856266 ], [ 68.9741635, 23.7853692 ], [ 68.9747229, 23.7853694 ], [ 68.9750028, 23.785112 ], [ 68.975842, 23.7851122 ], [ 68.9762612, 23.7847264 ], [ 68.9771007, 23.7829247 ], [ 68.9779401, 23.7821524 ], [ 68.9783604, 23.7811228 ], [ 68.9789199, 23.7809937 ], [ 68.9796188, 23.7798359 ], [ 68.9814379, 23.7781623 ], [ 68.9836757, 23.7779052 ], [ 68.9842351, 23.7776478 ], [ 68.9859136, 23.7773906 ], [ 68.9874517, 23.7767476 ], [ 68.9877314, 23.7752031 ], [ 68.9880113, 23.7746882 ], [ 68.9880113, 23.773401 ], [ 68.9875923, 23.7728861 ], [ 68.9861939, 23.7723711 ], [ 68.988292, 23.7638761 ], [ 68.9889917, 23.7632322 ], [ 68.9895511, 23.7629748 ], [ 68.9912293, 23.762975 ], [ 68.9919282, 23.7625892 ], [ 68.9919282, 23.761817 ], [ 68.9917889, 23.7615596 ], [ 68.99067, 23.7613021 ], [ 68.9910892, 23.7605299 ], [ 68.9916486, 23.760015 ], [ 68.9919284, 23.7592428 ], [ 68.9924878, 23.7584705 ], [ 68.9934672, 23.7578264 ], [ 68.9945859, 23.7570542 ], [ 68.9965437, 23.7573118 ], [ 68.9998998, 23.7570544 ], [ 69.0035358, 23.7562821 ], [ 69.0082903, 23.7557671 ], [ 69.0133245, 23.7544794 ], [ 69.0138837, 23.7544794 ], [ 69.0143029, 23.7548659 ], [ 69.0143029, 23.7556384 ], [ 69.0141636, 23.7558958 ], [ 69.0110871, 23.7560243 ], [ 69.0071716, 23.7573116 ], [ 69.0057734, 23.7585989 ], [ 69.0052139, 23.7588563 ], [ 69.0040952, 23.7597578 ], [ 69.0042345, 23.7600152 ], [ 69.003955, 23.7633617 ], [ 69.003536, 23.7641341 ], [ 69.0015781, 23.7641341 ], [ 69.0022769, 23.7649064 ], [ 69.0024173, 23.7654212 ], [ 69.0029765, 23.7655495 ], [ 69.003116, 23.7656786 ], [ 69.003116, 23.7664509 ], [ 69.0018579, 23.7677382 ], [ 69.0012984, 23.7678663 ], [ 69.000739, 23.768253 ], [ 69.000739, 23.7690252 ], [ 69.0018579, 23.769411 ], [ 69.0022769, 23.7697975 ], [ 69.0022769, 23.7705697 ], [ 69.0017176, 23.771342 ], [ 69.0011582, 23.7721143 ], [ 69.0008785, 23.7744312 ], [ 68.9997596, 23.7754609 ], [ 68.9989204, 23.7762331 ], [ 68.9986407, 23.776748 ], [ 68.998361, 23.7782927 ], [ 68.9980811, 23.7788075 ], [ 68.9964027, 23.780352 ], [ 68.9958433, 23.7816391 ], [ 68.9957038, 23.7826688 ], [ 68.9982215, 23.7827971 ], [ 68.9986405, 23.7821539 ], [ 68.9998998, 23.78151 ], [ 69.0015783, 23.7809952 ], [ 69.0028365, 23.7798372 ], [ 69.0033959, 23.7788075 ], [ 69.0046552, 23.7776486 ], [ 69.0052147, 23.7773911 ], [ 69.0064729, 23.7762331 ], [ 69.007312, 23.7749459 ], [ 69.0089901, 23.7721141 ], [ 69.0096898, 23.7717274 ], [ 69.0099695, 23.7717274 ], [ 69.010109, 23.7718566 ], [ 69.0102495, 23.7726289 ], [ 69.0108089, 23.7724996 ], [ 69.0119276, 23.77147 ], [ 69.0130463, 23.7706975 ], [ 69.0136057, 23.7704401 ], [ 69.0141652, 23.7704399 ], [ 69.0148641, 23.771084 ], [ 69.0148641, 23.7715989 ], [ 69.0143048, 23.7723711 ], [ 69.0134657, 23.7731436 ], [ 69.0116482, 23.7759753 ], [ 69.0110888, 23.7759753 ], [ 69.0109486, 23.7764902 ], [ 69.0105296, 23.7770052 ], [ 69.0099701, 23.7771333 ], [ 69.0094107, 23.77752 ], [ 69.0089907, 23.7808667 ], [ 69.0075921, 23.7821539 ], [ 69.0075921, 23.7826688 ], [ 69.007872, 23.7831836 ], [ 69.0085719, 23.7838266 ], [ 69.0095505, 23.7844705 ], [ 69.0103899, 23.78653 ], [ 69.0103899, 23.7873023 ], [ 69.0095507, 23.7888468 ], [ 69.0095509, 23.7893616 ], [ 69.0101104, 23.7903913 ], [ 69.0105305, 23.7907771 ], [ 69.0141674, 23.7916782 ], [ 69.0143069, 23.792193 ], [ 69.015007, 23.7930934 ], [ 69.0155664, 23.7933509 ], [ 69.0162655, 23.7939948 ], [ 69.0165452, 23.7945096 ], [ 69.0165456, 23.7965692 ], [ 69.0161264, 23.7973414 ], [ 69.0152873, 23.7973414 ], [ 69.015147, 23.7988861 ], [ 69.0152874, 23.7990142 ], [ 69.0164065, 23.7991433 ], [ 69.0169663, 23.8009453 ], [ 69.0175258, 23.8006878 ], [ 69.0176656, 23.8040343 ], [ 69.0179455, 23.8045491 ], [ 69.0187849, 23.8053214 ], [ 69.0192052, 23.8066085 ], [ 69.0197648, 23.8067366 ], [ 69.0206044, 23.8080237 ], [ 69.0217236, 23.8082809 ], [ 69.0234023, 23.8082807 ], [ 69.023962, 23.8077657 ], [ 69.0242417, 23.8077657 ], [ 69.0245216, 23.8080231 ], [ 69.0259206, 23.8080227 ], [ 69.0262003, 23.808152 ], [ 69.0262003, 23.807637 ], [ 69.02648, 23.807637 ], [ 69.0264802, 23.8084092 ], [ 69.0267599, 23.8084092 ], [ 69.0267599, 23.8078944 ], [ 69.0273194, 23.8078944 ], [ 69.027459, 23.8084091 ], [ 69.0273203, 23.8117557 ], [ 69.0256414, 23.8112412 ], [ 69.0256412, 23.8107264 ], [ 69.0250818, 23.8109838 ], [ 69.0255014, 23.8130432 ], [ 69.0261052, 23.8136455 ], [ 69.0262016, 23.8143302 ], [ 69.0259217, 23.8143302 ], [ 69.0256418, 23.813558 ], [ 69.0242428, 23.8133008 ], [ 69.0242426, 23.8127859 ], [ 69.0234033, 23.8130435 ], [ 69.0232627, 23.8122713 ], [ 69.0225636, 23.811499 ], [ 69.0220041, 23.8117566 ], [ 69.0214441, 23.8102121 ], [ 69.0208847, 23.810083 ], [ 69.0197654, 23.8102123 ], [ 69.0197654, 23.8096975 ], [ 69.0183664, 23.8098258 ], [ 69.0180865, 23.8099551 ], [ 69.018226, 23.8102125 ], [ 69.0180867, 23.8109848 ], [ 69.0186463, 23.8111131 ], [ 69.019206, 23.8114996 ], [ 69.019206, 23.8109848 ], [ 69.0200453, 23.8109846 ], [ 69.0197656, 23.8114994 ], [ 69.0203252, 23.8114994 ], [ 69.0197658, 23.8122717 ], [ 69.0203254, 23.8124 ], [ 69.0208851, 23.8130439 ], [ 69.0203254, 23.8130439 ], [ 69.0206053, 23.8135587 ], [ 69.0183668, 23.8131724 ], [ 69.0178072, 23.8127869 ], [ 69.0176668, 23.812272 ], [ 69.0169676, 23.8114998 ], [ 69.0158484, 23.8116281 ], [ 69.0141697, 23.8125298 ], [ 69.0129106, 23.8163913 ], [ 69.0129106, 23.8169061 ], [ 69.0123509, 23.817421 ], [ 69.0112319, 23.8192231 ], [ 69.010113, 23.8225697 ], [ 69.0094139, 23.823342 ], [ 69.0082946, 23.8235996 ], [ 69.0081542, 23.8243718 ], [ 69.0075946, 23.8251441 ], [ 69.0081546, 23.8282333 ], [ 69.0081548, 23.8320945 ], [ 69.008855, 23.8332525 ], [ 69.0102542, 23.8335098 ], [ 69.0105341, 23.8332524 ], [ 69.0113736, 23.8332524 ], [ 69.0116533, 23.8335098 ], [ 69.0124929, 23.8336389 ], [ 69.0136172, 23.8476517 ], [ 69.0076436, 23.8647243 ], [ 69.0098837, 23.8786083 ], [ 69.0198396, 23.8931735 ], [ 69.0606591, 23.9004555 ], [ 69.0984917, 23.9009106 ], [ 69.102115047195724, 23.90615 ], [ 69.1119676, 23.9203969 ], [ 69.116176229687511, 23.939903942797791 ], [ 69.116176229687511, 23.939903942797788 ], [ 69.1218235, 23.9660791 ], [ 69.1161916, 24.0027419 ], [ 69.1211195, 24.0236415 ], [ 69.1408313, 24.0210694 ], [ 69.1445574, 24.0324321 ], [ 69.1714385, 24.0758435 ], [ 69.1947171, 24.1107799 ], [ 69.2101974, 24.1146963 ], [ 69.2248364, 24.1156946 ], [ 69.2382134, 24.1116247 ], [ 69.2341751, 24.1205322 ], [ 69.2187789, 24.127366 ], [ 69.2093561, 24.1267517 ], [ 69.192109, 24.128057 ], [ 69.1742899, 24.1252292 ], [ 69.1615018, 24.1227721 ], [ 69.1505646, 24.1215436 ], [ 69.1360097, 24.1173203 ], [ 69.1260089, 24.1152524 ], [ 69.1195307, 24.1148685 ], [ 69.1179259, 24.1202925 ], [ 69.115976229687504, 24.121872598018463 ], [ 69.115976229687504, 24.121872598018467 ], [ 69.110689, 24.1261576 ], [ 69.1067625, 24.1264178 ], [ 69.1064822, 24.1266754 ], [ 69.1053603, 24.1266762 ], [ 69.1045194, 24.1273209 ], [ 69.1046587, 24.1268058 ], [ 69.1050794, 24.1262908 ], [ 69.1028358, 24.1265497 ], [ 69.102836, 24.1268072 ], [ 69.1042386, 24.1268062 ], [ 69.104239, 24.127321 ], [ 69.1031171, 24.1274499 ], [ 69.102276, 24.1279653 ], [ 69.1017151, 24.1279657 ], [ 69.1011545, 24.1283528 ], [ 69.1011549, 24.1288676 ], [ 69.1008744, 24.1288678 ], [ 69.100874, 24.128353 ], [ 69.0997519, 24.1282245 ], [ 69.0994713, 24.1280965 ], [ 69.0994718, 24.1286112 ], [ 69.0969466, 24.1275832 ], [ 69.0972278, 24.1286127 ], [ 69.0966669, 24.128484 ], [ 69.0958249, 24.1278414 ], [ 69.0958253, 24.1283562 ], [ 69.0941424, 24.1283571 ], [ 69.0938625, 24.1291296 ], [ 69.0924597, 24.1287438 ], [ 69.0913378, 24.1287446 ], [ 69.0907771, 24.1290024 ], [ 69.0876916, 24.1291334 ], [ 69.0878313, 24.1288758 ], [ 69.0876913, 24.1283611 ], [ 69.0871303, 24.1283613 ], [ 69.0872696, 24.1278465 ], [ 69.0874102, 24.1277172 ], [ 69.0879714, 24.1278461 ], [ 69.0876903, 24.127074 ], [ 69.0871296, 24.1273316 ], [ 69.0871292, 24.1268168 ], [ 69.0876901, 24.1268166 ], [ 69.0876896, 24.1260444 ], [ 69.087129, 24.1264303 ], [ 69.0860071, 24.1265601 ], [ 69.0860073, 24.1268175 ], [ 69.0865682, 24.1268172 ], [ 69.0862881, 24.1273322 ], [ 69.0857272, 24.1274607 ], [ 69.0851666, 24.1278476 ], [ 69.0851668, 24.1283624 ], [ 69.0846058, 24.1282337 ], [ 69.0837646, 24.1286206 ], [ 69.083765, 24.1291354 ], [ 69.0843259, 24.1291353 ], [ 69.0843261, 24.1293927 ], [ 69.0829235, 24.1292642 ], [ 69.0823628, 24.129651 ], [ 69.0822227, 24.1306809 ], [ 69.0818033, 24.1319682 ], [ 69.0812422, 24.1318393 ], [ 69.0801203, 24.1319691 ], [ 69.0804012, 24.1324838 ], [ 69.0795597, 24.1324841 ], [ 69.0795601, 24.132999 ], [ 69.0789988, 24.1326127 ], [ 69.0787183, 24.1326129 ], [ 69.078438, 24.1328705 ], [ 69.0759137, 24.1332583 ], [ 69.0760536, 24.1335155 ], [ 69.0760543, 24.1345452 ], [ 69.0764756, 24.1348024 ], [ 69.0764754, 24.1342876 ], [ 69.0768958, 24.1345448 ], [ 69.0767563, 24.1350598 ], [ 69.0759149, 24.1350602 ], [ 69.075915, 24.1353176 ], [ 69.076476, 24.1354456 ], [ 69.0766159, 24.1355747 ], [ 69.0764773, 24.137634 ], [ 69.0759164, 24.1376344 ], [ 69.0759167, 24.1384067 ], [ 69.0764779, 24.1384063 ], [ 69.0760568, 24.1389213 ], [ 69.0759177, 24.139951 ], [ 69.0756372, 24.1399512 ], [ 69.0754957, 24.1386643 ], [ 69.0750751, 24.1381496 ], [ 69.0736728, 24.1384076 ], [ 69.0733932, 24.1402097 ], [ 69.0739544, 24.1402095 ], [ 69.0738139, 24.1409818 ], [ 69.0732532, 24.1414968 ], [ 69.0726926, 24.1422694 ], [ 69.0726928, 24.1425269 ], [ 69.0729735, 24.1427841 ], [ 69.0731144, 24.1432989 ], [ 69.0736756, 24.1432985 ], [ 69.0736758, 24.143556 ], [ 69.0731148, 24.1436845 ], [ 69.0725539, 24.1440714 ], [ 69.0726932, 24.1430417 ], [ 69.0725531, 24.1427843 ], [ 69.0719922, 24.1427845 ], [ 69.0722713, 24.1402103 ], [ 69.0708687, 24.1404683 ], [ 69.0707276, 24.1394388 ], [ 69.0710079, 24.1391812 ], [ 69.0711473, 24.1368644 ], [ 69.0705866, 24.1372503 ], [ 69.0700256, 24.1373798 ], [ 69.0697457, 24.1384095 ], [ 69.0691846, 24.1381524 ], [ 69.0691853, 24.1396968 ], [ 69.0697463, 24.1396966 ], [ 69.0697465, 24.139954 ], [ 69.0691855, 24.1399542 ], [ 69.0691857, 24.140469 ], [ 69.0689052, 24.1404692 ], [ 69.0684834, 24.1394397 ], [ 69.068624, 24.1389249 ], [ 69.0680629, 24.1389251 ], [ 69.0680632, 24.1394399 ], [ 69.0663802, 24.1394407 ], [ 69.0661001, 24.1402131 ], [ 69.0655389, 24.1402133 ], [ 69.0655388, 24.1396985 ], [ 69.0652583, 24.1396987 ], [ 69.0651177, 24.1402135 ], [ 69.0648374, 24.1404709 ], [ 69.0646979, 24.1409859 ], [ 69.0599292, 24.1409878 ], [ 69.0597886, 24.1415027 ], [ 69.0590882, 24.1422753 ], [ 69.0585272, 24.1424036 ], [ 69.0579665, 24.1427905 ], [ 69.0581063, 24.1433053 ], [ 69.0574061, 24.1443352 ], [ 69.0568449, 24.1443354 ], [ 69.0569852, 24.1451076 ], [ 69.057126, 24.1452358 ], [ 69.0576869, 24.1453647 ], [ 69.0576868, 24.1445924 ], [ 69.0582477, 24.1445922 ], [ 69.0581075, 24.1458795 ], [ 69.0579678, 24.1461369 ], [ 69.0562846, 24.1454936 ], [ 69.0557234, 24.1456229 ], [ 69.0557232, 24.1448506 ], [ 69.0551621, 24.1448508 ], [ 69.0554429, 24.145623 ], [ 69.0546013, 24.1456232 ], [ 69.0546017, 24.1461381 ], [ 69.0540406, 24.1461383 ], [ 69.0540408, 24.1463957 ], [ 69.0551628, 24.1463953 ], [ 69.055163, 24.1469101 ], [ 69.0540408, 24.1467814 ], [ 69.0534796, 24.1465242 ], [ 69.0531991, 24.1465244 ], [ 69.0517968, 24.1469113 ], [ 69.0517969, 24.1474261 ], [ 69.0512358, 24.1474263 ], [ 69.0515159, 24.1463966 ], [ 69.0512354, 24.1463968 ], [ 69.0509551, 24.1471691 ], [ 69.049833, 24.1470404 ], [ 69.0495524, 24.1467829 ], [ 69.0489914, 24.1469122 ], [ 69.0487113, 24.1479421 ], [ 69.0498332, 24.1475552 ], [ 69.0501137, 24.1474267 ], [ 69.0498342, 24.1497436 ], [ 69.0509561, 24.1494858 ], [ 69.0509559, 24.148971 ], [ 69.0512364, 24.1489708 ], [ 69.0512369, 24.1502579 ], [ 69.0509565, 24.1501288 ], [ 69.0498342, 24.1501292 ], [ 69.0495537, 24.149872 ], [ 69.0484316, 24.1501298 ], [ 69.0473095, 24.1500018 ], [ 69.0474048, 24.1495745 ], [ 69.0484314, 24.149744 ], [ 69.0484312, 24.1489718 ], [ 69.0473091, 24.1492295 ], [ 69.0472128, 24.1493985 ], [ 69.0461872, 24.1497448 ], [ 69.0459064, 24.1489725 ], [ 69.0464675, 24.1491006 ], [ 69.0475896, 24.1489721 ], [ 69.0475892, 24.1479425 ], [ 69.0481502, 24.1479423 ], [ 69.0478693, 24.1466552 ], [ 69.0484303, 24.146655 ], [ 69.0482895, 24.1463978 ], [ 69.0482891, 24.1456255 ], [ 69.0481492, 24.1453681 ], [ 69.0470273, 24.1456259 ], [ 69.0470275, 24.1461407 ], [ 69.045625, 24.1465268 ], [ 69.0453445, 24.1467843 ], [ 69.0445031, 24.1469137 ], [ 69.0445032, 24.1474286 ], [ 69.0436616, 24.1472997 ], [ 69.0425397, 24.1482014 ], [ 69.0425399, 24.1487162 ], [ 69.0431011, 24.148716 ], [ 69.0431009, 24.1482012 ], [ 69.0436618, 24.148201 ], [ 69.0433819, 24.1494881 ], [ 69.0428208, 24.1494883 ], [ 69.0426803, 24.1502605 ], [ 69.0423999, 24.1505181 ], [ 69.0419801, 24.1520627 ], [ 69.041419, 24.1519338 ], [ 69.0411383, 24.1516763 ], [ 69.0405772, 24.1516765 ], [ 69.0394554, 24.1525782 ], [ 69.0391746, 24.1515486 ], [ 69.0386134, 24.1515488 ], [ 69.0384728, 24.1520636 ], [ 69.0381923, 24.152321 ], [ 69.0381927, 24.1533507 ], [ 69.0387541, 24.1541229 ], [ 69.0386144, 24.1546378 ], [ 69.0380532, 24.1543804 ], [ 69.037773, 24.1551528 ], [ 69.0374923, 24.1550237 ], [ 69.0360895, 24.1548958 ], [ 69.0359491, 24.1559254 ], [ 69.0353882, 24.1566979 ], [ 69.034968, 24.1572127 ], [ 69.0344069, 24.157341 ], [ 69.0338459, 24.1578561 ], [ 69.033285, 24.1578563 ], [ 69.0330043, 24.1577279 ], [ 69.0330043, 24.1574705 ], [ 69.0335653, 24.1574705 ], [ 69.0335653, 24.1569557 ], [ 69.0330041, 24.157084 ], [ 69.0324432, 24.157599 ], [ 69.0313209, 24.1573418 ], [ 69.0307599, 24.157342 ], [ 69.0304793, 24.1574711 ], [ 69.0304789, 24.1556692 ], [ 69.0299179, 24.1559268 ], [ 69.0299181, 24.1569564 ], [ 69.028796, 24.157214 ], [ 69.0290763, 24.1564418 ], [ 69.0285154, 24.1566992 ], [ 69.0280943, 24.1577291 ], [ 69.0280945, 24.1590162 ], [ 69.027814, 24.1592736 ], [ 69.0278142, 24.1597884 ], [ 69.027955, 24.1599166 ], [ 69.0293577, 24.1603029 ], [ 69.0292171, 24.1610751 ], [ 69.028797, 24.1615901 ], [ 69.0293581, 24.16159 ], [ 69.0287972, 24.1623624 ], [ 69.028236, 24.1623624 ], [ 69.0285163, 24.1615901 ], [ 69.0282358, 24.1617185 ], [ 69.0276747, 24.1617185 ], [ 69.0273942, 24.1615903 ], [ 69.027394, 24.1610755 ], [ 69.0265524, 24.1613331 ], [ 69.0264116, 24.1608183 ], [ 69.0259911, 24.1603034 ], [ 69.0254299, 24.1603036 ], [ 69.0259913, 24.1610757 ], [ 69.0251496, 24.1610759 ], [ 69.0254303, 24.1618481 ], [ 69.0248692, 24.1618481 ], [ 69.0248694, 24.1626204 ], [ 69.0254305, 24.1626204 ], [ 69.0254307, 24.1633926 ], [ 69.0248696, 24.1633926 ], [ 69.0248694, 24.1628778 ], [ 69.0243082, 24.1627487 ], [ 69.0237471, 24.1622341 ], [ 69.0231859, 24.1622341 ], [ 69.0220637, 24.161462 ], [ 69.0215025, 24.1615913 ], [ 69.0213619, 24.1623635 ], [ 69.0208008, 24.1628786 ], [ 69.0208009, 24.1633932 ], [ 69.0212222, 24.163908 ], [ 69.0200999, 24.1636508 ], [ 69.0200999, 24.163136 ], [ 69.0164528, 24.1639086 ], [ 69.0161723, 24.1649383 ], [ 69.0144889, 24.1648094 ], [ 69.0139278, 24.1651959 ], [ 69.0139278, 24.1646812 ], [ 69.0130862, 24.1649387 ], [ 69.013226, 24.1662258 ], [ 69.0130863, 24.1664832 ], [ 69.0128057, 24.1663541 ], [ 69.0116834, 24.1663541 ], [ 69.0114029, 24.1662259 ], [ 69.0114027, 24.1657111 ], [ 69.0111223, 24.1657111 ], [ 69.0108418, 24.1664834 ], [ 69.0102806, 24.1666117 ], [ 69.0097195, 24.1669982 ], [ 69.0095787, 24.167513 ], [ 69.0091584, 24.1680279 ], [ 69.0088779, 24.1678988 ], [ 69.0083167, 24.1678988 ], [ 69.0080361, 24.1680281 ], [ 69.0080363, 24.1688001 ], [ 69.0077556, 24.168671 ], [ 69.0071945, 24.168671 ], [ 69.005511, 24.1693151 ], [ 69.0056509, 24.1708597 ], [ 69.0052306, 24.1713745 ], [ 69.0046694, 24.1712454 ], [ 69.0038276, 24.1718893 ], [ 69.0038276, 24.1711171 ], [ 69.0032665, 24.1713745 ], [ 69.0032665, 24.1708597 ], [ 69.0021442, 24.1711171 ], [ 69.0021442, 24.1718893 ], [ 69.0018637, 24.1718893 ], [ 69.001583, 24.1711171 ], [ 69.0013024, 24.1711171 ], [ 69.0011618, 24.1716319 ], [ 69.0007412, 24.1721467 ], [ 69.0001801, 24.1722751 ], [ 68.9993385, 24.1726616 ], [ 68.9994782, 24.1731764 ], [ 68.999619, 24.1733047 ], [ 69.0004608, 24.1744635 ], [ 69.0013026, 24.1745918 ], [ 69.0017229, 24.1749783 ], [ 69.0018637, 24.1754932 ], [ 69.0013026, 24.1751067 ], [ 69.0010219, 24.1751067 ], [ 69.0001801, 24.1756215 ], [ 68.9998996, 24.1757506 ], [ 68.9998996, 24.176008 ], [ 69.0007414, 24.176008 ], [ 69.0007414, 24.1762654 ], [ 69.0001801, 24.1763938 ], [ 68.999619, 24.1766512 ], [ 68.9984967, 24.1765228 ], [ 68.9979353, 24.1778099 ], [ 68.9987772, 24.1775525 ], [ 68.998917, 24.1780674 ], [ 68.9993383, 24.1784529 ], [ 69.0001801, 24.1787103 ], [ 69.00032, 24.1788396 ], [ 69.0006006, 24.1801267 ], [ 69.0017229, 24.1811564 ], [ 69.0015832, 24.1819286 ], [ 69.0010219, 24.1815419 ], [ 69.0004608, 24.1816712 ], [ 69.0010219, 24.1824435 ], [ 69.0001801, 24.1823142 ], [ 68.998216, 24.1823142 ], [ 68.9979353, 24.1825716 ], [ 68.9970935, 24.182829 ], [ 68.9962517, 24.182829 ], [ 68.996221152908674, 24.182843054274738 ], [ 68.9959711, 24.1829581 ], [ 68.9959711, 24.1834729 ], [ 68.996023914843761, 24.183469431353814 ], [ 68.9979353, 24.1833439 ], [ 68.998216, 24.1830864 ], [ 68.9990578, 24.1830864 ], [ 68.9997588, 24.1834729 ], [ 68.9997588, 24.1839878 ], [ 68.9991975, 24.1845026 ], [ 68.9990578, 24.1850175 ], [ 68.9984965, 24.18476 ], [ 68.9986363, 24.1857897 ], [ 68.9987772, 24.185918 ], [ 68.999619, 24.185918 ], [ 68.9998996, 24.1857897 ], [ 69.0000393, 24.1865479 ], [ 69.0001801, 24.1870768 ], [ 68.999619, 24.1869336 ], [ 68.9987772, 24.1864329 ], [ 68.9979353, 24.186562 ], [ 68.9986363, 24.1875916 ], [ 68.9987772, 24.1881065 ], [ 68.9982158, 24.1881065 ], [ 68.9984965, 24.1888787 ], [ 68.9990576, 24.1887496 ], [ 68.9994782, 24.1891361 ], [ 68.999619, 24.1899084 ], [ 69.0001801, 24.1899084 ], [ 69.0001801, 24.1909381 ], [ 68.9998996, 24.1908088 ], [ 68.9993383, 24.1902941 ], [ 68.9979352, 24.1899084 ], [ 68.9977501, 24.1892236 ], [ 68.9982158, 24.1891361 ], [ 68.9982158, 24.1886213 ], [ 68.9976547, 24.1886213 ], [ 68.9975581, 24.1890477 ], [ 68.9968129, 24.1888787 ], [ 68.9970934, 24.1899084 ], [ 68.9976547, 24.1899084 ], [ 68.9976547, 24.1901658 ], [ 68.9965322, 24.1900365 ], [ 68.9962515, 24.1897791 ], [ 68.996023914843761, 24.18972716046942 ], [ 68.9956902, 24.189651 ], [ 68.996023914843761, 24.190033288695062 ], [ 68.996023914843761, 24.190033288695066 ], [ 68.9962515, 24.190294 ], [ 68.9968127, 24.1904232 ], [ 68.996532, 24.1911955 ], [ 68.9962515, 24.1909381 ], [ 68.996223914843767, 24.190931768980537 ], [ 68.996173834757684, 24.190920275190287 ], [ 68.996023914843761, 24.190885867341191 ], [ 68.9951291, 24.1906805 ], [ 68.9949883, 24.1914527 ], [ 68.9959709, 24.1920959 ], [ 68.996023914843761, 24.192108116751559 ], [ 68.996189386634683, 24.192146248105267 ], [ 68.996223914843767, 24.192154204792907 ], [ 68.996532, 24.1922252 ], [ 68.996023914843761, 24.191681021362715 ], [ 68.9956902, 24.1913236 ], [ 68.996023914843761, 24.19129445020943 ], [ 68.996155, 24.191283 ], [ 68.996223914843767, 24.19140433297364 ], [ 68.9962515, 24.1914529 ], [ 68.9968127, 24.1913236 ], [ 68.9970934, 24.1910662 ], [ 68.9976547, 24.1909381 ], [ 68.9972332, 24.1914529 ], [ 68.9970934, 24.1922252 ], [ 68.9976545, 24.1919677 ], [ 68.9976545, 24.1924826 ], [ 68.9984965, 24.1926107 ], [ 68.9993383, 24.1923533 ], [ 68.999619, 24.1917103 ], [ 68.9998996, 24.1913236 ], [ 69.0004608, 24.1913236 ], [ 69.0008813, 24.1917103 ], [ 69.0008813, 24.1922252 ], [ 69.0007414, 24.1924826 ], [ 69.0027059, 24.1923533 ], [ 69.0028456, 24.1924826 ], [ 69.0027059, 24.1929974 ], [ 69.0010221, 24.1929974 ], [ 69.0010221, 24.1932548 ], [ 69.0015832, 24.1932548 ], [ 69.0015832, 24.1937697 ], [ 69.0021446, 24.1937697 ], [ 69.0022844, 24.1942843 ], [ 69.0027059, 24.1945417 ], [ 69.0029864, 24.1935121 ], [ 69.0038284, 24.1932546 ], [ 69.0038284, 24.1937695 ], [ 69.0046702, 24.1937695 ], [ 69.0046702, 24.1942843 ], [ 69.0052315, 24.1940269 ], [ 69.0052315, 24.1947991 ], [ 69.0046702, 24.1946701 ], [ 69.0043897, 24.1947991 ], [ 69.0043897, 24.1950566 ], [ 69.0055122, 24.1950566 ], [ 69.005652, 24.1942843 ], [ 69.0064938, 24.1932546 ], [ 69.0069151, 24.1929972 ], [ 69.007196, 24.1940269 ], [ 69.0066346, 24.1940269 ], [ 69.0067745, 24.1947991 ], [ 69.0062134, 24.1955714 ], [ 69.0057928, 24.1960862 ], [ 69.004951, 24.1960862 ], [ 69.004951, 24.1968585 ], [ 69.0060735, 24.1964718 ], [ 69.0063542, 24.1962144 ], [ 69.0069153, 24.1960862 ], [ 69.0066348, 24.1968585 ], [ 69.0060735, 24.1969866 ], [ 69.0055124, 24.1973733 ], [ 69.005652, 24.1981456 ], [ 69.005793, 24.1982737 ], [ 69.0063542, 24.1984028 ], [ 69.0066348, 24.1971159 ], [ 69.0074766, 24.1971157 ], [ 69.0071962, 24.1976306 ], [ 69.0077573, 24.1976306 ], [ 69.0074768, 24.1984028 ], [ 69.0083186, 24.1985311 ], [ 69.0084585, 24.1986602 ], [ 69.0083188, 24.1991751 ], [ 69.0077575, 24.1991751 ], [ 69.0083188, 24.200977 ], [ 69.0077575, 24.200977 ], [ 69.0077577, 24.2014918 ], [ 69.0111253, 24.2013624 ], [ 69.0114059, 24.2012342 ], [ 69.0116868, 24.2027785 ], [ 69.0105641, 24.2030361 ], [ 69.0102837, 24.2048381 ], [ 69.0097223, 24.2048381 ], [ 69.0095815, 24.2053529 ], [ 69.0091612, 24.2058677 ], [ 69.0085999, 24.2058677 ], [ 69.0088803, 24.2045807 ], [ 69.0080383, 24.2045807 ], [ 69.0083192, 24.2053529 ], [ 69.0077579, 24.2053529 ], [ 69.0077579, 24.2048383 ], [ 69.0060739, 24.2050957 ], [ 69.0066352, 24.2057387 ], [ 69.0069159, 24.2057387 ], [ 69.0071965, 24.2054812 ], [ 69.0074772, 24.2054812 ], [ 69.0076171, 24.2056103 ], [ 69.0074774, 24.2079271 ], [ 69.0069161, 24.2080554 ], [ 69.0055127, 24.2092144 ], [ 69.0057934, 24.2084421 ], [ 69.0052321, 24.2083128 ], [ 69.0049514, 24.2080554 ], [ 69.0046707, 24.2080554 ], [ 69.0041094, 24.2084421 ], [ 69.0041094, 24.2089569 ], [ 69.0049514, 24.2086995 ], [ 69.0048106, 24.2097292 ], [ 69.0045299, 24.2099866 ], [ 69.0041096, 24.2110163 ], [ 69.0024256, 24.2112737 ], [ 69.0022848, 24.2117885 ], [ 69.0020041, 24.212046 ], [ 69.0021449, 24.2133331 ], [ 69.0027063, 24.2130756 ], [ 69.0021449, 24.2146201 ], [ 69.001303, 24.2146201 ], [ 69.001303, 24.2141053 ], [ 69.0007416, 24.2141053 ], [ 69.0007416, 24.2148776 ], [ 69.0001803, 24.2150057 ], [ 68.9998996, 24.2152631 ], [ 68.9993381, 24.215135 ], [ 68.999478, 24.2143627 ], [ 68.9998996, 24.213976 ], [ 68.999619, 24.2137186 ], [ 68.9990574, 24.2142335 ], [ 68.9973735, 24.2142335 ], [ 68.9970928, 24.2143625 ], [ 68.9973735, 24.2151348 ], [ 68.9965315, 24.2153922 ], [ 68.9966713, 24.2166793 ], [ 68.9963907, 24.2169367 ], [ 68.9962508, 24.2174516 ], [ 68.996223914843767, 24.2174516 ], [ 68.996023914843761, 24.2174516 ], [ 68.9956893, 24.2174516 ], [ 68.9954086, 24.2182238 ], [ 68.9959699, 24.2182238 ], [ 68.996023914843761, 24.21842256226995 ], [ 68.996023914843761, 24.218422562269954 ], [ 68.9961098, 24.2187386 ], [ 68.9962506, 24.218867 ], [ 68.9968121, 24.218867 ], [ 68.9975133, 24.2184812 ], [ 68.9976541, 24.2174516 ], [ 68.9982154, 24.2174516 ], [ 68.9979348, 24.2182238 ], [ 68.9990574, 24.2180947 ], [ 68.9998996, 24.2183521 ], [ 69.0000395, 24.2184812 ], [ 69.0007416, 24.2192535 ], [ 69.0001803, 24.2191244 ], [ 68.9996188, 24.218867 ], [ 68.9979348, 24.2192535 ], [ 68.9979348, 24.2197683 ], [ 68.9984961, 24.2197683 ], [ 68.9982154, 24.2202832 ], [ 68.9973735, 24.2204113 ], [ 68.9970928, 24.2201539 ], [ 68.9965313, 24.2200257 ], [ 68.9962506, 24.2192535 ], [ 68.996023914843761, 24.219149547106333 ], [ 68.9956893, 24.2189961 ], [ 68.9879699, 24.2195105 ], [ 68.9875494, 24.2189955 ], [ 68.9869881, 24.2192529 ], [ 68.9867074, 24.2200252 ], [ 68.9853039, 24.2205398 ], [ 68.9853039, 24.2197676 ], [ 68.9847426, 24.2197676 ], [ 68.9848824, 24.2195101 ], [ 68.9848826, 24.2189953 ], [ 68.9851635, 24.2166787 ], [ 68.9854442, 24.2164213 ], [ 68.9855851, 24.2156491 ], [ 68.9844625, 24.2153915 ], [ 68.9844625, 24.215134 ], [ 68.9853045, 24.2151342 ], [ 68.985024, 24.214362 ], [ 68.9841818, 24.2146192 ], [ 68.984182, 24.2141044 ], [ 68.9833398, 24.2142325 ], [ 68.9824978, 24.214619 ], [ 68.9824976, 24.2153913 ], [ 68.9819363, 24.2153913 ], [ 68.9819365, 24.2148764 ], [ 68.9808137, 24.2156485 ], [ 68.9809533, 24.2166782 ], [ 68.9801111, 24.2174502 ], [ 68.9801111, 24.2182225 ], [ 68.9808131, 24.2196379 ], [ 68.9816551, 24.2197672 ], [ 68.9815141, 24.220282 ], [ 68.9809528, 24.2207969 ], [ 68.9798297, 24.2225986 ], [ 68.9798295, 24.2236283 ], [ 68.979268, 24.2244003 ], [ 68.9788473, 24.2249152 ], [ 68.978286, 24.224915 ], [ 68.9785664, 24.2267169 ], [ 68.9791278, 24.2268452 ], [ 68.9795483, 24.2272319 ], [ 68.9794081, 24.2287764 ], [ 68.9799696, 24.2287764 ], [ 68.9799696, 24.2290339 ], [ 68.9788467, 24.229162 ], [ 68.9782852, 24.2294192 ], [ 68.9780045, 24.2294192 ], [ 68.9774432, 24.2290335 ], [ 68.9774432, 24.2285186 ], [ 68.9768819, 24.2285186 ], [ 68.9770217, 24.2287761 ], [ 68.9770216, 24.2292909 ], [ 68.9775829, 24.2298057 ], [ 68.9775829, 24.2303206 ], [ 68.977302, 24.230578 ], [ 68.9771622, 24.2310928 ], [ 68.9760393, 24.2305778 ], [ 68.9757585, 24.2316075 ], [ 68.9751971, 24.2314782 ], [ 68.9749165, 24.2312206 ], [ 68.974355, 24.2310923 ], [ 68.9746356, 24.2318647 ], [ 68.9737936, 24.2312204 ], [ 68.9732321, 24.2310921 ], [ 68.9730915, 24.2305772 ], [ 68.9732327, 24.2290329 ], [ 68.9735133, 24.2290329 ], [ 68.973653, 24.2295477 ], [ 68.9737938, 24.2296761 ], [ 68.9740747, 24.2296761 ], [ 68.9742145, 24.2295477 ], [ 68.9739341, 24.2280032 ], [ 68.9739344, 24.2264589 ], [ 68.9735139, 24.2259439 ], [ 68.9732332, 24.2259439 ], [ 68.9735133, 24.2285181 ], [ 68.9715487, 24.2280029 ], [ 68.9718292, 24.2283886 ], [ 68.9723905, 24.228646 ], [ 68.9726712, 24.2290327 ], [ 68.9712676, 24.2290325 ], [ 68.9709872, 24.2282603 ], [ 68.9704258, 24.2282601 ], [ 68.970285, 24.2277453 ], [ 68.9694432, 24.2267154 ], [ 68.9681809, 24.2254281 ], [ 68.967058, 24.2254279 ], [ 68.9669174, 24.2249129 ], [ 68.9666368, 24.2246555 ], [ 68.9664969, 24.2241406 ], [ 68.9653742, 24.2240112 ], [ 68.9645322, 24.2236254 ], [ 68.9648131, 24.2228532 ], [ 68.9625678, 24.2227235 ], [ 68.9622871, 24.2225952 ], [ 68.9625676, 24.2233674 ], [ 68.9620061, 24.2233674 ], [ 68.9620063, 24.2228526 ], [ 68.9606027, 24.2232378 ], [ 68.9600412, 24.2237526 ], [ 68.9575145, 24.2252964 ], [ 68.956953, 24.2254253 ], [ 68.9569528, 24.2261975 ], [ 68.9583563, 24.2260688 ], [ 68.9589178, 24.2255542 ], [ 68.9600407, 24.2254262 ], [ 68.9601807, 24.2243965 ], [ 68.9606024, 24.2241393 ], [ 68.9604612, 24.2251688 ], [ 68.960602, 24.2252971 ], [ 68.9614442, 24.2254266 ], [ 68.9611633, 24.2259412 ], [ 68.9606018, 24.2259411 ], [ 68.9606016, 24.2264559 ], [ 68.959479, 24.2263264 ], [ 68.9589174, 24.2264555 ], [ 68.9589174, 24.2269704 ], [ 68.9569522, 24.2274846 ], [ 68.956952, 24.2279995 ], [ 68.9555485, 24.2279991 ], [ 68.9555483, 24.2285139 ], [ 68.9569518, 24.2285143 ], [ 68.9569518, 24.2287717 ], [ 68.9538641, 24.2287708 ], [ 68.953864, 24.2292856 ], [ 68.953022, 24.229028 ], [ 68.9533024, 24.2295428 ], [ 68.9518987, 24.2297999 ], [ 68.9516179, 24.2305719 ], [ 68.9524599, 24.2307005 ], [ 68.9527405, 24.2309581 ], [ 68.9538632, 24.2310875 ], [ 68.9538634, 24.2305727 ], [ 68.9547056, 24.2304438 ], [ 68.9566702, 24.231474 ], [ 68.9570907, 24.2318607 ], [ 68.9569507, 24.2323754 ], [ 68.9561085, 24.2321178 ], [ 68.9563896, 24.2316031 ], [ 68.9555474, 24.2314737 ], [ 68.9552667, 24.2316027 ], [ 68.9552663, 24.232375 ], [ 68.9558279, 24.2323752 ], [ 68.9558277, 24.2326326 ], [ 68.954705, 24.2323748 ], [ 68.9547052, 24.23186 ], [ 68.953863, 24.2318598 ], [ 68.9538628, 24.2323746 ], [ 68.9533015, 24.232117 ], [ 68.9533013, 24.2326318 ], [ 68.9524591, 24.2326315 ], [ 68.9524595, 24.2318592 ], [ 68.9521786, 24.2319875 ], [ 68.9516173, 24.2319874 ], [ 68.9510556, 24.2323737 ], [ 68.9510562, 24.231344 ], [ 68.9504946, 24.2312147 ], [ 68.9499333, 24.2313436 ], [ 68.9496521, 24.2323733 ], [ 68.9490908, 24.2322438 ], [ 68.9488099, 24.2323729 ], [ 68.9490904, 24.2331454 ], [ 68.9496519, 24.2331455 ], [ 68.9496517, 24.2334028 ], [ 68.9490904, 24.2334028 ], [ 68.9490902, 24.23366 ], [ 68.9496517, 24.2336602 ], [ 68.9496513, 24.234175 ], [ 68.9510548, 24.234433 ], [ 68.9506332, 24.2349477 ], [ 68.9504931, 24.2354625 ], [ 68.9499318, 24.2350756 ], [ 68.9493705, 24.2349473 ], [ 68.9496508, 24.2357195 ], [ 68.9485279, 24.2357192 ], [ 68.9485283, 24.2349469 ], [ 68.9479668, 24.2349467 ], [ 68.947967, 24.2344319 ], [ 68.9465634, 24.2343022 ], [ 68.9462828, 24.2344313 ], [ 68.9462826, 24.2349462 ], [ 68.9468439, 24.2349463 ], [ 68.9467029, 24.2354612 ], [ 68.9464221, 24.2357184 ], [ 68.9464219, 24.2359758 ], [ 68.946983, 24.2367483 ], [ 68.9472631, 24.238293 ], [ 68.9474039, 24.2384211 ], [ 68.9479653, 24.2385506 ], [ 68.947684, 24.2398375 ], [ 68.9482455, 24.2398377 ], [ 68.9481044, 24.2406099 ], [ 68.9468411, 24.2418964 ], [ 68.9459989, 24.2416388 ], [ 68.9457177, 24.2429257 ], [ 68.9462792, 24.2430543 ], [ 68.9465597, 24.2433117 ], [ 68.9474019, 24.243312 ], [ 68.948103, 24.2439562 ], [ 68.9485238, 24.2460157 ], [ 68.9493659, 24.2460159 ], [ 68.9493665, 24.244729 ], [ 68.949787, 24.2449864 ], [ 68.9496466, 24.2465309 ], [ 68.9490851, 24.2465307 ], [ 68.9490849, 24.2467881 ], [ 68.9502079, 24.2467885 ], [ 68.9493652, 24.2480752 ], [ 68.9490845, 24.2480752 ], [ 68.9490849, 24.2470456 ], [ 68.9485234, 24.2470454 ], [ 68.9488037, 24.248075 ], [ 68.948523, 24.2479458 ], [ 68.9474, 24.2479454 ], [ 68.9462775, 24.2470446 ], [ 68.9462777, 24.2465298 ], [ 68.9451546, 24.2465294 ], [ 68.9452945, 24.2467868 ], [ 68.9454346, 24.2483313 ], [ 68.9451539, 24.2483311 ], [ 68.9448736, 24.2473015 ], [ 68.9443121, 24.2475587 ], [ 68.9443117, 24.2480735 ], [ 68.944031, 24.2480733 ], [ 68.9438906, 24.2470437 ], [ 68.9441715, 24.2467864 ], [ 68.9441717, 24.2462716 ], [ 68.9445935, 24.2458851 ], [ 68.9451548, 24.2460146 ], [ 68.9448745, 24.2449847 ], [ 68.9457167, 24.2452425 ], [ 68.9454364, 24.2442126 ], [ 68.9448749, 24.2440834 ], [ 68.9445944, 24.2438259 ], [ 68.9429101, 24.243697 ], [ 68.9429101, 24.2434396 ], [ 68.9440331, 24.24344 ], [ 68.9437525, 24.242925 ], [ 68.9423487, 24.243182 ], [ 68.9420687, 24.2416373 ], [ 68.9415071, 24.2418945 ], [ 68.9413667, 24.2411223 ], [ 68.941086, 24.2408647 ], [ 68.941227, 24.24035 ], [ 68.9398235, 24.2402202 ], [ 68.9395429, 24.2400919 ], [ 68.939543, 24.239577 ], [ 68.938701, 24.2394476 ], [ 68.9378591, 24.2389323 ], [ 68.9372977, 24.238804 ], [ 68.9372973, 24.2393189 ], [ 68.9364554, 24.2390611 ], [ 68.9363142, 24.2395757 ], [ 68.9357525, 24.2400904 ], [ 68.9356124, 24.2406052 ], [ 68.9347704, 24.2403474 ], [ 68.9349093, 24.2421493 ], [ 68.9350499, 24.2424067 ], [ 68.9336462, 24.2426636 ], [ 68.9339273, 24.2421489 ], [ 68.9330849, 24.242406 ], [ 68.9340664, 24.243436 ], [ 68.934066, 24.2442083 ], [ 68.9343467, 24.2444657 ], [ 68.9343463, 24.2449805 ], [ 68.9339256, 24.2454952 ], [ 68.9347678, 24.2453665 ], [ 68.9350484, 24.2456239 ], [ 68.9356098, 24.2457534 ], [ 68.9357492, 24.246783 ], [ 68.9364512, 24.2474264 ], [ 68.9370125, 24.247684 ], [ 68.9375737, 24.2483283 ], [ 68.9370123, 24.2483281 ], [ 68.9382743, 24.249873 ], [ 68.9384149, 24.250388 ], [ 68.9398188, 24.2503884 ], [ 68.9399585, 24.2509034 ], [ 68.9409413, 24.2515468 ], [ 68.9415028, 24.251547 ], [ 68.9417833, 24.2518046 ], [ 68.9426253, 24.2525772 ], [ 68.9431868, 24.2527065 ], [ 68.9431866, 24.2532213 ], [ 68.9437481, 24.2530924 ], [ 68.9443094, 24.25335 ], [ 68.9451514, 24.2541225 ], [ 68.9465549, 24.2548953 ], [ 68.9471165, 24.2547671 ], [ 68.9471161, 24.2555394 ], [ 68.9490813, 24.2559257 ], [ 68.949362, 24.2561833 ], [ 68.9507657, 24.2564411 ], [ 68.9518885, 24.2572138 ], [ 68.9535729, 24.2577292 ], [ 68.9544153, 24.2577293 ], [ 68.9558188, 24.258502 ], [ 68.9563803, 24.2585022 ], [ 68.9569418, 24.2587598 ], [ 68.9580649, 24.25876 ], [ 68.958907, 24.2590178 ], [ 68.9594684, 24.2595326 ], [ 68.9603107, 24.2594046 ], [ 68.9604506, 24.2599195 ], [ 68.9614336, 24.2603054 ], [ 68.963399, 24.2601777 ], [ 68.9635389, 24.2606925 ], [ 68.9638195, 24.2609499 ], [ 68.9639601, 24.2617222 ], [ 68.9645217, 24.2617223 ], [ 68.9648021, 24.2630094 ], [ 68.9653638, 24.2626231 ], [ 68.9667675, 24.2628807 ], [ 68.9674689, 24.2632674 ], [ 68.9680303, 24.2642973 ], [ 68.9687326, 24.2650697 ], [ 68.9670478, 24.2651975 ], [ 68.9667672, 24.2649401 ], [ 68.9653631, 24.2649397 ], [ 68.9650824, 24.2646823 ], [ 68.9639592, 24.2648112 ], [ 68.9639596, 24.2635241 ], [ 68.9625559, 24.2633946 ], [ 68.962275, 24.2631372 ], [ 68.9605905, 24.2628792 ], [ 68.9600288, 24.2632657 ], [ 68.9603094, 24.2637806 ], [ 68.959467, 24.2637804 ], [ 68.9593266, 24.2624933 ], [ 68.9587653, 24.2619783 ], [ 68.9583448, 24.261206 ], [ 68.9577832, 24.2610767 ], [ 68.9575026, 24.2608191 ], [ 68.9569411, 24.2606908 ], [ 68.9569412, 24.2601759 ], [ 68.9544143, 24.2599178 ], [ 68.9544145, 24.2594029 ], [ 68.9527301, 24.259145 ], [ 68.9528696, 24.2599174 ], [ 68.9527298, 24.2601746 ], [ 68.9518876, 24.2596596 ], [ 68.9518878, 24.2591448 ], [ 68.9513262, 24.2591446 ], [ 68.9513264, 24.2586297 ], [ 68.9499225, 24.2588868 ], [ 68.9497817, 24.2583719 ], [ 68.9493614, 24.2578569 ], [ 68.9490806, 24.2578567 ], [ 68.9487995, 24.258629 ], [ 68.9485187, 24.2586288 ], [ 68.948519, 24.2578565 ], [ 68.9476767, 24.2581138 ], [ 68.947536, 24.2575989 ], [ 68.9476774, 24.2563118 ], [ 68.9465542, 24.2564398 ], [ 68.9462735, 24.2563115 ], [ 68.9462739, 24.2555392 ], [ 68.9454315, 24.2555388 ], [ 68.9451505, 24.2563109 ], [ 68.944589, 24.2560533 ], [ 68.944729, 24.2557961 ], [ 68.9445895, 24.2550236 ], [ 68.9437473, 24.254766 ], [ 68.9434669, 24.2539936 ], [ 68.9417823, 24.2541213 ], [ 68.9415017, 24.2539928 ], [ 68.9416409, 24.2552801 ], [ 68.9406583, 24.2563092 ], [ 68.9400966, 24.256309 ], [ 68.9402363, 24.2570813 ], [ 68.9399554, 24.2573387 ], [ 68.939815, 24.2583682 ], [ 68.9400959, 24.2582393 ], [ 68.9414996, 24.2583689 ], [ 68.9412185, 24.2588836 ], [ 68.9400953, 24.2592689 ], [ 68.9395336, 24.2597834 ], [ 68.9389721, 24.2596549 ], [ 68.9389723, 24.2591402 ], [ 68.9367264, 24.2587526 ], [ 68.9361647, 24.2590098 ], [ 68.9350416, 24.2588811 ], [ 68.935042, 24.2583663 ], [ 68.9344803, 24.2584942 ], [ 68.9341994, 24.2587516 ], [ 68.9336377, 24.2588805 ], [ 68.9334971, 24.2583657 ], [ 68.932936, 24.2578505 ], [ 68.9325158, 24.2568206 ], [ 68.9336391, 24.2565638 ], [ 68.9336392, 24.2560489 ], [ 68.9322355, 24.2559193 ], [ 68.9316742, 24.2555334 ], [ 68.9315336, 24.2550183 ], [ 68.9308328, 24.2539885 ], [ 68.9305519, 24.2539883 ], [ 68.9305517, 24.2545031 ], [ 68.9294289, 24.254116 ], [ 68.9277443, 24.253987 ], [ 68.9278848, 24.2532149 ], [ 68.9277449, 24.2529573 ], [ 68.9269027, 24.2529569 ], [ 68.9269023, 24.2537292 ], [ 68.926341, 24.2533423 ], [ 68.923534, 24.2524406 ], [ 68.9235342, 24.2519257 ], [ 68.9226918, 24.2521826 ], [ 68.9226922, 24.2516677 ], [ 68.9215691, 24.2516672 ], [ 68.9218496, 24.2521822 ], [ 68.9207266, 24.2520525 ], [ 68.9198848, 24.2515371 ], [ 68.9187615, 24.251794 ], [ 68.9179192, 24.2517936 ], [ 68.9176383, 24.2519225 ], [ 68.9176387, 24.2514077 ], [ 68.9173578, 24.2515358 ], [ 68.9148311, 24.2516636 ], [ 68.9151114, 24.2521786 ], [ 68.9145499, 24.2521782 ], [ 68.9146897, 24.2524358 ], [ 68.9145493, 24.2532079 ], [ 68.9165143, 24.2535946 ], [ 68.9181989, 24.2535955 ], [ 68.9183386, 24.2537248 ], [ 68.9187597, 24.2547547 ], [ 68.9201634, 24.2550128 ], [ 68.9207239, 24.2563001 ], [ 68.9187587, 24.2561701 ], [ 68.9179162, 24.256556 ], [ 68.9181966, 24.2570711 ], [ 68.9173541, 24.2573281 ], [ 68.9173535, 24.2583578 ], [ 68.9170726, 24.2583576 ], [ 68.917073, 24.2578427 ], [ 68.9165113, 24.2580998 ], [ 68.9165109, 24.2586146 ], [ 68.9170726, 24.258615 ], [ 68.91651, 24.2601591 ], [ 68.9170715, 24.2601595 ], [ 68.9174915, 24.2614468 ], [ 68.9184743, 24.2620903 ], [ 68.9201586, 24.2624778 ], [ 68.9201583, 24.2629926 ], [ 68.92072, 24.2628637 ], [ 68.9212811, 24.2633789 ], [ 68.9224043, 24.2633795 ], [ 68.922544, 24.2635086 ], [ 68.9226844, 24.264281 ], [ 68.9235268, 24.2642814 ], [ 68.9235266, 24.2647962 ], [ 68.9238073, 24.2647964 ], [ 68.9238077, 24.2642816 ], [ 68.9254922, 24.2645398 ], [ 68.9253512, 24.2647972 ], [ 68.9253507, 24.2655694 ], [ 68.925912, 24.2660845 ], [ 68.9259118, 24.2663419 ], [ 68.9256308, 24.2668565 ], [ 68.9256304, 24.2676288 ], [ 68.9261915, 24.2681438 ], [ 68.9261909, 24.2691735 ], [ 68.9263318, 24.2694309 ], [ 68.9252085, 24.2694305 ], [ 68.9252089, 24.2689157 ], [ 68.924647, 24.2691727 ], [ 68.924648, 24.2676282 ], [ 68.9238056, 24.2677562 ], [ 68.9235249, 24.2676277 ], [ 68.9238063, 24.2665982 ], [ 68.9226829, 24.266855 ], [ 68.9226831, 24.2665976 ], [ 68.9232446, 24.266598 ], [ 68.9229642, 24.266083 ], [ 68.9221214, 24.2667256 ], [ 68.9198751, 24.2667244 ], [ 68.9179099, 24.2664661 ], [ 68.9173486, 24.2660801 ], [ 68.9173488, 24.2655653 ], [ 68.9170657, 24.2655729 ], [ 68.9170653, 24.2660877 ], [ 68.9162231, 24.2658297 ], [ 68.9162235, 24.2653149 ], [ 68.915662, 24.2651854 ], [ 68.9153813, 24.264928 ], [ 68.9148198, 24.2647993 ], [ 68.9148196, 24.2653142 ], [ 68.9142581, 24.2650565 ], [ 68.9151012, 24.2640273 ], [ 68.9136974, 24.2638974 ], [ 68.9131355, 24.2642835 ], [ 68.9132753, 24.2645411 ], [ 68.9131351, 24.2650558 ], [ 68.9128542, 24.2650556 ], [ 68.9125739, 24.2642833 ], [ 68.9117316, 24.2644111 ], [ 68.9114505, 24.2646683 ], [ 68.910889, 24.264668 ], [ 68.9106083, 24.2644104 ], [ 68.9097662, 24.2642816 ], [ 68.9094849, 24.2650537 ], [ 68.9080812, 24.2645381 ], [ 68.9080808, 24.265053 ], [ 68.9078002, 24.2650528 ], [ 68.9078006, 24.2645379 ], [ 68.9072388, 24.2646659 ], [ 68.9066769, 24.265052 ], [ 68.9063955, 24.2660815 ], [ 68.90635, 24.266081467598362 ], [ 68.906161722498084, 24.266081333521452 ], [ 68.90615, 24.26608132517358 ], [ 68.9058338, 24.2660811 ], [ 68.9058334, 24.266596 ], [ 68.9055528, 24.2665958 ], [ 68.9055532, 24.2660809 ], [ 68.9044297, 24.2663376 ], [ 68.9044303, 24.2655655 ], [ 68.9035879, 24.2656931 ], [ 68.9033069, 24.2659503 ], [ 68.9027454, 24.26595 ], [ 68.9024647, 24.2656925 ], [ 68.9016225, 24.2654345 ], [ 68.901342, 24.2651769 ], [ 68.9004997, 24.2651764 ], [ 68.900219, 24.2649188 ], [ 68.8988153, 24.2647895 ], [ 68.8990963, 24.2644032 ], [ 68.8996581, 24.2642752 ], [ 68.8996584, 24.2637606 ], [ 68.8990969, 24.2637602 ], [ 68.898817, 24.2627303 ], [ 68.8976938, 24.2627296 ], [ 68.897694, 24.2624722 ], [ 68.9007828, 24.2622168 ], [ 68.9007832, 24.261702 ], [ 68.9010638, 24.2618303 ], [ 68.901625, 24.2624748 ], [ 68.9010633, 24.2624744 ], [ 68.9012027, 24.2629893 ], [ 68.9014834, 24.2632469 ], [ 68.9016238, 24.2637617 ], [ 68.9021855, 24.2637621 ], [ 68.9021859, 24.2632473 ], [ 68.9033088, 24.2635054 ], [ 68.9031683, 24.2629906 ], [ 68.9023265, 24.2622178 ], [ 68.9021874, 24.2611881 ], [ 68.9010646, 24.2609299 ], [ 68.901065, 24.2604151 ], [ 68.9002224, 24.2606719 ], [ 68.9000825, 24.2593848 ], [ 68.8999429, 24.2591272 ], [ 68.899662, 24.2591271 ], [ 68.8995205, 24.2601567 ], [ 68.8992394, 24.260414 ], [ 68.8985367, 24.2619579 ], [ 68.8976945, 24.2616999 ], [ 68.897976, 24.2609278 ], [ 68.8971338, 24.2609273 ], [ 68.897415, 24.2601552 ], [ 68.8962922, 24.259897 ], [ 68.8962923, 24.2596396 ], [ 68.896854, 24.25964 ], [ 68.8967134, 24.2591252 ], [ 68.8960126, 24.2583523 ], [ 68.8951704, 24.2583518 ], [ 68.895100961619136, 24.2577125 ], [ 68.89510096161915, 24.2577125 ], [ 68.8950306, 24.2570647 ], [ 68.8951716, 24.2568075 ], [ 68.8943294, 24.2568067 ], [ 68.8943284, 24.2578364 ], [ 68.8940478, 24.2578362 ], [ 68.894047880085452, 24.2577125 ], [ 68.8940483, 24.2570639 ], [ 68.893487, 24.2569345 ], [ 68.8929257, 24.2565483 ], [ 68.8926441, 24.2575778 ], [ 68.8923634, 24.2575776 ], [ 68.8920837, 24.2562903 ], [ 68.8918028, 24.2562902 ], [ 68.8918023, 24.2570624 ], [ 68.8906789, 24.2574472 ], [ 68.890098282478348, 24.2579125 ], [ 68.8895551, 24.2583478 ], [ 68.8895543, 24.2591201 ], [ 68.8887123, 24.2588621 ], [ 68.8884309, 24.2596341 ], [ 68.8895537, 24.2597632 ], [ 68.8901149, 24.2602784 ], [ 68.8906764, 24.2604079 ], [ 68.8905352, 24.2606653 ], [ 68.8906756, 24.2611802 ], [ 68.8898333, 24.2611796 ], [ 68.8898329, 24.2616944 ], [ 68.8884292, 24.2615642 ], [ 68.8881481, 24.2618214 ], [ 68.886463, 24.2623349 ], [ 68.8856201, 24.2631066 ], [ 68.8850586, 24.2629779 ], [ 68.8847785, 24.2622055 ], [ 68.8853402, 24.2620768 ], [ 68.8854802, 24.2619486 ], [ 68.8856216, 24.2614338 ], [ 68.8850599, 24.2615617 ], [ 68.8844978, 24.262076 ], [ 68.8814092, 24.2622028 ], [ 68.8815488, 24.2624604 ], [ 68.8815473, 24.264005 ], [ 68.8818276, 24.26452 ], [ 68.8818272, 24.2650348 ], [ 68.8812651, 24.2655491 ], [ 68.8811247, 24.2660639 ], [ 68.8816866, 24.2658069 ], [ 68.8816859, 24.2665791 ], [ 68.880282, 24.266578 ], [ 68.8802812, 24.2673503 ], [ 68.8797197, 24.2673499 ], [ 68.879713895596581, 24.267481328277221 ] ] ], [ [ [ 93.5895986, 8.0912225 ], [ 93.5893545, 8.0868055 ], [ 93.5894005, 8.084185 ], [ 93.5897019, 8.0822647 ], [ 93.5899609, 8.0809849 ], [ 93.5909233, 8.0782319 ], [ 93.5911213, 8.0774888 ], [ 93.5911708, 8.0765128 ], [ 93.5909937, 8.0751666 ], [ 93.5908129, 8.0741561 ], [ 93.5902588, 8.0725022 ], [ 93.5899, 8.0706465 ], [ 93.5898175, 8.0688653 ], [ 93.5901789, 8.066819 ], [ 93.5905271, 8.065352 ], [ 93.5908902, 8.064682 ], [ 93.5911196, 8.0644307 ], [ 93.5915243, 8.0643222 ], [ 93.5917018, 8.0638579 ], [ 93.591988, 8.0632537 ], [ 93.592182, 8.0630951 ], [ 93.5925361, 8.0631201 ], [ 93.5929239, 8.0632286 ], [ 93.5935056, 8.0626025 ], [ 93.5938597, 8.062302 ], [ 93.594138, 8.0620349 ], [ 93.5945426, 8.0620015 ], [ 93.5947604, 8.0624376 ], [ 93.5951665, 8.0617845 ], [ 93.595234, 8.0613253 ], [ 93.5954026, 8.0609497 ], [ 93.5955739, 8.0602021 ], [ 93.5958747, 8.0596391 ], [ 93.5961867, 8.0595556 ], [ 93.5964143, 8.059781 ], [ 93.5969142, 8.0587485 ], [ 93.5969876, 8.0583035 ], [ 93.596819, 8.0576106 ], [ 93.5967516, 8.0571348 ], [ 93.5967947, 8.0565979 ], [ 93.5971478, 8.0556238 ], [ 93.5972996, 8.0553149 ], [ 93.5975525, 8.0550478 ], [ 93.5979975, 8.0547741 ], [ 93.5982354, 8.0543215 ], [ 93.5981596, 8.0538958 ], [ 93.5983366, 8.05342 ], [ 93.5987582, 8.0531111 ], [ 93.5990576, 8.0530794 ], [ 93.5992782, 8.0532269 ], [ 93.5994833, 8.0528528 ], [ 93.5992722, 8.0527547 ], [ 93.5991469, 8.052509 ], [ 93.5990576, 8.0522175 ], [ 93.5990396, 8.0518832 ], [ 93.5990874, 8.0511668 ], [ 93.5992066, 8.0505374 ], [ 93.5994212, 8.0501242 ], [ 93.5996954, 8.0499353 ], [ 93.600375, 8.0500652 ], [ 93.6007628, 8.0498628 ], [ 93.6003035, 8.0496402 ], [ 93.6000355, 8.0491684 ], [ 93.5994331, 8.0478575 ], [ 93.5991708, 8.0468894 ], [ 93.5992542, 8.0460512 ], [ 93.5995404, 8.0459449 ], [ 93.5998184, 8.0451253 ], [ 93.6003393, 8.0444456 ], [ 93.5994139, 8.0434142 ], [ 93.5986104, 8.0427691 ], [ 93.5983112, 8.042437 ], [ 93.59805, 8.0417774 ], [ 93.5977519, 8.0410218 ], [ 93.5972869, 8.0413406 ], [ 93.5969173, 8.0414941 ], [ 93.5964003, 8.0412728 ], [ 93.5957369, 8.0407621 ], [ 93.5949499, 8.0395107 ], [ 93.5943061, 8.0388731 ], [ 93.5943538, 8.0386134 ], [ 93.5939052, 8.0382851 ], [ 93.5936503, 8.0383773 ], [ 93.5930661, 8.0382002 ], [ 93.5924978, 8.0380601 ], [ 93.5924067, 8.0383025 ], [ 93.5922802, 8.0384111 ], [ 93.592255, 8.0386907 ], [ 93.5921327, 8.0389287 ], [ 93.5917398, 8.0395927 ], [ 93.5910987, 8.0401128 ], [ 93.5913014, 8.0403725 ], [ 93.5911703, 8.0409746 ], [ 93.590753, 8.0411281 ], [ 93.5904008, 8.0410166 ], [ 93.5899064, 8.0416594 ], [ 93.5898706, 8.042167 ], [ 93.5893102, 8.0426983 ], [ 93.5895249, 8.0430643 ], [ 93.5899878, 8.042908 ], [ 93.5902534, 8.0430291 ], [ 93.5904178, 8.0432503 ], [ 93.5904726, 8.0436886 ], [ 93.5903757, 8.0440851 ], [ 93.5901269, 8.0445192 ], [ 93.5897432, 8.0449108 ], [ 93.5887664, 8.0454806 ], [ 93.5888454, 8.0456712 ], [ 93.5887702, 8.0458316 ], [ 93.5884323, 8.0460427 ], [ 93.5879271, 8.0462156 ], [ 93.5871936, 8.0465412 ], [ 93.5856731, 8.0485058 ], [ 93.5856121, 8.0487099 ], [ 93.5857217, 8.0488727 ], [ 93.5859831, 8.0489019 ], [ 93.5862908, 8.0487725 ], [ 93.586451, 8.0492484 ], [ 93.5863878, 8.0499037 ], [ 93.5861138, 8.0498369 ], [ 93.5861644, 8.050008 ], [ 93.5862908, 8.0502209 ], [ 93.5862445, 8.0503628 ], [ 93.5860969, 8.0505089 ], [ 93.5862192, 8.0507134 ], [ 93.585747, 8.0510599 ], [ 93.5852749, 8.0510807 ], [ 93.5852496, 8.0508679 ], [ 93.5851864, 8.0506258 ], [ 93.5852875, 8.0504713 ], [ 93.5852293, 8.0503963 ], [ 93.5850177, 8.0505715 ], [ 93.5849924, 8.0507343 ], [ 93.5847142, 8.0507677 ], [ 93.584377, 8.050776 ], [ 93.5840735, 8.0506926 ], [ 93.5839428, 8.0505465 ], [ 93.5840566, 8.0503336 ], [ 93.5839934, 8.0502752 ], [ 93.583399, 8.0504004 ], [ 93.5832435, 8.0505676 ], [ 93.5831145, 8.0508599 ], [ 93.5830117, 8.0511061 ], [ 93.582607, 8.0515652 ], [ 93.5823119, 8.0517697 ], [ 93.5821644, 8.0520786 ], [ 93.5819831, 8.0521996 ], [ 93.581806, 8.0523833 ], [ 93.5818229, 8.0525252 ], [ 93.5816964, 8.052713 ], [ 93.5813676, 8.0529802 ], [ 93.5811618, 8.0532119 ], [ 93.5810852, 8.0537649 ], [ 93.5809672, 8.0538442 ], [ 93.5811105, 8.0539736 ], [ 93.5810768, 8.0543993 ], [ 93.580954, 8.0545723 ], [ 93.5810683, 8.0546957 ], [ 93.5810304, 8.054967 ], [ 93.5809503, 8.0552383 ], [ 93.5808027, 8.0553677 ], [ 93.5807227, 8.0555722 ], [ 93.5804318, 8.0557725 ], [ 93.5806805, 8.055831 ], [ 93.5808027, 8.0559228 ], [ 93.5808618, 8.0561231 ], [ 93.5807817, 8.0563861 ], [ 93.5806131, 8.0566073 ], [ 93.580339, 8.0568118 ], [ 93.5799807, 8.0569579 ], [ 93.5795334, 8.0570665 ], [ 93.5794917, 8.0573419 ], [ 93.5795718, 8.0575924 ], [ 93.579517, 8.0577885 ], [ 93.5792978, 8.0580682 ], [ 93.5790238, 8.0581809 ], [ 93.5785896, 8.0583061 ], [ 93.5781807, 8.0584689 ], [ 93.5779276, 8.0586497 ], [ 93.5777212, 8.0590532 ], [ 93.576954, 8.0595457 ], [ 93.5761783, 8.0600382 ], [ 93.5754617, 8.0602887 ], [ 93.5744122, 8.0608728 ], [ 93.5745108, 8.0624046 ], [ 93.5738786, 8.0636059 ], [ 93.5740304, 8.0641253 ], [ 93.5744266, 8.0648682 ], [ 93.5744941, 8.0653607 ], [ 93.5747985, 8.0662753 ], [ 93.5745531, 8.0668716 ], [ 93.5741463, 8.0672688 ], [ 93.5745447, 8.0676563 ], [ 93.5744856, 8.0681154 ], [ 93.5746144, 8.0686119 ], [ 93.5745278, 8.0693258 ], [ 93.5740709, 8.0710119 ], [ 93.5740207, 8.0718641 ], [ 93.5741315, 8.0721389 ], [ 93.5744603, 8.0724561 ], [ 93.5750999, 8.07277 ], [ 93.5775997, 8.0722388 ], [ 93.5784057, 8.0711515 ], [ 93.5791731, 8.0707699 ], [ 93.5789054, 8.0693328 ], [ 93.5794997, 8.0691055 ], [ 93.580121, 8.0691991 ], [ 93.5801615, 8.0686642 ], [ 93.579986, 8.0678484 ], [ 93.5803371, 8.0676211 ], [ 93.5809314, 8.0674473 ], [ 93.5807153, 8.0667385 ], [ 93.5804992, 8.0660966 ], [ 93.581023, 8.0664207 ], [ 93.5814447, 8.0662036 ], [ 93.5816338, 8.0665111 ], [ 93.582174, 8.0660565 ], [ 93.5827413, 8.065896 ], [ 93.583052, 8.0663507 ], [ 93.5834842, 8.0666449 ], [ 93.5837813, 8.0662972 ], [ 93.5835112, 8.0656419 ], [ 93.5828764, 8.0650802 ], [ 93.5834571, 8.0649866 ], [ 93.5842405, 8.0651872 ], [ 93.5843756, 8.0646389 ], [ 93.5839164, 8.064318 ], [ 93.5835652, 8.0638232 ], [ 93.5837138, 8.0632214 ], [ 93.584092, 8.0635691 ], [ 93.5844701, 8.0641174 ], [ 93.5848618, 8.0641709 ], [ 93.585105, 8.0641709 ], [ 93.5854966, 8.064104 ], [ 93.5850914, 8.0638499 ], [ 93.5847943, 8.063422 ], [ 93.5845512, 8.0629272 ], [ 93.5847538, 8.0625929 ], [ 93.585186, 8.0629272 ], [ 93.5855642, 8.0629406 ], [ 93.5859018, 8.062526 ], [ 93.5859289, 8.0618707 ], [ 93.5857263, 8.0614026 ], [ 93.5864271, 8.0611257 ], [ 93.5869283, 8.062098 ], [ 93.587212, 8.0616969 ], [ 93.5871174, 8.0608811 ], [ 93.5873606, 8.0599316 ], [ 93.5879683, 8.0590891 ], [ 93.5879548, 8.059945 ], [ 93.5885626, 8.060413 ], [ 93.588333, 8.0614695 ], [ 93.5881102, 8.0631385 ], [ 93.5886572, 8.0629004 ], [ 93.5889948, 8.0621248 ], [ 93.5895891, 8.0625394 ], [ 93.5895621, 8.0629138 ], [ 93.5891704, 8.0636493 ], [ 93.5885761, 8.0642645 ], [ 93.5885897, 8.0647994 ], [ 93.589238, 8.0649331 ], [ 93.5895157, 8.0653768 ], [ 93.5877979, 8.0698014 ], [ 93.5879413, 8.072783 ], [ 93.5876442, 8.0747755 ], [ 93.5874011, 8.0751901 ], [ 93.5853748, 8.0761027 ], [ 93.5842012, 8.0763773 ], [ 93.5832843, 8.076869 ], [ 93.5823675, 8.0784576 ], [ 93.5825514, 8.0810802 ], [ 93.5802823, 8.0843966 ], [ 93.5765231, 8.087359 ], [ 93.5757469, 8.0877894 ], [ 93.5753183, 8.0885355 ], [ 93.5753678, 8.0891728 ], [ 93.574361, 8.0905126 ], [ 93.5731232, 8.0900061 ], [ 93.5735523, 8.0907904 ], [ 93.5726446, 8.0918362 ], [ 93.5714893, 8.0924408 ], [ 93.5713737, 8.0948428 ], [ 93.5699628, 8.0945868 ], [ 93.5696956, 8.0951051 ], [ 93.5701157, 8.0953939 ], [ 93.5703258, 8.0958561 ], [ 93.5702833, 8.0966376 ], [ 93.5704308, 8.0969999 ], [ 93.5708721, 8.0967966 ], [ 93.571871, 8.0969077 ], [ 93.5725626, 8.0961205 ], [ 93.5730586, 8.0956468 ], [ 93.573858, 8.0953637 ], [ 93.5748091, 8.0990032 ], [ 93.5738638, 8.0990032 ], [ 93.5730093, 8.0993208 ], [ 93.5733854, 8.0996502 ], [ 93.573261, 8.1002504 ], [ 93.5740914, 8.1003088 ], [ 93.5738755, 8.1010194 ], [ 93.5732244, 8.1011384 ], [ 93.5727942, 8.1027694 ], [ 93.5743998, 8.1026523 ], [ 93.5735369, 8.1041419 ], [ 93.5743008, 8.10543 ], [ 93.574087, 8.1062743 ], [ 93.5736359, 8.1069687 ], [ 93.5736689, 8.1077203 ], [ 93.5741146, 8.1075405 ], [ 93.576064, 8.108321 ], [ 93.5773494, 8.108668 ], [ 93.5788463, 8.1089935 ], [ 93.5771507, 8.1099559 ], [ 93.5762931, 8.1109065 ], [ 93.575786, 8.1111667 ], [ 93.575039, 8.1119931 ], [ 93.5730706, 8.1114806 ], [ 93.5723192, 8.1096325 ], [ 93.5718076, 8.1075109 ], [ 93.5714243, 8.1067726 ], [ 93.5709622, 8.1066909 ], [ 93.5705496, 8.1070177 ], [ 93.5700928, 8.1076159 ], [ 93.5684792, 8.1106128 ], [ 93.5664926, 8.1143296 ], [ 93.5658624, 8.1141387 ], [ 93.5652218, 8.1141335 ], [ 93.5648009, 8.1143133 ], [ 93.5644131, 8.1145502 ], [ 93.5642811, 8.114926 ], [ 93.5642137, 8.1158225 ], [ 93.56405, 8.1162862 ], [ 93.5640706, 8.1163965 ], [ 93.5640417, 8.1165762 ], [ 93.5634928, 8.1171778 ], [ 93.5634013, 8.1172229 ], [ 93.5629226, 8.1173536 ], [ 93.5627205, 8.1174843 ], [ 93.5623574, 8.1180318 ], [ 93.56235, 8.1182469 ], [ 93.5624656, 8.1184185 ], [ 93.5625027, 8.1186554 ], [ 93.5624119, 8.1189005 ], [ 93.5622716, 8.119023 ], [ 93.5621758, 8.1193183 ], [ 93.5621971, 8.1196696 ], [ 93.5623821, 8.119976 ], [ 93.5627249, 8.1203149 ], [ 93.5629309, 8.1204253 ], [ 93.564007, 8.1206485 ], [ 93.5647948, 8.1207663 ], [ 93.5667511, 8.1212574 ], [ 93.5683789, 8.1217816 ], [ 93.5694589, 8.1221208 ], [ 93.5700448, 8.1222311 ], [ 93.5708484, 8.122545 ], [ 93.5713239, 8.1227008 ], [ 93.5717022, 8.1229011 ], [ 93.5720334, 8.1229994 ], [ 93.5726401, 8.1230848 ], [ 93.5730898, 8.1230684 ], [ 93.5735235, 8.1232017 ], [ 93.5737252, 8.123191 ], [ 93.5740933, 8.1231198 ], [ 93.5751279, 8.1234053 ], [ 93.5756521, 8.1235382 ], [ 93.5761431, 8.1237587 ], [ 93.5766339, 8.1240131 ], [ 93.5770617, 8.1242201 ], [ 93.5776639, 8.1243588 ], [ 93.5781391, 8.1238423 ], [ 93.5786781, 8.1234112 ], [ 93.5791567, 8.1232355 ], [ 93.5797063, 8.1229021 ], [ 93.5801524, 8.1217871 ], [ 93.5811047, 8.1194874 ], [ 93.5818652, 8.1178543 ], [ 93.5824021, 8.1170687 ], [ 93.5827522, 8.1167336 ], [ 93.5832073, 8.1165372 ], [ 93.5835457, 8.1165372 ], [ 93.5839126, 8.1157089 ], [ 93.5841759, 8.1147002 ], [ 93.5843977, 8.114342 ], [ 93.5846078, 8.1143074 ], [ 93.5849462, 8.113903 ], [ 93.5852263, 8.1137066 ], [ 93.5854247, 8.1136488 ], [ 93.5855655, 8.1136841 ], [ 93.5856687, 8.1139333 ], [ 93.585875, 8.1138352 ], [ 93.5858337, 8.1137372 ], [ 93.5860029, 8.1136678 ], [ 93.5863412, 8.1136555 ], [ 93.5865427, 8.1133225 ], [ 93.5865393, 8.1131204 ], [ 93.5865352, 8.1120992 ], [ 93.586597, 8.1116499 ], [ 93.5866713, 8.1114742 ], [ 93.5868322, 8.1113476 ], [ 93.5870097, 8.111368 ], [ 93.5870839, 8.1112455 ], [ 93.5868859, 8.1110984 ], [ 93.5872712, 8.109838 ], [ 93.5874113, 8.1094971 ], [ 93.5876797, 8.109318 ], [ 93.5878839, 8.1092545 ], [ 93.5880065, 8.1092632 ], [ 93.5881232, 8.109422 ], [ 93.5882661, 8.1094018 ], [ 93.5882399, 8.1092978 ], [ 93.5881173, 8.1091072 ], [ 93.5880597, 8.1083939 ], [ 93.5881328, 8.1077166 ], [ 93.5886842, 8.1041993 ], [ 93.5889583, 8.1029751 ], [ 93.5893318, 8.102201 ], [ 93.5894706, 8.1012081 ], [ 93.5897019, 8.0979676 ], [ 93.5897966, 8.0954048 ], [ 93.5897514, 8.0930493 ], [ 93.5895986, 8.0912225 ] ] ], [ [ [ 93.25032, 8.22706 ], [ 93.24913, 8.22531 ], [ 93.24692, 8.22422 ], [ 93.24479, 8.22374 ], [ 93.24095, 8.22391 ], [ 93.23988, 8.22368 ], [ 93.23905, 8.22333 ], [ 93.23777, 8.22363 ], [ 93.23627, 8.2245 ], [ 93.23472, 8.22638 ], [ 93.23468, 8.22653 ], [ 93.23353, 8.22881 ], [ 93.23276, 8.2307 ], [ 93.23089, 8.23188 ], [ 93.22933, 8.23257 ], [ 93.22781, 8.23449 ], [ 93.22736, 8.23513 ], [ 93.22492, 8.23756 ], [ 93.2225, 8.24124 ], [ 93.22122, 8.24476 ], [ 93.22065, 8.24603 ], [ 93.22061, 8.24831 ], [ 93.22078, 8.25106 ], [ 93.22163, 8.25487 ], [ 93.22239, 8.25688 ], [ 93.2242, 8.25866 ], [ 93.22758, 8.26103 ], [ 93.22966, 8.26193 ], [ 93.23158, 8.26285 ], [ 93.2361172, 8.263649 ], [ 93.23969, 8.25839 ], [ 93.24228, 8.25308 ], [ 93.24427, 8.24928 ], [ 93.24595, 8.24712 ], [ 93.24716, 8.24408 ], [ 93.24863, 8.24154 ], [ 93.24917, 8.23976 ], [ 93.24934, 8.23727 ], [ 93.2504, 8.23524 ], [ 93.25045, 8.23319 ], [ 93.25059, 8.22976 ], [ 93.25032, 8.22706 ] ] ], [ [ [ 93.20488, 8.21256 ], [ 93.2029, 8.206 ], [ 93.20249, 8.19999 ], [ 93.19957, 8.19522 ], [ 93.19518, 8.19418 ], [ 93.19141, 8.19397 ], [ 93.18534, 8.19479 ], [ 93.17864, 8.19747 ], [ 93.17278, 8.20036 ], [ 93.16943, 8.20035 ], [ 93.1642, 8.20055 ], [ 93.1598, 8.2022 ], [ 93.15603, 8.20613 ], [ 93.14996, 8.2086 ], [ 93.14253, 8.21253 ], [ 93.13089, 8.21892 ], [ 93.12866, 8.21978 ], [ 93.12642, 8.22047 ], [ 93.1227, 8.22145 ], [ 93.11891, 8.22367 ], [ 93.11573, 8.22627 ], [ 93.11348, 8.22843 ], [ 93.1134, 8.22973 ], [ 93.11503, 8.23088 ], [ 93.11557, 8.23195 ], [ 93.11324, 8.23256 ], [ 93.11139, 8.23256 ], [ 93.10929, 8.23462 ], [ 93.1058, 8.23829 ], [ 93.10255, 8.24211 ], [ 93.10053, 8.2464 ], [ 93.09922, 8.24993 ], [ 93.0979, 8.25383 ], [ 93.09627, 8.25636 ], [ 93.09425, 8.25972 ], [ 93.09115, 8.26457 ], [ 93.08828, 8.26863 ], [ 93.08595, 8.27319 ], [ 93.0851, 8.27625 ], [ 93.0847, 8.2797 ], [ 93.08423, 8.28337 ], [ 93.0843, 8.28783 ], [ 93.0851615, 8.2911169 ], [ 93.084231, 8.2950493 ], [ 93.0860221, 8.2981266 ], [ 93.0855642, 8.3031332 ], [ 93.0876952, 8.3072209 ], [ 93.0905747, 8.3118005 ], [ 93.0922355, 8.3170614 ], [ 93.0935309, 8.3206966 ], [ 93.09446, 8.32533 ], [ 93.09515, 8.32817 ], [ 93.09491, 8.33131 ], [ 93.09456, 8.33328 ], [ 93.09471, 8.33612 ], [ 93.09525, 8.33811 ], [ 93.09726, 8.33941 ], [ 93.10043, 8.3411 ], [ 93.1016725, 8.3426966 ], [ 93.1022401, 8.34583 ], [ 93.1051838, 8.3460034 ], [ 93.1055343, 8.3476331 ], [ 93.1070062, 8.3486386 ], [ 93.1097397, 8.3469396 ], [ 93.1136647, 8.3463155 ], [ 93.1164332, 8.3483959 ], [ 93.1189214, 8.3484305 ], [ 93.1231268, 8.3521059 ], [ 93.1265261, 8.3552958 ], [ 93.1315498, 8.3474606 ], [ 93.13378, 8.34806 ], [ 93.13563, 8.34837 ], [ 93.13742, 8.34822 ], [ 93.13858, 8.34768 ], [ 93.14044, 8.34769 ], [ 93.14214, 8.34746 ], [ 93.14245, 8.3457 ], [ 93.14246, 8.34302 ], [ 93.14176, 8.34095 ], [ 93.14099, 8.3388 ], [ 93.141, 8.33612 ], [ 93.14136, 8.33242 ], [ 93.14059, 8.32989 ], [ 93.13944, 8.32453 ], [ 93.13846, 8.3211 ], [ 93.13699, 8.31911 ], [ 93.13529, 8.31834 ], [ 93.13436, 8.31849 ], [ 93.13335, 8.31849 ], [ 93.13266, 8.31795 ], [ 93.13251, 8.31627 ], [ 93.13251, 8.3139 ], [ 93.13267, 8.31076 ], [ 93.13368, 8.30734 ], [ 93.13392, 8.30221 ], [ 93.13347, 8.29746 ], [ 93.13244, 8.29327 ], [ 93.12982, 8.28851 ], [ 93.12812, 8.2842 ], [ 93.12751, 8.28029 ], [ 93.12751, 8.27746 ], [ 93.12837, 8.27463 ], [ 93.12961, 8.27095 ], [ 93.13222, 8.26693 ], [ 93.13633, 8.26181 ], [ 93.1368379, 8.2590938 ], [ 93.14278, 8.25497 ], [ 93.1501404, 8.2457463 ], [ 93.15488, 8.24321 ], [ 93.15775, 8.24145 ], [ 93.16131, 8.24023 ], [ 93.1662, 8.23756 ], [ 93.17379, 8.2339 ], [ 93.1772, 8.23153 ], [ 93.18164, 8.22868 ], [ 93.18885, 8.22627 ], [ 93.19341, 8.22479 ], [ 93.19681, 8.22111 ], [ 93.1993, 8.21867 ], [ 93.20248, 8.21745 ], [ 93.20457, 8.21493 ], [ 93.20488, 8.21256 ] ] ], [ [ [ 73.03229, 8.26673 ], [ 73.02923, 8.26746 ], [ 73.02851, 8.26765 ], [ 73.027, 8.26812 ], [ 73.02591, 8.26841 ], [ 73.02548, 8.26859 ], [ 73.02428, 8.26899 ], [ 73.02269, 8.26966 ], [ 73.02178, 8.27016 ], [ 73.02029, 8.27088 ], [ 73.02021, 8.2709 ], [ 73.01985, 8.27119 ], [ 73.01938, 8.27143 ], [ 73.01924, 8.27164 ], [ 73.01916, 8.27187 ], [ 73.01917, 8.27203 ], [ 73.01932, 8.27249 ], [ 73.01913, 8.27357 ], [ 73.01896, 8.27433 ], [ 73.0187, 8.27509 ], [ 73.01815, 8.27637 ], [ 73.01807, 8.27689 ], [ 73.01809, 8.27725 ], [ 73.01814, 8.27749 ], [ 73.01821, 8.2776 ], [ 73.0186, 8.27762 ], [ 73.01892, 8.27756 ], [ 73.01961, 8.27724 ], [ 73.01996, 8.27692 ], [ 73.0202, 8.27664 ], [ 73.02043, 8.27646 ], [ 73.02098, 8.27619 ], [ 73.02126, 8.276 ], [ 73.02237, 8.27536 ], [ 73.02279, 8.27504 ], [ 73.023, 8.27479 ], [ 73.02318, 8.27453 ], [ 73.02332, 8.27407 ], [ 73.02332, 8.2738 ], [ 73.02326, 8.27361 ], [ 73.02313, 8.27343 ], [ 73.02297, 8.27327 ], [ 73.02286, 8.27322 ], [ 73.0227986, 8.2731058 ], [ 73.0226746, 8.27318 ], [ 73.02249, 8.2732 ], [ 73.0223, 8.27327 ], [ 73.02213, 8.27343 ], [ 73.02168, 8.27396 ], [ 73.02156, 8.27415 ], [ 73.0213, 8.27429 ], [ 73.02113, 8.27464 ], [ 73.02104, 8.27476 ], [ 73.02091, 8.27482 ], [ 73.02078, 8.27483 ], [ 73.02052, 8.27501 ], [ 73.02023, 8.27559 ], [ 73.02007, 8.27576 ], [ 73.01988, 8.27591 ], [ 73.01982, 8.27607 ], [ 73.01971, 8.27616 ], [ 73.01957, 8.27616 ], [ 73.01947, 8.27611 ], [ 73.01947, 8.27596 ], [ 73.01943, 8.27578 ], [ 73.01951, 8.27549 ], [ 73.01985, 8.27519 ], [ 73.02013, 8.27478 ], [ 73.02015, 8.27459 ], [ 73.02027, 8.27429 ], [ 73.02039, 8.27407 ], [ 73.0208, 8.27363 ], [ 73.02175, 8.27295 ], [ 73.02212, 8.2728 ], [ 73.02217, 8.27287 ], [ 73.02254, 8.27271 ], [ 73.02269, 8.27257 ], [ 73.02299, 8.27243 ], [ 73.02336, 8.27237 ], [ 73.02378, 8.27236 ], [ 73.02429, 8.27228 ], [ 73.02528, 8.27223 ], [ 73.02581, 8.27214 ], [ 73.02588, 8.27208 ], [ 73.026, 8.27204 ], [ 73.02668, 8.27199 ], [ 73.02748, 8.27208 ], [ 73.02925, 8.27239 ], [ 73.03034, 8.27267 ], [ 73.0307, 8.27272 ], [ 73.03111, 8.27281 ], [ 73.03173, 8.27303 ], [ 73.03247, 8.27324 ], [ 73.03265, 8.27325 ], [ 73.03302, 8.27336 ], [ 73.03341, 8.27354 ], [ 73.03403, 8.2737 ], [ 73.03428, 8.27381 ], [ 73.03446, 8.27386 ], [ 73.03551, 8.27393 ], [ 73.03691, 8.27387 ], [ 73.03759, 8.27389 ], [ 73.03785, 8.27392 ], [ 73.03897, 8.27391 ], [ 73.0393, 8.27388 ], [ 73.03987, 8.27389 ], [ 73.04027, 8.27394 ], [ 73.04055, 8.27394 ], [ 73.04148, 8.27406 ], [ 73.04392, 8.27459 ], [ 73.04424, 8.27464 ], [ 73.04478, 8.27484 ], [ 73.04617, 8.27562 ], [ 73.04691, 8.27599 ], [ 73.04776, 8.27658 ], [ 73.04869, 8.27741 ], [ 73.04929, 8.27786 ], [ 73.04983, 8.27817 ], [ 73.04999, 8.27841 ], [ 73.05179, 8.27976 ], [ 73.05323, 8.2809 ], [ 73.0538184, 8.2813158 ], [ 73.05398, 8.28143 ], [ 73.05432, 8.2817 ], [ 73.05565, 8.28255 ], [ 73.05613, 8.28307 ], [ 73.05625, 8.28327 ], [ 73.05634, 8.28348 ], [ 73.05639, 8.28377 ], [ 73.05644, 8.28385 ], [ 73.05653, 8.28391 ], [ 73.05674, 8.28431 ], [ 73.057, 8.28455 ], [ 73.05727, 8.2849 ], [ 73.05727, 8.28498 ], [ 73.05724, 8.28504 ], [ 73.05713, 8.28508 ], [ 73.05711, 8.28513 ], [ 73.05713, 8.28523 ], [ 73.05719, 8.2853 ], [ 73.05744, 8.28545 ], [ 73.05749, 8.28556 ], [ 73.05752, 8.28571 ], [ 73.05762, 8.28592 ], [ 73.0576, 8.28599 ], [ 73.05789, 8.28669 ], [ 73.05785, 8.28678 ], [ 73.05789, 8.28679 ], [ 73.05796, 8.28676 ], [ 73.05804, 8.2868 ], [ 73.05822, 8.28696 ], [ 73.05827, 8.28704 ], [ 73.05826, 8.28715 ], [ 73.05844, 8.28726 ], [ 73.0585, 8.28738 ], [ 73.05863, 8.28745 ], [ 73.05877, 8.28765 ], [ 73.05925, 8.2881 ], [ 73.05926, 8.28816 ], [ 73.05922, 8.28826 ], [ 73.05923, 8.2883 ], [ 73.0593, 8.28837 ], [ 73.05946, 8.28847 ], [ 73.0597, 8.2887 ], [ 73.0597, 8.28879 ], [ 73.05959, 8.28887 ], [ 73.05958, 8.2889 ], [ 73.05964, 8.28891 ], [ 73.05978, 8.28902 ], [ 73.06008, 8.28933 ], [ 73.06027, 8.28962 ], [ 73.0603, 8.28976 ], [ 73.06029, 8.28982 ], [ 73.06032, 8.28989 ], [ 73.06061, 8.29007 ], [ 73.06061, 8.29018 ], [ 73.06075, 8.29036 ], [ 73.06088, 8.29046 ], [ 73.06089, 8.2905 ], [ 73.06082, 8.29063 ], [ 73.06098, 8.29103 ], [ 73.06102, 8.29123 ], [ 73.06106, 8.29123 ], [ 73.06114, 8.29115 ], [ 73.06118, 8.29114 ], [ 73.06127, 8.29118 ], [ 73.06147, 8.2914 ], [ 73.06154, 8.29151 ], [ 73.06156, 8.29168 ], [ 73.0615, 8.29179 ], [ 73.0613, 8.29197 ], [ 73.0613, 8.292 ], [ 73.06159, 8.29219 ], [ 73.06239, 8.29305 ], [ 73.06267, 8.29341 ], [ 73.06287, 8.29364 ], [ 73.06306, 8.29394 ], [ 73.06298, 8.29402 ], [ 73.06286, 8.29422 ], [ 73.06351, 8.295 ], [ 73.06384, 8.29544 ], [ 73.06457, 8.29665 ], [ 73.06505, 8.29769 ], [ 73.06517, 8.29803 ], [ 73.06528, 8.29844 ], [ 73.06549, 8.29891 ], [ 73.06558, 8.29935 ], [ 73.06569, 8.29971 ], [ 73.06575, 8.30066 ], [ 73.06581, 8.3009 ], [ 73.06584, 8.30163 ], [ 73.06608, 8.30277 ], [ 73.06619, 8.30311 ], [ 73.06626, 8.30347 ], [ 73.06636, 8.30375 ], [ 73.06652, 8.30447 ], [ 73.06674, 8.30506 ], [ 73.06698, 8.30557 ], [ 73.0671, 8.30577 ], [ 73.06767, 8.30651 ], [ 73.06807, 8.30728 ], [ 73.0684, 8.30815 ], [ 73.06925, 8.30979 ], [ 73.06964, 8.31067 ], [ 73.07039, 8.31233 ], [ 73.07086, 8.31327 ], [ 73.07102, 8.31368 ], [ 73.07231, 8.31639 ], [ 73.07349, 8.3186 ], [ 73.07488, 8.32094 ], [ 73.07495, 8.32115 ], [ 73.07554, 8.32213 ], [ 73.07587, 8.32251 ], [ 73.07587, 8.32264 ], [ 73.07593, 8.32271 ], [ 73.07611, 8.32277 ], [ 73.07642, 8.32299 ], [ 73.07652, 8.32309 ], [ 73.07659, 8.32325 ], [ 73.07685, 8.32351 ], [ 73.0769628, 8.3236123 ], [ 73.0770744, 8.3238128 ], [ 73.077331, 8.3239191 ], [ 73.07749, 8.32408 ], [ 73.0775, 8.32425 ], [ 73.07763, 8.32446 ], [ 73.0775907, 8.3246993 ], [ 73.0776606, 8.3247882 ], [ 73.0780719, 8.3249007 ], [ 73.07837, 8.32503 ], [ 73.07842, 8.32507 ], [ 73.07848, 8.32505 ], [ 73.07843, 8.32484 ], [ 73.07814, 8.32441 ], [ 73.07771, 8.32403 ], [ 73.077479, 8.3238198 ], [ 73.0773997, 8.3238581 ], [ 73.0772553, 8.3238442 ], [ 73.0771302, 8.3237657 ], [ 73.0770519, 8.323693 ], [ 73.0771372, 8.3236908 ], [ 73.0772566, 8.3235555 ], [ 73.07706, 8.32333 ], [ 73.07674, 8.32291 ], [ 73.07635, 8.32232 ], [ 73.07609, 8.32197 ], [ 73.07555, 8.32097 ], [ 73.07526, 8.31992 ], [ 73.07449, 8.31837 ], [ 73.07336, 8.31665 ], [ 73.07242, 8.31496 ], [ 73.07221, 8.31452 ], [ 73.07159, 8.31338 ], [ 73.07119, 8.31277 ], [ 73.07073, 8.31184 ], [ 73.06994, 8.31045 ], [ 73.06964, 8.30988 ], [ 73.06905, 8.30888 ], [ 73.06831, 8.30692 ], [ 73.06804, 8.30627 ], [ 73.06731, 8.30422 ], [ 73.06701, 8.30331 ], [ 73.06658, 8.30127 ], [ 73.06657, 8.30089 ], [ 73.06648, 8.30041 ], [ 73.06649, 8.29908 ], [ 73.06624, 8.29696 ], [ 73.06612, 8.29639 ], [ 73.06597, 8.29503 ], [ 73.06592, 8.29432 ], [ 73.06595, 8.29395 ], [ 73.06594, 8.2925 ], [ 73.066, 8.29191 ], [ 73.06612, 8.29125 ], [ 73.06613, 8.29095 ], [ 73.06619, 8.29051 ], [ 73.06631, 8.29 ], [ 73.06639, 8.28976 ], [ 73.06646, 8.28941 ], [ 73.06664, 8.28891 ], [ 73.06666, 8.28879 ], [ 73.06665, 8.28852 ], [ 73.06658, 8.28823 ], [ 73.06654, 8.28721 ], [ 73.06648, 8.28668 ], [ 73.06625, 8.28612 ], [ 73.06604, 8.28579 ], [ 73.06529, 8.28485 ], [ 73.06495, 8.28449 ], [ 73.06444, 8.28402 ], [ 73.06335, 8.2831 ], [ 73.06266, 8.28258 ], [ 73.06191, 8.28193 ], [ 73.06154, 8.28172 ], [ 73.06136, 8.28158 ], [ 73.06113, 8.28133 ], [ 73.06089, 8.28113 ], [ 73.06088, 8.28107 ], [ 73.06056, 8.2808 ], [ 73.05905, 8.27931 ], [ 73.05833, 8.27868 ], [ 73.0567, 8.27701 ], [ 73.05623, 8.2765 ], [ 73.05592, 8.27622 ], [ 73.05563, 8.27591 ], [ 73.05536, 8.27557 ], [ 73.05504, 8.27525 ], [ 73.05365, 8.27354 ], [ 73.05335, 8.27314 ], [ 73.05253, 8.27216 ], [ 73.05157, 8.27073 ], [ 73.0512, 8.27022 ], [ 73.05089, 8.26971 ], [ 73.0507, 8.26946 ], [ 73.05052, 8.26935 ], [ 73.05046, 8.26934 ], [ 73.05036, 8.26917 ], [ 73.05034, 8.26909 ], [ 73.05018, 8.26885 ], [ 73.04976, 8.26843 ], [ 73.04918, 8.26779 ], [ 73.04872, 8.26735 ], [ 73.04782, 8.26674 ], [ 73.0474, 8.26649 ], [ 73.04706, 8.26637 ], [ 73.04553, 8.26593 ], [ 73.04506, 8.26583 ], [ 73.04469, 8.2658 ], [ 73.04395, 8.2657 ], [ 73.04362, 8.2657 ], [ 73.0431, 8.26566 ], [ 73.04185, 8.26567 ], [ 73.04133, 8.26573 ], [ 73.04039, 8.26579 ], [ 73.03971, 8.26587 ], [ 73.03874, 8.26586 ], [ 73.03709, 8.26607 ], [ 73.03614, 8.2661 ], [ 73.03507, 8.26624 ], [ 73.03388, 8.26648 ], [ 73.03333, 8.26655 ], [ 73.03299, 8.26663 ], [ 73.03229, 8.26673 ] ] ], [ [ [ 93.62427, 8.42442 ], [ 93.62338, 8.42358 ], [ 93.62244, 8.42299 ], [ 93.6221, 8.42289 ], [ 93.62183, 8.42297 ], [ 93.62153, 8.42319 ], [ 93.62147, 8.42351 ], [ 93.62163, 8.42466 ], [ 93.62194, 8.42579 ], [ 93.62196, 8.42617 ], [ 93.6219, 8.42645 ], [ 93.6217, 8.42697 ], [ 93.62127, 8.42796 ], [ 93.62111, 8.4285 ], [ 93.62104, 8.42903 ], [ 93.62082, 8.42951 ], [ 93.62062, 8.43009 ], [ 93.62061, 8.43039 ], [ 93.62041, 8.43088 ], [ 93.62026, 8.43137 ], [ 93.62003, 8.4318 ], [ 93.61954, 8.433 ], [ 93.61914, 8.43339 ], [ 93.61882, 8.43374 ], [ 93.61825, 8.43443 ], [ 93.61781, 8.43458 ], [ 93.61782, 8.43473 ], [ 93.61808, 8.43475 ], [ 93.61823, 8.43479 ], [ 93.61845, 8.43496 ], [ 93.61858, 8.43519 ], [ 93.61876, 8.43561 ], [ 93.61878, 8.43594 ], [ 93.61884, 8.43609 ], [ 93.61912, 8.43593 ], [ 93.61946, 8.43567 ], [ 93.61984, 8.43563 ], [ 93.62005, 8.4357 ], [ 93.6204, 8.43612 ], [ 93.62066, 8.43688 ], [ 93.62076, 8.43784 ], [ 93.62078, 8.43862 ], [ 93.62068, 8.43945 ], [ 93.62045, 8.44 ], [ 93.62015, 8.44058 ], [ 93.6199, 8.44115 ], [ 93.61982, 8.44164 ], [ 93.61927, 8.44243 ], [ 93.61899, 8.44265 ], [ 93.61879, 8.44272 ], [ 93.61804, 8.44274 ], [ 93.61773, 8.44278 ], [ 93.61739, 8.44305 ], [ 93.6173, 8.4433 ], [ 93.6176, 8.44346 ], [ 93.61778, 8.44362 ], [ 93.61778, 8.44385 ], [ 93.61792, 8.4442 ], [ 93.61843, 8.44434 ], [ 93.61916, 8.44464 ], [ 93.61965, 8.44504 ], [ 93.61995, 8.4452 ], [ 93.62033, 8.44579 ], [ 93.62053, 8.44631 ], [ 93.62076, 8.44701 ], [ 93.62079, 8.44816 ], [ 93.62054, 8.44876 ], [ 93.62013, 8.44917 ], [ 93.61973, 8.44941 ], [ 93.61971, 8.44972 ], [ 93.6203, 8.45043 ], [ 93.6206, 8.4509 ], [ 93.62071, 8.45143 ], [ 93.62083, 8.45172 ], [ 93.62092, 8.45205 ], [ 93.62092, 8.45235 ], [ 93.6208, 8.45273 ], [ 93.62045, 8.45307 ], [ 93.62009, 8.45317 ], [ 93.62014, 8.45364 ], [ 93.61951, 8.45439 ], [ 93.61917, 8.45486 ], [ 93.61873, 8.455 ], [ 93.61825, 8.45507 ], [ 93.61827, 8.45525 ], [ 93.6188, 8.45538 ], [ 93.6192, 8.45574 ], [ 93.61983, 8.45613 ], [ 93.62045, 8.45692 ], [ 93.62116, 8.45833 ], [ 93.62284, 8.46062 ], [ 93.62355, 8.4618 ], [ 93.6236, 8.46281 ], [ 93.62351, 8.46409 ], [ 93.62333, 8.46484 ], [ 93.62253, 8.46545 ], [ 93.62155, 8.46759 ], [ 93.62071, 8.46922 ], [ 93.62066, 8.46983 ], [ 93.62115, 8.46996 ], [ 93.62235, 8.47001 ], [ 93.62262, 8.47027 ], [ 93.62257, 8.47159 ], [ 93.62235, 8.47256 ], [ 93.62173, 8.4733 ], [ 93.62106, 8.47361 ], [ 93.6195, 8.474 ], [ 93.61946, 8.47458 ], [ 93.61999, 8.47515 ], [ 93.62026, 8.47572 ], [ 93.62026, 8.47638 ], [ 93.6199, 8.47757 ], [ 93.61941, 8.47871 ], [ 93.61954, 8.47963 ], [ 93.61973, 8.48022 ], [ 93.62022, 8.48106 ], [ 93.62115, 8.48154 ], [ 93.6243, 8.48155 ], [ 93.62617, 8.48172 ], [ 93.62697, 8.48199 ], [ 93.62732, 8.4841 ], [ 93.62781, 8.4844 ], [ 93.62857, 8.48357 ], [ 93.62857, 8.48348 ], [ 93.62875, 8.48256 ], [ 93.62937, 8.48221 ], [ 93.63101, 8.48304 ], [ 93.63275, 8.4845 ], [ 93.63368, 8.48537 ], [ 93.6339, 8.48687 ], [ 93.63385, 8.48867 ], [ 93.63252, 8.49016 ], [ 93.63145, 8.49091 ], [ 93.63048, 8.49131 ], [ 93.6303, 8.49144 ], [ 93.62843, 8.49214 ], [ 93.62745, 8.4921 ], [ 93.62652, 8.49227 ], [ 93.62608, 8.49284 ], [ 93.62572, 8.49403 ], [ 93.62523, 8.49438 ], [ 93.62367, 8.4953 ], [ 93.6235, 8.49631 ], [ 93.62389, 8.4971 ], [ 93.62447, 8.49751 ], [ 93.62633, 8.4976 ], [ 93.62793, 8.49778 ], [ 93.62865, 8.49804 ], [ 93.62922, 8.49857 ], [ 93.62971, 8.49958 ], [ 93.62962, 8.50055 ], [ 93.62922, 8.50103 ], [ 93.62767, 8.50195 ], [ 93.6262, 8.50257 ], [ 93.62562, 8.5034 ], [ 93.62531, 8.50437 ], [ 93.62553, 8.50542 ], [ 93.62589, 8.50648 ], [ 93.62588, 8.50955 ], [ 93.62544, 8.51105 ], [ 93.62588, 8.51201 ], [ 93.62647, 8.51265 ], [ 93.62785, 8.51278 ], [ 93.62852, 8.51318 ], [ 93.62923, 8.51432 ], [ 93.62905, 8.51516 ], [ 93.62838, 8.51595 ], [ 93.6254, 8.5163 ], [ 93.62376, 8.5177 ], [ 93.62207, 8.51968 ], [ 93.62074, 8.52091 ], [ 93.62034, 8.52166 ], [ 93.62029, 8.52179 ], [ 93.62051, 8.5224 ], [ 93.6215603, 8.5229898 ], [ 93.6220957, 8.5234311 ], [ 93.6222563, 8.5236958 ], [ 93.6213461, 8.5259375 ], [ 93.6206857, 8.5280732 ], [ 93.6193471, 8.5283027 ], [ 93.6177586, 8.5301207 ], [ 93.6182, 8.53126 ], [ 93.6176516, 8.5345862 ], [ 93.61691, 8.53609 ], [ 93.6159739, 8.5376221 ], [ 93.61424, 8.53952 ], [ 93.61317, 8.54194 ], [ 93.611936, 8.5427608 ], [ 93.610939, 8.5432226 ], [ 93.6107497, 8.5441337 ], [ 93.6113555, 8.5452819 ], [ 93.61179, 8.54633 ], [ 93.6115016, 8.5495112 ], [ 93.6102378, 8.5526405 ], [ 93.610096, 8.5534784 ], [ 93.6103794, 8.5539549 ], [ 93.6110691, 8.55445 ], [ 93.6112581, 8.5549078 ], [ 93.6111411, 8.5553485 ], [ 93.61054, 8.5564493 ], [ 93.6105022, 8.5571594 ], [ 93.6111662, 8.557425 ], [ 93.61175, 8.5581 ], [ 93.61224, 8.56052 ], [ 93.61277, 8.56201 ], [ 93.6134176, 8.5634566 ], [ 93.6132947, 8.5654765 ], [ 93.6129581, 8.5669664 ], [ 93.613176, 8.5679313 ], [ 93.6123809, 8.5685897 ], [ 93.6119448, 8.5702471 ], [ 93.6117725, 8.5711278 ], [ 93.6114796, 8.5714174 ], [ 93.6124901, 8.5721938 ], [ 93.6127753, 8.572382 ], [ 93.6130475, 8.572583 ], [ 93.6133799, 8.5725736 ], [ 93.6137206, 8.5727982 ], [ 93.6134353, 8.5730804 ], [ 93.613218, 8.573426 ], [ 93.61338, 8.57392 ], [ 93.6132747, 8.5743042 ], [ 93.613218, 8.57479 ], [ 93.6130385, 8.5751543 ], [ 93.6127268, 8.5753412 ], [ 93.6127834, 8.5756028 ], [ 93.6129724, 8.5756962 ], [ 93.6131897, 8.5752851 ], [ 93.6135251, 8.5750002 ], [ 93.6142111, 8.574694 ], [ 93.6143896, 8.5746125 ], [ 93.6144793, 8.5742715 ], [ 93.6145124, 8.5739585 ], [ 93.6148336, 8.5737623 ], [ 93.6157263, 8.5726169 ], [ 93.6159501, 8.5721407 ], [ 93.6163443, 8.5721209 ], [ 93.6165647, 8.5720218 ], [ 93.6166961, 8.5716333 ], [ 93.6171393, 8.5716387 ], [ 93.6174466, 8.5713414 ], [ 93.6175765, 8.5707398 ], [ 93.6176203, 8.570225 ], [ 93.6173406, 8.5699549 ], [ 93.6174265, 8.5691218 ], [ 93.6171059, 8.5688708 ], [ 93.6170123, 8.568666 ], [ 93.6170324, 8.568448 ], [ 93.6172395, 8.5672325 ], [ 93.6175134, 8.5669881 ], [ 93.6179142, 8.5668559 ], [ 93.6184754, 8.5668427 ], [ 93.6189163, 8.5671004 ], [ 93.6191396, 8.5667757 ], [ 93.6190161, 8.5661109 ], [ 93.6193695, 8.5652249 ], [ 93.6190035, 8.5649753 ], [ 93.619218, 8.5646009 ], [ 93.6197355, 8.5645011 ], [ 93.620051, 8.5644636 ], [ 93.6201267, 8.5639894 ], [ 93.6197228, 8.5635401 ], [ 93.62015, 8.56224 ], [ 93.6197044, 8.5606442 ], [ 93.6200803, 8.560193 ], [ 93.62042, 8.55938 ], [ 93.61886, 8.55784 ], [ 93.61784, 8.55648 ], [ 93.61731, 8.55529 ], [ 93.61762, 8.55375 ], [ 93.61829, 8.54929 ], [ 93.6191664, 8.5484964 ], [ 93.6196037, 8.5485317 ], [ 93.6196662, 8.5483287 ], [ 93.6192735, 8.5475786 ], [ 93.618631, 8.5476051 ], [ 93.6183683, 8.5467976 ], [ 93.6181699, 8.5463492 ], [ 93.6181038, 8.5459568 ], [ 93.6181321, 8.5455924 ], [ 93.6183566, 8.5452245 ], [ 93.6189541, 8.5448917 ], [ 93.6193604, 8.5446114 ], [ 93.6194077, 8.5441855 ], [ 93.6190013, 8.5436864 ], [ 93.618784, 8.5433127 ], [ 93.618784, 8.5427895 ], [ 93.6189258, 8.5423971 ], [ 93.6190769, 8.5421075 ], [ 93.6197666, 8.5420981 ], [ 93.6202107, 8.5420234 ], [ 93.6205374, 8.5417368 ], [ 93.620683, 8.5411825 ], [ 93.6206453, 8.5401454 ], [ 93.6203146, 8.5397437 ], [ 93.6202107, 8.5394167 ], [ 93.6206169, 8.5384637 ], [ 93.6212979, 8.5383127 ], [ 93.6218357, 8.5376789 ], [ 93.6217541, 8.5372713 ], [ 93.6216651, 8.5357443 ], [ 93.6216919, 8.5351618 ], [ 93.6219596, 8.5345441 ], [ 93.6224504, 8.5344911 ], [ 93.6225308, 8.5342087 ], [ 93.6223344, 8.5334144 ], [ 93.6220667, 8.5331232 ], [ 93.6214956, 8.532576 ], [ 93.6217811, 8.5316406 ], [ 93.62279, 8.53022 ], [ 93.62394, 8.52877 ], [ 93.62626, 8.52692 ], [ 93.62803, 8.52569 ], [ 93.62928, 8.52539 ], [ 93.63048, 8.52534 ], [ 93.63101, 8.5249 ], [ 93.63101, 8.52398 ], [ 93.63123, 8.52337 ], [ 93.63181, 8.52306 ], [ 93.63252, 8.52301 ], [ 93.63337, 8.52332 ], [ 93.6343, 8.52346 ], [ 93.63514, 8.52328 ], [ 93.63568, 8.5228 ], [ 93.63568, 8.52157 ], [ 93.63506, 8.52069 ], [ 93.63403, 8.52012 ], [ 93.6331, 8.51972 ], [ 93.63257, 8.51893 ], [ 93.63324, 8.51695 ], [ 93.63426, 8.51554 ], [ 93.63546, 8.51352 ], [ 93.63635, 8.51264 ], [ 93.63635, 8.51159 ], [ 93.63599, 8.51062 ], [ 93.63417, 8.50952 ], [ 93.63284, 8.50882 ], [ 93.63186, 8.50798 ], [ 93.6312, 8.50693 ], [ 93.6312, 8.50579 ], [ 93.63151, 8.50429 ], [ 93.63209, 8.50299 ], [ 93.63324, 8.50136 ], [ 93.63476, 8.49978 ], [ 93.636, 8.4986 ], [ 93.63627, 8.49767 ], [ 93.63578, 8.49671 ], [ 93.63511, 8.49591 ], [ 93.63485, 8.49486 ], [ 93.63476, 8.49336 ], [ 93.6352, 8.49253 ], [ 93.63605, 8.49205 ], [ 93.63712, 8.49174 ], [ 93.63752, 8.49104 ], [ 93.63747, 8.48994 ], [ 93.63734, 8.48875 ], [ 93.63734, 8.4877 ], [ 93.63774, 8.48651 ], [ 93.63835, 8.48501 ], [ 93.63857, 8.48383 ], [ 93.63873, 8.48238 ], [ 93.63871, 8.4812 ], [ 93.63867, 8.4805 ], [ 93.6385, 8.47993 ], [ 93.6391, 8.47864 ], [ 93.63963, 8.47662 ], [ 93.64025, 8.47459 ], [ 93.64025, 8.47278 ], [ 93.64082, 8.47121 ], [ 93.64165, 8.46874 ], [ 93.64181, 8.46747 ], [ 93.64181, 8.46684 ], [ 93.64156, 8.46616 ], [ 93.64119, 8.46555 ], [ 93.64082, 8.46533 ], [ 93.64051, 8.46533 ], [ 93.6392, 8.46556 ], [ 93.63868, 8.46587 ], [ 93.63821, 8.46635 ], [ 93.63796, 8.46693 ], [ 93.63765, 8.46789 ], [ 93.63732, 8.46878 ], [ 93.63685, 8.4697 ], [ 93.63631, 8.47022 ], [ 93.63539, 8.47037 ], [ 93.6346, 8.47078 ], [ 93.63378, 8.47103 ], [ 93.63283, 8.47104 ], [ 93.63025, 8.47027 ], [ 93.62879, 8.46966 ], [ 93.62768, 8.46875 ], [ 93.62693, 8.46779 ], [ 93.62648, 8.467 ], [ 93.62623, 8.466 ], [ 93.62557, 8.46451 ], [ 93.62522, 8.46353 ], [ 93.62502, 8.46193 ], [ 93.62442, 8.45976 ], [ 93.62489, 8.4587 ], [ 93.62491, 8.45828 ], [ 93.6245, 8.45718 ], [ 93.62433, 8.45683 ], [ 93.62431, 8.45645 ], [ 93.62436, 8.45614 ], [ 93.62419, 8.45564 ], [ 93.62417, 8.45527 ], [ 93.62421, 8.45483 ], [ 93.62419, 8.45456 ], [ 93.62398, 8.45418 ], [ 93.62386, 8.45382 ], [ 93.6238, 8.45311 ], [ 93.62369, 8.45288 ], [ 93.62337, 8.45257 ], [ 93.62326, 8.4522 ], [ 93.62304, 8.45182 ], [ 93.62252, 8.45049 ], [ 93.62244, 8.45043 ], [ 93.62205, 8.44947 ], [ 93.62205, 8.44888 ], [ 93.62223, 8.44828 ], [ 93.62262, 8.44771 ], [ 93.6232, 8.44638 ], [ 93.62402, 8.44523 ], [ 93.62457, 8.44432 ], [ 93.62531, 8.44294 ], [ 93.62552, 8.44281 ], [ 93.62581, 8.44277 ], [ 93.62591, 8.44267 ], [ 93.62593, 8.44231 ], [ 93.62601, 8.44184 ], [ 93.6263, 8.44143 ], [ 93.62651, 8.44124 ], [ 93.62681, 8.44109 ], [ 93.62688, 8.44082 ], [ 93.62681, 8.44066 ], [ 93.62624, 8.44066 ], [ 93.62615, 8.44028 ], [ 93.62651, 8.43956 ], [ 93.62682, 8.4392 ], [ 93.627, 8.43889 ], [ 93.62708, 8.43834 ], [ 93.62679, 8.4382 ], [ 93.62667, 8.43785 ], [ 93.62735, 8.43689 ], [ 93.62724, 8.43647 ], [ 93.62673, 8.43628 ], [ 93.62656, 8.4358 ], [ 93.62646, 8.43487 ], [ 93.62657, 8.43389 ], [ 93.62662, 8.43193 ], [ 93.62584, 8.42956 ], [ 93.62475, 8.42714 ], [ 93.62433, 8.4258 ], [ 93.62421, 8.42514 ], [ 93.62427, 8.42442 ] ] ], [ [ [ 92.85811, 8.82081 ], [ 92.85741, 8.82051 ], [ 92.85654, 8.82042 ], [ 92.8553, 8.82043 ], [ 92.8541, 8.82057 ], [ 92.85324, 8.82171 ], [ 92.85268, 8.82356 ], [ 92.85322, 8.82494 ], [ 92.85333, 8.82647 ], [ 92.85324, 8.82821 ], [ 92.85341, 8.8291 ], [ 92.85366, 8.83104 ], [ 92.85494, 8.83358 ], [ 92.85536, 8.83437 ], [ 92.85626, 8.83522 ], [ 92.85746, 8.83606 ], [ 92.85854, 8.83712 ], [ 92.85859, 8.83724 ], [ 92.85933, 8.83751 ], [ 92.86021, 8.83683 ], [ 92.86036, 8.83644 ], [ 92.86077, 8.83596 ], [ 92.86131, 8.83564 ], [ 92.86157, 8.83554 ], [ 92.86211, 8.83518 ], [ 92.86236, 8.8341 ], [ 92.86234, 8.83355 ], [ 92.8624615, 8.8327105 ], [ 92.8620066, 8.83219 ], [ 92.8631306, 8.8315385 ], [ 92.8634124, 8.8301602 ], [ 92.8631831, 8.8287376 ], [ 92.8627428, 8.8277461 ], [ 92.8631728, 8.8272945 ], [ 92.8632208, 8.8265266 ], [ 92.8625265, 8.8254509 ], [ 92.8624008, 8.8246739 ], [ 92.8619911, 8.8237163 ], [ 92.861155, 8.8233553 ], [ 92.860274, 8.8232822 ], [ 92.8598615, 8.8225909 ], [ 92.85909, 8.82162 ], [ 92.859, 8.8215 ], [ 92.85811, 8.82081 ] ] ], [ [ [ 78.5715242, 9.1020587 ], [ 78.5707842, 9.1033887 ], [ 78.5708742, 9.1041987 ], [ 78.5721442, 9.1047987 ], [ 78.5745242, 9.1069587 ], [ 78.5763942, 9.1090187 ], [ 78.5773042, 9.1110687 ], [ 78.5783442, 9.1119587 ], [ 78.5786942, 9.1124787 ], [ 78.5787642, 9.1134387 ], [ 78.5788842, 9.1135587 ], [ 78.5792442, 9.1135787 ], [ 78.5800442, 9.1128487 ], [ 78.5818242, 9.1118687 ], [ 78.5846742, 9.1114887 ], [ 78.5855742, 9.1105987 ], [ 78.5866942, 9.1097087 ], [ 78.5876142, 9.1093687 ], [ 78.5880542, 9.1089887 ], [ 78.5865342, 9.1075087 ], [ 78.5856742, 9.1078887 ], [ 78.5847642, 9.1079087 ], [ 78.5837242, 9.1075387 ], [ 78.5830442, 9.1066887 ], [ 78.5828642, 9.1056487 ], [ 78.5823342, 9.1049887 ], [ 78.5816842, 9.1047887 ], [ 78.5808042, 9.1044487 ], [ 78.5802642, 9.1033787 ], [ 78.5795842, 9.1027887 ], [ 78.5779642, 9.1023087 ], [ 78.5766942, 9.1018987 ], [ 78.5755842, 9.1023087 ], [ 78.5742042, 9.1022587 ], [ 78.5724442, 9.1020387 ], [ 78.5715242, 9.1020587 ] ] ], [ [ [ 93.05864, 8.441 ], [ 93.0586, 8.44092 ], [ 93.05847, 8.44086 ], [ 93.05819, 8.44089 ], [ 93.05805, 8.44086 ], [ 93.0577, 8.44042 ], [ 93.05768, 8.44036 ], [ 93.05771, 8.44021 ], [ 93.05767, 8.44003 ], [ 93.05761, 8.43996 ], [ 93.0575, 8.43959 ], [ 93.05747, 8.43939 ], [ 93.05742, 8.43935 ], [ 93.05687, 8.43967 ], [ 93.05648, 8.43971 ], [ 93.05605, 8.43996 ], [ 93.05357, 8.44038 ], [ 93.05214, 8.44014 ], [ 93.05065, 8.4402 ], [ 93.0477, 8.44095 ], [ 93.0449, 8.44147 ], [ 93.0425535, 8.4424549 ], [ 93.0399465, 8.4440022 ], [ 93.03738, 8.44676 ], [ 93.03553, 8.45096 ], [ 93.03548, 8.45417 ], [ 93.03579, 8.45567 ], [ 93.03588, 8.45656 ], [ 93.03601, 8.45745 ], [ 93.03625, 8.45835 ], [ 93.03681, 8.4599 ], [ 93.03703, 8.4608 ], [ 93.0391, 8.46494 ], [ 93.03992, 8.4667 ], [ 93.04071, 8.46809 ], [ 93.04115, 8.46891 ], [ 93.04168, 8.46958 ], [ 93.0426338, 8.4707805 ], [ 93.0440776, 8.4715343 ], [ 93.045321, 8.4712169 ], [ 93.0466445, 8.4701458 ], [ 93.0474868, 8.4699078 ], [ 93.0476874, 8.4691144 ], [ 93.048289, 8.46844 ], [ 93.0487703, 8.4678449 ], [ 93.0499735, 8.4671309 ], [ 93.0516179, 8.4659804 ], [ 93.05128, 8.46448 ], [ 93.0526, 8.46328 ], [ 93.05348, 8.46252 ], [ 93.05398, 8.462 ], [ 93.05457, 8.46157 ], [ 93.05504, 8.46113 ], [ 93.0553, 8.46073 ], [ 93.05543, 8.4603 ], [ 93.0558, 8.45959 ], [ 93.05588, 8.45932 ], [ 93.05604, 8.45907 ], [ 93.05638, 8.45818 ], [ 93.05666, 8.45771 ], [ 93.05671, 8.45737 ], [ 93.0566, 8.45663 ], [ 93.05642, 8.45595 ], [ 93.05624, 8.4556 ], [ 93.05564, 8.45411 ], [ 93.05548, 8.45362 ], [ 93.05529, 8.45193 ], [ 93.0552, 8.45146 ], [ 93.0552, 8.45135 ], [ 93.05526, 8.45127 ], [ 93.05528, 8.45118 ], [ 93.05518, 8.45108 ], [ 93.05515, 8.45101 ], [ 93.05516, 8.45073 ], [ 93.05526, 8.45061 ], [ 93.05532, 8.44945 ], [ 93.05537, 8.44933 ], [ 93.05538, 8.44923 ], [ 93.05535, 8.44912 ], [ 93.05542, 8.44895 ], [ 93.0555, 8.44886 ], [ 93.05542, 8.44876 ], [ 93.05541, 8.44857 ], [ 93.05554, 8.44826 ], [ 93.0555, 8.44799 ], [ 93.05578, 8.44729 ], [ 93.0557, 8.44712 ], [ 93.0557, 8.44702 ], [ 93.05624, 8.44593 ], [ 93.05636, 8.44579 ], [ 93.05652, 8.44573 ], [ 93.05708, 8.44568 ], [ 93.05734, 8.44548 ], [ 93.0577, 8.44546 ], [ 93.05782, 8.44543 ], [ 93.0579, 8.44537 ], [ 93.05805, 8.44513 ], [ 93.05825, 8.44498 ], [ 93.05843, 8.44494 ], [ 93.05854, 8.44489 ], [ 93.05858, 8.44484 ], [ 93.05859, 8.44463 ], [ 93.05857, 8.44446 ], [ 93.05861, 8.44425 ], [ 93.05869, 8.44413 ], [ 93.05884, 8.444 ], [ 93.05892, 8.44375 ], [ 93.05892, 8.4436 ], [ 93.05904, 8.44339 ], [ 93.0591, 8.44313 ], [ 93.05908, 8.44284 ], [ 93.05899, 8.44231 ], [ 93.05886, 8.44185 ], [ 93.05867, 8.44145 ], [ 93.05864, 8.441 ] ] ], [ [ [ 93.4805597, 8.0863653 ], [ 93.4806445, 8.0865065 ], [ 93.4821741, 8.0853399 ], [ 93.4832759, 8.0848628 ], [ 93.4836987, 8.0850749 ], [ 93.4836139, 8.0857086 ], [ 93.4840149, 8.0858003 ], [ 93.4848953, 8.0868087 ], [ 93.4860139, 8.0863821 ], [ 93.4883715, 8.0880218 ], [ 93.4891191, 8.0897544 ], [ 93.4913228, 8.0890031 ], [ 93.4895502, 8.0924817 ], [ 93.4868753, 8.0945035 ], [ 93.4838435, 8.0967996 ], [ 93.4814228, 8.0973005 ], [ 93.4802218, 8.0964691 ], [ 93.4804044, 8.0946961 ], [ 93.4792765, 8.0937692 ], [ 93.4783169, 8.0903134 ], [ 93.47302, 8.09636 ], [ 93.46867, 8.10165 ], [ 93.46847, 8.10654 ], [ 93.46846, 8.11007 ], [ 93.46886, 8.1132 ], [ 93.469495880974478, 8.11671365 ], [ 93.46964, 8.11751 ], [ 93.46786, 8.12103 ], [ 93.4641, 8.12103 ], [ 93.46074, 8.12279 ], [ 93.45915, 8.12564 ], [ 93.45915, 8.13151 ], [ 93.46191, 8.13524 ], [ 93.46626, 8.13837 ], [ 93.4656647, 8.1422567 ], [ 93.46467, 8.14503 ], [ 93.46131, 8.14522 ], [ 93.4592775, 8.142464 ], [ 93.4571834, 8.1449516 ], [ 93.4561363, 8.1647485 ], [ 93.4550892, 8.1753202 ], [ 93.4606387, 8.179155 ], [ 93.4693198, 8.1809336 ], [ 93.471652, 8.1822527 ], [ 93.4745026, 8.1825092 ], [ 93.4790134, 8.1875048 ], [ 93.4808407, 8.1912807 ], [ 93.4819401, 8.1926798 ], [ 93.4846204, 8.1946523 ], [ 93.486911, 8.1941274 ], [ 93.4918494, 8.198112 ], [ 93.4940176, 8.1992626 ], [ 93.4937579, 8.1999473 ], [ 93.4922705, 8.1999945 ], [ 93.4918927, 8.2017652 ], [ 93.4911962, 8.2018243 ], [ 93.4904525, 8.2024972 ], [ 93.4909766, 8.204092 ], [ 93.4917519, 8.2051321 ], [ 93.4923315, 8.2055546 ], [ 93.4928889, 8.2064962 ], [ 93.4929899, 8.207199 ], [ 93.492975, 8.2105373 ], [ 93.4932211, 8.2135224 ], [ 93.4928717, 8.2147147 ], [ 93.4926477, 8.2161981 ], [ 93.4926822, 8.2172382 ], [ 93.4925271, 8.2180055 ], [ 93.4923333, 8.2184998 ], [ 93.4927683, 8.2197617 ], [ 93.493733, 8.2211428 ], [ 93.4946461, 8.2215179 ], [ 93.495249, 8.221552 ], [ 93.4965928, 8.2222169 ], [ 93.497259, 8.2228972 ], [ 93.4974197, 8.2234446 ], [ 93.499263, 8.2244505 ], [ 93.501761, 8.2250132 ], [ 93.5026568, 8.2250132 ], [ 93.5033159, 8.2252388 ], [ 93.5050514, 8.2257634 ], [ 93.5062574, 8.2260703 ], [ 93.5068993, 8.2267682 ], [ 93.5078767, 8.2276389 ], [ 93.5084797, 8.2279458 ], [ 93.5087381, 8.2284403 ], [ 93.5094617, 8.2283721 ], [ 93.5108119, 8.2277198 ], [ 93.5125344, 8.2279997 ], [ 93.5138744, 8.2284337 ], [ 93.5151169, 8.2293018 ], [ 93.5156773, 8.2305556 ], [ 93.5174315, 8.2305315 ], [ 93.5190638, 8.2310379 ], [ 93.5194536, 8.2314237 ], [ 93.5197216, 8.2321711 ], [ 93.5206058, 8.2332213 ], [ 93.5231568, 8.2328704 ], [ 93.5243506, 8.2322917 ], [ 93.5248135, 8.2317371 ], [ 93.5247892, 8.230845 ], [ 93.5256906, 8.2313996 ], [ 93.5282949, 8.2316781 ], [ 93.5309774, 8.2308932 ], [ 93.5348043, 8.2295806 ], [ 93.538798, 8.228072 ], [ 93.539602, 8.2269629 ], [ 93.5399918, 8.2262636 ], [ 93.5423191, 8.2247897 ], [ 93.54453, 8.21988 ], [ 93.5453391, 8.2151574 ], [ 93.5452543, 8.212471 ], [ 93.5456197, 8.2089986 ], [ 93.5457285, 8.2051942 ], [ 93.5455954, 8.2026808 ], [ 93.5451325, 8.2002453 ], [ 93.5440361, 8.1961458 ], [ 93.5430905, 8.1943062 ], [ 93.540526, 8.1906479 ], [ 93.53664, 8.18874 ], [ 93.5332867, 8.1854395 ], [ 93.5295612, 8.181214 ], [ 93.5270685, 8.1785055 ], [ 93.5253889, 8.1756848 ], [ 93.5219863, 8.1748382 ], [ 93.5223195, 8.1728594 ], [ 93.5192468, 8.1704043 ], [ 93.51311, 8.17502 ], [ 93.50995, 8.17051 ], [ 93.50778, 8.16385 ], [ 93.5067067, 8.1576159 ], [ 93.5061514, 8.1562417 ], [ 93.5051149, 8.1555821 ], [ 93.5056146, 8.1548309 ], [ 93.5065586, 8.1545561 ], [ 93.5067067, 8.1537865 ], [ 93.506244, 8.1534017 ], [ 93.5062402, 8.1523182 ], [ 93.5069993, 8.1524089 ], [ 93.507104, 8.1519295 ], [ 93.506358, 8.1509707 ], [ 93.5066983, 8.1501675 ], [ 93.5067375, 8.1492864 ], [ 93.5057821, 8.1489884 ], [ 93.5050491, 8.1491828 ], [ 93.5048135, 8.1496363 ], [ 93.5039104, 8.1496233 ], [ 93.5034654, 8.1498176 ], [ 93.5031775, 8.1499861 ], [ 93.5029157, 8.1494678 ], [ 93.5026409, 8.1489755 ], [ 93.5024445, 8.1492864 ], [ 93.5016985, 8.1505043 ], [ 93.5010703, 8.1504914 ], [ 93.5009263, 8.1502193 ], [ 93.5011226, 8.1493771 ], [ 93.5018032, 8.1489884 ], [ 93.502222, 8.148449 ], [ 93.501639, 8.147881 ], [ 93.5005839, 8.1475512 ], [ 93.4998158, 8.147826 ], [ 93.4988532, 8.1475603 ], [ 93.4996307, 8.1461128 ], [ 93.4991864, 8.1450134 ], [ 93.4989088, 8.1445645 ], [ 93.4982702, 8.1445187 ], [ 93.4976871, 8.1438224 ], [ 93.4971689, 8.1434285 ], [ 93.4975946, 8.1429796 ], [ 93.4979463, 8.142723 ], [ 93.4986867, 8.1429979 ], [ 93.4996677, 8.1431628 ], [ 93.500223, 8.1422741 ], [ 93.5004543, 8.142439 ], [ 93.5000194, 8.14363 ], [ 93.499899, 8.1446744 ], [ 93.5002878, 8.1451692 ], [ 93.5019629, 8.1471114 ], [ 93.5027496, 8.1469557 ], [ 93.5031475, 8.1468549 ], [ 93.5034067, 8.1461311 ], [ 93.5036288, 8.1453158 ], [ 93.5034437, 8.1448485 ], [ 93.5031012, 8.1446012 ], [ 93.5030827, 8.1442347 ], [ 93.5028329, 8.1441614 ], [ 93.5027958, 8.1439965 ], [ 93.5025922, 8.1437583 ], [ 93.5021789, 8.143698 ], [ 93.5024071, 8.1433643 ], [ 93.502657, 8.143346 ], [ 93.5036565, 8.1433827 ], [ 93.5040823, 8.1437766 ], [ 93.5048335, 8.1434307 ], [ 93.504889, 8.142258 ], [ 93.5042967, 8.1418366 ], [ 93.5035748, 8.1412869 ], [ 93.5035748, 8.1407005 ], [ 93.5045559, 8.1407372 ], [ 93.5052777, 8.1412319 ], [ 93.5056664, 8.1412136 ], [ 93.5059996, 8.1410304 ], [ 93.5066104, 8.1403157 ], [ 93.5070732, 8.1401142 ], [ 93.5079019, 8.1397542 ], [ 93.507689, 8.139571 ], [ 93.5073836, 8.1392595 ], [ 93.5070412, 8.1389022 ], [ 93.5070597, 8.1384532 ], [ 93.506745, 8.1380685 ], [ 93.5067173, 8.1375554 ], [ 93.5073374, 8.1375554 ], [ 93.5082721, 8.1383616 ], [ 93.508485, 8.1382242 ], [ 93.5082906, 8.1379677 ], [ 93.5082166, 8.1374546 ], [ 93.5082351, 8.1366484 ], [ 93.5080778, 8.1360804 ], [ 93.507652, 8.135439 ], [ 93.5087996, 8.1362361 ], [ 93.5090495, 8.1366209 ], [ 93.5095123, 8.1367217 ], [ 93.510012, 8.136795 ], [ 93.5109283, 8.1368316 ], [ 93.5113355, 8.1365568 ], [ 93.5117242, 8.1364468 ], [ 93.5119833, 8.1361995 ], [ 93.5115669, 8.1359887 ], [ 93.5111504, 8.136062 ], [ 93.5107524, 8.1361262 ], [ 93.5103545, 8.1359521 ], [ 93.5093734, 8.1359887 ], [ 93.5087534, 8.1356681 ], [ 93.5084109, 8.13521 ], [ 93.5083091, 8.1348893 ], [ 93.5085775, 8.1347702 ], [ 93.5091143, 8.1349535 ], [ 93.5097159, 8.1348435 ], [ 93.5101694, 8.1343854 ], [ 93.5105858, 8.1342388 ], [ 93.5111504, 8.1334051 ], [ 93.5116779, 8.1330386 ], [ 93.5122054, 8.1327913 ], [ 93.5133345, 8.132095 ], [ 93.5138898, 8.1315911 ], [ 93.5142971, 8.1314628 ], [ 93.5145932, 8.1312521 ], [ 93.5147598, 8.1314628 ], [ 93.5150189, 8.1315544 ], [ 93.5150745, 8.1311238 ], [ 93.5150745, 8.1305649 ], [ 93.5146672, 8.1303909 ], [ 93.5144174, 8.1302168 ], [ 93.514186, 8.1299511 ], [ 93.5137603, 8.1297679 ], [ 93.5134734, 8.1295755 ], [ 93.5134178, 8.1290349 ], [ 93.5134734, 8.128586 ], [ 93.5135474, 8.1283661 ], [ 93.5138713, 8.1284119 ], [ 93.5140842, 8.1283478 ], [ 93.5139454, 8.1279813 ], [ 93.5141582, 8.1276606 ], [ 93.5144822, 8.1277706 ], [ 93.5146765, 8.1280546 ], [ 93.5150467, 8.1282745 ], [ 93.5155465, 8.1282195 ], [ 93.5155557, 8.1280088 ], [ 93.5154447, 8.1276698 ], [ 93.5155002, 8.1273583 ], [ 93.5158704, 8.1275049 ], [ 93.5159814, 8.1274499 ], [ 93.5158704, 8.1272117 ], [ 93.5158704, 8.1268635 ], [ 93.5157038, 8.1264146 ], [ 93.5159352, 8.1265429 ], [ 93.5165553, 8.1268819 ], [ 93.5168236, 8.1272941 ], [ 93.5170365, 8.1274316 ], [ 93.5173327, 8.1277614 ], [ 93.5174564, 8.1277652 ], [ 93.5176508, 8.1277515 ], [ 93.5179793, 8.1274445 ], [ 93.5180164, 8.1271376 ], [ 93.5181829, 8.1268811 ], [ 93.5184857, 8.1267422 ], [ 93.5186837, 8.1264404 ], [ 93.5186394, 8.1262604 ], [ 93.5189002, 8.1258595 ], [ 93.5192916, 8.1257262 ], [ 93.5195064, 8.1259374 ], [ 93.5197343, 8.1259122 ], [ 93.519938, 8.125319 ], [ 93.5200914, 8.1250858 ], [ 93.5202833, 8.1246933 ], [ 93.5205518, 8.1245989 ], [ 93.5205164, 8.1243746 ], [ 93.5203393, 8.1242683 ], [ 93.5202331, 8.1241827 ], [ 93.5203578, 8.1238485 ], [ 93.5206846, 8.1233357 ], [ 93.5208086, 8.1233623 ], [ 93.5208794, 8.1234361 ], [ 93.520965, 8.1234361 ], [ 93.5218433, 8.1224283 ], [ 93.5220469, 8.1217412 ], [ 93.52238, 8.1213472 ], [ 93.522704, 8.1207013 ], [ 93.5224124, 8.1204539 ], [ 93.5224865, 8.1200279 ], [ 93.522704, 8.1198859 ], [ 93.5231314, 8.1198096 ], [ 93.5233287, 8.1190888 ], [ 93.5235462, 8.1186398 ], [ 93.5238284, 8.1176366 ], [ 93.5236017, 8.1174808 ], [ 93.5236526, 8.1170639 ], [ 93.5238284, 8.1167845 ], [ 93.5239349, 8.1167066 ], [ 93.5235924, 8.1162943 ], [ 93.5236156, 8.1160927 ], [ 93.5237814, 8.1154935 ], [ 93.5235769, 8.1154058 ], [ 93.5232764, 8.1151616 ], [ 93.522907, 8.1151825 ], [ 93.5227401, 8.1150719 ], [ 93.5226691, 8.1147777 ], [ 93.5226962, 8.1144646 ], [ 93.5227296, 8.114329 ], [ 93.5228444, 8.1142497 ], [ 93.5229467, 8.1141349 ], [ 93.5233828, 8.1138699 ], [ 93.5239129, 8.1138365 ], [ 93.5238279, 8.1136178 ], [ 93.5236017, 8.1136418 ], [ 93.5233426, 8.1134632 ], [ 93.5230233, 8.1134907 ], [ 93.5228659, 8.1132524 ], [ 93.5226114, 8.1131562 ], [ 93.5221102, 8.1128977 ], [ 93.5219867, 8.1125607 ], [ 93.5220689, 8.1125318 ], [ 93.5222755, 8.1123016 ], [ 93.5223985, 8.1119926 ], [ 93.5225824, 8.1118884 ], [ 93.5235682, 8.1123252 ], [ 93.5241153, 8.1122308 ], [ 93.5243467, 8.112524 ], [ 93.5245603, 8.1125817 ], [ 93.5250792, 8.112154 ], [ 93.5252491, 8.1121117 ], [ 93.5253231, 8.1123454 ], [ 93.525516, 8.1124196 ], [ 93.5257026, 8.1120476 ], [ 93.5260059, 8.1118412 ], [ 93.52542, 8.11004 ], [ 93.526597, 8.1087586 ], [ 93.5267576, 8.108401 ], [ 93.5266095, 8.1081536 ], [ 93.525647, 8.1078054 ], [ 93.5252306, 8.1076588 ], [ 93.5251473, 8.1068983 ], [ 93.5248048, 8.106486 ], [ 93.5246475, 8.1060829 ], [ 93.524961, 8.1051859 ], [ 93.5252676, 8.1052949 ], [ 93.5258625, 8.106388 ], [ 93.5260542, 8.1061287 ], [ 93.5264059, 8.106202 ], [ 93.526517, 8.1065227 ], [ 93.5267139, 8.1069389 ], [ 93.5269242, 8.1069625 ], [ 93.5273869, 8.1063761 ], [ 93.5276183, 8.1062478 ], [ 93.52797, 8.1065685 ], [ 93.5281831, 8.1066718 ], [ 93.5286826, 8.1059455 ], [ 93.5289788, 8.1058722 ], [ 93.5290713, 8.1056797 ], [ 93.5291824, 8.10502 ], [ 93.5295618, 8.1043329 ], [ 93.5295526, 8.1039205 ], [ 93.5301819, 8.1027936 ], [ 93.5303366, 8.1023325 ], [ 93.5303393, 8.1008694 ], [ 93.5305151, 8.1006129 ], [ 93.530256, 8.100448 ], [ 93.53033, 8.0997516 ], [ 93.5301264, 8.0995775 ], [ 93.5301171, 8.0989728 ], [ 93.5302198, 8.0986249 ], [ 93.5305984, 8.098029 ], [ 93.5304226, 8.0975251 ], [ 93.5306354, 8.0971677 ], [ 93.5305799, 8.0961965 ], [ 93.5311074, 8.0957842 ], [ 93.5314698, 8.0956882 ], [ 93.5326993, 8.0957109 ], [ 93.5333841, 8.0958025 ], [ 93.5337266, 8.0956376 ], [ 93.534069, 8.0954177 ], [ 93.5342633, 8.0950695 ], [ 93.5344299, 8.0947854 ], [ 93.5344855, 8.0945106 ], [ 93.5347353, 8.0946755 ], [ 93.5348186, 8.0949137 ], [ 93.5350778, 8.0948221 ], [ 93.53505, 8.0946297 ], [ 93.5349482, 8.0945289 ], [ 93.5351611, 8.0944922 ], [ 93.5353462, 8.0943823 ], [ 93.5351796, 8.093915 ], [ 93.5354572, 8.0938692 ], [ 93.5354665, 8.0934752 ], [ 93.5356331, 8.0931453 ], [ 93.5358644, 8.093576 ], [ 93.535957, 8.0938325 ], [ 93.5360403, 8.0940708 ], [ 93.5362254, 8.0942815 ], [ 93.5363272, 8.0940158 ], [ 93.5362346, 8.0936493 ], [ 93.5362069, 8.0933377 ], [ 93.53654, 8.0933561 ], [ 93.5367992, 8.0935851 ], [ 93.5370329, 8.0935659 ], [ 93.5366881, 8.0928613 ], [ 93.5367308, 8.0921807 ], [ 93.5374193, 8.0913036 ], [ 93.5376969, 8.0912853 ], [ 93.537919, 8.0911845 ], [ 93.5376321, 8.0906439 ], [ 93.5371816, 8.0896264 ], [ 93.5377247, 8.089581 ], [ 93.537956, 8.0896818 ], [ 93.5381597, 8.0894802 ], [ 93.5382985, 8.0893886 ], [ 93.5384928, 8.0891595 ], [ 93.5388353, 8.0892511 ], [ 93.5389093, 8.0895993 ], [ 93.5390851, 8.0899842 ], [ 93.539335, 8.0899658 ], [ 93.5394368, 8.0897184 ], [ 93.539733, 8.0896085 ], [ 93.5399366, 8.0890679 ], [ 93.5400569, 8.0891229 ], [ 93.5402698, 8.0892236 ], [ 93.5405011, 8.0891778 ], [ 93.5408528, 8.0886647 ], [ 93.5408621, 8.0883898 ], [ 93.5407973, 8.0879958 ], [ 93.5410287, 8.0880142 ], [ 93.5412138, 8.0883623 ], [ 93.5413619, 8.088683 ], [ 93.5415932, 8.0887655 ], [ 93.5422041, 8.0886372 ], [ 93.5426853, 8.0885731 ], [ 93.543074, 8.0882616 ], [ 93.5431851, 8.0884723 ], [ 93.5440921, 8.088344 ], [ 93.5440643, 8.0886097 ], [ 93.5442494, 8.0888938 ], [ 93.544527, 8.0886281 ], [ 93.5444808, 8.0884265 ], [ 93.5442864, 8.0880233 ], [ 93.544453, 8.0877301 ], [ 93.5448139, 8.0880416 ], [ 93.5452119, 8.0878126 ], [ 93.5452304, 8.0874552 ], [ 93.5457302, 8.0868505 ], [ 93.5460356, 8.0868321 ], [ 93.5464998, 8.0870742 ], [ 93.5463873, 8.0866581 ], [ 93.5461466, 8.0860075 ], [ 93.5464706, 8.0853478 ], [ 93.5469703, 8.0850087 ], [ 93.5471647, 8.0843123 ], [ 93.5474701, 8.0841383 ], [ 93.547322, 8.0838725 ], [ 93.5464613, 8.0840375 ], [ 93.5460263, 8.0842207 ], [ 93.545434, 8.0840558 ], [ 93.5453119, 8.0835828 ], [ 93.5451749, 8.0831395 ], [ 93.5447677, 8.0829013 ], [ 93.5446936, 8.0823148 ], [ 93.5449805, 8.0824706 ], [ 93.5454525, 8.0830845 ], [ 93.5457672, 8.0834785 ], [ 93.5462022, 8.0834877 ], [ 93.5465816, 8.0832311 ], [ 93.5465909, 8.0827272 ], [ 93.5469796, 8.0826355 ], [ 93.547285, 8.0828646 ], [ 93.5475349, 8.0829196 ], [ 93.5474053, 8.0825347 ], [ 93.5474053, 8.0822965 ], [ 93.5477385, 8.0823606 ], [ 93.5480994, 8.0825164 ], [ 93.5480254, 8.0821224 ], [ 93.5482105, 8.0817559 ], [ 93.5488179, 8.0816462 ], [ 93.5483956, 8.0803723 ], [ 93.5482568, 8.0796667 ], [ 93.5475534, 8.079401 ], [ 93.5472017, 8.0792269 ], [ 93.5476644, 8.0791078 ], [ 93.5482383, 8.0791536 ], [ 93.5487288, 8.0793643 ], [ 93.5490804, 8.0788695 ], [ 93.5494877, 8.0788695 ], [ 93.5498486, 8.0792452 ], [ 93.5502003, 8.0786863 ], [ 93.5498301, 8.0786771 ], [ 93.5495895, 8.0784572 ], [ 93.54938, 8.07753 ], [ 93.5499319, 8.0759373 ], [ 93.5504132, 8.0754609 ], [ 93.5508759, 8.07547 ], [ 93.551152, 8.0749662 ], [ 93.54959, 8.07204 ], [ 93.5500152, 8.0689825 ], [ 93.5504289, 8.0686326 ], [ 93.5496134, 8.0644796 ], [ 93.5491295, 8.0600993 ], [ 93.5481369, 8.0562765 ], [ 93.5477507, 8.0552669 ], [ 93.54801, 8.05363 ], [ 93.5477995, 8.0521806 ], [ 93.5475897, 8.0518467 ], [ 93.5477255, 8.0512969 ], [ 93.5478036, 8.0504742 ], [ 93.5477419, 8.0502257 ], [ 93.5477872, 8.0499651 ], [ 93.5477236, 8.049576 ], [ 93.5476185, 8.0495741 ], [ 93.547565, 8.0498877 ], [ 93.5470262, 8.0501687 ], [ 93.5466478, 8.0499936 ], [ 93.5460719, 8.0500465 ], [ 93.5460308, 8.0504172 ], [ 93.5457264, 8.0506208 ], [ 93.5453398, 8.0506289 ], [ 93.5450518, 8.0504905 ], [ 93.5449105, 8.0500183 ], [ 93.5446815, 8.0500507 ], [ 93.5441963, 8.0504497 ], [ 93.5439289, 8.0503164 ], [ 93.5437562, 8.0500343 ], [ 93.5435217, 8.0493134 ], [ 93.5431894, 8.0489427 ], [ 93.5424728, 8.0489632 ], [ 93.5423845, 8.0484178 ], [ 93.542505, 8.0474545 ], [ 93.5427086, 8.0468726 ], [ 93.5428567, 8.0464969 ], [ 93.5431575, 8.0464648 ], [ 93.543412, 8.0465519 ], [ 93.5435878, 8.0468131 ], [ 93.5432084, 8.0469597 ], [ 93.5429724, 8.0470055 ], [ 93.5429168, 8.0472942 ], [ 93.5429816, 8.0473766 ], [ 93.5433935, 8.0472804 ], [ 93.543534, 8.0471752 ], [ 93.5445418, 8.0475581 ], [ 93.5448996, 8.0473667 ], [ 93.545056, 8.0474766 ], [ 93.5451982, 8.0474545 ], [ 93.5458784, 8.0467901 ], [ 93.5461422, 8.046923 ], [ 93.5464174, 8.0463607 ], [ 93.5465491, 8.0455258 ], [ 93.5465285, 8.0451063 ], [ 93.5466848, 8.0449311 ], [ 93.5469069, 8.044923 ], [ 93.5472607, 8.0442306 ], [ 93.5474334, 8.0441492 ], [ 93.547598, 8.0442673 ], [ 93.5477296, 8.0442103 ], [ 93.5477995, 8.0440636 ], [ 93.5480751, 8.0440148 ], [ 93.548289, 8.044194 ], [ 93.5483772, 8.0440547 ], [ 93.5484605, 8.0436928 ], [ 93.548799, 8.043135 ], [ 93.5489924, 8.0430291 ], [ 93.5491963, 8.0414201 ], [ 93.5488724, 8.0402013 ], [ 93.5486364, 8.0393308 ], [ 93.5489265, 8.0391274 ], [ 93.5491487, 8.0385938 ], [ 93.5492803, 8.0372091 ], [ 93.5495518, 8.0368669 ], [ 93.5496217, 8.0362438 ], [ 93.5493981, 8.0353024 ], [ 93.5491733, 8.0351726 ], [ 93.5492145, 8.0353803 ], [ 93.5489677, 8.0355229 ], [ 93.5490006, 8.035755 ], [ 93.5488731, 8.0358446 ], [ 93.5489183, 8.0360768 ], [ 93.5485152, 8.0362194 ], [ 93.5482026, 8.0360442 ], [ 93.5477296, 8.0362071 ], [ 93.5475116, 8.035975 ], [ 93.5469151, 8.0364597 ], [ 93.5467259, 8.0367325 ], [ 93.5459239, 8.0370095 ], [ 93.5456112, 8.0366837 ], [ 93.5444348, 8.0370176 ], [ 93.5445026, 8.0375188 ], [ 93.5435602, 8.0377723 ], [ 93.5434729, 8.0380315 ], [ 93.5431065, 8.0381179 ], [ 93.5425538, 8.0375649 ], [ 93.5416231, 8.0376859 ], [ 93.5414602, 8.0381006 ], [ 93.5417278, 8.0385441 ], [ 93.5412625, 8.0388436 ], [ 93.5408727, 8.0386593 ], [ 93.5401546, 8.0391034 ], [ 93.5397791, 8.0396212 ], [ 93.5398606, 8.0403757 ], [ 93.5402677, 8.040537 ], [ 93.5403143, 8.0411936 ], [ 93.5400234, 8.041378 ], [ 93.5395464, 8.0422074 ], [ 93.5389323, 8.0429175 ], [ 93.5342481, 8.0476766 ], [ 93.5290224, 8.0509953 ], [ 93.5285525, 8.0433091 ], [ 93.52785, 8.04011 ], [ 93.52766, 8.03678 ], [ 93.5263887, 8.0337176 ], [ 93.524251, 8.0322488 ], [ 93.51738, 8.0354 ], [ 93.51243, 8.03402 ], [ 93.50769, 8.02893 ], [ 93.50374, 8.02403 ], [ 93.5080229, 8.019782 ], [ 93.5097448, 8.0199318 ], [ 93.5107872, 8.0179431 ], [ 93.5111059, 8.0158306 ], [ 93.5098844, 8.0153582 ], [ 93.5094438, 8.0147259 ], [ 93.5091863, 8.0150126 ], [ 93.5091049, 8.016061 ], [ 93.5087319, 8.0167116 ], [ 93.5068479, 8.0169941 ], [ 93.5061382, 8.0174895 ], [ 93.5053722, 8.0173944 ], [ 93.5049864, 8.0171208 ], [ 93.5050562, 8.0164527 ], [ 93.5048352, 8.0146209 ], [ 93.505952, 8.0140219 ], [ 93.5056672, 8.0126028 ], [ 93.5086374, 8.0099928 ], [ 93.507976, 8.0059902 ], [ 93.5009892, 8.000006 ], [ 93.4931538, 8.0003349 ], [ 93.490376, 8.0066828 ], [ 93.4901511, 8.007461 ], [ 93.4899574, 8.0083524 ], [ 93.4895586, 8.0089448 ], [ 93.489194, 8.0097008 ], [ 93.4891256, 8.0102424 ], [ 93.4887667, 8.0106147 ], [ 93.4881286, 8.0116415 ], [ 93.4882369, 8.0119179 ], [ 93.4879292, 8.012499 ], [ 93.4875361, 8.0134412 ], [ 93.4872889, 8.0136526 ], [ 93.4874279, 8.0138248 ], [ 93.4874791, 8.0140335 ], [ 93.4871373, 8.0147951 ], [ 93.4867442, 8.0148628 ], [ 93.48671, 8.0150998 ], [ 93.4864479, 8.0152183 ], [ 93.4861973, 8.0151788 ], [ 93.4861403, 8.0153931 ], [ 93.4865676, 8.0156075 ], [ 93.4863568, 8.0169784 ], [ 93.4858212, 8.0172097 ], [ 93.4857187, 8.0174128 ], [ 93.486032, 8.0176723 ], [ 93.4865562, 8.0178134 ], [ 93.4865619, 8.0190714 ], [ 93.4865039, 8.020127 ], [ 93.4863967, 8.0207075 ], [ 93.486203, 8.0209613 ], [ 93.486277, 8.0213788 ], [ 93.4860596, 8.0227954 ], [ 93.4865334, 8.0239776 ], [ 93.486146, 8.0242822 ], [ 93.486203, 8.024474 ], [ 93.486579, 8.0245079 ], [ 93.486766, 8.0248489 ], [ 93.4866701, 8.0253767 ], [ 93.486203, 8.0253315 ], [ 93.4859895, 8.0261087 ], [ 93.4863397, 8.0264372 ], [ 93.4865334, 8.0284456 ], [ 93.4858725, 8.028581 ], [ 93.4858611, 8.0300365 ], [ 93.4851433, 8.0303298 ], [ 93.4858269, 8.0307585 ], [ 93.4863283, 8.0324735 ], [ 93.4858269, 8.0336695 ], [ 93.4865923, 8.0366682 ], [ 93.4865923, 8.0370735 ], [ 93.4864606, 8.0375805 ], [ 93.4868133, 8.0378338 ], [ 93.487174, 8.0373499 ], [ 93.4877673, 8.037661 ], [ 93.4878836, 8.0381909 ], [ 93.4877906, 8.0386402 ], [ 93.4874997, 8.0390894 ], [ 93.4869878, 8.0390664 ], [ 93.4868133, 8.038813 ], [ 93.4864442, 8.0389327 ], [ 93.4859341, 8.0396821 ], [ 93.486329, 8.0398287 ], [ 93.4865039, 8.0421216 ], [ 93.4864476, 8.0425554 ], [ 93.4863046, 8.0429519 ], [ 93.4860519, 8.0430747 ], [ 93.4857707, 8.0430652 ], [ 93.4855514, 8.0432351 ], [ 93.4856181, 8.043575 ], [ 93.4855848, 8.0438818 ], [ 93.485499, 8.0440187 ], [ 93.4855139, 8.0442245 ], [ 93.4858529, 8.0444849 ], [ 93.4860591, 8.0446194 ], [ 93.4862324, 8.0448571 ], [ 93.4863135, 8.0449751 ], [ 93.4863325, 8.0451026 ], [ 93.4862045, 8.0452145 ], [ 93.4864187, 8.0453233 ], [ 93.4865906, 8.0455302 ], [ 93.4866513, 8.0458039 ], [ 93.4867671, 8.0459045 ], [ 93.4870054, 8.045947 ], [ 93.4873463, 8.0460343 ], [ 93.4878063, 8.0463034 ], [ 93.4878874, 8.0460509 ], [ 93.487966, 8.0458385 ], [ 93.4880614, 8.0457181 ], [ 93.488202, 8.0456166 ], [ 93.4884022, 8.0455458 ], [ 93.4885047, 8.045534 ], [ 93.488612, 8.0455529 ], [ 93.4887884, 8.0456142 ], [ 93.4889075, 8.0457063 ], [ 93.4890172, 8.0458432 ], [ 93.4891244, 8.0459966 ], [ 93.4892389, 8.0459919 ], [ 93.4893657, 8.0458537 ], [ 93.4894709, 8.0457716 ], [ 93.4895821, 8.0457179 ], [ 93.4897188, 8.0457952 ], [ 93.4898204, 8.0458689 ], [ 93.4899452, 8.0461138 ], [ 93.4899777, 8.0452246 ], [ 93.4900516, 8.0451184 ], [ 93.4900016, 8.0448186 ], [ 93.4900898, 8.044736 ], [ 93.4902137, 8.0446794 ], [ 93.4903949, 8.0446393 ], [ 93.4905832, 8.0446393 ], [ 93.4907882, 8.0446747 ], [ 93.4909812, 8.0447549 ], [ 93.4914103, 8.0449626 ], [ 93.4915412, 8.0450161 ], [ 93.4918063, 8.0446912 ], [ 93.4919142, 8.0444509 ], [ 93.4918468, 8.0432426 ], [ 93.4926625, 8.0426285 ], [ 93.4928985, 8.0423147 ], [ 93.4931614, 8.0421545 ], [ 93.4937615, 8.042228 ], [ 93.4943682, 8.0424549 ], [ 93.4951368, 8.0417941 ], [ 93.4952514, 8.0412066 ], [ 93.4952177, 8.0406325 ], [ 93.4953323, 8.0403655 ], [ 93.4956222, 8.040272 ], [ 93.4958582, 8.0403054 ], [ 93.4960739, 8.0404055 ], [ 93.4963503, 8.0407193 ], [ 93.4967279, 8.0409196 ], [ 93.4969436, 8.0409529 ], [ 93.4972325, 8.0409357 ], [ 93.4977526, 8.040786 ], [ 93.4980965, 8.0405524 ], [ 93.4983864, 8.0401986 ], [ 93.4978779, 8.0398261 ], [ 93.4975543, 8.0391986 ], [ 93.4976487, 8.0385177 ], [ 93.4978967, 8.0383315 ], [ 93.4981124, 8.038238 ], [ 93.4982675, 8.0383715 ], [ 93.4984847, 8.0383174 ], [ 93.4985844, 8.0381045 ], [ 93.4987678, 8.0379703 ], [ 93.4994959, 8.0378634 ], [ 93.5001297, 8.0381438 ], [ 93.5006218, 8.038037 ], [ 93.5009926, 8.0378968 ], [ 93.5011207, 8.038037 ], [ 93.5010263, 8.0382907 ], [ 93.5011005, 8.0384576 ], [ 93.501323, 8.038551 ], [ 93.501478, 8.0386912 ], [ 93.501505, 8.0389315 ], [ 93.5014308, 8.0391986 ], [ 93.5013365, 8.039499 ], [ 93.5014241, 8.0398394 ], [ 93.5016264, 8.040033 ], [ 93.5018893, 8.0401532 ], [ 93.5020848, 8.0403267 ], [ 93.5022466, 8.0405671 ], [ 93.5023343, 8.0408942 ], [ 93.5022331, 8.0412012 ], [ 93.5021927, 8.0418354 ], [ 93.5019297, 8.0420757 ], [ 93.5018354, 8.0423895 ], [ 93.5018639, 8.0427663 ], [ 93.5023807, 8.0439942 ], [ 93.5028203, 8.0447502 ], [ 93.5032281, 8.0450983 ], [ 93.503499, 8.044628 ], [ 93.5033293, 8.0435971 ], [ 93.5035522, 8.0433781 ], [ 93.5040774, 8.0426425 ], [ 93.5038769, 8.0420927 ], [ 93.5039, 8.0416498 ], [ 93.5043242, 8.041329 ], [ 93.5045402, 8.0410006 ], [ 93.504409, 8.0404661 ], [ 93.5048241, 8.0397413 ], [ 93.5050717, 8.0386147 ], [ 93.5052844, 8.0376859 ], [ 93.5049463, 8.0372593 ], [ 93.5051208, 8.0370703 ], [ 93.5063151, 8.0375185 ], [ 93.5086771, 8.0374624 ], [ 93.5074672, 8.0394207 ], [ 93.5072517, 8.04324 ], [ 93.5083979, 8.0439134 ], [ 93.508584, 8.0453879 ], [ 93.5080023, 8.04601 ], [ 93.507707, 8.0462889 ], [ 93.5081651, 8.0473365 ], [ 93.5082677, 8.0491592 ], [ 93.5079796, 8.0492804 ], [ 93.5089331, 8.05018 ], [ 93.5086306, 8.0514932 ], [ 93.5083287, 8.0517427 ], [ 93.5076766, 8.0545113 ], [ 93.5052102, 8.0544422 ], [ 93.5043803, 8.054853 ], [ 93.503197, 8.0547958 ], [ 93.5033442, 8.0553713 ], [ 93.5037259, 8.0554793 ], [ 93.503944, 8.0560409 ], [ 93.5046094, 8.0563109 ], [ 93.5051547, 8.0557385 ], [ 93.5057546, 8.0554793 ], [ 93.5061036, 8.0555981 ], [ 93.5060164, 8.0563865 ], [ 93.506409, 8.0571856 ], [ 93.5071834, 8.0570128 ], [ 93.507587, 8.0561597 ], [ 93.5090727, 8.0556172 ], [ 93.5096776, 8.0569073 ], [ 93.5093597, 8.0597764 ], [ 93.5088413, 8.060015 ], [ 93.5089613, 8.060771 ], [ 93.5094194, 8.0609438 ], [ 93.5105401, 8.0674079 ], [ 93.5117485, 8.0677122 ], [ 93.512296, 8.0656292 ], [ 93.5132377, 8.0638649 ], [ 93.5127814, 8.0613229 ], [ 93.5130748, 8.0591421 ], [ 93.5145672, 8.0586282 ], [ 93.5146457, 8.0582135 ], [ 93.5143778, 8.0578749 ], [ 93.5133307, 8.0575063 ], [ 93.5134768, 8.0564081 ], [ 93.5131991, 8.055927 ], [ 93.5136002, 8.055927 ], [ 93.5139865, 8.0550581 ], [ 93.5130094, 8.05144 ], [ 93.5118803, 8.0497033 ], [ 93.5106078, 8.0469695 ], [ 93.5103378, 8.0463128 ], [ 93.5102376, 8.0457247 ], [ 93.5109548, 8.045656 ], [ 93.5117569, 8.0462975 ], [ 93.5120423, 8.046664 ], [ 93.512559, 8.0467709 ], [ 93.5129138, 8.0462135 ], [ 93.5134999, 8.046244 ], [ 93.5138778, 8.0468091 ], [ 93.5143174, 8.0473819 ], [ 93.5156363, 8.047443 ], [ 93.5164075, 8.0463738 ], [ 93.5163535, 8.045404 ], [ 93.516565, 8.0450654 ], [ 93.5177186, 8.0449611 ], [ 93.5187289, 8.0455949 ], [ 93.5200552, 8.0469085 ], [ 93.5210738, 8.0497736 ], [ 93.526526, 8.0541338 ], [ 93.5248104, 8.0564391 ], [ 93.5250835, 8.0612645 ], [ 93.5290368, 8.0631968 ], [ 93.5319926, 8.0610828 ], [ 93.5339035, 8.0613938 ], [ 93.5314275, 8.0638401 ], [ 93.5319403, 8.065126 ], [ 93.5328993, 8.0655928 ], [ 93.5366455, 8.0647634 ], [ 93.5361103, 8.0659383 ], [ 93.5342962, 8.0675882 ], [ 93.5357359, 8.0694542 ], [ 93.5337137, 8.0713983 ], [ 93.5321137, 8.0712696 ], [ 93.530675, 8.0695111 ], [ 93.5268805, 8.0689003 ], [ 93.5266714, 8.069081 ], [ 93.5256156, 8.0672814 ], [ 93.5249987, 8.0681519 ], [ 93.5254768, 8.0687781 ], [ 93.5245205, 8.0693279 ], [ 93.5239652, 8.0694348 ], [ 93.5242891, 8.0709162 ], [ 93.5246909, 8.0711427 ], [ 93.5244908, 8.0723841 ], [ 93.5243926, 8.0731292 ], [ 93.5251234, 8.0732048 ], [ 93.5258542, 8.0722653 ], [ 93.5260737, 8.0726052 ], [ 93.5255965, 8.0739735 ], [ 93.5263452, 8.074226 ], [ 93.5259832, 8.0747554 ], [ 93.5251499, 8.075108 ], [ 93.5257342, 8.0755482 ], [ 93.5264768, 8.0755211 ], [ 93.5275462, 8.0747229 ], [ 93.5287773, 8.0745547 ], [ 93.52881, 8.075019 ], [ 93.5293226, 8.0760989 ], [ 93.52881, 8.0761961 ], [ 93.5284282, 8.0762501 ], [ 93.5279701, 8.0763257 ], [ 93.5283083, 8.07679 ], [ 93.5298134, 8.077168 ], [ 93.5314277, 8.0758721 ], [ 93.531504, 8.0767468 ], [ 93.530768, 8.0781095 ], [ 93.5315097, 8.0783038 ], [ 93.5330585, 8.0784118 ], [ 93.5353053, 8.0790166 ], [ 93.5378794, 8.0793189 ], [ 93.5373558, 8.0796861 ], [ 93.5336038, 8.0799668 ], [ 93.5312043, 8.0799668 ], [ 93.5293719, 8.0807875 ], [ 93.5250555, 8.0787631 ], [ 93.5238301, 8.0831307 ], [ 93.5196638, 8.0821601 ], [ 93.5157426, 8.0837373 ], [ 93.514027, 8.0808256 ], [ 93.5124091, 8.0761555 ], [ 93.5104734, 8.0720903 ], [ 93.5052042, 8.0694211 ], [ 93.5027627, 8.0701962 ], [ 93.5021648, 8.0692681 ], [ 93.5010292, 8.0687564 ], [ 93.5015295, 8.0677312 ], [ 93.5007928, 8.066024 ], [ 93.4969147, 8.0643584 ], [ 93.4941282, 8.0651099 ], [ 93.4914756, 8.0639465 ], [ 93.4909172, 8.0629789 ], [ 93.4908358, 8.0619191 ], [ 93.4914291, 8.0611704 ], [ 93.4924457, 8.0603113 ], [ 93.4934418, 8.0592236 ], [ 93.4933325, 8.0575737 ], [ 93.493849, 8.0567009 ], [ 93.4937792, 8.0557218 ], [ 93.4935465, 8.0549155 ], [ 93.493735, 8.0536278 ], [ 93.4928197, 8.0517218 ], [ 93.4911014, 8.0502577 ], [ 93.4904371, 8.0497367 ], [ 93.4897305, 8.049605 ], [ 93.4893478, 8.0509593 ], [ 93.4879688, 8.0522303 ], [ 93.4872641, 8.0524158 ], [ 93.4866804, 8.0524382 ], [ 93.4862403, 8.0521623 ], [ 93.4860774, 8.0515288 ], [ 93.4856325, 8.0514484 ], [ 93.4847932, 8.0541103 ], [ 93.4850503, 8.0584939 ], [ 93.485468, 8.0623305 ], [ 93.4846453, 8.0650673 ], [ 93.4840894, 8.0668965 ], [ 93.4844808, 8.0706386 ], [ 93.4836581, 8.0779691 ], [ 93.4824251, 8.0815644 ], [ 93.4807947, 8.0847131 ], [ 93.4811724, 8.0851633 ], [ 93.4805597, 8.0863653 ] ] ], [ [ [ 79.060559, 9.2014548 ], [ 79.060762, 9.2019381 ], [ 79.061168, 9.202386 ], [ 79.0616099, 9.2027161 ], [ 79.0628518, 9.203671 ], [ 79.0633534, 9.2043311 ], [ 79.0639625, 9.2051209 ], [ 79.0642849, 9.2058164 ], [ 79.0647745, 9.2062644 ], [ 79.0652641, 9.2065944 ], [ 79.0656343, 9.2066062 ], [ 79.0662314, 9.2067005 ], [ 79.0665897, 9.2070306 ], [ 79.0671748, 9.2075375 ], [ 79.0678914, 9.20762 ], [ 79.0684049, 9.2077261 ], [ 79.0689303, 9.2080915 ], [ 79.0695632, 9.2081505 ], [ 79.0696588, 9.2080208 ], [ 79.069814, 9.2075964 ], [ 79.0694199, 9.2071249 ], [ 79.0689064, 9.2066652 ], [ 79.0687273, 9.2062526 ], [ 79.0689781, 9.205392 ], [ 79.0695991, 9.2043665 ], [ 79.07022, 9.2038478 ], [ 79.0709485, 9.2030933 ], [ 79.07188, 9.2025275 ], [ 79.0734324, 9.2014901 ], [ 79.0738743, 9.2011483 ], [ 79.0746983, 9.200606 ], [ 79.0754864, 9.200052 ], [ 79.0760358, 9.199663 ], [ 79.07723, 9.1995333 ], [ 79.0785675, 9.1996158 ], [ 79.0798094, 9.1997808 ], [ 79.0805379, 9.1999577 ], [ 79.0814694, 9.199993 ], [ 79.0820665, 9.1997573 ], [ 79.0821978, 9.1996276 ], [ 79.0824367, 9.1992268 ], [ 79.0822098, 9.1991207 ], [ 79.0822217, 9.1988378 ], [ 79.0826994, 9.1981776 ], [ 79.083404, 9.1975293 ], [ 79.0838936, 9.1973406 ], [ 79.0845265, 9.1972228 ], [ 79.0853147, 9.1968691 ], [ 79.0857207, 9.1963386 ], [ 79.0859954, 9.1961618 ], [ 79.0867477, 9.1955488 ], [ 79.0866283, 9.1952659 ], [ 79.0863894, 9.1950065 ], [ 79.0860551, 9.1947708 ], [ 79.0856252, 9.1943935 ], [ 79.0856968, 9.194087 ], [ 79.0857923, 9.1938866 ], [ 79.0858759, 9.1930732 ], [ 79.0863775, 9.1927549 ], [ 79.0866283, 9.1928256 ], [ 79.0871418, 9.1929789 ], [ 79.0875717, 9.1932029 ], [ 79.0875, 9.1935447 ], [ 79.0870224, 9.1940163 ], [ 79.0867835, 9.1942874 ], [ 79.0872493, 9.1941813 ], [ 79.0878583, 9.1939691 ], [ 79.0882524, 9.1938866 ], [ 79.0884912, 9.1940163 ], [ 79.0885509, 9.1946411 ], [ 79.088742, 9.1952659 ], [ 79.0887062, 9.1958435 ], [ 79.0885629, 9.1962325 ], [ 79.0886942, 9.1963268 ], [ 79.0888375, 9.1965744 ], [ 79.0888017, 9.1972228 ], [ 79.0886942, 9.1976118 ], [ 79.0890286, 9.1980126 ], [ 79.089363, 9.1982955 ], [ 79.0894824, 9.198602 ], [ 79.089781, 9.1988142 ], [ 79.0899004, 9.1990617 ], [ 79.0896735, 9.1993211 ], [ 79.0897332, 9.1995333 ], [ 79.0902945, 9.1996394 ], [ 79.0904975, 9.1995215 ], [ 79.0907721, 9.1993565 ], [ 79.0911304, 9.1993329 ], [ 79.0912498, 9.1990617 ], [ 79.0911901, 9.1986609 ], [ 79.0909513, 9.1980126 ], [ 79.090999, 9.1974585 ], [ 79.0908677, 9.1968455 ], [ 79.0904975, 9.1961029 ], [ 79.0903303, 9.1958081 ], [ 79.0900079, 9.195313 ], [ 79.089781, 9.1949594 ], [ 79.0896018, 9.1946529 ], [ 79.0892555, 9.1942049 ], [ 79.0885629, 9.1937334 ], [ 79.0882524, 9.1932382 ], [ 79.0880016, 9.192861 ], [ 79.0873567, 9.192696 ], [ 79.086688, 9.1924838 ], [ 79.0859595, 9.1923541 ], [ 79.085255, 9.1924248 ], [ 79.0847534, 9.1927313 ], [ 79.0837622, 9.1933679 ], [ 79.0831054, 9.193863 ], [ 79.0822814, 9.1943935 ], [ 79.0806931, 9.1956313 ], [ 79.0798094, 9.1960439 ], [ 79.0791168, 9.1962561 ], [ 79.0783525, 9.1965508 ], [ 79.077433, 9.1970931 ], [ 79.076609, 9.1975293 ], [ 79.0760835, 9.1976825 ], [ 79.0752118, 9.1980951 ], [ 79.0742325, 9.1984605 ], [ 79.0731458, 9.1987199 ], [ 79.0714978, 9.1991914 ], [ 79.0700409, 9.1995097 ], [ 79.0690139, 9.1997808 ], [ 79.0679511, 9.2001463 ], [ 79.0661478, 9.2004881 ], [ 79.0651686, 9.2002642 ], [ 79.0641655, 9.1997101 ], [ 79.0634131, 9.1989792 ], [ 79.0626608, 9.1985431 ], [ 79.062207, 9.1980833 ], [ 79.0613352, 9.1974939 ], [ 79.0604993, 9.1970224 ], [ 79.0596992, 9.1967041 ], [ 79.0589588, 9.1967159 ], [ 79.0586005, 9.196928 ], [ 79.0588274, 9.1974114 ], [ 79.059126, 9.1981776 ], [ 79.0592812, 9.1987081 ], [ 79.0596514, 9.1991914 ], [ 79.0596872, 9.1990028 ], [ 79.0595917, 9.1985902 ], [ 79.0598902, 9.198213 ], [ 79.059735, 9.1979418 ], [ 79.0592096, 9.1977532 ], [ 79.059329, 9.1976 ], [ 79.0596872, 9.1973171 ], [ 79.0598664, 9.1972345 ], [ 79.0600813, 9.197541 ], [ 79.0600813, 9.1978122 ], [ 79.0603679, 9.1982248 ], [ 79.0604993, 9.1978711 ], [ 79.0606665, 9.1978711 ], [ 79.06118, 9.1982483 ], [ 79.0610486, 9.1986492 ], [ 79.0607978, 9.1991796 ], [ 79.0611322, 9.199769 ], [ 79.0612994, 9.200382 ], [ 79.0615024, 9.2006178 ], [ 79.061992, 9.2006885 ], [ 79.0633534, 9.2007003 ], [ 79.0635923, 9.2010776 ], [ 79.0640699, 9.2012308 ], [ 79.0640341, 9.2013487 ], [ 79.0634728, 9.201443 ], [ 79.063031, 9.2011719 ], [ 79.0624219, 9.2011483 ], [ 79.0619443, 9.2009832 ], [ 79.0616099, 9.2008418 ], [ 79.0613472, 9.2009597 ], [ 79.0610367, 9.2009832 ], [ 79.0604754, 9.2004292 ], [ 79.0601888, 9.1996747 ], [ 79.060153, 9.1991207 ], [ 79.0600216, 9.1989321 ], [ 79.059938, 9.1993329 ], [ 79.0599858, 9.1999577 ], [ 79.0601052, 9.2005353 ], [ 79.060559, 9.2014548 ] ] ], [ [ [ 76.3294929, 9.9126703 ], [ 76.329803, 9.9125283 ], [ 76.3301234, 9.9126465 ], [ 76.3303761, 9.9128085 ], [ 76.3307646, 9.9129954 ], [ 76.3312072, 9.9132073 ], [ 76.3312739, 9.9133829 ], [ 76.3320517, 9.9139381 ], [ 76.3322937, 9.9134647 ], [ 76.3323916, 9.9131796 ], [ 76.332655, 9.9130306 ], [ 76.3332834, 9.911758 ], [ 76.333664, 9.9104154 ], [ 76.3339892, 9.9099308 ], [ 76.3344768, 9.909257 ], [ 76.3345087, 9.90799 ], [ 76.3345163, 9.9074956 ], [ 76.3345819, 9.9071241 ], [ 76.3347619, 9.9069009 ], [ 76.3346101, 9.9067126 ], [ 76.3346972, 9.906329 ], [ 76.3348377, 9.905599 ], [ 76.3351509, 9.9042919 ], [ 76.3351789, 9.904138 ], [ 76.3355735, 9.9036558 ], [ 76.3359758, 9.9032896 ], [ 76.3386593, 9.9033432 ], [ 76.3400205, 9.9033924 ], [ 76.3410174, 9.9034909 ], [ 76.3415759, 9.900954 ], [ 76.3419436, 9.9009322 ], [ 76.342206, 9.9004005 ], [ 76.3423744, 9.8987005 ], [ 76.3407897, 9.8982526 ], [ 76.3408222, 9.8969295 ], [ 76.3407346, 9.8957319 ], [ 76.3403959, 9.8952577 ], [ 76.340165, 9.8947886 ], [ 76.3400835, 9.8942255 ], [ 76.3403857, 9.8930667 ], [ 76.3400641, 9.8930455 ], [ 76.3399654, 9.8928193 ], [ 76.3399654, 9.8926022 ], [ 76.3401448, 9.8922791 ], [ 76.3400992, 9.8916301 ], [ 76.3401613, 9.8910416 ], [ 76.3401192, 9.8903657 ], [ 76.3403836, 9.8895772 ], [ 76.3407034, 9.8892499 ], [ 76.3410826, 9.8893509 ], [ 76.3417591, 9.8892802 ], [ 76.3420666, 9.8891031 ], [ 76.3424612, 9.8885532 ], [ 76.3426486, 9.8878758 ], [ 76.3430659, 9.8867105 ], [ 76.3432407, 9.8859223 ], [ 76.342877, 9.8848904 ], [ 76.3415177, 9.8848198 ], [ 76.3406675, 9.8844638 ], [ 76.3398057, 9.8842141 ], [ 76.338879, 9.8851807 ], [ 76.3379155, 9.8862409 ], [ 76.3375473, 9.886468 ], [ 76.3371058, 9.8869528 ], [ 76.3370959, 9.8871353 ], [ 76.3367932, 9.8880837 ], [ 76.3367266, 9.8884623 ], [ 76.3363067, 9.8883873 ], [ 76.335348, 9.8888612 ], [ 76.3347742, 9.8894224 ], [ 76.3348292, 9.8898611 ], [ 76.3350965, 9.8902526 ], [ 76.3353267, 9.8904211 ], [ 76.3354762, 9.8902647 ], [ 76.3355786, 9.8902092 ], [ 76.335922, 9.890295 ], [ 76.3364752, 9.8910404 ], [ 76.3363848, 9.8928878 ], [ 76.3362781, 9.8938624 ], [ 76.3364067, 9.8950049 ], [ 76.3364752, 9.8955804 ], [ 76.3361427, 9.896264 ], [ 76.3354954, 9.8967819 ], [ 76.3352261, 9.8972508 ], [ 76.3348575, 9.8982587 ], [ 76.3341732, 9.8983176 ], [ 76.3340992, 9.8978681 ], [ 76.3327645, 9.8974941 ], [ 76.330777, 9.8994669 ], [ 76.3288947, 9.9035083 ], [ 76.326643, 9.9099419 ], [ 76.32551, 9.9119542 ], [ 76.3254237, 9.9127994 ], [ 76.3248234, 9.9137129 ], [ 76.3249374, 9.9143249 ], [ 76.3254111, 9.9145779 ], [ 76.3259082, 9.9147142 ], [ 76.3263238, 9.9147731 ], [ 76.326987, 9.9148025 ], [ 76.3271894, 9.9145072 ], [ 76.3272842, 9.9144592 ], [ 76.3273893, 9.9144668 ], [ 76.3275276, 9.9147066 ], [ 76.3277275, 9.9143709 ], [ 76.3278889, 9.9141134 ], [ 76.3279592, 9.9139018 ], [ 76.3278915, 9.9136061 ], [ 76.3279786, 9.913283 ], [ 76.3283322, 9.9134016 ], [ 76.328486, 9.9131088 ], [ 76.3285705, 9.9129094 ], [ 76.3288033, 9.9128199 ], [ 76.3292106, 9.9128778 ], [ 76.3294929, 9.9126703 ] ] ], [ [ [ 76.3152096, 9.8970563 ], [ 76.3171523, 9.8917841 ], [ 76.3171346, 9.891104 ], [ 76.31752, 9.8898315 ], [ 76.3175169, 9.8890583 ], [ 76.3176737, 9.8872357 ], [ 76.3169184, 9.8866269 ], [ 76.3164185, 9.8869852 ], [ 76.3149724, 9.8870093 ], [ 76.3149846, 9.8871784 ], [ 76.3134528, 9.887456 ], [ 76.3133302, 9.8876613 ], [ 76.3124366, 9.8877959 ], [ 76.3115181, 9.8872551 ], [ 76.3113458, 9.887345 ], [ 76.3102147, 9.8879469 ], [ 76.3095799, 9.8900937 ], [ 76.3084289, 9.8911554 ], [ 76.3080437, 9.8924455 ], [ 76.3079184, 9.8934769 ], [ 76.3068328, 9.8974854 ], [ 76.3066467, 9.8991793 ], [ 76.3059955, 9.9001204 ], [ 76.3059219, 9.900598 ], [ 76.3052092, 9.9014479 ], [ 76.3046902, 9.9020762 ], [ 76.3046711, 9.902597 ], [ 76.3045122, 9.9031487 ], [ 76.3046711, 9.9039018 ], [ 76.3048283, 9.9048106 ], [ 76.3047754, 9.9054338 ], [ 76.3049247, 9.9054265 ], [ 76.3050458, 9.9060006 ], [ 76.305023, 9.9064032 ], [ 76.304693, 9.9064634 ], [ 76.3044754, 9.910241 ], [ 76.3047424, 9.9120438 ], [ 76.3052735, 9.9148766 ], [ 76.3045163, 9.919099 ], [ 76.3047832, 9.9197778 ], [ 76.3050444, 9.9199946 ], [ 76.3056863, 9.9205446 ], [ 76.3061456, 9.9206785 ], [ 76.3068378, 9.9211467 ], [ 76.3080604, 9.9212719 ], [ 76.3091335, 9.9212339 ], [ 76.309865, 9.9187999 ], [ 76.310369, 9.9172575 ], [ 76.311386, 9.9158837 ], [ 76.311923, 9.9154424 ], [ 76.3125239, 9.9150196 ], [ 76.3122809, 9.9122723 ], [ 76.311498, 9.9115022 ], [ 76.3109728, 9.9100371 ], [ 76.3111077, 9.908374 ], [ 76.3120346, 9.9071058 ], [ 76.3131504, 9.905922 ], [ 76.3146934, 9.904845 ], [ 76.3149537, 9.9044226 ], [ 76.315904, 9.9036062 ], [ 76.3158919, 9.903188 ], [ 76.3165117, 9.9027962 ], [ 76.3167122, 9.9027481 ], [ 76.3169012, 9.9026414 ], [ 76.3169696, 9.9020393 ], [ 76.3168841, 9.9014239 ], [ 76.3168326, 9.9007221 ], [ 76.3166701, 9.9004458 ], [ 76.3165183, 9.9002597 ], [ 76.3162575, 9.8999019 ], [ 76.3161775, 9.8996295 ], [ 76.3157089, 9.8985829 ], [ 76.3152096, 9.8970563 ] ] ], [ [ [ 76.2779908, 9.9318448 ], [ 76.2778606, 9.9316674 ], [ 76.2777353, 9.9315041 ], [ 76.2760885, 9.9323567 ], [ 76.2745286, 9.933097 ], [ 76.2731106, 9.9340375 ], [ 76.272571, 9.9342255 ], [ 76.2722077, 9.9343029 ], [ 76.2720376, 9.934517 ], [ 76.2717982, 9.9349387 ], [ 76.2712955, 9.9350664 ], [ 76.2709485, 9.9354051 ], [ 76.2709117, 9.9357102 ], [ 76.2702266, 9.9363264 ], [ 76.2684181, 9.9382038 ], [ 76.2675753, 9.9398574 ], [ 76.2669492, 9.9416139 ], [ 76.2669838, 9.9439403 ], [ 76.2674301, 9.9440492 ], [ 76.2674254, 9.9451045 ], [ 76.2669734, 9.9451489 ], [ 76.2669749, 9.9553068 ], [ 76.2668428, 9.9557881 ], [ 76.2653193, 9.9615988 ], [ 76.2625497, 9.9651452 ], [ 76.2618823, 9.9656137 ], [ 76.259523, 9.9672454 ], [ 76.2573865, 9.968711 ], [ 76.2580473, 9.9696249 ], [ 76.2580567, 9.969873 ], [ 76.2581415, 9.9701059 ], [ 76.2583285, 9.9702351 ], [ 76.258561, 9.9702949 ], [ 76.2589409, 9.9708047 ], [ 76.2629119, 9.9697096 ], [ 76.2701498, 9.9669924 ], [ 76.2721714, 9.9661914 ], [ 76.2759195, 9.9631949 ], [ 76.2764455, 9.9625367 ], [ 76.2768725, 9.961649 ], [ 76.2769058, 9.9615275 ], [ 76.2768651, 9.9612712 ], [ 76.2770842, 9.9612226 ], [ 76.279293, 9.9570282 ], [ 76.2793957, 9.9570898 ], [ 76.2796301, 9.9567276 ], [ 76.279573, 9.9566824 ], [ 76.2796994, 9.9564652 ], [ 76.2798593, 9.9565439 ], [ 76.2800831, 9.9561135 ], [ 76.2798486, 9.955998 ], [ 76.2822157, 9.951493 ], [ 76.282782, 9.9504359 ], [ 76.2830352, 9.9499656 ], [ 76.2832382, 9.9493639 ], [ 76.2851775, 9.9452117 ], [ 76.2853518, 9.9448697 ], [ 76.2879432, 9.9403827 ], [ 76.2899866, 9.9355938 ], [ 76.2924045, 9.9309298 ], [ 76.2900356, 9.9297908 ], [ 76.2878888, 9.9317847 ], [ 76.2846582, 9.9380754 ], [ 76.2836987, 9.9379275 ], [ 76.2830393, 9.9378367 ], [ 76.2814242, 9.9375395 ], [ 76.2812366, 9.9374545 ], [ 76.28148, 9.9371136 ], [ 76.2815183, 9.9369736 ], [ 76.2818158, 9.9358872 ], [ 76.2805641, 9.9344085 ], [ 76.2803616, 9.9337454 ], [ 76.2796118, 9.9331551 ], [ 76.2788456, 9.9323482 ], [ 76.2781738, 9.9319849 ], [ 76.2779908, 9.9318448 ] ] ], [ [ [ 76.3664107, 9.8107153 ], [ 76.3659945, 9.8102882 ], [ 76.3655006, 9.8097094 ], [ 76.3650958, 9.8093061 ], [ 76.364765, 9.8090852 ], [ 76.3639335, 9.8082441 ], [ 76.3626572, 9.8066656 ], [ 76.3635836, 9.8058224 ], [ 76.3624971, 9.8059343 ], [ 76.3621053, 9.8056716 ], [ 76.3617185, 9.8050816 ], [ 76.3614868, 9.8044705 ], [ 76.3606319, 9.8030643 ], [ 76.3599609, 9.7997651 ], [ 76.3595978, 9.7964071 ], [ 76.3607351, 9.7922146 ], [ 76.3620627, 9.7881924 ], [ 76.3626623, 9.787059 ], [ 76.3634148, 9.7854823 ], [ 76.3637074, 9.7847941 ], [ 76.3657711, 9.7811779 ], [ 76.3680892, 9.7762722 ], [ 76.3691135, 9.7705753 ], [ 76.3684415, 9.7669935 ], [ 76.367922, 9.7669956 ], [ 76.3679063, 9.7631303 ], [ 76.3672554, 9.7628751 ], [ 76.3687804, 9.7546225 ], [ 76.3692882, 9.7517858 ], [ 76.3705763, 9.7468164 ], [ 76.3698977, 9.7457166 ], [ 76.3691232, 9.7430247 ], [ 76.3696428, 9.7430226 ], [ 76.3696405, 9.7425072 ], [ 76.3701612, 9.7427627 ], [ 76.3701592, 9.7422473 ], [ 76.3711992, 9.7425009 ], [ 76.3716967, 9.7370872 ], [ 76.3709184, 9.7373481 ], [ 76.3709112, 9.735544 ], [ 76.3703916, 9.7355461 ], [ 76.3705147, 9.7339993 ], [ 76.3702476, 9.7321966 ], [ 76.3688125, 9.730527 ], [ 76.3675116, 9.7300167 ], [ 76.3669926, 9.730148 ], [ 76.3669894, 9.729375 ], [ 76.3664701, 9.7293771 ], [ 76.365915, 9.7206174 ], [ 76.3664345, 9.7206153 ], [ 76.3668101, 9.7172636 ], [ 76.366399, 9.7118536 ], [ 76.3658794, 9.7118557 ], [ 76.3656124, 9.7100528 ], [ 76.3648331, 9.7100558 ], [ 76.364828, 9.7087674 ], [ 76.3646234, 9.708354 ], [ 76.3644169, 9.708482 ], [ 76.3639532, 9.707619 ], [ 76.3641137, 9.7072282 ], [ 76.3644978, 9.7068505 ], [ 76.3643402, 9.7051162 ], [ 76.3635064, 9.7031031 ], [ 76.363434, 9.7028553 ], [ 76.3625279, 9.7029577 ], [ 76.3624052, 9.7034601 ], [ 76.3626639, 9.7038482 ], [ 76.3624731, 9.7049636 ], [ 76.3618311, 9.7064599 ], [ 76.361265, 9.7067514 ], [ 76.360105, 9.7069962 ], [ 76.3583181, 9.7073584 ], [ 76.3565341, 9.707619 ], [ 76.3558451, 9.7079818 ], [ 76.3555866, 9.7085438 ], [ 76.3546182, 9.7112149 ], [ 76.3540328, 9.7127174 ], [ 76.3532301, 9.7132902 ], [ 76.3520061, 9.7138027 ], [ 76.3511595, 9.7139689 ], [ 76.3504082, 9.7137315 ], [ 76.3497003, 9.7136013 ], [ 76.3490042, 9.7139841 ], [ 76.3487892, 9.7142762 ], [ 76.3484867, 9.7145016 ], [ 76.3488697, 9.715087 ], [ 76.3489446, 9.7167454 ], [ 76.349167, 9.7174215 ], [ 76.3496191, 9.7181431 ], [ 76.3494336, 9.7184078 ], [ 76.3496415, 9.7187406 ], [ 76.3497663, 9.7197789 ], [ 76.3497191, 9.7206906 ], [ 76.3499174, 9.7215559 ], [ 76.3497852, 9.7224211 ], [ 76.3503788, 9.7240797 ], [ 76.3500213, 9.7247934 ], [ 76.3500875, 9.7250611 ], [ 76.3502212, 9.7260913 ], [ 76.3484141, 9.7289333 ], [ 76.348076, 9.7305893 ], [ 76.3473284, 9.7312471 ], [ 76.3471462, 9.7321895 ], [ 76.3468711, 9.732805 ], [ 76.3458496, 9.7371899 ], [ 76.3460663, 9.7380872 ], [ 76.3455664, 9.7390095 ], [ 76.3454748, 9.7406547 ], [ 76.3461608, 9.7409278 ], [ 76.3465181, 9.741826 ], [ 76.3466443, 9.7422327 ], [ 76.3472484, 9.7427196 ], [ 76.3473077, 9.7443999 ], [ 76.3473467, 9.7448188 ], [ 76.3469248, 9.7462052 ], [ 76.3466825, 9.7505872 ], [ 76.3459074, 9.7516212 ], [ 76.3461724, 9.7529087 ], [ 76.3455243, 9.753169 ], [ 76.3454002, 9.7547156 ], [ 76.3444962, 9.7558784 ], [ 76.3429384, 9.7561422 ], [ 76.3419029, 9.7570486 ], [ 76.3412788, 9.7634939 ], [ 76.3403752, 9.7647858 ], [ 76.3397262, 9.7650461 ], [ 76.3392929, 9.765333 ], [ 76.3388538, 9.7659369 ], [ 76.3385699, 9.7664117 ], [ 76.3377855, 9.7668576 ], [ 76.3373702, 9.7676104 ], [ 76.3373204, 9.7680031 ], [ 76.3363023, 9.7706624 ], [ 76.3358632, 9.7735656 ], [ 76.3358351, 9.7753982 ], [ 76.3358752, 9.7765427 ], [ 76.3361822, 9.7774635 ], [ 76.3365133, 9.7773721 ], [ 76.336863, 9.7779897 ], [ 76.3370555, 9.7786683 ], [ 76.3367028, 9.7801866 ], [ 76.3372234, 9.7813311 ], [ 76.337437, 9.7835411 ], [ 76.337784, 9.7845145 ], [ 76.3378104, 9.7862719 ], [ 76.3388655, 9.7863929 ], [ 76.3396833, 9.7866934 ], [ 76.3408529, 9.7873525 ], [ 76.338278, 9.7869349 ], [ 76.3368614, 9.7874505 ], [ 76.3365708, 9.7879943 ], [ 76.3364015, 9.7887225 ], [ 76.3360144, 9.7895234 ], [ 76.3355414, 9.7900526 ], [ 76.3350233, 9.7908351 ], [ 76.3349803, 9.791115 ], [ 76.3347676, 9.7918669 ], [ 76.334401, 9.7936956 ], [ 76.3340704, 9.7943051 ], [ 76.3337222, 9.7947675 ], [ 76.3333628, 9.7954797 ], [ 76.332606, 9.7974338 ], [ 76.3314157, 9.7983226 ], [ 76.3312031, 9.8004049 ], [ 76.3302411, 9.8026709 ], [ 76.3302194, 9.8045107 ], [ 76.3301309, 9.8069938 ], [ 76.3327519, 9.8076942 ], [ 76.3341867, 9.8083154 ], [ 76.3349258, 9.8082726 ], [ 76.3358823, 9.808701 ], [ 76.3361867, 9.8091401 ], [ 76.3362084, 9.8096007 ], [ 76.33619, 9.8105407 ], [ 76.3349801, 9.8120855 ], [ 76.3346975, 9.8132315 ], [ 76.3341932, 9.8145715 ], [ 76.3339526, 9.8155789 ], [ 76.3328177, 9.8205928 ], [ 76.3322576, 9.8201353 ], [ 76.3318038, 9.8201748 ], [ 76.3312298, 9.8203195 ], [ 76.3308694, 9.8209903 ], [ 76.3308694, 9.8213717 ], [ 76.331138, 9.8221402 ], [ 76.3311897, 9.8230816 ], [ 76.3310296, 9.8234894 ], [ 76.3307627, 9.8248567 ], [ 76.330775, 9.8253546 ], [ 76.3312164, 9.825344 ], [ 76.3314567, 9.8259095 ], [ 76.3311363, 9.8261068 ], [ 76.3307146, 9.8259463 ], [ 76.3305845, 9.8266128 ], [ 76.3303087, 9.826633 ], [ 76.3295879, 9.826804 ], [ 76.3290406, 9.826633 ], [ 76.3287579, 9.8257613 ], [ 76.3283865, 9.8257517 ], [ 76.3279846, 9.8253736 ], [ 76.3278926, 9.8248836 ], [ 76.3271629, 9.8252904 ], [ 76.3262642, 9.8258085 ], [ 76.325719, 9.8260477 ], [ 76.3250092, 9.8262515 ], [ 76.3243657, 9.8268729 ], [ 76.3231461, 9.8276499 ], [ 76.3225346, 9.8280905 ], [ 76.3221659, 9.8284481 ], [ 76.3218456, 9.8291452 ], [ 76.3217988, 9.8303157 ], [ 76.3228545, 9.8344349 ], [ 76.3228868, 9.835327 ], [ 76.3228067, 9.8362082 ], [ 76.3224868, 9.8371996 ], [ 76.3216999, 9.8380472 ], [ 76.3191395, 9.8415542 ], [ 76.3186152, 9.8424161 ], [ 76.3184817, 9.843271 ], [ 76.3181855, 9.8436154 ], [ 76.3185484, 9.843955 ], [ 76.3191091, 9.8451124 ], [ 76.3199097, 9.8467515 ], [ 76.320269, 9.8470782 ], [ 76.320484, 9.8483083 ], [ 76.3206709, 9.8498208 ], [ 76.3206441, 9.8516038 ], [ 76.3198966, 9.8537138 ], [ 76.3199239, 9.854766 ], [ 76.3204148, 9.8561213 ], [ 76.3207343, 9.8566059 ], [ 76.3212315, 9.8576067 ], [ 76.3213517, 9.8586194 ], [ 76.3217521, 9.8591192 ], [ 76.3216454, 9.860047 ], [ 76.3212849, 9.8603817 ], [ 76.3207495, 9.8612661 ], [ 76.320423, 9.8620064 ], [ 76.3202371, 9.8622774 ], [ 76.3199826, 9.8623805 ], [ 76.3199364, 9.8630509 ], [ 76.3197765, 9.8644719 ], [ 76.319643, 9.865958 ], [ 76.3198457, 9.8674674 ], [ 76.3199115, 9.8679258 ], [ 76.3197231, 9.8698902 ], [ 76.3201407, 9.8707819 ], [ 76.3209016, 9.8715209 ], [ 76.3219657, 9.8715078 ], [ 76.3226198, 9.8715341 ], [ 76.3229414, 9.8712132 ], [ 76.3233006, 9.8711396 ], [ 76.3241149, 9.8711264 ], [ 76.324692, 9.8715373 ], [ 76.3251562, 9.8719878 ], [ 76.325957, 9.8720865 ], [ 76.3265771, 9.8721827 ], [ 76.3269715, 9.8724284 ], [ 76.3273453, 9.8728098 ], [ 76.3272251, 9.8733227 ], [ 76.327639, 9.8735068 ], [ 76.3281436, 9.8729824 ], [ 76.3280394, 9.8725073 ], [ 76.3290477, 9.8724687 ], [ 76.3299083, 9.8726651 ], [ 76.3304414, 9.8723793 ], [ 76.3314651, 9.8715341 ], [ 76.3319662, 9.8709932 ], [ 76.3322457, 9.870636 ], [ 76.3324829, 9.8702181 ], [ 76.333243, 9.8694927 ], [ 76.3345136, 9.8667339 ], [ 76.3348607, 9.8667983 ], [ 76.335715, 9.8660106 ], [ 76.3362123, 9.8661145 ], [ 76.3367962, 9.8652083 ], [ 76.3370632, 9.8642614 ], [ 76.3367443, 9.8637586 ], [ 76.3373607, 9.8625746 ], [ 76.338318, 9.8600266 ], [ 76.3389267, 9.8570496 ], [ 76.3392524, 9.8565809 ], [ 76.3396734, 9.8567582 ], [ 76.3397864, 9.8584221 ], [ 76.3400667, 9.8588167 ], [ 76.3401601, 9.8558839 ], [ 76.3402113, 9.8534368 ], [ 76.3403993, 9.8530573 ], [ 76.3403849, 9.8524801 ], [ 76.3401735, 9.8472167 ], [ 76.34, 9.8448888 ], [ 76.3406002, 9.8416084 ], [ 76.340939, 9.8405486 ], [ 76.3409381, 9.840291 ], [ 76.3414514, 9.8387427 ], [ 76.3417861, 9.8376531 ], [ 76.343115, 9.8351604 ], [ 76.3433545, 9.834606 ], [ 76.3435126, 9.8343537 ], [ 76.3440241, 9.833764 ], [ 76.344289, 9.8335774 ], [ 76.3446885, 9.8331414 ], [ 76.3450634, 9.8322858 ], [ 76.3456385, 9.8317179 ], [ 76.3456999, 9.8314075 ], [ 76.3460368, 9.8309658 ], [ 76.346303, 9.8307401 ], [ 76.3465679, 9.8304746 ], [ 76.3469273, 9.8302753 ], [ 76.3473924, 9.8299572 ], [ 76.3475785, 9.8294816 ], [ 76.3484255, 9.8284068 ], [ 76.3498914, 9.8274484 ], [ 76.3502919, 9.82758 ], [ 76.3514635, 9.8265052 ], [ 76.3520518, 9.8255576 ], [ 76.3523712, 9.8251741 ], [ 76.3527223, 9.8247178 ], [ 76.3529483, 9.8241997 ], [ 76.3542771, 9.8235287 ], [ 76.3548122, 9.822397 ], [ 76.3563239, 9.8223765 ], [ 76.3569656, 9.8214421 ], [ 76.3570447, 9.821098 ], [ 76.3572295, 9.8208983 ], [ 76.3582678, 9.8206365 ], [ 76.3585319, 9.8216662 ], [ 76.3590526, 9.8219219 ], [ 76.3605681, 9.8172886 ], [ 76.3608503, 9.8167605 ], [ 76.3621935, 9.8156996 ], [ 76.3625402, 9.8153815 ], [ 76.363347, 9.8148345 ], [ 76.3641783, 9.8144378 ], [ 76.3646308, 9.8141686 ], [ 76.3650873, 9.8139751 ], [ 76.3654761, 9.8138991 ], [ 76.3657688, 9.8133153 ], [ 76.3657505, 9.81321 ], [ 76.3658689, 9.8128796 ], [ 76.3660188, 9.8126141 ], [ 76.3661402, 9.8126461 ], [ 76.3658032, 9.8137823 ], [ 76.3662837, 9.8141637 ], [ 76.3670509, 9.8134186 ], [ 76.3671268, 9.8128311 ], [ 76.3665432, 9.8110683 ], [ 76.3664107, 9.8107153 ] ] ], [ [ [ 76.3522356, 9.8357762 ], [ 76.3519298, 9.8360479 ], [ 76.3517276, 9.8362219 ], [ 76.3514512, 9.8365547 ], [ 76.3510202, 9.8369203 ], [ 76.3509165, 9.8372477 ], [ 76.3507453, 9.8371762 ], [ 76.3504594, 9.8375818 ], [ 76.3501347, 9.8377814 ], [ 76.349823, 9.8379755 ], [ 76.3496694, 9.8380143 ], [ 76.3494572, 9.8382087 ], [ 76.3493064, 9.8383444 ], [ 76.349325, 9.8384306 ], [ 76.3492729, 9.8384765 ], [ 76.3493157, 9.838504 ], [ 76.3492952, 9.8385498 ], [ 76.3492562, 9.8385132 ], [ 76.3491104, 9.838623 ], [ 76.3488653, 9.8388433 ], [ 76.348619, 9.8390632 ], [ 76.3485749, 9.8392064 ], [ 76.3485916, 9.8392944 ], [ 76.3487387, 9.8393531 ], [ 76.3488249, 9.839374 ], [ 76.3489456, 9.8396332 ], [ 76.34903, 9.8398125 ], [ 76.3491333, 9.8399574 ], [ 76.3492552, 9.8401711 ], [ 76.3493278, 9.8403077 ], [ 76.3493948, 9.8404462 ], [ 76.349339, 9.8405425 ], [ 76.3493479, 9.8406118 ], [ 76.3493914, 9.8406958 ], [ 76.3495204, 9.8407762 ], [ 76.3495625, 9.8407529 ], [ 76.3496178, 9.840784 ], [ 76.3497599, 9.8409111 ], [ 76.349781, 9.8409811 ], [ 76.3499389, 9.8410667 ], [ 76.3500784, 9.8411445 ], [ 76.3502179, 9.8409007 ], [ 76.3503048, 9.8409163 ], [ 76.350368, 9.8408099 ], [ 76.3504101, 9.8407658 ], [ 76.3505655, 9.8407699 ], [ 76.3507523, 9.8404001 ], [ 76.3507576, 9.8403068 ], [ 76.3506444, 9.8402393 ], [ 76.3511893, 9.8395157 ], [ 76.3512788, 9.8395546 ], [ 76.3513393, 9.8395727 ], [ 76.351363, 9.8395131 ], [ 76.3513999, 9.839539 ], [ 76.3514552, 9.8394482 ], [ 76.3514052, 9.8392745 ], [ 76.3515473, 9.8389736 ], [ 76.3515684, 9.8388725 ], [ 76.3515104, 9.8388413 ], [ 76.3514868, 9.838748 ], [ 76.3515157, 9.8386572 ], [ 76.3515771, 9.8384959 ], [ 76.3515631, 9.8384756 ], [ 76.3516236, 9.8382214 ], [ 76.3517026, 9.8380217 ], [ 76.3517632, 9.8380088 ], [ 76.351829, 9.8380191 ], [ 76.351879, 9.8380347 ], [ 76.3519185, 9.8379984 ], [ 76.3519343, 9.8379569 ], [ 76.3518685, 9.8379361 ], [ 76.3518, 9.8379076 ], [ 76.3517526, 9.8378869 ], [ 76.3517447, 9.8378298 ], [ 76.3516842, 9.8377883 ], [ 76.3516552, 9.8378168 ], [ 76.3516605, 9.837905 ], [ 76.3516368, 9.8379413 ], [ 76.3515583, 9.8379332 ], [ 76.3514593, 9.8379362 ], [ 76.3513709, 9.8378998 ], [ 76.3514025, 9.8377598 ], [ 76.3514446, 9.8376794 ], [ 76.3515078, 9.8376275 ], [ 76.3519225, 9.8376832 ], [ 76.3522143, 9.8377582 ], [ 76.3524414, 9.8378022 ], [ 76.3524712, 9.8378591 ], [ 76.3525084, 9.8378334 ], [ 76.3525277, 9.8376289 ], [ 76.3525224, 9.8374009 ], [ 76.3526397, 9.8372073 ], [ 76.3527635, 9.8370961 ], [ 76.3533047, 9.8368942 ], [ 76.3538401, 9.8367119 ], [ 76.3538349, 9.836743 ], [ 76.3537822, 9.8367975 ], [ 76.353798, 9.8368234 ], [ 76.3539744, 9.8367871 ], [ 76.3540902, 9.8368286 ], [ 76.3541218, 9.8368779 ], [ 76.3541455, 9.8369635 ], [ 76.3540997, 9.8370578 ], [ 76.3540639, 9.8371736 ], [ 76.353877, 9.8376197 ], [ 76.3535163, 9.838416 ], [ 76.3533347, 9.8386468 ], [ 76.3530399, 9.8392667 ], [ 76.3527374, 9.8400445 ], [ 76.3526845, 9.8401797 ], [ 76.3525423, 9.8402497 ], [ 76.3523844, 9.8402419 ], [ 76.3521975, 9.8402108 ], [ 76.3519474, 9.8401952 ], [ 76.3517474, 9.8401667 ], [ 76.3514789, 9.8401797 ], [ 76.3511603, 9.8401874 ], [ 76.3510919, 9.8402834 ], [ 76.3510321, 9.8405181 ], [ 76.3512764, 9.8406518 ], [ 76.3512317, 9.8407618 ], [ 76.3512615, 9.8409929 ], [ 76.3512094, 9.8411763 ], [ 76.3512056, 9.8415284 ], [ 76.3512056, 9.8417852 ], [ 76.3513583, 9.8419722 ], [ 76.351537, 9.842273 ], [ 76.3516412, 9.8424674 ], [ 76.3516896, 9.8426215 ], [ 76.3517752, 9.8428746 ], [ 76.3519316, 9.8428709 ], [ 76.3519762, 9.8429332 ], [ 76.3520209, 9.8430726 ], [ 76.352006, 9.8433147 ], [ 76.3521049, 9.8434036 ], [ 76.3523492, 9.8434235 ], [ 76.3526166, 9.8449286 ], [ 76.3524545, 9.8457597 ], [ 76.3522964, 9.8466049 ], [ 76.3523996, 9.846784 ], [ 76.3523575, 9.8474748 ], [ 76.352074, 9.8475738 ], [ 76.3517901, 9.8475512 ], [ 76.3517603, 9.847951 ], [ 76.351913, 9.8482811 ], [ 76.3519369, 9.8488926 ], [ 76.3521991, 9.849576 ], [ 76.3521922, 9.8498473 ], [ 76.3520433, 9.8498583 ], [ 76.352047, 9.8501407 ], [ 76.3521434, 9.8504085 ], [ 76.35214, 9.8511421 ], [ 76.3520842, 9.8513254 ], [ 76.3522338, 9.8521672 ], [ 76.3523225, 9.8523745 ], [ 76.3523597, 9.8525285 ], [ 76.3525496, 9.8525505 ], [ 76.3527394, 9.8527779 ], [ 76.3528846, 9.853053 ], [ 76.3529805, 9.8534204 ], [ 76.3529814, 9.8537059 ], [ 76.3530745, 9.8540653 ], [ 76.3531713, 9.8543037 ], [ 76.3531936, 9.8548943 ], [ 76.3531303, 9.8552464 ], [ 76.3529688, 9.8552255 ], [ 76.3528585, 9.8557892 ], [ 76.3527657, 9.8560624 ], [ 76.3526061, 9.8560305 ], [ 76.3523973, 9.8559238 ], [ 76.3523303, 9.8560925 ], [ 76.3523824, 9.8562832 ], [ 76.3522111, 9.8562759 ], [ 76.3522409, 9.8564299 ], [ 76.3522315, 9.8566739 ], [ 76.3523927, 9.8569047 ], [ 76.3523209, 9.8573217 ], [ 76.3522874, 9.8575479 ], [ 76.3520821, 9.8578228 ], [ 76.3518399, 9.8577968 ], [ 76.3517276, 9.858214 ], [ 76.3515398, 9.8581911 ], [ 76.3512608, 9.8587098 ], [ 76.3514609, 9.8589484 ], [ 76.3504763, 9.8597524 ], [ 76.3498409, 9.8600491 ], [ 76.349438, 9.8604257 ], [ 76.3488399, 9.8607129 ], [ 76.3484178, 9.8607638 ], [ 76.3480514, 9.8608217 ], [ 76.3478755, 9.8609143 ], [ 76.3481537, 9.8619159 ], [ 76.3481598, 9.8620295 ], [ 76.3482838, 9.8622768 ], [ 76.3486069, 9.8630847 ], [ 76.3485389, 9.8632069 ], [ 76.3485548, 9.8632846 ], [ 76.3485982, 9.863391 ], [ 76.3486561, 9.8634104 ], [ 76.3487166, 9.8636741 ], [ 76.3486389, 9.8644621 ], [ 76.3486547, 9.8650068 ], [ 76.3487969, 9.8654321 ], [ 76.3489706, 9.8656707 ], [ 76.3489759, 9.8658419 ], [ 76.3489917, 9.8661168 ], [ 76.3491286, 9.8665317 ], [ 76.3491128, 9.8668844 ], [ 76.3489027, 9.867132 ], [ 76.3486524, 9.866996 ], [ 76.3483192, 9.8671262 ], [ 76.3482171, 9.867328 ], [ 76.3480661, 9.867757 ], [ 76.3478161, 9.8676445 ], [ 76.3476731, 9.8678375 ], [ 76.3477695, 9.8682298 ], [ 76.3475523, 9.8689894 ], [ 76.3473662, 9.8698256 ], [ 76.3476346, 9.8707561 ], [ 76.347897, 9.8715123 ], [ 76.3478278, 9.8719382 ], [ 76.3479693, 9.8723196 ], [ 76.3482566, 9.8725448 ], [ 76.3484488, 9.8727994 ], [ 76.3488791, 9.8741463 ], [ 76.349614, 9.8743047 ], [ 76.3497506, 9.874197 ], [ 76.3498854, 9.8734793 ], [ 76.3497502, 9.8733095 ], [ 76.349757, 9.8726557 ], [ 76.3497338, 9.8718061 ], [ 76.3499051, 9.8709553 ], [ 76.3500019, 9.8704711 ], [ 76.3502185, 9.8699535 ], [ 76.3506124, 9.8696056 ], [ 76.3507688, 9.8691141 ], [ 76.3506461, 9.8690648 ], [ 76.3507418, 9.8686385 ], [ 76.3508595, 9.8685191 ], [ 76.3514091, 9.8670015 ], [ 76.352042, 9.8655197 ], [ 76.3525929, 9.8647862 ], [ 76.3532304, 9.8643623 ], [ 76.3537544, 9.8649622 ], [ 76.3547469, 9.8641594 ], [ 76.3558237, 9.861757 ], [ 76.3561049, 9.861821 ], [ 76.3568758, 9.8599545 ], [ 76.3579273, 9.8594765 ], [ 76.3593313, 9.8586741 ], [ 76.3608351, 9.8580889 ], [ 76.3610098, 9.8581288 ], [ 76.3611673, 9.8580446 ], [ 76.3617189, 9.8571062 ], [ 76.3627933, 9.8560862 ], [ 76.3634634, 9.8557708 ], [ 76.3637314, 9.8559395 ], [ 76.3639213, 9.855848 ], [ 76.3641391, 9.8554242 ], [ 76.3645356, 9.8554114 ], [ 76.3649972, 9.855228 ], [ 76.3654243, 9.8549941 ], [ 76.3657641, 9.8549932 ], [ 76.3658609, 9.854355 ], [ 76.3658382, 9.8535614 ], [ 76.3657243, 9.8530155 ], [ 76.3663084, 9.8528057 ], [ 76.3664275, 9.8524389 ], [ 76.3667177, 9.8511744 ], [ 76.3669487, 9.8502235 ], [ 76.3669849, 9.8477792 ], [ 76.3671323, 9.8464292 ], [ 76.3671205, 9.8462334 ], [ 76.3671231, 9.8461348 ], [ 76.3671534, 9.8458703 ], [ 76.3672152, 9.8456965 ], [ 76.3673008, 9.8455798 ], [ 76.3674903, 9.8442104 ], [ 76.3676272, 9.8435931 ], [ 76.3677114, 9.8432767 ], [ 76.3678694, 9.8429862 ], [ 76.3682642, 9.8416115 ], [ 76.3688126, 9.8402533 ], [ 76.3689285, 9.839872 ], [ 76.369068, 9.8395452 ], [ 76.3692312, 9.8390446 ], [ 76.3694484, 9.8383339 ], [ 76.3698416, 9.8377595 ], [ 76.3699607, 9.8376495 ], [ 76.3700128, 9.8373487 ], [ 76.3702809, 9.8367985 ], [ 76.3707259, 9.8360971 ], [ 76.370769, 9.8360211 ], [ 76.3707361, 9.8359732 ], [ 76.3708203, 9.8357683 ], [ 76.3709111, 9.8356736 ], [ 76.3709822, 9.8355647 ], [ 76.3710575, 9.8353955 ], [ 76.3710875, 9.8353481 ], [ 76.3711512, 9.8353095 ], [ 76.3711318, 9.8352577 ], [ 76.3710605, 9.8350576 ], [ 76.3710277, 9.8348737 ], [ 76.3717216, 9.8332513 ], [ 76.3718343, 9.8327846 ], [ 76.3719462, 9.8328378 ], [ 76.3720015, 9.8327743 ], [ 76.372012, 9.8326329 ], [ 76.3719528, 9.8325875 ], [ 76.3718922, 9.8325175 ], [ 76.3719067, 9.8323826 ], [ 76.372012, 9.8322413 ], [ 76.3720567, 9.8321544 ], [ 76.372066, 9.8319209 ], [ 76.3720573, 9.8317297 ], [ 76.3720146, 9.831611 ], [ 76.3720594, 9.8315085 ], [ 76.3719251, 9.8314554 ], [ 76.3719067, 9.8313581 ], [ 76.371629, 9.8313036 ], [ 76.3715039, 9.8311182 ], [ 76.3709261, 9.8308925 ], [ 76.3703001, 9.8306951 ], [ 76.3692203, 9.8304308 ], [ 76.3682148, 9.8302181 ], [ 76.3664603, 9.8301218 ], [ 76.36556, 9.8301183 ], [ 76.3654942, 9.8300314 ], [ 76.3652757, 9.8300288 ], [ 76.364923, 9.8300223 ], [ 76.3641556, 9.8301507 ], [ 76.3639385, 9.8303217 ], [ 76.3630816, 9.830187 ], [ 76.3620751, 9.8300356 ], [ 76.3619128, 9.8305761 ], [ 76.361502, 9.8308826 ], [ 76.3608786, 9.8309826 ], [ 76.3605566, 9.8310542 ], [ 76.3598056, 9.8311465 ], [ 76.3596445, 9.8313329 ], [ 76.3592853, 9.8317328 ], [ 76.3591308, 9.8318905 ], [ 76.3583713, 9.8323013 ], [ 76.3579376, 9.8323893 ], [ 76.3575095, 9.8326039 ], [ 76.3573923, 9.8327837 ], [ 76.3568636, 9.8333371 ], [ 76.3565751, 9.8336989 ], [ 76.3561709, 9.8338234 ], [ 76.3559883, 9.8339321 ], [ 76.3557896, 9.8341097 ], [ 76.355892, 9.8342326 ], [ 76.3557021, 9.8344967 ], [ 76.3556277, 9.8344563 ], [ 76.3555327, 9.834394 ], [ 76.3554564, 9.8344508 ], [ 76.3554427, 9.8345405 ], [ 76.3551046, 9.8343921 ], [ 76.3548217, 9.8342399 ], [ 76.3547557, 9.8343506 ], [ 76.354321, 9.8347369 ], [ 76.3541434, 9.8346734 ], [ 76.3540146, 9.8348277 ], [ 76.3537886, 9.8350689 ], [ 76.353595, 9.8351496 ], [ 76.3534257, 9.8353678 ], [ 76.3531185, 9.8352743 ], [ 76.3530794, 9.8351129 ], [ 76.3528952, 9.8351899 ], [ 76.3528263, 9.8353146 ], [ 76.3526532, 9.8354705 ], [ 76.3524949, 9.8355786 ], [ 76.3522356, 9.8357762 ] ] ], [ [ [ 73.6503933, 10.1068086 ], [ 73.6510118, 10.1057285 ], [ 73.6511808, 10.1038033 ], [ 73.6509152, 10.1012601 ], [ 73.6506979, 10.099739 ], [ 73.6502634, 10.0985506 ], [ 73.6497081, 10.0966729 ], [ 73.649346, 10.0946526 ], [ 73.648839, 10.0915627 ], [ 73.6484769, 10.0888055 ], [ 73.6475836, 10.0852639 ], [ 73.6472698, 10.0829821 ], [ 73.6471249, 10.0811518 ], [ 73.647149, 10.0782995 ], [ 73.6473422, 10.0739021 ], [ 73.6474629, 10.0709071 ], [ 73.6472215, 10.0673415 ], [ 73.6468352, 10.0633481 ], [ 73.6464248, 10.0618267 ], [ 73.6459178, 10.0610898 ], [ 73.6453142, 10.0605193 ], [ 73.6446865, 10.0601865 ], [ 73.643238, 10.0599964 ], [ 73.6421033, 10.0600915 ], [ 73.6403892, 10.0603054 ], [ 73.6400513, 10.0605431 ], [ 73.6386751, 10.0619931 ], [ 73.6386751, 10.0630153 ], [ 73.6392787, 10.0636809 ], [ 73.6394718, 10.0640612 ], [ 73.6393753, 10.0644415 ], [ 73.6385303, 10.0660817 ], [ 73.6377577, 10.0683636 ], [ 73.6365748, 10.0708358 ], [ 73.6357781, 10.0722857 ], [ 73.6349573, 10.0734742 ], [ 73.6345951, 10.074116 ], [ 73.6346193, 10.0748529 ], [ 73.6359712, 10.0757086 ], [ 73.6362368, 10.0751619 ], [ 73.6358505, 10.074639 ], [ 73.6364782, 10.0739734 ], [ 73.6371783, 10.0736644 ], [ 73.6380233, 10.0738308 ], [ 73.638989, 10.0740209 ], [ 73.639496, 10.0741873 ], [ 73.6401478, 10.0746627 ], [ 73.6409204, 10.0758037 ], [ 73.6419102, 10.076802 ], [ 73.6427069, 10.0776577 ], [ 73.6432622, 10.0789888 ], [ 73.644083, 10.0807715 ], [ 73.6447348, 10.0832198 ], [ 73.6453867, 10.0856205 ], [ 73.6464972, 10.0888768 ], [ 73.647318, 10.0921569 ], [ 73.6477043, 10.0941059 ], [ 73.6484286, 10.0959599 ], [ 73.6493943, 10.0980515 ], [ 73.650022, 10.0995726 ], [ 73.6503117, 10.1010938 ], [ 73.6504565, 10.1052769 ], [ 73.6502157, 10.1061455 ], [ 73.6503933, 10.1068086 ] ] ], [ [ [ 72.63603, 10.5686 ], [ 72.63641, 10.56945 ], [ 72.6369128, 10.5706864 ], [ 72.6369309, 10.5708168 ], [ 72.6370006, 10.5709751 ], [ 72.63702, 10.57114 ], [ 72.63739, 10.57172 ], [ 72.63774, 10.57262 ], [ 72.63812, 10.5734 ], [ 72.63868, 10.57509 ], [ 72.63882, 10.57567 ], [ 72.6391225, 10.5761312 ], [ 72.63935, 10.57664 ], [ 72.63988, 10.57711 ], [ 72.6399, 10.57718 ], [ 72.63988, 10.57729 ], [ 72.63996, 10.57739 ], [ 72.64035, 10.57739 ], [ 72.64068, 10.57732 ], [ 72.64127, 10.57726 ], [ 72.64228, 10.57706 ], [ 72.64278, 10.57709 ], [ 72.64291, 10.57706 ], [ 72.64345, 10.57702 ], [ 72.64398, 10.57694 ], [ 72.64442, 10.5769 ], [ 72.64522, 10.57669 ], [ 72.64545, 10.57667 ], [ 72.64568, 10.57669 ], [ 72.64579, 10.57667 ], [ 72.64601, 10.57652 ], [ 72.64639, 10.5761 ], [ 72.64742, 10.57475 ], [ 72.64837, 10.5734 ], [ 72.64879, 10.57243 ], [ 72.64898, 10.5719 ], [ 72.64921, 10.57138 ], [ 72.6494, 10.57058 ], [ 72.64954, 10.56987 ], [ 72.64968, 10.56888 ], [ 72.64974, 10.56796 ], [ 72.64972, 10.5675 ], [ 72.64959, 10.56704 ], [ 72.64938, 10.56585 ], [ 72.64904, 10.56458 ], [ 72.64894, 10.56428 ], [ 72.64888, 10.56384 ], [ 72.64873, 10.56322 ], [ 72.64853, 10.56262 ], [ 72.64845, 10.56247 ], [ 72.64744, 10.56161 ], [ 72.64707, 10.56137 ], [ 72.64598, 10.56046 ], [ 72.64536, 10.5602 ], [ 72.64461, 10.55984 ], [ 72.64368, 10.55943 ], [ 72.64321, 10.55929 ], [ 72.64181, 10.55877 ], [ 72.64047, 10.55831 ], [ 72.63989, 10.55804 ], [ 72.63974, 10.55794 ], [ 72.63867, 10.55749 ], [ 72.63806, 10.5572 ], [ 72.63742, 10.55693 ], [ 72.63686, 10.55663 ], [ 72.6365, 10.55651 ], [ 72.6362, 10.55644 ], [ 72.63587, 10.5563 ], [ 72.6354, 10.55598 ], [ 72.6348, 10.55566 ], [ 72.63298, 10.55446 ], [ 72.6323, 10.55384 ], [ 72.63135, 10.55308 ], [ 72.63064, 10.55256 ], [ 72.62971, 10.55179 ], [ 72.62889, 10.55125 ], [ 72.62859, 10.55098 ], [ 72.62561, 10.54875 ], [ 72.62532, 10.54848 ], [ 72.62493, 10.5482 ], [ 72.62392, 10.54738 ], [ 72.62295, 10.5465 ], [ 72.62273, 10.54635 ], [ 72.62254, 10.5461 ], [ 72.62239, 10.54585 ], [ 72.62235, 10.54572 ], [ 72.62204, 10.54543 ], [ 72.62195, 10.54528 ], [ 72.62192, 10.54506 ], [ 72.62179, 10.54485 ], [ 72.62159, 10.54463 ], [ 72.6214, 10.54434 ], [ 72.62102, 10.54399 ], [ 72.62075, 10.5436 ], [ 72.62051, 10.54337 ], [ 72.62022, 10.54302 ], [ 72.61951, 10.54227 ], [ 72.61851, 10.54153 ], [ 72.61813, 10.54129 ], [ 72.61709, 10.54073 ], [ 72.61619, 10.54094 ], [ 72.61601, 10.54103 ], [ 72.61592, 10.54116 ], [ 72.61563, 10.54186 ], [ 72.61545, 10.54223 ], [ 72.61549, 10.54247 ], [ 72.61558, 10.54276 ], [ 72.61575, 10.54299 ], [ 72.61606, 10.54329 ], [ 72.61699, 10.5446 ], [ 72.6173, 10.54496 ], [ 72.61768, 10.54518 ], [ 72.61805, 10.54533 ], [ 72.61886, 10.54543 ], [ 72.61943, 10.54577 ], [ 72.6199, 10.54602 ], [ 72.62093, 10.5464 ], [ 72.62103, 10.5465 ], [ 72.62119, 10.54655 ], [ 72.62126, 10.54655 ], [ 72.6218, 10.54641 ], [ 72.62193, 10.54643 ], [ 72.62235, 10.54668 ], [ 72.62298, 10.54721 ], [ 72.62366, 10.54807 ], [ 72.62396, 10.54854 ], [ 72.62429, 10.54924 ], [ 72.62547, 10.55139 ], [ 72.62574, 10.55178 ], [ 72.62776, 10.55504 ], [ 72.62853, 10.55614 ], [ 72.63018, 10.55835 ], [ 72.63033, 10.5586 ], [ 72.63042, 10.55881 ], [ 72.63083, 10.55945 ], [ 72.63099, 10.55979 ], [ 72.63151, 10.56054 ], [ 72.6317, 10.56086 ], [ 72.63202, 10.56132 ], [ 72.63221, 10.56165 ], [ 72.63268, 10.56224 ], [ 72.63343, 10.56352 ], [ 72.63416, 10.56492 ], [ 72.63426, 10.56517 ], [ 72.63446, 10.56551 ], [ 72.63458, 10.56597 ], [ 72.63498, 10.56659 ], [ 72.63564, 10.56781 ], [ 72.63603, 10.5686 ] ] ], [ [ [ 72.1709718, 10.8163807 ], [ 72.1708662, 10.8164245 ], [ 72.1707125, 10.8166296 ], [ 72.1707125, 10.816947 ], [ 72.1708188, 10.8172157 ], [ 72.1709258, 10.8176454 ], [ 72.1709961, 10.8178733 ], [ 72.1711585, 10.8180834 ], [ 72.1713265, 10.8186739 ], [ 72.1715074, 10.8191152 ], [ 72.1722056, 10.8200769 ], [ 72.172937, 10.8209663 ], [ 72.1737827, 10.8221338 ], [ 72.1746923, 10.823579 ], [ 72.175799, 10.8255022 ], [ 72.1769304, 10.8273421 ], [ 72.1779131, 10.8288414 ], [ 72.1784981, 10.8298155 ], [ 72.1792143, 10.8308878 ], [ 72.1803087, 10.8329036 ], [ 72.1813233, 10.834744 ], [ 72.1819037, 10.8356463 ], [ 72.1824613, 10.8368134 ], [ 72.1824888, 10.8370378 ], [ 72.1825802, 10.837141 ], [ 72.1827918, 10.8376394 ], [ 72.1830281, 10.8381959 ], [ 72.1830966, 10.8384563 ], [ 72.1832611, 10.8388962 ], [ 72.1834622, 10.8391386 ], [ 72.1856152, 10.8430405 ], [ 72.1867395, 10.8451682 ], [ 72.18785, 10.84711 ], [ 72.1883986, 10.8484106 ], [ 72.18881, 10.84954 ], [ 72.1889882, 10.8499278 ], [ 72.1892395, 10.8507806 ], [ 72.1895366, 10.8523113 ], [ 72.1896554, 10.8528319 ], [ 72.1896452, 10.8529587 ], [ 72.1900978, 10.8550809 ], [ 72.1901448, 10.8553014 ], [ 72.1904937, 10.8571869 ], [ 72.1905843, 10.8575803 ], [ 72.1909753, 10.859042 ], [ 72.191003, 10.8594342 ], [ 72.1910979, 10.8598342 ], [ 72.1911572, 10.8606575 ], [ 72.1911928, 10.8610575 ], [ 72.1913075, 10.8614886 ], [ 72.1913628, 10.8619468 ], [ 72.1914419, 10.8622847 ], [ 72.1916633, 10.8626808 ], [ 72.1918255, 10.8630692 ], [ 72.1919955, 10.8634886 ], [ 72.1921023, 10.8639002 ], [ 72.1922407, 10.8643041 ], [ 72.1924107, 10.8646885 ], [ 72.1925372, 10.864941 ], [ 72.1925412, 10.8650847 ], [ 72.1926559, 10.8655002 ], [ 72.1927982, 10.8658924 ], [ 72.1928773, 10.8663506 ], [ 72.1929327, 10.866506 ], [ 72.1929406, 10.8668205 ], [ 72.1929947, 10.867068 ], [ 72.1930315, 10.8672361 ], [ 72.1932095, 10.867438 ], [ 72.193253, 10.8676632 ], [ 72.1933874, 10.867803 ], [ 72.1934586, 10.8680865 ], [ 72.1936286, 10.8682885 ], [ 72.1938461, 10.8686768 ], [ 72.19449, 10.87023 ], [ 72.1948184, 10.8709242 ], [ 72.1953863, 10.8717333 ], [ 72.19587, 10.8723357 ], [ 72.1962308, 10.8727598 ], [ 72.1986005, 10.8755306 ], [ 72.1991882, 10.8760567 ], [ 72.2004296, 10.8773142 ], [ 72.2012201, 10.8780246 ], [ 72.2016376, 10.8783998 ], [ 72.2019167, 10.8785667 ], [ 72.2021908, 10.8783147 ], [ 72.2026113, 10.8780947 ], [ 72.2029552, 10.8779308 ], [ 72.20441, 10.87768 ], [ 72.2050244, 10.8776369 ], [ 72.20576, 10.87769 ], [ 72.2061259, 10.8776639 ], [ 72.20642, 10.87751 ], [ 72.2066103, 10.877215 ], [ 72.206738, 10.876817 ], [ 72.2067886, 10.8765149 ], [ 72.2067428, 10.8761985 ], [ 72.2063727, 10.8752402 ], [ 72.2059317, 10.8743356 ], [ 72.2054365, 10.8734212 ], [ 72.2051262, 10.8728689 ], [ 72.2047061, 10.8719676 ], [ 72.2044841, 10.8714552 ], [ 72.2041179, 10.8706791 ], [ 72.2032518, 10.8689145 ], [ 72.2022888, 10.8675434 ], [ 72.2014972, 10.8660016 ], [ 72.2008086, 10.8648457 ], [ 72.2002402, 10.8638911 ], [ 72.1994642, 10.8624907 ], [ 72.1985379, 10.8610322 ], [ 72.1976997, 10.859793 ], [ 72.1970986, 10.8589297 ], [ 72.196292, 10.857799 ], [ 72.195101, 10.8559338 ], [ 72.1936886, 10.8539327 ], [ 72.1927427, 10.8523654 ], [ 72.1916814, 10.8508013 ], [ 72.1908232, 10.8494747 ], [ 72.1899597, 10.84823 ], [ 72.1898086, 10.8479261 ], [ 72.1896486, 10.8477376 ], [ 72.1895983, 10.8475266 ], [ 72.1896258, 10.8472977 ], [ 72.1893241, 10.8467905 ], [ 72.1884649, 10.8454798 ], [ 72.1879759, 10.8446494 ], [ 72.1876971, 10.8440479 ], [ 72.1874868, 10.8435227 ], [ 72.1865655, 10.8421498 ], [ 72.1854492, 10.83989 ], [ 72.1844796, 10.838303 ], [ 72.1844004, 10.8381533 ], [ 72.1842276, 10.8378269 ], [ 72.183187, 10.8357383 ], [ 72.1828509, 10.8351797 ], [ 72.1825018, 10.8344306 ], [ 72.1822885, 10.8339037 ], [ 72.1820121, 10.8330056 ], [ 72.1813047, 10.831228 ], [ 72.1807826, 10.8299169 ], [ 72.18047, 10.82941 ], [ 72.1802573, 10.8290944 ], [ 72.1794382, 10.8278791 ], [ 72.1781742, 10.8261453 ], [ 72.177123, 10.8244704 ], [ 72.1766912, 10.8238225 ], [ 72.1764973, 10.8235051 ], [ 72.1761612, 10.823213 ], [ 72.175973, 10.8229284 ], [ 72.175405, 10.8221655 ], [ 72.175043, 10.8217275 ], [ 72.1746941, 10.8213105 ], [ 72.1736211, 10.8199563 ], [ 72.17277, 10.81854 ], [ 72.1717791, 10.8172155 ], [ 72.1712296, 10.8166677 ], [ 72.1710939, 10.8165153 ], [ 72.1709718, 10.8163807 ] ] ], [ [ [ 92.6167452, 10.9279504 ], [ 92.6157419, 10.9278935 ], [ 92.6149831, 10.9278654 ], [ 92.6146884, 10.9277881 ], [ 92.6143818, 10.9277951 ], [ 92.6134798, 10.92802 ], [ 92.6128356, 10.9282731 ], [ 92.6120052, 10.9286948 ], [ 92.6112177, 10.9293274 ], [ 92.6097847, 10.9303516 ], [ 92.6088866, 10.9311191 ], [ 92.6083738, 10.9317369 ], [ 92.6077781, 10.9326297 ], [ 92.6073078, 10.9332762 ], [ 92.6068345, 10.9340856 ], [ 92.6064926, 10.9346922 ], [ 92.6060892, 10.9353131 ], [ 92.6058655, 10.9360467 ], [ 92.6058188, 10.9365413 ], [ 92.6058786, 10.9371659 ], [ 92.6060076, 10.9375155 ], [ 92.6065373, 10.9377271 ], [ 92.6071621, 10.9379425 ], [ 92.6076914, 10.9381048 ], [ 92.6082079, 10.9381382 ], [ 92.6088774, 10.9382056 ], [ 92.6092645, 10.9383062 ], [ 92.6099105, 10.9381574 ], [ 92.6105057, 10.937916 ], [ 92.6109714, 10.9375681 ], [ 92.6114472, 10.937091 ], [ 92.6117509, 10.9366139 ], [ 92.6118927, 10.9364151 ], [ 92.6122875, 10.9362262 ], [ 92.6127937, 10.936097 ], [ 92.6140389, 10.9356398 ], [ 92.6146159, 10.9354708 ], [ 92.6151423, 10.9354807 ], [ 92.6155979, 10.9356696 ], [ 92.6158712, 10.935928 ], [ 92.6162256, 10.9360075 ], [ 92.6164712, 10.9358414 ], [ 92.6168707, 10.9354695 ], [ 92.617516, 10.9343421 ], [ 92.6178569, 10.9338514 ], [ 92.618595, 10.9327836 ], [ 92.6191594, 10.9319524 ], [ 92.6194729, 10.9312136 ], [ 92.6198492, 10.9305671 ], [ 92.6203195, 10.9301669 ], [ 92.6203195, 10.9297052 ], [ 92.6195984, 10.9293357 ], [ 92.6189399, 10.9289971 ], [ 92.6185637, 10.9285661 ], [ 92.6175917, 10.9280428 ], [ 92.6167452, 10.9279504 ] ] ], [ [ [ 92.2236342, 10.9738649 ], [ 92.2220722, 10.9733095 ], [ 92.2203681, 10.9728202 ], [ 92.2195485, 10.9726799 ], [ 92.219052, 10.9727206 ], [ 92.2180992, 10.9730666 ], [ 92.2175411, 10.9734974 ], [ 92.2170972, 10.9740203 ], [ 92.2167056, 10.9743766 ], [ 92.2160118, 10.9753545 ], [ 92.2155449, 10.9761475 ], [ 92.2148732, 10.9775969 ], [ 92.2147907, 10.9781731 ], [ 92.2149459, 10.9785895 ], [ 92.2151925, 10.9789212 ], [ 92.215763, 10.9793916 ], [ 92.2165114, 10.9798229 ], [ 92.2176645, 10.9803578 ], [ 92.2185452, 10.9809146 ], [ 92.2192796, 10.9815238 ], [ 92.2198588, 10.9821432 ], [ 92.2201794, 10.982458 ], [ 92.2206959, 10.9827923 ], [ 92.2212487, 10.9830016 ], [ 92.2219313, 10.9831589 ], [ 92.222649, 10.9832312 ], [ 92.2232138, 10.9831742 ], [ 92.2237362, 10.9830219 ], [ 92.2242973, 10.9828126 ], [ 92.2250859, 10.9826614 ], [ 92.2264824, 10.982508 ], [ 92.2273248, 10.9823257 ], [ 92.2277563, 10.9821606 ], [ 92.2280408, 10.9821936 ], [ 92.2287357, 10.9822728 ], [ 92.2288534, 10.9816796 ], [ 92.228985, 10.9814139 ], [ 92.2290048, 10.9809687 ], [ 92.2281899, 10.9778625 ], [ 92.2278, 10.97678 ], [ 92.2275369, 10.9761153 ], [ 92.2271347, 10.9757635 ], [ 92.226396, 10.9755193 ], [ 92.2258694, 10.9753757 ], [ 92.2254452, 10.9751891 ], [ 92.2250346, 10.9749084 ], [ 92.2244097, 10.9744163 ], [ 92.2236342, 10.9738649 ] ] ], [ [ [ 92.6641963, 10.9825882 ], [ 92.6633539, 10.9823091 ], [ 92.6627791, 10.9822245 ], [ 92.6622089, 10.9821871 ], [ 92.6616495, 10.9821856 ], [ 92.6611541, 10.9822245 ], [ 92.66066, 10.9824116 ], [ 92.6603118, 10.98274 ], [ 92.6599679, 10.9832565 ], [ 92.6596652, 10.9839562 ], [ 92.6593953, 10.9845503 ], [ 92.6591128, 10.9851135 ], [ 92.6589524, 10.9857731 ], [ 92.658875, 10.986845 ], [ 92.6588552, 10.9878566 ], [ 92.6589623, 10.9884355 ], [ 92.6592207, 10.9892602 ], [ 92.6596766, 10.9901627 ], [ 92.66033, 10.9912755 ], [ 92.6609064, 10.9918837 ], [ 92.6616281, 10.9923823 ], [ 92.6621549, 10.9925646 ], [ 92.6628066, 10.9926875 ], [ 92.663443, 10.9926619 ], [ 92.6641112, 10.9926846 ], [ 92.6660265, 10.9925237 ], [ 92.6667031, 10.992302 ], [ 92.6673758, 10.9919669 ], [ 92.6679714, 10.9914849 ], [ 92.6685421, 10.9908294 ], [ 92.6690614, 10.9900647 ], [ 92.6695049, 10.9891802 ], [ 92.6696917, 10.9883735 ], [ 92.6696758, 10.9874675 ], [ 92.669463, 10.9866202 ], [ 92.6690246, 10.9857365 ], [ 92.6686831, 10.9852567 ], [ 92.6673118, 10.9845085 ], [ 92.6664355, 10.9840532 ], [ 92.6657697, 10.9836067 ], [ 92.6649853, 10.9830566 ], [ 92.6641963, 10.9825882 ] ] ], [ [ [ 92.3921005, 10.5603946 ], [ 92.3945605, 10.5651319 ], [ 92.3965435, 10.5678701 ], [ 92.3973782, 10.5683053 ], [ 92.3971014, 10.5688686 ], [ 92.3969544, 10.5704038 ], [ 92.3973756, 10.5711551 ], [ 92.3994277, 10.5739575 ], [ 92.4032965, 10.575354 ], [ 92.4040249, 10.5760717 ], [ 92.4032647, 10.5769087 ], [ 92.4085945, 10.5826671 ], [ 92.4094222, 10.5837578 ], [ 92.4090269, 10.585848 ], [ 92.4091306, 10.5876607 ], [ 92.4095895, 10.5889846 ], [ 92.4089716, 10.5919458 ], [ 92.40948, 10.5941503 ], [ 92.4102843, 10.596599 ], [ 92.4115353, 10.5980358 ], [ 92.4118775, 10.6003674 ], [ 92.4125698, 10.602729 ], [ 92.4128639, 10.603692 ], [ 92.4118555, 10.6063487 ], [ 92.4124553, 10.6071522 ], [ 92.4144445, 10.6090384 ], [ 92.41589, 10.6105481 ], [ 92.4170773, 10.6112768 ], [ 92.4180104, 10.6114152 ], [ 92.4188106, 10.611217 ], [ 92.4194165, 10.6125983 ], [ 92.4193579, 10.6149231 ], [ 92.418993, 10.617344 ], [ 92.4183092, 10.6196042 ], [ 92.4180955, 10.620767 ], [ 92.4175785, 10.6227396 ], [ 92.4165934, 10.6243607 ], [ 92.4152827, 10.6298974 ], [ 92.413295, 10.6358481 ], [ 92.407808, 10.6476615 ], [ 92.4055825, 10.6507872 ], [ 92.4019593, 10.6567532 ], [ 92.3970336, 10.6628873 ], [ 92.3939397, 10.6657047 ], [ 92.3933737, 10.6661622 ], [ 92.3928568, 10.6662967 ], [ 92.3918549, 10.6658954 ], [ 92.3881891, 10.6646083 ], [ 92.3864455, 10.6651094 ], [ 92.3832546, 10.6667566 ], [ 92.3821246, 10.6670299 ], [ 92.3813036, 10.6667758 ], [ 92.3809083, 10.6672091 ], [ 92.3809387, 10.6679114 ], [ 92.3813536, 10.668584 ], [ 92.3817989, 10.67091 ], [ 92.3825254, 10.6748871 ], [ 92.3822992, 10.6757131 ], [ 92.3809888, 10.6773718 ], [ 92.3801832, 10.6813248 ], [ 92.3797611, 10.6853374 ], [ 92.3802241, 10.6891123 ], [ 92.3800568, 10.6926232 ], [ 92.3784353, 10.6963186 ], [ 92.3775338, 10.703019 ], [ 92.377549530751679, 10.70446515 ], [ 92.3775717, 10.7065032 ], [ 92.3785578, 10.7122969 ], [ 92.3796719, 10.716429 ], [ 92.3817705, 10.7207864 ], [ 92.3814259, 10.7222056 ], [ 92.3809526, 10.723491 ], [ 92.3809526, 10.7244839 ], [ 92.3805871, 10.725667 ], [ 92.3792709, 10.7278691 ], [ 92.3786559, 10.7315056 ], [ 92.3774204, 10.7382039 ], [ 92.3772973, 10.7405605 ], [ 92.3769233, 10.7426142 ], [ 92.3772328, 10.7452503 ], [ 92.3768663, 10.7466192 ], [ 92.3767813, 10.7477007 ], [ 92.3772979, 10.7508355 ], [ 92.3775274, 10.7543957 ], [ 92.3786745, 10.7564728 ], [ 92.3801189, 10.7598791 ], [ 92.3811676, 10.7613258 ], [ 92.3810529, 10.762544 ], [ 92.3783188, 10.7664978 ], [ 92.3782455, 10.7677088 ], [ 92.3772758, 10.7693949 ], [ 92.3760932, 10.7702398 ], [ 92.3744158, 10.7710062 ], [ 92.3728895, 10.7716761 ], [ 92.3719434, 10.7734927 ], [ 92.3721584, 10.7747178 ], [ 92.373212, 10.7824064 ], [ 92.3740648, 10.7838592 ], [ 92.3757564, 10.7860001 ], [ 92.3777515, 10.7869348 ], [ 92.379458, 10.7887943 ], [ 92.38083, 10.7906043 ], [ 92.3816151, 10.7924768 ], [ 92.3824075, 10.7936511 ], [ 92.3839279, 10.7943382 ], [ 92.3853267, 10.7941888 ], [ 92.3861373, 10.7935185 ], [ 92.387015, 10.7907681 ], [ 92.3869668, 10.7897779 ], [ 92.3871723, 10.7888604 ], [ 92.3871173, 10.7883205 ], [ 92.3865045, 10.7871479 ], [ 92.3864185, 10.7868948 ], [ 92.38644, 10.7862506 ], [ 92.386354, 10.7859971 ], [ 92.3860315, 10.7857331 ], [ 92.3859347, 10.7853529 ], [ 92.3860462, 10.7850061 ], [ 92.3862745, 10.7846518 ], [ 92.387294, 10.7839039 ], [ 92.3893101, 10.7831068 ], [ 92.3927912, 10.7824078 ], [ 92.3959999, 10.7820613 ], [ 92.3968814, 10.7815218 ], [ 92.3983174, 10.7825228 ], [ 92.4022892, 10.7833458 ], [ 92.404509, 10.7839432 ], [ 92.4068639, 10.7850761 ], [ 92.4099977, 10.7871441 ], [ 92.4138449, 10.7906141 ], [ 92.4172994, 10.7945492 ], [ 92.4193331, 10.7975861 ], [ 92.4214155, 10.8011792 ], [ 92.42326, 10.80715 ], [ 92.4242718, 10.8106151 ], [ 92.4260361, 10.8144966 ], [ 92.426646, 10.8169788 ], [ 92.4267186, 10.8187885 ], [ 92.426109, 10.8206624 ], [ 92.4243654, 10.8231912 ], [ 92.4242134, 10.8245352 ], [ 92.4259466, 10.8255507 ], [ 92.4270717, 10.8257598 ], [ 92.4291424, 10.8239543 ], [ 92.429792, 10.8229869 ], [ 92.4318537, 10.8220454 ], [ 92.434361, 10.8224255 ], [ 92.4368327, 10.8250131 ], [ 92.4375469, 10.8264603 ], [ 92.4414961, 10.8313946 ], [ 92.4436959, 10.8345988 ], [ 92.4444363, 10.8349169 ], [ 92.44505, 10.83688 ], [ 92.44464, 10.83736 ], [ 92.44524, 10.83879 ], [ 92.44598, 10.83904 ], [ 92.44619, 10.83903 ], [ 92.44697, 10.83861 ], [ 92.44789, 10.83804 ], [ 92.44919, 10.83805 ], [ 92.45206, 10.83821 ], [ 92.45427, 10.83829 ], [ 92.45579, 10.83908 ], [ 92.45697, 10.84049 ], [ 92.45814, 10.84294 ], [ 92.45946, 10.84665 ], [ 92.45951, 10.85006 ], [ 92.45928, 10.85299 ], [ 92.45823, 10.85556 ], [ 92.4569, 10.85739 ], [ 92.45619, 10.85753 ], [ 92.45557, 10.85752 ], [ 92.45498, 10.85805 ], [ 92.45424, 10.85858 ], [ 92.4538, 10.8592 ], [ 92.45363, 10.85935 ], [ 92.4532733, 10.860974 ], [ 92.4529365, 10.8634632 ], [ 92.45323, 10.86446 ], [ 92.45373, 10.86597 ], [ 92.45428, 10.86623 ], [ 92.45439, 10.86623 ], [ 92.45542, 10.86583 ], [ 92.45571, 10.86581 ], [ 92.45661, 10.8656 ], [ 92.45693, 10.86558 ], [ 92.45756, 10.86574 ], [ 92.45817, 10.86649 ], [ 92.45907, 10.86727 ], [ 92.46005, 10.86804 ], [ 92.46049, 10.8681 ], [ 92.46072, 10.86773 ], [ 92.46053, 10.86664 ], [ 92.45983, 10.86553 ], [ 92.45954, 10.86483 ], [ 92.4597, 10.86429 ], [ 92.46062, 10.86383 ], [ 92.46195, 10.86363 ], [ 92.46289, 10.86411 ], [ 92.46363, 10.86523 ], [ 92.4647, 10.86591 ], [ 92.46604, 10.86707 ], [ 92.46678, 10.86749 ], [ 92.46741, 10.86755 ], [ 92.4682, 10.86751 ], [ 92.46895, 10.86764 ], [ 92.46945, 10.86837 ], [ 92.46987, 10.87031 ], [ 92.46959, 10.87097 ], [ 92.46917, 10.87123 ], [ 92.46884, 10.87133 ], [ 92.4681, 10.87133 ], [ 92.46765, 10.87157 ], [ 92.46704, 10.87224 ], [ 92.46684, 10.8726 ], [ 92.46673, 10.87314 ], [ 92.46624, 10.87322 ], [ 92.46567, 10.8734 ], [ 92.46559, 10.87397 ], [ 92.46589, 10.87471 ], [ 92.4676, 10.87553 ], [ 92.47024, 10.87622 ], [ 92.47137, 10.87617 ], [ 92.47135, 10.87574 ], [ 92.47093, 10.87495 ], [ 92.47037, 10.87417 ], [ 92.46993, 10.87349 ], [ 92.46998, 10.87268 ], [ 92.47041, 10.87196 ], [ 92.47184, 10.87133 ], [ 92.47318, 10.8713 ], [ 92.4742, 10.87144 ], [ 92.47431, 10.87149 ], [ 92.47485, 10.87193 ], [ 92.47487, 10.87222 ], [ 92.47446, 10.87289 ], [ 92.4741, 10.87336 ], [ 92.47385, 10.87391 ], [ 92.47417, 10.87444 ], [ 92.47437, 10.87453 ], [ 92.47487, 10.8747 ], [ 92.47546, 10.87449 ], [ 92.4759, 10.87439 ], [ 92.47627, 10.87418 ], [ 92.47609, 10.87376 ], [ 92.47583, 10.87355 ], [ 92.47571, 10.8727 ], [ 92.47584, 10.87186 ], [ 92.47625, 10.87125 ], [ 92.47746, 10.87122 ], [ 92.4794, 10.87162 ], [ 92.48002, 10.87197 ], [ 92.48021, 10.8725 ], [ 92.48024, 10.87382 ], [ 92.48061, 10.87464 ], [ 92.48118, 10.87515 ], [ 92.48188, 10.87555 ], [ 92.48208, 10.87616 ], [ 92.4820912, 10.8768114 ], [ 92.4822478, 10.8771925 ], [ 92.4822386, 10.877386 ], [ 92.4821578, 10.8776103 ], [ 92.4820483, 10.8777411 ], [ 92.4819627, 10.8781476 ], [ 92.481839, 10.8788858 ], [ 92.4817867, 10.879353 ], [ 92.4817071, 10.8797302 ], [ 92.4815631, 10.8801846 ], [ 92.4814394, 10.8803482 ], [ 92.4813004, 10.8804156 ], [ 92.481192, 10.8806845 ], [ 92.48125, 10.88096 ], [ 92.4814013, 10.8813199 ], [ 92.4817138, 10.8816013 ], [ 92.481996, 10.8818432 ], [ 92.4822867, 10.8820397 ], [ 92.4825089, 10.8821089 ], [ 92.4826811, 10.8821282 ], [ 92.4828476, 10.8821422 ], [ 92.4830968, 10.8821404 ], [ 92.4831997, 10.8820441 ], [ 92.4832749, 10.8819325 ], [ 92.483704, 10.8818152 ], [ 92.4839086, 10.8817638 ], [ 92.4842652, 10.8818107 ], [ 92.484714, 10.8819293 ], [ 92.4851587, 10.8819079 ], [ 92.4853168, 10.8818432 ], [ 92.4854365, 10.8816746 ], [ 92.4855063, 10.8813707 ], [ 92.4854215, 10.8812779 ], [ 92.4852692, 10.8812499 ], [ 92.4849267, 10.8811751 ], [ 92.4845937, 10.8811144 ], [ 92.4842606, 10.8809555 ], [ 92.4842226, 10.880792 ], [ 92.4839942, 10.8805724 ], [ 92.4837991, 10.880493 ], [ 92.483842, 10.8803435 ], [ 92.4840751, 10.8802734 ], [ 92.4841131, 10.8804463 ], [ 92.4842749, 10.8806378 ], [ 92.4844176, 10.8807873 ], [ 92.4847435, 10.8806961 ], [ 92.4848268, 10.8805117 ], [ 92.48484, 10.88032 ], [ 92.4846983, 10.8801706 ], [ 92.4846793, 10.8799604 ], [ 92.4847221, 10.8797922 ], [ 92.4847887, 10.8796193 ], [ 92.4848981, 10.8795632 ], [ 92.4848886, 10.8798062 ], [ 92.4849829, 10.8799754 ], [ 92.4851503, 10.8800491 ], [ 92.4853263, 10.8799417 ], [ 92.485547, 10.8799677 ], [ 92.4858354, 10.8799884 ], [ 92.4860467, 10.880079 ], [ 92.4861066, 10.8803248 ], [ 92.4862826, 10.8804136 ], [ 92.4865123, 10.8804848 ], [ 92.4868392, 10.8806752 ], [ 92.4870962, 10.8808995 ], [ 92.4875447, 10.8814466 ], [ 92.4878764, 10.8819647 ], [ 92.4880096, 10.8822544 ], [ 92.48807, 10.8825 ], [ 92.4880191, 10.8828057 ], [ 92.4880186, 10.883118 ], [ 92.4878966, 10.8833192 ], [ 92.4877717, 10.8834037 ], [ 92.4874006, 10.8834457 ], [ 92.487177, 10.8834317 ], [ 92.4869582, 10.8833056 ], [ 92.4869365, 10.8831809 ], [ 92.4867251, 10.8832682 ], [ 92.4866156, 10.8830299 ], [ 92.4862779, 10.8832729 ], [ 92.4862779, 10.8835345 ], [ 92.48618, 10.88377 ], [ 92.4861256, 10.883983 ], [ 92.4861319, 10.8842093 ], [ 92.4862636, 10.8848613 ], [ 92.4865, 10.8855 ], [ 92.486825, 10.8861835 ], [ 92.4871327, 10.886972 ], [ 92.487491, 10.8878421 ], [ 92.4878552, 10.8884717 ], [ 92.4883664, 10.8890334 ], [ 92.4888885, 10.8895945 ], [ 92.4894559, 10.8899304 ], [ 92.4899602, 10.8901313 ], [ 92.4903685, 10.8904618 ], [ 92.4908975, 10.8909629 ], [ 92.4916826, 10.8915711 ], [ 92.4925055, 10.8920795 ], [ 92.4933857, 10.8924392 ], [ 92.4942257, 10.8928861 ], [ 92.4949747, 10.8934577 ], [ 92.4953323, 10.8938846 ], [ 92.4957455, 10.8943594 ], [ 92.4962593, 10.8947798 ], [ 92.4967446, 10.8953872 ], [ 92.4972064, 10.8957571 ], [ 92.4974427, 10.8958331 ], [ 92.4977532, 10.8957843 ], [ 92.4979302, 10.8956599 ], [ 92.4983734, 10.8952053 ], [ 92.4986857, 10.8947845 ], [ 92.4986952, 10.8945883 ], [ 92.4987951, 10.8944014 ], [ 92.4989711, 10.8942258 ], [ 92.4992756, 10.8940837 ], [ 92.4999405, 10.8939952 ], [ 92.5006791, 10.8938782 ], [ 92.5010883, 10.8937333 ], [ 92.5015578, 10.8937011 ], [ 92.5017701, 10.8936279 ], [ 92.5017781, 10.8935138 ], [ 92.5021207, 10.8934811 ], [ 92.50233, 10.8933269 ], [ 92.5025349, 10.8931417 ], [ 92.5029342, 10.8929018 ], [ 92.5032482, 10.892799 ], [ 92.5034052, 10.8926448 ], [ 92.5034242, 10.892528 ], [ 92.5035194, 10.8922197 ], [ 92.5035194, 10.8917805 ], [ 92.5037049, 10.8915983 ], [ 92.5037443, 10.8914128 ], [ 92.5039445, 10.8909991 ], [ 92.5041807, 10.8907106 ], [ 92.5042253, 10.8901754 ], [ 92.5042567, 10.8899084 ], [ 92.5044171, 10.8897321 ], [ 92.5047225, 10.8897039 ], [ 92.5050682, 10.8895454 ], [ 92.5053617, 10.8892823 ], [ 92.5068057, 10.8893687 ], [ 92.50692, 10.8896528 ], [ 92.5069402, 10.8902541 ], [ 92.5069523, 10.890522 ], [ 92.5073103, 10.8906968 ], [ 92.5075949, 10.8910873 ], [ 92.5079121, 10.8918546 ], [ 92.5081042, 10.8925732 ], [ 92.5082455, 10.8933924 ], [ 92.5083868, 10.8938351 ], [ 92.5083935, 10.8942249 ], [ 92.508184, 10.8942934 ], [ 92.5085551, 10.8946597 ], [ 92.509623, 10.8951384 ], [ 92.5100534, 10.8951358 ], [ 92.5105624, 10.8956665 ], [ 92.5112063, 10.896051 ], [ 92.5120736, 10.8964909 ], [ 92.5125842, 10.8967492 ], [ 92.5131922, 10.8970569 ], [ 92.5138443, 10.8972794 ], [ 92.5142561, 10.8973656 ], [ 92.5148437, 10.8974477 ], [ 92.5155281, 10.8974494 ], [ 92.5162069, 10.8975851 ], [ 92.5166246, 10.8976385 ], [ 92.5170018, 10.8977003 ], [ 92.5173203, 10.8976687 ], [ 92.5175322, 10.8975507 ], [ 92.5176991, 10.8975652 ], [ 92.5179574, 10.8974683 ], [ 92.5181701, 10.8974981 ], [ 92.518571, 10.8973239 ], [ 92.5191466, 10.8972772 ], [ 92.5196557, 10.8973006 ], [ 92.5201505, 10.8973847 ], [ 92.5203884, 10.897394 ], [ 92.5205228, 10.8973309 ], [ 92.5207821, 10.8971665 ], [ 92.5211046, 10.8968673 ], [ 92.5214684, 10.8965157 ], [ 92.521882, 10.8962335 ], [ 92.5223104, 10.8960111 ], [ 92.5227529, 10.8958383 ], [ 92.5230423, 10.8957927 ], [ 92.5231514, 10.8956425 ], [ 92.5230489, 10.8952206 ], [ 92.5231345, 10.8947581 ], [ 92.5233676, 10.8943844 ], [ 92.5237087, 10.8940309 ], [ 92.5241438, 10.8936903 ], [ 92.524362, 10.8935014 ], [ 92.5251041, 10.8932491 ], [ 92.5255799, 10.8929314 ], [ 92.5260289, 10.8925204 ], [ 92.5266504, 10.8920998 ], [ 92.5272254, 10.8917063 ], [ 92.5280734, 10.8912539 ], [ 92.5284803, 10.8908787 ], [ 92.5287739, 10.8903993 ], [ 92.5289056, 10.8899328 ], [ 92.52912, 10.88949 ], [ 92.5293205, 10.8889304 ], [ 92.52975, 10.88828 ], [ 92.5307102, 10.8873153 ], [ 92.5313488, 10.8870356 ], [ 92.5320017, 10.8868515 ], [ 92.5322818, 10.8868139 ], [ 92.5324675, 10.8867086 ], [ 92.5325273, 10.8864933 ], [ 92.5323932, 10.8862751 ], [ 92.5321416, 10.8861576 ], [ 92.5317785, 10.8860441 ], [ 92.5313948, 10.8858497 ], [ 92.5317043, 10.8848854 ], [ 92.5318775, 10.8848692 ], [ 92.5320797, 10.884772 ], [ 92.5324015, 10.884614 ], [ 92.5329296, 10.8845289 ], [ 92.5336351, 10.8843912 ], [ 92.5340394, 10.884375 ], [ 92.5344478, 10.8842858 ], [ 92.534815, 10.8841481 ], [ 92.5351863, 10.8839617 ], [ 92.5355989, 10.8835809 ], [ 92.5359619, 10.8833986 ], [ 92.5362301, 10.8832 ], [ 92.5365522, 10.8830119 ], [ 92.5368943, 10.8827827 ], [ 92.5373151, 10.8825032 ], [ 92.5376575, 10.8822763 ], [ 92.5379381, 10.8819846 ], [ 92.5382475, 10.8817739 ], [ 92.5384909, 10.8815025 ], [ 92.5389207, 10.8811087 ], [ 92.5394027, 10.8806679 ], [ 92.5398441, 10.8801736 ], [ 92.5402649, 10.8796631 ], [ 92.5407146, 10.8791769 ], [ 92.541448, 10.8784075 ], [ 92.5424515, 10.877297 ], [ 92.5430209, 10.8767825 ], [ 92.5435439, 10.8762177 ], [ 92.5440069, 10.8758142 ], [ 92.5446422, 10.8752591 ], [ 92.5452748, 10.8744291 ], [ 92.5459142, 10.8735114 ], [ 92.5466536, 10.8726742 ], [ 92.5471304, 10.8722416 ], [ 92.5475103, 10.8718488 ], [ 92.5478102, 10.8715185 ], [ 92.5482214, 10.8713726 ], [ 92.5486134, 10.8712218 ], [ 92.5489204, 10.8710909 ], [ 92.5492154, 10.8712298 ], [ 92.5497003, 10.8712456 ], [ 92.5501419, 10.8711442 ], [ 92.5505754, 10.8708464 ], [ 92.5514661, 10.869956 ], [ 92.5518863, 10.8694917 ], [ 92.5522984, 10.8689997 ], [ 92.5526217, 10.8686782 ], [ 92.5529773, 10.8683886 ], [ 92.553252, 10.8681068 ], [ 92.5535187, 10.8676981 ], [ 92.5538864, 10.867341 ], [ 92.5544577, 10.8668025 ], [ 92.5549733, 10.8663648 ], [ 92.5554219, 10.8658529 ], [ 92.5558784, 10.8653013 ], [ 92.556327, 10.864718 ], [ 92.5567391, 10.8641585 ], [ 92.5572644, 10.8635989 ], [ 92.5577654, 10.8630553 ], [ 92.5583372, 10.8625671 ], [ 92.558719, 10.8618846 ], [ 92.5589009, 10.8615394 ], [ 92.5590523, 10.8611605 ], [ 92.559309, 10.8605037 ], [ 92.5596492, 10.8598875 ], [ 92.5597615, 10.8596783 ], [ 92.5599272, 10.8594878 ], [ 92.5599105, 10.8591505 ], [ 92.5598189, 10.8588835 ], [ 92.5594625, 10.8581981 ], [ 92.5592443, 10.8574362 ], [ 92.5591533, 10.8569511 ], [ 92.5591312, 10.856583 ], [ 92.5589089, 10.8561386 ], [ 92.5587225, 10.8557813 ], [ 92.5584941, 10.8555181 ], [ 92.5581432, 10.8551876 ], [ 92.5577869, 10.8549695 ], [ 92.5575796, 10.8546901 ], [ 92.557463, 10.854453 ], [ 92.5573533, 10.8540869 ], [ 92.5572534, 10.853654 ], [ 92.5572078, 10.8528686 ], [ 92.5571876, 10.8520749 ], [ 92.5570605, 10.851517 ], [ 92.5569169, 10.8509995 ], [ 92.5567245, 10.8506892 ], [ 92.5566058, 10.8504082 ], [ 92.5564037, 10.8500907 ], [ 92.556266, 10.8497367 ], [ 92.5561269, 10.8494332 ], [ 92.5560966, 10.8491859 ], [ 92.556133, 10.8488486 ], [ 92.556206, 10.8480098 ], [ 92.5563633, 10.847293 ], [ 92.5563916, 10.8468446 ], [ 92.5563525, 10.8465179 ], [ 92.5563148, 10.8460548 ], [ 92.5563754, 10.8456183 ], [ 92.55637, 10.84502 ], [ 92.5563593, 10.8448087 ], [ 92.5563997, 10.8445865 ], [ 92.5566906, 10.8441182 ], [ 92.55676, 10.84393 ], [ 92.5569088, 10.8437531 ], [ 92.5569977, 10.8434912 ], [ 92.5571432, 10.8429277 ], [ 92.5573727, 10.8425838 ], [ 92.5578058, 10.8420943 ], [ 92.5581401, 10.8414273 ], [ 92.55842, 10.8405783 ], [ 92.5583796, 10.8400783 ], [ 92.5584362, 10.8395941 ], [ 92.5586382, 10.8392052 ], [ 92.5590221, 10.8387013 ], [ 92.5596484, 10.8369431 ], [ 92.5604229, 10.8352988 ], [ 92.5606182, 10.834653 ], [ 92.5606867, 10.8337774 ], [ 92.5607439, 10.8332443 ], [ 92.5608696, 10.8327391 ], [ 92.5611271, 10.8319635 ], [ 92.561281, 10.8315268 ], [ 92.561481, 10.8311339 ], [ 92.5621086, 10.8301381 ], [ 92.5627325, 10.829119 ], [ 92.5634657, 10.8281554 ], [ 92.5635439, 10.8279123 ], [ 92.5635268, 10.8276317 ], [ 92.5633725, 10.8273511 ], [ 92.5631429, 10.8270993 ], [ 92.5622525, 10.8258918 ], [ 92.56167, 10.8248598 ], [ 92.5612582, 10.8238881 ], [ 92.5609186, 10.8228575 ], [ 92.5607667, 10.8215083 ], [ 92.5609786, 10.82036 ], [ 92.5611153, 10.8196729 ], [ 92.5613096, 10.819005 ], [ 92.5619398, 10.8177679 ], [ 92.562083, 10.8176785 ], [ 92.5621768, 10.8177004 ], [ 92.5623139, 10.8177172 ], [ 92.5624282, 10.8177004 ], [ 92.5624053, 10.8176414 ], [ 92.5623139, 10.8175923 ], [ 92.562151, 10.8175292 ], [ 92.562087, 10.8174722 ], [ 92.5621032, 10.817111 ], [ 92.5622203, 10.8164601 ], [ 92.5623092, 10.8157536 ], [ 92.5622284, 10.8154599 ], [ 92.5620628, 10.8152178 ], [ 92.5621476, 10.8149281 ], [ 92.5620547, 10.8145828 ], [ 92.5618086, 10.8139414 ], [ 92.5618883, 10.8134249 ], [ 92.5617626, 10.8131218 ], [ 92.5616997, 10.8127345 ], [ 92.5618026, 10.8117579 ], [ 92.562214, 10.8106858 ], [ 92.5629229, 10.8097423 ], [ 92.5638026, 10.8089009 ], [ 92.5647798, 10.8081038 ], [ 92.5649512, 10.807812 ], [ 92.5654712, 10.8073292 ], [ 92.5663757, 10.8065512 ], [ 92.5663684, 10.8063919 ], [ 92.5662484, 10.8062179 ], [ 92.5660312, 10.8062403 ], [ 92.5658312, 10.8062403 ], [ 92.5655969, 10.8061842 ], [ 92.5654484, 10.8059877 ], [ 92.5649798, 10.8058362 ], [ 92.5647283, 10.8059204 ], [ 92.5641683, 10.8057295 ], [ 92.5642001, 10.804965 ], [ 92.5642271, 10.804318 ], [ 92.5652255, 10.8035236 ], [ 92.5663284, 10.8029623 ], [ 92.5669569, 10.8028051 ], [ 92.5675912, 10.8027827 ], [ 92.56884, 10.8025261 ], [ 92.5694581, 10.8024361 ], [ 92.570081, 10.8024025 ], [ 92.5706753, 10.8025091 ], [ 92.5712706, 10.8025118 ], [ 92.571804, 10.8025356 ], [ 92.5722889, 10.8022261 ], [ 92.5726849, 10.8018688 ], [ 92.5731853, 10.8015727 ], [ 92.5735981, 10.8008686 ], [ 92.5737839, 10.8003288 ], [ 92.5738324, 10.7993763 ], [ 92.5739581, 10.7985792 ], [ 92.5743011, 10.7975902 ], [ 92.5747941, 10.7964867 ], [ 92.5754729, 10.7954468 ], [ 92.576475, 10.7944429 ], [ 92.5769393, 10.7940188 ], [ 92.577505, 10.7936371 ], [ 92.578425, 10.7927614 ], [ 92.5794364, 10.7920373 ], [ 92.5799964, 10.7917342 ], [ 92.5806232, 10.7914635 ], [ 92.581745, 10.7910999 ], [ 92.5820079, 10.7910718 ], [ 92.5827565, 10.7906396 ], [ 92.5832136, 10.790286 ], [ 92.5835108, 10.7901512 ], [ 92.5838708, 10.7899941 ], [ 92.5839336, 10.7900558 ], [ 92.5844022, 10.7897808 ], [ 92.5846593, 10.7896797 ], [ 92.5848879, 10.7896741 ], [ 92.5851222, 10.7895506 ], [ 92.5852879, 10.7895843 ], [ 92.5854594, 10.7895618 ], [ 92.5855926, 10.789643 ], [ 92.5861137, 10.7890958 ], [ 92.5863965, 10.7886592 ], [ 92.586598, 10.7884577 ], [ 92.5870837, 10.7875764 ], [ 92.5872471, 10.7870101 ], [ 92.587518, 10.786145 ], [ 92.587638, 10.7858531 ], [ 92.5875694, 10.785505 ], [ 92.587598, 10.7852693 ], [ 92.587518, 10.7847809 ], [ 92.587518, 10.7843767 ], [ 92.5876037, 10.7840512 ], [ 92.5876323, 10.7838098 ], [ 92.5875866, 10.7831305 ], [ 92.5876643, 10.7821499 ], [ 92.587798, 10.7816093 ], [ 92.5879294, 10.780728 ], [ 92.5879294, 10.7800151 ], [ 92.5878094, 10.7793022 ], [ 92.5876951, 10.7791001 ], [ 92.5876037, 10.7788755 ], [ 92.5876037, 10.7786847 ], [ 92.5874609, 10.7783422 ], [ 92.5872837, 10.7777697 ], [ 92.5872528, 10.7771518 ], [ 92.5872494, 10.7766413 ], [ 92.5871866, 10.7762484 ], [ 92.5872037, 10.7759509 ], [ 92.5870528, 10.7749176 ], [ 92.5869523, 10.7746036 ], [ 92.5869009, 10.774278 ], [ 92.5869326, 10.7737272 ], [ 92.5867888, 10.7728169 ], [ 92.5865989, 10.7719198 ], [ 92.5863161, 10.7709512 ], [ 92.58611, 10.7706654 ], [ 92.5858918, 10.7702645 ], [ 92.5859152, 10.7701438 ], [ 92.5859403, 10.7700144 ], [ 92.5861181, 10.7700263 ], [ 92.5862555, 10.7698795 ], [ 92.5862393, 10.7697127 ], [ 92.5860817, 10.7688791 ], [ 92.585609, 10.7673707 ], [ 92.5854594, 10.7670571 ], [ 92.5853908, 10.7667991 ], [ 92.5852938, 10.7665054 ], [ 92.5852372, 10.766164 ], [ 92.5851281, 10.7660251 ], [ 92.5850554, 10.7656996 ], [ 92.5849261, 10.7654812 ], [ 92.5849059, 10.7651994 ], [ 92.5846311, 10.7643698 ], [ 92.5838657, 10.7612991 ], [ 92.5836277, 10.7604168 ], [ 92.5834677, 10.7594625 ], [ 92.5833591, 10.7575706 ], [ 92.5833248, 10.7561839 ], [ 92.5833648, 10.7554654 ], [ 92.5834905, 10.7547917 ], [ 92.5835419, 10.754045 ], [ 92.5837186, 10.7536258 ], [ 92.5835477, 10.7527763 ], [ 92.5834448, 10.7518724 ], [ 92.5835248, 10.7510921 ], [ 92.583559, 10.7496967 ], [ 92.5831554, 10.7484732 ], [ 92.5828868, 10.7478849 ], [ 92.5827189, 10.7471151 ], [ 92.5826237, 10.7464003 ], [ 92.5826181, 10.745581 ], [ 92.5826797, 10.7448167 ], [ 92.582743, 10.7436129 ], [ 92.5827581, 10.7432001 ], [ 92.5828364, 10.7428427 ], [ 92.5829372, 10.7425513 ], [ 92.5831442, 10.7421994 ], [ 92.5832226, 10.7410832 ], [ 92.5833177, 10.7403024 ], [ 92.5834975, 10.7399704 ], [ 92.5840901, 10.7396095 ], [ 92.5846274, 10.7391752 ], [ 92.5850023, 10.7385923 ], [ 92.5853101, 10.7379325 ], [ 92.5858082, 10.7365193 ], [ 92.5861944, 10.7359419 ], [ 92.5864127, 10.7350621 ], [ 92.5867149, 10.7346387 ], [ 92.5872404, 10.7341875 ], [ 92.5878231, 10.7329176 ], [ 92.5881085, 10.7315649 ], [ 92.5882764, 10.7308171 ], [ 92.5883397, 10.7301043 ], [ 92.5883591, 10.729019 ], [ 92.5884211, 10.7279337 ], [ 92.5883048, 10.7267417 ], [ 92.5883319, 10.7264066 ], [ 92.5884388, 10.7259639 ], [ 92.5885102, 10.7252755 ], [ 92.5886614, 10.7246472 ], [ 92.5888978, 10.7238551 ], [ 92.5890063, 10.7232 ], [ 92.5889908, 10.7226974 ], [ 92.5889908, 10.7223775 ], [ 92.5890451, 10.7221413 ], [ 92.5889598, 10.7219662 ], [ 92.588925, 10.7217872 ], [ 92.5889405, 10.7216577 ], [ 92.5890141, 10.7215282 ], [ 92.5891837, 10.7212681 ], [ 92.5892385, 10.7207834 ], [ 92.589381, 10.7203795 ], [ 92.5894029, 10.7201425 ], [ 92.5895838, 10.7199378 ], [ 92.5897355, 10.7194627 ], [ 92.5898208, 10.7189867 ], [ 92.5898518, 10.7185031 ], [ 92.5898828, 10.7179585 ], [ 92.5899952, 10.7175357 ], [ 92.5901076, 10.7171739 ], [ 92.5902859, 10.7168426 ], [ 92.5904991, 10.7165608 ], [ 92.5907802, 10.7162875 ], [ 92.5911795, 10.71599 ], [ 92.591481, 10.7154891 ], [ 92.591618, 10.7151552 ], [ 92.5919524, 10.7144873 ], [ 92.5923086, 10.7132647 ], [ 92.5925495, 10.7119954 ], [ 92.5928897, 10.7111158 ], [ 92.5934214, 10.7103348 ], [ 92.593975, 10.7095754 ], [ 92.5946705, 10.7089171 ], [ 92.5957906, 10.7077136 ], [ 92.5962945, 10.7070662 ], [ 92.5967584, 10.7063599 ], [ 92.5971859, 10.7051277 ], [ 92.597383342249287, 10.70446515 ], [ 92.597430496802403, 10.704306915127395 ], [ 92.597442942958452, 10.70426515 ], [ 92.5975725, 10.7038304 ], [ 92.5976962, 10.7031739 ], [ 92.5977435, 10.7024941 ], [ 92.59782, 10.70083 ], [ 92.597911, 10.6996031 ], [ 92.5978518, 10.6984278 ], [ 92.597584, 10.6968288 ], [ 92.59721, 10.69524 ], [ 92.5968572, 10.6941149 ], [ 92.5964813, 10.693619 ], [ 92.596229, 10.6931079 ], [ 92.5964143, 10.6923793 ], [ 92.5967285, 10.6918328 ], [ 92.5968904, 10.6910772 ], [ 92.5968366, 10.6896923 ], [ 92.5968675, 10.6886701 ], [ 92.5969705, 10.6876935 ], [ 92.5969963, 10.6872684 ], [ 92.5968881, 10.686565 ], [ 92.5969087, 10.6861197 ], [ 92.5971656, 10.6851746 ], [ 92.5971868, 10.6838375 ], [ 92.5972177, 10.6820613 ], [ 92.597138, 10.6808212 ], [ 92.5968778, 10.6798297 ], [ 92.5966255, 10.6788075 ], [ 92.5962178, 10.6780494 ], [ 92.5956625, 10.6777195 ], [ 92.5950754, 10.6774108 ], [ 92.5945759, 10.6772235 ], [ 92.5940764, 10.6771173 ], [ 92.5929898, 10.6772235 ], [ 92.5919668, 10.6774127 ], [ 92.591477, 10.6777595 ], [ 92.5909963, 10.6779598 ], [ 92.5896536, 10.6782844 ], [ 92.5891975, 10.6790834 ], [ 92.5885797, 10.6796465 ], [ 92.5879085, 10.6797633 ], [ 92.587406, 10.6797633 ], [ 92.5869836, 10.6795557 ], [ 92.5864228, 10.6796488 ], [ 92.585862, 10.6795414 ], [ 92.5853231, 10.6794126 ], [ 92.5848008, 10.6791464 ], [ 92.5830728, 10.6780672 ], [ 92.5813604, 10.6770411 ], [ 92.5800432, 10.6762208 ], [ 92.5789071, 10.67509 ], [ 92.5776292, 10.6733669 ], [ 92.5765257, 10.6714044 ], [ 92.5762125, 10.6702092 ], [ 92.5762999, 10.6692144 ], [ 92.5763803, 10.6687351 ], [ 92.576532, 10.6679454 ], [ 92.5767071, 10.6678543 ], [ 92.5769079, 10.6680972 ], [ 92.5773817, 10.6677379 ], [ 92.5774143, 10.6673068 ], [ 92.5774361, 10.667018 ], [ 92.5776443, 10.6659819 ], [ 92.5773147, 10.6657288 ], [ 92.5768597, 10.6653275 ], [ 92.57687, 10.664786 ], [ 92.5770245, 10.6643811 ], [ 92.5773627, 10.6639246 ], [ 92.5777197, 10.6638295 ], [ 92.5777712, 10.6636423 ], [ 92.5776662, 10.662669 ], [ 92.5777052, 10.661472 ], [ 92.5779102, 10.6605755 ], [ 92.5786008, 10.6604378 ], [ 92.578832, 10.6599732 ], [ 92.5783685, 10.6594368 ], [ 92.5786312, 10.6588346 ], [ 92.5788938, 10.6587384 ], [ 92.5791571, 10.6587663 ], [ 92.579795, 10.6584196 ], [ 92.5801906, 10.6587367 ], [ 92.5807496, 10.6589371 ], [ 92.5809135, 10.6589124 ], [ 92.5810726, 10.6589809 ], [ 92.5811333, 10.6590775 ], [ 92.5812157, 10.6591518 ], [ 92.5816818, 10.6591804 ], [ 92.5821406, 10.6588083 ], [ 92.5821843, 10.6585148 ], [ 92.5825858, 10.6575652 ], [ 92.5826704, 10.6574597 ], [ 92.5826136, 10.6573815 ], [ 92.5825453, 10.6573641 ], [ 92.5823785, 10.6575044 ], [ 92.5823229, 10.6577043 ], [ 92.5821814, 10.6578807 ], [ 92.5820904, 10.6579552 ], [ 92.5819956, 10.6579838 ], [ 92.5818844, 10.6579775 ], [ 92.5817897, 10.6579353 ], [ 92.5815854, 10.6577662 ], [ 92.5814192, 10.6575607 ], [ 92.5812208, 10.6573692 ], [ 92.5811404, 10.6572604 ], [ 92.5811333, 10.6571286 ], [ 92.5810868, 10.6570566 ], [ 92.5810332, 10.6569881 ], [ 92.5809972, 10.6569769 ], [ 92.5807243, 10.6566789 ], [ 92.5805196, 10.6564727 ], [ 92.5805069, 10.656392 ], [ 92.5805088, 10.6563035 ], [ 92.5804741, 10.6562691 ], [ 92.5804387, 10.6562554 ], [ 92.5803136, 10.6563076 ], [ 92.5800457, 10.6560915 ], [ 92.5797639, 10.6557885 ], [ 92.5794911, 10.6554194 ], [ 92.5792354, 10.6550475 ], [ 92.5790265, 10.6547046 ], [ 92.5789836, 10.6545922 ], [ 92.5789228, 10.6544938 ], [ 92.5789443, 10.6543902 ], [ 92.5789961, 10.6543094 ], [ 92.5790926, 10.6541548 ], [ 92.5790777, 10.6539684 ], [ 92.5784498, 10.6539899 ], [ 92.5779613, 10.6541534 ], [ 92.5774084, 10.6537525 ], [ 92.57613, 10.653443 ], [ 92.5752345, 10.6533199 ], [ 92.5741555, 10.6532619 ], [ 92.5732859, 10.65313 ], [ 92.5722604, 10.6530911 ], [ 92.5713642, 10.6529559 ], [ 92.5705161, 10.6527396 ], [ 92.5698559, 10.6523756 ], [ 92.5692136, 10.6519297 ], [ 92.56729, 10.6507561 ], [ 92.565429, 10.6494749 ], [ 92.564182, 10.6484929 ], [ 92.5630977, 10.6474642 ], [ 92.5623462, 10.6470158 ], [ 92.561643, 10.6464355 ], [ 92.5597535, 10.6448423 ], [ 92.5579077, 10.6431921 ], [ 92.5550702, 10.6404261 ], [ 92.5543351, 10.6397341 ], [ 92.5536627, 10.6389962 ], [ 92.5523928, 10.637477 ], [ 92.5514268, 10.6363126 ], [ 92.5509402, 10.6356263 ], [ 92.5505566, 10.6353843 ], [ 92.5500529, 10.6346192 ], [ 92.5496808, 10.633809 ], [ 92.5483412, 10.6319861 ], [ 92.5471394, 10.6301051 ], [ 92.5465666, 10.6293755 ], [ 92.5461258, 10.6286047 ], [ 92.545685, 10.6277382 ], [ 92.5453244, 10.6271475 ], [ 92.5446146, 10.6257859 ], [ 92.5443398, 10.6254596 ], [ 92.5438818, 10.6245537 ], [ 92.5437215, 10.6243399 ], [ 92.5428365, 10.6222863 ], [ 92.5422732, 10.6209641 ], [ 92.5417695, 10.6195631 ], [ 92.5413001, 10.6181396 ], [ 92.5410938, 10.6176222 ], [ 92.5410425, 10.6169805 ], [ 92.5407562, 10.6158214 ], [ 92.5405845, 10.6154276 ], [ 92.540367, 10.6145329 ], [ 92.5401895, 10.6133682 ], [ 92.5402353, 10.6131038 ], [ 92.5399319, 10.6123892 ], [ 92.5398002, 10.612181 ], [ 92.5398741, 10.6115163 ], [ 92.5397716, 10.6103242 ], [ 92.5398002, 10.6090132 ], [ 92.5397945, 10.6082424 ], [ 92.5399204, 10.6069764 ], [ 92.5399815, 10.6055481 ], [ 92.5402238, 10.6035215 ], [ 92.5406875, 10.6014846 ], [ 92.5412829, 10.5994871 ], [ 92.5420306, 10.5975707 ], [ 92.5427083, 10.5961222 ], [ 92.5436414, 10.5945242 ], [ 92.5443884, 10.5933439 ], [ 92.5450382, 10.5926335 ], [ 92.5451813, 10.5923465 ], [ 92.5453072, 10.5920596 ], [ 92.5460638, 10.591924 ], [ 92.547431, 10.5916826 ], [ 92.5489022, 10.5912774 ], [ 92.5499874, 10.5908736 ], [ 92.5521022, 10.5903039 ], [ 92.5538974, 10.5895085 ], [ 92.5557026, 10.5887779 ], [ 92.5577048, 10.588031 ], [ 92.5581727, 10.5878758 ], [ 92.5585925, 10.5878772 ], [ 92.5586197, 10.5881479 ], [ 92.5586541, 10.588334 ], [ 92.5587101, 10.5883918 ], [ 92.5587804, 10.5883932 ], [ 92.5588277, 10.5883072 ], [ 92.5587933, 10.5879322 ], [ 92.558908, 10.5879252 ], [ 92.5589496, 10.5883002 ], [ 92.5590012, 10.5883397 ], [ 92.5590328, 10.5883481 ], [ 92.5590658, 10.5883453 ], [ 92.5590902, 10.5883256 ], [ 92.5590916, 10.5883002 ], [ 92.5593756, 10.5882889 ], [ 92.5593469, 10.5879646 ], [ 92.5597955, 10.5878452 ], [ 92.5603193, 10.5878321 ], [ 92.5607728, 10.5879016 ], [ 92.5613644, 10.5880896 ], [ 92.5618185, 10.5884655 ], [ 92.5619038, 10.5884334 ], [ 92.5619909, 10.5884006 ], [ 92.5620994, 10.5883598 ], [ 92.5621591, 10.5880485 ], [ 92.5623802, 10.5876726 ], [ 92.5626969, 10.5873672 ], [ 92.5633137, 10.5867119 ], [ 92.5639816, 10.5861807 ], [ 92.564212, 10.5858324 ], [ 92.5646509, 10.5855181 ], [ 92.5655245, 10.5845182 ], [ 92.5668547, 10.5834754 ], [ 92.5670481, 10.5829882 ], [ 92.5675262, 10.5828995 ], [ 92.5678883, 10.5823584 ], [ 92.5681603, 10.5820553 ], [ 92.5683839, 10.581984 ], [ 92.5686015, 10.5815028 ], [ 92.5688554, 10.5811998 ], [ 92.569073, 10.5811225 ], [ 92.5690307, 10.5810809 ], [ 92.5691637, 10.5807601 ], [ 92.569212, 10.5802075 ], [ 92.5691399, 10.5797144 ], [ 92.5689944, 10.5792034 ], [ 92.5689582, 10.5789122 ], [ 92.5688131, 10.5784309 ], [ 92.5686257, 10.5778249 ], [ 92.5684308, 10.577224 ], [ 92.5682631, 10.5767851 ], [ 92.5679729, 10.576078 ], [ 92.5677855, 10.5757869 ], [ 92.5676163, 10.5754541 ], [ 92.5674652, 10.5753175 ], [ 92.5670904, 10.5751511 ], [ 92.5669031, 10.574955 ], [ 92.5667036, 10.5747292 ], [ 92.5664256, 10.574551 ], [ 92.5661415, 10.5743727 ], [ 92.5657425, 10.57404 ], [ 92.5656047, 10.5738311 ], [ 92.5654947, 10.5735884 ], [ 92.5654645, 10.573321 ], [ 92.5652046, 10.5731369 ], [ 92.5649568, 10.5728041 ], [ 92.5649265, 10.5724654 ], [ 92.5647573, 10.5723525 ], [ 92.5646183, 10.5721802 ], [ 92.5645639, 10.5719782 ], [ 92.564171, 10.5717465 ], [ 92.5639473, 10.5715266 ], [ 92.5637056, 10.5712414 ], [ 92.563494, 10.5708077 ], [ 92.5631555, 10.5704987 ], [ 92.5629924, 10.5701117 ], [ 92.5626478, 10.5696668 ], [ 92.5623033, 10.5692984 ], [ 92.5622247, 10.5689895 ], [ 92.5618499, 10.5685973 ], [ 92.5615658, 10.5682824 ], [ 92.5614873, 10.5680209 ], [ 92.5613241, 10.5677417 ], [ 92.5611548, 10.5675991 ], [ 92.5610581, 10.5673792 ], [ 92.5608163, 10.5671891 ], [ 92.5605081, 10.5669573 ], [ 92.5603388, 10.5667434 ], [ 92.5602905, 10.5664879 ], [ 92.5600306, 10.5660066 ], [ 92.5599278, 10.565561 ], [ 92.55968, 10.5652698 ], [ 92.5595772, 10.5650143 ], [ 92.5593596, 10.5648123 ], [ 92.5591179, 10.5643369 ], [ 92.5589063, 10.5638556 ], [ 92.5589184, 10.5637249 ], [ 92.5588792, 10.5635107 ], [ 92.5586659, 10.563298 ], [ 92.5584807, 10.5630127 ], [ 92.5576038, 10.5620414 ], [ 92.5572332, 10.5618289 ], [ 92.5569912, 10.5612507 ], [ 92.5563254, 10.5606755 ], [ 92.5562266, 10.5604023 ], [ 92.5560229, 10.5604084 ], [ 92.5557326, 10.5602445 ], [ 92.5554979, 10.560202 ], [ 92.5549545, 10.5597588 ], [ 92.5545902, 10.5590364 ], [ 92.5544234, 10.5587814 ], [ 92.5540776, 10.5583625 ], [ 92.5539034, 10.557945 ], [ 92.5538738, 10.5575004 ], [ 92.5540159, 10.5571119 ], [ 92.5536515, 10.5567598 ], [ 92.553281, 10.556602 ], [ 92.5527314, 10.5564866 ], [ 92.552262, 10.5563409 ], [ 92.5517468, 10.55591 ], [ 92.5510146, 10.555576 ], [ 92.5501974, 10.5552032 ], [ 92.5501562, 10.5551267 ], [ 92.5499277, 10.5551449 ], [ 92.5492732, 10.5550235 ], [ 92.5491867, 10.5549021 ], [ 92.5486062, 10.5546957 ], [ 92.5479702, 10.5544164 ], [ 92.5473094, 10.5540583 ], [ 92.5469686, 10.5537 ], [ 92.5461052, 10.5526802 ], [ 92.5454952, 10.5514035 ], [ 92.5452697, 10.5510544 ], [ 92.5450601, 10.5506037 ], [ 92.5450121, 10.5503762 ], [ 92.5446104, 10.550037 ], [ 92.5444575, 10.5498439 ], [ 92.544549, 10.5496456 ], [ 92.5443658, 10.5488179 ], [ 92.5442749, 10.5481236 ], [ 92.5443182, 10.5475165 ], [ 92.5442811, 10.5471219 ], [ 92.544312, 10.5468305 ], [ 92.544065, 10.5463873 ], [ 92.5439847, 10.5459138 ], [ 92.544065, 10.5453917 ], [ 92.5440933, 10.544996 ], [ 92.5440279, 10.5443717 ], [ 92.543713, 10.5434732 ], [ 92.5433363, 10.5425322 ], [ 92.5430954, 10.5419554 ], [ 92.542948, 10.5414167 ], [ 92.5425643, 10.5409172 ], [ 92.5423853, 10.5405165 ], [ 92.5422494, 10.5401462 ], [ 92.5420888, 10.5393084 ], [ 92.5417183, 10.5385313 ], [ 92.5414836, 10.5381245 ], [ 92.5412922, 10.5376934 ], [ 92.5409649, 10.5367402 ], [ 92.5407146, 10.5363832 ], [ 92.5404153, 10.5361635 ], [ 92.5399275, 10.5360785 ], [ 92.5393717, 10.5360056 ], [ 92.5387603, 10.5357203 ], [ 92.5382045, 10.5352831 ], [ 92.5378402, 10.5349431 ], [ 92.5376179, 10.5346578 ], [ 92.5374264, 10.5343482 ], [ 92.5371485, 10.5340749 ], [ 92.536883, 10.5337835 ], [ 92.5366776, 10.5334246 ], [ 92.5365186, 10.5331096 ], [ 92.5364445, 10.5328121 ], [ 92.5363643, 10.5319925 ], [ 92.5362407, 10.5317071 ], [ 92.5360293, 10.5313729 ], [ 92.5356047, 10.5309361 ], [ 92.5352712, 10.5307236 ], [ 92.5349254, 10.5304625 ], [ 92.5345796, 10.5303229 ], [ 92.5341118, 10.5297475 ], [ 92.5335915, 10.5286775 ], [ 92.5333538, 10.5275657 ], [ 92.5333013, 10.5272507 ], [ 92.5334556, 10.5269229 ], [ 92.5336286, 10.5266496 ], [ 92.5338817, 10.5264189 ], [ 92.5341226, 10.5260607 ], [ 92.5342912, 10.5256682 ], [ 92.5341782, 10.5250164 ], [ 92.5341782, 10.5245611 ], [ 92.5340979, 10.5240086 ], [ 92.533962, 10.5233285 ], [ 92.5338323, 10.5230189 ], [ 92.5336656, 10.5228003 ], [ 92.5334815, 10.522625 ], [ 92.5330542, 10.5221507 ], [ 92.5327208, 10.5216042 ], [ 92.5324367, 10.5210214 ], [ 92.5322453, 10.5204263 ], [ 92.5317795, 10.5194689 ], [ 92.5314512, 10.5188895 ], [ 92.53106, 10.5183995 ], [ 92.5306247, 10.5180831 ], [ 92.5301575, 10.5178229 ], [ 92.5287799, 10.5171916 ], [ 92.5283218, 10.517103 ], [ 92.5281199, 10.517103 ], [ 92.5278928, 10.5171774 ], [ 92.527508, 10.5171712 ], [ 92.5271042, 10.5173387 ], [ 92.5266499, 10.5174131 ], [ 92.5259638, 10.5172693 ], [ 92.5255963, 10.5172457 ], [ 92.5251546, 10.5173635 ], [ 92.5246814, 10.5174193 ], [ 92.5242524, 10.5173759 ], [ 92.5238702, 10.517136 ], [ 92.523571, 10.5168238 ], [ 92.5233565, 10.5164579 ], [ 92.5232177, 10.5163586 ], [ 92.5229969, 10.5158127 ], [ 92.5229163, 10.5152518 ], [ 92.5228581, 10.5151676 ], [ 92.5226499, 10.5151552 ], [ 92.5223849, 10.5152482 ], [ 92.5219117, 10.5151117 ], [ 92.5215079, 10.5148884 ], [ 92.5211294, 10.514752 ], [ 92.5200379, 10.5143798 ], [ 92.5193959, 10.5141106 ], [ 92.5187949, 10.5138153 ], [ 92.5177981, 10.5135609 ], [ 92.5164101, 10.5132384 ], [ 92.5160568, 10.5131205 ], [ 92.5157476, 10.5129468 ], [ 92.5152807, 10.5125808 ], [ 92.5148328, 10.5125002 ], [ 92.5132628, 10.5119934 ], [ 92.5125867, 10.5119357 ], [ 92.5119217, 10.5119403 ], [ 92.5109084, 10.5120163 ], [ 92.5100125, 10.512252 ], [ 92.5090446, 10.5123726 ], [ 92.5085993, 10.5123327 ], [ 92.5072554, 10.5119729 ], [ 92.5069589, 10.5118426 ], [ 92.5063906, 10.511493 ], [ 92.5059721, 10.5113025 ], [ 92.5052617, 10.5111106 ], [ 92.5036402, 10.5110858 ], [ 92.5026308, 10.51103 ], [ 92.5007569, 10.511092 ], [ 92.4998989, 10.5111292 ], [ 92.498962, 10.5111368 ], [ 92.4981769, 10.5113882 ], [ 92.49771, 10.5114999 ], [ 92.4970728, 10.5122195 ], [ 92.4965088, 10.5129767 ], [ 92.4955334, 10.5138757 ], [ 92.4944671, 10.5143596 ], [ 92.4940759, 10.5148435 ], [ 92.4937668, 10.5150606 ], [ 92.4931738, 10.515613 ], [ 92.4925554, 10.5159476 ], [ 92.4920444, 10.5159538 ], [ 92.4911106, 10.5158608 ], [ 92.4903472, 10.5156127 ], [ 92.4899109, 10.5155541 ], [ 92.4892872, 10.5157864 ], [ 92.4887699, 10.5160593 ], [ 92.4883787, 10.5160903 ], [ 92.4879812, 10.5162206 ], [ 92.4873314, 10.516264 ], [ 92.4869718, 10.5164253 ], [ 92.4854725, 10.5169207 ], [ 92.4842399, 10.5173185 ], [ 92.4836594, 10.5174364 ], [ 92.4830979, 10.5176349 ], [ 92.4819899, 10.5180844 ], [ 92.4814071, 10.5183049 ], [ 92.4809023, 10.5184103 ], [ 92.4803913, 10.5184847 ], [ 92.4802777, 10.5187825 ], [ 92.4802335, 10.5192105 ], [ 92.4800884, 10.519775 ], [ 92.4798992, 10.5202402 ], [ 92.4796424, 10.5206273 ], [ 92.4753, 10.52274 ], [ 92.47104, 10.52585 ], [ 92.46787, 10.5295 ], [ 92.46414, 10.53399 ], [ 92.45909, 10.53807 ], [ 92.45433, 10.54061 ], [ 92.44901, 10.54248 ], [ 92.44082, 10.54553 ], [ 92.43389, 10.54758 ], [ 92.42736, 10.54798 ], [ 92.4221367, 10.5475706 ], [ 92.419111, 10.5466898 ], [ 92.4181954, 10.545432 ], [ 92.4160181, 10.5418549 ], [ 92.4124394, 10.5369701 ], [ 92.4071173, 10.5326014 ], [ 92.4033592, 10.5310444 ], [ 92.3997841, 10.5301281 ], [ 92.3946701, 10.5298091 ], [ 92.3926211, 10.5297202 ], [ 92.3905682, 10.5299025 ], [ 92.3848038, 10.5307703 ], [ 92.3849641, 10.5319178 ], [ 92.3840849, 10.5323802 ], [ 92.3822492, 10.5327292 ], [ 92.3822661, 10.5348324 ], [ 92.3828961, 10.5353899 ], [ 92.3826724, 10.5359643 ], [ 92.3819024, 10.5361607 ], [ 92.3806588, 10.5368065 ], [ 92.3802216, 10.5380397 ], [ 92.3802289, 10.5393961 ], [ 92.3811475, 10.5411843 ], [ 92.3818824, 10.5423763 ], [ 92.3812146, 10.5428245 ], [ 92.3828447, 10.545281 ], [ 92.3844924, 10.5470558 ], [ 92.3872243, 10.54956 ], [ 92.3887421, 10.5515122 ], [ 92.3898812, 10.5522708 ], [ 92.3913509, 10.5536796 ], [ 92.3930342, 10.5536575 ], [ 92.3931958, 10.5544812 ], [ 92.3926737, 10.5546368 ], [ 92.3914244, 10.5548897 ], [ 92.3908182, 10.5553412 ], [ 92.3906161, 10.5562623 ], [ 92.390904, 10.5582728 ], [ 92.3921005, 10.5603946 ] ] ], [ [ [ 73.6850006, 10.8074806 ], [ 73.6833806, 10.8068867 ], [ 73.6816789, 10.8064448 ], [ 73.6784712, 10.8056379 ], [ 73.6766327, 10.8053497 ], [ 73.6744812, 10.8052153 ], [ 73.671782, 10.8052153 ], [ 73.6695718, 10.8055227 ], [ 73.667792, 10.8058685 ], [ 73.6662077, 10.8063488 ], [ 73.6649755, 10.8068291 ], [ 73.6636259, 10.8074631 ], [ 73.6627457, 10.8080394 ], [ 73.6624328, 10.8084813 ], [ 73.6619244, 10.8093146 ], [ 73.6615094, 10.8097847 ], [ 73.6611942, 10.8105883 ], [ 73.6608738, 10.8113253 ], [ 73.6606094, 10.8122926 ], [ 73.6603747, 10.8133301 ], [ 73.6602564, 10.8145711 ], [ 73.6602865, 10.815403 ], [ 73.6604286, 10.8159309 ], [ 73.6605951, 10.8164932 ], [ 73.6608425, 10.8168412 ], [ 73.6614127, 10.8174425 ], [ 73.6617573, 10.8176885 ], [ 73.6623352, 10.8180907 ], [ 73.6629914, 10.8183033 ], [ 73.6638934, 10.8185381 ], [ 73.664473, 10.8187181 ], [ 73.6657148, 10.8188318 ], [ 73.6685651, 10.8187654 ], [ 73.6695736, 10.8184953 ], [ 73.67042, 10.8183377 ], [ 73.6764053, 10.81845 ], [ 73.6763523, 10.8181383 ], [ 73.6763534, 10.8177041 ], [ 73.6766423, 10.817535 ], [ 73.6772315, 10.8174734 ], [ 73.6777127, 10.817526 ], [ 73.6781166, 10.817813 ], [ 73.6783241, 10.8180575 ], [ 73.6792191, 10.8182789 ], [ 73.6800944, 10.8182884 ], [ 73.6805923, 10.8181798 ], [ 73.6811118, 10.817908 ], [ 73.6815512, 10.8177203 ], [ 73.6822243, 10.8176228 ], [ 73.6829397, 10.8176706 ], [ 73.6833907, 10.8180391 ], [ 73.6836513, 10.8180402 ], [ 73.6839131, 10.8177835 ], [ 73.6873123, 10.8175482 ], [ 73.6877011, 10.8175413 ], [ 73.689499, 10.8180575 ], [ 73.6899828, 10.8181957 ], [ 73.6920493, 10.8181941 ], [ 73.6942152, 10.8179217 ], [ 73.6964274, 10.8179477 ], [ 73.6978454, 10.8179285 ], [ 73.6989408, 10.8180149 ], [ 73.6994297, 10.8180053 ], [ 73.6996547, 10.818207 ], [ 73.6999676, 10.8183703 ], [ 73.7003303, 10.8184275 ], [ 73.7010238, 10.8180149 ], [ 73.7011998, 10.8177844 ], [ 73.7015226, 10.8173713 ], [ 73.7019431, 10.8171504 ], [ 73.7024023, 10.8168322 ], [ 73.7027352, 10.8163435 ], [ 73.7029504, 10.8156999 ], [ 73.7028479, 10.8151403 ], [ 73.7024209, 10.81459 ], [ 73.7019466, 10.8141243 ], [ 73.7010842, 10.8133537 ], [ 73.7002317, 10.8128374 ], [ 73.6992174, 10.8125142 ], [ 73.6975384, 10.8120882 ], [ 73.6962236, 10.8117257 ], [ 73.6948349, 10.811303 ], [ 73.6927225, 10.8105538 ], [ 73.6898473, 10.8095547 ], [ 73.6870699, 10.8083636 ], [ 73.6850006, 10.8074806 ] ] ], [ [ [ 78.89856, 9.17913 ], [ 78.89849, 9.17931 ], [ 78.89848, 9.17946 ], [ 78.89855, 9.17954 ], [ 78.89874, 9.17961 ], [ 78.899, 9.17966 ], [ 78.89965, 9.18006 ], [ 78.9003, 9.18052 ], [ 78.90144, 9.18164 ], [ 78.90194, 9.18207 ], [ 78.90262, 9.18243 ], [ 78.90349, 9.18268 ], [ 78.9043, 9.183 ], [ 78.90498, 9.18318 ], [ 78.90533, 9.18344 ], [ 78.90575, 9.18366 ], [ 78.9059, 9.18385 ], [ 78.90607, 9.18401 ], [ 78.90618, 9.18401 ], [ 78.90625, 9.18396 ], [ 78.90625, 9.18388 ], [ 78.90617, 9.18385 ], [ 78.90609, 9.18387 ], [ 78.90588, 9.18358 ], [ 78.90589, 9.18348 ], [ 78.90598, 9.18321 ], [ 78.90618, 9.18291 ], [ 78.90674, 9.18236 ], [ 78.90707, 9.18209 ], [ 78.90764, 9.18174 ], [ 78.90818, 9.18152 ], [ 78.9087, 9.18139 ], [ 78.90934, 9.18135 ], [ 78.90951, 9.18139 ], [ 78.90999, 9.18168 ], [ 78.91033, 9.18174 ], [ 78.91119, 9.18181 ], [ 78.91274, 9.18205 ], [ 78.91309, 9.18241 ], [ 78.91331, 9.18284 ], [ 78.91363, 9.18331 ], [ 78.91419, 9.18356 ], [ 78.9149, 9.18361 ], [ 78.91616, 9.18339 ], [ 78.91838, 9.18355 ], [ 78.91954, 9.18386 ], [ 78.9204, 9.18417 ], [ 78.92326, 9.18432 ], [ 78.92438, 9.18405 ], [ 78.92554, 9.18396 ], [ 78.92642, 9.18434 ], [ 78.92717, 9.1846 ], [ 78.92875, 9.18454 ], [ 78.92955, 9.1844 ], [ 78.93084, 9.18375 ], [ 78.93222, 9.18351 ], [ 78.93369, 9.18351 ], [ 78.93636, 9.18385 ], [ 78.93711, 9.18422 ], [ 78.93947, 9.18564 ], [ 78.94029, 9.18565 ], [ 78.94153, 9.18541 ], [ 78.94199, 9.18507 ], [ 78.94199, 9.18473 ], [ 78.93967, 9.18376 ], [ 78.93918, 9.18343 ], [ 78.93854, 9.18274 ], [ 78.9381, 9.18241 ], [ 78.93763, 9.18242 ], [ 78.93695, 9.18271 ], [ 78.93619, 9.18328 ], [ 78.93537, 9.18322 ], [ 78.93418, 9.18291 ], [ 78.93278, 9.18204 ], [ 78.93142, 9.18157 ], [ 78.93054, 9.18139 ], [ 78.92967, 9.18146 ], [ 78.92618, 9.18221 ], [ 78.92428, 9.18225 ], [ 78.9217, 9.18236 ], [ 78.91857, 9.18222 ], [ 78.91706, 9.18206 ], [ 78.91507, 9.18134 ], [ 78.91338, 9.18089 ], [ 78.91145, 9.18074 ], [ 78.91079, 9.18061 ], [ 78.91029, 9.18039 ], [ 78.90998, 9.18036 ], [ 78.90946, 9.18035 ], [ 78.90894, 9.18037 ], [ 78.90856, 9.18044 ], [ 78.90762, 9.18053 ], [ 78.90725, 9.18052 ], [ 78.90677, 9.18046 ], [ 78.90623, 9.18036 ], [ 78.90581, 9.18025 ], [ 78.9042, 9.17956 ], [ 78.90285, 9.17878 ], [ 78.90264, 9.17861 ], [ 78.90259, 9.17853 ], [ 78.90212, 9.17825 ], [ 78.90167, 9.1781 ], [ 78.90091, 9.17781 ], [ 78.90079, 9.17782 ], [ 78.89952, 9.17851 ], [ 78.89871, 9.17901 ], [ 78.89856, 9.17913 ] ] ], [ [ [ 92.77271, 9.12561 ], [ 92.77234, 9.12595 ], [ 92.77206, 9.12632 ], [ 92.7719292, 9.126641 ], [ 92.77184, 9.12686 ], [ 92.77055, 9.12736 ], [ 92.76966, 9.12761 ], [ 92.76916, 9.12787 ], [ 92.7688909, 9.1279142 ], [ 92.7687003, 9.1278327 ], [ 92.7682806, 9.1275992 ], [ 92.7680062, 9.1272947 ], [ 92.7677982, 9.1269374 ], [ 92.76799, 9.12641 ], [ 92.76788, 9.12594 ], [ 92.76749, 9.12593 ], [ 92.76708, 9.12604 ], [ 92.76708, 9.12675 ], [ 92.76689, 9.12723 ], [ 92.7665, 9.12721 ], [ 92.766, 9.12685 ], [ 92.76566, 9.12651 ], [ 92.76531, 9.12605 ], [ 92.76468, 9.12534 ], [ 92.76358, 9.12477 ], [ 92.76169, 9.1247 ], [ 92.76066, 9.1249 ], [ 92.7593, 9.12543 ], [ 92.75817, 9.1261 ], [ 92.75749, 9.12636 ], [ 92.7565, 9.12635 ], [ 92.755, 9.12629 ], [ 92.7533, 9.12578 ], [ 92.7519, 9.12563 ], [ 92.75024, 9.12529 ], [ 92.74889, 9.12514 ], [ 92.74743, 9.12476 ], [ 92.74606, 9.12482 ], [ 92.74472, 9.125 ], [ 92.74295, 9.12478 ], [ 92.74233, 9.12442 ], [ 92.74159, 9.12383 ], [ 92.74054, 9.12314 ], [ 92.73882, 9.12289 ], [ 92.73783, 9.12284 ], [ 92.73601, 9.12289 ], [ 92.73417, 9.12289 ], [ 92.73301, 9.12297 ], [ 92.73149, 9.12327 ], [ 92.73019, 9.12425 ], [ 92.72986, 9.12497 ], [ 92.73046, 9.1256 ], [ 92.73032, 9.12587 ], [ 92.72994, 9.12597 ], [ 92.72899, 9.12631 ], [ 92.72816, 9.127 ], [ 92.72705, 9.12897 ], [ 92.72646, 9.13061 ], [ 92.72625, 9.13186 ], [ 92.72639, 9.13312 ], [ 92.72662, 9.13424 ], [ 92.72638, 9.13561 ], [ 92.72591, 9.13735 ], [ 92.72539, 9.1385 ], [ 92.72354, 9.13997 ], [ 92.72266, 9.14092 ], [ 92.72184, 9.14208 ], [ 92.72115, 9.1432524 ], [ 92.7203768, 9.1444931 ], [ 92.7197509, 9.1463197 ], [ 92.7194797, 9.1484957 ], [ 92.7196432, 9.1500906 ], [ 92.71962, 9.15103 ], [ 92.71925, 9.15143 ], [ 92.71888, 9.15189 ], [ 92.71859, 9.15234 ], [ 92.71843, 9.15322 ], [ 92.71846, 9.1544 ], [ 92.71847, 9.15698 ], [ 92.71838, 9.15893 ], [ 92.71853, 9.16097 ], [ 92.71899, 9.16355 ], [ 92.71923, 9.16588 ], [ 92.71989, 9.16875 ], [ 92.72023, 9.16968 ], [ 92.72028, 9.17017 ], [ 92.72038, 9.17072 ], [ 92.72072, 9.17149 ], [ 92.72115, 9.17203 ], [ 92.72103, 9.17323 ], [ 92.72129, 9.17498 ], [ 92.72131, 9.1794 ], [ 92.72113, 9.18345 ], [ 92.72115, 9.18411 ], [ 92.72108, 9.18448 ], [ 92.72095, 9.18483 ], [ 92.72055, 9.18563 ], [ 92.72032, 9.18679 ], [ 92.72006, 9.18834 ], [ 92.71994, 9.19079 ], [ 92.71972, 9.193 ], [ 92.71956, 9.19395 ], [ 92.71968, 9.19469 ], [ 92.7199, 9.19517 ], [ 92.72056, 9.19607 ], [ 92.72105, 9.19688 ], [ 92.72126, 9.19792 ], [ 92.72126, 9.19855 ], [ 92.72108, 9.19916 ], [ 92.72084, 9.19981 ], [ 92.72068, 9.20054 ], [ 92.72085, 9.2025 ], [ 92.72061, 9.20498 ], [ 92.72053, 9.20541 ], [ 92.7204, 9.20587 ], [ 92.72028, 9.20605 ], [ 92.72034, 9.20651 ], [ 92.72013, 9.20717 ], [ 92.72008, 9.20763 ], [ 92.72009, 9.20831 ], [ 92.72056, 9.20944 ], [ 92.72073, 9.21024 ], [ 92.72092, 9.21094 ], [ 92.72088, 9.2121 ], [ 92.72097, 9.21276 ], [ 92.72132, 9.21345 ], [ 92.72212, 9.21479 ], [ 92.72295, 9.21589 ], [ 92.72376, 9.21714 ], [ 92.72416, 9.21757 ], [ 92.72446, 9.21779 ], [ 92.72514, 9.21816 ], [ 92.72712, 9.21899 ], [ 92.72779, 9.21915 ], [ 92.72857, 9.21919 ], [ 92.72918, 9.21917 ], [ 92.72967, 9.21907 ], [ 92.73076, 9.21867 ], [ 92.73202, 9.21833 ], [ 92.73385, 9.21751 ], [ 92.73436, 9.21701 ], [ 92.73471, 9.21663 ], [ 92.73498, 9.21607 ], [ 92.73525, 9.21564 ], [ 92.73553, 9.21538 ], [ 92.73603, 9.21521 ], [ 92.73669, 9.21516 ], [ 92.73716, 9.21517 ], [ 92.73764, 9.21531 ], [ 92.73875, 9.21571 ], [ 92.74069, 9.21637 ], [ 92.74132, 9.21642 ], [ 92.74203, 9.21627 ], [ 92.74291, 9.21594 ], [ 92.74358, 9.2156 ], [ 92.74417, 9.21513 ], [ 92.74461, 9.21466 ], [ 92.74473, 9.21444 ], [ 92.74472, 9.2142 ], [ 92.74483, 9.21391 ], [ 92.74574, 9.21308 ], [ 92.74618, 9.21257 ], [ 92.74617, 9.21236 ], [ 92.74621, 9.21212 ], [ 92.74631, 9.21191 ], [ 92.74652, 9.21167 ], [ 92.74685, 9.21154 ], [ 92.74739, 9.21152 ], [ 92.74807, 9.21167 ], [ 92.74876, 9.21187 ], [ 92.74933, 9.21226 ], [ 92.74966, 9.21245 ], [ 92.75057, 9.21344 ], [ 92.75147, 9.21406 ], [ 92.75233, 9.21444 ], [ 92.75474, 9.21487 ], [ 92.75606, 9.21493 ], [ 92.75743, 9.21533 ], [ 92.75764, 9.21532 ], [ 92.75829, 9.21509 ], [ 92.75928, 9.21486 ], [ 92.7598, 9.21484 ], [ 92.76022, 9.2147 ], [ 92.76049, 9.21451 ], [ 92.76107, 9.2144 ], [ 92.76242, 9.21448 ], [ 92.76349, 9.21459 ], [ 92.76499, 9.21461 ], [ 92.76566, 9.21485 ], [ 92.76672, 9.21515 ], [ 92.76738, 9.21555 ], [ 92.76847, 9.21651 ], [ 92.76978, 9.21802 ], [ 92.77065, 9.21898 ], [ 92.77132, 9.21964 ], [ 92.77145, 9.21989 ], [ 92.77152, 9.22011 ], [ 92.77167, 9.22032 ], [ 92.77171, 9.22049 ], [ 92.77157, 9.22098 ], [ 92.77156, 9.22122 ], [ 92.77158, 9.22135 ], [ 92.77174, 9.22139 ], [ 92.77176, 9.22151 ], [ 92.77173, 9.2218 ], [ 92.77166, 9.22203 ], [ 92.77146, 9.22242 ], [ 92.77135, 9.22255 ], [ 92.77138, 9.22287 ], [ 92.7713, 9.22315 ], [ 92.77098, 9.22343 ], [ 92.77086, 9.22371 ], [ 92.77088, 9.22397 ], [ 92.77099, 9.22414 ], [ 92.77095, 9.22422 ], [ 92.77075, 9.22419 ], [ 92.7707, 9.22429 ], [ 92.77071, 9.22447 ], [ 92.77083, 9.22455 ], [ 92.77103, 9.22462 ], [ 92.77118, 9.22482 ], [ 92.77133, 9.22509 ], [ 92.77129, 9.22559 ], [ 92.77119, 9.22596 ], [ 92.77115, 9.22621 ], [ 92.7713, 9.2264 ], [ 92.77144, 9.22663 ], [ 92.77148, 9.22691 ], [ 92.77143, 9.2274 ], [ 92.77154, 9.2276 ], [ 92.7717, 9.22772 ], [ 92.77194, 9.22797 ], [ 92.77265, 9.22839 ], [ 92.77285, 9.22843 ], [ 92.7733, 9.22841 ], [ 92.7736, 9.22844 ], [ 92.7738, 9.22857 ], [ 92.77406, 9.22888 ], [ 92.77495, 9.23046 ], [ 92.77571, 9.23227 ], [ 92.77601, 9.23328 ], [ 92.77608, 9.23397 ], [ 92.77605, 9.23558 ], [ 92.7759, 9.23602 ], [ 92.77571, 9.23645 ], [ 92.77545, 9.23675 ], [ 92.77534, 9.23692 ], [ 92.77507, 9.23702 ], [ 92.77484, 9.23707 ], [ 92.77468, 9.23705 ], [ 92.77454, 9.23697 ], [ 92.77438, 9.23667 ], [ 92.7742, 9.23647 ], [ 92.77408, 9.23655 ], [ 92.77411, 9.23664 ], [ 92.77422, 9.23676 ], [ 92.77387, 9.23697 ], [ 92.7735, 9.23711 ], [ 92.77338, 9.23724 ], [ 92.77336, 9.23745 ], [ 92.77337, 9.23799 ], [ 92.7735, 9.23834 ], [ 92.77346, 9.23865 ], [ 92.77331, 9.23885 ], [ 92.77339, 9.23894 ], [ 92.77356, 9.23899 ], [ 92.77369, 9.23912 ], [ 92.77393, 9.23911 ], [ 92.77435, 9.23888 ], [ 92.7746606, 9.2389666 ], [ 92.7749304, 9.2389249 ], [ 92.7753702, 9.238956 ], [ 92.7760699, 9.2391682 ], [ 92.77713, 9.2395 ], [ 92.7778, 9.23994 ], [ 92.77825, 9.2409 ], [ 92.77851, 9.24177 ], [ 92.77871, 9.24269 ], [ 92.77881, 9.24342 ], [ 92.77875, 9.24383 ], [ 92.77872, 9.24425 ], [ 92.77867, 9.24457 ], [ 92.7788, 9.24486 ], [ 92.77888, 9.24512 ], [ 92.77885, 9.24547 ], [ 92.77886, 9.24607 ], [ 92.77858, 9.24678 ], [ 92.77811, 9.24739 ], [ 92.77771, 9.248 ], [ 92.77732, 9.24875 ], [ 92.77636, 9.25196 ], [ 92.776, 9.25204 ], [ 92.77564, 9.25217 ], [ 92.77533, 9.25239 ], [ 92.77507, 9.25294 ], [ 92.77498, 9.25367 ], [ 92.77479, 9.25433 ], [ 92.7745, 9.25504 ], [ 92.77421, 9.25553 ], [ 92.77428, 9.25588 ], [ 92.77474, 9.25612 ], [ 92.77567, 9.25632 ], [ 92.77693, 9.25625 ], [ 92.77771, 9.25596 ], [ 92.77804, 9.25567 ], [ 92.77816, 9.25524 ], [ 92.77824, 9.25462 ], [ 92.77909, 9.25305 ], [ 92.77992, 9.25212 ], [ 92.78031, 9.25154 ], [ 92.78041, 9.25122 ], [ 92.78039, 9.25093 ], [ 92.7807, 9.25026 ], [ 92.78141, 9.24922 ], [ 92.78249, 9.24824 ], [ 92.7834, 9.24758 ], [ 92.78446, 9.2471 ], [ 92.78556, 9.24616 ], [ 92.7861, 9.24582 ], [ 92.7867, 9.2454 ], [ 92.78725, 9.24455 ], [ 92.78799, 9.24355 ], [ 92.78876, 9.24272 ], [ 92.79015, 9.24177 ], [ 92.79066, 9.2416 ], [ 92.79117, 9.24151 ], [ 92.79162, 9.24125 ], [ 92.79223, 9.24065 ], [ 92.79293, 9.23956 ], [ 92.79479, 9.23732 ], [ 92.79774, 9.23432 ], [ 92.7998, 9.2319 ], [ 92.80174, 9.23012 ], [ 92.80485, 9.2275 ], [ 92.80649, 9.22603 ], [ 92.80856, 9.22437 ], [ 92.8113, 9.22235 ], [ 92.81423, 9.21952 ], [ 92.81606, 9.21739 ], [ 92.81721, 9.2156 ], [ 92.8182, 9.21385 ], [ 92.81884, 9.21219 ], [ 92.81977, 9.20998 ], [ 92.82069, 9.20696 ], [ 92.82144, 9.20472 ], [ 92.82208, 9.20207 ], [ 92.82334, 9.19794 ], [ 92.82437, 9.19377 ], [ 92.82559, 9.18936 ], [ 92.82585, 9.18773 ], [ 92.82585, 9.18681 ], [ 92.8257, 9.18581 ], [ 92.82545, 9.18465 ], [ 92.82537, 9.18273 ], [ 92.82525, 9.18218 ], [ 92.8257475, 9.1816415 ], [ 92.8260722, 9.1798291 ], [ 92.8263748, 9.1783844 ], [ 92.8266106, 9.1780986 ], [ 92.8267769, 9.1778886 ], [ 92.8271938, 9.1776027 ], [ 92.8272, 9.17622 ], [ 92.82809, 9.17526 ], [ 92.82837, 9.17484 ], [ 92.82857, 9.17399 ], [ 92.82899, 9.17246 ], [ 92.82991, 9.1699 ], [ 92.83032, 9.1692 ], [ 92.83054, 9.16854 ], [ 92.83073, 9.16776 ], [ 92.83095, 9.16732 ], [ 92.83093, 9.16628 ], [ 92.83097, 9.16608 ], [ 92.83115, 9.16577 ], [ 92.83123, 9.16537 ], [ 92.83118, 9.16445 ], [ 92.8312, 9.16349 ], [ 92.83131, 9.16287 ], [ 92.83139, 9.16256 ], [ 92.83054, 9.15811 ], [ 92.8301, 9.1563 ], [ 92.8293, 9.15495 ], [ 92.82821, 9.15216 ], [ 92.82786, 9.14888 ], [ 92.82779, 9.14778 ], [ 92.82786, 9.14605 ], [ 92.82849, 9.14297 ], [ 92.8289, 9.14073 ], [ 92.829, 9.13989 ], [ 92.82898, 9.13942 ], [ 92.82881, 9.13908 ], [ 92.82857, 9.13879 ], [ 92.82824, 9.13859 ], [ 92.82784, 9.13849 ], [ 92.82728, 9.13857 ], [ 92.8268, 9.13869 ], [ 92.82602, 9.13865 ], [ 92.8242, 9.13845 ], [ 92.82335, 9.13823 ], [ 92.82232, 9.13789 ], [ 92.82054, 9.13705 ], [ 92.81989, 9.13654 ], [ 92.81903, 9.13603 ], [ 92.81814, 9.13583 ], [ 92.81676, 9.1351 ], [ 92.81361, 9.13201 ], [ 92.81313, 9.13121 ], [ 92.81232, 9.13002 ], [ 92.81195, 9.12871 ], [ 92.81196, 9.12738 ], [ 92.81186, 9.12625 ], [ 92.81154, 9.12547 ], [ 92.81056, 9.12477 ], [ 92.81002, 9.12421 ], [ 92.80889, 9.12376 ], [ 92.80787, 9.12313 ], [ 92.80721, 9.12276 ], [ 92.80616, 9.12246 ], [ 92.80495, 9.12166 ], [ 92.80398, 9.12074 ], [ 92.80291, 9.11996 ], [ 92.80197, 9.11972 ], [ 92.8003, 9.11944 ], [ 92.79846, 9.1193 ], [ 92.79661, 9.11901 ], [ 92.79488, 9.11859 ], [ 92.79338, 9.11863 ], [ 92.79133, 9.11839 ], [ 92.79031, 9.11831 ], [ 92.78911, 9.1181 ], [ 92.7878, 9.11811 ], [ 92.78564, 9.11833 ], [ 92.78424, 9.11861 ], [ 92.78327, 9.1187 ], [ 92.78117, 9.11949 ], [ 92.77981, 9.12024 ], [ 92.7768, 9.12206 ], [ 92.77585, 9.12276 ], [ 92.77473, 9.12387 ], [ 92.77374, 9.12453 ], [ 92.77271, 9.12561 ] ] ], [ [ [ 79.2101751, 9.2831647 ], [ 79.2106168, 9.2832368 ], [ 79.2111676, 9.2833299 ], [ 79.2118038, 9.2834738 ], [ 79.2135177, 9.2839309 ], [ 79.2155712, 9.2847358 ], [ 79.2158396, 9.2850522 ], [ 79.2163602, 9.2859634 ], [ 79.2177591, 9.2875958 ], [ 79.218159, 9.2880431 ], [ 79.2184904, 9.288887 ], [ 79.2201411, 9.2917066 ], [ 79.238418, 9.2925428 ], [ 79.2421279, 9.2927848 ], [ 79.2496978, 9.291554 ], [ 79.2523702, 9.2915719 ], [ 79.2619979, 9.2924493 ], [ 79.2640567, 9.2928045 ], [ 79.2651532, 9.2933154 ], [ 79.2682329, 9.2940565 ], [ 79.2698621, 9.2950788 ], [ 79.2708717, 9.2960015 ], [ 79.2722181, 9.2981763 ], [ 79.2725631, 9.300098 ], [ 79.2729584, 9.3009704 ], [ 79.2730148, 9.301918 ], [ 79.273254, 9.3024405 ], [ 79.2742883, 9.303765 ], [ 79.2746665, 9.3047073 ], [ 79.2764593, 9.3068709 ], [ 79.277494, 9.3087412 ], [ 79.2774839, 9.3092807 ], [ 79.2780857, 9.3095374 ], [ 79.2781808, 9.3101699 ], [ 79.2788357, 9.3106777 ], [ 79.2800899, 9.3110366 ], [ 79.2812282, 9.312584 ], [ 79.2848186, 9.3146231 ], [ 79.285759, 9.315803 ], [ 79.2871843, 9.3168586 ], [ 79.2895103, 9.3177892 ], [ 79.2901739, 9.3192995 ], [ 79.2917934, 9.3202952 ], [ 79.2932263, 9.3206801 ], [ 79.2935245, 9.3211332 ], [ 79.2963966, 9.3215318 ], [ 79.2968478, 9.321914 ], [ 79.2985236, 9.3221512 ], [ 79.3011254, 9.323149 ], [ 79.3021494, 9.3244089 ], [ 79.3030882, 9.325223 ], [ 79.3062194, 9.3259757 ], [ 79.3068573, 9.3265321 ], [ 79.3086109, 9.3271085 ], [ 79.3102492, 9.328001 ], [ 79.3119669, 9.328307 ], [ 79.3161361, 9.3271197 ], [ 79.3221394, 9.3241304 ], [ 79.3297268, 9.3195028 ], [ 79.330851, 9.3188394 ], [ 79.3330345, 9.3156559 ], [ 79.3348874, 9.3121266 ], [ 79.3346165, 9.3083447 ], [ 79.3332513, 9.3070562 ], [ 79.3329482, 9.3049006 ], [ 79.327057, 9.2993272 ], [ 79.3269776, 9.294354 ], [ 79.3260018, 9.2939078 ], [ 79.3229045, 9.2910685 ], [ 79.3212559, 9.2899272 ], [ 79.3207651, 9.2888927 ], [ 79.3207119, 9.2884067 ], [ 79.3204094, 9.2878953 ], [ 79.3199806, 9.2876555 ], [ 79.319594, 9.2874208 ], [ 79.3193859, 9.2869923 ], [ 79.3186365, 9.2866167 ], [ 79.3177772, 9.2863392 ], [ 79.3165553, 9.2860461 ], [ 79.315336, 9.283947 ], [ 79.3149774, 9.2830014 ], [ 79.3147961, 9.2819569 ], [ 79.3149832, 9.2815267 ], [ 79.315261, 9.2810817 ], [ 79.3152397, 9.2805846 ], [ 79.3161168, 9.2776463 ], [ 79.316929, 9.2757944 ], [ 79.3174686, 9.2744496 ], [ 79.3183087, 9.2728307 ], [ 79.319402, 9.2708432 ], [ 79.3217065, 9.2673129 ], [ 79.3279078, 9.2596423 ], [ 79.3335049, 9.2540086 ], [ 79.3420645, 9.2463507 ], [ 79.3483119, 9.2419179 ], [ 79.3598687, 9.2322025 ], [ 79.3713647, 9.2217744 ], [ 79.3774018, 9.2169247 ], [ 79.382925, 9.2133429 ], [ 79.3895149, 9.2086566 ], [ 79.3978029, 9.2017526 ], [ 79.4030804, 9.1971784 ], [ 79.4070128, 9.1939154 ], [ 79.4109976, 9.1903214 ], [ 79.4115996, 9.1892743 ], [ 79.4124596, 9.1887367 ], [ 79.4132186, 9.1880303 ], [ 79.4184166, 9.182698 ], [ 79.4237609, 9.1784652 ], [ 79.4277383, 9.1745567 ], [ 79.4348655, 9.1663295 ], [ 79.4391708, 9.1623063 ], [ 79.4402716, 9.1613499 ], [ 79.4409773, 9.1610765 ], [ 79.4410407, 9.1607751 ], [ 79.4402951, 9.1609036 ], [ 79.4400015, 9.1611355 ], [ 79.4350366, 9.165393 ], [ 79.4337078, 9.1667809 ], [ 79.4317586, 9.1686704 ], [ 79.4285535, 9.1725282 ], [ 79.4243338, 9.1770548 ], [ 79.416205, 9.1842603 ], [ 79.4158885, 9.1845664 ], [ 79.4155503, 9.1845385 ], [ 79.4152215, 9.1843902 ], [ 79.4149115, 9.1836669 ], [ 79.4148552, 9.1819513 ], [ 79.414983, 9.1812135 ], [ 79.4174096, 9.1793373 ], [ 79.4185179, 9.1791415 ], [ 79.4199608, 9.1785251 ], [ 79.4210331, 9.1778029 ], [ 79.4218815, 9.1767966 ], [ 79.4224784, 9.1760223 ], [ 79.4225719, 9.1753343 ], [ 79.4227896, 9.1751481 ], [ 79.4230974, 9.1746125 ], [ 79.4241397, 9.1736167 ], [ 79.4255599, 9.1727209 ], [ 79.4260827, 9.172319 ], [ 79.426668, 9.1715471 ], [ 79.4282704, 9.1700279 ], [ 79.4286188, 9.1695339 ], [ 79.4291036, 9.1690363 ], [ 79.4294646, 9.1687649 ], [ 79.4297908, 9.1684131 ], [ 79.430069, 9.1679852 ], [ 79.4302833, 9.1678053 ], [ 79.4304384, 9.1678248 ], [ 79.4305812, 9.1677397 ], [ 79.4306133, 9.1675938 ], [ 79.430713, 9.167481 ], [ 79.4308765, 9.1672816 ], [ 79.4310146, 9.1672753 ], [ 79.4311073, 9.1672626 ], [ 79.4312212, 9.167283 ], [ 79.4315854, 9.1670684 ], [ 79.4323104, 9.1661646 ], [ 79.4322905, 9.1658572 ], [ 79.4323482, 9.1657242 ], [ 79.4326801, 9.165615 ], [ 79.4329032, 9.1655703 ], [ 79.4331177, 9.1652067 ], [ 79.4333294, 9.1650405 ], [ 79.4333342, 9.1647746 ], [ 79.4334111, 9.1646321 ], [ 79.4335458, 9.1646369 ], [ 79.4340508, 9.1642285 ], [ 79.4343201, 9.1638202 ], [ 79.4345847, 9.1634973 ], [ 79.4353052, 9.1628603 ], [ 79.437124, 9.1613997 ], [ 79.438606, 9.1604236 ], [ 79.4392735, 9.1599444 ], [ 79.4399927, 9.1601038 ], [ 79.440669, 9.1591139 ], [ 79.4437438, 9.1575597 ], [ 79.4454205, 9.1562145 ], [ 79.4464004, 9.1547518 ], [ 79.4465478, 9.1536525 ], [ 79.4459397, 9.152116 ], [ 79.4451232, 9.1507329 ], [ 79.4441172, 9.1505341 ], [ 79.4442463, 9.1507428 ], [ 79.4445986, 9.1509514 ], [ 79.444669, 9.1514615 ], [ 79.4444225, 9.1518673 ], [ 79.4444342, 9.1520991 ], [ 79.4447395, 9.1524121 ], [ 79.4442518, 9.1531415 ], [ 79.4421412, 9.1559564 ], [ 79.4404917, 9.1575523 ], [ 79.4390037, 9.1586651 ], [ 79.4368767, 9.160378 ], [ 79.4344299, 9.1626836 ], [ 79.4328026, 9.1642503 ], [ 79.4269904, 9.1688784 ], [ 79.4260404, 9.169905 ], [ 79.4244622, 9.1711291 ], [ 79.4208987, 9.174466 ], [ 79.418315, 9.1757956 ], [ 79.4146188, 9.1784927 ], [ 79.4068746, 9.1829762 ], [ 79.3908827, 9.192974 ], [ 79.3865814, 9.1959334 ], [ 79.3748681, 9.2035545 ], [ 79.3725466, 9.2043634 ], [ 79.3590267, 9.21353 ], [ 79.3448518, 9.2222832 ], [ 79.3358729, 9.2277689 ], [ 79.331987, 9.2295711 ], [ 79.3161456, 9.2376588 ], [ 79.3067227, 9.2426461 ], [ 79.2917007, 9.2493856 ], [ 79.2765421, 9.2539684 ], [ 79.2637349, 9.2565709 ], [ 79.2518806, 9.2591038 ], [ 79.2421881, 9.2592187 ], [ 79.2361516, 9.2586802 ], [ 79.2298435, 9.2597391 ], [ 79.225449, 9.2597243 ], [ 79.2209434, 9.2578188 ], [ 79.2186635, 9.2551604 ], [ 79.2178927, 9.2522389 ], [ 79.2172785, 9.2520361 ], [ 79.2167586, 9.2523596 ], [ 79.2156439, 9.2538299 ], [ 79.2152759, 9.2554527 ], [ 79.2158048, 9.2578109 ], [ 79.2166583, 9.2586792 ], [ 79.217654, 9.258955 ], [ 79.2194583, 9.2617859 ], [ 79.220944, 9.2637645 ], [ 79.2215287, 9.2661264 ], [ 79.220717, 9.2673828 ], [ 79.218942, 9.2695397 ], [ 79.2187735, 9.2703836 ], [ 79.218022, 9.2710856 ], [ 79.2134708, 9.2734496 ], [ 79.2072572, 9.2751676 ], [ 79.206849, 9.2731864 ], [ 79.2060454, 9.2730901 ], [ 79.2047499, 9.2739223 ], [ 79.2045076, 9.2742305 ], [ 79.2045447, 9.2747785 ], [ 79.2047294, 9.2756399 ], [ 79.2047775, 9.2762191 ], [ 79.2044916, 9.2763015 ], [ 79.2052556, 9.2787683 ], [ 79.2057621, 9.2795755 ], [ 79.2076884, 9.2810948 ], [ 79.2087794, 9.2823407 ], [ 79.2090384, 9.2825845 ], [ 79.2093017, 9.2827406 ], [ 79.2094812, 9.282784 ], [ 79.2095392, 9.2828969 ], [ 79.2096237, 9.2830479 ], [ 79.2098154, 9.2831521 ], [ 79.2101751, 9.2831647 ] ] ], [ [ [ 72.71967, 11.12862 ], [ 72.72049, 11.12945 ], [ 72.7209, 11.12975 ], [ 72.72165, 11.13037 ], [ 72.72224, 11.13079 ], [ 72.72446, 11.13214 ], [ 72.7253036, 11.1326908 ], [ 72.72567, 11.13293 ], [ 72.72581, 11.13306 ], [ 72.72623, 11.13327 ], [ 72.72655, 11.13351 ], [ 72.72663, 11.1336 ], [ 72.72758, 11.13424 ], [ 72.728, 11.13457 ], [ 72.72861, 11.13495 ], [ 72.72922, 11.13515 ], [ 72.73019, 11.13531 ], [ 72.73088, 11.13531 ], [ 72.73131, 11.13528 ], [ 72.73156, 11.13523 ], [ 72.73176, 11.13516 ], [ 72.73214, 11.13508 ], [ 72.7324, 11.13505 ], [ 72.73265, 11.13497 ], [ 72.7328, 11.13489 ], [ 72.73291, 11.13479 ], [ 72.73311, 11.13451 ], [ 72.73332, 11.134 ], [ 72.73338, 11.13366 ], [ 72.73353, 11.13309 ], [ 72.73354, 11.13276 ], [ 72.73332, 11.13156 ], [ 72.7332067, 11.1312666 ], [ 72.73264, 11.1298 ], [ 72.73253, 11.12963 ], [ 72.73245, 11.12945 ], [ 72.73235, 11.12905 ], [ 72.73221, 11.12875 ], [ 72.73149, 11.12678 ], [ 72.73135, 11.12653 ], [ 72.7309, 11.12551 ], [ 72.72961, 11.12316 ], [ 72.72939, 11.1228 ], [ 72.72909, 11.12238 ], [ 72.7287, 11.12171 ], [ 72.72818, 11.12104 ], [ 72.72795, 11.1207 ], [ 72.72716, 11.11967 ], [ 72.72696, 11.11922 ], [ 72.72663, 11.11882 ], [ 72.72637, 11.11859 ], [ 72.72612, 11.1183 ], [ 72.72529, 11.11762 ], [ 72.72482, 11.11712 ], [ 72.72432, 11.11669 ], [ 72.72331, 11.1159 ], [ 72.72285, 11.1155 ], [ 72.72203, 11.11462 ], [ 72.72146, 11.11416 ], [ 72.72044, 11.11348 ], [ 72.7197, 11.11285 ], [ 72.71943, 11.11259 ], [ 72.71931, 11.11255 ], [ 72.71917, 11.11258 ], [ 72.71907, 11.11265 ], [ 72.7184, 11.11341 ], [ 72.71785, 11.11388 ], [ 72.71722, 11.11453 ], [ 72.71673, 11.11529 ], [ 72.71632, 11.11608 ], [ 72.71619, 11.11638 ], [ 72.71604, 11.11691 ], [ 72.71599, 11.11732 ], [ 72.71589, 11.11767 ], [ 72.71585, 11.11865 ], [ 72.7158, 11.11895 ], [ 72.71577, 11.11934 ], [ 72.71578, 11.11981 ], [ 72.716, 11.12222 ], [ 72.7161, 11.12281 ], [ 72.71648, 11.12365 ], [ 72.71682, 11.12408 ], [ 72.71685, 11.12421 ], [ 72.71695, 11.12444 ], [ 72.7171582, 11.1247563 ], [ 72.71747, 11.12523 ], [ 72.71764, 11.12573 ], [ 72.71779, 11.1263 ], [ 72.71785, 11.12643 ], [ 72.71794, 11.12655 ], [ 72.71808, 11.12682 ], [ 72.7185, 11.12744 ], [ 72.71867, 11.12761 ], [ 72.71904, 11.12807 ], [ 72.71936, 11.1284 ], [ 72.71967, 11.12862 ] ] ], [ [ [ 72.782777014492751, 11.2501 ], [ 72.78291, 11.25041 ], [ 72.78347, 11.25154 ], [ 72.78355, 11.25175 ], [ 72.78432, 11.25334 ], [ 72.7847, 11.25424 ], [ 72.78523, 11.25533 ], [ 72.78587, 11.25619 ], [ 72.78653, 11.25696 ], [ 72.78739, 11.25778 ], [ 72.78787, 11.25814 ], [ 72.78847, 11.25828 ], [ 72.78889, 11.25829 ], [ 72.78923, 11.2584 ], [ 72.78952, 11.25854 ], [ 72.78967, 11.25866 ], [ 72.78983, 11.25885 ], [ 72.78989, 11.25899 ], [ 72.78991, 11.2591 ], [ 72.78996, 11.25907 ], [ 72.79, 11.2589 ], [ 72.79007, 11.25877 ], [ 72.79012, 11.25856 ], [ 72.79013, 11.25837 ], [ 72.79007, 11.25776 ], [ 72.79005, 11.25709 ], [ 72.78999, 11.2568 ], [ 72.78998, 11.25655 ], [ 72.78981, 11.25588 ], [ 72.78973, 11.25565 ], [ 72.78944, 11.25434 ], [ 72.78926, 11.25394 ], [ 72.78885, 11.2529 ], [ 72.78866, 11.25264 ], [ 72.78799, 11.25093 ], [ 72.78771, 11.25012 ], [ 72.787700114942538, 11.2501 ], [ 72.787601264367822, 11.2499 ], [ 72.78728, 11.24925 ], [ 72.7867, 11.2478 ], [ 72.78641, 11.24715 ], [ 72.78617, 11.24677 ], [ 72.7857, 11.24547 ], [ 72.78532, 11.24463 ], [ 72.78511, 11.244 ], [ 72.78491, 11.24355 ], [ 72.78481, 11.24317 ], [ 72.78458, 11.24262 ], [ 72.78424, 11.24187 ], [ 72.78375, 11.24061 ], [ 72.78343, 11.23991 ], [ 72.78316, 11.23916 ], [ 72.78293, 11.23827 ], [ 72.78268, 11.2377 ], [ 72.7824, 11.23673 ], [ 72.78204, 11.23581 ], [ 72.78174, 11.23438 ], [ 72.78156, 11.23363 ], [ 72.78128, 11.23272 ], [ 72.78104, 11.23214 ], [ 72.78086, 11.23131 ], [ 72.78019, 11.22889 ], [ 72.77985, 11.22776 ], [ 72.77972, 11.22724 ], [ 72.77921, 11.22595 ], [ 72.77903, 11.22518 ], [ 72.77897, 11.22475 ], [ 72.77876, 11.22416 ], [ 72.77873, 11.22384 ], [ 72.77865, 11.22346 ], [ 72.77834, 11.22245 ], [ 72.7782, 11.2219 ], [ 72.77812, 11.2214 ], [ 72.77795, 11.22067 ], [ 72.77778, 11.21963 ], [ 72.77745, 11.21864 ], [ 72.77739, 11.2179 ], [ 72.77727, 11.21753 ], [ 72.77639, 11.21542 ], [ 72.77584, 11.21444 ], [ 72.77548, 11.21363 ], [ 72.77518, 11.2131 ], [ 72.7746, 11.2123 ], [ 72.77392, 11.21142 ], [ 72.77334, 11.21086 ], [ 72.77102, 11.20765 ], [ 72.77047, 11.20693 ], [ 72.7701, 11.20637 ], [ 72.7698, 11.20568 ], [ 72.76927, 11.20482 ], [ 72.76901, 11.20451 ], [ 72.76891, 11.20418 ], [ 72.76865, 11.20353 ], [ 72.76824, 11.20229 ], [ 72.76776, 11.20124 ], [ 72.76732, 11.19988 ], [ 72.76707, 11.19889 ], [ 72.76645, 11.19712 ], [ 72.76603, 11.19568 ], [ 72.7659, 11.19512 ], [ 72.76568, 11.19456 ], [ 72.76523, 11.19367 ], [ 72.76516, 11.19337 ], [ 72.76518, 11.19267 ], [ 72.76492, 11.19219 ], [ 72.76478, 11.19187 ], [ 72.76464, 11.19117 ], [ 72.7645, 11.19086 ], [ 72.76429, 11.18998 ], [ 72.76406, 11.18949 ], [ 72.76389, 11.18895 ], [ 72.76385, 11.18854 ], [ 72.76367, 11.18808 ], [ 72.76373, 11.18678 ], [ 72.76354, 11.18532 ], [ 72.76347, 11.1851 ], [ 72.76334, 11.18444 ], [ 72.76314, 11.18388 ], [ 72.76299, 11.18315 ], [ 72.763, 11.18303 ], [ 72.76316, 11.18289 ], [ 72.76319, 11.18253 ], [ 72.76324, 11.18222 ], [ 72.7632, 11.18178 ], [ 72.76327, 11.18118 ], [ 72.76337, 11.18085 ], [ 72.76337, 11.18073 ], [ 72.76333, 11.18062 ], [ 72.76321, 11.18053 ], [ 72.763, 11.18049 ], [ 72.76285, 11.18049 ], [ 72.76279, 11.18052 ], [ 72.76273, 11.18059 ], [ 72.76272, 11.18066 ], [ 72.76276, 11.18074 ], [ 72.7628, 11.1812 ], [ 72.76296, 11.18146 ], [ 72.76304, 11.18153 ], [ 72.76298, 11.18205 ], [ 72.76294, 11.1822 ], [ 72.76299, 11.18227 ], [ 72.76291, 11.18238 ], [ 72.7628, 11.1824 ], [ 72.76258, 11.18205 ], [ 72.76248, 11.18177 ], [ 72.76243, 11.18172 ], [ 72.76235, 11.18148 ], [ 72.76248, 11.18148 ], [ 72.7627, 11.18163 ], [ 72.76276, 11.18164 ], [ 72.76279, 11.18161 ], [ 72.76282, 11.18137 ], [ 72.7628, 11.1813 ], [ 72.76259, 11.18125 ], [ 72.7623, 11.18124 ], [ 72.76167, 11.18135 ], [ 72.76155, 11.18145 ], [ 72.76149, 11.18159 ], [ 72.76162, 11.18355 ], [ 72.76182, 11.18458 ], [ 72.76188, 11.18515 ], [ 72.7621, 11.18634 ], [ 72.76226, 11.18768 ], [ 72.76238, 11.18834 ], [ 72.76257, 11.18983 ], [ 72.76262, 11.19049 ], [ 72.76282, 11.19169 ], [ 72.76295, 11.19207 ], [ 72.76303, 11.19242 ], [ 72.76315, 11.19266 ], [ 72.76324, 11.1931 ], [ 72.76362, 11.19437 ], [ 72.76415, 11.19583 ], [ 72.76465, 11.19745 ], [ 72.76493, 11.19816 ], [ 72.76541, 11.19919 ], [ 72.76569, 11.19992 ], [ 72.76574, 11.2001 ], [ 72.76613, 11.20114 ], [ 72.76622, 11.20145 ], [ 72.76631, 11.20166 ], [ 72.76651, 11.20234 ], [ 72.76675, 11.20325 ], [ 72.76693, 11.20369 ], [ 72.76708, 11.20417 ], [ 72.76717, 11.20461 ], [ 72.76735, 11.20507 ], [ 72.76747, 11.20549 ], [ 72.76768, 11.206 ], [ 72.76782, 11.20644 ], [ 72.76795, 11.20663 ], [ 72.76814, 11.20705 ], [ 72.76861, 11.20845 ], [ 72.76874, 11.20875 ], [ 72.76891, 11.2093 ], [ 72.76898, 11.20962 ], [ 72.76913, 11.20994 ], [ 72.7694, 11.21076 ], [ 72.76966, 11.21141 ], [ 72.76985, 11.21202 ], [ 72.77041, 11.21349 ], [ 72.77055, 11.21362 ], [ 72.77073, 11.21423 ], [ 72.77125, 11.21558 ], [ 72.77216, 11.21845 ], [ 72.77244, 11.21888 ], [ 72.77302, 11.22041 ], [ 72.77334, 11.22149 ], [ 72.77399, 11.22331 ], [ 72.77443, 11.22497 ], [ 72.77463, 11.22552 ], [ 72.77468, 11.22585 ], [ 72.77482, 11.22624 ], [ 72.77493, 11.22668 ], [ 72.77518, 11.22747 ], [ 72.77523, 11.22775 ], [ 72.77577, 11.22973 ], [ 72.77592, 11.2304 ], [ 72.77682, 11.2339 ], [ 72.77701, 11.23473 ], [ 72.7771, 11.23524 ], [ 72.77728, 11.23595 ], [ 72.77773, 11.23748 ], [ 72.77799, 11.23828 ], [ 72.77841, 11.23983 ], [ 72.77859, 11.24034 ], [ 72.77876, 11.24102 ], [ 72.77919, 11.24214 ], [ 72.7797, 11.24333 ], [ 72.78112, 11.24629 ], [ 72.78126, 11.24663 ], [ 72.78143, 11.24696 ], [ 72.782691217391303, 11.2499 ], [ 72.782777014492751, 11.2501 ] ] ], [ [ [ 92.690804615384621, 11.2501 ], [ 92.69102, 11.2506 ], [ 92.69111, 11.25088 ], [ 92.69146, 11.25139 ], [ 92.69148, 11.25161 ], [ 92.69153, 11.25172 ], [ 92.69177, 11.25185 ], [ 92.69188, 11.25198 ], [ 92.69201, 11.25222 ], [ 92.69203, 11.25242 ], [ 92.69208, 11.25251 ], [ 92.69219, 11.25256 ], [ 92.69222, 11.25264 ], [ 92.69217, 11.25269 ], [ 92.692, 11.25267 ], [ 92.69199, 11.25273 ], [ 92.69204, 11.25277 ], [ 92.69207, 11.25287 ], [ 92.69211, 11.25292 ], [ 92.69232, 11.25292 ], [ 92.69238, 11.253 ], [ 92.69242, 11.25351 ], [ 92.69249, 11.25386 ], [ 92.69247, 11.25403 ], [ 92.69248, 11.2542 ], [ 92.69258, 11.25449 ], [ 92.69272, 11.25509 ], [ 92.69267, 11.25533 ], [ 92.69266, 11.2555 ], [ 92.69275, 11.25573 ], [ 92.69284, 11.25588 ], [ 92.69291, 11.25605 ], [ 92.69301, 11.25611 ], [ 92.69307, 11.25624 ], [ 92.69323, 11.25642 ], [ 92.69338, 11.25642 ], [ 92.69356, 11.25649 ], [ 92.69361, 11.25653 ], [ 92.69375, 11.25676 ], [ 92.69408, 11.25685 ], [ 92.69439, 11.25685 ], [ 92.69461, 11.25691 ], [ 92.6949, 11.25722 ], [ 92.69515, 11.25768 ], [ 92.69553, 11.25824 ], [ 92.69593, 11.25914 ], [ 92.69601, 11.2597 ], [ 92.69615, 11.25983 ], [ 92.69646, 11.26006 ], [ 92.69654, 11.26017 ], [ 92.69664, 11.26057 ], [ 92.69665, 11.26087 ], [ 92.69659, 11.26206 ], [ 92.6965, 11.26287 ], [ 92.69635, 11.2636 ], [ 92.6963, 11.26405 ], [ 92.69584, 11.26586 ], [ 92.69568, 11.26626 ], [ 92.69556, 11.26664 ], [ 92.69551, 11.26688 ], [ 92.6951, 11.26816 ], [ 92.69507, 11.26846 ], [ 92.69498, 11.26862 ], [ 92.69452, 11.26909 ], [ 92.69442, 11.26928 ], [ 92.6944, 11.26946 ], [ 92.6943, 11.26957 ], [ 92.6943, 11.26972 ], [ 92.69439, 11.26984 ], [ 92.69439, 11.26992 ], [ 92.69435, 11.26999 ], [ 92.69415, 11.27013 ], [ 92.69406, 11.27023 ], [ 92.69396, 11.27047 ], [ 92.6937, 11.27085 ], [ 92.69355, 11.27099 ], [ 92.69346, 11.27131 ], [ 92.69353, 11.27167 ], [ 92.6936, 11.27184 ], [ 92.69388, 11.27222 ], [ 92.69391, 11.2725 ], [ 92.69397, 11.27268 ], [ 92.69397, 11.27291 ], [ 92.69393, 11.27299 ], [ 92.69368, 11.27325 ], [ 92.69349, 11.2733 ], [ 92.69339, 11.27336 ], [ 92.69338, 11.27345 ], [ 92.69343, 11.27351 ], [ 92.69421, 11.27356 ], [ 92.69436, 11.27368 ], [ 92.69443, 11.27402 ], [ 92.69454, 11.27416 ], [ 92.69455, 11.2744 ], [ 92.69448, 11.27472 ], [ 92.69437, 11.27489 ], [ 92.69416, 11.27532 ], [ 92.69404, 11.27572 ], [ 92.69387, 11.27617 ], [ 92.69375, 11.2764 ], [ 92.69374, 11.27653 ], [ 92.69379, 11.27675 ], [ 92.69396, 11.27695 ], [ 92.69401, 11.27705 ], [ 92.69392, 11.27737 ], [ 92.69392, 11.27756 ], [ 92.69349, 11.2797 ], [ 92.69338, 11.2799 ], [ 92.69331, 11.28006 ], [ 92.69322, 11.28012 ], [ 92.69298, 11.28008 ], [ 92.69288, 11.28022 ], [ 92.69294, 11.2803 ], [ 92.69315, 11.28028 ], [ 92.69336, 11.28035 ], [ 92.69347, 11.28042 ], [ 92.69365, 11.28065 ], [ 92.6937, 11.28078 ], [ 92.69371, 11.28091 ], [ 92.69364, 11.28117 ], [ 92.69363, 11.2813 ], [ 92.69374, 11.28158 ], [ 92.69385, 11.2817 ], [ 92.69428, 11.28187 ], [ 92.69437, 11.28195 ], [ 92.69451, 11.28227 ], [ 92.6946, 11.28235 ], [ 92.69476, 11.28238 ], [ 92.69483, 11.28246 ], [ 92.6949, 11.28281 ], [ 92.69497, 11.28291 ], [ 92.69495, 11.28304 ], [ 92.69503, 11.28336 ], [ 92.69491, 11.2837 ], [ 92.69488, 11.28404 ], [ 92.69489, 11.28417 ], [ 92.69497, 11.28426 ], [ 92.6952, 11.28443 ], [ 92.69526, 11.28453 ], [ 92.69545, 11.28472 ], [ 92.69566, 11.2848 ], [ 92.69602, 11.28474 ], [ 92.69617, 11.28474 ], [ 92.69643, 11.2848 ], [ 92.6966, 11.28479 ], [ 92.69698, 11.28499 ], [ 92.6971, 11.28502 ], [ 92.69727, 11.28502 ], [ 92.69745, 11.28508 ], [ 92.69761, 11.28519 ], [ 92.69771, 11.28533 ], [ 92.69805, 11.28552 ], [ 92.69825, 11.28567 ], [ 92.6986, 11.28586 ], [ 92.69877, 11.28603 ], [ 92.69899, 11.28615 ], [ 92.69934, 11.28643 ], [ 92.6995, 11.2865 ], [ 92.70006, 11.28653 ], [ 92.70032, 11.28667 ], [ 92.70048, 11.28672 ], [ 92.70062, 11.28673 ], [ 92.70076, 11.28681 ], [ 92.70098, 11.28702 ], [ 92.70123, 11.28747 ], [ 92.70145, 11.28776 ], [ 92.70201, 11.28807 ], [ 92.70259, 11.28828 ], [ 92.70312, 11.28836 ], [ 92.70339, 11.28845 ], [ 92.70385, 11.2885 ], [ 92.70436, 11.28867 ], [ 92.70499, 11.28894 ], [ 92.70563, 11.28916 ], [ 92.70582, 11.28925 ], [ 92.70608, 11.28926 ], [ 92.70624, 11.28901 ], [ 92.70631, 11.28885 ], [ 92.70634, 11.28795 ], [ 92.7064, 11.28768 ], [ 92.70645, 11.28756 ], [ 92.70667, 11.28734 ], [ 92.70697, 11.28707 ], [ 92.70718, 11.28684 ], [ 92.70718, 11.28643 ], [ 92.70728, 11.28599 ], [ 92.70722, 11.28586 ], [ 92.70694, 11.28577 ], [ 92.70651, 11.28546 ], [ 92.70646, 11.28537 ], [ 92.70644, 11.28514 ], [ 92.7065, 11.28497 ], [ 92.70645, 11.28491 ], [ 92.70644, 11.28481 ], [ 92.70653, 11.28467 ], [ 92.70667, 11.28463 ], [ 92.70681, 11.28445 ], [ 92.70679, 11.28436 ], [ 92.7067, 11.28432 ], [ 92.70663, 11.28425 ], [ 92.7066, 11.28412 ], [ 92.70662, 11.28393 ], [ 92.70678, 11.28362 ], [ 92.70695, 11.28352 ], [ 92.70704, 11.28352 ], [ 92.70711, 11.2837 ], [ 92.70716, 11.28372 ], [ 92.70718, 11.28369 ], [ 92.70714, 11.28336 ], [ 92.70707, 11.28325 ], [ 92.70694, 11.28319 ], [ 92.70663, 11.28265 ], [ 92.70663, 11.28253 ], [ 92.70656, 11.28242 ], [ 92.70648, 11.28235 ], [ 92.70647, 11.28224 ], [ 92.70649, 11.28219 ], [ 92.70658, 11.2821 ], [ 92.70649, 11.28193 ], [ 92.7062, 11.28171 ], [ 92.70617, 11.28164 ], [ 92.70621, 11.28156 ], [ 92.70608, 11.28124 ], [ 92.70607, 11.28101 ], [ 92.70611, 11.28077 ], [ 92.70618, 11.28063 ], [ 92.7062, 11.2803 ], [ 92.70628, 11.28019 ], [ 92.70647, 11.28008 ], [ 92.70655, 11.27997 ], [ 92.70654, 11.2796 ], [ 92.70662, 11.27943 ], [ 92.70686, 11.27934 ], [ 92.707, 11.27933 ], [ 92.70704, 11.27928 ], [ 92.70701, 11.2792 ], [ 92.70676, 11.27908 ], [ 92.70649, 11.27892 ], [ 92.70633, 11.27891 ], [ 92.70614, 11.27867 ], [ 92.70605, 11.27848 ], [ 92.70607, 11.27818 ], [ 92.70631, 11.27784 ], [ 92.70634, 11.27772 ], [ 92.70633, 11.27767 ], [ 92.70623, 11.27755 ], [ 92.70623, 11.27745 ], [ 92.70626, 11.27738 ], [ 92.70623, 11.2773 ], [ 92.70608, 11.27723 ], [ 92.70599, 11.27709 ], [ 92.70598, 11.277 ], [ 92.70593, 11.27694 ], [ 92.70563, 11.27689 ], [ 92.7056, 11.27679 ], [ 92.70567, 11.27602 ], [ 92.70581, 11.27565 ], [ 92.70602, 11.27544 ], [ 92.70608, 11.27529 ], [ 92.70613, 11.27525 ], [ 92.70621, 11.27523 ], [ 92.70623, 11.27519 ], [ 92.70617, 11.2751 ], [ 92.7061, 11.27507 ], [ 92.70605, 11.27497 ], [ 92.70609, 11.2749 ], [ 92.70609, 11.27482 ], [ 92.70597, 11.2748 ], [ 92.70593, 11.2747 ], [ 92.70603, 11.27447 ], [ 92.70584, 11.2743 ], [ 92.70583, 11.2741 ], [ 92.70586, 11.27404 ], [ 92.70592, 11.27401 ], [ 92.70618, 11.27399 ], [ 92.70627, 11.27394 ], [ 92.7063, 11.27385 ], [ 92.70629, 11.27367 ], [ 92.70617, 11.27352 ], [ 92.70631, 11.27338 ], [ 92.7063, 11.27333 ], [ 92.70626, 11.2733 ], [ 92.70612, 11.27327 ], [ 92.706, 11.27315 ], [ 92.70595, 11.27276 ], [ 92.70606, 11.27244 ], [ 92.70605, 11.27238 ], [ 92.70595, 11.27229 ], [ 92.70581, 11.2722 ], [ 92.70584, 11.27206 ], [ 92.7057, 11.27201 ], [ 92.70556, 11.27158 ], [ 92.70558, 11.27152 ], [ 92.70567, 11.2715 ], [ 92.70567, 11.27147 ], [ 92.7054, 11.27131 ], [ 92.70536, 11.27126 ], [ 92.70533, 11.27093 ], [ 92.70522, 11.27072 ], [ 92.7051, 11.27006 ], [ 92.70516, 11.26994 ], [ 92.70522, 11.2699 ], [ 92.70522, 11.26986 ], [ 92.70508, 11.26967 ], [ 92.70504, 11.26951 ], [ 92.70501, 11.26887 ], [ 92.70506, 11.26861 ], [ 92.70505, 11.26834 ], [ 92.70507, 11.26816 ], [ 92.70522, 11.26785 ], [ 92.70536, 11.26774 ], [ 92.70547, 11.26779 ], [ 92.7055, 11.26775 ], [ 92.7055, 11.26768 ], [ 92.70543, 11.26758 ], [ 92.70541, 11.26717 ], [ 92.70545, 11.26651 ], [ 92.70544, 11.26564 ], [ 92.70557, 11.26542 ], [ 92.70573, 11.26527 ], [ 92.70578, 11.2651 ], [ 92.70572, 11.26501 ], [ 92.70571, 11.2648 ], [ 92.70561, 11.26464 ], [ 92.70561, 11.26454 ], [ 92.70573, 11.26431 ], [ 92.70581, 11.26431 ], [ 92.70584, 11.26434 ], [ 92.70589, 11.26429 ], [ 92.7059, 11.26423 ], [ 92.70598, 11.26418 ], [ 92.706, 11.26413 ], [ 92.70598, 11.26407 ], [ 92.70584, 11.26398 ], [ 92.70583, 11.26394 ], [ 92.70585, 11.26389 ], [ 92.70581, 11.26378 ], [ 92.70562, 11.26349 ], [ 92.70553, 11.26327 ], [ 92.70542, 11.26314 ], [ 92.70531, 11.26291 ], [ 92.70521, 11.26281 ], [ 92.70511, 11.26254 ], [ 92.70497, 11.26241 ], [ 92.70475, 11.26239 ], [ 92.70465, 11.26231 ], [ 92.70425, 11.2617 ], [ 92.70411, 11.26161 ], [ 92.70374, 11.26147 ], [ 92.7033, 11.26117 ], [ 92.7031, 11.26096 ], [ 92.70286, 11.26052 ], [ 92.70269, 11.25994 ], [ 92.70262, 11.25987 ], [ 92.70234, 11.25977 ], [ 92.70198, 11.25977 ], [ 92.70163, 11.25969 ], [ 92.70157, 11.25965 ], [ 92.70119, 11.25954 ], [ 92.70084, 11.25938 ], [ 92.70023, 11.25893 ], [ 92.69994, 11.25867 ], [ 92.69939, 11.25809 ], [ 92.69911, 11.25769 ], [ 92.69852, 11.25654 ], [ 92.69836, 11.25601 ], [ 92.69796, 11.25551 ], [ 92.69766, 11.25525 ], [ 92.69718, 11.255 ], [ 92.69693, 11.25482 ], [ 92.6967, 11.25459 ], [ 92.69652, 11.25434 ], [ 92.6965, 11.25424 ], [ 92.69641, 11.25417 ], [ 92.6963, 11.25414 ], [ 92.69582, 11.25383 ], [ 92.69503, 11.25305 ], [ 92.69465, 11.25258 ], [ 92.69454, 11.25241 ], [ 92.6944, 11.25195 ], [ 92.69438, 11.25166 ], [ 92.69426, 11.25104 ], [ 92.69418, 11.25088 ], [ 92.69414, 11.25073 ], [ 92.69419, 11.25029 ], [ 92.694251071428582, 11.2501 ], [ 92.69428, 11.25001 ], [ 92.694286111111111, 11.2499 ], [ 92.69429, 11.24983 ], [ 92.69437, 11.24957 ], [ 92.69445, 11.24947 ], [ 92.69462, 11.24889 ], [ 92.69477, 11.2482 ], [ 92.69474, 11.24775 ], [ 92.69471, 11.24766 ], [ 92.69454, 11.24749 ], [ 92.69416, 11.24689 ], [ 92.69386, 11.24596 ], [ 92.69378, 11.24582 ], [ 92.69325, 11.24517 ], [ 92.6932, 11.24505 ], [ 92.69316, 11.24391 ], [ 92.69313, 11.2438 ], [ 92.69276, 11.24327 ], [ 92.69254, 11.24313 ], [ 92.69229, 11.24311 ], [ 92.69117, 11.24316 ], [ 92.69075, 11.24322 ], [ 92.69037, 11.24319 ], [ 92.69026, 11.24316 ], [ 92.68989, 11.24296 ], [ 92.68945, 11.24282 ], [ 92.68876, 11.24278 ], [ 92.68859, 11.24274 ], [ 92.68836, 11.24264 ], [ 92.6882, 11.2426 ], [ 92.68808, 11.24265 ], [ 92.688, 11.24277 ], [ 92.68796, 11.24294 ], [ 92.68798, 11.24301 ], [ 92.68796, 11.24308 ], [ 92.6879, 11.24314 ], [ 92.68783, 11.24313 ], [ 92.68774, 11.24316 ], [ 92.68773, 11.24334 ], [ 92.68785, 11.24343 ], [ 92.6879, 11.24343 ], [ 92.68795, 11.24346 ], [ 92.68795, 11.24351 ], [ 92.68779, 11.24359 ], [ 92.68789, 11.24373 ], [ 92.68807, 11.24388 ], [ 92.68814, 11.24408 ], [ 92.68824, 11.24414 ], [ 92.6884, 11.24417 ], [ 92.68876, 11.24446 ], [ 92.68883, 11.24458 ], [ 92.68884, 11.24479 ], [ 92.68879, 11.24508 ], [ 92.68874, 11.24515 ], [ 92.68846, 11.24519 ], [ 92.68812, 11.24504 ], [ 92.68803, 11.24506 ], [ 92.68802, 11.24514 ], [ 92.68818, 11.24536 ], [ 92.6884, 11.24531 ], [ 92.68855, 11.24532 ], [ 92.68858, 11.24537 ], [ 92.68847, 11.24542 ], [ 92.68842, 11.24542 ], [ 92.68837, 11.24549 ], [ 92.68842, 11.24555 ], [ 92.68862, 11.24559 ], [ 92.68874, 11.24564 ], [ 92.68885, 11.24576 ], [ 92.68885, 11.24594 ], [ 92.6888, 11.24609 ], [ 92.68864, 11.24626 ], [ 92.68849, 11.24635 ], [ 92.68842, 11.24636 ], [ 92.68815, 11.24626 ], [ 92.68802, 11.24632 ], [ 92.68818, 11.2465 ], [ 92.68832, 11.24656 ], [ 92.68843, 11.24656 ], [ 92.68864, 11.24665 ], [ 92.6888, 11.24677 ], [ 92.68889, 11.24702 ], [ 92.689, 11.24715 ], [ 92.68908, 11.24731 ], [ 92.68919, 11.24743 ], [ 92.68961, 11.24771 ], [ 92.68973, 11.24784 ], [ 92.68981, 11.24797 ], [ 92.69004, 11.24812 ], [ 92.69024, 11.24832 ], [ 92.69032, 11.24846 ], [ 92.69034, 11.24872 ], [ 92.69028, 11.24907 ], [ 92.68993, 11.24906 ], [ 92.68993, 11.24914 ], [ 92.68999, 11.24922 ], [ 92.69009, 11.24929 ], [ 92.6903, 11.24937 ], [ 92.69061, 11.24964 ], [ 92.69064, 11.2498 ], [ 92.690706666666671, 11.2499 ], [ 92.69074, 11.24995 ], [ 92.690804615384621, 11.2501 ] ] ], [ [ [ 92.7120346, 11.3031929 ], [ 92.7119346, 11.3031729 ], [ 92.7118246, 11.3032529 ], [ 92.7115646, 11.3032729 ], [ 92.7111146, 11.3030029 ], [ 92.7109346, 11.3026929 ], [ 92.7106646, 11.3023829 ], [ 92.7103646, 11.3019029 ], [ 92.7101346, 11.3016729 ], [ 92.7100846, 11.3016529 ], [ 92.7096346, 11.3013029 ], [ 92.7093746, 11.3013329 ], [ 92.7091846, 11.3014529 ], [ 92.7089646, 11.3016329 ], [ 92.7088146, 11.3019229 ], [ 92.7086246, 11.3022029 ], [ 92.7081946, 11.3025329 ], [ 92.7077046, 11.3030529 ], [ 92.7070346, 11.3036829 ], [ 92.7068346, 11.3038429 ], [ 92.7065546, 11.3038229 ], [ 92.7063246, 11.3038429 ], [ 92.7060946, 11.3040229 ], [ 92.7060546, 11.3041729 ], [ 92.7061046, 11.3043629 ], [ 92.7062046, 11.3045329 ], [ 92.7061946, 11.3046829 ], [ 92.7058646, 11.3050529 ], [ 92.7053446, 11.3057629 ], [ 92.7046546, 11.3065129 ], [ 92.7041546, 11.3069229 ], [ 92.7037546, 11.3073029 ], [ 92.7033246, 11.3076229 ], [ 92.7029746, 11.3077829 ], [ 92.7027346, 11.3079829 ], [ 92.7022846, 11.3082829 ], [ 92.7016246, 11.3086329 ], [ 92.7006546, 11.3090529 ], [ 92.7004046, 11.3090529 ], [ 92.7002246, 11.3089629 ], [ 92.7001346, 11.3088829 ], [ 92.6999946, 11.3088229 ], [ 92.6997546, 11.3088829 ], [ 92.6992246, 11.3090829 ], [ 92.6990546, 11.3090829 ], [ 92.6987946, 11.3090429 ], [ 92.6986746, 11.3089929 ], [ 92.6985346, 11.3088129 ], [ 92.6983746, 11.3087829 ], [ 92.6981946, 11.3088129 ], [ 92.6980546, 11.3090029 ], [ 92.6979246, 11.3092429 ], [ 92.6978346, 11.3095729 ], [ 92.6978746, 11.3098229 ], [ 92.6981146, 11.3100529 ], [ 92.6984146, 11.3102029 ], [ 92.6986446, 11.3102629 ], [ 92.6986746, 11.3103429 ], [ 92.6988046, 11.3105329 ], [ 92.6991946, 11.3107329 ], [ 92.7000346, 11.3109229 ], [ 92.7002046, 11.3109329 ], [ 92.7005146, 11.3108729 ], [ 92.7007646, 11.3107529 ], [ 92.7012846, 11.3102829 ], [ 92.7013946, 11.3100829 ], [ 92.7014046, 11.3099829 ], [ 92.7013046, 11.3097629 ], [ 92.7012846, 11.3095429 ], [ 92.7014046, 11.3093429 ], [ 92.7017746, 11.3091829 ], [ 92.7019546, 11.3089729 ], [ 92.7020746, 11.3087529 ], [ 92.7024746, 11.3084729 ], [ 92.7030146, 11.3083329 ], [ 92.7036946, 11.3082029 ], [ 92.7043646, 11.3081629 ], [ 92.7054846, 11.3084229 ], [ 92.7057246, 11.3083829 ], [ 92.7063046, 11.3078329 ], [ 92.7066246, 11.3076329 ], [ 92.7068846, 11.3075629 ], [ 92.7076046, 11.3076029 ], [ 92.7084446, 11.3078429 ], [ 92.7098346, 11.3080129 ], [ 92.710332, 11.308198 ], [ 92.7107083, 11.3085345 ], [ 92.7113895, 11.3091611 ], [ 92.7118936, 11.3096002 ], [ 92.7125133, 11.3101793 ], [ 92.7127276, 11.3105464 ], [ 92.7129459, 11.3108637 ], [ 92.7132176, 11.3111513 ], [ 92.71361, 11.3117 ], [ 92.713921, 11.31215 ], [ 92.71412, 11.31276 ], [ 92.71435, 11.3136 ], [ 92.71458, 11.31409 ], [ 92.71479, 11.31435 ], [ 92.71489, 11.31473 ], [ 92.71505, 11.31507 ], [ 92.71542, 11.3156 ], [ 92.71557, 11.31624 ], [ 92.71566, 11.31697 ], [ 92.71565, 11.31755 ], [ 92.71558, 11.31779 ], [ 92.71546, 11.31839 ], [ 92.71536, 11.31854 ], [ 92.71522, 11.31869 ], [ 92.7151, 11.31911 ], [ 92.71494, 11.31935 ], [ 92.71463, 11.31968 ], [ 92.71444, 11.31984 ], [ 92.71441, 11.32007 ], [ 92.71447, 11.32043 ], [ 92.71447, 11.3206 ], [ 92.7144, 11.32063 ], [ 92.71437, 11.32071 ], [ 92.71438, 11.32088 ], [ 92.71444, 11.32105 ], [ 92.71467, 11.32109 ], [ 92.71504, 11.321 ], [ 92.71518, 11.32106 ], [ 92.71519, 11.32118 ], [ 92.71523, 11.32127 ], [ 92.71537, 11.32133 ], [ 92.71549, 11.32132 ], [ 92.71576, 11.32137 ], [ 92.71587, 11.32197 ], [ 92.71613, 11.32232 ], [ 92.71638, 11.32246 ], [ 92.71673, 11.32249 ], [ 92.71686, 11.32255 ], [ 92.71701, 11.32275 ], [ 92.71717, 11.32278 ], [ 92.71737, 11.3227 ], [ 92.71759, 11.32271 ], [ 92.71776, 11.32286 ], [ 92.71794, 11.3231 ], [ 92.71818, 11.32363 ], [ 92.71825, 11.324 ], [ 92.71823, 11.32456 ], [ 92.71828, 11.32467 ], [ 92.71831, 11.32493 ], [ 92.71825, 11.32514 ], [ 92.71825, 11.32529 ], [ 92.71832, 11.32537 ], [ 92.71873, 11.32544 ], [ 92.71886, 11.32553 ], [ 92.71895, 11.32565 ], [ 92.71901, 11.32582 ], [ 92.71905, 11.32604 ], [ 92.71904, 11.32646 ], [ 92.71892, 11.32662 ], [ 92.71878, 11.32689 ], [ 92.71868, 11.327 ], [ 92.71853, 11.32708 ], [ 92.71848, 11.3272 ], [ 92.71847, 11.32739 ], [ 92.71839, 11.32756 ], [ 92.71823, 11.3277 ], [ 92.71811, 11.3279 ], [ 92.71805, 11.32836 ], [ 92.71804, 11.32863 ], [ 92.71814, 11.32894 ], [ 92.71829, 11.32926 ], [ 92.71843, 11.32952 ], [ 92.71845, 11.32968 ], [ 92.71852, 11.3298 ], [ 92.71865, 11.3298 ], [ 92.71877, 11.32986 ], [ 92.71888, 11.32996 ], [ 92.71893, 11.33011 ], [ 92.71918, 11.33037 ], [ 92.71924, 11.33051 ], [ 92.71934, 11.33058 ], [ 92.71934, 11.33083 ], [ 92.71962, 11.331 ], [ 92.71979, 11.33118 ], [ 92.71991, 11.33143 ], [ 92.71996, 11.33159 ], [ 92.7201, 11.33173 ], [ 92.72033, 11.33179 ], [ 92.7206, 11.3318 ], [ 92.72098, 11.33192 ], [ 92.72123, 11.33209 ], [ 92.72234, 11.33301 ], [ 92.72245, 11.33318 ], [ 92.72254, 11.33317 ], [ 92.72263, 11.33312 ], [ 92.72289, 11.3329 ], [ 92.72326, 11.33282 ], [ 92.72346, 11.3326 ], [ 92.72363, 11.33249 ], [ 92.72378, 11.33232 ], [ 92.72386, 11.33211 ], [ 92.72388, 11.33144 ], [ 92.72407, 11.33107 ], [ 92.72393, 11.33085 ], [ 92.72388, 11.33062 ], [ 92.72411, 11.33009 ], [ 92.72412, 11.32985 ], [ 92.72389, 11.32949 ], [ 92.72367, 11.3288 ], [ 92.72363, 11.32876 ], [ 92.7234, 11.3282 ], [ 92.72319, 11.32748 ], [ 92.72317, 11.32727 ], [ 92.72324, 11.32704 ], [ 92.72323, 11.32687 ], [ 92.72306, 11.32659 ], [ 92.72292, 11.32629 ], [ 92.72285, 11.32592 ], [ 92.72261, 11.32536 ], [ 92.72246, 11.32505 ], [ 92.72242, 11.32462 ], [ 92.72245, 11.32433 ], [ 92.72253, 11.32421 ], [ 92.72253, 11.32401 ], [ 92.72243, 11.32386 ], [ 92.72239, 11.32366 ], [ 92.72245, 11.32304 ], [ 92.72269, 11.32276 ], [ 92.72279, 11.3226 ], [ 92.72287, 11.3223 ], [ 92.72319, 11.32197 ], [ 92.7232, 11.32177 ], [ 92.72316, 11.32163 ], [ 92.72307, 11.32151 ], [ 92.723, 11.32135 ], [ 92.72355, 11.31937 ], [ 92.72368, 11.31909 ], [ 92.7237, 11.31885 ], [ 92.72378, 11.31868 ], [ 92.72382, 11.31851 ], [ 92.72376, 11.31781 ], [ 92.72365, 11.31742 ], [ 92.72348, 11.31703 ], [ 92.72311, 11.31654 ], [ 92.72296, 11.31623 ], [ 92.72279, 11.316 ], [ 92.72263, 11.31587 ], [ 92.72247, 11.31579 ], [ 92.72222, 11.31549 ], [ 92.72189, 11.31526 ], [ 92.7216, 11.31501 ], [ 92.7214, 11.31489 ], [ 92.72122, 11.31486 ], [ 92.72112, 11.31482 ], [ 92.72081, 11.3148 ], [ 92.72055, 11.31491 ], [ 92.72031, 11.31516 ], [ 92.72012, 11.31553 ], [ 92.71987, 11.31626 ], [ 92.71949, 11.31658 ], [ 92.71927, 11.3167 ], [ 92.71922, 11.31669 ], [ 92.71888, 11.31674 ], [ 92.71826, 11.31666 ], [ 92.71788, 11.31655 ], [ 92.71734, 11.31619 ], [ 92.71711, 11.31574 ], [ 92.71705, 11.31532 ], [ 92.71706, 11.31496 ], [ 92.71689, 11.31471 ], [ 92.71676, 11.31444 ], [ 92.71643, 11.31348 ], [ 92.71641, 11.31347 ], [ 92.71634, 11.31327 ], [ 92.71637, 11.31274 ], [ 92.71644, 11.3123 ], [ 92.7164, 11.31173 ], [ 92.71633, 11.31147 ], [ 92.7163, 11.31086 ], [ 92.71621, 11.31062 ], [ 92.71603, 11.3105 ], [ 92.71598, 11.31036 ], [ 92.71595, 11.31014 ], [ 92.71604, 11.30977 ], [ 92.71599, 11.30965 ], [ 92.7158, 11.30958 ], [ 92.71559, 11.30954 ], [ 92.71534, 11.30945 ], [ 92.71514, 11.30916 ], [ 92.71494, 11.30898 ], [ 92.71469, 11.30887 ], [ 92.71445, 11.30882 ], [ 92.71425, 11.30882 ], [ 92.714, 11.30892 ], [ 92.71387, 11.30901 ], [ 92.71355, 11.30929 ], [ 92.71341, 11.30932 ], [ 92.712482, 11.309238 ], [ 92.712102, 11.309078 ], [ 92.711602, 11.308688 ], [ 92.711292, 11.308348 ], [ 92.7110565, 11.3078525 ], [ 92.7109597, 11.3069856 ], [ 92.7109777, 11.3065738 ], [ 92.7109167, 11.306168 ], [ 92.7109798, 11.3059301 ], [ 92.7111905, 11.3055591 ], [ 92.711397, 11.3051381 ], [ 92.7113732, 11.3047928 ], [ 92.7113973, 11.3046729 ], [ 92.7113946, 11.3046129 ], [ 92.7114318, 11.3044077 ], [ 92.7114473, 11.3041778 ], [ 92.7115784, 11.303937 ], [ 92.7118746, 11.3036829 ], [ 92.7120346, 11.3034229 ], [ 92.7120346, 11.3031929 ] ] ], [ [ [ 92.67921, 12.5241 ], [ 92.67916, 12.52285 ], [ 92.67887, 12.52242 ], [ 92.67843, 12.52204 ], [ 92.67783, 12.52204 ], [ 92.67723, 12.52224 ], [ 92.67658, 12.52278 ], [ 92.67598, 12.52356 ], [ 92.67546, 12.52392 ], [ 92.67473, 12.5243 ], [ 92.67411, 12.52448 ], [ 92.67299, 12.52539 ], [ 92.6721, 12.52677 ], [ 92.67035, 12.5288 ], [ 92.66995, 12.52922 ], [ 92.66933, 12.53024 ], [ 92.66907, 12.53128 ], [ 92.6687, 12.53241 ], [ 92.66834, 12.53384 ], [ 92.66834, 12.53468 ], [ 92.66878, 12.53552 ], [ 92.66958, 12.53691 ], [ 92.67057, 12.53849 ], [ 92.6714, 12.54005 ], [ 92.67185, 12.54096 ], [ 92.67195, 12.54161 ], [ 92.67234, 12.54222 ], [ 92.67292, 12.54227 ], [ 92.67375, 12.54227 ], [ 92.67508, 12.54191 ], [ 92.67628, 12.54171 ], [ 92.67818, 12.54115 ], [ 92.6788, 12.54103 ], [ 92.68039, 12.54103 ], [ 92.68141, 12.5411 ], [ 92.68245, 12.5409 ], [ 92.68339, 12.54047 ], [ 92.68391, 12.54001 ], [ 92.68453, 12.53933 ], [ 92.68469, 12.53877 ], [ 92.68407, 12.53818 ], [ 92.68302, 12.53742 ], [ 92.68245, 12.53683 ], [ 92.68237, 12.53632 ], [ 92.68258, 12.53587 ], [ 92.68258, 12.53518 ], [ 92.68248, 12.53431 ], [ 92.68204, 12.53352 ], [ 92.68154, 12.53278 ], [ 92.68128, 12.53209 ], [ 92.67968, 12.52813 ], [ 92.67931, 12.52616 ], [ 92.67921, 12.5241 ] ] ], [ [ [ 92.8803166, 12.3836241 ], [ 92.8792567, 12.3841631 ], [ 92.8785379, 12.3841453 ], [ 92.8783513, 12.383644 ], [ 92.8782113, 12.3831882 ], [ 92.8778847, 12.3827629 ], [ 92.877247, 12.3828084 ], [ 92.8753027, 12.3835136 ], [ 92.8736851, 12.3841212 ], [ 92.8727519, 12.3845466 ], [ 92.871747, 12.3832074 ], [ 92.8704712, 12.3816605 ], [ 92.8695166, 12.3804144 ], [ 92.8688945, 12.379199 ], [ 92.867899, 12.3779836 ], [ 92.8665925, 12.3782267 ], [ 92.8633221, 12.3795601 ], [ 92.8613847, 12.3807832 ], [ 92.8611358, 12.3812694 ], [ 92.8609647, 12.3818315 ], [ 92.8607314, 12.3823328 ], [ 92.8602803, 12.3831076 ], [ 92.8599693, 12.383533 ], [ 92.8598915, 12.3844597 ], [ 92.8602648, 12.3847332 ], [ 92.8610186, 12.3858585 ], [ 92.8610736, 12.386084 ], [ 92.8610736, 12.3866856 ], [ 92.8612336, 12.387958 ], [ 92.8597404, 12.389538 ], [ 92.855851, 12.3891513 ], [ 92.8543267, 12.3898197 ], [ 92.8533624, 12.3903058 ], [ 92.8522114, 12.3914908 ], [ 92.8512471, 12.3927669 ], [ 92.8501894, 12.3936176 ], [ 92.8488206, 12.3941949 ], [ 92.8471408, 12.3948633 ], [ 92.8459276, 12.3948937 ], [ 92.8446833, 12.395076 ], [ 92.8439493, 12.3996977 ], [ 92.8433553, 12.4014593 ], [ 92.8447411, 12.4035862 ], [ 92.8461489, 12.4056485 ], [ 92.8470948, 12.4064649 ], [ 92.8491185, 12.4073887 ], [ 92.8514581, 12.4081668 ], [ 92.8523913, 12.4083187 ], [ 92.85418, 12.4087289 ], [ 92.8552999, 12.4084706 ], [ 92.8575459, 12.4079051 ], [ 92.8621499, 12.4058391 ], [ 92.863892, 12.4035301 ], [ 92.871109, 12.4046239 ], [ 92.8739709, 12.4048669 ], [ 92.8748419, 12.4034086 ], [ 92.8762107, 12.4010996 ], [ 92.8780772, 12.3997627 ], [ 92.8819345, 12.3981829 ], [ 92.8847965, 12.3998843 ], [ 92.88458, 12.4027744 ], [ 92.8848289, 12.4039744 ], [ 92.88486, 12.4058088 ], [ 92.8875353, 12.4079963 ], [ 92.8900897, 12.4071327 ], [ 92.8899652, 12.4037299 ], [ 92.8900897, 12.4008133 ], [ 92.8924539, 12.4006917 ], [ 92.8938373, 12.3987357 ], [ 92.8927175, 12.395819 ], [ 92.8910376, 12.3938441 ], [ 92.8910376, 12.3928111 ], [ 92.8892645, 12.391535 ], [ 92.8869314, 12.3908058 ], [ 92.8847538, 12.3894386 ], [ 92.8831673, 12.3879802 ], [ 92.8836381, 12.3863527 ], [ 92.88388, 12.3839249 ], [ 92.8841, 12.3826573 ], [ 92.8846499, 12.3820557 ], [ 92.8852878, 12.3811963 ], [ 92.8855738, 12.3795849 ], [ 92.8850678, 12.3778017 ], [ 92.8849579, 12.3762977 ], [ 92.8847379, 12.3751375 ], [ 92.883792, 12.3744929 ], [ 92.8826922, 12.3742781 ], [ 92.8818343, 12.3745574 ], [ 92.8820323, 12.37662 ], [ 92.8820763, 12.3775009 ], [ 92.8821643, 12.3782314 ], [ 92.8821863, 12.3793056 ], [ 92.8820103, 12.3804873 ], [ 92.8815484, 12.3815831 ], [ 92.8811084, 12.3825284 ], [ 92.8803166, 12.3836241 ] ] ], [ [ [ 92.93, 12.36142 ], [ 92.92984, 12.36181 ], [ 92.92906, 12.36233 ], [ 92.92799, 12.36282 ], [ 92.92646, 12.36316 ], [ 92.92543, 12.36352 ], [ 92.92348, 12.36413 ], [ 92.92277, 12.36462 ], [ 92.92161, 12.36489 ], [ 92.92017, 12.36511 ], [ 92.91948, 12.36544 ], [ 92.91882, 12.36639 ], [ 92.91832, 12.3681 ], [ 92.91823, 12.36887 ], [ 92.91854, 12.37 ], [ 92.9191, 12.37276 ], [ 92.9192, 12.37472 ], [ 92.91972, 12.37612 ], [ 92.92066, 12.37738 ], [ 92.92141, 12.37826 ], [ 92.921952, 12.3798076 ], [ 92.9229162, 12.3814608 ], [ 92.92417, 12.38208 ], [ 92.92479, 12.38324 ], [ 92.9257, 12.38452 ], [ 92.92658, 12.38559 ], [ 92.92733, 12.38581 ], [ 92.92817, 12.38559 ], [ 92.92883, 12.38526 ], [ 92.92971, 12.38504 ], [ 92.93021, 12.3852 ], [ 92.93033, 12.38569 ], [ 92.93008, 12.38608 ], [ 92.9293, 12.38712 ], [ 92.92849, 12.38807 ], [ 92.92799, 12.38987 ], [ 92.92645, 12.39228 ], [ 92.92573, 12.39234 ], [ 92.92489, 12.39176 ], [ 92.92457, 12.3925 ], [ 92.92482, 12.39396 ], [ 92.92529, 12.39619 ], [ 92.92627, 12.40061 ], [ 92.92664, 12.40348 ], [ 92.92799, 12.40712 ], [ 92.92876, 12.40955 ], [ 92.92954, 12.4112 ], [ 92.93011, 12.41282 ], [ 92.93142, 12.41503 ], [ 92.93148, 12.41628 ], [ 92.93258, 12.41747 ], [ 92.93418, 12.41906 ], [ 92.93552, 12.41979 ], [ 92.9363, 12.42007 ], [ 92.93696, 12.42062 ], [ 92.93752, 12.4208 ], [ 92.93824, 12.42053 ], [ 92.93868, 12.42062 ], [ 92.93931, 12.42117 ], [ 92.93997, 12.42135 ], [ 92.9405, 12.42135 ], [ 92.94148, 12.42092 ], [ 92.94303, 12.42033 ], [ 92.94434, 12.41946 ], [ 92.94562, 12.41841 ], [ 92.94628, 12.41757 ], [ 92.94669, 12.41629 ], [ 92.94699, 12.41498 ], [ 92.94735, 12.41431 ], [ 92.94794, 12.41414 ], [ 92.94887, 12.4144 ], [ 92.94937, 12.41504 ], [ 92.9494, 12.41577 ], [ 92.9494, 12.41728 ], [ 92.94934, 12.41931 ], [ 92.94913, 12.42202 ], [ 92.94928, 12.42356 ], [ 92.94953, 12.42488 ], [ 92.95007, 12.4268 ], [ 92.95004, 12.42794 ], [ 92.95019, 12.42872 ], [ 92.95075, 12.42916 ], [ 92.95162, 12.42924 ], [ 92.9523, 12.42933 ], [ 92.9531, 12.42971 ], [ 92.95367, 12.43032 ], [ 92.95397, 12.43157 ], [ 92.95412, 12.43264 ], [ 92.95459, 12.43387 ], [ 92.95534, 12.43494 ], [ 92.95561, 12.43514 ], [ 92.9559, 12.43471 ], [ 92.95608, 12.43387 ], [ 92.95626, 12.4323 ], [ 92.95593, 12.43055 ], [ 92.95587, 12.42843 ], [ 92.95623, 12.42736 ], [ 92.95677, 12.42587 ], [ 92.95718, 12.42445 ], [ 92.95769, 12.42401 ], [ 92.95858, 12.4234 ], [ 92.9598, 12.42247 ], [ 92.96019, 12.42171 ], [ 92.96013, 12.42133 ], [ 92.95989, 12.42069 ], [ 92.95977, 12.42005 ], [ 92.95935, 12.41907 ], [ 92.95894, 12.4177 ], [ 92.9581, 12.41709 ], [ 92.95801, 12.417 ], [ 92.95712, 12.4166 ], [ 92.95611, 12.41607 ], [ 92.9553, 12.41523 ], [ 92.95429, 12.41395 ], [ 92.95339, 12.41241 ], [ 92.95274, 12.40959 ], [ 92.95229, 12.40881 ], [ 92.95131, 12.40872 ], [ 92.95029, 12.4084 ], [ 92.94901, 12.40776 ], [ 92.94799, 12.40741 ], [ 92.94689, 12.40727 ], [ 92.94591, 12.4066 ], [ 92.94457, 12.40494 ], [ 92.94341, 12.40264 ], [ 92.94296, 12.40081 ], [ 92.9429, 12.39933 ], [ 92.9432, 12.39735 ], [ 92.94308, 12.39581 ], [ 92.9426, 12.39337 ], [ 92.94236, 12.38975 ], [ 92.94245, 12.38783 ], [ 92.94296, 12.38554 ], [ 92.94248, 12.3835 ], [ 92.94209, 12.38228 ], [ 92.94144, 12.3815 ], [ 92.94069, 12.38094 ], [ 92.9389, 12.37969 ], [ 92.93798, 12.37844 ], [ 92.93691, 12.3764 ], [ 92.93589, 12.37361 ], [ 92.93542, 12.36985 ], [ 92.93452, 12.3664 ], [ 92.93381, 12.36404 ], [ 92.93315, 12.36195 ], [ 92.93199, 12.36023 ], [ 92.93143, 12.35912 ], [ 92.93104, 12.35904 ], [ 92.93086, 12.35933 ], [ 92.93047, 12.36044 ], [ 92.93, 12.36142 ] ] ], [ [ [ 92.7163, 12.72085 ], [ 92.71607, 12.72108 ], [ 92.71579, 12.72114 ], [ 92.7155, 12.72111 ], [ 92.71506, 12.72085 ], [ 92.71464, 12.7207 ], [ 92.714, 12.72038 ], [ 92.71383, 12.72035 ], [ 92.71324, 12.72015 ], [ 92.71267, 12.72021 ], [ 92.71241, 12.72039 ], [ 92.71221, 12.72074 ], [ 92.71203, 12.72137 ], [ 92.71202, 12.72156 ], [ 92.71196, 12.7218 ], [ 92.71179, 12.72204 ], [ 92.71113, 12.72235 ], [ 92.71107, 12.72246 ], [ 92.71112, 12.72297 ], [ 92.71112, 12.72322 ], [ 92.71086, 12.72341 ], [ 92.71058, 12.72356 ], [ 92.71057, 12.72401 ], [ 92.71069, 12.72429 ], [ 92.711, 12.72475 ], [ 92.71087, 12.72518 ], [ 92.71083, 12.72576 ], [ 92.71144, 12.7276 ], [ 92.7116, 12.72866 ], [ 92.71153, 12.7289 ], [ 92.71149, 12.72894 ], [ 92.71112, 12.72908 ], [ 92.71072, 12.72891 ], [ 92.71033, 12.72856 ], [ 92.71004, 12.72814 ], [ 92.71002, 12.72808 ], [ 92.70973, 12.72794 ], [ 92.70966, 12.72788 ], [ 92.70935, 12.72791 ], [ 92.7093, 12.72886 ], [ 92.70898, 12.7297 ], [ 92.7086, 12.72997 ], [ 92.70833, 12.73009 ], [ 92.70796, 12.73013 ], [ 92.70773, 12.73001 ], [ 92.70759, 12.7299 ], [ 92.70733, 12.72957 ], [ 92.70719, 12.72896 ], [ 92.70722, 12.72831 ], [ 92.707, 12.728 ], [ 92.7066, 12.72793 ], [ 92.70644, 12.72839 ], [ 92.70648, 12.72845 ], [ 92.70648, 12.72898 ], [ 92.70627, 12.72886 ], [ 92.70603, 12.7286 ], [ 92.70559, 12.72791 ], [ 92.70534, 12.72747 ], [ 92.70526, 12.72694 ], [ 92.70499, 12.72692 ], [ 92.70478, 12.72749 ], [ 92.70476, 12.72856 ], [ 92.70501, 12.73084 ], [ 92.70495, 12.73265 ], [ 92.70526, 12.73414 ], [ 92.70614, 12.73582 ], [ 92.70698, 12.7366 ], [ 92.7081, 12.73711 ], [ 92.70862, 12.73732 ], [ 92.70881, 12.73729 ], [ 92.7089, 12.73701 ], [ 92.70869, 12.7363 ], [ 92.70871, 12.73573 ], [ 92.70893, 12.73506 ], [ 92.70929, 12.73464 ], [ 92.70978, 12.73436 ], [ 92.71028, 12.73445 ], [ 92.71118, 12.73585 ], [ 92.71158, 12.73778 ], [ 92.71127, 12.7415 ], [ 92.71108, 12.74469 ], [ 92.71107, 12.74869 ], [ 92.71135, 12.75234 ], [ 92.7113, 12.75311 ], [ 92.71048, 12.75522 ], [ 92.71008, 12.75665 ], [ 92.70965, 12.75947 ], [ 92.70958, 12.76259 ], [ 92.70914, 12.76456 ], [ 92.70885, 12.76534 ], [ 92.70837, 12.7658 ], [ 92.70784, 12.76659 ], [ 92.70757, 12.76725 ], [ 92.70779, 12.76811 ], [ 92.70822, 12.76893 ], [ 92.70858, 12.77022 ], [ 92.70885, 12.77177 ], [ 92.70866, 12.77325 ], [ 92.70812, 12.77585 ], [ 92.70789, 12.77636 ], [ 92.70775, 12.77649 ], [ 92.7071, 12.77688 ], [ 92.70631, 12.77725 ], [ 92.70577, 12.778 ], [ 92.70397, 12.78007 ], [ 92.70317, 12.78071 ], [ 92.70242, 12.78119 ], [ 92.70198, 12.78121 ], [ 92.7014, 12.78115 ], [ 92.70069, 12.78122 ], [ 92.70027, 12.7816 ], [ 92.70012, 12.78209 ], [ 92.70022, 12.78237 ], [ 92.70057, 12.7828 ], [ 92.70082, 12.78305 ], [ 92.70093, 12.78305 ], [ 92.7012, 12.7831 ], [ 92.70135, 12.7831 ], [ 92.70168, 12.78304 ], [ 92.70234, 12.78304 ], [ 92.70238, 12.78306 ], [ 92.70256, 12.78333 ], [ 92.70257, 12.78363 ], [ 92.70213, 12.78413 ], [ 92.70186, 12.78455 ], [ 92.70145, 12.78475 ], [ 92.70106, 12.78475 ], [ 92.7007, 12.78459 ], [ 92.7003, 12.78416 ], [ 92.69993, 12.78357 ], [ 92.69965, 12.78337 ], [ 92.69913, 12.78345 ], [ 92.69865, 12.78377 ], [ 92.69821, 12.78439 ], [ 92.69784, 12.78538 ], [ 92.69692, 12.78709 ], [ 92.69665, 12.78783 ], [ 92.69657, 12.78913 ], [ 92.69677, 12.78939 ], [ 92.69706, 12.78959 ], [ 92.69708, 12.78991 ], [ 92.69636, 12.79063 ], [ 92.69574, 12.79101 ], [ 92.69526, 12.79143 ], [ 92.69495, 12.79186 ], [ 92.69451, 12.79273 ], [ 92.6938, 12.79365 ], [ 92.69339, 12.79487 ], [ 92.69295, 12.79736 ], [ 92.693, 12.79982 ], [ 92.69411, 12.80351 ], [ 92.6946, 12.80415 ], [ 92.69484, 12.80427 ], [ 92.6951, 12.80457 ], [ 92.69549, 12.80488 ], [ 92.69578, 12.80494 ], [ 92.69613, 12.80512 ], [ 92.69651, 12.80526 ], [ 92.69675, 12.80522 ], [ 92.69707, 12.80512 ], [ 92.69759, 12.80512 ], [ 92.698, 12.80516 ], [ 92.69824, 12.80532 ], [ 92.69845, 12.8054 ], [ 92.69912, 12.80553 ], [ 92.69935, 12.8056 ], [ 92.69965, 12.80563 ], [ 92.69987, 12.80553 ], [ 92.70003, 12.80554 ], [ 92.70026, 12.80567 ], [ 92.7007, 12.80619 ], [ 92.70104, 12.80693 ], [ 92.70123, 12.80725 ], [ 92.70145, 12.80744 ], [ 92.70142, 12.80766 ], [ 92.7012, 12.80778 ], [ 92.70087, 12.80788 ], [ 92.70089, 12.80801 ], [ 92.70106, 12.80819 ], [ 92.70112, 12.80822 ], [ 92.70128, 12.80837 ], [ 92.70135, 12.8084 ], [ 92.70147, 12.80854 ], [ 92.70134, 12.8087 ], [ 92.70116, 12.80864 ], [ 92.70089, 12.80851 ], [ 92.70067, 12.80836 ], [ 92.70046, 12.80818 ], [ 92.70019, 12.80818 ], [ 92.70017, 12.80837 ], [ 92.70077, 12.8089 ], [ 92.70107, 12.80929 ], [ 92.7011, 12.80947 ], [ 92.7009, 12.80959 ], [ 92.7007, 12.80991 ], [ 92.70072, 12.81022 ], [ 92.70092, 12.81038 ], [ 92.70113, 12.81043 ], [ 92.70138, 12.81054 ], [ 92.70187, 12.81086 ], [ 92.70205, 12.81114 ], [ 92.70211, 12.81139 ], [ 92.7021, 12.81179 ], [ 92.70216, 12.81219 ], [ 92.70229, 12.81276 ], [ 92.70224, 12.81321 ], [ 92.7022, 12.81331 ], [ 92.70224, 12.81348 ], [ 92.70253, 12.81367 ], [ 92.70292, 12.81387 ], [ 92.70308, 12.81408 ], [ 92.70303, 12.81435 ], [ 92.70254, 12.81448 ], [ 92.70258, 12.81471 ], [ 92.70283, 12.81505 ], [ 92.70327, 12.81523 ], [ 92.70358, 12.81527 ], [ 92.70371, 12.81526 ], [ 92.70396, 12.81519 ], [ 92.70424, 12.8152 ], [ 92.70453, 12.81532 ], [ 92.7048, 12.81548 ], [ 92.70551, 12.81627 ], [ 92.7059, 12.81683 ], [ 92.70605, 12.81735 ], [ 92.70608, 12.81761 ], [ 92.70626, 12.81787 ], [ 92.70647, 12.81797 ], [ 92.70661, 12.81815 ], [ 92.70665, 12.81834 ], [ 92.70656, 12.81843 ], [ 92.70653, 12.81855 ], [ 92.70652, 12.81876 ], [ 92.70656, 12.81904 ], [ 92.70668, 12.81932 ], [ 92.70668, 12.81961 ], [ 92.70671, 12.81988 ], [ 92.70689, 12.81999 ], [ 92.70698, 12.82011 ], [ 92.70694, 12.82054 ], [ 92.70694, 12.82089 ], [ 92.70702, 12.82145 ], [ 92.70698, 12.82191 ], [ 92.70684, 12.82201 ], [ 92.70679, 12.82222 ], [ 92.707, 12.82263 ], [ 92.70699, 12.82287 ], [ 92.70674, 12.82331 ], [ 92.70685, 12.82358 ], [ 92.70714, 12.82397 ], [ 92.70716, 12.82423 ], [ 92.7071, 12.82434 ], [ 92.70706, 12.82452 ], [ 92.70727, 12.82481 ], [ 92.70724, 12.82498 ], [ 92.70716, 12.82512 ], [ 92.70717, 12.82533 ], [ 92.70733, 12.82555 ], [ 92.70741, 12.82586 ], [ 92.70732, 12.82628 ], [ 92.70732, 12.82648 ], [ 92.70741, 12.82682 ], [ 92.70752, 12.82705 ], [ 92.70753, 12.82752 ], [ 92.70771, 12.8282 ], [ 92.7077, 12.82845 ], [ 92.70764, 12.82858 ], [ 92.70746, 12.82874 ], [ 92.70745, 12.82896 ], [ 92.70763, 12.82931 ], [ 92.70785, 12.82953 ], [ 92.70821, 12.82973 ], [ 92.70839, 12.8301 ], [ 92.70862, 12.83016 ], [ 92.70881, 12.83005 ], [ 92.70915, 12.82994 ], [ 92.70939, 12.82993 ], [ 92.70974, 12.82971 ], [ 92.71015, 12.82907 ], [ 92.7102, 12.82876 ], [ 92.71042, 12.82836 ], [ 92.71046, 12.82836 ], [ 92.71068, 12.82849 ], [ 92.71091, 12.82855 ], [ 92.71116, 12.82866 ], [ 92.71141, 12.82885 ], [ 92.71197, 12.82909 ], [ 92.71222, 12.82945 ], [ 92.71238, 12.82964 ], [ 92.71263, 12.82958 ], [ 92.71293, 12.82943 ], [ 92.71334, 12.82918 ], [ 92.71357, 12.8292 ], [ 92.71387, 12.82937 ], [ 92.71407, 12.8294 ], [ 92.71436, 12.82937 ], [ 92.71465, 12.82917 ], [ 92.71497, 12.82889 ], [ 92.71518, 12.82842 ], [ 92.71526, 12.82772 ], [ 92.71515, 12.827 ], [ 92.71472, 12.82556 ], [ 92.71429, 12.82502 ], [ 92.71397, 12.82402 ], [ 92.71386, 12.82292 ], [ 92.71367, 12.82235 ], [ 92.71332, 12.82203 ], [ 92.71334, 12.82182 ], [ 92.71349, 12.8216 ], [ 92.71351, 12.8209 ], [ 92.71313, 12.81982 ], [ 92.71287, 12.8185 ], [ 92.71276, 12.81741 ], [ 92.71268, 12.81612 ], [ 92.71283, 12.81515 ], [ 92.71301, 12.81218 ], [ 92.71286, 12.81035 ], [ 92.71267, 12.80736 ], [ 92.71272, 12.80614 ], [ 92.71256, 12.80534 ], [ 92.71267, 12.80335 ], [ 92.71267, 12.80276 ], [ 92.71256, 12.8022 ], [ 92.71278, 12.79902 ], [ 92.71283, 12.79768 ], [ 92.71279, 12.79705 ], [ 92.71289, 12.79631 ], [ 92.71301, 12.79448 ], [ 92.71316, 12.79314 ], [ 92.71334, 12.79234 ], [ 92.71355, 12.79107 ], [ 92.71369, 12.78983 ], [ 92.71376, 12.78899 ], [ 92.71377, 12.78761 ], [ 92.71367, 12.78683 ], [ 92.71372, 12.78568 ], [ 92.71362, 12.78512 ], [ 92.71344, 12.78445 ], [ 92.7132, 12.78375 ], [ 92.71309, 12.78336 ], [ 92.7131, 12.78247 ], [ 92.713, 12.78185 ], [ 92.71288, 12.78152 ], [ 92.71279, 12.78093 ], [ 92.71264, 12.78037 ], [ 92.71221, 12.77806 ], [ 92.71219, 12.77742 ], [ 92.71229, 12.77691 ], [ 92.71254, 12.77628 ], [ 92.71289, 12.77549 ], [ 92.71305, 12.7752 ], [ 92.71305, 12.77498 ], [ 92.71293, 12.77471 ], [ 92.71292, 12.77449 ], [ 92.71283, 12.77431 ], [ 92.7129, 12.77413 ], [ 92.71305, 12.77398 ], [ 92.7133, 12.7736 ], [ 92.71361, 12.773 ], [ 92.71407, 12.77255 ], [ 92.71445, 12.77225 ], [ 92.71482, 12.772 ], [ 92.7155, 12.77091 ], [ 92.71601, 12.7704 ], [ 92.7167, 12.76983 ], [ 92.71715, 12.76951 ], [ 92.71718, 12.76925 ], [ 92.71726, 12.76897 ], [ 92.71736, 12.76874 ], [ 92.71782, 12.7684 ], [ 92.71867, 12.76716 ], [ 92.71895, 12.76679 ], [ 92.7193, 12.76608 ], [ 92.71993, 12.76492 ], [ 92.7206, 12.76379 ], [ 92.72178, 12.76143 ], [ 92.72198, 12.76086 ], [ 92.72276, 12.75908 ], [ 92.72318, 12.75824 ], [ 92.72343, 12.75752 ], [ 92.72383, 12.75654 ], [ 92.72464, 12.75471 ], [ 92.72488, 12.75438 ], [ 92.72491, 12.75393 ], [ 92.72472, 12.7534 ], [ 92.72462, 12.75186 ], [ 92.72464, 12.75093 ], [ 92.7248, 12.75041 ], [ 92.72509, 12.74976 ], [ 92.72541, 12.74894 ], [ 92.72554, 12.74812 ], [ 92.72554, 12.7472 ], [ 92.72534, 12.74686 ], [ 92.72435, 12.74578 ], [ 92.72427, 12.74546 ], [ 92.72429, 12.74436 ], [ 92.72412, 12.74384 ], [ 92.72391, 12.74338 ], [ 92.7237, 12.74278 ], [ 92.72355, 12.74252 ], [ 92.72323, 12.74257 ], [ 92.72312, 12.74264 ], [ 92.72305, 12.74307 ], [ 92.72274, 12.74348 ], [ 92.7223, 12.74396 ], [ 92.72201, 12.74444 ], [ 92.7217, 12.74511 ], [ 92.72161, 12.74577 ], [ 92.7215, 12.74633 ], [ 92.72153, 12.74739 ], [ 92.72147, 12.74811 ], [ 92.72124, 12.74871 ], [ 92.72095, 12.74997 ], [ 92.72078, 12.75055 ], [ 92.72073, 12.75125 ], [ 92.7206, 12.75176 ], [ 92.72042, 12.75201 ], [ 92.72022, 12.7525 ], [ 92.71985, 12.75317 ], [ 92.7195, 12.75372 ], [ 92.71879, 12.75475 ], [ 92.71875, 12.75446 ], [ 92.71903, 12.75367 ], [ 92.71921, 12.75304 ], [ 92.71922, 12.75249 ], [ 92.71908, 12.75214 ], [ 92.71882, 12.75009 ], [ 92.71881, 12.74946 ], [ 92.71889, 12.74858 ], [ 92.71891, 12.74773 ], [ 92.71875, 12.74746 ], [ 92.71859, 12.74726 ], [ 92.71856, 12.74686 ], [ 92.7188, 12.74613 ], [ 92.71889, 12.74596 ], [ 92.71893, 12.74579 ], [ 92.71885, 12.74553 ], [ 92.71875, 12.74541 ], [ 92.71857, 12.74529 ], [ 92.71846, 12.74513 ], [ 92.71847, 12.74483 ], [ 92.71844, 12.7445 ], [ 92.71798, 12.74373 ], [ 92.71792, 12.74353 ], [ 92.71793, 12.7433 ], [ 92.71811, 12.74301 ], [ 92.71812, 12.74252 ], [ 92.71803, 12.74238 ], [ 92.71799, 12.74213 ], [ 92.71799, 12.74182 ], [ 92.71803, 12.74156 ], [ 92.71821, 12.74134 ], [ 92.71843, 12.7409 ], [ 92.71849, 12.74053 ], [ 92.71849, 12.74012 ], [ 92.71836, 12.73974 ], [ 92.71816, 12.73957 ], [ 92.71798, 12.73947 ], [ 92.71791, 12.73927 ], [ 92.71806, 12.7391 ], [ 92.71809, 12.73876 ], [ 92.71805, 12.73851 ], [ 92.71814, 12.73817 ], [ 92.71817, 12.73779 ], [ 92.71816, 12.73702 ], [ 92.71805, 12.7369 ], [ 92.71794, 12.7367 ], [ 92.71769, 12.73659 ], [ 92.71765, 12.73639 ], [ 92.71788, 12.73619 ], [ 92.7181, 12.73604 ], [ 92.71816, 12.73569 ], [ 92.71795, 12.73541 ], [ 92.71772, 12.73521 ], [ 92.71761, 12.73506 ], [ 92.71753, 12.7349 ], [ 92.71722, 12.73459 ], [ 92.71725, 12.7344 ], [ 92.7176, 12.73415 ], [ 92.71774, 12.73391 ], [ 92.71797, 12.73328 ], [ 92.71809, 12.73317 ], [ 92.71839, 12.73303 ], [ 92.71854, 12.73285 ], [ 92.71862, 12.73263 ], [ 92.71882, 12.73233 ], [ 92.719, 12.73211 ], [ 92.71922, 12.73194 ], [ 92.71929, 12.73178 ], [ 92.7193, 12.73161 ], [ 92.71909, 12.7316 ], [ 92.71881, 12.7317 ], [ 92.71854, 12.73168 ], [ 92.71835, 12.7317 ], [ 92.71804, 12.7317 ], [ 92.71762, 12.73184 ], [ 92.71749, 12.73177 ], [ 92.71762, 12.73144 ], [ 92.7177, 12.73132 ], [ 92.71777, 12.73112 ], [ 92.71777, 12.73087 ], [ 92.71757, 12.73052 ], [ 92.71747, 12.73045 ], [ 92.71736, 12.73033 ], [ 92.71739, 12.73017 ], [ 92.71755, 12.73004 ], [ 92.71777, 12.73001 ], [ 92.71794, 12.72983 ], [ 92.7183, 12.72972 ], [ 92.7189, 12.72971 ], [ 92.71929, 12.72961 ], [ 92.71945, 12.72954 ], [ 92.71965, 12.72939 ], [ 92.71972, 12.72924 ], [ 92.7197, 12.72907 ], [ 92.71959, 12.72898 ], [ 92.71942, 12.72894 ], [ 92.7192, 12.72904 ], [ 92.71899, 12.72907 ], [ 92.71889, 12.72886 ], [ 92.71916, 12.72849 ], [ 92.71926, 12.72824 ], [ 92.71937, 12.72721 ], [ 92.71937, 12.72576 ], [ 92.71935, 12.72529 ], [ 92.71929, 12.72495 ], [ 92.71925, 12.72453 ], [ 92.71943, 12.72428 ], [ 92.71945, 12.724 ], [ 92.71943, 12.72377 ], [ 92.71926, 12.72353 ], [ 92.71918, 12.72327 ], [ 92.71925, 12.72273 ], [ 92.71939, 12.72234 ], [ 92.71905, 12.72176 ], [ 92.71886, 12.72152 ], [ 92.71867, 12.72112 ], [ 92.71867, 12.72065 ], [ 92.71861, 12.7199 ], [ 92.71849, 12.71963 ], [ 92.71832, 12.71935 ], [ 92.71813, 12.71919 ], [ 92.71795, 12.71919 ], [ 92.71781, 12.71923 ], [ 92.71765, 12.71941 ], [ 92.7171, 12.71946 ], [ 92.71678, 12.71959 ], [ 92.71664, 12.71981 ], [ 92.7166, 12.72015 ], [ 92.71645, 12.7206 ], [ 92.7163, 12.72085 ] ] ], [ [ [ 92.72493, 12.7619 ], [ 92.72459, 12.76186 ], [ 92.72423, 12.76205 ], [ 92.72394, 12.76226 ], [ 92.72331, 12.76292 ], [ 92.72254, 12.76385 ], [ 92.72164, 12.76512 ], [ 92.7202, 12.76767 ], [ 92.71975, 12.76838 ], [ 92.7192, 12.76899 ], [ 92.71896, 12.76951 ], [ 92.71868, 12.77026 ], [ 92.71832, 12.77095 ], [ 92.71798, 12.77138 ], [ 92.71772, 12.77194 ], [ 92.71765, 12.7726 ], [ 92.718, 12.77313 ], [ 92.71854, 12.77376 ], [ 92.71871, 12.7743 ], [ 92.71872, 12.7751 ], [ 92.71885, 12.7758 ], [ 92.71912, 12.77624 ], [ 92.71945, 12.77654 ], [ 92.71982, 12.77694 ], [ 92.71992, 12.77775 ], [ 92.71937, 12.77833 ], [ 92.71893, 12.77844 ], [ 92.7182, 12.77838 ], [ 92.71613, 12.77833 ], [ 92.71525, 12.77822 ], [ 92.7149, 12.77827 ], [ 92.71478, 12.77858 ], [ 92.7148, 12.77908 ], [ 92.71514, 12.7797 ], [ 92.71528, 12.78018 ], [ 92.71544, 12.78087 ], [ 92.71568, 12.78117 ], [ 92.71654, 12.78159 ], [ 92.71742, 12.78238 ], [ 92.71763, 12.78287 ], [ 92.71757, 12.78394 ], [ 92.71715, 12.7851 ], [ 92.71713, 12.78579 ], [ 92.71674, 12.78664 ], [ 92.71694, 12.7872 ], [ 92.71726, 12.78782 ], [ 92.71754, 12.78792 ], [ 92.71783, 12.78786 ], [ 92.71823, 12.78728 ], [ 92.7187, 12.78673 ], [ 92.71966, 12.78544 ], [ 92.7203, 12.78391 ], [ 92.72095, 12.78199 ], [ 92.72159, 12.77957 ], [ 92.72195, 12.77797 ], [ 92.7223, 12.77612 ], [ 92.72241, 12.77411 ], [ 92.72302, 12.77228 ], [ 92.72311, 12.77208 ], [ 92.72358, 12.77009 ], [ 92.72379, 12.76894 ], [ 92.72406, 12.76786 ], [ 92.72429, 12.76659 ], [ 92.72433, 12.76554 ], [ 92.72466, 12.76382 ], [ 92.7249, 12.7627 ], [ 92.72498, 12.76213 ], [ 92.72493, 12.7619 ] ] ], [ [ [ 92.71265, 12.8342 ], [ 92.71262, 12.8343 ], [ 92.71294, 12.83461 ], [ 92.71309, 12.83467 ], [ 92.7131, 12.83472 ], [ 92.71306, 12.8348 ], [ 92.71299, 12.83481 ], [ 92.71287, 12.83478 ], [ 92.7127, 12.83466 ], [ 92.71242, 12.83454 ], [ 92.71183, 12.83462 ], [ 92.71165, 12.83461 ], [ 92.71147, 12.83456 ], [ 92.71126, 12.83445 ], [ 92.71106, 12.83425 ], [ 92.71098, 12.83398 ], [ 92.7109, 12.83389 ], [ 92.71073, 12.83388 ], [ 92.71039, 12.83393 ], [ 92.71032, 12.83383 ], [ 92.71023, 12.83376 ], [ 92.71007, 12.83374 ], [ 92.70992, 12.83375 ], [ 92.70978, 12.83382 ], [ 92.70973, 12.83392 ], [ 92.7097, 12.83413 ], [ 92.70982, 12.83509 ], [ 92.70975, 12.83525 ], [ 92.70961, 12.83523 ], [ 92.70937, 12.835 ], [ 92.70913, 12.83499 ], [ 92.70841, 12.83547 ], [ 92.70831, 12.83557 ], [ 92.70826, 12.83595 ], [ 92.70815, 12.83603 ], [ 92.7081, 12.83621 ], [ 92.70814, 12.83638 ], [ 92.70821, 12.83652 ], [ 92.70826, 12.8367 ], [ 92.70825, 12.83679 ], [ 92.70815, 12.83682 ], [ 92.70787, 12.83673 ], [ 92.70781, 12.83684 ], [ 92.70782, 12.83703 ], [ 92.708, 12.83738 ], [ 92.70813, 12.83752 ], [ 92.70817, 12.83765 ], [ 92.70811, 12.8377 ], [ 92.70795, 12.83773 ], [ 92.70793, 12.83783 ], [ 92.70799, 12.83798 ], [ 92.70818, 12.8382 ], [ 92.70834, 12.83854 ], [ 92.70874, 12.83914 ], [ 92.70933, 12.84015 ], [ 92.70961, 12.84052 ], [ 92.70966, 12.84082 ], [ 92.70983, 12.84108 ], [ 92.71017, 12.84145 ], [ 92.71055, 12.84225 ], [ 92.71059, 12.84241 ], [ 92.71071, 12.84256 ], [ 92.71077, 12.84293 ], [ 92.71082, 12.84307 ], [ 92.71091, 12.84317 ], [ 92.711, 12.84323 ], [ 92.71115, 12.84344 ], [ 92.71119, 12.84367 ], [ 92.71127, 12.84392 ], [ 92.71137, 12.84409 ], [ 92.71151, 12.84418 ], [ 92.71164, 12.84413 ], [ 92.71179, 12.84402 ], [ 92.71202, 12.84397 ], [ 92.71228, 12.84398 ], [ 92.71261, 12.84384 ], [ 92.71281, 12.84366 ], [ 92.71293, 12.84348 ], [ 92.713, 12.84324 ], [ 92.71295, 12.84282 ], [ 92.71285, 12.84231 ], [ 92.71288, 12.84206 ], [ 92.71295, 12.84204 ], [ 92.71301, 12.84207 ], [ 92.71306, 12.84216 ], [ 92.71309, 12.8423 ], [ 92.71316, 12.84247 ], [ 92.71328, 12.84249 ], [ 92.71336, 12.84253 ], [ 92.7133, 12.84285 ], [ 92.71331, 12.84312 ], [ 92.71328, 12.84343 ], [ 92.71311, 12.84384 ], [ 92.71297, 12.84411 ], [ 92.71289, 12.84446 ], [ 92.71289, 12.84477 ], [ 92.71295, 12.84536 ], [ 92.71298, 12.84649 ], [ 92.71314, 12.84708 ], [ 92.71321, 12.84777 ], [ 92.71321, 12.84802 ], [ 92.71333, 12.84841 ], [ 92.71365, 12.84892 ], [ 92.71401, 12.84956 ], [ 92.71414, 12.84994 ], [ 92.71444, 12.8506 ], [ 92.71501, 12.85214 ], [ 92.71505, 12.85251 ], [ 92.71515, 12.85267 ], [ 92.7154, 12.85292 ], [ 92.71558, 12.85327 ], [ 92.71586, 12.85368 ], [ 92.71618, 12.85388 ], [ 92.71624, 12.85398 ], [ 92.71624, 12.8541 ], [ 92.71651, 12.85458 ], [ 92.71678, 12.85522 ], [ 92.71684, 12.85545 ], [ 92.71696, 12.8556 ], [ 92.71717, 12.85687 ], [ 92.71724, 12.85713 ], [ 92.71736, 12.85737 ], [ 92.71748, 12.85755 ], [ 92.7178, 12.85779 ], [ 92.71782, 12.8579 ], [ 92.71754, 12.8585 ], [ 92.71754, 12.85888 ], [ 92.71776, 12.85946 ], [ 92.71789, 12.8595 ], [ 92.71799, 12.85945 ], [ 92.71813, 12.85931 ], [ 92.71831, 12.85925 ], [ 92.71869, 12.85925 ], [ 92.7189, 12.85921 ], [ 92.71917, 12.85911 ], [ 92.71937, 12.85898 ], [ 92.71997, 12.8583 ], [ 92.72008, 12.85828 ], [ 92.72005, 12.85842 ], [ 92.71984, 12.85877 ], [ 92.71984, 12.859 ], [ 92.71999, 12.85927 ], [ 92.72018, 12.85955 ], [ 92.72034, 12.85972 ], [ 92.72063, 12.85986 ], [ 92.72107, 12.8599 ], [ 92.72138, 12.85986 ], [ 92.72167, 12.85987 ], [ 92.72212, 12.85996 ], [ 92.72287, 12.86001 ], [ 92.72316, 12.86 ], [ 92.72393, 12.85976 ], [ 92.72406, 12.85977 ], [ 92.72399, 12.85988 ], [ 92.72385, 12.85991 ], [ 92.72344, 12.86007 ], [ 92.72321, 12.86019 ], [ 92.72293, 12.8602 ], [ 92.72241, 12.86015 ], [ 92.722, 12.86019 ], [ 92.72155, 12.8602 ], [ 92.72132, 12.86025 ], [ 92.72123, 12.86029 ], [ 92.72081, 12.86062 ], [ 92.72037, 12.86072 ], [ 92.72035, 12.86082 ], [ 92.72021, 12.86087 ], [ 92.72013, 12.86093 ], [ 92.72013, 12.86112 ], [ 92.72008, 12.8613 ], [ 92.72013, 12.86143 ], [ 92.72032, 12.86163 ], [ 92.72043, 12.86185 ], [ 92.72048, 12.86207 ], [ 92.72048, 12.86221 ], [ 92.72043, 12.86239 ], [ 92.72036, 12.8625 ], [ 92.7202, 12.86266 ], [ 92.72006, 12.86285 ], [ 92.7201, 12.86313 ], [ 92.72018, 12.86337 ], [ 92.72019, 12.86347 ], [ 92.72025, 12.8636 ], [ 92.72036, 12.8637 ], [ 92.72048, 12.86371 ], [ 92.72055, 12.86376 ], [ 92.72057, 12.86393 ], [ 92.72052, 12.86427 ], [ 92.7204, 12.86455 ], [ 92.72039, 12.86464 ], [ 92.72047, 12.86465 ], [ 92.72063, 12.86461 ], [ 92.72079, 12.86449 ], [ 92.72098, 12.86444 ], [ 92.7211, 12.86447 ], [ 92.72114, 12.86455 ], [ 92.72118, 12.86473 ], [ 92.72125, 12.86473 ], [ 92.72143, 12.86464 ], [ 92.72154, 12.86461 ], [ 92.72164, 12.86463 ], [ 92.72172, 12.8647 ], [ 92.72178, 12.86486 ], [ 92.72183, 12.86493 ], [ 92.72199, 12.8649 ], [ 92.72205, 12.86485 ], [ 92.72214, 12.86469 ], [ 92.72234, 12.86469 ], [ 92.72244, 12.86463 ], [ 92.72257, 12.86451 ], [ 92.72268, 12.86435 ], [ 92.72301, 12.86414 ], [ 92.72346, 12.86397 ], [ 92.72382, 12.86402 ], [ 92.72403, 12.86402 ], [ 92.72418, 12.86393 ], [ 92.72426, 12.86391 ], [ 92.7244, 12.86394 ], [ 92.72446, 12.86417 ], [ 92.72454, 12.86426 ], [ 92.72511, 12.86463 ], [ 92.72521, 12.86478 ], [ 92.72522, 12.8649 ], [ 92.72537, 12.86504 ], [ 92.72557, 12.86509 ], [ 92.72559, 12.86516 ], [ 92.72556, 12.86523 ], [ 92.72561, 12.86531 ], [ 92.72578, 12.86529 ], [ 92.72593, 12.86551 ], [ 92.72604, 12.86555 ], [ 92.72611, 12.86567 ], [ 92.72618, 12.86567 ], [ 92.72623, 12.86536 ], [ 92.72632, 12.86537 ], [ 92.72657, 12.86569 ], [ 92.72665, 12.86571 ], [ 92.72673, 12.86568 ], [ 92.7268, 12.86558 ], [ 92.72687, 12.86553 ], [ 92.72701, 12.86553 ], [ 92.72708, 12.86556 ], [ 92.72718, 12.86556 ], [ 92.72719, 12.86514 ], [ 92.72721, 12.86505 ], [ 92.72728, 12.86497 ], [ 92.72758, 12.86487 ], [ 92.72777, 12.86497 ], [ 92.72789, 12.86497 ], [ 92.72797, 12.86494 ], [ 92.72806, 12.86477 ], [ 92.72811, 12.86472 ], [ 92.72822, 12.86473 ], [ 92.72829, 12.8647 ], [ 92.72831, 12.86448 ], [ 92.72837, 12.86426 ], [ 92.72842, 12.86416 ], [ 92.72855, 12.86407 ], [ 92.72869, 12.86411 ], [ 92.72882, 12.86422 ], [ 92.72893, 12.86424 ], [ 92.72885, 12.86387 ], [ 92.72882, 12.86364 ], [ 92.72876, 12.86351 ], [ 92.72876, 12.8634 ], [ 92.72883, 12.86333 ], [ 92.72892, 12.8633 ], [ 92.72909, 12.86338 ], [ 92.72933, 12.86339 ], [ 92.7295, 12.86337 ], [ 92.72957, 12.86358 ], [ 92.72961, 12.8636 ], [ 92.72969, 12.86355 ], [ 92.72968, 12.86318 ], [ 92.72963, 12.86289 ], [ 92.72966, 12.86261 ], [ 92.72995, 12.86176 ], [ 92.72997, 12.86143 ], [ 92.72986, 12.86114 ], [ 92.72967, 12.86083 ], [ 92.72927, 12.8604 ], [ 92.72909, 12.86028 ], [ 92.72893, 12.86021 ], [ 92.72879, 12.8602 ], [ 92.72869, 12.86024 ], [ 92.72863, 12.86024 ], [ 92.72864, 12.86017 ], [ 92.7288, 12.86002 ], [ 92.72885, 12.85993 ], [ 92.72882, 12.85945 ], [ 92.72872, 12.85927 ], [ 92.72858, 12.85913 ], [ 92.72805, 12.85879 ], [ 92.72775, 12.85856 ], [ 92.72746, 12.85826 ], [ 92.72739, 12.85814 ], [ 92.72718, 12.8576 ], [ 92.72698, 12.85738 ], [ 92.72692, 12.85725 ], [ 92.7269, 12.85707 ], [ 92.72682, 12.85693 ], [ 92.72662, 12.8567 ], [ 92.72643, 12.85639 ], [ 92.72623, 12.85587 ], [ 92.72618, 12.85563 ], [ 92.72583, 12.85536 ], [ 92.72526, 12.85441 ], [ 92.72495, 12.85386 ], [ 92.7248, 12.85369 ], [ 92.72479, 12.85357 ], [ 92.72483, 12.85332 ], [ 92.72501, 12.85307 ], [ 92.72511, 12.85262 ], [ 92.72534, 12.85224 ], [ 92.7254, 12.85203 ], [ 92.72548, 12.85127 ], [ 92.72544, 12.85113 ], [ 92.72534, 12.85103 ], [ 92.7248, 12.85069 ], [ 92.72471, 12.85061 ], [ 92.72449, 12.85023 ], [ 92.72414, 12.84935 ], [ 92.72407, 12.84906 ], [ 92.7239, 12.84867 ], [ 92.72374, 12.84842 ], [ 92.72334, 12.84726 ], [ 92.72322, 12.84707 ], [ 92.72256, 12.84652 ], [ 92.72253, 12.84639 ], [ 92.72255, 12.84631 ], [ 92.7224, 12.84589 ], [ 92.72224, 12.84534 ], [ 92.72204, 12.84479 ], [ 92.72184, 12.84362 ], [ 92.72175, 12.84334 ], [ 92.72155, 12.84303 ], [ 92.72125, 12.84269 ], [ 92.72116, 12.84252 ], [ 92.72099, 12.84194 ], [ 92.72063, 12.84128 ], [ 92.72044, 12.84048 ], [ 92.72045, 12.84027 ], [ 92.72039, 12.84011 ], [ 92.72038, 12.83992 ], [ 92.72014, 12.83951 ], [ 92.7195, 12.83778 ], [ 92.71939, 12.83738 ], [ 92.71925, 12.83704 ], [ 92.71905, 12.83683 ], [ 92.71882, 12.83651 ], [ 92.7186, 12.83606 ], [ 92.71851, 12.83566 ], [ 92.7184, 12.83533 ], [ 92.71815, 12.83509 ], [ 92.71804, 12.83493 ], [ 92.71787, 12.83493 ], [ 92.7178, 12.83483 ], [ 92.71771, 12.83459 ], [ 92.71754, 12.83429 ], [ 92.71734, 12.83403 ], [ 92.71714, 12.83364 ], [ 92.71665, 12.8332 ], [ 92.71628, 12.83303 ], [ 92.71591, 12.83293 ], [ 92.71514, 12.8327 ], [ 92.71501, 12.83268 ], [ 92.71477, 12.83281 ], [ 92.71472, 12.83292 ], [ 92.71484, 12.83307 ], [ 92.7148, 12.8332 ], [ 92.71488, 12.83331 ], [ 92.71487, 12.83338 ], [ 92.7148, 12.83341 ], [ 92.7147, 12.83341 ], [ 92.71455, 12.83332 ], [ 92.71439, 12.83331 ], [ 92.71428, 12.83326 ], [ 92.7141, 12.83324 ], [ 92.71397, 12.83326 ], [ 92.71382, 12.83342 ], [ 92.71365, 12.83349 ], [ 92.7136, 12.83354 ], [ 92.71347, 12.83354 ], [ 92.71347, 12.83347 ], [ 92.71354, 12.83341 ], [ 92.71354, 12.83332 ], [ 92.7135, 12.83328 ], [ 92.7132, 12.83316 ], [ 92.71308, 12.83315 ], [ 92.71296, 12.83317 ], [ 92.71282, 12.83347 ], [ 92.7128, 12.83384 ], [ 92.71274, 12.83393 ], [ 92.71265, 12.8342 ] ] ], [ [ [ 92.87268, 12.91586 ], [ 92.87218, 12.91591 ], [ 92.87162, 12.91601 ], [ 92.87082, 12.9162 ], [ 92.86969, 12.91656 ], [ 92.86836, 12.91702 ], [ 92.86755, 12.91718 ], [ 92.86674, 12.91709 ], [ 92.86633, 12.91697 ], [ 92.86593, 12.91675 ], [ 92.86565, 12.91663 ], [ 92.8654, 12.91668 ], [ 92.86526, 12.91685 ], [ 92.86487, 12.91759 ], [ 92.86447, 12.91827 ], [ 92.86428, 12.91912 ], [ 92.86405, 12.91977 ], [ 92.86377, 12.92041 ], [ 92.86361, 12.92098 ], [ 92.86331, 12.92157 ], [ 92.86264, 12.92213 ], [ 92.86239, 12.92265 ], [ 92.86202, 12.92304 ], [ 92.86116, 12.92408 ], [ 92.86105, 12.92438 ], [ 92.86065, 12.925 ], [ 92.86086, 12.92557 ], [ 92.86114, 12.92601 ], [ 92.8611, 12.92627 ], [ 92.86085, 12.92649 ], [ 92.85991, 12.92655 ], [ 92.8595, 12.92663 ], [ 92.85915, 12.92678 ], [ 92.85895, 12.9274 ], [ 92.8588, 12.92824 ], [ 92.85879, 12.92912 ], [ 92.85889, 12.92997 ], [ 92.85917, 12.93058 ], [ 92.85942, 12.93129 ], [ 92.85999, 12.93257 ], [ 92.8601, 12.93286 ], [ 92.86022, 12.93304 ], [ 92.86047, 12.93316 ], [ 92.86083, 12.9332 ], [ 92.86116, 12.93314 ], [ 92.86155, 12.93281 ], [ 92.86188, 12.93261 ], [ 92.86222, 12.9325 ], [ 92.86253, 12.93248 ], [ 92.86281, 12.9325 ], [ 92.86367, 12.9327 ], [ 92.86436, 12.93272 ], [ 92.86466, 12.93278 ], [ 92.86501, 12.93304 ], [ 92.86563, 12.93295 ], [ 92.86635, 12.93276 ], [ 92.86703, 12.93246 ], [ 92.86777, 12.93201 ], [ 92.86849, 12.93201 ], [ 92.86929, 12.93176 ], [ 92.86986, 12.93172 ], [ 92.87039, 12.93182 ], [ 92.87077, 12.93193 ], [ 92.87122, 12.93216 ], [ 92.87125, 12.9325 ], [ 92.87134, 12.93269 ], [ 92.87157, 12.93292 ], [ 92.87174, 12.93304 ], [ 92.87204, 12.93351 ], [ 92.87248, 12.93401 ], [ 92.87299, 12.9343 ], [ 92.87326, 12.93438 ], [ 92.87343, 12.9344 ], [ 92.87375, 12.93439 ], [ 92.8739, 12.93441 ], [ 92.874, 12.93438 ], [ 92.87415, 12.93422 ], [ 92.87431, 12.93412 ], [ 92.87442, 12.93408 ], [ 92.87456, 12.93397 ], [ 92.87476, 12.93387 ], [ 92.87483, 12.9337 ], [ 92.87484, 12.93336 ], [ 92.87494, 12.93332 ], [ 92.87548, 12.93333 ], [ 92.87568, 12.93329 ], [ 92.87587, 12.93313 ], [ 92.8761, 12.93308 ], [ 92.8762, 12.93299 ], [ 92.87644, 12.93208 ], [ 92.87653, 12.93192 ], [ 92.87657, 12.93175 ], [ 92.87655, 12.93138 ], [ 92.87685, 12.93088 ], [ 92.87719, 12.93062 ], [ 92.87724, 12.93055 ], [ 92.87725, 12.93042 ], [ 92.87735, 12.93038 ], [ 92.87747, 12.93043 ], [ 92.87797, 12.9303 ], [ 92.8783, 12.9303 ], [ 92.87846, 12.93034 ], [ 92.87868, 12.93035 ], [ 92.87884, 12.93043 ], [ 92.87911, 12.93072 ], [ 92.87925, 12.93092 ], [ 92.87941, 12.93094 ], [ 92.87963, 12.93091 ], [ 92.87989, 12.93079 ], [ 92.88043, 12.93032 ], [ 92.88067, 12.93002 ], [ 92.88096, 12.92976 ], [ 92.88121, 12.92961 ], [ 92.88151, 12.92952 ], [ 92.88181, 12.92951 ], [ 92.88207, 12.92955 ], [ 92.88234, 12.92968 ], [ 92.8827, 12.9299 ], [ 92.88306, 12.93016 ], [ 92.88322, 12.93021 ], [ 92.88338, 12.9302 ], [ 92.88356, 12.93013 ], [ 92.88376, 12.93001 ], [ 92.88415, 12.92961 ], [ 92.88433, 12.9293 ], [ 92.88436, 12.92918 ], [ 92.88433, 12.9289 ], [ 92.8842, 12.92862 ], [ 92.88409, 12.92856 ], [ 92.88407, 12.92851 ], [ 92.8842, 12.92829 ], [ 92.88422, 12.92808 ], [ 92.88434, 12.92785 ], [ 92.88436, 12.92752 ], [ 92.88452, 12.92713 ], [ 92.88464, 12.92698 ], [ 92.88479, 12.92656 ], [ 92.88491, 12.92635 ], [ 92.88495, 12.92618 ], [ 92.88502, 12.92609 ], [ 92.88504, 12.926 ], [ 92.88496, 12.92572 ], [ 92.885, 12.92565 ], [ 92.88511, 12.92558 ], [ 92.88583, 12.92479 ], [ 92.88605, 12.9245 ], [ 92.8861, 12.9244 ], [ 92.88616, 12.9241 ], [ 92.88617, 12.92384 ], [ 92.88613, 12.92367 ], [ 92.88607, 12.92356 ], [ 92.88596, 12.92343 ], [ 92.88583, 12.92335 ], [ 92.88569, 12.9233 ], [ 92.88549, 12.92332 ], [ 92.88535, 12.92328 ], [ 92.8851, 12.92302 ], [ 92.88489, 12.92289 ], [ 92.88462, 12.92281 ], [ 92.8843, 12.92276 ], [ 92.88394, 12.92266 ], [ 92.88375, 12.92251 ], [ 92.88343, 12.92215 ], [ 92.88328, 12.92207 ], [ 92.88302, 12.92209 ], [ 92.88276, 12.92232 ], [ 92.88258, 12.92235 ], [ 92.88217, 12.92226 ], [ 92.88164, 12.922 ], [ 92.88145, 12.92178 ], [ 92.88122, 12.92113 ], [ 92.88101, 12.92081 ], [ 92.88079, 12.92061 ], [ 92.88061, 12.92052 ], [ 92.88053, 12.92053 ], [ 92.88044, 12.92089 ], [ 92.88003, 12.92219 ], [ 92.87987, 12.92299 ], [ 92.87982, 12.92354 ], [ 92.87967, 12.92374 ], [ 92.8794, 12.92393 ], [ 92.87779, 12.92465 ], [ 92.87739, 12.92485 ], [ 92.87724, 12.92497 ], [ 92.87717, 12.9251 ], [ 92.87687, 12.92548 ], [ 92.87675, 12.92559 ], [ 92.87643, 12.92563 ], [ 92.87592, 12.92555 ], [ 92.87563, 12.92541 ], [ 92.87522, 12.92513 ], [ 92.8748, 12.92479 ], [ 92.87459, 12.92449 ], [ 92.87448, 12.92423 ], [ 92.87445, 12.92394 ], [ 92.87448, 12.92382 ], [ 92.87446, 12.92361 ], [ 92.87439, 12.92351 ], [ 92.87392, 12.92343 ], [ 92.87385, 12.92297 ], [ 92.87386, 12.92275 ], [ 92.87405, 12.92219 ], [ 92.87413, 12.92182 ], [ 92.87425, 12.92155 ], [ 92.87432, 12.92145 ], [ 92.87452, 12.92131 ], [ 92.87456, 12.92123 ], [ 92.87452, 12.92075 ], [ 92.87439, 12.92029 ], [ 92.87424, 12.91996 ], [ 92.87409, 12.91929 ], [ 92.87413, 12.91914 ], [ 92.87413, 12.91903 ], [ 92.87406, 12.91895 ], [ 92.87396, 12.91866 ], [ 92.87387, 12.918 ], [ 92.8739, 12.91781 ], [ 92.87385, 12.91755 ], [ 92.87331, 12.91636 ], [ 92.8731, 12.91611 ], [ 92.87289, 12.91601 ], [ 92.87268, 12.91586 ] ] ], [ [ [ 92.98091, 12.93356 ], [ 92.97988, 12.93336 ], [ 92.97875, 12.93366 ], [ 92.97762, 12.93417 ], [ 92.97557, 12.93552 ], [ 92.97423, 12.93608 ], [ 92.97356, 12.93653 ], [ 92.97321, 12.93778 ], [ 92.97208, 12.93838 ], [ 92.97135, 12.93778 ], [ 92.97053, 12.93718 ], [ 92.97017, 12.93769 ], [ 92.97079, 12.93854 ], [ 92.97151, 12.93904 ], [ 92.97239, 12.93974 ], [ 92.97285, 12.94039 ], [ 92.97265, 12.94164 ], [ 92.97301, 12.94314 ], [ 92.97286, 12.9443 ], [ 92.97306, 12.94475 ], [ 92.97383, 12.9454 ], [ 92.97425, 12.9467 ], [ 92.97435, 12.9476 ], [ 92.97379, 12.9481 ], [ 92.97333, 12.9491 ], [ 92.97328, 12.95035 ], [ 92.97307, 12.95206 ], [ 92.97288, 12.95326 ], [ 92.97288, 12.95491 ], [ 92.97247, 12.95541 ], [ 92.97149, 12.95567 ], [ 92.9702, 12.95577 ], [ 92.96882, 12.95557 ], [ 92.96789, 12.95522 ], [ 92.9666, 12.95467 ], [ 92.96527, 12.95487 ], [ 92.96326, 12.95523 ], [ 92.96151, 12.95548 ], [ 92.95935, 12.95673 ], [ 92.95791, 12.95724 ], [ 92.95668, 12.95834 ], [ 92.9553, 12.961 ], [ 92.95453, 12.96286 ], [ 92.95427, 12.96472 ], [ 92.95422, 12.96647 ], [ 92.95423, 12.96747 ], [ 92.95433, 12.96828 ], [ 92.95474, 12.96807 ], [ 92.95536, 12.96737 ], [ 92.95592, 12.96697 ], [ 92.95659, 12.96702 ], [ 92.95705, 12.96672 ], [ 92.95746, 12.96622 ], [ 92.95782, 12.96556 ], [ 92.95854, 12.96501 ], [ 92.95906, 12.96496 ], [ 92.96009, 12.96541 ], [ 92.96127, 12.96576 ], [ 92.96189, 12.96716 ], [ 92.96251, 12.96791 ], [ 92.96318, 12.96867 ], [ 92.96323, 12.96937 ], [ 92.96308, 12.97027 ], [ 92.96267, 12.97077 ], [ 92.96071, 12.97127 ], [ 92.96061, 12.97158 ], [ 92.96071, 12.97258 ], [ 92.96113, 12.97321 ], [ 92.96087, 12.97416 ], [ 92.9603, 12.97486 ], [ 92.95753, 12.97627 ], [ 92.95614, 12.97692 ], [ 92.95516, 12.97723 ], [ 92.95475, 12.97788 ], [ 92.95404, 12.97938 ], [ 92.95311, 12.98039 ], [ 92.95373, 12.98134 ], [ 92.95522, 12.98209 ], [ 92.95615, 12.98269 ], [ 92.95764, 12.98309 ], [ 92.95836, 12.98414 ], [ 92.95902, 12.98544 ], [ 92.95938, 12.98659 ], [ 92.96011, 12.98845 ], [ 92.96067, 12.9894 ], [ 92.96175, 12.98925 ], [ 92.96227, 12.98889 ], [ 92.96294, 12.98804 ], [ 92.96329, 12.98699 ], [ 92.96401, 12.98603 ], [ 92.96489, 12.98573 ], [ 92.96586, 12.98503 ], [ 92.96874, 12.98274 ], [ 92.969, 12.98224 ], [ 92.96848, 12.98149 ], [ 92.96776, 12.98104 ], [ 92.96596, 12.98029 ], [ 92.96508, 12.97974 ], [ 92.96493, 12.97909 ], [ 92.96503, 12.97808 ], [ 92.96539, 12.97728 ], [ 92.96585, 12.97698 ], [ 92.96631, 12.97658 ], [ 92.96678, 12.97623 ], [ 92.96775, 12.97567 ], [ 92.96873, 12.97497 ], [ 92.96919, 12.97457 ], [ 92.96914, 12.97387 ], [ 92.96852, 12.97332 ], [ 92.96821, 12.97282 ], [ 92.96826, 12.97222 ], [ 92.96893, 12.97131 ], [ 92.9715, 12.96955 ], [ 92.97243, 12.9694 ], [ 92.97335, 12.97025 ], [ 92.97413, 12.97146 ], [ 92.97527, 12.97311 ], [ 92.9763, 12.97431 ], [ 92.97712, 12.97466 ], [ 92.97841, 12.97471 ], [ 92.97939, 12.97496 ], [ 92.97985, 12.97536 ], [ 92.98016, 12.97671 ], [ 92.98011, 12.97751 ], [ 92.97991, 12.97872 ], [ 92.98011, 12.97947 ], [ 92.9814, 12.98037 ], [ 92.98274, 12.98082 ], [ 92.98361, 12.98082 ], [ 92.98423, 12.98091 ], [ 92.98444, 12.98137 ], [ 92.985, 12.98207 ], [ 92.98562, 12.98272 ], [ 92.98551, 12.98355 ], [ 92.98546, 12.9845 ], [ 92.98588, 12.985 ], [ 92.98675, 12.9847 ], [ 92.98773, 12.98465 ], [ 92.98871, 12.9848 ], [ 92.98922, 12.9853 ], [ 92.98891, 12.9865 ], [ 92.98825, 12.98771 ], [ 92.98768, 12.98841 ], [ 92.98707, 12.99066 ], [ 92.9864, 12.99132 ], [ 92.98615, 12.99212 ], [ 92.98646, 12.99292 ], [ 92.98702, 12.99317 ], [ 92.98805, 12.99277 ], [ 92.98918, 12.99252 ], [ 92.99036, 12.99246 ], [ 92.99129, 12.99206 ], [ 92.99309, 12.99116 ], [ 92.99376, 12.99076 ], [ 92.99437, 12.99045 ], [ 92.99525, 12.9907 ], [ 92.99576, 12.99145 ], [ 92.99782, 12.99235 ], [ 92.9988, 12.99365 ], [ 93.00019, 12.99405 ], [ 93.00158, 12.99495 ], [ 93.00241, 12.99585 ], [ 93.00318, 12.99651 ], [ 93.00426, 12.9967 ], [ 93.00529, 12.99715 ], [ 93.00632, 12.9978 ], [ 93.00683, 12.9977 ], [ 93.00657, 12.99685 ], [ 93.0058, 12.99525 ], [ 93.0043, 12.9931 ], [ 93.00281, 12.99174 ], [ 92.99838, 12.98794 ], [ 92.99703, 12.9869 ], [ 92.99595, 12.9864 ], [ 92.99467, 12.98635 ], [ 92.99317, 12.986 ], [ 92.9924, 12.9854 ], [ 92.99121, 12.98189 ], [ 92.99003, 12.97969 ], [ 92.98761, 12.97689 ], [ 92.98638, 12.97477 ], [ 92.98493, 12.97267 ], [ 92.98349, 12.97142 ], [ 92.9822, 12.97072 ], [ 92.98112, 12.96876 ], [ 92.97978, 12.96702 ], [ 92.97973, 12.96557 ], [ 92.97993, 12.96381 ], [ 92.97993, 12.96236 ], [ 92.98013, 12.9606 ], [ 92.98136, 12.95905 ], [ 92.9826, 12.95824 ], [ 92.98434, 12.95759 ], [ 92.9863, 12.95714 ], [ 92.98743, 12.95668 ], [ 92.98794, 12.95578 ], [ 92.98779, 12.9545 ], [ 92.98742, 12.9541 ], [ 92.98624, 12.9533 ], [ 92.98475, 12.9524 ], [ 92.98243, 12.95145 ], [ 92.98068, 12.9504 ], [ 92.98017, 12.94915 ], [ 92.97996, 12.94745 ], [ 92.98006, 12.94549 ], [ 92.98011, 12.94334 ], [ 92.98118, 12.94148 ], [ 92.98226, 12.93897 ], [ 92.98282, 12.93732 ], [ 92.98246, 12.93491 ], [ 92.98174, 12.93406 ], [ 92.98091, 12.93356 ] ] ], [ [ [ 92.70634, 13.07096 ], [ 92.70567, 13.07056 ], [ 92.70529, 13.0703 ], [ 92.7033, 13.07022 ], [ 92.70256, 13.07035 ], [ 92.70155, 13.07074 ], [ 92.70079, 13.07119 ], [ 92.70028, 13.07195 ], [ 92.69968, 13.07324 ], [ 92.69908, 13.07553 ], [ 92.69862, 13.07887 ], [ 92.69827, 13.08104 ], [ 92.69719, 13.08385 ], [ 92.69594, 13.09008 ], [ 92.69585, 13.09152 ], [ 92.69556, 13.0938 ], [ 92.6953, 13.09502 ], [ 92.69546, 13.09555 ], [ 92.69692, 13.09647 ], [ 92.69845, 13.09749 ], [ 92.69934, 13.09791 ], [ 92.69992, 13.09827 ], [ 92.7005, 13.09814 ], [ 92.7016, 13.09752 ], [ 92.70225, 13.09693 ], [ 92.7032, 13.09642 ], [ 92.70382, 13.0956 ], [ 92.70504, 13.09476 ], [ 92.70563, 13.09452 ], [ 92.70647, 13.09451 ], [ 92.70801, 13.09494 ], [ 92.70928, 13.0952 ], [ 92.71064, 13.09519 ], [ 92.71167, 13.09534 ], [ 92.71297, 13.09593 ], [ 92.71563, 13.09734 ], [ 92.71585, 13.09761 ], [ 92.71584, 13.09785 ], [ 92.71611, 13.09797 ], [ 92.71649, 13.09791 ], [ 92.71695, 13.09793 ], [ 92.71807, 13.09837 ], [ 92.71919, 13.09858 ], [ 92.71961, 13.09858 ], [ 92.72006, 13.09824 ], [ 92.72036, 13.09753 ], [ 92.72059, 13.09687 ], [ 92.72062, 13.09614 ], [ 92.72041, 13.0954 ], [ 92.71998, 13.09462 ], [ 92.71934, 13.09395 ], [ 92.71858, 13.09355 ], [ 92.71761, 13.09295 ], [ 92.71651, 13.09267 ], [ 92.71323, 13.09165 ], [ 92.71251, 13.09119 ], [ 92.7116, 13.09044 ], [ 92.70886, 13.0879 ], [ 92.70803, 13.08663 ], [ 92.70662, 13.08419 ], [ 92.70563, 13.08231 ], [ 92.70551, 13.08197 ], [ 92.70531, 13.08167 ], [ 92.70498, 13.08138 ], [ 92.70446, 13.08082 ], [ 92.70389, 13.08015 ], [ 92.70366, 13.07954 ], [ 92.70359, 13.07941 ], [ 92.7034, 13.07875 ], [ 92.7035, 13.07808 ], [ 92.70385, 13.07761 ], [ 92.70427, 13.07695 ], [ 92.70459, 13.07622 ], [ 92.70462, 13.07577 ], [ 92.70503, 13.07496 ], [ 92.70576, 13.07389 ], [ 92.70651, 13.07272 ], [ 92.70686, 13.07196 ], [ 92.70677, 13.07146 ], [ 92.70634, 13.07096 ] ] ], [ [ [ 92.93508, 12.9977 ], [ 92.93499, 12.99787 ], [ 92.93476, 12.99796 ], [ 92.93466, 12.99804 ], [ 92.9345, 12.99822 ], [ 92.93437, 12.99833 ], [ 92.93417, 12.99836 ], [ 92.93393, 12.99827 ], [ 92.93374, 12.99829 ], [ 92.93354, 12.99844 ], [ 92.93331, 12.99869 ], [ 92.93304, 12.99905 ], [ 92.93282, 12.99945 ], [ 92.93266, 12.99983 ], [ 92.93256, 12.99998 ], [ 92.93251, 13.0002 ], [ 92.93245, 13.00025 ], [ 92.93211, 13.00032 ], [ 92.93194, 13.00044 ], [ 92.93144, 13.0005 ], [ 92.93126, 13.0005 ], [ 92.93094, 13.0004 ], [ 92.93083, 13.00019 ], [ 92.93066, 13.00006 ], [ 92.93042, 12.99994 ], [ 92.93008, 12.99989 ], [ 92.92988, 12.99978 ], [ 92.92972, 12.99972 ], [ 92.92918, 12.9996 ], [ 92.92847, 12.99931 ], [ 92.92813, 12.99928 ], [ 92.92783, 12.99931 ], [ 92.92761, 12.99941 ], [ 92.92719, 12.99952 ], [ 92.92686, 12.9997 ], [ 92.9268, 12.9996 ], [ 92.92654, 12.99948 ], [ 92.92627, 12.99946 ], [ 92.92603, 12.99957 ], [ 92.92571, 12.99979 ], [ 92.92546, 13.00003 ], [ 92.92521, 13.00053 ], [ 92.92513, 13.00085 ], [ 92.92495, 13.00097 ], [ 92.9246, 13.00102 ], [ 92.92442, 13.00119 ], [ 92.92414, 13.00121 ], [ 92.92404, 13.00128 ], [ 92.92379, 13.00135 ], [ 92.92365, 13.00129 ], [ 92.92339, 13.00129 ], [ 92.92318, 13.00132 ], [ 92.92288, 13.0013 ], [ 92.92272, 13.00121 ], [ 92.92251, 13.00104 ], [ 92.92232, 13.00102 ], [ 92.92227, 13.00117 ], [ 92.92229, 13.00141 ], [ 92.9222, 13.00158 ], [ 92.92211, 13.00158 ], [ 92.922, 13.0015 ], [ 92.92182, 13.00148 ], [ 92.92172, 13.00166 ], [ 92.92172, 13.00182 ], [ 92.9216, 13.00193 ], [ 92.92153, 13.00203 ], [ 92.92135, 13.0022 ], [ 92.92109, 13.00239 ], [ 92.92096, 13.00236 ], [ 92.92084, 13.00216 ], [ 92.92074, 13.00183 ], [ 92.92062, 13.00158 ], [ 92.92047, 13.00157 ], [ 92.92041, 13.00175 ], [ 92.92043, 13.00205 ], [ 92.92037, 13.00233 ], [ 92.92019, 13.00284 ], [ 92.92008, 13.00308 ], [ 92.92003, 13.00341 ], [ 92.92005, 13.00364 ], [ 92.9201, 13.00383 ], [ 92.91999, 13.00414 ], [ 92.91969, 13.00434 ], [ 92.91966, 13.00444 ], [ 92.91979, 13.00458 ], [ 92.91992, 13.00467 ], [ 92.91998, 13.00479 ], [ 92.91923, 13.00533 ], [ 92.91849, 13.00624 ], [ 92.91813, 13.00702 ], [ 92.91777, 13.00744 ], [ 92.91745, 13.00825 ], [ 92.91722, 13.00873 ], [ 92.91704, 13.00896 ], [ 92.91684, 13.00929 ], [ 92.91661, 13.00984 ], [ 92.91633, 13.01043 ], [ 92.91607, 13.01155 ], [ 92.91592, 13.012 ], [ 92.9157, 13.01295 ], [ 92.91556, 13.01331 ], [ 92.91555, 13.01361 ], [ 92.9156, 13.014 ], [ 92.91574, 13.01472 ], [ 92.91609, 13.01545 ], [ 92.91648, 13.01651 ], [ 92.91679, 13.01716 ], [ 92.91701, 13.01746 ], [ 92.91739, 13.01786 ], [ 92.91785, 13.0182 ], [ 92.9189, 13.01883 ], [ 92.91914, 13.01894 ], [ 92.91961, 13.01899 ], [ 92.91974, 13.01904 ], [ 92.92007, 13.01903 ], [ 92.92021, 13.01906 ], [ 92.92035, 13.01902 ], [ 92.92051, 13.01912 ], [ 92.9206, 13.01912 ], [ 92.9207, 13.01908 ], [ 92.92076, 13.01918 ], [ 92.92092, 13.01926 ], [ 92.92092, 13.01931 ], [ 92.92099, 13.01936 ], [ 92.92114, 13.01937 ], [ 92.92114, 13.01948 ], [ 92.92154, 13.01998 ], [ 92.92166, 13.02018 ], [ 92.92177, 13.02025 ], [ 92.92179, 13.0204 ], [ 92.92191, 13.02043 ], [ 92.92189, 13.0206 ], [ 92.92191, 13.02078 ], [ 92.92199, 13.02092 ], [ 92.922, 13.02121 ], [ 92.92217, 13.02138 ], [ 92.92247, 13.02175 ], [ 92.92261, 13.02187 ], [ 92.92296, 13.02197 ], [ 92.92334, 13.02199 ], [ 92.92337, 13.02201 ], [ 92.92291, 13.02212 ], [ 92.92243, 13.0223 ], [ 92.92221, 13.02246 ], [ 92.92189, 13.02285 ], [ 92.92173, 13.02297 ], [ 92.92119, 13.02319 ], [ 92.92114, 13.02346 ], [ 92.92118, 13.02403 ], [ 92.92122, 13.02426 ], [ 92.92122, 13.02457 ], [ 92.92128, 13.02513 ], [ 92.92132, 13.02521 ], [ 92.92143, 13.02668 ], [ 92.92153, 13.02752 ], [ 92.92159, 13.0278 ], [ 92.92194, 13.02833 ], [ 92.92211, 13.02854 ], [ 92.92229, 13.0286 ], [ 92.92263, 13.02875 ], [ 92.92283, 13.02875 ], [ 92.92305, 13.02871 ], [ 92.92346, 13.02855 ], [ 92.92364, 13.02851 ], [ 92.92392, 13.0284 ], [ 92.92455, 13.02809 ], [ 92.92466, 13.02796 ], [ 92.9248, 13.02786 ], [ 92.9251, 13.02748 ], [ 92.92525, 13.02741 ], [ 92.92534, 13.02733 ], [ 92.92567, 13.02679 ], [ 92.92596, 13.02618 ], [ 92.926, 13.02604 ], [ 92.926, 13.02591 ], [ 92.92594, 13.02579 ], [ 92.92599, 13.02559 ], [ 92.92598, 13.02549 ], [ 92.92594, 13.0254 ], [ 92.92605, 13.02532 ], [ 92.92605, 13.02504 ], [ 92.92597, 13.02479 ], [ 92.92596, 13.02441 ], [ 92.92591, 13.02424 ], [ 92.92597, 13.02402 ], [ 92.92611, 13.02383 ], [ 92.92637, 13.02336 ], [ 92.92662, 13.02308 ], [ 92.92666, 13.02308 ], [ 92.92674, 13.02336 ], [ 92.92682, 13.02342 ], [ 92.92708, 13.0234 ], [ 92.92725, 13.0233 ], [ 92.92737, 13.02317 ], [ 92.92741, 13.02306 ], [ 92.92748, 13.02299 ], [ 92.92773, 13.02295 ], [ 92.92815, 13.02295 ], [ 92.92824, 13.023 ], [ 92.92842, 13.02301 ], [ 92.92888, 13.02316 ], [ 92.92918, 13.02331 ], [ 92.92961, 13.02339 ], [ 92.92983, 13.02337 ], [ 92.93, 13.02347 ], [ 92.93061, 13.02358 ], [ 92.93108, 13.02362 ], [ 92.93155, 13.02372 ], [ 92.93178, 13.02371 ], [ 92.93182, 13.02377 ], [ 92.93189, 13.02378 ], [ 92.93204, 13.02388 ], [ 92.93215, 13.02388 ], [ 92.93222, 13.02382 ], [ 92.93228, 13.02382 ], [ 92.9324, 13.02392 ], [ 92.93302, 13.02426 ], [ 92.9334, 13.02442 ], [ 92.93385, 13.02453 ], [ 92.93395, 13.02453 ], [ 92.9341, 13.02457 ], [ 92.935, 13.02515 ], [ 92.93557, 13.02537 ], [ 92.93564, 13.02544 ], [ 92.93574, 13.0256 ], [ 92.93627, 13.02591 ], [ 92.93663, 13.02605 ], [ 92.93672, 13.02606 ], [ 92.93696, 13.02618 ], [ 92.93717, 13.02609 ], [ 92.93739, 13.02609 ], [ 92.9375, 13.02605 ], [ 92.93756, 13.02596 ], [ 92.93761, 13.02593 ], [ 92.93772, 13.02591 ], [ 92.93785, 13.02584 ], [ 92.93807, 13.02578 ], [ 92.9383, 13.0256 ], [ 92.9384, 13.02547 ], [ 92.93892, 13.0254 ], [ 92.93914, 13.02531 ], [ 92.93933, 13.02518 ], [ 92.93954, 13.02496 ], [ 92.93968, 13.02477 ], [ 92.93972, 13.02462 ], [ 92.93976, 13.02456 ], [ 92.93984, 13.02449 ], [ 92.93986, 13.02443 ], [ 92.93994, 13.02434 ], [ 92.93994, 13.02419 ], [ 92.93984, 13.0237 ], [ 92.93969, 13.02354 ], [ 92.93947, 13.02345 ], [ 92.93932, 13.02334 ], [ 92.9392, 13.02331 ], [ 92.93913, 13.02322 ], [ 92.93906, 13.0232 ], [ 92.93896, 13.02322 ], [ 92.93841, 13.02312 ], [ 92.93814, 13.02299 ], [ 92.93807, 13.0229 ], [ 92.93785, 13.02273 ], [ 92.93779, 13.02262 ], [ 92.93784, 13.02252 ], [ 92.93769, 13.02225 ], [ 92.93769, 13.02217 ], [ 92.93773, 13.02213 ], [ 92.9378, 13.02213 ], [ 92.93782, 13.02211 ], [ 92.93771, 13.02206 ], [ 92.93775, 13.02193 ], [ 92.93768, 13.02183 ], [ 92.93767, 13.02176 ], [ 92.93784, 13.02151 ], [ 92.93787, 13.02128 ], [ 92.93791, 13.02124 ], [ 92.93792, 13.02118 ], [ 92.9379, 13.02113 ], [ 92.93804, 13.02096 ], [ 92.93809, 13.02077 ], [ 92.93807, 13.02071 ], [ 92.93785, 13.02058 ], [ 92.93785, 13.02048 ], [ 92.93789, 13.02045 ], [ 92.93829, 13.02055 ], [ 92.93839, 13.02054 ], [ 92.93853, 13.02042 ], [ 92.93862, 13.0203 ], [ 92.93921, 13.01988 ], [ 92.93947, 13.01988 ], [ 92.93999, 13.01977 ], [ 92.94081, 13.01973 ], [ 92.94154, 13.01953 ], [ 92.94182, 13.01931 ], [ 92.94205, 13.01899 ], [ 92.94213, 13.01853 ], [ 92.94232, 13.01809 ], [ 92.94231, 13.0178 ], [ 92.94183, 13.01725 ], [ 92.94169, 13.01693 ], [ 92.94164, 13.01637 ], [ 92.94174, 13.01621 ], [ 92.9418, 13.01605 ], [ 92.94179, 13.01588 ], [ 92.94141, 13.01534 ], [ 92.9413, 13.01454 ], [ 92.94107, 13.01399 ], [ 92.94092, 13.01381 ], [ 92.94052, 13.01367 ], [ 92.94037, 13.01357 ], [ 92.94009, 13.01316 ], [ 92.93952, 13.01217 ], [ 92.93908, 13.01091 ], [ 92.93907, 13.01043 ], [ 92.93919, 13.00997 ], [ 92.93926, 13.00979 ], [ 92.93927, 13.00967 ], [ 92.93935, 13.00957 ], [ 92.93941, 13.00939 ], [ 92.93944, 13.00909 ], [ 92.93951, 13.00872 ], [ 92.93967, 13.00832 ], [ 92.93973, 13.00777 ], [ 92.93983, 13.00729 ], [ 92.94005, 13.00701 ], [ 92.94017, 13.00694 ], [ 92.94034, 13.00673 ], [ 92.94043, 13.00649 ], [ 92.94052, 13.00635 ], [ 92.94047, 13.00619 ], [ 92.94038, 13.00609 ], [ 92.94053, 13.0058 ], [ 92.94064, 13.00527 ], [ 92.94059, 13.00499 ], [ 92.9406, 13.00434 ], [ 92.94073, 13.00421 ], [ 92.94076, 13.00412 ], [ 92.94076, 13.00345 ], [ 92.94082, 13.003 ], [ 92.9409, 13.00284 ], [ 92.94105, 13.00267 ], [ 92.94128, 13.00252 ], [ 92.94139, 13.00235 ], [ 92.94154, 13.00202 ], [ 92.94162, 13.0016 ], [ 92.94204, 13.00134 ], [ 92.94277, 13.00104 ], [ 92.94298, 13.00063 ], [ 92.94321, 13.00004 ], [ 92.94354, 12.99873 ], [ 92.94383, 12.99796 ], [ 92.94385, 12.99756 ], [ 92.94376, 12.99728 ], [ 92.94319, 12.99688 ], [ 92.94291, 12.99664 ], [ 92.94242, 12.99646 ], [ 92.94215, 12.99633 ], [ 92.94207, 12.99619 ], [ 92.94218, 12.99584 ], [ 92.94211, 12.99571 ], [ 92.94146, 12.99557 ], [ 92.94139, 12.99559 ], [ 92.94131, 12.99553 ], [ 92.94119, 12.99554 ], [ 92.94104, 12.99577 ], [ 92.94095, 12.99584 ], [ 92.94094, 12.99594 ], [ 92.94108, 12.99605 ], [ 92.94086, 12.99607 ], [ 92.94028, 12.99596 ], [ 92.93991, 12.99592 ], [ 92.93962, 12.99581 ], [ 92.93908, 12.99579 ], [ 92.93852, 12.99573 ], [ 92.93801, 12.99576 ], [ 92.93794, 12.99571 ], [ 92.93796, 12.99561 ], [ 92.93793, 12.99558 ], [ 92.93776, 12.99558 ], [ 92.9376, 12.99547 ], [ 92.93739, 12.99544 ], [ 92.93707, 12.99548 ], [ 92.9369, 12.99554 ], [ 92.93665, 12.99568 ], [ 92.93646, 12.9959 ], [ 92.93624, 12.99609 ], [ 92.93623, 12.99616 ], [ 92.93616, 12.99628 ], [ 92.93602, 12.99638 ], [ 92.93606, 12.99648 ], [ 92.93601, 12.99659 ], [ 92.93596, 12.99661 ], [ 92.93595, 12.99675 ], [ 92.93582, 12.99686 ], [ 92.93586, 12.99703 ], [ 92.9358, 12.99702 ], [ 92.93583, 12.9971 ], [ 92.93579, 12.99718 ], [ 92.93546, 12.99738 ], [ 92.93536, 12.99731 ], [ 92.93526, 12.9973 ], [ 92.93527, 12.99726 ], [ 92.93525, 12.99723 ], [ 92.93515, 12.99725 ], [ 92.935, 12.99741 ], [ 92.93499, 12.99745 ], [ 92.93507, 12.99745 ], [ 92.93507, 12.99749 ], [ 92.93516, 12.99749 ], [ 92.93513, 12.99762 ], [ 92.93508, 12.9977 ] ] ], [ [ [ 92.79232, 12.89232 ], [ 92.79158, 12.89265 ], [ 92.79094, 12.89304 ], [ 92.78931, 12.89376 ], [ 92.78876, 12.89393 ], [ 92.78792, 12.89403 ], [ 92.78766, 12.89403 ], [ 92.78743, 12.89394 ], [ 92.78705, 12.89391 ], [ 92.78679, 12.89394 ], [ 92.7865, 12.89404 ], [ 92.78611, 12.89409 ], [ 92.7857, 12.8942 ], [ 92.78551, 12.89432 ], [ 92.78457, 12.8945 ], [ 92.78417, 12.89468 ], [ 92.78336, 12.89518 ], [ 92.78291, 12.89589 ], [ 92.78282, 12.89665 ], [ 92.78294, 12.89695 ], [ 92.78308, 12.89716 ], [ 92.78342, 12.89736 ], [ 92.78441, 12.89773 ], [ 92.78471, 12.89788 ], [ 92.7854, 12.89775 ], [ 92.78597, 12.89778 ], [ 92.78628, 12.89785 ], [ 92.78662, 12.89785 ], [ 92.78779, 12.89767 ], [ 92.78773, 12.89785 ], [ 92.78741, 12.89793 ], [ 92.78716, 12.89827 ], [ 92.78716, 12.8986 ], [ 92.78741, 12.89897 ], [ 92.78771, 12.89924 ], [ 92.78806, 12.89982 ], [ 92.7884, 12.90018 ], [ 92.78856, 12.90046 ], [ 92.78885, 12.90087 ], [ 92.78912, 12.90103 ], [ 92.78969, 12.90108 ], [ 92.78965, 12.90119 ], [ 92.78947, 12.90142 ], [ 92.78947, 12.90173 ], [ 92.78969, 12.90208 ], [ 92.78977, 12.90302 ], [ 92.78972, 12.90361 ], [ 92.78964, 12.904 ], [ 92.78918, 12.90467 ], [ 92.78871, 12.90513 ], [ 92.78783, 12.90579 ], [ 92.78732, 12.90587 ], [ 92.78697, 12.90579 ], [ 92.7863, 12.90531 ], [ 92.78553, 12.90482 ], [ 92.78518, 12.9045 ], [ 92.78474, 12.90419 ], [ 92.78437, 12.90404 ], [ 92.78421, 12.90391 ], [ 92.78417, 12.9036 ], [ 92.78404, 12.90342 ], [ 92.78282, 12.90242 ], [ 92.78231, 12.90224 ], [ 92.78142, 12.90213 ], [ 92.7807, 12.90196 ], [ 92.77975, 12.90213 ], [ 92.77894, 12.90257 ], [ 92.77782, 12.90306 ], [ 92.77653, 12.9037 ], [ 92.77566, 12.90432 ], [ 92.77509, 12.90485 ], [ 92.77462, 12.9057 ], [ 92.77445, 12.90642 ], [ 92.77447, 12.90671 ], [ 92.77463, 12.90705 ], [ 92.77504, 12.90746 ], [ 92.77542, 12.9078 ], [ 92.77566, 12.90808 ], [ 92.77601, 12.90825 ], [ 92.77629, 12.90833 ], [ 92.77644, 12.90844 ], [ 92.77631, 12.90849 ], [ 92.77589, 12.90851 ], [ 92.77534, 12.90861 ], [ 92.77505, 12.9089 ], [ 92.7748, 12.90944 ], [ 92.7744, 12.90996 ], [ 92.77435, 12.91021 ], [ 92.77438, 12.91048 ], [ 92.77438, 12.91138 ], [ 92.7744, 12.91164 ], [ 92.77455, 12.91187 ], [ 92.77509, 12.91199 ], [ 92.77561, 12.91204 ], [ 92.77601, 12.91204 ], [ 92.77655, 12.91195 ], [ 92.77764, 12.91156 ], [ 92.77846, 12.91135 ], [ 92.77932, 12.91096 ], [ 92.77976, 12.9105 ], [ 92.78002, 12.91043 ], [ 92.78036, 12.91053 ], [ 92.78126, 12.91096 ], [ 92.78195, 12.91114 ], [ 92.78276, 12.9114 ], [ 92.78343, 12.91145 ], [ 92.78407, 12.91159 ], [ 92.78512, 12.91169 ], [ 92.78618, 12.91171 ], [ 92.78658, 12.91174 ], [ 92.78683, 12.91195 ], [ 92.78702, 12.9122 ], [ 92.78735, 12.91231 ], [ 92.78761, 12.91232 ], [ 92.78789, 12.91222 ], [ 92.78805, 12.91231 ], [ 92.78869, 12.9125 ], [ 92.78907, 12.9125 ], [ 92.78935, 12.91242 ], [ 92.78951, 12.91217 ], [ 92.78963, 12.91207 ], [ 92.78971, 12.91223 ], [ 92.78988, 12.91247 ], [ 92.78997, 12.91285 ], [ 92.79, 12.91321 ], [ 92.78995, 12.91358 ], [ 92.79008, 12.91386 ], [ 92.78983, 12.91426 ], [ 92.78986, 12.91445 ], [ 92.78982, 12.91475 ], [ 92.78988, 12.91537 ], [ 92.79006, 12.91568 ], [ 92.79036, 12.91589 ], [ 92.79068, 12.91605 ], [ 92.791, 12.91636 ], [ 92.79132, 12.91655 ], [ 92.79159, 12.91664 ], [ 92.79185, 12.91658 ], [ 92.79207, 12.91639 ], [ 92.79225, 12.91611 ], [ 92.79239, 12.91533 ], [ 92.79239, 12.91462 ], [ 92.79263, 12.91408 ], [ 92.79357, 12.91252 ], [ 92.79391, 12.91175 ], [ 92.79442, 12.91114 ], [ 92.79476, 12.91068 ], [ 92.79602, 12.9096 ], [ 92.79641, 12.9092 ], [ 92.79656, 12.90867 ], [ 92.79669, 12.90806 ], [ 92.79656, 12.90748 ], [ 92.79649, 12.90685 ], [ 92.79653, 12.90603 ], [ 92.79675, 12.90467 ], [ 92.79716, 12.90313 ], [ 92.79746, 12.90142 ], [ 92.79788, 12.90056 ], [ 92.79901, 12.89909 ], [ 92.79963, 12.89837 ], [ 92.80016, 12.89793 ], [ 92.80042, 12.89765 ], [ 92.80051, 12.89749 ], [ 92.80056, 12.89726 ], [ 92.80048, 12.89713 ], [ 92.79993, 12.89673 ], [ 92.79951, 12.89635 ], [ 92.7991, 12.89587 ], [ 92.79887, 12.89544 ], [ 92.79869, 12.89475 ], [ 92.79856, 12.8945 ], [ 92.79823, 12.89433 ], [ 92.79663, 12.89373 ], [ 92.79469, 12.89288 ], [ 92.79354, 12.89234 ], [ 92.79294, 12.89222 ], [ 92.79232, 12.89232 ] ] ], [ [ [ 92.69096, 12.83538 ], [ 92.69087, 12.83548 ], [ 92.6905475, 12.83542 ], [ 92.69044, 12.8354 ], [ 92.69041, 12.83542 ], [ 92.69038, 12.83544 ], [ 92.69036, 12.83559 ], [ 92.69029, 12.83575 ], [ 92.69025, 12.83597 ], [ 92.69018, 12.83604 ], [ 92.69007, 12.83605 ], [ 92.68991, 12.83593 ], [ 92.68984, 12.83575 ], [ 92.68976, 12.83567 ], [ 92.68958, 12.83562 ], [ 92.6895, 12.83562 ], [ 92.68949, 12.8356 ], [ 92.68954, 12.83555 ], [ 92.68954, 12.83552 ], [ 92.68937, 12.83546 ], [ 92.689347142857144, 12.83542 ], [ 92.68933, 12.83539 ], [ 92.6894575, 12.83522 ], [ 92.68951, 12.83515 ], [ 92.68947, 12.83505 ], [ 92.68948, 12.83495 ], [ 92.68952, 12.83491 ], [ 92.68953, 12.83485 ], [ 92.6895, 12.83477 ], [ 92.68952, 12.83476 ], [ 92.68962, 12.83482 ], [ 92.6896, 12.83473 ], [ 92.68953, 12.83467 ], [ 92.68936, 12.83475 ], [ 92.68928, 12.83477 ], [ 92.68922, 12.83489 ], [ 92.68912, 12.83494 ], [ 92.68898, 12.83491 ], [ 92.68894, 12.83484 ], [ 92.6886, 12.8348 ], [ 92.68852, 12.83476 ], [ 92.68847, 12.83479 ], [ 92.68841, 12.83485 ], [ 92.68837, 12.83484 ], [ 92.68833, 12.83486 ], [ 92.68835, 12.8349 ], [ 92.68817, 12.83504 ], [ 92.6878, 12.83516 ], [ 92.68768, 12.83512 ], [ 92.68761, 12.83516 ], [ 92.68755, 12.83512 ], [ 92.68743, 12.83512 ], [ 92.68734, 12.83508 ], [ 92.68728, 12.83511 ], [ 92.68729, 12.8352 ], [ 92.68723, 12.83524 ], [ 92.68715, 12.83525 ], [ 92.6871, 12.8353 ], [ 92.68707, 12.83527 ], [ 92.68704, 12.8353 ], [ 92.68708, 12.83539 ], [ 92.68692, 12.83539 ], [ 92.68668, 12.83542 ], [ 92.6866, 12.83543 ], [ 92.68647, 12.83556 ], [ 92.68636, 12.83558 ], [ 92.68635, 12.83554 ], [ 92.68632, 12.83554 ], [ 92.68632, 12.8356 ], [ 92.68619, 12.83558 ], [ 92.686, 12.8357 ], [ 92.686, 12.83572 ], [ 92.68605, 12.83575 ], [ 92.68604, 12.83582 ], [ 92.68601, 12.83585 ], [ 92.68585, 12.83588 ], [ 92.68572, 12.83573 ], [ 92.6856, 12.83588 ], [ 92.68571, 12.83593 ], [ 92.68554, 12.83603 ], [ 92.68551, 12.83601 ], [ 92.68542, 12.83604 ], [ 92.6854, 12.83601 ], [ 92.68547, 12.83595 ], [ 92.68552, 12.83575 ], [ 92.68549, 12.83559 ], [ 92.6854, 12.83557 ], [ 92.68526, 12.83585 ], [ 92.68519, 12.83586 ], [ 92.68513, 12.83581 ], [ 92.68509, 12.83581 ], [ 92.68502, 12.83588 ], [ 92.68493, 12.83584 ], [ 92.68488, 12.83588 ], [ 92.68477, 12.83577 ], [ 92.68474, 12.83578 ], [ 92.68474, 12.83581 ], [ 92.6848, 12.83592 ], [ 92.68476, 12.83595 ], [ 92.6847, 12.83593 ], [ 92.68464, 12.83581 ], [ 92.68453, 12.83574 ], [ 92.68435, 12.83579 ], [ 92.68427, 12.83574 ], [ 92.68413, 12.83577 ], [ 92.68407, 12.83582 ], [ 92.68364, 12.83594 ], [ 92.68354, 12.83601 ], [ 92.68362, 12.83607 ], [ 92.68357, 12.83607 ], [ 92.68357, 12.83614 ], [ 92.68372, 12.83622 ], [ 92.68373, 12.83627 ], [ 92.68363, 12.83626 ], [ 92.6836, 12.83635 ], [ 92.68367, 12.83641 ], [ 92.68365, 12.83644 ], [ 92.68333, 12.83641 ], [ 92.68328, 12.83643 ], [ 92.68326, 12.83649 ], [ 92.68312, 12.83646 ], [ 92.68304, 12.83651 ], [ 92.68302, 12.83659 ], [ 92.68297, 12.83663 ], [ 92.68267, 12.8368 ], [ 92.68264, 12.83693 ], [ 92.68255, 12.83692 ], [ 92.68254, 12.83694 ], [ 92.68256, 12.83695 ], [ 92.68251, 12.83699 ], [ 92.68254, 12.83711 ], [ 92.68247, 12.83723 ], [ 92.68249, 12.83728 ], [ 92.68248, 12.83732 ], [ 92.68226, 12.83755 ], [ 92.68199, 12.83761 ], [ 92.68199, 12.83767 ], [ 92.68197, 12.83769 ], [ 92.68188, 12.83762 ], [ 92.68182, 12.83763 ], [ 92.68178, 12.83772 ], [ 92.68168, 12.83774 ], [ 92.68156, 12.83783 ], [ 92.68151, 12.83783 ], [ 92.68152, 12.83787 ], [ 92.6814, 12.83795 ], [ 92.68129, 12.83809 ], [ 92.68129, 12.83813 ], [ 92.68111, 12.83828 ], [ 92.68104, 12.83825 ], [ 92.681, 12.83826 ], [ 92.68092, 12.83822 ], [ 92.68094, 12.83832 ], [ 92.68089, 12.83835 ], [ 92.68068, 12.83831 ], [ 92.68063, 12.83833 ], [ 92.68061, 12.83825 ], [ 92.68051, 12.83828 ], [ 92.6805, 12.83837 ], [ 92.68043, 12.83839 ], [ 92.68033, 12.83832 ], [ 92.68008, 12.83832 ], [ 92.67995, 12.8384 ], [ 92.67989, 12.8385 ], [ 92.67991, 12.83853 ], [ 92.67989, 12.83857 ], [ 92.67981, 12.83857 ], [ 92.67974, 12.83863 ], [ 92.67973, 12.83877 ], [ 92.67966, 12.83885 ], [ 92.6796, 12.83885 ], [ 92.67932, 12.83857 ], [ 92.67932, 12.83851 ], [ 92.67888, 12.83836 ], [ 92.67888, 12.83832 ], [ 92.67888, 12.83826 ], [ 92.67883, 12.83828 ], [ 92.67878, 12.8383 ], [ 92.67869, 12.8382 ], [ 92.67868, 12.83816 ], [ 92.67856, 12.83809 ], [ 92.67841, 12.83806 ], [ 92.67828, 12.83801 ], [ 92.67826, 12.83805 ], [ 92.67821, 12.83794 ], [ 92.67817, 12.83793 ], [ 92.67809, 12.83797 ], [ 92.67799, 12.83816 ], [ 92.67798, 12.83824 ], [ 92.67786, 12.83836 ], [ 92.67783, 12.83836 ], [ 92.67788, 12.83812 ], [ 92.6778, 12.83786 ], [ 92.67765, 12.83766 ], [ 92.67761, 12.83767 ], [ 92.67757, 12.83769 ], [ 92.67754, 12.83757 ], [ 92.67732, 12.83739 ], [ 92.67715, 12.83727 ], [ 92.67702, 12.83721 ], [ 92.67695, 12.83713 ], [ 92.67672, 12.83709 ], [ 92.67664, 12.83716 ], [ 92.67665, 12.83733 ], [ 92.67656, 12.83729 ], [ 92.67652, 12.8373 ], [ 92.6765, 12.83737 ], [ 92.67627, 12.83752 ], [ 92.67621, 12.83752 ], [ 92.67616, 12.83748 ], [ 92.67624, 12.83717 ], [ 92.67624, 12.83626 ], [ 92.67619, 12.83618 ], [ 92.67595, 12.836 ], [ 92.67549, 12.83589 ], [ 92.67531, 12.83588 ], [ 92.67479, 12.83593 ], [ 92.67427, 12.83606 ], [ 92.67424, 12.83604 ], [ 92.67376, 12.83621 ], [ 92.6734, 12.83645 ], [ 92.6731, 12.83699 ], [ 92.6731, 12.83706 ], [ 92.67318, 12.83718 ], [ 92.67319, 12.83729 ], [ 92.67307, 12.8373 ], [ 92.67296, 12.83721 ], [ 92.67278, 12.83722 ], [ 92.67261, 12.83734 ], [ 92.67253, 12.83736 ], [ 92.67247, 12.83733 ], [ 92.67246, 12.83721 ], [ 92.67257, 12.83713 ], [ 92.67281, 12.83671 ], [ 92.67298, 12.83663 ], [ 92.67337, 12.83613 ], [ 92.67357, 12.83601 ], [ 92.67432, 12.83573 ], [ 92.67459, 12.83568 ], [ 92.67527, 12.83544 ], [ 92.67563, 12.83528 ], [ 92.67592, 12.8351 ], [ 92.67651, 12.83456 ], [ 92.67689, 12.83428 ], [ 92.67742, 12.83374 ], [ 92.67768, 12.83315 ], [ 92.67788, 12.83258 ], [ 92.67792, 12.83234 ], [ 92.67793, 12.832 ], [ 92.678, 12.83195 ], [ 92.67801, 12.83189 ], [ 92.67791, 12.83176 ], [ 92.67787, 12.83157 ], [ 92.67776, 12.83137 ], [ 92.67766, 12.83124 ], [ 92.67749, 12.83114 ], [ 92.67729, 12.83106 ], [ 92.67691, 12.83102 ], [ 92.67581, 12.83134 ], [ 92.67525, 12.83156 ], [ 92.67491, 12.83172 ], [ 92.67472, 12.83188 ], [ 92.67464, 12.83191 ], [ 92.67459, 12.83189 ], [ 92.67458, 12.83185 ], [ 92.67464, 12.83176 ], [ 92.67494, 12.83154 ], [ 92.67551, 12.83121 ], [ 92.67633, 12.83084 ], [ 92.67645, 12.83073 ], [ 92.67706, 12.82969 ], [ 92.67711, 12.82953 ], [ 92.67713, 12.82902 ], [ 92.67708, 12.82896 ], [ 92.677, 12.82892 ], [ 92.67702, 12.82885 ], [ 92.67714, 12.82877 ], [ 92.67718, 12.82865 ], [ 92.67713, 12.82843 ], [ 92.67704, 12.82778 ], [ 92.67698, 12.8275 ], [ 92.67688, 12.82741 ], [ 92.67687, 12.82721 ], [ 92.67695, 12.82701 ], [ 92.67703, 12.82638 ], [ 92.67702, 12.82595 ], [ 92.67694, 12.82568 ], [ 92.67665, 12.82508 ], [ 92.67604, 12.82416 ], [ 92.6759, 12.82295 ], [ 92.67586, 12.8228 ], [ 92.67578, 12.82263 ], [ 92.67566, 12.82251 ], [ 92.67534, 12.82232 ], [ 92.6753, 12.82227 ], [ 92.67532, 12.82223 ], [ 92.67538, 12.82221 ], [ 92.6757, 12.82232 ], [ 92.67596, 12.82251 ], [ 92.67607, 12.8227 ], [ 92.67617, 12.82298 ], [ 92.67633, 12.82367 ], [ 92.67647, 12.82401 ], [ 92.67672, 12.82428 ], [ 92.6769, 12.82438 ], [ 92.67704, 12.82449 ], [ 92.67732, 12.8246 ], [ 92.67762, 12.82485 ], [ 92.67785, 12.82495 ], [ 92.67829, 12.82503 ], [ 92.67838, 12.82501 ], [ 92.6785, 12.82483 ], [ 92.67865, 12.8248 ], [ 92.67873, 12.82482 ], [ 92.67874, 12.82486 ], [ 92.67863, 12.82495 ], [ 92.67863, 12.82506 ], [ 92.67867, 12.82516 ], [ 92.67876, 12.82523 ], [ 92.67908, 12.82533 ], [ 92.67969, 12.82573 ], [ 92.6798, 12.82595 ], [ 92.67978, 12.82623 ], [ 92.67984, 12.8264 ], [ 92.67995, 12.82645 ], [ 92.68, 12.8265 ], [ 92.67993, 12.8266 ], [ 92.68013, 12.8269 ], [ 92.68056, 12.82727 ], [ 92.6811, 12.8275 ], [ 92.68126, 12.82767 ], [ 92.68139, 12.82774 ], [ 92.68171, 12.82775 ], [ 92.68173, 12.82771 ], [ 92.68153, 12.82733 ], [ 92.68159, 12.8273 ], [ 92.68169, 12.82742 ], [ 92.68185, 12.8274 ], [ 92.68187, 12.82754 ], [ 92.68179, 12.8279 ], [ 92.68172, 12.82801 ], [ 92.68169, 12.82815 ], [ 92.6817, 12.82831 ], [ 92.68185, 12.82847 ], [ 92.68208, 12.82861 ], [ 92.68251, 12.82897 ], [ 92.68328, 12.82936 ], [ 92.68371, 12.8295 ], [ 92.68389, 12.8295 ], [ 92.68413, 12.82938 ], [ 92.68427, 12.82938 ], [ 92.68436, 12.82949 ], [ 92.68447, 12.82953 ], [ 92.68455, 12.8296 ], [ 92.68464, 12.82961 ], [ 92.6847, 12.82953 ], [ 92.68476, 12.82928 ], [ 92.68487, 12.82917 ], [ 92.68507, 12.82902 ], [ 92.68514, 12.82883 ], [ 92.6855, 12.82851 ], [ 92.68597, 12.82783 ], [ 92.68606, 12.82764 ], [ 92.68617, 12.82753 ], [ 92.68643, 12.82751 ], [ 92.68649, 12.82748 ], [ 92.68667, 12.82715 ], [ 92.68676, 12.82706 ], [ 92.68693, 12.82702 ], [ 92.68714, 12.82674 ], [ 92.68718, 12.82662 ], [ 92.68718, 12.82654 ], [ 92.68709, 12.82638 ], [ 92.68699, 12.82632 ], [ 92.68686, 12.8263 ], [ 92.68666, 12.82619 ], [ 92.68659, 12.82607 ], [ 92.68637, 12.82509 ], [ 92.68623, 12.82495 ], [ 92.68617, 12.82477 ], [ 92.68615, 12.8246 ], [ 92.6863, 12.82413 ], [ 92.68666, 12.82359 ], [ 92.68687, 12.82308 ], [ 92.68691, 12.82256 ], [ 92.6869, 12.82222 ], [ 92.68694, 12.82201 ], [ 92.68696, 12.82073 ], [ 92.68704, 12.82061 ], [ 92.68706, 12.82051 ], [ 92.6872, 12.82039 ], [ 92.6873, 12.82036 ], [ 92.68732, 12.82031 ], [ 92.68725, 12.82019 ], [ 92.68729, 12.82013 ], [ 92.68764, 12.82015 ], [ 92.68789, 12.82002 ], [ 92.68796, 12.8201 ], [ 92.6881, 12.82001 ], [ 92.68829, 12.81975 ], [ 92.68829, 12.8197 ], [ 92.68821, 12.81959 ], [ 92.68819, 12.81949 ], [ 92.68836, 12.81903 ], [ 92.68846, 12.81889 ], [ 92.68848, 12.81874 ], [ 92.68858, 12.81861 ], [ 92.68881, 12.81794 ], [ 92.68884, 12.81777 ], [ 92.68894, 12.81747 ], [ 92.68894, 12.81716 ], [ 92.68908, 12.81713 ], [ 92.68911, 12.81709 ], [ 92.68899, 12.817 ], [ 92.68899, 12.81691 ], [ 92.68868, 12.81676 ], [ 92.68861, 12.81676 ], [ 92.6885, 12.81686 ], [ 92.68834, 12.81684 ], [ 92.68818, 12.8168 ], [ 92.68809, 12.8168 ], [ 92.688, 12.81685 ], [ 92.68793, 12.81686 ], [ 92.68788, 12.81676 ], [ 92.68782, 12.81676 ], [ 92.68778, 12.81679 ], [ 92.68779, 12.81684 ], [ 92.68776, 12.8169 ], [ 92.68764, 12.8169 ], [ 92.6876, 12.81687 ], [ 92.68753, 12.81687 ], [ 92.68746, 12.81698 ], [ 92.68747, 12.81713 ], [ 92.68738, 12.81717 ], [ 92.68722, 12.81715 ], [ 92.68712, 12.81706 ], [ 92.68715, 12.81671 ], [ 92.68722, 12.81657 ], [ 92.68741, 12.81643 ], [ 92.68772, 12.81633 ], [ 92.68775, 12.81629 ], [ 92.68774, 12.81612 ], [ 92.68781, 12.81609 ], [ 92.6878, 12.81603 ], [ 92.68785, 12.8159 ], [ 92.68797, 12.81575 ], [ 92.68802, 12.81573 ], [ 92.6881, 12.81561 ], [ 92.68813, 12.81536 ], [ 92.6882, 12.8153 ], [ 92.6883, 12.81528 ], [ 92.68827, 12.8152 ], [ 92.68822, 12.81517 ], [ 92.68819, 12.81507 ], [ 92.68824, 12.81501 ], [ 92.68825, 12.81496 ], [ 92.68831, 12.81492 ], [ 92.68836, 12.81473 ], [ 92.68836, 12.81465 ], [ 92.68831, 12.81448 ], [ 92.68834, 12.81437 ], [ 92.68831, 12.8143 ], [ 92.68824, 12.81427 ], [ 92.68806, 12.81427 ], [ 92.68786, 12.81438 ], [ 92.68771, 12.81441 ], [ 92.68766, 12.81428 ], [ 92.68759, 12.81424 ], [ 92.68749, 12.81423 ], [ 92.68744, 12.8142 ], [ 92.68742, 12.81414 ], [ 92.68731, 12.814 ], [ 92.68732, 12.81384 ], [ 92.68744, 12.81376 ], [ 92.68749, 12.81359 ], [ 92.68753, 12.81355 ], [ 92.68754, 12.81349 ], [ 92.68738, 12.81327 ], [ 92.68735, 12.81314 ], [ 92.68725, 12.81311 ], [ 92.68715, 12.81324 ], [ 92.6871, 12.81327 ], [ 92.68707, 12.81318 ], [ 92.68699, 12.81314 ], [ 92.68699, 12.81339 ], [ 92.68678, 12.8134 ], [ 92.68673, 12.81336 ], [ 92.6867, 12.81354 ], [ 92.68661, 12.81357 ], [ 92.68656, 12.81353 ], [ 92.68653, 12.81344 ], [ 92.68657, 12.81332 ], [ 92.68661, 12.81327 ], [ 92.68668, 12.81324 ], [ 92.68672, 12.81319 ], [ 92.68672, 12.81314 ], [ 92.68657, 12.81314 ], [ 92.68648, 12.8132 ], [ 92.68639, 12.8133 ], [ 92.68631, 12.81332 ], [ 92.68626, 12.8133 ], [ 92.68606, 12.81294 ], [ 92.68593, 12.81266 ], [ 92.68592, 12.81257 ], [ 92.68568, 12.81219 ], [ 92.68562, 12.81218 ], [ 92.68559, 12.81222 ], [ 92.68555, 12.81246 ], [ 92.68548, 12.81252 ], [ 92.68541, 12.81254 ], [ 92.68535, 12.81253 ], [ 92.68517, 12.81232 ], [ 92.68509, 12.81229 ], [ 92.68503, 12.81235 ], [ 92.68492, 12.81237 ], [ 92.68483, 12.81236 ], [ 92.68471, 12.81215 ], [ 92.68461, 12.81214 ], [ 92.68445, 12.81222 ], [ 92.68421, 12.81225 ], [ 92.68397, 12.81224 ], [ 92.68393, 12.81221 ], [ 92.68389, 12.81213 ], [ 92.68388, 12.81202 ], [ 92.68384, 12.81195 ], [ 92.6837, 12.81197 ], [ 92.68364, 12.8121 ], [ 92.68352, 12.8121 ], [ 92.68339, 12.81194 ], [ 92.68339, 12.81184 ], [ 92.68346, 12.81168 ], [ 92.68346, 12.81157 ], [ 92.68335, 12.81144 ], [ 92.68329, 12.81147 ], [ 92.68323, 12.81147 ], [ 92.68318, 12.81144 ], [ 92.68315, 12.81136 ], [ 92.68324, 12.81112 ], [ 92.68332, 12.8111 ], [ 92.6834, 12.81101 ], [ 92.68335, 12.81093 ], [ 92.68335, 12.81086 ], [ 92.68312, 12.81021 ], [ 92.68301, 12.81002 ], [ 92.68301, 12.80996 ], [ 92.68304, 12.8099 ], [ 92.68302, 12.80984 ], [ 92.68289, 12.80965 ], [ 92.68281, 12.80939 ], [ 92.68274, 12.80929 ], [ 92.68263, 12.80921 ], [ 92.68251, 12.80904 ], [ 92.68239, 12.80898 ], [ 92.68213, 12.80896 ], [ 92.68201, 12.80902 ], [ 92.68184, 12.80919 ], [ 92.6813, 12.80911 ], [ 92.68098, 12.8091 ], [ 92.6807, 12.80912 ], [ 92.67872, 12.80939 ], [ 92.67786, 12.8094 ], [ 92.67754, 12.80935 ], [ 92.67729, 12.80924 ], [ 92.67659, 12.8088 ], [ 92.67586, 12.8082 ], [ 92.67567, 12.8081 ], [ 92.67559, 12.80802 ], [ 92.67554, 12.80788 ], [ 92.67533, 12.8077 ], [ 92.67506, 12.80732 ], [ 92.67504, 12.80719 ], [ 92.67526, 12.80586 ], [ 92.67535, 12.80564 ], [ 92.67535, 12.80543 ], [ 92.67526, 12.80522 ], [ 92.67493, 12.80476 ], [ 92.67465, 12.80417 ], [ 92.67457, 12.80391 ], [ 92.67458, 12.80377 ], [ 92.67465, 12.80361 ], [ 92.67467, 12.80335 ], [ 92.67423, 12.80257 ], [ 92.6742, 12.80237 ], [ 92.67421, 12.80216 ], [ 92.67426, 12.80206 ], [ 92.67425, 12.80194 ], [ 92.67417, 12.80182 ], [ 92.67407, 12.80155 ], [ 92.67407, 12.8014 ], [ 92.67382, 12.80113 ], [ 92.67366, 12.80091 ], [ 92.6736, 12.80056 ], [ 92.67362, 12.80045 ], [ 92.67306, 12.79951 ], [ 92.67277, 12.79914 ], [ 92.6727, 12.79877 ], [ 92.67273, 12.79865 ], [ 92.67291, 12.79847 ], [ 92.67305, 12.79817 ], [ 92.67303, 12.79796 ], [ 92.67289, 12.79775 ], [ 92.6728, 12.7975 ], [ 92.67274, 12.7972 ], [ 92.67264, 12.79687 ], [ 92.67229, 12.79636 ], [ 92.67223, 12.79577 ], [ 92.67213, 12.79544 ], [ 92.67198, 12.79509 ], [ 92.67187, 12.79465 ], [ 92.67161, 12.79414 ], [ 92.67162, 12.79299 ], [ 92.67159, 12.79252 ], [ 92.67153, 12.79231 ], [ 92.67136, 12.79197 ], [ 92.67112, 12.79162 ], [ 92.67063, 12.79076 ], [ 92.67057, 12.79049 ], [ 92.67063, 12.78993 ], [ 92.6705, 12.78955 ], [ 92.67019, 12.78902 ], [ 92.66982, 12.7886 ], [ 92.6695, 12.78761 ], [ 92.6695, 12.78709 ], [ 92.66941, 12.78682 ], [ 92.66941, 12.78627 ], [ 92.66913, 12.78563 ], [ 92.66913, 12.78548 ], [ 92.66917, 12.78528 ], [ 92.66916, 12.78479 ], [ 92.66903, 12.78461 ], [ 92.66895, 12.78436 ], [ 92.66885, 12.7839 ], [ 92.6686, 12.78317 ], [ 92.6684, 12.78285 ], [ 92.66826, 12.78285 ], [ 92.66802, 12.78289 ], [ 92.66739, 12.78396 ], [ 92.66709, 12.78433 ], [ 92.66671, 12.7849 ], [ 92.66674, 12.78525 ], [ 92.66692, 12.78541 ], [ 92.66711, 12.78577 ], [ 92.66711, 12.78654 ], [ 92.66726, 12.7873 ], [ 92.66757, 12.78836 ], [ 92.66762, 12.78946 ], [ 92.66775, 12.79014 ], [ 92.66758, 12.79064 ], [ 92.66699, 12.79131 ], [ 92.66608, 12.79192 ], [ 92.66405, 12.79296 ], [ 92.66353, 12.79351 ], [ 92.66262, 12.79418 ], [ 92.66167, 12.79436 ], [ 92.66117, 12.79419 ], [ 92.6609, 12.79389 ], [ 92.6606, 12.79401 ], [ 92.66059, 12.79426 ], [ 92.65991, 12.79455 ], [ 92.65988, 12.795 ], [ 92.65975, 12.79533 ], [ 92.65969, 12.79594 ], [ 92.65979, 12.79641 ], [ 92.66, 12.7967 ], [ 92.66029, 12.79694 ], [ 92.6607, 12.79678 ], [ 92.66161, 12.79591 ], [ 92.66211, 12.79561 ], [ 92.66276, 12.79565 ], [ 92.66347, 12.79615 ], [ 92.66496, 12.79786 ], [ 92.66527, 12.7985 ], [ 92.66543, 12.79932 ], [ 92.66547, 12.80046 ], [ 92.66593, 12.80234 ], [ 92.66645, 12.80416 ], [ 92.66649, 12.80495 ], [ 92.66638, 12.80542 ], [ 92.66637, 12.80641 ], [ 92.66625, 12.80761 ], [ 92.66574, 12.81035 ], [ 92.66554, 12.8116 ], [ 92.66465, 12.81328 ], [ 92.66374, 12.81462 ], [ 92.66283, 12.81558 ], [ 92.6621, 12.81653 ], [ 92.66153, 12.81745 ], [ 92.66114, 12.81828 ], [ 92.66099, 12.81896 ], [ 92.661, 12.82064 ], [ 92.66108, 12.82352 ], [ 92.66106, 12.82517 ], [ 92.66094, 12.8263 ], [ 92.66073, 12.82722 ], [ 92.66028, 12.82812 ], [ 92.65991, 12.82903 ], [ 92.65938, 12.82989 ], [ 92.6587, 12.83063 ], [ 92.65755, 12.83158 ], [ 92.65646, 12.83285 ], [ 92.65579, 12.83372 ], [ 92.655017743902434, 12.83542 ], [ 92.655017743902448, 12.83542 ], [ 92.6543, 12.837 ], [ 92.65352, 12.839 ], [ 92.65327, 12.83985 ], [ 92.65315, 12.84079 ], [ 92.65271, 12.84286 ], [ 92.65239, 12.84341 ], [ 92.65215, 12.844 ], [ 92.65207, 12.84437 ], [ 92.65176, 12.84499 ], [ 92.65146, 12.84541 ], [ 92.65109, 12.84614 ], [ 92.65077, 12.84692 ], [ 92.65068, 12.84781 ], [ 92.65098, 12.85199 ], [ 92.65089, 12.85335 ], [ 92.65068, 12.85415 ], [ 92.6499, 12.85679 ], [ 92.64972, 12.8577 ], [ 92.64944, 12.85882 ], [ 92.64929, 12.85984 ], [ 92.64925, 12.86061 ], [ 92.64898, 12.8609 ], [ 92.64864, 12.86094 ], [ 92.64853, 12.86113 ], [ 92.64851, 12.86145 ], [ 92.64866, 12.86163 ], [ 92.64904, 12.86171 ], [ 92.65061, 12.86175 ], [ 92.651, 12.86194 ], [ 92.65136, 12.86222 ], [ 92.6515, 12.86305 ], [ 92.65158, 12.86469 ], [ 92.6513, 12.86572 ], [ 92.65126, 12.86642 ], [ 92.65145, 12.86704 ], [ 92.6516, 12.86733 ], [ 92.65179, 12.86748 ], [ 92.65267, 12.86717 ], [ 92.65324, 12.8672 ], [ 92.65378, 12.86741 ], [ 92.65437, 12.86758 ], [ 92.65515, 12.8683 ], [ 92.65613, 12.86925 ], [ 92.65746, 12.87073 ], [ 92.65841, 12.87197 ], [ 92.65953, 12.87364 ], [ 92.66078, 12.87609 ], [ 92.66206, 12.87808 ], [ 92.66259, 12.87882 ], [ 92.66382, 12.88017 ], [ 92.6643, 12.88095 ], [ 92.6647, 12.8819 ], [ 92.66499, 12.88329 ], [ 92.66638, 12.88716 ], [ 92.66661, 12.88758 ], [ 92.666607073503172, 12.887607313970383 ], [ 92.66658, 12.88786 ], [ 92.66635, 12.88785 ], [ 92.66612, 12.88795 ], [ 92.66612, 12.88817 ], [ 92.66618, 12.8886 ], [ 92.66632, 12.88902 ], [ 92.66657, 12.88941 ], [ 92.66666, 12.88974 ], [ 92.66663, 12.89057 ], [ 92.66655, 12.89114 ], [ 92.66602, 12.89216 ], [ 92.66584, 12.89314 ], [ 92.66584, 12.89364 ], [ 92.66615, 12.89411 ], [ 92.6666, 12.89467 ], [ 92.66721, 12.89557 ], [ 92.66755, 12.89602 ], [ 92.66755, 12.89665 ], [ 92.66726, 12.89708 ], [ 92.66713, 12.89718 ], [ 92.66701, 12.89766 ], [ 92.66676, 12.898 ], [ 92.66639, 12.8986 ], [ 92.66608, 12.89995 ], [ 92.6657, 12.90205 ], [ 92.66572, 12.90266 ], [ 92.66603, 12.90314 ], [ 92.66642, 12.90334 ], [ 92.66711, 12.90354 ], [ 92.66768, 12.90386 ], [ 92.66805, 12.90421 ], [ 92.66851, 12.90442 ], [ 92.66904, 12.90457 ], [ 92.66992, 12.90454 ], [ 92.67021, 12.90436 ], [ 92.67036, 12.90421 ], [ 92.67069, 12.90417 ], [ 92.67077, 12.90437 ], [ 92.67077, 12.90509 ], [ 92.6709, 12.90557 ], [ 92.67099, 12.90623 ], [ 92.67113, 12.90758 ], [ 92.67126, 12.90785 ], [ 92.67135, 12.90828 ], [ 92.6711, 12.90851 ], [ 92.67107, 12.90906 ], [ 92.67088, 12.91032 ], [ 92.67058, 12.91307 ], [ 92.67035, 12.91467 ], [ 92.67028, 12.91591 ], [ 92.67006, 12.91707 ], [ 92.67008, 12.91749 ], [ 92.67027, 12.91781 ], [ 92.67025, 12.91816 ], [ 92.67011, 12.9187 ], [ 92.67027, 12.92003 ], [ 92.67044, 12.92101 ], [ 92.67072, 12.92213 ], [ 92.67073, 12.92265 ], [ 92.67086, 12.92305 ], [ 92.67103, 12.92335 ], [ 92.67138, 12.92349 ], [ 92.67171, 12.92354 ], [ 92.67196, 12.92364 ], [ 92.67212, 12.92383 ], [ 92.67223, 12.92419 ], [ 92.67229, 12.92523 ], [ 92.67212, 12.926 ], [ 92.67212, 12.92643 ], [ 92.67274, 12.92712 ], [ 92.67336, 12.92805 ], [ 92.67361, 12.92847 ], [ 92.67392, 12.92865 ], [ 92.67414, 12.92887 ], [ 92.67427, 12.92925 ], [ 92.67422, 12.92952 ], [ 92.674, 12.92971 ], [ 92.67389, 12.92998 ], [ 92.67397, 12.93018 ], [ 92.67408, 12.93031 ], [ 92.67416, 12.93049 ], [ 92.67413, 12.9309 ], [ 92.67397, 12.9311 ], [ 92.67383, 12.93115 ], [ 92.67369, 12.93135 ], [ 92.67367, 12.93152 ], [ 92.67394, 12.93187 ], [ 92.67413, 12.93203 ], [ 92.67391, 12.93245 ], [ 92.67386, 12.93263 ], [ 92.67386, 12.93274 ], [ 92.67401, 12.93301 ], [ 92.67412, 12.93312 ], [ 92.6744, 12.9332 ], [ 92.67454, 12.93333 ], [ 92.67468, 12.93339 ], [ 92.67479, 12.93347 ], [ 92.67484, 12.93358 ], [ 92.67484, 12.93379 ], [ 92.67476, 12.93386 ], [ 92.67444, 12.93399 ], [ 92.6744, 12.9341 ], [ 92.67441, 12.93418 ], [ 92.6746, 12.93442 ], [ 92.67474, 12.93442 ], [ 92.67494, 12.93437 ], [ 92.6751, 12.93428 ], [ 92.67532, 12.9342 ], [ 92.67552, 12.93417 ], [ 92.67594, 12.93424 ], [ 92.67623, 12.93436 ], [ 92.67643, 12.93436 ], [ 92.67654, 12.93439 ], [ 92.6766, 12.93444 ], [ 92.67659, 12.93453 ], [ 92.67651, 12.93466 ], [ 92.6764, 12.93477 ], [ 92.67639, 12.93486 ], [ 92.67648, 12.93505 ], [ 92.6769, 12.93536 ], [ 92.67686, 12.93544 ], [ 92.67679, 12.93545 ], [ 92.6765, 12.93538 ], [ 92.67633, 12.9354 ], [ 92.67618, 12.93548 ], [ 92.67597, 12.93572 ], [ 92.67581, 12.93583 ], [ 92.67564, 12.93614 ], [ 92.67565, 12.93642 ], [ 92.67569, 12.93666 ], [ 92.67586, 12.93685 ], [ 92.67617, 12.93704 ], [ 92.67656, 12.93739 ], [ 92.67673, 12.9379 ], [ 92.67687, 12.93807 ], [ 92.67705, 12.93808 ], [ 92.67719, 12.93812 ], [ 92.67729, 12.93818 ], [ 92.67729, 12.93828 ], [ 92.67722, 12.93833 ], [ 92.67722, 12.9384 ], [ 92.67734, 12.9385 ], [ 92.67747, 12.93856 ], [ 92.67758, 12.93857 ], [ 92.67765, 12.93867 ], [ 92.67763, 12.93875 ], [ 92.67753, 12.93876 ], [ 92.67743, 12.93872 ], [ 92.67725, 12.93853 ], [ 92.67694, 12.93851 ], [ 92.67675, 12.93858 ], [ 92.67668, 12.93863 ], [ 92.6767, 12.93877 ], [ 92.6768, 12.9388 ], [ 92.67717, 12.93864 ], [ 92.67726, 12.93869 ], [ 92.67726, 12.93879 ], [ 92.67718, 12.93881 ], [ 92.67706, 12.9389 ], [ 92.67705, 12.93896 ], [ 92.67726, 12.9391 ], [ 92.67742, 12.93905 ], [ 92.67754, 12.93905 ], [ 92.6776, 12.9391 ], [ 92.67762, 12.93924 ], [ 92.67761, 12.93935 ], [ 92.67755, 12.93943 ], [ 92.67699, 12.93949 ], [ 92.67693, 12.93955 ], [ 92.67689, 12.9397 ], [ 92.67688, 12.93993 ], [ 92.676891538461533, 12.93996 ], [ 92.67693, 12.94006 ], [ 92.6769925, 12.94016 ], [ 92.67703, 12.94022 ], [ 92.67719, 12.94039 ], [ 92.67804, 12.94099 ], [ 92.67826, 12.94109 ], [ 92.6784, 12.94122 ], [ 92.67878, 12.94121 ], [ 92.67885, 12.94126 ], [ 92.67899, 12.94149 ], [ 92.67912, 12.94147 ], [ 92.67921, 12.94139 ], [ 92.6793, 12.94138 ], [ 92.6794, 12.94143 ], [ 92.67974, 12.94145 ], [ 92.68003, 12.9416 ], [ 92.68003, 12.94174 ], [ 92.67993, 12.94184 ], [ 92.67977, 12.9419 ], [ 92.67957, 12.9419 ], [ 92.67957, 12.94205 ], [ 92.67974, 12.94224 ], [ 92.67992, 12.94227 ], [ 92.68005, 12.94237 ], [ 92.68005, 12.94251 ], [ 92.68011, 12.94255 ], [ 92.68003, 12.9427 ], [ 92.67978, 12.94291 ], [ 92.67957, 12.94301 ], [ 92.67947, 12.94311 ], [ 92.67915, 12.94313 ], [ 92.67873, 12.94311 ], [ 92.67867, 12.94313 ], [ 92.67869, 12.94334 ], [ 92.67879, 12.94345 ], [ 92.67898, 12.94357 ], [ 92.67908, 12.94383 ], [ 92.67923, 12.94387 ], [ 92.67932, 12.94395 ], [ 92.67937, 12.94405 ], [ 92.67935, 12.94416 ], [ 92.67939, 12.94428 ], [ 92.67957, 12.94436 ], [ 92.67982, 12.94456 ], [ 92.67985, 12.94468 ], [ 92.67979, 12.94475 ], [ 92.67971, 12.94475 ], [ 92.67956, 12.94465 ], [ 92.67944, 12.94468 ], [ 92.67954, 12.94504 ], [ 92.6796, 12.94513 ], [ 92.67961, 12.94529 ], [ 92.67957, 12.94538 ], [ 92.67931, 12.94558 ], [ 92.67925, 12.94568 ], [ 92.67948, 12.94619 ], [ 92.67955, 12.9465 ], [ 92.67963, 12.94668 ], [ 92.67977, 12.94683 ], [ 92.67982, 12.94692 ], [ 92.68001, 12.947 ], [ 92.68017, 12.9471 ], [ 92.68028, 12.94722 ], [ 92.68041, 12.94731 ], [ 92.68046, 12.94742 ], [ 92.68058, 12.94741 ], [ 92.68075, 12.94721 ], [ 92.68086, 12.94712 ], [ 92.68117, 12.94709 ], [ 92.6813, 12.947 ], [ 92.68143, 12.94695 ], [ 92.68152, 12.94696 ], [ 92.68154, 12.94711 ], [ 92.68149, 12.94738 ], [ 92.68125, 12.94757 ], [ 92.68124, 12.94775 ], [ 92.68119, 12.94781 ], [ 92.68105, 12.94781 ], [ 92.68098, 12.94776 ], [ 92.68094, 12.94766 ], [ 92.68083, 12.94762 ], [ 92.68077, 12.94768 ], [ 92.68075, 12.94779 ], [ 92.68043, 12.94786 ], [ 92.6804, 12.94791 ], [ 92.6804, 12.94797 ], [ 92.6805, 12.94816 ], [ 92.68045, 12.94825 ], [ 92.68036, 12.94825 ], [ 92.6803, 12.94821 ], [ 92.68008, 12.94821 ], [ 92.68003, 12.94823 ], [ 92.67999, 12.94831 ], [ 92.67981, 12.94822 ], [ 92.67958, 12.94823 ], [ 92.67941, 12.94805 ], [ 92.67924, 12.94798 ], [ 92.67907, 12.94783 ], [ 92.67895, 12.94764 ], [ 92.6788, 12.94748 ], [ 92.67867, 12.9474 ], [ 92.67855, 12.94729 ], [ 92.67845, 12.94724 ], [ 92.67836, 12.94723 ], [ 92.67829, 12.94726 ], [ 92.67822, 12.94738 ], [ 92.67816, 12.94755 ], [ 92.67811, 12.94754 ], [ 92.67801, 12.94736 ], [ 92.67806, 12.9473 ], [ 92.6781, 12.94729 ], [ 92.6781, 12.94702 ], [ 92.67801, 12.94701 ], [ 92.67795, 12.9471 ], [ 92.67794, 12.9472 ], [ 92.67789, 12.94728 ], [ 92.67789, 12.94751 ], [ 92.67792, 12.94768 ], [ 92.67799, 12.94774 ], [ 92.67805, 12.94788 ], [ 92.67801, 12.94793 ], [ 92.67789, 12.948 ], [ 92.67788, 12.94807 ], [ 92.67814, 12.94834 ], [ 92.67813, 12.94841 ], [ 92.67805, 12.94842 ], [ 92.67797, 12.94839 ], [ 92.67789, 12.94839 ], [ 92.67784, 12.94843 ], [ 92.6779, 12.94853 ], [ 92.67795, 12.94854 ], [ 92.67796, 12.94859 ], [ 92.67793, 12.94862 ], [ 92.67785, 12.94861 ], [ 92.67754, 12.94827 ], [ 92.67746, 12.94825 ], [ 92.6774, 12.94826 ], [ 92.67735, 12.94842 ], [ 92.67738, 12.94854 ], [ 92.67735, 12.94858 ], [ 92.67713, 12.94855 ], [ 92.67699, 12.9485 ], [ 92.6769, 12.94851 ], [ 92.67683, 12.94859 ], [ 92.6768, 12.9487 ], [ 92.67682, 12.94897 ], [ 92.67693, 12.94922 ], [ 92.67714, 12.94951 ], [ 92.67712, 12.94957 ], [ 92.67696, 12.94944 ], [ 92.67693, 12.94938 ], [ 92.67682, 12.94938 ], [ 92.67682, 12.94957 ], [ 92.67689, 12.94967 ], [ 92.67689, 12.94976 ], [ 92.67701, 12.94984 ], [ 92.67703, 12.94996 ], [ 92.6769, 12.95004 ], [ 92.67691, 12.95011 ], [ 92.67687, 12.95016 ], [ 92.67679, 12.95016 ], [ 92.67668, 12.95009 ], [ 92.67662, 12.95012 ], [ 92.6766, 12.95016 ], [ 92.67661, 12.95022 ], [ 92.67666, 12.9503 ], [ 92.67684, 12.95042 ], [ 92.67692, 12.95042 ], [ 92.67699, 12.95047 ], [ 92.677, 12.95054 ], [ 92.6768, 12.95057 ], [ 92.67661, 12.95046 ], [ 92.67636, 12.95026 ], [ 92.67628, 12.95022 ], [ 92.67615, 12.95037 ], [ 92.67615, 12.95046 ], [ 92.6761, 12.9505 ], [ 92.67589, 12.95051 ], [ 92.67544, 12.95048 ], [ 92.67553, 12.95075 ], [ 92.67567, 12.9508 ], [ 92.67561, 12.95089 ], [ 92.67549, 12.95088 ], [ 92.67537, 12.95081 ], [ 92.67529, 12.95069 ], [ 92.6752, 12.95062 ], [ 92.67511, 12.95075 ], [ 92.6751, 12.95084 ], [ 92.67499, 12.95089 ], [ 92.67471, 12.95091 ], [ 92.67449, 12.9509 ], [ 92.67427, 12.95086 ], [ 92.67406, 12.95078 ], [ 92.67386, 12.95057 ], [ 92.6738, 12.95043 ], [ 92.67368, 12.95035 ], [ 92.6732, 12.95036 ], [ 92.67313, 12.9503 ], [ 92.67307, 12.9502 ], [ 92.673, 12.95017 ], [ 92.6726, 12.95015 ], [ 92.67248, 12.95011 ], [ 92.6724, 12.95004 ], [ 92.67222, 12.95002 ], [ 92.67175, 12.95011 ], [ 92.67146, 12.95026 ], [ 92.67138, 12.9504 ], [ 92.67131, 12.95112 ], [ 92.67133, 12.9512 ], [ 92.67146, 12.95119 ], [ 92.67154, 12.95122 ], [ 92.67155, 12.95126 ], [ 92.6713, 12.9513 ], [ 92.67122, 12.95135 ], [ 92.67122, 12.95144 ], [ 92.67114, 12.95173 ], [ 92.67111, 12.95212 ], [ 92.6712, 12.95237 ], [ 92.67118, 12.95248 ], [ 92.67101, 12.95267 ], [ 92.67074, 12.95283 ], [ 92.67072, 12.9529 ], [ 92.67078, 12.95298 ], [ 92.67073, 12.95303 ], [ 92.67073, 12.95309 ], [ 92.67064, 12.95309 ], [ 92.67061, 12.95301 ], [ 92.67039, 12.95294 ], [ 92.6703, 12.95301 ], [ 92.67025, 12.95309 ], [ 92.67025, 12.95332 ], [ 92.67027, 12.95343 ], [ 92.67015, 12.95354 ], [ 92.67005, 12.95358 ], [ 92.6699, 12.9537 ], [ 92.66988, 12.95377 ], [ 92.66978, 12.95382 ], [ 92.66976, 12.95396 ], [ 92.66981, 12.95405 ], [ 92.66977, 12.95429 ], [ 92.6698, 12.95451 ], [ 92.6699, 12.9547 ], [ 92.66995, 12.95473 ], [ 92.66994, 12.95477 ], [ 92.6699, 12.95479 ], [ 92.66986, 12.95492 ], [ 92.66982, 12.95492 ], [ 92.66972, 12.95474 ], [ 92.66979, 12.95468 ], [ 92.66974, 12.95463 ], [ 92.66969, 12.95464 ], [ 92.66963, 12.95472 ], [ 92.66963, 12.95477 ], [ 92.6697, 12.95492 ], [ 92.66969, 12.95495 ], [ 92.66952, 12.95499 ], [ 92.66951, 12.95534 ], [ 92.66953, 12.95551 ], [ 92.66963, 12.95551 ], [ 92.66969, 12.95543 ], [ 92.66972, 12.95534 ], [ 92.66979, 12.95536 ], [ 92.66985, 12.95542 ], [ 92.66987, 12.95552 ], [ 92.67006, 12.95579 ], [ 92.67004, 12.95608 ], [ 92.67001, 12.95615 ], [ 92.66994, 12.95616 ], [ 92.66979, 12.95611 ], [ 92.66967, 12.95603 ], [ 92.6695, 12.95601 ], [ 92.66942, 12.95607 ], [ 92.6694, 12.9562 ], [ 92.66947, 12.95662 ], [ 92.66962, 12.95692 ], [ 92.66972, 12.95705 ], [ 92.66985, 12.95746 ], [ 92.67008, 12.95804 ], [ 92.67008, 12.95832 ], [ 92.67016, 12.95851 ], [ 92.67015, 12.95868 ], [ 92.67009, 12.95878 ], [ 92.67, 12.95878 ], [ 92.6698, 12.9587 ], [ 92.66946, 12.95846 ], [ 92.66935, 12.95845 ], [ 92.66928, 12.9585 ], [ 92.6693, 12.95875 ], [ 92.66936, 12.95894 ], [ 92.66945, 12.95907 ], [ 92.6694, 12.95934 ], [ 92.6696, 12.95969 ], [ 92.66967, 12.95989 ], [ 92.66985, 12.96005 ], [ 92.66997, 12.96009 ], [ 92.67003, 12.96015 ], [ 92.67004, 12.96029 ], [ 92.67001, 12.96037 ], [ 92.66971, 12.96041 ], [ 92.66965, 12.96048 ], [ 92.66963, 12.96057 ], [ 92.66976, 12.96083 ], [ 92.66978, 12.96096 ], [ 92.66975, 12.96099 ], [ 92.66969, 12.961 ], [ 92.66963, 12.96097 ], [ 92.66956, 12.96097 ], [ 92.66955, 12.961 ], [ 92.66964, 12.96111 ], [ 92.66943, 12.96131 ], [ 92.66919, 12.96129 ], [ 92.66913, 12.96132 ], [ 92.66915, 12.96141 ], [ 92.66912, 12.96147 ], [ 92.66906, 12.9615 ], [ 92.66906, 12.96156 ], [ 92.6691, 12.96158 ], [ 92.66917, 12.96157 ], [ 92.66925, 12.96164 ], [ 92.6693, 12.96175 ], [ 92.66951, 12.96168 ], [ 92.66966, 12.96168 ], [ 92.66972, 12.96184 ], [ 92.66983, 12.96197 ], [ 92.66984, 12.96235 ], [ 92.66974, 12.96245 ], [ 92.66987, 12.9626 ], [ 92.66991, 12.96272 ], [ 92.66995, 12.96275 ], [ 92.67049, 12.96275 ], [ 92.67064, 12.96279 ], [ 92.67089, 12.96302 ], [ 92.67089, 12.96318 ], [ 92.67082, 12.96341 ], [ 92.67071, 12.96352 ], [ 92.67034, 12.96355 ], [ 92.6703, 12.96364 ], [ 92.6704, 12.96372 ], [ 92.67034, 12.9641 ], [ 92.67036, 12.96415 ], [ 92.67042, 12.96417 ], [ 92.67056, 12.96417 ], [ 92.67068, 12.96441 ], [ 92.67087, 12.96451 ], [ 92.67106, 12.96434 ], [ 92.67119, 12.96426 ], [ 92.67141, 12.96437 ], [ 92.67154, 12.9648 ], [ 92.67182, 12.96491 ], [ 92.67266, 12.96491 ], [ 92.67306, 12.96471 ], [ 92.6734, 12.96468 ], [ 92.6737, 12.96486 ], [ 92.67405, 12.96544 ], [ 92.67449, 12.96651 ], [ 92.67481, 12.9675 ], [ 92.67482, 12.96803 ], [ 92.67471, 12.96839 ], [ 92.67411, 12.96874 ], [ 92.67411, 12.96914 ], [ 92.67425, 12.96973 ], [ 92.67587, 12.97149 ], [ 92.67692, 12.97286 ], [ 92.67799, 12.97413 ], [ 92.67903, 12.97567 ], [ 92.68006, 12.9774 ], [ 92.67998, 12.97765 ], [ 92.67948, 12.9778 ], [ 92.67951, 12.97817 ], [ 92.67998, 12.97855 ], [ 92.68028, 12.97868 ], [ 92.68068, 12.97894 ], [ 92.6809, 12.9793 ], [ 92.68109, 12.97974 ], [ 92.68117, 12.9802 ], [ 92.68122, 12.98075 ], [ 92.68143, 12.98113 ], [ 92.68198, 12.98152 ], [ 92.68258, 12.98185 ], [ 92.68283, 12.98193 ], [ 92.68317, 12.98255 ], [ 92.6836, 12.98382 ], [ 92.68372, 12.98424 ], [ 92.68377, 12.98454 ], [ 92.68378, 12.98486 ], [ 92.68376, 12.98517 ], [ 92.68367, 12.98532 ], [ 92.68368, 12.9855 ], [ 92.6838, 12.98579 ], [ 92.684, 12.98601 ], [ 92.68429, 12.98668 ], [ 92.6843, 12.98709 ], [ 92.68435, 12.98719 ], [ 92.68443, 12.98728 ], [ 92.68456, 12.98755 ], [ 92.68484, 12.98778 ], [ 92.68502, 12.98778 ], [ 92.68523, 12.98784 ], [ 92.6854, 12.98792 ], [ 92.68566, 12.98815 ], [ 92.68579, 12.98839 ], [ 92.68587, 12.98868 ], [ 92.68599, 12.98879 ], [ 92.68617, 12.98879 ], [ 92.68625, 12.98872 ], [ 92.68627, 12.98863 ], [ 92.68643, 12.98861 ], [ 92.68659, 12.98863 ], [ 92.68669, 12.98872 ], [ 92.68677, 12.98888 ], [ 92.68696, 12.98898 ], [ 92.68713, 12.98895 ], [ 92.68764, 12.98849 ], [ 92.68775, 12.98842 ], [ 92.68804, 12.98843 ], [ 92.68815, 12.98849 ], [ 92.68822, 12.98856 ], [ 92.68826, 12.98887 ], [ 92.68831, 12.98906 ], [ 92.68841, 12.98921 ], [ 92.68858, 12.98928 ], [ 92.68878, 12.98957 ], [ 92.68887, 12.98996 ], [ 92.6889, 12.99027 ], [ 92.68909, 12.99079 ], [ 92.68917, 12.99093 ], [ 92.68933, 12.99099 ], [ 92.68966, 12.99098 ], [ 92.69035, 12.99093 ], [ 92.69054, 12.99107 ], [ 92.69072, 12.99127 ], [ 92.69116, 12.99129 ], [ 92.69126, 12.99134 ], [ 92.69128, 12.99147 ], [ 92.69123, 12.99166 ], [ 92.69124, 12.99174 ], [ 92.69135, 12.99183 ], [ 92.69175, 12.99186 ], [ 92.69189, 12.99198 ], [ 92.69193, 12.99208 ], [ 92.69205, 12.99213 ], [ 92.69225, 12.99233 ], [ 92.69236, 12.99231 ], [ 92.69264, 12.99219 ], [ 92.69288, 12.99218 ], [ 92.69304, 12.9922 ], [ 92.69327, 12.99212 ], [ 92.69357, 12.99197 ], [ 92.69383, 12.99189 ], [ 92.69443, 12.99192 ], [ 92.69449, 12.99201 ], [ 92.69449, 12.99221 ], [ 92.69452, 12.99236 ], [ 92.6946, 12.99235 ], [ 92.69467, 12.99229 ], [ 92.69477, 12.99229 ], [ 92.69482, 12.99239 ], [ 92.69492, 12.99239 ], [ 92.69502, 12.9925 ], [ 92.69513, 12.99253 ], [ 92.69525, 12.99246 ], [ 92.69529, 12.99239 ], [ 92.69535, 12.99239 ], [ 92.69537, 12.99213 ], [ 92.69533, 12.99198 ], [ 92.69545, 12.99175 ], [ 92.69564, 12.99162 ], [ 92.69567, 12.99151 ], [ 92.69582, 12.99127 ], [ 92.69593, 12.99121 ], [ 92.69613, 12.99126 ], [ 92.69618, 12.99112 ], [ 92.69614, 12.991 ], [ 92.69615, 12.99085 ], [ 92.69623, 12.99076 ], [ 92.69647, 12.99062 ], [ 92.69703, 12.99009 ], [ 92.69704, 12.98998 ], [ 92.69708, 12.98987 ], [ 92.69728, 12.98978 ], [ 92.69738, 12.98964 ], [ 92.69736, 12.98939 ], [ 92.69742, 12.9893 ], [ 92.69753, 12.98929 ], [ 92.6977, 12.98933 ], [ 92.69791, 12.98931 ], [ 92.69809, 12.98918 ], [ 92.69874, 12.98883 ], [ 92.69889, 12.98878 ], [ 92.69921, 12.98888 ], [ 92.6995, 12.98893 ], [ 92.69967, 12.98901 ], [ 92.69984, 12.98892 ], [ 92.69999, 12.98872 ], [ 92.70006, 12.98866 ], [ 92.70012, 12.98871 ], [ 92.70012, 12.98894 ], [ 92.7002, 12.98906 ], [ 92.70033, 12.98915 ], [ 92.70047, 12.98905 ], [ 92.7007, 12.98875 ], [ 92.70081, 12.98837 ], [ 92.70083, 12.98818 ], [ 92.70088, 12.98809 ], [ 92.70098, 12.98809 ], [ 92.70106, 12.98812 ], [ 92.70107, 12.98819 ], [ 92.70115, 12.9883 ], [ 92.70115, 12.98839 ], [ 92.7013, 12.98851 ], [ 92.70138, 12.98844 ], [ 92.70148, 12.98821 ], [ 92.70161, 12.98814 ], [ 92.70167, 12.9882 ], [ 92.70169, 12.98831 ], [ 92.70174, 12.98841 ], [ 92.70191, 12.98831 ], [ 92.70202, 12.98834 ], [ 92.70203, 12.98843 ], [ 92.70199, 12.98856 ], [ 92.70209, 12.98861 ], [ 92.70219, 12.98877 ], [ 92.70233, 12.98877 ], [ 92.70242, 12.98874 ], [ 92.7025, 12.98865 ], [ 92.70256, 12.98863 ], [ 92.70264, 12.98884 ], [ 92.70264, 12.98901 ], [ 92.70272, 12.98908 ], [ 92.70284, 12.98909 ], [ 92.70296, 12.98905 ], [ 92.70301, 12.98895 ], [ 92.70307, 12.98892 ], [ 92.70319, 12.98894 ], [ 92.70332, 12.98908 ], [ 92.70337, 12.98898 ], [ 92.70348, 12.98888 ], [ 92.70361, 12.9887 ], [ 92.70365, 12.9885 ], [ 92.70365, 12.9883 ], [ 92.70355, 12.98779 ], [ 92.70369, 12.98739 ], [ 92.70379, 12.98725 ], [ 92.70397, 12.98728 ], [ 92.70402, 12.98748 ], [ 92.70415, 12.98769 ], [ 92.70425, 12.98774 ], [ 92.70438, 12.98774 ], [ 92.70445, 12.98769 ], [ 92.70455, 12.98741 ], [ 92.70464, 12.98743 ], [ 92.70473, 12.98756 ], [ 92.7049, 12.98759 ], [ 92.70495, 12.98753 ], [ 92.705, 12.9874 ], [ 92.70524, 12.98721 ], [ 92.70527, 12.98761 ], [ 92.70538, 12.98771 ], [ 92.70549, 12.98762 ], [ 92.70564, 12.98739 ], [ 92.70574, 12.98738 ], [ 92.70582, 12.98754 ], [ 92.70584, 12.98784 ], [ 92.70608, 12.98799 ], [ 92.70623, 12.98788 ], [ 92.70631, 12.98786 ], [ 92.70645, 12.98776 ], [ 92.70648, 12.98764 ], [ 92.7066, 12.98757 ], [ 92.70677, 12.98757 ], [ 92.70687, 12.98753 ], [ 92.70694, 12.98746 ], [ 92.70696, 12.98734 ], [ 92.70681, 12.98691 ], [ 92.70677, 12.9864 ], [ 92.70679, 12.98631 ], [ 92.7069, 12.98624 ], [ 92.70708, 12.98624 ], [ 92.70721, 12.98633 ], [ 92.70732, 12.9863 ], [ 92.70744, 12.98618 ], [ 92.70747, 12.98611 ], [ 92.70801, 12.98586 ], [ 92.70834, 12.98617 ], [ 92.70847, 12.98635 ], [ 92.70851, 12.98647 ], [ 92.70847, 12.98669 ], [ 92.70837, 12.98698 ], [ 92.70839, 12.98714 ], [ 92.70848, 12.98714 ], [ 92.7085, 12.98719 ], [ 92.70842, 12.98733 ], [ 92.70842, 12.98752 ], [ 92.70852, 12.98768 ], [ 92.70871, 12.98777 ], [ 92.70883, 12.98786 ], [ 92.70889, 12.98794 ], [ 92.70886, 12.9881 ], [ 92.7087, 12.98837 ], [ 92.70869, 12.98863 ], [ 92.70864, 12.98882 ], [ 92.7088, 12.98887 ], [ 92.70893, 12.98887 ], [ 92.70901, 12.989 ], [ 92.70912, 12.98903 ], [ 92.70924, 12.98897 ], [ 92.70934, 12.98887 ], [ 92.70947, 12.9888 ], [ 92.70959, 12.98885 ], [ 92.70986, 12.98887 ], [ 92.71002, 12.98882 ], [ 92.71033, 12.98881 ], [ 92.71041, 12.98878 ], [ 92.71041, 12.98868 ], [ 92.71046, 12.98859 ], [ 92.7106, 12.9885 ], [ 92.71084, 12.98844 ], [ 92.71134, 12.98843 ], [ 92.7116, 12.98838 ], [ 92.71179, 12.98829 ], [ 92.7121, 12.98799 ], [ 92.71216, 12.98773 ], [ 92.71202, 12.98745 ], [ 92.71199, 12.98731 ], [ 92.71206, 12.98719 ], [ 92.71227, 12.98709 ], [ 92.7127, 12.98703 ], [ 92.71284, 12.98686 ], [ 92.71301, 12.9867 ], [ 92.71314, 12.98646 ], [ 92.71316, 12.98625 ], [ 92.71325, 12.98602 ], [ 92.71338, 12.98595 ], [ 92.71344, 12.98603 ], [ 92.71362, 12.98609 ], [ 92.71378, 12.98605 ], [ 92.71389, 12.98583 ], [ 92.71393, 12.98569 ], [ 92.71394, 12.98521 ], [ 92.71401, 12.98501 ], [ 92.71416, 12.98487 ], [ 92.7144, 12.98476 ], [ 92.71457, 12.98462 ], [ 92.71464, 12.9845 ], [ 92.71468, 12.98435 ], [ 92.71468, 12.98393 ], [ 92.71462, 12.98384 ], [ 92.71454, 12.98378 ], [ 92.71452, 12.9837 ], [ 92.71455, 12.98365 ], [ 92.71449, 12.98351 ], [ 92.71452, 12.98306 ], [ 92.71465, 12.98297 ], [ 92.71478, 12.98284 ], [ 92.71519, 12.98269 ], [ 92.71525, 12.98256 ], [ 92.71545, 12.98189 ], [ 92.71564, 12.98154 ], [ 92.71582, 12.98143 ], [ 92.71597, 12.98141 ], [ 92.71602, 12.98151 ], [ 92.71603, 12.9816 ], [ 92.71606, 12.98164 ], [ 92.7163, 12.98162 ], [ 92.71647, 12.98155 ], [ 92.71655, 12.98133 ], [ 92.71655, 12.98122 ], [ 92.71661, 12.98114 ], [ 92.71671, 12.9811 ], [ 92.71681, 12.98109 ], [ 92.71695, 12.98111 ], [ 92.7172, 12.98134 ], [ 92.71729, 12.98145 ], [ 92.71745, 12.9815 ], [ 92.71793, 12.98153 ], [ 92.71805, 12.98163 ], [ 92.71815, 12.98168 ], [ 92.71827, 12.98165 ], [ 92.7183, 12.98155 ], [ 92.71831, 12.98129 ], [ 92.71846, 12.98123 ], [ 92.71873, 12.98121 ], [ 92.71878, 12.98117 ], [ 92.71884, 12.98104 ], [ 92.71904, 12.9804 ], [ 92.71904, 12.9803 ], [ 92.719, 12.9802 ], [ 92.71882, 12.98001 ], [ 92.71882, 12.97991 ], [ 92.71885, 12.97984 ], [ 92.71898, 12.97975 ], [ 92.71911, 12.9797 ], [ 92.71922, 12.97961 ], [ 92.71924, 12.97944 ], [ 92.7193, 12.97942 ], [ 92.71939, 12.9795 ], [ 92.71942, 12.97958 ], [ 92.71948, 12.97961 ], [ 92.71951, 12.97936 ], [ 92.71964, 12.97924 ], [ 92.71965, 12.97912 ], [ 92.71956, 12.97906 ], [ 92.71938, 12.97906 ], [ 92.71935, 12.97899 ], [ 92.71934, 12.97883 ], [ 92.71942, 12.97867 ], [ 92.71946, 12.97866 ], [ 92.71953, 12.97869 ], [ 92.71967, 12.97868 ], [ 92.71981, 12.97862 ], [ 92.71997, 12.97862 ], [ 92.72014, 12.9787 ], [ 92.72024, 12.97867 ], [ 92.72042, 12.97856 ], [ 92.72042, 12.97851 ], [ 92.72005, 12.97819 ], [ 92.7198, 12.97808 ], [ 92.71973, 12.97799 ], [ 92.71971, 12.97786 ], [ 92.71972, 12.97758 ], [ 92.71985, 12.97729 ], [ 92.71983, 12.97713 ], [ 92.71962, 12.97691 ], [ 92.71962, 12.97637 ], [ 92.71967, 12.97625 ], [ 92.71977, 12.97619 ], [ 92.72015, 12.97607 ], [ 92.72018, 12.97578 ], [ 92.72023, 12.97577 ], [ 92.72029, 12.97593 ], [ 92.72037, 12.97594 ], [ 92.72044, 12.97588 ], [ 92.72046, 12.97574 ], [ 92.72051, 12.97561 ], [ 92.72051, 12.97552 ], [ 92.72044, 12.97545 ], [ 92.7203, 12.97538 ], [ 92.72023, 12.97531 ], [ 92.72015, 12.97517 ], [ 92.72015, 12.97485 ], [ 92.71999, 12.97461 ], [ 92.72001, 12.97453 ], [ 92.72009, 12.97445 ], [ 92.72037, 12.97434 ], [ 92.72051, 12.97426 ], [ 92.7205, 12.97418 ], [ 92.72044, 12.97413 ], [ 92.72036, 12.97413 ], [ 92.72027, 12.97408 ], [ 92.72007, 12.97379 ], [ 92.71987, 12.97379 ], [ 92.71976, 12.97368 ], [ 92.71975, 12.97354 ], [ 92.71977, 12.97346 ], [ 92.71984, 12.97341 ], [ 92.71975, 12.97325 ], [ 92.71949, 12.97298 ], [ 92.71948, 12.97284 ], [ 92.71962, 12.97275 ], [ 92.71979, 12.97273 ], [ 92.71998, 12.97256 ], [ 92.72, 12.97237 ], [ 92.71982, 12.97227 ], [ 92.71973, 12.97227 ], [ 92.71948, 12.97216 ], [ 92.71942, 12.97208 ], [ 92.71936, 12.97181 ], [ 92.71936, 12.97165 ], [ 92.71939, 12.97153 ], [ 92.71947, 12.97148 ], [ 92.71972, 12.97148 ], [ 92.71997, 12.97128 ], [ 92.72015, 12.9712 ], [ 92.72021, 12.97109 ], [ 92.72023, 12.971 ], [ 92.72022, 12.97092 ], [ 92.72018, 12.97084 ], [ 92.72011, 12.97079 ], [ 92.71986, 12.97071 ], [ 92.7197, 12.97061 ], [ 92.71962, 12.97068 ], [ 92.71957, 12.97079 ], [ 92.71952, 12.97081 ], [ 92.7194, 12.97068 ], [ 92.71935, 12.97056 ], [ 92.71923, 12.97001 ], [ 92.71924, 12.96991 ], [ 92.71929, 12.96981 ], [ 92.71937, 12.96975 ], [ 92.71961, 12.96971 ], [ 92.71991, 12.96971 ], [ 92.72003, 12.96964 ], [ 92.72016, 12.9681 ], [ 92.72012, 12.96792 ], [ 92.71992, 12.96767 ], [ 92.71987, 12.96751 ], [ 92.71969, 12.96723 ], [ 92.71971, 12.96708 ], [ 92.7196, 12.96681 ], [ 92.71956, 12.96632 ], [ 92.71968, 12.96598 ], [ 92.71966, 12.96586 ], [ 92.71949, 12.96563 ], [ 92.71941, 12.96556 ], [ 92.71942, 12.96535 ], [ 92.71959, 12.96529 ], [ 92.71985, 12.96536 ], [ 92.72007, 12.96528 ], [ 92.72006, 12.96516 ], [ 92.71979, 12.96481 ], [ 92.71948, 12.9648 ], [ 92.71941, 12.96478 ], [ 92.71932, 12.9647 ], [ 92.7193, 12.96449 ], [ 92.7192, 12.96438 ], [ 92.71913, 12.96426 ], [ 92.71908, 12.96411 ], [ 92.71904, 12.96383 ], [ 92.71908, 12.96365 ], [ 92.7192, 12.96344 ], [ 92.71942, 12.96331 ], [ 92.71949, 12.96322 ], [ 92.71949, 12.96316 ], [ 92.71953, 12.96306 ], [ 92.72019, 12.96293 ], [ 92.72021, 12.96281 ], [ 92.72018, 12.9627 ], [ 92.71999, 12.9625 ], [ 92.71982, 12.96245 ], [ 92.71943, 12.96225 ], [ 92.71929, 12.96213 ], [ 92.71927, 12.96199 ], [ 92.7193, 12.96188 ], [ 92.71988, 12.96157 ], [ 92.71992, 12.96146 ], [ 92.71981, 12.96134 ], [ 92.71945, 12.96114 ], [ 92.71922, 12.96108 ], [ 92.71905, 12.961 ], [ 92.71875, 12.96078 ], [ 92.71862, 12.96071 ], [ 92.71852, 12.96058 ], [ 92.71851, 12.96048 ], [ 92.71855, 12.96041 ], [ 92.7191, 12.96016 ], [ 92.71914, 12.96006 ], [ 92.71904, 12.95998 ], [ 92.71888, 12.95991 ], [ 92.71876, 12.95989 ], [ 92.71866, 12.95993 ], [ 92.71844, 12.95994 ], [ 92.71837, 12.95987 ], [ 92.71833, 12.95976 ], [ 92.71833, 12.95946 ], [ 92.7186, 12.95931 ], [ 92.71871, 12.95918 ], [ 92.71868, 12.95875 ], [ 92.71878, 12.95864 ], [ 92.71878, 12.95854 ], [ 92.71872, 12.95846 ], [ 92.71867, 12.95832 ], [ 92.71873, 12.9582 ], [ 92.71871, 12.9579 ], [ 92.71862, 12.95754 ], [ 92.71848, 12.95663 ], [ 92.71826, 12.9563 ], [ 92.71829, 12.95607 ], [ 92.71834, 12.956 ], [ 92.71832, 12.95585 ], [ 92.71833, 12.95566 ], [ 92.71839, 12.95552 ], [ 92.71834, 12.9554 ], [ 92.71775, 12.95537 ], [ 92.71752, 12.95526 ], [ 92.7174, 12.95525 ], [ 92.71728, 12.95519 ], [ 92.71715, 12.95506 ], [ 92.71705, 12.95469 ], [ 92.71705, 12.95442 ], [ 92.71725, 12.95428 ], [ 92.71738, 12.95426 ], [ 92.71754, 12.95413 ], [ 92.71793, 12.95359 ], [ 92.718, 12.95346 ], [ 92.71801, 12.95331 ], [ 92.71797, 12.95313 ], [ 92.71774, 12.9528 ], [ 92.7174, 12.95179 ], [ 92.71723, 12.95111 ], [ 92.71743, 12.95079 ], [ 92.71755, 12.95026 ], [ 92.7173, 12.9496 ], [ 92.71738, 12.94926 ], [ 92.71725, 12.94876 ], [ 92.7169, 12.94835 ], [ 92.71607, 12.9473 ], [ 92.71532, 12.94596 ], [ 92.71481, 12.94485 ], [ 92.71483, 12.94383 ], [ 92.71481, 12.94334 ], [ 92.71495, 12.94269 ], [ 92.71544, 12.94242 ], [ 92.71646, 12.94242 ], [ 92.71733, 12.94246 ], [ 92.71802, 12.94299 ], [ 92.71882, 12.94383 ], [ 92.71935, 12.94493 ], [ 92.71984, 12.94644 ], [ 92.72028, 12.94692 ], [ 92.72073, 12.94705 ], [ 92.72102, 12.94674 ], [ 92.72144, 12.94558 ], [ 92.72167, 12.94424 ], [ 92.72104, 12.94144 ], [ 92.72134, 12.94062 ], [ 92.72165, 12.94037 ], [ 92.72178239905422, 12.940091016278597 ], [ 92.72193, 12.93978 ], [ 92.72173, 12.9393 ], [ 92.72126, 12.93859 ], [ 92.72118, 12.9375 ], [ 92.721, 12.93617 ], [ 92.72082, 12.93417 ], [ 92.72053, 12.93255 ], [ 92.72076, 12.93054 ], [ 92.72082, 12.92949 ], [ 92.72098, 12.92867 ], [ 92.72118, 12.92712 ], [ 92.72106, 12.92592 ], [ 92.72078, 12.92472 ], [ 92.72049, 12.92367 ], [ 92.72015, 12.92265 ], [ 92.72, 12.92168 ], [ 92.72002, 12.92064 ], [ 92.72019, 12.91873 ], [ 92.72045, 12.91678 ], [ 92.72019, 12.91317 ], [ 92.72027, 12.91119 ], [ 92.7206, 12.90979 ], [ 92.72103, 12.90742 ], [ 92.72164, 12.90669 ], [ 92.72247, 12.90539 ], [ 92.72266, 12.90416 ], [ 92.72282, 12.90278 ], [ 92.72266, 12.90206 ], [ 92.72217, 12.90057 ], [ 92.72207, 12.89967 ], [ 92.72178, 12.89906 ], [ 92.72201, 12.8986 ], [ 92.72223, 12.89784 ], [ 92.72225, 12.89694 ], [ 92.72182, 12.89483 ], [ 92.72176, 12.89259 ], [ 92.72156, 12.8891 ], [ 92.72113, 12.88781 ], [ 92.721124847161576, 12.88779 ], [ 92.721110084585561, 12.887732701188025 ], [ 92.7210733187773, 12.88759 ], [ 92.72054, 12.88552 ], [ 92.72034, 12.88383 ], [ 92.72016, 12.8832 ], [ 92.71984, 12.88243 ], [ 92.71864, 12.8813 ], [ 92.71664, 12.88054 ], [ 92.71586, 12.88084 ], [ 92.71465, 12.88217 ], [ 92.71397, 12.88304 ], [ 92.71323, 12.88325 ], [ 92.71245, 12.88299 ], [ 92.71208, 12.88253 ], [ 92.71214, 12.8824 ], [ 92.71224, 12.88227 ], [ 92.7123, 12.88212 ], [ 92.71234, 12.88149 ], [ 92.71242, 12.88122 ], [ 92.71249, 12.88086 ], [ 92.71253, 12.88049 ], [ 92.71261, 12.88018 ], [ 92.71263, 12.87995 ], [ 92.71271, 12.87959 ], [ 92.71275, 12.8791 ], [ 92.71295, 12.87844 ], [ 92.71296, 12.87835 ], [ 92.71304, 12.87828 ], [ 92.71308, 12.87802 ], [ 92.71299, 12.87789 ], [ 92.71298, 12.87782 ], [ 92.71313, 12.87742 ], [ 92.71317, 12.87737 ], [ 92.71321, 12.87737 ], [ 92.71334, 12.87762 ], [ 92.7134, 12.87764 ], [ 92.71356, 12.87757 ], [ 92.71363, 12.87761 ], [ 92.71382, 12.87758 ], [ 92.7139, 12.87748 ], [ 92.71398, 12.87745 ], [ 92.71409, 12.87745 ], [ 92.71413, 12.87752 ], [ 92.71422, 12.87755 ], [ 92.71443, 12.8775 ], [ 92.71454, 12.87753 ], [ 92.71461, 12.87759 ], [ 92.71467, 12.87759 ], [ 92.71481, 12.87753 ], [ 92.715, 12.87753 ], [ 92.7151, 12.87758 ], [ 92.71553, 12.87758 ], [ 92.71563, 12.87753 ], [ 92.71601, 12.87749 ], [ 92.71607, 12.8775 ], [ 92.71613, 12.87759 ], [ 92.71623, 12.87763 ], [ 92.71629, 12.87762 ], [ 92.71631, 12.87757 ], [ 92.71626, 12.87748 ], [ 92.71627, 12.87744 ], [ 92.71634, 12.87743 ], [ 92.71642, 12.87746 ], [ 92.71648, 12.87755 ], [ 92.71672, 12.87769 ], [ 92.71686, 12.8778 ], [ 92.71709, 12.87792 ], [ 92.71733, 12.87797 ], [ 92.71752, 12.87798 ], [ 92.71819, 12.87791 ], [ 92.71826, 12.87787 ], [ 92.7186, 12.87744 ], [ 92.71887, 12.87721 ], [ 92.71911, 12.87697 ], [ 92.71911, 12.87673 ], [ 92.71924, 12.87658 ], [ 92.71932, 12.87641 ], [ 92.71948, 12.87583 ], [ 92.71948, 12.87526 ], [ 92.71954, 12.87465 ], [ 92.71944, 12.87421 ], [ 92.71905, 12.87331 ], [ 92.71901, 12.87317 ], [ 92.71875, 12.87291 ], [ 92.71867, 12.87278 ], [ 92.71859, 12.87256 ], [ 92.71847, 12.87232 ], [ 92.71828, 12.87208 ], [ 92.71784, 12.87161 ], [ 92.71769, 12.87152 ], [ 92.71764, 12.87143 ], [ 92.71763, 12.87132 ], [ 92.71751, 12.87118 ], [ 92.71735, 12.87113 ], [ 92.71731, 12.87098 ], [ 92.71725, 12.87087 ], [ 92.71721, 12.87073 ], [ 92.71715, 12.87063 ], [ 92.71702, 12.87053 ], [ 92.71705, 12.87034 ], [ 92.71701, 12.87018 ], [ 92.71689, 12.87003 ], [ 92.71684, 12.87002 ], [ 92.71678, 12.87004 ], [ 92.71676, 12.87025 ], [ 92.71673, 12.87029 ], [ 92.71667, 12.8703 ], [ 92.71662, 12.87028 ], [ 92.71662, 12.87011 ], [ 92.71652, 12.86993 ], [ 92.7162, 12.86956 ], [ 92.71608, 12.86934 ], [ 92.71596, 12.86916 ], [ 92.71588, 12.86889 ], [ 92.7159, 12.86873 ], [ 92.71586, 12.86864 ], [ 92.71577, 12.86854 ], [ 92.71576, 12.86846 ], [ 92.71582, 12.86821 ], [ 92.71576, 12.86764 ], [ 92.71576, 12.86739 ], [ 92.71553, 12.86668 ], [ 92.71543, 12.86651 ], [ 92.71518, 12.8663 ], [ 92.71498, 12.8662 ], [ 92.71491, 12.86612 ], [ 92.71484, 12.86596 ], [ 92.71483, 12.86583 ], [ 92.71488, 12.86555 ], [ 92.71489, 12.86531 ], [ 92.71487, 12.86515 ], [ 92.71481, 12.86503 ], [ 92.71465, 12.86481 ], [ 92.71461, 12.86472 ], [ 92.7146, 12.86461 ], [ 92.71466, 12.86448 ], [ 92.7148, 12.86443 ], [ 92.71486, 12.86436 ], [ 92.71494, 12.86407 ], [ 92.71494, 12.86371 ], [ 92.7149, 12.86354 ], [ 92.71458, 12.8629 ], [ 92.71439, 12.86266 ], [ 92.71425, 12.86255 ], [ 92.71378, 12.86204 ], [ 92.71351, 12.8617 ], [ 92.71339, 12.8615 ], [ 92.71334, 12.86136 ], [ 92.71321, 12.86116 ], [ 92.71271, 12.8606 ], [ 92.71246, 12.86049 ], [ 92.71236, 12.86038 ], [ 92.71223, 12.86011 ], [ 92.7121, 12.86006 ], [ 92.71197, 12.85986 ], [ 92.71192, 12.85973 ], [ 92.71169, 12.85947 ], [ 92.71154, 12.85936 ], [ 92.71145, 12.85924 ], [ 92.71136, 12.85901 ], [ 92.71136, 12.85894 ], [ 92.71113, 12.85885 ], [ 92.71106, 12.85885 ], [ 92.71101, 12.85888 ], [ 92.71096, 12.85907 ], [ 92.71097, 12.85921 ], [ 92.71087, 12.85937 ], [ 92.71075, 12.85938 ], [ 92.71071, 12.85933 ], [ 92.7106, 12.85905 ], [ 92.71046, 12.85857 ], [ 92.71033, 12.85839 ], [ 92.71, 12.85814 ], [ 92.70972, 12.85798 ], [ 92.70945, 12.85776 ], [ 92.70906, 12.85733 ], [ 92.70909, 12.85718 ], [ 92.70914, 12.8571 ], [ 92.70914, 12.857 ], [ 92.70906, 12.85692 ], [ 92.7089, 12.8569 ], [ 92.70885, 12.85685 ], [ 92.7088, 12.85655 ], [ 92.70878, 12.85622 ], [ 92.70863, 12.85573 ], [ 92.70853, 12.85557 ], [ 92.70846, 12.8555 ], [ 92.70829, 12.85544 ], [ 92.70824, 12.85539 ], [ 92.70815, 12.85539 ], [ 92.70809, 12.85549 ], [ 92.70799, 12.85538 ], [ 92.70797, 12.8553 ], [ 92.70791, 12.85524 ], [ 92.70774, 12.85523 ], [ 92.70772, 12.85528 ], [ 92.70764, 12.85528 ], [ 92.70755, 12.85519 ], [ 92.70743, 12.85519 ], [ 92.70743, 12.85529 ], [ 92.70738, 12.85533 ], [ 92.70733, 12.85532 ], [ 92.7073, 12.85522 ], [ 92.70738, 12.85513 ], [ 92.70739, 12.85474 ], [ 92.70737, 12.85466 ], [ 92.7072, 12.85445 ], [ 92.70703, 12.85435 ], [ 92.7068, 12.85439 ], [ 92.70665, 12.85436 ], [ 92.70666, 12.85452 ], [ 92.70655, 12.85435 ], [ 92.70653, 12.85424 ], [ 92.70634, 12.85389 ], [ 92.70613, 12.85371 ], [ 92.70602, 12.85372 ], [ 92.70592, 12.85386 ], [ 92.70586, 12.85387 ], [ 92.70572, 12.85372 ], [ 92.70571, 12.85363 ], [ 92.70568, 12.85358 ], [ 92.70528, 12.85339 ], [ 92.70512, 12.85341 ], [ 92.70509, 12.85346 ], [ 92.70505, 12.85347 ], [ 92.70503, 12.8534 ], [ 92.70492, 12.85325 ], [ 92.70477, 12.85315 ], [ 92.70464, 12.85314 ], [ 92.70454, 12.85308 ], [ 92.70448, 12.85307 ], [ 92.70442, 12.8531 ], [ 92.70426, 12.85331 ], [ 92.7042, 12.85334 ], [ 92.70409, 12.85332 ], [ 92.70399, 12.85322 ], [ 92.70382, 12.85334 ], [ 92.70373, 12.85353 ], [ 92.70363, 12.85358 ], [ 92.70348, 12.85372 ], [ 92.70341, 12.85373 ], [ 92.70338, 12.85371 ], [ 92.70337, 12.85365 ], [ 92.7035, 12.85353 ], [ 92.70358, 12.85335 ], [ 92.70363, 12.85314 ], [ 92.70359, 12.8528 ], [ 92.70345, 12.85255 ], [ 92.70319, 12.85218 ], [ 92.70278, 12.85169 ], [ 92.70264, 12.85156 ], [ 92.70253, 12.85136 ], [ 92.70257, 12.85095 ], [ 92.70257, 12.8504 ], [ 92.70264, 12.85005 ], [ 92.703, 12.84944 ], [ 92.70302, 12.84922 ], [ 92.70288, 12.8488 ], [ 92.70271, 12.84855 ], [ 92.70265, 12.84834 ], [ 92.70272, 12.84797 ], [ 92.70294, 12.84766 ], [ 92.70329, 12.8474 ], [ 92.70352, 12.84707 ], [ 92.70379, 12.84653 ], [ 92.70385, 12.84611 ], [ 92.70382, 12.84584 ], [ 92.70363, 12.84547 ], [ 92.70333, 12.845 ], [ 92.70254, 12.84361 ], [ 92.70243, 12.84332 ], [ 92.70202, 12.84279 ], [ 92.70187, 12.84253 ], [ 92.70185, 12.84231 ], [ 92.70154, 12.84176 ], [ 92.70153, 12.8416 ], [ 92.70147, 12.84154 ], [ 92.7014, 12.84153 ], [ 92.70118, 12.84158 ], [ 92.7012, 12.84117 ], [ 92.70115, 12.8411 ], [ 92.70107, 12.84108 ], [ 92.70086, 12.84114 ], [ 92.7007, 12.84122 ], [ 92.70057, 12.84121 ], [ 92.70045, 12.84127 ], [ 92.70035, 12.84141 ], [ 92.70027, 12.84145 ], [ 92.7002, 12.84144 ], [ 92.70021, 12.84128 ], [ 92.70044, 12.84099 ], [ 92.70052, 12.84092 ], [ 92.70061, 12.84071 ], [ 92.7006, 12.84061 ], [ 92.70055, 12.84048 ], [ 92.70048, 12.84043 ], [ 92.70038, 12.84043 ], [ 92.70024, 12.84022 ], [ 92.70011, 12.8402 ], [ 92.70011, 12.84025 ], [ 92.70015, 12.84031 ], [ 92.70014, 12.84044 ], [ 92.7, 12.84043 ], [ 92.69988, 12.84032 ], [ 92.69973, 12.84031 ], [ 92.69963, 12.84016 ], [ 92.69959, 12.84002 ], [ 92.69902, 12.83991 ], [ 92.69889, 12.83986 ], [ 92.69864, 12.83969 ], [ 92.69832, 12.83954 ], [ 92.69807, 12.8393 ], [ 92.69781, 12.83918 ], [ 92.69776, 12.83911 ], [ 92.697, 12.83858 ], [ 92.69687, 12.83854 ], [ 92.69668, 12.83841 ], [ 92.69644, 12.83836 ], [ 92.69626, 12.83819 ], [ 92.69619, 12.83817 ], [ 92.69602, 12.8382 ], [ 92.69598, 12.83815 ], [ 92.69595, 12.83797 ], [ 92.69585, 12.83779 ], [ 92.69569, 12.83766 ], [ 92.69536, 12.83762 ], [ 92.69526, 12.83764 ], [ 92.69513, 12.83777 ], [ 92.6951, 12.83785 ], [ 92.69497, 12.83797 ], [ 92.69493, 12.83798 ], [ 92.69484, 12.83787 ], [ 92.69484, 12.83778 ], [ 92.69481, 12.83775 ], [ 92.69467, 12.83777 ], [ 92.69459, 12.83782 ], [ 92.69453, 12.83781 ], [ 92.69442, 12.83773 ], [ 92.69428, 12.83753 ], [ 92.69426, 12.83744 ], [ 92.6941, 12.83735 ], [ 92.69402, 12.83735 ], [ 92.69392, 12.83728 ], [ 92.69379, 12.83724 ], [ 92.69378, 12.8371 ], [ 92.69393, 12.83698 ], [ 92.69413, 12.83662 ], [ 92.69412, 12.83655 ], [ 92.69407, 12.83649 ], [ 92.69378, 12.83642 ], [ 92.69359, 12.83631 ], [ 92.69339, 12.83615 ], [ 92.69327, 12.83602 ], [ 92.69316, 12.83576 ], [ 92.69304, 12.8356 ], [ 92.6929, 12.83562 ], [ 92.69274, 12.83579 ], [ 92.69265, 12.83584 ], [ 92.69256, 12.83585 ], [ 92.69256, 12.8356 ], [ 92.6925, 12.83551 ], [ 92.69239, 12.83543 ], [ 92.69221, 12.83537 ], [ 92.69201, 12.83535 ], [ 92.69191, 12.83515 ], [ 92.69191, 12.83508 ], [ 92.69184, 12.835 ], [ 92.69177, 12.83498 ], [ 92.69155, 12.83506 ], [ 92.69148, 12.83511 ], [ 92.69141, 12.83512 ], [ 92.69133, 12.8351 ], [ 92.69107, 12.83515 ], [ 92.6909, 12.8351 ], [ 92.69086, 12.83512 ], [ 92.69088, 12.83522 ], [ 92.69096, 12.83538 ] ] ], [ [ [ 94.2642479, 13.4310853 ], [ 94.2587547, 13.4297495 ], [ 94.2532616, 13.4334228 ], [ 94.2494072, 13.4414542 ], [ 94.2622072, 13.4608542 ], [ 94.2649345, 13.4628068 ], [ 94.2703072, 13.4632542 ], [ 94.2776375, 13.4608035 ], [ 94.2755775, 13.4588001 ], [ 94.2748909, 13.4561289 ], [ 94.2748909, 13.4547933 ], [ 94.2769508, 13.4511204 ], [ 94.2755775, 13.4479483 ], [ 94.2757492, 13.4424387 ], [ 94.2714577, 13.4355933 ], [ 94.2680244, 13.4350924 ], [ 94.2642479, 13.4310853 ] ] ], [ [ [ 93.04728, 13.62259 ], [ 93.04751, 13.62274 ], [ 93.04749, 13.62294 ], [ 93.04718, 13.6234 ], [ 93.04685, 13.6237 ], [ 93.04673, 13.62412 ], [ 93.04662, 13.62505 ], [ 93.04641, 13.6262 ], [ 93.04601, 13.62793 ], [ 93.04474, 13.63087 ], [ 93.04389, 13.63354 ], [ 93.04331, 13.63497 ], [ 93.04292, 13.63609 ], [ 93.04249, 13.6367 ], [ 93.04237, 13.63727 ], [ 93.04268, 13.63784 ], [ 93.0437, 13.63841 ], [ 93.04486, 13.63924 ], [ 93.04585, 13.64031 ], [ 93.0466, 13.64096 ], [ 93.04713, 13.64177 ], [ 93.04761, 13.64217 ], [ 93.04868, 13.64248 ], [ 93.04918, 13.64285 ], [ 93.04957, 13.64332 ], [ 93.05025, 13.64392 ], [ 93.05134, 13.64477 ], [ 93.0528, 13.64605 ], [ 93.05352, 13.64678 ], [ 93.05456, 13.64809 ], [ 93.05479, 13.64848 ], [ 93.05506, 13.64937 ], [ 93.05518, 13.64985 ], [ 93.05513, 13.64992 ], [ 93.05509, 13.64994 ], [ 93.05486, 13.64992 ], [ 93.05451, 13.65006 ], [ 93.05436, 13.65009 ], [ 93.05418, 13.65003 ], [ 93.05408, 13.64988 ], [ 93.05401, 13.64957 ], [ 93.05394, 13.64946 ], [ 93.05384, 13.64942 ], [ 93.05375, 13.64945 ], [ 93.05368, 13.64963 ], [ 93.05373, 13.65006 ], [ 93.05373, 13.65026 ], [ 93.05385, 13.65064 ], [ 93.05412, 13.65089 ], [ 93.05452, 13.65104 ], [ 93.05471, 13.6512 ], [ 93.05484, 13.65126 ], [ 93.05507, 13.65144 ], [ 93.05528, 13.65145 ], [ 93.05554, 13.65134 ], [ 93.05566, 13.65137 ], [ 93.05575, 13.65143 ], [ 93.05578, 13.65156 ], [ 93.05574, 13.65189 ], [ 93.05574, 13.6521 ], [ 93.05587, 13.65293 ], [ 93.05603, 13.65321 ], [ 93.05617, 13.65353 ], [ 93.05632, 13.65373 ], [ 93.05656, 13.65396 ], [ 93.05671, 13.65399 ], [ 93.05683, 13.65398 ], [ 93.0575, 13.65368 ], [ 93.05759, 13.65361 ], [ 93.05779, 13.65355 ], [ 93.05798, 13.65356 ], [ 93.05825, 13.65373 ], [ 93.05869, 13.65379 ], [ 93.05942, 13.65374 ], [ 93.06, 13.65377 ], [ 93.06045, 13.65376 ], [ 93.06093, 13.6538 ], [ 93.06135, 13.65403 ], [ 93.06236, 13.65403 ], [ 93.06267, 13.65408 ], [ 93.06286, 13.65417 ], [ 93.06313, 13.65418 ], [ 93.06318, 13.65414 ], [ 93.06325, 13.65395 ], [ 93.06356, 13.65365 ], [ 93.06406, 13.65334 ], [ 93.06497, 13.65301 ], [ 93.0652, 13.65297 ], [ 93.06537, 13.653 ], [ 93.06552, 13.65312 ], [ 93.06557, 13.65309 ], [ 93.06565, 13.65279 ], [ 93.06595, 13.65235 ], [ 93.06621, 13.65219 ], [ 93.06627, 13.65221 ], [ 93.06631, 13.65229 ], [ 93.0664, 13.65233 ], [ 93.06646, 13.65228 ], [ 93.06647, 13.65201 ], [ 93.06675, 13.65161 ], [ 93.06694, 13.65138 ], [ 93.06698, 13.65121 ], [ 93.06698, 13.65105 ], [ 93.06695, 13.65094 ], [ 93.06686, 13.6508 ], [ 93.06675, 13.65055 ], [ 93.06649, 13.6502 ], [ 93.06626, 13.64956 ], [ 93.06619, 13.64947 ], [ 93.06609, 13.6494 ], [ 93.06594, 13.64934 ], [ 93.06584, 13.64927 ], [ 93.06572, 13.6491 ], [ 93.06563, 13.64883 ], [ 93.06558, 13.64859 ], [ 93.06546, 13.64837 ], [ 93.06484, 13.64776 ], [ 93.06474, 13.64759 ], [ 93.06472, 13.64751 ], [ 93.06482, 13.64746 ], [ 93.06485, 13.64741 ], [ 93.06477, 13.64734 ], [ 93.06452, 13.64734 ], [ 93.06427, 13.64738 ], [ 93.0641, 13.64749 ], [ 93.06398, 13.64773 ], [ 93.0638, 13.648 ], [ 93.06354, 13.64816 ], [ 93.06341, 13.6482 ], [ 93.06323, 13.64819 ], [ 93.06245, 13.64807 ], [ 93.06176, 13.64786 ], [ 93.06148, 13.64782 ], [ 93.06124, 13.64782 ], [ 93.06093, 13.64771 ], [ 93.06061, 13.64756 ], [ 93.05987, 13.64713 ], [ 93.05955, 13.64691 ], [ 93.05935, 13.64685 ], [ 93.05897, 13.64684 ], [ 93.05879, 13.64681 ], [ 93.0585, 13.64666 ], [ 93.05817, 13.6464 ], [ 93.05759, 13.64582 ], [ 93.05701, 13.6453 ], [ 93.05669, 13.64495 ], [ 93.05617, 13.64453 ], [ 93.05542, 13.64377 ], [ 93.05511, 13.64337 ], [ 93.05489, 13.64262 ], [ 93.05488, 13.64246 ], [ 93.05502, 13.64211 ], [ 93.05495, 13.64177 ], [ 93.05481, 13.64069 ], [ 93.05459, 13.6398 ], [ 93.05449, 13.63919 ], [ 93.05449, 13.63876 ], [ 93.05456, 13.63868 ], [ 93.05464, 13.63851 ], [ 93.05464, 13.63833 ], [ 93.05451, 13.63797 ], [ 93.0545, 13.63767 ], [ 93.05456, 13.63711 ], [ 93.05467, 13.63676 ], [ 93.05465, 13.63661 ], [ 93.0544, 13.63606 ], [ 93.05426, 13.6356 ], [ 93.05401, 13.63505 ], [ 93.05383, 13.63449 ], [ 93.05354, 13.63401 ], [ 93.05312, 13.63319 ], [ 93.0527, 13.63211 ], [ 93.05229, 13.63126 ], [ 93.05176, 13.63035 ], [ 93.05164, 13.62997 ], [ 93.0515, 13.62978 ], [ 93.05122, 13.62895 ], [ 93.05093, 13.62848 ], [ 93.05069, 13.62816 ], [ 93.05046, 13.62774 ], [ 93.05002, 13.62668 ], [ 93.04991, 13.62649 ], [ 93.04888, 13.625 ], [ 93.04861, 13.62443 ], [ 93.04837, 13.62384 ], [ 93.04822, 13.62328 ], [ 93.04822, 13.6232 ], [ 93.04826, 13.62312 ], [ 93.04841, 13.62302 ], [ 93.04845, 13.62297 ], [ 93.04832, 13.62275 ], [ 93.04832, 13.6225 ], [ 93.04841, 13.62224 ], [ 93.04841, 13.62216 ], [ 93.04835, 13.62209 ], [ 93.04824, 13.62205 ], [ 93.04814, 13.62205 ], [ 93.04797, 13.62198 ], [ 93.04781, 13.6218 ], [ 93.04751, 13.62158 ], [ 93.04742, 13.62148 ], [ 93.04738, 13.62136 ], [ 93.04737, 13.62121 ], [ 93.04732, 13.62114 ], [ 93.04725, 13.62111 ], [ 93.04708, 13.62111 ], [ 93.04689, 13.6212 ], [ 93.04672, 13.62138 ], [ 93.04667, 13.62156 ], [ 93.04668, 13.62171 ], [ 93.04674, 13.62186 ], [ 93.04694, 13.62205 ], [ 93.04708, 13.62213 ], [ 93.04717, 13.62223 ], [ 93.04719, 13.62247 ], [ 93.04728, 13.62259 ] ] ], [ [ [ 74.7257142, 13.6367687 ], [ 74.7253891, 13.6366675 ], [ 74.7250436, 13.6368333 ], [ 74.7233393, 13.6373374 ], [ 74.7215954, 13.6374704 ], [ 74.721126, 13.6375967 ], [ 74.7201953, 13.6381987 ], [ 74.7198804, 13.6384974 ], [ 74.7194571, 13.6388284 ], [ 74.7191685, 13.639087 ], [ 74.7188204, 13.639357 ], [ 74.7185993, 13.6396276 ], [ 74.7182732, 13.639908 ], [ 74.7180833, 13.6401953 ], [ 74.7184894, 13.640286 ], [ 74.7188633, 13.640287 ], [ 74.7190144, 13.6405583 ], [ 74.7199699, 13.6409637 ], [ 74.7209409, 13.6414256 ], [ 74.7222965, 13.6412744 ], [ 74.7241608, 13.6419478 ], [ 74.7246978, 13.6421448 ], [ 74.7250502, 13.6421881 ], [ 74.7252078, 13.6418807 ], [ 74.7274453, 13.6421726 ], [ 74.7281963, 13.642218 ], [ 74.7286882, 13.6422915 ], [ 74.7293518, 13.6425636 ], [ 74.7300636, 13.6428852 ], [ 74.7311403, 13.6433179 ], [ 74.7317808, 13.6435395 ], [ 74.7325474, 13.6436542 ], [ 74.7332104, 13.6437986 ], [ 74.7335791, 13.6440153 ], [ 74.7336848, 13.6443921 ], [ 74.7335517, 13.6448035 ], [ 74.7338237, 13.6448869 ], [ 74.7340506, 13.6442786 ], [ 74.7345082, 13.6444292 ], [ 74.7350568, 13.6456471 ], [ 74.7358492, 13.6458483 ], [ 74.7366436, 13.6456945 ], [ 74.7392994, 13.644832 ], [ 74.7401048, 13.6445294 ], [ 74.7410541, 13.6442776 ], [ 74.7413182, 13.6441473 ], [ 74.7420365, 13.6439206 ], [ 74.7430863, 13.6434748 ], [ 74.7442863, 13.6429754 ], [ 74.7444875, 13.6427049 ], [ 74.7448354, 13.6426477 ], [ 74.7450679, 13.6423905 ], [ 74.744836, 13.6421323 ], [ 74.7431941, 13.6417816 ], [ 74.7417495, 13.6413443 ], [ 74.740337, 13.6403903 ], [ 74.7396847, 13.639943 ], [ 74.7385149, 13.6394194 ], [ 74.7371634, 13.6387033 ], [ 74.7362976, 13.6384187 ], [ 74.7348271, 13.6383846 ], [ 74.7346234, 13.6385104 ], [ 74.734272, 13.638586 ], [ 74.7334261, 13.6384708 ], [ 74.7329825, 13.6383827 ], [ 74.7326257, 13.6382086 ], [ 74.7312567, 13.6381882 ], [ 74.7305019, 13.6378827 ], [ 74.729878, 13.6376627 ], [ 74.7291624, 13.6373927 ], [ 74.7267146, 13.6372827 ], [ 74.7261626, 13.637167 ], [ 74.7257962, 13.6369485 ], [ 74.7257142, 13.6367687 ] ] ], [ [ [ 74.6908043, 13.6539566 ], [ 74.6900137, 13.6539557 ], [ 74.6897504, 13.6538268 ], [ 74.6896189, 13.6533114 ], [ 74.6884352, 13.6520213 ], [ 74.6879082, 13.6518914 ], [ 74.6876451, 13.6516333 ], [ 74.6850007, 13.6517684 ], [ 74.6848253, 13.6515281 ], [ 74.6844834, 13.6513717 ], [ 74.6834297, 13.6511126 ], [ 74.6829018, 13.6516274 ], [ 74.6823747, 13.6517559 ], [ 74.6822411, 13.6527865 ], [ 74.6819772, 13.6530439 ], [ 74.6813996, 13.6552329 ], [ 74.6816525, 13.6556615 ], [ 74.6823694, 13.6557499 ], [ 74.6828959, 13.6560082 ], [ 74.6834221, 13.656782 ], [ 74.6844758, 13.6570411 ], [ 74.6852669, 13.6565267 ], [ 74.6858311, 13.6563593 ], [ 74.6859252, 13.6566567 ], [ 74.6860572, 13.6567854 ], [ 74.6865843, 13.656786 ], [ 74.6868479, 13.656658 ], [ 74.6865824, 13.6582038 ], [ 74.6842524, 13.6582213 ], [ 74.6828935, 13.6579415 ], [ 74.6829585, 13.6575233 ], [ 74.6818405, 13.6576245 ], [ 74.6813298, 13.6575301 ], [ 74.6809822, 13.6580603 ], [ 74.6804447, 13.6584246 ], [ 74.6802478, 13.6593353 ], [ 74.6804581, 13.6597846 ], [ 74.680391, 13.6604946 ], [ 74.6800762, 13.6608647 ], [ 74.6798879, 13.6613067 ], [ 74.6799741, 13.6638123 ], [ 74.680513, 13.6643809 ], [ 74.680945, 13.6670634 ], [ 74.6810354, 13.66786 ], [ 74.6814842, 13.6681471 ], [ 74.6822416, 13.6681174 ], [ 74.6828494, 13.6679599 ], [ 74.6833569, 13.6676034 ], [ 74.683292, 13.6671666 ], [ 74.6837485, 13.667078 ], [ 74.6842265, 13.6671802 ], [ 74.6845226, 13.6670191 ], [ 74.6851389, 13.6664911 ], [ 74.6858551, 13.6661064 ], [ 74.6865171, 13.6661694 ], [ 74.6868351, 13.6664505 ], [ 74.6881524, 13.66671 ], [ 74.6884311, 13.6665119 ], [ 74.6894707, 13.6661961 ], [ 74.6896794, 13.6655339 ], [ 74.6903156, 13.665635 ], [ 74.691293, 13.6652055 ], [ 74.6918441, 13.6649107 ], [ 74.6921878, 13.6645414 ], [ 74.6927151, 13.6643965 ], [ 74.6936748, 13.664495 ], [ 74.6938561, 13.6643652 ], [ 74.6929822, 13.6626201 ], [ 74.6934586, 13.662325 ], [ 74.6936303, 13.6617735 ], [ 74.6938148, 13.6616813 ], [ 74.694222, 13.6617621 ], [ 74.6945529, 13.6613367 ], [ 74.6952798, 13.6601889 ], [ 74.6949778, 13.6593429 ], [ 74.6960677, 13.6593749 ], [ 74.6961987, 13.6595043 ], [ 74.6965099, 13.6597593 ], [ 74.6966097, 13.6599934 ], [ 74.6968022, 13.6601049 ], [ 74.6971799, 13.6601487 ], [ 74.6973355, 13.6610943 ], [ 74.6975055, 13.6615692 ], [ 74.698285, 13.6618918 ], [ 74.6981251, 13.6623396 ], [ 74.6982115, 13.6625893 ], [ 74.698367, 13.662595 ], [ 74.699132, 13.6619455 ], [ 74.6999892, 13.6609843 ], [ 74.700147, 13.66062 ], [ 74.7000536, 13.6603458 ], [ 74.6996379, 13.6597771 ], [ 74.6994093, 13.6593137 ], [ 74.6991722, 13.6587616 ], [ 74.6992007, 13.6583644 ], [ 74.6994539, 13.6578103 ], [ 74.699529, 13.6573042 ], [ 74.699517, 13.6566468 ], [ 74.6993776, 13.6561292 ], [ 74.6991774, 13.6559215 ], [ 74.6991578, 13.6558123 ], [ 74.6988332, 13.6554687 ], [ 74.6984763, 13.6546013 ], [ 74.6983204, 13.6540941 ], [ 74.6980103, 13.6539649 ], [ 74.6976559, 13.6538366 ], [ 74.6973955, 13.6534915 ], [ 74.6969203, 13.6532934 ], [ 74.6960578, 13.6530622 ], [ 74.6942312, 13.65293 ], [ 74.6923864, 13.6531855 ], [ 74.6910681, 13.6536992 ], [ 74.6908043, 13.6539566 ] ] ], [ [ [ 80.15615, 14.588838097757593 ], [ 80.1563901, 14.5889269 ], [ 80.1563939, 14.5878963 ], [ 80.1571852, 14.5885428 ], [ 80.1579784, 14.5886749 ], [ 80.1579765, 14.5891902 ], [ 80.1585052, 14.5893206 ], [ 80.1594273, 14.5902261 ], [ 80.1602141, 14.5920325 ], [ 80.1602122, 14.5925479 ], [ 80.1603443, 14.5926766 ], [ 80.1608732, 14.5928078 ], [ 80.1610009, 14.593839 ], [ 80.1612636, 14.5943553 ], [ 80.1620554, 14.5948734 ], [ 80.1624479, 14.5961631 ], [ 80.1632415, 14.596166 ], [ 80.1633715, 14.5966817 ], [ 80.1635037, 14.5968106 ], [ 80.1640325, 14.5969418 ], [ 80.1638977, 14.5974566 ], [ 80.16403, 14.5975855 ], [ 80.1645587, 14.5977167 ], [ 80.1646962, 14.5961712 ], [ 80.1644328, 14.5959125 ], [ 80.1636507, 14.5928178 ], [ 80.163387, 14.5925593 ], [ 80.1631255, 14.5917853 ], [ 80.1628618, 14.5915268 ], [ 80.1628637, 14.5910114 ], [ 80.1624712, 14.5899794 ], [ 80.1619421, 14.5899775 ], [ 80.161944, 14.5894621 ], [ 80.1614148, 14.5894602 ], [ 80.161284, 14.5889445 ], [ 80.1610206, 14.5886859 ], [ 80.1603702, 14.5858492 ], [ 80.1606348, 14.5858501 ], [ 80.1612899, 14.5873986 ], [ 80.1615536, 14.5876572 ], [ 80.161945, 14.5892045 ], [ 80.1632668, 14.5894669 ], [ 80.1633948, 14.590498 ], [ 80.1639221, 14.5910151 ], [ 80.1652332, 14.5941119 ], [ 80.1657605, 14.594629 ], [ 80.1658883, 14.5959178 ], [ 80.1664175, 14.5959197 ], [ 80.1665464, 14.5966931 ], [ 80.1670718, 14.5977256 ], [ 80.167725, 14.6000469 ], [ 80.1690484, 14.5999223 ], [ 80.1694422, 14.6005683 ], [ 80.1703664, 14.6012153 ], [ 80.1707614, 14.6016037 ], [ 80.1708922, 14.6021195 ], [ 80.1714218, 14.6019921 ], [ 80.1715541, 14.6018641 ], [ 80.1719554, 14.600835 ], [ 80.1724846, 14.6008367 ], [ 80.1726193, 14.6000643 ], [ 80.1738219, 14.5969766 ], [ 80.1754074, 14.5974977 ], [ 80.1759308, 14.5990454 ], [ 80.1759298, 14.599303 ], [ 80.1767218, 14.5998212 ], [ 80.1775131, 14.6004676 ], [ 80.1780404, 14.6009849 ], [ 80.1788336, 14.6011168 ], [ 80.1788355, 14.6006016 ], [ 80.1793647, 14.6006035 ], [ 80.1794976, 14.6003463 ], [ 80.1795023, 14.599058 ], [ 80.1796369, 14.5985432 ], [ 80.1791079, 14.5985413 ], [ 80.1789778, 14.5977677 ], [ 80.1781871, 14.5969921 ], [ 80.1777955, 14.5957023 ], [ 80.1772666, 14.5955712 ], [ 80.1771345, 14.5954425 ], [ 80.1772729, 14.5938968 ], [ 80.1780648, 14.5944151 ], [ 80.1780676, 14.5936421 ], [ 80.179123, 14.5944187 ], [ 80.1793904, 14.5936468 ], [ 80.1799187, 14.5939063 ], [ 80.1797879, 14.5933905 ], [ 80.1796565, 14.5932606 ], [ 80.1791279, 14.5931304 ], [ 80.178869, 14.5915837 ], [ 80.177284, 14.5909333 ], [ 80.1764931, 14.5901576 ], [ 80.1758327, 14.5897693 ], [ 80.1751759, 14.5886071 ], [ 80.1746473, 14.5884767 ], [ 80.1746492, 14.5879615 ], [ 80.1741205, 14.5878303 ], [ 80.1737248, 14.5874429 ], [ 80.1735947, 14.5869271 ], [ 80.1741239, 14.586929 ], [ 80.1741221, 14.5874442 ], [ 80.1746513, 14.5874461 ], [ 80.1749128, 14.58822 ], [ 80.175442, 14.5882219 ], [ 80.1757036, 14.5889959 ], [ 80.1767601, 14.5895149 ], [ 80.176763, 14.5887418 ], [ 80.1770276, 14.5887428 ], [ 80.1770236, 14.5897734 ], [ 80.1786082, 14.5905521 ], [ 80.1788747, 14.5900376 ], [ 80.1783456, 14.5900357 ], [ 80.1782158, 14.5892624 ], [ 80.1778212, 14.5887456 ], [ 80.1788796, 14.5887494 ], [ 80.1788756, 14.58978 ], [ 80.1794048, 14.5897819 ], [ 80.1794076, 14.5890089 ], [ 80.1799368, 14.5890108 ], [ 80.179934, 14.5897836 ], [ 80.1804623, 14.5900431 ], [ 80.1803322, 14.5892697 ], [ 80.179677, 14.5877214 ], [ 80.1791479, 14.5877195 ], [ 80.1792816, 14.5872047 ], [ 80.1783585, 14.586557 ], [ 80.1746564, 14.5860286 ], [ 80.1735978, 14.5861541 ], [ 80.1735957, 14.5866695 ], [ 80.1731994, 14.5864103 ], [ 80.1729378, 14.5856364 ], [ 80.1725428, 14.5852482 ], [ 80.1714865, 14.584729 ], [ 80.1706966, 14.5836955 ], [ 80.169904, 14.5834351 ], [ 80.1689799, 14.5827882 ], [ 80.1688499, 14.5822724 ], [ 80.1685849, 14.5823998 ], [ 80.1677913, 14.5823969 ], [ 80.166732, 14.5826508 ], [ 80.1659393, 14.5823903 ], [ 80.1656762, 14.5820034 ], [ 80.1669981, 14.5822658 ], [ 80.1671317, 14.5817509 ], [ 80.1664723, 14.5813616 ], [ 80.1656815, 14.5805857 ], [ 80.1633054, 14.579289 ], [ 80.1630408, 14.5792881 ], [ 80.1625116, 14.5792862 ], [ 80.1619835, 14.5790267 ], [ 80.1609253, 14.5790229 ], [ 80.1601327, 14.5787623 ], [ 80.159869, 14.5785037 ], [ 80.1590754, 14.5785009 ], [ 80.1582837, 14.5779826 ], [ 80.1564532, 14.5780258 ], [ 80.15628151474877, 14.57811954312969 ], [ 80.155371, 14.5786167 ], [ 80.1554989, 14.5796479 ], [ 80.1544298, 14.5824782 ], [ 80.1548125, 14.5863446 ], [ 80.1553415, 14.5863465 ], [ 80.1549412, 14.587118 ], [ 80.1549374, 14.5881486 ], [ 80.1553332, 14.588536 ], [ 80.15615, 14.588838097757593 ] ] ], [ [ [ 80.1202315, 14.6995856 ], [ 80.1199607, 14.7011305 ], [ 80.1191665, 14.7011275 ], [ 80.1190244, 14.7034459 ], [ 80.1184909, 14.7044745 ], [ 80.1187519, 14.705265 ], [ 80.1179543, 14.706276 ], [ 80.1179511, 14.707049 ], [ 80.1174134, 14.7091082 ], [ 80.1168798, 14.7101367 ], [ 80.1168768, 14.7109097 ], [ 80.116609, 14.7116816 ], [ 80.1166058, 14.7124546 ], [ 80.116204, 14.7137413 ], [ 80.116065, 14.7152868 ], [ 80.1160618, 14.7160596 ], [ 80.1157919, 14.7173469 ], [ 80.1160535, 14.7181209 ], [ 80.1163079, 14.7206984 ], [ 80.1160348, 14.7227585 ], [ 80.1157691, 14.7230152 ], [ 80.1155012, 14.7237873 ], [ 80.1156247, 14.7261065 ], [ 80.1161542, 14.7261086 ], [ 80.1167989, 14.7302335 ], [ 80.1170533, 14.7328111 ], [ 80.1169068, 14.7364176 ], [ 80.1177012, 14.7364206 ], [ 80.1179679, 14.7359063 ], [ 80.1174385, 14.7359042 ], [ 80.1174406, 14.735389 ], [ 80.1184995, 14.735393 ], [ 80.1191641, 14.7346226 ], [ 80.1199634, 14.7333374 ], [ 80.1209851, 14.7322221 ], [ 80.1218259, 14.7310256 ], [ 80.1219607, 14.7305107 ], [ 80.122756, 14.7302562 ], [ 80.1230238, 14.7294843 ], [ 80.1235534, 14.7294862 ], [ 80.1239531, 14.7287147 ], [ 80.1244846, 14.7282015 ], [ 80.1250172, 14.7274304 ], [ 80.125152, 14.7269158 ], [ 80.1256815, 14.7269177 ], [ 80.1260801, 14.726404 ], [ 80.1262151, 14.7258891 ], [ 80.1270083, 14.7261498 ], [ 80.1276727, 14.7253792 ], [ 80.128471, 14.7243516 ], [ 80.1286059, 14.7238368 ], [ 80.1294001, 14.7238398 ], [ 80.129533, 14.7235828 ], [ 80.1295351, 14.7230674 ], [ 80.1308637, 14.7217841 ], [ 80.1310008, 14.720754 ], [ 80.1317959, 14.7204994 ], [ 80.1321966, 14.7194701 ], [ 80.132728, 14.7189568 ], [ 80.1337961, 14.7166419 ], [ 80.1340618, 14.7163853 ], [ 80.1345974, 14.7148413 ], [ 80.1348632, 14.7145847 ], [ 80.1348652, 14.7140694 ], [ 80.1356643, 14.7127841 ], [ 80.1359382, 14.7104662 ], [ 80.1367375, 14.709181 ], [ 80.1367394, 14.7086656 ], [ 80.1370062, 14.7081513 ], [ 80.137278, 14.7063488 ], [ 80.1380752, 14.7055788 ], [ 80.1382151, 14.7037758 ], [ 80.1376857, 14.7037737 ], [ 80.1372931, 14.7024839 ], [ 80.1365022, 14.7017081 ], [ 80.1359758, 14.7009332 ], [ 80.1358458, 14.7004172 ], [ 80.1353164, 14.7004153 ], [ 80.1353185, 14.6999001 ], [ 80.1347896, 14.6997688 ], [ 80.1346573, 14.6996399 ], [ 80.1345284, 14.6988665 ], [ 80.1334697, 14.6988625 ], [ 80.1330771, 14.6975728 ], [ 80.1330803, 14.6967998 ], [ 80.1332141, 14.6965427 ], [ 80.1326848, 14.6965406 ], [ 80.1325549, 14.6957673 ], [ 80.1320285, 14.6949924 ], [ 80.1320306, 14.694477 ], [ 80.131767, 14.6942184 ], [ 80.1316371, 14.6937026 ], [ 80.130051, 14.6931814 ], [ 80.1300529, 14.692666 ], [ 80.1289932, 14.6929196 ], [ 80.1289911, 14.693435 ], [ 80.1271372, 14.6936856 ], [ 80.1272682, 14.6939438 ], [ 80.1271321, 14.6949738 ], [ 80.1258087, 14.6949689 ], [ 80.1258118, 14.6941959 ], [ 80.1250161, 14.694579 ], [ 80.1239569, 14.6947043 ], [ 80.1236972, 14.693415 ], [ 80.1234326, 14.693414 ], [ 80.1232956, 14.6944441 ], [ 80.1235583, 14.6949604 ], [ 80.1235553, 14.6957334 ], [ 80.1239507, 14.6962502 ], [ 80.1231561, 14.6963756 ], [ 80.1228904, 14.6966323 ], [ 80.1223604, 14.6967595 ], [ 80.1222255, 14.6972743 ], [ 80.1216931, 14.6980453 ], [ 80.121295, 14.6984297 ], [ 80.1207651, 14.6985571 ], [ 80.1206301, 14.6990719 ], [ 80.1204978, 14.6991997 ], [ 80.1202315, 14.6995856 ] ] ], [ [ [ 73.9055022, 15.5379999 ], [ 73.9065095, 15.5387704 ], [ 73.9077823, 15.5398976 ], [ 73.9078394, 15.5399352 ], [ 73.9087629, 15.5405435 ], [ 73.909967, 15.5412441 ], [ 73.9115282, 15.5418663 ], [ 73.9122769, 15.5426343 ], [ 73.9130132, 15.5432919 ], [ 73.9137867, 15.5441174 ], [ 73.9145019, 15.5449278 ], [ 73.9151608, 15.5453301 ], [ 73.9153943, 15.5454622 ], [ 73.9160465, 15.5453837 ], [ 73.9167907, 15.5448425 ], [ 73.9175106, 15.5438728 ], [ 73.917886, 15.5433392 ], [ 73.9186333, 15.5424616 ], [ 73.9191279, 15.5420292 ], [ 73.9190899, 15.5416711 ], [ 73.9200253, 15.5407735 ], [ 73.9213209, 15.5398594 ], [ 73.9231832, 15.5390524 ], [ 73.9238879, 15.5388607 ], [ 73.9245547, 15.538477 ], [ 73.9252218, 15.5378367 ], [ 73.9253951, 15.5370839 ], [ 73.9258042, 15.5364246 ], [ 73.9263978, 15.5360347 ], [ 73.9269192, 15.5359016 ], [ 73.9274208, 15.5358592 ], [ 73.9273928, 15.5356108 ], [ 73.9275011, 15.5355675 ], [ 73.9273994, 15.5347637 ], [ 73.9274192, 15.5343958 ], [ 73.927501, 15.5337968 ], [ 73.9279712, 15.5327852 ], [ 73.9284295, 15.5327191 ], [ 73.9290004, 15.5324705 ], [ 73.9298267, 15.5317808 ], [ 73.9304392, 15.5310347 ], [ 73.9308575, 15.5304825 ], [ 73.9311144, 15.5302359 ], [ 73.931519, 15.5299141 ], [ 73.9318277, 15.52943 ], [ 73.9318793, 15.528808 ], [ 73.9317047, 15.5282717 ], [ 73.9313356, 15.5279017 ], [ 73.9307873, 15.5275782 ], [ 73.9303008, 15.5273339 ], [ 73.9292242, 15.5271366 ], [ 73.9287221, 15.5269799 ], [ 73.9278187, 15.5265784 ], [ 73.9269406, 15.5261377 ], [ 73.925731, 15.5253949 ], [ 73.9250864, 15.5248675 ], [ 73.9242187, 15.5242023 ], [ 73.9236064, 15.5235944 ], [ 73.9233649, 15.5233307 ], [ 73.9227552, 15.5228325 ], [ 73.9222064, 15.5222338 ], [ 73.921532, 15.5213659 ], [ 73.920936, 15.5203475 ], [ 73.9205546, 15.5195895 ], [ 73.9201016, 15.5185558 ], [ 73.9198711, 15.5179202 ], [ 73.9188937, 15.515692 ], [ 73.9186076, 15.5148038 ], [ 73.9182103, 15.5138084 ], [ 73.9175666, 15.5129278 ], [ 73.915866, 15.5113045 ], [ 73.9145866, 15.5101788 ], [ 73.9128701, 15.5089307 ], [ 73.9113125, 15.5079122 ], [ 73.9093099, 15.5071388 ], [ 73.9056465, 15.5065722 ], [ 73.9053445, 15.5065033 ], [ 73.9011169, 15.5060362 ], [ 73.8995752, 15.5059213 ], [ 73.8982958, 15.5056456 ], [ 73.8974296, 15.5054695 ], [ 73.896023, 15.5051862 ], [ 73.894982, 15.5050484 ], [ 73.8922006, 15.5049718 ], [ 73.8899279, 15.5050254 ], [ 73.8881399, 15.5050177 ], [ 73.8860101, 15.5049258 ], [ 73.8842142, 15.5048799 ], [ 73.8827679, 15.5047038 ], [ 73.8815918, 15.5047497 ], [ 73.8797243, 15.504788 ], [ 73.8789137, 15.5049457 ], [ 73.8787332, 15.5050655 ], [ 73.8785663, 15.5051091 ], [ 73.8784448, 15.5050484 ], [ 73.8776422, 15.5051556 ], [ 73.876188, 15.5055078 ], [ 73.8753615, 15.5060438 ], [ 73.874845, 15.5066794 ], [ 73.8744123, 15.5073073 ], [ 73.8750515, 15.5077337 ], [ 73.8769692, 15.5092499 ], [ 73.8800916, 15.5123297 ], [ 73.8823535, 15.5153383 ], [ 73.8842466, 15.5172335 ], [ 73.8852792, 15.5183232 ], [ 73.8866548, 15.5200062 ], [ 73.8879098, 15.5219713 ], [ 73.8892728, 15.5241686 ], [ 73.890743, 15.5267893 ], [ 73.8918042, 15.5283687 ], [ 73.8924502, 15.529299 ], [ 73.893163, 15.5302927 ], [ 73.8942974, 15.530718 ], [ 73.8956694, 15.5314205 ], [ 73.8968392, 15.5321197 ], [ 73.8979797, 15.5332584 ], [ 73.8989819, 15.5340377 ], [ 73.8995211, 15.5344426 ], [ 73.9005231, 15.5351387 ], [ 73.9012401, 15.5356728 ], [ 73.9019989, 15.5359444 ], [ 73.9031792, 15.5365874 ], [ 73.9043534, 15.5374448 ], [ 73.9055022, 15.5379999 ] ] ], [ [ [ 93.01344, 13.67167 ], [ 93.01386, 13.67187 ], [ 93.01456, 13.67225 ], [ 93.01462, 13.67267 ], [ 93.01462, 13.67323 ], [ 93.01457, 13.67385 ], [ 93.01443, 13.67436 ], [ 93.0145, 13.67488 ], [ 93.01454, 13.67501 ], [ 93.01477, 13.67531 ], [ 93.01521, 13.67544 ], [ 93.0158, 13.6754 ], [ 93.01655, 13.67518 ], [ 93.01702, 13.67494 ], [ 93.01762, 13.67474 ], [ 93.01859, 13.67448 ], [ 93.01882, 13.67432 ], [ 93.01887, 13.67396 ], [ 93.01859, 13.67309 ], [ 93.01859, 13.67268 ], [ 93.01869, 13.67229 ], [ 93.01884, 13.672 ], [ 93.01926, 13.6718 ], [ 93.01967, 13.67148 ], [ 93.02003, 13.67108 ], [ 93.02063, 13.67029 ], [ 93.02097, 13.66964 ], [ 93.02114, 13.66881 ], [ 93.0213, 13.66744 ], [ 93.02157, 13.66683 ], [ 93.02189, 13.66636 ], [ 93.02208, 13.66595 ], [ 93.02235, 13.66484 ], [ 93.0228, 13.6632 ], [ 93.02319, 13.66258 ], [ 93.02356, 13.66188 ], [ 93.02369, 13.66107 ], [ 93.02388, 13.66014 ], [ 93.02395, 13.65904 ], [ 93.02388, 13.65799 ], [ 93.02402, 13.65716 ], [ 93.02433, 13.65625 ], [ 93.02484, 13.65554 ], [ 93.02514, 13.65405 ], [ 93.02511, 13.65343 ], [ 93.02469, 13.65232 ], [ 93.02453, 13.65196 ], [ 93.02461, 13.6507 ], [ 93.02472, 13.64991 ], [ 93.02521, 13.64819 ], [ 93.02567, 13.64684 ], [ 93.02645, 13.64525 ], [ 93.02734, 13.6439 ], [ 93.02844, 13.64238 ], [ 93.02902, 13.6411 ], [ 93.02931, 13.64025 ], [ 93.02937, 13.63983 ], [ 93.02934, 13.6394 ], [ 93.02941, 13.63883 ], [ 93.02971, 13.63808 ], [ 93.02976, 13.63707 ], [ 93.02975, 13.6366 ], [ 93.0299, 13.63608 ], [ 93.03021, 13.63568 ], [ 93.03082, 13.63518 ], [ 93.03146, 13.63475 ], [ 93.03202, 13.63428 ], [ 93.03219, 13.63396 ], [ 93.03216, 13.63357 ], [ 93.03199, 13.63304 ], [ 93.03174, 13.63258 ], [ 93.03139, 13.63202 ], [ 93.03111, 13.63146 ], [ 93.03088, 13.63042 ], [ 93.03083, 13.62957 ], [ 93.03075, 13.62893 ], [ 93.03066, 13.62858 ], [ 93.03012, 13.62799 ], [ 93.02983, 13.6278 ], [ 93.02945, 13.62767 ], [ 93.02713, 13.62761 ], [ 93.02483, 13.62725 ], [ 93.02422, 13.62725 ], [ 93.0237, 13.62755 ], [ 93.02303, 13.62832 ], [ 93.02014, 13.63193 ], [ 93.01994, 13.63226 ], [ 93.01876, 13.634 ], [ 93.01871, 13.63469 ], [ 93.01858, 13.63562 ], [ 93.01823, 13.63637 ], [ 93.01737, 13.63735 ], [ 93.01714, 13.63796 ], [ 93.01713, 13.6383 ], [ 93.01705, 13.63914 ], [ 93.01671, 13.64025 ], [ 93.01643, 13.64101 ], [ 93.01641, 13.64197 ], [ 93.01598, 13.64292 ], [ 93.01517, 13.64383 ], [ 93.01418, 13.64457 ], [ 93.01383, 13.64463 ], [ 93.01341, 13.64461 ], [ 93.013, 13.64421 ], [ 93.01253, 13.64406 ], [ 93.01201, 13.64425 ], [ 93.01165, 13.64446 ], [ 93.0104968, 13.6448926 ], [ 93.0099481, 13.6451746 ], [ 93.0100086, 13.645633 ], [ 93.0107584, 13.6460678 ], [ 93.0114961, 13.6462676 ], [ 93.0122822, 13.6462794 ], [ 93.0123306, 13.6467965 ], [ 93.0119073, 13.647102 ], [ 93.0103593, 13.6485006 ], [ 93.0099844, 13.6480657 ], [ 93.0076503, 13.6481715 ], [ 93.0075052, 13.6471373 ], [ 93.0064651, 13.6470668 ], [ 93.0058241, 13.6473371 ], [ 93.0055459, 13.6465732 ], [ 93.0029216, 13.6474429 ], [ 93.0028974, 13.6485946 ], [ 93.001178, 13.6498218 ], [ 92.9997025, 13.6495162 ], [ 92.9989769, 13.6488346 ], [ 92.9988076, 13.6472362 ], [ 92.9978884, 13.6469072 ], [ 92.9969451, 13.6473538 ], [ 92.9960985, 13.6474713 ], [ 92.9954213, 13.6467426 ], [ 92.9952036, 13.6452853 ], [ 92.9943812, 13.6447212 ], [ 92.9934379, 13.6454028 ], [ 92.9923252, 13.6455439 ], [ 92.9914061, 13.6454028 ], [ 92.9910916, 13.6446272 ], [ 92.9902934, 13.6450738 ], [ 92.9897855, 13.6458259 ], [ 92.9893501, 13.6458024 ], [ 92.98831, 13.6454969 ], [ 92.9881649, 13.6433579 ], [ 92.9861815, 13.6430053 ], [ 92.9863508, 13.643828 ], [ 92.98444, 13.6468837 ], [ 92.9839079, 13.6486935 ], [ 92.9826501, 13.6504564 ], [ 92.9809569, 13.6529949 ], [ 92.9795057, 13.6531594 ], [ 92.9778851, 13.6547577 ], [ 92.9776674, 13.6565675 ], [ 92.9788284, 13.6566145 ], [ 92.9809086, 13.6573666 ], [ 92.9828436, 13.6566145 ], [ 92.9838595, 13.6568731 ], [ 92.9842465, 13.6584243 ], [ 92.9860364, 13.659717 ], [ 92.98727, 13.6550162 ], [ 92.987657, 13.6552983 ], [ 92.9873667, 13.6591529 ], [ 92.9898097, 13.6609157 ], [ 92.9938007, 13.6622789 ], [ 92.9963646, 13.6644177 ], [ 92.9985415, 13.6648408 ], [ 92.9997509, 13.6670736 ], [ 93.0014924, 13.6678021 ], [ 93.0034032, 13.6680372 ], [ 93.0045401, 13.6677081 ], [ 93.0050722, 13.6662274 ], [ 93.0063058, 13.6662274 ], [ 93.0081924, 13.6686953 ], [ 93.0091116, 13.6691183 ], [ 93.0093051, 13.6708105 ], [ 93.0105386, 13.6716096 ], [ 93.0125462, 13.6713981 ], [ 93.01344, 13.67167 ] ] ], [ [ [ 80.5460697, 15.8521704 ], [ 80.5436739, 15.8522947 ], [ 80.5436726, 15.8528099 ], [ 80.5418098, 15.8526767 ], [ 80.5410109, 15.8528045 ], [ 80.5411425, 15.8533199 ], [ 80.541408, 15.8535782 ], [ 80.5415403, 15.8540938 ], [ 80.5423388, 15.8540953 ], [ 80.5426034, 15.8548689 ], [ 80.5431351, 15.8551277 ], [ 80.5431368, 15.8543548 ], [ 80.5436683, 15.8547419 ], [ 80.5460633, 15.8550046 ], [ 80.5471264, 15.8557797 ], [ 80.5476586, 15.8557808 ], [ 80.548456, 15.8562978 ], [ 80.5492534, 15.8568149 ], [ 80.5497862, 15.8566875 ], [ 80.5497849, 15.8572029 ], [ 80.5519138, 15.8574648 ], [ 80.5525766, 15.8584968 ], [ 80.5524428, 15.8590118 ], [ 80.5529752, 15.8590129 ], [ 80.5529746, 15.8592705 ], [ 80.5524422, 15.8592696 ], [ 80.5524411, 15.8597848 ], [ 80.5535059, 15.8597871 ], [ 80.5535048, 15.8603023 ], [ 80.5553674, 15.8605639 ], [ 80.5560302, 15.8615958 ], [ 80.5561625, 15.8621112 ], [ 80.5569614, 15.8619836 ], [ 80.5574934, 15.862114 ], [ 80.5574923, 15.8626293 ], [ 80.5582901, 15.8630169 ], [ 80.5604199, 15.8628929 ], [ 80.560421, 15.8623777 ], [ 80.5606872, 15.8623781 ], [ 80.5604188, 15.8634081 ], [ 80.5614832, 15.8635387 ], [ 80.5620145, 15.8640551 ], [ 80.5628128, 15.864186 ], [ 80.562814, 15.8636706 ], [ 80.5636112, 15.8643161 ], [ 80.5646758, 15.8643182 ], [ 80.5649415, 15.8645763 ], [ 80.5657403, 15.8644495 ], [ 80.5657393, 15.8649649 ], [ 80.5660056, 15.864836 ], [ 80.566538, 15.8648372 ], [ 80.566804, 15.864967 ], [ 80.5672039, 15.8644525 ], [ 80.5673386, 15.8639375 ], [ 80.5689363, 15.8636829 ], [ 80.5689351, 15.8641983 ], [ 80.5694675, 15.8641993 ], [ 80.5694664, 15.8647147 ], [ 80.5699994, 15.864458 ], [ 80.5701298, 15.8654888 ], [ 80.5699967, 15.8657462 ], [ 80.5707953, 15.8657479 ], [ 80.5707941, 15.8662632 ], [ 80.5713262, 15.8663926 ], [ 80.5715919, 15.8666508 ], [ 80.5737206, 15.8670418 ], [ 80.5737195, 15.8675572 ], [ 80.57505, 15.8678175 ], [ 80.5747828, 15.8683321 ], [ 80.5750487, 15.868461 ], [ 80.5761133, 15.8684631 ], [ 80.5769109, 15.86898 ], [ 80.5779759, 15.8688538 ], [ 80.5779771, 15.8683386 ], [ 80.5782432, 15.8683389 ], [ 80.5785072, 15.8693701 ], [ 80.5790391, 15.8696289 ], [ 80.5790402, 15.8691135 ], [ 80.5795726, 15.8691146 ], [ 80.5795715, 15.8696298 ], [ 80.5801039, 15.8696309 ], [ 80.5798361, 15.8704032 ], [ 80.580102, 15.8705321 ], [ 80.5832959, 15.8707959 ], [ 80.5843613, 15.8705404 ], [ 80.584628, 15.8702832 ], [ 80.5878219, 15.870547 ], [ 80.5902177, 15.8705516 ], [ 80.5904832, 15.8708097 ], [ 80.5912813, 15.8710689 ], [ 80.5923462, 15.8710709 ], [ 80.5931438, 15.8715877 ], [ 80.5936764, 15.8714603 ], [ 80.5936748, 15.8722333 ], [ 80.5942074, 15.872105 ], [ 80.5944741, 15.8718477 ], [ 80.5950065, 15.8718489 ], [ 80.595538, 15.872365 ], [ 80.59607, 15.8724954 ], [ 80.5960691, 15.8730106 ], [ 80.5976663, 15.8730137 ], [ 80.5976652, 15.8735289 ], [ 80.5984639, 15.8735304 ], [ 80.5984628, 15.8740458 ], [ 80.5997941, 15.873919 ], [ 80.6005913, 15.8746933 ], [ 80.6016561, 15.8746954 ], [ 80.6024531, 15.8754697 ], [ 80.604314, 15.8767614 ], [ 80.6048463, 15.8768916 ], [ 80.6051109, 15.877665 ], [ 80.6061753, 15.8779246 ], [ 80.6061744, 15.8784399 ], [ 80.606707, 15.8783117 ], [ 80.607504, 15.8790861 ], [ 80.610963, 15.8799946 ], [ 80.6106983, 15.879221 ], [ 80.6112305, 15.8793505 ], [ 80.6114962, 15.8796084 ], [ 80.6122951, 15.8794816 ], [ 80.6125627, 15.8787092 ], [ 80.6128292, 15.8785803 ], [ 80.61416, 15.878712 ], [ 80.6144248, 15.8794854 ], [ 80.614957, 15.8796147 ], [ 80.6152227, 15.8798729 ], [ 80.6178846, 15.8800069 ], [ 80.6180167, 15.8802647 ], [ 80.6180158, 15.8807801 ], [ 80.6178827, 15.8810375 ], [ 80.6192135, 15.8811681 ], [ 80.6202768, 15.881943 ], [ 80.6210755, 15.8819443 ], [ 80.6221418, 15.8811734 ], [ 80.6232065, 15.8813043 ], [ 80.62387, 15.8820785 ], [ 80.6240027, 15.8825941 ], [ 80.6248013, 15.8825954 ], [ 80.6248022, 15.8820802 ], [ 80.6253344, 15.8822095 ], [ 80.6256011, 15.8819522 ], [ 80.6264002, 15.881696 ], [ 80.6266669, 15.8814387 ], [ 80.6285304, 15.8814419 ], [ 80.6287961, 15.8817001 ], [ 80.6298606, 15.8819596 ], [ 80.6322567, 15.8818352 ], [ 80.6322554, 15.8826083 ], [ 80.6327878, 15.8826092 ], [ 80.6331857, 15.8831252 ], [ 80.6335837, 15.8841564 ], [ 80.6343822, 15.8841577 ], [ 80.6343813, 15.8846731 ], [ 80.63518, 15.8846744 ], [ 80.6351796, 15.884932 ], [ 80.6343807, 15.885059 ], [ 80.6342469, 15.8851881 ], [ 80.6343777, 15.8867343 ], [ 80.6357079, 15.8872518 ], [ 80.6359764, 15.8859639 ], [ 80.6357101, 15.8859636 ], [ 80.6357105, 15.885706 ], [ 80.6359768, 15.8857063 ], [ 80.6361104, 15.8851913 ], [ 80.6366442, 15.8844193 ], [ 80.6370449, 15.8839046 ], [ 80.6365124, 15.8839037 ], [ 80.6369127, 15.8831314 ], [ 80.6377183, 15.8792681 ], [ 80.6377202, 15.8782374 ], [ 80.6379872, 15.8777226 ], [ 80.6379891, 15.876692 ], [ 80.6383911, 15.8754043 ], [ 80.6375928, 15.8752737 ], [ 80.637327, 15.8750157 ], [ 80.6365285, 15.8750142 ], [ 80.6333354, 15.8742359 ], [ 80.6314724, 15.8739751 ], [ 80.6274798, 15.8737107 ], [ 80.6269479, 15.8734521 ], [ 80.6256168, 15.8734499 ], [ 80.6213586, 15.8729271 ], [ 80.6205605, 15.872668 ], [ 80.6197618, 15.8726667 ], [ 80.6189638, 15.8724075 ], [ 80.6181651, 15.8724062 ], [ 80.6173669, 15.8721471 ], [ 80.6165684, 15.8721458 ], [ 80.6115125, 15.8711061 ], [ 80.6107139, 15.8711048 ], [ 80.6083191, 15.870585 ], [ 80.6075206, 15.8705837 ], [ 80.6045937, 15.8698054 ], [ 80.6037952, 15.8698039 ], [ 80.6024652, 15.8692862 ], [ 80.60007, 15.8690241 ], [ 80.59874, 15.8685064 ], [ 80.5979415, 15.8685049 ], [ 80.595281, 15.867727 ], [ 80.5944824, 15.8677254 ], [ 80.5934187, 15.8672082 ], [ 80.5928863, 15.8672072 ], [ 80.5915563, 15.8666894 ], [ 80.5907578, 15.8666878 ], [ 80.5886293, 15.8661685 ], [ 80.5867671, 15.8656497 ], [ 80.586235, 15.8653909 ], [ 80.5857028, 15.86539 ], [ 80.5843728, 15.8648721 ], [ 80.5838404, 15.8648712 ], [ 80.5825106, 15.8643533 ], [ 80.5819782, 15.8643522 ], [ 80.5806484, 15.8638343 ], [ 80.5798497, 15.8638328 ], [ 80.578786, 15.8633155 ], [ 80.5782538, 15.8633144 ], [ 80.5769243, 15.8625389 ], [ 80.5761258, 15.8625372 ], [ 80.5753277, 15.8622781 ], [ 80.5745291, 15.8622766 ], [ 80.5731999, 15.8615009 ], [ 80.5724014, 15.8614994 ], [ 80.5705392, 15.8609804 ], [ 80.5689431, 15.860462 ], [ 80.5686775, 15.8602038 ], [ 80.5662834, 15.8594261 ], [ 80.5654849, 15.8594244 ], [ 80.5644212, 15.8589071 ], [ 80.5614949, 15.8581282 ], [ 80.5593672, 15.8573509 ], [ 80.5591016, 15.8570927 ], [ 80.5567076, 15.856315 ], [ 80.5561754, 15.8563138 ], [ 80.5532496, 15.8552772 ], [ 80.5527172, 15.855276 ], [ 80.5519198, 15.8547591 ], [ 80.55059, 15.8542411 ], [ 80.5503245, 15.8539829 ], [ 80.5489941, 15.8537224 ], [ 80.5481973, 15.8529479 ], [ 80.5460697, 15.8521704 ] ] ], [ [ [ 81.181654, 16.0894807 ], [ 81.1817875, 16.0902535 ], [ 81.1823212, 16.0910259 ], [ 81.1824558, 16.0920564 ], [ 81.1829887, 16.092056 ], [ 81.1833894, 16.0936014 ], [ 81.1836563, 16.0938588 ], [ 81.1839239, 16.0951469 ], [ 81.1847241, 16.0959191 ], [ 81.1857928, 16.0987524 ], [ 81.1857943, 16.1002983 ], [ 81.1856618, 16.1005561 ], [ 81.1869942, 16.1005549 ], [ 81.1871282, 16.101843 ], [ 81.1869955, 16.1019715 ], [ 81.1861959, 16.1018439 ], [ 81.1861965, 16.1023591 ], [ 81.187796, 16.102873 ], [ 81.1877962, 16.1031306 ], [ 81.1872632, 16.1031312 ], [ 81.1872634, 16.1033888 ], [ 81.1877963, 16.1033884 ], [ 81.1877967, 16.103646 ], [ 81.1872635, 16.1036464 ], [ 81.1872639, 16.103904 ], [ 81.1880634, 16.1039034 ], [ 81.1881966, 16.1044187 ], [ 81.1887302, 16.1049333 ], [ 81.1887308, 16.1054487 ], [ 81.1895319, 16.1072516 ], [ 81.1897988, 16.107509 ], [ 81.1899337, 16.108797 ], [ 81.1904667, 16.1087967 ], [ 81.191002, 16.1111149 ], [ 81.1902021, 16.1108581 ], [ 81.1902031, 16.1118885 ], [ 81.1910029, 16.1121455 ], [ 81.1910022, 16.1113725 ], [ 81.1912686, 16.1113723 ], [ 81.191669, 16.1124026 ], [ 81.1916697, 16.1131756 ], [ 81.1910046, 16.113949 ], [ 81.192071, 16.1142058 ], [ 81.1919375, 16.1144634 ], [ 81.1919388, 16.1157517 ], [ 81.1922059, 16.1162669 ], [ 81.1927406, 16.1180699 ], [ 81.1928753, 16.1191004 ], [ 81.1939415, 16.1190994 ], [ 81.1936754, 16.1196148 ], [ 81.194475, 16.1196143 ], [ 81.1944765, 16.1211601 ], [ 81.1936771, 16.1212892 ], [ 81.193411, 16.1216762 ], [ 81.1944773, 16.1219329 ], [ 81.194386, 16.1223599 ], [ 81.1939447, 16.1224487 ], [ 81.1939453, 16.1229641 ], [ 81.1952781, 16.1232206 ], [ 81.1950131, 16.1247666 ], [ 81.1944801, 16.1247672 ], [ 81.1946561, 16.1259665 ], [ 81.1942146, 16.1259263 ], [ 81.1938139, 16.1255407 ], [ 81.1935465, 16.1245103 ], [ 81.1934136, 16.1243812 ], [ 81.1926138, 16.1242534 ], [ 81.1926132, 16.1237382 ], [ 81.1920802, 16.1237386 ], [ 81.1922135, 16.1242538 ], [ 81.192747, 16.1247687 ], [ 81.1932815, 16.1260565 ], [ 81.1935506, 16.1288904 ], [ 81.1932864, 16.1312094 ], [ 81.1935537, 16.131982 ], [ 81.1934217, 16.1327552 ], [ 81.1939547, 16.1327547 ], [ 81.1943546, 16.1332695 ], [ 81.1943556, 16.1343001 ], [ 81.1946225, 16.1345575 ], [ 81.1951571, 16.136103 ], [ 81.1954238, 16.1363604 ], [ 81.195692, 16.1379061 ], [ 81.1959587, 16.1381635 ], [ 81.195562, 16.1407403 ], [ 81.1987604, 16.140608 ], [ 81.1992942, 16.1411228 ], [ 81.200094, 16.1412514 ], [ 81.2003618, 16.1425394 ], [ 81.2014287, 16.143182 ], [ 81.2024951, 16.1433103 ], [ 81.2024947, 16.1427949 ], [ 81.202228, 16.1427953 ], [ 81.2022272, 16.1420223 ], [ 81.2024937, 16.1420221 ], [ 81.202359, 16.1409915 ], [ 81.2007544, 16.1358401 ], [ 81.2004877, 16.1355827 ], [ 81.2002199, 16.1342948 ], [ 81.199953, 16.1340374 ], [ 81.1996852, 16.1327494 ], [ 81.1994183, 16.132492 ], [ 81.1992839, 16.1309461 ], [ 81.1987508, 16.1309467 ], [ 81.1986153, 16.1291433 ], [ 81.1980804, 16.1273402 ], [ 81.1978137, 16.127083 ], [ 81.1972788, 16.1252799 ], [ 81.1971447, 16.1239917 ], [ 81.1966117, 16.1239923 ], [ 81.1966102, 16.1224464 ], [ 81.196077, 16.1224468 ], [ 81.1959421, 16.1211588 ], [ 81.1948734, 16.1185833 ], [ 81.1947393, 16.117295 ], [ 81.1942063, 16.1172956 ], [ 81.1942046, 16.115492 ], [ 81.1936714, 16.1154925 ], [ 81.1935365, 16.1142045 ], [ 81.1930027, 16.1134319 ], [ 81.1928685, 16.1121438 ], [ 81.1923356, 16.1121444 ], [ 81.1919341, 16.1108564 ], [ 81.1916672, 16.110599 ], [ 81.1905981, 16.1072506 ], [ 81.1903312, 16.1069932 ], [ 81.1897967, 16.1054478 ], [ 81.18953, 16.1051903 ], [ 81.1884612, 16.1023572 ], [ 81.1881946, 16.1020998 ], [ 81.1876603, 16.100812 ], [ 81.1873936, 16.1005545 ], [ 81.1857911, 16.0969488 ], [ 81.1855244, 16.0966914 ], [ 81.1849903, 16.0954037 ], [ 81.1847234, 16.0951463 ], [ 81.1841891, 16.0936009 ], [ 81.1839222, 16.0933434 ], [ 81.1836548, 16.092313 ], [ 81.1831214, 16.0917982 ], [ 81.1827207, 16.0902527 ], [ 81.1821878, 16.0902531 ], [ 81.1820536, 16.0897379 ], [ 81.181654, 16.0894807 ] ] ], [ [ [ 81.4009847, 16.3568709 ], [ 81.400451, 16.3568718 ], [ 81.4005856, 16.3576444 ], [ 81.4004529, 16.3577732 ], [ 81.3977848, 16.3580359 ], [ 81.3975185, 16.358294 ], [ 81.3943174, 16.3588153 ], [ 81.3924505, 16.3593339 ], [ 81.3911176, 16.3601094 ], [ 81.3903187, 16.3608837 ], [ 81.3881843, 16.3611453 ], [ 81.3873828, 16.3606316 ], [ 81.3860481, 16.3603764 ], [ 81.3852475, 16.3603778 ], [ 81.3851139, 16.3605074 ], [ 81.3849834, 16.3617958 ], [ 81.3857839, 16.3617943 ], [ 81.3856506, 16.3620523 ], [ 81.3856521, 16.3628251 ], [ 81.3859194, 16.3630824 ], [ 81.3860543, 16.3635974 ], [ 81.3865882, 16.3637248 ], [ 81.3868557, 16.3639818 ], [ 81.3873896, 16.3641101 ], [ 81.3873881, 16.3633373 ], [ 81.388455, 16.3630776 ], [ 81.388589, 16.3635927 ], [ 81.3881917, 16.3648816 ], [ 81.3889931, 16.3652661 ], [ 81.3895266, 16.3651368 ], [ 81.3899279, 16.3659088 ], [ 81.3904627, 16.3664231 ], [ 81.3905975, 16.3669381 ], [ 81.3924661, 16.3671923 ], [ 81.3927345, 16.3679648 ], [ 81.3935353, 16.3680916 ], [ 81.3940702, 16.3686059 ], [ 81.3946041, 16.3687342 ], [ 81.3946056, 16.3695072 ], [ 81.3951399, 16.3697637 ], [ 81.395139, 16.3692485 ], [ 81.3964729, 16.3691167 ], [ 81.3967392, 16.3688586 ], [ 81.3972728, 16.3687293 ], [ 81.3980776, 16.3707888 ], [ 81.3972769, 16.3707903 ], [ 81.3970137, 16.3725943 ], [ 81.3967468, 16.3725947 ], [ 81.3967474, 16.3728523 ], [ 81.3970142, 16.372852 ], [ 81.3972826, 16.3736242 ], [ 81.3978173, 16.3740092 ], [ 81.398885, 16.3741366 ], [ 81.3995485, 16.3725894 ], [ 81.3998101, 16.3700126 ], [ 81.4000764, 16.3697544 ], [ 81.400335, 16.3656318 ], [ 81.4005977, 16.3635702 ], [ 81.4008628, 16.3627968 ], [ 81.4008576, 16.3602203 ], [ 81.4011229, 16.3594469 ], [ 81.4009847, 16.3568709 ] ] ], [ [ [ 81.523535, 16.3821077 ], [ 81.5235337, 16.3815924 ], [ 81.5267351, 16.3811976 ], [ 81.5270013, 16.3809393 ], [ 81.5304679, 16.3799 ], [ 81.5342035, 16.3796329 ], [ 81.5379391, 16.3793658 ], [ 81.539274, 16.37962 ], [ 81.5448784, 16.3796057 ], [ 81.5464787, 16.3792154 ], [ 81.5468763, 16.3784414 ], [ 81.5476741, 16.3774089 ], [ 81.5476726, 16.3768937 ], [ 81.5484696, 16.3756034 ], [ 81.5484681, 16.3750882 ], [ 81.5487344, 16.3748298 ], [ 81.5488661, 16.3740566 ], [ 81.5493998, 16.3740551 ], [ 81.5495319, 16.3737971 ], [ 81.5495306, 16.3732819 ], [ 81.550593, 16.3714757 ], [ 81.5511252, 16.3709591 ], [ 81.5516546, 16.369412 ], [ 81.5521861, 16.3686376 ], [ 81.5521768, 16.3652884 ], [ 81.552576, 16.364772 ], [ 81.5520422, 16.3647735 ], [ 81.5529708, 16.3629676 ], [ 81.5529693, 16.3624524 ], [ 81.5532354, 16.3621941 ], [ 81.5542912, 16.3580691 ], [ 81.5542883, 16.3570387 ], [ 81.5545537, 16.3565227 ], [ 81.5545442, 16.3531735 ], [ 81.5553397, 16.3513679 ], [ 81.5558718, 16.3508512 ], [ 81.5557374, 16.3503364 ], [ 81.55627, 16.349948 ], [ 81.557071, 16.3500752 ], [ 81.5570687, 16.3493024 ], [ 81.5576024, 16.3493009 ], [ 81.5576002, 16.348528 ], [ 81.5570661, 16.3484001 ], [ 81.5559988, 16.3484029 ], [ 81.5553324, 16.3487917 ], [ 81.5554677, 16.3493065 ], [ 81.5549339, 16.3493078 ], [ 81.5552023, 16.3498225 ], [ 81.5538689, 16.3500837 ], [ 81.5541386, 16.3511134 ], [ 81.5533375, 16.3508578 ], [ 81.5530742, 16.3521468 ], [ 81.5525404, 16.3521481 ], [ 81.5526748, 16.3526632 ], [ 81.552277, 16.3533078 ], [ 81.5517436, 16.3534384 ], [ 81.5517421, 16.3529232 ], [ 81.548542, 16.3535751 ], [ 81.5482759, 16.3538334 ], [ 81.5466758, 16.3542245 ], [ 81.5464119, 16.3552557 ], [ 81.5458774, 16.3549996 ], [ 81.545745, 16.3555152 ], [ 81.5449466, 16.3562901 ], [ 81.5442825, 16.3571931 ], [ 81.5432161, 16.3575826 ], [ 81.5432176, 16.358098 ], [ 81.5413507, 16.3584887 ], [ 81.5410846, 16.3587471 ], [ 81.5397512, 16.3590081 ], [ 81.5357478, 16.3587607 ], [ 81.5344121, 16.3582489 ], [ 81.5330772, 16.3579947 ], [ 81.5328096, 16.3577376 ], [ 81.5320084, 16.3574821 ], [ 81.5309368, 16.3559389 ], [ 81.5302683, 16.3555547 ], [ 81.5297317, 16.3545254 ], [ 81.529064, 16.3541402 ], [ 81.525862, 16.3541481 ], [ 81.5255949, 16.3540206 ], [ 81.5255962, 16.3545358 ], [ 81.5250625, 16.3545371 ], [ 81.5250638, 16.3550523 ], [ 81.5245295, 16.354796 ], [ 81.5245308, 16.3553114 ], [ 81.5239975, 16.3554411 ], [ 81.5237314, 16.3556993 ], [ 81.523198, 16.3558299 ], [ 81.5230655, 16.3563454 ], [ 81.5221337, 16.3569915 ], [ 81.5214679, 16.3576376 ], [ 81.5213364, 16.3581532 ], [ 81.5210691, 16.3580247 ], [ 81.520002, 16.3581566 ], [ 81.5200035, 16.3586718 ], [ 81.5189357, 16.3585452 ], [ 81.5178671, 16.3580325 ], [ 81.5171976, 16.3573906 ], [ 81.5170634, 16.3568756 ], [ 81.5159954, 16.3566206 ], [ 81.5155919, 16.355591 ], [ 81.5150568, 16.3550771 ], [ 81.5143872, 16.3539189 ], [ 81.5122521, 16.3537958 ], [ 81.5122536, 16.3543111 ], [ 81.5101194, 16.3545738 ], [ 81.5101181, 16.3540585 ], [ 81.5095843, 16.3540599 ], [ 81.5090468, 16.3525154 ], [ 81.507979, 16.3523887 ], [ 81.5069126, 16.3527781 ], [ 81.506914, 16.3532935 ], [ 81.5053129, 16.3532973 ], [ 81.5053116, 16.352782 ], [ 81.5045112, 16.3527839 ], [ 81.5045099, 16.3522685 ], [ 81.5023755, 16.3524022 ], [ 81.5019731, 16.3517594 ], [ 81.5013044, 16.3509881 ], [ 81.502105, 16.3509862 ], [ 81.5023744, 16.352016 ], [ 81.5029077, 16.3518856 ], [ 81.503707, 16.3513683 ], [ 81.5047743, 16.3513659 ], [ 81.5061098, 16.3518779 ], [ 81.5063774, 16.3521349 ], [ 81.5069113, 16.3522629 ], [ 81.50691, 16.3517476 ], [ 81.5074428, 16.3513594 ], [ 81.5079763, 16.3513581 ], [ 81.5085093, 16.3510992 ], [ 81.510377, 16.3509663 ], [ 81.5101133, 16.3522551 ], [ 81.5106471, 16.3522538 ], [ 81.5106484, 16.3527692 ], [ 81.5117159, 16.3527665 ], [ 81.5117144, 16.3522513 ], [ 81.5119816, 16.3523789 ], [ 81.5127818, 16.3522487 ], [ 81.5127805, 16.3517335 ], [ 81.51358, 16.3513445 ], [ 81.5146469, 16.3512135 ], [ 81.514649, 16.3519865 ], [ 81.5165182, 16.3524972 ], [ 81.5165195, 16.3530124 ], [ 81.5178552, 16.3535244 ], [ 81.518126, 16.3550695 ], [ 81.5183929, 16.3550689 ], [ 81.5185252, 16.354811 ], [ 81.5183868, 16.3527503 ], [ 81.5189211, 16.3530066 ], [ 81.5189185, 16.351976 ], [ 81.5190937, 16.3520633 ], [ 81.5191872, 16.3527482 ], [ 81.5197219, 16.353133 ], [ 81.520256, 16.353261 ], [ 81.5202574, 16.3537762 ], [ 81.5205242, 16.3537754 ], [ 81.5206565, 16.3535174 ], [ 81.5210564, 16.3532589 ], [ 81.521058, 16.3537741 ], [ 81.5218584, 16.3537722 ], [ 81.5219907, 16.3535142 ], [ 81.5218557, 16.3527416 ], [ 81.5223893, 16.3527403 ], [ 81.522388, 16.3522251 ], [ 81.5237191, 16.351062 ], [ 81.5247854, 16.3506734 ], [ 81.5247839, 16.350158 ], [ 81.5269183, 16.3500234 ], [ 81.5279871, 16.350536 ], [ 81.5285206, 16.3505346 ], [ 81.5287883, 16.3507917 ], [ 81.5295894, 16.3510472 ], [ 81.5322577, 16.3510406 ], [ 81.5330591, 16.3512961 ], [ 81.5335941, 16.35181 ], [ 81.5341273, 16.3516804 ], [ 81.5341288, 16.3521956 ], [ 81.5346626, 16.3521943 ], [ 81.5349313, 16.3529665 ], [ 81.5357327, 16.353222 ], [ 81.5353292, 16.3521926 ], [ 81.5354601, 16.3511617 ], [ 81.5359939, 16.3511604 ], [ 81.5361275, 16.3514177 ], [ 81.536267, 16.3534783 ], [ 81.5368015, 16.3537346 ], [ 81.5370619, 16.3514152 ], [ 81.5373288, 16.3514146 ], [ 81.5374624, 16.3516719 ], [ 81.537335, 16.3537333 ], [ 81.5376019, 16.3537325 ], [ 81.5375998, 16.3529597 ], [ 81.5381335, 16.3529584 ], [ 81.5380016, 16.3537316 ], [ 81.5381369, 16.3542466 ], [ 81.5392054, 16.3546297 ], [ 81.5394722, 16.3546291 ], [ 81.5410712, 16.3538522 ], [ 81.5416034, 16.3533354 ], [ 81.5424036, 16.353205 ], [ 81.5424057, 16.3539778 ], [ 81.5429394, 16.3539765 ], [ 81.5428034, 16.3532041 ], [ 81.5429338, 16.3519155 ], [ 81.5442679, 16.3519121 ], [ 81.5440906, 16.3514849 ], [ 81.5445333, 16.3513961 ], [ 81.5445348, 16.3519113 ], [ 81.5453352, 16.3519092 ], [ 81.5454675, 16.3516513 ], [ 81.5454639, 16.3503632 ], [ 81.5447954, 16.3497204 ], [ 81.5437274, 16.3494655 ], [ 81.542658, 16.3486953 ], [ 81.5407909, 16.3489578 ], [ 81.5298508, 16.3489856 ], [ 81.5282504, 16.3492472 ], [ 81.4975658, 16.349837 ], [ 81.4911636, 16.350625 ], [ 81.4907639, 16.3510128 ], [ 81.4902323, 16.351787 ], [ 81.4899692, 16.3533335 ], [ 81.4899724, 16.3546216 ], [ 81.4894407, 16.3553957 ], [ 81.4891784, 16.3571999 ], [ 81.4883797, 16.3579746 ], [ 81.4870519, 16.3605541 ], [ 81.4867875, 16.3615851 ], [ 81.4862557, 16.3623592 ], [ 81.4862578, 16.3631322 ], [ 81.4857265, 16.364164 ], [ 81.4857284, 16.3649368 ], [ 81.484931, 16.3662269 ], [ 81.4844018, 16.3680315 ], [ 81.4844031, 16.3685467 ], [ 81.4838726, 16.3698363 ], [ 81.4838737, 16.3703515 ], [ 81.4833419, 16.3711256 ], [ 81.482549, 16.374219 ], [ 81.4820172, 16.3749931 ], [ 81.4820183, 16.3755083 ], [ 81.4801661, 16.3819534 ], [ 81.4798998, 16.3822118 ], [ 81.4799011, 16.382727 ], [ 81.4793699, 16.3837588 ], [ 81.4788424, 16.3863363 ], [ 81.4783118, 16.3876257 ], [ 81.478313, 16.3881409 ], [ 81.4777817, 16.3891727 ], [ 81.4776513, 16.3902035 ], [ 81.4773844, 16.3902042 ], [ 81.4773869, 16.3912347 ], [ 81.4792538, 16.3907151 ], [ 81.4792527, 16.3901999 ], [ 81.4805864, 16.3899393 ], [ 81.480985, 16.3894231 ], [ 81.4811177, 16.3889075 ], [ 81.4821846, 16.3886474 ], [ 81.4831156, 16.3876147 ], [ 81.4836475, 16.3868406 ], [ 81.4841795, 16.3860665 ], [ 81.4847087, 16.3842619 ], [ 81.4847082, 16.3840043 ], [ 81.4844405, 16.3837472 ], [ 81.4844317, 16.3801404 ], [ 81.4849629, 16.3791086 ], [ 81.484961, 16.3783356 ], [ 81.4854935, 16.3778191 ], [ 81.4858911, 16.3765301 ], [ 81.4864248, 16.3765288 ], [ 81.4865564, 16.3760132 ], [ 81.4870882, 16.3752392 ], [ 81.486954, 16.3747242 ], [ 81.4874878, 16.3747229 ], [ 81.4874865, 16.3742076 ], [ 81.4880202, 16.3742063 ], [ 81.4886851, 16.373432 ], [ 81.4888176, 16.3729164 ], [ 81.4893504, 16.3725282 ], [ 81.4904169, 16.3721398 ], [ 81.4904156, 16.3716246 ], [ 81.4920162, 16.3713632 ], [ 81.4920143, 16.3705902 ], [ 81.4928151, 16.3707168 ], [ 81.4957497, 16.3703239 ], [ 81.4957484, 16.3698085 ], [ 81.4978835, 16.3699319 ], [ 81.4986849, 16.3701876 ], [ 81.5029546, 16.3701774 ], [ 81.5069563, 16.3696526 ], [ 81.5106936, 16.3701589 ], [ 81.5112281, 16.3704152 ], [ 81.5120287, 16.3704133 ], [ 81.5128312, 16.3711842 ], [ 81.5136333, 16.3716975 ], [ 81.5141672, 16.3718255 ], [ 81.5141685, 16.3723407 ], [ 81.5147034, 16.3727255 ], [ 81.5152375, 16.3728535 ], [ 81.5155084, 16.3743985 ], [ 81.5160421, 16.3743972 ], [ 81.516446, 16.3759421 ], [ 81.5172487, 16.376713 ], [ 81.517384, 16.3772279 ], [ 81.5179187, 16.3776127 ], [ 81.5184528, 16.3777406 ], [ 81.5185872, 16.3782555 ], [ 81.5188546, 16.3785125 ], [ 81.5192581, 16.379542 ], [ 81.5200587, 16.3795401 ], [ 81.5203284, 16.38057 ], [ 81.5213983, 16.3814685 ], [ 81.5219321, 16.3814671 ], [ 81.5221995, 16.3817242 ], [ 81.523535, 16.3821077 ] ] ], [ [ [ 81.0554149, 15.8952811 ], [ 81.0546158, 15.8942507 ], [ 81.0546156, 15.89322 ], [ 81.054083, 15.892705 ], [ 81.0536838, 15.8916744 ], [ 81.0531512, 15.8915453 ], [ 81.0527513, 15.8911594 ], [ 81.0522187, 15.8903865 ], [ 81.052086, 15.8898711 ], [ 81.0515534, 15.8898713 ], [ 81.0514198, 15.8893561 ], [ 81.0508872, 15.8885833 ], [ 81.0504882, 15.8881964 ], [ 81.0499556, 15.8880681 ], [ 81.0499554, 15.8872953 ], [ 81.049423, 15.8872953 ], [ 81.0492894, 15.8867801 ], [ 81.0484905, 15.8860072 ], [ 81.0478252, 15.8851051 ], [ 81.047159, 15.8847192 ], [ 81.0459611, 15.8830443 ], [ 81.0454287, 15.8829161 ], [ 81.0452949, 15.8824007 ], [ 81.0450286, 15.8821431 ], [ 81.0448959, 15.8816279 ], [ 81.0443635, 15.8814986 ], [ 81.043431, 15.8805975 ], [ 81.0432983, 15.8800823 ], [ 81.0427659, 15.8799532 ], [ 81.041967, 15.8789226 ], [ 81.0414344, 15.8787944 ], [ 81.0414344, 15.878279 ], [ 81.0409019, 15.8782792 ], [ 81.0407683, 15.8777638 ], [ 81.0402357, 15.8772486 ], [ 81.040103, 15.8767334 ], [ 81.0393043, 15.8767336 ], [ 81.0391707, 15.8762182 ], [ 81.0386381, 15.875703 ], [ 81.0385054, 15.8751877 ], [ 81.037973, 15.8750586 ], [ 81.0375731, 15.8746725 ], [ 81.0369078, 15.8735128 ], [ 81.0363754, 15.8733845 ], [ 81.0362418, 15.8728693 ], [ 81.0361091, 15.87274 ], [ 81.0355767, 15.8726117 ], [ 81.0354429, 15.8720965 ], [ 81.0353104, 15.8719672 ], [ 81.0347778, 15.8718388 ], [ 81.0346442, 15.8713236 ], [ 81.0337128, 15.8704215 ], [ 81.0331804, 15.8702932 ], [ 81.0330467, 15.869778 ], [ 81.0323815, 15.8688757 ], [ 81.0314493, 15.8682322 ], [ 81.0309167, 15.8674593 ], [ 81.030784, 15.8669441 ], [ 81.0299853, 15.8669441 ], [ 81.0298517, 15.8664289 ], [ 81.0291866, 15.8655266 ], [ 81.0286542, 15.8653985 ], [ 81.0285206, 15.8648831 ], [ 81.0271894, 15.863595 ], [ 81.0266568, 15.862822 ], [ 81.0265242, 15.8623068 ], [ 81.0259917, 15.8621775 ], [ 81.0253257, 15.861534 ], [ 81.0249267, 15.8605034 ], [ 81.0243943, 15.8603741 ], [ 81.0239946, 15.8599882 ], [ 81.0235956, 15.8589576 ], [ 81.0230632, 15.8589577 ], [ 81.0226634, 15.8579271 ], [ 81.0213323, 15.8566389 ], [ 81.021066, 15.8561237 ], [ 81.0200012, 15.8550933 ], [ 81.0196024, 15.8540626 ], [ 81.01907, 15.8539334 ], [ 81.0186701, 15.8532896 ], [ 81.0185374, 15.852259 ], [ 81.018005, 15.8521299 ], [ 81.0176052, 15.8514862 ], [ 81.0174726, 15.8507132 ], [ 81.0169402, 15.8507134 ], [ 81.0165404, 15.8491674 ], [ 81.0157417, 15.8486521 ], [ 81.0153429, 15.8473639 ], [ 81.0148105, 15.8473639 ], [ 81.0148105, 15.8463333 ], [ 81.0142781, 15.8463333 ], [ 81.0145444, 15.8468487 ], [ 81.014012, 15.8468487 ], [ 81.0144108, 15.8473639 ], [ 81.0145444, 15.8481369 ], [ 81.0150768, 15.8481369 ], [ 81.0153431, 15.8491675 ], [ 81.0148107, 15.8491675 ], [ 81.0146771, 15.8486521 ], [ 81.014411, 15.8483945 ], [ 81.0141447, 15.8476217 ], [ 81.0138785, 15.8473639 ], [ 81.0133459, 15.8458181 ], [ 81.012681, 15.8453029 ], [ 81.0125474, 15.8458181 ], [ 81.0124149, 15.8459466 ], [ 81.0121486, 15.8459466 ], [ 81.0120152, 15.8458181 ], [ 81.0116162, 15.8442723 ], [ 81.0102855, 15.844143 ], [ 81.0101518, 15.8440146 ], [ 81.009753, 15.8424688 ], [ 81.0092206, 15.8423395 ], [ 81.0088209, 15.8419534 ], [ 81.0080224, 15.8406652 ], [ 81.0072237, 15.8375733 ], [ 81.0069575, 15.8370581 ], [ 81.0069575, 15.8368005 ], [ 81.0070912, 15.8365427 ], [ 81.0065588, 15.8365427 ], [ 81.0064253, 15.8370581 ], [ 81.0062926, 15.8375735 ], [ 81.0068249, 15.8375733 ], [ 81.0066914, 15.8378311 ], [ 81.0065588, 15.8391194 ], [ 81.0070912, 15.8391194 ], [ 81.0073575, 15.840923 ], [ 81.0078897, 15.840923 ], [ 81.0077982, 15.8416074 ], [ 81.0076236, 15.8415665 ], [ 81.0070912, 15.8410513 ], [ 81.0063834, 15.8410919 ], [ 81.0060265, 15.8407937 ], [ 81.0054943, 15.8406654 ], [ 81.0054943, 15.8411806 ], [ 81.0062012, 15.8412683 ], [ 81.0064253, 15.8419536 ], [ 81.0068251, 15.8424688 ], [ 81.0057604, 15.8424688 ], [ 81.0057604, 15.8427266 ], [ 81.0068252, 15.8436279 ], [ 81.0070914, 15.8436279 ], [ 81.0076236, 15.8432418 ], [ 81.0077563, 15.843757 ], [ 81.0088211, 15.8447877 ], [ 81.0092208, 15.8460759 ], [ 81.0097532, 15.8460759 ], [ 81.010152, 15.8465913 ], [ 81.010152, 15.8471065 ], [ 81.0109506, 15.8478795 ], [ 81.0116166, 15.8494253 ], [ 81.012149, 15.8494253 ], [ 81.0126814, 15.8509712 ], [ 81.0134799, 15.8509712 ], [ 81.0140124, 15.852517 ], [ 81.0145448, 15.852517 ], [ 81.0145448, 15.8530324 ], [ 81.0150772, 15.8530324 ], [ 81.0153435, 15.854063 ], [ 81.016142, 15.8543204 ], [ 81.0162747, 15.8548358 ], [ 81.0173395, 15.8558665 ], [ 81.0177392, 15.8568969 ], [ 81.0182717, 15.857283 ], [ 81.0188041, 15.8574121 ], [ 81.019203, 15.8579275 ], [ 81.0193365, 15.8584427 ], [ 81.0204015, 15.8593441 ], [ 81.0209337, 15.8594731 ], [ 81.0209339, 15.8599885 ], [ 81.0214663, 15.8599885 ], [ 81.0214663, 15.8605038 ], [ 81.0222648, 15.8607614 ], [ 81.022265, 15.8612766 ], [ 81.0227973, 15.8612766 ], [ 81.0231962, 15.8617918 ], [ 81.0233299, 15.8623072 ], [ 81.0241284, 15.8625648 ], [ 81.0241286, 15.86308 ], [ 81.024661, 15.86308 ], [ 81.0249273, 15.8638528 ], [ 81.0257258, 15.8641104 ], [ 81.0262584, 15.8653987 ], [ 81.0275894, 15.8656563 ], [ 81.0278558, 15.8666867 ], [ 81.0283883, 15.866815 ], [ 81.0286544, 15.8670726 ], [ 81.0291868, 15.8672019 ], [ 81.0293195, 15.8677171 ], [ 81.0298521, 15.8682325 ], [ 81.0299857, 15.8687478 ], [ 81.0307842, 15.8687476 ], [ 81.0313168, 15.8700358 ], [ 81.0323818, 15.8702934 ], [ 81.0327806, 15.8710662 ], [ 81.0326481, 15.8715816 ], [ 81.0334468, 15.8715814 ], [ 81.0334468, 15.8720968 ], [ 81.0339793, 15.872225 ], [ 81.035843, 15.8740282 ], [ 81.0363756, 15.8741575 ], [ 81.0366419, 15.8749305 ], [ 81.0374406, 15.8751879 ], [ 81.0377069, 15.8759609 ], [ 81.0385056, 15.8766045 ], [ 81.039038, 15.8767336 ], [ 81.039437, 15.8772488 ], [ 81.0395708, 15.8777642 ], [ 81.0401032, 15.877764 ], [ 81.0398371, 15.8782794 ], [ 81.0403695, 15.8782792 ], [ 81.0407685, 15.8787944 ], [ 81.0409021, 15.8795674 ], [ 81.0414346, 15.8795674 ], [ 81.0414347, 15.8800826 ], [ 81.0424996, 15.8800825 ], [ 81.0427661, 15.8816283 ], [ 81.0432987, 15.8816283 ], [ 81.0432987, 15.8821435 ], [ 81.0443635, 15.8818857 ], [ 81.0440976, 15.8829163 ], [ 81.0454287, 15.8831737 ], [ 81.0451626, 15.8839468 ], [ 81.0459613, 15.8842042 ], [ 81.0456956, 15.8857502 ], [ 81.0470267, 15.8860076 ], [ 81.0470269, 15.8865228 ], [ 81.0475593, 15.8865228 ], [ 81.0479583, 15.887038 ], [ 81.0483584, 15.8880685 ], [ 81.0491571, 15.8883259 ], [ 81.0492898, 15.8888413 ], [ 81.0498224, 15.8893565 ], [ 81.0499562, 15.8898717 ], [ 81.0504886, 15.8898715 ], [ 81.0508878, 15.8909021 ], [ 81.0516867, 15.891675 ], [ 81.0518203, 15.8924478 ], [ 81.0526192, 15.8930913 ], [ 81.0531518, 15.8932204 ], [ 81.0534183, 15.894251 ], [ 81.0539507, 15.8942508 ], [ 81.054616, 15.8950237 ], [ 81.0551488, 15.8957965 ], [ 81.0552824, 15.8963117 ], [ 81.055815, 15.8963117 ], [ 81.0567468, 15.8978573 ], [ 81.0572794, 15.8983726 ], [ 81.0574132, 15.8988878 ], [ 81.0584784, 15.8997887 ], [ 81.0589193, 15.9000057 ], [ 81.059011, 15.9001756 ], [ 81.0587447, 15.9001756 ], [ 81.0587447, 15.9004334 ], [ 81.0595436, 15.9009484 ], [ 81.0594098, 15.9001754 ], [ 81.0588772, 15.8996604 ], [ 81.0582117, 15.8981146 ], [ 81.057413, 15.8981148 ], [ 81.0572792, 15.8975995 ], [ 81.0566137, 15.8964398 ], [ 81.0560811, 15.8963115 ], [ 81.0559475, 15.8957963 ], [ 81.0554149, 15.8952811 ] ] ], [ [ [ 81.0001709, 15.8628237 ], [ 80.9996385, 15.8628237 ], [ 80.9996385, 15.8633391 ], [ 80.9993724, 15.8633391 ], [ 80.9993724, 15.8628237 ], [ 80.9977752, 15.8629521 ], [ 80.9976416, 15.8630813 ], [ 80.9975089, 15.8638544 ], [ 80.9961779, 15.8639827 ], [ 80.9960445, 15.864112 ], [ 80.9960443, 15.8646274 ], [ 80.9961779, 15.864885 ], [ 80.9953794, 15.864885 ], [ 80.9953794, 15.8651426 ], [ 80.9956455, 15.8652709 ], [ 80.9972428, 15.8652709 ], [ 80.9975089, 15.8655287 ], [ 80.9985737, 15.8659156 ], [ 80.9987064, 15.866431 ], [ 80.9992388, 15.8669462 ], [ 80.9992388, 15.8674616 ], [ 80.9990146, 15.8676306 ], [ 80.9985737, 15.8675899 ], [ 80.9977752, 15.8670745 ], [ 80.9967103, 15.8661732 ], [ 80.9972428, 15.8684922 ], [ 80.9977752, 15.8688782 ], [ 80.9996385, 15.8696512 ], [ 80.9998132, 15.8698681 ], [ 80.9996385, 15.8708111 ], [ 80.9999046, 15.8708111 ], [ 81.0001709, 15.8697804 ], [ 80.9999046, 15.8695228 ], [ 81.000437, 15.8695228 ], [ 81.0001709, 15.8687498 ], [ 80.9996385, 15.8686206 ], [ 80.9991966, 15.8678069 ], [ 80.9999046, 15.8674616 ], [ 81.0003036, 15.8679768 ], [ 81.0005697, 15.8687498 ], [ 81.0011021, 15.869265 ], [ 81.0012358, 15.8697804 ], [ 81.0016767, 15.8698681 ], [ 81.0016346, 15.8710687 ], [ 81.0015019, 15.8713263 ], [ 81.0020343, 15.8714548 ], [ 81.0033654, 15.8722276 ], [ 81.0044302, 15.8722276 ], [ 81.0062938, 15.8730006 ], [ 81.0068262, 15.8735158 ], [ 81.0076247, 15.8737734 ], [ 81.007891, 15.8740311 ], [ 81.0084234, 15.8741603 ], [ 81.0084234, 15.8746757 ], [ 81.0089558, 15.8746757 ], [ 81.0089558, 15.8751909 ], [ 81.0113518, 15.8755769 ], [ 81.0116181, 15.8758345 ], [ 81.0126829, 15.8760921 ], [ 81.0150789, 15.8760919 ], [ 81.0158776, 15.8766073 ], [ 81.0182734, 15.8764786 ], [ 81.0185395, 15.8751904 ], [ 81.0182734, 15.8751904 ], [ 81.0182734, 15.8749328 ], [ 81.0180071, 15.8749328 ], [ 81.0178734, 15.8744176 ], [ 81.0174746, 15.8739022 ], [ 81.0180071, 15.8739022 ], [ 81.0181395, 15.8731291 ], [ 81.0174745, 15.8724847 ], [ 81.016942, 15.8723563 ], [ 81.0173408, 15.8718409 ], [ 81.0173408, 15.8715833 ], [ 81.0166757, 15.8711964 ], [ 81.0153446, 15.8710681 ], [ 81.0157436, 15.8715835 ], [ 81.0157436, 15.8718411 ], [ 81.0156109, 15.8719694 ], [ 81.0148124, 15.8719694 ], [ 81.0145461, 15.8717118 ], [ 81.0140137, 15.871712 ], [ 81.0128152, 15.8705531 ], [ 81.0129487, 15.8697801 ], [ 81.013215, 15.8699084 ], [ 81.0140135, 15.8697801 ], [ 81.0140135, 15.8692647 ], [ 81.0142798, 15.8691354 ], [ 81.0153446, 15.8692647 ], [ 81.0153444, 15.868234 ], [ 81.014812, 15.868234 ], [ 81.0146784, 15.8677186 ], [ 81.0144123, 15.867461 ], [ 81.0142796, 15.8669458 ], [ 81.0134809, 15.8668165 ], [ 81.0125487, 15.8659152 ], [ 81.0124161, 15.8654 ], [ 81.0116175, 15.8654 ], [ 81.0116175, 15.8648846 ], [ 81.0110851, 15.8648848 ], [ 81.0106852, 15.8638542 ], [ 81.0105525, 15.8637249 ], [ 81.0102864, 15.8637249 ], [ 81.0089555, 15.8641118 ], [ 81.0089555, 15.8635966 ], [ 81.0094879, 15.8638542 ], [ 81.0093543, 15.8633389 ], [ 81.0092216, 15.8632097 ], [ 81.0068258, 15.8632097 ], [ 81.0066922, 15.8633389 ], [ 81.0064682, 15.8653115 ], [ 81.00616, 15.8651426 ], [ 81.0060273, 15.8646272 ], [ 81.0054949, 15.8644979 ], [ 81.0049625, 15.864112 ], [ 81.0049625, 15.8646274 ], [ 81.0041639, 15.8647557 ], [ 81.0028328, 15.8646274 ], [ 81.0025667, 15.865658 ], [ 81.0019007, 15.8651426 ], [ 81.0016346, 15.8646274 ], [ 81.0016346, 15.8638544 ], [ 81.0015019, 15.8637251 ], [ 81.0007034, 15.8637251 ], [ 81.0003036, 15.8633391 ], [ 81.0001709, 15.8628237 ] ] ], [ [ [ 82.2587879, 16.6237895 ], [ 82.2597675, 16.6240817 ], [ 82.2600362, 16.6243376 ], [ 82.2611066, 16.6245888 ], [ 82.2616443, 16.6251006 ], [ 82.2621795, 16.6252267 ], [ 82.2621829, 16.6257419 ], [ 82.2624509, 16.6258685 ], [ 82.2631602, 16.6258235 ], [ 82.2632717, 16.6288262 ], [ 82.263806, 16.628823 ], [ 82.2634099, 16.6295981 ], [ 82.2634133, 16.6301133 ], [ 82.2636838, 16.6306268 ], [ 82.263576, 16.6344913 ], [ 82.2657149, 16.6347358 ], [ 82.2662577, 16.6360203 ], [ 82.2667922, 16.6360171 ], [ 82.2667972, 16.6367899 ], [ 82.2684037, 16.6372951 ], [ 82.2684071, 16.6378103 ], [ 82.2689414, 16.6378071 ], [ 82.2692205, 16.6396084 ], [ 82.2700221, 16.6396035 ], [ 82.2700253, 16.6401187 ], [ 82.2708261, 16.6399846 ], [ 82.271357, 16.6394661 ], [ 82.2724231, 16.6390736 ], [ 82.2721534, 16.6386884 ], [ 82.2716182, 16.6385635 ], [ 82.2716131, 16.6377906 ], [ 82.2710788, 16.637794 ], [ 82.271474, 16.6370188 ], [ 82.2717327, 16.6357292 ], [ 82.2715987, 16.6356009 ], [ 82.2713315, 16.6356026 ], [ 82.2708005, 16.636121 ], [ 82.270267, 16.6362535 ], [ 82.2702687, 16.6365111 ], [ 82.2708032, 16.6365077 ], [ 82.2708066, 16.6370229 ], [ 82.2700033, 16.6367702 ], [ 82.2699982, 16.6359976 ], [ 82.2694639, 16.6360008 ], [ 82.2695953, 16.6357424 ], [ 82.2697193, 16.634196 ], [ 82.2691848, 16.6341995 ], [ 82.2693146, 16.6336835 ], [ 82.26958, 16.6334242 ], [ 82.2695749, 16.6326515 ], [ 82.2690355, 16.6318821 ], [ 82.2690321, 16.6313669 ], [ 82.2682256, 16.6305992 ], [ 82.2682171, 16.6293112 ], [ 82.2680831, 16.6291828 ], [ 82.267548, 16.6290577 ], [ 82.2675412, 16.6280275 ], [ 82.2678075, 16.6278965 ], [ 82.2683428, 16.6280226 ], [ 82.2682052, 16.6275083 ], [ 82.2678017, 16.6269955 ], [ 82.2683343, 16.6267347 ], [ 82.2683377, 16.6272499 ], [ 82.2686047, 16.6272482 ], [ 82.2686013, 16.626733 ], [ 82.2696684, 16.626469 ], [ 82.2691239, 16.6249267 ], [ 82.2699253, 16.6249218 ], [ 82.2699304, 16.6256946 ], [ 82.2701976, 16.6256929 ], [ 82.2701942, 16.6251779 ], [ 82.2707276, 16.6250452 ], [ 82.2717971, 16.6251681 ], [ 82.2725919, 16.6241327 ], [ 82.2707234, 16.6244019 ], [ 82.2709856, 16.6236275 ], [ 82.2691137, 16.6233813 ], [ 82.2689746, 16.6226094 ], [ 82.2685726, 16.6223543 ], [ 82.2681799, 16.6236446 ], [ 82.2661825, 16.624558 ], [ 82.2648486, 16.6248235 ], [ 82.2640504, 16.6253437 ], [ 82.2636072, 16.6253869 ], [ 82.2635137, 16.6249609 ], [ 82.2659138, 16.6243019 ], [ 82.2661793, 16.6240428 ], [ 82.267247, 16.6239078 ], [ 82.2676439, 16.6233904 ], [ 82.2679026, 16.6221008 ], [ 82.2677686, 16.6219725 ], [ 82.2669673, 16.6219772 ], [ 82.2660275, 16.6213395 ], [ 82.2661581, 16.6208235 ], [ 82.264824, 16.6210893 ], [ 82.2653651, 16.6221163 ], [ 82.2645637, 16.6221212 ], [ 82.264567, 16.6226362 ], [ 82.2642989, 16.6225087 ], [ 82.2637646, 16.6225119 ], [ 82.2634983, 16.6226429 ], [ 82.2634949, 16.6221276 ], [ 82.2626936, 16.6221326 ], [ 82.2630905, 16.6216149 ], [ 82.263082, 16.620327 ], [ 82.2629482, 16.6201987 ], [ 82.261346, 16.6203376 ], [ 82.2612154, 16.6208536 ], [ 82.2608176, 16.621242 ], [ 82.2597499, 16.6213777 ], [ 82.2596125, 16.6208634 ], [ 82.2594785, 16.6207349 ], [ 82.2589442, 16.6207381 ], [ 82.2586787, 16.6209974 ], [ 82.2581436, 16.6208723 ], [ 82.2580162, 16.6219033 ], [ 82.2587879, 16.6237895 ] ] ], [ [ [ 80.8290229, 15.7424119 ], [ 80.8298183, 15.7303804 ], [ 80.8306138, 15.7193327 ], [ 80.829932, 15.7156135 ], [ 80.8283411, 15.7130976 ], [ 80.8262956, 15.7120037 ], [ 80.8232274, 15.7118943 ], [ 80.8208411, 15.7136445 ], [ 80.8192502, 15.7168168 ], [ 80.8172047, 15.7202078 ], [ 80.813682, 15.7245831 ], [ 80.8126593, 15.7287397 ], [ 80.8108411, 15.7309273 ], [ 80.8084547, 15.7335524 ], [ 80.8051593, 15.7367243 ], [ 80.8027729, 15.7378181 ], [ 80.7991365, 15.740115 ], [ 80.797432, 15.7424119 ], [ 80.7951593, 15.7471149 ], [ 80.7935684, 15.7523646 ], [ 80.7928866, 15.7558644 ], [ 80.7927729, 15.7585985 ], [ 80.793682, 15.7589266 ], [ 80.7945911, 15.7577236 ], [ 80.7960684, 15.754552 ], [ 80.7981138, 15.750396 ], [ 80.8010684, 15.7460212 ], [ 80.804932, 15.7416462 ], [ 80.8078865, 15.7400056 ], [ 80.8123183, 15.7391306 ], [ 80.8130002, 15.7391306 ], [ 80.8116365, 15.7375994 ], [ 80.8103865, 15.7357399 ], [ 80.8110683, 15.7330055 ], [ 80.8110683, 15.7349743 ], [ 80.8123183, 15.7355212 ], [ 80.8131138, 15.7358493 ], [ 80.8130002, 15.7337711 ], [ 80.813682, 15.7379275 ], [ 80.8142502, 15.7403337 ], [ 80.817432, 15.7420837 ], [ 80.8184547, 15.7423025 ], [ 80.8223183, 15.7423025 ], [ 80.8247047, 15.7429587 ], [ 80.8282274, 15.7425212 ], [ 80.8290229, 15.7424119 ] ] ], [ [ [ 80.859475, 15.709354496520055 ], [ 80.8540831, 15.7086957 ], [ 80.8421513, 15.7078752 ], [ 80.8340547, 15.708012 ], [ 80.8309297, 15.7099263 ], [ 80.8309297, 15.7144387 ], [ 80.8316816, 15.714842 ], [ 80.832318, 15.7145795 ], [ 80.8325907, 15.7130043 ], [ 80.8336816, 15.711079 ], [ 80.835318, 15.7104664 ], [ 80.837318, 15.7109915 ], [ 80.8384998, 15.7128293 ], [ 80.8384089, 15.7158047 ], [ 80.837318, 15.7172048 ], [ 80.8374089, 15.7214928 ], [ 80.8377725, 15.7263932 ], [ 80.8357725, 15.7333935 ], [ 80.8347725, 15.7391686 ], [ 80.8358634, 15.7463435 ], [ 80.8370452, 15.7508059 ], [ 80.8390452, 15.755793 ], [ 80.8411361, 15.7633173 ], [ 80.8424089, 15.7688291 ], [ 80.8435907, 15.7717162 ], [ 80.8475907, 15.77889 ], [ 80.851227, 15.7851887 ], [ 80.8550743, 15.7949408 ], [ 80.8568779, 15.8032264 ], [ 80.8576343, 15.8046819 ], [ 80.8590307, 15.813191 ], [ 80.859475, 15.814395747218763 ], [ 80.8596707, 15.8149264 ], [ 80.8604852, 15.8157101 ], [ 80.8613416, 15.815892 ], [ 80.8628188, 15.81458 ], [ 80.8637279, 15.81294 ], [ 80.8642961, 15.8110813 ], [ 80.8642961, 15.8068171 ], [ 80.8661143, 15.8002566 ], [ 80.8706597, 15.788994 ], [ 80.8730461, 15.7833078 ], [ 80.8767961, 15.7802459 ], [ 80.8802052, 15.7766373 ], [ 80.8842961, 15.7714975 ], [ 80.8877052, 15.7659201 ], [ 80.8913415, 15.759249 ], [ 80.8940333, 15.7537465 ], [ 80.8981171, 15.7470818 ], [ 80.9023785, 15.7431512 ], [ 80.9068174, 15.7409296 ], [ 80.9153401, 15.736828 ], [ 80.918181, 15.7323845 ], [ 80.9199566, 15.7293082 ], [ 80.9222648, 15.7265736 ], [ 80.9231526, 15.7238391 ], [ 80.9252833, 15.7257191 ], [ 80.9272364, 15.7246936 ], [ 80.9275915, 15.7209335 ], [ 80.9295446, 15.720079 ], [ 80.9300773, 15.7187116 ], [ 80.9284793, 15.7185407 ], [ 80.9236852, 15.720079 ], [ 80.9093032, 15.717857 ], [ 80.8956313, 15.7149514 ], [ 80.863316, 15.7098238 ], [ 80.859475, 15.709354496520055 ] ] ], [ [ [ 80.8040993, 15.7850081 ], [ 80.8026447, 15.7875275 ], [ 80.801772, 15.7902149 ], [ 80.8000265, 15.7937979 ], [ 80.798572, 15.7976049 ], [ 80.7968847, 15.8032592 ], [ 80.7960702, 15.8057224 ], [ 80.7950811, 15.8095292 ], [ 80.7943247, 15.8122162 ], [ 80.7942665, 15.815743 ], [ 80.7952556, 15.8165827 ], [ 80.7965938, 15.8160788 ], [ 80.7976993, 15.8151832 ], [ 80.7990375, 15.815687 ], [ 80.8006665, 15.815687 ], [ 80.801132, 15.8151272 ], [ 80.8013065, 15.8122162 ], [ 80.8018302, 15.8090813 ], [ 80.8028193, 15.8068981 ], [ 80.803052, 15.8054985 ], [ 80.8032265, 15.8020276 ], [ 80.8034011, 15.7983887 ], [ 80.803692, 15.7962053 ], [ 80.8045065, 15.7941339 ], [ 80.8052047, 15.7926223 ], [ 80.8059029, 15.7908867 ], [ 80.8063684, 15.7892631 ], [ 80.8064265, 15.7875275 ], [ 80.8055538, 15.7860718 ], [ 80.8050302, 15.785176 ], [ 80.8040993, 15.7850081 ] ] ], [ [ [ 80.8688957468637, 15.8204125 ], [ 80.8696262, 15.8249092 ], [ 80.8706884, 15.828517 ], [ 80.8708208, 15.8303206 ], [ 80.8713531, 15.830321 ], [ 80.8720151, 15.8349593 ], [ 80.8728123, 15.8370209 ], [ 80.8730783, 15.8372787 ], [ 80.8732109, 15.8388247 ], [ 80.8737432, 15.8388251 ], [ 80.8740081, 15.8408865 ], [ 80.8745404, 15.8408867 ], [ 80.8744067, 15.8411443 ], [ 80.8746723, 15.8421751 ], [ 80.8749382, 15.8424329 ], [ 80.8752038, 15.8434637 ], [ 80.8750711, 15.8437213 ], [ 80.8756033, 15.8437215 ], [ 80.8758685, 15.8455253 ], [ 80.876667, 15.8455257 ], [ 80.8769325, 15.8465565 ], [ 80.8774648, 15.8466852 ], [ 80.8777307, 15.846943 ], [ 80.8798598, 15.8477172 ], [ 80.880392, 15.8477175 ], [ 80.8833194, 15.8487497 ], [ 80.8835853, 15.8490075 ], [ 80.8859811, 15.8488804 ], [ 80.8859807, 15.8493957 ], [ 80.8870454, 15.8496538 ], [ 80.8875785, 15.8481082 ], [ 80.8873124, 15.8481082 ], [ 80.8873126, 15.8475928 ], [ 80.8875789, 15.847593 ], [ 80.8882444, 15.8465627 ], [ 80.8882448, 15.8457897 ], [ 80.8887781, 15.8439863 ], [ 80.8893111, 15.8429561 ], [ 80.8893113, 15.8424407 ], [ 80.8901104, 15.8414106 ], [ 80.8903771, 15.84038 ], [ 80.8909097, 15.839865 ], [ 80.8914426, 15.8388347 ], [ 80.8927743, 15.8370317 ], [ 80.894106, 15.8352288 ], [ 80.8949049, 15.8344562 ], [ 80.8954377, 15.8334259 ], [ 80.8967692, 15.8321383 ], [ 80.896903, 15.8316229 ], [ 80.8977018, 15.8309787 ], [ 80.8982342, 15.8308506 ], [ 80.8987671, 15.8295626 ], [ 80.8992994, 15.8295628 ], [ 80.8999648, 15.8287901 ], [ 80.900365, 15.8277597 ], [ 80.9011637, 15.8271156 ], [ 80.9016961, 15.8269874 ], [ 80.9016963, 15.826472 ], [ 80.902495, 15.8258277 ], [ 80.9030274, 15.8255703 ], [ 80.9038263, 15.8247979 ], [ 80.9048911, 15.8244123 ], [ 80.9051576, 15.8236393 ], [ 80.9067545, 15.8233825 ], [ 80.9067549, 15.8228671 ], [ 80.908618, 15.8224809 ], [ 80.9102151, 15.8217087 ], [ 80.9139414, 15.8211948 ], [ 80.916337, 15.8204229 ], [ 80.916699534127389, 15.8202125 ], [ 80.916699534127403, 15.8202125 ], [ 80.9176679, 15.8196505 ], [ 80.9189988, 15.8188778 ], [ 80.9197976, 15.8183628 ], [ 80.9205961, 15.8182349 ], [ 80.9208624, 15.817462 ], [ 80.9213946, 15.8175906 ], [ 80.9224594, 15.8172048 ], [ 80.9224596, 15.8166896 ], [ 80.9243228, 15.8159173 ], [ 80.924323, 15.8154019 ], [ 80.92592, 15.8147578 ], [ 80.9267185, 15.8142428 ], [ 80.9275171, 15.8141147 ], [ 80.9277834, 15.8133418 ], [ 80.9285819, 15.8132129 ], [ 80.9293804, 15.8126977 ], [ 80.9301789, 15.8121827 ], [ 80.9312438, 15.8111525 ], [ 80.9323086, 15.8103798 ], [ 80.9328408, 15.8105093 ], [ 80.932841, 15.8099939 ], [ 80.9344379, 15.8094791 ], [ 80.9344381, 15.8089638 ], [ 80.9352366, 15.8088348 ], [ 80.9363012, 15.8083197 ], [ 80.9370996, 15.8081916 ], [ 80.9370997, 15.8076764 ], [ 80.9397612, 15.8067748 ], [ 80.9405598, 15.8062598 ], [ 80.9413581, 15.8061317 ], [ 80.9413583, 15.8056163 ], [ 80.9432213, 15.8052298 ], [ 80.9434874, 15.8049722 ], [ 80.944552, 15.8047149 ], [ 80.9448181, 15.8044573 ], [ 80.9466811, 15.8040718 ], [ 80.9466813, 15.8035564 ], [ 80.9477457, 15.8034275 ], [ 80.9482782, 15.8029122 ], [ 80.9496087, 15.8025265 ], [ 80.9550227, 15.7995545 ], [ 80.9578636, 15.7966022 ], [ 80.9615, 15.7912442 ], [ 80.9692273, 15.7821682 ], [ 80.9758182, 15.7768098 ], [ 80.9826363, 15.7716701 ], [ 80.9920681, 15.7651085 ], [ 80.9977499, 15.7612808 ], [ 81.0008181, 15.7577811 ], [ 81.0030908, 15.7577811 ], [ 81.0044545, 15.7599684 ], [ 81.0037727, 15.762265 ], [ 81.0057045, 15.7616089 ], [ 81.0064999, 15.7589841 ], [ 81.0051363, 15.7548282 ], [ 80.9983181, 15.7503441 ], [ 80.9755909, 15.7365631 ], [ 80.9571818, 15.7269377 ], [ 80.95275, 15.7256251 ], [ 80.9484318, 15.7231093 ], [ 80.9420682, 15.7192808 ], [ 80.9365, 15.7179681 ], [ 80.934, 15.7193902 ], [ 80.93275, 15.7237656 ], [ 80.9299091, 15.7292347 ], [ 80.9262728, 15.7340474 ], [ 80.9209319, 15.7403912 ], [ 80.9157046, 15.7447662 ], [ 80.9092273, 15.7502347 ], [ 80.9027501, 15.7536252 ], [ 80.8984319, 15.7578905 ], [ 80.897604, 15.7599949 ], [ 80.895861, 15.7645678 ], [ 80.8937083, 15.7686553 ], [ 80.8929431, 15.7699119 ], [ 80.8922773, 15.7705562 ], [ 80.8920106, 15.7715866 ], [ 80.8914782, 15.7721018 ], [ 80.8913453, 15.7726171 ], [ 80.8908131, 15.7727452 ], [ 80.8904132, 15.7733895 ], [ 80.8896144, 15.7741621 ], [ 80.8888154, 15.7757076 ], [ 80.8880168, 15.7764802 ], [ 80.8872177, 15.7777681 ], [ 80.886419, 15.7787983 ], [ 80.8858864, 15.7793133 ], [ 80.8854872, 15.7802145 ], [ 80.884955, 15.7803434 ], [ 80.8848212, 15.7808586 ], [ 80.8846887, 15.7809869 ], [ 80.8841563, 15.781116 ], [ 80.8840225, 15.7816312 ], [ 80.8834901, 15.7821462 ], [ 80.8828248, 15.7830472 ], [ 80.8822926, 15.7831763 ], [ 80.8818923, 15.7844643 ], [ 80.8808273, 15.7854944 ], [ 80.8805608, 15.7862672 ], [ 80.8798957, 15.7866528 ], [ 80.8792296, 15.7872971 ], [ 80.8789632, 15.7880699 ], [ 80.8782981, 15.7884554 ], [ 80.877632, 15.7890997 ], [ 80.8773655, 15.789615 ], [ 80.8765668, 15.7903874 ], [ 80.876434, 15.7909026 ], [ 80.8759017, 15.7909024 ], [ 80.8757675, 15.7919329 ], [ 80.8744362, 15.7932203 ], [ 80.8741697, 15.7939931 ], [ 80.8733706, 15.7950234 ], [ 80.8731042, 15.7957962 ], [ 80.8728379, 15.7960536 ], [ 80.8725714, 15.7968264 ], [ 80.8725708, 15.7975995 ], [ 80.872038, 15.7986297 ], [ 80.8720376, 15.7991451 ], [ 80.8712385, 15.8004329 ], [ 80.8712382, 15.8009482 ], [ 80.8701718, 15.8037818 ], [ 80.8693712, 15.8073885 ], [ 80.8693705, 15.8084191 ], [ 80.869104, 15.809192 ], [ 80.8685682, 15.8146025 ], [ 80.8688309, 15.8200133 ], [ 80.868895746863714, 15.8204125 ], [ 80.8688957468637, 15.8204125 ] ] ], [ [ [ 93.02172, 13.30213 ], [ 93.0216, 13.30206 ], [ 93.02143, 13.30218 ], [ 93.02138, 13.30246 ], [ 93.02149, 13.30285 ], [ 93.02143, 13.30303 ], [ 93.02125, 13.30331 ], [ 93.02101, 13.30389 ], [ 93.02052, 13.30479 ], [ 93.02014, 13.30555 ], [ 93.01984, 13.30607 ], [ 93.01996, 13.30666 ], [ 93.01991, 13.30704 ], [ 93.01956, 13.30734 ], [ 93.01923, 13.30753 ], [ 93.01868, 13.30797 ], [ 93.01841, 13.30833 ], [ 93.01815, 13.30859 ], [ 93.01804, 13.30867 ], [ 93.01784, 13.3087 ], [ 93.01767, 13.30854 ], [ 93.01753, 13.3083 ], [ 93.01739, 13.30822 ], [ 93.01715, 13.30819 ], [ 93.01684, 13.30824 ], [ 93.01661, 13.30835 ], [ 93.01637, 13.30867 ], [ 93.01629, 13.30874 ], [ 93.01604, 13.30873 ], [ 93.01578, 13.30877 ], [ 93.01552, 13.30889 ], [ 93.01534, 13.30908 ], [ 93.01529, 13.30931 ], [ 93.01537, 13.30959 ], [ 93.0154, 13.30984 ], [ 93.01556, 13.3101 ], [ 93.01562, 13.31057 ], [ 93.01565, 13.31114 ], [ 93.01563, 13.31157 ], [ 93.01559, 13.31188 ], [ 93.01557, 13.31231 ], [ 93.0163008, 13.3132146 ], [ 93.0167093, 13.3141229 ], [ 93.0162795, 13.3151215 ], [ 93.01562, 13.31572 ], [ 93.01566, 13.31702 ], [ 93.01598, 13.31859 ], [ 93.01607, 13.32006 ], [ 93.01603, 13.32241 ], [ 93.01628, 13.32398 ], [ 93.01689, 13.32682 ], [ 93.01709, 13.32788 ], [ 93.01741, 13.32859 ], [ 93.01774, 13.3291 ], [ 93.01826, 13.32914 ], [ 93.0204, 13.32905 ], [ 93.02139, 13.32924 ], [ 93.022, 13.32924 ], [ 93.02271, 13.32906 ], [ 93.02343, 13.32871 ], [ 93.02417, 13.3284 ], [ 93.02474, 13.32782 ], [ 93.02485, 13.32725 ], [ 93.02476, 13.32686 ], [ 93.0248, 13.3266 ], [ 93.025, 13.32648 ], [ 93.02505, 13.32635 ], [ 93.02496, 13.32623 ], [ 93.02476, 13.32616 ], [ 93.0238, 13.32627 ], [ 93.02319, 13.32615 ], [ 93.02276, 13.32596 ], [ 93.0225, 13.32568 ], [ 93.02229, 13.32449 ], [ 93.02207, 13.32415 ], [ 93.02192, 13.32398 ], [ 93.02178, 13.32351 ], [ 93.02168, 13.32292 ], [ 93.02151, 13.32218 ], [ 93.02133, 13.32094 ], [ 93.02117, 13.32036 ], [ 93.02113, 13.31996 ], [ 93.02098, 13.31959 ], [ 93.02088, 13.3192 ], [ 93.02109, 13.31892 ], [ 93.02125, 13.31865 ], [ 93.02132, 13.31827 ], [ 93.02109, 13.31788 ], [ 93.02061, 13.31755 ], [ 93.02015, 13.3171 ], [ 93.01974, 13.31664 ], [ 93.01973, 13.31617 ], [ 93.01984, 13.31582 ], [ 93.02019, 13.31556 ], [ 93.0204, 13.31528 ], [ 93.02068, 13.31506 ], [ 93.02159, 13.31411 ], [ 93.02157, 13.31362 ], [ 93.02142, 13.31316 ], [ 93.02095, 13.31265 ], [ 93.0208, 13.31237 ], [ 93.02094, 13.31222 ], [ 93.0213, 13.31222 ], [ 93.02156, 13.31233 ], [ 93.02186, 13.31222 ], [ 93.02204, 13.31193 ], [ 93.02196, 13.31182 ], [ 93.02186, 13.31151 ], [ 93.02227, 13.31097 ], [ 93.02245, 13.31053 ], [ 93.02252, 13.30989 ], [ 93.0226, 13.3096 ], [ 93.02289, 13.30932 ], [ 93.02308, 13.30901 ], [ 93.02322, 13.30839 ], [ 93.02331, 13.30749 ], [ 93.02328, 13.30634 ], [ 93.02308, 13.30547 ], [ 93.02272, 13.30451 ], [ 93.02241, 13.30383 ], [ 93.02176, 13.30254 ], [ 93.02172, 13.30213 ] ] ], [ [ [ 93.04913, 13.37398 ], [ 93.05116, 13.37569 ], [ 93.05205, 13.37758 ], [ 93.05284, 13.37981 ], [ 93.0539, 13.38178 ], [ 93.05496, 13.38238 ], [ 93.05584, 13.38169 ], [ 93.05593, 13.38058 ], [ 93.05698, 13.37869 ], [ 93.05813, 13.37569 ], [ 93.05954, 13.37294 ], [ 93.05985, 13.36978 ], [ 93.06046, 13.36824 ], [ 93.06134, 13.36687 ], [ 93.06161, 13.36378 ], [ 93.06169, 13.36155 ], [ 93.06275, 13.36009 ], [ 93.06398, 13.3594 ], [ 93.06531, 13.35828 ], [ 93.06733, 13.35451 ], [ 93.06953, 13.35056 ], [ 93.07076, 13.34859 ], [ 93.07094, 13.34721 ], [ 93.07156, 13.34653 ], [ 93.07235, 13.34653 ], [ 93.07261, 13.34713 ], [ 93.07332, 13.34781 ], [ 93.07394, 13.34721 ], [ 93.07408, 13.34581 ], [ 93.07479, 13.3453 ], [ 93.07558, 13.34607 ], [ 93.0769, 13.34778 ], [ 93.07778, 13.3477 ], [ 93.07787, 13.34693 ], [ 93.07778, 13.34624 ], [ 93.07708, 13.3447 ], [ 93.07716, 13.34375 ], [ 93.07752, 13.34229 ], [ 93.07857, 13.34041 ], [ 93.07981, 13.34006 ], [ 93.08219, 13.34006 ], [ 93.08333, 13.34066 ], [ 93.08483, 13.34255 ], [ 93.08589, 13.34306 ], [ 93.0873, 13.34254 ], [ 93.08827, 13.34117 ], [ 93.08915, 13.33928 ], [ 93.08977, 13.33731 ], [ 93.08985, 13.33585 ], [ 93.08888, 13.33516 ], [ 93.08597, 13.33319 ], [ 93.08297, 13.33182 ], [ 93.08051, 13.33165 ], [ 93.07883, 13.33097 ], [ 93.07593, 13.32926 ], [ 93.0739, 13.32652 ], [ 93.0717, 13.32317 ], [ 93.07179, 13.32137 ], [ 93.07231, 13.3188 ], [ 93.0724, 13.31665 ], [ 93.07143, 13.31425 ], [ 93.07046, 13.31297 ], [ 93.07046, 13.31108 ], [ 93.07037, 13.30885 ], [ 93.07036, 13.30705 ], [ 93.06975, 13.30662 ], [ 93.06816, 13.30662 ], [ 93.06648, 13.30585 ], [ 93.06622, 13.30439 ], [ 93.06578, 13.30353 ], [ 93.0649, 13.30413 ], [ 93.0643066, 13.3058319 ], [ 93.0629485, 13.3068076 ], [ 93.0640936, 13.3071067 ], [ 93.0643151, 13.3083655 ], [ 93.0635929, 13.3110859 ], [ 93.06191, 13.31314 ], [ 93.0619651, 13.3152129 ], [ 93.0613848, 13.3172102 ], [ 93.0625189, 13.3182391 ], [ 93.0646915, 13.3175343 ], [ 93.0659695, 13.3184049 ], [ 93.0657991, 13.3197314 ], [ 93.0639247, 13.3206434 ], [ 93.0630301, 13.3225088 ], [ 93.0629372, 13.3241147 ], [ 93.06157, 13.32735 ], [ 93.06086, 13.32941 ], [ 93.05884, 13.33027 ], [ 93.05619, 13.3301 ], [ 93.05434, 13.32976 ], [ 93.05205, 13.32805 ], [ 93.04975, 13.32436 ], [ 93.04825, 13.32256 ], [ 93.04658, 13.3217 ], [ 93.04393, 13.32102 ], [ 93.04146, 13.32145 ], [ 93.04005, 13.32239 ], [ 93.03979, 13.32445 ], [ 93.04023, 13.32762 ], [ 93.04129, 13.33088 ], [ 93.04138, 13.33466 ], [ 93.04156, 13.33715 ], [ 93.042, 13.33904 ], [ 93.04359, 13.34075 ], [ 93.04474, 13.34221 ], [ 93.0458, 13.34461 ], [ 93.04615, 13.34718 ], [ 93.0458, 13.34967 ], [ 93.04536, 13.35156 ], [ 93.04395, 13.35362 ], [ 93.04237, 13.35705 ], [ 93.04034, 13.35997 ], [ 93.03981, 13.36168 ], [ 93.04026, 13.36383 ], [ 93.04167, 13.36597 ], [ 93.04176, 13.36743 ], [ 93.0415347, 13.3683359 ], [ 93.0409667, 13.3689388 ], [ 93.0397273, 13.369391 ], [ 93.0386429, 13.3696422 ], [ 93.03792, 13.3700441 ], [ 93.0373003, 13.3706972 ], [ 93.0371454, 13.371903 ], [ 93.0374552, 13.3732092 ], [ 93.0377134, 13.3738121 ], [ 93.0387462, 13.3738121 ], [ 93.0390044, 13.3735106 ], [ 93.0414831, 13.3734102 ], [ 93.043497, 13.3739628 ], [ 93.0448913, 13.3745154 ], [ 93.0456659, 13.3748671 ], [ 93.0466471, 13.3737116 ], [ 93.0476282, 13.3735609 ], [ 93.0485061, 13.3728575 ], [ 93.04913, 13.37398 ] ] ], [ [ [ 92.8124, 13.399889811320755 ], [ 92.81236, 13.39988 ], [ 92.81159, 13.39975 ], [ 92.81076, 13.3997 ], [ 92.81005, 13.39975 ], [ 92.80956, 13.39993 ], [ 92.80927, 13.40012 ], [ 92.80868, 13.40056 ], [ 92.80809, 13.40116 ], [ 92.80735, 13.40176 ], [ 92.80678, 13.40236 ], [ 92.80647, 13.40289 ], [ 92.80624, 13.40346 ], [ 92.80604, 13.40439 ], [ 92.80588, 13.40482 ], [ 92.806, 13.40537 ], [ 92.80618, 13.40559 ], [ 92.80643, 13.4058 ], [ 92.80687, 13.40604 ], [ 92.80755, 13.40633 ], [ 92.80868, 13.40697 ], [ 92.80917, 13.40737 ], [ 92.80945, 13.40764 ], [ 92.80961, 13.40798 ], [ 92.80985, 13.40863 ], [ 92.81007, 13.40893 ], [ 92.81066, 13.4094 ], [ 92.81076, 13.40964 ], [ 92.81079, 13.41028 ], [ 92.81098, 13.41173 ], [ 92.8112, 13.41274 ], [ 92.81155, 13.41348 ], [ 92.81198, 13.41403 ], [ 92.81208, 13.41434 ], [ 92.81212, 13.4147 ], [ 92.81204, 13.41492 ], [ 92.81187, 13.4152 ], [ 92.81162, 13.41547 ], [ 92.81127, 13.41616 ], [ 92.81094, 13.41688 ], [ 92.8105, 13.41756 ], [ 92.81022, 13.41804 ], [ 92.81007, 13.4184 ], [ 92.8101, 13.41893 ], [ 92.81024, 13.41944 ], [ 92.81032, 13.41987 ], [ 92.8106, 13.4201 ], [ 92.81091, 13.42019 ], [ 92.81102, 13.42029 ], [ 92.81098, 13.4205 ], [ 92.81071, 13.42074 ], [ 92.8108, 13.42106 ], [ 92.81099, 13.42122 ], [ 92.81176, 13.42145 ], [ 92.81238, 13.4215 ], [ 92.8124, 13.4215 ], [ 92.8126, 13.4215 ], [ 92.81301, 13.4215 ], [ 92.81422, 13.4214 ], [ 92.81462, 13.4211 ], [ 92.81495, 13.42046 ], [ 92.81511, 13.42003 ], [ 92.81558, 13.41894 ], [ 92.81603, 13.41761 ], [ 92.81641, 13.41736 ], [ 92.81708, 13.41724 ], [ 92.81769, 13.41707 ], [ 92.81916, 13.41645 ], [ 92.81929, 13.4163 ], [ 92.81921, 13.41611 ], [ 92.81905, 13.4159 ], [ 92.81886, 13.41555 ], [ 92.81833, 13.41438 ], [ 92.81824, 13.41388 ], [ 92.81822, 13.41305 ], [ 92.81826, 13.41272 ], [ 92.81853, 13.41242 ], [ 92.81876, 13.41235 ], [ 92.81918, 13.41228 ], [ 92.8195, 13.41214 ], [ 92.81974, 13.41177 ], [ 92.81977, 13.41142 ], [ 92.81965, 13.41092 ], [ 92.8196, 13.41055 ], [ 92.8196, 13.41019 ], [ 92.81952, 13.40955 ], [ 92.8194, 13.40921 ], [ 92.81924, 13.40891 ], [ 92.81936, 13.40868 ], [ 92.81936, 13.40834 ], [ 92.8194, 13.40795 ], [ 92.81922, 13.40755 ], [ 92.81913, 13.40729 ], [ 92.81933, 13.40715 ], [ 92.81949, 13.40741 ], [ 92.8197, 13.40749 ], [ 92.81977, 13.40742 ], [ 92.81973, 13.40721 ], [ 92.81949, 13.40695 ], [ 92.81928, 13.40677 ], [ 92.81887, 13.4069 ], [ 92.81869, 13.40689 ], [ 92.81855, 13.40679 ], [ 92.81867, 13.40655 ], [ 92.8189, 13.40618 ], [ 92.81889, 13.40515 ], [ 92.81857, 13.40437 ], [ 92.81786, 13.40282 ], [ 92.81741, 13.40219 ], [ 92.81628, 13.4014 ], [ 92.81556, 13.40106 ], [ 92.81496, 13.40088 ], [ 92.81427, 13.40072 ], [ 92.81332, 13.40028 ], [ 92.81289, 13.40001 ], [ 92.8126, 13.399938867924529 ], [ 92.8124, 13.399889811320755 ] ] ], [ [ [ 92.83339, 13.41851 ], [ 92.83239, 13.4183 ], [ 92.83128, 13.4183 ], [ 92.82979, 13.41858 ], [ 92.82815, 13.41899 ], [ 92.82783, 13.41924 ], [ 92.82743, 13.41961 ], [ 92.82714, 13.42012 ], [ 92.82701, 13.42052 ], [ 92.8269, 13.42062 ], [ 92.82654, 13.42066 ], [ 92.82551, 13.42044 ], [ 92.82337, 13.42041 ], [ 92.82257, 13.42053 ], [ 92.82207, 13.42072 ], [ 92.82161, 13.42103 ], [ 92.82106, 13.42177 ], [ 92.82092, 13.42235 ], [ 92.82036, 13.42347 ], [ 92.82029, 13.42468 ], [ 92.82028, 13.42601 ], [ 92.82033, 13.42812 ], [ 92.8205, 13.42982 ], [ 92.8209, 13.43218 ], [ 92.82115, 13.43348 ], [ 92.82141, 13.43429 ], [ 92.82157, 13.43491 ], [ 92.82205, 13.43585 ], [ 92.82228, 13.43589 ], [ 92.82248, 13.43607 ], [ 92.8227, 13.43634 ], [ 92.82302, 13.43681 ], [ 92.82448, 13.43811 ], [ 92.82498, 13.43862 ], [ 92.82549, 13.43894 ], [ 92.82602, 13.43917 ], [ 92.82654, 13.43933 ], [ 92.82737, 13.43938 ], [ 92.82803, 13.4395 ], [ 92.82863, 13.43938 ], [ 92.82982, 13.43919 ], [ 92.83038, 13.43902 ], [ 92.83122, 13.43888 ], [ 92.83198, 13.43903 ], [ 92.83256, 13.4392 ], [ 92.83388, 13.43994 ], [ 92.83472, 13.44054 ], [ 92.8352, 13.44097 ], [ 92.83599, 13.44156 ], [ 92.83611, 13.44173 ], [ 92.83611, 13.44191 ], [ 92.83605, 13.44215 ], [ 92.83605, 13.44268 ], [ 92.83623, 13.44333 ], [ 92.8366, 13.444 ], [ 92.83735, 13.44509 ], [ 92.83758, 13.4453 ], [ 92.83769, 13.44519 ], [ 92.83807, 13.44448 ], [ 92.83819, 13.44437 ], [ 92.8384, 13.44427 ], [ 92.83861, 13.44427 ], [ 92.83901, 13.44462 ], [ 92.83954, 13.44428 ], [ 92.83978, 13.44419 ], [ 92.84001, 13.44419 ], [ 92.84016, 13.44425 ], [ 92.84032, 13.44421 ], [ 92.84043, 13.44407 ], [ 92.84042, 13.44354 ], [ 92.84046, 13.44328 ], [ 92.84055, 13.44301 ], [ 92.84073, 13.44276 ], [ 92.84088, 13.44264 ], [ 92.84123, 13.4427 ], [ 92.84134, 13.44288 ], [ 92.84143, 13.44342 ], [ 92.84134, 13.44381 ], [ 92.84122, 13.44408 ], [ 92.84118, 13.44443 ], [ 92.84126, 13.44458 ], [ 92.84122, 13.44478 ], [ 92.84099, 13.44482 ], [ 92.84072, 13.44478 ], [ 92.84028, 13.44478 ], [ 92.84012, 13.44485 ], [ 92.83981, 13.44494 ], [ 92.83943, 13.44511 ], [ 92.83914, 13.44534 ], [ 92.83868, 13.44565 ], [ 92.83832, 13.44585 ], [ 92.83813, 13.44606 ], [ 92.83813, 13.44622 ], [ 92.8383, 13.44644 ], [ 92.8388, 13.44725 ], [ 92.8397, 13.44849 ], [ 92.8399, 13.44893 ], [ 92.84066, 13.44954 ], [ 92.84106, 13.44977 ], [ 92.84154, 13.45 ], [ 92.84232, 13.45 ], [ 92.84269, 13.44985 ], [ 92.84314, 13.44963 ], [ 92.84356, 13.44926 ], [ 92.84399, 13.44862 ], [ 92.8448, 13.44706 ], [ 92.84487, 13.44627 ], [ 92.84482, 13.44553 ], [ 92.84514, 13.44507 ], [ 92.84512, 13.44428 ], [ 92.84525, 13.44388 ], [ 92.84532, 13.44327 ], [ 92.84518, 13.44301 ], [ 92.84503, 13.44279 ], [ 92.84494, 13.4425 ], [ 92.8449, 13.44227 ], [ 92.84491, 13.44199 ], [ 92.8451, 13.44146 ], [ 92.8451, 13.44127 ], [ 92.84503, 13.44115 ], [ 92.84476, 13.44099 ], [ 92.84456, 13.4409 ], [ 92.84441, 13.44078 ], [ 92.8444, 13.44053 ], [ 92.84456, 13.44033 ], [ 92.84457, 13.44003 ], [ 92.8444, 13.43937 ], [ 92.84453, 13.4388 ], [ 92.84452, 13.43852 ], [ 92.84434, 13.43834 ], [ 92.84407, 13.43833 ], [ 92.84404, 13.43801 ], [ 92.84414, 13.43785 ], [ 92.84408, 13.43755 ], [ 92.84427, 13.43691 ], [ 92.84422, 13.43574 ], [ 92.844, 13.43523 ], [ 92.84404, 13.43482 ], [ 92.84429, 13.43419 ], [ 92.84458, 13.43381 ], [ 92.8448, 13.43342 ], [ 92.84666, 13.43087 ], [ 92.84664, 13.43034 ], [ 92.84628, 13.42997 ], [ 92.84536, 13.42988 ], [ 92.8451, 13.42951 ], [ 92.84477, 13.42914 ], [ 92.84436, 13.42891 ], [ 92.84415, 13.42857 ], [ 92.84439, 13.42828 ], [ 92.84472, 13.42795 ], [ 92.84415, 13.42765 ], [ 92.8436, 13.42772 ], [ 92.84349, 13.42719 ], [ 92.84384, 13.42682 ], [ 92.84318, 13.42668 ], [ 92.84313, 13.4265 ], [ 92.84334, 13.42627 ], [ 92.8437, 13.42595 ], [ 92.84372, 13.42569 ], [ 92.84365, 13.42535 ], [ 92.84351, 13.425 ], [ 92.84325, 13.42447 ], [ 92.8428, 13.42373 ], [ 92.84251, 13.42337 ], [ 92.84206, 13.42337 ], [ 92.84133, 13.42357 ], [ 92.84104, 13.42385 ], [ 92.84074, 13.4239 ], [ 92.84052, 13.42385 ], [ 92.84074, 13.42344 ], [ 92.84114, 13.42309 ], [ 92.84119, 13.42272 ], [ 92.84119, 13.42224 ], [ 92.84076, 13.42198 ], [ 92.84033, 13.42187 ], [ 92.84014, 13.42185 ], [ 92.83993, 13.42162 ], [ 92.83981, 13.42115 ], [ 92.83965, 13.42081 ], [ 92.83938, 13.42065 ], [ 92.83896, 13.4206 ], [ 92.83832, 13.4206 ], [ 92.83758, 13.42044 ], [ 92.83725, 13.42021 ], [ 92.83528, 13.41917 ], [ 92.83436, 13.41888 ], [ 92.83339, 13.41851 ] ] ], [ [ [ 92.8654094, 13.5092603 ], [ 92.8655384, 13.5096046 ], [ 92.8658269, 13.5102755 ], [ 92.8662534, 13.511111 ], [ 92.8663287, 13.5114221 ], [ 92.8665169, 13.5116843 ], [ 92.8667239, 13.5119405 ], [ 92.8669497, 13.5121661 ], [ 92.8671755, 13.5123979 ], [ 92.8674578, 13.5127212 ], [ 92.8676083, 13.5129224 ], [ 92.8677212, 13.5131481 ], [ 92.8678028, 13.5133676 ], [ 92.8678843, 13.5136604 ], [ 92.8680537, 13.5138982 ], [ 92.8684488, 13.5142032 ], [ 92.8686182, 13.5144349 ], [ 92.8689005, 13.5146423 ], [ 92.8693145, 13.5148924 ], [ 92.8697786, 13.5150387 ], [ 92.8702114, 13.5150448 ], [ 92.8707697, 13.5149351 ], [ 92.8711837, 13.5147948 ], [ 92.87156, 13.514563 ], [ 92.8719928, 13.5142093 ], [ 92.8728898, 13.5139287 ], [ 92.8731721, 13.5138678 ], [ 92.8736614, 13.5137885 ], [ 92.8740565, 13.5137946 ], [ 92.8743074, 13.5137397 ], [ 92.8746524, 13.513575 ], [ 92.8749911, 13.5134286 ], [ 92.875173, 13.5131115 ], [ 92.8751919, 13.5127638 ], [ 92.8751919, 13.5123491 ], [ 92.8752232, 13.5119222 ], [ 92.8752922, 13.5114343 ], [ 92.8753612, 13.5107573 ], [ 92.8753236, 13.5105316 ], [ 92.8752546, 13.5102877 ], [ 92.8751354, 13.5101718 ], [ 92.8749472, 13.5101718 ], [ 92.8748281, 13.5099278 ], [ 92.874596, 13.5098485 ], [ 92.8744015, 13.5098119 ], [ 92.87432, 13.5098912 ], [ 92.8740314, 13.5096839 ], [ 92.874113, 13.5095558 ], [ 92.8741193, 13.5093728 ], [ 92.8740753, 13.5091471 ], [ 92.8739311, 13.5090252 ], [ 92.8740377, 13.5088788 ], [ 92.8740126, 13.5087019 ], [ 92.8741067, 13.5084823 ], [ 92.8740314, 13.5083116 ], [ 92.8740879, 13.5081103 ], [ 92.8740377, 13.5078785 ], [ 92.8736488, 13.5076712 ], [ 92.8736551, 13.507476 ], [ 92.8736049, 13.5072808 ], [ 92.8737178, 13.5069271 ], [ 92.8740628, 13.5063782 ], [ 92.8745897, 13.5057012 ], [ 92.8752734, 13.5046094 ], [ 92.8753299, 13.5044142 ], [ 92.8754239, 13.5038531 ], [ 92.8754992, 13.5034079 ], [ 92.8754867, 13.5030907 ], [ 92.8752609, 13.5029321 ], [ 92.8750413, 13.5029077 ], [ 92.874872, 13.5030419 ], [ 92.8748155, 13.5032493 ], [ 92.8746838, 13.503231 ], [ 92.8743388, 13.5030907 ], [ 92.8739373, 13.5029016 ], [ 92.8737429, 13.5026272 ], [ 92.873699, 13.5023954 ], [ 92.8740691, 13.5017001 ], [ 92.8742572, 13.500956 ], [ 92.8741506, 13.5008279 ], [ 92.8742008, 13.500279 ], [ 92.8743513, 13.4997178 ], [ 92.8745332, 13.4996081 ], [ 92.8746022, 13.4992421 ], [ 92.8745019, 13.4989432 ], [ 92.8741381, 13.4988151 ], [ 92.8735422, 13.4989127 ], [ 92.8732223, 13.4988395 ], [ 92.8730529, 13.4986627 ], [ 92.8725448, 13.4981442 ], [ 92.8725323, 13.4976197 ], [ 92.8724319, 13.497211 ], [ 92.8722187, 13.4969061 ], [ 92.8717419, 13.4967536 ], [ 92.871215, 13.496839 ], [ 92.8710331, 13.4970646 ], [ 92.8706003, 13.4972903 ], [ 92.8700985, 13.497638 ], [ 92.8697849, 13.4981198 ], [ 92.8698037, 13.4983394 ], [ 92.8696155, 13.4990469 ], [ 92.8694964, 13.4996934 ], [ 92.8690635, 13.500096 ], [ 92.8687311, 13.500462 ], [ 92.8681101, 13.5003156 ], [ 92.8674139, 13.5001326 ], [ 92.8671379, 13.4996873 ], [ 92.8667991, 13.4995471 ], [ 92.8658833, 13.4995593 ], [ 92.8650491, 13.499852 ], [ 92.864265, 13.5002119 ], [ 92.8639075, 13.5008706 ], [ 92.8638761, 13.5017062 ], [ 92.8637005, 13.5027614 ], [ 92.8636315, 13.5035604 ], [ 92.8638197, 13.5046155 ], [ 92.8643753, 13.5060875 ], [ 92.8645912, 13.5066648 ], [ 92.8646627, 13.5073592 ], [ 92.8654094, 13.5092603 ] ] ], [ [ [ 92.88948, 13.57358 ], [ 92.88882, 13.57305 ], [ 92.88795, 13.57273 ], [ 92.88732, 13.57266 ], [ 92.88646, 13.57268 ], [ 92.88538, 13.57314 ], [ 92.88489, 13.57367 ], [ 92.8842, 13.57419 ], [ 92.88416, 13.57426 ], [ 92.883, 13.57535 ], [ 92.88206, 13.57661 ], [ 92.88137, 13.57811 ], [ 92.8811, 13.57879 ], [ 92.88096, 13.57962 ], [ 92.88104, 13.58174 ], [ 92.88115, 13.58333 ], [ 92.88127, 13.58412 ], [ 92.88163, 13.58579 ], [ 92.882, 13.58695 ], [ 92.88207, 13.58708 ], [ 92.88227, 13.58821 ], [ 92.88245, 13.58891 ], [ 92.88273, 13.58901 ], [ 92.88276, 13.58904 ], [ 92.88265, 13.58928 ], [ 92.88259, 13.58972 ], [ 92.8829, 13.59054 ], [ 92.88365, 13.59273 ], [ 92.88448, 13.59463 ], [ 92.88551, 13.59633 ], [ 92.88653, 13.59757 ], [ 92.88801, 13.59887 ], [ 92.88965, 13.60012 ], [ 92.89134, 13.60118 ], [ 92.89263, 13.60206 ], [ 92.89376, 13.60253 ], [ 92.89426, 13.60256 ], [ 92.89486, 13.60253 ], [ 92.8954, 13.60256 ], [ 92.89588, 13.6028 ], [ 92.89622, 13.60325 ], [ 92.89718, 13.60357 ], [ 92.8983, 13.60359 ], [ 92.89999, 13.60357 ], [ 92.9012, 13.60361 ], [ 92.90188, 13.60338 ], [ 92.90265, 13.60277 ], [ 92.90341, 13.60145 ], [ 92.90395, 13.60005 ], [ 92.90404, 13.59884 ], [ 92.90404, 13.59789 ], [ 92.90381, 13.59683 ], [ 92.90345, 13.59589 ], [ 92.90267, 13.59521 ], [ 92.90168, 13.5937 ], [ 92.9009, 13.59228 ], [ 92.90068, 13.59132 ], [ 92.90043, 13.59042 ], [ 92.89812, 13.58794 ], [ 92.89804, 13.58791 ], [ 92.89461, 13.58522 ], [ 92.89354, 13.58386 ], [ 92.89275, 13.58244 ], [ 92.89193, 13.58085 ], [ 92.89125, 13.57973 ], [ 92.89116, 13.57966 ], [ 92.89068, 13.57904 ], [ 92.8904, 13.57859 ], [ 92.89033, 13.57834 ], [ 92.89043, 13.57811 ], [ 92.89089, 13.57777 ], [ 92.89087, 13.57712 ], [ 92.89007, 13.57475 ], [ 92.88948, 13.57358 ] ] ], [ [ [ 82.3039362, 16.7550461 ], [ 82.3005817, 16.7664369 ], [ 82.3007139, 16.7732689 ], [ 82.3024317, 16.779215 ], [ 82.3053387, 16.7850345 ], [ 82.3044978, 16.7938976 ], [ 82.3045445, 16.7993093 ], [ 82.3064132, 16.8061073 ], [ 82.305292, 16.8149621 ], [ 82.3025823, 16.8189422 ], [ 82.2997793, 16.8212676 ], [ 82.2989851, 16.8260972 ], [ 82.3005267, 16.8315974 ], [ 82.3042175, 16.83513 ], [ 82.3136545, 16.8399592 ], [ 82.3182329, 16.8473817 ], [ 82.3198213, 16.8519424 ], [ 82.3280436, 16.8554299 ], [ 82.3376675, 16.8556087 ], [ 82.3524304, 16.8511376 ], [ 82.3534348, 16.8500198 ], [ 82.3540422, 16.8448554 ], [ 82.3549065, 16.8444977 ], [ 82.3544393, 16.8468004 ], [ 82.3549532, 16.8511376 ], [ 82.3557474, 16.8522106 ], [ 82.3570321, 16.85154 ], [ 82.3575563, 16.851547 ], [ 82.358093, 16.851801 ], [ 82.3582153, 16.8502548 ], [ 82.3569479, 16.8412482 ], [ 82.3565034, 16.8411626 ], [ 82.3553047, 16.83585 ], [ 82.3551276, 16.8357627 ], [ 82.3548921, 16.8343074 ], [ 82.3545799, 16.8339632 ], [ 82.3546173, 16.8332788 ], [ 82.3529415, 16.8232446 ], [ 82.3526721, 16.8229887 ], [ 82.3523937, 16.8214452 ], [ 82.3521244, 16.8211894 ], [ 82.3519785, 16.8193873 ], [ 82.3514436, 16.8193909 ], [ 82.3513004, 16.818104 ], [ 82.3512297, 16.8169611 ], [ 82.3513557, 16.8161566 ], [ 82.3527814, 16.8162153 ], [ 82.3540716, 16.8164697 ], [ 82.3547532, 16.8139251 ], [ 82.3527084, 16.8045947 ], [ 82.3490959, 16.7914139 ], [ 82.3441202, 16.7720325 ], [ 82.3403033, 16.756043 ], [ 82.3400306, 16.7469055 ], [ 82.3389401, 16.7439684 ], [ 82.3357366, 16.7427935 ], [ 82.3326694, 16.7396605 ], [ 82.328239, 16.7391383 ], [ 82.3258534, 16.7370496 ], [ 82.3229906, 16.7365927 ], [ 82.3205038, 16.7345921 ], [ 82.3195642, 16.7339537 ], [ 82.3176879, 16.7331929 ], [ 82.3174204, 16.7331946 ], [ 82.3170252, 16.7340992 ], [ 82.3164941, 16.7346176 ], [ 82.3159649, 16.7353938 ], [ 82.3154427, 16.7372001 ], [ 82.3149116, 16.7377187 ], [ 82.3143822, 16.7384948 ], [ 82.3134613, 16.7405613 ], [ 82.3129266, 16.7405647 ], [ 82.311875, 16.7431472 ], [ 82.3113405, 16.7431506 ], [ 82.3113458, 16.7439232 ], [ 82.3102791, 16.744316 ], [ 82.3098803, 16.7447053 ], [ 82.3088268, 16.7470302 ], [ 82.3081651, 16.7479355 ], [ 82.3068258, 16.7475581 ], [ 82.3048504, 16.7519493 ], [ 82.3048555, 16.7527219 ], [ 82.3049914, 16.7529788 ], [ 82.3044567, 16.7529822 ], [ 82.3046351, 16.7534076 ], [ 82.3044603, 16.7534972 ], [ 82.3043314, 16.7542708 ], [ 82.3039326, 16.7545308 ], [ 82.3039362, 16.7550461 ] ] ], [ [ [ 82.3254239, 16.989867 ], [ 82.3264401, 16.9905495 ], [ 82.3269205, 16.9907911 ], [ 82.327536, 16.9911668 ], [ 82.3285923, 16.9917226 ], [ 82.3291302, 16.9919892 ], [ 82.3296956, 16.9921319 ], [ 82.330049, 16.9922633 ], [ 82.3306537, 16.9924999 ], [ 82.3313919, 16.9928754 ], [ 82.3319652, 16.9930895 ], [ 82.3324585, 16.9931194 ], [ 82.3330027, 16.993061 ], [ 82.3336913, 16.9929123 ], [ 82.334713, 16.9924556 ], [ 82.3354016, 16.992036 ], [ 82.3359847, 16.9916696 ], [ 82.3366455, 16.9915262 ], [ 82.3370953, 16.9914306 ], [ 82.3373008, 16.9912978 ], [ 82.3375729, 16.9911014 ], [ 82.3385669, 16.9906287 ], [ 82.3401162, 16.9897471 ], [ 82.3410713, 16.9892108 ], [ 82.3423489, 16.9880563 ], [ 82.3439077, 16.9866443 ], [ 82.3448226, 16.9858519 ], [ 82.3456551, 16.9849206 ], [ 82.3465282, 16.9835957 ], [ 82.3476583, 16.9818114 ], [ 82.3482905, 16.9809026 ], [ 82.3494088, 16.9796821 ], [ 82.3507304, 16.9782534 ], [ 82.3519188, 16.9770637 ], [ 82.3529556, 16.9758173 ], [ 82.3535328, 16.9749536 ], [ 82.3541964, 16.9736842 ], [ 82.3550092, 16.972028 ], [ 82.3555687, 16.9706943 ], [ 82.3564516, 16.9687345 ], [ 82.3571902, 16.9673854 ], [ 82.3581564, 16.9654043 ], [ 82.3588505, 16.9638108 ], [ 82.3593008, 16.9626223 ], [ 82.3598073, 16.9611501 ], [ 82.3601686, 16.9597191 ], [ 82.3604748, 16.9576271 ], [ 82.3607772, 16.9551783 ], [ 82.360946, 16.9535332 ], [ 82.3610599, 16.9521923 ], [ 82.3611306, 16.950149 ], [ 82.3610795, 16.9485076 ], [ 82.3610992, 16.9476738 ], [ 82.3612052, 16.9463704 ], [ 82.3614526, 16.9444548 ], [ 82.3616725, 16.9430688 ], [ 82.361912, 16.9414386 ], [ 82.3620926, 16.9391999 ], [ 82.3621868, 16.9377725 ], [ 82.3622497, 16.9365367 ], [ 82.3622614, 16.9356465 ], [ 82.3623635, 16.9348652 ], [ 82.3624696, 16.9337533 ], [ 82.3625991, 16.9328029 ], [ 82.3627444, 16.9319653 ], [ 82.3628072, 16.930767 ], [ 82.3628897, 16.9297114 ], [ 82.3629643, 16.9289226 ], [ 82.3629604, 16.9284493 ], [ 82.3631174, 16.9272209 ], [ 82.3631803, 16.9261203 ], [ 82.3631371, 16.9253427 ], [ 82.3631371, 16.9246627 ], [ 82.3632392, 16.9229948 ], [ 82.3633727, 16.921819 ], [ 82.3635586, 16.920056 ], [ 82.3635691, 16.9187541 ], [ 82.3635534, 16.9174345 ], [ 82.3635688, 16.9162268 ], [ 82.3636226, 16.9150691 ], [ 82.3636768, 16.9137646 ], [ 82.3637352, 16.9128737 ], [ 82.3637921, 16.9119047 ], [ 82.3636541, 16.9103256 ], [ 82.3633928, 16.9087728 ], [ 82.3632541, 16.9081572 ], [ 82.3631736, 16.90799 ], [ 82.3630617, 16.9077552 ], [ 82.3629479, 16.907682 ], [ 82.3628399, 16.9076463 ], [ 82.362728, 16.9076519 ], [ 82.3626828, 16.9077195 ], [ 82.3626778, 16.9078321 ], [ 82.3628338, 16.908678 ], [ 82.3630027, 16.9093561 ], [ 82.3631118, 16.9099494 ], [ 82.363159, 16.9107145 ], [ 82.3631821, 16.9117414 ], [ 82.3630933, 16.9126764 ], [ 82.3630628, 16.9138001 ], [ 82.3629933, 16.9146156 ], [ 82.3629989, 16.915131 ], [ 82.3630017, 16.9154975 ], [ 82.3628323, 16.9165734 ], [ 82.3627962, 16.9170356 ], [ 82.3628129, 16.9174075 ], [ 82.3627186, 16.9188874 ], [ 82.362602, 16.9199658 ], [ 82.3625575, 16.920606 ], [ 82.3625492, 16.9217323 ], [ 82.3624687, 16.923087 ], [ 82.3623882, 16.9241389 ], [ 82.3622577, 16.9251881 ], [ 82.3618379, 16.9282606 ], [ 82.3614769, 16.930351 ], [ 82.3613103, 16.93127 ], [ 82.3611215, 16.9322927 ], [ 82.3608702, 16.9341517 ], [ 82.3606621, 16.9357181 ], [ 82.3606229, 16.9362139 ], [ 82.3596291, 16.9410103 ], [ 82.3592487, 16.9426491 ], [ 82.3588773, 16.9444915 ], [ 82.3587575, 16.9449385 ], [ 82.3586888, 16.945363 ], [ 82.3586142, 16.9457066 ], [ 82.358571, 16.9460729 ], [ 82.3585769, 16.9462456 ], [ 82.3584905, 16.9466851 ], [ 82.3580474, 16.9491761 ], [ 82.3578707, 16.9501132 ], [ 82.3577333, 16.9507179 ], [ 82.3572757, 16.952094 ], [ 82.3572174, 16.9522215 ], [ 82.3572035, 16.9524353 ], [ 82.3572146, 16.9525614 ], [ 82.3571952, 16.9526769 ], [ 82.3570786, 16.9529824 ], [ 82.3569106, 16.9533276 ], [ 82.3566229, 16.953865 ], [ 82.3563869, 16.9542713 ], [ 82.3562315, 16.9545993 ], [ 82.3562065, 16.954663 ], [ 82.3562134, 16.9547494 ], [ 82.3561856, 16.9548224 ], [ 82.3561192, 16.9548863 ], [ 82.35608, 16.954968 ], [ 82.3560819, 16.9550009 ], [ 82.3560888, 16.9550394 ], [ 82.3560328, 16.9551408 ], [ 82.355434, 16.9561004 ], [ 82.3549138, 16.9568628 ], [ 82.3547469, 16.9570732 ], [ 82.3546271, 16.9572873 ], [ 82.3546212, 16.9573474 ], [ 82.3546507, 16.9573661 ], [ 82.3546703, 16.9573549 ], [ 82.3546919, 16.9573323 ], [ 82.3547253, 16.9572666 ], [ 82.3547999, 16.9572009 ], [ 82.3548608, 16.957184 ], [ 82.3549, 16.9572403 ], [ 82.3548274, 16.9573117 ], [ 82.3546546, 16.9574769 ], [ 82.3544313, 16.9578367 ], [ 82.354127, 16.9582837 ], [ 82.3536695, 16.9588151 ], [ 82.3535301, 16.9590123 ], [ 82.3534928, 16.9591006 ], [ 82.3534398, 16.9592001 ], [ 82.35343, 16.9592583 ], [ 82.3530864, 16.9597898 ], [ 82.3529824, 16.9599663 ], [ 82.3529804, 16.9600602 ], [ 82.3529568, 16.9601334 ], [ 82.352892, 16.9602649 ], [ 82.3528999, 16.9603381 ], [ 82.3529647, 16.9603944 ], [ 82.3529333, 16.9604414 ], [ 82.3528567, 16.960447 ], [ 82.3527232, 16.9604207 ], [ 82.3525956, 16.9604264 ], [ 82.3524699, 16.9604583 ], [ 82.3523325, 16.9605822 ], [ 82.3522147, 16.9607644 ], [ 82.3521853, 16.960785 ], [ 82.3521519, 16.9608376 ], [ 82.3521126, 16.9608658 ], [ 82.3520262, 16.9608545 ], [ 82.3519438, 16.9608151 ], [ 82.3518711, 16.9607644 ], [ 82.3518005, 16.9607644 ], [ 82.350961, 16.9613884 ], [ 82.3499448, 16.9621851 ], [ 82.349134, 16.9628464 ], [ 82.3488258, 16.9630934 ], [ 82.3487009, 16.9631545 ], [ 82.3485509, 16.9632873 ], [ 82.3484593, 16.9634918 ], [ 82.3483316, 16.9636591 ], [ 82.3482761, 16.9637334 ], [ 82.3481817, 16.9637573 ], [ 82.3481039, 16.9637228 ], [ 82.3478985, 16.9637334 ], [ 82.3470905, 16.964084 ], [ 82.3467545, 16.9642646 ], [ 82.3462909, 16.9644691 ], [ 82.3454607, 16.9649046 ], [ 82.3449803, 16.9650746 ], [ 82.3446638, 16.9653401 ], [ 82.3442473, 16.9655977 ], [ 82.3437892, 16.9657093 ], [ 82.3435588, 16.9658978 ], [ 82.343395, 16.9659722 ], [ 82.3431673, 16.9659961 ], [ 82.3429563, 16.9659616 ], [ 82.3426925, 16.9661103 ], [ 82.3423538, 16.9663997 ], [ 82.3419956, 16.966583 ], [ 82.3416763, 16.966583 ], [ 82.3414181, 16.9666441 ], [ 82.3412431, 16.9667211 ], [ 82.341129, 16.9668624 ], [ 82.3410465, 16.9668999 ], [ 82.3409602, 16.9669544 ], [ 82.3409091, 16.9670765 ], [ 82.3409052, 16.9672605 ], [ 82.3408718, 16.967452 ], [ 82.3408129, 16.9675722 ], [ 82.3407383, 16.9676173 ], [ 82.3404934, 16.9677039 ], [ 82.3403952, 16.967717 ], [ 82.3402715, 16.967717 ], [ 82.3401852, 16.9677471 ], [ 82.3401636, 16.967809 ], [ 82.3401969, 16.9678954 ], [ 82.3401969, 16.967978 ], [ 82.3401636, 16.9680888 ], [ 82.3400605, 16.9682554 ], [ 82.3394529, 16.9690854 ], [ 82.3391643, 16.9695023 ], [ 82.3389149, 16.9698065 ], [ 82.3387952, 16.9699361 ], [ 82.3387539, 16.9701107 ], [ 82.3386577, 16.9704168 ], [ 82.3384261, 16.9709257 ], [ 82.3383573, 16.9711247 ], [ 82.3382788, 16.9712618 ], [ 82.3382199, 16.9713181 ], [ 82.3381237, 16.9714026 ], [ 82.3380605, 16.9715725 ], [ 82.3374386, 16.9726056 ], [ 82.3370915, 16.9730544 ], [ 82.3368361, 16.9734288 ], [ 82.3365501, 16.9738696 ], [ 82.3364807, 16.9740794 ], [ 82.336439, 16.9742387 ], [ 82.3363363, 16.9743981 ], [ 82.3361947, 16.9745123 ], [ 82.3360725, 16.9748389 ], [ 82.3359726, 16.9752664 ], [ 82.335881, 16.9758374 ], [ 82.335706, 16.9764482 ], [ 82.33552, 16.9769686 ], [ 82.3353257, 16.9773404 ], [ 82.3349647, 16.9778768 ], [ 82.3347787, 16.9781902 ], [ 82.3346843, 16.9784876 ], [ 82.3345982, 16.9786602 ], [ 82.3344594, 16.9788381 ], [ 82.3342067, 16.9790213 ], [ 82.3340151, 16.9792657 ], [ 82.3338735, 16.9794967 ], [ 82.3336986, 16.9798977 ], [ 82.3333654, 16.9803565 ], [ 82.3324642, 16.9814127 ], [ 82.3321736, 16.9817544 ], [ 82.3321402, 16.981914 ], [ 82.3321952, 16.982006 ], [ 82.3322875, 16.9820436 ], [ 82.3323895, 16.9820943 ], [ 82.3323542, 16.982175 ], [ 82.3322344, 16.98219 ], [ 82.3320597, 16.9821487 ], [ 82.3318457, 16.9821356 ], [ 82.3315493, 16.9824529 ], [ 82.331296, 16.9826839 ], [ 82.3311173, 16.9827834 ], [ 82.3309701, 16.9827928 ], [ 82.3307581, 16.9827871 ], [ 82.3305107, 16.9827965 ], [ 82.3302594, 16.982896 ], [ 82.3299531, 16.9832152 ], [ 82.3296841, 16.9834143 ], [ 82.329479, 16.9835326 ], [ 82.3292083, 16.9836309 ], [ 82.3290806, 16.9836282 ], [ 82.3290404, 16.9835738 ], [ 82.3290473, 16.9834835 ], [ 82.3290515, 16.9834038 ], [ 82.3290279, 16.9833613 ], [ 82.328964, 16.9833627 ], [ 82.3289224, 16.9834171 ], [ 82.3289001, 16.9834901 ], [ 82.3287766, 16.9835459 ], [ 82.3285683, 16.983591 ], [ 82.3284156, 16.9835472 ], [ 82.3280949, 16.9831091 ], [ 82.3280436, 16.9831011 ], [ 82.3277451, 16.9827054 ], [ 82.3276743, 16.9827639 ], [ 82.3280158, 16.9832352 ], [ 82.3281061, 16.9833587 ], [ 82.3278534, 16.9835924 ], [ 82.3270704, 16.9844474 ], [ 82.3261458, 16.9854883 ], [ 82.3255267, 16.9861256 ], [ 82.3245077, 16.9870816 ], [ 82.3241495, 16.987363 ], [ 82.3239829, 16.9875755 ], [ 82.3239385, 16.9877348 ], [ 82.3239107, 16.9879313 ], [ 82.3239024, 16.9881995 ], [ 82.3240135, 16.9885287 ], [ 82.32428, 16.9889775 ], [ 82.3245438, 16.9892961 ], [ 82.3248187, 16.9894873 ], [ 82.3254239, 16.989867 ] ] ], [ [ [ 73.0276606, 18.0296647 ], [ 73.0264547, 18.0305858 ], [ 73.0262372, 18.0317325 ], [ 73.0247744, 18.0326912 ], [ 73.0236673, 18.0344581 ], [ 73.0223428, 18.035586 ], [ 73.0212829, 18.036751 ], [ 73.0216605, 18.0384853 ], [ 73.0239351, 18.0424434 ], [ 73.0247075, 18.0428514 ], [ 73.0259177, 18.0432391 ], [ 73.0268512, 18.0435859 ], [ 73.0278919, 18.0439736 ], [ 73.0261752, 18.0441368 ], [ 73.0250509, 18.0439124 ], [ 73.0254371, 18.0448509 ], [ 73.026937, 18.045871 ], [ 73.0280099, 18.0467687 ], [ 73.0298552, 18.0475031 ], [ 73.0320868, 18.0488905 ], [ 73.0338893, 18.0491761 ], [ 73.0352626, 18.0493801 ], [ 73.0364642, 18.0492985 ], [ 73.038095, 18.0489721 ], [ 73.0389211, 18.0485844 ], [ 73.0395219, 18.0481356 ], [ 73.0401227, 18.0467483 ], [ 73.0405519, 18.0454833 ], [ 73.0401978, 18.0440756 ], [ 73.0387387, 18.042321 ], [ 73.0378482, 18.0398522 ], [ 73.0372903, 18.0380568 ], [ 73.036432, 18.0370366 ], [ 73.0341146, 18.0356492 ], [ 73.0325696, 18.0332416 ], [ 73.0308959, 18.0322622 ], [ 73.0296572, 18.0318077 ], [ 73.0289851, 18.0308678 ], [ 73.0276606, 18.0296647 ] ] ], [ [ [ 73.0015786, 18.8055679 ], [ 73.0052479, 18.8098781 ], [ 73.008445, 18.8122302 ], [ 73.0129726, 18.8141029 ], [ 73.0209549, 18.8143466 ], [ 73.0227573, 18.8145904 ], [ 73.0276497, 18.8138592 ], [ 73.0341943, 18.8113365 ], [ 73.0351598, 18.8117468 ], [ 73.0386124, 18.811824 ], [ 73.0402861, 18.8115802 ], [ 73.0434618, 18.8104428 ], [ 73.0455454, 18.8104875 ], [ 73.047925, 18.8113771 ], [ 73.0503283, 18.8127989 ], [ 73.0523453, 18.8131645 ], [ 73.0535898, 18.812677 ], [ 73.0557785, 18.8089397 ], [ 73.0564652, 18.8076398 ], [ 73.0557356, 18.8043086 ], [ 73.0562742, 18.8033782 ], [ 73.0572806, 18.8043492 ], [ 73.0577097, 18.8055273 ], [ 73.0584629, 18.8059782 ], [ 73.0604134, 18.8077616 ], [ 73.0618296, 18.8087772 ], [ 73.0626257, 18.8091875 ], [ 73.0638466, 18.8091428 ], [ 73.066207, 18.8086553 ], [ 73.0674322, 18.8082532 ], [ 73.0688484, 18.8086594 ], [ 73.0711229, 18.8087407 ], [ 73.0713139, 18.807071 ], [ 73.070756, 18.8047554 ], [ 73.0704556, 18.8032929 ], [ 73.0698977, 18.8020336 ], [ 73.0690394, 18.8016679 ], [ 73.0674944, 18.8019929 ], [ 73.0662928, 18.8029273 ], [ 73.0647907, 18.8036992 ], [ 73.0618296, 18.8036992 ], [ 73.059598, 18.8020336 ], [ 73.059083, 18.8008148 ], [ 73.0583964, 18.7985397 ], [ 73.0577955, 18.7972397 ], [ 73.0571089, 18.7965897 ], [ 73.0558214, 18.7964678 ], [ 73.0523024, 18.7974835 ], [ 73.04844, 18.7985804 ], [ 73.0453072, 18.7991085 ], [ 73.0440197, 18.7990679 ], [ 73.0424748, 18.7977678 ], [ 73.0419169, 18.7965084 ], [ 73.0417452, 18.7945583 ], [ 73.0410156, 18.7939896 ], [ 73.038312, 18.7943146 ], [ 73.0365525, 18.7945583 ], [ 73.0353937, 18.7944365 ], [ 73.0341492, 18.7939896 ], [ 73.0316172, 18.7934208 ], [ 73.0295573, 18.7931364 ], [ 73.0275402, 18.7933801 ], [ 73.0260382, 18.7945583 ], [ 73.0227337, 18.7984991 ], [ 73.0198155, 18.8012617 ], [ 73.017498, 18.8028054 ], [ 73.0142794, 18.8039836 ], [ 73.0120907, 18.8041867 ], [ 73.0081425, 18.8046742 ], [ 73.0045376, 18.8052835 ], [ 73.0026922, 18.8054867 ], [ 73.0015786, 18.8055679 ] ] ], [ [ [ 72.87343, 19.32517 ], [ 72.87357, 19.32496 ], [ 72.87343, 19.32462 ], [ 72.87319, 19.32459 ], [ 72.86763, 19.32656 ], [ 72.86664, 19.32707 ], [ 72.86551, 19.3278 ], [ 72.86419, 19.32833 ], [ 72.86282, 19.32883 ], [ 72.861, 19.32935 ], [ 72.85953, 19.32963 ], [ 72.85878, 19.32969 ], [ 72.85396, 19.33046 ], [ 72.8531, 19.3305 ], [ 72.85224, 19.33046 ], [ 72.85176, 19.33057 ], [ 72.8513, 19.33058 ], [ 72.85091, 19.33035 ], [ 72.85036, 19.33036 ], [ 72.84997, 19.33045 ], [ 72.84911, 19.33053 ], [ 72.84652, 19.33086 ], [ 72.84422, 19.33127 ], [ 72.84252, 19.33162 ], [ 72.84044, 19.33192 ], [ 72.8392, 19.33224 ], [ 72.83813, 19.33236 ], [ 72.83737, 19.3326 ], [ 72.83596, 19.33296 ], [ 72.835, 19.33324 ], [ 72.8348, 19.33347 ], [ 72.83484, 19.33426 ], [ 72.83517, 19.33517 ], [ 72.83553, 19.33562 ], [ 72.83687, 19.33669 ], [ 72.83826, 19.33734 ], [ 72.84, 19.3379 ], [ 72.84128, 19.33809 ], [ 72.84253, 19.33818 ], [ 72.84479, 19.33815 ], [ 72.84797, 19.3379 ], [ 72.85018, 19.33777 ], [ 72.85385, 19.33716 ], [ 72.85608, 19.33654 ], [ 72.85834, 19.33583 ], [ 72.86039, 19.33502 ], [ 72.86259, 19.33399 ], [ 72.86459, 19.3328 ], [ 72.86684, 19.33134 ], [ 72.86873, 19.32991 ], [ 72.87012, 19.32864 ], [ 72.87179, 19.32695 ], [ 72.87343, 19.32517 ] ] ], [ [ [ 72.73156, 19.45541 ], [ 72.73148, 19.45598 ], [ 72.73141, 19.45678 ], [ 72.73114, 19.45733 ], [ 72.72997, 19.45821 ], [ 72.72902, 19.4602 ], [ 72.72847, 19.46067 ], [ 72.72717, 19.4614 ], [ 72.72634, 19.46249 ], [ 72.72601, 19.46336 ], [ 72.72548, 19.46435 ], [ 72.72486, 19.46495 ], [ 72.72413, 19.46539 ], [ 72.72379, 19.46583 ], [ 72.72324, 19.46713 ], [ 72.72342, 19.46766 ], [ 72.72377, 19.46804 ], [ 72.7242, 19.46829 ], [ 72.72413, 19.46862 ], [ 72.72392, 19.46929 ], [ 72.72403, 19.46952 ], [ 72.72447, 19.4697 ], [ 72.72454, 19.47003 ], [ 72.72456, 19.47027 ], [ 72.72476, 19.4703 ], [ 72.7251, 19.47015 ], [ 72.7259, 19.46972 ], [ 72.72644, 19.46953 ], [ 72.72666, 19.46951 ], [ 72.7269, 19.46965 ], [ 72.72688, 19.47003 ], [ 72.72666, 19.47041 ], [ 72.72641, 19.47064 ], [ 72.7262, 19.47166 ], [ 72.72613, 19.47232 ], [ 72.72612, 19.47279 ], [ 72.72601, 19.47314 ], [ 72.7261, 19.4734 ], [ 72.72637, 19.47359 ], [ 72.7267, 19.47361 ], [ 72.72706, 19.47358 ], [ 72.72988, 19.47146 ], [ 72.73063, 19.47095 ], [ 72.73152, 19.47027 ], [ 72.73185, 19.47018 ], [ 72.73221, 19.47018 ], [ 72.7324, 19.47003 ], [ 72.73242, 19.46962 ], [ 72.73237, 19.46922 ], [ 72.73249, 19.4689 ], [ 72.73274, 19.46851 ], [ 72.73307, 19.46821 ], [ 72.73347, 19.46808 ], [ 72.73386, 19.46811 ], [ 72.73449, 19.46836 ], [ 72.7347, 19.46825 ], [ 72.73479, 19.46787 ], [ 72.7352, 19.46657 ], [ 72.73531, 19.46634 ], [ 72.73624, 19.46597 ], [ 72.73668, 19.46569 ], [ 72.737, 19.46534 ], [ 72.73717, 19.46504 ], [ 72.73712, 19.46485 ], [ 72.73642, 19.46435 ], [ 72.73486, 19.46358 ], [ 72.73421, 19.46305 ], [ 72.7336, 19.46222 ], [ 72.73358, 19.46175 ], [ 72.73416, 19.46058 ], [ 72.73485, 19.45938 ], [ 72.7351, 19.45835 ], [ 72.73525, 19.45755 ], [ 72.73465, 19.45716 ], [ 72.73438, 19.45672 ], [ 72.7345, 19.45619 ], [ 72.73502, 19.45524 ], [ 72.73491, 19.45498 ], [ 72.73408, 19.45491 ], [ 72.73292, 19.4557 ], [ 72.732, 19.4553 ], [ 72.73156, 19.45541 ] ] ], [ [ [ 72.8053808, 19.4995699 ], [ 72.8059523, 19.4999091 ], [ 72.8110113, 19.5028222 ], [ 72.8124506, 19.5035006 ], [ 72.8174461, 19.5039795 ], [ 72.8201978, 19.5042389 ], [ 72.8266326, 19.5062142 ], [ 72.8282413, 19.5070522 ], [ 72.8246218, 19.4995899 ], [ 72.8204095, 19.4944219 ], [ 72.8170863, 19.4923866 ], [ 72.8144615, 19.4923068 ], [ 72.8112865, 19.4936437 ], [ 72.8056137, 19.4987319 ], [ 72.8053808, 19.4995699 ] ] ], [ [ [ 72.8665079, 19.5242419 ], [ 72.8662365, 19.5242387 ], [ 72.8662331, 19.5244959 ], [ 72.8665011, 19.5247566 ], [ 72.86454, 19.5246387 ], [ 72.8633362, 19.5248834 ], [ 72.8604523, 19.5250068 ], [ 72.8598965, 19.5250857 ], [ 72.8592271, 19.5249765 ], [ 72.8575491, 19.5253789 ], [ 72.8556951, 19.5254072 ], [ 72.8538476, 19.5260564 ], [ 72.8527726, 19.5262586 ], [ 72.8515439, 19.5266388 ], [ 72.8491025, 19.5264806 ], [ 72.8453123, 19.5256632 ], [ 72.8442333, 19.5251355 ], [ 72.8422287, 19.5250293 ], [ 72.8437758, 19.528667 ], [ 72.8439088, 19.5291219 ], [ 72.8439054, 19.5293793 ], [ 72.8440746, 19.5297293 ], [ 72.8442917, 19.5309286 ], [ 72.8448175, 19.5322219 ], [ 72.8450855, 19.5324825 ], [ 72.8456115, 19.5337758 ], [ 72.8458795, 19.5340365 ], [ 72.846009, 19.5345528 ], [ 72.8470829, 19.5354661 ], [ 72.8481585, 19.5362512 ], [ 72.8503184, 19.5371782 ], [ 72.8506, 19.5364094 ], [ 72.8508716, 19.5364126 ], [ 72.8511328, 19.537188 ], [ 72.8516775, 19.5370654 ], [ 72.8519523, 19.5368112 ], [ 72.8535811, 19.5368305 ], [ 72.8611995, 19.5356337 ], [ 72.8614743, 19.5353797 ], [ 72.8636563, 19.5346331 ], [ 72.8644724, 19.5345146 ], [ 72.8652459, 19.5339535 ], [ 72.8660356, 19.533539 ], [ 72.8674518, 19.5329727 ], [ 72.8685204, 19.5321254 ], [ 72.8693036, 19.5312316 ], [ 72.8699838, 19.5308675 ], [ 72.8704151, 19.5303033 ], [ 72.8714386, 19.5296966 ], [ 72.8721725, 19.5292942 ], [ 72.8725995, 19.529009 ], [ 72.873123, 19.5286531 ], [ 72.8735153, 19.5281858 ], [ 72.873664, 19.5271578 ], [ 72.8732624, 19.5267664 ], [ 72.8683964, 19.5251646 ], [ 72.8681282, 19.524904 ], [ 72.8665981, 19.5244118 ], [ 72.8665079, 19.5242419 ] ] ], [ [ [ 86.2451039, 19.9108745 ], [ 86.2445616, 19.9103572 ], [ 86.2421107, 19.9104759 ], [ 86.2421082, 19.9109909 ], [ 86.2429262, 19.9107369 ], [ 86.2441424, 19.9125449 ], [ 86.2441339, 19.9143476 ], [ 86.2420812, 19.9166566 ], [ 86.2461661, 19.9165447 ], [ 86.246713, 19.9160319 ], [ 86.2475306, 19.915907 ], [ 86.2475331, 19.915392 ], [ 86.2486234, 19.9151391 ], [ 86.2497064, 19.9164313 ], [ 86.2483437, 19.916683 ], [ 86.2483401, 19.9174557 ], [ 86.249428, 19.9177178 ], [ 86.2491521, 19.9184893 ], [ 86.2499689, 19.9184927 ], [ 86.2496919, 19.9195216 ], [ 86.2502364, 19.9195239 ], [ 86.2505123, 19.9187526 ], [ 86.251057, 19.9187549 ], [ 86.2507877, 19.9181094 ], [ 86.2502437, 19.9179788 ], [ 86.2502449, 19.9177212 ], [ 86.2507901, 19.9175944 ], [ 86.2518775, 19.9179856 ], [ 86.2518799, 19.9174706 ], [ 86.2529667, 19.9179903 ], [ 86.2530999, 19.9185059 ], [ 86.2522781, 19.9195326 ], [ 86.2524099, 19.9205632 ], [ 86.2534996, 19.9204387 ], [ 86.2537731, 19.9201822 ], [ 86.2556786, 19.9203194 ], [ 86.2556811, 19.9198044 ], [ 86.2573093, 19.9209696 ], [ 86.2581269, 19.9208446 ], [ 86.2581198, 19.9223899 ], [ 86.2586643, 19.9223922 ], [ 86.2593373, 19.9239401 ], [ 86.2591944, 19.9254848 ], [ 86.2597391, 19.925487 ], [ 86.2598676, 19.9270327 ], [ 86.2594565, 19.9276743 ], [ 86.2586372, 19.928186 ], [ 86.2571324, 19.9295966 ], [ 86.2569901, 19.9310121 ], [ 86.257665, 19.9321742 ], [ 86.2586151, 19.9329506 ], [ 86.2586127, 19.9334657 ], [ 86.2594273, 19.9339843 ], [ 86.2595605, 19.9344999 ], [ 86.2599682, 19.934759 ], [ 86.259967, 19.9350166 ], [ 86.2602394, 19.9350177 ], [ 86.2607816, 19.935535 ], [ 86.2607792, 19.9360501 ], [ 86.2618678, 19.9361829 ], [ 86.2632343, 19.9351585 ], [ 86.2643235, 19.9351631 ], [ 86.26514, 19.9352956 ], [ 86.2652732, 19.9358112 ], [ 86.267312, 19.9367204 ], [ 86.2678565, 19.9367227 ], [ 86.2690785, 19.9373721 ], [ 86.2692116, 19.9381453 ], [ 86.2697563, 19.9381474 ], [ 86.2697538, 19.9386626 ], [ 86.2711144, 19.9389257 ], [ 86.271112, 19.9394407 ], [ 86.2717913, 19.939701 ], [ 86.2715034, 19.9430478 ], [ 86.271909, 19.9438219 ], [ 86.2746323, 19.9438331 ], [ 86.274775, 19.9422886 ], [ 86.2751868, 19.941646 ], [ 86.2757329, 19.9413906 ], [ 86.2822641, 19.9424473 ], [ 86.2833475, 19.9437393 ], [ 86.2838916, 19.9438707 ], [ 86.2848362, 19.9456771 ], [ 86.2848281, 19.9474798 ], [ 86.2841418, 19.9487648 ], [ 86.2835973, 19.9487626 ], [ 86.2838672, 19.9492787 ], [ 86.2827756, 19.9497894 ], [ 86.2830456, 19.9503056 ], [ 86.2825009, 19.9503033 ], [ 86.282225, 19.9510748 ], [ 86.2811333, 19.9515855 ], [ 86.2798992, 19.9533832 ], [ 86.2791137, 19.9558667 ], [ 86.2796126, 19.9564724 ], [ 86.2811059, 19.9576369 ], [ 86.2816506, 19.9576391 ], [ 86.2865416, 19.9602341 ], [ 86.2884446, 19.9610145 ], [ 86.288717, 19.9610154 ], [ 86.2907667, 19.9593502 ], [ 86.2906357, 19.9583195 ], [ 86.2900897, 19.9585749 ], [ 86.2896841, 19.9578007 ], [ 86.2890084, 19.9567679 ], [ 86.2890152, 19.9552226 ], [ 86.2884705, 19.9552205 ], [ 86.287795, 19.9539302 ], [ 86.2876627, 19.953157 ], [ 86.2871169, 19.9534123 ], [ 86.2871203, 19.9526397 ], [ 86.2879362, 19.9529005 ], [ 86.2882144, 19.951614 ], [ 86.2898513, 19.9509763 ], [ 86.290669, 19.9508512 ], [ 86.2906712, 19.9503362 ], [ 86.2953017, 19.9502254 ], [ 86.297207, 19.9504904 ], [ 86.2982936, 19.9511391 ], [ 86.2986982, 19.9519132 ], [ 86.298957, 19.9550047 ], [ 86.2985431, 19.9562906 ], [ 86.3007215, 19.9564277 ], [ 86.3039948, 19.9552821 ], [ 86.3046797, 19.9542545 ], [ 86.3056527, 19.9498803 ], [ 86.3067447, 19.9492404 ], [ 86.30729, 19.9491141 ], [ 86.3070199, 19.948598 ], [ 86.3089275, 19.9483479 ], [ 86.3089298, 19.9478329 ], [ 86.3105656, 19.9474524 ], [ 86.3113847, 19.9469406 ], [ 86.3143805, 19.9469521 ], [ 86.3187302, 19.9487716 ], [ 86.3209023, 19.9503252 ], [ 86.3222609, 19.951103 ], [ 86.3233491, 19.9513647 ], [ 86.3238918, 19.9518818 ], [ 86.3271545, 19.9531818 ], [ 86.3331333, 19.9562948 ], [ 86.3339471, 19.9570704 ], [ 86.3347636, 19.9572027 ], [ 86.3350327, 19.9579763 ], [ 86.336663, 19.9588833 ], [ 86.3396559, 19.9596671 ], [ 86.3402915, 19.960144 ], [ 86.340835, 19.9604035 ], [ 86.3415593, 19.9604467 ], [ 86.3445474, 19.9623898 ], [ 86.3445462, 19.9626473 ], [ 86.3461773, 19.9634259 ], [ 86.3486303, 19.9630481 ], [ 86.3489036, 19.9627917 ], [ 86.3521748, 19.9621602 ], [ 86.3521769, 19.9616452 ], [ 86.353811, 19.9616512 ], [ 86.3538131, 19.961136 ], [ 86.3545373, 19.9609689 ], [ 86.3546303, 19.961139 ], [ 86.3557197, 19.961143 ], [ 86.3557218, 19.960628 ], [ 86.3579029, 19.9601207 ], [ 86.3581794, 19.9590916 ], [ 86.357499, 19.9588317 ], [ 86.3573654, 19.9583161 ], [ 86.3565483, 19.9583131 ], [ 86.3565536, 19.9570255 ], [ 86.3579148, 19.9571587 ], [ 86.3581862, 19.9574173 ], [ 86.3590027, 19.9575494 ], [ 86.3594077, 19.9583235 ], [ 86.359269, 19.9590956 ], [ 86.3625394, 19.9585923 ], [ 86.3625413, 19.9580772 ], [ 86.3639042, 19.9578246 ], [ 86.3652137, 19.9577417 ], [ 86.3670079, 19.9578003 ], [ 86.3685057, 19.9582256 ], [ 86.3697851, 19.9581523 ], [ 86.3705027, 19.9581376 ], [ 86.3730771, 19.9588709 ], [ 86.3747777, 19.9585042 ], [ 86.3732799, 19.9579616 ], [ 86.3720317, 19.9571257 ], [ 86.3711424, 19.9566565 ], [ 86.3700191, 19.9561725 ], [ 86.3690674, 19.9555713 ], [ 86.3680221, 19.9551166 ], [ 86.3669299, 19.9547207 ], [ 86.365554, 19.9539674 ], [ 86.3652814, 19.9539665 ], [ 86.3650102, 19.9537079 ], [ 86.3614733, 19.9527936 ], [ 86.3606581, 19.9522755 ], [ 86.3598416, 19.9521442 ], [ 86.3560329, 19.9511003 ], [ 86.3560338, 19.9508429 ], [ 86.3527674, 19.9504441 ], [ 86.3481425, 19.9491396 ], [ 86.3475995, 19.9487518 ], [ 86.3475975, 19.9492668 ], [ 86.345966, 19.9486165 ], [ 86.3399787, 19.9475643 ], [ 86.3397073, 19.9473058 ], [ 86.332361, 19.9456048 ], [ 86.3285515, 19.9448178 ], [ 86.3285527, 19.9445602 ], [ 86.3277351, 19.9446855 ], [ 86.3201184, 19.9425963 ], [ 86.3198472, 19.9423375 ], [ 86.3173996, 19.9415556 ], [ 86.3157666, 19.9412918 ], [ 86.3154954, 19.9410332 ], [ 86.3146784, 19.94103 ], [ 86.312232, 19.9399905 ], [ 86.3114149, 19.9399873 ], [ 86.3100566, 19.9392094 ], [ 86.3092395, 19.9392064 ], [ 86.3089683, 19.9389476 ], [ 86.3051603, 19.9379026 ], [ 86.3048891, 19.9376441 ], [ 86.3021692, 19.9368609 ], [ 86.301898, 19.9366023 ], [ 86.298906, 19.935818 ], [ 86.29782, 19.935041 ], [ 86.2970031, 19.9350378 ], [ 86.2948279, 19.9342566 ], [ 86.2940133, 19.9337382 ], [ 86.2934686, 19.9337361 ], [ 86.2921105, 19.932958 ], [ 86.2915658, 19.9329559 ], [ 86.2907512, 19.9324375 ], [ 86.2880315, 19.9316541 ], [ 86.2836837, 19.9295764 ], [ 86.2831415, 19.9290591 ], [ 86.2804219, 19.9282755 ], [ 86.2798795, 19.9277582 ], [ 86.2787914, 19.9274963 ], [ 86.2777058, 19.9267193 ], [ 86.2771611, 19.926717 ], [ 86.2739018, 19.9249011 ], [ 86.2733571, 19.9248989 ], [ 86.2709135, 19.9233438 ], [ 86.2692821, 19.9228219 ], [ 86.2684688, 19.9220459 ], [ 86.2654805, 19.9204885 ], [ 86.2624913, 19.9191884 ], [ 86.2592347, 19.9168571 ], [ 86.2513528, 19.9137337 ], [ 86.2505397, 19.9129577 ], [ 86.2470049, 19.9119127 ], [ 86.2456459, 19.9113918 ], [ 86.2451039, 19.9108745 ] ] ], [ [ [ 72.9302595, 18.9670889 ], [ 72.9300555, 18.9678415 ], [ 72.9303652, 18.9679224 ], [ 72.9314234, 18.9682294 ], [ 72.9314576, 18.9682882 ], [ 72.9314539, 18.9683717 ], [ 72.931158, 18.969334 ], [ 72.9311133, 18.9693424 ], [ 72.9310803, 18.9694487 ], [ 72.9311389, 18.9694684 ], [ 72.9303657, 18.972287 ], [ 72.9309523, 18.9724478 ], [ 72.930965, 18.9723867 ], [ 72.9304852, 18.9722492 ], [ 72.9312607, 18.9694957 ], [ 72.931344, 18.9695224 ], [ 72.9313774, 18.9694414 ], [ 72.9312978, 18.969364 ], [ 72.9315897, 18.9683277 ], [ 72.9315901, 18.9682106 ], [ 72.9315105, 18.9681295 ], [ 72.9302034, 18.967776 ], [ 72.9304753, 18.9669043 ], [ 72.9307065, 18.9670115 ], [ 72.9309605, 18.9671311 ], [ 72.9315787, 18.9676477 ], [ 72.9318905, 18.9679218 ], [ 72.9320436, 18.9679834 ], [ 72.9320483, 18.9680538 ], [ 72.9321062, 18.9680885 ], [ 72.9321745, 18.9679977 ], [ 72.9324421, 18.9679911 ], [ 72.9327672, 18.9680384 ], [ 72.9332304, 18.9683229 ], [ 72.9337138, 18.9686328 ], [ 72.9339294, 18.9687759 ], [ 72.9340569, 18.9688712 ], [ 72.9342162, 18.9690051 ], [ 72.9345997, 18.969237 ], [ 72.9351396, 18.9696395 ], [ 72.9359389, 18.9705475 ], [ 72.9364909, 18.9708371 ], [ 72.936711, 18.9711112 ], [ 72.9373588, 18.9716269 ], [ 72.9374555, 18.9716831 ], [ 72.9376715, 18.9716746 ], [ 72.9379695, 18.971593 ], [ 72.9381276, 18.9715796 ], [ 72.9382275, 18.9716283 ], [ 72.9383103, 18.9716593 ], [ 72.9383209, 18.9717961 ], [ 72.9384429, 18.9717751 ], [ 72.9384653, 18.9716914 ], [ 72.9388018, 18.9714299 ], [ 72.93901, 18.97137 ], [ 72.9393806, 18.971207 ], [ 72.9396872, 18.9709123 ], [ 72.9400698, 18.9706772 ], [ 72.9405149, 18.9703899 ], [ 72.9406974, 18.970261 ], [ 72.9409711, 18.9702713 ], [ 72.9411156, 18.9701747 ], [ 72.9412571, 18.9699822 ], [ 72.9414513, 18.969667 ], [ 72.9414351, 18.9687113 ], [ 72.9412692, 18.9679601 ], [ 72.9412425, 18.967714 ], [ 72.94146, 18.9672 ], [ 72.9418461, 18.9672825 ], [ 72.94252, 18.96731 ], [ 72.9425943, 18.9666495 ], [ 72.9418085, 18.9665605 ], [ 72.9417851, 18.9663881 ], [ 72.9418398, 18.9662679 ], [ 72.9419386, 18.9661633 ], [ 72.9419468, 18.9660012 ], [ 72.9419484, 18.9658377 ], [ 72.94181, 18.96545 ], [ 72.94162, 18.9651 ], [ 72.94144, 18.9649 ], [ 72.9412234, 18.9647841 ], [ 72.9410272, 18.9646872 ], [ 72.94064, 18.96436 ], [ 72.94036, 18.96394 ], [ 72.93954, 18.96315 ], [ 72.93854, 18.96201 ], [ 72.93836, 18.96173 ], [ 72.9384, 18.96165 ], [ 72.93825, 18.96146 ], [ 72.9379, 18.96113 ], [ 72.93756, 18.96063 ], [ 72.93739, 18.96034 ], [ 72.93727, 18.95996 ], [ 72.9372, 18.95949 ], [ 72.93708, 18.95899 ], [ 72.93692, 18.95883 ], [ 72.93684, 18.95855 ], [ 72.93675, 18.958 ], [ 72.93688, 18.95782 ], [ 72.93689, 18.95756 ], [ 72.9368, 18.95723 ], [ 72.93681, 18.95662 ], [ 72.93657, 18.95622 ], [ 72.93648, 18.95583 ], [ 72.93623, 18.95522 ], [ 72.93604, 18.95504 ], [ 72.93571, 18.95454 ], [ 72.93565, 18.9543 ], [ 72.93565, 18.95406 ], [ 72.93548, 18.95367 ], [ 72.93534, 18.95355 ], [ 72.93527, 18.95338 ], [ 72.9352976, 18.95316 ], [ 72.93545, 18.9529 ], [ 72.93512, 18.9527 ], [ 72.9348, 18.95258 ], [ 72.93442, 18.95262 ], [ 72.9341303, 18.9527135 ], [ 72.9338299, 18.9529327 ], [ 72.9336754, 18.953363 ], [ 72.9334437, 18.954126 ], [ 72.933315, 18.9542965 ], [ 72.9328171, 18.9546943 ], [ 72.9325339, 18.9548241 ], [ 72.9323708, 18.9550758 ], [ 72.93235, 18.95524 ], [ 72.93212, 18.95539 ], [ 72.9318988, 18.9552868 ], [ 72.9316327, 18.9554005 ], [ 72.93142, 18.95549 ], [ 72.9313838, 18.9552381 ], [ 72.9312979, 18.9550677 ], [ 72.9310748, 18.9550108 ], [ 72.9308344, 18.9551164 ], [ 72.9306027, 18.9552219 ], [ 72.92992, 18.95583 ], [ 72.92945, 18.95668 ], [ 72.92903, 18.9571 ], [ 72.92809, 18.95776 ], [ 72.92699, 18.95846 ], [ 72.92617, 18.95902 ], [ 72.92576, 18.95943 ], [ 72.92543, 18.95991 ], [ 72.92494, 18.96005 ], [ 72.92485, 18.9602 ], [ 72.92498, 18.96088 ], [ 72.92508, 18.96191 ], [ 72.92511, 18.96266 ], [ 72.92549, 18.96323 ], [ 72.92589, 18.96403 ], [ 72.92671, 18.9648 ], [ 72.92722, 18.96555 ], [ 72.92762, 18.96579 ], [ 72.92788, 18.96601 ], [ 72.9287488, 18.9670489 ], [ 72.9296504, 18.9667646 ], [ 72.9297373, 18.9669459 ], [ 72.9299991, 18.9670887 ], [ 72.9302595, 18.9670889 ] ] ], [ [ [ 72.7938194, 18.9392694 ], [ 72.7933216, 18.9392044 ], [ 72.7929753, 18.9394354 ], [ 72.7925805, 18.9393055 ], [ 72.7923745, 18.9402959 ], [ 72.7932672, 18.9419115 ], [ 72.7930664, 18.9427191 ], [ 72.7933334, 18.9429797 ], [ 72.7935075, 18.94373 ], [ 72.7933902, 18.9443839 ], [ 72.7924633, 18.9455042 ], [ 72.7923279, 18.9462455 ], [ 72.7924137, 18.9471791 ], [ 72.792345, 18.9476093 ], [ 72.7921734, 18.9482344 ], [ 72.7918472, 18.9482182 ], [ 72.7917648, 18.9489221 ], [ 72.7920446, 18.948965 ], [ 72.7920446, 18.9493953 ], [ 72.7921734, 18.9498823 ], [ 72.7933527, 18.9522991 ], [ 72.7938676, 18.9526563 ], [ 72.79452, 18.953395 ], [ 72.7949499, 18.9538107 ], [ 72.7951723, 18.9542718 ], [ 72.7954555, 18.9546533 ], [ 72.7956958, 18.9547426 ], [ 72.7964512, 18.9562362 ], [ 72.7970787, 18.9565386 ], [ 72.797746, 18.9571904 ], [ 72.7983137, 18.9580708 ], [ 72.7986827, 18.9584604 ], [ 72.7987943, 18.9587283 ], [ 72.7988372, 18.9592154 ], [ 72.7993404, 18.9588822 ], [ 72.7997213, 18.9589637 ], [ 72.8001161, 18.9598729 ], [ 72.799687, 18.9616912 ], [ 72.8003049, 18.9616425 ], [ 72.8011885, 18.9628946 ], [ 72.8018517, 18.9639322 ], [ 72.8021331, 18.9643942 ], [ 72.8016525, 18.9648893 ], [ 72.8024903, 18.9656389 ], [ 72.8031545, 18.9655631 ], [ 72.8030859, 18.9667806 ], [ 72.8030687, 18.9673326 ], [ 72.8029142, 18.9682092 ], [ 72.8028541, 18.968745 ], [ 72.8016697, 18.9690778 ], [ 72.8018242, 18.9697677 ], [ 72.8022533, 18.9708878 ], [ 72.8026365, 18.9721262 ], [ 72.8029712, 18.9719963 ], [ 72.80316, 18.9719151 ], [ 72.8033342, 18.9721129 ], [ 72.8035378, 18.9722381 ], [ 72.8036569, 18.9723407 ], [ 72.8040445, 18.9729577 ], [ 72.8042707, 18.9733294 ], [ 72.8048114, 18.9744668 ], [ 72.8051081, 18.9751153 ], [ 72.8053516, 18.9757998 ], [ 72.8061246, 18.9754772 ], [ 72.8063477, 18.9760697 ], [ 72.8066224, 18.9766541 ], [ 72.806013, 18.977206 ], [ 72.8057984, 18.9776525 ], [ 72.8065709, 18.9779203 ], [ 72.8069895, 18.9781616 ], [ 72.8075618, 18.9778855 ], [ 72.8080072, 18.9778947 ], [ 72.8085843, 18.9782987 ], [ 72.8086685, 18.9784669 ], [ 72.808787, 18.978635 ], [ 72.8088432, 18.9788031 ], [ 72.8089554, 18.9789358 ], [ 72.8090771, 18.9789889 ], [ 72.8091675, 18.9790332 ], [ 72.8092923, 18.9790184 ], [ 72.8093173, 18.9789122 ], [ 72.8093672, 18.9787205 ], [ 72.8094576, 18.9785288 ], [ 72.8095886, 18.9784492 ], [ 72.8098038, 18.9785141 ], [ 72.8099754, 18.978632 ], [ 72.8099161, 18.9786645 ], [ 72.8099445, 18.9787175 ], [ 72.8099237, 18.9789309 ], [ 72.8099413, 18.9791437 ], [ 72.8099501, 18.9794377 ], [ 72.8099347, 18.979615 ], [ 72.8097869, 18.9800739 ], [ 72.8094561, 18.9807871 ], [ 72.8089268, 18.9817882 ], [ 72.8087879, 18.981905 ], [ 72.8086819, 18.9818567 ], [ 72.8086695, 18.9820722 ], [ 72.8086115, 18.9820644 ], [ 72.8086115, 18.9821545 ], [ 72.8086985, 18.9821466 ], [ 72.8087026, 18.9822054 ], [ 72.8087523, 18.9822093 ], [ 72.8087523, 18.9822524 ], [ 72.8086736, 18.9822563 ], [ 72.8086819, 18.98237 ], [ 72.8087855, 18.9823621 ], [ 72.8087866, 18.9824312 ], [ 72.8086031, 18.9824583 ], [ 72.8086322, 18.9830752 ], [ 72.8088186, 18.9830791 ], [ 72.8088186, 18.9831222 ], [ 72.8091377, 18.9831497 ], [ 72.8091128, 18.9823856 ], [ 72.8088907, 18.9824166 ], [ 72.8088394, 18.9821192 ], [ 72.8089056, 18.9819586 ], [ 72.809509, 18.9808268 ], [ 72.8098288, 18.9801323 ], [ 72.8100009, 18.9796567 ], [ 72.8100207, 18.979494 ], [ 72.8100295, 18.9792062 ], [ 72.8100031, 18.9790248 ], [ 72.8100044, 18.9788477 ], [ 72.8100593, 18.978739 ], [ 72.8102374, 18.9786114 ], [ 72.8106943, 18.9785037 ], [ 72.8107598, 18.9786306 ], [ 72.8110343, 18.9785568 ], [ 72.8111872, 18.9786764 ], [ 72.8112661, 18.9786116 ], [ 72.8118723, 18.9793177 ], [ 72.8123621, 18.9798911 ], [ 72.8128382, 18.9804592 ], [ 72.8132869, 18.9809763 ], [ 72.8138142, 18.9816138 ], [ 72.8142591, 18.9822268 ], [ 72.8145667, 18.982947 ], [ 72.8147201, 18.9833915 ], [ 72.8148122, 18.9838746 ], [ 72.8147924, 18.9844424 ], [ 72.8144743, 18.9852186 ], [ 72.8140795, 18.9860983 ], [ 72.8138391, 18.9866177 ], [ 72.8135889, 18.9871365 ], [ 72.8133872, 18.9870442 ], [ 72.8132875, 18.9872125 ], [ 72.813571, 18.9873465 ], [ 72.8133143, 18.9875578 ], [ 72.8130556, 18.9877014 ], [ 72.812842, 18.9878473 ], [ 72.8126583, 18.9879449 ], [ 72.8124415, 18.9880021 ], [ 72.8121863, 18.9879635 ], [ 72.8119788, 18.9877522 ], [ 72.8118066, 18.9873788 ], [ 72.8115975, 18.9871444 ], [ 72.8112542, 18.9871393 ], [ 72.8111169, 18.9872077 ], [ 72.811077, 18.9875625 ], [ 72.8109981, 18.9879163 ], [ 72.8109552, 18.9881192 ], [ 72.8110513, 18.988439 ], [ 72.811592, 18.989486 ], [ 72.811758, 18.9896743 ], [ 72.811788715764465, 18.98970915 ], [ 72.8120641, 18.9900216 ], [ 72.8121816, 18.9902956 ], [ 72.8123216, 18.9906222 ], [ 72.8125465, 18.9912652 ], [ 72.8126152, 18.9914844 ], [ 72.8124864, 18.9916873 ], [ 72.8123816, 18.9922697 ], [ 72.8127212, 18.9926095 ], [ 72.8127813, 18.9928205 ], [ 72.8127309, 18.9930304 ], [ 72.8126955, 18.9931776 ], [ 72.8126526, 18.993486 ], [ 72.8125876, 18.9937711 ], [ 72.8124939, 18.9938672 ], [ 72.8121613, 18.9939382 ], [ 72.8121935, 18.9941107 ], [ 72.812172, 18.9943745 ], [ 72.8123044, 18.9948668 ], [ 72.8123044, 18.9954511 ], [ 72.8120469, 18.9962302 ], [ 72.8119782, 18.9967577 ], [ 72.8114203, 18.9980481 ], [ 72.8113774, 19.0014728 ], [ 72.8116693, 19.0021707 ], [ 72.8124839, 19.003877 ], [ 72.8130881, 19.0047385 ], [ 72.8134545, 19.0052789 ], [ 72.8139695, 19.0075674 ], [ 72.8143043, 19.0082977 ], [ 72.8146132, 19.0091498 ], [ 72.8149394, 19.0099288 ], [ 72.8154973, 19.0104725 ], [ 72.8158262, 19.0109232 ], [ 72.8159978, 19.0112965 ], [ 72.8161609, 19.011686 ], [ 72.8162983, 19.0120593 ], [ 72.8165386, 19.0124326 ], [ 72.8166416, 19.0127166 ], [ 72.8167274, 19.013098 ], [ 72.816736, 19.0134389 ], [ 72.8167274, 19.0137959 ], [ 72.8166845, 19.0142016 ], [ 72.8165729, 19.0145343 ], [ 72.8164098, 19.0148184 ], [ 72.8164098, 19.0152647 ], [ 72.8163498, 19.0155974 ], [ 72.8162296, 19.0158246 ], [ 72.8175857, 19.0165711 ], [ 72.817457, 19.0167659 ], [ 72.8165729, 19.016279 ], [ 72.8165462, 19.0164404 ], [ 72.816466, 19.0165703 ], [ 72.8162639, 19.016847 ], [ 72.8162639, 19.0170418 ], [ 72.8162553, 19.017196 ], [ 72.8161953, 19.0173177 ], [ 72.8161609, 19.0175124 ], [ 72.8162296, 19.0176585 ], [ 72.8161695, 19.0178046 ], [ 72.8161953, 19.0180318 ], [ 72.8162038, 19.0187864 ], [ 72.8161266, 19.0188757 ], [ 72.816118, 19.0193544 ], [ 72.8161695, 19.0195411 ], [ 72.8162468, 19.0197602 ], [ 72.8162897, 19.0200117 ], [ 72.8162382, 19.0202551 ], [ 72.8161695, 19.0204742 ], [ 72.8160923, 19.0207501 ], [ 72.8160493, 19.0209936 ], [ 72.8160665, 19.0212695 ], [ 72.8159978, 19.0213993 ], [ 72.8160665, 19.0216671 ], [ 72.8159635, 19.0217725 ], [ 72.8160506, 19.0219912 ], [ 72.8160579, 19.0222432 ], [ 72.8160322, 19.022511 ], [ 72.8161266, 19.0226814 ], [ 72.8161438, 19.0228761 ], [ 72.8160579, 19.0230546 ], [ 72.8159767, 19.0232574 ], [ 72.8159807, 19.0235983 ], [ 72.8159378, 19.0237687 ], [ 72.8157661, 19.0239472 ], [ 72.8157232, 19.0242312 ], [ 72.8156374, 19.0245071 ], [ 72.8156374, 19.024718 ], [ 72.8155515, 19.024929 ], [ 72.8153799, 19.0254159 ], [ 72.8152597, 19.0257404 ], [ 72.8153198, 19.0260082 ], [ 72.8154829, 19.0260488 ], [ 72.8156224, 19.0256153 ], [ 72.8157941, 19.0256558 ], [ 72.816043, 19.0253313 ], [ 72.8161717, 19.0250229 ], [ 72.8165666, 19.0247876 ], [ 72.8169099, 19.0245442 ], [ 72.816927, 19.0243819 ], [ 72.816927, 19.0242359 ], [ 72.8170644, 19.0243332 ], [ 72.8173648, 19.0239924 ], [ 72.8175364, 19.0238139 ], [ 72.8176824, 19.0233595 ], [ 72.8177339, 19.0231161 ], [ 72.8178969, 19.0230349 ], [ 72.8179828, 19.022897 ], [ 72.8180257, 19.0227023 ], [ 72.818266, 19.0224669 ], [ 72.8184806, 19.0223209 ], [ 72.8186093, 19.0222235 ], [ 72.8187123, 19.0220369 ], [ 72.8187295, 19.0218989 ], [ 72.8188497, 19.0216798 ], [ 72.8189183, 19.0211362 ], [ 72.8188497, 19.0209414 ], [ 72.8188411, 19.0206006 ], [ 72.8189097, 19.0201949 ], [ 72.8190127, 19.0198216 ], [ 72.8189527, 19.0196269 ], [ 72.819086, 19.0194352 ], [ 72.8192187, 19.0192699 ], [ 72.8195964, 19.0186207 ], [ 72.8198882, 19.0184665 ], [ 72.819974, 19.0182555 ], [ 72.8200942, 19.0180932 ], [ 72.8202659, 19.0180121 ], [ 72.8205366, 19.0179745 ], [ 72.8208924, 19.0179228 ], [ 72.8212443, 19.0177443 ], [ 72.8219052, 19.01772 ], [ 72.8223, 19.0176551 ], [ 72.8224116, 19.0174278 ], [ 72.822609, 19.0176145 ], [ 72.8236265, 19.0176662 ], [ 72.8248741, 19.0180428 ], [ 72.8259735, 19.0186396 ], [ 72.8266992, 19.0191025 ], [ 72.8272912, 19.0194876 ], [ 72.8279352, 19.0199869 ], [ 72.82833, 19.0203115 ], [ 72.8288998, 19.0206645 ], [ 72.8294458, 19.021123 ], [ 72.8308938, 19.0221902 ], [ 72.8317988, 19.0231053 ], [ 72.8326611, 19.0240134 ], [ 72.8330457, 19.0244464 ], [ 72.8335013, 19.0250237 ], [ 72.8338196, 19.025665 ], [ 72.8341519, 19.0262228 ], [ 72.8341405, 19.0263344 ], [ 72.8342164, 19.0264019 ], [ 72.8343271, 19.0265347 ], [ 72.8352688, 19.0278725 ], [ 72.83614, 19.029753 ], [ 72.8366721, 19.0312931 ], [ 72.8370177, 19.0312399 ], [ 72.8371456, 19.031482 ], [ 72.8376705, 19.0331239 ], [ 72.8380156, 19.0347299 ], [ 72.8379396, 19.0349375 ], [ 72.8380407, 19.0360148 ], [ 72.8382124, 19.0365825 ], [ 72.8382706, 19.0374837 ], [ 72.8381014, 19.0393141 ], [ 72.8378357, 19.0407801 ], [ 72.8377532, 19.0412606 ], [ 72.8377183, 19.0419971 ], [ 72.8378395, 19.0424339 ], [ 72.8381281, 19.0427478 ], [ 72.8381485, 19.0427891 ], [ 72.8381933, 19.0429854 ], [ 72.8381537, 19.0432284 ], [ 72.8377065, 19.0440004 ], [ 72.8375046, 19.044349 ], [ 72.8368806, 19.0454962 ], [ 72.836848, 19.045583 ], [ 72.8367168, 19.0457621 ], [ 72.8364735, 19.0462565 ], [ 72.8362895, 19.0467928 ], [ 72.8360722, 19.0471699 ], [ 72.8360116, 19.0474276 ], [ 72.8358437, 19.04765 ], [ 72.835925, 19.047834 ], [ 72.8361645, 19.0480178 ], [ 72.8364853, 19.0481487 ], [ 72.8363261, 19.0489669 ], [ 72.8363296, 19.0491427 ], [ 72.8360005, 19.0494432 ], [ 72.8356408, 19.0494017 ], [ 72.8351077, 19.0492643 ], [ 72.8344898, 19.0492967 ], [ 72.8338632, 19.0493941 ], [ 72.8334151, 19.0492286 ], [ 72.832756, 19.048818 ], [ 72.8309928, 19.0470757 ], [ 72.8300076, 19.0460482 ], [ 72.830029, 19.0458326 ], [ 72.8300523, 19.0455971 ], [ 72.8300008, 19.0453294 ], [ 72.8298325, 19.0450836 ], [ 72.8295803, 19.0448183 ], [ 72.8293056, 19.0446884 ], [ 72.8289794, 19.0446073 ], [ 72.828679, 19.0446154 ], [ 72.8283185, 19.0444369 ], [ 72.8279409, 19.0441935 ], [ 72.8275614, 19.0440199 ], [ 72.8271542, 19.0437957 ], [ 72.8267074, 19.0435497 ], [ 72.8262322, 19.0432572 ], [ 72.8256158, 19.0428778 ], [ 72.8253402, 19.0426926 ], [ 72.8250312, 19.042579 ], [ 72.8246077, 19.042428 ], [ 72.8241128, 19.0423275 ], [ 72.8236608, 19.0422029 ], [ 72.8233346, 19.0419433 ], [ 72.8231515, 19.041581 ], [ 72.8229541, 19.041224 ], [ 72.8229026, 19.0414269 ], [ 72.822731, 19.0413457 ], [ 72.8224735, 19.0411186 ], [ 72.8225164, 19.0407616 ], [ 72.8226194, 19.0405344 ], [ 72.8224992, 19.0404289 ], [ 72.8223104, 19.0405425 ], [ 72.8222019, 19.0408955 ], [ 72.8222675, 19.0412159 ], [ 72.8222331, 19.041508 ], [ 72.8220701, 19.0417839 ], [ 72.8218415, 19.0424614 ], [ 72.8218727, 19.0426682 ], [ 72.8218212, 19.0429116 ], [ 72.8216924, 19.0430982 ], [ 72.8214349, 19.0430739 ], [ 72.8212547, 19.0429441 ], [ 72.8210237, 19.0425113 ], [ 72.8207777, 19.0422621 ], [ 72.8204657, 19.0419423 ], [ 72.8200747, 19.0417222 ], [ 72.819587, 19.0416308 ], [ 72.8195123, 19.0414979 ], [ 72.8194024, 19.0414356 ], [ 72.819152, 19.0415228 ], [ 72.818862, 19.0413982 ], [ 72.8187082, 19.0412238 ], [ 72.8185017, 19.0411449 ], [ 72.8183172, 19.0412113 ], [ 72.8178646, 19.0413484 ], [ 72.8175131, 19.0415602 ], [ 72.8172714, 19.0419506 ], [ 72.8171308, 19.0421666 ], [ 72.8171792, 19.0424366 ], [ 72.817333, 19.0426401 ], [ 72.8173066, 19.0428104 ], [ 72.8172363, 19.042964 ], [ 72.8172421, 19.0433076 ], [ 72.8173263, 19.0439546 ], [ 72.8177433, 19.0444351 ], [ 72.8180656, 19.0447748 ], [ 72.8185756, 19.0449458 ], [ 72.8193661, 19.0467706 ], [ 72.8198624, 19.0481577 ], [ 72.8205434, 19.0498735 ], [ 72.8213079, 19.052051 ], [ 72.8220511, 19.053861 ], [ 72.8227825, 19.0543997 ], [ 72.8233661, 19.054708 ], [ 72.8239154, 19.0547973 ], [ 72.824027, 19.0550731 ], [ 72.8239841, 19.055422 ], [ 72.8239154, 19.0558925 ], [ 72.823718, 19.0561846 ], [ 72.8233404, 19.0570283 ], [ 72.8226623, 19.0574339 ], [ 72.8219499, 19.0578233 ], [ 72.8213902, 19.0580554 ], [ 72.8210487, 19.0581073 ], [ 72.8212032, 19.058594 ], [ 72.8206024, 19.0589266 ], [ 72.820671, 19.0591376 ], [ 72.8211946, 19.0603544 ], [ 72.8213577, 19.0609223 ], [ 72.8218469, 19.060898 ], [ 72.8218727, 19.0617417 ], [ 72.8220701, 19.062561 ], [ 72.8223276, 19.0631694 ], [ 72.8222417, 19.0636075 ], [ 72.8225851, 19.0639969 ], [ 72.8229541, 19.0647351 ], [ 72.822997, 19.065303 ], [ 72.8228855, 19.0661791 ], [ 72.8226537, 19.0667632 ], [ 72.8224306, 19.0673067 ], [ 72.8222846, 19.0679557 ], [ 72.8223533, 19.0686776 ], [ 72.822525, 19.0692374 ], [ 72.8223791, 19.0697566 ], [ 72.8221044, 19.0703487 ], [ 72.8217868, 19.0711843 ], [ 72.8216066, 19.0717521 ], [ 72.8214559, 19.0727064 ], [ 72.8214275, 19.0740831 ], [ 72.8217652, 19.0744062 ], [ 72.8219685, 19.0749971 ], [ 72.8219092, 19.075652 ], [ 72.8217912, 19.0762199 ], [ 72.8215234, 19.0767337 ], [ 72.8215663, 19.076977 ], [ 72.8217483, 19.0772135 ], [ 72.8221989, 19.07768 ], [ 72.8225637, 19.07841 ], [ 72.8229966, 19.0787023 ], [ 72.8235545, 19.0792701 ], [ 72.8240695, 19.0796351 ], [ 72.8247304, 19.0812412 ], [ 72.8248419, 19.0824822 ], [ 72.8247132, 19.0831068 ], [ 72.8242411, 19.0834313 ], [ 72.8239407, 19.0836178 ], [ 72.8238377, 19.0838125 ], [ 72.8238377, 19.0840234 ], [ 72.8242154, 19.0843235 ], [ 72.8248677, 19.0853212 ], [ 72.8255286, 19.0866758 ], [ 72.8257002, 19.0871868 ], [ 72.8262484, 19.0898417 ], [ 72.826344, 19.0922481 ], [ 72.8261847, 19.094732 ], [ 72.8258904, 19.0965307 ], [ 72.825726, 19.0972768 ], [ 72.8255994, 19.0980717 ], [ 72.8251252, 19.0990612 ], [ 72.825058711856499, 19.099477433994306 ], [ 72.8250376, 19.0996096 ], [ 72.8245844, 19.100667 ], [ 72.8244759, 19.1011475 ], [ 72.8240094, 19.1021837 ], [ 72.823709, 19.1035219 ], [ 72.8234515, 19.1052089 ], [ 72.8233656, 19.1058334 ], [ 72.8233257, 19.1062823 ], [ 72.8230346, 19.1078233 ], [ 72.8227386, 19.1085083 ], [ 72.8226103, 19.1098317 ], [ 72.8224475, 19.1105591 ], [ 72.8221733, 19.1108131 ], [ 72.8218858, 19.112097 ], [ 72.8213307, 19.11312 ], [ 72.8207736, 19.1146977 ], [ 72.8204847, 19.1156842 ], [ 72.8199496, 19.1168224 ], [ 72.8195376, 19.1175361 ], [ 72.8188939, 19.1189553 ], [ 72.8183016, 19.119677 ], [ 72.8175292, 19.1204556 ], [ 72.8173877, 19.1207847 ], [ 72.8172804, 19.120957 ], [ 72.8171516, 19.1213422 ], [ 72.8169585, 19.1219302 ], [ 72.8167996, 19.1225965 ], [ 72.8164305, 19.1235372 ], [ 72.8160372, 19.1243839 ], [ 72.8149338, 19.1259153 ], [ 72.814927, 19.12643 ], [ 72.8146528, 19.1266842 ], [ 72.8135392, 19.1289877 ], [ 72.8127132, 19.1300076 ], [ 72.8120313, 19.1312185 ], [ 72.8116063, 19.1317965 ], [ 72.810936, 19.1326481 ], [ 72.8106011, 19.1330373 ], [ 72.8102026, 19.1335168 ], [ 72.8095508, 19.1341916 ], [ 72.8087611, 19.1349776 ], [ 72.8083006, 19.1355344 ], [ 72.8078657, 19.1360504 ], [ 72.8069173, 19.1368136 ], [ 72.8055975, 19.1376097 ], [ 72.8045087, 19.1382786 ], [ 72.8037495, 19.1389451 ], [ 72.803417, 19.1390363 ], [ 72.8026335, 19.1383652 ], [ 72.8021777, 19.1376221 ], [ 72.8021619, 19.1371535 ], [ 72.801991, 19.1369571 ], [ 72.8019042, 19.1371788 ], [ 72.8017971, 19.1373734 ], [ 72.8017676, 19.1378529 ], [ 72.8019659, 19.1385016 ], [ 72.8021163, 19.1390967 ], [ 72.8019937, 19.1398971 ], [ 72.8020338, 19.1406348 ], [ 72.8021612, 19.1415655 ], [ 72.8024474, 19.1420911 ], [ 72.802698, 19.1422539 ], [ 72.8028818, 19.1426309 ], [ 72.8029998, 19.1428134 ], [ 72.8030395, 19.1429532 ], [ 72.803077, 19.1430211 ], [ 72.8031324, 19.1431334 ], [ 72.8033032, 19.1431929 ], [ 72.80345, 19.1432618 ], [ 72.8033447, 19.1434979 ], [ 72.8034269, 19.1435424 ], [ 72.8038303, 19.1432627 ], [ 72.8037154, 19.1433954 ], [ 72.8036945, 19.143455 ], [ 72.8037911, 19.1434753 ], [ 72.8033707, 19.1438785 ], [ 72.8034937, 19.144059 ], [ 72.80367, 19.1443113 ], [ 72.8042304, 19.1454598 ], [ 72.8026162, 19.1458698 ], [ 72.8025787, 19.1454923 ], [ 72.8025036, 19.1454315 ], [ 72.8025143, 19.1452794 ], [ 72.8025572, 19.1451071 ], [ 72.8025894, 19.1450159 ], [ 72.8027074, 19.1450058 ], [ 72.8027289, 19.1449348 ], [ 72.8025787, 19.1448335 ], [ 72.8024499, 19.1448031 ], [ 72.8023963, 19.1446916 ], [ 72.802289, 19.1446409 ], [ 72.802289, 19.144499 ], [ 72.8021174, 19.1443571 ], [ 72.802053, 19.1443977 ], [ 72.8019457, 19.144347 ], [ 72.801766, 19.1442729 ], [ 72.8004678, 19.1436546 ], [ 72.8003605, 19.1435431 ], [ 72.8001674, 19.1434316 ], [ 72.8000708, 19.1432897 ], [ 72.8000601, 19.143158 ], [ 72.7998885, 19.1430363 ], [ 72.7997704, 19.1428843 ], [ 72.799616, 19.1427894 ], [ 72.7994838, 19.142668 ], [ 72.7993402, 19.1425293 ], [ 72.7993842, 19.1420532 ], [ 72.7995988, 19.1421039 ], [ 72.7995129, 19.1423573 ], [ 72.7996095, 19.1423978 ], [ 72.7997919, 19.1423573 ], [ 72.7998777, 19.1420735 ], [ 72.7997061, 19.1417593 ], [ 72.7997812, 19.1415869 ], [ 72.7995773, 19.1413437 ], [ 72.7995129, 19.1411612 ], [ 72.7994335, 19.1409184 ], [ 72.799234, 19.1407355 ], [ 72.7991053, 19.1407862 ], [ 72.7990623, 19.1410092 ], [ 72.7990847, 19.1412057 ], [ 72.7990737, 19.1414077 ], [ 72.7990734, 19.1416885 ], [ 72.7992412, 19.1419674 ], [ 72.7992199, 19.1423894 ], [ 72.7989889, 19.1424252 ], [ 72.7989074, 19.1424321 ], [ 72.7985941, 19.1422698 ], [ 72.7980351, 19.1420041 ], [ 72.7976528, 19.1418821 ], [ 72.7972412, 19.1417939 ], [ 72.7968127, 19.1415579 ], [ 72.7964203, 19.1412994 ], [ 72.7961938, 19.141252 ], [ 72.7957006, 19.141145 ], [ 72.7947302, 19.1411359 ], [ 72.7946623, 19.1412454 ], [ 72.7941076, 19.1409411 ], [ 72.7941269, 19.1405704 ], [ 72.7944704, 19.1401578 ], [ 72.7948352, 19.1396308 ], [ 72.7953072, 19.1391949 ], [ 72.7956291, 19.1388807 ], [ 72.7957686, 19.1384854 ], [ 72.7958544, 19.1383334 ], [ 72.795833, 19.1379989 ], [ 72.7956828, 19.1377759 ], [ 72.7956291, 19.1376239 ], [ 72.7957042, 19.1374718 ], [ 72.7958115, 19.1373299 ], [ 72.7958651, 19.1371069 ], [ 72.7958437, 19.1368434 ], [ 72.7958973, 19.1366508 ], [ 72.7961119, 19.1364278 ], [ 72.7963265, 19.1362454 ], [ 72.7965732, 19.1359413 ], [ 72.7966698, 19.1356372 ], [ 72.7965196, 19.1353534 ], [ 72.7965089, 19.1350899 ], [ 72.7964981, 19.1348263 ], [ 72.7966162, 19.134725 ], [ 72.7967342, 19.1342993 ], [ 72.7967342, 19.1340256 ], [ 72.7966851, 19.1336776 ], [ 72.7965625, 19.1336201 ], [ 72.7963479, 19.1334073 ], [ 72.7963801, 19.1330322 ], [ 72.795833, 19.1330018 ], [ 72.7957793, 19.1332552 ], [ 72.7955862, 19.1332654 ], [ 72.7953287, 19.1330829 ], [ 72.7952858, 19.1327079 ], [ 72.7952858, 19.1322213 ], [ 72.7952107, 19.1317145 ], [ 72.794921, 19.1313192 ], [ 72.7946313, 19.1307313 ], [ 72.7944597, 19.1307313 ], [ 72.794524, 19.1308631 ], [ 72.7944811, 19.1309948 ], [ 72.7943846, 19.1310557 ], [ 72.7942665, 19.1309847 ], [ 72.7941485, 19.1307921 ], [ 72.793891, 19.1307921 ], [ 72.7937086, 19.1307313 ], [ 72.7936335, 19.1305083 ], [ 72.7936159, 19.1302943 ], [ 72.7933439, 19.1301839 ], [ 72.7931186, 19.1301738 ], [ 72.793022, 19.1303056 ], [ 72.7929791, 19.1301941 ], [ 72.7928718, 19.1301333 ], [ 72.7926143, 19.1301231 ], [ 72.7926572, 19.1304576 ], [ 72.7923461, 19.1300218 ], [ 72.7921208, 19.1301535 ], [ 72.7918526, 19.1299407 ], [ 72.7916016, 19.130149 ], [ 72.7916702, 19.1303461 ], [ 72.7918418, 19.1304779 ], [ 72.7917345, 19.1306502 ], [ 72.7916273, 19.1308428 ], [ 72.791477, 19.1309036 ], [ 72.7911766, 19.1309036 ], [ 72.7911552, 19.1307516 ], [ 72.7909299, 19.1307617 ], [ 72.7907904, 19.1308225 ], [ 72.7905329, 19.1307921 ], [ 72.7905828, 19.1309297 ], [ 72.7904471, 19.1310354 ], [ 72.7902754, 19.1310759 ], [ 72.7901038, 19.1310759 ], [ 72.7899214, 19.1310151 ], [ 72.789621, 19.1308935 ], [ 72.7893098, 19.1307212 ], [ 72.7891918, 19.130488 ], [ 72.7891274, 19.1302346 ], [ 72.7891489, 19.1299609 ], [ 72.7889558, 19.1299609 ], [ 72.7888163, 19.1299609 ], [ 72.7886768, 19.1299305 ], [ 72.7886232, 19.1297684 ], [ 72.7886554, 19.1294947 ], [ 72.7885481, 19.1294034 ], [ 72.7883979, 19.1294034 ], [ 72.7883442, 19.1295656 ], [ 72.7882584, 19.1296569 ], [ 72.7881082, 19.1296569 ], [ 72.7879794, 19.1295758 ], [ 72.7877327, 19.1295859 ], [ 72.7875718, 19.1294541 ], [ 72.787443, 19.1293426 ], [ 72.7873679, 19.1291906 ], [ 72.7871641, 19.128998 ], [ 72.7868958, 19.1291804 ], [ 72.7868958, 19.1293528 ], [ 72.7870568, 19.1294947 ], [ 72.7870675, 19.129667 ], [ 72.7870353, 19.1298799 ], [ 72.7869817, 19.1300724 ], [ 72.786928, 19.130265 ], [ 72.7872928, 19.1303765 ], [ 72.7873786, 19.1306097 ], [ 72.7876515, 19.1307375 ], [ 72.7879687, 19.1306401 ], [ 72.7880653, 19.1305387 ], [ 72.7881833, 19.1305387 ], [ 72.7882247, 19.1306688 ], [ 72.7883003, 19.1308186 ], [ 72.7883212, 19.1310723 ], [ 72.7882822, 19.1312419 ], [ 72.7882208, 19.131457 ], [ 72.788194, 19.1317551 ], [ 72.788076, 19.1320085 ], [ 72.7878829, 19.1321707 ], [ 72.7877649, 19.1323734 ], [ 72.7876254, 19.1324849 ], [ 72.7874645, 19.1325457 ], [ 72.7873143, 19.1324747 ], [ 72.7870568, 19.1322011 ], [ 72.7865513, 19.1320114 ], [ 72.7862822, 19.1318789 ], [ 72.7857388, 19.1320015 ], [ 72.7853454, 19.1325271 ], [ 72.7853068, 19.1329609 ], [ 72.7856037, 19.1331142 ], [ 72.785751, 19.133899 ], [ 72.7861142, 19.1341719 ], [ 72.7866675, 19.1356561 ], [ 72.7868925, 19.1367964 ], [ 72.7866176, 19.1373597 ], [ 72.7858062, 19.1383687 ], [ 72.7846636, 19.1373799 ], [ 72.7833284, 19.1385324 ], [ 72.7840338, 19.1397304 ], [ 72.7842441, 19.1400877 ], [ 72.7839915, 19.1412391 ], [ 72.7854913, 19.1434609 ], [ 72.7877371, 19.1446392 ], [ 72.7884074, 19.1447307 ], [ 72.788675, 19.1467646 ], [ 72.7886261, 19.1490259 ], [ 72.7883485, 19.1495375 ], [ 72.7883417, 19.1500522 ], [ 72.7880674, 19.1503064 ], [ 72.7877862, 19.1510752 ], [ 72.787096, 19.1520966 ], [ 72.7865543, 19.15209 ], [ 72.7864116, 19.1526031 ], [ 72.7857246, 19.153367 ], [ 72.7843687, 19.1534789 ], [ 72.7835477, 19.154113 ], [ 72.7838081, 19.1548885 ], [ 72.7839195, 19.1550313 ], [ 72.7839191, 19.1566917 ], [ 72.7837475, 19.1570686 ], [ 72.7835029, 19.1574589 ], [ 72.7818762, 19.1575676 ], [ 72.7810586, 19.1579442 ], [ 72.7810552, 19.1582017 ], [ 72.7815951, 19.1583364 ], [ 72.7816576, 19.1585807 ], [ 72.7818573, 19.1589835 ], [ 72.7821393, 19.1592174 ], [ 72.7823922, 19.1595048 ], [ 72.7829321, 19.1596398 ], [ 72.7835967, 19.160549 ], [ 72.7835829, 19.1615785 ], [ 72.7831703, 19.1620884 ], [ 72.7829739, 19.1624233 ], [ 72.7827593, 19.1627719 ], [ 72.7820727, 19.1629097 ], [ 72.7817723, 19.1632908 ], [ 72.7811972, 19.1636394 ], [ 72.7809826, 19.1638097 ], [ 72.7808539, 19.1656662 ], [ 72.780914, 19.1663148 ], [ 72.7811114, 19.1668256 ], [ 72.7811285, 19.1672472 ], [ 72.781202, 19.1674704 ], [ 72.7816006, 19.1680984 ], [ 72.7822767, 19.1681266 ], [ 72.7828253, 19.1676184 ], [ 72.7836863, 19.1676363 ], [ 72.7843232, 19.1669934 ], [ 72.7852055, 19.1663229 ], [ 72.7860638, 19.1664446 ], [ 72.7874886, 19.1673931 ], [ 72.7875058, 19.1681228 ], [ 72.7874162, 19.1687034 ], [ 72.7882304, 19.1685849 ], [ 72.7880877, 19.1690981 ], [ 72.7883211, 19.169274 ], [ 72.788776, 19.1693956 ], [ 72.7893511, 19.1695172 ], [ 72.7898401, 19.1697622 ], [ 72.7901075, 19.1700228 ], [ 72.7906475, 19.1701585 ], [ 72.7903663, 19.1709274 ], [ 72.7903578, 19.1715704 ], [ 72.7906252, 19.171831 ], [ 72.790896, 19.1718342 ], [ 72.7914413, 19.1715834 ], [ 72.791983, 19.17159 ], [ 72.7928015, 19.1715926 ], [ 72.7936169, 19.1716088 ], [ 72.7941319, 19.1716088 ], [ 72.7944086, 19.1725205 ], [ 72.7945353, 19.1736031 ], [ 72.7947872, 19.1745846 ], [ 72.7951447, 19.1761649 ], [ 72.795298, 19.1769074 ], [ 72.7960459, 19.1783132 ], [ 72.7962347, 19.1826097 ], [ 72.7961146, 19.1842796 ], [ 72.7961317, 19.1862252 ], [ 72.796003, 19.1880653 ], [ 72.7957455, 19.189265 ], [ 72.7956339, 19.1907241 ], [ 72.7956479, 19.1913269 ], [ 72.7961691, 19.1928779 ], [ 72.7963154, 19.1956122 ], [ 72.7964287, 19.1970384 ], [ 72.7938193, 19.1970985 ], [ 72.793471, 19.1964713 ], [ 72.793013, 19.1959289 ], [ 72.7926199, 19.1948945 ], [ 72.7920884, 19.1941158 ], [ 72.7912072, 19.1930584 ], [ 72.7894723, 19.1927068 ], [ 72.7888286, 19.1927311 ], [ 72.78829, 19.1928101 ], [ 72.7874993, 19.1929337 ], [ 72.7868341, 19.1930148 ], [ 72.786347, 19.1931154 ], [ 72.7851948, 19.193003 ], [ 72.7849566, 19.1926858 ], [ 72.7839695, 19.1928884 ], [ 72.7832571, 19.1935369 ], [ 72.7823988, 19.1928884 ], [ 72.7820654, 19.1939949 ], [ 72.7815063, 19.1952751 ], [ 72.7815027, 19.1955326 ], [ 72.7813163, 19.1958904 ], [ 72.7811253, 19.1976959 ], [ 72.781091, 19.2008754 ], [ 72.7818956, 19.2017508 ], [ 72.7832035, 19.2016302 ], [ 72.7840875, 19.2018714 ], [ 72.784727, 19.202301 ], [ 72.78486, 19.203305 ], [ 72.7843225, 19.2037954 ], [ 72.7836648, 19.204453 ], [ 72.7826466, 19.2049271 ], [ 72.7817915, 19.2040933 ], [ 72.7789795, 19.2040183 ], [ 72.77538, 19.2052321 ], [ 72.7751279, 19.2081237 ], [ 72.7774324, 19.2075614 ], [ 72.7786416, 19.2099939 ], [ 72.7813002, 19.2113853 ], [ 72.7814719, 19.2128928 ], [ 72.7815405, 19.2138411 ], [ 72.7815663, 19.2151784 ], [ 72.781077, 19.2167589 ], [ 72.7804247, 19.2176504 ], [ 72.779678, 19.2177558 ], [ 72.7791373, 19.2183231 ], [ 72.7788969, 19.2191741 ], [ 72.7788969, 19.2199846 ], [ 72.7784249, 19.220098 ], [ 72.7777781, 19.2207142 ], [ 72.7773091, 19.221257 ], [ 72.776684, 19.221473 ], [ 72.7765108, 19.2221242 ], [ 72.7761675, 19.2231372 ], [ 72.7762251, 19.2253288 ], [ 72.7767532, 19.2263647 ], [ 72.7775408, 19.226768 ], [ 72.77797, 19.2271975 ], [ 72.7785107, 19.228089 ], [ 72.7788798, 19.228551 ], [ 72.7792403, 19.2292236 ], [ 72.7795519, 19.2298735 ], [ 72.7804912, 19.2305287 ], [ 72.7804772, 19.2315582 ], [ 72.7802273, 19.2321573 ], [ 72.7802016, 19.2328705 ], [ 72.7797982, 19.2345075 ], [ 72.7795836, 19.2353341 ], [ 72.7794119, 19.2359013 ], [ 72.7789828, 19.2364119 ], [ 72.7787081, 19.2368414 ], [ 72.7784678, 19.2373843 ], [ 72.7784935, 19.2378057 ], [ 72.7797381, 19.2381056 ], [ 72.7804247, 19.238916 ], [ 72.7807509, 19.2396291 ], [ 72.7810427, 19.2405367 ], [ 72.7808968, 19.2411283 ], [ 72.7807852, 19.2416145 ], [ 72.7804676, 19.2418981 ], [ 72.7805995, 19.2426285 ], [ 72.7810255, 19.2434216 ], [ 72.7815241, 19.2444418 ], [ 72.7816488, 19.2452156 ], [ 72.7822958, 19.247684 ], [ 72.7827421, 19.2513466 ], [ 72.7826563, 19.2541178 ], [ 72.7821413, 19.2568728 ], [ 72.7816435, 19.257278 ], [ 72.7815834, 19.2580721 ], [ 72.7813002, 19.2588337 ], [ 72.7809569, 19.2593847 ], [ 72.7806994, 19.259644 ], [ 72.7810427, 19.2598871 ], [ 72.7814547, 19.2600734 ], [ 72.781584, 19.2601447 ], [ 72.782126, 19.2601513 ], [ 72.7830168, 19.260357 ], [ 72.7833601, 19.2608837 ], [ 72.7838579, 19.2617345 ], [ 72.7845274, 19.263274 ], [ 72.7842515, 19.26371 ], [ 72.7841442, 19.2638011 ], [ 72.7841228, 19.2639328 ], [ 72.7839726, 19.2639733 ], [ 72.7838331, 19.2641455 ], [ 72.7837549, 19.2643921 ], [ 72.7838653, 19.2645911 ], [ 72.7837473, 19.2647127 ], [ 72.7837151, 19.2648545 ], [ 72.7838438, 19.2650368 ], [ 72.783994, 19.2650469 ], [ 72.7842193, 19.2650266 ], [ 72.7844339, 19.2649861 ], [ 72.7846056, 19.2649557 ], [ 72.7846914, 19.2650266 ], [ 72.7848094, 19.2651077 ], [ 72.7849811, 19.2651381 ], [ 72.7851849, 19.2651887 ], [ 72.7853888, 19.2652596 ], [ 72.7854853, 19.2654318 ], [ 72.7854853, 19.2656343 ], [ 72.7854531, 19.2659888 ], [ 72.7854317, 19.2661812 ], [ 72.7853137, 19.2663939 ], [ 72.7851527, 19.2664952 ], [ 72.7849811, 19.2664851 ], [ 72.7848416, 19.2664041 ], [ 72.7846377, 19.2663129 ], [ 72.784391, 19.2663332 ], [ 72.7842301, 19.2665762 ], [ 72.7842193, 19.266799 ], [ 72.7841013, 19.2670928 ], [ 72.7838891, 19.2675088 ], [ 72.7837151, 19.2679739 ], [ 72.7836078, 19.2683385 ], [ 72.7835112, 19.2687132 ], [ 72.7833825, 19.2689765 ], [ 72.783243, 19.2691487 ], [ 72.7831035, 19.2691386 ], [ 72.7829641, 19.269017 ], [ 72.7826958, 19.2689259 ], [ 72.782492, 19.2689867 ], [ 72.7822989, 19.2689765 ], [ 72.7822023, 19.2690677 ], [ 72.7821057, 19.2692399 ], [ 72.7818912, 19.2693108 ], [ 72.781741, 19.2695032 ], [ 72.7815693, 19.2696754 ], [ 72.7814513, 19.2698171 ], [ 72.781344, 19.2699488 ], [ 72.7811723, 19.2700602 ], [ 72.7810329, 19.2701108 ], [ 72.7810114, 19.2703134 ], [ 72.7810758, 19.2705261 ], [ 72.7812367, 19.2707185 ], [ 72.7813762, 19.2708704 ], [ 72.7815264, 19.2708502 ], [ 72.7815157, 19.2709413 ], [ 72.7815157, 19.2710628 ], [ 72.7815157, 19.2712249 ], [ 72.7815371, 19.2713667 ], [ 72.7815693, 19.271468 ], [ 72.7814942, 19.2715794 ], [ 72.7813333, 19.2715692 ], [ 72.7812904, 19.2716401 ], [ 72.7813333, 19.271711 ], [ 72.7813011, 19.2717819 ], [ 72.7811938, 19.2719136 ], [ 72.7809578, 19.272268 ], [ 72.7808505, 19.2726124 ], [ 72.7807754, 19.2729162 ], [ 72.780829, 19.2732099 ], [ 72.7807539, 19.2734935 ], [ 72.7806574, 19.2737467 ], [ 72.7805608, 19.2738378 ], [ 72.7803891, 19.2738176 ], [ 72.7801531, 19.2737467 ], [ 72.7800458, 19.2738378 ], [ 72.7801769, 19.274028 ], [ 72.7804642, 19.2741112 ], [ 72.7806895, 19.2741821 ], [ 72.780711, 19.2742834 ], [ 72.7806681, 19.2744353 ], [ 72.7806359, 19.2746278 ], [ 72.7805715, 19.2748809 ], [ 72.780432, 19.2754582 ], [ 72.7803355, 19.2759139 ], [ 72.7802067, 19.2761671 ], [ 72.7800565, 19.2764608 ], [ 72.7799171, 19.2766431 ], [ 72.7798205, 19.276795 ], [ 72.7797239, 19.2769469 ], [ 72.7795845, 19.2770279 ], [ 72.7795094, 19.2770988 ], [ 72.7795308, 19.2772204 ], [ 72.7795416, 19.2773925 ], [ 72.7794557, 19.2772811 ], [ 72.7793592, 19.2772204 ], [ 72.7792841, 19.277271 ], [ 72.7792626, 19.2773723 ], [ 72.7793055, 19.2775039 ], [ 72.7793913, 19.2776052 ], [ 72.7793484, 19.2776963 ], [ 72.7792353, 19.2776057 ], [ 72.7792197, 19.2777368 ], [ 72.7792411, 19.2778989 ], [ 72.7792626, 19.2780305 ], [ 72.7792948, 19.2781824 ], [ 72.779209, 19.2783749 ], [ 72.7791982, 19.2785572 ], [ 72.7790943, 19.2786032 ], [ 72.7789837, 19.2786888 ], [ 72.7788334, 19.2787091 ], [ 72.7787798, 19.2786179 ], [ 72.7786725, 19.2785673 ], [ 72.7786189, 19.2786382 ], [ 72.7787047, 19.2788002 ], [ 72.7788442, 19.2789319 ], [ 72.7790158, 19.2789926 ], [ 72.7790802, 19.2790939 ], [ 72.7791768, 19.2792154 ], [ 72.7792519, 19.2793572 ], [ 72.7792948, 19.2794483 ], [ 72.779445, 19.2795192 ], [ 72.779563, 19.27958 ], [ 72.7796596, 19.279499 ], [ 72.7797669, 19.2794889 ], [ 72.7798634, 19.2796104 ], [ 72.7800243, 19.2797117 ], [ 72.7801102, 19.2795901 ], [ 72.7802175, 19.2796306 ], [ 72.7803462, 19.279499 ], [ 72.7804213, 19.27958 ], [ 72.7805179, 19.2796509 ], [ 72.7806359, 19.2795294 ], [ 72.7807646, 19.2794281 ], [ 72.7808612, 19.2792661 ], [ 72.781065, 19.2792559 ], [ 72.7812229, 19.2792494 ], [ 72.7813762, 19.279185 ], [ 72.7815908, 19.2792661 ], [ 72.781741, 19.2793977 ], [ 72.7818697, 19.2794686 ], [ 72.7818912, 19.2793066 ], [ 72.7819555, 19.2792256 ], [ 72.7820736, 19.2791445 ], [ 72.7822881, 19.2789622 ], [ 72.7825027, 19.2787698 ], [ 72.7826422, 19.2788205 ], [ 72.7827387, 19.2789217 ], [ 72.7828138, 19.2790331 ], [ 72.7827602, 19.2791445 ], [ 72.7829319, 19.2793876 ], [ 72.7831464, 19.2797015 ], [ 72.7833825, 19.2800762 ], [ 72.7840296, 19.2812606 ], [ 72.7836005, 19.2822004 ], [ 72.783712, 19.2837154 ], [ 72.7838837, 19.2849549 ], [ 72.7836863, 19.2862511 ], [ 72.7839695, 19.2880334 ], [ 72.7843987, 19.2904638 ], [ 72.7844244, 19.2931128 ], [ 72.7842871, 19.2992857 ], [ 72.7847163, 19.3003955 ], [ 72.7843901, 19.3016106 ], [ 72.7850624, 19.3038182 ], [ 72.7858063, 19.3043648 ], [ 72.7862489, 19.3062786 ], [ 72.7869183, 19.3069297 ], [ 72.7874587, 19.3070654 ], [ 72.7875868, 19.3075818 ], [ 72.7878544, 19.3078426 ], [ 72.7879835, 19.3083589 ], [ 72.7890627, 19.3087577 ], [ 72.7901368, 19.3095428 ], [ 72.7912211, 19.3095561 ], [ 72.7914887, 19.3098167 ], [ 72.7931119, 19.3100938 ], [ 72.793666, 19.3092 ], [ 72.7937113, 19.3083178 ], [ 72.7940375, 19.3080181 ], [ 72.7942289, 19.3076623 ], [ 72.7947033, 19.3070655 ], [ 72.7949965, 19.3060662 ], [ 72.7957517, 19.3051622 ], [ 72.7996076, 19.3036226 ], [ 72.8031916, 19.3027828 ], [ 72.8070475, 19.3027361 ], [ 72.8099148, 19.301873 ], [ 72.8139437, 19.3018963 ], [ 72.8161929, 19.302013 ], [ 72.8170086, 19.3025728 ], [ 72.8175277, 19.3036692 ], [ 72.81864, 19.304509 ], [ 72.8205679, 19.3056054 ], [ 72.8227925, 19.3070284 ], [ 72.8241766, 19.3081248 ], [ 72.8272663, 19.3109007 ], [ 72.8293178, 19.3123002 ], [ 72.8318143, 19.3132566 ], [ 72.8335939, 19.3135132 ], [ 72.8358185, 19.3143296 ], [ 72.8376476, 19.3155193 ], [ 72.8387598, 19.3165689 ], [ 72.8406383, 19.3177819 ], [ 72.8430112, 19.3185983 ], [ 72.8453346, 19.3187849 ], [ 72.8487209, 19.3185749 ], [ 72.8505005, 19.3184816 ], [ 72.8515673, 19.3185143 ], [ 72.8530596, 19.3184037 ], [ 72.8531972, 19.3182761 ], [ 72.8561863, 19.3177965 ], [ 72.857276, 19.3174956 ], [ 72.8578279, 19.3166577 ], [ 72.8589325, 19.3161429 ], [ 72.8605508, 19.3157883 ], [ 72.8616453, 19.3150289 ], [ 72.8646442, 19.3137768 ], [ 72.8657421, 19.31276 ], [ 72.8662876, 19.312509 ], [ 72.8671108, 19.3117464 ], [ 72.8677931, 19.3113686 ], [ 72.8679358, 19.3108554 ], [ 72.8684798, 19.3107326 ], [ 72.8703909, 19.3097252 ], [ 72.8712108, 19.30922 ], [ 72.8720341, 19.3084572 ], [ 72.8747652, 19.3069447 ], [ 72.8757251, 19.3060552 ], [ 72.8761405, 19.305416 ], [ 72.8780515, 19.3044087 ], [ 72.8788748, 19.3036458 ], [ 72.8802369, 19.3031469 ], [ 72.8810568, 19.3026415 ], [ 72.8818767, 19.3021361 ], [ 72.8832486, 19.3008649 ], [ 72.8837941, 19.3006139 ], [ 72.8856629, 19.29981 ], [ 72.8865641, 19.2990404 ], [ 72.8868646, 19.2986354 ], [ 72.8869504, 19.2980886 ], [ 72.8869289, 19.297643 ], [ 72.8871006, 19.2979468 ], [ 72.887122, 19.2985139 ], [ 72.8873366, 19.2987164 ], [ 72.8876585, 19.2986354 ], [ 72.8879804, 19.2982303 ], [ 72.8884423, 19.2975786 ], [ 72.888903, 19.2971975 ], [ 72.8894395, 19.2967317 ], [ 72.8896865, 19.2956627 ], [ 72.8902386, 19.2948968 ], [ 72.8907907, 19.2941308 ], [ 72.8912027, 19.2937491 ], [ 72.8917464, 19.2936271 ], [ 72.891753, 19.2931123 ], [ 72.8922951, 19.2931185 ], [ 72.8923017, 19.2926037 ], [ 72.8928456, 19.2924809 ], [ 72.8938054, 19.2915914 ], [ 72.8939479, 19.2910781 ], [ 72.8953066, 19.2908364 ], [ 72.8955909, 19.2898099 ], [ 72.8969511, 19.2894391 ], [ 72.8972255, 19.2891847 ], [ 72.8985875, 19.2886856 ], [ 72.8988619, 19.2884313 ], [ 72.9007676, 19.2878101 ], [ 72.9004899, 19.2883217 ], [ 72.9018453, 19.2883374 ], [ 72.9019868, 19.2878241 ], [ 72.9023988, 19.2874423 ], [ 72.9032153, 19.2871942 ], [ 72.9048434, 19.2870847 ], [ 72.907012, 19.2871095 ], [ 72.9068793, 19.2868506 ], [ 72.9070316, 19.2855652 ], [ 72.9078449, 19.2855744 ], [ 72.9078547, 19.2848024 ], [ 72.9067704, 19.2847899 ], [ 72.906519, 19.2832424 ], [ 72.9070628, 19.2831195 ], [ 72.9076115, 19.2826109 ], [ 72.9081552, 19.2824888 ], [ 72.9083, 19.2817183 ], [ 72.908712, 19.2813363 ], [ 72.9096683, 19.2807041 ], [ 72.910639, 19.2799353 ], [ 72.9113176, 19.2789211 ], [ 72.9118728, 19.2778976 ], [ 72.9122954, 19.2761291 ], [ 72.9124263, 19.275942 ], [ 72.9126532, 19.2755708 ], [ 72.9130367, 19.2748419 ], [ 72.9139534, 19.2741881 ], [ 72.9142246, 19.2741913 ], [ 72.9143578, 19.2743219 ], [ 72.9144776, 19.2756105 ], [ 72.9150197, 19.2756168 ], [ 72.9150263, 19.2751019 ], [ 72.9155667, 19.2752363 ], [ 72.9159679, 19.2756275 ], [ 72.9160974, 19.2761439 ], [ 72.9166456, 19.2767948 ], [ 72.917424, 19.2773138 ], [ 72.9182219, 19.2781931 ], [ 72.9189818, 19.2789914 ], [ 72.9197801, 19.2792738 ], [ 72.9199817, 19.2797922 ], [ 72.9184718, 19.2813197 ], [ 72.9176619, 19.281053 ], [ 72.9175423, 19.2797644 ], [ 72.9174104, 19.2795054 ], [ 72.9141594, 19.2793391 ], [ 72.9136139, 19.2795903 ], [ 72.9125183, 19.2804794 ], [ 72.9120981, 19.2815043 ], [ 72.9118075, 19.2830456 ], [ 72.9101615, 19.2845712 ], [ 72.9101516, 19.2853435 ], [ 72.9104194, 19.2856039 ], [ 72.9109452, 19.286897 ], [ 72.9113474, 19.2872875 ], [ 72.9129673, 19.2878209 ], [ 72.9145939, 19.2878394 ], [ 72.9151393, 19.2875882 ], [ 72.9194748, 19.2877668 ], [ 72.9196164, 19.2872535 ], [ 72.919754, 19.2871259 ], [ 72.9202977, 19.2870038 ], [ 72.9205818, 19.2859774 ], [ 72.9219437, 19.285478 ], [ 72.9220496, 19.2877961 ], [ 72.9227228, 19.2881894 ], [ 72.9240684, 19.2889772 ], [ 72.9267793, 19.289008 ], [ 72.9275958, 19.2887596 ], [ 72.9281444, 19.288251 ], [ 72.9286882, 19.2881289 ], [ 72.9286946, 19.2876141 ], [ 72.9295094, 19.2874943 ], [ 72.9297838, 19.2872399 ], [ 72.9324977, 19.2870133 ], [ 72.9326345, 19.2868865 ], [ 72.9327768, 19.2863733 ], [ 72.9333191, 19.2863794 ], [ 72.9333255, 19.2858647 ], [ 72.9335965, 19.2858678 ], [ 72.9337252, 19.2863841 ], [ 72.9338596, 19.2865138 ], [ 72.9346729, 19.286523 ], [ 72.9352181, 19.2862718 ], [ 72.9365736, 19.2862871 ], [ 72.9390004, 19.2873442 ], [ 72.9395843, 19.2876087 ], [ 72.9400783, 19.2878712 ], [ 72.9408849, 19.2883952 ], [ 72.941695, 19.2886617 ], [ 72.9424986, 19.2894431 ], [ 72.9435765, 19.2899702 ], [ 72.9443801, 19.2907515 ], [ 72.9451869, 19.2912754 ], [ 72.9459985, 19.2914138 ], [ 72.9463918, 19.292448 ], [ 72.9469244, 19.2932263 ], [ 72.9478624, 19.2941374 ], [ 72.9497602, 19.2941586 ], [ 72.9503071, 19.2937791 ], [ 72.9503007, 19.2942939 ], [ 72.957341, 19.2950159 ], [ 72.963305, 19.2950826 ], [ 72.9643958, 19.2945799 ], [ 72.9673874, 19.2938409 ], [ 72.9676617, 19.2935865 ], [ 72.9695689, 19.2928354 ], [ 72.9703884, 19.2923297 ], [ 72.9712081, 19.2918239 ], [ 72.9739507, 19.28928 ], [ 72.9758609, 19.2882715 ], [ 72.9765492, 19.2873784 ], [ 72.977643, 19.2866183 ], [ 72.9783322, 19.2857243 ], [ 72.9788777, 19.2854729 ], [ 72.9795626, 19.2848375 ], [ 72.9799777, 19.2841979 ], [ 72.9821621, 19.2829348 ], [ 72.9829849, 19.2821717 ], [ 72.9843496, 19.2814143 ], [ 72.9854466, 19.2803968 ], [ 72.9864027, 19.2797642 ], [ 72.9872347, 19.2782287 ], [ 72.9877832, 19.2777198 ], [ 72.9877894, 19.2772049 ], [ 72.9883441, 19.2761813 ], [ 72.9886341, 19.2746398 ], [ 72.9886467, 19.2736103 ], [ 72.9883787, 19.2733499 ], [ 72.9884322, 19.268974 ], [ 72.9890026, 19.2666633 ], [ 72.9890151, 19.2656336 ], [ 72.9892923, 19.2651218 ], [ 72.9892988, 19.264607 ], [ 72.990137, 19.2625567 ], [ 72.9904112, 19.2623023 ], [ 72.9906915, 19.2615331 ], [ 72.9915205, 19.2602548 ], [ 72.9915267, 19.25974 ], [ 72.992075, 19.2592312 ], [ 72.9931937, 19.2564117 ], [ 72.9936053, 19.2560296 ], [ 72.9941491, 19.2559073 ], [ 72.9941553, 19.2553924 ], [ 72.9946974, 19.2553983 ], [ 72.995683, 19.2523199 ], [ 72.9956892, 19.251805 ], [ 72.9968047, 19.2492428 ], [ 72.9975212, 19.2455723 ], [ 72.9976887, 19.2455916 ], [ 72.9978967, 19.2453163 ], [ 72.998356, 19.2438638 ], [ 72.9984913, 19.2430752 ], [ 72.9987892, 19.2420562 ], [ 72.9993375, 19.2415473 ], [ 72.999624, 19.2402632 ], [ 72.9994061, 19.2358842 ], [ 72.9996834, 19.2353724 ], [ 72.9999886, 19.2325439 ], [ 73.0002627, 19.2322895 ], [ 73.0005524, 19.230748 ], [ 73.0014458, 19.2283899 ], [ 73.0008983, 19.224573 ], [ 73.001584, 19.2239364 ], [ 73.0021258, 19.2239423 ], [ 73.0022593, 19.2240731 ], [ 73.0024927, 19.2236482 ], [ 73.0026724, 19.2235626 ], [ 73.0026664, 19.2240774 ], [ 73.0029372, 19.2240804 ], [ 73.0033556, 19.2230551 ], [ 73.0033589, 19.2227977 ], [ 73.0020319, 19.2204662 ], [ 73.0016446, 19.2189173 ], [ 73.0005654, 19.2185189 ], [ 73.0002974, 19.2182587 ], [ 72.9981391, 19.2174628 ], [ 72.9975972, 19.2174567 ], [ 72.9970584, 19.2171935 ], [ 72.9954466, 19.2160177 ], [ 72.9947936, 19.2139512 ], [ 72.9946273, 19.2088545 ], [ 72.9941886, 19.2080232 ], [ 72.994062, 19.2072496 ], [ 72.9935263, 19.2067287 ], [ 72.9931066, 19.2061398 ], [ 72.9923232, 19.2054284 ], [ 72.9921024, 19.205005 ], [ 72.9916475, 19.204616 ], [ 72.9909839, 19.2041266 ], [ 72.9907892, 19.2037892 ], [ 72.9904498, 19.2034766 ], [ 72.9896322, 19.2030919 ], [ 72.9888699, 19.2028668 ], [ 72.9883736, 19.2025914 ], [ 72.9880684, 19.202233 ], [ 72.9869573, 19.200993 ], [ 72.9867981, 19.2004903 ], [ 72.9864311, 19.1997 ], [ 72.9861715, 19.1991366 ], [ 72.9856339, 19.198404 ], [ 72.985304, 19.1978554 ], [ 72.9847657, 19.1970678 ], [ 72.9843751, 19.1967787 ], [ 72.983995, 19.1963401 ], [ 72.9835411, 19.1957917 ], [ 72.983235, 19.195044 ], [ 72.9829183, 19.194077 ], [ 72.9825382, 19.1934589 ], [ 72.9821582, 19.1930501 ], [ 72.982021, 19.1927012 ], [ 72.9818837, 19.1922027 ], [ 72.9819154, 19.1916444 ], [ 72.9817993, 19.1903084 ], [ 72.9817993, 19.1898664 ], [ 72.9817993, 19.1893513 ], [ 72.9815248, 19.1887332 ], [ 72.9810075, 19.188125 ], [ 72.9807753, 19.1878458 ], [ 72.9809653, 19.1874171 ], [ 72.9809336, 19.1871878 ], [ 72.980902, 19.1867491 ], [ 72.9809125, 19.186111 ], [ 72.9810287, 19.1854331 ], [ 72.9809864, 19.1849844 ], [ 72.980997, 19.1843363 ], [ 72.9813559, 19.1840572 ], [ 72.9820421, 19.1836783 ], [ 72.9826966, 19.1832895 ], [ 72.9831505, 19.182781 ], [ 72.9834039, 19.1815247 ], [ 72.983509, 19.1800735 ], [ 72.9829812, 19.1758859 ], [ 72.98182, 19.1725456 ], [ 72.9803421, 19.1676099 ], [ 72.9790392, 19.1588468 ], [ 72.9786803, 19.1552632 ], [ 72.9771936, 19.1481442 ], [ 72.9737383, 19.1393637 ], [ 72.9705341, 19.131917 ], [ 72.9655998, 19.1221693 ], [ 72.9617548, 19.1139348 ], [ 72.9590633, 19.1046099 ], [ 72.957956249043903, 19.0995344 ], [ 72.957731, 19.0985017 ], [ 72.9567564, 19.0940127 ], [ 72.9556747, 19.0868523 ], [ 72.9555516, 19.0810773 ], [ 72.9562899, 19.076271 ], [ 72.9574382, 19.0722786 ], [ 72.9580124, 19.070263 ], [ 72.958666, 19.0684468 ], [ 72.9599549, 19.0659184 ], [ 72.9608019, 19.0639756 ], [ 72.9613663, 19.063338 ], [ 72.9619471, 19.0606809 ], [ 72.9620901, 19.0572704 ], [ 72.9616946, 19.0570547 ], [ 72.9611545, 19.056911 ], [ 72.9612014, 19.0567515 ], [ 72.961461, 19.0556034 ], [ 72.9617485, 19.0555158 ], [ 72.9621786, 19.0555597 ], [ 72.9619745, 19.0544637 ], [ 72.9620261, 19.0477651 ], [ 72.9607023, 19.0409851 ], [ 72.9594597, 19.0363162 ], [ 72.9571604, 19.031669 ], [ 72.9540801, 19.0271973 ], [ 72.9503703, 19.0233395 ], [ 72.9435526, 19.018789 ], [ 72.9381407, 19.0153335 ], [ 72.9301767, 19.0093351 ], [ 72.9259409, 19.0063278 ], [ 72.9211873, 19.0024338 ], [ 72.9175982, 19.0011035 ], [ 72.9133062, 18.9985188 ], [ 72.9102648, 18.9974473 ], [ 72.9071178, 18.9958425 ], [ 72.9061652, 18.9962502 ], [ 72.9049995, 18.9956034 ], [ 72.9047359, 18.9954693 ], [ 72.9044688, 18.9948928 ], [ 72.9046196, 18.9936072 ], [ 72.9056539, 18.9907597 ], [ 72.9065834, 18.9910811 ], [ 72.9067073, 18.9906457 ], [ 72.9049312, 18.9902301 ], [ 72.9049352, 18.9904062 ], [ 72.9053282, 18.9905633 ], [ 72.9043652, 18.9932696 ], [ 72.9013735, 18.9936154 ], [ 72.8969769, 18.9957871 ], [ 72.8951995, 18.9960162 ], [ 72.8945139, 18.9961551 ], [ 72.8860744, 18.9944109 ], [ 72.8860172, 18.9945267 ], [ 72.8859519, 18.9966258 ], [ 72.8857724, 18.9970272 ], [ 72.8856091, 18.9994427 ], [ 72.8853806, 19.0004382 ], [ 72.884597, 19.0018582 ], [ 72.8842216, 19.0024293 ], [ 72.883691, 19.0025296 ], [ 72.8835033, 19.0029155 ], [ 72.8837972, 19.0033708 ], [ 72.8835768, 19.0039418 ], [ 72.8837155, 19.0051226 ], [ 72.8840502, 19.0069901 ], [ 72.8842216, 19.0084409 ], [ 72.88374, 19.008657 ], [ 72.8831687, 19.008518 ], [ 72.8823851, 19.0075226 ], [ 72.8813975, 19.0072988 ], [ 72.8796345, 19.0066737 ], [ 72.8793734, 19.0067277 ], [ 72.879202, 19.0068975 ], [ 72.8789081, 19.0068358 ], [ 72.8788836, 19.0058943 ], [ 72.8785735, 19.0055779 ], [ 72.8778634, 19.0057013 ], [ 72.8765085, 19.0058325 ], [ 72.8754801, 19.0056165 ], [ 72.8736273, 19.0057862 ], [ 72.8727458, 19.0063573 ], [ 72.8717909, 19.0060949 ], [ 72.8715623, 19.0052538 ], [ 72.8712114, 19.0033399 ], [ 72.8710971, 19.0029155 ], [ 72.8710236, 19.0029463 ], [ 72.8707788, 19.0039033 ], [ 72.8702809, 19.0044898 ], [ 72.8692525, 19.0044126 ], [ 72.8685342, 19.003664 ], [ 72.8677017, 19.0033939 ], [ 72.8664692, 19.0041579 ], [ 72.8659387, 19.00432 ], [ 72.8658734, 19.0040422 ], [ 72.8654653, 19.0029695 ], [ 72.8649021, 19.0027688 ], [ 72.8645348, 19.0027071 ], [ 72.8641676, 19.0018968 ], [ 72.8634167, 19.0017502 ], [ 72.8623801, 19.001974 ], [ 72.8620944, 19.0018196 ], [ 72.8610333, 19.0019817 ], [ 72.8612456, 19.001318 ], [ 72.8618332, 19.000554 ], [ 72.8617843, 18.99908 ], [ 72.8614823, 18.9974053 ], [ 72.8614496, 18.9966336 ], [ 72.8609436, 18.9964483 ], [ 72.8611313, 18.9958772 ], [ 72.8620944, 18.9954296 ], [ 72.8620209, 18.9952521 ], [ 72.8610742, 18.995638 ], [ 72.8607069, 18.9947891 ], [ 72.8609681, 18.9944727 ], [ 72.861066, 18.9940636 ], [ 72.8608048, 18.9937704 ], [ 72.8600216, 18.9933142 ], [ 72.8598094, 18.9928128 ], [ 72.8588549, 18.9922947 ], [ 72.8576088, 18.9919688 ], [ 72.8571845, 18.9918685 ], [ 72.8570519, 18.9915442 ], [ 72.857695937382815, 18.98990915 ], [ 72.8587577, 18.9872136 ], [ 72.8590052, 18.9871634 ], [ 72.8596592, 18.9855338 ], [ 72.8596062, 18.9852162 ], [ 72.860197, 18.9839269 ], [ 72.8612224, 18.9816483 ], [ 72.860817, 18.9814888 ], [ 72.860817, 18.9812882 ], [ 72.8575943, 18.9783078 ], [ 72.8556313, 18.9777727 ], [ 72.8553365, 18.9766719 ], [ 72.8558788, 18.9756284 ], [ 72.8558658, 18.9753264 ], [ 72.8553362, 18.9745426 ], [ 72.8541324, 18.9737212 ], [ 72.8542804, 18.9726932 ], [ 72.8539961, 18.9720705 ], [ 72.8535498, 18.9719325 ], [ 72.8518127, 18.9721857 ], [ 72.8511583, 18.9724004 ], [ 72.8503024, 18.9722767 ], [ 72.8500367, 18.9720144 ], [ 72.84983, 18.9716118 ], [ 72.850417, 18.9709585 ], [ 72.8506789, 18.9704273 ], [ 72.8506789, 18.9703578 ], [ 72.8507792, 18.970347 ], [ 72.850722, 18.9691471 ], [ 72.850661, 18.9691241 ], [ 72.8506662, 18.9689049 ], [ 72.8507217, 18.9688998 ], [ 72.8507972, 18.9688317 ], [ 72.852087, 18.9687562 ], [ 72.8521903, 18.968679 ], [ 72.8521375, 18.9679684 ], [ 72.8522383, 18.9679616 ], [ 72.8522311, 18.9678004 ], [ 72.8508531, 18.9678708 ], [ 72.8508051, 18.9678413 ], [ 72.8508023, 18.9678397 ], [ 72.8507698, 18.9677567 ], [ 72.851002, 18.9677041 ], [ 72.8509522, 18.9675013 ], [ 72.8509155, 18.9673485 ], [ 72.8510398, 18.9672771 ], [ 72.8509449, 18.9671126 ], [ 72.8504664, 18.9670527 ], [ 72.8503359, 18.9664768 ], [ 72.8503913, 18.9664656 ], [ 72.8503531, 18.9662989 ], [ 72.8502568, 18.9658785 ], [ 72.8500947, 18.9659159 ], [ 72.8500285, 18.9658781 ], [ 72.8499616, 18.9656452 ], [ 72.849958, 18.9655389 ], [ 72.8498959, 18.9652993 ], [ 72.8498472, 18.965129 ], [ 72.8497226, 18.9649412 ], [ 72.8496738, 18.9648676 ], [ 72.8494964, 18.9642133 ], [ 72.8492494, 18.9633356 ], [ 72.8491173, 18.9627826 ], [ 72.8487832, 18.9612622 ], [ 72.8481686, 18.9586665 ], [ 72.8480206, 18.9581529 ], [ 72.847972, 18.9579749 ], [ 72.8494037, 18.9574505 ], [ 72.8495253, 18.9574359 ], [ 72.8503803, 18.9579291 ], [ 72.850619, 18.9588255 ], [ 72.8509637, 18.9587419 ], [ 72.8507029, 18.9576679 ], [ 72.8503384, 18.9577326 ], [ 72.8496932, 18.9573837 ], [ 72.8493441, 18.9558415 ], [ 72.8489817, 18.9559167 ], [ 72.849291, 18.9572123 ], [ 72.8492115, 18.9573147 ], [ 72.8490988, 18.957392 ], [ 72.8479499, 18.9577953 ], [ 72.8471942, 18.9546796 ], [ 72.8471014, 18.9545626 ], [ 72.8469291, 18.9544497 ], [ 72.8468782, 18.954247 ], [ 72.8471169, 18.9541906 ], [ 72.8471434, 18.95413 ], [ 72.847108, 18.9540464 ], [ 72.8470417, 18.954036 ], [ 72.8468716, 18.9540652 ], [ 72.8468451, 18.9538019 ], [ 72.8468981, 18.9536097 ], [ 72.8468893, 18.9534529 ], [ 72.8466175, 18.9523934 ], [ 72.8464673, 18.9522513 ], [ 72.8463572, 18.9521839 ], [ 72.8462955, 18.9519485 ], [ 72.8466264, 18.9520361 ], [ 72.8466794, 18.9520068 ], [ 72.846686, 18.9519212 ], [ 72.8466286, 18.9518522 ], [ 72.8464849, 18.9518188 ], [ 72.8461712, 18.9505691 ], [ 72.8464894, 18.9504897 ], [ 72.8467165, 18.9487585 ], [ 72.8467665, 18.948377 ], [ 72.846812, 18.94803 ], [ 72.8467899, 18.9477918 ], [ 72.8454619, 18.9426779 ], [ 72.8436929, 18.9355172 ], [ 72.8436319, 18.9354256 ], [ 72.8435429, 18.9353872 ], [ 72.8434132, 18.9353946 ], [ 72.8433241, 18.9354684 ], [ 72.8432288, 18.9358615 ], [ 72.8429445, 18.9358083 ], [ 72.8441959, 18.9290572 ], [ 72.8440799, 18.929031 ], [ 72.8440468, 18.9291512 ], [ 72.8432071, 18.9290187 ], [ 72.8429414, 18.9289759 ], [ 72.8422909, 18.9329667 ], [ 72.8420368, 18.9331632 ], [ 72.8412745, 18.9333178 ], [ 72.8409563, 18.9332969 ], [ 72.8405056, 18.9331548 ], [ 72.8401079, 18.9328434 ], [ 72.8398715, 18.9325257 ], [ 72.8401211, 18.9309708 ], [ 72.840088, 18.930883 ], [ 72.8375332, 18.9289565 ], [ 72.8369451, 18.9294016 ], [ 72.8367482, 18.929179 ], [ 72.8371587, 18.9288929 ], [ 72.8372332, 18.9286817 ], [ 72.8368643, 18.928561 ], [ 72.836798, 18.9284335 ], [ 72.8361749, 18.9280677 ], [ 72.8362589, 18.9279298 ], [ 72.8364246, 18.9280238 ], [ 72.8364578, 18.9279549 ], [ 72.8363915, 18.9279152 ], [ 72.8364865, 18.9277709 ], [ 72.8366257, 18.9278587 ], [ 72.8367008, 18.9278002 ], [ 72.8368378, 18.9273132 ], [ 72.8377746, 18.9275975 ], [ 72.8382342, 18.9267008 ], [ 72.8403752, 18.9276706 ], [ 72.8404968, 18.9274261 ], [ 72.8379833, 18.9262511 ], [ 72.8380884, 18.9259568 ], [ 72.838789, 18.9242859 ], [ 72.8400372, 18.9216867 ], [ 72.8402581, 18.9215383 ], [ 72.8401653, 18.9213732 ], [ 72.840373, 18.9212164 ], [ 72.8441819, 18.9252216 ], [ 72.8442074, 18.9252024 ], [ 72.8443252, 18.9253494 ], [ 72.844394, 18.9255314 ], [ 72.844403, 18.92578 ], [ 72.8443616, 18.9259624 ], [ 72.844376, 18.926005 ], [ 72.8444156, 18.9260187 ], [ 72.8444751, 18.9259965 ], [ 72.8445328, 18.9257715 ], [ 72.8445274, 18.9255482 ], [ 72.8444463, 18.9252994 ], [ 72.8443237, 18.9251255 ], [ 72.840466, 18.9210519 ], [ 72.8405111, 18.920965 ], [ 72.8403904, 18.9208099 ], [ 72.840066, 18.9205525 ], [ 72.8397147, 18.9204025 ], [ 72.8389741, 18.9203156 ], [ 72.8385705, 18.9203446 ], [ 72.8380966, 18.9204724 ], [ 72.8377795, 18.920682 ], [ 72.8349893, 18.9237174 ], [ 72.8342244, 18.9231414 ], [ 72.8343975, 18.9229387 ], [ 72.8349236, 18.9229336 ], [ 72.8346678, 18.9222945 ], [ 72.8349074, 18.9220047 ], [ 72.8349092, 18.9219519 ], [ 72.8348804, 18.921928 ], [ 72.8348335, 18.9219297 ], [ 72.8345236, 18.921703 ], [ 72.8345254, 18.9216655 ], [ 72.8344984, 18.9216417 ], [ 72.8344497, 18.9216519 ], [ 72.8342011, 18.9219536 ], [ 72.8336245, 18.9218581 ], [ 72.8320875, 18.918352 ], [ 72.8327804, 18.9181553 ], [ 72.8327025, 18.9180018 ], [ 72.8320471, 18.9180816 ], [ 72.831807, 18.9173143 ], [ 72.8314955, 18.9173511 ], [ 72.8302172, 18.9163014 ], [ 72.8300614, 18.9160866 ], [ 72.8300744, 18.9157919 ], [ 72.8303989, 18.9155586 ], [ 72.8309093, 18.9155149 ], [ 72.8312282, 18.9151829 ], [ 72.8312695, 18.9150288 ], [ 72.8302285, 18.9138357 ], [ 72.8294061, 18.9129046 ], [ 72.8284406, 18.9122255 ], [ 72.8274798, 18.9115498 ], [ 72.8269466, 18.9111993 ], [ 72.8265553, 18.9105712 ], [ 72.8267668, 18.9104613 ], [ 72.8252226, 18.9076529 ], [ 72.8247413, 18.9078704 ], [ 72.8237754, 18.9088897 ], [ 72.823689, 18.9089963 ], [ 72.8230073, 18.9083561 ], [ 72.8226141, 18.9082124 ], [ 72.8224175, 18.9085759 ], [ 72.8225962, 18.909024 ], [ 72.8223996, 18.9091762 ], [ 72.821917, 18.9090917 ], [ 72.8216489, 18.909396 ], [ 72.8216042, 18.9097004 ], [ 72.8208982, 18.9094806 ], [ 72.8205765, 18.9091508 ], [ 72.8208089, 18.9088888 ], [ 72.821077, 18.9088972 ], [ 72.8210055, 18.9086013 ], [ 72.8198884, 18.9075022 ], [ 72.8193879, 18.9068343 ], [ 72.8191645, 18.905862 ], [ 72.8191645, 18.9046698 ], [ 72.8194236, 18.9044416 ], [ 72.8201833, 18.9044585 ], [ 72.820648, 18.9046952 ], [ 72.8212289, 18.9052955 ], [ 72.8213629, 18.9052617 ], [ 72.8212646, 18.9049911 ], [ 72.8207016, 18.90445 ], [ 72.8202548, 18.9042048 ], [ 72.819227, 18.9040949 ], [ 72.8188338, 18.9040273 ], [ 72.8180321, 18.9031666 ], [ 72.817893, 18.9027481 ], [ 72.8177224, 18.9027241 ], [ 72.8177161, 18.9023056 ], [ 72.8186893, 18.9022997 ], [ 72.8186893, 18.9022399 ], [ 72.8179806, 18.9022304 ], [ 72.817927, 18.9021458 ], [ 72.8180432, 18.9019176 ], [ 72.8182041, 18.9015202 ], [ 72.8171763, 18.900142 ], [ 72.8165954, 18.8992796 ], [ 72.8166133, 18.8991359 ], [ 72.8172299, 18.8988991 ], [ 72.8171853, 18.89873 ], [ 72.816229, 18.8989329 ], [ 72.8159252, 18.8982312 ], [ 72.8150672, 18.8969798 ], [ 72.8142986, 18.8956185 ], [ 72.8137892, 18.8944939 ], [ 72.8131279, 18.8935892 ], [ 72.8126989, 18.8926676 ], [ 72.8115818, 18.8915345 ], [ 72.810992, 18.8913485 ], [ 72.8101251, 18.8904945 ], [ 72.8094012, 18.8904015 ], [ 72.808722, 18.8896151 ], [ 72.807739, 18.8883891 ], [ 72.8067827, 18.8876957 ], [ 72.806461, 18.8876365 ], [ 72.8066219, 18.8884229 ], [ 72.8063617, 18.8884708 ], [ 72.8051863, 18.8871793 ], [ 72.8044659, 18.8854334 ], [ 72.8038087, 18.8840223 ], [ 72.8028355, 18.882659 ], [ 72.8021404, 18.8819774 ], [ 72.8004178, 18.8800839 ], [ 72.8003798, 18.8801304 ], [ 72.8004133, 18.8804793 ], [ 72.8007976, 18.8821282 ], [ 72.8010121, 18.8827116 ], [ 72.801736, 18.8833205 ], [ 72.8025671, 18.884648 ], [ 72.8027012, 18.8851808 ], [ 72.8023616, 18.8850032 ], [ 72.8017003, 18.8841069 ], [ 72.8009674, 18.883701 ], [ 72.8009406, 18.8838701 ], [ 72.8017181, 18.8855697 ], [ 72.8025135, 18.8871256 ], [ 72.8028889, 18.8883939 ], [ 72.8030676, 18.8900428 ], [ 72.8034608, 18.890956 ], [ 72.8040596, 18.8910997 ], [ 72.8045064, 18.8908545 ], [ 72.8044796, 18.8898567 ], [ 72.804569, 18.8892733 ], [ 72.8048818, 18.8897806 ], [ 72.804712, 18.8904402 ], [ 72.8049464, 18.8915626 ], [ 72.8054425, 18.8923942 ], [ 72.8059995, 18.8937199 ], [ 72.8057558, 18.894321 ], [ 72.8048507, 18.8954985 ], [ 72.8036758, 18.8962807 ], [ 72.80358, 18.8968818 ], [ 72.8040239, 18.8975652 ], [ 72.8044242, 18.8980922 ], [ 72.8047124, 18.8991248 ], [ 72.8043273, 18.9000819 ], [ 72.8040269, 18.9013974 ], [ 72.8036956, 18.9021523 ], [ 72.8035246, 18.9032994 ], [ 72.803443, 18.9052036 ], [ 72.8036163, 18.9070914 ], [ 72.8039512, 18.9081145 ], [ 72.804574, 18.9095916 ], [ 72.8053551, 18.911045 ], [ 72.8060958, 18.9121484 ], [ 72.80684, 18.9129775 ], [ 72.8083592, 18.9146745 ], [ 72.8143867, 18.9213383 ], [ 72.8144897, 18.9212246 ], [ 72.8139232, 18.9205101 ], [ 72.8084901, 18.9145829 ], [ 72.8087368, 18.9140818 ], [ 72.8100758, 18.9129126 ], [ 72.8120375, 18.911349 ], [ 72.8121097, 18.9114173 ], [ 72.8121687, 18.9114071 ], [ 72.8122492, 18.9113868 ], [ 72.8122867, 18.9114427 ], [ 72.8124369, 18.9114274 ], [ 72.8125496, 18.9113868 ], [ 72.8126622, 18.9113361 ], [ 72.8128232, 18.911331 ], [ 72.8129465, 18.9113056 ], [ 72.8130324, 18.9113716 ], [ 72.8130967, 18.9114477 ], [ 72.8131665, 18.9115033 ], [ 72.8132255, 18.9115896 ], [ 72.8132309, 18.9117012 ], [ 72.8132309, 18.9117824 ], [ 72.8132738, 18.9118839 ], [ 72.8133381, 18.9117012 ], [ 72.8134079, 18.9116403 ], [ 72.8134883, 18.9117012 ], [ 72.8136493, 18.9118484 ], [ 72.8137297, 18.9119854 ], [ 72.8138156, 18.9120971 ], [ 72.813896, 18.9122798 ], [ 72.8140194, 18.9124168 ], [ 72.8141267, 18.9125132 ], [ 72.8142394, 18.9125538 ], [ 72.8144003, 18.9125741 ], [ 72.8145237, 18.9126959 ], [ 72.8146739, 18.9127314 ], [ 72.8147973, 18.912706 ], [ 72.8149582, 18.9126553 ], [ 72.8150762, 18.9127213 ], [ 72.8150923, 18.9127974 ], [ 72.8150333, 18.9128989 ], [ 72.8149636, 18.9130156 ], [ 72.8149475, 18.9130765 ], [ 72.815044, 18.9130917 ], [ 72.8154571, 18.913112 ], [ 72.8155536, 18.9131272 ], [ 72.8155751, 18.9131729 ], [ 72.8155429, 18.9132389 ], [ 72.8154732, 18.9133455 ], [ 72.8154195, 18.9134419 ], [ 72.8154142, 18.9135332 ], [ 72.8154325, 18.9136192 ], [ 72.8154419, 18.913683 ], [ 72.8153222, 18.9140321 ], [ 72.8165668, 18.9156073 ], [ 72.8156461, 18.9171244 ], [ 72.8169229, 18.918596 ], [ 72.8186009, 18.9175154 ], [ 72.8188722, 18.9177048 ], [ 72.8194165, 18.9174538 ], [ 72.8197597, 18.9177589 ], [ 72.8200601, 18.9177833 ], [ 72.820678, 18.9170769 ], [ 72.8218656, 18.9163236 ], [ 72.8220921, 18.9163953 ], [ 72.8229096, 18.9174991 ], [ 72.8225663, 18.9179457 ], [ 72.8227036, 18.9180837 ], [ 72.8230212, 18.9177589 ], [ 72.8245662, 18.9194072 ], [ 72.8250744, 18.919193 ], [ 72.8255406, 18.9197339 ], [ 72.825682, 18.9203003 ], [ 72.8250812, 18.9205276 ], [ 72.8249531, 18.9209029 ], [ 72.8252106, 18.921658 ], [ 72.8251967, 18.9217985 ], [ 72.8253065, 18.9221567 ], [ 72.8253308, 18.9222832 ], [ 72.8252879, 18.922405 ], [ 72.8251935, 18.9224943 ], [ 72.825039, 18.9225267 ], [ 72.82479, 18.9224862 ], [ 72.8245755, 18.9224862 ], [ 72.8243705, 18.922529 ], [ 72.8241721, 18.9226079 ], [ 72.8240433, 18.9226079 ], [ 72.8237273, 18.9226125 ], [ 72.8234609, 18.9226055 ], [ 72.8232197, 18.9227476 ], [ 72.8220318, 18.9236472 ], [ 72.8216823, 18.9234328 ], [ 72.8216229, 18.9232737 ], [ 72.8213721, 18.9233502 ], [ 72.8212796, 18.9234686 ], [ 72.8211337, 18.9234686 ], [ 72.820962, 18.9234605 ], [ 72.8203698, 18.9239476 ], [ 72.8185416, 18.925336 ], [ 72.8184035, 18.9253099 ], [ 72.818189, 18.9251312 ], [ 72.8179744, 18.9253748 ], [ 72.8199396, 18.9274786 ], [ 72.8208151, 18.9284853 ], [ 72.8214162, 18.9294099 ], [ 72.8219762, 18.9304869 ], [ 72.8231375, 18.9329431 ], [ 72.8235791, 18.934403 ], [ 72.8238709, 18.9364083 ], [ 72.823889, 18.9375857 ], [ 72.8237508, 18.9398667 ], [ 72.8235448, 18.9411982 ], [ 72.8228581, 18.9431465 ], [ 72.8221759, 18.9445162 ], [ 72.8213475, 18.9456469 ], [ 72.8207966, 18.9465595 ], [ 72.819691, 18.9481879 ], [ 72.8186181, 18.9495923 ], [ 72.817674, 18.9505015 ], [ 72.8167298, 18.9512727 ], [ 72.8162115, 18.951724 ], [ 72.8161087, 18.9518135 ], [ 72.8156796, 18.9521301 ], [ 72.8155766, 18.9520246 ], [ 72.8149242, 18.9527227 ], [ 72.8146324, 18.9528932 ], [ 72.8136454, 18.9533478 ], [ 72.8125928, 18.9538135 ], [ 72.8102036, 18.954468 ], [ 72.8080406, 18.9547927 ], [ 72.8073099, 18.9538656 ], [ 72.8070996, 18.9535294 ], [ 72.8064988, 18.9531235 ], [ 72.8058994, 18.9528461 ], [ 72.805383, 18.9526121 ], [ 72.8048988, 18.9520352 ], [ 72.8046706, 18.9516623 ], [ 72.8044646, 18.9511184 ], [ 72.8043506, 18.9509513 ], [ 72.8036983, 18.9507077 ], [ 72.8024946, 18.9496899 ], [ 72.8019755, 18.9489185 ], [ 72.8014348, 18.9487318 ], [ 72.8005765, 18.9485938 ], [ 72.7997753, 18.9483782 ], [ 72.7989715, 18.9479443 ], [ 72.7979758, 18.9470919 ], [ 72.7975467, 18.9459148 ], [ 72.7968714, 18.9452468 ], [ 72.7964309, 18.9446403 ], [ 72.7955525, 18.9432719 ], [ 72.7954267, 18.9419369 ], [ 72.7948998, 18.9408473 ], [ 72.7947143, 18.9402727 ], [ 72.7943967, 18.9396638 ], [ 72.7941086, 18.9392933 ], [ 72.7938194, 18.9392694 ] ] ], [ [ [ 86.4143547, 20.0146561 ], [ 86.4132831, 20.0097593 ], [ 86.4127382, 20.0097576 ], [ 86.4128796, 20.0082127 ], [ 86.4119542, 20.0007412 ], [ 86.4121473, 20.0001834 ], [ 86.4124572, 19.9990379 ], [ 86.4122093, 19.9979506 ], [ 86.4116934, 19.9976499 ], [ 86.4111485, 19.9976482 ], [ 86.4111476, 19.9979056 ], [ 86.4107393, 19.9976467 ], [ 86.4097936, 19.9957117 ], [ 86.4092491, 19.9955815 ], [ 86.4085966, 19.9952918 ], [ 86.407346, 19.994545 ], [ 86.4070735, 19.994544 ], [ 86.4070744, 19.9942866 ], [ 86.4054424, 19.9936368 ], [ 86.4043551, 19.9929897 ], [ 86.4042203, 19.9924743 ], [ 86.4032687, 19.9920842 ], [ 86.4015038, 19.9904048 ], [ 86.40137, 19.9898893 ], [ 86.3997393, 19.9888536 ], [ 86.3974322, 19.986528 ], [ 86.3972984, 19.9860124 ], [ 86.3959374, 19.9857502 ], [ 86.3956023, 19.9852402 ], [ 86.3944563, 19.984317 ], [ 86.393474, 19.9832977 ], [ 86.3918679, 19.9813583 ], [ 86.391869, 19.9811008 ], [ 86.3914619, 19.9805843 ], [ 86.3916014, 19.9798122 ], [ 86.3910567, 19.9798104 ], [ 86.3907883, 19.9787792 ], [ 86.3902434, 19.9787775 ], [ 86.3902464, 19.9780048 ], [ 86.3897021, 19.9778737 ], [ 86.3886174, 19.9765822 ], [ 86.3869826, 19.9767058 ], [ 86.3869845, 19.9761908 ], [ 86.3864392, 19.9763173 ], [ 86.3858955, 19.9760578 ], [ 86.383171, 19.9761776 ], [ 86.3838486, 19.9769525 ], [ 86.3839832, 19.9774681 ], [ 86.3850709, 19.9779869 ], [ 86.3876481, 19.9805713 ], [ 86.3877828, 19.9810867 ], [ 86.3899531, 19.9834119 ], [ 86.3906483, 19.9847074 ], [ 86.3935111, 19.9869373 ], [ 86.393791, 19.9880062 ], [ 86.3934586, 19.9886475 ], [ 86.3900465, 19.9881542 ], [ 86.389749, 19.9871675 ], [ 86.3889791, 19.986592 ], [ 86.3874043, 19.9860822 ], [ 86.3852696, 19.9858356 ], [ 86.3831359, 19.9851912 ], [ 86.3828635, 19.9851902 ], [ 86.3820427, 19.9860884 ], [ 86.3814974, 19.9862156 ], [ 86.3816313, 19.9867312 ], [ 86.3810824, 19.9877593 ], [ 86.3814814, 19.9903361 ], [ 86.3839312, 19.9908597 ], [ 86.3839291, 19.9913747 ], [ 86.384474, 19.9913766 ], [ 86.3844759, 19.9908616 ], [ 86.3861106, 19.9908672 ], [ 86.3858361, 19.9913813 ], [ 86.3869253, 19.9915134 ], [ 86.3877445, 19.9910012 ], [ 86.3891056, 19.9912634 ], [ 86.3899214, 19.9916531 ], [ 86.3907327, 19.993201 ], [ 86.3912776, 19.9932029 ], [ 86.3927686, 19.9950107 ], [ 86.3929023, 19.9957839 ], [ 86.3939886, 19.9966884 ], [ 86.397251, 19.9985023 ], [ 86.3986137, 19.9983787 ], [ 86.3982073, 19.9976047 ], [ 86.3983509, 19.9958024 ], [ 86.3986239, 19.9956741 ], [ 86.3994407, 19.995806 ], [ 86.3994396, 19.9960636 ], [ 86.3988949, 19.9960617 ], [ 86.3986165, 19.997606 ], [ 86.3994324, 19.9979946 ], [ 86.400794, 19.9981284 ], [ 86.4027863, 19.9973869 ], [ 86.4045613, 19.9974016 ], [ 86.4053152, 19.9976673 ], [ 86.4056949, 19.9989175 ], [ 86.405694, 19.9991751 ], [ 86.4060973, 20.0004641 ], [ 86.4085367, 20.0038202 ], [ 86.4108301, 20.0100088 ], [ 86.4113749, 20.0100105 ], [ 86.4112364, 20.0105251 ], [ 86.4124524, 20.013362 ], [ 86.4129973, 20.0133639 ], [ 86.4129915, 20.014909 ], [ 86.4135365, 20.0149109 ], [ 86.4136685, 20.0159415 ], [ 86.4142105, 20.0167158 ], [ 86.4143443, 20.0174888 ], [ 86.4148892, 20.0174907 ], [ 86.4155643, 20.0190381 ], [ 86.4161035, 20.0205852 ], [ 86.4160988, 20.0218729 ], [ 86.4158253, 20.0221293 ], [ 86.4159478, 20.0259929 ], [ 86.4167637, 20.0263815 ], [ 86.4186726, 20.0260018 ], [ 86.4186745, 20.0254867 ], [ 86.4192194, 20.0254884 ], [ 86.4193591, 20.0244588 ], [ 86.4173339, 20.0195589 ], [ 86.4167888, 20.0195572 ], [ 86.4165222, 20.0180112 ], [ 86.4159773, 20.0180093 ], [ 86.4155738, 20.0164627 ], [ 86.4151684, 20.0156888 ], [ 86.414897, 20.0154304 ], [ 86.4148998, 20.0146578 ], [ 86.4143547, 20.0146561 ] ] ], [ [ [ 86.2749133, 20.060881 ], [ 86.2738209, 20.0613916 ], [ 86.2691836, 20.0622743 ], [ 86.2691812, 20.0627893 ], [ 86.2697245, 20.0631775 ], [ 86.2862535, 20.0637194 ], [ 86.2878924, 20.0629533 ], [ 86.2897219, 20.0612393 ], [ 86.2897669, 20.0608131 ], [ 86.2900405, 20.0605566 ], [ 86.2904612, 20.057983 ], [ 86.2897773, 20.0584954 ], [ 86.2899116, 20.059011 ], [ 86.2893666, 20.0590087 ], [ 86.2893643, 20.0595238 ], [ 86.2885461, 20.0596489 ], [ 86.2878222, 20.0594291 ], [ 86.2877302, 20.0592597 ], [ 86.2888203, 20.0592641 ], [ 86.2885501, 20.0587479 ], [ 86.2893688, 20.0584937 ], [ 86.2897807, 20.0577228 ], [ 86.289922, 20.0566933 ], [ 86.2910144, 20.0561826 ], [ 86.2917011, 20.0548976 ], [ 86.2926612, 20.0536139 ], [ 86.2926623, 20.0533563 ], [ 86.2923898, 20.0533552 ], [ 86.2922953, 20.0535238 ], [ 86.2891212, 20.0529554 ], [ 86.2874896, 20.0521762 ], [ 86.2872188, 20.0517893 ], [ 86.2888529, 20.0520533 ], [ 86.2888551, 20.0515383 ], [ 86.2896716, 20.0517991 ], [ 86.289537, 20.0512835 ], [ 86.2872276, 20.0498573 ], [ 86.2861398, 20.049338 ], [ 86.2850504, 20.0492053 ], [ 86.2850481, 20.0497203 ], [ 86.2835452, 20.0504867 ], [ 86.2834059, 20.0512588 ], [ 86.282589, 20.0511263 ], [ 86.2805382, 20.0525347 ], [ 86.2799872, 20.0538203 ], [ 86.2749133, 20.060881 ] ] ], [ [ [ 86.3168026, 20.016882 ], [ 86.3159847, 20.0170071 ], [ 86.314753, 20.0181617 ], [ 86.3143404, 20.0191902 ], [ 86.313795, 20.0193165 ], [ 86.3121522, 20.0211127 ], [ 86.3110619, 20.0212376 ], [ 86.3110596, 20.0217527 ], [ 86.3095584, 20.022262 ], [ 86.3094202, 20.0227765 ], [ 86.307509, 20.0236699 ], [ 86.3061462, 20.0237939 ], [ 86.3061439, 20.0243089 ], [ 86.3025966, 20.0254533 ], [ 86.3016396, 20.0260938 ], [ 86.3015015, 20.0266085 ], [ 86.3055814, 20.0282979 ], [ 86.3061241, 20.028815 ], [ 86.3066695, 20.028689 ], [ 86.3078897, 20.0299814 ], [ 86.3080241, 20.0304969 ], [ 86.3088409, 20.0306285 ], [ 86.3099265, 20.0316629 ], [ 86.3137362, 20.032837 ], [ 86.3142856, 20.031809 ], [ 86.3140133, 20.0318078 ], [ 86.3140199, 20.0302628 ], [ 86.3137474, 20.0302616 ], [ 86.3133, 20.0291412 ], [ 86.313623, 20.0274283 ], [ 86.313633, 20.0251106 ], [ 86.3148742, 20.0217676 ], [ 86.3143293, 20.0217655 ], [ 86.3143316, 20.0212503 ], [ 86.314877, 20.0211233 ], [ 86.3156927, 20.0215132 ], [ 86.316389, 20.0179105 ], [ 86.3168026, 20.016882 ] ] ], [ [ [ 86.29453, 20.0413476 ], [ 86.2951724, 20.0404899 ], [ 86.2959901, 20.0404932 ], [ 86.2964006, 20.0399796 ], [ 86.2965419, 20.0389502 ], [ 86.3017239, 20.0379405 ], [ 86.3017262, 20.0374255 ], [ 86.3022713, 20.0374276 ], [ 86.3026395, 20.0367441 ], [ 86.3047289, 20.0362781 ], [ 86.3069127, 20.0353856 ], [ 86.306915, 20.0348706 ], [ 86.3082787, 20.0346185 ], [ 86.3082809, 20.0341034 ], [ 86.3074639, 20.033971 ], [ 86.3069213, 20.0334538 ], [ 86.305561, 20.0329333 ], [ 86.3037472, 20.0327094 ], [ 86.3036553, 20.03254 ], [ 86.3044728, 20.0325432 ], [ 86.3047498, 20.0315141 ], [ 86.3036627, 20.0308657 ], [ 86.2982199, 20.0292991 ], [ 86.2963136, 20.0290339 ], [ 86.2903178, 20.0292675 ], [ 86.2893654, 20.0288778 ], [ 86.2895055, 20.0281057 ], [ 86.2873286, 20.0274527 ], [ 86.2780679, 20.0266427 ], [ 86.2761522, 20.0284376 ], [ 86.2734191, 20.0302291 ], [ 86.2712388, 20.0303493 ], [ 86.2712399, 20.0300917 ], [ 86.2728767, 20.0297118 ], [ 86.2736975, 20.0289426 ], [ 86.2747894, 20.0285612 ], [ 86.2747916, 20.0280462 ], [ 86.2758839, 20.0275355 ], [ 86.2768419, 20.0265094 ], [ 86.276843, 20.0262518 ], [ 86.2764365, 20.0258634 ], [ 86.2758916, 20.0258612 ], [ 86.2756204, 20.0256026 ], [ 86.2734429, 20.0250785 ], [ 86.2731715, 20.02482 ], [ 86.2726266, 20.0248177 ], [ 86.272353, 20.0250742 ], [ 86.2718081, 20.0250719 ], [ 86.2715372, 20.0246848 ], [ 86.2720823, 20.0246871 ], [ 86.2716779, 20.0236553 ], [ 86.2696436, 20.0217151 ], [ 86.2677423, 20.0204195 ], [ 86.2658387, 20.0196391 ], [ 86.2633866, 20.0196289 ], [ 86.2631129, 20.0198853 ], [ 86.2571126, 20.0211479 ], [ 86.2535639, 20.0225499 ], [ 86.2532865, 20.0235788 ], [ 86.2519217, 20.024088 ], [ 86.2509542, 20.0269167 ], [ 86.2497162, 20.0294867 ], [ 86.2491714, 20.0294845 ], [ 86.24917, 20.0297421 ], [ 86.2570733, 20.0295177 ], [ 86.2570721, 20.0297753 ], [ 86.2532543, 20.0304026 ], [ 86.2450805, 20.0302397 ], [ 86.2449228, 20.034617 ], [ 86.2454592, 20.0364219 ], [ 86.2460016, 20.0369392 ], [ 86.2462693, 20.0379706 ], [ 86.2468119, 20.0384879 ], [ 86.2472137, 20.0400348 ], [ 86.2477599, 20.0397795 ], [ 86.2484333, 20.0413276 ], [ 86.2496514, 20.0431354 ], [ 86.2501965, 20.0431378 ], [ 86.2504654, 20.0439114 ], [ 86.2510103, 20.0439139 ], [ 86.2510079, 20.0444289 ], [ 86.2520961, 20.0448194 ], [ 86.25291, 20.0455954 ], [ 86.2534545, 20.0457268 ], [ 86.2539958, 20.0465017 ], [ 86.2542683, 20.0465028 ], [ 86.2541689, 20.0477014 ], [ 86.2548, 20.049338 ], [ 86.255345, 20.0493402 ], [ 86.2557472, 20.0506296 ], [ 86.2568325, 20.0516642 ], [ 86.2569655, 20.0524374 ], [ 86.2575112, 20.0523104 ], [ 86.2596866, 20.0533497 ], [ 86.260504, 20.0533531 ], [ 86.2626799, 20.0542639 ], [ 86.2629464, 20.0555527 ], [ 86.2634915, 20.0555549 ], [ 86.2634892, 20.05607 ], [ 86.2643038, 20.0567167 ], [ 86.2653921, 20.057108 ], [ 86.2653896, 20.0576232 ], [ 86.2686523, 20.0593102 ], [ 86.2719226, 20.0593236 ], [ 86.2741071, 20.0584317 ], [ 86.2737049, 20.0568849 ], [ 86.2742547, 20.055857 ], [ 86.2741237, 20.0548263 ], [ 86.2733061, 20.0548229 ], [ 86.2733036, 20.055338 ], [ 86.2730311, 20.0553368 ], [ 86.272898, 20.0545638 ], [ 86.2741343, 20.0525086 ], [ 86.2735892, 20.0525064 ], [ 86.2735917, 20.0519913 ], [ 86.2765917, 20.0514886 ], [ 86.2765941, 20.0509736 ], [ 86.2798684, 20.0500851 ], [ 86.2812339, 20.0494472 ], [ 86.28151, 20.0486759 ], [ 86.2834187, 20.0484261 ], [ 86.283421, 20.047911 ], [ 86.2850574, 20.04766 ], [ 86.2850596, 20.047145 ], [ 86.2866988, 20.0462499 ], [ 86.2871503, 20.046211 ], [ 86.2872433, 20.0463813 ], [ 86.2875157, 20.0463824 ], [ 86.287517, 20.0461248 ], [ 86.2873376, 20.0460356 ], [ 86.2872467, 20.0456086 ], [ 86.2877901, 20.0459966 ], [ 86.2888801, 20.0460012 ], [ 86.2891515, 20.0462597 ], [ 86.2916053, 20.0460121 ], [ 86.2932437, 20.0452459 ], [ 86.293791, 20.0447332 ], [ 86.2951552, 20.0443527 ], [ 86.2951575, 20.0438377 ], [ 86.2981575, 20.0433346 ], [ 86.2981643, 20.0417895 ], [ 86.2960774, 20.0416925 ], [ 86.2962615, 20.0407517 ], [ 86.2951504, 20.040975 ], [ 86.295169, 20.0412624 ], [ 86.2946217, 20.0417753 ], [ 86.2932564, 20.0424132 ], [ 86.2916208, 20.0425359 ], [ 86.2916219, 20.0422784 ], [ 86.292985, 20.0421547 ], [ 86.2940785, 20.0413864 ], [ 86.29453, 20.0413476 ] ] ], [ [ [ 86.78927, 20.38757 ], [ 86.78921, 20.38866 ], [ 86.78923, 20.38989 ], [ 86.78922, 20.39261 ], [ 86.78934, 20.39356 ], [ 86.78977, 20.39485 ], [ 86.78999, 20.39608 ], [ 86.79006, 20.39739 ], [ 86.78987, 20.40149 ], [ 86.78906, 20.40316 ], [ 86.78789, 20.4047 ], [ 86.78828, 20.4062 ], [ 86.78972, 20.40612 ], [ 86.79074, 20.40747 ], [ 86.7907, 20.40958 ], [ 86.79121, 20.41161 ], [ 86.79107, 20.41344 ], [ 86.79066, 20.41577 ], [ 86.7909, 20.41825 ], [ 86.79088, 20.42257 ], [ 86.79104, 20.4244 ], [ 86.7909, 20.42567 ], [ 86.79142, 20.42643 ], [ 86.79099, 20.4278 ], [ 86.79132, 20.42806 ], [ 86.79163, 20.42801 ], [ 86.79211, 20.42777 ], [ 86.79302, 20.42637 ], [ 86.79309, 20.42439 ], [ 86.79367, 20.42272 ], [ 86.79408, 20.42055 ], [ 86.79385, 20.4192 ], [ 86.79394, 20.41741 ], [ 86.7949, 20.4154 ], [ 86.79477, 20.41422 ], [ 86.79503, 20.41304 ], [ 86.79567, 20.41218 ], [ 86.79547, 20.41129 ], [ 86.79378, 20.40814 ], [ 86.79317, 20.40634 ], [ 86.79299, 20.40459 ], [ 86.79301, 20.40123 ], [ 86.79324, 20.39875 ], [ 86.79353, 20.39707 ], [ 86.79397, 20.39619 ], [ 86.79428, 20.39492 ], [ 86.79461, 20.39306 ], [ 86.79424, 20.39159 ], [ 86.79317, 20.38991 ], [ 86.78989, 20.38766 ], [ 86.7897, 20.38758 ], [ 86.78927, 20.38757 ] ] ], [ [ [ 86.79542, 20.45328 ], [ 86.79453, 20.45418 ], [ 86.79445, 20.45515 ], [ 86.7971, 20.45693 ], [ 86.79967, 20.45904 ], [ 86.80116, 20.46092 ], [ 86.80266, 20.46449 ], [ 86.80265, 20.46707 ], [ 86.80222, 20.46998 ], [ 86.80062, 20.4731 ], [ 86.80059, 20.47431 ], [ 86.80244, 20.47653 ], [ 86.80371, 20.47858 ], [ 86.80417, 20.48099 ], [ 86.80419, 20.48556 ], [ 86.80408, 20.49053 ], [ 86.80411, 20.49319 ], [ 86.80332, 20.49614 ], [ 86.80304, 20.49811 ], [ 86.80181, 20.49978 ], [ 86.80169, 20.50009 ], [ 86.80168, 20.50059 ], [ 86.80251, 20.50103 ], [ 86.80388, 20.50057 ], [ 86.80604, 20.49763 ], [ 86.80768, 20.49144 ], [ 86.80963, 20.48536 ], [ 86.80994, 20.47951 ], [ 86.8091, 20.47418 ], [ 86.80767, 20.46951 ], [ 86.80587, 20.46678 ], [ 86.80405, 20.46212 ], [ 86.79693, 20.45339 ], [ 86.79542, 20.45328 ] ] ], [ [ [ 70.8920057, 20.7315928 ], [ 70.8922808, 20.7317189 ], [ 70.8922744, 20.7312042 ], [ 70.8925481, 20.7312012 ], [ 70.8925577, 20.7319733 ], [ 70.8944712, 20.731823 ], [ 70.8969367, 20.7320532 ], [ 70.8974902, 20.732562 ], [ 70.8980374, 20.732556 ], [ 70.8983079, 20.7322955 ], [ 70.899951, 20.7324067 ], [ 70.9000809, 20.7318903 ], [ 70.9002166, 20.7317597 ], [ 70.9081474, 20.7314144 ], [ 70.908693, 20.7312802 ], [ 70.9085588, 20.7315391 ], [ 70.9085751, 20.732826 ], [ 70.9089892, 20.7330787 ], [ 70.9089697, 20.7315344 ], [ 70.9108834, 20.7313842 ], [ 70.91116, 20.7316384 ], [ 70.9125312, 20.7318807 ], [ 70.9126692, 20.7320082 ], [ 70.9125394, 20.7325246 ], [ 70.9139121, 20.7328948 ], [ 70.9141857, 20.7328918 ], [ 70.914456, 20.7326314 ], [ 70.9166513, 20.7331218 ], [ 70.9169281, 20.7333762 ], [ 70.9196737, 20.7341177 ], [ 70.9207681, 20.7341056 ], [ 70.9213184, 20.7343568 ], [ 70.9229616, 20.7344675 ], [ 70.9229552, 20.7339529 ], [ 70.9243281, 20.7343231 ], [ 70.9244626, 20.7341935 ], [ 70.9244562, 20.7336786 ], [ 70.9243165, 20.7334227 ], [ 70.9251374, 20.7334136 ], [ 70.925144, 20.7339283 ], [ 70.9267822, 20.7336525 ], [ 70.9265184, 20.7344278 ], [ 70.9259678, 20.7341765 ], [ 70.9259744, 20.7346913 ], [ 70.9267953, 20.734682 ], [ 70.9268017, 20.7351969 ], [ 70.9273488, 20.7351908 ], [ 70.9270916, 20.7364807 ], [ 70.9301027, 20.7365203 ], [ 70.930773, 20.7366484 ], [ 70.9313671, 20.7366252 ], [ 70.9318513, 20.7363789 ], [ 70.9326834, 20.7362017 ], [ 70.9332092, 20.7360136 ], [ 70.933817, 20.7348731 ], [ 70.9346948, 20.7343594 ], [ 70.9357794, 20.7337955 ], [ 70.9382458, 20.7325951 ], [ 70.9397023, 20.7325218 ], [ 70.9416048, 20.7330191 ], [ 70.9434352, 20.7335648 ], [ 70.9451821, 20.7338777 ], [ 70.9476633, 20.7344402 ], [ 70.9497309, 20.7343171 ], [ 70.9519489, 20.7342996 ], [ 70.9536219, 20.7343171 ], [ 70.9552948, 20.7344226 ], [ 70.9570053, 20.7348094 ], [ 70.958509, 20.7354071 ], [ 70.9597684, 20.7357938 ], [ 70.9607459, 20.7353016 ], [ 70.9619864, 20.734405 ], [ 70.9625879, 20.7331217 ], [ 70.9629451, 20.731645 ], [ 70.9623248, 20.7305199 ], [ 70.9612346, 20.729096 ], [ 70.9604075, 20.7275138 ], [ 70.9600316, 20.7257909 ], [ 70.9601632, 20.7252635 ], [ 70.961009, 20.724402 ], [ 70.9614601, 20.7233296 ], [ 70.9617797, 20.7222572 ], [ 70.9623546, 20.7208859 ], [ 70.9630501, 20.7208683 ], [ 70.9633508, 20.7214485 ], [ 70.9643283, 20.7219407 ], [ 70.9652493, 20.7218177 ], [ 70.9660012, 20.7219583 ], [ 70.9665087, 20.7223099 ], [ 70.9671854, 20.7226791 ], [ 70.9673358, 20.7230835 ], [ 70.9666403, 20.7229253 ], [ 70.9660764, 20.7229956 ], [ 70.9652869, 20.7233648 ], [ 70.9647606, 20.7238219 ], [ 70.9644035, 20.7245603 ], [ 70.9641967, 20.7252811 ], [ 70.964535, 20.7269688 ], [ 70.9648358, 20.7276368 ], [ 70.9663583, 20.7286037 ], [ 70.9673358, 20.7285158 ], [ 70.9684072, 20.7279005 ], [ 70.9700801, 20.7272501 ], [ 70.9721101, 20.7265293 ], [ 70.9738019, 20.7258612 ], [ 70.9753244, 20.7252283 ], [ 70.9763394, 20.7241383 ], [ 70.9769221, 20.723312 ], [ 70.9779936, 20.7222396 ], [ 70.9790274, 20.7215891 ], [ 70.9795913, 20.7210617 ], [ 70.9797041, 20.7204639 ], [ 70.9798515, 20.7203244 ], [ 70.9802143, 20.7201258 ], [ 70.9805057, 20.7200699 ], [ 70.980807, 20.720076 ], [ 70.9810855, 20.7202123 ], [ 70.9811556, 20.7203445 ], [ 70.9812604, 20.7206728 ], [ 70.9813252, 20.7207273 ], [ 70.9813867, 20.7207364 ], [ 70.9814677, 20.720697 ], [ 70.9815001, 20.7206395 ], [ 70.9815098, 20.7205819 ], [ 70.9813988, 20.7202632 ], [ 70.981875, 20.7198986 ], [ 70.9822629, 20.7198128 ], [ 70.9830169, 20.7197544 ], [ 70.9835895, 20.7198467 ], [ 70.9836078, 20.7200962 ], [ 70.9844322, 20.7200071 ], [ 70.9844101, 20.7197631 ], [ 70.9846575, 20.7196665 ], [ 70.9846709, 20.7195571 ], [ 70.9850239, 20.7194537 ], [ 70.9851098, 20.719469 ], [ 70.9851838, 20.7196764 ], [ 70.9858925, 20.719424 ], [ 70.986155, 20.7192897 ], [ 70.9861601, 20.7193285 ], [ 70.9862094, 20.7193188 ], [ 70.9862306, 20.719318 ], [ 70.9862367, 20.719333 ], [ 70.9863526, 20.7193145 ], [ 70.9863881, 20.7192816 ], [ 70.9864253, 20.7192767 ], [ 70.9864271, 20.7192953 ], [ 70.9866315, 20.7192364 ], [ 70.9873327, 20.7190911 ], [ 70.9872908, 20.7188502 ], [ 70.9874529, 20.7188015 ], [ 70.9876581, 20.7187315 ], [ 70.9884961, 20.7187655 ], [ 70.9888123, 20.7187796 ], [ 70.9888423, 20.7187962 ], [ 70.9888702, 20.7187939 ], [ 70.9888927, 20.7187664 ], [ 70.9890161, 20.7187179 ], [ 70.9893652, 20.7186878 ], [ 70.989629, 20.7186406 ], [ 70.9897286, 20.7186575 ], [ 70.9900302, 20.7186708 ], [ 70.990037, 20.7187241 ], [ 70.9900641, 20.7187125 ], [ 70.9900594, 20.7186527 ], [ 70.9901506, 20.7186212 ], [ 70.9904381, 20.7184293 ], [ 70.9906741, 20.7182282 ], [ 70.9907592, 20.7181069 ], [ 70.9908761, 20.7178446 ], [ 70.9911914, 20.7176458 ], [ 70.9914282, 20.7172856 ], [ 70.9917489, 20.7167992 ], [ 70.9918688, 20.7166928 ], [ 70.9923025, 20.7166689 ], [ 70.9925703, 20.7166821 ], [ 70.9927113, 20.7168271 ], [ 70.993052, 20.7168089 ], [ 70.9932259, 20.7165735 ], [ 70.9938015, 20.716282 ], [ 70.9938213, 20.7161674 ], [ 70.9939392, 20.7161289 ], [ 70.9940474, 20.7160778 ], [ 70.9944017, 20.7158752 ], [ 70.9945315, 20.715837 ], [ 70.9945749, 20.715953 ], [ 70.9946047, 20.7159746 ], [ 70.9946386, 20.7160215 ], [ 70.9946749, 20.7160122 ], [ 70.9946089, 20.7158102 ], [ 70.9947641, 20.7158094 ], [ 70.995216, 20.7156536 ], [ 70.9956863, 20.7156817 ], [ 70.9958056, 20.7157041 ], [ 70.9957147, 20.7160975 ], [ 70.9956503, 20.7160799 ], [ 70.9956342, 20.7161503 ], [ 70.9956986, 20.7161628 ], [ 70.9956501, 20.7163564 ], [ 70.995774, 20.7163891 ], [ 70.9959105, 20.7158204 ], [ 70.9959869, 20.7158419 ], [ 70.9960711, 20.7158968 ], [ 70.9961631, 20.7159205 ], [ 70.9962417, 20.7159155 ], [ 70.9963297, 20.7158733 ], [ 70.9966117, 20.7158689 ], [ 70.9966986, 20.7159742 ], [ 70.9966873, 20.7160075 ], [ 70.9966079, 20.7159969 ], [ 70.9966044, 20.7160301 ], [ 70.9970426, 20.7160917 ], [ 70.9971572, 20.7159807 ], [ 70.9979083, 20.7161747 ], [ 70.9979765, 20.7161791 ], [ 70.998028, 20.7161335 ], [ 70.9980467, 20.7160611 ], [ 70.9980321, 20.7159743 ], [ 70.9979982, 20.7159281 ], [ 70.9977845, 20.7157585 ], [ 70.9974068, 20.7152336 ], [ 70.9972743, 20.7150338 ], [ 70.997241, 20.714905 ], [ 70.9972423, 20.7143493 ], [ 70.9970796, 20.7139491 ], [ 70.9970109, 20.7138741 ], [ 70.9969032, 20.7138699 ], [ 70.9968348, 20.71367 ], [ 70.9962908, 20.7134252 ], [ 70.9958942, 20.7131896 ], [ 70.9957308, 20.7130618 ], [ 70.9949825, 20.7123328 ], [ 70.9947573, 20.7119669 ], [ 70.9945838, 20.7118106 ], [ 70.9945035, 20.711676 ], [ 70.994617, 20.7115122 ], [ 70.9944002, 20.7110958 ], [ 70.9941234, 20.7108541 ], [ 70.9937235, 20.7108232 ], [ 70.9936295, 20.7109112 ], [ 70.9934195, 20.7108957 ], [ 70.9934039, 20.7108145 ], [ 70.9926977, 20.7106354 ], [ 70.9924208, 20.7103812 ], [ 70.9920778, 20.7101883 ], [ 70.9918804, 20.7102587 ], [ 70.9918475, 20.710474 ], [ 70.9916408, 20.7104477 ], [ 70.9914481, 20.7105048 ], [ 70.9913267, 20.7103938 ], [ 70.9910355, 20.710166 ], [ 70.9908748, 20.7101839 ], [ 70.9898021, 20.7095176 ], [ 70.9893983, 20.7093865 ], [ 70.9890517, 20.709225 ], [ 70.9889246, 20.7092916 ], [ 70.9891079, 20.7095158 ], [ 70.9888784, 20.7097553 ], [ 70.9883466, 20.7097751 ], [ 70.9880459, 20.7099685 ], [ 70.9876511, 20.7099026 ], [ 70.9872216, 20.7099748 ], [ 70.9869979, 20.710074 ], [ 70.9866714, 20.7100619 ], [ 70.9866267, 20.7098279 ], [ 70.9866643, 20.7095729 ], [ 70.9865844, 20.7093839 ], [ 70.9863503, 20.7093544 ], [ 70.9858344, 20.709258 ], [ 70.9851067, 20.7089034 ], [ 70.9846793, 20.7085253 ], [ 70.9847, 20.7082587 ], [ 70.984498, 20.708096 ], [ 70.984467, 20.7076039 ], [ 70.9841596, 20.7077839 ], [ 70.9833571, 20.7076543 ], [ 70.9819829, 20.7071553 ], [ 70.9808176, 20.7065627 ], [ 70.9803316, 20.7064021 ], [ 70.9797847, 20.7062411 ], [ 70.9793157, 20.7060017 ], [ 70.9790516, 20.7057488 ], [ 70.978967, 20.7055378 ], [ 70.9790939, 20.7054279 ], [ 70.9790422, 20.7051553 ], [ 70.9792161, 20.7050103 ], [ 70.9790356, 20.7047277 ], [ 70.9788448, 20.7047685 ], [ 70.9787696, 20.7046015 ], [ 70.9785018, 20.7046322 ], [ 70.9783185, 20.7044344 ], [ 70.9782616, 20.7041907 ], [ 70.977952, 20.7041575 ], [ 70.9779802, 20.7040081 ], [ 70.9779118, 20.703907 ], [ 70.9780486, 20.7037777 ], [ 70.9776825, 20.7035619 ], [ 70.9775368, 20.703437 ], [ 70.9773901, 20.7035122 ], [ 70.9772339, 20.703391 ], [ 70.9773521, 20.7033065 ], [ 70.9772972, 20.703106 ], [ 70.9774002, 20.7028486 ], [ 70.9773487, 20.7027361 ], [ 70.9773446, 20.7024863 ], [ 70.977169, 20.7022762 ], [ 70.9770392, 20.7021281 ], [ 70.9768549, 20.7020278 ], [ 70.9767525, 20.7022094 ], [ 70.9765975, 20.7022489 ], [ 70.9763431, 20.7021874 ], [ 70.9761487, 20.7022336 ], [ 70.9760758, 20.7023149 ], [ 70.9760829, 20.702383 ], [ 70.9759631, 20.7025193 ], [ 70.9756529, 20.7025984 ], [ 70.9755768, 20.7027504 ], [ 70.975902, 20.7029523 ], [ 70.9762584, 20.7030641 ], [ 70.9762735, 20.7033238 ], [ 70.9761934, 20.7036565 ], [ 70.9758833, 20.7040917 ], [ 70.9754591, 20.7044071 ], [ 70.9751902, 20.7044983 ], [ 70.9749763, 20.7043554 ], [ 70.974786, 20.7044301 ], [ 70.9748307, 20.704551 ], [ 70.9746756, 20.7046543 ], [ 70.9746122, 20.704562 ], [ 70.9743631, 20.7044477 ], [ 70.9744117, 20.7043463 ], [ 70.9742174, 20.7042279 ], [ 70.9739962, 20.7041272 ], [ 70.973825, 20.7040213 ], [ 70.9737029, 20.7040323 ], [ 70.973583, 20.7039862 ], [ 70.9734257, 20.7040631 ], [ 70.973334, 20.7042038 ], [ 70.9733105, 20.7043224 ], [ 70.9731727, 20.7043558 ], [ 70.9732165, 20.7044587 ], [ 70.9732188, 20.7046521 ], [ 70.9730948, 20.7048025 ], [ 70.9728521, 20.7049041 ], [ 70.9726336, 20.7048865 ], [ 70.9725303, 20.70477 ], [ 70.9721308, 20.7045041 ], [ 70.971856, 20.7043878 ], [ 70.9716351, 20.7042623 ], [ 70.9714494, 20.7040931 ], [ 70.9712685, 20.7042645 ], [ 70.9710362, 20.7043414 ], [ 70.9710383, 20.7044601 ], [ 70.9709584, 20.7045986 ], [ 70.9710571, 20.7047872 ], [ 70.9712498, 20.7048586 ], [ 70.9712299, 20.7051322 ], [ 70.9710521, 20.7053961 ], [ 70.9707647, 20.7056233 ], [ 70.9705753, 20.7055549 ], [ 70.9703527, 20.7054088 ], [ 70.9698011, 20.7051415 ], [ 70.9696854, 20.7052489 ], [ 70.9697745, 20.7053715 ], [ 70.9700802, 20.7054492 ], [ 70.9702729, 20.7056139 ], [ 70.9703294, 20.705816 ], [ 70.9704922, 20.7059963 ], [ 70.9706285, 20.7061579 ], [ 70.9705825, 20.706376 ], [ 70.970336, 20.7069474 ], [ 70.9699026, 20.707348 ], [ 70.9695078, 20.7073866 ], [ 70.969512, 20.7075566 ], [ 70.9694457, 20.7076322 ], [ 70.9693159, 20.7076249 ], [ 70.969203, 20.7075504 ], [ 70.9690874, 20.7075446 ], [ 70.9690177, 20.7077328 ], [ 70.9688873, 20.7077928 ], [ 70.9687942, 20.7076902 ], [ 70.968545, 20.7076809 ], [ 70.9683095, 20.7075696 ], [ 70.967907, 20.7072675 ], [ 70.9674822, 20.7070642 ], [ 70.9673189, 20.7070406 ], [ 70.9672092, 20.7069474 ], [ 70.9671561, 20.7071712 ], [ 70.9668836, 20.7072551 ], [ 70.9666809, 20.7071587 ], [ 70.9665148, 20.7070251 ], [ 70.9660763, 20.7070138 ], [ 70.9659167, 20.7069691 ], [ 70.9659499, 20.7067826 ], [ 70.9658236, 20.706621 ], [ 70.9656575, 20.7065122 ], [ 70.965681, 20.7063623 ], [ 70.9655611, 20.7064003 ], [ 70.9654747, 20.7064967 ], [ 70.9651458, 20.7063879 ], [ 70.9648966, 20.7061952 ], [ 70.9648788, 20.7059914 ], [ 70.9647503, 20.7060615 ], [ 70.9643715, 20.70599 ], [ 70.9641788, 20.7059869 ], [ 70.964037, 20.705846 ], [ 70.9637967, 20.7057725 ], [ 70.963604, 20.7058191 ], [ 70.9634445, 20.7059154 ], [ 70.9634312, 20.7060118 ], [ 70.9633555, 20.706066 ], [ 70.9631886, 20.7060646 ], [ 70.9629992, 20.7060802 ], [ 70.9628829, 20.7061548 ], [ 70.9627633, 20.7061144 ], [ 70.9626005, 20.7062076 ], [ 70.9628912, 20.7064597 ], [ 70.9627367, 20.7066024 ], [ 70.9623311, 20.706756 ], [ 70.9622848, 20.7069225 ], [ 70.9621319, 20.7069194 ], [ 70.9620021, 20.7070549 ], [ 70.9606913, 20.7072231 ], [ 70.9602715, 20.7072134 ], [ 70.9598425, 20.7071055 ], [ 70.9596431, 20.7068168 ], [ 70.9594404, 20.7068883 ], [ 70.9592942, 20.7067951 ], [ 70.9593507, 20.706677 ], [ 70.9592247, 20.7065739 ], [ 70.9591281, 20.7063164 ], [ 70.9592515, 20.706057 ], [ 70.9594143, 20.7058873 ], [ 70.9591082, 20.7057072 ], [ 70.958803, 20.7056594 ], [ 70.9587499, 20.7058101 ], [ 70.9588257, 20.7059652 ], [ 70.9587792, 20.7061019 ], [ 70.9585699, 20.7060615 ], [ 70.9583389, 20.7059227 ], [ 70.9578289, 20.70576 ], [ 70.9573949, 20.7056298 ], [ 70.9567351, 20.7053989 ], [ 70.9565702, 20.7050997 ], [ 70.9556052, 20.7046001 ], [ 70.9549178, 20.7043864 ], [ 70.9545866, 20.7041222 ], [ 70.9543097, 20.7038678 ], [ 70.9536019, 20.7039268 ], [ 70.9529119, 20.7041056 ], [ 70.9525827, 20.7040126 ], [ 70.9520145, 20.7043986 ], [ 70.951893, 20.7044538 ], [ 70.9517297, 20.7044776 ], [ 70.9516946, 20.704454 ], [ 70.9515366, 20.7045208 ], [ 70.9514381, 20.7046216 ], [ 70.951214, 20.7046696 ], [ 70.9513055, 20.7045344 ], [ 70.9512167, 20.7045353 ], [ 70.951138, 20.7047083 ], [ 70.9511714, 20.704774 ], [ 70.9510028, 20.704871 ], [ 70.9513056, 20.7052733 ], [ 70.9512643, 20.7055829 ], [ 70.9512006, 20.7058087 ], [ 70.9511691, 20.7059745 ], [ 70.9510339, 20.7059847 ], [ 70.9499677, 20.7057248 ], [ 70.9497525, 20.7058564 ], [ 70.9495553, 20.7058608 ], [ 70.9494473, 20.7057722 ], [ 70.9493564, 20.7058879 ], [ 70.9494125, 20.7059828 ], [ 70.9494515, 20.706221 ], [ 70.9493557, 20.7062916 ], [ 70.9492469, 20.7063362 ], [ 70.9491351, 20.7063378 ], [ 70.9489816, 20.7063177 ], [ 70.9488184, 20.7062555 ], [ 70.9488519, 20.7060855 ], [ 70.9488363, 20.7059963 ], [ 70.9487372, 20.705977 ], [ 70.948671, 20.7057432 ], [ 70.9484169, 20.7056646 ], [ 70.9480383, 20.7054834 ], [ 70.947768, 20.7057439 ], [ 70.9447658, 20.7062927 ], [ 70.9444889, 20.7060383 ], [ 70.9442154, 20.7060415 ], [ 70.9439451, 20.706302 ], [ 70.9414964, 20.7073592 ], [ 70.9384957, 20.708037 ], [ 70.9383747, 20.7093254 ], [ 70.9374309, 20.7103659 ], [ 70.9360648, 20.7105093 ], [ 70.9357945, 20.7107699 ], [ 70.9341566, 20.7110457 ], [ 70.9338862, 20.7113061 ], [ 70.931978, 20.7118423 ], [ 70.9273277, 20.7118945 ], [ 70.923212, 20.7111884 ], [ 70.9212852, 20.7106472 ], [ 70.9199392, 20.7101547 ], [ 70.9187997, 20.7096023 ], [ 70.9179877, 20.7091768 ], [ 70.9170776, 20.7085678 ], [ 70.9165343, 20.7079322 ], [ 70.9161156, 20.7073076 ], [ 70.915803, 20.7067172 ], [ 70.915494, 20.7059618 ], [ 70.9154474, 20.7052447 ], [ 70.915489, 20.7047005 ], [ 70.9156242, 20.704167 ], [ 70.9158919, 20.7032625 ], [ 70.9161568, 20.7027028 ], [ 70.916492, 20.702132 ], [ 70.9169444, 20.7021003 ], [ 70.9173398, 20.7022184 ], [ 70.9173996, 20.702364 ], [ 70.9177716, 20.7026881 ], [ 70.9180055, 20.702715 ], [ 70.9181172, 20.7026144 ], [ 70.917853, 20.7024092 ], [ 70.9177033, 20.7023646 ], [ 70.9174851, 20.7022115 ], [ 70.9173756, 20.702223 ], [ 70.9169542, 20.7020866 ], [ 70.9169988, 20.7019061 ], [ 70.9168313, 20.7018037 ], [ 70.9165983, 20.7015894 ], [ 70.9161603, 20.7013918 ], [ 70.9159337, 20.7011439 ], [ 70.9151225, 20.7006299 ], [ 70.9143927, 20.7001048 ], [ 70.9137686, 20.6996898 ], [ 70.9135678, 20.6996248 ], [ 70.913555, 20.6995502 ], [ 70.91338, 20.6995463 ], [ 70.9131643, 20.6994095 ], [ 70.9131113, 20.6994424 ], [ 70.9130607, 20.699442 ], [ 70.9129606, 20.69964 ], [ 70.9127843, 20.6995333 ], [ 70.9127876, 20.6996597 ], [ 70.9126434, 20.6996582 ], [ 70.9125156, 20.699555 ], [ 70.9124682, 20.6998085 ], [ 70.9120832, 20.6998978 ], [ 70.9116939, 20.6997975 ], [ 70.911789, 20.699981 ], [ 70.9117916, 20.7001549 ], [ 70.9118459, 20.7005574 ], [ 70.9119311, 20.7006764 ], [ 70.9120692, 20.7013526 ], [ 70.9119571, 20.7015494 ], [ 70.9118304, 20.7016837 ], [ 70.9114549, 20.7018634 ], [ 70.91096, 20.702029 ], [ 70.9105131, 20.7020211 ], [ 70.91024, 20.7019176 ], [ 70.9100549, 20.7017849 ], [ 70.909996, 20.7016631 ], [ 70.9101656, 20.7016404 ], [ 70.9102451, 20.7016139 ], [ 70.9102287, 20.7014468 ], [ 70.9099897, 20.7013095 ], [ 70.9097473, 20.7012038 ], [ 70.9095081, 20.701109 ], [ 70.9091663, 20.7011647 ], [ 70.908885, 20.7011163 ], [ 70.9085392, 20.7010495 ], [ 70.9080805, 20.7008411 ], [ 70.9079338, 20.7008367 ], [ 70.9077433, 20.7008025 ], [ 70.9076802, 20.7007336 ], [ 70.9075355, 20.7007483 ], [ 70.9074739, 20.7007222 ], [ 70.907166, 20.700775 ], [ 70.9071417, 20.7009411 ], [ 70.9069791, 20.7008278 ], [ 70.9067255, 20.7007941 ], [ 70.9064748, 20.7006243 ], [ 70.9063991, 20.7007182 ], [ 70.9062449, 20.7006832 ], [ 70.9060449, 20.7005613 ], [ 70.9059865, 20.7006129 ], [ 70.9055911, 20.7004725 ], [ 70.9054006, 20.7004244 ], [ 70.9052069, 20.7002933 ], [ 70.9050926, 20.7003421 ], [ 70.904747, 20.7003856 ], [ 70.9045216, 20.700326 ], [ 70.9045565, 20.7002753 ], [ 70.9045202, 20.7002605 ], [ 70.9043696, 20.7002775 ], [ 70.9043094, 20.700205 ], [ 70.904233, 20.7002348 ], [ 70.9041188, 20.7001992 ], [ 70.9039674, 20.7002812 ], [ 70.9037477, 20.700147 ], [ 70.9036691, 20.7000823 ], [ 70.903678, 20.7001466 ], [ 70.9033752, 20.7001115 ], [ 70.9032208, 20.7000585 ], [ 70.9029436, 20.6999291 ], [ 70.9026836, 20.6997233 ], [ 70.9025874, 20.6997388 ], [ 70.9022229, 20.6996955 ], [ 70.9020934, 20.6996907 ], [ 70.9018537, 20.6995595 ], [ 70.9016342, 20.6995493 ], [ 70.9015749, 20.6996278 ], [ 70.9014752, 20.6995411 ], [ 70.9013508, 20.6996353 ], [ 70.9010894, 20.6995036 ], [ 70.9009054, 20.6996502 ], [ 70.9008412, 20.6996256 ], [ 70.900685, 20.6996563 ], [ 70.9007151, 20.6996158 ], [ 70.9006767, 20.6995032 ], [ 70.9003524, 20.6994979 ], [ 70.9005072, 20.6996079 ], [ 70.9005821, 20.699661 ], [ 70.9004938, 20.699664 ], [ 70.9001251, 20.6994835 ], [ 70.8999832, 20.6992028 ], [ 70.8998154, 20.6991201 ], [ 70.8995263, 20.6995608 ], [ 70.8992688, 20.6994745 ], [ 70.899166, 20.6993218 ], [ 70.8989399, 20.6995158 ], [ 70.8988267, 20.6997379 ], [ 70.8984912, 20.69988 ], [ 70.8981896, 20.699911 ], [ 70.8981499, 20.6999936 ], [ 70.8977846, 20.6999406 ], [ 70.897449, 20.7001664 ], [ 70.8974312, 20.7002973 ], [ 70.8974838, 20.7003222 ], [ 70.8973116, 20.7004837 ], [ 70.8975432, 20.700579 ], [ 70.8975767, 20.700902 ], [ 70.8976965, 20.7009618 ], [ 70.8977571, 20.7009219 ], [ 70.89788, 20.7010278 ], [ 70.8978988, 20.7013071 ], [ 70.8976161, 20.7015208 ], [ 70.8976017, 20.7017309 ], [ 70.8979782, 20.7017783 ], [ 70.8983812, 20.7019387 ], [ 70.8986134, 20.7023034 ], [ 70.8990237, 20.7023941 ], [ 70.8990578, 20.7026166 ], [ 70.8990326, 20.7028627 ], [ 70.8989785, 20.703116 ], [ 70.8988507, 20.7033442 ], [ 70.8987567, 20.7034706 ], [ 70.8985444, 20.703669 ], [ 70.8982914, 20.7036708 ], [ 70.8982195, 20.7034303 ], [ 70.8980103, 20.7038085 ], [ 70.898203, 20.7039745 ], [ 70.898055, 20.7040142 ], [ 70.8981634, 20.7040466 ], [ 70.8980846, 20.7042231 ], [ 70.89796, 20.7043986 ], [ 70.8977811, 20.7045779 ], [ 70.8976091, 20.7046915 ], [ 70.8973938, 20.7047469 ], [ 70.8971744, 20.7046756 ], [ 70.8970563, 20.704782 ], [ 70.8970397, 20.7048631 ], [ 70.8966492, 20.7054065 ], [ 70.8964072, 20.7054739 ], [ 70.8962772, 20.7054544 ], [ 70.8959687, 20.7055185 ], [ 70.8958822, 20.7056136 ], [ 70.8958755, 20.7057346 ], [ 70.8957691, 20.7057797 ], [ 70.8956319, 20.7058429 ], [ 70.8957742, 20.7059566 ], [ 70.8958047, 20.7061933 ], [ 70.8957287, 20.7062325 ], [ 70.8957608, 20.7062946 ], [ 70.8954836, 20.7064497 ], [ 70.8951903, 20.706591 ], [ 70.8949163, 20.7067148 ], [ 70.8944282, 20.7070257 ], [ 70.8933227, 20.7073471 ], [ 70.8921425, 20.7079776 ], [ 70.8911959, 20.7081436 ], [ 70.8908956, 20.7081434 ], [ 70.8904615, 20.7082652 ], [ 70.8899914, 20.7084923 ], [ 70.8897653, 20.7085933 ], [ 70.8895257, 20.7086076 ], [ 70.8892174, 20.708611 ], [ 70.8889591, 20.7087185 ], [ 70.8888228, 20.7087231 ], [ 70.8884982, 20.7088088 ], [ 70.8878969, 20.7087786 ], [ 70.8875486, 20.7088517 ], [ 70.8873931, 20.7088474 ], [ 70.8868623, 20.7087994 ], [ 70.8861858, 20.7088361 ], [ 70.8851878, 20.7088622 ], [ 70.8836747, 20.708669 ], [ 70.8828796, 20.7087571 ], [ 70.8822067, 20.7089214 ], [ 70.8815121, 20.709003 ], [ 70.881085, 20.7089558 ], [ 70.8807165, 20.7089229 ], [ 70.8802735, 20.7088162 ], [ 70.8794157, 20.7088181 ], [ 70.8790595, 20.7089362 ], [ 70.8783353, 20.7090455 ], [ 70.8775443, 20.709022 ], [ 70.8760643, 20.708544 ], [ 70.874866, 20.70834 ], [ 70.8733869, 20.7083713 ], [ 70.8731573, 20.7083831 ], [ 70.8730798, 20.7085966 ], [ 70.8732364, 20.7088918 ], [ 70.8738184, 20.7090681 ], [ 70.8735916, 20.7093253 ], [ 70.8734562, 20.7095856 ], [ 70.8735923, 20.7099344 ], [ 70.8738527, 20.7103229 ], [ 70.8738574, 20.7112571 ], [ 70.873819, 20.711411 ], [ 70.8737654, 20.7141908 ], [ 70.8739513, 20.7142394 ], [ 70.8738891, 20.7149728 ], [ 70.873845, 20.7155907 ], [ 70.873821, 20.7157778 ], [ 70.8736329, 20.7158141 ], [ 70.8737261, 20.7174529 ], [ 70.8743509, 20.7187555 ], [ 70.8751612, 20.7191636 ], [ 70.8776282, 20.7195233 ], [ 70.8777581, 20.7190071 ], [ 70.8778938, 20.7188765 ], [ 70.8781675, 20.7188735 ], [ 70.8784441, 20.7191279 ], [ 70.8817301, 20.7193494 ], [ 70.8869456, 20.7207085 ], [ 70.8868535, 20.7208784 ], [ 70.8858545, 20.720978 ], [ 70.8858639, 20.7217501 ], [ 70.8869614, 20.7219954 ], [ 70.8869679, 20.7225102 ], [ 70.8866927, 20.7223842 ], [ 70.8834097, 20.7224201 ], [ 70.8828658, 20.7226834 ], [ 70.8814978, 20.7226985 ], [ 70.8809476, 20.7224469 ], [ 70.8798533, 20.722459 ], [ 70.8793109, 20.7228514 ], [ 70.8793141, 20.7231088 ], [ 70.8804099, 20.723225 ], [ 70.8815169, 20.7242426 ], [ 70.8834447, 20.7252513 ], [ 70.8848127, 20.7252364 ], [ 70.8852274, 20.7256183 ], [ 70.8849792, 20.7276803 ], [ 70.8844385, 20.7282012 ], [ 70.8844417, 20.7284586 ], [ 70.8848573, 20.7288397 ], [ 70.8873228, 20.72907 ], [ 70.8881467, 20.7293184 ], [ 70.8888382, 20.7299548 ], [ 70.8889818, 20.7304681 ], [ 70.8897995, 20.7302018 ], [ 70.889529, 20.730462 ], [ 70.8895322, 20.7307195 ], [ 70.8898057, 20.7307164 ], [ 70.8898968, 20.7305458 ], [ 70.8903513, 20.7305813 ], [ 70.8914521, 20.731084 ], [ 70.8920057, 20.7315928 ] ] ], [ [ [ 87.0938071, 20.7516319 ], [ 87.0844996, 20.7530526 ], [ 87.0806668, 20.7533121 ], [ 87.0740957, 20.7524142 ], [ 87.0740959, 20.7529292 ], [ 87.0732745, 20.7529296 ], [ 87.0728638, 20.7537022 ], [ 87.0727279, 20.7549901 ], [ 87.0754665, 20.7564047 ], [ 87.0762879, 20.7564044 ], [ 87.0801221, 20.7589778 ], [ 87.0806699, 20.7591069 ], [ 87.0798473, 20.757047 ], [ 87.0806685, 20.7566599 ], [ 87.0809424, 20.7566597 ], [ 87.0820378, 20.7573034 ], [ 87.0814896, 20.7560162 ], [ 87.0825848, 20.7561439 ], [ 87.0836797, 20.7556283 ], [ 87.0869651, 20.7557559 ], [ 87.0868282, 20.7567861 ], [ 87.0853236, 20.7579453 ], [ 87.0842284, 20.7578175 ], [ 87.0838182, 20.7596204 ], [ 87.0835446, 20.759878 ], [ 87.0832715, 20.7611658 ], [ 87.0817666, 20.7621966 ], [ 87.0817664, 20.761939 ], [ 87.0802597, 20.7611672 ], [ 87.0801225, 20.7596221 ], [ 87.0793011, 20.7596225 ], [ 87.0790278, 20.7606527 ], [ 87.0795756, 20.7606525 ], [ 87.0793025, 20.7619402 ], [ 87.0798502, 20.7623257 ], [ 87.0823147, 20.7629689 ], [ 87.0827252, 20.7634837 ], [ 87.082863, 20.7642562 ], [ 87.0856011, 20.7645125 ], [ 87.0873784, 20.7611638 ], [ 87.0888832, 20.7585877 ], [ 87.0897044, 20.7583297 ], [ 87.0902514, 20.7572995 ], [ 87.0907989, 20.7572991 ], [ 87.0907986, 20.7567841 ], [ 87.0913461, 20.7566546 ], [ 87.0921669, 20.7558816 ], [ 87.094083, 20.755108 ], [ 87.0979157, 20.75472 ], [ 87.09819, 20.7554924 ], [ 87.0987375, 20.7554921 ], [ 87.0979154, 20.7540757 ], [ 87.0946296, 20.7535626 ], [ 87.0942183, 20.7531768 ], [ 87.0938071, 20.7516319 ] ] ], [ [ [ 72.8602554, 20.7651099 ], [ 72.8602481, 20.7656245 ], [ 72.86052, 20.7657563 ], [ 72.860788, 20.766146 ], [ 72.8602428, 20.7660101 ], [ 72.8591592, 20.7652244 ], [ 72.8583384, 20.7652142 ], [ 72.8572384, 20.7655871 ], [ 72.8570938, 20.7661001 ], [ 72.8561313, 20.7664737 ], [ 72.855854, 20.7667275 ], [ 72.8531143, 20.7669508 ], [ 72.8510491, 20.7678262 ], [ 72.8509054, 20.7683391 ], [ 72.8478939, 20.7684297 ], [ 72.8473394, 20.7689375 ], [ 72.8462394, 20.7693102 ], [ 72.8460948, 20.7698232 ], [ 72.8454021, 20.7704575 ], [ 72.8448514, 20.7707081 ], [ 72.8441575, 20.7713433 ], [ 72.8433222, 20.7723622 ], [ 72.8431785, 20.7728751 ], [ 72.8426295, 20.7729965 ], [ 72.843283, 20.7745674 ], [ 72.8433974, 20.7767387 ], [ 72.8424246, 20.7777561 ], [ 72.8428317, 20.7780186 ], [ 72.8428281, 20.778276 ], [ 72.8428136, 20.7793053 ], [ 72.8429462, 20.7795642 ], [ 72.8429389, 20.7800791 ], [ 72.8426616, 20.7803329 ], [ 72.842518, 20.7808458 ], [ 72.8433352, 20.7811135 ], [ 72.8437378, 20.7816334 ], [ 72.8438678, 20.7821498 ], [ 72.844685, 20.7824174 ], [ 72.8444078, 20.7826714 ], [ 72.8444042, 20.7829286 ], [ 72.8446777, 20.782932 ], [ 72.8447733, 20.7827634 ], [ 72.8455023, 20.782685 ], [ 72.8453832, 20.7813966 ], [ 72.8449806, 20.7808768 ], [ 72.8451681, 20.7772758 ], [ 72.8454454, 20.7770218 ], [ 72.84559, 20.7765089 ], [ 72.8458636, 20.7765123 ], [ 72.8459818, 20.7778007 ], [ 72.8462517, 20.7780615 ], [ 72.8466225, 20.7808974 ], [ 72.847717, 20.7809112 ], [ 72.8478716, 20.7796262 ], [ 72.8470579, 20.7791012 ], [ 72.8470171, 20.7789309 ], [ 72.8480198, 20.7788559 ], [ 72.8482825, 20.7796313 ], [ 72.8485561, 20.7796347 ], [ 72.8485671, 20.7788627 ], [ 72.8488389, 20.7789944 ], [ 72.8502088, 20.7788833 ], [ 72.8502161, 20.7783686 ], [ 72.8515879, 20.7781284 ], [ 72.8517497, 20.7763287 ], [ 72.8518907, 20.776073 ], [ 72.8505263, 20.7757986 ], [ 72.8505299, 20.7755414 ], [ 72.8518997, 20.7754293 ], [ 72.8530016, 20.7749283 ], [ 72.8538224, 20.7749386 ], [ 72.8540942, 20.7750711 ], [ 72.8542379, 20.7745582 ], [ 72.8541197, 20.7732698 ], [ 72.8535724, 20.7732628 ], [ 72.8535798, 20.7727481 ], [ 72.8533061, 20.7727447 ], [ 72.8532989, 20.7732594 ], [ 72.8530252, 20.773256 ], [ 72.8527807, 20.7711938 ], [ 72.8535924, 20.771847 ], [ 72.8541379, 20.7719831 ], [ 72.8537415, 20.7709485 ], [ 72.8539925, 20.7694949 ], [ 72.8541742, 20.7694096 ], [ 72.8542887, 20.7709553 ], [ 72.8545588, 20.7712161 ], [ 72.8549477, 20.7727653 ], [ 72.8552197, 20.7728969 ], [ 72.8626128, 20.7726036 ], [ 72.8627529, 20.7723478 ], [ 72.8627818, 20.7702891 ], [ 72.8618861, 20.7659024 ], [ 72.8608861, 20.7658014 ], [ 72.8607954, 20.7656313 ], [ 72.8613426, 20.7656381 ], [ 72.8610744, 20.7652484 ], [ 72.8602554, 20.7651099 ] ] ], [ [ [ 72.686471794871792, 21.09365 ], [ 72.686471794871807, 21.09365 ], [ 72.686, 21.09461 ], [ 72.68565, 21.09568 ], [ 72.68516, 21.09625 ], [ 72.68426, 21.09763 ], [ 72.68301, 21.09872 ], [ 72.68195, 21.09982 ], [ 72.68064, 21.10083 ], [ 72.6786, 21.10196 ], [ 72.67754, 21.10296 ], [ 72.67666, 21.10407 ], [ 72.67593, 21.10509 ], [ 72.67515, 21.10667 ], [ 72.67468, 21.10811 ], [ 72.67433, 21.10962 ], [ 72.67375, 21.11263 ], [ 72.67343, 21.11545 ], [ 72.67324, 21.11746 ], [ 72.67306, 21.12053 ], [ 72.67208, 21.12461 ], [ 72.67177, 21.12659 ], [ 72.6712, 21.12926 ], [ 72.67008, 21.13288 ], [ 72.66898, 21.1352 ], [ 72.668, 21.13704 ], [ 72.66692, 21.13876 ], [ 72.66639, 21.1403 ], [ 72.66612, 21.1435 ], [ 72.66613, 21.14828 ], [ 72.66663, 21.15059 ], [ 72.66904, 21.15324 ], [ 72.67197, 21.15508 ], [ 72.67402, 21.15575 ], [ 72.67642, 21.15551 ], [ 72.68047, 21.15394 ], [ 72.68408, 21.15213 ], [ 72.68783, 21.15084 ], [ 72.69188, 21.1494 ], [ 72.70057, 21.14595 ], [ 72.70466, 21.14385 ], [ 72.70683, 21.14269 ], [ 72.70919, 21.14182 ], [ 72.70927, 21.14176 ], [ 72.70935, 21.1416 ], [ 72.7087, 21.14131 ], [ 72.70822, 21.14105 ], [ 72.70788, 21.14061 ], [ 72.70761, 21.14012 ], [ 72.70729, 21.13931 ], [ 72.70689, 21.13847 ], [ 72.70668, 21.13815 ], [ 72.70604, 21.13767 ], [ 72.70508, 21.13725 ], [ 72.70459, 21.13687 ], [ 72.70423, 21.13648 ], [ 72.70383, 21.13576 ], [ 72.70364, 21.13478 ], [ 72.70367, 21.13378 ], [ 72.70388, 21.13274 ], [ 72.70394, 21.13222 ], [ 72.70356, 21.13117 ], [ 72.7026, 21.12886 ], [ 72.70152, 21.12665 ], [ 72.70133, 21.12532 ], [ 72.70112, 21.12334 ], [ 72.70064, 21.12241 ], [ 72.69932, 21.12133 ], [ 72.69793, 21.1205 ], [ 72.69683, 21.11967 ], [ 72.69618, 21.11856 ], [ 72.69638, 21.11681 ], [ 72.69698, 21.11471 ], [ 72.69792, 21.11248 ], [ 72.69804, 21.11163 ], [ 72.69804, 21.11093 ], [ 72.6978, 21.11037 ], [ 72.69743, 21.10924 ], [ 72.6972, 21.10795 ], [ 72.69698, 21.107 ], [ 72.69553, 21.10475 ], [ 72.69484, 21.10379 ], [ 72.69415, 21.10253 ], [ 72.69324, 21.10094 ], [ 72.69219, 21.09897 ], [ 72.69123, 21.09745 ], [ 72.69041, 21.09576 ], [ 72.6897, 21.09409 ], [ 72.689553333333336, 21.09365 ], [ 72.68928, 21.09283 ], [ 72.68872, 21.09223 ], [ 72.68786, 21.09198 ], [ 72.68715, 21.09227 ], [ 72.686471794871792, 21.09365 ] ] ], [ [ [ 71.5781522, 20.9886213 ], [ 71.5776043, 20.9886294 ], [ 71.5771753, 20.9876067 ], [ 71.5760664, 20.9868515 ], [ 71.5755053, 20.9860881 ], [ 71.5749441, 20.9853246 ], [ 71.5741048, 20.9843079 ], [ 71.5737956, 20.9822541 ], [ 71.5732344, 20.9814907 ], [ 71.572943, 20.9804658 ], [ 71.5728043, 20.9803387 ], [ 71.5703259, 20.9796041 ], [ 71.5695041, 20.9796166 ], [ 71.5683996, 20.9791186 ], [ 71.5667563, 20.9791433 ], [ 71.5666209, 20.9792745 ], [ 71.566369, 20.980565 ], [ 71.5659696, 20.9812138 ], [ 71.5651501, 20.9813552 ], [ 71.5647168, 20.9800753 ], [ 71.5646905, 20.9785317 ], [ 71.5645518, 20.9784047 ], [ 71.5623473, 20.9776659 ], [ 71.5618016, 20.9778031 ], [ 71.5617929, 20.9772887 ], [ 71.5612494, 20.9775542 ], [ 71.5612407, 20.9770396 ], [ 71.5609689, 20.9771719 ], [ 71.5604212, 20.9771802 ], [ 71.5599628, 20.9769704 ], [ 71.5598668, 20.9768029 ], [ 71.5584951, 20.9766944 ], [ 71.5582233, 20.9768277 ], [ 71.5585899, 20.974249 ], [ 71.5591246, 20.973469 ], [ 71.5595053, 20.9716619 ], [ 71.5592335, 20.9717942 ], [ 71.5584117, 20.9718065 ], [ 71.5582766, 20.9719377 ], [ 71.5578836, 20.9729728 ], [ 71.5576098, 20.972977 ], [ 71.5576011, 20.9724625 ], [ 71.5570555, 20.9725988 ], [ 71.554036, 20.9722586 ], [ 71.5539116, 20.9730326 ], [ 71.5532339, 20.9734281 ], [ 71.5526861, 20.9734365 ], [ 71.5515816, 20.9729383 ], [ 71.5510339, 20.9729466 ], [ 71.5493817, 20.9724565 ], [ 71.546634, 20.9719831 ], [ 71.5441732, 20.9722771 ], [ 71.5439037, 20.9725385 ], [ 71.5433581, 20.9726757 ], [ 71.5436406, 20.9731862 ], [ 71.5430929, 20.9731944 ], [ 71.5429642, 20.9737109 ], [ 71.5422951, 20.9746211 ], [ 71.5417495, 20.9747583 ], [ 71.541493, 20.9757916 ], [ 71.5409451, 20.9757997 ], [ 71.540167, 20.9783847 ], [ 71.5407147, 20.9783764 ], [ 71.5407234, 20.978891 ], [ 71.5415452, 20.9788787 ], [ 71.5417077, 20.9804202 ], [ 71.5413083, 20.981069 ], [ 71.5393994, 20.9816122 ], [ 71.5380364, 20.982019 ], [ 71.5379077, 20.9825355 ], [ 71.5376382, 20.9827969 ], [ 71.5365815, 20.9851286 ], [ 71.5366075, 20.9866721 ], [ 71.5360772, 20.9877094 ], [ 71.5360901, 20.9884811 ], [ 71.5358205, 20.9887424 ], [ 71.5350292, 20.9905555 ], [ 71.53449, 20.9910783 ], [ 71.5335663, 20.9931507 ], [ 71.5343947, 20.9935238 ], [ 71.5349513, 20.9940303 ], [ 71.5366058, 20.9946493 ], [ 71.5366145, 20.9951639 ], [ 71.5371647, 20.9952839 ], [ 71.5374429, 20.995537 ], [ 71.5385452, 20.9959071 ], [ 71.5389644, 20.9964155 ], [ 71.5391105, 20.9969278 ], [ 71.5396606, 20.9970479 ], [ 71.5404911, 20.9975502 ], [ 71.5410477, 20.9980566 ], [ 71.5424306, 20.9988078 ], [ 71.5446353, 20.9995468 ], [ 71.5460052, 20.9995264 ], [ 71.5462834, 20.9997795 ], [ 71.5498513, 21.0001125 ], [ 71.5502532, 20.9995918 ], [ 71.5503775, 20.998818 ], [ 71.5501035, 20.9988222 ], [ 71.5501122, 20.9993366 ], [ 71.5492925, 20.9994771 ], [ 71.5490143, 20.999224 ], [ 71.5484641, 20.999104 ], [ 71.5484597, 20.9988468 ], [ 71.5492817, 20.9988345 ], [ 71.5495425, 20.9980586 ], [ 71.5500968, 20.9984357 ], [ 71.550647, 20.9985566 ], [ 71.5507791, 20.9982973 ], [ 71.5507704, 20.9977829 ], [ 71.5510356, 20.9972643 ], [ 71.5510269, 20.9967496 ], [ 71.5508859, 20.9964945 ], [ 71.5517079, 20.9964822 ], [ 71.5515616, 20.9959696 ], [ 71.5516773, 20.9946814 ], [ 71.552225, 20.9946731 ], [ 71.5519424, 20.9941628 ], [ 71.5527642, 20.9941503 ], [ 71.5521008, 20.995447 ], [ 71.5521139, 20.9962187 ], [ 71.5515835, 20.9972559 ], [ 71.5513357, 20.9988037 ], [ 71.5506907, 21.0011293 ], [ 71.5504168, 21.0011333 ], [ 71.5504299, 21.0019052 ], [ 71.5512583, 21.0022782 ], [ 71.552352, 21.0021337 ], [ 71.5524754, 21.0013597 ], [ 71.5530057, 21.0003225 ], [ 71.5529927, 20.9995508 ], [ 71.5532622, 20.9992894 ], [ 71.5536561, 20.9982542 ], [ 71.5547366, 20.9973368 ], [ 71.555554, 20.9970673 ], [ 71.5563758, 20.9970549 ], [ 71.5588545, 20.9977897 ], [ 71.5591284, 20.9977855 ], [ 71.5602176, 20.9973835 ], [ 71.5600759, 20.9971284 ], [ 71.5605754, 20.9942903 ], [ 71.5608406, 20.9937717 ], [ 71.5608186, 20.9924854 ], [ 71.5612125, 20.9914502 ], [ 71.5620277, 20.9910515 ], [ 71.5647648, 20.9908821 ], [ 71.5647561, 20.9903675 ], [ 71.5653106, 20.9907447 ], [ 71.5688804, 20.9912055 ], [ 71.5691522, 20.9910732 ], [ 71.5693151, 20.9926147 ], [ 71.5695933, 20.9928677 ], [ 71.571193, 20.9982474 ], [ 71.573389, 20.9984716 ], [ 71.5735122, 20.9976976 ], [ 71.5740469, 20.9969176 ], [ 71.574586, 20.9963949 ], [ 71.5751119, 20.9951002 ], [ 71.5753815, 20.9948388 ], [ 71.5756421, 20.994063 ], [ 71.5761768, 20.993283 ], [ 71.5767158, 20.99276 ], [ 71.5772416, 20.9914656 ], [ 71.5780501, 20.9906814 ], [ 71.5783108, 20.9899054 ], [ 71.5781522, 20.9886213 ] ] ], [ [ [ 71.5814614, 20.9898577 ], [ 71.5814703, 20.9903722 ], [ 71.5806506, 20.9905128 ], [ 71.5794374, 20.9916895 ], [ 71.5791768, 20.9924656 ], [ 71.5773034, 20.9950671 ], [ 71.5770515, 20.9963574 ], [ 71.5763737, 20.9967534 ], [ 71.5758413, 20.9976625 ], [ 71.5763892, 20.9976542 ], [ 71.5763936, 20.9979114 ], [ 71.5755718, 20.9979239 ], [ 71.5758545, 20.9984342 ], [ 71.5753089, 20.9985706 ], [ 71.5743828, 21.0005151 ], [ 71.5737821, 21.0054132 ], [ 71.5735083, 21.0054173 ], [ 71.573517, 21.005932 ], [ 71.5737933, 21.006056 ], [ 71.5836534, 21.0057783 ], [ 71.5839054, 21.0044878 ], [ 71.5833618, 21.0047534 ], [ 71.5834761, 21.003465 ], [ 71.5837457, 21.0032036 ], [ 71.5838698, 21.0024298 ], [ 71.5844111, 21.0020352 ], [ 71.5863176, 21.0013633 ], [ 71.5860305, 21.0005958 ], [ 71.58685, 21.0004542 ], [ 71.5879369, 20.9999229 ], [ 71.5893066, 20.9999021 ], [ 71.5895829, 21.0000271 ], [ 71.589706, 20.9992533 ], [ 71.5899755, 20.9989917 ], [ 71.5902006, 20.9961579 ], [ 71.5907351, 20.9953779 ], [ 71.5906952, 20.9930626 ], [ 71.590134, 20.992299 ], [ 71.5897126, 20.9916617 ], [ 71.5875077, 20.9909233 ], [ 71.5866859, 20.9909358 ], [ 71.5853074, 20.9904421 ], [ 71.5844856, 20.9904546 ], [ 71.5836595, 20.9902098 ], [ 71.5828377, 20.9902223 ], [ 71.5814614, 20.9898577 ] ] ], [ [ [ 86.8603312, 20.6625186 ], [ 86.856129, 20.6588021 ], [ 86.850252, 20.6543196 ], [ 86.8481778, 20.6532105 ], [ 86.8460048, 20.6522401 ], [ 86.8442269, 20.6520552 ], [ 86.8428441, 20.6521014 ], [ 86.8416095, 20.6527946 ], [ 86.8403748, 20.6548742 ], [ 86.8397822, 20.6564454 ], [ 86.8393871, 20.6581552 ], [ 86.8387944, 20.6604195 ], [ 86.83835, 20.6626837 ], [ 86.8375598, 20.6648094 ], [ 86.836819, 20.6664267 ], [ 86.8353868, 20.6683674 ], [ 86.833362, 20.6701695 ], [ 86.8315347, 20.6715095 ], [ 86.8299049, 20.6728033 ], [ 86.8269418, 20.6741432 ], [ 86.8238304, 20.6751598 ], [ 86.8205709, 20.6762225 ], [ 86.8177559, 20.6766383 ], [ 86.8139038, 20.6769156 ], [ 86.8076318, 20.6765921 ], [ 86.803187, 20.6762687 ], [ 86.8011622, 20.675668 ], [ 86.799088, 20.6745129 ], [ 86.7967174, 20.6723412 ], [ 86.7959766, 20.6704929 ], [ 86.7955322, 20.668506 ], [ 86.7957297, 20.6662418 ], [ 86.7961248, 20.6649018 ], [ 86.7968656, 20.6638852 ], [ 86.7981496, 20.663839 ], [ 86.7995324, 20.6643935 ], [ 86.8006189, 20.6653177 ], [ 86.8014091, 20.6663804 ], [ 86.8024956, 20.6673508 ], [ 86.8040266, 20.6679053 ], [ 86.8059033, 20.6677667 ], [ 86.8081256, 20.6669812 ], [ 86.8106443, 20.6649942 ], [ 86.8121753, 20.6639314 ], [ 86.8134593, 20.6625451 ], [ 86.8150397, 20.6601884 ], [ 86.8167682, 20.6561681 ], [ 86.818151, 20.6534416 ], [ 86.8205216, 20.6494211 ], [ 86.821855, 20.6478498 ], [ 86.8220525, 20.6462785 ], [ 86.8218056, 20.6440602 ], [ 86.820966, 20.6423503 ], [ 86.8200277, 20.6403168 ], [ 86.8192869, 20.6389303 ], [ 86.8182004, 20.6380522 ], [ 86.8169658, 20.63759 ], [ 86.8154842, 20.6377286 ], [ 86.8136075, 20.6388378 ], [ 86.8127185, 20.639716 ], [ 86.8111876, 20.6418881 ], [ 86.809706, 20.6431821 ], [ 86.8063477, 20.6451232 ], [ 86.8040266, 20.6455391 ], [ 86.7998781, 20.645955 ], [ 86.7941493, 20.6460937 ], [ 86.7905442, 20.645308 ], [ 86.7876798, 20.6449845 ], [ 86.7856549, 20.6451232 ], [ 86.7813603, 20.6455557 ], [ 86.7786105, 20.6465318 ], [ 86.777441, 20.64736 ], [ 86.7763664, 20.6477445 ], [ 86.7757026, 20.647774 ], [ 86.7753233, 20.6486613 ], [ 86.7755464, 20.649844 ], [ 86.7796022, 20.655607 ], [ 86.7845594, 20.6597535 ], [ 86.7883899, 20.6634781 ], [ 86.792671, 20.6693109 ], [ 86.7974028, 20.6765489 ], [ 86.8008578, 20.6816786 ], [ 86.8026604, 20.6875107 ], [ 86.8043127, 20.6929912 ], [ 86.805214, 20.7025466 ], [ 86.80589, 20.7043733 ], [ 86.8067913, 20.7057785 ], [ 86.8102463, 20.7077456 ], [ 86.8130253, 20.7109071 ], [ 86.8159545, 20.7147008 ], [ 86.8188086, 20.7194076 ], [ 86.8213622, 20.7279779 ], [ 86.8228644, 20.7373906 ], [ 86.8262349, 20.7498054 ], [ 86.8304597, 20.7599015 ], [ 86.8364448, 20.7657174 ], [ 86.84243, 20.7694483 ], [ 86.8482978, 20.773179 ], [ 86.8522879, 20.7750444 ], [ 86.8569821, 20.7757027 ], [ 86.86285, 20.7751541 ], [ 86.8673095, 20.7733985 ], [ 86.8765806, 20.7703261 ], [ 86.8869079, 20.7676926 ], [ 86.8953576, 20.766705 ], [ 86.9069758, 20.7672536 ], [ 86.914604, 20.7686801 ], [ 86.9319071, 20.7671094 ], [ 86.9402441, 20.7664774 ], [ 86.9474544, 20.7661965 ], [ 86.9599223, 20.7662667 ], [ 86.9672078, 20.7673201 ], [ 86.9707379, 20.7690758 ], [ 86.9762208, 20.7711826 ], [ 86.9857595, 20.7718146 ], [ 86.9917681, 20.770691 ], [ 86.9943969, 20.769146 ], [ 86.9977767, 20.7617018 ], [ 86.9990536, 20.7572772 ], [ 86.9997295, 20.7544678 ], [ 87.0022081, 20.7504644 ], [ 87.0071652, 20.7426681 ], [ 87.007691, 20.7405609 ], [ 87.0068648, 20.7388049 ], [ 87.0060574, 20.7356264 ], [ 87.0045317, 20.7267361 ], [ 87.002424, 20.718473 ], [ 87.0001708, 20.7135554 ], [ 86.9980678, 20.7110263 ], [ 86.9945377, 20.709832 ], [ 86.9913832, 20.709832 ], [ 86.9838724, 20.7123611 ], [ 86.977338, 20.7141174 ], [ 86.970353, 20.7150307 ], [ 86.9619409, 20.71482 ], [ 86.9540545, 20.7148902 ], [ 86.9490974, 20.7152415 ], [ 86.9427884, 20.7162953 ], [ 86.9391456, 20.7163655 ], [ 86.9341697, 20.7161021 ], [ 86.9290061, 20.7142579 ], [ 86.9228097, 20.7111844 ], [ 86.9166133, 20.7081107 ], [ 86.9085392, 20.7036319 ], [ 86.9004651, 20.6994164 ], [ 86.8934237, 20.6946738 ], [ 86.8852557, 20.6884379 ], [ 86.8777449, 20.68106 ], [ 86.8705158, 20.6739451 ], [ 86.8635923, 20.6661022 ], [ 86.8603312, 20.6625186 ] ] ], [ [ [ 87.0167646, 20.7138938 ], [ 87.0158128, 20.7120994 ], [ 87.0118273, 20.7090947 ], [ 87.0071874, 20.7081488 ], [ 87.004927, 20.7082601 ], [ 87.002607, 20.7089835 ], [ 87.0040347, 20.7101519 ], [ 87.0070684, 20.713713 ], [ 87.0106971, 20.7188318 ], [ 87.0123032, 20.7201115 ], [ 87.0149206, 20.7212799 ], [ 87.0160508, 20.7210017 ], [ 87.0171215, 20.7189431 ], [ 87.0172405, 20.7163281 ], [ 87.0167646, 20.7138938 ] ] ], [ [ [ 86.3466436, 19.9824851 ], [ 86.3465037, 19.9832571 ], [ 86.3441834, 19.9845363 ], [ 86.3434977, 19.9855639 ], [ 86.3433597, 19.9860785 ], [ 86.342269, 19.986332 ], [ 86.3413087, 19.9878737 ], [ 86.3413066, 19.9883887 ], [ 86.340485, 19.9894157 ], [ 86.3397884, 19.993276 ], [ 86.3403332, 19.9932781 ], [ 86.3408641, 19.9966281 ], [ 86.3441386, 19.9953526 ], [ 86.3460529, 19.9935569 ], [ 86.3490529, 19.9927954 ], [ 86.3502835, 19.9915121 ], [ 86.3505614, 19.9902256 ], [ 86.350436, 19.9876497 ], [ 86.3498913, 19.9876478 ], [ 86.3496241, 19.986359 ], [ 86.3488059, 19.9866136 ], [ 86.3486797, 19.9840379 ], [ 86.3495045, 19.9822381 ], [ 86.3493712, 19.9815934 ], [ 86.3482816, 19.9815894 ], [ 86.3477347, 19.9821024 ], [ 86.3466436, 19.9824851 ] ] ], [ [ [ 86.3277908, 19.9958064 ], [ 86.3283357, 19.9958085 ], [ 86.3286147, 19.9942643 ], [ 86.3291596, 19.9942664 ], [ 86.3270908, 20.0001817 ], [ 86.3268018, 20.0040436 ], [ 86.3276115, 20.0058495 ], [ 86.3281509, 20.0071392 ], [ 86.3299082, 20.0104938 ], [ 86.3304531, 20.0104958 ], [ 86.3311369, 20.0097257 ], [ 86.3315504, 20.0086971 ], [ 86.3329148, 20.0081872 ], [ 86.334148, 20.0063892 ], [ 86.3347005, 20.0045884 ], [ 86.3352474, 20.0040755 ], [ 86.3352497, 20.0035605 ], [ 86.3360344, 20.0010757 ], [ 86.3362146, 20.0009888 ], [ 86.3362166, 20.0004737 ], [ 86.3359443, 20.0004726 ], [ 86.3353956, 20.0013715 ], [ 86.3345772, 20.0016261 ], [ 86.3336162, 20.0032968 ], [ 86.3336128, 20.0040695 ], [ 86.3332968, 20.0042371 ], [ 86.33321, 20.0027803 ], [ 86.3334826, 20.0027812 ], [ 86.3336205, 20.0022666 ], [ 86.3334858, 20.0020086 ], [ 86.3340307, 20.0020107 ], [ 86.334581, 20.0007251 ], [ 86.3358097, 19.9999572 ], [ 86.3363567, 19.9994441 ], [ 86.3366345, 19.9981575 ], [ 86.3362457, 19.9935204 ], [ 86.3357009, 19.9935183 ], [ 86.3355772, 19.9904276 ], [ 86.3353058, 19.9901691 ], [ 86.3353123, 19.9886238 ], [ 86.3349053, 19.9883647 ], [ 86.3342172, 19.9899073 ], [ 86.333808, 19.9901634 ], [ 86.3340847, 19.9891343 ], [ 86.3335394, 19.9892605 ], [ 86.3329913, 19.9900311 ], [ 86.3317611, 19.9909283 ], [ 86.3309396, 19.9919553 ], [ 86.3308001, 19.9928557 ], [ 86.3299832, 19.9927243 ], [ 86.3299811, 19.9932394 ], [ 86.328479, 19.9940061 ], [ 86.3279299, 19.9950343 ], [ 86.3277908, 19.9958064 ] ] ], [ [ [ 72.60076, 21.62007 ], [ 72.60023, 21.61991 ], [ 72.59979, 21.62009 ], [ 72.59899, 21.62032 ], [ 72.59808, 21.62032 ], [ 72.59684, 21.62007 ], [ 72.59563, 21.61943 ], [ 72.59403, 21.61919 ], [ 72.59334, 21.61919 ], [ 72.59293, 21.61945 ], [ 72.5926, 21.62022 ], [ 72.59182, 21.62104 ], [ 72.5916, 21.62214 ], [ 72.59119, 21.62248 ], [ 72.59097, 21.62294 ], [ 72.59041, 21.62353 ], [ 72.59001, 21.62363 ], [ 72.58979, 21.62391 ], [ 72.59017, 21.62481 ], [ 72.59009, 21.62504 ], [ 72.58982, 21.62527 ], [ 72.5899, 21.62568 ], [ 72.59037, 21.62589 ], [ 72.5905, 21.62627 ], [ 72.59028, 21.62645 ], [ 72.59015, 21.62668 ], [ 72.59023, 21.62714 ], [ 72.59045, 21.6276 ], [ 72.591, 21.62786 ], [ 72.59144, 21.62814 ], [ 72.59147, 21.62832 ], [ 72.59114, 21.62853 ], [ 72.59064, 21.62863 ], [ 72.59064, 21.62906 ], [ 72.59086, 21.62976 ], [ 72.59133, 21.63062 ], [ 72.59196, 21.63144 ], [ 72.59235, 21.63209 ], [ 72.59213, 21.63219 ], [ 72.59172, 21.63214 ], [ 72.59149, 21.63226 ], [ 72.59174, 21.63255 ], [ 72.5937, 21.63391 ], [ 72.59428, 21.63455 ], [ 72.59478, 21.63542 ], [ 72.59475, 21.63598 ], [ 72.5945, 21.63621 ], [ 72.59414, 21.63598 ], [ 72.59387, 21.63568 ], [ 72.59353, 21.63519 ], [ 72.59262, 21.6345 ], [ 72.59163, 21.63357 ], [ 72.59092, 21.63311 ], [ 72.59023, 21.63293 ], [ 72.58973, 21.63224 ], [ 72.58926, 21.63131 ], [ 72.58838, 21.63042 ], [ 72.58791, 21.6298 ], [ 72.58747, 21.62929 ], [ 72.58666, 21.62865 ], [ 72.5858, 21.62822 ], [ 72.5852, 21.62824 ], [ 72.58476, 21.62809 ], [ 72.58382, 21.62724 ], [ 72.58134, 21.62462 ], [ 72.58087, 21.6246 ], [ 72.58081, 21.62486 ], [ 72.58115, 21.6254 ], [ 72.58325, 21.62852 ], [ 72.58491, 21.63057 ], [ 72.58642, 21.63307 ], [ 72.58753, 21.63429 ], [ 72.5898, 21.63557 ], [ 72.59263, 21.6375 ], [ 72.59366, 21.63859 ], [ 72.59428, 21.63955 ], [ 72.59518, 21.64019 ], [ 72.59635, 21.6407 ], [ 72.5978, 21.64109 ], [ 72.60021, 21.64077 ], [ 72.60428, 21.64006 ], [ 72.60759, 21.63981 ], [ 72.61015, 21.63955 ], [ 72.6138, 21.63891 ], [ 72.61615, 21.63943 ], [ 72.61884, 21.64007 ], [ 72.62084, 21.64 ], [ 72.62153, 21.63975 ], [ 72.62097, 21.63924 ], [ 72.61904, 21.63827 ], [ 72.61703, 21.63715 ], [ 72.61662, 21.63676 ], [ 72.61628, 21.63671 ], [ 72.6165, 21.63712 ], [ 72.61656, 21.63748 ], [ 72.61615, 21.63758 ], [ 72.61568, 21.63717 ], [ 72.61515, 21.63661 ], [ 72.61491, 21.63605 ], [ 72.61333, 21.63453 ], [ 72.61227, 21.63341 ], [ 72.61108, 21.63192 ], [ 72.61009, 21.63051 ], [ 72.60845, 21.62825 ], [ 72.60752, 21.62674 ], [ 72.60669, 21.62574 ], [ 72.6063, 21.62538 ], [ 72.60597, 21.6253 ], [ 72.60592, 21.625 ], [ 72.60545, 21.62466 ], [ 72.60478, 21.62422 ], [ 72.60346, 21.62358 ], [ 72.60238, 21.62292 ], [ 72.60125, 21.62138 ], [ 72.60081, 21.62048 ], [ 72.60076, 21.62007 ] ] ], [ [ [ 72.7247725, 21.644436 ], [ 72.7228439, 21.6445388 ], [ 72.7225527, 21.6455641 ], [ 72.7220023, 21.6455566 ], [ 72.7219942, 21.6460712 ], [ 72.7211666, 21.646188 ], [ 72.7210263, 21.6463152 ], [ 72.7208812, 21.646828 ], [ 72.7203287, 21.6469485 ], [ 72.7200496, 21.6472022 ], [ 72.7194971, 21.6473237 ], [ 72.7193469, 21.6480937 ], [ 72.7194809, 21.6483528 ], [ 72.7189284, 21.6484734 ], [ 72.718509, 21.6488542 ], [ 72.718493, 21.6498833 ], [ 72.7179303, 21.6506477 ], [ 72.7169573, 21.6512772 ], [ 72.7161197, 21.6520378 ], [ 72.7152919, 21.6521555 ], [ 72.7151945, 21.652323 ], [ 72.7147373, 21.6524052 ], [ 72.7146402, 21.6525726 ], [ 72.7143609, 21.6528261 ], [ 72.7139037, 21.6529083 ], [ 72.7138024, 21.6533332 ], [ 72.7133452, 21.6534154 ], [ 72.7132437, 21.6538401 ], [ 72.7129195, 21.6541816 ], [ 72.7127663, 21.6552088 ], [ 72.7124911, 21.655205 ], [ 72.7124869, 21.6554622 ], [ 72.7133087, 21.655731 ], [ 72.713729, 21.655222 ], [ 72.7138753, 21.6547095 ], [ 72.7133248, 21.6547017 ], [ 72.7134293, 21.6540189 ], [ 72.7136122, 21.6539338 ], [ 72.7137534, 21.6536783 ], [ 72.7141707, 21.6534267 ], [ 72.7143119, 21.6531714 ], [ 72.7147294, 21.6529196 ], [ 72.7148256, 21.6527512 ], [ 72.7152837, 21.65267 ], [ 72.7153801, 21.6525016 ], [ 72.7163907, 21.6522988 ], [ 72.7166701, 21.6520453 ], [ 72.7180522, 21.6516787 ], [ 72.7180603, 21.6511642 ], [ 72.7197137, 21.6510578 ], [ 72.7202722, 21.6505507 ], [ 72.7219275, 21.650316 ], [ 72.7227451, 21.6508419 ], [ 72.7241131, 21.6513755 ], [ 72.7249267, 21.6521585 ], [ 72.7254752, 21.6522952 ], [ 72.7258753, 21.6530727 ], [ 72.7266889, 21.6538559 ], [ 72.7274945, 21.6551538 ], [ 72.7283039, 21.6561942 ], [ 72.7288464, 21.6567163 ], [ 72.7299152, 21.6587898 ], [ 72.7300371, 21.6598208 ], [ 72.7305876, 21.6598283 ], [ 72.7308468, 21.6608612 ], [ 72.73112, 21.6609931 ], [ 72.7336012, 21.6607697 ], [ 72.7341556, 21.6605199 ], [ 72.736914, 21.6601721 ], [ 72.7369222, 21.6596575 ], [ 72.7371953, 21.6597894 ], [ 72.7399537, 21.6594414 ], [ 72.740241, 21.6586734 ], [ 72.7405143, 21.6588053 ], [ 72.7418885, 21.6589531 ], [ 72.7418965, 21.6584384 ], [ 72.7432707, 21.6585853 ], [ 72.7446507, 21.6583468 ], [ 72.7449301, 21.6580931 ], [ 72.7465795, 21.6582447 ], [ 72.7465874, 21.6577302 ], [ 72.7468647, 21.6576047 ], [ 72.7482429, 21.6574953 ], [ 72.7482548, 21.6567234 ], [ 72.7488053, 21.6567308 ], [ 72.7489505, 21.6562181 ], [ 72.749509, 21.655711 ], [ 72.7500794, 21.654432 ], [ 72.7503585, 21.6541784 ], [ 72.7503786, 21.6528918 ], [ 72.7499722, 21.6524999 ], [ 72.7491505, 21.6522315 ], [ 72.7487432, 21.6518404 ], [ 72.7480696, 21.65093 ], [ 72.7475211, 21.6507943 ], [ 72.7472658, 21.6495042 ], [ 72.7467154, 21.6494966 ], [ 72.7465893, 21.6487229 ], [ 72.7461869, 21.6480737 ], [ 72.7456385, 21.647938 ], [ 72.7452412, 21.6469032 ], [ 72.7445636, 21.6462502 ], [ 72.7434648, 21.6461069 ], [ 72.7434608, 21.6463644 ], [ 72.7440112, 21.6463717 ], [ 72.7440072, 21.6466291 ], [ 72.7426351, 21.646353 ], [ 72.7426232, 21.6471249 ], [ 72.7423499, 21.646992 ], [ 72.7338182, 21.646876 ], [ 72.7330006, 21.64635 ], [ 72.732175, 21.6463388 ], [ 72.7310822, 21.6458091 ], [ 72.7305317, 21.6458017 ], [ 72.7277918, 21.644992 ], [ 72.7272412, 21.6449847 ], [ 72.726695, 21.6447197 ], [ 72.7247725, 21.644436 ] ] ], [ [ [ 72.7205069, 21.6531273 ], [ 72.719406, 21.6531122 ], [ 72.7184321, 21.6537427 ], [ 72.718283, 21.6545127 ], [ 72.7177305, 21.6546333 ], [ 72.7167525, 21.655521 ], [ 72.716324, 21.6565445 ], [ 72.7157755, 21.6564078 ], [ 72.7149416, 21.6569111 ], [ 72.7136925, 21.6575377 ], [ 72.7136844, 21.6580523 ], [ 72.7127075, 21.6589391 ], [ 72.7121548, 21.6590606 ], [ 72.7121388, 21.6600897 ], [ 72.7118676, 21.6598287 ], [ 72.7115963, 21.6595675 ], [ 72.7113212, 21.6595637 ], [ 72.711317, 21.659821 ], [ 72.7115882, 21.6600822 ], [ 72.7118594, 21.6603432 ], [ 72.7124098, 21.6603507 ], [ 72.7128141, 21.660871 ], [ 72.7129441, 21.6613876 ], [ 72.7134947, 21.6613951 ], [ 72.7134824, 21.662167 ], [ 72.7143042, 21.6624356 ], [ 72.7145672, 21.6632112 ], [ 72.7151116, 21.6636044 ], [ 72.7162085, 21.6638769 ], [ 72.7172992, 21.6645356 ], [ 72.7173074, 21.6640211 ], [ 72.7178579, 21.6640287 ], [ 72.718117, 21.6650616 ], [ 72.7192159, 21.665205 ], [ 72.7197623, 21.6654698 ], [ 72.7225128, 21.6656367 ], [ 72.7225209, 21.665122 ], [ 72.723897, 21.6651409 ], [ 72.7239052, 21.6646265 ], [ 72.7252875, 21.6642589 ], [ 72.725846, 21.6637518 ], [ 72.7272284, 21.6633851 ], [ 72.7272363, 21.6628707 ], [ 72.728898, 21.6622496 ], [ 72.7291771, 21.661996 ], [ 72.7300049, 21.6618792 ], [ 72.7300129, 21.6613645 ], [ 72.7297377, 21.6613607 ], [ 72.7297498, 21.6605889 ], [ 72.7294746, 21.6605851 ], [ 72.7293486, 21.6598113 ], [ 72.7283998, 21.6588971 ], [ 72.7273049, 21.6584966 ], [ 72.7271749, 21.6579801 ], [ 72.7263612, 21.6571971 ], [ 72.725959, 21.6565477 ], [ 72.7251312, 21.6566654 ], [ 72.7252276, 21.656497 ], [ 72.7254105, 21.656412 ], [ 72.7254145, 21.6561546 ], [ 72.7251393, 21.6561508 ], [ 72.7248602, 21.6564044 ], [ 72.7248681, 21.6558898 ], [ 72.7232229, 21.6554808 ], [ 72.7228156, 21.6550895 ], [ 72.7226865, 21.6545732 ], [ 72.7221361, 21.6545656 ], [ 72.7221442, 21.654051 ], [ 72.7207721, 21.6537749 ], [ 72.7206421, 21.6532583 ], [ 72.7205069, 21.6531273 ] ] ], [ [ [ 88.9545967, 21.675783 ], [ 88.9556267, 21.6765806 ], [ 88.9568283, 21.6765806 ], [ 88.9576866, 21.675783 ], [ 88.9587166, 21.6732306 ], [ 88.9604332, 21.6679662 ], [ 88.9621498, 21.6633397 ], [ 88.9624931, 21.6603085 ], [ 88.9626648, 21.6571176 ], [ 88.9623215, 21.6539267 ], [ 88.9623215, 21.6494593 ], [ 88.9630081, 21.6462682 ], [ 88.9638664, 21.6438749 ], [ 88.9654114, 21.6419602 ], [ 88.9678146, 21.6408433 ], [ 88.9698746, 21.6406837 ], [ 88.9715912, 21.6406837 ], [ 88.9739944, 21.6414815 ], [ 88.9775993, 21.642758 ], [ 88.9815475, 21.6440345 ], [ 88.9851524, 21.6445131 ], [ 88.9875557, 21.6445131 ], [ 88.9897873, 21.6443536 ], [ 88.9911606, 21.6433962 ], [ 88.9925339, 21.6408433 ], [ 88.9932205, 21.6381307 ], [ 88.9954521, 21.6250458 ], [ 88.9935638, 21.6216946 ], [ 88.9927055, 21.6183433 ], [ 88.9928772, 21.6170666 ], [ 88.9933922, 21.6154707 ], [ 88.9920189, 21.6140344 ], [ 88.9901306, 21.6129173 ], [ 88.9877273, 21.6129173 ], [ 88.9822342, 21.6135556 ], [ 88.9736511, 21.6138748 ], [ 88.9662697, 21.6146728 ], [ 88.9618065, 21.614992 ], [ 88.9602615, 21.6189817 ], [ 88.9585449, 21.6226521 ], [ 88.95494, 21.6269607 ], [ 88.9523651, 21.6303118 ], [ 88.9506485, 21.632865 ], [ 88.9491035, 21.6350989 ], [ 88.9475586, 21.6370137 ], [ 88.9472153, 21.6381307 ], [ 88.945842, 21.6382902 ], [ 88.9412071, 21.6445131 ], [ 88.9403488, 21.6457896 ], [ 88.9418938, 21.6478638 ], [ 88.944812, 21.6537672 ], [ 88.9460136, 21.6567985 ], [ 88.9468719, 21.6598298 ], [ 88.9467003, 21.6614252 ], [ 88.9511635, 21.6686043 ], [ 88.9532234, 21.672433 ], [ 88.9545967, 21.675783 ] ] ], [ [ [ 89.0697046, 21.6743084 ], [ 89.0705629, 21.6736703 ], [ 89.0709062, 21.6730322 ], [ 89.0712496, 21.6714369 ], [ 89.0712496, 21.6703202 ], [ 89.0724512, 21.6693631 ], [ 89.0736528, 21.6687249 ], [ 89.077601, 21.6698417 ], [ 89.078631, 21.6704798 ], [ 89.0793177, 21.6712774 ], [ 89.0800043, 21.6725536 ], [ 89.0805193, 21.6746275 ], [ 89.0818926, 21.6763822 ], [ 89.0834375, 21.6768608 ], [ 89.0848108, 21.6774989 ], [ 89.0848108, 21.678456 ], [ 89.0858408, 21.6782965 ], [ 89.0868708, 21.6771798 ], [ 89.0868708, 21.6757441 ], [ 89.0868708, 21.6741489 ], [ 89.0868708, 21.671756 ], [ 89.0880724, 21.669044 ], [ 89.089789, 21.6674487 ], [ 89.0918489, 21.6661724 ], [ 89.0920206, 21.6650557 ], [ 89.0927072, 21.6625031 ], [ 89.0940805, 21.6558024 ], [ 89.0949388, 21.6487822 ], [ 89.0945955, 21.6433573 ], [ 89.0940805, 21.6400065 ], [ 89.0923639, 21.6371344 ], [ 89.0896173, 21.6337835 ], [ 89.0868708, 21.6313899 ], [ 89.0844675, 21.6297942 ], [ 89.0848108, 21.6313899 ], [ 89.0854975, 21.6329856 ], [ 89.0858408, 21.6344217 ], [ 89.0851541, 21.6364961 ], [ 89.078631, 21.6408043 ], [ 89.0770861, 21.6422404 ], [ 89.0760561, 21.6422404 ], [ 89.0774294, 21.6408043 ], [ 89.0841242, 21.6364961 ], [ 89.0849825, 21.6349004 ], [ 89.0846392, 21.6334643 ], [ 89.0832659, 21.6326665 ], [ 89.0817209, 21.6318686 ], [ 89.0813776, 21.629475 ], [ 89.0805193, 21.6280389 ], [ 89.0789743, 21.6264431 ], [ 89.0751978, 21.6250069 ], [ 89.0738245, 21.6250069 ], [ 89.0733095, 21.6237302 ], [ 89.0705629, 21.6226132 ], [ 89.069533, 21.6230919 ], [ 89.069018, 21.6240494 ], [ 89.0688463, 21.6230919 ], [ 89.068503, 21.6218153 ], [ 89.0662714, 21.6208578 ], [ 89.0642115, 21.6205386 ], [ 89.0643831, 21.6197407 ], [ 89.0616365, 21.6189427 ], [ 89.0587183, 21.6186236 ], [ 89.0580316, 21.6181448 ], [ 89.0554567, 21.6179852 ], [ 89.0542551, 21.6192619 ], [ 89.0521952, 21.6186236 ], [ 89.0504785, 21.6208578 ], [ 89.0482469, 21.6232515 ], [ 89.0393206, 21.6302729 ], [ 89.0374323, 21.6315495 ], [ 89.0358873, 21.6325069 ], [ 89.0352007, 21.633943 ], [ 89.0357157, 21.6363366 ], [ 89.0369173, 21.6384109 ], [ 89.0382906, 21.639847 ], [ 89.0499636, 21.6427191 ], [ 89.0540834, 21.6433573 ], [ 89.0582033, 21.6433573 ], [ 89.0633531, 21.6420808 ], [ 89.0654131, 21.6433573 ], [ 89.0662714, 21.6454316 ], [ 89.0642115, 21.6500586 ], [ 89.0643831, 21.6514946 ], [ 89.0693613, 21.6542069 ], [ 89.0700479, 21.6551642 ], [ 89.0703913, 21.6566001 ], [ 89.0700479, 21.6581955 ], [ 89.0691896, 21.6597909 ], [ 89.0683313, 21.6605886 ], [ 89.0616365, 21.6585146 ], [ 89.0600916, 21.6583551 ], [ 89.0594049, 21.6591528 ], [ 89.0604349, 21.6617054 ], [ 89.0640398, 21.6633008 ], [ 89.0640398, 21.6645771 ], [ 89.0635248, 21.6656938 ], [ 89.0623232, 21.6664915 ], [ 89.0616365, 21.6669701 ], [ 89.0612932, 21.6687249 ], [ 89.0623232, 21.6698417 ], [ 89.0636965, 21.6707988 ], [ 89.0673014, 21.6706393 ], [ 89.068503, 21.672075 ], [ 89.0683313, 21.6735108 ], [ 89.0697046, 21.6743084 ] ] ], [ [ [ 88.86755, 21.5506 ], [ 88.8656, 21.55072 ], [ 88.86385, 21.55071 ], [ 88.85173, 21.55168 ], [ 88.84349, 21.55481 ], [ 88.8361, 21.5615 ], [ 88.83255, 21.56882 ], [ 88.8304874, 21.5758064 ], [ 88.8304874, 21.580755 ], [ 88.830144, 21.5890554 ], [ 88.83147, 21.59459 ], [ 88.8329, 21.60621 ], [ 88.83585, 21.60669 ], [ 88.83906, 21.60438 ], [ 88.84328, 21.60044 ], [ 88.84957, 21.5989 ], [ 88.85709, 21.59831 ], [ 88.87462, 21.59222 ], [ 88.88427, 21.58353 ], [ 88.89394, 21.57809 ], [ 88.8987, 21.56965 ], [ 88.90392, 21.56054 ], [ 88.90387, 21.55637 ], [ 88.90065, 21.55317 ], [ 88.89304, 21.55022 ], [ 88.8768, 21.55007 ], [ 88.86755, 21.5506 ] ] ], [ [ [ 88.7223407, 21.6370927 ], [ 88.7244006, 21.6367735 ], [ 88.7257739, 21.6369331 ], [ 88.7274905, 21.6378905 ], [ 88.7283488, 21.6380501 ], [ 88.7288638, 21.6372522 ], [ 88.7293788, 21.6335822 ], [ 88.7305804, 21.6297525 ], [ 88.7326404, 21.6268801 ], [ 88.734357, 21.6236885 ], [ 88.7340137, 21.6211352 ], [ 88.7336703, 21.6165072 ], [ 88.7347003, 21.6121983 ], [ 88.7364169, 21.6094852 ], [ 88.7384769, 21.6085276 ], [ 88.7413951, 21.6066124 ], [ 88.7484332, 21.604378 ], [ 88.7523814, 21.602782 ], [ 88.7547847, 21.6013455 ], [ 88.756673, 21.5992706 ], [ 88.7570163, 21.5979938 ], [ 88.7559863, 21.5967169 ], [ 88.7537547, 21.5955996 ], [ 88.7511798, 21.5936843 ], [ 88.7496349, 21.5920881 ], [ 88.7480899, 21.5903323 ], [ 88.7475749, 21.5882573 ], [ 88.7470599, 21.5844264 ], [ 88.7470599, 21.5815531 ], [ 88.7470599, 21.5789991 ], [ 88.7456866, 21.5774028 ], [ 88.7432834, 21.5761257 ], [ 88.7407085, 21.5759661 ], [ 88.7407085, 21.5772431 ], [ 88.7403651, 21.5791587 ], [ 88.7400218, 21.5805954 ], [ 88.7388202, 21.5818724 ], [ 88.7371036, 21.582032 ], [ 88.7386485, 21.5809146 ], [ 88.7391635, 21.5793183 ], [ 88.7395068, 21.5769239 ], [ 88.7395068, 21.5751679 ], [ 88.7374469, 21.5735716 ], [ 88.734872, 21.5727734 ], [ 88.7326404, 21.5735716 ], [ 88.7297221, 21.5738908 ], [ 88.7271472, 21.5738908 ], [ 88.7228557, 21.5750083 ], [ 88.7183925, 21.5767642 ], [ 88.7163, 21.57979 ], [ 88.71372, 21.58258 ], [ 88.71175, 21.58672 ], [ 88.70963, 21.59044 ], [ 88.70944, 21.59457 ], [ 88.70998, 21.60051 ], [ 88.70953, 21.60273 ], [ 88.7108, 21.60878 ], [ 88.71347, 21.61591 ], [ 88.71494, 21.6197 ], [ 88.71528, 21.62395 ], [ 88.71712, 21.6304 ], [ 88.7197658, 21.6340609 ], [ 88.7206241, 21.6372522 ], [ 88.7223407, 21.6370927 ] ] ], [ [ [ 88.7487766, 21.605974 ], [ 88.745, 21.6070912 ], [ 88.7413951, 21.608368 ], [ 88.7386485, 21.6096448 ], [ 88.7360736, 21.6121983 ], [ 88.7355586, 21.6150709 ], [ 88.7355586, 21.6185819 ], [ 88.7359019, 21.6224119 ], [ 88.7355586, 21.6248056 ], [ 88.7345287, 21.6270397 ], [ 88.7331554, 21.6291142 ], [ 88.7309238, 21.6334226 ], [ 88.7302371, 21.6364544 ], [ 88.7298938, 21.6394861 ], [ 88.732812, 21.6423583 ], [ 88.7357303, 21.644273 ], [ 88.7371036, 21.6445921 ], [ 88.7427684, 21.6444325 ], [ 88.7482616, 21.6453899 ], [ 88.7508365, 21.6466663 ], [ 88.7530681, 21.6479427 ], [ 88.7558433, 21.6492706 ], [ 88.7625381, 21.6521426 ], [ 88.7680312, 21.6543762 ], [ 88.76994, 21.65469 ], [ 88.77176, 21.65167 ], [ 88.77507, 21.64671 ], [ 88.77543, 21.64374 ], [ 88.77386, 21.6421 ], [ 88.77275, 21.64044 ], [ 88.77186, 21.6377 ], [ 88.77023, 21.63471 ], [ 88.77023, 21.6307 ], [ 88.77185, 21.6251 ], [ 88.77369, 21.62006 ], [ 88.77656, 21.61652 ], [ 88.77824, 21.61415 ], [ 88.78124, 21.61205 ], [ 88.78684, 21.60627 ], [ 88.79057, 21.60221 ], [ 88.7903186, 21.6003879 ], [ 88.7882587, 21.5992706 ], [ 88.7860271, 21.5979938 ], [ 88.7827655, 21.5965573 ], [ 88.7808772, 21.5975149 ], [ 88.778989, 21.5999091 ], [ 88.7783023, 21.6023032 ], [ 88.7786456, 21.6046972 ], [ 88.7788173, 21.6066124 ], [ 88.777444, 21.6074104 ], [ 88.7746974, 21.60757 ], [ 88.7724658, 21.6064528 ], [ 88.7704059, 21.605974 ], [ 88.7716075, 21.6053356 ], [ 88.7740108, 21.6058144 ], [ 88.7755557, 21.6064528 ], [ 88.7776157, 21.6062932 ], [ 88.7777873, 21.6045376 ], [ 88.7776157, 21.6023032 ], [ 88.7781306, 21.6003879 ], [ 88.7792464, 21.5986322 ], [ 88.7807056, 21.5967967 ], [ 88.7824222, 21.5959987 ], [ 88.7849113, 21.5963977 ], [ 88.7868854, 21.5973553 ], [ 88.788602, 21.5981534 ], [ 88.7913486, 21.599111 ], [ 88.7935802, 21.598313 ], [ 88.7954684, 21.5968765 ], [ 88.79667, 21.59442 ], [ 88.79664, 21.5908 ], [ 88.79432, 21.5867 ], [ 88.78997, 21.58278 ], [ 88.78575, 21.58132 ], [ 88.77696, 21.58001 ], [ 88.76886, 21.57874 ], [ 88.76743, 21.57841 ], [ 88.7633678, 21.5769239 ], [ 88.7594196, 21.5766046 ], [ 88.7563297, 21.5767642 ], [ 88.7527248, 21.5772431 ], [ 88.7504932, 21.579478 ], [ 88.7492915, 21.5831494 ], [ 88.7491199, 21.5872996 ], [ 88.7498065, 21.5901727 ], [ 88.7515231, 21.5922477 ], [ 88.7542697, 21.5941631 ], [ 88.7568446, 21.5952804 ], [ 88.7582179, 21.5960785 ], [ 88.7585612, 21.5975149 ], [ 88.7585612, 21.5994303 ], [ 88.7568446, 21.6015051 ], [ 88.7542697, 21.6040588 ], [ 88.7513515, 21.6048568 ], [ 88.7487766, 21.605974 ] ] ], [ [ [ 88.9515068, 21.700826 ], [ 88.9530517, 21.7009854 ], [ 88.955455, 21.7006665 ], [ 88.9585449, 21.7003475 ], [ 88.9612915, 21.699869 ], [ 88.9631798, 21.7003475 ], [ 88.9664413, 21.7006665 ], [ 88.9678146, 21.7000285 ], [ 88.9700462, 21.698593 ], [ 88.9717628, 21.697317 ], [ 88.9748527, 21.697636 ], [ 88.9763977, 21.6990715 ], [ 88.9774277, 21.699869 ], [ 88.978286, 21.7017829 ], [ 88.9800026, 21.7027399 ], [ 88.9818909, 21.7038563 ], [ 88.9836075, 21.7041753 ], [ 88.9856674, 21.7048133 ], [ 88.9866974, 21.7038563 ], [ 88.9896156, 21.700826 ], [ 88.9899589, 21.6993905 ], [ 88.9899589, 21.6974765 ], [ 88.9901306, 21.6949245 ], [ 88.9899589, 21.6920534 ], [ 88.9906456, 21.6907774 ], [ 88.9913322, 21.6891823 ], [ 88.9925339, 21.6864707 ], [ 88.9921905, 21.684397 ], [ 88.9913322, 21.6808877 ], [ 88.9920189, 21.6783354 ], [ 88.9935638, 21.6761021 ], [ 88.9942505, 21.6740283 ], [ 88.9937355, 21.6714758 ], [ 88.9930488, 21.6698805 ], [ 88.9897873, 21.6689234 ], [ 88.9885857, 21.6665304 ], [ 88.9877273, 21.6639778 ], [ 88.9872124, 21.6582344 ], [ 88.9872124, 21.6550435 ], [ 88.9882423, 21.6523312 ], [ 88.9897873, 21.6505762 ], [ 88.9915039, 21.6494593 ], [ 88.9939072, 21.6488211 ], [ 88.9973404, 21.6488211 ], [ 89.0018036, 21.6492998 ], [ 89.0072967, 21.6496189 ], [ 89.0109016, 21.6500975 ], [ 89.0131332, 21.6510548 ], [ 89.0143349, 21.651693 ], [ 89.0172531, 21.6536076 ], [ 89.0179397, 21.6547244 ], [ 89.019313, 21.6550435 ], [ 89.0217163, 21.6544054 ], [ 89.0232612, 21.6534481 ], [ 89.0230896, 21.6512144 ], [ 89.0225746, 21.6488211 ], [ 89.0215446, 21.6446727 ], [ 89.021373, 21.6398859 ], [ 89.021888, 21.6363755 ], [ 89.0229179, 21.6343011 ], [ 89.0256645, 21.6288756 ], [ 89.0275528, 21.6269607 ], [ 89.029956, 21.6266416 ], [ 89.0342476, 21.6248862 ], [ 89.0354492, 21.6232904 ], [ 89.0356209, 21.6212158 ], [ 89.0368225, 21.6157899 ], [ 89.0363075, 21.6137152 ], [ 89.0342476, 21.6113213 ], [ 89.0316727, 21.6089274 ], [ 89.0287544, 21.6062142 ], [ 89.0249779, 21.6047778 ], [ 89.0227463, 21.603501 ], [ 89.0165665, 21.6031818 ], [ 89.0162231, 21.6044586 ], [ 89.0145065, 21.6044586 ], [ 89.0133049, 21.6028626 ], [ 89.0098717, 21.6025434 ], [ 89.0076401, 21.6031818 ], [ 89.0042068, 21.6025434 ], [ 88.9999153, 21.6025434 ], [ 88.9994003, 21.6047778 ], [ 88.9992287, 21.6081294 ], [ 88.9994003, 21.6097254 ], [ 88.9987137, 21.6125981 ], [ 88.9988853, 21.6154707 ], [ 88.999057, 21.6194604 ], [ 88.9988853, 21.6210563 ], [ 88.9961388, 21.6343011 ], [ 88.9944221, 21.6403646 ], [ 88.9937355, 21.642758 ], [ 88.9930488, 21.6440345 ], [ 88.9916756, 21.6451514 ], [ 88.9899589, 21.64563 ], [ 88.9863541, 21.6459491 ], [ 88.9822342, 21.64563 ], [ 88.9789726, 21.6449918 ], [ 88.9763977, 21.644194 ], [ 88.9736511, 21.642758 ], [ 88.9719345, 21.6416411 ], [ 88.9700462, 21.6416411 ], [ 88.9681579, 21.6416411 ], [ 88.966098, 21.642758 ], [ 88.9647247, 21.6449918 ], [ 88.9636948, 21.6481829 ], [ 88.9638664, 21.6563199 ], [ 88.9640381, 21.6585535 ], [ 88.9633514, 21.662542 ], [ 88.9623215, 21.6665304 ], [ 88.9597465, 21.6732306 ], [ 88.9582016, 21.6762616 ], [ 88.956485, 21.6780163 ], [ 88.95494, 21.6786544 ], [ 88.9551117, 21.6808877 ], [ 88.955455, 21.6848755 ], [ 88.95494, 21.6885443 ], [ 88.9542534, 21.6917344 ], [ 88.9528801, 21.695722 ], [ 88.9521934, 21.6981145 ], [ 88.9515068, 21.700826 ] ] ], [ [ [ 88.59385, 21.652849227583864 ], [ 88.5944094, 21.6525026 ], [ 88.596641, 21.6510667 ], [ 88.5973277, 21.6497903 ], [ 88.598186, 21.647397 ], [ 88.59832, 21.64196 ], [ 88.59902, 21.63872 ], [ 88.59884, 21.63637 ], [ 88.59913, 21.63413 ], [ 88.60086, 21.63131 ], [ 88.60208, 21.62821 ], [ 88.6024775, 21.6276109 ], [ 88.6035075, 21.6258555 ], [ 88.6043658, 21.6245789 ], [ 88.6052241, 21.6236214 ], [ 88.6045374, 21.6229831 ], [ 88.6036791, 21.6213873 ], [ 88.6007609, 21.6207489 ], [ 88.5974993, 21.6202702 ], [ 88.59406, 21.61934 ], [ 88.593666016354106, 21.619284438203785 ], [ 88.5925, 21.61912 ], [ 88.59138, 21.61924 ], [ 88.5886, 21.62086 ], [ 88.58742, 21.62095 ], [ 88.58403, 21.62373 ], [ 88.57927, 21.62736 ], [ 88.57488, 21.6301 ], [ 88.57028, 21.63269 ], [ 88.5677, 21.63357 ], [ 88.56571, 21.63416 ], [ 88.56296, 21.63469 ], [ 88.55934, 21.63511 ], [ 88.55643, 21.63577 ], [ 88.55528, 21.63677 ], [ 88.55415, 21.63958 ], [ 88.55359, 21.64183 ], [ 88.55352, 21.64386 ], [ 88.55391, 21.64553 ], [ 88.55524, 21.64781 ], [ 88.558, 21.65104 ], [ 88.56441, 21.6569 ], [ 88.56852, 21.66143 ], [ 88.56995, 21.66374 ], [ 88.57112, 21.66611 ], [ 88.57185, 21.6694 ], [ 88.57174, 21.67329 ], [ 88.57134, 21.67662 ], [ 88.57065, 21.6796 ], [ 88.56947, 21.68356 ], [ 88.5673, 21.69007 ], [ 88.5696902, 21.6906297 ], [ 88.5719218, 21.6911082 ], [ 88.5746684, 21.6912677 ], [ 88.5770716, 21.6919058 ], [ 88.5774149, 21.6903107 ], [ 88.5781016, 21.6882371 ], [ 88.5782732, 21.6848874 ], [ 88.5794749, 21.68074 ], [ 88.5808482, 21.6777091 ], [ 88.5813632, 21.6762734 ], [ 88.5835948, 21.6727639 ], [ 88.5847964, 21.6697328 ], [ 88.5851397, 21.6670208 ], [ 88.5853114, 21.6644683 ], [ 88.5858263, 21.6582463 ], [ 88.586513, 21.6568104 ], [ 88.5877146, 21.6558531 ], [ 88.5897746, 21.6547363 ], [ 88.5923495, 21.653779 ], [ 88.59385, 21.652849227583861 ], [ 88.59385, 21.652849227583864 ] ] ], [ [ [ 88.31762, 21.60381 ], [ 88.31467, 21.60701 ], [ 88.30921, 21.60937 ], [ 88.30764, 21.61384 ], [ 88.30588, 21.62467 ], [ 88.30731, 21.63484 ], [ 88.31404, 21.65391 ], [ 88.31661, 21.6645 ], [ 88.31666, 21.67145 ], [ 88.31466, 21.68101 ], [ 88.31106, 21.68973 ], [ 88.30069, 21.70196 ], [ 88.30028, 21.70456 ], [ 88.30223, 21.7071 ], [ 88.30395, 21.70729 ], [ 88.31271, 21.70542 ], [ 88.31854, 21.70515 ], [ 88.32439, 21.70559 ], [ 88.32773, 21.70501 ], [ 88.33131, 21.70298 ], [ 88.33224, 21.7024 ], [ 88.3329, 21.70194 ], [ 88.33899, 21.696 ], [ 88.34397, 21.68988 ], [ 88.3459, 21.68609 ], [ 88.34801, 21.6828 ], [ 88.35048, 21.67578 ], [ 88.35066, 21.66878 ], [ 88.34808, 21.65754 ], [ 88.35101, 21.65222 ], [ 88.35351, 21.64945 ], [ 88.35236, 21.6484 ], [ 88.34984, 21.64799 ], [ 88.34474, 21.63444 ], [ 88.3408, 21.62554 ], [ 88.33667, 21.6209 ], [ 88.32864, 21.61479 ], [ 88.32268, 21.60994 ], [ 88.32013, 21.6038 ], [ 88.31762, 21.60381 ] ] ], [ [ [ 89.0269609, 21.6572383 ], [ 89.0279909, 21.658036 ], [ 89.0291925, 21.6573978 ], [ 89.0314241, 21.6556428 ], [ 89.033999, 21.6526114 ], [ 89.0367456, 21.6532496 ], [ 89.0430971, 21.6581955 ], [ 89.0441271, 21.6593123 ], [ 89.0442987, 21.6602696 ], [ 89.0439554, 21.6626626 ], [ 89.0439554, 21.6653748 ], [ 89.0449854, 21.6672892 ], [ 89.046702, 21.6682463 ], [ 89.0479036, 21.6696821 ], [ 89.0484186, 21.6709584 ], [ 89.0379473, 21.669044 ], [ 89.036574, 21.6679273 ], [ 89.035029, 21.6684059 ], [ 89.034514, 21.6703202 ], [ 89.034514, 21.671756 ], [ 89.0352007, 21.6725536 ], [ 89.0389772, 21.6725536 ], [ 89.0400072, 21.6731917 ], [ 89.0400072, 21.6744679 ], [ 89.0393206, 21.6813273 ], [ 89.0393206, 21.683082 ], [ 89.0413805, 21.6838796 ], [ 89.0432688, 21.6829225 ], [ 89.0448137, 21.6810083 ], [ 89.045672, 21.6798917 ], [ 89.047217, 21.6805297 ], [ 89.0475603, 21.6814868 ], [ 89.0492769, 21.6835605 ], [ 89.0511652, 21.6859532 ], [ 89.0544268, 21.6872293 ], [ 89.0592333, 21.6881864 ], [ 89.0662714, 21.6883459 ], [ 89.0693613, 21.6886649 ], [ 89.0715929, 21.689622 ], [ 89.0734812, 21.69026 ], [ 89.0745111, 21.6893029 ], [ 89.0762277, 21.6877079 ], [ 89.0782877, 21.6856342 ], [ 89.0793177, 21.683082 ], [ 89.0798326, 21.6797321 ], [ 89.078631, 21.6782965 ], [ 89.0794893, 21.6771798 ], [ 89.0810343, 21.6763822 ], [ 89.0794893, 21.6738298 ], [ 89.0777727, 21.6711179 ], [ 89.0760561, 21.6701607 ], [ 89.0729662, 21.6700012 ], [ 89.0724512, 21.6711179 ], [ 89.0721079, 21.6727132 ], [ 89.0715929, 21.6749465 ], [ 89.0702196, 21.6749465 ], [ 89.0686746, 21.6749465 ], [ 89.067473, 21.6730322 ], [ 89.0671297, 21.6714369 ], [ 89.0652414, 21.6715965 ], [ 89.0624948, 21.6709584 ], [ 89.0607782, 21.669044 ], [ 89.0606066, 21.6671296 ], [ 89.0616365, 21.6660129 ], [ 89.0630098, 21.6653748 ], [ 89.0633531, 21.6637794 ], [ 89.0599199, 21.662184 ], [ 89.0588899, 21.6604291 ], [ 89.058375, 21.6589932 ], [ 89.0594049, 21.658036 ], [ 89.0609499, 21.6577169 ], [ 89.0676447, 21.6596314 ], [ 89.068503, 21.6593123 ], [ 89.0693613, 21.6581955 ], [ 89.069533, 21.6559619 ], [ 89.0686746, 21.6546855 ], [ 89.0638681, 21.6519732 ], [ 89.0636965, 21.6500586 ], [ 89.0650698, 21.6455911 ], [ 89.0645548, 21.643836 ], [ 89.0621515, 21.6428786 ], [ 89.0582033, 21.6443147 ], [ 89.0525385, 21.6441551 ], [ 89.0384622, 21.6406448 ], [ 89.0353723, 21.6385705 ], [ 89.0336557, 21.633943 ], [ 89.0319391, 21.6341026 ], [ 89.0300508, 21.6344217 ], [ 89.0290209, 21.6353792 ], [ 89.0281626, 21.6414426 ], [ 89.0271326, 21.6427191 ], [ 89.0266176, 21.6446338 ], [ 89.0281626, 21.6484631 ], [ 89.0290209, 21.651335 ], [ 89.0288492, 21.6529305 ], [ 89.0276476, 21.6548451 ], [ 89.0269609, 21.6572383 ] ] ], [ [ [ 88.21036, 21.60536 ], [ 88.21017, 21.60567 ], [ 88.20994, 21.60593 ], [ 88.20907, 21.60629 ], [ 88.20743, 21.6067 ], [ 88.20607, 21.60761 ], [ 88.20513, 21.60849 ], [ 88.2045, 21.60943 ], [ 88.20392, 21.61056 ], [ 88.20349, 21.6117 ], [ 88.20292, 21.6139 ], [ 88.20184, 21.61744 ], [ 88.2007, 21.62093 ], [ 88.19974, 21.62405 ], [ 88.19871, 21.62688 ], [ 88.19788, 21.62941 ], [ 88.19727, 21.63153 ], [ 88.19653, 21.63385 ], [ 88.19606, 21.63594 ], [ 88.19593, 21.6369 ], [ 88.19543, 21.63893 ], [ 88.19524, 21.64001 ], [ 88.19501, 21.64224 ], [ 88.19481, 21.64316 ], [ 88.19415, 21.64482 ], [ 88.19314, 21.64694 ], [ 88.19256, 21.64935 ], [ 88.19221, 21.65039 ], [ 88.19027, 21.65494 ], [ 88.18986, 21.65608 ], [ 88.18958, 21.65665 ], [ 88.18944, 21.657 ], [ 88.18922, 21.65796 ], [ 88.1886, 21.65991 ], [ 88.18819, 21.66178 ], [ 88.18804, 21.66326 ], [ 88.18787, 21.66415 ], [ 88.18749, 21.6653 ], [ 88.1859, 21.6694 ], [ 88.1858, 21.67024 ], [ 88.18528, 21.67123 ], [ 88.1841, 21.67329 ], [ 88.18393, 21.67418 ], [ 88.18365, 21.67545 ], [ 88.18309, 21.67671 ], [ 88.18287, 21.67929 ], [ 88.18298, 21.68179 ], [ 88.18293, 21.68271 ], [ 88.18205, 21.68624 ], [ 88.18206, 21.68674 ], [ 88.18233, 21.68721 ], [ 88.1828, 21.68755 ], [ 88.18562, 21.68977 ], [ 88.18677, 21.6908 ], [ 88.18812, 21.69227 ], [ 88.18899, 21.69336 ], [ 88.18944, 21.69408 ], [ 88.18991, 21.69531 ], [ 88.19034, 21.69657 ], [ 88.19082, 21.69757 ], [ 88.19122, 21.6981 ], [ 88.19175, 21.69897 ], [ 88.19254, 21.69993 ], [ 88.19373, 21.70107 ], [ 88.19441, 21.70159 ], [ 88.19552, 21.70237 ], [ 88.19592, 21.70274 ], [ 88.1968, 21.70345 ], [ 88.19705, 21.70357 ], [ 88.1974, 21.70365 ], [ 88.19779, 21.70382 ], [ 88.19818, 21.70413 ], [ 88.19877, 21.70446 ], [ 88.19908, 21.70456 ], [ 88.19939, 21.70476 ], [ 88.19971, 21.70485 ], [ 88.20023, 21.70512 ], [ 88.20053, 21.70522 ], [ 88.20097, 21.7053 ], [ 88.20158, 21.70564 ], [ 88.20209, 21.70578 ], [ 88.20269, 21.706 ], [ 88.20391, 21.70661 ], [ 88.20561, 21.70774 ], [ 88.20672, 21.70867 ], [ 88.20763, 21.70972 ], [ 88.20789, 21.71028 ], [ 88.20828, 21.71137 ], [ 88.20865, 21.7127 ], [ 88.20885, 21.71321 ], [ 88.2089, 21.71324 ], [ 88.20898, 21.71325 ], [ 88.2092, 21.71321 ], [ 88.20947, 21.71302 ], [ 88.2099, 21.71248 ], [ 88.21052, 21.71197 ], [ 88.21152, 21.7113 ], [ 88.21217, 21.7106 ], [ 88.21318, 21.70944 ], [ 88.21424, 21.70817 ], [ 88.21523, 21.70662 ], [ 88.21564, 21.70555 ], [ 88.21615, 21.70344 ], [ 88.21639, 21.70196 ], [ 88.21648, 21.70104 ], [ 88.21631, 21.70036 ], [ 88.21593, 21.7 ], [ 88.21484, 21.69962 ], [ 88.21276, 21.69908 ], [ 88.21131, 21.69874 ], [ 88.21044, 21.69867 ], [ 88.20978, 21.69853 ], [ 88.20726, 21.69837 ], [ 88.20619, 21.69814 ], [ 88.20224, 21.69717 ], [ 88.20017, 21.69625 ], [ 88.19903, 21.6954 ], [ 88.19708, 21.69366 ], [ 88.19603, 21.6925 ], [ 88.19494, 21.69089 ], [ 88.19419, 21.68871 ], [ 88.19403, 21.68749 ], [ 88.1941, 21.68616 ], [ 88.19492, 21.68345 ], [ 88.19617, 21.68052 ], [ 88.19676, 21.6789 ], [ 88.19745, 21.67721 ], [ 88.19784, 21.67664 ], [ 88.19915, 21.6753 ], [ 88.20212, 21.67337 ], [ 88.20407, 21.6722 ], [ 88.20585, 21.67185 ], [ 88.2076, 21.67156 ], [ 88.21052, 21.67039 ], [ 88.2126, 21.67003 ], [ 88.21584, 21.66981 ], [ 88.21896, 21.67007 ], [ 88.22336, 21.67033 ], [ 88.22606, 21.67042 ], [ 88.22685, 21.67008 ], [ 88.22743, 21.66917 ], [ 88.22727, 21.66578 ], [ 88.22685, 21.66242 ], [ 88.22718, 21.65949 ], [ 88.22797, 21.65433 ], [ 88.22854, 21.65208 ], [ 88.22941, 21.64929 ], [ 88.231, 21.64693 ], [ 88.23177, 21.64302 ], [ 88.2314, 21.64079 ], [ 88.22994, 21.63896 ], [ 88.22754, 21.63712 ], [ 88.2245, 21.63493 ], [ 88.2216, 21.63254 ], [ 88.2151, 21.62733 ], [ 88.21367, 21.62591 ], [ 88.21353, 21.62561 ], [ 88.21332, 21.62549 ], [ 88.21298, 21.62537 ], [ 88.21185, 21.62354 ], [ 88.21092, 21.62159 ], [ 88.21029, 21.6201 ], [ 88.21004, 21.61997 ], [ 88.20972, 21.6197 ], [ 88.20939, 21.61901 ], [ 88.2085, 21.6176 ], [ 88.20851, 21.61684 ], [ 88.20838, 21.61652 ], [ 88.20843, 21.61585 ], [ 88.20846, 21.61447 ], [ 88.20754, 21.6144 ], [ 88.2073, 21.61436 ], [ 88.20722, 21.61417 ], [ 88.20724, 21.6139 ], [ 88.20834, 21.61135 ], [ 88.20893, 21.60974 ], [ 88.2091, 21.60919 ], [ 88.20936, 21.60918 ], [ 88.20954, 21.60913 ], [ 88.20955, 21.60867 ], [ 88.2097, 21.60822 ], [ 88.21047, 21.60718 ], [ 88.21065, 21.6067 ], [ 88.211, 21.60645 ], [ 88.21101, 21.6061 ], [ 88.21131, 21.60574 ], [ 88.21143, 21.60548 ], [ 88.21079, 21.60544 ], [ 88.21036, 21.60536 ] ] ], [ [ [ 88.18371, 21.69036 ], [ 88.18373, 21.69055 ], [ 88.18445, 21.69393 ], [ 88.18584, 21.6985 ], [ 88.18603, 21.69977 ], [ 88.18641, 21.69996 ], [ 88.18678, 21.70028 ], [ 88.18724, 21.70117 ], [ 88.18847, 21.70391 ], [ 88.18914, 21.70612 ], [ 88.18938, 21.70656 ], [ 88.1898, 21.707 ], [ 88.19059, 21.70771 ], [ 88.19238, 21.70903 ], [ 88.19471, 21.7108 ], [ 88.19675, 21.71293 ], [ 88.19936, 21.71596 ], [ 88.20286, 21.71982 ], [ 88.20391, 21.72087 ], [ 88.20423, 21.72038 ], [ 88.20509, 21.71922 ], [ 88.20589, 21.71836 ], [ 88.20666, 21.71701 ], [ 88.20741, 21.71545 ], [ 88.20854, 21.71382 ], [ 88.2086, 21.71338 ], [ 88.2083, 21.71193 ], [ 88.20802, 21.71092 ], [ 88.20763, 21.70995 ], [ 88.20637, 21.70848 ], [ 88.2054, 21.70773 ], [ 88.20463, 21.70723 ], [ 88.20414, 21.70687 ], [ 88.20253, 21.70602 ], [ 88.20148, 21.70567 ], [ 88.20096, 21.7054 ], [ 88.20011, 21.70515 ], [ 88.19972, 21.70494 ], [ 88.19903, 21.70468 ], [ 88.19826, 21.70434 ], [ 88.19779, 21.70399 ], [ 88.19752, 21.70382 ], [ 88.19693, 21.70368 ], [ 88.19627, 21.70323 ], [ 88.19509, 21.70225 ], [ 88.19411, 21.70164 ], [ 88.19261, 21.70031 ], [ 88.19154, 21.69924 ], [ 88.19044, 21.69764 ], [ 88.19002, 21.69683 ], [ 88.18972, 21.69594 ], [ 88.18929, 21.69477 ], [ 88.18888, 21.69398 ], [ 88.18744, 21.69211 ], [ 88.18697, 21.69159 ], [ 88.18593, 21.69068 ], [ 88.18513, 21.68993 ], [ 88.18471, 21.68987 ], [ 88.18435, 21.68993 ], [ 88.18402, 21.69003 ], [ 88.18378, 21.69016 ], [ 88.18371, 21.69036 ] ] ], [ [ [ 89.0262743, 21.6832415 ], [ 89.0269609, 21.6849962 ], [ 89.0269609, 21.6878674 ], [ 89.0257593, 21.6918551 ], [ 89.023356, 21.6988731 ], [ 89.0212961, 21.7011061 ], [ 89.0187212, 21.7022225 ], [ 89.0140863, 21.702701 ], [ 89.0109964, 21.7034985 ], [ 89.0104814, 21.7046149 ], [ 89.0106531, 21.7063693 ], [ 89.0118547, 21.7074857 ], [ 89.0130564, 21.7079642 ], [ 89.0154596, 21.7078047 ], [ 89.0194078, 21.7079642 ], [ 89.0214678, 21.7087616 ], [ 89.0226694, 21.7103565 ], [ 89.0235277, 21.7119513 ], [ 89.0230127, 21.7140246 ], [ 89.0230127, 21.7154599 ], [ 89.0247293, 21.7162573 ], [ 89.0274759, 21.7167357 ], [ 89.0302225, 21.7172141 ], [ 89.0334841, 21.71849 ], [ 89.0372606, 21.7199252 ], [ 89.0391489, 21.7202442 ], [ 89.0413805, 21.7207226 ], [ 89.0448137, 21.7207226 ], [ 89.0492769, 21.7210415 ], [ 89.0535684, 21.721201 ], [ 89.0585466, 21.7213605 ], [ 89.0599199, 21.7205631 ], [ 89.0606066, 21.7192873 ], [ 89.0621515, 21.7172141 ], [ 89.0633531, 21.714503 ], [ 89.0648981, 21.7117918 ], [ 89.0666147, 21.7076452 ], [ 89.0678163, 21.7068478 ], [ 89.0686746, 21.7039769 ], [ 89.0697046, 21.7007871 ], [ 89.0703913, 21.6979161 ], [ 89.0702196, 21.6958426 ], [ 89.0683313, 21.6924931 ], [ 89.0683313, 21.689941 ], [ 89.0660997, 21.689622 ], [ 89.0642115, 21.6913765 ], [ 89.0628382, 21.6937691 ], [ 89.0612932, 21.6961616 ], [ 89.0602632, 21.6988731 ], [ 89.0592333, 21.6990326 ], [ 89.0606066, 21.6958426 ], [ 89.0618082, 21.6928121 ], [ 89.0638681, 21.690579 ], [ 89.0657564, 21.6888244 ], [ 89.0623232, 21.6886649 ], [ 89.05786, 21.6885054 ], [ 89.0540834, 21.6875483 ], [ 89.0503069, 21.6861127 ], [ 89.0490194, 21.6844379 ], [ 89.0473028, 21.6824439 ], [ 89.0460153, 21.680769 ], [ 89.0442129, 21.6829225 ], [ 89.0417238, 21.6844379 ], [ 89.0386339, 21.683082 ], [ 89.0384622, 21.6810083 ], [ 89.0393206, 21.6736703 ], [ 89.0382906, 21.6731917 ], [ 89.0341707, 21.6728727 ], [ 89.0334841, 21.6719155 ], [ 89.0334841, 21.6698417 ], [ 89.0348574, 21.6671296 ], [ 89.037089, 21.6671296 ], [ 89.0384622, 21.6680868 ], [ 89.0412088, 21.669044 ], [ 89.0441271, 21.6695226 ], [ 89.0470453, 21.6700012 ], [ 89.045672, 21.6688845 ], [ 89.0442987, 21.6676082 ], [ 89.0430971, 21.6656938 ], [ 89.0427538, 21.6633008 ], [ 89.0429254, 21.6599505 ], [ 89.0422388, 21.6585146 ], [ 89.0393206, 21.656281 ], [ 89.0357157, 21.6535687 ], [ 89.033999, 21.6538878 ], [ 89.0321108, 21.6561215 ], [ 89.0288492, 21.6586742 ], [ 89.0257593, 21.6596314 ], [ 89.0223261, 21.6610673 ], [ 89.0214678, 21.662184 ], [ 89.0240427, 21.6687249 ], [ 89.0240427, 21.672075 ], [ 89.023871, 21.6752656 ], [ 89.0242143, 21.678775 ], [ 89.0247293, 21.6808488 ], [ 89.0262743, 21.6832415 ] ] ], [ [ [ 88.4557717, 21.7065623 ], [ 88.4568016, 21.7049674 ], [ 88.4582, 21.70314 ], [ 88.4593, 21.69971 ], [ 88.46175, 21.69433 ], [ 88.46443, 21.68885 ], [ 88.46621, 21.68527 ], [ 88.46665, 21.68285 ], [ 88.4672, 21.68064 ], [ 88.46842, 21.67738 ], [ 88.46964, 21.67464 ], [ 88.47054, 21.67348 ], [ 88.46973, 21.67159 ], [ 88.4690576, 21.6691687 ], [ 88.4685426, 21.6682115 ], [ 88.4659677, 21.6675733 ], [ 88.4664827, 21.6714021 ], [ 88.4664827, 21.6739545 ], [ 88.4675126, 21.6755497 ], [ 88.4676843, 21.6768259 ], [ 88.4669977, 21.6782616 ], [ 88.4651094, 21.6793782 ], [ 88.4616761, 21.6800163 ], [ 88.4589296, 21.6808139 ], [ 88.455153, 21.6819305 ], [ 88.4518914, 21.6833662 ], [ 88.4494882, 21.6846423 ], [ 88.4496599, 21.6841637 ], [ 88.4512048, 21.6830471 ], [ 88.4544664, 21.681452 ], [ 88.4565263, 21.6803353 ], [ 88.4611612, 21.6792187 ], [ 88.4645944, 21.6787402 ], [ 88.4666543, 21.677145 ], [ 88.4659677, 21.6755497 ], [ 88.4651094, 21.6731569 ], [ 88.4647661, 21.6701258 ], [ 88.4649377, 21.6667757 ], [ 88.4647661, 21.6653399 ], [ 88.4637361, 21.6634255 ], [ 88.4647661, 21.6624682 ], [ 88.4645944, 21.6611919 ], [ 88.4644227, 21.6584797 ], [ 88.4643, 21.65602 ], [ 88.46231, 21.65287 ], [ 88.4611612, 21.6495451 ], [ 88.4578996, 21.6497046 ], [ 88.4570413, 21.6490664 ], [ 88.4548097, 21.6474709 ], [ 88.4534364, 21.646354 ], [ 88.4554963, 21.6474709 ], [ 88.4573846, 21.6482687 ], [ 88.4582429, 21.6482687 ], [ 88.46042, 21.6463 ], [ 88.45917, 21.64126 ], [ 88.45742, 21.63457 ], [ 88.45358, 21.62948 ], [ 88.4533, 21.62777 ], [ 88.45328, 21.62363 ], [ 88.45169, 21.62181 ], [ 88.4488, 21.62061 ], [ 88.44577, 21.61892 ], [ 88.4434, 21.61699 ], [ 88.44267, 21.61642 ], [ 88.44201, 21.61681 ], [ 88.44203, 21.61819 ], [ 88.44177, 21.62011 ], [ 88.4416, 21.62164 ], [ 88.44201, 21.62278 ], [ 88.44175, 21.62379 ], [ 88.441, 21.62462 ], [ 88.44043, 21.62706 ], [ 88.43936, 21.62919 ], [ 88.43811, 21.63236 ], [ 88.43695, 21.63419 ], [ 88.43537, 21.63621 ], [ 88.43341, 21.6381 ], [ 88.43128, 21.6405 ], [ 88.42912, 21.64299 ], [ 88.42527, 21.64673 ], [ 88.42356, 21.64844 ], [ 88.42195, 21.65023 ], [ 88.42091, 21.6516 ], [ 88.42045, 21.65284 ], [ 88.42053, 21.65417 ], [ 88.42077, 21.65713 ], [ 88.42061, 21.66123 ], [ 88.42062, 21.66468 ], [ 88.42078, 21.66725 ], [ 88.42047, 21.67373 ], [ 88.4199, 21.67684 ], [ 88.42007, 21.67656 ], [ 88.41919, 21.68079 ], [ 88.41887, 21.68248 ], [ 88.4187, 21.68364 ], [ 88.41911, 21.68455 ], [ 88.4193, 21.68643 ], [ 88.41941, 21.68835 ], [ 88.4196, 21.68941 ], [ 88.4201, 21.69004 ], [ 88.4221, 21.69088 ], [ 88.42422, 21.69216 ], [ 88.42667, 21.69398 ], [ 88.42931, 21.69622 ], [ 88.43136, 21.6991 ], [ 88.43269, 21.70191 ], [ 88.434314, 21.703213 ], [ 88.4363739, 21.7049674 ], [ 88.4384339, 21.7067218 ], [ 88.4406655, 21.7078382 ], [ 88.443412, 21.7084762 ], [ 88.4458153, 21.7087951 ], [ 88.4494202, 21.7089546 ], [ 88.4525101, 21.7094331 ], [ 88.4542267, 21.7086356 ], [ 88.4557717, 21.7065623 ] ] ], [ [ [ 88.74543, 21.65175 ], [ 88.746545, 21.6508147 ], [ 88.7484332, 21.6501765 ], [ 88.7510081, 21.6493787 ], [ 88.7510081, 21.6482619 ], [ 88.7489482, 21.6466663 ], [ 88.7472316, 21.645709 ], [ 88.7443134, 21.6455494 ], [ 88.7424251, 21.6455494 ], [ 88.7391635, 21.6455494 ], [ 88.7365886, 21.6455494 ], [ 88.734872, 21.6445921 ], [ 88.7319537, 21.6426774 ], [ 88.7286922, 21.6404435 ], [ 88.7262889, 21.6386883 ], [ 88.7249156, 21.6375714 ], [ 88.7235423, 21.6385288 ], [ 88.7233707, 21.6409222 ], [ 88.722684, 21.6425178 ], [ 88.7211391, 21.6436347 ], [ 88.71977, 21.64398 ], [ 88.71484, 21.65243 ], [ 88.71094, 21.65787 ], [ 88.70958, 21.66072 ], [ 88.71002, 21.662 ], [ 88.70972, 21.66324 ], [ 88.70827, 21.66485 ], [ 88.7053, 21.66595 ], [ 88.70256, 21.66654 ], [ 88.69796, 21.67095 ], [ 88.69691, 21.67342 ], [ 88.69472, 21.67672 ], [ 88.69414, 21.67798 ], [ 88.69187, 21.67976 ], [ 88.68865, 21.68373 ], [ 88.68853, 21.68513 ], [ 88.69045, 21.68722 ], [ 88.69165, 21.68996 ], [ 88.69338, 21.69572 ], [ 88.69448, 21.69886 ], [ 88.69461, 21.70046 ], [ 88.6951, 21.70393 ], [ 88.69655, 21.70749 ], [ 88.69676, 21.71037 ], [ 88.69708, 21.71128 ], [ 88.69814, 21.70787 ], [ 88.69786, 21.70305 ], [ 88.69878, 21.69696 ], [ 88.70055, 21.69073 ], [ 88.70284, 21.6861 ], [ 88.70792, 21.68026 ], [ 88.7142, 21.67443 ], [ 88.7206, 21.67052 ], [ 88.72767, 21.66505 ], [ 88.73533, 21.65886 ], [ 88.74035, 21.65438 ], [ 88.74543, 21.65175 ] ] ], [ [ [ 88.6366381, 21.665585 ], [ 88.6359515, 21.6643087 ], [ 88.6345782, 21.6615966 ], [ 88.6335482, 21.6606394 ], [ 88.63265, 21.66052 ], [ 88.63253, 21.65987 ], [ 88.63272, 21.65926 ], [ 88.63296, 21.65836 ], [ 88.63297, 21.65794 ], [ 88.63268, 21.65731 ], [ 88.63219, 21.65645 ], [ 88.6325182, 21.6552149 ], [ 88.6330332, 21.6544172 ], [ 88.6337199, 21.6536195 ], [ 88.6330332, 21.6518644 ], [ 88.6335482, 21.6509071 ], [ 88.6321749, 21.6509071 ], [ 88.631145, 21.6502689 ], [ 88.6305, 21.65066 ], [ 88.63013, 21.65131 ], [ 88.62944, 21.65176 ], [ 88.62874, 21.65235 ], [ 88.62819, 21.65376 ], [ 88.62822, 21.65468 ], [ 88.628, 21.65573 ], [ 88.62834, 21.65792 ], [ 88.62899, 21.66046 ], [ 88.62946, 21.66124 ], [ 88.62917, 21.66174 ], [ 88.62921, 21.66243 ], [ 88.62985, 21.66365 ], [ 88.62989, 21.66479 ], [ 88.62985, 21.66539 ], [ 88.63058, 21.66567 ], [ 88.63089, 21.66591 ], [ 88.63144, 21.66665 ], [ 88.63206, 21.66702 ], [ 88.63225, 21.66737 ], [ 88.63221, 21.66774 ], [ 88.63224, 21.66864 ], [ 88.63249, 21.66972 ], [ 88.6329, 21.67017 ], [ 88.63301, 21.67047 ], [ 88.6331, 21.6712 ], [ 88.63334, 21.67163 ], [ 88.63363, 21.67193 ], [ 88.63426, 21.67247 ], [ 88.63447, 21.6729 ], [ 88.63496, 21.67426 ], [ 88.63535, 21.67477 ], [ 88.63594, 21.67507 ], [ 88.6365, 21.67561 ], [ 88.63697, 21.67641 ], [ 88.6376522, 21.6773037 ], [ 88.6387655, 21.6783224 ], [ 88.6389123, 21.6790931 ], [ 88.6397413, 21.6793424 ], [ 88.6400312, 21.6806266 ], [ 88.6397558, 21.6806293 ], [ 88.6397675, 21.681659 ], [ 88.6408749, 21.6821628 ], [ 88.6414082, 21.680613 ], [ 88.641959, 21.6806076 ], [ 88.6426235, 21.6785416 ], [ 88.642463, 21.676484 ], [ 88.6419108, 21.6763602 ], [ 88.6416354, 21.676363 ], [ 88.6405383, 21.6767603 ], [ 88.64036, 21.67656 ], [ 88.64008, 21.67574 ], [ 88.64024, 21.67525 ], [ 88.64021, 21.67467 ], [ 88.63904, 21.67221 ], [ 88.639728, 21.6702114 ], [ 88.6390414, 21.6687757 ], [ 88.6381831, 21.6671804 ], [ 88.6366381, 21.665585 ] ] ], [ [ [ 88.5187068, 21.7081744 ], [ 88.5178484, 21.7097692 ], [ 88.51748, 21.71171 ], [ 88.51833, 21.71368 ], [ 88.51909, 21.71528 ], [ 88.51989, 21.71601 ], [ 88.52075, 21.7166 ], [ 88.52185, 21.71673 ], [ 88.52409, 21.71681 ], [ 88.52555, 21.71666 ], [ 88.52603, 21.71656 ], [ 88.52706, 21.71554 ], [ 88.52921, 21.71366 ], [ 88.5305, 21.71222 ], [ 88.53305, 21.70951 ], [ 88.53609, 21.70589 ], [ 88.53713, 21.70429 ], [ 88.53845, 21.70206 ], [ 88.5399, 21.70038 ], [ 88.54116, 21.69948 ], [ 88.54294, 21.69885 ], [ 88.54426, 21.69868 ], [ 88.54581, 21.69872 ], [ 88.54744, 21.69913 ], [ 88.54903, 21.6997 ], [ 88.55095, 21.70064 ], [ 88.55395, 21.7029 ], [ 88.55664, 21.70485 ], [ 88.55815, 21.70536 ], [ 88.5595, 21.7055 ], [ 88.56112, 21.7055 ], [ 88.56301, 21.70505 ], [ 88.56374, 21.70458 ], [ 88.56499, 21.70339 ], [ 88.56584, 21.70181 ], [ 88.56623, 21.70003 ], [ 88.56622, 21.69782 ], [ 88.56599, 21.69368 ], [ 88.56564, 21.69137 ], [ 88.56499, 21.68866 ], [ 88.56504, 21.68712 ], [ 88.56567, 21.68488 ], [ 88.56824, 21.67777 ], [ 88.5682779, 21.6760283 ], [ 88.5665612, 21.6763473 ], [ 88.564158, 21.6773045 ], [ 88.5610681, 21.6784211 ], [ 88.5591798, 21.6804949 ], [ 88.5579782, 21.681452 ], [ 88.5552316, 21.6828876 ], [ 88.5516267, 21.6838447 ], [ 88.5493951, 21.6844828 ], [ 88.5469919, 21.6848018 ], [ 88.5447603, 21.6843232 ], [ 88.5427003, 21.6844828 ], [ 88.540812, 21.6846423 ], [ 88.5405077, 21.6839303 ], [ 88.542396, 21.6834517 ], [ 88.5442843, 21.6832922 ], [ 88.5484042, 21.6839303 ], [ 88.5497775, 21.6834517 ], [ 88.5516657, 21.6829732 ], [ 88.5569872, 21.6812185 ], [ 88.5576739, 21.6802614 ], [ 88.5592188, 21.6783472 ], [ 88.5614504, 21.6772305 ], [ 88.5640254, 21.6764329 ], [ 88.566257, 21.6753163 ], [ 88.5667719, 21.6745187 ], [ 88.5679736, 21.6732425 ], [ 88.5684885, 21.6719662 ], [ 88.5677161, 21.6723651 ], [ 88.5664286, 21.6729234 ], [ 88.5654845, 21.6735615 ], [ 88.564197, 21.6738008 ], [ 88.5629096, 21.6741198 ], [ 88.5617938, 21.6744389 ], [ 88.5608496, 21.6746782 ], [ 88.558618, 21.6747579 ], [ 88.5568156, 21.6743591 ], [ 88.5556998, 21.6739603 ], [ 88.5556139, 21.6735615 ], [ 88.5566439, 21.6740401 ], [ 88.5584932, 21.6744331 ], [ 88.5608964, 21.6742735 ], [ 88.563643, 21.6734759 ], [ 88.5653596, 21.6731569 ], [ 88.5670762, 21.6720402 ], [ 88.5686212, 21.670764 ], [ 88.5685, 21.66851 ], [ 88.56749, 21.66599 ], [ 88.56539, 21.66316 ], [ 88.56246, 21.66008 ], [ 88.55855, 21.65627 ], [ 88.55611, 21.65349 ], [ 88.55412, 21.65115 ], [ 88.55241, 21.64833 ], [ 88.5515, 21.64645 ], [ 88.55106, 21.64445 ], [ 88.55097, 21.6419 ], [ 88.55126, 21.63993 ], [ 88.55164, 21.63845 ], [ 88.5518, 21.6371 ], [ 88.5517, 21.637 ], [ 88.55146, 21.63696 ], [ 88.54911, 21.63668 ], [ 88.54567, 21.63767 ], [ 88.54289, 21.63887 ], [ 88.54008, 21.6408 ], [ 88.53743, 21.64328 ], [ 88.53591, 21.64483 ], [ 88.53229, 21.64891 ], [ 88.53054, 21.65139 ], [ 88.5286, 21.65648 ], [ 88.52812, 21.65915 ], [ 88.52937, 21.66117 ], [ 88.53154, 21.66425 ], [ 88.53337, 21.66646 ], [ 88.5343, 21.66836 ], [ 88.53428, 21.66917 ], [ 88.53297, 21.67128 ], [ 88.53175, 21.67219 ], [ 88.53135, 21.67432 ], [ 88.53137, 21.67585 ], [ 88.53155, 21.67678 ], [ 88.53036, 21.67991 ], [ 88.53017, 21.68109 ], [ 88.52953, 21.68225 ], [ 88.52809, 21.68459 ], [ 88.5274, 21.68671 ], [ 88.52772, 21.68861 ], [ 88.52826, 21.69122 ], [ 88.52822, 21.69214 ], [ 88.52751, 21.69294 ], [ 88.52556, 21.69486 ], [ 88.52408, 21.69626 ], [ 88.5231699, 21.6981263 ], [ 88.5224833, 21.7005188 ], [ 88.5229983, 21.7019542 ], [ 88.5224833, 21.7029112 ], [ 88.520595, 21.7043466 ], [ 88.5207667, 21.705782 ], [ 88.5188784, 21.70642 ], [ 88.5187068, 21.7081744 ] ] ], [ [ [ 88.3862176, 21.6507618 ], [ 88.3860951, 21.6523075 ], [ 88.3855457, 21.6524403 ], [ 88.3854087, 21.6525705 ], [ 88.3854283, 21.6546299 ], [ 88.3857062, 21.654885 ], [ 88.3857086, 21.6551425 ], [ 88.3851628, 21.6556618 ], [ 88.3846243, 21.6569536 ], [ 88.384081, 21.6577304 ], [ 88.3832622, 21.6585097 ], [ 88.3821828, 21.6608355 ], [ 88.3813641, 21.6616148 ], [ 88.3811084, 21.6636764 ], [ 88.3812514, 21.6641901 ], [ 88.3815255, 21.6640585 ], [ 88.3823529, 21.6641808 ], [ 88.3823104, 21.6742214 ], [ 88.3826226, 21.6780804 ], [ 88.3823595, 21.6793698 ], [ 88.3826398, 21.6798824 ], [ 88.3826619, 21.6821991 ], [ 88.3832227, 21.6832243 ], [ 88.3840587, 21.6842469 ], [ 88.3848923, 21.6850124 ], [ 88.3854506, 21.6857801 ], [ 88.3854556, 21.6862949 ], [ 88.3850466, 21.6866839 ], [ 88.3844969, 21.6868177 ], [ 88.3844994, 21.6870751 ], [ 88.3850502, 21.6870706 ], [ 88.3853331, 21.6878406 ], [ 88.3858852, 21.6879642 ], [ 88.3867188, 21.6887295 ], [ 88.387272, 21.6889823 ], [ 88.3881057, 21.6897476 ], [ 88.3903117, 21.6899867 ], [ 88.3914234, 21.6910071 ], [ 88.3925287, 21.6913843 ], [ 88.3929464, 21.6918958 ], [ 88.3930895, 21.6924095 ], [ 88.3942, 21.6933008 ], [ 88.3950312, 21.6938086 ], [ 88.3955833, 21.6939332 ], [ 88.396001, 21.6944444 ], [ 88.3965667, 21.6959844 ], [ 88.3971225, 21.6964945 ], [ 88.3972658, 21.6970082 ], [ 88.3980921, 21.6970012 ], [ 88.3985147, 21.6980275 ], [ 88.3990706, 21.6985376 ], [ 88.3996315, 21.6995626 ], [ 88.399777, 21.7003337 ], [ 88.400328, 21.7003291 ], [ 88.4007532, 21.7016126 ], [ 88.401031, 21.7018678 ], [ 88.4011768, 21.7026389 ], [ 88.4020044, 21.7027601 ], [ 88.4025602, 21.7032704 ], [ 88.4031125, 21.7033947 ], [ 88.4035302, 21.7039062 ], [ 88.404379, 21.7062159 ], [ 88.4049373, 21.7069835 ], [ 88.4057863, 21.7092932 ], [ 88.4058188, 21.7126397 ], [ 88.4061193, 21.7152114 ], [ 88.4055784, 21.7162458 ], [ 88.4047768, 21.718827 ], [ 88.4045039, 21.7190866 ], [ 88.4032885, 21.7215421 ], [ 88.4016406, 21.7220709 ], [ 88.3997294, 21.7238893 ], [ 88.3945075, 21.7252204 ], [ 88.3943705, 21.7253509 ], [ 88.3939664, 21.7262548 ], [ 88.392589, 21.7262664 ], [ 88.3909434, 21.7270526 ], [ 88.3903973, 21.727572 ], [ 88.3881908, 21.7273331 ], [ 88.3857014, 21.7263242 ], [ 88.3848749, 21.726331 ], [ 88.3834926, 21.7258277 ], [ 88.3810129, 21.7258485 ], [ 88.380184, 21.7255979 ], [ 88.3799061, 21.7253427 ], [ 88.3788041, 21.725352 ], [ 88.3782507, 21.7250991 ], [ 88.3771486, 21.7251084 ], [ 88.3757663, 21.7246049 ], [ 88.3752153, 21.7246094 ], [ 88.3741084, 21.7241038 ], [ 88.3719031, 21.7239938 ], [ 88.3717699, 21.7245098 ], [ 88.3706776, 21.7255485 ], [ 88.370407, 21.7260657 ], [ 88.3705624, 21.7278664 ], [ 88.3711169, 21.7282477 ], [ 88.3730528, 21.7290038 ], [ 88.3824397, 21.7309853 ], [ 88.3851998, 21.7314771 ], [ 88.3865846, 21.7322378 ], [ 88.3876905, 21.7326153 ], [ 88.3900541, 21.7349124 ], [ 88.3906126, 21.7356799 ], [ 88.3911711, 21.7364476 ], [ 88.3928689, 21.7410671 ], [ 88.3937476, 21.7464659 ], [ 88.3937872, 21.7505846 ], [ 88.3940653, 21.7508398 ], [ 88.3942161, 21.7521257 ], [ 88.3939405, 21.752128 ], [ 88.3939454, 21.7526428 ], [ 88.394221, 21.7526404 ], [ 88.3942359, 21.7541849 ], [ 88.3947908, 21.7545659 ], [ 88.3953431, 21.7546905 ], [ 88.3953357, 21.7539182 ], [ 88.3969851, 21.7535177 ], [ 88.3972582, 21.753258 ], [ 88.3986336, 21.7529889 ], [ 88.3991796, 21.7524695 ], [ 88.400005, 21.7523342 ], [ 88.4006759, 21.7505264 ], [ 88.4006685, 21.7497542 ], [ 88.400939, 21.7492371 ], [ 88.4009314, 21.7484648 ], [ 88.3997969, 21.7451278 ], [ 88.399499, 21.7428133 ], [ 88.3997695, 21.7422962 ], [ 88.4000301, 21.7407492 ], [ 88.4005737, 21.7399725 ], [ 88.4005686, 21.7394576 ], [ 88.4013852, 21.738421 ], [ 88.4015134, 21.7373902 ], [ 88.4026094, 21.7367368 ], [ 88.4034283, 21.7359575 ], [ 88.406732, 21.735672 ], [ 88.4070087, 21.7357988 ], [ 88.4070038, 21.7352839 ], [ 88.4086519, 21.7347551 ], [ 88.4086468, 21.7342403 ], [ 88.4091966, 21.7341065 ], [ 88.4094697, 21.7338468 ], [ 88.4100193, 21.7337137 ], [ 88.4101516, 21.7331978 ], [ 88.4106952, 21.7324208 ], [ 88.4115117, 21.7313841 ], [ 88.4128715, 21.7295705 ], [ 88.4139636, 21.7285313 ], [ 88.4143671, 21.7274983 ], [ 88.4149182, 21.7274935 ], [ 88.4155988, 21.7267154 ], [ 88.4158643, 21.7256833 ], [ 88.4161373, 21.7254236 ], [ 88.4162705, 21.7249076 ], [ 88.4168214, 21.7249029 ], [ 88.4172291, 21.7243845 ], [ 88.4174971, 21.72361 ], [ 88.4183159, 21.7228305 ], [ 88.4191272, 21.721279 ], [ 88.4207649, 21.7197204 ], [ 88.4210329, 21.7189458 ], [ 88.4215763, 21.7181689 ], [ 88.4221221, 21.7176493 ], [ 88.4223824, 21.7161023 ], [ 88.423454, 21.7130039 ], [ 88.4234464, 21.7122316 ], [ 88.423977, 21.7101677 ], [ 88.4245203, 21.7093907 ], [ 88.4245152, 21.7088759 ], [ 88.4250586, 21.7080989 ], [ 88.4255944, 21.7065497 ], [ 88.4261403, 21.7060301 ], [ 88.4264081, 21.7052554 ], [ 88.4269539, 21.7047359 ], [ 88.4272217, 21.7039613 ], [ 88.4277649, 21.7031844 ], [ 88.4283083, 21.7024074 ], [ 88.4283007, 21.7016351 ], [ 88.4277396, 21.7006102 ], [ 88.427323, 21.7002271 ], [ 88.4262189, 21.6999791 ], [ 88.4259409, 21.6997242 ], [ 88.4242832, 21.6992235 ], [ 88.4237271, 21.6987134 ], [ 88.4220719, 21.6984701 ], [ 88.4201337, 21.6974571 ], [ 88.4190244, 21.6966943 ], [ 88.4184735, 21.696699 ], [ 88.4175001, 21.6958068 ], [ 88.417358, 21.695293 ], [ 88.4165304, 21.695171 ], [ 88.4158324, 21.6942764 ], [ 88.4156903, 21.6937627 ], [ 88.415138, 21.6936382 ], [ 88.4147156, 21.6927412 ], [ 88.4141573, 21.6919736 ], [ 88.4135988, 21.6912061 ], [ 88.413454, 21.690435 ], [ 88.4129033, 21.6904397 ], [ 88.41275, 21.6888965 ], [ 88.412472, 21.6886414 ], [ 88.4116107, 21.6850445 ], [ 88.4115455, 21.6783517 ], [ 88.4120787, 21.6765452 ], [ 88.4120711, 21.6757729 ], [ 88.4134181, 21.6726722 ], [ 88.4131225, 21.6706151 ], [ 88.4128447, 21.6703602 ], [ 88.4117181, 21.6677952 ], [ 88.4111097, 21.6618794 ], [ 88.4110671, 21.6575033 ], [ 88.4113374, 21.6569862 ], [ 88.4113274, 21.6559565 ], [ 88.4115954, 21.655182 ], [ 88.4115878, 21.6544097 ], [ 88.4124013, 21.6531154 ], [ 88.4123939, 21.6523432 ], [ 88.4126666, 21.6520835 ], [ 88.4130652, 21.6505354 ], [ 88.4136158, 21.6505309 ], [ 88.4137456, 21.6497573 ], [ 88.4142886, 21.6489805 ], [ 88.4148318, 21.6482035 ], [ 88.4156504, 21.6474243 ], [ 88.4170095, 21.6456106 ], [ 88.417413, 21.6445774 ], [ 88.4179637, 21.6445726 ], [ 88.4182316, 21.6437981 ], [ 88.4187821, 21.6437934 ], [ 88.4187772, 21.6432785 ], [ 88.4193266, 21.6431445 ], [ 88.4204179, 21.6421056 ], [ 88.4215154, 21.6417104 ], [ 88.4215079, 21.6409382 ], [ 88.4231535, 21.6402801 ], [ 88.4236991, 21.6397605 ], [ 88.4247929, 21.6389788 ], [ 88.4253423, 21.6388459 ], [ 88.4253372, 21.6383311 ], [ 88.4261607, 21.6380665 ], [ 88.4265682, 21.6375481 ], [ 88.4268233, 21.6354865 ], [ 88.4281771, 21.6331578 ], [ 88.4297834, 21.6285103 ], [ 88.4300131, 21.6238743 ], [ 88.4295969, 21.6234914 ], [ 88.4235226, 21.6217414 ], [ 88.4174635, 21.6215356 ], [ 88.4152561, 21.6210397 ], [ 88.4144253, 21.6205318 ], [ 88.4127734, 21.6205458 ], [ 88.4120785, 21.6199085 ], [ 88.411382, 21.619013 ], [ 88.4105536, 21.6187626 ], [ 88.4094449, 21.6179996 ], [ 88.4077783, 21.6164691 ], [ 88.4070859, 21.6160894 ], [ 88.4048413, 21.6117318 ], [ 88.404008, 21.6109665 ], [ 88.4031671, 21.609429 ], [ 88.4028795, 21.6081442 ], [ 88.4023191, 21.6071191 ], [ 88.4022941, 21.6045449 ], [ 88.4017337, 21.6035199 ], [ 88.4015892, 21.6027488 ], [ 88.4026865, 21.6023529 ], [ 88.4029592, 21.6020932 ], [ 88.4035086, 21.6019603 ], [ 88.4044616, 21.6009225 ], [ 88.4044567, 21.6004077 ], [ 88.4043181, 21.6002797 ], [ 88.4037678, 21.6002843 ], [ 88.4028101, 21.6009365 ], [ 88.402131, 21.6018428 ], [ 88.3993858, 21.6026383 ], [ 88.398565, 21.6031599 ], [ 88.3981552, 21.60355 ], [ 88.3974763, 21.6044562 ], [ 88.3963826, 21.6052378 ], [ 88.3956977, 21.6056301 ], [ 88.3948867, 21.6071816 ], [ 88.3944779, 21.6075708 ], [ 88.3928337, 21.6083568 ], [ 88.3920091, 21.6084929 ], [ 88.392014, 21.6090077 ], [ 88.3914646, 21.6091406 ], [ 88.3910575, 21.6097881 ], [ 88.3910698, 21.6110752 ], [ 88.39164, 21.61313 ], [ 88.3944497, 21.6190276 ], [ 88.3944546, 21.6195424 ], [ 88.3931002, 21.6218707 ], [ 88.3926916, 21.6222599 ], [ 88.3918706, 21.6227817 ], [ 88.3913187, 21.6226581 ], [ 88.3911855, 21.6231741 ], [ 88.3903669, 21.6239531 ], [ 88.390372, 21.6244679 ], [ 88.3898262, 21.6249875 ], [ 88.3892904, 21.6265365 ], [ 88.3881989, 21.6275755 ], [ 88.3879311, 21.62835 ], [ 88.3871174, 21.6296441 ], [ 88.3864357, 21.6302929 ], [ 88.3858863, 21.6304265 ], [ 88.3854826, 21.6314598 ], [ 88.3855072, 21.634034 ], [ 88.3860751, 21.6358314 ], [ 88.3862255, 21.6371173 ], [ 88.3873293, 21.6373655 ], [ 88.3878948, 21.6389055 ], [ 88.3887232, 21.6391559 ], [ 88.3881552, 21.6373587 ], [ 88.3876034, 21.6372341 ], [ 88.3873244, 21.6368507 ], [ 88.3887035, 21.6370965 ], [ 88.3894085, 21.6388928 ], [ 88.3907975, 21.6401684 ], [ 88.3909432, 21.6409395 ], [ 88.3901184, 21.6410746 ], [ 88.3894333, 21.641467 ], [ 88.3886268, 21.6435333 ], [ 88.3880811, 21.6440527 ], [ 88.3876784, 21.6450858 ], [ 88.3882291, 21.6450812 ], [ 88.3886366, 21.644563 ], [ 88.3893108, 21.6430126 ], [ 88.3895862, 21.6430104 ], [ 88.389743, 21.6450686 ], [ 88.3900233, 21.6455811 ], [ 88.3899033, 21.6473842 ], [ 88.3890785, 21.6475193 ], [ 88.3877054, 21.6479174 ], [ 88.3875771, 21.6489484 ], [ 88.3874412, 21.6490776 ], [ 88.3868918, 21.6492114 ], [ 88.386761, 21.6499848 ], [ 88.3862176, 21.6507618 ] ] ], [ [ [ 88.59365, 21.692132909417484 ], [ 88.5940661, 21.6917463 ], [ 88.59497, 21.69062 ], [ 88.59858, 21.68801 ], [ 88.60052, 21.68675 ], [ 88.60538, 21.68101 ], [ 88.60366, 21.67936 ], [ 88.60289, 21.67646 ], [ 88.60456, 21.67456 ], [ 88.60352, 21.67206 ], [ 88.6003, 21.6679 ], [ 88.59815, 21.66424 ], [ 88.59365, 21.660650401063759 ], [ 88.5930361, 21.6601607 ], [ 88.5920062, 21.659363 ], [ 88.5911479, 21.6580867 ], [ 88.5897746, 21.657289 ], [ 88.5884013, 21.6577676 ], [ 88.587543, 21.6587249 ], [ 88.5873713, 21.6617561 ], [ 88.5871996, 21.6652659 ], [ 88.587543, 21.6689352 ], [ 88.585998, 21.6708496 ], [ 88.5853114, 21.673721 ], [ 88.5844531, 21.6748377 ], [ 88.5825648, 21.6789853 ], [ 88.5818781, 21.68074 ], [ 88.5810198, 21.681378 ], [ 88.5808482, 21.6832922 ], [ 88.5822215, 21.6845683 ], [ 88.5847964, 21.6861635 ], [ 88.587543, 21.6871205 ], [ 88.5904612, 21.6880776 ], [ 88.5913195, 21.6890346 ], [ 88.5921778, 21.6899917 ], [ 88.5921778, 21.6909487 ], [ 88.5914912, 21.6927033 ], [ 88.5904612, 21.6941388 ], [ 88.5896029, 21.6955743 ], [ 88.5884013, 21.6976478 ], [ 88.5880579, 21.6989238 ], [ 88.5878863, 21.7001998 ], [ 88.5890879, 21.6997213 ], [ 88.5894312, 21.6982858 ], [ 88.5896029, 21.6973288 ], [ 88.5901179, 21.6962123 ], [ 88.5909762, 21.6957338 ], [ 88.5914912, 21.6949363 ], [ 88.5918345, 21.6938198 ], [ 88.5930361, 21.6927033 ], [ 88.59365, 21.692132909417484 ] ] ], [ [ [ 88.7647697, 21.6915458 ], [ 88.7668296, 21.6921838 ], [ 88.7692329, 21.6923433 ], [ 88.7726661, 21.6926623 ], [ 88.776271, 21.6939384 ], [ 88.7776443, 21.6948954 ], [ 88.7807342, 21.6961714 ], [ 88.7836524, 21.6982449 ], [ 88.786914, 21.6996804 ], [ 88.7925788, 21.7022323 ], [ 88.796012, 21.7038272 ], [ 88.7994453, 21.7049436 ], [ 88.8020202, 21.7057411 ], [ 88.8049384, 21.7055816 ], [ 88.808715, 21.7047842 ], [ 88.8095733, 21.7041462 ], [ 88.809745, 21.7017538 ], [ 88.8099166, 21.6969689 ], [ 88.8102599, 21.6921838 ], [ 88.8102599, 21.6869201 ], [ 88.80923, 21.6832513 ], [ 88.8082, 21.6802205 ], [ 88.80717, 21.6760729 ], [ 88.8069984, 21.6722443 ], [ 88.80717, 21.6687347 ], [ 88.8075134, 21.6649059 ], [ 88.8056251, 21.6621938 ], [ 88.8032218, 21.6596412 ], [ 88.8009902, 21.6580457 ], [ 88.797557, 21.6570885 ], [ 88.796012, 21.6556526 ], [ 88.7932655, 21.6562908 ], [ 88.7912055, 21.6569289 ], [ 88.7882873, 21.6588435 ], [ 88.7901756, 21.6602793 ], [ 88.7917205, 21.6605984 ], [ 88.7937804, 21.661077 ], [ 88.7942954, 21.6636296 ], [ 88.7936946, 21.6654643 ], [ 88.7921497, 21.6673787 ], [ 88.7897464, 21.6696121 ], [ 88.7885448, 21.6708884 ], [ 88.787429, 21.6725634 ], [ 88.7876006, 21.6741587 ], [ 88.7884589, 21.6755944 ], [ 88.7896606, 21.6769503 ], [ 88.7906047, 21.6781467 ], [ 88.7901756, 21.6792634 ], [ 88.7896606, 21.6778277 ], [ 88.7882873, 21.6762325 ], [ 88.7867423, 21.6739991 ], [ 88.7865707, 21.6720848 ], [ 88.7877723, 21.6706491 ], [ 88.7893172, 21.6692133 ], [ 88.7917205, 21.6666608 ], [ 88.7930938, 21.665225 ], [ 88.7934371, 21.6633106 ], [ 88.7929221, 21.6620343 ], [ 88.7896606, 21.6617152 ], [ 88.786399, 21.6615556 ], [ 88.7846824, 21.6605984 ], [ 88.7798759, 21.6629915 ], [ 88.7798759, 21.6645868 ], [ 88.7764426, 21.6644273 ], [ 88.775241, 21.6644273 ], [ 88.7712928, 21.665225 ], [ 88.7683746, 21.6649059 ], [ 88.764083, 21.6641082 ], [ 88.7603065, 21.6633106 ], [ 88.7563583, 21.6660227 ], [ 88.7536117, 21.6692133 ], [ 88.7512084, 21.6716062 ], [ 88.7482902, 21.6739991 ], [ 88.7441703, 21.6762325 ], [ 88.7410804, 21.6789443 ], [ 88.7379905, 21.6802205 ], [ 88.7338706, 21.6819752 ], [ 88.732154, 21.6829322 ], [ 88.731124, 21.6848464 ], [ 88.731124, 21.6861225 ], [ 88.7324973, 21.6869201 ], [ 88.7345573, 21.6870796 ], [ 88.7364455, 21.6872391 ], [ 88.7391921, 21.6877176 ], [ 88.7407371, 21.6891532 ], [ 88.7424537, 21.6889937 ], [ 88.742797, 21.6877176 ], [ 88.7426254, 21.685963 ], [ 88.7426254, 21.6845274 ], [ 88.743827, 21.6832513 ], [ 88.7453719, 21.6818156 ], [ 88.7477752, 21.6818156 ], [ 88.7500068, 21.6824537 ], [ 88.752925, 21.6832513 ], [ 88.7548133, 21.6821347 ], [ 88.7575599, 21.6821347 ], [ 88.7594482, 21.6824537 ], [ 88.7611648, 21.6832513 ], [ 88.7627097, 21.6858035 ], [ 88.7628814, 21.6878771 ], [ 88.7633964, 21.6905888 ], [ 88.7647697, 21.6915458 ] ] ], [ [ [ 89.0324541, 21.7205631 ], [ 89.0314241, 21.7218389 ], [ 89.0303942, 21.724231 ], [ 89.0295359, 21.726623 ], [ 89.0295359, 21.7293339 ], [ 89.0300508, 21.7330015 ], [ 89.0317674, 21.7355528 ], [ 89.033999, 21.7379447 ], [ 89.036059, 21.7393798 ], [ 89.0389772, 21.7398581 ], [ 89.0403505, 21.7398581 ], [ 89.0424105, 21.7382636 ], [ 89.0442987, 21.7365096 ], [ 89.0458437, 21.7352339 ], [ 89.0480753, 21.7337988 ], [ 89.0504785, 21.7325231 ], [ 89.0527101, 21.7312474 ], [ 89.0556284, 21.7293339 ], [ 89.0558, 21.7271014 ], [ 89.0554567, 21.7237526 ], [ 89.0528818, 21.7234336 ], [ 89.0482469, 21.7231147 ], [ 89.0444704, 21.7227957 ], [ 89.0403505, 21.7221578 ], [ 89.0379473, 21.7219984 ], [ 89.034514, 21.7210415 ], [ 89.0324541, 21.7205631 ] ] ], [ [ [ 88.8821658, 21.7442253 ], [ 88.8830241, 21.7450226 ], [ 88.887144, 21.7431092 ], [ 88.8902339, 21.7411958 ], [ 88.8946971, 21.7383257 ], [ 88.897272, 21.7364122 ], [ 88.9013919, 21.7330636 ], [ 88.9034518, 21.731469 ], [ 88.9053401, 21.729396 ], [ 88.9087733, 21.7281203 ], [ 88.9118632, 21.7271635 ], [ 88.9135799, 21.7258878 ], [ 88.9144382, 21.7226984 ], [ 88.9149531, 21.7177547 ], [ 88.9175281, 21.7129703 ], [ 88.9199313, 21.7094617 ], [ 88.9226779, 21.7069099 ], [ 88.9257678, 21.7051555 ], [ 88.9305743, 21.7032416 ], [ 88.9348659, 21.7016467 ], [ 88.9367541, 21.7000517 ], [ 88.9386424, 21.6973402 ], [ 88.9400157, 21.6946287 ], [ 88.940874, 21.6923957 ], [ 88.9412173, 21.68777 ], [ 88.940359, 21.6833036 ], [ 88.9388141, 21.67788 ], [ 88.9367541, 21.6710205 ], [ 88.9345225, 21.6647988 ], [ 88.9324626, 21.6601722 ], [ 88.929716, 21.6555454 ], [ 88.9269694, 21.6496421 ], [ 88.9259395, 21.6454937 ], [ 88.9226779, 21.6340052 ], [ 88.919588, 21.6325691 ], [ 88.9183864, 21.6343243 ], [ 88.9161548, 21.6363987 ], [ 88.9144382, 21.6375157 ], [ 88.9123782, 21.6407069 ], [ 88.909975, 21.6418239 ], [ 88.9087733, 21.6440577 ], [ 88.9065417, 21.6462915 ], [ 88.9046535, 21.6494826 ], [ 88.9024219, 21.6510781 ], [ 88.9015636, 21.6521949 ], [ 88.9005336, 21.6531522 ], [ 88.899332, 21.6521949 ], [ 88.8955554, 21.6529927 ], [ 88.8945254, 21.6544286 ], [ 88.8905772, 21.6561836 ], [ 88.8890323, 21.6566622 ], [ 88.887659, 21.6588958 ], [ 88.8868007, 21.6611294 ], [ 88.886629, 21.6625652 ], [ 88.886114, 21.6638415 ], [ 88.8864574, 21.6676704 ], [ 88.8868007, 21.6697443 ], [ 88.8847407, 21.6785181 ], [ 88.8818225, 21.6844202 ], [ 88.8806209, 21.687451 ], [ 88.8795909, 21.6885675 ], [ 88.8795909, 21.6895246 ], [ 88.8809642, 21.6893651 ], [ 88.8831958, 21.6885675 ], [ 88.8849124, 21.68777 ], [ 88.886114, 21.6872915 ], [ 88.8895473, 21.6848988 ], [ 88.8907489, 21.6842607 ], [ 88.8916072, 21.6843405 ], [ 88.8903197, 21.6882485 ], [ 88.888174, 21.6949477 ], [ 88.887144, 21.6973402 ], [ 88.8864574, 21.6986162 ], [ 88.887144, 21.6995732 ], [ 88.8883456, 21.6992542 ], [ 88.8892039, 21.6981377 ], [ 88.8888606, 21.6997327 ], [ 88.8874873, 21.7002112 ], [ 88.8859424, 21.6994137 ], [ 88.8862857, 21.6978187 ], [ 88.8869723, 21.6959047 ], [ 88.8890323, 21.6901626 ], [ 88.8909206, 21.6848988 ], [ 88.8897189, 21.6853773 ], [ 88.8874873, 21.6871319 ], [ 88.8848266, 21.6886473 ], [ 88.8831958, 21.6892853 ], [ 88.8814792, 21.6900031 ], [ 88.8795909, 21.6901626 ], [ 88.8783893, 21.6900031 ], [ 88.8780459, 21.6888865 ], [ 88.8787326, 21.6872915 ], [ 88.877016, 21.6895246 ], [ 88.8756427, 21.6917577 ], [ 88.8746127, 21.6931932 ], [ 88.8737544, 21.6939907 ], [ 88.8728961, 21.7002112 ], [ 88.8727244, 21.7054745 ], [ 88.8725528, 21.7100996 ], [ 88.8730678, 21.7137677 ], [ 88.8735828, 21.71919 ], [ 88.8751277, 21.7239741 ], [ 88.8777026, 21.7284392 ], [ 88.8787326, 21.7324258 ], [ 88.8795909, 21.7354555 ], [ 88.8804492, 21.7380068 ], [ 88.8806209, 21.7400797 ], [ 88.8811359, 21.7424714 ], [ 88.8821658, 21.7442253 ] ] ], [ [ [ 88.991427, 21.7041364 ], [ 88.9891954, 21.7066883 ], [ 88.9867922, 21.7090806 ], [ 88.9835306, 21.7114729 ], [ 88.9788957, 21.7143435 ], [ 88.9723726, 21.7192873 ], [ 88.971171, 21.7208821 ], [ 88.9728876, 21.7227957 ], [ 88.9739176, 21.7229552 ], [ 88.9742609, 21.7243904 ], [ 88.9758058, 21.7250283 ], [ 88.9763208, 21.7267825 ], [ 88.9773508, 21.726623 ], [ 88.9800974, 21.7258256 ], [ 88.9838739, 21.7248688 ], [ 88.991942, 21.7229552 ], [ 88.9938303, 21.7216794 ], [ 88.9965769, 21.7180115 ], [ 88.9986368, 21.7164168 ], [ 89.0003534, 21.7156194 ], [ 89.0022417, 21.714822 ], [ 89.0039583, 21.7146625 ], [ 89.0053316, 21.714503 ], [ 89.0077349, 21.7153004 ], [ 89.0135713, 21.7172141 ], [ 89.0151163, 21.7168952 ], [ 89.0166612, 21.7165762 ], [ 89.0185495, 21.714822 ], [ 89.0199228, 21.7135461 ], [ 89.0207811, 21.7119513 ], [ 89.0197512, 21.7108349 ], [ 89.0183779, 21.7103565 ], [ 89.0164896, 21.7103565 ], [ 89.0130564, 21.7103565 ], [ 89.0108248, 21.7100375 ], [ 89.0091081, 21.7086021 ], [ 89.0077349, 21.7063693 ], [ 89.0073915, 21.7038174 ], [ 89.0079065, 21.702063 ], [ 89.0091081, 21.7007871 ], [ 89.0111681, 21.7006276 ], [ 89.0144297, 21.6999896 ], [ 89.0175196, 21.6998301 ], [ 89.0190645, 21.6991921 ], [ 89.0204378, 21.6977566 ], [ 89.0235277, 21.6893029 ], [ 89.023871, 21.6878674 ], [ 89.023871, 21.6865913 ], [ 89.0230127, 21.6841986 ], [ 89.0212961, 21.6805297 ], [ 89.0211244, 21.678137 ], [ 89.0211244, 21.6738298 ], [ 89.0212961, 21.6707988 ], [ 89.0197512, 21.6660129 ], [ 89.0183779, 21.6648962 ], [ 89.0176912, 21.6636199 ], [ 89.0183779, 21.6626626 ], [ 89.0183779, 21.6612268 ], [ 89.013228, 21.6581955 ], [ 89.0077349, 21.6577169 ], [ 89.0056749, 21.6570787 ], [ 89.0034433, 21.6553237 ], [ 89.003615, 21.6538878 ], [ 89.0029283, 21.6522923 ], [ 88.9994951, 21.6518137 ], [ 88.9964052, 21.651335 ], [ 88.9938303, 21.651335 ], [ 88.991942, 21.6516541 ], [ 88.990912, 21.6530901 ], [ 88.9903971, 21.6556428 ], [ 88.9902254, 21.6586742 ], [ 88.9898821, 21.6620245 ], [ 88.990912, 21.6650557 ], [ 88.9921137, 21.6668106 ], [ 88.9943453, 21.6687249 ], [ 88.9957186, 21.6701607 ], [ 88.9969202, 21.6725536 ], [ 88.9962335, 21.6749465 ], [ 88.9952036, 21.6778179 ], [ 88.9940019, 21.6805297 ], [ 88.9940019, 21.6822844 ], [ 88.9945169, 21.6856342 ], [ 88.9945169, 21.6880269 ], [ 88.9940019, 21.689622 ], [ 88.992972, 21.6913765 ], [ 88.992457, 21.6928121 ], [ 88.9922853, 21.6952046 ], [ 88.992457, 21.6971186 ], [ 88.992972, 21.6998301 ], [ 88.9928003, 21.702063 ], [ 88.991427, 21.7041364 ] ] ], [ [ [ 88.864143, 21.7598666 ], [ 88.8653446, 21.7566779 ], [ 88.8643147, 21.7542864 ], [ 88.8634564, 21.7509382 ], [ 88.8607098, 21.7488655 ], [ 88.8583065, 21.7474305 ], [ 88.854015, 21.7440821 ], [ 88.8528134, 21.7421688 ], [ 88.8509251, 21.7405743 ], [ 88.8490368, 21.7365879 ], [ 88.8468052, 21.7333988 ], [ 88.8450886, 21.7287744 ], [ 88.8432003, 21.7246283 ], [ 88.8407971, 21.7176115 ], [ 88.8395954, 21.713784 ], [ 88.8395954, 21.7099564 ], [ 88.8394238, 21.7045338 ], [ 88.8399388, 21.6995895 ], [ 88.8406254, 21.694007 ], [ 88.8406254, 21.6898598 ], [ 88.841827, 21.6855531 ], [ 88.8430287, 21.6791724 ], [ 88.8450886, 21.6739082 ], [ 88.8469769, 21.66992 ], [ 88.8500668, 21.6641769 ], [ 88.8516117, 21.6597098 ], [ 88.854015, 21.656838 ], [ 88.8565899, 21.6507752 ], [ 88.8564182, 21.6498179 ], [ 88.8576199, 21.6483819 ], [ 88.8595081, 21.6437548 ], [ 88.8601948, 21.6410423 ], [ 88.8583065, 21.6380106 ], [ 88.8571049, 21.6370532 ], [ 88.8555599, 21.6356171 ], [ 88.8548733, 21.6340214 ], [ 88.852985, 21.6329044 ], [ 88.8505818, 21.6313087 ], [ 88.8483502, 21.6289151 ], [ 88.8471485, 21.6282768 ], [ 88.8459469, 21.6270002 ], [ 88.8442303, 21.6271598 ], [ 88.843372, 21.6290747 ], [ 88.8437153, 21.6324257 ], [ 88.8440586, 21.6365745 ], [ 88.8449169, 21.6405636 ], [ 88.843887, 21.6432761 ], [ 88.841827, 21.6459886 ], [ 88.8392521, 21.6477437 ], [ 88.8356472, 21.6493393 ], [ 88.832214, 21.6507752 ], [ 88.8313557, 21.651573 ], [ 88.8321282, 21.6541257 ], [ 88.8340164, 21.6570773 ], [ 88.8356472, 21.6590716 ], [ 88.8339306, 21.6581144 ], [ 88.8320423, 21.655083 ], [ 88.8301541, 21.6512539 ], [ 88.8289524, 21.6502966 ], [ 88.8289524, 21.6485415 ], [ 88.8298966, 21.646946 ], [ 88.8314415, 21.6442335 ], [ 88.8318707, 21.6413614 ], [ 88.8323857, 21.6404041 ], [ 88.832214, 21.6426379 ], [ 88.8318707, 21.6447122 ], [ 88.8308407, 21.6467864 ], [ 88.8294674, 21.6490202 ], [ 88.8301541, 21.6499775 ], [ 88.832729, 21.6487011 ], [ 88.8353039, 21.6474246 ], [ 88.8389088, 21.6466268 ], [ 88.8406254, 21.6450313 ], [ 88.842342, 21.6431166 ], [ 88.8430287, 21.6410423 ], [ 88.842857, 21.6380106 ], [ 88.8416554, 21.6343406 ], [ 88.8416554, 21.6309896 ], [ 88.841827, 21.6273194 ], [ 88.8426853, 21.625564 ], [ 88.8456036, 21.6226916 ], [ 88.8445736, 21.6201383 ], [ 88.841312, 21.6207766 ], [ 88.8395954, 21.6226916 ], [ 88.8387371, 21.6231703 ], [ 88.8380505, 21.622532 ], [ 88.8371922, 21.6230107 ], [ 88.8366772, 21.624447 ], [ 88.8358189, 21.6230107 ], [ 88.8337589, 21.6236491 ], [ 88.8325573, 21.624447 ], [ 88.8301541, 21.6249257 ], [ 88.8292957, 21.624447 ], [ 88.8286091, 21.6254044 ], [ 88.8286091, 21.6263619 ], [ 88.8287808, 21.627479 ], [ 88.8272358, 21.6276385 ], [ 88.8255192, 21.6279577 ], [ 88.822086, 21.6281173 ], [ 88.8196827, 21.6295534 ], [ 88.8186527, 21.6306704 ], [ 88.8165928, 21.6300322 ], [ 88.8150479, 21.6311492 ], [ 88.8150479, 21.6321066 ], [ 88.8123013, 21.6343406 ], [ 88.8107563, 21.6376915 ], [ 88.8097263, 21.6397658 ], [ 88.8141895, 21.6459886 ], [ 88.8174511, 21.6509348 ], [ 88.8207127, 21.656838 ], [ 88.8227726, 21.6629006 ], [ 88.8231159, 21.6667294 ], [ 88.8232876, 21.6715153 ], [ 88.8217426, 21.6772582 ], [ 88.8191677, 21.6836389 ], [ 88.8183094, 21.6889028 ], [ 88.8186527, 21.69305 ], [ 88.819511, 21.696559 ], [ 88.820026, 21.699111 ], [ 88.8198544, 21.7030983 ], [ 88.8181378, 21.7067666 ], [ 88.8162495, 21.7091589 ], [ 88.8128163, 21.7121891 ], [ 88.8102413, 21.7139434 ], [ 88.8064648, 21.7152193 ], [ 88.8085247, 21.7163356 ], [ 88.8112713, 21.7172925 ], [ 88.8135029, 21.7195252 ], [ 88.8129879, 21.7203225 ], [ 88.8117863, 21.7187278 ], [ 88.8092114, 21.7176115 ], [ 88.8064648, 21.7166546 ], [ 88.8037182, 21.7163356 ], [ 88.800285, 21.7156977 ], [ 88.7961651, 21.7150598 ], [ 88.7930752, 21.7141029 ], [ 88.7899853, 21.7125081 ], [ 88.787067, 21.7113917 ], [ 88.7841488, 21.7099564 ], [ 88.7815739, 21.7083615 ], [ 88.7798573, 21.7069261 ], [ 88.7777973, 21.7048528 ], [ 88.7752224, 21.7030983 ], [ 88.7729908, 21.7013439 ], [ 88.7700726, 21.7003869 ], [ 88.7689379, 21.6999257 ], [ 88.767326, 21.6992705 ], [ 88.7652661, 21.6992705 ], [ 88.7640644, 21.699749 ], [ 88.7633778, 21.7005464 ], [ 88.7632061, 21.7019819 ], [ 88.7637211, 21.7042148 ], [ 88.7647511, 21.7051717 ], [ 88.7656094, 21.7053312 ], [ 88.7731625, 21.708521 ], [ 88.7781407, 21.7107538 ], [ 88.7802006, 21.7128271 ], [ 88.7822605, 21.7153788 ], [ 88.7838055, 21.7187278 ], [ 88.7839771, 21.7225551 ], [ 88.7838055, 21.7249472 ], [ 88.7826039, 21.7274987 ], [ 88.7807156, 21.7305285 ], [ 88.7834622, 21.7322826 ], [ 88.7879254, 21.7335582 ], [ 88.7911869, 21.7338772 ], [ 88.7927319, 21.7348339 ], [ 88.7937618, 21.7369068 ], [ 88.7932469, 21.7381825 ], [ 88.7910153, 21.7389797 ], [ 88.7882687, 21.7396175 ], [ 88.7868954, 21.7404148 ], [ 88.787582, 21.7420093 ], [ 88.7892986, 21.7432849 ], [ 88.7908436, 21.7455172 ], [ 88.7913586, 21.7471116 ], [ 88.7918736, 21.7483872 ], [ 88.7932469, 21.7483872 ], [ 88.7942768, 21.7477494 ], [ 88.7973667, 21.7474305 ], [ 88.8011433, 21.7474305 ], [ 88.8040615, 21.7474305 ], [ 88.8076664, 21.7480683 ], [ 88.8105847, 21.7488655 ], [ 88.8126446, 21.7499816 ], [ 88.8162495, 21.7518948 ], [ 88.8198544, 21.7554025 ], [ 88.8236309, 21.7592288 ], [ 88.8268925, 21.762258 ], [ 88.8294674, 21.7643305 ], [ 88.8315273, 21.7651276 ], [ 88.8353039, 21.7646494 ], [ 88.8406254, 21.7636928 ], [ 88.8447453, 21.7632145 ], [ 88.85247, 21.7619391 ], [ 88.8560749, 21.7613014 ], [ 88.8598515, 21.7608231 ], [ 88.8625981, 21.7603448 ], [ 88.864143, 21.7598666 ] ] ], [ [ [ 88.57107, 21.73226 ], [ 88.57159, 21.72998 ], [ 88.57356, 21.72449 ], [ 88.57566, 21.72055 ], [ 88.57774, 21.71783 ], [ 88.58019, 21.71542 ], [ 88.58534, 21.7119 ], [ 88.5878863, 21.7078554 ], [ 88.5871996, 21.7033897 ], [ 88.586513, 21.7013163 ], [ 88.586513, 21.6997213 ], [ 88.586513, 21.6978073 ], [ 88.5877146, 21.6957338 ], [ 88.5890879, 21.6939793 ], [ 88.5904612, 21.6919058 ], [ 88.5906329, 21.6906297 ], [ 88.5904612, 21.6893537 ], [ 88.5887446, 21.6887156 ], [ 88.5868563, 21.6883966 ], [ 88.5842814, 21.6874396 ], [ 88.5822215, 21.6861635 ], [ 88.5805048, 21.6850469 ], [ 88.5799899, 21.6868015 ], [ 88.5793032, 21.6890346 ], [ 88.5787882, 21.6911082 ], [ 88.5777583, 21.6933413 ], [ 88.576385, 21.6944578 ], [ 88.5750117, 21.6955743 ], [ 88.5732951, 21.6971693 ], [ 88.5715785, 21.6989238 ], [ 88.5707201, 21.7006783 ], [ 88.5703768, 21.7025922 ], [ 88.5707201, 21.7068985 ], [ 88.5707201, 21.7084933 ], [ 88.5700335, 21.7104072 ], [ 88.5681452, 21.7110451 ], [ 88.565227, 21.711683 ], [ 88.5626521, 21.712002 ], [ 88.5609354, 21.7127994 ], [ 88.5597338, 21.7137563 ], [ 88.5593905, 21.7158296 ], [ 88.5588755, 21.7177433 ], [ 88.5576739, 21.7188596 ], [ 88.5563006, 21.7204544 ], [ 88.5552706, 21.7220491 ], [ 88.5538973, 21.7233249 ], [ 88.5513224, 21.7239627 ], [ 88.5477175, 21.7244411 ], [ 88.5458292, 21.7244411 ], [ 88.543426, 21.7242817 ], [ 88.5446276, 21.7234843 ], [ 88.5472025, 21.7233249 ], [ 88.5508074, 21.7230059 ], [ 88.5533823, 21.7225275 ], [ 88.5547556, 21.7202949 ], [ 88.5559573, 21.7188596 ], [ 88.5581889, 21.7167864 ], [ 88.5583605, 21.7145537 ], [ 88.5585322, 21.7131184 ], [ 88.5599055, 21.711683 ], [ 88.5614504, 21.7110451 ], [ 88.5638537, 21.7104072 ], [ 88.5676302, 21.7102477 ], [ 88.5691752, 21.7091313 ], [ 88.5693469, 21.70642 ], [ 88.5691752, 21.7035492 ], [ 88.5693469, 21.7014758 ], [ 88.5698618, 21.6995618 ], [ 88.5708918, 21.6979668 ], [ 88.5719218, 21.6963718 ], [ 88.5736384, 21.6952553 ], [ 88.5750117, 21.6938198 ], [ 88.5678019, 21.6933413 ], [ 88.5678019, 21.6944578 ], [ 88.56757, 21.69808 ], [ 88.5676, 21.69983 ], [ 88.56752, 21.70059 ], [ 88.56729, 21.70155 ], [ 88.56699, 21.7024 ], [ 88.56623, 21.70387 ], [ 88.56516, 21.70501 ], [ 88.56402, 21.70587 ], [ 88.56224, 21.70659 ], [ 88.56049, 21.70694 ], [ 88.55888, 21.70676 ], [ 88.5578, 21.70648 ], [ 88.55673, 21.7058 ], [ 88.55289, 21.70254 ], [ 88.55045, 21.70076 ], [ 88.54914, 21.70005 ], [ 88.54749, 21.69942 ], [ 88.54602, 21.69904 ], [ 88.54467, 21.69896 ], [ 88.54358, 21.69902 ], [ 88.54236, 21.69933 ], [ 88.5413, 21.69981 ], [ 88.54061, 21.70027 ], [ 88.53967, 21.70111 ], [ 88.53877, 21.70224 ], [ 88.53652, 21.70593 ], [ 88.53482, 21.70807 ], [ 88.5304, 21.71313 ], [ 88.5272898, 21.7161485 ], [ 88.5286631, 21.7182217 ], [ 88.5300364, 21.7198165 ], [ 88.531753, 21.7230059 ], [ 88.5331263, 21.7263548 ], [ 88.5341563, 21.7290657 ], [ 88.5355296, 21.7314576 ], [ 88.5367312, 21.7332117 ], [ 88.5386195, 21.7344873 ], [ 88.5403361, 21.7351252 ], [ 88.5425677, 21.7356035 ], [ 88.5454859, 21.735763 ], [ 88.5485758, 21.735763 ], [ 88.5516657, 21.7354441 ], [ 88.5547556, 21.7346468 ], [ 88.5566439, 21.7332117 ], [ 88.5576739, 21.7325738 ], [ 88.5578455, 21.7311387 ], [ 88.5585322, 21.729863 ], [ 88.5600771, 21.7292251 ], [ 88.5623087, 21.729863 ], [ 88.5645403, 21.7309792 ], [ 88.5666003, 21.7317765 ], [ 88.5695185, 21.731936 ], [ 88.57107, 21.73226 ] ] ], [ [ [ 88.3689203, 21.7581287 ], [ 88.3683692, 21.7581333 ], [ 88.3675376, 21.7576252 ], [ 88.3669816, 21.7571151 ], [ 88.3664293, 21.7569913 ], [ 88.3664244, 21.7564765 ], [ 88.3658733, 21.756481 ], [ 88.3657253, 21.7554525 ], [ 88.3654448, 21.7549399 ], [ 88.364867, 21.7521129 ], [ 88.364448, 21.7514724 ], [ 88.3638944, 21.7512195 ], [ 88.3625045, 21.7499437 ], [ 88.3616767, 21.7498222 ], [ 88.3609687, 21.7488706 ], [ 88.3606949, 21.7480282 ], [ 88.360139, 21.7475179 ], [ 88.3599895, 21.746232 ], [ 88.3594384, 21.7462365 ], [ 88.3595733, 21.7459779 ], [ 88.3595563, 21.744176 ], [ 88.3598173, 21.7426292 ], [ 88.3603611, 21.7418524 ], [ 88.3606319, 21.7413353 ], [ 88.36061, 21.7390186 ], [ 88.3600445, 21.7374786 ], [ 88.3597302, 21.733362 ], [ 88.3602764, 21.7328426 ], [ 88.3606805, 21.7318095 ], [ 88.3626017, 21.7310214 ], [ 88.362597, 21.7305066 ], [ 88.3636966, 21.7302401 ], [ 88.3638168, 21.728437 ], [ 88.3635389, 21.7281819 ], [ 88.3635195, 21.7261225 ], [ 88.363778, 21.7243183 ], [ 88.3640462, 21.7235438 ], [ 88.3643191, 21.7232841 ], [ 88.3648581, 21.7219925 ], [ 88.3656773, 21.7212135 ], [ 88.3658107, 21.7206975 ], [ 88.3671819, 21.720042 ], [ 88.3677281, 21.7195227 ], [ 88.3688253, 21.7189988 ], [ 88.3693713, 21.7184794 ], [ 88.3710194, 21.7179507 ], [ 88.3787256, 21.7171146 ], [ 88.3806565, 21.717356 ], [ 88.3823142, 21.717857 ], [ 88.3831407, 21.71785 ], [ 88.3850715, 21.7180914 ], [ 88.3859005, 21.718342 ], [ 88.3881044, 21.7183235 ], [ 88.3919549, 21.717648 ], [ 88.392001, 21.7174684 ], [ 88.3920872, 21.717132 ], [ 88.3923603, 21.7168723 ], [ 88.3924935, 21.7163563 ], [ 88.3930407, 21.7159651 ], [ 88.3935905, 21.7158322 ], [ 88.3937253, 21.7155735 ], [ 88.3939783, 21.7132545 ], [ 88.3928517, 21.7106896 ], [ 88.3922958, 21.7101794 ], [ 88.3908887, 21.707102 ], [ 88.3906201, 21.7067567 ], [ 88.3901919, 21.7062063 ], [ 88.3896385, 21.7059536 ], [ 88.387971, 21.7044229 ], [ 88.3870003, 21.7037878 ], [ 88.3864419, 21.7030201 ], [ 88.3860231, 21.7023796 ], [ 88.3854697, 21.7021269 ], [ 88.3835244, 21.700341 ], [ 88.3815888, 21.6995849 ], [ 88.3813108, 21.6993297 ], [ 88.3785467, 21.6983229 ], [ 88.3779908, 21.6978126 ], [ 88.3763333, 21.6973116 ], [ 88.375224, 21.6965484 ], [ 88.3743966, 21.696427 ], [ 88.3742535, 21.6959133 ], [ 88.3731418, 21.6948927 ], [ 88.3729997, 21.694379 ], [ 88.3724476, 21.6942545 ], [ 88.371892, 21.6937442 ], [ 88.3683112, 21.6937739 ], [ 88.3663794, 21.693404 ], [ 88.3659538, 21.6921203 ], [ 88.3659375, 21.6903976 ], [ 88.3656361, 21.6886529 ], [ 88.3650294, 21.688056 ], [ 88.3646852, 21.6879072 ], [ 88.359828, 21.6875006 ], [ 88.3596558, 21.687514 ], [ 88.3587109, 21.6879698 ], [ 88.3583519, 21.688143 ], [ 88.3573232, 21.6887317 ], [ 88.3568206, 21.6893243 ], [ 88.3561315, 21.6898801 ], [ 88.3542852, 21.6907257 ], [ 88.3535594, 21.6910651 ], [ 88.3524266, 21.6913257 ], [ 88.3520569, 21.6916361 ], [ 88.3515352, 21.6921613 ], [ 88.3510686, 21.6922618 ], [ 88.3508022, 21.6924097 ], [ 88.3504324, 21.6927408 ], [ 88.3497124, 21.693283 ], [ 88.3497172, 21.6937979 ], [ 88.3494465, 21.694315 ], [ 88.3486274, 21.695094 ], [ 88.3475423, 21.6969048 ], [ 88.3472742, 21.6976794 ], [ 88.3467279, 21.6981987 ], [ 88.3467304, 21.6984562 ], [ 88.3470082, 21.6987113 ], [ 88.3470131, 21.6992261 ], [ 88.3461963, 21.7002626 ], [ 88.3453866, 21.7020713 ], [ 88.3451135, 21.7023308 ], [ 88.3445938, 21.7056818 ], [ 88.3437769, 21.7067183 ], [ 88.3435063, 21.7072354 ], [ 88.3432451, 21.7087822 ], [ 88.3424329, 21.7103335 ], [ 88.3418869, 21.7108527 ], [ 88.3410748, 21.712404 ], [ 88.3405286, 21.7129232 ], [ 88.3406786, 21.7142093 ], [ 88.3401277, 21.7142136 ], [ 88.3401301, 21.7144711 ], [ 88.3412403, 21.7153628 ], [ 88.3426202, 21.715609 ], [ 88.3431759, 21.7161193 ], [ 88.3437281, 21.7162441 ], [ 88.3440558, 21.7166544 ], [ 88.3443911, 21.7174087 ], [ 88.3455973, 21.7183376 ], [ 88.3474754, 21.7193029 ], [ 88.3480336, 21.7200708 ], [ 88.3488912, 21.7234104 ], [ 88.3491715, 21.7239231 ], [ 88.3491836, 21.7252102 ], [ 88.3487829, 21.7265007 ], [ 88.3482318, 21.7265051 ], [ 88.3481105, 21.7283081 ], [ 88.3478468, 21.7295975 ], [ 88.3473078, 21.7308891 ], [ 88.3470468, 21.7324359 ], [ 88.3467737, 21.7326956 ], [ 88.3467809, 21.7334678 ], [ 88.345432, 21.7365682 ], [ 88.3451972, 21.7409466 ], [ 88.3443993, 21.7440424 ], [ 88.3444329, 21.7476462 ], [ 88.3447132, 21.7481588 ], [ 88.3461677, 21.7563852 ], [ 88.3475673, 21.7586906 ], [ 88.3477126, 21.7594618 ], [ 88.3510328, 21.7608502 ], [ 88.3532422, 21.761347 ], [ 88.3562734, 21.7613223 ], [ 88.3595875, 21.7620673 ], [ 88.3604191, 21.7625753 ], [ 88.362909, 21.7635846 ], [ 88.363187, 21.7638398 ], [ 88.3708993, 21.7633903 ], [ 88.3708823, 21.7615884 ], [ 88.3706068, 21.7615907 ], [ 88.3705994, 21.7608184 ], [ 88.370875, 21.7608161 ], [ 88.3698905, 21.7587647 ], [ 88.3689203, 21.7581287 ] ] ], [ [ [ 88.922496, 21.7607837 ], [ 88.9233543, 21.7618997 ], [ 88.9247276, 21.7620591 ], [ 88.9283325, 21.7615808 ], [ 88.9324524, 21.761262 ], [ 88.9357139, 21.7604648 ], [ 88.9422371, 21.7585517 ], [ 88.9482452, 21.756479 ], [ 88.9518501, 21.7548847 ], [ 88.95494, 21.7537686 ], [ 88.9580299, 21.7532903 ], [ 88.9626648, 21.7526526 ], [ 88.9652397, 21.7510582 ], [ 88.965068, 21.7494638 ], [ 88.9647247, 21.7442021 ], [ 88.9652397, 21.7419698 ], [ 88.9662697, 21.7403753 ], [ 88.9683296, 21.7390997 ], [ 88.9703895, 21.7384619 ], [ 88.9731361, 21.7389403 ], [ 88.9755394, 21.7400564 ], [ 88.9781143, 21.7419698 ], [ 88.9832641, 21.7453182 ], [ 88.9851524, 21.745956 ], [ 88.9866974, 21.7451588 ], [ 88.9877273, 21.7437238 ], [ 88.9880707, 21.7422887 ], [ 88.987384, 21.7406942 ], [ 88.9846374, 21.7384619 ], [ 88.9800026, 21.7349539 ], [ 88.9774277, 21.7339971 ], [ 88.976226, 21.7327215 ], [ 88.9765694, 21.7319242 ], [ 88.975711, 21.730489 ], [ 88.9727928, 21.7268213 ], [ 88.9702179, 21.7234725 ], [ 88.9690163, 21.7210804 ], [ 88.9693596, 21.7196452 ], [ 88.9707329, 21.7169341 ], [ 88.9717628, 21.7158177 ], [ 88.9734794, 21.7140635 ], [ 88.9751961, 21.7127876 ], [ 88.9805176, 21.7095979 ], [ 88.9822342, 21.708322 ], [ 88.9832641, 21.7070461 ], [ 88.9839508, 21.7057702 ], [ 88.9800026, 21.7040158 ], [ 88.977256, 21.7024209 ], [ 88.9760544, 21.7011449 ], [ 88.9743378, 21.6990715 ], [ 88.9729645, 21.6984335 ], [ 88.9712479, 21.6993905 ], [ 88.967643, 21.7013044 ], [ 88.9648964, 21.7014639 ], [ 88.9626648, 21.7013044 ], [ 88.9604332, 21.7013044 ], [ 88.9566566, 21.7021019 ], [ 88.9532234, 21.7022614 ], [ 88.9499618, 21.7024209 ], [ 88.9484169, 21.7038563 ], [ 88.945842, 21.7064082 ], [ 88.9405205, 21.7097574 ], [ 88.9367439, 21.7123092 ], [ 88.9353706, 21.7134255 ], [ 88.9339973, 21.713585 ], [ 88.9312508, 21.7156582 ], [ 88.9261009, 21.7183694 ], [ 88.9236977, 21.7193262 ], [ 88.923011, 21.7207615 ], [ 88.9254143, 21.7242698 ], [ 88.9274742, 21.7272997 ], [ 88.9295341, 21.7312863 ], [ 88.9314224, 21.7360701 ], [ 88.9314224, 21.7386214 ], [ 88.9302208, 21.7448399 ], [ 88.9278175, 21.7520148 ], [ 88.9278175, 21.7536092 ], [ 88.9271309, 21.755363 ], [ 88.9261009, 21.7572762 ], [ 88.9247276, 21.7580734 ], [ 88.924041, 21.7590299 ], [ 88.922496, 21.7607837 ] ] ], [ [ [ 88.5074307, 21.5607606 ], [ 88.5050274, 21.5612396 ], [ 88.5045124, 21.5628361 ], [ 88.5036541, 21.5658693 ], [ 88.5033108, 21.5676254 ], [ 88.5027958, 21.5687429 ], [ 88.5017658, 21.5693815 ], [ 88.5009075, 21.5690622 ], [ 88.5019375, 21.568264 ], [ 88.5027958, 21.5671465 ], [ 88.5031391, 21.5650711 ], [ 88.5031391, 21.5625168 ], [ 88.5036541, 21.5607606 ], [ 88.5021092, 21.5604413 ], [ 88.5003925, 21.5598027 ], [ 88.5012509, 21.5591641 ], [ 88.5026241, 21.5594834 ], [ 88.5043408, 21.5602817 ], [ 88.5055424, 21.560122 ], [ 88.5091473, 21.5598027 ], [ 88.5096623, 21.5586852 ], [ 88.5101772, 21.5570886 ], [ 88.5094906, 21.5550131 ], [ 88.5081173, 21.5532569 ], [ 88.506744, 21.55182 ], [ 88.5058857, 21.5500637 ], [ 88.5045124, 21.5467108 ], [ 88.50337, 21.54441 ], [ 88.50068, 21.54457 ], [ 88.49837, 21.54543 ], [ 88.4957, 21.54742 ], [ 88.49094, 21.54971 ], [ 88.48681, 21.55205 ], [ 88.48286, 21.55438 ], [ 88.48218, 21.55593 ], [ 88.4814, 21.56595 ], [ 88.48347, 21.57111 ], [ 88.48433, 21.57576 ], [ 88.48535, 21.58002 ], [ 88.48483, 21.58213 ], [ 88.48468, 21.58617 ], [ 88.48654, 21.58809 ], [ 88.48909, 21.59147 ], [ 88.49385, 21.5979 ], [ 88.49444, 21.59833 ], [ 88.49485, 21.5986 ], [ 88.49666, 21.59999 ], [ 88.49906, 21.59775 ], [ 88.50291, 21.59365 ], [ 88.50565, 21.59231 ], [ 88.50895, 21.59148 ], [ 88.51092, 21.59067 ], [ 88.51371, 21.5885 ], [ 88.51786, 21.58665 ], [ 88.52203, 21.5853 ], [ 88.52625, 21.58423 ], [ 88.52948, 21.58301 ], [ 88.53339, 21.57758 ], [ 88.53445, 21.57372 ], [ 88.53715, 21.56879 ], [ 88.53868, 21.56575 ], [ 88.53901, 21.564 ], [ 88.53897, 21.56212 ], [ 88.53828, 21.56079 ], [ 88.53578, 21.55827 ], [ 88.53348, 21.55653 ], [ 88.53268, 21.55539 ], [ 88.53199, 21.55289 ], [ 88.53054, 21.55048 ], [ 88.5302, 21.54869 ], [ 88.5315, 21.54474 ], [ 88.53173, 21.54322 ], [ 88.52871, 21.54253 ], [ 88.51774, 21.54115 ], [ 88.51346, 21.54075 ], [ 88.5085, 21.5411 ], [ 88.5070873, 21.5431981 ], [ 88.5065724, 21.5459124 ], [ 88.5065724, 21.5486267 ], [ 88.5081173, 21.5516603 ], [ 88.5103489, 21.5537359 ], [ 88.5112072, 21.5558114 ], [ 88.5118939, 21.5578869 ], [ 88.5108639, 21.5594834 ], [ 88.5103489, 21.5604413 ], [ 88.5118939, 21.5623571 ], [ 88.5124088, 21.5639536 ], [ 88.5115505, 21.5634747 ], [ 88.5106922, 21.5621975 ], [ 88.5094906, 21.5612396 ], [ 88.508289, 21.5607606 ], [ 88.5074307, 21.5607606 ] ] ], [ [ [ 88.18532, 21.56501 ], [ 88.18403, 21.56541 ], [ 88.18286, 21.5657 ], [ 88.18154, 21.56627 ], [ 88.18071, 21.56671 ], [ 88.18051, 21.56694 ], [ 88.1799, 21.56733 ], [ 88.17886, 21.56806 ], [ 88.17883, 21.56826 ], [ 88.17899, 21.56856 ], [ 88.17898, 21.56877 ], [ 88.17863, 21.56926 ], [ 88.17823, 21.56917 ], [ 88.17722, 21.5691 ], [ 88.17706, 21.5692 ], [ 88.17675, 21.56973 ], [ 88.1761, 21.57067 ], [ 88.1755, 21.57129 ], [ 88.1751, 21.57158 ], [ 88.17447, 21.57187 ], [ 88.17385, 21.57247 ], [ 88.17347, 21.57291 ], [ 88.17328, 21.57341 ], [ 88.17315, 21.574 ], [ 88.17317, 21.5746 ], [ 88.17292, 21.57595 ], [ 88.17285, 21.57721 ], [ 88.17272, 21.57784 ], [ 88.17242, 21.57845 ], [ 88.17208, 21.57899 ], [ 88.17193, 21.57936 ], [ 88.17185, 21.57996 ], [ 88.17186, 21.5805 ], [ 88.17203, 21.58055 ], [ 88.17237, 21.58073 ], [ 88.17248, 21.58134 ], [ 88.17249, 21.5816 ], [ 88.17214, 21.58171 ], [ 88.17169, 21.58314 ], [ 88.17145, 21.5842 ], [ 88.17076, 21.58587 ], [ 88.17056, 21.58677 ], [ 88.17025, 21.5885 ], [ 88.16966, 21.59022 ], [ 88.16888, 21.59218 ], [ 88.16881, 21.59296 ], [ 88.16905, 21.59355 ], [ 88.17035, 21.59602 ], [ 88.1717, 21.59812 ], [ 88.17309, 21.59934 ], [ 88.17376, 21.59967 ], [ 88.17857, 21.59949 ], [ 88.18042, 21.59914 ], [ 88.18059, 21.59868 ], [ 88.18113, 21.59833 ], [ 88.1819, 21.59848 ], [ 88.18218, 21.59825 ], [ 88.18455, 21.59459 ], [ 88.18471, 21.59426 ], [ 88.18511, 21.59354 ], [ 88.18552, 21.59303 ], [ 88.18582, 21.59279 ], [ 88.18585, 21.59242 ], [ 88.18453, 21.59162 ], [ 88.18316, 21.59051 ], [ 88.18235, 21.58948 ], [ 88.1819, 21.58876 ], [ 88.18194, 21.58855 ], [ 88.18246, 21.58837 ], [ 88.18374, 21.58855 ], [ 88.18435, 21.58873 ], [ 88.185, 21.58886 ], [ 88.1855, 21.58858 ], [ 88.18641, 21.58774 ], [ 88.18678, 21.58707 ], [ 88.187, 21.58644 ], [ 88.18721, 21.58557 ], [ 88.18704, 21.58388 ], [ 88.18706, 21.58312 ], [ 88.18721, 21.58263 ], [ 88.18722, 21.58219 ], [ 88.18701, 21.58034 ], [ 88.18706, 21.57981 ], [ 88.18647, 21.57731 ], [ 88.18633, 21.57642 ], [ 88.18627, 21.57569 ], [ 88.18605, 21.57397 ], [ 88.18594, 21.57283 ], [ 88.18578, 21.57249 ], [ 88.18578, 21.57156 ], [ 88.1861, 21.5708 ], [ 88.18635, 21.57008 ], [ 88.18633, 21.56944 ], [ 88.18619, 21.56867 ], [ 88.1861, 21.56697 ], [ 88.18614, 21.5666 ], [ 88.18655, 21.56653 ], [ 88.18694, 21.56675 ], [ 88.18727, 21.56703 ], [ 88.18944, 21.56915 ], [ 88.19137, 21.5708 ], [ 88.19225, 21.57123 ], [ 88.19274, 21.57121 ], [ 88.19348, 21.57077 ], [ 88.19375, 21.57045 ], [ 88.1932, 21.56972 ], [ 88.19192, 21.56842 ], [ 88.19029, 21.56744 ], [ 88.18816, 21.56634 ], [ 88.187, 21.56592 ], [ 88.18657, 21.56583 ], [ 88.18609, 21.56553 ], [ 88.18585, 21.56518 ], [ 88.18568, 21.56502 ], [ 88.18532, 21.56501 ] ] ], [ [ [ 88.5385428, 21.6097324 ], [ 88.5371695, 21.6097324 ], [ 88.5361395, 21.6087748 ], [ 88.5371695, 21.6089344 ], [ 88.5387144, 21.6084556 ], [ 88.5392294, 21.607498 ], [ 88.5392294, 21.6060616 ], [ 88.5381995, 21.6049444 ], [ 88.5368262, 21.6039868 ], [ 88.5354529, 21.6023908 ], [ 88.5337363, 21.6009543 ], [ 88.531333, 21.5990391 ], [ 88.5291014, 21.5977622 ], [ 88.5261832, 21.5966449 ], [ 88.5241232, 21.5961661 ], [ 88.52229, 21.5955 ], [ 88.51449, 21.5977 ], [ 88.513, 21.59827 ], [ 88.51148, 21.59957 ], [ 88.51054, 21.60131 ], [ 88.51037, 21.60218 ], [ 88.51093, 21.603 ], [ 88.51129, 21.60454 ], [ 88.51182, 21.60528 ], [ 88.51224, 21.60629 ], [ 88.51213, 21.60781 ], [ 88.51198, 21.60906 ], [ 88.51258, 21.6102 ], [ 88.51317, 21.61054 ], [ 88.51466, 21.61054 ], [ 88.51572, 21.61159 ], [ 88.51563, 21.61278 ], [ 88.51641, 21.61483 ], [ 88.51685, 21.61627 ], [ 88.51819, 21.61706 ], [ 88.51817, 21.61787 ], [ 88.51851, 21.61899 ], [ 88.52027, 21.62167 ], [ 88.5237799, 21.623457 ], [ 88.5241232, 21.6268081 ], [ 88.5230933, 21.6285635 ], [ 88.5220633, 21.6295209 ], [ 88.522235, 21.6309571 ], [ 88.52156, 21.63224 ], [ 88.5218, 21.63307 ], [ 88.52148, 21.63388 ], [ 88.52123, 21.63513 ], [ 88.52156, 21.63624 ], [ 88.52209, 21.63686 ], [ 88.52268, 21.63724 ], [ 88.52275, 21.63828 ], [ 88.52255, 21.63914 ], [ 88.52209, 21.63934 ], [ 88.52169, 21.64042 ], [ 88.52104, 21.64254 ], [ 88.52095, 21.64344 ], [ 88.52138, 21.64497 ], [ 88.52249, 21.64697 ], [ 88.52258, 21.64803 ], [ 88.52357, 21.64929 ], [ 88.52366, 21.64984 ], [ 88.52348, 21.65022 ], [ 88.52335, 21.65074 ], [ 88.52376, 21.65166 ], [ 88.52437, 21.65221 ], [ 88.52472, 21.65258 ], [ 88.52606, 21.65115 ], [ 88.52759, 21.6488 ], [ 88.52881, 21.64718 ], [ 88.53068, 21.64486 ], [ 88.53242, 21.64281 ], [ 88.53425, 21.64083 ], [ 88.53612, 21.63913 ], [ 88.53846, 21.63715 ], [ 88.54029, 21.63586 ], [ 88.54311, 21.63429 ], [ 88.54584, 21.63316 ], [ 88.54695, 21.63266 ], [ 88.54864, 21.63241 ], [ 88.5509, 21.63222 ], [ 88.5533, 21.63217 ], [ 88.55592, 21.63167 ], [ 88.558, 21.63121 ], [ 88.55924, 21.63042 ], [ 88.56469, 21.62715 ], [ 88.57025, 21.62315 ], [ 88.57448, 21.62029 ], [ 88.57808, 21.61639 ], [ 88.5836, 21.61252 ], [ 88.588, 21.61165 ], [ 88.59038, 21.61 ], [ 88.5922, 21.60732 ], [ 88.5921, 21.60241 ], [ 88.591, 21.59988 ], [ 88.58508, 21.58752 ], [ 88.58154, 21.58096 ], [ 88.57621, 21.5756 ], [ 88.57252, 21.57274 ], [ 88.57173, 21.57215 ], [ 88.57111, 21.57182 ], [ 88.56665, 21.56995 ], [ 88.5607, 21.57003 ], [ 88.55581, 21.56846 ], [ 88.5513, 21.56557 ], [ 88.54965, 21.56366 ], [ 88.54466, 21.56763 ], [ 88.54398, 21.57021 ], [ 88.54278, 21.5768 ], [ 88.5407, 21.58125 ], [ 88.53822, 21.58521 ], [ 88.5378561, 21.5867487 ], [ 88.5390578, 21.5875468 ], [ 88.5406027, 21.5878661 ], [ 88.5421477, 21.5881853 ], [ 88.5442076, 21.5894623 ], [ 88.5454092, 21.59042 ], [ 88.5471259, 21.5923354 ], [ 88.5495291, 21.5940911 ], [ 88.5519324, 21.5956873 ], [ 88.5533057, 21.5968045 ], [ 88.5551939, 21.5977622 ], [ 88.5567389, 21.5984006 ], [ 88.5579405, 21.5999967 ], [ 88.5582838, 21.6014332 ], [ 88.5579405, 21.6031888 ], [ 88.5594855, 21.6046252 ], [ 88.5613737, 21.6055828 ], [ 88.5629187, 21.6057424 ], [ 88.5651503, 21.6054232 ], [ 88.5665236, 21.605104 ], [ 88.5685835, 21.6047848 ], [ 88.5665236, 21.605902 ], [ 88.5644637, 21.6063808 ], [ 88.5630904, 21.6065404 ], [ 88.5615454, 21.6063808 ], [ 88.5600005, 21.6055828 ], [ 88.5584555, 21.6046252 ], [ 88.5572539, 21.603508 ], [ 88.5567389, 21.6052636 ], [ 88.5560522, 21.6070192 ], [ 88.5560522, 21.6089344 ], [ 88.5560522, 21.6103708 ], [ 88.5565672, 21.6121263 ], [ 88.5569105, 21.6132434 ], [ 88.5555373, 21.6145202 ], [ 88.5557089, 21.6122859 ], [ 88.5551939, 21.6111687 ], [ 88.554679, 21.6097324 ], [ 88.5545073, 21.6086152 ], [ 88.5545073, 21.6070192 ], [ 88.5551939, 21.6052636 ], [ 88.5558806, 21.604306 ], [ 88.5563956, 21.6023908 ], [ 88.5563956, 21.6009543 ], [ 88.5557089, 21.5993583 ], [ 88.5545073, 21.5990391 ], [ 88.553134, 21.5984006 ], [ 88.5519324, 21.5972834 ], [ 88.5503874, 21.5964853 ], [ 88.5493574, 21.5955276 ], [ 88.5476408, 21.5940911 ], [ 88.5466109, 21.5928142 ], [ 88.5445509, 21.5918565 ], [ 88.5440359, 21.59042 ], [ 88.5428343, 21.5897815 ], [ 88.5411177, 21.5889834 ], [ 88.5395728, 21.5888238 ], [ 88.5378561, 21.5886642 ], [ 88.53643, 21.58798 ], [ 88.53475, 21.58952 ], [ 88.53077, 21.59154 ], [ 88.5273848, 21.5937719 ], [ 88.5254965, 21.5947296 ], [ 88.5270415, 21.5963257 ], [ 88.5285864, 21.5968045 ], [ 88.5301314, 21.5972834 ], [ 88.531333, 21.598241 ], [ 88.5327063, 21.5996775 ], [ 88.5359679, 21.601912 ], [ 88.5371695, 21.603508 ], [ 88.5387144, 21.604306 ], [ 88.5399161, 21.605902 ], [ 88.5399161, 21.6084556 ], [ 88.5385428, 21.6097324 ] ] ], [ [ [ 88.2853527, 21.5800019 ], [ 88.2857569, 21.578969 ], [ 88.2863073, 21.5789649 ], [ 88.2872564, 21.5774128 ], [ 88.2872451, 21.5761255 ], [ 88.2865473, 21.5749721 ], [ 88.2840703, 21.5749911 ], [ 88.2835222, 21.5752527 ], [ 88.2829716, 21.5752571 ], [ 88.282693, 21.5748734 ], [ 88.2868123, 21.573812 ], [ 88.2877843, 21.5748341 ], [ 88.2886373, 21.5779171 ], [ 88.2900385, 21.5807381 ], [ 88.2908711, 21.5815039 ], [ 88.2910136, 21.5820178 ], [ 88.2918427, 21.5823971 ], [ 88.2956927, 21.5819815 ], [ 88.2966395, 21.580172 ], [ 88.2968873, 21.5770805 ], [ 88.2963207, 21.5752828 ], [ 88.2956229, 21.5741293 ], [ 88.2947949, 21.5738783 ], [ 88.2892916, 21.5740501 ], [ 88.2891489, 21.5735364 ], [ 88.2887333, 21.5731529 ], [ 88.2874885, 21.5725194 ], [ 88.2860898, 21.5699556 ], [ 88.285674, 21.5695723 ], [ 88.2848439, 21.5690637 ], [ 88.2807178, 21.5693531 ], [ 88.2793462, 21.5698785 ], [ 88.2790733, 21.570138 ], [ 88.2785241, 21.5702714 ], [ 88.2783905, 21.5707874 ], [ 88.2778446, 21.5713064 ], [ 88.2771648, 21.5722123 ], [ 88.2766167, 21.5724739 ], [ 88.276209, 21.5731212 ], [ 88.2756653, 21.5738976 ], [ 88.2756834, 21.5759571 ], [ 88.2754103, 21.5762166 ], [ 88.2752778, 21.5767326 ], [ 88.2740297, 21.5757124 ], [ 88.2740253, 21.5751975 ], [ 88.2752372, 21.5720987 ], [ 88.2757877, 21.5720945 ], [ 88.2764662, 21.5710596 ], [ 88.2764549, 21.5697723 ], [ 88.2750586, 21.5674659 ], [ 88.2745037, 21.5669552 ], [ 88.2740856, 21.5663145 ], [ 88.2724277, 21.5655548 ], [ 88.2711786, 21.5644062 ], [ 88.271037, 21.5638923 ], [ 88.2699352, 21.5637715 ], [ 88.2688276, 21.5630076 ], [ 88.2681357, 21.5626271 ], [ 88.2681268, 21.5615975 ], [ 88.2683975, 21.5610806 ], [ 88.2683952, 21.5608231 ], [ 88.2678403, 21.5603125 ], [ 88.2676944, 21.5592837 ], [ 88.2685233, 21.5596631 ], [ 88.2721009, 21.5596358 ], [ 88.2729287, 21.559887 ], [ 88.2788904, 21.5600581 ], [ 88.2789864, 21.5602272 ], [ 88.2795379, 21.5603512 ], [ 88.2803702, 21.5611172 ], [ 88.2814712, 21.5611087 ], [ 88.2823012, 21.5616173 ], [ 88.2836794, 21.5618642 ], [ 88.2850623, 21.5626258 ], [ 88.2860771, 21.5636071 ], [ 88.2861937, 21.5660932 ], [ 88.2867463, 21.5663463 ], [ 88.2864462, 21.5635168 ], [ 88.286264, 21.5634296 ], [ 88.2854712, 21.5622369 ], [ 88.2853296, 21.5617232 ], [ 88.2811869, 21.5600811 ], [ 88.2790771, 21.5598806 ], [ 88.2789818, 21.5597124 ], [ 88.2712686, 21.5588698 ], [ 88.2665902, 21.5589055 ], [ 88.2566942, 21.5602677 ], [ 88.2495632, 21.5631533 ], [ 88.2481937, 21.563936 ], [ 88.2465557, 21.565493 ], [ 88.2460076, 21.5657545 ], [ 88.2453245, 21.5664036 ], [ 88.2443761, 21.5680838 ], [ 88.2436908, 21.5684754 ], [ 88.2427445, 21.570413 ], [ 88.241647, 21.5708078 ], [ 88.2412423, 21.5718407 ], [ 88.2406963, 21.5723597 ], [ 88.2390779, 21.5762334 ], [ 88.2389537, 21.5777791 ], [ 88.2414275, 21.5773741 ], [ 88.2417006, 21.5771146 ], [ 88.2441701, 21.5761955 ], [ 88.2441656, 21.5756806 ], [ 88.2452601, 21.5749 ], [ 88.245544, 21.5759278 ], [ 88.2469301, 21.5770754 ], [ 88.2488622, 21.5777052 ], [ 88.2495564, 21.5784723 ], [ 88.2496989, 21.578986 ], [ 88.2502506, 21.5791102 ], [ 88.2505281, 21.5793656 ], [ 88.2510796, 21.5794907 ], [ 88.2526061, 21.5810238 ], [ 88.2531633, 21.5817921 ], [ 88.2551232, 21.585639 ], [ 88.2559579, 21.5866627 ], [ 88.2576383, 21.5899968 ], [ 88.2582066, 21.5920522 ], [ 88.2582243, 21.5941115 ], [ 88.2576806, 21.5948881 ], [ 88.2568658, 21.5961814 ], [ 88.2563221, 21.5969579 ], [ 88.2552364, 21.5987683 ], [ 88.2544173, 21.5995468 ], [ 88.2533362, 21.601872 ], [ 88.2530631, 21.6021315 ], [ 88.2523886, 21.6036813 ], [ 88.251838, 21.6036855 ], [ 88.250894, 21.6060096 ], [ 88.250348, 21.6065286 ], [ 88.2498061, 21.6075627 ], [ 88.2489891, 21.6085986 ], [ 88.2480338, 21.6095063 ], [ 88.2472125, 21.6100274 ], [ 88.2458403, 21.6105526 ], [ 88.2447479, 21.6115906 ], [ 88.2441996, 21.6118522 ], [ 88.2430972, 21.611732 ], [ 88.2432278, 21.6109588 ], [ 88.2439033, 21.609409 ], [ 88.2447269, 21.6091453 ], [ 88.2447248, 21.6088879 ], [ 88.2425169, 21.6082604 ], [ 88.239753, 21.6069938 ], [ 88.2356215, 21.606767 ], [ 88.2350732, 21.6070285 ], [ 88.2346651, 21.6076757 ], [ 88.2339828, 21.6083239 ], [ 88.2334345, 21.6085853 ], [ 88.2326152, 21.6093638 ], [ 88.227946, 21.6106857 ], [ 88.2263007, 21.61147 ], [ 88.2249263, 21.6117377 ], [ 88.2213605, 21.6133086 ], [ 88.2208141, 21.6138276 ], [ 88.2190318, 21.6147422 ], [ 88.2187887, 21.6186057 ], [ 88.2190749, 21.6198909 ], [ 88.2202, 21.6227148 ], [ 88.2226973, 21.6250134 ], [ 88.2228398, 21.6255273 ], [ 88.2236712, 21.6261644 ], [ 88.224224, 21.6264177 ], [ 88.2250565, 21.6271841 ], [ 88.2258868, 21.6276929 ], [ 88.226715, 21.627944 ], [ 88.2275476, 21.6287102 ], [ 88.2297611, 21.6299813 ], [ 88.2308711, 21.6310028 ], [ 88.2314228, 21.6311279 ], [ 88.2321195, 21.6321525 ], [ 88.232952, 21.6329187 ], [ 88.2335115, 21.6339444 ], [ 88.2340666, 21.6344553 ], [ 88.2346283, 21.6357382 ], [ 88.2349057, 21.6359937 ], [ 88.2351941, 21.6375362 ], [ 88.2354718, 21.6377917 ], [ 88.2357625, 21.6395917 ], [ 88.2356405, 21.6413948 ], [ 88.2361913, 21.6413906 ], [ 88.2363701, 21.6462808 ], [ 88.2355682, 21.6491188 ], [ 88.2350238, 21.6498952 ], [ 88.2347574, 21.650927 ], [ 88.2336646, 21.651965 ], [ 88.2331248, 21.6532562 ], [ 88.2325784, 21.6537752 ], [ 88.2323096, 21.6545496 ], [ 88.2317653, 21.655326 ], [ 88.2317982, 21.6591874 ], [ 88.2320779, 21.6597004 ], [ 88.2326659, 21.6640727 ], [ 88.2332276, 21.6653556 ], [ 88.2332452, 21.6674152 ], [ 88.2329741, 21.6679321 ], [ 88.2327075, 21.6689638 ], [ 88.23189, 21.6699997 ], [ 88.2317572, 21.6705157 ], [ 88.2312062, 21.6705197 ], [ 88.2310724, 21.6710357 ], [ 88.230663, 21.6714244 ], [ 88.2295659, 21.6719474 ], [ 88.2291577, 21.6725945 ], [ 88.2281996, 21.6732449 ], [ 88.2268335, 21.6745422 ], [ 88.2257339, 21.6748077 ], [ 88.2254606, 21.6750672 ], [ 88.2191303, 21.6756287 ], [ 88.2185773, 21.6753755 ], [ 88.2177511, 21.6753815 ], [ 88.2147128, 21.674374 ], [ 88.2111324, 21.6744 ], [ 88.2081155, 21.6759669 ], [ 88.2071586, 21.6768754 ], [ 88.2063473, 21.6786834 ], [ 88.204981, 21.6799806 ], [ 88.2038963, 21.6820481 ], [ 88.2028009, 21.6828283 ], [ 88.2019874, 21.6843791 ], [ 88.2008942, 21.6854167 ], [ 88.2003667, 21.6882526 ], [ 88.2000934, 21.6885119 ], [ 88.1999626, 21.6892853 ], [ 88.2005168, 21.6896669 ], [ 88.2021738, 21.6901698 ], [ 88.2049303, 21.6904074 ], [ 88.2068628, 21.6909082 ], [ 88.2079711, 21.6916726 ], [ 88.21073, 21.6921672 ], [ 88.2112851, 21.692678 ], [ 88.2129443, 21.6934384 ], [ 88.2137772, 21.6942046 ], [ 88.2157162, 21.6954777 ], [ 88.2168245, 21.6962418 ], [ 88.2173765, 21.6963669 ], [ 88.2173809, 21.696882 ], [ 88.217935, 21.6972636 ], [ 88.2184871, 21.6973887 ], [ 88.2187689, 21.698159 ], [ 88.2193198, 21.6981549 ], [ 88.2194616, 21.6986688 ], [ 88.2200167, 21.6991796 ], [ 88.2205742, 21.6999479 ], [ 88.2208844, 21.7040647 ], [ 88.2200883, 21.707675 ], [ 88.219544, 21.7084514 ], [ 88.2195481, 21.7089663 ], [ 88.2190038, 21.7097425 ], [ 88.218457, 21.7102615 ], [ 88.2176392, 21.7112974 ], [ 88.2173682, 21.7118143 ], [ 88.2157283, 21.7133709 ], [ 88.2149103, 21.7144068 ], [ 88.2146413, 21.7151811 ], [ 88.2138235, 21.7162169 ], [ 88.2138279, 21.7167317 ], [ 88.2132811, 21.7172507 ], [ 88.2127366, 21.7180269 ], [ 88.2113871, 21.7213837 ], [ 88.2111461, 21.7255047 ], [ 88.2114366, 21.7273047 ], [ 88.2117145, 21.7275603 ], [ 88.2117273, 21.7291048 ], [ 88.2128727, 21.7342454 ], [ 88.2131503, 21.7345009 ], [ 88.2143261, 21.7432456 ], [ 88.2151352, 21.7497359 ], [ 88.2156619, 21.7523576 ], [ 88.2158905, 21.7548807 ], [ 88.216178, 21.7560047 ], [ 88.2170857, 21.7574795 ], [ 88.2184386, 21.7613855 ], [ 88.2194996, 21.7617871 ], [ 88.2237179, 21.7620985 ], [ 88.2275759, 21.76207 ], [ 88.2308787, 21.7615306 ], [ 88.2322499, 21.7607479 ], [ 88.2327079, 21.7605418 ], [ 88.2334734, 21.7601824 ], [ 88.2351568, 21.7595907 ], [ 88.2348295, 21.7586563 ], [ 88.2353062, 21.7585026 ], [ 88.2355795, 21.7589191 ], [ 88.2366454, 21.758752 ], [ 88.2374946, 21.7585706 ], [ 88.2380187, 21.7584214 ], [ 88.2382571, 21.7586548 ], [ 88.2443489, 21.757568 ], [ 88.2446224, 21.7573085 ], [ 88.2462758, 21.757296 ], [ 88.2465491, 21.7570365 ], [ 88.2556296, 21.7554232 ], [ 88.2721582, 21.7546538 ], [ 88.2725664, 21.7541357 ], [ 88.2726957, 21.7531049 ], [ 88.2724201, 21.753107 ], [ 88.2724065, 21.7515625 ], [ 88.2719904, 21.7513083 ], [ 88.2714256, 21.749768 ], [ 88.27087, 21.7492573 ], [ 88.269743, 21.746434 ], [ 88.2694651, 21.7461787 ], [ 88.2683379, 21.7433554 ], [ 88.2681939, 21.7425843 ], [ 88.2676417, 21.7424593 ], [ 88.2669399, 21.7410492 ], [ 88.2666621, 21.7407939 ], [ 88.2659603, 21.7392544 ], [ 88.265408, 21.7391295 ], [ 88.2649887, 21.7384896 ], [ 88.2648424, 21.7374608 ], [ 88.2642901, 21.7373359 ], [ 88.2641508, 21.7372087 ], [ 88.263729, 21.7361821 ], [ 88.2631767, 21.7360571 ], [ 88.2627596, 21.7356746 ], [ 88.2620576, 21.7341354 ], [ 88.2615067, 21.7341395 ], [ 88.2613549, 21.732596 ], [ 88.2610771, 21.7323406 ], [ 88.261193, 21.7297653 ], [ 88.2617407, 21.7293745 ], [ 88.2628394, 21.7289804 ], [ 88.2628348, 21.7284656 ], [ 88.2644846, 21.7280664 ], [ 88.2647579, 21.7278067 ], [ 88.2705437, 21.7277625 ], [ 88.2708169, 21.727503 ], [ 88.27247, 21.7274903 ], [ 88.274944, 21.7268281 ], [ 88.2753523, 21.72631 ], [ 88.2761629, 21.7245017 ], [ 88.2761584, 21.7239868 ], [ 88.2764294, 21.7234699 ], [ 88.2766889, 21.7216657 ], [ 88.2769599, 21.7211486 ], [ 88.2769531, 21.7203764 ], [ 88.2774904, 21.7188275 ], [ 88.2774859, 21.7183127 ], [ 88.2783011, 21.7170192 ], [ 88.2782963, 21.7165043 ], [ 88.2793757, 21.7139216 ], [ 88.2796488, 21.713662 ], [ 88.2799176, 21.7128876 ], [ 88.280464, 21.7123684 ], [ 88.2807189, 21.7100494 ], [ 88.280992, 21.7097899 ], [ 88.2817957, 21.7072093 ], [ 88.2822003, 21.7061762 ], [ 88.2835755, 21.7059082 ], [ 88.2838418, 21.7048763 ], [ 88.2843927, 21.7048721 ], [ 88.2872479, 21.7007308 ], [ 88.2873816, 21.7002148 ], [ 88.2884755, 21.699305 ], [ 88.2890253, 21.6991723 ], [ 88.289422, 21.6973671 ], [ 88.2891442, 21.6971118 ], [ 88.2891349, 21.6960821 ], [ 88.2895396, 21.6950492 ], [ 88.2909213, 21.6955533 ], [ 88.2918758, 21.6945161 ], [ 88.2926883, 21.6929651 ], [ 88.2935078, 21.6921863 ], [ 88.2936414, 21.6916705 ], [ 88.2947374, 21.6910179 ], [ 88.2963912, 21.6911341 ], [ 88.2963867, 21.6906193 ], [ 88.2969376, 21.6906149 ], [ 88.2971992, 21.6890681 ], [ 88.2977511, 21.6891921 ], [ 88.2982975, 21.6886729 ], [ 88.2988471, 21.6885403 ], [ 88.2988403, 21.687768 ], [ 88.2982893, 21.6877724 ], [ 88.298007, 21.6870022 ], [ 88.2985568, 21.6868688 ], [ 88.2988299, 21.6866093 ], [ 88.2993795, 21.6864766 ], [ 88.299776, 21.6846714 ], [ 88.2996365, 21.684415 ], [ 88.3004592, 21.684022 ], [ 88.3012869, 21.6841447 ], [ 88.3016857, 21.6825968 ], [ 88.3025002, 21.6813033 ], [ 88.3030395, 21.6800118 ], [ 88.3031685, 21.678981 ], [ 88.3028943, 21.6791114 ], [ 88.302068, 21.6791179 ], [ 88.3019285, 21.6789907 ], [ 88.3024424, 21.6748674 ], [ 88.3029841, 21.6738334 ], [ 88.3034885, 21.6686805 ], [ 88.3034793, 21.6676509 ], [ 88.3032016, 21.6673955 ], [ 88.3025883, 21.6604494 ], [ 88.3006076, 21.6545435 ], [ 88.3000523, 21.654033 ], [ 88.2991961, 21.6506928 ], [ 88.2990578, 21.6505649 ], [ 88.2979529, 21.6501878 ], [ 88.2979484, 21.6496728 ], [ 88.2976741, 21.6498032 ], [ 88.2971234, 21.6498076 ], [ 88.2965704, 21.6495545 ], [ 88.2907855, 21.649342 ], [ 88.2894109, 21.6496102 ], [ 88.2887254, 21.6500022 ], [ 88.2879153, 21.6518106 ], [ 88.2875061, 21.6521995 ], [ 88.2869565, 21.652333 ], [ 88.2865566, 21.6538807 ], [ 88.2865749, 21.6559402 ], [ 88.2852551, 21.6623866 ], [ 88.2852619, 21.6631589 ], [ 88.2847203, 21.6641929 ], [ 88.2847248, 21.6647077 ], [ 88.2841854, 21.6659992 ], [ 88.2841899, 21.666514 ], [ 88.2839168, 21.6667735 ], [ 88.2831134, 21.6693543 ], [ 88.2834298, 21.6739859 ], [ 88.2827543, 21.6754067 ], [ 88.281656, 21.6758017 ], [ 88.2823373, 21.6750241 ], [ 88.2826082, 21.674507 ], [ 88.2826014, 21.6737348 ], [ 88.2821807, 21.6728364 ], [ 88.2794277, 21.6729869 ], [ 88.2791455, 21.6722167 ], [ 88.2794198, 21.6720855 ], [ 88.2807968, 21.672075 ], [ 88.2810699, 21.6718153 ], [ 88.2816197, 21.6716828 ], [ 88.2820278, 21.6711647 ], [ 88.2825649, 21.6696159 ], [ 88.2825398, 21.6667841 ], [ 88.2838758, 21.6621398 ], [ 88.2842529, 21.6580177 ], [ 88.2848059, 21.6582708 ], [ 88.2854734, 21.6559487 ], [ 88.2854666, 21.6551763 ], [ 88.2862608, 21.651566 ], [ 88.2865339, 21.6513063 ], [ 88.2868023, 21.650532 ], [ 88.2870754, 21.6502723 ], [ 88.287344, 21.649498 ], [ 88.2881633, 21.6487193 ], [ 88.2882969, 21.6482033 ], [ 88.2902186, 21.6475443 ], [ 88.2937983, 21.6475165 ], [ 88.2948975, 21.6472506 ], [ 88.2951704, 21.6469909 ], [ 88.2965484, 21.6471094 ], [ 88.297498, 21.6455573 ], [ 88.2970693, 21.6437584 ], [ 88.2965186, 21.6437628 ], [ 88.2963712, 21.642734 ], [ 88.2958045, 21.6409365 ], [ 88.2952468, 21.6401684 ], [ 88.295096, 21.6386248 ], [ 88.2945441, 21.6385001 ], [ 88.2935604, 21.6363198 ], [ 88.2934141, 21.6352912 ], [ 88.2928633, 21.6352954 ], [ 88.2924339, 21.6334967 ], [ 88.2921563, 21.6332413 ], [ 88.2920123, 21.6324702 ], [ 88.2914604, 21.6323453 ], [ 88.2913211, 21.6322181 ], [ 88.2908904, 21.6301618 ], [ 88.2903396, 21.6301661 ], [ 88.2900484, 21.6283663 ], [ 88.2894976, 21.6283704 ], [ 88.289621, 21.6268248 ], [ 88.2893436, 21.6265694 ], [ 88.2890544, 21.625027 ], [ 88.288777, 21.6247719 ], [ 88.2886282, 21.6234857 ], [ 88.2880765, 21.6233608 ], [ 88.2879372, 21.6232336 ], [ 88.287093, 21.6211805 ], [ 88.2868155, 21.6209251 ], [ 88.2859644, 21.6180998 ], [ 88.2858261, 21.6179718 ], [ 88.2852744, 21.6178478 ], [ 88.2851294, 21.6170765 ], [ 88.2845721, 21.6163084 ], [ 88.2842899, 21.6155383 ], [ 88.2833527, 21.6029304 ], [ 88.2840232, 21.6008658 ], [ 88.2829289, 21.6016466 ], [ 88.283048, 21.5995859 ], [ 88.2834523, 21.598553 ], [ 88.2842757, 21.5982892 ], [ 88.2844061, 21.597516 ], [ 88.2849499, 21.5967394 ], [ 88.2856248, 21.5951894 ], [ 88.2861754, 21.5951852 ], [ 88.2865832, 21.5946672 ], [ 88.2865787, 21.5941523 ], [ 88.2864403, 21.5940242 ], [ 88.2858887, 21.5939002 ], [ 88.2857346, 21.5920992 ], [ 88.2860077, 21.5918396 ], [ 88.2859987, 21.5908099 ], [ 88.2854322, 21.5890121 ], [ 88.2848703, 21.5877292 ], [ 88.2848658, 21.5872143 ], [ 88.2856734, 21.5851486 ], [ 88.2862192, 21.5846294 ], [ 88.2862056, 21.5830849 ], [ 88.2856414, 21.5815445 ], [ 88.2850843, 21.5807764 ], [ 88.285082, 21.580519 ], [ 88.2853527, 21.5800019 ] ] ], [ [ [ 82.3097459, 16.6465687 ], [ 82.3100095, 16.646052 ], [ 82.3102681, 16.6447625 ], [ 82.3102611, 16.6437322 ], [ 82.3107901, 16.6429562 ], [ 82.310919, 16.6421826 ], [ 82.3103845, 16.642186 ], [ 82.3102278, 16.6388385 ], [ 82.3107534, 16.6375472 ], [ 82.3112842, 16.6370286 ], [ 82.3114131, 16.6362552 ], [ 82.3119474, 16.6362518 ], [ 82.3124677, 16.6341877 ], [ 82.313002, 16.6341845 ], [ 82.3133953, 16.6331516 ], [ 82.3136606, 16.6328923 ], [ 82.3136571, 16.6323773 ], [ 82.3139226, 16.632118 ], [ 82.3140479, 16.6308292 ], [ 82.3135136, 16.6308326 ], [ 82.3132358, 16.629289 ], [ 82.3129687, 16.6292906 ], [ 82.3129721, 16.6298058 ], [ 82.3127051, 16.6298075 ], [ 82.3125675, 16.6292932 ], [ 82.3118956, 16.6286531 ], [ 82.3110942, 16.6286582 ], [ 82.310961, 16.6287882 ], [ 82.3108315, 16.6293042 ], [ 82.3113658, 16.6293008 ], [ 82.3113692, 16.629816 ], [ 82.3108332, 16.6295618 ], [ 82.3108385, 16.6303344 ], [ 82.3105713, 16.6303361 ], [ 82.3101613, 16.6290507 ], [ 82.3098854, 16.6277646 ], [ 82.3100124, 16.6267336 ], [ 82.3094781, 16.626737 ], [ 82.3094817, 16.627252 ], [ 82.3089474, 16.6272554 ], [ 82.3088583, 16.6276825 ], [ 82.3086837, 16.6277721 ], [ 82.3087975, 16.6249381 ], [ 82.3077168, 16.6231418 ], [ 82.3070458, 16.622631 ], [ 82.3071842, 16.6234028 ], [ 82.3074531, 16.6236587 ], [ 82.3077359, 16.6259751 ], [ 82.3076238, 16.6290668 ], [ 82.3081598, 16.629321 ], [ 82.3081564, 16.628806 ], [ 82.3086907, 16.6288026 ], [ 82.3085531, 16.6282883 ], [ 82.309218, 16.6277689 ], [ 82.3090874, 16.6282849 ], [ 82.3092303, 16.6295718 ], [ 82.3086968, 16.6297035 ], [ 82.3085635, 16.6298336 ], [ 82.3083138, 16.6324109 ], [ 82.3076605, 16.6344758 ], [ 82.3071252, 16.6343499 ], [ 82.3067283, 16.6349968 ], [ 82.3067319, 16.6355119 ], [ 82.3068676, 16.6357687 ], [ 82.3063333, 16.6357719 ], [ 82.3057833, 16.6334572 ], [ 82.3052481, 16.6333314 ], [ 82.3047094, 16.6326912 ], [ 82.3052437, 16.6326878 ], [ 82.3052403, 16.6321728 ], [ 82.3047077, 16.6324336 ], [ 82.3042821, 16.6288302 ], [ 82.3037032, 16.6284877 ], [ 82.3036111, 16.6283193 ], [ 82.3028088, 16.6281951 ], [ 82.3026739, 16.6280675 ], [ 82.3026289, 16.6276404 ], [ 82.3028035, 16.6274223 ], [ 82.3033371, 16.6272907 ], [ 82.3032012, 16.6270339 ], [ 82.3033284, 16.6260029 ], [ 82.3027941, 16.6260061 ], [ 82.3027924, 16.6257487 ], [ 82.3033267, 16.6257453 ], [ 82.303458, 16.6254869 ], [ 82.3034511, 16.6244565 ], [ 82.3031804, 16.6239432 ], [ 82.3031751, 16.6231704 ], [ 82.3030411, 16.623042 ], [ 82.3027741, 16.6230437 ], [ 82.3026408, 16.6231738 ], [ 82.3027837, 16.6244608 ], [ 82.3022494, 16.6244641 ], [ 82.3021014, 16.6224043 ], [ 82.3022337, 16.622146 ], [ 82.3016985, 16.6220201 ], [ 82.3012912, 16.6211216 ], [ 82.3006204, 16.6206105 ], [ 82.3007656, 16.6224128 ], [ 82.3006359, 16.6229288 ], [ 82.2998345, 16.6229337 ], [ 82.2996969, 16.6224195 ], [ 82.2995631, 16.6222911 ], [ 82.2990279, 16.622166 ], [ 82.2988903, 16.6216517 ], [ 82.2987565, 16.6215234 ], [ 82.2982212, 16.6213983 ], [ 82.2982178, 16.6208833 ], [ 82.2992881, 16.6211341 ], [ 82.2992915, 16.6216493 ], [ 82.2998275, 16.6219035 ], [ 82.3000895, 16.6211292 ], [ 82.2995552, 16.6211324 ], [ 82.2996849, 16.6206164 ], [ 82.2994161, 16.6203605 ], [ 82.2991385, 16.6188167 ], [ 82.2987347, 16.6183042 ], [ 82.2998034, 16.6182976 ], [ 82.2998068, 16.6188126 ], [ 82.3008763, 16.6189343 ], [ 82.3011417, 16.618675 ], [ 82.3030109, 16.6185349 ], [ 82.3030143, 16.6190502 ], [ 82.3032832, 16.6193061 ], [ 82.3035503, 16.6193044 ], [ 82.3035486, 16.6190468 ], [ 82.3033717, 16.6189592 ], [ 82.3035399, 16.6177589 ], [ 82.3030073, 16.6180199 ], [ 82.3028699, 16.6175056 ], [ 82.3024669, 16.6171212 ], [ 82.3016639, 16.6168687 ], [ 82.3011269, 16.6164862 ], [ 82.3010016, 16.6177748 ], [ 82.300603, 16.6180348 ], [ 82.3004656, 16.6175206 ], [ 82.2997956, 16.617138 ], [ 82.2989933, 16.6170146 ], [ 82.2989967, 16.6175298 ], [ 82.2984624, 16.6175332 ], [ 82.298325, 16.6170188 ], [ 82.298056, 16.6167629 ], [ 82.2979194, 16.6162486 ], [ 82.2972547, 16.616768 ], [ 82.2972564, 16.6170256 ], [ 82.2977941, 16.6175374 ], [ 82.2976765, 16.6198562 ], [ 82.2968725, 16.6194745 ], [ 82.2960702, 16.6193512 ], [ 82.2960685, 16.6190936 ], [ 82.2966028, 16.6190902 ], [ 82.2967325, 16.6185743 ], [ 82.2963278, 16.6179324 ], [ 82.2952592, 16.617939 ], [ 82.2951262, 16.6180691 ], [ 82.2951296, 16.6185843 ], [ 82.2953985, 16.6188402 ], [ 82.2954002, 16.6190978 ], [ 82.2951347, 16.6193569 ], [ 82.295005, 16.6198729 ], [ 82.2944707, 16.6198763 ], [ 82.2946074, 16.6203905 ], [ 82.2948763, 16.6206465 ], [ 82.294878, 16.6209041 ], [ 82.2946142, 16.621421 ], [ 82.2947518, 16.6219352 ], [ 82.2931506, 16.6222027 ], [ 82.293154, 16.6227179 ], [ 82.2939599, 16.6233563 ], [ 82.2944949, 16.6234822 ], [ 82.2945002, 16.624255 ], [ 82.2947682, 16.6243817 ], [ 82.2953016, 16.6242499 ], [ 82.2951901, 16.6275992 ], [ 82.2979152, 16.6355672 ], [ 82.2981842, 16.6358232 ], [ 82.2984565, 16.6365941 ], [ 82.2992651, 16.6376194 ], [ 82.2994095, 16.6391641 ], [ 82.3002127, 16.6394166 ], [ 82.300487, 16.6404451 ], [ 82.3010239, 16.6408277 ], [ 82.3018262, 16.6409519 ], [ 82.3016939, 16.6412104 ], [ 82.3017026, 16.6424983 ], [ 82.3022405, 16.6430099 ], [ 82.3022492, 16.6442977 ], [ 82.3035938, 16.6455773 ], [ 82.3037313, 16.6460915 ], [ 82.3050706, 16.6465982 ], [ 82.3049489, 16.648402 ], [ 82.3052195, 16.6489156 ], [ 82.3052265, 16.6499458 ], [ 82.3057714, 16.6514878 ], [ 82.3060402, 16.6517438 ], [ 82.3065851, 16.6532858 ], [ 82.306854, 16.6535417 ], [ 82.3068629, 16.6548296 ], [ 82.3079385, 16.6558532 ], [ 82.308211, 16.6566241 ], [ 82.3087489, 16.6571359 ], [ 82.3087593, 16.6586814 ], [ 82.3090283, 16.6589371 ], [ 82.3091834, 16.6620271 ], [ 82.3099869, 16.6622796 ], [ 82.309999, 16.6640826 ], [ 82.3105335, 16.6640792 ], [ 82.3109426, 16.6653646 ], [ 82.3112116, 16.6656205 ], [ 82.3120254, 16.6674183 ], [ 82.3125633, 16.6679301 ], [ 82.3131048, 16.6689569 ], [ 82.3144531, 16.6707515 ], [ 82.3149912, 16.6712631 ], [ 82.3154013, 16.6725485 ], [ 82.3159356, 16.6725451 ], [ 82.3167497, 16.6743431 ], [ 82.3172842, 16.6743396 ], [ 82.3178273, 16.6756239 ], [ 82.3186334, 16.6762623 ], [ 82.3191689, 16.6763882 ], [ 82.3197137, 16.6779303 ], [ 82.3202482, 16.6779269 ], [ 82.3209211, 16.6786952 ], [ 82.3210606, 16.679467 ], [ 82.3215951, 16.6794636 ], [ 82.3213348, 16.6804956 ], [ 82.3226737, 16.680873 ], [ 82.3234807, 16.6816405 ], [ 82.324016, 16.6817664 ], [ 82.3240231, 16.6827966 ], [ 82.3245584, 16.6829216 ], [ 82.3250042, 16.6833931 ], [ 82.3251027, 16.6843353 ], [ 82.3256372, 16.6843317 ], [ 82.3268534, 16.6863846 ], [ 82.3273932, 16.6871538 ], [ 82.3275327, 16.6879257 ], [ 82.3283361, 16.6881782 ], [ 82.3282057, 16.6886942 ], [ 82.3286141, 16.6897218 ], [ 82.3291486, 16.6897184 ], [ 82.3290197, 16.690492 ], [ 82.3292889, 16.6907479 ], [ 82.3292959, 16.6917781 ], [ 82.3298339, 16.6922897 ], [ 82.3299751, 16.6933192 ], [ 82.3305096, 16.6933156 ], [ 82.3309209, 16.6948584 ], [ 82.3311898, 16.6951143 ], [ 82.3320076, 16.6974273 ], [ 82.3321488, 16.6984566 ], [ 82.3326833, 16.6984532 ], [ 82.3326869, 16.6989684 ], [ 82.3337559, 16.6989614 ], [ 82.3336344, 16.7007653 ], [ 82.3339088, 16.7017938 ], [ 82.3344469, 16.7023056 ], [ 82.3347232, 16.7035916 ], [ 82.3345916, 16.7038501 ], [ 82.3351263, 16.7038465 ], [ 82.335128, 16.7041041 ], [ 82.3345935, 16.7041075 ], [ 82.3345952, 16.7043651 ], [ 82.3351299, 16.7043617 ], [ 82.335406, 16.7056479 ], [ 82.3359405, 16.7056443 ], [ 82.3360774, 16.7061586 ], [ 82.3363463, 16.7064145 ], [ 82.3366279, 16.7084732 ], [ 82.3374351, 16.7092408 ], [ 82.3377115, 16.7105269 ], [ 82.3382512, 16.7112961 ], [ 82.3385293, 16.7128397 ], [ 82.3384034, 16.7138709 ], [ 82.3389379, 16.7138673 ], [ 82.3388003, 16.713353 ], [ 82.3390656, 16.7130939 ], [ 82.3395894, 16.7115451 ], [ 82.3401186, 16.7107688 ], [ 82.3406478, 16.7099926 ], [ 82.3405109, 16.7094783 ], [ 82.3410454, 16.7094749 ], [ 82.3414406, 16.7086997 ], [ 82.3419715, 16.708181 ], [ 82.3421019, 16.7076651 ], [ 82.342902, 16.7074024 ], [ 82.3440951, 16.7061066 ], [ 82.3446243, 16.7053305 ], [ 82.3444803, 16.703786 ], [ 82.3428804, 16.7043115 ], [ 82.3430207, 16.7053409 ], [ 82.3423567, 16.7058603 ], [ 82.3423531, 16.7053453 ], [ 82.3415504, 16.7052213 ], [ 82.3411463, 16.704838 ], [ 82.3410095, 16.7043237 ], [ 82.3404741, 16.7041979 ], [ 82.3400683, 16.703557 ], [ 82.3395302, 16.7030453 ], [ 82.3393934, 16.7025311 ], [ 82.3388589, 16.7025345 ], [ 82.3387213, 16.7020204 ], [ 82.3380509, 16.7016379 ], [ 82.3372437, 16.7008703 ], [ 82.3354981, 16.6997229 ], [ 82.3353612, 16.6992086 ], [ 82.3348258, 16.699083 ], [ 82.3346909, 16.6989554 ], [ 82.3345542, 16.6984411 ], [ 82.3340197, 16.6984447 ], [ 82.3338695, 16.6961274 ], [ 82.3346533, 16.6935466 ], [ 82.335035, 16.6907108 ], [ 82.3344996, 16.690585 ], [ 82.3334316, 16.6907212 ], [ 82.3331857, 16.6938136 ], [ 82.3329184, 16.6938153 ], [ 82.3329148, 16.6933003 ], [ 82.3321167, 16.6938204 ], [ 82.3322444, 16.6930471 ], [ 82.33251, 16.6927878 ], [ 82.3325047, 16.6920149 ], [ 82.3322356, 16.6917592 ], [ 82.3322339, 16.6915016 ], [ 82.3324992, 16.6912423 ], [ 82.3324435, 16.6892697 ], [ 82.332619, 16.6891809 ], [ 82.3326245, 16.6899537 ], [ 82.3336952, 16.6902043 ], [ 82.3338194, 16.6889155 ], [ 82.3332796, 16.6881463 ], [ 82.3331428, 16.687632 ], [ 82.3320711, 16.6872521 ], [ 82.3319362, 16.6871247 ], [ 82.331891, 16.6866974 ], [ 82.3328693, 16.6867318 ], [ 82.3339437, 16.6874976 ], [ 82.3344816, 16.6880095 ], [ 82.3352843, 16.6881334 ], [ 82.3358277, 16.6894179 ], [ 82.3363631, 16.6895426 ], [ 82.3366321, 16.6897985 ], [ 82.3371675, 16.6899242 ], [ 82.3371711, 16.6904394 ], [ 82.3377056, 16.690436 ], [ 82.3377092, 16.690951 ], [ 82.3382437, 16.6909476 ], [ 82.3385162, 16.6917186 ], [ 82.3390507, 16.6917152 ], [ 82.3390543, 16.6922302 ], [ 82.3403941, 16.6927367 ], [ 82.3410672, 16.6935052 ], [ 82.3412049, 16.6940195 ], [ 82.3420084, 16.6942718 ], [ 82.3421452, 16.694786 ], [ 82.3424142, 16.6950418 ], [ 82.3425519, 16.695556 ], [ 82.3430864, 16.6955526 ], [ 82.3433609, 16.6965812 ], [ 82.3441671, 16.6972194 ], [ 82.3447024, 16.6973451 ], [ 82.3447062, 16.6978603 ], [ 82.3452414, 16.6979851 ], [ 82.3455105, 16.698241 ], [ 82.346046, 16.6983667 ], [ 82.3460496, 16.6988819 ], [ 82.3465867, 16.6992642 ], [ 82.347392, 16.6997741 ], [ 82.3479275, 16.6999 ], [ 82.3486007, 16.7006683 ], [ 82.3487383, 16.7011826 ], [ 82.3492728, 16.701179 ], [ 82.349551, 16.7027227 ], [ 82.3500855, 16.7027191 ], [ 82.350091, 16.7034918 ], [ 82.3506281, 16.7038743 ], [ 82.3514308, 16.7039983 ], [ 82.3514344, 16.7045133 ], [ 82.3522361, 16.7045082 ], [ 82.3523765, 16.7055375 ], [ 82.3531856, 16.7065624 ], [ 82.353462, 16.7078486 ], [ 82.3537311, 16.7081043 ], [ 82.3537328, 16.7083619 ], [ 82.3534674, 16.7086212 ], [ 82.353471, 16.7091364 ], [ 82.3528088, 16.7099134 ], [ 82.3538761, 16.7096488 ], [ 82.3538706, 16.7088762 ], [ 82.3549398, 16.7088692 ], [ 82.3552106, 16.7093825 ], [ 82.3541414, 16.7093895 ], [ 82.3541452, 16.7099047 ], [ 82.3549469, 16.7098994 ], [ 82.3550819, 16.7101561 ], [ 82.3550893, 16.7111863 ], [ 82.3541569, 16.7115783 ], [ 82.353626, 16.7120969 ], [ 82.3525597, 16.7124908 ], [ 82.3525561, 16.7119758 ], [ 82.3514888, 16.7122402 ], [ 82.3516311, 16.7135271 ], [ 82.3509679, 16.714175 ], [ 82.3504351, 16.714436 ], [ 82.3501679, 16.7144379 ], [ 82.3500329, 16.7143103 ], [ 82.3498961, 16.713796 ], [ 82.3493643, 16.7141856 ], [ 82.3480314, 16.7147093 ], [ 82.3477661, 16.7149686 ], [ 82.3464306, 16.7151066 ], [ 82.3463416, 16.7155337 ], [ 82.3453633, 16.7153712 ], [ 82.3466797, 16.7125292 ], [ 82.3453416, 16.7122803 ], [ 82.3452112, 16.7127964 ], [ 82.3444147, 16.7135742 ], [ 82.3432295, 16.7160285 ], [ 82.3426969, 16.7162895 ], [ 82.3402932, 16.7165626 ], [ 82.340025, 16.716436 ], [ 82.3400286, 16.7169512 ], [ 82.3402968, 16.7170778 ], [ 82.3427005, 16.7168045 ], [ 82.3429659, 16.7165452 ], [ 82.3445678, 16.7162774 ], [ 82.3448332, 16.7160181 ], [ 82.3464359, 16.7158792 ], [ 82.3465257, 16.7157087 ], [ 82.3544468, 16.7147966 ], [ 82.3545782, 16.7145382 ], [ 82.3544397, 16.7137664 ], [ 82.3539052, 16.71377 ], [ 82.3539016, 16.7132547 ], [ 82.3563006, 16.7123372 ], [ 82.3573695, 16.71233 ], [ 82.3576351, 16.7120707 ], [ 82.3592359, 16.7116743 ], [ 82.3594941, 16.7103848 ], [ 82.3589596, 16.7103882 ], [ 82.359091, 16.7101298 ], [ 82.3589467, 16.7085853 ], [ 82.3581441, 16.7084613 ], [ 82.3580091, 16.7083339 ], [ 82.3577345, 16.7073054 ], [ 82.3573314, 16.7069212 ], [ 82.3567959, 16.7067964 ], [ 82.3567942, 16.7065388 ], [ 82.3583996, 16.7067858 ], [ 82.358945, 16.7083277 ], [ 82.3594795, 16.7083243 ], [ 82.3596219, 16.7096112 ], [ 82.3601599, 16.7101228 ], [ 82.3603032, 16.7114097 ], [ 82.3597697, 16.7115415 ], [ 82.3596364, 16.7116717 ], [ 82.3597778, 16.712701 ], [ 82.3605805, 16.712824 ], [ 82.3608496, 16.7130799 ], [ 82.3613841, 16.7130763 ], [ 82.3627177, 16.7126817 ], [ 82.362725, 16.7137119 ], [ 82.3632624, 16.7140943 ], [ 82.3637978, 16.71422 ], [ 82.3639328, 16.7144766 ], [ 82.363942, 16.7157645 ], [ 82.3636765, 16.7160238 ], [ 82.3638197, 16.7173107 ], [ 82.3656925, 16.717556 ], [ 82.3658275, 16.7178127 ], [ 82.3658349, 16.7188429 ], [ 82.3655693, 16.7191022 ], [ 82.3654398, 16.7196182 ], [ 82.3649054, 16.7196218 ], [ 82.3646453, 16.7206537 ], [ 82.3653168, 16.7211644 ], [ 82.3653204, 16.7216796 ], [ 82.3647895, 16.7221982 ], [ 82.3642605, 16.7229745 ], [ 82.3633438, 16.7255562 ], [ 82.3628092, 16.7255598 ], [ 82.3625446, 16.7259474 ], [ 82.3617438, 16.7260818 ], [ 82.361606, 16.7255677 ], [ 82.3612027, 16.7251835 ], [ 82.3598662, 16.7251924 ], [ 82.3593336, 16.7254534 ], [ 82.3586712, 16.7263596 ], [ 82.3586731, 16.7266172 ], [ 82.3589422, 16.7268731 ], [ 82.3590817, 16.7276448 ], [ 82.35828, 16.7276501 ], [ 82.3581422, 16.7271359 ], [ 82.358008, 16.7270075 ], [ 82.3569381, 16.7268862 ], [ 82.3568075, 16.7274022 ], [ 82.3564098, 16.7277907 ], [ 82.3556098, 16.7280536 ], [ 82.3545406, 16.7280606 ], [ 82.3540023, 16.727549 ], [ 82.352935, 16.7278136 ], [ 82.3513312, 16.727824 ], [ 82.3505259, 16.7273141 ], [ 82.3499912, 16.7273177 ], [ 82.3489248, 16.7277114 ], [ 82.3489211, 16.7271963 ], [ 82.3470492, 16.7270793 ], [ 82.3469143, 16.7269518 ], [ 82.3467738, 16.7259225 ], [ 82.3465047, 16.7256666 ], [ 82.3462374, 16.7256685 ], [ 82.3462391, 16.7259259 ], [ 82.3464151, 16.7260124 ], [ 82.3462482, 16.7272137 ], [ 82.3457145, 16.7273456 ], [ 82.3454499, 16.727734 ], [ 82.3459846, 16.7277306 ], [ 82.3459882, 16.7282457 ], [ 82.3465255, 16.7286282 ], [ 82.3486693, 16.7293868 ], [ 82.3565958, 16.7292942 ], [ 82.356689, 16.7294636 ], [ 82.3564217, 16.7294653 ], [ 82.3564253, 16.7299805 ], [ 82.3572272, 16.7299752 ], [ 82.3575, 16.7307461 ], [ 82.3601792, 16.7316295 ], [ 82.3628494, 16.731226 ], [ 82.3628458, 16.730711 ], [ 82.3633796, 16.7305781 ], [ 82.3639105, 16.7300595 ], [ 82.364444, 16.7299276 ], [ 82.3647058, 16.7291532 ], [ 82.3652404, 16.7291496 ], [ 82.3652367, 16.7286346 ], [ 82.3657713, 16.728631 ], [ 82.3664336, 16.7278539 ], [ 82.3677553, 16.7257847 ], [ 82.3682807, 16.7244933 ], [ 82.368266, 16.7224328 ], [ 82.3668819, 16.715745 ], [ 82.3663419, 16.714976 ], [ 82.3659322, 16.7136908 ], [ 82.3648613, 16.7134402 ], [ 82.3644527, 16.7124126 ], [ 82.3641836, 16.7121568 ], [ 82.3640467, 16.7116426 ], [ 82.3635122, 16.7116462 ], [ 82.3633745, 16.7111319 ], [ 82.3628362, 16.7106203 ], [ 82.3626995, 16.710106 ], [ 82.3621648, 16.7101096 ], [ 82.3618904, 16.7090811 ], [ 82.3613557, 16.7090847 ], [ 82.3612181, 16.7085704 ], [ 82.3598691, 16.7067762 ], [ 82.3593308, 16.7062646 ], [ 82.359194, 16.7057503 ], [ 82.3586595, 16.7057539 ], [ 82.3585217, 16.7052396 ], [ 82.3577145, 16.7044723 ], [ 82.3575776, 16.703958 ], [ 82.3570431, 16.7039614 ], [ 82.3569055, 16.7034472 ], [ 82.3567714, 16.7033188 ], [ 82.3562359, 16.7031941 ], [ 82.3560983, 16.7026798 ], [ 82.3555584, 16.7019106 ], [ 82.3551552, 16.7015265 ], [ 82.3546198, 16.7014016 ], [ 82.354482, 16.7008873 ], [ 82.3542129, 16.7006316 ], [ 82.3538052, 16.699604 ], [ 82.3532698, 16.6994782 ], [ 82.3531348, 16.6993508 ], [ 82.352998, 16.6988365 ], [ 82.3524635, 16.6988401 ], [ 82.3523259, 16.6983258 ], [ 82.3509806, 16.6970467 ], [ 82.3505756, 16.696405 ], [ 82.3499042, 16.6960234 ], [ 82.3493626, 16.6949966 ], [ 82.3482864, 16.6939733 ], [ 82.3477464, 16.6932041 ], [ 82.3476098, 16.6926898 ], [ 82.3470753, 16.6926934 ], [ 82.3469375, 16.6921792 ], [ 82.3463994, 16.6916675 ], [ 82.3459946, 16.6910257 ], [ 82.3454591, 16.6909008 ], [ 82.3453214, 16.6903867 ], [ 82.3446476, 16.6894889 ], [ 82.3441121, 16.6893642 ], [ 82.3439745, 16.6888499 ], [ 82.3434346, 16.6880807 ], [ 82.3420895, 16.6868016 ], [ 82.3418186, 16.6862882 ], [ 82.3407425, 16.6852648 ], [ 82.3404716, 16.6847515 ], [ 82.3396646, 16.6839839 ], [ 82.3395306, 16.6838556 ], [ 82.3387198, 16.6825729 ], [ 82.3381845, 16.6824479 ], [ 82.3380467, 16.6819337 ], [ 82.3377778, 16.681678 ], [ 82.3373703, 16.6806502 ], [ 82.3368358, 16.6806538 ], [ 82.3366982, 16.6801395 ], [ 82.3364291, 16.6798836 ], [ 82.3360216, 16.678856 ], [ 82.3354864, 16.6787301 ], [ 82.3348097, 16.6775759 ], [ 82.3346729, 16.6770616 ], [ 82.3341386, 16.677065 ], [ 82.3334593, 16.6755239 ], [ 82.3329213, 16.6750123 ], [ 82.3323815, 16.6742431 ], [ 82.3318417, 16.6734737 ], [ 82.3311636, 16.6719325 ], [ 82.3306291, 16.6719361 ], [ 82.3304896, 16.6711643 ], [ 82.3302206, 16.6709084 ], [ 82.3300821, 16.6701365 ], [ 82.3295478, 16.6701401 ], [ 82.3290008, 16.6683404 ], [ 82.3284665, 16.6683438 ], [ 82.3277856, 16.6665453 ], [ 82.3275166, 16.6662894 ], [ 82.3271055, 16.6647466 ], [ 82.326571, 16.66475 ], [ 82.3261575, 16.6629496 ], [ 82.3258884, 16.6626937 ], [ 82.3245295, 16.6593538 ], [ 82.3242605, 16.6590979 ], [ 82.3238494, 16.6575551 ], [ 82.3233151, 16.6575585 ], [ 82.3223546, 16.6539586 ], [ 82.3215036, 16.6467519 ], [ 82.3192798, 16.6341446 ], [ 82.3190109, 16.6338887 ], [ 82.3190058, 16.6331161 ], [ 82.3187349, 16.6326026 ], [ 82.3187209, 16.6305421 ], [ 82.31831, 16.6289993 ], [ 82.3177774, 16.6292601 ], [ 82.317774, 16.6287451 ], [ 82.3169725, 16.6287502 ], [ 82.3169761, 16.6292652 ], [ 82.3159092, 16.6295296 ], [ 82.3159128, 16.6300447 ], [ 82.3167141, 16.6300398 ], [ 82.3163165, 16.6305574 ], [ 82.3165907, 16.631586 ], [ 82.3168597, 16.6318419 ], [ 82.317132, 16.6326128 ], [ 82.3172836, 16.6351875 ], [ 82.3167476, 16.6349335 ], [ 82.3172942, 16.636733 ], [ 82.3164892, 16.6362231 ], [ 82.3159653, 16.6377717 ], [ 82.3170358, 16.6380225 ], [ 82.3173083, 16.6387937 ], [ 82.3167739, 16.6387971 ], [ 82.3167705, 16.6382819 ], [ 82.3165032, 16.6382836 ], [ 82.3159848, 16.640605 ], [ 82.3167863, 16.6405999 ], [ 82.3169228, 16.6411142 ], [ 82.3171917, 16.6413701 ], [ 82.3173293, 16.6418844 ], [ 82.3157272, 16.6420229 ], [ 82.3155941, 16.6421529 ], [ 82.3157368, 16.64344 ], [ 82.3165403, 16.6436925 ], [ 82.3168126, 16.6444635 ], [ 82.3157421, 16.6442127 ], [ 82.3157491, 16.6452429 ], [ 82.3146788, 16.6449921 ], [ 82.3150825, 16.6455047 ], [ 82.3150878, 16.6462775 ], [ 82.3154926, 16.6467901 ], [ 82.3149591, 16.6469218 ], [ 82.3148258, 16.6470518 ], [ 82.3148277, 16.6473094 ], [ 82.315236, 16.6483372 ], [ 82.3146998, 16.648083 ], [ 82.3149757, 16.6493692 ], [ 82.3144405, 16.6492433 ], [ 82.3141715, 16.6489874 ], [ 82.3133692, 16.6488642 ], [ 82.3137729, 16.6493767 ], [ 82.3137799, 16.650407 ], [ 82.3120481, 16.6510615 ], [ 82.3113858, 16.6519677 ], [ 82.3112579, 16.6527411 ], [ 82.3117924, 16.6527379 ], [ 82.3119271, 16.6529946 ], [ 82.3116671, 16.6540265 ], [ 82.3119464, 16.6558279 ], [ 82.3124862, 16.6565971 ], [ 82.3119833, 16.6612367 ], [ 82.3117196, 16.6617536 ], [ 82.3117232, 16.6622686 ], [ 82.3114577, 16.6625279 ], [ 82.3113316, 16.6635591 ], [ 82.3118659, 16.6635557 ], [ 82.3120008, 16.6638123 ], [ 82.3120097, 16.6651002 ], [ 82.312418, 16.666128 ], [ 82.3118835, 16.6661314 ], [ 82.3117459, 16.6656171 ], [ 82.3114769, 16.6653612 ], [ 82.311201, 16.6640751 ], [ 82.3109321, 16.6638192 ], [ 82.3106561, 16.662533 ], [ 82.3103872, 16.6622771 ], [ 82.3098404, 16.6604774 ], [ 82.3100901, 16.6579001 ], [ 82.3095452, 16.6563582 ], [ 82.3092762, 16.6561023 ], [ 82.3088672, 16.6548169 ], [ 82.3086903, 16.6547294 ], [ 82.3089846, 16.6524981 ], [ 82.3092483, 16.6519811 ], [ 82.3091944, 16.6502662 ], [ 82.3093692, 16.650048 ], [ 82.3089636, 16.6494071 ], [ 82.3089619, 16.6491495 ], [ 82.3092273, 16.6488902 ], [ 82.3092169, 16.647345 ], [ 82.3097459, 16.6465687 ] ] ], [ [ [ 82.2055617, 16.7123601 ], [ 82.2060858, 16.7124953 ], [ 82.2068877, 16.7124906 ], [ 82.2082291, 16.7132555 ], [ 82.2106347, 16.7132415 ], [ 82.2117054, 16.7134929 ], [ 82.2237233, 16.7118766 ], [ 82.2274653, 16.7118543 ], [ 82.2279981, 16.7115936 ], [ 82.2293345, 16.7115857 ], [ 82.2349391, 16.7102644 ], [ 82.2352049, 16.7100051 ], [ 82.2386728, 16.7089541 ], [ 82.2389384, 16.7086949 ], [ 82.2405388, 16.7081701 ], [ 82.2408044, 16.707911 ], [ 82.2424046, 16.7073861 ], [ 82.2426704, 16.707127 ], [ 82.2440034, 16.7066038 ], [ 82.2442689, 16.7063445 ], [ 82.2456019, 16.7058214 ], [ 82.246133, 16.7053031 ], [ 82.2471997, 16.7049108 ], [ 82.2481279, 16.7038747 ], [ 82.2482587, 16.7033589 ], [ 82.2487932, 16.7033555 ], [ 82.2495883, 16.7023205 ], [ 82.2486114, 16.7024954 ], [ 82.2485193, 16.702327 ], [ 82.2493186, 16.7019352 ], [ 82.2506465, 16.7006394 ], [ 82.2511803, 16.7005078 ], [ 82.2514407, 16.6994759 ], [ 82.2519744, 16.6993434 ], [ 82.254099, 16.6972699 ], [ 82.2546327, 16.6971383 ], [ 82.2551572, 16.6955897 ], [ 82.2556917, 16.6955863 ], [ 82.2560854, 16.6945536 ], [ 82.2563426, 16.6930066 ], [ 82.2568652, 16.6912003 ], [ 82.2573948, 16.6904243 ], [ 82.2573897, 16.6896517 ], [ 82.257914, 16.688103 ], [ 82.257909, 16.6873302 ], [ 82.2581712, 16.6865559 ], [ 82.2581644, 16.6855256 ], [ 82.2584265, 16.6847513 ], [ 82.2584199, 16.683721 ], [ 82.2586821, 16.6829467 ], [ 82.2586753, 16.6819163 ], [ 82.2589391, 16.6813996 ], [ 82.2591946, 16.679595 ], [ 82.2591844, 16.6780495 ], [ 82.2594468, 16.6772752 ], [ 82.2594314, 16.6749569 ], [ 82.259687, 16.6731524 ], [ 82.2602147, 16.6721189 ], [ 82.2602079, 16.6710885 ], [ 82.2607338, 16.6697974 ], [ 82.2609926, 16.6685079 ], [ 82.2609826, 16.6669624 ], [ 82.2605755, 16.6659346 ], [ 82.2600402, 16.6658086 ], [ 82.2596346, 16.6651677 ], [ 82.2589629, 16.6645273 ], [ 82.2584277, 16.6644022 ], [ 82.2584243, 16.663887 ], [ 82.2578898, 16.6638902 ], [ 82.2577507, 16.6631183 ], [ 82.2576167, 16.66299 ], [ 82.2570814, 16.6628649 ], [ 82.2572264, 16.664667 ], [ 82.2569659, 16.6656989 ], [ 82.2571101, 16.6672436 ], [ 82.2568429, 16.6672452 ], [ 82.2564146, 16.6631265 ], [ 82.2566785, 16.6626097 ], [ 82.2566751, 16.6620945 ], [ 82.2564063, 16.6618386 ], [ 82.2559992, 16.6608108 ], [ 82.2555551, 16.6607248 ], [ 82.255463, 16.6605564 ], [ 82.255196, 16.660558 ], [ 82.2551977, 16.6608156 ], [ 82.2553734, 16.6609021 ], [ 82.2553407, 16.6623603 ], [ 82.2554766, 16.6626169 ], [ 82.2548575, 16.6637388 ], [ 82.2543916, 16.6646629 ], [ 82.2537577, 16.6654608 ], [ 82.2533623, 16.6662359 ], [ 82.253095, 16.6662376 ], [ 82.2530918, 16.6657224 ], [ 82.2533589, 16.6657209 ], [ 82.2540922, 16.6644988 ], [ 82.2544144, 16.6636538 ], [ 82.2549455, 16.6631354 ], [ 82.2549421, 16.6626203 ], [ 82.2547879, 16.6595302 ], [ 82.2542502, 16.6590182 ], [ 82.2542468, 16.6585032 ], [ 82.2539761, 16.6579896 ], [ 82.2534082, 16.6528413 ], [ 82.254188, 16.649488 ], [ 82.2549829, 16.6484529 ], [ 82.255112, 16.6476793 ], [ 82.2556463, 16.6476761 ], [ 82.2563088, 16.6468993 ], [ 82.2564396, 16.6463833 ], [ 82.257504, 16.6457326 ], [ 82.2585662, 16.6446958 ], [ 82.2590996, 16.6445642 ], [ 82.2593602, 16.6435323 ], [ 82.2585594, 16.6436655 ], [ 82.2548272, 16.644976 ], [ 82.2545617, 16.6452352 ], [ 82.249223, 16.6460401 ], [ 82.2457495, 16.6460611 ], [ 82.245484, 16.6463202 ], [ 82.2441481, 16.6463281 ], [ 82.2438792, 16.6460722 ], [ 82.2428087, 16.6458211 ], [ 82.2425399, 16.6455652 ], [ 82.2420047, 16.64544 ], [ 82.2418673, 16.6449256 ], [ 82.2410591, 16.6439001 ], [ 82.2401187, 16.6430038 ], [ 82.2379788, 16.6426306 ], [ 82.2342332, 16.6418802 ], [ 82.2342364, 16.6423952 ], [ 82.2337021, 16.6423985 ], [ 82.2337053, 16.6429137 ], [ 82.2318391, 16.6435682 ], [ 82.2289002, 16.6435858 ], [ 82.2264889, 16.6425695 ], [ 82.2262202, 16.6423136 ], [ 82.2251489, 16.6419341 ], [ 82.2250115, 16.6414196 ], [ 82.2238057, 16.6407823 ], [ 82.2227305, 16.6397583 ], [ 82.2213912, 16.639251 ], [ 82.2205832, 16.6382255 ], [ 82.2189752, 16.6374622 ], [ 82.2181688, 16.6366941 ], [ 82.2170968, 16.6361853 ], [ 82.2166916, 16.635544 ], [ 82.21602, 16.6349037 ], [ 82.2152168, 16.6346508 ], [ 82.2145443, 16.6340112 ], [ 82.2141401, 16.633369 ], [ 82.2132003, 16.6327311 ], [ 82.2126596, 16.6317039 ], [ 82.2121221, 16.6311919 ], [ 82.2117176, 16.6305497 ], [ 82.2111826, 16.6304246 ], [ 82.2110437, 16.6296527 ], [ 82.20969, 16.6268269 ], [ 82.2085972, 16.6229696 ], [ 82.2080516, 16.6211696 ], [ 82.2072357, 16.6188561 ], [ 82.2064277, 16.6178304 ], [ 82.2052187, 16.6166778 ], [ 82.2044156, 16.6164249 ], [ 82.2038781, 16.6159128 ], [ 82.2020064, 16.6156661 ], [ 82.2009356, 16.6152864 ], [ 82.2009388, 16.6158014 ], [ 82.1979928, 16.6146589 ], [ 82.1977241, 16.6144028 ], [ 82.1966532, 16.6140231 ], [ 82.1965158, 16.6135087 ], [ 82.1959768, 16.6127391 ], [ 82.1954393, 16.6122269 ], [ 82.195303, 16.6117126 ], [ 82.1947687, 16.6117156 ], [ 82.1947624, 16.6106852 ], [ 82.1942281, 16.6106884 ], [ 82.1940845, 16.6091437 ], [ 82.1938157, 16.6088876 ], [ 82.1925823, 16.6037429 ], [ 82.1920473, 16.6036168 ], [ 82.1915098, 16.6031046 ], [ 82.1907052, 16.6025941 ], [ 82.1885682, 16.6026062 ], [ 82.1877683, 16.6028684 ], [ 82.1866997, 16.6028746 ], [ 82.1864342, 16.6031337 ], [ 82.1848347, 16.603658 ], [ 82.1840363, 16.6041777 ], [ 82.183238, 16.6046973 ], [ 82.1827069, 16.6052155 ], [ 82.1811064, 16.6056115 ], [ 82.1811097, 16.6061267 ], [ 82.1800418, 16.6062611 ], [ 82.1787109, 16.6070415 ], [ 82.177643, 16.6071768 ], [ 82.1776462, 16.6076918 ], [ 82.1763113, 16.6078277 ], [ 82.1757785, 16.6080883 ], [ 82.1683049, 16.6091609 ], [ 82.1680392, 16.60942 ], [ 82.166438, 16.6096865 ], [ 82.1661722, 16.6099456 ], [ 82.1645725, 16.6104697 ], [ 82.1640414, 16.610988 ], [ 82.1629743, 16.6112514 ], [ 82.1619103, 16.6120303 ], [ 82.1611136, 16.6128075 ], [ 82.1605801, 16.6129398 ], [ 82.1604491, 16.6134556 ], [ 82.159784, 16.6138453 ], [ 82.1591195, 16.6144934 ], [ 82.1588555, 16.6150101 ], [ 82.1575274, 16.6163055 ], [ 82.1570008, 16.6175964 ], [ 82.1571441, 16.6191411 ], [ 82.1576784, 16.619138 ], [ 82.1579502, 16.6199094 ], [ 82.1590227, 16.6205468 ], [ 82.1603616, 16.6210547 ], [ 82.1608991, 16.6215669 ], [ 82.1619692, 16.6218184 ], [ 82.1627753, 16.6225867 ], [ 82.1646532, 16.6238642 ], [ 82.1651885, 16.6239904 ], [ 82.1664011, 16.6257867 ], [ 82.1662743, 16.6268179 ], [ 82.1668086, 16.6268148 ], [ 82.1664213, 16.6291352 ], [ 82.1661573, 16.6296519 ], [ 82.1638999, 16.6318538 ], [ 82.1632338, 16.6322442 ], [ 82.1631038, 16.6327602 ], [ 82.1625703, 16.6328916 ], [ 82.162173, 16.6335381 ], [ 82.161376, 16.6343155 ], [ 82.1608494, 16.6356064 ], [ 82.1605839, 16.6358653 ], [ 82.1599318, 16.638445 ], [ 82.1604661, 16.6384419 ], [ 82.1607364, 16.6389556 ], [ 82.1602021, 16.6389587 ], [ 82.1600758, 16.6402473 ], [ 82.1606304, 16.6435929 ], [ 82.1608991, 16.643849 ], [ 82.1611724, 16.6448778 ], [ 82.1609129, 16.6461671 ], [ 82.1603816, 16.6466854 ], [ 82.1595926, 16.6487506 ], [ 82.159069, 16.6505566 ], [ 82.1593733, 16.6567371 ], [ 82.1599263, 16.659825 ], [ 82.1604686, 16.66111 ], [ 82.1606088, 16.6621395 ], [ 82.1611433, 16.6621367 ], [ 82.1615546, 16.6639375 ], [ 82.1618233, 16.6641936 ], [ 82.1623671, 16.665736 ], [ 82.1629046, 16.6662482 ], [ 82.1631796, 16.6675345 ], [ 82.162928, 16.6701119 ], [ 82.1616028, 16.6719225 ], [ 82.1614727, 16.6724383 ], [ 82.1604053, 16.672702 ], [ 82.1602743, 16.6732179 ], [ 82.1588135, 16.6746424 ], [ 82.1582805, 16.6749029 ], [ 82.1576175, 16.6758086 ], [ 82.1576205, 16.6763238 ], [ 82.1572218, 16.6765836 ], [ 82.1572185, 16.6760684 ], [ 82.1564208, 16.6767165 ], [ 82.155887, 16.6768486 ], [ 82.1558918, 16.6776214 ], [ 82.1548228, 16.6776273 ], [ 82.1548258, 16.6781425 ], [ 82.1513586, 16.6793206 ], [ 82.1492284, 16.6806203 ], [ 82.1481656, 16.6816566 ], [ 82.145768, 16.6829579 ], [ 82.1452365, 16.6834759 ], [ 82.1419039, 16.6849116 ], [ 82.1417738, 16.6854275 ], [ 82.1423083, 16.6854245 ], [ 82.1424446, 16.685939 ], [ 82.1427134, 16.6861951 ], [ 82.1431208, 16.6872232 ], [ 82.1447281, 16.6878579 ], [ 82.1449969, 16.688114 ], [ 82.1460675, 16.6883655 ], [ 82.1484805, 16.6896401 ], [ 82.1527659, 16.691162 ], [ 82.1530346, 16.6914181 ], [ 82.1549101, 16.6921803 ], [ 82.155179, 16.6924364 ], [ 82.15598, 16.6923035 ], [ 82.1569211, 16.6933287 ], [ 82.1571915, 16.6938424 ], [ 82.157998, 16.6946107 ], [ 82.1581352, 16.6951251 ], [ 82.1586704, 16.6952504 ], [ 82.1597441, 16.6960172 ], [ 82.1605506, 16.6967855 ], [ 82.1616221, 16.6971663 ], [ 82.1620271, 16.6979367 ], [ 82.1633712, 16.6992172 ], [ 82.1639152, 16.7007596 ], [ 82.1646011, 16.7035893 ], [ 82.1656755, 16.7044842 ], [ 82.1664805, 16.7049949 ], [ 82.1686234, 16.7057556 ], [ 82.1694285, 16.7062663 ], [ 82.169963, 16.7062633 ], [ 82.1704992, 16.7065178 ], [ 82.1721029, 16.7065086 ], [ 82.1723686, 16.7062497 ], [ 82.1737033, 16.7059845 ], [ 82.173969, 16.7057254 ], [ 82.1761025, 16.7049405 ], [ 82.1771709, 16.7048061 ], [ 82.1771677, 16.7042909 ], [ 82.1785033, 16.704154 ], [ 82.1790363, 16.7038934 ], [ 82.1811737, 16.7037528 ], [ 82.1811705, 16.7032377 ], [ 82.1830407, 16.7030977 ], [ 82.1833062, 16.7028386 ], [ 82.1842787, 16.7032135 ], [ 82.1849438, 16.7032616 ], [ 82.1866505, 16.7037544 ], [ 82.1883195, 16.7042111 ], [ 82.1898128, 16.7048241 ], [ 82.1904653, 16.7052448 ], [ 82.1908041, 16.7055333 ], [ 82.1909422, 16.7058578 ], [ 82.1917328, 16.7063025 ], [ 82.1924857, 16.7068313 ], [ 82.1928245, 16.7069034 ], [ 82.193088, 16.7075284 ], [ 82.1936904, 16.707889 ], [ 82.1939037, 16.7079251 ], [ 82.1940543, 16.7081895 ], [ 82.1956982, 16.709139 ], [ 82.1964512, 16.7094635 ], [ 82.1971288, 16.709752 ], [ 82.197819, 16.7100284 ], [ 82.1989735, 16.7108457 ], [ 82.1998645, 16.7108217 ], [ 82.2008307, 16.7109419 ], [ 82.2016213, 16.7111221 ], [ 82.2023366, 16.7112784 ], [ 82.2034283, 16.7116389 ], [ 82.2055617, 16.7123601 ] ] ], [ [ [ 82.0553869, 16.6744224 ], [ 82.0569917, 16.6746717 ], [ 82.059134, 16.6754336 ], [ 82.0596713, 16.675946 ], [ 82.0652891, 16.6769477 ], [ 82.0666254, 16.6769407 ], [ 82.0716912, 16.6783701 ], [ 82.0717109, 16.6782472 ], [ 82.0719725, 16.6773 ], [ 82.0733058, 16.6767779 ], [ 82.0738374, 16.6762599 ], [ 82.0743719, 16.6762572 ], [ 82.0743734, 16.6765149 ], [ 82.0768714, 16.6768471 ], [ 82.0776722, 16.6766666 ], [ 82.0775789, 16.6762404 ], [ 82.0778461, 16.6762391 ], [ 82.0777316, 16.6769336 ], [ 82.0767815, 16.6770174 ], [ 82.0757117, 16.6768938 ], [ 82.0739308, 16.6766861 ], [ 82.0733978, 16.6769465 ], [ 82.0724156, 16.6773854 ], [ 82.0723744, 16.6775555 ], [ 82.071888, 16.6784161 ], [ 82.0719826, 16.6791032 ], [ 82.0722506, 16.67923 ], [ 82.0745049, 16.6782125 ], [ 82.076312, 16.6786213 ], [ 82.0777426, 16.6791742 ], [ 82.0790026, 16.6804662 ], [ 82.0806708, 16.6823872 ], [ 82.0817888, 16.6833562 ], [ 82.082339, 16.6844442 ], [ 82.082339, 16.6847842 ], [ 82.0828359, 16.6860082 ], [ 82.0830134, 16.6869261 ], [ 82.0831553, 16.6877421 ], [ 82.0837942, 16.6888811 ], [ 82.0844686, 16.690462 ], [ 82.0846461, 16.691312 ], [ 82.0843621, 16.6915839 ], [ 82.0842734, 16.6917879 ], [ 82.0848768, 16.6926889 ], [ 82.0851607, 16.6934198 ], [ 82.0855689, 16.6941168 ], [ 82.0861191, 16.6949327 ], [ 82.0873791, 16.6958507 ], [ 82.0889408, 16.6966326 ], [ 82.0907865, 16.6978565 ], [ 82.0930226, 16.6989444 ], [ 82.0953119, 16.6997433 ], [ 82.0996067, 16.7011202 ], [ 82.1014346, 16.7014601 ], [ 82.1016653, 16.7012222 ], [ 82.1032625, 16.7003383 ], [ 82.1041853, 16.6996753 ], [ 82.1060133, 16.6975845 ], [ 82.1071313, 16.6972445 ], [ 82.1081961, 16.6969726 ], [ 82.1089947, 16.6970916 ], [ 82.1094384, 16.6985194 ], [ 82.1078767, 16.6991654 ], [ 82.1067409, 16.6996753 ], [ 82.1055518, 16.7011372 ], [ 82.1050017, 16.7018681 ], [ 82.1046645, 16.7021741 ], [ 82.1052642, 16.7023348 ], [ 82.1072218, 16.7030079 ], [ 82.1095559, 16.7031521 ], [ 82.1103089, 16.7028637 ], [ 82.1109614, 16.702455 ], [ 82.1122163, 16.7022867 ], [ 82.1133457, 16.7019021 ], [ 82.1141237, 16.7016858 ], [ 82.1142374, 16.7019937 ], [ 82.1071419, 16.7049352 ], [ 82.1075454, 16.7054483 ], [ 82.1076824, 16.7059628 ], [ 82.1111594, 16.70633 ], [ 82.1165044, 16.7061727 ], [ 82.1165104, 16.7072032 ], [ 82.1157085, 16.7072075 ], [ 82.1158878, 16.7078907 ], [ 82.1158034, 16.7078911 ], [ 82.1157115, 16.7077227 ], [ 82.1151768, 16.7077256 ], [ 82.1151783, 16.7079832 ], [ 82.1158476, 16.7082372 ], [ 82.1167814, 16.7078452 ], [ 82.1181133, 16.7070652 ], [ 82.118379, 16.7068063 ], [ 82.1191802, 16.7066736 ], [ 82.118373, 16.7057758 ], [ 82.1156958, 16.7050176 ], [ 82.1154263, 16.7046331 ], [ 82.1162273, 16.7044995 ], [ 82.1167589, 16.7039815 ], [ 82.1180908, 16.7032015 ], [ 82.1188918, 16.7030688 ], [ 82.1180848, 16.702171 ], [ 82.1172815, 16.701918 ], [ 82.1170128, 16.7016617 ], [ 82.1151388, 16.7011567 ], [ 82.1143324, 16.7003882 ], [ 82.1132634, 16.7003941 ], [ 82.1131284, 16.7002663 ], [ 82.1129908, 16.6994942 ], [ 82.1121883, 16.6993693 ], [ 82.1120549, 16.6994993 ], [ 82.1119247, 16.7000153 ], [ 82.1097896, 16.7005419 ], [ 82.1100598, 16.7010556 ], [ 82.1092571, 16.7009306 ], [ 82.1081902, 16.7013232 ], [ 82.1081872, 16.7008082 ], [ 82.1095214, 16.7004141 ], [ 82.1103188, 16.6996371 ], [ 82.1116506, 16.6988571 ], [ 82.1143242, 16.698972 ], [ 82.1143273, 16.699487 ], [ 82.1159332, 16.6998645 ], [ 82.1164707, 16.7003767 ], [ 82.1172755, 16.7008875 ], [ 82.1186149, 16.7013956 ], [ 82.1188837, 16.7016517 ], [ 82.1202875, 16.7018 ], [ 82.1205467, 16.7018993 ], [ 82.121389, 16.7025448 ], [ 82.1222185, 16.7031282 ], [ 82.1227498, 16.7033268 ], [ 82.1237995, 16.703513 ], [ 82.1245123, 16.7035378 ], [ 82.1250437, 16.7038481 ], [ 82.1258342, 16.7044439 ], [ 82.126236, 16.7050273 ], [ 82.1263526, 16.7049528 ], [ 82.1264433, 16.7044687 ], [ 82.1266636, 16.7040095 ], [ 82.1284132, 16.7031158 ], [ 82.1299165, 16.7028427 ], [ 82.1319123, 16.7026316 ], [ 82.1335193, 16.7026441 ], [ 82.1353984, 16.702582 ], [ 82.1360723, 16.7027682 ], [ 82.1371869, 16.7027061 ], [ 82.1391179, 16.7023958 ], [ 82.1417098, 16.70216 ], [ 82.1433557, 16.7022593 ], [ 82.1449497, 16.7025199 ], [ 82.1465929, 16.7029853 ], [ 82.1481324, 16.7036611 ], [ 82.1498919, 16.7043194 ], [ 82.1501943, 16.7045827 ], [ 82.1505334, 16.7048636 ], [ 82.151294, 16.705478 ], [ 82.1517888, 16.7058379 ], [ 82.1523203, 16.7063031 ], [ 82.1528427, 16.707014 ], [ 82.1532184, 16.7072949 ], [ 82.1539882, 16.7076021 ], [ 82.1546296, 16.7080146 ], [ 82.1550878, 16.7082691 ], [ 82.1553902, 16.7083218 ], [ 82.1561875, 16.7080585 ], [ 82.1568106, 16.7079444 ], [ 82.1581944, 16.7079531 ], [ 82.1582402, 16.7078654 ], [ 82.1574429, 16.7077688 ], [ 82.1558209, 16.7074265 ], [ 82.1551245, 16.7071018 ], [ 82.1545563, 16.7066805 ], [ 82.1541623, 16.706189 ], [ 82.1538507, 16.705636 ], [ 82.1536857, 16.7055394 ], [ 82.1533558, 16.7050655 ], [ 82.1529343, 16.7042053 ], [ 82.152572, 16.703399 ], [ 82.1519629, 16.7023182 ], [ 82.151492, 16.701602 ], [ 82.1506158, 16.7005013 ], [ 82.1502768, 16.6999045 ], [ 82.1499835, 16.699369 ], [ 82.1498644, 16.6989653 ], [ 82.1493323, 16.6980076 ], [ 82.1483826, 16.6956946 ], [ 82.1482332, 16.6946116 ], [ 82.1479675, 16.6938831 ], [ 82.1477751, 16.6934003 ], [ 82.1470236, 16.6924523 ], [ 82.1460797, 16.6914341 ], [ 82.1450625, 16.6907319 ], [ 82.1440179, 16.6896522 ], [ 82.143523, 16.6892923 ], [ 82.1423684, 16.6886954 ], [ 82.1410488, 16.6883794 ], [ 82.1404806, 16.6881337 ], [ 82.139161, 16.6877913 ], [ 82.1380614, 16.6877474 ], [ 82.1377498, 16.6878791 ], [ 82.1364485, 16.6881512 ], [ 82.1355688, 16.6884848 ], [ 82.1344233, 16.6888008 ], [ 82.1300396, 16.6897416 ], [ 82.1281711, 16.6901387 ], [ 82.12804, 16.6906547 ], [ 82.1271103, 16.6915608 ], [ 82.1263116, 16.6920803 ], [ 82.1257778, 16.6922124 ], [ 82.1257808, 16.6927276 ], [ 82.1253367, 16.6926415 ], [ 82.1252418, 16.6919579 ], [ 82.1228402, 16.6926144 ], [ 82.1196344, 16.6928894 ], [ 82.1188357, 16.6934088 ], [ 82.1172343, 16.6938044 ], [ 82.1172373, 16.6943196 ], [ 82.1169693, 16.6941918 ], [ 82.1156344, 16.6944566 ], [ 82.1152352, 16.6948456 ], [ 82.1151052, 16.6953614 ], [ 82.1135045, 16.6958853 ], [ 82.1133734, 16.6964011 ], [ 82.1128417, 16.6969191 ], [ 82.1127132, 16.6976927 ], [ 82.1124458, 16.697694 ], [ 82.1124429, 16.697179 ], [ 82.1113745, 16.697313 ], [ 82.1097686, 16.6969357 ], [ 82.1097673, 16.6966781 ], [ 82.1119067, 16.6969242 ], [ 82.1123042, 16.6964069 ], [ 82.1125671, 16.6956328 ], [ 82.1128328, 16.6953736 ], [ 82.112964, 16.6948577 ], [ 82.1134962, 16.6944681 ], [ 82.1142974, 16.6943355 ], [ 82.1142944, 16.6938203 ], [ 82.1148289, 16.6938174 ], [ 82.1148319, 16.6943324 ], [ 82.1153641, 16.6939427 ], [ 82.1161653, 16.6938102 ], [ 82.116428, 16.6930359 ], [ 82.1158927, 16.6929097 ], [ 82.115624, 16.6926534 ], [ 82.1153567, 16.6926549 ], [ 82.1148251, 16.6931729 ], [ 82.1145578, 16.6931744 ], [ 82.1142883, 16.6927898 ], [ 82.1148228, 16.692787 ], [ 82.114953, 16.6922712 ], [ 82.1142817, 16.6916303 ], [ 82.1108013, 16.6906186 ], [ 82.1094643, 16.6904974 ], [ 82.1094671, 16.6910127 ], [ 82.1088367, 16.6915317 ], [ 82.1092044, 16.6917868 ], [ 82.1092059, 16.6920444 ], [ 82.1084027, 16.6917912 ], [ 82.1083997, 16.6912759 ], [ 82.1090232, 16.6909265 ], [ 82.1089311, 16.6907579 ], [ 82.1082199, 16.6906732 ], [ 82.1075992, 16.6915379 ], [ 82.1070647, 16.6915407 ], [ 82.1070693, 16.6923134 ], [ 82.1054702, 16.6930947 ], [ 82.1041368, 16.6936171 ], [ 82.1038695, 16.6936186 ], [ 82.103868, 16.693361 ], [ 82.1054721, 16.6926366 ], [ 82.1066648, 16.6918004 ], [ 82.106796, 16.6912844 ], [ 82.1073297, 16.6911523 ], [ 82.1075956, 16.6908934 ], [ 82.1081279, 16.6905046 ], [ 82.10973, 16.6902385 ], [ 82.1097285, 16.6899809 ], [ 82.1086588, 16.6898573 ], [ 82.10839, 16.6896012 ], [ 82.1073188, 16.6892209 ], [ 82.1071815, 16.6887065 ], [ 82.1070477, 16.688578 ], [ 82.1062452, 16.688454 ], [ 82.1058349, 16.6869106 ], [ 82.1050258, 16.6856269 ], [ 82.1047571, 16.6853708 ], [ 82.104621, 16.6848564 ], [ 82.1038192, 16.6848605 ], [ 82.1038147, 16.6840879 ], [ 82.1024792, 16.6842232 ], [ 82.1014057, 16.6834563 ], [ 82.1009103, 16.6829349 ], [ 82.1003879, 16.682118 ], [ 82.0992538, 16.681021 ], [ 82.0990965, 16.680637 ], [ 82.0987155, 16.6803793 ], [ 82.0981789, 16.6799962 ], [ 82.0965724, 16.6794895 ], [ 82.0965694, 16.6789743 ], [ 82.0968374, 16.6791013 ], [ 82.0973719, 16.6790985 ], [ 82.0976399, 16.6792262 ], [ 82.0976414, 16.6794839 ], [ 82.0982689, 16.6798258 ], [ 82.0989806, 16.6799921 ], [ 82.098982, 16.6802495 ], [ 82.099518, 16.6805043 ], [ 82.0995195, 16.6807619 ], [ 82.1005943, 16.6817866 ], [ 82.1012664, 16.6825559 ], [ 82.1014433, 16.6829466 ], [ 82.1016714, 16.6831971 ], [ 82.102477, 16.6838373 ], [ 82.1024739, 16.6833221 ], [ 82.1038104, 16.6833151 ], [ 82.1044824, 16.6840843 ], [ 82.1046195, 16.6845988 ], [ 82.105154, 16.6845959 ], [ 82.1059661, 16.6863946 ], [ 82.1065006, 16.6863918 ], [ 82.1066367, 16.6869063 ], [ 82.1069054, 16.6871624 ], [ 82.1070424, 16.6876768 ], [ 82.1075777, 16.6878023 ], [ 82.1089215, 16.6890832 ], [ 82.1097232, 16.6890788 ], [ 82.1102592, 16.6893336 ], [ 82.1132029, 16.6899622 ], [ 82.1127911, 16.6881612 ], [ 82.1119848, 16.6873927 ], [ 82.1106382, 16.6855969 ], [ 82.1103649, 16.684568 ], [ 82.1098275, 16.6840556 ], [ 82.1094182, 16.6825122 ], [ 82.1088837, 16.6825152 ], [ 82.1087436, 16.6814856 ], [ 82.1082046, 16.6807156 ], [ 82.1076612, 16.6791729 ], [ 82.1073925, 16.6789169 ], [ 82.106716, 16.6773748 ], [ 82.1061808, 16.6772485 ], [ 82.1057743, 16.6763495 ], [ 82.1051029, 16.6757086 ], [ 82.1030035, 16.6753034 ], [ 82.101209, 16.6752554 ], [ 82.0993894, 16.6749909 ], [ 82.0984232, 16.6746423 ], [ 82.0968169, 16.6737287 ], [ 82.095951, 16.6730434 ], [ 82.095311, 16.6725506 ], [ 82.0944326, 16.671673 ], [ 82.0926507, 16.6701703 ], [ 82.0911071, 16.6689081 ], [ 82.0897519, 16.66773 ], [ 82.0867652, 16.6657464 ], [ 82.0866648, 16.6655059 ], [ 82.0854727, 16.6647846 ], [ 82.0846194, 16.6643999 ], [ 82.08349, 16.6641354 ], [ 82.0817708, 16.6638229 ], [ 82.0797629, 16.6639431 ], [ 82.0782571, 16.6639311 ], [ 82.0770524, 16.6641234 ], [ 82.0762367, 16.6644119 ], [ 82.0758979, 16.6646404 ], [ 82.0756594, 16.6652174 ], [ 82.0752704, 16.6667442 ], [ 82.074781, 16.6675496 ], [ 82.0738003, 16.6684373 ], [ 82.0729307, 16.6692024 ], [ 82.0715819, 16.6700014 ], [ 82.0703219, 16.6703244 ], [ 82.0687424, 16.6708175 ], [ 82.0677841, 16.6712425 ], [ 82.0661691, 16.6722625 ], [ 82.0652995, 16.6725515 ], [ 82.0633829, 16.6724665 ], [ 82.0603659, 16.6723135 ], [ 82.0575619, 16.6719055 ], [ 82.0561422, 16.6717015 ], [ 82.0505588, 16.6712274 ], [ 82.0505617, 16.6717426 ], [ 82.0492268, 16.6720068 ], [ 82.0490954, 16.6725228 ], [ 82.0488297, 16.6727817 ], [ 82.0481746, 16.6751034 ], [ 82.0497775, 16.674966 ], [ 82.0503105, 16.6747057 ], [ 82.0553869, 16.6744224 ] ] ], [ [ [ 82.2571457, 16.6523036 ], [ 82.2563609, 16.6548842 ], [ 82.2566516, 16.6584886 ], [ 82.2571893, 16.6590004 ], [ 82.2573267, 16.6595149 ], [ 82.2575027, 16.6596014 ], [ 82.2588094, 16.6615665 ], [ 82.2589468, 16.6620807 ], [ 82.2600173, 16.6623319 ], [ 82.260154, 16.6628462 ], [ 82.2606917, 16.6633582 ], [ 82.2608291, 16.6638725 ], [ 82.2613643, 16.6639976 ], [ 82.2629778, 16.6655332 ], [ 82.2635131, 16.6656591 ], [ 82.2640593, 16.6674589 ], [ 82.2645938, 16.6674557 ], [ 82.2646006, 16.6684859 ], [ 82.2656711, 16.6687369 ], [ 82.2658161, 16.6705392 ], [ 82.2660867, 16.6710528 ], [ 82.2666399, 16.6738826 ], [ 82.2666839, 16.6805795 ], [ 82.2664218, 16.681354 ], [ 82.2659323, 16.6817836 ], [ 82.2654895, 16.6817456 ], [ 82.2658856, 16.6810996 ], [ 82.2661392, 16.6790374 ], [ 82.2659739, 16.6741444 ], [ 82.2654396, 16.6741476 ], [ 82.2655828, 16.6756923 ], [ 82.2647947, 16.6777577 ], [ 82.2645292, 16.6780168 ], [ 82.2645326, 16.678532 ], [ 82.2640032, 16.6793081 ], [ 82.2634721, 16.6798265 ], [ 82.2634755, 16.6803415 ], [ 82.2626838, 16.6818919 ], [ 82.2626906, 16.6829221 ], [ 82.2624284, 16.6836965 ], [ 82.2624335, 16.6844693 ], [ 82.2619092, 16.686018 ], [ 82.2611126, 16.6867955 ], [ 82.2612517, 16.6875674 ], [ 82.2604483, 16.6873147 ], [ 82.2605847, 16.6878291 ], [ 82.2603209, 16.6883459 ], [ 82.2601944, 16.6893771 ], [ 82.2607289, 16.6893737 ], [ 82.2608858, 16.692979 ], [ 82.2611564, 16.6934925 ], [ 82.2612973, 16.6945218 ], [ 82.260762, 16.694396 ], [ 82.2603664, 16.6953003 ], [ 82.2599678, 16.6955604 ], [ 82.2603581, 16.6940125 ], [ 82.2603428, 16.6916944 ], [ 82.2597949, 16.6896369 ], [ 82.2593927, 16.6893818 ], [ 82.2592638, 16.6901554 ], [ 82.2587342, 16.6909314 ], [ 82.2582116, 16.6927377 ], [ 82.2582167, 16.6935103 ], [ 82.2579544, 16.6942846 ], [ 82.2579814, 16.6984058 ], [ 82.2582504, 16.6986619 ], [ 82.2583912, 16.6996912 ], [ 82.2581239, 16.6996929 ], [ 82.258129, 16.7004657 ], [ 82.2583963, 16.700464 ], [ 82.2583997, 16.7009792 ], [ 82.260542, 16.7016095 ], [ 82.2613437, 16.7016046 ], [ 82.2642887, 16.7023595 ], [ 82.2680289, 16.702079 ], [ 82.2706962, 16.7012899 ], [ 82.2725637, 16.7007632 ], [ 82.2757675, 16.7002283 ], [ 82.2773675, 16.6997033 ], [ 82.2776331, 16.6994441 ], [ 82.2781668, 16.6993124 ], [ 82.2782914, 16.6980238 ], [ 82.2773539, 16.6976428 ], [ 82.2771678, 16.6974193 ], [ 82.2738727, 16.6966339 ], [ 82.2728038, 16.6966405 ], [ 82.2722676, 16.6963861 ], [ 82.2703959, 16.6962693 ], [ 82.2693243, 16.6958891 ], [ 82.2679795, 16.6946093 ], [ 82.2671752, 16.6942285 ], [ 82.2667637, 16.6926855 ], [ 82.267143, 16.6893345 ], [ 82.2674103, 16.6893328 ], [ 82.2674373, 16.693454 ], [ 82.2679718, 16.6934508 ], [ 82.2681084, 16.693965 ], [ 82.2687796, 16.694347 ], [ 82.2694515, 16.6949871 ], [ 82.2693218, 16.6955031 ], [ 82.2695891, 16.6955016 ], [ 82.2695908, 16.695759 ], [ 82.2704857, 16.6960988 ], [ 82.2714622, 16.695876 ], [ 82.2715945, 16.6957467 ], [ 82.2717253, 16.6952308 ], [ 82.2722623, 16.6956135 ], [ 82.2730676, 16.6961236 ], [ 82.2736021, 16.6961204 ], [ 82.2744012, 16.6957295 ], [ 82.2745378, 16.6962438 ], [ 82.2746728, 16.6963714 ], [ 82.2768134, 16.696745 ], [ 82.2768151, 16.6970026 ], [ 82.2773505, 16.6971276 ], [ 82.2776178, 16.6971259 ], [ 82.2786902, 16.6976345 ], [ 82.2792281, 16.6981463 ], [ 82.285075, 16.6967963 ], [ 82.2853535, 16.6948891 ], [ 82.2845518, 16.694894 ], [ 82.2845499, 16.6946364 ], [ 82.2853518, 16.6946314 ], [ 82.2854416, 16.694461 ], [ 82.2861492, 16.693982 ], [ 82.2866828, 16.6938505 ], [ 82.2872991, 16.6924702 ], [ 82.2872899, 16.6911009 ], [ 82.2869224, 16.6897277 ], [ 82.28692, 16.6892311 ], [ 82.2859433, 16.6871785 ], [ 82.2852582, 16.686201 ], [ 82.28427, 16.6845653 ], [ 82.2833034, 16.6836449 ], [ 82.2827761, 16.6833082 ], [ 82.2821083, 16.6832128 ], [ 82.2817211, 16.6830284 ], [ 82.280995, 16.6825523 ], [ 82.2801899, 16.682042 ], [ 82.2796512, 16.6814009 ], [ 82.2791141, 16.6810183 ], [ 82.2783055, 16.679993 ], [ 82.2777703, 16.6798671 ], [ 82.2753558, 16.6784657 ], [ 82.2752182, 16.6779514 ], [ 82.2748145, 16.6774387 ], [ 82.2737431, 16.6770584 ], [ 82.2729362, 16.6762907 ], [ 82.2721311, 16.6757804 ], [ 82.2715959, 16.6756555 ], [ 82.2711844, 16.6741125 ], [ 82.2711691, 16.6717944 ], [ 82.2716898, 16.6697305 ], [ 82.2724864, 16.6689528 ], [ 82.2728835, 16.668306 ], [ 82.2739455, 16.6672692 ], [ 82.2755386, 16.6657139 ], [ 82.276872, 16.6653196 ], [ 82.2768686, 16.6648046 ], [ 82.2779332, 16.6641535 ], [ 82.2784668, 16.664022 ], [ 82.2784634, 16.6635067 ], [ 82.2803286, 16.6627226 ], [ 82.2803252, 16.6622074 ], [ 82.2816588, 16.6618124 ], [ 82.2821897, 16.6612939 ], [ 82.2845894, 16.6605064 ], [ 82.2859245, 16.6603697 ], [ 82.2860542, 16.6598537 ], [ 82.2859202, 16.6597252 ], [ 82.2853866, 16.6598579 ], [ 82.2853832, 16.6593427 ], [ 82.2848506, 16.6596035 ], [ 82.2848472, 16.6590885 ], [ 82.2845807, 16.6592185 ], [ 82.2824431, 16.6592317 ], [ 82.2819139, 16.6600078 ], [ 82.2811131, 16.660142 ], [ 82.2811165, 16.660657 ], [ 82.2808493, 16.6606587 ], [ 82.2805735, 16.6593726 ], [ 82.2800409, 16.6596334 ], [ 82.2800341, 16.6586031 ], [ 82.2781663, 16.6590006 ], [ 82.2765622, 16.6588821 ], [ 82.2769574, 16.6581068 ], [ 82.276954, 16.6575918 ], [ 82.27682, 16.6574633 ], [ 82.2765528, 16.657465 ], [ 82.2758886, 16.6581134 ], [ 82.2756265, 16.6588878 ], [ 82.2753609, 16.6591471 ], [ 82.2752313, 16.659663 ], [ 82.2744295, 16.659668 ], [ 82.2741761, 16.6617301 ], [ 82.2739088, 16.6617318 ], [ 82.2739054, 16.6612166 ], [ 82.2732404, 16.6617358 ], [ 82.2731107, 16.6622518 ], [ 82.2736433, 16.661991 ], [ 82.2735127, 16.6625069 ], [ 82.2733804, 16.6626362 ], [ 82.2728469, 16.6627687 ], [ 82.2733864, 16.6635381 ], [ 82.2725864, 16.6638006 ], [ 82.272583, 16.6632854 ], [ 82.2715125, 16.6630344 ], [ 82.2713749, 16.6625202 ], [ 82.2712411, 16.6623916 ], [ 82.2709739, 16.6623933 ], [ 82.2705751, 16.6627825 ], [ 82.2704454, 16.6632985 ], [ 82.2688412, 16.6631792 ], [ 82.2684358, 16.6625381 ], [ 82.2684324, 16.6620229 ], [ 82.2686979, 16.6617638 ], [ 82.2688285, 16.6612478 ], [ 82.268294, 16.661251 ], [ 82.2682923, 16.6609934 ], [ 82.2688268, 16.6609902 ], [ 82.2689582, 16.6607318 ], [ 82.26882, 16.65996 ], [ 82.2693545, 16.6599566 ], [ 82.2692101, 16.6584121 ], [ 82.2690761, 16.6582835 ], [ 82.2688091, 16.6582852 ], [ 82.2686758, 16.6584153 ], [ 82.2684205, 16.66022 ], [ 82.2680243, 16.6608658 ], [ 82.2674908, 16.6609983 ], [ 82.2678945, 16.6615111 ], [ 82.2680319, 16.6620254 ], [ 82.2674966, 16.6618995 ], [ 82.2669648, 16.6622896 ], [ 82.2672201, 16.6604848 ], [ 82.2669538, 16.6606148 ], [ 82.2658841, 16.6604929 ], [ 82.2658824, 16.6602355 ], [ 82.2669497, 16.6599713 ], [ 82.2669446, 16.6591987 ], [ 82.2658748, 16.659076 ], [ 82.2656085, 16.6592068 ], [ 82.2654694, 16.6584349 ], [ 82.2649315, 16.6579231 ], [ 82.2647934, 16.657151 ], [ 82.2645261, 16.6571527 ], [ 82.2644004, 16.6584413 ], [ 82.2638729, 16.659475 ], [ 82.2637448, 16.6602486 ], [ 82.2632105, 16.6602518 ], [ 82.2632137, 16.660767 ], [ 82.2629467, 16.6607685 ], [ 82.2629381, 16.6594807 ], [ 82.2626718, 16.6596107 ], [ 82.2616021, 16.6594888 ], [ 82.2616004, 16.6592312 ], [ 82.2624003, 16.6589688 ], [ 82.262525, 16.6576801 ], [ 82.262391, 16.6575517 ], [ 82.2618557, 16.6574266 ], [ 82.2617285, 16.6584578 ], [ 82.2618643, 16.6587145 ], [ 82.261329, 16.6585884 ], [ 82.2611941, 16.658461 ], [ 82.2609202, 16.6574323 ], [ 82.2615785, 16.6558829 ], [ 82.2599761, 16.6560208 ], [ 82.2597106, 16.6562801 ], [ 82.259177, 16.6564126 ], [ 82.2597064, 16.6556366 ], [ 82.2589049, 16.6556415 ], [ 82.259167, 16.6548672 ], [ 82.2599669, 16.6546046 ], [ 82.2596962, 16.6540911 ], [ 82.2602307, 16.6540879 ], [ 82.2612827, 16.6515056 ], [ 82.2604802, 16.6513813 ], [ 82.2602113, 16.6511253 ], [ 82.2583402, 16.6510084 ], [ 82.2583436, 16.6515236 ], [ 82.2575428, 16.6516566 ], [ 82.2571457, 16.6523036 ] ] ], [ [ [ 82.2817338, 16.6827945 ], [ 82.2823426, 16.6830312 ], [ 82.2829841, 16.683101 ], [ 82.2835089, 16.6833244 ], [ 82.2839462, 16.6837294 ], [ 82.2844418, 16.6844974 ], [ 82.2854477, 16.6859776 ], [ 82.2862932, 16.6870947 ], [ 82.286818, 16.6883235 ], [ 82.2871095, 16.6891334 ], [ 82.2871897, 16.689726 ], [ 82.2874656, 16.6910123 ], [ 82.287476, 16.6925575 ], [ 82.2873471, 16.6933311 ], [ 82.2870833, 16.693848 ], [ 82.2864199, 16.6944956 ], [ 82.2858863, 16.6946282 ], [ 82.2857573, 16.6954016 ], [ 82.2864363, 16.6969429 ], [ 82.2907089, 16.6964012 ], [ 82.2911058, 16.6958836 ], [ 82.2912262, 16.6938221 ], [ 82.2918881, 16.6930807 ], [ 82.292066, 16.6922743 ], [ 82.2918288, 16.6913431 ], [ 82.2918051, 16.6904004 ], [ 82.2918407, 16.6891512 ], [ 82.2919933, 16.6886658 ], [ 82.2919897, 16.6881506 ], [ 82.2926985, 16.6879764 ], [ 82.2928758, 16.6878189 ], [ 82.2931146, 16.6875981 ], [ 82.2934112, 16.6872805 ], [ 82.2933985, 16.6853961 ], [ 82.2930292, 16.6837653 ], [ 82.2932965, 16.6837636 ], [ 82.2933834, 16.6831593 ], [ 82.2932897, 16.6827333 ], [ 82.2944847, 16.6816955 ], [ 82.2946136, 16.680922 ], [ 82.2930094, 16.6808027 ], [ 82.2919343, 16.6799083 ], [ 82.2917467, 16.6781941 ], [ 82.2911207, 16.6781104 ], [ 82.2907125, 16.6770826 ], [ 82.2906656, 16.6763979 ], [ 82.290661, 16.6757065 ], [ 82.2904261, 16.674251 ], [ 82.2906883, 16.6734767 ], [ 82.2910869, 16.6730873 ], [ 82.2925981, 16.6730373 ], [ 82.2933123, 16.672599 ], [ 82.2936172, 16.6719129 ], [ 82.2938827, 16.6716538 ], [ 82.2940099, 16.6706226 ], [ 82.2934745, 16.6704967 ], [ 82.2932056, 16.6702408 ], [ 82.2926703, 16.6701157 ], [ 82.2926616, 16.6688278 ], [ 82.2921281, 16.6689596 ], [ 82.2918627, 16.6692189 ], [ 82.2913282, 16.6692221 ], [ 82.2909243, 16.6688388 ], [ 82.2905102, 16.6667808 ], [ 82.2883734, 16.6669223 ], [ 82.2851729, 16.6678441 ], [ 82.285171, 16.6675867 ], [ 82.2862383, 16.6673225 ], [ 82.2863696, 16.6670641 ], [ 82.2872984, 16.666028 ], [ 82.2862305, 16.6661629 ], [ 82.285965, 16.6664221 ], [ 82.2846297, 16.6665597 ], [ 82.2846333, 16.6670749 ], [ 82.2843651, 16.6669473 ], [ 82.2827627, 16.6670864 ], [ 82.2827678, 16.667859 ], [ 82.2819653, 16.6677349 ], [ 82.2808973, 16.6678707 ], [ 82.2809007, 16.6683858 ], [ 82.2793001, 16.6687815 ], [ 82.2787707, 16.6695576 ], [ 82.2771674, 16.6695676 ], [ 82.2768977, 16.6691834 ], [ 82.277164, 16.6690524 ], [ 82.2776992, 16.6691782 ], [ 82.2778291, 16.6686623 ], [ 82.2766227, 16.6680253 ], [ 82.2758143, 16.667 ], [ 82.2752798, 16.6670032 ], [ 82.2750143, 16.6672625 ], [ 82.2742145, 16.6675251 ], [ 82.2739489, 16.6677842 ], [ 82.2732863, 16.6686903 ], [ 82.2724898, 16.669468 ], [ 82.2719604, 16.670244 ], [ 82.2717017, 16.6715334 ], [ 82.2717187, 16.6741093 ], [ 82.2722617, 16.6753937 ], [ 82.2732018, 16.6760314 ], [ 82.2737397, 16.6765434 ], [ 82.2750808, 16.6773079 ], [ 82.2756163, 16.6774338 ], [ 82.2756197, 16.677949 ], [ 82.2761525, 16.677688 ], [ 82.2762889, 16.6782024 ], [ 82.2772307, 16.6790977 ], [ 82.278572, 16.679862 ], [ 82.2791073, 16.6799881 ], [ 82.279109, 16.6802455 ], [ 82.2793762, 16.680244 ], [ 82.2792041, 16.6808479 ], [ 82.2799158, 16.6810134 ], [ 82.2799175, 16.681271 ], [ 82.2802781, 16.6816139 ], [ 82.2807227, 16.6817811 ], [ 82.2817338, 16.6827945 ] ] ], [ [ [ 82.3004284, 16.6911888 ], [ 82.3005554, 16.6901576 ], [ 82.2997546, 16.6902911 ], [ 82.299489, 16.6905502 ], [ 82.2989555, 16.6906829 ], [ 82.2989519, 16.6901676 ], [ 82.2981521, 16.6904304 ], [ 82.2984123, 16.6893984 ], [ 82.2976106, 16.6894033 ], [ 82.2978725, 16.688629 ], [ 82.297339, 16.6887607 ], [ 82.297204, 16.6886332 ], [ 82.2972023, 16.6883755 ], [ 82.2974677, 16.6881164 ], [ 82.2971918, 16.6868303 ], [ 82.2971831, 16.6855424 ], [ 82.2975809, 16.6850248 ], [ 82.2965095, 16.6846445 ], [ 82.2963745, 16.6845171 ], [ 82.2963709, 16.6840019 ], [ 82.2970292, 16.6824523 ], [ 82.2978344, 16.6829624 ], [ 82.2975618, 16.6821915 ], [ 82.2983636, 16.6821864 ], [ 82.298226, 16.6816721 ], [ 82.298092, 16.6815438 ], [ 82.297023, 16.6815504 ], [ 82.2967533, 16.6811661 ], [ 82.2975531, 16.6809036 ], [ 82.2975497, 16.6803884 ], [ 82.2970143, 16.6802625 ], [ 82.2968793, 16.6801351 ], [ 82.2967393, 16.6791057 ], [ 82.2965624, 16.6790182 ], [ 82.2967323, 16.6780754 ], [ 82.295404, 16.6792423 ], [ 82.2946032, 16.6793765 ], [ 82.2945962, 16.6783463 ], [ 82.2943292, 16.678348 ], [ 82.2943326, 16.6788632 ], [ 82.2937981, 16.6788664 ], [ 82.2939277, 16.6783504 ], [ 82.2941933, 16.6780913 ], [ 82.294188, 16.6773185 ], [ 82.293919, 16.6770626 ], [ 82.2937826, 16.6765483 ], [ 82.2932481, 16.6765517 ], [ 82.2932445, 16.6760365 ], [ 82.2921747, 16.675914 ], [ 82.2916412, 16.6760465 ], [ 82.2923036, 16.6752697 ], [ 82.2926928, 16.6734642 ], [ 82.2940271, 16.6731983 ], [ 82.294424, 16.6726806 ], [ 82.2944223, 16.672423 ], [ 82.2940203, 16.672168 ], [ 82.2940237, 16.6726831 ], [ 82.2926911, 16.6732066 ], [ 82.2916231, 16.6733415 ], [ 82.290824, 16.6737333 ], [ 82.2908378, 16.675794 ], [ 82.2908414, 16.676309 ], [ 82.2911154, 16.6773378 ], [ 82.2913826, 16.6773361 ], [ 82.2913861, 16.6778513 ], [ 82.2919222, 16.6781055 ], [ 82.2923331, 16.6796483 ], [ 82.293006, 16.6802877 ], [ 82.2935422, 16.6805419 ], [ 82.2943437, 16.6805368 ], [ 82.2948799, 16.6807912 ], [ 82.2953258, 16.6812627 ], [ 82.2955074, 16.6810854 ], [ 82.2954101, 16.6801442 ], [ 82.2958088, 16.6798842 ], [ 82.2959394, 16.6793682 ], [ 82.2961154, 16.6794547 ], [ 82.2960778, 16.6801401 ], [ 82.2956843, 16.6811729 ], [ 82.2955021, 16.6815657 ], [ 82.2952714, 16.6819795 ], [ 82.2935603, 16.6832468 ], [ 82.2935952, 16.6850077 ], [ 82.2935881, 16.687368 ], [ 82.2930323, 16.6879767 ], [ 82.2926575, 16.6881465 ], [ 82.2922606, 16.6886641 ], [ 82.2920423, 16.6891966 ], [ 82.2920423, 16.6903777 ], [ 82.292066, 16.6913203 ], [ 82.2923031, 16.6923084 ], [ 82.2920778, 16.6931261 ], [ 82.2917589, 16.6935613 ], [ 82.2919058, 16.695621 ], [ 82.2916404, 16.6958802 ], [ 82.2917814, 16.6969097 ], [ 82.2939238, 16.6975398 ], [ 82.2947255, 16.6975347 ], [ 82.2949944, 16.6977906 ], [ 82.298205, 16.6982856 ], [ 82.3016794, 16.6982638 ], [ 82.3019483, 16.6985197 ], [ 82.3027493, 16.6983863 ], [ 82.3023409, 16.6973585 ], [ 82.3023305, 16.6958133 ], [ 82.3016567, 16.6949155 ], [ 82.3005851, 16.6945362 ], [ 82.3005728, 16.6927333 ], [ 82.3000402, 16.6929941 ], [ 82.3001645, 16.6917055 ], [ 82.3004284, 16.6911888 ] ] ], [ [ [ 82.0650448, 16.6810705 ], [ 82.0629066, 16.6810815 ], [ 82.0627734, 16.6812113 ], [ 82.0626429, 16.6817273 ], [ 82.0607722, 16.6817369 ], [ 82.0607751, 16.6822519 ], [ 82.0602398, 16.6821255 ], [ 82.0601064, 16.6822553 ], [ 82.0599762, 16.6827713 ], [ 82.0594422, 16.6829023 ], [ 82.0574481, 16.684845 ], [ 82.0570512, 16.6854906 ], [ 82.056518, 16.6857509 ], [ 82.055587, 16.6866577 ], [ 82.0549244, 16.6875623 ], [ 82.0538575, 16.6879545 ], [ 82.0537261, 16.6884704 ], [ 82.0533279, 16.6888583 ], [ 82.0522602, 16.6891213 ], [ 82.0521268, 16.6892514 ], [ 82.0519964, 16.6897672 ], [ 82.0514626, 16.6898981 ], [ 82.0511967, 16.6901572 ], [ 82.0501298, 16.6905494 ], [ 82.0501327, 16.6910646 ], [ 82.0482631, 16.6913317 ], [ 82.0478673, 16.692364 ], [ 82.0477412, 16.6936528 ], [ 82.0485466, 16.6942922 ], [ 82.0492164, 16.6946757 ], [ 82.0493532, 16.6951901 ], [ 82.0498885, 16.6953158 ], [ 82.051229, 16.6960818 ], [ 82.0528412, 16.6976192 ], [ 82.0533772, 16.6978739 ], [ 82.0544521, 16.6988989 ], [ 82.0555233, 16.6992803 ], [ 82.0557947, 16.7000518 ], [ 82.056866, 16.7004322 ], [ 82.0574035, 16.7009446 ], [ 82.0582081, 16.7014557 ], [ 82.0587433, 16.7015823 ], [ 82.0588807, 16.7023544 ], [ 82.0587484, 16.7024835 ], [ 82.058481, 16.7024848 ], [ 82.0576756, 16.7018454 ], [ 82.057813, 16.7026175 ], [ 82.0580818, 16.7028735 ], [ 82.0584889, 16.7039019 ], [ 82.0590234, 16.7038992 ], [ 82.0602328, 16.705181 ], [ 82.0603698, 16.7056955 ], [ 82.0619786, 16.7065883 ], [ 82.0659922, 16.7073406 ], [ 82.0662579, 16.7070814 ], [ 82.0670584, 16.7068199 ], [ 82.0673243, 16.7065607 ], [ 82.0678582, 16.7064298 ], [ 82.0681211, 16.7056556 ], [ 82.0689194, 16.705007 ], [ 82.0697183, 16.7044876 ], [ 82.0702523, 16.7043566 ], [ 82.0705154, 16.7035825 ], [ 82.071315, 16.7031914 ], [ 82.0721162, 16.703059 ], [ 82.0721147, 16.7028013 ], [ 82.0718474, 16.7028027 ], [ 82.0721126, 16.7024145 ], [ 82.0723798, 16.7024131 ], [ 82.0726486, 16.7026694 ], [ 82.0758552, 16.7025243 ], [ 82.0759854, 16.7020085 ], [ 82.0751706, 16.6996944 ], [ 82.0744985, 16.698925 ], [ 82.0750332, 16.6989223 ], [ 82.0751606, 16.6978911 ], [ 82.0748847, 16.696347 ], [ 82.0750173, 16.6960888 ], [ 82.0744828, 16.6960915 ], [ 82.0740627, 16.692745 ], [ 82.0735252, 16.6922327 ], [ 82.0733878, 16.6914606 ], [ 82.0728533, 16.6914632 ], [ 82.0727163, 16.6909488 ], [ 82.0725825, 16.6908203 ], [ 82.0720472, 16.6906946 ], [ 82.0718671, 16.6900104 ], [ 82.0723109, 16.6900488 ], [ 82.0728474, 16.690433 ], [ 82.0729792, 16.6901746 ], [ 82.0729748, 16.6894018 ], [ 82.0725722, 16.689017 ], [ 82.072037, 16.6888915 ], [ 82.0714925, 16.6870911 ], [ 82.0717597, 16.6870898 ], [ 82.0720313, 16.6878611 ], [ 82.0728359, 16.6883721 ], [ 82.0729676, 16.688114 ], [ 82.0728287, 16.6870843 ], [ 82.0722942, 16.6870869 ], [ 82.072017, 16.6852852 ], [ 82.0714825, 16.685288 ], [ 82.0713454, 16.6847736 ], [ 82.0704056, 16.6838764 ], [ 82.0696023, 16.683623 ], [ 82.0687962, 16.6828543 ], [ 82.0677252, 16.6824738 ], [ 82.0677223, 16.6819586 ], [ 82.0658507, 16.6818392 ], [ 82.0650448, 16.6810705 ] ] ], [ [ [ 82.0953558, 16.7004895 ], [ 82.0892112, 16.7010372 ], [ 82.0835962, 16.7006808 ], [ 82.0838707, 16.7019673 ], [ 82.0844053, 16.7019645 ], [ 82.0844082, 16.7024797 ], [ 82.0857469, 16.7028586 ], [ 82.0868217, 16.7038834 ], [ 82.0876265, 16.7043942 ], [ 82.0881619, 16.7045207 ], [ 82.0881647, 16.7050359 ], [ 82.0889674, 16.7051601 ], [ 82.0892339, 16.7050302 ], [ 82.0892368, 16.7055454 ], [ 82.0897707, 16.7054133 ], [ 82.0903082, 16.7059257 ], [ 82.091113, 16.7064368 ], [ 82.0921842, 16.7068178 ], [ 82.092319, 16.7070748 ], [ 82.0923218, 16.7075899 ], [ 82.0921901, 16.7078482 ], [ 82.092992, 16.7078441 ], [ 82.0932651, 16.708873 ], [ 82.0934411, 16.7089597 ], [ 82.0932696, 16.7096456 ], [ 82.0938049, 16.7097713 ], [ 82.0946112, 16.7105398 ], [ 82.0955896, 16.7107514 ], [ 82.0954167, 16.7111799 ], [ 82.0962186, 16.7111756 ], [ 82.0962216, 16.7116908 ], [ 82.0956854, 16.711436 ], [ 82.0962333, 16.7137514 ], [ 82.0970374, 16.7141332 ], [ 82.0975749, 16.7146456 ], [ 82.0981103, 16.7147719 ], [ 82.0983717, 16.7137401 ], [ 82.0985477, 16.7138269 ], [ 82.0986448, 16.714769 ], [ 82.099714, 16.7147633 ], [ 82.0997155, 16.715021 ], [ 82.1005197, 16.7154027 ], [ 82.1007869, 16.7154012 ], [ 82.1015858, 16.7148819 ], [ 82.1021175, 16.7143638 ], [ 82.1034518, 16.7139707 ], [ 82.1034473, 16.7131979 ], [ 82.102912, 16.7130716 ], [ 82.1026425, 16.712687 ], [ 82.1041534, 16.7125091 ], [ 82.1042462, 16.7126785 ], [ 82.1045136, 16.712677 ], [ 82.1045121, 16.7124196 ], [ 82.1039754, 16.7120355 ], [ 82.1031719, 16.7117823 ], [ 82.1020969, 16.7107575 ], [ 82.1015607, 16.7105027 ], [ 82.0986206, 16.7105184 ], [ 82.0982169, 16.7101347 ], [ 82.0980808, 16.7096203 ], [ 82.0970116, 16.7096259 ], [ 82.097675, 16.7088495 ], [ 82.0976705, 16.7080767 ], [ 82.0975367, 16.7079482 ], [ 82.097002, 16.707951 ], [ 82.096824, 16.7076537 ], [ 82.0978024, 16.7076893 ], [ 82.1002118, 16.7083209 ], [ 82.0994048, 16.7074232 ], [ 82.0988693, 16.7072977 ], [ 82.0984592, 16.7057543 ], [ 82.0977892, 16.705371 ], [ 82.0968482, 16.7044748 ], [ 82.0965779, 16.7039611 ], [ 82.0951003, 16.7025517 ], [ 82.0937616, 16.7021727 ], [ 82.0937601, 16.7019153 ], [ 82.0940268, 16.7017845 ], [ 82.0956318, 16.7020336 ], [ 82.0969704, 16.7024135 ], [ 82.0968291, 16.7011262 ], [ 82.0964263, 16.7007414 ], [ 82.0953558, 16.7004895 ] ] ], [ [ [ 82.1842443, 16.7148053 ], [ 82.1815588, 16.7147813 ], [ 82.1789988, 16.7153341 ], [ 82.1760875, 16.7160553 ], [ 82.1758616, 16.7161754 ], [ 82.1753095, 16.7170408 ], [ 82.1745565, 16.7182426 ], [ 82.1736028, 16.7192762 ], [ 82.173402, 16.7198771 ], [ 82.1739793, 16.7205021 ], [ 82.1751295, 16.7206588 ], [ 82.1759331, 16.7209119 ], [ 82.1784216, 16.7213193 ], [ 82.1811824, 16.721079 ], [ 82.1832153, 16.7208386 ], [ 82.1847964, 16.7204781 ], [ 82.1873815, 16.7193964 ], [ 82.1898182, 16.7185141 ], [ 82.1917234, 16.7177619 ], [ 82.1945846, 16.7166321 ], [ 82.1961657, 16.7159591 ], [ 82.1973704, 16.7149736 ], [ 82.1970191, 16.7147813 ], [ 82.196492, 16.7143726 ], [ 82.1955634, 16.7145409 ], [ 82.1944089, 16.7151178 ], [ 82.1920246, 16.7153582 ], [ 82.1898913, 16.715214 ], [ 82.1882348, 16.715214 ], [ 82.1842443, 16.7148053 ] ] ], [ [ [ 73.00872, 11.48724 ], [ 73.00881, 11.48718 ], [ 73.00897, 11.48651 ], [ 73.00912, 11.48527 ], [ 73.00911, 11.48099 ], [ 73.00914, 11.4808 ], [ 73.0093, 11.4802 ], [ 73.00929, 11.47987 ], [ 73.00948, 11.47843 ], [ 73.00965, 11.47738 ], [ 73.00978, 11.47688 ], [ 73.01002, 11.47558 ], [ 73.01023, 11.47504 ], [ 73.01106, 11.47202 ], [ 73.01112, 11.47164 ], [ 73.01105, 11.47111 ], [ 73.01078, 11.47058 ], [ 73.0104, 11.47016 ], [ 73.01011, 11.46988 ], [ 73.00884, 11.46894 ], [ 73.00777, 11.46828 ], [ 73.00733, 11.46815 ], [ 73.00702, 11.46814 ], [ 73.00681, 11.46823 ], [ 73.00646, 11.46872 ], [ 73.00633, 11.46898 ], [ 73.00629, 11.46921 ], [ 73.0063, 11.46945 ], [ 73.00648, 11.47003 ], [ 73.00664, 11.47036 ], [ 73.00682, 11.47062 ], [ 73.00724, 11.47094 ], [ 73.00729, 11.47113 ], [ 73.0073, 11.47132 ], [ 73.00707, 11.47226 ], [ 73.00686, 11.4728 ], [ 73.00656, 11.47338 ], [ 73.00643, 11.47368 ], [ 73.00632, 11.47387 ], [ 73.00596, 11.4746 ], [ 73.00587, 11.47473 ], [ 73.00536, 11.47598 ], [ 73.00527, 11.47628 ], [ 73.00518, 11.47648 ], [ 73.00464, 11.4785 ], [ 73.00362, 11.48088 ], [ 73.00344, 11.48124 ], [ 73.00333, 11.48156 ], [ 73.00333, 11.48184 ], [ 73.00353, 11.48247 ], [ 73.00364, 11.48298 ], [ 73.00353, 11.48402 ], [ 73.00329, 11.48554 ], [ 73.0031, 11.48643 ], [ 73.0029, 11.48709 ], [ 73.00262, 11.48818 ], [ 73.00227, 11.48971 ], [ 73.002, 11.4906 ], [ 73.00158, 11.49155 ], [ 73.00117, 11.49216 ], [ 73.00111, 11.49228 ], [ 73.00101, 11.49234 ], [ 73.00073, 11.49232 ], [ 73.00009, 11.49233 ], [ 72.99945, 11.49245 ], [ 72.99919, 11.49253 ], [ 72.99894, 11.49278 ], [ 72.99883, 11.49283 ], [ 72.99874, 11.49297 ], [ 72.99867, 11.49314 ], [ 72.99833, 11.49422 ], [ 72.99831, 11.49437 ], [ 72.99812, 11.49485 ], [ 72.99798, 11.49504 ], [ 72.99761, 11.49536 ], [ 72.99743, 11.49562 ], [ 72.99735, 11.49579 ], [ 72.99733, 11.49597 ], [ 72.99744, 11.49625 ], [ 72.99761, 11.49645 ], [ 72.99771, 11.49662 ], [ 72.99779, 11.49668 ], [ 72.99802, 11.49666 ], [ 72.99813, 11.4967 ], [ 72.99819, 11.49678 ], [ 72.9982, 11.49684 ], [ 72.99813, 11.49686 ], [ 72.9981, 11.49691 ], [ 72.99816, 11.49695 ], [ 72.99828, 11.49694 ], [ 72.99838, 11.4969 ], [ 72.99855, 11.49692 ], [ 72.99936, 11.49716 ], [ 72.99951, 11.49728 ], [ 73.00001, 11.49735 ], [ 73.00022, 11.49742 ], [ 73.00047, 11.49743 ], [ 73.00059, 11.49731 ], [ 73.00086, 11.4973 ], [ 73.00096, 11.49736 ], [ 73.00106, 11.49737 ], [ 73.00121, 11.49735 ], [ 73.00126, 11.49728 ], [ 73.00173, 11.49706 ], [ 73.00205, 11.49682 ], [ 73.00243, 11.49658 ], [ 73.00275, 11.49633 ], [ 73.00323, 11.4959 ], [ 73.00391, 11.49494 ], [ 73.00433, 11.49446 ], [ 73.00454, 11.49415 ], [ 73.00479, 11.49369 ], [ 73.00501, 11.49338 ], [ 73.00532, 11.49305 ], [ 73.00555, 11.49287 ], [ 73.00565, 11.49266 ], [ 73.00621, 11.4919 ], [ 73.00649, 11.49143 ], [ 73.00731, 11.49018 ], [ 73.0076, 11.4896 ], [ 73.00797, 11.48907 ], [ 73.0082, 11.48845 ], [ 73.0084, 11.48801 ], [ 73.00847, 11.48773 ], [ 73.0086, 11.48744 ], [ 73.00872, 11.48724 ] ] ], [ [ [ 72.71389, 11.70164 ], [ 72.71458, 11.70241 ], [ 72.71473, 11.70262 ], [ 72.71491, 11.70305 ], [ 72.71495, 11.7032 ], [ 72.71495, 11.7034 ], [ 72.71491, 11.70349 ], [ 72.71462, 11.7036 ], [ 72.71463, 11.70367 ], [ 72.7147, 11.70377 ], [ 72.71486, 11.7038 ], [ 72.71485, 11.70397 ], [ 72.71468, 11.70414 ], [ 72.71454, 11.7046 ], [ 72.71445, 11.7047 ], [ 72.71442, 11.70486 ], [ 72.71432, 11.70494 ], [ 72.71388, 11.70497 ], [ 72.71375, 11.70508 ], [ 72.71371, 11.70531 ], [ 72.71384, 11.70561 ], [ 72.71386, 11.70572 ], [ 72.7139, 11.70573 ], [ 72.71396, 11.70564 ], [ 72.71409, 11.70556 ], [ 72.7145, 11.705 ], [ 72.71485, 11.70423 ], [ 72.71497, 11.70406 ], [ 72.71521, 11.70381 ], [ 72.71527, 11.70368 ], [ 72.71529, 11.70352 ], [ 72.71539, 11.7033 ], [ 72.71554, 11.7031 ], [ 72.71568, 11.70266 ], [ 72.71584, 11.70182 ], [ 72.71603, 11.70145 ], [ 72.71618, 11.70011 ], [ 72.71626, 11.69992 ], [ 72.71631, 11.69965 ], [ 72.71631, 11.6991 ], [ 72.71655, 11.6962 ], [ 72.71652, 11.69586 ], [ 72.71658, 11.69519 ], [ 72.71654, 11.69464 ], [ 72.71616, 11.69297 ], [ 72.71598, 11.69247 ], [ 72.71584, 11.69225 ], [ 72.71554, 11.69142 ], [ 72.71529, 11.69102 ], [ 72.71528, 11.69092 ], [ 72.71535, 11.69083 ], [ 72.71516, 11.69052 ], [ 72.7151, 11.69046 ], [ 72.715, 11.69041 ], [ 72.71488, 11.69023 ], [ 72.71472, 11.69007 ], [ 72.7144, 11.68965 ], [ 72.7141, 11.68933 ], [ 72.71391, 11.68903 ], [ 72.71373, 11.68881 ], [ 72.71345, 11.68854 ], [ 72.71333, 11.68837 ], [ 72.71332, 11.68825 ], [ 72.71341, 11.68818 ], [ 72.71339, 11.68814 ], [ 72.71331, 11.68811 ], [ 72.71313, 11.68795 ], [ 72.71296, 11.68772 ], [ 72.71237, 11.68709 ], [ 72.71192, 11.68652 ], [ 72.71083, 11.68499 ], [ 72.71069, 11.68483 ], [ 72.70972, 11.6834 ], [ 72.70965, 11.68326 ], [ 72.70965, 11.68317 ], [ 72.70961, 11.68303 ], [ 72.7093, 11.68259 ], [ 72.70898, 11.68224 ], [ 72.70869, 11.68204 ], [ 72.70818, 11.68157 ], [ 72.70774, 11.68124 ], [ 72.70764, 11.6812 ], [ 72.70708, 11.68123 ], [ 72.70652, 11.68118 ], [ 72.70619, 11.68113 ], [ 72.70598, 11.68115 ], [ 72.70538, 11.68126 ], [ 72.70465, 11.68154 ], [ 72.70447, 11.68164 ], [ 72.70435, 11.68176 ], [ 72.70428, 11.6819 ], [ 72.70428, 11.6821 ], [ 72.70473, 11.68325 ], [ 72.70492, 11.68359 ], [ 72.70516, 11.68386 ], [ 72.70539, 11.68387 ], [ 72.70548, 11.68384 ], [ 72.70565, 11.68386 ], [ 72.70638, 11.68423 ], [ 72.70666, 11.68441 ], [ 72.70713, 11.68497 ], [ 72.70755, 11.68555 ], [ 72.70781, 11.68585 ], [ 72.70799, 11.68612 ], [ 72.70835, 11.68761 ], [ 72.70867, 11.68856 ], [ 72.70894, 11.69038 ], [ 72.70926, 11.69141 ], [ 72.70937, 11.69167 ], [ 72.70944, 11.69178 ], [ 72.70969, 11.69199 ], [ 72.70989, 11.69233 ], [ 72.71001, 11.69262 ], [ 72.71012, 11.69299 ], [ 72.71117, 11.69507 ], [ 72.71143, 11.69548 ], [ 72.71185, 11.69632 ], [ 72.71215, 11.69698 ], [ 72.71247, 11.69813 ], [ 72.7125, 11.69835 ], [ 72.71262, 11.69893 ], [ 72.71266, 11.69929 ], [ 72.71272, 11.69954 ], [ 72.71295, 11.70015 ], [ 72.71305, 11.70028 ], [ 72.71325, 11.70087 ], [ 72.71365, 11.70138 ], [ 72.71377, 11.70148 ], [ 72.71389, 11.70164 ] ] ], [ [ [ 93.0534, 11.81394 ], [ 93.05258, 11.81401 ], [ 93.05206, 11.81401 ], [ 93.05167, 11.81371 ], [ 93.05104, 11.8136 ], [ 93.05004, 11.81379 ], [ 93.04904, 11.81426 ], [ 93.04798, 11.8146 ], [ 93.04719, 11.81473 ], [ 93.04614, 11.81471 ], [ 93.0444, 11.81551 ], [ 93.04319, 11.81628 ], [ 93.04254, 11.81709 ], [ 93.04182, 11.81755 ], [ 93.03963, 11.81838 ], [ 93.03904, 11.81902 ], [ 93.03863, 11.81955 ], [ 93.0377, 11.8201 ], [ 93.03676, 11.8207 ], [ 93.03565, 11.82149 ], [ 93.03454, 11.82204 ], [ 93.03326, 11.82257 ], [ 93.03226, 11.82308 ], [ 93.0318, 11.82365 ], [ 93.03152, 11.82459 ], [ 93.03143, 11.8252 ], [ 93.03131, 11.82581 ], [ 93.03095, 11.82662 ], [ 93.02996, 11.82712 ], [ 93.02904, 11.82738 ], [ 93.0275, 11.82761 ], [ 93.0254, 11.8286 ], [ 93.02405, 11.82932 ], [ 93.02246, 11.83028 ], [ 93.0209, 11.8309 ], [ 93.01967, 11.83134 ], [ 93.01832, 11.83155 ], [ 93.01657, 11.83125 ], [ 93.01596, 11.83078 ], [ 93.01553, 11.83104 ], [ 93.01475, 11.83201 ], [ 93.01444, 11.83286 ], [ 93.01499, 11.8334 ], [ 93.01525, 11.83395 ], [ 93.01494, 11.83481 ], [ 93.01515, 11.83582 ], [ 93.01494, 11.83687 ], [ 93.01366, 11.83811 ], [ 93.01307, 11.83904 ], [ 93.01297, 11.84133 ], [ 93.01325, 11.84373 ], [ 93.01297, 11.84721 ], [ 93.01261, 11.8492 ], [ 93.01261, 11.8495394 ], [ 93.01261, 11.84982 ], [ 93.01316, 11.85003 ], [ 93.01372, 11.84982 ], [ 93.01436, 11.84931 ], [ 93.0155, 11.84774 ], [ 93.01685, 11.84603 ], [ 93.01931, 11.84408 ], [ 93.02305, 11.84205 ], [ 93.02646, 11.84053 ], [ 93.02804, 11.83928 ], [ 93.03093, 11.83736 ], [ 93.03201, 11.83651 ], [ 93.03328, 11.83625 ], [ 93.03571, 11.83598 ], [ 93.03694, 11.83602 ], [ 93.03822, 11.83665 ], [ 93.03917, 11.83727 ], [ 93.04032, 11.83774 ], [ 93.04127, 11.83841 ], [ 93.04226, 11.83924 ], [ 93.04409, 11.84051 ], [ 93.0457, 11.84121 ], [ 93.04712, 11.84172 ], [ 93.04873, 11.8422 ], [ 93.05045, 11.84262 ], [ 93.05161, 11.84299 ], [ 93.05367, 11.84355 ], [ 93.05478, 11.84364 ], [ 93.05539, 11.84364 ], [ 93.05597, 11.8434 ], [ 93.05634, 11.84335 ], [ 93.05655, 11.84335 ], [ 93.05677, 11.84341 ], [ 93.05701, 11.84353 ], [ 93.05769, 11.8435 ], [ 93.05784, 11.84347 ], [ 93.058, 11.84348 ], [ 93.05819, 11.84364 ], [ 93.05868, 11.84378 ], [ 93.05896, 11.84392 ], [ 93.05926, 11.84398 ], [ 93.05939, 11.84396 ], [ 93.05951, 11.844 ], [ 93.05958, 11.84411 ], [ 93.05968, 11.84415 ], [ 93.05981, 11.84427 ], [ 93.06002, 11.84426 ], [ 93.06031, 11.84417 ], [ 93.06056, 11.84403 ], [ 93.06096, 11.84394 ], [ 93.06136, 11.84377 ], [ 93.06159, 11.84377 ], [ 93.06185, 11.84362 ], [ 93.06193, 11.8436 ], [ 93.06205, 11.84364 ], [ 93.06214, 11.84374 ], [ 93.06222, 11.84379 ], [ 93.06235, 11.84383 ], [ 93.06237, 11.84394 ], [ 93.06235, 11.8442 ], [ 93.0624, 11.84425 ], [ 93.06274, 11.84421 ], [ 93.06293, 11.84423 ], [ 93.06317, 11.84414 ], [ 93.06331, 11.8438 ], [ 93.06344, 11.84366 ], [ 93.06353, 11.84362 ], [ 93.06358, 11.84357 ], [ 93.06361, 11.84338 ], [ 93.06374, 11.84329 ], [ 93.06395, 11.84334 ], [ 93.06398, 11.84332 ], [ 93.06395, 11.84325 ], [ 93.06391, 11.84323 ], [ 93.0639, 11.84317 ], [ 93.06398, 11.8431 ], [ 93.06405, 11.84308 ], [ 93.06411, 11.84302 ], [ 93.06414, 11.84288 ], [ 93.06424, 11.84286 ], [ 93.06428, 11.84289 ], [ 93.06434, 11.84288 ], [ 93.06434, 11.84278 ], [ 93.06442, 11.84268 ], [ 93.06474, 11.84243 ], [ 93.06502, 11.84205 ], [ 93.06514, 11.84209 ], [ 93.06516, 11.84204 ], [ 93.06508, 11.84198 ], [ 93.06509, 11.84194 ], [ 93.06526, 11.84187 ], [ 93.06548, 11.84183 ], [ 93.0656, 11.84172 ], [ 93.06588, 11.84178 ], [ 93.06616, 11.84178 ], [ 93.06651, 11.84172 ], [ 93.0666, 11.84175 ], [ 93.06671, 11.84188 ], [ 93.06681, 11.8419 ], [ 93.067, 11.84179 ], [ 93.06722, 11.84175 ], [ 93.06729, 11.84179 ], [ 93.06736, 11.8418 ], [ 93.0674, 11.84192 ], [ 93.06745, 11.84193 ], [ 93.06747, 11.84178 ], [ 93.06782, 11.84169 ], [ 93.06797, 11.84158 ], [ 93.06806, 11.84156 ], [ 93.06809, 11.84162 ], [ 93.06798, 11.84166 ], [ 93.06795, 11.8417 ], [ 93.06797, 11.84173 ], [ 93.06834, 11.84173 ], [ 93.06848, 11.8418 ], [ 93.0686, 11.8418 ], [ 93.06872, 11.84173 ], [ 93.06887, 11.84173 ], [ 93.06891, 11.84176 ], [ 93.06896, 11.84176 ], [ 93.06913, 11.84158 ], [ 93.06913, 11.84155 ], [ 93.06907, 11.84152 ], [ 93.06906, 11.84147 ], [ 93.06909, 11.84145 ], [ 93.06909, 11.84135 ], [ 93.06915, 11.84135 ], [ 93.06917, 11.84137 ], [ 93.06916, 11.84142 ], [ 93.06918, 11.84146 ], [ 93.06922, 11.84144 ], [ 93.06929, 11.8413 ], [ 93.06935, 11.84125 ], [ 93.06934, 11.84117 ], [ 93.06939, 11.84111 ], [ 93.06964, 11.84118 ], [ 93.06987, 11.84111 ], [ 93.06986, 11.84107 ], [ 93.06979, 11.84103 ], [ 93.06978, 11.84071 ], [ 93.06986, 11.8406 ], [ 93.07006, 11.84049 ], [ 93.07029, 11.84045 ], [ 93.07027, 11.84041 ], [ 93.0702, 11.8404 ], [ 93.0702, 11.84027 ], [ 93.07032, 11.84017 ], [ 93.07041, 11.83998 ], [ 93.07061, 11.83975 ], [ 93.07053, 11.83956 ], [ 93.07054, 11.83948 ], [ 93.07061, 11.83938 ], [ 93.07073, 11.83905 ], [ 93.07114, 11.83855 ], [ 93.0712, 11.8384 ], [ 93.07123, 11.83826 ], [ 93.07127, 11.83819 ], [ 93.07116, 11.83808 ], [ 93.07116, 11.83803 ], [ 93.07124, 11.83785 ], [ 93.07126, 11.83757 ], [ 93.07118, 11.83737 ], [ 93.0711, 11.83724 ], [ 93.07106, 11.83699 ], [ 93.07107, 11.83693 ], [ 93.07121, 11.83687 ], [ 93.07121, 11.83661 ], [ 93.07126, 11.83649 ], [ 93.07131, 11.83647 ], [ 93.07138, 11.83612 ], [ 93.0713, 11.83604 ], [ 93.07128, 11.83598 ], [ 93.07129, 11.83593 ], [ 93.07133, 11.8359 ], [ 93.07153, 11.83586 ], [ 93.07152, 11.83579 ], [ 93.07145, 11.83571 ], [ 93.07146, 11.8355 ], [ 93.07134, 11.83538 ], [ 93.07132, 11.83529 ], [ 93.07136, 11.83525 ], [ 93.07148, 11.83524 ], [ 93.07153, 11.8352 ], [ 93.07159, 11.83507 ], [ 93.07156, 11.83504 ], [ 93.07141, 11.83504 ], [ 93.07136, 11.83502 ], [ 93.07135, 11.83497 ], [ 93.07151, 11.83481 ], [ 93.07149, 11.83471 ], [ 93.07138, 11.83462 ], [ 93.07141, 11.83425 ], [ 93.07127, 11.83411 ], [ 93.07129, 11.83405 ], [ 93.07119, 11.83398 ], [ 93.07106, 11.83397 ], [ 93.07099, 11.8339 ], [ 93.07112, 11.83379 ], [ 93.0712, 11.83364 ], [ 93.07123, 11.83362 ], [ 93.07124, 11.83356 ], [ 93.07116, 11.83347 ], [ 93.07114, 11.83338 ], [ 93.07105, 11.83337 ], [ 93.07098, 11.8333 ], [ 93.07094, 11.83314 ], [ 93.07085, 11.83309 ], [ 93.07066, 11.83313 ], [ 93.07061, 11.83308 ], [ 93.0705, 11.83278 ], [ 93.07053, 11.83262 ], [ 93.07052, 11.83257 ], [ 93.07044, 11.83257 ], [ 93.07035, 11.83248 ], [ 93.07025, 11.83252 ], [ 93.07003, 11.83235 ], [ 93.06975, 11.83222 ], [ 93.06971, 11.8321 ], [ 93.06974, 11.83205 ], [ 93.06962, 11.83191 ], [ 93.06961, 11.83169 ], [ 93.06956, 11.83156 ], [ 93.06955, 11.83143 ], [ 93.06941, 11.83118 ], [ 93.06918, 11.8309 ], [ 93.06902, 11.83079 ], [ 93.0689, 11.83066 ], [ 93.06847, 11.82997 ], [ 93.06852, 11.82986 ], [ 93.06848, 11.82967 ], [ 93.06842, 11.82956 ], [ 93.06847, 11.82949 ], [ 93.06835, 11.82948 ], [ 93.06829, 11.82937 ], [ 93.06828, 11.82916 ], [ 93.0682, 11.8289 ], [ 93.06774, 11.8284 ], [ 93.0675, 11.82828 ], [ 93.06743, 11.82822 ], [ 93.06729, 11.82814 ], [ 93.06727, 11.82808 ], [ 93.06715, 11.82797 ], [ 93.06709, 11.82795 ], [ 93.06706, 11.82779 ], [ 93.06699, 11.82767 ], [ 93.06684, 11.82747 ], [ 93.0666, 11.82708 ], [ 93.06654, 11.82702 ], [ 93.0665, 11.82692 ], [ 93.06631, 11.82666 ], [ 93.06574, 11.82629 ], [ 93.06562, 11.82626 ], [ 93.06551, 11.8262 ], [ 93.06527, 11.82614 ], [ 93.06511, 11.82601 ], [ 93.06514, 11.82593 ], [ 93.06508, 11.82588 ], [ 93.0651, 11.82581 ], [ 93.06516, 11.82575 ], [ 93.06516, 11.82572 ], [ 93.06493, 11.82556 ], [ 93.06484, 11.82553 ], [ 93.06446, 11.82521 ], [ 93.06434, 11.82506 ], [ 93.06432, 11.825 ], [ 93.0645, 11.82486 ], [ 93.0645, 11.82482 ], [ 93.06447, 11.82479 ], [ 93.06437, 11.82491 ], [ 93.06433, 11.82492 ], [ 93.06432, 11.82488 ], [ 93.06422, 11.82493 ], [ 93.06411, 11.82483 ], [ 93.06409, 11.82475 ], [ 93.06392, 11.82465 ], [ 93.06387, 11.82459 ], [ 93.06383, 11.82437 ], [ 93.06355, 11.82399 ], [ 93.06325, 11.8237 ], [ 93.06309, 11.82347 ], [ 93.06262, 11.82309 ], [ 93.06243, 11.82288 ], [ 93.06225, 11.82261 ], [ 93.06198, 11.82207 ], [ 93.06189, 11.82196 ], [ 93.06177, 11.8217 ], [ 93.0616, 11.82108 ], [ 93.06158, 11.82081 ], [ 93.06171, 11.82033 ], [ 93.06176, 11.82022 ], [ 93.06184, 11.82016 ], [ 93.06218, 11.82012 ], [ 93.06232, 11.82 ], [ 93.06241, 11.81986 ], [ 93.06255, 11.81977 ], [ 93.06267, 11.81943 ], [ 93.06285, 11.81912 ], [ 93.06284, 11.81895 ], [ 93.06266, 11.81871 ], [ 93.06235, 11.81843 ], [ 93.0619, 11.81809 ], [ 93.06147, 11.81739 ], [ 93.06102, 11.81694 ], [ 93.05966, 11.81605 ], [ 93.0582, 11.81517 ], [ 93.05698, 11.81479 ], [ 93.05544, 11.81437 ], [ 93.05444, 11.81406 ], [ 93.0534, 11.81394 ] ] ], [ [ [ 92.59792, 11.92866 ], [ 92.59744, 11.92895 ], [ 92.59736, 11.92918 ], [ 92.5973, 11.92946 ], [ 92.59666, 11.92947 ], [ 92.59638, 11.92943 ], [ 92.59634, 11.92967 ], [ 92.59654, 11.93001 ], [ 92.59676, 11.93048 ], [ 92.59678, 11.93081 ], [ 92.59643, 11.93104 ], [ 92.59624, 11.93104 ], [ 92.59613, 11.9314 ], [ 92.59634, 11.93169 ], [ 92.59713, 11.93191 ], [ 92.59724, 11.93206 ], [ 92.59721, 11.93244 ], [ 92.59717, 11.93252 ], [ 92.59687, 11.93277 ], [ 92.5968, 11.93279 ], [ 92.5965, 11.93306 ], [ 92.5966, 11.93363 ], [ 92.59672, 11.9341 ], [ 92.59672, 11.93485 ], [ 92.59658, 11.93527 ], [ 92.59612, 11.93583 ], [ 92.59607, 11.93669 ], [ 92.5957, 11.93734 ], [ 92.59576, 11.93768 ], [ 92.596, 11.93781 ], [ 92.59643, 11.93775 ], [ 92.59692, 11.93777 ], [ 92.59739, 11.9381 ], [ 92.59745, 11.93812 ], [ 92.5976, 11.93864 ], [ 92.59759, 11.93955 ], [ 92.59764, 11.94094 ], [ 92.59732, 11.9411 ], [ 92.59684, 11.94112 ], [ 92.59637, 11.9412 ], [ 92.59598, 11.9414 ], [ 92.59682, 11.9429 ], [ 92.59699, 11.94358 ], [ 92.59676, 11.9445 ], [ 92.59626, 11.94538 ], [ 92.59616, 11.94641 ], [ 92.59617, 11.94807 ], [ 92.59641, 11.94945 ], [ 92.59674, 11.9505 ], [ 92.59702, 11.9512 ], [ 92.59694, 11.95183 ], [ 92.59668, 11.95259 ], [ 92.59665, 11.95301 ], [ 92.59674, 11.95327 ], [ 92.59664, 11.95369 ], [ 92.59638, 11.95406 ], [ 92.59613, 11.95513 ], [ 92.59602, 11.95601 ], [ 92.59601, 11.95685 ], [ 92.59607, 11.95742 ], [ 92.59625, 11.95826 ], [ 92.59613, 11.95916 ], [ 92.59584, 11.96067 ], [ 92.59546, 11.96226 ], [ 92.59521, 11.96363 ], [ 92.59491, 11.96501 ], [ 92.59451, 11.96638 ], [ 92.594, 11.9674 ], [ 92.59352, 11.96851 ], [ 92.59306, 11.96882 ], [ 92.59285, 11.96884 ], [ 92.59244, 11.96883 ], [ 92.59203, 11.96889 ], [ 92.59175, 11.96902 ], [ 92.59151, 11.96948 ], [ 92.59142, 11.96983 ], [ 92.59098, 11.97063 ], [ 92.59089, 11.97126 ], [ 92.59043, 11.97168 ], [ 92.58985, 11.97188 ], [ 92.5894, 11.97198 ], [ 92.58892, 11.97198 ], [ 92.58856, 11.97206 ], [ 92.58855, 11.97254 ], [ 92.58868, 11.97311 ], [ 92.58858, 11.97376 ], [ 92.58851, 11.97454 ], [ 92.58842, 11.97502 ], [ 92.58848, 11.97547 ], [ 92.58873, 11.97578 ], [ 92.58901, 11.97598 ], [ 92.5894, 11.97611 ], [ 92.59082, 11.97618 ], [ 92.59124, 11.97623 ], [ 92.59298, 11.97711 ], [ 92.59354, 11.9772 ], [ 92.59412, 11.97721 ], [ 92.59496, 11.97705 ], [ 92.59591, 11.97649 ], [ 92.59654, 11.97593 ], [ 92.59672, 11.97518 ], [ 92.59694, 11.97491 ], [ 92.59703, 11.97445 ], [ 92.59704, 11.97375 ], [ 92.59711, 11.97336 ], [ 92.59726, 11.97314 ], [ 92.59751, 11.97305 ], [ 92.59793, 11.97281 ], [ 92.59864, 11.97185 ], [ 92.59875, 11.97161 ], [ 92.59902, 11.9714 ], [ 92.59928, 11.9713 ], [ 92.59958, 11.97135 ], [ 92.60004, 11.97119 ], [ 92.6006, 11.97085 ], [ 92.60071, 11.97044 ], [ 92.60071, 11.97004 ], [ 92.60077, 11.96977 ], [ 92.6009, 11.96948 ], [ 92.60096, 11.96909 ], [ 92.60084, 11.96894 ], [ 92.60084, 11.9687 ], [ 92.60138, 11.96767 ], [ 92.602, 11.96713 ], [ 92.60245, 11.96665 ], [ 92.60277, 11.96621 ], [ 92.60295, 11.96578 ], [ 92.60309, 11.96529 ], [ 92.60313, 11.96475 ], [ 92.60306, 11.96438 ], [ 92.60242, 11.96326 ], [ 92.60232, 11.96299 ], [ 92.60216, 11.96277 ], [ 92.60194, 11.96267 ], [ 92.6019, 11.9626 ], [ 92.60192, 11.96247 ], [ 92.60197, 11.96236 ], [ 92.60247, 11.96203 ], [ 92.60267, 11.96195 ], [ 92.60282, 11.96181 ], [ 92.60298, 11.96157 ], [ 92.60299, 11.96085 ], [ 92.60303, 11.95998 ], [ 92.60309, 11.95982 ], [ 92.60325, 11.95979 ], [ 92.60343, 11.95968 ], [ 92.60364, 11.95933 ], [ 92.60374, 11.95891 ], [ 92.60404, 11.95836 ], [ 92.60435, 11.95799 ], [ 92.60439, 11.95784 ], [ 92.60434, 11.95771 ], [ 92.60439, 11.95761 ], [ 92.60453, 11.95746 ], [ 92.60457, 11.95733 ], [ 92.60454, 11.95716 ], [ 92.60445, 11.95695 ], [ 92.60443, 11.95669 ], [ 92.60465, 11.95536 ], [ 92.60516, 11.95339 ], [ 92.60526, 11.95285 ], [ 92.60537, 11.95241 ], [ 92.60535, 11.95199 ], [ 92.60539, 11.95165 ], [ 92.60548, 11.95147 ], [ 92.60561, 11.95137 ], [ 92.60616, 11.95124 ], [ 92.6064, 11.9511 ], [ 92.60664, 11.95083 ], [ 92.60678, 11.95062 ], [ 92.60692, 11.95027 ], [ 92.60698, 11.94991 ], [ 92.60692, 11.94956 ], [ 92.60674, 11.94881 ], [ 92.60664, 11.94824 ], [ 92.60663, 11.94776 ], [ 92.60691, 11.94667 ], [ 92.60691, 11.94636 ], [ 92.60683, 11.94605 ], [ 92.60673, 11.94546 ], [ 92.60664, 11.94514 ], [ 92.60658, 11.9446 ], [ 92.6066, 11.94424 ], [ 92.60675, 11.94402 ], [ 92.60694, 11.94388 ], [ 92.60734, 11.94372 ], [ 92.60747, 11.94357 ], [ 92.60761, 11.94346 ], [ 92.60828, 11.94314 ], [ 92.6085, 11.94293 ], [ 92.60867, 11.94268 ], [ 92.60874, 11.94252 ], [ 92.60881, 11.94224 ], [ 92.60879, 11.94074 ], [ 92.60882, 11.94041 ], [ 92.60893, 11.94 ], [ 92.60891, 11.93985 ], [ 92.60881, 11.93976 ], [ 92.60872, 11.93963 ], [ 92.60852, 11.93944 ], [ 92.60824, 11.93932 ], [ 92.60802, 11.93933 ], [ 92.60782, 11.93928 ], [ 92.60762, 11.93918 ], [ 92.60746, 11.93902 ], [ 92.60744, 11.93885 ], [ 92.60748, 11.93855 ], [ 92.60748, 11.93827 ], [ 92.60737, 11.93785 ], [ 92.60717, 11.9375 ], [ 92.60687, 11.93707 ], [ 92.60666, 11.93682 ], [ 92.60648, 11.93674 ], [ 92.60637, 11.93666 ], [ 92.60631, 11.9365 ], [ 92.60621, 11.93634 ], [ 92.60605, 11.93628 ], [ 92.60558, 11.93626 ], [ 92.60486, 11.93595 ], [ 92.60458, 11.9359 ], [ 92.60434, 11.93594 ], [ 92.60402, 11.93608 ], [ 92.6037, 11.93615 ], [ 92.60331, 11.93617 ], [ 92.60287, 11.93613 ], [ 92.60269, 11.93607 ], [ 92.60261, 11.93595 ], [ 92.60257, 11.93579 ], [ 92.6023, 11.93536 ], [ 92.60217, 11.93509 ], [ 92.60204, 11.93496 ], [ 92.60199, 11.93481 ], [ 92.60199, 11.93461 ], [ 92.60158, 11.93331 ], [ 92.60139, 11.93196 ], [ 92.60143, 11.93179 ], [ 92.60161, 11.93159 ], [ 92.60156, 11.93114 ], [ 92.60135, 11.9305 ], [ 92.60115, 11.93023 ], [ 92.6007, 11.92988 ], [ 92.60027, 11.92961 ], [ 92.60001, 11.92939 ], [ 92.59986, 11.92909 ], [ 92.59961, 11.92875 ], [ 92.59932, 11.92845 ], [ 92.59914, 11.92838 ], [ 92.59898, 11.92836 ], [ 92.5989, 11.92828 ], [ 92.59886, 11.92815 ], [ 92.59892, 11.92804 ], [ 92.59908, 11.92797 ], [ 92.59912, 11.92788 ], [ 92.59907, 11.9278 ], [ 92.59873, 11.92751 ], [ 92.59857, 11.92742 ], [ 92.5984, 11.92743 ], [ 92.59836, 11.92751 ], [ 92.59831, 11.92781 ], [ 92.59831, 11.92812 ], [ 92.59834, 11.92842 ], [ 92.59826, 11.92853 ], [ 92.59792, 11.92866 ] ] ], [ [ [ 92.61432, 11.56343 ], [ 92.61425, 11.56363 ], [ 92.61409, 11.56373 ], [ 92.6128, 11.56383 ], [ 92.61244, 11.56396 ], [ 92.6121, 11.56423 ], [ 92.61188, 11.56464 ], [ 92.6114, 11.56524 ], [ 92.61114, 11.56539 ], [ 92.6108, 11.56579 ], [ 92.61059, 11.56661 ], [ 92.61028, 11.56813 ], [ 92.60997, 11.56875 ], [ 92.60959, 11.56911 ], [ 92.60919, 11.5692 ], [ 92.60871, 11.569 ], [ 92.60802, 11.56861 ], [ 92.60745, 11.56839 ], [ 92.60681, 11.56869 ], [ 92.60665, 11.5691 ], [ 92.6065, 11.57038 ], [ 92.60634, 11.57073 ], [ 92.60598, 11.57094 ], [ 92.60562, 11.57097 ], [ 92.60514, 11.57089 ], [ 92.60485, 11.57062 ], [ 92.60485, 11.57032 ], [ 92.60496, 11.56988 ], [ 92.60496, 11.56933 ], [ 92.60473, 11.56887 ], [ 92.60432, 11.56841 ], [ 92.60372, 11.56812 ], [ 92.60303, 11.56797 ], [ 92.60258, 11.5677 ], [ 92.60203, 11.5673 ], [ 92.60126, 11.56698 ], [ 92.60102, 11.56706 ], [ 92.60085, 11.56754 ], [ 92.60071, 11.56818 ], [ 92.6006, 11.56896 ], [ 92.60045, 11.57055 ], [ 92.60047, 11.57357 ], [ 92.6004, 11.57435 ], [ 92.60026, 11.57486 ], [ 92.60035, 11.5756 ], [ 92.60052, 11.57634 ], [ 92.60085, 11.57693 ], [ 92.60081, 11.57736 ], [ 92.60045, 11.57772 ], [ 92.60036, 11.57815 ], [ 92.60036, 11.5785 ], [ 92.60048, 11.57889 ], [ 92.60082, 11.57972 ], [ 92.60113, 11.58066 ], [ 92.60134, 11.58158 ], [ 92.60139, 11.58253 ], [ 92.60112, 11.58365 ], [ 92.60102, 11.58437 ], [ 92.60117, 11.58522 ], [ 92.60133, 11.58561 ], [ 92.60176, 11.58595 ], [ 92.60218, 11.58609 ], [ 92.60267, 11.58631 ], [ 92.60295, 11.58635 ], [ 92.6036294, 11.5865129 ], [ 92.6048443, 11.5868114 ], [ 92.60723, 11.58763 ], [ 92.60731, 11.58774 ], [ 92.60756, 11.58785 ], [ 92.60809, 11.58791 ], [ 92.6083, 11.58798 ], [ 92.60846, 11.58807 ], [ 92.6087, 11.5883 ], [ 92.60883, 11.58831 ], [ 92.60902, 11.58816 ], [ 92.60904, 11.58794 ], [ 92.60908, 11.58779 ], [ 92.60923, 11.58772 ], [ 92.60946, 11.58768 ], [ 92.60997, 11.58797 ], [ 92.61016, 11.58818 ], [ 92.61027, 11.58825 ], [ 92.61034, 11.58837 ], [ 92.61056, 11.58862 ], [ 92.61088, 11.58851 ], [ 92.610939, 11.5884631 ], [ 92.61127, 11.5882 ], [ 92.61132, 11.58794 ], [ 92.61146, 11.58778 ], [ 92.6116, 11.58771 ], [ 92.61173, 11.58752 ], [ 92.61184, 11.58714 ], [ 92.61194, 11.58696 ], [ 92.6123, 11.58675 ], [ 92.61283, 11.58631 ], [ 92.61425, 11.58496 ], [ 92.61502, 11.58433 ], [ 92.61521, 11.58408 ], [ 92.61552, 11.58391 ], [ 92.61581, 11.58343 ], [ 92.61601, 11.58322 ], [ 92.61618, 11.58309 ], [ 92.61663, 11.58294 ], [ 92.61694, 11.58288 ], [ 92.61712, 11.5828 ], [ 92.61722, 11.58266 ], [ 92.61725, 11.58251 ], [ 92.61745, 11.58197 ], [ 92.61764, 11.58115 ], [ 92.61778, 11.58009 ], [ 92.61809, 11.57907 ], [ 92.61832, 11.57841 ], [ 92.6187, 11.57789 ], [ 92.61909, 11.57714 ], [ 92.61915, 11.57688 ], [ 92.61902, 11.57648 ], [ 92.61904, 11.57616 ], [ 92.61899, 11.57535 ], [ 92.61909, 11.57494 ], [ 92.6191, 11.57432 ], [ 92.619, 11.57356 ], [ 92.61891, 11.57257 ], [ 92.61873, 11.57215 ], [ 92.61856, 11.57129 ], [ 92.61834, 11.57072 ], [ 92.61797, 11.56956 ], [ 92.61773, 11.56918 ], [ 92.61757, 11.56902 ], [ 92.61752, 11.56889 ], [ 92.61753, 11.56864 ], [ 92.6175, 11.5684 ], [ 92.6173, 11.56797 ], [ 92.61701, 11.56746 ], [ 92.61663, 11.56691 ], [ 92.61657, 11.56661 ], [ 92.61657, 11.56535 ], [ 92.61655, 11.56511 ], [ 92.61652, 11.5651 ], [ 92.6164, 11.56489 ], [ 92.6155, 11.56394 ], [ 92.61529, 11.56356 ], [ 92.61509, 11.56283 ], [ 92.61483, 11.56215 ], [ 92.61475, 11.56215 ], [ 92.61461, 11.5625 ], [ 92.61449, 11.563 ], [ 92.61432, 11.56343 ] ] ], [ [ [ 92.5299, 11.55454 ], [ 92.52999, 11.55488 ], [ 92.53015, 11.55512 ], [ 92.53034, 11.55534 ], [ 92.53054, 11.55578 ], [ 92.53051, 11.55609 ], [ 92.53054, 11.55699 ], [ 92.53076, 11.55735 ], [ 92.53092, 11.55787 ], [ 92.53086, 11.55854 ], [ 92.531, 11.55909 ], [ 92.53147, 11.55942 ], [ 92.53187, 11.55953 ], [ 92.53197, 11.56005 ], [ 92.53224, 11.56069 ], [ 92.53254, 11.56111 ], [ 92.53314, 11.56164 ], [ 92.53325, 11.56188 ], [ 92.53362, 11.56232 ], [ 92.53395, 11.56237 ], [ 92.53437, 11.56231 ], [ 92.53472, 11.56234 ], [ 92.53492, 11.56264 ], [ 92.53522, 11.56318 ], [ 92.53541, 11.56364 ], [ 92.53549, 11.56443 ], [ 92.53539, 11.56492 ], [ 92.53539, 11.56555 ], [ 92.53535, 11.56643 ], [ 92.5351, 11.56761 ], [ 92.5343, 11.56915 ], [ 92.53392, 11.56965 ], [ 92.53323, 11.57009 ], [ 92.53274, 11.57033 ], [ 92.53247, 11.57099 ], [ 92.53244, 11.57179 ], [ 92.53267, 11.57329 ], [ 92.5327, 11.57416 ], [ 92.53269, 11.57445 ], [ 92.53304, 11.5748 ], [ 92.53362, 11.57507 ], [ 92.53405, 11.57544 ], [ 92.53429, 11.5758 ], [ 92.53433, 11.57647 ], [ 92.53435, 11.57757 ], [ 92.53429, 11.57837 ], [ 92.53458, 11.57956 ], [ 92.535, 11.58077 ], [ 92.53516, 11.5819 ], [ 92.53509, 11.58305 ], [ 92.53494, 11.58411 ], [ 92.53462, 11.58504 ], [ 92.53395, 11.58618 ], [ 92.53333, 11.58738 ], [ 92.53259, 11.58894 ], [ 92.53229, 11.58993 ], [ 92.53228, 11.59084 ], [ 92.53215, 11.59263 ], [ 92.53201, 11.59411 ], [ 92.5322, 11.59531 ], [ 92.53257, 11.59662 ], [ 92.53307, 11.59723 ], [ 92.53314, 11.59759 ], [ 92.53309, 11.59786 ], [ 92.53308, 11.59825 ], [ 92.53343, 11.59862 ], [ 92.53371, 11.59898 ], [ 92.53391, 11.59952 ], [ 92.53407, 11.60049 ], [ 92.53403, 11.60114 ], [ 92.53378, 11.60125 ], [ 92.53383, 11.60149 ], [ 92.53413, 11.60179 ], [ 92.53454, 11.60202 ], [ 92.53482, 11.60244 ], [ 92.53545, 11.6041 ], [ 92.53589, 11.6047 ], [ 92.53626, 11.60526 ], [ 92.53673, 11.60567 ], [ 92.53713, 11.60584 ], [ 92.53748, 11.60583 ], [ 92.53794, 11.60571 ], [ 92.53834, 11.60541 ], [ 92.53869, 11.60479 ], [ 92.53888, 11.6043 ], [ 92.53898, 11.60395 ], [ 92.53915, 11.60366 ], [ 92.53942, 11.60341 ], [ 92.53976, 11.60321 ], [ 92.54036, 11.60307 ], [ 92.54155, 11.60288 ], [ 92.54187, 11.60271 ], [ 92.54219, 11.60234 ], [ 92.54259, 11.60196 ], [ 92.54314, 11.60168 ], [ 92.54441, 11.60164 ], [ 92.54528, 11.60173 ], [ 92.54597, 11.60169 ], [ 92.54644, 11.60161 ], [ 92.54683, 11.60142 ], [ 92.54703, 11.60118 ], [ 92.54708, 11.60087 ], [ 92.54723, 11.6005 ], [ 92.54742, 11.60033 ], [ 92.54776, 11.60016 ], [ 92.54811, 11.60004 ], [ 92.54827, 11.59992 ], [ 92.54828, 11.59955 ], [ 92.54809, 11.59933 ], [ 92.54767, 11.59921 ], [ 92.54717, 11.59912 ], [ 92.5466, 11.59879 ], [ 92.5463, 11.59852 ], [ 92.5459, 11.59725 ], [ 92.54588, 11.59595 ], [ 92.54576, 11.59542 ], [ 92.54548, 11.59511 ], [ 92.54498, 11.5949 ], [ 92.54453, 11.59459 ], [ 92.54396, 11.5943 ], [ 92.54339, 11.59412 ], [ 92.54271, 11.59408 ], [ 92.54191, 11.5938 ], [ 92.54157, 11.59344 ], [ 92.54154, 11.59273 ], [ 92.54182, 11.59177 ], [ 92.54197, 11.59111 ], [ 92.54228, 11.59049 ], [ 92.54292, 11.58995 ], [ 92.54385, 11.58981 ], [ 92.54453, 11.59016 ], [ 92.54546, 11.59125 ], [ 92.54592, 11.59137 ], [ 92.54614, 11.59137 ], [ 92.54643, 11.59122 ], [ 92.54684, 11.59096 ], [ 92.54732, 11.59105 ], [ 92.548, 11.59153 ], [ 92.54849, 11.59172 ], [ 92.54912, 11.59237 ], [ 92.54974, 11.5929 ], [ 92.55039, 11.59327 ], [ 92.55097, 11.59313 ], [ 92.55162, 11.5929 ], [ 92.55169, 11.5929 ], [ 92.5522, 11.59213 ], [ 92.55249, 11.59143 ], [ 92.55253, 11.59139 ], [ 92.55273, 11.59073 ], [ 92.55279, 11.59067 ], [ 92.55344, 11.59026 ], [ 92.55454, 11.59017 ], [ 92.55529, 11.59014 ], [ 92.55612, 11.59038 ], [ 92.55684, 11.59083 ], [ 92.55753, 11.59101 ], [ 92.55789, 11.59123 ], [ 92.5582, 11.59137 ], [ 92.55921, 11.59138 ], [ 92.55967, 11.59146 ], [ 92.56011, 11.59165 ], [ 92.56031, 11.59178 ], [ 92.56056, 11.59185 ], [ 92.56093, 11.59178 ], [ 92.56127, 11.59186 ], [ 92.56208, 11.59184 ], [ 92.56231, 11.59193 ], [ 92.56259, 11.59222 ], [ 92.56282, 11.59236 ], [ 92.56311, 11.59236 ], [ 92.5635, 11.59231 ], [ 92.56459, 11.59202 ], [ 92.56484, 11.5919 ], [ 92.56498, 11.59175 ], [ 92.56534, 11.59157 ], [ 92.56553, 11.59152 ], [ 92.56576, 11.59153 ], [ 92.56587, 11.59157 ], [ 92.56606, 11.59186 ], [ 92.56627, 11.59212 ], [ 92.56631, 11.59224 ], [ 92.5664, 11.59238 ], [ 92.56654, 11.59245 ], [ 92.56667, 11.59245 ], [ 92.56674, 11.5924 ], [ 92.56683, 11.59197 ], [ 92.56693, 11.59175 ], [ 92.56703, 11.59162 ], [ 92.56717, 11.5915 ], [ 92.56727, 11.59128 ], [ 92.56733, 11.59101 ], [ 92.56725, 11.5908 ], [ 92.56703, 11.59065 ], [ 92.56705, 11.5905 ], [ 92.56731, 11.59012 ], [ 92.56764, 11.58986 ], [ 92.56782, 11.58977 ], [ 92.56816, 11.58976 ], [ 92.5687, 11.58982 ], [ 92.56901, 11.58981 ], [ 92.56922, 11.58977 ], [ 92.56935, 11.58966 ], [ 92.56939, 11.58942 ], [ 92.56931, 11.58864 ], [ 92.56913, 11.58811 ], [ 92.56897, 11.58792 ], [ 92.56874, 11.58772 ], [ 92.56833, 11.5876 ], [ 92.56814, 11.58764 ], [ 92.56788, 11.58786 ], [ 92.56774, 11.58788 ], [ 92.56747, 11.58782 ], [ 92.56704, 11.58766 ], [ 92.56637, 11.58732 ], [ 92.56578, 11.58709 ], [ 92.56482, 11.58658 ], [ 92.56396, 11.58634 ], [ 92.56356, 11.58614 ], [ 92.56275, 11.58563 ], [ 92.56257, 11.58538 ], [ 92.56245, 11.58514 ], [ 92.56241, 11.58495 ], [ 92.56205, 11.58458 ], [ 92.56182, 11.58402 ], [ 92.5618, 11.58378 ], [ 92.5619, 11.58368 ], [ 92.56191, 11.58357 ], [ 92.56181, 11.5831 ], [ 92.56177, 11.5827 ], [ 92.56179, 11.58234 ], [ 92.56169, 11.58159 ], [ 92.56168, 11.58121 ], [ 92.56172, 11.58087 ], [ 92.56183, 11.58048 ], [ 92.5621, 11.58006 ], [ 92.56213, 11.57991 ], [ 92.5621, 11.57962 ], [ 92.56203, 11.57949 ], [ 92.56205, 11.57937 ], [ 92.56217, 11.57921 ], [ 92.56234, 11.5792 ], [ 92.56241, 11.57915 ], [ 92.56254, 11.57897 ], [ 92.56256, 11.57863 ], [ 92.5626, 11.57838 ], [ 92.56278, 11.57788 ], [ 92.56304, 11.57737 ], [ 92.56369, 11.57656 ], [ 92.5641, 11.57619 ], [ 92.56457, 11.57567 ], [ 92.56491, 11.57524 ], [ 92.56539, 11.57424 ], [ 92.56551, 11.57356 ], [ 92.5655, 11.57328 ], [ 92.56546, 11.57315 ], [ 92.56538, 11.57308 ], [ 92.56524, 11.57305 ], [ 92.565, 11.57306 ], [ 92.56421, 11.57327 ], [ 92.56403, 11.5733 ], [ 92.56393, 11.57328 ], [ 92.56365, 11.57317 ], [ 92.56321, 11.57316 ], [ 92.56268, 11.57288 ], [ 92.56237, 11.57256 ], [ 92.56188, 11.57229 ], [ 92.56113, 11.57193 ], [ 92.5601, 11.57133 ], [ 92.55962, 11.57102 ], [ 92.5583, 11.56986 ], [ 92.55753, 11.56922 ], [ 92.557, 11.56869 ], [ 92.5565, 11.568 ], [ 92.55593, 11.56743 ], [ 92.55585, 11.56731 ], [ 92.55588, 11.56718 ], [ 92.55597, 11.56708 ], [ 92.55626, 11.56692 ], [ 92.55652, 11.56638 ], [ 92.55659, 11.56611 ], [ 92.55661, 11.56592 ], [ 92.55658, 11.56572 ], [ 92.55642, 11.56551 ], [ 92.55608, 11.56514 ], [ 92.55567, 11.56464 ], [ 92.55454, 11.56366 ], [ 92.55425, 11.56333 ], [ 92.55396, 11.5628 ], [ 92.55397, 11.56265 ], [ 92.55401, 11.56257 ], [ 92.55409, 11.56249 ], [ 92.5543, 11.56239 ], [ 92.55424, 11.5623 ], [ 92.55417, 11.56228 ], [ 92.55408, 11.56221 ], [ 92.5541, 11.56198 ], [ 92.55407, 11.56187 ], [ 92.55385, 11.56178 ], [ 92.55352, 11.56171 ], [ 92.5515, 11.56147 ], [ 92.55062, 11.56131 ], [ 92.55005, 11.56118 ], [ 92.54955, 11.561 ], [ 92.54929, 11.56078 ], [ 92.54913, 11.5606 ], [ 92.54895, 11.56049 ], [ 92.54876, 11.56046 ], [ 92.5483, 11.56051 ], [ 92.54804, 11.56058 ], [ 92.54736, 11.56106 ], [ 92.54681, 11.56124 ], [ 92.54603, 11.56166 ], [ 92.54518, 11.56179 ], [ 92.54467, 11.56198 ], [ 92.54412, 11.56227 ], [ 92.5423, 11.56279 ], [ 92.54163, 11.56281 ], [ 92.5407, 11.5628 ], [ 92.53958, 11.56268 ], [ 92.5387, 11.5625 ], [ 92.53806, 11.56213 ], [ 92.53743, 11.56171 ], [ 92.53712, 11.56129 ], [ 92.53661, 11.56029 ], [ 92.53599, 11.55939 ], [ 92.53567, 11.55899 ], [ 92.53362, 11.55786 ], [ 92.53313, 11.55753 ], [ 92.53276, 11.55703 ], [ 92.5323, 11.5568 ], [ 92.53202, 11.55661 ], [ 92.53177, 11.55604 ], [ 92.53151, 11.55571 ], [ 92.53105, 11.55536 ], [ 92.53079, 11.55506 ], [ 92.53057, 11.5547 ], [ 92.53037, 11.55444 ], [ 92.53002, 11.55441 ], [ 92.5299, 11.55454 ] ] ], [ [ [ 92.62544, 11.41854 ], [ 92.62567, 11.42008 ], [ 92.62529, 11.42143 ], [ 92.62476, 11.42293 ], [ 92.62468, 11.42432 ], [ 92.62482, 11.42532 ], [ 92.62495, 11.4266 ], [ 92.62458, 11.42831 ], [ 92.62402, 11.42988 ], [ 92.62365, 11.43081 ], [ 92.623264736842117, 11.43142 ], [ 92.623264736842103, 11.43142 ], [ 92.62305, 11.43176 ], [ 92.62216, 11.43218 ], [ 92.62164, 11.43238 ], [ 92.62125, 11.43229 ], [ 92.62095, 11.43195 ], [ 92.6205, 11.43182 ], [ 92.62029, 11.4322 ], [ 92.62054, 11.43302 ], [ 92.62101, 11.43342 ], [ 92.62149, 11.43341 ], [ 92.62205, 11.43301 ], [ 92.62248, 11.43283 ], [ 92.62295, 11.43301 ], [ 92.62319, 11.43341 ], [ 92.62335, 11.43374 ], [ 92.62393, 11.43429 ], [ 92.62438, 11.43511 ], [ 92.62423, 11.4356 ], [ 92.62356, 11.43592 ], [ 92.62347, 11.43702 ], [ 92.62355, 11.43722 ], [ 92.62369, 11.43823 ], [ 92.62394, 11.43909 ], [ 92.62434, 11.44 ], [ 92.62495, 11.44119 ], [ 92.62495, 11.44125 ], [ 92.62476, 11.44185 ], [ 92.62424, 11.44217 ], [ 92.62412, 11.44216 ], [ 92.62333, 11.44228 ], [ 92.62231, 11.4423 ], [ 92.6216, 11.44228 ], [ 92.62092, 11.44229 ], [ 92.6206, 11.4425 ], [ 92.62063, 11.4443 ], [ 92.6204, 11.4453 ], [ 92.61947, 11.44668 ], [ 92.61785, 11.44824 ], [ 92.61642, 11.45044 ], [ 92.61469, 11.45294 ], [ 92.61391, 11.45443 ], [ 92.61285, 11.45659 ], [ 92.61243, 11.45721 ], [ 92.6122, 11.4574 ], [ 92.61177, 11.45758 ], [ 92.61135, 11.45824 ], [ 92.61128, 11.45865 ], [ 92.6114, 11.45921 ], [ 92.61175, 11.45986 ], [ 92.61177, 11.46086 ], [ 92.61171, 11.46182 ], [ 92.61208, 11.46291 ], [ 92.61239, 11.46367 ], [ 92.61246, 11.46417 ], [ 92.61285, 11.46427 ], [ 92.61312, 11.46486 ], [ 92.61337, 11.46589 ], [ 92.61338, 11.46648 ], [ 92.6136, 11.4674 ], [ 92.61354, 11.46823 ], [ 92.61375, 11.47108 ], [ 92.61424, 11.47443 ], [ 92.61458, 11.47602 ], [ 92.61532, 11.47864 ], [ 92.61557, 11.47964 ], [ 92.61553, 11.48075 ], [ 92.61566, 11.48195 ], [ 92.61625, 11.48308 ], [ 92.61661, 11.4842 ], [ 92.6169, 11.48488 ], [ 92.61733, 11.48545 ], [ 92.61781, 11.48555 ], [ 92.61803, 11.48583 ], [ 92.6184, 11.48662 ], [ 92.6186, 11.48876 ], [ 92.619, 11.4911 ], [ 92.61915, 11.49166 ], [ 92.61961, 11.49254 ], [ 92.62012, 11.49327 ], [ 92.62064, 11.4939 ], [ 92.62128, 11.4942 ], [ 92.62146, 11.49468 ], [ 92.62129, 11.49553 ], [ 92.62124, 11.49706 ], [ 92.62172, 11.4981 ], [ 92.62263, 11.49957 ], [ 92.6242, 11.50107 ], [ 92.62509, 11.50146 ], [ 92.62614, 11.50232 ], [ 92.62667, 11.50259 ], [ 92.62717, 11.50294 ], [ 92.62763, 11.50358 ], [ 92.62785, 11.50442 ], [ 92.62835, 11.50588 ], [ 92.62895, 11.50631 ], [ 92.62945, 11.50752 ], [ 92.62986, 11.50906 ], [ 92.63039, 11.51011 ], [ 92.63104, 11.51085 ], [ 92.63181, 11.51157 ], [ 92.6323, 11.51236 ], [ 92.63234, 11.51283 ], [ 92.63231, 11.5138 ], [ 92.63263, 11.51437 ], [ 92.63399, 11.51525 ], [ 92.63485, 11.51558 ], [ 92.63498, 11.51575 ], [ 92.63589, 11.51661 ], [ 92.63631, 11.51676 ], [ 92.63665, 11.51586 ], [ 92.63673, 11.51511 ], [ 92.63679, 11.51503 ], [ 92.63707, 11.51434 ], [ 92.63782, 11.5132 ], [ 92.63836, 11.51233 ], [ 92.63842, 11.51214 ], [ 92.63844, 11.5115 ], [ 92.63847, 11.51133 ], [ 92.63872, 11.51087 ], [ 92.63892, 11.51079 ], [ 92.63923, 11.51072 ], [ 92.6396, 11.51059 ], [ 92.63993, 11.51007 ], [ 92.64034, 11.50964 ], [ 92.64074, 11.50949 ], [ 92.64292, 11.50956 ], [ 92.64355, 11.50966 ], [ 92.64391, 11.50989 ], [ 92.6444, 11.51067 ], [ 92.64458, 11.51129 ], [ 92.64471, 11.51148 ], [ 92.64511, 11.51172 ], [ 92.64528, 11.51138 ], [ 92.64532, 11.51039 ], [ 92.6451, 11.50859 ], [ 92.64493, 11.50631 ], [ 92.64466, 11.50445 ], [ 92.64442, 11.50367 ], [ 92.64378, 11.50222 ], [ 92.64312, 11.5011 ], [ 92.64289, 11.50023 ], [ 92.64252, 11.49973 ], [ 92.64227, 11.49934 ], [ 92.64228, 11.49854 ], [ 92.64242, 11.4978 ], [ 92.64287, 11.49659 ], [ 92.64369, 11.496 ], [ 92.64433, 11.49572 ], [ 92.64518, 11.49557 ], [ 92.64588, 11.49572 ], [ 92.64641, 11.49579 ], [ 92.64656, 11.49579 ], [ 92.64708, 11.49586 ], [ 92.64781, 11.49585 ], [ 92.6482, 11.49559 ], [ 92.64839, 11.49502 ], [ 92.6491, 11.49445 ], [ 92.64963, 11.49411 ], [ 92.65024, 11.49344 ], [ 92.65068, 11.49282 ], [ 92.65139, 11.49202 ], [ 92.65225, 11.49143 ], [ 92.6533, 11.49118 ], [ 92.65419, 11.49084 ], [ 92.6548, 11.49087 ], [ 92.65517, 11.49069 ], [ 92.6556, 11.49063 ], [ 92.65596, 11.49056 ], [ 92.6564, 11.49051 ], [ 92.65697, 11.49036 ], [ 92.65755, 11.49027 ], [ 92.65823, 11.49001 ], [ 92.65862, 11.48954 ], [ 92.65906, 11.48873 ], [ 92.65951, 11.48809 ], [ 92.66007, 11.48752 ], [ 92.66043, 11.4872 ], [ 92.66066, 11.48722 ], [ 92.66108, 11.48759 ], [ 92.66131, 11.48774 ], [ 92.66159, 11.48806 ], [ 92.66174, 11.48836 ], [ 92.66179, 11.48841 ], [ 92.66199, 11.4885 ], [ 92.6622, 11.48851 ], [ 92.66229, 11.48845 ], [ 92.66239, 11.48812 ], [ 92.66232, 11.4878 ], [ 92.66186, 11.48707 ], [ 92.66181, 11.48691 ], [ 92.66185, 11.48665 ], [ 92.66191, 11.48659 ], [ 92.66209, 11.4863 ], [ 92.66264, 11.48566 ], [ 92.66304, 11.48548 ], [ 92.66356, 11.48562 ], [ 92.66371, 11.48599 ], [ 92.6637, 11.48645 ], [ 92.66383, 11.4868 ], [ 92.66426, 11.48704 ], [ 92.66464, 11.48712 ], [ 92.66481, 11.48741 ], [ 92.66522, 11.48781 ], [ 92.66538, 11.48819 ], [ 92.6654, 11.48899 ], [ 92.66491, 11.48977 ], [ 92.66457, 11.49008 ], [ 92.66453, 11.49099 ], [ 92.66468, 11.49139 ], [ 92.66476, 11.49144 ], [ 92.66511, 11.49155 ], [ 92.66537, 11.49146 ], [ 92.6655, 11.49145 ], [ 92.66572, 11.49138 ], [ 92.66594, 11.49139 ], [ 92.66623, 11.49154 ], [ 92.66655, 11.49163 ], [ 92.66691, 11.49146 ], [ 92.66759, 11.49065 ], [ 92.66854, 11.48937 ], [ 92.6691, 11.48857 ], [ 92.66919, 11.48807 ], [ 92.66914, 11.48744 ], [ 92.66915, 11.48709 ], [ 92.6692, 11.48665 ], [ 92.66943, 11.48628 ], [ 92.66969, 11.48601 ], [ 92.66974, 11.48578 ], [ 92.66958, 11.48527 ], [ 92.66935, 11.48291 ], [ 92.66938, 11.48248 ], [ 92.6692748, 11.4822575 ], [ 92.6691993, 11.4818531 ], [ 92.6694902, 11.4808646 ], [ 92.6696639, 11.4800657 ], [ 92.6697, 11.47957 ], [ 92.66994, 11.47902 ], [ 92.67075, 11.47825 ], [ 92.67093, 11.47793 ], [ 92.67088, 11.47774 ], [ 92.67092, 11.47754 ], [ 92.67104, 11.47744 ], [ 92.67117, 11.47719 ], [ 92.67123, 11.47677 ], [ 92.67134, 11.47644 ], [ 92.67143, 11.47626 ], [ 92.67156, 11.47617 ], [ 92.67169, 11.47615 ], [ 92.67188, 11.47618 ], [ 92.67227, 11.47633 ], [ 92.67249, 11.47633 ], [ 92.6727, 11.47626 ], [ 92.67293, 11.47614 ], [ 92.67298, 11.47595 ], [ 92.67296, 11.47571 ], [ 92.67303, 11.4754 ], [ 92.6734, 11.47442 ], [ 92.67352, 11.47425 ], [ 92.6738, 11.47417 ], [ 92.67399, 11.47417 ], [ 92.67411, 11.47411 ], [ 92.67432, 11.47381 ], [ 92.67435, 11.47354 ], [ 92.67449, 11.47332 ], [ 92.67488, 11.4731 ], [ 92.67508, 11.47307 ], [ 92.6753, 11.47322 ], [ 92.6755, 11.47332 ], [ 92.67561, 11.47329 ], [ 92.67582, 11.47313 ], [ 92.676, 11.47291 ], [ 92.67615, 11.47264 ], [ 92.67628, 11.47232 ], [ 92.67633, 11.47205 ], [ 92.67635, 11.47177 ], [ 92.6765, 11.47146 ], [ 92.6766, 11.47131 ], [ 92.67672, 11.47124 ], [ 92.67698, 11.47128 ], [ 92.67709, 11.47122 ], [ 92.67713, 11.47103 ], [ 92.67708, 11.47087 ], [ 92.67699, 11.47073 ], [ 92.67687, 11.47034 ], [ 92.67685, 11.46983 ], [ 92.67678, 11.46948 ], [ 92.67677, 11.46926 ], [ 92.67668, 11.46904 ], [ 92.67654, 11.46891 ], [ 92.67644, 11.46877 ], [ 92.67651, 11.46829 ], [ 92.67651, 11.46807 ], [ 92.67656, 11.46779 ], [ 92.67613, 11.46735 ], [ 92.67606, 11.46722 ], [ 92.67604, 11.46704 ], [ 92.6761, 11.46661 ], [ 92.67619, 11.46631 ], [ 92.67606, 11.4659 ], [ 92.6761, 11.46573 ], [ 92.67627, 11.46554 ], [ 92.67632, 11.4653 ], [ 92.67632, 11.46511 ], [ 92.67597, 11.46464 ], [ 92.67573, 11.46422 ], [ 92.67565, 11.46375 ], [ 92.67565, 11.46353 ], [ 92.67572, 11.46335 ], [ 92.67578, 11.46302 ], [ 92.67566, 11.46244 ], [ 92.67566, 11.46205 ], [ 92.67577, 11.4616 ], [ 92.6758, 11.46114 ], [ 92.67588, 11.46094 ], [ 92.67604, 11.46078 ], [ 92.67632, 11.46082 ], [ 92.67654, 11.46081 ], [ 92.6768, 11.46076 ], [ 92.67702, 11.46076 ], [ 92.67716, 11.46069 ], [ 92.67734, 11.4605 ], [ 92.67737, 11.46032 ], [ 92.67735, 11.46017 ], [ 92.67713, 11.45995 ], [ 92.67708, 11.45984 ], [ 92.677, 11.45954 ], [ 92.67699, 11.45921 ], [ 92.67709, 11.45901 ], [ 92.67719, 11.45854 ], [ 92.67727, 11.45834 ], [ 92.67737, 11.45825 ], [ 92.6776, 11.45815 ], [ 92.67779, 11.45809 ], [ 92.67778, 11.45788 ], [ 92.6778, 11.45772 ], [ 92.67797, 11.45738 ], [ 92.67844, 11.45717 ], [ 92.67864, 11.45701 ], [ 92.67871, 11.45687 ], [ 92.67897, 11.45679 ], [ 92.67908, 11.45673 ], [ 92.67919, 11.45661 ], [ 92.67923, 11.4565 ], [ 92.67924, 11.4563 ], [ 92.67928, 11.45611 ], [ 92.6796, 11.45538 ], [ 92.67972, 11.45524 ], [ 92.67983, 11.45517 ], [ 92.67983, 11.45501 ], [ 92.67965, 11.45474 ], [ 92.67939, 11.45444 ], [ 92.67932, 11.45426 ], [ 92.6792, 11.45407 ], [ 92.67923, 11.45388 ], [ 92.67964, 11.4536 ], [ 92.67958, 11.45345 ], [ 92.6791, 11.45331 ], [ 92.67907, 11.45324 ], [ 92.67914, 11.45289 ], [ 92.67913, 11.4528 ], [ 92.67918, 11.4527 ], [ 92.67948, 11.45262 ], [ 92.67963, 11.45249 ], [ 92.67986, 11.45235 ], [ 92.68001, 11.45219 ], [ 92.68013, 11.45202 ], [ 92.68016, 11.45188 ], [ 92.68014, 11.45162 ], [ 92.68022, 11.45152 ], [ 92.68034, 11.45146 ], [ 92.68034, 11.45109 ], [ 92.68042, 11.45097 ], [ 92.6804, 11.45087 ], [ 92.68025, 11.45075 ], [ 92.68024, 11.45066 ], [ 92.68031, 11.45059 ], [ 92.68059, 11.4505 ], [ 92.68079, 11.45032 ], [ 92.68099, 11.45007 ], [ 92.68107, 11.44942 ], [ 92.68101, 11.4493 ], [ 92.68103, 11.44919 ], [ 92.68117, 11.44902 ], [ 92.68132, 11.44893 ], [ 92.68134, 11.44869 ], [ 92.68141, 11.44858 ], [ 92.68149, 11.44854 ], [ 92.68145, 11.44836 ], [ 92.68127, 11.44825 ], [ 92.68126, 11.44792 ], [ 92.6813, 11.44776 ], [ 92.68123, 11.4476 ], [ 92.68116, 11.44755 ], [ 92.6809, 11.44751 ], [ 92.68085, 11.44747 ], [ 92.6808, 11.44731 ], [ 92.68078, 11.44715 ], [ 92.68054, 11.44693 ], [ 92.68046, 11.44676 ], [ 92.68052, 11.44659 ], [ 92.68067, 11.44649 ], [ 92.68089, 11.44625 ], [ 92.68105, 11.44622 ], [ 92.68125, 11.44611 ], [ 92.68135, 11.44587 ], [ 92.68144, 11.44578 ], [ 92.68172, 11.44588 ], [ 92.68183, 11.44586 ], [ 92.68203, 11.44578 ], [ 92.6822, 11.44564 ], [ 92.6823, 11.44552 ], [ 92.68253, 11.44539 ], [ 92.68281, 11.44529 ], [ 92.68285, 11.44523 ], [ 92.68285, 11.44503 ], [ 92.68293, 11.44493 ], [ 92.68299, 11.44493 ], [ 92.68308, 11.44485 ], [ 92.683, 11.44474 ], [ 92.68282, 11.44469 ], [ 92.68287, 11.44447 ], [ 92.68296, 11.44427 ], [ 92.68339, 11.44418 ], [ 92.68355, 11.44412 ], [ 92.6837, 11.44394 ], [ 92.68392, 11.4438 ], [ 92.68396, 11.44368 ], [ 92.68396, 11.44354 ], [ 92.68392, 11.4433 ], [ 92.68391, 11.44305 ], [ 92.68398, 11.44283 ], [ 92.68409, 11.4426 ], [ 92.68416, 11.44236 ], [ 92.68416, 11.44227 ], [ 92.68404, 11.44208 ], [ 92.68386, 11.44198 ], [ 92.68373, 11.44177 ], [ 92.68359, 11.4414 ], [ 92.68338, 11.44116 ], [ 92.68323, 11.44085 ], [ 92.68326, 11.4406 ], [ 92.68332, 11.44053 ], [ 92.68351, 11.44045 ], [ 92.68362, 11.44029 ], [ 92.68369, 11.44025 ], [ 92.68397, 11.44027 ], [ 92.68406, 11.44025 ], [ 92.68436, 11.43999 ], [ 92.68439, 11.4399 ], [ 92.68431, 11.43971 ], [ 92.68399, 11.43965 ], [ 92.68388, 11.43951 ], [ 92.68388, 11.43938 ], [ 92.68394, 11.43929 ], [ 92.68412, 11.4394 ], [ 92.68424, 11.43943 ], [ 92.68426, 11.43931 ], [ 92.68404, 11.43904 ], [ 92.68401, 11.43892 ], [ 92.68403, 11.4388 ], [ 92.68409, 11.43873 ], [ 92.68454, 11.43873 ], [ 92.68469, 11.43879 ], [ 92.68484, 11.43871 ], [ 92.68483, 11.43863 ], [ 92.68478, 11.43857 ], [ 92.68477, 11.4385 ], [ 92.6848, 11.4384 ], [ 92.68495, 11.4383 ], [ 92.68504, 11.4383 ], [ 92.68514, 11.43826 ], [ 92.68512, 11.43814 ], [ 92.68468, 11.43773 ], [ 92.68468, 11.43764 ], [ 92.68473, 11.43752 ], [ 92.68483, 11.43741 ], [ 92.68497, 11.43737 ], [ 92.68512, 11.43735 ], [ 92.68511, 11.43723 ], [ 92.68496, 11.43707 ], [ 92.68479, 11.43677 ], [ 92.68479, 11.43662 ], [ 92.68487, 11.43646 ], [ 92.68501, 11.43639 ], [ 92.68517, 11.43639 ], [ 92.68539, 11.43656 ], [ 92.68548, 11.43658 ], [ 92.68545, 11.43645 ], [ 92.68529, 11.43632 ], [ 92.6853, 11.43616 ], [ 92.68535, 11.43612 ], [ 92.68541, 11.43612 ], [ 92.68549, 11.43607 ], [ 92.6854, 11.43579 ], [ 92.68547, 11.43554 ], [ 92.68543, 11.43541 ], [ 92.68527, 11.43526 ], [ 92.6851, 11.43517 ], [ 92.68498, 11.43505 ], [ 92.68484, 11.4348 ], [ 92.68472, 11.43467 ], [ 92.68468, 11.43451 ], [ 92.68469, 11.43435 ], [ 92.68478, 11.43423 ], [ 92.68504, 11.4342 ], [ 92.68518, 11.43416 ], [ 92.68525, 11.43406 ], [ 92.68524, 11.43389 ], [ 92.68509, 11.4336 ], [ 92.68486, 11.43328 ], [ 92.68443, 11.43294 ], [ 92.68414, 11.43285 ], [ 92.68369, 11.43241 ], [ 92.68361, 11.43226 ], [ 92.68349, 11.43218 ], [ 92.68338, 11.4322 ], [ 92.68307, 11.43211 ], [ 92.68293, 11.43184 ], [ 92.6828, 11.4318 ], [ 92.68271, 11.43189 ], [ 92.6827, 11.43202 ], [ 92.68262, 11.43206 ], [ 92.6822, 11.43204 ], [ 92.6818, 11.43194 ], [ 92.68117, 11.43164 ], [ 92.6811475, 11.43162 ], [ 92.68108, 11.43156 ], [ 92.680985581395348, 11.43142 ], [ 92.68079, 11.43113 ], [ 92.68073, 11.43099 ], [ 92.68073, 11.43089 ], [ 92.6808, 11.43081 ], [ 92.68089, 11.43078 ], [ 92.68093, 11.43066 ], [ 92.68083, 11.43056 ], [ 92.68067, 11.43045 ], [ 92.6806, 11.43036 ], [ 92.68061, 11.43026 ], [ 92.68079, 11.43006 ], [ 92.68087, 11.43002 ], [ 92.68099, 11.43003 ], [ 92.68108, 11.42998 ], [ 92.68095, 11.42979 ], [ 92.68092, 11.42965 ], [ 92.68107, 11.42919 ], [ 92.68141, 11.42869 ], [ 92.68161, 11.42853 ], [ 92.68185, 11.42841 ], [ 92.68253, 11.42776 ], [ 92.68328, 11.42742 ], [ 92.68355, 11.42733 ], [ 92.6839, 11.42734 ], [ 92.68415, 11.4273 ], [ 92.68399, 11.42697 ], [ 92.6837, 11.42676 ], [ 92.68339, 11.42661 ], [ 92.6832, 11.42664 ], [ 92.68282, 11.42662 ], [ 92.68257, 11.42649 ], [ 92.68239, 11.4263 ], [ 92.68203, 11.42606 ], [ 92.68174, 11.42605 ], [ 92.68162, 11.4262 ], [ 92.68156, 11.42662 ], [ 92.6813, 11.42733 ], [ 92.68095, 11.42792 ], [ 92.68019, 11.42845 ], [ 92.6797, 11.42864 ], [ 92.67929, 11.42866 ], [ 92.67893, 11.42865 ], [ 92.67853, 11.42845 ], [ 92.67826, 11.42818 ], [ 92.67779, 11.42756 ], [ 92.67757, 11.42757 ], [ 92.67741, 11.42769 ], [ 92.67722, 11.42774 ], [ 92.67694, 11.42769 ], [ 92.67657, 11.42754 ], [ 92.67631, 11.42733 ], [ 92.67616, 11.42703 ], [ 92.67594, 11.42688 ], [ 92.67563, 11.42692 ], [ 92.67535, 11.42707 ], [ 92.67501, 11.42743 ], [ 92.67464, 11.42769 ], [ 92.6744, 11.42772 ], [ 92.67412, 11.42761 ], [ 92.6738, 11.42742 ], [ 92.67347, 11.42727 ], [ 92.67244, 11.42725 ], [ 92.67208, 11.42713 ], [ 92.67177, 11.42685 ], [ 92.67153, 11.4265 ], [ 92.67143, 11.42586 ], [ 92.67148, 11.42517 ], [ 92.67173, 11.4243 ], [ 92.6723, 11.42336 ], [ 92.67302, 11.42273 ], [ 92.67398, 11.42152 ], [ 92.67442, 11.42109 ], [ 92.67451, 11.42073 ], [ 92.6745, 11.42044 ], [ 92.67442, 11.4201 ], [ 92.67418, 11.4197 ], [ 92.67414, 11.41944 ], [ 92.67399, 11.41913 ], [ 92.67384, 11.41871 ], [ 92.67389, 11.41841 ], [ 92.67402, 11.41824 ], [ 92.67405, 11.4181 ], [ 92.67392, 11.41794 ], [ 92.67354, 11.41781 ], [ 92.67319, 11.4176 ], [ 92.67279, 11.41726 ], [ 92.67244, 11.41679 ], [ 92.67208, 11.41639 ], [ 92.67126, 11.41596 ], [ 92.67028, 11.41561 ], [ 92.66909, 11.41515 ], [ 92.66751, 11.4145 ], [ 92.66517, 11.41385 ], [ 92.66377, 11.41341 ], [ 92.66279, 11.41296 ], [ 92.66201, 11.41271 ], [ 92.66131, 11.41258 ], [ 92.6608, 11.41258 ], [ 92.6604, 11.41244 ], [ 92.65944, 11.41241 ], [ 92.6582, 11.41243 ], [ 92.65787, 11.41224 ], [ 92.6574, 11.41188 ], [ 92.65708, 11.41154 ], [ 92.65683, 11.41133 ], [ 92.65644, 11.41123 ], [ 92.65594, 11.41106 ], [ 92.65564, 11.41086 ], [ 92.65541, 11.4105 ], [ 92.6551, 11.41028 ], [ 92.65464, 11.41019 ], [ 92.65391, 11.41016 ], [ 92.65275, 11.40999 ], [ 92.65211, 11.40987 ], [ 92.65118, 11.40959 ], [ 92.65004, 11.40889 ], [ 92.64918, 11.40829 ], [ 92.64831, 11.40728 ], [ 92.64824, 11.40698 ], [ 92.64822, 11.40665 ], [ 92.64829, 11.40622 ], [ 92.64865, 11.40594 ], [ 92.64923, 11.40593 ], [ 92.65066, 11.40627 ], [ 92.65198, 11.40683 ], [ 92.65225, 11.40681 ], [ 92.65367, 11.40724 ], [ 92.65438, 11.40743 ], [ 92.65495, 11.4075 ], [ 92.65539, 11.40741 ], [ 92.65582, 11.40715 ], [ 92.65626, 11.40662 ], [ 92.6576, 11.40532 ], [ 92.65808, 11.40496 ], [ 92.65852, 11.40471 ], [ 92.65898, 11.40412 ], [ 92.65947, 11.40314 ], [ 92.6597, 11.40261 ], [ 92.6598, 11.40229 ], [ 92.65987, 11.40223 ], [ 92.66011, 11.40218 ], [ 92.66033, 11.40219 ], [ 92.66049, 11.40217 ], [ 92.66105, 11.40176 ], [ 92.66152, 11.40164 ], [ 92.66189, 11.40166 ], [ 92.66259, 11.40179 ], [ 92.66329, 11.40208 ], [ 92.66357, 11.4021 ], [ 92.66372, 11.40201 ], [ 92.66387, 11.40175 ], [ 92.66382, 11.40154 ], [ 92.6637, 11.40132 ], [ 92.6635, 11.40113 ], [ 92.66284, 11.40072 ], [ 92.66259, 11.40062 ], [ 92.66194, 11.40012 ], [ 92.66172, 11.4 ], [ 92.66162, 11.39987 ], [ 92.66157, 11.39961 ], [ 92.66159, 11.39922 ], [ 92.66143, 11.39832 ], [ 92.66151, 11.39732 ], [ 92.66172, 11.39647 ], [ 92.66234, 11.39565 ], [ 92.66287, 11.39506 ], [ 92.66353, 11.39472 ], [ 92.66361, 11.3946 ], [ 92.6638, 11.39446 ], [ 92.66411, 11.39444 ], [ 92.66482, 11.39445 ], [ 92.66541, 11.39434 ], [ 92.66613, 11.39434 ], [ 92.66662, 11.39438 ], [ 92.667, 11.39446 ], [ 92.66718, 11.39463 ], [ 92.66754, 11.39511 ], [ 92.66777, 11.39525 ], [ 92.66804, 11.39534 ], [ 92.66833, 11.39547 ], [ 92.66885, 11.39547 ], [ 92.66909, 11.39534 ], [ 92.66963, 11.39531 ], [ 92.67031, 11.39551 ], [ 92.6708, 11.3956 ], [ 92.67187, 11.39624 ], [ 92.6724, 11.39674 ], [ 92.67247, 11.397 ], [ 92.67247, 11.39733 ], [ 92.67242, 11.39765 ], [ 92.67226, 11.39791 ], [ 92.67203, 11.39814 ], [ 92.67166, 11.39835 ], [ 92.6717, 11.39849 ], [ 92.67186, 11.39864 ], [ 92.67194, 11.39883 ], [ 92.67213, 11.39904 ], [ 92.67242, 11.39919 ], [ 92.6727, 11.39922 ], [ 92.67291, 11.39918 ], [ 92.67317, 11.39878 ], [ 92.67334, 11.39866 ], [ 92.6736, 11.39861 ], [ 92.67388, 11.39875 ], [ 92.67414, 11.39898 ], [ 92.67455, 11.39941 ], [ 92.67467, 11.39943 ], [ 92.67482, 11.39923 ], [ 92.67482, 11.39898 ], [ 92.67493, 11.39869 ], [ 92.67526, 11.39809 ], [ 92.67557, 11.39727 ], [ 92.67605, 11.39537 ], [ 92.67635, 11.39456 ], [ 92.67694, 11.39365 ], [ 92.67774, 11.39267 ], [ 92.67835, 11.39221 ], [ 92.67929, 11.39187 ], [ 92.68056, 11.39145 ], [ 92.68162, 11.39079 ], [ 92.68271, 11.39003 ], [ 92.68411, 11.38934 ], [ 92.68471, 11.38927 ], [ 92.68569, 11.38932 ], [ 92.68629, 11.38957 ], [ 92.68676, 11.39012 ], [ 92.68736, 11.39052 ], [ 92.68778, 11.39071 ], [ 92.68809, 11.39079 ], [ 92.68835, 11.39078 ], [ 92.68853, 11.39072 ], [ 92.68875, 11.39055 ], [ 92.6889, 11.39031 ], [ 92.68892, 11.39008 ], [ 92.68886, 11.38994 ], [ 92.68865, 11.38976 ], [ 92.68846, 11.38942 ], [ 92.6884, 11.38909 ], [ 92.68844, 11.38883 ], [ 92.68852, 11.38869 ], [ 92.68872, 11.38857 ], [ 92.6889, 11.38842 ], [ 92.6889, 11.38828 ], [ 92.68878, 11.38775 ], [ 92.68878, 11.3876 ], [ 92.68887, 11.3875 ], [ 92.68913, 11.38732 ], [ 92.68955, 11.38679 ], [ 92.69006, 11.38641 ], [ 92.69052, 11.38629 ], [ 92.69074, 11.3863 ], [ 92.69109, 11.38656 ], [ 92.69138, 11.38695 ], [ 92.69173, 11.38731 ], [ 92.69212, 11.38743 ], [ 92.69257, 11.38748 ], [ 92.6929, 11.38743 ], [ 92.69322, 11.38725 ], [ 92.69328, 11.3871 ], [ 92.69328, 11.38692 ], [ 92.69311, 11.38663 ], [ 92.69296, 11.38649 ], [ 92.69279, 11.38639 ], [ 92.69236, 11.38637 ], [ 92.69219, 11.38623 ], [ 92.69218, 11.38601 ], [ 92.69224, 11.38578 ], [ 92.69195, 11.38561 ], [ 92.69155, 11.38559 ], [ 92.69105, 11.38536 ], [ 92.69094, 11.38518 ], [ 92.69052, 11.38351 ], [ 92.69008, 11.3821 ], [ 92.69012, 11.38108 ], [ 92.6903, 11.38035 ], [ 92.69085, 11.37992 ], [ 92.69111, 11.37851 ], [ 92.69154, 11.37779 ], [ 92.69188, 11.37698 ], [ 92.69186, 11.37602 ], [ 92.69166, 11.37496 ], [ 92.6911, 11.37376 ], [ 92.69062, 11.37301 ], [ 92.69058, 11.37185 ], [ 92.69045, 11.37085 ], [ 92.69026, 11.37016 ], [ 92.68973, 11.36975 ], [ 92.68921, 11.36952 ], [ 92.68776, 11.36945 ], [ 92.68737, 11.36938 ], [ 92.68682, 11.36907 ], [ 92.6867, 11.36859 ], [ 92.68664, 11.36815 ], [ 92.68593, 11.36757 ], [ 92.68493, 11.36712 ], [ 92.68416, 11.36691 ], [ 92.68354, 11.36689 ], [ 92.68332, 11.3672 ], [ 92.68299, 11.36729 ], [ 92.68238, 11.3673 ], [ 92.68214, 11.36714 ], [ 92.68207, 11.36682 ], [ 92.68181, 11.36663 ], [ 92.68156, 11.36672 ], [ 92.6814, 11.36685 ], [ 92.68057, 11.36677 ], [ 92.68034, 11.36653 ], [ 92.68014, 11.366 ], [ 92.67977, 11.36577 ], [ 92.68011, 11.36539 ], [ 92.67993, 11.36499 ], [ 92.67909, 11.36409 ], [ 92.67906, 11.36384 ], [ 92.67901, 11.36367 ], [ 92.67883, 11.36364 ], [ 92.6787, 11.36348 ], [ 92.6787, 11.36324 ], [ 92.67865, 11.36312 ], [ 92.67851, 11.36303 ], [ 92.67836, 11.36312 ], [ 92.67835, 11.36324 ], [ 92.6783, 11.36334 ], [ 92.67818, 11.36336 ], [ 92.678, 11.36331 ], [ 92.6777, 11.36312 ], [ 92.6774, 11.36286 ], [ 92.67724, 11.36285 ], [ 92.67692, 11.36293 ], [ 92.67665, 11.36293 ], [ 92.67616, 11.3631 ], [ 92.67591, 11.36303 ], [ 92.67562, 11.36278 ], [ 92.67536, 11.36273 ], [ 92.67506, 11.36279 ], [ 92.67461, 11.36292 ], [ 92.67415, 11.36314 ], [ 92.67381, 11.36322 ], [ 92.67365, 11.36328 ], [ 92.6735, 11.36356 ], [ 92.67341, 11.3636 ], [ 92.67292, 11.36357 ], [ 92.67246, 11.36346 ], [ 92.66951, 11.3626 ], [ 92.66828, 11.36194 ], [ 92.6678, 11.36159 ], [ 92.66753, 11.36135 ], [ 92.66689, 11.3604 ], [ 92.66597, 11.35913 ], [ 92.66547, 11.35862 ], [ 92.66496, 11.35779 ], [ 92.66467, 11.35719 ], [ 92.66443, 11.3566 ], [ 92.66437, 11.35617 ], [ 92.66437, 11.3553 ], [ 92.66449, 11.35488 ], [ 92.6647, 11.35433 ], [ 92.66472, 11.35385 ], [ 92.66478, 11.35363 ], [ 92.66485, 11.35349 ], [ 92.66503, 11.35325 ], [ 92.66504, 11.35303 ], [ 92.66491, 11.35287 ], [ 92.66474, 11.35273 ], [ 92.66442, 11.35276 ], [ 92.6644, 11.35287 ], [ 92.66443, 11.35298 ], [ 92.66456, 11.35312 ], [ 92.6646, 11.35341 ], [ 92.66449, 11.3536 ], [ 92.66442, 11.35379 ], [ 92.6642, 11.354 ], [ 92.66393, 11.35414 ], [ 92.66323, 11.35436 ], [ 92.66266, 11.35461 ], [ 92.66164, 11.35523 ], [ 92.66125, 11.35533 ], [ 92.66115, 11.35543 ], [ 92.6608, 11.35559 ], [ 92.66029, 11.35573 ], [ 92.65942, 11.3559 ], [ 92.65896, 11.35604 ], [ 92.6586, 11.35609 ], [ 92.65866, 11.35634 ], [ 92.65864, 11.35645 ], [ 92.65847, 11.35663 ], [ 92.65783, 11.35688 ], [ 92.65684, 11.35693 ], [ 92.65628, 11.357 ], [ 92.65593, 11.35702 ], [ 92.65569, 11.35711 ], [ 92.65521, 11.3572 ], [ 92.65385, 11.35725 ], [ 92.65245, 11.35723 ], [ 92.65164, 11.35717 ], [ 92.65091, 11.35704 ], [ 92.65021, 11.35681 ], [ 92.64914, 11.35637 ], [ 92.64871, 11.35623 ], [ 92.64843, 11.3562 ], [ 92.64832, 11.35623 ], [ 92.64813, 11.35615 ], [ 92.64752, 11.35563 ], [ 92.64623, 11.35476 ], [ 92.64577, 11.35437 ], [ 92.6454, 11.35401 ], [ 92.64501, 11.35376 ], [ 92.64449, 11.35329 ], [ 92.64417, 11.35292 ], [ 92.64398, 11.35276 ], [ 92.64339, 11.35241 ], [ 92.6427, 11.35196 ], [ 92.64178, 11.35143 ], [ 92.64074, 11.35066 ], [ 92.64024, 11.35034 ], [ 92.63993, 11.35004 ], [ 92.63977, 11.34965 ], [ 92.63928, 11.34919 ], [ 92.63912, 11.34899 ], [ 92.63909, 11.34891 ], [ 92.63916, 11.34881 ], [ 92.63904, 11.3486 ], [ 92.63878, 11.34828 ], [ 92.63856, 11.3481 ], [ 92.63832, 11.34782 ], [ 92.63828, 11.34748 ], [ 92.63829, 11.34714 ], [ 92.63836, 11.34661 ], [ 92.63823, 11.34642 ], [ 92.63805, 11.34644 ], [ 92.6377, 11.34661 ], [ 92.63753, 11.34678 ], [ 92.63744, 11.34679 ], [ 92.63684, 11.34716 ], [ 92.63618, 11.34742 ], [ 92.63541, 11.34791 ], [ 92.63376, 11.34852 ], [ 92.63047, 11.34918 ], [ 92.62956, 11.34943 ], [ 92.62831, 11.34972 ], [ 92.62774, 11.3498 ], [ 92.62728, 11.3498 ], [ 92.62684, 11.34975 ], [ 92.62648, 11.3496 ], [ 92.62584, 11.34926 ], [ 92.62507, 11.34861 ], [ 92.62432, 11.34814 ], [ 92.62375, 11.34786 ], [ 92.62333, 11.34771 ], [ 92.62289, 11.34761 ], [ 92.62267, 11.34748 ], [ 92.62255, 11.34746 ], [ 92.62239, 11.34747 ], [ 92.62224, 11.34751 ], [ 92.62199, 11.34762 ], [ 92.62137, 11.34798 ], [ 92.62121, 11.34812 ], [ 92.621, 11.34823 ], [ 92.62079, 11.34841 ], [ 92.62069, 11.34854 ], [ 92.62057, 11.34882 ], [ 92.62046, 11.34889 ], [ 92.62035, 11.34889 ], [ 92.62027, 11.34882 ], [ 92.62016, 11.34878 ], [ 92.62, 11.34879 ], [ 92.61953, 11.34903 ], [ 92.61916, 11.34913 ], [ 92.61857, 11.34915 ], [ 92.61737, 11.34897 ], [ 92.61687, 11.34894 ], [ 92.61637, 11.34894 ], [ 92.61546, 11.349 ], [ 92.61423, 11.34894 ], [ 92.61416, 11.3489 ], [ 92.6141, 11.34882 ], [ 92.61388, 11.34875 ], [ 92.61331, 11.34867 ], [ 92.613, 11.34865 ], [ 92.61289, 11.34858 ], [ 92.61282, 11.34847 ], [ 92.61272, 11.34841 ], [ 92.61253, 11.34835 ], [ 92.61222, 11.34821 ], [ 92.61188, 11.34802 ], [ 92.61178, 11.34794 ], [ 92.61179, 11.34768 ], [ 92.61165, 11.34755 ], [ 92.61141, 11.34739 ], [ 92.6111, 11.34726 ], [ 92.61098, 11.34711 ], [ 92.61089, 11.34694 ], [ 92.61062, 11.34676 ], [ 92.61036, 11.34667 ], [ 92.61023, 11.34666 ], [ 92.61009, 11.34647 ], [ 92.60996, 11.34644 ], [ 92.60982, 11.34645 ], [ 92.60969, 11.34649 ], [ 92.6096, 11.34648 ], [ 92.60954, 11.34643 ], [ 92.60941, 11.34638 ], [ 92.60918, 11.34636 ], [ 92.60877, 11.34638 ], [ 92.60803, 11.34628 ], [ 92.60776, 11.34628 ], [ 92.60756, 11.34632 ], [ 92.60744, 11.34639 ], [ 92.60719, 11.34642 ], [ 92.60602, 11.34637 ], [ 92.60517, 11.34639 ], [ 92.60478, 11.34642 ], [ 92.60291, 11.34646 ], [ 92.60133, 11.34664 ], [ 92.6008, 11.34677 ], [ 92.60027, 11.34687 ], [ 92.59952, 11.34695 ], [ 92.59838, 11.34718 ], [ 92.59807, 11.34731 ], [ 92.59787, 11.34743 ], [ 92.59721, 11.34822 ], [ 92.59702, 11.34835 ], [ 92.59646, 11.34861 ], [ 92.59617, 11.34869 ], [ 92.59504, 11.34887 ], [ 92.59461, 11.34898 ], [ 92.59446, 11.34904 ], [ 92.59425, 11.34917 ], [ 92.59387, 11.34936 ], [ 92.59287, 11.35006 ], [ 92.59259, 11.35028 ], [ 92.5923, 11.35065 ], [ 92.59214, 11.3509 ], [ 92.59166, 11.35156 ], [ 92.59133, 11.35188 ], [ 92.5902, 11.35275 ], [ 92.5898, 11.35316 ], [ 92.58921, 11.35364 ], [ 92.58875, 11.35415 ], [ 92.58748, 11.3559 ], [ 92.58698, 11.35682 ], [ 92.58672, 11.35749 ], [ 92.58653, 11.35788 ], [ 92.58636, 11.35864 ], [ 92.58636, 11.35927 ], [ 92.58638, 11.35947 ], [ 92.58634, 11.35966 ], [ 92.58624, 11.35987 ], [ 92.58602, 11.36016 ], [ 92.58549, 11.36075 ], [ 92.58519, 11.36098 ], [ 92.58505, 11.36113 ], [ 92.58432, 11.36218 ], [ 92.58386, 11.36274 ], [ 92.58373, 11.36297 ], [ 92.58361, 11.36336 ], [ 92.58337, 11.36383 ], [ 92.58313, 11.36423 ], [ 92.58279, 11.36471 ], [ 92.58269, 11.36493 ], [ 92.58264, 11.36522 ], [ 92.58268, 11.36555 ], [ 92.58267, 11.36587 ], [ 92.58262, 11.36626 ], [ 92.58227, 11.36673 ], [ 92.58177, 11.36747 ], [ 92.58132, 11.36893 ], [ 92.58133, 11.36961 ], [ 92.58156, 11.37017 ], [ 92.58188, 11.37072 ], [ 92.58265, 11.37141 ], [ 92.58364, 11.37214 ], [ 92.58487, 11.37295 ], [ 92.58578, 11.37333 ], [ 92.58657, 11.37353 ], [ 92.58727, 11.37384 ], [ 92.58793, 11.37421 ], [ 92.58833, 11.37438 ], [ 92.58917, 11.37444 ], [ 92.58942, 11.37458 ], [ 92.58951, 11.37496 ], [ 92.58961, 11.37591 ], [ 92.58988, 11.37637 ], [ 92.59025, 11.37724 ], [ 92.59112, 11.37824 ], [ 92.59151, 11.37875 ], [ 92.59176, 11.37935 ], [ 92.59193, 11.38008 ], [ 92.59201, 11.38081 ], [ 92.59205, 11.38169 ], [ 92.59201, 11.38288 ], [ 92.59185, 11.38413 ], [ 92.59084, 11.38797 ], [ 92.58963, 11.39317 ], [ 92.58926, 11.39446 ], [ 92.58826, 11.39681 ], [ 92.58745, 11.39881 ], [ 92.58704, 11.39949 ], [ 92.58687, 11.39984 ], [ 92.58686, 11.40015 ], [ 92.58707, 11.4005 ], [ 92.58742, 11.40082 ], [ 92.5878, 11.40099 ], [ 92.58837, 11.40101 ], [ 92.58922, 11.40073 ], [ 92.58979, 11.40066 ], [ 92.59018, 11.40072 ], [ 92.59082, 11.40074 ], [ 92.59212, 11.40105 ], [ 92.59238, 11.401 ], [ 92.59269, 11.40083 ], [ 92.59314, 11.40064 ], [ 92.59385, 11.40024 ], [ 92.59424, 11.40014 ], [ 92.59466, 11.40009 ], [ 92.59552, 11.40008 ], [ 92.59666, 11.4 ], [ 92.59761, 11.4002 ], [ 92.59801, 11.40001 ], [ 92.59944, 11.40047 ], [ 92.6003, 11.40083 ], [ 92.60119, 11.40087 ], [ 92.60175, 11.4008 ], [ 92.60245, 11.40057 ], [ 92.60348, 11.40045 ], [ 92.60457, 11.40052 ], [ 92.60561, 11.40072 ], [ 92.60637, 11.40097 ], [ 92.60683, 11.40118 ], [ 92.60729, 11.40141 ], [ 92.60813, 11.40157 ], [ 92.60851, 11.40156 ], [ 92.60918, 11.40137 ], [ 92.6097, 11.40115 ], [ 92.61053, 11.40092 ], [ 92.61128, 11.40085 ], [ 92.61194, 11.40068 ], [ 92.61242, 11.40028 ], [ 92.61348, 11.4 ], [ 92.61447, 11.40012 ], [ 92.6162, 11.40076 ], [ 92.61819, 11.40154 ], [ 92.61936, 11.40216 ], [ 92.6206, 11.40328 ], [ 92.62189, 11.40377 ], [ 92.62268, 11.40449 ], [ 92.62337, 11.40552 ], [ 92.62385, 11.40661 ], [ 92.62438, 11.40752 ], [ 92.62475, 11.40831 ], [ 92.62478, 11.40936 ], [ 92.62434, 11.4107 ], [ 92.62426, 11.4122 ], [ 92.62435, 11.41362 ], [ 92.62446, 11.41479 ], [ 92.62508, 11.41745 ], [ 92.62544, 11.41854 ] ] ], [ [ [ 92.56153, 11.51799 ], [ 92.56125, 11.51844 ], [ 92.56115, 11.51856 ], [ 92.56073, 11.51962 ], [ 92.56063, 11.52085 ], [ 92.56044, 11.52118 ], [ 92.56002, 11.52171 ], [ 92.55972, 11.52189 ], [ 92.55955, 11.5219 ], [ 92.55939, 11.52188 ], [ 92.55924, 11.52181 ], [ 92.55888, 11.52193 ], [ 92.55873, 11.52214 ], [ 92.55853, 11.52267 ], [ 92.55824, 11.52314 ], [ 92.55801, 11.52334 ], [ 92.55776, 11.52349 ], [ 92.55733, 11.52354 ], [ 92.55716, 11.52369 ], [ 92.55695, 11.52419 ], [ 92.5566, 11.52479 ], [ 92.55615, 11.52564 ], [ 92.55565, 11.52668 ], [ 92.55533, 11.52745 ], [ 92.55499, 11.52798 ], [ 92.55426, 11.52923 ], [ 92.55405, 11.5298 ], [ 92.55388, 11.53014 ], [ 92.5536, 11.5305 ], [ 92.55352, 11.53067 ], [ 92.55296, 11.5307 ], [ 92.55285, 11.53084 ], [ 92.55277, 11.53118 ], [ 92.55271, 11.53163 ], [ 92.55254, 11.53236 ], [ 92.55249, 11.53293 ], [ 92.55246, 11.53371 ], [ 92.55251, 11.53409 ], [ 92.5525, 11.53442 ], [ 92.55232, 11.5349 ], [ 92.55221, 11.53513 ], [ 92.55208, 11.53529 ], [ 92.55205, 11.53651 ], [ 92.55213, 11.53727 ], [ 92.55238, 11.5384 ], [ 92.55249, 11.53844 ], [ 92.55266, 11.53837 ], [ 92.55298, 11.53811 ], [ 92.55314, 11.5381 ], [ 92.55359, 11.53822 ], [ 92.55405, 11.53845 ], [ 92.55419, 11.53835 ], [ 92.55424, 11.53792 ], [ 92.55428, 11.53777 ], [ 92.55438, 11.53759 ], [ 92.55451, 11.53746 ], [ 92.55466, 11.53739 ], [ 92.55478, 11.53741 ], [ 92.55483, 11.5375 ], [ 92.555, 11.53769 ], [ 92.55526, 11.53791 ], [ 92.55573, 11.53817 ], [ 92.55595, 11.53838 ], [ 92.55631, 11.5388 ], [ 92.55657, 11.53926 ], [ 92.55766, 11.54057 ], [ 92.55813, 11.54092 ], [ 92.55888, 11.54134 ], [ 92.559, 11.54134 ], [ 92.55914, 11.5413 ], [ 92.55919, 11.54118 ], [ 92.55916, 11.54102 ], [ 92.55917, 11.54069 ], [ 92.55927, 11.5404 ], [ 92.55945, 11.54007 ], [ 92.55983, 11.53873 ], [ 92.56012, 11.53756 ], [ 92.56025, 11.5369 ], [ 92.56031, 11.53594 ], [ 92.5603, 11.5348 ], [ 92.56034, 11.53371 ], [ 92.5603595, 11.5335918 ], [ 92.5604655, 11.5332496 ], [ 92.5605, 11.5331 ], [ 92.5606, 11.53288 ], [ 92.56093, 11.53246 ], [ 92.56141, 11.5316 ], [ 92.56198, 11.53102 ], [ 92.56262, 11.53058 ], [ 92.56315, 11.53045 ], [ 92.56442, 11.53005 ], [ 92.56541, 11.52982 ], [ 92.56555, 11.52975 ], [ 92.56567, 11.52962 ], [ 92.56574, 11.52942 ], [ 92.56607, 11.52877 ], [ 92.56624, 11.52864 ], [ 92.5665, 11.52849 ], [ 92.56684, 11.52837 ], [ 92.56709, 11.52825 ], [ 92.56806, 11.52761 ], [ 92.56843, 11.52756 ], [ 92.56857, 11.52765 ], [ 92.56874, 11.52772 ], [ 92.56882, 11.52769 ], [ 92.56886, 11.52752 ], [ 92.56885, 11.52687 ], [ 92.56855, 11.52522 ], [ 92.56834, 11.52455 ], [ 92.56806, 11.52262 ], [ 92.56777, 11.52141 ], [ 92.56754, 11.52091 ], [ 92.56717, 11.52025 ], [ 92.56721, 11.51987 ], [ 92.56715, 11.51901 ], [ 92.56716, 11.51868 ], [ 92.56711, 11.51842 ], [ 92.56695, 11.5182 ], [ 92.56688, 11.51802 ], [ 92.56684, 11.51777 ], [ 92.56666, 11.51739 ], [ 92.56658, 11.51704 ], [ 92.56647, 11.51698 ], [ 92.56636, 11.51698 ], [ 92.56628, 11.51705 ], [ 92.56614, 11.51709 ], [ 92.56576, 11.51711 ], [ 92.56472, 11.51711 ], [ 92.56431, 11.51713 ], [ 92.5622, 11.51679 ], [ 92.56169, 11.51678 ], [ 92.56151, 11.51685 ], [ 92.56143, 11.51697 ], [ 92.56149, 11.51717 ], [ 92.56157, 11.51732 ], [ 92.5616, 11.51749 ], [ 92.56155, 11.5177 ], [ 92.56153, 11.51799 ] ] ], [ [ [ 92.2626735, 11.5182987 ], [ 92.2607009, 11.5173735 ], [ 92.2583969, 11.5185131 ], [ 92.2580957, 11.5190598 ], [ 92.2565183, 11.5215194 ], [ 92.2547943, 11.5230522 ], [ 92.2522939, 11.5250177 ], [ 92.2483328, 11.5258419 ], [ 92.2442001, 11.525229 ], [ 92.2410319, 11.5247896 ], [ 92.237781, 11.5252732 ], [ 92.2350334, 11.5249967 ], [ 92.2309468, 11.5260942 ], [ 92.2298453, 11.527001 ], [ 92.2294108, 11.527129 ], [ 92.2290741, 11.5271901 ], [ 92.2286503, 11.5272295 ], [ 92.2283633, 11.5273636 ], [ 92.227918, 11.5276395 ], [ 92.2274835, 11.5276132 ], [ 92.2273172, 11.5272269 ], [ 92.228036, 11.5270287 ], [ 92.2281138, 11.5267538 ], [ 92.227749, 11.5267565 ], [ 92.2273896, 11.5267749 ], [ 92.2268907, 11.5267249 ], [ 92.2266708, 11.52688 ], [ 92.2261853, 11.5269141 ], [ 92.2259976, 11.5269851 ], [ 92.2262202, 11.5275633 ], [ 92.2256569, 11.5276053 ], [ 92.2254826, 11.5271086 ], [ 92.2251124, 11.5270403 ], [ 92.2246779, 11.5269194 ], [ 92.2243051, 11.5267565 ], [ 92.2240449, 11.5267749 ], [ 92.2241495, 11.526922 ], [ 92.2242246, 11.5271428 ], [ 92.224171, 11.5273504 ], [ 92.2241468, 11.5274687 ], [ 92.2242085, 11.5277473 ], [ 92.2240395, 11.5279785 ], [ 92.2240261, 11.5283176 ], [ 92.2239108, 11.5284411 ], [ 92.2236882, 11.5286618 ], [ 92.2234575, 11.528809 ], [ 92.2231651, 11.5288274 ], [ 92.2228674, 11.5285741 ], [ 92.2225697, 11.528059 ], [ 92.2224409, 11.5277436 ], [ 92.2221593, 11.5275149 ], [ 92.2220735, 11.5269078 ], [ 92.2221405, 11.5266082 ], [ 92.2222451, 11.5262955 ], [ 92.2222451, 11.5258944 ], [ 92.2224973, 11.5257525 ], [ 92.2227896, 11.5256096 ], [ 92.2228728, 11.5253872 ], [ 92.222972, 11.5251533 ], [ 92.2231437, 11.5250103 ], [ 92.2231598, 11.5247065 ], [ 92.2236748, 11.5244227 ], [ 92.2246511, 11.5245268 ], [ 92.2255416, 11.5243533 ], [ 92.2256972, 11.5241126 ], [ 92.2264911, 11.5239286 ], [ 92.2269578, 11.523466 ], [ 92.2272421, 11.5230928 ], [ 92.2267969, 11.5229551 ], [ 92.2264964, 11.5228931 ], [ 92.2270597, 11.5225252 ], [ 92.2275479, 11.5221415 ], [ 92.2275962, 11.5217262 ], [ 92.2281326, 11.5209746 ], [ 92.2284598, 11.5204847 ], [ 92.2291304, 11.5203175 ], [ 92.2295756, 11.5196973 ], [ 92.2301925, 11.5194807 ], [ 92.2308309, 11.5193651 ], [ 92.2313352, 11.5190707 ], [ 92.2313834, 11.5187763 ], [ 92.2309167, 11.5186933 ], [ 92.2307585, 11.5180904 ], [ 92.2309436, 11.5177761 ], [ 92.231303, 11.5175264 ], [ 92.2315095, 11.5173634 ], [ 92.2318421, 11.5173124 ], [ 92.2319226, 11.5170927 ], [ 92.232223, 11.5169666 ], [ 92.2324563, 11.5169429 ], [ 92.2332798, 11.5167695 ], [ 92.2337143, 11.5169718 ], [ 92.2339718, 11.517253 ], [ 92.2346101, 11.5172163 ], [ 92.2347362, 11.5176184 ], [ 92.2350017, 11.5178812 ], [ 92.2352163, 11.5177514 ], [ 92.2352726, 11.5175017 ], [ 92.2352512, 11.5172872 ], [ 92.2353799, 11.517098 ], [ 92.2356589, 11.5169603 ], [ 92.2357313, 11.5167237 ], [ 92.2358788, 11.5163595 ], [ 92.2361685, 11.5161965 ], [ 92.2362972, 11.5159836 ], [ 92.2366862, 11.5157129 ], [ 92.2368712, 11.5158548 ], [ 92.2372119, 11.5157812 ], [ 92.2374372, 11.5158759 ], [ 92.2378637, 11.515818 ], [ 92.2379763, 11.5156236 ], [ 92.2384323, 11.5154648 ], [ 92.2388829, 11.515408 ], [ 92.2394086, 11.5157182 ], [ 92.2396983, 11.5160693 ], [ 92.2400175, 11.5162596 ], [ 92.2403742, 11.5165408 ], [ 92.2407068, 11.5167668 ], [ 92.2411976, 11.5170428 ], [ 92.2415571, 11.5169193 ], [ 92.2417341, 11.5170733 ], [ 92.2420291, 11.5169298 ], [ 92.2423859, 11.516822 ], [ 92.2426943, 11.5166354 ], [ 92.2429116, 11.5164514 ], [ 92.2432576, 11.51632 ], [ 92.2437887, 11.5161192 ], [ 92.2440354, 11.5158995 ], [ 92.2440515, 11.5154921 ], [ 92.2443439, 11.5153712 ], [ 92.2446496, 11.5155395 ], [ 92.2449018, 11.5157907 ], [ 92.2450251, 11.5161061 ], [ 92.2450439, 11.5163332 ], [ 92.2451888, 11.5165408 ], [ 92.245339, 11.5166344 ], [ 92.2455375, 11.5164225 ], [ 92.2457896, 11.5160257 ], [ 92.245685, 11.5156104 ], [ 92.2454194, 11.5150296 ], [ 92.2450171, 11.5146853 ], [ 92.2447891, 11.514433 ], [ 92.2445102, 11.5143147 ], [ 92.2435902, 11.5141465 ], [ 92.2430269, 11.5139914 ], [ 92.2424744, 11.5137575 ], [ 92.2420801, 11.5135105 ], [ 92.2415731, 11.5134211 ], [ 92.2410206, 11.5132266 ], [ 92.2404681, 11.5133133 ], [ 92.2401677, 11.5134737 ], [ 92.2396876, 11.5136866 ], [ 92.2393228, 11.5139757 ], [ 92.2388561, 11.5144619 ], [ 92.2384645, 11.5145197 ], [ 92.2381506, 11.514496 ], [ 92.2375042, 11.5145854 ], [ 92.2371475, 11.5147247 ], [ 92.2366272, 11.5147589 ], [ 92.2360773, 11.5148167 ], [ 92.2354631, 11.5148351 ], [ 92.2349186, 11.5148745 ], [ 92.2346799, 11.5150191 ], [ 92.2344036, 11.5153607 ], [ 92.2341112, 11.5154554 ], [ 92.2337947, 11.5155 ], [ 92.2335158, 11.5154448 ], [ 92.2331456, 11.5155762 ], [ 92.2327084, 11.5157024 ], [ 92.2324992, 11.5158759 ], [ 92.2320486, 11.5159442 ], [ 92.2316838, 11.5161466 ], [ 92.2313781, 11.5163752 ], [ 92.2311662, 11.5166065 ], [ 92.2308819, 11.5167563 ], [ 92.2304876, 11.5168904 ], [ 92.2301469, 11.517048 ], [ 92.2296212, 11.5170507 ], [ 92.2293235, 11.5171059 ], [ 92.228433, 11.5172793 ], [ 92.2281809, 11.5174107 ], [ 92.2280092, 11.5177198 ], [ 92.2277785, 11.5180073 ], [ 92.2276525, 11.5182491 ], [ 92.227513, 11.5183096 ], [ 92.2273279, 11.5184226 ], [ 92.2270114, 11.5183516 ], [ 92.2268451, 11.5182465 ], [ 92.2265286, 11.5182807 ], [ 92.2262148, 11.5184173 ], [ 92.2259976, 11.5184489 ], [ 92.2255872, 11.5186512 ], [ 92.2252412, 11.5188405 ], [ 92.224922, 11.518943 ], [ 92.2246994, 11.5190402 ], [ 92.2244526, 11.5192846 ], [ 92.2241549, 11.5195159 ], [ 92.2238223, 11.5197314 ], [ 92.2236104, 11.5199207 ], [ 92.2232563, 11.5200783 ], [ 92.2228245, 11.5203228 ], [ 92.2225912, 11.5205777 ], [ 92.2223444, 11.5209535 ], [ 92.2220654, 11.5213845 ], [ 92.2219447, 11.5220468 ], [ 92.222103, 11.5223401 ], [ 92.2222988, 11.5226687 ], [ 92.2221647, 11.5229499 ], [ 92.2220628, 11.5231628 ], [ 92.221765, 11.5232847 ], [ 92.221419, 11.523127 ], [ 92.2212876, 11.5229325 ], [ 92.2210247, 11.5228905 ], [ 92.2207056, 11.5229982 ], [ 92.2205205, 11.5232137 ], [ 92.2203166, 11.5233425 ], [ 92.219925, 11.5233767 ], [ 92.2195522, 11.5236448 ], [ 92.2192786, 11.5239233 ], [ 92.2189863, 11.5241089 ], [ 92.2188736, 11.5244017 ], [ 92.2187154, 11.5246855 ], [ 92.2185196, 11.5248038 ], [ 92.2183989, 11.5246461 ], [ 92.2181762, 11.5245961 ], [ 92.2179402, 11.5247223 ], [ 92.2176854, 11.5249431 ], [ 92.2172911, 11.5252006 ], [ 92.216862, 11.5254571 ], [ 92.2167118, 11.5255843 ], [ 92.2164704, 11.5258839 ], [ 92.2162906, 11.5260127 ], [ 92.2159902, 11.5259654 ], [ 92.2156925, 11.5261494 ], [ 92.215309, 11.5263097 ], [ 92.2150649, 11.526541 ], [ 92.2148986, 11.5269446 ], [ 92.2147055, 11.5270929 ], [ 92.2144748, 11.5271165 ], [ 92.214228, 11.5271559 ], [ 92.2139437, 11.5272873 ], [ 92.2137425, 11.5274398 ], [ 92.2134797, 11.5276343 ], [ 92.213367, 11.527967 ], [ 92.2131015, 11.5282571 ], [ 92.2129298, 11.5285462 ], [ 92.2128789, 11.5287423 ], [ 92.2127287, 11.5289141 ], [ 92.2123156, 11.529085 ], [ 92.2120313, 11.5292742 ], [ 92.2115941, 11.5294739 ], [ 92.2113339, 11.5298077 ], [ 92.2108726, 11.5299365 ], [ 92.2104756, 11.5304437 ], [ 92.2099419, 11.5306776 ], [ 92.2095395, 11.5308274 ], [ 92.2090621, 11.5311743 ], [ 92.2085847, 11.5315317 ], [ 92.208177, 11.531826 ], [ 92.207898, 11.5320442 ], [ 92.2075413, 11.5324252 ], [ 92.2071336, 11.5326565 ], [ 92.2069485, 11.533056 ], [ 92.2067527, 11.533457 ], [ 92.2064228, 11.533805 ], [ 92.2060205, 11.5342517 ], [ 92.2056906, 11.5345855 ], [ 92.2054384, 11.5349419 ], [ 92.205425, 11.5355185 ], [ 92.205248, 11.5358785 ], [ 92.2048457, 11.5362937 ], [ 92.204379, 11.5368036 ], [ 92.2042502, 11.5372493 ], [ 92.2042422, 11.5376393 ], [ 92.2045238, 11.537768 ], [ 92.2047866, 11.5377602 ], [ 92.2051192, 11.5376655 ], [ 92.2051487, 11.5375473 ], [ 92.2050978, 11.537429 ], [ 92.2053419, 11.5371689 ], [ 92.205535, 11.5369744 ], [ 92.2057925, 11.536793 ], [ 92.2062619, 11.5367484 ], [ 92.2065837, 11.5367037 ], [ 92.2067929, 11.5364488 ], [ 92.2071631, 11.5362359 ], [ 92.207375, 11.5359915 ], [ 92.2076727, 11.5357707 ], [ 92.2080348, 11.5355631 ], [ 92.2083325, 11.5353765 ], [ 92.2088234, 11.5355185 ], [ 92.2091211, 11.5353056 ], [ 92.2094617, 11.5351137 ], [ 92.2098346, 11.5351847 ], [ 92.2101162, 11.535048 ], [ 92.2102101, 11.5345067 ], [ 92.2105614, 11.5343306 ], [ 92.2110013, 11.5341072 ], [ 92.2115807, 11.5345067 ], [ 92.211865, 11.535119 ], [ 92.2121118, 11.5353229 ], [ 92.2120769, 11.5356761 ], [ 92.2119841, 11.5360893 ], [ 92.2113143, 11.5394563 ], [ 92.2105081, 11.5408331 ], [ 92.2110386, 11.5423084 ], [ 92.210095, 11.5442224 ], [ 92.2074023, 11.547286 ], [ 92.2071207, 11.5496049 ], [ 92.207648, 11.553157 ], [ 92.2078135, 11.5558319 ], [ 92.2086624, 11.5577959 ], [ 92.2085742, 11.5589085 ], [ 92.2089728, 11.5604907 ], [ 92.2099912, 11.5615032 ], [ 92.2114479, 11.5638191 ], [ 92.2119616, 11.5664613 ], [ 92.2129921, 11.5680038 ], [ 92.2135484, 11.5695152 ], [ 92.2150037, 11.5716253 ], [ 92.2146971, 11.5735485 ], [ 92.2145671, 11.5744776 ], [ 92.2139134, 11.5755981 ], [ 92.2137396, 11.5762313 ], [ 92.2127654, 11.5781345 ], [ 92.211309, 11.5795884 ], [ 92.2105217, 11.5810701 ], [ 92.2097973, 11.581639 ], [ 92.2075077, 11.5834583 ], [ 92.2072865, 11.5845419 ], [ 92.2072827, 11.5856079 ], [ 92.2078857, 11.5863683 ], [ 92.2088006, 11.5863502 ], [ 92.2102297, 11.5861784 ], [ 92.2124771, 11.586932 ], [ 92.2149689, 11.5885214 ], [ 92.2162147, 11.5899074 ], [ 92.2170457, 11.5919997 ], [ 92.2171001, 11.5926216 ], [ 92.2170025, 11.5931045 ], [ 92.216767, 11.5935914 ], [ 92.2154962, 11.593635 ], [ 92.2155764, 11.5942648 ], [ 92.2161426, 11.594429 ], [ 92.2170797, 11.5943071 ], [ 92.2178453, 11.594175 ], [ 92.217944, 11.5935806 ], [ 92.2176859, 11.5934125 ], [ 92.2174121, 11.5932012 ], [ 92.2174982, 11.5928405 ], [ 92.2178219, 11.5925241 ], [ 92.2186317, 11.592233 ], [ 92.2194288, 11.5922369 ], [ 92.2200189, 11.5920167 ], [ 92.2204907, 11.5921119 ], [ 92.2212357, 11.5917032 ], [ 92.22569, 11.58926 ], [ 92.23013, 11.58711 ], [ 92.2323941, 11.5877672 ], [ 92.2336515, 11.5895393 ], [ 92.2331777, 11.5917297 ], [ 92.2339268, 11.5931826 ], [ 92.2358209, 11.5921087 ], [ 92.2375823, 11.5917524 ], [ 92.2393555, 11.5921796 ], [ 92.2418242, 11.5921704 ], [ 92.2444238, 11.592351 ], [ 92.2463799, 11.5915737 ], [ 92.2471167, 11.5911699 ], [ 92.2482749, 11.5908157 ], [ 92.2493338, 11.5906226 ], [ 92.2504475, 11.5905572 ], [ 92.2520896, 11.5903748 ], [ 92.2525305, 11.5905051 ], [ 92.2532979, 11.5904879 ], [ 92.2537713, 11.590491 ], [ 92.2542267, 11.5903847 ], [ 92.25484, 11.5904221 ], [ 92.2556813, 11.5904004 ], [ 92.2565475, 11.5904771 ], [ 92.2576766, 11.5903336 ], [ 92.2589571, 11.59015 ], [ 92.2592405, 11.5900461 ], [ 92.259372, 11.5900508 ], [ 92.2594966, 11.5899745 ], [ 92.2596429, 11.5900033 ], [ 92.2598649, 11.5898992 ], [ 92.2599402, 11.5899561 ], [ 92.2597616, 11.5901079 ], [ 92.2597501, 11.5902955 ], [ 92.2598233, 11.5905315 ], [ 92.2597169, 11.5906041 ], [ 92.2595013, 11.5904415 ], [ 92.2593297, 11.5904196 ], [ 92.259217, 11.5903367 ], [ 92.2590772, 11.5903873 ], [ 92.2590251, 11.5905174 ], [ 92.2591611, 11.5906013 ], [ 92.2592268, 11.5907318 ], [ 92.2591923, 11.5908652 ], [ 92.2588942, 11.5910072 ], [ 92.2587602, 11.5909142 ], [ 92.2586214, 11.5910347 ], [ 92.258409, 11.5910697 ], [ 92.2580273, 11.5912143 ], [ 92.2575061, 11.5913784 ], [ 92.2569875, 11.5913939 ], [ 92.256789, 11.5915285 ], [ 92.2562911, 11.5915994 ], [ 92.2559509, 11.5916964 ], [ 92.2555963, 11.5917521 ], [ 92.2554777, 11.5918277 ], [ 92.2551896, 11.5917761 ], [ 92.2548659, 11.5917945 ], [ 92.2546355, 11.591737 ], [ 92.2545627, 11.5917452 ], [ 92.2545722, 11.591878 ], [ 92.2547039, 11.5919233 ], [ 92.254823, 11.5918997 ], [ 92.2552646, 11.5920075 ], [ 92.2556036, 11.5920924 ], [ 92.2585833, 11.5914689 ], [ 92.2593768, 11.5911976 ], [ 92.2601159, 11.5908641 ], [ 92.2603829, 11.5906142 ], [ 92.2604154, 11.5904786 ], [ 92.2606357, 11.5902252 ], [ 92.2609639, 11.5900135 ], [ 92.2612722, 11.5898911 ], [ 92.2616442, 11.5897571 ], [ 92.2619971, 11.5898201 ], [ 92.2622774, 11.5900242 ], [ 92.2627045, 11.5902861 ], [ 92.2631002, 11.5903174 ], [ 92.2634222, 11.5902185 ], [ 92.2637212, 11.5900052 ], [ 92.2640055, 11.589758 ], [ 92.2642489, 11.589351 ], [ 92.2645581, 11.589004 ], [ 92.2649821, 11.5885677 ], [ 92.2654091, 11.5882265 ], [ 92.2659354, 11.5879887 ], [ 92.2664764, 11.5878605 ], [ 92.2667327, 11.5877093 ], [ 92.2669508, 11.5875359 ], [ 92.2673788, 11.5870637 ], [ 92.2678406, 11.5866844 ], [ 92.268125, 11.5866124 ], [ 92.268374, 11.5864572 ], [ 92.2686909, 11.5863903 ], [ 92.2691127, 11.5859728 ], [ 92.2693914, 11.5858085 ], [ 92.2696536, 11.5857707 ], [ 92.2701281, 11.5855764 ], [ 92.2705118, 11.585558 ], [ 92.2715566, 11.585015 ], [ 92.2719932, 11.584693 ], [ 92.2723208, 11.5842103 ], [ 92.2724666, 11.5835073 ], [ 92.2726543, 11.5823881 ], [ 92.2728002, 11.5819023 ], [ 92.272734, 11.5808852 ], [ 92.272465, 11.579835 ], [ 92.2718927, 11.5789878 ], [ 92.2716581, 11.5783505 ], [ 92.2716201, 11.5777274 ], [ 92.2713235, 11.5776979 ], [ 92.2713214, 11.576855 ], [ 92.2714395, 11.5763289 ], [ 92.2709353, 11.5761169 ], [ 92.2703586, 11.5757706 ], [ 92.270176, 11.5755547 ], [ 92.2701998, 11.5752555 ], [ 92.2703828, 11.5747257 ], [ 92.270595, 11.5744605 ], [ 92.2705331, 11.5740615 ], [ 92.2707947, 11.5735072 ], [ 92.2706294, 11.5729432 ], [ 92.2703962, 11.5729554 ], [ 92.2700164, 11.5734987 ], [ 92.2696929, 11.5733928 ], [ 92.26958, 11.5728 ], [ 92.2696407, 11.5723965 ], [ 92.2698242, 11.5721781 ], [ 92.2700417, 11.5723909 ], [ 92.2704243, 11.5725581 ], [ 92.2707709, 11.5720912 ], [ 92.2710666, 11.57148 ], [ 92.2708737, 11.5709879 ], [ 92.2705218, 11.5708339 ], [ 92.2701688, 11.5707944 ], [ 92.2700013, 11.5710235 ], [ 92.2696891, 11.57113 ], [ 92.2692028, 11.5711255 ], [ 92.2688123, 11.5709505 ], [ 92.2686323, 11.5707405 ], [ 92.2684395, 11.5703661 ], [ 92.2683432, 11.5698584 ], [ 92.2684144, 11.5694641 ], [ 92.2686077, 11.5691075 ], [ 92.2688952, 11.5689166 ], [ 92.2695321, 11.5688754 ], [ 92.2697205, 11.5689854 ], [ 92.2699406, 11.5689451 ], [ 92.2701096, 11.5687311 ], [ 92.269856, 11.56867 ], [ 92.2696063, 11.5687164 ], [ 92.2689183, 11.5688441 ], [ 92.2687956, 11.5683149 ], [ 92.2688285, 11.5678094 ], [ 92.2691367, 11.5673814 ], [ 92.269509, 11.5671433 ], [ 92.2699422, 11.567345 ], [ 92.2704514, 11.5674279 ], [ 92.2709478, 11.5667118 ], [ 92.270144, 11.5659092 ], [ 92.2701506, 11.5651528 ], [ 92.2696823, 11.5647153 ], [ 92.2694066, 11.5635611 ], [ 92.2702464, 11.5633115 ], [ 92.2702555, 11.5629624 ], [ 92.2695694, 11.5626429 ], [ 92.2692377, 11.5625442 ], [ 92.2688961, 11.5622009 ], [ 92.2686545, 11.56163 ], [ 92.2686793, 11.5611443 ], [ 92.268864, 11.5607325 ], [ 92.2692488, 11.5604166 ], [ 92.2694194, 11.5605257 ], [ 92.2699205, 11.5604492 ], [ 92.2703532, 11.5604089 ], [ 92.2705191, 11.5605546 ], [ 92.2706907, 11.5602872 ], [ 92.2705123, 11.560149 ], [ 92.2703798, 11.5601092 ], [ 92.269812, 11.5602354 ], [ 92.2694598, 11.5603482 ], [ 92.2693351, 11.5603842 ], [ 92.2691208, 11.5603162 ], [ 92.2689028, 11.5600566 ], [ 92.2688096, 11.5594894 ], [ 92.2689495, 11.5588193 ], [ 92.26928, 11.55462 ], [ 92.2700873, 11.55089 ], [ 92.27053, 11.54803 ], [ 92.2716193, 11.5476874 ], [ 92.27202, 11.54657 ], [ 92.2747141, 11.5404309 ], [ 92.2750548, 11.5366154 ], [ 92.2738746, 11.5326917 ], [ 92.2716, 11.52894 ], [ 92.27059, 11.52552 ], [ 92.2711572, 11.5237972 ], [ 92.2704719, 11.5227346 ], [ 92.2692876, 11.5223819 ], [ 92.2680172, 11.5223717 ], [ 92.2668801, 11.5218006 ], [ 92.2661229, 11.5203644 ], [ 92.2645571, 11.5201121 ], [ 92.2626735, 11.5182987 ] ] ], [ [ [ 92.61635, 11.53522 ], [ 92.61535, 11.53464 ], [ 92.61429, 11.53457 ], [ 92.61339, 11.53462 ], [ 92.61249, 11.53487 ], [ 92.61159, 11.53486 ], [ 92.61076, 11.53355 ], [ 92.61067, 11.53153 ], [ 92.61041, 11.53127 ], [ 92.61014, 11.53199 ], [ 92.6097, 11.53333 ], [ 92.6083, 11.53529 ], [ 92.60776, 11.53679 ], [ 92.60705, 11.53834 ], [ 92.6062, 11.54096 ], [ 92.60603, 11.54138 ], [ 92.60587, 11.54242 ], [ 92.60569, 11.54386 ], [ 92.60551, 11.54469 ], [ 92.6055, 11.54534 ], [ 92.60561, 11.54584 ], [ 92.60607, 11.54689 ], [ 92.60607, 11.54781 ], [ 92.60586, 11.54835 ], [ 92.60536, 11.54878 ], [ 92.60417, 11.55042 ], [ 92.60289, 11.55171 ], [ 92.60186, 11.55309 ], [ 92.60183, 11.55413 ], [ 92.60198, 11.55483 ], [ 92.60239, 11.55487 ], [ 92.60308, 11.55476 ], [ 92.60383, 11.55427 ], [ 92.60497, 11.55314 ], [ 92.60544, 11.55284 ], [ 92.60579, 11.55296 ], [ 92.60559, 11.55346 ], [ 92.60556, 11.55425 ], [ 92.60574, 11.55454 ], [ 92.60619, 11.55458 ], [ 92.60721, 11.55393 ], [ 92.60827, 11.55337 ], [ 92.60907, 11.55317 ], [ 92.60968, 11.5534 ], [ 92.61042, 11.55531 ], [ 92.61045, 11.55733 ], [ 92.61113, 11.55848 ], [ 92.61144, 11.55921 ], [ 92.61178, 11.55992 ], [ 92.61232, 11.56059 ], [ 92.61276, 11.5606 ], [ 92.61366, 11.5597 ], [ 92.6144, 11.55914 ], [ 92.6148, 11.55696 ], [ 92.61528, 11.55624 ], [ 92.61682, 11.55584 ], [ 92.6175, 11.55689 ], [ 92.61749, 11.55792 ], [ 92.61801, 11.55907 ], [ 92.61842, 11.55954 ], [ 92.61899, 11.55945 ], [ 92.61902, 11.55856 ], [ 92.61924, 11.55789 ], [ 92.61961, 11.55743 ], [ 92.61994, 11.55665 ], [ 92.61995, 11.55556 ], [ 92.61986, 11.55416 ], [ 92.61987, 11.55268 ], [ 92.61978, 11.55169 ], [ 92.61931, 11.55044 ], [ 92.61928, 11.54873 ], [ 92.61888, 11.54676 ], [ 92.61905, 11.54494 ], [ 92.61901, 11.54391 ], [ 92.61876, 11.54261 ], [ 92.61704, 11.54025 ], [ 92.61699, 11.53958 ], [ 92.61711, 11.5388 ], [ 92.61723, 11.53694 ], [ 92.61635, 11.53522 ] ] ], [ [ [ 92.5952, 11.53283 ], [ 92.595, 11.53288 ], [ 92.59488, 11.53324 ], [ 92.59487, 11.53367 ], [ 92.59495, 11.53414 ], [ 92.5949, 11.53437 ], [ 92.59434, 11.53469 ], [ 92.59357, 11.53489 ], [ 92.5933, 11.53502 ], [ 92.5932, 11.53518 ], [ 92.59319, 11.53551 ], [ 92.59331, 11.536 ], [ 92.59329, 11.53631 ], [ 92.59312, 11.53651 ], [ 92.59288, 11.53664 ], [ 92.59257, 11.53663 ], [ 92.59213, 11.53648 ], [ 92.59164, 11.53624 ], [ 92.59089, 11.53577 ], [ 92.58922, 11.53464 ], [ 92.58872, 11.53417 ], [ 92.58828, 11.5338 ], [ 92.58786, 11.53378 ], [ 92.58776, 11.53418 ], [ 92.5878, 11.53479 ], [ 92.58798, 11.53519 ], [ 92.58823, 11.53564 ], [ 92.58828, 11.53604 ], [ 92.58815, 11.53651 ], [ 92.58811, 11.53734 ], [ 92.58817, 11.5379 ], [ 92.58818, 11.53865 ], [ 92.58834, 11.53882 ], [ 92.58839, 11.53918 ], [ 92.58852, 11.540059 ], [ 92.5875288, 11.5406775 ], [ 92.5872895, 11.541442 ], [ 92.5867924, 11.5422778 ], [ 92.58696, 11.5429713 ], [ 92.58624, 11.54473 ], [ 92.58571, 11.54638 ], [ 92.58518, 11.54784 ], [ 92.58479, 11.54822 ], [ 92.58442, 11.54848 ], [ 92.58427, 11.54903 ], [ 92.58416, 11.5497 ], [ 92.58442, 11.55025 ], [ 92.5849, 11.55168 ], [ 92.58513, 11.55219 ], [ 92.5864, 11.55249 ], [ 92.587, 11.55285 ], [ 92.58726, 11.5534 ], [ 92.5874, 11.55408 ], [ 92.58751, 11.55481 ], [ 92.58777, 11.55568 ], [ 92.58818, 11.5563 ], [ 92.5882, 11.55675 ], [ 92.58812, 11.55761 ], [ 92.58825, 11.55861 ], [ 92.58849, 11.55947 ], [ 92.58877, 11.55988 ], [ 92.58909, 11.56 ], [ 92.58917, 11.559 ], [ 92.58939, 11.55886 ], [ 92.58971, 11.55903 ], [ 92.59014, 11.55973 ], [ 92.59013, 11.56025 ], [ 92.59017, 11.56104 ], [ 92.59009, 11.56173 ], [ 92.58967, 11.56249 ], [ 92.58918, 11.56318 ], [ 92.58849, 11.56386 ], [ 92.58799, 11.56469 ], [ 92.58784, 11.56557 ], [ 92.58779, 11.56629 ], [ 92.58775, 11.56976 ], [ 92.58818, 11.57057 ], [ 92.58935, 11.57307 ], [ 92.58942, 11.57372 ], [ 92.58979, 11.57472 ], [ 92.59037, 11.57545 ], [ 92.59138, 11.5766 ], [ 92.59208, 11.57718 ], [ 92.59236, 11.57764 ], [ 92.59266, 11.57768 ], [ 92.59298, 11.57759 ], [ 92.5931, 11.57742 ], [ 92.59316, 11.57702 ], [ 92.5932, 11.57639 ], [ 92.59318, 11.5753 ], [ 92.59292, 11.57493 ], [ 92.59298, 11.57444 ], [ 92.59364, 11.57316 ], [ 92.59368, 11.57253 ], [ 92.59386, 11.57216 ], [ 92.59418, 11.5719 ], [ 92.59456, 11.57179 ], [ 92.59492, 11.57165 ], [ 92.59495, 11.57125 ], [ 92.5946, 11.57067 ], [ 92.59455, 11.57033 ], [ 92.594, 11.56949 ], [ 92.59377, 11.56891 ], [ 92.59352, 11.56779 ], [ 92.59327, 11.56707 ], [ 92.59348, 11.56647 ], [ 92.59477, 11.56565 ], [ 92.59542, 11.56531 ], [ 92.59595, 11.56495 ], [ 92.59643, 11.56444 ], [ 92.59676, 11.56359 ], [ 92.5968, 11.56273 ], [ 92.59704, 11.56207 ], [ 92.59707, 11.56144 ], [ 92.59685, 11.56026 ], [ 92.59695, 11.5592 ], [ 92.59717, 11.5582 ], [ 92.59736, 11.55627 ], [ 92.59703, 11.55441 ], [ 92.59673, 11.55213 ], [ 92.59674, 11.5513 ], [ 92.59637, 11.55072 ], [ 92.59556, 11.54974 ], [ 92.59551, 11.54916 ], [ 92.5956, 11.54873 ], [ 92.59601, 11.54825 ], [ 92.5966, 11.54769 ], [ 92.59692, 11.54731 ], [ 92.59725, 11.54698 ], [ 92.59739, 11.54632 ], [ 92.59745, 11.54539 ], [ 92.59729, 11.54332 ], [ 92.59708, 11.54258 ], [ 92.5969, 11.54169 ], [ 92.59697, 11.54105 ], [ 92.59658, 11.53996 ], [ 92.59626, 11.53921 ], [ 92.59619, 11.53861 ], [ 92.5962, 11.53768 ], [ 92.59606, 11.53665 ], [ 92.5959, 11.53622 ], [ 92.59587, 11.53574 ], [ 92.59577, 11.53527 ], [ 92.59562, 11.53492 ], [ 92.59542, 11.53476 ], [ 92.59537, 11.53459 ], [ 92.59537, 11.53441 ], [ 92.59551, 11.53386 ], [ 92.59547, 11.5335 ], [ 92.59532, 11.53308 ], [ 92.5952, 11.53283 ] ] ], [ [ [ 92.75417, 11.99862 ], [ 92.75424, 11.99931 ], [ 92.75424, 11.99962 ], [ 92.75384, 12.00067 ], [ 92.75364, 12.00127 ], [ 92.75348, 12.00165 ], [ 92.75348, 12.00185 ], [ 92.75359, 12.00215 ], [ 92.75399, 12.00259 ], [ 92.75413, 12.00271 ], [ 92.75448, 12.00284 ], [ 92.7547, 12.00283 ], [ 92.75497, 12.00278 ], [ 92.75519, 12.00261 ], [ 92.75538, 12.00242 ], [ 92.75559, 12.00227 ], [ 92.75633, 12.00211 ], [ 92.75683, 12.00205 ], [ 92.75713, 12.00199 ], [ 92.75736, 12.002 ], [ 92.75786, 12.00212 ], [ 92.7585, 12.00208 ], [ 92.75863, 12.00213 ], [ 92.75877, 12.00228 ], [ 92.7588, 12.00266 ], [ 92.75862, 12.00314 ], [ 92.75834, 12.00366 ], [ 92.75827, 12.0039 ], [ 92.75827, 12.00407 ], [ 92.75848, 12.00447 ], [ 92.75881, 12.00477 ], [ 92.75959, 12.00528 ], [ 92.75963, 12.00542 ], [ 92.75963, 12.00559 ], [ 92.75944, 12.00622 ], [ 92.75942, 12.00668 ], [ 92.75957, 12.00721 ], [ 92.75974, 12.00734 ], [ 92.76046, 12.00764 ], [ 92.76077, 12.00787 ], [ 92.76102, 12.00809 ], [ 92.76118, 12.00828 ], [ 92.76127, 12.00848 ], [ 92.76145, 12.00874 ], [ 92.76142, 12.00907 ], [ 92.76126, 12.00939 ], [ 92.76125, 12.00958 ], [ 92.76135, 12.00969 ], [ 92.76215, 12.01007 ], [ 92.76234, 12.01018 ], [ 92.76276, 12.0106 ], [ 92.76294, 12.01072 ], [ 92.7631, 12.01076 ], [ 92.76356, 12.01075 ], [ 92.76374, 12.01081 ], [ 92.76404, 12.01108 ], [ 92.76429, 12.0111 ], [ 92.765, 12.01102 ], [ 92.76523, 12.01093 ], [ 92.7654, 12.01082 ], [ 92.76581, 12.01067 ], [ 92.76607, 12.01074 ], [ 92.76622, 12.01081 ], [ 92.7665, 12.01082 ], [ 92.76669, 12.01078 ], [ 92.76667, 12.01063 ], [ 92.76653, 12.01052 ], [ 92.76614, 12.0104 ], [ 92.76593, 12.01026 ], [ 92.76557, 12.0097 ], [ 92.7654, 12.00918 ], [ 92.76501, 12.00677 ], [ 92.76506, 12.00605 ], [ 92.76516, 12.00542 ], [ 92.76532, 12.00472 ], [ 92.76543, 12.00328 ], [ 92.76557, 12.00277 ], [ 92.76584, 12.00202 ], [ 92.7661, 12.00139 ], [ 92.76674, 12.0003 ], [ 92.76707, 11.9998 ], [ 92.76716, 11.9995 ], [ 92.76711, 11.99934 ], [ 92.76696, 11.99919 ], [ 92.76674, 11.99913 ], [ 92.76536, 11.99909 ], [ 92.76499, 11.99902 ], [ 92.7647, 11.999 ], [ 92.7644, 11.99902 ], [ 92.76401, 11.99923 ], [ 92.76357, 11.99923 ], [ 92.76341, 11.99926 ], [ 92.76288, 11.99921 ], [ 92.76286, 11.99919 ], [ 92.76262, 11.99914 ], [ 92.76228, 11.99898 ], [ 92.76185, 11.99887 ], [ 92.76131, 11.99878 ], [ 92.76097, 11.99878 ], [ 92.76086, 11.99866 ], [ 92.76082, 11.99853 ], [ 92.7609, 11.99836 ], [ 92.76082, 11.99815 ], [ 92.76049, 11.99795 ], [ 92.76009, 11.99789 ], [ 92.75954, 11.99789 ], [ 92.75906, 11.99795 ], [ 92.75813, 11.99794 ], [ 92.75762, 11.99797 ], [ 92.75727, 11.99808 ], [ 92.75708, 11.99836 ], [ 92.75674, 11.99841 ], [ 92.75629, 11.99836 ], [ 92.75602, 11.99819 ], [ 92.75531, 11.99787 ], [ 92.75451, 11.99777 ], [ 92.75429, 11.99764 ], [ 92.75416, 11.99748 ], [ 92.75405, 11.99727 ], [ 92.75394, 11.99717 ], [ 92.75377, 11.99718 ], [ 92.75378, 11.99739 ], [ 92.75396, 11.99806 ], [ 92.75417, 11.99862 ] ] ], [ [ [ 93.11866, 12.13453 ], [ 93.11708, 12.1326 ], [ 93.11626, 12.1315 ], [ 93.1158, 12.1305 ], [ 93.11577, 12.13002 ], [ 93.11589, 12.12979 ], [ 93.11561, 12.1296 ], [ 93.11514, 12.1299 ], [ 93.1145, 12.13057 ], [ 93.1142, 12.13103 ], [ 93.11406, 12.1314 ], [ 93.11436, 12.13174 ], [ 93.1145, 12.13199 ], [ 93.11429, 12.13229 ], [ 93.11413, 12.13259 ], [ 93.11411, 12.13312 ], [ 93.11392, 12.13342 ], [ 93.11361, 12.13367 ], [ 93.11375, 12.13408 ], [ 93.11359, 12.13434 ], [ 93.11312, 12.13454 ], [ 93.1123, 12.135 ], [ 93.11211, 12.13564 ], [ 93.11176, 12.13626 ], [ 93.11173, 12.13672 ], [ 93.11176, 12.13746 ], [ 93.11171, 12.1378 ], [ 93.1112, 12.13858 ], [ 93.11045, 12.13918 ], [ 93.10944, 12.14019 ], [ 93.10948, 12.14079 ], [ 93.10976, 12.14141 ], [ 93.11019, 12.14203 ], [ 93.11026, 12.14255 ], [ 93.11045, 12.14304 ], [ 93.11079, 12.14322 ], [ 93.11118, 12.14322 ], [ 93.11144, 12.14351 ], [ 93.11185, 12.14354 ], [ 93.11215, 12.14342 ], [ 93.1128, 12.14357 ], [ 93.11373, 12.14389 ], [ 93.11465, 12.14455 ], [ 93.11505, 12.14503 ], [ 93.1153, 12.14526 ], [ 93.1157, 12.14613 ], [ 93.11612, 12.14714 ], [ 93.11619, 12.14781 ], [ 93.11638, 12.14813 ], [ 93.11692, 12.14815 ], [ 93.11744, 12.14811 ], [ 93.11828, 12.14795 ], [ 93.11887, 12.14792 ], [ 93.1195, 12.14802 ], [ 93.11976, 12.14822 ], [ 93.12026, 12.14836 ], [ 93.12033, 12.14808 ], [ 93.12004, 12.14767 ], [ 93.12004, 12.14717 ], [ 93.12023, 12.14655 ], [ 93.12025, 12.14576 ], [ 93.12063, 12.14514 ], [ 93.12117, 12.14473 ], [ 93.12157, 12.14475 ], [ 93.12218, 12.14425 ], [ 93.12223, 12.14395 ], [ 93.1219, 12.14354 ], [ 93.12155, 12.14319 ], [ 93.12131, 12.14271 ], [ 93.12133, 12.14165 ], [ 93.12138, 12.14138 ], [ 93.12169, 12.14064 ], [ 93.12206, 12.14032 ], [ 93.12237, 12.14021 ], [ 93.12286, 12.14032 ], [ 93.12302, 12.14044 ], [ 93.12328, 12.14044 ], [ 93.12326, 12.14016 ], [ 93.12314, 12.13982 ], [ 93.12293, 12.13954 ], [ 93.12263, 12.13906 ], [ 93.12246, 12.13866 ], [ 93.12223, 12.13832 ], [ 93.12187, 12.13802 ], [ 93.12145, 12.13754 ], [ 93.12046, 12.13657 ], [ 93.11866, 12.13453 ] ] ], [ [ [ 93.09672, 12.20999 ], [ 93.09624, 12.2102 ], [ 93.09562, 12.21028 ], [ 93.095, 12.21039 ], [ 93.09485, 12.21088 ], [ 93.09501, 12.21135 ], [ 93.09492, 12.21231 ], [ 93.09335, 12.21286 ], [ 93.09298, 12.21336 ], [ 93.09293, 12.21414 ], [ 93.09269, 12.21459 ], [ 93.09208, 12.21479 ], [ 93.09158, 12.21547 ], [ 93.09179, 12.21611 ], [ 93.09238, 12.21638 ], [ 93.09305, 12.21673 ], [ 93.09326, 12.21713 ], [ 93.09329, 12.21763 ], [ 93.09286, 12.21778 ], [ 93.09229, 12.21812 ], [ 93.09241, 12.21877 ], [ 93.09346, 12.21924 ], [ 93.09397, 12.21956 ], [ 93.09423, 12.22042 ], [ 93.09428, 12.22145 ], [ 93.09431, 12.22289 ], [ 93.09368, 12.22435 ], [ 93.09249, 12.22536 ], [ 93.09157, 12.22567 ], [ 93.09048, 12.2252 ], [ 93.08909, 12.22497 ], [ 93.08852, 12.22503 ], [ 93.08803, 12.22526 ], [ 93.08778, 12.22533 ], [ 93.08766, 12.2254 ], [ 93.08713, 12.22549 ], [ 93.08689, 12.22545 ], [ 93.08647, 12.22503 ], [ 93.08601, 12.22476 ], [ 93.0856, 12.22441 ], [ 93.08483, 12.22398 ], [ 93.08314, 12.22339 ], [ 93.08137, 12.22359 ], [ 93.08063, 12.22395 ], [ 93.08009, 12.22405 ], [ 93.07973, 12.22425 ], [ 93.0796, 12.22464 ], [ 93.07936, 12.22493 ], [ 93.07908, 12.22518 ], [ 93.07883, 12.2252 ], [ 93.07843, 12.22516 ], [ 93.07796, 12.22508 ], [ 93.07749, 12.22497 ], [ 93.07712, 12.22468 ], [ 93.07678, 12.22476 ], [ 93.07648, 12.22492 ], [ 93.07585, 12.22549 ], [ 93.07499, 12.22579 ], [ 93.07447, 12.22608 ], [ 93.07416, 12.22634 ], [ 93.0738, 12.22653 ], [ 93.07347, 12.2265 ], [ 93.07324, 12.22636 ], [ 93.07317, 12.22618 ], [ 93.07323, 12.22602 ], [ 93.07324, 12.22569 ], [ 93.07299, 12.22565 ], [ 93.07206, 12.22607 ], [ 93.07175, 12.22613 ], [ 93.07164, 12.22619 ], [ 93.07129, 12.22627 ], [ 93.07062, 12.22672 ], [ 93.07012, 12.22694 ], [ 93.06967, 12.22709 ], [ 93.06925, 12.22727 ], [ 93.06882, 12.22732 ], [ 93.0685, 12.2276 ], [ 93.06823, 12.22773 ], [ 93.06766, 12.22807 ], [ 93.06734, 12.2283 ], [ 93.06642, 12.22834 ], [ 93.06609, 12.22822 ], [ 93.06581, 12.22805 ], [ 93.06537, 12.22792 ], [ 93.06511, 12.22796 ], [ 93.06481, 12.22819 ], [ 93.06451, 12.22829 ], [ 93.06419, 12.22848 ], [ 93.06385, 12.22894 ], [ 93.06371, 12.22925 ], [ 93.06327, 12.23055 ], [ 93.06323, 12.23109 ], [ 93.06332, 12.23231 ], [ 93.06329, 12.23278 ], [ 93.06318, 12.23322 ], [ 93.06327, 12.23401 ], [ 93.06364, 12.23441 ], [ 93.06438, 12.23502 ], [ 93.06482, 12.23548 ], [ 93.06517, 12.23615 ], [ 93.06553, 12.23674 ], [ 93.06609, 12.23744 ], [ 93.06633, 12.23919 ], [ 93.06654, 12.24019 ], [ 93.06671, 12.24126 ], [ 93.06713, 12.2425 ], [ 93.0674, 12.24282 ], [ 93.06752, 12.2431 ], [ 93.06754, 12.24339 ], [ 93.06744, 12.2437 ], [ 93.06722, 12.244 ], [ 93.06705, 12.24436 ], [ 93.06711, 12.24527 ], [ 93.06738, 12.24555 ], [ 93.06782, 12.24576 ], [ 93.06801, 12.24619 ], [ 93.06801, 12.24647 ], [ 93.0675, 12.24632 ], [ 93.06728, 12.24656 ], [ 93.06737, 12.24671 ], [ 93.06784, 12.24697 ], [ 93.06794, 12.24719 ], [ 93.06794, 12.24745 ], [ 93.06788, 12.24784 ], [ 93.06792, 12.24862 ], [ 93.06811, 12.24887 ], [ 93.06839, 12.24892 ], [ 93.06907, 12.24884 ], [ 93.06934, 12.24886 ], [ 93.06951, 12.24901 ], [ 93.06957, 12.24923 ], [ 93.0692, 12.24957 ], [ 93.06928, 12.24987 ], [ 93.07009, 12.25032 ], [ 93.07032, 12.25037 ], [ 93.07057, 12.25035 ], [ 93.07098, 12.25042 ], [ 93.07103, 12.25063 ], [ 93.07099, 12.25088 ], [ 93.07076, 12.25113 ], [ 93.07079, 12.25149 ], [ 93.07085, 12.25172 ], [ 93.07104, 12.25191 ], [ 93.0713, 12.25197 ], [ 93.07154, 12.25207 ], [ 93.07161, 12.25253 ], [ 93.07175, 12.25275 ], [ 93.07184, 12.25285 ], [ 93.07193, 12.2531 ], [ 93.07194, 12.25321 ], [ 93.07206, 12.25358 ], [ 93.07234, 12.25381 ], [ 93.07268, 12.25398 ], [ 93.0727, 12.25423 ], [ 93.07245, 12.25434 ], [ 93.07227, 12.25445 ], [ 93.072, 12.25474 ], [ 93.07167, 12.25496 ], [ 93.0715, 12.25514 ], [ 93.07153, 12.25537 ], [ 93.07169, 12.25551 ], [ 93.07184, 12.25573 ], [ 93.07182, 12.25613 ], [ 93.07164, 12.25633 ], [ 93.07131, 12.25652 ], [ 93.07113, 12.25682 ], [ 93.07128, 12.25729 ], [ 93.07154, 12.25794 ], [ 93.07183, 12.25843 ], [ 93.07231, 12.25899 ], [ 93.0733, 12.25971 ], [ 93.07419, 12.26029 ], [ 93.07534, 12.26076 ], [ 93.07657, 12.2611 ], [ 93.07732, 12.26109 ], [ 93.078, 12.26086 ], [ 93.07873, 12.26081 ], [ 93.07901, 12.26077 ], [ 93.07916, 12.26061 ], [ 93.07917, 12.26045 ], [ 93.07907, 12.26022 ], [ 93.07883, 12.25984 ], [ 93.07866, 12.25964 ], [ 93.07865, 12.25943 ], [ 93.07868, 12.25921 ], [ 93.07871, 12.25914 ], [ 93.07893, 12.25891 ], [ 93.07904, 12.25883 ], [ 93.07928, 12.25875 ], [ 93.07965, 12.25873 ], [ 93.08011, 12.2588 ], [ 93.08026, 12.25911 ], [ 93.08058, 12.25948 ], [ 93.08127, 12.26009 ], [ 93.08144, 12.26008 ], [ 93.08135, 12.25983 ], [ 93.08134, 12.2596 ], [ 93.08153, 12.25941 ], [ 93.08188, 12.25926 ], [ 93.0822, 12.25894 ], [ 93.08288, 12.25831 ], [ 93.08281, 12.25771 ], [ 93.08309, 12.2576 ], [ 93.08312, 12.25736 ], [ 93.08307, 12.25707 ], [ 93.08311, 12.25681 ], [ 93.08336, 12.25657 ], [ 93.08412, 12.25559 ], [ 93.08422, 12.25528 ], [ 93.08409, 12.2551 ], [ 93.08354, 12.25485 ], [ 93.08315, 12.25431 ], [ 93.08312, 12.25392 ], [ 93.08333, 12.25367 ], [ 93.08364, 12.25397 ], [ 93.08394, 12.25401 ], [ 93.08416, 12.25367 ], [ 93.08419, 12.25355 ], [ 93.08427, 12.25239 ], [ 93.08444, 12.25156 ], [ 93.08464, 12.25019 ], [ 93.08452, 12.24965 ], [ 93.08449, 12.24912 ], [ 93.08456, 12.24812 ], [ 93.0846, 12.24807 ], [ 93.08465, 12.24753 ], [ 93.0847, 12.24742 ], [ 93.08563, 12.24647 ], [ 93.08556, 12.24566 ], [ 93.08531, 12.2452 ], [ 93.08513, 12.24476 ], [ 93.08512, 12.24419 ], [ 93.08546, 12.24355 ], [ 93.08543, 12.24222 ], [ 93.08529, 12.24186 ], [ 93.08493, 12.24149 ], [ 93.08498, 12.24112 ], [ 93.08499, 12.24056 ], [ 93.08463, 12.24018 ], [ 93.08431, 12.23978 ], [ 93.08397, 12.23917 ], [ 93.08417, 12.23867 ], [ 93.08466, 12.23808 ], [ 93.08593, 12.23731 ], [ 93.08731, 12.23694 ], [ 93.0885, 12.23688 ], [ 93.08953, 12.23716 ], [ 93.09112, 12.23737 ], [ 93.09238, 12.23765 ], [ 93.093, 12.23801 ], [ 93.09342, 12.23838 ], [ 93.09362, 12.23972 ], [ 93.09403, 12.24056 ], [ 93.0944, 12.24108 ], [ 93.095, 12.24172 ], [ 93.09542, 12.24212 ], [ 93.09595, 12.24211 ], [ 93.09629, 12.24226 ], [ 93.09653, 12.24252 ], [ 93.09634, 12.24288 ], [ 93.09643, 12.24333 ], [ 93.09677, 12.24387 ], [ 93.09694, 12.24447 ], [ 93.09683, 12.24576 ], [ 93.09689, 12.24653 ], [ 93.0974, 12.24711 ], [ 93.09841, 12.24789 ], [ 93.09917, 12.24827 ], [ 93.09967, 12.24892 ], [ 93.09999, 12.24947 ], [ 93.09998, 12.25001 ], [ 93.09966, 12.25057 ], [ 93.09955, 12.25107 ], [ 93.09947, 12.25171 ], [ 93.09905, 12.25364 ], [ 93.09907, 12.25416 ], [ 93.0995, 12.25533 ], [ 93.09992, 12.25619 ], [ 93.10014, 12.25712 ], [ 93.10035, 12.25854 ], [ 93.10059, 12.25937 ], [ 93.10088, 12.25974 ], [ 93.1012, 12.25998 ], [ 93.10164, 12.26012 ], [ 93.10199, 12.26049 ], [ 93.10242, 12.26056 ], [ 93.10334, 12.26033 ], [ 93.10397, 12.26009 ], [ 93.10467, 12.25977 ], [ 93.10504, 12.25948 ], [ 93.10513, 12.25887 ], [ 93.10513, 12.25785 ], [ 93.10494, 12.25649 ], [ 93.10504, 12.25514 ], [ 93.10508, 12.25354 ], [ 93.10538, 12.24903 ], [ 93.10551, 12.24667 ], [ 93.10536, 12.24476 ], [ 93.10519, 12.24308 ], [ 93.10492, 12.2414 ], [ 93.10463, 12.24018 ], [ 93.10418, 12.23857 ], [ 93.10379, 12.23728 ], [ 93.10306, 12.23617 ], [ 93.10242, 12.23532 ], [ 93.10141, 12.23419 ], [ 93.10047, 12.23223 ], [ 93.10042, 12.23173 ], [ 93.10064, 12.23086 ], [ 93.10093, 12.23027 ], [ 93.1014, 12.22964 ], [ 93.10156, 12.22906 ], [ 93.10165, 12.22809 ], [ 93.10192, 12.22687 ], [ 93.10225, 12.225 ], [ 93.1023, 12.22339 ], [ 93.10251, 12.22161 ], [ 93.10253, 12.22008 ], [ 93.10235, 12.21765 ], [ 93.10217, 12.21578 ], [ 93.1022, 12.21503 ], [ 93.10255, 12.21446 ], [ 93.1027, 12.21395 ], [ 93.10257, 12.21283 ], [ 93.10244, 12.21129 ], [ 93.102, 12.20955 ], [ 93.10187, 12.20809 ], [ 93.1017, 12.20677 ], [ 93.10136, 12.20563 ], [ 93.10068, 12.20477 ], [ 93.09996, 12.20449 ], [ 93.09932, 12.20484 ], [ 93.09932, 12.20549 ], [ 93.09914, 12.20637 ], [ 93.09851, 12.20708 ], [ 93.09823, 12.20787 ], [ 93.09762, 12.20892 ], [ 93.09672, 12.20999 ] ] ], [ [ [ 92.7073468, 12.2970453 ], [ 92.7080946, 12.2961059 ], [ 92.7101241, 12.2960016 ], [ 92.7123139, 12.2955319 ], [ 92.7135957, 12.2955841 ], [ 92.7147173, 12.2946448 ], [ 92.7156787, 12.2946448 ], [ 92.7177617, 12.2954797 ], [ 92.7191503, 12.2948013 ], [ 92.7211799, 12.2942795 ], [ 92.7226219, 12.2950101 ], [ 92.723492, 12.2955145 ], [ 92.7237564, 12.2948503 ], [ 92.7235298, 12.293854 ], [ 92.7234165, 12.2925994 ], [ 92.7239452, 12.29164 ], [ 92.7235298, 12.2903116 ], [ 92.7225101, 12.2901271 ], [ 92.7220192, 12.2896843 ], [ 92.7217926, 12.2872857 ], [ 92.7227367, 12.2846657 ], [ 92.7220569, 12.2842598 ], [ 92.7205085, 12.2839646 ], [ 92.719942, 12.283448 ], [ 92.7198287, 12.2816029 ], [ 92.7202442, 12.2806065 ], [ 92.7211883, 12.2797947 ], [ 92.721075, 12.2787245 ], [ 92.7200553, 12.2769163 ], [ 92.7193378, 12.2754771 ], [ 92.7197154, 12.2743331 ], [ 92.7192245, 12.273263 ], [ 92.7183936, 12.2721928 ], [ 92.7183181, 12.2704583 ], [ 92.7182426, 12.2695726 ], [ 92.7167697, 12.2662513 ], [ 92.7168074, 12.2649227 ], [ 92.7176383, 12.2641847 ], [ 92.718658, 12.2638894 ], [ 92.7186957, 12.2627454 ], [ 92.717525, 12.2619704 ], [ 92.716392, 12.2628561 ], [ 92.7158633, 12.262893 ], [ 92.7152968, 12.2618966 ], [ 92.7150324, 12.2601252 ], [ 92.7152213, 12.2591287 ], [ 92.7157122, 12.2582799 ], [ 92.7153723, 12.2568406 ], [ 92.7153583, 12.2548772 ], [ 92.7147173, 12.2539377 ], [ 92.7137026, 12.2524241 ], [ 92.7134355, 12.2507018 ], [ 92.7131685, 12.2485618 ], [ 92.7127412, 12.2478311 ], [ 92.712581, 12.2459 ], [ 92.7125276, 12.243499 ], [ 92.712581, 12.2409415 ], [ 92.7122071, 12.2383317 ], [ 92.7122605, 12.2370268 ], [ 92.7122071, 12.234939 ], [ 92.7117798, 12.2335297 ], [ 92.7113525, 12.2302934 ], [ 92.7106048, 12.2310242 ], [ 92.7097503, 12.2334775 ], [ 92.7095366, 12.2351477 ], [ 92.7089491, 12.2384883 ], [ 92.7079343, 12.2407327 ], [ 92.7068127, 12.2419854 ], [ 92.7054241, 12.2431858 ], [ 92.7050502, 12.245117 ], [ 92.7051571, 12.2470482 ], [ 92.7051571, 12.2493969 ], [ 92.7053707, 12.2549816 ], [ 92.7047832, 12.2567561 ], [ 92.7041423, 12.2587394 ], [ 92.703982, 12.2596789 ], [ 92.7037684, 12.2609836 ], [ 92.7029673, 12.2636976 ], [ 92.7027536, 12.2659939 ], [ 92.7027536, 12.2675596 ], [ 92.7046764, 12.2711085 ], [ 92.7030741, 12.2733526 ], [ 92.7023264, 12.2741355 ], [ 92.7030741, 12.2757011 ], [ 92.7040889, 12.2777365 ], [ 92.7044627, 12.2800327 ], [ 92.704623, 12.2830074 ], [ 92.7042491, 12.285982 ], [ 92.7040889, 12.2881738 ], [ 92.703982, 12.2909918 ], [ 92.7043025, 12.2930792 ], [ 92.7046764, 12.295271 ], [ 92.70489, 12.2969931 ], [ 92.7061184, 12.297828 ], [ 92.706973, 12.2974627 ], [ 92.7073468, 12.2970453 ] ] ], [ [ [ 92.87685, 12.21392 ], [ 92.87672, 12.21444 ], [ 92.87676, 12.21477 ], [ 92.87673, 12.21551 ], [ 92.87643, 12.21591 ], [ 92.87612, 12.21648 ], [ 92.87591, 12.21724 ], [ 92.87556, 12.21786 ], [ 92.87551, 12.21825 ], [ 92.87528, 12.21897 ], [ 92.87511, 12.22039 ], [ 92.87492, 12.22129 ], [ 92.87457, 12.2226 ], [ 92.87441, 12.22503 ], [ 92.87443, 12.22625 ], [ 92.87469, 12.22758 ], [ 92.87457, 12.22839 ], [ 92.87441, 12.22908 ], [ 92.87412, 12.22965 ], [ 92.87391, 12.23016 ], [ 92.87335, 12.23103 ], [ 92.87316, 12.23144 ], [ 92.87267, 12.23193 ], [ 92.87234, 12.23232 ], [ 92.87176, 12.23322 ], [ 92.87143, 12.23363 ], [ 92.87129, 12.23397 ], [ 92.87115, 12.23459 ], [ 92.87072, 12.23528 ], [ 92.87044, 12.23611 ], [ 92.87028, 12.23687 ], [ 92.86995, 12.23769 ], [ 92.86971, 12.2387 ], [ 92.86967, 12.23926 ], [ 92.86977, 12.23996 ], [ 92.86991, 12.24058 ], [ 92.87003, 12.24129 ], [ 92.87, 12.24212 ], [ 92.87028, 12.2432 ], [ 92.87089, 12.24506 ], [ 92.87136, 12.24568 ], [ 92.87167, 12.24623 ], [ 92.87198, 12.24667 ], [ 92.87259, 12.24717 ], [ 92.87282, 12.24743 ], [ 92.87324, 12.24812 ], [ 92.87364, 12.24855 ], [ 92.87388, 12.24862 ], [ 92.87472, 12.24864 ], [ 92.87503, 12.24862 ], [ 92.87543, 12.24855 ], [ 92.87576, 12.24844 ], [ 92.87613, 12.24828 ], [ 92.87639, 12.24823 ], [ 92.87776, 12.24807 ], [ 92.87823, 12.24786 ], [ 92.87846, 12.24768 ], [ 92.87877, 12.24717 ], [ 92.87902, 12.24662 ], [ 92.87937, 12.24605 ], [ 92.87947, 12.24525 ], [ 92.87963, 12.2443 ], [ 92.87968, 12.24281 ], [ 92.87963, 12.24127 ], [ 92.87977, 12.24033 ], [ 92.88001, 12.23925 ], [ 92.88029, 12.23865 ], [ 92.88085, 12.23844 ], [ 92.88097, 12.23803 ], [ 92.88088, 12.23741 ], [ 92.88095, 12.23729 ], [ 92.8813, 12.23702 ], [ 92.88142, 12.23702 ], [ 92.88172, 12.23723 ], [ 92.88184, 12.23796 ], [ 92.88219, 12.23853 ], [ 92.88255, 12.23853 ], [ 92.88302, 12.23801 ], [ 92.88316, 12.23768 ], [ 92.88367, 12.23773 ], [ 92.8841, 12.23807 ], [ 92.88447, 12.23844 ], [ 92.88504, 12.23858 ], [ 92.88605, 12.23842 ], [ 92.8868, 12.2384 ], [ 92.88718, 12.2386 ], [ 92.88722, 12.23954 ], [ 92.88708, 12.24037 ], [ 92.88647, 12.24122 ], [ 92.88569, 12.24168 ], [ 92.88551, 12.24232 ], [ 92.88574, 12.24351 ], [ 92.88605, 12.2445 ], [ 92.88605, 12.24576 ], [ 92.886, 12.24721 ], [ 92.88569, 12.24788 ], [ 92.88565, 12.24877 ], [ 92.88725, 12.25047 ], [ 92.88764, 12.25137 ], [ 92.88802, 12.25206 ], [ 92.88894, 12.25249 ], [ 92.88997, 12.25268 ], [ 92.89131, 12.25279 ], [ 92.89227, 12.2522 ], [ 92.89319, 12.25194 ], [ 92.89335, 12.25224 ], [ 92.89312, 12.25286 ], [ 92.89302, 12.25348 ], [ 92.89333, 12.25431 ], [ 92.89393, 12.25502 ], [ 92.89459, 12.25539 ], [ 92.8953, 12.25569 ], [ 92.896, 12.25576 ], [ 92.89741, 12.25504 ], [ 92.89845, 12.25541 ], [ 92.89892, 12.25578 ], [ 92.89953, 12.25605 ], [ 92.90023, 12.25631 ], [ 92.90087, 12.25642 ], [ 92.90124, 12.25638 ], [ 92.90148, 12.25617 ], [ 92.90155, 12.25566 ], [ 92.90129, 12.25541 ], [ 92.90035, 12.25511 ], [ 92.9003, 12.25481 ], [ 92.90061, 12.25449 ], [ 92.90141, 12.25438 ], [ 92.90199, 12.2541 ], [ 92.90216, 12.25357 ], [ 92.90256, 12.25288 ], [ 92.90296, 12.2526 ], [ 92.90354, 12.25247 ], [ 92.90423, 12.2524 ], [ 92.90474, 12.25224 ], [ 92.90502, 12.2518 ], [ 92.90571, 12.25012 ], [ 92.90568, 12.24934 ], [ 92.90512, 12.24812 ], [ 92.90545, 12.24748 ], [ 92.90613, 12.2468 ], [ 92.90785, 12.24533 ], [ 92.90828, 12.24428 ], [ 92.90832, 12.24407 ], [ 92.90839, 12.2403 ], [ 92.90897, 12.23918 ], [ 92.91051, 12.23834 ], [ 92.91115, 12.2376 ], [ 92.9113, 12.23739 ], [ 92.91151, 12.23609 ], [ 92.91165, 12.23546 ], [ 92.91255, 12.23424 ], [ 92.91284, 12.23364 ], [ 92.91294, 12.23354 ], [ 92.91355, 12.23277 ], [ 92.9137, 12.23266 ], [ 92.91423, 12.232 ], [ 92.91423, 12.23179 ], [ 92.91402, 12.23062 ], [ 92.91352, 12.22967 ], [ 92.91344, 12.22743 ], [ 92.91344, 12.22592 ], [ 92.91337, 12.22466 ], [ 92.91312, 12.2241 ], [ 92.91291, 12.22344 ], [ 92.91262, 12.22277 ], [ 92.91212, 12.22281 ], [ 92.91205, 12.22337 ], [ 92.91205, 12.22445 ], [ 92.91208, 12.22519 ], [ 92.91212, 12.22536 ], [ 92.91219, 12.22624 ], [ 92.91219, 12.22739 ], [ 92.91215, 12.22848 ], [ 92.91222, 12.22895 ], [ 92.91179, 12.22895 ], [ 92.911, 12.22905 ], [ 92.91078, 12.22912 ], [ 92.90985, 12.22996 ], [ 92.90985, 12.23003 ], [ 92.9096, 12.23102 ], [ 92.90946, 12.23186 ], [ 92.90974, 12.23238 ], [ 92.90978, 12.23238 ], [ 92.91071, 12.23298 ], [ 92.91082, 12.23319 ], [ 92.91067, 12.23385 ], [ 92.91068, 12.23403 ], [ 92.91053, 12.23445 ], [ 92.91035, 12.23459 ], [ 92.90942, 12.23487 ], [ 92.90852, 12.23494 ], [ 92.90745, 12.23494 ], [ 92.90655, 12.23504 ], [ 92.90541, 12.23543 ], [ 92.90526, 12.23543 ], [ 92.90455, 12.23525 ], [ 92.90451, 12.23459 ], [ 92.9048, 12.23399 ], [ 92.90516, 12.23368 ], [ 92.90533, 12.23361 ], [ 92.90594, 12.23308 ], [ 92.9063, 12.23235 ], [ 92.90641, 12.23203 ], [ 92.90612, 12.23126 ], [ 92.90602, 12.23105 ], [ 92.90548, 12.2306 ], [ 92.90476, 12.23046 ], [ 92.90412, 12.23046 ], [ 92.90336, 12.23025 ], [ 92.90283, 12.22979 ], [ 92.90229, 12.22954 ], [ 92.90139, 12.22954 ], [ 92.90046, 12.22982 ], [ 92.89978, 12.22996 ], [ 92.89903, 12.23035 ], [ 92.89827, 12.23102 ], [ 92.89759, 12.232 ], [ 92.89659, 12.23305 ], [ 92.89486, 12.23441 ], [ 92.89339, 12.23476 ], [ 92.89214, 12.23476 ], [ 92.8911, 12.23434 ], [ 92.89102, 12.23434 ], [ 92.8902, 12.23371 ], [ 92.88952, 12.233 ], [ 92.88923, 12.23251 ], [ 92.88905, 12.23192 ], [ 92.88869, 12.23139 ], [ 92.88819, 12.2308 ], [ 92.88719, 12.23027 ], [ 92.88697, 12.22989 ], [ 92.88622, 12.22926 ], [ 92.88568, 12.22905 ], [ 92.88511, 12.22877 ], [ 92.88486, 12.22845 ], [ 92.88468, 12.22782 ], [ 92.88439, 12.22712 ], [ 92.88368, 12.22621 ], [ 92.88285, 12.22554 ], [ 92.88239, 12.22525 ], [ 92.88211, 12.22482 ], [ 92.88126, 12.22411 ], [ 92.88098, 12.22394 ], [ 92.8809, 12.22372 ], [ 92.881, 12.22344 ], [ 92.88118, 12.22323 ], [ 92.88144, 12.22313 ], [ 92.88186, 12.22305 ], [ 92.88319, 12.22261 ], [ 92.88346, 12.22248 ], [ 92.88357, 12.22221 ], [ 92.88357, 12.22172 ], [ 92.88355, 12.22165 ], [ 92.88327, 12.2213 ], [ 92.88262, 12.22071 ], [ 92.88206, 12.21997 ], [ 92.88182, 12.21994 ], [ 92.88163, 12.22019 ], [ 92.88151, 12.22015 ], [ 92.88143, 12.21993 ], [ 92.88143, 12.21966 ], [ 92.88137, 12.21932 ], [ 92.8811, 12.21868 ], [ 92.88077, 12.21823 ], [ 92.88046, 12.21792 ], [ 92.88035, 12.21755 ], [ 92.88036, 12.21683 ], [ 92.88049, 12.21648 ], [ 92.88082, 12.21612 ], [ 92.8812, 12.2154 ], [ 92.88125, 12.21522 ], [ 92.88104, 12.21467 ], [ 92.88093, 12.21451 ], [ 92.88082, 12.2142 ], [ 92.88082, 12.21358 ], [ 92.88074, 12.2134 ], [ 92.88055, 12.21327 ], [ 92.8803, 12.21314 ], [ 92.88013, 12.21279 ], [ 92.87981, 12.21251 ], [ 92.87966, 12.21233 ], [ 92.87966, 12.21208 ], [ 92.87982, 12.21171 ], [ 92.88005, 12.21142 ], [ 92.88016, 12.21124 ], [ 92.88013, 12.21111 ], [ 92.87998, 12.21094 ], [ 92.87994, 12.21079 ], [ 92.88, 12.21026 ], [ 92.87998, 12.20996 ], [ 92.87978, 12.20972 ], [ 92.87955, 12.20951 ], [ 92.87916, 12.20931 ], [ 92.87877, 12.20927 ], [ 92.87849, 12.20931 ], [ 92.87828, 12.20947 ], [ 92.87816, 12.20971 ], [ 92.87801, 12.21018 ], [ 92.87801, 12.21056 ], [ 92.87773, 12.21111 ], [ 92.87717, 12.21258 ], [ 92.87701, 12.21315 ], [ 92.87688, 12.21346 ], [ 92.87685, 12.21392 ] ] ], [ [ [ 92.7486056, 12.2878607 ], [ 92.7492999, 12.2878868 ], [ 92.7494335, 12.2874954 ], [ 92.7497806, 12.2877042 ], [ 92.7504215, 12.2872084 ], [ 92.7498607, 12.2856428 ], [ 92.7494068, 12.2843381 ], [ 92.749113, 12.2825377 ], [ 92.7486056, 12.2815201 ], [ 92.7477244, 12.2790933 ], [ 92.7474306, 12.2772407 ], [ 92.7474039, 12.2766666 ], [ 92.7468965, 12.2739267 ], [ 92.7464425, 12.2724132 ], [ 92.7460153, 12.2710563 ], [ 92.7459886, 12.2697516 ], [ 92.746309, 12.2689949 ], [ 92.7465493, 12.268212 ], [ 92.7463357, 12.2669073 ], [ 92.7461488, 12.2663071 ], [ 92.7456147, 12.2655764 ], [ 92.7453743, 12.264637 ], [ 92.7448402, 12.2636193 ], [ 92.7447334, 12.2618709 ], [ 92.7446533, 12.2614273 ], [ 92.744226, 12.2609575 ], [ 92.7440124, 12.2599137 ], [ 92.7434783, 12.2585045 ], [ 92.7429976, 12.2576695 ], [ 92.7428908, 12.2564691 ], [ 92.7429175, 12.2553991 ], [ 92.7422232, 12.2543553 ], [ 92.7411016, 12.2537551 ], [ 92.7398198, 12.253468 ], [ 92.7389118, 12.253207 ], [ 92.7382709, 12.252659 ], [ 92.7373362, 12.2522415 ], [ 92.7366953, 12.2516152 ], [ 92.7365084, 12.2506235 ], [ 92.736268, 12.2492143 ], [ 92.7358675, 12.2485357 ], [ 92.734826, 12.2477528 ], [ 92.7346391, 12.2491621 ], [ 92.7354135, 12.2512759 ], [ 92.7355203, 12.2525024 ], [ 92.7354402, 12.2536507 ], [ 92.7359209, 12.2548772 ], [ 92.7357606, 12.2563908 ], [ 92.7354402, 12.2570432 ], [ 92.7354402, 12.258087 ], [ 92.7360544, 12.2587394 ], [ 92.7361345, 12.2596528 ], [ 92.7365351, 12.2603573 ], [ 92.7370425, 12.2613229 ], [ 92.736909, 12.2624189 ], [ 92.7368555, 12.2631235 ], [ 92.7370692, 12.264089 ], [ 92.7384044, 12.2647153 ], [ 92.7389919, 12.2672987 ], [ 92.7394993, 12.2687078 ], [ 92.7396595, 12.2691253 ], [ 92.7398465, 12.2716565 ], [ 92.7401669, 12.2730134 ], [ 92.7395527, 12.2747096 ], [ 92.7401135, 12.2753358 ], [ 92.7405408, 12.2759882 ], [ 92.740434, 12.2767971 ], [ 92.7398198, 12.2780496 ], [ 92.7398198, 12.2811808 ], [ 92.7401669, 12.2821202 ], [ 92.7409681, 12.282616 ], [ 92.7409948, 12.2817027 ], [ 92.7409948, 12.2810504 ], [ 92.7410482, 12.2792499 ], [ 92.7412618, 12.2788585 ], [ 92.7420363, 12.2790933 ], [ 92.7427039, 12.2802154 ], [ 92.7430777, 12.2815983 ], [ 92.743959, 12.2818332 ], [ 92.7448402, 12.2829291 ], [ 92.7457215, 12.2840511 ], [ 92.7464692, 12.2857733 ], [ 92.7466829, 12.2867648 ], [ 92.7473505, 12.2874432 ], [ 92.7473772, 12.2867387 ], [ 92.7479113, 12.2869996 ], [ 92.7486056, 12.2878607 ] ] ], [ [ [ 92.9327772, 12.1958374 ], [ 92.9326416, 12.1959745 ], [ 92.9325132, 12.1959053 ], [ 92.932496, 12.195953 ], [ 92.9325353, 12.1962198 ], [ 92.9327869, 12.1965217 ], [ 92.9328519, 12.1971101 ], [ 92.9329196, 12.1977258 ], [ 92.9332702, 12.1983383 ], [ 92.9334656, 12.1989728 ], [ 92.9330308, 12.1996949 ], [ 92.9326968, 12.2000202 ], [ 92.9327481, 12.201157 ], [ 92.9325419, 12.2025218 ], [ 92.9321376, 12.2036823 ], [ 92.9308881, 12.2046332 ], [ 92.9294578, 12.205383 ], [ 92.9269578, 12.20657 ], [ 92.926123, 12.2069983 ], [ 92.9254637, 12.2078579 ], [ 92.9252503, 12.2094172 ], [ 92.9250395, 12.210874 ], [ 92.9249495, 12.2116751 ], [ 92.9251583, 12.2134341 ], [ 92.925435, 12.2153189 ], [ 92.925981, 12.2172379 ], [ 92.9264216, 12.2183332 ], [ 92.9267376, 12.2187919 ], [ 92.9269771, 12.2192131 ], [ 92.9270309, 12.2205904 ], [ 92.9270573, 12.2213816 ], [ 92.9270619, 12.2217784 ], [ 92.9270889, 12.2218711 ], [ 92.9271567, 12.2219571 ], [ 92.9273599, 12.222116 ], [ 92.9276254, 12.222226 ], [ 92.9282287, 12.2224806 ], [ 92.92884, 12.22265 ], [ 92.92945, 12.22265 ], [ 92.93007, 12.22286 ], [ 92.9313891, 12.2231439 ], [ 92.931952, 12.2234663 ], [ 92.9331562, 12.2242568 ], [ 92.9338662, 12.2244421 ], [ 92.9345926, 12.2244545 ], [ 92.935013, 12.2243995 ], [ 92.9354543, 12.2241352 ], [ 92.9356559, 12.2238455 ], [ 92.9363806, 12.2234021 ], [ 92.9371811, 12.2230721 ], [ 92.9378006, 12.2230209 ], [ 92.9381934, 12.2228555 ], [ 92.9386436, 12.222686 ], [ 92.93954, 12.22152 ], [ 92.9399212, 12.2208556 ], [ 92.9404047, 12.2201746 ], [ 92.9408238, 12.2183148 ], [ 92.9409702, 12.2170702 ], [ 92.9405428, 12.215928 ], [ 92.9396499, 12.213832 ], [ 92.9387444, 12.2127681 ], [ 92.9380783, 12.2122315 ], [ 92.9373739, 12.2118475 ], [ 92.9368321, 12.2118939 ], [ 92.9364461, 12.2123109 ], [ 92.9363289, 12.2128249 ], [ 92.9361752, 12.2129861 ], [ 92.935944, 12.2132375 ], [ 92.9356355, 12.2132438 ], [ 92.9351164, 12.2129264 ], [ 92.9343277, 12.2120237 ], [ 92.933962, 12.2115296 ], [ 92.9338746, 12.2107069 ], [ 92.9340317, 12.2099637 ], [ 92.9342742, 12.2089196 ], [ 92.934369, 12.2079267 ], [ 92.93493, 12.2059173 ], [ 92.9351546, 12.2037233 ], [ 92.9351833, 12.2020658 ], [ 92.935263, 12.2011283 ], [ 92.9351, 12.2002661 ], [ 92.9346809, 12.1989928 ], [ 92.93426, 12.19795 ], [ 92.93338, 12.19658 ], [ 92.9331394, 12.1961499 ], [ 92.9328993, 12.195859 ], [ 92.9327772, 12.1958374 ] ] ], [ [ [ 92.92328, 12.23136 ], [ 92.92256, 12.23162 ], [ 92.92189, 12.23263 ], [ 92.92108, 12.23478 ], [ 92.92064, 12.23605 ], [ 92.92005, 12.23762 ], [ 92.91965, 12.23928 ], [ 92.91905, 12.24054 ], [ 92.91915, 12.24193 ], [ 92.91939, 12.24268 ], [ 92.91998, 12.24406 ], [ 92.92005, 12.24597 ], [ 92.92005, 12.24772 ], [ 92.92108, 12.25118 ], [ 92.92121, 12.25202 ], [ 92.92171, 12.25283 ], [ 92.92257, 12.25387 ], [ 92.9227, 12.25555 ], [ 92.92264, 12.25691 ], [ 92.92303, 12.26023 ], [ 92.92287, 12.26179 ], [ 92.92221, 12.26351 ], [ 92.92166, 12.26524 ], [ 92.92079, 12.26712 ], [ 92.92036, 12.26735 ], [ 92.92003, 12.26706 ], [ 92.91996, 12.26651 ], [ 92.9197, 12.26612 ], [ 92.91943, 12.2655 ], [ 92.9186, 12.26414 ], [ 92.91814, 12.26395 ], [ 92.91685, 12.26446 ], [ 92.91651, 12.26502 ], [ 92.91658, 12.26553 ], [ 92.91688, 12.26605 ], [ 92.91761, 12.26709 ], [ 92.91791, 12.26774 ], [ 92.91774, 12.26826 ], [ 92.91728, 12.26819 ], [ 92.91688, 12.26777 ], [ 92.91655, 12.26728 ], [ 92.91588, 12.2668 ], [ 92.91542, 12.26651 ], [ 92.91496, 12.26644 ], [ 92.91449, 12.26609 ], [ 92.91426, 12.26563 ], [ 92.91389, 12.26505 ], [ 92.91333, 12.26482 ], [ 92.9131, 12.26466 ], [ 92.91283, 12.26414 ], [ 92.91217, 12.26417 ], [ 92.91217, 12.26469 ], [ 92.91257, 12.26563 ], [ 92.91333, 12.26651 ], [ 92.91389, 12.26702 ], [ 92.91449, 12.26767 ], [ 92.91476, 12.26832 ], [ 92.91456, 12.26913 ], [ 92.91456, 12.27088 ], [ 92.91485, 12.27146 ], [ 92.91471, 12.27246 ], [ 92.91455, 12.27317 ], [ 92.91415, 12.27366 ], [ 92.91369, 12.27376 ], [ 92.91302, 12.27382 ], [ 92.91269, 12.27402 ], [ 92.91209, 12.27402 ], [ 92.91146, 12.27398 ], [ 92.91063, 12.27402 ], [ 92.90964, 12.27421 ], [ 92.90894, 12.27444 ], [ 92.90845, 12.27499 ], [ 92.90778, 12.27528 ], [ 92.90695, 12.27528 ], [ 92.90626, 12.27496 ], [ 92.90563, 12.27418 ], [ 92.9051, 12.27334 ], [ 92.90437, 12.27256 ], [ 92.90367, 12.27227 ], [ 92.90248, 12.27201 ], [ 92.90171, 12.27204 ], [ 92.90108, 12.27233 ], [ 92.90112, 12.27266 ], [ 92.90142, 12.27324 ], [ 92.90171, 12.27369 ], [ 92.90191, 12.27421 ], [ 92.90241, 12.27489 ], [ 92.90294, 12.27525 ], [ 92.9035, 12.27596 ], [ 92.90437, 12.277 ], [ 92.90493, 12.2773 ], [ 92.90503, 12.27831 ], [ 92.90477, 12.27899 ], [ 92.90417, 12.27938 ], [ 92.9035, 12.27951 ], [ 92.90281, 12.2799 ], [ 92.90234, 12.28032 ], [ 92.90231, 12.28103 ], [ 92.90254, 12.28178 ], [ 92.90301, 12.28259 ], [ 92.90304, 12.28369 ], [ 92.90258, 12.28447 ], [ 92.9023068, 12.2855982 ], [ 92.9023203, 12.2868621 ], [ 92.9018807, 12.2877059 ], [ 92.9019103, 12.2881348 ], [ 92.9022681, 12.2888771 ], [ 92.9023355, 12.2896392 ], [ 92.9025696, 12.2899837 ], [ 92.9029354, 12.2902793 ], [ 92.9031973, 12.2902749 ], [ 92.9036042, 12.290665 ], [ 92.9040174, 12.291065 ], [ 92.9046932, 12.29138 ], [ 92.9058084, 12.2913512 ], [ 92.9069535, 12.2913265 ], [ 92.9079513, 12.2914324 ], [ 92.9085755, 12.2917089 ], [ 92.9096523, 12.2920874 ], [ 92.9103668, 12.2925633 ], [ 92.9106894, 12.2929692 ], [ 92.91101, 12.293068 ], [ 92.9114526, 12.2929356 ], [ 92.9116196, 12.29249 ], [ 92.9121448, 12.2925638 ], [ 92.91278, 12.2927 ], [ 92.91351, 12.29244 ], [ 92.91404, 12.29163 ], [ 92.91424, 12.29105 ], [ 92.91484, 12.29066 ], [ 92.91557, 12.29053 ], [ 92.9164, 12.28995 ], [ 92.91699, 12.28901 ], [ 92.91742, 12.28849 ], [ 92.91815, 12.28852 ], [ 92.91868, 12.28862 ], [ 92.91901, 12.2883 ], [ 92.91881, 12.28755 ], [ 92.91871, 12.28671 ], [ 92.91871, 12.28444 ], [ 92.91891, 12.28298 ], [ 92.91914, 12.28214 ], [ 92.91937, 12.28165 ], [ 92.92014, 12.28152 ], [ 92.92097, 12.28181 ], [ 92.9216, 12.28269 ], [ 92.92212, 12.28347 ], [ 92.92235, 12.28405 ], [ 92.92311, 12.28412 ], [ 92.92391, 12.28334 ], [ 92.92474, 12.2812 ], [ 92.92527, 12.28039 ], [ 92.92573, 12.28003 ], [ 92.92653, 12.28003 ], [ 92.92732, 12.28026 ], [ 92.92795, 12.28061 ], [ 92.92818, 12.28117 ], [ 92.92862, 12.28181 ], [ 92.92925, 12.28214 ], [ 92.92994, 12.28321 ], [ 92.93054, 12.28522 ], [ 92.93084, 12.28763 ], [ 92.93047, 12.28912 ], [ 92.92968, 12.29025 ], [ 92.92895, 12.29123 ], [ 92.92895, 12.29233 ], [ 92.92981, 12.29343 ], [ 92.92984, 12.29462 ], [ 92.93028, 12.29615 ], [ 92.93074, 12.298 ], [ 92.93067, 12.30036 ], [ 92.93028, 12.30214 ], [ 92.93028, 12.30315 ], [ 92.93055, 12.30464 ], [ 92.93071, 12.30532 ], [ 92.9305539, 12.3060395 ], [ 92.9312296, 12.3070844 ], [ 92.9314588, 12.3070634 ], [ 92.9317456, 12.3072223 ], [ 92.9324063, 12.3073848 ], [ 92.9327989, 12.3077429 ], [ 92.9328787, 12.3081275 ], [ 92.9325844, 12.3084092 ], [ 92.9326488, 12.3086044 ], [ 92.9329534, 12.3085659 ], [ 92.9332607, 12.3091504 ], [ 92.9336916, 12.3096252 ], [ 92.9339369, 12.3102108 ], [ 92.934202, 12.3107778 ], [ 92.9342881, 12.3103516 ], [ 92.934376, 12.3102847 ], [ 92.93436, 12.30947 ], [ 92.93426, 12.30856 ], [ 92.93426, 12.30794 ], [ 92.93473, 12.30587 ], [ 92.9343943, 12.3050968 ], [ 92.9346846, 12.3041864 ], [ 92.934823, 12.3036021 ], [ 92.9349786, 12.3024574 ], [ 92.9354768, 12.3016399 ], [ 92.93559, 12.29957 ], [ 92.93545, 12.29808 ], [ 92.9351069, 12.297403 ], [ 92.934954, 12.29675 ], [ 92.93399, 12.29607 ], [ 92.9335, 12.29532 ], [ 92.9327, 12.29328 ], [ 92.93263, 12.29211 ], [ 92.9332174, 12.2896134 ], [ 92.9332078, 12.2888798 ], [ 92.9334095, 12.2880449 ], [ 92.9339694, 12.2871844 ], [ 92.9347552, 12.2862269 ], [ 92.93522, 12.28521 ], [ 92.93708, 12.28318 ], [ 92.93917, 12.28166 ], [ 92.94033, 12.28098 ], [ 92.94122, 12.27939 ], [ 92.94169, 12.27767 ], [ 92.94145, 12.27624 ], [ 92.94049, 12.27388 ], [ 92.93953, 12.27203 ], [ 92.938, 12.27051 ], [ 92.93681, 12.26961 ], [ 92.93558, 12.26809 ], [ 92.93438, 12.26608 ], [ 92.93389, 12.26475 ], [ 92.93279, 12.26345 ], [ 92.93186, 12.26173 ], [ 92.93107, 12.26079 ], [ 92.93021, 12.25998 ], [ 92.92934, 12.25816 ], [ 92.92848, 12.2557 ], [ 92.92775, 12.25379 ], [ 92.92765, 12.25369 ], [ 92.92722, 12.25239 ], [ 92.92716, 12.25126 ], [ 92.92716, 12.25061 ], [ 92.92722, 12.24941 ], [ 92.92682, 12.24879 ], [ 92.92739, 12.24781 ], [ 92.92815, 12.24681 ], [ 92.92861, 12.24571 ], [ 92.92835, 12.24366 ], [ 92.92828, 12.2435 ], [ 92.92815, 12.2423 ], [ 92.92825, 12.24052 ], [ 92.92808, 12.23903 ], [ 92.92808, 12.23815 ], [ 92.92768, 12.23738 ], [ 92.92758, 12.23731 ], [ 92.92666, 12.23641 ], [ 92.92652, 12.23631 ], [ 92.92576, 12.23504 ], [ 92.92496, 12.23397 ], [ 92.92467, 12.23241 ], [ 92.92395, 12.23141 ], [ 92.92328, 12.23136 ] ] ], [ [ [ 92.95024, 12.0911 ], [ 92.95022, 12.0919 ], [ 92.95009, 12.09253 ], [ 92.95012, 12.09308 ], [ 92.95055, 12.09364 ], [ 92.95132, 12.09409 ], [ 92.95133, 12.09442 ], [ 92.95091, 12.09475 ], [ 92.95043, 12.09501 ], [ 92.95035, 12.09541 ], [ 92.9503, 12.09636 ], [ 92.94998, 12.09811 ], [ 92.95026, 12.09957 ], [ 92.95031, 12.10058 ], [ 92.94974, 12.10109 ], [ 92.94945, 12.10223 ], [ 92.94945, 12.10345 ], [ 92.94983, 12.10569 ], [ 92.95005, 12.10829 ], [ 92.94979, 12.11071 ], [ 92.94947, 12.11334 ], [ 92.94871, 12.11512 ], [ 92.94858, 12.1157 ], [ 92.94886, 12.11569 ], [ 92.94936, 12.11503 ], [ 92.94983, 12.11433 ], [ 92.95148, 12.11237 ], [ 92.95233, 12.11185 ], [ 92.95396, 12.10931 ], [ 92.95437, 12.1074 ], [ 92.95654, 12.10391 ], [ 92.9575, 12.10097 ], [ 92.9582, 12.09934 ], [ 92.95816, 12.09849 ], [ 92.95749, 12.09739 ], [ 92.95671, 12.09618 ], [ 92.95576, 12.09518 ], [ 92.95453, 12.09423 ], [ 92.95315, 12.09335 ], [ 92.95223, 12.09296 ], [ 92.95146, 12.09251 ], [ 92.95105, 12.09171 ], [ 92.95101, 12.09152 ], [ 92.95076, 12.0909 ], [ 92.95048, 12.09085 ], [ 92.95024, 12.0911 ] ] ], [ [ [ 92.97781, 12.11632 ], [ 92.9765648, 12.1166267 ], [ 92.97627, 12.11742 ], [ 92.9755632, 12.1178456 ], [ 92.97518, 12.11885 ], [ 92.9749, 12.11833 ], [ 92.9744, 12.11819 ], [ 92.97316, 12.11833 ], [ 92.9713013, 12.1175984 ], [ 92.96997, 12.1179293 ], [ 92.9683566, 12.1184225 ], [ 92.9666403, 12.1192895 ], [ 92.9653373, 12.120389 ], [ 92.9633684, 12.1220375 ], [ 92.9612612, 12.1252367 ], [ 92.960777, 12.1275717 ], [ 92.9603756, 12.1301933 ], [ 92.9596838, 12.1316708 ], [ 92.958028, 12.1338561 ], [ 92.9567098, 12.1371211 ], [ 92.9561936, 12.1384646 ], [ 92.9563525, 12.1398572 ], [ 92.9561003, 12.1411515 ], [ 92.9556003, 12.1429615 ], [ 92.9556403, 12.1447015 ], [ 92.9560103, 12.1459715 ], [ 92.9561503, 12.1468915 ], [ 92.95715, 12.14827 ], [ 92.9582468, 12.1489511 ], [ 92.9602358, 12.1497377 ], [ 92.9612101, 12.1505302 ], [ 92.9627367, 12.1505127 ], [ 92.9642873, 12.150243 ], [ 92.9655307, 12.1497781 ], [ 92.9658355, 12.1498329 ], [ 92.9664317, 12.1497077 ], [ 92.9675336, 12.1489918 ], [ 92.969074, 12.1491967 ], [ 92.9700325, 12.1487208 ], [ 92.9709251, 12.1482691 ], [ 92.9719393, 12.1478371 ], [ 92.97322, 12.14798 ], [ 92.9734458, 12.1476229 ], [ 92.9741996, 12.1474233 ], [ 92.9746974, 12.1478856 ], [ 92.9749719, 12.1480197 ], [ 92.9759126, 12.1478729 ], [ 92.9766697, 12.1474612 ], [ 92.9770069, 12.1476709 ], [ 92.9772169, 12.147675 ], [ 92.97745, 12.14732 ], [ 92.977781, 12.1469211 ], [ 92.9782021, 12.1473212 ], [ 92.9784133, 12.147062 ], [ 92.9783347, 12.146652 ], [ 92.9793569, 12.1468826 ], [ 92.9789408, 12.1470876 ], [ 92.9786361, 12.1473663 ], [ 92.9784362, 12.1477538 ], [ 92.9785051, 12.1479345 ], [ 92.9786951, 12.1479268 ], [ 92.9790393, 12.1478281 ], [ 92.9796683, 12.1479313 ], [ 92.9799876, 12.1476477 ], [ 92.9802317, 12.1476766 ], [ 92.9807572, 12.1471049 ], [ 92.9814013, 12.1470364 ], [ 92.9816995, 12.1466424 ], [ 92.9819221, 12.1466762 ], [ 92.9815852, 12.1476843 ], [ 92.9817416, 12.148268 ], [ 92.9820062, 12.1485469 ], [ 92.982931, 12.1485902 ], [ 92.9834397, 12.1484331 ], [ 92.9849097, 12.1473611 ], [ 92.9854387, 12.1466288 ], [ 92.9860674, 12.1467505 ], [ 92.9863474, 12.1465486 ], [ 92.9864593, 12.1461961 ], [ 92.9871084, 12.1459373 ], [ 92.9875381, 12.1460005 ], [ 92.9877158, 12.1455841 ], [ 92.9877464, 12.1450041 ], [ 92.9881258, 12.14466 ], [ 92.98868, 12.14412 ], [ 92.98872, 12.14403 ], [ 92.9892, 12.14377 ], [ 92.98966, 12.14391 ], [ 92.9901308, 12.1439004 ], [ 92.9903855, 12.1442265 ], [ 92.9905606, 12.1441697 ], [ 92.9907676, 12.1439048 ], [ 92.9912011, 12.1439357 ], [ 92.9915158, 12.1439619 ], [ 92.9919869, 12.143609 ], [ 92.9918955, 12.1429133 ], [ 92.992411, 12.1422899 ], [ 92.9928616, 12.1416406 ], [ 92.9929668, 12.1410174 ], [ 92.9933155, 12.1403936 ], [ 92.9930497, 12.1400861 ], [ 92.99298, 12.13965 ], [ 92.9927377, 12.139044 ], [ 92.9929081, 12.1386289 ], [ 92.9924281, 12.1373664 ], [ 92.9925116, 12.1368652 ], [ 92.99218, 12.13651 ], [ 92.9921268, 12.1359903 ], [ 92.9919146, 12.1356399 ], [ 92.99315, 12.1352869 ], [ 92.9935271, 12.1349248 ], [ 92.99408, 12.1338251 ], [ 92.9937133, 12.1332644 ], [ 92.9942242, 12.1325339 ], [ 92.9942984, 12.1309585 ], [ 92.9943613, 12.1305217 ], [ 92.9948213, 12.1296443 ], [ 92.9947459, 12.1287784 ], [ 92.9951659, 12.1280084 ], [ 92.9957859, 12.1271284 ], [ 92.9966059, 12.1268884 ], [ 92.996318, 12.1260279 ], [ 92.996498, 12.1254079 ], [ 92.997388, 12.1249979 ], [ 92.998238, 12.1245479 ], [ 92.998638, 12.1241879 ], [ 92.998648, 12.1236479 ], [ 92.998798, 12.1230879 ], [ 92.998988, 12.1227479 ], [ 92.999758, 12.1220979 ], [ 93.000428, 12.1214879 ], [ 93.000578, 12.1208679 ], [ 93.000508, 12.1202878 ], [ 93.000708, 12.1192978 ], [ 93.00061, 12.11847 ], [ 93.00031, 12.11804 ], [ 92.99984, 12.11772 ], [ 92.99903, 12.11683 ], [ 92.9982241, 12.1144371 ], [ 92.997107, 12.114251 ], [ 92.996518, 12.1131748 ], [ 92.9955721, 12.1129876 ], [ 92.9948618, 12.1129521 ], [ 92.9941583, 12.1133756 ], [ 92.9939042, 12.1138571 ], [ 92.99359, 12.11429 ], [ 92.99323, 12.1141 ], [ 92.9926045, 12.1134622 ], [ 92.992122, 12.1130902 ], [ 92.991061, 12.1131565 ], [ 92.99054, 12.11299 ], [ 92.98984, 12.11306 ], [ 92.98885, 12.11337 ], [ 92.98812, 12.11348 ], [ 92.98739, 12.11341 ], [ 92.98682, 12.11323 ], [ 92.98648, 12.11348 ], [ 92.9861, 12.11357 ], [ 92.98554, 12.11339 ], [ 92.98512, 12.1133 ], [ 92.9847, 12.11329 ], [ 92.9843, 12.11293 ], [ 92.9835266, 12.111901 ], [ 92.9829466, 12.111481 ], [ 92.9822066, 12.111311 ], [ 92.9812366, 12.111351 ], [ 92.9804866, 12.111791 ], [ 92.9801366, 12.112361 ], [ 92.9800366, 12.113211 ], [ 92.9797366, 12.113571 ], [ 92.9794066, 12.113311 ], [ 92.9791066, 12.112841 ], [ 92.9786866, 12.112831 ], [ 92.9777566, 12.112871 ], [ 92.9768566, 12.113011 ], [ 92.9762866, 12.113581 ], [ 92.9763638, 12.114848 ], [ 92.97695, 12.11581 ], [ 92.97781, 12.11632 ] ] ], [ [ [ 92.98941, 12.04729 ], [ 92.98783, 12.04812 ], [ 92.98733, 12.04867 ], [ 92.98613, 12.04963 ], [ 92.98525, 12.05013 ], [ 92.98461, 12.05046 ], [ 92.98349, 12.05078 ], [ 92.98263, 12.05135 ], [ 92.98204, 12.0513 ], [ 92.98133, 12.05118 ], [ 92.98096, 12.05154 ], [ 92.98069, 12.05239 ], [ 92.9809, 12.05352 ], [ 92.98102, 12.05443 ], [ 92.98051, 12.05546 ], [ 92.97946, 12.05696 ], [ 92.97867, 12.05764 ], [ 92.97759, 12.05959 ], [ 92.97739, 12.06021 ], [ 92.97764, 12.06062 ], [ 92.97834, 12.06062 ], [ 92.97937, 12.06023 ], [ 92.9803, 12.06008 ], [ 92.98096, 12.06005 ], [ 92.98187, 12.06027 ], [ 92.98235, 12.06067 ], [ 92.98234, 12.06124 ], [ 92.98204, 12.06152 ], [ 92.98191, 12.06202 ], [ 92.98212, 12.06243 ], [ 92.98214, 12.06281 ], [ 92.9818, 12.06305 ], [ 92.98088, 12.06336 ], [ 92.9804, 12.06384 ], [ 92.98011, 12.06423 ], [ 92.97946, 12.06464 ], [ 92.9786, 12.06533 ], [ 92.97787, 12.06556 ], [ 92.97724, 12.06555 ], [ 92.97676, 12.06526 ], [ 92.97599, 12.06534 ], [ 92.97602, 12.06594 ], [ 92.97614, 12.06685 ], [ 92.97575, 12.06698 ], [ 92.97511, 12.06644 ], [ 92.97414, 12.06584 ], [ 92.97301, 12.06566 ], [ 92.97236, 12.06607 ], [ 92.97195, 12.06727 ], [ 92.97103, 12.06754 ], [ 92.96948, 12.06844 ], [ 92.96779, 12.06898 ], [ 92.96531, 12.07045 ], [ 92.96457, 12.07132 ], [ 92.96351, 12.07266 ], [ 92.96262, 12.07522 ], [ 92.96226, 12.07683 ], [ 92.9623, 12.07843 ], [ 92.9625, 12.08024 ], [ 92.96287, 12.08152 ], [ 92.96384, 12.08315 ], [ 92.96472, 12.0844 ], [ 92.96544, 12.08494 ], [ 92.96674, 12.08526 ], [ 92.96832, 12.08576 ], [ 92.96938, 12.08591 ], [ 92.97045, 12.08624 ], [ 92.97129, 12.08685 ], [ 92.97159, 12.08748 ], [ 92.9716, 12.08843 ], [ 92.97106, 12.09021 ], [ 92.97081, 12.09159 ], [ 92.9702, 12.09257 ], [ 92.96971, 12.09209 ], [ 92.96898, 12.09144 ], [ 92.96791, 12.09115 ], [ 92.96678, 12.09097 ], [ 92.96594, 12.09139 ], [ 92.96632, 12.09285 ], [ 92.96652, 12.09386 ], [ 92.96671, 12.09457 ], [ 92.96626, 12.09494 ], [ 92.96521, 12.09491 ], [ 92.96442, 12.09475 ], [ 92.96335, 12.09427 ], [ 92.96264, 12.09403 ], [ 92.9621, 12.09409 ], [ 92.96225, 12.09485 ], [ 92.96237, 12.095 ], [ 92.96321, 12.09545 ], [ 92.96369, 12.09566 ], [ 92.96386, 12.09607 ], [ 92.9628, 12.09665 ], [ 92.96267, 12.09719 ], [ 92.96377, 12.09748 ], [ 92.96438, 12.09791 ], [ 92.96459, 12.09832 ], [ 92.96455, 12.09912 ], [ 92.96398, 12.09953 ], [ 92.96332, 12.1002 ], [ 92.96255, 12.10123 ], [ 92.96263, 12.10213 ], [ 92.96352, 12.10206 ], [ 92.96443, 12.10156 ], [ 92.96506, 12.10176 ], [ 92.96544, 12.10239 ], [ 92.96486, 12.10329 ], [ 92.96401, 12.1034 ], [ 92.96316, 12.10356 ], [ 92.96276, 12.10319 ], [ 92.96236, 12.10302 ], [ 92.96198, 12.10323 ], [ 92.96162, 12.10393 ], [ 92.96166, 12.10469 ], [ 92.96141, 12.10516 ], [ 92.96076, 12.10553 ], [ 92.96026, 12.10635 ], [ 92.96025, 12.10704 ], [ 92.96106, 12.10776 ], [ 92.96135, 12.10813 ], [ 92.9626, 12.10826 ], [ 92.96344, 12.10796 ], [ 92.96367, 12.10772 ], [ 92.96449, 12.10696 ], [ 92.96483, 12.10672 ], [ 92.96539, 12.10711 ], [ 92.9655, 12.10771 ], [ 92.96575, 12.10816 ], [ 92.96606, 12.10895 ], [ 92.96689, 12.10849 ], [ 92.96769, 12.108 ], [ 92.96833, 12.10747 ], [ 92.96875, 12.10662 ], [ 92.96963, 12.10627 ], [ 92.97016, 12.10595 ], [ 92.96991, 12.10482 ], [ 92.96926, 12.10416 ], [ 92.96919, 12.10344 ], [ 92.96976, 12.10326 ], [ 92.97036, 12.10358 ], [ 92.97122, 12.10358 ], [ 92.97197, 12.10309 ], [ 92.9725, 12.10268 ], [ 92.973, 12.10179 ], [ 92.97348, 12.10123 ], [ 92.97392, 12.10136 ], [ 92.97454, 12.10214 ], [ 92.97538, 12.10267 ], [ 92.97621, 12.1029 ], [ 92.97706, 12.1029 ], [ 92.97763, 12.1034 ], [ 92.97827, 12.10376 ], [ 92.97838, 12.10428 ], [ 92.97813, 12.10479 ], [ 92.97808, 12.10533 ], [ 92.97881, 12.10598 ], [ 92.97963, 12.10617 ], [ 92.98033, 12.10606 ], [ 92.98161, 12.106 ], [ 92.9824, 12.10631 ], [ 92.98313, 12.10693 ], [ 92.98375, 12.10762 ], [ 92.98456, 12.10835 ], [ 92.98576, 12.10902 ], [ 92.98643, 12.1091 ], [ 92.98794, 12.10903 ], [ 92.98894, 12.10872 ], [ 92.98964, 12.10865 ], [ 92.99031, 12.10893 ], [ 92.99072, 12.10944 ], [ 92.9913, 12.10919 ], [ 92.99144, 12.10903 ], [ 92.99186, 12.10791 ], [ 92.99264, 12.10715 ], [ 92.99364, 12.10699 ], [ 92.99522, 12.10654 ], [ 92.99647, 12.10591 ], [ 92.99835, 12.10529 ], [ 93.00053, 12.1052 ], [ 93.00211, 12.10501 ], [ 93.00342, 12.10453 ], [ 93.00456, 12.10403 ], [ 93.00493, 12.10363 ], [ 93.00515, 12.10255 ], [ 93.00507, 12.10157 ], [ 93.00524, 12.10107 ], [ 93.00556, 12.10044 ], [ 93.00561, 12.09987 ], [ 93.00562, 12.09934 ], [ 93.00521, 12.0989 ], [ 93.00394, 12.09827 ], [ 93.00354, 12.09726 ], [ 93.00337, 12.09609 ], [ 93.00333, 12.09551 ], [ 93.00354, 12.09497 ], [ 93.00358, 12.09432 ], [ 93.00317, 12.09388 ], [ 93.00258, 12.09375 ], [ 93.00237, 12.09338 ], [ 93.0019, 12.09169 ], [ 93.00168, 12.09098 ], [ 93.00166, 12.08991 ], [ 93.00186, 12.08914 ], [ 93.00141, 12.08779 ], [ 93.00079, 12.08698 ], [ 93.00057, 12.08654 ], [ 93.00032, 12.08533 ], [ 93.00016, 12.08363 ], [ 93.00036, 12.08243 ], [ 93.00069, 12.08122 ], [ 93.00063, 12.07996 ], [ 93.00044, 12.07877 ], [ 92.9996, 12.07861 ], [ 92.99984, 12.07696 ], [ 93.00077, 12.07604 ], [ 93.00159, 12.07575 ], [ 93.00199, 12.07459 ], [ 93.00157, 12.07379 ], [ 93.00073, 12.07383 ], [ 92.99976, 12.07393 ], [ 92.99904, 12.07359 ], [ 92.99896, 12.07182 ], [ 92.99953, 12.0704 ], [ 93.00022, 12.0698 ], [ 93.00043, 12.06872 ], [ 93.00039, 12.0679 ], [ 92.99966, 12.06749 ], [ 92.99897, 12.0679 ], [ 92.99838, 12.0678 ], [ 92.99807, 12.0668 ], [ 92.998, 12.06523 ], [ 92.99825, 12.06377 ], [ 92.99921, 12.06347 ], [ 93.00008, 12.06274 ], [ 92.99982, 12.06136 ], [ 92.99924, 12.06006 ], [ 92.99905, 12.05723 ], [ 92.99874, 12.05345 ], [ 92.99904, 12.0516 ], [ 92.9988, 12.0506 ], [ 92.99875, 12.04947 ], [ 92.99838, 12.0486 ], [ 92.99818, 12.04835 ], [ 92.99749, 12.04737 ], [ 92.99614, 12.04611 ], [ 92.99494, 12.04534 ], [ 92.99332, 12.04535 ], [ 92.9921, 12.0454 ], [ 92.99115, 12.04583 ], [ 92.9904, 12.04636 ], [ 92.98941, 12.04729 ] ] ], [ [ [ 93.04036, 12.04851 ], [ 93.03977, 12.04971 ], [ 93.03968, 12.05006 ], [ 93.03769, 12.05399 ], [ 93.0371, 12.05713 ], [ 93.03641, 12.05824 ], [ 93.03567, 12.05909 ], [ 93.035, 12.06061 ], [ 93.03452, 12.06212 ], [ 93.0331, 12.06336 ], [ 93.03127, 12.06471 ], [ 93.03048, 12.06607 ], [ 93.02976, 12.06745 ], [ 93.02874, 12.06854 ], [ 93.02712, 12.06943 ], [ 93.02571, 12.0708 ], [ 93.02418, 12.07168 ], [ 93.02206, 12.07252 ], [ 93.02025, 12.07333 ], [ 93.01467, 12.07358 ], [ 93.0131, 12.07356 ], [ 93.01211, 12.07311 ], [ 93.01101, 12.07325 ], [ 93.00974, 12.07393 ], [ 93.0086, 12.07507 ], [ 93.0073, 12.07707 ], [ 93.00679, 12.07989 ], [ 93.00659, 12.08261 ], [ 93.00706, 12.08558 ], [ 93.00752, 12.08764 ], [ 93.00758, 12.08894 ], [ 93.00734, 12.09072 ], [ 93.00737, 12.09225 ], [ 93.008, 12.09489 ], [ 93.00879, 12.09689 ], [ 93.0093, 12.09992 ], [ 93.00937, 12.1015 ], [ 93.00894, 12.10301 ], [ 93.00821, 12.10526 ], [ 93.00757, 12.10695 ], [ 93.00679, 12.10812 ], [ 93.00603, 12.1086 ], [ 93.00497, 12.10869 ], [ 93.00279, 12.10943 ], [ 93.00195, 12.11041 ], [ 93.00276, 12.11083 ], [ 93.00415, 12.11189 ], [ 93.00475, 12.11277 ], [ 93.00478, 12.11349 ], [ 93.00522, 12.11397 ], [ 93.00555, 12.11522 ], [ 93.00576, 12.1167 ], [ 93.00525, 12.11862 ], [ 93.00337, 12.12486 ], [ 93.00312, 12.1274 ], [ 93.0027, 12.13036 ], [ 93.00256, 12.1321 ], [ 93.00219, 12.13315 ], [ 93.00205, 12.1342 ], [ 93.00249, 12.13463 ], [ 93.00294, 12.13533 ], [ 93.00378, 12.13756 ], [ 93.0043, 12.1397 ], [ 93.00543, 12.1411 ], [ 93.00698, 12.14462 ], [ 93.0077, 12.14631 ], [ 93.00966, 12.14871 ], [ 93.0113, 12.15003 ], [ 93.01349, 12.15138 ], [ 93.01624, 12.15291 ], [ 93.01926, 12.15531 ], [ 93.02135, 12.15747 ], [ 93.02241, 12.15937 ], [ 93.02303, 12.16053 ], [ 93.022845, 12.1615609 ], [ 93.0232461, 12.1627837 ], [ 93.023706, 12.1633044 ], [ 93.0241835, 12.1635816 ], [ 93.0247385, 12.164415 ], [ 93.0253998, 12.1649801 ], [ 93.0258843, 12.1651775 ], [ 93.0262533, 12.1652851 ], [ 93.0264411, 12.1650889 ], [ 93.0266579, 12.1651712 ], [ 93.0268133, 12.1654117 ], [ 93.0269104, 12.1657692 ], [ 93.0271318, 12.1660832 ], [ 93.0270949, 12.1662628 ], [ 93.027124, 12.1664305 ], [ 93.0272341, 12.1665508 ], [ 93.0274574, 12.1665065 ], [ 93.0275973, 12.1663597 ], [ 93.0276743, 12.1661394 ], [ 93.0276775, 12.1660445 ], [ 93.0282158, 12.1654484 ], [ 93.0284123, 12.1654781 ], [ 93.0285644, 12.165399 ], [ 93.0287651, 12.1652408 ], [ 93.0288799, 12.1646576 ], [ 93.0290712, 12.1634418 ], [ 93.0289625, 12.1630201 ], [ 93.0284576, 12.1621025 ], [ 93.0284658, 12.1608305 ], [ 93.02804, 12.15994 ], [ 93.02797, 12.15841 ], [ 93.02788, 12.1576 ], [ 93.02733, 12.15658 ], [ 93.02707, 12.15399 ], [ 93.0269, 12.15142 ], [ 93.02685, 12.14934 ], [ 93.02703, 12.1473 ], [ 93.02761, 12.14583 ], [ 93.02812, 12.14495 ], [ 93.02863, 12.14415 ], [ 93.02855, 12.14339 ], [ 93.02798, 12.1431 ], [ 93.027, 12.14287 ], [ 93.02516, 12.14209 ], [ 93.02492, 12.14179 ], [ 93.0253, 12.14109 ], [ 93.02577, 12.14035 ], [ 93.02577, 12.13935 ], [ 93.026, 12.13835 ], [ 93.02679, 12.1375 ], [ 93.02795, 12.13646 ], [ 93.02957, 12.13552 ], [ 93.03042, 12.13512 ], [ 93.03055, 12.13416 ], [ 93.0311, 12.13102 ], [ 93.03322, 12.12713 ], [ 93.03405, 12.12691 ], [ 93.03469, 12.12684 ], [ 93.03494, 12.12619 ], [ 93.03479, 12.12503 ], [ 93.034, 12.12402 ], [ 93.03283, 12.12272 ], [ 93.03252, 12.12089 ], [ 93.03153, 12.11868 ], [ 93.03129, 12.11751 ], [ 93.03117, 12.11589 ], [ 93.0311, 12.11441 ], [ 93.03144, 12.11267 ], [ 93.03149, 12.11185 ], [ 93.03129, 12.11055 ], [ 93.03172, 12.10994 ], [ 93.03225, 12.10937 ], [ 93.03278, 12.10781 ], [ 93.03362, 12.10497 ], [ 93.03368, 12.10348 ], [ 93.03363, 12.10226 ], [ 93.03385, 12.10103 ], [ 93.03421, 12.09984 ], [ 93.03523, 12.09808 ], [ 93.03779, 12.09546 ], [ 93.03873, 12.09392 ], [ 93.03968, 12.09248 ], [ 93.04058, 12.09185 ], [ 93.04102, 12.09048 ], [ 93.04202, 12.08872 ], [ 93.04298, 12.08746 ], [ 93.04463, 12.08634 ], [ 93.0457, 12.08548 ], [ 93.04658, 12.08454 ], [ 93.04786, 12.08412 ], [ 93.04894, 12.08367 ], [ 93.04948, 12.08319 ], [ 93.05015, 12.08189 ], [ 93.05033, 12.08082 ], [ 93.05136, 12.07914 ], [ 93.05164, 12.07827 ], [ 93.05276, 12.07737 ], [ 93.05354, 12.07629 ], [ 93.05381, 12.07528 ], [ 93.05292, 12.07496 ], [ 93.05173, 12.07529 ], [ 93.05108, 12.07523 ], [ 93.05039, 12.07426 ], [ 93.05052, 12.07308 ], [ 93.05094, 12.07233 ], [ 93.05112, 12.07133 ], [ 93.05221, 12.07096 ], [ 93.05252, 12.07063 ], [ 93.05277, 12.06823 ], [ 93.05227, 12.0654 ], [ 93.05134, 12.06323 ], [ 93.0518, 12.06222 ], [ 93.05271, 12.06195 ], [ 93.05296, 12.06131 ], [ 93.0528, 12.05982 ], [ 93.05182, 12.05929 ], [ 93.05052, 12.05917 ], [ 93.05006, 12.05824 ], [ 93.0503, 12.0575 ], [ 93.05163, 12.05631 ], [ 93.05127, 12.05543 ], [ 93.04944, 12.0519 ], [ 93.04831, 12.0496 ], [ 93.04747, 12.04923 ], [ 93.04698, 12.04975 ], [ 93.04648, 12.04986 ], [ 93.04611, 12.04979 ], [ 93.04598, 12.04898 ], [ 93.04638, 12.04779 ], [ 93.04593, 12.04713 ], [ 93.0448, 12.04655 ], [ 93.04387, 12.0465 ], [ 93.04272, 12.0465 ], [ 93.04198, 12.04658 ], [ 93.04119, 12.04734 ], [ 93.04036, 12.04851 ] ] ], [ [ [ 93.0851, 12.08936 ], [ 93.08484, 12.08908 ], [ 93.08376, 12.08851 ], [ 93.08278, 12.08831 ], [ 93.08202, 12.08825 ], [ 93.08071, 12.08891 ], [ 93.08048, 12.08908 ], [ 93.07964, 12.08879 ], [ 93.07917, 12.08831 ], [ 93.07882, 12.08669 ], [ 93.07885, 12.08541 ], [ 93.07832, 12.08464 ], [ 93.07783, 12.08439 ], [ 93.07597, 12.08473 ], [ 93.0753, 12.08441 ], [ 93.07454, 12.08421 ], [ 93.07268, 12.08552 ], [ 93.07102, 12.08689 ], [ 93.07003, 12.08783 ], [ 93.06898, 12.08939 ], [ 93.06788, 12.09201 ], [ 93.06675, 12.09388 ], [ 93.06619, 12.09493 ], [ 93.06616, 12.09601 ], [ 93.06602, 12.09752 ], [ 93.06395, 12.09806 ], [ 93.06195, 12.10105 ], [ 93.06064, 12.1025 ], [ 93.05916, 12.10401 ], [ 93.05651, 12.10612 ], [ 93.05532, 12.10746 ], [ 93.055, 12.10863 ], [ 93.05294, 12.11045 ], [ 93.05294, 12.11053 ], [ 93.05096, 12.11306 ], [ 93.05026, 12.11502 ], [ 93.05038, 12.11721 ], [ 93.05027, 12.11759 ], [ 93.05033, 12.11895 ], [ 93.04962, 12.12015 ], [ 93.04835, 12.12123 ], [ 93.04714, 12.12374 ], [ 93.04647, 12.12582 ], [ 93.04619, 12.12726 ], [ 93.04599, 12.12755 ], [ 93.04478, 12.12862 ], [ 93.04387, 12.12853 ], [ 93.04267, 12.1281 ], [ 93.04178, 12.12705 ], [ 93.0414, 12.12645 ], [ 93.04062, 12.12629 ], [ 93.03949, 12.12736 ], [ 93.03913, 12.13024 ], [ 93.03855, 12.13123 ], [ 93.03762, 12.13215 ], [ 93.03703, 12.13307 ], [ 93.03687, 12.1341 ], [ 93.03741, 12.13524 ], [ 93.03808, 12.13596 ], [ 93.03825, 12.13677 ], [ 93.0381, 12.13787 ], [ 93.03823, 12.13916 ], [ 93.03911, 12.14014 ], [ 93.03974, 12.14162 ], [ 93.03983, 12.14495 ], [ 93.04316, 12.15498 ], [ 93.04604, 12.16427 ], [ 93.05129, 12.17639 ], [ 93.05402, 12.18532 ], [ 93.05618, 12.19124 ], [ 93.05825, 12.19518 ], [ 93.05982, 12.19736 ], [ 93.06193, 12.20054 ], [ 93.06312, 12.20265 ], [ 93.06459, 12.20559 ], [ 93.06549, 12.20842 ], [ 93.06638, 12.2102 ], [ 93.06743, 12.21113 ], [ 93.06862, 12.21128 ], [ 93.06981, 12.21123 ], [ 93.07187, 12.21052 ], [ 93.07346, 12.21011 ], [ 93.07485, 12.20991 ], [ 93.07556, 12.20993 ], [ 93.07604, 12.20984 ], [ 93.07623, 12.20954 ], [ 93.07656, 12.2077 ], [ 93.07707, 12.20672 ], [ 93.07708, 12.20636 ], [ 93.07724, 12.20503 ], [ 93.07743, 12.2049 ], [ 93.07749, 12.20469 ], [ 93.07724, 12.20446 ], [ 93.07699, 12.2044 ], [ 93.07698, 12.20423 ], [ 93.07753, 12.20396 ], [ 93.07739, 12.20349 ], [ 93.07707, 12.20351 ], [ 93.077, 12.20306 ], [ 93.07715, 12.20257 ], [ 93.07749, 12.20231 ], [ 93.07802, 12.20214 ], [ 93.07826, 12.20199 ], [ 93.07833, 12.20158 ], [ 93.0784, 12.20138 ], [ 93.07867, 12.20084 ], [ 93.0788, 12.20045 ], [ 93.07976, 12.20003 ], [ 93.07998, 12.19966 ], [ 93.08006, 12.19922 ], [ 93.08007, 12.19898 ], [ 93.07991, 12.1988 ], [ 93.07991, 12.19833 ], [ 93.08028, 12.19839 ], [ 93.08061, 12.19839 ], [ 93.08096, 12.19827 ], [ 93.08121, 12.19848 ], [ 93.0815, 12.19845 ], [ 93.08173, 12.1983 ], [ 93.08204, 12.19785 ], [ 93.08249, 12.1971 ], [ 93.08278, 12.19651 ], [ 93.08333, 12.19559 ], [ 93.08378, 12.195 ], [ 93.08412, 12.19526 ], [ 93.08483, 12.19532 ], [ 93.08517, 12.19526 ], [ 93.08537, 12.19515 ], [ 93.08524, 12.19476 ], [ 93.08555, 12.19414 ], [ 93.08564, 12.19348 ], [ 93.08583, 12.19295 ], [ 93.08605, 12.19292 ], [ 93.08697, 12.19291 ], [ 93.08752, 12.19259 ], [ 93.08768, 12.19238 ], [ 93.08757, 12.19221 ], [ 93.08702, 12.19241 ], [ 93.08649, 12.19241 ], [ 93.08609, 12.19229 ], [ 93.08589, 12.19214 ], [ 93.08574, 12.19179 ], [ 93.08549, 12.19158 ], [ 93.08551, 12.19126 ], [ 93.08566, 12.19101 ], [ 93.08531, 12.19054 ], [ 93.08543, 12.19021 ], [ 93.08574, 12.18979 ], [ 93.08596, 12.18927 ], [ 93.08599, 12.18856 ], [ 93.08574, 12.18781 ], [ 93.08573, 12.18687 ], [ 93.08605, 12.18642 ], [ 93.08636, 12.18615 ], [ 93.0866, 12.18579 ], [ 93.08701, 12.18546 ], [ 93.0874, 12.1847 ], [ 93.08768, 12.18445 ], [ 93.08821, 12.18365 ], [ 93.08821, 12.18305 ], [ 93.08806, 12.1825 ], [ 93.08773, 12.18193 ], [ 93.08701, 12.1816 ], [ 93.0868, 12.18132 ], [ 93.08689, 12.18105 ], [ 93.08732, 12.1808 ], [ 93.08776, 12.18065 ], [ 93.08852, 12.18057 ], [ 93.08889, 12.18042 ], [ 93.08944, 12.1805 ], [ 93.08962, 12.18048 ], [ 93.08941, 12.18011 ], [ 93.08927, 12.17913 ], [ 93.08918, 12.1781 ], [ 93.08927, 12.17774 ], [ 93.08964, 12.17755 ], [ 93.08997, 12.17725 ], [ 93.09021, 12.17678 ], [ 93.09021, 12.17625 ], [ 93.09024, 12.1757 ], [ 93.08972, 12.17472 ], [ 93.0894, 12.1743 ], [ 93.08942, 12.17296 ], [ 93.08931, 12.17193 ], [ 93.08922, 12.17079 ], [ 93.08898, 12.16947 ], [ 93.08819, 12.16694 ], [ 93.0876, 12.16485 ], [ 93.08756, 12.16439 ], [ 93.08722, 12.16394 ], [ 93.08674, 12.16376 ], [ 93.08635, 12.16343 ], [ 93.08595, 12.16294 ], [ 93.08576, 12.16174 ], [ 93.08528, 12.16104 ], [ 93.08506, 12.16066 ], [ 93.08518, 12.15984 ], [ 93.0849, 12.15935 ], [ 93.08463, 12.15899 ], [ 93.08456, 12.15834 ], [ 93.08461, 12.15762 ], [ 93.08494, 12.15745 ], [ 93.08515, 12.15728 ], [ 93.08518, 12.157 ], [ 93.08493, 12.15642 ], [ 93.08466, 12.15588 ], [ 93.0846, 12.1556 ], [ 93.08476, 12.15507 ], [ 93.08498, 12.15476 ], [ 93.08523, 12.15418 ], [ 93.08562, 12.1538 ], [ 93.08612, 12.15354 ], [ 93.08649, 12.15266 ], [ 93.08635, 12.15236 ], [ 93.08593, 12.15195 ], [ 93.08598, 12.15126 ], [ 93.08691, 12.15152 ], [ 93.08778, 12.15189 ], [ 93.08863, 12.15221 ], [ 93.09039, 12.15149 ], [ 93.09082, 12.15137 ], [ 93.09108, 12.1505 ], [ 93.09143, 12.14968 ], [ 93.09272, 12.14917 ], [ 93.09335, 12.14871 ], [ 93.0939, 12.14838 ], [ 93.09427, 12.14802 ], [ 93.09427, 12.14755 ], [ 93.09398, 12.14709 ], [ 93.09418, 12.14614 ], [ 93.09462, 12.14569 ], [ 93.09456, 12.14521 ], [ 93.09447, 12.14361 ], [ 93.09471, 12.1426 ], [ 93.09476, 12.14161 ], [ 93.09413, 12.14133 ], [ 93.09407, 12.14057 ], [ 93.09373, 12.13953 ], [ 93.0928, 12.13694 ], [ 93.09217, 12.13587 ], [ 93.09101, 12.13462 ], [ 93.08995, 12.1336 ], [ 93.08908, 12.13253 ], [ 93.08836, 12.13132 ], [ 93.08796, 12.13006 ], [ 93.08755, 12.12935 ], [ 93.08781, 12.12862 ], [ 93.08801, 12.12837 ], [ 93.08925, 12.12753 ], [ 93.08968, 12.12683 ], [ 93.08968, 12.12497 ], [ 93.08893, 12.12437 ], [ 93.08803, 12.12384 ], [ 93.088, 12.12344 ], [ 93.08832, 12.12324 ], [ 93.08928, 12.12353 ], [ 93.09061, 12.12361 ], [ 93.09182, 12.12308 ], [ 93.09275, 12.12237 ], [ 93.09296, 12.12166 ], [ 93.09293, 12.121 ], [ 93.09246, 12.1199 ], [ 93.09217, 12.11902 ], [ 93.09223, 12.11805 ], [ 93.09206, 12.11734 ], [ 93.09267, 12.11663 ], [ 93.09267, 12.11632 ], [ 93.0918, 12.11629 ], [ 93.09095, 12.11614 ], [ 93.09017, 12.11555 ], [ 93.08962, 12.11478 ], [ 93.09017, 12.11407 ], [ 93.09055, 12.11348 ], [ 93.09162, 12.11302 ], [ 93.09238, 12.11277 ], [ 93.09325, 12.11203 ], [ 93.09284, 12.11138 ], [ 93.09255, 12.11067 ], [ 93.09206, 12.10851 ], [ 93.09212, 12.10757 ], [ 93.09186, 12.10674 ], [ 93.09165, 12.10589 ], [ 93.0918, 12.10524 ], [ 93.09148, 12.1037 ], [ 93.09101, 12.10248 ], [ 93.09031, 12.10015 ], [ 93.09005, 12.09856 ], [ 93.08906, 12.09716 ], [ 93.08728, 12.09576 ], [ 93.08528, 12.09451 ], [ 93.08536, 12.094 ], [ 93.08571, 12.09338 ], [ 93.0856, 12.09272 ], [ 93.08583, 12.09207 ], [ 93.08615, 12.09184 ], [ 93.08618, 12.09087 ], [ 93.08548, 12.0901 ], [ 93.0851, 12.08936 ] ] ], [ [ [ 92.75177, 11.94649 ], [ 92.75138, 11.94654 ], [ 92.75118, 11.9465 ], [ 92.75092, 11.94641 ], [ 92.75061, 11.94643 ], [ 92.75038, 11.94641 ], [ 92.75, 11.94629 ], [ 92.74944, 11.94597 ], [ 92.74915, 11.94574 ], [ 92.74856, 11.94567 ], [ 92.74794, 11.94549 ], [ 92.74752, 11.94545 ], [ 92.74668, 11.94517 ], [ 92.74592, 11.94518 ], [ 92.74558, 11.94529 ], [ 92.74491, 11.94604 ], [ 92.74448, 11.94642 ], [ 92.74412, 11.94663 ], [ 92.74353, 11.9468 ], [ 92.74316, 11.94733 ], [ 92.74273, 11.94806 ], [ 92.74265, 11.94846 ], [ 92.74264, 11.94873 ], [ 92.74271, 11.94895 ], [ 92.74286, 11.94905 ], [ 92.74324, 11.94888 ], [ 92.74352, 11.94882 ], [ 92.74369, 11.94896 ], [ 92.74369, 11.9492 ], [ 92.74364, 11.94952 ], [ 92.74352, 11.94975 ], [ 92.74325, 11.95011 ], [ 92.74309, 11.95011 ], [ 92.743, 11.94977 ], [ 92.74286, 11.94978 ], [ 92.74259, 11.94985 ], [ 92.74215, 11.95041 ], [ 92.74214, 11.95045 ], [ 92.74188, 11.95065 ], [ 92.74175, 11.95081 ], [ 92.74178, 11.95108 ], [ 92.74207, 11.95117 ], [ 92.74227, 11.95129 ], [ 92.74222, 11.95164 ], [ 92.74215, 11.9519 ], [ 92.74202, 11.95218 ], [ 92.74157, 11.95287 ], [ 92.74142, 11.95315 ], [ 92.74126, 11.95325 ], [ 92.74101, 11.95325 ], [ 92.74084, 11.95307 ], [ 92.74069, 11.95232 ], [ 92.74064, 11.95196 ], [ 92.74042, 11.95179 ], [ 92.7401, 11.95183 ], [ 92.73975, 11.95201 ], [ 92.73915, 11.95224 ], [ 92.73871, 11.95209 ], [ 92.73829, 11.95184 ], [ 92.73783, 11.95153 ], [ 92.73747, 11.95124 ], [ 92.73713, 11.95113 ], [ 92.73681, 11.95117 ], [ 92.73658, 11.95133 ], [ 92.73639, 11.95169 ], [ 92.73627, 11.95221 ], [ 92.73627, 11.95269 ], [ 92.73635, 11.95317 ], [ 92.73661, 11.95385 ], [ 92.73741, 11.95539 ], [ 92.73753, 11.95623 ], [ 92.73773, 11.95701 ], [ 92.73803, 11.958 ], [ 92.73827, 11.95853 ], [ 92.73849, 11.95887 ], [ 92.73863, 11.95902 ], [ 92.73884, 11.95902 ], [ 92.73929, 11.95862 ], [ 92.73969, 11.95855 ], [ 92.73992, 11.95871 ], [ 92.74024, 11.95904 ], [ 92.74066, 11.95934 ], [ 92.74142, 11.95968 ], [ 92.74157, 11.95992 ], [ 92.74277, 11.96116 ], [ 92.74321, 11.96156 ], [ 92.74365, 11.96181 ], [ 92.74415, 11.96204 ], [ 92.74428, 11.96206 ], [ 92.74446, 11.96204 ], [ 92.74453, 11.96183 ], [ 92.74435, 11.96154 ], [ 92.74425, 11.96122 ], [ 92.74427, 11.96086 ], [ 92.74435, 11.96066 ], [ 92.74527, 11.96039 ], [ 92.74563, 11.96037 ], [ 92.74611, 11.96038 ], [ 92.74657, 11.96048 ], [ 92.74784, 11.96112 ], [ 92.74825, 11.96144 ], [ 92.74876, 11.96174 ], [ 92.74904, 11.96203 ], [ 92.74924, 11.96232 ], [ 92.74965, 11.96263 ], [ 92.75097, 11.96335 ], [ 92.75137, 11.96353 ], [ 92.75177, 11.96366 ], [ 92.75203, 11.96383 ], [ 92.75219, 11.96406 ], [ 92.75228, 11.9644 ], [ 92.75241, 11.9647 ], [ 92.7524, 11.96498 ], [ 92.75271, 11.96518 ], [ 92.75291, 11.96534 ], [ 92.75299, 11.96551 ], [ 92.75285, 11.96617 ], [ 92.75291, 11.96635 ], [ 92.75313, 11.96651 ], [ 92.75369, 11.96676 ], [ 92.75393, 11.96673 ], [ 92.75423, 11.96649 ], [ 92.75458, 11.96636 ], [ 92.75578, 11.96643 ], [ 92.75696, 11.96641 ], [ 92.75743, 11.96629 ], [ 92.75798, 11.96611 ], [ 92.75859, 11.96603 ], [ 92.75967, 11.96584 ], [ 92.76006, 11.96587 ], [ 92.76033, 11.96599 ], [ 92.76056, 11.96617 ], [ 92.7608, 11.96625 ], [ 92.76159, 11.96626 ], [ 92.76241, 11.96607 ], [ 92.76312, 11.96555 ], [ 92.76357, 11.96529 ], [ 92.7639, 11.96515 ], [ 92.76423, 11.96515 ], [ 92.76457, 11.9652 ], [ 92.76484, 11.96532 ], [ 92.76517, 11.96536 ], [ 92.76543, 11.96536 ], [ 92.7656, 11.96528 ], [ 92.76568, 11.96513 ], [ 92.7658, 11.96429 ], [ 92.76576, 11.96378 ], [ 92.7654, 11.96259 ], [ 92.76535, 11.96168 ], [ 92.76535, 11.96099 ], [ 92.76544, 11.96029 ], [ 92.7659, 11.95894 ], [ 92.76617, 11.95801 ], [ 92.76644, 11.9572 ], [ 92.76674, 11.95664 ], [ 92.76679, 11.95639 ], [ 92.76676, 11.95555 ], [ 92.76685, 11.95532 ], [ 92.76645, 11.95425 ], [ 92.76616, 11.95367 ], [ 92.76594, 11.95309 ], [ 92.76569, 11.95284 ], [ 92.76545, 11.95268 ], [ 92.76481, 11.9525 ], [ 92.76426, 11.95206 ], [ 92.76388, 11.95191 ], [ 92.76318, 11.95151 ], [ 92.76267, 11.95102 ], [ 92.76198, 11.95029 ], [ 92.76172, 11.94983 ], [ 92.76143, 11.94951 ], [ 92.76131, 11.9493 ], [ 92.76108, 11.94922 ], [ 92.76037, 11.94922 ], [ 92.76019, 11.94908 ], [ 92.75995, 11.94895 ], [ 92.75958, 11.94895 ], [ 92.75939, 11.9489 ], [ 92.75886, 11.94888 ], [ 92.75861, 11.949 ], [ 92.75826, 11.94934 ], [ 92.75786, 11.94939 ], [ 92.75738, 11.94964 ], [ 92.7571, 11.94971 ], [ 92.75686, 11.94972 ], [ 92.75657, 11.94958 ], [ 92.75639, 11.94935 ], [ 92.75567, 11.94883 ], [ 92.75497, 11.94828 ], [ 92.75461, 11.94789 ], [ 92.75434, 11.94771 ], [ 92.75403, 11.94761 ], [ 92.75363, 11.94744 ], [ 92.75309, 11.94714 ], [ 92.75268, 11.94679 ], [ 92.75242, 11.94671 ], [ 92.75197, 11.94666 ], [ 92.7519, 11.94656 ], [ 92.75177, 11.94649 ] ] ], [ [ [ 92.73389, 11.97827 ], [ 92.73377, 11.97868 ], [ 92.73373, 11.97902 ], [ 92.73378, 11.97935 ], [ 92.73385, 11.97948 ], [ 92.73411, 11.97974 ], [ 92.73408, 11.97987 ], [ 92.73391, 11.97989 ], [ 92.73387, 11.97987 ], [ 92.73366, 11.9799 ], [ 92.73365, 11.97998 ], [ 92.73387, 11.98034 ], [ 92.73398, 11.98042 ], [ 92.73433, 11.98055 ], [ 92.73444, 11.98069 ], [ 92.73446, 11.98084 ], [ 92.73421, 11.98126 ], [ 92.73371, 11.98203 ], [ 92.73356, 11.98222 ], [ 92.7335, 11.98235 ], [ 92.73349, 11.98263 ], [ 92.73372, 11.98311 ], [ 92.73387, 11.98328 ], [ 92.73413, 11.98343 ], [ 92.73451, 11.9836 ], [ 92.73651, 11.98394 ], [ 92.73662, 11.984 ], [ 92.73669, 11.9841 ], [ 92.73676, 11.98427 ], [ 92.73693, 11.98501 ], [ 92.73712, 11.98537 ], [ 92.73736, 11.98572 ], [ 92.73776, 11.98619 ], [ 92.73817, 11.98683 ], [ 92.73844, 11.98745 ], [ 92.73854, 11.9879 ], [ 92.73887, 11.98828 ], [ 92.7389, 11.9885 ], [ 92.7388, 11.98865 ], [ 92.73864, 11.98876 ], [ 92.73851, 11.98898 ], [ 92.73809, 11.98943 ], [ 92.73786, 11.98978 ], [ 92.73755, 11.99011 ], [ 92.73736, 11.99036 ], [ 92.7372, 11.99062 ], [ 92.73719, 11.99076 ], [ 92.73723, 11.99105 ], [ 92.7374, 11.9913 ], [ 92.73757, 11.99179 ], [ 92.73766, 11.99216 ], [ 92.73768, 11.99241 ], [ 92.73784, 11.9927 ], [ 92.73793, 11.99297 ], [ 92.73788, 11.99312 ], [ 92.73768, 11.99336 ], [ 92.73752, 11.99351 ], [ 92.73744, 11.99407 ], [ 92.73756, 11.99455 ], [ 92.73804, 11.99544 ], [ 92.73839, 11.996 ], [ 92.73857, 11.9964 ], [ 92.73882, 11.99668 ], [ 92.73927, 11.9969 ], [ 92.73985, 11.99703 ], [ 92.74078, 11.9971 ], [ 92.74107, 11.9971 ], [ 92.74166, 11.99691 ], [ 92.7422, 11.99667 ], [ 92.74249, 11.9963 ], [ 92.7426, 11.99605 ], [ 92.74267, 11.99578 ], [ 92.74271, 11.99549 ], [ 92.74258, 11.9943 ], [ 92.74263, 11.99365 ], [ 92.74252, 11.99227 ], [ 92.74279, 11.99156 ], [ 92.74297, 11.99117 ], [ 92.74299, 11.99068 ], [ 92.74277, 11.98976 ], [ 92.74266, 11.98873 ], [ 92.74266, 11.98809 ], [ 92.74269, 11.98779 ], [ 92.74277, 11.98767 ], [ 92.74288, 11.98759 ], [ 92.74294, 11.9876 ], [ 92.74307, 11.9877 ], [ 92.74318, 11.98786 ], [ 92.74354, 11.98824 ], [ 92.74383, 11.98837 ], [ 92.74402, 11.98837 ], [ 92.7445, 11.98825 ], [ 92.74504, 11.98804 ], [ 92.74517, 11.98804 ], [ 92.74521, 11.98812 ], [ 92.7452, 11.98836 ], [ 92.74514, 11.98849 ], [ 92.7451, 11.9887 ], [ 92.74516, 11.98886 ], [ 92.74543, 11.98904 ], [ 92.74578, 11.98917 ], [ 92.74599, 11.98937 ], [ 92.74697, 11.99009 ], [ 92.74791, 11.99086 ], [ 92.74892, 11.99113 ], [ 92.7493, 11.9913 ], [ 92.74983, 11.99177 ], [ 92.75019, 11.99199 ], [ 92.75056, 11.99211 ], [ 92.75088, 11.99213 ], [ 92.7511, 11.9921 ], [ 92.75127, 11.99205 ], [ 92.75158, 11.99162 ], [ 92.75196, 11.99128 ], [ 92.75222, 11.99109 ], [ 92.75245, 11.99099 ], [ 92.75282, 11.99087 ], [ 92.75329, 11.9908 ], [ 92.75357, 11.99067 ], [ 92.75383, 11.99049 ], [ 92.75425, 11.98979 ], [ 92.75453, 11.98946 ], [ 92.75487, 11.98923 ], [ 92.75486, 11.98891 ], [ 92.75482, 11.9886 ], [ 92.75489, 11.98839 ], [ 92.75513, 11.98829 ], [ 92.7553, 11.98819 ], [ 92.75548, 11.98781 ], [ 92.7556, 11.98726 ], [ 92.75561, 11.98688 ], [ 92.75549, 11.9864 ], [ 92.75478, 11.98475 ], [ 92.75477, 11.9842 ], [ 92.75485, 11.98344 ], [ 92.75484, 11.98299 ], [ 92.7546, 11.98254 ], [ 92.75454, 11.98216 ], [ 92.75432, 11.98196 ], [ 92.75407, 11.98188 ], [ 92.7533, 11.98179 ], [ 92.75302, 11.98172 ], [ 92.75281, 11.9816 ], [ 92.75252, 11.98129 ], [ 92.75232, 11.98097 ], [ 92.7521, 11.98047 ], [ 92.75175, 11.98012 ], [ 92.7516, 11.97966 ], [ 92.7516, 11.97946 ], [ 92.75146, 11.97929 ], [ 92.75097, 11.97901 ], [ 92.75068, 11.97896 ], [ 92.75008, 11.97894 ], [ 92.74989, 11.97885 ], [ 92.74978, 11.97871 ], [ 92.74952, 11.97858 ], [ 92.74909, 11.9785 ], [ 92.74878, 11.97837 ], [ 92.74835, 11.97814 ], [ 92.74807, 11.97804 ], [ 92.74739, 11.97806 ], [ 92.74714, 11.97819 ], [ 92.74668, 11.97858 ], [ 92.74592, 11.97934 ], [ 92.74582, 11.97968 ], [ 92.74585, 11.97997 ], [ 92.74608, 11.98021 ], [ 92.74649, 11.98026 ], [ 92.74671, 11.98032 ], [ 92.74685, 11.98043 ], [ 92.74696, 11.98064 ], [ 92.74697, 11.98106 ], [ 92.74661, 11.98251 ], [ 92.74638, 11.98283 ], [ 92.74605, 11.98314 ], [ 92.74527, 11.9835 ], [ 92.74504, 11.98355 ], [ 92.74492, 11.98354 ], [ 92.74488, 11.98342 ], [ 92.74495, 11.98329 ], [ 92.74516, 11.98316 ], [ 92.74508, 11.98303 ], [ 92.74492, 11.98298 ], [ 92.7446, 11.98293 ], [ 92.74442, 11.98285 ], [ 92.7441, 11.98262 ], [ 92.74352, 11.98224 ], [ 92.74292, 11.98172 ], [ 92.74275, 11.98146 ], [ 92.74258, 11.98128 ], [ 92.7423, 11.98105 ], [ 92.74211, 11.98102 ], [ 92.74197, 11.98093 ], [ 92.74186, 11.98093 ], [ 92.74184, 11.98115 ], [ 92.74177, 11.98126 ], [ 92.74168, 11.98128 ], [ 92.74154, 11.98121 ], [ 92.74144, 11.98111 ], [ 92.74118, 11.98098 ], [ 92.74104, 11.98096 ], [ 92.74093, 11.98089 ], [ 92.74091, 11.98079 ], [ 92.74107, 11.98062 ], [ 92.74124, 11.98054 ], [ 92.74116, 11.98035 ], [ 92.74065, 11.9802 ], [ 92.73987, 11.97979 ], [ 92.73951, 11.97978 ], [ 92.7386, 11.97986 ], [ 92.73833, 11.97986 ], [ 92.73821, 11.9798 ], [ 92.73806, 11.97961 ], [ 92.73762, 11.97888 ], [ 92.73759, 11.97871 ], [ 92.73769, 11.97834 ], [ 92.73775, 11.97821 ], [ 92.73775, 11.97805 ], [ 92.73769, 11.97794 ], [ 92.73753, 11.97779 ], [ 92.7374, 11.97757 ], [ 92.73729, 11.97752 ], [ 92.737, 11.97757 ], [ 92.73686, 11.97757 ], [ 92.73669, 11.97753 ], [ 92.73661, 11.97743 ], [ 92.7366, 11.97729 ], [ 92.73656, 11.97719 ], [ 92.73639, 11.97714 ], [ 92.73615, 11.97714 ], [ 92.73589, 11.97707 ], [ 92.7357, 11.97697 ], [ 92.73536, 11.97699 ], [ 92.73498, 11.9771 ], [ 92.73462, 11.97738 ], [ 92.73423, 11.97781 ], [ 92.73389, 11.97827 ] ] ], [ [ [ 92.98309, 11.94594 ], [ 92.9828, 11.94596 ], [ 92.9824, 11.94609 ], [ 92.98207, 11.94612 ], [ 92.98176, 11.94605 ], [ 92.9814, 11.94606 ], [ 92.98117, 11.94615 ], [ 92.98109, 11.94622 ], [ 92.98075, 11.94634 ], [ 92.98063, 11.94658 ], [ 92.98037, 11.94686 ], [ 92.98022, 11.94691 ], [ 92.98017, 11.94699 ], [ 92.98016, 11.94709 ], [ 92.9801, 11.94722 ], [ 92.97991, 11.94732 ], [ 92.97924, 11.9475 ], [ 92.97876, 11.94755 ], [ 92.97852, 11.94761 ], [ 92.97809, 11.94779 ], [ 92.97655, 11.94796 ], [ 92.9762, 11.94802 ], [ 92.97565, 11.94821 ], [ 92.97543, 11.94826 ], [ 92.97536, 11.9483 ], [ 92.97529, 11.94843 ], [ 92.97521, 11.94849 ], [ 92.97499, 11.94855 ], [ 92.97416, 11.94898 ], [ 92.97389, 11.94905 ], [ 92.97359, 11.94923 ], [ 92.97347, 11.94942 ], [ 92.97346, 11.94954 ], [ 92.97341, 11.94964 ], [ 92.97342, 11.94977 ], [ 92.97335, 11.94993 ], [ 92.97325, 11.94999 ], [ 92.97319, 11.95014 ], [ 92.97302, 11.95022 ], [ 92.97296, 11.95028 ], [ 92.97296, 11.95037 ], [ 92.97292, 11.95044 ], [ 92.97276, 11.95057 ], [ 92.97247, 11.95107 ], [ 92.97227, 11.95123 ], [ 92.9722, 11.95126 ], [ 92.97214, 11.95139 ], [ 92.97214, 11.95152 ], [ 92.97211, 11.9516 ], [ 92.97196, 11.95171 ], [ 92.97195, 11.95177 ], [ 92.97197, 11.95184 ], [ 92.97174, 11.9521 ], [ 92.97169, 11.95224 ], [ 92.97161, 11.95228 ], [ 92.9716, 11.95233 ], [ 92.97164, 11.95243 ], [ 92.9716, 11.95265 ], [ 92.97147, 11.95275 ], [ 92.97145, 11.95291 ], [ 92.97134, 11.95308 ], [ 92.97126, 11.95314 ], [ 92.97118, 11.95314 ], [ 92.97116, 11.9532 ], [ 92.97119, 11.95328 ], [ 92.97102, 11.95341 ], [ 92.97015, 11.95443 ], [ 92.96998, 11.95484 ], [ 92.9698, 11.9551 ], [ 92.96945, 11.95543 ], [ 92.96895, 11.95618 ], [ 92.96884, 11.95649 ], [ 92.96863, 11.95666 ], [ 92.96834, 11.95702 ], [ 92.96829, 11.95763 ], [ 92.96817, 11.95846 ], [ 92.96801, 11.959 ], [ 92.96738, 11.96014 ], [ 92.96685, 11.96162 ], [ 92.96684, 11.96299 ], [ 92.96637, 11.96434 ], [ 92.96615, 11.96626 ], [ 92.96572, 11.96765 ], [ 92.96546, 11.96838 ], [ 92.9652, 11.9688 ], [ 92.9649, 11.96914 ], [ 92.9645, 11.96952 ], [ 92.96418, 11.96967 ], [ 92.96404, 11.96984 ], [ 92.96386, 11.97044 ], [ 92.96352, 11.97116 ], [ 92.96308, 11.97269 ], [ 92.96286, 11.97335 ], [ 92.96266, 11.97419 ], [ 92.9626, 11.97487 ], [ 92.96232, 11.97581 ], [ 92.96199, 11.97656 ], [ 92.96166, 11.97741 ], [ 92.96144, 11.97768 ], [ 92.96147, 11.9779 ], [ 92.96157, 11.97809 ], [ 92.9614, 11.97863 ], [ 92.96106, 11.97933 ], [ 92.96002, 11.98115 ], [ 92.95938, 11.98171 ], [ 92.95802, 11.98255 ], [ 92.95525, 11.98351 ], [ 92.95354, 11.98394 ], [ 92.95071, 11.98455 ], [ 92.94976, 11.98486 ], [ 92.94861, 11.98529 ], [ 92.94747, 11.98547 ], [ 92.94621, 11.98556 ], [ 92.94527, 11.98555 ], [ 92.94503, 11.98557 ], [ 92.94388, 11.98543 ], [ 92.943, 11.98529 ], [ 92.94282, 11.9853 ], [ 92.94211, 11.98556 ], [ 92.94144, 11.98591 ], [ 92.94093, 11.98639 ], [ 92.94015, 11.98663 ], [ 92.93967, 11.98658 ], [ 92.93905, 11.98637 ], [ 92.93831, 11.98585 ], [ 92.93752, 11.98555 ], [ 92.937, 11.98542 ], [ 92.93577, 11.98553 ], [ 92.93517, 11.98549 ], [ 92.93486, 11.98529 ], [ 92.93444, 11.98512 ], [ 92.93405, 11.98517 ], [ 92.93382, 11.98539 ], [ 92.93396, 11.98562 ], [ 92.93397, 11.9858 ], [ 92.93359, 11.98629 ], [ 92.93312, 11.98681 ], [ 92.93283, 11.9874 ], [ 92.93262, 11.9879 ], [ 92.9323, 11.98837 ], [ 92.93253, 11.98888 ], [ 92.932247, 11.9893607 ], [ 92.9320495, 11.9902916 ], [ 92.9313779, 11.9915777 ], [ 92.9306698, 11.9926818 ], [ 92.9299295, 11.9934768 ], [ 92.9272945, 11.9948484 ], [ 92.9265499, 11.9951548 ], [ 92.9259513, 11.9964347 ], [ 92.9256852, 11.9970969 ], [ 92.9251531, 11.9976914 ], [ 92.9257646, 11.9980162 ], [ 92.9276336, 11.9985535 ], [ 92.9282987, 11.9989869 ], [ 92.9288137, 12.0001077 ], [ 92.9288566, 12.0010024 ], [ 92.9293287, 12.0021137 ], [ 92.9302299, 12.0040672 ], [ 92.9308951, 12.005135 ], [ 92.9315174, 12.0055437 ], [ 92.93365, 12.0059 ], [ 92.93493, 12.00612 ], [ 92.93635, 12.00642 ], [ 92.9378538, 12.0063387 ], [ 92.9392636, 12.0063109 ], [ 92.940506, 12.0064615 ], [ 92.9416025, 12.0069069 ], [ 92.9427505, 12.0074017 ], [ 92.94389, 12.00809 ], [ 92.9449907, 12.0088242 ], [ 92.9465893, 12.0094528 ], [ 92.9470957, 12.009605 ], [ 92.9477437, 12.0098615 ], [ 92.94802, 12.01021 ], [ 92.949193, 12.0111122 ], [ 92.95035, 12.01246 ], [ 92.9514065, 12.0139578 ], [ 92.9521361, 12.0151751 ], [ 92.9518893, 12.0155634 ], [ 92.952061, 12.0166626 ], [ 92.9523957, 12.0167009 ], [ 92.9529751, 12.0176989 ], [ 92.952782, 12.0180116 ], [ 92.95423, 12.0203645 ], [ 92.9554212, 12.0215453 ], [ 92.9561015, 12.0226267 ], [ 92.9566872, 12.02323 ], [ 92.9572022, 12.0231723 ], [ 92.9576893, 12.0240087 ], [ 92.9577772, 12.0244081 ], [ 92.9587901, 12.0255444 ], [ 92.9589789, 12.0263802 ], [ 92.9597664, 12.026982 ], [ 92.9608114, 12.0284982 ], [ 92.9614281, 12.0301262 ], [ 92.962144, 12.0310069 ], [ 92.9625292, 12.0330515 ], [ 92.9628602, 12.0350625 ], [ 92.9629144, 12.0367695 ], [ 92.9633713, 12.0372684 ], [ 92.9635764, 12.0379821 ], [ 92.9634726, 12.0404337 ], [ 92.9629098, 12.0427271 ], [ 92.9629083, 12.0447275 ], [ 92.9630347, 12.045116 ], [ 92.9636336, 12.0457609 ], [ 92.9642806, 12.0466464 ], [ 92.9645236, 12.0474459 ], [ 92.9645694, 12.0482768 ], [ 92.964744, 12.0488242 ], [ 92.9648109, 12.049173 ], [ 92.9647476, 12.049269 ], [ 92.9647531, 12.0493956 ], [ 92.9648775, 12.0492675 ], [ 92.9651113, 12.0488781 ], [ 92.9653368, 12.0488678 ], [ 92.9654489, 12.0487812 ], [ 92.9656647, 12.0486804 ], [ 92.9657744, 12.0485395 ], [ 92.9659693, 12.0478984 ], [ 92.9659877, 12.0472988 ], [ 92.96576, 12.04575 ], [ 92.9650594, 12.0444369 ], [ 92.9647657, 12.0433243 ], [ 92.9649625, 12.0421433 ], [ 92.9654905, 12.0408902 ], [ 92.9655778, 12.0399508 ], [ 92.9664252, 12.0390107 ], [ 92.966605, 12.0380711 ], [ 92.9669826, 12.0372715 ], [ 92.9672294, 12.0368324 ], [ 92.9674924, 12.036865 ], [ 92.9680298, 12.0358844 ], [ 92.9687207, 12.0340733 ], [ 92.9696691, 12.0317842 ], [ 92.9699674, 12.0319122 ], [ 92.9702528, 12.0326583 ], [ 92.9707399, 12.0324054 ], [ 92.9705468, 12.0328986 ], [ 92.9705575, 12.0333078 ], [ 92.97087, 12.03359 ], [ 92.97101, 12.03413 ], [ 92.97195, 12.03497 ], [ 92.9728599, 12.0346383 ], [ 92.97416, 12.03552 ], [ 92.97499, 12.03626 ], [ 92.97527, 12.03725 ], [ 92.9750765, 12.0382951 ], [ 92.9742053, 12.0394672 ], [ 92.9745057, 12.0410726 ], [ 92.9744842, 12.0418275 ], [ 92.9751087, 12.0420311 ], [ 92.9760936, 12.0424754 ], [ 92.9773724, 12.0421879 ], [ 92.9787865, 12.0412929 ], [ 92.9789818, 12.0409262 ], [ 92.9807113, 12.0417834 ], [ 92.9814647, 12.042158 ], [ 92.9819106, 12.0423168 ], [ 92.982266, 12.042356 ], [ 92.9824828, 12.0423919 ], [ 92.9826813, 12.0423189 ], [ 92.9829972, 12.0419691 ], [ 92.9830407, 12.0418849 ], [ 92.9832939, 12.0417113 ], [ 92.9835412, 12.041654 ], [ 92.9837116, 12.0414232 ], [ 92.9839866, 12.0409449 ], [ 92.9842765, 12.0404088 ], [ 92.984448, 12.0399726 ], [ 92.9846823, 12.0396435 ], [ 92.9853353, 12.0387092 ], [ 92.9858717, 12.0386567 ], [ 92.9863653, 12.0383734 ], [ 92.9867193, 12.0377544 ], [ 92.9873416, 12.0375235 ], [ 92.988157, 12.0368625 ], [ 92.9893801, 12.0362329 ], [ 92.989777, 12.0362119 ], [ 92.9901955, 12.0359496 ], [ 92.9907641, 12.0358027 ], [ 92.9921052, 12.0359706 ], [ 92.9933175, 12.0356453 ], [ 92.994487, 12.0352885 ], [ 92.9959783, 12.0344386 ], [ 92.9980907, 12.0332722 ], [ 92.9988785, 12.0326734 ], [ 92.9993561, 12.0323759 ], [ 92.9998665, 12.0319675 ], [ 93.0009084, 12.0311159 ], [ 93.0017339, 12.0303396 ], [ 93.0024365, 12.0295184 ], [ 93.0032476, 12.0286833 ], [ 93.0037057, 12.0282693 ], [ 93.0040322, 12.0278098 ], [ 93.0043871, 12.0271061 ], [ 93.0047437, 12.0263083 ], [ 93.0049369, 12.0258761 ], [ 93.0055055, 12.0249317 ], [ 93.0064565, 12.023312 ], [ 93.0070786, 12.0219067 ], [ 93.0075331, 12.0210658 ], [ 93.0080677, 12.0203408 ], [ 93.0087778, 12.0195614 ], [ 93.0089514, 12.0195266 ], [ 93.0090707, 12.0194068 ], [ 93.0093322, 12.0185891 ], [ 93.0096016, 12.0177434 ], [ 93.0098556, 12.0167608 ], [ 93.0100055, 12.015771 ], [ 93.0100754, 12.0152473 ], [ 93.010102, 12.0147061 ], [ 93.0100779, 12.0140962 ], [ 93.0101282, 12.0135316 ], [ 93.0100205, 12.0129823 ], [ 93.00989, 12.0123324 ], [ 93.0095421, 12.0112397 ], [ 93.0092113, 12.010489 ], [ 93.0084013, 12.0088566 ], [ 93.0080609, 12.0079555 ], [ 93.007829, 12.007305 ], [ 93.0075361, 12.0061388 ], [ 93.0074544, 12.0056789 ], [ 93.0072847, 12.0051168 ], [ 93.0070918, 12.0043241 ], [ 93.0069738, 12.0036303 ], [ 93.0070301, 12.0034649 ], [ 93.0071133, 12.0021162 ], [ 93.0070849, 12.0014438 ], [ 93.0071958, 12.0007817 ], [ 93.0079069, 11.9992629 ], [ 93.0084355, 11.998452 ], [ 93.0098078, 11.9950658 ], [ 93.01176, 11.99108 ], [ 93.0137361, 11.9861671 ], [ 93.01485, 11.98425 ], [ 93.01703, 11.97975 ], [ 93.02094, 11.97287 ], [ 93.02363, 11.96833 ], [ 93.02506, 11.96611 ], [ 93.02554, 11.96435 ], [ 93.02587, 11.96256 ], [ 93.02564, 11.96087 ], [ 93.02601, 11.95903 ], [ 93.02718, 11.95607 ], [ 93.02795, 11.95302 ], [ 93.02832, 11.95183 ], [ 93.02906, 11.95077 ], [ 93.03, 11.94954 ], [ 93.0305, 11.94865 ], [ 93.03109, 11.9483 ], [ 93.03171, 11.94831 ], [ 93.03294, 11.94892 ], [ 93.03389, 11.94921 ], [ 93.03487, 11.94919 ], [ 93.03564, 11.94913 ], [ 93.03627, 11.94863 ], [ 93.03685, 11.94753 ], [ 93.03702, 11.94633 ], [ 93.03741, 11.94464 ], [ 93.03803, 11.94338 ], [ 93.03881, 11.94272 ], [ 93.04103, 11.93747 ], [ 93.04175, 11.93345 ], [ 93.0426, 11.93183 ], [ 93.04453, 11.926 ], [ 93.04526, 11.92408 ], [ 93.04525, 11.92272 ], [ 93.04552, 11.92144 ], [ 93.04607, 11.92059 ], [ 93.04677, 11.92034 ], [ 93.04698, 11.91967 ], [ 93.04689, 11.91786 ], [ 93.04704, 11.91568 ], [ 93.04682, 11.91418 ], [ 93.04695, 11.91316 ], [ 93.04749, 11.91287 ], [ 93.04832, 11.91286 ], [ 93.04872, 11.91213 ], [ 93.04874, 11.91102 ], [ 93.0492, 11.90897 ], [ 93.05051, 11.90674 ], [ 93.05153, 11.90526 ], [ 93.05225, 11.90465 ], [ 93.05307, 11.90459 ], [ 93.05358, 11.90385 ], [ 93.05392, 11.90216 ], [ 93.05378, 11.899 ], [ 93.0533, 11.89677 ], [ 93.05167, 11.89367 ], [ 93.05018, 11.89101 ], [ 93.04812, 11.88823 ], [ 93.04551, 11.88575 ], [ 93.04344, 11.88424 ], [ 93.04103, 11.88301 ], [ 93.03876, 11.88236 ], [ 93.03691, 11.88235 ], [ 93.03329, 11.88357 ], [ 93.03286, 11.8839 ], [ 93.03145, 11.88472 ], [ 93.02963, 11.88622 ], [ 93.02777, 11.88748 ], [ 93.02624, 11.88886 ], [ 93.02584, 11.88959 ], [ 93.02587, 11.89024 ], [ 93.0257, 11.89167 ], [ 93.02489, 11.89293 ], [ 93.02494, 11.89387 ], [ 93.02463, 11.89542 ], [ 93.02403, 11.89714 ], [ 93.02405, 11.89851 ], [ 93.02328, 11.90066 ], [ 93.02095, 11.90524 ], [ 93.01885, 11.90894 ], [ 93.01733, 11.9115 ], [ 93.01643, 11.91286 ], [ 93.01584, 11.9135 ], [ 93.01487, 11.91439 ], [ 93.01383, 11.91585 ], [ 93.01202, 11.91994 ], [ 93.01101, 11.92107 ], [ 93.01037, 11.92166 ], [ 93.01017, 11.92252 ], [ 93.00945, 11.92359 ], [ 93.00839, 11.92472 ], [ 93.00772, 11.92574 ], [ 93.00746, 11.92711 ], [ 93.00704, 11.92797 ], [ 93.00633, 11.9287 ], [ 93.00595, 11.92928 ], [ 93.00586, 11.9297 ], [ 93.00582, 11.93003 ], [ 93.00541, 11.93033 ], [ 93.00501, 11.93036 ], [ 93.00437, 11.93063 ], [ 93.0038, 11.93099 ], [ 93.00339, 11.93131 ], [ 93.00299, 11.93151 ], [ 93.00277, 11.93169 ], [ 93.00264, 11.93194 ], [ 93.00263, 11.93234 ], [ 93.00254, 11.93243 ], [ 93.00212, 11.93256 ], [ 93.0018, 11.93296 ], [ 93.00134, 11.9332 ], [ 93.00115, 11.93347 ], [ 93.00103, 11.93373 ], [ 93.00068, 11.93406 ], [ 92.99993, 11.93447 ], [ 92.99971, 11.93451 ], [ 92.99907, 11.93456 ], [ 92.99871, 11.93475 ], [ 92.99847, 11.93494 ], [ 92.99818, 11.93527 ], [ 92.99778, 11.93586 ], [ 92.99773, 11.93611 ], [ 92.99776, 11.9363 ], [ 92.99793, 11.93649 ], [ 92.99816, 11.93662 ], [ 92.9984, 11.93679 ], [ 92.99882, 11.93702 ], [ 92.99894, 11.93722 ], [ 92.99902, 11.93743 ], [ 92.99904, 11.93775 ], [ 92.99892, 11.93801 ], [ 92.9987, 11.93839 ], [ 92.99838, 11.93881 ], [ 92.99797, 11.93902 ], [ 92.99697, 11.93965 ], [ 92.99649, 11.94003 ], [ 92.99611, 11.94023 ], [ 92.99585, 11.94031 ], [ 92.99552, 11.94048 ], [ 92.99525, 11.9407 ], [ 92.99505, 11.94095 ], [ 92.99477, 11.94165 ], [ 92.9949, 11.94186 ], [ 92.99502, 11.94195 ], [ 92.99528, 11.942 ], [ 92.99543, 11.94208 ], [ 92.99545, 11.94217 ], [ 92.99539, 11.94222 ], [ 92.99528, 11.94224 ], [ 92.99519, 11.94231 ], [ 92.99519, 11.94241 ], [ 92.99535, 11.94253 ], [ 92.99567, 11.94249 ], [ 92.9958, 11.94252 ], [ 92.99583, 11.94267 ], [ 92.99582, 11.94279 ], [ 92.99599, 11.94283 ], [ 92.99626, 11.94278 ], [ 92.99656, 11.94283 ], [ 92.9966, 11.94298 ], [ 92.9966, 11.9432 ], [ 92.99652, 11.94341 ], [ 92.99654, 11.9438 ], [ 92.99664, 11.9439 ], [ 92.99681, 11.94398 ], [ 92.99685, 11.94418 ], [ 92.99694, 11.94426 ], [ 92.99714, 11.94423 ], [ 92.99762, 11.94434 ], [ 92.99786, 11.945 ], [ 92.99797, 11.94519 ], [ 92.99812, 11.94526 ], [ 92.99833, 11.94528 ], [ 92.99846, 11.94524 ], [ 92.99863, 11.94515 ], [ 92.9988, 11.94515 ], [ 92.99902, 11.94523 ], [ 92.99966, 11.94563 ], [ 93.00022, 11.94577 ], [ 93.00042, 11.94584 ], [ 93.00055, 11.94604 ], [ 93.00061, 11.94626 ], [ 93.00087, 11.94674 ], [ 93.00119, 11.94698 ], [ 93.00149, 11.94711 ], [ 93.00225, 11.9471 ], [ 93.00249, 11.94712 ], [ 93.00255, 11.94725 ], [ 93.00241, 11.94763 ], [ 93.00215, 11.948 ], [ 93.00215, 11.9483 ], [ 93.0019034, 11.9483943 ], [ 93.00211, 11.94891 ], [ 93.00176, 11.94893 ], [ 93.0014, 11.94877 ], [ 93.00102, 11.94878 ], [ 93.00078, 11.94881 ], [ 93.00065, 11.9491 ], [ 93.00064, 11.9495 ], [ 93.00057, 11.94974 ], [ 93.00045, 11.94984 ], [ 93.00023, 11.94987 ], [ 92.99992, 11.94966 ], [ 92.9998, 11.94948 ], [ 92.99975, 11.94945 ], [ 92.99965, 11.94923 ], [ 92.99921, 11.94855 ], [ 92.99877, 11.94811 ], [ 92.99847, 11.9479 ], [ 92.9983, 11.94771 ], [ 92.99768, 11.94763 ], [ 92.99708, 11.94767 ], [ 92.9967, 11.94773 ], [ 92.99648, 11.94779 ], [ 92.99624, 11.94789 ], [ 92.99583, 11.94828 ], [ 92.99572, 11.94834 ], [ 92.99565, 11.94846 ], [ 92.99537, 11.94878 ], [ 92.9947, 11.94943 ], [ 92.99422, 11.94986 ], [ 92.99355, 11.95035 ], [ 92.99289, 11.95072 ], [ 92.99218, 11.95102 ], [ 92.9918, 11.95115 ], [ 92.99043, 11.95143 ], [ 92.99016, 11.95146 ], [ 92.98994, 11.95144 ], [ 92.98956, 11.95127 ], [ 92.98943, 11.95115 ], [ 92.9893, 11.95097 ], [ 92.98925, 11.95085 ], [ 92.98923, 11.95067 ], [ 92.98917, 11.95062 ], [ 92.98874, 11.95052 ], [ 92.98842, 11.9504 ], [ 92.98812, 11.95023 ], [ 92.98785, 11.95002 ], [ 92.98776, 11.9499 ], [ 92.98759, 11.94981 ], [ 92.98752, 11.94974 ], [ 92.98751, 11.94961 ], [ 92.98764, 11.9494 ], [ 92.98762, 11.94928 ], [ 92.98739, 11.94919 ], [ 92.98732, 11.94914 ], [ 92.98717, 11.94886 ], [ 92.9871, 11.94878 ], [ 92.98703, 11.94877 ], [ 92.98694, 11.94885 ], [ 92.98677, 11.94886 ], [ 92.98672, 11.9487 ], [ 92.98656, 11.94865 ], [ 92.98643, 11.94849 ], [ 92.98629, 11.94838 ], [ 92.9863, 11.94827 ], [ 92.98637, 11.94808 ], [ 92.98637, 11.948 ], [ 92.98633, 11.94793 ], [ 92.98612, 11.94781 ], [ 92.98599, 11.94778 ], [ 92.98585, 11.94764 ], [ 92.98574, 11.94758 ], [ 92.9858, 11.94732 ], [ 92.9858, 11.94721 ], [ 92.98583, 11.94714 ], [ 92.98616, 11.94703 ], [ 92.98625, 11.94693 ], [ 92.98633, 11.94677 ], [ 92.98638, 11.9465 ], [ 92.98631, 11.94642 ], [ 92.98617, 11.94634 ], [ 92.98619, 11.94625 ], [ 92.98628, 11.94607 ], [ 92.98618, 11.94593 ], [ 92.98555, 11.94553 ], [ 92.98508, 11.94543 ], [ 92.98471, 11.94545 ], [ 92.98427, 11.9456 ], [ 92.98389, 11.94564 ], [ 92.98309, 11.94594 ] ] ], [ [ [ 93.849977, 12.2856854 ], [ 93.8515148, 12.2873174 ], [ 93.8540452, 12.2893862 ], [ 93.8551296, 12.2901935 ], [ 93.8563173, 12.2918585 ], [ 93.8605001, 12.2929181 ], [ 93.8634952, 12.2947345 ], [ 93.8672133, 12.2955922 ], [ 93.8687108, 12.2937254 ], [ 93.8718608, 12.2917071 ], [ 93.8734622, 12.2887716 ], [ 93.8746171, 12.2876432 ], [ 93.8767536, 12.2835244 ], [ 93.8762339, 12.2812675 ], [ 93.8778507, 12.2799134 ], [ 93.8768114, 12.2776565 ], [ 93.8757142, 12.2762459 ], [ 93.8765804, 12.2752867 ], [ 93.8764071, 12.2731426 ], [ 93.8760029, 12.2711677 ], [ 93.8752523, 12.2707163 ], [ 93.8728848, 12.2688543 ], [ 93.8719031, 12.2680079 ], [ 93.8705173, 12.2679515 ], [ 93.8694779, 12.2680079 ], [ 93.8688427, 12.2677258 ], [ 93.8672259, 12.266823 ], [ 93.8654358, 12.2666537 ], [ 93.8643387, 12.266428 ], [ 93.8631838, 12.2662588 ], [ 93.8619712, 12.2653559 ], [ 93.859315, 12.2653559 ], [ 93.8586798, 12.2658073 ], [ 93.856601, 12.2647917 ], [ 93.8548687, 12.2656945 ], [ 93.8542335, 12.2667666 ], [ 93.852097, 12.2667666 ], [ 93.8488633, 12.2699264 ], [ 93.8472465, 12.2720141 ], [ 93.84511, 12.2813804 ], [ 93.8447078, 12.2845363 ], [ 93.847364, 12.2859757 ], [ 93.849977, 12.2856854 ] ] ], [ [ [ 92.7630023, 12.2940721 ], [ 92.7643675, 12.293752 ], [ 92.7654051, 12.293165 ], [ 92.7654051, 12.2923647 ], [ 92.764859, 12.2911908 ], [ 92.7645314, 12.2893766 ], [ 92.764859, 12.2883628 ], [ 92.7660058, 12.2871356 ], [ 92.7674257, 12.2863885 ], [ 92.768081, 12.285268 ], [ 92.7678625, 12.2835071 ], [ 92.7673711, 12.2814795 ], [ 92.7671526, 12.2799854 ], [ 92.7676441, 12.2758766 ], [ 92.7674257, 12.2745426 ], [ 92.7672618, 12.2732619 ], [ 92.7668796, 12.2713409 ], [ 92.7660604, 12.2703804 ], [ 92.7651321, 12.2686728 ], [ 92.7647498, 12.2655778 ], [ 92.7639306, 12.2664316 ], [ 92.7629477, 12.2675522 ], [ 92.7625654, 12.2688329 ], [ 92.7613094, 12.270327 ], [ 92.7604902, 12.2701136 ], [ 92.7596711, 12.2690997 ], [ 92.758852, 12.2696333 ], [ 92.757869, 12.2718745 ], [ 92.7560669, 12.2724615 ], [ 92.7559576, 12.2735287 ], [ 92.7536094, 12.2755031 ], [ 92.7533364, 12.2771573 ], [ 92.753391, 12.2788648 ], [ 92.7541009, 12.2804123 ], [ 92.754374, 12.2819597 ], [ 92.7549747, 12.2833471 ], [ 92.7563945, 12.2838273 ], [ 92.7572683, 12.2850012 ], [ 92.7585243, 12.2862285 ], [ 92.7585243, 12.2875091 ], [ 92.7597803, 12.2895367 ], [ 92.7601626, 12.2908706 ], [ 92.7612002, 12.293165 ], [ 92.7630023, 12.2940721 ] ] ], [ [ [ 92.8124, 12.993815789473686 ], [ 92.81222, 12.99392 ], [ 92.81196, 12.99397 ], [ 92.8113, 12.99427 ], [ 92.81107, 12.9943 ], [ 92.81102, 12.99444 ], [ 92.81095, 12.99453 ], [ 92.81085, 12.99457 ], [ 92.81067, 12.99453 ], [ 92.81028, 12.99462 ], [ 92.81005, 12.99485 ], [ 92.80968, 12.99533 ], [ 92.80966, 12.99549 ], [ 92.80981, 12.9956 ], [ 92.81008, 12.99604 ], [ 92.80992, 12.99647 ], [ 92.80963, 12.99693 ], [ 92.80929, 12.99732 ], [ 92.80898, 12.99756 ], [ 92.80874, 12.9978 ], [ 92.80867, 12.99795 ], [ 92.809, 12.99806 ], [ 92.80974, 12.99787 ], [ 92.81032, 12.99793 ], [ 92.8107, 12.99802 ], [ 92.81086, 12.99822 ], [ 92.81104, 12.99861 ], [ 92.8114, 12.99878 ], [ 92.81169, 12.99878 ], [ 92.81224, 12.99854 ], [ 92.8124, 12.998350370370378 ], [ 92.81251, 12.99822 ], [ 92.8126, 12.998093617021274 ], [ 92.81298, 12.99756 ], [ 92.81332, 12.99734 ], [ 92.81372, 12.99745 ], [ 92.81401, 12.99761 ], [ 92.81426, 12.99804 ], [ 92.81484, 12.99845 ], [ 92.81533, 12.99864 ], [ 92.81577, 12.99864 ], [ 92.81609, 12.99838 ], [ 92.81658, 12.9983 ], [ 92.81689, 12.99856 ], [ 92.8177, 12.99967 ], [ 92.81821, 13.00006 ], [ 92.81877, 13.00041 ], [ 92.81922, 13.00086 ], [ 92.81928, 13.00126 ], [ 92.81931, 13.00256 ], [ 92.81966, 13.00322 ], [ 92.81986, 13.00396 ], [ 92.82024, 13.00483 ], [ 92.82084, 13.0055 ], [ 92.82138, 13.00585 ], [ 92.82193, 13.00585 ], [ 92.82238, 13.00568 ], [ 92.82287, 13.00568 ], [ 92.82334, 13.00598 ], [ 92.82365, 13.00627 ], [ 92.82383, 13.00666 ], [ 92.82365, 13.00703 ], [ 92.82372, 13.00759 ], [ 92.82419, 13.00973 ], [ 92.82444, 13.0105 ], [ 92.82486, 13.01074 ], [ 92.82526, 13.01078 ], [ 92.82555, 13.01209 ], [ 92.8256, 13.01217 ], [ 92.8256, 13.01352 ], [ 92.82549, 13.01383 ], [ 92.82502, 13.01387 ], [ 92.82459, 13.01367 ], [ 92.82408, 13.01298 ], [ 92.8235, 13.01241 ], [ 92.82225, 13.01182 ], [ 92.82138, 13.01159 ], [ 92.82057, 13.01165 ], [ 92.81984, 13.01161 ], [ 92.81937, 13.01165 ], [ 92.81888, 13.01185 ], [ 92.81856, 13.01187 ], [ 92.81832, 13.01176 ], [ 92.81816, 13.01143 ], [ 92.818, 13.01091 ], [ 92.81753, 13.01054 ], [ 92.81727, 13.01074 ], [ 92.81709, 13.01113 ], [ 92.81695, 13.01119 ], [ 92.8167, 13.01106 ], [ 92.8161, 13.01014 ], [ 92.81584, 13.00963 ], [ 92.81569, 13.00875 ], [ 92.81569, 13.00817 ], [ 92.81548, 13.00748 ], [ 92.81523, 13.00699 ], [ 92.81496, 13.00684 ], [ 92.81464, 13.00684 ], [ 92.8143, 13.00726 ], [ 92.81402, 13.00819 ], [ 92.81314, 13.00904 ], [ 92.81268, 13.00937 ], [ 92.8126, 13.009363793103448 ], [ 92.8124, 13.009348275862068 ], [ 92.81152, 13.00928 ], [ 92.81067, 13.00928 ], [ 92.81003, 13.00899 ], [ 92.80951, 13.00879 ], [ 92.80883, 13.00875 ], [ 92.80832, 13.00828 ], [ 92.80769, 13.00775 ], [ 92.80696, 13.00684 ], [ 92.80661, 13.00657 ], [ 92.8063, 13.0064 ], [ 92.80579, 13.00675 ], [ 92.80509, 13.00751 ], [ 92.8049, 13.00813 ], [ 92.80506, 13.00898 ], [ 92.8052, 13.00909 ], [ 92.80561, 13.01007 ], [ 92.80561, 13.01087 ], [ 92.80607, 13.01151 ], [ 92.80614, 13.01198 ], [ 92.80573, 13.01215 ], [ 92.80525, 13.01231 ], [ 92.80413, 13.01229 ], [ 92.80315, 13.01211 ], [ 92.80267, 13.012 ], [ 92.8021, 13.01158 ], [ 92.80176, 13.01095 ], [ 92.80171, 13.01015 ], [ 92.80157, 13.00978 ], [ 92.80137, 13.00949 ], [ 92.80105, 13.00929 ], [ 92.80025, 13.00958 ], [ 92.79943, 13.00958 ], [ 92.799, 13.00931 ], [ 92.79875, 13.00907 ], [ 92.79857, 13.00913 ], [ 92.79838, 13.00962 ], [ 92.79795, 13.01004 ], [ 92.79701, 13.01104 ], [ 92.79603, 13.01168 ], [ 92.79551, 13.01193 ], [ 92.79489, 13.01173 ], [ 92.79426, 13.01142 ], [ 92.79398, 13.01117 ], [ 92.79348, 13.01126 ], [ 92.79198, 13.01164 ], [ 92.79147, 13.01197 ], [ 92.79122, 13.01237 ], [ 92.79109, 13.01317 ], [ 92.79122, 13.01393 ], [ 92.79099, 13.01431 ], [ 92.79049, 13.01455 ], [ 92.79013, 13.01468 ], [ 92.78992, 13.01491 ], [ 92.78979, 13.01524 ], [ 92.78981, 13.01584 ], [ 92.78958, 13.01619 ], [ 92.7891, 13.01659 ], [ 92.78867, 13.01686 ], [ 92.78865, 13.01713 ], [ 92.78869, 13.01766 ], [ 92.78892, 13.01819 ], [ 92.78878, 13.01848 ], [ 92.78842, 13.01868 ], [ 92.78789, 13.0191 ], [ 92.78798, 13.01944 ], [ 92.78835, 13.01942 ], [ 92.78903, 13.01924 ], [ 92.789, 13.0196 ], [ 92.78947, 13.02003 ], [ 92.78953, 13.02016 ], [ 92.78993, 13.02062 ], [ 92.79016, 13.02155 ], [ 92.7904, 13.02232 ], [ 92.79044, 13.02316 ], [ 92.7903, 13.02418 ], [ 92.79035, 13.02458 ], [ 92.79077, 13.02497 ], [ 92.79121, 13.02508 ], [ 92.79124, 13.02542 ], [ 92.79152, 13.02553 ], [ 92.79217, 13.0254 ], [ 92.79282, 13.02549 ], [ 92.79317, 13.02562 ], [ 92.79356, 13.02673 ], [ 92.79359, 13.02728 ], [ 92.79356, 13.02771 ], [ 92.79368, 13.02807 ], [ 92.79377, 13.02848 ], [ 92.79373, 13.02889 ], [ 92.79361, 13.02918 ], [ 92.79368, 13.02934 ], [ 92.79412, 13.02963 ], [ 92.79501, 13.02991 ], [ 92.79538, 13.03011 ], [ 92.79557, 13.03068 ], [ 92.79512, 13.03086 ], [ 92.79415, 13.03172 ], [ 92.79405, 13.03219 ], [ 92.79419, 13.03251 ], [ 92.79424, 13.03283 ], [ 92.79401, 13.03301 ], [ 92.79342, 13.03278 ], [ 92.7928, 13.03308 ], [ 92.79259, 13.03351 ], [ 92.79256, 13.03408 ], [ 92.79266, 13.03473 ], [ 92.79352, 13.03641 ], [ 92.79342, 13.03673 ], [ 92.79335, 13.03714 ], [ 92.79335, 13.03768 ], [ 92.79347, 13.03822 ], [ 92.79387, 13.03856 ], [ 92.79412, 13.03881 ], [ 92.79442, 13.03936 ], [ 92.79475, 13.03981 ], [ 92.79533, 13.03981 ], [ 92.79612, 13.03967 ], [ 92.79656, 13.0397 ], [ 92.79661, 13.03997 ], [ 92.79629, 13.04049 ], [ 92.79561, 13.04103 ], [ 92.79508, 13.04176 ], [ 92.79473, 13.04217 ], [ 92.79475, 13.04332 ], [ 92.79449, 13.04371 ], [ 92.7944, 13.04403 ], [ 92.79428, 13.04462 ], [ 92.79459, 13.04505 ], [ 92.79512, 13.04555 ], [ 92.79505, 13.04596 ], [ 92.79477, 13.04664 ], [ 92.79466, 13.04745 ], [ 92.79498, 13.04764 ], [ 92.7954, 13.04761 ], [ 92.79561, 13.04788 ], [ 92.79566, 13.04834 ], [ 92.7961, 13.04861 ], [ 92.7964, 13.04899 ], [ 92.79656, 13.04949 ], [ 92.79661, 13.04997 ], [ 92.79619, 13.05035 ], [ 92.79594, 13.05101 ], [ 92.79619, 13.05149 ], [ 92.79619, 13.0518 ], [ 92.79607, 13.05217 ], [ 92.79573, 13.05242 ], [ 92.79535, 13.05262 ], [ 92.79514, 13.05296 ], [ 92.79498173228346, 13.05363 ], [ 92.794939880861421, 13.05380717101996 ], [ 92.794934488188971, 13.05383 ], [ 92.79484, 13.05423 ], [ 92.79466, 13.05466 ], [ 92.79461, 13.05503 ], [ 92.79463, 13.05517 ], [ 92.79463, 13.05565 ], [ 92.7944, 13.0558 ], [ 92.79421, 13.05565 ], [ 92.79417, 13.05531 ], [ 92.79398, 13.05501 ], [ 92.79375, 13.05499 ], [ 92.79356, 13.05544 ], [ 92.79354, 13.05642 ], [ 92.79345, 13.05732 ], [ 92.7934, 13.05811 ], [ 92.79361, 13.05836 ], [ 92.79389, 13.05907 ], [ 92.79377, 13.05959 ], [ 92.79342, 13.05997 ], [ 92.79321, 13.06137 ], [ 92.79335, 13.06235 ], [ 92.79361, 13.06291 ], [ 92.79405, 13.06359 ], [ 92.79452, 13.06393 ], [ 92.79512, 13.06393 ], [ 92.79607, 13.06373 ], [ 92.79619, 13.06391 ], [ 92.79607, 13.06416 ], [ 92.79563, 13.06484 ], [ 92.79563, 13.06561 ], [ 92.79556, 13.06715 ], [ 92.79593, 13.0679 ], [ 92.79598, 13.06833 ], [ 92.79598, 13.06916 ], [ 92.7957, 13.07005 ], [ 92.79565, 13.07068 ], [ 92.79586, 13.07145 ], [ 92.79605, 13.07195 ], [ 92.79661, 13.0731 ], [ 92.79696, 13.07352 ], [ 92.79712, 13.07394 ], [ 92.79724, 13.07466 ], [ 92.79696, 13.07564 ], [ 92.79654, 13.07564 ], [ 92.79586, 13.07544 ], [ 92.79561, 13.0755 ], [ 92.79551, 13.07584 ], [ 92.79575, 13.07645 ], [ 92.79584, 13.07713 ], [ 92.79589, 13.07869 ], [ 92.79584, 13.0798 ], [ 92.79612, 13.08089 ], [ 92.79605, 13.08163 ], [ 92.79579, 13.08265 ], [ 92.79575, 13.08365 ], [ 92.79565, 13.08447 ], [ 92.79563, 13.08491 ], [ 92.79607, 13.08596 ], [ 92.79635, 13.08675 ], [ 92.79633, 13.08854 ], [ 92.79637, 13.08926 ], [ 92.79707, 13.0899 ], [ 92.79798, 13.09042 ], [ 92.79843, 13.09091 ], [ 92.79883, 13.09154 ], [ 92.79934, 13.09195 ], [ 92.79985, 13.09166 ], [ 92.80006, 13.09132 ], [ 92.79987, 13.09073 ], [ 92.79997, 13.09023 ], [ 92.80027, 13.08989 ], [ 92.80057, 13.0891 ], [ 92.80099, 13.08853 ], [ 92.80118, 13.08821 ], [ 92.80166, 13.08814 ], [ 92.80209, 13.08784 ], [ 92.80218, 13.08762 ], [ 92.80211, 13.08722 ], [ 92.80198, 13.08684 ], [ 92.80163, 13.08669 ], [ 92.80138, 13.0864 ], [ 92.80138, 13.086 ], [ 92.80141, 13.0856 ], [ 92.80163, 13.08531 ], [ 92.80161, 13.08495 ], [ 92.80145, 13.0844 ], [ 92.80122, 13.08393 ], [ 92.80045, 13.08337 ], [ 92.80024, 13.0831 ], [ 92.80013, 13.08277 ], [ 92.79978, 13.08246 ], [ 92.79933, 13.08224 ], [ 92.79896, 13.08213 ], [ 92.79894, 13.08193 ], [ 92.80006, 13.08193 ], [ 92.80088, 13.08181 ], [ 92.80161, 13.0815 ], [ 92.80239, 13.08085 ], [ 92.80257, 13.08056 ], [ 92.80273, 13.07981 ], [ 92.8028, 13.07854 ], [ 92.8028, 13.07747 ], [ 92.80294, 13.07705 ], [ 92.80358, 13.07634 ], [ 92.80458, 13.07558 ], [ 92.8049, 13.07518 ], [ 92.80511, 13.07485 ], [ 92.80547, 13.07471 ], [ 92.80591, 13.07471 ], [ 92.80668, 13.07485 ], [ 92.80726, 13.07507 ], [ 92.80776, 13.07534 ], [ 92.80826, 13.07578 ], [ 92.80879, 13.07589 ], [ 92.80924, 13.07583 ], [ 92.80954, 13.07574 ], [ 92.80972, 13.07554 ], [ 92.80968, 13.07411 ], [ 92.80981, 13.07378 ], [ 92.81004, 13.07371 ], [ 92.81048, 13.07407 ], [ 92.81082, 13.07451 ], [ 92.81111, 13.07508 ], [ 92.81132, 13.07592 ], [ 92.81164, 13.07632 ], [ 92.81189, 13.07648 ], [ 92.81194, 13.0767 ], [ 92.81178, 13.07679 ], [ 92.81109, 13.07688 ], [ 92.81102, 13.07717 ], [ 92.81116, 13.07754 ], [ 92.81155, 13.07826 ], [ 92.81201, 13.07924 ], [ 92.81207, 13.07984 ], [ 92.81207, 13.08019 ], [ 92.81198, 13.08039 ], [ 92.81159, 13.08026 ], [ 92.81127, 13.07995 ], [ 92.81066, 13.07979 ], [ 92.80956, 13.0797 ], [ 92.80872, 13.07959 ], [ 92.80769, 13.07959 ], [ 92.80728, 13.07964 ], [ 92.80705, 13.07972 ], [ 92.80691, 13.07999 ], [ 92.80735, 13.08059 ], [ 92.80783, 13.08097 ], [ 92.80849, 13.08162 ], [ 92.80899, 13.08222 ], [ 92.8094, 13.08253 ], [ 92.80954, 13.08291 ], [ 92.80954, 13.08331 ], [ 92.80922, 13.08357 ], [ 92.80892, 13.08357 ], [ 92.80865, 13.08375 ], [ 92.80863, 13.084 ], [ 92.80835, 13.0842 ], [ 92.808, 13.08441 ], [ 92.80766, 13.08465 ], [ 92.80715, 13.08476 ], [ 92.8061, 13.08476 ], [ 92.80551, 13.08516 ], [ 92.80503, 13.08632 ], [ 92.80489, 13.08732 ], [ 92.80521, 13.08897 ], [ 92.80542, 13.08948 ], [ 92.80626, 13.09042 ], [ 92.80687, 13.09171 ], [ 92.80712, 13.09247 ], [ 92.8075, 13.09347 ], [ 92.80755, 13.09416 ], [ 92.8075, 13.09611 ], [ 92.80725, 13.09718 ], [ 92.80728, 13.09807 ], [ 92.80714, 13.09909 ], [ 92.80752, 13.09962 ], [ 92.80819, 13.10009 ], [ 92.80901, 13.10047 ], [ 92.80979, 13.10096 ], [ 92.81032, 13.1016 ], [ 92.81116, 13.10243 ], [ 92.81207, 13.10312 ], [ 92.8124, 13.103333529411763 ], [ 92.8126, 13.103462941176476 ], [ 92.81275, 13.10356 ], [ 92.81318, 13.10369 ], [ 92.81364, 13.10369 ], [ 92.81418, 13.10358 ], [ 92.81468, 13.10323 ], [ 92.81509, 13.10269 ], [ 92.81513, 13.1026 ], [ 92.81513, 13.10203 ], [ 92.81494, 13.10158 ], [ 92.81494, 13.10138 ], [ 92.81513, 13.101 ], [ 92.81545, 13.10089 ], [ 92.81606, 13.10087 ], [ 92.81668, 13.10078 ], [ 92.81716, 13.10036 ], [ 92.81736, 13.09991 ], [ 92.81736, 13.09975 ], [ 92.81747, 13.09937 ], [ 92.81779, 13.09915 ], [ 92.81838, 13.09891 ], [ 92.81889, 13.09848 ], [ 92.81955, 13.09771 ], [ 92.82001, 13.09661 ], [ 92.82051, 13.09497 ], [ 92.82083, 13.09417 ], [ 92.82117, 13.09395 ], [ 92.82149, 13.09423 ], [ 92.82181, 13.09479 ], [ 92.82215, 13.09517 ], [ 92.82249, 13.09548 ], [ 92.82256, 13.09597 ], [ 92.82236, 13.09673 ], [ 92.8219, 13.09777 ], [ 92.82058, 13.10022 ], [ 92.81877, 13.10237 ], [ 92.81802, 13.1034 ], [ 92.81795, 13.10404 ], [ 92.81802, 13.10455 ], [ 92.81838, 13.10484 ], [ 92.81914, 13.10464 ], [ 92.81994, 13.10395 ], [ 92.82032, 13.10342 ], [ 92.82108, 13.103 ], [ 92.82158, 13.10315 ], [ 92.82186, 13.10351 ], [ 92.8216, 13.10402 ], [ 92.82142, 13.10462 ], [ 92.81996, 13.10558 ], [ 92.81923, 13.10629 ], [ 92.81889, 13.10673 ], [ 92.81889, 13.10722 ], [ 92.81916, 13.10754 ], [ 92.81978, 13.1079 ], [ 92.82039, 13.10866 ], [ 92.82046, 13.1093 ], [ 92.82017, 13.10968 ], [ 92.82028, 13.1103 ], [ 92.82126, 13.11132 ], [ 92.82265, 13.11228 ], [ 92.82359, 13.11273 ], [ 92.82439, 13.11281 ], [ 92.82505, 13.11293 ], [ 92.82514, 13.11326 ], [ 92.82489, 13.11353 ], [ 92.8245, 13.11379 ], [ 92.82457, 13.11408 ], [ 92.82462, 13.11471 ], [ 92.82455, 13.11533 ], [ 92.824, 13.11553 ], [ 92.82371, 13.11548 ], [ 92.82313, 13.11526 ], [ 92.82284, 13.11495 ], [ 92.82176, 13.11444 ], [ 92.82099, 13.11375 ], [ 92.82032, 13.11333 ], [ 92.81987, 13.1135 ], [ 92.81923, 13.11368 ], [ 92.81866, 13.11362 ], [ 92.81781, 13.11317 ], [ 92.81693, 13.11251 ], [ 92.81655, 13.11235 ], [ 92.8161, 13.11261 ], [ 92.81597, 13.11291 ], [ 92.81568, 13.11314 ], [ 92.81534, 13.11289 ], [ 92.81497, 13.11194 ], [ 92.81445, 13.11176 ], [ 92.81408, 13.11187 ], [ 92.8139, 13.11212 ], [ 92.81371, 13.11169 ], [ 92.8135, 13.111 ], [ 92.81334, 13.11031 ], [ 92.81285, 13.10972 ], [ 92.8126, 13.109235 ], [ 92.8124, 13.108847 ], [ 92.81235, 13.10875 ], [ 92.8118, 13.10824 ], [ 92.81088, 13.10801 ], [ 92.81017, 13.10796 ], [ 92.80972, 13.10816 ], [ 92.80972, 13.10882 ], [ 92.80959, 13.10926 ], [ 92.80909, 13.10962 ], [ 92.80875, 13.1099 ], [ 92.80878, 13.11072 ], [ 92.80909, 13.11174 ], [ 92.80962, 13.11245 ], [ 92.81004, 13.11261 ], [ 92.81067, 13.11235 ], [ 92.81101, 13.11243 ], [ 92.81101, 13.11294 ], [ 92.81067, 13.11358 ], [ 92.81106, 13.11452 ], [ 92.81164, 13.11514 ], [ 92.8124, 13.11546847457627 ], [ 92.8126, 13.115554915254238 ], [ 92.81282, 13.11565 ], [ 92.81369, 13.11614 ], [ 92.814, 13.11677 ], [ 92.81371, 13.11752 ], [ 92.81285, 13.11769 ], [ 92.8126, 13.117577755102044 ], [ 92.8124, 13.117487959183672 ], [ 92.81138, 13.11703 ], [ 92.81124, 13.11693 ], [ 92.80998, 13.11629 ], [ 92.8092, 13.11578 ], [ 92.80831, 13.11527 ], [ 92.80726, 13.11498 ], [ 92.80607, 13.1155 ], [ 92.80542, 13.11759 ], [ 92.80534, 13.11828 ], [ 92.80534, 13.11882 ], [ 92.80544, 13.11979 ], [ 92.80592, 13.12095 ], [ 92.80651, 13.12131 ], [ 92.80759, 13.12147 ], [ 92.80886, 13.12178 ], [ 92.80916, 13.12196 ], [ 92.80955, 13.12215 ], [ 92.81009, 13.12253 ], [ 92.81042, 13.12284 ], [ 92.81056, 13.12325 ], [ 92.81042, 13.1237 ], [ 92.8102, 13.12488 ], [ 92.81019, 13.12526 ], [ 92.80977, 13.1259 ], [ 92.80971, 13.12624 ], [ 92.80973, 13.12663 ], [ 92.81008, 13.12721 ], [ 92.81046, 13.12754 ], [ 92.81102, 13.12785 ], [ 92.81138, 13.12813 ], [ 92.81151, 13.12833 ], [ 92.81183, 13.12867 ], [ 92.81197, 13.12867 ], [ 92.8124, 13.128605094339624 ], [ 92.8125, 13.12859 ], [ 92.8126, 13.128654705882356 ], [ 92.81284, 13.12881 ], [ 92.81336, 13.12896 ], [ 92.81393, 13.12892 ], [ 92.81445, 13.12902 ], [ 92.81564, 13.12905 ], [ 92.816, 13.12919 ], [ 92.81624, 13.12925 ], [ 92.81655, 13.12916 ], [ 92.81662, 13.12917 ], [ 92.81667, 13.12929 ], [ 92.8167, 13.12947 ], [ 92.81677, 13.12963 ], [ 92.81693, 13.12963 ], [ 92.81717, 13.1295 ], [ 92.81736, 13.12946 ], [ 92.81747, 13.12949 ], [ 92.81757, 13.12959 ], [ 92.8178, 13.12956 ], [ 92.81804, 13.12939 ], [ 92.81813, 13.12926 ], [ 92.81825, 13.1292 ], [ 92.81851, 13.12926 ], [ 92.81897, 13.12974 ], [ 92.81897, 13.12996 ], [ 92.81892, 13.13016 ], [ 92.81872, 13.13035 ], [ 92.81842, 13.1304 ], [ 92.81834, 13.13038 ], [ 92.81817, 13.13026 ], [ 92.81801, 13.13026 ], [ 92.81794, 13.13047 ], [ 92.81801, 13.1312 ], [ 92.81848, 13.13197 ], [ 92.81901, 13.13246 ], [ 92.81924, 13.13276 ], [ 92.81959, 13.13291 ], [ 92.82046, 13.13365 ], [ 92.82112, 13.13391 ], [ 92.82195, 13.13401 ], [ 92.82279, 13.13443 ], [ 92.82338, 13.13447 ], [ 92.82391, 13.13433 ], [ 92.82426, 13.134 ], [ 92.82506, 13.1326 ], [ 92.82505, 13.13249 ], [ 92.82469, 13.13243 ], [ 92.82463, 13.13233 ], [ 92.82457, 13.13203 ], [ 92.82462, 13.13179 ], [ 92.82472, 13.13151 ], [ 92.82501, 13.13125 ], [ 92.8252, 13.13112 ], [ 92.82528, 13.13119 ], [ 92.82528, 13.132 ], [ 92.82533, 13.13219 ], [ 92.82547, 13.13218 ], [ 92.82552, 13.13201 ], [ 92.82564, 13.13185 ], [ 92.82571, 13.13168 ], [ 92.82566, 13.13155 ], [ 92.82551, 13.13152 ], [ 92.82544, 13.13141 ], [ 92.82572, 13.13117 ], [ 92.82585, 13.13102 ], [ 92.8259, 13.13076 ], [ 92.82591, 13.13031 ], [ 92.82576, 13.1302 ], [ 92.82559, 13.13012 ], [ 92.82546, 13.13003 ], [ 92.82538, 13.12992 ], [ 92.82538, 13.12977 ], [ 92.8256, 13.12941 ], [ 92.82561, 13.12916 ], [ 92.82556, 13.12895 ], [ 92.82569, 13.12889 ], [ 92.82581, 13.1287 ], [ 92.82581, 13.12851 ], [ 92.82584, 13.12838 ], [ 92.82599, 13.12838 ], [ 92.82631, 13.12845 ], [ 92.82655, 13.12861 ], [ 92.82658, 13.12877 ], [ 92.82646, 13.12884 ], [ 92.82644, 13.12924 ], [ 92.82662, 13.12944 ], [ 92.82684, 13.12959 ], [ 92.82748, 13.12982 ], [ 92.82812, 13.1304 ], [ 92.82846, 13.13057 ], [ 92.82871, 13.13073 ], [ 92.8288, 13.13092 ], [ 92.82878, 13.13119 ], [ 92.82853, 13.13142 ], [ 92.82847, 13.13167 ], [ 92.82862, 13.13195 ], [ 92.82951, 13.13219 ], [ 92.83001, 13.13184 ], [ 92.83007, 13.13148 ], [ 92.83017, 13.13113 ], [ 92.82997, 13.13021 ], [ 92.82986, 13.12986 ], [ 92.82986, 13.12946 ], [ 92.82996, 13.12917 ], [ 92.83021, 13.12887 ], [ 92.83055, 13.12852 ], [ 92.83106, 13.12812 ], [ 92.83126, 13.12791 ], [ 92.83149, 13.12743 ], [ 92.83167, 13.12645 ], [ 92.83165, 13.12614 ], [ 92.83142, 13.12593 ], [ 92.8311, 13.12581 ], [ 92.8308, 13.1256 ], [ 92.83027, 13.1251 ], [ 92.83035, 13.12491 ], [ 92.83094, 13.12453 ], [ 92.83116, 13.12426 ], [ 92.83138, 13.12414 ], [ 92.83157, 13.12416 ], [ 92.83177, 13.12439 ], [ 92.83199, 13.12449 ], [ 92.83313, 13.12432 ], [ 92.83386, 13.12397 ], [ 92.83399, 13.12399 ], [ 92.83411, 13.12426 ], [ 92.83393, 13.12462 ], [ 92.8339, 13.12493 ], [ 92.83393, 13.12555 ], [ 92.83417, 13.12579 ], [ 92.83456, 13.12597 ], [ 92.83506, 13.1261 ], [ 92.83524, 13.12622 ], [ 92.83522, 13.12651 ], [ 92.8349, 13.12735 ], [ 92.83476, 13.12795 ], [ 92.8346, 13.12848 ], [ 92.83443, 13.12925 ], [ 92.83448, 13.12983 ], [ 92.83472, 13.13015 ], [ 92.83508, 13.13019 ], [ 92.83543, 13.13027 ], [ 92.83581, 13.13027 ], [ 92.83628, 13.13006 ], [ 92.83659, 13.12981 ], [ 92.83691, 13.12941 ], [ 92.83722, 13.12893 ], [ 92.83745, 13.12863 ], [ 92.83755, 13.12833 ], [ 92.83775, 13.12811 ], [ 92.83823, 13.12789 ], [ 92.83887, 13.12748 ], [ 92.83942, 13.1273 ], [ 92.83966, 13.1272 ], [ 92.83987, 13.12705 ], [ 92.84002, 13.12686 ], [ 92.84011, 13.12667 ], [ 92.8402, 13.12656 ], [ 92.84024, 13.12639 ], [ 92.84053, 13.12612 ], [ 92.84064, 13.12606 ], [ 92.84073, 13.12609 ], [ 92.84078, 13.12622 ], [ 92.84079, 13.12658 ], [ 92.84065, 13.12687 ], [ 92.84062, 13.12707 ], [ 92.84066, 13.12724 ], [ 92.84085, 13.12739 ], [ 92.84102, 13.12736 ], [ 92.84125, 13.12721 ], [ 92.84129, 13.12728 ], [ 92.8414, 13.12735 ], [ 92.84155, 13.12735 ], [ 92.84161, 13.12733 ], [ 92.8416, 13.12719 ], [ 92.84177, 13.12696 ], [ 92.84178, 13.12682 ], [ 92.84184, 13.12677 ], [ 92.84208, 13.12696 ], [ 92.8425, 13.12677 ], [ 92.84267, 13.1268 ], [ 92.84277, 13.12702 ], [ 92.84282, 13.12725 ], [ 92.84327, 13.12797 ], [ 92.84327, 13.12874 ], [ 92.84333, 13.12892 ], [ 92.84353, 13.12923 ], [ 92.84358, 13.12954 ], [ 92.84391, 13.13037 ], [ 92.84389, 13.1305 ], [ 92.84379, 13.13059 ], [ 92.84358, 13.13065 ], [ 92.84331, 13.13081 ], [ 92.84295, 13.13107 ], [ 92.84274, 13.13127 ], [ 92.84265, 13.13149 ], [ 92.84273, 13.13211 ], [ 92.8427, 13.13239 ], [ 92.84281, 13.1329 ], [ 92.8428, 13.1332 ], [ 92.84305, 13.1341 ], [ 92.84322, 13.13451 ], [ 92.84348, 13.1348 ], [ 92.84371, 13.13499 ], [ 92.84405, 13.13522 ], [ 92.84406, 13.13529 ], [ 92.84399, 13.13535 ], [ 92.84387, 13.13537 ], [ 92.84345, 13.13522 ], [ 92.84282, 13.13507 ], [ 92.84264, 13.13494 ], [ 92.84264, 13.13468 ], [ 92.84247, 13.13454 ], [ 92.84216, 13.13448 ], [ 92.84193, 13.13439 ], [ 92.84156, 13.13417 ], [ 92.84143, 13.13413 ], [ 92.8412, 13.13414 ], [ 92.84106, 13.1341 ], [ 92.84066, 13.13385 ], [ 92.84026, 13.1338 ], [ 92.84003, 13.13381 ], [ 92.83927, 13.13418 ], [ 92.83899, 13.1344 ], [ 92.83843, 13.13458 ], [ 92.83818, 13.1348 ], [ 92.83809, 13.13506 ], [ 92.83805, 13.13529 ], [ 92.8381, 13.13556 ], [ 92.83827, 13.1359 ], [ 92.83869, 13.13645 ], [ 92.83881, 13.1367 ], [ 92.83892, 13.13687 ], [ 92.8388, 13.13696 ], [ 92.83872, 13.13697 ], [ 92.83795, 13.13672 ], [ 92.83757, 13.1367 ], [ 92.83726, 13.13671 ], [ 92.83701, 13.13677 ], [ 92.83686, 13.13696 ], [ 92.83663, 13.13736 ], [ 92.83662, 13.13787 ], [ 92.83651, 13.13794 ], [ 92.83627, 13.13787 ], [ 92.83594, 13.13781 ], [ 92.83567, 13.13795 ], [ 92.8355, 13.13815 ], [ 92.83548, 13.13837 ], [ 92.83562, 13.13883 ], [ 92.83575, 13.13898 ], [ 92.83606, 13.13915 ], [ 92.83623, 13.13928 ], [ 92.83638, 13.13929 ], [ 92.83661, 13.13916 ], [ 92.83667, 13.13899 ], [ 92.83669, 13.13864 ], [ 92.83675, 13.13849 ], [ 92.83688, 13.13844 ], [ 92.83705, 13.13849 ], [ 92.83769, 13.13881 ], [ 92.83796, 13.13898 ], [ 92.8382, 13.13906 ], [ 92.83911, 13.13951 ], [ 92.83933, 13.13953 ], [ 92.84012, 13.13913 ], [ 92.84018, 13.13906 ], [ 92.84017, 13.13893 ], [ 92.84009, 13.13871 ], [ 92.84007, 13.13849 ], [ 92.84022, 13.13825 ], [ 92.84058, 13.13777 ], [ 92.84076, 13.13765 ], [ 92.84098, 13.13776 ], [ 92.84115, 13.13794 ], [ 92.8413, 13.13831 ], [ 92.84143, 13.13855 ], [ 92.84206, 13.13891 ], [ 92.84282, 13.1391 ], [ 92.84379, 13.13909 ], [ 92.8444, 13.139 ], [ 92.84592, 13.13825 ], [ 92.84689, 13.13795 ], [ 92.84737, 13.13811 ], [ 92.84754, 13.13896 ], [ 92.84754, 13.14011 ], [ 92.84774, 13.14108 ], [ 92.84769, 13.14168 ], [ 92.84706, 13.14194 ], [ 92.84663, 13.14138 ], [ 92.84649, 13.14137 ], [ 92.84642, 13.14184 ], [ 92.846, 13.14184 ], [ 92.8449, 13.14165 ], [ 92.84471, 13.14167 ], [ 92.84468, 13.14198 ], [ 92.84445, 13.14267 ], [ 92.84488, 13.14308 ], [ 92.84473, 13.14337 ], [ 92.84403, 13.14353 ], [ 92.84369, 13.14384 ], [ 92.8436, 13.14496 ], [ 92.8436, 13.14569 ], [ 92.84341, 13.14608 ], [ 92.84324, 13.14633 ], [ 92.84296, 13.14652 ], [ 92.84257, 13.14648 ], [ 92.8421, 13.14634 ], [ 92.84149, 13.14606 ], [ 92.84128, 13.14575 ], [ 92.84098, 13.14514 ], [ 92.84066, 13.14483 ], [ 92.84012, 13.14468 ], [ 92.83956, 13.14424 ], [ 92.83922, 13.14358 ], [ 92.83888, 13.14318 ], [ 92.83855, 13.14299 ], [ 92.83798, 13.14307 ], [ 92.83767, 13.14327 ], [ 92.83749, 13.14379 ], [ 92.83697, 13.1444 ], [ 92.83697, 13.14493 ], [ 92.83726, 13.14568 ], [ 92.83726, 13.14611 ], [ 92.83677, 13.14623 ], [ 92.83651, 13.14618 ], [ 92.83622, 13.14588 ], [ 92.83602, 13.14548 ], [ 92.83622, 13.14493 ], [ 92.83612, 13.14422 ], [ 92.83579, 13.14379 ], [ 92.83514, 13.14329 ], [ 92.83416, 13.14304 ], [ 92.83362, 13.14279 ], [ 92.83251, 13.14176 ], [ 92.83217, 13.14173 ], [ 92.83179, 13.14211 ], [ 92.83153, 13.14266 ], [ 92.83148, 13.14327 ], [ 92.83155, 13.14412 ], [ 92.83189, 13.14498 ], [ 92.83204, 13.1455 ], [ 92.83179, 13.14583 ], [ 92.83127, 13.14601 ], [ 92.83109, 13.14651 ], [ 92.83111, 13.14689 ], [ 92.83163, 13.14726 ], [ 92.83209, 13.14754 ], [ 92.83238, 13.14792 ], [ 92.83248, 13.14827 ], [ 92.8323, 13.1486 ], [ 92.83214, 13.14867 ], [ 92.83165, 13.14824 ], [ 92.83085, 13.14784 ], [ 92.8301, 13.14772 ], [ 92.82979, 13.14759 ], [ 92.82954, 13.14691 ], [ 92.82892, 13.14653 ], [ 92.82848, 13.14653 ], [ 92.82801, 13.14671 ], [ 92.82745, 13.14749 ], [ 92.82698, 13.14774 ], [ 92.82675, 13.14756 ], [ 92.8268, 13.14719 ], [ 92.82773, 13.14641 ], [ 92.82819, 13.14593 ], [ 92.82907, 13.14553 ], [ 92.82905, 13.14437 ], [ 92.82889, 13.14389 ], [ 92.82845, 13.14377 ], [ 92.8277, 13.14387 ], [ 92.82721, 13.14422 ], [ 92.82678, 13.14432 ], [ 92.82628, 13.1442 ], [ 92.82569, 13.1444 ], [ 92.82543, 13.14505 ], [ 92.82559, 13.1458 ], [ 92.82551, 13.14618 ], [ 92.82525, 13.14636 ], [ 92.82499, 13.14633 ], [ 92.82429, 13.14582 ], [ 92.82282, 13.14499 ], [ 92.82218, 13.14497 ], [ 92.8213, 13.14517 ], [ 92.81971, 13.14712 ], [ 92.81813, 13.14829 ], [ 92.81596, 13.14966 ], [ 92.81276, 13.15093 ], [ 92.8126, 13.151001351351351 ], [ 92.8124, 13.151090540540542 ], [ 92.81202, 13.15126 ], [ 92.81094, 13.15153 ], [ 92.81013, 13.15182 ], [ 92.80937, 13.15248 ], [ 92.80873, 13.15337 ], [ 92.80875, 13.15454 ], [ 92.80907, 13.15535 ], [ 92.80951, 13.15594 ], [ 92.81025, 13.1564 ], [ 92.81082, 13.15654 ], [ 92.81138, 13.15676 ], [ 92.81168, 13.15714 ], [ 92.81193, 13.15782 ], [ 92.81202, 13.15889 ], [ 92.8119, 13.16267 ], [ 92.81213, 13.16503 ], [ 92.81239, 13.16619 ], [ 92.8124, 13.16622 ], [ 92.8126, 13.16682 ], [ 92.81278, 13.16736 ], [ 92.81319, 13.16774 ], [ 92.81356, 13.16803 ], [ 92.81416, 13.16815 ], [ 92.81506, 13.16853 ], [ 92.81556, 13.16889 ], [ 92.81577, 13.16925 ], [ 92.81584, 13.16965 ], [ 92.8157, 13.1705 ], [ 92.8154, 13.171 ], [ 92.81528, 13.17138 ], [ 92.81494, 13.17151 ], [ 92.81448, 13.17147 ], [ 92.81407, 13.17155 ], [ 92.81391, 13.17166 ], [ 92.81388, 13.17215 ], [ 92.81397, 13.17256 ], [ 92.81436, 13.17372 ], [ 92.81459, 13.1742 ], [ 92.81493, 13.17464 ], [ 92.81544, 13.17512 ], [ 92.81579, 13.17512 ], [ 92.81613, 13.17491 ], [ 92.8165, 13.17438 ], [ 92.81678, 13.17408 ], [ 92.81705, 13.17404 ], [ 92.81745, 13.17447 ], [ 92.81765, 13.17464 ], [ 92.81791, 13.17464 ], [ 92.81807, 13.17438 ], [ 92.81805, 13.17397 ], [ 92.81835, 13.17375 ], [ 92.81904, 13.17339 ], [ 92.81943, 13.17334 ], [ 92.82042, 13.17399 ], [ 92.82143, 13.1746 ], [ 92.82212, 13.17487 ], [ 92.82363, 13.17512 ], [ 92.82423, 13.17489 ], [ 92.82499, 13.17444 ], [ 92.82538, 13.17429 ], [ 92.82575, 13.17429 ], [ 92.82619, 13.17442 ], [ 92.82658, 13.17465 ], [ 92.8273, 13.17471 ], [ 92.82783, 13.17471 ], [ 92.82822, 13.17433 ], [ 92.82863, 13.17373 ], [ 92.82912, 13.17283 ], [ 92.82965, 13.17227 ], [ 92.82992, 13.17204 ], [ 92.83082, 13.17218 ], [ 92.83144, 13.1724 ], [ 92.83213, 13.17285 ], [ 92.83276, 13.1733 ], [ 92.8331, 13.17368 ], [ 92.8331, 13.17483 ], [ 92.83294, 13.1753 ], [ 92.83255, 13.17562 ], [ 92.83158, 13.17622 ], [ 92.83001, 13.17692 ], [ 92.82883, 13.17725 ], [ 92.82827, 13.17718 ], [ 92.82786, 13.17723 ], [ 92.82769, 13.17756 ], [ 92.82769, 13.17808 ], [ 92.82786, 13.17832 ], [ 92.8282, 13.17839 ], [ 92.82861, 13.17821 ], [ 92.82897, 13.17844 ], [ 92.82897, 13.17886 ], [ 92.82863, 13.17926 ], [ 92.82827, 13.17983 ], [ 92.82762, 13.18025 ], [ 92.82747, 13.18077 ], [ 92.82677, 13.18129 ], [ 92.82612, 13.18185 ], [ 92.82564, 13.1819 ], [ 92.82518, 13.1819 ], [ 92.82511, 13.18162 ], [ 92.82545, 13.18124 ], [ 92.82559, 13.18049 ], [ 92.82552, 13.17955 ], [ 92.82528, 13.17882 ], [ 92.82506, 13.17832 ], [ 92.82406, 13.17802 ], [ 92.82367, 13.17797 ], [ 92.82283, 13.17799 ], [ 92.82227, 13.17823 ], [ 92.82169, 13.17983 ], [ 92.8215, 13.18065 ], [ 92.82109, 13.181 ], [ 92.82061, 13.18098 ], [ 92.81986, 13.18136 ], [ 92.81923, 13.18204 ], [ 92.8187, 13.18303 ], [ 92.81844, 13.18393 ], [ 92.81844, 13.1844 ], [ 92.81878, 13.18465 ], [ 92.81948875, 13.18493 ], [ 92.81959, 13.18497 ], [ 92.82066, 13.18569 ], [ 92.82166, 13.18764 ], [ 92.82166, 13.18832 ], [ 92.82062, 13.189 ], [ 92.82007, 13.18953 ], [ 92.8201, 13.18978 ], [ 92.8204, 13.19011 ], [ 92.82173, 13.1904 ], [ 92.82302, 13.19112 ], [ 92.82332, 13.19144 ], [ 92.82317, 13.19216 ], [ 92.82294, 13.19281 ], [ 92.82246, 13.19353 ], [ 92.82187, 13.19392 ], [ 92.82147, 13.19367 ], [ 92.82113, 13.19291 ], [ 92.82095, 13.19245 ], [ 92.82062, 13.19237 ], [ 92.81943, 13.19316 ], [ 92.81829, 13.19449 ], [ 92.81725, 13.19578 ], [ 92.81725, 13.19643 ], [ 92.81758, 13.19729 ], [ 92.81799, 13.19826 ], [ 92.8178, 13.19848 ], [ 92.81743, 13.19869 ], [ 92.81681, 13.1992 ], [ 92.81618, 13.20028 ], [ 92.81592, 13.20114 ], [ 92.81606, 13.20265 ], [ 92.81613, 13.20538 ], [ 92.81658, 13.20578 ], [ 92.81739, 13.20574 ], [ 92.8182, 13.20607 ], [ 92.81886, 13.20681 ], [ 92.82004, 13.20703 ], [ 92.8206, 13.20681 ], [ 92.82115, 13.2062 ], [ 92.82115, 13.20562 ], [ 92.82145, 13.20548 ], [ 92.82193, 13.20573 ], [ 92.82288, 13.20824 ], [ 92.82326, 13.20854 ], [ 92.82379, 13.20861 ], [ 92.82406, 13.20884 ], [ 92.82406, 13.20928 ], [ 92.82387, 13.20966 ], [ 92.82356, 13.20966 ], [ 92.8233, 13.20939 ], [ 92.82307, 13.2091 ], [ 92.82276, 13.20898 ], [ 92.82261, 13.20977 ], [ 92.82272, 13.21051 ], [ 92.82318, 13.21148 ], [ 92.82383, 13.21208 ], [ 92.82456, 13.21215 ], [ 92.82552, 13.21152 ], [ 92.82678, 13.21007 ], [ 92.82732, 13.21003 ], [ 92.8277, 13.21044 ], [ 92.82789, 13.21149 ], [ 92.82827, 13.21216 ], [ 92.82904, 13.21253 ], [ 92.83038, 13.21298 ], [ 92.83088, 13.21332 ], [ 92.83088, 13.21365 ], [ 92.83065, 13.21406 ], [ 92.82965, 13.21413 ], [ 92.82739, 13.21413 ], [ 92.82597, 13.21424 ], [ 92.82521, 13.21491 ], [ 92.82463, 13.21532 ], [ 92.82425, 13.2154 ], [ 92.82352, 13.21577 ], [ 92.8234, 13.21663 ], [ 92.82428, 13.21834 ], [ 92.82586, 13.22013 ], [ 92.82659, 13.22084 ], [ 92.82747, 13.22107 ], [ 92.82842, 13.22181 ], [ 92.82869, 13.22237 ], [ 92.82865, 13.22289 ], [ 92.82793, 13.22263 ], [ 92.82697, 13.22211 ], [ 92.82624, 13.22218 ], [ 92.82551, 13.22323 ], [ 92.82513, 13.22502 ], [ 92.82493, 13.22666 ], [ 92.82562, 13.22833 ], [ 92.82585, 13.22942 ], [ 92.82577, 13.23242 ], [ 92.82577, 13.23353 ], [ 92.82612, 13.23432 ], [ 92.82627, 13.23514 ], [ 92.82619, 13.236 ], [ 92.82669, 13.23715 ], [ 92.82734, 13.23767 ], [ 92.8286, 13.23823 ], [ 92.82952, 13.23868 ], [ 92.83002, 13.23939 ], [ 92.83082, 13.24174 ], [ 92.83139, 13.24264 ], [ 92.83221, 13.24297 ], [ 92.83375, 13.24297 ], [ 92.8349, 13.2432 ], [ 92.83558, 13.24428 ], [ 92.83669, 13.24506 ], [ 92.8375, 13.24529 ], [ 92.83834, 13.24458 ], [ 92.83964, 13.24331 ], [ 92.84114, 13.2422 ], [ 92.84213, 13.24209 ], [ 92.84359, 13.24216 ], [ 92.84566, 13.24242 ], [ 92.84819, 13.24403 ], [ 92.84972, 13.24548 ], [ 92.85102, 13.24798 ], [ 92.85197, 13.25114 ], [ 92.85224, 13.25267 ], [ 92.85197, 13.25457 ], [ 92.85136, 13.25681 ], [ 92.85066, 13.25789 ], [ 92.84913, 13.25879 ], [ 92.84856, 13.25935 ], [ 92.84787, 13.25979 ], [ 92.84699, 13.26031 ], [ 92.84572, 13.26091 ], [ 92.84541, 13.2611 ], [ 92.84419, 13.26128 ], [ 92.84369, 13.26124 ], [ 92.84358, 13.25986 ], [ 92.84327, 13.2596 ], [ 92.84262, 13.25942 ], [ 92.84193, 13.25994 ], [ 92.84158, 13.26091 ], [ 92.8412, 13.26117 ], [ 92.84055, 13.26094 ], [ 92.84001, 13.2602 ], [ 92.83967, 13.25945 ], [ 92.83967, 13.25878 ], [ 92.83971, 13.25815 ], [ 92.83971, 13.2577 ], [ 92.8394, 13.25755 ], [ 92.83913, 13.25781 ], [ 92.83829, 13.25967 ], [ 92.83712, 13.2627 ], [ 92.83643, 13.26327 ], [ 92.83565, 13.26375 ], [ 92.83516, 13.26438 ], [ 92.83502, 13.26556 ], [ 92.83473, 13.26629 ], [ 92.83437, 13.26677 ], [ 92.83437, 13.26775 ], [ 92.83434, 13.26814 ], [ 92.83368, 13.26864 ], [ 92.83267, 13.2689 ], [ 92.83176, 13.2689 ], [ 92.83114, 13.26842 ], [ 92.83075, 13.26794 ], [ 92.83062, 13.26724 ], [ 92.83075, 13.26635 ], [ 92.83072, 13.26533 ], [ 92.83058, 13.26466 ], [ 92.83036, 13.26425 ], [ 92.82977, 13.26422 ], [ 92.82908, 13.26479 ], [ 92.82852, 13.26543 ], [ 92.82781, 13.26565 ], [ 92.82725, 13.26571 ], [ 92.82696, 13.26609 ], [ 92.82695, 13.26695 ], [ 92.82705, 13.26784 ], [ 92.82659, 13.26857 ], [ 92.82447, 13.26962 ], [ 92.82375, 13.26969 ], [ 92.82318, 13.26943 ], [ 92.82282, 13.26914 ], [ 92.82244, 13.26876 ], [ 92.82215, 13.26873 ], [ 92.82197, 13.26911 ], [ 92.82187, 13.26988 ], [ 92.82165, 13.27038 ], [ 92.82129, 13.27061 ], [ 92.82099, 13.27061 ], [ 92.8204, 13.26895 ], [ 92.82024, 13.2686 ], [ 92.81995, 13.26854 ], [ 92.81942, 13.2687 ], [ 92.81923, 13.26908 ], [ 92.81854, 13.26936 ], [ 92.81802, 13.26943 ], [ 92.81736, 13.26939 ], [ 92.81674, 13.26917 ], [ 92.81622, 13.26853 ], [ 92.81537, 13.26809 ], [ 92.81475, 13.26793 ], [ 92.81426, 13.26806 ], [ 92.81306, 13.26911 ], [ 92.81277, 13.26993 ], [ 92.8126, 13.271103 ], [ 92.8126, 13.273069230769273 ], [ 92.8127, 13.2737 ], [ 92.81308, 13.27413 ], [ 92.81373, 13.27448 ], [ 92.8146, 13.27467 ], [ 92.81499, 13.27442 ], [ 92.8155, 13.27385 ], [ 92.81592, 13.27367 ], [ 92.81612, 13.27379 ], [ 92.81592, 13.27426 ], [ 92.81602, 13.27458 ], [ 92.81716, 13.27456 ], [ 92.81787, 13.2745 ], [ 92.81861, 13.27437 ], [ 92.81984, 13.27362 ], [ 92.82081, 13.27312 ], [ 92.82133, 13.27274 ], [ 92.82152, 13.27224 ], [ 92.8221, 13.27174 ], [ 92.82281, 13.27164 ], [ 92.82346, 13.2719 ], [ 92.82384, 13.27249 ], [ 92.82391, 13.27318 ], [ 92.82345, 13.27394 ], [ 92.82268, 13.27481 ], [ 92.82207, 13.27554 ], [ 92.82145, 13.27669 ], [ 92.82106, 13.2777 ], [ 92.82106, 13.27845 ], [ 92.82167, 13.27936 ], [ 92.82222, 13.27999 ], [ 92.82293, 13.28002 ], [ 92.82338, 13.28009 ], [ 92.82351, 13.28031 ], [ 92.82348, 13.28046 ], [ 92.82247, 13.28101 ], [ 92.82211, 13.28148 ], [ 92.82234, 13.28211 ], [ 92.8223, 13.28248 ], [ 92.82201, 13.28292 ], [ 92.82153, 13.28358 ], [ 92.82156, 13.28569 ], [ 92.82201, 13.28669 ], [ 92.82288, 13.28807 ], [ 92.82372, 13.28908 ], [ 92.82459, 13.28943 ], [ 92.82614, 13.28943 ], [ 92.82681, 13.28949 ], [ 92.82785, 13.28971 ], [ 92.82859, 13.29037 ], [ 92.82917, 13.2904 ], [ 92.82988, 13.28996 ], [ 92.83059, 13.28918 ], [ 92.83214, 13.28783 ], [ 92.83311, 13.28783 ], [ 92.83424, 13.28802 ], [ 92.83549, 13.28884 ], [ 92.83607, 13.28943 ], [ 92.83617, 13.29066 ], [ 92.83456, 13.29373 ], [ 92.83407, 13.29486 ], [ 92.83404, 13.2953 ], [ 92.83443, 13.2959 ], [ 92.83491, 13.29625 ], [ 92.83556, 13.29691 ], [ 92.8361, 13.29725 ], [ 92.83684, 13.29741 ], [ 92.83878, 13.29879 ], [ 92.84017, 13.29974 ], [ 92.84091, 13.30033 ], [ 92.84097, 13.30083 ], [ 92.84094, 13.30165 ], [ 92.84055, 13.30262 ], [ 92.83981, 13.3036 ], [ 92.83892, 13.30425 ], [ 92.83824, 13.30453 ], [ 92.83734, 13.30468 ], [ 92.8364, 13.3044 ], [ 92.83614, 13.3039 ], [ 92.83589, 13.30324 ], [ 92.83514, 13.30274 ], [ 92.83411, 13.30302 ], [ 92.83279, 13.30305 ], [ 92.83195, 13.30283 ], [ 92.83095, 13.30286 ], [ 92.83001, 13.30314 ], [ 92.82947, 13.30361 ], [ 92.82872, 13.30418 ], [ 92.82824, 13.30502 ], [ 92.82817, 13.30584 ], [ 92.82795, 13.3064 ], [ 92.82769, 13.30659 ], [ 92.82701, 13.30618 ], [ 92.8265, 13.30483 ], [ 92.82621, 13.30424 ], [ 92.82556, 13.30392 ], [ 92.82476, 13.30392 ], [ 92.82398, 13.30405 ], [ 92.82363, 13.3042 ], [ 92.82337, 13.30461 ], [ 92.82353, 13.30508 ], [ 92.82359, 13.30618 ], [ 92.82343, 13.30706 ], [ 92.82298, 13.30756 ], [ 92.8223, 13.30785 ], [ 92.82159, 13.30832 ], [ 92.82107, 13.30907 ], [ 92.82085, 13.31023 ], [ 92.82088, 13.31158 ], [ 92.8211, 13.31256 ], [ 92.8213, 13.31331 ], [ 92.82191, 13.31422 ], [ 92.82246, 13.31469 ], [ 92.8232, 13.31479 ], [ 92.82384, 13.31422 ], [ 92.82449, 13.31441 ], [ 92.8251, 13.31447 ], [ 92.82546, 13.31438 ], [ 92.8261, 13.31331 ], [ 92.82707, 13.31366 ], [ 92.82749, 13.31413 ], [ 92.82852, 13.31444 ], [ 92.82891, 13.3147 ], [ 92.82904, 13.3152 ], [ 92.82865, 13.31558 ], [ 92.82778, 13.31595 ], [ 92.82642, 13.31589 ], [ 92.82607, 13.3162 ], [ 92.826105167888741, 13.316351661520176 ], [ 92.82639, 13.31758 ], [ 92.82603, 13.31827 ], [ 92.82565, 13.32015 ], [ 92.82581, 13.32081 ], [ 92.82581, 13.32166 ], [ 92.82558, 13.32213 ], [ 92.825, 13.32251 ], [ 92.82445, 13.32298 ], [ 92.8238, 13.32373 ], [ 92.82345, 13.32449 ], [ 92.82316, 13.32605 ], [ 92.82328, 13.32696 ], [ 92.82351, 13.32772 ], [ 92.82412, 13.32841 ], [ 92.82422, 13.32891 ], [ 92.82409, 13.32929 ], [ 92.8246, 13.33064 ], [ 92.82493, 13.33139 ], [ 92.82525, 13.33177 ], [ 92.82638, 13.33174 ], [ 92.82689, 13.33215 ], [ 92.82709, 13.33265 ], [ 92.82702, 13.33302 ], [ 92.8267, 13.33337 ], [ 92.82654, 13.33384 ], [ 92.8268, 13.33444 ], [ 92.82751, 13.33466 ], [ 92.82783, 13.33519 ], [ 92.82792, 13.33569 ], [ 92.82892, 13.33613 ], [ 92.82983, 13.33632 ], [ 92.8308, 13.33598 ], [ 92.83147, 13.33595 ], [ 92.83209, 13.3362 ], [ 92.8326, 13.33692 ], [ 92.83357, 13.33739 ], [ 92.83376, 13.33783 ], [ 92.83376, 13.3384 ], [ 92.83366, 13.3389 ], [ 92.83318, 13.33921 ], [ 92.83224, 13.33956 ], [ 92.83157, 13.33989 ], [ 92.83066, 13.34008 ], [ 92.83015, 13.34046 ], [ 92.82992, 13.34115 ], [ 92.82995, 13.34174 ], [ 92.83031, 13.34265 ], [ 92.83063, 13.34309 ], [ 92.83114, 13.34316 ], [ 92.83211, 13.34306 ], [ 92.83253, 13.34338 ], [ 92.83289, 13.34423 ], [ 92.83369, 13.34489 ], [ 92.8344, 13.34495 ], [ 92.83508, 13.34526 ], [ 92.83547, 13.34592 ], [ 92.83543, 13.34649 ], [ 92.83524, 13.34705 ], [ 92.83485, 13.34749 ], [ 92.83443, 13.34765 ], [ 92.83382, 13.3474 ], [ 92.83308, 13.34696 ], [ 92.8326, 13.34715 ], [ 92.83205, 13.34759 ], [ 92.83217, 13.34831 ], [ 92.83276, 13.34879 ], [ 92.83337, 13.34919 ], [ 92.8333, 13.34966 ], [ 92.83301, 13.3501 ], [ 92.83217, 13.3501 ], [ 92.83124, 13.34947 ], [ 92.83092, 13.34885 ], [ 92.83046, 13.34863 ], [ 92.8295, 13.34891 ], [ 92.82875, 13.34938 ], [ 92.82866, 13.35001 ], [ 92.82862, 13.3506 ], [ 92.82866, 13.35145 ], [ 92.82875, 13.35192 ], [ 92.82943, 13.35264 ], [ 92.82956, 13.35318 ], [ 92.83007, 13.35344 ], [ 92.8303, 13.35343 ], [ 92.83124, 13.3529 ], [ 92.83127, 13.35315 ], [ 92.83062, 13.35382 ], [ 92.83065, 13.35416 ], [ 92.83129, 13.35464 ], [ 92.83184, 13.35461 ], [ 92.83233, 13.35448 ], [ 92.83281, 13.35451 ], [ 92.83336, 13.35483 ], [ 92.83365, 13.3553 ], [ 92.83365, 13.35586 ], [ 92.83358, 13.35686 ], [ 92.83374, 13.35737 ], [ 92.83371, 13.35787 ], [ 92.83339, 13.35837 ], [ 92.83303, 13.35937 ], [ 92.83264, 13.35997 ], [ 92.83248, 13.36053 ], [ 92.83284, 13.36173 ], [ 92.83329, 13.36182 ], [ 92.8338, 13.36167 ], [ 92.83432, 13.36138 ], [ 92.83458, 13.3612 ], [ 92.83481, 13.3612 ], [ 92.83506, 13.36145 ], [ 92.83513, 13.36186 ], [ 92.83451, 13.36211 ], [ 92.83387, 13.3628 ], [ 92.83303, 13.36342 ], [ 92.83271, 13.36386 ], [ 92.83274, 13.36433 ], [ 92.83306, 13.36462 ], [ 92.83342, 13.36487 ], [ 92.83325, 13.36512 ], [ 92.83267, 13.36534 ], [ 92.83225, 13.36565 ], [ 92.83203, 13.36597 ], [ 92.83199, 13.36619 ], [ 92.83274, 13.36659 ], [ 92.83293, 13.36678 ], [ 92.8328, 13.367 ], [ 92.83212, 13.36713 ], [ 92.83119, 13.36747 ], [ 92.83038, 13.36797 ], [ 92.83028, 13.36844 ], [ 92.83131, 13.3692 ], [ 92.83219, 13.36961 ], [ 92.8328, 13.36998 ], [ 92.83357, 13.37005 ], [ 92.83399, 13.36986 ], [ 92.83435, 13.36955 ], [ 92.8348, 13.36961 ], [ 92.83519, 13.36926 ], [ 92.83554, 13.36879 ], [ 92.83664, 13.36817 ], [ 92.83716, 13.3682 ], [ 92.83761, 13.36854 ], [ 92.83791, 13.3695 ], [ 92.83778, 13.37022 ], [ 92.83755, 13.37053 ], [ 92.83697, 13.37085 ], [ 92.83652, 13.37144 ], [ 92.83678, 13.37195 ], [ 92.8371, 13.37229 ], [ 92.8381, 13.37242 ], [ 92.83875, 13.37242 ], [ 92.83891, 13.3728 ], [ 92.83887, 13.37324 ], [ 92.83833, 13.37327 ], [ 92.83752, 13.3732 ], [ 92.83674, 13.37345 ], [ 92.83639, 13.37377 ], [ 92.83581, 13.37386 ], [ 92.83552, 13.37355 ], [ 92.83507, 13.37348 ], [ 92.83458, 13.37439 ], [ 92.83452, 13.3748 ], [ 92.83461, 13.37537 ], [ 92.83487, 13.3759 ], [ 92.83523, 13.37612 ], [ 92.83558, 13.376 ], [ 92.83607, 13.37546 ], [ 92.83658, 13.37521 ], [ 92.83745, 13.37546 ], [ 92.8381, 13.37594 ], [ 92.83884, 13.377 ], [ 92.83965, 13.37801 ], [ 92.84106, 13.37861 ], [ 92.842, 13.37861 ], [ 92.84345, 13.37823 ], [ 92.84426, 13.37839 ], [ 92.84552, 13.37839 ], [ 92.84646, 13.37823 ], [ 92.84713, 13.37754 ], [ 92.84736, 13.37688 ], [ 92.84794, 13.37585 ], [ 92.84891, 13.37506 ], [ 92.85097, 13.37453 ], [ 92.85132, 13.37463 ], [ 92.85162, 13.37485 ], [ 92.85181, 13.37541 ], [ 92.85259, 13.37724 ], [ 92.85317, 13.37825 ], [ 92.85375, 13.37875 ], [ 92.85756, 13.37985 ], [ 92.8604, 13.38064 ], [ 92.86185, 13.3812 ], [ 92.86301, 13.38152 ], [ 92.8635, 13.38202 ], [ 92.86385, 13.38246 ], [ 92.86382, 13.38312 ], [ 92.86317, 13.38356 ], [ 92.86185, 13.38337 ], [ 92.86049, 13.38309 ], [ 92.85943, 13.38343 ], [ 92.85904, 13.38406 ], [ 92.85853, 13.38443 ], [ 92.85811, 13.3845 ], [ 92.85727, 13.38446 ], [ 92.8564, 13.38497 ], [ 92.85565, 13.38547 ], [ 92.85506, 13.38558 ], [ 92.85403, 13.38548 ], [ 92.85342, 13.38533 ], [ 92.8528, 13.38511 ], [ 92.852, 13.38514 ], [ 92.85142, 13.38536 ], [ 92.8508, 13.38567 ], [ 92.85051, 13.38642 ], [ 92.85045, 13.38721 ], [ 92.85074, 13.38799 ], [ 92.85083, 13.38859 ], [ 92.85061, 13.3889 ], [ 92.85025, 13.38896 ], [ 92.8498, 13.38862 ], [ 92.84951, 13.38811 ], [ 92.84858, 13.38742 ], [ 92.84748, 13.38711 ], [ 92.84577, 13.38695 ], [ 92.84487, 13.38717 ], [ 92.8441, 13.38761 ], [ 92.84403, 13.38805 ], [ 92.84432, 13.38855 ], [ 92.84497, 13.38902 ], [ 92.84513, 13.3894 ], [ 92.84496, 13.38968 ], [ 92.84448, 13.3898 ], [ 92.8439, 13.3898 ], [ 92.84358, 13.38952 ], [ 92.84326, 13.38864 ], [ 92.84293, 13.3882 ], [ 92.84232, 13.38823 ], [ 92.84184, 13.38836 ], [ 92.84152, 13.38896 ], [ 92.84145, 13.38977 ], [ 92.84116, 13.39056 ], [ 92.84064, 13.39121 ], [ 92.84016, 13.3915 ], [ 92.84003, 13.39178 ], [ 92.83987, 13.39228 ], [ 92.83896, 13.39344 ], [ 92.83871, 13.3941 ], [ 92.839, 13.39551 ], [ 92.83928, 13.3967 ], [ 92.83977, 13.39783 ], [ 92.8398, 13.3988 ], [ 92.83973, 13.39987 ], [ 92.83983, 13.40084 ], [ 92.84009, 13.40183 ], [ 92.84034, 13.40237 ], [ 92.84083, 13.40325 ], [ 92.84121, 13.40428 ], [ 92.84163, 13.40532 ], [ 92.84218, 13.40588 ], [ 92.8424, 13.40595 ], [ 92.84321, 13.40573 ], [ 92.84334, 13.40598 ], [ 92.84318, 13.40635 ], [ 92.84266, 13.40679 ], [ 92.84266, 13.40739 ], [ 92.84301, 13.4092 ], [ 92.84326, 13.40986 ], [ 92.84375, 13.41062 ], [ 92.84445, 13.41124 ], [ 92.84533, 13.41149 ], [ 92.84616, 13.41219 ], [ 92.84703, 13.41269 ], [ 92.84819, 13.41278 ], [ 92.84906, 13.41269 ], [ 92.85079, 13.41191 ], [ 92.8513, 13.41197 ], [ 92.85166, 13.41219 ], [ 92.85159, 13.41253 ], [ 92.85066, 13.41322 ], [ 92.85024, 13.41376 ], [ 92.85024, 13.41413 ], [ 92.8504, 13.41445 ], [ 92.85178, 13.41486 ], [ 92.85227, 13.41482 ], [ 92.85265, 13.41457 ], [ 92.85282, 13.41398 ], [ 92.85278, 13.41348 ], [ 92.85288, 13.41269 ], [ 92.8533, 13.41191 ], [ 92.85382, 13.41106 ], [ 92.85479, 13.41056 ], [ 92.85566, 13.40996 ], [ 92.85637, 13.4099 ], [ 92.85688, 13.40959 ], [ 92.85724, 13.4094 ], [ 92.85872, 13.4094 ], [ 92.85942, 13.40921 ], [ 92.85976, 13.40897 ], [ 92.85994, 13.40874 ], [ 92.86027, 13.40847 ], [ 92.86069, 13.40847 ], [ 92.86157, 13.40858 ], [ 92.86262, 13.40899 ], [ 92.86342, 13.40953 ], [ 92.86392, 13.41007 ], [ 92.86438, 13.41069 ], [ 92.86448, 13.4112 ], [ 92.86448, 13.41167 ], [ 92.86443, 13.41211 ], [ 92.86412, 13.41249 ], [ 92.8639, 13.41294 ], [ 92.86385, 13.41343 ], [ 92.86407, 13.41379 ], [ 92.86438, 13.41407 ], [ 92.86482, 13.41427 ], [ 92.86537, 13.41431 ], [ 92.86624, 13.4141 ], [ 92.86685, 13.41409 ], [ 92.8678, 13.41433 ], [ 92.86855, 13.41445 ], [ 92.86895, 13.41464 ], [ 92.86917, 13.4151 ], [ 92.86912, 13.41565 ], [ 92.86894, 13.41601 ], [ 92.86894, 13.41667 ], [ 92.86902, 13.41728 ], [ 92.86897, 13.41774 ], [ 92.86879, 13.41796 ], [ 92.8686, 13.41803 ], [ 92.86802, 13.41802 ], [ 92.86774, 13.41819 ], [ 92.86756, 13.41852 ], [ 92.86756, 13.41878 ], [ 92.86763, 13.41899 ], [ 92.86801, 13.41928 ], [ 92.86801, 13.41945 ], [ 92.86794, 13.41973 ], [ 92.86767, 13.42012 ], [ 92.86761, 13.42058 ], [ 92.86769, 13.4209 ], [ 92.86784, 13.42128 ], [ 92.8682, 13.42164 ], [ 92.8682, 13.42213 ], [ 92.86811, 13.42245 ], [ 92.86791, 13.42288 ], [ 92.86784, 13.4233 ], [ 92.86784, 13.42377 ], [ 92.86815, 13.42439 ], [ 92.86867, 13.4251 ], [ 92.86928, 13.42567 ], [ 92.86984, 13.42604 ], [ 92.87028, 13.42618 ], [ 92.87058, 13.4262 ], [ 92.8708, 13.42633 ], [ 92.87113, 13.42676 ], [ 92.87166, 13.4273 ], [ 92.872, 13.4275 ], [ 92.87247, 13.42757 ], [ 92.87274, 13.42751 ], [ 92.87289, 13.42732 ], [ 92.87294, 13.427 ], [ 92.8731, 13.42682 ], [ 92.8734, 13.4267 ], [ 92.87363, 13.42651 ], [ 92.87403, 13.42598 ], [ 92.87423, 13.42598 ], [ 92.87456, 13.42607 ], [ 92.87504, 13.42615 ], [ 92.87534, 13.42637 ], [ 92.87543, 13.42667 ], [ 92.87539, 13.42705 ], [ 92.87556, 13.42756 ], [ 92.8757, 13.42784 ], [ 92.87614, 13.42819 ], [ 92.87643, 13.42834 ], [ 92.87679, 13.42831 ], [ 92.87719, 13.42815 ], [ 92.87808, 13.4283 ], [ 92.87835, 13.42855 ], [ 92.87868, 13.4288 ], [ 92.87919, 13.42881 ], [ 92.87963, 13.42879 ], [ 92.87989, 13.42862 ], [ 92.88012, 13.42868 ], [ 92.88019, 13.42881 ], [ 92.88018, 13.42913 ], [ 92.88008, 13.42952 ], [ 92.87969, 13.43058 ], [ 92.87913, 13.43147 ], [ 92.87746, 13.43394 ], [ 92.87696, 13.43464 ], [ 92.87669, 13.43492 ], [ 92.87625, 13.43494 ], [ 92.87566, 13.43472 ], [ 92.87512, 13.43435 ], [ 92.87444, 13.43453 ], [ 92.8741, 13.43477 ], [ 92.87367, 13.43503 ], [ 92.87326, 13.43503 ], [ 92.87288, 13.43506 ], [ 92.87259, 13.43523 ], [ 92.87236, 13.43611 ], [ 92.87236, 13.43666 ], [ 92.87257, 13.43758 ], [ 92.87311, 13.43796 ], [ 92.87356, 13.43824 ], [ 92.87408, 13.43835 ], [ 92.87517, 13.43916 ], [ 92.87573, 13.4391 ], [ 92.87625, 13.4387 ], [ 92.87682, 13.43835 ], [ 92.8774, 13.43811 ], [ 92.87785, 13.43808 ], [ 92.87815, 13.43826 ], [ 92.87822, 13.43881 ], [ 92.87808, 13.43986 ], [ 92.87824, 13.44057 ], [ 92.87863, 13.44101 ], [ 92.87924, 13.44129 ], [ 92.87933, 13.44195 ], [ 92.87912, 13.44241 ], [ 92.87885, 13.44285 ], [ 92.87856, 13.44301 ], [ 92.87818, 13.44307 ], [ 92.87737, 13.443 ], [ 92.87604, 13.44303 ], [ 92.87501, 13.4431 ], [ 92.87435, 13.44345 ], [ 92.8738, 13.44352 ], [ 92.8732, 13.44336 ], [ 92.8727, 13.44336 ], [ 92.87232, 13.44366 ], [ 92.87228, 13.4444 ], [ 92.87251, 13.4453 ], [ 92.87252, 13.44607 ], [ 92.87221, 13.44639 ], [ 92.8718, 13.44655 ], [ 92.87164, 13.44702 ], [ 92.871647338129506, 13.44753 ], [ 92.871647338129492, 13.44753 ], [ 92.87166, 13.44841 ], [ 92.8719, 13.45099 ], [ 92.872, 13.45247 ], [ 92.87219, 13.45363 ], [ 92.87236, 13.45434 ], [ 92.87293, 13.45488 ], [ 92.87341, 13.45506 ], [ 92.87376, 13.45538 ], [ 92.87383, 13.45575 ], [ 92.87376, 13.4561 ], [ 92.87322, 13.45659 ], [ 92.87276, 13.45705 ], [ 92.87253, 13.45752 ], [ 92.87253, 13.45791 ], [ 92.87279, 13.45823 ], [ 92.87339, 13.45877 ], [ 92.87422, 13.459 ], [ 92.87546, 13.45913 ], [ 92.87579, 13.45941 ], [ 92.87589, 13.45981 ], [ 92.87582, 13.46032 ], [ 92.8756, 13.46076 ], [ 92.8751, 13.46108 ], [ 92.87413, 13.46113 ], [ 92.87322, 13.46099 ], [ 92.87265, 13.4612 ], [ 92.87203, 13.46166 ], [ 92.87163, 13.4622 ], [ 92.87118, 13.46287 ], [ 92.87096, 13.46328 ], [ 92.87096, 13.46392 ], [ 92.87127, 13.4654 ], [ 92.87146, 13.46605 ], [ 92.8717, 13.46644 ], [ 92.87197, 13.46709 ], [ 92.87197, 13.46779 ], [ 92.87209, 13.46836 ], [ 92.87232, 13.46906 ], [ 92.87237, 13.46938 ], [ 92.8719, 13.4707 ], [ 92.87185, 13.47172 ], [ 92.87195, 13.47263 ], [ 92.87204, 13.4728 ], [ 92.87247, 13.47274 ], [ 92.87342, 13.47274 ], [ 92.87375, 13.47261 ], [ 92.87422, 13.47207 ], [ 92.87462, 13.47146 ], [ 92.87514, 13.47103 ], [ 92.87548, 13.47086 ], [ 92.87588, 13.47086 ], [ 92.87612, 13.47092 ], [ 92.8764, 13.47134 ], [ 92.8764, 13.47213 ], [ 92.87646, 13.47364 ], [ 92.87668, 13.47491 ], [ 92.87702, 13.47566 ], [ 92.87786, 13.47657 ], [ 92.87861, 13.47691 ], [ 92.87936, 13.47711 ], [ 92.88024, 13.47713 ], [ 92.88099, 13.47686 ], [ 92.88169, 13.47684 ], [ 92.88227, 13.47722 ], [ 92.88306, 13.47761 ], [ 92.88351, 13.47776 ], [ 92.88424, 13.47771 ], [ 92.8851, 13.47771 ], [ 92.88636, 13.47842 ], [ 92.88754, 13.47917 ], [ 92.88812, 13.47919 ], [ 92.88876, 13.47883 ], [ 92.88955, 13.47829 ], [ 92.89039, 13.47794 ], [ 92.89092, 13.47785 ], [ 92.89171, 13.47808 ], [ 92.89227, 13.4781 ], [ 92.89301, 13.47793 ], [ 92.89333, 13.47762 ], [ 92.89383, 13.47749 ], [ 92.89513, 13.47778 ], [ 92.89588, 13.47749 ], [ 92.89646, 13.47678 ], [ 92.89752, 13.47622 ], [ 92.89857, 13.47626 ], [ 92.90028, 13.47757 ], [ 92.90033, 13.47759 ], [ 92.90058, 13.4779 ], [ 92.90063, 13.47847 ], [ 92.90039, 13.47884 ], [ 92.90041, 13.4793 ], [ 92.90035, 13.47976 ], [ 92.89994, 13.48021 ], [ 92.89992, 13.48098 ], [ 92.89997, 13.48148 ], [ 92.90014, 13.4822 ], [ 92.90064, 13.48259 ], [ 92.90115, 13.48276 ], [ 92.90136, 13.48309 ], [ 92.90184, 13.48344 ], [ 92.90246, 13.48394 ], [ 92.90282, 13.4845 ], [ 92.90312, 13.48509 ], [ 92.90323, 13.48565 ], [ 92.90312, 13.48608 ], [ 92.90274, 13.48648 ], [ 92.9022, 13.4871 ], [ 92.90197, 13.48794 ], [ 92.90199, 13.48871 ], [ 92.90218, 13.48937 ], [ 92.90261, 13.48964 ], [ 92.90325, 13.48983 ], [ 92.9037, 13.49012 ], [ 92.90394, 13.49039 ], [ 92.90403, 13.49066 ], [ 92.90383, 13.49091 ], [ 92.90345, 13.49091 ], [ 92.90326, 13.49114 ], [ 92.90323, 13.49141 ], [ 92.90343, 13.49193 ], [ 92.90341, 13.49239 ], [ 92.90324, 13.49264 ], [ 92.90262, 13.49266 ], [ 92.90196, 13.49264 ], [ 92.90145, 13.49289 ], [ 92.90098, 13.49349 ], [ 92.90063, 13.4943 ], [ 92.90043, 13.49519 ], [ 92.9006, 13.49602 ], [ 92.90125, 13.4971 ], [ 92.90201, 13.49801 ], [ 92.90264, 13.49851 ], [ 92.90338, 13.49905 ], [ 92.9041, 13.49952 ], [ 92.90506, 13.49982 ], [ 92.90555, 13.49984 ], [ 92.90664, 13.4993 ], [ 92.90735, 13.49912 ], [ 92.91002, 13.49908 ], [ 92.91125, 13.49884 ], [ 92.91212, 13.49838 ], [ 92.91286, 13.49828 ], [ 92.91343, 13.49842 ], [ 92.91423, 13.49905 ], [ 92.91497, 13.5002 ], [ 92.91556, 13.5009 ], [ 92.91642, 13.50124 ], [ 92.91792, 13.50163 ], [ 92.91939, 13.50181 ], [ 92.92109, 13.50169 ], [ 92.9227, 13.50103 ], [ 92.92443, 13.50043 ], [ 92.92586, 13.50047 ], [ 92.9271, 13.5004 ], [ 92.92755, 13.50054 ], [ 92.92856, 13.50054 ], [ 92.92888, 13.50067 ], [ 92.92955, 13.50114 ], [ 92.93014, 13.50167 ], [ 92.9301, 13.50216 ], [ 92.92981, 13.50261 ], [ 92.92901, 13.50346 ], [ 92.92872, 13.5039 ], [ 92.92811, 13.50431 ], [ 92.92739, 13.50449 ], [ 92.92698, 13.50492 ], [ 92.9265, 13.50674 ], [ 92.92595, 13.50739 ], [ 92.92506, 13.50831 ], [ 92.92473, 13.50916 ], [ 92.92477, 13.51066 ], [ 92.92411, 13.51164 ], [ 92.9236, 13.51217 ], [ 92.9231, 13.51233 ], [ 92.92268, 13.51226 ], [ 92.92157, 13.51201 ], [ 92.92093, 13.51199 ], [ 92.92025, 13.51156 ], [ 92.91958, 13.51078 ], [ 92.91868, 13.50998 ], [ 92.91807, 13.50892 ], [ 92.91779, 13.50818 ], [ 92.91747, 13.50763 ], [ 92.91696, 13.50703 ], [ 92.9164, 13.50671 ], [ 92.9154, 13.50632 ], [ 92.91511, 13.50631 ], [ 92.91457, 13.50658 ], [ 92.91387, 13.50723 ], [ 92.91347, 13.50773 ], [ 92.91365, 13.50848 ], [ 92.91359, 13.50947 ], [ 92.91361, 13.51029 ], [ 92.91379, 13.51125 ], [ 92.91406, 13.51199 ], [ 92.91543, 13.51449 ], [ 92.91653, 13.51562 ], [ 92.91718, 13.51617 ], [ 92.91794, 13.51635 ], [ 92.91862, 13.51636 ], [ 92.91917, 13.51631 ], [ 92.91981, 13.51607 ], [ 92.92059, 13.5157 ], [ 92.92136, 13.51544 ], [ 92.92198, 13.51544 ], [ 92.92262, 13.51568 ], [ 92.92319, 13.51599 ], [ 92.92385, 13.51653 ], [ 92.92523, 13.51815 ], [ 92.92535, 13.51872 ], [ 92.92511, 13.51907 ], [ 92.92469, 13.5193 ], [ 92.92396, 13.51923 ], [ 92.92366, 13.51953 ], [ 92.92356, 13.52008 ], [ 92.9232, 13.52027 ], [ 92.92285, 13.52017 ], [ 92.92264, 13.51982 ], [ 92.92232, 13.51937 ], [ 92.92182, 13.51921 ], [ 92.92129, 13.51927 ], [ 92.92091, 13.51937 ], [ 92.92076, 13.51968 ], [ 92.92078, 13.52005 ], [ 92.92066, 13.52037 ], [ 92.91938, 13.52101 ], [ 92.91906, 13.5217 ], [ 92.91885, 13.52207 ], [ 92.91871, 13.52201 ], [ 92.91843, 13.52162 ], [ 92.91827, 13.52103 ], [ 92.91814, 13.52034 ], [ 92.91791, 13.52003 ], [ 92.91686, 13.51993 ], [ 92.91604, 13.52017 ], [ 92.91533, 13.52054 ], [ 92.91468, 13.52118 ], [ 92.91405, 13.52201 ], [ 92.91373, 13.52283 ], [ 92.91342, 13.52354 ], [ 92.91315, 13.52473 ], [ 92.91313, 13.52638 ], [ 92.91296, 13.52673 ], [ 92.91262, 13.52689 ], [ 92.91218, 13.52724 ], [ 92.91193, 13.52787 ], [ 92.91206, 13.52875 ], [ 92.91208, 13.52922 ], [ 92.91229, 13.52975 ], [ 92.91274, 13.5303 ], [ 92.91295, 13.53081 ], [ 92.91313, 13.53163 ], [ 92.91373, 13.53242 ], [ 92.91425, 13.53321 ], [ 92.91479, 13.53442 ], [ 92.91508, 13.53483 ], [ 92.9154, 13.53508 ], [ 92.91577, 13.53529 ], [ 92.9162, 13.53562 ], [ 92.91626, 13.536 ], [ 92.91654, 13.53646 ], [ 92.91714, 13.53702 ], [ 92.91774, 13.53764 ], [ 92.91843, 13.5381 ], [ 92.91918, 13.53833 ], [ 92.91965, 13.53835 ], [ 92.92036, 13.53855 ], [ 92.921, 13.53889 ], [ 92.92164, 13.53912 ], [ 92.92188, 13.53914 ], [ 92.92205, 13.53893 ], [ 92.9223, 13.53847 ], [ 92.92252, 13.53799 ], [ 92.92256, 13.53759 ], [ 92.92256, 13.53707 ], [ 92.92265, 13.53662 ], [ 92.92286, 13.53641 ], [ 92.92309, 13.53632 ], [ 92.92344, 13.53634 ], [ 92.92376, 13.53655 ], [ 92.92382, 13.53678 ], [ 92.9237, 13.53703 ], [ 92.92363, 13.53732 ], [ 92.9238, 13.53776 ], [ 92.92419, 13.53847 ], [ 92.92466, 13.53909 ], [ 92.92481, 13.53932 ], [ 92.92456, 13.53982 ], [ 92.92462, 13.54003 ], [ 92.92481, 13.54028 ], [ 92.92513, 13.5404 ], [ 92.9255, 13.54036 ], [ 92.92584, 13.54005 ], [ 92.92616, 13.53992 ], [ 92.92665, 13.54009 ], [ 92.92703, 13.54011 ], [ 92.92727, 13.54025 ], [ 92.92768, 13.54065 ], [ 92.92819, 13.54075 ], [ 92.92903, 13.54067 ], [ 92.9304, 13.54048 ], [ 92.93179, 13.54035 ], [ 92.9333, 13.54039 ], [ 92.93499, 13.54029 ], [ 92.93594, 13.54054 ], [ 92.93791, 13.54053 ], [ 92.93853, 13.54032 ], [ 92.93904, 13.54009 ], [ 92.9394, 13.53976 ], [ 92.93962, 13.53947 ], [ 92.93977, 13.53905 ], [ 92.93994, 13.5388 ], [ 92.94024, 13.53851 ], [ 92.94041, 13.5382 ], [ 92.94071, 13.53799 ], [ 92.94105, 13.53784 ], [ 92.94129, 13.53734 ], [ 92.94159, 13.53728 ], [ 92.94176, 13.53743 ], [ 92.94182, 13.5377 ], [ 92.94182, 13.53805 ], [ 92.94191, 13.53826 ], [ 92.94208, 13.53824 ], [ 92.94223, 13.53799 ], [ 92.94227, 13.53743 ], [ 92.94249, 13.5373 ], [ 92.94259, 13.53751 ], [ 92.94277, 13.53811 ], [ 92.94294, 13.53892 ], [ 92.94317, 13.53917 ], [ 92.94343, 13.53932 ], [ 92.94377, 13.53934 ], [ 92.94407, 13.53923 ], [ 92.94442, 13.53886 ], [ 92.94448, 13.53855 ], [ 92.94454, 13.53773 ], [ 92.94459, 13.53742 ], [ 92.94491, 13.53717 ], [ 92.94553, 13.53694 ], [ 92.94634, 13.53694 ], [ 92.94799, 13.53744 ], [ 92.94877, 13.53787 ], [ 92.94893, 13.53833 ], [ 92.94889, 13.53895 ], [ 92.94893, 13.53968 ], [ 92.94889, 13.54167 ], [ 92.94879, 13.54261 ], [ 92.94905, 13.54346 ], [ 92.94935, 13.54406 ], [ 92.94992, 13.54445 ], [ 92.95052, 13.54458 ], [ 92.95211, 13.54479 ], [ 92.95404, 13.54529 ], [ 92.95519, 13.54548 ], [ 92.95602, 13.54556 ], [ 92.95664, 13.54546 ], [ 92.95726, 13.54523 ], [ 92.95758, 13.54502 ], [ 92.95777, 13.544783939393939 ], [ 92.95791, 13.54461 ], [ 92.95797, 13.544526 ], [ 92.95831, 13.54405 ], [ 92.95861, 13.5432 ], [ 92.95882, 13.54247 ], [ 92.95904, 13.54231 ], [ 92.95934, 13.54223 ], [ 92.95976, 13.54237 ], [ 92.95992, 13.54258 ], [ 92.95984, 13.54301 ], [ 92.95972, 13.54341 ], [ 92.95966, 13.54386 ], [ 92.95982, 13.54411 ], [ 92.96028, 13.54453 ], [ 92.96107, 13.54507 ], [ 92.96161, 13.5453 ], [ 92.96207, 13.54545 ], [ 92.96265, 13.54555 ], [ 92.96326, 13.54574 ], [ 92.9637, 13.5458 ], [ 92.96422, 13.54565 ], [ 92.96519, 13.54541 ], [ 92.96535, 13.54561 ], [ 92.96535, 13.5458 ], [ 92.96489, 13.54615 ], [ 92.96473, 13.54642 ], [ 92.96473, 13.54661 ], [ 92.96507, 13.54663 ], [ 92.96549, 13.54655 ], [ 92.96581, 13.54622 ], [ 92.96614, 13.54597 ], [ 92.96634, 13.54591 ], [ 92.96654, 13.54601 ], [ 92.96654, 13.54616 ], [ 92.96622, 13.54663 ], [ 92.96525, 13.54729 ], [ 92.96474, 13.54752 ], [ 92.96412, 13.5476 ], [ 92.9638, 13.54773 ], [ 92.96374, 13.54796 ], [ 92.9638, 13.54829 ], [ 92.96412, 13.5487 ], [ 92.96454, 13.54918 ], [ 92.96524, 13.54964 ], [ 92.96569, 13.54989 ], [ 92.96603, 13.54989 ], [ 92.9668, 13.54964 ], [ 92.96769, 13.54913 ], [ 92.96847, 13.54855 ], [ 92.96914, 13.54809 ], [ 92.96954, 13.5477 ], [ 92.9697, 13.54727 ], [ 92.96966, 13.54695 ], [ 92.96966, 13.54662 ], [ 92.96974, 13.54638 ], [ 92.97005, 13.54613 ], [ 92.97178, 13.54534 ], [ 92.97232, 13.54486 ], [ 92.97257, 13.54454 ], [ 92.97297, 13.54363 ], [ 92.97283, 13.54315 ], [ 92.97259, 13.54255 ], [ 92.97271, 13.54201 ], [ 92.97291, 13.54151 ], [ 92.97322, 13.54114 ], [ 92.974, 13.54037 ], [ 92.9743, 13.53992 ], [ 92.97458, 13.53926 ], [ 92.9747, 13.53888 ], [ 92.97545, 13.53781 ], [ 92.97628, 13.53712 ], [ 92.97694, 13.53663 ], [ 92.97797, 13.53627 ], [ 92.97847, 13.53627 ], [ 92.97869, 13.53636 ], [ 92.97881, 13.53667 ], [ 92.97883, 13.53708 ], [ 92.97887, 13.53725 ], [ 92.97911, 13.53725 ], [ 92.97948, 13.53704 ], [ 92.97964, 13.53667 ], [ 92.97964, 13.53624 ], [ 92.97982, 13.53576 ], [ 92.9803, 13.53541 ], [ 92.98111, 13.53541 ], [ 92.98179, 13.5356 ], [ 92.9824, 13.53591 ], [ 92.98306, 13.53661 ], [ 92.9834, 13.53692 ], [ 92.98427, 13.5374 ], [ 92.98467, 13.53778 ], [ 92.98513, 13.53844 ], [ 92.98521, 13.53896 ], [ 92.98477, 13.53952 ], [ 92.9844, 13.53975 ], [ 92.98418, 13.54021 ], [ 92.98396, 13.54089 ], [ 92.98388, 13.54159 ], [ 92.98343, 13.54232 ], [ 92.98345, 13.54288 ], [ 92.98382, 13.54336 ], [ 92.98428, 13.54407 ], [ 92.98434, 13.54459 ], [ 92.98407, 13.54519 ], [ 92.98357, 13.54562 ], [ 92.98214, 13.54579 ], [ 92.98174, 13.54591 ], [ 92.98131, 13.54628 ], [ 92.98101, 13.54691 ], [ 92.98093, 13.54761 ], [ 92.98048, 13.54865 ], [ 92.98012, 13.54917 ], [ 92.97994, 13.54979 ], [ 92.9798, 13.55043 ], [ 92.97949, 13.55089 ], [ 92.97931, 13.55207 ], [ 92.97945, 13.55404 ], [ 92.97963, 13.55518 ], [ 92.98035, 13.55624 ], [ 92.98077, 13.55675 ], [ 92.9811, 13.55675 ], [ 92.98164, 13.55659 ], [ 92.98233, 13.55634 ], [ 92.98283, 13.55609 ], [ 92.98319, 13.5558 ], [ 92.98349, 13.5557 ], [ 92.9838, 13.55576 ], [ 92.98404, 13.55591 ], [ 92.98408, 13.55618 ], [ 92.98404, 13.55649 ], [ 92.98383, 13.55692 ], [ 92.98379, 13.55726 ], [ 92.98371, 13.5575 ], [ 92.98331, 13.55783 ], [ 92.98273, 13.55826 ], [ 92.9825, 13.55855 ], [ 92.98254, 13.55876 ], [ 92.98291, 13.55892 ], [ 92.98329, 13.55895 ], [ 92.98357, 13.55924 ], [ 92.98365, 13.55971 ], [ 92.98337, 13.56017 ], [ 92.98302, 13.56058 ], [ 92.98292, 13.56102 ], [ 92.98294, 13.56148 ], [ 92.98306, 13.56187 ], [ 92.9834, 13.5621 ], [ 92.98387, 13.56226 ], [ 92.98419, 13.56269 ], [ 92.98437, 13.56315 ], [ 92.98473, 13.56396 ], [ 92.98493, 13.56467 ], [ 92.98515, 13.56498 ], [ 92.98493, 13.56494 ], [ 92.98461, 13.56477 ], [ 92.98423, 13.56448 ], [ 92.98392, 13.56433 ], [ 92.9836, 13.56444 ], [ 92.98334, 13.56458 ], [ 92.98302, 13.56497 ], [ 92.98282, 13.56545 ], [ 92.98275, 13.56741 ], [ 92.98283, 13.56845 ], [ 92.98321, 13.56975 ], [ 92.98343, 13.57025 ], [ 92.98404, 13.5709 ], [ 92.98484, 13.57162 ], [ 92.98586, 13.57291 ], [ 92.98678, 13.57387 ], [ 92.98787, 13.57463 ], [ 92.98865, 13.5749 ], [ 92.98929, 13.57493 ], [ 92.99044, 13.5747 ], [ 92.99123, 13.57422 ], [ 92.99179, 13.57361 ], [ 92.99253, 13.57272 ], [ 92.9932, 13.57239 ], [ 92.99403, 13.57152 ], [ 92.99471, 13.571 ], [ 92.99536, 13.57011 ], [ 92.99818, 13.56803 ], [ 92.99917, 13.56719 ], [ 92.99941, 13.56731 ], [ 92.99995, 13.56752 ], [ 93.0009, 13.56752 ], [ 93.00193, 13.56736 ], [ 93.00239, 13.56721 ], [ 93.00297, 13.5669 ], [ 93.0033, 13.56647 ], [ 93.00356, 13.5664 ], [ 93.0039, 13.56663 ], [ 93.0041, 13.56667 ], [ 93.00441, 13.56655 ], [ 93.00471, 13.56601 ], [ 93.00473, 13.56564 ], [ 93.00467, 13.56495 ], [ 93.00443, 13.56449 ], [ 93.0035, 13.56362 ], [ 93.00308, 13.56318 ], [ 93.00296, 13.56296 ], [ 93.00306, 13.56271 ], [ 93.00328, 13.5625 ], [ 93.00357, 13.56244 ], [ 93.00403, 13.5626 ], [ 93.00551, 13.56303 ], [ 93.00575, 13.56303 ], [ 93.00599, 13.56272 ], [ 93.00636, 13.56175 ], [ 93.00712, 13.5605 ], [ 93.00733, 13.55982 ], [ 93.00733, 13.55938 ], [ 93.00708, 13.55893 ], [ 93.00705, 13.5586 ], [ 93.00721, 13.55822 ], [ 93.00743, 13.55736 ], [ 93.00761, 13.55637 ], [ 93.00763, 13.55502 ], [ 93.00754, 13.55444 ], [ 93.00719, 13.55402 ], [ 93.00711, 13.55367 ], [ 93.00719, 13.55321 ], [ 93.00768, 13.55284 ], [ 93.008, 13.55212 ], [ 93.00802, 13.55108 ], [ 93.00841, 13.54996 ], [ 93.00885, 13.54836 ], [ 93.00946, 13.54666 ], [ 93.00986, 13.54565 ], [ 93.01043, 13.54511 ], [ 93.01079, 13.54494 ], [ 93.01129, 13.54511 ], [ 93.01168, 13.54548 ], [ 93.01244, 13.54674 ], [ 93.01265, 13.5475 ], [ 93.01312, 13.54875 ], [ 93.01329, 13.54964 ], [ 93.0131, 13.55055 ], [ 93.01331, 13.55153 ], [ 93.01338, 13.55206 ], [ 93.01349, 13.5525 ], [ 93.01359, 13.55331 ], [ 93.01363, 13.55379 ], [ 93.01377, 13.55401 ], [ 93.01407, 13.55425 ], [ 93.01419, 13.5544 ], [ 93.01431, 13.55491 ], [ 93.01428, 13.55551 ], [ 93.01431, 13.55567 ], [ 93.01447, 13.55578 ], [ 93.01476, 13.55581 ], [ 93.01464, 13.55592 ], [ 93.01457, 13.55594 ], [ 93.01456, 13.55603 ], [ 93.01461, 13.55604 ], [ 93.01465, 13.55608 ], [ 93.01462, 13.55623 ], [ 93.01449, 13.5563 ], [ 93.01452, 13.55668 ], [ 93.01456, 13.55699 ], [ 93.01468, 13.55701 ], [ 93.01473, 13.55704 ], [ 93.01478, 13.55701 ], [ 93.01473, 13.55695 ], [ 93.01477, 13.55688 ], [ 93.015, 13.55688 ], [ 93.01497, 13.55678 ], [ 93.01478, 13.55661 ], [ 93.01474, 13.55648 ], [ 93.01488, 13.55626 ], [ 93.01494, 13.55614 ], [ 93.01504, 13.55613 ], [ 93.01513, 13.55634 ], [ 93.01518, 13.55635 ], [ 93.01535, 13.55612 ], [ 93.01534, 13.55594 ], [ 93.01546, 13.5559 ], [ 93.01558, 13.55595 ], [ 93.0156, 13.5561 ], [ 93.01555, 13.55617 ], [ 93.01563, 13.55627 ], [ 93.01567, 13.55636 ], [ 93.0161, 13.5568 ], [ 93.0162, 13.55694 ], [ 93.01615, 13.55723 ], [ 93.01607, 13.55744 ], [ 93.01613, 13.5576 ], [ 93.01623, 13.55775 ], [ 93.01652, 13.55838 ], [ 93.01667, 13.55886 ], [ 93.01666, 13.55946 ], [ 93.01679, 13.55969 ], [ 93.01702, 13.55984 ], [ 93.0173, 13.55986 ], [ 93.01755, 13.55973 ], [ 93.01795, 13.55973 ], [ 93.01823, 13.55991 ], [ 93.01843, 13.56018 ], [ 93.01863, 13.56065 ], [ 93.01864, 13.56165 ], [ 93.01844, 13.562 ], [ 93.01817, 13.56222 ], [ 93.01789, 13.56222 ], [ 93.01774, 13.56209 ], [ 93.01754, 13.56197 ], [ 93.01729, 13.56194 ], [ 93.01705, 13.56204 ], [ 93.01695, 13.56223 ], [ 93.01741, 13.56327 ], [ 93.01718, 13.56348 ], [ 93.01709, 13.56372 ], [ 93.01697, 13.56386 ], [ 93.01678, 13.56392 ], [ 93.01633, 13.56375 ], [ 93.0159, 13.5637 ], [ 93.01576, 13.56371 ], [ 93.01563, 13.564 ], [ 93.01563, 13.56418 ], [ 93.01574, 13.56428 ], [ 93.01624, 13.56427 ], [ 93.01644, 13.56438 ], [ 93.01676, 13.56462 ], [ 93.01739, 13.56484 ], [ 93.01763, 13.56484 ], [ 93.01789, 13.56476 ], [ 93.01852, 13.56446 ], [ 93.01875, 13.56438 ], [ 93.01894, 13.56443 ], [ 93.01913, 13.56459 ], [ 93.01917, 13.5647 ], [ 93.01918, 13.56513 ], [ 93.01913, 13.56531 ], [ 93.01888, 13.56555 ], [ 93.01866, 13.56598 ], [ 93.01835, 13.56635 ], [ 93.01796, 13.5667 ], [ 93.01727, 13.56698 ], [ 93.0171, 13.56724 ], [ 93.01683, 13.56746 ], [ 93.01669, 13.56761 ], [ 93.01644, 13.56808 ], [ 93.01621, 13.5689 ], [ 93.01617, 13.56922 ], [ 93.01625, 13.56967 ], [ 93.01631, 13.56982 ], [ 93.01647, 13.57047 ], [ 93.01659, 13.57075 ], [ 93.01748, 13.57141 ], [ 93.01821, 13.57202 ], [ 93.01832, 13.5722 ], [ 93.01846, 13.57225 ], [ 93.01875, 13.57221 ], [ 93.01891, 13.57222 ], [ 93.01897, 13.57238 ], [ 93.01887, 13.57265 ], [ 93.01887, 13.57284 ], [ 93.01893, 13.57298 ], [ 93.01923, 13.57324 ], [ 93.0195, 13.5737 ], [ 93.01965, 13.57387 ], [ 93.01979, 13.5739 ], [ 93.01991, 13.57389 ], [ 93.02004, 13.57383 ], [ 93.02005, 13.57366 ], [ 93.01975, 13.5731 ], [ 93.01977, 13.57256 ], [ 93.01982, 13.57223 ], [ 93.02001, 13.57172 ], [ 93.02013, 13.5715 ], [ 93.02036, 13.57126 ], [ 93.02065, 13.57119 ], [ 93.02145, 13.57126 ], [ 93.02267, 13.57187 ], [ 93.02345, 13.57231 ], [ 93.02406, 13.57258 ], [ 93.02471, 13.57314 ], [ 93.02473, 13.5733 ], [ 93.02478, 13.57343 ], [ 93.02506, 13.57361 ], [ 93.02516, 13.57374 ], [ 93.0252, 13.57385 ], [ 93.02527, 13.5739 ], [ 93.02553, 13.57425 ], [ 93.02576, 13.57447 ], [ 93.02602, 13.5748 ], [ 93.0262, 13.57516 ], [ 93.02639, 13.57548 ], [ 93.02639, 13.57557 ], [ 93.0263, 13.57571 ], [ 93.02615, 13.57578 ], [ 93.02608, 13.57577 ], [ 93.02604, 13.57574 ], [ 93.02596, 13.57554 ], [ 93.0257, 13.57517 ], [ 93.02562, 13.57512 ], [ 93.02557, 13.57503 ], [ 93.02547, 13.57496 ], [ 93.02546, 13.5749 ], [ 93.02522, 13.57473 ], [ 93.02519, 13.57459 ], [ 93.02521, 13.57455 ], [ 93.02516, 13.57441 ], [ 93.02511, 13.57444 ], [ 93.0251, 13.5745 ], [ 93.02499, 13.57449 ], [ 93.02495, 13.57439 ], [ 93.0249, 13.57438 ], [ 93.02484, 13.57441 ], [ 93.02482, 13.57448 ], [ 93.02475, 13.5745 ], [ 93.02465, 13.57449 ], [ 93.02444, 13.57454 ], [ 93.02442, 13.57457 ], [ 93.02442, 13.57466 ], [ 93.02453, 13.57481 ], [ 93.02454, 13.5749 ], [ 93.02458, 13.57494 ], [ 93.02475, 13.57499 ], [ 93.02481, 13.57497 ], [ 93.02497, 13.57501 ], [ 93.02522, 13.57514 ], [ 93.02525, 13.57518 ], [ 93.02531, 13.57521 ], [ 93.02532, 13.57534 ], [ 93.02529, 13.57542 ], [ 93.02532, 13.57543 ], [ 93.02534, 13.57541 ], [ 93.02538, 13.57545 ], [ 93.02539, 13.5755 ], [ 93.02537, 13.57552 ], [ 93.02529, 13.57549 ], [ 93.02526, 13.57552 ], [ 93.02538, 13.5756 ], [ 93.02546, 13.57561 ], [ 93.02548, 13.57569 ], [ 93.02536, 13.57579 ], [ 93.02542, 13.57587 ], [ 93.02545, 13.57597 ], [ 93.02554, 13.57601 ], [ 93.02562, 13.57612 ], [ 93.02562, 13.57618 ], [ 93.02555, 13.57622 ], [ 93.02566, 13.57637 ], [ 93.02567, 13.57642 ], [ 93.02572, 13.5764 ], [ 93.02575, 13.57624 ], [ 93.02578, 13.57624 ], [ 93.02579, 13.57632 ], [ 93.02573, 13.57656 ], [ 93.02575, 13.57664 ], [ 93.02581, 13.57667 ], [ 93.02595, 13.57667 ], [ 93.02606, 13.57672 ], [ 93.02618, 13.57695 ], [ 93.02657, 13.57728 ], [ 93.02664, 13.57747 ], [ 93.02666, 13.57774 ], [ 93.02656, 13.57813 ], [ 93.02656, 13.57825 ], [ 93.0266, 13.57835 ], [ 93.02705, 13.57895 ], [ 93.02719, 13.57903 ], [ 93.02735, 13.57902 ], [ 93.02747, 13.57892 ], [ 93.02755, 13.57871 ], [ 93.02766, 13.57855 ], [ 93.02793, 13.57829 ], [ 93.02798, 13.57817 ], [ 93.02798, 13.57795 ], [ 93.02811, 13.5776 ], [ 93.02818, 13.57756 ], [ 93.02823, 13.57746 ], [ 93.02821, 13.57726 ], [ 93.0283, 13.57687 ], [ 93.02838, 13.57665 ], [ 93.02868, 13.57618 ], [ 93.02883, 13.576 ], [ 93.02898, 13.57567 ], [ 93.02894, 13.57543 ], [ 93.02896, 13.5749 ], [ 93.0291, 13.57428 ], [ 93.02916, 13.5738 ], [ 93.02914, 13.57337 ], [ 93.02926, 13.57279 ], [ 93.02946, 13.57225 ], [ 93.02974, 13.57079 ], [ 93.02994, 13.57025 ], [ 93.03017, 13.56982 ], [ 93.03069, 13.56865 ], [ 93.03114, 13.56816 ], [ 93.03121, 13.56804 ], [ 93.03171, 13.56646 ], [ 93.03194, 13.56615 ], [ 93.03253, 13.56556 ], [ 93.03317, 13.56466 ], [ 93.03345, 13.56393 ], [ 93.03379, 13.56225 ], [ 93.03375, 13.56175 ], [ 93.03378, 13.56158 ], [ 93.03389, 13.5614 ], [ 93.03426, 13.56034 ], [ 93.03438, 13.55981 ], [ 93.03453, 13.55951 ], [ 93.03472, 13.5589 ], [ 93.03475, 13.55861 ], [ 93.03472, 13.55835 ], [ 93.03475, 13.5581 ], [ 93.03474, 13.55798 ], [ 93.03505, 13.5573 ], [ 93.03517, 13.55713 ], [ 93.03542, 13.55694 ], [ 93.0355, 13.55679 ], [ 93.03552, 13.55653 ], [ 93.03547, 13.55571 ], [ 93.03558, 13.55533 ], [ 93.03587, 13.55492 ], [ 93.03621, 13.55435 ], [ 93.03621, 13.55394 ], [ 93.03631, 13.55318 ], [ 93.03645, 13.55267 ], [ 93.03687, 13.55206 ], [ 93.03757, 13.55127 ], [ 93.03814, 13.55046 ], [ 93.03856, 13.54955 ], [ 93.03888, 13.54868 ], [ 93.03915, 13.54777 ], [ 93.03926, 13.54713 ], [ 93.03941, 13.54652 ], [ 93.03944, 13.5456 ], [ 93.03923, 13.54493 ], [ 93.03903, 13.54461 ], [ 93.03898, 13.5443 ], [ 93.03926, 13.54374 ], [ 93.03969, 13.54319 ], [ 93.03986, 13.54278 ], [ 93.04057, 13.5406 ], [ 93.04065, 13.53968 ], [ 93.0408, 13.53883 ], [ 93.04083, 13.53835 ], [ 93.0408, 13.53804 ], [ 93.04083, 13.53736 ], [ 93.04125, 13.53537 ], [ 93.04168, 13.5339 ], [ 93.04204, 13.53285 ], [ 93.04241, 13.53223 ], [ 93.04268, 13.53185 ], [ 93.04315, 13.53129 ], [ 93.04348, 13.53058 ], [ 93.04419, 13.52967 ], [ 93.04456, 13.52899 ], [ 93.04463, 13.52858 ], [ 93.04453, 13.528 ], [ 93.04451, 13.52759 ], [ 93.04458, 13.52705 ], [ 93.04478, 13.52617 ], [ 93.04475, 13.52566 ], [ 93.04459, 13.52501 ], [ 93.04428, 13.52421 ], [ 93.04395, 13.52319 ], [ 93.04349, 13.52245 ], [ 93.04286, 13.52118 ], [ 93.04279, 13.52062 ], [ 93.04268, 13.52011 ], [ 93.04268, 13.51895 ], [ 93.04271, 13.51824 ], [ 93.04288, 13.51702 ], [ 93.04324, 13.51582 ], [ 93.04346, 13.51435 ], [ 93.04364, 13.5128 ], [ 93.04364, 13.51157 ], [ 93.04329, 13.51053 ], [ 93.04289, 13.5102 ], [ 93.04259, 13.50958 ], [ 93.04275, 13.50873 ], [ 93.04322, 13.50717 ], [ 93.04359, 13.50651 ], [ 93.04366, 13.50589 ], [ 93.04364, 13.50478 ], [ 93.0434, 13.50424 ], [ 93.04297, 13.50345 ], [ 93.04218, 13.50225 ], [ 93.04148, 13.50132 ], [ 93.04034, 13.49993 ], [ 93.04018, 13.49966 ], [ 93.03995, 13.49906 ], [ 93.03982, 13.49823 ], [ 93.03999, 13.49489 ], [ 93.0401, 13.49437 ], [ 93.0409, 13.49309 ], [ 93.04103, 13.4926 ], [ 93.04102, 13.49203 ], [ 93.04093, 13.49145 ], [ 93.0407, 13.49075 ], [ 93.04037, 13.49014 ], [ 93.0398, 13.48932 ], [ 93.03967, 13.48869 ], [ 93.03954, 13.48757 ], [ 93.0396, 13.48681 ], [ 93.03958, 13.48645 ], [ 93.03945, 13.48622 ], [ 93.03912, 13.48606 ], [ 93.03855, 13.48602 ], [ 93.03824, 13.4858 ], [ 93.03749, 13.48516 ], [ 93.03743, 13.48491 ], [ 93.03716, 13.48473 ], [ 93.03686, 13.48473 ], [ 93.03621, 13.4851 ], [ 93.03594, 13.48514 ], [ 93.03563, 13.48494 ], [ 93.03514, 13.48443 ], [ 93.03502, 13.4839 ], [ 93.03507, 13.48326 ], [ 93.0352, 13.48239 ], [ 93.03501, 13.4819 ], [ 93.03499, 13.48153 ], [ 93.03527, 13.48119 ], [ 93.03563, 13.4811 ], [ 93.03606, 13.48108 ], [ 93.03634, 13.48109 ], [ 93.03677, 13.48121 ], [ 93.03709, 13.48116 ], [ 93.03745, 13.48106 ], [ 93.03777, 13.48065 ], [ 93.03782, 13.47974 ], [ 93.03735, 13.479 ], [ 93.03674, 13.47792 ], [ 93.03561, 13.47696 ], [ 93.03483, 13.47607 ], [ 93.03437, 13.47503 ], [ 93.03427, 13.4744 ], [ 93.03426, 13.47414 ], [ 93.03443, 13.47353 ], [ 93.03466, 13.47331 ], [ 93.03492, 13.47311 ], [ 93.03515, 13.4721 ], [ 93.03516, 13.4716 ], [ 93.03529, 13.47102 ], [ 93.03532, 13.47058 ], [ 93.03514, 13.47025 ], [ 93.03498, 13.47001 ], [ 93.03477, 13.4699 ], [ 93.03449, 13.46971 ], [ 93.0343, 13.46924 ], [ 93.03446, 13.46713 ], [ 93.03393, 13.46639 ], [ 93.03324, 13.46557 ], [ 93.03243, 13.4649 ], [ 93.03215, 13.46471 ], [ 93.03183, 13.46458 ], [ 93.03134, 13.46453 ], [ 93.03085, 13.46457 ], [ 93.03029, 13.46491 ], [ 93.02949, 13.46547 ], [ 93.02803, 13.46608 ], [ 93.02693, 13.46635 ], [ 93.02631, 13.46657 ], [ 93.02571, 13.4669 ], [ 93.02526, 13.46724 ], [ 93.02489, 13.46763 ], [ 93.02446, 13.46813 ], [ 93.02397, 13.46813 ], [ 93.02328, 13.46773 ], [ 93.02252, 13.46736 ], [ 93.02187, 13.46732 ], [ 93.02123, 13.4674 ], [ 93.02069, 13.46721 ], [ 93.0202, 13.46721 ], [ 93.01963, 13.46729 ], [ 93.01913, 13.46707 ], [ 93.01864, 13.46662 ], [ 93.0181, 13.4657 ], [ 93.01799, 13.46496 ], [ 93.01799, 13.46436 ], [ 93.01821, 13.46355 ], [ 93.01859, 13.46325 ], [ 93.02021, 13.46239 ], [ 93.02109, 13.46256 ], [ 93.02174, 13.46265 ], [ 93.02242, 13.46265 ], [ 93.02287, 13.4626 ], [ 93.02343, 13.46245 ], [ 93.02389, 13.46213 ], [ 93.02462, 13.46154 ], [ 93.02518, 13.46119 ], [ 93.02574, 13.46112 ], [ 93.02656, 13.46125 ], [ 93.02755, 13.46158 ], [ 93.02831, 13.46158 ], [ 93.02917, 13.46143 ], [ 93.02967, 13.46126 ], [ 93.03019, 13.46099 ], [ 93.03062, 13.46065 ], [ 93.03107, 13.46011 ], [ 93.0315, 13.45899 ], [ 93.03146, 13.45838 ], [ 93.0307, 13.45777 ], [ 93.03053, 13.4576 ], [ 93.0307, 13.45739 ], [ 93.03136, 13.45701 ], [ 93.03188, 13.45661 ], [ 93.03251, 13.45648 ], [ 93.03277, 13.45633 ], [ 93.03304, 13.45603 ], [ 93.03334, 13.45526 ], [ 93.0333, 13.45477 ], [ 93.03335, 13.45437 ], [ 93.03347, 13.45404 ], [ 93.03399, 13.4537 ], [ 93.03444, 13.45335 ], [ 93.03477, 13.45271 ], [ 93.03481, 13.45145 ], [ 93.03456, 13.4505 ], [ 93.03392, 13.44995 ], [ 93.03379, 13.44955 ], [ 93.03379, 13.44894 ], [ 93.03385, 13.44819 ], [ 93.03416935483871, 13.44753 ], [ 93.0343, 13.44726 ], [ 93.03483, 13.44604 ], [ 93.03483, 13.44513 ], [ 93.03513, 13.44407 ], [ 93.03561, 13.4427 ], [ 93.0356, 13.44214 ], [ 93.03516, 13.4419 ], [ 93.03445, 13.44019 ], [ 93.03383, 13.43727 ], [ 93.03339, 13.43427 ], [ 93.03242, 13.43316 ], [ 93.0318, 13.43316 ], [ 93.0303, 13.43419 ], [ 93.02845, 13.43427 ], [ 93.0266, 13.43427 ], [ 93.02395, 13.43368 ], [ 93.02148, 13.43282 ], [ 93.01998, 13.4317 ], [ 93.0200006, 13.431169 ], [ 93.0210625, 13.430517 ], [ 93.0224304, 13.4300171 ], [ 93.0243777, 13.4285728 ], [ 93.02692, 13.42817 ], [ 93.0303987, 13.4275074 ], [ 93.03194, 13.42551 ], [ 93.03344, 13.42439 ], [ 93.03494, 13.42474 ], [ 93.03715, 13.42637 ], [ 93.039, 13.42748 ], [ 93.04006, 13.42705 ], [ 93.04006, 13.42585 ], [ 93.03997, 13.4243 ], [ 93.03882, 13.42276 ], [ 93.03758, 13.42139 ], [ 93.036, 13.4195 ], [ 93.03511, 13.41796 ], [ 93.03555, 13.41624 ], [ 93.03758, 13.41521 ], [ 93.04014, 13.41487 ], [ 93.04128, 13.4135 ], [ 93.04261, 13.41135 ], [ 93.04349, 13.40921 ], [ 93.04313, 13.40646 ], [ 93.04419, 13.40449 ], [ 93.04639, 13.40371 ], [ 93.04888, 13.40405 ], [ 93.05214, 13.4056 ], [ 93.05364, 13.40843 ], [ 93.05479, 13.40997 ], [ 93.05629, 13.41048 ], [ 93.05823, 13.41323 ], [ 93.05947, 13.41752 ], [ 93.06009, 13.42043 ], [ 93.06115, 13.42052 ], [ 93.06194, 13.41992 ], [ 93.06159, 13.41803 ], [ 93.06114, 13.41434 ], [ 93.06026, 13.40843 ], [ 93.06008, 13.40646 ], [ 93.06017, 13.405 ], [ 93.05893, 13.40414 ], [ 93.05787, 13.40166 ], [ 93.05805, 13.39908 ], [ 93.0591, 13.39677 ], [ 93.06051, 13.39642 ], [ 93.06193, 13.39831 ], [ 93.0621, 13.39865 ], [ 93.06299, 13.40114 ], [ 93.06307, 13.40148 ], [ 93.06502, 13.40423 ], [ 93.06696, 13.40525 ], [ 93.06837, 13.4068 ], [ 93.06996, 13.40697 ], [ 93.06996, 13.40619 ], [ 93.06951, 13.40448 ], [ 93.06819, 13.40216 ], [ 93.06775, 13.39993 ], [ 93.06854, 13.3983 ], [ 93.06889, 13.3971 ], [ 93.06801, 13.39659 ], [ 93.06713, 13.39565 ], [ 93.06607, 13.39487 ], [ 93.0658, 13.39488 ], [ 93.06439, 13.39453 ], [ 93.06333, 13.39308 ], [ 93.06254, 13.39239 ], [ 93.06175, 13.39256 ], [ 93.06025, 13.39265 ], [ 93.05795, 13.39274 ], [ 93.05646, 13.39325 ], [ 93.0554, 13.39291 ], [ 93.05531, 13.39179 ], [ 93.05531, 13.39034 ], [ 93.05434, 13.38991 ], [ 93.0524, 13.39128 ], [ 93.05169, 13.39008 ], [ 93.05169, 13.38828 ], [ 93.05077, 13.38607 ], [ 93.05024, 13.38341 ], [ 93.04997, 13.38092 ], [ 93.04979, 13.37861 ], [ 93.04865, 13.37706 ], [ 93.04856, 13.37501 ], [ 93.048093, 13.3749173 ], [ 93.0478348, 13.3749173 ], [ 93.0472667, 13.3751685 ], [ 93.0466987, 13.3764747 ], [ 93.046079, 13.3772283 ], [ 93.0453561, 13.3776302 ], [ 93.0442716, 13.3776302 ], [ 93.042929, 13.376525 ], [ 93.0416897, 13.3751685 ], [ 93.0394175, 13.37547 ], [ 93.0355962, 13.3758216 ], [ 93.0334273, 13.3756709 ], [ 93.0326527, 13.3756207 ], [ 93.0303289, 13.3747666 ], [ 93.0273855, 13.3737618 ], [ 93.0270756, 13.3740633 ], [ 93.0265592, 13.3735609 ], [ 93.0256297, 13.3732092 ], [ 93.0249584, 13.3733599 ], [ 93.0209822, 13.3755202 ], [ 93.0181936, 13.3764747 ], [ 93.0178322, 13.3754197 ], [ 93.0191748, 13.3746159 ], [ 93.0211887, 13.3745154 ], [ 93.0227896, 13.3736111 ], [ 93.0254748, 13.3722546 ], [ 93.0276953, 13.3725561 ], [ 93.0305355, 13.3736111 ], [ 93.0327044, 13.3739125 ], [ 93.0346667, 13.3744652 ], [ 93.0361642, 13.3744652 ], [ 93.0368872, 13.3732594 ], [ 93.0367839, 13.3716518 ], [ 93.0369388, 13.3704963 ], [ 93.0375585, 13.3696422 ], [ 93.0384364, 13.3690895 ], [ 93.0398306, 13.3689891 ], [ 93.0409667, 13.3682354 ], [ 93.0407601, 13.3677833 ], [ 93.0402087, 13.3676205 ], [ 93.03938, 13.367 ], [ 93.03726, 13.36572 ], [ 93.03673, 13.36477 ], [ 93.03699, 13.36357 ], [ 93.03602, 13.36297 ], [ 93.03461, 13.36246 ], [ 93.03408, 13.36092 ], [ 93.03426, 13.36031 ], [ 93.03541, 13.3604 ], [ 93.03708, 13.36023 ], [ 93.03928, 13.35825 ], [ 93.04016, 13.35585 ], [ 93.04019, 13.3529 ], [ 93.03876, 13.35127 ], [ 93.03588, 13.35031 ], [ 93.0336, 13.34884 ], [ 93.03201, 13.34638 ], [ 93.03098, 13.34534 ], [ 93.02792, 13.34594 ], [ 93.02469, 13.34835 ], [ 93.02083, 13.35031 ], [ 93.01642, 13.35109 ], [ 93.01419, 13.35105 ], [ 93.01032, 13.35301 ], [ 93.00379, 13.35327 ], [ 93.00052, 13.35184 ], [ 92.99825, 13.35012 ], [ 92.99526, 13.34664 ], [ 92.99387, 13.34573 ], [ 92.99112, 13.34212 ], [ 92.99023, 13.34131 ], [ 92.9888, 13.33681 ], [ 92.98871, 13.33165 ], [ 92.98761, 13.32893 ], [ 92.9838, 13.32932 ], [ 92.97978, 13.33356 ], [ 92.97954, 13.33369 ], [ 92.97706, 13.33932 ], [ 92.97676, 13.34089 ], [ 92.97374, 13.34558 ], [ 92.9728, 13.34657 ], [ 92.96801, 13.34725 ], [ 92.96629, 13.34756 ], [ 92.96188, 13.34533 ], [ 92.95913, 13.33871 ], [ 92.96085, 13.33252 ], [ 92.96499, 13.32827 ], [ 92.96996, 13.32603 ], [ 92.97534, 13.32473 ], [ 92.98068, 13.3226 ], [ 92.98519, 13.32134 ], [ 92.98931, 13.31949 ], [ 92.99351, 13.31669 ], [ 92.994923934426225, 13.31623 ], [ 92.99726, 13.31547 ], [ 92.9983678, 13.3144357 ], [ 93.000064, 13.313733 ], [ 93.0011258, 13.3134942 ], [ 93.003261469554573, 13.31623 ], [ 93.0050165, 13.3184782 ], [ 93.006776, 13.3192883 ], [ 93.0091235, 13.3204911 ], [ 93.0092479, 13.3170332 ], [ 93.008955372983976, 13.31623 ], [ 93.0071171, 13.3111826 ], [ 93.0064444, 13.3090959 ], [ 93.00697, 13.3084822 ], [ 93.0078739, 13.3094641 ], [ 93.01149, 13.30851 ], [ 93.01324, 13.30676 ], [ 93.01341, 13.30649 ], [ 93.0138022, 13.3036746 ], [ 93.0140334, 13.3028563 ], [ 93.0132346, 13.3021607 ], [ 93.0124357, 13.3006264 ], [ 93.0124728, 13.3002479 ], [ 93.0125198, 13.2997671 ], [ 93.0137181, 13.2986828 ], [ 93.0143908, 13.297844 ], [ 93.015526, 13.2975985 ], [ 93.0170396, 13.2975371 ], [ 93.0177543, 13.2980895 ], [ 93.0178594, 13.2976394 ], [ 93.0171447, 13.2968006 ], [ 93.0177333, 13.2966983 ], [ 93.0185532, 13.2960028 ], [ 93.0211809, 13.2976599 ], [ 93.0219798, 13.2943661 ], [ 93.0210968, 13.2944479 ], [ 93.0207395, 13.2938137 ], [ 93.0188054, 13.2940183 ], [ 93.0179225, 13.2932817 ], [ 93.0172077, 13.2940592 ], [ 93.0153788, 13.295123 ], [ 93.0112795, 13.2962687 ], [ 93.011763, 13.2940592 ], [ 93.0136865, 13.2926782 ], [ 93.0159359, 13.291512 ], [ 93.0165876, 13.2890774 ], [ 93.0148427, 13.2889956 ], [ 93.015074, 13.2869701 ], [ 93.0137286, 13.2860494 ], [ 93.0133186, 13.2850571 ], [ 93.013655, 13.2848935 ], [ 93.0134132, 13.2837375 ], [ 93.0112269, 13.2828987 ], [ 93.0108917, 13.282753 ], [ 93.0100497, 13.2823872 ], [ 93.0107802, 13.2798348 ], [ 93.0111902, 13.2782031 ], [ 93.0116421, 13.2768374 ], [ 93.0119417, 13.2762133 ], [ 93.0123989, 13.2763668 ], [ 93.0126985, 13.2759627 ], [ 93.01413, 13.27629 ], [ 93.0155102, 13.2765458 ], [ 93.016535, 13.2781059 ], [ 93.0168451, 13.278377 ], [ 93.0170816, 13.2777121 ], [ 93.0183482, 13.2772312 ], [ 93.0191996, 13.2766737 ], [ 93.0198881, 13.2770931 ], [ 93.0207815, 13.2775075 ], [ 93.0213911, 13.2775893 ], [ 93.0218168, 13.2778297 ], [ 93.022931, 13.2783207 ], [ 93.0233041, 13.2782696 ], [ 93.0240084, 13.278423 ], [ 93.02423, 13.27897 ], [ 93.02476, 13.28063 ], [ 93.0250175, 13.28118 ], [ 93.0251961, 13.2821877 ], [ 93.025974, 13.2821928 ], [ 93.027393, 13.2814716 ], [ 93.0287962, 13.2813897 ], [ 93.0301731, 13.2799064 ], [ 93.0301889, 13.2782696 ], [ 93.03098, 13.27624 ], [ 93.0312227, 13.2764801 ], [ 93.0321136, 13.2758709 ], [ 93.0328417, 13.2756337 ], [ 93.0341941, 13.2757721 ], [ 93.0348367, 13.2763375 ], [ 93.0355336, 13.277045 ], [ 93.0358769, 13.2783602 ], [ 93.0364337, 13.277943 ], [ 93.0364643, 13.2776757 ], [ 93.0368505, 13.2776026 ], [ 93.0372185, 13.2776998 ], [ 93.0375822, 13.2779138 ], [ 93.0378161, 13.2781247 ], [ 93.0377244, 13.2784072 ], [ 93.0375264, 13.2785737 ], [ 93.0379341, 13.2789183 ], [ 93.0382131, 13.2792838 ], [ 93.038138, 13.2795657 ], [ 93.0389963, 13.2802653 ], [ 93.0396722, 13.280328 ], [ 93.0407344, 13.2795761 ], [ 93.0417965, 13.2790227 ], [ 93.0425765, 13.2788327 ], [ 93.0430625, 13.2787095 ], [ 93.0436419, 13.2788765 ], [ 93.044114, 13.2792838 ], [ 93.044704, 13.2802549 ], [ 93.0449154, 13.2808741 ], [ 93.0451286, 13.2813661 ], [ 93.0455897, 13.2816478 ], [ 93.0461691, 13.2817115 ], [ 93.046463, 13.2819324 ], [ 93.0465269, 13.2816666 ], [ 93.0464539, 13.2814802 ], [ 93.0466905, 13.2808871 ], [ 93.0470628, 13.2803828 ], [ 93.0469442, 13.2798995 ], [ 93.0470064, 13.2791412 ], [ 93.0469893, 13.2785215 ], [ 93.0466567, 13.2774564 ], [ 93.0461455, 13.2765004 ], [ 93.045344, 13.2754568 ], [ 93.0438742, 13.2741437 ], [ 93.0433629, 13.2735866 ], [ 93.0435153, 13.2741322 ], [ 93.0431006, 13.2735244 ], [ 93.0428313, 13.2733688 ], [ 93.0427174, 13.2729745 ], [ 93.0424617, 13.2726076 ], [ 93.0421087, 13.2725188 ], [ 93.0416412, 13.2727443 ], [ 93.041149, 13.2724813 ], [ 93.0409168, 13.2717461 ], [ 93.0406727, 13.2714969 ], [ 93.0404442, 13.2712637 ], [ 93.0402382, 13.2703865 ], [ 93.040434, 13.2689042 ], [ 93.0404447, 13.2684761 ], [ 93.0428786, 13.2655348 ], [ 93.04329, 13.2624 ], [ 93.0437921, 13.2607277 ], [ 93.0443022, 13.2605789 ], [ 93.0448864, 13.2597878 ], [ 93.0450044, 13.2590777 ], [ 93.0446456, 13.2582261 ], [ 93.0445898, 13.2578214 ], [ 93.0449782, 13.2584266 ], [ 93.0465, 13.25882 ], [ 93.0470445, 13.259096 ], [ 93.04728, 13.2598531 ], [ 93.0476346, 13.2600301 ], [ 93.0478261, 13.25984 ], [ 93.0481373, 13.2598923 ], [ 93.0488561, 13.2607695 ], [ 93.0491613, 13.2612357 ], [ 93.0493818, 13.2615631 ], [ 93.0497466, 13.2615735 ], [ 93.0507122, 13.2619495 ], [ 93.0516349, 13.2621061 ], [ 93.05226, 13.26195 ], [ 93.0529053, 13.2625774 ], [ 93.0532249, 13.2624254 ], [ 93.0537303, 13.2625701 ], [ 93.0538195, 13.2630476 ], [ 93.0542803, 13.2634599 ], [ 93.0546891, 13.2632357 ], [ 93.055254, 13.2636987 ], [ 93.0552986, 13.2643136 ], [ 93.0557965, 13.2647838 ], [ 93.0561979, 13.2648127 ], [ 93.0565993, 13.2652612 ], [ 93.0573499, 13.2653914 ], [ 93.0577364, 13.2661076 ], [ 93.0584425, 13.2665995 ], [ 93.0586655, 13.2664983 ], [ 93.059052, 13.2666791 ], [ 93.0589256, 13.2669178 ], [ 93.0621662, 13.2688349 ], [ 93.0622479, 13.2693268 ], [ 93.06276, 13.26966 ], [ 93.0639648, 13.2701949 ], [ 93.0647898, 13.2715621 ], [ 93.0654216, 13.2723289 ], [ 93.0656222, 13.2724446 ], [ 93.0658155, 13.2724012 ], [ 93.0655999, 13.2714391 ], [ 93.0655, 13.27017 ], [ 93.0651837, 13.2674242 ], [ 93.0643216, 13.2644872 ], [ 93.0641432, 13.2637493 ], [ 93.0638905, 13.2634599 ], [ 93.0632959, 13.2635757 ], [ 93.0627533, 13.2637855 ], [ 93.0621736, 13.2637204 ], [ 93.0615, 13.26352 ], [ 93.0595871, 13.261485 ], [ 93.0586655, 13.2602841 ], [ 93.058331, 13.2596547 ], [ 93.0581155, 13.25883 ], [ 93.0580486, 13.2577666 ], [ 93.05732, 13.25708 ], [ 93.0567999, 13.2556035 ], [ 93.0571716, 13.2547353 ], [ 93.05769, 13.253 ], [ 93.0578776, 13.2511109 ], [ 93.0575655, 13.2494831 ], [ 93.0570526, 13.2481592 ], [ 93.0568222, 13.2474646 ], [ 93.0568743, 13.2467412 ], [ 93.0562053, 13.2463215 ], [ 93.0557817, 13.2459887 ], [ 93.0551202, 13.2444188 ], [ 93.0549195, 13.2440064 ], [ 93.0549121, 13.243377 ], [ 93.055202, 13.2423714 ], [ 93.0555141, 13.2420313 ], [ 93.0555364, 13.2414598 ], [ 93.0560121, 13.2398971 ], [ 93.0559452, 13.2393038 ], [ 93.0561905, 13.2386237 ], [ 93.0563763, 13.2373576 ], [ 93.0560567, 13.2360842 ], [ 93.0560344, 13.2352594 ], [ 93.0561459, 13.2345142 ], [ 93.0562871, 13.2336388 ], [ 93.0561236, 13.2329008 ], [ 93.0555438, 13.2324667 ], [ 93.0550236, 13.2321122 ], [ 93.054481, 13.2319386 ], [ 93.0540128, 13.2319386 ], [ 93.0536634, 13.2316202 ], [ 93.0531432, 13.2307809 ], [ 93.0522364, 13.2296233 ], [ 93.0510139, 13.2274611 ], [ 93.0487504, 13.2263953 ], [ 93.0479116, 13.2255219 ], [ 93.0468431, 13.2247988 ], [ 93.0461523, 13.2243151 ], [ 93.0454074, 13.2241597 ], [ 93.0445066, 13.2239093 ], [ 93.0434721, 13.2235317 ], [ 93.0423442, 13.2226829 ], [ 93.0421463, 13.2224807 ], [ 93.0424572, 13.2220365 ], [ 93.0428053, 13.2215938 ], [ 93.0432516, 13.2204023 ], [ 93.0437196, 13.2187555 ], [ 93.0434021, 13.2177969 ], [ 93.0440895, 13.2165376 ], [ 93.0443086, 13.2150769 ], [ 93.044123, 13.2146787 ], [ 93.0444945, 13.2138661 ], [ 93.0444613, 13.2130992 ], [ 93.0443953, 13.2120012 ], [ 93.0450921, 13.2103368 ], [ 93.0445067, 13.2095521 ], [ 93.04289, 13.20884 ], [ 93.0414022, 13.2067664 ], [ 93.041366, 13.2056054 ], [ 93.04057, 13.20336 ], [ 93.0403631, 13.2025259 ], [ 93.0404921, 13.2015122 ], [ 93.0405388, 13.2011753 ], [ 93.040483, 13.2007675 ], [ 93.0397344, 13.1998571 ], [ 93.0387739, 13.198945 ], [ 93.0373676, 13.1967462 ], [ 93.0369275, 13.1958976 ], [ 93.0367567, 13.1955681 ], [ 93.0364594, 13.1949828 ], [ 93.0363664, 13.1938638 ], [ 93.0363315, 13.1929978 ], [ 93.0356397, 13.1917415 ], [ 93.0350526, 13.1905616 ], [ 93.0347425, 13.1896596 ], [ 93.0348147, 13.1884615 ], [ 93.0347809, 13.1879021 ], [ 93.0346755, 13.1876403 ], [ 93.0347061, 13.1874332 ], [ 93.0347597, 13.1873565 ], [ 93.0335199, 13.1847024 ], [ 93.0332165, 13.1841476 ], [ 93.0331531, 13.1839639 ], [ 93.0330895, 13.1836695 ], [ 93.0330101, 13.1832129 ], [ 93.0329286, 13.1828395 ], [ 93.0329425, 13.1827089 ], [ 93.0329598, 13.1825574 ], [ 93.033008, 13.1823189 ], [ 93.0330361, 13.182047 ], [ 93.0327279, 13.1817155 ], [ 93.0327922, 13.1814477 ], [ 93.0328736, 13.1812805 ], [ 93.0329542, 13.1811356 ], [ 93.032775, 13.1808004 ], [ 93.0325093, 13.1802662 ], [ 93.032302, 13.1796764 ], [ 93.0318484, 13.1782408 ], [ 93.0320501, 13.1774157 ], [ 93.0332952, 13.1765625 ], [ 93.0343138, 13.1753836 ], [ 93.03592, 13.1731 ], [ 93.0366367, 13.1716504 ], [ 93.0368082, 13.1707989 ], [ 93.036819, 13.170208 ], [ 93.0366127, 13.1693651 ], [ 93.0363098, 13.1688163 ], [ 93.0353018, 13.1677864 ], [ 93.0348933, 13.1669933 ], [ 93.0346083, 13.1661118 ], [ 93.0341307, 13.1651153 ], [ 93.033924, 13.1645253 ], [ 93.0338944, 13.1640311 ], [ 93.0338602, 13.1636479 ], [ 93.0337536, 13.1631444 ], [ 93.0338711, 13.1625377 ], [ 93.0338213, 13.1617864 ], [ 93.0338275, 13.1613321 ], [ 93.0336208, 13.1607822 ], [ 93.0336306, 13.1604403 ], [ 93.0336698, 13.1600959 ], [ 93.0337783, 13.1598435 ], [ 93.0337108, 13.1594827 ], [ 93.0335817, 13.158859 ], [ 93.0338534, 13.1580125 ], [ 93.034076, 13.1565507 ], [ 93.0342187, 13.1554694 ], [ 93.0350974, 13.1534358 ], [ 93.0357073, 13.1519855 ], [ 93.03561, 13.15092 ], [ 93.0356267, 13.1503954 ], [ 93.0360431, 13.1501062 ], [ 93.0361553, 13.1498837 ], [ 93.0359769, 13.148606 ], [ 93.036174, 13.1476816 ], [ 93.0360359, 13.1465846 ], [ 93.035864, 13.1448017 ], [ 93.0359281, 13.1432873 ], [ 93.0360912, 13.1427169 ], [ 93.0359431, 13.1420075 ], [ 93.0364608, 13.1412411 ], [ 93.03648, 13.13918 ], [ 93.03432, 13.13538 ], [ 93.0316, 13.13107 ], [ 93.03049, 13.12855 ], [ 93.03022, 13.12644 ], [ 93.0317651, 13.1243342 ], [ 93.0319088, 13.1239236 ], [ 93.0320413, 13.1235673 ], [ 93.0318166, 13.1208308 ], [ 93.031734, 13.1183988 ], [ 93.0311482, 13.1146367 ], [ 93.0318439, 13.1132428 ], [ 93.0324978, 13.1107193 ], [ 93.0321898, 13.1097486 ], [ 93.0321454, 13.1089414 ], [ 93.03254, 13.10616 ], [ 93.0328278, 13.1048008 ], [ 93.033081, 13.1042538 ], [ 93.0329667, 13.1026252 ], [ 93.0329093, 13.1019267 ], [ 93.0331282, 13.1011179 ], [ 93.0334527, 13.1007203 ], [ 93.0340459, 13.1002085 ], [ 93.0343572, 13.099412 ], [ 93.0349011, 13.098378 ], [ 93.0346737, 13.0976805 ], [ 93.0346581, 13.0964213 ], [ 93.03388, 13.09497 ], [ 93.03381, 13.09312 ], [ 93.03403, 13.09205 ], [ 93.03495, 13.09016 ], [ 93.03489, 13.08866 ], [ 93.03427, 13.08691 ], [ 93.03446, 13.08284 ], [ 93.0343684, 13.0812488 ], [ 93.0333637, 13.0805533 ], [ 93.0316261, 13.0810392 ], [ 93.0301643, 13.0807456 ], [ 93.027929, 13.0784496 ], [ 93.0264323, 13.0757001 ], [ 93.0260186, 13.0742168 ], [ 93.0258588, 13.0729353 ], [ 93.0262757, 13.0710385 ], [ 93.0284402, 13.0702223 ], [ 93.0292272, 13.0698785 ], [ 93.0296622, 13.0692472 ], [ 93.0298124, 13.0686097 ], [ 93.0298553, 13.0681499 ], [ 93.0296622, 13.0679722 ], [ 93.0294294, 13.0672004 ], [ 93.0294943, 13.066972 ], [ 93.0295034, 13.0666261 ], [ 93.0291381, 13.0667034 ], [ 93.0275599, 13.0651327 ], [ 93.0275513, 13.0640787 ], [ 93.0277632, 13.0639694 ], [ 93.0278705, 13.06375 ], [ 93.0275417, 13.0635451 ], [ 93.0271356, 13.0631234 ], [ 93.0269411, 13.0628597 ], [ 93.0268228, 13.0623453 ], [ 93.0267745, 13.0619518 ], [ 93.0255633, 13.0605508 ], [ 93.0250193, 13.0598976 ], [ 93.0247849, 13.059143 ], [ 93.0229755, 13.0573256 ], [ 93.0228396, 13.0569061 ], [ 93.022983, 13.0562684 ], [ 93.0227695, 13.0552567 ], [ 93.0224192, 13.0543134 ], [ 93.022051653681572, 13.05363 ], [ 93.022051653681558, 13.05363 ], [ 93.0218838, 13.0533179 ], [ 93.0202536, 13.0515161 ], [ 93.0200272, 13.0511853 ], [ 93.0199161, 13.0508874 ], [ 93.020062, 13.0506704 ], [ 93.0203072, 13.0505953 ], [ 93.020532, 13.0503826 ], [ 93.0206757, 13.0501411 ], [ 93.0205304, 13.0498934 ], [ 93.0200182, 13.0500811 ], [ 93.0190739, 13.0498145 ], [ 93.0178374, 13.050438 ], [ 93.0171497, 13.0507578 ], [ 93.0164912, 13.0507991 ], [ 93.0154095, 13.0505629 ], [ 93.014755, 13.0501652 ], [ 93.0141666, 13.0495699 ], [ 93.0128077, 13.0486298 ], [ 93.0122354, 13.048055 ], [ 93.0119484, 13.0473792 ], [ 93.0117874, 13.0464548 ], [ 93.0118014, 13.0456421 ], [ 93.0119596, 13.0451671 ], [ 93.0124532, 13.0451044 ], [ 93.012657, 13.0449581 ], [ 93.0128394, 13.0447177 ], [ 93.0129193, 13.0442379 ], [ 93.0126892, 13.0440383 ], [ 93.0123351, 13.0442264 ], [ 93.0122279, 13.0444982 ], [ 93.0115198, 13.0446654 ], [ 93.0106518, 13.0443963 ], [ 93.0097463, 13.0438747 ], [ 93.0091573, 13.0431723 ], [ 93.0090317, 13.042863 ], [ 93.0089073, 13.0422651 ], [ 93.0090248, 13.0416374 ], [ 93.0096492, 13.041153 ], [ 93.0102001, 13.0404752 ], [ 93.0105306, 13.0397764 ], [ 93.0107306, 13.0393495 ], [ 93.0102452, 13.0396411 ], [ 93.0097817, 13.0393662 ], [ 93.00934, 13.03873 ], [ 93.0090543, 13.0379528 ], [ 93.0088408, 13.0360147 ], [ 93.0084298, 13.0349564 ], [ 93.0077089, 13.0337225 ], [ 93.0062197, 13.0317203 ], [ 93.0061661, 13.0312029 ], [ 93.0056189, 13.030628 ], [ 93.0043615, 13.0298299 ], [ 93.0035509, 13.0292592 ], [ 93.0034648, 13.0286441 ], [ 93.0032741, 13.0283655 ], [ 93.0028299, 13.0284256 ], [ 93.0026041, 13.028757 ], [ 93.0029903, 13.0299695 ], [ 93.00328, 13.0304085 ], [ 93.00307, 13.03122 ], [ 93.00158, 13.03225 ], [ 93.0007659, 13.0323683 ], [ 92.9985008, 13.0320522 ], [ 92.9975213, 13.0329171 ], [ 92.9965203, 13.0339639 ], [ 92.9959801, 13.0349794 ], [ 92.996633, 13.034554 ], [ 92.9965734, 13.035097 ], [ 92.9957977, 13.0357947 ], [ 92.9941895, 13.0356149 ], [ 92.994506, 13.0351168 ], [ 92.9927336, 13.0346918 ], [ 92.991908, 13.0342362 ], [ 92.9902901, 13.032521 ], [ 92.98936, 13.0308 ], [ 92.98924, 13.02806 ], [ 92.9904059, 13.0269957 ], [ 92.9894398, 13.0258511 ], [ 92.98733, 13.02584 ], [ 92.9838147, 13.02631 ], [ 92.9826581, 13.0239581 ], [ 92.98165, 13.02669 ], [ 92.98027, 13.02824 ], [ 92.9798911, 13.0279208 ], [ 92.9790221, 13.0281403 ], [ 92.9784508, 13.0292195 ], [ 92.9777105, 13.02878 ], [ 92.9742274, 13.0293444 ], [ 92.9707931, 13.029612 ], [ 92.9702572, 13.0301765 ], [ 92.970162, 13.0308401 ], [ 92.9707432, 13.0320746 ], [ 92.9683094, 13.033216 ], [ 92.9669318, 13.0356368 ], [ 92.9665659, 13.0364714 ], [ 92.96616, 13.03677 ], [ 92.9653713, 13.0363795 ], [ 92.9651272, 13.035595 ], [ 92.9654185, 13.0339352 ], [ 92.9657259, 13.0326067 ], [ 92.9657473, 13.0312886 ], [ 92.9656014, 13.0285495 ], [ 92.9655295, 13.0271697 ], [ 92.9655408, 13.0261548 ], [ 92.9660295, 13.0249522 ], [ 92.966824, 13.024856 ], [ 92.967907, 13.0239508 ], [ 92.9672848, 13.0233111 ], [ 92.9687053, 13.0217149 ], [ 92.9691639, 13.0209294 ], [ 92.9681844, 13.0205688 ], [ 92.9677863, 13.0197069 ], [ 92.9680497, 13.0188482 ], [ 92.9685357, 13.017448 ], [ 92.9694614, 13.016621 ], [ 92.9693254, 13.0158189 ], [ 92.97098, 13.01534 ], [ 92.97351, 13.01515 ], [ 92.97495, 13.015 ], [ 92.97446, 13.01414 ], [ 92.9728, 13.0135 ], [ 92.97027, 13.01351 ], [ 92.96766, 13.01423 ], [ 92.96601, 13.01589 ], [ 92.9636, 13.01678 ], [ 92.96123, 13.01661 ], [ 92.96021, 13.01603 ], [ 92.9596, 13.0165 ], [ 92.95749, 13.01826 ], [ 92.95602, 13.01982 ], [ 92.95552, 13.0232 ], [ 92.95277, 13.02741 ], [ 92.95042, 13.0298 ], [ 92.94733, 13.03178 ], [ 92.94308, 13.03416 ], [ 92.93936, 13.03651 ], [ 92.93746, 13.0388 ], [ 92.93507, 13.04216 ], [ 92.93407, 13.04441 ], [ 92.93374, 13.04725 ], [ 92.9347, 13.04872 ], [ 92.93628, 13.05166 ], [ 92.93933, 13.05295 ], [ 92.939765538331713, 13.053805521722989 ], [ 92.94101, 13.05625 ], [ 92.94073, 13.0582 ], [ 92.94088, 13.05978 ], [ 92.94172, 13.0624 ], [ 92.9415538, 13.0634199 ], [ 92.94143, 13.06418 ], [ 92.94015, 13.06609 ], [ 92.93972, 13.06655 ], [ 92.93881, 13.0687 ], [ 92.93804, 13.07209 ], [ 92.93795, 13.07431 ], [ 92.93725, 13.07487 ], [ 92.93614, 13.07429 ], [ 92.93569, 13.07219 ], [ 92.93551, 13.07025 ], [ 92.93564, 13.06571 ], [ 92.93556, 13.06377 ], [ 92.93505, 13.06177 ], [ 92.93409, 13.06086 ], [ 92.93312, 13.06095 ], [ 92.93133, 13.06207 ], [ 92.92941275, 13.062624737309646 ], [ 92.92936, 13.06264 ], [ 92.92833, 13.06258 ], [ 92.92688, 13.06219 ], [ 92.92611, 13.06202 ], [ 92.92558, 13.06299 ], [ 92.92512, 13.06291 ], [ 92.92534, 13.06205 ], [ 92.92566, 13.06114 ], [ 92.9258, 13.05954 ], [ 92.92542, 13.05796 ], [ 92.92421, 13.05706 ], [ 92.9239, 13.05693 ], [ 92.9223, 13.05674 ], [ 92.92094, 13.05719 ], [ 92.92009, 13.05887 ], [ 92.9189, 13.06236 ], [ 92.9172, 13.06691 ], [ 92.91483, 13.0702 ], [ 92.91396, 13.0712 ], [ 92.91349, 13.07336 ], [ 92.91282, 13.07448 ], [ 92.9118197, 13.0743741 ], [ 92.91112, 13.0743 ], [ 92.91127, 13.0729 ], [ 92.91246, 13.07021 ], [ 92.91284, 13.06835 ], [ 92.91282, 13.0678 ], [ 92.91238, 13.06593 ], [ 92.91227, 13.06568 ], [ 92.91083, 13.0618 ], [ 92.90969, 13.0602 ], [ 92.90831, 13.05916 ], [ 92.9083972, 13.0585751 ], [ 92.90855, 13.05755 ], [ 92.91021, 13.05684 ], [ 92.91163, 13.05579 ], [ 92.91278, 13.05509 ], [ 92.91338, 13.05456 ], [ 92.914232, 13.05363 ], [ 92.9148, 13.05301 ], [ 92.91492, 13.05101 ], [ 92.91444, 13.04808 ], [ 92.91275, 13.04431 ], [ 92.91176, 13.04286 ], [ 92.91125, 13.04158 ], [ 92.91176, 13.04041 ], [ 92.91127, 13.03964 ], [ 92.91019, 13.03804 ], [ 92.90949, 13.03603 ], [ 92.9093, 13.03399 ], [ 92.90868, 13.03247 ], [ 92.90607, 13.02888 ], [ 92.90535, 13.02767 ], [ 92.90447, 13.02491 ], [ 92.90415, 13.02343 ], [ 92.90343, 13.02196 ], [ 92.90343, 13.02071 ], [ 92.90381, 13.01881 ], [ 92.9045, 13.01819 ], [ 92.90485, 13.01683 ], [ 92.90437, 13.01505 ], [ 92.90316, 13.00814 ], [ 92.90289, 13.00421 ], [ 92.9035, 13.00289 ], [ 92.90486, 13.00244 ], [ 92.90601, 13.0028 ], [ 92.90672, 13.00257 ], [ 92.9076, 13.00164 ], [ 92.90776, 13.00064 ], [ 92.90809, 12.99982 ], [ 92.90929, 12.99928 ], [ 92.91057, 12.99798 ], [ 92.91189, 12.99788 ], [ 92.91279, 12.99854 ], [ 92.91334, 12.99937 ], [ 92.91358, 13.00025 ], [ 92.91377, 13.00124 ], [ 92.91434, 13.00127 ], [ 92.91509, 13.00084 ], [ 92.9156, 12.99953 ], [ 92.91572, 12.99751 ], [ 92.91551, 12.99613 ], [ 92.91534, 12.99464 ], [ 92.9156, 12.99333 ], [ 92.91611, 12.99211 ], [ 92.91704, 12.99113 ], [ 92.91722, 12.99052 ], [ 92.91667, 12.98975 ], [ 92.91664, 12.989 ], [ 92.9174, 12.98748 ], [ 92.91863, 12.98638 ], [ 92.9199, 12.98613 ], [ 92.92176, 12.98645 ], [ 92.92342, 12.98704 ], [ 92.92563, 12.98854 ], [ 92.92735, 12.98937 ], [ 92.92914, 12.98935 ], [ 92.93119, 12.98942 ], [ 92.93215, 12.98918 ], [ 92.93284, 12.98851 ], [ 92.93268, 12.98707 ], [ 92.93164, 12.98556 ], [ 92.93039, 12.98487 ], [ 92.9299, 12.98424 ], [ 92.93031, 12.98302 ], [ 92.93041, 12.98177 ], [ 92.9299, 12.98055 ], [ 92.93007, 12.97984 ], [ 92.93083, 12.97951 ], [ 92.93176, 12.97973 ], [ 92.93397, 12.98118 ], [ 92.93484, 12.98156 ], [ 92.9359, 12.98132 ], [ 92.93664, 12.98074 ], [ 92.93692, 12.98014 ], [ 92.93682, 12.97894 ], [ 92.93689, 12.97814 ], [ 92.93752, 12.97732 ], [ 92.93809, 12.97625 ], [ 92.93804, 12.9751 ], [ 92.93734, 12.97414 ], [ 92.93706, 12.97355 ], [ 92.93734, 12.97284 ], [ 92.93802, 12.97206 ], [ 92.93804, 12.97137 ], [ 92.93752, 12.96994 ], [ 92.93682, 12.96912 ], [ 92.93583, 12.96766 ], [ 92.93509, 12.96704 ], [ 92.93416, 12.96688 ], [ 92.93289, 12.96708 ], [ 92.93237, 12.96675 ], [ 92.93138, 12.96639 ], [ 92.93031, 12.96643 ], [ 92.92983, 12.96595 ], [ 92.93105, 12.96466 ], [ 92.93132, 12.9626 ], [ 92.93128, 12.96161 ], [ 92.93005, 12.96021 ], [ 92.92826, 12.95899 ], [ 92.92791, 12.958 ], [ 92.92707, 12.95759 ], [ 92.92568, 12.95859 ], [ 92.92406, 12.96025 ], [ 92.92286, 12.96084 ], [ 92.92142, 12.9606 ], [ 92.91989, 12.95967 ], [ 92.91892, 12.95841 ], [ 92.91799, 12.95695 ], [ 92.9167, 12.95541 ], [ 92.91603, 12.95284 ], [ 92.91476, 12.95065 ], [ 92.91325, 12.94757 ], [ 92.9127, 12.94659 ], [ 92.91108, 12.94691 ], [ 92.90955, 12.94831 ], [ 92.9084, 12.95015 ], [ 92.90798, 12.95241 ], [ 92.90818, 12.95485 ], [ 92.90804, 12.95739 ], [ 92.90847, 12.95912 ], [ 92.90937, 12.96128 ], [ 92.90979, 12.96261 ], [ 92.90908, 12.96403 ], [ 92.90796, 12.96527 ], [ 92.90701, 12.96721 ], [ 92.90689, 12.96905 ], [ 92.90717, 12.97109 ], [ 92.90688, 12.97259 ], [ 92.90613, 12.97432 ], [ 92.9062, 12.97596 ], [ 92.90728, 12.97726 ], [ 92.90752, 12.97825 ], [ 92.90716, 12.97931 ], [ 92.90658, 12.98003 ], [ 92.90652, 12.98108 ], [ 92.90723, 12.9831 ], [ 92.9078, 12.98437 ], [ 92.9075, 12.98568 ], [ 92.90634, 12.98618 ], [ 92.90481, 12.98629 ], [ 92.9025, 12.98613 ], [ 92.90098, 12.98649 ], [ 92.89932, 12.98597 ], [ 92.89839, 12.98694 ], [ 92.89823, 12.98789 ], [ 92.89878, 12.98892 ], [ 92.89882, 12.98986 ], [ 92.89883, 12.99136 ], [ 92.89881, 12.99211 ], [ 92.89942, 12.99313 ], [ 92.89957, 12.99437 ], [ 92.89898, 12.99504 ], [ 92.89777, 12.99529 ], [ 92.89671, 12.99568 ], [ 92.89586, 12.99497 ], [ 92.89443, 12.99258 ], [ 92.89207, 12.98998 ], [ 92.88993, 12.98663 ], [ 92.88799, 12.98296 ], [ 92.88568, 12.98036 ], [ 92.88402, 12.97863 ], [ 92.88329, 12.97713 ], [ 92.88236, 12.97558 ], [ 92.8806, 12.97395 ], [ 92.87944, 12.97305 ], [ 92.87909, 12.97212 ], [ 92.88027, 12.97097 ], [ 92.88129, 12.96959 ], [ 92.88129, 12.96849 ], [ 92.88049, 12.96762 ], [ 92.87852, 12.96705 ], [ 92.87699, 12.96592 ], [ 92.87566, 12.96472 ], [ 92.87511, 12.9638 ], [ 92.87557, 12.96254 ], [ 92.8761, 12.96162 ], [ 92.87624, 12.96142 ], [ 92.87704, 12.96084 ], [ 92.87761, 12.95997 ], [ 92.87758, 12.95802 ], [ 92.87693, 12.95715 ], [ 92.8757, 12.9558 ], [ 92.87433, 12.95471 ], [ 92.87398, 12.95383 ], [ 92.87392, 12.95223 ], [ 92.87299, 12.95093 ], [ 92.87244, 12.94985 ], [ 92.8731, 12.94868 ], [ 92.87478, 12.94831 ], [ 92.87632, 12.9472 ], [ 92.87736, 12.94537 ], [ 92.87758, 12.94436 ], [ 92.877, 12.94389 ], [ 92.87567, 12.94394 ], [ 92.87503, 12.94322 ], [ 92.87434, 12.94155 ], [ 92.87299, 12.93976 ], [ 92.87272, 12.93947 ], [ 92.87162, 12.93757 ], [ 92.87054, 12.93612 ], [ 92.86906, 12.93498 ], [ 92.86766, 12.93463 ], [ 92.86648, 12.93448 ], [ 92.86552, 12.93367 ], [ 92.86432, 12.93383 ], [ 92.8633, 12.93388 ], [ 92.86238, 12.93412 ], [ 92.86047, 12.93423 ], [ 92.85995, 12.93407 ], [ 92.85851, 12.93264 ], [ 92.8577, 12.9318 ], [ 92.85668, 12.93023 ], [ 92.85537, 12.92949 ], [ 92.85481, 12.92816 ], [ 92.85428, 12.92539 ], [ 92.854288767908315, 12.92233 ], [ 92.85429, 12.9219 ], [ 92.85474, 12.918 ], [ 92.85484, 12.91546 ], [ 92.85531, 12.91445 ], [ 92.85534, 12.9139 ], [ 92.85561, 12.91309 ], [ 92.85649, 12.9132 ], [ 92.85822, 12.91313 ], [ 92.85927, 12.91259 ], [ 92.85948, 12.91144 ], [ 92.85831, 12.91044 ], [ 92.8569, 12.9097 ], [ 92.85667, 12.90896 ], [ 92.85728, 12.90759 ], [ 92.85743, 12.90629 ], [ 92.85806, 12.90422 ], [ 92.85907, 12.90273 ], [ 92.86003, 12.9025 ], [ 92.8619, 12.90192 ], [ 92.86419, 12.90173 ], [ 92.86567, 12.90152 ], [ 92.86619, 12.9018 ], [ 92.86601, 12.90246 ], [ 92.86608, 12.904 ], [ 92.86644, 12.90528 ], [ 92.86717, 12.9058 ], [ 92.86778, 12.90678 ], [ 92.86838, 12.90765 ], [ 92.87065, 12.90945 ], [ 92.87251, 12.90993 ], [ 92.87478, 12.90966 ], [ 92.87587, 12.90877 ], [ 92.87663, 12.90734 ], [ 92.8766, 12.90555 ], [ 92.87562, 12.90409 ], [ 92.87365, 12.90222 ], [ 92.87181, 12.89861 ], [ 92.8712, 12.89619 ], [ 92.87039, 12.89383 ], [ 92.87096, 12.89281 ], [ 92.8714386, 12.8926338 ], [ 92.87278, 12.89214 ], [ 92.87404, 12.89288 ], [ 92.87667, 12.89472 ], [ 92.87818, 12.89516 ], [ 92.87999, 12.89509 ], [ 92.88101, 12.89491 ], [ 92.88372, 12.8938 ], [ 92.88574, 12.89307 ], [ 92.88799, 12.89308 ], [ 92.88962, 12.89426 ], [ 92.89073, 12.89502 ], [ 92.89216, 12.89516 ], [ 92.89354, 12.8963 ], [ 92.8956, 12.89787 ], [ 92.89617, 12.89914 ], [ 92.89704, 12.90157 ], [ 92.89811, 12.9028 ], [ 92.89854, 12.90437 ], [ 92.89822, 12.90548 ], [ 92.89809, 12.90718 ], [ 92.89814, 12.90838 ], [ 92.8981, 12.9098 ], [ 92.89748, 12.91097 ], [ 92.89694, 12.91259 ], [ 92.89642, 12.91485 ], [ 92.89554, 12.91603 ], [ 92.89506, 12.91675 ], [ 92.89545, 12.91738 ], [ 92.89662, 12.91853 ], [ 92.89725, 12.92005 ], [ 92.89795, 12.92232 ], [ 92.897948689655166, 12.92233 ], [ 92.89776, 12.92377 ], [ 92.89741, 12.92513 ], [ 92.8976, 12.92617 ], [ 92.89849, 12.92658 ], [ 92.89925, 12.92635 ], [ 92.89987, 12.92541 ], [ 92.90068, 12.92389 ], [ 92.90104, 12.92268 ], [ 92.9010275, 12.92253 ], [ 92.90094, 12.92148 ], [ 92.90062, 12.9201 ], [ 92.89981, 12.91894 ], [ 92.89896, 12.91693 ], [ 92.89901, 12.91583 ], [ 92.89943, 12.91476 ], [ 92.90017, 12.91404 ], [ 92.90099, 12.9141 ], [ 92.90171, 12.91474 ], [ 92.90289, 12.91539 ], [ 92.90462, 12.91517 ], [ 92.90603, 12.91465 ], [ 92.90723, 12.91305 ], [ 92.90795, 12.91132 ], [ 92.90869, 12.91014 ], [ 92.90968, 12.90902 ], [ 92.91117, 12.90873 ], [ 92.91268, 12.90867 ], [ 92.91524, 12.90941 ], [ 92.91757, 12.91002 ], [ 92.91963, 12.91194 ], [ 92.92119, 12.91319 ], [ 92.92198, 12.91316 ], [ 92.92203, 12.91262 ], [ 92.92176, 12.9117 ], [ 92.92076, 12.91062 ], [ 92.91828, 12.90817 ], [ 92.91625, 12.90701 ], [ 92.91254, 12.90546 ], [ 92.91036, 12.90446 ], [ 92.90959, 12.90303 ], [ 92.90958, 12.9028 ], [ 92.90833, 12.89945 ], [ 92.90717, 12.89648 ], [ 92.90707, 12.89401 ], [ 92.9068, 12.89132 ], [ 92.9059, 12.8888 ], [ 92.90464, 12.88712 ], [ 92.90457, 12.88543 ], [ 92.90523, 12.88417 ], [ 92.90663, 12.88341 ], [ 92.9082, 12.88304 ], [ 92.91002, 12.88313 ], [ 92.91158, 12.88422 ], [ 92.91382, 12.88491 ], [ 92.91679, 12.88541 ], [ 92.91828, 12.88697 ], [ 92.91896, 12.88826 ], [ 92.9196, 12.88831 ], [ 92.9209, 12.88718 ], [ 92.92235, 12.88581 ], [ 92.92391, 12.8852 ], [ 92.92564, 12.88542 ], [ 92.92689, 12.88499 ], [ 92.92811, 12.8837 ], [ 92.92882, 12.88182 ], [ 92.9288, 12.87935 ], [ 92.92862, 12.87712 ], [ 92.92772, 12.87265 ], [ 92.92767, 12.87142 ], [ 92.92854, 12.86938 ], [ 92.92988, 12.86554 ], [ 92.92973, 12.86384 ], [ 92.92945, 12.8627 ], [ 92.92892, 12.86133 ], [ 92.92903, 12.86024 ], [ 92.93026, 12.85935 ], [ 92.93108, 12.85823 ], [ 92.93187, 12.85797 ], [ 92.93366, 12.85728 ], [ 92.93607, 12.85417 ], [ 92.93735, 12.85458 ], [ 92.93768, 12.8548 ], [ 92.939, 12.85622 ], [ 92.94004, 12.85649 ], [ 92.94089, 12.85583 ], [ 92.94081, 12.85398 ], [ 92.93906, 12.85004 ], [ 92.93889, 12.84603 ], [ 92.93981, 12.84143 ], [ 92.94044, 12.83754 ], [ 92.94161, 12.83539 ], [ 92.94297, 12.83572 ], [ 92.94406, 12.83699 ], [ 92.94541, 12.83743 ], [ 92.94728, 12.83673 ], [ 92.94724, 12.83565 ], [ 92.94581, 12.8337 ], [ 92.94492, 12.8315 ], [ 92.94408, 12.82836 ], [ 92.94416, 12.82643 ], [ 92.94448, 12.82479 ], [ 92.9453, 12.82352 ], [ 92.94581, 12.82234 ], [ 92.94575, 12.82088 ], [ 92.94605, 12.81878 ], [ 92.94725, 12.81696 ], [ 92.94929, 12.81555 ], [ 92.95118, 12.81255 ], [ 92.95251, 12.81018 ], [ 92.95344, 12.80787 ], [ 92.95392, 12.80607 ], [ 92.95301, 12.80333 ], [ 92.95103, 12.80132 ], [ 92.94937, 12.79953 ], [ 92.9489, 12.79778 ], [ 92.9489, 12.79584 ], [ 92.94852, 12.79431 ], [ 92.94782, 12.79287 ], [ 92.94428, 12.79147 ], [ 92.944020224719111, 12.79123 ], [ 92.943877081338357, 12.791097753347188 ], [ 92.943803745318363, 12.79103 ], [ 92.94139, 12.7888 ], [ 92.9376, 12.7844 ], [ 92.93432, 12.78185 ], [ 92.93333, 12.77858 ], [ 92.93339, 12.77486 ], [ 92.93474, 12.7717 ], [ 92.93843, 12.76867 ], [ 92.94123, 12.76799 ], [ 92.94461, 12.76909 ], [ 92.94764, 12.76951 ], [ 92.94871, 12.76862 ], [ 92.9487, 12.76668 ], [ 92.94835, 12.76269 ], [ 92.95342, 12.75754 ], [ 92.95989, 12.75004 ], [ 92.96577, 12.74361 ], [ 92.96817, 12.74041 ], [ 92.96802, 12.7367 ], [ 92.96504, 12.73124 ], [ 92.9648, 12.72546 ], [ 92.96695, 12.72124 ], [ 92.96799, 12.72079 ], [ 92.97222, 12.72062 ], [ 92.97742, 12.71834 ], [ 92.97916, 12.71456 ], [ 92.97798, 12.7115 ], [ 92.97183, 12.71134 ], [ 92.96572, 12.70704 ], [ 92.96337, 12.70155 ], [ 92.9631, 12.69516 ], [ 92.96434, 12.68932 ], [ 92.96487, 12.68166 ], [ 92.96328, 12.67408 ], [ 92.96216, 12.66751 ], [ 92.96217, 12.66283 ], [ 92.96092, 12.65317 ], [ 92.95823, 12.63943 ], [ 92.9583109, 12.6208345 ], [ 92.95646, 12.61223 ], [ 92.9562372, 12.6052636 ], [ 92.9561253, 12.6017647 ], [ 92.95778, 12.59324 ], [ 92.9604, 12.58508 ], [ 92.9617404, 12.5779226 ], [ 92.96196, 12.57675 ], [ 92.96696, 12.56478 ], [ 92.9690313, 12.5623219 ], [ 92.9707559, 12.5584396 ], [ 92.97405, 12.54714 ], [ 92.9755997, 12.5418961 ], [ 92.9742955, 12.5313031 ], [ 92.973404017453333, 12.52863 ], [ 92.973404017453348, 12.52863 ], [ 92.9695326, 12.5170216 ], [ 92.9679317, 12.5157953 ], [ 92.9656, 12.50944 ], [ 92.96525, 12.50118 ], [ 92.9682888, 12.4969231 ], [ 92.9637098, 12.4928567 ], [ 92.963959, 12.4877489 ], [ 92.9614314, 12.4868658 ], [ 92.9596746, 12.4869125 ], [ 92.9581603, 12.4874285 ], [ 92.9569372, 12.4887238 ], [ 92.9574493, 12.4904346 ], [ 92.9559657, 12.4919821 ], [ 92.9544353, 12.4925691 ], [ 92.9524201, 12.4947916 ], [ 92.9502999, 12.4972662 ], [ 92.95124, 12.50029 ], [ 92.9477, 12.50147 ], [ 92.94704, 12.50108 ], [ 92.94359, 12.49956 ], [ 92.94217, 12.4959 ], [ 92.9424417, 12.4916291 ], [ 92.9425016, 12.4901551 ], [ 92.9412863, 12.4879303 ], [ 92.93913, 12.48383 ], [ 92.93756, 12.48183 ], [ 92.93286, 12.48078 ], [ 92.93129, 12.47857 ], [ 92.93174, 12.47421 ], [ 92.93305, 12.47003 ], [ 92.93419, 12.46688 ], [ 92.93736, 12.46676 ], [ 92.9427, 12.46799 ], [ 92.94693, 12.47299 ], [ 92.95149, 12.4759 ], [ 92.95572, 12.47573 ], [ 92.95773, 12.47338 ], [ 92.95717, 12.46989 ], [ 92.9566, 12.46661 ], [ 92.95618, 12.46663 ], [ 92.95231, 12.46513 ], [ 92.94822, 12.46343 ], [ 92.94472, 12.46068 ], [ 92.94416, 12.45739 ], [ 92.94339, 12.45412 ], [ 92.94025, 12.44991 ], [ 92.93534, 12.44886 ], [ 92.93066, 12.44822 ], [ 92.92717, 12.44568 ], [ 92.92653, 12.44549 ], [ 92.92265, 12.44379 ], [ 92.91737, 12.444 ], [ 92.9154, 12.44242 ], [ 92.91762, 12.43986 ], [ 92.91965, 12.43792 ], [ 92.92251, 12.43553 ], [ 92.922, 12.43328 ], [ 92.91976, 12.43047 ], [ 92.92014, 12.42706 ], [ 92.91866, 12.42216 ], [ 92.91624, 12.41482 ], [ 92.91521, 12.41031 ], [ 92.91485, 12.40681 ], [ 92.91206, 12.40589 ], [ 92.90742, 12.40608 ], [ 92.90725, 12.40712 ], [ 92.90835, 12.41327 ], [ 92.90901, 12.41903 ], [ 92.90562, 12.42392 ], [ 92.9003, 12.42826 ], [ 92.89418, 12.43367 ], [ 92.8847568, 12.4416596 ], [ 92.88294, 12.4432 ], [ 92.87901, 12.44542 ], [ 92.8778324, 12.4440735 ], [ 92.87657, 12.44263 ], [ 92.87945, 12.44065 ], [ 92.8846, 12.43653 ], [ 92.8919, 12.4288 ], [ 92.89408, 12.4252 ], [ 92.89708, 12.42116 ], [ 92.89902, 12.41695 ], [ 92.89726, 12.41536 ], [ 92.89419, 12.41776 ], [ 92.88883, 12.42128 ], [ 92.88484, 12.42185 ], [ 92.88088, 12.42185 ], [ 92.87889, 12.41966 ], [ 92.87724, 12.41559 ], [ 92.87551, 12.41483 ], [ 92.87354, 12.41822 ], [ 92.86971, 12.42291 ], [ 92.86557, 12.42514 ], [ 92.86181, 12.42303 ], [ 92.85651, 12.42282 ], [ 92.85124, 12.42324 ], [ 92.84636, 12.42281 ], [ 92.84206, 12.42629 ], [ 92.83691, 12.4298 ], [ 92.83128, 12.43167 ], [ 92.82622, 12.43208 ], [ 92.82448, 12.43111 ], [ 92.82757, 12.42892 ], [ 92.8332, 12.42705 ], [ 92.84043, 12.42263 ], [ 92.84427, 12.41835 ], [ 92.84627, 12.41558 ], [ 92.84454, 12.41462 ], [ 92.8393, 12.41586 ], [ 92.8341, 12.41792 ], [ 92.83142, 12.41968 ], [ 92.83295, 12.4159 ], [ 92.83327, 12.4132 ], [ 92.83466, 12.41108 ], [ 92.83859, 12.40886 ], [ 92.84059, 12.4061 ], [ 92.83959, 12.40242 ], [ 92.83838, 12.39875 ], [ 92.83867, 12.39564 ], [ 92.84129, 12.39244 ], [ 92.8454, 12.38959 ], [ 92.8487, 12.38533 ], [ 92.84972, 12.38169 ], [ 92.85305, 12.37751 ], [ 92.85745, 12.37294 ], [ 92.85798, 12.37257 ], [ 92.85967, 12.37004 ], [ 92.85889, 12.36638 ], [ 92.86051, 12.3621 ], [ 92.86236, 12.36115 ], [ 92.86696, 12.36141 ], [ 92.86902, 12.36124 ], [ 92.8693, 12.35938 ], [ 92.86935, 12.35659 ], [ 92.87163, 12.35375 ], [ 92.87445, 12.35378 ], [ 92.87545, 12.35429 ], [ 92.87823, 12.35666 ], [ 92.88144, 12.35598 ], [ 92.88474, 12.35392 ], [ 92.88496, 12.35253 ], [ 92.88671, 12.3504 ], [ 92.88948, 12.34933 ], [ 92.88941, 12.34754 ], [ 92.89053, 12.34405 ], [ 92.89033, 12.34268 ], [ 92.88921, 12.34273 ], [ 92.88734, 12.34468 ], [ 92.88637, 12.34513 ], [ 92.88213, 12.34489 ], [ 92.881, 12.3448 ], [ 92.87976, 12.34209 ], [ 92.88085, 12.33778 ], [ 92.88238, 12.33387 ], [ 92.88414, 12.33214 ], [ 92.88665, 12.33149 ], [ 92.88786, 12.33007 ], [ 92.88678, 12.32791 ], [ 92.88673, 12.32653 ], [ 92.88753, 12.32554 ], [ 92.8905332, 12.3245148 ], [ 92.8929353, 12.3254224 ], [ 92.8936756, 12.3253618 ], [ 92.8960116, 12.3265486 ], [ 92.897116, 12.3264645 ], [ 92.8977391, 12.3261646 ], [ 92.8982899, 12.325847 ], [ 92.8985427, 12.3253618 ], [ 92.898317, 12.3247708 ], [ 92.8973959, 12.3244885 ], [ 92.8965652, 12.3239327 ], [ 92.89589, 12.32328 ], [ 92.8950572, 12.3225477 ], [ 92.8949669, 12.3218066 ], [ 92.8950902, 12.3206194 ], [ 92.8949037, 12.3202275 ], [ 92.8939784, 12.3203026 ], [ 92.8934596, 12.3207008 ], [ 92.8930716, 12.3205962 ], [ 92.8925053, 12.3207461 ], [ 92.8920236, 12.3211443 ], [ 92.8918568, 12.3216512 ], [ 92.8911156, 12.3215335 ], [ 92.8899408, 12.3210515 ], [ 92.8888988, 12.3215861 ], [ 92.8878062, 12.3231387 ], [ 92.8869739, 12.3235996 ], [ 92.8861956, 12.3237715 ], [ 92.885404, 12.3235718 ], [ 92.8847112, 12.3229122 ], [ 92.8844885, 12.322381 ], [ 92.8828349, 12.3202911 ], [ 92.8818509, 12.3196871 ], [ 92.8806479, 12.3183572 ], [ 92.8792607, 12.3163967 ], [ 92.8792105, 12.3154419 ], [ 92.8788029, 12.3147088 ], [ 92.8776262, 12.3138036 ], [ 92.8767924, 12.3146997 ], [ 92.8755232, 12.3152428 ], [ 92.8739852, 12.3155777 ], [ 92.8737999, 12.3167725 ], [ 92.8741443, 12.31782 ], [ 92.86953, 12.3162 ], [ 92.86617, 12.31344 ], [ 92.86335, 12.31312 ], [ 92.85843, 12.31346 ], [ 92.85732, 12.31378 ], [ 92.85336, 12.31352 ], [ 92.85294, 12.3134 ], [ 92.85, 12.31049 ], [ 92.84971, 12.31036 ], [ 92.847709, 12.3081732 ], [ 92.84719, 12.30399 ], [ 92.85126, 12.30355 ], [ 92.85636, 12.30432 ], [ 92.85987, 12.30549 ], [ 92.86481, 12.30557 ], [ 92.86703, 12.30493 ], [ 92.86836, 12.30295 ], [ 92.87059, 12.30231 ], [ 92.87325, 12.30179 ], [ 92.87399, 12.29928 ], [ 92.87404, 12.29377 ], [ 92.87516, 12.29029 ], [ 92.8762, 12.28804 ], [ 92.87929, 12.28778 ], [ 92.88351, 12.28762 ], [ 92.88527, 12.28603 ], [ 92.88506, 12.28425 ], [ 92.8833, 12.28267 ], [ 92.88129, 12.28165 ], [ 92.88064, 12.27961 ], [ 92.88119, 12.27594 ], [ 92.88141, 12.27097 ], [ 92.88149, 12.26629 ], [ 92.881571075268809, 12.26603 ], [ 92.881571075268823, 12.26603 ], [ 92.88236, 12.2635 ], [ 92.88371, 12.26207 ], [ 92.88498, 12.26546 ], [ 92.885424936708858, 12.26583 ], [ 92.88688, 12.26704 ], [ 92.88843, 12.26698 ], [ 92.888895476190484, 12.26583 ], [ 92.88894, 12.26572 ], [ 92.8875, 12.26495 ], [ 92.88589, 12.26364 ], [ 92.88622, 12.26142 ], [ 92.887, 12.25974 ], [ 92.88652, 12.25852 ], [ 92.88409, 12.25765 ], [ 92.88176, 12.25581 ], [ 92.87924, 12.25275 ], [ 92.87663, 12.25092 ], [ 92.87238, 12.2504 ], [ 92.871, 12.25101 ], [ 92.86668, 12.25214 ], [ 92.86255, 12.25121 ], [ 92.86012, 12.2469 ], [ 92.85955, 12.2432 ], [ 92.86234, 12.23593 ], [ 92.86655, 12.23205 ], [ 92.8687, 12.22963 ], [ 92.87158, 12.22772 ], [ 92.87264, 12.21928 ], [ 92.87335, 12.21418 ], [ 92.8732, 12.21047 ], [ 92.87333, 12.20689 ], [ 92.87491, 12.20421 ], [ 92.87834, 12.20201 ], [ 92.88106, 12.1997 ], [ 92.88114, 12.19818 ], [ 92.88062, 12.19586 ], [ 92.87886, 12.19414 ], [ 92.87644, 12.19341 ], [ 92.87364, 12.19393 ], [ 92.87309, 12.19423 ], [ 92.86907, 12.19577 ], [ 92.86343, 12.19916 ], [ 92.8629, 12.19987 ], [ 92.85998, 12.20081 ], [ 92.85957, 12.2011 ], [ 92.85612, 12.20275 ], [ 92.85275, 12.20302 ], [ 92.85043, 12.20132 ], [ 92.84776, 12.19812 ], [ 92.84725, 12.19608 ], [ 92.84784, 12.1933 ], [ 92.84971, 12.19089 ], [ 92.85252, 12.18996 ], [ 92.85496, 12.1878 ], [ 92.85554, 12.18474 ], [ 92.8541, 12.18053 ], [ 92.85257, 12.17756 ], [ 92.85317, 12.1752 ], [ 92.85403, 12.17214 ], [ 92.85305, 12.16887 ], [ 92.8502904, 12.1670994 ], [ 92.8493342, 12.1642972 ], [ 92.8483686, 12.1628558 ], [ 92.8479492, 12.1618736 ], [ 92.8479101, 12.1614444 ], [ 92.8481576, 12.1608787 ], [ 92.8484261, 12.1577223 ], [ 92.8472625, 12.1569378 ], [ 92.847207, 12.1578102 ], [ 92.847346, 12.1594463 ], [ 92.8464274, 12.1604431 ], [ 92.845208, 12.1611011 ], [ 92.8443495, 12.1613968 ], [ 92.8427963, 12.1612382 ], [ 92.8418424, 12.1614444 ], [ 92.8406669, 12.1622817 ], [ 92.83668, 12.16625 ], [ 92.83433, 12.16717 ], [ 92.83134, 12.16646 ], [ 92.82958, 12.16488 ], [ 92.82801, 12.16439 ], [ 92.82552, 12.16545 ], [ 92.82371, 12.1658 ], [ 92.82159, 12.1623 ], [ 92.8201438, 12.1600467 ], [ 92.81978, 12.15948 ], [ 92.81984, 12.15742 ], [ 92.82216, 12.15554 ], [ 92.82551, 12.15485 ], [ 92.82573, 12.15333 ], [ 92.82323, 12.15081 ], [ 92.82025, 12.14694 ], [ 92.81813, 12.13973 ], [ 92.81584, 12.13555 ], [ 92.81476, 12.12981 ], [ 92.81358, 12.12862 ], [ 92.8126, 12.129023529411763 ], [ 92.8124, 12.129105882352942 ], [ 92.81137, 12.12953 ], [ 92.80751, 12.13161 ], [ 92.80428, 12.13174 ], [ 92.80288, 12.13 ], [ 92.80374, 12.12693 ], [ 92.80905, 12.12259 ], [ 92.81116, 12.11907 ], [ 92.81198, 12.11188 ], [ 92.81166, 12.10734 ], [ 92.81013, 12.10451 ], [ 92.80672, 12.10382 ], [ 92.80411, 12.1053 ], [ 92.80027, 12.10766 ], [ 92.79731, 12.10777 ], [ 92.79427, 12.10569 ], [ 92.7912, 12.10292 ], [ 92.79071, 12.10115 ], [ 92.79214, 12.09848 ], [ 92.79416, 12.09619 ], [ 92.79359, 12.0925 ], [ 92.7927749, 12.0896065 ], [ 92.7915994, 12.0886837 ], [ 92.7909097, 12.0875596 ], [ 92.7904498, 12.0859109 ], [ 92.7906287, 12.0854113 ], [ 92.79171, 12.08459 ], [ 92.792468, 12.0835628 ], [ 92.792864, 12.0820515 ], [ 92.7924196, 12.0808118 ], [ 92.7922931, 12.0806948 ], [ 92.7923657, 12.0802207 ], [ 92.7922344, 12.080017 ], [ 92.7919637, 12.0801267 ], [ 92.7912985, 12.0810632 ], [ 92.7911651, 12.0817267 ], [ 92.7909224, 12.0821389 ], [ 92.7902327, 12.082089 ], [ 92.7896451, 12.082651 ], [ 92.7885594, 12.0826385 ], [ 92.7877675, 12.0821015 ], [ 92.7869883, 12.0817143 ], [ 92.7865157, 12.0813146 ], [ 92.7862347, 12.0809274 ], [ 92.7870394, 12.08079 ], [ 92.7870139, 12.0804278 ], [ 92.78376, 12.07953 ], [ 92.77991, 12.07831 ], [ 92.7778, 12.07495 ], [ 92.776658, 12.0743912 ], [ 92.7754904, 12.0745724 ], [ 92.7740818, 12.07363 ], [ 92.7731366, 12.0737206 ], [ 92.7723953, 12.07247 ], [ 92.7731366, 12.0718176 ], [ 92.7725996, 12.0701075 ], [ 92.7715769, 12.0695552 ], [ 92.7714657, 12.0700536 ], [ 92.7718086, 12.0703889 ], [ 92.7714008, 12.0707151 ], [ 92.7710023, 12.0707695 ], [ 92.7705668, 12.0706426 ], [ 92.7701405, 12.0703255 ], [ 92.769325, 12.0696368 ], [ 92.7683057, 12.0691837 ], [ 92.7664198, 12.0672081 ], [ 92.7655719, 12.0656222 ], [ 92.7654329, 12.0647251 ], [ 92.7657202, 12.0643626 ], [ 92.7653681, 12.0637101 ], [ 92.7647843, 12.0635108 ], [ 92.7645157, 12.0636153 ], [ 92.7643302, 12.0639548 ], [ 92.764013, 12.0643947 ], [ 92.7579511, 12.06359 ], [ 92.7578772, 12.0623766 ], [ 92.75704, 12.06143 ], [ 92.7548, 12.05847 ], [ 92.75187, 12.05682 ], [ 92.75119, 12.05571 ], [ 92.7522, 12.05453 ], [ 92.75388, 12.05426 ], [ 92.75547, 12.05419 ], [ 92.75719, 12.05496 ], [ 92.75994, 12.05474 ], [ 92.76093, 12.05315 ], [ 92.76044, 12.05162 ], [ 92.7606, 12.05037 ], [ 92.7623, 12.05051 ], [ 92.76467, 12.05135 ], [ 92.76588, 12.04996 ], [ 92.76623, 12.04808 ], [ 92.76746, 12.0471 ], [ 92.77138, 12.04715 ], [ 92.77519, 12.0498 ], [ 92.77872, 12.05059 ], [ 92.77965, 12.05024 ], [ 92.7812, 12.04935 ], [ 92.78248, 12.04692 ], [ 92.78096, 12.04346 ], [ 92.77658, 12.03732 ], [ 92.77526, 12.03354 ], [ 92.77514, 12.03054 ], [ 92.77704, 12.02788 ], [ 92.77868, 12.02647 ], [ 92.77819, 12.02494 ], [ 92.7751, 12.02444 ], [ 92.77415, 12.02448 ], [ 92.76934, 12.02591 ], [ 92.76871, 12.02604 ], [ 92.76586, 12.02625 ], [ 92.76414, 12.02559 ], [ 92.76441, 12.02455 ], [ 92.76444, 12.02268 ], [ 92.7627, 12.02151 ], [ 92.75882, 12.02239 ], [ 92.75841, 12.02261 ], [ 92.75661, 12.02516 ], [ 92.7552, 12.02708 ], [ 92.75459, 12.02752 ], [ 92.75073, 12.03161 ], [ 92.74823, 12.03512 ], [ 92.74623, 12.03541 ], [ 92.74602, 12.03541 ], [ 92.74265, 12.03575 ], [ 92.74062, 12.03542 ], [ 92.73886, 12.03373 ], [ 92.73602, 12.03156 ], [ 92.73701, 12.02997 ], [ 92.73974, 12.02935 ], [ 92.74053, 12.02807 ], [ 92.73958, 12.02548 ], [ 92.73711, 12.02464 ], [ 92.73433, 12.02402 ], [ 92.73299, 12.02221 ], [ 92.734, 12.02103 ], [ 92.73609, 12.02033 ], [ 92.73847, 12.019 ], [ 92.73969, 12.01781 ], [ 92.73912, 12.0168 ], [ 92.737, 12.01688 ], [ 92.73612, 12.01609 ], [ 92.7367, 12.01472 ], [ 92.73792, 12.01332 ], [ 92.74035, 12.01323 ], [ 92.74243, 12.01501 ], [ 92.7441, 12.01691 ], [ 92.74587, 12.01622 ], [ 92.74775, 12.01314 ], [ 92.74842, 12.01132 ], [ 92.74708, 12.00961 ], [ 92.74723, 12.00815 ], [ 92.74878, 12.00716 ], [ 92.74915, 12.00601 ], [ 92.74866, 12.00437 ], [ 92.748943492063489, 12.00343 ], [ 92.74904, 12.00311 ], [ 92.75045, 12.00151 ], [ 92.75019, 12.00017 ], [ 92.74825, 11.99952 ], [ 92.7439, 12.00176 ], [ 92.74038, 12.00107 ], [ 92.73817, 11.99878 ], [ 92.73509, 11.99868 ], [ 92.73134, 11.99759 ], [ 92.72871, 11.99531 ], [ 92.72832, 11.99356 ], [ 92.72888, 11.99157 ], [ 92.72809, 11.98788 ], [ 92.72644, 11.9837 ], [ 92.72431, 11.98088 ], [ 92.72423, 11.97882 ], [ 92.72531, 11.97681 ], [ 92.72727, 11.97559 ], [ 92.72875, 11.97543 ], [ 92.73038, 11.97392 ], [ 92.73226, 11.97074 ], [ 92.73185, 11.96864 ], [ 92.73015, 11.9684 ], [ 92.72825, 11.96847 ], [ 92.72554, 11.96703 ], [ 92.72525, 11.96507 ], [ 92.72371, 11.96348 ], [ 92.72105, 11.96317 ], [ 92.71921, 11.96231 ], [ 92.71837, 11.95985 ], [ 92.71777, 11.95543 ], [ 92.71602, 11.95156 ], [ 92.71747, 11.94798 ], [ 92.71665, 11.94605 ], [ 92.71716, 11.94303 ], [ 92.71809, 11.93999 ], [ 92.71769, 11.93783 ], [ 92.7167, 11.93694 ], [ 92.71476, 11.93618 ], [ 92.71467, 11.93391 ], [ 92.71569, 11.93294 ], [ 92.71741, 11.9337 ], [ 92.71914, 11.93456 ], [ 92.72154, 11.93375 ], [ 92.72356, 11.93139 ], [ 92.72437, 11.92792 ], [ 92.72438, 11.92305 ], [ 92.72497, 11.91144 ], [ 92.72448, 11.90742 ], [ 92.72359, 11.90373 ], [ 92.72502, 11.90243 ], [ 92.7265, 11.89988 ], [ 92.72579, 11.89525 ], [ 92.72474, 11.89291 ], [ 92.7255, 11.89081 ], [ 92.72473, 11.88234 ], [ 92.72459, 11.87634 ], [ 92.72635, 11.86509 ], [ 92.7266575, 11.8614964 ], [ 92.7258813, 11.8576983 ], [ 92.7254263, 11.8558123 ], [ 92.724998, 11.8536382 ], [ 92.7247304, 11.8518045 ], [ 92.7239542, 11.8497351 ], [ 92.7230709, 11.848111 ], [ 92.7219468, 11.8466179 ], [ 92.7211438, 11.8451248 ], [ 92.7207691, 11.8436054 ], [ 92.7204747, 11.8421123 ], [ 92.7201802, 11.8402786 ], [ 92.7192435, 11.8384448 ], [ 92.7183334, 11.8369517 ], [ 92.717584, 11.8352751 ], [ 92.7172093, 11.8335985 ], [ 92.7164866, 11.8316338 ], [ 92.7159781, 11.829407 ], [ 92.7154695, 11.8276518 ], [ 92.7137833, 11.8252941 ], [ 92.7126324, 11.8230935 ], [ 92.7116956, 11.8216002 ], [ 92.7104376, 11.8198712 ], [ 92.7095811, 11.8188495 ], [ 92.708002, 11.8175396 ], [ 92.7067172, 11.8165702 ], [ 92.7050846, 11.8154437 ], [ 92.7036125, 11.8148149 ], [ 92.702301, 11.8145006 ], [ 92.7013106, 11.814553 ], [ 92.6998385, 11.814553 ], [ 92.6985806, 11.8146577 ], [ 92.6975902, 11.8153913 ], [ 92.6966267, 11.8162034 ], [ 92.6952884, 11.8170156 ], [ 92.6937628, 11.8171728 ], [ 92.6932275, 11.8176181 ], [ 92.6933881, 11.8181421 ], [ 92.6938966, 11.8185351 ], [ 92.6947799, 11.8190852 ], [ 92.695904, 11.819714 ], [ 92.6969211, 11.8201332 ], [ 92.6978311, 11.8203427 ], [ 92.6983397, 11.8208667 ], [ 92.6991159, 11.8225695 ], [ 92.6993835, 11.8235912 ], [ 92.6999991, 11.8250059 ], [ 92.7007218, 11.826473 ], [ 92.7014177, 11.8280186 ], [ 92.7019262, 11.8289879 ], [ 92.701043, 11.8277566 ], [ 92.7000794, 11.8266301 ], [ 92.6992765, 11.8251107 ], [ 92.6989285, 11.823565 ], [ 92.6980453, 11.8217312 ], [ 92.6976438, 11.8214692 ], [ 92.6953152, 11.8204475 ], [ 92.6942981, 11.8200022 ], [ 92.6934416, 11.819452 ], [ 92.6922372, 11.8183255 ], [ 92.6922639, 11.8173038 ], [ 92.6928528, 11.816675 ], [ 92.6943516, 11.8163606 ], [ 92.695797, 11.8154699 ], [ 92.6965732, 11.8147625 ], [ 92.697162, 11.813636 ], [ 92.6967605, 11.8130858 ], [ 92.6959843, 11.8130596 ], [ 92.6951011, 11.8135836 ], [ 92.6937093, 11.8142648 ], [ 92.6919427, 11.8154961 ], [ 92.6905242, 11.8163344 ], [ 92.6887309, 11.8167536 ], [ 92.6865629, 11.8176967 ], [ 92.684609, 11.8183779 ], [ 92.6826284, 11.8191376 ], [ 92.6804336, 11.819714 ], [ 92.6790151, 11.8202379 ], [ 92.6770879, 11.8210239 ], [ 92.6750805, 11.821443 ], [ 92.6758835, 11.8210501 ], [ 92.6768203, 11.8204213 ], [ 92.6782389, 11.819321 ], [ 92.6801124, 11.8185089 ], [ 92.6824143, 11.8174872 ], [ 92.6841808, 11.816806 ], [ 92.6856261, 11.8155485 ], [ 92.6870179, 11.8148673 ], [ 92.6884097, 11.8142124 ], [ 92.6895339, 11.8143958 ], [ 92.6915145, 11.8145006 ], [ 92.6923978, 11.8137932 ], [ 92.6933881, 11.8132168 ], [ 92.694646, 11.8123523 ], [ 92.6942713, 11.8119069 ], [ 92.6927992, 11.8107018 ], [ 92.6917554, 11.8093394 ], [ 92.6902833, 11.8075317 ], [ 92.6892127, 11.8065885 ], [ 92.6881421, 11.8059073 ], [ 92.6869911, 11.8058549 ], [ 92.685412, 11.805593 ], [ 92.6842075, 11.805462 ], [ 92.6832172, 11.805462 ], [ 92.6821734, 11.8047546 ], [ 92.6817451, 11.8038114 ], [ 92.6809154, 11.802187 ], [ 92.6802195, 11.8007985 ], [ 92.6799518, 11.7994099 ], [ 92.6799518, 11.7980213 ], [ 92.6799518, 11.7961611 ], [ 92.679818, 11.7946415 ], [ 92.6795771, 11.7934624 ], [ 92.6788277, 11.7918118 ], [ 92.6787742, 11.7908424 ], [ 92.6789615, 11.7887987 ], [ 92.6790954, 11.7882223 ], [ 92.6791221, 11.7869647 ], [ 92.6790151, 11.7863882 ], [ 92.6786671, 11.7849472 ], [ 92.6776768, 11.7826677 ], [ 92.6785065, 11.7837681 ], [ 92.6790418, 11.7849996 ], [ 92.6795236, 11.786231 ], [ 92.6795504, 11.7875149 ], [ 92.6795236, 11.7886153 ], [ 92.6794701, 11.7904232 ], [ 92.6800589, 11.792624 ], [ 92.6804069, 11.7933838 ], [ 92.6809689, 11.7948511 ], [ 92.6811563, 11.7959253 ], [ 92.6811831, 11.7971305 ], [ 92.681531, 11.7994361 ], [ 92.6819325, 11.8004317 ], [ 92.6827087, 11.8017678 ], [ 92.6834313, 11.8029206 ], [ 92.6844484, 11.8037852 ], [ 92.6852246, 11.8043616 ], [ 92.6864291, 11.804545 ], [ 92.6873659, 11.804545 ], [ 92.688838, 11.804807 ], [ 92.6897212, 11.805069 ], [ 92.6902298, 11.8055144 ], [ 92.6912201, 11.8066933 ], [ 92.6918624, 11.8075055 ], [ 92.6927189, 11.8083439 ], [ 92.6934148, 11.8088678 ], [ 92.6947263, 11.8095228 ], [ 92.6957167, 11.8103874 ], [ 92.6977961, 11.8119896 ], [ 92.6986125, 11.812566 ], [ 92.6992548, 11.8125005 ], [ 92.6998905, 11.8121271 ], [ 92.7002719, 11.8118979 ], [ 92.7006132, 11.8116949 ], [ 92.7004927, 11.811315 ], [ 92.7003857, 11.8108565 ], [ 92.7002652, 11.8104439 ], [ 92.7000377, 11.8098282 ], [ 92.6999842, 11.8096055 ], [ 92.6998771, 11.8091994 ], [ 92.6998705, 11.8084986 ], [ 92.6999842, 11.807765 ], [ 92.700098, 11.8073262 ], [ 92.700379, 11.8068546 ], [ 92.7008407, 11.806442 ], [ 92.7011485, 11.8062848 ], [ 92.7015634, 11.8061603 ], [ 92.7022459, 11.8060228 ], [ 92.7027344, 11.8057805 ], [ 92.7030221, 11.8055381 ], [ 92.7032897, 11.8052303 ], [ 92.7035641, 11.8047587 ], [ 92.7037247, 11.8041168 ], [ 92.7038719, 11.8035404 ], [ 92.7040927, 11.8031212 ], [ 92.7042734, 11.8028199 ], [ 92.704454, 11.802499 ], [ 92.7048479, 11.8019257 ], [ 92.7052738, 11.8015505 ], [ 92.7053968, 11.8013745 ], [ 92.7056192, 11.801143 ], [ 92.7057895, 11.8007956 ], [ 92.7060166, 11.8004714 ], [ 92.7063904, 11.800124 ], [ 92.7065939, 11.7999851 ], [ 92.7068352, 11.7998369 ], [ 92.7071806, 11.7997304 ], [ 92.7075165, 11.7996841 ], [ 92.7077862, 11.7996748 ], [ 92.7084534, 11.7997072 ], [ 92.7088082, 11.7997396 ], [ 92.7092293, 11.7997535 ], [ 92.7095227, 11.7996841 ], [ 92.7096315, 11.7994571 ], [ 92.7095179, 11.7991792 ], [ 92.7094091, 11.7989801 ], [ 92.7092435, 11.7988596 ], [ 92.708936, 11.7987902 ], [ 92.7086615, 11.7986836 ], [ 92.7084155, 11.7985308 ], [ 92.7082404, 11.7981556 ], [ 92.70816, 11.7978268 ], [ 92.7081411, 11.7975304 ], [ 92.7082168, 11.797234 ], [ 92.7082783, 11.7969792 ], [ 92.7082452, 11.796743 ], [ 92.70816, 11.7963447 ], [ 92.7080512, 11.7959927 ], [ 92.7078525, 11.7956453 ], [ 92.7077342, 11.7953582 ], [ 92.7074077, 11.7946634 ], [ 92.7072941, 11.7944272 ], [ 92.7071617, 11.7940196 ], [ 92.7070765, 11.7936537 ], [ 92.7069819, 11.7932462 ], [ 92.706944, 11.7929729 ], [ 92.7069109, 11.792519 ], [ 92.7068541, 11.792255 ], [ 92.7067784, 11.7920744 ], [ 92.7066365, 11.7919354 ], [ 92.7063999, 11.7917363 ], [ 92.7062012, 11.7915325 ], [ 92.7061065, 11.7912592 ], [ 92.7061633, 11.7909813 ], [ 92.7064283, 11.7908007 ], [ 92.7066885, 11.7907173 ], [ 92.7069203, 11.7906988 ], [ 92.7071238, 11.7907312 ], [ 92.7075449, 11.7908562 ], [ 92.7078525, 11.7908794 ], [ 92.7080133, 11.7908516 ], [ 92.7081979, 11.790671 ], [ 92.7082641, 11.790495 ], [ 92.7083114, 11.7902402 ], [ 92.7083729, 11.789967 ], [ 92.7084581, 11.7897168 ], [ 92.7085007, 11.7894158 ], [ 92.708548, 11.7891471 ], [ 92.7086379, 11.7889156 ], [ 92.708742, 11.7886979 ], [ 92.7087988, 11.7885543 ], [ 92.708723, 11.78842 ], [ 92.7085291, 11.7883366 ], [ 92.7083209, 11.788332 ], [ 92.7080039, 11.788332 ], [ 92.7078099, 11.7883227 ], [ 92.7076443, 11.7882347 ], [ 92.7073935, 11.788068 ], [ 92.7071853, 11.7879151 ], [ 92.7069724, 11.7877298 ], [ 92.706698, 11.7875168 ], [ 92.7065891, 11.787401 ], [ 92.7064519, 11.7871509 ], [ 92.706381, 11.786961 ], [ 92.7063431, 11.7867572 ], [ 92.7062248, 11.7865904 ], [ 92.7060545, 11.7864283 ], [ 92.7056996, 11.786206 ], [ 92.7055104, 11.7860717 ], [ 92.7053495, 11.7857706 ], [ 92.7053542, 11.7854788 ], [ 92.7055009, 11.7850203 ], [ 92.7054962, 11.7853213 ], [ 92.705463, 11.7856595 ], [ 92.7055151, 11.7859281 ], [ 92.7056523, 11.7860254 ], [ 92.7059409, 11.7862153 ], [ 92.7061255, 11.7863403 ], [ 92.7063053, 11.7865349 ], [ 92.7064945, 11.7868406 ], [ 92.7065986, 11.7870027 ], [ 92.7067311, 11.7872296 ], [ 92.706873, 11.7874288 ], [ 92.7070197, 11.787577 ], [ 92.7072374, 11.787753 ], [ 92.7076443, 11.7879105 ], [ 92.7079944, 11.7881143 ], [ 92.70816, 11.7881374 ], [ 92.7083966, 11.7880819 ], [ 92.7085764, 11.788068 ], [ 92.7086521, 11.7881513 ], [ 92.7088035, 11.7882301 ], [ 92.7089123, 11.7883088 ], [ 92.7089407, 11.7884894 ], [ 92.7089028, 11.7886238 ], [ 92.7088555, 11.7888368 ], [ 92.7087704, 11.7889711 ], [ 92.7087041, 11.7892166 ], [ 92.7087846, 11.7893185 ], [ 92.7089028, 11.7892954 ], [ 92.7090117, 11.7891518 ], [ 92.7091536, 11.7891333 ], [ 92.7092861, 11.7890036 ], [ 92.7094233, 11.7890591 ], [ 92.7094801, 11.789161 ], [ 92.7095179, 11.789476 ], [ 92.709447, 11.7896103 ], [ 92.7093618, 11.7896891 ], [ 92.7092482, 11.789703 ], [ 92.7090826, 11.7894667 ], [ 92.7088508, 11.7894019 ], [ 92.7086142, 11.7894806 ], [ 92.7085255, 11.7902865 ], [ 92.7085757, 11.7903487 ], [ 92.7087865, 11.7902603 ], [ 92.7089337, 11.790126 ], [ 92.7090675, 11.7901784 ], [ 92.7091478, 11.7902832 ], [ 92.7089939, 11.7904109 ], [ 92.708753, 11.7903487 ], [ 92.7086025, 11.7904404 ], [ 92.7084921, 11.7906697 ], [ 92.7083917, 11.7908269 ], [ 92.7081541, 11.7910332 ], [ 92.7081341, 11.7910889 ], [ 92.7078798, 11.7911413 ], [ 92.7075586, 11.7911085 ], [ 92.707204, 11.7910037 ], [ 92.7067757, 11.7909579 ], [ 92.706575, 11.7910889 ], [ 92.7064947, 11.7912199 ], [ 92.7065683, 11.7914295 ], [ 92.7066687, 11.7916063 ], [ 92.7068493, 11.7918028 ], [ 92.7071772, 11.7922548 ], [ 92.7073244, 11.792674 ], [ 92.7074181, 11.7932635 ], [ 92.7075519, 11.793722 ], [ 92.7078731, 11.79477 ], [ 92.7082478, 11.7954512 ], [ 92.7085155, 11.7959621 ], [ 92.7087296, 11.7964993 ], [ 92.7087965, 11.797377 ], [ 92.7090374, 11.798032 ], [ 92.7097362, 11.7986905 ], [ 92.71002, 11.7992277 ], [ 92.71002, 11.7995982 ], [ 92.7096605, 11.8000243 ], [ 92.7089034, 11.800154 ], [ 92.7082789, 11.800154 ], [ 92.7077489, 11.8002281 ], [ 92.7069162, 11.8005801 ], [ 92.7065566, 11.8010062 ], [ 92.7056103, 11.801914 ], [ 92.7050047, 11.8027106 ], [ 92.7047208, 11.8036739 ], [ 92.7040773, 11.805156 ], [ 92.7035852, 11.8059896 ], [ 92.7022982, 11.8067307 ], [ 92.7016737, 11.8071382 ], [ 92.7009545, 11.8076384 ], [ 92.7006895, 11.8081571 ], [ 92.7007085, 11.8090834 ], [ 92.7007842, 11.8097318 ], [ 92.7011059, 11.8107136 ], [ 92.7017377, 11.811857 ], [ 92.7022998, 11.8119749 ], [ 92.7029823, 11.8119094 ], [ 92.7036916, 11.8123417 ], [ 92.7056053, 11.8129181 ], [ 92.7064351, 11.8130491 ], [ 92.7097718, 11.8140267 ], [ 92.7113778, 11.8150222 ], [ 92.7122342, 11.8174849 ], [ 92.7128766, 11.8184804 ], [ 92.7146967, 11.820681 ], [ 92.7164632, 11.8224101 ], [ 92.7177479, 11.8236151 ], [ 92.7184974, 11.8256061 ], [ 92.7203174, 11.830636 ], [ 92.7210668, 11.8335176 ], [ 92.7226192, 11.836766 ], [ 92.7241181, 11.8395952 ], [ 92.7254028, 11.8430006 ], [ 92.7282935, 11.8521689 ], [ 92.7293641, 11.8560981 ], [ 92.73108, 11.86369 ], [ 92.73128, 11.86606 ], [ 92.73128, 11.86854 ], [ 92.73223, 11.87389 ], [ 92.73261, 11.87781 ], [ 92.73166, 11.88323 ], [ 92.73217, 11.88787 ], [ 92.73245, 11.892 ], [ 92.73186, 11.89575 ], [ 92.73188, 11.89837 ], [ 92.7328, 11.90188 ], [ 92.73346, 11.90461 ], [ 92.73409, 11.9063 ], [ 92.73524, 11.90923 ], [ 92.73589, 11.91113 ], [ 92.73693, 11.91395 ], [ 92.7378, 11.91614 ], [ 92.73858, 11.91747 ], [ 92.74157, 11.92029 ], [ 92.74207, 11.92109 ], [ 92.74214, 11.92217 ], [ 92.74236, 11.92391 ], [ 92.74287, 11.92534 ], [ 92.74358, 11.9264 ], [ 92.74457, 11.92795 ], [ 92.74521, 11.92919 ], [ 92.74584, 11.93026 ], [ 92.74633, 11.931 ], [ 92.74662, 11.93166 ], [ 92.74693, 11.93207 ], [ 92.74748, 11.93222 ], [ 92.74806, 11.93225 ], [ 92.74883, 11.93202 ], [ 92.7493, 11.93174 ], [ 92.75046, 11.93172 ], [ 92.7511, 11.93127 ], [ 92.75183, 11.93102 ], [ 92.75243, 11.931 ], [ 92.7532, 11.93108 ], [ 92.75377, 11.93144 ], [ 92.75416, 11.93192 ], [ 92.75588, 11.93321 ], [ 92.75614, 11.9337 ], [ 92.75663, 11.93425 ], [ 92.75704, 11.93456 ], [ 92.75758, 11.93461 ], [ 92.75811, 11.9345 ], [ 92.75868, 11.93414 ], [ 92.75897, 11.93405 ], [ 92.75937, 11.934 ], [ 92.75961, 11.93412 ], [ 92.75983, 11.9343 ], [ 92.75994, 11.93464 ], [ 92.75944, 11.93509 ], [ 92.75907, 11.93537 ], [ 92.75902, 11.93574 ], [ 92.75924, 11.93617 ], [ 92.75969, 11.93637 ], [ 92.76027, 11.93618 ], [ 92.76096, 11.93591 ], [ 92.76142, 11.93598 ], [ 92.76164, 11.93621 ], [ 92.76252, 11.93684 ], [ 92.76272, 11.93728 ], [ 92.76265, 11.93801 ], [ 92.76271, 11.93854 ], [ 92.76288, 11.93882 ], [ 92.76362, 11.93911 ], [ 92.76391, 11.93935 ], [ 92.76411, 11.93975 ], [ 92.76431, 11.93986 ], [ 92.76447, 11.93976 ], [ 92.76504, 11.93901 ], [ 92.76566, 11.93848 ], [ 92.76624, 11.93822 ], [ 92.76665, 11.93821 ], [ 92.76773, 11.93884 ], [ 92.76895, 11.93942 ], [ 92.76937, 11.9398 ], [ 92.76979, 11.94027 ], [ 92.77022, 11.9406 ], [ 92.77081, 11.94059 ], [ 92.77203, 11.94015 ], [ 92.77331, 11.93962 ], [ 92.77475, 11.93936 ], [ 92.77786, 11.93818 ], [ 92.78106, 11.93639 ], [ 92.78193, 11.93615 ], [ 92.78322, 11.93641 ], [ 92.78382, 11.93636 ], [ 92.78419, 11.93622 ], [ 92.78457, 11.93598 ], [ 92.78461, 11.93558 ], [ 92.78475, 11.93515 ], [ 92.78488, 11.93486 ], [ 92.78486, 11.93462 ], [ 92.78461, 11.93449 ], [ 92.78423, 11.93435 ], [ 92.78367, 11.93402 ], [ 92.78328, 11.93365 ], [ 92.78291, 11.93284 ], [ 92.78257, 11.93181 ], [ 92.78245, 11.9309 ], [ 92.78245, 11.93034 ], [ 92.78268, 11.92979 ], [ 92.78315, 11.92939 ], [ 92.78582, 11.92668 ], [ 92.78662, 11.92623 ], [ 92.78719, 11.92572 ], [ 92.78752, 11.92526 ], [ 92.78751, 11.92467 ], [ 92.78737, 11.92384 ], [ 92.78738, 11.92282 ], [ 92.78747, 11.92199 ], [ 92.78769, 11.92114 ], [ 92.7878, 11.92053 ], [ 92.7877, 11.91975 ], [ 92.78778, 11.91913 ], [ 92.78775, 11.91862 ], [ 92.78757, 11.9177 ], [ 92.78698, 11.91591 ], [ 92.78663, 11.91555 ], [ 92.78634, 11.91501 ], [ 92.78645, 11.9141 ], [ 92.78619, 11.91377 ], [ 92.7859, 11.91351 ], [ 92.78545, 11.91236 ], [ 92.78514, 11.91122 ], [ 92.78515, 11.91078 ], [ 92.78536, 11.91019 ], [ 92.78534, 11.90977 ], [ 92.7851, 11.9091 ], [ 92.78445, 11.90768 ], [ 92.78412, 11.9075 ], [ 92.78373, 11.90709 ], [ 92.78349, 11.90653 ], [ 92.78323, 11.90544 ], [ 92.78326, 11.90476 ], [ 92.78347, 11.90408 ], [ 92.78372, 11.90347 ], [ 92.78398, 11.90323 ], [ 92.78428, 11.90318 ], [ 92.78453, 11.9033 ], [ 92.78536, 11.90324 ], [ 92.78557, 11.90307 ], [ 92.78548, 11.90283 ], [ 92.78524, 11.90239 ], [ 92.78527, 11.90213 ], [ 92.78557, 11.90167 ], [ 92.786, 11.90132 ], [ 92.78634, 11.90109 ], [ 92.78662, 11.90108 ], [ 92.78695, 11.90115 ], [ 92.78725, 11.90137 ], [ 92.78773, 11.90164 ], [ 92.7881, 11.90192 ], [ 92.78827, 11.90191 ], [ 92.78839, 11.90178 ], [ 92.7883, 11.90167 ], [ 92.788, 11.90146 ], [ 92.78789, 11.90122 ], [ 92.78786, 11.90084 ], [ 92.78776, 11.9003 ], [ 92.78765, 11.90005 ], [ 92.78745, 11.89996 ], [ 92.78725, 11.90003 ], [ 92.78714, 11.90023 ], [ 92.78685, 11.90044 ], [ 92.7865, 11.90056 ], [ 92.78613, 11.90052 ], [ 92.78579, 11.90038 ], [ 92.78524, 11.89985 ], [ 92.78492, 11.89939 ], [ 92.78486, 11.89899 ], [ 92.78474, 11.89884 ], [ 92.78454, 11.89891 ], [ 92.78425, 11.89926 ], [ 92.78391, 11.89939 ], [ 92.78356, 11.89938 ], [ 92.78302, 11.89907 ], [ 92.78102, 11.89771 ], [ 92.78043, 11.89698 ], [ 92.77985, 11.89619 ], [ 92.77931, 11.89449 ], [ 92.77909, 11.89303 ], [ 92.77918, 11.89227 ], [ 92.7794, 11.89129 ], [ 92.77993, 11.89079 ], [ 92.78067, 11.89059 ], [ 92.78133, 11.88993 ], [ 92.78221, 11.88819 ], [ 92.78273, 11.8869 ], [ 92.78314, 11.88651 ], [ 92.78368, 11.88647 ], [ 92.78384, 11.88648 ], [ 92.78427, 11.88628 ], [ 92.78468, 11.88587 ], [ 92.7855, 11.88526 ], [ 92.78693, 11.88453 ], [ 92.78815, 11.88426 ], [ 92.78833, 11.88404 ], [ 92.78814, 11.88383 ], [ 92.78743, 11.8835 ], [ 92.78669, 11.88305 ], [ 92.78617, 11.88268 ], [ 92.78596, 11.88208 ], [ 92.78593, 11.88143 ], [ 92.78693, 11.87757 ], [ 92.78683, 11.87665 ], [ 92.78629, 11.8758 ], [ 92.78615, 11.87541 ], [ 92.78615, 11.87482 ], [ 92.78691, 11.87275 ], [ 92.78683, 11.87164 ], [ 92.78652, 11.87054 ], [ 92.7861, 11.86967 ], [ 92.78592, 11.86871 ], [ 92.78597, 11.86757 ], [ 92.78634, 11.86673 ], [ 92.78633, 11.86586 ], [ 92.7861, 11.86482 ], [ 92.78563, 11.86367 ], [ 92.78536, 11.86309 ], [ 92.78508, 11.86223 ], [ 92.78473, 11.86145 ], [ 92.78448, 11.86039 ], [ 92.7843, 11.85939 ], [ 92.78458, 11.85787 ], [ 92.785, 11.85669 ], [ 92.78548, 11.8562 ], [ 92.78582, 11.85553 ], [ 92.78584, 11.85452 ], [ 92.78476, 11.85183 ], [ 92.78445, 11.85121 ], [ 92.78398, 11.85083 ], [ 92.78333, 11.85088 ], [ 92.7818, 11.85142 ], [ 92.78118, 11.8512 ], [ 92.78072, 11.85088 ], [ 92.78051, 11.85022 ], [ 92.78037, 11.84818 ], [ 92.78026, 11.847 ], [ 92.78022, 11.84617 ], [ 92.78041, 11.84539 ], [ 92.78083, 11.84477 ], [ 92.78095, 11.84373 ], [ 92.78066, 11.84303 ], [ 92.78008, 11.84218 ], [ 92.77933, 11.84171 ], [ 92.77861, 11.84147 ], [ 92.77824, 11.84103 ], [ 92.77801, 11.84033 ], [ 92.77806, 11.83957 ], [ 92.77838, 11.83867 ], [ 92.77847, 11.83773 ], [ 92.77847, 11.83722 ], [ 92.77797, 11.83635 ], [ 92.77717, 11.83524 ], [ 92.77661, 11.83429 ], [ 92.77636, 11.83367 ], [ 92.77636, 11.83286 ], [ 92.77667, 11.83191 ], [ 92.77695, 11.83127 ], [ 92.7773, 11.83097 ], [ 92.77782, 11.83036 ], [ 92.77811, 11.82953 ], [ 92.77816, 11.82834 ], [ 92.77798, 11.82734 ], [ 92.77749, 11.82625 ], [ 92.77698, 11.82573 ], [ 92.77583, 11.82537 ], [ 92.7756, 11.82502 ], [ 92.77565, 11.82434 ], [ 92.77577, 11.82337 ], [ 92.77615, 11.82226 ], [ 92.7763, 11.82103 ], [ 92.77588, 11.81961 ], [ 92.77516, 11.81797 ], [ 92.77452, 11.81707 ], [ 92.7742, 11.81669 ], [ 92.77409, 11.81595 ], [ 92.77464, 11.81404 ], [ 92.77478, 11.81309 ], [ 92.7747, 11.81258 ], [ 92.77429, 11.81188 ], [ 92.77418, 11.81121 ], [ 92.77397, 11.81053 ], [ 92.77332, 11.80944 ], [ 92.77285, 11.80871 ], [ 92.77269, 11.80812 ], [ 92.77253, 11.80674 ], [ 92.77231, 11.80548 ], [ 92.77196, 11.8048 ], [ 92.77144, 11.80441 ], [ 92.77091, 11.8039 ], [ 92.77071, 11.80333 ], [ 92.77062, 11.80228 ], [ 92.77062, 11.80121 ], [ 92.77041, 11.80059 ], [ 92.76968, 11.80002 ], [ 92.76928, 11.79958 ], [ 92.76927, 11.79891 ], [ 92.76942, 11.79819 ], [ 92.76974, 11.79753 ], [ 92.77024, 11.79642 ], [ 92.7704, 11.79576 ], [ 92.77028, 11.79535 ], [ 92.76985, 11.79473 ], [ 92.7696, 11.79412 ], [ 92.7697, 11.79354 ], [ 92.76977, 11.79286 ], [ 92.76999, 11.79212 ], [ 92.77061, 11.79101 ], [ 92.77097, 11.79046 ], [ 92.77113, 11.78993 ], [ 92.771, 11.78927 ], [ 92.77088, 11.78828 ], [ 92.77063, 11.78712 ], [ 92.7706, 11.78637 ], [ 92.77065, 11.7856 ], [ 92.77029, 11.78478 ], [ 92.76957, 11.78336 ], [ 92.76867, 11.78187 ], [ 92.76822, 11.78133 ], [ 92.76777, 11.78101 ], [ 92.76732, 11.78045 ], [ 92.76687, 11.77936 ], [ 92.76693, 11.77835 ], [ 92.76735, 11.77768 ], [ 92.76751, 11.77666 ], [ 92.76809, 11.77615 ], [ 92.76859, 11.77591 ], [ 92.76884, 11.77517 ], [ 92.76857, 11.77405 ], [ 92.76862, 11.77323 ], [ 92.76845, 11.77195 ], [ 92.76788, 11.77092 ], [ 92.76659, 11.76972 ], [ 92.76638, 11.76908 ], [ 92.76585, 11.76844 ], [ 92.76496, 11.7678 ], [ 92.76455, 11.76721 ], [ 92.76447, 11.76629 ], [ 92.76465, 11.76521 ], [ 92.7651, 11.76448 ], [ 92.76549, 11.76395 ], [ 92.76563, 11.76309 ], [ 92.76544, 11.76183 ], [ 92.76513, 11.76127 ], [ 92.76446, 11.76106 ], [ 92.76383, 11.76097 ], [ 92.76347, 11.7607 ], [ 92.76345, 11.76021 ], [ 92.76357, 11.75965 ], [ 92.76386, 11.75924 ], [ 92.76428, 11.75913 ], [ 92.76471, 11.75897 ], [ 92.76512, 11.7585 ], [ 92.76529, 11.7577 ], [ 92.76533, 11.75678 ], [ 92.76545, 11.75573 ], [ 92.76569, 11.75253 ], [ 92.76551, 11.75119 ], [ 92.76491, 11.74995 ], [ 92.76424, 11.74896 ], [ 92.7636, 11.74845 ], [ 92.76322, 11.74788 ], [ 92.76268, 11.74716 ], [ 92.76218, 11.74682 ], [ 92.76156, 11.74646 ], [ 92.76113, 11.74606 ], [ 92.76079, 11.74555 ], [ 92.76065, 11.74497 ], [ 92.76066, 11.74451 ], [ 92.76081, 11.744 ], [ 92.76092, 11.74296 ], [ 92.761, 11.7426 ], [ 92.76114, 11.74244 ], [ 92.76138, 11.74225 ], [ 92.76166, 11.74193 ], [ 92.76177, 11.7416 ], [ 92.76173, 11.74132 ], [ 92.76158, 11.74104 ], [ 92.761538, 11.74083 ], [ 92.761511498903261, 11.740697494516288 ], [ 92.761498, 11.74063 ], [ 92.76129, 11.73959 ], [ 92.761, 11.73905 ], [ 92.76006, 11.73846 ], [ 92.75965, 11.73805 ], [ 92.75915, 11.7375 ], [ 92.75897, 11.73691 ], [ 92.75883, 11.73635 ], [ 92.7586, 11.73561 ], [ 92.75838, 11.73503 ], [ 92.75835, 11.73446 ], [ 92.75846, 11.734 ], [ 92.75887, 11.73317 ], [ 92.75887, 11.73247 ], [ 92.75861, 11.73139 ], [ 92.75863, 11.73123 ], [ 92.75894, 11.73013 ], [ 92.75878, 11.72939 ], [ 92.75864, 11.72914 ], [ 92.75738, 11.72782 ], [ 92.75609, 11.72675 ], [ 92.75578, 11.72623 ], [ 92.75578, 11.72551 ], [ 92.75589, 11.72495 ], [ 92.75628, 11.72431 ], [ 92.75644, 11.72365 ], [ 92.7564639, 11.7227601 ], [ 92.7562327, 11.7214763 ], [ 92.7564677, 11.7202488 ], [ 92.7563395, 11.7195775 ], [ 92.7560155, 11.7190932 ], [ 92.755567, 11.7187776 ], [ 92.7546615, 11.7183742 ], [ 92.75449, 11.71795 ], [ 92.75443, 11.71724 ], [ 92.75462, 11.71645 ], [ 92.75537, 11.71531 ], [ 92.7560385, 11.7143968 ], [ 92.756244, 11.7134267 ], [ 92.7569735, 11.7120242 ], [ 92.7570524, 11.7109905 ], [ 92.7572729, 11.7105629 ], [ 92.7571522, 11.7095633 ], [ 92.7573421, 11.7088589 ], [ 92.7572428, 11.7077416 ], [ 92.756502, 11.7063638 ], [ 92.75619, 11.70504 ], [ 92.7556421, 11.703066 ], [ 92.7551, 11.70184 ], [ 92.7547886, 11.7013399 ], [ 92.7544389, 11.7012191 ], [ 92.7544442, 11.7015958 ], [ 92.754154, 11.7018164 ], [ 92.75382, 11.70255 ], [ 92.7534421, 11.7030776 ], [ 92.752859, 11.7034768 ], [ 92.7521917, 11.7038146 ], [ 92.7518429, 11.7040707 ], [ 92.7516865, 11.7044096 ], [ 92.7517332, 11.7047148 ], [ 92.7519291, 11.7049097 ], [ 92.7518779, 11.7051688 ], [ 92.7515292, 11.705464 ], [ 92.75142, 11.70604 ], [ 92.7510247, 11.7064341 ], [ 92.7506879, 11.7071203 ], [ 92.7501941, 11.7075591 ], [ 92.7495623, 11.7077817 ], [ 92.7487653, 11.7087345 ], [ 92.7483779, 11.7094882 ], [ 92.7477768, 11.7099555 ], [ 92.7474, 11.71095 ], [ 92.74671, 11.7135 ], [ 92.74623, 11.71424 ], [ 92.74555, 11.71458 ], [ 92.74446, 11.71453 ], [ 92.74333, 11.71404 ], [ 92.74264, 11.71293 ], [ 92.74203, 11.71065 ], [ 92.7419, 11.70884 ], [ 92.74197, 11.70753 ], [ 92.74273, 11.70366 ], [ 92.74351, 11.70158 ], [ 92.74379, 11.70076 ], [ 92.74384, 11.69944 ], [ 92.74376, 11.69758 ], [ 92.74389, 11.69604 ], [ 92.74473, 11.69392 ], [ 92.74484, 11.69276 ], [ 92.7448, 11.69195 ], [ 92.74459, 11.69143 ], [ 92.74377, 11.6909 ], [ 92.74285, 11.6909 ], [ 92.74224, 11.69077 ], [ 92.74144, 11.69077 ], [ 92.74026, 11.69063 ], [ 92.73937, 11.69082 ], [ 92.73906, 11.69096 ], [ 92.73831, 11.69124 ], [ 92.73777, 11.69132 ], [ 92.73704, 11.69204 ], [ 92.73632, 11.69244 ], [ 92.73589, 11.6928 ], [ 92.73575, 11.6933 ], [ 92.73575, 11.69412 ], [ 92.7352811, 11.6943477 ], [ 92.7342895, 11.6949511 ], [ 92.7336281, 11.6954303 ], [ 92.7332659, 11.6954923 ], [ 92.7328427, 11.6959669 ], [ 92.73257, 11.69719 ], [ 92.73216, 11.69801 ], [ 92.73199, 11.69855 ], [ 92.73147, 11.69901 ], [ 92.7306, 11.69917 ], [ 92.72985, 11.69923 ], [ 92.7294, 11.69915 ], [ 92.72899, 11.69877 ], [ 92.72892, 11.6979 ], [ 92.72888, 11.69668 ], [ 92.72881, 11.69575 ], [ 92.72855, 11.69504 ], [ 92.72814, 11.695 ], [ 92.72752, 11.69549 ], [ 92.72701, 11.6962 ], [ 92.72699, 11.69729 ], [ 92.72682, 11.69773 ], [ 92.7264, 11.69775 ], [ 92.7255714, 11.6977254 ], [ 92.7227433, 11.6977194 ], [ 92.722553, 11.69775 ], [ 92.72194, 11.69806 ], [ 92.7217444, 11.6981896 ], [ 92.72083, 11.69979 ], [ 92.7207586, 11.6999582 ], [ 92.7205997, 11.7011871 ], [ 92.7206306, 11.7016595 ], [ 92.7205803, 11.7018992 ], [ 92.7203435, 11.7020857 ], [ 92.7201395, 11.7024147 ], [ 92.7200517, 11.7027779 ], [ 92.7200744, 11.7034543 ], [ 92.7198543, 11.7041071 ], [ 92.7194323, 11.7050927 ], [ 92.71918, 11.7054 ], [ 92.7189953, 11.7055788 ], [ 92.7185239, 11.7058113 ], [ 92.7177627, 11.7061425 ], [ 92.717595, 11.7061501 ], [ 92.71704, 11.70594 ], [ 92.7157674, 11.7052621 ], [ 92.7156809, 11.7050867 ], [ 92.715779, 11.7050441 ], [ 92.7157585, 11.7048586 ], [ 92.7157173, 11.7048599 ], [ 92.7157051, 11.7047619 ], [ 92.7157497, 11.7047629 ], [ 92.715748, 11.7047175 ], [ 92.715821, 11.7047033 ], [ 92.7158057, 11.7046 ], [ 92.715553, 11.7046238 ], [ 92.7154373, 11.704772 ], [ 92.715385, 11.704445 ], [ 92.7151491, 11.7044813 ], [ 92.715087, 11.7044508 ], [ 92.7150778, 11.7043764 ], [ 92.7150493, 11.7042959 ], [ 92.7148633, 11.7043746 ], [ 92.7147692, 11.7043337 ], [ 92.7146459, 11.7042423 ], [ 92.7145531, 11.7041724 ], [ 92.7145584, 11.704143 ], [ 92.7144563, 11.7040651 ], [ 92.7144272, 11.7041197 ], [ 92.7141473, 11.7039614 ], [ 92.7138438, 11.7037397 ], [ 92.7138839, 11.7036993 ], [ 92.7138494, 11.7036718 ], [ 92.7138075, 11.7036676 ], [ 92.7137065, 11.703592 ], [ 92.7136406, 11.703483 ], [ 92.7135442, 11.7034071 ], [ 92.7134498, 11.7032495 ], [ 92.7134063, 11.7030895 ], [ 92.7134385, 11.7030228 ], [ 92.7134816, 11.7029751 ], [ 92.7134997, 11.7029146 ], [ 92.7135614, 11.7028705 ], [ 92.7136653, 11.702843 ], [ 92.7136605, 11.7021686 ], [ 92.7135771, 11.7018455 ], [ 92.7136569, 11.7007924 ], [ 92.7138051, 11.7003182 ], [ 92.7139878, 11.7000858 ], [ 92.714323, 11.6997274 ], [ 92.7144692, 11.6995749 ], [ 92.71432, 11.69934 ], [ 92.7142126, 11.6991299 ], [ 92.7142554, 11.6990427 ], [ 92.7141169, 11.6989903 ], [ 92.7137891, 11.6984811 ], [ 92.7137951, 11.6983708 ], [ 92.7137521, 11.6982825 ], [ 92.7138277, 11.6981904 ], [ 92.713788, 11.6981241 ], [ 92.7137286, 11.6981062 ], [ 92.7136439, 11.6981569 ], [ 92.7135878, 11.6981041 ], [ 92.713269, 11.6975277 ], [ 92.7130747, 11.6970516 ], [ 92.7129891, 11.6965774 ], [ 92.713013, 11.6964205 ], [ 92.7131, 11.6963266 ], [ 92.7132009, 11.6962943 ], [ 92.7132887, 11.6961623 ], [ 92.7133019, 11.696037 ], [ 92.7132722, 11.6959232 ], [ 92.7131947, 11.6958285 ], [ 92.7131065, 11.6958235 ], [ 92.7126961, 11.6955297 ], [ 92.7126776, 11.6954298 ], [ 92.7126073, 11.6954432 ], [ 92.7125415, 11.6953883 ], [ 92.7124806, 11.6952522 ], [ 92.7123175, 11.6952868 ], [ 92.7121499, 11.6954608 ], [ 92.7118716, 11.6954709 ], [ 92.7117447, 11.6954516 ], [ 92.7115965, 11.6955159 ], [ 92.71119, 11.69604 ], [ 92.71006, 11.69727 ], [ 92.70961, 11.69767 ], [ 92.7082677, 11.6999007 ], [ 92.7081339, 11.7013946 ], [ 92.7083155, 11.701861 ], [ 92.7086902, 11.7028831 ], [ 92.707914, 11.7037742 ], [ 92.7068166, 11.7046653 ], [ 92.7056924, 11.705504 ], [ 92.7049163, 11.7061855 ], [ 92.7038456, 11.707758 ], [ 92.7029891, 11.7089111 ], [ 92.7019453, 11.7098284 ], [ 92.7032411, 11.7078207 ], [ 92.7018758, 11.7065251 ], [ 92.7016963, 11.7058902 ], [ 92.7023468, 11.7054516 ], [ 92.7032033, 11.7048488 ], [ 92.7046218, 11.7034597 ], [ 92.7051839, 11.7022803 ], [ 92.7048092, 11.7022279 ], [ 92.7037921, 11.7021493 ], [ 92.7015438, 11.7020182 ], [ 92.6998041, 11.7019396 ], [ 92.6987334, 11.701861 ], [ 92.6980375, 11.7028045 ], [ 92.6965119, 11.7052157 ], [ 92.6959498, 11.7061855 ], [ 92.6953075, 11.7073124 ], [ 92.6941566, 11.709016 ], [ 92.6932198, 11.709776 ], [ 92.6926845, 11.7105361 ], [ 92.6927648, 11.711532 ], [ 92.6935677, 11.7126851 ], [ 92.6950666, 11.7156728 ], [ 92.6956019, 11.7167736 ], [ 92.6962175, 11.7171667 ], [ 92.6968063, 11.7175074 ], [ 92.6974487, 11.7181364 ], [ 92.6982784, 11.7185033 ], [ 92.6995364, 11.7185819 ], [ 92.701062, 11.7185557 ], [ 92.701865, 11.718844 ], [ 92.7035245, 11.7191322 ], [ 92.7044612, 11.7185557 ], [ 92.7050233, 11.717717 ], [ 92.706201, 11.7173763 ], [ 92.7078872, 11.7168784 ], [ 92.7083422, 11.7170881 ], [ 92.7076196, 11.7177432 ], [ 92.707004, 11.7187653 ], [ 92.7064686, 11.7198923 ], [ 92.705853, 11.720495 ], [ 92.706656, 11.7204426 ], [ 92.7077534, 11.7194467 ], [ 92.7089311, 11.718975 ], [ 92.7093058, 11.7196302 ], [ 92.7092522, 11.7210192 ], [ 92.7085831, 11.721124 ], [ 92.7077534, 11.7216482 ], [ 92.7074054, 11.7238496 ], [ 92.7077801, 11.724924 ], [ 92.7082887, 11.7257889 ], [ 92.7076999, 11.7270992 ], [ 92.7070575, 11.7285144 ], [ 92.707111, 11.7298771 ], [ 92.7059066, 11.7299557 ], [ 92.7041133, 11.7297461 ], [ 92.7038992, 11.7287764 ], [ 92.7030694, 11.7273875 ], [ 92.7020256, 11.7266275 ], [ 92.697984, 11.7194205 ], [ 92.6973149, 11.718975 ], [ 92.6962443, 11.718346 ], [ 92.6956608, 11.7180866 ], [ 92.6950552, 11.7169376 ], [ 92.6928976, 11.7122305 ], [ 92.6924812, 11.7110445 ], [ 92.6926326, 11.7100438 ], [ 92.6931247, 11.7091172 ], [ 92.6945252, 11.707301 ], [ 92.6952066, 11.7062261 ], [ 92.6963421, 11.7045953 ], [ 92.6971749, 11.7031868 ], [ 92.6976291, 11.7020378 ], [ 92.697402, 11.7015559 ], [ 92.6957744, 11.7008888 ], [ 92.6941846, 11.7002216 ], [ 92.6927841, 11.6995173 ], [ 92.6919513, 11.6980347 ], [ 92.6912321, 11.6977382 ], [ 92.6901723, 11.6979235 ], [ 92.6897559, 11.6984424 ], [ 92.6891503, 11.699332 ], [ 92.6885446, 11.700444 ], [ 92.6880526, 11.701037 ], [ 92.6873712, 11.7020007 ], [ 92.6874469, 11.7028532 ], [ 92.6877876, 11.7036316 ], [ 92.6883175, 11.7044841 ], [ 92.6891124, 11.705596 ], [ 92.689226, 11.7065597 ], [ 92.6886582, 11.7074493 ], [ 92.6875983, 11.7080794 ], [ 92.6855543, 11.7089318 ], [ 92.6849865, 11.709599 ], [ 92.6852894, 11.7105997 ], [ 92.685895, 11.711897 ], [ 92.6847216, 11.7104515 ], [ 92.684608, 11.7098214 ], [ 92.6851379, 11.7088206 ], [ 92.6871441, 11.7076717 ], [ 92.6882797, 11.7071527 ], [ 92.6888096, 11.7062632 ], [ 92.6882418, 11.7051883 ], [ 92.6877119, 11.7044841 ], [ 92.686917, 11.7024826 ], [ 92.6870305, 11.7015189 ], [ 92.6877497, 11.7004069 ], [ 92.688961, 11.6983683 ], [ 92.6897559, 11.6972934 ], [ 92.6909293, 11.6972563 ], [ 92.6921406, 11.6974787 ], [ 92.6932761, 11.6984795 ], [ 92.6953958, 11.6999992 ], [ 92.6982347, 11.7005922 ], [ 92.7005437, 11.7005181 ], [ 92.7055644, 11.7002676 ], [ 92.7067688, 11.6999531 ], [ 92.7066771, 11.6993145 ], [ 92.70507, 11.69894 ], [ 92.70345, 11.69828 ], [ 92.70217, 11.69718 ], [ 92.70149, 11.69462 ], [ 92.70145, 11.69287 ], [ 92.70154, 11.69193 ], [ 92.70219, 11.69083 ], [ 92.70252, 11.68952 ], [ 92.70272, 11.68896 ], [ 92.70308, 11.68676 ], [ 92.70327, 11.68528 ], [ 92.70352, 11.68434 ], [ 92.70387, 11.68339 ], [ 92.70391, 11.68289 ], [ 92.70373, 11.68243 ], [ 92.7031, 11.68167 ], [ 92.70275, 11.68103 ], [ 92.70218, 11.68024 ], [ 92.70162, 11.67995 ], [ 92.70105, 11.68001 ], [ 92.7006, 11.67971 ], [ 92.70099, 11.67913 ], [ 92.70106, 11.67867 ], [ 92.70079, 11.67818 ], [ 92.70085, 11.6773 ], [ 92.70077, 11.6754 ], [ 92.700865454545465, 11.67498 ], [ 92.70107, 11.67408 ], [ 92.7017, 11.6725 ], [ 92.7021, 11.67211 ], [ 92.70277, 11.67205 ], [ 92.70318, 11.67213 ], [ 92.70475, 11.6715 ], [ 92.70536, 11.67157 ], [ 92.70601, 11.67195 ], [ 92.7063, 11.67191 ], [ 92.70632, 11.67163 ], [ 92.70618, 11.67129 ], [ 92.70652, 11.67106 ], [ 92.70688, 11.67136 ], [ 92.70795, 11.67194 ], [ 92.70837, 11.67186 ], [ 92.7086, 11.67135 ], [ 92.70845, 11.6708 ], [ 92.7077, 11.6703 ], [ 92.7071, 11.66967 ], [ 92.70635, 11.66932 ], [ 92.70597, 11.66937 ], [ 92.70523, 11.66921 ], [ 92.70485, 11.66857 ], [ 92.70415, 11.66778 ], [ 92.70251, 11.66687 ], [ 92.70117, 11.66692 ], [ 92.70029, 11.66708 ], [ 92.69971, 11.66686 ], [ 92.69895, 11.66632 ], [ 92.69846, 11.66594 ], [ 92.69758, 11.66613 ], [ 92.69679, 11.6665 ], [ 92.69617, 11.6669 ], [ 92.69544, 11.66765 ], [ 92.69469, 11.66799 ], [ 92.69444, 11.66815 ], [ 92.69383, 11.66883 ], [ 92.6932, 11.66908 ], [ 92.69294, 11.66887 ], [ 92.69251, 11.66839 ], [ 92.69205, 11.66731 ], [ 92.69197, 11.66688 ], [ 92.69214, 11.66637 ], [ 92.69227, 11.66562 ], [ 92.69224, 11.66503 ], [ 92.69184, 11.66451 ], [ 92.69143, 11.66425 ], [ 92.69027, 11.66408 ], [ 92.68946, 11.6637 ], [ 92.68877, 11.66317 ], [ 92.68807, 11.66307 ], [ 92.68718, 11.66314 ], [ 92.68642, 11.66323 ], [ 92.68566, 11.66263 ], [ 92.6853, 11.66171 ], [ 92.68483, 11.66036 ], [ 92.68457, 11.66002 ], [ 92.68384, 11.65946 ], [ 92.68364, 11.65919 ], [ 92.6837, 11.65897 ], [ 92.68412, 11.65842 ], [ 92.68467, 11.6579 ], [ 92.68526, 11.65746 ], [ 92.68593, 11.65668 ], [ 92.68624, 11.65642 ], [ 92.68631, 11.65601 ], [ 92.68623, 11.65561 ], [ 92.68567, 11.65513 ], [ 92.6849, 11.65498 ], [ 92.68467, 11.65474 ], [ 92.68501, 11.65438 ], [ 92.68533, 11.65384 ], [ 92.68516, 11.65347 ], [ 92.68457, 11.65309 ], [ 92.68404, 11.65261 ], [ 92.68362, 11.65166 ], [ 92.68337, 11.65089 ], [ 92.68304, 11.65075 ], [ 92.68243, 11.65133 ], [ 92.68197, 11.65182 ], [ 92.68118, 11.65185 ], [ 92.68003, 11.65195 ], [ 92.67896, 11.65225 ], [ 92.67671, 11.65311 ], [ 92.6746, 11.65396 ], [ 92.67328, 11.65419 ], [ 92.67234, 11.65392 ], [ 92.67133, 11.65411 ], [ 92.67029, 11.65437 ], [ 92.66917, 11.65414 ], [ 92.66815, 11.65427 ], [ 92.66685, 11.65448 ], [ 92.66615, 11.6545 ], [ 92.66598, 11.65414 ], [ 92.66612, 11.65366 ], [ 92.66638, 11.65297 ], [ 92.66595, 11.65189 ], [ 92.66536, 11.64982 ], [ 92.66536, 11.64825 ], [ 92.66531, 11.64716 ], [ 92.66504, 11.64583 ], [ 92.66503, 11.64486 ], [ 92.66527, 11.64438 ], [ 92.66592, 11.64401 ], [ 92.66722, 11.64316 ], [ 92.66768, 11.64276 ], [ 92.66754, 11.64236 ], [ 92.6673, 11.64203 ], [ 92.66729, 11.64166 ], [ 92.66752, 11.64118 ], [ 92.6679, 11.6411 ], [ 92.66828, 11.64093 ], [ 92.66829, 11.64049 ], [ 92.66801, 11.63985 ], [ 92.66745, 11.63925 ], [ 92.66691, 11.63852 ], [ 92.66681, 11.63759 ], [ 92.66705, 11.63649 ], [ 92.6689, 11.63342 ], [ 92.66946, 11.63234 ], [ 92.67021, 11.63125 ], [ 92.67094, 11.63044 ], [ 92.67152, 11.62986 ], [ 92.67191, 11.62997 ], [ 92.67242, 11.63004 ], [ 92.67286, 11.62977 ], [ 92.67294, 11.62936 ], [ 92.67288, 11.6288 ], [ 92.67265, 11.62782 ], [ 92.67275, 11.62709 ], [ 92.67313, 11.62621 ], [ 92.6736, 11.62538 ], [ 92.67413, 11.62436 ], [ 92.67463, 11.62396 ], [ 92.67527, 11.62394 ], [ 92.67603, 11.62453 ], [ 92.67682, 11.62519 ], [ 92.67744, 11.62651 ], [ 92.67746, 11.62778 ], [ 92.67764, 11.62812 ], [ 92.67858, 11.62774 ], [ 92.67958, 11.6273 ], [ 92.68029, 11.62749 ], [ 92.68113, 11.62858 ], [ 92.68169, 11.62974 ], [ 92.68155, 11.63096 ], [ 92.68172, 11.63208 ], [ 92.68156, 11.6329 ], [ 92.68046, 11.63391 ], [ 92.68002, 11.63489 ], [ 92.68052, 11.63537 ], [ 92.68127, 11.63578 ], [ 92.68181, 11.63744 ], [ 92.68207, 11.6374 ], [ 92.68218, 11.63698 ], [ 92.68218, 11.63642 ], [ 92.68247, 11.63553 ], [ 92.68286, 11.63502 ], [ 92.68333, 11.63494 ], [ 92.6839, 11.63463 ], [ 92.68417, 11.63434 ], [ 92.68431, 11.63375 ], [ 92.68426, 11.63256 ], [ 92.6843, 11.63047 ], [ 92.68489, 11.62845 ], [ 92.68524, 11.62778 ], [ 92.68566, 11.62798 ], [ 92.68588, 11.62863 ], [ 92.6865, 11.62889 ], [ 92.68758, 11.62897 ], [ 92.68899, 11.62916 ], [ 92.68997, 11.62895 ], [ 92.69107, 11.62836 ], [ 92.69187, 11.62737 ], [ 92.69266, 11.62605 ], [ 92.69319, 11.62498 ], [ 92.69379, 11.62454 ], [ 92.69515, 11.6246 ], [ 92.69587, 11.62519 ], [ 92.69612, 11.62602 ], [ 92.69646, 11.62673 ], [ 92.69681, 11.62709 ], [ 92.69716, 11.6277 ], [ 92.69738, 11.62839 ], [ 92.69736, 11.62877 ], [ 92.69707, 11.62913 ], [ 92.69647, 11.62959 ], [ 92.69574, 11.63042 ], [ 92.69523, 11.63083 ], [ 92.69501, 11.63117 ], [ 92.69476, 11.63131 ], [ 92.69431, 11.63137 ], [ 92.69409, 11.63151 ], [ 92.69427, 11.63189 ], [ 92.69465, 11.63206 ], [ 92.69484, 11.63223 ], [ 92.69484, 11.63251 ], [ 92.69459, 11.63278 ], [ 92.69393, 11.63299 ], [ 92.69337, 11.63322 ], [ 92.69314, 11.63349 ], [ 92.69298, 11.63406 ], [ 92.69306, 11.63479 ], [ 92.69322, 11.63527 ], [ 92.69322, 11.63563 ], [ 92.69317, 11.63587 ], [ 92.69327, 11.63643 ], [ 92.69331, 11.63682 ], [ 92.69343, 11.6375 ], [ 92.69351, 11.63767 ], [ 92.69381, 11.63788 ], [ 92.69443, 11.63866 ], [ 92.69483, 11.63902 ], [ 92.69507, 11.63908 ], [ 92.69536, 11.63911 ], [ 92.69576, 11.63897 ], [ 92.69674, 11.63828 ], [ 92.69692, 11.63825 ], [ 92.69803, 11.63826 ], [ 92.69896, 11.63877 ], [ 92.69982, 11.63983 ], [ 92.70025, 11.64041 ], [ 92.70074, 11.64115 ], [ 92.70093, 11.64176 ], [ 92.70089, 11.64232 ], [ 92.70066, 11.64305 ], [ 92.7004, 11.64368 ], [ 92.70022, 11.64438 ], [ 92.70012, 11.64491 ], [ 92.70017, 11.64524 ], [ 92.70076, 11.64575 ], [ 92.70098, 11.64617 ], [ 92.70106, 11.64663 ], [ 92.70101, 11.6472 ], [ 92.70062, 11.64789 ], [ 92.70016, 11.64862 ], [ 92.69911, 11.64924 ], [ 92.69876, 11.64958 ], [ 92.69851, 11.64962 ], [ 92.69822, 11.64943 ], [ 92.69779, 11.64927 ], [ 92.69732, 11.64932 ], [ 92.69694, 11.64948 ], [ 92.69649, 11.64944 ], [ 92.6961, 11.64956 ], [ 92.69586, 11.64981 ], [ 92.69585, 11.65007 ], [ 92.69588, 11.65042 ], [ 92.69579, 11.65078 ], [ 92.69558, 11.65102 ], [ 92.69525, 11.65126 ], [ 92.69501, 11.65159 ], [ 92.6949, 11.65188 ], [ 92.69468, 11.65222 ], [ 92.69463, 11.65244 ], [ 92.69468, 11.6527 ], [ 92.69491, 11.65294 ], [ 92.69527, 11.65313 ], [ 92.69619, 11.65325 ], [ 92.69659, 11.65327 ], [ 92.69688, 11.65315 ], [ 92.69715, 11.65289 ], [ 92.69736, 11.65288 ], [ 92.69762, 11.65301 ], [ 92.69797, 11.65329 ], [ 92.6983, 11.65364 ], [ 92.69898, 11.65402 ], [ 92.6996, 11.65428 ], [ 92.70024, 11.65448 ], [ 92.70088, 11.6546 ], [ 92.70131, 11.65454 ], [ 92.70163, 11.65447 ], [ 92.70225, 11.65401 ], [ 92.70249, 11.65357 ], [ 92.70277, 11.65296 ], [ 92.70296, 11.65228 ], [ 92.70317, 11.65221 ], [ 92.70337, 11.65222 ], [ 92.70362, 11.65211 ], [ 92.70404, 11.65198 ], [ 92.70418, 11.65185 ], [ 92.70439, 11.65151 ], [ 92.70524, 11.64986 ], [ 92.70569, 11.64889 ], [ 92.70572, 11.64847 ], [ 92.7057, 11.64804 ], [ 92.70575, 11.64765 ], [ 92.70595, 11.64733 ], [ 92.70598, 11.64685 ], [ 92.70596, 11.64638 ], [ 92.70605, 11.64606 ], [ 92.70631, 11.6457 ], [ 92.70658, 11.64524 ], [ 92.70668, 11.64469 ], [ 92.70678, 11.64435 ], [ 92.707, 11.64404 ], [ 92.7071, 11.64366 ], [ 92.70713, 11.64321 ], [ 92.7072, 11.64283 ], [ 92.70742, 11.64264 ], [ 92.70833, 11.64263 ], [ 92.70942, 11.64283 ], [ 92.71019, 11.64305 ], [ 92.71098, 11.6431 ], [ 92.71174, 11.64309 ], [ 92.7124, 11.64315 ], [ 92.71269, 11.64337 ], [ 92.71278, 11.64379 ], [ 92.71281, 11.64429 ], [ 92.71271, 11.64491 ], [ 92.71249, 11.64541 ], [ 92.71228, 11.64574 ], [ 92.71212, 11.6461 ], [ 92.71207, 11.64666 ], [ 92.71211, 11.64716 ], [ 92.71179, 11.64798 ], [ 92.7114, 11.64849 ], [ 92.71108, 11.6491 ], [ 92.7107, 11.64963 ], [ 92.71042, 11.65033 ], [ 92.71015, 11.65077 ], [ 92.71002, 11.65113 ], [ 92.7101, 11.65139 ], [ 92.71023, 11.65161 ], [ 92.71043, 11.65177 ], [ 92.71056, 11.65192 ], [ 92.71071, 11.65203 ], [ 92.71092, 11.65207 ], [ 92.71125, 11.65233 ], [ 92.71156, 11.65242 ], [ 92.71212, 11.65245 ], [ 92.71231, 11.65252 ], [ 92.7126, 11.65276 ], [ 92.71296, 11.65282 ], [ 92.71323, 11.65282 ], [ 92.71351, 11.65287 ], [ 92.71379, 11.65298 ], [ 92.71407, 11.65304 ], [ 92.71473, 11.65301 ], [ 92.71505, 11.65297 ], [ 92.71541, 11.65288 ], [ 92.71561, 11.6528 ], [ 92.71583, 11.65264 ], [ 92.7161, 11.65253 ], [ 92.71633, 11.65256 ], [ 92.71669, 11.6528 ], [ 92.71691, 11.65285 ], [ 92.71745, 11.65261 ], [ 92.71766, 11.65255 ], [ 92.71789, 11.65259 ], [ 92.71822, 11.65271 ], [ 92.71844, 11.65268 ], [ 92.71865, 11.65262 ], [ 92.71914, 11.65273 ], [ 92.72017, 11.65291 ], [ 92.72129, 11.65342 ], [ 92.72149, 11.65368 ], [ 92.72193, 11.65404 ], [ 92.72202, 11.65446 ], [ 92.72213, 11.65477 ], [ 92.72233, 11.65494 ], [ 92.72293, 11.65537 ], [ 92.72319, 11.65546 ], [ 92.72329, 11.65559 ], [ 92.72357, 11.65579 ], [ 92.72404, 11.65584 ], [ 92.72513, 11.65568 ], [ 92.72528, 11.65571 ], [ 92.72539, 11.65587 ], [ 92.72541, 11.65601 ], [ 92.72536, 11.6564 ], [ 92.72549, 11.65656 ], [ 92.72579, 11.65668 ], [ 92.72613, 11.65677 ], [ 92.72636, 11.65676 ], [ 92.72649, 11.65659 ], [ 92.7266, 11.65656 ], [ 92.72694, 11.65675 ], [ 92.72742, 11.65709 ], [ 92.72782, 11.65719 ], [ 92.72841, 11.657 ], [ 92.72907, 11.65685 ], [ 92.72961, 11.657 ], [ 92.73001, 11.65752 ], [ 92.73022, 11.65824 ], [ 92.73012, 11.6591 ], [ 92.73019, 11.66007 ], [ 92.73008, 11.66041 ], [ 92.72954, 11.66071 ], [ 92.72898, 11.66087 ], [ 92.72874, 11.66114 ], [ 92.72832, 11.66121 ], [ 92.72795, 11.66138 ], [ 92.72768, 11.66143 ], [ 92.72648, 11.66134 ], [ 92.72637, 11.6619 ], [ 92.72592, 11.66215 ], [ 92.72507, 11.66242 ], [ 92.72402, 11.6626 ], [ 92.72347, 11.66262 ], [ 92.72294, 11.6625 ], [ 92.72243, 11.66257 ], [ 92.7217, 11.66288 ], [ 92.72112, 11.66316 ], [ 92.71979, 11.66352 ], [ 92.71922, 11.6638 ], [ 92.71874, 11.6643 ], [ 92.71815, 11.665 ], [ 92.71779, 11.66516 ], [ 92.71657, 11.66509 ], [ 92.71638, 11.66521 ], [ 92.71645, 11.66563 ], [ 92.71666, 11.66616 ], [ 92.71678, 11.66667 ], [ 92.71701, 11.66706 ], [ 92.71703, 11.66765 ], [ 92.71725, 11.66818 ], [ 92.71827, 11.66908 ], [ 92.71877, 11.66967 ], [ 92.71879, 11.67019 ], [ 92.71839, 11.67095 ], [ 92.7179036, 11.67153 ], [ 92.71761, 11.67188 ], [ 92.71754, 11.67244 ], [ 92.71744, 11.67296 ], [ 92.7171, 11.67347 ], [ 92.71689, 11.67367 ], [ 92.71694, 11.67414 ], [ 92.71697, 11.67482 ], [ 92.716860731707314, 11.67498 ], [ 92.716746835509454, 11.675146776575447 ], [ 92.716724146341463, 11.67518 ], [ 92.71669, 11.67523 ], [ 92.7164, 11.67557 ], [ 92.7158868, 11.6756983 ], [ 92.715716, 11.6758755 ], [ 92.7158612, 11.6761255 ], [ 92.7163, 11.67623 ], [ 92.71641, 11.67643 ], [ 92.71632, 11.67667 ], [ 92.71584, 11.67711 ], [ 92.71573, 11.67745 ], [ 92.71602, 11.67809 ], [ 92.71632, 11.67848 ], [ 92.71683, 11.67848 ], [ 92.71724, 11.67863 ], [ 92.71749, 11.679 ], [ 92.7174828, 11.6790939 ], [ 92.7169357, 11.6795252 ], [ 92.7168398, 11.6795335 ], [ 92.7167035, 11.6793749 ], [ 92.7166268, 11.6794313 ], [ 92.7167972, 11.6796253 ], [ 92.716712, 11.6796983 ], [ 92.7168036, 11.6798256 ], [ 92.7167459, 11.6799098 ], [ 92.7158031, 11.679608 ], [ 92.7147303, 11.6783473 ], [ 92.7146132, 11.6784364 ], [ 92.715686, 11.6797417 ], [ 92.7165925, 11.6800286 ], [ 92.7189772, 11.6828367 ], [ 92.7217315, 11.6861691 ], [ 92.7219463, 11.6860002 ], [ 92.7211681, 11.6850809 ], [ 92.721596, 11.6847261 ], [ 92.7218739, 11.6840297 ], [ 92.7219335, 11.6844204 ], [ 92.7221047, 11.684409 ], [ 92.7236482, 11.6843057 ], [ 92.7237247, 11.6847454 ], [ 92.7233705, 11.6848888 ], [ 92.7234318, 11.6853009 ], [ 92.7230802, 11.6857417 ], [ 92.7231441, 11.6857834 ], [ 92.7232959, 11.6856113 ], [ 92.7233572, 11.6856712 ], [ 92.7237913, 11.6851262 ], [ 92.7237946, 11.6852192 ], [ 92.7239697, 11.6851966 ], [ 92.72383, 11.68425 ], [ 92.72376, 11.68356 ], [ 92.72388, 11.6833 ], [ 92.724, 11.68244 ], [ 92.72426, 11.68201 ], [ 92.72457, 11.68165 ], [ 92.7252, 11.68115 ], [ 92.7257, 11.68084 ], [ 92.72667, 11.68014 ], [ 92.72711, 11.67986 ], [ 92.72732, 11.67978 ], [ 92.72788, 11.67976 ], [ 92.72804, 11.67971 ], [ 92.72823, 11.6798 ], [ 92.72873, 11.67993 ], [ 92.72905, 11.68007 ], [ 92.72969, 11.68019 ], [ 92.72979, 11.68017 ], [ 92.73013, 11.67997 ], [ 92.73048, 11.67967 ], [ 92.73057, 11.67956 ], [ 92.73074, 11.67894 ], [ 92.73095, 11.67768 ], [ 92.73101, 11.67745 ], [ 92.73133, 11.67689 ], [ 92.73133, 11.67658 ], [ 92.73096, 11.67587 ], [ 92.73088, 11.67566 ], [ 92.73084, 11.67532 ], [ 92.730851333333419, 11.675093333331722 ], [ 92.73086, 11.67492 ], [ 92.73091, 11.67466 ], [ 92.73095, 11.67415 ], [ 92.73104, 11.67344 ], [ 92.73112, 11.67334 ], [ 92.73162, 11.67302 ], [ 92.73173, 11.67285 ], [ 92.73196, 11.67266 ], [ 92.73252, 11.67238 ], [ 92.7330535, 11.6722634 ], [ 92.7330535, 11.6723486 ], [ 92.7330903, 11.6723462 ], [ 92.7342492, 11.6723692 ], [ 92.7343467, 11.672481 ], [ 92.7343948, 11.6727374 ], [ 92.7344102, 11.672822 ], [ 92.7344398, 11.6729096 ], [ 92.7341357, 11.6738899 ], [ 92.7341497, 11.6739203 ], [ 92.7342192, 11.6739413 ], [ 92.7342413, 11.6739264 ], [ 92.7345693, 11.6729461 ], [ 92.735066, 11.6728692 ], [ 92.734704, 11.6739688 ], [ 92.7347748, 11.674085 ], [ 92.7348842, 11.6740431 ], [ 92.7348461, 11.6740012 ], [ 92.7354331, 11.673559 ], [ 92.7355424, 11.6737126 ], [ 92.7349626, 11.6741594 ], [ 92.7349364, 11.6741268 ], [ 92.7348124, 11.6742409 ], [ 92.7351804, 11.6748675 ], [ 92.7355538, 11.6746586 ], [ 92.735655, 11.6748211 ], [ 92.7353295, 11.6750134 ], [ 92.7353866, 11.6751047 ], [ 92.7357506, 11.6750203 ], [ 92.7357645, 11.6750613 ], [ 92.73609604310181, 11.67498 ], [ 92.7361931, 11.6749562 ], [ 92.7361794, 11.675028 ], [ 92.7362403, 11.6750925 ], [ 92.735948633333336, 11.67518 ], [ 92.7354413, 11.6753322 ], [ 92.7358737, 11.675516 ], [ 92.7358178, 11.6756413 ], [ 92.735328, 11.6754382 ], [ 92.7352874, 11.6754777 ], [ 92.7352049, 11.6754317 ], [ 92.735182, 11.6754752 ], [ 92.7350572, 11.6754072 ], [ 92.7349704, 11.6755671 ], [ 92.7350946, 11.6756401 ], [ 92.7351257, 11.6755902 ], [ 92.7354376, 11.6757618 ], [ 92.735445, 11.6758409 ], [ 92.7354214, 11.6758871 ], [ 92.7353071, 11.6759005 ], [ 92.7350661, 11.6757886 ], [ 92.7350646, 11.6757733 ], [ 92.7348602, 11.6757857 ], [ 92.7347172, 11.6763553 ], [ 92.7349095, 11.676453 ], [ 92.73493, 11.67651 ], [ 92.73507, 11.67655 ], [ 92.73521, 11.6765 ], [ 92.73526, 11.67652 ], [ 92.73558, 11.67684 ], [ 92.73584, 11.677 ], [ 92.736, 11.67707 ], [ 92.73617, 11.6771 ], [ 92.73651, 11.67723 ], [ 92.73701, 11.67734 ], [ 92.73825, 11.67755 ], [ 92.7385, 11.67752 ], [ 92.73918, 11.67726 ], [ 92.73968, 11.6771 ], [ 92.74033, 11.6768 ], [ 92.74048, 11.67675 ], [ 92.74061, 11.67674 ], [ 92.74115, 11.67655 ], [ 92.74298, 11.67574 ], [ 92.74341, 11.67552 ], [ 92.744, 11.6753 ], [ 92.74429, 11.67526 ], [ 92.74464, 11.67531 ], [ 92.74523, 11.67562 ], [ 92.74576, 11.67584 ], [ 92.74615, 11.67613 ], [ 92.74667, 11.67637 ], [ 92.74707, 11.67646 ], [ 92.74743, 11.67643 ], [ 92.74767, 11.67638 ], [ 92.74784, 11.67627 ], [ 92.748, 11.67622 ], [ 92.74849, 11.67616 ], [ 92.74877, 11.6761 ], [ 92.74904, 11.67589 ], [ 92.74923, 11.67569 ], [ 92.74935, 11.67548 ], [ 92.74944, 11.67518 ], [ 92.74947, 11.67498 ], [ 92.7494, 11.67434 ], [ 92.74933, 11.67398 ], [ 92.74916, 11.67359 ], [ 92.74903, 11.67313 ], [ 92.74884, 11.67287 ], [ 92.74878, 11.67268 ], [ 92.74877, 11.67255 ], [ 92.7486869, 11.6723911 ], [ 92.7483903, 11.6722711 ], [ 92.7479184, 11.6720531 ], [ 92.7477514, 11.6719147 ], [ 92.74757, 11.67181 ], [ 92.74744, 11.67159 ], [ 92.7473508, 11.6712728 ], [ 92.7473443, 11.6710532 ], [ 92.7474646, 11.6710636 ], [ 92.7474999, 11.6708848 ], [ 92.7473614, 11.6708648 ], [ 92.7475094, 11.6702167 ], [ 92.7479217, 11.6691494 ], [ 92.74829, 11.66835 ], [ 92.74843, 11.6681 ], [ 92.74866, 11.66786 ], [ 92.74948, 11.66737 ], [ 92.75067, 11.66669 ], [ 92.75102, 11.66653 ], [ 92.75119, 11.66648 ], [ 92.75135, 11.66653 ], [ 92.75152, 11.66671 ], [ 92.75167, 11.667 ], [ 92.75202, 11.66743 ], [ 92.75218, 11.66746 ], [ 92.75292, 11.66728 ], [ 92.75306, 11.66712 ], [ 92.75333, 11.6666 ], [ 92.75355, 11.66631 ], [ 92.7537, 11.66618 ], [ 92.75392, 11.66613 ], [ 92.75409, 11.66612 ], [ 92.75442, 11.66622 ], [ 92.75504, 11.66632 ], [ 92.7552, 11.66631 ], [ 92.75535, 11.66623 ], [ 92.75542, 11.66605 ], [ 92.75545, 11.66588 ], [ 92.75569, 11.66554 ], [ 92.75595, 11.66529 ], [ 92.75626, 11.66518 ], [ 92.75642, 11.66506 ], [ 92.75651, 11.66489 ], [ 92.75651, 11.66468 ], [ 92.75635, 11.66433 ], [ 92.75612, 11.66395 ], [ 92.75591, 11.66371 ], [ 92.75536, 11.66287 ], [ 92.75529, 11.66272 ], [ 92.75529, 11.66239 ], [ 92.75536, 11.66218 ], [ 92.75573, 11.66161 ], [ 92.75574, 11.66147 ], [ 92.75568, 11.6613 ], [ 92.75504, 11.66062 ], [ 92.75489, 11.66041 ], [ 92.7547, 11.65979 ], [ 92.7546, 11.65936 ], [ 92.75445, 11.65904 ], [ 92.75419, 11.65869 ], [ 92.75402, 11.6584 ], [ 92.75395, 11.65806 ], [ 92.75403, 11.65771 ], [ 92.75414, 11.65744 ], [ 92.75446, 11.65695 ], [ 92.75474, 11.65659 ], [ 92.75489, 11.65645 ], [ 92.75502, 11.65641 ], [ 92.75513, 11.65641 ], [ 92.7553, 11.65646 ], [ 92.75567, 11.65671 ], [ 92.75582, 11.65675 ], [ 92.7562, 11.65671 ], [ 92.75641, 11.65659 ], [ 92.75658, 11.65646 ], [ 92.7568, 11.65622 ], [ 92.75691, 11.6562 ], [ 92.75704, 11.65621 ], [ 92.75721, 11.65628 ], [ 92.75733, 11.65628 ], [ 92.7574, 11.65623 ], [ 92.7574, 11.65581 ], [ 92.75745, 11.65564 ], [ 92.75747, 11.65516 ], [ 92.75742, 11.65489 ], [ 92.75735, 11.65467 ], [ 92.75719, 11.65446 ], [ 92.75666, 11.65388 ], [ 92.75655, 11.6537 ], [ 92.75651, 11.65345 ], [ 92.75657, 11.65271 ], [ 92.75667, 11.65227 ], [ 92.75656, 11.65173 ], [ 92.75655, 11.65148 ], [ 92.75657, 11.65132 ], [ 92.75662, 11.65123 ], [ 92.75673, 11.65118 ], [ 92.75685, 11.65118 ], [ 92.75697, 11.65111 ], [ 92.75702, 11.65101 ], [ 92.75689, 11.65076 ], [ 92.75681, 11.65053 ], [ 92.75671, 11.65037 ], [ 92.75656, 11.65021 ], [ 92.75632, 11.65008 ], [ 92.75618, 11.65006 ], [ 92.75611, 11.65001 ], [ 92.75609, 11.64991 ], [ 92.75611, 11.64976 ], [ 92.75622, 11.64962 ], [ 92.75647, 11.64941 ], [ 92.75654, 11.64928 ], [ 92.75656, 11.64915 ], [ 92.75646, 11.64882 ], [ 92.7562, 11.64861 ], [ 92.7561, 11.6485 ], [ 92.75593, 11.64786 ], [ 92.75562, 11.64746 ], [ 92.75548, 11.64736 ], [ 92.75536, 11.64715 ], [ 92.75528, 11.64707 ], [ 92.75518, 11.64706 ], [ 92.7549, 11.64719 ], [ 92.75474, 11.64709 ], [ 92.75457, 11.64703 ], [ 92.7545, 11.64697 ], [ 92.75443, 11.6468 ], [ 92.7543, 11.64661 ], [ 92.75408, 11.64638 ], [ 92.75369, 11.6461 ], [ 92.75349, 11.64589 ], [ 92.75344, 11.64572 ], [ 92.75335, 11.64521 ], [ 92.75286, 11.64493 ], [ 92.7527, 11.64481 ], [ 92.75241, 11.64442 ], [ 92.75228, 11.64429 ], [ 92.75218, 11.64427 ], [ 92.75205, 11.64431 ], [ 92.7515, 11.64439 ], [ 92.75119, 11.6444 ], [ 92.75024, 11.64466 ], [ 92.74941, 11.64496 ], [ 92.74912, 11.64499 ], [ 92.74896, 11.64498 ], [ 92.74882, 11.64493 ], [ 92.74874, 11.64487 ], [ 92.74856, 11.64485 ], [ 92.74837, 11.64487 ], [ 92.74818, 11.64486 ], [ 92.74784, 11.64469 ], [ 92.74755, 11.6442 ], [ 92.74734, 11.64398 ], [ 92.74724, 11.6438 ], [ 92.74684, 11.64286 ], [ 92.74668, 11.64224 ], [ 92.74669, 11.6417 ], [ 92.74674, 11.64155 ], [ 92.74672, 11.64141 ], [ 92.74655, 11.64126 ], [ 92.74627, 11.64112 ], [ 92.74597, 11.64082 ], [ 92.7458, 11.6407 ], [ 92.74573, 11.6406 ], [ 92.74572, 11.64054 ], [ 92.74594, 11.64032 ], [ 92.74617, 11.63994 ], [ 92.74652, 11.6396 ], [ 92.74668, 11.63952 ], [ 92.74681, 11.6395 ], [ 92.74692, 11.63952 ], [ 92.74722, 11.6397 ], [ 92.74753, 11.63973 ], [ 92.7478, 11.63979 ], [ 92.74802, 11.64003 ], [ 92.74813, 11.64009 ], [ 92.7484, 11.64005 ], [ 92.74867, 11.63981 ], [ 92.7489, 11.63951 ], [ 92.74897, 11.63936 ], [ 92.74898, 11.63923 ], [ 92.74896, 11.6391 ], [ 92.74863, 11.63883 ], [ 92.74854, 11.63868 ], [ 92.74837, 11.63827 ], [ 92.74841, 11.63806 ], [ 92.7485, 11.63779 ], [ 92.7488, 11.63732 ], [ 92.74891, 11.63725 ], [ 92.74924, 11.63724 ], [ 92.74954, 11.63727 ], [ 92.74982, 11.63711 ], [ 92.75015, 11.63702 ], [ 92.75029, 11.63696 ], [ 92.75041, 11.63678 ], [ 92.75047, 11.63646 ], [ 92.75053, 11.63634 ], [ 92.75061, 11.63628 ], [ 92.75109, 11.63616 ], [ 92.75121, 11.63606 ], [ 92.75129, 11.63592 ], [ 92.75129, 11.63574 ], [ 92.75125, 11.63563 ], [ 92.75115, 11.63555 ], [ 92.75101, 11.63527 ], [ 92.75103, 11.63514 ], [ 92.75112, 11.63495 ], [ 92.75145, 11.63468 ], [ 92.7515, 11.63466 ], [ 92.75173, 11.63405 ], [ 92.7518, 11.63366 ], [ 92.75194, 11.63319 ], [ 92.75213, 11.63295 ], [ 92.75221, 11.6328 ], [ 92.75218, 11.63254 ], [ 92.7521, 11.63245 ], [ 92.75197, 11.63241 ], [ 92.75181, 11.6323 ], [ 92.75166, 11.63227 ], [ 92.75158, 11.63221 ], [ 92.75149, 11.63209 ], [ 92.75145, 11.63196 ], [ 92.75144, 11.63181 ], [ 92.75148, 11.63167 ], [ 92.75167, 11.63138 ], [ 92.75166, 11.63125 ], [ 92.75159, 11.63112 ], [ 92.75111, 11.63063 ], [ 92.75094, 11.63035 ], [ 92.7507, 11.62988 ], [ 92.75061, 11.62964 ], [ 92.75059, 11.62943 ], [ 92.7506, 11.62924 ], [ 92.75084, 11.62851 ], [ 92.7509, 11.62842 ], [ 92.75097, 11.6284 ], [ 92.75119, 11.62842 ], [ 92.75132, 11.62839 ], [ 92.75157, 11.62822 ], [ 92.75185, 11.62798 ], [ 92.75194, 11.62784 ], [ 92.75196, 11.62765 ], [ 92.75194, 11.62753 ], [ 92.75196, 11.62734 ], [ 92.75186, 11.62677 ], [ 92.75186, 11.62666 ], [ 92.75198, 11.62635 ], [ 92.75209, 11.62591 ], [ 92.75214, 11.62582 ], [ 92.75214, 11.62572 ], [ 92.75208, 11.62559 ], [ 92.75205, 11.62531 ], [ 92.75218, 11.62513 ], [ 92.75217, 11.62491 ], [ 92.75211, 11.62462 ], [ 92.7521, 11.62431 ], [ 92.75206, 11.62406 ], [ 92.75209, 11.62397 ], [ 92.75224, 11.62383 ], [ 92.75241, 11.62379 ], [ 92.75243, 11.62373 ], [ 92.75209, 11.62338 ], [ 92.75168, 11.62305 ], [ 92.75162, 11.62295 ], [ 92.75165, 11.62253 ], [ 92.75176, 11.62231 ], [ 92.75181, 11.62211 ], [ 92.75191, 11.62205 ], [ 92.75204, 11.62203 ], [ 92.75212, 11.62196 ], [ 92.75213, 11.62187 ], [ 92.75186, 11.62149 ], [ 92.7515, 11.62131 ], [ 92.75129, 11.62111 ], [ 92.75119, 11.62089 ], [ 92.75118, 11.62075 ], [ 92.75113, 11.62062 ], [ 92.75112, 11.62052 ], [ 92.75116, 11.6205 ], [ 92.75133, 11.62061 ], [ 92.75143, 11.62056 ], [ 92.75187, 11.62018 ], [ 92.75207, 11.6199 ], [ 92.75214, 11.61971 ], [ 92.75215, 11.61943 ], [ 92.75221, 11.61929 ], [ 92.7524, 11.61905 ], [ 92.75261, 11.61888 ], [ 92.75286, 11.61877 ], [ 92.75298, 11.61877 ], [ 92.75311, 11.61883 ], [ 92.75343, 11.61874 ], [ 92.75364, 11.61871 ], [ 92.75377, 11.61862 ], [ 92.75378, 11.61853 ], [ 92.75369, 11.61842 ], [ 92.7535, 11.61831 ], [ 92.75337, 11.61814 ], [ 92.75335, 11.61796 ], [ 92.7534, 11.61775 ], [ 92.75351, 11.6176 ], [ 92.75339, 11.61734 ], [ 92.75309, 11.61728 ], [ 92.75289, 11.6172 ], [ 92.75276, 11.617 ], [ 92.7527, 11.61683 ], [ 92.75267, 11.61654 ], [ 92.75276, 11.61557 ], [ 92.75277, 11.61523 ], [ 92.75252, 11.61263 ], [ 92.75255, 11.61191 ], [ 92.75246, 11.61123 ], [ 92.75253, 11.6107 ], [ 92.7526, 11.61038 ], [ 92.75259, 11.61014 ], [ 92.75255, 11.60996 ], [ 92.75245, 11.60981 ], [ 92.752363333333335, 11.60953 ], [ 92.75219, 11.60897 ], [ 92.7521, 11.60876 ], [ 92.75195, 11.60861 ], [ 92.75156, 11.60844 ], [ 92.75124, 11.60815 ], [ 92.7508, 11.60748 ], [ 92.75067, 11.60737 ], [ 92.75058, 11.60736 ], [ 92.75053, 11.60746 ], [ 92.75043, 11.60752 ], [ 92.75029, 11.60765 ], [ 92.75024, 11.60789 ], [ 92.75019, 11.60798 ], [ 92.75008, 11.60797 ], [ 92.7498, 11.60773 ], [ 92.74971, 11.60757 ], [ 92.74963, 11.60749 ], [ 92.74949, 11.60742 ], [ 92.74936, 11.60728 ], [ 92.7492, 11.60702 ], [ 92.74889, 11.60641 ], [ 92.74864, 11.60617 ], [ 92.7485, 11.60607 ], [ 92.74843, 11.60596 ], [ 92.74837, 11.60576 ], [ 92.74835, 11.60558 ], [ 92.74836, 11.60542 ], [ 92.74841, 11.60528 ], [ 92.74852, 11.60511 ], [ 92.74849, 11.6049 ], [ 92.74836, 11.60474 ], [ 92.74824, 11.60453 ], [ 92.74813, 11.6042 ], [ 92.74798, 11.60352 ], [ 92.74808, 11.6034 ], [ 92.74822, 11.6033 ], [ 92.74828, 11.60316 ], [ 92.74826, 11.60303 ], [ 92.7481, 11.60277 ], [ 92.74812, 11.60237 ], [ 92.74799, 11.60209 ], [ 92.74792, 11.60188 ], [ 92.74792, 11.60162 ], [ 92.74795, 11.60146 ], [ 92.74792, 11.60133 ], [ 92.74788, 11.60128 ], [ 92.74774, 11.60126 ], [ 92.74724, 11.60138 ], [ 92.74709, 11.60135 ], [ 92.74691, 11.60123 ], [ 92.74683, 11.60109 ], [ 92.74679, 11.60095 ], [ 92.74679, 11.60082 ], [ 92.74687, 11.6007 ], [ 92.74704, 11.60061 ], [ 92.74717, 11.6005 ], [ 92.74723, 11.6004 ], [ 92.74724, 11.60027 ], [ 92.74718, 11.60017 ], [ 92.7471, 11.60015 ], [ 92.74703, 11.60017 ], [ 92.74683, 11.60043 ], [ 92.74669, 11.60051 ], [ 92.74659, 11.60048 ], [ 92.74653, 11.60043 ], [ 92.74644, 11.60044 ], [ 92.74635, 11.6005 ], [ 92.74591, 11.60036 ], [ 92.74571, 11.60024 ], [ 92.74535, 11.60012 ], [ 92.74504, 11.5998 ], [ 92.7446, 11.59925 ], [ 92.7442, 11.59851 ], [ 92.74342, 11.5975 ], [ 92.74292, 11.5969 ], [ 92.74239, 11.59633 ], [ 92.74222, 11.59605 ], [ 92.74222, 11.59572 ], [ 92.74226, 11.59541 ], [ 92.74218, 11.59502 ], [ 92.74189, 11.5946 ], [ 92.74172, 11.59444 ], [ 92.74155, 11.59407 ], [ 92.74143, 11.59373 ], [ 92.74127, 11.59349 ], [ 92.74112, 11.59337 ], [ 92.74069, 11.59322 ], [ 92.74061, 11.59301 ], [ 92.74057, 11.5927 ], [ 92.74059, 11.59203 ], [ 92.74093, 11.59036 ], [ 92.74124, 11.58978 ], [ 92.74152, 11.58939 ], [ 92.74166, 11.58927 ], [ 92.7418, 11.5893 ], [ 92.74201, 11.58944 ], [ 92.74327, 11.58984 ], [ 92.74354, 11.58985 ], [ 92.74395, 11.58974 ], [ 92.74421, 11.58958 ], [ 92.74434, 11.58939 ], [ 92.7444, 11.58869 ], [ 92.7443, 11.58832 ], [ 92.74412, 11.58787 ], [ 92.74378, 11.58677 ], [ 92.74379, 11.58649 ], [ 92.74385, 11.58607 ], [ 92.74376, 11.58552 ], [ 92.74371, 11.58477 ], [ 92.74342, 11.5839 ], [ 92.74324, 11.58354 ], [ 92.74293, 11.58311 ], [ 92.7425, 11.58275 ], [ 92.74226, 11.5824 ], [ 92.7422, 11.58221 ], [ 92.7422, 11.58185 ], [ 92.74201, 11.58122 ], [ 92.74191, 11.5804 ], [ 92.74183, 11.58022 ], [ 92.74147, 11.57988 ], [ 92.74134, 11.57972 ], [ 92.74111, 11.57957 ], [ 92.74097, 11.5794 ], [ 92.74096, 11.57921 ], [ 92.74116, 11.57879 ], [ 92.74121, 11.57857 ], [ 92.74119, 11.57841 ], [ 92.74109, 11.5783 ], [ 92.74096, 11.57832 ], [ 92.74079, 11.57856 ], [ 92.74056, 11.57929 ], [ 92.74039, 11.57943 ], [ 92.7399, 11.57947 ], [ 92.7395, 11.57961 ], [ 92.73929, 11.57972 ], [ 92.73916, 11.57985 ], [ 92.73909, 11.58001 ], [ 92.73897, 11.58008 ], [ 92.73885, 11.58005 ], [ 92.73838, 11.58013 ], [ 92.73836, 11.58015 ], [ 92.73805, 11.58018 ], [ 92.73775, 11.58023 ], [ 92.73763, 11.5802 ], [ 92.73744, 11.58004 ], [ 92.73747, 11.57999 ], [ 92.73768, 11.57992 ], [ 92.73785, 11.5798 ], [ 92.73792, 11.57968 ], [ 92.73793, 11.57952 ], [ 92.73787, 11.57909 ], [ 92.73773, 11.57844 ], [ 92.73774, 11.57748 ], [ 92.73778, 11.57745 ], [ 92.73778, 11.57742 ], [ 92.73768, 11.57737 ], [ 92.73751, 11.57694 ], [ 92.7374, 11.57653 ], [ 92.73739, 11.57623 ], [ 92.73754, 11.57573 ], [ 92.73774, 11.57536 ], [ 92.73783, 11.57513 ], [ 92.73786, 11.57492 ], [ 92.73816, 11.57446 ], [ 92.73867, 11.57424 ], [ 92.73872, 11.57415 ], [ 92.73873, 11.5738 ], [ 92.73879, 11.57359 ], [ 92.73895, 11.57318 ], [ 92.739, 11.57287 ], [ 92.73896, 11.5727 ], [ 92.73875, 11.57222 ], [ 92.73869, 11.5718 ], [ 92.73874, 11.57163 ], [ 92.73875, 11.57144 ], [ 92.73871, 11.57125 ], [ 92.7387, 11.57098 ], [ 92.73878, 11.57062 ], [ 92.73878, 11.57051 ], [ 92.7385, 11.5701 ], [ 92.73839, 11.56988 ], [ 92.73829, 11.56942 ], [ 92.73809, 11.56902 ], [ 92.73792, 11.56886 ], [ 92.73776, 11.56862 ], [ 92.73755, 11.56821 ], [ 92.73735, 11.56788 ], [ 92.7372, 11.5677 ], [ 92.73683, 11.56738 ], [ 92.73608, 11.56682 ], [ 92.73596, 11.56677 ], [ 92.73582, 11.56677 ], [ 92.73569, 11.5668 ], [ 92.73556, 11.56677 ], [ 92.73514, 11.56651 ], [ 92.73457, 11.56603 ], [ 92.73439, 11.56584 ], [ 92.73409, 11.56538 ], [ 92.73363, 11.56482 ], [ 92.73347, 11.56455 ], [ 92.73319, 11.56393 ], [ 92.73297, 11.56313 ], [ 92.73275, 11.56257 ], [ 92.73262, 11.5623 ], [ 92.7317, 11.56132 ], [ 92.73096, 11.56067 ], [ 92.73075, 11.56042 ], [ 92.73043, 11.55981 ], [ 92.73038, 11.55979 ], [ 92.73035, 11.55981 ], [ 92.73033, 11.55989 ], [ 92.73028, 11.55992 ], [ 92.73005, 11.55989 ], [ 92.72985, 11.55977 ], [ 92.72973, 11.55961 ], [ 92.72971, 11.55952 ], [ 92.72973, 11.55942 ], [ 92.72987, 11.55924 ], [ 92.72992, 11.55911 ], [ 92.72989, 11.55881 ], [ 92.72984, 11.55866 ], [ 92.72986, 11.55839 ], [ 92.72983, 11.55819 ], [ 92.72985, 11.55791 ], [ 92.72992, 11.55765 ], [ 92.73011, 11.55725 ], [ 92.73028, 11.55622 ], [ 92.73037, 11.55593 ], [ 92.73055, 11.55561 ], [ 92.73057, 11.55546 ], [ 92.73056, 11.55534 ], [ 92.73052, 11.55523 ], [ 92.73057, 11.55506 ], [ 92.73083, 11.55461 ], [ 92.73101, 11.55438 ], [ 92.73115, 11.55432 ], [ 92.73128, 11.55433 ], [ 92.73145, 11.55444 ], [ 92.73156, 11.55458 ], [ 92.73164, 11.55464 ], [ 92.73179, 11.55465 ], [ 92.73207, 11.55474 ], [ 92.73223, 11.55473 ], [ 92.7324, 11.5546 ], [ 92.7325, 11.55443 ], [ 92.73247, 11.55433 ], [ 92.73234, 11.55422 ], [ 92.73233, 11.55413 ], [ 92.73239, 11.55405 ], [ 92.73254, 11.55403 ], [ 92.73268, 11.55412 ], [ 92.73282, 11.55428 ], [ 92.73293, 11.55427 ], [ 92.73308, 11.55417 ], [ 92.73333, 11.55385 ], [ 92.73361, 11.5537 ], [ 92.73378, 11.55355 ], [ 92.73381, 11.55347 ], [ 92.7339, 11.55345 ], [ 92.73398, 11.55348 ], [ 92.73437, 11.55346 ], [ 92.73447, 11.55339 ], [ 92.73452, 11.55327 ], [ 92.73452, 11.55308 ], [ 92.73441, 11.55274 ], [ 92.73433, 11.55229 ], [ 92.73424, 11.55209 ], [ 92.73413, 11.55193 ], [ 92.73406, 11.55161 ], [ 92.73405, 11.55143 ], [ 92.73392, 11.55111 ], [ 92.73383, 11.55098 ], [ 92.7337, 11.55089 ], [ 92.73361, 11.55052 ], [ 92.73355, 11.55046 ], [ 92.73321, 11.55043 ], [ 92.73298, 11.55036 ], [ 92.73278, 11.55022 ], [ 92.73259, 11.55004 ], [ 92.73252, 11.54988 ], [ 92.73251, 11.54977 ], [ 92.73263, 11.54923 ], [ 92.73272, 11.54905 ], [ 92.73298, 11.54869 ], [ 92.73303, 11.54852 ], [ 92.73299, 11.54827 ], [ 92.73283, 11.54806 ], [ 92.73247, 11.54785 ], [ 92.73224, 11.54755 ], [ 92.73211, 11.54747 ], [ 92.73194, 11.54741 ], [ 92.73181, 11.54743 ], [ 92.73142, 11.54766 ], [ 92.73122, 11.54772 ], [ 92.73109, 11.54772 ], [ 92.73097, 11.54769 ], [ 92.73085, 11.54762 ], [ 92.7307, 11.54749 ], [ 92.73059, 11.54733 ], [ 92.73048, 11.54702 ], [ 92.73041, 11.54673 ], [ 92.73043, 11.5464 ], [ 92.7305, 11.54621 ], [ 92.73051, 11.54596 ], [ 92.73059, 11.54553 ], [ 92.73069, 11.54536 ], [ 92.73086, 11.54524 ], [ 92.73109, 11.54514 ], [ 92.73124, 11.5451 ], [ 92.73129, 11.54504 ], [ 92.7311, 11.54452 ], [ 92.73108, 11.54426 ], [ 92.73112, 11.54369 ], [ 92.73118, 11.54355 ], [ 92.73134, 11.5434 ], [ 92.73136, 11.54327 ], [ 92.73144, 11.54324 ], [ 92.73151, 11.54331 ], [ 92.73155, 11.54341 ], [ 92.73159, 11.54342 ], [ 92.73161, 11.54298 ], [ 92.73164, 11.54283 ], [ 92.7315, 11.54229 ], [ 92.73148, 11.5421 ], [ 92.73141, 11.54193 ], [ 92.73121, 11.54169 ], [ 92.73097, 11.54121 ], [ 92.73062, 11.54078 ], [ 92.73059, 11.54078 ], [ 92.73061, 11.54095 ], [ 92.73055, 11.54104 ], [ 92.73023, 11.54113 ], [ 92.73014, 11.54112 ], [ 92.72995, 11.54091 ], [ 92.72979, 11.54065 ], [ 92.72971, 11.54059 ], [ 92.72947, 11.54054 ], [ 92.7293, 11.54055 ], [ 92.72911, 11.54052 ], [ 92.72884, 11.54037 ], [ 92.72872, 11.54027 ], [ 92.7284, 11.53966 ], [ 92.72818, 11.53912 ], [ 92.72826, 11.53883 ], [ 92.72824, 11.53856 ], [ 92.728, 11.53832 ], [ 92.7278, 11.53789 ], [ 92.72744, 11.53754 ], [ 92.72727, 11.53742 ], [ 92.72704, 11.53718 ], [ 92.72669, 11.53698 ], [ 92.72661, 11.53681 ], [ 92.72647, 11.53668 ], [ 92.7264, 11.53653 ], [ 92.72636, 11.53634 ], [ 92.72612, 11.53587 ], [ 92.72607, 11.53567 ], [ 92.72607, 11.53519 ], [ 92.72605, 11.53508 ], [ 92.72587, 11.53486 ], [ 92.7258, 11.53473 ], [ 92.72565, 11.53458 ], [ 92.72548, 11.5343 ], [ 92.72545, 11.53406 ], [ 92.72524, 11.53395 ], [ 92.72506, 11.5337 ], [ 92.72473, 11.53341 ], [ 92.72445, 11.53326 ], [ 92.72423, 11.53311 ], [ 92.72412, 11.53306 ], [ 92.72401, 11.53304 ], [ 92.72397, 11.53301 ], [ 92.72407, 11.53284 ], [ 92.72407, 11.53278 ], [ 92.72388, 11.53263 ], [ 92.72373, 11.53248 ], [ 92.72368, 11.53234 ], [ 92.72379, 11.5319 ], [ 92.72384, 11.53183 ], [ 92.72395, 11.53175 ], [ 92.72409, 11.53156 ], [ 92.72409, 11.53148 ], [ 92.72403, 11.53125 ], [ 92.72403, 11.53095 ], [ 92.724, 11.53086 ], [ 92.72381, 11.53068 ], [ 92.72369, 11.53045 ], [ 92.72351, 11.53034 ], [ 92.72345, 11.53028 ], [ 92.72333, 11.53006 ], [ 92.72329, 11.5298 ], [ 92.72329, 11.52888 ], [ 92.72335, 11.52858 ], [ 92.72342, 11.52844 ], [ 92.72344, 11.52833 ], [ 92.72342, 11.52823 ], [ 92.72355, 11.52714 ], [ 92.72353, 11.52688 ], [ 92.72356, 11.52661 ], [ 92.72381, 11.52562 ], [ 92.7239, 11.5254 ], [ 92.72397, 11.52529 ], [ 92.72428, 11.52515 ], [ 92.72483, 11.525 ], [ 92.72502, 11.52487 ], [ 92.7251, 11.52477 ], [ 92.7251, 11.52436 ], [ 92.72515, 11.52425 ], [ 92.72518, 11.52408 ], [ 92.72527, 11.52389 ], [ 92.72525, 11.52376 ], [ 92.7252, 11.52363 ], [ 92.72519, 11.52331 ], [ 92.72531, 11.52309 ], [ 92.72524, 11.52283 ], [ 92.7253, 11.52212 ], [ 92.72533, 11.52202 ], [ 92.72539, 11.52195 ], [ 92.72548, 11.52172 ], [ 92.72577, 11.52156 ], [ 92.72591, 11.52135 ], [ 92.72606, 11.52119 ], [ 92.72625, 11.52078 ], [ 92.72642, 11.52054 ], [ 92.72668, 11.51986 ], [ 92.72675, 11.51962 ], [ 92.72684, 11.51909 ], [ 92.72692, 11.5189 ], [ 92.72703, 11.51878 ], [ 92.72727, 11.51865 ], [ 92.72735, 11.51857 ], [ 92.72736, 11.51851 ], [ 92.72725, 11.51836 ], [ 92.7272, 11.51825 ], [ 92.72719, 11.51806 ], [ 92.72728, 11.51713 ], [ 92.72725, 11.51696 ], [ 92.72708, 11.51659 ], [ 92.7267, 11.51616 ], [ 92.72654, 11.51607 ], [ 92.72626, 11.5157 ], [ 92.72562, 11.51541 ], [ 92.72537, 11.51514 ], [ 92.72525, 11.51506 ], [ 92.72511, 11.51507 ], [ 92.72487, 11.51489 ], [ 92.7247, 11.51455 ], [ 92.72455, 11.51443 ], [ 92.7244, 11.51436 ], [ 92.72431, 11.51428 ], [ 92.72418, 11.51402 ], [ 92.72409, 11.51391 ], [ 92.724, 11.51385 ], [ 92.72385, 11.51385 ], [ 92.72367, 11.51389 ], [ 92.72351, 11.51386 ], [ 92.72332, 11.51367 ], [ 92.72286, 11.51358 ], [ 92.72272, 11.51339 ], [ 92.72269, 11.51328 ], [ 92.72269, 11.51312 ], [ 92.72279, 11.51272 ], [ 92.72286, 11.51261 ], [ 92.72293, 11.51261 ], [ 92.72323, 11.5128 ], [ 92.72338, 11.51282 ], [ 92.72356, 11.5128 ], [ 92.72367, 11.51275 ], [ 92.72371, 11.51266 ], [ 92.72376, 11.51226 ], [ 92.72375, 11.51212 ], [ 92.72368, 11.51186 ], [ 92.72322, 11.51111 ], [ 92.72292, 11.51036 ], [ 92.72283, 11.51023 ], [ 92.7227, 11.50997 ], [ 92.72217, 11.50908 ], [ 92.72189, 11.50888 ], [ 92.72159, 11.50876 ], [ 92.72139, 11.5086 ], [ 92.7212, 11.50859 ], [ 92.72109, 11.50853 ], [ 92.72095, 11.50841 ], [ 92.72085, 11.50825 ], [ 92.72083, 11.50815 ], [ 92.72091, 11.50774 ], [ 92.72091, 11.50752 ], [ 92.72087, 11.50736 ], [ 92.72065, 11.50704 ], [ 92.7206, 11.507 ], [ 92.72051, 11.50702 ], [ 92.72044, 11.5071 ], [ 92.72035, 11.50715 ], [ 92.72009, 11.50715 ], [ 92.71979, 11.50702 ], [ 92.71968, 11.50693 ], [ 92.7196, 11.50682 ], [ 92.71953, 11.50651 ], [ 92.71926, 11.50621 ], [ 92.71904, 11.50544 ], [ 92.71906, 11.50534 ], [ 92.71917, 11.50514 ], [ 92.71921, 11.505 ], [ 92.71928, 11.50448 ], [ 92.71926, 11.50441 ], [ 92.71914, 11.50428 ], [ 92.71845, 11.50371 ], [ 92.71815, 11.50338 ], [ 92.71806, 11.50333 ], [ 92.71796, 11.50331 ], [ 92.71766, 11.50311 ], [ 92.71756, 11.50301 ], [ 92.71745, 11.5028 ], [ 92.71746, 11.50272 ], [ 92.71759, 11.50256 ], [ 92.7177, 11.5023 ], [ 92.7177, 11.50218 ], [ 92.71755, 11.50185 ], [ 92.71758, 11.50161 ], [ 92.71765, 11.50148 ], [ 92.71765, 11.50134 ], [ 92.71759, 11.50109 ], [ 92.7177, 11.50076 ], [ 92.71767, 11.5006 ], [ 92.7176, 11.50047 ], [ 92.71755, 11.5001 ], [ 92.71738, 11.49953 ], [ 92.71733, 11.49923 ], [ 92.71727, 11.49915 ], [ 92.71723, 11.49904 ], [ 92.71719, 11.49901 ], [ 92.71705, 11.49903 ], [ 92.71681, 11.49893 ], [ 92.71663, 11.49876 ], [ 92.71645, 11.49875 ], [ 92.7164, 11.49872 ], [ 92.71638, 11.49867 ], [ 92.71648, 11.49836 ], [ 92.71637, 11.49719 ], [ 92.71638, 11.49707 ], [ 92.71646, 11.49695 ], [ 92.7167, 11.49672 ], [ 92.71677, 11.49662 ], [ 92.71678, 11.49621 ], [ 92.71675, 11.496 ], [ 92.71661, 11.4957 ], [ 92.71645, 11.49562 ], [ 92.71633, 11.49562 ], [ 92.71632, 11.4955 ], [ 92.71653, 11.49511 ], [ 92.71659, 11.4949 ], [ 92.71657, 11.49456 ], [ 92.71647, 11.49418 ], [ 92.71641, 11.49411 ], [ 92.71595, 11.49384 ], [ 92.71534, 11.49367 ], [ 92.71511, 11.49357 ], [ 92.7149, 11.49344 ], [ 92.71489, 11.49299 ], [ 92.71486, 11.49288 ], [ 92.71472, 11.49275 ], [ 92.71445, 11.49267 ], [ 92.71434, 11.4926 ], [ 92.71428, 11.49251 ], [ 92.71425, 11.49221 ], [ 92.71412, 11.49188 ], [ 92.71385, 11.49157 ], [ 92.71406, 11.491 ], [ 92.7142, 11.49081 ], [ 92.71423, 11.49071 ], [ 92.71417, 11.49045 ], [ 92.71421, 11.49008 ], [ 92.71432, 11.4898 ], [ 92.71431, 11.4897 ], [ 92.71425, 11.48961 ], [ 92.71403, 11.48946 ], [ 92.71392, 11.48934 ], [ 92.71341, 11.48902 ], [ 92.71331, 11.489 ], [ 92.71281, 11.48906 ], [ 92.71273, 11.48905 ], [ 92.71259, 11.48892 ], [ 92.71224, 11.48881 ], [ 92.71187, 11.48851 ], [ 92.71181, 11.48838 ], [ 92.71179, 11.4878 ], [ 92.71167, 11.48768 ], [ 92.71165, 11.48755 ], [ 92.7117, 11.48744 ], [ 92.71182, 11.48727 ], [ 92.71187, 11.48716 ], [ 92.71187, 11.4871 ], [ 92.7118, 11.48699 ], [ 92.71185, 11.48675 ], [ 92.71181, 11.48619 ], [ 92.71187, 11.48611 ], [ 92.71199, 11.4858 ], [ 92.71215, 11.48566 ], [ 92.71226, 11.48539 ], [ 92.71222, 11.48517 ], [ 92.71228, 11.48448 ], [ 92.71209, 11.4834 ], [ 92.71216, 11.48315 ], [ 92.71216, 11.48299 ], [ 92.71212, 11.4829 ], [ 92.71216, 11.48273 ], [ 92.71212, 11.48259 ], [ 92.71208, 11.48253 ], [ 92.71202, 11.48253 ], [ 92.71198, 11.48259 ], [ 92.71194, 11.48258 ], [ 92.71188, 11.48225 ], [ 92.71181, 11.48221 ], [ 92.71172, 11.48224 ], [ 92.71163, 11.48236 ], [ 92.71147, 11.48233 ], [ 92.71139, 11.48229 ], [ 92.71132, 11.48222 ], [ 92.71122, 11.48205 ], [ 92.71118, 11.48193 ], [ 92.71117, 11.48165 ], [ 92.71106, 11.48133 ], [ 92.71113, 11.48113 ], [ 92.71121, 11.481 ], [ 92.71143, 11.48087 ], [ 92.71149, 11.48079 ], [ 92.71158, 11.48039 ], [ 92.71152, 11.48015 ], [ 92.71148, 11.48009 ], [ 92.71135, 11.48008 ], [ 92.71131, 11.48004 ], [ 92.71131, 11.47987 ], [ 92.71135, 11.47974 ], [ 92.71118, 11.47967 ], [ 92.71106, 11.47948 ], [ 92.71106, 11.47939 ], [ 92.71122, 11.47927 ], [ 92.71143, 11.47907 ], [ 92.71161, 11.47886 ], [ 92.71159, 11.47875 ], [ 92.71153, 11.47867 ], [ 92.71145, 11.47863 ], [ 92.71144, 11.47854 ], [ 92.71155, 11.4785 ], [ 92.71161, 11.47845 ], [ 92.71162, 11.47841 ], [ 92.71143, 11.47823 ], [ 92.7115, 11.4781 ], [ 92.71126, 11.47803 ], [ 92.71119, 11.4781 ], [ 92.71119, 11.47833 ], [ 92.71116, 11.47839 ], [ 92.71107, 11.47838 ], [ 92.711, 11.47831 ], [ 92.71095, 11.4783 ], [ 92.71086, 11.47844 ], [ 92.71081, 11.47846 ], [ 92.71079, 11.47852 ], [ 92.71082, 11.47856 ], [ 92.71079, 11.47865 ], [ 92.71088, 11.47902 ], [ 92.71094, 11.47912 ], [ 92.7109, 11.47938 ], [ 92.71085, 11.47942 ], [ 92.71072, 11.47943 ], [ 92.71067, 11.4794 ], [ 92.71062, 11.4794 ], [ 92.71061, 11.47954 ], [ 92.71052, 11.47957 ], [ 92.71044, 11.47968 ], [ 92.71051, 11.48001 ], [ 92.71028, 11.48042 ], [ 92.71022, 11.48064 ], [ 92.71008, 11.48091 ], [ 92.71007, 11.48108 ], [ 92.71004, 11.48117 ], [ 92.70996, 11.48125 ], [ 92.7094, 11.48153 ], [ 92.70916, 11.48161 ], [ 92.70885, 11.48164 ], [ 92.70858, 11.48171 ], [ 92.7082, 11.48189 ], [ 92.70812, 11.48209 ], [ 92.70812, 11.48229 ], [ 92.70828, 11.48262 ], [ 92.70838, 11.48276 ], [ 92.70839, 11.48308 ], [ 92.70825, 11.48345 ], [ 92.70819, 11.48352 ], [ 92.70805, 11.48359 ], [ 92.70806, 11.48367 ], [ 92.70815, 11.48383 ], [ 92.70816, 11.48411 ], [ 92.70813, 11.48428 ], [ 92.70793, 11.48448 ], [ 92.70773, 11.48464 ], [ 92.70761, 11.48469 ], [ 92.70757, 11.48477 ], [ 92.70767, 11.48496 ], [ 92.70768, 11.48509 ], [ 92.70762, 11.48516 ], [ 92.70749, 11.48525 ], [ 92.7074, 11.48535 ], [ 92.70737, 11.48552 ], [ 92.70732, 11.48554 ], [ 92.70711, 11.48547 ], [ 92.70707, 11.48543 ], [ 92.70699, 11.48544 ], [ 92.70697, 11.48559 ], [ 92.70707, 11.48601 ], [ 92.70705, 11.48605 ], [ 92.70698, 11.4861 ], [ 92.70713, 11.48634 ], [ 92.70722, 11.48643 ], [ 92.70747, 11.48658 ], [ 92.70789, 11.48673 ], [ 92.70795, 11.48679 ], [ 92.70792, 11.48683 ], [ 92.70795, 11.48687 ], [ 92.70801, 11.48689 ], [ 92.70808, 11.48686 ], [ 92.70819, 11.48685 ], [ 92.70832, 11.48697 ], [ 92.70853, 11.48728 ], [ 92.70865, 11.48731 ], [ 92.70889, 11.48731 ], [ 92.70911, 11.48727 ], [ 92.70921, 11.48732 ], [ 92.7092, 11.48744 ], [ 92.70925, 11.48749 ], [ 92.70936, 11.48751 ], [ 92.70939, 11.48756 ], [ 92.70929, 11.48789 ], [ 92.70933, 11.488 ], [ 92.70936, 11.48854 ], [ 92.70948, 11.48888 ], [ 92.70964, 11.48921 ], [ 92.70973, 11.48933 ], [ 92.70977, 11.48948 ], [ 92.70977, 11.48962 ], [ 92.70967, 11.49011 ], [ 92.70972, 11.49024 ], [ 92.70972, 11.4903 ], [ 92.70966, 11.49041 ], [ 92.70954, 11.49054 ], [ 92.7095, 11.49068 ], [ 92.70939, 11.49087 ], [ 92.70942, 11.49091 ], [ 92.70942, 11.49097 ], [ 92.70926, 11.49126 ], [ 92.70915, 11.49139 ], [ 92.70898, 11.49151 ], [ 92.70884, 11.4915 ], [ 92.70875, 11.49166 ], [ 92.70818, 11.49205 ], [ 92.70764, 11.49253 ], [ 92.70743, 11.49263 ], [ 92.70725, 11.49265 ], [ 92.70711, 11.49264 ], [ 92.70686, 11.49253 ], [ 92.70655, 11.49244 ], [ 92.70612, 11.49249 ], [ 92.70604, 11.49252 ], [ 92.70579, 11.49251 ], [ 92.7055, 11.49247 ], [ 92.70511, 11.49259 ], [ 92.70503, 11.49264 ], [ 92.705, 11.49272 ], [ 92.70499, 11.49285 ], [ 92.70507, 11.49322 ], [ 92.70514, 11.49392 ], [ 92.70514, 11.49416 ], [ 92.70493, 11.49459 ], [ 92.70477, 11.49513 ], [ 92.70477, 11.49546 ], [ 92.70474, 11.49557 ], [ 92.70451, 11.49564 ], [ 92.70442, 11.49569 ], [ 92.70428, 11.49583 ], [ 92.70415, 11.49609 ], [ 92.70414, 11.4962 ], [ 92.70394, 11.49645 ], [ 92.70393, 11.49658 ], [ 92.70395, 11.49672 ], [ 92.70402, 11.49681 ], [ 92.70399, 11.49692 ], [ 92.70404, 11.49735 ], [ 92.704, 11.49748 ], [ 92.70407, 11.4978 ], [ 92.70416, 11.49798 ], [ 92.70401, 11.49865 ], [ 92.70393, 11.49888 ], [ 92.70394, 11.49906 ], [ 92.7039, 11.49927 ], [ 92.70379, 11.49941 ], [ 92.70257, 11.50018 ], [ 92.70242, 11.50045 ], [ 92.70239, 11.50089 ], [ 92.70234, 11.50114 ], [ 92.70225, 11.50135 ], [ 92.70208, 11.50153 ], [ 92.70177, 11.50175 ], [ 92.70151, 11.50188 ], [ 92.70133, 11.50201 ], [ 92.70116, 11.50224 ], [ 92.70095, 11.50244 ], [ 92.70022, 11.50334 ], [ 92.70017, 11.50356 ], [ 92.70019, 11.50363 ], [ 92.70043, 11.50363 ], [ 92.70063, 11.50368 ], [ 92.70078, 11.50378 ], [ 92.70089, 11.50389 ], [ 92.7009, 11.50395 ], [ 92.70086, 11.50399 ], [ 92.70105, 11.50446 ], [ 92.70076, 11.5053 ], [ 92.70043, 11.50585 ], [ 92.70041, 11.50592 ], [ 92.70057, 11.50608 ], [ 92.70063, 11.50617 ], [ 92.70061, 11.50635 ], [ 92.70052, 11.50644 ], [ 92.70035, 11.50669 ], [ 92.70019, 11.50687 ], [ 92.70009, 11.50702 ], [ 92.69997, 11.50727 ], [ 92.69992, 11.50747 ], [ 92.69994, 11.50756 ], [ 92.69958, 11.50803 ], [ 92.69943, 11.50811 ], [ 92.69925, 11.50817 ], [ 92.69906, 11.50817 ], [ 92.69888, 11.50809 ], [ 92.69864, 11.50775 ], [ 92.69853, 11.50772 ], [ 92.69839, 11.50765 ], [ 92.69833, 11.50772 ], [ 92.69822, 11.50801 ], [ 92.69803, 11.50808 ], [ 92.69783, 11.50808 ], [ 92.6976, 11.50804 ], [ 92.69739, 11.50789 ], [ 92.69717, 11.5078 ], [ 92.69676, 11.50771 ], [ 92.69668, 11.5076 ], [ 92.69669, 11.50744 ], [ 92.69674, 11.50722 ], [ 92.69668, 11.5071 ], [ 92.69627, 11.50697 ], [ 92.6962, 11.50679 ], [ 92.69618, 11.50661 ], [ 92.69607, 11.50631 ], [ 92.69593, 11.50617 ], [ 92.69564, 11.50606 ], [ 92.69543, 11.50607 ], [ 92.69507, 11.5063 ], [ 92.69501, 11.50664 ], [ 92.69493, 11.50667 ], [ 92.69482, 11.50663 ], [ 92.69465, 11.50626 ], [ 92.69405, 11.50596 ], [ 92.6938, 11.50601 ], [ 92.6936, 11.50616 ], [ 92.69329, 11.50655 ], [ 92.6933, 11.50688 ], [ 92.69366, 11.50687 ], [ 92.69373, 11.50689 ], [ 92.69376, 11.50696 ], [ 92.69359, 11.50726 ], [ 92.69336, 11.50756 ], [ 92.69314, 11.50775 ], [ 92.69281, 11.50793 ], [ 92.69238, 11.50805 ], [ 92.69199, 11.50811 ], [ 92.69168, 11.50811 ], [ 92.69144, 11.50814 ], [ 92.69128, 11.50824 ], [ 92.69112, 11.5083 ], [ 92.69069, 11.50831 ], [ 92.69048, 11.50836 ], [ 92.69021, 11.50834 ], [ 92.69005, 11.50815 ], [ 92.68989, 11.50811 ], [ 92.68923, 11.50811 ], [ 92.68912, 11.50809 ], [ 92.68892, 11.50796 ], [ 92.68882, 11.50793 ], [ 92.68869, 11.50793 ], [ 92.68834, 11.50831 ], [ 92.68787, 11.50859 ], [ 92.68767, 11.50881 ], [ 92.68758, 11.50901 ], [ 92.68749, 11.50913 ], [ 92.6873, 11.50927 ], [ 92.68706, 11.50939 ], [ 92.6868, 11.5097 ], [ 92.68681, 11.50988 ], [ 92.68659, 11.51002 ], [ 92.68651, 11.51031 ], [ 92.68638, 11.51047 ], [ 92.68619, 11.51066 ], [ 92.68616, 11.51082 ], [ 92.68608, 11.51095 ], [ 92.68592, 11.51105 ], [ 92.68582, 11.51119 ], [ 92.68582, 11.51127 ], [ 92.68586, 11.51136 ], [ 92.68586, 11.51152 ], [ 92.6858, 11.51163 ], [ 92.68568, 11.51175 ], [ 92.68546, 11.51185 ], [ 92.68531, 11.51183 ], [ 92.68505, 11.51194 ], [ 92.68494, 11.51203 ], [ 92.68478, 11.51232 ], [ 92.68449, 11.51239 ], [ 92.68435, 11.51238 ], [ 92.68373, 11.51212 ], [ 92.68321, 11.51183 ], [ 92.68251, 11.51162 ], [ 92.68209, 11.51127 ], [ 92.68193, 11.51122 ], [ 92.68147, 11.51116 ], [ 92.68081, 11.51114 ], [ 92.68026, 11.51124 ], [ 92.6797, 11.51143 ], [ 92.67947, 11.51154 ], [ 92.67936, 11.51166 ], [ 92.6792, 11.51188 ], [ 92.6791, 11.51194 ], [ 92.67909666666668, 11.511940083333332 ], [ 92.6787, 11.51195 ], [ 92.67787, 11.5118 ], [ 92.67708, 11.51127 ], [ 92.67673, 11.51119 ], [ 92.67655, 11.51112 ], [ 92.67635, 11.51099 ], [ 92.67624, 11.51085 ], [ 92.67628, 11.51058 ], [ 92.67617, 11.51021 ], [ 92.67585, 11.50981 ], [ 92.67569, 11.50947 ], [ 92.67533, 11.50917 ], [ 92.6749, 11.50877 ], [ 92.67455, 11.50831 ], [ 92.67452, 11.50814 ], [ 92.67455, 11.50805 ], [ 92.67478, 11.50782 ], [ 92.67485, 11.50772 ], [ 92.67492, 11.50745 ], [ 92.67469, 11.50729 ], [ 92.67444, 11.50716 ], [ 92.67421, 11.50695 ], [ 92.67382, 11.50645 ], [ 92.67378, 11.50635 ], [ 92.6737, 11.50625 ], [ 92.67364, 11.50603 ], [ 92.67323, 11.50568 ], [ 92.67296, 11.50562 ], [ 92.67241, 11.50536 ], [ 92.67228, 11.50517 ], [ 92.67221, 11.50489 ], [ 92.67202, 11.50467 ], [ 92.67181, 11.50433 ], [ 92.67158, 11.50412 ], [ 92.67155, 11.504 ], [ 92.67142, 11.50392 ], [ 92.67128, 11.50387 ], [ 92.67112, 11.50388 ], [ 92.67064, 11.50425 ], [ 92.67022, 11.5045 ], [ 92.66988, 11.50457 ], [ 92.66963, 11.50456 ], [ 92.66928, 11.50445 ], [ 92.66897, 11.50424 ], [ 92.66844, 11.50403 ], [ 92.66816, 11.504 ], [ 92.66811, 11.50407 ], [ 92.66804, 11.50434 ], [ 92.66796, 11.50442 ], [ 92.66775, 11.5045 ], [ 92.66739, 11.50443 ], [ 92.66724, 11.50444 ], [ 92.66709, 11.50453 ], [ 92.66688, 11.50471 ], [ 92.66561, 11.5061 ], [ 92.66537, 11.50612 ], [ 92.6648, 11.50623 ], [ 92.66457, 11.50634 ], [ 92.6643, 11.50654 ], [ 92.66395, 11.50688 ], [ 92.66341, 11.50748 ], [ 92.66322, 11.50792 ], [ 92.66302, 11.50855 ], [ 92.66285, 11.50879 ], [ 92.66195, 11.5096 ], [ 92.66154, 11.51008 ], [ 92.66144, 11.5103 ], [ 92.66143, 11.51063 ], [ 92.6613, 11.51091 ], [ 92.66103, 11.51137 ], [ 92.6608, 11.51163 ], [ 92.66039, 11.51192 ], [ 92.66024, 11.51214 ], [ 92.66003, 11.51238 ], [ 92.65979, 11.51273 ], [ 92.65953, 11.51317 ], [ 92.65953, 11.5132 ], [ 92.65917, 11.51362 ], [ 92.65859, 11.51408 ], [ 92.65842, 11.51436 ], [ 92.65809, 11.51459 ], [ 92.65782, 11.5147 ], [ 92.6576, 11.51471 ], [ 92.65682, 11.51459 ], [ 92.65615, 11.51468 ], [ 92.65558, 11.51486 ], [ 92.65512, 11.51516 ], [ 92.65445, 11.51594 ], [ 92.65434, 11.51617 ], [ 92.65423, 11.51658 ], [ 92.65419, 11.51702 ], [ 92.65406, 11.51722 ], [ 92.65351, 11.51781 ], [ 92.65331, 11.5182 ], [ 92.65281, 11.51849 ], [ 92.65265, 11.51862 ], [ 92.65167, 11.51887 ], [ 92.6514, 11.51898 ], [ 92.65081, 11.51962 ], [ 92.65057, 11.51992 ], [ 92.65033, 11.52037 ], [ 92.64999, 11.52071 ], [ 92.64984, 11.52107 ], [ 92.64975, 11.52115 ], [ 92.64921, 11.52134 ], [ 92.64913, 11.52145 ], [ 92.64865, 11.52164 ], [ 92.64816, 11.52166 ], [ 92.64783, 11.52185 ], [ 92.64763, 11.522 ], [ 92.64756, 11.52215 ], [ 92.64756, 11.5223 ], [ 92.64751, 11.52237 ], [ 92.64741, 11.52244 ], [ 92.64727, 11.52261 ], [ 92.64723, 11.52291 ], [ 92.64716, 11.52302 ], [ 92.64714, 11.52319 ], [ 92.64704, 11.52328 ], [ 92.64697, 11.52341 ], [ 92.64689, 11.52348 ], [ 92.64681, 11.52351 ], [ 92.64669, 11.52351 ], [ 92.64655, 11.5234 ], [ 92.64635, 11.5234 ], [ 92.64625, 11.52347 ], [ 92.64617, 11.52359 ], [ 92.64611, 11.52376 ], [ 92.64608, 11.52405 ], [ 92.64612, 11.5242 ], [ 92.647, 11.52491 ], [ 92.64709, 11.52504 ], [ 92.64711, 11.52522 ], [ 92.6471, 11.52551 ], [ 92.64702, 11.52577 ], [ 92.647, 11.52598 ], [ 92.64713, 11.52641 ], [ 92.64712, 11.52665 ], [ 92.6472, 11.52701 ], [ 92.64719, 11.5273 ], [ 92.64706, 11.52812 ], [ 92.64705, 11.52852 ], [ 92.64673, 11.52914 ], [ 92.64674, 11.52946 ], [ 92.64662, 11.52961 ], [ 92.64658, 11.52975 ], [ 92.64661, 11.52986 ], [ 92.6466, 11.52993 ], [ 92.64655, 11.52995 ], [ 92.64641, 11.52989 ], [ 92.64635, 11.52991 ], [ 92.64627, 11.53 ], [ 92.64624, 11.5301 ], [ 92.64628, 11.53014 ], [ 92.64639, 11.53014 ], [ 92.64645, 11.53018 ], [ 92.64641, 11.5307 ], [ 92.6462, 11.53132 ], [ 92.64601, 11.5313 ], [ 92.64598, 11.5314 ], [ 92.64598, 11.53155 ], [ 92.64589, 11.53185 ], [ 92.64571, 11.53292 ], [ 92.64569, 11.53319 ], [ 92.64561, 11.53321 ], [ 92.64558, 11.53328 ], [ 92.64558, 11.53342 ], [ 92.6457, 11.5336 ], [ 92.64571, 11.53372 ], [ 92.64567, 11.53383 ], [ 92.64561, 11.53387 ], [ 92.64548, 11.53389 ], [ 92.64539, 11.53393 ], [ 92.64533, 11.53402 ], [ 92.64532, 11.53415 ], [ 92.64537, 11.53428 ], [ 92.64565, 11.53457 ], [ 92.64608, 11.53496 ], [ 92.64623, 11.53536 ], [ 92.64629, 11.53559 ], [ 92.64621, 11.53595 ], [ 92.64623, 11.53614 ], [ 92.64652, 11.53639 ], [ 92.64656, 11.53647 ], [ 92.64656, 11.53659 ], [ 92.64652, 11.53666 ], [ 92.64636, 11.53665 ], [ 92.64617, 11.53658 ], [ 92.64607, 11.53658 ], [ 92.64598, 11.53662 ], [ 92.64586, 11.53675 ], [ 92.64581, 11.53689 ], [ 92.64591, 11.53704 ], [ 92.64605, 11.53716 ], [ 92.64613, 11.53746 ], [ 92.64617, 11.53772 ], [ 92.64624, 11.53796 ], [ 92.64626, 11.53813 ], [ 92.64617, 11.53831 ], [ 92.64588, 11.53845 ], [ 92.64569, 11.53843 ], [ 92.64554, 11.53836 ], [ 92.64527, 11.53818 ], [ 92.64503, 11.53812 ], [ 92.64482, 11.53813 ], [ 92.64469, 11.53825 ], [ 92.6446, 11.53837 ], [ 92.64447, 11.53869 ], [ 92.6443, 11.54037 ], [ 92.64432, 11.54095 ], [ 92.64441, 11.54131 ], [ 92.6445, 11.54154 ], [ 92.64461, 11.54168 ], [ 92.64474, 11.54179 ], [ 92.64493, 11.54189 ], [ 92.64573, 11.54213 ], [ 92.64648, 11.54229 ], [ 92.64669, 11.54244 ], [ 92.64691, 11.54274 ], [ 92.64737, 11.54328 ], [ 92.64798, 11.54418 ], [ 92.64833, 11.54454 ], [ 92.64888, 11.54472 ], [ 92.64901, 11.54482 ], [ 92.64921, 11.54507 ], [ 92.64921, 11.54514 ], [ 92.64915, 11.54519 ], [ 92.64916, 11.54531 ], [ 92.64924, 11.54536 ], [ 92.6493, 11.54544 ], [ 92.64927, 11.54568 ], [ 92.64931, 11.54585 ], [ 92.64965, 11.54668 ], [ 92.64974, 11.54679 ], [ 92.64989, 11.54683 ], [ 92.65003, 11.54693 ], [ 92.6501, 11.54711 ], [ 92.6501, 11.54744 ], [ 92.65002, 11.54753 ], [ 92.64995, 11.54757 ], [ 92.64987, 11.54771 ], [ 92.64986, 11.54783 ], [ 92.64992, 11.54809 ], [ 92.65013, 11.54858 ], [ 92.65037, 11.54904 ], [ 92.6505, 11.54935 ], [ 92.65063, 11.54951 ], [ 92.65077, 11.54957 ], [ 92.65109, 11.5495 ], [ 92.65126, 11.54949 ], [ 92.65137, 11.54951 ], [ 92.6514, 11.5496 ], [ 92.65134, 11.54972 ], [ 92.65125, 11.54979 ], [ 92.65121, 11.54986 ], [ 92.65106, 11.5505 ], [ 92.65077, 11.55145 ], [ 92.65065, 11.55164 ], [ 92.65062, 11.55241 ], [ 92.65056, 11.55252 ], [ 92.65041, 11.55257 ], [ 92.65008, 11.55257 ], [ 92.64981, 11.55261 ], [ 92.64934, 11.55316 ], [ 92.64917, 11.55332 ], [ 92.64882, 11.55349 ], [ 92.64818, 11.55405 ], [ 92.64799, 11.55427 ], [ 92.64778, 11.55439 ], [ 92.64751, 11.55466 ], [ 92.64689, 11.55505 ], [ 92.64639, 11.55547 ], [ 92.64597, 11.55601 ], [ 92.64538, 11.5565 ], [ 92.64493, 11.55658 ], [ 92.64453, 11.55658 ], [ 92.64438, 11.55665 ], [ 92.64423, 11.55682 ], [ 92.64395, 11.55698 ], [ 92.64326, 11.55777 ], [ 92.6431, 11.55806 ], [ 92.64315, 11.55852 ], [ 92.64305, 11.55905 ], [ 92.64301, 11.55969 ], [ 92.64303, 11.55982 ], [ 92.64292, 11.55997 ], [ 92.64262, 11.56014 ], [ 92.64254, 11.56025 ], [ 92.64252, 11.56038 ], [ 92.64253, 11.56054 ], [ 92.64269, 11.56094 ], [ 92.6429, 11.56172 ], [ 92.64339, 11.56317 ], [ 92.64387, 11.56409 ], [ 92.64522, 11.56592 ], [ 92.64537, 11.56655 ], [ 92.6455, 11.56739 ], [ 92.64574, 11.56816 ], [ 92.64614, 11.56923 ], [ 92.64684, 11.57094 ], [ 92.64729, 11.57151 ], [ 92.64757, 11.572 ], [ 92.64755, 11.57235 ], [ 92.6472, 11.57268 ], [ 92.64696, 11.57285 ], [ 92.64663, 11.57292 ], [ 92.64638, 11.57292 ], [ 92.64593, 11.57287 ], [ 92.64533, 11.57298 ], [ 92.64436, 11.57324 ], [ 92.64361, 11.5735 ], [ 92.64254, 11.5741 ], [ 92.6417, 11.57447 ], [ 92.64105, 11.57467 ], [ 92.64038, 11.57493 ], [ 92.63993, 11.57528 ], [ 92.6395, 11.57573 ], [ 92.63873, 11.57597 ], [ 92.63844, 11.57614 ], [ 92.63818, 11.57653 ], [ 92.63692, 11.57759 ], [ 92.63598, 11.5783 ], [ 92.6353, 11.57871 ], [ 92.635, 11.57879 ], [ 92.63456, 11.57881 ], [ 92.63432, 11.57889 ], [ 92.63415, 11.57917 ], [ 92.63381, 11.57948 ], [ 92.63342, 11.57999 ], [ 92.63327, 11.58022 ], [ 92.63304, 11.58034 ], [ 92.63281, 11.5803 ], [ 92.63257, 11.5801 ], [ 92.63235, 11.5798 ], [ 92.63237, 11.57926 ], [ 92.63226, 11.57881 ], [ 92.63223, 11.57809 ], [ 92.6319, 11.57738 ], [ 92.63184, 11.57659 ], [ 92.63185, 11.57619 ], [ 92.63196, 11.57566 ], [ 92.63208, 11.5753 ], [ 92.6321, 11.57502 ], [ 92.632, 11.5748 ], [ 92.63169, 11.57425 ], [ 92.63135, 11.57378 ], [ 92.63112, 11.57333 ], [ 92.63095, 11.57308 ], [ 92.63098, 11.57281 ], [ 92.63086, 11.57274 ], [ 92.63032, 11.57265 ], [ 92.62947, 11.57232 ], [ 92.62849, 11.57203 ], [ 92.62826, 11.57181 ], [ 92.62788, 11.57127 ], [ 92.62739, 11.57034 ], [ 92.62574, 11.56845 ], [ 92.62456, 11.56681 ], [ 92.62396, 11.56637 ], [ 92.6236, 11.56622 ], [ 92.62338, 11.56599 ], [ 92.62319, 11.56574 ], [ 92.62307, 11.56519 ], [ 92.62274, 11.56464 ], [ 92.62234, 11.56404 ], [ 92.62211, 11.56347 ], [ 92.62132, 11.56238 ], [ 92.6209, 11.56192 ], [ 92.62065, 11.56146 ], [ 92.62041, 11.56129 ], [ 92.62016, 11.56125 ], [ 92.61984, 11.56124 ], [ 92.61962, 11.56134 ], [ 92.61932, 11.56193 ], [ 92.61909, 11.56216 ], [ 92.6187, 11.56226 ], [ 92.61792, 11.56232 ], [ 92.61776, 11.56246 ], [ 92.61772, 11.56264 ], [ 92.6178, 11.56301 ], [ 92.61814, 11.56375 ], [ 92.61817, 11.56415 ], [ 92.61827, 11.5645 ], [ 92.6185, 11.56481 ], [ 92.61844, 11.56525 ], [ 92.61814, 11.56624 ], [ 92.61825, 11.56662 ], [ 92.61847, 11.56723 ], [ 92.61875, 11.56763 ], [ 92.61881, 11.56786 ], [ 92.61883, 11.56813 ], [ 92.62007, 11.57137 ], [ 92.6202, 11.57243 ], [ 92.6205, 11.5739 ], [ 92.6205, 11.57627 ], [ 92.62041, 11.57752 ], [ 92.61993, 11.57973 ], [ 92.6198, 11.58081 ], [ 92.61983, 11.58134 ], [ 92.61964, 11.58152 ], [ 92.61938, 11.58315 ], [ 92.61922, 11.58368 ], [ 92.61882, 11.58431 ], [ 92.61848, 11.58516 ], [ 92.61794, 11.58596 ], [ 92.61747, 11.58627 ], [ 92.6171, 11.58641 ], [ 92.6164, 11.58641 ], [ 92.61593, 11.58657 ], [ 92.61537, 11.58694 ], [ 92.61489, 11.58768 ], [ 92.61377, 11.58986 ], [ 92.61341, 11.59038 ], [ 92.61308, 11.59057 ], [ 92.61278, 11.59068 ], [ 92.61252, 11.5909 ], [ 92.61217, 11.59135 ], [ 92.61164, 11.59231 ], [ 92.61113, 11.59294 ], [ 92.61079, 11.59347 ], [ 92.60978, 11.59409 ], [ 92.60941, 11.59425 ], [ 92.60909, 11.59436 ], [ 92.60883, 11.59431 ], [ 92.60866, 11.59405 ], [ 92.60827, 11.59362 ], [ 92.608, 11.59354 ], [ 92.60768, 11.59361 ], [ 92.60741, 11.59378 ], [ 92.60722, 11.59393 ], [ 92.60718, 11.59414 ], [ 92.60734, 11.59442 ], [ 92.6076, 11.59461 ], [ 92.60776, 11.59529 ], [ 92.60846, 11.59687 ], [ 92.60865, 11.59808 ], [ 92.6089, 11.59939 ], [ 92.60901, 11.60011 ], [ 92.60877, 11.60083 ], [ 92.6084, 11.60143 ], [ 92.60803, 11.6019 ], [ 92.60771, 11.60214 ], [ 92.60746, 11.60278 ], [ 92.60709, 11.60337 ], [ 92.60666, 11.60442 ], [ 92.60648, 11.60533 ], [ 92.60648, 11.60586 ], [ 92.60633, 11.60621 ], [ 92.60575, 11.60724 ], [ 92.60563, 11.60785 ], [ 92.60567, 11.60839 ], [ 92.6058, 11.60928 ], [ 92.605818181818179, 11.60933 ], [ 92.60628, 11.6106 ], [ 92.60642, 11.61145 ], [ 92.60695, 11.61238 ], [ 92.60746, 11.6129 ], [ 92.60816, 11.61382 ], [ 92.60877, 11.61467 ], [ 92.60901, 11.61539 ], [ 92.60904, 11.6163 ], [ 92.6092, 11.61746 ], [ 92.60923, 11.61796 ], [ 92.60906, 11.61825 ], [ 92.60885, 11.6185 ], [ 92.60875, 11.61886 ], [ 92.60878, 11.61937 ], [ 92.60891, 11.6198 ], [ 92.609, 11.62055 ], [ 92.60932, 11.62083 ], [ 92.60969, 11.62083 ], [ 92.6103, 11.62066 ], [ 92.61061, 11.62063 ], [ 92.61096, 11.62066 ], [ 92.61137, 11.62131 ], [ 92.61158, 11.62135 ], [ 92.61197, 11.62125 ], [ 92.61211, 11.62103 ], [ 92.61227, 11.62088 ], [ 92.61251, 11.6209 ], [ 92.6128, 11.62109 ], [ 92.61298, 11.62128 ], [ 92.61304, 11.62154 ], [ 92.61317, 11.62161 ], [ 92.61339, 11.62148 ], [ 92.6136, 11.62122 ], [ 92.61372, 11.62093 ], [ 92.61392, 11.62071 ], [ 92.61434, 11.62071 ], [ 92.61549, 11.621 ], [ 92.61608, 11.6211 ], [ 92.61687, 11.62114 ], [ 92.61772, 11.62114 ], [ 92.61855, 11.62083 ], [ 92.61902, 11.62058 ], [ 92.61956, 11.62015 ], [ 92.62007, 11.61996 ], [ 92.62079, 11.61934 ], [ 92.62178, 11.61882 ], [ 92.62244, 11.61854 ], [ 92.62339, 11.61783 ], [ 92.62402, 11.61746 ], [ 92.62453, 11.61736 ], [ 92.62478, 11.6174 ], [ 92.62504, 11.61795 ], [ 92.62529, 11.61984 ], [ 92.6256, 11.62074 ], [ 92.62598, 11.62149 ], [ 92.62671, 11.62236 ], [ 92.62718, 11.62332 ], [ 92.62728, 11.62431 ], [ 92.62765, 11.62487 ], [ 92.62765, 11.62549 ], [ 92.62759, 11.62592 ], [ 92.62848, 11.62571 ], [ 92.62892, 11.6254 ], [ 92.62933, 11.62434 ], [ 92.62962, 11.62307 ], [ 92.62984, 11.6209 ], [ 92.62984, 11.61994 ], [ 92.62988, 11.61929 ], [ 92.63019, 11.61883 ], [ 92.63032, 11.61843 ], [ 92.63007, 11.6179 ], [ 92.62988, 11.61743 ], [ 92.62985, 11.61712 ], [ 92.63026, 11.61684 ], [ 92.63105, 11.61672 ], [ 92.63318, 11.61651 ], [ 92.63371, 11.61641 ], [ 92.63422, 11.61592 ], [ 92.63485, 11.61536 ], [ 92.63539, 11.61518 ], [ 92.63593, 11.61518 ], [ 92.63659, 11.61574 ], [ 92.63821, 11.61732 ], [ 92.6396, 11.61841 ], [ 92.64032, 11.61918 ], [ 92.64115, 11.61993 ], [ 92.64162, 11.62101 ], [ 92.64175, 11.62182 ], [ 92.64257, 11.62275 ], [ 92.64355, 11.6234 ], [ 92.64421, 11.62415 ], [ 92.64484, 11.62501 ], [ 92.64516, 11.62676 ], [ 92.6456, 11.62859 ], [ 92.64543, 11.63317 ], [ 92.64521, 11.63518 ], [ 92.64467, 11.63645 ], [ 92.64435, 11.6376 ], [ 92.64359, 11.6389 ], [ 92.64308, 11.63918 ], [ 92.64245, 11.63924 ], [ 92.64166, 11.63918 ], [ 92.64106, 11.63859 ], [ 92.64055, 11.63797 ], [ 92.64046, 11.63731 ], [ 92.63961, 11.63654 ], [ 92.63866, 11.63499 ], [ 92.63761, 11.63461 ], [ 92.63622, 11.6343 ], [ 92.6353, 11.63446 ], [ 92.63489, 11.6348 ], [ 92.6344, 11.63527 ], [ 92.63422, 11.63581 ], [ 92.63416, 11.6365 ], [ 92.63442, 11.63767 ], [ 92.6349, 11.63956 ], [ 92.63497, 11.6403 ], [ 92.63521, 11.64088 ], [ 92.63565, 11.64136 ], [ 92.63605, 11.64151 ], [ 92.63649, 11.64188 ], [ 92.63682, 11.64225 ], [ 92.63748, 11.644 ], [ 92.63794, 11.64475 ], [ 92.63825, 11.64534 ], [ 92.63807, 11.64592 ], [ 92.63774, 11.64665 ], [ 92.63663, 11.6477 ], [ 92.63617, 11.64822 ], [ 92.63586, 11.64863 ], [ 92.63566, 11.64919 ], [ 92.63546, 11.64951 ], [ 92.63531, 11.64999 ], [ 92.63531, 11.65074 ], [ 92.63509, 11.65085 ], [ 92.63487, 11.65072 ], [ 92.63465, 11.65046 ], [ 92.63423, 11.6502 ], [ 92.6339, 11.65016 ], [ 92.63363, 11.65005 ], [ 92.63361, 11.64971 ], [ 92.63337, 11.64968 ], [ 92.63288, 11.65003 ], [ 92.63207, 11.6515 ], [ 92.63174, 11.6518 ], [ 92.63138, 11.65174 ], [ 92.63068, 11.65007 ], [ 92.63057, 11.64917 ], [ 92.63057, 11.64716 ], [ 92.63077, 11.64591 ], [ 92.63111, 11.64478 ], [ 92.63153, 11.64414 ], [ 92.63161, 11.64355 ], [ 92.63166, 11.64243 ], [ 92.63184, 11.64176 ], [ 92.63224, 11.64096 ], [ 92.63266, 11.63996 ], [ 92.63261, 11.63931 ], [ 92.63248, 11.63871 ], [ 92.63242, 11.63771 ], [ 92.63233, 11.63728 ], [ 92.63224, 11.63661 ], [ 92.63192, 11.63482 ], [ 92.6315, 11.63364 ], [ 92.63126, 11.63105 ], [ 92.63111, 11.63023 ], [ 92.63115, 11.62984 ], [ 92.63162, 11.62923 ], [ 92.63166, 11.62893 ], [ 92.63155, 11.6288 ], [ 92.63124, 11.62856 ], [ 92.63076, 11.6285 ], [ 92.62996, 11.62852 ], [ 92.62963, 11.62847 ], [ 92.62928, 11.62845 ], [ 92.62851, 11.62854 ], [ 92.62833, 11.62843 ], [ 92.62818, 11.62821 ], [ 92.62783, 11.62817 ], [ 92.62761, 11.62823 ], [ 92.62719, 11.62841 ], [ 92.62686, 11.62838 ], [ 92.62659, 11.62832 ], [ 92.62613, 11.62845 ], [ 92.62544, 11.62873 ], [ 92.62458, 11.62931 ], [ 92.62387, 11.62974 ], [ 92.62346, 11.62993 ], [ 92.62286, 11.63039 ], [ 92.62253, 11.63093 ], [ 92.62209, 11.63175 ], [ 92.62162, 11.63237 ], [ 92.62107, 11.63293 ], [ 92.62072, 11.6331 ], [ 92.62021, 11.63313 ], [ 92.61959, 11.63308 ], [ 92.61926, 11.63291 ], [ 92.61867, 11.63274 ], [ 92.61787, 11.63271 ], [ 92.61724, 11.63291 ], [ 92.61662, 11.63336 ], [ 92.61513, 11.63451 ], [ 92.6144, 11.63479 ], [ 92.61346, 11.63504 ], [ 92.61288, 11.63526 ], [ 92.61235, 11.63556 ], [ 92.61189, 11.63558 ], [ 92.61151, 11.6353 ], [ 92.61048, 11.634 ], [ 92.61015, 11.63381 ], [ 92.60984, 11.63381 ], [ 92.60889, 11.63394 ], [ 92.60856, 11.63396 ], [ 92.60819, 11.63422 ], [ 92.60816, 11.63493 ], [ 92.60838, 11.63605 ], [ 92.60823, 11.63729 ], [ 92.60803, 11.63826 ], [ 92.6077, 11.63874 ], [ 92.60728, 11.63902 ], [ 92.60715, 11.63938 ], [ 92.60728, 11.63981 ], [ 92.60704, 11.6405 ], [ 92.60657, 11.64117 ], [ 92.60605, 11.64262 ], [ 92.60558, 11.64376 ], [ 92.60509, 11.64458 ], [ 92.6045, 11.64518 ], [ 92.60362, 11.64626 ], [ 92.60289, 11.64769 ], [ 92.60202, 11.64896 ], [ 92.60151, 11.64977 ], [ 92.60007, 11.65041 ], [ 92.59981, 11.65033 ], [ 92.59968, 11.65013 ], [ 92.59939, 11.65005 ], [ 92.5991, 11.65061 ], [ 92.59899, 11.65102 ], [ 92.5989, 11.65158 ], [ 92.59908, 11.65223 ], [ 92.59919, 11.65316 ], [ 92.59951, 11.65487 ], [ 92.6, 11.65524 ], [ 92.6004, 11.65548 ], [ 92.60073, 11.65573 ], [ 92.60073, 11.65608 ], [ 92.60028, 11.65617 ], [ 92.59993, 11.65619 ], [ 92.59951, 11.65645 ], [ 92.59903, 11.65679 ], [ 92.59878, 11.6572 ], [ 92.5985, 11.65774 ], [ 92.59832, 11.65854 ], [ 92.59777, 11.65968 ], [ 92.5973, 11.66082 ], [ 92.59668, 11.66156 ], [ 92.59611, 11.66237 ], [ 92.59565, 11.66325 ], [ 92.59512, 11.66495 ], [ 92.59482, 11.6658 ], [ 92.59447, 11.66628 ], [ 92.59371, 11.66692 ], [ 92.59315, 11.66731 ], [ 92.59281, 11.6674 ], [ 92.59267, 11.66741 ], [ 92.59244, 11.66723 ], [ 92.59217, 11.66714 ], [ 92.59202, 11.66716 ], [ 92.59165, 11.66784 ], [ 92.59125, 11.66837 ], [ 92.59109, 11.66905 ], [ 92.59127, 11.66944 ], [ 92.59129, 11.67006 ], [ 92.59134, 11.67041 ], [ 92.5922, 11.67117 ], [ 92.59243, 11.67153 ], [ 92.59264, 11.67177 ], [ 92.59349, 11.67206 ], [ 92.59393, 11.67207 ], [ 92.59472, 11.67218 ], [ 92.59513, 11.67241 ], [ 92.59538, 11.67259 ], [ 92.59582, 11.67321 ], [ 92.59619, 11.6742 ], [ 92.59681, 11.6757 ], [ 92.59737, 11.67651 ], [ 92.59774, 11.67732 ], [ 92.598, 11.67858 ], [ 92.59824, 11.67994 ], [ 92.59855, 11.68239 ], [ 92.59901, 11.68406 ], [ 92.59986, 11.6852 ], [ 92.59994, 11.68701 ], [ 92.59932, 11.68943 ], [ 92.5987, 11.69216 ], [ 92.598, 11.6942 ], [ 92.59708, 11.69541 ], [ 92.59599, 11.6973 ], [ 92.59522, 11.69919 ], [ 92.59468, 11.70168 ], [ 92.59324, 11.70277 ], [ 92.5928, 11.70364 ], [ 92.59286, 11.70428 ], [ 92.59342, 11.70516 ], [ 92.5947, 11.70632 ], [ 92.59571, 11.70743 ], [ 92.59651, 11.70827 ], [ 92.59692, 11.709 ], [ 92.59683, 11.70958 ], [ 92.59624, 11.71019 ], [ 92.5949, 11.71118 ], [ 92.59401, 11.71187 ], [ 92.5933, 11.71277 ], [ 92.59285, 11.71373 ], [ 92.59238, 11.71449 ], [ 92.59155, 11.71478 ], [ 92.59033, 11.71484 ], [ 92.58917, 11.71484 ], [ 92.58831, 11.71481 ], [ 92.58607, 11.71568 ], [ 92.58426, 11.71576 ], [ 92.58328, 11.71597 ], [ 92.58277, 11.71635 ], [ 92.58254, 11.71675 ], [ 92.58135, 11.71719 ], [ 92.58016, 11.71713 ], [ 92.5777, 11.71675 ], [ 92.57547, 11.71539 ], [ 92.57356, 11.71091 ], [ 92.57229, 11.70355 ], [ 92.57127, 11.69845 ], [ 92.56898, 11.6967 ], [ 92.56656, 11.69421 ], [ 92.56529, 11.69246 ], [ 92.56402, 11.69246 ], [ 92.56185, 11.69383 ], [ 92.56045, 11.69583 ], [ 92.55956, 11.69882 ], [ 92.55892, 11.70081 ], [ 92.55714, 11.70754 ], [ 92.55485, 11.71253 ], [ 92.55407, 11.71734 ], [ 92.55203, 11.72207 ], [ 92.55216, 11.73204 ], [ 92.55229, 11.73889 ], [ 92.552493495400782, 11.74063 ], [ 92.55318, 11.7465 ], [ 92.55381, 11.7612 ], [ 92.55623, 11.76419 ], [ 92.55916, 11.76955 ], [ 92.55928, 11.77192 ], [ 92.55916, 11.77329 ], [ 92.55699, 11.77354 ], [ 92.55572, 11.77566 ], [ 92.5547, 11.77753 ], [ 92.55381, 11.78134 ], [ 92.55241, 11.78582 ], [ 92.55304, 11.78919 ], [ 92.55406, 11.79218 ], [ 92.55355, 11.79679 ], [ 92.55317, 11.80181 ], [ 92.55113, 11.80704 ], [ 92.54999, 11.81377 ], [ 92.54848, 11.81802 ], [ 92.54477, 11.81925 ], [ 92.54249, 11.81895 ], [ 92.54177, 11.82009 ], [ 92.54249, 11.82287 ], [ 92.54279, 11.8238 ], [ 92.54344, 11.82494 ], [ 92.54468, 11.8273 ], [ 92.54541, 11.83014 ], [ 92.54541, 11.83328 ], [ 92.54293, 11.83699 ], [ 92.54074, 11.83878 ], [ 92.53826, 11.83921 ], [ 92.53534, 11.83821 ], [ 92.53323, 11.83549 ], [ 92.53191, 11.83421 ], [ 92.53024, 11.83314 ], [ 92.52922, 11.83114 ], [ 92.52681, 11.82907 ], [ 92.52477, 11.82714 ], [ 92.52295, 11.82685 ], [ 92.52141, 11.82799 ], [ 92.51959, 11.83035 ], [ 92.51849, 11.83328 ], [ 92.51835, 11.83527 ], [ 92.51893, 11.83706 ], [ 92.51951, 11.8392 ], [ 92.51922, 11.84113 ], [ 92.51813, 11.84332 ], [ 92.51667, 11.84597 ], [ 92.51579, 11.84668 ], [ 92.5147, 11.84739 ], [ 92.51462, 11.84982 ], [ 92.51499, 11.85161 ], [ 92.51659, 11.85475 ], [ 92.51842, 11.85621 ], [ 92.51987, 11.86142 ], [ 92.5206, 11.86463 ], [ 92.52184, 11.86892 ], [ 92.52264, 11.8697 ], [ 92.52425, 11.87042 ], [ 92.5252, 11.87134 ], [ 92.52556, 11.87242 ], [ 92.52512, 11.87456 ], [ 92.5252, 11.8787 ], [ 92.52644, 11.88041 ], [ 92.52709, 11.88227 ], [ 92.52716, 11.88558 ], [ 92.52643, 11.89029 ], [ 92.52672, 11.89443 ], [ 92.52702, 11.8955 ], [ 92.52862, 11.89622 ], [ 92.53052, 11.89686 ], [ 92.53657, 11.90043 ], [ 92.53694, 11.90246 ], [ 92.5384, 11.90474 ], [ 92.5384, 11.90703 ], [ 92.53796, 11.90838 ], [ 92.53599, 11.90981 ], [ 92.53591, 11.9116 ], [ 92.53723, 11.91388 ], [ 92.53912, 11.91587 ], [ 92.5419, 11.91873 ], [ 92.54292, 11.92123 ], [ 92.54387, 11.92251 ], [ 92.54649, 11.92403 ], [ 92.55078, 11.92553 ], [ 92.55231, 11.92581 ], [ 92.55333, 11.92567 ], [ 92.55399, 11.9251 ], [ 92.55479, 11.9251 ], [ 92.55494, 11.92595 ], [ 92.55508, 11.92752 ], [ 92.5553, 11.92931 ], [ 92.55647, 11.93095 ], [ 92.55815, 11.93231 ], [ 92.56012, 11.93538 ], [ 92.5607, 11.93652 ], [ 92.55975, 11.93895 ], [ 92.55888, 11.93974 ], [ 92.55822, 11.94009 ], [ 92.55851, 11.94059 ], [ 92.55961, 11.94181 ], [ 92.56056, 11.94281 ], [ 92.56128, 11.94397 ], [ 92.5618, 11.9454 ], [ 92.56189, 11.94601 ], [ 92.56214, 11.94628 ], [ 92.56255, 11.94617 ], [ 92.5627, 11.94578 ], [ 92.5627, 11.94537 ], [ 92.56293, 11.94482 ], [ 92.56361, 11.94376 ], [ 92.56397, 11.94375 ], [ 92.56476, 11.94349 ], [ 92.5652, 11.94298 ], [ 92.56566, 11.94104 ], [ 92.56614, 11.93993 ], [ 92.56651, 11.93925 ], [ 92.5671, 11.93777 ], [ 92.56748, 11.93688 ], [ 92.56778, 11.93592 ], [ 92.56794, 11.93512 ], [ 92.56881, 11.93403 ], [ 92.56957, 11.93177 ], [ 92.57008, 11.93076 ], [ 92.57092, 11.92947 ], [ 92.57254, 11.92794 ], [ 92.57359, 11.92725 ], [ 92.57482, 11.92685 ], [ 92.57595, 11.92669 ], [ 92.57661, 11.92663 ], [ 92.57746, 11.92677 ], [ 92.57795, 11.92712 ], [ 92.5782, 11.92727 ], [ 92.57844, 11.92714 ], [ 92.57897, 11.92654 ], [ 92.57937, 11.92487 ], [ 92.57979, 11.92434 ], [ 92.58017, 11.92345 ], [ 92.58058, 11.92106 ], [ 92.5806, 11.92019 ], [ 92.58035, 11.91952 ], [ 92.58012, 11.91898 ], [ 92.57966, 11.91803 ], [ 92.57963, 11.91774 ], [ 92.58048, 11.91699 ], [ 92.582, 11.91351 ], [ 92.5821, 11.91157 ], [ 92.58259, 11.91029 ], [ 92.58305, 11.90835 ], [ 92.58303, 11.90789 ], [ 92.58234, 11.90681 ], [ 92.58195, 11.90627 ], [ 92.58183, 11.90592 ], [ 92.58198, 11.9053 ], [ 92.58264, 11.90396 ], [ 92.58287, 11.90325 ], [ 92.58344, 11.90275 ], [ 92.58385, 11.9025 ], [ 92.58421, 11.90213 ], [ 92.58467, 11.90067 ], [ 92.58482, 11.8998 ], [ 92.58473, 11.89884 ], [ 92.58472, 11.89785 ], [ 92.58469, 11.89731 ], [ 92.58485, 11.89681 ], [ 92.58488, 11.89628 ], [ 92.58501, 11.89607 ], [ 92.58541, 11.89575 ], [ 92.58554, 11.89545 ], [ 92.58565, 11.89506 ], [ 92.58544, 11.89452 ], [ 92.58514, 11.89384 ], [ 92.5848, 11.89339 ], [ 92.5846, 11.89305 ], [ 92.58451, 11.89246 ], [ 92.58467, 11.89105 ], [ 92.58492, 11.88966 ], [ 92.58511, 11.88803 ], [ 92.58529, 11.88717 ], [ 92.58587, 11.88566 ], [ 92.5869, 11.88373 ], [ 92.58785, 11.88256 ], [ 92.58862, 11.88234 ], [ 92.58932, 11.88227 ], [ 92.59002, 11.88232 ], [ 92.59056, 11.88245 ], [ 92.59193, 11.88335 ], [ 92.59223, 11.88376 ], [ 92.59265, 11.88476 ], [ 92.59251, 11.88625 ], [ 92.59231, 11.8877 ], [ 92.59237, 11.88876 ], [ 92.59275, 11.89219 ], [ 92.59301, 11.89291 ], [ 92.59331, 11.89399 ], [ 92.59359, 11.89472 ], [ 92.5939, 11.89525 ], [ 92.59406, 11.89588 ], [ 92.59381, 11.89617 ], [ 92.5935, 11.89659 ], [ 92.59327, 11.89709 ], [ 92.59317, 11.89766 ], [ 92.5934, 11.89834 ], [ 92.59376, 11.89891 ], [ 92.59415, 11.89911 ], [ 92.5945, 11.89914 ], [ 92.59492, 11.89895 ], [ 92.59522, 11.89863 ], [ 92.59558, 11.89831 ], [ 92.5962, 11.89717 ], [ 92.59646, 11.89691 ], [ 92.59715, 11.89659 ], [ 92.59719, 11.89646 ], [ 92.59771, 11.89598 ], [ 92.59802, 11.89575 ], [ 92.59829, 11.89562 ], [ 92.59852, 11.89572 ], [ 92.59906, 11.89666 ], [ 92.59947, 11.89774 ], [ 92.59978, 11.89804 ], [ 92.60018, 11.89797 ], [ 92.60069, 11.89772 ], [ 92.60117, 11.89727 ], [ 92.60141, 11.89671 ], [ 92.60168, 11.89628 ], [ 92.60178, 11.89599 ], [ 92.60201, 11.89556 ], [ 92.60214, 11.89482 ], [ 92.60206, 11.89331 ], [ 92.60187, 11.89244 ], [ 92.60153, 11.89185 ], [ 92.60115, 11.89144 ], [ 92.60069, 11.89102 ], [ 92.60053, 11.89057 ], [ 92.60071, 11.89004 ], [ 92.60077, 11.88959 ], [ 92.60081, 11.88908 ], [ 92.60108, 11.88883 ], [ 92.60142, 11.88869 ], [ 92.60159, 11.88846 ], [ 92.60167, 11.88801 ], [ 92.60159, 11.88732 ], [ 92.6018, 11.88641 ], [ 92.60185, 11.88586 ], [ 92.60185, 11.88521 ], [ 92.60174, 11.88473 ], [ 92.60129, 11.88402 ], [ 92.601, 11.88342 ], [ 92.60092, 11.88288 ], [ 92.60089, 11.88251 ], [ 92.601, 11.88191 ], [ 92.60105, 11.88132 ], [ 92.60102, 11.8809 ], [ 92.6009, 11.88052 ], [ 92.6007, 11.88016 ], [ 92.60051, 11.87975 ], [ 92.60043, 11.87942 ], [ 92.60035, 11.87932 ], [ 92.60035, 11.87917 ], [ 92.60101, 11.87825 ], [ 92.60127, 11.87785 ], [ 92.60134, 11.87718 ], [ 92.60144, 11.87656 ], [ 92.60146, 11.8739 ], [ 92.60142, 11.87363 ], [ 92.60144, 11.87279 ], [ 92.60136, 11.87245 ], [ 92.60118, 11.87198 ], [ 92.60061, 11.87078 ], [ 92.60021, 11.86985 ], [ 92.59999, 11.86917 ], [ 92.59991, 11.86812 ], [ 92.59988, 11.86684 ], [ 92.59995, 11.86619 ], [ 92.60007, 11.86561 ], [ 92.60022, 11.86508 ], [ 92.60042, 11.86472 ], [ 92.60081, 11.86382 ], [ 92.60116, 11.86329 ], [ 92.6017, 11.86223 ], [ 92.60203, 11.86081 ], [ 92.6023, 11.86021 ], [ 92.60262, 11.85966 ], [ 92.6033, 11.85891 ], [ 92.60366, 11.85821 ], [ 92.60378, 11.85802 ], [ 92.60393, 11.85798 ], [ 92.60406, 11.85811 ], [ 92.60435, 11.85829 ], [ 92.60462, 11.85861 ], [ 92.60496, 11.85921 ], [ 92.60502, 11.8596 ], [ 92.60486, 11.8601 ], [ 92.60469, 11.86043 ], [ 92.60451, 11.86097 ], [ 92.6044, 11.86121 ], [ 92.60417, 11.86146 ], [ 92.60407, 11.86217 ], [ 92.60394, 11.86244 ], [ 92.60371, 11.86318 ], [ 92.60375, 11.86358 ], [ 92.6036, 11.86443 ], [ 92.6032, 11.8652 ], [ 92.6031, 11.86549 ], [ 92.60329, 11.86572 ], [ 92.60351, 11.8662 ], [ 92.60378, 11.86691 ], [ 92.60398, 11.86714 ], [ 92.60416, 11.86729 ], [ 92.60428, 11.86753 ], [ 92.60433, 11.86773 ], [ 92.60474, 11.86822 ], [ 92.60498, 11.86845 ], [ 92.60529, 11.86863 ], [ 92.6057, 11.86905 ], [ 92.60606, 11.86932 ], [ 92.60703, 11.86979 ], [ 92.60744, 11.87004 ], [ 92.60804, 11.87017 ], [ 92.60827, 11.87024 ], [ 92.60869, 11.87023 ], [ 92.60887, 11.87037 ], [ 92.6091, 11.87045 ], [ 92.60933, 11.87045 ], [ 92.6095, 11.87042 ], [ 92.6096, 11.87028 ], [ 92.60965, 11.87013 ], [ 92.61058, 11.87128 ], [ 92.61064, 11.87452 ], [ 92.61036, 11.88121 ], [ 92.60987, 11.88323 ], [ 92.6099, 11.89069 ], [ 92.61007, 11.89494 ], [ 92.61032, 11.89869 ], [ 92.61176, 11.90877 ], [ 92.6115, 11.91351 ], [ 92.60996, 11.9141 ], [ 92.6086, 11.91468 ], [ 92.60826, 11.91651 ], [ 92.608, 11.91818 ], [ 92.60656, 11.91826 ], [ 92.60545, 11.91851 ], [ 92.60519, 11.91867 ], [ 92.60613, 11.92026 ], [ 92.60612, 11.92449 ], [ 92.60757, 11.92599 ], [ 92.60867, 11.9279 ], [ 92.60952, 11.92932 ], [ 92.61079, 11.93538 ], [ 92.61071, 11.93805 ], [ 92.6107, 11.94088 ], [ 92.61079, 11.94338 ], [ 92.60968, 11.9448 ], [ 92.60857, 11.94654 ], [ 92.6084, 11.94854 ], [ 92.60891, 11.94938 ], [ 92.60916, 11.95163 ], [ 92.60941, 11.95313 ], [ 92.60933, 11.95504 ], [ 92.60916, 11.95587 ], [ 92.60932, 11.95687 ], [ 92.6106, 11.95721 ], [ 92.61239, 11.95804 ], [ 92.61298, 11.96004 ], [ 92.61246, 11.96729 ], [ 92.61263, 11.9712 ], [ 92.61263, 11.9747 ], [ 92.61245, 11.97801 ], [ 92.61228, 11.98026 ], [ 92.61219, 11.98192 ], [ 92.61228, 11.98317 ], [ 92.61279, 11.98609 ], [ 92.61372, 11.98909 ], [ 92.61474, 11.99 ], [ 92.6161, 11.99001 ], [ 92.61729, 11.99067 ], [ 92.61729, 11.99176 ], [ 92.61687, 11.99326 ], [ 92.61525, 11.99534 ], [ 92.61397, 11.99733 ], [ 92.61388, 12.00033 ], [ 92.613614068627442, 12.00343 ], [ 92.613614068627456, 12.00343 ], [ 92.61353, 12.00441 ], [ 92.61362, 12.00758 ], [ 92.61395, 12.00933 ], [ 92.61532, 12.01075 ], [ 92.6154, 12.01241 ], [ 92.61557, 12.01441 ], [ 92.61608, 12.01733 ], [ 92.61675, 12.01908 ], [ 92.61735, 12.02033 ], [ 92.61792, 12.02182 ], [ 92.61724, 12.02336 ], [ 92.61758, 12.02456 ], [ 92.61859, 12.02489 ], [ 92.62105, 12.02533 ], [ 92.62195, 12.02665 ], [ 92.62296, 12.02786 ], [ 92.62295, 12.02895 ], [ 92.62194, 12.03027 ], [ 92.62093, 12.03169 ], [ 92.62093, 12.03356 ], [ 92.62183, 12.03498 ], [ 92.62227, 12.03674 ], [ 92.62171, 12.03783 ], [ 92.62115, 12.0398 ], [ 92.62261, 12.04046 ], [ 92.62496, 12.04134 ], [ 92.62675, 12.04277 ], [ 92.62754, 12.04365 ], [ 92.62753, 12.04573 ], [ 92.62686, 12.04781 ], [ 92.62506, 12.04909 ], [ 92.62338, 12.04996 ], [ 92.62248, 12.05194 ], [ 92.6227, 12.05358 ], [ 92.62349, 12.05435 ], [ 92.62461, 12.05567 ], [ 92.62573, 12.05841 ], [ 92.62595, 12.06049 ], [ 92.62539, 12.06235 ], [ 92.6246, 12.06356 ], [ 92.6227, 12.0629 ], [ 92.62045, 12.06531 ], [ 92.62023, 12.06925 ], [ 92.62056, 12.07375 ], [ 92.62223, 12.0835 ], [ 92.62256, 12.08898 ], [ 92.62267, 12.0903 ], [ 92.62357, 12.0915 ], [ 92.62356, 12.09381 ], [ 92.62379, 12.09666 ], [ 92.62501, 12.10359 ], [ 92.62602, 12.10688 ], [ 92.62736, 12.10919 ], [ 92.62971, 12.1116 ], [ 92.63162, 12.11335 ], [ 92.63173, 12.115 ], [ 92.63363, 12.1173 ], [ 92.63385, 12.11763 ], [ 92.63621, 12.11982 ], [ 92.63632, 12.12136 ], [ 92.6362, 12.12245 ], [ 92.63452, 12.12322 ], [ 92.63284, 12.12333 ], [ 92.63217, 12.12355 ], [ 92.63239, 12.1264 ], [ 92.63395, 12.13166 ], [ 92.63563, 12.1378 ], [ 92.63604, 12.14069 ], [ 92.63761, 12.14266 ], [ 92.63772, 12.14387 ], [ 92.63772, 12.14485 ], [ 92.63738, 12.14562 ], [ 92.6376, 12.14617 ], [ 92.63884, 12.14705 ], [ 92.63895, 12.14737 ], [ 92.64062, 12.15319 ], [ 92.64208, 12.15845 ], [ 92.64297, 12.16206 ], [ 92.64319, 12.16513 ], [ 92.64398, 12.16667 ], [ 92.64497, 12.17022 ], [ 92.64542, 12.17559 ], [ 92.64609, 12.17768 ], [ 92.64799, 12.18064 ], [ 92.65057, 12.18513 ], [ 92.6518, 12.18787 ], [ 92.65393, 12.19204 ], [ 92.65471, 12.19577 ], [ 92.65583, 12.19884 ], [ 92.65683, 12.20147 ], [ 92.65683, 12.203 ], [ 92.65717, 12.20464 ], [ 92.65851, 12.20596 ], [ 92.65862, 12.20728 ], [ 92.66008, 12.21089 ], [ 92.66198, 12.21407 ], [ 92.66288, 12.21681 ], [ 92.664, 12.21736 ], [ 92.66489, 12.21736 ], [ 92.66512, 12.21616 ], [ 92.66456, 12.21419 ], [ 92.66333, 12.20914 ], [ 92.66255, 12.20651 ], [ 92.66176, 12.20563 ], [ 92.66031, 12.20191 ], [ 92.65919, 12.19895 ], [ 92.6574, 12.195 ], [ 92.65662, 12.19117 ], [ 92.65539, 12.18831 ], [ 92.65528, 12.18612 ], [ 92.65505, 12.18404 ], [ 92.6555, 12.18273 ], [ 92.65674, 12.18163 ], [ 92.65786, 12.18273 ], [ 92.65864, 12.18404 ], [ 92.65909, 12.18591 ], [ 92.65819, 12.18678 ], [ 92.65763, 12.18766 ], [ 92.65886, 12.18832 ], [ 92.66089, 12.19089 ], [ 92.66189, 12.19333 ], [ 92.66266, 12.19596 ], [ 92.66461, 12.20081 ], [ 92.66593, 12.20304 ], [ 92.66736, 12.20343 ], [ 92.66871, 12.20444 ], [ 92.66982, 12.20731 ], [ 92.67109, 12.21034 ], [ 92.67259, 12.2129 ], [ 92.67362, 12.21585 ], [ 92.67497, 12.21802 ], [ 92.67656, 12.21741 ], [ 92.67736, 12.21632 ], [ 92.67744, 12.21531 ], [ 92.67744, 12.21329 ], [ 92.67696, 12.21073 ], [ 92.67705, 12.2046 ], [ 92.67729, 12.20289 ], [ 92.67808, 12.20157 ], [ 92.67911, 12.20297 ], [ 92.67919, 12.20437 ], [ 92.67951, 12.20654 ], [ 92.67951, 12.20949 ], [ 92.67958, 12.21221 ], [ 92.67974, 12.21337 ], [ 92.68061, 12.21407 ], [ 92.68197, 12.21345 ], [ 92.68316, 12.21299 ], [ 92.68363, 12.21143 ], [ 92.68364, 12.20771 ], [ 92.68411, 12.20693 ], [ 92.68507, 12.20786 ], [ 92.68586, 12.2105 ], [ 92.68729, 12.21471 ], [ 92.68721, 12.21696 ], [ 92.68609, 12.21945 ], [ 92.68546, 12.22092 ], [ 92.68546, 12.22255 ], [ 92.68633, 12.22651 ], [ 92.68744, 12.22775 ], [ 92.68831, 12.22853 ], [ 92.68887, 12.23039 ], [ 92.68887, 12.23156 ], [ 92.68878, 12.23358 ], [ 92.68902, 12.23505 ], [ 92.69069, 12.23521 ], [ 92.69212, 12.23606 ], [ 92.69331, 12.23808 ], [ 92.69458, 12.23878 ], [ 92.69601, 12.23894 ], [ 92.698, 12.23894 ], [ 92.69911, 12.23832 ], [ 92.69982, 12.23762 ], [ 92.70054, 12.23646 ], [ 92.70165, 12.23329 ], [ 92.70284, 12.23306 ], [ 92.70356, 12.23228 ], [ 92.70539, 12.22933 ], [ 92.70579, 12.22763 ], [ 92.70563, 12.22662 ], [ 92.70611, 12.22576 ], [ 92.70627, 12.22475 ], [ 92.70587, 12.22367 ], [ 92.70595, 12.22219 ], [ 92.70682, 12.22126 ], [ 92.70794, 12.2208 ], [ 92.70802, 12.22002 ], [ 92.7069, 12.21916 ], [ 92.70691, 12.21777 ], [ 92.70699, 12.21676 ], [ 92.70794, 12.2166 ], [ 92.70881, 12.21754 ], [ 92.70929, 12.2166 ], [ 92.70945, 12.21482 ], [ 92.70969, 12.21148 ], [ 92.70961, 12.2076 ], [ 92.70835, 12.20039 ], [ 92.70803, 12.19938 ], [ 92.70668, 12.19853 ], [ 92.70668, 12.19759 ], [ 92.7074, 12.1962 ], [ 92.70915, 12.19379 ], [ 92.71169, 12.19181 ], [ 92.71245, 12.19032 ], [ 92.71245, 12.18884 ], [ 92.71178, 12.18819 ], [ 92.7101, 12.18753 ], [ 92.70833, 12.18563 ], [ 92.70623, 12.18078 ], [ 92.70463, 12.17568 ], [ 92.70464, 12.17181 ], [ 92.70405, 12.17016 ], [ 92.70329, 12.1672 ], [ 92.7033, 12.16375 ], [ 92.70431, 12.16375 ], [ 92.70506, 12.16449 ], [ 92.70616, 12.1672 ], [ 92.70666, 12.16901 ], [ 92.7075, 12.17017 ], [ 92.70843, 12.17083 ], [ 92.70977, 12.17214 ], [ 92.71145, 12.17428 ], [ 92.7128, 12.17593 ], [ 92.7133, 12.17511 ], [ 92.71314, 12.17395 ], [ 92.71238, 12.17149 ], [ 92.71171, 12.16984 ], [ 92.71171, 12.16836 ], [ 92.71179, 12.16704 ], [ 92.71154, 12.16556 ], [ 92.71112, 12.16392 ], [ 92.7102, 12.16227 ], [ 92.7102, 12.16096 ], [ 92.71087, 12.16046 ], [ 92.7118, 12.16137 ], [ 92.71222, 12.16293 ], [ 92.71314, 12.16392 ], [ 92.71491, 12.16655 ], [ 92.71707, 12.17246 ], [ 92.71816, 12.17452 ], [ 92.71791, 12.17608 ], [ 92.719, 12.17657 ], [ 92.72001, 12.17764 ], [ 92.7206, 12.17871 ], [ 92.7206, 12.17946 ], [ 92.7211, 12.17962 ], [ 92.72203, 12.17798 ], [ 92.72346, 12.17806 ], [ 92.72573, 12.17847 ], [ 92.72918, 12.18004 ], [ 92.73171, 12.18094 ], [ 92.73331, 12.18201 ], [ 92.73347, 12.18333 ], [ 92.73322, 12.18497 ], [ 92.73246, 12.18637 ], [ 92.73221, 12.18769 ], [ 92.73204, 12.189 ], [ 92.73204, 12.18999 ], [ 92.73212, 12.19073 ], [ 92.73179, 12.19188 ], [ 92.73069, 12.19246 ], [ 92.7296, 12.19188 ], [ 92.72881, 12.19128 ], [ 92.72573, 12.18836 ], [ 92.72459, 12.18831 ], [ 92.72359, 12.18915 ], [ 92.72278, 12.19058 ], [ 92.72269, 12.19193 ], [ 92.72217, 12.19299 ], [ 92.72183, 12.19452 ], [ 92.72226, 12.19554 ], [ 92.72283, 12.19652 ], [ 92.72283, 12.19781 ], [ 92.72335, 12.19979 ], [ 92.72383, 12.20188 ], [ 92.72316, 12.20257 ], [ 92.72226, 12.20452 ], [ 92.72226, 12.20466 ], [ 92.72288, 12.20549 ], [ 92.72378, 12.20656 ], [ 92.72397, 12.20767 ], [ 92.72363, 12.20878 ], [ 92.72359, 12.20939 ], [ 92.72363, 12.2098 ], [ 92.72373, 12.21031 ], [ 92.72363, 12.21101 ], [ 92.72306, 12.21226 ], [ 92.72268, 12.21411 ], [ 92.72282, 12.21444 ], [ 92.72254, 12.21555 ], [ 92.7224, 12.21634 ], [ 92.72249, 12.21731 ], [ 92.72292, 12.21805 ], [ 92.72377, 12.21916 ], [ 92.72472, 12.22028 ], [ 92.72486, 12.22102 ], [ 92.72476, 12.22195 ], [ 92.72415, 12.22302 ], [ 92.72343, 12.22343 ], [ 92.72334, 12.22404 ], [ 92.72305, 12.22714 ], [ 92.72225, 12.22881 ], [ 92.72248, 12.23117 ], [ 92.72248, 12.23215 ], [ 92.72234, 12.2328 ], [ 92.72267, 12.2334 ], [ 92.72348, 12.23405 ], [ 92.72448, 12.23451 ], [ 92.72476, 12.23521 ], [ 92.72471, 12.23562 ], [ 92.7249, 12.23613 ], [ 92.72538, 12.23641 ], [ 92.72514, 12.23734 ], [ 92.72514, 12.23822 ], [ 92.72523, 12.23882 ], [ 92.72542, 12.23966 ], [ 92.72575, 12.24026 ], [ 92.72618, 12.23998 ], [ 92.72661, 12.2398 ], [ 92.72723, 12.2398 ], [ 92.72775, 12.24012 ], [ 92.72855, 12.24035 ], [ 92.72912, 12.241 ], [ 92.72993, 12.24207 ], [ 92.73031, 12.24207 ], [ 92.73073, 12.24202 ], [ 92.73097, 12.24151 ], [ 92.73168, 12.24151 ], [ 92.73258, 12.2411 ], [ 92.73301, 12.24045 ], [ 92.7332, 12.23994 ], [ 92.73358, 12.23952 ], [ 92.7342, 12.23929 ], [ 92.73453, 12.23897 ], [ 92.73448, 12.23827 ], [ 92.73358, 12.23637 ], [ 92.73325, 12.23554 ], [ 92.73254, 12.23493 ], [ 92.73173, 12.23387 ], [ 92.73112, 12.23201 ], [ 92.73112, 12.23048 ], [ 92.7315, 12.22974 ], [ 92.73145, 12.22942 ], [ 92.73069, 12.22882 ], [ 92.73022, 12.22835 ], [ 92.73008, 12.22534 ], [ 92.73018, 12.22437 ], [ 92.73018, 12.22376 ], [ 92.72999, 12.22302 ], [ 92.73003, 12.22242 ], [ 92.73089, 12.22172 ], [ 92.73122, 12.22001 ], [ 92.73117, 12.21802 ], [ 92.7308, 12.21551 ], [ 92.73075, 12.21426 ], [ 92.7308, 12.21375 ], [ 92.73099, 12.21343 ], [ 92.73141, 12.21296 ], [ 92.73217, 12.21241 ], [ 92.73274, 12.21176 ], [ 92.73251, 12.21116 ], [ 92.73289, 12.21023 ], [ 92.73298, 12.20986 ], [ 92.73336, 12.20995 ], [ 92.73379, 12.21079 ], [ 92.73364, 12.21167 ], [ 92.73421, 12.2131 ], [ 92.7344, 12.21436 ], [ 92.73483, 12.21519 ], [ 92.73495, 12.21635 ], [ 92.73534, 12.2181 ], [ 92.73534, 12.21991 ], [ 92.73554, 12.22069 ], [ 92.73579, 12.22088 ], [ 92.73659, 12.22069 ], [ 92.73739, 12.22079 ], [ 92.73754, 12.22132 ], [ 92.73774, 12.22235 ], [ 92.73844, 12.22303 ], [ 92.73909, 12.22313 ], [ 92.73973, 12.22264 ], [ 92.74098, 12.22211 ], [ 92.74168, 12.22137 ], [ 92.74238, 12.22079 ], [ 92.74323, 12.2203 ], [ 92.74418, 12.22001 ], [ 92.74483, 12.22035 ], [ 92.74488, 12.22103 ], [ 92.74482, 12.22216 ], [ 92.74448, 12.22318 ], [ 92.74293, 12.22372 ], [ 92.74203, 12.2243 ], [ 92.74023, 12.22557 ], [ 92.73903, 12.22664 ], [ 92.73813, 12.22791 ], [ 92.73813, 12.22898 ], [ 92.73828, 12.22991 ], [ 92.73858, 12.23088 ], [ 92.73873, 12.23171 ], [ 92.73878, 12.23269 ], [ 92.73923, 12.23337 ], [ 92.73948, 12.23454 ], [ 92.73953, 12.23562 ], [ 92.73988, 12.23591 ], [ 92.74048, 12.23581 ], [ 92.74102, 12.23513 ], [ 92.74088, 12.23454 ], [ 92.74133, 12.23371 ], [ 92.74207, 12.23367 ], [ 92.74292, 12.23323 ], [ 92.74327, 12.23215 ], [ 92.74402, 12.23123 ], [ 92.74482, 12.22972 ], [ 92.74507, 12.22845 ], [ 92.74512, 12.22728 ], [ 92.74542, 12.22689 ], [ 92.74574, 12.22794 ], [ 92.74634, 12.22941 ], [ 92.74694, 12.23014 ], [ 92.74764, 12.23029 ], [ 92.74884, 12.23004 ], [ 92.75063, 12.22882 ], [ 92.75178, 12.22863 ], [ 92.75298, 12.22946 ], [ 92.75433, 12.23034 ], [ 92.75533, 12.22975 ], [ 92.75662, 12.22941 ], [ 92.75772, 12.2299 ], [ 92.75862, 12.22995 ], [ 92.75982, 12.22917 ], [ 92.76082, 12.22927 ], [ 92.76192, 12.22956 ], [ 92.76242, 12.22888 ], [ 92.76242, 12.22761 ], [ 92.76232, 12.22556 ], [ 92.76257, 12.22259 ], [ 92.76277, 12.22054 ], [ 92.76192, 12.21361 ], [ 92.76192, 12.21244 ], [ 92.76282, 12.21191 ], [ 92.76357, 12.21181 ], [ 92.76437, 12.21244 ], [ 92.76507, 12.21439 ], [ 92.76721, 12.22224 ], [ 92.76731, 12.22331 ], [ 92.76756, 12.22409 ], [ 92.76826, 12.22497 ], [ 92.76801, 12.22585 ], [ 92.76796, 12.22614 ], [ 92.76816, 12.22706 ], [ 92.76855, 12.22848 ], [ 92.77015, 12.22988 ], [ 92.77075, 12.23096 ], [ 92.77075, 12.23149 ], [ 92.7702, 12.23237 ], [ 92.76895, 12.2333 ], [ 92.7689, 12.23481 ], [ 92.7691, 12.23608 ], [ 92.7696, 12.23715 ], [ 92.7697, 12.23822 ], [ 92.7693, 12.23895 ], [ 92.7686, 12.23851 ], [ 92.7671, 12.23729 ], [ 92.76587, 12.23676 ], [ 92.76497, 12.23656 ], [ 92.76467, 12.23656 ], [ 92.76387, 12.23554 ], [ 92.76278, 12.23232 ], [ 92.76208, 12.23183 ], [ 92.76098, 12.23261 ], [ 92.75988, 12.23271 ], [ 92.75993, 12.23319 ], [ 92.76023, 12.23451 ], [ 92.76063, 12.23519 ], [ 92.76088, 12.23588 ], [ 92.76083, 12.23646 ], [ 92.76048, 12.23656 ], [ 92.75973, 12.23607 ], [ 92.75913, 12.2351 ], [ 92.75834, 12.23456 ], [ 92.75824, 12.23456 ], [ 92.75689, 12.23388 ], [ 92.75579, 12.23368 ], [ 92.75394, 12.23402 ], [ 92.75295, 12.23329 ], [ 92.75225, 12.23256 ], [ 92.75165, 12.23256 ], [ 92.75075, 12.23314 ], [ 92.7503, 12.23402 ], [ 92.75005, 12.23456 ], [ 92.74945, 12.2346 ], [ 92.7486, 12.23455 ], [ 92.748, 12.23485 ], [ 92.74775, 12.23568 ], [ 92.74795, 12.2368 ], [ 92.74845, 12.23851 ], [ 92.7486, 12.23948 ], [ 92.7486, 12.23973 ], [ 92.74905, 12.24104 ], [ 92.7487, 12.24236 ], [ 92.7481, 12.24348 ], [ 92.7476, 12.24526 ], [ 92.74705, 12.24574 ], [ 92.74615, 12.24628 ], [ 92.7454, 12.24628 ], [ 92.74435, 12.24613 ], [ 92.74385, 12.24565 ], [ 92.74305, 12.24472 ], [ 92.74251, 12.24457 ], [ 92.74226, 12.24486 ], [ 92.74216, 12.2453 ], [ 92.74275, 12.24599 ], [ 92.74325, 12.24696 ], [ 92.7433, 12.24716 ], [ 92.74345, 12.24867 ], [ 92.74335, 12.25003 ], [ 92.74405, 12.2514 ], [ 92.7454, 12.2536 ], [ 92.74619, 12.25599 ], [ 92.74783, 12.25989 ], [ 92.74888, 12.26223 ], [ 92.74873, 12.26335 ], [ 92.74843, 12.26408 ], [ 92.74818, 12.26511 ], [ 92.748221071428574, 12.26603 ], [ 92.74823, 12.26623 ], [ 92.74913, 12.26686 ], [ 92.75002, 12.26828 ], [ 92.75002, 12.2693 ], [ 92.74967, 12.27062 ], [ 92.74977, 12.27272 ], [ 92.75022, 12.27355 ], [ 92.75077, 12.27418 ], [ 92.75117, 12.27438 ], [ 92.75172, 12.27433 ], [ 92.75267, 12.27335 ], [ 92.75362, 12.2714 ], [ 92.75521, 12.27077 ], [ 92.75621, 12.26999 ], [ 92.75666, 12.26853 ], [ 92.75691, 12.26692 ], [ 92.75706, 12.26643 ], [ 92.75761, 12.26648 ], [ 92.75841, 12.26697 ], [ 92.75946, 12.26726 ], [ 92.76021, 12.26672 ], [ 92.76066, 12.26585 ], [ 92.760676326530614, 12.26583 ], [ 92.76106, 12.26536 ], [ 92.76201, 12.26516 ], [ 92.7627, 12.26463 ], [ 92.76325, 12.2636 ], [ 92.76385, 12.26346 ], [ 92.76455, 12.26365 ], [ 92.7654, 12.26458 ], [ 92.7659, 12.26546 ], [ 92.765915163934423, 12.26583 ], [ 92.765917944465158, 12.265897844950057 ], [ 92.765923360655734, 12.26603 ], [ 92.76595, 12.26668 ], [ 92.76635, 12.26736 ], [ 92.76715, 12.26819 ], [ 92.76835, 12.26938 ], [ 92.7689, 12.2703 ], [ 92.76949, 12.27089 ], [ 92.77074, 12.27118 ], [ 92.77149, 12.27191 ], [ 92.77189, 12.27328 ], [ 92.77299, 12.27484 ], [ 92.77379, 12.27587 ], [ 92.77523, 12.27611 ], [ 92.77623, 12.27645 ], [ 92.77733, 12.27836 ], [ 92.77858, 12.27992 ], [ 92.77903, 12.28105 ], [ 92.77942, 12.28246 ], [ 92.78017, 12.28378 ], [ 92.78117, 12.28431 ], [ 92.78197, 12.28529 ], [ 92.78197, 12.28675 ], [ 92.78057, 12.28709 ], [ 92.77937, 12.28812 ], [ 92.77952, 12.28934 ], [ 92.77937, 12.29046 ], [ 92.77867, 12.29129 ], [ 92.77782, 12.29173 ], [ 92.77652, 12.29178 ], [ 92.77553, 12.29241 ], [ 92.77468, 12.29353 ], [ 92.77454, 12.29422 ], [ 92.77502, 12.29464 ], [ 92.77584, 12.29464 ], [ 92.77724, 12.29493 ], [ 92.77752, 12.2954 ], [ 92.77752, 12.29629 ], [ 92.77743, 12.297 ], [ 92.77709, 12.29747 ], [ 92.77598, 12.29926 ], [ 92.77588, 12.29996 ], [ 92.77608, 12.30058 ], [ 92.77559, 12.30105 ], [ 92.77444, 12.30161 ], [ 92.77304, 12.30204 ], [ 92.77256, 12.3018 ], [ 92.77213, 12.30043 ], [ 92.77198, 12.29935 ], [ 92.77131, 12.29846 ], [ 92.77107, 12.2977 ], [ 92.76991, 12.29718 ], [ 92.76904, 12.29756 ], [ 92.76861, 12.29751 ], [ 92.7676, 12.29728 ], [ 92.76755, 12.2978 ], [ 92.76851, 12.30001 ], [ 92.76827, 12.3017 ], [ 92.76899, 12.30297 ], [ 92.76943, 12.30415 ], [ 92.76976, 12.30547 ], [ 92.76942, 12.30684 ], [ 92.76933, 12.30787 ], [ 92.76653, 12.30928 ], [ 92.76624, 12.30698 ], [ 92.76562, 12.30495 ], [ 92.76533, 12.30387 ], [ 92.76446, 12.30335 ], [ 92.76369, 12.30354 ], [ 92.76317, 12.30473 ], [ 92.76331, 12.30613 ], [ 92.7636, 12.30805 ], [ 92.76431, 12.31182 ], [ 92.76393, 12.31234 ], [ 92.76316, 12.31178 ], [ 92.76264, 12.3108 ], [ 92.76183, 12.30818 ], [ 92.76073, 12.30664 ], [ 92.7583, 12.30436 ], [ 92.75744, 12.30319 ], [ 92.75725, 12.30212 ], [ 92.75725, 12.301 ], [ 92.75744, 12.30021 ], [ 92.75792, 12.29899 ], [ 92.75798, 12.29798 ], [ 92.75615, 12.29658 ], [ 92.75489, 12.29598 ], [ 92.75342, 12.29598 ], [ 92.75298, 12.2967 ], [ 92.75077, 12.29851 ], [ 92.74912, 12.29978 ], [ 92.74794, 12.30025 ], [ 92.74716, 12.3002 ], [ 92.74642, 12.29969 ], [ 92.7456, 12.29948 ], [ 92.74443, 12.29986 ], [ 92.7433, 12.30054 ], [ 92.74312, 12.3013 ], [ 92.74282, 12.30181 ], [ 92.74217, 12.30186 ], [ 92.74039, 12.30139 ], [ 92.73843, 12.3013 ], [ 92.73713, 12.301 ], [ 92.73622, 12.30088 ], [ 92.73548, 12.30109 ], [ 92.73483, 12.30189 ], [ 92.73374, 12.30211 ], [ 92.73265, 12.30211 ], [ 92.73178, 12.30189 ], [ 92.73126, 12.30227 ], [ 92.73079, 12.30278 ], [ 92.73009, 12.30334 ], [ 92.72948, 12.30316 ], [ 92.72818, 12.30266 ], [ 92.7274, 12.3021 ], [ 92.72649, 12.3021 ], [ 92.72588, 12.30223 ], [ 92.72497, 12.30223 ], [ 92.7247, 12.3027 ], [ 92.72397, 12.30291 ], [ 92.7234, 12.30257 ], [ 92.72193, 12.30066 ], [ 92.72101, 12.30019 ], [ 92.72032, 12.3002 ], [ 92.71986, 12.30042 ], [ 92.71937, 12.30112 ], [ 92.71874, 12.30127 ], [ 92.71855, 12.30174 ], [ 92.71862, 12.30211 ], [ 92.71904, 12.30252 ], [ 92.71964, 12.30274 ], [ 92.7199, 12.30318 ], [ 92.71964, 12.3038 ], [ 92.71779, 12.30663 ], [ 92.7173, 12.30806 ], [ 92.71693, 12.30895 ], [ 92.71647, 12.30935 ], [ 92.71598, 12.31115 ], [ 92.71572, 12.31188 ], [ 92.71523, 12.31233 ], [ 92.71448, 12.31284 ], [ 92.71354, 12.31284 ], [ 92.71312, 12.31269 ], [ 92.71279, 12.3124 ], [ 92.71271, 12.3121 ], [ 92.71267, 12.31174 ], [ 92.71241, 12.31148 ], [ 92.71185, 12.3114 ], [ 92.71173, 12.31118 ], [ 92.71151, 12.31067 ], [ 92.7114, 12.31015 ], [ 92.71113, 12.31012 ], [ 92.71057, 12.31078 ], [ 92.70941, 12.31453 ], [ 92.70889, 12.31567 ], [ 92.7084, 12.31629 ], [ 92.70768, 12.31938 ], [ 92.70764, 12.32081 ], [ 92.70772, 12.32217 ], [ 92.70749, 12.32294 ], [ 92.70741, 12.32401 ], [ 92.70749, 12.32467 ], [ 92.70779, 12.32467 ], [ 92.70854, 12.32504 ], [ 92.70907, 12.3257 ], [ 92.70919, 12.32699 ], [ 92.70908, 12.32802 ], [ 92.70874, 12.32879 ], [ 92.70825, 12.3293 ], [ 92.70723, 12.32971 ], [ 92.70614, 12.33052 ], [ 92.70498, 12.33077 ], [ 92.70422, 12.33059 ], [ 92.7037, 12.33029 ], [ 92.70313, 12.32952 ], [ 92.70306, 12.32879 ], [ 92.70287, 12.32787 ], [ 92.70253, 12.32739 ], [ 92.70197, 12.32699 ], [ 92.70114, 12.3268 ], [ 92.70035, 12.32691 ], [ 92.70035, 12.32724 ], [ 92.69998, 12.32787 ], [ 92.69994, 12.32845 ], [ 92.70028, 12.32897 ], [ 92.70012, 12.32945 ], [ 92.69971, 12.33 ], [ 92.69982, 12.33088 ], [ 92.70069, 12.3325 ], [ 92.70102, 12.33356 ], [ 92.7008, 12.33662 ], [ 92.70083, 12.3382 ], [ 92.70095, 12.33971 ], [ 92.70094, 12.34103 ], [ 92.70113, 12.34276 ], [ 92.70117, 12.34361 ], [ 92.70109, 12.3446 ], [ 92.70143, 12.34662 ], [ 92.70139, 12.3499 ], [ 92.70116, 12.35159 ], [ 92.70082, 12.3535 ], [ 92.70105, 12.35467 ], [ 92.70154, 12.35603 ], [ 92.70161, 12.35794 ], [ 92.70138, 12.36011 ], [ 92.70127, 12.3614 ], [ 92.7004, 12.36301 ], [ 92.70006, 12.36445 ], [ 92.7001, 12.36573 ], [ 92.70017, 12.36658 ], [ 92.70085, 12.36834 ], [ 92.70138, 12.36877 ], [ 92.70311, 12.3683 ], [ 92.7039, 12.36826 ], [ 92.70465, 12.36852 ], [ 92.70548, 12.3694 ], [ 92.70578, 12.37032 ], [ 92.70574, 12.37113 ], [ 92.70544, 12.37179 ], [ 92.70457, 12.37249 ], [ 92.70374, 12.37359 ], [ 92.70318, 12.37462 ], [ 92.70314, 12.3755 ], [ 92.70393, 12.37675 ], [ 92.70419, 12.37741 ], [ 92.70389, 12.37826 ], [ 92.70314, 12.37921 ], [ 92.70129, 12.37917 ], [ 92.70028, 12.37888 ], [ 92.69979, 12.37903 ], [ 92.69949, 12.38002 ], [ 92.69948, 12.3841 ], [ 92.69914, 12.38601 ], [ 92.69881, 12.38748 ], [ 92.69839, 12.38917 ], [ 92.69854, 12.39209 ], [ 92.69857, 12.39444 ], [ 92.69853, 12.39779 ], [ 92.69838, 12.3994 ], [ 92.69868, 12.40203 ], [ 92.69894, 12.40325 ], [ 92.69936, 12.4045 ], [ 92.7006, 12.40758 ], [ 92.70078, 12.40883 ], [ 92.70071, 12.40979 ], [ 92.69977, 12.41265 ], [ 92.69944, 12.4152 ], [ 92.69944, 12.41612 ], [ 92.6993, 12.41731 ], [ 92.69869, 12.41857 ], [ 92.69846, 12.41921 ], [ 92.69843, 12.41972 ], [ 92.69843, 12.42081 ], [ 92.69869, 12.42122 ], [ 92.69878, 12.42157 ], [ 92.69877, 12.42253 ], [ 92.69888, 12.42314 ], [ 92.69888, 12.42376 ], [ 92.69884, 12.42424 ], [ 92.6986, 12.42566 ], [ 92.6987, 12.42596 ], [ 92.69897, 12.42625 ], [ 92.69909, 12.42655 ], [ 92.69909, 12.42692 ], [ 92.69913, 12.42713 ], [ 92.69927, 12.4272 ], [ 92.69933, 12.42702 ], [ 92.69951, 12.42688 ], [ 92.69969, 12.42689 ], [ 92.69999, 12.42717 ], [ 92.70036, 12.42758 ], [ 92.7006, 12.42818 ], [ 92.70076, 12.42901 ], [ 92.70081, 12.42963 ], [ 92.70123, 12.43156 ], [ 92.70167, 12.43248 ], [ 92.7021, 12.43318 ], [ 92.70265, 12.43397 ], [ 92.70291, 12.43454 ], [ 92.70296, 12.43484 ], [ 92.70291, 12.43513 ], [ 92.70278, 12.43547 ], [ 92.70282, 12.43579 ], [ 92.70323, 12.43697 ], [ 92.70332, 12.43776 ], [ 92.70333, 12.4382 ], [ 92.70323, 12.4393 ], [ 92.70313, 12.43973 ], [ 92.70294, 12.44033 ], [ 92.70276, 12.4411 ], [ 92.70249, 12.44171 ], [ 92.70219, 12.44268 ], [ 92.70204, 12.44352 ], [ 92.70197, 12.44412 ], [ 92.70215, 12.4446 ], [ 92.70226, 12.44503 ], [ 92.70227, 12.44627 ], [ 92.70229, 12.4465 ], [ 92.70244, 12.44677 ], [ 92.70254, 12.44701 ], [ 92.70254, 12.4472 ], [ 92.70244, 12.44742 ], [ 92.70237, 12.44788 ], [ 92.7025, 12.44808 ], [ 92.70273, 12.44821 ], [ 92.70307, 12.44778 ], [ 92.70298, 12.44727 ], [ 92.70298, 12.44704 ], [ 92.70321, 12.44706 ], [ 92.70339, 12.44726 ], [ 92.70357, 12.44722 ], [ 92.70384, 12.44703 ], [ 92.70412, 12.44674 ], [ 92.70431, 12.44691 ], [ 92.70452, 12.44725 ], [ 92.70457, 12.44753 ], [ 92.70469, 12.44784 ], [ 92.70521, 12.44853 ], [ 92.70528, 12.44886 ], [ 92.70542, 12.44912 ], [ 92.70569, 12.44939 ], [ 92.70621, 12.44975 ], [ 92.70648, 12.45007 ], [ 92.70648, 12.45011 ], [ 92.70678, 12.4508 ], [ 92.70694, 12.45123 ], [ 92.70697, 12.45159 ], [ 92.70684, 12.45194 ], [ 92.70663, 12.45221 ], [ 92.70635, 12.45249 ], [ 92.7061, 12.4529 ], [ 92.70597, 12.45442 ], [ 92.70582, 12.45537 ], [ 92.70578, 12.45608 ], [ 92.70533, 12.45716 ], [ 92.70509, 12.45764 ], [ 92.70469, 12.45819 ], [ 92.70437, 12.45852 ], [ 92.7041, 12.45872 ], [ 92.7038, 12.45873 ], [ 92.70339, 12.45859 ], [ 92.70308, 12.45852 ], [ 92.70292, 12.45852 ], [ 92.70284, 12.45866 ], [ 92.7028, 12.45917 ], [ 92.70284, 12.4594 ], [ 92.70262, 12.45954 ], [ 92.70251, 12.45971 ], [ 92.70251, 12.46014 ], [ 92.70258, 12.46023 ], [ 92.70282, 12.46022 ], [ 92.70303, 12.4604 ], [ 92.70319, 12.46074 ], [ 92.70319, 12.4611 ], [ 92.70311, 12.4614 ], [ 92.70278, 12.462 ], [ 92.70266, 12.46234 ], [ 92.70258, 12.46284 ], [ 92.7024, 12.46342 ], [ 92.70224, 12.46349 ], [ 92.70203, 12.4634 ], [ 92.7018, 12.46356 ], [ 92.70179, 12.46383 ], [ 92.70187, 12.46409 ], [ 92.70205, 12.46433 ], [ 92.70215, 12.46456 ], [ 92.7021, 12.46491 ], [ 92.70166, 12.46562 ], [ 92.70115, 12.46617 ], [ 92.70077, 12.46638 ], [ 92.70042, 12.46652 ], [ 92.7, 12.46652 ], [ 92.69972, 12.46655 ], [ 92.69953, 12.46662 ], [ 92.69946, 12.4668 ], [ 92.6993, 12.46769 ], [ 92.6992, 12.46792 ], [ 92.69919, 12.46812 ], [ 92.69939, 12.46828 ], [ 92.70005, 12.46853 ], [ 92.70069, 12.46882 ], [ 92.70091, 12.4691 ], [ 92.70124, 12.47016 ], [ 92.70156, 12.47136 ], [ 92.70176, 12.47195 ], [ 92.70194, 12.4728 ], [ 92.70207, 12.47364 ], [ 92.70232, 12.47395 ], [ 92.70245, 12.47427 ], [ 92.70229, 12.47519 ], [ 92.7023, 12.47585 ], [ 92.70246, 12.47615 ], [ 92.70297, 12.47785 ], [ 92.70345, 12.48077 ], [ 92.70349, 12.48211 ], [ 92.70364, 12.48295 ], [ 92.70367, 12.48351 ], [ 92.70367, 12.48417 ], [ 92.70358, 12.48483 ], [ 92.7035, 12.48516 ], [ 92.70354, 12.48541 ], [ 92.70368, 12.48557 ], [ 92.70391, 12.48549 ], [ 92.70423, 12.48562 ], [ 92.70473, 12.48613 ], [ 92.70505, 12.48639 ], [ 92.70536, 12.48643 ], [ 92.70559, 12.48634 ], [ 92.70586, 12.48641 ], [ 92.70615, 12.48674 ], [ 92.70706, 12.48955 ], [ 92.70743, 12.49173 ], [ 92.70743, 12.4938 ], [ 92.70724, 12.49598 ], [ 92.70686, 12.49669 ], [ 92.70639, 12.49694 ], [ 92.7058, 12.49749 ], [ 92.70528, 12.4988 ], [ 92.70498, 12.49909 ], [ 92.7046, 12.49916 ], [ 92.70422, 12.49912 ], [ 92.70362, 12.49881 ], [ 92.7031, 12.49848 ], [ 92.70298, 12.49822 ], [ 92.70278, 12.49809 ], [ 92.70232, 12.49791 ], [ 92.70221, 12.49799 ], [ 92.70227, 12.49813 ], [ 92.70254, 12.4982 ], [ 92.7026, 12.49838 ], [ 92.7026, 12.49866 ], [ 92.70236, 12.49898 ], [ 92.70214, 12.49948 ], [ 92.70195, 12.49977 ], [ 92.70187, 12.49998 ], [ 92.70168, 12.49997 ], [ 92.70137, 12.50026 ], [ 92.70125, 12.5007 ], [ 92.7014, 12.502 ], [ 92.70142, 12.50237 ], [ 92.70151, 12.50285 ], [ 92.70168, 12.50331 ], [ 92.70161, 12.5038 ], [ 92.70161, 12.50508 ], [ 92.70169, 12.5055 ], [ 92.70167, 12.50604 ], [ 92.7016, 12.50646 ], [ 92.70162, 12.50714 ], [ 92.70189, 12.50738 ], [ 92.70201, 12.50763 ], [ 92.70201, 12.50776 ], [ 92.70183, 12.50871 ], [ 92.70183, 12.50963 ], [ 92.7018, 12.51014 ], [ 92.70164, 12.51055 ], [ 92.70131, 12.51108 ], [ 92.70035, 12.51176 ], [ 92.69951, 12.51212 ], [ 92.69884, 12.51223 ], [ 92.69829, 12.51218 ], [ 92.69754, 12.51205 ], [ 92.69689, 12.51211 ], [ 92.69631, 12.51223 ], [ 92.69586, 12.51247 ], [ 92.69551, 12.51276 ], [ 92.69516, 12.51326 ], [ 92.69446, 12.51447 ], [ 92.69419, 12.51551 ], [ 92.69433, 12.51582 ], [ 92.69469, 12.51596 ], [ 92.6951, 12.51625 ], [ 92.69532, 12.51647 ], [ 92.69536, 12.51702 ], [ 92.69506, 12.51828 ], [ 92.69496, 12.51888 ], [ 92.69506, 12.51939 ], [ 92.69533, 12.51973 ], [ 92.69598, 12.52044 ], [ 92.69646, 12.52107 ], [ 92.69704, 12.52208 ], [ 92.69743, 12.52292 ], [ 92.69762, 12.52411 ], [ 92.69762, 12.52479 ], [ 92.69777, 12.52577 ], [ 92.69815, 12.52654 ], [ 92.69832, 12.5272 ], [ 92.69874, 12.52764 ], [ 92.69921, 12.52803 ], [ 92.69944, 12.52819 ], [ 92.69949, 12.52819 ], [ 92.69967, 12.52812 ], [ 92.69975, 12.52795 ], [ 92.69962, 12.52775 ], [ 92.69965, 12.5275 ], [ 92.69942, 12.52704 ], [ 92.69867, 12.52514 ], [ 92.69864, 12.52459 ], [ 92.69897, 12.52367 ], [ 92.69906, 12.52352 ], [ 92.69926, 12.52343 ], [ 92.69942, 12.52343 ], [ 92.69955, 12.52354 ], [ 92.69949, 12.52377 ], [ 92.69935, 12.52408 ], [ 92.69922, 12.52473 ], [ 92.69918, 12.52522 ], [ 92.6994, 12.52537 ], [ 92.69966, 12.52527 ], [ 92.69988, 12.52532 ], [ 92.70011, 12.52572 ], [ 92.70044, 12.52715 ], [ 92.70044, 12.52783 ], [ 92.70037, 12.52809 ], [ 92.70023, 12.5283 ], [ 92.70011, 12.52837 ], [ 92.69991, 12.52827 ], [ 92.69985, 12.52842 ], [ 92.69986183098591, 12.52863 ], [ 92.69989, 12.52913 ], [ 92.69987, 12.53129 ], [ 92.70025, 12.53205 ], [ 92.70033, 12.53308 ], [ 92.70033, 12.53396 ], [ 92.70013, 12.53465 ], [ 92.70011, 12.53498 ], [ 92.69962, 12.53545 ], [ 92.69955, 12.53662 ], [ 92.69935, 12.53776 ], [ 92.69891, 12.53913 ], [ 92.69891, 12.53972 ], [ 92.69947, 12.54041 ], [ 92.70013, 12.54191 ], [ 92.70032, 12.54253 ], [ 92.70022, 12.54348 ], [ 92.7002, 12.54438 ], [ 92.70037, 12.54505 ], [ 92.701, 12.54576 ], [ 92.70149, 12.54614 ], [ 92.70178, 12.54617 ], [ 92.702, 12.5459 ], [ 92.70256, 12.54586 ], [ 92.70324, 12.54628 ], [ 92.70351, 12.54671 ], [ 92.70351, 12.54735 ], [ 92.70329, 12.54775 ], [ 92.70348, 12.54822 ], [ 92.70489, 12.54996 ], [ 92.70655, 12.55246 ], [ 92.7074, 12.5536 ], [ 92.70781, 12.55433 ], [ 92.70835, 12.55545 ], [ 92.70854, 12.55569 ], [ 92.70869, 12.55667 ], [ 92.70888, 12.5574 ], [ 92.70896, 12.55809 ], [ 92.70895, 12.55878 ], [ 92.70871, 12.55945 ], [ 92.70837, 12.55992 ], [ 92.7081, 12.56052 ], [ 92.70808, 12.56116 ], [ 92.70798, 12.56163 ], [ 92.70761, 12.56194 ], [ 92.70732, 12.56239 ], [ 92.70713, 12.56289 ], [ 92.70671, 12.56317 ], [ 92.70605, 12.56403 ], [ 92.70557, 12.56538 ], [ 92.70556, 12.56667 ], [ 92.70564, 12.56923 ], [ 92.70615, 12.57004 ], [ 92.70688, 12.57027 ], [ 92.70775, 12.57047 ], [ 92.70814, 12.57077 ], [ 92.70899, 12.5722 ], [ 92.70899, 12.57268 ], [ 92.70865, 12.5731 ], [ 92.70792, 12.57348 ], [ 92.70785, 12.57377 ], [ 92.70795, 12.57439 ], [ 92.70841, 12.57484 ], [ 92.70899, 12.57534 ], [ 92.70924, 12.57574 ], [ 92.70924, 12.5761 ], [ 92.70858, 12.57689 ], [ 92.70714, 12.57769 ], [ 92.70653, 12.57777 ], [ 92.70565, 12.57819 ], [ 92.70529, 12.57886 ], [ 92.70526, 12.5791 ], [ 92.70548, 12.57924 ], [ 92.70585, 12.57917 ], [ 92.70616, 12.57891 ], [ 92.70629, 12.57917 ], [ 92.70582, 12.57998 ], [ 92.70575, 12.58052 ], [ 92.70626, 12.581 ], [ 92.7066, 12.58152 ], [ 92.70697, 12.58193 ], [ 92.70716, 12.58233 ], [ 92.70711, 12.58335 ], [ 92.70697, 12.58411 ], [ 92.70738, 12.58521 ], [ 92.70726, 12.58573 ], [ 92.70667, 12.5864 ], [ 92.7064, 12.58661 ], [ 92.70577, 12.58632 ], [ 92.70531, 12.58599 ], [ 92.70499, 12.58594 ], [ 92.70467, 12.58621 ], [ 92.70438, 12.58789 ], [ 92.70423, 12.58946 ], [ 92.70435, 12.59001 ], [ 92.70457, 12.59022 ], [ 92.70543, 12.59051 ], [ 92.70577, 12.59089 ], [ 92.70611, 12.5916 ], [ 92.70647, 12.59222 ], [ 92.70679, 12.59258 ], [ 92.7072, 12.5927 ], [ 92.70749, 12.59306 ], [ 92.70715, 12.59389 ], [ 92.70723, 12.59443 ], [ 92.70742, 12.59481 ], [ 92.7073, 12.59531 ], [ 92.70713, 12.59555 ], [ 92.70715, 12.59624 ], [ 92.70705, 12.5966 ], [ 92.70674, 12.59702 ], [ 92.7064, 12.59724 ], [ 92.70563, 12.59717 ], [ 92.70487, 12.59707 ], [ 92.70414, 12.59714 ], [ 92.70339, 12.59743 ], [ 92.70297, 12.598 ], [ 92.70265, 12.59876 ], [ 92.70236, 12.59959 ], [ 92.70173, 12.60009 ], [ 92.70105, 12.60029 ], [ 92.69873, 12.60016 ], [ 92.69775, 12.59872 ], [ 92.69747, 12.59591 ], [ 92.69675, 12.59384 ], [ 92.69638, 12.5934 ], [ 92.69603, 12.59284 ], [ 92.69561, 12.59233 ], [ 92.69524, 12.59167 ], [ 92.69496, 12.59092 ], [ 92.69454, 12.59036 ], [ 92.69417, 12.59029 ], [ 92.69379, 12.59046 ], [ 92.6936, 12.59085 ], [ 92.69317, 12.59107 ], [ 92.69277, 12.5909 ], [ 92.69213, 12.59034 ], [ 92.69101, 12.58919 ], [ 92.69049, 12.58917 ], [ 92.68964, 12.58956 ], [ 92.68909, 12.5899 ], [ 92.68884, 12.5905 ], [ 92.68852, 12.59114 ], [ 92.68852, 12.59157 ], [ 92.68894, 12.59206 ], [ 92.68896, 12.59233 ], [ 92.68797, 12.59235 ], [ 92.6877, 12.59262 ], [ 92.68824, 12.59352 ], [ 92.68879, 12.59417 ], [ 92.68966, 12.59485 ], [ 92.69058, 12.59546 ], [ 92.69118, 12.59626 ], [ 92.69128, 12.59706 ], [ 92.69125, 12.5976 ], [ 92.6907, 12.59806 ], [ 92.68994, 12.59843 ], [ 92.68932, 12.59843 ], [ 92.6885, 12.59819 ], [ 92.68783, 12.59768 ], [ 92.68748, 12.5971 ], [ 92.68768, 12.59647 ], [ 92.6875, 12.59562 ], [ 92.68678, 12.59452 ], [ 92.68626, 12.59334 ], [ 92.6859, 12.59283 ], [ 92.68598, 12.59267 ], [ 92.68598, 12.59246 ], [ 92.68586, 12.5921 ], [ 92.68568, 12.59183 ], [ 92.6857, 12.5916 ], [ 92.68625, 12.59152 ], [ 92.68635, 12.59134 ], [ 92.68625, 12.59108 ], [ 92.68602, 12.5907 ], [ 92.68585, 12.59036 ], [ 92.68517, 12.58991 ], [ 92.68429, 12.58911 ], [ 92.68415, 12.58875 ], [ 92.6842, 12.58844 ], [ 92.68459, 12.58822 ], [ 92.68539, 12.58806 ], [ 92.68597, 12.58812 ], [ 92.68679, 12.58801 ], [ 92.68724, 12.58785 ], [ 92.68757, 12.58765 ], [ 92.68764, 12.5875 ], [ 92.68747, 12.58731 ], [ 92.68735, 12.58695 ], [ 92.68714, 12.58654 ], [ 92.68684, 12.58622 ], [ 92.68657, 12.5858 ], [ 92.68624, 12.58545 ], [ 92.68577, 12.58529 ], [ 92.68429, 12.58529 ], [ 92.68266, 12.58485 ], [ 92.68227, 12.58461 ], [ 92.68214, 12.58435 ], [ 92.68181, 12.58386 ], [ 92.68154, 12.58357 ], [ 92.68129, 12.58352 ], [ 92.68093, 12.58365 ], [ 92.68031, 12.58413 ], [ 92.67974, 12.58486 ], [ 92.67952, 12.58548 ], [ 92.67944, 12.58603 ], [ 92.67929, 12.58651 ], [ 92.67947, 12.58695 ], [ 92.67914, 12.58799 ], [ 92.67911, 12.58868 ], [ 92.67922, 12.58958 ], [ 92.67949, 12.59059 ], [ 92.68014, 12.59273 ], [ 92.68035, 12.5938 ], [ 92.68062, 12.59461 ], [ 92.68197, 12.59895 ], [ 92.6828, 12.60136 ], [ 92.68373, 12.60526 ], [ 92.6845, 12.61052 ], [ 92.68507, 12.61387 ], [ 92.68522, 12.61509 ], [ 92.68518, 12.61584 ], [ 92.6852, 12.61631 ], [ 92.68541, 12.61686 ], [ 92.68578, 12.61759 ], [ 92.68613, 12.61808 ], [ 92.68645, 12.61829 ], [ 92.68668, 12.61829 ], [ 92.68681, 12.61816 ], [ 92.68693, 12.6179 ], [ 92.68708, 12.6174 ], [ 92.6878, 12.6165 ], [ 92.68801, 12.6161 ], [ 92.68781, 12.61515 ], [ 92.6878, 12.61403 ], [ 92.68815, 12.61285 ], [ 92.68907, 12.60995 ], [ 92.68922, 12.60931 ], [ 92.68957, 12.60888 ], [ 92.6904, 12.60839 ], [ 92.69066, 12.60812 ], [ 92.69094, 12.6075 ], [ 92.69158, 12.60738 ], [ 92.69194, 12.60715 ], [ 92.6927, 12.60731 ], [ 92.69315, 12.60747 ], [ 92.69352, 12.60745 ], [ 92.69372, 12.60729 ], [ 92.69392, 12.60709 ], [ 92.69436, 12.60683 ], [ 92.69463, 12.60681 ], [ 92.69572, 12.60736 ], [ 92.69678, 12.6083 ], [ 92.69785, 12.60932 ], [ 92.69816, 12.60957 ], [ 92.6985, 12.60971 ], [ 92.69932, 12.61085 ], [ 92.70025, 12.61185 ], [ 92.70067, 12.61254 ], [ 92.70098, 12.61266 ], [ 92.70125, 12.61257 ], [ 92.70172, 12.61227 ], [ 92.70203, 12.61233 ], [ 92.70236, 12.61274 ], [ 92.70254, 12.61272 ], [ 92.70321, 12.61193 ], [ 92.70336, 12.61162 ], [ 92.70336, 12.61047 ], [ 92.70327, 12.60972 ], [ 92.70301, 12.60917 ], [ 92.70296, 12.60867 ], [ 92.70296, 12.60827 ], [ 92.70307, 12.6077 ], [ 92.70334, 12.607 ], [ 92.70342, 12.60635 ], [ 92.70342, 12.60537 ], [ 92.70354, 12.60528 ], [ 92.70376, 12.60546 ], [ 92.70441, 12.60666 ], [ 92.70474, 12.60756 ], [ 92.70499, 12.60808 ], [ 92.70534, 12.60842 ], [ 92.70568, 12.6089 ], [ 92.70607, 12.60939 ], [ 92.70658, 12.61026 ], [ 92.70656, 12.6106 ], [ 92.70672, 12.61097 ], [ 92.70685, 12.61144 ], [ 92.70683, 12.61169 ], [ 92.70683, 12.61264 ], [ 92.70686, 12.61328 ], [ 92.70708, 12.61388 ], [ 92.70751, 12.61467 ], [ 92.70795, 12.61493 ], [ 92.70931, 12.61543 ], [ 92.70957, 12.61545 ], [ 92.70982, 12.61534 ], [ 92.71008, 12.61511 ], [ 92.71028, 12.61518 ], [ 92.71064, 12.6163 ], [ 92.71046, 12.61689 ], [ 92.71046, 12.61746 ], [ 92.71042, 12.61818 ], [ 92.71044, 12.61904 ], [ 92.71036, 12.61941 ], [ 92.7104, 12.61969 ], [ 92.71058, 12.61985 ], [ 92.71093, 12.61994 ], [ 92.71149, 12.62065 ], [ 92.71187, 12.62124 ], [ 92.71221, 12.62211 ], [ 92.71239, 12.62273 ], [ 92.71247, 12.62343 ], [ 92.71233, 12.62414 ], [ 92.71244, 12.6255 ], [ 92.71238, 12.62572 ], [ 92.71194, 12.62619 ], [ 92.71177, 12.6266 ], [ 92.71201, 12.62698 ], [ 92.71264, 12.62722 ], [ 92.7137, 12.62834 ], [ 92.7139, 12.62903 ], [ 92.71392, 12.62959 ], [ 92.71372, 12.63002 ], [ 92.71392, 12.63053 ], [ 92.71445, 12.63148 ], [ 92.71451, 12.63173 ], [ 92.71484, 12.63247 ], [ 92.71506, 12.63282 ], [ 92.71499, 12.63316 ], [ 92.71488, 12.63349 ], [ 92.71484, 12.63449 ], [ 92.7153, 12.63631 ], [ 92.71563, 12.63863 ], [ 92.71587, 12.63961 ], [ 92.71584, 12.64009 ], [ 92.71567, 12.6404 ], [ 92.71534, 12.64051 ], [ 92.71511, 12.64067 ], [ 92.71513, 12.64092 ], [ 92.71528, 12.64134 ], [ 92.71528, 12.6417 ], [ 92.71521, 12.6421 ], [ 92.71511, 12.64248 ], [ 92.71491, 12.64268 ], [ 92.71474, 12.64293 ], [ 92.71487, 12.64324 ], [ 92.71509, 12.64356 ], [ 92.71557, 12.64396 ], [ 92.71585, 12.64445 ], [ 92.71613, 12.64443 ], [ 92.71646, 12.64353 ], [ 92.7168, 12.64315 ], [ 92.71704, 12.64297 ], [ 92.71754, 12.64302 ], [ 92.71811, 12.64302 ], [ 92.71839, 12.64311 ], [ 92.71873, 12.64347 ], [ 92.71888, 12.64376 ], [ 92.71889, 12.64423 ], [ 92.71902, 12.64425 ], [ 92.71932, 12.64393 ], [ 92.71962, 12.64344 ], [ 92.71956, 12.64185 ], [ 92.71934, 12.64008 ], [ 92.71908, 12.63823 ], [ 92.71944, 12.63739 ], [ 92.71982, 12.63672 ], [ 92.72029, 12.63618 ], [ 92.72066, 12.6359 ], [ 92.7209, 12.63565 ], [ 92.72086, 12.63542 ], [ 92.7207, 12.63511 ], [ 92.72062, 12.63415 ], [ 92.72075, 12.6329 ], [ 92.7214, 12.63147 ], [ 92.72196, 12.63062 ], [ 92.72216, 12.63019 ], [ 92.72216, 12.6295 ], [ 92.72228, 12.6293 ], [ 92.72237, 12.629 ], [ 92.72196, 12.62835 ], [ 92.72257, 12.62721 ], [ 92.72303, 12.62695 ], [ 92.72345, 12.6265 ], [ 92.72375, 12.62582 ], [ 92.72394, 12.62551 ], [ 92.72427, 12.6256 ], [ 92.72453, 12.62574 ], [ 92.72486, 12.62601 ], [ 92.72499, 12.62656 ], [ 92.72529, 12.62734 ], [ 92.72536, 12.62784 ], [ 92.72562, 12.62822 ], [ 92.72612, 12.62943 ], [ 92.72616, 12.63031 ], [ 92.7263, 12.63122 ], [ 92.72632, 12.63201 ], [ 92.72647, 12.63263 ], [ 92.7266, 12.63301 ], [ 92.7268, 12.63324 ], [ 92.72714, 12.63355 ], [ 92.72704, 12.63386 ], [ 92.7271, 12.63438 ], [ 92.72754, 12.63471 ], [ 92.72801, 12.63494 ], [ 92.72823, 12.63586 ], [ 92.72858, 12.63597 ], [ 92.72914, 12.63576 ], [ 92.72964, 12.63563 ], [ 92.7299, 12.63579 ], [ 92.73005, 12.63609 ], [ 92.73024, 12.63629 ], [ 92.73075, 12.63654 ], [ 92.73169, 12.63685 ], [ 92.73245, 12.63715 ], [ 92.73392, 12.63798 ], [ 92.73475, 12.63866 ], [ 92.73559, 12.6394 ], [ 92.73591, 12.63979 ], [ 92.73616, 12.64035 ], [ 92.73623, 12.64074 ], [ 92.73621, 12.64105 ], [ 92.73596, 12.64155 ], [ 92.73572, 12.64186 ], [ 92.73551, 12.64204 ], [ 92.73526, 12.64219 ], [ 92.7352, 12.64228 ], [ 92.7352, 12.64246 ], [ 92.73529, 12.64288 ], [ 92.73554, 12.64345 ], [ 92.73536, 12.64381 ], [ 92.73527, 12.64406 ], [ 92.73534, 12.64493 ], [ 92.73532, 12.64521 ], [ 92.73516, 12.64595 ], [ 92.73491, 12.64636 ], [ 92.73473, 12.6466 ], [ 92.73469, 12.64674 ], [ 92.73474, 12.64722 ], [ 92.73464, 12.64754 ], [ 92.73454, 12.64768 ], [ 92.73426, 12.64782 ], [ 92.73389, 12.64795 ], [ 92.73374, 12.64815 ], [ 92.7337, 12.64834 ], [ 92.73386, 12.64857 ], [ 92.73401, 12.64887 ], [ 92.73413, 12.64926 ], [ 92.73388, 12.64986 ], [ 92.7335, 12.65049 ], [ 92.73361, 12.65065 ], [ 92.73363, 12.6508 ], [ 92.73354, 12.65114 ], [ 92.73312, 12.65188 ], [ 92.73291, 12.65245 ], [ 92.73289, 12.65302 ], [ 92.73296, 12.65342 ], [ 92.73343, 12.65381 ], [ 92.73363, 12.65419 ], [ 92.73406, 12.65529 ], [ 92.73424, 12.65591 ], [ 92.73424, 12.65643 ], [ 92.73409, 12.65691 ], [ 92.73422, 12.65738 ], [ 92.73454, 12.65749 ], [ 92.73481, 12.6573 ], [ 92.73501, 12.65705 ], [ 92.73532, 12.65687 ], [ 92.73568, 12.65677 ], [ 92.73631, 12.65702 ], [ 92.73735, 12.65781 ], [ 92.73829, 12.65905 ], [ 92.73858, 12.65919 ], [ 92.73964, 12.65955 ], [ 92.739876103896108, 12.65973 ], [ 92.739876103896094, 12.65973 ], [ 92.74065, 12.66032 ], [ 92.74131, 12.6613 ], [ 92.74171, 12.66216 ], [ 92.7424, 12.6634 ], [ 92.74335, 12.66495 ], [ 92.74409, 12.66588 ], [ 92.74409, 12.6667 ], [ 92.74388, 12.66748 ], [ 92.7451, 12.66727 ], [ 92.74616, 12.66799 ], [ 92.74701, 12.66784 ], [ 92.74753, 12.66758 ], [ 92.74764, 12.66701 ], [ 92.74812, 12.66614 ], [ 92.74891, 12.66536 ], [ 92.74976, 12.6651 ], [ 92.75103, 12.66536 ], [ 92.7515, 12.66578 ], [ 92.75182, 12.668 ], [ 92.75235, 12.6697 ], [ 92.75245, 12.67094 ], [ 92.75293, 12.6711 ], [ 92.75362, 12.67063 ], [ 92.75558, 12.6696 ], [ 92.75748, 12.66872 ], [ 92.75907, 12.66836 ], [ 92.76098, 12.66842 ], [ 92.76246, 12.66785 ], [ 92.76597, 12.6676 ], [ 92.76773, 12.66771 ], [ 92.7691, 12.66771 ], [ 92.77021, 12.66817 ], [ 92.77138, 12.66895 ], [ 92.77302, 12.66993 ], [ 92.77376, 12.66998 ], [ 92.77514, 12.66921 ], [ 92.77625, 12.66812 ], [ 92.77694, 12.66657 ], [ 92.77742, 12.66502 ], [ 92.77853, 12.66167 ], [ 92.778777466666668, 12.65993 ], [ 92.77917, 12.65717 ], [ 92.77917, 12.65469 ], [ 92.77875, 12.65196 ], [ 92.77848, 12.64876 ], [ 92.77848, 12.64576 ], [ 92.7787, 12.644 ], [ 92.77896, 12.64292 ], [ 92.77944, 12.64054 ], [ 92.77902, 12.64008 ], [ 92.7778, 12.63941 ], [ 92.77679, 12.63848 ], [ 92.77669, 12.63786 ], [ 92.777, 12.63755 ], [ 92.77743, 12.6378 ], [ 92.77812, 12.63791 ], [ 92.77859, 12.63791 ], [ 92.77907, 12.63765 ], [ 92.77965, 12.63693 ], [ 92.78013, 12.636 ], [ 92.78029, 12.63522 ], [ 92.78002, 12.63393 ], [ 92.77965, 12.63269 ], [ 92.77981, 12.63228 ], [ 92.78061, 12.63243 ], [ 92.78103, 12.63295 ], [ 92.78172, 12.63414 ], [ 92.78214, 12.63564 ], [ 92.78219, 12.63796 ], [ 92.78214, 12.64297 ], [ 92.78182, 12.64468 ], [ 92.78155, 12.64581 ], [ 92.78113, 12.64706 ], [ 92.78081, 12.64892 ], [ 92.78055, 12.65119 ], [ 92.78055, 12.65284 ], [ 92.7807, 12.65362 ], [ 92.78086, 12.65424 ], [ 92.78134, 12.65465 ], [ 92.78229, 12.65413 ], [ 92.78287, 12.65413 ], [ 92.78319, 12.65444 ], [ 92.78372, 12.65543 ], [ 92.78414, 12.65682 ], [ 92.7842, 12.65889 ], [ 92.7843, 12.65971 ], [ 92.784297849462362, 12.65973 ], [ 92.7842, 12.66064 ], [ 92.78329, 12.66188 ], [ 92.78339, 12.6633 ], [ 92.78398, 12.66507 ], [ 92.78504, 12.66746 ], [ 92.78573, 12.66886 ], [ 92.78695, 12.67031 ], [ 92.78749, 12.67171 ], [ 92.7886, 12.67389 ], [ 92.78892, 12.67477 ], [ 92.78844, 12.6755 ], [ 92.78727, 12.67837 ], [ 92.78695, 12.68024 ], [ 92.78695, 12.6821 ], [ 92.78636, 12.6847 ], [ 92.78636, 12.68792 ], [ 92.78695, 12.69455 ], [ 92.78668, 12.6959 ], [ 92.78678, 12.69875 ], [ 92.78705, 12.70031 ], [ 92.78737, 12.70176 ], [ 92.78742, 12.70285 ], [ 92.78731, 12.70332 ], [ 92.78607, 12.7032 ], [ 92.78588, 12.7028 ], [ 92.7856, 12.70246 ], [ 92.78547, 12.70185 ], [ 92.78547, 12.70167 ], [ 92.78535, 12.70137 ], [ 92.78529, 12.70115 ], [ 92.78533, 12.70104 ], [ 92.78514, 12.70059 ], [ 92.78488, 12.70014 ], [ 92.78475, 12.69963 ], [ 92.78473, 12.69877 ], [ 92.7847, 12.69849 ], [ 92.78472, 12.69835 ], [ 92.7847, 12.69816 ], [ 92.78475, 12.69777 ], [ 92.78482, 12.69768 ], [ 92.78484, 12.69752 ], [ 92.7846, 12.69707 ], [ 92.7846, 12.69689 ], [ 92.78451, 12.69643 ], [ 92.78446, 12.69631 ], [ 92.7844, 12.69624 ], [ 92.78422, 12.69619 ], [ 92.7842, 12.69615 ], [ 92.78424, 12.69609 ], [ 92.78435, 12.69604 ], [ 92.78439, 12.69591 ], [ 92.78434, 12.69503 ], [ 92.78419, 12.69425 ], [ 92.7842, 12.69403 ], [ 92.78412, 12.6939 ], [ 92.7841, 12.69362 ], [ 92.78392, 12.69283 ], [ 92.7838, 12.69268 ], [ 92.78391, 12.69242 ], [ 92.78379, 12.69216 ], [ 92.78353, 12.69187 ], [ 92.78331, 12.69167 ], [ 92.78312, 12.69139 ], [ 92.78277, 12.69109 ], [ 92.78264, 12.69095 ], [ 92.7826, 12.69082 ], [ 92.7825, 12.69065 ], [ 92.7823, 12.69044 ], [ 92.78189, 12.69008 ], [ 92.78155, 12.68991 ], [ 92.78149, 12.68982 ], [ 92.78136, 12.6897 ], [ 92.78128, 12.68958 ], [ 92.78113, 12.68945 ], [ 92.78096, 12.68919 ], [ 92.78078, 12.689 ], [ 92.78062, 12.68894 ], [ 92.78051, 12.68897 ], [ 92.78047, 12.68892 ], [ 92.78048, 12.68877 ], [ 92.78041, 12.68869 ], [ 92.78032, 12.68866 ], [ 92.78032, 12.68858 ], [ 92.7805, 12.6885 ], [ 92.78049, 12.68843 ], [ 92.78019, 12.68806 ], [ 92.77931, 12.68718 ], [ 92.7785, 12.68629 ], [ 92.77827, 12.6859 ], [ 92.77801, 12.68576 ], [ 92.77799, 12.68572 ], [ 92.778, 12.68563 ], [ 92.77777, 12.68537 ], [ 92.7775, 12.68495 ], [ 92.7773, 12.68458 ], [ 92.77668, 12.68325 ], [ 92.77635, 12.6824 ], [ 92.77616, 12.68181 ], [ 92.77601, 12.68151 ], [ 92.7758, 12.6808 ], [ 92.7757, 12.68055 ], [ 92.77549, 12.68037 ], [ 92.77546, 12.68027 ], [ 92.77551, 12.68019 ], [ 92.77552, 12.68011 ], [ 92.77544, 12.67971 ], [ 92.77533, 12.67955 ], [ 92.7751, 12.67939 ], [ 92.77472, 12.67923 ], [ 92.77425, 12.67894 ], [ 92.77302, 12.67785 ], [ 92.7722, 12.677 ], [ 92.77197, 12.67668 ], [ 92.77186, 12.67648 ], [ 92.77111, 12.67548 ], [ 92.77102, 12.67532 ], [ 92.77077, 12.67501 ], [ 92.77079, 12.67463 ], [ 92.77075, 12.67452 ], [ 92.77067, 12.67443 ], [ 92.77063, 12.67434 ], [ 92.77061, 12.67418 ], [ 92.77055, 12.67401 ], [ 92.77044, 12.67385 ], [ 92.77043, 12.67376 ], [ 92.77032, 12.67365 ], [ 92.7703, 12.67354 ], [ 92.76996, 12.67311 ], [ 92.76953, 12.67266 ], [ 92.76916, 12.67246 ], [ 92.76879, 12.67223 ], [ 92.76858, 12.67216 ], [ 92.76847, 12.67208 ], [ 92.76815, 12.67175 ], [ 92.76785, 12.6716 ], [ 92.76725, 12.67139 ], [ 92.76663, 12.67126 ], [ 92.76649, 12.67129 ], [ 92.76622, 12.67142 ], [ 92.76617, 12.67138 ], [ 92.76618, 12.67123 ], [ 92.76616, 12.67117 ], [ 92.76609, 12.6711 ], [ 92.76595, 12.67104 ], [ 92.76572, 12.67101 ], [ 92.76546, 12.67106 ], [ 92.76517, 12.67116 ], [ 92.76457, 12.67132 ], [ 92.7643, 12.67135 ], [ 92.76369, 12.67131 ], [ 92.76361, 12.67121 ], [ 92.76324, 12.67109 ], [ 92.76303, 12.67106 ], [ 92.76263, 12.67091 ], [ 92.76222, 12.67088 ], [ 92.76172, 12.67093 ], [ 92.7611, 12.67105 ], [ 92.75953, 12.67149 ], [ 92.75906, 12.67156 ], [ 92.75703, 12.67204 ], [ 92.7559, 12.67264 ], [ 92.75567, 12.67287 ], [ 92.75561, 12.673 ], [ 92.75564, 12.67315 ], [ 92.75564, 12.67331 ], [ 92.75547, 12.67337 ], [ 92.75526, 12.67353 ], [ 92.75483, 12.67375 ], [ 92.75448, 12.67402 ], [ 92.75417, 12.67421 ], [ 92.75395, 12.67427 ], [ 92.75389, 12.67437 ], [ 92.75387, 12.67447 ], [ 92.75376, 12.67457 ], [ 92.75359, 12.67461 ], [ 92.75344, 12.6747 ], [ 92.75338, 12.67484 ], [ 92.75328, 12.67491 ], [ 92.75318, 12.67493 ], [ 92.75306, 12.675 ], [ 92.75304, 12.67512 ], [ 92.75296, 12.67521 ], [ 92.75272, 12.67521 ], [ 92.7522, 12.67507 ], [ 92.75188, 12.67485 ], [ 92.75135, 12.67466 ], [ 92.75099, 12.67463 ], [ 92.75087, 12.67453 ], [ 92.75076, 12.67448 ], [ 92.75055, 12.67448 ], [ 92.75049, 12.67441 ], [ 92.75051, 12.67424 ], [ 92.75023, 12.67393 ], [ 92.75002, 12.67377 ], [ 92.74986, 12.67371 ], [ 92.74973, 12.6737 ], [ 92.74965, 12.67377 ], [ 92.74956, 12.67381 ], [ 92.74945, 12.67369 ], [ 92.74945, 12.67359 ], [ 92.74938, 12.67343 ], [ 92.74925, 12.67337 ], [ 92.74873, 12.67283 ], [ 92.74865, 12.67269 ], [ 92.74857, 12.67261 ], [ 92.7485, 12.67258 ], [ 92.7482, 12.67259 ], [ 92.7479, 12.67244 ], [ 92.74777, 12.67242 ], [ 92.7474, 12.6726 ], [ 92.74704, 12.67283 ], [ 92.74689, 12.67289 ], [ 92.7468, 12.6729 ], [ 92.74643, 12.67264 ], [ 92.74624, 12.67245 ], [ 92.74607, 12.67232 ], [ 92.74584, 12.67196 ], [ 92.74559, 12.67173 ], [ 92.74537, 12.67166 ], [ 92.74525, 12.6717 ], [ 92.74514, 12.67169 ], [ 92.74503, 12.67164 ], [ 92.74483, 12.67162 ], [ 92.74461, 12.67168 ], [ 92.74446, 12.67165 ], [ 92.74438, 12.67152 ], [ 92.74422, 12.67143 ], [ 92.74401, 12.67143 ], [ 92.74391, 12.6715 ], [ 92.74389, 12.6716 ], [ 92.74381, 12.67159 ], [ 92.74369, 12.67152 ], [ 92.74335, 12.67164 ], [ 92.74322, 12.67188 ], [ 92.74313, 12.67216 ], [ 92.74299, 12.67221 ], [ 92.74289, 12.67229 ], [ 92.74276, 12.67234 ], [ 92.74266, 12.67234 ], [ 92.74258, 12.6723 ], [ 92.74246, 12.67236 ], [ 92.74242, 12.67244 ], [ 92.74167, 12.67271 ], [ 92.74155, 12.67281 ], [ 92.74117, 12.67291 ], [ 92.74095, 12.67291 ], [ 92.74079, 12.67288 ], [ 92.74071, 12.67281 ], [ 92.74061, 12.6725 ], [ 92.74048, 12.67239 ], [ 92.74037, 12.67234 ], [ 92.74022, 12.67232 ], [ 92.74003, 12.67235 ], [ 92.73993, 12.67239 ], [ 92.73984, 12.67251 ], [ 92.73979, 12.67281 ], [ 92.73963, 12.67295 ], [ 92.73934, 12.67311 ], [ 92.73892, 12.6732 ], [ 92.73835, 12.67322 ], [ 92.73815, 12.67316 ], [ 92.738, 12.67317 ], [ 92.7377, 12.67327 ], [ 92.73746, 12.67324 ], [ 92.73738, 12.67315 ], [ 92.73718, 12.67257 ], [ 92.73709, 12.67239 ], [ 92.73695, 12.67225 ], [ 92.7368, 12.67222 ], [ 92.73666, 12.67228 ], [ 92.73656, 12.6724 ], [ 92.7365, 12.67253 ], [ 92.736, 12.67294 ], [ 92.7358, 12.67319 ], [ 92.73563, 12.67336 ], [ 92.73546, 12.6736 ], [ 92.73522, 12.67373 ], [ 92.73496, 12.67383 ], [ 92.73469, 12.67402 ], [ 92.73426, 12.67423 ], [ 92.7338, 12.67425 ], [ 92.73346, 12.67417 ], [ 92.73326, 12.67396 ], [ 92.73316, 12.67394 ], [ 92.73308, 12.67402 ], [ 92.73302, 12.67413 ], [ 92.73298, 12.67429 ], [ 92.73298, 12.67453 ], [ 92.73308, 12.67506 ], [ 92.7331, 12.67533 ], [ 92.73324, 12.67563 ], [ 92.73338, 12.67582 ], [ 92.73351, 12.67606 ], [ 92.73383, 12.67633 ], [ 92.73399, 12.67652 ], [ 92.73406, 12.67648 ], [ 92.73415, 12.67626 ], [ 92.73423, 12.67627 ], [ 92.73448, 12.67654 ], [ 92.73457, 12.67672 ], [ 92.73473, 12.67691 ], [ 92.73488, 12.67718 ], [ 92.73496, 12.67745 ], [ 92.73528, 12.67798 ], [ 92.73538, 12.67853 ], [ 92.73539, 12.6787 ], [ 92.7353, 12.67908 ], [ 92.73517, 12.67944 ], [ 92.73512, 12.67969 ], [ 92.73521, 12.67982 ], [ 92.73536, 12.67985 ], [ 92.7356, 12.68002 ], [ 92.73569, 12.68012 ], [ 92.73605, 12.68074 ], [ 92.73621, 12.68092 ], [ 92.73629, 12.68095 ], [ 92.73653, 12.68097 ], [ 92.73669, 12.68122 ], [ 92.73673, 12.68152 ], [ 92.73668, 12.68183 ], [ 92.7366, 12.68214 ], [ 92.73622, 12.68289 ], [ 92.73598, 12.68317 ], [ 92.73579, 12.68457 ], [ 92.73573, 12.68479 ], [ 92.73537, 12.68541 ], [ 92.73513, 12.68598 ], [ 92.73509, 12.68615 ], [ 92.73496, 12.68632 ], [ 92.73458, 12.68715 ], [ 92.73419, 12.68787 ], [ 92.73382, 12.68845 ], [ 92.73313, 12.68924 ], [ 92.73251, 12.68975 ], [ 92.73229, 12.6899 ], [ 92.73199, 12.69015 ], [ 92.7316, 12.69043 ], [ 92.73146, 12.69059 ], [ 92.73114, 12.6911 ], [ 92.73103, 12.69124 ], [ 92.73067, 12.69156 ], [ 92.73013, 12.69192 ], [ 92.7298, 12.692 ], [ 92.72909, 12.69201 ], [ 92.72882, 12.69193 ], [ 92.72859, 12.6917 ], [ 92.72844, 12.69128 ], [ 92.72849, 12.69105 ], [ 92.72854, 12.691 ], [ 92.72855, 12.69088 ], [ 92.72847, 12.69071 ], [ 92.72834, 12.69063 ], [ 92.72827, 12.69062 ], [ 92.72816, 12.6903 ], [ 92.72802, 12.69024 ], [ 92.72794, 12.6903 ], [ 92.72791, 12.6906 ], [ 92.72801, 12.69133 ], [ 92.72826, 12.69273 ], [ 92.72833, 12.69294 ], [ 92.72846, 12.69315 ], [ 92.72854, 12.69356 ], [ 92.72874, 12.69494 ], [ 92.72901, 12.6956 ], [ 92.72913, 12.69599 ], [ 92.72936, 12.6964 ], [ 92.7297, 12.69732 ], [ 92.7298, 12.69747 ], [ 92.73071, 12.69779 ], [ 92.73146, 12.69781 ], [ 92.73174, 12.69789 ], [ 92.73211, 12.69805 ], [ 92.73286, 12.69831 ], [ 92.73299, 12.69831 ], [ 92.73309, 12.69819 ], [ 92.73306, 12.69805 ], [ 92.73348, 12.69777 ], [ 92.73376, 12.69754 ], [ 92.7341, 12.69772 ], [ 92.73446, 12.698 ], [ 92.73463, 12.69817 ], [ 92.73466, 12.69838 ], [ 92.73487, 12.69838 ], [ 92.73491, 12.69843 ], [ 92.73493, 12.69856 ], [ 92.735, 12.69864 ], [ 92.73501, 12.69871 ], [ 92.73527, 12.69889 ], [ 92.73532, 12.69897 ], [ 92.73536, 12.69897 ], [ 92.73541, 12.69891 ], [ 92.73547, 12.69891 ], [ 92.73552, 12.69905 ], [ 92.73567, 12.69909 ], [ 92.73577, 12.69902 ], [ 92.73584, 12.69901 ], [ 92.73587, 12.69893 ], [ 92.7359, 12.69891 ], [ 92.73599, 12.69895 ], [ 92.73602, 12.699 ], [ 92.73624, 12.69907 ], [ 92.73638, 12.69906 ], [ 92.73647, 12.69893 ], [ 92.73652, 12.69892 ], [ 92.73658, 12.69895 ], [ 92.73666, 12.69892 ], [ 92.7367, 12.69894 ], [ 92.73676, 12.69893 ], [ 92.73689, 12.69875 ], [ 92.73702, 12.69848 ], [ 92.73718, 12.69795 ], [ 92.73724, 12.69784 ], [ 92.73731, 12.6979 ], [ 92.7372, 12.69832 ], [ 92.73722, 12.69863 ], [ 92.73731, 12.69876 ], [ 92.73753, 12.69885 ], [ 92.73767, 12.69881 ], [ 92.73778, 12.69866 ], [ 92.73788, 12.69857 ], [ 92.73814, 12.69853 ], [ 92.73831, 12.69854 ], [ 92.73847, 12.69841 ], [ 92.73856, 12.69843 ], [ 92.73861, 12.69852 ], [ 92.73857, 12.69872 ], [ 92.73843, 12.69895 ], [ 92.73846, 12.69916 ], [ 92.73862, 12.69928 ], [ 92.73897, 12.69939 ], [ 92.74047, 12.69976 ], [ 92.74081, 12.69979 ], [ 92.74129, 12.69992 ], [ 92.74166, 12.69985 ], [ 92.74198, 12.69972 ], [ 92.74205, 12.69965 ], [ 92.74212, 12.69952 ], [ 92.74231, 12.69933 ], [ 92.74242, 12.69916 ], [ 92.74252, 12.69907 ], [ 92.74282, 12.69901 ], [ 92.74315, 12.69884 ], [ 92.74341, 12.69885 ], [ 92.74353, 12.69881 ], [ 92.74363, 12.69883 ], [ 92.74368, 12.69893 ], [ 92.74362, 12.69907 ], [ 92.74345, 12.69928 ], [ 92.74318, 12.6995 ], [ 92.74308, 12.69972 ], [ 92.74317, 12.70028 ], [ 92.74313, 12.70048 ], [ 92.74303, 12.70063 ], [ 92.74278, 12.7007 ], [ 92.74266, 12.70071 ], [ 92.74253, 12.70083 ], [ 92.74234, 12.70115 ], [ 92.74227, 12.70136 ], [ 92.74228, 12.70151 ], [ 92.74213, 12.70171 ], [ 92.74195, 12.7017 ], [ 92.74177, 12.70164 ], [ 92.74112, 12.70177 ], [ 92.74097, 12.70182 ], [ 92.74093, 12.70207 ], [ 92.74093, 12.70232 ], [ 92.74106, 12.70262 ], [ 92.74114, 12.70287 ], [ 92.74114, 12.70304 ], [ 92.74101, 12.70319 ], [ 92.7409, 12.7032 ], [ 92.74079, 12.70324 ], [ 92.74068, 12.7032 ], [ 92.74066, 12.70313 ], [ 92.74059, 12.70306 ], [ 92.74041, 12.70306 ], [ 92.74034, 12.70316 ], [ 92.74035, 12.70328 ], [ 92.74039, 12.70331 ], [ 92.74043, 12.7033 ], [ 92.74046, 12.7034 ], [ 92.74047, 12.70353 ], [ 92.74055, 12.70354 ], [ 92.74064, 12.70353 ], [ 92.74054, 12.7038 ], [ 92.74053, 12.70388 ], [ 92.74055, 12.70391 ], [ 92.7406, 12.70392 ], [ 92.74068, 12.70389 ], [ 92.74086, 12.7039 ], [ 92.74092, 12.70395 ], [ 92.74098, 12.70405 ], [ 92.74114, 12.70415 ], [ 92.7412, 12.70426 ], [ 92.74124, 12.70445 ], [ 92.74131, 12.70455 ], [ 92.74138, 12.70459 ], [ 92.74152, 12.70458 ], [ 92.74158, 12.70466 ], [ 92.74165, 12.70483 ], [ 92.74162, 12.70536 ], [ 92.74153, 12.70578 ], [ 92.7415, 12.70615 ], [ 92.74151, 12.70653 ], [ 92.7416, 12.70694 ], [ 92.74161, 12.70718 ], [ 92.74167, 12.70744 ], [ 92.74162, 12.7078 ], [ 92.74125, 12.70863 ], [ 92.74114, 12.70881 ], [ 92.74103, 12.70894 ], [ 92.74095, 12.70897 ], [ 92.74087, 12.70897 ], [ 92.74076, 12.7087 ], [ 92.74066, 12.70865 ], [ 92.74045, 12.70877 ], [ 92.74042, 12.70876 ], [ 92.74036, 12.70863 ], [ 92.74035, 12.70845 ], [ 92.7403, 12.7084 ], [ 92.74028, 12.70834 ], [ 92.7403, 12.70827 ], [ 92.74028, 12.70821 ], [ 92.74022, 12.70819 ], [ 92.74016, 12.70821 ], [ 92.74007, 12.70837 ], [ 92.73998, 12.70866 ], [ 92.74003, 12.70887 ], [ 92.74018, 12.70902 ], [ 92.74021, 12.70909 ], [ 92.74009, 12.70925 ], [ 92.74008, 12.70932 ], [ 92.73997, 12.70944 ], [ 92.74004, 12.70962 ], [ 92.74009, 12.70965 ], [ 92.74022, 12.70959 ], [ 92.74032, 12.70964 ], [ 92.74029, 12.70979 ], [ 92.74017, 12.70988 ], [ 92.7401, 12.70987 ], [ 92.74, 12.7098 ], [ 92.73989, 12.70977 ], [ 92.73979, 12.7098 ], [ 92.73969, 12.7099 ], [ 92.73955, 12.71031 ], [ 92.73956, 12.71041 ], [ 92.73968, 12.71068 ], [ 92.73955, 12.71124 ], [ 92.73936, 12.71145 ], [ 92.73941, 12.71155 ], [ 92.73942, 12.71168 ], [ 92.73946, 12.71171 ], [ 92.73955, 12.71171 ], [ 92.73984, 12.71217 ], [ 92.73991, 12.71244 ], [ 92.7399, 12.71256 ], [ 92.73993, 12.71265 ], [ 92.73986, 12.71273 ], [ 92.73979, 12.71293 ], [ 92.73964, 12.71288 ], [ 92.73957, 12.7129 ], [ 92.73951, 12.71305 ], [ 92.73953, 12.71385 ], [ 92.73948, 12.71401 ], [ 92.73962, 12.71412 ], [ 92.73968, 12.71422 ], [ 92.73967, 12.71433 ], [ 92.73948, 12.71439 ], [ 92.73944, 12.71458 ], [ 92.73952, 12.71461 ], [ 92.73963, 12.71461 ], [ 92.7397, 12.71476 ], [ 92.73966, 12.71482 ], [ 92.73957, 12.71484 ], [ 92.73954, 12.7149 ], [ 92.73958, 12.71498 ], [ 92.73964, 12.71502 ], [ 92.73973, 12.71499 ], [ 92.73987, 12.7148 ], [ 92.73994, 12.71475 ], [ 92.74, 12.71477 ], [ 92.74007, 12.71483 ], [ 92.74011, 12.71491 ], [ 92.74012, 12.71503 ], [ 92.74027, 12.71506 ], [ 92.74052, 12.71538 ], [ 92.74078, 12.71553 ], [ 92.74084, 12.7156 ], [ 92.74085, 12.71567 ], [ 92.74073, 12.71576 ], [ 92.74062, 12.71579 ], [ 92.74061, 12.71584 ], [ 92.74072, 12.71596 ], [ 92.74074, 12.71602 ], [ 92.74072, 12.71607 ], [ 92.74059, 12.71602 ], [ 92.74051, 12.7161 ], [ 92.74051, 12.71615 ], [ 92.74046, 12.71618 ], [ 92.74032, 12.7162 ], [ 92.74023, 12.71626 ], [ 92.74027, 12.71665 ], [ 92.74042, 12.71675 ], [ 92.74047, 12.71696 ], [ 92.74044, 12.71701 ], [ 92.74037, 12.71704 ], [ 92.74033, 12.7171 ], [ 92.74033, 12.71718 ], [ 92.74023, 12.71743 ], [ 92.74023, 12.71759 ], [ 92.74026, 12.71767 ], [ 92.74057, 12.71797 ], [ 92.74056, 12.71805 ], [ 92.7405, 12.7181 ], [ 92.74053, 12.71817 ], [ 92.74062, 12.71821 ], [ 92.74071, 12.71831 ], [ 92.74075, 12.71842 ], [ 92.74069, 12.71853 ], [ 92.74068, 12.71862 ], [ 92.74061, 12.7187 ], [ 92.74055, 12.71882 ], [ 92.74055, 12.71894 ], [ 92.74071, 12.71918 ], [ 92.74102, 12.71953 ], [ 92.74127, 12.71962 ], [ 92.74146, 12.71985 ], [ 92.74145, 12.71993 ], [ 92.7414, 12.72001 ], [ 92.74132, 12.72008 ], [ 92.74126, 12.72009 ], [ 92.74124, 12.72014 ], [ 92.74126, 12.7202 ], [ 92.74117, 12.72042 ], [ 92.74117, 12.72068 ], [ 92.74121, 12.7208 ], [ 92.74132, 12.72094 ], [ 92.74149, 12.72105 ], [ 92.7416, 12.72107 ], [ 92.74164, 12.72113 ], [ 92.74169, 12.72129 ], [ 92.74193, 12.72129 ], [ 92.74202, 12.72132 ], [ 92.74214, 12.72127 ], [ 92.7422, 12.72132 ], [ 92.74247, 12.72129 ], [ 92.74254, 12.72132 ], [ 92.74258, 12.72125 ], [ 92.74297, 12.72114 ], [ 92.7431, 12.72121 ], [ 92.74318, 12.72115 ], [ 92.74339, 12.72119 ], [ 92.74354, 12.72124 ], [ 92.74358, 12.72121 ], [ 92.74373, 12.72121 ], [ 92.74375, 12.72123 ], [ 92.74377, 12.72134 ], [ 92.74397, 12.72135 ], [ 92.74405, 12.72144 ], [ 92.74416, 12.72148 ], [ 92.74427, 12.72164 ], [ 92.74451, 12.72172 ], [ 92.74478, 12.72175 ], [ 92.74484, 12.72173 ], [ 92.74514, 12.72182 ], [ 92.74518, 12.72176 ], [ 92.74533, 12.72189 ], [ 92.74553, 12.72181 ], [ 92.74558, 12.72194 ], [ 92.74587, 12.72204 ], [ 92.74619, 12.72205 ], [ 92.74631, 12.72216 ], [ 92.74639, 12.7222 ], [ 92.74645, 12.72229 ], [ 92.74654, 12.72231 ], [ 92.74661, 12.72237 ], [ 92.74665, 12.72233 ], [ 92.74667, 12.72228 ], [ 92.74675, 12.72224 ], [ 92.74679, 12.72217 ], [ 92.74696, 12.7222 ], [ 92.74702, 12.72229 ], [ 92.74698, 12.72244 ], [ 92.74721, 12.7226 ], [ 92.74725, 12.72258 ], [ 92.7474, 12.72262 ], [ 92.74741, 12.72266 ], [ 92.74733, 12.7229 ], [ 92.74748, 12.72299 ], [ 92.74751, 12.72303 ], [ 92.74745, 12.72307 ], [ 92.74729, 12.72304 ], [ 92.74717, 12.72309 ], [ 92.74713, 12.72314 ], [ 92.74719, 12.72325 ], [ 92.7473, 12.72335 ], [ 92.7473, 12.72341 ], [ 92.74724, 12.72345 ], [ 92.74718, 12.72341 ], [ 92.74694, 12.72337 ], [ 92.74692, 12.72318 ], [ 92.74699, 12.72309 ], [ 92.74686, 12.72305 ], [ 92.74662, 12.7229 ], [ 92.74653, 12.72288 ], [ 92.74624, 12.72296 ], [ 92.74615, 12.72301 ], [ 92.74598, 12.72303 ], [ 92.74583, 12.72315 ], [ 92.74577, 12.72314 ], [ 92.7457, 12.72306 ], [ 92.74568, 12.72293 ], [ 92.7456, 12.7229 ], [ 92.74541, 12.72294 ], [ 92.7453, 12.72293 ], [ 92.74519, 12.72295 ], [ 92.745, 12.7231 ], [ 92.74496, 12.72321 ], [ 92.74501, 12.72332 ], [ 92.74515, 12.7234 ], [ 92.74518, 12.72354 ], [ 92.74516, 12.72373 ], [ 92.745, 12.7241 ], [ 92.74486, 12.72426 ], [ 92.74448, 12.72444 ], [ 92.74438, 12.72455 ], [ 92.74421, 12.72462 ], [ 92.74396, 12.7246 ], [ 92.74375, 12.72454 ], [ 92.74337, 12.72453 ], [ 92.74324, 12.72462 ], [ 92.74329, 12.72488 ], [ 92.74323, 12.72502 ], [ 92.74307, 12.72513 ], [ 92.74297, 12.72527 ], [ 92.74289, 12.72555 ], [ 92.74245, 12.7259 ], [ 92.7423, 12.72596 ], [ 92.74196, 12.72601 ], [ 92.74169, 12.726 ], [ 92.74154, 12.72607 ], [ 92.74122, 12.72638 ], [ 92.74116, 12.72647 ], [ 92.74107, 12.72672 ], [ 92.7411, 12.727 ], [ 92.74115, 12.72719 ], [ 92.74116, 12.72735 ], [ 92.74111, 12.72754 ], [ 92.74102, 12.72771 ], [ 92.74091, 12.72825 ], [ 92.74095, 12.72873 ], [ 92.74078, 12.72882 ], [ 92.74072, 12.7289 ], [ 92.74078, 12.72916 ], [ 92.74076, 12.72925 ], [ 92.7407, 12.72935 ], [ 92.7404, 12.72941 ], [ 92.74027, 12.72935 ], [ 92.74008, 12.72939 ], [ 92.73985, 12.72972 ], [ 92.73984, 12.72982 ], [ 92.73986, 12.72988 ], [ 92.74007, 12.72998 ], [ 92.74011, 12.73005 ], [ 92.74009, 12.73015 ], [ 92.74011, 12.73026 ], [ 92.74025, 12.73044 ], [ 92.74042, 12.73048 ], [ 92.74053, 12.73056 ], [ 92.7406, 12.73071 ], [ 92.74056, 12.73089 ], [ 92.74039, 12.73111 ], [ 92.74032, 12.73139 ], [ 92.74034, 12.73146 ], [ 92.74042, 12.73146 ], [ 92.74041, 12.73172 ], [ 92.74036, 12.73194 ], [ 92.74036, 12.73214 ], [ 92.7404, 12.73224 ], [ 92.74042, 12.73239 ], [ 92.74039, 12.73247 ], [ 92.74027, 12.73259 ], [ 92.74018, 12.73263 ], [ 92.74009, 12.73263 ], [ 92.74006, 12.73274 ], [ 92.7401, 12.73298 ], [ 92.73997, 12.73307 ], [ 92.73941, 12.73358 ], [ 92.73886, 12.73419 ], [ 92.73871, 12.73432 ], [ 92.73858, 12.7345 ], [ 92.7386, 12.73472 ], [ 92.73846, 12.73483 ], [ 92.73841, 12.73499 ], [ 92.73839, 12.73516 ], [ 92.73856, 12.73555 ], [ 92.73865, 12.73554 ], [ 92.73872, 12.73549 ], [ 92.73879, 12.73551 ], [ 92.73882, 12.73568 ], [ 92.7387, 12.73588 ], [ 92.7387, 12.73599 ], [ 92.7388, 12.73609 ], [ 92.73895, 12.73618 ], [ 92.73908, 12.73631 ], [ 92.73903, 12.73641 ], [ 92.73898, 12.73643 ], [ 92.73848, 12.73642 ], [ 92.73848, 12.73655 ], [ 92.73857, 12.73666 ], [ 92.7389, 12.73694 ], [ 92.73901, 12.73696 ], [ 92.73914, 12.73721 ], [ 92.73928, 12.7373 ], [ 92.73931, 12.73741 ], [ 92.73931, 12.73753 ], [ 92.73909, 12.73759 ], [ 92.73881, 12.73783 ], [ 92.73864, 12.73809 ], [ 92.73823, 12.73839 ], [ 92.73768, 12.73839 ], [ 92.73752, 12.73844 ], [ 92.73743, 12.73854 ], [ 92.73698, 12.73872 ], [ 92.73685, 12.73871 ], [ 92.73657, 12.73852 ], [ 92.73651, 12.73842 ], [ 92.73651, 12.73829 ], [ 92.7364, 12.73818 ], [ 92.73633, 12.73815 ], [ 92.736, 12.73817 ], [ 92.73595, 12.73832 ], [ 92.73608, 12.73871 ], [ 92.73609, 12.7388 ], [ 92.73599, 12.73888 ], [ 92.73585, 12.7389 ], [ 92.73577, 12.73886 ], [ 92.73576, 12.73874 ], [ 92.73569, 12.73869 ], [ 92.73562, 12.73871 ], [ 92.73559, 12.73879 ], [ 92.73552, 12.73883 ], [ 92.73512, 12.73858 ], [ 92.73497, 12.73854 ], [ 92.73488, 12.73857 ], [ 92.73487, 12.73874 ], [ 92.73481, 12.73884 ], [ 92.73479, 12.73893 ], [ 92.73507, 12.73929 ], [ 92.7353, 12.73951 ], [ 92.73529, 12.73965 ], [ 92.73515, 12.73988 ], [ 92.73488, 12.74006 ], [ 92.73474, 12.74011 ], [ 92.73462, 12.7401 ], [ 92.7344, 12.73992 ], [ 92.73436, 12.73991 ], [ 92.73389, 12.74044 ], [ 92.7336, 12.74062 ], [ 92.73351, 12.74081 ], [ 92.73323, 12.74119 ], [ 92.73309, 12.74145 ], [ 92.73291, 12.74168 ], [ 92.73265, 12.7419 ], [ 92.73234, 12.74204 ], [ 92.7321, 12.7422 ], [ 92.7313, 12.74297 ], [ 92.73087, 12.74358 ], [ 92.7308, 12.74378 ], [ 92.7308, 12.74429 ], [ 92.73068, 12.74511 ], [ 92.73072, 12.7454 ], [ 92.7307, 12.74577 ], [ 92.7306, 12.74601 ], [ 92.73042, 12.74624 ], [ 92.7304, 12.74635 ], [ 92.7303, 12.74644 ], [ 92.73018, 12.74677 ], [ 92.7302, 12.74728 ], [ 92.73017, 12.74746 ], [ 92.73022, 12.74761 ], [ 92.73024, 12.7478 ], [ 92.7302, 12.74797 ], [ 92.7302, 12.74812 ], [ 92.73032, 12.74864 ], [ 92.73046, 12.74893 ], [ 92.73054, 12.74931 ], [ 92.73054, 12.7495 ], [ 92.73044, 12.74987 ], [ 92.73043, 12.75021 ], [ 92.7305, 12.7505 ], [ 92.73051, 12.75064 ], [ 92.73065, 12.75109 ], [ 92.73077, 12.75184 ], [ 92.73084, 12.75211 ], [ 92.73106, 12.75274 ], [ 92.73117, 12.75295 ], [ 92.73129, 12.75305 ], [ 92.73142, 12.75307 ], [ 92.73148, 12.75316 ], [ 92.73146, 12.75327 ], [ 92.73156, 12.75374 ], [ 92.73157, 12.75412 ], [ 92.73138, 12.75452 ], [ 92.73118, 12.75465 ], [ 92.73058, 12.75525 ], [ 92.73041, 12.75538 ], [ 92.73019, 12.75569 ], [ 92.73014, 12.75588 ], [ 92.7303, 12.75622 ], [ 92.73021, 12.75637 ], [ 92.72991, 12.75667 ], [ 92.72978, 12.75714 ], [ 92.72952, 12.75742 ], [ 92.72923, 12.75779 ], [ 92.729, 12.75852 ], [ 92.72873, 12.75902 ], [ 92.72848, 12.75965 ], [ 92.72814, 12.761 ], [ 92.72785, 12.76187 ], [ 92.72769, 12.76256 ], [ 92.72766, 12.76318 ], [ 92.72779, 12.76343 ], [ 92.72778, 12.76392 ], [ 92.72765, 12.76429 ], [ 92.72735, 12.76451 ], [ 92.72688, 12.76471 ], [ 92.72652, 12.76543 ], [ 92.72638, 12.76638 ], [ 92.72538, 12.77125 ], [ 92.72483, 12.77271 ], [ 92.72414, 12.77575 ], [ 92.72385, 12.77679 ], [ 92.72334, 12.77904 ], [ 92.7229, 12.78142 ], [ 92.72257, 12.78389 ], [ 92.72221, 12.78523 ], [ 92.72121, 12.78821 ], [ 92.72099, 12.78872 ], [ 92.72098, 12.78909 ], [ 92.72109, 12.78955 ], [ 92.72109, 12.78982 ], [ 92.72115, 12.79031 ], [ 92.72133, 12.79067 ], [ 92.721428181818183, 12.79103 ], [ 92.72145, 12.79111 ], [ 92.721514, 12.79123 ], [ 92.72169, 12.79156 ], [ 92.72204, 12.79184 ], [ 92.72197, 12.79199 ], [ 92.72195, 12.79231 ], [ 92.72198, 12.79259 ], [ 92.72207, 12.79276 ], [ 92.7222, 12.79273 ], [ 92.72245, 12.79248 ], [ 92.72263, 12.79237 ], [ 92.72267, 12.79257 ], [ 92.72266, 12.79285 ], [ 92.72312, 12.79388 ], [ 92.72368, 12.79474 ], [ 92.72398, 12.79545 ], [ 92.72402, 12.79586 ], [ 92.72402, 12.79617 ], [ 92.72399, 12.79646 ], [ 92.72386, 12.79676 ], [ 92.7236, 12.79683 ], [ 92.72315, 12.79669 ], [ 92.72264, 12.79638 ], [ 92.72214, 12.79622 ], [ 92.72189, 12.79622 ], [ 92.72117, 12.79753 ], [ 92.72117, 12.80025 ], [ 92.72105, 12.80235 ], [ 92.72105, 12.80366 ], [ 92.7209, 12.80485 ], [ 92.72064, 12.80503 ], [ 92.7204, 12.80526 ], [ 92.72041, 12.80559 ], [ 92.72084, 12.80611 ], [ 92.72112, 12.80674 ], [ 92.72113, 12.80828 ], [ 92.7214, 12.80963 ], [ 92.72236, 12.81116 ], [ 92.72263, 12.8127 ], [ 92.72267, 12.81367 ], [ 92.72205, 12.81413 ], [ 92.72178, 12.81492 ], [ 92.72171, 12.81585 ], [ 92.72182, 12.81679 ], [ 92.72228, 12.8181 ], [ 92.72297, 12.81952 ], [ 92.72339, 12.82083 ], [ 92.72358, 12.82161 ], [ 92.72339, 12.82244 ], [ 92.72309, 12.82322 ], [ 92.7232, 12.82386 ], [ 92.72355, 12.82471 ], [ 92.7237, 12.82617 ], [ 92.72458, 12.82804 ], [ 92.72489, 12.82849 ], [ 92.72588, 12.82845 ], [ 92.7268, 12.82822 ], [ 92.72719, 12.82807 ], [ 92.72746, 12.82834 ], [ 92.72759, 12.82916 ], [ 92.72797, 12.83051 ], [ 92.72874, 12.83155 ], [ 92.7292, 12.83256 ], [ 92.72966, 12.83376 ], [ 92.72989, 12.83481 ], [ 92.7305, 12.83533 ], [ 92.731, 12.83563 ], [ 92.73142, 12.83552 ], [ 92.73169, 12.83529 ], [ 92.73192, 12.83496 ], [ 92.73192, 12.83458 ], [ 92.73181, 12.83421 ], [ 92.73127, 12.83383 ], [ 92.73119, 12.83354 ], [ 92.73162, 12.83335 ], [ 92.73223, 12.83335 ], [ 92.73257, 12.83316 ], [ 92.7328, 12.8326 ], [ 92.73273, 12.83152 ], [ 92.73269, 12.83022 ], [ 92.7328, 12.82962 ], [ 92.73307, 12.82891 ], [ 92.7333, 12.82797 ], [ 92.73373, 12.82722 ], [ 92.73392, 12.82633 ], [ 92.73384, 12.82513 ], [ 92.73384, 12.82449 ], [ 92.73415, 12.82393 ], [ 92.73434, 12.82371 ], [ 92.73472, 12.82307 ], [ 92.73472, 12.82259 ], [ 92.7348, 12.82199 ], [ 92.73503, 12.8215 ], [ 92.73588, 12.82122 ], [ 92.7365, 12.82047 ], [ 92.73654, 12.81973 ], [ 92.73646, 12.81894 ], [ 92.73608, 12.81681 ], [ 92.73608, 12.81348 ], [ 92.73623, 12.81262 ], [ 92.73708, 12.81079 ], [ 92.73784, 12.81004 ], [ 92.73823, 12.81 ], [ 92.73872, 12.8109 ], [ 92.73922, 12.81191 ], [ 92.73961, 12.81647 ], [ 92.73949, 12.81804 ], [ 92.73949, 12.81894 ], [ 92.73926, 12.81995 ], [ 92.73888, 12.82104 ], [ 92.73853, 12.82253 ], [ 92.73822, 12.82373 ], [ 92.73807, 12.825 ], [ 92.73807, 12.8271 ], [ 92.73795, 12.82826 ], [ 92.73818, 12.82893 ], [ 92.73838, 12.8305 ], [ 92.73868, 12.83102 ], [ 92.73926, 12.83177 ], [ 92.73976, 12.83319 ], [ 92.74018, 12.83536 ], [ 92.74025, 12.83626 ], [ 92.74037, 12.83689 ], [ 92.7406, 12.83708 ], [ 92.74098, 12.83693 ], [ 92.74129, 12.83652 ], [ 92.74217, 12.8314 ], [ 92.74221, 12.82972 ], [ 92.74249, 12.82826 ], [ 92.74218, 12.82713 ], [ 92.74256, 12.82549 ], [ 92.7426, 12.82433 ], [ 92.74306, 12.82392 ], [ 92.74382, 12.82403 ], [ 92.74437, 12.82519 ], [ 92.74452, 12.82714 ], [ 92.74456, 12.82859 ], [ 92.74448, 12.8305 ], [ 92.7444, 12.83114 ], [ 92.74417, 12.83181 ], [ 92.74417, 12.8326 ], [ 92.7444, 12.83387 ], [ 92.74417, 12.83529 ], [ 92.74423, 12.83777 ], [ 92.74421, 12.83896 ], [ 92.74445, 12.83949 ], [ 92.74494, 12.83999 ], [ 92.74548, 12.84092 ], [ 92.74611, 12.84177 ], [ 92.74646, 12.84217 ], [ 92.74679, 12.84217 ], [ 92.74714, 12.84179 ], [ 92.74752, 12.84124 ], [ 92.74774, 12.84087 ], [ 92.74809, 12.84111 ], [ 92.74847, 12.84177 ], [ 92.74913, 12.84235 ], [ 92.7498, 12.8432 ], [ 92.75089, 12.84395 ], [ 92.75116, 12.84429 ], [ 92.75116, 12.84471 ], [ 92.7514, 12.84509 ], [ 92.75192, 12.84522 ], [ 92.75255, 12.84501 ], [ 92.75342, 12.84501 ], [ 92.75377, 12.84503 ], [ 92.75426, 12.84519 ], [ 92.75437, 12.84543 ], [ 92.75423, 12.84575 ], [ 92.75385, 12.84583 ], [ 92.75344, 12.84617 ], [ 92.75342, 12.8466 ], [ 92.75336, 12.84713 ], [ 92.75344, 12.84771 ], [ 92.75371, 12.84803 ], [ 92.75404, 12.84805 ], [ 92.75442, 12.8479 ], [ 92.75518, 12.84718 ], [ 92.7557, 12.84678 ], [ 92.75614, 12.84654 ], [ 92.75668, 12.84657 ], [ 92.75711, 12.84652 ], [ 92.75739, 12.84625 ], [ 92.75752, 12.84599 ], [ 92.75774, 12.84599 ], [ 92.75805, 12.84647 ], [ 92.75843, 12.84727 ], [ 92.75914, 12.84867 ], [ 92.75946, 12.84947 ], [ 92.75938, 12.84994 ], [ 92.75867, 12.85127 ], [ 92.7587, 12.85246 ], [ 92.75876, 12.85328 ], [ 92.75908, 12.85416 ], [ 92.75927, 12.8549 ], [ 92.75935, 12.85559 ], [ 92.75922, 12.85628 ], [ 92.75916, 12.85713 ], [ 92.75949, 12.85835 ], [ 92.7602, 12.85909 ], [ 92.76066, 12.85951 ], [ 92.76107, 12.85962 ], [ 92.76117, 12.85898 ], [ 92.76158, 12.85824 ], [ 92.76169, 12.8575 ], [ 92.76202, 12.85662 ], [ 92.76213, 12.85607 ], [ 92.76213, 12.8545 ], [ 92.76226, 12.85379 ], [ 92.76275, 12.85315 ], [ 92.76361, 12.85224 ], [ 92.76418, 12.85147 ], [ 92.76551, 12.85041 ], [ 92.7663, 12.84943 ], [ 92.76747, 12.84816 ], [ 92.76845, 12.84702 ], [ 92.76934, 12.84569 ], [ 92.77076, 12.84416 ], [ 92.77157, 12.84357 ], [ 92.77206, 12.84376 ], [ 92.77228, 12.84402 ], [ 92.77234, 12.84458 ], [ 92.77182, 12.84506 ], [ 92.77092, 12.84625 ], [ 92.7697, 12.84819 ], [ 92.7692, 12.84955 ], [ 92.76874, 12.85122 ], [ 92.76874, 12.85204 ], [ 92.76936, 12.85435 ], [ 92.7698, 12.85581 ], [ 92.77031, 12.85705 ], [ 92.77059, 12.85795 ], [ 92.77053, 12.85854 ], [ 92.77012, 12.85907 ], [ 92.76936, 12.86111 ], [ 92.76901, 12.8618 ], [ 92.7692, 12.86219 ], [ 92.77069, 12.8632 ], [ 92.7711, 12.8636 ], [ 92.77151, 12.86349 ], [ 92.77219, 12.8627 ], [ 92.77276, 12.86249 ], [ 92.77344, 12.86217 ], [ 92.77377, 12.86182 ], [ 92.77393, 12.86137 ], [ 92.77398, 12.86092 ], [ 92.77434, 12.86095 ], [ 92.77684, 12.86278 ], [ 92.77719, 12.86339 ], [ 92.77752, 12.86389 ], [ 92.7779, 12.86408 ], [ 92.77831, 12.86397 ], [ 92.77893, 12.86352 ], [ 92.7798, 12.86264 ], [ 92.78021, 12.86185 ], [ 92.78062, 12.86135 ], [ 92.78086, 12.86055 ], [ 92.78116, 12.85991 ], [ 92.78212, 12.85994 ], [ 92.7831, 12.86089 ], [ 92.78376, 12.86137 ], [ 92.78444, 12.86174 ], [ 92.78575, 12.86206 ], [ 92.78651, 12.862 ], [ 92.78719, 12.86174 ], [ 92.7879, 12.86131 ], [ 92.78828, 12.86102 ], [ 92.78856, 12.86073 ], [ 92.78895, 12.86084 ], [ 92.78999, 12.86187 ], [ 92.79056, 12.86198 ], [ 92.79086, 12.86198 ], [ 92.79122, 12.86174 ], [ 92.79144, 12.86177 ], [ 92.79165, 12.86208 ], [ 92.79324, 12.86206 ], [ 92.79375, 12.86222 ], [ 92.79427, 12.8627 ], [ 92.79427, 12.86299 ], [ 92.79405, 12.86325 ], [ 92.79354, 12.8634 ], [ 92.79291, 12.86417 ], [ 92.79269, 12.86479 ], [ 92.79277, 12.86534 ], [ 92.7931, 12.86635 ], [ 92.7931, 12.86702 ], [ 92.79261, 12.86792 ], [ 92.79253, 12.86848 ], [ 92.79274, 12.86904 ], [ 92.79307, 12.86952 ], [ 92.794, 12.87022 ], [ 92.79441, 12.87059 ], [ 92.79441, 12.8711 ], [ 92.79408, 12.87203 ], [ 92.79381, 12.87307 ], [ 92.79343, 12.87413 ], [ 92.79288, 12.87519 ], [ 92.79291, 12.8757 ], [ 92.79302, 12.87602 ], [ 92.79365, 12.87661 ], [ 92.79374, 12.87709 ], [ 92.79363, 12.87788 ], [ 92.79278, 12.87866 ], [ 92.79265, 12.87988 ], [ 92.793, 12.88076 ], [ 92.79341, 12.88123 ], [ 92.79387, 12.88193 ], [ 92.79406, 12.88248 ], [ 92.79401, 12.88288 ], [ 92.79374, 12.88317 ], [ 92.79289, 12.88344 ], [ 92.7924, 12.884 ], [ 92.79205, 12.88504 ], [ 92.79202, 12.88594 ], [ 92.79136, 12.88684 ], [ 92.79123, 12.88769 ], [ 92.79142, 12.88905 ], [ 92.7918, 12.88958 ], [ 92.79256, 12.89035 ], [ 92.79387, 12.8908 ], [ 92.79647, 12.8918 ], [ 92.79817, 12.89292 ], [ 92.8012, 12.89544 ], [ 92.8025, 12.89639 ], [ 92.80323, 12.89724 ], [ 92.80338, 12.89777 ], [ 92.80317, 12.89858 ], [ 92.80232, 12.89928 ], [ 92.80195, 12.90058 ], [ 92.80109, 12.9031 ], [ 92.80028, 12.90576 ], [ 92.79932, 12.90762 ], [ 92.79843, 12.90913 ], [ 92.7981, 12.90974 ], [ 92.79818, 12.91041 ], [ 92.79808, 12.91095 ], [ 92.79791, 12.91116 ], [ 92.79757, 12.9114 ], [ 92.79738, 12.91131 ], [ 92.79721, 12.91144 ], [ 92.79721, 12.9117 ], [ 92.79642, 12.91267 ], [ 92.79509, 12.91339 ], [ 92.79476, 12.91397 ], [ 92.79471, 12.91447 ], [ 92.79471, 12.91496 ], [ 92.79481, 12.91538 ], [ 92.79508, 12.91606 ], [ 92.79514, 12.91678 ], [ 92.79534, 12.91717 ], [ 92.79548, 12.91762 ], [ 92.79551, 12.91821 ], [ 92.79523, 12.91902 ], [ 92.79503, 12.91971 ], [ 92.79553, 12.92103 ], [ 92.7956, 12.9215 ], [ 92.79545, 12.92209 ], [ 92.79546507246377, 12.92233 ], [ 92.79558, 12.92416 ], [ 92.79585, 12.92514 ], [ 92.79581, 12.92594 ], [ 92.79572, 12.92649 ], [ 92.79555, 12.92679 ], [ 92.79532, 12.92693 ], [ 92.79489, 12.92711 ], [ 92.79445, 12.92747 ], [ 92.79416, 12.92802 ], [ 92.79406, 12.92853 ], [ 92.79406, 12.92896 ], [ 92.79427, 12.92963 ], [ 92.79409, 12.93015 ], [ 92.79404, 12.93039 ], [ 92.79416, 12.93099 ], [ 92.79424, 12.93111 ], [ 92.79443, 12.93106 ], [ 92.79462, 12.93077 ], [ 92.79491, 12.9302 ], [ 92.79513, 12.93001 ], [ 92.79549, 12.92989 ], [ 92.79642, 12.93001 ], [ 92.79746, 12.92974 ], [ 92.7981, 12.92968 ], [ 92.79857, 12.92994 ], [ 92.7991, 12.93013 ], [ 92.79959, 12.93027 ], [ 92.79975, 12.93046 ], [ 92.79977, 12.93095 ], [ 92.79947, 12.93177 ], [ 92.79914, 12.93251 ], [ 92.79917, 12.93298 ], [ 92.79951, 12.93334 ], [ 92.80035, 12.93389 ], [ 92.80072, 12.93469 ], [ 92.80116, 12.93475 ], [ 92.8015, 12.93502 ], [ 92.80145, 12.93612 ], [ 92.80106, 12.93696 ], [ 92.80164, 12.93809 ], [ 92.80232, 12.93894 ], [ 92.80236, 12.93927 ], [ 92.80145, 12.94044 ], [ 92.79976, 12.94181 ], [ 92.79951, 12.9421 ], [ 92.79936, 12.9426 ], [ 92.79945, 12.94328 ], [ 92.79976, 12.94393 ], [ 92.80045, 12.94457 ], [ 92.80094, 12.94497 ], [ 92.80102, 12.94515 ], [ 92.80087, 12.94549 ], [ 92.80087, 12.94628 ], [ 92.80081, 12.94707 ], [ 92.80056, 12.94784 ], [ 92.8001, 12.94829 ], [ 92.79949, 12.94882 ], [ 92.79938, 12.94886 ], [ 92.79915, 12.94906 ], [ 92.79912, 12.94913 ], [ 92.79918, 12.94923 ], [ 92.79916, 12.94928 ], [ 92.79909, 12.94928 ], [ 92.79899, 12.94922 ], [ 92.79886, 12.94925 ], [ 92.79878, 12.94936 ], [ 92.79878, 12.94966 ], [ 92.79873, 12.94977 ], [ 92.79861, 12.94982 ], [ 92.79842, 12.94966 ], [ 92.79804, 12.94944 ], [ 92.79769, 12.94928 ], [ 92.79743, 12.94926 ], [ 92.79712, 12.94928 ], [ 92.79692, 12.94932 ], [ 92.79639, 12.94933 ], [ 92.79591, 12.94942 ], [ 92.79565, 12.9496 ], [ 92.79545, 12.9498 ], [ 92.79532, 12.94999 ], [ 92.79514, 12.95036 ], [ 92.79426, 12.95099 ], [ 92.79405, 12.95105 ], [ 92.79355, 12.95143 ], [ 92.79331, 12.95151 ], [ 92.79286, 12.95156 ], [ 92.79277, 12.95163 ], [ 92.79256, 12.9519 ], [ 92.79226, 12.95213 ], [ 92.79222, 12.95222 ], [ 92.79222, 12.95247 ], [ 92.79216, 12.95271 ], [ 92.79221, 12.9528 ], [ 92.79232, 12.95287 ], [ 92.79238, 12.95297 ], [ 92.79236, 12.95316 ], [ 92.79229, 12.95338 ], [ 92.79229, 12.95348 ], [ 92.79237, 12.95378 ], [ 92.79237, 12.95389 ], [ 92.79232, 12.95415 ], [ 92.79238, 12.95423 ], [ 92.79238, 12.95427 ], [ 92.79218, 12.95448 ], [ 92.79209, 12.95466 ], [ 92.79208, 12.95553 ], [ 92.79224, 12.95581 ], [ 92.7923, 12.95587 ], [ 92.79229, 12.95595 ], [ 92.79224, 12.95606 ], [ 92.79213, 12.95616 ], [ 92.79213, 12.9563 ], [ 92.79223, 12.95645 ], [ 92.7921, 12.95697 ], [ 92.79224, 12.95713 ], [ 92.79234, 12.95734 ], [ 92.79255, 12.95751 ], [ 92.79272, 12.95783 ], [ 92.79294, 12.95795 ], [ 92.79297, 12.95803 ], [ 92.79296, 12.95815 ], [ 92.79289, 12.95823 ], [ 92.79299, 12.9585 ], [ 92.793, 12.95859 ], [ 92.79292, 12.95882 ], [ 92.79268, 12.95925 ], [ 92.79234, 12.95977 ], [ 92.79232, 12.96002 ], [ 92.7922, 12.96047 ], [ 92.79199, 12.96056 ], [ 92.79186, 12.96066 ], [ 92.79182, 12.96094 ], [ 92.79183, 12.96109 ], [ 92.79191, 12.96117 ], [ 92.79201, 12.9612 ], [ 92.79208, 12.96125 ], [ 92.79209, 12.96136 ], [ 92.79206, 12.96147 ], [ 92.79194, 12.96164 ], [ 92.79188, 12.96183 ], [ 92.79181, 12.96195 ], [ 92.7918, 12.96209 ], [ 92.7919, 12.96229 ], [ 92.79205, 12.96231 ], [ 92.79209, 12.96228 ], [ 92.79216, 12.96228 ], [ 92.79221, 12.96237 ], [ 92.79221, 12.96249 ], [ 92.79213, 12.96258 ], [ 92.792, 12.96319 ], [ 92.79201, 12.9634 ], [ 92.79215, 12.96371 ], [ 92.79231, 12.96398 ], [ 92.79248, 12.96418 ], [ 92.79251, 12.96429 ], [ 92.79236, 12.96446 ], [ 92.79231, 12.96459 ], [ 92.79232, 12.96472 ], [ 92.79239, 12.96482 ], [ 92.79256, 12.96489 ], [ 92.79261, 12.96494 ], [ 92.7926, 12.96505 ], [ 92.79255, 12.96514 ], [ 92.79251, 12.9653 ], [ 92.79238, 12.9655 ], [ 92.79231, 12.96557 ], [ 92.7923, 12.96561 ], [ 92.79262, 12.96605 ], [ 92.79271, 12.96628 ], [ 92.79284, 12.9665 ], [ 92.7929, 12.96666 ], [ 92.79303, 12.96723 ], [ 92.7931, 12.96736 ], [ 92.79322, 12.96741 ], [ 92.79338, 12.96739 ], [ 92.79357, 12.96747 ], [ 92.79369, 12.96757 ], [ 92.79381, 12.96759 ], [ 92.79389, 12.96755 ], [ 92.79411, 12.96726 ], [ 92.7942, 12.96702 ], [ 92.79489, 12.96653 ], [ 92.79514, 12.96624 ], [ 92.79551, 12.96574 ], [ 92.79575, 12.96533 ], [ 92.79614, 12.96443 ], [ 92.79623, 12.9643 ], [ 92.79639, 12.96427 ], [ 92.79659, 12.96409 ], [ 92.79664, 12.96413 ], [ 92.79682, 12.9641 ], [ 92.79695, 12.96387 ], [ 92.79706, 12.96383 ], [ 92.79721, 12.96387 ], [ 92.79727, 12.96399 ], [ 92.79718, 12.96432 ], [ 92.79713, 12.96463 ], [ 92.79717, 12.96475 ], [ 92.79727, 12.96493 ], [ 92.79723, 12.96515 ], [ 92.79702, 12.9659 ], [ 92.79708, 12.9665 ], [ 92.79717, 12.9667 ], [ 92.79722, 12.96692 ], [ 92.79718, 12.96713 ], [ 92.79709, 12.96728 ], [ 92.79699, 12.96737 ], [ 92.79691, 12.96759 ], [ 92.79694, 12.96774 ], [ 92.79713, 12.96816 ], [ 92.79769, 12.96882 ], [ 92.7983, 12.96929 ], [ 92.79836, 12.96967 ], [ 92.79847, 12.96985 ], [ 92.79848, 12.97003 ], [ 92.79839, 12.97017 ], [ 92.79817, 12.97023 ], [ 92.7981, 12.97023 ], [ 92.79788, 12.97048 ], [ 92.79769, 12.97083 ], [ 92.79752, 12.97092 ], [ 92.7974, 12.97105 ], [ 92.79725, 12.97132 ], [ 92.79716, 12.97177 ], [ 92.79706, 12.97195 ], [ 92.79689, 12.97216 ], [ 92.79628, 12.97265 ], [ 92.79626, 12.97275 ], [ 92.79648, 12.97285 ], [ 92.79665, 12.9729 ], [ 92.7967, 12.97297 ], [ 92.79659, 12.97305 ], [ 92.79651, 12.97323 ], [ 92.79648, 12.97336 ], [ 92.79612, 12.97365 ], [ 92.79577, 12.97406 ], [ 92.79574, 12.97421 ], [ 92.7948, 12.97534 ], [ 92.79446, 12.97582 ], [ 92.79427, 12.97613 ], [ 92.79411, 12.97627 ], [ 92.79403, 12.97623 ], [ 92.79404, 12.97599 ], [ 92.79396, 12.97587 ], [ 92.79396, 12.97575 ], [ 92.7939, 12.97579 ], [ 92.79386, 12.97595 ], [ 92.79383, 12.97623 ], [ 92.79373, 12.97641 ], [ 92.79373, 12.97657 ], [ 92.79384, 12.97658 ], [ 92.79389, 12.97673 ], [ 92.79396, 12.97679 ], [ 92.79412, 12.97683 ], [ 92.79413, 12.97691 ], [ 92.79405, 12.97709 ], [ 92.79394, 12.9777 ], [ 92.79383, 12.9778 ], [ 92.7937, 12.97784 ], [ 92.79363, 12.97781 ], [ 92.79359, 12.97773 ], [ 92.79361, 12.97756 ], [ 92.79355, 12.97753 ], [ 92.7935, 12.97767 ], [ 92.79328, 12.97891 ], [ 92.79309, 12.97966 ], [ 92.79303, 12.98035 ], [ 92.79311, 12.98129 ], [ 92.79337, 12.98231 ], [ 92.79473, 12.98626 ], [ 92.79484, 12.98644 ], [ 92.79486, 12.98708 ], [ 92.79495, 12.98733 ], [ 92.79522, 12.98766 ], [ 92.79542, 12.9878 ], [ 92.79554, 12.9878 ], [ 92.79569, 12.98768 ], [ 92.79598, 12.98753 ], [ 92.79614, 12.9875 ], [ 92.7964, 12.98763 ], [ 92.79702, 12.98836 ], [ 92.79722, 12.9887 ], [ 92.79781, 12.98936 ], [ 92.79796, 12.98963 ], [ 92.79802, 12.9898 ], [ 92.79818, 12.98997 ], [ 92.79831, 12.99006 ], [ 92.79902, 12.99025 ], [ 92.79922, 12.9904 ], [ 92.79969, 12.99089 ], [ 92.79998, 12.99142 ], [ 92.80015, 12.99157 ], [ 92.80033, 12.99155 ], [ 92.80061, 12.99141 ], [ 92.80086, 12.99116 ], [ 92.80124, 12.99071 ], [ 92.80129, 12.99057 ], [ 92.8013, 12.99028 ], [ 92.80138, 12.98996 ], [ 92.8017, 12.98935 ], [ 92.80199, 12.98907 ], [ 92.80226, 12.98874 ], [ 92.80254, 12.98834 ], [ 92.80268, 12.98805 ], [ 92.80274, 12.98757 ], [ 92.8029, 12.98691 ], [ 92.80297, 12.98644 ], [ 92.80306, 12.98603 ], [ 92.80328, 12.98533 ], [ 92.80347, 12.98493 ], [ 92.80363, 12.98467 ], [ 92.8039, 12.9845 ], [ 92.80412, 12.98448 ], [ 92.80433, 12.98436 ], [ 92.80452, 12.98416 ], [ 92.80468, 12.98404 ], [ 92.80501, 12.98362 ], [ 92.80521, 12.98343 ], [ 92.80554, 12.98319 ], [ 92.80635, 12.98294 ], [ 92.80694, 12.98284 ], [ 92.80766, 12.98285 ], [ 92.80825, 12.98307 ], [ 92.80858, 12.9831 ], [ 92.8089, 12.98318 ], [ 92.80973, 12.98331 ], [ 92.80988, 12.98343 ], [ 92.81, 12.98357 ], [ 92.81052, 12.98378 ], [ 92.81088, 12.98406 ], [ 92.81111, 12.9842 ], [ 92.81129, 12.98421 ], [ 92.8114, 12.98416 ], [ 92.81157, 12.98397 ], [ 92.81173, 12.98363 ], [ 92.81186, 12.98315 ], [ 92.81226, 12.98267 ], [ 92.81238, 12.98262 ], [ 92.8124, 12.982627272727271 ], [ 92.8126, 12.9827 ], [ 92.81271, 12.98274 ], [ 92.81297, 12.98273 ], [ 92.81313, 12.98269 ], [ 92.81321, 12.98261 ], [ 92.81333, 12.98265 ], [ 92.81339, 12.98281 ], [ 92.81381, 12.98306 ], [ 92.81457, 12.98363 ], [ 92.81506, 12.9841 ], [ 92.81533, 12.98459 ], [ 92.81559, 12.98483 ], [ 92.81566, 12.98495 ], [ 92.81568, 12.98507 ], [ 92.8156, 12.98521 ], [ 92.81558, 12.98537 ], [ 92.81548, 12.98557 ], [ 92.81543, 12.98576 ], [ 92.81543, 12.98588 ], [ 92.81577, 12.98627 ], [ 92.81591, 12.98632 ], [ 92.81609, 12.98642 ], [ 92.81614, 12.98655 ], [ 92.81629, 12.98662 ], [ 92.81659, 12.98666 ], [ 92.81691, 12.98674 ], [ 92.81711, 12.98673 ], [ 92.81842, 12.98573 ], [ 92.81854, 12.98568 ], [ 92.81864, 12.98567 ], [ 92.81873, 12.98579 ], [ 92.81873, 12.98595 ], [ 92.81866, 12.98605 ], [ 92.81866, 12.98616 ], [ 92.81876, 12.98629 ], [ 92.81898, 12.98647 ], [ 92.819, 12.98656 ], [ 92.81897, 12.9867 ], [ 92.81901, 12.98686 ], [ 92.81927, 12.98729 ], [ 92.81937, 12.98771 ], [ 92.81926, 12.98793 ], [ 92.8193, 12.98803 ], [ 92.81971, 12.98809 ], [ 92.8199, 12.98814 ], [ 92.81992, 12.9882 ], [ 92.8199, 12.98825 ], [ 92.81975, 12.9883 ], [ 92.81922, 12.98841 ], [ 92.81918, 12.98858 ], [ 92.81918, 12.98878 ], [ 92.81927, 12.98927 ], [ 92.81917, 12.98951 ], [ 92.81896, 12.98985 ], [ 92.81866, 12.99011 ], [ 92.8179, 12.99071 ], [ 92.81781, 12.99085 ], [ 92.81685, 12.99144 ], [ 92.81653, 12.99151 ], [ 92.81613, 12.99154 ], [ 92.81567, 12.99154 ], [ 92.81501, 12.99147 ], [ 92.81466, 12.99134 ], [ 92.81442, 12.99134 ], [ 92.81397, 12.99144 ], [ 92.81377, 12.99154 ], [ 92.81331, 12.99195 ], [ 92.81289, 12.99244 ], [ 92.81277, 12.99261 ], [ 92.81262, 12.99317 ], [ 92.8126, 12.993221428571408 ], [ 92.81248, 12.99353 ], [ 92.81241, 12.99381 ], [ 92.8124, 12.993815789473686 ] ] ], [ [ [ 88.040526, 21.6787763 ], [ 88.0401299, 21.6810959 ], [ 88.0409581, 21.6813483 ], [ 88.0409545, 21.6808332 ], [ 88.0412299, 21.6808315 ], [ 88.0419458, 21.684689 ], [ 88.0422231, 21.6849447 ], [ 88.0429252, 21.6867427 ], [ 88.0440316, 21.6873789 ], [ 88.0478844, 21.6868396 ], [ 88.048158, 21.6865805 ], [ 88.049808, 21.6861842 ], [ 88.0502263, 21.686954 ], [ 88.050513, 21.688497 ], [ 88.0510713, 21.6895233 ], [ 88.0510788, 21.6905531 ], [ 88.0509424, 21.6906822 ], [ 88.0503924, 21.6908149 ], [ 88.0505372, 21.6918438 ], [ 88.0513786, 21.6938982 ], [ 88.0516559, 21.6941539 ], [ 88.0523693, 21.6974964 ], [ 88.0529231, 21.6978786 ], [ 88.053475, 21.6980043 ], [ 88.0538915, 21.6985166 ], [ 88.0544519, 21.6998003 ], [ 88.0548993, 21.7044318 ], [ 88.0543483, 21.7044354 ], [ 88.0556177, 21.7085467 ], [ 88.0558949, 21.7088024 ], [ 88.0561873, 21.7111176 ], [ 88.0559157, 21.7116344 ], [ 88.0552302, 21.7120245 ], [ 88.0544047, 21.7121588 ], [ 88.0542796, 21.7139619 ], [ 88.0540078, 21.7144784 ], [ 88.0540097, 21.714736 ], [ 88.0548492, 21.7165329 ], [ 88.0548568, 21.7175627 ], [ 88.0551342, 21.7178184 ], [ 88.0570928, 21.7219252 ], [ 88.0582026, 21.7229481 ], [ 88.0590499, 21.7257748 ], [ 88.0608715, 21.7298825 ], [ 88.0617029, 21.7305204 ], [ 88.0619785, 21.7305185 ], [ 88.0633533, 21.730124 ], [ 88.0635039, 21.7319252 ], [ 88.0633684, 21.7321836 ], [ 88.0650255, 21.7326878 ], [ 88.065444, 21.7334574 ], [ 88.0653162, 21.7347457 ], [ 88.0636619, 21.7346272 ], [ 88.0635247, 21.7347572 ], [ 88.0636706, 21.7357861 ], [ 88.065605, 21.7365461 ], [ 88.0661677, 21.7380872 ], [ 88.0667216, 21.7384693 ], [ 88.0692024, 21.7385826 ], [ 88.0699004, 21.7398653 ], [ 88.0707728, 21.7460388 ], [ 88.0714852, 21.7491237 ], [ 88.0759078, 21.7508972 ], [ 88.0760489, 21.7514111 ], [ 88.0757946, 21.7542448 ], [ 88.0747114, 21.7568265 ], [ 88.0744491, 21.7586304 ], [ 88.0741754, 21.7588897 ], [ 88.074042, 21.7594054 ], [ 88.0729416, 21.75967 ], [ 88.0728242, 21.7625028 ], [ 88.0739785, 21.7694468 ], [ 88.0749609, 21.7717575 ], [ 88.0760633, 21.7717504 ], [ 88.0764974, 21.7745795 ], [ 88.0767768, 21.7750926 ], [ 88.0767826, 21.7758651 ], [ 88.0779006, 21.7779174 ], [ 88.0787331, 21.7786844 ], [ 88.0791548, 21.7797114 ], [ 88.0813744, 21.7816275 ], [ 88.0827583, 21.7823907 ], [ 88.0849635, 21.7823763 ], [ 88.0877246, 21.7830023 ], [ 88.0889762, 21.7845387 ], [ 88.0893999, 21.7858233 ], [ 88.0891234, 21.7856959 ], [ 88.0869182, 21.7857105 ], [ 88.0854065, 21.7863644 ], [ 88.0854201, 21.7881665 ], [ 88.0856997, 21.7886796 ], [ 88.0858864, 21.7951149 ], [ 88.0864377, 21.7951111 ], [ 88.0874156, 21.796907 ], [ 88.0882582, 21.7989611 ], [ 88.0888153, 21.7997297 ], [ 88.0893725, 21.8004986 ], [ 88.0899473, 21.8035842 ], [ 88.0905084, 21.8048677 ], [ 88.0910637, 21.8053789 ], [ 88.0919102, 21.807948 ], [ 88.0921878, 21.8082035 ], [ 88.0928892, 21.8097437 ], [ 88.0937184, 21.8099956 ], [ 88.0944129, 21.8107635 ], [ 88.0952557, 21.8128176 ], [ 88.095811, 21.8133288 ], [ 88.0969295, 21.815381 ], [ 88.0974848, 21.8158922 ], [ 88.0986367, 21.8223209 ], [ 88.0997533, 21.8241156 ], [ 88.1000408, 21.8256584 ], [ 88.1032714, 21.8333606 ], [ 88.1041005, 21.8336125 ], [ 88.1047953, 21.8343802 ], [ 88.1061878, 21.8361731 ], [ 88.1067531, 21.8379714 ], [ 88.1087112, 21.8415628 ], [ 88.1098221, 21.8425851 ], [ 88.1105278, 21.8446399 ], [ 88.1116329, 21.84489 ], [ 88.1126055, 21.8459132 ], [ 88.1127539, 21.8471995 ], [ 88.1133054, 21.8471958 ], [ 88.1133094, 21.8477106 ], [ 88.1166416, 21.8506484 ], [ 88.1171941, 21.8507739 ], [ 88.1184566, 21.8535974 ], [ 88.1187444, 21.85514 ], [ 88.1198635, 21.8571921 ], [ 88.1201574, 21.8595072 ], [ 88.1210009, 21.8615611 ], [ 88.1218363, 21.8625853 ], [ 88.1221281, 21.8646429 ], [ 88.1235212, 21.8664356 ], [ 88.1239434, 21.8674624 ], [ 88.1247728, 21.8677142 ], [ 88.1254679, 21.8684819 ], [ 88.1256102, 21.8689958 ], [ 88.1286654, 21.8716777 ], [ 88.1294968, 21.8721868 ], [ 88.130603, 21.872566 ], [ 88.1340767, 21.875889 ], [ 88.1342192, 21.8764029 ], [ 88.1350517, 21.8770404 ], [ 88.1358801, 21.8771638 ], [ 88.1365569, 21.8756144 ], [ 88.1371045, 21.8750957 ], [ 88.1375125, 21.8743205 ], [ 88.1372368, 21.8743225 ], [ 88.1372347, 21.8740649 ], [ 88.1375106, 21.874063 ], [ 88.1379136, 21.8727731 ], [ 88.1379094, 21.8722583 ], [ 88.1387246, 21.8707079 ], [ 88.1387206, 21.8701929 ], [ 88.1395316, 21.8681277 ], [ 88.1403509, 21.8670923 ], [ 88.1403467, 21.8665773 ], [ 88.1411598, 21.8647695 ], [ 88.1417053, 21.8639935 ], [ 88.1422526, 21.8634747 ], [ 88.1422487, 21.8629599 ], [ 88.1426546, 21.8619274 ], [ 88.1434768, 21.8612776 ], [ 88.1440294, 21.8614029 ], [ 88.1438828, 21.860374 ], [ 88.1441504, 21.8593424 ], [ 88.1440109, 21.8590859 ], [ 88.145112, 21.8588208 ], [ 88.1449674, 21.8580495 ], [ 88.1452413, 21.8577901 ], [ 88.1452371, 21.8572751 ], [ 88.1457784, 21.8559843 ], [ 88.1457743, 21.8554692 ], [ 88.1463156, 21.8541784 ], [ 88.1463114, 21.8536633 ], [ 88.1471326, 21.8528854 ], [ 88.1476656, 21.8505645 ], [ 88.1479311, 21.8492755 ], [ 88.1484764, 21.8484993 ], [ 88.1484703, 21.847727 ], [ 88.148744, 21.8474675 ], [ 88.1490135, 21.8466934 ], [ 88.1490075, 21.8459211 ], [ 88.1495507, 21.8448875 ], [ 88.1495465, 21.8443727 ], [ 88.1500899, 21.843339 ], [ 88.1500837, 21.8425668 ], [ 88.1506248, 21.8412757 ], [ 88.1506208, 21.8407609 ], [ 88.1514376, 21.8394677 ], [ 88.1514335, 21.8389529 ], [ 88.1517072, 21.8386936 ], [ 88.1519767, 21.8379193 ], [ 88.1522503, 21.8376599 ], [ 88.1522464, 21.8371451 ], [ 88.1533369, 21.8355929 ], [ 88.153878, 21.8343018 ], [ 88.1541517, 21.8340423 ], [ 88.1544212, 21.8332682 ], [ 88.1549685, 21.8327493 ], [ 88.156057, 21.8309397 ], [ 88.1566043, 21.8304209 ], [ 88.1568739, 21.8296465 ], [ 88.1585157, 21.8280903 ], [ 88.1587852, 21.8273162 ], [ 88.159606, 21.8265381 ], [ 88.1597381, 21.8257647 ], [ 88.1602897, 21.8257609 ], [ 88.1602855, 21.825246 ], [ 88.1608338, 21.8248554 ], [ 88.1613842, 21.8247233 ], [ 88.1619253, 21.8234322 ], [ 88.1627502, 21.8231689 ], [ 88.1637064, 21.8221325 ], [ 88.1638406, 21.8216167 ], [ 88.164391, 21.8214836 ], [ 88.1646646, 21.8212241 ], [ 88.165215, 21.821092 ], [ 88.1654845, 21.8203177 ], [ 88.1663084, 21.8199253 ], [ 88.1668557, 21.8194065 ], [ 88.1674061, 21.8192744 ], [ 88.1674019, 21.8187596 ], [ 88.1679532, 21.8187556 ], [ 88.1680865, 21.8182398 ], [ 88.167947, 21.8179833 ], [ 88.1684983, 21.8179794 ], [ 88.1689073, 21.8174615 ], [ 88.1694524, 21.8166853 ], [ 88.1697217, 21.8159111 ], [ 88.170267, 21.8151349 ], [ 88.1708141, 21.8146161 ], [ 88.1708079, 21.8138437 ], [ 88.171353, 21.8130675 ], [ 88.1714849, 21.8122943 ], [ 88.1703802, 21.8120446 ], [ 88.1699515, 21.8102455 ], [ 88.1692575, 21.8096063 ], [ 88.1678729, 21.8088439 ], [ 88.1667618, 21.8078218 ], [ 88.1657913, 21.8071856 ], [ 88.1652335, 21.8064171 ], [ 88.1641122, 21.8041079 ], [ 88.1635338, 21.8007651 ], [ 88.1634985, 21.7963886 ], [ 88.1640101, 21.7914935 ], [ 88.164551, 21.7902024 ], [ 88.1650878, 21.7883963 ], [ 88.1650836, 21.7878815 ], [ 88.1653573, 21.7876222 ], [ 88.1667124, 21.7847806 ], [ 88.1669861, 21.7845213 ], [ 88.166982, 21.7840064 ], [ 88.1678026, 21.7832281 ], [ 88.168074, 21.7827114 ], [ 88.1680678, 21.7819392 ], [ 88.1683412, 21.7816797 ], [ 88.1683392, 21.7814222 ], [ 88.1680594, 21.7809093 ], [ 88.1681257, 21.7789986 ], [ 88.1682828, 21.7744714 ], [ 88.1685544, 21.7739547 ], [ 88.168707, 21.7587638 ], [ 88.1681475, 21.7577379 ], [ 88.1678655, 21.7569675 ], [ 88.1678614, 21.7564527 ], [ 88.1684023, 21.7551616 ], [ 88.1683896, 21.7536169 ], [ 88.1678323, 21.7528485 ], [ 88.1674153, 21.7523365 ], [ 88.1679665, 21.7523327 ], [ 88.1678198, 21.751304 ], [ 88.1680933, 21.7510445 ], [ 88.1683626, 21.7502701 ], [ 88.1683335, 21.7466661 ], [ 88.1694044, 21.7427967 ], [ 88.1699513, 21.7422779 ], [ 88.1699451, 21.7415056 ], [ 88.1696675, 21.7412501 ], [ 88.1690872, 21.7376498 ], [ 88.1688096, 21.7373943 ], [ 88.168507, 21.7340496 ], [ 88.1679517, 21.7335385 ], [ 88.1676699, 21.7327682 ], [ 88.1671148, 21.7322573 ], [ 88.1665533, 21.730974 ], [ 88.1662757, 21.7307185 ], [ 88.1657122, 21.7291777 ], [ 88.1654346, 21.7289222 ], [ 88.164871, 21.7273815 ], [ 88.1647192, 21.7255803 ], [ 88.1641683, 21.7255841 ], [ 88.1639886, 21.7204363 ], [ 88.1634314, 21.7196678 ], [ 88.1628761, 21.7191568 ], [ 88.1610663, 21.7167232 ], [ 88.1596856, 21.7163473 ], [ 88.1592594, 21.7148054 ], [ 88.1553305, 21.7058219 ], [ 88.1550406, 21.7040218 ], [ 88.1541997, 21.7022254 ], [ 88.1539141, 21.7009402 ], [ 88.1522488, 21.699407 ], [ 88.1516898, 21.6983809 ], [ 88.1516733, 21.6963214 ], [ 88.1491472, 21.6904174 ], [ 88.1488574, 21.6886174 ], [ 88.1477393, 21.6865654 ], [ 88.1463275, 21.6821984 ], [ 88.1459096, 21.6815571 ], [ 88.1401113, 21.6797949 ], [ 88.1379068, 21.6796818 ], [ 88.1379007, 21.6789094 ], [ 88.1329357, 21.6780419 ], [ 88.1296325, 21.6783218 ], [ 88.129359, 21.6785811 ], [ 88.1282604, 21.6789754 ], [ 88.1281262, 21.6794911 ], [ 88.126759, 21.6807877 ], [ 88.1263513, 21.6814337 ], [ 88.1259427, 21.6820804 ], [ 88.1253997, 21.6831141 ], [ 88.1254037, 21.6836289 ], [ 88.1258334, 21.6856856 ], [ 88.1261088, 21.6856839 ], [ 88.1261149, 21.6864562 ], [ 88.1263902, 21.6864543 ], [ 88.1262969, 21.6866238 ], [ 88.1258414, 21.6867155 ], [ 88.1251343, 21.6844031 ], [ 88.1251222, 21.6828585 ], [ 88.1258024, 21.6816949 ], [ 88.1264815, 21.6805321 ], [ 88.1278487, 21.6792356 ], [ 88.1279829, 21.6787196 ], [ 88.1301793, 21.6778032 ], [ 88.1334845, 21.6777807 ], [ 88.1395482, 21.6782541 ], [ 88.1398247, 21.6783813 ], [ 88.1403573, 21.6760606 ], [ 88.1439398, 21.6762933 ], [ 88.1442093, 21.6755191 ], [ 88.1447601, 21.6755153 ], [ 88.1451687, 21.6749977 ], [ 88.1457074, 21.6734492 ], [ 88.1455478, 21.6706182 ], [ 88.1469228, 21.6703513 ], [ 88.1467582, 21.6670054 ], [ 88.1456321, 21.6639238 ], [ 88.1453405, 21.6618661 ], [ 88.1447814, 21.66084 ], [ 88.144871, 21.6546605 ], [ 88.1459725, 21.6546529 ], [ 88.1456788, 21.6523377 ], [ 88.1448567, 21.6528584 ], [ 88.1449858, 21.6518276 ], [ 88.1452572, 21.6513109 ], [ 88.1449635, 21.6489958 ], [ 88.1450266, 21.6394693 ], [ 88.145302, 21.6394674 ], [ 88.1460041, 21.6412648 ], [ 88.1462813, 21.6415203 ], [ 88.1464237, 21.6420344 ], [ 88.1469744, 21.6420304 ], [ 88.1469784, 21.6425454 ], [ 88.1475322, 21.6429272 ], [ 88.148084, 21.6430527 ], [ 88.1504426, 21.6453534 ], [ 88.1505847, 21.6458675 ], [ 88.1514129, 21.646119 ], [ 88.1521069, 21.6468867 ], [ 88.1523864, 21.6473997 ], [ 88.152541, 21.6494583 ], [ 88.1530918, 21.6494545 ], [ 88.1535083, 21.6499665 ], [ 88.1535206, 21.651511 ], [ 88.1538022, 21.6522816 ], [ 88.1550542, 21.6538176 ], [ 88.1539527, 21.6538251 ], [ 88.1538206, 21.6545985 ], [ 88.1534131, 21.6552445 ], [ 88.1528644, 21.6555057 ], [ 88.1521806, 21.6561546 ], [ 88.1521825, 21.6564122 ], [ 88.1527457, 21.6579529 ], [ 88.15358, 21.6589769 ], [ 88.1534633, 21.6615524 ], [ 88.1540162, 21.661806 ], [ 88.1541309, 21.6589731 ], [ 88.1535698, 21.6576898 ], [ 88.1527355, 21.6566658 ], [ 88.1528674, 21.6558924 ], [ 88.1545157, 21.655366 ], [ 88.1549241, 21.6548484 ], [ 88.1550583, 21.6543324 ], [ 88.1567168, 21.6550933 ], [ 88.1568459, 21.6540625 ], [ 88.1559806, 21.6491769 ], [ 88.1558251, 21.6468609 ], [ 88.1547204, 21.6464819 ], [ 88.1534675, 21.6448176 ], [ 88.1533222, 21.6437887 ], [ 88.1527714, 21.6437926 ], [ 88.1523498, 21.6427656 ], [ 88.1515195, 21.6422564 ], [ 88.1511018, 21.6416153 ], [ 88.1505501, 21.6414908 ], [ 88.1502666, 21.640463 ], [ 88.1497147, 21.6403375 ], [ 88.1492982, 21.6399548 ], [ 88.1487393, 21.6389287 ], [ 88.1480483, 21.6385469 ], [ 88.1466614, 21.6372693 ], [ 88.1461086, 21.6370155 ], [ 88.1449992, 21.6359934 ], [ 88.1430636, 21.6349769 ], [ 88.1425087, 21.6344657 ], [ 88.1394719, 21.6334568 ], [ 88.1386457, 21.6334625 ], [ 88.1378259, 21.6342404 ], [ 88.1361727, 21.6341234 ], [ 88.1357512, 21.6330966 ], [ 88.1353356, 21.6327127 ], [ 88.1343664, 21.6320761 ], [ 88.1338056, 21.6307926 ], [ 88.132562, 21.630157 ], [ 88.130082, 21.6299164 ], [ 88.1278731, 21.6291591 ], [ 88.1270472, 21.6291646 ], [ 88.1264983, 21.6294258 ], [ 88.1196108, 21.6289575 ], [ 88.1154689, 21.6274405 ], [ 88.109958, 21.6269626 ], [ 88.1080268, 21.6264604 ], [ 88.1030707, 21.6264935 ], [ 88.0934405, 21.6274587 ], [ 88.0934443, 21.6279735 ], [ 88.0879384, 21.6281379 ], [ 88.0805146, 21.6296029 ], [ 88.0807976, 21.6306309 ], [ 88.0835502, 21.6304838 ], [ 88.084382, 21.6312508 ], [ 88.0849346, 21.6315046 ], [ 88.0857664, 21.6322716 ], [ 88.0868688, 21.6323935 ], [ 88.0878397, 21.6334169 ], [ 88.0884001, 21.6347006 ], [ 88.0892321, 21.6354676 ], [ 88.0896534, 21.6364946 ], [ 88.0904814, 21.6367467 ], [ 88.091175, 21.6375146 ], [ 88.0920089, 21.638539 ], [ 88.092288, 21.6390519 ], [ 88.0923152, 21.6426564 ], [ 88.092608, 21.6449714 ], [ 88.0922109, 21.6470338 ], [ 88.091518, 21.6465235 ], [ 88.0906475, 21.6406076 ], [ 88.0898117, 21.6393258 ], [ 88.0891189, 21.6386862 ], [ 88.0863653, 21.6387042 ], [ 88.0813933, 21.636677 ], [ 88.0806997, 21.6360381 ], [ 88.0800051, 21.6351412 ], [ 88.0794534, 21.6350164 ], [ 88.0791724, 21.6342459 ], [ 88.08055, 21.6343653 ], [ 88.0810998, 21.6342334 ], [ 88.0813848, 21.6355188 ], [ 88.0827596, 21.6352525 ], [ 88.0830253, 21.6339633 ], [ 88.0821984, 21.6338395 ], [ 88.0802633, 21.6328223 ], [ 88.0747524, 21.6323432 ], [ 88.0692529, 21.6334084 ], [ 88.0684305, 21.6339287 ], [ 88.0656798, 21.634333 ], [ 88.0655474, 21.6351062 ], [ 88.0652739, 21.6353655 ], [ 88.0643247, 21.637302 ], [ 88.0629497, 21.6375683 ], [ 88.0615785, 21.6383494 ], [ 88.0607562, 21.6388696 ], [ 88.0599376, 21.6399047 ], [ 88.0581539, 21.6408176 ], [ 88.057746, 21.6414634 ], [ 88.056371, 21.6417297 ], [ 88.0550034, 21.6430257 ], [ 88.0530813, 21.6438102 ], [ 88.0519874, 21.6448471 ], [ 88.0495164, 21.6458926 ], [ 88.0481488, 21.6471886 ], [ 88.0470499, 21.6475821 ], [ 88.0469155, 21.6480979 ], [ 88.0452743, 21.649653 ], [ 88.0450082, 21.6509419 ], [ 88.043914, 21.6519788 ], [ 88.0428347, 21.655075 ], [ 88.042574, 21.6571364 ], [ 88.041478, 21.6579157 ], [ 88.0416217, 21.6586872 ], [ 88.0430025, 21.6591935 ], [ 88.0428717, 21.6602241 ], [ 88.0420584, 21.6620315 ], [ 88.0417848, 21.6622906 ], [ 88.0407035, 21.6651296 ], [ 88.0399031, 21.6687391 ], [ 88.0399216, 21.6713137 ], [ 88.0396498, 21.6718302 ], [ 88.0396867, 21.6769793 ], [ 88.040526, 21.6787763 ] ] ], [ [ [ 89.0000101, 21.7632956 ], [ 89.0012117, 21.764571 ], [ 89.0024134, 21.764571 ], [ 89.0058466, 21.764571 ], [ 89.0106531, 21.764571 ], [ 89.0135713, 21.7642522 ], [ 89.0163179, 21.7629768 ], [ 89.0180345, 21.7615419 ], [ 89.0209528, 21.7581939 ], [ 89.0226694, 21.7570779 ], [ 89.024386, 21.7565996 ], [ 89.0261026, 21.7554836 ], [ 89.0279909, 21.7534109 ], [ 89.0315958, 21.7487871 ], [ 89.0372606, 21.7422499 ], [ 89.0381189, 21.7409743 ], [ 89.034514, 21.7398581 ], [ 89.0319391, 21.7377852 ], [ 89.0300508, 21.7353934 ], [ 89.0288492, 21.7323637 ], [ 89.0285059, 21.7285366 ], [ 89.0288492, 21.7250283 ], [ 89.0297075, 21.7223173 ], [ 89.0310808, 21.7200847 ], [ 89.0273043, 21.7189684 ], [ 89.0224977, 21.7175331 ], [ 89.0206095, 21.7170547 ], [ 89.0178629, 21.7183305 ], [ 89.0176912, 21.7210415 ], [ 89.0180345, 21.7269419 ], [ 89.0176912, 21.729015 ], [ 89.0171762, 21.7317258 ], [ 89.0158029, 21.7334799 ], [ 89.0087648, 21.7408148 ], [ 89.0048166, 21.7449605 ], [ 89.002585, 21.7483088 ], [ 89.001555, 21.7546864 ], [ 89.0003534, 21.7602665 ], [ 89.0000101, 21.7632956 ] ] ], [ [ [ 88.29914, 21.70631 ], [ 88.29854, 21.706 ], [ 88.2972, 21.7061 ], [ 88.29489, 21.70734 ], [ 88.29295, 21.7094 ], [ 88.28954, 21.71383 ], [ 88.28681, 21.71785 ], [ 88.28533, 21.71993 ], [ 88.28428, 21.72187 ], [ 88.28272, 21.72427 ], [ 88.28104, 21.72584 ], [ 88.27851, 21.72798 ], [ 88.27759, 21.73065 ], [ 88.27701, 21.73475 ], [ 88.27736, 21.7379 ], [ 88.27841, 21.74063 ], [ 88.281, 21.74434 ], [ 88.28401, 21.74906 ], [ 88.28597, 21.75442 ], [ 88.2866, 21.75758 ], [ 88.28638, 21.76576 ], [ 88.28581, 21.76994 ], [ 88.2863, 21.77234 ], [ 88.28856, 21.77779 ], [ 88.28931, 21.77943 ], [ 88.29103, 21.77704 ], [ 88.29431, 21.77342 ], [ 88.29688, 21.77047 ], [ 88.29922, 21.76541 ], [ 88.30145, 21.75911 ], [ 88.3028, 21.75359 ], [ 88.30385, 21.74364 ], [ 88.30503, 21.73741 ], [ 88.3056, 21.73317 ], [ 88.30514, 21.73072 ], [ 88.30323, 21.72681 ], [ 88.30146, 21.72254 ], [ 88.30008, 21.71744 ], [ 88.30017, 21.71465 ], [ 88.30145, 21.71027 ], [ 88.30167, 21.70889 ], [ 88.29953, 21.70657 ], [ 88.29938, 21.70645 ], [ 88.29914, 21.70631 ] ] ], [ [ [ 88.7127563, 21.796975 ], [ 88.7127563, 21.798853 ], [ 88.712413, 21.8010844 ], [ 88.711898, 21.8023594 ], [ 88.711898, 21.804272 ], [ 88.7120696, 21.8061846 ], [ 88.7136146, 21.8065033 ], [ 88.7165328, 21.8066627 ], [ 88.7175628, 21.8055471 ], [ 88.7191077, 21.8039533 ], [ 88.7192794, 21.8026782 ], [ 88.7203094, 21.8006062 ], [ 88.7211677, 21.7972591 ], [ 88.721298036075595, 21.796775 ], [ 88.7218543, 21.7947089 ], [ 88.7240859, 21.7929556 ], [ 88.7258025, 21.792318 ], [ 88.7273475, 21.791521 ], [ 88.7273475, 21.7892895 ], [ 88.7275192, 21.7870579 ], [ 88.7276908, 21.7854639 ], [ 88.7270042, 21.7825946 ], [ 88.7270042, 21.7797253 ], [ 88.7288924, 21.7778124 ], [ 88.7280341, 21.7770154 ], [ 88.7268325, 21.7746242 ], [ 88.7283775, 21.7743054 ], [ 88.7285491, 21.7758995 ], [ 88.7299224, 21.7766966 ], [ 88.7307807, 21.7779718 ], [ 88.7319823, 21.7787689 ], [ 88.7338706, 21.7784501 ], [ 88.7347289, 21.776856 ], [ 88.7355872, 21.7746242 ], [ 88.7367889, 21.7738271 ], [ 88.7388488, 21.7733489 ], [ 88.7452003, 21.7719141 ], [ 88.7476035, 21.7655373 ], [ 88.7491485, 21.7637837 ], [ 88.7513801, 21.7626677 ], [ 88.7537833, 21.7615517 ], [ 88.7567016, 21.760914 ], [ 88.7585899, 21.7602763 ], [ 88.7594482, 21.758682 ], [ 88.7584182, 21.7570877 ], [ 88.7570449, 21.7559716 ], [ 88.754985, 21.7537395 ], [ 88.753955, 21.751348 ], [ 88.7530967, 21.7497536 ], [ 88.7512084, 21.7500724 ], [ 88.7493201, 21.7508696 ], [ 88.7505218, 21.7497536 ], [ 88.7524101, 21.7478402 ], [ 88.7524101, 21.7468836 ], [ 88.7520667, 21.7446514 ], [ 88.7508651, 21.7387517 ], [ 88.7510368, 21.7357221 ], [ 88.7510368, 21.7336491 ], [ 88.75344, 21.7309383 ], [ 88.7556716, 21.7296626 ], [ 88.7585899, 21.7279085 ], [ 88.7611648, 21.7266327 ], [ 88.7647697, 21.7256759 ], [ 88.7688895, 21.725357 ], [ 88.7724944, 21.7251975 ], [ 88.7743827, 21.7244002 ], [ 88.775756, 21.7223271 ], [ 88.776786, 21.7208918 ], [ 88.7766143, 21.7192971 ], [ 88.7743827, 21.7181808 ], [ 88.7709495, 21.7164265 ], [ 88.7663146, 21.7148317 ], [ 88.7623664, 21.7132369 ], [ 88.7608215, 21.7110042 ], [ 88.7585899, 21.7113231 ], [ 88.7568732, 21.7111637 ], [ 88.7553283, 21.7103662 ], [ 88.7536117, 21.7090903 ], [ 88.7503501, 21.7071765 ], [ 88.7484618, 21.7071765 ], [ 88.7472602, 21.7071765 ], [ 88.7450286, 21.7086119 ], [ 88.743827, 21.7100473 ], [ 88.7434837, 21.7121206 ], [ 88.7436553, 21.7140343 ], [ 88.7434837, 21.7164265 ], [ 88.7412521, 21.7175429 ], [ 88.7393638, 21.7186592 ], [ 88.7369605, 21.7192971 ], [ 88.7349006, 21.7200945 ], [ 88.7330123, 21.719616 ], [ 88.7357589, 21.7188187 ], [ 88.7386771, 21.7181808 ], [ 88.7405654, 21.7172239 ], [ 88.742282, 21.7159481 ], [ 88.7424537, 21.7145128 ], [ 88.7424537, 21.7124395 ], [ 88.7426254, 21.7103662 ], [ 88.7434837, 21.7089309 ], [ 88.744857, 21.707017 ], [ 88.7467452, 21.7060601 ], [ 88.7488052, 21.7055816 ], [ 88.7505218, 21.7055816 ], [ 88.7524101, 21.7065385 ], [ 88.753955, 21.7074955 ], [ 88.7558433, 21.7087714 ], [ 88.7573882, 21.7095688 ], [ 88.7591048, 21.7095688 ], [ 88.7573882, 21.7059006 ], [ 88.7567016, 21.7030297 ], [ 88.7565299, 21.7003183 ], [ 88.7577316, 21.6977664 ], [ 88.7597915, 21.6955334 ], [ 88.7630531, 21.6934599 ], [ 88.7620231, 21.6896317 ], [ 88.7615081, 21.6870796 ], [ 88.7601348, 21.6845274 ], [ 88.7587615, 21.6835703 ], [ 88.7558433, 21.6834108 ], [ 88.7532684, 21.6840489 ], [ 88.7501785, 21.6838893 ], [ 88.7481185, 21.6835703 ], [ 88.7450286, 21.6835703 ], [ 88.744342, 21.6851654 ], [ 88.7446853, 21.686601 ], [ 88.744857, 21.6881962 ], [ 88.7441703, 21.6896317 ], [ 88.7426254, 21.6904293 ], [ 88.7412521, 21.6904293 ], [ 88.7391921, 21.6899507 ], [ 88.7366172, 21.6883557 ], [ 88.7343856, 21.6891532 ], [ 88.7318107, 21.6886747 ], [ 88.7304374, 21.6873986 ], [ 88.7295791, 21.6854845 ], [ 88.7295791, 21.6840489 ], [ 88.7304374, 21.6821347 ], [ 88.7324973, 21.6810181 ], [ 88.7352439, 21.6795824 ], [ 88.7381622, 21.6783062 ], [ 88.7400504, 21.6770301 ], [ 88.7421104, 21.6755944 ], [ 88.7455436, 21.6736801 ], [ 88.7482902, 21.6720848 ], [ 88.7501785, 21.6700109 ], [ 88.752925, 21.6672989 ], [ 88.7556716, 21.6644273 ], [ 88.7558433, 21.6626724 ], [ 88.754985, 21.6609175 ], [ 88.7518951, 21.6601198 ], [ 88.7479469, 21.6588435 ], [ 88.7464019, 21.6596412 ], [ 88.7441703, 21.6625129 ], [ 88.7407371, 21.6665013 ], [ 88.7373039, 21.6700109 ], [ 88.7342139, 21.6728824 ], [ 88.7318107, 21.6747968 ], [ 88.7287208, 21.6771896 ], [ 88.7251159, 21.6797419 ], [ 88.7213393, 21.6814966 ], [ 88.7177345, 21.6834108 ], [ 88.7149879, 21.685325 ], [ 88.7137862, 21.6867606 ], [ 88.7122413, 21.6891532 ], [ 88.7101814, 21.6945764 ], [ 88.710353, 21.6985639 ], [ 88.7091514, 21.6996804 ], [ 88.7081214, 21.7071765 ], [ 88.7072631, 21.7097283 ], [ 88.7060615, 21.7151507 ], [ 88.7050315, 21.7188187 ], [ 88.7031432, 21.7256759 ], [ 88.7014266, 21.732214 ], [ 88.6981651, 21.7371572 ], [ 88.6974784, 21.7393895 ], [ 88.699195, 21.7413029 ], [ 88.6961051, 21.742738 ], [ 88.6962768, 21.7460864 ], [ 88.6966201, 21.7502319 ], [ 88.6978217, 21.7535801 ], [ 88.69971, 21.7572471 ], [ 88.7003967, 21.7588414 ], [ 88.7024566, 21.7585225 ], [ 88.7041732, 21.7570877 ], [ 88.7038299, 21.7585225 ], [ 88.7021133, 21.7601168 ], [ 88.7026283, 21.764262 ], [ 88.7052032, 21.7701606 ], [ 88.7070914, 21.7744648 ], [ 88.7096664, 21.7794065 ], [ 88.7115546, 21.7821164 ], [ 88.7117263, 21.7846669 ], [ 88.7127563, 21.7880143 ], [ 88.7127563, 21.7924774 ], [ 88.7127563, 21.7963028 ], [ 88.7127563, 21.796775 ], [ 88.7127563, 21.796975 ] ] ], [ [ [ 88.3650863, 21.7315158 ], [ 88.3626102, 21.731922 ], [ 88.3615155, 21.7327033 ], [ 88.3608347, 21.7336103 ], [ 88.3607971, 21.7361147 ], [ 88.361827, 21.7396227 ], [ 88.361734, 21.7413263 ], [ 88.3606586, 21.7441669 ], [ 88.3606778, 21.7462263 ], [ 88.3615191, 21.747764 ], [ 88.362353, 21.7485294 ], [ 88.3624962, 21.7490431 ], [ 88.3630509, 21.7494243 ], [ 88.3638823, 21.7499324 ], [ 88.3644346, 21.7500569 ], [ 88.3651303, 21.7508235 ], [ 88.3652736, 21.7513372 ], [ 88.3658245, 21.7513327 ], [ 88.3659715, 21.7523612 ], [ 88.366252, 21.7528738 ], [ 88.3668202, 21.7546712 ], [ 88.3669731, 21.7562146 ], [ 88.3678035, 21.7565933 ], [ 88.3683594, 21.7571036 ], [ 88.3689105, 21.7570991 ], [ 88.3700201, 21.7578623 ], [ 88.3705726, 21.7579868 ], [ 88.3709903, 21.7584982 ], [ 88.3715537, 21.7597808 ], [ 88.3718462, 21.7615805 ], [ 88.3722724, 21.7628641 ], [ 88.3733771, 21.7631123 ], [ 88.3736601, 21.7638823 ], [ 88.3742123, 21.7640061 ], [ 88.3744903, 21.764261 ], [ 88.3761488, 21.7647623 ], [ 88.3764268, 21.7650174 ], [ 88.377256, 21.7652678 ], [ 88.3789192, 21.7662837 ], [ 88.3797461, 21.7662769 ], [ 88.3803021, 21.766787 ], [ 88.3808532, 21.7667825 ], [ 88.3813994, 21.7662631 ], [ 88.3822212, 21.7657413 ], [ 88.3827712, 21.7656084 ], [ 88.3827663, 21.7650936 ], [ 88.3846878, 21.7643053 ], [ 88.3846829, 21.7637904 ], [ 88.3863314, 21.7632618 ], [ 88.3863265, 21.762747 ], [ 88.3882505, 21.7622159 ], [ 88.3882431, 21.7614436 ], [ 88.3887942, 21.7614389 ], [ 88.388929, 21.7611803 ], [ 88.389884, 21.7601427 ], [ 88.3896085, 21.760145 ], [ 88.389606, 21.7598876 ], [ 88.3898816, 21.7598853 ], [ 88.3900016, 21.7580821 ], [ 88.3901373, 21.7578235 ], [ 88.3893095, 21.7577014 ], [ 88.3888893, 21.7570618 ], [ 88.3883333, 21.7565515 ], [ 88.3874869, 21.7544992 ], [ 88.3872089, 21.754244 ], [ 88.386077, 21.7511643 ], [ 88.3864043, 21.7421513 ], [ 88.3858532, 21.7421558 ], [ 88.385427, 21.7408721 ], [ 88.3848712, 21.740362 ], [ 88.3841717, 21.7392089 ], [ 88.3830647, 21.7387033 ], [ 88.3822307, 21.7379379 ], [ 88.3808481, 21.7374346 ], [ 88.3742356, 21.7374896 ], [ 88.3734066, 21.737239 ], [ 88.3731286, 21.7369838 ], [ 88.3714707, 21.7364828 ], [ 88.3709147, 21.7359725 ], [ 88.3703637, 21.735977 ], [ 88.3692518, 21.7349564 ], [ 88.3681484, 21.7348373 ], [ 88.3680054, 21.7343236 ], [ 88.367033, 21.7334302 ], [ 88.3659286, 21.7331819 ], [ 88.3652309, 21.732287 ], [ 88.3650863, 21.7315158 ] ] ], [ [ [ 88.59385, 21.749019116809112 ], [ 88.59467, 21.74865 ], [ 88.59892, 21.7462 ], [ 88.60413, 21.74413 ], [ 88.60863, 21.7429 ], [ 88.61099, 21.7423 ], [ 88.6145, 21.74093 ], [ 88.61743, 21.73953 ], [ 88.6192, 21.73861 ], [ 88.61999, 21.73756 ], [ 88.62042, 21.73615 ], [ 88.62057, 21.73463 ], [ 88.6201, 21.73245 ], [ 88.61916, 21.73062 ], [ 88.61833, 21.72953 ], [ 88.61681, 21.72832 ], [ 88.61518, 21.72735 ], [ 88.61341, 21.72666 ], [ 88.60743, 21.72492 ], [ 88.60645, 21.72474 ], [ 88.60421, 21.72459 ], [ 88.6026, 21.7243 ], [ 88.60112, 21.72381 ], [ 88.599, 21.72324 ], [ 88.59449, 21.72084 ], [ 88.59385, 21.720116307692312 ], [ 88.59319, 21.71937 ], [ 88.59294, 21.71929 ], [ 88.59259, 21.71937 ], [ 88.58897, 21.72093 ], [ 88.58524, 21.72294 ], [ 88.58281, 21.72394 ], [ 88.58107, 21.72452 ], [ 88.58042, 21.7258 ], [ 88.58056, 21.72703 ], [ 88.58203, 21.73209 ], [ 88.58248, 21.73386 ], [ 88.5838561, 21.7389581 ], [ 88.5845427, 21.7429444 ], [ 88.5845427, 21.7464522 ], [ 88.58332, 21.74933 ], [ 88.58231, 21.75219 ], [ 88.58094, 21.75465 ], [ 88.57396, 21.76326 ], [ 88.56905, 21.7695 ], [ 88.57019, 21.77031 ], [ 88.57198, 21.77093 ], [ 88.57365, 21.77167 ], [ 88.57454, 21.77262 ], [ 88.57738, 21.77504 ], [ 88.57996, 21.77649 ], [ 88.58203, 21.77739 ], [ 88.58269, 21.77748 ], [ 88.5832, 21.7773 ], [ 88.5837, 21.77667 ], [ 88.58457, 21.77539 ], [ 88.58496, 21.77455 ], [ 88.58493, 21.7732 ], [ 88.58466, 21.76786 ], [ 88.58469, 21.76655 ], [ 88.58439, 21.76516 ], [ 88.58371, 21.7629 ], [ 88.58334, 21.76033 ], [ 88.58345, 21.75859 ], [ 88.58387, 21.75633 ], [ 88.58494, 21.75424 ], [ 88.58605, 21.753 ], [ 88.58692, 21.75218 ], [ 88.58909, 21.75104 ], [ 88.59116, 21.75023 ], [ 88.59385, 21.749019116809112 ] ] ], [ [ [ 88.59385, 21.785723931034486 ], [ 88.59553, 21.78701 ], [ 88.60054, 21.78906 ], [ 88.60563, 21.7898 ], [ 88.60868, 21.79002 ], [ 88.6111, 21.78981 ], [ 88.6134, 21.78914 ], [ 88.61502, 21.78825 ], [ 88.61703, 21.78627 ], [ 88.61869, 21.78206 ], [ 88.62074, 21.77721 ], [ 88.62312, 21.77216 ], [ 88.62404, 21.76716 ], [ 88.62369, 21.76493 ], [ 88.62436, 21.76321 ], [ 88.62612, 21.75959 ], [ 88.6273, 21.75663 ], [ 88.62862, 21.7526 ], [ 88.62816, 21.75119 ], [ 88.62871, 21.74935 ], [ 88.62833, 21.74747 ], [ 88.62905, 21.74529 ], [ 88.62888, 21.74349 ], [ 88.62816, 21.74143 ], [ 88.62815, 21.7407 ], [ 88.62881, 21.73989 ], [ 88.62832, 21.73856 ], [ 88.62778, 21.73669 ], [ 88.62676, 21.73575 ], [ 88.62651, 21.73523 ], [ 88.62696, 21.73247 ], [ 88.62582, 21.73085 ], [ 88.62408, 21.72725 ], [ 88.62284, 21.72539 ], [ 88.62219, 21.72346 ], [ 88.6201, 21.72128 ], [ 88.62005, 21.72022 ], [ 88.61949, 21.71981 ], [ 88.6187, 21.71876 ], [ 88.61884, 21.7179 ], [ 88.61694, 21.71625 ], [ 88.61533, 21.71479 ], [ 88.61495, 21.71362 ], [ 88.61399, 21.7128 ], [ 88.61273, 21.71213 ], [ 88.61149, 21.71151 ], [ 88.61104, 21.71053 ], [ 88.61037, 21.70987 ], [ 88.60908, 21.70957 ], [ 88.60747, 21.70949 ], [ 88.60675, 21.7106 ], [ 88.60557, 21.71075 ], [ 88.60471, 21.7101 ], [ 88.60385, 21.71012 ], [ 88.60295, 21.71195 ], [ 88.60187, 21.71279 ], [ 88.60026, 21.71372 ], [ 88.59857, 21.71536 ], [ 88.60038, 21.71683 ], [ 88.60239, 21.71768 ], [ 88.60741, 21.7195 ], [ 88.61211, 21.72145 ], [ 88.61653, 21.72372 ], [ 88.62021, 21.72611 ], [ 88.62128, 21.72733 ], [ 88.62194, 21.72843 ], [ 88.62315, 21.73087 ], [ 88.62377, 21.73273 ], [ 88.62337, 21.73584 ], [ 88.62261, 21.7379 ], [ 88.62145, 21.73987 ], [ 88.61882, 21.74272 ], [ 88.61687, 21.74415 ], [ 88.61379, 21.74574 ], [ 88.61186, 21.74648 ], [ 88.6083, 21.74701 ], [ 88.60416, 21.74735 ], [ 88.60218, 21.7479 ], [ 88.60085, 21.74861 ], [ 88.59892, 21.75023 ], [ 88.59499, 21.75204 ], [ 88.59385, 21.752417093690248 ], [ 88.58976, 21.75377 ], [ 88.58748, 21.75491 ], [ 88.58679, 21.75591 ], [ 88.58649, 21.75738 ], [ 88.58681, 21.76027 ], [ 88.58815, 21.7661 ], [ 88.58818, 21.7691 ], [ 88.58829, 21.77451 ], [ 88.58913, 21.77801 ], [ 88.59016, 21.78159 ], [ 88.59263, 21.78479 ], [ 88.59385, 21.785723931034486 ] ] ], [ [ [ 88.4540129, 21.7109366 ], [ 88.4540102, 21.7106792 ], [ 88.4538717, 21.7105512 ], [ 88.4494617, 21.7103323 ], [ 88.4469775, 21.7098392 ], [ 88.4442228, 21.7098632 ], [ 88.4398078, 21.7091294 ], [ 88.4392518, 21.7086192 ], [ 88.4367623, 21.7076111 ], [ 88.4331482, 21.7042959 ], [ 88.4325973, 21.7043006 ], [ 88.4320425, 21.7039198 ], [ 88.4313739, 21.705985 ], [ 88.4311136, 21.7075317 ], [ 88.4303077, 21.7095983 ], [ 88.4300348, 21.709858 ], [ 88.4294965, 21.7111498 ], [ 88.4288146, 21.7117988 ], [ 88.428265, 21.7119328 ], [ 88.4278641, 21.7132235 ], [ 88.4273181, 21.713743 ], [ 88.4265096, 21.715552 ], [ 88.4262569, 21.7178712 ], [ 88.4269817, 21.721469 ], [ 88.4275326, 21.7214643 ], [ 88.427826, 21.7232637 ], [ 88.4283769, 21.723259 ], [ 88.4285243, 21.7242875 ], [ 88.4288048, 21.7247999 ], [ 88.429121, 21.7289161 ], [ 88.4285803, 21.7299505 ], [ 88.4285854, 21.7304654 ], [ 88.4272408, 21.7338235 ], [ 88.4272459, 21.7343384 ], [ 88.4264296, 21.7353752 ], [ 88.4258912, 21.736667 ], [ 88.4250773, 21.7379613 ], [ 88.4248044, 21.738221 ], [ 88.4234548, 21.7410645 ], [ 88.424327, 21.7456907 ], [ 88.4248881, 21.7467156 ], [ 88.4254444, 21.7472257 ], [ 88.4257275, 21.7479955 ], [ 88.4260055, 21.7482507 ], [ 88.4268577, 21.7508177 ], [ 88.4268906, 21.7541641 ], [ 88.4266228, 21.7549386 ], [ 88.4266303, 21.7557109 ], [ 88.4260921, 21.7570027 ], [ 88.4260996, 21.7577749 ], [ 88.4258267, 21.7580346 ], [ 88.4250178, 21.7598437 ], [ 88.4247447, 21.7601034 ], [ 88.4244818, 21.761393 ], [ 88.423668, 21.762687 ], [ 88.4231422, 21.765266 ], [ 88.4231701, 21.7680975 ], [ 88.4237264, 21.7686077 ], [ 88.4238696, 21.7691212 ], [ 88.4247027, 21.7697572 ], [ 88.4258101, 21.7702625 ], [ 88.4269225, 21.7712826 ], [ 88.4283056, 21.7717855 ], [ 88.4291401, 21.7725506 ], [ 88.4296912, 21.7725459 ], [ 88.4302474, 21.773056 ], [ 88.4321894, 21.7743262 ], [ 88.4338492, 21.774956 ], [ 88.4341325, 21.7757258 ], [ 88.4346876, 21.7761066 ], [ 88.4357938, 21.7764837 ], [ 88.4362117, 21.7769949 ], [ 88.4366358, 21.778021 ], [ 88.4371871, 21.7780163 ], [ 88.4376052, 21.7785273 ], [ 88.4380293, 21.7795534 ], [ 88.4385804, 21.7795487 ], [ 88.4391471, 21.7810883 ], [ 88.4399764, 21.7813385 ], [ 88.4412548, 21.7851888 ], [ 88.4423049, 21.7936749 ], [ 88.442856, 21.7936702 ], [ 88.4431472, 21.7952122 ], [ 88.4436984, 21.7952073 ], [ 88.4438435, 21.7959785 ], [ 88.4441217, 21.7962334 ], [ 88.4442652, 21.7967471 ], [ 88.4450947, 21.7969972 ], [ 88.445378, 21.797767 ], [ 88.4464871, 21.7984005 ], [ 88.4478626, 21.798131 ], [ 88.4481355, 21.7978711 ], [ 88.4486855, 21.797738 ], [ 88.4488176, 21.7972221 ], [ 88.4493612, 21.7964449 ], [ 88.4499047, 21.7956679 ], [ 88.4504508, 21.7951482 ], [ 88.4507186, 21.7943737 ], [ 88.4520837, 21.7930745 ], [ 88.4523515, 21.7922998 ], [ 88.4537167, 21.7910006 ], [ 88.4538497, 21.7904846 ], [ 88.4549458, 21.7898308 ], [ 88.4557713, 21.7896953 ], [ 88.455766, 21.7891805 ], [ 88.4565916, 21.7890442 ], [ 88.4576889, 21.7885196 ], [ 88.4618204, 21.7882257 ], [ 88.4626498, 21.7884757 ], [ 88.4634766, 21.7884685 ], [ 88.4651461, 21.7899983 ], [ 88.4656985, 21.7901225 ], [ 88.4662733, 21.7924343 ], [ 88.4698669, 21.7934321 ], [ 88.4698616, 21.7929172 ], [ 88.4706885, 21.7929098 ], [ 88.4732811, 21.7923417 ], [ 88.4746544, 21.791226 ], [ 88.4749977, 21.788835 ], [ 88.47457, 21.7854 ], [ 88.4725, 21.78079 ], [ 88.47016, 21.76931 ], [ 88.46931, 21.76143 ], [ 88.46834, 21.75177 ], [ 88.46734, 21.73875 ], [ 88.46697, 21.73455 ], [ 88.4650414, 21.7320783 ], [ 88.4634964, 21.7301647 ], [ 88.4622948, 21.7274538 ], [ 88.4617798, 21.7258592 ], [ 88.4600632, 21.7258592 ], [ 88.4581749, 21.7263376 ], [ 88.4573166, 21.7276133 ], [ 88.45663, 21.7276133 ], [ 88.457145, 21.7260186 ], [ 88.4569733, 21.7233077 ], [ 88.456115, 21.7209156 ], [ 88.4559433, 21.7185235 ], [ 88.4564583, 21.7153339 ], [ 88.457145, 21.7134202 ], [ 88.4569733, 21.7116659 ], [ 88.4556, 21.7105495 ], [ 88.4540129, 21.7109366 ] ] ], [ [ [ 88.9895388, 21.7889609 ], [ 88.992457, 21.7876857 ], [ 88.9943453, 21.7867293 ], [ 89.0061899, 21.7835413 ], [ 89.0092798, 21.7821067 ], [ 89.0111681, 21.7805126 ], [ 89.0111681, 21.7793968 ], [ 89.0111681, 21.7782809 ], [ 89.0103098, 21.777165 ], [ 89.0085932, 21.7760491 ], [ 89.0032717, 21.7741362 ], [ 89.0001818, 21.7728609 ], [ 88.9977785, 21.7704696 ], [ 88.9965769, 21.7674407 ], [ 88.9972635, 21.7632956 ], [ 88.9988085, 21.7537298 ], [ 89.0003534, 21.7483088 ], [ 89.0012117, 21.7463955 ], [ 89.0037866, 21.741931 ], [ 89.0063616, 21.7393798 ], [ 89.0097948, 21.7360312 ], [ 89.0123697, 21.7333204 ], [ 89.0144297, 21.7299717 ], [ 89.0151163, 21.7258256 ], [ 89.0151163, 21.71849 ], [ 89.0113397, 21.718171 ], [ 89.0089365, 21.7175331 ], [ 89.0044733, 21.7157788 ], [ 89.0017267, 21.7159383 ], [ 89.0000101, 21.7172141 ], [ 88.9957186, 21.7208821 ], [ 88.992457, 21.723912 ], [ 88.9891954, 21.7256662 ], [ 88.9778658, 21.7277392 ], [ 88.9770075, 21.7285366 ], [ 88.9771791, 21.7296528 ], [ 88.9782091, 21.7309285 ], [ 88.9854189, 21.7361907 ], [ 88.9878221, 21.7376258 ], [ 88.9891954, 21.7396987 ], [ 88.9897104, 21.7420904 ], [ 88.9895388, 21.7441632 ], [ 88.9873072, 21.7468738 ], [ 88.9849039, 21.747671 ], [ 88.9830156, 21.7470333 ], [ 88.971171, 21.740177 ], [ 88.969626, 21.7400176 ], [ 88.9682527, 21.7409743 ], [ 88.9670511, 21.7420904 ], [ 88.9670511, 21.744801 ], [ 88.9670511, 21.7484683 ], [ 88.9665361, 21.7516571 ], [ 88.9646479, 21.753092 ], [ 88.9622446, 21.7548458 ], [ 88.958983, 21.7551647 ], [ 88.9552065, 21.7553241 ], [ 88.9522882, 21.756759 ], [ 88.9514299, 21.7578751 ], [ 88.9562364, 21.7601071 ], [ 88.9601847, 21.7620202 ], [ 88.9632746, 21.7652087 ], [ 88.9653345, 21.768716 ], [ 88.9665361, 21.7715855 ], [ 88.970141, 21.7722232 ], [ 88.9735742, 21.7728609 ], [ 88.9759775, 21.774455 ], [ 88.9785524, 21.7774838 ], [ 88.9895388, 21.7889609 ] ] ], [ [ [ 88.31548, 21.70903 ], [ 88.31385, 21.70968 ], [ 88.31099, 21.71075 ], [ 88.30949, 21.71156 ], [ 88.30788, 21.71303 ], [ 88.30645, 21.71598 ], [ 88.30627, 21.71795 ], [ 88.30679, 21.72117 ], [ 88.30776, 21.7235 ], [ 88.30855, 21.72605 ], [ 88.30938, 21.72767 ], [ 88.30944, 21.72948 ], [ 88.31003, 21.73149 ], [ 88.30993, 21.73368 ], [ 88.30985, 21.7362 ], [ 88.30891, 21.73809 ], [ 88.30777, 21.74125 ], [ 88.30689, 21.74522 ], [ 88.30655, 21.74737 ], [ 88.30647, 21.75029 ], [ 88.30624, 21.75244 ], [ 88.30586, 21.75508 ], [ 88.30541, 21.75745 ], [ 88.3039, 21.76125 ], [ 88.30291, 21.76352 ], [ 88.30238, 21.76513 ], [ 88.30126, 21.76713 ], [ 88.3001, 21.76936 ], [ 88.29935, 21.77173 ], [ 88.29869, 21.77493 ], [ 88.29863, 21.78014 ], [ 88.29869, 21.782 ], [ 88.30051, 21.78348 ], [ 88.30335, 21.78362 ], [ 88.30494, 21.7834 ], [ 88.30668, 21.7827 ], [ 88.31002, 21.7816 ], [ 88.31295, 21.78081 ], [ 88.31667, 21.78056 ], [ 88.32007, 21.78018 ], [ 88.32234, 21.78077 ], [ 88.324, 21.78153 ], [ 88.32627, 21.78232 ], [ 88.32766, 21.78261 ], [ 88.32872, 21.78381 ], [ 88.3296, 21.78568 ], [ 88.33102, 21.78706 ], [ 88.33243, 21.78901 ], [ 88.3342, 21.79166 ], [ 88.33551, 21.79394 ], [ 88.33761, 21.79592 ], [ 88.33863, 21.79722 ], [ 88.33982, 21.79775 ], [ 88.34202, 21.79792 ], [ 88.34245, 21.79858 ], [ 88.34258, 21.79895 ], [ 88.34529, 21.79867 ], [ 88.348, 21.79816 ], [ 88.34939, 21.7976 ], [ 88.35049, 21.79646 ], [ 88.35211, 21.79584 ], [ 88.35425, 21.79551 ], [ 88.35589, 21.79531 ], [ 88.35726, 21.79558 ], [ 88.35855, 21.79681 ], [ 88.35941, 21.79715 ], [ 88.3601, 21.79734 ], [ 88.36099, 21.79705 ], [ 88.36196, 21.79539 ], [ 88.36347, 21.79477 ], [ 88.36542, 21.79377 ], [ 88.36559, 21.79376 ], [ 88.3664762, 21.7937275 ], [ 88.36734, 21.7935 ], [ 88.37021, 21.79294 ], [ 88.37218, 21.79236 ], [ 88.37547, 21.79052 ], [ 88.37776, 21.78946 ], [ 88.37964, 21.78808 ], [ 88.38006, 21.78712 ], [ 88.37928, 21.78572 ], [ 88.37821, 21.78281 ], [ 88.37795, 21.78051 ], [ 88.37794, 21.77667 ], [ 88.37816, 21.77503 ], [ 88.37818, 21.77387 ], [ 88.37806, 21.77209 ], [ 88.37778, 21.77036 ], [ 88.37751, 21.76921 ], [ 88.37672, 21.7677 ], [ 88.3759, 21.76689 ], [ 88.3750213, 21.7667596 ], [ 88.37408, 21.76662 ], [ 88.37215, 21.76658 ], [ 88.37034, 21.76658 ], [ 88.36718, 21.76694 ], [ 88.3631, 21.76706 ], [ 88.35913, 21.76702 ], [ 88.35652, 21.76686 ], [ 88.35429, 21.76619 ], [ 88.35247, 21.76598 ], [ 88.35041, 21.76525 ], [ 88.3473, 21.76381 ], [ 88.34625, 21.763 ], [ 88.34438, 21.76132 ], [ 88.34297, 21.75978 ], [ 88.34202, 21.75844 ], [ 88.34075, 21.75616 ], [ 88.33971, 21.75221 ], [ 88.3393, 21.75022 ], [ 88.33924, 21.74843 ], [ 88.33966, 21.74726 ], [ 88.33965, 21.74531 ], [ 88.33933, 21.74274 ], [ 88.33982, 21.7402 ], [ 88.34047, 21.73765 ], [ 88.34229, 21.73114 ], [ 88.34278, 21.72881 ], [ 88.34295, 21.72702 ], [ 88.34434, 21.72287 ], [ 88.34407, 21.72151 ], [ 88.343, 21.72022 ], [ 88.34208, 21.71972 ], [ 88.34108, 21.7188 ], [ 88.33824, 21.71672 ], [ 88.33691, 21.71602 ], [ 88.33579, 21.71488 ], [ 88.33462, 21.71386 ], [ 88.33367, 21.71252 ], [ 88.33319, 21.71158 ], [ 88.33266, 21.71118 ], [ 88.33206, 21.71009 ], [ 88.3295, 21.71082 ], [ 88.3281, 21.70977 ], [ 88.32688, 21.70947 ], [ 88.32529, 21.70952 ], [ 88.32357, 21.7094 ], [ 88.32203, 21.70901 ], [ 88.3205, 21.70905 ], [ 88.31548, 21.70903 ] ] ], [ [ [ 88.5181918, 21.7513889 ], [ 88.5171618, 21.75107 ], [ 88.5161318, 21.7489973 ], [ 88.5152735, 21.7466056 ], [ 88.5142436, 21.7434167 ], [ 88.5137286, 21.7407061 ], [ 88.5130419, 21.739271 ], [ 88.5113253, 21.7387926 ], [ 88.5101237, 21.739271 ], [ 88.5092654, 21.7418222 ], [ 88.5089221, 21.7430978 ], [ 88.5089221, 21.7448517 ], [ 88.5078921, 21.7458084 ], [ 88.5068621, 21.747084 ], [ 88.5056605, 21.7489973 ], [ 88.5054888, 21.7504323 ], [ 88.5056605, 21.7518672 ], [ 88.5054888, 21.7529833 ], [ 88.5049738, 21.7560126 ], [ 88.5042872, 21.7579257 ], [ 88.5063471, 21.7592012 ], [ 88.5087504, 21.7603172 ], [ 88.511497, 21.7620709 ], [ 88.5145869, 21.7643029 ], [ 88.5171618, 21.7663754 ], [ 88.5190501, 21.7686073 ], [ 88.5207667, 21.7690855 ], [ 88.5243716, 21.7716362 ], [ 88.5266032, 21.7748245 ], [ 88.5288348, 21.7773751 ], [ 88.5308947, 21.7797663 ], [ 88.532268, 21.7816791 ], [ 88.533298, 21.7842296 ], [ 88.5343279, 21.7878958 ], [ 88.5353579, 21.7902868 ], [ 88.5358729, 21.7914025 ], [ 88.5377612, 21.7915619 ], [ 88.5386195, 21.7906056 ], [ 88.5401644, 21.7878958 ], [ 88.5405077, 21.7863018 ], [ 88.5413661, 21.7858236 ], [ 88.5441126, 21.7858236 ], [ 88.5466876, 21.7869394 ], [ 88.5496058, 21.7874176 ], [ 88.5511508, 21.7874176 ], [ 88.5532107, 21.785983 ], [ 88.5556139, 21.785186 ], [ 88.5571589, 21.7840702 ], [ 88.5590472, 21.7826356 ], [ 88.5619654, 21.7815197 ], [ 88.5640254, 21.7816791 ], [ 88.5666003, 21.782795 ], [ 88.5684885, 21.7840702 ], [ 88.5702052, 21.785186 ], [ 88.5726084, 21.7864612 ], [ 88.5722651, 21.7848672 ], [ 88.5691752, 21.7824762 ], [ 88.56649, 21.78048 ], [ 88.56493, 21.77848 ], [ 88.56326, 21.77432 ], [ 88.56299, 21.76966 ], [ 88.56287, 21.76308 ], [ 88.5629682, 21.7616457 ], [ 88.5624332, 21.7610919 ], [ 88.561848, 21.761185 ], [ 88.5604157, 21.7617389 ], [ 88.5598473, 21.7619459 ], [ 88.5588051, 21.7620391 ], [ 88.5572446, 21.7622099 ], [ 88.5554556, 21.7620701 ], [ 88.5541404, 21.7616457 ], [ 88.5517161, 21.7606053 ], [ 88.5496763, 21.7599583 ], [ 88.5483053, 21.7599066 ], [ 88.5470848, 21.7600411 ], [ 88.5463324, 21.760274 ], [ 88.5457695, 21.7605691 ], [ 88.5449949, 21.761097 ], [ 88.5444209, 21.7621736 ], [ 88.5440252, 21.7627689 ], [ 88.5445992, 21.7617026 ], [ 88.5447608, 21.761273 ], [ 88.5448388, 21.7611074 ], [ 88.5444822, 21.7611384 ], [ 88.5435849, 21.7609625 ], [ 88.5432282, 21.7609469 ], [ 88.5427433, 21.7612213 ], [ 88.542448, 21.7615215 ], [ 88.5423254, 21.7617389 ], [ 88.5422529, 21.7620132 ], [ 88.5420523, 21.7625411 ], [ 88.5418907, 21.7626912 ], [ 88.5416956, 21.7628827 ], [ 88.5414832, 21.7629812 ], [ 88.5412387, 21.7630776 ], [ 88.541006, 21.7631591 ], [ 88.5405873, 21.7632852 ], [ 88.5401875, 21.7633752 ], [ 88.5396636, 21.7634153 ], [ 88.5392776, 21.7634243 ], [ 88.5389022, 21.7634211 ], [ 88.538418, 21.7633991 ], [ 88.5380934, 21.7633396 ], [ 88.5376357, 21.7631468 ], [ 88.5373215, 21.7629527 ], [ 88.5369564, 21.7627806 ], [ 88.5364744, 21.7625632 ], [ 88.5360334, 21.7622915 ], [ 88.5358328, 21.7621988 ], [ 88.5356983, 21.7620566 ], [ 88.5355276, 21.7618483 ], [ 88.5353813, 21.7617136 ], [ 88.5350468, 21.7616029 ], [ 88.5347208, 21.7616469 ], [ 88.5343976, 21.7617763 ], [ 88.533843, 21.7621127 ], [ 88.5334529, 21.7621774 ], [ 88.5338152, 21.7620946 ], [ 88.5343613, 21.7617478 ], [ 88.5347474, 21.7615868 ], [ 88.5350385, 21.7615563 ], [ 88.5354621, 21.7616657 ], [ 88.5356725, 21.7619336 ], [ 88.5357492, 21.7620358 ], [ 88.5357889, 21.762001 ], [ 88.535869, 21.762054 ], [ 88.5358989, 21.7620023 ], [ 88.5359923, 21.7618612 ], [ 88.5360739, 21.7616429 ], [ 88.5360767, 21.7614197 ], [ 88.5360642, 21.7611382 ], [ 88.5361415, 21.760904 ], [ 88.5361708, 21.7606058 ], [ 88.5359883, 21.7603806 ], [ 88.5355034, 21.7601218 ], [ 88.535316, 21.7598106 ], [ 88.5351356, 21.7594476 ], [ 88.5346543, 21.7591327 ], [ 88.5342326, 21.7588299 ], [ 88.53394, 21.7584346 ], [ 88.5340878, 21.7578719 ], [ 88.5341755, 21.7572313 ], [ 88.5342149, 21.7579817 ], [ 88.5340386, 21.7583971 ], [ 88.5341657, 21.7586057 ], [ 88.5346888, 21.7590266 ], [ 88.5351955, 21.7593325 ], [ 88.5353843, 21.7596217 ], [ 88.5355271, 21.7599652 ], [ 88.5358796, 21.7601949 ], [ 88.5361875, 21.7603547 ], [ 88.5363268, 21.7606472 ], [ 88.5362432, 21.7609409 ], [ 88.5361562, 21.7611913 ], [ 88.5362021, 21.7614371 ], [ 88.5361743, 21.7616319 ], [ 88.5361253, 21.7618942 ], [ 88.5360794, 21.7620314 ], [ 88.5361079, 21.7620916 ], [ 88.5361999, 21.7621931 ], [ 88.5365942, 21.7624733 ], [ 88.5371076, 21.7626635 ], [ 88.537481, 21.7629061 ], [ 88.5380077, 21.7631623 ], [ 88.5383901, 21.7632516 ], [ 88.5388799, 21.7632736 ], [ 88.5392776, 21.7632833 ], [ 88.5396761, 21.7632516 ], [ 88.5400725, 21.7632063 ], [ 88.5404954, 21.7631481 ], [ 88.5408305, 21.7630607 ], [ 88.5410819, 21.762963 ], [ 88.54133, 21.7628673 ], [ 88.5415786, 21.762743 ], [ 88.5418795, 21.7624842 ], [ 88.5420021, 21.7622409 ], [ 88.5420913, 21.7618838 ], [ 88.542186, 21.7615422 ], [ 88.5423644, 21.7612885 ], [ 88.5425706, 21.7610919 ], [ 88.5431, 21.7608124 ], [ 88.5436908, 21.7607709 ], [ 88.5443373, 21.7608952 ], [ 88.5447162, 21.7608848 ], [ 88.5452735, 21.7606105 ], [ 88.5460705, 21.760036 ], [ 88.5474861, 21.7596995 ], [ 88.5485227, 21.7595805 ], [ 88.5487902, 21.7595701 ], [ 88.548662, 21.7592751 ], [ 88.548662, 21.7589231 ], [ 88.5488125, 21.7591043 ], [ 88.5489908, 21.7594562 ], [ 88.5493419, 21.7595235 ], [ 88.5505513, 21.7597875 ], [ 88.5525242, 21.7604086 ], [ 88.5533713, 21.7608641 ], [ 88.5549875, 21.7615008 ], [ 88.5566204, 21.7616871 ], [ 88.5582589, 21.761625 ], [ 88.5596634, 21.7614593 ], [ 88.561157, 21.7608745 ], [ 88.5621211, 21.7602119 ], [ 88.5628623, 21.7597461 ], [ 88.5632438, 21.759063 ], [ 88.56411, 21.75759 ], [ 88.56747, 21.75347 ], [ 88.57085, 21.74782 ], [ 88.57206, 21.74432 ], [ 88.57201, 21.74187 ], [ 88.57215, 21.73759 ], [ 88.5720934, 21.7356035 ], [ 88.5717501, 21.734009 ], [ 88.5712351, 21.7333711 ], [ 88.5690035, 21.7332117 ], [ 88.5674586, 21.7330522 ], [ 88.5648837, 21.7324144 ], [ 88.5635104, 21.7311387 ], [ 88.5619654, 21.7303414 ], [ 88.5605921, 21.729863 ], [ 88.5593905, 21.7303414 ], [ 88.5585322, 21.731936 ], [ 88.5581889, 21.7335306 ], [ 88.5569872, 21.7344873 ], [ 88.5544123, 21.735763 ], [ 88.5520091, 21.7365603 ], [ 88.5490908, 21.7368792 ], [ 88.5461726, 21.7371981 ], [ 88.5437693, 21.7370386 ], [ 88.541881, 21.7367197 ], [ 88.5396494, 21.7359225 ], [ 88.5375895, 21.7351252 ], [ 88.5355296, 21.7341684 ], [ 88.5343279, 21.7324144 ], [ 88.532783, 21.729863 ], [ 88.5315814, 21.727471 ], [ 88.5305514, 21.7249195 ], [ 88.5286631, 21.7206138 ], [ 88.5276331, 21.7194975 ], [ 88.5267748, 21.7190191 ], [ 88.5255732, 21.7183812 ], [ 88.5243716, 21.7191786 ], [ 88.522655, 21.719338 ], [ 88.52111, 21.7191786 ], [ 88.5180201, 21.7220491 ], [ 88.5173335, 21.7231654 ], [ 88.5180201, 21.7261953 ], [ 88.5181918, 21.7276305 ], [ 88.5175051, 21.7292251 ], [ 88.5164752, 21.7306603 ], [ 88.5152735, 21.7325738 ], [ 88.5139002, 21.7332117 ], [ 88.5130419, 21.7333711 ], [ 88.5133852, 21.7352846 ], [ 88.5135569, 21.7367197 ], [ 88.5149302, 21.7395899 ], [ 88.5157885, 21.745649 ], [ 88.5168185, 21.7478812 ], [ 88.5176768, 21.7499539 ], [ 88.5181918, 21.7513889 ] ] ], [ [ [ 88.4120828, 21.7334387 ], [ 88.4119505, 21.7339547 ], [ 88.4114007, 21.7340878 ], [ 88.4111278, 21.7343474 ], [ 88.410578, 21.7344813 ], [ 88.4105829, 21.7349961 ], [ 88.4100331, 21.7351291 ], [ 88.4097602, 21.7353888 ], [ 88.4089348, 21.7355251 ], [ 88.4088018, 21.7360411 ], [ 88.4081172, 21.7364325 ], [ 88.4070163, 21.736571 ], [ 88.4070214, 21.7370859 ], [ 88.4061936, 21.7369638 ], [ 88.4034446, 21.7376311 ], [ 88.4033113, 21.7381471 ], [ 88.4024922, 21.7389263 ], [ 88.4024998, 21.7396986 ], [ 88.4016857, 21.7409927 ], [ 88.4016907, 21.7415075 ], [ 88.4008766, 21.7428016 ], [ 88.401172, 21.7448587 ], [ 88.4017281, 21.7453688 ], [ 88.4018789, 21.7466547 ], [ 88.40243, 21.74665 ], [ 88.4025897, 21.7489656 ], [ 88.4023342, 21.7510273 ], [ 88.4017956, 21.7523191 ], [ 88.4009764, 21.7530983 ], [ 88.4008441, 21.7536143 ], [ 88.4002943, 21.7537472 ], [ 88.4000212, 21.754007 ], [ 88.3991959, 21.7541431 ], [ 88.3992008, 21.7546579 ], [ 88.3972745, 21.7549316 ], [ 88.3972794, 21.7554465 ], [ 88.396454, 21.7555818 ], [ 88.396317, 21.755712 ], [ 88.3957808, 21.7572612 ], [ 88.3949965, 21.7616441 ], [ 88.3945133, 21.7631432 ], [ 88.3936932, 21.7645753 ], [ 88.3924116, 21.7664253 ], [ 88.3912273, 21.7677239 ], [ 88.3907876, 21.7681155 ], [ 88.389886, 21.7690155 ], [ 88.3893024, 21.769596 ], [ 88.3887332, 21.7699826 ], [ 88.3880899, 21.7706253 ], [ 88.387643, 21.7712165 ], [ 88.3871622, 21.7717202 ], [ 88.386159, 21.7730188 ], [ 88.385334, 21.7741774 ], [ 88.3845935, 21.7752422 ], [ 88.3842701, 21.7757093 ], [ 88.3836897, 21.7766069 ], [ 88.3833793, 21.7771144 ], [ 88.3831036, 21.7777521 ], [ 88.3830164, 21.7784732 ], [ 88.3833149, 21.7792482 ], [ 88.3836735, 21.7796092 ], [ 88.3838418, 21.7803101 ], [ 88.3856814, 21.7816734 ], [ 88.3864398, 21.7822753 ], [ 88.3878145, 21.7833531 ], [ 88.3887867, 21.7842648 ], [ 88.3892361, 21.7845419 ], [ 88.3895686, 21.7846018 ], [ 88.3901235, 21.7849828 ], [ 88.3905495, 21.7855955 ], [ 88.3910463, 21.7860627 ], [ 88.3917933, 21.7866426 ], [ 88.392431, 21.7871113 ], [ 88.3929874, 21.787745 ], [ 88.3936744, 21.78831 ], [ 88.3944326, 21.7890557 ], [ 88.3950002, 21.7894865 ], [ 88.3957583, 21.7901173 ], [ 88.3963155, 21.7906362 ], [ 88.3968839, 21.7911047 ], [ 88.3973764, 21.7913007 ], [ 88.3976311, 21.791742 ], [ 88.3981823, 21.7917373 ], [ 88.3988783, 21.7925037 ], [ 88.3990216, 21.7930174 ], [ 88.3998511, 21.7932678 ], [ 88.4001367, 21.7942952 ], [ 88.4012429, 21.7946715 ], [ 88.4015211, 21.7949265 ], [ 88.4034569, 21.7955541 ], [ 88.40374, 21.7963241 ], [ 88.4048449, 21.7965721 ], [ 88.4049874, 21.7970858 ], [ 88.4055461, 21.7978533 ], [ 88.4069369, 21.7991287 ], [ 88.4070802, 21.7996424 ], [ 88.4079108, 21.800021 ], [ 88.4087453, 21.800786 ], [ 88.4095772, 21.8012939 ], [ 88.4101299, 21.8014184 ], [ 88.4101348, 21.8019331 ], [ 88.4118001, 21.8030769 ], [ 88.4123527, 21.8032015 ], [ 88.4130488, 21.8039677 ], [ 88.4131923, 21.8044814 ], [ 88.4140216, 21.8047318 ], [ 88.4144448, 21.8057579 ], [ 88.414723, 21.8060128 ], [ 88.4148662, 21.8065265 ], [ 88.4154175, 21.8065218 ], [ 88.4161165, 21.8075456 ], [ 88.4162597, 21.8080591 ], [ 88.416811, 21.8080544 ], [ 88.4168161, 21.8085693 ], [ 88.4190403, 21.8104804 ], [ 88.4198698, 21.8107308 ], [ 88.420148, 21.8109858 ], [ 88.4212546, 21.8113629 ], [ 88.4220061, 21.8114041 ], [ 88.4231828, 21.8112171 ], [ 88.424833, 21.8108172 ], [ 88.4255139, 21.8100389 ], [ 88.4264538, 21.8074566 ], [ 88.4261781, 21.8074589 ], [ 88.4261756, 21.8072015 ], [ 88.4264512, 21.8071992 ], [ 88.4265682, 21.8051387 ], [ 88.426826, 21.8033343 ], [ 88.4280388, 21.8004921 ], [ 88.4288592, 21.799841 ], [ 88.4302298, 21.7990569 ], [ 88.4340862, 21.798766 ], [ 88.4360182, 21.7990066 ], [ 88.4379528, 21.7995046 ], [ 88.4412693, 21.8003772 ], [ 88.4411259, 21.7998637 ], [ 88.4402886, 21.7988412 ], [ 88.4380219, 21.7926827 ], [ 88.4374296, 21.7885689 ], [ 88.4365746, 21.7857445 ], [ 88.4357348, 21.7844646 ], [ 88.4329252, 21.779083 ], [ 88.4322302, 21.7784449 ], [ 88.4314022, 21.7783238 ], [ 88.4312588, 21.7778103 ], [ 88.4302858, 21.776917 ], [ 88.4294578, 21.7767961 ], [ 88.4293143, 21.7762824 ], [ 88.4287581, 21.7757723 ], [ 88.4283387, 21.7751319 ], [ 88.4275094, 21.7748817 ], [ 88.4261187, 21.7736065 ], [ 88.4252896, 21.7733563 ], [ 88.4245937, 21.7727192 ], [ 88.4238963, 21.7718237 ], [ 88.423203, 21.7714438 ], [ 88.4226417, 21.770419 ], [ 88.4218048, 21.7693964 ], [ 88.4216574, 21.768368 ], [ 88.4211062, 21.7683727 ], [ 88.4202214, 21.7624593 ], [ 88.4196727, 21.7627214 ], [ 88.4203308, 21.7596266 ], [ 88.4212754, 21.7575589 ], [ 88.4218265, 21.7575542 ], [ 88.4225073, 21.7567761 ], [ 88.4226404, 21.7562601 ], [ 88.4231877, 21.7558687 ], [ 88.4237375, 21.7557358 ], [ 88.4244158, 21.7547003 ], [ 88.4249543, 21.7534085 ], [ 88.4249414, 21.7521214 ], [ 88.4240972, 21.7503266 ], [ 88.4232603, 21.749304 ], [ 88.4231155, 21.748533 ], [ 88.4225644, 21.7485378 ], [ 88.422138, 21.7472543 ], [ 88.4218598, 21.7469991 ], [ 88.4214293, 21.7452008 ], [ 88.4208783, 21.7452055 ], [ 88.4206969, 21.7408307 ], [ 88.4209522, 21.7387689 ], [ 88.4212227, 21.7382518 ], [ 88.4212176, 21.737737 ], [ 88.4220314, 21.7364429 ], [ 88.4222943, 21.7351533 ], [ 88.4225674, 21.7348937 ], [ 88.4231057, 21.7336018 ], [ 88.4233786, 21.733342 ], [ 88.4239144, 21.7317927 ], [ 88.4241875, 21.731533 ], [ 88.4249885, 21.7289517 ], [ 88.4249809, 21.7281794 ], [ 88.4252514, 21.7276623 ], [ 88.4255092, 21.7258581 ], [ 88.4252032, 21.7227714 ], [ 88.4249201, 21.7220016 ], [ 88.4243616, 21.7212341 ], [ 88.4243514, 21.7202044 ], [ 88.4239348, 21.7198215 ], [ 88.422829, 21.7194452 ], [ 88.4228367, 21.7202174 ], [ 88.4222869, 21.7203505 ], [ 88.4214655, 21.7208723 ], [ 88.4207851, 21.7217797 ], [ 88.4209286, 21.7222934 ], [ 88.4203788, 21.7224263 ], [ 88.4196959, 21.7230762 ], [ 88.4191575, 21.7243681 ], [ 88.4180656, 21.725407 ], [ 88.4175249, 21.7264414 ], [ 88.416706, 21.7272208 ], [ 88.4167135, 21.7279931 ], [ 88.4165774, 21.7281223 ], [ 88.4160276, 21.7282563 ], [ 88.415897, 21.7290297 ], [ 88.4153537, 21.7298067 ], [ 88.4142616, 21.7308458 ], [ 88.4139936, 21.7316204 ], [ 88.4130388, 21.7325291 ], [ 88.412489, 21.7326629 ], [ 88.4123557, 21.733179 ], [ 88.4120828, 21.7334387 ] ] ], [ [ [ 88.770164898450631, 21.796960409021327 ], [ 88.7702628, 21.7972591 ], [ 88.7712928, 21.8001281 ], [ 88.7730094, 21.8026782 ], [ 88.7748977, 21.8047502 ], [ 88.7764426, 21.8060252 ], [ 88.7769576, 21.8082565 ], [ 88.777301, 21.8108065 ], [ 88.7771293, 21.813197 ], [ 88.7764426, 21.8149501 ], [ 88.776786, 21.8165438 ], [ 88.7783309, 21.8186155 ], [ 88.7798759, 21.8205279 ], [ 88.7803909, 21.822759 ], [ 88.7812492, 21.8243525 ], [ 88.7827941, 21.8241932 ], [ 88.7841674, 21.8241932 ], [ 88.785884, 21.823237 ], [ 88.7867423, 21.8216434 ], [ 88.7877723, 21.8198904 ], [ 88.7882873, 21.8173406 ], [ 88.7891456, 21.8155876 ], [ 88.7906905, 21.8138345 ], [ 88.7929221, 21.8119221 ], [ 88.7934371, 21.8106471 ], [ 88.7942954, 21.8077783 ], [ 88.7942954, 21.8039533 ], [ 88.7937804, 21.8001281 ], [ 88.7930938, 21.7993311 ], [ 88.7915488, 21.7993311 ], [ 88.7896606, 21.7991718 ], [ 88.7876006, 21.7975779 ], [ 88.787423543472315, 21.796975 ], [ 88.7870857, 21.7958246 ], [ 88.7881156, 21.7935931 ], [ 88.7903472, 21.791521 ], [ 88.7934371, 21.7894489 ], [ 88.7951537, 21.7873767 ], [ 88.7956687, 21.7856233 ], [ 88.7946388, 21.7837105 ], [ 88.7920638, 21.780363 ], [ 88.787944, 21.7755807 ], [ 88.7850257, 21.7715953 ], [ 88.7826225, 21.7676098 ], [ 88.7822791, 21.7644214 ], [ 88.7822791, 21.7617111 ], [ 88.7827941, 21.758682 ], [ 88.7838241, 21.7558122 ], [ 88.785884, 21.7527829 ], [ 88.7872573, 21.7503913 ], [ 88.7888023, 21.7489563 ], [ 88.7889739, 21.7475214 ], [ 88.7882873, 21.7454486 ], [ 88.7867423, 21.7438541 ], [ 88.7845107, 21.7422596 ], [ 88.7838241, 21.7403462 ], [ 88.7838241, 21.7384328 ], [ 88.7848541, 21.7371572 ], [ 88.786914, 21.7358815 ], [ 88.785369, 21.7357221 ], [ 88.7829658, 21.7349248 ], [ 88.7810775, 21.7341275 ], [ 88.7788459, 21.732214 ], [ 88.7769576, 21.7303004 ], [ 88.7748977, 21.7312572 ], [ 88.7721511, 21.7323734 ], [ 88.764598, 21.7323734 ], [ 88.7620231, 21.7325329 ], [ 88.7592765, 21.7330113 ], [ 88.7570449, 21.7338086 ], [ 88.7561866, 21.7349248 ], [ 88.7556716, 21.7387517 ], [ 88.7553283, 21.740984 ], [ 88.754985, 21.7421002 ], [ 88.7558433, 21.7457675 ], [ 88.7570449, 21.7486375 ], [ 88.7591048, 21.7516668 ], [ 88.7615081, 21.7535801 ], [ 88.7628814, 21.7543773 ], [ 88.7647697, 21.757566 ], [ 88.7659713, 21.759798 ], [ 88.766143, 21.7613923 ], [ 88.765628, 21.7623488 ], [ 88.7642547, 21.7625083 ], [ 88.7632247, 21.7636243 ], [ 88.7609931, 21.7655373 ], [ 88.7579032, 21.7666533 ], [ 88.75344, 21.7676098 ], [ 88.7510368, 21.7682475 ], [ 88.7501785, 21.7690446 ], [ 88.7506934, 21.77032 ], [ 88.752925, 21.7719141 ], [ 88.7553283, 21.774146 ], [ 88.7579032, 21.7757401 ], [ 88.7584182, 21.777653 ], [ 88.7618514, 21.7802036 ], [ 88.7644263, 21.7829135 ], [ 88.7663146, 21.7856233 ], [ 88.7682029, 21.7892895 ], [ 88.7690612, 21.7935931 ], [ 88.770164898450631, 21.796960409021327 ] ] ], [ [ [ 88.803117423514067, 21.796775 ], [ 88.8033935, 21.7970997 ], [ 88.8068267, 21.8010844 ], [ 88.8099166, 21.8041126 ], [ 88.8118049, 21.8055471 ], [ 88.8142081, 21.8095315 ], [ 88.8164397, 21.8139939 ], [ 88.8181564, 21.8178187 ], [ 88.8190147, 21.8198904 ], [ 88.8226196, 21.8224402 ], [ 88.8238212, 21.8208466 ], [ 88.8246795, 21.8194124 ], [ 88.8250228, 21.8176593 ], [ 88.8262244, 21.8159063 ], [ 88.8275977, 21.8130377 ], [ 88.8296577, 21.8106471 ], [ 88.8308593, 21.8080971 ], [ 88.8293143, 21.8053877 ], [ 88.8277694, 21.8036345 ], [ 88.8257095, 21.8001281 ], [ 88.8239928, 21.7970997 ], [ 88.823892893053895, 21.796775 ], [ 88.8229629, 21.7937525 ], [ 88.8217612, 21.7908834 ], [ 88.8215896, 21.7873767 ], [ 88.8212463, 21.7841887 ], [ 88.8221046, 21.78116 ], [ 88.8229629, 21.777653 ], [ 88.8250228, 21.7747836 ], [ 88.8269111, 21.7709576 ], [ 88.8291427, 21.7682475 ], [ 88.8313743, 21.766175 ], [ 88.8287994, 21.7656968 ], [ 88.8267394, 21.7645808 ], [ 88.8241645, 21.7618706 ], [ 88.8215896, 21.7594791 ], [ 88.8179847, 21.7558122 ], [ 88.8157531, 21.7535801 ], [ 88.8133498, 21.7511885 ], [ 88.8107749, 21.7497536 ], [ 88.80717, 21.7486375 ], [ 88.8044234, 21.7483186 ], [ 88.8003036, 21.7478402 ], [ 88.797042, 21.7479997 ], [ 88.7941238, 21.7487969 ], [ 88.7917205, 21.7494347 ], [ 88.7901756, 21.7511885 ], [ 88.7893172, 21.7534207 ], [ 88.7884589, 21.755015 ], [ 88.7867423, 21.7577254 ], [ 88.7855407, 21.7604357 ], [ 88.7850257, 21.7625083 ], [ 88.7843391, 21.7647402 ], [ 88.7843391, 21.766175 ], [ 88.7862273, 21.7684069 ], [ 88.7898322, 21.7728706 ], [ 88.7937804, 21.7766966 ], [ 88.7958404, 21.7790877 ], [ 88.7973853, 21.780363 ], [ 88.7979003, 21.7830729 ], [ 88.798072, 21.7856233 ], [ 88.7989303, 21.7899271 ], [ 88.8008186, 21.7940713 ], [ 88.803117423514067, 21.796775 ] ] ], [ [ [ 88.993695662089237, 21.796975 ], [ 88.9944722, 21.8004359 ], [ 88.9949871, 21.8039423 ], [ 88.9949871, 21.8071299 ], [ 88.9949871, 21.8099987 ], [ 88.9951588, 21.8119112 ], [ 88.9973904, 21.8120705 ], [ 88.9989354, 21.8115924 ], [ 89.0025402, 21.8104768 ], [ 89.0051152, 21.8099987 ], [ 89.0088917, 21.8103174 ], [ 89.0133549, 21.8112737 ], [ 89.0147282, 21.8120705 ], [ 89.0167881, 21.8119112 ], [ 89.0145565, 21.8005953 ], [ 89.0136982, 21.7978857 ], [ 89.0136982, 21.796975 ], [ 89.0136982, 21.796775 ], [ 89.0136982, 21.7905537 ], [ 89.0147282, 21.7852936 ], [ 89.0178181, 21.773338 ], [ 89.0202214, 21.7647293 ], [ 89.0227963, 21.7586711 ], [ 89.020908, 21.7609031 ], [ 89.0178181, 21.7637728 ], [ 89.0162732, 21.7650482 ], [ 89.0124966, 21.7658453 ], [ 89.0070034, 21.7655264 ], [ 89.0015103, 21.7656859 ], [ 88.9989354, 21.766483 ], [ 88.9987637, 21.7690337 ], [ 88.9997937, 21.7699902 ], [ 89.0027119, 21.7717438 ], [ 89.0068318, 21.773338 ], [ 89.0106083, 21.7755698 ], [ 89.0119816, 21.7763668 ], [ 89.0130116, 21.7779609 ], [ 89.0131832, 21.780352 ], [ 89.0126683, 21.7822649 ], [ 89.0076901, 21.7843372 ], [ 89.0039135, 21.7857718 ], [ 88.9984204, 21.7873658 ], [ 88.9939572, 21.7888004 ], [ 88.9901806, 21.7902349 ], [ 88.9936139, 21.7966106 ], [ 88.993695662089252, 21.796975 ], [ 88.993695662089237, 21.796975 ] ] ], [ [ [ 88.5707201, 21.7910838 ], [ 88.5714068, 21.7886928 ], [ 88.5717501, 21.7872582 ], [ 88.5705485, 21.7861424 ], [ 88.5690035, 21.7850266 ], [ 88.5660853, 21.7831138 ], [ 88.563682, 21.7823168 ], [ 88.5616221, 21.782795 ], [ 88.5587039, 21.7840702 ], [ 88.5569872, 21.7855048 ], [ 88.5554423, 21.7861424 ], [ 88.5537257, 21.7864612 ], [ 88.5523524, 21.7874176 ], [ 88.5511508, 21.7880552 ], [ 88.5496058, 21.788374 ], [ 88.5466876, 21.787577 ], [ 88.5449709, 21.7870988 ], [ 88.543941, 21.7866206 ], [ 88.5425677, 21.7866206 ], [ 88.5413661, 21.7869394 ], [ 88.5405077, 21.7893304 ], [ 88.5396494, 21.7909244 ], [ 88.5386195, 21.7920401 ], [ 88.5362162, 21.7925183 ], [ 88.5344996, 21.7915619 ], [ 88.5331263, 21.787577 ], [ 88.5324397, 21.7845484 ], [ 88.5315814, 21.7826356 ], [ 88.5308947, 21.7812009 ], [ 88.5290064, 21.7789692 ], [ 88.5272898, 21.7768969 ], [ 88.5257449, 21.774984 ], [ 88.5241999, 21.7732304 ], [ 88.5217967, 21.7716362 ], [ 88.5197367, 21.7700421 ], [ 88.5183634, 21.7695638 ], [ 88.5161318, 21.7679696 ], [ 88.5139002, 21.7666942 ], [ 88.5121836, 21.7652594 ], [ 88.5097804, 21.7643029 ], [ 88.5078921, 21.763984 ], [ 88.5065188, 21.7638246 ], [ 88.5051455, 21.7646217 ], [ 88.5041155, 21.7654189 ], [ 88.5048022, 21.7676508 ], [ 88.5058321, 21.7695638 ], [ 88.5049738, 21.7703609 ], [ 88.5054888, 21.7725927 ], [ 88.5065188, 21.773071 ], [ 88.5066905, 21.7745057 ], [ 88.50826, 21.7795 ], [ 88.51336, 21.78669 ], [ 88.5205534, 21.794408 ], [ 88.52705, 21.80062 ], [ 88.53339, 21.80563 ], [ 88.53992, 21.80966 ], [ 88.54038, 21.8099 ], [ 88.54155, 21.81085 ], [ 88.5426, 21.81102 ], [ 88.54542, 21.8103 ], [ 88.54976, 21.80956 ], [ 88.55198, 21.80915 ], [ 88.55605, 21.80708 ], [ 88.55753, 21.80553 ], [ 88.55986, 21.80301 ], [ 88.56266, 21.80025 ], [ 88.56547, 21.79673 ], [ 88.5678, 21.79469 ], [ 88.56916, 21.79299 ], [ 88.5707201, 21.7910838 ] ] ], [ [ [ 88.887346940601944, 21.796891598896053 ], [ 88.8868851, 21.7976206 ], [ 88.8849968, 21.8009677 ], [ 88.8837952, 21.8047928 ], [ 88.8839668, 21.8075023 ], [ 88.8856834, 21.8102117 ], [ 88.8867134, 21.8102117 ], [ 88.8887733, 21.810371 ], [ 88.8906616, 21.8100523 ], [ 88.8927216, 21.8110085 ], [ 88.8940948, 21.8121241 ], [ 88.8954681, 21.8135585 ], [ 88.8982147, 21.815949 ], [ 88.9019913, 21.8197738 ], [ 88.9043945, 21.8205706 ], [ 88.9064545, 21.821208 ], [ 88.9090294, 21.8215267 ], [ 88.9110893, 21.8223235 ], [ 88.911776, 21.8237578 ], [ 88.9129776, 21.8237578 ], [ 88.9134926, 21.8253514 ], [ 88.9158958, 21.8253514 ], [ 88.9169258, 21.8247139 ], [ 88.9191574, 21.822961 ], [ 88.9212173, 21.8224829 ], [ 88.9234489, 21.8228016 ], [ 88.9251656, 21.822961 ], [ 88.9261955, 21.8220048 ], [ 88.9279121, 21.821208 ], [ 88.9294571, 21.8216861 ], [ 88.931002, 21.8221642 ], [ 88.9349503, 21.8223235 ], [ 88.9359802, 21.8208893 ], [ 88.9358086, 21.8196144 ], [ 88.9370102, 21.8172239 ], [ 88.9370102, 21.815949 ], [ 88.9359802, 21.8151522 ], [ 88.9340919, 21.8148334 ], [ 88.9328903, 21.8132397 ], [ 88.9322037, 21.8092554 ], [ 88.9304871, 21.8075023 ], [ 88.9285988, 21.8067054 ], [ 88.9272255, 21.8057491 ], [ 88.9267105, 21.8036772 ], [ 88.9279121, 21.8024021 ], [ 88.9279121, 21.8008083 ], [ 88.9275688, 21.7990551 ], [ 88.9253372, 21.796983 ], [ 88.92532662611076, 21.796975 ], [ 88.925216660869495, 21.796891802426209 ], [ 88.925062278879821, 21.796775 ], [ 88.9207024, 21.7934764 ], [ 88.9188141, 21.7929982 ], [ 88.9179558, 21.7915637 ], [ 88.9177841, 21.7894916 ], [ 88.9196724, 21.7890134 ], [ 88.9217323, 21.7891728 ], [ 88.922934, 21.7886946 ], [ 88.922934, 21.78726 ], [ 88.9191574, 21.7780145 ], [ 88.9186424, 21.7764204 ], [ 88.9176125, 21.7737104 ], [ 88.9193291, 21.7722757 ], [ 88.9198441, 21.7706815 ], [ 88.9186424, 21.7694062 ], [ 88.9155525, 21.7660583 ], [ 88.911776, 21.7623915 ], [ 88.910746, 21.7595218 ], [ 88.9109177, 21.7576086 ], [ 88.911776, 21.7568115 ], [ 88.912291, 21.7545794 ], [ 88.9108294, 21.7536243 ], [ 88.9080828, 21.7526677 ], [ 88.9051646, 21.7515516 ], [ 88.902418, 21.7512327 ], [ 88.8977832, 21.7518705 ], [ 88.8960665, 21.7529865 ], [ 88.8955516, 21.7539432 ], [ 88.8962382, 21.759045 ], [ 88.8967532, 21.7631902 ], [ 88.8977832, 21.7662192 ], [ 88.901903, 21.7773784 ], [ 88.9012164, 21.7800883 ], [ 88.9005297, 21.7821606 ], [ 88.8996714, 21.7839141 ], [ 88.8991565, 21.7848705 ], [ 88.8981265, 21.7863051 ], [ 88.8991565, 21.7875803 ], [ 88.9012164, 21.7875803 ], [ 88.9022464, 21.7893337 ], [ 88.902418, 21.7914058 ], [ 88.9038795, 21.7928389 ], [ 88.9050812, 21.7939546 ], [ 88.9045662, 21.7945922 ], [ 88.9031929, 21.793317 ], [ 88.901133, 21.7906073 ], [ 88.900618, 21.7893322 ], [ 88.8986415, 21.7882179 ], [ 88.8970131, 21.7878976 ], [ 88.8956398, 21.788854 ], [ 88.8940948, 21.789651 ], [ 88.8915199, 21.7910855 ], [ 88.889975, 21.7926795 ], [ 88.8886017, 21.794911 ], [ 88.887346940601944, 21.796891598896053 ] ] ], [ [ [ 88.840400684560834, 21.796975 ], [ 88.8407954, 21.7993835 ], [ 88.8419971, 21.80799 ], [ 88.8419971, 21.8114963 ], [ 88.8411388, 21.8183491 ], [ 88.8402804, 21.8259984 ], [ 88.8385638, 21.8344441 ], [ 88.8378772, 21.8395431 ], [ 88.8382205, 21.8438452 ], [ 88.8395938, 21.8476692 ], [ 88.8428554, 21.8524491 ], [ 88.8464603, 21.8565915 ], [ 88.8509234, 21.8610525 ], [ 88.8519534, 21.862327 ], [ 88.8529834, 21.8636015 ], [ 88.85367, 21.8645574 ], [ 88.8543567, 21.8650354 ], [ 88.8553866, 21.864876 ], [ 88.8574466, 21.8647167 ], [ 88.8574466, 21.8626457 ], [ 88.8560733, 21.8621677 ], [ 88.8553866, 21.8610525 ], [ 88.8555583, 21.8593 ], [ 88.85573, 21.8573881 ], [ 88.8564166, 21.8562729 ], [ 88.8579616, 21.854839 ], [ 88.8596782, 21.8540424 ], [ 88.8631114, 21.8537237 ], [ 88.8651713, 21.8542017 ], [ 88.8684329, 21.8526084 ], [ 88.8701495, 21.8516525 ], [ 88.8718661, 21.8521305 ], [ 88.8735828, 21.8524491 ], [ 88.8756427, 21.8526084 ], [ 88.8766727, 21.8518118 ], [ 88.8768443, 21.8502185 ], [ 88.875986, 21.8476692 ], [ 88.874956, 21.8454386 ], [ 88.8725528, 21.8440045 ], [ 88.8710078, 21.8430485 ], [ 88.8691196, 21.8419332 ], [ 88.8672313, 21.8412958 ], [ 88.8660297, 21.8403398 ], [ 88.8680896, 21.8408178 ], [ 88.8706645, 21.8417738 ], [ 88.8720378, 21.8425705 ], [ 88.8732394, 21.8433672 ], [ 88.8746127, 21.8443232 ], [ 88.8752994, 21.8441639 ], [ 88.8761577, 21.8440045 ], [ 88.8766727, 21.8422518 ], [ 88.8768443, 21.8401804 ], [ 88.877016, 21.838109 ], [ 88.8773593, 21.8363562 ], [ 88.8778743, 21.8341254 ], [ 88.8795909, 21.8315758 ], [ 88.8804492, 21.8301416 ], [ 88.8802775, 21.82807 ], [ 88.8792476, 21.8256797 ], [ 88.8785609, 21.8226519 ], [ 88.8785609, 21.8205802 ], [ 88.8790759, 21.8194647 ], [ 88.8771876, 21.8191459 ], [ 88.8747844, 21.8183491 ], [ 88.8728961, 21.8180304 ], [ 88.8699779, 21.8185085 ], [ 88.8682612, 21.8189866 ], [ 88.8670596, 21.8180304 ], [ 88.8655147, 21.816118 ], [ 88.8651713, 21.8137275 ], [ 88.866373, 21.8156399 ], [ 88.8684329, 21.817871 ], [ 88.8699779, 21.817871 ], [ 88.8715228, 21.8175523 ], [ 88.8735828, 21.8172336 ], [ 88.875471, 21.8180304 ], [ 88.8778743, 21.8188272 ], [ 88.8792476, 21.8181898 ], [ 88.8799342, 21.8169148 ], [ 88.8814792, 21.8157993 ], [ 88.8830241, 21.8143649 ], [ 88.8831958, 21.8121338 ], [ 88.8813075, 21.8091057 ], [ 88.8804492, 21.8086275 ], [ 88.8801059, 21.8071932 ], [ 88.8806209, 21.8048025 ], [ 88.8814792, 21.8006585 ], [ 88.8825091, 21.797152 ], [ 88.882683115595114, 21.796775 ], [ 88.882683115595128, 21.796775 ], [ 88.8840541, 21.7938048 ], [ 88.886629, 21.7907764 ], [ 88.888689, 21.7885448 ], [ 88.8921222, 21.7855162 ], [ 88.8943538, 21.7837628 ], [ 88.897272, 21.7813717 ], [ 88.8976153, 21.7789806 ], [ 88.8969287, 21.7765895 ], [ 88.8924655, 21.7659085 ], [ 88.8912639, 21.7614446 ], [ 88.8909206, 21.7566617 ], [ 88.8916072, 21.7529947 ], [ 88.8934955, 21.7496465 ], [ 88.8952121, 21.748052 ], [ 88.8986453, 21.7461387 ], [ 88.9022502, 21.7455009 ], [ 88.9051684, 21.7455009 ], [ 88.9080867, 21.7459793 ], [ 88.9116916, 21.746617 ], [ 88.9146098, 21.7469359 ], [ 88.9170131, 21.7472548 ], [ 88.9192447, 21.7453415 ], [ 88.9204463, 21.7448631 ], [ 88.921133, 21.7432687 ], [ 88.9213046, 21.7410364 ], [ 88.919073, 21.737369 ], [ 88.9168414, 21.7343393 ], [ 88.9154681, 21.7308312 ], [ 88.9142665, 21.7274824 ], [ 88.9098033, 21.7289176 ], [ 88.9055118, 21.7313096 ], [ 88.9034518, 21.733542 ], [ 88.8998469, 21.7360933 ], [ 88.8952121, 21.7392824 ], [ 88.8910922, 21.7419931 ], [ 88.8842258, 21.7456604 ], [ 88.8811359, 21.7470954 ], [ 88.8797626, 21.7585749 ], [ 88.8787326, 21.7619229 ], [ 88.877016, 21.7660679 ], [ 88.8751277, 21.7686187 ], [ 88.8725528, 21.7708506 ], [ 88.8680896, 21.7741983 ], [ 88.8646564, 21.7761112 ], [ 88.864313, 21.7775459 ], [ 88.865343, 21.7781836 ], [ 88.8649997, 21.77914 ], [ 88.8639697, 21.778343 ], [ 88.8629397, 21.7777053 ], [ 88.8608798, 21.778343 ], [ 88.8581332, 21.77914 ], [ 88.8545283, 21.7797777 ], [ 88.8519534, 21.7797777 ], [ 88.8481769, 21.7797777 ], [ 88.8454303, 21.7796183 ], [ 88.8437137, 21.7796183 ], [ 88.8409671, 21.7799371 ], [ 88.8378772, 21.7805747 ], [ 88.8365039, 21.7812123 ], [ 88.8358172, 21.7816905 ], [ 88.8356456, 21.7831252 ], [ 88.8365039, 21.7855162 ], [ 88.8380488, 21.7885448 ], [ 88.8385638, 21.7904576 ], [ 88.8404521, 21.7909358 ], [ 88.8395938, 21.7920515 ], [ 88.840400684560834, 21.796975 ] ] ], [ [ [ 88.927707061960675, 21.796975 ], [ 88.9285988, 21.79778 ], [ 88.9294571, 21.7995332 ], [ 88.9296288, 21.8012864 ], [ 88.9285988, 21.8025615 ], [ 88.9284271, 21.8044741 ], [ 88.9298004, 21.8059085 ], [ 88.932547, 21.8067054 ], [ 88.9339203, 21.8086179 ], [ 88.9339203, 21.8121241 ], [ 88.9351219, 21.8133991 ], [ 88.9385551, 21.8146741 ], [ 88.9390701, 21.8167458 ], [ 88.9378685, 21.8183395 ], [ 88.9375252, 21.819455 ], [ 88.9375252, 21.8218455 ], [ 88.9363235, 21.8231203 ], [ 88.9349503, 21.8240765 ], [ 88.9337486, 21.8235984 ], [ 88.9282555, 21.8232797 ], [ 88.9263672, 21.8245546 ], [ 88.9265388, 21.8277417 ], [ 88.9268822, 21.830132 ], [ 88.9255089, 21.8322035 ], [ 88.9249939, 21.8336377 ], [ 88.9251656, 21.8353905 ], [ 88.9270538, 21.8358685 ], [ 88.931002, 21.8358685 ], [ 88.933062, 21.8363466 ], [ 88.9344353, 21.837462 ], [ 88.9349503, 21.8395334 ], [ 88.9351219, 21.8422422 ], [ 88.9354652, 21.8446323 ], [ 88.9364952, 21.8460663 ], [ 88.9388985, 21.8463849 ], [ 88.9402718, 21.8468629 ], [ 88.9414734, 21.8468629 ], [ 88.943705, 21.8436762 ], [ 88.9454216, 21.8408082 ], [ 88.9462799, 21.8392147 ], [ 88.9474815, 21.8369839 ], [ 88.9483398, 21.8342751 ], [ 88.9493698, 21.8310881 ], [ 88.9509148, 21.8282198 ], [ 88.9521164, 21.8266262 ], [ 88.9545197, 21.8245546 ], [ 88.9577812, 21.822961 ], [ 88.9615578, 21.8224829 ], [ 88.9742607, 21.8220048 ], [ 88.9754623, 21.8216861 ], [ 88.9758057, 21.8210487 ], [ 88.9759773, 21.819455 ], [ 88.9706558, 21.8027209 ], [ 88.9687675, 21.8025615 ], [ 88.9667076, 21.8039959 ], [ 88.9648193, 21.8059085 ], [ 88.9620728, 21.8067054 ], [ 88.9555496, 21.8079804 ], [ 88.9541763, 21.807821 ], [ 88.9526314, 21.8071835 ], [ 88.9516014, 21.8063866 ], [ 88.9500565, 21.8051116 ], [ 88.9486832, 21.8049522 ], [ 88.943688115248904, 21.796775 ], [ 88.94216, 21.7942734 ], [ 88.9413017, 21.7931576 ], [ 88.9404434, 21.7926795 ], [ 88.9392418, 21.7898104 ], [ 88.9390701, 21.7877382 ], [ 88.9397568, 21.7842314 ], [ 88.9404434, 21.7819997 ], [ 88.9418167, 21.7813621 ], [ 88.94422, 21.7794492 ], [ 88.9534897, 21.7770581 ], [ 88.9582962, 21.7757828 ], [ 88.9596695, 21.7757828 ], [ 88.9608711, 21.7738698 ], [ 88.9594978, 21.7711598 ], [ 88.9572662, 21.7686091 ], [ 88.9550346, 21.7668554 ], [ 88.9529747, 21.7663772 ], [ 88.9516014, 21.7657395 ], [ 88.9497131, 21.7647829 ], [ 88.9485115, 21.7641452 ], [ 88.9449066, 21.7643046 ], [ 88.9327187, 21.7665366 ], [ 88.9298004, 21.7665366 ], [ 88.9273972, 21.766696 ], [ 88.9256805, 21.766696 ], [ 88.9239639, 21.7665366 ], [ 88.921904, 21.7660583 ], [ 88.9200157, 21.7647829 ], [ 88.9184708, 21.7635075 ], [ 88.9174408, 21.7617538 ], [ 88.9170975, 21.7601595 ], [ 88.9172691, 21.7585652 ], [ 88.9174408, 21.7574492 ], [ 88.9164108, 21.7556954 ], [ 88.9146942, 21.7561738 ], [ 88.9131493, 21.7584058 ], [ 88.9131493, 21.7600001 ], [ 88.9140076, 21.7623915 ], [ 88.9215607, 21.769725 ], [ 88.921389, 21.7714786 ], [ 88.9205307, 21.7737104 ], [ 88.9200157, 21.7746669 ], [ 88.9248222, 21.788057 ], [ 88.9246506, 21.7894916 ], [ 88.9232773, 21.7901291 ], [ 88.9212173, 21.7907667 ], [ 88.9200157, 21.7907667 ], [ 88.920359, 21.7917231 ], [ 88.922419, 21.7922013 ], [ 88.927707061960675, 21.796975 ] ] ] ] } } +] +} diff --git a/src/osdagbridge/desktop/ui/dialogs/project_location.py b/src/osdagbridge/desktop/ui/dialogs/project_location.py index 9e3bbed27..f6fed11ba 100644 --- a/src/osdagbridge/desktop/ui/dialogs/project_location.py +++ b/src/osdagbridge/desktop/ui/dialogs/project_location.py @@ -1,7 +1,7 @@ from PySide6.QtWidgets import ( QDialog, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QWidget, QFrame, QPushButton, QComboBox, QSizePolicy, QSizeGrip, - QRadioButton, QButtonGroup, QStackedWidget, QSpacerItem + QRadioButton, QButtonGroup, QStackedWidget, QSpacerItem, QCheckBox ) from PySide6.QtCore import Qt from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar @@ -393,6 +393,17 @@ def _add_map_page(self): self.zone_overlay_combo = NoScrollComboBox() self.zone_overlay_combo.addItems(["None", "Seismic Zone", "Wind Zone"]) + controls_row = QHBoxLayout() + controls_row.setContentsMargins(8, 4, 8, 0) + controls_row.setSpacing(10) + controls_row.addWidget(QLabel("Map Options:")) + + self.boundary_overlay_checkbox = QCheckBox("Show India boundary overlay") + self.boundary_overlay_checkbox.setChecked(True) + controls_row.addWidget(self.boundary_overlay_checkbox) + controls_row.addStretch(1) + vbox.addLayout(controls_row) + self.map_view = NativeMapWidget() vbox.addWidget(self.map_view, 1) @@ -617,6 +628,7 @@ def _connect_signals(self): # Zone overlay dropdown self.zone_overlay_combo.currentTextChanged.connect(self._on_zone_overlay_changed) + self.boundary_overlay_checkbox.toggled.connect(self._on_boundary_overlay_toggled) def _set_active_method(self, method): if method == "location_name" and self.method_radio_location.isChecked(): @@ -781,6 +793,10 @@ def _on_zone_overlay_changed(self, text: str): # Update legend self._update_zone_legend(overlay_type) + + def _on_boundary_overlay_toggled(self, enabled: bool): + """Toggle GeoJSON boundary drawing for map performance.""" + self.map_view.set_geojson_overlay_visible(enabled) def _update_zone_legend(self, overlay_type: str): """Update the legend display based on overlay type.""" diff --git a/src/osdagbridge/desktop/ui/widgets/native_map.py b/src/osdagbridge/desktop/ui/widgets/native_map.py index 604992881..c7470e795 100644 --- a/src/osdagbridge/desktop/ui/widgets/native_map.py +++ b/src/osdagbridge/desktop/ui/widgets/native_map.py @@ -1,5 +1,6 @@ import math +import json from pathlib import Path from functools import lru_cache from PySide6.QtWidgets import QWidget @@ -55,6 +56,11 @@ def __init__(self, parent=None): # In-memory image cache (url -> QPixmap) self.pixmap_cache = {} + self._pending_tile_requests = set() + + # GeoJSON boundary overlay cache + self._geojson_shapes = [] # list[tuple[list[(lon, lat)], closed]] + self._geojson_visible = True # Interaction state self._last_mouse_pos = QPoint() @@ -68,6 +74,7 @@ def __init__(self, parent=None): # Initialize self.setMinimumSize(400, 300) + self.load_geojson(_DATA_DIR / "india-osm.geojson") def paintEvent(self, event): painter = QPainter(self) @@ -104,10 +111,14 @@ def paintEvent(self, event): # Logic to draw the specific tile self.draw_tile(painter, tile_x, tile_y, col, row, view_x, view_y) - + # 3.5. Draw zone overlay if active if self._overlay_type != "none" and self._overlay_pixmap: self._draw_zone_overlay(painter, view_x, view_y) + + # Draw GeoJSON administrative boundary on top of raster layers. + if self._geojson_visible: + self.draw_geojson(painter, view_x, view_y) # 4. Draw Marker (Pin) if it exists if self.marker_lat is not None and self.marker_lon is not None: @@ -131,30 +142,41 @@ def paintEvent(self, event): painter.end() def draw_tile(self, painter, tile_x, tile_y, col, row, view_x, view_y): - url = f"https://tile.openstreetmap.org/{self.zoom}/{tile_x}/{tile_y}.png" + base_url = f"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{self.zoom}/{tile_y}/{tile_x}" + labels_url = f"https://server.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{self.zoom}/{tile_y}/{tile_x}" # Calculate screen position screen_x = (col * self.tile_size) - view_x screen_y = (row * self.tile_size) - view_y - if url in self.pixmap_cache: - painter.drawPixmap(int(screen_x), int(screen_y), self.pixmap_cache[url]) + if base_url in self.pixmap_cache: + painter.drawPixmap(int(screen_x), int(screen_y), self.pixmap_cache[base_url]) else: # Draw placeholder painter.setBrush(QColor(240, 240, 240)) painter.drawRect(int(screen_x), int(screen_y), self.tile_size, self.tile_size) - self.fetch_tile(url) + self.fetch_tile(base_url) + + if labels_url in self.pixmap_cache: + painter.drawPixmap(int(screen_x), int(screen_y), self.pixmap_cache[labels_url]) + else: + self.fetch_tile(labels_url) def fetch_tile(self, url): + if url in self.pixmap_cache or url in self._pending_tile_requests: + return + request = QNetworkRequest(QUrl(url)) request.setAttribute(QNetworkRequest.CacheLoadControlAttribute, QNetworkRequest.PreferCache) # Identify user agent as polite usage policy requires request.setHeader(QNetworkRequest.UserAgentHeader, "OsdagBridge/1.0 (Garvit)") - + + self._pending_tile_requests.add(url) reply = self.manager.get(request) reply.finished.connect(lambda: self.on_tile_loaded(reply, url)) def on_tile_loaded(self, reply, url): + self._pending_tile_requests.discard(url) if reply.error() == QNetworkReply.NoError: data = reply.readAll() pixmap = QPixmap() @@ -163,6 +185,76 @@ def on_tile_loaded(self, reply, url): self.update() # Trigger repaint reply.deleteLater() + def load_geojson(self, path): + """Load GeoJSON boundaries (FeatureCollection) for rendering.""" + self._geojson_shapes = [] + geojson_path = Path(path) + if not geojson_path.exists(): + return + + try: + with geojson_path.open("r", encoding="utf-8") as file_obj: + data = json.load(file_obj) + except (OSError, json.JSONDecodeError): + return + + for feature in data.get("features", []): + geometry = feature.get("geometry") or {} + geom_type = geometry.get("type") + coords = geometry.get("coordinates", []) + + if geom_type == "Polygon": + for ring in coords: + self._geojson_shapes.append((ring, True)) + elif geom_type == "MultiPolygon": + for polygon in coords: + for ring in polygon: + self._geojson_shapes.append((ring, True)) + elif geom_type == "LineString": + self._geojson_shapes.append((coords, False)) + elif geom_type == "MultiLineString": + for line in coords: + self._geojson_shapes.append((line, False)) + + self.update() + + def draw_geojson(self, painter: QPainter, view_x: float, view_y: float): + """Draw loaded GeoJSON boundary using map pixel projection.""" + if not self._geojson_shapes: + return + + painter.save() + pen = QPen(QColor("#092133")) + pen.setWidth(3) + pen.setCosmetic(True) + painter.setPen(pen) + painter.setBrush(Qt.NoBrush) + + for points, is_closed in self._geojson_shapes: + if len(points) < 2: + continue + + path = QPainterPath() + first_lon, first_lat = points[0] + first_px_x, first_px_y = self.lat_lon_to_pixel(first_lat, first_lon, self.zoom) + path.moveTo(first_px_x - view_x, first_px_y - view_y) + + for lon, lat in points[1:]: + px_x, px_y = self.lat_lon_to_pixel(lat, lon, self.zoom) + path.lineTo(px_x - view_x, px_y - view_y) + + if is_closed: + path.closeSubpath() + + painter.drawPath(path) + + painter.restore() + + def set_geojson_overlay_visible(self, visible: bool): + """Toggle GeoJSON boundary rendering for performance.""" + self._geojson_visible = bool(visible) + self.update() + # --- Interaction --- def mousePressEvent(self, event: QMouseEvent): if event.button() == Qt.LeftButton: From ffa35aae6a10664973475b1749c4b5d6e6cd22ae Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Tue, 28 Apr 2026 01:29:12 +0530 Subject: [PATCH 168/225] changed the percentagebar context from 100 to 150 --- src/osdagbridge/desktop/ui/utils/custom_widgets.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/osdagbridge/desktop/ui/utils/custom_widgets.py b/src/osdagbridge/desktop/ui/utils/custom_widgets.py index d08a4df8f..e98cd02af 100644 --- a/src/osdagbridge/desktop/ui/utils/custom_widgets.py +++ b/src/osdagbridge/desktop/ui/utils/custom_widgets.py @@ -186,8 +186,9 @@ def paintEvent(self, event): Visual behaviour ---------------- - value < 100 → green fill, proportional width, "XX%" text to the right - value >= 100 → red fill, full width, "XX%" text to the right + value < 100 → green fill, proportional width (scale 0–150), "XX%" text to the right + value >= 100 → red fill, proportional width (scale 0–150), "XX%" text to the right + value >= 150 → red fill, full width """ # -- Colours ------------------------------------------------------------------- @@ -225,7 +226,7 @@ def paintEvent(self, event): radius = h / 2.0 exceeded = self._value >= 100.0 - fill_ratio = 1.0 if exceeded else self._value / 100.0 + fill_ratio = min(self._value / 150.0, 1.0) fill_w = w * fill_ratio painter.setPen(Qt.NoPen) From 2a991841001e0aad90086f31f62588808e3375f8 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 26 Apr 2026 18:28:28 +0530 Subject: [PATCH 169/225] remove dead code and centralise scaling logic - Remove deprecated/unused code - Extract scaling helpers (dedupe calculations) - Centralize color constants - Drop legacy girder keys + dead branches - Skip redundant updates via _last_mapped_params --- .../desktop/ui/docks/cad_cross_section.py | 393 ++++++------------ .../desktop/ui/docks/cad_dual_view.py | 42 +- 2 files changed, 166 insertions(+), 269 deletions(-) diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 3fab9f862..8a89c2674 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -6,10 +6,8 @@ import math from PySide6.QtWidgets import QWidget, QPushButton, QScrollArea -from PySide6.QtCore import Qt, QRectF, QPointF, QTimer -from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF, QIcon from PySide6.QtCore import Qt, QRectF, QPointF, QTimer, QSize -from PySide6.QtGui import QPixmap +from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF, QIcon, QPixmap from osdagbridge.desktop.cad.irc5_geometry import ( CrashBarrierGeometry, RailingGeometry, @@ -21,7 +19,7 @@ class CrossSectionCADWidget(QWidget): """Widget for drawing bridge cross-section view""" # ===== SHARED CAD COLORS ===== GIRDER_COLOR = QColor(179, 180, 160) - # STIFFENER_COLOR = QColor(79, 78, 70) + STIFFENER_COLOR = QColor(210, 210, 205) CROSS_BRACING_COLOR = QColor(235, 236, 211) RAILING_COLOR = QColor(210, 210, 210) BARRIER_COLOR = QColor(220, 220, 220) @@ -56,10 +54,9 @@ def __init__(self, parent=None): # Zoom level for this widget self.zoom_level = 1.0 - - # Setup zoom controls inside this widget (but not for previews inside scroll areas) - # Will be called after widget is fully initialized - self._zoom_controls_setup = False + + # Preserve rendered CAD height between parameter updates for non-preview mode. + self._saved_cad_height_px = None # bridge parameters with default values (all in mm) # These are the CAD state variables @@ -91,9 +88,7 @@ def __init__(self, parent=None): 'bottom_flange_width': 180, 'bottom_flange_thickness': 22, 'web_thickness': 15, - # Legacy support for symmetric sections - 'flange_width': 180, - 'flange_thickness': 22, + } # stiffener dimensions @@ -172,12 +167,12 @@ def setup_zoom_controls(self): self.zoom_out_btn.clicked.connect(self.zoom_out) self.zoom_out_btn.hide() # Hide initially - self.zoom_reset_btn = QPushButton(self) - self.zoom_reset_btn.setFixedSize(25, 25) - self.zoom_reset_btn.setIcon(QIcon(":/vectors/fit_to_screen.svg")) - self.zoom_reset_btn.setIconSize(QSize(25, 25)) - self.zoom_reset_btn.setToolTip("Fit to screen") - self.zoom_reset_btn.setStyleSheet(""" + self.fit_to_screen_btn = QPushButton(self) + self.fit_to_screen_btn.setFixedSize(25, 25) + self.fit_to_screen_btn.setIcon(QIcon(":/vectors/fit_to_screen.svg")) + self.fit_to_screen_btn.setIconSize(QSize(25, 25)) + self.fit_to_screen_btn.setToolTip("Fit to screen") + self.fit_to_screen_btn.setStyleSheet(""" QPushButton { background-color: rgba(255, 255, 255, 200); color: #333333; @@ -191,8 +186,8 @@ def setup_zoom_controls(self): color: white; } """) - self.zoom_reset_btn.clicked.connect(self.fit_to_screen) - self.zoom_reset_btn.hide() # Hide initially + self.fit_to_screen_btn.clicked.connect(self.fit_to_screen) + self.fit_to_screen_btn.hide() # Hide initially # Set minimum size for visibility self.setMinimumSize(400, 300) @@ -228,7 +223,7 @@ def _position_zoom_buttons(self): if self.zoom_in_btn.parent() != viewport: self.zoom_in_btn.setParent(viewport) self.zoom_out_btn.setParent(viewport) - self.zoom_reset_btn.setParent(viewport) + self.fit_to_screen_btn.setParent(viewport) # Position in top-right corner of VIEWPORT margin = 10 @@ -237,15 +232,15 @@ def _position_zoom_buttons(self): self.zoom_in_btn.move(x + 10, y) self.zoom_out_btn.move(x + 10, y + 30) - self.zoom_reset_btn.move(x+10, y + 60) + self.fit_to_screen_btn.move(x+10, y + 60) # Ensure buttons are visible and on top self.zoom_in_btn.show() self.zoom_out_btn.show() - self.zoom_reset_btn.show() + self.fit_to_screen_btn.show() self.zoom_in_btn.raise_() self.zoom_out_btn.raise_() - self.zoom_reset_btn.raise_() + self.fit_to_screen_btn.raise_() def eventFilter(self, obj, event): @@ -276,11 +271,13 @@ def zoom_in(self): # Apply zoom self.zoom_level *= 1.1 + if self._saved_cad_height_px is not None: + self._saved_cad_height_px *= 1.1 self._update_widget_size() self.update() # Restore center position after zoom - self._set_scroll_center(old_center, 1.1) + self._set_scroll_center(old_center) def zoom_out(self): """Zoom out while keeping view centered""" @@ -289,24 +286,22 @@ def zoom_out(self): # Apply zoom self.zoom_level /= 1.1 + if self._saved_cad_height_px is not None: + self._saved_cad_height_px /= 1.1 self._update_widget_size() self.update() # Restore center position after zoom - self._set_scroll_center(old_center, 1/1.1) + self._set_scroll_center(old_center) - def compute_fit_zoom(self, mode="full"): + def compute_fit_zoom(self): """ - Compute zoom level. - mode="full" -> content fits both width and height (min(scale_x, scale_y)) - mode="height" -> content fits only height (unconstrained width) + Compute zoom level so content fits both width and height. """ total_deck_width, _ = self.compute_deck_total_width() # Denominator for height fit (matches draw_cross_section logic) - model_h = (self.girder['depth'] * self.girder_visual_scale['depth'] + - self.params['deck_thickness'] + - self.params['footpath_thickness'] + 800) + model_h = self._compute_model_height_mm() # Base dimensions Used in draw_cross_section when zoom=1.0 base_w, base_h = 1000, 600 @@ -334,28 +329,52 @@ def compute_fit_zoom(self, mode="full"): target_scale_x = avail_vp_w / total_deck_width target_scale_y = avail_vp_h / model_h - - if mode == "height": - target_scale = target_scale_y - else: - target_scale = min(target_scale_x, target_scale_y) + target_scale = min(target_scale_x, target_scale_y) return target_scale / base_scale def fit_to_screen(self): """Scale the diagram so it fits perfectly inside the visible viewport and center it.""" - self.zoom_level = self.compute_fit_zoom(mode="full") + self.zoom_level = self.compute_fit_zoom() + self._saved_cad_height_px = self._compute_effective_model_height_px(use_full_fit=True) self._update_widget_size() self.update() self._center_scroll_bars() - def zoom_reset(self): - """Standard behavior: Fit to height only.""" - self.zoom_level = self.compute_fit_zoom(mode="height") - self._update_widget_size() - self.update() - # Center the scrollbars after size update - QTimer.singleShot(50, self._center_scroll_bars) + def _compute_model_height_mm(self): + """Return model height in mm used for cross-section scaling.""" + return ( + self.girder['depth'] * self.girder_visual_scale['depth'] + + self.params['deck_thickness'] + + self.params['footpath_thickness'] + + 800 + ) + + def _compute_non_preview_canvas(self): + """Return non-preview canvas dimensions and margins.""" + base_width = 1000 + base_height = 600 + width = base_width * self.zoom_level + height = base_height * self.zoom_level + margin_x = 80 + margin_y = 80 + bottom_margin = 80 # extra clearance for dimension labels + return width, height, margin_x, margin_y, bottom_margin + + def _compute_effective_model_height_px(self, use_full_fit=False): + """Compute rendered model height in pixels for the current non-preview state.""" + width, height, margin_x, margin_y, bottom_margin = self._compute_non_preview_canvas() + total_deck_width, _ = self.compute_deck_total_width() + model_h = self._compute_model_height_mm() + + avail_w = max(1.0, width - 2 * margin_x) + avail_h = max(1.0, height - 2 * margin_y - bottom_margin) + + scale_x = avail_w / max(total_deck_width, 1e-9) + scale_y = avail_h / max(model_h, 1e-9) + scale = min(scale_x, scale_y) if use_full_fit else scale_y + scale *= self.scale_factor + return model_h * scale def _center_scroll_bars(self): """Center the scrollbars of the parent scroll area.""" @@ -365,6 +384,15 @@ def _center_scroll_bars(self): h_bar.setValue((h_bar.minimum() + h_bar.maximum()) // 2) v_bar.setValue((v_bar.minimum() + v_bar.maximum()) // 2) + def _center_horizontal_scroll(self): + """Center only horizontal scrollbar (used after input-driven redraw).""" + if self.scroll_area is None: + self._position_zoom_buttons() + + if self.scroll_area: + h_bar = self.scroll_area.horizontalScrollBar() + h_bar.setValue((h_bar.minimum() + h_bar.maximum()) // 2) + def _get_scroll_center(self): """Get the current center point of the visible viewport in widget coordinates""" if not self.scroll_area: @@ -396,7 +424,7 @@ def _get_scroll_center(self): else: return (0.5, 0.5) - def _set_scroll_center(self, old_center, zoom_ratio): + def _set_scroll_center(self, old_center): """Set scroll position to keep the same center point visible after zoom""" if not self.scroll_area: return @@ -440,30 +468,15 @@ def _update_widget_size(self): base_width = 1000 base_height = 600 - - # For height-only zoom, we need to ensure the widget is wide enough to contain the content + total_deck_width, _ = self.compute_deck_total_width() - - # Calculate content width at current zoom level - # Scale logic: width = base_width * zoom_level, scale_x = (width - 160) / total_deck_width - # scale_y = (height - 240) / model_h - # So content_width_px = total_deck_width * scale = total_deck_width * (target_scale) - # target_scale = zoom_level * base_scale - - model_h = (self.girder['depth'] * self.girder_visual_scale['depth'] + - self.params['deck_thickness'] + - self.params['footpath_thickness'] + 800) - - margin_x, margin_y = 80, 80 - avail_base_w = base_width - 2 * margin_x - avail_base_h = base_height - 2 * margin_y - 80 - - base_scale_x = avail_base_w / total_deck_width - base_scale_y = avail_base_h / model_h - base_scale = min(base_scale_x, base_scale_y) - - current_scale = self.zoom_level * base_scale - content_width_px = total_deck_width * current_scale + 2 * margin_x + model_h = self._compute_model_height_mm() + + if self._saved_cad_height_px is None: + self._saved_cad_height_px = self._compute_effective_model_height_px(use_full_fit=False) + + scale_from_saved_height = self._saved_cad_height_px / max(model_h, 1e-9) + content_width_px = total_deck_width * scale_from_saved_height + 2 * 80 # The widget should be at least as wide/high as its viewport OR content dimensions if self.scroll_area and self.scroll_area.viewport(): @@ -472,8 +485,6 @@ def _update_widget_size(self): else: vp_w, vp_h = base_width, base_height - content_width_px = base_width * self.zoom_level - new_width = int(max(vp_w, content_width_px * 1.2)) # extra buffer new_height = int(max(vp_h, base_height * self.zoom_level)) @@ -504,8 +515,10 @@ def update_params(self, params: dict): self.median_type = params["median_type"] self.show_dimensions = True - self.zoom_reset() # Auto-fit height on parameter change + # Keep last saved CAD height; do not auto-fit on parameter change. + self._update_widget_size() self.update() + QTimer.singleShot(0, self._center_horizontal_scroll) def mouseMoveEvent(self, event): """Handle mouse hover for both labels and structural elements""" @@ -533,24 +546,6 @@ def mouseMoveEvent(self, event): self.hovered_element = new_hovered_element self.update() - def register_hover_label(self, x, y, text, bg_color, text_color, font_size=9): - """lables for catching hover hovering""" - font_size = max(1, font_size) - font = QFont('Arial', font_size, QFont.Bold) - metrics = self.fontMetrics() - text_rect = metrics.boundingRect(text) - - padding = 5 - hover_rect = QRectF(x - padding, y - text_rect.height() - padding, - text_rect.width() + 2*padding + 20, text_rect.height() + 2*padding + 10) - - self.hover_labels.append((hover_rect, text, bg_color, text_color)) - return len(self.hover_labels) - 1 - - def draw_hover_label_if_active(self, painter, label_index, x, y, text, bg_color, text_color, font_size=9): - """label only if its being hovered""" - if self.hovered_label_index == label_index: - self.draw_text_with_background(painter, x, y, text, bg_color, text_color, font_size, True) def paintEvent(self, event): # Position buttons on first paint if not done yet @@ -1305,96 +1300,6 @@ def draw_side_assembly(is_left): hover_rect = QRectF(median_start_x, y_top_kerb - post_h, median_width_px, post_h + h_kerb) self.cross_section_hover_zones.append((hover_rect, 'median')) - def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color): - """DEPRECATED: Use draw_rcc_barrier_median or dispatcher instead.""" - pass - CONCRETE_COLOR = QColor(225, 225, 225) - - - # Dimensions - TOTAL_HEIGHT = 900.0 - TOP_WIDTH = 175.0 - BOTTOM_WIDTH = 350.0 - BASE_VERTICAL = 100.0 - - h = TOTAL_HEIGHT * scale - top_w = TOP_WIDTH * scale - bottom_w = BOTTOM_WIDTH * scale - base_v = BASE_VERTICAL * scale - - median_width_px = median_end_x - median_start_x - - # Check if barriers fit - if bottom_w * 2 > median_width_px: - fit_scale = median_width_px / (bottom_w * 2) * 0.9 - h *= fit_scale - top_w *= fit_scale - bottom_w *= fit_scale - base_v *= fit_scale - - gap = median_width_px - 2 * bottom_w - if gap < 5: - gap = 5 - bottom_w = (median_width_px - gap) / 2 - ratio = bottom_w / (BOTTOM_WIDTH * scale) - h *= ratio - top_w *= ratio - base_v *= ratio - - y = deck_top_y - y_base_top = y - base_v - y_mid = y - (350 * scale * (h / (TOTAL_HEIGHT * scale))) # proportional - y_top = y - h - - # Offsets - scale_ratio = bottom_w / (BOTTOM_WIDTH * scale) if BOTTOM_WIDTH * scale > 0 else 1 - right_at_mid = 250 * scale * scale_ratio - left_at_top = 50 * scale * scale_ratio - right_at_top = 225 * scale * scale_ratio - - # LEFT barrier - front faces LEFT (toward left carriageway) - # This is the mirrored version - x_left = median_start_x - - points_left = [ - QPointF(x_left, y), # bottom-left - QPointF(x_left + bottom_w, y), # bottom-right - QPointF(x_left + bottom_w, y_base_top), # right after base - QPointF(x_left + bottom_w - left_at_top, y_top), # top-right - QPointF(x_left + bottom_w - right_at_top, y_top), # top-left - QPointF(x_left + bottom_w - right_at_mid, y_mid), # left at middle - QPointF(x_left, y_base_top), # left after base - ] - - painter.setBrush(QBrush(self.MEDIAN_COLOR)) - painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) - painter.drawPolygon(QPolygonF(points_left)) - - # RIGHT barrier - front faces RIGHT (toward right carriageway) - # This is the original orientation - x_right = median_end_x - bottom_w - - points_right = [ - QPointF(x_right, y), # bottom-left - QPointF(x_right + bottom_w, y), # bottom-right - QPointF(x_right + bottom_w, y_base_top), # right after base - QPointF(x_right + right_at_mid, y_mid), # right at middle - QPointF(x_right + right_at_top, y_top), # top-right - QPointF(x_right + left_at_top, y_top), # top-left - QPointF(x_right, y_base_top), # left after base - ] - - painter.setBrush(QBrush(QColor(221, 221, 221))) - painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) - painter.drawPolygon(QPolygonF(points_right)) - # ---- Register hover zone for median ---- - hover_rect = QRectF( - median_start_x, - y_top, - median_end_x - median_start_x, - h - ) - self.cross_section_hover_zones.append((hover_rect, 'median')) def _get_crash_barrier_rendered_width_mm(self): """Return the actual crash barrier footprint width used by draw_crash_barrier.""" @@ -1409,23 +1314,20 @@ def _get_crash_barrier_rendered_width_mm(self): # Metallic crash barrier in draw_crash_barrier currently uses a 550 mm kerb base. return float(geo.get("kerb_bottom_width", 550.0)) + + def _compute_slope_offset(self, x, slope_start_x, slope_end_x): + """Compute parabolic camber offset at position x (0.5% cross slope).""" + if x < slope_start_x or x > slope_end_x: + return 0.0 + slope_mid_x = (slope_start_x + slope_end_x) / 2.0 + slope_span = max(1.0, slope_end_x - slope_start_x) + xi = (x - slope_mid_x) / (slope_span / 2.0) + slope_height = 0.005 * (slope_span / 2.0) + return -slope_height * (1.0 - xi ** 2) def draw_cross_section(self, painter): """Draw cross-section with median support and hover highlighting""" - GIRDER_COLOR = QColor(130, 130, 130) - STIFFENER_COLOR = QColor(210, 210, 205) - CROSS_BRACING_COLOR = QColor(250, 240, 211) - RAILING_COLOR = QColor(225, 225, 225) - BARRIER_COLOR = QColor(220, 220, 220) - - - MEDIAN_GREY = QColor(210, 210, 205) - CONCRETE_COLOR = QColor(225, 225, 225) - - END_DIAPHRAGM_COLOR = QColor(134, 134, 100) - BARRIER_GREY = QColor(221, 221, 221) # slightly dark grey - RAILING_GREY = QColor(221, 221, 221) is_preview = self.scale_factor < 1.0 if hasattr(self, 'scale_factor') else False @@ -1443,7 +1345,7 @@ def draw_cross_section(self, painter): left_fp_width = self.params['footpath_width'] if fp_config in ['left', 'both'] else 0 right_fp_width = self.params['footpath_width'] if fp_config in ['right', 'both'] else 0 - total_deck_width, num_fp = self.compute_deck_total_width() + total_deck_width, _ = self.compute_deck_total_width() # Reduced margins for better space utilization margin_x = 10 if is_preview else 80 @@ -1454,7 +1356,13 @@ def draw_cross_section(self, painter): self.params['deck_thickness'] + self.params['footpath_thickness'] + 800) - scale = min(scale_x, scale_y) + if is_preview: + scale = min(scale_x, scale_y) + else: + model_h = self._compute_model_height_mm() + if self._saved_cad_height_px is None: + self._saved_cad_height_px = max(1.0, model_h * scale_y * self.scale_factor) + scale = (self._saved_cad_height_px / max(model_h, 1e-9)) / max(self.scale_factor, 1e-9) # Apply scale factor for size adjustment (zoom_level already applied to width/height) scale = scale * self.scale_factor @@ -1551,17 +1459,9 @@ def draw_cross_section(self, painter): # start after left crash barrier and end before right crash barrier. slope_start_x = carriageway_start_x slope_end_x = carriageway_end_x - slope_span = max(1.0, slope_end_x - slope_start_x) - slope_mid_x = (slope_start_x + slope_end_x) / 2.0 - - # 0.5% of half carriageway width (parabolic camber) - slope_height = 0.005 * (slope_span / 2.0) - - def slope_offset(x): - if x < slope_start_x or x > slope_end_x: - return 0.0 - xi = (x - slope_mid_x) / (slope_span / 2.0) # normalize [-1,1] - return -slope_height * (1.0 - xi**2) + slope_height = 0.005 * (max(1.0, slope_end_x - slope_start_x) / 2.0) # for hover zone bounding boxes + + n = max(1, int(self.params['num_girders'])) deck_overhang_px = self.params.get('deck_overhang', 1000) * scale @@ -1575,7 +1475,7 @@ def slope_offset(x): else: positions = [center_x] - flange_half_px = (self.girder['flange_width'] * scale * self.girder_visual_scale['flange_width']) / 2.0 + flange_half_px = (self.girder['top_flange_width'] * scale * self.girder_visual_scale['flange_width']) / 2.0 min_allowed_x = deck_left_x + flange_half_px + 1 max_allowed_x = deck_right_x - flange_half_px - 1 positions = [max(min_allowed_x, min(max_allowed_x, p)) for p in positions] @@ -1590,7 +1490,7 @@ def slope_offset(x): # Check if deck is hovered (visible brightness) deck_hovered = (self.hovered_element == 'deck') - deck_color = QColor(240, 240, 240) if deck_hovered else CONCRETE_COLOR + deck_color = QColor(240, 240, 240) if deck_hovered else self.CONCRETE_COLOR @@ -1602,7 +1502,7 @@ def slope_offset(x): for i in range(num_points + 1): x = deck_slab_left + i * (deck_slab_right - deck_slab_left) / num_points - y_top = deck_top_y + slope_offset(x) + y_top = deck_top_y + self._compute_slope_offset(x, slope_start_x, slope_end_x) y_bottom = deck_bottom_y top_pts.append(QPointF(x, y_top)) @@ -1634,7 +1534,7 @@ def draw_wearing_segment(x_start, x_end, num_points=50): seg_bottom_pts = [] for i in range(num_points + 1): x = x_start + i * (x_end - x_start) / num_points - y_bottom = deck_top_y + slope_offset(x) + y_bottom = deck_top_y + self._compute_slope_offset(x, slope_start_x, slope_end_x) y_top = y_bottom - wc_thickness_px seg_top_pts.append(QPointF(x, y_top)) seg_bottom_pts.insert(0, QPointF(x, y_bottom)) @@ -1736,9 +1636,9 @@ def draw_wearing_segment(x_start, x_end, num_points=50): if median_present: median_center_x = (median_start_x + median_end_x) / 2 - median_y = deck_top_y + slope_offset(median_center_x) + median_y = deck_top_y + self._compute_slope_offset(median_center_x, slope_start_x, slope_end_x) - self.draw_median(painter, median_start_x, median_end_x, median_y, scale, MEDIAN_GREY) + self.draw_median(painter, median_start_x, median_end_x, median_y, scale, self.GIRDER_COLOR) # Draw the main deck bottom line solid (only the deck slab portion) painter.setPen(deck_outline_pen) @@ -1746,34 +1646,24 @@ def draw_wearing_segment(x_start, x_end, num_points=50): QPointF(deck_slab_right, deck_bottom_y)) # Draw side borders of the deck slab (left and right edges) - left_top_y = deck_top_y + slope_offset(deck_slab_left) - right_top_y = deck_top_y + slope_offset(deck_slab_right) + left_top_y = deck_top_y + self._compute_slope_offset(deck_slab_left, slope_start_x, slope_end_x) + right_top_y = deck_top_y + self._compute_slope_offset(deck_slab_right, slope_start_x, slope_end_x) painter.drawLine(QPointF(deck_slab_left, left_top_y), QPointF(deck_slab_left, deck_bottom_y)) painter.drawLine(QPointF(deck_slab_right, right_top_y), QPointF(deck_slab_right, deck_bottom_y)) + if 'top_flange_thickness' in self.girder and 'bottom_flange_thickness' in self.girder: + tf_top = self.girder['top_flange_thickness'] * scale * self.girder_visual_scale['flange_thickness'] + tf_bottom = self.girder['bottom_flange_thickness'] * scale * self.girder_visual_scale['flange_thickness'] + else: + tf_top = tf_bottom = self.girder['flange_thickness'] * scale * self.girder_visual_scale['flange_thickness'] # Draw girders and stiffeners for girder_x in positions: - self.draw_i_section(painter, girder_x, base_y, scale, GIRDER_COLOR) - self.draw_stiffeners(painter, girder_x, base_y, scale, STIFFENER_COLOR) + self.draw_i_section(painter, girder_x, base_y, scale, self.GIRDER_COLOR) + self.draw_stiffeners(painter, girder_x, base_y, scale, self.STIFFENER_COLOR) - # -------- 4.d CL OF BEARING (DASHED BLACK) -------- - # painter.setPen(QPen(QColor(0, 0, 0), 1.0, Qt.DashLine)) - # painter.setBrush(Qt.NoBrush) - - # for girder_x in positions: - # painter.drawLine( - # QPointF(girder_x, base_y), - # QPointF(girder_x, deck_bottom_y) - # ) - - # ---- Flange thickness (same as I-section) ---- - if 'top_flange_thickness' in self.girder and 'bottom_flange_thickness' in self.girder: - tf_top = self.girder['top_flange_thickness'] * scale * self.girder_visual_scale['flange_thickness'] - tf_bottom = self.girder['bottom_flange_thickness'] * scale * self.girder_visual_scale['flange_thickness'] - else: - tf_top = tf_bottom = self.girder['flange_thickness'] * scale * self.girder_visual_scale['flange_thickness'] + @@ -1847,10 +1737,10 @@ def draw_wearing_segment(x_start, x_end, num_points=50): p4 = QPointF(x1 - off_x_bs, top_L - off_y_bs) painter.setPen(Qt.NoPen) - painter.setBrush(QBrush(CROSS_BRACING_COLOR)) + painter.setBrush(QBrush(self.CROSS_BRACING_COLOR)) painter.drawPolygon(QPolygonF([p1, p2, p3, p4])) - painter.setPen(QPen(CROSS_BRACING_COLOR.darker(220), 1.5)) + painter.setPen(QPen(self.CROSS_BRACING_COLOR.darker(220), 1.5)) painter.drawLine(p1, p2) painter.drawLine(p4, p3) @@ -1870,10 +1760,10 @@ def draw_wearing_segment(x_start, x_end, num_points=50): p4 = QPointF(x1 - off_x_sl, bottom_L - off_y_sl) painter.setPen(Qt.NoPen) - painter.setBrush(QBrush(CROSS_BRACING_COLOR)) + painter.setBrush(QBrush(self.CROSS_BRACING_COLOR)) painter.drawPolygon(QPolygonF([p1, p2, p3, p4])) - painter.setPen(QPen(CROSS_BRACING_COLOR.darker(220), 1.5)) + painter.setPen(QPen(self.CROSS_BRACING_COLOR.darker(220), 1.5)) painter.drawLine(p1, p2) painter.drawLine(p4, p3) # Draw railings @@ -2150,12 +2040,9 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r deck_center_x = (deck_slab_left + deck_slab_right) / 2 if deck_thick_px > 5: - # Use local curved deck top so the arrow spans the full visible thickness. - deck_width_px = deck_right_x - deck_left_x - mid_x = (deck_left_x + deck_right_x) / 2 - slope_height = 0.005 * (deck_width_px / 2) - xi = (deck_center_x - mid_x) / (deck_width_px / 2) if deck_width_px != 0 else 0.0 - local_deck_top_y = deck_top_y - slope_height * (1 - xi ** 2) + local_deck_top_y = deck_top_y + self._compute_slope_offset( + deck_center_x, carriageway_start_x, carriageway_end_x + ) painter.setPen(QPen(QColor(0, 0, 0), 0.8)) painter.drawLine(QPointF(deck_center_x, local_deck_top_y), QPointF(deck_center_x, deck_bottom_y)) @@ -2220,7 +2107,7 @@ def add_cross_section_hover_labels(self, painter, carriageway_start_x, carriagew cb_height = self.crash_barrier['height'] * scale visual = self.girder_visual_scale girder_depth_visual = self.girder['depth'] * scale * visual['depth'] - bf = self.girder['flange_width'] * scale * visual['flange_width'] + bf = self.girder['top_flange_width'] * scale * visual['flange_width'] # Common label line Y position (below girders) label_line_y = base_y + 25 @@ -2488,16 +2375,10 @@ def draw_i_section(self, painter, x, base_y, scale, girder_color): visual = self.girder_visual_scale d = self.girder['depth'] * scale * visual['depth'] - # Use top/bottom flange dimensions if available, else fall back to symmetric - if 'top_flange_width' in self.girder and 'bottom_flange_width' in self.girder: - bf_top = self.girder['top_flange_width'] * scale * visual['flange_width'] - tf_top = self.girder['top_flange_thickness'] * scale * visual['flange_thickness'] - bf_bottom = self.girder['bottom_flange_width'] * scale * visual['flange_width'] - tf_bottom = self.girder['bottom_flange_thickness'] * scale * visual['flange_thickness'] - else: - # Legacy symmetric section - bf_top = bf_bottom = self.girder['flange_width'] * scale * visual['flange_width'] - tf_top = tf_bottom = self.girder['flange_thickness'] * scale * visual['flange_thickness'] + bf_top = self.girder['top_flange_width'] * scale * visual['flange_width'] + tf_top = self.girder['top_flange_thickness'] * scale * visual['flange_thickness'] + bf_bottom = self.girder['bottom_flange_width'] * scale * visual['flange_width'] + tf_bottom = self.girder['bottom_flange_thickness'] * scale * visual['flange_thickness'] tw = self.girder['web_thickness'] * scale * visual['web_thickness'] @@ -2550,11 +2431,7 @@ def draw_stiffeners(self, painter, x, base_y, scale, stiffener_color): tw = self.girder['web_thickness'] * scale * visual['web_thickness'] - # Flange thickness (top) — MUST match depth scaling - if 'top_flange_thickness' in self.girder: - flange_thick = self.girder['top_flange_thickness'] * scale * visual['depth'] - else: - flange_thick = self.girder['flange_thickness'] * scale * visual['depth'] + flange_thick = self.girder['top_flange_thickness'] * scale * visual['depth'] girder_depth_visual = self.girder['depth'] * scale * visual['depth'] diff --git a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py index 8208107a7..3cba047b1 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py @@ -23,6 +23,8 @@ def __init__(self, parent=None): self.top_zoom_level = 1.0 self.cross_visible = True self.top_visible = True + # Last mapped params from input dock; used to push only real changes. + self._last_mapped_params = {} self.setup_ui() def setup_ui(self): @@ -300,17 +302,35 @@ def update_from_osdag_inputs(self, input_dict): elif "barrier_height" in geom: params["median_height"] = geom["barrier_height"] - # Update both widgets with same parameters - self.cross_section_widget.update_params(params) - self.top_view_widget.update_params(params) + # Propagate only keys that actually changed to avoid unnecessary redraw/zoom resets. + changed_params = { + k: v for k, v in params.items() + if self._last_mapped_params.get(k) != v + } + if not changed_params: + return + + self._last_mapped_params.update(changed_params) + + # Span length only affects the top view plan geometry; avoid cross-section retriggers. + cross_section_params = {k: v for k, v in changed_params.items() if k != 'span_length'} + + if cross_section_params: + self.cross_section_widget.update_params(cross_section_params) + self.top_view_widget.update_params(changed_params) - def update_specific_param(self, param_key, value): - """ - Update a specific parameter without re-updating everything - Optimized for real-time updates - """ - params = {param_key: value} - self.cross_section_widget.update_params(params) - self.top_view_widget.update_params(params) \ No newline at end of file + # def update_specific_param(self, param_key, value): + # """ + # Update a specific parameter without re-updating everything + # Optimized for real-time updates + # """ + # if self._last_mapped_params.get(param_key) == value: + # return + + # params = {param_key: value} + # self._last_mapped_params[param_key] = value + # if param_key != 'span_length': + # self.cross_section_widget.update_params(params) + # self.top_view_widget.update_params(params) \ No newline at end of file From fe2a994a07f7d2ad1627641a89b6724a00f0bdfd Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Mon, 4 May 2026 04:20:03 +0530 Subject: [PATCH 170/225] coorected deflection data mapping and deflection plots --- .../plate_girder/analysis_results.py | 98 ++++++++++++++++++- 1 file changed, 96 insertions(+), 2 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index e87b5954b..00f8116fc 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -1198,11 +1198,11 @@ def _get_forces_df(self, load_case, girder_name, component): """Internal helper to build Internal Force DataFrame for a girder's elements.""" g_map, _ = self.build_girders(verbose=False) if girder_name not in g_map: return pd.DataFrame() - + elements = g_map[girder_name]["elements"] rows = [] unit = "kN" if "V" in component else "kNm" - + for eid in elements: try: val = float(self.ds.sel(Loadcase=load_case, Element=eid, Component=component)["forces"]) / 1000 @@ -1210,6 +1210,100 @@ def _get_forces_df(self, load_case, girder_name, component): except Exception: pass return pd.DataFrame(rows) + def _get_displacements_df(self, load_case: str, girder_name: str, component: str) -> pd.DataFrame: + """ + Build per-node displacement DataFrame for a girder and load case. + + Parameters + ---------- + load_case : str + Load case name as stored in the dataset Loadcase coordinate. + girder_name : str + Girder identifier, e.g. ``"G1"``. + component : str + Displacement component — ospgrillage stores these as ``"dx"``, + ``"dy"``, ``"dz"`` (translational) in the ``displacements`` + DataArray. + + Returns + ------- + pd.DataFrame + Columns: ``Node`` (int), ```` (float, mm). + Rows are sorted by node X-coordinate so the array aligns with + the longitudinal axis used by GirderGraphEngine. + Empty DataFrame on any failure. + """ + g_map, _ = self.build_girders(verbose=False) + if girder_name not in g_map: + return pd.DataFrame() + + node_path = g_map[girder_name]["path"] + + # Build node → X-coord map for sorting + nodes_coords, _, _ = self.build_grillage_connectivity() + + disp_da = self.ds.get("displacements") + if disp_da is None: + return pd.DataFrame() + + # ospgrillage stores static displacements (from ops.nodeDisp) under the + # single-letter components "x", "y", "z". The "dx"/"dy"/"dz" slots hold + # nodal velocity (ops.nodeVel) which is NaN for a static analysis. + # Map the graph-engine convention ("dy") to the live dataset key ("y"). + _DISP_COMPONENT_MAP = {"dx": "x", "dy": "y", "dz": "z"} + ds_component = _DISP_COMPONENT_MAP.get(component, component) + + rows = [] + for nid in node_path: + try: + val_m = float( + disp_da.sel( + Loadcase=load_case, Node=nid, Component=ds_component + ) + ) + x_coord = nodes_coords[nid][0] if nid in nodes_coords else 0.0 + rows.append({"Node": nid, "_x": x_coord, component: round(val_m * 1000, 6)}) + except Exception: + pass + + if not rows: + return pd.DataFrame() + + df = pd.DataFrame(rows).sort_values("_x").drop(columns="_x").reset_index(drop=True) + return df + + def _get_node_coords_df(self, girder_name: str) -> pd.DataFrame: + """ + Build per-node coordinate DataFrame for a girder. + + Parameters + ---------- + girder_name : str + Girder identifier, e.g. ``"G1"``. + + Returns + ------- + pd.DataFrame + Columns: ``Node`` (int), ``X (m)``, ``Y (m)``, ``Z (m)``. + Rows are sorted by X-coordinate (longitudinal axis). + Empty DataFrame if the girder is not found. + """ + nodes_coords, _, _ = self.build_grillage_connectivity() + g_map, _ = self.build_girders(verbose=False) + if girder_name not in g_map: + return pd.DataFrame() + + rows = [] + for nid in g_map[girder_name]["path"]: + if nid in nodes_coords: + x, y, z = nodes_coords[nid] + rows.append({"Node": nid, "X (m)": round(x, 6), "Y (m)": round(y, 6), "Z (m)": round(z, 6)}) + + if not rows: + return pd.DataFrame() + + return pd.DataFrame(rows).sort_values("X (m)").reset_index(drop=True) + def _get_girder_sw_df(self, girder_map, nodes): """Internal helper to build the Girder Self weight DataFrame.""" # 1. Identify magnitudes from bridge case From 03562b77df357c5061fdbaf75e8c0e8d26444802 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Tue, 5 May 2026 04:42:50 +0530 Subject: [PATCH 171/225] Implement CAD DTO generation with design-driven parameters and fix median carriageway width Co-authored-by: Faizan Khan --- .../plate_girder/plategirderbridge.py | 213 +++++++++++++++++- src/osdagbridge/desktop/ui/template_page.py | 124 +--------- 2 files changed, 207 insertions(+), 130 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index c7b09dd97..356f6fa6e 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -2,7 +2,19 @@ import sqlite3 from pathlib import Path from .ui_fields import FrontendData -from .dto import ConcreteProperties, DeckLayoutProperties, GrillageGeometry, SectionProperties, SteelProperties, MaterialProperties, ConcreteProperties +from .dto import ( + ConcreteProperties, + DeckLayoutProperties, + GrillageGeometry, + SectionProperties, + SteelProperties, + MaterialProperties, + BridgeParametersDTO, + SectionDimsDTO, + ISectionDimsDTO, + ShearStudParamsDTO, + GirderSegmentDTO, +) from .defaults import ( DEFAULTS_DICT, DEFAULT_SPAN_M, @@ -151,6 +163,9 @@ def set_input(self, input_dict: dict) -> None: if k not in self._BASIC_INPUT_KEYS } + from pprint import pprint + pprint(input_dict) + # ───────────────────────────────────────────────────────────────────────── # Design pipeline # ───────────────────────────────────────────────────────────────────────── @@ -173,13 +188,35 @@ def design(self) -> None: self.add_live_loads() dataset = self.analyze() + sp = self.section_props + sr = self.sizing_result print( - f"[PlateGirderBridge.design] " - f"span={parsed['span']} m | overall_width={self.sizing_result.overall_width} m | " - f"girders={self.sizing_result.no_of_girders} | " - f"spacing={self.sizing_result.girder_spacing} m | " - f"overhang={self.sizing_result.deck_overhang} m | " - f"girder_depth={self.section_props['D']:.3f} m" + f"\n{'─'*60}\n" + f" PLATE GIRDER BRIDGE — DESIGN SUMMARY\n" + f"{'─'*60}\n" + f" Span : {parsed['span']:.1f} m\n" + f" Overall width : {sr.overall_width:.3f} m\n" + f" No. of girders : {sr.no_of_girders}\n" + f" Girder spacing : {sr.girder_spacing * 1e3:.1f} mm\n" + f" Deck overhang : {sr.deck_overhang * 1e3:.1f} mm\n" + f"{'─'*60}\n" + f" GIRDER CROSS-SECTION (all dimensions in mm)\n" + f"{'─'*60}\n" + f" Total depth D : {sp['D'] * 1e3:.1f}\n" + f" Web depth d_w : {sp['d_web'] * 1e3:.1f}\n" + f" Web thickness t_w : {sp['t_w'] * 1e3:.1f}\n" + f" Top flange width B_ft : {sp['B_top'] * 1e3:.1f}\n" + f" Top flange thk T_ft : {sp['t_f_top'] * 1e3:.1f}\n" + f" Bot flange width B_fb : {sp.get('B_bot', sp['B_top']) * 1e3:.1f}\n" + f" Bot flange thk T_fb : {sp.get('t_f_bot', sp['t_f_top']) * 1e3:.1f}\n" + f"{'─'*60}\n" + f" SECTION PROPERTIES (SI units)\n" + f"{'─'*60}\n" + f" Area A : {sp['Area']:.6f} m²\n" + f" I_z : {sp['I_z']:.6f} m⁴\n" + f" I_y : {sp['I_y']:.6f} m⁴\n" + f" I_t (J) : {sp['I_t']:.6f} m³\n" + f"{'─'*60}\n" ) self._run_dcr_checks(dataset) @@ -238,6 +275,13 @@ def _solve_bridge_layout(self, parsed: dict) -> None: changed_field="girders", ) + # Debug print for sizing result + print("[DEBUG] Bridge Layout Sizing Result:") + print(f" overall_width = {sizing_result.overall_width} m") + print(f" no_of_girders = {sizing_result.no_of_girders}") + print(f" girder_spacing = {sizing_result.girder_spacing} m") + print(f" deck_overhang = {sizing_result.deck_overhang} m") + symmetry = ( DEFAULT_GIRDER_SYMMETRY if parsed["design_mode"] == "Optimized" @@ -689,6 +733,161 @@ def get_result_handler(self) -> PlateGirderAnalysisResults: bridge=self.grillage_model, ) + def get_3d_cad_parameters(self) -> BridgeParametersDTO: + """ + Build a BridgeParametersDTO for 3D CAD rendering. + + Values sourced from: + - section_props / sizing_result — girder geometry (populated after design()) + - basic_inputs — span, carriageway width, footpath, median, skew angle + - additional_inputs — deck thickness + Fields not yet exposed through additional inputs default to sensible values. + + Must be called after design() has fully run. + """ + sp = self.section_props + sr = self.sizing_result + + # section_props are in SI metres; BridgeParametersDTO expects mm + D = sp["D"] * 1e3 + tw = sp["t_w"] * 1e3 + B_top = sp["B_top"] * 1e3 + t_f_top = sp["t_f_top"] * 1e3 + B_bot = sp.get("B_bot", sp["B_top"]) * 1e3 # fallback: symmetric + t_f_bot = sp.get("t_f_bot", sp["t_f_top"]) * 1e3 # fallback: symmetric + + span_mm = self._to_float(KEY_SPAN, DEFAULT_SPAN_M) * 1e3 + cw_each_way_m = self._to_float(KEY_CARRIAGEWAY_WIDTH, DEFAULT_CARRIAGEWAY_WIDTH_M) + skew = self._to_float(KEY_SKEW_ANGLE, 0.0) + + footpath_str = str(self.basic_inputs.get(KEY_FOOTPATH, "None")).strip() + include_median = str(self.basic_inputs.get(KEY_INCLUDE_MEDIAN, "No")).strip().lower() == "yes" + + if footpath_str in ("None", ""): + footpath_config = "NONE" + footpath_width_mm = 0.0 + railing_width_mm = 0.0 + elif "Both" in footpath_str: + footpath_config = "BOTH" + footpath_width_mm = DEFAULT_FOOTPATH_WIDTH * 1e3 + railing_width_mm = DEFAULT_RAILING_WIDTH * 1e3 + else: + footpath_config = "LEFT" + footpath_width_mm = DEFAULT_FOOTPATH_WIDTH * 1e3 + railing_width_mm = DEFAULT_RAILING_WIDTH * 1e3 + + # geometry.carriageway_width is entered as "Each way" in UI. + # For divided carriageway with median, CAD expects total traffic width. + cw_m = (2.0 * cw_each_way_m) if include_median else cw_each_way_m + cw_mm = cw_m * 1e3 + + deck_t_mm = deck_thickness_from_inputs(self.additional_inputs, _DEFAULT_DECK_THICKNESS_MM) * 1e3 + cross_bracing_mm = DEFAULT_CROSS_BRACING_SPACING * 1e3 + + girder_segment = GirderSegmentDTO( + length=span_mm, + D=D, + tw=tw, + T_ft=t_f_top, + T_fb=t_f_bot, + B_ft=B_top, + B_fb=B_bot, + ) + + _angle_dims = SectionDimsDTO(leg_h=100, leg_w=50, connection_type="LONGER_LEG") + _small_dims = SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG") + + return BridgeParametersDTO( + # --- Girder --- + span_length_L=span_mm, + girder_section_d=D, + girder_section_bf=B_top, + girder_section_bf_b=B_bot, + girder_section_tf=t_f_top, + girder_section_tf_b=t_f_bot, + girder_section_tw=tw, + num_girders=sr.no_of_girders, + girder_spacing=sr.girder_spacing * 1e3, + # --- Geometry --- + skew_angle=skew, + # --- Deck --- + carriageway_width=cw_mm, + deck_thickness=deck_t_mm, + footpath_config=footpath_config, + footpath_width=footpath_width_mm, + railing_width=railing_width_mm, + # --- Crash barrier (defaults until additional inputs wired) --- + barrier_type="Rigid", + crash_barrier_subtype="IRC-5R", + # --- Median --- + enable_median=include_median, + median_type="Metallic Crash Barrier", + # --- Railing (defaults) --- + rail_count=3, + railing_type="rcc", + # --- Intermediate stiffeners (defaults) --- + include_intermediate_stiffeners=True, + intermediate_stiffener_spacing=cross_bracing_mm / 2, + intermediate_stiffener_thickness=20.0, + intermediate_stiffener_outstand=None, + # --- End stiffeners (defaults) --- + num_end_stiffener_pairs=4, + end_stiffener_thickness=30.0, + end_stiffener_outstand=None, + # --- Longitudinal stiffeners (defaults) --- + include_longitudinal_stiffeners=False, + num_longitudinal_stiffeners=0, + longitudinal_stiffener_thickness=20.0, + longitudinal_stiffener_outstand=None, + # --- Cross bracing --- + cross_bracing_spacing=cross_bracing_mm, + bracing_type="X", + x_bracket_option="BOTH", + k_top_bracket=True, + diagonal_section_type="ANGLE", + diagonal_section_dims=_angle_dims, + diagonal_thickness=8.0, + top_chord_section_type="DOUBLE_CHANNEL", + top_chord_section_dims=_small_dims, + top_chord_thickness=8.0, + bottom_chord_section_type="ANGLE", + bottom_chord_section_dims=_small_dims, + bottom_chord_thickness=8.0, + # --- End diaphragm --- + end_diaphragm_type="Cross Bracing", + end_diaphragm_spacing=200, + end_diaphragm_bracing_type="X", + end_diaphragm_diagonal_section_type="ANGLE", + end_diaphragm_diagonal_section_dims=_angle_dims, + end_diaphragm_diagonal_thickness=8.0, + end_diaphragm_top_chord_section_type="CHANNEL", + end_diaphragm_top_chord_section_dims=_small_dims, + end_diaphragm_top_chord_thickness=8.0, + end_diaphragm_bottom_chord_section_type="ANGLE", + end_diaphragm_bottom_chord_section_dims=_small_dims, + end_diaphragm_bottom_chord_thickness=8.0, + end_diaphragm_section="I_SECTION", + end_diaphragm_dims=ISectionDimsDTO( + depth=D * 0.6, + flange_width=B_top, + web_thickness=tw, + flange_thickness=t_f_top, + ), + # --- Shear studs (defaults) --- + shear_stud_params=ShearStudParamsDTO( + base_diameter=50, + top_diameter=70, + base_height=100, + top_height=20, + num_per_section=3, + transverse_spacing=305, + pitch=500, + ), + # --- Girder segments (single uniform segment) --- + girder_segments=[girder_segment], + girder_segments_dict={}, + ) + def build_graph_engine( self, figure, diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index c8430b7f5..0cadd894c 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -19,130 +19,8 @@ from osdagbridge.core.bridge_types.plate_girder.ui_fields import FrontendData from osdagbridge.core.bridge_types.plate_girder.defaults import DEFAULTS_DICT from osdagbridge.core.utils.common import * -from osdagbridge.core.bridge_types.plate_girder.dto import( - BridgeParametersDTO, - SectionDimsDTO, - ISectionDimsDTO, - ShearStudParamsDTO, - GirderSegmentDTO, -) from osdagbridge.desktop.ui.utils.custom_widgets import ToolBarWidget -''' -Temporary DTO and will be removed once the backend is connected -''' -bridge_parameters = BridgeParametersDTO( - # --- Girder --- - span_length_L=25_000, - girder_section_d=900, - girder_section_bf=500, - girder_section_bf_b=500, - girder_section_tf=260, - girder_section_tf_b=260, - girder_section_tw=100, - num_girders=5, - girder_spacing=2_750, - - # --- Geometry --- - skew_angle=0, - - # --- Deck --- - carriageway_width=12_000, - deck_thickness=400, - footpath_config="BOTH", - footpath_width=1_500, - railing_width=300, - - # --- Crash Barrier --- - barrier_type="Semi-Rigid", - crash_barrier_subtype="Double W-beam", - - # --- Median --- - enable_median=True, - median_type="Metallic Crash Barrier", - - # --- Railing --- - rail_count=3, - railing_type="rcc", - - # --- Intermediate Stiffeners --- - include_intermediate_stiffeners=True, - intermediate_stiffener_spacing=2_000, - intermediate_stiffener_thickness=20, - intermediate_stiffener_outstand=None, - - # --- End Stiffeners --- - num_end_stiffener_pairs=4, - end_stiffener_thickness=30, - end_stiffener_outstand=None, - - # --- Longitudinal Stiffeners --- - include_longitudinal_stiffeners=True, - num_longitudinal_stiffeners=2, - longitudinal_stiffener_thickness=20, - longitudinal_stiffener_outstand=None, - - # --- Cross Bracing --- - cross_bracing_spacing=4_000, - bracing_type="X", - x_bracket_option="BOTH", - k_top_bracket=True, - - diagonal_section_type="ANGLE", - diagonal_section_dims=SectionDimsDTO(leg_h=100, leg_w=50, connection_type="LONGER_LEG"), - diagonal_thickness=5, - - top_chord_section_type="DOUBLE_CHANNEL", - top_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), - top_chord_thickness=5, - - bottom_chord_section_type="ANGLE", - bottom_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), - bottom_chord_thickness=5, - - # --- End Diaphragm --- - end_diaphragm_type="Cross Bracing", - end_diaphragm_spacing=100, - end_diaphragm_bracing_type="K", - - end_diaphragm_diagonal_section_type="ANGLE", - end_diaphragm_diagonal_section_dims=SectionDimsDTO(leg_h=100, leg_w=50, connection_type="LONGER_LEG"), - end_diaphragm_diagonal_thickness=5, - - end_diaphragm_top_chord_section_type="CHANNEL", - end_diaphragm_top_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), - end_diaphragm_top_chord_thickness=5, - - end_diaphragm_bottom_chord_section_type="ANGLE", - end_diaphragm_bottom_chord_section_dims=SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG"), - end_diaphragm_bottom_chord_thickness=5, - - end_diaphragm_section="I_SECTION", - end_diaphragm_dims=ISectionDimsDTO(depth=800, flange_width=250, web_thickness=12, flange_thickness=100), - - shear_stud_params=ShearStudParamsDTO( - base_diameter=50, - top_diameter=70, - base_height=150, - top_height=50, - num_per_section=4, - transverse_spacing=305, - pitch=500, - ), - girder_segments=[ - GirderSegmentDTO( - length=25_000, - D=900, - tw=100, - T_ft=260, - T_fb=260, - B_ft=500, - B_fb=500, - ) - ], - girder_segments_dict=None, - ) - class CustomWindow(QWidget): def __init__(self, title: str, backend: object, parent=None): @@ -554,7 +432,7 @@ def common_design_func(self, trigger: str): self.plots_widget.link_output_dock(self.output_dock) # Render 3D cad using the parameters from Backend - self.cad_3d_widget.render_3d_cad(bridge_parameters) + self.cad_3d_widget.render_3d_cad(self.backend.get_3d_cad_parameters()) # Close-loading-popup--------------------------------------------- self._finish_loading() From 8222b289a791f5f255d5f7653b8051b2ea8c86e3 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Mon, 4 May 2026 05:29:26 +0530 Subject: [PATCH 172/225] fix: create footpath/railing loads when only one side is present --- .../bridge_types/plate_girder/analyser.py | 44 +++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 52e4a3049..0763bd928 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -511,8 +511,9 @@ def create_footpath_load(self, model=None): if model is None: raise ValueError("Model is not available. Create model before adding loads.") - # If there is no footpath component in the layout, skip creating footpath load - if not self.layout.has_component("footpath_left") or not self.layout.has_component("footpath_right"): + # If neither footpath side exists, skip load creation entirely + sides_present = [s for s in ("left", "right") if self.layout.has_component(f"footpath_{s}")] + if not sides_present: warnings.warn("No footpath component in layout; skipping footpath load creation") self.footpath_load_case = None return None @@ -527,12 +528,20 @@ def create_footpath_load(self, model=None): DL_footpath = og.create_load_case(name="Footpath load") # ------------------------------------------------- - # Left & Right footpaths + # Only sides that exist in the layout # ------------------------------------------------- - for side in ("left", "right"): + for side in sides_present: # geometry from load manager geom = self.load_manager.footpath_load(side) + print( + f"[Footpath {side}] patch corners: " + f"p1(x={geom.p1.x:.3f}, z={geom.p1.z:.3f}) " + f"p2(x={geom.p2.x:.3f}, z={geom.p2.z:.3f}) " + f"p3(x={geom.p3.x:.3f}, z={geom.p3.z:.3f}) " + f"p4(x={geom.p4.x:.3f}, z={geom.p4.z:.3f})" + ) + # convert geometry → ospgrillage vertices p1 = og.create_load_vertex( x=geom.p1.x, z=geom.p1.z, p=footpath_mag @@ -610,6 +619,12 @@ def create_crash_barrier_load(self, model=None, barrier_load_kN_per_m: float | N # geometry from load manager geom = self.load_manager.crash_barrier_load(side) + print( + f"[Crash barrier {side}] line load: " + f"start(x={geom.start.x:.3f}, z={geom.start.z:.3f}) " + f"end(x={geom.end.x:.3f}, z={geom.end.z:.3f})" + ) + # convert geometry → ospgrillage vertices p1 = og.create_load_vertex( x=geom.start.x, z=geom.start.z, p=barrier_load @@ -657,8 +672,9 @@ def create_railing_load(self, model=None, railing_load_kN_per_m: float | None = if model is None: raise ValueError("Model is not available. Create model before adding loads.") - # If there is no railing component in the layout, skip creating railing load - if not self.layout.has_component("railing_left") or not self.layout.has_component("railing_right"): + # If neither railing side exists, skip load creation entirely + railing_sides_present = [s for s in ("left", "right") if self.layout.has_component(f"railing_{s}")] + if not railing_sides_present: warnings.warn("No railing component in layout; skipping railing load creation") self.railing_load_case = None return None @@ -674,12 +690,18 @@ def create_railing_load(self, model=None, railing_load_kN_per_m: float | None = DL_railing = og.create_load_case(name="Railing load") # ------------------------------------------------- - # Left & Right railings + # Only sides that exist in the layout # ------------------------------------------------- - for side in ("left", "right"): + for side in railing_sides_present: # geometry from load manager geom = self.load_manager.railing_load(side) + print( + f"[Railing {side}] line load: " + f"start(x={geom.start.x:.3f}, z={geom.start.z:.3f}) " + f"end(x={geom.end.x:.3f}, z={geom.end.z:.3f})" + ) + # convert geometry → ospgrillage vertices p1 = og.create_load_vertex( x=geom.start.x, z=geom.start.z, p=railing_udl @@ -743,6 +765,12 @@ def create_median_load(self, model=None, median_load_kN_per_m: float | None = No # ------------------------------------------------- geom = self.load_manager.median_line_load() + print( + f"[Median] line load: " + f"start(x={geom.start.x:.3f}, z={geom.start.z:.3f}) " + f"end(x={geom.end.x:.3f}, z={geom.end.z:.3f})" + ) + # ------------------------------------------------- # Convert geometry → ospgrillage vertices # ------------------------------------------------- From e6a2404a1502b58f54c25a9118865b159c0d813c Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Wed, 6 May 2026 05:14:45 +0530 Subject: [PATCH 173/225] feat: add dead load combination case and fix single-side crash barrier --- .../bridge_types/plate_girder/analyser.py | 78 +++++++++++++++---- .../plate_girder/plategirderbridge.py | 48 ++++++------ 2 files changed, 87 insertions(+), 39 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 0763bd928..e82327fc1 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -322,7 +322,7 @@ def create_self_weight_load(self, model=None, L=None): end_beam = L A_girder_m2 = self.longitudinal_props.A beam_mag = girder_self_weight_kN_m(A_girder_m2, STEEL_UNIT_WEIGHT_kN_m3) * kN / m # N/m - + print(f"Self weight line load magnitude: {beam_mag:.2f} N/m") DL_self_weight = og.create_load_case(name="girder self weight") # iterate through all grillage transverse positions (except extreme edges) @@ -381,6 +381,7 @@ def create_deck_load(self, model=None, slab_thickness_m: float | None = None, # Load magnitude (UDL over area): t × ρ_concrete [kN/m²] # ------------------------------------------------- deck_mag = slab_dead_load_kN_m2(slab_thickness_m, rho_c) * kN / m**2 # N/m² + print(f"Deck slab load magnitude: {deck_mag:.2f} N/m²") # ------------------------------------------------- # Get geometry from load manager @@ -458,7 +459,7 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0, ) overlay_kw = {} if density_kN_m3 is None else {"density_kN_m3": density_kN_m3} overlay_mag = wearing_course_dead_load_kN_m2(thickness_m, **overlay_kw) * kN / m**2 # N/m² - + print(f"Wearing course load magnitude: {overlay_mag:.2f} N/m²") # -------------------------------- # Get geometry from geometry module # -------------------------------- @@ -521,6 +522,7 @@ def create_footpath_load(self, model=None): # Load magnitude — IRC 6:2017 Cl.206.1 (footway load) # ------------------------------------------------- footpath_mag = footpath_dead_load_kN_m2() * kN / m**2 # N/m² + print(f"Footpath load magnitude: {footpath_mag:.2f} N/m²") # ------------------------------------------------- # Create load case @@ -597,25 +599,27 @@ def create_crash_barrier_load(self, model=None, barrier_load_kN_per_m: float | N if model is None: raise ValueError("Model is not available. Create model before adding loads.") - # If there is no crash barrier component in the layout, skip creating crash barrier load - if not self.layout.has_component("crash_barrier_left") or not self.layout.has_component("crash_barrier_right"): + # If neither crash barrier side exists, skip load creation entirely + sides_present = [s for s in ("left", "right") if self.layout.has_component(f"crash_barrier_{s}")] + if not sides_present: warnings.warn("No crash barrier component in layout; skipping crash barrier load creation") self.crash_barrier_load_case = None return None + # ------------------------------------------------- # Load magnitude — from input or IRC 5:2015 default (crash_barrier.geometry) # ------------------------------------------------- barrier_load = crash_barrier_dead_load_kN_m(barrier_load_kN_per_m) * kN / m - + print(f"Crash barrier line load magnitude: {barrier_load:.2f} N/m") # ------------------------------------------------- # Create load case # ------------------------------------------------- DL_barrier = og.create_load_case(name="Crash barrier load") # ------------------------------------------------- - # Left & Right barriers + # Only sides that exist in the layout # ------------------------------------------------- - for side in ("left", "right"): + for side in sides_present: # geometry from load manager geom = self.load_manager.crash_barrier_load(side) @@ -683,6 +687,7 @@ def create_railing_load(self, model=None, railing_load_kN_per_m: float | None = # Load magnitude — from user input or IRC 6:2017 Cl.206.5 default (railing.geometry) # ------------------------------------------------- railing_udl = railing_dead_load_kN_m(railing_load_kN_per_m) * kN / m # N/m + print(f"Railing line load magnitude: {railing_udl:.2f} N/m") # ------------------------------------------------- # Create load case @@ -753,6 +758,7 @@ def create_median_load(self, model=None, median_load_kN_per_m: float | None = No # Load magnitude — from input or default (median.geometry) # ------------------------------------------------- median_udl = median_dead_load_kN_m(median_load_kN_per_m) * kN / m + print(f"Median line load magnitude: {median_udl:.2f} N/m") # If there is no median component in the layout, skip creating median load if not self.layout.has_component("median"): @@ -803,6 +809,53 @@ def create_median_load(self, model=None, median_load_kN_per_m: float | None = No return DL_median + # ============================================================ + # Dead Load Combination + # ============================================================ + + def create_dead_load_combination(self, model=None, load_factor=1.0): + """ + Creates a single ``"DL"`` load case by adding all individual dead-load + sub-case loads into it. + + Must be called after all individual dead-load methods have been invoked. + Sub-cases that were skipped (returned ``None``) are automatically excluded. + """ + model = model or self.model + if model is None: + raise ValueError("Model is not available. Create model before adding loads.") + + _DL_ATTRS = [ + "self_weight_load_case", + "deck_load_case", + "overlay_load_case", + "footpath_load_case", + "crash_barrier_load_case", + "railing_load_case", + "median_load_case", + ] + + DL_combined = og.create_load_case(name=f"{load_factor} DL") + added = False + + for attr in _DL_ATTRS: + lc = getattr(self, attr, None) + if lc is not None: + for entry in lc.load_groups: + DL_combined.add_load(entry["load"]) + added = True + + if not added: + warnings.warn( + "create_dead_load_combination: no dead-load sub-cases found. " + "Call the individual dead-load creation methods first." + ) + return None + + model.add_load_case(DL_combined, load_factor=load_factor) + self.dead_load_combination = DL_combined + return DL_combined + # ============================================================ # Live Load # ============================================================ @@ -1235,17 +1288,7 @@ def analyze(self, model=None): model.analyze() - # Get ALL loadcases results = model.get_results() - - # ✅ DEBUG: Show all detected loadcases - # print(results.coords["Loadcase"].values) - - # print("Results dataset:") - # print(results) - - self.dataset = results - return results def plot(self, model=None): @@ -1383,6 +1426,7 @@ def plot(self, model=None): bridge.create_crash_barrier_load() bridge.create_railing_load() bridge.create_median_load() + bridge.create_dead_load_combination() bridge.vehicle_lane_coordinates() bridge.create_vehicle_load_cases() bridge.add_vehicle_load_cases_from_combinations() diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 356f6fa6e..877a5494d 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -191,17 +191,17 @@ def design(self) -> None: sp = self.section_props sr = self.sizing_result print( - f"\n{'─'*60}\n" - f" PLATE GIRDER BRIDGE — DESIGN SUMMARY\n" - f"{'─'*60}\n" + f"\n{'-'*60}\n" + f" PLATE GIRDER BRIDGE - DESIGN SUMMARY\n" + f"{'-'*60}\n" f" Span : {parsed['span']:.1f} m\n" f" Overall width : {sr.overall_width:.3f} m\n" f" No. of girders : {sr.no_of_girders}\n" f" Girder spacing : {sr.girder_spacing * 1e3:.1f} mm\n" f" Deck overhang : {sr.deck_overhang * 1e3:.1f} mm\n" - f"{'─'*60}\n" + f"{'-'*60}\n" f" GIRDER CROSS-SECTION (all dimensions in mm)\n" - f"{'─'*60}\n" + f"{'-'*60}\n" f" Total depth D : {sp['D'] * 1e3:.1f}\n" f" Web depth d_w : {sp['d_web'] * 1e3:.1f}\n" f" Web thickness t_w : {sp['t_w'] * 1e3:.1f}\n" @@ -209,14 +209,14 @@ def design(self) -> None: f" Top flange thk T_ft : {sp['t_f_top'] * 1e3:.1f}\n" f" Bot flange width B_fb : {sp.get('B_bot', sp['B_top']) * 1e3:.1f}\n" f" Bot flange thk T_fb : {sp.get('t_f_bot', sp['t_f_top']) * 1e3:.1f}\n" - f"{'─'*60}\n" + f"{'-'*60}\n" f" SECTION PROPERTIES (SI units)\n" - f"{'─'*60}\n" - f" Area A : {sp['Area']:.6f} m²\n" - f" I_z : {sp['I_z']:.6f} m⁴\n" - f" I_y : {sp['I_y']:.6f} m⁴\n" - f" I_t (J) : {sp['I_t']:.6f} m³\n" - f"{'─'*60}\n" + f"{'-'*60}\n" + f" Area A : {sp['Area']:.6f} m^2\n" + f" I_z : {sp['I_z']:.6f} m^4\n" + f" I_y : {sp['I_y']:.6f} m^4\n" + f" I_t (J) : {sp['I_t']:.6f} m^3\n" + f"{'-'*60}\n" ) self._run_dcr_checks(dataset) @@ -488,6 +488,8 @@ def add_dead_loads(self) -> None: 4. Footpath — patch load on footpath strips (skipped if none) 5. Crash barrier — line load at each barrier centreline (skipped if none) 6. Railing — line load at each railing centreline (skipped if none) + 7. Median — line load at median centreline (skipped if none) + 8. DL combination — combines all above into a single "DL" load case Must be called after setup_grillage() has built and registered the model. """ @@ -498,13 +500,15 @@ def add_dead_loads(self) -> None: barrier_load_kN_m = crash_barrier_load_from_inputs(self.additional_inputs) railing_load_kN_m = railing_load_from_inputs(self.additional_inputs) - m = self.grillage_model - m.create_self_weight_load() - m.create_deck_load(slab_thickness_m=deck_t_m) - m.create_wearing_course_load(thickness_m=wc_t_m, density_kN_m3=wc_rho) - m.create_footpath_load() - m.create_crash_barrier_load(barrier_load_kN_per_m=barrier_load_kN_m) - m.create_railing_load(railing_load_kN_per_m=railing_load_kN_m) + model = self.grillage_model + model.create_self_weight_load() + model.create_deck_load(slab_thickness_m=deck_t_m) + model.create_wearing_course_load(thickness_m=wc_t_m, density_kN_m3=wc_rho) + model.create_footpath_load() + model.create_crash_barrier_load(barrier_load_kN_per_m=barrier_load_kN_m) + model.create_railing_load(railing_load_kN_per_m=railing_load_kN_m) + model.create_median_load() + model.create_dead_load_combination(load_factor=1.0) # ───────────────────────────────────────────────────────────────────────── # Live loads — vehicle and moving loads applied after the grillage model @@ -518,9 +522,9 @@ def add_live_loads(self) -> None: Must be called after setup_grillage() has built and registered the model. """ - m = self.grillage_model - m.add_vehicle_load_cases_from_combinations() - m.create_moving_vehicle_load_cases() + model = self.grillage_model + model.add_vehicle_load_cases_from_combinations() + model.create_moving_vehicle_load_cases() def vehicle_lane_coordinates(self) -> list: """ From 687ce3904e0a959dc1ba6b68f08d26071bed6217 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Wed, 6 May 2026 05:50:11 +0530 Subject: [PATCH 174/225] refactor: replace table_B2/B3 with dict lookup and add ULS/SLS load combination generators --- .../bridge_types/plate_girder/designer.py | 10 +- src/osdagbridge/core/utils/codes/irc6_2017.py | 441 +++++++++++------- 2 files changed, 283 insertions(+), 168 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index c0a2aa86c..5f0d902c4 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -504,7 +504,7 @@ def _as_float(arr): M_const_kNm = 0.0 else: # IRC 6:2017 Table B.2 — ULS partial factor for dead load (adding, basic combination). - gamma_dl = IRC6_2017.table_B2(load_type="dead_load", effect="adding", combination="basic") + gamma_dl = IRC6_2017.table_B2(load_type="dead_load", qualifier="adding", combination="basic") M_const_kNm = (construction_mz * gamma_dl) / 1000.0 # ------------------------------------------------------------------ @@ -636,8 +636,8 @@ def apply_load_factors( vehicle_class: str = KEY_VEHICLE[0], # default Class 70R(W) ) -> DemandEnvelope: # IRC 6:2017 Table B.2 (ULS basic) — γDL = 1.35, γLL(leading) = 1.50. - gamma_dl = IRC6_2017.table_B2(load_type="dead_load", effect="adding", combination="basic") - gamma_ll = IRC6_2017.table_B2(load_type="live_load", load_category="leading", combination="basic") + gamma_dl = IRC6_2017.table_B2(load_type="dead_load", qualifier="adding", combination="basic") + gamma_ll = IRC6_2017.table_B2(load_type="live_load", qualifier="leading", combination="basic") # IRC 6:2017 Cl.208.2 / 208.3 — impact factor by vehicle class. if vehicle_class in (KEY_VEHICLE[0], KEY_VEHICLE[1]): # Class 70R(W) / 70R(T) impact = 1.0 + IRC6_2017.cl_208_3_impact_factor(span_m) @@ -1502,8 +1502,8 @@ def _example_demands(config: BridgeConfig) -> DemandEnvelope: V_dead_kN = w_dead_total * L_m / 2.0 # IRC 6:2017 Table B.2 (ULS basic) — partial safety factors. - gamma_dl = IRC6_2017.table_B2(load_type="dead_load", effect="adding", combination="basic") - gamma_ll = IRC6_2017.table_B2(load_type="live_load", load_category="leading", combination="basic") + gamma_dl = IRC6_2017.table_B2(load_type="dead_load", qualifier="adding", combination="basic") + gamma_ll = IRC6_2017.table_B2(load_type="live_load", qualifier="leading", combination="basic") # IRC 6:2017 Cl.208.3 — impact factor for Class 70R(W) wheel loading. impact_fraction = IRC6_2017.cl_208_3_impact_factor(L_m) impact_multiplier = 1.0 + impact_fraction diff --git a/src/osdagbridge/core/utils/codes/irc6_2017.py b/src/osdagbridge/core/utils/codes/irc6_2017.py index 847f54981..a45988b18 100644 --- a/src/osdagbridge/core/utils/codes/irc6_2017.py +++ b/src/osdagbridge/core/utils/codes/irc6_2017.py @@ -1428,181 +1428,296 @@ def cl_218_5_1(zone, soil_type, dead_load_kN, live_load_kN=0.0, # ANNEX B: PARTIAL SAFETY FACTORS FOR LOADS # ========================================================================= - @staticmethod - def table_B2(load_type, effect='adding', load_category='leading', combination='basic'): - """ - Returns the partial safety factor for ULS (Ultimate Limit State) as per - IRC:6-2017 Table B.2. - - Parameters: - load_type (str): Type of load - 'dead_load', 'surfacing', 'live_load', - 'wind_load', 'thermal_load', or 'seismic' - effect (str): 'adding' or 'relieving' (for dead_load and surfacing) - load_category (str): 'leading', 'accompanying', or 'construction' - (for live_load, wind_load, thermal_load) - combination (str): 'basic', 'accidental', or 'seismic' - - Returns: - float: Partial safety factor (None if not applicable) - """ - load_type_lower = load_type.strip().lower() - effect_lower = effect.strip().lower() - load_category_lower = load_category.strip().lower() - combination_lower = combination.strip().lower() - + # IRC:6-2017 Table B.2 — Partial Safety Factor for Verification of Structural Strength + # key: (load_type, qualifier) → {combination: γ} + # qualifier: sub-row label (effect or load_category); None for single-row entries + # None value means not applicable ('-' in table); 'refer_note_2' follows table footnote + _TABLE_B2 = { + # 1. Permanent Loads # 1.1 Dead Load, Snow load (if present), SIDL except surfacing - if load_type_lower == 'dead_load': - factors = { - 'adding': {'basic': 1.35, 'accidental': 1.0, 'seismic': 1.35}, - 'relieving': {'basic': 1.0, 'accidental': 1.0, 'seismic': 1.0}, - } - if effect_lower not in factors: - raise ValueError(f"Invalid effect '{effect}'. Must be 'adding' or 'relieving'.") - if combination_lower not in factors[effect_lower]: - raise ValueError(f"Invalid combination '{combination}'.") - return factors[effect_lower][combination_lower] - + ('dead_load', 'adding'): {'basic': 1.35, 'accidental': 1.0, 'seismic': 1.35}, + ('dead_load', 'relieving'): {'basic': 1.0, 'accidental': 1.0, 'seismic': 1.0 }, # 1.2 Surfacing - elif load_type_lower == 'surfacing': - factors = { - 'adding': {'basic': 1.75, 'accidental': 1.0, 'seismic': 1.75}, - 'relieving': {'basic': 1.0, 'accidental': 1.0, 'seismic': 1.0}, - } - if effect_lower not in factors: - raise ValueError(f"Invalid effect '{effect}'. Must be 'adding' or 'relieving'.") - if combination_lower not in factors[effect_lower]: - raise ValueError(f"Invalid combination '{combination}'.") - return factors[effect_lower][combination_lower] - - # 2.1 Carriageway Live load and associated loads - elif load_type_lower == 'live_load': - factors = { - 'leading': {'basic': 1.5, 'accidental': 0.75, 'seismic': None}, - 'accompanying': {'basic': 1.15, 'accidental': 0.2, 'seismic': 0.2}, - 'construction': {'basic': 1.35, 'accidental': 1.0, 'seismic': 1.0}, - } - if load_category_lower not in factors: - raise ValueError(f"Invalid load_category '{load_category}'. Must be 'leading', 'accompanying', or 'construction'.") - if combination_lower not in factors[load_category_lower]: - raise ValueError(f"Invalid combination '{combination}'.") - return factors[load_category_lower][combination_lower] - + ('surfacing', 'adding'): {'basic': 1.75, 'accidental': 1.0, 'seismic': 1.75}, + ('surfacing', 'relieving'): {'basic': 1.0, 'accidental': 1.0, 'seismic': 1.0 }, + # 1.3 Prestress and Secondary effect of prestress + ('prestress', None): {'basic': 1.5, 'accidental': 'refer_note_2','seismic': None}, + # 1.4 Back-fill Weight + ('backfill_weight', 'adverse'): {'basic': 1.35, 'accidental': 1.0, 'seismic': 1.0 }, + ('backfill_weight', 'relieving'): {'basic': 1.0, 'accidental': 1.0, 'seismic': 1.0 }, + # 1.5 Earth Pressure + ('earth_pressure', 'adding'): {'basic': 1.5, 'accidental': 1.0, 'seismic': 1.0 }, + ('earth_pressure', 'relieving'): {'basic': 1.0, 'accidental': 1.0, 'seismic': 1.0 }, + # 2. Variable Loads + # 2.1 Carriageway Live load + associated loads (braking, tractive, centrifugal) + Footway live load + ('live_load', 'leading'): {'basic': 1.5, 'accidental': 0.75, 'seismic': None}, + ('live_load', 'accompanying'): {'basic': 1.15, 'accidental': 0.2, 'seismic': 0.2 }, + ('live_load', 'construction'): {'basic': 1.35, 'accidental': 1.0, 'seismic': 1.0 }, # 2.2 Wind Load during service and construction - elif load_type_lower == 'wind_load': - factors = { - 'leading': {'basic': 1.5, 'accidental': None, 'seismic': None}, - 'accompanying': {'basic': 0.9, 'accidental': None, 'seismic': None}, - } - if load_category_lower not in factors: - raise ValueError(f"Invalid load_category '{load_category}'. Must be 'leading' or 'accompanying'.") - if combination_lower not in factors[load_category_lower]: - raise ValueError(f"Invalid combination '{combination}'.") - return factors[load_category_lower][combination_lower] - + ('wind_load', 'leading'): {'basic': 1.5, 'accidental': None, 'seismic': None}, + ('wind_load', 'accompanying'): {'basic': 0.9, 'accidental': None, 'seismic': None}, + # 2.3 Live Load Surcharge effects (as accompanying load) + ('live_load_surcharge', None): {'basic': 1.2, 'accidental': 0.2, 'seismic': 0.2 }, + # 2.4 Construction Dead Load (launching girder, truss, cantilever construction equipment) + ('construction_dead_load',None): {'basic': 1.35, 'accidental': 1.0, 'seismic': 1.35}, # 2.5 Thermal Loads - elif load_type_lower == 'thermal_load': - factors = { - 'leading': {'basic': 1.5, 'accidental': None, 'seismic': None}, - 'accompanying': {'basic': 0.9, 'accidental': 0.5, 'seismic': 0.5}, - } - if load_category_lower not in factors: - raise ValueError(f"Invalid load_category '{load_category}'. Must be 'leading' or 'accompanying'.") - if combination_lower not in factors[load_category_lower]: - raise ValueError(f"Invalid combination '{combination}'.") - return factors[load_category_lower][combination_lower] - + ('thermal_load', 'leading'): {'basic': 1.5, 'accidental': None, 'seismic': None}, + ('thermal_load', 'accompanying'): {'basic': 0.9, 'accidental': 0.5, 'seismic': 0.5 }, + # 3. Accidental Loads + # 3.1 Vehicle collision + ('vehicle_collision', None): {'basic': None, 'accidental': 1.0, 'seismic': None}, + # 3.2 Barge Impact + ('barge_impact', None): {'basic': None, 'accidental': 1.0, 'seismic': None}, + # 3.3 Impact due to floating bodies + ('floating_bodies', None): {'basic': None, 'accidental': 1.0, 'seismic': None}, # 4. Seismic Effect - elif load_type_lower == 'seismic': - # load_category used as 'service' or 'construction' for seismic - factors = { - 'service': 1.5, - 'construction': 0.75, - } - if load_category_lower not in factors: - raise ValueError(f"Invalid condition '{load_category}'. Must be 'service' or 'construction'.") - return factors[load_category_lower] - - else: - raise ValueError( - f"Invalid load_type '{load_type}'. Must be 'dead_load', 'surfacing', " - "'live_load', 'wind_load', 'thermal_load', or 'seismic'." - ) + ('seismic', 'service'): {'basic': None, 'accidental': None, 'seismic': 1.5 }, + ('seismic', 'construction'): {'basic': None, 'accidental': None, 'seismic': 0.75}, + } @staticmethod - def table_B3(load_type, effect='adding', load_category='leading', combination='rare'): + def table_B2(load_type, qualifier=None, combination='basic'): """ - Returns the partial safety factor for SLS (Serviceability Limit State) as per - IRC:6-2017 Table B.3. - - Parameters: - load_type (str): Type of load - 'dead_load', 'surfacing', 'live_load', - 'thermal_load', or 'wind_load' - effect (str): 'adding' or 'relieving' (for surfacing) - load_category (str): 'leading' or 'accompanying' (for live_load, thermal_load, wind_load) - combination (str): 'rare', 'frequent', or 'quasi_permanent' - + IRC:6-2017 Table B.2 — Partial Safety Factor for Verification of Structural Strength. + + Args: + load_type (str): Load type key (see _TABLE_B2 for valid values). + qualifier (str | None): Sub-row label — effect ('adding', 'relieving', 'adverse') + or load category ('leading', 'accompanying', 'construction', 'service'). + Pass None for single-row load types (e.g. 'prestress', 'live_load_surcharge'). + combination (str): 'basic', 'accidental', or 'seismic'. + Returns: - float: Partial safety factor (None if not applicable) + float | None | str: Partial safety factor, None (not applicable), or 'refer_note_2'. """ - load_type_lower = load_type.strip().lower() - effect_lower = effect.strip().lower() - load_category_lower = load_category.strip().lower() - combination_lower = combination.strip().lower() - - # 1.1 Dead Load, Snow load if present, SIDL except surfacing and back fill weight - if load_type_lower == 'dead_load': - return 1.0 # Always 1.0 for all SLS combinations - - # 1.2 Surfacing - elif load_type_lower == 'surfacing': - factors = { - 'adding': {'rare': 1.2, 'frequent': 1.2, 'quasi_permanent': 1.2}, - 'relieving': {'rare': 1.0, 'frequent': 1.0, 'quasi_permanent': 1.0}, + key = (load_type.strip().lower(), qualifier.strip().lower() if qualifier else None) + return IRC6_2017._TABLE_B2[key][combination.strip().lower()] + + @staticmethod + def uls_load_combinations() -> list[dict]: + """ + Generate all valid ULS load combinations per IRC:6-2017 Table B.2. + + Active load types + ----------------- + Permanent : dead_load, surfacing + Variable : live_load, wind_load, thermal_load + Accidental: vehicle_collision, barge_impact, floating_bodies (one at a time) + Seismic : seismic (service and construction separately) + + Skipped : prestress, backfill_weight, earth_pressure, + live_load_surcharge, construction_dead_load + + Permanent load rule + ------------------- + dead_load and surfacing each carry BOTH factors in every combination: + {'adding': γ_add, 'relieving': γ_rel} + Adding and relieving are mutually exclusive within a single check — + the caller applies whichever direction the load effect takes at that + cross-section. dead_load and surfacing always share the same effect + direction (both adding or both relieving together). + + Variable load rule + ------------------ + Exactly one variable load is 'leading'; the rest are 'accompanying'. + A permutation is excluded when the leading factor is None (not applicable + in that combination type). Consequently: + - Basic : 3 permutations + - Accidental : 3 accidental loads × 1 valid leading (live_load only) = 3 + - Seismic : 2 service conditions (all variable loads accompanying) + + Returns + ------- + list[dict] Each entry contains: + 'name' : str — human-readable label + 'combination_type' : str — 'basic' | 'accidental' | 'seismic' + 'factors' : dict — permanent loads as {'adding': γ, 'relieving': γ}; + variable/accidental/seismic loads as flat γ (or None) + """ + γ = IRC6_2017.table_B2 + + VARIABLE_LOADS = ['live_load', 'wind_load', 'thermal_load'] + ACCIDENTAL_LOADS = ['vehicle_collision', 'barge_impact', 'floating_bodies'] + + def perm_pair(load_type, combo): + return { + 'adding': γ(load_type, 'adding', combo), + 'relieving': γ(load_type, 'relieving', combo), } - if effect_lower not in factors: - raise ValueError(f"Invalid effect '{effect}'. Must be 'adding' or 'relieving'.") - if combination_lower not in factors[effect_lower]: - raise ValueError(f"Invalid combination '{combination}'.") - return factors[effect_lower][combination_lower] - - # 3.1 Carriageway load and associated loads - elif load_type_lower == 'live_load': - factors = { - 'leading': {'rare': 1.0, 'frequent': 0.75, 'quasi_permanent': None}, - 'accompanying': {'rare': 0.75, 'frequent': 0.2, 'quasi_permanent': 0}, + + combinations = [] + + # ── Basic Combination ───────────────────────────────────────────────── + perm_basic = { + 'dead_load': perm_pair('dead_load', 'basic'), + 'surfacing': perm_pair('surfacing', 'basic'), + } + for leading in VARIABLE_LOADS: + var = { + vl: γ(vl, 'leading' if vl == leading else 'accompanying', 'basic') + for vl in VARIABLE_LOADS } - if load_category_lower not in factors: - raise ValueError(f"Invalid load_category '{load_category}'. Must be 'leading' or 'accompanying'.") - if combination_lower not in factors[load_category_lower]: - raise ValueError(f"Invalid combination '{combination}'.") - return factors[load_category_lower][combination_lower] - + if var[leading] is None: + continue + combinations.append({ + 'name': f'Basic — {leading} leading', + 'combination_type': 'basic', + 'factors': {**perm_basic, **var}, + }) + + # ── Accidental Combination ──────────────────────────────────────────── + perm_acc = { + 'dead_load': perm_pair('dead_load', 'accidental'), + 'surfacing': perm_pair('surfacing', 'accidental'), + } + for acc in ACCIDENTAL_LOADS: + for leading in VARIABLE_LOADS: + var = { + vl: γ(vl, 'leading' if vl == leading else 'accompanying', 'accidental') + for vl in VARIABLE_LOADS + } + if var[leading] is None: + continue + combinations.append({ + 'name': f'Accidental ({acc}) — {leading} leading', + 'combination_type': 'accidental', + 'factors': {**perm_acc, **var, acc: γ(acc, None, 'accidental')}, + }) + + # ── Seismic Combination ─────────────────────────────────────────────── + perm_seis = { + 'dead_load': perm_pair('dead_load', 'seismic'), + 'surfacing': perm_pair('surfacing', 'seismic'), + } + var_seis = {vl: γ(vl, 'accompanying', 'seismic') for vl in VARIABLE_LOADS} + for condition in ['service', 'construction']: + combinations.append({ + 'name': f'Seismic ({condition}) — all variable loads accompanying', + 'combination_type': 'seismic', + 'factors': {**perm_seis, **var_seis, 'seismic': γ('seismic', condition, 'seismic')}, + }) + + return combinations + + # IRC:6-2017 Table B.3 — Partial Safety Factor for Verification of Serviceability Limit State + # Skipped: earth_pressure, prestress, shrinkage_creep, settlement, live_load_surcharge, + # hydraulic_loads (water_current, wave_pressure, buoyancy) + _TABLE_B3 = { + # 1. Permanent Loads + # 1.1 Dead Load, Snow load if present, SIDL except surfacing and back fill weight + ('dead_load', None): {'rare': 1.0, 'frequent': 1.0, 'quasi_permanent': 1.0 }, + # 1.2 Surfacing + ('surfacing', 'adding'): {'rare': 1.2, 'frequent': 1.2, 'quasi_permanent': 1.2 }, + ('surfacing', 'relieving'): {'rare': 1.0, 'frequent': 1.0, 'quasi_permanent': 1.0 }, + # 3. Variable Loads + # 3.1 Carriageway Live load + associated loads (braking, tractive, centrifugal) + Footway live load + ('live_load', 'leading'): {'rare': 1.0, 'frequent': 0.75, 'quasi_permanent': None}, + ('live_load', 'accompanying'): {'rare': 0.75, 'frequent': 0.2, 'quasi_permanent': 0 }, # 3.2 Thermal Load - elif load_type_lower == 'thermal_load': - factors = { - 'leading': {'rare': 1.0, 'frequent': 0.60, 'quasi_permanent': None}, - 'accompanying': {'rare': 0.60, 'frequent': 0.50, 'quasi_permanent': 0.5}, - } - if load_category_lower not in factors: - raise ValueError(f"Invalid load_category '{load_category}'. Must be 'leading' or 'accompanying'.") - if combination_lower not in factors[load_category_lower]: - raise ValueError(f"Invalid combination '{combination}'.") - return factors[load_category_lower][combination_lower] - + ('thermal_load', 'leading'): {'rare': 1.0, 'frequent': 0.60, 'quasi_permanent': None}, + ('thermal_load', 'accompanying'): {'rare': 0.60, 'frequent': 0.50, 'quasi_permanent': 0.5 }, # 3.3 Wind Load - elif load_type_lower == 'wind_load': - factors = { - 'leading': {'rare': 1.0, 'frequent': 0.60, 'quasi_permanent': None}, - 'accompanying': {'rare': 0.60, 'frequent': 0.50, 'quasi_permanent': 0}, + ('wind_load', 'leading'): {'rare': 1.0, 'frequent': 0.60, 'quasi_permanent': None}, + ('wind_load', 'accompanying'): {'rare': 0.60, 'frequent': 0.50, 'quasi_permanent': 0 }, + } + + @staticmethod + def table_B3(load_type, qualifier=None, combination='rare'): + """ + IRC:6-2017 Table B.3 — Partial Safety Factor for Verification of Serviceability Limit State. + + Args: + load_type (str): Load type key (see _TABLE_B3 for valid values). + qualifier (str | None): 'adding' or 'relieving' for surfacing; + 'leading' or 'accompanying' for variable loads; None for dead_load. + combination (str): 'rare', 'frequent', or 'quasi_permanent'. + + Returns: + float | None: Partial safety factor, or None (not applicable). + """ + key = (load_type.strip().lower(), qualifier.strip().lower() if qualifier else None) + return IRC6_2017._TABLE_B3[key][combination.strip().lower()] + + @staticmethod + def sls_load_combinations() -> list[dict]: + """ + Generate all valid SLS load combinations per IRC:6-2017 Table B.3. + + Active load types + ----------------- + Permanent : dead_load, surfacing + Variable : live_load, wind_load, thermal_load + + Skipped : earth_pressure, prestress, shrinkage_creep, settlement, + live_load_surcharge, hydraulic_loads + + Permanent load rule + ------------------- + dead_load is always 1.0 (no adding/relieving distinction in SLS). + surfacing carries both factors: {'adding': γ_add, 'relieving': γ_rel} + — mutually exclusive per cross-section check, always applied together. + + Variable load rule + ------------------ + Exactly one variable load is 'leading'; the rest are 'accompanying'. + For quasi-permanent, no variable load has a valid leading factor (all + None), so one combination is generated with all loads accompanying. + Consequently: + - Rare : 3 permutations + - Frequent : 3 permutations + - Quasi-permanent : 1 (all variable loads accompanying) + + Returns + ------- + list[dict] Each entry contains: + 'name' : str — human-readable label + 'combination_type' : str — 'rare' | 'frequent' | 'quasi_permanent' + 'factors' : dict — dead_load as flat γ; surfacing as + {'adding': γ, 'relieving': γ}; + variable loads as flat γ (or None) + """ + γ = IRC6_2017.table_B3 + + VARIABLE_LOADS = ['live_load', 'wind_load', 'thermal_load'] + + def surf_pair(combo): + return { + 'adding': γ('surfacing', 'adding', combo), + 'relieving': γ('surfacing', 'relieving', combo), } - if load_category_lower not in factors: - raise ValueError(f"Invalid load_category '{load_category}'. Must be 'leading' or 'accompanying'.") - if combination_lower not in factors[load_category_lower]: - raise ValueError(f"Invalid combination '{combination}'.") - return factors[load_category_lower][combination_lower] - - else: - raise ValueError( - f"Invalid load_type '{load_type}'. Must be 'dead_load', 'surfacing', " - "'live_load', 'thermal_load', or 'wind_load'." - ) + + combinations = [] + + # ── Rare & Frequent ─────────────────────────────────────────────────── + for combo_type in ['rare', 'frequent']: + perm = { + 'dead_load': γ('dead_load', None, combo_type), + 'surfacing': surf_pair(combo_type), + } + for leading in VARIABLE_LOADS: + var = { + vl: γ(vl, 'leading' if vl == leading else 'accompanying', combo_type) + for vl in VARIABLE_LOADS + } + if var[leading] is None: + continue + combinations.append({ + 'name': f'SLS {combo_type.capitalize()} — {leading} leading', + 'combination_type': combo_type, + 'factors': {**perm, **var}, + }) + + # ── Quasi-permanent ─────────────────────────────────────────────────── + # No variable load has a valid leading factor — all accompanying + perm_qp = { + 'dead_load': γ('dead_load', None, 'quasi_permanent'), + 'surfacing': surf_pair('quasi_permanent'), + } + var_qp = {vl: γ(vl, 'accompanying', 'quasi_permanent') for vl in VARIABLE_LOADS} + combinations.append({ + 'name': 'SLS Quasi-permanent — all variable loads accompanying', + 'combination_type': 'quasi_permanent', + 'factors': {**perm_qp, **var_qp}, + }) + + return combinations From dd12656f57d27e2f9f947ba5aed64d4726ffdae0 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 6 May 2026 23:58:32 +0530 Subject: [PATCH 175/225] designer updates for shear checks and some corrections. IRC 22 minor updates. --- .../bridge_types/plate_girder/designer.py | 1098 +++++++++++++---- .../core/utils/codes/irc22_2015.py | 211 +++- 2 files changed, 1016 insertions(+), 293 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index 5f0d902c4..bed4695ff 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -377,6 +377,9 @@ class DemandEnvelope: location: str = "midspan" member: str = "" source: str = "manual" + M_sls_kNm: float = 0.0 + V_sls_kN: float = 0.0 + Vr_kN: float = 0.0 # Cl.606.4.2 — LL shear range (Vmax_LL - Vmin_LL) class DemandExtractor: @@ -396,6 +399,9 @@ def from_manual( combination: str = "ULS Combination I", location: str = "midspan", member: str = "interior_girder", + M_sls_kNm: float = 0.0, + V_sls_kN: float = 0.0, + Vr_kN: float = 0.0, ) -> DemandEnvelope: # Build a DemandEnvelope from directly supplied factored quantities. return DemandEnvelope( @@ -404,6 +410,7 @@ def from_manual( stress_range_MPa=stress_range_MPa, shear_range_MPa=shear_range_MPa, Nsc=Nsc, governing_combination=combination, location=location, member=member, source="manual", + M_sls_kNm=M_sls_kNm, V_sls_kN=V_sls_kN, Vr_kN=Vr_kN, ) @staticmethod @@ -677,12 +684,40 @@ class CapacityResults: beta_interaction: float = 0.0 defl_limit_live_mm: float = 0.0 # Cl.604.3.2 defl_limit_total_mm: float = 0.0 - sigma_c_limit_MPa: float = 0.0 # Cl.604.3.1 - sigma_s_limit_MPa: float = 0.0 + sigma_c_limit_MPa: float = 0.0 # Cl.604.3.1 — concrete limit (0.48 fck) + sigma_s_limit_MPa: float = 0.0 # Cl.604.3.1 — steel equiv. limit (0.9 fy) f_fd_MPa: float = 0.0 # Cl.605 tau_fd_MPa: float = 0.0 + f_fd_eff_MPa: float = 0.0 # Cl.605 — min(f_fd, 1.5*fy) + tau_fd_eff_MPa: float = 0.0 # Cl.605 — min(tau_fd, 1.5*0.43*fy) + VL_N_per_mm: float = 0.0 # Cl.606.10 — longitudinal shear per unit length + transverse_shear_ok: bool = False # Cl.606.10 + Ast_required_cm2_per_m: float = 0.0 # Cl.606.10 — minimum transverse steel + Ast_provided_cm2_per_m: float = 0.0 # Cl.606.10 — provided transverse steel Qu_kN: float = 0.0 # Cl.606 stud_spacing_mm: float = 0.0 + # Composite section properties (Cl.604.3) — short-term transformed section. + I_comp_short_mm4: float = 0.0 + y_top_comp_mm: float = 0.0 # distance top-of-slab → composite NA + y_bot_comp_mm: float = 0.0 # distance composite NA → bottom steel + # SLS actual stresses (Cl.604.3.1) — computed from M_sls / I_comp. + sigma_c_actual_MPa: float = 0.0 # concrete stress at top fibre + sigma_rebar_actual_MPa: float = 0.0 # rebar tensile stress + sigma_steel_equiv_MPa: float = 0.0 # steel equivalent stress (max of comp/tens) + tau_web_actual_MPa: float = 0.0 # average web shear stress + sigma_rebar_limit_MPa: float = 0.0 # rebar SLS limit (0.80 fyk) + # Crack control (Cl.604.4). + As_min_crack_mm2: float = 0.0 + As_provided_crack_mm2: float = 0.0 # total rebar area (top + bot) + # Shear connector spacing limits (Cl.606.9). + stud_spacing_max_mm: float = 600.0 # governing upper limit (606.9) + stud_spacing_min_mm: float = 75.0 # absolute lower limit (606.9) + # Additional shear connector spacing checks. + Qr_kN: float = 0.0 # Cl.606.3.2 — fatigue stud capacity + stud_spacing_full_shear_mm: float = 0.0 # Cl.606.4.1.1 — SL2 (full shear) + stud_spacing_fatigue_mm: float = 0.0 # Cl.606.4.2 — SR (SLS fatigue) + stud_spacing_governing_mm: float = 0.0 # min(SL1, SL2, SR) + stud_detailing_ok: bool = True # Cl.606.6 — all detailing checks pass source: str = "built-in" details: Dict[str, dict] = field(default_factory=dict) @@ -701,235 +736,450 @@ def __init__(self, config: BridgeConfig): # IRC 22:2015 Cl.603.2.1 — effective width of concrete flange for simply-supported girder. def compute_effective_width(self) -> dict: - Lo_mm = self.geo.span * 1000.0 - B_mm = self.geo.beam_spacing * 1000.0 + # IRC22_2014.cl_603_2_1_effective_width_simply_supported takes Lo and B in metres + # and returns beff_m in metres. + Lo_m = self.geo.span + B_m = self.geo.beam_spacing if self.geo.beam_type == "inner": - beff = min(Lo_mm / 4.0, B_mm) - method = f"inner beam: min(Lo/4={Lo_mm/4:.1f}, B={B_mm:.1f})" + res = IRC22_2014.cl_603_2_1_effective_width_simply_supported( + Lo=Lo_m, beam_type="inner", B=B_m + ) else: - B1 = B_mm / 2.0 - B0 = self.geo.edge_distance * 1000.0 - beff = min(Lo_mm / 8.0, B1 / 2.0) + min(B0, Lo_mm / 8.0) - method = "outer beam: min(Lo/8, B1/2) + min(B0, Lo/8)" + # B1 = centre-to-centre spacing to adjacent inner beam + # B0 = edge_distance = distance from outer beam centreline to free slab edge + res = IRC22_2014.cl_603_2_1_effective_width_simply_supported( + Lo=Lo_m, beam_type="outer", + B1=B_m, + B0=self.geo.edge_distance, + ) + beff_mm = res["beff_m"] * 1000.0 # clause returns metres; convert to mm for design return { - "beff_mm": round(beff, 1), "Lo_mm": Lo_mm, "B_mm": B_mm, - "beam_type": self.geo.beam_type, "method": method, - "clause": "IRC 22:2015 - Cl.603.2.1", "source": "built-in", + "beff_mm" : round(beff_mm, 1), + "Lo_mm" : Lo_m * 1000.0, + "B_mm" : B_m * 1000.0, + "beam_type": self.geo.beam_type, + "method" : res["equation_used"], + "clause" : res["clause"], + "source" : "IRC22_2014", } # IRC 22:2015 Cl.603 — section classification (web + flange governed by d/tw and b/tf ratios). def classify_section(self) -> dict: - fy = self.mat.fy - epsilon = math.sqrt(250.0 / fy) sec = self.sec - d_tw = sec.dw / sec.tw - b_tf = (sec.bf_bot / 2.0 - sec.tw / 2.0) / sec.tf_bot + fy = self.mat.fy + + # Web classification — delegate to IRC22_2014.cl_603_check_steel_web_classification + # (which references IS 800:2007 Table 2 web limits via epsilon = sqrt(250/fy)). + web_res = IRC22_2014.cl_603_check_steel_web_classification( + depth_web_mm=sec.dw, + tw_mm=sec.tw, + fy_MPa=fy, + axial_force_N=0.0, # pure bending — zero axial compression + load_type="Compression", + ) + web_class = web_res["section_class"] + + # Flange classification (outstanding element of compression flange) — + # delegate to IRC22_2014.cl_602_table2_i_outstanding_compression_flange, + # which wraps IS 800:2007 Table 2 row (i). + # Outstanding half-width = (total flange width − web thickness) / 2 + b_outstanding = (sec.bf_top / 2.0) - (sec.tw / 2.0) + flange_result = IRC22_2014.cl_602_table2_i_outstanding_compression_flange( + width_mm=b_outstanding, + thickness_mm=sec.tf_top, + fy_MPa=fy, + section_type=sec.fabrication, # "rolled" or "welded" — as stored in SteelSection + ) + # IS800_2007.Table2_i returns [section_class, b/t ratio] + flange_class = flange_result[0] + b_tf = b_outstanding / sec.tf_top - web_class = self._classify_web(d_tw, epsilon) - flange_class = self._classify_flange(b_tf, epsilon, sec.fabrication) class_order = {"Plastic": 1, "Compact": 2, "Semi-Compact": 3, "Slender": 4} governing = max(web_class, flange_class, key=lambda c: class_order.get(c, 4)) return { - "epsilon": round(epsilon, 4), - "d_tw_ratio": round(d_tw, 2), "b_tf_ratio": round(b_tf, 2), - "web_class": web_class, "flange_class": flange_class, + "epsilon" : round(web_res["epsilon"], 4), + "d_tw_ratio" : round(web_res["d_by_t"], 2), + "b_tf_ratio" : round(b_tf, 2), + "web_class" : web_class, + "flange_class" : flange_class, "governing_class": governing, - "clause": "IRC 22:2015 - Cl.603", "source": "built-in", + "clause" : "IRC 22:2015 - Cl.603 | IS 800:2007 Table 2", + "source" : "IRC22_2014", } - @staticmethod - def _classify_web(d_tw: float, epsilon: float) -> str: - # Limits from IS 800:2007 Table 2 (IS800_2007 class constants). - if d_tw <= IS800_2007.WEB_LIMIT_PLASTIC * epsilon: - return "Plastic" - elif d_tw <= IS800_2007.WEB_LIMIT_COMPACT * epsilon: - return "Compact" - elif d_tw <= IS800_2007.WEB_LIMIT_SEMI_COMPACT * epsilon: - return "Semi-Compact" - return "Slender" - - @staticmethod - def _classify_flange(b_tf: float, epsilon: float, fab: str) -> str: - # Limits from IS 800:2007 Table 2 row (i) — outstanding flange element (IS800_2007 constants). - c_lim = (IS800_2007.FLANGE_OUTSTAND_COMPACT_WELDED if fab == "welded" - else IS800_2007.FLANGE_OUTSTAND_COMPACT_ROLLED) - sc_lim = (IS800_2007.FLANGE_OUTSTAND_SEMI_COMPACT_WELDED if fab == "welded" - else IS800_2007.FLANGE_OUTSTAND_SEMI_COMPACT_ROLLED) - if b_tf <= IS800_2007.FLANGE_OUTSTAND_PLASTIC * epsilon: - return "Plastic" - elif b_tf <= c_lim * epsilon: - return "Compact" - elif b_tf <= sc_lim * epsilon: - return "Semi-Compact" - return "Slender" - # IRC 22:2015 Cl.603.3.1 — plastic positive moment capacity (sagging, full shear interaction). + # + # delegates to IRC22_2014.cl_603_3_1_positive_moment_capacity which implements + # IRC 22 Annex I.1 / I.2 formulation: + # • Equivalent rectangular stress block: f_conc = αcc × η × fck / γc; a = λ × xu + # • η and λ factors for high-strength concrete (fck > 60 MPa) + # • PNA-in-slab: xu from force equilibrium; lever arm = steel CG − a/2 + # • PNA-in-steel: force balance across top flange → web → bottom flange; full plastic moment + # • Annex I.2 beff restriction for non-compact sections + # Partial safety factors γm0 and γc are embedded in T and C; Md_kNm = Mp_kNm directly. def compute_moment_capacity(self, beff_mm: float) -> dict: - sec = self.sec - mat = self.mat - slab = self.slab - fy, fck, gm0 = mat.fy, mat.fck, mat.gamma_m0 - ds, h_haunch = slab.thickness, slab.haunch_depth - - T_all = sec.A_steel * fy - C_max = 0.36 * fck * beff_mm * ds - - if T_all <= C_max: - xu = T_all / (0.36 * fck * beff_mm) - pna_location = "slab" - y_steel_cg = ds + h_haunch + sec.D - sec.y_cg_from_bot - Mp_Nmm = T_all * (y_steel_cg - xu / 2.0) - else: - C_conc = C_max - F_excess = T_all - C_conc - pna_location, y_pna, Mp_Nmm = self._pna_in_steel( - C_conc, F_excess, beff_mm, ds, h_haunch - ) - xu = ds - - Mp_kNm = Mp_Nmm / 1e6 - Md_kNm = Mp_kNm / gm0 - + res = IRC22_2014.cl_603_3_1_positive_moment_capacity( + fck=self.mat.fck, + fy=self.mat.fy, + beff=beff_mm, + ds=self.slab.thickness, + As=self.sec.A_steel, + bf_top=self.sec.bf_top, + tf_top=self.sec.tf_top, + tw=self.sec.tw, + dw=self.sec.dw, + bf_bot=self.sec.bf_bot, + tf_bot=self.sec.tf_bot, + D_steel=self.sec.D, + ys_from_bot=self.sec.y_cg_from_bot, + h_haunch=self.slab.haunch_depth, + gamma_m0=self.mat.gamma_m0, + combination_type="basic", + ) return { - "xu_mm": round(xu, 2), "pna_location": pna_location, - "T_steel_kN": round(T_all / 1e3, 2), - "C_conc_max_kN": round(C_max / 1e3, 2), - "Mp_kNm": round(Mp_kNm, 2), "Md_kNm": round(Md_kNm, 2), - "gamma_m0": gm0, - "clause": "IRC 22:2015 - Cl.603.3.1", "source": "built-in", + "xu_mm" : res["xu_mm"], + "pna_location" : res["pna_location"], + "T_steel_kN" : res["T_design_kN"], + "C_conc_max_kN" : res["C_slab_max_kN"], + "eta" : res["eta"], + "lambda_factor" : res["lambda_factor"], + "a_mm" : res["a_mm"], + "Mp_kNm" : res["Mp_kNm"], + "Md_kNm" : res["Md_kNm"], # = Mp_kNm; γm0 and γc already embedded + "gamma_m0" : self.mat.gamma_m0, + "clause" : res["clause"], + "source" : "IRC22_2014", } - def _pna_in_steel(self, C_conc, F_excess, beff_mm, ds, h_haunch): - sec = self.sec - fy = self.mat.fy - A_switch = F_excess / (2.0 * fy) - - if A_switch <= sec.Af_top: - pna_location = "top_flange" - elif A_switch <= sec.Af_top + sec.Aw: - pna_location = "web" - else: - pna_location = "bottom_flange" - - if pna_location == "top_flange": - y_pna = ds + h_haunch + A_switch / sec.bf_top - elif pna_location == "web": - y_pna = ds + h_haunch + sec.tf_top + (A_switch - sec.Af_top) / sec.tw - else: - y_pna = ds + h_haunch + sec.tf_top + sec.dw - - steel_elements = self._steel_elements(ds, h_haunch) - Mp_Nmm = C_conc * (y_pna - ds / 2.0) - - for (y_bot, height, width) in steel_elements: - y_top_elem = y_bot + height - if y_top_elem <= y_pna: - Mp_Nmm += fy * width * height * (y_pna - (y_bot + height / 2.0)) - elif y_bot >= y_pna: - Mp_Nmm += fy * width * height * ((y_bot + height / 2.0) - y_pna) - else: - h_comp = y_pna - y_bot - h_tens = y_top_elem - y_pna - Mp_Nmm += fy * width * h_comp * h_comp / 2.0 - Mp_Nmm += fy * width * h_tens * h_tens / 2.0 - - return pna_location, y_pna, Mp_Nmm - - def _steel_elements(self, ds, h_haunch): - sec = self.sec - base = ds + h_haunch - return [ - (base, sec.tf_top, sec.bf_top), - (base + sec.tf_top, sec.dw, sec.tw), - (base + sec.tf_top + sec.dw, sec.tf_bot, sec.bf_bot), - ] - - # IRC 22:2015 Cl.603.3.3.2 — plastic shear resistance of the web (Vd = Av·fy / (√3·γm0)). + # IRC 22:2015 Cl.603.3.3.2 — plastic shear resistance of the web. def compute_shear_capacity(self) -> dict: - sec = self.sec - fyw, gm0 = self.mat.fy, self.mat.gamma_m0 - Av = sec.dw * sec.tw - Vn = Av * fyw / math.sqrt(3.0) - Vd = Vn / gm0 - + # Delegate entirely to IRC22_2014.cl_603_3_3_2_plastic_shear_resistance. + # For a welded I-section (plate girder) the shear area is Av = dw × tw (clear web depth). + res = IRC22_2014.cl_603_3_3_2_plastic_shear_resistance( + section_type="i_major", + fyw=self.mat.fy, + fabrication=self.sec.fabrication, # "welded" → Av = dw × tw + d=self.sec.dw, + tw=self.sec.tw, + ) return { - "Av_mm2": round(Av, 1), "fyw_MPa": fyw, - "Vn_kN": round(Vn / 1e3, 2), "Vd_kN": round(Vd / 1e3, 2), - "gamma_m0": gm0, - "clause": "IRC 22:2015 - Cl.603.3.3.2", "source": "built-in", + "Av_mm2" : res["Av_mm2"], + "fyw_MPa" : res["fyw_MPa"], + "Vn_kN" : res["Vn_kN"], + "Vd_kN" : res["Vd_kN"], + "gamma_m0": res["gamma_m0"], + "clause" : res["clause"], + "source" : "IRC22_2014", } # IRC 22:2015 Cl.603.3.3.1 — lateral-torsional buckling resistance at construction stage. - def compute_buckling_resistance(self, beff_mm: float) -> dict: + def compute_buckling_resistance(self, beff_mm: float, section_class: str = "") -> dict: + # Section properties required by the IRC22 clause method. sec = self.sec mat = self.mat - fy, Es = mat.fy, mat.Es - G = mat.Gs # IRC 22 Annex III — shear modulus. - # Lateral unbraced length = cross-bracing spacing, capped at the full span. LLT_mm = min(self.geo.cross_bracing_spacing_m * 1000.0, self.geo.span * 1000.0) It = (sec.bf_top * sec.tf_top ** 3 - + sec.dw * sec.tw ** 3 + + sec.dw * sec.tw ** 3 + sec.bf_bot * sec.tf_bot ** 3) / 3.0 Iy = (sec.tf_top * sec.bf_top ** 3 / 12.0 - + sec.dw * sec.tw ** 3 / 12.0 + + sec.dw * sec.tw ** 3 / 12.0 + sec.tf_bot * sec.bf_bot ** 3 / 12.0) hw = sec.dw + sec.tf_top / 2.0 + sec.tf_bot / 2.0 - Iw = sec.Af_bot * (hw ** 2) / 4.0 * (sec.bf_bot ** 2 / 12.0) - - Zp = sec.Zp_steel - - pi2_EIy = math.pi ** 2 * Es * Iy / (LLT_mm ** 2) - Mcr_Nmm = math.sqrt( - pi2_EIy * (G * It + math.pi ** 2 * Es * Iw / LLT_mm ** 2) + Iy_top = sec.tf_top * sec.bf_top ** 3 / 12.0 + Iy_bot = sec.tf_bot * sec.bf_bot ** 3 / 12.0 + Iw = (Iy_top * Iy_bot) / (Iy_top + Iy_bot) * hw**2 + + # Allow the caller to pass section_class from a prior classify_section() call to + # avoid a second classification run; fall back to a fresh call when not supplied. + if not section_class: + section_class = self.classify_section()["governing_class"] + + # Delegate to IRC22_2014.cl_603_3_3_1_buckling_resistance_moment. + # Internally this calls IS800_2007.cl_8_2_1_2_design_bending_strength for Mpl, + # then applies the λLT / χLT buckling reduction per IS 800:2007 Cl.8.2.1.2. + res = IRC22_2014.cl_603_3_3_1_buckling_resistance_moment( + section_class=section_class.lower(), + Zp=sec.Zp_steel, + Ze=sec.Ze_steel, + fy=mat.fy, + gamma_mo=mat.gamma_m0, + Iy=Iy, + It=It, + Iw=Iw, + LLT=LLT_mm, + section_type=sec.fabrication, # "rolled" or "welded" → sets αLT (0.21 / 0.49) + E=mat.Es, + G=mat.Gs, ) - Mcr_kNm = Mcr_Nmm / 1e6 - - lambda_LT = math.sqrt(Zp * fy / Mcr_Nmm) if Mcr_Nmm > 0 else 999.0 - alpha_LT = 0.49 if sec.fabrication == "welded" else 0.21 - phi_LT = 0.5 * (1.0 + alpha_LT * (lambda_LT - 0.2) + lambda_LT ** 2) - discriminant = phi_LT ** 2 - lambda_LT ** 2 - chi_LT = min(1.0 / (phi_LT + math.sqrt(discriminant)), 1.0) if discriminant > 0 else 1.0 - chi_LT = max(chi_LT, 0.0) - - Mb_kNm = chi_LT * Zp * fy / mat.gamma_m0 / 1e6 + # phi_LT is computed internally by the IRC22 clause method but not returned; + # derive it from the returned alpha_LT and lambda_LT for the report. + alpha_LT = res["alpha_LT"] + lambda_LT = res["lambda_LT"] + phi_LT = round(0.5 * (1.0 + alpha_LT * (lambda_LT - 0.2) + lambda_LT ** 2), 4) return { - "It_mm4": round(It, 1), "Iy_mm4": round(Iy, 1), - "LLT_mm": LLT_mm, "Mcr_kNm": round(Mcr_kNm, 2), - "lambda_LT": round(lambda_LT, 4), "alpha_LT": alpha_LT, - "phi_LT": round(phi_LT, 4), "chi_LT": round(chi_LT, 4), - "Mb_kNm": round(Mb_kNm, 2), - "clause": "IRC 22:2015 - Cl.603.3.3.1", "source": "built-in", + "It_mm4" : round(It, 1), + "Iy_mm4" : round(Iy, 1), + "LLT_mm" : LLT_mm, + "Mcr_kNm" : res["Mcr_kNm"], + "lambda_LT": res["lambda_LT"], + "alpha_LT" : res["alpha_LT"], + "phi_LT" : phi_LT, + "chi_LT" : res["chi_LT"], + "Mb_kNm" : res["Mpl_buckling_kNm"], + "clause" : res["clause"], + "source" : "IRC22_2014", } # IRC 22:2015 Cl.603.3.3.3 — reduced bending resistance under high shear (V > 0.6·Vd). def compute_combined_bending_shear(self, Md_kNm: float, V_kN: float, Vd_kN: float) -> dict: sec = self.sec fy, gm0 = self.mat.fy, self.mat.gamma_m0 + + # Mfd = plastic bending strength of the section excluding the shear area (web). + # For an I-section: Mfd ≈ fy × Af_bot × hw / γm0 (flange-only contribution). hw = sec.dw + sec.tf_top / 2.0 + sec.tf_bot / 2.0 Mfd_kNm = fy * sec.Af_bot * hw / 1e6 / gm0 - if V_kN <= 0.6 * Vd_kN: + # Delegate to IRC22_2014.cl_603_3_3_3_reduced_bending_under_high_shear (Eq 3.13). + res = IRC22_2014.cl_603_3_3_3_reduced_bending_under_high_shear( + Md_kNm=Md_kNm, + Mfd_kNm=Mfd_kNm, + V_kN=V_kN, + Vd_kN=Vd_kN, + ) + return { + "Mdv_kNm" : res["Mdv_kNm"], + "Mfd_kNm" : res["Mfd_kNm"], + "beta" : res["beta"], + "reduction_required": res["is_reduction_required"], + "clause" : res["clause"], + "source" : "IRC22_2014", + } + + # IRC 22:2015 Cl.604.3 — short-term and long-term composite section properties. + # These are needed for SLS stress calculations (Cl.604.3.1) and stud spacing (Cl.606.4.1). + def compute_composite_section_props(self, beff_mm: float) -> dict: + """ + Compute transformed composite second moment of area, neutral-axis depths, and + section moduli for both short-term (n = Es/Ecm) and long-term (2n = Es/(0.5*Ecm)) + modular ratios per IRC 22:2015 Cl.604.3. + + Coordinate system: all y-distances measured from BOTTOM of steel section (upward +ve). + """ + sec, mat, slab = self.sec, self.mat, self.slab + mod = IRC22_2014.cl_604_3_modular_ratio(Ecm=mat.Ecm, Kc=0.5) + n_short = mod["m_short_term"] # Es/Ecm ≥ 7.5 + n_long = mod["m_long_term"] # Es/(0.5*Ecm) ≥ 15.0 + ds = slab.thickness + h_haunch = slab.haunch_depth + + def _props(n: float) -> dict: + Ac_trans = beff_mm * ds / n # transformed slab area (steel-side) + y_steel = sec.y_cg_from_bot # steel CG from bottom of steel + y_slab = sec.D + h_haunch + ds / 2.0 # slab CG from bottom of steel + A_total = sec.A_steel + Ac_trans + y_comp_bot = (sec.A_steel * y_steel + Ac_trans * y_slab) / A_total # composite NA from bot steel + I_steel = sec.Iz_steel + sec.A_steel * (y_comp_bot - y_steel) ** 2 + I_conc = beff_mm * ds ** 3 / (12.0 * n) + Ac_trans * (y_comp_bot - y_slab) ** 2 + I_comp = I_steel + I_conc + total_depth = sec.D + h_haunch + ds + y_top = total_depth - y_comp_bot # distance from top of slab to composite NA + y_bot = y_comp_bot # distance from composite NA to bottom of steel return { - "Mdv_kNm": round(Md_kNm, 2), "Mfd_kNm": round(Mfd_kNm, 2), - "beta": 0.0, "reduction_required": False, - "clause": "IRC 22:2015 - Cl.603.3.3.3", "source": "built-in", + "n" : round(n, 3), + "Ac_trans_mm2" : round(Ac_trans, 1), + "y_comp_from_bot_mm" : round(y_comp_bot, 3), + "y_top_mm" : round(y_top, 3), + "y_bot_mm" : round(y_bot, 3), + "I_comp_mm4" : round(I_comp, 0), + "S_top_mm3" : round(I_comp / y_top, 0), + "S_bot_mm3" : round(I_comp / y_bot, 0), } - beta = min((2.0 * V_kN / Vd_kN - 1.0) ** 2, 1.0) - Mdv_kNm = Md_kNm - beta * (Md_kNm - Mfd_kNm) + return { + "short_term" : _props(n_short), + "long_term" : _props(n_long), + "clause" : mod["clause"], + "source" : "IRC22_2014", + } + + # IRC 22:2015 Cl.604.3.1 — actual SLS stresses from service moment. + # Calculates concrete, rebar, and steel stresses; delegates limit checks to IRC22_2014. + def compute_sls_stresses( + self, + beff_mm: float, + M_sls_kNm: float, + V_sls_kN: float, + comp_props: dict = None, + ) -> dict: + """ + IRC 22:2015 Cl.604.3.1 — Actual SLS stress calculation and limit checks. + + Uses the SHORT-TERM composite section (modular ratio n = Es/Ecm) as required + for serviceability checks under live loading. + + Stresses computed: + σ_c = M_sls × y_top / I_comp concrete compressive stress (top of slab) + σ_r = M_sls × y_rebar / I_comp rebar tensile stress (bottom rebar centroid) + f_bc = M_sls × |y_steel_top| / I_comp steel bending stress at top fibre + f_bt = M_sls × y_bot / I_comp steel bending stress at bottom fibre + τ_b = V_sls / A_web average web shear stress + f_e = √(f²_bc + f²_p ± f_bc·f_p + 3τ²_b) equivalent steel stress + + Limits (from IRC22_2014.cl_604_3_1_limiting_stresses): + σ_c ≤ k1 × fck = 0.48 fck (IRC 112-2011 Cl.12.2.1) + σ_r ≤ k3 × fyk = 0.80 fyk (IRC 112-2011 Cl.12.2.2) + f_e ≤ 0.9 fy (IRC 22:2015 Cl.604.3.1) + """ + if M_sls_kNm <= 0.0: + return {"skipped": True, "reason": "M_sls_kNm = 0; supply SLS moment to enable this check."} + + sec, mat, slab = self.sec, self.mat, self.slab + + if comp_props is None: + comp_props = self.compute_composite_section_props(beff_mm) + + short = comp_props["short_term"] + I_comp = short["I_comp_mm4"] + y_top = short["y_top_mm"] # from top of slab to composite NA (compression arm) + y_bot = short["y_bot_mm"] # from composite NA to bottom of steel (tension arm) + y_comp_bot = short["y_comp_from_bot_mm"] + + M_Nmm = M_sls_kNm * 1e6 + V_N = V_sls_kN * 1e3 + + # ── Concrete compressive stress at top of slab ──────────────────────── + sigma_c = M_Nmm * y_top / I_comp + + # ── Rebar tensile stress at bottom rebar centroid ───────────────────── + # Rebar centroid from bottom of slab = cover_bot + approx half-bar-dia (6 mm) + y_rebar_from_slab_bot = slab.cover_bot + 6.0 + # Position from bottom of steel: D + h_haunch + ds - y_rebar_from_slab_bot + y_rebar_from_steel_bot = sec.D + slab.haunch_depth + slab.thickness - y_rebar_from_slab_bot + y_rebar_from_NA = y_rebar_from_steel_bot - y_comp_bot # +ve → below NA (tension) + sigma_rebar = max(M_Nmm * y_rebar_from_NA / I_comp, 0.0) # tension = positive + + # ── Structural steel bending stresses ───────────────────────────────── + # y of top-steel-fibre from bottom of steel + y_steel_top_from_bot_steel = sec.D + y_steel_top_from_NA = y_steel_top_from_bot_steel - y_comp_bot # −ve → above NA (comp) + fbc = M_Nmm * abs(y_steel_top_from_NA) / I_comp # compressive stress at top steel fibre + fbt = M_Nmm * y_bot / I_comp # tensile stress at bottom steel fibre + + # ── Average web shear stress ─────────────────────────────────────────── + tau_b = V_N / sec.Aw if sec.Aw > 0.0 else 0.0 + + # fp = bearing stress at the section — 0 unless at support with known reaction/area + fp = 0.0 + + # ── Equivalent steel stress (IRC 22:2015 Cl.604.3.1) ────────────────── + fe_comp = math.sqrt(fbc**2 + fp**2 + fbc * fp + 3.0 * tau_b**2) + fe_tens = math.sqrt(fbt**2 + fp**2 + fbt * fp + 3.0 * tau_b**2) + fe_max = max(fe_comp, fe_tens) + + # ── Delegate limit checks to IRC22_2014 ─────────────────────────────── + lim = IRC22_2014.cl_604_3_1_limiting_stresses( + f_ck_cu=mat.fck, + f_yk_reinf=mat.fy_rebar, + f_y_struct=mat.fy, + fbc=fbc, + fbt=fbt, + fp=fp, + tau_b=tau_b, + ) + sigma_c_limit = lim["concrete_allowable_stress_MPa"] + sigma_rebar_limit = lim["reinforcement_allowable_stress_MPa"] + sigma_steel_limit = lim["steel_equivalent_limit_0.9fy_MPa"] + + return { + "M_sls_kNm" : M_sls_kNm, + "V_sls_kN" : V_sls_kN, + "I_comp_mm4" : round(I_comp, 0), + "y_top_mm" : round(y_top, 2), + "y_bot_mm" : round(y_bot, 2), + # Concrete + "sigma_c_MPa" : round(sigma_c, 3), + "sigma_c_limit_MPa" : round(sigma_c_limit, 3), + "concrete_ok" : sigma_c <= sigma_c_limit, + # Rebar + "sigma_rebar_MPa" : round(sigma_rebar, 3), + "sigma_rebar_limit_MPa": round(sigma_rebar_limit, 3), + "rebar_ok" : sigma_rebar <= sigma_rebar_limit, + # Structural steel + "fbc_MPa" : round(fbc, 3), + "fbt_MPa" : round(fbt, 3), + "tau_b_MPa" : round(tau_b, 3), + "fe_comp_MPa" : round(fe_comp, 3), + "fe_tens_MPa" : round(fe_tens, 3), + "fe_max_MPa" : round(fe_max, 3), + "sigma_steel_limit_MPa": round(sigma_steel_limit, 3), + "steel_ok" : fe_max <= sigma_steel_limit, + "clause" : lim["clause"], + "source" : "IRC22_2014", + } + + # IRC 22:2015 Cl.604.4 — minimum reinforcement for crack control. + def compute_crack_control(self, beff_mm: float) -> dict: + """ + IRC 22:2015 Cl.604.4 + IRC 112-2011 Cl.12.3.3 — Minimum reinforcement for crack control. + Delegates entirely to IRC22_2014.cl_604_4_crack_control_As_min. + As_provided = total of top and bottom rebar areas from SlabProperties. + """ + slab, mat = self.slab, self.mat + As_total = slab.rebar_area_top + slab.rebar_area_bot + res = IRC22_2014.cl_604_4_crack_control_As_min( + fctm=mat.fctm, + beff=beff_mm, + t_slab=slab.thickness, + fy=mat.fy_rebar, + kc=0.5, + width_mm=beff_mm, + element_type="flange", + As_provided=As_total if As_total > 0.0 else None, + ) + return { + "As_min_mm2" : res["As_min_mm2"], + "As_provided_mm2" : As_total, + "is_ok" : res.get("is_ok"), # None if As_provided = 0 + "kc" : res["kc"], + "k" : res["k"], + "fctm_MPa" : res["fctm_MPa"], + "clause" : res["clause"], + "source" : "IRC22_2014", + } + # IRC 22:2015 Cl.606.9 — limiting spacing of shear connectors. + def compute_stud_spacing_limits( + self, provided_spacing_mm: float = None + ) -> dict: + """ + IRC 22:2015 Cl.606.9 — Limiting criteria for shear connector spacing. + Max spacing = min(600, 3 × t_slab, 4 × h_stud). Min spacing = 75 mm. + Delegates entirely to IRC22_2014.cl_606_9_shear_connector_spacing_limits. + """ + res = IRC22_2014.cl_606_9_shear_connector_spacing_limits( + tslab_mm=self.slab.thickness, + h_stud_mm=self.studs.height, + provided_spacing_mm=provided_spacing_mm, + ) return { - "Mdv_kNm": round(Mdv_kNm, 2), "Mfd_kNm": round(Mfd_kNm, 2), - "beta": round(beta, 4), "reduction_required": True, - "clause": "IRC 22:2015 - Cl.603.3.3.3", "source": "built-in", + "max_spacing_mm" : res["max_spacing_limit_mm"], + "min_spacing_mm" : res["minimum_spacing_limit_mm"], + "limit_600_mm" : res["limit_600_mm"], + "limit_3_tslab_mm" : res["limit_3_tslab_mm"], + "limit_4_hstud_mm" : res["limit_4_hstud_mm"], + "provided_spacing_mm" : provided_spacing_mm, + "is_ok" : res.get("is_spacing_acceptable"), + "clause" : res["clause"], + "source" : "IRC22_2014", } # IRC 22:2015 Cl.604.3 — short- and long-term modular ratio (min bounds 7.5 / 15.0). @@ -996,12 +1246,17 @@ def compute_fatigue(self, stress_range_MPa: float = 0.0) -> dict: fy=mat.fy, ) + f_fd = assessment["f_fd_MPa"] + tau_fd = assessment["tau_fd_MPa"] + return { "mu_r": mu_r, "f_f_MPa": strength["f_f_normal_MPa"], "tau_f_MPa": strength["tau_f_shear_MPa"], - "f_fd_MPa": assessment["f_fd_MPa"], - "tau_fd_MPa": assessment["tau_fd_MPa"], + "f_fd_MPa": f_fd, + "tau_fd_MPa": tau_fd, + "f_fd_eff_MPa": min(f_fd, 1.5 * mat.fy), + "tau_fd_eff_MPa": min(tau_fd, 1.5 * 0.43 * mat.fy), "Nsc": fat.Nsc, "exempt_stress_check": design["stress_condition_ok"], "clause": "IRC 22:2015 - Cl.605.2 / 605.3 / 605.4", @@ -1040,30 +1295,172 @@ def compute_stud_spacing(self, Vu_kN: float, beff_mm: float, ds, h_haunch = slab.thickness, slab.haunch_depth n_studs = self.studs.n_per_section + # ys_mm: distance from the top of the composite section (top of slab) down to steel CG. + # Steel CG from bottom of steel = y_cg_from_bot. + # Total composite depth = ds + h_haunch + sec.D (measured from bottom of steel upward). + # Distance from top of composite section to steel CG = total depth − y_cg_from_bot. + ys_mm = ds + h_haunch + (sec.D - sec.y_cg_from_bot) + + res = IRC22_2014.cl_606_4_1_longitudinal_shear_and_spacing( + V_kN=Vu_kN, + beff_mm=beff_mm, + xu_mm=xu_mm, + t_slab_mm=ds, + Qu_kN=Qu_kN, + Es_MPa=mat.Es, + Ecm_MPa=mat.Ecm, + As_mm2=sec.A_steel, + Is_mm4=sec.Iz_steel, + ys_mm=ys_mm, + studs_per_section=n_studs, + ) + return { + "modular_ratio" : res["n_modular_ratio"], + "VL_N_per_mm" : res["VL_N_per_mm"], + "spacing_mm" : res["spacing_mm"], + "n_studs_per_section": n_studs, + "clause" : res["clause"], + "source" : "IRC22_2014", + } + + # IRC 22:2015 Cl.606.3.2 — fatigue capacity of headed studs (Qr). + def compute_stud_fatigue_capacity(self) -> dict: + stud = self.studs + fat = self.fatigue + res = IRC22_2014.cl_606_3_2_stud_connector_fatigue_strength( + Nsc=fat.Nsc, + stud_d_mm=stud.diameter, + use_table8=True, + ) + return { + "tau_f_MPa" : res["tau_f_MPa"], + "Qr_kN" : res.get("Qr_table8_kN"), + "Nsc" : fat.Nsc, + "clause" : res["clause"], + "source" : "IRC22_2014", + } + + # IRC 22:2015 Cl.606.4.1.1 — full shear connection spacing (SL2). + def compute_stud_full_shear_spacing( + self, beff_mm: float, xu_mm: float, Qu_kN: float + ) -> dict: + sec, mat, slab = self.sec, self.mat, self.slab + n_studs = self.studs.n_per_section + shear_span_mm = self.geo.span * 1000.0 / 2.0 # L/2 for simply supported + + res = IRC22_2014.cl_606_4_1_1_full_shear_spacing( + As_mm2=sec.A_steel, + fyk_MPa=mat.fy, + fck_cu_MPa=mat.fck, + beff_mm=beff_mm, + xu_mm=xu_mm, + t_slab_mm=slab.thickness, + Qu_kN=Qu_kN, + shear_span_mm=shear_span_mm, + studs_per_section=n_studs, + ) + return { + "H1_kN" : res["H1_kN"], + "H2_kN" : res["H2_kN"], + "H_governing_kN" : res["H_governing_kN"], + "shear_span_mm" : shear_span_mm, + "spacing_mm" : res["spacing_mm"], + "clause" : res["clause"], + "source" : "IRC22_2014", + } + + # IRC 22:2015 Cl.606.4.2 — SLS fatigue stud spacing (SR). + def compute_stud_fatigue_spacing( + self, Vr_kN: float, beff_mm: float, xu_mm: float, + Qr_kN: float, I_comp_mm4: float + ) -> dict: + mat, slab = self.mat, self.slab + n_studs = self.studs.n_per_section n = mat.Es / mat.Ecm - t_eff = min(xu_mm, ds) - Aec = beff_mm * t_eff / n - y_steel = ds + h_haunch + sec.D - sec.y_cg_from_bot - y_conc = t_eff / 2.0 - total_A = sec.A_steel + Aec - y_composite = (sec.A_steel * y_steel + Aec * y_conc) / total_A - I_steel = sec.Iz_steel + sec.A_steel * (y_steel - y_composite) ** 2 - I_conc = beff_mm * t_eff ** 3 / (12.0 * n) + Aec * (y_composite - y_conc) ** 2 - Ic = I_steel + I_conc - Y = abs(y_composite - y_conc) - VL = Vu_kN * 1e3 * Aec * Y / Ic - spacing = n_studs * Qu_kN * 1e3 / VL if VL > 0 else float("inf") + res = IRC22_2014.cl_606_4_2_fatigue_shear_spacing( + Vr_kN=Vr_kN, + beff_mm=beff_mm, + xu_mm=xu_mm, + t_slab_mm=slab.thickness, + I_composite_mm4=I_comp_mm4, + Qu_kN=Qr_kN, + n=n, + studs_per_section=n_studs, + ) return { - "modular_ratio": round(n, 3), "Aec_mm2": round(Aec, 1), - "Ic_mm4": round(Ic, 0), "Y_mm": round(Y, 2), - "VL_N_per_mm": round(VL, 3), "spacing_mm": round(spacing, 1), - "n_studs_per_section": n_studs, - "clause": "IRC 22:2015 - Cl.606.4.1", "source": "built-in", + "Vr_kN" : Vr_kN, + "Aec_mm2" : res["Aec_mm2"], + "Y_mm" : res["Y_mm"], + "Vr_per_mm_kN" : res["Vr_per_mm_kN"], + "spacing_mm" : res["spacing_SR_mm"], + "clause" : res["clause"], + "source" : "IRC22_2014", + } + + # IRC 22:2015 Cl.606.6 — detailing checks for headed studs. + def compute_stud_detailing(self) -> dict: + stud, sec, slab = self.studs, self.sec, self.slab + res = IRC22_2014.cl_606_6_shear_connector_detailing( + d_stud_mm=stud.diameter, + h_stud_mm=stud.height, + t_flange_mm=sec.tf_top, + t_slab_mm=slab.thickness, + ) + return { + "stud_diameter_check" : res["stud_diameter_check"], + "stud_height_check" : res["stud_height_check"], + "stud_head_check" : res.get("stud_head_check"), + "edge_distance_check" : res.get("edge_distance_check"), + "projection_check" : res.get("projection_check"), + "clear_cover_check" : res.get("clear_cover_check"), + "all_ok" : res["all_requirements_satisfied"], + "clause" : res["clause"], + "source" : "IRC22_2014", + } + + # IRC 22:2015 Cl.606.10 — transverse shear check at the steel–concrete interface. + def compute_transverse_shear(self, VL_N_per_mm: float) -> dict: + sec, mat, slab, studs = self.sec, self.mat, self.slab, self.studs + # Shear plane length for interior girder: shorter of slab thickness or (2*hstud + bf_top). + L_mm = min(slab.thickness, 2.0 * studs.height + sec.bf_top) + # Transverse reinforcement: top + bot rebar area (mm²) converted to cm². + # n_layers = 6 accounts for bars within 1 m at a 200 mm longitudinal spacing. + Ast_cm2_per_m = (slab.rebar_area_top + slab.rebar_area_bot) / 100.0 + n_layers = 6 + res = IRC22_2014.cl_606_10_transverse_shear_check( + VL_kN=VL_N_per_mm, # N/mm ≡ kN/m + fck=mat.fck, + fyk=mat.fy_rebar, + L_mm=L_mm, + Ast_cm2_per_m=Ast_cm2_per_m, + n_layers=n_layers, + ) + return { + "VL_N_per_mm" : VL_N_per_mm, + "L_shear_plane_mm" : L_mm, + "Ast_provided_cm2_per_m" : Ast_cm2_per_m, + "n_layers" : n_layers, + "Vcap1_kN_per_m" : res["Vcap1_kN_per_m"], + "Vcap2_kN_per_m" : res["Vcap2_kN_per_m"], + "governing_capacity_kN_per_m": res["governing_capacity_kN_per_m"], + "check_ok" : res["check_ok"], + "min_Ast_required_cm2_per_m" : res["min_Ast_required_cm2_per_m"], + "Ast_provided_ok" : res["Ast_provided_ok"], + "clause" : res["clause"], + "source" : "IRC22_2014", } # Orchestrator — runs every IRC 22:2015 clause computation into one CapacityResults. - def compute_all(self, Vu_kN: float = 0.0, stress_range_MPa: float = 0.0) -> CapacityResults: + def compute_all( + self, + Vu_kN: float = 0.0, + stress_range_MPa: float = 0.0, + M_sls_kNm: float = 0.0, + V_sls_kN: float = 0.0, + Vr_kN: float = 0.0, # Cl.606.4.2 — LL shear range for fatigue stud spacing + provided_stud_spacing_mm: float = None, + ) -> CapacityResults: results = CapacityResults() results.source = "IRC22_2014" @@ -1091,8 +1488,9 @@ def compute_all(self, Vu_kN: float = 0.0, stress_range_MPa: float = 0.0) -> Capa results.Vd_kN = shear["Vd_kN"] results.details["shear_capacity"] = shear - # 5. LTB buckling resistance - ltb = self.compute_buckling_resistance(results.beff_mm) + # 5. LTB buckling resistance — pass governing class from step 2 to avoid re-running classification. + ltb = self.compute_buckling_resistance(results.beff_mm, + section_class=sec_class["governing_class"]) results.Mcr_kNm = ltb["Mcr_kNm"] results.lambda_LT = ltb["lambda_LT"] results.chi_LT = ltb["chi_LT"] @@ -1126,6 +1524,8 @@ def compute_all(self, Vu_kN: float = 0.0, stress_range_MPa: float = 0.0) -> Capa fatigue = self.compute_fatigue(stress_range_MPa=stress_range_MPa) results.f_fd_MPa = fatigue["f_fd_MPa"] results.tau_fd_MPa = fatigue["tau_fd_MPa"] + results.f_fd_eff_MPa = fatigue["f_fd_eff_MPa"] + results.tau_fd_eff_MPa = fatigue["tau_fd_eff_MPa"] results.details["fatigue"] = fatigue # 11. Shear stud capacity @@ -1133,14 +1533,95 @@ def compute_all(self, Vu_kN: float = 0.0, stress_range_MPa: float = 0.0) -> Capa results.Qu_kN = stud_cap["Qu_kN"] results.details["stud_capacity"] = stud_cap - # 12. Stud spacing + # 12. Stud spacing (ULS) if Vu_kN > 0 and results.xu_mm > 0: stud_sp = self.compute_stud_spacing( Vu_kN, results.beff_mm, results.xu_mm, results.Qu_kN ) results.stud_spacing_mm = stud_sp["spacing_mm"] + results.VL_N_per_mm = stud_sp["VL_N_per_mm"] results.details["stud_spacing"] = stud_sp + # 13. Composite section properties (Cl.604.3) + comp_props = self.compute_composite_section_props(results.beff_mm) + short = comp_props["short_term"] + results.I_comp_short_mm4 = short["I_comp_mm4"] + results.y_top_comp_mm = short["y_top_mm"] + results.y_bot_comp_mm = short["y_bot_mm"] + results.details["composite_section_props"] = comp_props + + # 13b. Fatigue stud capacity (Cl.606.3.2). + stud_fat_cap = self.compute_stud_fatigue_capacity() + results.Qr_kN = stud_fat_cap.get("Qr_kN") or 0.0 + results.details["stud_fatigue_capacity"] = stud_fat_cap + + # 13c. Full shear connection spacing (Cl.606.4.1.1). + if results.xu_mm > 0: + full_sp = self.compute_stud_full_shear_spacing( + results.beff_mm, results.xu_mm, results.Qu_kN + ) + results.stud_spacing_full_shear_mm = full_sp["spacing_mm"] + results.details["stud_spacing_full_shear"] = full_sp + + # 13d. Fatigue stud spacing (Cl.606.4.2). + if Vr_kN > 0 and results.Qr_kN > 0 and results.I_comp_short_mm4 > 0: + fat_sp = self.compute_stud_fatigue_spacing( + Vr_kN, results.beff_mm, results.xu_mm, + results.Qr_kN, results.I_comp_short_mm4, + ) + results.stud_spacing_fatigue_mm = fat_sp["spacing_mm"] + results.details["stud_spacing_fatigue"] = fat_sp + + # 13e. Governing spacing = min(SL1, SL2, SR) — ignores any that were not computed. + _spacing_candidates = [s for s in [ + results.stud_spacing_mm, + results.stud_spacing_full_shear_mm, + results.stud_spacing_fatigue_mm, + ] if s > 0] + results.stud_spacing_governing_mm = min(_spacing_candidates) if _spacing_candidates else 0.0 + + # 13f. Stud detailing (Cl.606.6). + detailing = self.compute_stud_detailing() + results.stud_detailing_ok = detailing["all_ok"] + results.details["stud_detailing"] = detailing + + # 14. SLS actual stress checks (Cl.604.3.1) — only when M_sls_kNm provided. + sls_actual = self.compute_sls_stresses( + beff_mm=results.beff_mm, + M_sls_kNm=M_sls_kNm, + V_sls_kN=V_sls_kN, + comp_props=comp_props, + ) + results.details["sls_actual_stresses"] = sls_actual + if not sls_actual.get("skipped"): + results.sigma_c_actual_MPa = sls_actual["sigma_c_MPa"] + results.sigma_rebar_actual_MPa = sls_actual["sigma_rebar_MPa"] + results.sigma_steel_equiv_MPa = sls_actual["fe_max_MPa"] + results.tau_web_actual_MPa = sls_actual["tau_b_MPa"] + results.sigma_rebar_limit_MPa = sls_actual["sigma_rebar_limit_MPa"] + + # 15. Crack control — minimum reinforcement (Cl.604.4). + crack = self.compute_crack_control(results.beff_mm) + results.As_min_crack_mm2 = crack["As_min_mm2"] + results.As_provided_crack_mm2 = crack["As_provided_mm2"] + results.details["crack_control"] = crack + + # 16. Shear connector spacing limits (Cl.606.9). + stud_lim = self.compute_stud_spacing_limits( + provided_spacing_mm=provided_stud_spacing_mm + ) + results.stud_spacing_max_mm = stud_lim["max_spacing_mm"] + results.stud_spacing_min_mm = stud_lim["min_spacing_mm"] + results.details["stud_spacing_limits"] = stud_lim + + # 17. Transverse shear check (Cl.606.10). + if results.VL_N_per_mm > 0: + trans_shear = self.compute_transverse_shear(results.VL_N_per_mm) + results.transverse_shear_ok = trans_shear["check_ok"] + results.Ast_required_cm2_per_m = trans_shear["min_Ast_required_cm2_per_m"] + results.Ast_provided_cm2_per_m = trans_shear["Ast_provided_cm2_per_m"] + results.details["transverse_shear"] = trans_shear + return results @@ -1200,47 +1681,149 @@ def _add_check(self, check_id, name, clause, demand, capacity, unit, note=""): self.checks.append(result) return result - # Run all eight IRC 22:2015 design checks (flexure, shear, interaction, LTB, deflections, fatigue). + # Run all IRC 22:2015 design checks — mapped to the 8 output-dock categories. # ←── CHANGED def run_all_checks(self) -> List[CheckResult]: self.checks.clear() d, c = self.demand, self.capacity + # ── CATEGORY 1: Strength Limit State (Flexure) ─────────────────────── self._add_check(1, "ULS Flexure", "Cl.603.3.1", d.Mu_kNm, c.Md_kNm, "kNm", note=f"PNA in {c.pna_location}, xu={c.xu_mm:.1f} mm") + # ── CATEGORY 2: Strength Limit State (Shear) ───────────────────────── self._add_check(2, "ULS Shear", "Cl.603.3.3.2", d.Vu_kN, c.Vd_kN, "kN", - note=f"Av={c.Av_mm2:.0f} mm2") + note=f"Av={c.Av_mm2:.0f} mm²") + # ── CATEGORY 3: Interaction ─────────────────────────────────────────── + # 3a. Moment–Shear interaction (Cl.603.3.3.3) effective_Md = c.Mdv_kNm if c.beta_interaction > 0 else c.Md_kNm - self._add_check(3, "Bending-Shear Interaction", "Cl.603.3.3.3", + self._add_check(3, "M-V Interaction", "Cl.603.3.3.3", d.Mu_kNm, effective_Md, "kNm", note=f"beta={c.beta_interaction:.4f}") - self._add_check(4, "LTB (Construction Stage)", "Cl.603.3.3.1", - d.M_construction_kNm if d.M_construction_kNm > 0 else d.Mu_kNm, c.Mb_kNm, "kNm", - note=f"lambda_LT={c.lambda_LT:.4f}, chi_LT={c.chi_LT:.4f}") + # 3b. Moment–Axial interaction (Cl.603.3.3.3) + # NRd = Ag × fy / γm0 (yielding of gross steel section under compression/tension) + if d.Nu_kN > 0.0: + _moment_det = c.details.get("moment_capacity", {}) + _gamma_m0 = _moment_det.get("gamma_m0", 1.1) + _shear_det = c.details.get("shear_capacity", {}) + _fyw = _shear_det.get("fyw_MPa", 350.0) + _Av = _shear_det.get("Av_mm2", 0.0) + _Ag = sec.A_steel + NRd_kN = _Ag * _fyw / _gamma_m0 / 1e3 if _Ag > 0.0 else 0.0 + if NRd_kN > 0.0 and c.Md_kNm > 0.0: + interaction_ratio = d.Nu_kN / NRd_kN + d.Mu_kNm / c.Md_kNm + self._add_check(4, "M-N Interaction", "Cl.603.3.3.3", + interaction_ratio, 1.0, "–", + note=f"Nu/NRd + Mu/MRd = {interaction_ratio:.3f}") + + # ── CATEGORY 4: Lateral Torsional Buckling ──────────────────────────── + self._add_check(5, "LTB (Construction Stage)", "Cl.603.3.3.1", # ←── CHANGED id was 4 + d.M_construction_kNm if d.M_construction_kNm > 0 else d.Mu_kNm, + c.Mb_kNm, "kNm", + note=f"λ_LT={c.lambda_LT:.4f}, χ_LT={c.chi_LT:.4f}") + + # ── CATEGORY 5: Resistance to Longitudinal & Transverse Shear ───────── + # 5a. ULS stud spacing (Cl.606.4.1): SL1 ≤ code geometric max. + if c.stud_spacing_mm > 0.0: + self._add_check(6, "Stud Spacing ULS (SL1)", "Cl.606.4.1", + c.stud_spacing_mm, c.stud_spacing_max_mm, "mm", + note=f"SL1={c.stud_spacing_mm:.0f} ≤ max={c.stud_spacing_max_mm:.0f} mm") + + # 5b. Full shear connection spacing (Cl.606.4.1.1): SL2 ≤ code geometric max. + if c.stud_spacing_full_shear_mm > 0.0: + self._add_check(6, "Stud Spacing Full-Shear (SL2)", "Cl.606.4.1.1", + c.stud_spacing_full_shear_mm, c.stud_spacing_max_mm, "mm", + note=f"SL2={c.stud_spacing_full_shear_mm:.0f} ≤ max={c.stud_spacing_max_mm:.0f} mm") + + # 5c. Fatigue SLS stud spacing (Cl.606.4.2): SR ≤ code geometric max. + if c.stud_spacing_fatigue_mm > 0.0: + self._add_check(6, "Stud Spacing Fatigue (SR)", "Cl.606.4.2", + c.stud_spacing_fatigue_mm, c.stud_spacing_max_mm, "mm", + note=f"SR={c.stud_spacing_fatigue_mm:.0f} ≤ max={c.stud_spacing_max_mm:.0f} mm") + + # 5d. Governing spacing upper limit (Cl.606.9): Sactual ≤ max. + if c.stud_spacing_governing_mm > 0.0: + self._add_check(7, "Stud Spacing Governing ≤ Max", "Cl.606.9", + c.stud_spacing_governing_mm, c.stud_spacing_max_mm, "mm", + note=(f"Sact=min(SL1,SL2,SR)={c.stud_spacing_governing_mm:.0f} mm, " + f"max={c.stud_spacing_max_mm:.0f} mm")) + + # 5e. Governing spacing lower limit (Cl.606.9): Sactual ≥ min (75 mm). + if c.stud_spacing_governing_mm > 0.0: + self._add_check(7, "Stud Spacing Governing ≥ Min", "Cl.606.9", + c.stud_spacing_min_mm, c.stud_spacing_governing_mm, "mm", + note=f"min={c.stud_spacing_min_mm:.0f} ≤ Sact={c.stud_spacing_governing_mm:.0f} mm") + + # 5f. Stud detailing (Cl.606.6): demand=0 (all pass) or 1 (any fail). + det = c.details.get("stud_detailing", {}) + if det: + self._add_check(7, "Stud Detailing", "Cl.606.6", + 0.0 if c.stud_detailing_ok else 1.0, 1.0, "–", + note="d≤2tf, h≥max(4d,100), edge≥25, cover≥25") + + # ── CATEGORY 6: Resistance to Fatigue ──────────────────────────────── + if d.stress_range_MPa > 0 and c.f_fd_eff_MPa > 0: + self._add_check(8, "Fatigue Normal Stress", "Cl.605", + d.stress_range_MPa, c.f_fd_eff_MPa, "MPa", + note=f"Nsc={d.Nsc:,}") + if d.shear_range_MPa > 0 and c.tau_fd_eff_MPa > 0: + self._add_check(9, "Fatigue Shear Stress", "Cl.605", + d.shear_range_MPa, c.tau_fd_eff_MPa, "MPa", + note=f"Nsc={d.Nsc:,}") + + # ── CATEGORY 7: Stress Limitation (SLS) ────────────────────────────── + # 7a. Concrete compressive stress (Cl.604.3.1) + sls_act = c.details.get("sls_actual_stresses", {}) + if not sls_act.get("skipped") and c.sigma_c_actual_MPa > 0.0: + self._add_check(10, "SLS Concrete Stress", "Cl.604.3.1", + c.sigma_c_actual_MPa, c.sigma_c_limit_MPa, "MPa", + note=f"Limit = 0.48 fck = {c.sigma_c_limit_MPa:.1f} MPa") + + # 7b. Structural steel equivalent stress (Cl.604.3.1) + if not sls_act.get("skipped") and c.sigma_steel_equiv_MPa > 0.0: + self._add_check(11, "SLS Steel Equiv. Stress", "Cl.604.3.1", + c.sigma_steel_equiv_MPa, c.sigma_s_limit_MPa, "MPa", + note=f"fe = √(fbc²+fp²+fbc·fp+3τ²) ≤ 0.9fy = {c.sigma_s_limit_MPa:.1f} MPa") + + # 7c. Rebar tensile stress (Cl.604.3.1 / IRC 112 Cl.12.2.2) + if not sls_act.get("skipped") and c.sigma_rebar_actual_MPa > 0.0 and c.sigma_rebar_limit_MPa > 0.0: + self._add_check(12, "SLS Rebar Stress", "Cl.604.3.1", + c.sigma_rebar_actual_MPa, c.sigma_rebar_limit_MPa, "MPa", + note=f"Limit = 0.80 fyk = {c.sigma_rebar_limit_MPa:.1f} MPa") + + # ── CATEGORY 8: Deflection and Crack Control ────────────────────────── if d.delta_live_mm > 0: - self._add_check(5, "SLS Deflection (Live)", "Cl.604.3.2", + self._add_check(13, "SLS Deflection (Live)", "Cl.604.3.2", d.delta_live_mm, c.defl_limit_live_mm, "mm", note="Limit = L/800") if d.delta_total_mm > 0: - self._add_check(6, "SLS Deflection (Total)", "Cl.604.3.2", + self._add_check(14, "SLS Deflection (Total)", "Cl.604.3.2", d.delta_total_mm, c.defl_limit_total_mm, "mm", note="Limit = L/600") - if d.stress_range_MPa > 0 and c.f_fd_MPa > 0: - self._add_check(7, "Fatigue Normal Stress", "Cl.605", - d.stress_range_MPa, c.f_fd_MPa, "MPa", - note=f"Nsc={d.Nsc:,}") - - if d.shear_range_MPa > 0 and c.tau_fd_MPa > 0: - self._add_check(8, "Fatigue Shear Stress", "Cl.605", - d.shear_range_MPa, c.tau_fd_MPa, "MPa", - note=f"Nsc={d.Nsc:,}") + # Crack control — minimum reinforcement check (Cl.604.4) + if c.As_min_crack_mm2 > 0.0 and c.As_provided_crack_mm2 > 0.0: + self._add_check(15, "Crack Control (As_min)", "Cl.604.4", + c.As_min_crack_mm2, c.As_provided_crack_mm2, "mm²", + note=(f"As_min={c.As_min_crack_mm2:.0f} mm², " + f"As_prov={c.As_provided_crack_mm2:.0f} mm²")) + + # ── CATEGORY 5 (cont.): Transverse Shear (Cl.606.10) + ts = c.details.get("transverse_shear", {}) + if ts: + self._add_check(16, "Transverse Shear (VL vs Vcap)", "Cl.606.10", + ts["VL_N_per_mm"], ts["governing_capacity_kN_per_m"], "kN/m", + note=f"L={ts['L_shear_plane_mm']:.0f} mm") + if c.Ast_provided_cm2_per_m > 0.0: + self._add_check(17, "Transverse Shear (Ast_min)", "Cl.606.10", + c.Ast_required_cm2_per_m, c.Ast_provided_cm2_per_m, "cm²/m", + note=(f"Ast_req={c.Ast_required_cm2_per_m:.3f}, " + f"Ast_prov={c.Ast_provided_cm2_per_m:.3f} cm²/m")) return self.checks @@ -1358,11 +1941,19 @@ def _build_demands(self) -> str: lines.append(self._kv("Shear Range", d.shear_range_MPa, "MPa")) if d.Nsc > 0: lines.append(self._kv("Nsc", f"{d.Nsc:,}", "cycles")) + if d.M_sls_kNm > 0: + lines.append(self._kv("M_sls (service)", d.M_sls_kNm, "kNm")) + if d.V_sls_kN > 0: + lines.append(self._kv("V_sls (service)", d.V_sls_kN, "kN")) return "\n".join(lines) def _build_capacity_summary(self) -> str: c = self.capacity sc = c.details.get("section_class", {}) + sls = c.details.get("sls_actual_stresses", {}) + cmp = c.details.get("composite_section_props", {}) + crack = c.details.get("crack_control", {}) + stud_lim = c.details.get("stud_spacing_limits", {}) lines = [self._section_title("IRC 22:2015 CAPACITY COMPUTATIONS")] lines.append(f"\n 1. Effective Width (Cl.603.2.1)") @@ -1377,36 +1968,70 @@ def _build_capacity_summary(self) -> str: lines.append(f"\n 3. Positive Moment Capacity (Cl.603.3.1)") lines.append(f" PNA Location: {c.pna_location}") lines.append(f" xu = {c.xu_mm:.2f} mm") - lines.append(f" Mp = {c.Mp_kNm:,.2f} kNm") - lines.append(f" Md = Mp / gamma_m0 = {c.Md_kNm:,.2f} kNm") + lines.append(f" Mp = Md = {c.Md_kNm:,.2f} kNm (γm0 and γc embedded)") lines.append(f"\n 4. Plastic Shear Resistance (Cl.603.3.3.2)") - lines.append(f" Av = {c.Av_mm2:,.0f} mm2") + lines.append(f" Av = {c.Av_mm2:,.0f} mm²") lines.append(f" Vn = {c.Vn_kN:,.2f} kN") - lines.append(f" Vd = Vn / gamma_m0 = {c.Vd_kN:,.2f} kN") + lines.append(f" Vd = {c.Vd_kN:,.2f} kN") lines.append(f"\n 5. Buckling Resistance Moment (Cl.603.3.3.1)") - lines.append(f" Mcr = {c.Mcr_kNm:,.2f} kNm") - lines.append(f" lambda_LT = {c.lambda_LT:.4f}") - lines.append(f" chi_LT = {c.chi_LT:.4f}") + lines.append(f" Mcr = {c.Mcr_kNm:,.2f} kNm | λ_LT = {c.lambda_LT:.4f} | χ_LT = {c.chi_LT:.4f}") lines.append(f" Mb = {c.Mb_kNm:,.2f} kNm") - lines.append(f"\n 6. Combined Bending + Shear (Cl.603.3.3.3)") - lines.append(f" beta = {c.beta_interaction:.4f}") - lines.append(f" Mdv = {c.Mdv_kNm:,.2f} kNm") + lines.append(f"\n 6. Bending–Shear Interaction (Cl.603.3.3.3)") + lines.append(f" beta = {c.beta_interaction:.4f} | Mdv = {c.Mdv_kNm:,.2f} kNm") + + # Composite section properties + lines.append(f"\n 7. Composite Section Properties (Cl.604.3)") + if cmp: + st = cmp.get("short_term", {}) + lt = cmp.get("long_term", {}) + lines.append(f" Short-term (n={cmp.get('short_term',{}).get('n','?')}): " + f"I = {st.get('I_comp_mm4',0):,.0f} mm⁴ | " + f"y_top = {st.get('y_top_mm',0):.1f} mm | y_bot = {st.get('y_bot_mm',0):.1f} mm") + lines.append(f" Long-term (n={cmp.get('long_term',{}).get('n','?')}): " + f"I = {lt.get('I_comp_mm4',0):,.0f} mm⁴") + + lines.append(f"\n 8. SLS Stress Limits (Cl.604.3.1)") + lines.append(f" Concrete limit : σc ≤ 0.48 fck = {c.sigma_c_limit_MPa:.1f} MPa") + lines.append(f" Steel equiv. limit: fe ≤ 0.90 fy = {c.sigma_s_limit_MPa:.1f} MPa") + lines.append(f" Rebar limit : σr ≤ 0.80 fyk = {c.sigma_rebar_limit_MPa:.1f} MPa") + # Actual stresses + if not sls.get("skipped"): + lines.append(f" --- Actual stresses (M_sls = {sls.get('M_sls_kNm',0):.1f} kNm) ---") + lines.append(f" σc (concrete) = {c.sigma_c_actual_MPa:.3f} MPa" + f" {'OK' if c.sigma_c_actual_MPa <= c.sigma_c_limit_MPa else 'FAIL'}") + lines.append(f" fe (steel) = {c.sigma_steel_equiv_MPa:.3f} MPa" + f" {'OK' if c.sigma_steel_equiv_MPa <= c.sigma_s_limit_MPa else 'FAIL'}") + lines.append(f" σr (rebar) = {c.sigma_rebar_actual_MPa:.3f} MPa" + f" {'OK' if c.sigma_rebar_actual_MPa <= c.sigma_rebar_limit_MPa else 'FAIL'}") + lines.append(f" τ (web shear) = {c.tau_web_actual_MPa:.3f} MPa") + else: + lines.append(f" [Actual stresses not computed — supply M_sls_kNm to DemandEnvelope]") - lines.append(f"\n 7. Deflection Limits (Cl.604.3.2)") - lines.append(f" Live + impact <= L/800 = {c.defl_limit_live_mm:.2f} mm") - lines.append(f" Total <= L/600 = {c.defl_limit_total_mm:.2f} mm") + lines.append(f"\n 9. Deflection Limits (Cl.604.3.2)") + lines.append(f" Live + impact ≤ L/800 = {c.defl_limit_live_mm:.2f} mm") + lines.append(f" Total ≤ L/600 = {c.defl_limit_total_mm:.2f} mm") - lines.append(f"\n 8. Fatigue Assessment (Cl.605)") - lines.append(f" f_fd = {c.f_fd_MPa:.3f} MPa") - lines.append(f" tau_fd = {c.tau_fd_MPa:.3f} MPa") + lines.append(f"\n 10. Fatigue Assessment (Cl.605)") + lines.append(f" f_fd = {c.f_fd_MPa:.3f} MPa | τ_fd = {c.tau_fd_MPa:.3f} MPa") - lines.append(f"\n 9. Shear Stud Capacity (Cl.606.3.1)") - lines.append(f" Qu = {c.Qu_kN:.3f} kN per stud") + lines.append(f"\n 11. Shear Stud Capacity (Cl.606.3.1)") + lines.append(f" Qu = {c.Qu_kN:.3f} kN / stud") if c.stud_spacing_mm > 0: - lines.append(f" Required spacing = {c.stud_spacing_mm:.1f} mm") + lines.append(f" Required ULS spacing = {c.stud_spacing_mm:.1f} mm") + + lines.append(f"\n 12. Shear Connector Spacing Limits (Cl.606.9)") + if stud_lim: + lines.append(f" Max spacing = min(600, 3t_slab, 4h_stud) = {c.stud_spacing_max_mm:.0f} mm") + lines.append(f" Min spacing = {c.stud_spacing_min_mm:.0f} mm") + + lines.append(f"\n 13. Crack Control — Min Reinforcement (Cl.604.4)") + if crack: + lines.append(f" As_min = {c.As_min_crack_mm2:.0f} mm² | " + f"As_provided = {c.As_provided_crack_mm2:.0f} mm² | " + f"{'OK' if c.As_provided_crack_mm2 >= c.As_min_crack_mm2 else 'INSUFFICIENT'}") return "\n".join(lines) @@ -1734,7 +2359,12 @@ def run_design_check( # -- Step 3: IRC 22 Capacity -- print("\n[Step 3/5] Computing IRC 22:2015 capacities ...") calculator = IRC22CapacityCalculator(config) - capacity = calculator.compute_all(Vu_kN=demand.Vu_kN, stress_range_MPa=demand.stress_range_MPa) + capacity = calculator.compute_all( # ←── CHANGED + Vu_kN=demand.Vu_kN, + stress_range_MPa=demand.stress_range_MPa, + M_sls_kNm=demand.M_sls_kNm, + V_sls_kN=demand.V_sls_kN, + ) print(f" beff = {capacity.beff_mm:.1f} mm (Cl.603.2.1)") print(f" Md = {capacity.Md_kNm:,.2f} kNm (Cl.603.3.1)") print(f" Vd = {capacity.Vd_kN:,.2f} kN (Cl.603.3.3.2)") diff --git a/src/osdagbridge/core/utils/codes/irc22_2015.py b/src/osdagbridge/core/utils/codes/irc22_2015.py index 27f7ccbf1..9e91cf729 100644 --- a/src/osdagbridge/core/utils/codes/irc22_2015.py +++ b/src/osdagbridge/core/utils/codes/irc22_2015.py @@ -376,87 +376,181 @@ def cl_603_3_1_positive_moment_capacity( beff, ds, As, - Af, - bf, - tf, + bf_top, + tf_top, tw, - dc, + dw, + bf_bot, + tf_bot, + D_steel, + ys_from_bot, + h_haunch=0.0, + gamma_m0=GAMMA_M0_STEEL, + gamma_c=1.50, combination_type="basic", is_compact=True, - beff_compact_limit=None, - fabrication=KEY_SECTION_FABRICATION[0] # default = rolled + fabrication=KEY_SECTION_FABRICATION[0] ): """ - IRC:22-2014 - Clause 603.3.1 + Annexure I (I.1) - Positive Moment Resistance of Composite Beam + IRC:22-2014 Clause 603.3.1 + Annexure I (I.1 and I.2) + Positive Moment Resistance of Composite Beam (Sagging, Full Shear Interaction) """ - # Step 1: Effective width restriction - beff_used = beff + # 0. Combination-specific concrete safety factor + gamma_c_used = 1.20 if combination_type == "accidental" else gamma_c - if not is_compact: + # 1. Stress block shape factors — Annex I.1 + if fck <= 60.0: + eta = 1.0 + lam = 0.8 + elif fck <= 110.0: + eta = 1.0 - (fck - 60.0) / 250.0 + lam = 0.8 - (fck - 60.0) / 500.0 + else: + raise ValueError( + f"fck = {fck} MPa exceeds 110 MPa, outside the Annex I.1 stress " + "block formula range (IRC 22:2014)." + ) + alpha_cc = 0.67 + f_conc = alpha_cc * eta * fck / gamma_c_used + + # 2. Annex I.2 — restrict beff for non-compact sections + beff_used = beff + if not is_compact: eps = math.sqrt(250.0 / fy) - fabrication = fabrication.lower() + fab = fabrication.lower() - if fabrication == KEY_SECTION_FABRICATION[0]: # rolled - flange_compact_ratio = 10.5 * eps - section_type = "Rolled" - elif fabrication == KEY_SECTION_FABRICATION[1]: # welded - flange_compact_ratio = 9.4 * eps + if fab == KEY_SECTION_FABRICATION[1]: + outstand_limit = 9.4 * eps section_type = "Welded" else: - raise ValueError( - f"Invalid fabrication type '{fabrication}'. " - f"Allowed: {KEY_SECTION_FABRICATION}" - ) + outstand_limit = 10.5 * eps + section_type = "Rolled" + + beff_flange = outstand_limit * tf_top * 2 + + web_compact_ratio = 105.0 * eps + beff_web = web_compact_ratio * tw - # Flange compact check (IS800 reference) IS800_2007.Table2_i( - width=bf, - thickness=tf, + width=(bf_top / 2.0 - tw / 2.0), + thickness=tf_top, f_y=fy, section_type=section_type ) - - beff_flange_limit = flange_compact_ratio * tf - - # Web compact check (IS800 reference) IS800_2007.Table2_iii( - depth=ds, + depth=dw, thickness=tw, f_y=fy, classification_type="Neutral axis at mid-depth" ) - web_compact_ratio = 105.0 * eps - beff_web_limit = web_compact_ratio * tw - - beff_compact_limit = min(beff_flange_limit, beff_web_limit) + beff_compact_limit = min(beff_flange, beff_web) beff_used = min(beff, beff_compact_limit) - # Step 2: Positive Moment Capacity - # Full shear interaction assumption + # 3. Steel geometry helpers + Af_top = bf_top * tf_top + Aw = tw * dw + Af_bot = bf_bot * tf_bot - # Concrete compression force (N) - C = 0.36 * fck * beff_used * dc + # 4. Design forces + f_s = fy / gamma_m0 + T = As * f_s + C_max = f_conc * lam * beff_used * ds - # Steel tension force (N) - T = Af * fy + # 5a. CASE A: PNA in the concrete slab + if T <= C_max: + xu = T / (f_conc * lam * beff_used) + a = lam * xu - # Governing force - F = min(C, T) + y_steel = ds + h_haunch + (D_steel - ys_from_bot) + lever_arm = y_steel - a / 2.0 + + Mp_Nmm = T * lever_arm + Mp_kNm = Mp_Nmm / 1e6 + + return { + "eta" : round(eta, 4), + "lambda_factor" : round(lam, 4), + "alpha_cc" : alpha_cc, + "gamma_c_used" : gamma_c_used, + "f_conc_design_MPa" : round(f_conc, 3), + "beff_used_mm" : round(beff_used, 2), + "T_design_kN" : round(T / 1e3, 3), + "C_slab_max_kN" : round(C_max / 1e3, 3), + "xu_mm" : round(xu, 3), + "a_mm" : round(a, 3), + "pna_location" : "slab", + "lever_arm_mm" : round(lever_arm, 3), + "Mp_kNm" : round(Mp_kNm, 3), + "Md_kNm" : round(Mp_kNm, 3), + "clause" : "IRC 22:2014 - 603.3.1 + Annex I (I.1, I.2)", + } + + # 5b. CASE B: PNA in the steel section + C_conc = C_max + a = lam * ds + + F_steel_comp = (T - C_conc) / 2.0 + + if F_steel_comp <= Af_top * f_s: + pna_in_el = F_steel_comp / (bf_top * f_s) + y_pna_steel = pna_in_el + pna_location = "top_flange" + elif F_steel_comp <= (Af_top + Aw) * f_s: + depth_in_web = (F_steel_comp - Af_top * f_s) / (tw * f_s) + y_pna_steel = tf_top + depth_in_web + pna_location = "web" + else: + depth_in_bot = (F_steel_comp - (Af_top + Aw) * f_s) / (bf_bot * f_s) + y_pna_steel = tf_top + dw + depth_in_bot + pna_location = "bottom_flange" + + y_pna_abs = ds + h_haunch + y_pna_steel + xu = y_pna_abs + + y_conc_cg = a / 2.0 + Mp_Nmm = C_conc * (y_pna_abs - y_conc_cg) + + steel_elems = [ + (ds + h_haunch, tf_top, bf_top), + (ds + h_haunch + tf_top, dw, tw), + (ds + h_haunch + tf_top + dw, tf_bot, bf_bot), + ] + + for y_top, h_el, w_el in steel_elems: + y_bot = y_top + h_el + if y_bot <= y_pna_abs: + y_cg = y_top + h_el / 2.0 + Mp_Nmm += f_s * w_el * h_el * (y_pna_abs - y_cg) + elif y_top >= y_pna_abs: + y_cg = y_top + h_el / 2.0 + Mp_Nmm += f_s * w_el * h_el * (y_cg - y_pna_abs) + else: + h_comp = y_pna_abs - y_top + h_tens = y_bot - y_pna_abs + Mp_Nmm += f_s * w_el * h_comp * (h_comp / 2.0) + Mp_Nmm += f_s * w_el * h_tens * (h_tens / 2.0) - # Positive moment (Nmm) - Mp_Nmm = F * dc Mp_kNm = Mp_Nmm / 1e6 return { - "beff_used_mm": round(beff_used, 3), - "Mp_kNm": round(Mp_kNm, 3), - "governing_force": "concrete" if C < T else "steel", - "clause": "IRC 22:2014 - 603.3.1 Positive Moment Capacity" + "eta" : round(eta, 4), + "lambda_factor" : round(lam, 4), + "alpha_cc" : alpha_cc, + "gamma_c_used" : gamma_c_used, + "f_conc_design_MPa" : round(f_conc, 3), + "beff_used_mm" : round(beff_used, 2), + "T_design_kN" : round(T / 1e3, 3), + "C_slab_max_kN" : round(C_max / 1e3, 3), + "xu_mm" : round(xu, 3), + "a_mm" : round(a, 3), + "pna_location" : pna_location, + "y_pna_from_steel_top_mm" : round(y_pna_steel, 3), + "Mp_kNm" : round(Mp_kNm, 3), + "Md_kNm" : round(Mp_kNm, 3), + "clause" : "IRC 22:2014 - 603.3.1 + Annex I (I.1, I.2)", } @@ -1316,7 +1410,7 @@ def cl_605_4_fatigue_assessment( tau_range <= tau_fd Absolute max stress limits: - sigma_max <= fy + sigma_max <= 1.5 * fy tau_max <= tau_y Note: @@ -1324,8 +1418,6 @@ def cl_605_4_fatigue_assessment( As per assumption: tau_y = 0.43 * fy (Assumed based on IRC:24 Table G.2) """ - - if fy is None: raise ValueError("fy (yield stress) must be provided") @@ -1336,7 +1428,7 @@ def cl_605_4_fatigue_assessment( # Normal elastic limit - sigma_limit = fy + sigma_limit = 1.5 * fy # Shear elastic limit tau_y = 0.43 * fy # Assumption: IRC 24 Table G.2 @@ -1660,8 +1752,8 @@ def cl_606_4_1_longitudinal_shear_and_spacing( # Effective thickness of concrete in compression block t_eff = min(xu_mm, t_slab_mm) - # Transformed compressive concrete area - Aec = n * beff_mm * t_eff # mm2 + # Transformed compressive concrete area (steel-side: divide by n) + Aec = beff_mm * t_eff / n # mm2 # Distance from NA to centroid of concrete compression block Y = xu_mm - (t_eff / 2.0) @@ -1671,8 +1763,8 @@ def cl_606_4_1_longitudinal_shear_and_spacing( # Steel inertia about composite NA I_steel = Is_mm4 + As_mm2 * (ys_mm - xu_mm) ** 2 - # Concrete inertia about composite NA (transformed) - I_conc = (n * beff_mm * (t_eff ** 3) / 12.0) + Aec * (Y ** 2) + # Concrete inertia about composite NA (steel-side: divide by n) + I_conc = (beff_mm * (t_eff ** 3) / (12.0 * n)) + Aec * (Y ** 2) Ic_mm4 = I_steel + I_conc @@ -1704,7 +1796,7 @@ def cl_606_4_1_1_full_shear_spacing( Qu_kN, # stud capacity (kN) -> from IRC22 606.3.1 shear_span_mm, # L = length from zero moment to max moment section (mm) studs_per_section=2, - gamma_m=GAMMA_M0_STEEL + gamma_m=1 ): """ IRC 22:2015 Clause 606.4.1.1 Full Shear Connection @@ -1766,7 +1858,8 @@ def cl_606_4_2_fatigue_shear_spacing( xu_mm, # NA depth from top concrete (mm) -> from IRC22 603.3.1 t_slab_mm, # slab thickness (mm) I_composite_mm4, # composite moment of inertia (mm4) (same as 606.4.1; may move to another file) - Qu_kN, # stud capacity (kN) -> from Clause 606.3.1 + Qu_kN, # stud fatigue capacity Qr (kN) -> from Clause 606.3.2 + n, # short-term modular ratio Es/Ecm studs_per_section=2 ): """ @@ -1791,7 +1884,7 @@ def cl_606_4_2_fatigue_shear_spacing( t_eff = min(xu_mm, t_slab_mm) # transformed compression area of concrete - Aec_mm2 = beff_mm * t_eff + Aec_mm2 = beff_mm * t_eff / n # CG distance of compression block from NA (same as 606.4.1) Y_mm = xu_mm - t_eff / 2 From 2886914060b3e87b58b2e69723aad4ba99a17b69 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 7 May 2026 00:40:53 +0530 Subject: [PATCH 176/225] designer updates for shear checks and some corrections. IRC 22 and main file minor updates. --- .../bridge_types/plate_girder/designer.py | 29 +++++++++++++++++++ .../plate_girder/plategirderbridge.py | 22 ++++++++------ .../core/utils/codes/irc22_2015.py | 18 +++++++----- 3 files changed, 52 insertions(+), 17 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index bed4695ff..af5b99c83 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -617,6 +617,33 @@ def _sum_defl(lcs: list) -> float: except (KeyError, ValueError): pass + # ------------------------------------------------------------------ + # (5) SLS moment and shear — max live load values (service, unfactored) + # ------------------------------------------------------------------ + M_sls_mz = 0.0 + V_sls_vy = 0.0 + for lc in all_live_lcs: + try: + mz = _as_float( + ds.sel(Loadcase=lc, Element=element_ids, + Component=["Mz_i", "Mz_j"])["forces"].values + ) + vy = _as_float( + ds.sel(Loadcase=lc, Element=element_ids, + Component=["Vy_i", "Vy_j"])["forces"].values + ) + mz_finite = mz[~np.isnan(mz)] + vy_finite = vy[~np.isnan(vy)] + if mz_finite.size: + M_sls_mz = max(M_sls_mz, float(np.abs(mz_finite).max())) + if vy_finite.size: + V_sls_vy = max(V_sls_vy, float(np.abs(vy_finite).max())) + except KeyError: + continue + + M_sls_kNm = M_sls_mz / 1000.0 + V_sls_kN = V_sls_vy / 1000.0 + return DemandEnvelope( Mu_kNm=round(Mu_kNm, 2), Vu_kN=round(Vu_kN, 2), @@ -631,6 +658,8 @@ def _sum_defl(lcs: list) -> float: location="critical element", member=member_name, source="grillage_analysis", + M_sls_kNm=round(M_sls_kNm, 2), + V_sls_kN=round(V_sls_kN, 2), ) @staticmethod diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 877a5494d..9f7800e15 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -677,17 +677,21 @@ def _run_dcr_checks(self, dataset) -> None: print_report=True, ) - dcr_by_id: dict[int, float] = {c.check_id: c.dcr for c in engine.checks} - self._frontend.set_output_value(KEY_UTIL_FLEXURE, dcr_by_id.get(1, 0.0) * 100) - self._frontend.set_output_value(KEY_UTIL_SHEAR, dcr_by_id.get(2, 0.0) * 100) - self._frontend.set_output_value(KEY_UTIL_INTERACTION, dcr_by_id.get(3, 0.0) * 100) - self._frontend.set_output_value(KEY_UTIL_LTB, dcr_by_id.get(4, 0.0) * 100) - defl_dcr = max(dcr_by_id.get(5, 0.0), dcr_by_id.get(6, 0.0)) + dcr_by_id: dict[int, float] = {} + for c in engine.checks: + dcr_by_id[c.check_id] = max(dcr_by_id.get(c.check_id, 0.0), c.dcr) + self._frontend.set_output_value(KEY_UTIL_FLEXURE, dcr_by_id.get(1, 0.0) * 100) + self._frontend.set_output_value(KEY_UTIL_SHEAR, dcr_by_id.get(2, 0.0) * 100) + self._frontend.set_output_value(KEY_UTIL_INTERACTION, dcr_by_id.get(3, 0.0) * 100) + self._frontend.set_output_value(KEY_UTIL_LTB, dcr_by_id.get(5, 0.0) * 100) + defl_dcr = max(dcr_by_id.get(13, 0.0), dcr_by_id.get(14, 0.0), dcr_by_id.get(15, 0.0)) self._frontend.set_output_value(KEY_UTIL_DEFLECTION_CRACK, defl_dcr * 100) - fatigue_dcr = max(dcr_by_id.get(7, 0.0), dcr_by_id.get(8, 0.0)) + fatigue_dcr = max(dcr_by_id.get(8, 0.0), dcr_by_id.get(9, 0.0)) self._frontend.set_output_value(KEY_UTIL_FATIGUE, fatigue_dcr * 100) - self._frontend.set_output_value(KEY_UTIL_LONG_TRANS_SHEAR, 0.0) - self._frontend.set_output_value(KEY_UTIL_STRESS_LIMITATION, 0.0) + trans_shear_dcr = max(dcr_by_id.get(16, 0.0), dcr_by_id.get(17, 0.0)) + self._frontend.set_output_value(KEY_UTIL_LONG_TRANS_SHEAR, trans_shear_dcr * 100) + stress_dcr = max(dcr_by_id.get(10, 0.0), dcr_by_id.get(11, 0.0), dcr_by_id.get(12, 0.0)) + self._frontend.set_output_value(KEY_UTIL_STRESS_LIMITATION, stress_dcr * 100) # ───────────────────────────────────────────────────────────────────────── # Plotting diff --git a/src/osdagbridge/core/utils/codes/irc22_2015.py b/src/osdagbridge/core/utils/codes/irc22_2015.py index 9e91cf729..427b0d2b2 100644 --- a/src/osdagbridge/core/utils/codes/irc22_2015.py +++ b/src/osdagbridge/core/utils/codes/irc22_2015.py @@ -561,7 +561,7 @@ def cl_603_3_3_1_buckling_resistance_moment( Ze, # mm3 fy, # MPa gamma_mo=GAMMA_M0_STEEL, - support="KEY_DISP_SUPPORT1", + support="Simply Supported", Iy=None, # mm4 It=None, # mm4 @@ -609,10 +609,11 @@ def cl_603_3_3_1_buckling_resistance_moment( # ------------------ Step 2: βb ------------------ if section_class in ["plastic", "compact"]: beta_b = 1.0 - elif section_class in ["semi-compact"]: + elif section_class in ["semi-compact", "slender"]: + # Slender webs are common in plate girders; IS 800 Cl.8.2.1.2 limits Md to Ze*fy/γm0 beta_b = Ze / Zp else: - raise ValueError("Buckling check not applicable for slender sections") + raise ValueError(f"Unrecognised section_class '{section_class}'") # ------------------ Step 3: αLT ------------------ alpha_LT = 0.21 if section_type == "rolled" else 0.49 @@ -863,6 +864,7 @@ def cl_603_3_3_3_reduced_bending_under_high_shear( if V_kN <= 0.6 * Vd_kN: return { "Md_kNm": round(Md_kNm, 3), + "Mfd_kNm": round(Mfd_kNm, 3), "Mdv_kNm": round(Md_kNm, 3), "beta": 0.0, "is_reduction_required": False, @@ -2090,15 +2092,15 @@ def cl_606_10_transverse_shear_check( """ - # Convert units where required - VL = VL_kN # kN/m - L = L_mm / 1000.0 # convert mm to metres + # IRC 22:2015 Cl.606.10 formula uses L in mm → result is N/mm ≡ kN/m + VL = VL_kN # kN/m (= N/mm) + L = L_mm # mm (do NOT convert to metres; coefficient 0.632 is calibrated for mm) Ast = Ast_cm2_per_m # cm2/m as required by clause - # Capacity 1 + # Capacity 1 Vcap1 = 0.632 * L * math.sqrt(fck) - # Capacity 2 + # Capacity 2 Vcap2 = 0.232 * L * math.sqrt(fck) + 0.1 * Ast * fyk * n_layers * 1e-3 # Note: 0.1 * Ast * fyk gives kN since Ast in cm2 and fyk MPa From 57ea870c1434bb7e62491b3b1bc7cbdd8b9c927e Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Wed, 6 May 2026 00:18:17 +0530 Subject: [PATCH 177/225] Update cache handling for map and set boundary checkbox to false --- src/osdagbridge/desktop/ui/dialogs/project_location.py | 1 + src/osdagbridge/desktop/ui/widgets/native_map.py | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/project_location.py b/src/osdagbridge/desktop/ui/dialogs/project_location.py index f6fed11ba..75937eda4 100644 --- a/src/osdagbridge/desktop/ui/dialogs/project_location.py +++ b/src/osdagbridge/desktop/ui/dialogs/project_location.py @@ -649,6 +649,7 @@ def _set_active_method(self, method): self.district_combo.setEnabled(False) self.map_view.setEnabled(True) self.irc_title_label.setText("IRC 6 (2017) Values:") + self.boundary_overlay_checkbox.setChecked(False) elif method == "custom_data" and self.method_custom_data.isChecked(): self.method_stack.setCurrentIndex(2) self.code_widget.setVisible(False) diff --git a/src/osdagbridge/desktop/ui/widgets/native_map.py b/src/osdagbridge/desktop/ui/widgets/native_map.py index c7470e795..58219035e 100644 --- a/src/osdagbridge/desktop/ui/widgets/native_map.py +++ b/src/osdagbridge/desktop/ui/widgets/native_map.py @@ -1,10 +1,9 @@ - import math import json from pathlib import Path from functools import lru_cache from PySide6.QtWidgets import QWidget -from PySide6.QtCore import Qt, Signal, QPoint, QPointF, QRect, QRectF, QUrl +from PySide6.QtCore import Qt, Signal, QPoint, QPointF, QRect, QRectF, QUrl, QStandardPaths from PySide6.QtGui import QPainter, QPixmap, QImage, QBrush, QColor, QPen, QMouseEvent, QWheelEvent, QPainterPath from PySide6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkDiskCache, QNetworkReply @@ -13,6 +12,10 @@ SEISMIC_ZONE_IMAGE = _DATA_DIR / "seismic.png" WIND_ZONE_IMAGE = _DATA_DIR / "wind.png" +# Proper temp folder for cache handling +temp_dir = Path(QStandardPaths.writableLocation(QStandardPaths.TempLocation)) / "osdag_map_cache" +temp_dir.mkdir(parents=True, exist_ok=True) + # India bounding box (approximate) for overlay alignment # These are the geographic bounds the overlay images represent INDIA_BOUNDS = { @@ -50,7 +53,7 @@ def __init__(self, parent=None): # Network Manager for fetching tiles self.manager = QNetworkAccessManager(self) self.cache = QNetworkDiskCache(self) - self.cache.setCacheDirectory("osdag_map_cache") + self.cache.setCacheDirectory(str(temp_dir)) self.cache.setMaximumCacheSize(50 * 1024 * 1024) # 50 MB self.manager.setCache(self.cache) From 13c3946916e1bc7407a95025e65880b711ee0d29 Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Thu, 23 Apr 2026 19:00:40 +0530 Subject: [PATCH 178/225] added the toggle button for nodes --- .../bridge_types/plate_girder/analyser.py | 2 +- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 45 ++++++++++++++++++- .../desktop/ui/utils/custom_3dviewer.py | 2 +- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index e82327fc1..64f7d47b1 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -1112,7 +1112,7 @@ def add_vehicle_load_cases_from_combinations(self, model=None): # Add to load case # ----------------------------- lc.add_load( - load=vehicle, + load_obj=vehicle, load_factor=lane_factor ) diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 6f49454cb..809bf9e79 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -3,6 +3,7 @@ from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d.art3d import Path3DCollection # Added for Node toggling from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QComboBox, QSizePolicy, QPushButton @@ -60,8 +61,9 @@ def __init__(self, parent=None): # Set by link_output_dock() self._output_dock = None - # Grillage-only mode + # Display States self._grillage_mode = False + self._show_nodes = True # Track node visibility state # Zoom state self._zoom_scale = 1.0 @@ -110,10 +112,28 @@ def __init__(self, parent=None): ) self._btn_grillage.toggled.connect(self._on_grillage_toggled) + # NEW: nodes toggle button + self._btn_nodes = QPushButton("Nodes") + self._btn_nodes.setCheckable(True) + self._btn_nodes.setChecked(True) # On by default + self._btn_nodes.setFixedHeight(28) + self._btn_nodes.setFocusPolicy(Qt.NoFocus) + self._btn_nodes.setToolTip("Show or hide node markers") + self._btn_nodes.setStyleSheet( + "QPushButton { font-size: 12px; border: 1px solid #bbb; border-radius: 4px;" + " background: #f5f5f5; padding: 0 8px; }" + "QPushButton:hover { background: #e0e0e0; }" + "QPushButton:pressed { background: #bdbdbd; }" + "QPushButton:checked { background: #1565C0; color: white;" + " border: 1px solid #0D47A1; }" + ) + self._btn_nodes.toggled.connect(self._on_nodes_toggled) + toolbar_row = QHBoxLayout() toolbar_row.setContentsMargins(4, 2, 4, 2) toolbar_row.setSpacing(4) toolbar_row.addWidget(self._btn_grillage) + toolbar_row.addWidget(self._btn_nodes) # Added next to Grillage toolbar_row.addStretch() toolbar_row.addWidget(self._btn_zoom_out) toolbar_row.addWidget(self._btn_zoom_in) @@ -212,6 +232,10 @@ def update_plot(self, *_args): self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) + + # Ensure node visibility matches the toggle state on new plots + self._apply_node_visibility() + self._fit_figure_to_canvas() self._canvas.draw() @@ -229,6 +253,10 @@ def _on_grillage_toggled(self, checked: bool): self._fig = build_figure_grillage(self._nodes, self._members) self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) + + # Ensure node visibility matches the toggle state + self._apply_node_visibility() + self._fit_figure_to_canvas() self._canvas.draw() self._zoom_scale = 1.0 @@ -236,6 +264,12 @@ def _on_grillage_toggled(self, checked: bool): else: self.update_plot() + def _on_nodes_toggled(self, checked: bool): + """Instantly toggle the visibility of scatter plot nodes without rebuilding the figure.""" + self._show_nodes = checked + self._apply_node_visibility() + self._canvas.draw_idle() # Updates the canvas instantly + def resizeEvent(self, event): super().resizeEvent(event) self._fit_figure_to_canvas() @@ -243,6 +277,13 @@ def resizeEvent(self, event): # private helpers + def _apply_node_visibility(self): + """Finds all scatter point collections (Path3DCollection) and toggles their visibility.""" + for ax in self._fig.axes: + for collection in ax.collections: + if isinstance(collection, Path3DCollection): + collection.set_visible(self._show_nodes) + def _fit_figure_to_canvas(self): """Resize the matplotlib figure to match the current canvas widget size.""" w_px = self._canvas.width() @@ -318,4 +359,4 @@ def _current_force_key(self) -> str: for rb in self._output_dock.output_widget.findChildren(CustomRadioButton): if rb.isChecked() and rb.text() in _RICH_LABEL_TO_FORCE: return _RICH_LABEL_TO_FORCE[rb.text()] - return "Fy" # fallback + return "Fy" # fallback \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py b/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py index 99727324c..b31f36bc2 100644 --- a/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py +++ b/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py @@ -430,7 +430,7 @@ def display_view_cube(self): def _show_navcube_when_ready(self): self._resize_navcube() self._position_navcube() - self.navcube.mark_ready() + # self.navcube.mark_ready() self.navcube.update() # ------------------------------------------------------------------ From dce2c71073e41d3fc07ea54011500491a6a82941 Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Thu, 23 Apr 2026 19:05:55 +0530 Subject: [PATCH 179/225] added the toggle option for axis --- .../plate_girder/plot_generator.py | 15 +++-- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 55 ++++++++++++++++--- 2 files changed, 55 insertions(+), 15 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index e52ea4ec5..378ec8d2d 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -173,25 +173,28 @@ def _add_coordinate_triad(ax, nodes, scale=0.10): ox, oy, oz = min(xs), 0, min(zs) # triad origin colors = {"X": "#FF4136", "Y": "#2ECC40", "Z": "#0074D9"} + + # We tag these elements so the UI toggle button can easily find and hide them! + tag = "coord_triad" # X arrow (along span) ax.quiver(ox, oz, oy, L, 0, 0, - color=colors["X"], linewidth=2, arrow_length_ratio=0.25, zorder=5) + color=colors["X"], linewidth=2, arrow_length_ratio=0.25, zorder=5, gid=tag) ax.text(ox + L * 1.25, oz, oy, "X", color=colors["X"], - fontsize=9, fontweight="bold", zorder=5) + fontsize=9, fontweight="bold", zorder=5, gid=tag) # Z arrow (along width) — note ax.plot uses (x=span, y=width, z=force) ax.quiver(ox, oz, oy, 0, L, 0, - color=colors["Z"], linewidth=2, arrow_length_ratio=0.25, zorder=5) + color=colors["Z"], linewidth=2, arrow_length_ratio=0.25, zorder=5, gid=tag) ax.text(ox, oz + L * 1.25, oy, "Z", color=colors["Z"], - fontsize=9, fontweight="bold", zorder=5) + fontsize=9, fontweight="bold", zorder=5, gid=tag) # Y arrow (upward = force direction) — scaled by 0.30 to match box_aspect Ly = L * 0.30 ax.quiver(ox, oz, oy, 0, 0, Ly, - color=colors["Y"], linewidth=2, arrow_length_ratio=0.25, zorder=5) + color=colors["Y"], linewidth=2, arrow_length_ratio=0.25, zorder=5, gid=tag) ax.text(ox, oz, oy + Ly * 1.25, "Y", color=colors["Y"], - fontsize=9, fontweight="bold", zorder=5) + fontsize=9, fontweight="bold", zorder=5, gid=tag) # ============================================================================= diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 809bf9e79..c48a1bd84 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -3,7 +3,7 @@ from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg import matplotlib.pyplot as plt -from mpl_toolkits.mplot3d.art3d import Path3DCollection # Added for Node toggling +from mpl_toolkits.mplot3d.art3d import Path3DCollection from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QComboBox, QSizePolicy, QPushButton @@ -63,11 +63,12 @@ def __init__(self, parent=None): # Display States self._grillage_mode = False - self._show_nodes = True # Track node visibility state + self._show_nodes = True + self._show_axis = True # Track axis visibility state # Zoom state self._zoom_scale = 1.0 - self._orig_limits = None # {ax_index: {"x": (lo,hi), "y": ..., "z": ...}} + self._orig_limits = None # matplotlib canvas self._fig = plt.figure(figsize=(14, 6), facecolor="white") @@ -112,10 +113,10 @@ def __init__(self, parent=None): ) self._btn_grillage.toggled.connect(self._on_grillage_toggled) - # NEW: nodes toggle button + # nodes toggle button self._btn_nodes = QPushButton("Nodes") self._btn_nodes.setCheckable(True) - self._btn_nodes.setChecked(True) # On by default + self._btn_nodes.setChecked(True) self._btn_nodes.setFixedHeight(28) self._btn_nodes.setFocusPolicy(Qt.NoFocus) self._btn_nodes.setToolTip("Show or hide node markers") @@ -129,11 +130,29 @@ def __init__(self, parent=None): ) self._btn_nodes.toggled.connect(self._on_nodes_toggled) + # NEW: axis toggle button + self._btn_axis = QPushButton("Axis") + self._btn_axis.setCheckable(True) + self._btn_axis.setChecked(True) + self._btn_axis.setFixedHeight(28) + self._btn_axis.setFocusPolicy(Qt.NoFocus) + self._btn_axis.setToolTip("Show or hide coordinate axis") + self._btn_axis.setStyleSheet( + "QPushButton { font-size: 12px; border: 1px solid #bbb; border-radius: 4px;" + " background: #f5f5f5; padding: 0 8px; }" + "QPushButton:hover { background: #e0e0e0; }" + "QPushButton:pressed { background: #bdbdbd; }" + "QPushButton:checked { background: #1565C0; color: white;" + " border: 1px solid #0D47A1; }" + ) + self._btn_axis.toggled.connect(self._on_axis_toggled) + toolbar_row = QHBoxLayout() toolbar_row.setContentsMargins(4, 2, 4, 2) toolbar_row.setSpacing(4) toolbar_row.addWidget(self._btn_grillage) - toolbar_row.addWidget(self._btn_nodes) # Added next to Grillage + toolbar_row.addWidget(self._btn_nodes) + toolbar_row.addWidget(self._btn_axis) # Added next to Nodes toolbar_row.addStretch() toolbar_row.addWidget(self._btn_zoom_out) toolbar_row.addWidget(self._btn_zoom_in) @@ -233,8 +252,9 @@ def update_plot(self, *_args): self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) - # Ensure node visibility matches the toggle state on new plots + # Ensure toggles match their current state self._apply_node_visibility() + self._apply_axis_visibility() self._fit_figure_to_canvas() self._canvas.draw() @@ -254,8 +274,9 @@ def _on_grillage_toggled(self, checked: bool): self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) - # Ensure node visibility matches the toggle state + # Ensure toggles match their current state self._apply_node_visibility() + self._apply_axis_visibility() self._fit_figure_to_canvas() self._canvas.draw() @@ -268,7 +289,13 @@ def _on_nodes_toggled(self, checked: bool): """Instantly toggle the visibility of scatter plot nodes without rebuilding the figure.""" self._show_nodes = checked self._apply_node_visibility() - self._canvas.draw_idle() # Updates the canvas instantly + self._canvas.draw_idle() + + def _on_axis_toggled(self, checked: bool): + """Instantly toggle the visibility of the XYZ coordinate triad.""" + self._show_axis = checked + self._apply_axis_visibility() + self._canvas.draw_idle() def resizeEvent(self, event): super().resizeEvent(event) @@ -284,6 +311,16 @@ def _apply_node_visibility(self): if isinstance(collection, Path3DCollection): collection.set_visible(self._show_nodes) + def _apply_axis_visibility(self): + """Finds all collections and text tagged as 'coord_triad' and toggles them.""" + for ax in self._fig.axes: + for collection in ax.collections: + if collection.get_gid() == "coord_triad": + collection.set_visible(self._show_axis) + for text in ax.texts: + if text.get_gid() == "coord_triad": + text.set_visible(self._show_axis) + def _fit_figure_to_canvas(self): """Resize the matplotlib figure to match the current canvas widget size.""" w_px = self._canvas.width() From f29f434382ae8a529efd1a42dd14d60754629b9b Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Thu, 23 Apr 2026 19:17:33 +0530 Subject: [PATCH 180/225] added supports --- .../plate_girder/plot_generator.py | 32 +++++ src/osdagbridge/desktop/ui/mpl_plot_widget.py | 132 +++++++----------- 2 files changed, 81 insertions(+), 83 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index 378ec8d2d..186493e2c 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -195,6 +195,33 @@ def _add_coordinate_triad(ax, nodes, scale=0.10): color=colors["Y"], linewidth=2, arrow_length_ratio=0.25, zorder=5, gid=tag) ax.text(ox, oz, oy + Ly * 1.25, "Y", color=colors["Y"], fontsize=9, fontweight="bold", zorder=5, gid=tag) + +def _add_supports(ax, nodes, members): + """Draw pin (diamond) and roller (circle) supports at the ends of girders.""" + girders = _find_girders(nodes, members) + pin_x, pin_z = [], [] + rol_x, rol_z = [], [] + + for z_val, elems in girders.items(): + if not elems: continue + n_left = members[elems[0]][0] + n_right = members[elems[-1]][1] + + pin_x.append(nodes[n_left][0]) + pin_z.append(nodes[n_left][2]) + + rol_x.append(nodes[n_right][0]) + rol_z.append(nodes[n_right][2]) + + # Pinned supports (Left side) -> Green Diamond (Matches Plotly!) + ax.scatter(pin_x, pin_z, np.zeros_like(pin_x), marker='D', s=70, + color='#7CB342', edgecolors='black', linewidths=1.5, + zorder=6, depthshade=False, gid="supports") + + # Roller supports (Right side) -> Yellow Circle (Matches Plotly!) + ax.scatter(rol_x, rol_z, np.zeros_like(rol_x), marker='o', s=70, + color='#FBC02D', edgecolors='black', linewidths=1.5, + zorder=6, depthshade=False, gid="supports") # ============================================================================= @@ -228,6 +255,7 @@ def build_figure_grillage(nodes, members): _add_grillage_background(ax, nodes, members) _add_coordinate_triad(ax, nodes) + _add_supports(ax, nodes, members) # Draw node markers xs = [coord[0] for coord in nodes.values()] @@ -292,6 +320,7 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): _add_grillage_background(ax, nodes, members) _add_coordinate_triad(ax, nodes) + _add_supports(ax, nodes, members) shear_color = "#1565C0" fill_color = "#90CAF9" @@ -439,6 +468,7 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): _add_grillage_background(ax, nodes, members) _add_coordinate_triad(ax, nodes) + _add_supports(ax, nodes, members) moment_color = "#C62828" fill_color = "#EF9A9A" @@ -597,6 +627,7 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): _add_grillage_background(ax, nodes, members) _add_coordinate_triad(ax, nodes) + _add_supports(ax, nodes, members) base_color = "#388E3C" @@ -717,6 +748,7 @@ def build_figure_deflection(ds, disp_key, nodes, members, edge_dist=0.0): _add_grillage_background(ax, nodes, members) _add_coordinate_triad(ax, nodes) + _add_supports(ax, nodes, members) defl_color = "#6A1B9A" # deep purple fill_color = "#CE93D8" # light purple diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index c48a1bd84..50d17d3e2 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -42,10 +42,7 @@ class MplPlotWidget(QWidget): """ PySide6 widget that renders matplotlib analysis plots. - - Controls (load-case combo + force radio buttons) live in the OutputDock. - Call setup() after bridge.design() completes, then link_output_dock() to - wire the dock controls to this widget. + Controls live in the OutputDock. """ def __init__(self, parent=None): @@ -57,14 +54,13 @@ def __init__(self, parent=None): self._nodes = {} self._members = {} self._edge_dist = 0.0 - - # Set by link_output_dock() self._output_dock = None # Display States self._grillage_mode = False self._show_nodes = True - self._show_axis = True # Track axis visibility state + self._show_axis = True + self._show_supports = True # NEW: Track support visibility # Zoom state self._zoom_scale = 1.0 @@ -90,20 +86,12 @@ def __init__(self, parent=None): "QPushButton:hover { background: #e0e0e0; }" "QPushButton:pressed { background: #bdbdbd; }" ) - self._btn_zoom_in.setToolTip("Zoom In") - self._btn_zoom_out.setToolTip("Zoom Out") - self._btn_zoom_reset.setToolTip("Reset Zoom") self._btn_zoom_in.clicked.connect(self._zoom_in) self._btn_zoom_out.clicked.connect(self._zoom_out) self._btn_zoom_reset.clicked.connect(self._zoom_reset) - # grillage toggle button - self._btn_grillage = QPushButton("Grillage") - self._btn_grillage.setCheckable(True) - self._btn_grillage.setFixedHeight(28) - self._btn_grillage.setFocusPolicy(Qt.NoFocus) - self._btn_grillage.setToolTip("Show bridge grillage only") - self._btn_grillage.setStyleSheet( + # TOOBAR BUTTONS + btn_style = ( "QPushButton { font-size: 12px; border: 1px solid #bbb; border-radius: 4px;" " background: #f5f5f5; padding: 0 8px; }" "QPushButton:hover { background: #e0e0e0; }" @@ -111,48 +99,46 @@ def __init__(self, parent=None): "QPushButton:checked { background: #1565C0; color: white;" " border: 1px solid #0D47A1; }" ) + + self._btn_grillage = QPushButton("Grillage") + self._btn_grillage.setCheckable(True) + self._btn_grillage.setFixedHeight(28) + self._btn_grillage.setFocusPolicy(Qt.NoFocus) + self._btn_grillage.setStyleSheet(btn_style) self._btn_grillage.toggled.connect(self._on_grillage_toggled) - # nodes toggle button self._btn_nodes = QPushButton("Nodes") self._btn_nodes.setCheckable(True) self._btn_nodes.setChecked(True) self._btn_nodes.setFixedHeight(28) self._btn_nodes.setFocusPolicy(Qt.NoFocus) - self._btn_nodes.setToolTip("Show or hide node markers") - self._btn_nodes.setStyleSheet( - "QPushButton { font-size: 12px; border: 1px solid #bbb; border-radius: 4px;" - " background: #f5f5f5; padding: 0 8px; }" - "QPushButton:hover { background: #e0e0e0; }" - "QPushButton:pressed { background: #bdbdbd; }" - "QPushButton:checked { background: #1565C0; color: white;" - " border: 1px solid #0D47A1; }" - ) + self._btn_nodes.setStyleSheet(btn_style) self._btn_nodes.toggled.connect(self._on_nodes_toggled) - # NEW: axis toggle button self._btn_axis = QPushButton("Axis") self._btn_axis.setCheckable(True) self._btn_axis.setChecked(True) self._btn_axis.setFixedHeight(28) self._btn_axis.setFocusPolicy(Qt.NoFocus) - self._btn_axis.setToolTip("Show or hide coordinate axis") - self._btn_axis.setStyleSheet( - "QPushButton { font-size: 12px; border: 1px solid #bbb; border-radius: 4px;" - " background: #f5f5f5; padding: 0 8px; }" - "QPushButton:hover { background: #e0e0e0; }" - "QPushButton:pressed { background: #bdbdbd; }" - "QPushButton:checked { background: #1565C0; color: white;" - " border: 1px solid #0D47A1; }" - ) + self._btn_axis.setStyleSheet(btn_style) self._btn_axis.toggled.connect(self._on_axis_toggled) + # NEW: supports toggle button + self._btn_supports = QPushButton("Supports") + self._btn_supports.setCheckable(True) + self._btn_supports.setChecked(True) + self._btn_supports.setFixedHeight(28) + self._btn_supports.setFocusPolicy(Qt.NoFocus) + self._btn_supports.setStyleSheet(btn_style) + self._btn_supports.toggled.connect(self._on_supports_toggled) + toolbar_row = QHBoxLayout() toolbar_row.setContentsMargins(4, 2, 4, 2) toolbar_row.setSpacing(4) toolbar_row.addWidget(self._btn_grillage) toolbar_row.addWidget(self._btn_nodes) - toolbar_row.addWidget(self._btn_axis) # Added next to Nodes + toolbar_row.addWidget(self._btn_supports) # Added Supports + toolbar_row.addWidget(self._btn_axis) toolbar_row.addStretch() toolbar_row.addWidget(self._btn_zoom_out) toolbar_row.addWidget(self._btn_zoom_in) @@ -169,10 +155,6 @@ def __init__(self, parent=None): def setup(self, ds_all, loadcases: list, nodes: dict, members: dict, edge_dist: float = 0.0): - """ - Store analysis results. Does NOT redraw - call link_output_dock() - (or update_plot() directly) after this. - """ self._ds_all = ds_all self._loadcases = list(loadcases) self._nodes = nodes @@ -180,15 +162,8 @@ def setup(self, ds_all, loadcases: list, nodes: dict, members: dict, self._edge_dist = edge_dist def link_output_dock(self, output_dock): - """ - Wire the OutputDock's load-combination combobox and force checkboxes - to this widget, populate them with live data, and draw the first plot. - - Call once after setup() completes. - """ self._output_dock = output_dock - # populate & connect load-combination combobox combo_lc = output_dock.output_widget.findChild( QComboBox, "analysis.load_combination" ) @@ -197,14 +172,10 @@ def link_output_dock(self, output_dock): combo_lc.clear() combo_lc.addItems(self._loadcases) combo_lc.blockSignals(False) - # Prevent long item text from widening the dock - combo_lc.setSizeAdjustPolicy( - QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon - ) + combo_lc.setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon) combo_lc.setMinimumContentsLength(12) combo_lc.currentTextChanged.connect(self.update_plot) - # pre-check default force + connect all force radio buttons from osdagbridge.desktop.ui.utils.custom_widgets import CustomRadioButton force_rbs = [ rb for rb in output_dock.output_widget.findChildren(CustomRadioButton) @@ -217,7 +188,6 @@ def link_output_dock(self, output_dock): self.update_plot() def update_plot(self, *_args): - """Rebuild and redraw the current figure from the OutputDock controls.""" if self._grillage_mode: return @@ -234,20 +204,11 @@ def update_plot(self, *_args): plt.close(self._fig) if force_key in _SFD_KEYS: - self._fig = build_figure_sfd( - ds, force_key, self._nodes, self._members, - edge_dist=self._edge_dist - ) + self._fig = build_figure_sfd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) elif force_key in _DEFL_KEYS: - self._fig = build_figure_deflection( - ds, force_key, self._nodes, self._members, - edge_dist=self._edge_dist - ) + self._fig = build_figure_deflection(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) else: - self._fig, _ = build_figure_bmd( - ds, force_key, self._nodes, self._members, - edge_dist=self._edge_dist - ) + self._fig, _ = build_figure_bmd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) @@ -255,16 +216,15 @@ def update_plot(self, *_args): # Ensure toggles match their current state self._apply_node_visibility() self._apply_axis_visibility() + self._apply_supports_visibility() self._fit_figure_to_canvas() self._canvas.draw() - # reset zoom and capture fresh axis limits self._zoom_scale = 1.0 self._store_orig_limits() def _on_grillage_toggled(self, checked: bool): - """Show grillage-only plot when checked; restore force diagram when unchecked.""" self._grillage_mode = checked if checked: if not self._nodes: @@ -274,9 +234,9 @@ def _on_grillage_toggled(self, checked: bool): self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) - # Ensure toggles match their current state self._apply_node_visibility() self._apply_axis_visibility() + self._apply_supports_visibility() self._fit_figure_to_canvas() self._canvas.draw() @@ -286,17 +246,21 @@ def _on_grillage_toggled(self, checked: bool): self.update_plot() def _on_nodes_toggled(self, checked: bool): - """Instantly toggle the visibility of scatter plot nodes without rebuilding the figure.""" self._show_nodes = checked self._apply_node_visibility() self._canvas.draw_idle() def _on_axis_toggled(self, checked: bool): - """Instantly toggle the visibility of the XYZ coordinate triad.""" self._show_axis = checked self._apply_axis_visibility() self._canvas.draw_idle() + def _on_supports_toggled(self, checked: bool): + """Instantly toggle the visibility of the structural supports.""" + self._show_supports = checked + self._apply_supports_visibility() + self._canvas.draw_idle() + def resizeEvent(self, event): super().resizeEvent(event) self._fit_figure_to_canvas() @@ -305,14 +269,22 @@ def resizeEvent(self, event): # private helpers def _apply_node_visibility(self): - """Finds all scatter point collections (Path3DCollection) and toggles their visibility.""" + """Finds all scatter point collections and toggles them, EXCLUDING supports.""" for ax in self._fig.axes: for collection in ax.collections: if isinstance(collection, Path3DCollection): - collection.set_visible(self._show_nodes) + # Do not touch the supports here! + if collection.get_gid() != "supports": + collection.set_visible(self._show_nodes) + + def _apply_supports_visibility(self): + """Finds all collections tagged as 'supports' and toggles them.""" + for ax in self._fig.axes: + for collection in ax.collections: + if collection.get_gid() == "supports": + collection.set_visible(self._show_supports) def _apply_axis_visibility(self): - """Finds all collections and text tagged as 'coord_triad' and toggles them.""" for ax in self._fig.axes: for collection in ax.collections: if collection.get_gid() == "coord_triad": @@ -322,7 +294,6 @@ def _apply_axis_visibility(self): text.set_visible(self._show_axis) def _fit_figure_to_canvas(self): - """Resize the matplotlib figure to match the current canvas widget size.""" w_px = self._canvas.width() h_px = self._canvas.height() if w_px > 10 and h_px > 10: @@ -330,7 +301,6 @@ def _fit_figure_to_canvas(self): self._fig.set_size_inches(w_px / dpi, h_px / dpi, forward=False) def _store_orig_limits(self): - """Snapshot current 3-D axis limits so zoom can scale relative to them.""" self._orig_limits = {} for i, ax in enumerate(self._fig.axes): if hasattr(ax, "get_zlim"): @@ -341,7 +311,6 @@ def _store_orig_limits(self): } def _apply_zoom(self): - """Scale each 3-D axis uniformly around its centre by _zoom_scale.""" if not self._orig_limits: return for i, ax in enumerate(self._fig.axes): @@ -360,7 +329,6 @@ def _apply_zoom(self): self._canvas.draw_idle() def eventFilter(self, obj, event): - """Intercept scroll wheel on the canvas to zoom.""" if obj is self._canvas and event.type() == QEvent.Type.Wheel: delta = event.angleDelta().y() if delta > 0: @@ -368,7 +336,7 @@ def eventFilter(self, obj, event): else: self._zoom_scale = min(self._zoom_scale * 1.25, 20.0) self._apply_zoom() - return True # consume — prevent parent scroll area from scrolling + return True return super().eventFilter(obj, event) def _zoom_in(self): @@ -384,16 +352,14 @@ def _zoom_reset(self): self._apply_zoom() def _current_loadcase(self) -> str: - """Read the selected load case from the OutputDock combobox.""" combo = self._output_dock.output_widget.findChild( QComboBox, "analysis.load_combination" ) return combo.currentText() if combo else (self._loadcases[0] if self._loadcases else "") def _current_force_key(self) -> str: - """Return the FORCE_MAP key for the currently checked force radio button.""" from osdagbridge.desktop.ui.utils.custom_widgets import CustomRadioButton for rb in self._output_dock.output_widget.findChildren(CustomRadioButton): if rb.isChecked() and rb.text() in _RICH_LABEL_TO_FORCE: return _RICH_LABEL_TO_FORCE[rb.text()] - return "Fy" # fallback \ No newline at end of file + return "Fy" \ No newline at end of file From 631906890b19e19d5dd86322cefa9c716577848f Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Thu, 23 Apr 2026 19:22:36 +0530 Subject: [PATCH 181/225] moved the girder labels to the right --- .../bridge_types/plate_girder/plot_generator.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index 186493e2c..0d97adf90 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -360,9 +360,9 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): color=base_color, s=18, zorder=4, depthshade=False) # girder label - ax.text(xs[0], z_base, 0, f" {girder_name}", + ax.text(xs[0] - (x_range * 0.02), z_base, 0, f"{girder_name}", color="black", fontsize=11, fontweight="normal", - ha="left", va="bottom", zorder=6, + ha="right", va="center", zorder=6, bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) @@ -504,9 +504,9 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): color=base_color, s=18, zorder=4, depthshade=False) # girder label - ax.text(xs[0], z_base, 0, f" {girder_name}", + ax.text(xs[0] - (x_range * 0.02), z_base, 0, f"{girder_name}", color="black", fontsize=11, fontweight="normal", - ha="left", va="bottom", zorder=6, + ha="right", va="center", zorder=6, bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) @@ -652,9 +652,9 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): continue # girder label - ax.text(xs[0], z_base, 0, f" {girder_name}", + ax.text(xs[0] - (x_range * 0.02), z_base, 0, f"{girder_name}", color="black", fontsize=11, fontweight="normal", - ha="left", va="bottom", zorder=6, + ha="right", va="center", zorder=6, bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) @@ -805,9 +805,9 @@ def _get(n, _comp=actual_comp): color=base_color, s=18, zorder=4, depthshade=False) # girder label - ax.text(xs[0], z_base, 0, f" {girder_name}", + ax.text(xs[0] - (x_range * 0.02), z_base, 0, f"{girder_name}", color="black", fontsize=11, fontweight="normal", - ha="left", va="bottom", zorder=6, + ha="right", va="center", zorder=6, bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) From c61fe342b140c40059cdb0b7efe6823f63401314 Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Thu, 23 Apr 2026 19:52:09 +0530 Subject: [PATCH 182/225] added the summary table and the hide grid lines toggle --- .../desktop/ui/docks/output_dock.py | 18 +- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 164 +++++++++++++++--- 2 files changed, 156 insertions(+), 26 deletions(-) diff --git a/src/osdagbridge/desktop/ui/docks/output_dock.py b/src/osdagbridge/desktop/ui/docks/output_dock.py index 31118107c..2c3476514 100644 --- a/src/osdagbridge/desktop/ui/docks/output_dock.py +++ b/src/osdagbridge/desktop/ui/docks/output_dock.py @@ -596,4 +596,20 @@ def open_steel_design(self): def open_deck_design(self): from osdagbridge.desktop.ui.dialogs.deck_design import DeckDesign - DeckDesign(parent=self.parent).exec() \ No newline at end of file + DeckDesign(parent=self.parent).exec() + + # ── Checkbox Interfaces ────────────────────────────────────────────── + + def get_checkbox_state(self, label: str) -> bool: + """Returns True if the checkbox with the exact label is checked.""" + for cb in self.output_widget.findChildren(QCheckBox): + if cb.text() == label: + return cb.isChecked() + return False + + def connect_checkbox_signal(self, label: str, callback): + """Connects a callback function to a checkbox toggle event.""" + for cb in self.output_widget.findChildren(QCheckBox): + if cb.text() == label: + # Use a lambda to absorb the boolean argument and call the callback + cb.toggled.connect(lambda _: callback()) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 50d17d3e2..8a6fdfc6f 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -6,7 +6,8 @@ from mpl_toolkits.mplot3d.art3d import Path3DCollection from PySide6.QtWidgets import ( - QWidget, QVBoxLayout, QHBoxLayout, QComboBox, QSizePolicy, QPushButton + QWidget, QVBoxLayout, QHBoxLayout, QComboBox, QSizePolicy, QPushButton, + QFrame, QLabel, QCheckBox ) from PySide6.QtCore import Qt, QEvent @@ -39,12 +40,65 @@ _DEFAULT_FORCE_LABEL = "Vy" # pre-checked on first link -class MplPlotWidget(QWidget): - """ - PySide6 widget that renders matplotlib analysis plots. - Controls live in the OutputDock. - """ +# ============================================================================= +# PROFESSIONAL SUMMARY OVERLAY WIDGET (HTML/RichText based) +# ============================================================================= +class SummaryOverlay(QFrame): + """A floating HUD that sits on top of the Matplotlib canvas.""" + def __init__(self, parent=None): + super().__init__(parent) + self.setStyleSheet(""" + SummaryOverlay { + background-color: rgba(33, 37, 43, 215); + border: 1px solid rgba(255, 255, 255, 50); + border-radius: 6px; + } + QLabel { + color: white; + font-size: 13px; + font-family: Consolas, 'Courier New', monospace; + padding: 12px; + background: transparent; + } + """) + + layout = QVBoxLayout(self) + layout.setContentsMargins(0, 0, 0, 0) + + # Use a single RichText label exactly like the Plotly HUD! + self.text_label = QLabel() + self.text_label.setTextFormat(Qt.RichText) + self.text_label.setAlignment(Qt.AlignLeft | Qt.AlignTop) + layout.addWidget(self.text_label) + + def update_data(self, summary_data): + """Populates the HUD using precise HTML monospace formatting.""" + # Header setup + hud_text = "Extreme Values Summary
" + "-" * 38 + "
" + + h_girder = "Girder".ljust(8).replace(" ", " ") + h_max = "Max".rjust(10).replace(" ", " ") + h_min = "Min".rjust(12).replace(" ", " ") + + # Red for Max, Cyan for Min + hud_text += f"{h_girder} | {h_max} | {h_min}
" + "-" * 38 + "
" + + # Data rows + for girder, vals in summary_data.items(): + g_str = girder.ljust(8).replace(" ", " ") + max_str = f"{vals['max']:.2f}".rjust(10).replace(" ", " ") + min_str = f"{vals['min']:.2f}".rjust(12).replace(" ", " ") + + hud_text += f"{g_str} | {max_str} | {min_str}
" + + self.text_label.setText(hud_text) + self.adjustSize() + +# ============================================================================= +# MAIN PLOT WIDGET +# ============================================================================= +class MplPlotWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) @@ -55,12 +109,15 @@ def __init__(self, parent=None): self._members = {} self._edge_dist = 0.0 self._output_dock = None + self._summary_data = {} # Display States self._grillage_mode = False self._show_nodes = True self._show_axis = True - self._show_supports = True # NEW: Track support visibility + self._show_supports = True + self._show_grid = True # NEW: Track grid visibility + self._is_summary_checked = False # Zoom state self._zoom_scale = 1.0 @@ -73,6 +130,10 @@ def __init__(self, parent=None): self._canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self._canvas.installEventFilter(self) + # Initialize the Summary Overlay (Hidden by default) + self._summary_overlay = SummaryOverlay(self._canvas) + self._summary_overlay.hide() + # zoom toolbar self._btn_zoom_in = QPushButton("+") self._btn_zoom_out = QPushButton("−") @@ -115,6 +176,14 @@ def __init__(self, parent=None): self._btn_nodes.setStyleSheet(btn_style) self._btn_nodes.toggled.connect(self._on_nodes_toggled) + self._btn_supports = QPushButton("Supports") + self._btn_supports.setCheckable(True) + self._btn_supports.setChecked(True) + self._btn_supports.setFixedHeight(28) + self._btn_supports.setFocusPolicy(Qt.NoFocus) + self._btn_supports.setStyleSheet(btn_style) + self._btn_supports.toggled.connect(self._on_supports_toggled) + self._btn_axis = QPushButton("Axis") self._btn_axis.setCheckable(True) self._btn_axis.setChecked(True) @@ -123,22 +192,23 @@ def __init__(self, parent=None): self._btn_axis.setStyleSheet(btn_style) self._btn_axis.toggled.connect(self._on_axis_toggled) - # NEW: supports toggle button - self._btn_supports = QPushButton("Supports") - self._btn_supports.setCheckable(True) - self._btn_supports.setChecked(True) - self._btn_supports.setFixedHeight(28) - self._btn_supports.setFocusPolicy(Qt.NoFocus) - self._btn_supports.setStyleSheet(btn_style) - self._btn_supports.toggled.connect(self._on_supports_toggled) + # NEW: Grid toggle button + self._btn_grid = QPushButton("Grid") + self._btn_grid.setCheckable(True) + self._btn_grid.setChecked(True) + self._btn_grid.setFixedHeight(28) + self._btn_grid.setFocusPolicy(Qt.NoFocus) + self._btn_grid.setStyleSheet(btn_style) + self._btn_grid.toggled.connect(self._on_grid_toggled) toolbar_row = QHBoxLayout() toolbar_row.setContentsMargins(4, 2, 4, 2) toolbar_row.setSpacing(4) toolbar_row.addWidget(self._btn_grillage) toolbar_row.addWidget(self._btn_nodes) - toolbar_row.addWidget(self._btn_supports) # Added Supports + toolbar_row.addWidget(self._btn_supports) toolbar_row.addWidget(self._btn_axis) + toolbar_row.addWidget(self._btn_grid) # Added Grid button toolbar_row.addStretch() toolbar_row.addWidget(self._btn_zoom_out) toolbar_row.addWidget(self._btn_zoom_in) @@ -164,9 +234,8 @@ def setup(self, ds_all, loadcases: list, nodes: dict, members: dict, def link_output_dock(self, output_dock): self._output_dock = output_dock - combo_lc = output_dock.output_widget.findChild( - QComboBox, "analysis.load_combination" - ) + # 1. Connect Load Combinations + combo_lc = output_dock.output_widget.findChild(QComboBox, "analysis.load_combination") if combo_lc is not None: combo_lc.blockSignals(True) combo_lc.clear() @@ -176,6 +245,7 @@ def link_output_dock(self, output_dock): combo_lc.setMinimumContentsLength(12) combo_lc.currentTextChanged.connect(self.update_plot) + # 2. Connect Force Radios from osdagbridge.desktop.ui.utils.custom_widgets import CustomRadioButton force_rbs = [ rb for rb in output_dock.output_widget.findChildren(CustomRadioButton) @@ -185,6 +255,10 @@ def link_output_dock(self, output_dock): rb.setChecked(rb.text() == _DEFAULT_FORCE_LABEL) rb.toggled.connect(self.update_plot) + # 3. Connect Display Options (Summary HUD) + output_dock.connect_checkbox_signal("Summary", self._on_summary_toggled) + self._is_summary_checked = output_dock.get_checkbox_state("Summary") + self.update_plot() def update_plot(self, *_args): @@ -202,21 +276,33 @@ def update_plot(self, *_args): ds = self._ds_all.sel(Loadcase=loadcase) plt.close(self._fig) + + self._summary_data = {} if force_key in _SFD_KEYS: self._fig = build_figure_sfd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) elif force_key in _DEFL_KEYS: self._fig = build_figure_deflection(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) else: - self._fig, _ = build_figure_bmd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) + self._fig, self._summary_data = build_figure_bmd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) - # Ensure toggles match their current state + # Apply visual states self._apply_node_visibility() self._apply_axis_visibility() self._apply_supports_visibility() + self._apply_grid_visibility() # Ensure grid matches toggle state + + # Update HUD + if self._summary_data: + self._summary_overlay.update_data(self._summary_data) + if self._is_summary_checked: + self._summary_overlay.show() + self._summary_overlay.raise_() + else: + self._summary_overlay.hide() self._fit_figure_to_canvas() self._canvas.draw() @@ -224,6 +310,18 @@ def update_plot(self, *_args): self._zoom_scale = 1.0 self._store_orig_limits() + def _on_summary_toggled(self): + if self._output_dock is None: + return + + self._is_summary_checked = self._output_dock.get_checkbox_state("Summary") + + if self._is_summary_checked and self._summary_data: + self._summary_overlay.show() + self._summary_overlay.raise_() + else: + self._summary_overlay.hide() + def _on_grillage_toggled(self, checked: bool): self._grillage_mode = checked if checked: @@ -237,6 +335,8 @@ def _on_grillage_toggled(self, checked: bool): self._apply_node_visibility() self._apply_axis_visibility() self._apply_supports_visibility() + self._apply_grid_visibility() + self._summary_overlay.hide() self._fit_figure_to_canvas() self._canvas.draw() @@ -256,29 +356,33 @@ def _on_axis_toggled(self, checked: bool): self._canvas.draw_idle() def _on_supports_toggled(self, checked: bool): - """Instantly toggle the visibility of the structural supports.""" self._show_supports = checked self._apply_supports_visibility() self._canvas.draw_idle() + def _on_grid_toggled(self, checked: bool): + """Instantly toggle the visibility of the Matplotlib grid lines.""" + self._show_grid = checked + self._apply_grid_visibility() + self._canvas.draw_idle() + def resizeEvent(self, event): super().resizeEvent(event) self._fit_figure_to_canvas() self._canvas.draw_idle() + if self._summary_overlay: + self._summary_overlay.move(15, 15) # private helpers def _apply_node_visibility(self): - """Finds all scatter point collections and toggles them, EXCLUDING supports.""" for ax in self._fig.axes: for collection in ax.collections: if isinstance(collection, Path3DCollection): - # Do not touch the supports here! if collection.get_gid() != "supports": collection.set_visible(self._show_nodes) def _apply_supports_visibility(self): - """Finds all collections tagged as 'supports' and toggles them.""" for ax in self._fig.axes: for collection in ax.collections: if collection.get_gid() == "supports": @@ -293,6 +397,16 @@ def _apply_axis_visibility(self): if text.get_gid() == "coord_triad": text.set_visible(self._show_axis) + def _apply_grid_visibility(self): + """Applies the grid visibility state to all 3D axes.""" + for ax in self._fig.axes: + if self._show_grid: + # Turn on and restore the custom styling + ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) + else: + # Turn off the grid lines + ax.grid(False) + def _fit_figure_to_canvas(self): w_px = self._canvas.width() h_px = self._canvas.height() From 4c71d9e1a35798c7460fe6d10a7522f7e5c525b9 Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Thu, 23 Apr 2026 21:27:10 +0530 Subject: [PATCH 183/225] added units of bridge width/span lenghth --- .../core/bridge_types/plate_girder/plot_generator.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index 0d97adf90..893e19ba0 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -24,10 +24,11 @@ "Mz": ("Mz_i", "Mz_j"), } +# Human-readable labels shown in plot titles / axis labels # Human-readable labels shown in plot titles / axis labels FORCE_DISPLAY = { - "Fx": "Vx", "Fy": "Vy", "Fz": "Vz", - "Mx": "Mx", "My": "My", "Mz": "Mz", + "Fx": "V$_x$", "Fy": "V$_y$", "Fz": "V$_z$", + "Mx": "M$_x$", "My": "M$_y$", "Mz": "M$_z$", } # Displacement component map key → component name in ds["displacements"] @@ -38,7 +39,7 @@ } DISP_DISPLAY = { - "Dx": "Dx", "Dy": "Dy", "Dz": "Dz", + "Dx": "D$_x$", "Dy": "D$_y$", "Dz": "D$_z$", } # View settings (elevation/azimuth for a near-front-elevation look) @@ -410,8 +411,8 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) - ax.set_xlabel("Span Length", fontsize=10, labelpad=8) - ax.set_ylabel("Bridge Width", fontsize=10, labelpad=8) + ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) + ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel(f"{disp_key} (kN, scaled)", fontsize=10, labelpad=8) ax.set_title(f"Shear Force Diagram — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) From 3eca7c5593577d15ca563d6983fa8875a539846b Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Tue, 28 Apr 2026 19:35:34 +0530 Subject: [PATCH 184/225] removed supports from edge beams, implemented the all button --- .../plate_girder/plot_generator.py | 52 ++++++++--- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 89 +++++++++++++------ 2 files changed, 103 insertions(+), 38 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index 893e19ba0..a6f6bdce6 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -197,14 +197,23 @@ def _add_coordinate_triad(ax, nodes, scale=0.10): ax.text(ox, oz, oy + Ly * 1.25, "Y", color=colors["Y"], fontsize=9, fontweight="bold", zorder=5, gid=tag) -def _add_supports(ax, nodes, members): +def _add_supports(ax, nodes, members, edge_dist=0.0): """Draw pin (diamond) and roller (circle) supports at the ends of girders.""" girders = _find_girders(nodes, members) + girder_items = list(girders.items()) + n_girders = len(girder_items) + pin_x, pin_z = [], [] rol_x, rol_z = [], [] - for z_val, elems in girders.items(): + for i, (z_val, elems) in enumerate(girder_items): if not elems: continue + + # Skip placing supports on edge beams if an overhang exists! + is_edge_beam = edge_dist > 0 and (i == 0 or i == n_girders - 1) + if is_edge_beam: + continue + n_left = members[elems[0]][0] n_right = members[elems[-1]][1] @@ -214,12 +223,12 @@ def _add_supports(ax, nodes, members): rol_x.append(nodes[n_right][0]) rol_z.append(nodes[n_right][2]) - # Pinned supports (Left side) -> Green Diamond (Matches Plotly!) + # Pinned supports (Left side) -> Green Diamond ax.scatter(pin_x, pin_z, np.zeros_like(pin_x), marker='D', s=70, color='#7CB342', edgecolors='black', linewidths=1.5, zorder=6, depthshade=False, gid="supports") - # Roller supports (Right side) -> Yellow Circle (Matches Plotly!) + # Roller supports (Right side) -> Yellow Circle ax.scatter(rol_x, rol_z, np.zeros_like(rol_x), marker='o', s=70, color='#FBC02D', edgecolors='black', linewidths=1.5, zorder=6, depthshade=False, gid="supports") @@ -321,7 +330,7 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): _add_grillage_background(ax, nodes, members) _add_coordinate_triad(ax, nodes) - _add_supports(ax, nodes, members) + _add_supports(ax, nodes, members, edge_dist=edge_dist) shear_color = "#1565C0" fill_color = "#90CAF9" @@ -392,6 +401,8 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): for xi, vyi in zip(xs, Vy): ax.plot([xi, xi], [z_base, z_base], [0, vyi * shear_scale], color=shear_color, linewidth=1.2, alpha=0.7, zorder=3) + for xi, vyi in zip(xs, Vy): + ax.text(xi, z_base, vyi * shear_scale, f" {vyi:.2f}", color="#666666", fontsize=6, zorder=5, gid="all_vals") sc = ax.scatter(xs, z_arr, Vy * shear_scale, color=shear_color, s=30, zorder=5, depthshade=False) @@ -469,7 +480,7 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): _add_grillage_background(ax, nodes, members) _add_coordinate_triad(ax, nodes) - _add_supports(ax, nodes, members) + _add_supports(ax, nodes, members, edge_dist=edge_dist) moment_color = "#C62828" fill_color = "#EF9A9A" @@ -528,11 +539,24 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): ax.plot(xs, z_arr, y_plot, color=moment_color, linewidth=2.0, zorder=4) + # Max line (Dashed, Tagged for toggling) idx_max = int(np.argmax(Mz)) ax.plot([xs[idx_max], xs[idx_max]], [z_base, z_base], [0, y_plot[idx_max]], - color="#FF4136", linewidth=1.5, zorder=3) + color="#FF4136", linewidth=1.5, linestyle="--", zorder=3, gid="max_line") + # Bold Dark Grey Text ax.text(xs[idx_max], z_base, y_plot[idx_max], - f" {-Mz[idx_max]:.2f} kNm", color="#FF4136", fontsize=7, zorder=6) + f" {-Mz[idx_max]:.2f}", color="#333333", fontsize=8, fontweight="bold", zorder=6, gid="max_line") + + # Min line (Dashed, Tagged for toggling) + idx_min = int(np.argmin(Mz)) + ax.plot([xs[idx_min], xs[idx_min]], [z_base, z_base], [0, y_plot[idx_min]], + color="#0074D9", linewidth=1.5, linestyle="--", zorder=3, gid="min_line") + ax.text(xs[idx_min], z_base, y_plot[idx_min], + f" {-Mz[idx_min]:.2f}", color="#333333", fontsize=8, fontweight="bold", zorder=6, gid="min_line") + + # 'All' values annotations (Slightly lighter grey, Tagged for toggling) + for xi, yi, mzi in zip(xs, y_plot, Mz): + ax.text(xi, z_base, yi, f" {-mzi:.2f}", color="#555555", fontsize=7, zorder=5, gid="all_vals") sc = ax.scatter(xs, z_arr, y_plot, color=moment_color, s=30, zorder=5, depthshade=False) @@ -628,7 +652,7 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): _add_grillage_background(ax, nodes, members) _add_coordinate_triad(ax, nodes) - _add_supports(ax, nodes, members) + _add_supports(ax, nodes, members, edge_dist=edge_dist) base_color = "#388E3C" @@ -749,7 +773,7 @@ def build_figure_deflection(ds, disp_key, nodes, members, edge_dist=0.0): _add_grillage_background(ax, nodes, members) _add_coordinate_triad(ax, nodes) - _add_supports(ax, nodes, members) + _add_supports(ax, nodes, members, edge_dist=edge_dist) defl_color = "#6A1B9A" # deep purple fill_color = "#CE93D8" # light purple @@ -835,9 +859,13 @@ def _get(n, _comp=actual_comp): # annotate the node with maximum absolute deflection idx_max = int(np.argmax(np.abs(vals))) ax.plot([xs[idx_max], xs[idx_max]], [z_base, z_base], [0, y_plot[idx_max]], - color=defl_color, linewidth=1.5, zorder=3) + color=defl_color, linewidth=1.5, linestyle="--", zorder=3, gid="max_line") ax.text(xs[idx_max], z_base, y_plot[idx_max], - f" {vals[idx_max]:.3f} mm", color=defl_color, fontsize=7, zorder=6) + f" {vals[idx_max]:.3f} mm", color="#4A4A4A", fontsize=7, fontweight="bold", zorder=6, gid="max_line") + + # 'All' values annotations (Tagged for toggling) + for xi, yi, val in zip(xs, y_plot, vals): + ax.text(xi, z_base, yi, f" {val:.3f}", color="#666666", fontsize=6, zorder=5, gid="all_vals") sc = ax.scatter(xs, z_arr, y_plot, color=defl_color, s=30, zorder=5, depthshade=False) diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 8a6fdfc6f..050d19dce 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -65,25 +65,20 @@ def __init__(self, parent=None): layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) - # Use a single RichText label exactly like the Plotly HUD! self.text_label = QLabel() self.text_label.setTextFormat(Qt.RichText) self.text_label.setAlignment(Qt.AlignLeft | Qt.AlignTop) layout.addWidget(self.text_label) def update_data(self, summary_data): - """Populates the HUD using precise HTML monospace formatting.""" - # Header setup hud_text = "Extreme Values Summary
" + "-" * 38 + "
" h_girder = "Girder".ljust(8).replace(" ", " ") h_max = "Max".rjust(10).replace(" ", " ") h_min = "Min".rjust(12).replace(" ", " ") - # Red for Max, Cyan for Min hud_text += f"{h_girder} | {h_max} | {h_min}
" + "-" * 38 + "
" - # Data rows for girder, vals in summary_data.items(): g_str = girder.ljust(8).replace(" ", " ") max_str = f"{vals['max']:.2f}".rjust(10).replace(" ", " ") @@ -116,8 +111,11 @@ def __init__(self, parent=None): self._show_nodes = True self._show_axis = True self._show_supports = True - self._show_grid = True # NEW: Track grid visibility + self._show_grid = True self._is_summary_checked = False + self._show_max = False + self._show_min = False + self._show_all_vals = False # Zoom state self._zoom_scale = 1.0 @@ -130,7 +128,7 @@ def __init__(self, parent=None): self._canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self._canvas.installEventFilter(self) - # Initialize the Summary Overlay (Hidden by default) + # Initialize the Summary Overlay self._summary_overlay = SummaryOverlay(self._canvas) self._summary_overlay.hide() @@ -192,7 +190,6 @@ def __init__(self, parent=None): self._btn_axis.setStyleSheet(btn_style) self._btn_axis.toggled.connect(self._on_axis_toggled) - # NEW: Grid toggle button self._btn_grid = QPushButton("Grid") self._btn_grid.setCheckable(True) self._btn_grid.setChecked(True) @@ -208,7 +205,7 @@ def __init__(self, parent=None): toolbar_row.addWidget(self._btn_nodes) toolbar_row.addWidget(self._btn_supports) toolbar_row.addWidget(self._btn_axis) - toolbar_row.addWidget(self._btn_grid) # Added Grid button + toolbar_row.addWidget(self._btn_grid) toolbar_row.addStretch() toolbar_row.addWidget(self._btn_zoom_out) toolbar_row.addWidget(self._btn_zoom_in) @@ -255,9 +252,25 @@ def link_output_dock(self, output_dock): rb.setChecked(rb.text() == _DEFAULT_FORCE_LABEL) rb.toggled.connect(self.update_plot) - # 3. Connect Display Options (Summary HUD) - output_dock.connect_checkbox_signal("Summary", self._on_summary_toggled) - self._is_summary_checked = output_dock.get_checkbox_state("Summary") + # 3. BULLETPROOF NATIVE QT CONNECTION FOR CHECKBOXES + for cb in output_dock.output_widget.findChildren(QCheckBox): + text = cb.text().strip().lower() + + if "summary" in text: + cb.toggled.connect(self._on_summary_toggled) + self._is_summary_checked = cb.isChecked() + + elif "max" in text: + cb.toggled.connect(self._on_max_toggled) + self._show_max = cb.isChecked() + + elif "min" in text: + cb.toggled.connect(self._on_min_toggled) + self._show_min = cb.isChecked() + + elif "all" in text: + cb.toggled.connect(self._on_all_vals_toggled) + self._show_all_vals = cb.isChecked() self.update_plot() @@ -293,7 +306,8 @@ def update_plot(self, *_args): self._apply_node_visibility() self._apply_axis_visibility() self._apply_supports_visibility() - self._apply_grid_visibility() # Ensure grid matches toggle state + self._apply_grid_visibility() + self._apply_annotation_visibility() # Update HUD if self._summary_data: @@ -310,23 +324,35 @@ def update_plot(self, *_args): self._zoom_scale = 1.0 self._store_orig_limits() - def _on_summary_toggled(self): - if self._output_dock is None: - return - - self._is_summary_checked = self._output_dock.get_checkbox_state("Summary") - + # NATIVE SLOTS: The 'checked' variable is now passed instantly by Qt! + def _on_summary_toggled(self, checked): + self._is_summary_checked = checked if self._is_summary_checked and self._summary_data: self._summary_overlay.show() self._summary_overlay.raise_() else: self._summary_overlay.hide() + def _on_max_toggled(self, checked): + self._show_max = checked + self._apply_annotation_visibility() + self._canvas.draw_idle() + + def _on_min_toggled(self, checked): + self._show_min = checked + self._apply_annotation_visibility() + self._canvas.draw_idle() + + def _on_all_vals_toggled(self, checked): + self._show_all_vals = checked + self._apply_annotation_visibility() + self._canvas.draw_idle() + + # Toolbar Slots def _on_grillage_toggled(self, checked: bool): self._grillage_mode = checked if checked: - if not self._nodes: - return + if not self._nodes: return plt.close(self._fig) self._fig = build_figure_grillage(self._nodes, self._members) self._canvas.figure = self._fig @@ -361,7 +387,6 @@ def _on_supports_toggled(self, checked: bool): self._canvas.draw_idle() def _on_grid_toggled(self, checked: bool): - """Instantly toggle the visibility of the Matplotlib grid lines.""" self._show_grid = checked self._apply_grid_visibility() self._canvas.draw_idle() @@ -374,7 +399,6 @@ def resizeEvent(self, event): self._summary_overlay.move(15, 15) # private helpers - def _apply_node_visibility(self): for ax in self._fig.axes: for collection in ax.collections: @@ -397,14 +421,27 @@ def _apply_axis_visibility(self): if text.get_gid() == "coord_triad": text.set_visible(self._show_axis) + def _apply_annotation_visibility(self): + """Toggles the visibility of Max, Min, and All lines and text annotations.""" + for ax in self._fig.axes: + for line in ax.lines: + if line.get_gid() == "max_line": + line.set_visible(self._show_max) + elif line.get_gid() == "min_line": + line.set_visible(self._show_min) + for text in ax.texts: + if text.get_gid() == "max_line": + text.set_visible(self._show_max) + elif text.get_gid() == "min_line": + text.set_visible(self._show_min) + elif text.get_gid() == "all_vals": + text.set_visible(self._show_all_vals) + def _apply_grid_visibility(self): - """Applies the grid visibility state to all 3D axes.""" for ax in self._fig.axes: if self._show_grid: - # Turn on and restore the custom styling ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) else: - # Turn off the grid lines ax.grid(False) def _fit_figure_to_canvas(self): From 220d98454a938d283670a325744cc52fdacc61ac Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Tue, 28 Apr 2026 20:56:22 +0530 Subject: [PATCH 185/225] removed the scaled zaxis --- .../plate_girder/plot_generator.py | 83 ++++++++++--------- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 44 ++++------ 2 files changed, 61 insertions(+), 66 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index a6f6bdce6..f7aa5a451 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -286,7 +286,8 @@ def build_figure_grillage(nodes, members): ax.zaxis.pane.set_edgecolor("lightgrey") ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) - plt.tight_layout() + # Force the 3D plot to use the maximum available canvas space + fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.88) return fig @@ -376,15 +377,15 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) - val_range = max(Vy) - min(Vy) - if val_range == 0: - shear_scale = 1.0 if max(Vy) == 0 else 0.25 * abs((max(xs) - min(xs)) / max(Vy)) - else: - shear_scale = 0.25 * abs((max(xs) - min(xs)) / val_range) + # val_range = max(Vy) - min(Vy) + # if val_range == 0: + # shear_scale = 1.0 if max(Vy) == 0 else 0.25 * abs((max(xs) - min(xs)) / max(Vy)) + # else: + # shear_scale = 0.25 * abs((max(xs) - min(xs)) / val_range) x_step = np.repeat(xs, 2)[1:-1] Vy_step = np.repeat(Vy[:-1], 2) - y_step = Vy_step * shear_scale + y_step = Vy_step z_step = np.full_like(x_step, z_base) ax.plot_surface( @@ -399,12 +400,12 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): # vertical cliff lines for xi, vyi in zip(xs, Vy): - ax.plot([xi, xi], [z_base, z_base], [0, vyi * shear_scale], + ax.plot([xi, xi], [z_base, z_base], [0, vyi], color=shear_color, linewidth=1.2, alpha=0.7, zorder=3) for xi, vyi in zip(xs, Vy): - ax.text(xi, z_base, vyi * shear_scale, f" {vyi:.2f}", color="#666666", fontsize=6, zorder=5, gid="all_vals") + ax.text(xi, z_base, vyi, f" {vyi:.2f}", color="#666666", fontsize=6, zorder=5, gid="all_vals") - sc = ax.scatter(xs, z_arr, Vy * shear_scale, + sc = ax.scatter(xs, z_arr, Vy, color=shear_color, s=30, zorder=5, depthshade=False) _scatter_objs.append(sc) _scatter_data[id(sc)] = (node_ids, xs, Vy) @@ -424,7 +425,7 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) - ax.set_zlabel(f"{disp_key} (kN, scaled)", fontsize=10, labelpad=8) + ax.set_zlabel(f"{disp_key} (kN)", fontsize=10, labelpad=8) ax.set_title(f"Shear Force Diagram — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False @@ -435,7 +436,8 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): ax.zaxis.pane.set_edgecolor("lightgrey") ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) - plt.tight_layout() + # Force the 3D plot to use the maximum available canvas space + fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.88) return fig @@ -522,13 +524,13 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) - val_range = max(Mz) - min(Mz) - if val_range == 0: - moment_scale = 1.0 if max(Mz) == 0 else 0.1 * abs((max(xs) - min(xs)) / max(Mz)) - else: - moment_scale = 0.1 * abs((max(xs) - min(xs)) / val_range) + # val_range = max(Mz) - min(Mz) + # if val_range == 0: + # moment_scale = 1.0 if max(Mz) == 0 else 0.1 * abs((max(xs) - min(xs)) / max(Mz)) + # else: + # moment_scale = 0.1 * abs((max(xs) - min(xs)) / val_range) - y_plot = -Mz * moment_scale # negate: positive moment plots downward + y_plot = -Mz # negate: positive moment plots downward ax.plot_surface( np.vstack([xs, xs]), @@ -579,7 +581,7 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) - ax.set_zlabel(f"{disp_key} (kNm, scaled)", fontsize=10, labelpad=8) + ax.set_zlabel(f"{disp_key} (kNm)", fontsize=10, labelpad=8) ax.set_title(f"Bending Moment Diagram — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False @@ -590,7 +592,8 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): ax.zaxis.pane.set_edgecolor("lightgrey") ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) - plt.tight_layout() + # Force the 3D plot to use the maximum available canvas space + fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.88) return fig, summary_data @@ -683,13 +686,13 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) - val_range = max(Mz) - min(Mz) - if val_range == 0: - moment_scale = 1.0 if max(Mz) == 0 else 0.1 * abs((max(xs) - min(xs)) / max(Mz)) - else: - moment_scale = 0.1 * abs((max(xs) - min(xs)) / val_range) + # val_range = max(Mz) - min(Mz) + # if val_range == 0: + # moment_scale = 1.0 if max(Mz) == 0 else 0.1 * abs((max(xs) - min(xs)) / max(Mz)) + # else: + # moment_scale = 0.1 * abs((max(xs) - min(xs)) / val_range) - y_plot = Mz * moment_scale + y_plot = Mz face_colors = cmap(norm(np.vstack([Mz, Mz]))) ax.plot_surface( @@ -718,7 +721,7 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) - ax.set_zlabel(f"{disp_key} (kNm, scaled)", fontsize=10, labelpad=8) + ax.set_zlabel(f"{disp_key} (kNm)", fontsize=10, labelpad=8) ax.set_title(f"BMD Contour — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False @@ -729,7 +732,8 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): ax.zaxis.pane.set_edgecolor("lightgrey") ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) - plt.tight_layout() + # Force the 3D plot to use the maximum available canvas space + fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.88) return fig @@ -836,16 +840,16 @@ def _get(n, _comp=actual_comp): bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) - val_range = max(vals) - min(vals) - if val_range == 0: - defl_scale = ( - 1.0 if np.max(np.abs(vals)) == 0 - else 0.1 * abs((max(xs) - min(xs)) / np.max(np.abs(vals))) - ) - else: - defl_scale = 0.1 * abs((max(xs) - min(xs)) / val_range) + # val_range = max(vals) - min(vals) + # if val_range == 0: + # defl_scale = ( + # 1.0 if np.max(np.abs(vals)) == 0 + # else 0.1 * abs((max(xs) - min(xs)) / np.max(np.abs(vals))) + # ) + # else: + # defl_scale = 0.1 * abs((max(xs) - min(xs)) / val_range) - y_plot = vals * defl_scale + y_plot = vals ax.plot_surface( np.vstack([xs, xs]), @@ -886,7 +890,7 @@ def on_add(sel, _data=_scatter_data, _lbl=disp_label): ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) - ax.set_zlabel(f"{disp_label} (mm, scaled)", fontsize=10, labelpad=8) + ax.set_zlabel(f"{disp_label} (mm)", fontsize=10, labelpad=8) ax.set_title(f"Deflection Diagram — {disp_label}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False @@ -897,7 +901,8 @@ def on_add(sel, _data=_scatter_data, _lbl=disp_label): ax.zaxis.pane.set_edgecolor("lightgrey") ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) - plt.tight_layout() + # Force the 3D plot to use the maximum available canvas space + fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.88) return fig diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 050d19dce..bb5be27d1 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -452,50 +452,40 @@ def _fit_figure_to_canvas(self): self._fig.set_size_inches(w_px / dpi, h_px / dpi, forward=False) def _store_orig_limits(self): - self._orig_limits = {} - for i, ax in enumerate(self._fig.axes): - if hasattr(ax, "get_zlim"): - self._orig_limits[i] = { - "x": ax.get_xlim(), - "y": ax.get_ylim(), - "z": ax.get_zlim(), - } + """No longer needed since we are using native camera zoom instead of axis clipping!""" + pass def _apply_zoom(self): - if not self._orig_limits: - return - for i, ax in enumerate(self._fig.axes): - if i not in self._orig_limits: - continue - lims = self._orig_limits[i] - for axis_key, set_lim in [ - ("x", ax.set_xlim), - ("y", ax.set_ylim), - ("z", ax.set_zlim), - ]: - lo, hi = lims[axis_key] - centre = (lo + hi) / 2.0 - half = (hi - lo) / 2.0 * self._zoom_scale - set_lim(centre - half, centre + half) + """Zoom the 3D camera optically to completely prevent canvas clipping.""" + for ax in self._fig.axes: + try: + # Modern Matplotlib: Zooms the camera lens natively. + # The 3D box stays safely inside the widget window, no clipping! + ax.set_proj_type('persp', focal_length=self._zoom_scale) + except Exception: + # Fallback for older Matplotlib versions + ax.dist = 10 / self._zoom_scale self._canvas.draw_idle() def eventFilter(self, obj, event): if obj is self._canvas and event.type() == QEvent.Type.Wheel: delta = event.angleDelta().y() if delta > 0: - self._zoom_scale = max(self._zoom_scale * 0.8, 0.05) + # Zoom IN (increase focal length) + self._zoom_scale = min(self._zoom_scale * 1.1, 10.0) else: - self._zoom_scale = min(self._zoom_scale * 1.25, 20.0) + # Zoom OUT (decrease focal length) + self._zoom_scale = max(self._zoom_scale * 0.9, 0.1) self._apply_zoom() return True return super().eventFilter(obj, event) def _zoom_in(self): - self._zoom_scale = max(self._zoom_scale * 0.8, 0.05) + self._zoom_scale = min(self._zoom_scale * 1.1, 10.0) self._apply_zoom() def _zoom_out(self): - self._zoom_scale = min(self._zoom_scale * 1.25, 20.0) + self._zoom_scale = max(self._zoom_scale * 0.9, 0.1) self._apply_zoom() def _zoom_reset(self): From 0698638c80385326b982ca7ace096189933e55c3 Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Tue, 28 Apr 2026 21:01:25 +0530 Subject: [PATCH 186/225] added hover boxes for grillage view --- .../plate_girder/plot_generator.py | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index f7aa5a451..dc5b7379b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -267,11 +267,28 @@ def build_figure_grillage(nodes, members): _add_coordinate_triad(ax, nodes) _add_supports(ax, nodes, members) - # Draw node markers - xs = [coord[0] for coord in nodes.values()] - ys = [coord[2] for coord in nodes.values()] - ax.scatter(xs, ys, [0] * len(xs), - color="#388E3C", s=14, zorder=4, depthshade=False) + # Extract node IDs and coordinates properly for tracking + node_ids = list(nodes.keys()) + xs = [nodes[n][0] for n in node_ids] + ys = [nodes[n][2] for n in node_ids] # The physical Z-coordinate is plotted on the Y-axis here + + # Capture the scatter object + sc = ax.scatter(xs, ys, [0] * len(xs), + color="#388E3C", s=14, zorder=4, depthshade=False) + + # Attach the hover cursor specifically for the Grillage view + if _MPLCURSORS: + cursor = mplcursors.cursor(sc, hover=True) + @cursor.connect("add") + def on_add(sel): + idx = sel.index + nid = node_ids[idx] + nx = xs[idx] + nz = ys[idx] + sel.annotation.set_text( + f"Node {nid}\nX: {nx:.2f} m\nZ: {nz:.2f} m" + ) + sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) From b1dbd0ccc8d3f3bb32396c30d395d6179686f9ef Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Sat, 2 May 2026 21:16:02 +0530 Subject: [PATCH 187/225] green girder lines; timer on node boxes --- .../bridge_types/plate_girder/analyser.py | 2 +- .../plate_girder/plot_generator.py | 159 ++++++++++++++++-- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 54 +++--- .../desktop/ui/utils/custom_3dviewer.py | 2 +- 4 files changed, 181 insertions(+), 36 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 64f7d47b1..e82327fc1 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -1112,7 +1112,7 @@ def add_vehicle_load_cases_from_combinations(self, model=None): # Add to load case # ----------------------------- lc.add_load( - load_obj=vehicle, + load=vehicle, load_factor=lane_factor ) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index dc5b7379b..388e97249 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -238,7 +238,7 @@ def _add_supports(ax, nodes, members, edge_dist=0.0): # GRILLAGE PLOT # ============================================================================= -def build_figure_grillage(nodes, members): +def build_figure_grillage(nodes, members, edge_dist=0.0): """ Build a 3-D matplotlib figure showing only the bridge grillage mesh. @@ -265,7 +265,37 @@ def build_figure_grillage(nodes, members): _add_grillage_background(ax, nodes, members) _add_coordinate_triad(ax, nodes) - _add_supports(ax, nodes, members) + _add_supports(ax, nodes, members, edge_dist=edge_dist) + + girders = _find_girders(nodes, members) + girder_items = list(girders.items()) + n_girders = len(girder_items) + base_color = "#388E3C" + + for i, (z_val, elems) in enumerate(girder_items): + if not elems: continue + is_edge_beam = edge_dist > 0 and (i == 0 or i == n_girders - 1) + girder_name = f"G{i}" if edge_dist > 0 else f"G{i + 1}" + + n_first = members[elems[0]][0] + n_last = members[elems[-1]][1] + + x_start = nodes[n_first][0] + x_end = nodes[n_last][0] + z_base = nodes[n_first][2] + + # Draw the solid longitudinal line (Grey for edge, Green for inner) + ax.plot([x_start, x_end], [z_base, z_base], [0, 0], + color="slategrey" if is_edge_beam else base_color, + linewidth=1.5, zorder=3) + + # Add the Girder labels (G1, G2, etc.) to the inner beams + if not is_edge_beam: + ax.text(x_start - (x_range * 0.02), z_base, 0, f"{girder_name}", + color="black", fontsize=11, fontweight="normal", + ha="right", va="center", zorder=6, + bbox=dict(boxstyle="round,pad=0.2", facecolor="white", + alpha=0.8, edgecolor="none")) # Extract node IDs and coordinates properly for tracking node_ids = list(nodes.keys()) @@ -277,19 +307,47 @@ def build_figure_grillage(nodes, members): color="#388E3C", s=14, zorder=4, depthshade=False) # Attach the hover cursor specifically for the Grillage view + # Attach the hover cursor directly to the single Grillage scatter object 'sc' if _MPLCURSORS: cursor = mplcursors.cursor(sc, hover=True) + cursor._timers = {} # A safe dictionary to store active timers + @cursor.connect("add") def on_add(sel): + # Extract data directly from the lists we built earlier in the function idx = sel.index nid = node_ids[idx] nx = xs[idx] - nz = ys[idx] + nz = ys[idx] # Remember, physical Z is plotted on the Y-axis here + sel.annotation.set_text( f"Node {nid}\nX: {nx:.2f} m\nZ: {nz:.2f} m" ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) + # ================= TIMER LOGIC ================= + fig = sel.annotation.figure + timer = fig.canvas.new_timer(interval=6500) + timer.single_shot = True + + # Store the timer safely in our dictionary using the selection's unique ID + sel_id = id(sel) + cursor._timers[sel_id] = timer + + def auto_hide(): + try: + if sel in cursor.selections: + cursor.remove_selection(sel) + fig.canvas.draw_idle() + except Exception: + pass + finally: + # Clean up the dictionary reference to free memory + cursor._timers.pop(sel_id, None) + + timer.add_callback(auto_hide) + timer.start() + ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel("", fontsize=10, labelpad=8) @@ -304,7 +362,9 @@ def on_add(sel): ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) # Force the 3D plot to use the maximum available canvas space - fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.88) + # Dedicate 18% of the right side purely to the massive axis labels. + # This naturally shoves the 3D bridge perfectly into the center of the screen! + fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) return fig @@ -430,6 +490,7 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): # hover annotations if _MPLCURSORS and _scatter_objs: cursor = mplcursors.cursor(_scatter_objs, hover=True) + cursor._timers = {} # THE FIX: A safe dictionary to store active timers @cursor.connect("add") def on_add(sel, _data=_scatter_data, _fk=disp_key): @@ -440,6 +501,28 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) + fig = sel.annotation.figure + timer = fig.canvas.new_timer(interval=6500) + timer.single_shot = True + + # Store the timer safely in our dictionary using the selection's unique ID + sel_id = id(sel) + cursor._timers[sel_id] = timer + + def auto_hide(): + try: + if sel in cursor.selections: + cursor.remove_selection(sel) + fig.canvas.draw_idle() + except Exception: + pass + finally: + # Clean up the dictionary reference to free memory + cursor._timers.pop(sel_id, None) + + timer.add_callback(auto_hide) + timer.start() + ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel(f"{disp_key} (kN)", fontsize=10, labelpad=8) @@ -454,7 +537,9 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) # Force the 3D plot to use the maximum available canvas space - fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.88) + # Dedicate 18% of the right side purely to the massive axis labels. + # This naturally shoves the 3D bridge perfectly into the center of the screen! + fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) return fig @@ -586,16 +671,39 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): if _MPLCURSORS and _scatter_objs: cursor = mplcursors.cursor(_scatter_objs, hover=True) + cursor._timers = {} # THE FIX: A safe dictionary to store active timers @cursor.connect("add") def on_add(sel, _data=_scatter_data, _fk=disp_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index sel.annotation.set_text( - f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {-vals_g[idx]:.3f} kNm" + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kN" ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) + fig = sel.annotation.figure + timer = fig.canvas.new_timer(interval=6500) + timer.single_shot = True + + # Store the timer safely in our dictionary using the selection's unique ID + sel_id = id(sel) + cursor._timers[sel_id] = timer + + def auto_hide(): + try: + if sel in cursor.selections: + cursor.remove_selection(sel) + fig.canvas.draw_idle() + except Exception: + pass + finally: + # Clean up the dictionary reference to free memory + cursor._timers.pop(sel_id, None) + + timer.add_callback(auto_hide) + timer.start() + ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel(f"{disp_key} (kNm)", fontsize=10, labelpad=8) @@ -610,7 +718,9 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) # Force the 3D plot to use the maximum available canvas space - fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.88) + # Dedicate 18% of the right side purely to the massive axis labels. + # This naturally shoves the 3D bridge perfectly into the center of the screen! + fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) return fig, summary_data @@ -750,7 +860,9 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) # Force the 3D plot to use the maximum available canvas space - fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.88) + # Dedicate 18% of the right side purely to the massive axis labels. + # This naturally shoves the 3D bridge perfectly into the center of the screen! + fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) return fig @@ -895,16 +1007,39 @@ def _get(n, _comp=actual_comp): if _MPLCURSORS and _scatter_objs: cursor = mplcursors.cursor(_scatter_objs, hover=True) + cursor._timers = {} # THE FIX: A safe dictionary to store active timers @cursor.connect("add") - def on_add(sel, _data=_scatter_data, _lbl=disp_label): + def on_add(sel, _data=_scatter_data, _fk=disp_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index sel.annotation.set_text( - f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_lbl}: {vals_g[idx]:.4f} mm" + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kN" ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) + fig = sel.annotation.figure + timer = fig.canvas.new_timer(interval=6500) + timer.single_shot = True + + # Store the timer safely in our dictionary using the selection's unique ID + sel_id = id(sel) + cursor._timers[sel_id] = timer + + def auto_hide(): + try: + if sel in cursor.selections: + cursor.remove_selection(sel) + fig.canvas.draw_idle() + except Exception: + pass + finally: + # Clean up the dictionary reference to free memory + cursor._timers.pop(sel_id, None) + + timer.add_callback(auto_hide) + timer.start() + ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel(f"{disp_label} (mm)", fontsize=10, labelpad=8) @@ -919,7 +1054,9 @@ def on_add(sel, _data=_scatter_data, _lbl=disp_label): ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) # Force the 3D plot to use the maximum available canvas space - fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.88) + # Dedicate 18% of the right side purely to the massive axis labels. + # This naturally shoves the 3D bridge perfectly into the center of the screen! + fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) return fig diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index bb5be27d1..e713e9588 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -7,7 +7,7 @@ from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QComboBox, QSizePolicy, QPushButton, - QFrame, QLabel, QCheckBox + QFrame, QLabel, QCheckBox, QScrollArea ) from PySide6.QtCore import Qt, QEvent @@ -128,6 +128,11 @@ def __init__(self, parent=None): self._canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self._canvas.installEventFilter(self) + self._scroll_area = QScrollArea() + self._scroll_area.setWidgetResizable(True) + self._scroll_area.setWidget(self._canvas) + self._scroll_area.setFrameShape(QFrame.NoFrame) + # Initialize the Summary Overlay self._summary_overlay = SummaryOverlay(self._canvas) self._summary_overlay.hide() @@ -216,7 +221,7 @@ def __init__(self, parent=None): root.setContentsMargins(0, 0, 0, 0) root.setSpacing(0) root.addLayout(toolbar_row) - root.addWidget(self._canvas, stretch=1) + root.addWidget(self._scroll_area, stretch=1) # public API @@ -354,7 +359,7 @@ def _on_grillage_toggled(self, checked: bool): if checked: if not self._nodes: return plt.close(self._fig) - self._fig = build_figure_grillage(self._nodes, self._members) + self._fig = build_figure_grillage(self._nodes, self._members, edge_dist=self._edge_dist) self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) @@ -393,10 +398,8 @@ def _on_grid_toggled(self, checked: bool): def resizeEvent(self, event): super().resizeEvent(event) - self._fit_figure_to_canvas() - self._canvas.draw_idle() if self._summary_overlay: - self._summary_overlay.move(15, 15) + self._summary_overlay.move(15, 45) # Keep HUD floating safely under the toolbar # private helpers def _apply_node_visibility(self): @@ -452,40 +455,45 @@ def _fit_figure_to_canvas(self): self._fig.set_size_inches(w_px / dpi, h_px / dpi, forward=False) def _store_orig_limits(self): - """No longer needed since we are using native camera zoom instead of axis clipping!""" - pass + pass # Not needed for Uniform Render Zoom def _apply_zoom(self): - """Zoom the 3D camera optically to completely prevent canvas clipping.""" - for ax in self._fig.axes: - try: - # Modern Matplotlib: Zooms the camera lens natively. - # The 3D box stays safely inside the widget window, no clipping! - ax.set_proj_type('persp', focal_length=self._zoom_scale) - except Exception: - # Fallback for older Matplotlib versions - ax.dist = 10 / self._zoom_scale + """Zooms the 2D canvas dynamically, creating scrollbars for perfect panning!""" + if self._zoom_scale <= 1.0: + self._zoom_scale = 1.0 + self._scroll_area.setWidgetResizable(True) + self._canvas.setMinimumSize(0, 0) + self._canvas.setMaximumSize(16777215, 16777215) + else: + self._scroll_area.setWidgetResizable(False) + base_w = self._scroll_area.width() - 2 + base_h = self._scroll_area.height() - 2 + # Physically resize the canvas like zooming a photo + self._canvas.setFixedSize(int(base_w * self._zoom_scale), int(base_h * self._zoom_scale)) self._canvas.draw_idle() def eventFilter(self, obj, event): if obj is self._canvas and event.type() == QEvent.Type.Wheel: + event.accept() delta = event.angleDelta().y() if delta > 0: - # Zoom IN (increase focal length) - self._zoom_scale = min(self._zoom_scale * 1.1, 10.0) + # Zoom IN: Changed from 1.15 to 1.05 for smoother scrolling + self._zoom_scale = min(self._zoom_scale * 1.05, 8.0) else: - # Zoom OUT (decrease focal length) - self._zoom_scale = max(self._zoom_scale * 0.9, 0.1) + # Zoom OUT: Changed from 0.85 to 0.95 for smoother scrolling + self._zoom_scale = max(self._zoom_scale * 0.95, 1.0) self._apply_zoom() return True return super().eventFilter(obj, event) def _zoom_in(self): - self._zoom_scale = min(self._zoom_scale * 1.1, 10.0) + # You can keep the buttons at 1.15 if you want faster clicking, + # or change them to 1.05 to match the smooth scroll wheel! + self._zoom_scale = min(self._zoom_scale * 1.05, 8.0) self._apply_zoom() def _zoom_out(self): - self._zoom_scale = max(self._zoom_scale * 0.9, 0.1) + self._zoom_scale = max(self._zoom_scale * 0.95, 1.0) self._apply_zoom() def _zoom_reset(self): diff --git a/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py b/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py index b31f36bc2..99727324c 100644 --- a/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py +++ b/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py @@ -430,7 +430,7 @@ def display_view_cube(self): def _show_navcube_when_ready(self): self._resize_navcube() self._position_navcube() - # self.navcube.mark_ready() + self.navcube.mark_ready() self.navcube.update() # ------------------------------------------------------------------ From 32df53b2a7f068f0dd58d89d7b8e3723f200b069 Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Tue, 5 May 2026 13:49:32 +0530 Subject: [PATCH 188/225] worked on axes and changed the sign in BMD --- .../plate_girder/plot_generator.py | 102 +++++++++++------- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 5 + 2 files changed, 71 insertions(+), 36 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index 388e97249..d0a3f879d 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -4,6 +4,7 @@ import matplotlib import matplotlib.pyplot as plt import matplotlib.colors as mcolors +from matplotlib.ticker import FuncFormatter import numpy as np import openseespy.opensees as ops from mpl_toolkits.mplot3d.art3d import Line3DCollection @@ -162,8 +163,8 @@ def _add_grillage_background(ax, nodes, members, x_tol=3, z_tol=3): ax.plot([x_val] * len(z_sorted), z_sorted, [0] * len(z_sorted), **trans_kw) -def _add_coordinate_triad(ax, nodes, scale=0.10): - """Draw X / Y / Z arrows and labels at the minimum-corner of the model.""" +def _add_coordinate_triad(ax, nodes, scale=0.12): + """Draw X / Y / Z arrows and labels with professional, distortion-free CAD aesthetics.""" xs = [c[0] for c in nodes.values()] ys = [c[1] for c in nodes.values()] zs = [c[2] for c in nodes.values()] @@ -171,31 +172,31 @@ def _add_coordinate_triad(ax, nodes, scale=0.10): span = max(max(xs) - min(xs), max(zs) - min(zs)) or 5000 L = span * scale - ox, oy, oz = min(xs), 0, min(zs) # triad origin + ox, oy, oz = min(xs), 0, min(zs) - colors = {"X": "#FF4136", "Y": "#2ECC40", "Z": "#0074D9"} - - # We tag these elements so the UI toggle button can easily find and hide them! + # Deeper, high-contrast CAD colors + # Professional Non-Clashing Palette: Deep Orange (X), Purple (Y), Teal (Z) + colors = {"X": "#E65100", "Y": "#0097A7", "Z": "#6A1B9A"} tag = "coord_triad" - # X arrow (along span) - ax.quiver(ox, oz, oy, L, 0, 0, - color=colors["X"], linewidth=2, arrow_length_ratio=0.25, zorder=5, gid=tag) - ax.text(ox + L * 1.25, oz, oy, "X", color=colors["X"], - fontsize=9, fontweight="bold", zorder=5, gid=tag) - - # Z arrow (along width) — note ax.plot uses (x=span, y=width, z=force) - ax.quiver(ox, oz, oy, 0, L, 0, - color=colors["Z"], linewidth=2, arrow_length_ratio=0.25, zorder=5, gid=tag) - ax.text(ox, oz + L * 1.25, oy, "Z", color=colors["Z"], - fontsize=9, fontweight="bold", zorder=5, gid=tag) - - # Y arrow (upward = force direction) — scaled by 0.30 to match box_aspect - Ly = L * 0.30 - ax.quiver(ox, oz, oy, 0, 0, Ly, - color=colors["Y"], linewidth=2, arrow_length_ratio=0.25, zorder=5, gid=tag) - ax.text(ox, oz, oy + Ly * 1.25, "Y", color=colors["Y"], - fontsize=9, fontweight="bold", zorder=5, gid=tag) + # Add a bold origin anchor dot + ax.scatter([ox], [oz], [oy], color="#333333", s=40, zorder=6, gid=tag) + + # X-Axis (Span) + ax.plot([ox, ox + L], [oz, oz], [oy, oy], color=colors["X"], linewidth=2.5, zorder=5, gid=tag) + ax.scatter([ox + L], [oz], [oy], color=colors["X"], marker='>', s=50, zorder=6, gid=tag, depthshade=False) + ax.text(ox + L * 1.25, oz, oy, "X", color=colors["X"], fontsize=10, fontweight="bold", zorder=6, gid=tag) + + # Z-Axis (Transverse width) + ax.plot([ox, ox], [oz, oz + L], [oy, oy], color=colors["Z"], linewidth=2.5, zorder=5, gid=tag) + ax.scatter([ox], [oz + L], [oy], color=colors["Z"], marker='^', s=50, zorder=6, gid=tag, depthshade=False) + ax.text(ox, oz + L * 1.25, oy, "Z", color=colors["Z"], fontsize=10, fontweight="bold", zorder=6, gid=tag) + + # Y-Axis (Vertical) + Ly = L * 3.0 + ax.plot([ox, ox], [oz, oz], [oy, oy + Ly], color=colors["Y"], linewidth=2.5, zorder=5, gid=tag) + ax.scatter([ox], [oz], [oy + Ly], color=colors["Y"], marker='^', s=50, zorder=6, gid=tag, depthshade=False) + ax.text(ox, oz, oy + Ly * 1.15, "Y", color=colors["Y"], fontsize=10, fontweight="bold", zorder=6, gid=tag) def _add_supports(ax, nodes, members, edge_dist=0.0): """Draw pin (diamond) and roller (circle) supports at the ends of girders.""" @@ -531,9 +532,16 @@ def auto_hide(): ax.xaxis.pane.fill = False ax.yaxis.pane.fill = False ax.zaxis.pane.fill = False - ax.xaxis.pane.set_edgecolor("lightgrey") - ax.yaxis.pane.set_edgecolor("lightgrey") - ax.zaxis.pane.set_edgecolor("lightgrey") + # Professional, high-contrast bounding box borders + ax.xaxis.pane.set_edgecolor("#555555") + ax.yaxis.pane.set_edgecolor("#555555") + ax.zaxis.pane.set_edgecolor("#555555") + ax.xaxis.pane.set_linewidth(1.5) + ax.yaxis.pane.set_linewidth(1.5) + ax.zaxis.pane.set_linewidth(1.5) + ax.xaxis.pane.set_alpha(1.0) + ax.yaxis.pane.set_alpha(1.0) + ax.zaxis.pane.set_alpha(1.0) ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) # Force the 3D plot to use the maximum available canvas space @@ -707,14 +715,22 @@ def auto_hide(): ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel(f"{disp_key} (kNm)", fontsize=10, labelpad=8) + ax.zaxis.set_major_formatter(FuncFormatter(lambda val, pos: f"{abs(val):g}")) ax.set_title(f"Bending Moment Diagram — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False ax.yaxis.pane.fill = False ax.zaxis.pane.fill = False - ax.xaxis.pane.set_edgecolor("lightgrey") - ax.yaxis.pane.set_edgecolor("lightgrey") - ax.zaxis.pane.set_edgecolor("lightgrey") + # Professional, high-contrast bounding box borders + ax.xaxis.pane.set_edgecolor("#555555") + ax.yaxis.pane.set_edgecolor("#555555") + ax.zaxis.pane.set_edgecolor("#555555") + ax.xaxis.pane.set_linewidth(1.5) + ax.yaxis.pane.set_linewidth(1.5) + ax.zaxis.pane.set_linewidth(1.5) + ax.xaxis.pane.set_alpha(1.0) + ax.yaxis.pane.set_alpha(1.0) + ax.zaxis.pane.set_alpha(1.0) ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) # Force the 3D plot to use the maximum available canvas space @@ -854,9 +870,16 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): ax.xaxis.pane.fill = False ax.yaxis.pane.fill = False ax.zaxis.pane.fill = False - ax.xaxis.pane.set_edgecolor("lightgrey") - ax.yaxis.pane.set_edgecolor("lightgrey") - ax.zaxis.pane.set_edgecolor("lightgrey") + # Professional, high-contrast bounding box borders + ax.xaxis.pane.set_edgecolor("#555555") + ax.yaxis.pane.set_edgecolor("#555555") + ax.zaxis.pane.set_edgecolor("#555555") + ax.xaxis.pane.set_linewidth(1.5) + ax.yaxis.pane.set_linewidth(1.5) + ax.zaxis.pane.set_linewidth(1.5) + ax.xaxis.pane.set_alpha(1.0) + ax.yaxis.pane.set_alpha(1.0) + ax.zaxis.pane.set_alpha(1.0) ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) # Force the 3D plot to use the maximum available canvas space @@ -1048,9 +1071,16 @@ def auto_hide(): ax.xaxis.pane.fill = False ax.yaxis.pane.fill = False ax.zaxis.pane.fill = False - ax.xaxis.pane.set_edgecolor("lightgrey") - ax.yaxis.pane.set_edgecolor("lightgrey") - ax.zaxis.pane.set_edgecolor("lightgrey") + # Professional, high-contrast bounding box borders + ax.xaxis.pane.set_edgecolor("#555555") + ax.yaxis.pane.set_edgecolor("#555555") + ax.zaxis.pane.set_edgecolor("#555555") + ax.xaxis.pane.set_linewidth(1.5) + ax.yaxis.pane.set_linewidth(1.5) + ax.zaxis.pane.set_linewidth(1.5) + ax.xaxis.pane.set_alpha(1.0) + ax.yaxis.pane.set_alpha(1.0) + ax.zaxis.pane.set_alpha(1.0) ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) # Force the 3D plot to use the maximum available canvas space diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index e713e9588..43beaecc2 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -420,6 +420,11 @@ def _apply_axis_visibility(self): for collection in ax.collections: if collection.get_gid() == "coord_triad": collection.set_visible(self._show_axis) + + for line in ax.lines: + if line.get_gid() == "coord_triad": + line.set_visible(self._show_axis) + for text in ax.texts: if text.get_gid() == "coord_triad": text.set_visible(self._show_axis) From ffed5e9ce32b20c02502751fe03e38d34b76cf77 Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Tue, 5 May 2026 13:53:23 +0530 Subject: [PATCH 189/225] worked on zoom feature --- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 69 ++++++++++++++++--- 1 file changed, 59 insertions(+), 10 deletions(-) diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 43beaecc2..878267f97 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -480,26 +480,75 @@ def _apply_zoom(self): def eventFilter(self, obj, event): if obj is self._canvas and event.type() == QEvent.Type.Wheel: event.accept() + + # 1. Capture the exact mouse position BEFORE zooming + pos = event.position() + mouse_x, mouse_y = pos.x(), pos.y() + + old_width = self._canvas.width() + old_height = self._canvas.height() + + # 2. Calculate the zoom delta = event.angleDelta().y() if delta > 0: - # Zoom IN: Changed from 1.15 to 1.05 for smoother scrolling - self._zoom_scale = min(self._zoom_scale * 1.05, 8.0) + self._zoom_scale = min(self._zoom_scale * 1.05, 8.0) # Zoom IN else: - # Zoom OUT: Changed from 0.85 to 0.95 for smoother scrolling - self._zoom_scale = max(self._zoom_scale * 0.95, 1.0) + self._zoom_scale = max(self._zoom_scale * 0.95, 1.0) # Zoom OUT + self._apply_zoom() + + # 3. Calculate how much the canvas grew/shrank + new_width = self._canvas.width() + new_height = self._canvas.height() + + if old_width == 0 or old_height == 0: return True + + # 4. Smart Scrollbar Math: Shift the view to keep the mouse anchored! + h_bar = self._scroll_area.horizontalScrollBar() + v_bar = self._scroll_area.verticalScrollBar() + + new_x = (mouse_x / old_width) * new_width + new_y = (mouse_y / old_height) * new_height + + h_bar.setValue(int(h_bar.value() + (new_x - mouse_x))) + v_bar.setValue(int(v_bar.value() + (new_y - mouse_y))) + return True return super().eventFilter(obj, event) - def _zoom_in(self): - # You can keep the buttons at 1.15 if you want faster clicking, - # or change them to 1.05 to match the smooth scroll wheel! - self._zoom_scale = min(self._zoom_scale * 1.05, 8.0) + def _zoom_step(self, factor): + """Helper to keep zoom centered on the screen when clicking +/- buttons.""" + viewport = self._scroll_area.viewport() + h_bar = self._scroll_area.horizontalScrollBar() + v_bar = self._scroll_area.verticalScrollBar() + + # Find the center of the visible screen + center_x = h_bar.value() + viewport.width() / 2.0 + center_y = v_bar.value() + viewport.height() / 2.0 + + old_width = self._canvas.width() + old_height = self._canvas.height() + + self._zoom_scale = max(1.0, min(self._zoom_scale * factor, 8.0)) self._apply_zoom() + new_width = self._canvas.width() + new_height = self._canvas.height() + + if old_width == 0 or old_height == 0: return + + # Push the scrollbars to keep the screen perfectly centered + new_center_x = (center_x / old_width) * new_width + new_center_y = (center_y / old_height) * new_height + + h_bar.setValue(int(new_center_x - viewport.width() / 2.0)) + v_bar.setValue(int(new_center_y - viewport.height() / 2.0)) + + def _zoom_in(self): + self._zoom_step(1.15) # Click zooms are slightly faster than scroll wheel + def _zoom_out(self): - self._zoom_scale = max(self._zoom_scale * 0.95, 1.0) - self._apply_zoom() + self._zoom_step(0.85) def _zoom_reset(self): self._zoom_scale = 1.0 From 9d3c8fcb43645ec9121fc4e3daa6f925fd6313ba Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Tue, 5 May 2026 17:33:59 +0530 Subject: [PATCH 190/225] worked on ALL button --- .../plate_girder/plot_generator.py | 6 ++- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 37 +++++++++++-------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index d0a3f879d..f6fdbacbb 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -657,14 +657,16 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): color="#FF4136", linewidth=1.5, linestyle="--", zorder=3, gid="max_line") # Bold Dark Grey Text ax.text(xs[idx_max], z_base, y_plot[idx_max], - f" {-Mz[idx_max]:.2f}", color="#333333", fontsize=8, fontweight="bold", zorder=6, gid="max_line") + f" {-Mz[idx_max]:.2f}", color="#333333", fontsize=8, fontweight="bold", zorder=6, gid="max_line", + bbox=dict(facecolor='white', edgecolor='none', alpha=0.85, pad=1.0)) # Min line (Dashed, Tagged for toggling) idx_min = int(np.argmin(Mz)) ax.plot([xs[idx_min], xs[idx_min]], [z_base, z_base], [0, y_plot[idx_min]], color="#0074D9", linewidth=1.5, linestyle="--", zorder=3, gid="min_line") ax.text(xs[idx_min], z_base, y_plot[idx_min], - f" {-Mz[idx_min]:.2f}", color="#333333", fontsize=8, fontweight="bold", zorder=6, gid="min_line") + f" {-Mz[idx_min]:.2f}", color="#333333", fontsize=8, fontweight="bold", zorder=6, gid="min_line", + bbox=dict(facecolor='white', edgecolor='none', alpha=0.85, pad=1.0)) # 'All' values annotations (Slightly lighter grey, Tagged for toggling) for xi, yi, mzi in zip(xs, y_plot, Mz): diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 878267f97..4bfab7e7c 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -257,22 +257,23 @@ def link_output_dock(self, output_dock): rb.setChecked(rb.text() == _DEFAULT_FORCE_LABEL) rb.toggled.connect(self.update_plot) - # 3. BULLETPROOF NATIVE QT CONNECTION FOR CHECKBOXES + # Create placeholders to store the checkboxes + self._cb_max = None + self._cb_min = None + for cb in output_dock.output_widget.findChildren(QCheckBox): text = cb.text().strip().lower() - if "summary" in text: cb.toggled.connect(self._on_summary_toggled) self._is_summary_checked = cb.isChecked() - elif "max" in text: + self._cb_max = cb # Store the reference cb.toggled.connect(self._on_max_toggled) self._show_max = cb.isChecked() - elif "min" in text: + self._cb_min = cb # Store the reference cb.toggled.connect(self._on_min_toggled) self._show_min = cb.isChecked() - elif "all" in text: cb.toggled.connect(self._on_all_vals_toggled) self._show_all_vals = cb.isChecked() @@ -350,6 +351,13 @@ def _on_min_toggled(self, checked): def _on_all_vals_toggled(self, checked): self._show_all_vals = checked + + # Disable the Max and Min checkboxes when "All" is active + if self._cb_max: + self._cb_max.setEnabled(not checked) + if self._cb_min: + self._cb_min.setEnabled(not checked) + self._apply_annotation_visibility() self._canvas.draw_idle() @@ -430,19 +438,18 @@ def _apply_axis_visibility(self): text.set_visible(self._show_axis) def _apply_annotation_visibility(self): - """Toggles the visibility of Max, Min, and All lines and text annotations.""" for ax in self._fig.axes: for line in ax.lines: - if line.get_gid() == "max_line": - line.set_visible(self._show_max) - elif line.get_gid() == "min_line": - line.set_visible(self._show_min) + if line.get_gid() == "max_line": + line.set_visible(self._show_max or self._show_all_vals) + elif line.get_gid() == "min_line": + line.set_visible(self._show_min or self._show_all_vals) for text in ax.texts: - if text.get_gid() == "max_line": - text.set_visible(self._show_max) - elif text.get_gid() == "min_line": - text.set_visible(self._show_min) - elif text.get_gid() == "all_vals": + if text.get_gid() == "max_line": + text.set_visible(self._show_max or self._show_all_vals) + elif text.get_gid() == "min_line": + text.set_visible(self._show_min or self._show_all_vals) + elif text.get_gid() == "all_vals": text.set_visible(self._show_all_vals) def _apply_grid_visibility(self): From b4a19701ee4a59ca31aabd3e8c90204ad6ab4ae6 Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Tue, 5 May 2026 20:30:30 +0530 Subject: [PATCH 191/225] worked on the axes --- .../plate_girder/plot_generator.py | 87 +++++++++++++------ 1 file changed, 59 insertions(+), 28 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index f6fdbacbb..a89134832 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -164,39 +164,67 @@ def _add_grillage_background(ax, nodes, members, x_tol=3, z_tol=3): def _add_coordinate_triad(ax, nodes, scale=0.12): - """Draw X / Y / Z arrows and labels with professional, distortion-free CAD aesthetics.""" + """Draw X/Y/Z axes with 3D pyramid arrowheads and locked boundaries.""" xs = [c[0] for c in nodes.values()] - ys = [c[1] for c in nodes.values()] zs = [c[2] for c in nodes.values()] - - span = max(max(xs) - min(xs), max(zs) - min(zs)) or 5000 - L = span * scale - + ox, oy, oz = min(xs), 0, min(zs) - - # Deeper, high-contrast CAD colors - # Professional Non-Clashing Palette: Deep Orange (X), Purple (Y), Teal (Z) - colors = {"X": "#E65100", "Y": "#0097A7", "Z": "#6A1B9A"} + colors = {"X": "#E65100", "Y": "#6A1B9A", "Z": "#0097A7"} tag = "coord_triad" - # Add a bold origin anchor dot ax.scatter([ox], [oz], [oy], color="#333333", s=40, zorder=6, gid=tag) - # X-Axis (Span) - ax.plot([ox, ox + L], [oz, oz], [oy, oy], color=colors["X"], linewidth=2.5, zorder=5, gid=tag) - ax.scatter([ox + L], [oz], [oy], color=colors["X"], marker='>', s=50, zorder=6, gid=tag, depthshade=False) - ax.text(ox + L * 1.25, oz, oy, "X", color=colors["X"], fontsize=10, fontweight="bold", zorder=6, gid=tag) - - # Z-Axis (Transverse width) - ax.plot([ox, ox], [oz, oz + L], [oy, oy], color=colors["Z"], linewidth=2.5, zorder=5, gid=tag) - ax.scatter([ox], [oz + L], [oy], color=colors["Z"], marker='^', s=50, zorder=6, gid=tag, depthshade=False) - ax.text(ox, oz + L * 1.25, oy, "Z", color=colors["Z"], fontsize=10, fontweight="bold", zorder=6, gid=tag) - - # Y-Axis (Vertical) - Ly = L * 3.0 + # 1. Capture exact current limits to lock the visual screen space + xlim = ax.get_xlim() + ylim = ax.get_ylim() + zlim = ax.get_zlim() + + xr = abs(xlim[1] - xlim[0]) + yr = abs(ylim[1] - ylim[0]) + zr = abs(zlim[1] - zlim[0]) + + # Provide safe fallbacks if the graph is completely empty + if xr < 1e-3: xr = 25.0 + if yr < 1e-3: yr = 10.0 + if zr < 1e-3: zr = 10.0 + + # 2. Fixed Screen Proportions (Stems are 12%, widths are 2.5% of visual space) + Lx, Lz, Ly = xr * scale, yr * scale, zr * scale + hl_x, hl_z, hl_y = Lx * 0.30, Lz * 0.30, Ly * 0.30 + w_frac = 0.025 + + # --- X-Axis (Span) --- + ax.plot([ox, ox + Lx], [oz, oz], [oy, oy], color=colors["X"], linewidth=2.5, zorder=5, gid=tag) + # Draw 4 lines to form a 3D pyramid arrowhead (immune to camera rotation) + tx, bx = ox + Lx, ox + Lx - hl_x + ax.plot([tx, bx], [oz, oz + (yr * w_frac)], [oy, oy], color=colors["X"], linewidth=2.0, zorder=5, gid=tag) + ax.plot([tx, bx], [oz, oz - (yr * w_frac)], [oy, oy], color=colors["X"], linewidth=2.0, zorder=5, gid=tag) + ax.plot([tx, bx], [oz, oz], [oy, oy + (zr * w_frac)], color=colors["X"], linewidth=2.0, zorder=5, gid=tag) + ax.plot([tx, bx], [oz, oz], [oy, oy - (zr * w_frac)], color=colors["X"], linewidth=2.0, zorder=5, gid=tag) + ax.text(tx + (xr * 0.03), oz, oy, "X", color=colors["X"], fontsize=10, fontweight="bold", zorder=6, gid=tag) + + # --- Z-Axis (Transverse width, mapped to Matplotlib Y) --- + ax.plot([ox, ox], [oz, oz + Lz], [oy, oy], color=colors["Z"], linewidth=2.5, zorder=5, gid=tag) + tz, bz = oz + Lz, oz + Lz - hl_z + ax.plot([ox, ox + (xr * w_frac)], [tz, bz], [oy, oy], color=colors["Z"], linewidth=2.0, zorder=5, gid=tag) + ax.plot([ox, ox - (xr * w_frac)], [tz, bz], [oy, oy], color=colors["Z"], linewidth=2.0, zorder=5, gid=tag) + ax.plot([ox, ox], [tz, bz], [oy, oy + (zr * w_frac)], color=colors["Z"], linewidth=2.0, zorder=5, gid=tag) + ax.plot([ox, ox], [tz, bz], [oy, oy - (zr * w_frac)], color=colors["Z"], linewidth=2.0, zorder=5, gid=tag) + ax.text(ox, tz + (yr * 0.04), oy, "Z", color=colors["Z"], fontsize=10, fontweight="bold", zorder=6, gid=tag) + + # --- Y-Axis (Vertical Forces, mapped to Matplotlib Z) --- ax.plot([ox, ox], [oz, oz], [oy, oy + Ly], color=colors["Y"], linewidth=2.5, zorder=5, gid=tag) - ax.scatter([ox], [oz], [oy + Ly], color=colors["Y"], marker='^', s=50, zorder=6, gid=tag, depthshade=False) - ax.text(ox, oz, oy + Ly * 1.15, "Y", color=colors["Y"], fontsize=10, fontweight="bold", zorder=6, gid=tag) + ty, by = oy + Ly, oy + Ly - hl_y + ax.plot([ox, ox + (xr * w_frac)], [oz, oz], [ty, by], color=colors["Y"], linewidth=2.0, zorder=5, gid=tag) + ax.plot([ox, ox - (xr * w_frac)], [oz, oz], [ty, by], color=colors["Y"], linewidth=2.0, zorder=5, gid=tag) + ax.plot([ox, ox], [oz + (yr * w_frac), oz], [ty, by], color=colors["Y"], linewidth=2.0, zorder=5, gid=tag) + ax.plot([ox, ox], [oz - (yr * w_frac), oz], [ty, by], color=colors["Y"], linewidth=2.0, zorder=5, gid=tag) + ax.text(ox, oz, ty + (zr * 0.04), "Y", color=colors["Y"], fontsize=10, fontweight="bold", zorder=6, gid=tag) + + # 3. CRITICAL FIX: Lock limits so drawing the triad doesn't stretch empty charts! + ax.set_xlim(xlim) + ax.set_ylim(ylim) + ax.set_zlim(zlim) def _add_supports(ax, nodes, members, edge_dist=0.0): """Draw pin (diamond) and roller (circle) supports at the ends of girders.""" @@ -408,7 +436,7 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): ax.set_box_aspect([x_range, z_range, x_range * 0.30]) _add_grillage_background(ax, nodes, members) - _add_coordinate_triad(ax, nodes) + _add_supports(ax, nodes, members, edge_dist=edge_dist) shear_color = "#1565C0" @@ -548,6 +576,7 @@ def auto_hide(): # Dedicate 18% of the right side purely to the massive axis labels. # This naturally shoves the 3D bridge perfectly into the center of the screen! fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) + _add_coordinate_triad(ax, nodes) return fig @@ -591,7 +620,7 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): ax.set_box_aspect([x_range, z_range, x_range * 0.30]) _add_grillage_background(ax, nodes, members) - _add_coordinate_triad(ax, nodes) + _add_supports(ax, nodes, members, edge_dist=edge_dist) moment_color = "#C62828" @@ -739,6 +768,7 @@ def auto_hide(): # Dedicate 18% of the right side purely to the massive axis labels. # This naturally shoves the 3D bridge perfectly into the center of the screen! fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) + _add_coordinate_triad(ax, nodes) return fig, summary_data @@ -930,7 +960,7 @@ def build_figure_deflection(ds, disp_key, nodes, members, edge_dist=0.0): ax.set_box_aspect([x_range, z_range, x_range * 0.30]) _add_grillage_background(ax, nodes, members) - _add_coordinate_triad(ax, nodes) + _add_supports(ax, nodes, members, edge_dist=edge_dist) defl_color = "#6A1B9A" # deep purple @@ -1089,6 +1119,7 @@ def auto_hide(): # Dedicate 18% of the right side purely to the massive axis labels. # This naturally shoves the 3D bridge perfectly into the center of the screen! fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) + _add_coordinate_triad(ax, nodes) return fig From d755a4e344cd37d39c962c41c346a3556e8458a2 Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Wed, 6 May 2026 01:15:37 +0530 Subject: [PATCH 192/225] worked on axis values --- .../core/bridge_types/plate_girder/plot_generator.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index a89134832..032aaeccb 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -5,6 +5,7 @@ import matplotlib.pyplot as plt import matplotlib.colors as mcolors from matplotlib.ticker import FuncFormatter +from matplotlib.ticker import MaxNLocator import numpy as np import openseespy.opensees as ops from mpl_toolkits.mplot3d.art3d import Line3DCollection @@ -555,6 +556,7 @@ def auto_hide(): ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel(f"{disp_key} (kN)", fontsize=10, labelpad=8) + ax.yaxis.set_major_locator(MaxNLocator(nbins=4, steps=[1, 2, 2.5, 5, 10])) ax.set_title(f"Shear Force Diagram — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False @@ -747,6 +749,7 @@ def auto_hide(): ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel(f"{disp_key} (kNm)", fontsize=10, labelpad=8) ax.zaxis.set_major_formatter(FuncFormatter(lambda val, pos: f"{abs(val):g}")) + ax.yaxis.set_major_locator(MaxNLocator(nbins=4, steps=[1, 2, 2.5, 5, 10])) ax.set_title(f"Bending Moment Diagram — {disp_key}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False @@ -1098,6 +1101,7 @@ def auto_hide(): ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel(f"{disp_label} (mm)", fontsize=10, labelpad=8) + ax.yaxis.set_major_locator(MaxNLocator(nbins=4, steps=[1, 2, 2.5, 5, 10])) ax.set_title(f"Deflection Diagram — {disp_label}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) ax.xaxis.pane.fill = False From 2e83f65a4ab0ebae868f1a8954766780a506ec8b Mon Sep 17 00:00:00 2001 From: Sarthak790 Date: Wed, 6 May 2026 01:44:17 +0530 Subject: [PATCH 193/225] worked on the zoom feature --- .../plate_girder/plot_generator.py | 9 +- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 128 ++++++++++-------- 2 files changed, 73 insertions(+), 64 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index 032aaeccb..f43b39360 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -394,7 +394,7 @@ def auto_hide(): # Force the 3D plot to use the maximum available canvas space # Dedicate 18% of the right side purely to the massive axis labels. # This naturally shoves the 3D bridge perfectly into the center of the screen! - fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) + # fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) return fig @@ -577,7 +577,7 @@ def auto_hide(): # Force the 3D plot to use the maximum available canvas space # Dedicate 18% of the right side purely to the massive axis labels. # This naturally shoves the 3D bridge perfectly into the center of the screen! - fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) + # fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) _add_coordinate_triad(ax, nodes) return fig @@ -770,7 +770,6 @@ def auto_hide(): # Force the 3D plot to use the maximum available canvas space # Dedicate 18% of the right side purely to the massive axis labels. # This naturally shoves the 3D bridge perfectly into the center of the screen! - fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) _add_coordinate_triad(ax, nodes) return fig, summary_data @@ -920,7 +919,7 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): # Force the 3D plot to use the maximum available canvas space # Dedicate 18% of the right side purely to the massive axis labels. # This naturally shoves the 3D bridge perfectly into the center of the screen! - fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) + # fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) return fig @@ -1122,7 +1121,7 @@ def auto_hide(): # Force the 3D plot to use the maximum available canvas space # Dedicate 18% of the right side purely to the massive axis labels. # This naturally shoves the 3D bridge perfectly into the center of the screen! - fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) + # fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) _add_coordinate_triad(ax, nodes) return fig diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 4bfab7e7c..92e68d93d 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -202,6 +202,7 @@ def __init__(self, parent=None): self._btn_grid.setFocusPolicy(Qt.NoFocus) self._btn_grid.setStyleSheet(btn_style) self._btn_grid.toggled.connect(self._on_grid_toggled) + self._canvas.mpl_connect('scroll_event', self._on_scroll) toolbar_row = QHBoxLayout() toolbar_row.setContentsMargins(4, 2, 4, 2) @@ -324,6 +325,10 @@ def update_plot(self, *_args): else: self._summary_overlay.hide() + if self._fig: + # Strip margins globally before handing the figure to the canvas + self._fig.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0) + self._fit_figure_to_canvas() self._canvas.draw() @@ -484,82 +489,87 @@ def _apply_zoom(self): self._canvas.setFixedSize(int(base_w * self._zoom_scale), int(base_h * self._zoom_scale)) self._canvas.draw_idle() - def eventFilter(self, obj, event): - if obj is self._canvas and event.type() == QEvent.Type.Wheel: - event.accept() + # def eventFilter(self, obj, event): + # if obj is self._canvas and event.type() == QEvent.Type.Wheel: + # event.accept() - # 1. Capture the exact mouse position BEFORE zooming - pos = event.position() - mouse_x, mouse_y = pos.x(), pos.y() + # # 1. Capture the exact mouse position BEFORE zooming + # pos = event.position() + # mouse_x, mouse_y = pos.x(), pos.y() - old_width = self._canvas.width() - old_height = self._canvas.height() - - # 2. Calculate the zoom - delta = event.angleDelta().y() - if delta > 0: - self._zoom_scale = min(self._zoom_scale * 1.05, 8.0) # Zoom IN - else: - self._zoom_scale = max(self._zoom_scale * 0.95, 1.0) # Zoom OUT + # old_width = self._canvas.width() + # old_height = self._canvas.height() + + # # 2. Calculate the zoom + # delta = event.angleDelta().y() + # if delta > 0: + # self._zoom_scale = min(self._zoom_scale * 1.05, 8.0) # Zoom IN + # else: + # self._zoom_scale = max(self._zoom_scale * 0.95, 1.0) # Zoom OUT - self._apply_zoom() + # self._apply_zoom() - # 3. Calculate how much the canvas grew/shrank - new_width = self._canvas.width() - new_height = self._canvas.height() + # # 3. Calculate how much the canvas grew/shrank + # new_width = self._canvas.width() + # new_height = self._canvas.height() - if old_width == 0 or old_height == 0: return True + # if old_width == 0 or old_height == 0: return True - # 4. Smart Scrollbar Math: Shift the view to keep the mouse anchored! - h_bar = self._scroll_area.horizontalScrollBar() - v_bar = self._scroll_area.verticalScrollBar() + # # 4. Smart Scrollbar Math: Shift the view to keep the mouse anchored! + # h_bar = self._scroll_area.horizontalScrollBar() + # v_bar = self._scroll_area.verticalScrollBar() - new_x = (mouse_x / old_width) * new_width - new_y = (mouse_y / old_height) * new_height + # new_x = (mouse_x / old_width) * new_width + # new_y = (mouse_y / old_height) * new_height - h_bar.setValue(int(h_bar.value() + (new_x - mouse_x))) - v_bar.setValue(int(v_bar.value() + (new_y - mouse_y))) + # h_bar.setValue(int(h_bar.value() + (new_x - mouse_x))) + # v_bar.setValue(int(v_bar.value() + (new_y - mouse_y))) - return True - return super().eventFilter(obj, event) + # return True + # return super().eventFilter(obj, event) def _zoom_step(self, factor): - """Helper to keep zoom centered on the screen when clicking +/- buttons.""" - viewport = self._scroll_area.viewport() - h_bar = self._scroll_area.horizontalScrollBar() - v_bar = self._scroll_area.verticalScrollBar() - - # Find the center of the visible screen - center_x = h_bar.value() + viewport.width() / 2.0 - center_y = v_bar.value() + viewport.height() / 2.0 - - old_width = self._canvas.width() - old_height = self._canvas.height() - - self._zoom_scale = max(1.0, min(self._zoom_scale * factor, 8.0)) - self._apply_zoom() - - new_width = self._canvas.width() - new_height = self._canvas.height() + """Natively zooms the Matplotlib 3D camera by scaling the axis limits.""" + if not hasattr(self, '_fig') or not self._fig or not self._fig.axes: + return + + ax = self._fig.axes[0] - if old_width == 0 or old_height == 0: return - - # Push the scrollbars to keep the screen perfectly centered - new_center_x = (center_x / old_width) * new_width - new_center_y = (center_y / old_height) * new_height - - h_bar.setValue(int(new_center_x - viewport.width() / 2.0)) - v_bar.setValue(int(new_center_y - viewport.height() / 2.0)) + # 1. Get current boundaries + x0, x1 = ax.get_xlim() + y0, y1 = ax.get_ylim() + z0, z1 = ax.get_zlim() + + # 2. Find the exact center of the current view + xc, yc, zc = (x0 + x1) / 2, (y0 + y1) / 2, (z0 + z1) / 2 + + # 3. Scale the ranges by the zoom factor + xr, yr, zr = (x1 - x0) * factor, (y1 - y0) * factor, (z1 - z0) * factor + + # 4. Apply the new narrowed/widened limits + ax.set_xlim(xc - xr / 2, xc + xr / 2) + ax.set_ylim(yc - yr / 2, yc + yr / 2) + ax.set_zlim(zc - zr / 2, zc + zr / 2) + + self._canvas.draw_idle() def _zoom_in(self): - self._zoom_step(1.15) # Click zooms are slightly faster than scroll wheel + # 85% of current view size (zooms in) + self._zoom_step(0.85) def _zoom_out(self): - self._zoom_step(0.85) - + # 115% of current view size (zooms out) + self._zoom_step(1.15) + def _on_scroll(self, event): + """Native Matplotlib scroll wheel support.""" + if event.button == 'up': + self._zoom_step(0.85) # Scroll wheel up = Zoom in + elif event.button == 'down': + self._zoom_step(1.15) # Scroll wheel down = Zoom out + def _zoom_reset(self): - self._zoom_scale = 1.0 - self._apply_zoom() + # The safest and cleanest way to reset is just to re-trigger the plot update! + self.update_plot() def _current_loadcase(self) -> str: combo = self._output_dock.output_widget.findChild( From 65f425591eda93a0622cfdaf7f10b9749bfdd71c Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Thu, 7 May 2026 01:33:57 +0530 Subject: [PATCH 194/225] fix: correct hover tooltip units for BMD (kNm) and deflection (mm) --- .../plate_girder/plot_generator.py | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index f43b39360..d483fedc9 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -719,18 +719,18 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index sel.annotation.set_text( - f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kN" + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kNm" ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) fig = sel.annotation.figure - timer = fig.canvas.new_timer(interval=6500) + timer = fig.canvas.new_timer(interval=6500) timer.single_shot = True - + # Store the timer safely in our dictionary using the selection's unique ID sel_id = id(sel) - cursor._timers[sel_id] = timer - + cursor._timers[sel_id] = timer + def auto_hide(): try: if sel in cursor.selections: @@ -741,7 +741,7 @@ def auto_hide(): finally: # Clean up the dictionary reference to free memory cursor._timers.pop(sel_id, None) - + timer.add_callback(auto_hide) timer.start() @@ -1071,18 +1071,18 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index sel.annotation.set_text( - f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kN" + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} mm" ) sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) fig = sel.annotation.figure - timer = fig.canvas.new_timer(interval=6500) + timer = fig.canvas.new_timer(interval=6500) timer.single_shot = True - + # Store the timer safely in our dictionary using the selection's unique ID sel_id = id(sel) - cursor._timers[sel_id] = timer - + cursor._timers[sel_id] = timer + def auto_hide(): try: if sel in cursor.selections: @@ -1093,7 +1093,7 @@ def auto_hide(): finally: # Clean up the dictionary reference to free memory cursor._timers.pop(sel_id, None) - + timer.add_callback(auto_hide) timer.start() From 89587aef002fb44a99cd01e6658a852cad1cfc0f Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Thu, 7 May 2026 02:21:55 +0530 Subject: [PATCH 195/225] fix: correct BMD text annotation sign to match hover tooltip values --- .../core/bridge_types/plate_girder/plot_generator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index d483fedc9..51d0c9e80 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -688,7 +688,7 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): color="#FF4136", linewidth=1.5, linestyle="--", zorder=3, gid="max_line") # Bold Dark Grey Text ax.text(xs[idx_max], z_base, y_plot[idx_max], - f" {-Mz[idx_max]:.2f}", color="#333333", fontsize=8, fontweight="bold", zorder=6, gid="max_line", + f" {Mz[idx_max]:.2f}", color="#333333", fontsize=8, fontweight="bold", zorder=6, gid="max_line", bbox=dict(facecolor='white', edgecolor='none', alpha=0.85, pad=1.0)) # Min line (Dashed, Tagged for toggling) @@ -696,12 +696,12 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): ax.plot([xs[idx_min], xs[idx_min]], [z_base, z_base], [0, y_plot[idx_min]], color="#0074D9", linewidth=1.5, linestyle="--", zorder=3, gid="min_line") ax.text(xs[idx_min], z_base, y_plot[idx_min], - f" {-Mz[idx_min]:.2f}", color="#333333", fontsize=8, fontweight="bold", zorder=6, gid="min_line", + f" {Mz[idx_min]:.2f}", color="#333333", fontsize=8, fontweight="bold", zorder=6, gid="min_line", bbox=dict(facecolor='white', edgecolor='none', alpha=0.85, pad=1.0)) # 'All' values annotations (Slightly lighter grey, Tagged for toggling) for xi, yi, mzi in zip(xs, y_plot, Mz): - ax.text(xi, z_base, yi, f" {-mzi:.2f}", color="#555555", fontsize=7, zorder=5, gid="all_vals") + ax.text(xi, z_base, yi, f" {mzi:.2f}", color="#555555", fontsize=7, zorder=5, gid="all_vals") sc = ax.scatter(xs, z_arr, y_plot, color=moment_color, s=30, zorder=5, depthshade=False) From 30546a6bb034233d1015e4a089b10b335acddad9 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 7 May 2026 17:26:12 +0530 Subject: [PATCH 196/225] designer minor updates for fatigue and deflection. --- .../core/bridge_types/plate_girder/designer.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index af5b99c83..6e5c6bb79 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -568,9 +568,10 @@ def _sum_defl(lcs: list) -> float: # Apply composite stiffness correction to post-composite loads (SDL + live). # IRC 22:2015 Cl.604.3.2: deflection limits checked at SLS after composite action. + # Construction deflection (girder SW + wet concrete) is compensated by pre-camber + # and must NOT be added to the service deflection check (L/600 total). delta_live_mm = delta_live_m / stiffness_ratio * 1000.0 - delta_total_mm = (delta_construction_m - + (delta_sdl_m + delta_live_m) / stiffness_ratio) * 1000.0 + delta_total_mm = (delta_sdl_m + delta_live_m) / stiffness_ratio * 1000.0 # ------------------------------------------------------------------ # (4) Fatigue ranges from moving-load envelope @@ -593,8 +594,10 @@ def _sum_defl(lcs: list) -> float: mz_all = np.concatenate([mz_i, mz_j]) mz_all = mz_all[~np.isnan(mz_all)] if mz_all.size: - # Nm → Nmm : ×1000 ; σ = M/Ze - mz_range_Nmm = (mz_all.max() - mz_all.min()) * 1000.0 + # Nm → Nmm : ×1000 ; σ = M/Ze + # Use max absolute value (not max−min): Mz_i and Mz_j carry + # opposite signs by beam equilibrium, so max−min doubles the range. + mz_range_Nmm = float(np.abs(mz_all).max()) * 1000.0 stress_range_MPa = float(mz_range_Nmm / Ze_steel_mm3) except (KeyError, ValueError): pass @@ -612,7 +615,8 @@ def _sum_defl(lcs: list) -> float: vy_all = np.concatenate([vy_i, vy_j]) vy_all = vy_all[~np.isnan(vy_all)] if vy_all.size: - vy_range_N = vy_all.max() - vy_all.min() + # Same sign-convention fix: use max absolute value. + vy_range_N = float(np.abs(vy_all).max()) shear_range_MPa = float(vy_range_N / Aw_mm2) except (KeyError, ValueError): pass From 2a00547a05faa43f67544b3296f4a6c25b0f305c Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Thu, 7 May 2026 13:02:49 +0530 Subject: [PATCH 197/225] =?UTF-8?q?fix:=20reconfigure=20stdout=20to=20UTF-?= =?UTF-8?q?8=20to=20prevent=20UnicodeEncodeError=20on=20Windows=20for=20?= =?UTF-8?q?=E2=89=A4=20characters=20in=20DCR=20output?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/osdagbridge/core/bridge_types/plate_girder/designer.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index 6e5c6bb79..df4b3e17c 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -3,6 +3,10 @@ from __future__ import annotations import math +import sys + +if sys.stdout.encoding and sys.stdout.encoding.lower() not in ('utf-8', 'utf-16'): + sys.stdout.reconfigure(encoding='utf-8', errors='replace') from dataclasses import dataclass, field from datetime import datetime from typing import Dict, List, Optional, Any From eac033fe46dd071839d420aa9770ccc875373153 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 8 May 2026 01:28:07 +0530 Subject: [PATCH 198/225] designer correction for stud and composite property updates. --- .../bridge_types/plate_girder/designer.py | 229 ++++++++---------- .../plate_girder/initial_sizing.py | 41 ++++ .../core/utils/codes/irc22_2015.py | 48 ++-- 3 files changed, 156 insertions(+), 162 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index df4b3e17c..91e17991b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -12,6 +12,7 @@ from typing import Dict, List, Optional, Any from osdagbridge.core.bridge_types.plate_girder.analysis_results import PlateGirderAnalysisResults +from osdagbridge.core.bridge_types.plate_girder.initial_sizing import composite_section_properties from osdagbridge.core.utils.codes.irc22_2015 import IRC22_2014 from osdagbridge.core.utils.codes.irc6_2017 import IRC6_2017 from osdagbridge.core.utils.codes.keyfile import ( @@ -753,7 +754,9 @@ class CapacityResults: Qr_kN: float = 0.0 # Cl.606.3.2 — fatigue stud capacity stud_spacing_full_shear_mm: float = 0.0 # Cl.606.4.1.1 — SL2 (full shear) stud_spacing_fatigue_mm: float = 0.0 # Cl.606.4.2 — SR (SLS fatigue) - stud_spacing_governing_mm: float = 0.0 # min(SL1, SL2, SR) + stud_spacing_governing_mm: float = 0.0 # min(SL1, SL2, SR) — required limit + stud_spacing_provided_mm: float = 0.0 # actual provided (user input or = governing) + stud_spacing_user_provided: bool = False # True when user explicitly gave a spacing stud_detailing_ok: bool = True # Cl.606.6 — all detailing checks pass source: str = "built-in" details: Dict[str, dict] = field(default_factory=dict) @@ -1003,49 +1006,33 @@ def compute_combined_bending_shear(self, Md_kNm: float, V_kN: float, Vd_kN: floa # IRC 22:2015 Cl.604.3 — short-term and long-term composite section properties. # These are needed for SLS stress calculations (Cl.604.3.1) and stud spacing (Cl.606.4.1). - def compute_composite_section_props(self, beff_mm: float) -> dict: + def compute_composite_section_props(self, beff_mm: float) -> dict: """ Compute transformed composite second moment of area, neutral-axis depths, and section moduli for both short-term (n = Es/Ecm) and long-term (2n = Es/(0.5*Ecm)) modular ratios per IRC 22:2015 Cl.604.3. + Delegates the geometry to composite_section_properties() from initial_sizing.py. Coordinate system: all y-distances measured from BOTTOM of steel section (upward +ve). """ sec, mat, slab = self.sec, self.mat, self.slab mod = IRC22_2014.cl_604_3_modular_ratio(Ecm=mat.Ecm, Kc=0.5) - n_short = mod["m_short_term"] # Es/Ecm ≥ 7.5 - n_long = mod["m_long_term"] # Es/(0.5*Ecm) ≥ 15.0 - ds = slab.thickness - h_haunch = slab.haunch_depth - - def _props(n: float) -> dict: - Ac_trans = beff_mm * ds / n # transformed slab area (steel-side) - y_steel = sec.y_cg_from_bot # steel CG from bottom of steel - y_slab = sec.D + h_haunch + ds / 2.0 # slab CG from bottom of steel - A_total = sec.A_steel + Ac_trans - y_comp_bot = (sec.A_steel * y_steel + Ac_trans * y_slab) / A_total # composite NA from bot steel - I_steel = sec.Iz_steel + sec.A_steel * (y_comp_bot - y_steel) ** 2 - I_conc = beff_mm * ds ** 3 / (12.0 * n) + Ac_trans * (y_comp_bot - y_slab) ** 2 - I_comp = I_steel + I_conc - total_depth = sec.D + h_haunch + ds - y_top = total_depth - y_comp_bot # distance from top of slab to composite NA - y_bot = y_comp_bot # distance from composite NA to bottom of steel - return { - "n" : round(n, 3), - "Ac_trans_mm2" : round(Ac_trans, 1), - "y_comp_from_bot_mm" : round(y_comp_bot, 3), - "y_top_mm" : round(y_top, 3), - "y_bot_mm" : round(y_bot, 3), - "I_comp_mm4" : round(I_comp, 0), - "S_top_mm3" : round(I_comp / y_top, 0), - "S_bot_mm3" : round(I_comp / y_bot, 0), - } + n_short = mod["m_short_term"] # Es/Ecm ≥ 7.5 + n_long = mod["m_long_term"] # Es/(0.5*Ecm) ≥ 15.0 return { - "short_term" : _props(n_short), - "long_term" : _props(n_long), - "clause" : mod["clause"], - "source" : "IRC22_2014", + "short_term" : composite_section_properties( + beff_mm=beff_mm, ds_mm=slab.thickness, h_haunch_mm=slab.haunch_depth, + A_steel_mm2=sec.A_steel, Iz_steel_mm4=sec.Iz_steel, + y_cg_from_bot_mm=sec.y_cg_from_bot, D_steel_mm=sec.D, n=n_short, + ), + "long_term" : composite_section_properties( + beff_mm=beff_mm, ds_mm=slab.thickness, h_haunch_mm=slab.haunch_depth, + A_steel_mm2=sec.A_steel, Iz_steel_mm4=sec.Iz_steel, + y_cg_from_bot_mm=sec.y_cg_from_bot, D_steel_mm=sec.D, n=n_long, + ), + "clause" : mod["clause"], + "source" : "IRC22_2014", } # IRC 22:2015 Cl.604.3.1 — actual SLS stresses from service moment. @@ -1327,28 +1314,20 @@ def compute_stud_capacity(self) -> dict: # IRC 22:2015 Cl.606.4.1 — required headed-stud spacing at ULS (longitudinal shear). def compute_stud_spacing(self, Vu_kN: float, beff_mm: float, - xu_mm: float, Qu_kN: float) -> dict: - sec, mat, slab = self.sec, self.mat, self.slab - ds, h_haunch = slab.thickness, slab.haunch_depth + xu_mm: float, Qu_kN: float, + Ic_mm4: float = None) -> dict: + mat, slab = self.mat, self.slab n_studs = self.studs.n_per_section - # ys_mm: distance from the top of the composite section (top of slab) down to steel CG. - # Steel CG from bottom of steel = y_cg_from_bot. - # Total composite depth = ds + h_haunch + sec.D (measured from bottom of steel upward). - # Distance from top of composite section to steel CG = total depth − y_cg_from_bot. - ys_mm = ds + h_haunch + (sec.D - sec.y_cg_from_bot) - res = IRC22_2014.cl_606_4_1_longitudinal_shear_and_spacing( V_kN=Vu_kN, beff_mm=beff_mm, xu_mm=xu_mm, - t_slab_mm=ds, + t_slab_mm=slab.thickness, Qu_kN=Qu_kN, Es_MPa=mat.Es, Ecm_MPa=mat.Ecm, - As_mm2=sec.A_steel, - Is_mm4=sec.Iz_steel, - ys_mm=ys_mm, + Ic_mm4=Ic_mm4, studs_per_section=n_studs, ) return { @@ -1570,16 +1549,8 @@ def compute_all( results.Qu_kN = stud_cap["Qu_kN"] results.details["stud_capacity"] = stud_cap - # 12. Stud spacing (ULS) - if Vu_kN > 0 and results.xu_mm > 0: - stud_sp = self.compute_stud_spacing( - Vu_kN, results.beff_mm, results.xu_mm, results.Qu_kN - ) - results.stud_spacing_mm = stud_sp["spacing_mm"] - results.VL_N_per_mm = stud_sp["VL_N_per_mm"] - results.details["stud_spacing"] = stud_sp - - # 13. Composite section properties (Cl.604.3) + # 12. Composite section properties (Cl.604.3) — computed before stud spacing so that + # the elastic I_comp can be passed to cl_606_4_1 instead of recomputing it there. comp_props = self.compute_composite_section_props(results.beff_mm) short = comp_props["short_term"] results.I_comp_short_mm4 = short["I_comp_mm4"] @@ -1587,6 +1558,16 @@ def compute_all( results.y_bot_comp_mm = short["y_bot_mm"] results.details["composite_section_props"] = comp_props + # 13. Stud spacing (ULS) — passes pre-computed I_comp to avoid duplicate calculation. + if Vu_kN > 0 and results.xu_mm > 0: + stud_sp = self.compute_stud_spacing( + Vu_kN, results.beff_mm, results.xu_mm, results.Qu_kN, + Ic_mm4=results.I_comp_short_mm4, + ) + results.stud_spacing_mm = stud_sp["spacing_mm"] + results.VL_N_per_mm = stud_sp["VL_N_per_mm"] + results.details["stud_spacing"] = stud_sp + # 13b. Fatigue stud capacity (Cl.606.3.2). stud_fat_cap = self.compute_stud_fatigue_capacity() results.Qr_kN = stud_fat_cap.get("Qr_kN") or 0.0 @@ -1647,10 +1628,21 @@ def compute_all( stud_lim = self.compute_stud_spacing_limits( provided_spacing_mm=provided_stud_spacing_mm ) - results.stud_spacing_max_mm = stud_lim["max_spacing_mm"] - results.stud_spacing_min_mm = stud_lim["min_spacing_mm"] + results.stud_spacing_max_mm = stud_lim["max_spacing_mm"] + results.stud_spacing_min_mm = stud_lim["min_spacing_mm"] results.details["stud_spacing_limits"] = stud_lim + # Resolve provided spacing now that max_spacing is known. + # User-supplied spacing is used as-is. + # If not given, default = min(governing_required, max_spacing): geometry always governs + # when the loading demand allows wider spacing than the code geometric limit. + results.stud_spacing_user_provided = (provided_stud_spacing_mm is not None) + results.stud_spacing_provided_mm = ( + provided_stud_spacing_mm if provided_stud_spacing_mm is not None + else min(results.stud_spacing_governing_mm, results.stud_spacing_max_mm) + if results.stud_spacing_governing_mm > 0 else 0.0 + ) + # 17. Transverse shear check (Cl.606.10). if results.VL_N_per_mm > 0: trans_shear = self.compute_transverse_shear(results.VL_N_per_mm) @@ -1763,36 +1755,44 @@ def run_all_checks(self) -> List[CheckResult]: note=f"λ_LT={c.lambda_LT:.4f}, χ_LT={c.chi_LT:.4f}") # ── CATEGORY 5: Resistance to Longitudinal & Transverse Shear ───────── - # 5a. ULS stud spacing (Cl.606.4.1): SL1 ≤ code geometric max. - if c.stud_spacing_mm > 0.0: - self._add_check(6, "Stud Spacing ULS (SL1)", "Cl.606.4.1", - c.stud_spacing_mm, c.stud_spacing_max_mm, "mm", - note=f"SL1={c.stud_spacing_mm:.0f} ≤ max={c.stud_spacing_max_mm:.0f} mm") - - # 5b. Full shear connection spacing (Cl.606.4.1.1): SL2 ≤ code geometric max. - if c.stud_spacing_full_shear_mm > 0.0: - self._add_check(6, "Stud Spacing Full-Shear (SL2)", "Cl.606.4.1.1", - c.stud_spacing_full_shear_mm, c.stud_spacing_max_mm, "mm", - note=f"SL2={c.stud_spacing_full_shear_mm:.0f} ≤ max={c.stud_spacing_max_mm:.0f} mm") - - # 5c. Fatigue SLS stud spacing (Cl.606.4.2): SR ≤ code geometric max. - if c.stud_spacing_fatigue_mm > 0.0: - self._add_check(6, "Stud Spacing Fatigue (SR)", "Cl.606.4.2", - c.stud_spacing_fatigue_mm, c.stud_spacing_max_mm, "mm", - note=f"SR={c.stud_spacing_fatigue_mm:.0f} ≤ max={c.stud_spacing_max_mm:.0f} mm") - - # 5d. Governing spacing upper limit (Cl.606.9): Sactual ≤ max. - if c.stud_spacing_governing_mm > 0.0: - self._add_check(7, "Stud Spacing Governing ≤ Max", "Cl.606.9", - c.stud_spacing_governing_mm, c.stud_spacing_max_mm, "mm", - note=(f"Sact=min(SL1,SL2,SR)={c.stud_spacing_governing_mm:.0f} mm, " - f"max={c.stud_spacing_max_mm:.0f} mm")) - - # 5e. Governing spacing lower limit (Cl.606.9): Sactual ≥ min (75 mm). - if c.stud_spacing_governing_mm > 0.0: - self._add_check(7, "Stud Spacing Governing ≥ Min", "Cl.606.9", - c.stud_spacing_min_mm, c.stud_spacing_governing_mm, "mm", - note=f"min={c.stud_spacing_min_mm:.0f} ≤ Sact={c.stud_spacing_governing_mm:.0f} mm") + s_prov = c.stud_spacing_provided_mm + s_gov = c.stud_spacing_governing_mm # required governing spacing (min of SL1, SL2, SR) + + if c.stud_spacing_user_provided: + # User gave an actual spacing — verify it against every requirement. + # 5a. Provided ≤ SL1 (ULS). + if c.stud_spacing_mm > 0.0: + self._add_check(6, "Stud Spacing ULS (SL1)", "Cl.606.4.1", + s_prov, c.stud_spacing_mm, "mm", + note=f"Sprov={s_prov:.0f} ≤ SL1={c.stud_spacing_mm:.0f} mm") + # 5b. Provided ≤ SL2 (full shear). + if c.stud_spacing_full_shear_mm > 0.0: + self._add_check(6, "Stud Spacing Full-Shear (SL2)", "Cl.606.4.1.1", + s_prov, c.stud_spacing_full_shear_mm, "mm", + note=f"Sprov={s_prov:.0f} ≤ SL2={c.stud_spacing_full_shear_mm:.0f} mm") + # 5c. Provided ≤ SR (fatigue). + if c.stud_spacing_fatigue_mm > 0.0: + self._add_check(6, "Stud Spacing Fatigue (SR)", "Cl.606.4.2", + s_prov, c.stud_spacing_fatigue_mm, "mm", + note=f"Sprov={s_prov:.0f} ≤ SR={c.stud_spacing_fatigue_mm:.0f} mm") + # 5d. Provided ≤ geometric max (Cl.606.9). + self._add_check(7, "Stud Spacing ≤ Max (Cl.606.9)", "Cl.606.9", + s_prov, c.stud_spacing_max_mm, "mm", + note=f"Sprov={s_prov:.0f} ≤ max={c.stud_spacing_max_mm:.0f} mm") + # 5e. Provided ≥ geometric min (Cl.606.9). + self._add_check(7, "Stud Spacing ≥ Min (Cl.606.9)", "Cl.606.9", + c.stud_spacing_min_mm, s_prov, "mm", + note=f"min={c.stud_spacing_min_mm:.0f} ≤ Sprov={s_prov:.0f} mm") + elif s_gov > 0.0: + # No user spacing — check feasibility only. + # SL1/SL2/SR are upper bounds on spacing; max_spacing is also an upper bound. + # When s_gov > max_spacing, geometry governs and the design is fine (use max_spacing). + # The one meaningful check: the governing effective spacing ≥ min_spacing (75 mm). + s_eff = min(s_gov, c.stud_spacing_max_mm) + self._add_check(7, "Stud Spacing Feasibility (Cl.606.9)", "Cl.606.9", + c.stud_spacing_min_mm, s_eff, "mm", + note=(f"min={c.stud_spacing_min_mm:.0f} ≤ " + f"Seff=min(Sreq,max)={s_eff:.0f} mm")) # 5f. Stud detailing (Cl.606.6): demand=0 (all pass) or 1 (any fail). det = c.details.get("stud_detailing", {}) @@ -2201,49 +2201,20 @@ def _composite_stiffness_ratio(config: BridgeConfig) -> float: should deflect on the stiffer composite section. Dividing bare-steel-model deflections by this ratio gives the physically correct SLS deflection. - Formula per IRC 22:2015 Cl.603.2.1 (effective width) and Cl.604.3 (modular - ratio). Returns a value ≥ 1.0; if the composite section cannot be - computed (e.g. missing slab data) the ratio defaults to 1.0 (conservative). + Uses composite_section_properties() from initial_sizing so the formula lives + in one place. Returns a value ≥ 1.0; defaults to 1.0 (conservative) on error. """ try: - sec = config.section # mm - mat = config.material - slab = config.slab # mm - geo = config.geometry # m (span, beam_spacing) - - # IRC 22:2015 Cl.604.3 — short-term modular ratio (Kc=1.0 for live loads); - # lower bound 7.5 as required by the clause. - n = mat.Es / mat.Ecm - n = max(n, 7.5) - - # Effective width (inner beam, simply supported) — IRC 22:2015 Cl.603.2.1. - Lo_mm = geo.span * 1000.0 - B_mm = geo.beam_spacing * 1000.0 - beff_mm = min(Lo_mm / 4.0, B_mm) - - t_slab = slab.thickness # mm - h_haunch = slab.haunch_depth # mm - - # Transformed concrete area (steel-equivalent). - Ac_trans = beff_mm * t_slab / n # mm² - - # Steel centroid and concrete slab centroid, both measured from bottom of steel. - y_steel = sec.y_cg_from_bot - y_conc = sec.D + h_haunch + t_slab / 2.0 - - # Composite neutral axis from bottom of steel. - A_total = sec.A_steel + Ac_trans - y_comp_na = (sec.A_steel * y_steel + Ac_trans * y_conc) / A_total - - # Composite Iz about the composite NA (all expressed in steel terms). - I_steel_shifted = (sec.Iz_steel - + sec.A_steel * (y_comp_na - y_steel) ** 2) - I_conc_trans = (beff_mm * t_slab ** 3 / (12.0 * n) - + Ac_trans * (y_comp_na - y_conc) ** 2) - I_composite = I_steel_shifted + I_conc_trans - - ratio = I_composite / sec.Iz_steel - return max(ratio, 1.0) + sec, mat, slab, geo = config.section, config.material, config.slab, config.geometry + beff_mm = min(geo.span * 1000.0 / 4.0, geo.beam_spacing * 1000.0) + mod = IRC22_2014.cl_604_3_modular_ratio(Ecm=mat.Ecm, Kc=0.5) + props = composite_section_properties( + beff_mm=beff_mm, ds_mm=slab.thickness, h_haunch_mm=slab.haunch_depth, + A_steel_mm2=sec.A_steel, Iz_steel_mm4=sec.Iz_steel, + y_cg_from_bot_mm=sec.y_cg_from_bot, D_steel_mm=sec.D, + n=mod["m_short_term"], + ) + return max(props["I_comp_mm4"] / sec.Iz_steel, 1.0) except Exception: return 1.0 # conservative fallback: no composite correction applied diff --git a/src/osdagbridge/core/bridge_types/plate_girder/initial_sizing.py b/src/osdagbridge/core/bridge_types/plate_girder/initial_sizing.py index 2cff258ef..ff8b7be13 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/initial_sizing.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/initial_sizing.py @@ -630,6 +630,47 @@ def compute_section_properties( } +def composite_section_properties( + beff_mm: float, + ds_mm: float, + h_haunch_mm: float, + A_steel_mm2: float, + Iz_steel_mm4: float, + y_cg_from_bot_mm: float, + D_steel_mm: float, + n: float, +) -> dict: + """ + Transformed composite section properties for a steel-concrete composite girder. + + Concrete area is converted to equivalent steel area by dividing by n = Es/Ecm. + All dimensions in mm; coordinate origin at bottom of steel section (upward +ve). + + Returns I_comp_mm4, composite NA depths, section moduli, and transformed area. + """ + Ac_trans = beff_mm * ds_mm / n + y_steel = y_cg_from_bot_mm + y_slab = D_steel_mm + h_haunch_mm + ds_mm / 2.0 + A_total = A_steel_mm2 + Ac_trans + y_comp_bot = (A_steel_mm2 * y_steel + Ac_trans * y_slab) / A_total + I_steel = Iz_steel_mm4 + A_steel_mm2 * (y_comp_bot - y_steel) ** 2 + I_conc = beff_mm * ds_mm ** 3 / (12.0 * n) + Ac_trans * (y_comp_bot - y_slab) ** 2 + I_comp = I_steel + I_conc + total_depth = D_steel_mm + h_haunch_mm + ds_mm + y_top = total_depth - y_comp_bot + y_bot = y_comp_bot + return { + "n" : round(n, 3), + "Ac_trans_mm2" : round(Ac_trans, 1), + "y_comp_from_bot_mm" : round(y_comp_bot, 3), + "y_top_mm" : round(y_top, 3), + "y_bot_mm" : round(y_bot, 3), + "I_comp_mm4" : round(I_comp, 0), + "S_top_mm3" : round(I_comp / y_top, 0), + "S_bot_mm3" : round(I_comp / y_bot, 0), + } + + # Legacy function for backward compatibility def preliminary_sizing(dto): """Legacy stub - use BridgeConfigurationSolver instead.""" diff --git a/src/osdagbridge/core/utils/codes/irc22_2015.py b/src/osdagbridge/core/utils/codes/irc22_2015.py index 427b0d2b2..a3d5701c5 100644 --- a/src/osdagbridge/core/utils/codes/irc22_2015.py +++ b/src/osdagbridge/core/utils/codes/irc22_2015.py @@ -1699,22 +1699,17 @@ def cl_606_3_2_stud_connector_fatigue_strength( def cl_606_4_1_longitudinal_shear_and_spacing( V_kN, # Vertical shear at section (kN) beff_mm, # Effective slab width (mm) - xu_mm, # NA depth from top concrete (mm) -> from IRC22 603.3.1 + xu_mm, # elastic composite NA depth from top of slab (mm) t_slab_mm, # slab thickness (mm) - Qu_kN, # stud design capacity (kN) -> from IRC22 606.3.1 - - # Material - Es_MPa=E_STEEL_MPA, # MPa (as per IRC 22 clause 604.3) - Ecm_MPa=None, # MPa secant modulus of concrete (can be taken from IRC22 Table III.1) + Qu_kN, # stud design capacity (kN) -> from IRC22 606.3.1 - # Steel section inputs - As_mm2=0.0, # steel area (mm2) (from software/user) - Is_mm4=0.0, # steel second moment of area (mm4) (from software/user) - ys_mm=None, # CG distance from top of section to steel CG (mm) - D_mm=None, # total depth of girder (mm) - needed only if ys_mm not given + # Material + Es_MPa=E_STEEL_MPA, # MPa (as per IRC 22 clause 604.3) + Ecm_MPa=None, # MPa secant modulus of concrete (IRC22 Table III.1) - Ic_mm4=None, # composite inertia if already known (optional) + Ic_mm4=None, # composite second moment of area (mm4) — required; + # compute via composite_section_properties() in initial_sizing.py studs_per_section=2 ): """ @@ -1723,13 +1718,9 @@ def cl_606_4_1_longitudinal_shear_and_spacing( Longitudinal Shear and Spacing of Shear Connectors (ULS) - Notes / Corrections: - - Ecm is used instead of Ec. (Ecm may be taken from IRC 22 Table III.1) - - xu is obtained from IRC 22 Clause 603.3.1 (neutral axis depth) - - Composite inertia must include steel inertia Is_mm4 (previously missing) - - Qu must come from Clause 606.3.1, not assumed 100 kN - - ys_mm is CG distance steel to top of section; - default assumption: ys = D/2 + t_slab (if ys not given) + Ic_mm4 must be supplied by the caller — use composite_section_properties() + from initial_sizing.py (IRC 22:2015 Cl.604.3). + Qu must come from Clause 606.3.1. """ if Ecm_MPa is None: @@ -1742,12 +1733,6 @@ def cl_606_4_1_longitudinal_shear_and_spacing( V_N = V_kN * 1e3 Qu_N = Qu_kN * 1e3 - # Default ys if not provided - if ys_mm is None: - if D_mm is None: - raise ValueError("Provide either ys_mm OR D_mm (for default ys = D/2 + t_slab)") - ys_mm = (D_mm / 2.0) + t_slab_mm - # Modular ratio (n) n = Es_MPa / Ecm_MPa @@ -1760,15 +1745,12 @@ def cl_606_4_1_longitudinal_shear_and_spacing( # Distance from NA to centroid of concrete compression block Y = xu_mm - (t_eff / 2.0) - # Composite inertia calculation (if not supplied) if Ic_mm4 is None: - # Steel inertia about composite NA - I_steel = Is_mm4 + As_mm2 * (ys_mm - xu_mm) ** 2 - - # Concrete inertia about composite NA (steel-side: divide by n) - I_conc = (beff_mm * (t_eff ** 3) / (12.0 * n)) + Aec * (Y ** 2) - - Ic_mm4 = I_steel + I_conc + raise ValueError( + "Ic_mm4 must be provided. Compute it using " + "composite_section_properties() from initial_sizing.py " + "(IRC 22:2015 Cl.604.3)." + ) # Longitudinal shear per unit length (N/mm) VL_N_per_mm = V_N * (Aec * Y) / Ic_mm4 From 5e50075e2354f4e955bc014d648e58e1f5f1e5c3 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 8 May 2026 14:54:17 +0530 Subject: [PATCH 199/225] designer update with stiffener details and checks including code part which will be moved to IS800 later --- .../bridge_types/plate_girder/designer.py | 443 +++++++++++++++++- 1 file changed, 442 insertions(+), 1 deletion(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index 91e17991b..583da3d12 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -240,6 +240,29 @@ class FatigueConfig: tfn: float = FATIGUE_SHEAR_STRENGTH_MPA # Cl.605.3 — shear fatigue strength at 5e6 cycles +@dataclass +class StiffenerConfig: + # Stiffener inputs for IRC 24-2010 Cl.509.7 / IS 800:2007 Cl.8.7 checks. + # Set c_mm > 0 to enable intermediate stiffener checks; bs_R_kN > 0 for bearing stiffener checks. + + # ── Intermediate transverse stiffener (Cl.509.7.2 / IS 800 Cl.8.7.2) ───────────── + c_mm: float = 0.0 # panel spacing between adjacent stiffeners (mm) + tq_mm: float = 0.0 # stiffener plate thickness (mm) + H_mm: float = 0.0 # outstanding leg height (mm) + n_sides: int = 1 # 1 = one-sided, 2 = two-sided + Iys_mm4: float = 0.0 # provided MI (mm⁴); 0 = auto-compute from flat-plate formula + V_kN: float = 0.0 # design shear at stiffener location (kN) + Vcr_kN: float = 0.0 # critical shear resistance at that location (kN) + + # ── Bearing stiffener (Cl.509.7.3 / IS 800 Cl.8.7.3) ────────────────────────────── + bs_tq_mm: float = 0.0 # stiffener plate thickness (mm) + bs_H_mm: float = 0.0 # outstanding leg height (mm) + bs_n_plates: int = 2 # number of stiffener plates bearing on flange + bs_R_kN: float = 0.0 # design reaction / concentrated load (kN) + bs_b1_mm: float = 0.0 # stiff bearing length on flange (0 = auto via IS 800 Cl.8.7.1.3) + bs_Iys_mm4: float = 0.0 # provided MI (mm⁴) for bearing stiffener; 0 = auto-compute + + @dataclass class BridgeConfig: # Single aggregate input consumed by DemandExtractor / IRC22CapacityCalculator / DCREngine / Report. @@ -249,6 +272,7 @@ class BridgeConfig: geometry: GeometryConfig studs: ShearStudConfig = field(default_factory=ShearStudConfig) fatigue: FatigueConfig = field(default_factory=FatigueConfig) + stiffener: Optional[StiffenerConfig] = None # None = stiffener checks skipped @classmethod def from_plate_girder_bridge(cls, bridge: Any) -> "BridgeConfig": @@ -761,6 +785,20 @@ class CapacityResults: source: str = "built-in" details: Dict[str, dict] = field(default_factory=dict) + # ── Intermediate stiffener (IRC 24-2010 Cl.509.7.2 / IS 800 Cl.8.7.2) ────────── + is_H_limit_mm: float = 0.0 # Cl.509.7.2.4 — limiting outstanding leg (14tqε / 20tqε) + is_Iys_min_mm4: float = 0.0 # Cl.509.7.2.4 — minimum required MI + is_Iys_prov_mm4: float = 0.0 # Cl.509.7.2.4 — provided MI + is_Fqd_kN: float = 0.0 # Cl.509.7.2.5 — stiffener design buckling resistance + is_Fq_kN: float = 0.0 # Cl.509.7.2.5 — demand = max((V − Vcr)/γm0, 0) + + # ── Bearing stiffener (IRC 24-2010 Cl.509.7.3 / IS 800 Cl.8.7.3) ─────────────── + bs_Fcdw_wb_kN: float = 0.0 # Cl.509.7.3.1 — web bearing zone buckling resistance + bs_Fcdw_lc_kN: float = 0.0 # Cl.509.7.3.2 — local crushing resistance + bs_Fpsd_kN: float = 0.0 # Cl.509.7.3.3 — bearing contact resistance + bs_Fcd_kN: float = 0.0 # Cl.509.7.2.5 — stiffener column buckling resistance + bs_R_kN: float = 0.0 # reaction demand + class IRC22CapacityCalculator: # Clause-by-clause IRC 22:2015 capacity calculator driven by a single BridgeConfig. @@ -1467,6 +1505,245 @@ def compute_transverse_shear(self, VL_N_per_mm: float) -> dict: "source" : "IRC22_2014", } + # ============================================================================== + # STIFFENER CHECKS — IRC 24-2010 Cl.509.7 / IS 800:2007 Cl.8.7 + # TODO: Move these functions to IS800_2007 when ready. + # ============================================================================== + + def compute_intermediate_stiffener(self) -> dict: + """Intermediate transverse stiffener checks per IRC 24-2010 Cl.509.7.2 / IS 800 Cl.8.7.2. + + Always computes geometry-based required dimensions (H_max, tq_req, c_req). + Runs verification checks only when c_mm / tq_mm / H_mm are all provided. + """ + sec, mat = self.sec, self.mat + d = sec.dw + tw = sec.tw + fy = mat.fy + E = mat.Es + gm0 = mat.gamma_m0 + eps = math.sqrt(250.0 / fy) + + # Physical outstand limit — stiffener must fit between web and flange edge (both sides) + H_max = (min(sec.bf_top, sec.bf_bot) - tw) / 2.0 + + # Minimum tq to satisfy the outstanding-leg limit at H_max + tq_req_1sided = H_max / (14.0 * eps) if eps > 0 else 0.0 + tq_req_2sided = H_max / (20.0 * eps) if eps > 0 else 0.0 + + cfg = self.cfg.stiffener + full_check = cfg and cfg.c_mm > 0 and cfg.tq_mm > 0 and cfg.H_mm > 0 + + if not full_check: + # Design guidance: compute required spacing for the minimum viable plate + # Assume one-sided (conservative), tq = tq_req_1sided, H = H_max + tq_des = tq_req_1sided + Iys_des = tq_des * H_max**3 / 3.0 # flat-plate one-sided, about face of web + # Minimum c such that Iys_min(c) ≤ Iys_des (from 1.5·d³·tw³/c² ≤ Iys_des) + c_req = (math.sqrt(1.5 * d**3 * tw**3 / Iys_des) + if Iys_des > 0 else 0.0) + # If c_req/d ≥ √2 the simpler formula 0.75·d·tw³ governs and is always satisfiable + if c_req > 0 and (c_req / d) >= math.sqrt(2.0): + c_req = 0.0 + return { + "design_guidance" : True, + "H_max_mm" : round(H_max, 1), + "tq_req_1sided_mm" : round(tq_req_1sided, 2), + "tq_req_2sided_mm" : round(tq_req_2sided, 2), + "c_req_min_mm" : round(c_req, 1), + "Iys_at_Hmax_mm4" : round(Iys_des, 1), + } + + # ── Full verification ──────────────────────────────────────────────────────── + c = cfg.c_mm + tq = cfg.tq_mm + H = cfg.H_mm + n_sides = cfg.n_sides + + # Cl.509.7.2.4 — outstanding leg limit + H_limit = (14.0 if n_sides == 1 else 20.0) * tq * eps + # Minimum tq needed for the provided H to satisfy the leg limit + tq_req_provided = H / ((14.0 if n_sides == 1 else 20.0) * eps) + + # Cl.509.7.2.4 — minimum MI + if (c / d) < math.sqrt(2.0): + Iys_min = 1.5 * d**3 * tw**3 / c**2 + iys_formula = "1.5·d³·tw³/c²" + else: + Iys_min = 0.75 * d * tw**3 + iys_formula = "0.75·d·tw³" + + # Provided MI — auto-compute from flat-plate formula when not explicitly given + if cfg.Iys_mm4 > 0: + Iys_prov = cfg.Iys_mm4 + elif n_sides == 1: + Iys_prov = tq * H**3 / 3.0 + else: + Iys_prov = 2.0 * (tq * H**3 / 12.0 + tq * H * (tw / 2.0 + H / 2.0)**2) + + # Cl.509.7.2.5 — buckling check + h_w_strip = min(20.0 * tw, c / 2.0) + Aeff = n_sides * H * tq + n_sides * h_w_strip * tw + Astiff = n_sides * H * tq + + rys = math.sqrt(Iys_prov / Aeff) if Aeff > 0 else 0.0 + KL = 0.7 * d + KL_r = KL / rys if rys > 0 else 1e9 + + fcd = IS800_2007.cl_7_1_2_1_design_compressisive_stress_plategirder(fy, gm0, KL_r, E) + Fqd_kN = fcd * Astiff / 1000.0 + Fq_kN = max((cfg.V_kN - cfg.Vcr_kN) / gm0, 0.0) + + return { + "design_guidance" : False, + "H_max_mm" : round(H_max, 1), + "tq_req_1sided_mm" : round(tq_req_1sided, 2), + "tq_req_2sided_mm" : round(tq_req_2sided, 2), + "H_mm" : H, + "H_limit_mm" : round(H_limit, 3), + "H_limit_type" : f"{'14' if n_sides == 1 else '20'}·tq·ε", + "tq_req_provided_mm" : round(tq_req_provided, 2), + "Iys_prov_mm4" : round(Iys_prov, 3), + "Iys_min_mm4" : round(Iys_min, 3), + "iys_formula" : iys_formula, + "h_w_strip_mm" : round(h_w_strip, 3), + "Aeff_mm2" : round(Aeff, 3), + "Astiff_mm2" : round(Astiff, 3), + "rys_mm" : round(rys, 3), + "KL_mm" : round(KL, 3), + "KL_r" : round(KL_r, 3), + "alpha" : 0.49, + "fcd_MPa" : round(fcd, 3), + "Fqd_kN" : round(Fqd_kN, 3), + "Fq_kN" : round(Fq_kN, 3), + } + + def compute_bearing_stiffener(self) -> dict: + """Bearing stiffener checks per IRC 24-2010 Cl.509.7.3 / IS 800 Cl.8.7.3. + + Requires bs_R_kN > 0 (reaction known). + Runs full verification when bs_tq_mm and bs_H_mm are also provided; + otherwise returns design guidance (required tq) for the given R. + """ + cfg = self.cfg.stiffener + if not cfg or cfg.bs_R_kN <= 0: + return {"skipped": True} + + sec, mat = self.sec, self.mat + d = sec.dw + tw = sec.tw + fy = mat.fy + E = mat.Es + gm0 = mat.gamma_m0 + eps = math.sqrt(250.0 / fy) + + R = cfg.bs_R_kN + n_plates = cfg.bs_n_plates or 2 + + # Physical outstand limit (same formula as intermediate stiffener) + H_max = (min(sec.bf_top, sec.bf_bot) - tw) / 2.0 + + full_check = cfg.bs_tq_mm > 0 and cfg.bs_H_mm > 0 + + if not full_check: + # Design guidance: minimum tq from bearing contact check at H_max + fcd_y = fy / gm0 + tq_req_bearing = (R * 1000.0 / (fcd_y * n_plates * H_max) + if H_max > 0 and fcd_y > 0 else 0.0) + # Minimum tq for outstanding leg at H_max (one-sided limit, conservative) + tq_req_leg = H_max / (14.0 * eps) if eps > 0 else 0.0 + tq_req = max(tq_req_bearing, tq_req_leg) + return { + "design_guidance" : True, + "H_max_mm" : round(H_max, 1), + "tq_req_bearing_mm" : round(tq_req_bearing, 2), + "tq_req_leg_mm" : round(tq_req_leg, 2), + "tq_req_mm" : round(tq_req, 2), + "n_plates" : n_plates, + "R_kN" : R, + } + + # ── Full verification ──────────────────────────────────────────────────────── + tq = cfg.bs_tq_mm + H = cfg.bs_H_mm + + # b1: stiff bearing length — user-provided or auto from IS 800 Cl.8.7.1.3 + if cfg.bs_b1_mm > 0: + b1 = cfg.bs_b1_mm + else: + b1 = IS800_2007.cl_8_7_1_3_stiff_bearing_length(R, tw, sec.tf_top, 0.0, fy) + + # Bearing stiffener MI — auto-compute (two-sided flat plates about CL of web) if not given + if cfg.bs_Iys_mm4 > 0: + Iys = cfg.bs_Iys_mm4 + else: + Iys = 2.0 * (tq * H**3 / 12.0 + tq * H * (tw / 2.0 + H / 2.0)**2) + + KL = 0.7 * d + + # Cl.509.7.3.1 / IS 800 8.7.3.1 — Web buckling check + # Checks if the unstiffened web bearing zone can carry R (Euler stress, no imperfection reduction). + n1 = d / 2.0 + A_wb = (b1 + n1) * tw + rys_wb = math.sqrt(Iys / A_wb) if A_wb > 0 else 0.0 + KL_r_wb = KL / rys_wb if rys_wb > 0 else 1e9 + fcc_wb = (math.pi**2 * E) / KL_r_wb**2 + Fcdw_wb_kN = fcc_wb * A_wb / 1000.0 + + # Cl.509.7.3.2 / IS 800 8.7.3.2 — Local crushing check + n2 = 2.5 * sec.tf_top + A_lc = (b1 + n2) * tw + fcd_y = fy / gm0 + Fcdw_lc_kN = fcd_y * A_lc / 1000.0 + + # Cl.509.7.3.3 / IS 800 8.7.3.3 — Bearing contact check + Aq = n_plates * H * tq + Fpsd_kN = fcd_y * Aq / 1000.0 + # Minimum tq required for the bearing check to pass + tq_req_bearing = (R * 1000.0 / (fcd_y * n_plates * H) if H > 0 and fcd_y > 0 else 0.0) + + # Cl.509.7.1.5 / 509.7.2.5 — Stiffener column buckling check + h_w_strip = 20.0 * tw + Aeff_bs = 2 * H * tq + 2 * h_w_strip * tw + rys_bs = math.sqrt(Iys / Aeff_bs) if Aeff_bs > 0 else 0.0 + KL_r_bs = KL / rys_bs if rys_bs > 0 else 1e9 + + fcd_bs = IS800_2007.cl_7_1_2_1_design_compressisive_stress_plategirder(fy, gm0, KL_r_bs, E) + Fcd_kN = fcd_bs * Aeff_bs / 1000.0 + + # Outstanding leg limit for the provided plate + H_limit_bs = 14.0 * tq * eps # one-sided (conservative); bearing stiffeners are two-sided + tq_req_leg = H / (14.0 * eps) if eps > 0 else 0.0 + + return { + "design_guidance" : False, + "H_max_mm" : round(H_max, 1), + "tq_req_bearing_mm" : round(tq_req_bearing, 2), + "tq_req_leg_mm" : round(tq_req_leg, 2), + "b1_mm" : round(b1, 3), + "n1_mm" : round(n1, 3), + "A_wb_mm2" : round(A_wb, 3), + "rys_wb_mm" : round(rys_wb, 3), + "KL_mm" : round(KL, 3), + "fcc_wb_MPa" : round(fcc_wb, 3), + "Fcdw_wb_kN" : round(Fcdw_wb_kN, 3), + "n2_mm" : round(n2, 3), + "A_lc_mm2" : round(A_lc, 3), + "fcd_y_MPa" : round(fcd_y, 3), + "Fcdw_lc_kN" : round(Fcdw_lc_kN, 3), + "n_plates" : n_plates, + "Aq_mm2" : round(Aq, 3), + "Fpsd_kN" : round(Fpsd_kN, 3), + "h_w_strip_mm" : round(h_w_strip, 3), + "Aeff_bs_mm2" : round(Aeff_bs, 3), + "rys_bs_mm" : round(rys_bs, 3), + "KL_r_bs" : round(KL_r_bs, 3), + "fcd_bs_MPa" : round(fcd_bs, 3), + "H_limit_bs_mm" : round(H_limit_bs, 3), + "Fcd_kN" : round(Fcd_kN, 3), + "R_kN" : R, + } + # Orchestrator — runs every IRC 22:2015 clause computation into one CapacityResults. def compute_all( self, @@ -1651,6 +1928,30 @@ def compute_all( results.Ast_provided_cm2_per_m = trans_shear["Ast_provided_cm2_per_m"] results.details["transverse_shear"] = trans_shear + # 18. Intermediate stiffener checks (IRC 24-2010 Cl.509.7.2 / IS 800 Cl.8.7.2). + # Opt-in by setting cfg.stiffener to any StiffenerConfig. Runs guidance when c/tq/H not given. + if self.cfg.stiffener is not None: + is_res = self.compute_intermediate_stiffener() + results.details["intermediate_stiffener"] = is_res + if not is_res.get("skipped") and not is_res.get("design_guidance"): + results.is_H_limit_mm = is_res["H_limit_mm"] + results.is_Iys_min_mm4 = is_res["Iys_min_mm4"] + results.is_Iys_prov_mm4 = is_res["Iys_prov_mm4"] + results.is_Fqd_kN = is_res["Fqd_kN"] + results.is_Fq_kN = is_res["Fq_kN"] + + # 19. Bearing stiffener checks (IRC 24-2010 Cl.509.7.3 / IS 800 Cl.8.7.3). + # Requires bs_R_kN > 0. Runs guidance when tq/H not given. + if self.cfg.stiffener is not None and self.cfg.stiffener.bs_R_kN > 0: + bs_res = self.compute_bearing_stiffener() + results.details["bearing_stiffener"] = bs_res + if not bs_res.get("skipped") and not bs_res.get("design_guidance"): + results.bs_Fcdw_wb_kN = bs_res["Fcdw_wb_kN"] + results.bs_Fcdw_lc_kN = bs_res["Fcdw_lc_kN"] + results.bs_Fpsd_kN = bs_res["Fpsd_kN"] + results.bs_Fcd_kN = bs_res["Fcd_kN"] + results.bs_R_kN = bs_res["R_kN"] + return results @@ -1852,7 +2153,7 @@ def run_all_checks(self) -> List[CheckResult]: # ── CATEGORY 5 (cont.): Transverse Shear (Cl.606.10) ts = c.details.get("transverse_shear", {}) - if ts: + if ts: self._add_check(16, "Transverse Shear (VL vs Vcap)", "Cl.606.10", ts["VL_N_per_mm"], ts["governing_capacity_kN_per_m"], "kN/m", note=f"L={ts['L_shear_plane_mm']:.0f} mm") @@ -1862,6 +2163,74 @@ def run_all_checks(self) -> List[CheckResult]: note=(f"Ast_req={c.Ast_required_cm2_per_m:.3f}, " f"Ast_prov={c.Ast_provided_cm2_per_m:.3f} cm²/m")) + # ── IRC 24-2010 STIFFENER CHECKS (Cl.509.7 / IS 800 Cl.8.7) ───────────────── + # Intermediate transverse stiffener + is_det = c.details.get("intermediate_stiffener", {}) + if is_det and not is_det.get("skipped"): + if is_det.get("design_guidance"): + # No dimensions provided — report required values as a single guidance row + _note = (f"H_max={(is_det['H_max_mm']):.0f} mm = (bf_min−tw)/2; " + f"tq_req(1-sided)≥{is_det['tq_req_1sided_mm']:.1f} mm, " + f"tq_req(2-sided)≥{is_det['tq_req_2sided_mm']:.1f} mm") + if is_det["c_req_min_mm"] > 0: + _note += f"; c_req≥{is_det['c_req_min_mm']:.0f} mm (from Iys check)" + self._add_check(20, "Int.Stiff: Sizing Required", "Cl.509.7.2.4", + 0.0, 1.0, "–", note=_note) + else: + # Full verification — three separate checks + # Cl.509.7.2.4 — outstanding leg: H ≤ H_limit + self._add_check(20, "Int.Stiff: Leg ≤ H_limit", "Cl.509.7.2.4", + is_det["H_mm"], is_det["H_limit_mm"], "mm", + note=(f"{is_det['H_limit_type']}; " + f"H_max={is_det['H_max_mm']:.0f} mm; " + f"tq_req≥{is_det['tq_req_provided_mm']:.1f} mm")) + # Cl.509.7.2.4 — MI: Iys_prov ≥ Iys_min + self._add_check(20, "Int.Stiff: Iys ≥ Iys_min", "Cl.509.7.2.4", + is_det["Iys_min_mm4"], is_det["Iys_prov_mm4"], "mm⁴", + note=f"min={is_det['iys_formula']}") + # Cl.509.7.2.5 — buckling (only when shear demand is positive) + if is_det["Fq_kN"] > 0: + self._add_check(20, "Int.Stiff: Buckling Fqd≥Fq", "Cl.509.7.2.5", + is_det["Fq_kN"], is_det["Fqd_kN"], "kN", + note=(f"fcd={is_det['fcd_MPa']:.2f} MPa, α=0.49, " + f"KL/r={is_det['KL_r']:.2f}")) + + # Bearing stiffener + bs_det = c.details.get("bearing_stiffener", {}) + if bs_det and not bs_det.get("skipped"): + R = bs_det["R_kN"] + if bs_det.get("design_guidance"): + # No dimensions provided — report required tq as a single guidance row + self._add_check(21, "Brg.Stiff: Sizing Required", "Cl.509.7.3.3", + 0.0, 1.0, "–", + note=(f"R={R:.1f} kN; H_max={bs_det['H_max_mm']:.0f} mm; " + f"tq_req(bearing)≥{bs_det['tq_req_bearing_mm']:.1f} mm, " + f"tq_req(leg)≥{bs_det['tq_req_leg_mm']:.1f} mm " + f"(n_plates={bs_det['n_plates']})")) + else: + # Full verification — four separate checks + # Cl.509.7.3.1 — web buckling (PASS = stiffener not needed; FAIL = stiffener needed) + self._add_check(21, "Brg.Stiff: Web Buckling", "Cl.509.7.3.1", + R, bs_det["Fcdw_wb_kN"], "kN", + note=(f"fcc={bs_det['fcc_wb_MPa']:.2f} MPa, " + f"A=(b1+n1)·tw={bs_det['A_wb_mm2']:.0f} mm²")) + # Cl.509.7.3.2 — local crushing + self._add_check(21, "Brg.Stiff: Local Crushing", "Cl.509.7.3.2", + R, bs_det["Fcdw_lc_kN"], "kN", + note=(f"fcd={bs_det['fcd_y_MPa']:.2f} MPa, " + f"A=(b1+n2)·tw={bs_det['A_lc_mm2']:.0f} mm²")) + # Cl.509.7.3.3 — bearing contact + self._add_check(21, "Brg.Stiff: Bearing Contact", "Cl.509.7.3.3", + R, bs_det["Fpsd_kN"], "kN", + note=(f"fyd={bs_det['fcd_y_MPa']:.2f} MPa, " + f"Aq={bs_det['Aq_mm2']:.0f} mm², " + f"tq_req≥{bs_det['tq_req_bearing_mm']:.1f} mm")) + # Cl.509.7.2.5 — stiffener column buckling + self._add_check(21, "Brg.Stiff: Column Buckling", "Cl.509.7.2.5", + R, bs_det["Fcd_kN"], "kN", + note=(f"fcd={bs_det['fcd_bs_MPa']:.2f} MPa, α=0.49, " + f"KL/r={bs_det['KL_r_bs']:.2f}")) + return self.checks def overall_status(self) -> str: @@ -2347,6 +2716,9 @@ def run_design_check( config = BridgeConfig.from_plate_girder_bridge(plate_girder_bridge) elif config is None: config = BridgeConfig.example_33m_bridge() + # Always run stiffener guidance even when no stiffener details are provided. + if config.stiffener is None: + config.stiffener = StiffenerConfig() print(f" Config: {config.summary()}") # -- Step 2: Demand from Analyser -- @@ -2364,6 +2736,11 @@ def run_design_check( print(f" shear_range = {demand.shear_range_MPa:.3f} MPa") print(f" Source: {demand.source}") + # For a simply-supported beam, max shear = end reaction → use as bearing stiffener load. + # Only set when the caller hasn't already supplied a reaction. + if config.stiffener.bs_R_kN <= 0.0 and demand.Vu_kN > 0.0: + config.stiffener.bs_R_kN = demand.Vu_kN + # -- Step 3: IRC 22 Capacity -- print("\n[Step 3/5] Computing IRC 22:2015 capacities ...") calculator = IRC22CapacityCalculator(config) @@ -2379,6 +2756,70 @@ def run_design_check( print(f" Mb = {capacity.Mb_kNm:,.2f} kNm (Cl.603.3.3.1)") print(f" Qu = {capacity.Qu_kN:.3f} kN/stud (Cl.606.3.1)") + # -- Stiffener detail printout -- + is_det = capacity.details.get("intermediate_stiffener", {}) + if is_det and not is_det.get("skipped"): + print("\n [Stiffener] Intermediate transverse (Cl.509.7.2 / IS 800 Cl.8.7.2)") + print(f" H_max (physical fit) = {is_det['H_max_mm']:.1f} mm") + print(f" tq_req (1-sided) >= {is_det['tq_req_1sided_mm']:.2f} mm") + print(f" tq_req (2-sided) >= {is_det['tq_req_2sided_mm']:.2f} mm") + if is_det.get("design_guidance"): + c_req = is_det.get("c_req_min_mm", 0.0) + if c_req > 0: + print(f" c_req (min spacing) >= {c_req:.0f} mm (from Iys check)") + else: + print(f" c_req: simple formula (0.75·d·tw³) governs — any spacing OK") + print(f" --> No dimensions provided; use above as sizing guide.") + else: + _pass = lambda d, c: "PASS" if c >= d else "FAIL" + print(f" H provided = {is_det['H_mm']:.1f} mm " + f"[limit {is_det['H_limit_mm']:.2f} mm = {is_det['H_limit_type']}] " + f"{_pass(is_det['H_mm'], is_det['H_limit_mm'])}") + print(f" tq_req for H provided >= {is_det['tq_req_provided_mm']:.2f} mm") + print(f" Iys_prov = {is_det['Iys_prov_mm4']:.0f} mm⁴ " + f"[min {is_det['Iys_min_mm4']:.0f} mm⁴ = {is_det['iys_formula']}] " + f"{_pass(is_det['Iys_min_mm4'], is_det['Iys_prov_mm4'])}") + print(f" Aeff = {is_det['Aeff_mm2']:.0f} mm² " + f"(Astiff={is_det['Astiff_mm2']:.0f} mm² " + f"rys={is_det['rys_mm']:.2f} mm KL/r={is_det['KL_r']:.2f})") + print(f" fcd = {is_det['fcd_MPa']:.2f} MPa (α=0.49) " + f"Fqd={is_det['Fqd_kN']:.2f} kN Fq={is_det['Fq_kN']:.2f} kN " + f"{_pass(is_det['Fq_kN'], is_det['Fqd_kN'])}") + + bs_det = capacity.details.get("bearing_stiffener", {}) + if bs_det and not bs_det.get("skipped"): + print("\n [Stiffener] Bearing stiffener (Cl.509.7.3 / IS 800 Cl.8.7.3)") + print(f" Reaction R = {bs_det['R_kN']:.2f} kN") + print(f" H_max (physical fit) = {bs_det['H_max_mm']:.1f} mm") + print(f" n_plates = {bs_det['n_plates']}") + if bs_det.get("design_guidance"): + print(f" tq_req (bearing) >= {bs_det['tq_req_bearing_mm']:.2f} mm") + print(f" tq_req (leg limit) >= {bs_det['tq_req_leg_mm']:.2f} mm") + print(f" tq_req (governing) >= {bs_det['tq_req_mm']:.2f} mm") + print(f" --> No plate dimensions provided; use above as sizing guide.") + else: + _pass = lambda d, c: "PASS" if c >= d else "FAIL" + print(f" b1 (stiff bearing len) = {bs_det['b1_mm']:.1f} mm") + print(f" Cl.509.7.3.1 Web Buckling: " + f"Fcdw_wb={bs_det['Fcdw_wb_kN']:.2f} kN " + f"(fcc={bs_det['fcc_wb_MPa']:.2f} MPa A_wb={bs_det['A_wb_mm2']:.0f} mm²) " + f"{_pass(bs_det['R_kN'], bs_det['Fcdw_wb_kN'])}") + print(f" Cl.509.7.3.2 Local Crushing: " + f"Fcdw_lc={bs_det['Fcdw_lc_kN']:.2f} kN " + f"(fcd_y={bs_det['fcd_y_MPa']:.2f} MPa A_lc={bs_det['A_lc_mm2']:.0f} mm²) " + f"{_pass(bs_det['R_kN'], bs_det['Fcdw_lc_kN'])}") + print(f" Cl.509.7.3.3 Bearing Contact: " + f"Fpsd={bs_det['Fpsd_kN']:.2f} kN " + f"(Aq={bs_det['Aq_mm2']:.0f} mm² tq_req>={bs_det['tq_req_bearing_mm']:.2f} mm) " + f"{_pass(bs_det['R_kN'], bs_det['Fpsd_kN'])}") + print(f" Cl.509.7.2.5 Column Buckling: " + f"Fcd={bs_det['Fcd_kN']:.2f} kN " + f"(fcd={bs_det['fcd_bs_MPa']:.2f} MPa KL/r={bs_det['KL_r_bs']:.2f} " + f"Aeff={bs_det['Aeff_bs_mm2']:.0f} mm²) " + f"{_pass(bs_det['R_kN'], bs_det['Fcd_kN'])}") + print(f" H_limit (leg) = {bs_det['H_limit_bs_mm']:.2f} mm " + f"tq_req (leg)>={bs_det['tq_req_leg_mm']:.2f} mm") + # -- Step 4: DCR Engine -- print("\n[Step 4/5] Running DCR checks ...") engine = DCREngine(demand, capacity) From 16366362a2d4e63e4ef408674a733c0e2aed631e Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 8 May 2026 18:04:35 +0530 Subject: [PATCH 200/225] cross bracing force evaluator. need to be linked to analysis results, main file, and Osdag --- .../plate_girder/crossbracingforces.py | 806 ++++++++++++++++++ 1 file changed, 806 insertions(+) create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/crossbracingforces.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/crossbracingforces.py b/src/osdagbridge/core/bridge_types/plate_girder/crossbracingforces.py new file mode 100644 index 000000000..dbe16082d --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/crossbracingforces.py @@ -0,0 +1,806 @@ +""" +CrossBracingForces +------------------ +Resolves grillage analysis forces into design axial forces for the +diagonals and chords of intermediate cross bracing between adjacent +plate girders. + +Supported brace types +--------------------- + X-type Two full diagonals crossing the full width × height panel. + K-type Two diagonals from the TOP FLANGE of each girder converging + at the CENTRE of the bottom chord (chevron / inverted-V). + The top chord is optional. + +Step-wise process +----------------- + Step 1 Identify brace configuration. + Brace type (X / K), top/bottom chord presence, and panel + spacing are read from PlateGirderBridge.additional_inputs. + + Step 2 Compute brace geometry. + Girder depth D, spacing s, and span L come from + PlateGirderBridge (section_props, sizing_result, + grillage_geometry). Diagonal angle and length follow. + + Step 3 Call forces from analysis results. + Vz (horizontal transverse shear) and Mx (torsion) at each + cross-bracing station are read from PlateGirderAnalysisResults. + Internal station-to-node mapping locates the right element; + once analysis_results.py exposes a direct station-query API, + that internal lookup can be replaced transparently. + + Step 4 Resolve member forces. + Panel shear F_T and torsion Mx are converted to diagonal + and chord axial forces using the portal-method analogy. + + Step 5 Tabulate and envelope for design. + Forces are assembled into a full DataFrame and enveloped + per girder pair; get_design_forces_dict() packages the + result for the cross-bracing design module. + +Geometry reference +------------------ +X-type (elevation of the transverse plane between two girders) + + G_i ──── top chord ──── G_(i+1) y = h (top flange level) + │ │ + \\ / + \\ D2 / + \\ / + D1 ──────── X ──────── (diagonals cross at mid-panel) + / \\ + / D3 \\ + / \\ + │ │ + G_i ─── bottom chord ──── G_(i+1) y = 0 (bottom flange level) + |<──────── s ─────────>| + + alpha_X = atan(h / s) + L_d_X = sqrt(s² + h²) + +K-type (inverted-V / chevron) + + G_i ──── top chord ──── G_(i+1) y = h (optional top chord) + │ │ + \\ / + \\ / + \\ / + \\ / alpha_K = atan(h / (s/2)) + \\ / L_d_K = sqrt((s/2)² + h²) + ──── ─── *─── ──── centre node (z = s/2) + │ s/2 s/2 │ + G_i ─── bottom chord ──── G_(i+1) y = 0 + +Force resolution +---------------- +Both types use the PORTAL-METHOD ANALOGY (story-shear approach), which +is standard for braced-frame design: + + Panel shear F_T acts horizontally (from Vz at both brace-node girders) + + F_diag = |F_T| / (2 · sin α) per diagonal (from shear) + F_chord_shear = |F_T| / (2 · tan α) chord from shear + + where α is the diagonal angle from horizontal (alpha_X or alpha_K). + + Torsion Mx in the girders creates a force couple at the chord level: + + F_couple = (|Mx_L| + |Mx_R|) / h + F_chord_torsion = F_couple / 2 (top/bottom chord each carry half) + F_diag_torsion = F_couple / (2 · sin α) (diagonal from torsion) + + Design forces: + F_chord_total = F_chord_shear + F_chord_torsion + F_diag_total = F_diag + F_diag_torsion + + For K-type, alpha_K = atan(h / (s/2)) is steeper than alpha_X, + resulting in larger diagonal forces for the same F_T. If the top + chord is absent, F_chord_shear is zero (no top chord to carry it) + and only the torsion term contributes to chord design. + +Usage +----- + pgb = PlateGirderBridge() + pgb.set_input(input_dict) + pgb.design() + + results = pgb.get_result_handler() + cb = CrossBracingForces(bridge=pgb, results=results) + + df = cb.compute_panel_forces() # full table + crit = cb.get_critical_forces() # envelope per pair + d = cb.get_design_forces_dict() # for design module + cb.print_critical_forces() +""" + +from __future__ import annotations + +import math +from typing import Optional + +import pandas as pd + +from osdagbridge.core.utils.common import ( + DEFAULT_CROSS_BRACING_SPACING, + KEY_CROSS_BRACING_SPACING, + KEY_CROSS_BRACING_TYPE, +) + +# --------------------------------------------------------------------------- +# Constants +# --------------------------------------------------------------------------- + +BRACE_X = "X" # X-type cross bracing +BRACE_K = "K" # K-type (inverted-V / chevron) cross bracing + +# Keys used to look up chord configuration from additional_inputs +_KEY_TOP_CHORD = "Cross Bracing Top Chord" +_KEY_BOTTOM_CHORD = "Cross Bracing Bottom Chord" + + +# =========================================================================== +class CrossBracingForces: + """ + Step-wise force analysis for X-type or K-type cross bracing. + + Parameters + ---------- + bridge : PlateGirderBridge + Fully solved bridge (design() already called). + results : PlateGirderAnalysisResults + Analysis handler from bridge.get_result_handler(). + brace_type : str or None + 'X' or 'K'. If None, read from bridge.additional_inputs + [KEY_CROSS_BRACING_TYPE]; default 'X'. + top_chord : bool or None + True if a top chord connects the two girders at the top flange. + None → read from additional_inputs. Default True. + bottom_chord : bool or None + True if a bottom chord connects the two girders at the bottom + flange. None → read from additional_inputs. Default True. + cb_spacing : float or None + Cross-bracing panel spacing (m). None → read from inputs. + depth_ratio : float + Brace clear height = D × depth_ratio. Default 0.85. + include_edge_beams : bool + Include EB1/EB2 edge beams in pair scanning. Default False. + """ + + def __init__( + self, + bridge, + results, + brace_type: Optional[str] = None, + top_chord: Optional[bool] = None, + bottom_chord: Optional[bool] = None, + cb_spacing: Optional[float] = None, + depth_ratio: float = 0.85, + include_edge_beams: bool = False, + ): + self.bridge = bridge + self.results = results + self.depth_ratio = depth_ratio + self.include_edge_beams = include_edge_beams + + # Step 1: brace type, chord presence, panel spacing (from bridge) + self._identify_configuration(brace_type, top_chord, bottom_chord) + + # Step 2: diagonal geometry from bridge section/sizing data + self._init_geometry(cb_spacing) + + # Propagate deck overhang so build_girders() names edge beams correctly + sizing = getattr(bridge, "sizing_result", None) + if sizing is not None: + overhang = float(getattr(sizing, "deck_overhang", 0.0) or 0.0) + if overhang > 0 and getattr(results, "edge_dist", 0) == 0: + results.edge_dist = overhang + + # ======================================================================= + # STEP 1 — IDENTIFY BRACE CONFIGURATION + # ======================================================================= + + def _identify_configuration( + self, + brace_type: Optional[str], + top_chord: Optional[bool], + bottom_chord: Optional[bool], + ) -> None: + """ + Determine brace type (X or K) and which chords are present. + + Priority: argument > additional_inputs > default. + """ + ai = getattr(self.bridge, "additional_inputs", {}) + + # --- Brace type --- + if brace_type is not None: + raw = str(brace_type).strip().upper() + else: + raw = str(ai.get(KEY_CROSS_BRACING_TYPE, BRACE_X)).strip().upper() + + if raw not in (BRACE_X, BRACE_K): + raise ValueError( + f"Unsupported brace_type '{raw}'. Choose 'X' or 'K'." + ) + self.brace_type: str = raw + + # --- Top chord --- + if top_chord is not None: + self.top_chord = bool(top_chord) + else: + val = ai.get(_KEY_TOP_CHORD, "Yes") + self.top_chord = str(val).strip().lower() not in ("no", "false", "0") + + # --- Bottom chord --- + if bottom_chord is not None: + self.bottom_chord = bool(bottom_chord) + else: + val = ai.get(_KEY_BOTTOM_CHORD, "Yes") + self.bottom_chord = str(val).strip().lower() not in ("no", "false", "0") + + # ======================================================================= + # STEP 2 — BRACE GEOMETRY + # ======================================================================= + + def _init_geometry(self, cb_spacing: Optional[float]) -> None: + """ + Compute brace geometry from the solved bridge. + + Common quantities (both types) + ─────────────────────────────── + h clear brace height = D × depth_ratio (m) + s girder spacing (m) + L bridge span (m) + + X-type specific + ─────────────── + alpha_X = atan(h / s) angle of full diagonal from horizontal + L_d_X = sqrt(s² + h²) full diagonal length + + K-type specific + ─────────────── + alpha_K = atan(h / (s/2)) angle of half-diagonal from horizontal + L_d_K = sqrt((s/2)² + h²) half-diagonal length + """ + sizing = getattr(self.bridge, "sizing_result", None) + geom = getattr(self.bridge, "grillage_geometry", None) + + if sizing is None or geom is None: + raise RuntimeError( + "CrossBracingForces requires bridge.design() to have been called first." + ) + + # --- Panel spacing --- + if cb_spacing is not None: + self.cb_spacing = float(cb_spacing) + else: + ai = getattr(self.bridge, "additional_inputs", {}) + self.cb_spacing = float( + ai.get(KEY_CROSS_BRACING_SPACING, DEFAULT_CROSS_BRACING_SPACING) + ) + + # --- Girder section dimensions (metres) --- + sp = self.bridge.section_props + self.D = float(sp["D"]) + self.tf_top = float(sp.get("t_f_top", 0.0)) + self.tf_bot = float(sp.get("t_f_bot", self.tf_top)) + + # --- Common geometry --- + self.h = self.D * self.depth_ratio # brace clear height (m) + self.s = float(sizing.girder_spacing) # girder spacing (m) + self.L = float(geom.L) # bridge span (m) + + # --- Type-specific diagonal geometry --- + if self.brace_type == BRACE_X: + self.horiz_proj = self.s # horizontal projection of diagonal + else: # K-type: diagonals go to centre of bottom chord + self.horiz_proj = self.s / 2.0 + + self.L_d = math.sqrt(self.horiz_proj ** 2 + self.h ** 2) + self.alpha_rad = math.atan2(self.h, self.horiz_proj) + self.sin_alpha = math.sin(self.alpha_rad) + self.cos_alpha = math.cos(self.alpha_rad) + self.tan_alpha = math.tan(self.alpha_rad) + + # ----------------------------------------------------------------------- + # Private helper — station-to-node mapping + # Locates the nearest grillage node (and its element) for each + # cross-bracing x-position along every girder. This detail is + # internal to Step 3; when analysis_results.py gains a direct + # station-query API it can be replaced without changing the interface. + # ----------------------------------------------------------------------- + + def _build_station_map(self) -> tuple[dict, dict]: + """ + Map each cross-bracing x-station to the nearest grillage node on + every girder, plus the element ID and which end of that element. + + Returns + ------- + station_map : dict + { station_x (rounded m) -> + { girder_name -> + { node, element, is_i_node, actual_x } } } + girder_map : dict + Raw girder map from results.build_girders(). + """ + nodes, _, _ = self.results.build_grillage_connectivity() + girder_map, _ = self.results.build_girders(verbose=False) + + # Station x-positions: 0, Δ, 2Δ, …, L + n_int = max(1, round(self.L / self.cb_spacing)) + raw_xs = [i * self.cb_spacing for i in range(n_int + 1)] + xs = sorted({round(min(x, self.L), 6) for x in raw_xs}) + if not xs or xs[-1] < self.L - 1e-6: + xs.append(round(self.L, 6)) + xs = sorted(set(xs)) + + station_map: dict = {} + for sx in xs: + key = round(sx, 3) + station_map[key] = {} + + for g_name, g_data in girder_map.items(): + path = g_data["path"] # ordered node IDs + element_map = g_data["element_map"] # list of (eid, n1, n2) + + # Nearest node to this station x + best = min(path, key=lambda nid: abs(nodes[nid][0] - sx)) + + # Find the element and which end this node is + # Prefer the element where the node is the i-node (start) + # so we read forces at the beginning of the forward span + eid, is_i = None, True + for e, n1, n2 in element_map: + if n1 == best: + eid, is_i = e, True + break + if n2 == best: + eid, is_i = e, False + break + + if eid is not None: + station_map[key][g_name] = { + "node": best, + "element": eid, + "is_i_node": is_i, + "actual_x": round(nodes[best][0], 6), + } + + return station_map, girder_map + + # ======================================================================= + # STEP 3 — CALL FORCES FROM ANALYSIS RESULTS + # ======================================================================= + + def _read_component( + self, + lc: str, + eid: int, + is_i: bool, + base: str, + ) -> Optional[float]: + """ + Read one force/moment component from the xarray dataset. + + Parameters + ---------- + base : str + Component root name without end suffix: 'Vz', 'Mx', 'Vy', etc. + The suffix '_i' or '_j' is appended based on is_i. + + Returns + ------- + float in raw SI units (N or Nm), or None if the component is absent. + """ + comp = base + ("_i" if is_i else "_j") + try: + return float( + self.results.ds.sel( + Loadcase=lc, + Element=eid, + Component=comp, + )["forces"] + ) + except Exception: + return None + + def _extract_forces( + self, + lc: str, + info_l: dict, + info_r: dict, + ) -> Optional[dict]: + """ + Extract Vz, Mx, and Vy for the left and right girder nodes at one + station and load case. + + Returns None if Vz is absent from the dataset for either girder + (transverse lateral loads not yet modelled). All returned values + are in engineering units: kN for forces, kNm for moments. + """ + def _kN(v): return v / 1000.0 if v is not None else None + def _kNm(v): return v / 1000.0 if v is not None else None + + vz_l = _kN(self._read_component(lc, info_l["element"], info_l["is_i_node"], "Vz")) + vz_r = _kN(self._read_component(lc, info_r["element"], info_r["is_i_node"], "Vz")) + + # Vz not yet in dataset → skip this station + if vz_l is None or vz_r is None: + return None + + return { + "vz_l": vz_l, + "vz_r": vz_r, + "mx_l": _kNm(self._read_component(lc, info_l["element"], info_l["is_i_node"], "Mx")) or 0.0, + "mx_r": _kNm(self._read_component(lc, info_r["element"], info_r["is_i_node"], "Mx")) or 0.0, + "vy_l": _kN(self._read_component(lc, info_l["element"], info_l["is_i_node"], "Vy")), + "vy_r": _kN(self._read_component(lc, info_r["element"], info_r["is_i_node"], "Vy")), + } + + # ======================================================================= + # STEP 4 — RESOLVE MEMBER FORCES + # ======================================================================= + + def _resolve_forces( + self, + F_T_kN: float, + Mx_left_kNm: float, + Mx_right_kNm: float, + ) -> dict: + """ + Resolve panel shear F_T and torsions Mx into member axial forces. + + Portal-method analogy (story-shear approach): + Both diagonals share the panel shear equally — one in tension, + one in compression. The diagonal's VERTICAL component + equilibrates F_T (the same formula applies to both X and K type; + only the angle alpha differs): + + F_diag_shear = |F_T| / (2 · sin α) + F_chord_shear = |F_T| / (2 · tan α) [if chord present] + + Torsion Mx in the girder creates a horizontal force couple at + the chord level: + + F_couple = (|Mx_L| + |Mx_R|) / h + F_chord_torsion = F_couple / 2 + F_diag_torsion = F_couple / (2 · sin α) + + For K-type, α = atan(h / (s/2)) → steeper → larger forces. + If the top chord is absent, F_chord_shear is set to zero + (no member to carry horizontal shear at the top). + + Returns + ------- + dict with keys: + F_diag_kN axial force per diagonal (shear only) + F_chord_kN axial chord force (shear + torsion) + F_diag_total_kN diagonal force (shear + torsion) + """ + if self.sin_alpha < 1e-9 or self.h < 1e-9: + return {"F_diag_kN": 0.0, "F_chord_kN": 0.0, "F_diag_total_kN": 0.0} + + abs_FT = abs(F_T_kN) + + # --- Panel-shear component --- + F_diag_shear = abs_FT / (2.0 * self.sin_alpha) + + # Chord carries horizontal shear only when the relevant chord is present + if self.brace_type == BRACE_X: + chord_present = self.top_chord or self.bottom_chord + else: # K-type: top chord resists horizontal shear at the top + chord_present = self.top_chord + + F_chord_shear = (abs_FT / (2.0 * self.tan_alpha)) if chord_present else 0.0 + + # --- Torsion component --- + # Each girder's torsion Mx creates a transverse couple = Mx/h at chord level. + # Top and bottom chords each carry half of the combined couple from both girders. + mx_couple_kN = (abs(Mx_left_kNm) + abs(Mx_right_kNm)) / self.h + F_chord_torsion = mx_couple_kN / 2.0 + F_diag_torsion = mx_couple_kN / (2.0 * self.sin_alpha) + + return { + "F_diag_kN": round(F_diag_shear, 4), + "F_chord_kN": round(F_chord_shear + F_chord_torsion, 4), + "F_diag_total_kN": round(F_diag_shear + F_diag_torsion, 4), + } + + # ======================================================================= + # STEP 5 — TABULATE AND ENVELOPE FOR DESIGN + # ======================================================================= + + def compute_panel_forces( + self, + load_case_filter: Optional[str] = None, + ) -> pd.DataFrame: + """ + Full force table: one row per (load case, station, girder pair). + + Returns an empty DataFrame if Vz is absent from the dataset + (transverse lateral loads not yet modelled). + + Returns + ------- + pd.DataFrame with columns: + LoadCase, Station X (m), Girder Pair, + Vz Left (kN), Vz Right (kN), + Mx Left (kNm), Mx Right (kNm), + Vy Left (kN), Vy Right (kN), dVy (kN), + F_T (kN), F_diag (kN), F_chord (kN), F_diag+torsion (kN) + """ + station_map, girder_map = self._build_station_map() + all_lcs = self.results.get_available_loadcases() + + if load_case_filter: + all_lcs = [lc for lc in all_lcs if load_case_filter in str(lc)] + + g_order = list(girder_map.keys()) + if not self.include_edge_beams: + g_order = [g for g in g_order if g not in ("EB1", "EB2")] + + rows = [] + for lc in all_lcs: + lc_str = str(lc) + for sx, g_info in sorted(station_map.items()): + avail = [g for g in g_order if g in g_info] + + for k in range(len(avail) - 1): + g_l, g_r = avail[k], avail[k + 1] + info_l = g_info[g_l] + info_r = g_info[g_r] + + forces = self._extract_forces(lc, info_l, info_r) + if forces is None: + continue # Vz absent → skip + + vz_l = forces["vz_l"] + vz_r = forces["vz_r"] + mx_l = forces["mx_l"] + mx_r = forces["mx_r"] + vy_l = forces["vy_l"] + vy_r = forces["vy_r"] + + # Net lateral panel shear: sum of Vz at both brace nodes. + # When both girders shear in the same direction the brace + # carries the full combined force; equal-and-opposite Vz + # (symmetric gravity) cancels, leaving only Mx to drive design. + F_T = vz_l + vz_r + + resolved = self._resolve_forces(F_T, mx_l, mx_r) + dVy = ( + round(abs(vy_l) - abs(vy_r), 4) + if vy_l is not None and vy_r is not None + else None + ) + + rows.append({ + "LoadCase": lc_str, + "Station X (m)": sx, + "Girder Pair": f"{g_l}-{g_r}", + "Vz Left (kN)": round(vz_l, 4), + "Vz Right (kN)": round(vz_r, 4), + "Mx Left (kNm)": round(mx_l, 4), + "Mx Right (kNm)": round(mx_r, 4), + "Vy Left (kN)": round(vy_l, 4) if vy_l is not None else None, + "Vy Right (kN)": round(vy_r, 4) if vy_r is not None else None, + "dVy (kN)": dVy, + "F_T (kN)": round(F_T, 4), + "F_diag (kN)": resolved["F_diag_kN"], + "F_chord (kN)": resolved["F_chord_kN"], + "F_diag+torsion (kN)": resolved["F_diag_total_kN"], + }) + + return pd.DataFrame(rows) + + def get_critical_forces(self) -> pd.DataFrame: + """ + Envelope (max absolute) diagonal and chord forces across all load + cases, per girder pair and per cross-bracing station. + + Returns + ------- + pd.DataFrame with columns: + Girder Pair, Station X (m), + Max |F_diag+torsion| (kN), Governing LC (diag), + Max |F_chord| (kN), Governing LC (chord) + """ + df = self.compute_panel_forces() + if df.empty: + return pd.DataFrame() + + diag_col = "F_diag+torsion (kN)" + chord_col = "F_chord (kN)" + rows = [] + for (pair, sx), grp in df.groupby(["Girder Pair", "Station X (m)"]): + idx_d = grp[diag_col].abs().idxmax() + idx_c = grp[chord_col].abs().idxmax() + rows.append({ + "Girder Pair": pair, + "Station X (m)": sx, + "Max |F_diag+torsion| (kN)": round(abs(grp.loc[idx_d, diag_col]), 3), + "Governing LC (diag)": grp.loc[idx_d, "LoadCase"], + "Max |F_chord| (kN)": round(abs(grp.loc[idx_c, chord_col]), 3), + "Governing LC (chord)": grp.loc[idx_c, "LoadCase"], + }) + return pd.DataFrame(rows) + + def get_design_forces_dict(self) -> dict: + """ + Structured dict of governing design forces for the design module. + + Per girder pair, takes the WORST station across all stations + (governing diagonal force and governing chord force may come from + different stations and load cases). + + Returns + ------- + dict:: + + { + "brace_type": "X" or "K", + "top_chord": bool, + "bottom_chord": bool, + "geometry": { + "girder_spacing_m": float, + "brace_height_m": float, + "girder_depth_m": float, + "diagonal_length_m": float, + "alpha_deg": float, + "cb_spacing_m": float, + "depth_ratio": float, + }, + "pairs": { + "G1-G2": { + "max_diagonal_kN": float, + "governing_lc_diag": str, + "critical_station_diag_m": float, + "max_chord_kN": float, + "governing_lc_chord": str, + "critical_station_chord_m": float, + }, + ... + }, + "overall_max_diagonal_kN": float, + "overall_max_chord_kN": float, + } + + Returns an empty dict when Vz is not yet in the dataset. + """ + crit = self.get_critical_forces() + if crit.empty: + return {} + + # Collapse to one row per girder pair (worst station for each force) + worst: dict = {} + for _, row in crit.iterrows(): + pair = row["Girder Pair"] + f_d = row["Max |F_diag+torsion| (kN)"] + f_c = row["Max |F_chord| (kN)"] + sx = row["Station X (m)"] + lc_d = row["Governing LC (diag)"] + lc_c = row["Governing LC (chord)"] + + if pair not in worst: + worst[pair] = { + "max_diagonal_kN": f_d, + "governing_lc_diag": lc_d, + "critical_station_diag_m": sx, + "max_chord_kN": f_c, + "governing_lc_chord": lc_c, + "critical_station_chord_m": sx, + } + else: + if f_d > worst[pair]["max_diagonal_kN"]: + worst[pair]["max_diagonal_kN"] = f_d + worst[pair]["governing_lc_diag"] = lc_d + worst[pair]["critical_station_diag_m"] = sx + if f_c > worst[pair]["max_chord_kN"]: + worst[pair]["max_chord_kN"] = f_c + worst[pair]["governing_lc_chord"] = lc_c + worst[pair]["critical_station_chord_m"] = sx + + return { + "brace_type": self.brace_type, + "top_chord": self.top_chord, + "bottom_chord": self.bottom_chord, + "geometry": self.get_brace_geometry_info(), + "pairs": worst, + "overall_max_diagonal_kN": max(v["max_diagonal_kN"] for v in worst.values()), + "overall_max_chord_kN": max(v["max_chord_kN"] for v in worst.values()), + } + + def get_brace_geometry_info(self) -> dict: + """Return geometry parameters as a dict (for reporting and design module).""" + return { + "brace_type": self.brace_type, + "top_chord": self.top_chord, + "bottom_chord": self.bottom_chord, + "girder_spacing_m": round(self.s, 4), + "brace_height_m": round(self.h, 4), + "girder_depth_m": round(self.D, 4), + "diagonal_length_m": round(self.L_d, 4), + "horiz_proj_m": round(self.horiz_proj, 4), + "alpha_deg": round(math.degrees(self.alpha_rad), 2), + "cb_spacing_m": round(self.cb_spacing, 3), + "depth_ratio": self.depth_ratio, + } + + # ======================================================================= + # PRINT / REPORT METHODS + # ======================================================================= + + def print_configuration(self) -> None: + """Print brace configuration and geometry.""" + g = self.get_brace_geometry_info() + print("\n" + "=" * 70) + print(" " * 18 + "CROSS BRACING CONFIGURATION & GEOMETRY") + print("=" * 70) + print(f" Brace type : {g['brace_type']}-type") + print(f" Top chord : {'Yes' if g['top_chord'] else 'No'}") + print(f" Bottom chord : {'Yes' if g['bottom_chord'] else 'No'}") + print("-" * 70) + print(f" Girder spacing (s) : {g['girder_spacing_m']:.4f} m") + print(f" Girder depth (D) : {g['girder_depth_m']:.4f} m") + print(f" Brace clear height (h) : {g['brace_height_m']:.4f} m " + f"(depth_ratio = {g['depth_ratio']})") + if g["brace_type"] == BRACE_K: + print(f" Diag. horiz. projection : {g['horiz_proj_m']:.4f} m (= s/2)") + print(f" Diagonal length : {g['diagonal_length_m']:.4f} m") + print(f" Diagonal angle (alpha) : {g['alpha_deg']:.2f} deg from horizontal") + print(f" Panel spacing : {g['cb_spacing_m']:.3f} m") + print("=" * 70) + + def print_panel_forces( + self, + load_case_filter: Optional[str] = None, + max_rows: int = 200, + ) -> None: + """Print the full panel-force table (all load cases, stations, pairs).""" + self.print_configuration() + df = self.compute_panel_forces(load_case_filter=load_case_filter) + print("\n" + "=" * 115) + print(" " * 37 + "CROSS BRACING PANEL FORCES") + print("=" * 115) + if df.empty: + print(" No data — Vz (transverse shear) not yet in dataset, or no load cases found.") + else: + print(df.head(max_rows).to_string(index=False)) + if len(df) > max_rows: + print(f"\n ... ({len(df) - max_rows} rows omitted; increase max_rows)") + print("=" * 115) + + def print_critical_forces(self) -> None: + """Print the design-critical force envelope per girder pair and station.""" + self.print_configuration() + df = self.get_critical_forces() + print("\n" + "=" * 115) + print(" " * 28 + "CROSS BRACING — CRITICAL DESIGN FORCES") + print("=" * 115) + if df.empty: + print(" No critical forces — Vz not in dataset or no load cases found.") + else: + print(df.to_string(index=False)) + print("=" * 115) + + def print_station_summary(self, station_x: float, tol: float = 0.5) -> None: + """ + Print forces for a single cross-bracing station. + + Parameters + ---------- + station_x : float Nominal x-position (m). + tol : float Search tolerance in metres (default 0.5). + """ + df = self.compute_panel_forces() + if df.empty: + print("No data available.") + return + subset = df[(df["Station X (m)"] - station_x).abs() <= tol] + print(f"\n--- Cross-Bracing Station: x ~ {station_x:.2f} m ---") + if subset.empty: + print(f" No station within ±{tol:.2f} m of x = {station_x:.2f} m.") + else: + print(subset.to_string(index=False)) From 2e0a9de6506c1c49cc6aa420a39157dd03a9bfcb Mon Sep 17 00:00:00 2001 From: VT <75622110+VT69@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:03:54 +0530 Subject: [PATCH 201/225] Steel Design Check Tab UI --- .../desktop/ui/dialogs/steel_design.py | 120 ++- .../ui/dialogs/tabs/steel_design_analysis.py | 26 + .../ui/dialogs/tabs/steel_design_check.py | 747 +++++++++++++++--- .../ui/dialogs/tabs/steel_design_details.py | 21 +- 4 files changed, 802 insertions(+), 112 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/steel_design.py b/src/osdagbridge/desktop/ui/dialogs/steel_design.py index d4b142ef8..c9ee7ade6 100644 --- a/src/osdagbridge/desktop/ui/dialogs/steel_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/steel_design.py @@ -53,6 +53,8 @@ def __init__(self, parent=None, result_handler=None): pass self._result_handler = result_handler # PlateGirderAnalysisResults or None + self._checks_ran = False + self._last_handler = None self.setObjectName("SteelDesign") self.resize(1024, 720) self.setMinimumSize(900, 520) @@ -335,8 +337,9 @@ def _setup_analysis_plots(self): # ── Signal wiring ───────────────────────────────────────────────────── self.tabs.currentChanged.connect(self._on_tab_changed) - self.analysis_tab.member_combo.currentIndexChanged.connect(self._update_analysis_plots) - self.analysis_tab.load_combo.currentIndexChanged.connect(self._on_load_combo_changed) + # NOTE: member_combo and load_combo in analysis_tab are disabled (read-only + # mirrors of the Output Dock). Their signals are NOT connected here — + # selections are pushed programmatically via sync_from_output_dock(). if hasattr(self.analysis_tab, "component_combo"): self.analysis_tab.component_combo.currentIndexChanged.connect(self._update_analysis_plots) self.analysis_tab.component_combo.currentIndexChanged.connect( @@ -358,16 +361,73 @@ def _setup_analysis_plots(self): # ── UI initialisation state ─────────────────────────────────────────── self._data_initialized = False + # ========================================================================= + # OUTPUT DOCK SYNC + # ========================================================================= + + def sync_from_output_dock( + self, + member_display: str | None = None, + load_case: str | None = None, + ) -> None: + """ + Called by the Output Dock to push the currently active member and load + combination into all three tabs. + + The combos in every tab are disabled (not user-editable). This is the + single authoritative write path — it temporarily bypasses the disabled + state, writes the value, then re-disables the widget so the next + mouse-click cannot change it. + """ + def _set_combo(combo, text: str) -> None: + """Write *text* into a possibly-disabled QComboBox without enabling it.""" + combo.blockSignals(True) + combo.setEnabled(True) + idx = combo.findText(text) + if idx >= 0: + combo.setCurrentIndex(idx) + else: + # Value not in list — add it transiently so it is visible. + combo.insertItem(0, text) + combo.setCurrentIndex(0) + combo.setEnabled(False) + combo.blockSignals(False) + + # ── Analysis tab ────────────────────────────────────────────────────── + if member_display is not None: + _set_combo(self.analysis_tab.member_combo, member_display) + if load_case is not None: + _set_combo(self.analysis_tab.load_combo, load_case) + + # ── Design Check tab ────────────────────────────────────────────────── + if member_display is not None: + _set_combo(self.check_tab.member_combo, member_display) + if load_case is not None: + _set_combo(self.check_tab.load_combo, load_case) + + # ── Details tab (member only, no load combo) ────────────────────────── + if member_display is not None: + _set_combo(self.details_tab.member_combo, member_display) + + # Refresh analysis plot for the newly selected member / load case + self._update_analysis_plots() + # ========================================================================= # EVENT HANDLERS # ========================================================================= def _on_tab_changed(self, index): """ - Entry point for the Analysis Results tab (index 1). + Entry point for the Analysis Results tab (index 1) and + the Design Check tab (index 2). Populates dropdowns on first visit, then triggers a plot render. All data comes from the injected PlateGirderAnalysisResults instance. """ + if index == 2: + # Design Check tab + self._run_design_checks() + return + if index != 1: return @@ -385,6 +445,56 @@ def _on_tab_changed(self, index): self._update_analysis_plots() + def _run_design_checks(self) -> None: + """ + Run the IRC 22:2015 pipeline and populate the Design Check tab. + + Uses live model data when available; falls back to a built-in + example bridge so the tab is never left blank. + + Guard: no-op when result_handler identity is unchanged. + """ + if self._checks_ran and (self._result_handler is self._last_handler): + return + + from osdagbridge.core.bridge_types.plate_girder.designer import ( + BridgeConfig, IRC22CapacityCalculator, DCREngine, + _example_demands, _extract_demands_from_analysis, + ) + + try: + bridge = getattr(self._main_window, "bridge", None) + config = ( + BridgeConfig.from_plate_girder_bridge(bridge) + if bridge is not None + else BridgeConfig.example_33m_bridge() + ) + + demand = ( + _extract_demands_from_analysis(self._result_handler) + if self._result_handler is not None + else _example_demands(config) + ) + + calculator = IRC22CapacityCalculator(config) + capacity = calculator.compute_all(Vu_kN=demand.Vu_kN) + + engine = DCREngine(demand, capacity) + engine.run_all_checks() + + self.check_tab.populate_from_results(demand, capacity, engine) + self.check_tab.set_girder_count(config.geometry.n_girders) + + self._checks_ran = True + self._last_handler = self._result_handler + + except Exception: + import traceback + err = f"Design check error:\n{traceback.format_exc()}" + for key in ("flexure", "shear", "interaction", "ltb", + "shear_long_trans", "fatigue", "stress", "deflection"): + self.check_tab.set_check_result(key, err) + @property def _interaction_mode(self) -> str: """Return the active display mode based on radio button selection.""" @@ -533,9 +643,11 @@ def _girder_display_name(key: str, idx: int) -> str: combo = self.analysis_tab.member_combo combo.blockSignals(True) + combo.setEnabled(True) # temporarily enable to allow writes combo.clear() for idx, key in enumerate(self.graph_engine.get_girder_keys()): combo.addItem(_girder_display_name(key, idx), userData=key) + combo.setEnabled(False) # restore disabled/read-only state combo.blockSignals(False) # ── Category-header helper ──────────────────────────────────────────────── @@ -591,6 +703,7 @@ def _populate_load_combo(self): dead_lcs = [preferred] + dead_lcs combo.blockSignals(True) + combo.setEnabled(True) # temporarily enable to allow writes combo.clear() first_selectable_idx = None @@ -625,6 +738,7 @@ def _populate_load_combo(self): elif combo.count() > 0: combo.setCurrentIndex(0) + combo.setEnabled(False) # restore disabled/read-only state combo.blockSignals(False) # ========================================================================= diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py index cb9248cf9..077f763eb 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py @@ -26,6 +26,22 @@ "WL", "EL", "IMF", "TL", ] +# Greyed-out read-only style for combos mirroring the Output Dock selection. +# Drop-down arrow is hidden to make clear the field is not interactive. +_DISABLED_COMBO_STYLE = ( + "QComboBox {" + " background-color: #f0f0f0;" + " color: #888888;" + " border: 1px solid #cccccc;" + " border-radius: 5px;" + " padding: 1px 7px;" + " font-size: 11px;" + " min-height: 28px;" + "}" + "QComboBox::drop-down { border: none; width: 0px; }" + "QComboBox::down-arrow { width: 0px; height: 0px; }" +) + # Design tokens — copied verbatim from output_dock.apply_field_style() # so every control matches the rest of the OsdagBridge application. @@ -314,9 +330,19 @@ def _build_left_panel(self): self.member_combo = self._styled_combo() self.member_combo.addItems(["All", "Girder 1", "Girder 2"]) + self.member_combo.setEnabled(False) + self.member_combo.setStyleSheet(_DISABLED_COMBO_STYLE) + self.member_combo.setToolTip( + "Change the member in the Output Dock \u2014 this field mirrors that selection." + ) self.load_combo = self._styled_combo() self.load_combo.addItems(LOAD_COMBINATIONS) + self.load_combo.setEnabled(False) + self.load_combo.setStyleSheet(_DISABLED_COMBO_STYLE) + self.load_combo.setToolTip( + "Change the load combination in the Output Dock \u2014 this field mirrors that selection." + ) self._form_row("Member ID:", self.member_combo, sel_layout) self._form_row("Load Combination:", self.load_combo, sel_layout) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py index 548c0dcf8..1f1cb625d 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py @@ -1,4 +1,5 @@ from __future__ import annotations + from PySide6.QtWidgets import ( QWidget, QVBoxLayout, @@ -8,7 +9,6 @@ QLineEdit, QFrame, QSizePolicy, - QTextEdit, ) from PySide6.QtCore import Qt @@ -29,7 +29,7 @@ "WL", "EL", "IMF", "TL", ] -# 8 design checks from the screenshot — 2 columns ├ù 4 rows +# 8 design checks from the screenshot — 2 columns × 4 rows DESIGN_CHECKS = [ ("flexure", "Strength Limit State (Flexure)"), ("shear_long_trans", "Resistance to Longitudinal and Transverse Shear"), @@ -41,38 +41,205 @@ ("deflection", "Deflection and Crack Control"), ] +# HTML equation strings for each card (rendered via Qt.RichText) +_RENDER_MAP = { + "flexure": { + "eq": ( + "MdMr
" + "Mr = βb · " + "Zp · fy / γm" + ), + "dem_pfx": "Md", + "cap_pfx": "Mr", + "unit": "kN·m", + }, + "shear": { + "eq": ( + "VdVr
" + "Vr = Av · fy / " + "(√3 · γm)" + ), + "dem_pfx": "Vd", + "cap_pfx": "Vr", + "unit": "kN", + }, + "interaction": { + "eq": ( + "Md / (βb · Zp · " + "fy / γm) + " + "Vd / (Av · fy / " + "(√3 · γm)) ≤ 1.0" + ), + "unit": "", + }, + "ltb": { + "eq": ( + "MdMcr
" + "Mcr ≈ (π² · E · " + "Iy) / LLTB²" + ), + "dem_pfx": "Md", + "cap_pfx": "Mcr", + "unit": "kN·m", + }, + "shear_long_trans": { + "eq": ( + "VdVrd
" + "Vrd = Vrd,c + Vrd,s
" + "Vrd,c = 0.18 · k · " + "(100fck)1/3 · b · d
" + "Vrd,s = (Asv · fy " + "· d) / s" + ), + "dem_pfx": "Vd", + "cap_pfx": "Vrd", + "unit": "kN", + }, + "fatigue": { + "eq": ( + "Δσ ≤ Δσallowable
" + "Δσallowable = Δσc / " + "γmf" + ), + "dem_pfx": "Δσ", + "cap_pfx": "Δσallowable", + "unit": "MPa", + }, + "stress": { + "eq": ( + "σ = Md / Z
" + "σfy / γm" + ), + "dem_pfx": "σ", + "cap_pfx": "fy / γm", + "unit": "MPa", + }, + "deflection": { + "eq": ( + "δL / x
" + "(Default x = 600)" + ), + "dem_pfx": "δ", + "cap_pfx": "L / x", + "unit": "mm", + }, +} + + +# ───────────────────────────────────────────────────────────────────────────── +# Badge style definitions +# ───────────────────────────────────────────────────────────────────────────── + +_BADGE_STYLES = { + "pass": ("PASS", "#1a7a4a", "#d4edda"), + "fail": ("FAIL", "#8b0000", "#f8d7da"), + "neutral": ("", "#444444", "#eeeeee"), +} + + +# ───────────────────────────────────────────────────────────────────────────── +# Inline widgets — UtilizationBar and StatusBadge +# ───────────────────────────────────────────────────────────────────────────── + +class UtilizationBar(QWidget): + """Horizontal fill-bar showing demand/capacity ratio (0–1+).""" + + def __init__(self, parent=None): + super().__init__(parent) + self.setFixedHeight(10) + self.setStyleSheet("background: #e0e0e0; border-radius: 5px;") + self._fill = QWidget(self) + self._fill.setFixedHeight(10) + self._ratio = 0.0 + self._fill.resize(0, 10) + self._update() + + def set_ratio(self, ratio: float): + self._ratio = ratio + self._update() + + def resizeEvent(self, event): + super().resizeEvent(event) + self._update() + + def _update(self): + fill_w = int(min(self._ratio, 1.0) * self.width()) + color = "#28a745" if self._ratio <= 1.0 else "#dc3545" + self._fill.setFixedWidth(max(0, fill_w)) + self._fill.setStyleSheet(f"background: {color}; border-radius: 5px;") + + +class StatusBadge(QLabel): + """Small PASS / FAIL label badge with coloured background.""" + + def __init__(self, parent=None): + super().__init__(parent) + self.setFixedSize(60, 22) + self.setAlignment(Qt.AlignCenter) + self.set_neutral() + + def _apply(self, state): + text, fg, bg = _BADGE_STYLES[state] + self.setText(text) + self.setStyleSheet( + f"color: {fg}; background: {bg};" + "font-weight: bold; font-size: 10px; border-radius: 6px;" + ) + + def set_pass(self): + self._apply("pass") + + def set_fail(self): + self._apply("fail") + + def set_neutral(self): + self._apply("neutral") + + +# ───────────────────────────────────────────────────────────────────────────── +# Main tab widget +# ───────────────────────────────────────────────────────────────────────────── class SteelDesignCheckTab(QWidget): """ Design Check tab for the Steel Design dialog. Displays eight IRC code compliance check cards in a two-column grid. - Each card shows a check title and a read-only output area that is - populated at runtime when design results are available. + Each card shows: bold title, styled equation box, computed demand/capacity + values, coloured DCR label, utilization progress bar, and PASS/FAIL badge. + + A summary bar at the top shows aggregate pass/fail counts. Public API ---------- + populate_from_results(demand, capacity, engine) + Populate all 8 cards from the IRC 22:2015 pipeline output. set_check_result(key, text) - Write a result string into the named check card output area. + Write a result string into the named check card. clear_results() Clear all check output areas. set_girder_count(count) - Repopulate the Member ID combo with the correct girder count. + Repopulate the Member ID combo. load_data(cad_state) Restore check results from a cad_state snapshot. - - Check keys (used by set_check_result / load_data) - -------------------------------------------------- - ``flexure``, ``shear_long_trans``, ``shear``, ``fatigue``, - ``interaction``, ``stress``, ``ltb``, ``deflection`` """ def __init__(self, parent=None): - self.check_outputs = {} # key → QTextEdit + # Widget tracking dicts — one entry per card key + self.check_eq_labels = {} # key → equation QLabel + self.check_val_labels = {} # key → demand/capacity QLabel + self.check_dcr_labels = {} # key → DCR QLabel + self.check_bars = {} # key → UtilizationBar + self.check_badges = {} # key → StatusBadge + + self.summary_passed_label = None + self.summary_failed_label = None + self.summary_badge = None + self.design_results = [] super().__init__(parent) - # White background — consistent with SteelDesignDetailsTab and SteelDesignAnalysisTab. + # White background — consistent with other tabs. self.setStyleSheet("background-color: white;") main_layout = QVBoxLayout(self) @@ -88,10 +255,13 @@ def __init__(self, parent=None): container_layout.setContentsMargins(18, 6, 18, 12) container_layout.setSpacing(16) - # ── TOP BAR: Member ID (left) + Load Combination (right) ────── - container_layout.addLayout(self._build_top_bar()) + # ── TOP BAR: Member ID + Load Combination in a bordered card ─────── + container_layout.addWidget(self._build_top_bar()) + + # ── SUMMARY BAR: pass/fail counts + overall badge ───────────── + container_layout.addWidget(self._build_summary_bar()) - # ── CHECK CARDS GRID: 2 columns ─────────────────────────────── + # ── CHECK CARDS GRID: 2 columns ─────────────────────────────── container_layout.addLayout(self._build_checks_grid()) container_layout.addStretch() @@ -99,9 +269,51 @@ def __init__(self, parent=None): scroll_area.setWidget(container) main_layout.addWidget(scroll_area) - # ───────────────────────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── + # SUMMARY BAR + # ───────────────────────────────────────────────────────────────────────── + + def _build_summary_bar(self): + """Build the Checks / Passed / Failed summary row with an overall badge.""" + frame = QFrame() + frame.setObjectName("summaryFrame") + frame.setStyleSheet( + "QFrame#summaryFrame {" + "background: #f0f4e8; border: 1px solid #90AF13;" + "border-radius: 6px; padding: 4px;" + "}" + ) + layout = QHBoxLayout(frame) + layout.setContentsMargins(12, 6, 12, 6) + layout.setSpacing(16) + + _SUMMARY_STYLE = ( + "font-size: 11px; font-weight: 600; color: #2b2b2b; " + "background: transparent; border: none;" + ) + + label = QLabel("Checks: 8") + label.setStyleSheet(_SUMMARY_STYLE) + layout.addWidget(label) + + self.summary_passed_label = QLabel("Passed: \u2014") + self.summary_passed_label.setStyleSheet(_SUMMARY_STYLE) + layout.addWidget(self.summary_passed_label) + + self.summary_failed_label = QLabel("Failed: \u2014") + self.summary_failed_label.setStyleSheet(_SUMMARY_STYLE) + layout.addWidget(self.summary_failed_label) + + layout.addStretch() + + self.summary_badge = StatusBadge() + layout.addWidget(self.summary_badge) + + return frame + + # —————————————————————————————————————————————————————————————————————————— # HELPERS — exact copy from steel_design_details.py - # ───────────────────────────────────────────────────────────────────────── + # —————————————————————————————————————————————————————————————————————————— def _section_card(self, title): """Return a borderless card QFrame with a bold title label and a QVBoxLayout.""" @@ -141,68 +353,119 @@ def _make_grid(self): grid.setColumnStretch(2, 1) return grid - def _readonly_field(self): - """Return a fixed 150×22 px read-only QLineEdit.""" - field = QLineEdit() - field.setReadOnly(True) - field.setFixedWidth(150) - field.setFixedHeight(22) - field.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - apply_field_style(field) - return field - - def _add_row(self, grid, row, text, widget): - """Append a (label, widget) row to grid at the given row index; return the next row index.""" - grid.addWidget(self._row_label(text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) - grid.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) - return row + 1 - - # ───────────────────────────────────────────────────────────────────────── - # TOP BAR - # ───────────────────────────────────────────────────────────────────────── - def _build_top_bar(self): - """Build the Member ID and Load Combination selector row.""" - bar = QHBoxLayout() - bar.setSpacing(24) - bar.setContentsMargins(0, 0, 0, 0) - - # Member ID - member_lbl = QLabel("Member ID") - member_lbl.setStyleSheet(f"{_UI_FONT} color: #000;") + """ + Build the Member ID and Load Combination read-only mirror row. + + Returns a transparent container widget holding two equal-width individual + card frames — one per combo — matching the 'Component' / 'Display Location' + card layout used in the Analysis Results tab: + - each card: white bg, 1 px solid #b0b0b0, border-radius 6 px + - bold section title at the top, combo below + - equal horizontal stretch so both cards share the full width + + The combos are intentionally disabled. The Output Dock is the only place + where the user changes member / load combination; sync_from_output_dock() + writes new selections in here programmatically. + """ + # Shared card stylesheet — identical to comp_card / disp_card in Analysis tab. + _CARD_STYLE = ( + "QFrame#controlCard {" + " background-color: white;" + " border: 1px solid #b0b0b0;" + " border-radius: 6px;" + "}" + "QLabel {" + " border: none;" + " background: transparent;" + "}" + ) + _TITLE_STYLE = ( + "font-size: 13px; color: #2B2B2B; font-weight: bold;" + " background: transparent; border: none;" + ) + + # Disabled combo: black border / #f4f4f4 bg, no arrow — non-interactive read-only. + self._DISABLED_COMBO_STYLE = ( + "QComboBox {" + " padding: 1px 7px;" + " border: 1px solid black;" + " border-radius: 5px;" + " background-color: #f4f4f4;" + " color: #555555;" + " font-size: 11px;" + " min-height: 28px;" + "}" + "QComboBox::drop-down { border: none; width: 0px; }" + "QComboBox::down-arrow { width: 0px; height: 0px; image: none; }" + ) + + # Transparent row container — no border of its own. + container = QWidget() + container.setStyleSheet("background: transparent;") + container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + row = QHBoxLayout(container) + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(16) # gap between the two cards (matches controls_row spacing) + + # ── Member ID card ───────────────────────────────────────────────────── + member_card = QFrame() + member_card.setObjectName("controlCard") + member_card.setStyleSheet(_CARD_STYLE) + member_card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + + mc_layout = QVBoxLayout(member_card) + mc_layout.setContentsMargins(23, 10, 14, 12) + mc_layout.setSpacing(4) + + member_title = QLabel("Member ID") + member_title.setStyleSheet(_TITLE_STYLE) + mc_layout.addWidget(member_title) self.member_combo = NoScrollComboBox() - apply_field_style(self.member_combo) - self.member_combo.setFixedWidth(150) - self.member_combo.setFixedHeight(22) - self.member_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.member_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.member_combo.setFixedHeight(28) self.member_combo.addItems(["All", "Girder 1", "Girder 2"]) - - bar.addWidget(member_lbl) - bar.addWidget(self.member_combo) - - bar.addSpacing(40) - - # Load Combination - load_lbl = QLabel("Load Combination:") - load_lbl.setStyleSheet(f"{_UI_FONT} color: #000;") + self.member_combo.setEnabled(False) + self.member_combo.setStyleSheet(self._DISABLED_COMBO_STYLE) + self.member_combo.setToolTip( + "Change the member in the Output Dock \u2014 this field mirrors that selection." + ) + mc_layout.addWidget(self.member_combo) + + # ── Load Combination card ────────────────────────────────────────────── + load_card = QFrame() + load_card.setObjectName("controlCard") + load_card.setStyleSheet(_CARD_STYLE) + load_card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + + lc_layout = QVBoxLayout(load_card) + lc_layout.setContentsMargins(23, 10, 14, 12) + lc_layout.setSpacing(4) + + load_title = QLabel("Load Combination") + load_title.setStyleSheet(_TITLE_STYLE) + lc_layout.addWidget(load_title) self.load_combo = NoScrollComboBox() - apply_field_style(self.load_combo) - self.load_combo.setFixedWidth(150) - self.load_combo.setFixedHeight(22) - self.load_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.load_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.load_combo.setFixedHeight(28) self.load_combo.addItems(LOAD_COMBINATIONS) + self.load_combo.setEnabled(False) + self.load_combo.setStyleSheet(self._DISABLED_COMBO_STYLE) + self.load_combo.setToolTip( + "Change the load combination in the Output Dock \u2014 this field mirrors that selection." + ) + lc_layout.addWidget(self.load_combo) - bar.addWidget(load_lbl) - bar.addWidget(self.load_combo) - bar.addStretch() + row.addWidget(member_card, 1) # stretch=1: both cards share width equally + row.addWidget(load_card, 1) - return bar + return container - # ───────────────────────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── # CHECK CARDS GRID - # ───────────────────────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── def _build_checks_grid(self): """ @@ -225,55 +488,89 @@ def _build_checks_grid(self): return grid - def _build_check_card(self, key, title): + def _build_check_card(self, key: str, title: str) -> QFrame: """ - Single check card: - - Rounded border matching the screenshot style - - Bold title at top - - Expanding QTextEdit output area below (readonly) + Single check card with five layers: + 1. Bold title + 2. Styled equation box (HTML rich text) + 3. Computed demand / capacity value lines + 4. Coloured DCR label + utilization progress bar + 5. PASS / FAIL status badge """ card = QFrame() card.setObjectName("checkCard") card.setStyleSheet(""" QFrame#checkCard { background-color: white; - border: 1px solid #b0b0b0; - border-radius: 6px; + border: 1px solid #CFCFCF; + border-radius: 8px; } """) card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) card_layout = QVBoxLayout(card) - card_layout.setContentsMargins(12, 10, 12, 10) + card_layout.setContentsMargins(14, 12, 14, 12) card_layout.setSpacing(8) - # Title + # ── 1. Title ────────────────────────────────────────────────────────── title_lbl = QLabel(title) - title_lbl.setStyleSheet(f"{_UI_FONT.replace('11px','12px')} font-weight: bold; color: #2B2B2B; background: transparent; border: none;") + title_lbl.setStyleSheet( + "font-size: 13px; font-weight: bold; color: #000; " + "background: transparent; border: none;" + ) title_lbl.setWordWrap(True) card_layout.addWidget(title_lbl) - # Output area — readonly, expandable, shows check results - output = QTextEdit() - output.setReadOnly(True) - output.setFixedHeight(60) - output.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - output.setStyleSheet(f""" - QTextEdit {{ - background-color: white; - border: none; - {_UI_FONT} - color: #333; - }} - """) - card_layout.addWidget(output) + # ── 2. Equation box (rich text) ─────────────────────────────────────── + eq_lbl = QLabel() + eq_lbl.setTextFormat(Qt.RichText) + eq_lbl.setWordWrap(True) + eq_lbl.setStyleSheet( + "font-family: 'Cambria Math', 'Times New Roman', serif; " + "font-size: 13px; color: #2E3B4E; " + "background-color: #F8F9FA; border: 1px solid #E4E7EB; " + "border-radius: 4px; padding: 6px;" + ) + eq_text = _RENDER_MAP.get(key, {}).get("eq", "") + eq_lbl.setText(eq_text) + card_layout.addWidget(eq_lbl) + self.check_eq_labels[key] = eq_lbl + + # ── 3. Value lines (demand / capacity) ─────────────────────────────── + val_lbl = QLabel() + val_lbl.setTextFormat(Qt.RichText) + val_lbl.setWordWrap(True) + val_lbl.setStyleSheet( + "font-size: 13px; color: #222; " + "background: transparent; border: none; padding-top: 2px;" + ) + card_layout.addWidget(val_lbl) + self.check_val_labels[key] = val_lbl + + # ── 4. DCR label ───────────────────────────────────────────────────── + dcr_lbl = QLabel() + dcr_lbl.setStyleSheet( + "font-size: 14px; font-weight: bold; color: #555; " + "background: transparent; border: none;" + ) + card_layout.addWidget(dcr_lbl) + self.check_dcr_labels[key] = dcr_lbl + + # ── 5. Utilization bar ──────────────────────────────────────────────── + bar = UtilizationBar() + card_layout.addWidget(bar) + self.check_bars[key] = bar + + # ── 6. Status badge ─────────────────────────────────────────────────── + badge = StatusBadge() + card_layout.addWidget(badge, alignment=Qt.AlignLeft) + self.check_badges[key] = badge - self.check_outputs[key] = output return card - # ───────────────────────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── # PUBLIC API - # ───────────────────────────────────────────────────────────────────────── + # ───────────────────────────────────────────────────────────────────────── def set_girder_count(self, count): """Repopulate the Member ID combo with 'All' plus one entry per girder.""" @@ -289,17 +586,251 @@ def load_data(self, cad_state: dict): except (ValueError, TypeError): pass - # Populate check output areas if results are in cad_state - for key, output in self.check_outputs.items(): - result = cad_state.get(f"check_{key}", "") - output.setPlainText(str(result) if result else "") + def set_check_result(self, key: str, text: str) -> None: + """Write plain-text result into the value label of the named card.""" + lbl = self.check_val_labels.get(key) + if lbl is not None: + lbl.setTextFormat(Qt.PlainText) + lbl.setText(text) + + def clear_results(self) -> None: + """Reset all eight cards to their initial empty state.""" + for key in self.check_badges: + lbl = self.check_val_labels.get(key) + if lbl: + lbl.setText("") + dcr = self.check_dcr_labels.get(key) + if dcr: + dcr.setText("") + dcr.setStyleSheet( + "font-size: 14px; font-weight: bold; color: #555; " + "background: transparent; border: none;" + ) + bar = self.check_bars.get(key) + if bar: + bar.set_ratio(0) + badge = self.check_badges.get(key) + if badge: + badge.set_neutral() + self.design_results = [] + self._refresh_summary() + + def populate_from_results( + self, + demand: object, + capacity: object, + engine: object, + ) -> None: + """ + Populate all 8 design-check cards from IRC 22:2015 pipeline output. + + Called by steel_design.py ``_run_design_checks()``. + Each card is populated independently — a failure in one card never + prevents the others from rendering. + + Parameters + ---------- + demand : DemandEnvelope + capacity : CapacityResults (from IRC22CapacityCalculator.compute_all()) + engine : DCREngine (run_all_checks() already called) + """ + self.clear_results() + + by_id: dict[int, object] = {chk.check_id: chk for chk in engine.checks} + + def _classify(dcr: float) -> bool: + return dcr < 1.0 + + # Build a result dict for each card via the DCREngine checks + results_by_key: dict[str, dict] = {} + + # ── 1. Flexure (check_id=1) ────────────────────────────────────────── + try: + c = by_id[1] + results_by_key["flexure"] = { + "demand": c.demand, "capacity": c.capacity, + "ratio": c.dcr, "passed": c.status != "FAIL", + } + except Exception: + pass + + # ── 2. Shear (check_id=2) ──────────────────────────────────────────── + try: + c = by_id[2] + results_by_key["shear"] = { + "demand": c.demand, "capacity": c.capacity, + "ratio": c.dcr, "passed": c.status != "FAIL", + } + except Exception: + pass + + # ── 3. Interaction (check_id=3) ────────────────────────────────────── + try: + c = by_id[3] + results_by_key["interaction"] = { + "demand": c.demand, "capacity": c.capacity, + "ratio": c.dcr, "passed": c.status != "FAIL", + } + except Exception: + pass + + # ── 4. LTB (check_id=4) ────────────────────────────────────────────── + try: + c = by_id[4] + results_by_key["ltb"] = { + "demand": c.demand, "capacity": c.capacity, + "ratio": c.dcr, "passed": c.status != "FAIL", + } + except Exception: + pass + + # ── 5. Deflection — worst of Live (id=5) and Total (id=6) ──────────── + try: + worst = None + for cid in (5, 6): + c = by_id.get(cid) + if c and (worst is None or c.dcr > worst.dcr): + worst = c + if worst: + results_by_key["deflection"] = { + "demand": worst.demand, "capacity": worst.capacity, + "ratio": worst.dcr, "passed": worst.status != "FAIL", + } + except Exception: + pass + + # ── 6. Fatigue — worst of Normal (id=7) and Shear (id=8) ───────────── + try: + worst = None + for cid in (7, 8): + c = by_id.get(cid) + if c and (worst is None or c.dcr > worst.dcr): + worst = c + if worst: + results_by_key["fatigue"] = { + "demand": worst.demand, "capacity": worst.capacity, + "ratio": worst.dcr, "passed": worst.status != "FAIL", + } + except Exception: + pass + + # ── 7. Stress Limitation (Cl.604.3.1) — computed inline ────────────── + try: + Ze_mm3 = ( + capacity.details.get("section_modulus", {}).get("Ze_mm3") + or capacity.details.get("sls_stress", {}).get("Ze_mm3") + or getattr(capacity, "Ze_mm3", None) + ) + if not Ze_mm3: + Ze_mm3 = getattr(capacity, "Zp_mm3", 1) or 1 + sigma_actual = demand.Mu_kNm * 1e6 / max(Ze_mm3, 1) + cap_stress = capacity.sigma_s_limit_MPa + if cap_stress > 0: + dcr = sigma_actual / cap_stress + results_by_key["stress"] = { + "demand": round(sigma_actual, 2), + "capacity": round(cap_stress, 2), + "ratio": round(dcr, 2), + "passed": _classify(dcr), + } + except Exception: + pass + + # ── 8. Longitudinal/Transverse Shear (Cl.606) — computed inline ────── + try: + n_studs = getattr(capacity, "n_studs_per_section", None) or 2 + demand_per_stud = demand.Vu_kN / n_studs + cap_stud = capacity.Qu_kN + if cap_stud > 0: + dcr = demand_per_stud / cap_stud + results_by_key["shear_long_trans"] = { + "demand": round(demand_per_stud, 2), + "capacity": round(cap_stud, 2), + "ratio": round(dcr, 2), + "passed": _classify(dcr), + } + except Exception: + pass + + # ── Apply results to card widgets ───────────────────────────────────── + self.design_results = list(results_by_key.values()) - def set_check_result(self, key: str, text: str): - """Write result text into the named check card output area; silently ignores unknown keys.""" - if key in self.check_outputs: - self.check_outputs[key].setPlainText(text) + for key, res in results_by_key.items(): + self._apply_card_result(key, res) + + self._refresh_summary() + + # ───────────────────────────────────────────────────────────────────────── + # CARD RENDERING HELPERS + # ───────────────────────────────────────────────────────────────────────── + + def _apply_card_result(self, key: str, res: dict) -> None: + """Populate a single card's value/DCR/bar/badge widgets from a result dict.""" + if key not in self.check_val_labels: + return - def clear_results(self): - """Clear all eight check output areas.""" - for output in self.check_outputs.values(): - output.clear() + demand = res.get("demand", 0.0) + capacity = res.get("capacity", 0.0) + ratio = res.get("ratio", 0.0) + passed = res.get("passed", False) + + rm = _RENDER_MAP.get(key, {}) + unit = rm.get("unit", "") + unit_str = f" {unit}" if unit else "" + + # Build value text (demand / capacity lines) + if key == "interaction": + val_text = ( + f"Md / Mr + " + f"Vd / Vr = {demand:.2f}" + ) + else: + dem_pfx = rm.get("dem_pfx", "Demand") + cap_pfx = rm.get("cap_pfx", "Capacity") + val_text = ( + f"{dem_pfx} = {demand:.2f}{unit_str}
" + f"{cap_pfx} = {capacity:.2f}{unit_str}" + ) + + dcr_text = f"DCR = {ratio:.2f}" + dcr_color = "#388E3C" if passed else "#D32F2F" + + # Set value label + val_lbl = self.check_val_labels[key] + val_lbl.setTextFormat(Qt.RichText) + val_lbl.setText(val_text) + + # Set DCR label + dcr_lbl = self.check_dcr_labels.get(key) + if dcr_lbl: + dcr_lbl.setText(dcr_text) + dcr_lbl.setStyleSheet( + f"font-size: 14px; font-weight: bold; color: {dcr_color}; " + "background: transparent; border: none;" + ) + + # Set utilization bar + bar = self.check_bars.get(key) + if bar: + bar.set_ratio(ratio) + + # Set badge + badge = self.check_badges.get(key) + if badge: + badge.set_pass() if passed else badge.set_fail() + + def _refresh_summary(self) -> None: + """Update the summary bar pass/fail counts and overall badge.""" + passed = sum(1 for r in self.design_results if r.get("passed")) + failed = len(self.design_results) - passed + if self.summary_passed_label: + self.summary_passed_label.setText(f"Passed: {passed}") + if self.summary_failed_label: + self.summary_failed_label.setText(f"Failed: {failed}") + if self.summary_badge: + if not self.design_results: + self.summary_badge.set_neutral() + elif failed == 0: + self.summary_badge.set_pass() + else: + self.summary_badge.set_fail() diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py index 1ff5019f4..9d499437e 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py @@ -21,6 +21,21 @@ from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea +# Greyed-out read-only style for combos mirroring the Output Dock selection. +_DISABLED_COMBO_STYLE = ( + "QComboBox {" + " background-color: #f0f0f0;" + " color: #888888;" + " border: 1px solid #cccccc;" + " border-radius: 5px;" + " padding: 1px 7px;" + " font-size: 11px;" + " min-height: 28px;" + "}" + "QComboBox::drop-down { border: none; width: 0px; }" + "QComboBox::down-arrow { width: 0px; height: 0px; }" +) + class NoScrollTable(QTableWidget): """QTableWidget that passes wheel events up to the parent scroll area.""" @@ -179,10 +194,14 @@ def _build_member_section(self): grid = self._make_grid() self.member_combo = NoScrollComboBox() - apply_field_style(self.member_combo) self.member_combo.setMinimumWidth(80) self.member_combo.setMinimumHeight(28) self.member_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.member_combo.setEnabled(False) + self.member_combo.setStyleSheet(_DISABLED_COMBO_STYLE) + self.member_combo.setToolTip( + "Change the member in the Output Dock \u2014 this field mirrors that selection." + ) self.grade_field = self._readonly_field() self.type_field = self._readonly_field() From 716839d1d614beb5052c0dae04d706221bfa64ea Mon Sep 17 00:00:00 2001 From: VT <75622110+VT69@users.noreply.github.com> Date: Sat, 25 Apr 2026 14:54:50 +0530 Subject: [PATCH 202/225] fix: Design Check tab reads already-computed results from backend - plategirderbridge.py: store _dcr_engine after run_design_check() - steel_design.py: read backend._dcr_engine instead of re-running pipeline (was using wrong attr 'bridge' -> None -> example bridge) - steel_design_check.py: remove inline shear_long_trans computation; cards without DCREngine check_id remain blank (matches Output Dock) - Rename DCR label to Utilization Ratio, fix unit/exponent rendering --- .../desktop/ui/dialogs/steel_design.py | 47 ++++++------ .../ui/dialogs/tabs/steel_design_check.py | 72 ++++++------------- 2 files changed, 43 insertions(+), 76 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/steel_design.py b/src/osdagbridge/desktop/ui/dialogs/steel_design.py index c9ee7ade6..9bd16f6f1 100644 --- a/src/osdagbridge/desktop/ui/dialogs/steel_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/steel_design.py @@ -447,43 +447,36 @@ def _on_tab_changed(self, index): def _run_design_checks(self) -> None: """ - Run the IRC 22:2015 pipeline and populate the Design Check tab. + Populate the Design Check tab from the already-computed DCR pipeline. - Uses live model data when available; falls back to a built-in - example bridge so the tab is never left blank. + Data sources (no re-computation): + - demand values → engine.demand (extracted from analysis_results.py) + - capacity / DCR → engine.capacity / engine.checks (computed in designer.py) - Guard: no-op when result_handler identity is unchanged. + The pipeline is executed once by PlateGirderBridge._run_dcr_checks() + during design(); this method simply reads the stored results. """ if self._checks_ran and (self._result_handler is self._last_handler): return - from osdagbridge.core.bridge_types.plate_girder.designer import ( - BridgeConfig, IRC22CapacityCalculator, DCREngine, - _example_demands, _extract_demands_from_analysis, - ) - try: - bridge = getattr(self._main_window, "bridge", None) - config = ( - BridgeConfig.from_plate_girder_bridge(bridge) - if bridge is not None - else BridgeConfig.example_33m_bridge() - ) + backend = getattr(self._main_window, "backend", None) + engine = getattr(backend, "_dcr_engine", None) if backend else None + if engine is None: + return - demand = ( - _extract_demands_from_analysis(self._result_handler) - if self._result_handler is not None - else _example_demands(config) + self.check_tab.populate_from_results( + engine.demand, engine.capacity, engine, ) - calculator = IRC22CapacityCalculator(config) - capacity = calculator.compute_all(Vu_kN=demand.Vu_kN) - - engine = DCREngine(demand, capacity) - engine.run_all_checks() - - self.check_tab.populate_from_results(demand, capacity, engine) - self.check_tab.set_girder_count(config.geometry.n_girders) + from osdagbridge.core.bridge_types.plate_girder.designer import BridgeConfig + bridge_cfg = ( + BridgeConfig.from_plate_girder_bridge(backend) + if backend is not None + else None + ) + if bridge_cfg is not None: + self.check_tab.set_girder_count(bridge_cfg.geometry.n_girders) self._checks_ran = True self._last_handler = self._result_handler diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py index 1f1cb625d..f2335ed7a 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py @@ -51,7 +51,7 @@ ), "dem_pfx": "Md", "cap_pfx": "Mr", - "unit": "kN·m", + "unit": "kNm", }, "shear": { "eq": ( @@ -80,20 +80,23 @@ ), "dem_pfx": "Md", "cap_pfx": "Mcr", - "unit": "kN·m", + "unit": "kNm", }, "shear_long_trans": { + # IRC 22:2015 Cl.606.4.1 — Longitudinal shear flow at steel-concrete interface. + # Demand : VL (N/mm) — longitudinal shear flow + # Capacity: n_studs * Qu / spacing (N/mm) — stud resistance per unit length "eq": ( - "VdVrd
" - "Vrd = Vrd,c + Vrd,s
" - "Vrd,c = 0.18 · k · " - "(100fck)1/3 · b · d
" - "Vrd,s = (Asv · fy " - "· d) / s" + "VLn · Qu / s
" + "VL = Vd · Aec" + " · Y / Ic
" + "Qu = min(0.8fuA, " + "0.29αd²" + "√(fckEcm)) / γv" ), - "dem_pfx": "Vd", - "cap_pfx": "Vrd", - "unit": "kN", + "dem_pfx": "VL", + "cap_pfx": "nQu/s", + "unit": "N/mm", }, "fatigue": { "eq": ( @@ -553,6 +556,7 @@ def _build_check_card(self, key: str, title: str) -> QFrame: "font-size: 14px; font-weight: bold; color: #555; " "background: transparent; border: none;" ) + dcr_lbl.setToolTip("Utilization Ratio = Demand / Capacity (UR < 1.0 → PASS)") card_layout.addWidget(dcr_lbl) self.check_dcr_labels[key] = dcr_lbl @@ -714,43 +718,13 @@ def _classify(dcr: float) -> bool: except Exception: pass - # ── 7. Stress Limitation (Cl.604.3.1) — computed inline ────────────── - try: - Ze_mm3 = ( - capacity.details.get("section_modulus", {}).get("Ze_mm3") - or capacity.details.get("sls_stress", {}).get("Ze_mm3") - or getattr(capacity, "Ze_mm3", None) - ) - if not Ze_mm3: - Ze_mm3 = getattr(capacity, "Zp_mm3", 1) or 1 - sigma_actual = demand.Mu_kNm * 1e6 / max(Ze_mm3, 1) - cap_stress = capacity.sigma_s_limit_MPa - if cap_stress > 0: - dcr = sigma_actual / cap_stress - results_by_key["stress"] = { - "demand": round(sigma_actual, 2), - "capacity": round(cap_stress, 2), - "ratio": round(dcr, 2), - "passed": _classify(dcr), - } - except Exception: - pass - - # ── 8. Longitudinal/Transverse Shear (Cl.606) — computed inline ────── - try: - n_studs = getattr(capacity, "n_studs_per_section", None) or 2 - demand_per_stud = demand.Vu_kN / n_studs - cap_stud = capacity.Qu_kN - if cap_stud > 0: - dcr = demand_per_stud / cap_stud - results_by_key["shear_long_trans"] = { - "demand": round(demand_per_stud, 2), - "capacity": round(cap_stud, 2), - "ratio": round(dcr, 2), - "passed": _classify(dcr), - } - except Exception: - pass + # ── 7. Stress Limitation (Cl.604.3.1) ───────────────────────────────── + # ── 8. Resistance to Longitudinal and Transverse Shear (Cl.606.4.1) ── + # + # Neither check has a corresponding check_id in DCREngine (only IDs + # 1–8 are emitted). These cards intentionally remain blank — showing + # their governing equation only — until the engine adds the checks. + # This matches the Output Dock which shows 0 % for both. # ── Apply results to card widgets ───────────────────────────────────── self.design_results = list(results_by_key.values()) @@ -792,7 +766,7 @@ def _apply_card_result(self, key: str, res: dict) -> None: f"{cap_pfx} = {capacity:.2f}{unit_str}" ) - dcr_text = f"DCR = {ratio:.2f}" + dcr_text = f"Utilization Ratio = {ratio:.2f}" dcr_color = "#388E3C" if passed else "#D32F2F" # Set value label From 7dadfb04dd13ede327d86dd3a18b62f37d425763 Mon Sep 17 00:00:00 2001 From: VT <75622110+VT69@users.noreply.github.com> Date: Sat, 25 Apr 2026 15:13:56 +0530 Subject: [PATCH 203/225] style(ui): fix corrupted unicode characters in design check tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replaced corrupted box-drawing characters and em-dashes in comments and docstrings with standard ASCII dashes - Standardized section dividers across the file to ensure consistent formatting and readability - Removed rendering artifacts that were displaying as 'âââââ' or similar on some platforms --- .../ui/dialogs/tabs/steel_design_check.py | 120 +++++++++--------- 1 file changed, 58 insertions(+), 62 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py index f2335ed7a..3fb3acef1 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py @@ -29,7 +29,7 @@ "WL", "EL", "IMF", "TL", ] -# 8 design checks from the screenshot — 2 columns × 4 rows +# 8 design checks from the screenshot - 2 columns - 4 rows DESIGN_CHECKS = [ ("flexure", "Strength Limit State (Flexure)"), ("shear_long_trans", "Resistance to Longitudinal and Transverse Shear"), @@ -83,9 +83,9 @@ "unit": "kNm", }, "shear_long_trans": { - # IRC 22:2015 Cl.606.4.1 — Longitudinal shear flow at steel-concrete interface. - # Demand : VL (N/mm) — longitudinal shear flow - # Capacity: n_studs * Qu / spacing (N/mm) — stud resistance per unit length + # IRC 22:2015 Cl.606.4.1 - Longitudinal shear flow at steel-concrete interface. + # Demand : VL (N/mm) - longitudinal shear flow + # Capacity: n_studs * Qu / spacing (N/mm) - stud resistance per unit length "eq": ( "VLn · Qu / s
" "VL = Vd · Aec" @@ -129,9 +129,9 @@ } -# ───────────────────────────────────────────────────────────────────────────── +# --------------------------------------------------------------------------- # Badge style definitions -# ───────────────────────────────────────────────────────────────────────────── +# --------------------------------------------------------------------------- _BADGE_STYLES = { "pass": ("PASS", "#1a7a4a", "#d4edda"), @@ -140,12 +140,12 @@ } -# ───────────────────────────────────────────────────────────────────────────── -# Inline widgets — UtilizationBar and StatusBadge -# ───────────────────────────────────────────────────────────────────────────── +# --------------------------------------------------------------------------- +# Inline widgets - UtilizationBar and StatusBadge +# --------------------------------------------------------------------------- class UtilizationBar(QWidget): - """Horizontal fill-bar showing demand/capacity ratio (0–1+).""" + """Horizontal fill-bar showing demand/capacity ratio (0-1+).""" def __init__(self, parent=None): super().__init__(parent) @@ -199,9 +199,9 @@ def set_neutral(self): self._apply("neutral") -# ───────────────────────────────────────────────────────────────────────────── +# --------------------------------------------------------------------------- # Main tab widget -# ───────────────────────────────────────────────────────────────────────────── +# --------------------------------------------------------------------------- class SteelDesignCheckTab(QWidget): """ @@ -228,12 +228,12 @@ class SteelDesignCheckTab(QWidget): """ def __init__(self, parent=None): - # Widget tracking dicts — one entry per card key - self.check_eq_labels = {} # key → equation QLabel - self.check_val_labels = {} # key → demand/capacity QLabel - self.check_dcr_labels = {} # key → DCR QLabel - self.check_bars = {} # key → UtilizationBar - self.check_badges = {} # key → StatusBadge + # Widget tracking dicts - one entry per card key + self.check_eq_labels = {} # key - equation QLabel + self.check_val_labels = {} # key - demand/capacity QLabel + self.check_dcr_labels = {} # key - DCR QLabel + self.check_bars = {} # key - UtilizationBar + self.check_badges = {} # key - StatusBadge self.summary_passed_label = None self.summary_failed_label = None @@ -242,7 +242,7 @@ def __init__(self, parent=None): super().__init__(parent) - # White background — consistent with other tabs. + # White background - consistent with other tabs. self.setStyleSheet("background-color: white;") main_layout = QVBoxLayout(self) @@ -258,13 +258,13 @@ def __init__(self, parent=None): container_layout.setContentsMargins(18, 6, 18, 12) container_layout.setSpacing(16) - # ── TOP BAR: Member ID + Load Combination in a bordered card ─────── + # - TOP BAR: Member ID + Load Combination in a bordered card - container_layout.addWidget(self._build_top_bar()) - # ── SUMMARY BAR: pass/fail counts + overall badge ───────────── + # - SUMMARY BAR: pass/fail counts + overall badge - container_layout.addWidget(self._build_summary_bar()) - # ── CHECK CARDS GRID: 2 columns ─────────────────────────────── + # - CHECK CARDS GRID: 2 columns - container_layout.addLayout(self._build_checks_grid()) container_layout.addStretch() @@ -272,10 +272,9 @@ def __init__(self, parent=None): scroll_area.setWidget(container) main_layout.addWidget(scroll_area) - # ───────────────────────────────────────────────────────────────────────── + # --------------------------------------------------------------------------- # SUMMARY BAR - # ───────────────────────────────────────────────────────────────────────── - + # --------------------------------------------------------------------------- def _build_summary_bar(self): """Build the Checks / Passed / Failed summary row with an overall badge.""" frame = QFrame() @@ -314,9 +313,9 @@ def _build_summary_bar(self): return frame - # —————————————————————————————————————————————————————————————————————————— - # HELPERS — exact copy from steel_design_details.py - # —————————————————————————————————————————————————————————————————————————— +# --------------------------------------------------------------------------- + # HELPERS - exact copy from steel_design_details.py +# --------------------------------------------------------------------------- def _section_card(self, title): """Return a borderless card QFrame with a bold title label and a QVBoxLayout.""" @@ -361,7 +360,7 @@ def _build_top_bar(self): Build the Member ID and Load Combination read-only mirror row. Returns a transparent container widget holding two equal-width individual - card frames — one per combo — matching the 'Component' / 'Display Location' + card frames - one per combo - matching the 'Component' / 'Display Location' card layout used in the Analysis Results tab: - each card: white bg, 1 px solid #b0b0b0, border-radius 6 px - bold section title at the top, combo below @@ -371,7 +370,7 @@ def _build_top_bar(self): where the user changes member / load combination; sync_from_output_dock() writes new selections in here programmatically. """ - # Shared card stylesheet — identical to comp_card / disp_card in Analysis tab. + # Shared card stylesheet - identical to comp_card / disp_card in Analysis tab. _CARD_STYLE = ( "QFrame#controlCard {" " background-color: white;" @@ -388,7 +387,7 @@ def _build_top_bar(self): " background: transparent; border: none;" ) - # Disabled combo: black border / #f4f4f4 bg, no arrow — non-interactive read-only. + # Disabled combo: black border / #f4f4f4 bg, no arrow - non-interactive read-only. self._DISABLED_COMBO_STYLE = ( "QComboBox {" " padding: 1px 7px;" @@ -403,7 +402,7 @@ def _build_top_bar(self): "QComboBox::down-arrow { width: 0px; height: 0px; image: none; }" ) - # Transparent row container — no border of its own. + # Transparent row container - no border of its own. container = QWidget() container.setStyleSheet("background: transparent;") container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) @@ -411,7 +410,7 @@ def _build_top_bar(self): row.setContentsMargins(0, 0, 0, 0) row.setSpacing(16) # gap between the two cards (matches controls_row spacing) - # ── Member ID card ───────────────────────────────────────────────────── + # - Member ID card - member_card = QFrame() member_card.setObjectName("controlCard") member_card.setStyleSheet(_CARD_STYLE) @@ -436,7 +435,7 @@ def _build_top_bar(self): ) mc_layout.addWidget(self.member_combo) - # ── Load Combination card ────────────────────────────────────────────── + # - Load Combination card - load_card = QFrame() load_card.setObjectName("controlCard") load_card.setStyleSheet(_CARD_STYLE) @@ -466,10 +465,9 @@ def _build_top_bar(self): return container - # ───────────────────────────────────────────────────────────────────────── + # --------------------------------------------------------------------------- # CHECK CARDS GRID - # ───────────────────────────────────────────────────────────────────────── - + # --------------------------------------------------------------------------- def _build_checks_grid(self): """ 2-column grid of check cards. @@ -515,7 +513,7 @@ def _build_check_card(self, key: str, title: str) -> QFrame: card_layout.setContentsMargins(14, 12, 14, 12) card_layout.setSpacing(8) - # ── 1. Title ────────────────────────────────────────────────────────── + # - 1. Title - title_lbl = QLabel(title) title_lbl.setStyleSheet( "font-size: 13px; font-weight: bold; color: #000; " @@ -524,7 +522,7 @@ def _build_check_card(self, key: str, title: str) -> QFrame: title_lbl.setWordWrap(True) card_layout.addWidget(title_lbl) - # ── 2. Equation box (rich text) ─────────────────────────────────────── + # - 2. Equation box (rich text) - eq_lbl = QLabel() eq_lbl.setTextFormat(Qt.RichText) eq_lbl.setWordWrap(True) @@ -539,7 +537,7 @@ def _build_check_card(self, key: str, title: str) -> QFrame: card_layout.addWidget(eq_lbl) self.check_eq_labels[key] = eq_lbl - # ── 3. Value lines (demand / capacity) ─────────────────────────────── + # - 3. Value lines (demand / capacity) - val_lbl = QLabel() val_lbl.setTextFormat(Qt.RichText) val_lbl.setWordWrap(True) @@ -550,32 +548,31 @@ def _build_check_card(self, key: str, title: str) -> QFrame: card_layout.addWidget(val_lbl) self.check_val_labels[key] = val_lbl - # ── 4. DCR label ───────────────────────────────────────────────────── + # - 4. DCR label - dcr_lbl = QLabel() dcr_lbl.setStyleSheet( "font-size: 14px; font-weight: bold; color: #555; " "background: transparent; border: none;" ) - dcr_lbl.setToolTip("Utilization Ratio = Demand / Capacity (UR < 1.0 → PASS)") + dcr_lbl.setToolTip("Utilization Ratio = Demand / Capacity (UR < 1.0 - PASS)") card_layout.addWidget(dcr_lbl) self.check_dcr_labels[key] = dcr_lbl - # ── 5. Utilization bar ──────────────────────────────────────────────── + # - 5. Utilization bar - bar = UtilizationBar() card_layout.addWidget(bar) self.check_bars[key] = bar - # ── 6. Status badge ─────────────────────────────────────────────────── + # - 6. Status badge - badge = StatusBadge() card_layout.addWidget(badge, alignment=Qt.AlignLeft) self.check_badges[key] = badge return card - # ───────────────────────────────────────────────────────────────────────── + # --------------------------------------------------------------------------- # PUBLIC API - # ───────────────────────────────────────────────────────────────────────── - + # --------------------------------------------------------------------------- def set_girder_count(self, count): """Repopulate the Member ID combo with 'All' plus one entry per girder.""" self.member_combo.clear() @@ -629,7 +626,7 @@ def populate_from_results( Populate all 8 design-check cards from IRC 22:2015 pipeline output. Called by steel_design.py ``_run_design_checks()``. - Each card is populated independently — a failure in one card never + Each card is populated independently - a failure in one card never prevents the others from rendering. Parameters @@ -648,7 +645,7 @@ def _classify(dcr: float) -> bool: # Build a result dict for each card via the DCREngine checks results_by_key: dict[str, dict] = {} - # ── 1. Flexure (check_id=1) ────────────────────────────────────────── + # - 1. Flexure (check_id=1) - try: c = by_id[1] results_by_key["flexure"] = { @@ -658,7 +655,7 @@ def _classify(dcr: float) -> bool: except Exception: pass - # ── 2. Shear (check_id=2) ──────────────────────────────────────────── + # - 2. Shear (check_id=2) - try: c = by_id[2] results_by_key["shear"] = { @@ -668,7 +665,7 @@ def _classify(dcr: float) -> bool: except Exception: pass - # ── 3. Interaction (check_id=3) ────────────────────────────────────── + # - 3. Interaction (check_id=3) - try: c = by_id[3] results_by_key["interaction"] = { @@ -678,7 +675,7 @@ def _classify(dcr: float) -> bool: except Exception: pass - # ── 4. LTB (check_id=4) ────────────────────────────────────────────── + # - 4. LTB (check_id=4) - try: c = by_id[4] results_by_key["ltb"] = { @@ -688,7 +685,7 @@ def _classify(dcr: float) -> bool: except Exception: pass - # ── 5. Deflection — worst of Live (id=5) and Total (id=6) ──────────── + # - 5. Deflection - worst of Live (id=5) and Total (id=6) - try: worst = None for cid in (5, 6): @@ -703,7 +700,7 @@ def _classify(dcr: float) -> bool: except Exception: pass - # ── 6. Fatigue — worst of Normal (id=7) and Shear (id=8) ───────────── + # - 6. Fatigue - worst of Normal (id=7) and Shear (id=8) - try: worst = None for cid in (7, 8): @@ -718,15 +715,15 @@ def _classify(dcr: float) -> bool: except Exception: pass - # ── 7. Stress Limitation (Cl.604.3.1) ───────────────────────────────── - # ── 8. Resistance to Longitudinal and Transverse Shear (Cl.606.4.1) ── + # - 7. Stress Limitation (Cl.604.3.1) - + # - 8. Resistance to Longitudinal and Transverse Shear (Cl.606.4.1) - # # Neither check has a corresponding check_id in DCREngine (only IDs - # 1–8 are emitted). These cards intentionally remain blank — showing - # their governing equation only — until the engine adds the checks. + # 1-8 are emitted). These cards intentionally remain blank - showing + # their governing equation only - until the engine adds the checks. # This matches the Output Dock which shows 0 % for both. - # ── Apply results to card widgets ───────────────────────────────────── + # - Apply results to card widgets - self.design_results = list(results_by_key.values()) for key, res in results_by_key.items(): @@ -734,10 +731,9 @@ def _classify(dcr: float) -> bool: self._refresh_summary() - # ───────────────────────────────────────────────────────────────────────── + # --------------------------------------------------------------------------- # CARD RENDERING HELPERS - # ───────────────────────────────────────────────────────────────────────── - + # --------------------------------------------------------------------------- def _apply_card_result(self, key: str, res: dict) -> None: """Populate a single card's value/DCR/bar/badge widgets from a result dict.""" if key not in self.check_val_labels: From 37658fb62e33d152df6b87c7bae0dcfca4cd8fcf Mon Sep 17 00:00:00 2001 From: VT <75622110+VT69@users.noreply.github.com> Date: Sun, 26 Apr 2026 00:38:22 +0530 Subject: [PATCH 204/225] Steeel Design Check: Equations shift from HTML --> Matplotlib's Mathtext --- .../bridge_types/plate_girder/graph_engine.py | 55 +++--- .../plate_girder/plategirderbridge.py | 16 +- .../desktop/ui/dialogs/steel_design.py | 5 +- .../ui/dialogs/tabs/steel_design_check.py | 172 +++++++++++++++++- 4 files changed, 195 insertions(+), 53 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py b/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py index e563d5454..bf14c6d6f 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py @@ -1626,52 +1626,41 @@ def _add(val): def _render_x_scale(self, ax, xs: np.ndarray) -> None: """ - Place x-axis ticks at human-friendly round-number intervals. - Selects the interval from [1, 2, 5, 10, 20, 25, 50] m such that - 4–6 ticks appear for any span. First and last span positions are - always shown. Tick labels: '0 m', '10 m', etc. + Place x-axis ticks at exactly 4 equal intervals across the span. + First and last span positions are always shown. """ if len(xs) == 0: return - import math - span = float(xs[-1] - xs[0]) x_start = float(xs[0]) x_end = float(xs[-1]) - # Pick smallest "nice" step that produces at most 6 intervals - nice_steps = [1, 2, 5, 10, 20, 25, 50] - step = nice_steps[-1] # safe default - for s in nice_steps: - if span / s <= 6: - step = s - break - - # Build ticks from the first multiple of step >= x_start - first = math.ceil(x_start / step) * step - ticks = [] - t = first - while t <= x_end + 1e-9: - ticks.append(round(t, 9)) - t += step - - # Always include span endpoints - if not ticks or abs(ticks[0] - x_start) > 1e-6: - ticks.insert(0, x_start) - if not ticks or abs(ticks[-1] - x_end) > 1e-6: - ticks.append(x_end) - - # Deduplicate and sort + # Divide whole length into 4 equal parts + step = span / 4.0 + + ticks = [ + x_start, + x_start + step, + x_start + 2.0 * step, + x_start + 3.0 * step, + x_end + ] + + # Deduplicate and sort (in case span is zero) ticks = sorted(set(round(v, 6) for v in ticks)) # Format labels - all_int = all(abs(v - round(v)) < 1e-6 for v in ticks) - fmt = "{:.0f} m" if all_int else "{:.1f} m" + labels = [] + for t in ticks: + val_str = f"{t:.3f}".rstrip("0").rstrip(".") + if not val_str: + val_str = "0" + labels.append(f"{val_str} m") ax.set_xticks(ticks) ax.set_xticklabels( - [fmt.format(t) for t in ticks], + labels, fontsize=_STYLE["scale_fontsize"], color=_STYLE["label_color"], fontfamily=_STYLE.get("fontfamily", "sans-serif"), @@ -1760,7 +1749,7 @@ def show_blank_state(self, canvas, message: Optional[str] = None) -> None: display_message = ( message if message is not None - else "Run the analysis first to see results." + else "Please run the design analysis to view results." ) for ax in (self.ax_scheme, self.ax_bmd, self.ax_sfd, self.ax_defl): diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 9f7800e15..6abe31b3e 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -699,13 +699,15 @@ def _run_dcr_checks(self, dataset) -> None: def get_results_dataset(self): """Return the xarray Dataset of analysis results.""" + if self.grillage_model.model is None: + return None return self.grillage_model.model.get_results() # ───────────────────────────────────────────────────────────────────────── # 2-D analysis result factory # ───────────────────────────────────────────────────────────────────────── - def get_result_handler(self) -> PlateGirderAnalysisResults: + def get_result_handler(self) -> PlateGirderAnalysisResults | None: """ Build and return a PlateGirderAnalysisResults bound to the current analysis dataset and grillage model. @@ -717,15 +719,9 @@ def get_result_handler(self) -> PlateGirderAnalysisResults: Returns ------- - PlateGirderAnalysisResults + PlateGirderAnalysisResults or None A fully initialised result handler ready to be injected into a - GirderGraphEngine. - - Raises - ------ - RuntimeError - Propagated from get_results_dataset() when analyze() has not yet - been called and no dataset is available. + GirderGraphEngine, or None if analysis has not been run. Notes ----- @@ -736,6 +732,8 @@ def get_result_handler(self) -> PlateGirderAnalysisResults: explicitly to build_graph_engine(). """ results = self.get_results_dataset() + if results is None: + return None return PlateGirderAnalysisResults( dataset=results, bridge=self.grillage_model, diff --git a/src/osdagbridge/desktop/ui/dialogs/steel_design.py b/src/osdagbridge/desktop/ui/dialogs/steel_design.py index 9bd16f6f1..65eee4da9 100644 --- a/src/osdagbridge/desktop/ui/dialogs/steel_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/steel_design.py @@ -432,10 +432,7 @@ def _on_tab_changed(self, index): return if self._result_handler is None: - self.graph_engine.show_blank_state( - self.canvas, - "Run Design first to see analysis results." - ) + self.graph_engine.show_blank_state(self.canvas) return if not self._data_initialized: diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py index 3fb3acef1..0d772c220 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py @@ -11,6 +11,11 @@ QSizePolicy, ) from PySide6.QtCore import Qt +from PySide6.QtGui import QPixmap, QImage + +import io +from matplotlib.figure import Figure +from matplotlib.backends.backend_agg import FigureCanvasAgg from osdagbridge.desktop.ui.docks.output_dock import ( NoScrollComboBox, @@ -129,6 +134,138 @@ } +# --------------------------------------------------------------------------- +# Matplotlib mathtext strings — one list per check key. +# Each string in the list becomes one rendered line in the equation box. +# Syntax: matplotlib mathtext (large subset of AMS LaTeX). +# --------------------------------------------------------------------------- +_MATHTEXT_MAP: dict[str, list[str]] = { + "flexure": [ + r"$M_d \leq M_r$", + r"$M_r = \beta_b \cdot Z_p \cdot f_y \;/\; \gamma_m$", + ], + "shear": [ + r"$V_d \leq V_r$", + r"$V_r = \dfrac{A_v \cdot f_y}{\sqrt{3} \cdot \gamma_m}$", + ], + "interaction": [ + r"$\dfrac{M_d}{\beta_b Z_p f_y / \gamma_m}" + r" + \dfrac{V_d}{A_v f_y / (\sqrt{3}\,\gamma_m)} \leq 1.0$", + ], + "ltb": [ + r"$M_d \leq M_{cr}$", + r"$M_{cr} \approx \dfrac{\pi^2 E \, I_y}{L_{LTB}^{\,2}}$", + ], + "shear_long_trans": [ + r"$V_L \leq n \cdot Q_u \;/\; s$", + r"$V_L = V_d \cdot A_{ec} \cdot Y \;/\; I_c$", + r"$Q_u = \min\!\left(0.8\,f_u A,\;" + r"0.29\,\alpha\,d^2\sqrt{f_{ck}\,E_{cm}}\right)/\gamma_v$", + ], + "fatigue": [ + r"$\Delta\sigma \leq \Delta\sigma_{allowable}$", + r"$\Delta\sigma_{allowable} = \Delta\sigma_C \;/\; \gamma_{mf}$", + ], + "stress": [ + r"$\sigma = M_d \;/\; Z$", + r"$\sigma \leq f_y \;/\; \gamma_m$", + ], + "deflection": [ + r"$\delta \leq L \;/\; x$", + r"$(\mathrm{Default}\; x = 600)$", + ], +} + +def _render_mathtext_pixmap( + lines: list[str], + *, + font_size: float = 9, + dpi: int = 110, + text_color: str = "#2E3B4E", + bg_color: str = "#F8F9FA", + h_pad_in: float = 0.12, + v_pad_in: float = 0.10, + line_gap_in: float = 0.32, +) -> QPixmap: + """ + Render a list of matplotlib mathtext strings into a single QPixmap. + + Lines are stacked vertically with even spacing. The figure is sized to + fit the content tightly; the caller is responsible for placing the pixmap + inside a QLabel that provides the grey background frame. + + Parameters + ---------- + lines : list of mathtext strings, each wrapped in ``$...$`` + font_size : points; 11.5 matches the surrounding 13 px UI font at 96 dpi + dpi : dots per inch for rasterisation + text_color : hex colour string matching the existing equation box style + bg_color : figure background; should match the QLabel background colour + h_pad_in : left/right margin in inches + v_pad_in : top/bottom margin in inches + line_gap_in : vertical gap between lines in inches + + Returns + ------- + QPixmap — transparent if rendering fails (caller falls back to HTML). + + Raises + ------ + Never raises. Returns an empty QPixmap on any error. + """ + if not lines: + return QPixmap() + + n = len(lines) + # Estimate figure height: n lines + (n-1) gaps + top/bottom padding + fig_h = n * line_gap_in + (n - 1) * (line_gap_in * 0.15) + 2 * v_pad_in + # Width will be determined by bbox_inches="tight"; start with a sensible default + fig_w = 4.8 + + fig = Figure(figsize=(fig_w, fig_h), dpi=dpi, facecolor=bg_color) + fig.patch.set_facecolor(bg_color) + + try: + for i, expr in enumerate(lines): + # y position: distribute evenly from top (1.0) to bottom (0.0) + y = 1.0 - (i + 0.5) / n + fig.text( + 0.5, y, + expr, + ha="center", + va="center", + fontsize=font_size, + color=text_color, + usetex=False, # matplotlib mathtext, NOT system LaTeX + ) + + canvas = FigureCanvasAgg(fig) + canvas.draw() + + buf = io.BytesIO() + fig.savefig( + buf, + format="png", + dpi=dpi, + bbox_inches="tight", + facecolor=bg_color, + pad_inches=v_pad_in, + ) + buf.seek(0) + data = buf.read() + + except Exception: + return QPixmap() + finally: + import matplotlib.pyplot as _plt + _plt.close(fig) # prevent memory accumulation across 8 cards + + pixmap = QPixmap() + if not pixmap.loadFromData(data, "PNG"): + return QPixmap() + return pixmap + + # --------------------------------------------------------------------------- # Badge style definitions # --------------------------------------------------------------------------- @@ -522,18 +659,39 @@ def _build_check_card(self, key: str, title: str) -> QFrame: title_lbl.setWordWrap(True) card_layout.addWidget(title_lbl) - # - 2. Equation box (rich text) - + # - 2. Equation box (mathtext pixmap or HTML fallback) - eq_lbl = QLabel() - eq_lbl.setTextFormat(Qt.RichText) - eq_lbl.setWordWrap(True) + eq_lbl.setAlignment(Qt.AlignCenter) eq_lbl.setStyleSheet( - "font-family: 'Cambria Math', 'Times New Roman', serif; " - "font-size: 13px; color: #2E3B4E; " "background-color: #F8F9FA; border: 1px solid #E4E7EB; " "border-radius: 4px; padding: 6px;" ) - eq_text = _RENDER_MAP.get(key, {}).get("eq", "") - eq_lbl.setText(eq_text) + + math_lines = _MATHTEXT_MAP.get(key, []) + _pixmap_set = False + + if math_lines: + try: + pixmap = _render_mathtext_pixmap(math_lines) + if not pixmap.isNull(): + eq_lbl.setPixmap(pixmap) + _pixmap_set = True + except Exception: + pass + + if not _pixmap_set: + # Graceful fallback: render using original HTML if mathtext fails + eq_lbl.setTextFormat(Qt.RichText) + eq_lbl.setWordWrap(True) + eq_lbl.setStyleSheet( + "font-family: 'Cambria Math', 'Times New Roman', serif; " + "font-size: 13px; color: #2E3B4E; " + "background-color: #F8F9FA; border: 1px solid #E4E7EB; " + "border-radius: 4px; padding: 6px;" + ) + eq_text = _RENDER_MAP.get(key, {}).get("eq", "") + eq_lbl.setText(eq_text) + card_layout.addWidget(eq_lbl) self.check_eq_labels[key] = eq_lbl From cc146de921508a9892a27af2ab450bb926c24c4b Mon Sep 17 00:00:00 2001 From: VT <75622110+VT69@users.noreply.github.com> Date: Thu, 30 Apr 2026 19:18:46 +0530 Subject: [PATCH 205/225] Member id & lc shift --- .../desktop/ui/dialogs/steel_design.py | 309 +++++++++++++----- .../ui/dialogs/tabs/steel_design_analysis.py | 38 +-- .../ui/dialogs/tabs/steel_design_check.py | 123 +------ .../ui/dialogs/tabs/steel_design_details.py | 18 +- 4 files changed, 233 insertions(+), 255 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/steel_design.py b/src/osdagbridge/desktop/ui/dialogs/steel_design.py index 65eee4da9..53243b69f 100644 --- a/src/osdagbridge/desktop/ui/dialogs/steel_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/steel_design.py @@ -9,6 +9,7 @@ from osdagbridge.desktop.ui.dialogs.tabs.steel_design_details import SteelDesignDetailsTab from osdagbridge.desktop.ui.dialogs.tabs.steel_design_analysis import SteelDesignAnalysisTab from osdagbridge.desktop.ui.dialogs.tabs.steel_design_check import SteelDesignCheckTab +from osdagbridge.desktop.ui.docks.output_dock import NoScrollComboBox import numpy as np from matplotlib.figure import Figure @@ -144,6 +145,7 @@ def init_ui(self): self.tabs.addTab(self.analysis_tab, "Analysis Results") self.tabs.addTab(self.check_tab, "Design Check") + main_layout.addWidget(self._build_global_selection_bar()) main_layout.addWidget(self.tabs) if hasattr(self._main_window, "cad_state"): @@ -152,6 +154,127 @@ def init_ui(self): # Inject the matplotlib canvas into the Analysis Results tab self._setup_analysis_plots() + def _build_global_selection_bar(self): + """Build the global Member ID and Load Combination bar.""" + # Shared card stylesheet + _CARD_STYLE = ( + "QFrame#controlCard {" + " background-color: white;" + " border: 1px solid #b0b0b0;" + " border-radius: 6px;" + "}" + "QFrame#controlCard > QLabel {" + " border: none;" + " background: transparent;" + "}" + ) + _TITLE_STYLE = ( + "font-size: 13px; color: #2B2B2B; font-weight: bold;" + " background: transparent; border: none;" + ) + _COMBO_STYLE = """ + QComboBox { + padding: 1px 7px; + border: 1px solid black; + border-radius: 5px; + background-color: white; + color: black; + font-size: 11px; + min-height: 28px; + } + QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + border-left: 0px; + } + QComboBox::down-arrow { + image: url(:/vectors/arrow_down_light.svg); + width: 20px; + height: 20px; + margin-right: 8px; + } + QComboBox::down-arrow:on { + image: url(:/vectors/arrow_up_light.svg); + width: 20px; + height: 20px; + margin-right: 8px; + } + QComboBox QAbstractItemView { + background-color: white; + border: 1px solid black; + outline: none; + } + QComboBox QAbstractItemView::item { + color: black; + background-color: white; + border: 1px solid white; + border-radius: 0; + padding: 2px; + } + QComboBox QAbstractItemView::item:hover { + border: 1px solid #90AF13; + background-color: #90AF13; + color: black; + } + QComboBox QAbstractItemView::item:selected { + background-color: #90AF13; + color: black; + border: 1px solid #90AF13; + } + """ + + container = QWidget() + container.setStyleSheet("background: transparent;") + container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + row = QHBoxLayout(container) + row.setContentsMargins(0, 0, 0, 6) + row.setSpacing(16) + + # - Member ID card - + member_card = QFrame() + member_card.setObjectName("controlCard") + member_card.setStyleSheet(_CARD_STYLE) + member_card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + + mc_layout = QVBoxLayout(member_card) + mc_layout.setContentsMargins(23, 10, 14, 12) + mc_layout.setSpacing(4) + + member_title = QLabel("Member ID") + member_title.setStyleSheet(_TITLE_STYLE) + mc_layout.addWidget(member_title) + + self.member_combo = NoScrollComboBox() + self.member_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.member_combo.setFixedHeight(28) + self.member_combo.setStyleSheet(_COMBO_STYLE) + mc_layout.addWidget(self.member_combo) + + # - Load Combination card - + load_card = QFrame() + load_card.setObjectName("controlCard") + load_card.setStyleSheet(_CARD_STYLE) + load_card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + + lc_layout = QVBoxLayout(load_card) + lc_layout.setContentsMargins(23, 10, 14, 12) + lc_layout.setSpacing(4) + + load_title = QLabel("Load Combination") + load_title.setStyleSheet(_TITLE_STYLE) + lc_layout.addWidget(load_title) + + self.load_combo = NoScrollComboBox() + self.load_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.load_combo.setFixedHeight(28) + self.load_combo.setStyleSheet(_COMBO_STYLE) + lc_layout.addWidget(self.load_combo) + + row.addWidget(member_card, 1) + row.addWidget(load_card, 1) + + return container + def _setup_analysis_plots(self): """ Build and inject the matplotlib figure canvas into the Analysis Results tab. @@ -337,9 +460,9 @@ def _setup_analysis_plots(self): # ── Signal wiring ───────────────────────────────────────────────────── self.tabs.currentChanged.connect(self._on_tab_changed) - # NOTE: member_combo and load_combo in analysis_tab are disabled (read-only - # mirrors of the Output Dock). Their signals are NOT connected here — - # selections are pushed programmatically via sync_from_output_dock(). + # NOTE: member_combo and load_combo are now fully interactive + self.member_combo.currentIndexChanged.connect(self._update_analysis_plots) + self.load_combo.currentIndexChanged.connect(self._on_load_combo_changed) if hasattr(self.analysis_tab, "component_combo"): self.analysis_tab.component_combo.currentIndexChanged.connect(self._update_analysis_plots) self.analysis_tab.component_combo.currentIndexChanged.connect( @@ -361,60 +484,7 @@ def _setup_analysis_plots(self): # ── UI initialisation state ─────────────────────────────────────────── self._data_initialized = False - # ========================================================================= - # OUTPUT DOCK SYNC - # ========================================================================= - def sync_from_output_dock( - self, - member_display: str | None = None, - load_case: str | None = None, - ) -> None: - """ - Called by the Output Dock to push the currently active member and load - combination into all three tabs. - - The combos in every tab are disabled (not user-editable). This is the - single authoritative write path — it temporarily bypasses the disabled - state, writes the value, then re-disables the widget so the next - mouse-click cannot change it. - """ - def _set_combo(combo, text: str) -> None: - """Write *text* into a possibly-disabled QComboBox without enabling it.""" - combo.blockSignals(True) - combo.setEnabled(True) - idx = combo.findText(text) - if idx >= 0: - combo.setCurrentIndex(idx) - else: - # Value not in list — add it transiently so it is visible. - combo.insertItem(0, text) - combo.setCurrentIndex(0) - combo.setEnabled(False) - combo.blockSignals(False) - - # ── Analysis tab ────────────────────────────────────────────────────── - if member_display is not None: - _set_combo(self.analysis_tab.member_combo, member_display) - if load_case is not None: - _set_combo(self.analysis_tab.load_combo, load_case) - - # ── Design Check tab ────────────────────────────────────────────────── - if member_display is not None: - _set_combo(self.check_tab.member_combo, member_display) - if load_case is not None: - _set_combo(self.check_tab.load_combo, load_case) - - # ── Details tab (member only, no load combo) ────────────────────────── - if member_display is not None: - _set_combo(self.details_tab.member_combo, member_display) - - # Refresh analysis plot for the newly selected member / load case - self._update_analysis_plots() - - # ========================================================================= - # EVENT HANDLERS - # ========================================================================= def _on_tab_changed(self, index): """ @@ -444,15 +514,20 @@ def _on_tab_changed(self, index): def _run_design_checks(self) -> None: """ - Populate the Design Check tab from the already-computed DCR pipeline. + Populate the Design Check tab. - Data sources (no re-computation): - - demand values → engine.demand (extracted from analysis_results.py) - - capacity / DCR → engine.capacity / engine.checks (computed in designer.py) - - The pipeline is executed once by PlateGirderBridge._run_dcr_checks() - during design(); this method simply reads the stored results. + On the first visit the stored engine from PlateGirderBridge._run_dcr_checks() + is used. On subsequent visits (after member/LC changes) the dynamically + re-computed engine from _update_design_checks_for_member() is preferred. """ + # If a dynamic engine was already computed for the current selection, use it. + if getattr(self, "_dynamic_dcr_engine", None) is not None: + engine = self._dynamic_dcr_engine + self.check_tab.populate_from_results( + engine.demand, engine.capacity, engine, + ) + return + if self._checks_ran and (self._result_handler is self._last_handler): return @@ -466,15 +541,6 @@ def _run_design_checks(self) -> None: engine.demand, engine.capacity, engine, ) - from osdagbridge.core.bridge_types.plate_girder.designer import BridgeConfig - bridge_cfg = ( - BridgeConfig.from_plate_girder_bridge(backend) - if backend is not None - else None - ) - if bridge_cfg is not None: - self.check_tab.set_girder_count(bridge_cfg.geometry.n_girders) - self._checks_ran = True self._last_handler = self._result_handler @@ -485,6 +551,86 @@ def _run_design_checks(self) -> None: "shear_long_trans", "fatigue", "stress", "deflection"): self.check_tab.set_check_result(key, err) + def _update_design_checks_for_member(self, member_key: str) -> None: + """ + Re-run the DCR pipeline for the selected girder member. + + Imports and calls classes from designer.py (read-only — no modifications + to that module). The pipeline is: + 1. BridgeConfig from backend + 2. DemandExtractor.from_analysis_results() for the specific girder + 3. IRC22CapacityCalculator.compute_all() + 4. DCREngine.run_all_checks() + 5. check_tab.populate_from_results() + """ + try: + backend = getattr(self._main_window, "backend", None) + if backend is None or self._result_handler is None: + return + + from osdagbridge.core.bridge_types.plate_girder.designer import ( + BridgeConfig, + DemandExtractor, + IRC22CapacityCalculator, + DCREngine, + _composite_stiffness_ratio, + ) + + # Step 1: BridgeConfig + config = BridgeConfig.from_plate_girder_bridge(backend) + + # Step 2: Resolve girder elements/nodes for the selected member + girders, _ = self._result_handler.build_girders(verbose=False) + girder_info = girders.get(member_key) + if girder_info is None: + # member_key not found — keep the existing checks + return + + element_ids = list(girder_info.get("elements", [])) + node_ids = list(girder_info.get("path", [])) + if not element_ids: + return + + # Step 3: Extract demands for this specific girder + Ze_steel_mm3 = float(config.section.Ze_steel) + Aw_mm2 = float(config.section.Aw) + Nsc = int(config.fatigue.Nsc) + ratio = _composite_stiffness_ratio(config) + + demand = DemandExtractor.from_analysis_results( + results=self._result_handler, + element_ids=element_ids, + node_ids=node_ids, + Ze_steel_mm3=Ze_steel_mm3, + Aw_mm2=Aw_mm2, + Nsc=Nsc, + member_name=member_key, + stiffness_ratio=ratio, + ) + + # Step 4: Compute capacity + calculator = IRC22CapacityCalculator(config) + capacity = calculator.compute_all( + Vu_kN=demand.Vu_kN, + stress_range_MPa=demand.stress_range_MPa, + ) + + # Step 5: Run DCR checks + engine = DCREngine(demand, capacity) + engine.run_all_checks() + + # Store the dynamic engine so _run_design_checks uses it + self._dynamic_dcr_engine = engine + + # Step 6: Update the Design Check tab + self.check_tab.populate_from_results( + engine.demand, engine.capacity, engine, + ) + + except Exception: + import traceback + traceback.print_exc() + @property def _interaction_mode(self) -> str: """Return the active display mode based on radio button selection.""" @@ -582,7 +728,7 @@ def _on_load_combo_changed(self, index: int) -> None: the selection to the next real load case in the appropriate direction, then delegates to ``_update_analysis_plots``. """ - combo = self.analysis_tab.load_combo + combo = self.load_combo model = combo.model() n = combo.count() @@ -631,13 +777,11 @@ def _girder_display_name(key: str, idx: int) -> str: return f"Girder {key[1:]}" return key # fallback: show raw key - combo = self.analysis_tab.member_combo + combo = self.member_combo combo.blockSignals(True) - combo.setEnabled(True) # temporarily enable to allow writes combo.clear() for idx, key in enumerate(self.graph_engine.get_girder_keys()): combo.addItem(_girder_display_name(key, idx), userData=key) - combo.setEnabled(False) # restore disabled/read-only state combo.blockSignals(False) # ── Category-header helper ──────────────────────────────────────────────── @@ -679,7 +823,7 @@ def _populate_load_combo(self): added when it contains at least one item. The first real (selectable) load case is selected after population. """ - combo = self.analysis_tab.load_combo + combo = self.load_combo classified = self.graph_engine.get_classified_loadcases() dead_lcs = classified.get("dead", []) @@ -693,7 +837,6 @@ def _populate_load_combo(self): dead_lcs = [preferred] + dead_lcs combo.blockSignals(True) - combo.setEnabled(True) # temporarily enable to allow writes combo.clear() first_selectable_idx = None @@ -728,9 +871,10 @@ def _populate_load_combo(self): elif combo.count() > 0: combo.setCurrentIndex(0) - combo.setEnabled(False) # restore disabled/read-only state combo.blockSignals(False) + + # ========================================================================= # PLOT RENDERING # ========================================================================= @@ -747,9 +891,9 @@ def _update_analysis_plots(self, *_args): engine.show_blank_state(self.canvas) return - combo = self.analysis_tab.member_combo + combo = self.member_combo member_key = combo.currentData() or combo.currentText() - loadcase = self.analysis_tab.load_combo.currentText() + loadcase = self.load_combo.currentText() # Reject header/separator items (they start with '──') if not loadcase or loadcase.startswith(_COMBO_HEADER_PREFIX): @@ -853,6 +997,9 @@ def _update_analysis_plots(self, *_args): self._update_value_fields(self._current_max_dict, max_keys) self._on_interaction_mode_changed() + # Re-run design checks for the newly selected member / loadcase + self._update_design_checks_for_member(member_key) + # ========================================================================= # UI UPDATE HELPERS # ========================================================================= diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py index 077f763eb..f72a11d17 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py @@ -319,35 +319,6 @@ def _build_left_panel(self): layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(10) - # ── Selection card ──────────────────────────────────────────── - sel_card = self._card_frame() - sel_layout = QVBoxLayout(sel_card) - # Left margin = 23 to match effective indent of Results group box fields: - # Results: card_L(12) + groupbox_border(1) + groupbox_margin_L(10) = 23px - sel_layout.setContentsMargins(23, 10, 14, 12) - sel_layout.setSpacing(8) - sel_layout.addWidget(self._section_title("Select Member")) - - self.member_combo = self._styled_combo() - self.member_combo.addItems(["All", "Girder 1", "Girder 2"]) - self.member_combo.setEnabled(False) - self.member_combo.setStyleSheet(_DISABLED_COMBO_STYLE) - self.member_combo.setToolTip( - "Change the member in the Output Dock \u2014 this field mirrors that selection." - ) - - self.load_combo = self._styled_combo() - self.load_combo.addItems(LOAD_COMBINATIONS) - self.load_combo.setEnabled(False) - self.load_combo.setStyleSheet(_DISABLED_COMBO_STYLE) - self.load_combo.setToolTip( - "Change the load combination in the Output Dock \u2014 this field mirrors that selection." - ) - - self._form_row("Member ID:", self.member_combo, sel_layout) - self._form_row("Load Combination:", self.load_combo, sel_layout) - - layout.addWidget(sel_card) # ── Results card ────────────────────────────────────────────── res_card = self._card_frame() @@ -596,10 +567,7 @@ def update_rhs_labels(self, component_index): self.lbl_v.setText("Fx (kN)") self.lbl_d.setText("Dx (mm)") - def set_girder_count(self, count): - """Repopulate member_combo with 'Girder 1' … 'Girder N' entries.""" - self.member_combo.clear() - self.member_combo.addItems(["All"] + [f"Girder {i}" for i in range(1, count + 1)]) + def load_data(self, cad_state: dict): """ @@ -608,10 +576,6 @@ def load_data(self, cad_state: dict): """ if not cad_state: return - try: - self.set_girder_count(int(cad_state.get("no_of_girders", 2))) - except (ValueError, TypeError): - pass for key, field in self.result_fields.items(): field.setText(str(cad_state.get(key, ""))) for key, field in self.x_fields.items(): diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py index 0d772c220..e0ed58018 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py @@ -395,8 +395,7 @@ def __init__(self, parent=None): container_layout.setContentsMargins(18, 6, 18, 12) container_layout.setSpacing(16) - # - TOP BAR: Member ID + Load Combination in a bordered card - - container_layout.addWidget(self._build_top_bar()) + # - SUMMARY BAR: pass/fail counts + overall badge - container_layout.addWidget(self._build_summary_bar()) @@ -492,115 +491,6 @@ def _make_grid(self): grid.setColumnStretch(2, 1) return grid - def _build_top_bar(self): - """ - Build the Member ID and Load Combination read-only mirror row. - - Returns a transparent container widget holding two equal-width individual - card frames - one per combo - matching the 'Component' / 'Display Location' - card layout used in the Analysis Results tab: - - each card: white bg, 1 px solid #b0b0b0, border-radius 6 px - - bold section title at the top, combo below - - equal horizontal stretch so both cards share the full width - - The combos are intentionally disabled. The Output Dock is the only place - where the user changes member / load combination; sync_from_output_dock() - writes new selections in here programmatically. - """ - # Shared card stylesheet - identical to comp_card / disp_card in Analysis tab. - _CARD_STYLE = ( - "QFrame#controlCard {" - " background-color: white;" - " border: 1px solid #b0b0b0;" - " border-radius: 6px;" - "}" - "QLabel {" - " border: none;" - " background: transparent;" - "}" - ) - _TITLE_STYLE = ( - "font-size: 13px; color: #2B2B2B; font-weight: bold;" - " background: transparent; border: none;" - ) - - # Disabled combo: black border / #f4f4f4 bg, no arrow - non-interactive read-only. - self._DISABLED_COMBO_STYLE = ( - "QComboBox {" - " padding: 1px 7px;" - " border: 1px solid black;" - " border-radius: 5px;" - " background-color: #f4f4f4;" - " color: #555555;" - " font-size: 11px;" - " min-height: 28px;" - "}" - "QComboBox::drop-down { border: none; width: 0px; }" - "QComboBox::down-arrow { width: 0px; height: 0px; image: none; }" - ) - - # Transparent row container - no border of its own. - container = QWidget() - container.setStyleSheet("background: transparent;") - container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - row = QHBoxLayout(container) - row.setContentsMargins(0, 0, 0, 0) - row.setSpacing(16) # gap between the two cards (matches controls_row spacing) - - # - Member ID card - - member_card = QFrame() - member_card.setObjectName("controlCard") - member_card.setStyleSheet(_CARD_STYLE) - member_card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - - mc_layout = QVBoxLayout(member_card) - mc_layout.setContentsMargins(23, 10, 14, 12) - mc_layout.setSpacing(4) - - member_title = QLabel("Member ID") - member_title.setStyleSheet(_TITLE_STYLE) - mc_layout.addWidget(member_title) - - self.member_combo = NoScrollComboBox() - self.member_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - self.member_combo.setFixedHeight(28) - self.member_combo.addItems(["All", "Girder 1", "Girder 2"]) - self.member_combo.setEnabled(False) - self.member_combo.setStyleSheet(self._DISABLED_COMBO_STYLE) - self.member_combo.setToolTip( - "Change the member in the Output Dock \u2014 this field mirrors that selection." - ) - mc_layout.addWidget(self.member_combo) - - # - Load Combination card - - load_card = QFrame() - load_card.setObjectName("controlCard") - load_card.setStyleSheet(_CARD_STYLE) - load_card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - - lc_layout = QVBoxLayout(load_card) - lc_layout.setContentsMargins(23, 10, 14, 12) - lc_layout.setSpacing(4) - - load_title = QLabel("Load Combination") - load_title.setStyleSheet(_TITLE_STYLE) - lc_layout.addWidget(load_title) - - self.load_combo = NoScrollComboBox() - self.load_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - self.load_combo.setFixedHeight(28) - self.load_combo.addItems(LOAD_COMBINATIONS) - self.load_combo.setEnabled(False) - self.load_combo.setStyleSheet(self._DISABLED_COMBO_STYLE) - self.load_combo.setToolTip( - "Change the load combination in the Output Dock \u2014 this field mirrors that selection." - ) - lc_layout.addWidget(self.load_combo) - - row.addWidget(member_card, 1) # stretch=1: both cards share width equally - row.addWidget(load_card, 1) - - return container # --------------------------------------------------------------------------- # CHECK CARDS GRID @@ -731,19 +621,12 @@ def _build_check_card(self, key: str, title: str) -> QFrame: # --------------------------------------------------------------------------- # PUBLIC API # --------------------------------------------------------------------------- - def set_girder_count(self, count): - """Repopulate the Member ID combo with 'All' plus one entry per girder.""" - self.member_combo.clear() - self.member_combo.addItems(["All"] + [f"Girder {i}" for i in range(1, count + 1)]) + def load_data(self, cad_state: dict): - """Populate check output areas and member combo from a cad_state snapshot.""" + """Populate check output areas from a cad_state snapshot.""" if not cad_state: return - try: - self.set_girder_count(int(cad_state.get("no_of_girders", 2))) - except (ValueError, TypeError): - pass def set_check_result(self, key: str, text: str) -> None: """Write plain-text result into the value label of the named card.""" diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py index 9d499437e..99dedcea5 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py @@ -193,27 +193,15 @@ def _build_member_section(self): grid = self._make_grid() - self.member_combo = NoScrollComboBox() - self.member_combo.setMinimumWidth(80) - self.member_combo.setMinimumHeight(28) - self.member_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - self.member_combo.setEnabled(False) - self.member_combo.setStyleSheet(_DISABLED_COMBO_STYLE) - self.member_combo.setToolTip( - "Change the member in the Output Dock \u2014 this field mirrors that selection." - ) - self.grade_field = self._readonly_field() self.type_field = self._readonly_field() r = 0 - r = self._add_row(grid, r, "Member ID:", self.member_combo) r = self._add_row(grid, r, "Grade of Material:", self.grade_field) r = self._add_row(grid, r, "Type:", self.type_field) card_layout.addLayout(grid) - self.member_fields["member_id"] = self.member_combo self.member_fields["grade_of_material"] = self.grade_field self.member_fields["section_type"] = self.type_field @@ -448,11 +436,7 @@ def load_data(self, cad_state: dict): for key, field in self.member_fields.items(): value = cad_state.get(key, "") - if isinstance(field, NoScrollComboBox): - field.clear() - field.addItem(str(value)) - else: - field.setText(str(value)) + field.setText(str(value)) for key, field in self.dim_fields.items(): field.setText(str(cad_state.get(key, ""))) From 9d01422f0111ae401015d37ebca1ab042dccd069 Mon Sep 17 00:00:00 2001 From: VT <75622110+VT69@users.noreply.github.com> Date: Fri, 1 May 2026 23:24:40 +0530 Subject: [PATCH 206/225] Steel Design Details tab cleanup & Deck Design Dialog --- .../bridge_types/plate_girder/graph_engine.py | 2 +- .../desktop/ui/dialogs/deck_design.py | 297 +++++++++++------- .../desktop/ui/dialogs/steel_design.py | 102 ++++-- .../ui/dialogs/tabs/steel_design_analysis.py | 97 +++++- .../ui/dialogs/tabs/steel_design_check.py | 28 +- .../ui/dialogs/tabs/steel_design_details.py | 183 ++++++----- 6 files changed, 471 insertions(+), 238 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py b/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py index bf14c6d6f..4f69c8d2a 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/graph_engine.py @@ -1749,7 +1749,7 @@ def show_blank_state(self, canvas, message: Optional[str] = None) -> None: display_message = ( message if message is not None - else "Please run the design analysis to view results." + else "Create a design first to see analysis results." ) for ax in (self.ax_scheme, self.ax_bmd, self.ax_sfd, self.ax_defl): diff --git a/src/osdagbridge/desktop/ui/dialogs/deck_design.py b/src/osdagbridge/desktop/ui/dialogs/deck_design.py index 80407105b..75aa67268 100644 --- a/src/osdagbridge/desktop/ui/dialogs/deck_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/deck_design.py @@ -27,15 +27,43 @@ def wheelEvent(self, event): event.ignore() +# ============================================================================= +# DIALOG: Deck Design +# ============================================================================= + class DeckDesign(QDialog): + """ + Deck Design dialog — displays deck properties, reinforcement details, + and design check results. + + Styling mirrors the Steel Design dialog's Details tab for visual + consistency across the application. + """ + + # Reinforcement table constants — matches Stiffener Details table styling. + _REBAR_ROW_HEIGHT = 50 + _REBAR_HEADERS = [ + "Position", + "Material Yield\nStrength (MPa)", + "Diameter (mm)", + "Spacing (mm)", + "Clear Cover from\nTop (mm)", + "Area (mm\u00b2)", + ] + _REBAR_TYPES = ["Top Layer", "Bottom Layer"] + + # ========================================================================= + # UI INITIALISATION + # ========================================================================= def __init__(self, parent=None): - super().__init__(parent) + super().__init__(None) + self._main_window = parent self.setObjectName("DeckDesign") self.resize(1024, 720) self.setMinimumSize(900, 520) - self.setSizeGripEnabled(True) self.init_ui() + self.setStyleSheet(""" QDialog { background-color: #ffffff; @@ -43,8 +71,18 @@ def __init__(self, parent=None): } """) + # ========================================================================= + # WINDOW WRAPPER — frameless with custom title bar + resize grip + # ========================================================================= + def setupWrapper(self): - self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) + """ + Configure a frameless window with a custom title bar and a resize grip. + The content_widget acts as the root container for the dialog layout. + """ + self.setWindowFlags( + Qt.FramelessWindowHint | Qt.WindowSystemMenuHint | Qt.Window + ) main_layout = QVBoxLayout(self) main_layout.setContentsMargins(1, 1, 1, 1) @@ -67,13 +105,12 @@ def setupWrapper(self): main_layout.addLayout(overlay) def init_ui(self): + """Build the top-level layout: scroll area containing the three sections.""" self.setupWrapper() main_layout = QVBoxLayout(self.content_widget) - main_layout.setContentsMargins(8, 8, 8, 8) - main_layout.setSpacing(2) - - + main_layout.setContentsMargins(5, 5, 5, 5) + main_layout.setSpacing(0) # ── SCROLL AREA ─────────────────────────────────────────────────────── scroll_area = StyledScrollArea() @@ -85,7 +122,15 @@ def init_ui(self): container_layout.setContentsMargins(10, 10, 10, 10) container_layout.setSpacing(12) - container_layout.addWidget(self._build_properties_section()) + # Deck Properties: constrain to ~50% width (left half), matching + # the Steel Design Details tab's side-by-side card layout. + props_row = QHBoxLayout() + props_row.setContentsMargins(0, 0, 0, 0) + props_row.setSpacing(0) + props_row.addWidget(self._build_properties_section(), 1) + props_row.addStretch(1) # empty right half + container_layout.addLayout(props_row) + container_layout.addWidget(self._build_reinforcement_section()) container_layout.addWidget(self._build_design_check_section()) container_layout.addStretch() @@ -93,60 +138,80 @@ def init_ui(self): scroll_area.setWidget(container) main_layout.addWidget(scroll_area) - # ── HELPERS — same as steel_design_details.py ───────────────────────────── + # ========================================================================= + # HELPERS — mirrors steel_design_details.py card / label / grid patterns + # ========================================================================= - def _create_card_frame(self): + def _create_card_frame(self) -> QFrame: + """Outer card — same as SteelDesignDetailsTab._create_card_frame.""" frame = QFrame() frame.setObjectName("girderCard") frame.setStyleSheet( - "QFrame#girderCard { background-color: white; border: 1px solid #cfcfcf; border-radius: 10px; }" + "QFrame#girderCard {" + " background-color: white;" + " border: 1px solid #b0b0b0;" + " border-radius: 6px;" + "}" ) return frame - def _create_label(self, text): + def _create_label(self, text: str) -> QLabel: + """Section title label — 13 px bold, matching Steel Design.""" label = QLabel(text) label.setStyleSheet( - "font-size: 12px; color: #2f2f2f; font-weight: 600; background: transparent;" + "font-size: 13px; color: #2B2B2B; font-weight: bold;" + " background: transparent; border: none;" ) label.setAutoFillBackground(False) return label - def _create_small_label(self, text): + def _create_small_label(self, text: str) -> QLabel: + """Row field label — 11 px, supports HTML rich text.""" label = QLabel(text) - label.setStyleSheet("font-size: 10px; color: #5a5a5a; background: transparent;") + label.setTextFormat(Qt.RichText) + label.setStyleSheet( + "font-size: 11px; color: #333333;" + " background: transparent; border: none;" + ) label.setAutoFillBackground(False) return label - def _readonly_field(self): + def _readonly_field(self) -> QLineEdit: + """Readonly output field — expands to fill its grid column.""" field = QLineEdit() field.setReadOnly(True) - field.setFixedWidth(150) + field.setMinimumWidth(80) field.setMinimumHeight(28) - field.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + field.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) apply_field_style(field) return field - def _make_grid(self): + def _make_grid(self) -> QGridLayout: + """Grid matching Steel Design Details grid spacing.""" grid = QGridLayout() grid.setContentsMargins(0, 0, 0, 0) grid.setHorizontalSpacing(16) grid.setVerticalSpacing(12) - grid.setColumnMinimumWidth(0, 180) - grid.setColumnStretch(0, 0) - grid.setColumnStretch(1, 0) - grid.setColumnStretch(2, 1) + grid.setColumnMinimumWidth(0, 230) + grid.setColumnStretch(0, 0) # label: fits content, doesn't stretch + grid.setColumnStretch(1, 1) # field: fills all remaining width return grid def _add_row(self, grid, row, text, widget): - grid.addWidget(self._create_small_label(text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) - grid.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) + grid.addWidget( + self._create_small_label(text), row, 0, + Qt.AlignLeft | Qt.AlignVCenter, + ) + grid.addWidget(widget, row, 1) return row + 1 - # ── SECTIONS ────────────────────────────────────────────────────────────── + # ========================================================================= + # SECTIONS + # ========================================================================= - def _build_properties_section(self): + def _build_properties_section(self) -> QFrame: + """Build the Deck Properties card with grade and thickness fields.""" card = self._create_card_frame() - card.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred) card_layout = QVBoxLayout(card) card_layout.setContentsMargins(18, 16, 18, 16) card_layout.setSpacing(10) @@ -163,98 +228,97 @@ def _build_properties_section(self): card_layout.addLayout(grid) return card - def _build_reinforcement_section(self): + def _build_reinforcement_section(self) -> QFrame: + """Build the Reinforcement Details card with a styled table. + + The table style mirrors the Stiffener Details table in the Steel + Design Details tab — same font, padding, alternating-row colours, + center alignment, and header treatment. + """ card = self._create_card_frame() + card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) card_layout = QVBoxLayout(card) card_layout.setContentsMargins(18, 16, 18, 16) - card_layout.setSpacing(10) + card_layout.setSpacing(12) card_layout.addWidget(self._create_label("Reinforcement Details:")) - table_frame = QFrame() - table_frame.setStyleSheet(""" - QFrame { - border: 1px solid #b0b0b0; - border-radius: 0px; - background: white; - } - """) - table_frame.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - table_frame_layout = QVBoxLayout(table_frame) - table_frame_layout.setContentsMargins(0, 0, 0, 0) - table_frame_layout.setSpacing(0) + # ── Table widget ────────────────────────────────────────────── + num_rows = len(self._REBAR_TYPES) + num_cols = len(self._REBAR_HEADERS) self.rebar_table = NoScrollTable() - self.rebar_table.setRowCount(2) - self.rebar_table.setColumnCount(6) - self.rebar_table.setHorizontalHeaderLabels([ - "Position", - "Material Yield\nStrength (MPa)", - "Diameter (mm)", - "Spacing (mm)", - "Clear Cover from\nTop (mm)", - "Area (mm\u00b2)", - ]) - - for row, name in enumerate(["Top Layer", "Bottom Layer"]): - item = QTableWidgetItem(name) - item.setFlags(Qt.ItemIsEnabled) - self.rebar_table.setItem(row, 0, item) - for col in range(1, 6): - empty = QTableWidgetItem("") - empty.setFlags(Qt.ItemIsEnabled) - self.rebar_table.setItem(row, col, empty) - - self.rebar_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) - self.rebar_table.verticalHeader().setVisible(False) - self.rebar_table.verticalHeader().setDefaultSectionSize(30) + self.rebar_table.setRowCount(num_rows) + self.rebar_table.setColumnCount(num_cols) + self.rebar_table.setHorizontalHeaderLabels(self._REBAR_HEADERS) + + # Populate rows — all cells are read-only and center-aligned. + for row, type_name in enumerate(self._REBAR_TYPES): + type_item = QTableWidgetItem(type_name) + type_item.setFlags(Qt.ItemIsEnabled) + type_item.setTextAlignment(Qt.AlignCenter) + self.rebar_table.setItem(row, 0, type_item) + + for col in range(1, num_cols): + cell = QTableWidgetItem("") + cell.setFlags(Qt.ItemIsEnabled) + cell.setTextAlignment(Qt.AlignCenter) + self.rebar_table.setItem(row, col, cell) + + # ── Header behaviour ────────────────────────────────────────── + h_header = self.rebar_table.horizontalHeader() + h_header.setSectionResizeMode(QHeaderView.Stretch) + h_header.setDefaultAlignment(Qt.AlignCenter) + + v_header = self.rebar_table.verticalHeader() + v_header.setVisible(False) + v_header.setDefaultSectionSize(self._REBAR_ROW_HEIGHT) + v_header.setSectionResizeMode(QHeaderView.Stretch) + + # ── General table properties ────────────────────────────────── self.rebar_table.setEditTriggers(QTableWidget.NoEditTriggers) + self.rebar_table.setSelectionMode(QTableWidget.NoSelection) + self.rebar_table.setFocusPolicy(Qt.NoFocus) self.rebar_table.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.rebar_table.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.rebar_table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.rebar_table.setAlternatingRowColors(True) + # Height: multi-line headers need ~48 px, each data row is + # _REBAR_ROW_HEIGHT (40 px), plus 2 px for the border. + header_height = 48 + table_height = header_height + num_rows * self._REBAR_ROW_HEIGHT + 2 + self.rebar_table.setFixedHeight(table_height) + + # ── Stylesheet — mirrors Stiffener / Lane Details table ─────── self.rebar_table.setStyleSheet(""" QTableWidget { - background-color: white; - gridline-color: #cfcfcf; - color: black; - font-size: 10px; - border: none; + background-color: #ffffff; + alternate-background-color: #f9f9f9; + gridline-color: #e0e0e0; + border: 1px solid #e0e0e0; + color: #333333; + font-size: 11px; + } + QTableWidget::item { + padding: 8px; + border-bottom: 1px solid #e0e0e0; + color: #333333; } QHeaderView::section { - background-color: #EAEAEA; - color: black; + background-color: #f5f5f5; + color: #333333; + padding: 8px; + border: 1px solid #e0e0e0; font-weight: bold; - border: none; - border-right: 1px solid #cfcfcf; - border-bottom: 1px solid #cfcfcf; - padding: 3px; - font-size: 10px; - } - QHeaderView::section:last { - border-right: none; - } - QTableWidget::item { - color: black; + font-size: 11px; } """) - self.rebar_table.setViewportMargins(0, 0, -1, 0) - - table_frame_layout.addWidget(self.rebar_table) - self.rebar_table.resizeRowsToContents() - def _fit_table(): - h = (self.rebar_table.horizontalHeader().height() - + sum(self.rebar_table.rowHeight(r) for r in range(self.rebar_table.rowCount())) - + 2) - self.rebar_table.setFixedHeight(h) - table_frame.setFixedHeight(h) - from PySide6.QtCore import QTimer - QTimer.singleShot(0, _fit_table) - - card_layout.addWidget(table_frame) + card_layout.addWidget(self.rebar_table) return card - def _build_design_check_section(self): + def _build_design_check_section(self) -> QFrame: + """Build the Design Check card with a read-only text area.""" card = self._create_card_frame() card_layout = QVBoxLayout(card) card_layout.setContentsMargins(18, 16, 18, 16) @@ -264,21 +328,29 @@ def _build_design_check_section(self): self.design_check_text = QTextEdit() self.design_check_text.setReadOnly(True) self.design_check_text.setMinimumHeight(200) - self.design_check_text.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self.design_check_text.setSizePolicy( + QSizePolicy.Expanding, QSizePolicy.Expanding, + ) self.design_check_text.setStyleSheet(""" QTextEdit { background-color: white; border: none; - font-size: 10px; - color: #222; + font-size: 11px; + color: #333333; } """) card_layout.addWidget(self.design_check_text) return card - # ── PUBLIC API ──────────────────────────────────────────────────────────── + # ========================================================================= + # PUBLIC API + # ========================================================================= + + def load_data(self, cad_state: dict) -> None: + """Populate all field widgets from a cad_state snapshot. - def load_data(self, cad_state: dict): + Silently ignores missing or invalid keys. + """ if not cad_state: return @@ -287,10 +359,15 @@ def load_data(self, cad_state: dict): rebar_map = {0: "top", 1: "bottom"} for row, prefix in rebar_map.items(): - self.rebar_table.setItem(row, 1, QTableWidgetItem(str(cad_state.get(f"rebar_{prefix}_yield", "")))) - self.rebar_table.setItem(row, 2, QTableWidgetItem(str(cad_state.get(f"rebar_{prefix}_dia", "")))) - self.rebar_table.setItem(row, 3, QTableWidgetItem(str(cad_state.get(f"rebar_{prefix}_spacing", "")))) - self.rebar_table.setItem(row, 4, QTableWidgetItem(str(cad_state.get(f"rebar_{prefix}_cover", "")))) - self.rebar_table.setItem(row, 5, QTableWidgetItem(str(cad_state.get(f"rebar_{prefix}_area", "")))) - - self.design_check_text.setPlainText(str(cad_state.get("deck_design_check", ""))) \ No newline at end of file + for col, suffix in enumerate( + ["yield", "dia", "spacing", "cover", "area"], start=1, + ): + value = cad_state.get(f"rebar_{prefix}_{suffix}", "") + item = QTableWidgetItem(str(value)) + item.setFlags(Qt.ItemIsEnabled) + item.setTextAlignment(Qt.AlignCenter) + self.rebar_table.setItem(row, col, item) + + self.design_check_text.setPlainText( + str(cad_state.get("deck_design_check", "")) + ) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/steel_design.py b/src/osdagbridge/desktop/ui/dialogs/steel_design.py index 53243b69f..0a826cfdc 100644 --- a/src/osdagbridge/desktop/ui/dialogs/steel_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/steel_design.py @@ -151,8 +151,11 @@ def init_ui(self): if hasattr(self._main_window, "cad_state"): self.details_tab.load_data(self._main_window.cad_state) - # Inject the matplotlib canvas into the Analysis Results tab - self._setup_analysis_plots() + if self._result_handler is not None: + # Inject the matplotlib canvas into the Analysis Results tab + self._setup_analysis_plots() + else: + self.analysis_tab.diagram_placeholder.setText("Create a design first to see analysis results.") def _build_global_selection_bar(self): """Build the global Member ID and Load Combination bar.""" @@ -484,6 +487,29 @@ def _setup_analysis_plots(self): # ── UI initialisation state ─────────────────────────────────────────── self._data_initialized = False + # ── Performance: skip redundant re-renders ──────────────────────────── + # Track the last plotted (member, loadcase, component) to avoid + # expensive matplotlib re-renders when nothing has changed. + self._last_plot_key: tuple | None = None + + # Track the last member key for which DCR was computed so the + # Design Check tab can skip re-running the full pipeline. + self._last_dcr_member_key: str | None = None + + # Flag set when member/LC selection changes — tells the Design Check + # tab that cached DCR values are stale and need recomputation. + self._dcr_dirty = True + + # ── Populate dropdowns immediately so they show values on launch ────── + if self._result_handler is not None: + self._populate_member_combo() + self._populate_load_combo() + self._data_initialized = True + + # Pre-populate Design Check tab with the default girder's DCR values + # so results are visible without switching tabs first. + self._run_design_checks() + def _on_tab_changed(self, index): @@ -494,17 +520,23 @@ def _on_tab_changed(self, index): All data comes from the injected PlateGirderAnalysisResults instance. """ if index == 2: - # Design Check tab - self._run_design_checks() + # Design Check tab — only recompute if selection changed. + if self._dcr_dirty: + self._run_design_checks() return if index != 1: return if self._result_handler is None: - self.graph_engine.show_blank_state(self.canvas) + if hasattr(self, 'canvas'): + self.graph_engine.show_blank_state(self.canvas, message="Create a design first to see analysis results.") + else: + self.analysis_tab.diagram_placeholder.setText("Create a design first to see analysis results.") return + # Combos are populated at launch; guard prevents double-population + # if the dialog was opened without a result handler initially. if not self._data_initialized: self._populate_member_combo() self._populate_load_combo() @@ -514,20 +546,27 @@ def _on_tab_changed(self, index): def _run_design_checks(self) -> None: """ - Populate the Design Check tab. + Populate the Design Check tab for the currently selected member. - On the first visit the stored engine from PlateGirderBridge._run_dcr_checks() - is used. On subsequent visits (after member/LC changes) the dynamically - re-computed engine from _update_design_checks_for_member() is preferred. + Uses a dirty-flag + member-key cache to avoid re-running the full + DCR pipeline when nothing has changed. The first call falls back + to the pre-computed engine stored on the backend; subsequent calls + dynamically recompute for the selected member. """ - # If a dynamic engine was already computed for the current selection, use it. - if getattr(self, "_dynamic_dcr_engine", None) is not None: - engine = self._dynamic_dcr_engine - self.check_tab.populate_from_results( - engine.demand, engine.capacity, engine, - ) + combo = self.member_combo + member_key = combo.currentData() or combo.currentText() or "" + + # Fast path: nothing changed since the last computation. + if not self._dcr_dirty and member_key == self._last_dcr_member_key: return + # If a member is selected, compute DCR dynamically for that girder. + if member_key: + self._update_design_checks_for_member(member_key) + return + + # Fallback for first launch: use the backend's pre-computed engine + # (produced during design() → _run_dcr_checks()). if self._checks_ran and (self._result_handler is self._last_handler): return @@ -541,8 +580,10 @@ def _run_design_checks(self) -> None: engine.demand, engine.capacity, engine, ) - self._checks_ran = True - self._last_handler = self._result_handler + self._checks_ran = True + self._last_handler = self._result_handler + self._dcr_dirty = False + self._last_dcr_member_key = member_key except Exception: import traceback @@ -555,6 +596,9 @@ def _update_design_checks_for_member(self, member_key: str) -> None: """ Re-run the DCR pipeline for the selected girder member. + Skips if *member_key* matches the last-computed key and the dirty + flag is not set, providing O(1) repeated tab visits. + Imports and calls classes from designer.py (read-only — no modifications to that module). The pipeline is: 1. BridgeConfig from backend @@ -563,6 +607,10 @@ def _update_design_checks_for_member(self, member_key: str) -> None: 4. DCREngine.run_all_checks() 5. check_tab.populate_from_results() """ + # Skip if already computed for this exact selection. + if member_key == self._last_dcr_member_key and not self._dcr_dirty: + return + try: backend = getattr(self._main_window, "backend", None) if backend is None or self._result_handler is None: @@ -627,6 +675,10 @@ def _update_design_checks_for_member(self, member_key: str) -> None: engine.demand, engine.capacity, engine, ) + # Mark as clean for this member. + self._dcr_dirty = False + self._last_dcr_member_key = member_key + except Exception: import traceback traceback.print_exc() @@ -884,6 +936,10 @@ def _update_analysis_plots(self, *_args): Master orchestrator called when the girder, load combination, or component selection changes. Delegates data extraction and peak computation to the graph engine, then renders all plots and refreshes the right-hand panel. + + Includes a state-change guard: if the (member, loadcase, component) + triple is identical to the last render, the expensive matplotlib + redraw is skipped entirely. """ engine = self.graph_engine @@ -907,6 +963,15 @@ def _update_analysis_plots(self, *_args): if hasattr(self.analysis_tab, "component_combo"): comp_idx = self.analysis_tab.component_combo.currentIndex() + # ── Skip redundant re-renders ───────────────────────────────────────── + plot_key = (member_key, loadcase, comp_idx) + if plot_key == self._last_plot_key and self._current_x is not None: + return + self._last_plot_key = plot_key + + # Mark DCR as stale whenever the analysis inputs change. + self._dcr_dirty = True + # Maps: (bmd_force_key, sfd_force_key, defl_disp_key, rhs_labels, max_field_keys) # rhs_labels use HTML subscripts for the side-row label text _COMPONENT_CFG = [ @@ -997,9 +1062,6 @@ def _update_analysis_plots(self, *_args): self._update_value_fields(self._current_max_dict, max_keys) self._on_interaction_mode_changed() - # Re-run design checks for the newly selected member / loadcase - self._update_design_checks_for_member(member_key) - # ========================================================================= # UI UPDATE HELPERS # ========================================================================= diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py index f72a11d17..e8f7ae5a2 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py @@ -8,8 +8,14 @@ QFrame, QSizePolicy, QGroupBox, + QStyledItemDelegate, + QStylePainter, + QStyleOptionComboBox, + QStyle, + QApplication, ) -from PySide6.QtCore import Qt +from PySide6.QtCore import Qt, QSize +from PySide6.QtGui import QTextDocument from osdagbridge.desktop.ui.docks.output_dock import ( NoScrollComboBox, @@ -157,6 +163,87 @@ _LABEL_MIN_W = 130 +class _HTMLDelegate(QStyledItemDelegate): + """ + Custom delegate to render HTML-formatted text within a QComboBox dropdown. + Allows for rich text features like subscripts (e.g., Mz). + """ + def paint(self, painter, option, index): + options = option + self.initStyleOption(options, index) + painter.save() + doc = QTextDocument() + doc.setDefaultFont(options.font) + doc.setHtml(options.text) + options.text = "" + style = options.widget.style() if options.widget else QApplication.style() + style.drawControl(QStyle.CE_ItemViewItem, options, painter) + painter.translate(options.rect.left(), options.rect.top()) + clip = options.rect.translated(-options.rect.left(), -options.rect.top()) + y_offset = (options.rect.height() - doc.size().height()) / 2 + painter.translate(0, max(0, y_offset)) + doc.drawContents(painter, clip) + painter.restore() + + def sizeHint(self, option, index): + options = option + self.initStyleOption(options, index) + doc = QTextDocument() + doc.setDefaultFont(options.font) + doc.setHtml(options.text) + return QSize(int(doc.idealWidth()) + 16, int(doc.size().height())) + + +class RichTextComboBox(NoScrollComboBox): + """ + A QComboBox subclass that supports HTML rendering for its items. + Overrides paintEvent and sizeHint to ensure the selected item and the + dropdown list are correctly rendered and sized based on HTML content. + """ + def __init__(self, parent=None): + super().__init__(parent) + self.setItemDelegate(_HTMLDelegate(self)) + + def _get_ideal_size(self): + max_w = 0 + h = 28 + doc = QTextDocument() + doc.setDefaultFont(self.font()) + for i in range(self.count()): + doc.setHtml(self.itemText(i)) + max_w = max(max_w, int(doc.idealWidth())) + # Add padding for border and drop-down arrow + return QSize(max_w + 36, h) + + def sizeHint(self): + return self._get_ideal_size() + + def minimumSizeHint(self): + return self._get_ideal_size() + + def paintEvent(self, event): + painter = QStylePainter(self) + opt = QStyleOptionComboBox() + self.initStyleOption(opt) + + text = opt.currentText + opt.currentText = "" # Hide text so default painting doesn't draw it + painter.drawComplexControl(QStyle.CC_ComboBox, opt) + painter.drawControl(QStyle.CE_ComboBoxLabel, opt) + + text_rect = self.style().subControlRect(QStyle.CC_ComboBox, opt, QStyle.SC_ComboBoxEditField, self) + + doc = QTextDocument() + doc.setDefaultFont(self.font()) + doc.setHtml(text) + + painter.save() + painter.translate(text_rect.topLeft()) + y_offset = (text_rect.height() - doc.size().height()) / 2 + painter.translate(0, max(0, y_offset)) + doc.drawContents(painter) + painter.restore() + class SteelDesignAnalysisTab(QWidget): """ Analysis Results tab for the Steel Design dialog. @@ -428,13 +515,13 @@ def _build_diagram_section(self): ) comp_card_layout.addWidget(comp_title) - self.component_combo = NoScrollComboBox() + self.component_combo = RichTextComboBox() self.component_combo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.component_combo.setStyleSheet(_COMBO_STYLE) self.component_combo.addItems([ - "Major (Mz, Vy, Dy)", - "Minor (My, Vz, Dz)", - "Axial (Tx, Fx, Dx)", + "Major (Mz, Vy, Dy)", + "Minor (My, Vz, Dz)", + "Axial (Tx, Fx, Dx)", ]) comp_card_layout.addWidget(self.component_combo) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py index e0ed58018..ee4209421 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py @@ -176,13 +176,19 @@ ], } +# Module-level cache: maps a frozen tuple of mathtext lines to the rendered +# QPixmap. Since the 8 equation sets are static, each is rendered exactly once +# per application session, eliminating repeated matplotlib Figure creation. +_PIXMAP_CACHE: dict[tuple[str, ...], QPixmap] = {} + + def _render_mathtext_pixmap( lines: list[str], *, font_size: float = 9, dpi: int = 110, text_color: str = "#2E3B4E", - bg_color: str = "#F8F9FA", + bg_color: str = "#FFFFFF", h_pad_in: float = 0.12, v_pad_in: float = 0.10, line_gap_in: float = 0.32, @@ -190,9 +196,8 @@ def _render_mathtext_pixmap( """ Render a list of matplotlib mathtext strings into a single QPixmap. - Lines are stacked vertically with even spacing. The figure is sized to - fit the content tightly; the caller is responsible for placing the pixmap - inside a QLabel that provides the grey background frame. + Results are cached by the tuple of *lines* so that each unique equation + set is rasterised at most once per application session. Parameters ---------- @@ -216,6 +221,11 @@ def _render_mathtext_pixmap( if not lines: return QPixmap() + cache_key = tuple(lines) + cached = _PIXMAP_CACHE.get(cache_key) + if cached is not None: + return cached + n = len(lines) # Estimate figure height: n lines + (n-1) gaps + top/bottom padding fig_h = n * line_gap_in + (n - 1) * (line_gap_in * 0.15) + 2 * v_pad_in @@ -263,6 +273,8 @@ def _render_mathtext_pixmap( pixmap = QPixmap() if not pixmap.loadFromData(data, "PNG"): return QPixmap() + + _PIXMAP_CACHE[cache_key] = pixmap return pixmap @@ -530,7 +542,7 @@ def _build_check_card(self, key: str, title: str) -> QFrame: card.setStyleSheet(""" QFrame#checkCard { background-color: white; - border: 1px solid #CFCFCF; + border: 1px solid #222222; border-radius: 8px; } """) @@ -553,8 +565,7 @@ def _build_check_card(self, key: str, title: str) -> QFrame: eq_lbl = QLabel() eq_lbl.setAlignment(Qt.AlignCenter) eq_lbl.setStyleSheet( - "background-color: #F8F9FA; border: 1px solid #E4E7EB; " - "border-radius: 4px; padding: 6px;" + "background-color: white; border: none; padding: 6px;" ) math_lines = _MATHTEXT_MAP.get(key, []) @@ -576,8 +587,7 @@ def _build_check_card(self, key: str, title: str) -> QFrame: eq_lbl.setStyleSheet( "font-family: 'Cambria Math', 'Times New Roman', serif; " "font-size: 13px; color: #2E3B4E; " - "background-color: #F8F9FA; border: 1px solid #E4E7EB; " - "border-radius: 4px; padding: 6px;" + "background-color: white; border: none; padding: 6px;" ) eq_text = _RENDER_MAP.get(key, {}).get("eq", "") eq_lbl.setText(eq_text) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py index 99dedcea5..b82682c02 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py @@ -47,9 +47,8 @@ class SteelDesignDetailsTab(QWidget): """ Scrollable details tab for the Steel Design dialog. - Displays four read-only information cards: - - Member Info : member ID combo, material grade, section type - - Dimensional Details: full cross-section geometry + Displays read-only information cards: + - Dimensional Details: material grade, section type, and full cross-section geometry - Shear Connector : connector material, geometry, and spacing - Section Properties : mass, moments of area, moduli, torsion/warping @@ -83,13 +82,8 @@ def __init__(self, parent=None): container_layout.setContentsMargins(10, 10, 10, 10) container_layout.setSpacing(12) - # ── TOP ROW: Member Info card (left) + CAD placeholder (right) - top_row = QHBoxLayout() - top_row.setSpacing(12) - top_row.setContentsMargins(0, 0, 0, 0) - top_row.addWidget(self._build_member_section(), 1) - top_row.addWidget(self._build_top_cad_placeholder(), 1) - container_layout.addLayout(top_row) + # ── TOP ROW: CAD placeholder (right only; Member Info removed) + container_layout.addWidget(self._build_top_cad_placeholder()) # ── BODY: Dimensional + Shear (left) | Section Properties (right) body_row = QHBoxLayout() @@ -184,37 +178,27 @@ def _add_row(self, grid, row, text, widget): # SECTIONS # ───────────────────────────────────────────────────────────────────────── - def _build_member_section(self): + # _build_member_section removed — Grade & Type are now in Dimensional Details. + + def _build_dimensional_section(self): card = self._create_card_frame() card_layout = QVBoxLayout(card) card_layout.setContentsMargins(18, 16, 18, 16) card_layout.setSpacing(10) - card_layout.addWidget(self._create_label("Member Info:")) + card_layout.addWidget(self._create_label("Dimensional Details:")) grid = self._make_grid() + # Grade of Material and Type (previously in Member Info) self.grade_field = self._readonly_field() self.type_field = self._readonly_field() + self.member_fields["grade_of_material"] = self.grade_field + self.member_fields["section_type"] = self.type_field r = 0 r = self._add_row(grid, r, "Grade of Material:", self.grade_field) r = self._add_row(grid, r, "Type:", self.type_field) - card_layout.addLayout(grid) - - self.member_fields["grade_of_material"] = self.grade_field - self.member_fields["section_type"] = self.type_field - - return card - - def _build_dimensional_section(self): - card = self._create_card_frame() - card_layout = QVBoxLayout(card) - card_layout.setContentsMargins(18, 16, 18, 16) - card_layout.setSpacing(10) - card_layout.addWidget(self._create_label("Dimensional Details:")) - - grid = self._make_grid() labels = { "section_designation": "Section Designation", "section_class": "Section Class", @@ -229,7 +213,6 @@ def _build_dimensional_section(self): "web_type": "Web Type", "effective_slab_width": "Effective Width of Slab (mm)", } - r = 0 for key, text in labels.items(): field = self._readonly_field() r = self._add_row(grid, r, text, field) @@ -339,90 +322,101 @@ def _build_bottom_cad_section(self): # STIFFENER TABLE # ───────────────────────────────────────────────────────────────────────── - def _build_stiffener_section(self): + # Row height for stiffener data rows (matches Lane Details table padding). + _STIFFENER_ROW_HEIGHT = 40 + + # Column headers for the stiffener summary table. + _STIFFENER_HEADERS = [ + "Type", "Grade of Material", "Thickness (mm)", "Width (mm)", "Spacing (mm)", + ] + + # Stiffener type labels shown in the first column. + _STIFFENER_TYPES = ["Intermediate", "Longitudinal", "Bearing"] + + def _build_stiffener_section(self) -> QFrame: + """Build the Stiffener Details card with a styled table. + + The table style mirrors the Inputs table in the Lane Details sub-tab + of Typical Section Details (Additional Inputs dialog) — same font, + padding, alternating-row colours, and header treatment. + """ card = self._create_card_frame() card_layout = QVBoxLayout(card) card_layout.setContentsMargins(18, 16, 18, 16) - card_layout.setSpacing(10) + card_layout.setSpacing(12) card_layout.addWidget(self._create_label("Stiffener Details:")) - # ── Wrap table in a QFrame so the border is drawn by the frame, - # not QAbstractScrollArea's viewport (which clips the left edge). - table_frame = QFrame() - table_frame.setStyleSheet(""" - QFrame { - border: 1px solid #b0b0b0; - border-radius: 0px; - background: white; - } - """) - table_frame.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - table_frame_layout = QVBoxLayout(table_frame) - # right margin -1 pulls table 1px under the frame border, hiding the last gridline - table_frame_layout.setContentsMargins(0, 0, 0, 0) - table_frame_layout.setSpacing(0) + # ── Table widget ────────────────────────────────────────────── + num_rows = len(self._STIFFENER_TYPES) + num_cols = len(self._STIFFENER_HEADERS) self.stiffener_table = NoScrollTable() - self.stiffener_table.setRowCount(3) - self.stiffener_table.setColumnCount(5) - self.stiffener_table.setHorizontalHeaderLabels([ - "Type", "Grade of Material", "Thickness (mm)", "Width (mm)", "Spacing (mm)" - ]) - - for row, name in enumerate(["Intermediate", "Longitudinal", "Bearing"]): - item = QTableWidgetItem(name) - item.setFlags(Qt.ItemIsEnabled) - self.stiffener_table.setItem(row, 0, item) - for col in range(1, 5): - empty = QTableWidgetItem("") - empty.setFlags(Qt.ItemIsEnabled) - self.stiffener_table.setItem(row, col, empty) - - self.stiffener_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) - self.stiffener_table.verticalHeader().setVisible(False) - self.stiffener_table.verticalHeader().setDefaultSectionSize(26) + self.stiffener_table.setRowCount(num_rows) + self.stiffener_table.setColumnCount(num_cols) + self.stiffener_table.setHorizontalHeaderLabels(self._STIFFENER_HEADERS) + + # Populate rows — all cells are read-only and center-aligned. + for row, type_name in enumerate(self._STIFFENER_TYPES): + type_item = QTableWidgetItem(type_name) + type_item.setFlags(Qt.ItemIsEnabled) + type_item.setTextAlignment(Qt.AlignCenter) + self.stiffener_table.setItem(row, 0, type_item) + + for col in range(1, num_cols): + cell = QTableWidgetItem("") + cell.setFlags(Qt.ItemIsEnabled) + cell.setTextAlignment(Qt.AlignCenter) + self.stiffener_table.setItem(row, col, cell) + + # ── Header behaviour ────────────────────────────────────────── + h_header = self.stiffener_table.horizontalHeader() + h_header.setSectionResizeMode(QHeaderView.Stretch) + h_header.setDefaultAlignment(Qt.AlignCenter) + + v_header = self.stiffener_table.verticalHeader() + v_header.setVisible(False) + v_header.setDefaultSectionSize(self._STIFFENER_ROW_HEIGHT) + + # ── General table properties ────────────────────────────────── self.stiffener_table.setEditTriggers(QTableWidget.NoEditTriggers) + self.stiffener_table.setSelectionMode(QTableWidget.NoSelection) + self.stiffener_table.setFocusPolicy(Qt.NoFocus) self.stiffener_table.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.stiffener_table.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.stiffener_table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - # Use sizeHint-based height after headers/rows are configured - # header ~30px + 3 rows * 26px + 1px bottom = 109px; frame adds 2px. Plus OS scaling safety margin - self.stiffener_table.setMinimumHeight(120) - self.stiffener_table.setMaximumHeight(120) + self.stiffener_table.setAlternatingRowColors(True) + # Fixed height: header (~36 px) + rows * row_height + 2 px border. + table_height = 36 + num_rows * self._STIFFENER_ROW_HEIGHT + 2 + self.stiffener_table.setFixedHeight(table_height) + + # ── Stylesheet — mirrors Lane Details Inputs table ──────────── self.stiffener_table.setStyleSheet(""" QTableWidget { - background-color: white; + background-color: #ffffff; + alternate-background-color: #f9f9f9; gridline-color: #e0e0e0; - color: black; - font-size: 10px; - border: none; + border: 1px solid #e0e0e0; + color: #333333; + font-size: 11px; + } + QTableWidget::item { + padding: 8px; + border-bottom: 1px solid #e0e0e0; + color: #333333; } QHeaderView::section { background-color: #f5f5f5; - color: black; + color: #333333; + padding: 8px; + border: 1px solid #e0e0e0; font-weight: bold; - border: none; - border-right: 1px solid #b0b0b0; - border-bottom: 1px solid #b0b0b0; - padding: 3px; - font-size: 10px; - } - QHeaderView::section:last { - border-right: none; - } - QTableWidget::item { - color: black; + font-size: 11px; } """) - # Pull right edge of viewport 1px left so last gridline sits under frame border - self.stiffener_table.setViewportMargins(0, 0, -1, 0) - table_frame_layout.addWidget(self.stiffener_table) - table_frame.setMinimumHeight(122) - table_frame.setMaximumHeight(122) - card_layout.addWidget(table_frame) + card_layout.addWidget(self.stiffener_table) return card # ───────────────────────────────────────────────────────────────────────── @@ -455,7 +449,10 @@ def load_data(self, cad_state: dict): width = cad_state.get(f"stiff_{prefix}_width", "") spacing = cad_state.get(f"stiff_{prefix}_spacing", "") - self.stiffener_table.setItem(row, 1, QTableWidgetItem(str(grade))) - self.stiffener_table.setItem(row, 2, QTableWidgetItem(str(thickness))) - self.stiffener_table.setItem(row, 3, QTableWidgetItem(str(width))) - self.stiffener_table.setItem(row, 4, QTableWidgetItem(str(spacing))) + for col, value in enumerate( + [grade, thickness, width, spacing], start=1 + ): + item = QTableWidgetItem(str(value)) + item.setFlags(Qt.ItemIsEnabled) + item.setTextAlignment(Qt.AlignCenter) + self.stiffener_table.setItem(row, col, item) From 4fc85275dec79691aee3190e7a59fa7e64963fed Mon Sep 17 00:00:00 2001 From: Nidhikhare12 Date: Fri, 8 May 2026 23:04:51 +0530 Subject: [PATCH 207/225] IRC 6 crash barrier horizontal load and Deck design file with load and design (preliminary) --- .../bridge_types/plate_girder/deckdesign.py | 568 ++++++++++++++++++ src/osdagbridge/core/utils/codes/irc6_2017.py | 25 + 2 files changed, 593 insertions(+) create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/deckdesign.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/deckdesign.py b/src/osdagbridge/core/bridge_types/plate_girder/deckdesign.py new file mode 100644 index 000000000..9cc8636c3 --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/deckdesign.py @@ -0,0 +1,568 @@ +""" +IRC bridge deck slab design module. + +Design pipeline: + 1. Read bridge parameters from the backend. + 2. Resolve concrete / rebar properties via IRC 22:2015 Annex III. + 3. Fetch impact factor from IRC 6:2017 Cl.208.2 / 208.3. + 4. Fetch ULS partial safety factors from IRC 6:2017 Table B.2. + 5. Compute dead-load and live-load moments (effective-width method, IRC 21 Cl.305.16). + 6. Design transverse reinforcement (bottom sagging + top hogging). + 7. Verify moment capacity. + 8. Return a dict compatible with DeckDesign.load_data(). +""" + +from __future__ import annotations + +import math + +from osdagbridge.core.utils.codes.irc6_2017 import IRC6_2017 +from osdagbridge.core.utils.codes.irc22_2015 import IRC22_2014 +from osdagbridge.core.utils.codes.keyfile import KEY_VEHICLE + +# ── constants ───────────────────────────────────────────────────────────────── +_GAMMA_CONCRETE_KN_M3 = 25.0 # kN/m³ — IRC 6:2017 Cl.203 +_STANDARD_DIAS_MM = [8, 10, 12, 16, 20, 25, 32] +_SPACING_MAX_MM = 300.0 +_SPACING_MIN_MM = 75.0 +_SPACING_ROUND_MM = 5.0 # round spacing down to nearest 5 mm + + +# ── material helpers ────────────────────────────────────────────────────────── + +def _concrete_props(grade: str) -> dict: + """Return fck (MPa) and fctm (MPa) from IRC 22:2015 Annex III.""" + table = IRC22_2014.cl_602_annexIII_concrete_properties() + key = grade.strip().upper() + if key not in table: + key = "M30" # safe fallback + return {"fck": float(table[key]["fck"]), "fctm": float(table[key]["fctm"])} + + +def _rebar_fy(grade: str) -> float: + """Return yield strength (MPa) for a rebar grade string (e.g. 'Fe 500').""" + table = IRC22_2014.cl_602_annexIII_reinforcement_steel_properties() + normalized = grade.replace(" ", "") # "Fe 500" → "Fe500" + if normalized in table: + return float(table[normalized]["fy"]) + return 500.0 # default Fe 500 + + +# ── structural mechanics helpers ────────────────────────────────────────────── + +def _moment_capacity_kNm(fy_MPa: float, As_mm2: float, d_mm: float, + fck_MPa: float, b_mm: float = 1000.0) -> float: + """ + Moment capacity per m width (kNm/m) for a singly reinforced RC section. + IS 456 / IRC 112 simplified stress-block: + xu = 0.87 fy As / (0.36 fck b) + Mu = 0.87 fy As (d - 0.42 xu) + """ + xu = (0.87 * fy_MPa * As_mm2) / (0.36 * fck_MPa * b_mm) + Mu_Nmm = 0.87 * fy_MPa * As_mm2 * (d_mm - 0.42 * xu) + return Mu_Nmm / 1.0e6 + + +def _required_steel_mm2(M_ULS_kNm: float, fy_MPa: float, d_mm: float, + fck_MPa: float, b_mm: float = 1000.0) -> float: + """ + Solve for minimum As (mm²/m) from the quadratic form of the moment equation. + Returns 0 if M_ULS ≤ 0. + """ + if M_ULS_kNm <= 0: + return 0.0 + M_Nmm = M_ULS_kNm * 1.0e6 + # (0.87fy)²/(0.36 fck b) · As² - (0.87 fy d) · As + M = 0 + a = (0.87 * fy_MPa) ** 2 / (0.36 * fck_MPa * b_mm) + b = 0.87 * fy_MPa * d_mm + disc = b ** 2 - 4.0 * a * M_Nmm + if disc < 0: + return float("inf") # over-stressed — thickness must increase + return (b - math.sqrt(disc)) / (2.0 * a) + + +def _min_steel_mm2(fctm_MPa: float, fy_MPa: float, d_mm: float, + b_mm: float = 1000.0) -> float: + """IRC 112 Cl.16.5.1 minimum reinforcement (mm²/m).""" + As_min = 0.26 * (fctm_MPa / fy_MPa) * b_mm * d_mm + return max(As_min, 0.0013 * b_mm * d_mm) + + +def _pick_rebar(As_req_mm2: float) -> tuple[float, float, float]: + """ + Choose the smallest standard bar diameter and round-down spacing + such that As_provided ≥ As_req. + Returns (dia_mm, spacing_mm, As_prov_mm2_per_m). + """ + for dia in _STANDARD_DIAS_MM: + a_bar = math.pi * dia ** 2 / 4.0 + spacing = a_bar * 1000.0 / As_req_mm2 + spacing = min(spacing, _SPACING_MAX_MM) + spacing = max(spacing, _SPACING_MIN_MM) + # round down to nearest _SPACING_ROUND_MM + spacing = math.floor(spacing / _SPACING_ROUND_MM) * _SPACING_ROUND_MM + spacing = max(spacing, _SPACING_MIN_MM) + As_prov = a_bar * 1000.0 / spacing + if As_prov >= As_req_mm2: + return dia, spacing, As_prov + # fallback: largest bar at minimum spacing + dia = _STANDARD_DIAS_MM[-1] + a_bar = math.pi * dia ** 2 / 4.0 + spacing = _SPACING_MIN_MM + return dia, spacing, a_bar * 1000.0 / spacing + + +# ── SLS helpers ─────────────────────────────────────────────────────────────── + +def _cracked_section(As_mm2: float, d_mm: float, fck_MPa: float, + b_mm: float = 1000.0) -> tuple: + """ + Cracked-section neutral axis depth x (mm), I_cr (mm⁴), and αe = Es/Ecm. + Ecm per IRC 112:2020 Cl.6.4.2.3 — 22·(fck/10)^0.3 GPa. + Solves b/2·x² + αe·As·x − αe·As·d = 0. + """ + Es = 200_000.0 + Ecm = 22_000.0 * (fck_MPa / 10.0) ** 0.3 + alpha_e = Es / Ecm + A = b_mm / 2.0 + B = alpha_e * As_mm2 + C = -alpha_e * As_mm2 * d_mm + x = (-B + math.sqrt(B**2 - 4.0 * A * C)) / (2.0 * A) + I_cr = b_mm * x**3 / 3.0 + alpha_e * As_mm2 * (d_mm - x) ** 2 + return x, I_cr, alpha_e + + +def _sls_stress(M_SLS_kNm: float, As_mm2: float, d_mm: float, + fck_MPa: float, fy_MPa: float, b_mm: float = 1000.0) -> dict: + """ + IRC 112:2020 Cl.12.2.1 — SLS stress check (characteristic combination). + Limits: σc ≤ 0.48·fck, σs ≤ 0.80·fyk. + """ + x, I_cr, alpha_e = _cracked_section(As_mm2, d_mm, fck_MPa, b_mm) + M_Nmm = M_SLS_kNm * 1.0e6 + sigma_c = M_Nmm * x / I_cr + sigma_s = M_Nmm * (d_mm - x) * alpha_e / I_cr + sc_lim = 0.48 * fck_MPa + ss_lim = 0.80 * fy_MPa + return { + "x": x, + "sigma_c": sigma_c, "sc_lim": sc_lim, "sc_ok": sigma_c <= sc_lim, + "sigma_s": sigma_s, "ss_lim": ss_lim, "ss_ok": sigma_s <= ss_lim, + "ok": sigma_c <= sc_lim and sigma_s <= ss_lim, + } + + +def _sls_crack_width(M_SLS_kNm: float, As_mm2: float, dia_mm: float, + d_mm: float, h_mm: float, cover_mm: float, + fck_MPa: float, fctm_MPa: float, + b_mm: float = 1000.0) -> dict: + """ + IRC 112:2020 Cl.12.3.4 — crack width check (frequent combination). + wk limit = 0.3 mm (exposure XS2/XD2 for bridge decks). + x and d are both measured from the compressive face, so this function + works identically for sagging (compressive face = top) and hogging + (compressive face = bottom). + """ + Es = 200_000.0 + x, I_cr, alpha_e = _cracked_section(As_mm2, d_mm, fck_MPa, b_mm) + M_Nmm = M_SLS_kNm * 1.0e6 + sigma_s = M_Nmm * (d_mm - x) * alpha_e / I_cr + # Effective tension area depth (measured from tensile face) + Ac_eff = ( + min(2.5 * (cover_mm + dia_mm / 2.0), (h_mm - x) / 3.0, h_mm / 2.0) * b_mm + ) + rho_p_eff = As_mm2 / Ac_eff + # Maximum crack spacing — IRC 112:2020 Cl.12.3.4 + k1, k2, k3, k4 = 0.8, 0.5, 3.4, 0.425 + Sr_max = k3 * cover_mm + k1 * k2 * k4 * dia_mm / rho_p_eff + # Mean strain difference (long-term, kt = 0.5) + kt = 0.5 + eps_diff = max( + (sigma_s - kt * (fctm_MPa / rho_p_eff) * (1.0 + alpha_e * rho_p_eff)) / Es, + 0.6 * sigma_s / Es, + ) + wk = Sr_max * eps_diff # mm + wk_lim = 0.3 + return { + "sigma_s": sigma_s, "x": x, "rho_p_eff": rho_p_eff, + "Sr_max": Sr_max, "eps_diff": eps_diff, "wk": wk, "wk_lim": wk_lim, + "ok": wk <= wk_lim, + } + + +# ── governing vehicle ───────────────────────────────────────────────────────── + +def _governing_vehicle(carriageway_width_m: float) -> str: + """ + Return the governing vehicle class based on IRC 6:2017 Table 6A. + Class 70R(W) governs when at least one 70R lane fits; Class A otherwise. + """ + result = IRC6_2017.table_6A(carriageway_width_m) + combos = result.get("vehicle_combinations", []) + for combo in combos: + if "Class70R" in combo: + return KEY_VEHICLE[0] # Class70R(W) + return KEY_VEHICLE[2] # ClassA + + +def _max_wheel_load_kN(vehicle_class: str) -> float: + """ + Maximum single wheel load (kN) for the governing vehicle per IRC 6:2017. + wheel_loads are per-axle totals; each axle splits equally between 2 wheels. + """ + if vehicle_class in (KEY_VEHICLE[0], KEY_VEHICLE[1]): # Class 70R + axle_loads = IRC6_2017.cl_204_1_Class70R_vehicle_wheel()["wheel_loads"] + else: # Class A / B + axle_loads = IRC6_2017.cl_204_1_ClassA_vehicle()["wheel_loads"] + return max(axle_loads) / 2.0 # per-wheel load (kN) + + +def _wheel_contact_width_m(vehicle_class: str) -> float: + """Transverse wheel-contact width (m) for dispersion — IRC 6:2017 drawings.""" + if vehicle_class in (KEY_VEHICLE[0], KEY_VEHICLE[1]): + return 0.300 # Class 70R: 300 mm transverse contact + return 0.250 # Class A: 250 mm transverse contact + + +# ── main design function ────────────────────────────────────────────────────── + +def design_deck_slab(bridge) -> dict: + """ + Design the concrete deck slab of a plate girder bridge. + + Parameters + ---------- + bridge : PlateGirderBridge + Backend instance after design() has been called. + + Returns + ------- + dict + Keys matching DeckDesign.load_data() expectations: + deck_grade, deck_thickness, + rebar_{top,bottom}_{yield,dia,spacing,cover,area}, + deck_design_check. + """ + from osdagbridge.core.utils.common import KEY_SPAN, KEY_CARRIAGEWAY_WIDTH, KEY_DECK_CONCRETE_GRADE_BASIC + from osdagbridge.core.bridge_components.super_structure.deck.geometry import deck_thickness_from_inputs + from osdagbridge.core.bridge_types.plate_girder.initial_sizing import DEFAULT_DECK_THICKNESS + + # ── 1. read bridge parameters ───────────────────────────────────────────── + basic = getattr(bridge, "basic_inputs", {}) + additional = getattr(bridge, "additional_inputs", {}) + sizing = getattr(bridge, "sizing_result", None) + + span_m = float(basic.get(KEY_SPAN, 30.0)) + cw_m = float(basic.get(KEY_CARRIAGEWAY_WIDTH, 7.5)) + concrete_grade = str(basic.get(KEY_DECK_CONCRETE_GRADE_BASIC, "M30")).strip() + + # girder spacing — from sizing result or fallback + if sizing is not None and hasattr(sizing, "girder_spacing"): + beam_spacing_m = float(sizing.girder_spacing) + else: + beam_spacing_m = 2.5 # sensible default + + deck_t_mm = deck_thickness_from_inputs(additional, DEFAULT_DECK_THICKNESS) * 1000.0 + + rebar_grade = str(additional.get("reinforcement_material", "Fe 500")).strip() + cover_top_mm = float(additional.get("top_clear_cover", 50.0)) + cover_bot_mm = float(additional.get("bottom_clear_cover", 40.0)) + + # ── 2. material properties ──────────────────────────────────────────────── + conc = _concrete_props(concrete_grade) + fck = conc["fck"] + fctm = conc["fctm"] + fy = _rebar_fy(rebar_grade) + + # ── 3. governing vehicle & IRC 6 loads ──────────────────────────────────── + vehicle_class = _governing_vehicle(cw_m) + + # Impact factor — IRC 6:2017 Cl.208 + if vehicle_class in (KEY_VEHICLE[0], KEY_VEHICLE[1]): + IF = IRC6_2017.cl_208_3_impact_factor(span_m) + else: + IF = IRC6_2017.cl_208_2_impact_factor(span_m) + impact_factor = 1.0 + IF + + # ULS partial safety factors — IRC 6:2017 Table B.2 + gamma_dl = IRC6_2017.table_B2("dead_load", "adding", "basic") + gamma_ll = IRC6_2017.table_B2("live_load", "leading", "basic") + + # Maximum single wheel load (kN) — IRC 6:2017 Cl.204 + P_wheel_kN = _max_wheel_load_kN(vehicle_class) + + # ── 4. dead load moment (continuous slab, per m width) ─────────────────── + w_DL_kN_m2 = _GAMMA_CONCRETE_KN_M3 * (deck_t_mm / 1000.0) + S = beam_spacing_m + M_DL_kNm = w_DL_kN_m2 * S ** 2 / 10.0 # kNm/m — moment in a continuous slab + + # ── 5. live load moment (effective-width method, IRC 21 Cl.305.16.2) ───── + # Effective dispersion width through slab depth (45° both sides) + bw_m = _wheel_contact_width_m(vehicle_class) + deck_t_mm / 1000.0 + # IRC 21 Cl.305.16.2: beff = K × S × (1 - a/S) + b0 + # K ≈ 2.5 (Table 7 for B/L close to 1), load at a = S/2 → max moment + K = 2.5 + a = S / 2.0 + beff_m = min(K * S * (1.0 - a / S) + bw_m, S) + # Simply-supported transverse moment at mid-span: M = P × a × (S-a) / (S × beff) + M_LL_kNm = P_wheel_kN * a * (S - a) / (S * beff_m) + + # ── 6. ULS design moment ───────────────────────────────────────────────── + M_ULS_bot_kNm = gamma_dl * M_DL_kNm + gamma_ll * impact_factor * M_LL_kNm + M_ULS_top_kNm = 0.75 * M_ULS_bot_kNm # hogging over support ≈ 75% of sagging + + # ── 7. design bottom (sagging) reinforcement ────────────────────────────── + d_bot_mm = deck_t_mm - cover_bot_mm - 6.0 # initial estimate (6 mm = half 12 mm bar) + As_req_bot = max(_required_steel_mm2(M_ULS_bot_kNm, fy, d_bot_mm, fck), + _min_steel_mm2(fctm, fy, d_bot_mm)) + dia_bot, spc_bot, As_bot = _pick_rebar(As_req_bot) + d_bot_mm = deck_t_mm - cover_bot_mm - dia_bot / 2.0 # refined with actual bar + + # ── 8. design top (hogging) reinforcement ──────────────────────────────── + d_top_mm = deck_t_mm - cover_top_mm - 6.0 + As_req_top = max(_required_steel_mm2(M_ULS_top_kNm, fy, d_top_mm, fck), + _min_steel_mm2(fctm, fy, d_top_mm)) + dia_top, spc_top, As_top = _pick_rebar(As_req_top) + d_top_mm = deck_t_mm - cover_top_mm - dia_top / 2.0 + + # ── 9. moment capacity check ───────────────────────────────────────────── + Mu_bot = _moment_capacity_kNm(fy, As_bot, d_bot_mm, fck) + Mu_top = _moment_capacity_kNm(fy, As_top, d_top_mm, fck) + bot_ok = Mu_bot >= M_ULS_bot_kNm + top_ok = Mu_top >= M_ULS_top_kNm + + # ── 10. deck overhang design ───────────────────────────────────────────── + overhang_m = 0.0 + if sizing is not None and hasattr(sizing, "deck_overhang"): + overhang_m = float(sizing.deck_overhang or 0.0) + + if overhang_m > 0.01: + # Minimum clearance from kerb face to wheel — IRC 6:2017 Table 3 + table3 = IRC6_2017.table_3(cw_m) + g_min = float(table3["g_min"]) + + # Railing dead load — IRC 6:2017 Cl.206.5 (kg/m → kN/m) + railing_kN_m = IRC6_2017.cl_206_5_railing_load() * 9.81 / 1000.0 + + # Crash barrier horizontal moment — IRC 6:2017 Cl.206.4 + barrier = IRC6_2017.cl_206_4_crash_barrier_load() + M_barrier_kNm = barrier["moment_at_base_kNm_per_m"] + + # DL cantilever moments at root (kNm/m) + M_DL_slab_oh = w_DL_kN_m2 * overhang_m ** 2 / 2.0 + M_DL_railing_oh = railing_kN_m * overhang_m + M_DL_oh = M_DL_slab_oh + M_DL_railing_oh + + # LL cantilever moment: wheel at g_min clearance from free edge + arm_wheel = overhang_m - g_min + if arm_wheel > 0.0: + bw_oh = _wheel_contact_width_m(vehicle_class) + deck_t_mm / 1000.0 + # IRC 21 Cl.305.16.3 cantilever effective width: beff = 1.3·a + bw + beff_oh = min(1.3 * arm_wheel + bw_oh, overhang_m) + M_LL_oh = P_wheel_kN * arm_wheel / beff_oh + else: + arm_wheel = 0.0 + beff_oh = overhang_m + M_LL_oh = 0.0 + + # ULS hogging moment at root + M_ULS_oh = (gamma_dl * M_DL_oh + + gamma_ll * impact_factor * M_LL_oh + + gamma_ll * M_barrier_kNm) + + # Design top (hogging) reinforcement for overhang + d_oh_mm = deck_t_mm - cover_top_mm - 6.0 + As_req_oh = max(_required_steel_mm2(M_ULS_oh, fy, d_oh_mm, fck), + _min_steel_mm2(fctm, fy, d_oh_mm)) + dia_oh, spc_oh, As_oh = _pick_rebar(As_req_oh) + d_oh_mm = deck_t_mm - cover_top_mm - dia_oh / 2.0 + + Mu_oh = _moment_capacity_kNm(fy, As_oh, d_oh_mm, fck) + oh_ok = Mu_oh >= M_ULS_oh + + overhang_lines = [ + "", + "Deck Overhang Design", + "-" * 40, + f" Overhang length L_oh : {overhang_m * 1000:.0f} mm ({overhang_m:.3f} m)", + f" Min. clearance g_min : {g_min:.3f} m [IRC 6:2017 Table 3]", + f" Railing DL load : {railing_kN_m:.3f} kN/m [IRC 6:2017 Cl.206.5]", + f" Crash barrier moment : {M_barrier_kNm:.2f} kNm/m [IRC 6:2017 Cl.206.4]", + f" Wheel arm from root : {arm_wheel:.3f} m", + f" M_DL (overhang) : {M_DL_oh:.3f} kNm/m (slab {M_DL_slab_oh:.3f} + railing {M_DL_railing_oh:.3f})", + f" M_LL (overhang) : {M_LL_oh:.3f} kNm/m", + f" M_ULS (overhang) : {M_ULS_oh:.3f} kNm/m", + "", + "Overhang Top Reinforcement", + "-" * 40, + f" Effective depth d : {d_oh_mm:.1f} mm", + f" As required : {As_req_oh:.0f} mm²/m", + f" Provided : Ø{dia_oh:.0f} @ {spc_oh:.0f} mm c/c → {As_oh:.0f} mm²/m", + f" Moment capacity Mu : {Mu_oh:.3f} kNm/m", + f" Status : {'PASS' if oh_ok else 'FAIL'}", + ] + else: + g_min = railing_kN_m = M_barrier_kNm = 0.0 + M_DL_oh = M_LL_oh = M_ULS_oh = arm_wheel = 0.0 + dia_oh = spc_oh = As_oh = As_req_oh = d_oh_mm = Mu_oh = 0.0 + oh_ok = True + overhang_lines = [] + + # ── 11. SLS checks (IRC 112:2020) ──────────────────────────────────────── + # Characteristic combination (stress, Cl.12.2.1): γ_DL=1.0, γ_LL=1.0 + # Frequent combination (crack width, Cl.12.3.4): γ_DL=1.0, γ_LL=0.75 + M_SLS_char_bot = M_DL_kNm + impact_factor * M_LL_kNm + M_SLS_char_top = 0.75 * M_SLS_char_bot + M_SLS_freq_bot = M_DL_kNm + 0.75 * impact_factor * M_LL_kNm + M_SLS_freq_top = 0.75 * M_SLS_freq_bot + + sc_bot = _sls_stress(M_SLS_char_bot, As_bot, d_bot_mm, fck, fy) + sc_top = _sls_stress(M_SLS_char_top, As_top, d_top_mm, fck, fy) + cw_bot = _sls_crack_width(M_SLS_freq_bot, As_bot, dia_bot, d_bot_mm, + deck_t_mm, cover_bot_mm, fck, fctm) + cw_top = _sls_crack_width(M_SLS_freq_top, As_top, dia_top, d_top_mm, + deck_t_mm, cover_top_mm, fck, fctm) + + if overhang_m > 0.01: + M_SLS_char_oh = M_DL_oh + impact_factor * M_LL_oh + M_barrier_kNm + M_SLS_freq_oh = M_DL_oh + 0.75 * (impact_factor * M_LL_oh + M_barrier_kNm) + sc_oh = _sls_stress(M_SLS_char_oh, As_oh, d_oh_mm, fck, fy) + cw_oh = _sls_crack_width(M_SLS_freq_oh, As_oh, dia_oh, d_oh_mm, + deck_t_mm, cover_top_mm, fck, fctm) + overhang_sls_lines = [ + "", + "Overhang SLS Stress Check [IRC 112:2020 Cl.12.2.1]", + "-" * 40, + f" M_SLS,char (overhang) : {M_SLS_char_oh:.3f} kNm/m (γ_DL=1.0, γ_LL=1.0)", + f" Concrete σc : {sc_oh['sigma_c']:.2f} MPa ≤ {sc_oh['sc_lim']:.1f} MPa → {'PASS' if sc_oh['sc_ok'] else 'FAIL'}", + f" Steel σs : {sc_oh['sigma_s']:.2f} MPa ≤ {sc_oh['ss_lim']:.1f} MPa → {'PASS' if sc_oh['ss_ok'] else 'FAIL'}", + "", + "Overhang Crack Width Check [IRC 112:2020 Cl.12.3.4]", + "-" * 40, + f" M_SLS,freq (overhang) : {M_SLS_freq_oh:.3f} kNm/m (γ_DL=1.0, γ_LL=0.75)", + f" Steel stress σs : {cw_oh['sigma_s']:.2f} MPa", + f" ρp,eff : {cw_oh['rho_p_eff']:.5f}", + f" Crack spacing Sr,max : {cw_oh['Sr_max']:.1f} mm", + f" Strain diff εsm-εcm : {cw_oh['eps_diff']:.3e}", + f" Crack width wk : {cw_oh['wk']:.4f} mm ≤ {cw_oh['wk_lim']:.1f} mm → {'PASS' if cw_oh['ok'] else 'FAIL'}", + ] + else: + overhang_sls_lines = [] + + sls_lines = [ + "", + "=" * 52, + "SLS Checks (IRC 112:2020)", + "=" * 52, + "", + "Stress Check — Bottom (Sagging) [Cl.12.2.1]", + "-" * 40, + f" M_SLS,char (sagging) : {M_SLS_char_bot:.3f} kNm/m (γ_DL=1.0, γ_LL=1.0)", + f" Neutral axis depth x : {sc_bot['x']:.1f} mm", + f" Concrete σc : {sc_bot['sigma_c']:.2f} MPa ≤ {sc_bot['sc_lim']:.1f} MPa → {'PASS' if sc_bot['sc_ok'] else 'FAIL'}", + f" Steel σs : {sc_bot['sigma_s']:.2f} MPa ≤ {sc_bot['ss_lim']:.1f} MPa → {'PASS' if sc_bot['ss_ok'] else 'FAIL'}", + "", + "Stress Check — Top (Hogging) [Cl.12.2.1]", + "-" * 40, + f" M_SLS,char (hogging) : {M_SLS_char_top:.3f} kNm/m (γ_DL=1.0, γ_LL=1.0)", + f" Concrete σc : {sc_top['sigma_c']:.2f} MPa ≤ {sc_top['sc_lim']:.1f} MPa → {'PASS' if sc_top['sc_ok'] else 'FAIL'}", + f" Steel σs : {sc_top['sigma_s']:.2f} MPa ≤ {sc_top['ss_lim']:.1f} MPa → {'PASS' if sc_top['ss_ok'] else 'FAIL'}", + "", + "Crack Width Check — Bottom (Sagging) [Cl.12.3.4]", + "-" * 40, + f" M_SLS,freq (sagging) : {M_SLS_freq_bot:.3f} kNm/m (γ_DL=1.0, γ_LL=0.75)", + f" Steel stress σs : {cw_bot['sigma_s']:.2f} MPa", + f" ρp,eff : {cw_bot['rho_p_eff']:.5f}", + f" Crack spacing Sr,max : {cw_bot['Sr_max']:.1f} mm", + f" Strain diff εsm-εcm : {cw_bot['eps_diff']:.3e}", + f" Crack width wk : {cw_bot['wk']:.4f} mm ≤ {cw_bot['wk_lim']:.1f} mm → {'PASS' if cw_bot['ok'] else 'FAIL'}", + "", + "Crack Width Check — Top (Hogging) [Cl.12.3.4]", + "-" * 40, + f" M_SLS,freq (hogging) : {M_SLS_freq_top:.3f} kNm/m (γ_DL=1.0, γ_LL=0.75)", + f" Steel stress σs : {cw_top['sigma_s']:.2f} MPa", + f" ρp,eff : {cw_top['rho_p_eff']:.5f}", + f" Crack spacing Sr,max : {cw_top['Sr_max']:.1f} mm", + f" Strain diff εsm-εcm : {cw_top['eps_diff']:.3e}", + f" Crack width wk : {cw_top['wk']:.4f} mm ≤ {cw_top['wk_lim']:.1f} mm → {'PASS' if cw_top['ok'] else 'FAIL'}", + *overhang_sls_lines, + ] + + # ── 12. design check report ─────────────────────────────────────────────── + lines = [ + "IRC 6:2017 Deck Slab Design Summary", + "=" * 52, + "", + f"Governing vehicle : {vehicle_class}", + f"Impact factor (IF) : {impact_factor:.3f} [IRC 6:2017 Cl.208]", + f" (1 + {IF:.3f} for span {span_m:.1f} m)", + f"γ_DL [Table B.2] : {gamma_dl}", + f"γ_LL [Table B.2] : {gamma_ll}", + "", + f"Effective span (S) : {S:.3f} m (girder c/c)", + f"Deck thickness : {deck_t_mm:.0f} mm", + f"Concrete : {concrete_grade} (fck = {fck:.0f} MPa, fctm = {fctm:.1f} MPa)", + f"Reinforcement : {rebar_grade} (fy = {fy:.0f} MPa)", + "", + "Interior Span Loads", + "-" * 40, + f" Dead load (w_DL) : {w_DL_kN_m2:.2f} kN/m²", + f" Max wheel load (P) : {P_wheel_kN:.1f} kN [IRC 6:2017 Cl.204]", + f" Effective width beff : {beff_m:.3f} m [IRC 21 Cl.305.16.2]", + "", + "Interior Span Design Moments", + "-" * 40, + f" M_DL : {M_DL_kNm:.3f} kNm/m", + f" M_LL (unfactored) : {M_LL_kNm:.3f} kNm/m", + f" M_ULS (sagging) : {M_ULS_bot_kNm:.3f} kNm/m", + f" M_ULS (hogging, 75%) : {M_ULS_top_kNm:.3f} kNm/m", + "", + "Bottom (Sagging) Reinforcement", + "-" * 40, + f" Effective depth d : {d_bot_mm:.1f} mm", + f" As required : {As_req_bot:.0f} mm²/m", + f" Provided : Ø{dia_bot:.0f} @ {spc_bot:.0f} mm c/c → {As_bot:.0f} mm²/m", + f" Moment capacity Mu : {Mu_bot:.3f} kNm/m", + f" Status : {'PASS' if bot_ok else 'FAIL'}", + "", + "Top (Hogging) Reinforcement", + "-" * 40, + f" Effective depth d : {d_top_mm:.1f} mm", + f" As required : {As_req_top:.0f} mm²/m", + f" Provided : Ø{dia_top:.0f} @ {spc_top:.0f} mm c/c → {As_top:.0f} mm²/m", + f" Moment capacity Mu : {Mu_top:.3f} kNm/m", + f" Status : {'PASS' if top_ok else 'FAIL'}", + *overhang_lines, + *sls_lines, + ] + design_check_text = "\n".join(lines) + + # ── 13. return UI-compatible dict ───────────────────────────────────────── + result = { + "deck_grade" : concrete_grade, + "deck_thickness" : f"{deck_t_mm:.0f}", + "deck_overhang" : f"{overhang_m * 1000:.0f}", + # top reinforcement (interior hogging) + "rebar_top_yield" : f"{fy:.0f}", + "rebar_top_dia" : f"{dia_top:.0f}", + "rebar_top_spacing" : f"{spc_top:.0f}", + "rebar_top_cover" : f"{cover_top_mm:.0f}", + "rebar_top_area" : f"{As_top:.0f}", + # bottom reinforcement (interior sagging) + "rebar_bottom_yield" : f"{fy:.0f}", + "rebar_bottom_dia" : f"{dia_bot:.0f}", + "rebar_bottom_spacing" : f"{spc_bot:.0f}", + "rebar_bottom_cover" : f"{cover_bot_mm:.0f}", + "rebar_bottom_area" : f"{As_bot:.0f}", + # design check + "deck_design_check" : design_check_text, + } + if overhang_m > 0.01: + result.update({ + "rebar_overhang_yield" : f"{fy:.0f}", + "rebar_overhang_dia" : f"{dia_oh:.0f}", + "rebar_overhang_spacing" : f"{spc_oh:.0f}", + "rebar_overhang_cover" : f"{cover_top_mm:.0f}", + "rebar_overhang_area" : f"{As_oh:.0f}", + }) + return result diff --git a/src/osdagbridge/core/utils/codes/irc6_2017.py b/src/osdagbridge/core/utils/codes/irc6_2017.py index a45988b18..8f292f572 100644 --- a/src/osdagbridge/core/utils/codes/irc6_2017.py +++ b/src/osdagbridge/core/utils/codes/irc6_2017.py @@ -449,6 +449,31 @@ def cl_206_2_kerb_load(): } + @staticmethod + def cl_206_4_crash_barrier_load(): + """ + IRC:6-2017 Clause 206.4 — Crash Barrier Load. + + A horizontal load of 7.5 kN/m is applied at 1.0 m above the deck + surface for design of the deck overhang and crash barrier anchorage. + + Returns + ------- + dict + horizontal_load_kN_per_m : float — 7.5 kN/m + height_m : float — 1.0 m above deck surface + moment_at_base_kNm_per_m : float — 7.5 kNm/m (= 7.5 × 1.0) + clause : str + """ + horizontal_load = 7.5 # kN/m + height_m = 1.0 # m above deck surface + return { + "horizontal_load_kN_per_m" : horizontal_load, + "height_m" : height_m, + "moment_at_base_kNm_per_m" : horizontal_load * height_m, + "clause" : "IRC 6:2017 - 206.4", + } + @staticmethod def cl_206_5_railing_load(): """ From 9e63e3a4c28689aab1f5a265bab76b4be575c54b Mon Sep 17 00:00:00 2001 From: Nidhikhare12 Date: Sat, 9 May 2026 00:44:20 +0530 Subject: [PATCH 208/225] deck design link with dialog box including utilization ratios --- .../bridge_types/plate_girder/deckdesign.py | 45 ++- .../desktop/ui/dialogs/deck_design.py | 261 ++++++++++++++---- 2 files changed, 256 insertions(+), 50 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/deckdesign.py b/src/osdagbridge/core/bridge_types/plate_girder/deckdesign.py index 9cc8636c3..f2f8ac910 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/deckdesign.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/deckdesign.py @@ -208,13 +208,14 @@ def _governing_vehicle(carriageway_width_m: float) -> str: def _max_wheel_load_kN(vehicle_class: str) -> float: """ Maximum single wheel load (kN) for the governing vehicle per IRC 6:2017. - wheel_loads are per-axle totals; each axle splits equally between 2 wheels. + wheel_loads are per-axle totals stored in Newtons (IRC6 unit system uses + t = kN*g = 9810 N); divide by 2 for per-wheel and by 1000 to get kN. """ if vehicle_class in (KEY_VEHICLE[0], KEY_VEHICLE[1]): # Class 70R axle_loads = IRC6_2017.cl_204_1_Class70R_vehicle_wheel()["wheel_loads"] else: # Class A / B axle_loads = IRC6_2017.cl_204_1_ClassA_vehicle()["wheel_loads"] - return max(axle_loads) / 2.0 # per-wheel load (kN) + return max(axle_loads) / 2.0 / 1000.0 # N → kN, axle → per-wheel def _wheel_contact_width_m(vehicle_class: str) -> float: @@ -317,6 +318,12 @@ def design_deck_slab(bridge) -> dict: _min_steel_mm2(fctm, fy, d_bot_mm)) dia_bot, spc_bot, As_bot = _pick_rebar(As_req_bot) d_bot_mm = deck_t_mm - cover_bot_mm - dia_bot / 2.0 # refined with actual bar + # Second pass — recheck with refined d to guard against d decreasing for larger bars + As_req_bot2 = max(_required_steel_mm2(M_ULS_bot_kNm, fy, d_bot_mm, fck), + _min_steel_mm2(fctm, fy, d_bot_mm)) + if As_req_bot2 > As_bot: + dia_bot, spc_bot, As_bot = _pick_rebar(As_req_bot2) + d_bot_mm = deck_t_mm - cover_bot_mm - dia_bot / 2.0 # ── 8. design top (hogging) reinforcement ──────────────────────────────── d_top_mm = deck_t_mm - cover_top_mm - 6.0 @@ -324,6 +331,11 @@ def design_deck_slab(bridge) -> dict: _min_steel_mm2(fctm, fy, d_top_mm)) dia_top, spc_top, As_top = _pick_rebar(As_req_top) d_top_mm = deck_t_mm - cover_top_mm - dia_top / 2.0 + As_req_top2 = max(_required_steel_mm2(M_ULS_top_kNm, fy, d_top_mm, fck), + _min_steel_mm2(fctm, fy, d_top_mm)) + if As_req_top2 > As_top: + dia_top, spc_top, As_top = _pick_rebar(As_req_top2) + d_top_mm = deck_t_mm - cover_top_mm - dia_top / 2.0 # ── 9. moment capacity check ───────────────────────────────────────────── Mu_bot = _moment_capacity_kNm(fy, As_bot, d_bot_mm, fck) @@ -376,6 +388,12 @@ def design_deck_slab(bridge) -> dict: _min_steel_mm2(fctm, fy, d_oh_mm)) dia_oh, spc_oh, As_oh = _pick_rebar(As_req_oh) d_oh_mm = deck_t_mm - cover_top_mm - dia_oh / 2.0 + # Second pass — recheck with refined d (larger bars reduce d below d_init) + As_req_oh2 = max(_required_steel_mm2(M_ULS_oh, fy, d_oh_mm, fck), + _min_steel_mm2(fctm, fy, d_oh_mm)) + if As_req_oh2 > As_oh: + dia_oh, spc_oh, As_oh = _pick_rebar(As_req_oh2) + d_oh_mm = deck_t_mm - cover_top_mm - dia_oh / 2.0 Mu_oh = _moment_capacity_kNm(fy, As_oh, d_oh_mm, fck) oh_ok = Mu_oh >= M_ULS_oh @@ -449,6 +467,16 @@ def design_deck_slab(bridge) -> dict: else: overhang_sls_lines = [] + # ── utilization ratios (demand / capacity) ──────────────────────────────── + ur_bot_uls = M_ULS_bot_kNm / Mu_bot if Mu_bot > 0 else 9.999 + ur_top_uls = M_ULS_top_kNm / Mu_top if Mu_top > 0 else 9.999 + ur_bot_sls_c = sc_bot["sigma_c"] / sc_bot["sc_lim"] + ur_bot_sls_s = sc_bot["sigma_s"] / sc_bot["ss_lim"] + ur_top_sls_c = sc_top["sigma_c"] / sc_top["sc_lim"] + ur_top_sls_s = sc_top["sigma_s"] / sc_top["ss_lim"] + ur_bot_crack = cw_bot["wk"] / cw_bot["wk_lim"] + ur_top_crack = cw_top["wk"] / cw_top["wk_lim"] + sls_lines = [ "", "=" * 52, @@ -556,6 +584,15 @@ def design_deck_slab(bridge) -> dict: "rebar_bottom_area" : f"{As_bot:.0f}", # design check "deck_design_check" : design_check_text, + # utilization ratios + "ur_bot_uls" : round(ur_bot_uls, 3), + "ur_top_uls" : round(ur_top_uls, 3), + "ur_bot_sls_c" : round(ur_bot_sls_c, 3), + "ur_bot_sls_s" : round(ur_bot_sls_s, 3), + "ur_top_sls_c" : round(ur_top_sls_c, 3), + "ur_top_sls_s" : round(ur_top_sls_s, 3), + "ur_bot_crack" : round(ur_bot_crack, 3), + "ur_top_crack" : round(ur_top_crack, 3), } if overhang_m > 0.01: result.update({ @@ -564,5 +601,9 @@ def design_deck_slab(bridge) -> dict: "rebar_overhang_spacing" : f"{spc_oh:.0f}", "rebar_overhang_cover" : f"{cover_top_mm:.0f}", "rebar_overhang_area" : f"{As_oh:.0f}", + "ur_oh_uls" : round(M_ULS_oh / Mu_oh if Mu_oh > 0 else 9.999, 3), + "ur_oh_sls_c" : round(sc_oh["sigma_c"] / sc_oh["sc_lim"], 3), + "ur_oh_sls_s" : round(sc_oh["sigma_s"] / sc_oh["ss_lim"], 3), + "ur_oh_crack" : round(cw_oh["wk"] / cw_oh["wk_lim"], 3), }) return result diff --git a/src/osdagbridge/desktop/ui/dialogs/deck_design.py b/src/osdagbridge/desktop/ui/dialogs/deck_design.py index 75aa67268..2abf655c7 100644 --- a/src/osdagbridge/desktop/ui/dialogs/deck_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/deck_design.py @@ -19,6 +19,7 @@ from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.tabs.steel_design_check import UtilizationBar, StatusBadge class NoScrollTable(QTableWidget): @@ -34,23 +35,39 @@ def wheelEvent(self, event): class DeckDesign(QDialog): """ Deck Design dialog — displays deck properties, reinforcement details, - and design check results. + utilization ratios, and design check results. Styling mirrors the Steel Design dialog's Details tab for visual consistency across the application. """ - # Reinforcement table constants — matches Stiffener Details table styling. - _REBAR_ROW_HEIGHT = 50 + _REBAR_ROW_HEIGHT = 50 + _REBAR_HEADER_HEIGHT = 48 _REBAR_HEADERS = [ "Position", "Material Yield\nStrength (MPa)", "Diameter (mm)", "Spacing (mm)", - "Clear Cover from\nTop (mm)", - "Area (mm\u00b2)", + "Clear Cover\n(mm)", + "Area (mm²)", + ] + _REBAR_TYPES = ["Top Layer", "Bottom Layer", "Overhang"] + + # (dict key, display label, is_overhang_row) + _UR_CHECKS = [ + ("ur_bot_uls", "ULS – Bottom (Sagging)", False), + ("ur_top_uls", "ULS – Top (Hogging)", False), + ("ur_oh_uls", "ULS – Overhang", True), + ("ur_bot_sls_c", "SLS – Bottom Concrete Stress", False), + ("ur_bot_sls_s", "SLS – Bottom Steel Stress", False), + ("ur_top_sls_c", "SLS – Top Concrete Stress", False), + ("ur_top_sls_s", "SLS – Top Steel Stress", False), + ("ur_bot_crack", "SLS – Bottom Crack Width", False), + ("ur_top_crack", "SLS – Top Crack Width", False), + ("ur_oh_sls_c", "SLS – Overhang Concrete Stress", True), + ("ur_oh_sls_s", "SLS – Overhang Steel Stress", True), + ("ur_oh_crack", "SLS – Overhang Crack Width", True), ] - _REBAR_TYPES = ["Top Layer", "Bottom Layer"] # ========================================================================= # UI INITIALISATION @@ -76,10 +93,6 @@ def __init__(self, parent=None): # ========================================================================= def setupWrapper(self): - """ - Configure a frameless window with a custom title bar and a resize grip. - The content_widget acts as the root container for the dialog layout. - """ self.setWindowFlags( Qt.FramelessWindowHint | Qt.WindowSystemMenuHint | Qt.Window ) @@ -105,14 +118,13 @@ def setupWrapper(self): main_layout.addLayout(overlay) def init_ui(self): - """Build the top-level layout: scroll area containing the three sections.""" + """Build the top-level layout: scroll area containing all sections.""" self.setupWrapper() main_layout = QVBoxLayout(self.content_widget) main_layout.setContentsMargins(5, 5, 5, 5) main_layout.setSpacing(0) - # ── SCROLL AREA ─────────────────────────────────────────────────────── scroll_area = StyledScrollArea() container = QWidget() @@ -122,28 +134,49 @@ def init_ui(self): container_layout.setContentsMargins(10, 10, 10, 10) container_layout.setSpacing(12) - # Deck Properties: constrain to ~50% width (left half), matching - # the Steel Design Details tab's side-by-side card layout. + # Deck Properties — left half only (mirrors Steel Design Details layout) props_row = QHBoxLayout() props_row.setContentsMargins(0, 0, 0, 0) props_row.setSpacing(0) props_row.addWidget(self._build_properties_section(), 1) - props_row.addStretch(1) # empty right half + props_row.addStretch(1) container_layout.addLayout(props_row) container_layout.addWidget(self._build_reinforcement_section()) + container_layout.addWidget(self._build_utilization_section()) container_layout.addWidget(self._build_design_check_section()) container_layout.addStretch() scroll_area.setWidget(container) main_layout.addWidget(scroll_area) + # Only run deck design if the main design has already been executed + # (sizing_result is None until the Design button is clicked). + backend = getattr(self._main_window, "backend", None) + if backend is not None and getattr(backend, "sizing_result", None) is not None: + try: + from osdagbridge.core.bridge_types.plate_girder.deckdesign import design_deck_slab + result = design_deck_slab(backend) + self.load_data(result) + except Exception: + self.design_check_text.setHtml( + "

" + "Deck design could not be computed. Check inputs and try again." + "

" + ) + else: + self.design_check_text.setHtml( + "

" + "Click Design in the Input panel to run the analysis, " + "then re-open this dialog to see deck design results." + "

" + ) + # ========================================================================= # HELPERS — mirrors steel_design_details.py card / label / grid patterns # ========================================================================= def _create_card_frame(self) -> QFrame: - """Outer card — same as SteelDesignDetailsTab._create_card_frame.""" frame = QFrame() frame.setObjectName("girderCard") frame.setStyleSheet( @@ -156,7 +189,6 @@ def _create_card_frame(self) -> QFrame: return frame def _create_label(self, text: str) -> QLabel: - """Section title label — 13 px bold, matching Steel Design.""" label = QLabel(text) label.setStyleSheet( "font-size: 13px; color: #2B2B2B; font-weight: bold;" @@ -166,7 +198,6 @@ def _create_label(self, text: str) -> QLabel: return label def _create_small_label(self, text: str) -> QLabel: - """Row field label — 11 px, supports HTML rich text.""" label = QLabel(text) label.setTextFormat(Qt.RichText) label.setStyleSheet( @@ -177,7 +208,6 @@ def _create_small_label(self, text: str) -> QLabel: return label def _readonly_field(self) -> QLineEdit: - """Readonly output field — expands to fill its grid column.""" field = QLineEdit() field.setReadOnly(True) field.setMinimumWidth(80) @@ -187,14 +217,13 @@ def _readonly_field(self) -> QLineEdit: return field def _make_grid(self) -> QGridLayout: - """Grid matching Steel Design Details grid spacing.""" grid = QGridLayout() grid.setContentsMargins(0, 0, 0, 0) grid.setHorizontalSpacing(16) grid.setVerticalSpacing(12) grid.setColumnMinimumWidth(0, 230) - grid.setColumnStretch(0, 0) # label: fits content, doesn't stretch - grid.setColumnStretch(1, 1) # field: fills all remaining width + grid.setColumnStretch(0, 0) + grid.setColumnStretch(1, 1) return grid def _add_row(self, grid, row, text, widget): @@ -210,7 +239,7 @@ def _add_row(self, grid, row, text, widget): # ========================================================================= def _build_properties_section(self) -> QFrame: - """Build the Deck Properties card with grade and thickness fields.""" + """Deck Properties card: grade, thickness, and overhang.""" card = self._create_card_frame() card_layout = QVBoxLayout(card) card_layout.setContentsMargins(18, 16, 18, 16) @@ -218,23 +247,20 @@ def _build_properties_section(self) -> QFrame: card_layout.addWidget(self._create_label("Deck Properties:")) grid = self._make_grid() - self.grade_field = self._readonly_field() + self.grade_field = self._readonly_field() self.thickness_field = self._readonly_field() + self.overhang_field = self._readonly_field() r = 0 - r = self._add_row(grid, r, "Grade of Material:", self.grade_field) - r = self._add_row(grid, r, "Thickness (mm):", self.thickness_field) + r = self._add_row(grid, r, "Grade of Material:", self.grade_field) + r = self._add_row(grid, r, "Thickness (mm):", self.thickness_field) + r = self._add_row(grid, r, "Deck Overhang (mm):", self.overhang_field) card_layout.addLayout(grid) return card def _build_reinforcement_section(self) -> QFrame: - """Build the Reinforcement Details card with a styled table. - - The table style mirrors the Stiffener Details table in the Steel - Design Details tab — same font, padding, alternating-row colours, - center alignment, and header treatment. - """ + """Reinforcement Details card with a table for top, bottom, and overhang.""" card = self._create_card_frame() card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) card_layout = QVBoxLayout(card) @@ -242,7 +268,6 @@ def _build_reinforcement_section(self) -> QFrame: card_layout.setSpacing(12) card_layout.addWidget(self._create_label("Reinforcement Details:")) - # ── Table widget ────────────────────────────────────────────── num_rows = len(self._REBAR_TYPES) num_cols = len(self._REBAR_HEADERS) @@ -251,7 +276,6 @@ def _build_reinforcement_section(self) -> QFrame: self.rebar_table.setColumnCount(num_cols) self.rebar_table.setHorizontalHeaderLabels(self._REBAR_HEADERS) - # Populate rows — all cells are read-only and center-aligned. for row, type_name in enumerate(self._REBAR_TYPES): type_item = QTableWidgetItem(type_name) type_item.setFlags(Qt.ItemIsEnabled) @@ -264,7 +288,9 @@ def _build_reinforcement_section(self) -> QFrame: cell.setTextAlignment(Qt.AlignCenter) self.rebar_table.setItem(row, col, cell) - # ── Header behaviour ────────────────────────────────────────── + # Hide overhang row (row 2) until load_data() reveals it + self.rebar_table.setRowHidden(2, True) + h_header = self.rebar_table.horizontalHeader() h_header.setSectionResizeMode(QHeaderView.Stretch) h_header.setDefaultAlignment(Qt.AlignCenter) @@ -274,7 +300,6 @@ def _build_reinforcement_section(self) -> QFrame: v_header.setDefaultSectionSize(self._REBAR_ROW_HEIGHT) v_header.setSectionResizeMode(QHeaderView.Stretch) - # ── General table properties ────────────────────────────────── self.rebar_table.setEditTriggers(QTableWidget.NoEditTriggers) self.rebar_table.setSelectionMode(QTableWidget.NoSelection) self.rebar_table.setFocusPolicy(Qt.NoFocus) @@ -283,13 +308,11 @@ def _build_reinforcement_section(self) -> QFrame: self.rebar_table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.rebar_table.setAlternatingRowColors(True) - # Height: multi-line headers need ~48 px, each data row is - # _REBAR_ROW_HEIGHT (40 px), plus 2 px for the border. - header_height = 48 - table_height = header_height + num_rows * self._REBAR_ROW_HEIGHT + 2 - self.rebar_table.setFixedHeight(table_height) + # Initial height for 2 visible rows (overhang hidden) + self.rebar_table.setFixedHeight( + self._REBAR_HEADER_HEIGHT + 2 * self._REBAR_ROW_HEIGHT + 2 + ) - # ── Stylesheet — mirrors Stiffener / Lane Details table ─────── self.rebar_table.setStyleSheet(""" QTableWidget { background-color: #ffffff; @@ -317,8 +340,78 @@ def _build_reinforcement_section(self) -> QFrame: card_layout.addWidget(self.rebar_table) return card + def _build_utilization_section(self) -> QFrame: + """Utilization Summary card with demand/capacity bars for all ULS and SLS checks.""" + card = self._create_card_frame() + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(18, 16, 18, 16) + card_layout.setSpacing(6) + card_layout.addWidget(self._create_label("Utilization Summary:")) + + # Column header + hdr = QHBoxLayout() + hdr.setContentsMargins(0, 2, 0, 4) + hdr_lbl = QLabel("Check") + hdr_lbl.setStyleSheet("font-size: 10px; color: #888; font-weight: bold;") + hdr_lbl.setFixedWidth(230) + hdr.addWidget(hdr_lbl) + hdr.addStretch(1) + for txt in ("UR", "Status"): + w = QLabel(txt) + w.setStyleSheet("font-size: 10px; color: #888; font-weight: bold;") + w.setFixedWidth(52 if txt == "UR" else 64) + w.setAlignment(Qt.AlignCenter) + hdr.addWidget(w) + card_layout.addLayout(hdr) + + # Separator line + sep = QFrame() + sep.setFrameShape(QFrame.HLine) + sep.setStyleSheet("color: #e0e0e0;") + card_layout.addWidget(sep) + + self._ur_widgets: dict = {} + + for key, label, is_overhang in self._UR_CHECKS: + row_w = QWidget() + row_l = QHBoxLayout(row_w) + row_l.setContentsMargins(0, 3, 0, 3) + row_l.setSpacing(8) + + lbl = QLabel(label) + lbl.setStyleSheet("font-size: 11px; color: #333333;") + lbl.setFixedWidth(230) + row_l.addWidget(lbl) + + bar = UtilizationBar() + bar.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + row_l.addWidget(bar, 1) + + val = QLabel("–") + val.setFixedWidth(52) + val.setAlignment(Qt.AlignCenter) + val.setStyleSheet("font-size: 11px; color: #333333; font-weight: bold;") + row_l.addWidget(val) + + badge = StatusBadge() + row_l.addWidget(badge) + + # Hide overhang rows until overhang data is present + row_w.setVisible(not is_overhang) + card_layout.addWidget(row_w) + + self._ur_widgets[key] = { + "row": row_w, + "bar": bar, + "val": val, + "badge": badge, + "is_overhang": is_overhang, + } + + return card + def _build_design_check_section(self) -> QFrame: - """Build the Design Check card with a read-only text area.""" + """Design Check card with a read-only HTML text area.""" card = self._create_card_frame() card_layout = QVBoxLayout(card) card_layout.setContentsMargins(18, 16, 18, 16) @@ -342,21 +435,53 @@ def _build_design_check_section(self) -> QFrame: card_layout.addWidget(self.design_check_text) return card + # ========================================================================= + # HELPERS + # ========================================================================= + + @staticmethod + def _text_to_html(text: str) -> str: + """Convert the plain-text design report to HTML with PASS/FAIL colouring.""" + lines = [] + for line in text.split("\n"): + esc = (line + .replace("&", "&") + .replace("<", "<") + .replace(">", ">")) + esc = esc.replace( + "PASS", + 'PASS', + ) + esc = esc.replace( + "FAIL", + 'FAIL', + ) + lines.append(esc) + return ( + "
"
+            + "
".join(lines) + + "
" + ) + # ========================================================================= # PUBLIC API # ========================================================================= def load_data(self, cad_state: dict) -> None: - """Populate all field widgets from a cad_state snapshot. + """Populate all widgets from a deck-design result dict. - Silently ignores missing or invalid keys. + Silently ignores missing or invalid keys — safe to call with partial data. """ if not cad_state: return + # ── Properties ─────────────────────────────────────────────────────── self.grade_field.setText(str(cad_state.get("deck_grade", ""))) self.thickness_field.setText(str(cad_state.get("deck_thickness", ""))) + self.overhang_field.setText(str(cad_state.get("deck_overhang", ""))) + # ── Reinforcement table ─────────────────────────────────────────────── rebar_map = {0: "top", 1: "bottom"} for row, prefix in rebar_map.items(): for col, suffix in enumerate( @@ -368,6 +493,46 @@ def load_data(self, cad_state: dict) -> None: item.setTextAlignment(Qt.AlignCenter) self.rebar_table.setItem(row, col, item) - self.design_check_text.setPlainText( - str(cad_state.get("deck_design_check", "")) - ) \ No newline at end of file + # Show overhang row only when overhang reinforcement data is present + has_overhang = bool(cad_state.get("rebar_overhang_dia", "")) + self.rebar_table.setRowHidden(2, not has_overhang) + if has_overhang: + for col, suffix in enumerate( + ["yield", "dia", "spacing", "cover", "area"], start=1, + ): + value = cad_state.get(f"rebar_overhang_{suffix}", "") + item = QTableWidgetItem(str(value)) + item.setFlags(Qt.ItemIsEnabled) + item.setTextAlignment(Qt.AlignCenter) + self.rebar_table.setItem(2, col, item) + + n_visible = 2 + (1 if has_overhang else 0) + self.rebar_table.setFixedHeight( + self._REBAR_HEADER_HEIGHT + n_visible * self._REBAR_ROW_HEIGHT + 2 + ) + + # ── Utilization bars ────────────────────────────────────────────────── + for key, widgets in self._ur_widgets.items(): + if widgets["is_overhang"]: + widgets["row"].setVisible(has_overhang) + + raw = cad_state.get(key) + if raw is None: + widgets["val"].setText("–") + widgets["bar"].set_ratio(0.0) + widgets["badge"].set_neutral() + else: + ratio = float(raw) + widgets["val"].setText(f"{ratio:.3f}") + widgets["bar"].set_ratio(ratio) + if ratio <= 1.0: + widgets["badge"].set_pass() + else: + widgets["badge"].set_fail() + + # ── Design check text ───────────────────────────────────────────────── + raw_text = str(cad_state.get("deck_design_check", "")) + if raw_text: + self.design_check_text.setHtml(self._text_to_html(raw_text)) + else: + self.design_check_text.clear() From 31c097e8ad00e46aa58ac0ec6f3e55d1a209c8e5 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Fri, 8 May 2026 01:52:46 +0530 Subject: [PATCH 209/225] refactor: separate wearing course as DW load case and remove dead vehicle load method --- .../bridge_types/plate_girder/analyser.py | 102 ++---------------- .../plate_girder/plategirderbridge.py | 50 +-------- 2 files changed, 8 insertions(+), 144 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index e82327fc1..131c24015 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -74,7 +74,7 @@ def __init__(self): self.model = None # placeholder for overlay load case created later - self.overlay_load_case = None + self.wearing_course_load = None # placeholder for self weight load case created later self.self_weight_load_case = None @@ -430,7 +430,8 @@ def create_deck_load(self, model=None, slab_thickness_m: float | None = None, def create_wearing_course_load(self, model=None, edge_clearance=0.0, thickness_m: float | None = None, - density_kN_m3: float | None = None): + density_kN_m3: float | None = None, + load_factor: float = 1.0): """Creates wearing course load (patch). The magnitude is computed as ``thickness × ρ``. Typical bituminous @@ -446,7 +447,7 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0, If `model`, `L` or `w` are not provided they default to the instance values `self.model`, `self.L`, `self.w`. - The created load case is stored on `self.overlay_load_case`. + The created load case is stored on `self.wearing_course_load`. """ model = model or self.model if model is None: @@ -492,12 +493,12 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0, point4=p4, ) - DL_overlay = og.create_load_case(name="Wearing course self weight") + DL_overlay = og.create_load_case(name=f"{load_factor} DW") DL_overlay.add_load(overlay) - model.add_load_case(DL_overlay) + model.add_load_case(DL_overlay, load_factor=load_factor) # store reference on the instance - self.overlay_load_case = DL_overlay + self.wearing_course_load = DL_overlay return DL_overlay @@ -828,7 +829,6 @@ def create_dead_load_combination(self, model=None, load_factor=1.0): _DL_ATTRS = [ "self_weight_load_case", "deck_load_case", - "overlay_load_case", "footpath_load_case", "crash_barrier_load_case", "railing_load_case", @@ -1192,94 +1192,6 @@ def create_moving_vehicle_load_cases( return self.moving_load_cases_list - def add_vehicle_load_with_moving_path( - self, - model=None, - vehicle_type="CLASS70R", - load_case_name="Class 70R", - x_coord=0.0, - z_coord=0.0, - spacing=1.5, - span=None, - y_coord=0.0, - ): - """ - Adds a vehicle load (static + moving) to the grillage model. - - Parameters - ---------- - model : ospgrillage.grillage.Grillage - Grillage model - vehicle_type : str - Load model type (e.g. 'M1600', 'CLASS70R') - load_case_name : str - Name of the static load case - x_coord : float - Initial longitudinal position of vehicle - z_coord : float - Transverse position of vehicle - spacing : float - Vehicle spacing for moving load start position - span : float - Bridge span length - y_coord : float, optional - Vertical coordinate (default = 0.0) - - Returns - ------- - dict - Dictionary containing: - - 'vehicle' - - 'static_load_case' - - 'moving_load_case' - - 'moving_path' - """ - model = model or self.model - if model is None: - raise ValueError("Model is not available. Create model before adding loads.") - - span = span or self.L - - # ----------------------------- - # Create vehicle - # ----------------------------- - vehicle_generator = og.create_load_model(model_type=vehicle_type) - vehicle = vehicle_generator.create() - - # Set global position - vehicle.set_global_coord(og.Point(x_coord, y_coord, z_coord)) - - # ----------------------------- - # Static load case - # ----------------------------- - static_lc = og.create_load_case(name=load_case_name) - static_lc.add_load(vehicle) - model.add_load_case(static_lc) - - # ----------------------------- - # Moving load path - # ----------------------------- - start = og.create_point(x=-spacing, y=0, z=0) - end = og.Point(span, 0, 0) - path = og.create_moving_path(start_point=start, end_point=end) - - # ----------------------------- - # Moving load case - # ----------------------------- - moving_lc_name = f"Moving {load_case_name}" - moving_lc = og.create_moving_load(name=moving_lc_name) - moving_lc.set_path(path) - moving_lc.add_load(vehicle) - - model.add_load_case(moving_lc) - - return { - "vehicle": vehicle, - "static_load_case": static_lc, - "moving_load_case": moving_lc, - "moving_path": path, - } - def analyze(self, model=None): model = model or self.model diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 6abe31b3e..2d67bf0f5 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -503,7 +503,7 @@ def add_dead_loads(self) -> None: model = self.grillage_model model.create_self_weight_load() model.create_deck_load(slab_thickness_m=deck_t_m) - model.create_wearing_course_load(thickness_m=wc_t_m, density_kN_m3=wc_rho) + model.create_wearing_course_load(thickness_m=wc_t_m, density_kN_m3=wc_rho, load_factor=1.0) model.create_footpath_load() model.create_crash_barrier_load(barrier_load_kN_per_m=barrier_load_kN_m) model.create_railing_load(railing_load_kN_per_m=railing_load_kN_m) @@ -596,54 +596,6 @@ def create_moving_vehicle_load_cases( span=span, ) - def add_vehicle_load_with_moving_path( - self, - vehicle_type: str = "CLASS70R", - load_case_name: str = "Class 70R", - x_coord: float = 0.0, - z_coord: float = 0.0, - spacing: float = 1.5, - span: float | None = None, - y_coord: float = 0.0, - ) -> dict: - """ - Add a single vehicle (static + moving) at an explicit position. - - Delegates to BridgeGrillageModel.add_vehicle_load_with_moving_path(). - - Parameters - ---------- - vehicle_type : str - Load model type (e.g. ``'CLASS70R'``, ``'CLASSA'``). - load_case_name : str - Name given to the static load case. - x_coord : float - Initial longitudinal position (m) of the vehicle. - z_coord : float - Transverse position (m) of the vehicle. - spacing : float - Distance (m) behind bridge start for the moving path origin. - span : float, optional - Override the bridge span (m). - y_coord : float - Vertical coordinate (default 0.0). - - Returns - ------- - dict - Keys: ``'vehicle'``, ``'static_load_case'``, - ``'moving_load_case'``, ``'moving_path'``. - """ - return self.grillage_model.add_vehicle_load_with_moving_path( - vehicle_type=vehicle_type, - load_case_name=load_case_name, - x_coord=x_coord, - z_coord=z_coord, - spacing=spacing, - span=span, - y_coord=y_coord, - ) - def analyze(self): """ Run the OpenSees grillage analysis for all registered load cases. From d84d6963cee0b3750cbacd36897e6deebe4ac9ca Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Fri, 8 May 2026 05:43:45 +0530 Subject: [PATCH 210/225] group live loads by IRC:6 case and add governing LL load case --- .../bridge_types/plate_girder/analyser.py | 234 +++++++++++------- .../plate_girder/analysis_results.py | 20 +- .../plate_girder/plategirderbridge.py | 28 ++- 3 files changed, 191 insertions(+), 91 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 131c24015..e48eb9036 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -79,6 +79,10 @@ def __init__(self): # placeholder for self weight load case created later self.self_weight_load_case = None + # -------------------- LIVE LOAD -------------------- + self.vehicle_moving_loads_by_case: dict = {} # {case_num: [vehicle, ...]} + self.vehicle_type_map: dict = {} # {id(vehicle): vehicle_type_str} + # self.geometry = GeometryDefinitions(self.L, self.w, self.model) # -------------------- GEOMETRY / LAYOUT -------------------- @@ -1009,34 +1013,24 @@ def create_vehicle_load_cases(self, model=None): case_num = case["case_num"] combinations = case["combinations"] - for vehicle_type, coord_list in combinations.items(): + # One load case for all vehicles in this case + vehicle_summary = " + ".join( + f"{len(coord_list)}x{vehicle_type}" + for vehicle_type, coord_list in combinations.items() + ) + lc = og.create_load_case(name=f"Case{case_num} {vehicle_summary}") + for vehicle_type, coord_list in combinations.items(): for lane_index, (x_coord, z_coord) in enumerate(coord_list, start=1): - # --------------------------------------- - # Create vehicle - # --------------------------------------- vehicle_generator = og.create_load_model( model_type=vehicle_type.upper() ) vehicle = vehicle_generator.create() - - vehicle.set_global_coord( - og.Point(x_coord, 0.0, z_coord) - ) - - # --------------------------------------- - # Create load case - # --------------------------------------- - load_case_name = f"Case{case_num} {vehicle_type} L{lane_index}" - - lc = og.create_load_case(name=load_case_name) + vehicle.set_global_coord(og.Point(x_coord, 0.0, z_coord)) lc.add_load(vehicle) - model.add_load_case(lc) - - all_vehicle_load_cases.append(lc) - - # print(f"Created load case: {load_case_name}") + model.add_load_case(lc) + all_vehicle_load_cases.append(lc) self.vehicle_load_cases_list = all_vehicle_load_cases @@ -1063,76 +1057,49 @@ def add_vehicle_load_cases_from_combinations(self, model=None): # IRC 6:2017 Cl.208.3 — dynamic load allowance computed from actual span. dla = 1.0 + IRC6_2017.cl_208_3_impact_factor(self.L) # ------------------------------------------------- - # Empty lists + # Reset stores # ------------------------------------------------- self.vehicle_load_cases_list = [] - self.vehicle_moving_loads = [] + self.vehicle_moving_loads_by_case = {} + self.vehicle_type_map = {} for case in vehicle_cases: case_num = case["case_num"] combinations = case["combinations"] - for vehicle_type, coord_list in combinations.items(): + # One load case for all vehicles in this case + vehicle_summary = " + ".join( + f"{len(coord_list)}x{vehicle_type}" + for vehicle_type, coord_list in combinations.items() + ) + lc = og.create_load_case(name=f"Case{case_num} {vehicle_summary}") + self.vehicle_moving_loads_by_case[case_num] = [] + for vehicle_type, coord_list in combinations.items(): for i, (x_coord, z_coord) in enumerate(coord_list): - # ----------------------------- - # Create load case name - # ----------------------------- - lc_name = f"Case{case_num} {vehicle_type} L{i + 1}" - lc = og.create_load_case(name=lc_name) - - # ----------------------------- - # Lane factor - # ----------------------------- - if alf is None: - lane_factor = 1.0 - else: - lane_factor = alf[i] if i < len(alf) else 1.0 - - # ----------------------------- - # Create vehicle model - # ----------------------------- + # Lane factor resets per vehicle type (alf indexed within coord_list) + lane_factor = alf[i] if alf and i < len(alf) else 1.0 + vehicle_generator = og.create_load_model( model_type=vehicle_type.upper() ) - vehicle = vehicle_generator.create() + vehicle.set_global_coord(og.Point(x_coord, 0.0, z_coord)) - # ----------------------------- - # Set global coordinates - # (from vehicle_lane_coordinates) - # ----------------------------- - vehicle.set_global_coord( - og.Point(x_coord, 0.0, z_coord) - ) + lc.add_load(load=vehicle, load_factor=lane_factor) - # ----------------------------- - # Add to load case - # ----------------------------- - lc.add_load( - load=vehicle, - load_factor=lane_factor - ) + self.vehicle_moving_loads_by_case[case_num].append(vehicle) + self.vehicle_type_map[id(vehicle)] = vehicle_type - # ----------------------------- - # Add load case to model - # ----------------------------- - model.add_load_case( - lc, - load_factor=dla - ) - - # ----------------------------- - # Store references - # ----------------------------- - self.vehicle_load_cases_list.append(lc) - self.vehicle_moving_loads.append(vehicle) + model.add_load_case(lc, load_factor=dla) + self.vehicle_load_cases_list.append(lc) - # print( - # f"Created {lc_name} at x={x_coord}, z={z_coord}" - # ) + # Flat list kept for backward-compat guard checks + self.vehicle_moving_loads = [ + v for vs in self.vehicle_moving_loads_by_case.values() for v in vs + ] return self.vehicle_load_cases_list @@ -1151,8 +1118,8 @@ def create_moving_vehicle_load_cases( if model is None: raise ValueError("Model not created yet.") - if not hasattr(self, "vehicle_moving_loads") or not self.vehicle_moving_loads: - raise ValueError("No vehicle loads found. Create vehicle load cases first.") + if not getattr(self, "vehicle_moving_loads_by_case", None): + raise ValueError("No vehicle loads found. Call add_vehicle_load_cases_from_combinations() first.") span = span or self.L @@ -1168,30 +1135,129 @@ def create_moving_vehicle_load_cases( ) # ------------------------------------------------- - # Create moving load cases + # One moving load case per IRC:6 case # ------------------------------------------------- self.moving_load_cases_list = [] - for i, vehicle in enumerate(self.vehicle_moving_loads): - # Use static load case name - static_lc_name = self.vehicle_load_cases_list[i].name - - moving_name = f"Moving {static_lc_name}" + for case_num, vehicles in self.vehicle_moving_loads_by_case.items(): + moving_name = f"Moving Case{case_num}" moving_load = og.create_moving_load(name=moving_name) - moving_load.set_path(moving_path) - moving_load.add_load(vehicle) - model.add_load_case(moving_load) + for vehicle in vehicles: + moving_load.add_load(vehicle) + model.add_load_case(moving_load) self.moving_load_cases_list.append(moving_load) - # print(f"Created moving load case: {moving_name}") - return self.moving_load_cases_list + def create_governing_ll_load_case(self, dataset, model=None, load_factor: float = 1.0): + """ + Identify the governing static vehicle load case (max |Mz_i|), create a + single ``"{load_factor} LL"`` load case from it, register it with the + given load_factor, and re-run the analysis. + + Must be called after analyze() so the dataset is available. + + Parameters + ---------- + dataset : xarray.Dataset + Results from the initial analysis (returned by analyze()). + load_factor : float + ULS load factor applied to the governing LL case (default 1.0). + + Returns + ------- + xarray.Dataset + Updated results dataset that includes the new LL load case. + """ + model = model or self.model + if model is None: + raise ValueError("Model is not available.") + + all_lcs = list(dataset.coords["Loadcase"].values) + static_lcs = [lc for lc in all_lcs if str(lc).lower().startswith("case")] + + if not static_lcs: + warnings.warn("No vehicle static load cases found; skipping LL creation.") + self.ll_load_case = None + return dataset + + # Collect longitudinal girder elements only (exclude transverse slabs and edge beams) + girder_elements = [] + for member_type in ("interior_main_beam", "exterior_main_beam_1", "exterior_main_beam_2"): + try: + girder_elements.extend(model.get_element(member=member_type, options="elements")) + except Exception: + pass + girder_elements = list(set(girder_elements)) + + # Find governing LC: max |Mz_i| on girder elements + governing_lc = None + governing_val = -1.0 + + for lc in static_lcs: + try: + if girder_elements: + mz = dataset["forces"].sel(Loadcase=lc, Element=girder_elements, Component="Mz_i") + else: + mz = dataset["forces"].sel(Loadcase=lc, Component="Mz_i") + val = float(abs(mz).max()) + if val > governing_val: + governing_val = val + governing_lc = lc + except Exception: + continue + + if governing_lc is None: + warnings.warn("Could not determine governing LL case; skipping LL creation.") + self.ll_load_case = None + return dataset + + print(f"Governing LL: {governing_lc} (max |Mz_i| = {governing_val / 1000:.2f} kNm)") + + # Find the matching load case object from vehicle_load_cases_list + target_lc_obj = next( + (lc for lc in getattr(self, "vehicle_load_cases_list", []) + if lc.name == str(governing_lc)), + None, + ) + + if target_lc_obj is None: + warnings.warn(f"Load case object '{governing_lc}' not found; skipping LL creation.") + self.ll_load_case = None + return dataset + + # Build LL load case from the governing case's loads + LL = og.create_load_case(name=f"{load_factor} LL") + for entry in target_lc_obj.load_groups: + LL.add_load(entry["load"]) + + model.add_load_case(LL, load_factor=load_factor) + self.ll_load_case = LL + self.governing_ll_name = str(governing_lc) + + # Re-analyze to include LL in the results dataset. + # ospgrillage appends results for all load cases on each analyze() call, + # so deduplicate the Loadcase coordinate by keeping the first occurrence. + model.analyze() + ds = model.get_results() + + lc_vals = ds.coords["Loadcase"].values + seen: set = set() + unique_idx = [] + for i, val in enumerate(lc_vals): + if val not in seen: + seen.add(val) + unique_idx.append(i) + if len(unique_idx) < len(lc_vals): + ds = ds.isel(Loadcase=unique_idx) + + return ds + def analyze(self, model=None): model = model or self.model diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index 00f8116fc..0973887a2 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -1379,9 +1379,10 @@ def _get_vehicle_df(self, lc): - Splits each axle load equally into 2 wheel loads (L / R) - Falls back to raw point data for unrecognised vehicle types """ - moving_data = [] - total_v_audit = 0.0 - lc_name = lc.name # e.g. "Case1 Class70R L1" or "Case1 ClassA L1" + moving_data = [] + total_v_audit = 0.0 + lc_name = lc.name # e.g. "Case1" (new) or "Case1 ClassA L1" (legacy) + vehicle_type_map = getattr(self.bridge, 'vehicle_type_map', {}) for lg in lc.load_groups: load_obj = lg["load"] @@ -1395,14 +1396,23 @@ def _get_vehicle_df(self, lc): global_z = float(getattr(gc, 'z', 0.0)) # ── 2. Detect vehicle type → fetch IRC6 local geometry ──────────── + # New path: per-object lookup from analyser's vehicle_type_map + vehicle_type = vehicle_type_map.get(id(load_obj)) + # Legacy fallback: detect from LC name (old per-vehicle LC format) + if vehicle_type is None: + if 'Class70R' in lc_name: + vehicle_type = 'Class70R' + elif 'ClassA' in lc_name: + vehicle_type = 'ClassA' + irc_data = None - if 'Class70R' in lc_name: + if vehicle_type == 'Class70R': try: irc_data = IRC6_2017.cl_204_1_Class70R_vehicle_wheel() irc_data['_type'] = 'Class70R(W)' except Exception: pass - elif 'ClassA' in lc_name: + elif vehicle_type == 'ClassA': try: irc_data = IRC6_2017.cl_204_1_ClassA_vehicle() irc_data['_type'] = 'ClassA' diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 2d67bf0f5..706d787b5 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -187,6 +187,7 @@ def design(self) -> None: self.add_dead_loads() self.add_live_loads() dataset = self.analyze() + dataset = self.create_governing_ll_load_case(dataset, load_factor=1.0) sp = self.section_props sr = self.sizing_result @@ -614,8 +615,31 @@ def analyze(self): cases, indexed by Loadcase, Node/Element, and Component. """ return self.grillage_model.analyze() - - + + def create_governing_ll_load_case(self, dataset, load_factor: float = 1.0): + """ + Identify the governing static vehicle load case, create a + ``"{load_factor} LL"`` load case from it, and re-analyze. + + Must be called after analyze(). + + Parameters + ---------- + dataset : xarray.Dataset + Results from the initial analysis. + load_factor : float + ULS load factor for the governing LL case (default 1.0). + + Returns + ------- + xarray.Dataset + Updated dataset including the LL load case. + """ + return self.grillage_model.create_governing_ll_load_case( + dataset=dataset, + load_factor=load_factor, + ) + # ───────────────────────────────────────────────────────────────────────── # DCR checks # ───────────────────────────────────────────────────────────────────────── From 986140ad03eaa8ae37bc271c9ba29457bdc6800b Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Fri, 8 May 2026 06:20:27 +0530 Subject: [PATCH 211/225] fix: compute moving load path from IRC:6 vehicle length and cache deduplicated results --- .../core/bridge_types/plate_girder/analyser.py | 3 +++ .../bridge_types/plate_girder/plategirderbridge.py | 12 +++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index e48eb9036..930f019e5 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -1256,6 +1256,9 @@ def create_governing_ll_load_case(self, dataset, model=None, load_factor: float if len(unique_idx) < len(lc_vals): ds = ds.isel(Loadcase=unique_idx) + # Cache the clean dataset so get_results_dataset() returns it instead + # of calling model.get_results() which always has duplicates. + self._deduplicated_results = ds return ds def analyze(self, model=None): diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 706d787b5..6362aa2cd 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -674,9 +674,19 @@ def _run_dcr_checks(self, dataset) -> None: # ───────────────────────────────────────────────────────────────────────── def get_results_dataset(self): - """Return the xarray Dataset of analysis results.""" + """Return the xarray Dataset of analysis results. + + After create_governing_ll_load_case() runs a second analysis pass, the + raw model.get_results() contains duplicate Loadcase entries. The + deduplicated copy is cached on the grillage model and returned here so + that all downstream consumers (plot widgets, result handlers) always + see a clean, uniquely-indexed dataset. + """ if self.grillage_model.model is None: return None + cached = getattr(self.grillage_model, '_deduplicated_results', None) + if cached is not None: + return cached return self.grillage_model.model.get_results() # ───────────────────────────────────────────────────────────────────────── From 109c653f9fde10f92fac486dbb66aa0d7ef02cec Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Fri, 8 May 2026 06:23:42 +0530 Subject: [PATCH 212/225] live load and analysis pipeline updates --- .../bridge_types/plate_girder/analyser.py | 53 +++++++++++++------ .../plate_girder/plategirderbridge.py | 8 ++- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 930f019e5..50a258786 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -1103,15 +1103,39 @@ def add_vehicle_load_cases_from_combinations(self, model=None): return self.vehicle_load_cases_list + @staticmethod + def _vehicle_length(vehicle_type: str) -> float: + """ + Return the full axle-span length (m) for a vehicle type by reading the + last axle position from the IRC6_2017 local geometry. + + Class70R last axle ≈ 15.12 m, ClassA last axle ≈ 20.30 m. + Falls back to 25.0 m for unknown types. + """ + try: + if vehicle_type == 'Class70R': + data = IRC6_2017.cl_204_1_Class70R_vehicle_wheel() + elif vehicle_type == 'ClassA': + data = IRC6_2017.cl_204_1_ClassA_vehicle() + else: + return 25.0 + return float(max(data['x'])) + except Exception: + return 25.0 + def create_moving_vehicle_load_cases( self, model=None, - start_offset=-25.0, span=None, ): """ - Creates moving load cases corresponding to - previously created static vehicle load cases. + Creates moving load cases corresponding to previously created static + vehicle load cases. + + The traversal path for each case is computed from the IRC:6 vehicle + geometry: start = -vehicle_length, end = span + vehicle_length + so the vehicle fully enters and exits the bridge. Different cases + may have different vehicle types and therefore different path extents. """ model = model or self.model @@ -1123,25 +1147,24 @@ def create_moving_vehicle_load_cases( span = span or self.L - # ------------------------------------------------- - # Create moving path - # ------------------------------------------------- - start = og.create_point(x=start_offset, y=0, z=0) - end = og.Point(span, 0, 0) - - moving_path = og.create_moving_path( - start_point=start, - end_point=end - ) - # ------------------------------------------------- # One moving load case per IRC:6 case # ------------------------------------------------- self.moving_load_cases_list = [] for case_num, vehicles in self.vehicle_moving_loads_by_case.items(): - moving_name = f"Moving Case{case_num}" + # Compute the longest vehicle length in this case + max_len = max( + (self._vehicle_length(self.vehicle_type_map.get(id(v), '')) + for v in vehicles), + default=25.0, + ) + + start = og.create_point(x=-max_len, y=0, z=0) + end = og.Point(span + max_len, 0, 0) + moving_path = og.create_moving_path(start_point=start, end_point=end) + moving_name = f"Moving Case{case_num}" moving_load = og.create_moving_load(name=moving_name) moving_load.set_path(moving_path) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 6362aa2cd..d12728593 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -570,20 +570,19 @@ def add_vehicle_load_cases_from_combinations(self) -> list: def create_moving_vehicle_load_cases( self, - start_offset: float = -25.0, span: float | None = None, ) -> list: """ Create moving load cases for all vehicles previously created by add_vehicle_load_cases_from_combinations(). + The traversal path extents are derived from each vehicle's IRC:6 + length: start = -vehicle_length, end = span + vehicle_length. + Delegates to BridgeGrillageModel.create_moving_vehicle_load_cases(). Parameters ---------- - start_offset : float - Longitudinal offset (m) behind the bridge start where vehicles - begin traversal (default -25.0). span : float, optional Override the bridge span (m); defaults to the analysed span. @@ -593,7 +592,6 @@ def create_moving_vehicle_load_cases( All created moving load case objects. """ return self.grillage_model.create_moving_vehicle_load_cases( - start_offset=start_offset, span=span, ) From 1a960af5b3ae59d1916ae6f2746a0e84eacf426a Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Mon, 11 May 2026 05:16:42 +0530 Subject: [PATCH 213/225] =?UTF-8?q?implement=20wind=20load=20pipeline=20pe?= =?UTF-8?q?r=20IRC:6-2017=20Cl.209.3.3=E2=80=93209.3.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bridge_types/plate_girder/analyser.py | 232 +++++++++++++++++- .../plate_girder/plategirderbridge.py | 69 +++++- src/osdagbridge/core/utils/codes/irc6_2017.py | 172 +++++++------ 3 files changed, 374 insertions(+), 99 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 50a258786..ae85af34a 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -435,7 +435,7 @@ def create_deck_load(self, model=None, slab_thickness_m: float | None = None, def create_wearing_course_load(self, model=None, edge_clearance=0.0, thickness_m: float | None = None, density_kN_m3: float | None = None, - load_factor: float = 1.0): + partial_safety_factor: float = 1.0): """Creates wearing course load (patch). The magnitude is computed as ``thickness × ρ``. Typical bituminous @@ -497,9 +497,9 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0, point4=p4, ) - DL_overlay = og.create_load_case(name=f"{load_factor} DW") + DL_overlay = og.create_load_case(name=f"{partial_safety_factor} DW") DL_overlay.add_load(overlay) - model.add_load_case(DL_overlay, load_factor=load_factor) + model.add_load_case(DL_overlay, load_factor=partial_safety_factor) # store reference on the instance self.wearing_course_load = DL_overlay @@ -814,11 +814,217 @@ def create_median_load(self, model=None, median_load_kN_per_m: float | None = No return DL_median + # ============================================================ + # Wind Load + # ============================================================ + + def create_wind_load( + self, + model=None, + railing_height: float = 0.0, + crash_barrier_height: float = 0.0, + deck_thickness: float = 0.2, + openings_in_railing: float = 0.0, + height_for_pz: float = 10.0, + terrain: str = "plain", + basic_wind_speed: float = 33.0, + girder_section: str = "plate", + number_of_girders: int | None = None, + c_spacing: float | None = None, + b_width: float | None = None, + d_depth: float | None = None, + partial_safety_factor: float = 1.0, + ) -> dict: + """ + Creates wind load cases per IRC:6-2017 Cl.209.3.3–209.3.5 and + combines them into a single WL load case. + + Load cases created + ------------------ + ``"WL Transverse"`` : FT as a line load on the two exterior main + girder grid lines (z-direction, N/m). + ``"WL Longitudinal"`` : FL = 0.25 × FT as a patch load over the full + deck footprint (x-direction, N/m²). + ``"WL Uplift"`` : upward patch load Pz × G × CL over the full + deck footprint (−y direction, N/m²). + ``"{lf} WL"`` : combined case (all three), registered with + ``partial_safety_factor``. + + Parameters + ---------- + railing_height : float + Height of railing in metres (KEY_RAILING_HEIGHT). Use 0 when a + crash barrier is present instead. + crash_barrier_height : float + Height of crash barrier in metres. Use 0 when railing is present. + deck_thickness : float + Deck slab thickness in metres (KEY_DECK_THICKNESS). + openings_in_railing : float + Net openings in railing in metres (0 if solid). + height_for_pz : float + Height at which Pz is evaluated via Table 12 (metres). + terrain : str + ``"plain"`` or ``"obstructed"``. + basic_wind_speed : float + Basic wind speed V_b in m/s (from IRC:6-2017 Fig. 10). + girder_section : str + ``"slab"``, ``"plate"``, or ``"rolled"`` — used for CD. + number_of_girders : int, optional + Number of main girders. Defaults to the number of main girder + grid lines derived from the grillage mesh. + c_spacing : float, optional + Centre-to-centre girder spacing in metres (KEY_GIRDER_SPACING). + Required for plate girders (n ≥ 2) and rolled beams (n ≥ 2). + b_width : float, optional + Beam/box section width in metres. + d_depth : float, optional + Depth of windward girder in metres (KEY_GIRDER_DEPTH). + partial_safety_factor : float + Partial safety factor applied to the combined WL load case. + + Returns + ------- + dict + ``{"WL_T": ..., "WL_L": ..., "WL_V": ..., "WL": ...}`` + — the four ospgrillage load-case objects. + """ + model = model or self.model + if model is None: + raise ValueError("Model not created. Call create_model() first.") + + span = self.L + + # ── Resolve number of main girders from mesh when not supplied ──── + noz_all = model.Mesh_obj.noz + # Main girder positions: skip edge-beam slots (index 0 and -1) + main_noz = noz_all[1:-1] if self.edge_dist > 0 else noz_all + n_main_girders = number_of_girders or len(main_noz) + + # ── 1. IRC:6-2017 Cl.209.3.3 — transverse wind force ───────────── + ft_result = IRC6_2017.cl_209_3_3_transverse_wind_load( + span=span, + railing_height=railing_height, + crash_barrier_height=crash_barrier_height, + deck_thickness=deck_thickness, + openings_in_railing=openings_in_railing, + height_for_pz=height_for_pz, + terrain=terrain, + basic_wind_speed=basic_wind_speed, + girder_section=girder_section, + number_of_girders=n_main_girders, + c_spacing=c_spacing, + b_width=b_width, + d_depth=d_depth, + ) + + Pz = ft_result["Pz"] # N/m² + G = ft_result["G"] + FT_total = ft_result["FT"] # total transverse force (N) + + # Transverse line-load intensity (N/m) on exterior girders + FT_per_m = FT_total / span + + # Deck footprint — shared by WL_L and WL_V + deck_geom = self.load_manager.deck_load() + bridge_width = self.w or self.bridge_geometry.width + deck_area = span * bridge_width # m² + + # Longitudinal patch intensity (N/m²) — Cl.209.3.4: FL = 0.25 FT + FL_per_m2 = (0.25 * FT_total) / deck_area + + # Uplift patch intensity (N/m²) — Cl.209.3.5: FV/A = Pz × G × CL + CL = 0.75 + FV_per_m2 = Pz * G * CL # upward (applied as −y) + + print( + f"Wind loads (IRC:6-2017): Pz={Pz:.1f} N/m² " + f"FT={FT_total/1000:.2f} kN FT/m={FT_per_m/1000:.3f} kN/m " + f"FL={FL_per_m2:.4f} N/m² FV={FV_per_m2:.2f} N/m²" + ) + + # ── 2. Exterior main-girder z-positions ─────────────────────────── + # Both exterior girder lines are loaded so analysis covers wind from + # either side. + ext_z = [main_noz[0], main_noz[-1]] + + # ── Mesh grid lines (sorted) used for tributary calculations ───── + nox_sorted = sorted(model.Mesh_obj.nox) # x grid lines + noz_sorted = sorted(model.Mesh_obj.noz) # z grid lines + node_spec = model.Mesh_obj.node_spec # {tag: {"coordinate": [x,y,z]}} + + def _trib_1d(positions: list, value: float) -> float: + """Tributary half-interval for `value` inside sorted `positions`.""" + idx = min(range(len(positions)), key=lambda i: abs(positions[i] - value)) + left = (positions[idx] - positions[idx - 1]) / 2 if idx > 0 else 0.0 + right = (positions[idx + 1] - positions[idx]) / 2 if idx < len(positions) - 1 else 0.0 + return left + right + + TOL = 1e-3 # coordinate matching tolerance (m) + + # ── 3. WL Transverse — nodal Fz on exterior girder nodes ───────── + # ospgrillage's p parameter is y-direction only; horizontal wind + # must be applied as nodal forces (Fz for transverse, IRC:6 Cl.209.3.3). + WL_T = og.create_load_case(name="WL Transverse") + for z_target in ext_z: + for tag, spec in node_spec.items(): + coord = spec["coordinate"] + if abs(coord[2] - z_target) > TOL: + continue + trib_x = _trib_1d(nox_sorted, coord[0]) + Fz = FT_per_m * trib_x # N (force = intensity × tributary length) + WL_T.add_load(og.create_load( + loadtype="nodal", node_tag=tag, + Fx=0, Fy=0, Fz=Fz, Mx=0, My=0, Mz=0, + )) + model.add_load_case(WL_T) + self.wind_transverse_load_case = WL_T + + # ── 4. WL Longitudinal — nodal Fx on all deck nodes ────────────── + # FL = 0.25 FT distributed over full deck as a horizontal x-direction + # load (IRC:6 Cl.209.3.4). + WL_L = og.create_load_case(name="WL Longitudinal") + for tag, spec in node_spec.items(): + coord = spec["coordinate"] + trib_area = _trib_1d(nox_sorted, coord[0]) * _trib_1d(noz_sorted, coord[2]) + Fx = FL_per_m2 * trib_area # N (force = intensity × tributary area) + WL_L.add_load(og.create_load( + loadtype="nodal", node_tag=tag, + Fx=Fx, Fy=0, Fz=0, Mx=0, My=0, Mz=0, + )) + model.add_load_case(WL_L) + self.wind_longitudinal_load_case = WL_L + + # ── 5. WL Uplift — nodal Fy (upward, -y) on every deck node ───────── + # ospgrillage patch loads only cover nodes strictly inside the boundary; + # edge nodes may be missed. Nodal loads guarantee full coverage. + # Fy is negative (upward) per IRC:6 Cl.209.3.5: FV/A = Pz × G × CL. + WL_V = og.create_load_case(name="WL Uplift") + for tag, spec in node_spec.items(): + coord = spec["coordinate"] + trib_area = _trib_1d(nox_sorted, coord[0]) * _trib_1d(noz_sorted, coord[2]) + Fy = -FV_per_m2 * trib_area # N, negative = upward + WL_V.add_load(og.create_load( + loadtype="nodal", node_tag=tag, + Fx=0, Fy=Fy, Fz=0, Mx=0, My=0, Mz=0, + )) + model.add_load_case(WL_V) + self.wind_uplift_load_case = WL_V + + # ── 6. WL Combined ──────────────────────────────────────────────── + WL = og.create_load_case(name=f"{partial_safety_factor} WL") + for sub_lc in (WL_T, WL_L, WL_V): + for entry in sub_lc.load_groups: + WL.add_load(entry["load"]) + model.add_load_case(WL, load_factor=partial_safety_factor) + self.wind_load_case = WL + + return {"WL_T": WL_T, "WL_L": WL_L, "WL_V": WL_V, "WL": WL} + # ============================================================ # Dead Load Combination # ============================================================ - def create_dead_load_combination(self, model=None, load_factor=1.0): + def create_dead_load_combination(self, model=None, partial_safety_factor=1.0): """ Creates a single ``"DL"`` load case by adding all individual dead-load sub-case loads into it. @@ -839,7 +1045,7 @@ def create_dead_load_combination(self, model=None, load_factor=1.0): "median_load_case", ] - DL_combined = og.create_load_case(name=f"{load_factor} DL") + DL_combined = og.create_load_case(name=f"{partial_safety_factor} DL") added = False for attr in _DL_ATTRS: @@ -856,7 +1062,7 @@ def create_dead_load_combination(self, model=None, load_factor=1.0): ) return None - model.add_load_case(DL_combined, load_factor=load_factor) + model.add_load_case(DL_combined, load_factor=partial_safety_factor) self.dead_load_combination = DL_combined return DL_combined @@ -1177,11 +1383,11 @@ def create_moving_vehicle_load_cases( return self.moving_load_cases_list - def create_governing_ll_load_case(self, dataset, model=None, load_factor: float = 1.0): + def create_governing_ll_load_case(self, dataset, model=None, partial_safety_factor: float = 1.0): """ Identify the governing static vehicle load case (max |Mz_i|), create a - single ``"{load_factor} LL"`` load case from it, register it with the - given load_factor, and re-run the analysis. + single ``"{partial_safety_factor} LL"`` load case from it, register it with the + given partial_safety_factor, and re-run the analysis. Must be called after analyze() so the dataset is available. @@ -1189,8 +1395,8 @@ def create_governing_ll_load_case(self, dataset, model=None, load_factor: float ---------- dataset : xarray.Dataset Results from the initial analysis (returned by analyze()). - load_factor : float - ULS load factor applied to the governing LL case (default 1.0). + partial_safety_factor : float + ULS partial safety factor applied to the governing LL case (default 1.0). Returns ------- @@ -1255,11 +1461,11 @@ def create_governing_ll_load_case(self, dataset, model=None, load_factor: float return dataset # Build LL load case from the governing case's loads - LL = og.create_load_case(name=f"{load_factor} LL") + LL = og.create_load_case(name=f"{partial_safety_factor} LL") for entry in target_lc_obj.load_groups: LL.add_load(entry["load"]) - model.add_load_case(LL, load_factor=load_factor) + model.add_load_case(LL, load_factor=partial_safety_factor) self.ll_load_case = LL self.governing_ll_name = str(governing_lc) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index d12728593..13dde248e 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -186,8 +186,9 @@ def design(self) -> None: self.setup_grillage() self.add_dead_loads() self.add_live_loads() + self.add_wind_loads() dataset = self.analyze() - dataset = self.create_governing_ll_load_case(dataset, load_factor=1.0) + dataset = self.create_governing_ll_load_case(dataset, partial_safety_factor=1.0) sp = self.section_props sr = self.sizing_result @@ -504,12 +505,12 @@ def add_dead_loads(self) -> None: model = self.grillage_model model.create_self_weight_load() model.create_deck_load(slab_thickness_m=deck_t_m) - model.create_wearing_course_load(thickness_m=wc_t_m, density_kN_m3=wc_rho, load_factor=1.0) + model.create_wearing_course_load(thickness_m=wc_t_m, density_kN_m3=wc_rho, partial_safety_factor=1.0) model.create_footpath_load() model.create_crash_barrier_load(barrier_load_kN_per_m=barrier_load_kN_m) model.create_railing_load(railing_load_kN_per_m=railing_load_kN_m) model.create_median_load() - model.create_dead_load_combination(load_factor=1.0) + model.create_dead_load_combination(partial_safety_factor=1.0) # ───────────────────────────────────────────────────────────────────────── # Live loads — vehicle and moving loads applied after the grillage model @@ -527,6 +528,58 @@ def add_live_loads(self) -> None: model.add_vehicle_load_cases_from_combinations() model.create_moving_vehicle_load_cases() + # ───────────────────────────────────────────────────────────────────────── + # Wind loads — applied after dead and live loads, before analysis + # ───────────────────────────────────────────────────────────────────────── + + def add_wind_loads(self) -> None: + """ + Apply wind loads to the grillage model per IRC:6-2017 Cl.209.3.3–209.3.5. + + Wind parameters are read from ``self.additional_inputs`` (the + Additional Inputs dialog). Any parameter not yet supplied falls back + to a sensible default so the method is always safe to call. + + Load cases created (delegated to BridgeGrillageModel.create_wind_load): + - ``"WL Transverse"`` — FT line load on the two exterior girders + - ``"WL Longitudinal"`` — FL = 0.25 FT patch load over the full deck + - ``"WL Uplift"`` — Pz × G × CL patch load (upward) on the deck + - ``"1.0 WL"`` — combined load case with partial_safety_factor = 1.0 + """ + ai = self.additional_inputs + sp = self.section_props + sr = self.sizing_result + + # ── Wind speed / terrain ───────────────────────────────────────── + basic_wind_speed = float(ai.get("basic_wind_speed") or 33.0) + height_for_pz = float(ai.get("avg_exposed_height") or 10.0) + terrain_raw = str(ai.get("terrain_type") or "Plain Terrain") + terrain = "plain" if "plain" in terrain_raw.lower() else "obstructed" + + # ── Exposed height components ──────────────────────────────────── + railing_height = float(ai.get("railing_height") or 0.0) + crash_barrier_height = float(ai.get("crash_barrier_height") or 0.0) + deck_t_m = deck_thickness_from_inputs(ai, _DEFAULT_DECK_THICKNESS_MM) + + # ── Girder geometry for CD ─────────────────────────────────────── + d_depth = sp.get("D", 1.5) if sp else 1.5 + c_spacing = sr.girder_spacing if sr else DEFAULT_GIRDER_SPACING + n_girders = sr.no_of_girders if sr else None + + self.grillage_model.create_wind_load( + railing_height=railing_height, + crash_barrier_height=crash_barrier_height, + deck_thickness=deck_t_m, + height_for_pz=height_for_pz, + terrain=terrain, + basic_wind_speed=basic_wind_speed, + girder_section="plate", + number_of_girders=n_girders, + c_spacing=c_spacing, + d_depth=d_depth, + partial_safety_factor=1.0, + ) + def vehicle_lane_coordinates(self) -> list: """ Return vehicle-to-coordinate mappings for all IRC:6-2017 Table 6A @@ -614,10 +667,10 @@ def analyze(self): """ return self.grillage_model.analyze() - def create_governing_ll_load_case(self, dataset, load_factor: float = 1.0): + def create_governing_ll_load_case(self, dataset, partial_safety_factor: float = 1.0): """ Identify the governing static vehicle load case, create a - ``"{load_factor} LL"`` load case from it, and re-analyze. + ``"{partial_safety_factor} LL"`` load case from it, and re-analyze. Must be called after analyze(). @@ -625,8 +678,8 @@ def create_governing_ll_load_case(self, dataset, load_factor: float = 1.0): ---------- dataset : xarray.Dataset Results from the initial analysis. - load_factor : float - ULS load factor for the governing LL case (default 1.0). + partial_safety_factor : float + ULS partial safety factor for the governing LL case (default 1.0). Returns ------- @@ -635,7 +688,7 @@ def create_governing_ll_load_case(self, dataset, load_factor: float = 1.0): """ return self.grillage_model.create_governing_ll_load_case( dataset=dataset, - load_factor=load_factor, + partial_safety_factor=partial_safety_factor, ) # ───────────────────────────────────────────────────────────────────────── diff --git a/src/osdagbridge/core/utils/codes/irc6_2017.py b/src/osdagbridge/core/utils/codes/irc6_2017.py index 8f292f572..26c4c84d6 100644 --- a/src/osdagbridge/core/utils/codes/irc6_2017.py +++ b/src/osdagbridge/core/utils/codes/irc6_2017.py @@ -615,14 +615,10 @@ def table_12(height, terrain, basic_wind_speed=33): Vz_33 = V_low + ratio * (V_high - V_low) Pz_33 = P_low + ratio * (P_high - P_low) - # Apply scaling rules + # IRC:6-2017 Cl.209.2: for Vb ≠ 33 m/s, scale Table 12 values by Vb/33 (speed) and (Vb/33)² (pressure) Vb = basic_wind_speed - - # (2) Wind speed scale: Vz ∝ Vb / 33 Vz_scaled = Vz_33 * (Vb / 33) - - # (3) Wind pressure scale: Pz ∝ (Vb / 33)^2 - Pz_scaled = Pz_33 * (Vb / 33)**2 + Pz_scaled = Pz_33 * (Vb / 33) ** 2 return {"Vz": Vz_scaled, "Pz": Pz_scaled} @@ -643,112 +639,132 @@ def cl_209_3_3_transverse_wind_load( d_depth=None ): """ - Computes transverse wind force as per IRC:6-2017 Clause 209.3.3. + Computes total transverse wind force as per IRC:6-2017 Clause 209.3.3. + + Formula: FT = Pz × A1 × G × CD (in Newtons, total force) Parameters: - span (float): span in meters - railing_height (float): height of railing in m - crash_barrier_height (float): height of crash barrier in m - deck_thickness (float): thickness of deck in m - openings_in_railing (float): openings in railing in m - height_for_pz (float): height at which Pz is evaluated (Table 12) - terrain (str): "plain" or "obstructed" - basic_wind_speed (float): V_b in m/s - girder_section (str): "plate" or "rolled" - number_of_girders (int): number of girders - c_spacing (float, optional): centre-to-centre spacing for plate girders (n ≥ 2) - b_width (float, optional): width for rolled beams (for CD) - d_depth (float, optional): depth for rolled beams (for CD) + span (float): span length in metres. (KEY_SPAN) + railing_height (float): height of railing in m. (KEY_RAILING_HEIGHT) + Set to 0 if crash barrier is used instead. + crash_barrier_height (float): height of crash barrier in m. + Set to 0 if railing is used instead. + deck_thickness (float): thickness of deck slab in m. (KEY_DECK_THICKNESS) + openings_in_railing (float): net openings in railing in m (use 0 if solid/unknown). + height_for_pz (float): height at which Pz is evaluated via Table 12, in m. + terrain (str): "plain" or "obstructed". + basic_wind_speed (float): basic wind speed V_b in m/s. + girder_section (str): "slab", "plate", or "rolled". + number_of_girders (int): number of girders. (KEY_NO_OF_GIRDERS) + c_spacing (float, optional): centre-to-centre spacing of adjacent girders in m. + (KEY_GIRDER_SPACING) Required for plate girders (n≥2) and rolled beams (n≥2). + b_width (float, optional): width of beam/box section in m. + Required for rolled single and rolled multiple cases. + d_depth (float, optional): depth of windward girder in m. (KEY_GIRDER_DEPTH) + Required for all beam/girder cases except single plate. Returns: - dict: {"A1":..., "Pz":..., "G":..., "CD":..., "FT":...} + dict: {"A1": m², "Pz": N/m², "G": dimensionless, "CD": dimensionless, "FT": N} """ - # ----------------------------- - # 1. Compute A1 (solid exposed area) - # ----------------------------- - exposed_height = railing_height + crash_barrier_height + deck_thickness - openings_in_railing + # ------------------------------------------------------------------ + # 1. A1 — total projected solid area (m²) [IRC:6-2017 Cl.209.3.2] + # ------------------------------------------------------------------ + exposed_height = (max(railing_height, crash_barrier_height) + + deck_thickness - openings_in_railing) if exposed_height < 0: - exposed_height = 0 + exposed_height = 0.0 + A1 = span * exposed_height - - # ----------------------------- - # 2. Compute Pz using Table 12 scaling - # ----------------------------- + # ------------------------------------------------------------------ + # 2. Pz — design wind pressure (N/m²) from Table 12 + # ------------------------------------------------------------------ Pz = IRC6_2017.table_12(height_for_pz, terrain, basic_wind_speed)["Pz"] - A1 = exposed_height # m2 per metre length of bridge + # ------------------------------------------------------------------ + # 3. G — gust factor (= 2.0 for highway bridges with span ≤ 150 m) + # ------------------------------------------------------------------ + if span <= 150.0: + G = 2.0 + else: + raise ValueError( + "G for span > 150 m is not tabulated in IRC:6-2017 Cl.209.3.3. " + "A specialist wind study is required." + ) - # ----------------------------- - # 3. Gust factor G (IRC:6 says G = 2 for spans ≤150m) - # ----------------------------- - G = 2.0 + # ------------------------------------------------------------------ + # 4. CD — drag coefficient + # ------------------------------------------------------------------ + girder_section = girder_section.strip().lower() - # ----------------------------- - # 4. Compute Drag Coefficient CD - # ----------------------------- - girder_section = girder_section.lower() - # Case 1: Plate girder, single girder - if girder_section == "plate" and number_of_girders == 1: + # Case 0: Slab bridge (b/d ≥ 10) + if girder_section == "slab": + CD = 1.1 + + # Case 1: Single plate girder + elif girder_section == "plate" and number_of_girders == 1: CD = 2.2 - # Case 2: Plate girder, 2 or more girders + # Case 2: Two or more plate girders + # CD = 2(1 + c/20d), not more than 4.0 + # c = centre-to-centre distance of adjacent girders, d = depth of windward girder elif girder_section == "plate" and number_of_girders >= 2: if c_spacing is None or d_depth is None: - raise ValueError("For plate girders with n>=2, c_spacing and d_depth must be provided.") - ratio = c_spacing / (20 * d_depth) - if ratio < 4: - CD = 2 * (1 + ratio) - else: - CD = 2 * (1 + 4) # upper bound + raise ValueError( + "For plate girders with n >= 2, c_spacing and d_depth must be provided." + ) + CD = min(2.0 * (1.0 + c_spacing / (20.0 * d_depth)), 4.0) - # Case 3: Rolled beam, single girder + # Case 3: Single rolled beam / box girder + # CD interpolated between 1.5 (b/d=2) and 1.3 (b/d≥6) elif girder_section == "rolled" and number_of_girders == 1: if b_width is None or d_depth is None: - raise ValueError("For rolled beam girder, b_width and d_depth must be provided.") + raise ValueError( + "For a single rolled beam/box girder, b_width and d_depth must be provided." + ) bd_ratio = b_width / d_depth - - if abs(bd_ratio - 2) < 1e-6: + if bd_ratio <= 2.0: CD = 1.5 - elif bd_ratio >= 6: + elif bd_ratio >= 6.0: CD = 1.3 else: - # interpolate between 1.5 at b/d=2 and 1.3 at b/d=6 - CD = 1.5 + (bd_ratio - 2) * (1.3 - 1.5) / (6 - 2) + CD = 1.5 + (bd_ratio - 2.0) * (1.3 - 1.5) / (6.0 - 2.0) - # Case 4: Rolled beam, multiple girders + # Case 4: Two or more rolled beams / box girders + # CD = 1.5 × CD_single when clear distance / depth ≤ 7 elif girder_section == "rolled" and number_of_girders >= 2: - if c_spacing is None or d_depth is None: - raise ValueError("For multiple rolled beams, c_spacing and d_depth must be provided.") - bd_ratio = c_spacing / d_depth - - # Condition: ratio of clear distance to depth ≤ 7 - if bd_ratio <= 7: - # CD = 1.5 × (CD_single_beam) - # CD_single_beam depends on b/d ratio of single beam - if b_width is None: - raise ValueError("b_width must also be provided for multi-rolled girder case.") - + if c_spacing is None or b_width is None or d_depth is None: + raise ValueError( + "For multiple rolled beams, c_spacing, b_width, and d_depth must be provided." + ) + # Clause uses clear distance between beams (not c/c spacing) + clear_over_depth = (c_spacing - b_width) / d_depth + if clear_over_depth <= 7.0: bd_single = b_width / d_depth - if abs(bd_single - 2) < 1e-6: + if bd_single <= 2.0: CD_single = 1.5 - elif bd_single >= 6: + elif bd_single >= 6.0: CD_single = 1.3 else: - CD_single = 1.5 + (bd_single - 2) * (1.3 - 1.5) / (6 - 2) - + CD_single = 1.5 + (bd_single - 2.0) * (1.3 - 1.5) / (6.0 - 2.0) CD = 1.5 * CD_single else: - raise ValueError("c/d ratio exceeds 7 → IRC does not define CD beyond this limit.") + raise ValueError( + f"Clear distance / depth ratio ({clear_over_depth:.3f}) exceeds 7. " + "IRC:6-2017 Cl.209.3.3 does not define CD beyond this limit." + ) else: - raise ValueError("Invalid girder section input.") + raise ValueError( + f"Invalid girder_section '{girder_section}'. " + "Expected 'slab', 'plate', or 'rolled'." + ) - # ----------------------------- - # 5. Final transverse wind force - # ----------------------------- + # ------------------------------------------------------------------ + # 5. FT — total transverse wind force (N) + # ------------------------------------------------------------------ FT = Pz * A1 * G * CD - - # Todo, check this clause also add Wind force eccentricity below slab top + + # Todo: add wind force eccentricity below slab top return { "A1": A1, "Pz": Pz, From d38885e339b654c8aa59a16331b23e77cab2b169 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Mon, 11 May 2026 01:38:42 +0530 Subject: [PATCH 214/225] feat: add standalone testing using processpool --- src/osdagbridge/core/utils/connect.py | 276 ++++++++++++++++++++++++++ 1 file changed, 276 insertions(+) create mode 100644 src/osdagbridge/core/utils/connect.py diff --git a/src/osdagbridge/core/utils/connect.py b/src/osdagbridge/core/utils/connect.py new file mode 100644 index 000000000..9e9ee5a34 --- /dev/null +++ b/src/osdagbridge/core/utils/connect.py @@ -0,0 +1,276 @@ +import os + +# Force UTF-8 encoding in all subprocesses +os.environ["PYTHONIOENCODING"] = "utf-8" + +import builtins +import contextlib +import logging +import sys +import time +from concurrent.futures import ProcessPoolExecutor +from typing import Any, Dict, List + +# Safe print wrapper to avoid Unicode crashes +_original_print = print + +def safe_print(*args, **kwargs): + + try: + _original_print(*args, **kwargs) + + except UnicodeEncodeError: + pass + +builtins.print = safe_print + +# Reconfigure Windows terminal encoding +if sys.platform.startswith("win"): + + sys.stdout.reconfigure(encoding="utf-8", errors="ignore") + sys.stderr.reconfigure(encoding="utf-8", errors="ignore") + +from osdag_core.cli import _get_output_dictionary + +from osdag_core.design_type.compression_member.compression_bolted import Compression_bolted +from osdag_core.design_type.compression_member.compression_welded import Compression_welded +from osdag_core.design_type.tension_member.tension_bolted import Tension_bolted +from osdag_core.design_type.tension_member.tension_welded import Tension_welded + +MODULE_CLASS_MAP = { + + "Tension Member Design - Bolted to End Gusset": Tension_bolted, + "Tension Member Design - Welded to End Gusset": Tension_welded, + "Struts Bolted to End Gusset": Compression_bolted, + "Struts Welded to End Gusset": Compression_welded, +} + +# OUTPUT SUPPRESSION + +@contextlib.contextmanager +def suppress_output(enabled: bool = True): + + if not enabled: + yield + return + + logging.disable(logging.CRITICAL) + + with open( + os.devnull, + "w", + encoding="utf-8", + ) as devnull: + with contextlib.redirect_stdout(devnull): + with contextlib.redirect_stderr(devnull): + yield + + logging.disable(logging.NOTSET) + +def run_calculation(design_dict: Dict[str, Any], quiet: bool = True) -> Dict[str, Any]: + + # Every subprocess needs UTF-8 again + + if sys.platform.startswith("win"): + + sys.stdout.reconfigure(encoding="utf-8", errors="ignore") + sys.stderr.reconfigure(encoding="utf-8", errors="ignore") + + with suppress_output(quiet): + + module_name = design_dict.get("Module") + module_class = MODULE_CLASS_MAP.get(module_name) + + if not module_class: + raise ValueError(f"Unsupported module type: {module_name}") + + module_instance = module_class() + module_instance.set_osdaglogger(None, None) + + validation_errors = ( + module_instance.func_for_validation(design_dict) + ) + + if validation_errors: + raise RuntimeError("Validation errors occurred during execution.") + + output_dict = _get_output_dictionary(module_instance) + + return output_dict + +def run_parallel_designs(design_dicts: List[Dict[str, Any]],quiet: bool = True) -> List[Dict[str, Any]]: + + cpu_count = os.cpu_count() or 4 + max_workers = min( + cpu_count, + len(design_dicts), + ) + + with ProcessPoolExecutor(max_workers=max_workers) as executor: + + futures = [ + executor.submit( + run_calculation, + design_dict, + quiet, + ) for design_dict in design_dicts + ] + + results = [future.result() for future in futures] + + return results + +# TENSION BOLTED + +design_dict_tension_bolted = { + "Bolt.Bolt_Hole_Type": "Standard", + "Bolt.Diameter": ["8", "10", "12", "16"], + "Bolt.Grade": ["3.6", "4.6", "4.8", "5.6"], + "Bolt.Slip_Factor": "0.3", + "Bolt.TensionType": "Pre-tensioned", + "Bolt.Type": "Bearing Bolt", + "Conn_Location": "Long Leg", + "Connector.Material": "E 165 (Fe 290)", + "Connector.Plate.Thickness_List": ["8", "10", "12"], + "Design.Design_Method": "Limit State Design", + "Detailing.Corrosive_Influences": "No", + "Detailing.Edge_type": "Sheared or hand flame cut", + "Detailing.Gap": "10", + "Load.Axial": "4", + "Material": "E 165 (Fe 290)", + "Member.Designation": [ + "40 x 25 x 3", + "40 x 25 x 4", + ], + "Member.Length": "2000", + "Member.Material": "E 165 (Fe 290)", + "Member.Profile": "Angles", + "Module": "Tension Member Design - Bolted to End Gusset", + "out_titles_status": [1, 1, 1, 1, 1], +} + +# TENSION WELDED + +design_dict_tension_welded = { + "Conn_Location": "Long Leg", + "Connector.Material": "E 165 (Fe 290)", + "Connector.Plate.Thickness_List": ["8", "10", "12"], + "Design.Design_Method": "Limit State Design", + "Load.Axial": "5", + "Material": "E 165 (Fe 290)", + "Member.Designation": [ + "20 x 20 x 3", + "25 x 25 x 3", + ], + "Member.Length": "500", + "Member.Material": "E 165 (Fe 290)", + "Member.Profile": "Angles", + "Module": "Tension Member Design - Welded to End Gusset", + "Weld.Fab": "Shop Weld", + "Weld.Material_Grade_OverWrite": "290", + "out_titles_status": [1, 1, 1, 1, 1], +} + +# STRUTS BOLTED + +design_dict_struts_bolted = { + "Bolt.Bolt_Hole_Type": "Standard", + "Bolt.Diameter": ["8", "10", "12"], + "Bolt.Grade": ["3.6", "4.6", "4.8"], + "Bolt.Slip_Factor": "0.3", + "Bolt.TensionType": "Pre-tensioned", + "Bolt.Type": "Bearing Bolt", + "Conn_Location": "Long Leg", + "Connector.Material": "E 165 (Fe 290)", + "Connector.Plate.Thickness_List": ["8", "10", "12"], + "Design.Design_Method": "Limit State Design", + "Detailing.Corrosive_Influences": "No", + "Detailing.Edge_type": "Sheared or hand flame cut", + "Detailing.Gap": "10", + "End_1": "Fixed", + "End_2": "Fixed", + "Load.Axial": "5", + "Material": "E 165 (Fe 290)", + "Member.Designation": [ + "40 x 40 x 3", + "40 x 40 x 4", + ], + "Member.Length": "2000", + "Member.Material": "E 165 (Fe 290)", + "Member.Profile": "Angles", + "Module": "Struts Bolted to End Gusset", + "is_leg_loaded": "Yes", +} + +# STRUTS WELDED + +design_dict_struts_welded = { + " In_Plane": "1.0", + " Out_of_Plane": "1.0", + "Bolt.Number": "1.0", + "Conn_Location": "Long Leg", + "Connector.Plate.Thickness_List": "8", + "Design.Design_Method": "Limit State Design", + "Effective.Area_Para": "1.0", + "End_1": "Fixed", + "End_2": "Fixed", + "Load.Axial": "9", + "Load.Type": "Concentric Load", + "Material": "E 165 (Fe 290)", + "Member.Designation": [ + "25 x 25 x 3", + "40 x 40 x 3", + ], + "Member.Length": "900", + "Member.Material": "E 165 (Fe 290)", + "Member.Profile": "Angles", + "Module": "Struts Welded to End Gusset", + "Optimum.AllowUR": "1.0", + "Weld.Fab": "Shop Weld", + "Weld.Material_Grade_OverWrite": "290", + "out_titles_status": [1, 1, 1, 1, 1], +} + +# STANDALONE TESTING + +if __name__ == "__main__": + """ + Standalone testing: + Runs 10 parallel Osdag designs + using ProcessPoolExecutor + """ + + design_dicts = [ + design_dict_tension_bolted, + design_dict_tension_welded, + design_dict_struts_bolted, + design_dict_struts_welded, + design_dict_tension_bolted, + design_dict_tension_welded, + design_dict_struts_bolted, + design_dict_struts_welded, + design_dict_tension_bolted, + design_dict_struts_welded, + ] + + start_time = time.perf_counter() + results = run_parallel_designs(design_dicts, quiet=True) + end_time = time.perf_counter() + total_time = end_time - start_time + + print("\nParallel execution completed\n") + + print(f"Total designs : {len(results)}") + + print(f"Execution time: {total_time:.4f} seconds") + + print(f"Average/design: " + f"{total_time / len(results):.4f} seconds") + + print("\nSample outputs:\n") + + for index, result in enumerate(results): + + print(f"\nDesign {index + 1}:\n") + + print(result) From 2550d41933158f767355ebce684ad54df321a042 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Mon, 11 May 2026 01:52:52 +0530 Subject: [PATCH 215/225] Cleanup code(remove whitespace and trailing lines) --- src/osdagbridge/core/utils/connect.py | 53 ++++----------------------- 1 file changed, 8 insertions(+), 45 deletions(-) diff --git a/src/osdagbridge/core/utils/connect.py b/src/osdagbridge/core/utils/connect.py index 9e9ee5a34..5ebc3a9fd 100644 --- a/src/osdagbridge/core/utils/connect.py +++ b/src/osdagbridge/core/utils/connect.py @@ -15,10 +15,8 @@ _original_print = print def safe_print(*args, **kwargs): - try: _original_print(*args, **kwargs) - except UnicodeEncodeError: pass @@ -26,7 +24,6 @@ def safe_print(*args, **kwargs): # Reconfigure Windows terminal encoding if sys.platform.startswith("win"): - sys.stdout.reconfigure(encoding="utf-8", errors="ignore") sys.stderr.reconfigure(encoding="utf-8", errors="ignore") @@ -38,7 +35,6 @@ def safe_print(*args, **kwargs): from osdag_core.design_type.tension_member.tension_welded import Tension_welded MODULE_CLASS_MAP = { - "Tension Member Design - Bolted to End Gusset": Tension_bolted, "Tension Member Design - Welded to End Gusset": Tension_welded, "Struts Bolted to End Gusset": Compression_bolted, @@ -46,21 +42,15 @@ def safe_print(*args, **kwargs): } # OUTPUT SUPPRESSION - @contextlib.contextmanager def suppress_output(enabled: bool = True): - if not enabled: yield return logging.disable(logging.CRITICAL) - with open( - os.devnull, - "w", - encoding="utf-8", - ) as devnull: + with open(os.devnull, "w", encoding="utf-8") as devnull: with contextlib.redirect_stdout(devnull): with contextlib.redirect_stderr(devnull): yield @@ -68,16 +58,12 @@ def suppress_output(enabled: bool = True): logging.disable(logging.NOTSET) def run_calculation(design_dict: Dict[str, Any], quiet: bool = True) -> Dict[str, Any]: - # Every subprocess needs UTF-8 again - if sys.platform.startswith("win"): - sys.stdout.reconfigure(encoding="utf-8", errors="ignore") sys.stderr.reconfigure(encoding="utf-8", errors="ignore") with suppress_output(quiet): - module_name = design_dict.get("Module") module_class = MODULE_CLASS_MAP.get(module_name) @@ -87,9 +73,7 @@ def run_calculation(design_dict: Dict[str, Any], quiet: bool = True) -> Dict[str module_instance = module_class() module_instance.set_osdaglogger(None, None) - validation_errors = ( - module_instance.func_for_validation(design_dict) - ) + validation_errors = module_instance.func_for_validation(design_dict) if validation_errors: raise RuntimeError("Validation errors occurred during execution.") @@ -98,30 +82,20 @@ def run_calculation(design_dict: Dict[str, Any], quiet: bool = True) -> Dict[str return output_dict -def run_parallel_designs(design_dicts: List[Dict[str, Any]],quiet: bool = True) -> List[Dict[str, Any]]: - +def run_parallel_designs(design_dicts: List[Dict[str, Any]], quiet: bool = True) -> List[Dict[str, Any]]: cpu_count = os.cpu_count() or 4 - max_workers = min( - cpu_count, - len(design_dicts), - ) + max_workers = min(cpu_count, len(design_dicts)) with ProcessPoolExecutor(max_workers=max_workers) as executor: - futures = [ - executor.submit( - run_calculation, - design_dict, - quiet, - ) for design_dict in design_dicts + executor.submit(run_calculation, design_dict, quiet) + for design_dict in design_dicts ] - results = [future.result() for future in futures] return results # TENSION BOLTED - design_dict_tension_bolted = { "Bolt.Bolt_Hole_Type": "Standard", "Bolt.Diameter": ["8", "10", "12", "16"], @@ -150,7 +124,6 @@ def run_parallel_designs(design_dicts: List[Dict[str, Any]],quiet: bool = True) } # TENSION WELDED - design_dict_tension_welded = { "Conn_Location": "Long Leg", "Connector.Material": "E 165 (Fe 290)", @@ -172,7 +145,6 @@ def run_parallel_designs(design_dicts: List[Dict[str, Any]],quiet: bool = True) } # STRUTS BOLTED - design_dict_struts_bolted = { "Bolt.Bolt_Hole_Type": "Standard", "Bolt.Diameter": ["8", "10", "12"], @@ -203,7 +175,6 @@ def run_parallel_designs(design_dicts: List[Dict[str, Any]],quiet: bool = True) } # STRUTS WELDED - design_dict_struts_welded = { " In_Plane": "1.0", " Out_of_Plane": "1.0", @@ -232,7 +203,6 @@ def run_parallel_designs(design_dicts: List[Dict[str, Any]],quiet: bool = True) } # STANDALONE TESTING - if __name__ == "__main__": """ Standalone testing: @@ -259,18 +229,11 @@ def run_parallel_designs(design_dicts: List[Dict[str, Any]],quiet: bool = True) total_time = end_time - start_time print("\nParallel execution completed\n") - print(f"Total designs : {len(results)}") - print(f"Execution time: {total_time:.4f} seconds") - - print(f"Average/design: " - f"{total_time / len(results):.4f} seconds") - + print(f"Average/design: {total_time / len(results):.4f} seconds") print("\nSample outputs:\n") for index, result in enumerate(results): - print(f"\nDesign {index + 1}:\n") - - print(result) + print(result) \ No newline at end of file From 165bad1dfe7439f195b3131b76f342024101c59f Mon Sep 17 00:00:00 2001 From: kavish1919 Date: Mon, 13 Apr 2026 21:02:22 +0530 Subject: [PATCH 216/225] Implement IFC Export with Meter-scale synchronization and dependency updates --- pyproject.toml | 1 + requirements.txt | 6 +- .../bridge_cad_extraction.py | 329 ++++++++++++++++++ .../bridge_geometry_mapper.py | 166 +++++++++ .../ifc_export_bridge/bridge_ifc_generator.py | 192 ++++++++++ .../ifc_export_bridge/export_ifc_handler.py | 40 +++ src/osdagbridge/desktop/ui/template_page.py | 106 ++++++ 7 files changed, 838 insertions(+), 2 deletions(-) create mode 100644 src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py create mode 100644 src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py create mode 100644 src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py create mode 100644 src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py diff --git a/pyproject.toml b/pyproject.toml index 3e1744125..5aea46e70 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,7 @@ dependencies = [ "pyyaml>=6.0", "pydantic>=2.0", "matplotlib>=3.5", + "ifcopenshell", ] # ------------------------------ diff --git a/requirements.txt b/requirements.txt index 441bc96d5..5dd555b18 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,4 @@ -# Primary GUI dependency -PySide6>=6.5.0 \ No newline at end of file +# Primary GUI and calculation dependencies +PySide6>=6.5.0 +numpy>=1.21.0 +ifcopenshell \ No newline at end of file diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py b/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py new file mode 100644 index 000000000..0a30c17a2 --- /dev/null +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py @@ -0,0 +1,329 @@ +""" +Plate Girder Bridge - CAD to IFC Data Extraction Pipeline +Translates PlateGirderCADGenerator UI configurations into parametric dicts/objects. +""" +import math +import numpy as np + +class ExtractedObject: + """A generic mock object to hold geometric parameters for the GeometryMapper.""" + def __init__(self, obj_class, **kwargs): + self._class_name = obj_class + for k, v in kwargs.items(): + setattr(self, k, v) + +class PlateGirderIFCExtractor: + """ + Extracts structural objects parametrically. Reconstructs locations + to bypass native OpenCASCADE B-Rep tessellation for cleaner IFC output. + """ + def __init__(self, cad_generator): + self.cad = cad_generator + + def _calculate_skew_offset(self, lateral_position, reference_position=0): + if self.cad.skew_angle == 0: + return 0.0 + skew_rad = math.radians(self.cad.skew_angle) + return (lateral_position - reference_position) * math.tan(skew_rad) + + def extract(self): + return { + "girders": self._extract_girders(), + "stiffeners": self._extract_stiffeners(), + "cross_bracings": self._extract_cross_bracings(), + "deck_slab": self._extract_deck_slab(), + "crash_barriers": self._extract_safety_components(), + "supports": self._extract_supports() + } + + def _extract_girders(self): + girders = [] + total_width = (self.cad.num_girders - 1) * self.cad.girder_spacing + d = self.cad.girder_section_d + tw = self.cad.girder_section_tw + L = self.cad.span_length_L + + for i in range(self.cad.num_girders): + y_offset = (i * self.cad.girder_spacing) - (total_width / 2) + x_offset = self._calculate_skew_offset(y_offset) + + # Girders span along +X global vector + uDir = [1, 0, 0] # Z extrusion direction + wDir = [0, 1, 0] # X axis direction for Profile + # Thus Profile spans Local X (global Y) and Local Y (global Z) + + # Web + girders.append(ExtractedObject( + "Plate", T=tw, L=d, W=L, + origin=[x_offset, y_offset, 0], uDir=uDir, wDir=wDir, ifc_name=f"Girder Web {i+1}" + )) + + # Top Flange + girders.append(ExtractedObject( + "Plate", + T=self.cad.girder_section_bf, L=self.cad.girder_section_tf, W=L, + origin=[x_offset, y_offset, (d + self.cad.girder_section_tf) / 2], + uDir=uDir, wDir=wDir, ifc_name=f"Top Flange {i+1}" + )) + + # Bottom Flange + girders.append(ExtractedObject( + "Plate", + T=self.cad.girder_section_bf_b, L=self.cad.girder_section_tf_b, W=L, + origin=[x_offset, y_offset, -(d + self.cad.girder_section_tf_b) / 2], + uDir=uDir, wDir=wDir, ifc_name=f"Bottom Flange {i+1}" + )) + + return girders + + def _extract_stiffeners(self): + stiffeners = [] + D = self.cad.girder_section_d + tw = self.cad.girder_section_tw + L = self.cad.span_length_L + B_ft = self.cad.girder_section_bf + B_fb = self.cad.girder_section_bf_b + T_es = self.cad.end_stiffener_thickness + + default_stiff_width = (min(B_ft, B_fb) - tw) / 2 + int_stiff_width = self.cad.intermediate_stiffener_outstand if self.cad.intermediate_stiffener_outstand else default_stiff_width + end_stiff_width = self.cad.end_stiffener_outstand if self.cad.end_stiffener_outstand else default_stiff_width + + END_STIFFENER_SPACING = 50.0 + end_stiffener_gap = (T_es / 2.0) + + total_width = (self.cad.num_girders - 1) * self.cad.girder_spacing + + # Stiffeners Extrude UP (global Z) alongside the web depth + # For Vertical Stiffeners: T (Profile Width) maps to local X (global X -> Thickness) + # L (Profile Height) maps to local Y (global Y -> Outstand Width) + # W (Extrusion) maps to local Z (global Z -> D) + uDir_vert = [0, 0, 1] + wDir_vert = [1, 0, 0] + + for i in range(self.cad.num_girders): + y_offset = (i * self.cad.girder_spacing) - (total_width / 2) + + # Intermediate Stiffeners + if self.cad.include_intermediate_stiffeners: + spacing = self.cad.intermediate_stiffener_spacing + num_panels = max(1, int(L // spacing)) + end_zone = end_stiffener_gap + (self.cad.num_end_stiffener_pairs - 1) * END_STIFFENER_SPACING + END_STIFFENER_SPACING + + for j in range(1, num_panels): + x_dist = j * spacing + if x_dist <= end_zone or x_dist >= (L - end_zone): continue + + x_shift = self._calculate_skew_offset(y_offset) + # Right Side Stiffener + stiffeners.append(ExtractedObject("StiffenerPlate", T=self.cad.intermediate_stiffener_thickness, L=int_stiff_width, W=D, + origin=[x_shift + x_dist, y_offset + tw/2 + int_stiff_width/2, -D/2], uDir=uDir_vert, wDir=wDir_vert, ifc_name=f"Intermediate Stiffener {i+1}")) + # Left Side Stiffener + stiffeners.append(ExtractedObject("StiffenerPlate", T=self.cad.intermediate_stiffener_thickness, L=int_stiff_width, W=D, + origin=[x_shift + x_dist, y_offset - tw/2 - int_stiff_width/2, -D/2], uDir=uDir_vert, wDir=wDir_vert, ifc_name=f"Intermediate Stiffener {i+1}")) + + # End Stiffeners + end_positions = [] + for j in range(self.cad.num_end_stiffener_pairs): + end_positions.extend([end_stiffener_gap + j * END_STIFFENER_SPACING, L - end_stiffener_gap - j * END_STIFFENER_SPACING]) + + for x_pos in end_positions: + x_shift = self._calculate_skew_offset(y_offset) + stiffeners.append(ExtractedObject("StiffenerPlate", T=T_es, L=end_stiff_width, W=D, + origin=[x_shift + x_pos, y_offset + tw/2 + end_stiff_width/2, -D/2], uDir=uDir_vert, wDir=wDir_vert, ifc_name=f"End Stiffener {i+1}")) + stiffeners.append(ExtractedObject("StiffenerPlate", T=T_es, L=end_stiff_width, W=D, + origin=[x_shift + x_pos, y_offset - tw/2 - end_stiff_width/2, -D/2], uDir=uDir_vert, wDir=wDir_vert, ifc_name=f"End Stiffener {i+1}")) + + # Longitudinal Stiffeners extrude laterally along the beam + if self.cad.include_longitudinal_stiffeners: + long_stiff_width = self.cad.longitudinal_stiffener_outstand if self.cad.longitudinal_stiffener_outstand else default_stiff_width + long_stiff_start = T_es + long_stiff_len = L - 2 * long_stiff_start + + uDir_long = [1, 0, 0] # global X + wDir_long = [0, 1, 0] # Profile local X maps to global Y + + heights = [D/2 - D/3] if self.cad.num_longitudinal_stiffeners == 1 else [D/2 - D/3, D/2 - 2*D/3] + for h in heights: + x_shift = self._calculate_skew_offset(y_offset) + # Right Side + stiffeners.append(ExtractedObject("Plate", T=long_stiff_width, L=self.cad.longitudinal_stiffener_thickness, W=long_stiff_len, + origin=[x_shift + long_stiff_start, y_offset + tw/2 + long_stiff_width/2, h], + uDir=uDir_long, wDir=wDir_long, ifc_name=f"Longitudinal Stiffener {i+1} R")) + # Left Side + stiffeners.append(ExtractedObject("Plate", T=long_stiff_width, L=self.cad.longitudinal_stiffener_thickness, W=long_stiff_len, + origin=[x_shift + long_stiff_start, y_offset - tw/2 - long_stiff_width/2, h], + uDir=uDir_long, wDir=wDir_long, ifc_name=f"Longitudinal Stiffener {i+1} L")) + + return stiffeners + + def _extract_cross_bracings(self): + braces = [] + n_internal = int(self.cad.span_length_L / self.cad.cross_bracing_spacing) - 1 + n_total = n_internal + 2 + spacing = self.cad.span_length_L / (n_total - 1) if n_total > 1 else 0 + x_positions = [i * spacing for i in range(n_total)] + total_width = (self.cad.num_girders - 1) * self.cad.girder_spacing + + depth = self.cad.girder_section_d + z_bot = -depth / 2 + z_top = depth / 2 + + def add_member(p1, p2, thickness, sec_type, dims, roll, name): + braces.append(ExtractedObject("StructuralMember", p1=p1, p2=p2, T=thickness, sec_type=sec_type, dims=dims, roll=roll, ifc_name=name)) + + def extract_bay(x, yL, yR, is_end, is_first): + x_l = x + self._calculate_skew_offset(yL) + x_r = x + self._calculate_skew_offset(yR) + x_m = x + self._calculate_skew_offset((yL + yR) / 2) + ym = (yL + yR) / 2 + + # Sub-function for type dispatch + def build_bracing(b_type, d_sec, d_dims, d_t, t_sec, t_dims, t_t, b_sec, b_dims, b_t, bracket_opt, k_top_opt): + if b_type == "X": + add_member([x_l, yL, z_top], [x_r, yR, z_bot], d_t, d_sec, d_dims, +1, "Diagonal Brace") + add_member([x_l, yL, z_bot], [x_r, yR, z_top], d_t, d_sec, d_dims, -1, "Diagonal Brace") + if bracket_opt in ("LOWER", "BOTH"): + add_member([x_l, yL, z_bot], [x_r, yR, z_bot], b_t, b_sec, b_dims, +1, "Bottom Chord") + if bracket_opt in ("UPPER", "BOTH"): + add_member([x_l, yL, z_top], [x_r, yR, z_top], t_t, t_sec, t_dims, +1, "Top Chord") + + elif b_type == "K": + add_member([x_l, yL, z_top], [x_m, ym, z_bot], d_t, d_sec, d_dims, +1, "Diagonal Brace") + add_member([x_r, yR, z_top], [x_m, ym, z_bot], d_t, d_sec, d_dims, -1, "Diagonal Brace") + add_member([x_l, yL, z_bot], [x_r, yR, z_bot], b_t, b_sec, b_dims, +1, "Bottom Chord") + if k_top_opt: + add_member([x_l, yL, z_top], [x_r, yR, z_top], t_t, t_sec, t_dims, +1, "Top Chord") + + if is_end: + base_offset = self.cad.end_diaphragm_spacing if self.cad.end_diaphragm_spacing > 0 else 200.0 + extra_offset = 300.0 * math.tan(math.radians(abs(self.cad.skew_angle))) + offset = base_offset + extra_offset + x_eff = (x + offset) if is_first else (x - offset) + x_l_eff = x_eff + self._calculate_skew_offset(yL) + x_r_eff = x_eff + self._calculate_skew_offset(yR) + + if self.cad.end_diaphragm_type == "Cross Bracing": + build_bracing(self.cad.end_diaphragm_bracing_type, self.cad.end_diaphragm_diagonal_section_type, self.cad.end_diaphragm_diagonal_section_dims, self.cad.end_diaphragm_diagonal_thickness, self.cad.end_diaphragm_top_chord_section_type, self.cad.end_diaphragm_top_chord_section_dims, self.cad.end_diaphragm_top_chord_thickness, self.cad.end_diaphragm_bottom_chord_section_type, self.cad.end_diaphragm_bottom_chord_section_dims, self.cad.end_diaphragm_bottom_chord_thickness, self.cad.x_bracket_option, self.cad.k_top_bracket) + else: # Rolled Beam / Welded Beam + d_dims = self.cad.end_diaphragm_dims + z_center = z_top - (d_dims.get("depth", 100) / 2) + add_member([x_l_eff, yL, z_center], [x_r_eff, yR, z_center], 0, self.cad.end_diaphragm_section, d_dims, +1, "End Diaphragm") + else: + build_bracing(self.cad.bracing_type, self.cad.diagonal_section_type, self.cad.diagonal_section_dims, self.cad.diagonal_thickness, self.cad.top_chord_section_type, self.cad.top_chord_section_dims, self.cad.top_chord_thickness, self.cad.bottom_chord_section_type, self.cad.bottom_chord_section_dims, self.cad.bottom_chord_thickness, self.cad.x_bracket_option, self.cad.k_top_bracket) + + for idx, x in enumerate(x_positions): + is_end = (idx == 0 or idx == len(x_positions)-1) + is_first = (idx == 0) + for i in range(self.cad.num_girders - 1): + yL = (i * self.cad.girder_spacing) - total_width / 2 + extract_bay(x, yL, yL + self.cad.girder_spacing, is_end, is_first) + + return braces + + def _extract_deck_slab(self): + L = self.cad.span_length_L + W_carriageway = self.cad.carriageway_width + T = self.cad.deck_thickness + foot_w = self.cad.footpath_width if self.cad.footpath_config != "NONE" else 0 + rail_w = self.cad.railing_width if self.cad.footpath_config != "NONE" else 0 + barrier_w = 450.0 # Approximate width of crash barrier base + + left_add = (foot_w + rail_w + barrier_w) if self.cad.footpath_config in ("LEFT", "BOTH") else barrier_w + right_add = (foot_w + rail_w + barrier_w) if self.cad.footpath_config in ("RIGHT", "BOTH") else barrier_w + + total_width = W_carriageway + left_add + right_add + + y_min = -total_width / 2 + y_max = total_width / 2 + + z_top = self.cad.girder_section_d / 2 + self.cad.girder_section_tf + z_surface = z_top + T + + # Calculate skew polygon (CCW Winding Order for solid topology) + # These points define the BOTTOM footprint of the slab (aligning with girder top flanges) + pts = [ + [self._calculate_skew_offset(y_min), y_min, z_top], # Bottom Left + [L + self._calculate_skew_offset(y_min), y_min, z_top], # Bottom Right + [L + self._calculate_skew_offset(y_max), y_max, z_top], # Top Right + [self._calculate_skew_offset(y_max), y_max, z_top] # Top Left + ] + + return [ExtractedObject("SlabPolygon", points=pts, thickness=T, ifc_name="Deck Slab")] + + def _extract_safety_components(self): + components = [] + W_carriageway = self.cad.carriageway_width + L = self.cad.span_length_L + z_base = self.cad.girder_section_d / 2 + self.cad.girder_section_tf + self.cad.deck_thickness + + foot_w = self.cad.footpath_width if self.cad.footpath_config != "NONE" else 0 + rail_w = self.cad.railing_width if self.cad.footpath_config != "NONE" else 0 + barrier_w = 450.0 + + left_add = (foot_w + rail_w + barrier_w) if self.cad.footpath_config in ("LEFT", "BOTH") else barrier_w + right_add = (foot_w + rail_w + barrier_w) if self.cad.footpath_config in ("RIGHT", "BOTH") else barrier_w + + y_left_edge = -(W_carriageway/2 + left_add) + y_right_edge = (W_carriageway/2 + right_add) + + # Guard rails / Barriers + b_type = self.cad.barrier_type + sub_type = self.cad.crash_barrier_subtype + + barrier_offsets = [] + if self.cad.footpath_config in ("LEFT", "BOTH"): + barrier_offsets.append(y_left_edge + rail_w + foot_w + barrier_w/2) + else: + barrier_offsets.append(y_left_edge + barrier_w/2) + + if self.cad.footpath_config in ("RIGHT", "BOTH"): + barrier_offsets.append(y_right_edge - rail_w - foot_w - barrier_w/2) + else: + barrier_offsets.append(y_right_edge - barrier_w/2) + + for y_off in barrier_offsets: + components.append(ExtractedObject("BarrierSweep", type=b_type, subtype=sub_type, span=L, + z_base=z_base, y_offset=y_off, skew=self.cad.skew_angle, ifc_name="Crash Barrier")) + + # Median + if self.cad.enable_median: + components.append(ExtractedObject("BarrierSweep", type="Median", subtype=self.cad.median_type, span=L, + z_base=z_base, y_offset=0, skew=self.cad.skew_angle, ifc_name="Median Barrier")) + + # Railings + if self.cad.footpath_config in ("LEFT", "BOTH"): + components.append(ExtractedObject("RailingSweep", type=self.cad.railing_type, count=self.cad.rail_count, span=L, + z_base=z_base, y_offset=y_left_edge + rail_w/2, skew=self.cad.skew_angle, ifc_name="Footpath Railing")) + if self.cad.footpath_config in ("RIGHT", "BOTH"): + components.append(ExtractedObject("RailingSweep", type=self.cad.railing_type, count=self.cad.rail_count, span=L, + z_base=z_base, y_offset=y_right_edge - rail_w/2, skew=self.cad.skew_angle, ifc_name="Footpath Railing")) + + return components + + def _extract_supports(self): + supports = [] + total_width = (self.cad.num_girders - 1) * self.cad.girder_spacing + D = self.cad.girder_section_d + z_contact = -(D / 2.0 + self.cad.girder_section_tf_b) + support_width = max(self.cad.girder_section_bf, self.cad.girder_section_bf_b) + base_dim = min(0.10 * self.cad.span_length_L, 0.75 * D) + h_supp = base_dim / 1.5 + w_supp = base_dim / 2.0 + r_cyl = h_supp / 2.0 + + for i in range(self.cad.num_girders): + y_offset = (i * self.cad.girder_spacing) - (total_width / 2) + x_offset = self._calculate_skew_offset(y_offset) + + # Left Triangular Support + supports.append(ExtractedObject("StiffenerPlate", L=w_supp*2, W=h_supp, T=support_width, + origin=[x_offset + w_supp, y_offset - support_width/2, z_contact], + uDir=[0,1,0], wDir=[0,0,-1], ifc_name=f"Triangular Support {i+1}")) + + # Right Cylindrical Support + supports.append(ExtractedObject("CircularSolid", r=r_cyl, H=support_width, + origin=[x_offset + self.cad.span_length_L - r_cyl, y_offset - support_width/2, z_contact - r_cyl], + uDir=[0,1,0], wDir=[0,0,1], ifc_name=f"Cylindrical Support {i+1}")) + + return {"supports_tri": [s for s in supports if s._class_name == "StiffenerPlate"], "supports_cyl": [s for s in supports if s._class_name == "CircularSolid"]} diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py b/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py new file mode 100644 index 000000000..ca7072499 --- /dev/null +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py @@ -0,0 +1,166 @@ +""" +Bridge Geometry Mapper +Transforms generic extracted parameters into IFC4 geometry components. +Operates completely independently from the legacy Osdag general exporter. +""" +import uuid +import math +import ifcopenshell + +def create_ifc_guid(): + return ifcopenshell.guid.compress(uuid.uuid4().hex) + +class BridgeGeometryMapper: + def __init__(self, ifc_file): + self.file = ifc_file + self._context2d = self._get_or_create_context("Model", "Plan", "GeometricCurveSet") + self._context3d = self._get_or_create_context("Model", "Body", "SweptSolid") + + def _get_or_create_context(self, ctx_type, ctx_id, ctx_type_qualifier): + contexts = self.file.by_type("IfcGeometricRepresentationContext") + for ctx in contexts: + if ctx.ContextType == ctx_type and ctx.ContextIdentifier == ctx_id: + return ctx + # Create fallback contexts + return self.file.createIfcGeometricRepresentationContext( + ContextIdentifier=ctx_id, ContextType=ctx_type, CoordinateSpaceDimension=2 if ctx_type_qualifier == "GeometricCurveSet" else 3, + Precision=1e-5, WorldCoordinateSystem=self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((0.,0.,0.))) + ) + + def define_material(self, name="Steel"): + mat = self.file.createIfcMaterial(name) + return mat + + def create_cartesian_point_2d(self, x, y): + return self.file.createIfcCartesianPoint((float(x), float(y))) + + def create_cartesian_point_3d(self, x, y, z): + return self.file.createIfcCartesianPoint((float(x), float(y), float(z))) + + def create_axis2placement_3d(self, origin, z_dir=(0.,0.,1.), x_dir=(1.,0.,0.)): + pt = self.create_cartesian_point_3d(*origin) + hdr = self.file.createIfcDirection([float(v) for v in z_dir]) + xdr = self.file.createIfcDirection([float(v) for v in x_dir]) + return self.file.createIfcAxis2Placement3D(pt, hdr, xdr) + + def create_axis2placement_2d(self, origin=(0.,0.), x_dir=(1.,0.)): + pt = self.create_cartesian_point_2d(*origin) + xdr = self.file.createIfcDirection([float(v) for v in x_dir]) + return self.file.createIfcAxis2Placement2D(pt, xdr) + + # --- NATIVE PROFILE TRANSLATORS --- + + def create_rectangular_profile(self, width, height): + return self.file.createIfcRectangleProfileDef( + ProfileType="AREA", ProfileName=None, + Position=self.create_axis2placement_2d(), + XDim=float(width), YDim=float(height) + ) + + def create_l_shape_profile(self, depth, width, thickness): + return self.file.createIfcLShapeProfileDef( + ProfileType="AREA", ProfileName=None, + Position=self.create_axis2placement_2d(), + Depth=float(depth), Width=float(width), + Thickness=float(thickness), FilletRadius=None, EdgeRadius=None, + LegSlope=None + ) + + def create_c_shape_profile(self, depth, width, web_thickness, flange_thickness): + return self.file.createIfcCShapeProfileDef( + ProfileType="AREA", ProfileName=None, + Position=self.create_axis2placement_2d(), + Depth=float(depth), Width=float(width), + WallThickness=float(web_thickness), Girth=float(flange_thickness), InternalFilletRadius=None + ) + + def create_double_angle_profile(self, leg_h, leg_w, thickness, connection_type): + """Builds a composite polygonal profile for two back-to-back angles.""" + # Using a polygonal profile definition explicitly mapped from coordinates + pts = [] + if connection_type == "SHORTER_LEG": + # Mirrors around X-axis + pts = [ + (-leg_h, -thickness), (0, -thickness), (0, -leg_w), + (thickness, -leg_w), (thickness, -thickness), (thickness+leg_h, -thickness), + (thickness+leg_h, 0), (thickness, 0), (thickness, leg_w-thickness), + (0, leg_w-thickness), (0, 0), (-leg_h, 0) + ] + else: # LONGER_LEG + pts = [ + (-leg_w, -thickness), (0, -thickness), (0, -leg_h), + (thickness, -leg_h), (thickness, -thickness), (thickness+leg_w, -thickness), + (thickness+leg_w, 0), (thickness, 0), (thickness, leg_h-thickness), + (0, leg_h-thickness), (0, 0), (-leg_w, 0) + ] + + ifc_pts = [self.create_cartesian_point_2d(p[0], p[1]) for p in pts] + polyline = self.file.createIfcPolyline(ifc_pts + [ifc_pts[0]]) # Close loop + return self.file.createIfcArbitraryClosedProfileDef("AREA", "DoubleAngle", polyline) + + def create_double_channel_profile(self, depth, width, tw, tf): + """Builds a composite polygonal profile for two back-to-back channels.""" + gap = width # standard gap + pts = [ + (-width, depth/2), (0, depth/2), (0, -depth/2), (-width, -depth/2), + (-width, -depth/2+tf), (-tw, -depth/2+tf), (-tw, depth/2-tf), (-width, depth/2-tf), + # Transition to second channel via gap + (gap, depth/2-tf), (gap+tw, depth/2-tf), (gap+tw, -depth/2+tf), (gap, -depth/2+tf), + (gap, -depth/2), (gap+width, -depth/2), (gap+width, depth/2), (gap, depth/2) + ] + ifc_pts = [self.create_cartesian_point_2d(p[0], p[1]) for p in pts] + polyline = self.file.createIfcPolyline(ifc_pts + [ifc_pts[0]]) + return self.file.createIfcArbitraryClosedProfileDef("AREA", "DoubleChannel", polyline) + + def create_polygonal_profile(self, points, name="Polygon"): + """Used for custom skewed deck slabs and continuous crash barriers.""" + ifc_pts = [self.create_cartesian_point_2d(p[0], p[1]) for p in points] + polyline = self.file.createIfcPolyline(ifc_pts + [ifc_pts[0]]) + return self.file.createIfcArbitraryClosedProfileDef("AREA", name, polyline) + + # --- GEOMETRIC SOLID EXTRUSION --- + + def create_extruded_solid(self, profile, thickness, position_3d): + """ + Creates standard orthogonal extrusions (IfcExtrudedAreaSolid). + Used for regular objects. + """ + extrusion_dir = self.file.createIfcDirection((0., 0., 1.)) + return self.file.createIfcExtrudedAreaSolid( + SweptArea=profile, + Position=position_3d, + ExtrudedDirection=extrusion_dir, + Depth=float(thickness) + ) + + def create_faceted_brep_from_3d_deck(self, top_points_3d, thickness): + """ + Constructs an IfcFacetedBrep directly from 3D shear-mapped coordinates. + This provides perfect bounding for the skewed parallelograms without + relying on directional sweeps which can fail in some IFC viewers. + top_points_3d = list of (x,y,z) forming the top plane. + """ + bot_points_3d = [(p[0], p[1], p[2] - thickness) for p in top_points_3d] + + # Create IFC Cartesian Points + top_ifc_pts = [self.create_cartesian_point_3d(*p) for p in top_points_3d] + bot_ifc_pts = [self.create_cartesian_point_3d(*p) for p in bot_points_3d] + + # Build Faces (Top, Bottom, 4 Sides) + faces = [] + top_polyloop = self.file.createIfcPolyLoop(top_ifc_pts) + faces.append(self.file.createIfcFaceOuterBound(top_polyloop, True)) + + bot_polyloop = self.file.createIfcPolyLoop(list(reversed(bot_ifc_pts))) + faces.append(self.file.createIfcFaceOuterBound(bot_polyloop, True)) + + for i in range(len(top_points_3d)): + next_i = (i + 1) % len(top_points_3d) + # CCW order looking from outside: bot[i] -> bot[next] -> top[next] -> top[i] + side_pts = [bot_ifc_pts[i], bot_ifc_pts[next_i], top_ifc_pts[next_i], top_ifc_pts[i]] + side_loop = self.file.createIfcPolyLoop(side_pts) + faces.append(self.file.createIfcFaceOuterBound(side_loop, True)) + + ifc_faces = [self.file.createIfcFace([bnd]) for bnd in faces] + shell = self.file.createIfcClosedShell(ifc_faces) + return self.file.createIfcFacetedBrep(shell) diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py b/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py new file mode 100644 index 000000000..5178bd54a --- /dev/null +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py @@ -0,0 +1,192 @@ +""" +Bridge IFC Generator +Orchestrates the creation of the IFC4 file and aggregates mapped components. +""" +import uuid +import time +import ifcopenshell +from osdagbridge.core.ifc_export_bridge.bridge_geometry_mapper import BridgeGeometryMapper, create_ifc_guid + +class BridgeIfcGenerator: + def __init__(self, output_path): + self.output_path = output_path + self.file = None + self.mapper = None + self._owner_history = None + + # Spatial hierarchy elements + self.project = None + self.site = None + self.building = None + self.storey = None + + def initialize_file(self): + """Initializes empty IFC4 file with proper schema and default spatial structure.""" + stamp = int(time.time()) + self.file = ifcopenshell.file(schema="IFC4") + self.mapper = BridgeGeometryMapper(self.file) + + # Owner History + person = self.file.createIfcPerson(Identification="USER", FamilyName="Osdag", GivenName="Bridge") + org = self.file.createIfcOrganization(Identification="Osdag", Name="Osdag") + person_org = self.file.createIfcPersonAndOrganization(ThePerson=person, TheOrganization=org) + app = self.file.createIfcApplication( + ApplicationDeveloper=org, Version="1.0", ApplicationFullName="Osdag Bridge", ApplicationIdentifier="OSDAG_BRIDGE_IFC" + ) + self._owner_history = self.file.createIfcOwnerHistory( + OwningUser=person_org, OwningApplication=app, ChangeAction="ADDED", CreationDate=stamp + ) + + # Baseline spatial hierarchy + + # Unit Assignment + length_unit = self.file.createIfcSIUnit(None, "LENGTHUNIT", None, "METRE") + area_unit = self.file.createIfcSIUnit(None, "AREAUNIT", None, "SQUARE_METRE") + volume_unit = self.file.createIfcSIUnit(None, "VOLUMEUNIT", None, "CUBIC_METRE") + angle_unit = self.file.createIfcSIUnit(None, "PLANEANGLEUNIT", None, "RADIAN") + unit_assignment = self.file.createIfcUnitAssignment([length_unit, area_unit, volume_unit, angle_unit]) + + self.project = self.file.createIfcProject(create_ifc_guid(), self._owner_history, Name="Osdag Plate Girder Bridge", UnitsInContext=unit_assignment) + + # Site, Building, Storey (FacilityPart substitution for IFC4 Bridge) + place_3d = self.mapper.create_axis2placement_3d((0., 0., 0.)) + self.site = self.file.createIfcSite(create_ifc_guid(), self._owner_history, Name="Default Site", ObjectPlacement=self.file.createIfcLocalPlacement(None, place_3d)) + self.building = self.file.createIfcBuilding(create_ifc_guid(), self._owner_history, Name="Bridge Structure", ObjectPlacement=self.file.createIfcLocalPlacement(self.site.ObjectPlacement, place_3d)) + self.storey = self.file.createIfcBuildingStorey(create_ifc_guid(), self._owner_history, Name="Superstructure", ObjectPlacement=self.file.createIfcLocalPlacement(self.building.ObjectPlacement, place_3d)) + + # Relate hierarchy + self.file.createIfcRelAggregates(create_ifc_guid(), self._owner_history, RelatingObject=self.project, RelatedObjects=[self.site]) + self.file.createIfcRelAggregates(create_ifc_guid(), self._owner_history, RelatingObject=self.site, RelatedObjects=[self.building]) + self.file.createIfcRelAggregates(create_ifc_guid(), self._owner_history, RelatingObject=self.building, RelatedObjects=[self.storey]) + + def bind_element_to_storey(self, element): + self.file.createIfcRelContainedInSpatialStructure(create_ifc_guid(), self._owner_history, RelatingStructure=self.storey, RelatedElements=[element]) + + def generate_from_extracted_data(self, extracted_dict): + """Consume extracted dictionary logic and bind to schema.""" + self.initialize_file() + s = 0.001 # Global Scale Factor (Meters) + + def _process_plate(item): + prof = self.mapper.create_rectangular_profile(item.T * s, item.L * s) + scaled_origin = [v * s for v in item.origin] + place = self.mapper.create_axis2placement_3d(scaled_origin, z_dir=item.uDir, x_dir=item.wDir) + # Use identity placement for the solid relative to the object placement + local_identity = self.mapper.create_axis2placement_3d((0,0,0), z_dir=(0,0,1), x_dir=(1,0,0)) + solid = self.mapper.create_extruded_solid(prof, item.W * s, local_identity) + + shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) + prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) + elem = self.file.createIfcPlate(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) + self.bind_element_to_storey(elem) + + def _process_brace(item): + # Dynamic profile type matching + prof = None + if item.sec_type == "ANGLE": + prof = self.mapper.create_l_shape_profile(item.dims.get('leg_h', 100) * s, item.dims.get('leg_w', 50) * s, item.T * s) + elif item.sec_type == "CHANNEL": + prof = self.mapper.create_c_shape_profile(item.dims.get('depth', 100) * s, item.dims.get('flange_width', 50) * s, 5 * s, 7 * s) + elif item.sec_type == "DOUBLE_ANGLE": + prof = self.mapper.create_double_angle_profile(item.dims.get('leg_h', 100) * s, item.dims.get('leg_w', 50) * s, item.T * s, item.dims.get('connection_type', 'LONGER_LEG')) + elif item.sec_type == "DOUBLE_CHANNEL": + prof = self.mapper.create_double_channel_profile(item.dims.get('depth', 100) * s, item.dims.get('flange_width', 50) * s, 5 * s, 7 * s) + else: # I_SECTION + prof = self.mapper.create_rectangular_profile(item.dims.get('flange_width', 100) * s, item.dims.get('depth', 100) * s) # Simple default mapping + + # Extrusion vectors + import math + dx, dy, dz = item.p2[0]-item.p1[0], item.p2[1]-item.p1[1], item.p2[2]-item.p1[2] + length = math.sqrt(dx*dx + dy*dy + dz*dz) + + if length > 0: + z_dir = (dx/length, dy/length, dz/length) + else: + z_dir = (0, 0, 1) + + # Compute a robust orthogonal X axis + if abs(z_dir[2]) > 0.999: # Vertical member + x_dir = (1, 0, 0) + else: + # Cross product Z_global (0,0,1) x z_dir (dx, dy, dz) => (-dy, dx, 0) + mag_x = math.sqrt(z_dir[1]**2 + z_dir[0]**2) + x_dir = (-z_dir[1]/mag_x, z_dir[0]/mag_x, 0) + + scaled_p1 = [v * s for v in item.p1] + place = self.mapper.create_axis2placement_3d(scaled_p1, z_dir=z_dir, x_dir=x_dir) + local_identity = self.mapper.create_axis2placement_3d((0,0,0), z_dir=(0,0,1), x_dir=(1,0,0)) + solid = self.mapper.create_extruded_solid(prof, length * s, local_identity) + + shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) + prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) + elem = self.file.createIfcMember(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) + self.bind_element_to_storey(elem) + + def _process_deck(item): + # Force the thickness to 0.4 meters as requested for the viewer override + deck_height_override = 0.2 + + # Anchor at the girder top level (now scaled to Meters) + z_base = item.points[0][2] * s + + # Map the globally extracted 3D corners to a pure 2D footprint profile + pts_2d = [(p[0] * s, p[1] * s) for p in item.points] + prof = self.mapper.create_polygonal_profile(pts_2d, "DeckProfile") + + # Place the solid in world space at Z = z_base + place = self.mapper.create_axis2placement_3d((0, 0, z_base), z_dir=(0, 0, 1), x_dir=(1, 0, 0)) + local_identity = self.mapper.create_axis2placement_3d((0, 0, 0), z_dir=(0, 0, 1), x_dir=(1, 0, 0)) + + # SweptSolid uses the explicit 0.4m override + solid = self.mapper.create_extruded_solid(prof, deck_height_override, local_identity) + + shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) + prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) + elem = self.file.createIfcSlab(create_ifc_guid(), self._owner_history, Name=item.ifc_name, + ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), + Representation=prod_def) + self.bind_element_to_storey(elem) + + def _process_barrier(item): + # Force dimensions and placement to Meters + prof = self.mapper.create_rectangular_profile(450 * s, 1100 * s) + import math + x_start = item.y_offset * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + + # Hardcoded override to sit on top of the 0.4 scaled deck + # girder_top = 710mm -> 0.71m + girder_top = (item.z_base - 400.0) * s + z_fixed = girder_top + 0.4 + + # Force Barrier Sweep along Global X-axis (span line) + place = self.mapper.create_axis2placement_3d((x_start * s, item.y_offset * s, z_fixed), z_dir=[1,0,0], x_dir=[0,1,0]) + local_identity = self.mapper.create_axis2placement_3d((0,0,0), z_dir=(0,0,1), x_dir=(1,0,0)) + solid = self.mapper.create_extruded_solid(prof, item.span * s, local_identity) + + shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) + prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) + elem = self.file.createIfcWallElementedCase(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) + self.bind_element_to_storey(elem) + + # Iterate over extraction dictionary explicitly + for key in ["girders", "stiffeners"]: + for item in extracted_dict.get(key, []): + _process_plate(item) + + for key in ["cross_bracings"]: + for item in extracted_dict.get(key, []): + if item._class_name == "StructuralMember": + _process_brace(item) + + for key in ["deck_slab"]: + for item in extracted_dict.get(key, []): + if item._class_name == "SlabPolygon": + _process_deck(item) + + # for key in ["crash_barriers"]: # Safeties mapping covers crash barriers, median, railings + # for item in extracted_dict.get(key, []): + # _process_barrier(item) + + # Intentionally ignore "deck_textures" + print("Model assembly complete. Saving...") + self.file.write(self.output_path) diff --git a/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py b/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py new file mode 100644 index 000000000..02f41e6a9 --- /dev/null +++ b/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py @@ -0,0 +1,40 @@ +""" +Export Handler for Plate Girder IFC +Connects the UI export button directly to the ifc_export_bridge engine. +Runs as an isolated background task. +""" +import sys +import threading +from osdagbridge.core.ifc_export_bridge.bridge_cad_extraction import PlateGirderIFCExtractor +from osdagbridge.core.ifc_export_bridge.bridge_ifc_generator import BridgeIfcGenerator + +class PlateGirderIfcExportHandler: + """Handles the extraction and generation lifecycle of the IFC file without blocking GUI.""" + + def __init__(self, cad_generator, filepath, completion_callback=None): + self.cad_generator = cad_generator + self.filepath = filepath + self.callback = completion_callback + + def export(self): + """Extracts and Maps synchronously.""" + try: + print("Starting Data Bridging Extraction...") + extractor = PlateGirderIFCExtractor(self.cad_generator) + extracted_dict = extractor.extract() + + print("Beginning Geometric Translation and IFC Schema Construction...") + generator = BridgeIfcGenerator(self.filepath) + generator.generate_from_extracted_data(extracted_dict) + + if self.callback: + self.callback(True, f"Model successfully exported to {self.filepath}") + except Exception as e: + if self.callback: + self.callback(False, str(e)) + + def export_async(self): + """Triggers export in a background thread to keep the Qt UI responsive.""" + thread = threading.Thread(target=self.export) + thread.daemon = True + thread.start() diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 0cadd894c..5220a9cf5 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -931,10 +931,116 @@ def create_menu_bar_items(self): file_menu.addSeparator() + export_ifc_action = QAction("Export IFC", self) + export_ifc_action.setShortcut(QKeySequence("Ctrl+E")) + file_menu.addAction(export_ifc_action) + export_ifc_action.triggered.connect(self.trigger_ifc_export) + + file_menu.addSeparator() + quit_action = QAction("Quit", self) quit_action.setShortcut(QKeySequence("Shift+Q")) file_menu.addAction(quit_action) + def trigger_ifc_export(self): + from PySide6.QtWidgets import QFileDialog, QMessageBox + from osdagbridge.core.ifc_export_bridge.export_ifc_handler import PlateGirderIfcExportHandler + + # Bypass strict type check as CustomWindow instantiates FrontendData + file_path, _ = QFileDialog.getSaveFileName(self, "Export IFC Model", "PlateGirderBridge.ifc", "IFC Files (*.ifc)") + if not file_path: return + + # Map Live UI State to our standalone Exporter + class MockCAD: pass + cad = MockCAD() + inputs = self.cad_state + + # Layout & Main Dimensions + cad.span_length_L = float(inputs.get(KEY_SPAN, 25)) * 1000 + cad.num_girders = int(float(inputs.get(KEY_NO_OF_GIRDERS, 4))) + cad.girder_spacing = float(inputs.get(KEY_GIRDER_SPACING, 2.75)) * 1000 + cad.skew_angle = float(inputs.get(KEY_SKEW_ANGLE, 0)) + cad.carriageway_width = float(inputs.get(KEY_CARRIAGEWAY_WIDTH, 12)) * 1000 + cad.deck_thickness = float(inputs.get(KEY_DECK_THICKNESS, 0.4)) * 1000 + + # Girder Variables + cad.girder_section_d = float(inputs.get(KEY_GIRDER_DEPTH, 900)) + cad.girder_section_tw = float(inputs.get(KEY_GIRDER_WEB_THICKNESS, 100)) + cad.girder_section_bf = float(inputs.get(KEY_GIRDER_TOP_FLANGE_WIDTH, 500)) + cad.girder_section_tf = float(inputs.get(KEY_GIRDER_TOP_FLANGE_THICKNESS, 260)) + cad.girder_section_bf_b = float(inputs.get(KEY_GIRDER_BOTTOM_FLANGE_WIDTH, 500)) + # Default symmetric + cad.girder_section_tf_b = float(inputs.get(KEY_GIRDER_TOP_FLANGE_THICKNESS, 260)) + + # Footpaths & Median + footpath_val = inputs.get(KEY_FOOTPATH, "None") + if footpath_val == "Single Side": cad.footpath_config = "LEFT" + elif footpath_val == "Both Sides": cad.footpath_config = "BOTH" + else: cad.footpath_config = "NONE" + + cad.footpath_width = float(inputs.get(KEY_FOOTPATH_WIDTH, 1.5)) * 1000 + cad.railing_width = float(inputs.get(KEY_RAILING_WIDTH, 0.3)) * 1000 + cad.enable_median = inputs.get(KEY_INCLUDE_MEDIAN, False) + + # Standard Parametric Defaults to populate Bracing loops + cad.barrier_type = inputs.get("crash_barrier_type", "Rigid") + cad.crash_barrier_subtype = "IRC-5R" + cad.median_type = inputs.get("median_type", "Metallic Crash Barrier") + cad.rail_count = 3 + cad.railing_type = inputs.get("railing_type", "rcc") + + # Stiffener toggles + cad.include_intermediate_stiffeners = True + cad.intermediate_stiffener_spacing = 2000 + cad.intermediate_stiffener_thickness = 20 + cad.intermediate_stiffener_outstand = None + cad.num_end_stiffener_pairs = 4 + cad.end_stiffener_thickness = 30 + cad.end_stiffener_outstand = None + cad.include_longitudinal_stiffeners = True + cad.num_longitudinal_stiffeners = 2 + cad.longitudinal_stiffener_thickness = 20 + cad.longitudinal_stiffener_outstand = None + + # Cross Bracing Config + cad.cross_bracing_spacing = 4000 + cad.bracing_type = "X" + cad.x_bracket_option = "BOTH" + cad.k_top_bracket = True + cad.diagonal_section_type = "ANGLE" + cad.diagonal_section_dims = {"leg_h": 100, "leg_w": 50, "connection_type": "LONGER_LEG"} + cad.diagonal_thickness = 5 + cad.top_chord_section_type = "DOUBLE_CHANNEL" + cad.top_chord_section_dims = {"depth": 100, "flange_width": 50, "web_thickness":5, "flange_thickness":5} + cad.top_chord_thickness = 5 + cad.bottom_chord_section_type = "I_SECTION" + cad.bottom_chord_section_dims = {"depth": 100, "flange_width": 50, "web_thickness":5, "flange_thickness":5} + cad.bottom_chord_thickness = 5 + + # Diaphragm Default Config + cad.end_diaphragm_type = "Cross Bracing" + cad.end_diaphragm_spacing = 100 + cad.end_diaphragm_bracing_type = "K" + cad.end_diaphragm_diagonal_section_type = "ANGLE" + cad.end_diaphragm_diagonal_section_dims = {"leg_h": 100} + cad.end_diaphragm_diagonal_thickness = 5 + cad.end_diaphragm_top_chord_section_type = "CHANNEL" + cad.end_diaphragm_top_chord_section_dims = {} + cad.end_diaphragm_top_chord_thickness = 5 + cad.end_diaphragm_bottom_chord_section_type = "DOUBLE_ANGLE" + cad.end_diaphragm_bottom_chord_section_dims = {"connection_type": "SHORTER_LEG"} + cad.end_diaphragm_bottom_chord_thickness = 5 + + def completion_callback(success, msg): + if success: + QMessageBox.information(self, "Export Complete", msg) + else: + QMessageBox.critical(self, "Export Failed", msg) + + # Fire + handler = PlateGirderIfcExportHandler(cad, file_path, completion_callback) + handler.export_async() + # Edit Menus edit_menu = self.menu_bar.addMenu("Edit") From edd4265b05139c48c7f867cdafc15ce6b3d22ad9 Mon Sep 17 00:00:00 2001 From: kavish1919 Date: Mon, 13 Apr 2026 21:11:29 +0530 Subject: [PATCH 217/225] Add missing __init__.py for module imports --- src/osdagbridge/core/ifc_export_bridge/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/osdagbridge/core/ifc_export_bridge/__init__.py diff --git a/src/osdagbridge/core/ifc_export_bridge/__init__.py b/src/osdagbridge/core/ifc_export_bridge/__init__.py new file mode 100644 index 000000000..235771f54 --- /dev/null +++ b/src/osdagbridge/core/ifc_export_bridge/__init__.py @@ -0,0 +1,5 @@ +""" +IFC Export Bridge Module +Contains the extraction, geometry mapping, and IFC generation logic for Osdag bridges. +""" +from .export_ifc_handler import PlateGirderIfcExportHandler From 1997f66ce941bf7a75d1701c0ea2f91211c9c7dc Mon Sep 17 00:00:00 2001 From: kavish1919 Date: Thu, 7 May 2026 13:53:02 +0530 Subject: [PATCH 218/225] Saving my latest local wrapper changes --- .../bridge_cad_extraction.py | 298 +++++++++++++----- .../ifc_export_bridge/bridge_ifc_generator.py | 102 ++++-- .../ifc_export_bridge/export_ifc_handler.py | 4 + 3 files changed, 306 insertions(+), 98 deletions(-) diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py b/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py index 0a30c17a2..202c7688b 100644 --- a/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py @@ -1,10 +1,34 @@ -""" -Plate Girder Bridge - CAD to IFC Data Extraction Pipeline -Translates PlateGirderCADGenerator UI configurations into parametric dicts/objects. -""" import math import numpy as np +# Osdag Core Imports +from osdagbridge.core.utils.codes.irc5_2015 import IRC5_2015 +from osdagbridge.core.utils.common import ( + KEY_SPAN, KEY_NO_OF_GIRDERS, KEY_GIRDER_SPACING, KEY_SKEW_ANGLE, + KEY_CARRIAGEWAY_WIDTH, KEY_DECK_THICKNESS, KEY_FOOTPATH, KEY_FOOTPATH_WIDTH, + KEY_RAILING_WIDTH, KEY_INCLUDE_MEDIAN, KEY_CRASH_BARRIER_TYPE, + KEY_RIGID_CRASH_BARRIER_TYPE, KEY_METALLIC_CRASH_BARRIER_TYPE, + KEY_MEDIAN_TYPE, KEY_RAILING_TYPE, VALUES_FOOTPATH, VALUES_RAILING_TYPE +) +from osdagbridge.core.bridge_components.super_structure.deck.builder import ( + calculate_deck_width, + calculate_carriageway_center_y +) +from osdagbridge.core.utils.common import ( + DEFAULT_GIRDER_SPACING +) +from osdagbridge.core.bridge_components.super_structure.crash_barrier.builder import ( + calculate_carriageway_offset +) +from osdagbridge.core.bridge_components.super_structure.plate_girder.builder import ( + END_STIFFENER_SPACING +) +from osdagbridge.desktop.cad.irc5_geometry import ( + CrashBarrierGeometry, + MedianGeometry, + RailingGeometry +) + class ExtractedObject: """A generic mock object to hold geometric parameters for the GeometryMapper.""" def __init__(self, obj_class, **kwargs): @@ -25,26 +49,101 @@ def _calculate_skew_offset(self, lateral_position, reference_position=0): return 0.0 skew_rad = math.radians(self.cad.skew_angle) return (lateral_position - reference_position) * math.tan(skew_rad) + + def _build_design_dict(self): + """Replicates Osdag Step 6 mapping to get exact IRC 5 dimensions.""" + barrier_type_map = {"Flexible": 0, "Semi-Rigid": 1, "Rigid": 2} + barrier_idx = barrier_type_map.get(self.cad.barrier_type, 2) + + rigid_subtype_map = {"IRC-5R": 0, "High Containment": 1} + metallic_subtype_map = {"Single W-beam": 0, "Double W-beam": 1} + + railing_map = { + VALUES_RAILING_TYPE[0]: KEY_RAILING_TYPE[0], # RCC + VALUES_RAILING_TYPE[1]: KEY_RAILING_TYPE[1], # Steel + } + selected_railing_key = railing_map.get(self.cad.railing_type) + if selected_railing_key is None: + selected_railing_key = KEY_RAILING_TYPE[1] if "steel" in str(self.cad.railing_type).lower() else KEY_RAILING_TYPE[0] + + if self.cad.barrier_type != "Rigid": + selected_railing_key = KEY_RAILING_TYPE[0] + + if self.cad.barrier_type == "Rigid": + rigid_subtype_idx = rigid_subtype_map.get(self.cad.crash_barrier_subtype, 0) + design_dict = IRC5_2015.cl_109_6_3_shapes( + barrier_type=KEY_CRASH_BARRIER_TYPE[barrier_idx], + footpath=VALUES_FOOTPATH[0] if self.cad.footpath_config == "NONE" else VALUES_FOOTPATH[1], + railing_type=selected_railing_key, + design_dict={}, + crash_barrier_type=KEY_RIGID_CRASH_BARRIER_TYPE[rigid_subtype_idx] + ) + actual_base_width = design_dict.get("crash_barrier_width", 500) + else: + metallic_subtype_idx = metallic_subtype_map.get(self.cad.crash_barrier_subtype, 0) + design_dict = IRC5_2015.cl_109_6_3_shapes( + barrier_type=KEY_CRASH_BARRIER_TYPE[1], + footpath=VALUES_FOOTPATH[0] if self.cad.footpath_config == "NONE" else VALUES_FOOTPATH[1], + railing_type=selected_railing_key, + design_dict={}, + crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_idx] + ) + # Standard Osdag reserved width for crash barriers is 500mm (0.5m) + actual_base_width = design_dict.get("kerb_bottom_width", 500) + + # Standard Osdag Railing width is 375mm (0.375m) + actual_railing_width = 375 + return design_dict, actual_base_width, actual_railing_width def extract(self): + design_dict, actual_base_width, actual_railing_width = self._build_design_dict() + + # Step 1: Calculate dynamic deck width + total_width = self._calculate_total_deck_width(actual_base_width, actual_railing_width) + + # Step 2: Solve for structural girder layout + n_girders, spacing, overhang = self._solve_girder_layout(total_width) + return { - "girders": self._extract_girders(), - "stiffeners": self._extract_stiffeners(), - "cross_bracings": self._extract_cross_bracings(), - "deck_slab": self._extract_deck_slab(), - "crash_barriers": self._extract_safety_components(), - "supports": self._extract_supports() + "girders": self._extract_girders(n_girders, spacing), + "stiffeners": self._extract_stiffeners(n_girders, spacing), + "cross_bracings": self._extract_cross_bracings(n_girders, spacing), + "deck_slab": self._extract_deck_slab(total_width), + "crash_barriers": self._extract_safety_components(total_width, actual_base_width, actual_railing_width), + "supports": self._extract_supports(n_girders, spacing) } - def _extract_girders(self): + def _solve_girder_layout(self, total_width): + """ + Dynamically solves for n, spacing, and overhang based on Osdag's structural sizing rules. + OverallBridgeWidth = (n - 1) * spacing + 2 * overhang + """ + target_s = getattr(self.cad, 'girder_spacing', DEFAULT_GIRDER_SPACING * 1000) + target_o = getattr(self.cad, 'deck_overhang', target_s / 2.0) + + # Rule: n = Width / TargetSpacing (assuming overhang = spacing/2) + n = max(2, int(round(total_width / target_s))) + + # Adjust spacing and overhang to fit width exactly + # We keep overhang at target_o if possible, and solve for s + if n > 1: + actual_s = (total_width - 2 * target_o) / (n - 1) + actual_o = target_o + else: + actual_s = 0 + actual_o = total_width / 2.0 + + return n, actual_s, actual_o + + def _extract_girders(self, n_girders, spacing): girders = [] - total_width = (self.cad.num_girders - 1) * self.cad.girder_spacing + total_structural_width = (n_girders - 1) * spacing d = self.cad.girder_section_d tw = self.cad.girder_section_tw L = self.cad.span_length_L - for i in range(self.cad.num_girders): - y_offset = (i * self.cad.girder_spacing) - (total_width / 2) + for i in range(n_girders): + y_offset = (i * spacing) - (total_structural_width / 2.0) x_offset = self._calculate_skew_offset(y_offset) # Girders span along +X global vector @@ -76,7 +175,7 @@ def _extract_girders(self): return girders - def _extract_stiffeners(self): + def _extract_stiffeners(self, n_girders, spacing): stiffeners = [] D = self.cad.girder_section_d tw = self.cad.girder_section_tw @@ -89,10 +188,9 @@ def _extract_stiffeners(self): int_stiff_width = self.cad.intermediate_stiffener_outstand if self.cad.intermediate_stiffener_outstand else default_stiff_width end_stiff_width = self.cad.end_stiffener_outstand if self.cad.end_stiffener_outstand else default_stiff_width - END_STIFFENER_SPACING = 50.0 end_stiffener_gap = (T_es / 2.0) - total_width = (self.cad.num_girders - 1) * self.cad.girder_spacing + total_width = (n_girders - 1) * spacing # Stiffeners Extrude UP (global Z) alongside the web depth # For Vertical Stiffeners: T (Profile Width) maps to local X (global X -> Thickness) @@ -101,17 +199,17 @@ def _extract_stiffeners(self): uDir_vert = [0, 0, 1] wDir_vert = [1, 0, 0] - for i in range(self.cad.num_girders): - y_offset = (i * self.cad.girder_spacing) - (total_width / 2) + for i in range(n_girders): + y_offset = (i * spacing) - (total_width / 2) # Intermediate Stiffeners if self.cad.include_intermediate_stiffeners: - spacing = self.cad.intermediate_stiffener_spacing - num_panels = max(1, int(L // spacing)) + spacing_stiff = self.cad.intermediate_stiffener_spacing + num_panels = max(1, int(L // spacing_stiff)) end_zone = end_stiffener_gap + (self.cad.num_end_stiffener_pairs - 1) * END_STIFFENER_SPACING + END_STIFFENER_SPACING for j in range(1, num_panels): - x_dist = j * spacing + x_dist = j * spacing_stiff if x_dist <= end_zone or x_dist >= (L - end_zone): continue x_shift = self._calculate_skew_offset(y_offset) @@ -157,13 +255,13 @@ def _extract_stiffeners(self): return stiffeners - def _extract_cross_bracings(self): + def _extract_cross_bracings(self, n_girders, spacing): braces = [] n_internal = int(self.cad.span_length_L / self.cad.cross_bracing_spacing) - 1 n_total = n_internal + 2 - spacing = self.cad.span_length_L / (n_total - 1) if n_total > 1 else 0 - x_positions = [i * spacing for i in range(n_total)] - total_width = (self.cad.num_girders - 1) * self.cad.girder_spacing + spacing_x = self.cad.span_length_L / (n_total - 1) if n_total > 1 else 0 + x_positions = [i * spacing_x for i in range(n_total)] + total_width = (n_girders - 1) * spacing depth = self.cad.girder_section_d z_bot = -depth / 2 @@ -215,95 +313,135 @@ def build_bracing(b_type, d_sec, d_dims, d_t, t_sec, t_dims, t_t, b_sec, b_dims, for idx, x in enumerate(x_positions): is_end = (idx == 0 or idx == len(x_positions)-1) is_first = (idx == 0) - for i in range(self.cad.num_girders - 1): - yL = (i * self.cad.girder_spacing) - total_width / 2 - extract_bay(x, yL, yL + self.cad.girder_spacing, is_end, is_first) + for i in range(n_girders - 1): + yL = (i * spacing) - total_width / 2 + extract_bay(x, yL, yL + spacing, is_end, is_first) return braces - def _extract_deck_slab(self): - L = self.cad.span_length_L - W_carriageway = self.cad.carriageway_width - T = self.cad.deck_thickness - foot_w = self.cad.footpath_width if self.cad.footpath_config != "NONE" else 0 - rail_w = self.cad.railing_width if self.cad.footpath_config != "NONE" else 0 - barrier_w = 450.0 # Approximate width of crash barrier base + def _calculate_total_deck_width(self, actual_base_width, actual_railing_width): + """Replicates Osdag's CrossSectionLayout logic for total width.""" + cw = self.cad.carriageway_width + cb = actual_base_width + fp = self.cad.footpath_width + rl = actual_railing_width - left_add = (foot_w + rail_w + barrier_w) if self.cad.footpath_config in ("LEFT", "BOTH") else barrier_w - right_add = (foot_w + rail_w + barrier_w) if self.cad.footpath_config in ("RIGHT", "BOTH") else barrier_w + # Base road width + if self.cad.enable_median: + # Get median width (standard 1200mm) + median_label = "IRC 5 - Raised Kerb" # Default to fetch standard width + median_geo = MedianGeometry.get_geometry(median_label) + mw = median_geo.get("median_width", 1200) + road_width = (2 * cw) + mw + else: + road_width = cw + + # Total width = 2 * crash barriers + road_width + footpaths/railings + total = road_width + (2 * cb) - total_width = W_carriageway + left_add + right_add + if self.cad.footpath_config == "LEFT": + total += fp + rl + elif self.cad.footpath_config == "RIGHT": + total += fp + rl + elif self.cad.footpath_config == "BOTH": + total += 2 * (fp + rl) + + return total + + def _extract_deck_slab(self, total_width): + """Extract deck slab geometry with synchronized structural width.""" + L = self.cad.span_length_L + T = self.cad.deck_thickness y_min = -total_width / 2 y_max = total_width / 2 - z_top = self.cad.girder_section_d / 2 + self.cad.girder_section_tf - z_surface = z_top + T - # Calculate skew polygon (CCW Winding Order for solid topology) - # These points define the BOTTOM footprint of the slab (aligning with girder top flanges) pts = [ - [self._calculate_skew_offset(y_min), y_min, z_top], # Bottom Left - [L + self._calculate_skew_offset(y_min), y_min, z_top], # Bottom Right - [L + self._calculate_skew_offset(y_max), y_max, z_top], # Top Right - [self._calculate_skew_offset(y_max), y_max, z_top] # Top Left + [self._calculate_skew_offset(y_min), y_min, z_top], + [L + self._calculate_skew_offset(y_min), y_min, z_top], + [L + self._calculate_skew_offset(y_max), y_max, z_top], + [self._calculate_skew_offset(y_max), y_max, z_top] ] - return [ExtractedObject("SlabPolygon", points=pts, thickness=T, ifc_name="Deck Slab")] + return [ExtractedObject("SlabPolygon", points=pts, thickness=T*0.001, ifc_name="Deck Slab")] - def _extract_safety_components(self): + def _extract_safety_components(self, design_dict, actual_base_width, actual_railing_width): components = [] - W_carriageway = self.cad.carriageway_width L = self.cad.span_length_L z_base = self.cad.girder_section_d / 2 + self.cad.girder_section_tf + self.cad.deck_thickness - foot_w = self.cad.footpath_width if self.cad.footpath_config != "NONE" else 0 - rail_w = self.cad.railing_width if self.cad.footpath_config != "NONE" else 0 - barrier_w = 450.0 - - left_add = (foot_w + rail_w + barrier_w) if self.cad.footpath_config in ("LEFT", "BOTH") else barrier_w - right_add = (foot_w + rail_w + barrier_w) if self.cad.footpath_config in ("RIGHT", "BOTH") else barrier_w + total_deck_width = self._calculate_total_deck_width(actual_base_width, actual_railing_width) - y_left_edge = -(W_carriageway/2 + left_add) - y_right_edge = (W_carriageway/2 + right_add) - - # Guard rails / Barriers - b_type = self.cad.barrier_type - sub_type = self.cad.crash_barrier_subtype + # Calculate road assembly offset (same as calculate_carriageway_offset in Osdag) + carriageway_offset = 0.0 + if self.cad.footpath_config == "LEFT": + carriageway_offset = (self.cad.footpath_width + actual_railing_width) / 2.0 + elif self.cad.footpath_config == "RIGHT": + carriageway_offset = -(self.cad.footpath_width + actual_railing_width) / 2.0 + + # Internal widths + cw = self.cad.carriageway_width + cb = actual_base_width - barrier_offsets = [] + # Define Y positions for barriers (positioned at the edge of the road assembly) + y_l = -total_deck_width / 2.0 + cb / 2.0 if self.cad.footpath_config in ("LEFT", "BOTH"): - barrier_offsets.append(y_left_edge + rail_w + foot_w + barrier_w/2) - else: - barrier_offsets.append(y_left_edge + barrier_w/2) - + y_l += (self.cad.footpath_width + actual_railing_width) + + y_r = total_deck_width / 2.0 - cb / 2.0 if self.cad.footpath_config in ("RIGHT", "BOTH"): - barrier_offsets.append(y_right_edge - rail_w - foot_w - barrier_w/2) - else: - barrier_offsets.append(y_right_edge - barrier_w/2) + y_r -= (self.cad.footpath_width + actual_railing_width) - for y_off in barrier_offsets: - components.append(ExtractedObject("BarrierSweep", type=b_type, subtype=sub_type, span=L, - z_base=z_base, y_offset=y_off, skew=self.cad.skew_angle, ifc_name="Crash Barrier")) + # Map barrier types to labels for Geometry Retrieval + if self.cad.barrier_type == "Rigid": + barrier_label = "IRC 5 - High Containment RCC Crash Barrier" if self.cad.crash_barrier_subtype == "High Containment" else "IRC 5 - RCC Crash Barrier" + else: + barrier_label = "IRC 5 - Metallic Crash Barrier with Double W-Beam" if self.cad.crash_barrier_subtype == "Double W-beam" else "IRC 5 - Metallic Crash Barrier with Single W-Beam" + + barrier_geo = CrashBarrierGeometry.get_geometry(barrier_label) + + # Left barrier + components.append(ExtractedObject("BarrierSweep", type=self.cad.barrier_type, subtype=self.cad.crash_barrier_subtype, + span=L, z_base=z_base, y_offset=y_l, skew=self.cad.skew_angle, geo=barrier_geo, ifc_name="Crash Barrier L")) + # Right barrier + components.append(ExtractedObject("BarrierSweep", type=self.cad.barrier_type, subtype=self.cad.crash_barrier_subtype, + span=L, z_base=z_base, y_offset=y_r, skew=self.cad.skew_angle, geo=barrier_geo, ifc_name="Crash Barrier R")) # Median if self.cad.enable_median: + # Median is centered in the road assembly + median_y = carriageway_offset + + # Map median type to labels + if self.cad.median_type == "Raised Kerb": + median_label = "IRC 5 - Raised Kerb" + elif self.cad.median_type == "RCC Crash Barrier": + median_label = "IRC 5 - RCC Crash Barrier" + else: + median_label = "IRC 5 - Metallic Crash Barrier with Double W-Beam" if "Double" in str(self.cad.median_type) else "IRC 5 - Metallic Crash Barrier with Single W-Beam" + + median_geo = MedianGeometry.get_geometry(median_label) components.append(ExtractedObject("BarrierSweep", type="Median", subtype=self.cad.median_type, span=L, - z_base=z_base, y_offset=0, skew=self.cad.skew_angle, ifc_name="Median Barrier")) + z_base=z_base, y_offset=median_y, skew=self.cad.skew_angle, geo=median_geo, ifc_name="Median Barrier")) # Railings + railing_label = "IRC 5 - RCC Railing" if "rcc" in str(self.cad.railing_type).lower() else "IRC 5 - Steel Railing" + railing_geo = RailingGeometry.get_geometry(railing_label) if self.cad.footpath_config in ("LEFT", "BOTH"): + y_railing_left = -total_deck_width / 2.0 + actual_railing_width / 2.0 components.append(ExtractedObject("RailingSweep", type=self.cad.railing_type, count=self.cad.rail_count, span=L, - z_base=z_base, y_offset=y_left_edge + rail_w/2, skew=self.cad.skew_angle, ifc_name="Footpath Railing")) + z_base=z_base, y_offset=y_railing_left, skew=self.cad.skew_angle, geo=railing_geo, ifc_name="Footpath Railing L")) if self.cad.footpath_config in ("RIGHT", "BOTH"): + y_railing_right = total_deck_width / 2.0 - actual_railing_width / 2.0 components.append(ExtractedObject("RailingSweep", type=self.cad.railing_type, count=self.cad.rail_count, span=L, - z_base=z_base, y_offset=y_right_edge - rail_w/2, skew=self.cad.skew_angle, ifc_name="Footpath Railing")) + z_base=z_base, y_offset=y_railing_right, skew=self.cad.skew_angle, geo=railing_geo, ifc_name="Footpath Railing R")) return components - def _extract_supports(self): + def _extract_supports(self, n_girders, spacing): supports = [] - total_width = (self.cad.num_girders - 1) * self.cad.girder_spacing + total_width = (n_girders - 1) * spacing D = self.cad.girder_section_d z_contact = -(D / 2.0 + self.cad.girder_section_tf_b) support_width = max(self.cad.girder_section_bf, self.cad.girder_section_bf_b) @@ -312,8 +450,8 @@ def _extract_supports(self): w_supp = base_dim / 2.0 r_cyl = h_supp / 2.0 - for i in range(self.cad.num_girders): - y_offset = (i * self.cad.girder_spacing) - (total_width / 2) + for i in range(n_girders): + y_offset = (i * spacing) - (total_width / 2) x_offset = self._calculate_skew_offset(y_offset) # Left Triangular Support diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py b/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py index 5178bd54a..045b0230c 100644 --- a/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py @@ -66,6 +66,7 @@ def generate_from_extracted_data(self, extracted_dict): """Consume extracted dictionary logic and bind to schema.""" self.initialize_file() s = 0.001 # Global Scale Factor (Meters) + shared = {"deck_top_m": 0.0} # Shared state: deck top surface in meters def _process_plate(item): prof = self.mapper.create_rectangular_profile(item.T * s, item.L * s) @@ -123,12 +124,13 @@ def _process_brace(item): self.bind_element_to_storey(elem) def _process_deck(item): - # Force the thickness to 0.4 meters as requested for the viewer override - deck_height_override = 0.2 - - # Anchor at the girder top level (now scaled to Meters) + # Use extracted thickness + deck_thickness = getattr(item, 'thickness', 200) z_base = item.points[0][2] * s + # Store the deck top surface for barrier alignment + shared["deck_top_m"] = z_base + deck_thickness * s + # Map the globally extracted 3D corners to a pure 2D footprint profile pts_2d = [(p[0] * s, p[1] * s) for p in item.points] prof = self.mapper.create_polygonal_profile(pts_2d, "DeckProfile") @@ -137,8 +139,7 @@ def _process_deck(item): place = self.mapper.create_axis2placement_3d((0, 0, z_base), z_dir=(0, 0, 1), x_dir=(1, 0, 0)) local_identity = self.mapper.create_axis2placement_3d((0, 0, 0), z_dir=(0, 0, 1), x_dir=(1, 0, 0)) - # SweptSolid uses the explicit 0.4m override - solid = self.mapper.create_extruded_solid(prof, deck_height_override, local_identity) + solid = self.mapper.create_extruded_solid(prof, deck_thickness * s, local_identity) shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) @@ -148,24 +149,86 @@ def _process_deck(item): self.bind_element_to_storey(elem) def _process_barrier(item): - # Force dimensions and placement to Meters - prof = self.mapper.create_rectangular_profile(450 * s, 1100 * s) + geo = getattr(item, 'geo', {}) import math + + # 1. Define 2D Profile Points and Reference Width + if geo.get("type") == "rcc": + total_h = geo["total_height"] + bottom_w = geo["bottom_width"] + base_v = geo["base_vertical"] + mid_off = geo["mid_offset"] + shape_scale = bottom_w / 525.0 + right_at_mid = 300 * shape_scale + left_at_top = 50 * shape_scale + right_at_top = 225 * shape_scale + + pts_2d = [ + (0, 0), (bottom_w, 0), (bottom_w, base_v), + (right_at_mid, mid_off), (right_at_top, total_h), + (left_at_top, total_h), (0, base_v), + ] + elif geo.get("type") == "metallic": + kerb_h = geo.get("kerb_height", 150.0) + bottom_w = geo.get("median_width", geo.get("kerb_bottom_width", 550)) + kerb_top = geo.get("kerb_top_width", 500) + offset = (bottom_w - kerb_top) / 2 + pts_2d = [ + (0, 0), (bottom_w, 0), + (bottom_w - offset, kerb_h), + (offset, kerb_h), + ] + else: + # Median / Others fallback + total_h = geo.get("total_height", geo.get("kerb_height", 1100)) + bottom_w = geo.get("median_width", geo.get("bottom_width", geo.get("kerb_bottom_width", 1200))) + pts_2d = [(0, 0), (bottom_w, 0), (bottom_w, total_h), (0, total_h)] + + # 2. Apply Mirroring for Right Side (Orientation Fix) + is_right_side = item.y_offset > 0.5 + if is_right_side: + pts_2d = [(bottom_w - x, y) for x, y in pts_2d] + + # 3. Scaling and Transformation + pts_2d_m = [(x * s, y * s) for x, y in pts_2d] + x_start = item.y_offset * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + deck_top = shared["deck_top_m"] + + y_origin = item.y_offset * s - (bottom_w * s / 2.0) + scaled_origin = [x_start * s, y_origin, deck_top] + + prof = self.mapper.create_polygonal_profile(pts_2d_m, "BarrierProfile") + place = self.mapper.create_axis2placement_3d(scaled_origin, z_dir=[1,0,0], x_dir=[0,1,0]) + local_identity = self.mapper.create_axis2placement_3d((0,0,0), z_dir=(0,0,1), x_dir=(1,0,0)) + solid = self.mapper.create_extruded_solid(prof, item.span * s, local_identity) + + shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) + prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) + # Map Median to IfcWall if it's high, otherwise IfcBuildingElementProxy + elem_type = self.file.createIfcWall if item._class_name == "BarrierSweep" else self.file.createIfcBuildingElementProxy + elem = elem_type(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) + self.bind_element_to_storey(elem) + + def _process_railing(item): + geo = getattr(item, 'geo', {}) + import math - # Hardcoded override to sit on top of the 0.4 scaled deck - # girder_top = 710mm -> 0.71m - girder_top = (item.z_base - 400.0) * s - z_fixed = girder_top + 0.4 + rail_w = geo.get("width", 375) + rail_h = geo.get("height", 1100) + prof = self.mapper.create_rectangular_profile(rail_w * s, rail_h * s) - # Force Barrier Sweep along Global X-axis (span line) - place = self.mapper.create_axis2placement_3d((x_start * s, item.y_offset * s, z_fixed), z_dir=[1,0,0], x_dir=[0,1,0]) + x_start = item.y_offset * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + deck_top = shared["deck_top_m"] + + scaled_origin = [x_start * s, item.y_offset * s, deck_top + rail_h * s / 2.0] + place = self.mapper.create_axis2placement_3d(scaled_origin, z_dir=[1,0,0], x_dir=[0,1,0]) local_identity = self.mapper.create_axis2placement_3d((0,0,0), z_dir=(0,0,1), x_dir=(1,0,0)) solid = self.mapper.create_extruded_solid(prof, item.span * s, local_identity) shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) - elem = self.file.createIfcWallElementedCase(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) + elem = self.file.createIfcRailing(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) self.bind_element_to_storey(elem) # Iterate over extraction dictionary explicitly @@ -183,9 +246,12 @@ def _process_barrier(item): if item._class_name == "SlabPolygon": _process_deck(item) - # for key in ["crash_barriers"]: # Safeties mapping covers crash barriers, median, railings - # for item in extracted_dict.get(key, []): - # _process_barrier(item) + for key in ["crash_barriers"]: + for item in extracted_dict.get(key, []): + if item._class_name == "BarrierSweep": + _process_barrier(item) + elif item._class_name == "RailingSweep": + _process_railing(item) # Intentionally ignore "deck_textures" print("Model assembly complete. Saving...") diff --git a/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py b/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py index 02f41e6a9..b88dfc1d0 100644 --- a/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py +++ b/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py @@ -30,6 +30,10 @@ def export(self): if self.callback: self.callback(True, f"Model successfully exported to {self.filepath}") except Exception as e: + import traceback + error_msg = traceback.format_exc() + with open(r"c:\Users\Pyramid\Desktop\OsdagBridgeDev\OsdagBridge\src\osdagbridge\core\ifc_export_bridge\ifc_export_error.txt", "w") as f: + f.write(error_msg) if self.callback: self.callback(False, str(e)) From 9e8fc95de5fb44c6715ca09d76b7a79365af815e Mon Sep 17 00:00:00 2001 From: kavish1919 Date: Mon, 11 May 2026 21:04:21 +0530 Subject: [PATCH 219/225] Implemented IFC wrapper updates --- pyproject.toml | 1 - .../plate_girder/cad_generator.py | 4 + .../core/bridge_types/plate_girder/dto.py | 4 + .../plate_girder/plategirderbridge.py | 7 + .../bridge_cad_extraction.py | 24 +- .../bridge_geometry_mapper.py | 123 +++-- .../ifc_export_bridge/bridge_ifc_generator.py | 491 +++++++++++++++--- .../ifc_export_bridge/export_ifc_handler.py | 4 +- .../core/ifc_export_bridge/metadata_mapper.py | 279 ++++++++++ .../desktop/ui/dialogs/additional_inputs.py | 2 +- .../desktop/ui/docks/input_dock.py | 12 + src/osdagbridge/desktop/ui/template_page.py | 251 +++++---- 12 files changed, 979 insertions(+), 223 deletions(-) create mode 100644 src/osdagbridge/core/ifc_export_bridge/metadata_mapper.py diff --git a/pyproject.toml b/pyproject.toml index 5aea46e70..1b35bf5cc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -104,4 +104,3 @@ testpaths = [ "tests" ] - diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 073c40672..d6066adee 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -139,6 +139,10 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.component = None def _set_parameters(self, design_params: BridgeParametersDTO): + # MATERIAL GRADES + self.steel_grade = design_params.steel_grade + self.concrete_grade = design_params.concrete_grade + # GIRDER PARAMETERS self.span_length_L = design_params.span_length_L self.girder_section_d = design_params.girder_section_d diff --git a/src/osdagbridge/core/bridge_types/plate_girder/dto.py b/src/osdagbridge/core/bridge_types/plate_girder/dto.py index 1c3fdc79b..019da38c6 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/dto.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/dto.py @@ -286,6 +286,10 @@ class GirderSegmentDTO: @dataclass class BridgeParametersDTO: + # --- Material Grades --- + steel_grade: str + concrete_grade: str + # --- Girder --- span_length_L: float girder_section_d: float diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 13dde248e..46fd1814b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -840,7 +840,14 @@ def get_3d_cad_parameters(self) -> BridgeParametersDTO: _angle_dims = SectionDimsDTO(leg_h=100, leg_w=50, connection_type="LONGER_LEG") _small_dims = SectionDimsDTO(leg_h=80, leg_w=40, connection_type="LONGER_LEG") + steel_grade = str(self.basic_inputs.get(KEY_GIRDER, "E 250A")).strip() + concrete_grade = str(self.basic_inputs.get(KEY_DECK_CONCRETE_GRADE_BASIC, "M30")).strip() + return BridgeParametersDTO( + # --- Material Grades --- + steel_grade=steel_grade, + concrete_grade=concrete_grade, + # --- Girder --- span_length_L=span_mm, girder_section_d=D, diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py b/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py index 202c7688b..e749af8d8 100644 --- a/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py @@ -364,7 +364,7 @@ def _extract_deck_slab(self, total_width): [self._calculate_skew_offset(y_max), y_max, z_top] ] - return [ExtractedObject("SlabPolygon", points=pts, thickness=T*0.001, ifc_name="Deck Slab")] + return [ExtractedObject("SlabPolygon", points=pts, thickness=T, ifc_name="Deck Slab")] def _extract_safety_components(self, design_dict, actual_base_width, actual_railing_width): components = [] @@ -394,9 +394,14 @@ def _extract_safety_components(self, design_dict, actual_base_width, actual_rail y_r -= (self.cad.footpath_width + actual_railing_width) # Map barrier types to labels for Geometry Retrieval - if self.cad.barrier_type == "Rigid": + # UI stores the full IRC label directly (e.g., "IRC 5 - RCC Crash Barrier") + # Support both full IRC labels (new) and legacy short names (old) + bt = str(self.cad.barrier_type) + if bt.startswith("IRC 5"): + barrier_label = bt # Already a full IRC label from the UI + elif bt == "Rigid": barrier_label = "IRC 5 - High Containment RCC Crash Barrier" if self.cad.crash_barrier_subtype == "High Containment" else "IRC 5 - RCC Crash Barrier" - else: + else: # Legacy "Flexible" / "Semi-Rigid" / "Metallic" barrier_label = "IRC 5 - Metallic Crash Barrier with Double W-Beam" if self.cad.crash_barrier_subtype == "Double W-beam" else "IRC 5 - Metallic Crash Barrier with Single W-Beam" barrier_geo = CrashBarrierGeometry.get_geometry(barrier_label) @@ -414,12 +419,19 @@ def _extract_safety_components(self, design_dict, actual_base_width, actual_rail median_y = carriageway_offset # Map median type to labels - if self.cad.median_type == "Raised Kerb": + # UI stores the full IRC label directly (e.g., "IRC 5 - Raised Kerb") + # Support both full IRC labels (new) and legacy short names (old) + mt = str(self.cad.median_type) + if mt.startswith("IRC 5"): + median_label = mt # Already a full IRC label from the UI + elif mt == "Raised Kerb": median_label = "IRC 5 - Raised Kerb" - elif self.cad.median_type == "RCC Crash Barrier": + elif mt == "RCC Crash Barrier": median_label = "IRC 5 - RCC Crash Barrier" + elif "Double" in mt: + median_label = "IRC 5 - Metallic Crash Barrier with Double W-Beam" else: - median_label = "IRC 5 - Metallic Crash Barrier with Double W-Beam" if "Double" in str(self.cad.median_type) else "IRC 5 - Metallic Crash Barrier with Single W-Beam" + median_label = "IRC 5 - Metallic Crash Barrier with Single W-Beam" median_geo = MedianGeometry.get_geometry(median_label) components.append(ExtractedObject("BarrierSweep", type="Median", subtype=self.cad.median_type, span=L, diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py b/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py index ca7072499..5d7bd3d2d 100644 --- a/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py @@ -48,6 +48,14 @@ def create_axis2placement_2d(self, origin=(0.,0.), x_dir=(1.,0.)): xdr = self.file.createIfcDirection([float(v) for v in x_dir]) return self.file.createIfcAxis2Placement2D(pt, xdr) + def apply_color(self, shape_rep, rgb_tuple): + """Applies an RGB color to an IfcShapeRepresentation.""" + rgb = self.file.createIfcColourRgb(None, float(rgb_tuple[0]), float(rgb_tuple[1]), float(rgb_tuple[2])) + surf_style = self.file.createIfcSurfaceStyleRendering(SurfaceColour=rgb) + surface_style = self.file.createIfcSurfaceStyle(None, "BOTH", [surf_style]) + for item in shape_rep.Items: + self.file.createIfcStyledItem(item, [surface_style], None) + # --- NATIVE PROFILE TRANSLATORS --- def create_rectangular_profile(self, width, height): @@ -74,43 +82,82 @@ def create_c_shape_profile(self, depth, width, web_thickness, flange_thickness): WallThickness=float(web_thickness), Girth=float(flange_thickness), InternalFilletRadius=None ) + def create_i_shape_profile(self, depth, width, web_thickness, flange_thickness): + return self.file.createIfcIShapeProfileDef( + ProfileType="AREA", ProfileName=None, + Position=self.create_axis2placement_2d(), + OverallWidth=float(width), + OverallDepth=float(depth), + WebThickness=float(web_thickness), + FlangeThickness=float(flange_thickness), + FilletRadius=None, FlangeEdgeRadius=None, FlangeSlope=None + ) + def create_double_angle_profile(self, leg_h, leg_w, thickness, connection_type): - """Builds a composite polygonal profile for two back-to-back angles.""" - # Using a polygonal profile definition explicitly mapped from coordinates - pts = [] - if connection_type == "SHORTER_LEG": - # Mirrors around X-axis - pts = [ - (-leg_h, -thickness), (0, -thickness), (0, -leg_w), - (thickness, -leg_w), (thickness, -thickness), (thickness+leg_h, -thickness), - (thickness+leg_h, 0), (thickness, 0), (thickness, leg_w-thickness), - (0, leg_w-thickness), (0, 0), (-leg_h, 0) - ] - else: # LONGER_LEG - pts = [ - (-leg_w, -thickness), (0, -thickness), (0, -leg_h), - (thickness, -leg_h), (thickness, -thickness), (thickness+leg_w, -thickness), - (thickness+leg_w, 0), (thickness, 0), (thickness, leg_h-thickness), - (0, leg_h-thickness), (0, 0), (-leg_w, 0) - ] - - ifc_pts = [self.create_cartesian_point_2d(p[0], p[1]) for p in pts] - polyline = self.file.createIfcPolyline(ifc_pts + [ifc_pts[0]]) # Close loop - return self.file.createIfcArbitraryClosedProfileDef("AREA", "DoubleAngle", polyline) + """Builds a composite profile for two back-to-back angles separated by a gap.""" + gap = thickness + v_leg = leg_w if connection_type == "SHORTER_LEG" else leg_h + h_leg = leg_h if connection_type == "SHORTER_LEG" else leg_w + + right_pts = [ + (gap/2, -v_leg/2), + (gap/2 + h_leg, -v_leg/2), + (gap/2 + h_leg, -v_leg/2 + thickness), + (gap/2 + thickness, -v_leg/2 + thickness), + (gap/2 + thickness, v_leg/2), + (gap/2, v_leg/2) + ] + left_pts = [ + (-gap/2, -v_leg/2), + (-gap/2, v_leg/2), + (-gap/2 - thickness, v_leg/2), + (-gap/2 - thickness, -v_leg/2 + thickness), + (-gap/2 - h_leg, -v_leg/2 + thickness), + (-gap/2 - h_leg, -v_leg/2) + ] + + def _make_prof(pts, name): + ifc_pts = [self.create_cartesian_point_2d(p[0], p[1]) for p in pts] + polyline = self.file.createIfcPolyline(ifc_pts + [ifc_pts[0]]) + return self.file.createIfcArbitraryClosedProfileDef("AREA", name, polyline) + + right_prof = _make_prof(right_pts, "RightAngle") + left_prof = _make_prof(left_pts, "LeftAngle") + return self.file.createIfcCompositeProfileDef("AREA", "DoubleAngle", [left_prof, right_prof], None) def create_double_channel_profile(self, depth, width, tw, tf): - """Builds a composite polygonal profile for two back-to-back channels.""" + """Builds a composite profile for two back-to-back channels separated by a gap.""" gap = width # standard gap - pts = [ - (-width, depth/2), (0, depth/2), (0, -depth/2), (-width, -depth/2), - (-width, -depth/2+tf), (-tw, -depth/2+tf), (-tw, depth/2-tf), (-width, depth/2-tf), - # Transition to second channel via gap - (gap, depth/2-tf), (gap+tw, depth/2-tf), (gap+tw, -depth/2+tf), (gap, -depth/2+tf), - (gap, -depth/2), (gap+width, -depth/2), (gap+width, depth/2), (gap, depth/2) + + right_pts = [ + (gap/2, -depth/2), + (gap/2 + width, -depth/2), + (gap/2 + width, -depth/2 + tf), + (gap/2 + tw, -depth/2 + tf), + (gap/2 + tw, depth/2 - tf), + (gap/2 + width, depth/2 - tf), + (gap/2 + width, depth/2), + (gap/2, depth/2) ] - ifc_pts = [self.create_cartesian_point_2d(p[0], p[1]) for p in pts] - polyline = self.file.createIfcPolyline(ifc_pts + [ifc_pts[0]]) - return self.file.createIfcArbitraryClosedProfileDef("AREA", "DoubleChannel", polyline) + left_pts = [ + (-gap/2, -depth/2), + (-gap/2, depth/2), + (-gap/2 - width, depth/2), + (-gap/2 - width, depth/2 - tf), + (-gap/2 - tw, depth/2 - tf), + (-gap/2 - tw, -depth/2 + tf), + (-gap/2 - width, -depth/2 + tf), + (-gap/2 - width, -depth/2) + ] + + def _make_prof(pts, name): + ifc_pts = [self.create_cartesian_point_2d(p[0], p[1]) for p in pts] + polyline = self.file.createIfcPolyline(ifc_pts + [ifc_pts[0]]) + return self.file.createIfcArbitraryClosedProfileDef("AREA", name, polyline) + + right_prof = _make_prof(right_pts, "RightChannel") + left_prof = _make_prof(left_pts, "LeftChannel") + return self.file.createIfcCompositeProfileDef("AREA", "DoubleChannel", [left_prof, right_prof], None) def create_polygonal_profile(self, points, name="Polygon"): """Used for custom skewed deck slabs and continuous crash barriers.""" @@ -118,6 +165,18 @@ def create_polygonal_profile(self, points, name="Polygon"): polyline = self.file.createIfcPolyline(ifc_pts + [ifc_pts[0]]) return self.file.createIfcArbitraryClosedProfileDef("AREA", name, polyline) + def create_polygonal_profile_with_voids(self, outer_points, inner_points_list, name="PolygonWithVoids"): + """Creates an arbitrary profile with one outer boundary and multiple inner voids.""" + outer_ifc_pts = [self.create_cartesian_point_2d(p[0], p[1]) for p in outer_points] + outer_polyline = self.file.createIfcPolyline(outer_ifc_pts + [outer_ifc_pts[0]]) + + inner_polylines = [] + for inner_points in inner_points_list: + inner_ifc_pts = [self.create_cartesian_point_2d(p[0], p[1]) for p in inner_points] + inner_polylines.append(self.file.createIfcPolyline(inner_ifc_pts + [inner_ifc_pts[0]])) + + return self.file.createIfcArbitraryProfileDefWithVoids("AREA", name, outer_polyline, inner_polylines) + # --- GEOMETRIC SOLID EXTRUSION --- def create_extruded_solid(self, profile, thickness, position_3d): diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py b/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py index 045b0230c..854ad816b 100644 --- a/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py @@ -6,6 +6,7 @@ import time import ifcopenshell from osdagbridge.core.ifc_export_bridge.bridge_geometry_mapper import BridgeGeometryMapper, create_ifc_guid +from osdagbridge.core.ifc_export_bridge.metadata_mapper import BridgeMetadataMapper class BridgeIfcGenerator: def __init__(self, output_path): @@ -25,6 +26,7 @@ def initialize_file(self): stamp = int(time.time()) self.file = ifcopenshell.file(schema="IFC4") self.mapper = BridgeGeometryMapper(self.file) + self.metadata = BridgeMetadataMapper(self.file, self.mapper) # Owner History person = self.file.createIfcPerson(Identification="USER", FamilyName="Osdag", GivenName="Bridge") @@ -62,7 +64,7 @@ def initialize_file(self): def bind_element_to_storey(self, element): self.file.createIfcRelContainedInSpatialStructure(create_ifc_guid(), self._owner_history, RelatingStructure=self.storey, RelatedElements=[element]) - def generate_from_extracted_data(self, extracted_dict): + def generate_from_extracted_data(self, extracted_dict, cad_context=None): """Consume extracted dictionary logic and bind to schema.""" self.initialize_file() s = 0.001 # Global Scale Factor (Meters) @@ -80,6 +82,10 @@ def _process_plate(item): prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) elem = self.file.createIfcPlate(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) self.bind_element_to_storey(elem) + if "Stiffener" in item.ifc_name: + self.metadata.map_stiffener(elem, cad_context, item.ifc_name) + else: + self.metadata.map_girder(elem, cad_context, item.ifc_name) def _process_brace(item): # Dynamic profile type matching @@ -93,7 +99,7 @@ def _process_brace(item): elif item.sec_type == "DOUBLE_CHANNEL": prof = self.mapper.create_double_channel_profile(item.dims.get('depth', 100) * s, item.dims.get('flange_width', 50) * s, 5 * s, 7 * s) else: # I_SECTION - prof = self.mapper.create_rectangular_profile(item.dims.get('flange_width', 100) * s, item.dims.get('depth', 100) * s) # Simple default mapping + prof = self.mapper.create_i_shape_profile(item.dims.get('depth', 100) * s, item.dims.get('flange_width', 100) * s, item.dims.get('web_thickness', 5) * s, item.dims.get('flange_thickness', 5) * s) # Extrusion vectors import math @@ -122,6 +128,7 @@ def _process_brace(item): prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) elem = self.file.createIfcMember(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) self.bind_element_to_storey(elem) + self.metadata.map_brace(elem, cad_context, item) def _process_deck(item): # Use extracted thickness @@ -147,68 +154,366 @@ def _process_deck(item): ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) self.bind_element_to_storey(elem) + self.metadata.map_deck_slab(elem, cad_context) + def _process_metallic_median(item, geo): + """Generates the multi-component assembly for metallic medians.""" + import math + s = 0.001 + deck_top = shared["deck_top_m"] + span_l = item.span + + kerb_h = geo.get("kerb_height", 150.0) + kerb_bot = geo.get("median_width", 1200.0) + kerb_top = geo.get("kerb_top_width", 1150.0) + post_h = geo.get("post_height", 950.0) + post_spacing = geo.get("post_spacing", 1000.0) + num_rails = geo.get("number_of_w_beams", geo.get("w_beams", 2)) + + # 1. CREATE CONTINUOUS KERB (Base) + offset = (kerb_bot - kerb_top) / 2 + kerb_pts = [(0, 0), (kerb_bot, 0), (kerb_bot - offset, kerb_h), (offset, kerb_h)] + kerb_pts_m = [(p[0] * s, p[1] * s) for p in kerb_pts] + kerb_prof = self.mapper.create_polygonal_profile(kerb_pts_m, "Median_Kerb_Profile") + + x_start = item.y_offset * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + y_origin_kerb = item.y_offset * s - (kerb_bot * s / 2.0) + place_kerb = self.mapper.create_axis2placement_3d([x_start * s, y_origin_kerb, deck_top], z_dir=[1,0,0], x_dir=[0,1,0]) + kerb_solid = self.mapper.create_extruded_solid(kerb_prof, span_l * s, place_kerb) + all_solids = [kerb_solid] + + # 2. CREATE POSTS AND SPACERS + post_web_h, post_flange_w = 150.0, 75.0 + tw, tf = 5.4, 9.2 + chan_pts_m = [(p[0]*s, p[1]*s) for p in [ + (0, -post_web_h/2), (post_flange_w, -post_web_h/2), (post_flange_w, -post_web_h/2 + tf), + (tw, -post_web_h/2 + tf), (tw, post_web_h/2 - tf), (post_flange_w, post_web_h/2 - tf), + (post_flange_w, post_web_h/2), (0, post_web_h/2) + ]] + post_prof = self.mapper.create_polygonal_profile(chan_pts_m, "Median_Post_Profile") + + sp_h, sp_w, sp_d = 330.0, 200.0, 150.0 + sp_pts_m = [(p[0]*s, p[1]*s) for p in [ + (0, -sp_w/2), (sp_d, -sp_w/2), (sp_d, -sp_w/2 + 8.0), + (5.0, -sp_w/2 + 8.0), (5.0, sp_w/2 - 8.0), (sp_d, sp_w/2 - 8.0), + (sp_d, sp_w/2), (0, sp_w/2) + ]] + sp_prof = self.mapper.create_polygonal_profile(sp_pts_m, "Median_Spacer_Profile") + + num_posts = int(span_l / post_spacing) + 1 + post_y_offsets = [-240.0, 240.0] # Fixed for 1.2m median + + for i in range(num_posts): + x_p = i * post_spacing + for y_off_local in post_y_offsets: + side_mult = 1 if y_off_local > 0 else -1 + y_global = item.y_offset + y_off_local + x_off_skew = y_global * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + post_origin = [(x_p + x_off_skew) * s, y_global * s, deck_top + kerb_h * s] + + place_post = self.mapper.create_axis2placement_3d(post_origin, z_dir=[0,0,1], x_dir=[1,0,0]) + all_solids.append(self.mapper.create_extruded_solid(post_prof, post_h * s, place_post)) + + h_upper = post_h - 312.0 / 2.0 + beam_heights = [h_upper - 312.0 - 145.0, h_upper] if num_rails == 2 else [h_upper] + for bh in beam_heights: + sp_z = deck_top + (kerb_h + bh - sp_h/2.0) * s + sp_y_m = post_origin[1] + side_mult * 175.0 * s + sp_origin = [post_origin[0], sp_y_m, sp_z] + place_sp = self.mapper.create_axis2placement_3d(sp_origin, z_dir=[0,0,1], x_dir=[1,0,0]) + all_solids.append(self.mapper.create_extruded_solid(sp_prof, sp_h * s, place_sp)) + + # 3. CREATE CONTINUOUS RAILS + rail_y_offsets = [-515.0, 515.0] + for bh in beam_heights: + rail_z = deck_top + (kerb_h + bh - 312.0 / 2.0) * s + for y_off_local in rail_y_offsets: + y_global = item.y_offset + y_off_local + x_start_rail = y_global * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + # Face outward towards traffic: Left rail (-515) faces -Y, Right rail (+515) faces +Y + mult = -1.0 if y_global < item.y_offset else 1.0 + w_pts_m = _get_w_profile_pts_m(mult, s) + w_prof = self.mapper.create_polygonal_profile(w_pts_m, f"W_Rail_{'L' if mult<0 else 'R'}") + place_rail = self.mapper.create_axis2placement_3d([x_start_rail * s, y_global * s, rail_z], z_dir=[1,0,0], x_dir=[0,1,0]) + all_solids.append(self.mapper.create_extruded_solid(w_prof, span_l * s, place_rail)) + + _finalize_metallic_assembly(item, all_solids) + + def _process_metallic_barrier(item, geo): + """Generates the multi-component assembly for edge metallic barriers.""" + import math + s = 0.001 + deck_top = shared["deck_top_m"] + span_l = item.span + + kerb_h = geo.get("kerb_height", 150.0) + kerb_bot = 500.0 + kerb_top = 450.0 + post_h = geo.get("post_height", 950.0) + post_spacing = geo.get("post_spacing", 1000.0) + num_rails = geo.get("number_of_w_beams", geo.get("w_beams", 1)) + + # 1. Dimensions based on side (Left/Right) + is_right_edge = item.y_offset > 0.5 + side_mult = -1 if is_right_edge else 1 + post_y_off = 110.0 if is_right_edge else -110.0 + rail_y_off = -165.0 if is_right_edge else 165.0 + + # 2. KERB + offset = (kerb_bot - kerb_top) / 2 + kerb_pts_m = [(p[0]*s, p[1]*s) for p in [(0, 0), (kerb_bot, 0), (kerb_bot - offset, kerb_h), (offset, kerb_h)]] + kerb_prof = self.mapper.create_polygonal_profile(kerb_pts_m, "Barrier_Kerb_Profile") + x_start = item.y_offset * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + y_origin_kerb = item.y_offset * s - (kerb_bot * s / 2.0) + place_kerb = self.mapper.create_axis2placement_3d([x_start * s, y_origin_kerb, deck_top], z_dir=[1,0,0], x_dir=[0,1,0]) + all_solids = [self.mapper.create_extruded_solid(kerb_prof, span_l * s, place_kerb)] + + # 3. POSTS AND SPACERS + post_web_h, post_flange_w = 150.0, 75.0 + tw, tf = 5.4, 9.2 + chan_pts_m = [(p[0]*s, p[1]*s) for p in [ + (0, -post_web_h/2), (post_flange_w, -post_web_h/2), (post_flange_w, -post_web_h/2 + tf), + (tw, -post_web_h/2 + tf), (tw, post_web_h/2 - tf), (post_flange_w, post_web_h/2 - tf), + (post_flange_w, post_web_h/2), (0, post_web_h/2) + ]] + post_prof = self.mapper.create_polygonal_profile(chan_pts_m, "Barrier_Post_Profile") + + sp_h, sp_w, sp_d = 330.0, 200.0, 150.0 + sp_pts_m = [(p[0]*s, p[1]*s) for p in [ + (0, -sp_w/2), (sp_d, -sp_w/2), (sp_d, -sp_w/2 + 8.0), + (5.0, -sp_w/2 + 8.0), (5.0, sp_w/2 - 8.0), (sp_d, sp_w/2 - 8.0), + (sp_d, sp_w/2), (0, sp_w/2) + ]] + sp_prof = self.mapper.create_polygonal_profile(sp_pts_m, "Barrier_Spacer_Profile") + + num_posts = int(span_l / post_spacing) + 1 + for i in range(num_posts): + x_p = i * post_spacing + y_global = item.y_offset + post_y_off + x_off_skew = y_global * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + post_origin = [(x_p + x_off_skew) * s, y_global * s, deck_top + kerb_h * s] + place_post = self.mapper.create_axis2placement_3d(post_origin, z_dir=[0,0,1], x_dir=[1,0,0]) + all_solids.append(self.mapper.create_extruded_solid(post_prof, post_h * s, place_post)) + + h_upper = post_h - 312.0 / 2.0 + beam_heights = [h_upper - 312.0 - 145.0, h_upper] if num_rails == 2 else [h_upper] + for bh in beam_heights: + sp_z = deck_top + (kerb_h + bh - sp_h/2.0) * s + sp_y_m = post_origin[1] + side_mult * 175.0 * s + sp_origin = [post_origin[0], sp_y_m, sp_z] + place_sp = self.mapper.create_axis2placement_3d(sp_origin, z_dir=[0,0,1], x_dir=[1,0,0]) + all_solids.append(self.mapper.create_extruded_solid(sp_prof, sp_h * s, place_sp)) + + # 4. CONTINUOUS RAILS + for bh in beam_heights: + rail_z = deck_top + (kerb_h + bh - 312.0 / 2.0) * s + y_global = item.y_offset + rail_y_off + x_start_rail = y_global * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + # Face inward towards road: Left edge faces +Y, Right edge faces -Y + mult = 1.0 if not is_right_edge else -1.0 + w_pts_m = _get_w_profile_pts_m(mult, s) + w_prof = self.mapper.create_polygonal_profile(w_pts_m, f"W_Edge_Rail_{'L' if mult<0 else 'R'}") + place_rail = self.mapper.create_axis2placement_3d([x_start_rail * s, y_global * s, rail_z], z_dir=[1,0,0], x_dir=[0,1,0]) + all_solids.append(self.mapper.create_extruded_solid(w_prof, span_l * s, place_rail)) + + _finalize_metallic_assembly(item, all_solids) + + def _get_w_profile_pts_m(mult, s): + H, D, T = 312.0, 85.0, 3.0 + sigma = H / 10.0 + mu1, mu2 = H * 0.25, H * 0.75 + import math + amp = D / (1.0 + math.exp(-((mu1-mu2)**2)/(2*sigma**2))) + num_pts = 40 + pts = [] + for i in range(num_pts + 1): + y_l = (H * i) / num_pts + x_l = amp * (math.exp(-((y_l-mu1)**2)/(2*sigma**2)) + math.exp(-((y_l-mu2)**2)/(2*sigma**2))) + pts.append((mult * x_l * s, y_l * s)) + for i in range(num_pts, -1, -1): + y_l = (H * i) / num_pts + x_l = amp * (math.exp(-((y_l-mu1)**2)/(2*sigma**2)) + math.exp(-((y_l-mu2)**2)/(2*sigma**2))) - T + pts.append((mult * x_l * s, y_l * s)) + return pts + + STEEL_COLOR = (0.6, 0.65, 0.7) + RCC_COLOR = (0.85, 0.85, 0.82) + + def _finalize_metallic_assembly(item, all_solids): + shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", all_solids) + self.mapper.apply_color(shape, STEEL_COLOR) + prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) + elem = self.file.createIfcBuildingElementProxy(create_ifc_guid(), self._owner_history, Name=item.ifc_name, + ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, self.mapper.create_axis2placement_3d((0,0,0))), + Representation=prod_def) + self.bind_element_to_storey(elem) + self.metadata.map_barrier(elem, cad_context, item.ifc_name) + def _process_barrier(item): - geo = getattr(item, 'geo', {}) - import math - - # 1. Define 2D Profile Points and Reference Width - if geo.get("type") == "rcc": - total_h = geo["total_height"] - bottom_w = geo["bottom_width"] - base_v = geo["base_vertical"] - mid_off = geo["mid_offset"] - shape_scale = bottom_w / 525.0 - right_at_mid = 300 * shape_scale - left_at_top = 50 * shape_scale - right_at_top = 225 * shape_scale + geo = getattr(item, 'geo', {}) + import math + + if geo.get("type") == "metallic": + if "Median" in item.ifc_name: + _process_metallic_median(item, geo) + else: + _process_metallic_barrier(item, geo) + return + + # 1. Define 2D Profile Points and Reference Width + if geo.get("type") in ["rcc", "rcc_barrier"]: + # Exact IRC profile dimensions as used in Osdag builder.py + total_h = geo.get("total_height", geo.get("barrier_height", 900.0)) + bottom_w = geo.get("bottom_width", geo.get("median_width", 450.0)) + base_v = geo.get("base_vertical", 100.0) + top_w = geo.get("top_width", 175.0) # Standard IRC top notch width + + # Height levels + z1 = base_v + z2 = z1 + 250.0 # Transition slope height + z3 = total_h + + # Width levels - shifted so left outer edge is at 0 + # Right edge is the traffic-facing side (outer) which has the bend + right_edge = bottom_w + right_at_mid = bottom_w - 100.0 # Transition notch goes 100mm inwards + right_at_top = (bottom_w + top_w) / 2.0 + left_at_top = (bottom_w - top_w) / 2.0 + left_edge = 0.0 pts_2d = [ - (0, 0), (bottom_w, 0), (bottom_w, base_v), - (right_at_mid, mid_off), (right_at_top, total_h), - (left_at_top, total_h), (0, base_v), - ] - elif geo.get("type") == "metallic": - kerb_h = geo.get("kerb_height", 150.0) - bottom_w = geo.get("median_width", geo.get("kerb_bottom_width", 550)) - kerb_top = geo.get("kerb_top_width", 500) - offset = (bottom_w - kerb_top) / 2 - pts_2d = [ - (0, 0), (bottom_w, 0), - (bottom_w - offset, kerb_h), - (offset, kerb_h), + (left_edge, 0), + (right_edge, 0), + (right_edge, z1), + (right_at_mid, z2), + (right_at_top, z3), + (left_at_top, z3), + (left_edge, z1), ] - else: - # Median / Others fallback - total_h = geo.get("total_height", geo.get("kerb_height", 1100)) - bottom_w = geo.get("median_width", geo.get("bottom_width", geo.get("kerb_bottom_width", 1200))) - pts_2d = [(0, 0), (bottom_w, 0), (bottom_w, total_h), (0, total_h)] + elif geo.get("type") == "kerb": + # Raised Kerb: trapezium profile (symmetric) + total_h = geo.get("kerb_height", 225) + bottom_w = geo.get("kerb_bottom_width", 1200) + top_w = geo.get("kerb_top_width", 1150) + offset = (bottom_w - top_w) / 2.0 + pts_2d = [ + (0, 0), (bottom_w, 0), + (bottom_w - offset, total_h), (offset, total_h) + ] + else: + # Fallback — simple rectangle + total_h = geo.get("total_height", geo.get("kerb_height", 225)) + bottom_w = geo.get("median_width", geo.get("bottom_width", geo.get("kerb_bottom_width", 1200))) + pts_2d = [(0, 0), (bottom_w, 0), (bottom_w, total_h), (0, total_h)] + + # 2. Determine solid placements (Double for medians, single for edge barriers) + configs = [] + # Check if it's an RCC median (which needs two barriers) + if item.type == "Median" and geo.get("type") == "rcc_barrier": + median_w = geo.get("median_width", 1200.0) + # Left barrier: mirrored, placed at -median_w/2 + configs.append({"y_local": -median_w / 2.0, "mirror": True}) + # Right barrier: normal, placed at +median_w/2 - bottom_w + configs.append({"y_local": median_w / 2.0 - bottom_w, "mirror": False}) + else: + # Standard single barrier (edge or non-RCC median) + is_right_side = item.y_offset > 0.5 + configs.append({"y_local": -bottom_w / 2.0, "mirror": is_right_side}) + + deck_top = shared["deck_top_m"] + # Map Median to IfcWall if it's high, otherwise IfcBuildingElementProxy + elem_type = self.file.createIfcWall if item._class_name == "BarrierSweep" else self.file.createIfcBuildingElementProxy - # 2. Apply Mirroring for Right Side (Orientation Fix) - is_right_side = item.y_offset > 0.5 - if is_right_side: - pts_2d = [(bottom_w - x, y) for x, y in pts_2d] + for cfg in configs: + # Apply mirroring if needed + current_pts = [(bottom_w - x, y) for x, y in pts_2d] if cfg["mirror"] else pts_2d + current_pts_m = [(x * s, y * s) for x, y in current_pts] + + y_global = item.y_offset + cfg["y_local"] + x_start = y_global * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + + # Create a dedicated placement for this specific barrier + # Orientation: extrudes along Global X, profile in Global YZ plane + scaled_origin = [x_start * s, y_global * s, deck_top] + place = self.mapper.create_axis2placement_3d(scaled_origin, z_dir=[1,0,0], x_dir=[0,1,0]) + + # Use identity for the solid relative to its dedicated element placement + local_identity = self.mapper.create_axis2placement_3d((0,0,0), z_dir=(0,0,1), x_dir=(1,0,0)) + + prof = self.mapper.create_polygonal_profile(current_pts_m, f"BarrierProfile_{item.ifc_name}") + solid = self.mapper.create_extruded_solid(prof, item.span * s, local_identity) + + shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) + self.mapper.apply_color(shape, RCC_COLOR) + prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) + + # Create the individual IFC element + elem_name = f"{item.ifc_name} {'Left' if cfg['mirror'] else 'Right'}" if len(configs) > 1 else item.ifc_name + elem = elem_type(create_ifc_guid(), self._owner_history, Name=elem_name, + ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), + Representation=prod_def) + self.bind_element_to_storey(elem) + self.metadata.map_barrier(elem, cad_context, elem_name) - # 3. Scaling and Transformation - pts_2d_m = [(x * s, y * s) for x, y in pts_2d] + def _process_metallic_railing(item, geo): + """Generates the multi-component assembly for steel railings.""" + import math + s = 0.001 + deck_top = shared["deck_top_m"] + span_l = item.span + + rail_h = geo.get("height", 1100.0) + base_h = 100.0 + base_w = 375.0 + post_size = 150.0 + post_spacing = 1000.0 + rail_size = 40.0 + + all_solids = [] + + # 1. CREATE CONTINUOUS BASE + # Base is centered at item.y_offset. Profile is in global YZ (local XY). + # Local X: [-base_w/2, base_w/2], Local Y: [0, base_h] + base_pts_m = [(-base_w*s/2, 0), (base_w*s/2, 0), (base_w*s/2, base_h*s), (-base_w*s/2, base_h*s)] + base_prof = self.mapper.create_polygonal_profile(base_pts_m, f"Railing_Base_Profile_{item.ifc_name}") x_start = item.y_offset * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 - deck_top = shared["deck_top_m"] + # Origin at deck top, extrudes along X + place_base = self.mapper.create_axis2placement_3d([x_start * s, item.y_offset * s, deck_top], z_dir=[1,0,0], x_dir=[0,1,0]) + all_solids.append(self.mapper.create_extruded_solid(base_prof, span_l * s, place_base)) + + # 2. CREATE POSTS + post_h = rail_h - base_h + # Post profile in XY plane (global XY) extruding UP (Z) + post_prof = self.mapper.create_rectangular_profile(post_size * s, post_size * s) - y_origin = item.y_offset * s - (bottom_w * s / 2.0) - scaled_origin = [x_start * s, y_origin, deck_top] + # Match builder.py spacing logic + eff_l = span_l - post_size + num_spaces = max(1, int(eff_l / post_spacing)) if eff_l > 0 else 1 + actual_spacing = eff_l / num_spaces if eff_l > 0 else 0 - prof = self.mapper.create_polygonal_profile(pts_2d_m, "BarrierProfile") - place = self.mapper.create_axis2placement_3d(scaled_origin, z_dir=[1,0,0], x_dir=[0,1,0]) - local_identity = self.mapper.create_axis2placement_3d((0,0,0), z_dir=(0,0,1), x_dir=(1,0,0)) - solid = self.mapper.create_extruded_solid(prof, item.span * s, local_identity) + for i in range(num_spaces + 1): + x_p = i * actual_spacing + # Calculate x shift due to skew at this Y + x_off_skew = item.y_offset * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + post_origin = [(x_p + x_off_skew) * s, item.y_offset * s, deck_top + base_h * s] + place_post = self.mapper.create_axis2placement_3d(post_origin, z_dir=[0,0,1], x_dir=[1,0,0]) + all_solids.append(self.mapper.create_extruded_solid(post_prof, post_h * s, place_post)) + + # 3. CREATE CONTINUOUS RAILS + rail_prof = self.mapper.create_rectangular_profile(rail_size * s, rail_size * s) - shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) - prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) - # Map Median to IfcWall if it's high, otherwise IfcBuildingElementProxy - elem_type = self.file.createIfcWall if item._class_name == "BarrierSweep" else self.file.createIfcBuildingElementProxy - elem = elem_type(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) - self.bind_element_to_storey(elem) + # Top Rail (positioned near top) + top_rail_z = deck_top + (rail_h - 2 * rail_size) * s + place_top = self.mapper.create_axis2placement_3d([x_start * s, item.y_offset * s, top_rail_z], z_dir=[1,0,0], x_dir=[0,1,0]) + all_solids.append(self.mapper.create_extruded_solid(rail_prof, span_l * s, place_top)) + + # Mid Rail + mid_rail_z = deck_top + (base_h + post_h * 0.5) * s + place_mid = self.mapper.create_axis2placement_3d([x_start * s, item.y_offset * s, mid_rail_z], z_dir=[1,0,0], x_dir=[0,1,0]) + all_solids.append(self.mapper.create_extruded_solid(rail_prof, span_l * s, place_mid)) + + _finalize_metallic_assembly(item, all_solids) def _process_railing(item): geo = getattr(item, 'geo', {}) @@ -216,20 +521,76 @@ def _process_railing(item): rail_w = geo.get("width", 375) rail_h = geo.get("height", 1100) - prof = self.mapper.create_rectangular_profile(rail_w * s, rail_h * s) - - x_start = item.y_offset * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 - deck_top = shared["deck_top_m"] - scaled_origin = [x_start * s, item.y_offset * s, deck_top + rail_h * s / 2.0] - place = self.mapper.create_axis2placement_3d(scaled_origin, z_dir=[1,0,0], x_dir=[0,1,0]) - local_identity = self.mapper.create_axis2placement_3d((0,0,0), z_dir=(0,0,1), x_dir=(1,0,0)) - solid = self.mapper.create_extruded_solid(prof, item.span * s, local_identity) - - shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) - prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) - elem = self.file.createIfcRailing(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) - self.bind_element_to_storey(elem) + if geo.get("type") == "rcc": + # Match Osdag's hollow passage logic from builder.py + base_h = 100 + body_h = rail_h - base_h + rail_count = 3 + + # Profile is in local XY plane (global YZ) + # X maps to width (Y global), Y maps to height (Z global) + # Profile is centered at 0 in both axes + + # Outer rectangle points + w2, h2 = rail_w / 2.0, rail_h / 2.0 + outer_pts = [(-w2, -h2), (w2, -h2), (w2, h2), (-w2, h2)] + + # Hollow passages (voids) + inner_voids = [] + hole_w = 0.6 * rail_w + hole_h = 0.5 * (body_h / rail_count) + spacing = body_h / (rail_count + 1) + + for i in range(rail_count): + z_center_rel = base_h + (i + 1) * spacing + y_center = z_center_rel - h2 # Local Y is global Z + + hw2, hh2 = hole_w / 2.0, hole_h / 2.0 + void_pts = [ + (-hw2, y_center - hh2), + (hw2, y_center - hh2), + (hw2, y_center + hh2), + (-hw2, y_center + hh2) + ] + # Convert to scaled meters + inner_voids.append([(p[0] * s, p[1] * s) for p in void_pts]) + + # Scale outer points + outer_pts_m = [(p[0] * s, p[1] * s) for p in outer_pts] + prof = self.mapper.create_polygonal_profile_with_voids(outer_pts_m, inner_voids, "RailingWithPassages") + + x_start = item.y_offset * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + deck_top = shared["deck_top_m"] + + scaled_origin = [x_start * s, item.y_offset * s, deck_top + rail_h * s / 2.0] + place = self.mapper.create_axis2placement_3d(scaled_origin, z_dir=[1,0,0], x_dir=[0,1,0]) + local_identity = self.mapper.create_axis2placement_3d((0,0,0), z_dir=(0,0,1), x_dir=(1,0,0)) + solid = self.mapper.create_extruded_solid(prof, item.span * s, local_identity) + + shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) + self.mapper.apply_color(shape, RCC_COLOR) + prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) + elem = self.file.createIfcRailing(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) + self.bind_element_to_storey(elem) + self.metadata.map_barrier(elem, cad_context, item.ifc_name) + elif geo.get("type") == "steel": + _process_metallic_railing(item, geo) + else: + # Fallback for simple rectangular railing + prof = self.mapper.create_rectangular_profile(rail_w * s, rail_h * s) + x_start = item.y_offset * math.tan(math.radians(item.skew)) if hasattr(item, 'skew') else 0 + deck_top = shared["deck_top_m"] + scaled_origin = [x_start * s, item.y_offset * s, deck_top + rail_h * s / 2.0] + place = self.mapper.create_axis2placement_3d(scaled_origin, z_dir=[1,0,0], x_dir=[0,1,0]) + local_identity = self.mapper.create_axis2placement_3d((0,0,0), z_dir=(0,0,1), x_dir=(1,0,0)) + solid = self.mapper.create_extruded_solid(prof, item.span * s, local_identity) + shape = self.file.createIfcShapeRepresentation(self.mapper._context3d, "Body", "SweptSolid", [solid]) + self.mapper.apply_color(shape, RCC_COLOR) + prod_def = self.file.createIfcProductDefinitionShape(None, None, [shape]) + elem = self.file.createIfcRailing(create_ifc_guid(), self._owner_history, Name=item.ifc_name, ObjectPlacement=self.file.createIfcLocalPlacement(self.storey.ObjectPlacement, place), Representation=prod_def) + self.bind_element_to_storey(elem) + self.metadata.map_barrier(elem, cad_context, item.ifc_name) # Iterate over extraction dictionary explicitly for key in ["girders", "stiffeners"]: diff --git a/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py b/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py index b88dfc1d0..17fc0d8ba 100644 --- a/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py +++ b/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py @@ -19,13 +19,11 @@ def __init__(self, cad_generator, filepath, completion_callback=None): def export(self): """Extracts and Maps synchronously.""" try: - print("Starting Data Bridging Extraction...") extractor = PlateGirderIFCExtractor(self.cad_generator) extracted_dict = extractor.extract() - print("Beginning Geometric Translation and IFC Schema Construction...") generator = BridgeIfcGenerator(self.filepath) - generator.generate_from_extracted_data(extracted_dict) + generator.generate_from_extracted_data(extracted_dict, self.cad_generator) if self.callback: self.callback(True, f"Model successfully exported to {self.filepath}") diff --git a/src/osdagbridge/core/ifc_export_bridge/metadata_mapper.py b/src/osdagbridge/core/ifc_export_bridge/metadata_mapper.py new file mode 100644 index 000000000..fecbe08bf --- /dev/null +++ b/src/osdagbridge/core/ifc_export_bridge/metadata_mapper.py @@ -0,0 +1,279 @@ +""" +Metadata Mapper for IFC Export + +This module handles mapping custom metadata properties to IFC elements. +""" +import uuid +import ifcopenshell +import sqlite3 +from pathlib import Path + +_DB_PATH = Path(__file__).resolve().parents[1] / "data" / "ResourceFiles" / "Intg_osdag.sqlite" + +def create_ifc_guid(): + return ifcopenshell.guid.compress(uuid.uuid4().hex) + +class BridgeMetadataMapper: + def __init__(self, file, mapper): + self.file = file + self.mapper = mapper + self._steel_cache = {} + self._concrete_cache = {} + + def _to_meters(self, value): + """Safely converts mm to meters, handling None values.""" + if value is None: + return None + try: + return float(value) / 1000.0 + except (TypeError, ValueError): + return None + + def _lookup_material_properties(self, grade: str, is_steel: bool) -> dict: + """Fetches material properties from Intg_osdag.sqlite database.""" + if not grade or not _DB_PATH.exists(): + return {} + + cache = self._steel_cache if is_steel else self._concrete_cache + if grade in cache: + return cache[grade] + + table = 'Steel_Grade_Properties' if is_steel else 'Concrete_Grade_Properties' + props = {} + + try: + con = sqlite3.connect(_DB_PATH) + con.row_factory = sqlite3.Row + cur = con.cursor() + cur.execute(f'SELECT * FROM {table} WHERE "Grade" = ?', (grade,)) + row = cur.fetchone() + con.close() + + if row: + if is_steel: + props["YieldStrength_MPa"] = float(row["Yield Strength"]) + props["UltimateTensileStrength_MPa"] = float(row["Ultimate Tensile Strength"]) + props["ModulusOfElasticity_GPa"] = float(row["Modulus of Elasticity"]) + props["PoissonsRatio"] = float(row["Poisson's Ratio"]) + props["Density_N_m3"] = float(row["Density"]) + else: + props["fck_MPa"] = float(row["fck"]) + props["fctm_MPa"] = float(row["fctm"]) + props["Ecm_GPa"] = float(row["Ecm"]) + + cache[grade] = props + return props + except Exception as e: + print(f"Error extracting DB properties for {grade}: {e}") + return {} + + def assign_metadata(self, element, properties, property_set_name="Pset_OsdagBridgeProperties"): + ifc_props = [] + owner_history = getattr(self.mapper, '_owner_history', None) + + for key, value in properties.items(): + if value is None: + continue + + val_type = "IfcLabel" + if isinstance(value, bool): + val_type = "IfcBoolean" + elif isinstance(value, float): + val_type = "IfcReal" + elif isinstance(value, int): + val_type = "IfcInteger" + else: + value = str(value) + + try: + ifc_val = self.file.create_entity(val_type, value) + prop = self.file.createIfcPropertySingleValue(key, None, ifc_val, None) + ifc_props.append(prop) + except Exception as e: + pass + + if not ifc_props: + return + + pset = self.file.createIfcPropertySet( + create_ifc_guid(), + owner_history, + property_set_name, + None, + ifc_props + ) + + self.file.createIfcRelDefinesByProperties( + create_ifc_guid(), + owner_history, + None, + None, + [element], + pset + ) + + def map_girder(self, element, cad, ifc_name): + if not cad: return + steel_grade = getattr(cad, "steel_grade", "E 250A") + props = { + "Material": steel_grade, + "SpanLength": self._to_meters(getattr(cad, "span_length_L", 0)), + "GirderSpacing": self._to_meters(getattr(cad, "girder_spacing", 0)) + } + + # Merge DB properties + db_props = self._lookup_material_properties(steel_grade, is_steel=True) + props.update(db_props) + + if "Web" in ifc_name: + props["ComponentRole"] = "Girder Web" + props["Depth"] = self._to_meters(cad.girder_section_d) + props["Thickness"] = self._to_meters(cad.girder_section_tw) + elif "TopFlange" in ifc_name: + props["ComponentRole"] = "Girder Top Flange" + props["Width"] = self._to_meters(cad.girder_section_bf) + props["Thickness"] = self._to_meters(cad.girder_section_tf) + elif "BottomFlange" in ifc_name: + props["ComponentRole"] = "Girder Bottom Flange" + props["Width"] = self._to_meters(cad.girder_section_bf_b) + props["Thickness"] = self._to_meters(cad.girder_section_tf_b) + else: + props["ComponentRole"] = "Main Girder" + + self.assign_metadata(element, props) + + def map_deck_slab(self, element, cad): + if not cad: return + concrete_grade = getattr(cad, "concrete_grade", "M30") + props = { + "ComponentRole": "Deck Slab", + "DeckThickness": self._to_meters(getattr(cad, "deck_thickness", 0)), + "CarriagewayWidth": self._to_meters(getattr(cad, "carriageway_width", 0)), + "SpanLength": self._to_meters(getattr(cad, "span_length_L", 0)), + "SkewAngle": getattr(cad, "skew_angle", 0), + "Material": concrete_grade + } + + # Merge DB properties + db_props = self._lookup_material_properties(concrete_grade, is_steel=False) + props.update(db_props) + + self.assign_metadata(element, props) + + def map_stiffener(self, element, cad, ifc_name): + if not cad: return + props = {} + if "Intermediate" in ifc_name: + props = { + "ComponentRole": "Intermediate Stiffener", + "Thickness": self._to_meters(cad.intermediate_stiffener_thickness), + "Spacing": self._to_meters(cad.intermediate_stiffener_spacing), + "Outstand": self._to_meters(getattr(cad, "intermediate_stiffener_outstand", None)) + } + elif "End" in ifc_name: + props = { + "ComponentRole": "End Stiffener", + "Thickness": self._to_meters(cad.end_stiffener_thickness), + "Outstand": self._to_meters(getattr(cad, "end_stiffener_outstand", None)) + } + elif "Longitudinal" in ifc_name: + props = { + "ComponentRole": "Longitudinal Stiffener", + "Thickness": self._to_meters(cad.longitudinal_stiffener_thickness), + "Outstand": self._to_meters(getattr(cad, "longitudinal_stiffener_outstand", None)) + } + + if props: + steel_grade = getattr(cad, "steel_grade", "E 250A") + props["Material"] = steel_grade + db_props = self._lookup_material_properties(steel_grade, is_steel=True) + props.update(db_props) + self.assign_metadata(element, props) + + def map_brace(self, element, cad, item): + if not cad: return + + props = {} + is_end_diaphragm = "EndDiaphragm" in item.ifc_name + + sys_name = "End Diaphragm" if is_end_diaphragm else "Intermediate Bracing" + prefix = "end_diaphragm_" if is_end_diaphragm else "" + + if "TopChord" in item.ifc_name: + c_prefix = prefix + "top_chord" if is_end_diaphragm else "top_chord" + props = { + "ComponentRole": f"{sys_name} Top Chord", + "ProfileType": getattr(cad, f"{c_prefix}_section_type", ""), + "ProfileThickness": self._to_meters(getattr(cad, f"{c_prefix}_thickness", None)), + "StructuralSystem": sys_name + } + elif "BottomChord" in item.ifc_name: + c_prefix = prefix + "bottom_chord" if is_end_diaphragm else "bottom_chord" + props = { + "ComponentRole": f"{sys_name} Bottom Chord", + "ProfileType": getattr(cad, f"{c_prefix}_section_type", ""), + "ProfileThickness": self._to_meters(getattr(cad, f"{c_prefix}_thickness", None)), + "StructuralSystem": sys_name + } + elif "Diagonal" in item.ifc_name: + c_prefix = prefix + "diagonal" if is_end_diaphragm else "diagonal" + bracing_pattern = cad.end_diaphragm_bracing_type if is_end_diaphragm else cad.bracing_type + props = { + "ComponentRole": f"{sys_name} Diagonal", + "BracingPattern": bracing_pattern, + "ProfileType": getattr(cad, f"{c_prefix}_section_type", ""), + "ProfileThickness": self._to_meters(getattr(cad, f"{c_prefix}_thickness", None)), + "StructuralSystem": sys_name + } + + # Dynamically map the unpacked dimensions based on the shape type + if hasattr(item, 'dims') and isinstance(item.dims, dict): + if props.get("ProfileType") in ["ANGLE", "DOUBLE_ANGLE"]: + props["ProfileDepth_or_LegHeight"] = self._to_meters(item.dims.get("leg_h")) + props["ProfileWidth_or_LegWidth"] = self._to_meters(item.dims.get("leg_w")) + if "connection_type" in item.dims: + props["ConnectionType"] = item.dims.get("connection_type") + else: + props["ProfileDepth_or_LegHeight"] = self._to_meters(item.dims.get("depth")) + props["ProfileWidth_or_LegWidth"] = self._to_meters(item.dims.get("flange_width")) + if "web_thickness" in item.dims: + props["WebThickness"] = self._to_meters(item.dims.get("web_thickness")) + if "flange_thickness" in item.dims: + props["FlangeThickness"] = self._to_meters(item.dims.get("flange_thickness")) + if "connection_type" in item.dims: + props["ConnectionType"] = item.dims.get("connection_type") + + if props: + steel_grade = getattr(cad, "steel_grade", "E 250A") + props["Material"] = steel_grade + db_props = self._lookup_material_properties(steel_grade, is_steel=True) + props.update(db_props) + self.assign_metadata(element, props) + + def map_barrier(self, element, cad, ifc_name): + if not cad: return + props = {} + if "CrashBarrier" in ifc_name: + props = { + "ComponentRole": "Crash Barrier", + "Standard": cad.barrier_type, + "SubType": cad.crash_barrier_subtype + } + elif "Median" in ifc_name: + props = { + "ComponentRole": "Median", + "Standard": cad.median_type, + } + elif "Railing" in ifc_name: + props = { + "ComponentRole": "Railing", + "Standard": cad.railing_type, + } + if cad.railing_type.lower() == "steel": + props["RailCount"] = getattr(cad, "rail_count", 0) + props["PostSpacing"] = 2.0 + else: + props["RailingStyle"] = "Continuous" + + if props: + self.assign_metadata(element, props) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index a216be49e..2af68d68a 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -1,4 +1,4 @@ -""" +""" Additional Inputs Widget for Highway Bridge Design Provides detailed input fields for manual bridge parameter definition """ diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 98b6927b7..dcc38c326 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -742,9 +742,21 @@ def _open_additional_inputs(self, target_tab=None): def _on_additional_inputs_closed(self): try: + # Capture the raw serialized state for dialog restoration saved = self.additional_inputs.get_saved_data() if isinstance(saved, dict) and saved: self._additional_inputs_saved_data = saved + + # Capture the flattened/processed values for CAD mapping and IFC export + # This ensures keys like 'median_type' are populated even if the dialog + # was closed via 'Save' (which doesn't trigger the Accepted signal). + vals = self.additional_inputs.get_all_values() + if isinstance(vals, dict) and vals: + if not self.additional_input_values: + self.additional_input_values = {} + self.additional_input_values.update(vals) + # Notify template page that inputs have changed to refresh 2D CAD + self.input_value_changed.emit() except Exception: pass self.additional_inputs = None diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 5220a9cf5..b8f51c605 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -23,10 +23,15 @@ class CustomWindow(QWidget): + export_finished = Signal(bool, str) + def __init__(self, title: str, backend: object, parent=None): super().__init__() self.parent = parent self.backend = backend() + + # Connect export signal to main-thread handler + self.export_finished.connect(self.on_export_finished) # Source for all input values. # Initialised from DEFAULTS_DICT; updated live as the user edits fields. @@ -104,6 +109,14 @@ def __init__(self, title: str, backend: object, parent=None): self.cad_state = {} self.init_ui() + + def on_export_finished(self, success, msg): + """Main-thread handler for export results.""" + from PySide6.QtWidgets import QMessageBox + if success: + QMessageBox.information(self, "Export Complete", msg) + else: + QMessageBox.critical(self, "Export Failed", msg) def init_ui(self): # Docking icons Parent class @@ -357,7 +370,7 @@ def validate_required_inputs(self): if empty_widgets: for widget, label in empty_widgets: # Collecting label name to show in popup message - message += f" - {label.replace('\n', ' ')}\n" # Replace \n with space for better readability + message += " - " + label.replace('\n', ' ') + "\n" # Replace \n with space for better readability # Highlight widget with red color widget.setProperty("error", True) widget.style().unpolish(widget) @@ -925,12 +938,6 @@ def create_menu_bar_items(self): save_cad_action.setShortcut(QKeySequence("Alt+I")) file_menu.addAction(save_cad_action) - export_ifc_action = QAction("Export IFC", self) - export_ifc_action.setShortcut(QKeySequence("Ctrl+E")) - file_menu.addAction(export_ifc_action) - - file_menu.addSeparator() - export_ifc_action = QAction("Export IFC", self) export_ifc_action.setShortcut(QKeySequence("Ctrl+E")) file_menu.addAction(export_ifc_action) @@ -942,114 +949,6 @@ def create_menu_bar_items(self): quit_action.setShortcut(QKeySequence("Shift+Q")) file_menu.addAction(quit_action) - def trigger_ifc_export(self): - from PySide6.QtWidgets import QFileDialog, QMessageBox - from osdagbridge.core.ifc_export_bridge.export_ifc_handler import PlateGirderIfcExportHandler - - # Bypass strict type check as CustomWindow instantiates FrontendData - file_path, _ = QFileDialog.getSaveFileName(self, "Export IFC Model", "PlateGirderBridge.ifc", "IFC Files (*.ifc)") - if not file_path: return - - # Map Live UI State to our standalone Exporter - class MockCAD: pass - cad = MockCAD() - inputs = self.cad_state - - # Layout & Main Dimensions - cad.span_length_L = float(inputs.get(KEY_SPAN, 25)) * 1000 - cad.num_girders = int(float(inputs.get(KEY_NO_OF_GIRDERS, 4))) - cad.girder_spacing = float(inputs.get(KEY_GIRDER_SPACING, 2.75)) * 1000 - cad.skew_angle = float(inputs.get(KEY_SKEW_ANGLE, 0)) - cad.carriageway_width = float(inputs.get(KEY_CARRIAGEWAY_WIDTH, 12)) * 1000 - cad.deck_thickness = float(inputs.get(KEY_DECK_THICKNESS, 0.4)) * 1000 - - # Girder Variables - cad.girder_section_d = float(inputs.get(KEY_GIRDER_DEPTH, 900)) - cad.girder_section_tw = float(inputs.get(KEY_GIRDER_WEB_THICKNESS, 100)) - cad.girder_section_bf = float(inputs.get(KEY_GIRDER_TOP_FLANGE_WIDTH, 500)) - cad.girder_section_tf = float(inputs.get(KEY_GIRDER_TOP_FLANGE_THICKNESS, 260)) - cad.girder_section_bf_b = float(inputs.get(KEY_GIRDER_BOTTOM_FLANGE_WIDTH, 500)) - # Default symmetric - cad.girder_section_tf_b = float(inputs.get(KEY_GIRDER_TOP_FLANGE_THICKNESS, 260)) - - # Footpaths & Median - footpath_val = inputs.get(KEY_FOOTPATH, "None") - if footpath_val == "Single Side": cad.footpath_config = "LEFT" - elif footpath_val == "Both Sides": cad.footpath_config = "BOTH" - else: cad.footpath_config = "NONE" - - cad.footpath_width = float(inputs.get(KEY_FOOTPATH_WIDTH, 1.5)) * 1000 - cad.railing_width = float(inputs.get(KEY_RAILING_WIDTH, 0.3)) * 1000 - cad.enable_median = inputs.get(KEY_INCLUDE_MEDIAN, False) - - # Standard Parametric Defaults to populate Bracing loops - cad.barrier_type = inputs.get("crash_barrier_type", "Rigid") - cad.crash_barrier_subtype = "IRC-5R" - cad.median_type = inputs.get("median_type", "Metallic Crash Barrier") - cad.rail_count = 3 - cad.railing_type = inputs.get("railing_type", "rcc") - - # Stiffener toggles - cad.include_intermediate_stiffeners = True - cad.intermediate_stiffener_spacing = 2000 - cad.intermediate_stiffener_thickness = 20 - cad.intermediate_stiffener_outstand = None - cad.num_end_stiffener_pairs = 4 - cad.end_stiffener_thickness = 30 - cad.end_stiffener_outstand = None - cad.include_longitudinal_stiffeners = True - cad.num_longitudinal_stiffeners = 2 - cad.longitudinal_stiffener_thickness = 20 - cad.longitudinal_stiffener_outstand = None - - # Cross Bracing Config - cad.cross_bracing_spacing = 4000 - cad.bracing_type = "X" - cad.x_bracket_option = "BOTH" - cad.k_top_bracket = True - cad.diagonal_section_type = "ANGLE" - cad.diagonal_section_dims = {"leg_h": 100, "leg_w": 50, "connection_type": "LONGER_LEG"} - cad.diagonal_thickness = 5 - cad.top_chord_section_type = "DOUBLE_CHANNEL" - cad.top_chord_section_dims = {"depth": 100, "flange_width": 50, "web_thickness":5, "flange_thickness":5} - cad.top_chord_thickness = 5 - cad.bottom_chord_section_type = "I_SECTION" - cad.bottom_chord_section_dims = {"depth": 100, "flange_width": 50, "web_thickness":5, "flange_thickness":5} - cad.bottom_chord_thickness = 5 - - # Diaphragm Default Config - cad.end_diaphragm_type = "Cross Bracing" - cad.end_diaphragm_spacing = 100 - cad.end_diaphragm_bracing_type = "K" - cad.end_diaphragm_diagonal_section_type = "ANGLE" - cad.end_diaphragm_diagonal_section_dims = {"leg_h": 100} - cad.end_diaphragm_diagonal_thickness = 5 - cad.end_diaphragm_top_chord_section_type = "CHANNEL" - cad.end_diaphragm_top_chord_section_dims = {} - cad.end_diaphragm_top_chord_thickness = 5 - cad.end_diaphragm_bottom_chord_section_type = "DOUBLE_ANGLE" - cad.end_diaphragm_bottom_chord_section_dims = {"connection_type": "SHORTER_LEG"} - cad.end_diaphragm_bottom_chord_thickness = 5 - - def completion_callback(success, msg): - if success: - QMessageBox.information(self, "Export Complete", msg) - else: - QMessageBox.critical(self, "Export Failed", msg) - - # Fire - handler = PlateGirderIfcExportHandler(cad, file_path, completion_callback) - handler.export_async() - - # Edit Menus - edit_menu = self.menu_bar.addMenu("Edit") - - design_prefs_action = QAction("Additional Inputs", self) - design_prefs_action.setShortcut(QKeySequence("Alt+P")) - edit_menu.addAction(design_prefs_action) - design_prefs_action.triggered.connect(lambda _: print("Open Additional Input")) - - graphics_menu = self.menu_bar.addMenu("Graphics") zoom_in_action = QAction("Zoom In", self) zoom_in_action.setShortcut(QKeySequence("Ctrl+I")) @@ -1134,6 +1033,128 @@ def completion_callback(success, msg): check_update_action = QAction("Check For Update", self) help_menu.addAction(check_update_action) + + def trigger_ifc_export(self): + from PySide6.QtWidgets import QFileDialog, QMessageBox + from osdagbridge.core.ifc_export_bridge.export_ifc_handler import PlateGirderIfcExportHandler + + # Bypass strict type check as CustomWindow instantiates FrontendData + file_path, _ = QFileDialog.getSaveFileName(self, "Export IFC Model", "PlateGirderBridge.ifc", "IFC Files (*.ifc)") + if not file_path: return + # Map Live UI State to our standalone Exporter + class MockCAD: pass + cad = MockCAD() + inputs = self.cad_state + cad.steel_grade = str(inputs.get(KEY_GIRDER, "E 250A")).strip() + cad.concrete_grade = str(inputs.get(KEY_DECK_CONCRETE_GRADE_BASIC, "M30")).strip() + + # --- Merge additional-inputs values (crash barrier, median, railing) -- + _additional = {} + if self.input_dock: + ai_vals = getattr(self.input_dock, "additional_input_values", None) or {} + saved_data = getattr(self.input_dock, "_additional_inputs_saved_data", None) or {} + # Merge both: saved_data is base, ai_vals overrides (it's more explicit) + _additional = {**saved_data, **ai_vals} + inputs = {**inputs, **_additional} # additional values override cad_state + + # Layout & Main Dimensions + cad.span_length_L = float(inputs.get(KEY_SPAN, 25)) * 1000 + cad.num_girders = int(float(inputs.get(KEY_NO_OF_GIRDERS, 4))) + cad.girder_spacing = float(inputs.get(KEY_GIRDER_SPACING, 2.75)) * 1000 + cad.skew_angle = float(inputs.get(KEY_SKEW_ANGLE, 0)) + cad.carriageway_width = float(inputs.get(KEY_CARRIAGEWAY_WIDTH, 12)) * 1000 + # Deck Thickness handling + _dt = float(inputs.get(KEY_DECK_THICKNESS, 400)) + cad.deck_thickness = _dt if _dt > 5 else _dt * 1000 + + # Girder Variables + cad.girder_section_d = float(inputs.get(KEY_GIRDER_DEPTH, 900)) + cad.girder_section_tw = float(inputs.get(KEY_GIRDER_WEB_THICKNESS, 100)) + cad.girder_section_bf = float(inputs.get(KEY_GIRDER_TOP_FLANGE_WIDTH, 500)) + cad.girder_section_tf = float(inputs.get(KEY_GIRDER_TOP_FLANGE_THICKNESS, 260)) + cad.girder_section_bf_b = float(inputs.get(KEY_GIRDER_BOTTOM_FLANGE_WIDTH, 500)) + cad.girder_section_tf_b = float(inputs.get(KEY_GIRDER_TOP_FLANGE_THICKNESS, 260)) + + # Footpaths & Median + footpath_val = inputs.get(KEY_FOOTPATH, "None") + if footpath_val == "Single Side": cad.footpath_config = "LEFT" + elif footpath_val == "Both Sides": cad.footpath_config = "BOTH" + else: cad.footpath_config = "NONE" + + cad.footpath_width = float(inputs.get(KEY_FOOTPATH_WIDTH, 1.5)) * 1000 + cad.railing_width = float(inputs.get(KEY_RAILING_WIDTH, 0.3)) * 1000 + cad.enable_median = inputs.get(KEY_INCLUDE_MEDIAN, False) + + # Crash Barrier + _barrier_label = inputs.get("crash_barrier_type", "IRC 5 - RCC Crash Barrier") + cad.barrier_type = _barrier_label + if "High Containment" in _barrier_label: + cad.crash_barrier_subtype = "High Containment" + elif "Double W-Beam" in _barrier_label or "Double W-beam" in _barrier_label: + cad.crash_barrier_subtype = "Double W-beam" + elif "Single W-Beam" in _barrier_label or "Single W-beam" in _barrier_label: + cad.crash_barrier_subtype = "Single W-beam" + else: + cad.crash_barrier_subtype = "IRC-5R" + + # Median + cad.median_type = inputs.get("median_type", "IRC 5 - Raised Kerb") + + # Railing + _railing_raw = inputs.get("railing_type", "IRC 5 - RCC Railing") + if "steel" in str(_railing_raw).lower(): + cad.railing_type = "IRC 5 - Steel Railing" + else: + cad.railing_type = "IRC 5 - RCC Railing" + cad.rail_count = int(inputs.get("railing_rail_count", 3)) + + # Stiffeners & Bracing (defaults) + cad.include_intermediate_stiffeners = True + cad.intermediate_stiffener_spacing = 2000 + cad.intermediate_stiffener_thickness = 20 + cad.intermediate_stiffener_outstand = None + cad.num_end_stiffener_pairs = 4 + cad.end_stiffener_thickness = 30 + cad.end_stiffener_outstand = None + cad.include_longitudinal_stiffeners = True + cad.num_longitudinal_stiffeners = 2 + cad.longitudinal_stiffener_thickness = 20 + cad.longitudinal_stiffener_outstand = None + cad.cross_bracing_spacing = 4000 + cb_data = inputs.get("cross_bracing", {}) + _cb_type = str(cb_data.get("bracing_type", "X-Bracing")) + cad.bracing_type = "X" if "X" in _cb_type else "K" + cad.x_bracket_option = "BOTH" + cad.k_top_bracket = True + cad.diagonal_section_type = "ANGLE" + cad.diagonal_section_dims = {"leg_h": 100, "leg_w": 50, "connection_type": "LONGER_LEG"} + cad.diagonal_thickness = 5 + cad.top_chord_section_type = "DOUBLE_CHANNEL" + cad.top_chord_section_dims = {"depth": 100, "flange_width": 50, "web_thickness":5, "flange_thickness":5} + cad.top_chord_thickness = 5 + cad.bottom_chord_section_type = "I_SECTION" + cad.bottom_chord_section_dims = {"depth": 100, "flange_width": 50, "web_thickness":5, "flange_thickness":5} + cad.bottom_chord_thickness = 5 + cad.end_diaphragm_type = "Cross Bracing" + cad.end_diaphragm_spacing = 100 + ed_data = inputs.get("end_diaphragm", {}) + _ed_type = str(ed_data.get("bracing_type", "K-Bracing")) + cad.end_diaphragm_bracing_type = "K" if "K" in _ed_type else "X" + cad.end_diaphragm_diagonal_section_type = "ANGLE" + cad.end_diaphragm_diagonal_section_dims = {"leg_h": 100} + cad.end_diaphragm_diagonal_thickness = 5 + cad.end_diaphragm_top_chord_section_type = "CHANNEL" + cad.end_diaphragm_top_chord_section_dims = {} + cad.end_diaphragm_top_chord_thickness = 5 + cad.end_diaphragm_bottom_chord_section_type = "DOUBLE_ANGLE" + cad.end_diaphragm_bottom_chord_section_dims = {"connection_type": "SHORTER_LEG"} + cad.end_diaphragm_bottom_chord_thickness = 5 + + def completion_callback(success, msg): + self.export_finished.emit(success, msg) + + handler = PlateGirderIfcExportHandler(cad, file_path, completion_callback) + handler.export_async() class InputDockIndicator(QWidget): From fa706872343d30b53d5f697f1158c44eac305686 Mon Sep 17 00:00:00 2001 From: kavish1919 Date: Mon, 11 May 2026 21:31:15 +0530 Subject: [PATCH 220/225] Add material database to repository for metadata extraction --- .gitignore | 1 + .../core/data/ResourceFiles/Intg_osdag.sqlite | Bin 0 -> 262144 bytes 2 files changed, 1 insertion(+) create mode 100644 src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sqlite diff --git a/.gitignore b/.gitignore index 834cec667..eae51057e 100644 --- a/.gitignore +++ b/.gitignore @@ -253,6 +253,7 @@ src/osdag_map_cache/ *.db *.sqlite *.sqlite3 +!src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sqlite # Project-specific ignores ospgrillage/ diff --git a/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sqlite b/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..0d14dea792fad71246707eac2dff355a70a48ca8 GIT binary patch literal 262144 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

XWlQEP$?`7kJo6!b&%fEf@ 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 Date: Wed, 13 May 2026 04:20:13 +0530 Subject: [PATCH 221/225] fix: IFC export schema compliance, DTO dims normalization, and backend delegation - Replace invalid flat IfcGeometricRepresentationContext setup with proper IFC4 hierarchy using one root 3D context and IfcGeometricRepresentationSubContext - Fix WR21 schema violation caused by CoordinateSpaceDimension=2 with IfcAxis2Placement3D - Add missing RepresentationContexts to IfcProject - Add _to_dims_dict() helper to normalize SectionDimsDTO / ISectionDimsDTO objects before storing in ExtractedObject - Fix Rolled Beam branch using d_dims.get('depth', 100) on ISectionDimsDTO - Remove hardcoded Windows-specific error log path causing secondary FileNotFoundError - Print IFC export errors to stdout instead of swallowing traceback - Add PlateGirderBridge.get_ifc_export_parameters(additional_inputs) - Delegate designed geometry extraction to get_3d_cad_parameters() - Override crash barrier, median, railing, and width values from additional_inputs - Replace duplicated 120-line MockCAD construction block in trigger_ifc_export with backend delegation - Fix incorrect flange key mappings in IFC export parameter construction --- .../plate_girder/plategirderbridge.py | 46 +++++++ .../bridge_cad_extraction.py | 16 ++- .../bridge_geometry_mapper.py | 25 ++-- .../ifc_export_bridge/bridge_ifc_generator.py | 7 +- .../ifc_export_bridge/export_ifc_handler.py | 3 +- src/osdagbridge/desktop/ui/template_page.py | 121 ++---------------- 6 files changed, 94 insertions(+), 124 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 46fd1814b..632659c9c 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -44,6 +44,8 @@ KEY_CARRIAGEWAY_WIDTH, KEY_INCLUDE_MEDIAN, KEY_FOOTPATH, + KEY_FOOTPATH_WIDTH, + KEY_RAILING_WIDTH, KEY_SKEW_ANGLE, KEY_DESIGN_MODE, KEY_GIRDER, @@ -938,6 +940,50 @@ def get_3d_cad_parameters(self) -> BridgeParametersDTO: girder_segments_dict={}, ) + def get_ifc_export_parameters(self, additional_inputs: dict | None = None) -> BridgeParametersDTO: + """ + Build a BridgeParametersDTO for IFC export. + + Identical to get_3d_cad_parameters() but overrides crash-barrier, + median, railing, footpath-width and railing-width fields from the + supplied additional_inputs dict (values from the Additional Inputs + dialog that are not part of the basic input set). + + Must be called after design() has fully run. + """ + params = self.get_3d_cad_parameters() + ai = additional_inputs or {} + + # --- Crash Barrier --- + barrier_label = str(ai.get("crash_barrier_type", params.barrier_type)) + params.barrier_type = barrier_label + if "High Containment" in barrier_label: + params.crash_barrier_subtype = "High Containment" + elif "Double W-Beam" in barrier_label or "Double W-beam" in barrier_label: + params.crash_barrier_subtype = "Double W-beam" + elif "Single W-Beam" in barrier_label or "Single W-beam" in barrier_label: + params.crash_barrier_subtype = "Single W-beam" + else: + params.crash_barrier_subtype = "IRC-5R" + + # --- Median --- + params.median_type = str(ai.get("median_type", params.median_type)) + + # --- Railing --- + railing_raw = str(ai.get("railing_type", params.railing_type)) + params.railing_type = ( + "IRC 5 - Steel Railing" if "steel" in railing_raw.lower() else "IRC 5 - RCC Railing" + ) + params.rail_count = int(ai.get("railing_rail_count", params.rail_count)) + + # --- Footpath / railing widths (additional input may override default) --- + if KEY_FOOTPATH_WIDTH in ai: + params.footpath_width = float(ai[KEY_FOOTPATH_WIDTH]) * 1000 + if KEY_RAILING_WIDTH in ai: + params.railing_width = float(ai[KEY_RAILING_WIDTH]) * 1000 + + return params + def build_graph_engine( self, figure, diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py b/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py index e749af8d8..7910df4b5 100644 --- a/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_cad_extraction.py @@ -1,6 +1,18 @@ import math +import dataclasses import numpy as np + +def _to_dims_dict(dims) -> dict: + """Normalize a section dims value to a plain dict regardless of its type.""" + if dims is None: + return {} + if isinstance(dims, dict): + return dims + if dataclasses.is_dataclass(dims): + return dataclasses.asdict(dims) + return vars(dims) if hasattr(dims, '__dict__') else {} + # Osdag Core Imports from osdagbridge.core.utils.codes.irc5_2015 import IRC5_2015 from osdagbridge.core.utils.common import ( @@ -268,7 +280,7 @@ def _extract_cross_bracings(self, n_girders, spacing): z_top = depth / 2 def add_member(p1, p2, thickness, sec_type, dims, roll, name): - braces.append(ExtractedObject("StructuralMember", p1=p1, p2=p2, T=thickness, sec_type=sec_type, dims=dims, roll=roll, ifc_name=name)) + braces.append(ExtractedObject("StructuralMember", p1=p1, p2=p2, T=thickness, sec_type=sec_type, dims=_to_dims_dict(dims), roll=roll, ifc_name=name)) def extract_bay(x, yL, yR, is_end, is_first): x_l = x + self._calculate_skew_offset(yL) @@ -304,7 +316,7 @@ def build_bracing(b_type, d_sec, d_dims, d_t, t_sec, t_dims, t_t, b_sec, b_dims, if self.cad.end_diaphragm_type == "Cross Bracing": build_bracing(self.cad.end_diaphragm_bracing_type, self.cad.end_diaphragm_diagonal_section_type, self.cad.end_diaphragm_diagonal_section_dims, self.cad.end_diaphragm_diagonal_thickness, self.cad.end_diaphragm_top_chord_section_type, self.cad.end_diaphragm_top_chord_section_dims, self.cad.end_diaphragm_top_chord_thickness, self.cad.end_diaphragm_bottom_chord_section_type, self.cad.end_diaphragm_bottom_chord_section_dims, self.cad.end_diaphragm_bottom_chord_thickness, self.cad.x_bracket_option, self.cad.k_top_bracket) else: # Rolled Beam / Welded Beam - d_dims = self.cad.end_diaphragm_dims + d_dims = _to_dims_dict(self.cad.end_diaphragm_dims) z_center = z_top - (d_dims.get("depth", 100) / 2) add_member([x_l_eff, yL, z_center], [x_r_eff, yR, z_center], 0, self.cad.end_diaphragm_section, d_dims, +1, "End Diaphragm") else: diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py b/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py index 5d7bd3d2d..4014898c7 100644 --- a/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_geometry_mapper.py @@ -13,18 +13,19 @@ def create_ifc_guid(): class BridgeGeometryMapper: def __init__(self, ifc_file): self.file = ifc_file - self._context2d = self._get_or_create_context("Model", "Plan", "GeometricCurveSet") - self._context3d = self._get_or_create_context("Model", "Body", "SweptSolid") - - def _get_or_create_context(self, ctx_type, ctx_id, ctx_type_qualifier): - contexts = self.file.by_type("IfcGeometricRepresentationContext") - for ctx in contexts: - if ctx.ContextType == ctx_type and ctx.ContextIdentifier == ctx_id: - return ctx - # Create fallback contexts - return self.file.createIfcGeometricRepresentationContext( - ContextIdentifier=ctx_id, ContextType=ctx_type, CoordinateSpaceDimension=2 if ctx_type_qualifier == "GeometricCurveSet" else 3, - Precision=1e-5, WorldCoordinateSystem=self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((0.,0.,0.))) + # IFC4 requires: one root 3-D context linked to IfcProject.RepresentationContexts, + # then sub-contexts for each representation type. + # Using a flat IfcGeometricRepresentationContext with CoordinateSpaceDimension=2 and + # an IfcAxis2Placement3D WorldCoordinateSystem violates WHERE rule WR21 and causes + # strict parsers to reject the entire file. + origin_3d = self.file.createIfcCartesianPoint((0., 0., 0.)) + place_3d = self.file.createIfcAxis2Placement3D(origin_3d) + self._model_context = self.file.createIfcGeometricRepresentationContext( + None, "Model", 3, 1e-5, place_3d, None + ) + self._context3d = self.file.createIfcGeometricRepresentationSubContext( + "Body", "Model", None, None, None, None, + self._model_context, None, "MODEL_VIEW", None ) def define_material(self, name="Steel"): diff --git a/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py b/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py index 854ad816b..a6c7120f0 100644 --- a/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py +++ b/src/osdagbridge/core/ifc_export_bridge/bridge_ifc_generator.py @@ -48,7 +48,12 @@ def initialize_file(self): angle_unit = self.file.createIfcSIUnit(None, "PLANEANGLEUNIT", None, "RADIAN") unit_assignment = self.file.createIfcUnitAssignment([length_unit, area_unit, volume_unit, angle_unit]) - self.project = self.file.createIfcProject(create_ifc_guid(), self._owner_history, Name="Osdag Plate Girder Bridge", UnitsInContext=unit_assignment) + self.project = self.file.createIfcProject( + create_ifc_guid(), self._owner_history, + Name="Osdag Plate Girder Bridge", + RepresentationContexts=[self.mapper._model_context], + UnitsInContext=unit_assignment, + ) # Site, Building, Storey (FacilityPart substitution for IFC4 Bridge) place_3d = self.mapper.create_axis2placement_3d((0., 0., 0.)) diff --git a/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py b/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py index 17fc0d8ba..c6fdd82ef 100644 --- a/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py +++ b/src/osdagbridge/core/ifc_export_bridge/export_ifc_handler.py @@ -30,8 +30,7 @@ def export(self): except Exception as e: import traceback error_msg = traceback.format_exc() - with open(r"c:\Users\Pyramid\Desktop\OsdagBridgeDev\OsdagBridge\src\osdagbridge\core\ifc_export_bridge\ifc_export_error.txt", "w") as f: - f.write(error_msg) + print(error_msg) if self.callback: self.callback(False, str(e)) diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index b8f51c605..8e441f851 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -1037,122 +1037,29 @@ def create_menu_bar_items(self): def trigger_ifc_export(self): from PySide6.QtWidgets import QFileDialog, QMessageBox from osdagbridge.core.ifc_export_bridge.export_ifc_handler import PlateGirderIfcExportHandler - - # Bypass strict type check as CustomWindow instantiates FrontendData - file_path, _ = QFileDialog.getSaveFileName(self, "Export IFC Model", "PlateGirderBridge.ifc", "IFC Files (*.ifc)") - if not file_path: return - # Map Live UI State to our standalone Exporter - class MockCAD: pass - cad = MockCAD() - inputs = self.cad_state - cad.steel_grade = str(inputs.get(KEY_GIRDER, "E 250A")).strip() - cad.concrete_grade = str(inputs.get(KEY_DECK_CONCRETE_GRADE_BASIC, "M30")).strip() - - # --- Merge additional-inputs values (crash barrier, median, railing) -- + + file_path, _ = QFileDialog.getSaveFileName( + self, "Export IFC Model", "PlateGirderBridge.ifc", "IFC Files (*.ifc)" + ) + if not file_path: + return + + # Merge additional-inputs values (crash barrier, median, railing, widths) _additional = {} if self.input_dock: ai_vals = getattr(self.input_dock, "additional_input_values", None) or {} saved_data = getattr(self.input_dock, "_additional_inputs_saved_data", None) or {} - # Merge both: saved_data is base, ai_vals overrides (it's more explicit) _additional = {**saved_data, **ai_vals} - inputs = {**inputs, **_additional} # additional values override cad_state - - # Layout & Main Dimensions - cad.span_length_L = float(inputs.get(KEY_SPAN, 25)) * 1000 - cad.num_girders = int(float(inputs.get(KEY_NO_OF_GIRDERS, 4))) - cad.girder_spacing = float(inputs.get(KEY_GIRDER_SPACING, 2.75)) * 1000 - cad.skew_angle = float(inputs.get(KEY_SKEW_ANGLE, 0)) - cad.carriageway_width = float(inputs.get(KEY_CARRIAGEWAY_WIDTH, 12)) * 1000 - # Deck Thickness handling - _dt = float(inputs.get(KEY_DECK_THICKNESS, 400)) - cad.deck_thickness = _dt if _dt > 5 else _dt * 1000 - - # Girder Variables - cad.girder_section_d = float(inputs.get(KEY_GIRDER_DEPTH, 900)) - cad.girder_section_tw = float(inputs.get(KEY_GIRDER_WEB_THICKNESS, 100)) - cad.girder_section_bf = float(inputs.get(KEY_GIRDER_TOP_FLANGE_WIDTH, 500)) - cad.girder_section_tf = float(inputs.get(KEY_GIRDER_TOP_FLANGE_THICKNESS, 260)) - cad.girder_section_bf_b = float(inputs.get(KEY_GIRDER_BOTTOM_FLANGE_WIDTH, 500)) - cad.girder_section_tf_b = float(inputs.get(KEY_GIRDER_TOP_FLANGE_THICKNESS, 260)) - - # Footpaths & Median - footpath_val = inputs.get(KEY_FOOTPATH, "None") - if footpath_val == "Single Side": cad.footpath_config = "LEFT" - elif footpath_val == "Both Sides": cad.footpath_config = "BOTH" - else: cad.footpath_config = "NONE" - - cad.footpath_width = float(inputs.get(KEY_FOOTPATH_WIDTH, 1.5)) * 1000 - cad.railing_width = float(inputs.get(KEY_RAILING_WIDTH, 0.3)) * 1000 - cad.enable_median = inputs.get(KEY_INCLUDE_MEDIAN, False) - - # Crash Barrier - _barrier_label = inputs.get("crash_barrier_type", "IRC 5 - RCC Crash Barrier") - cad.barrier_type = _barrier_label - if "High Containment" in _barrier_label: - cad.crash_barrier_subtype = "High Containment" - elif "Double W-Beam" in _barrier_label or "Double W-beam" in _barrier_label: - cad.crash_barrier_subtype = "Double W-beam" - elif "Single W-Beam" in _barrier_label or "Single W-beam" in _barrier_label: - cad.crash_barrier_subtype = "Single W-beam" - else: - cad.crash_barrier_subtype = "IRC-5R" - # Median - cad.median_type = inputs.get("median_type", "IRC 5 - Raised Kerb") + try: + cad = self.backend.get_ifc_export_parameters(_additional) + except Exception: + QMessageBox.critical(self, "Export Failed", "Please run Design before exporting IFC.") + return - # Railing - _railing_raw = inputs.get("railing_type", "IRC 5 - RCC Railing") - if "steel" in str(_railing_raw).lower(): - cad.railing_type = "IRC 5 - Steel Railing" - else: - cad.railing_type = "IRC 5 - RCC Railing" - cad.rail_count = int(inputs.get("railing_rail_count", 3)) - - # Stiffeners & Bracing (defaults) - cad.include_intermediate_stiffeners = True - cad.intermediate_stiffener_spacing = 2000 - cad.intermediate_stiffener_thickness = 20 - cad.intermediate_stiffener_outstand = None - cad.num_end_stiffener_pairs = 4 - cad.end_stiffener_thickness = 30 - cad.end_stiffener_outstand = None - cad.include_longitudinal_stiffeners = True - cad.num_longitudinal_stiffeners = 2 - cad.longitudinal_stiffener_thickness = 20 - cad.longitudinal_stiffener_outstand = None - cad.cross_bracing_spacing = 4000 - cb_data = inputs.get("cross_bracing", {}) - _cb_type = str(cb_data.get("bracing_type", "X-Bracing")) - cad.bracing_type = "X" if "X" in _cb_type else "K" - cad.x_bracket_option = "BOTH" - cad.k_top_bracket = True - cad.diagonal_section_type = "ANGLE" - cad.diagonal_section_dims = {"leg_h": 100, "leg_w": 50, "connection_type": "LONGER_LEG"} - cad.diagonal_thickness = 5 - cad.top_chord_section_type = "DOUBLE_CHANNEL" - cad.top_chord_section_dims = {"depth": 100, "flange_width": 50, "web_thickness":5, "flange_thickness":5} - cad.top_chord_thickness = 5 - cad.bottom_chord_section_type = "I_SECTION" - cad.bottom_chord_section_dims = {"depth": 100, "flange_width": 50, "web_thickness":5, "flange_thickness":5} - cad.bottom_chord_thickness = 5 - cad.end_diaphragm_type = "Cross Bracing" - cad.end_diaphragm_spacing = 100 - ed_data = inputs.get("end_diaphragm", {}) - _ed_type = str(ed_data.get("bracing_type", "K-Bracing")) - cad.end_diaphragm_bracing_type = "K" if "K" in _ed_type else "X" - cad.end_diaphragm_diagonal_section_type = "ANGLE" - cad.end_diaphragm_diagonal_section_dims = {"leg_h": 100} - cad.end_diaphragm_diagonal_thickness = 5 - cad.end_diaphragm_top_chord_section_type = "CHANNEL" - cad.end_diaphragm_top_chord_section_dims = {} - cad.end_diaphragm_top_chord_thickness = 5 - cad.end_diaphragm_bottom_chord_section_type = "DOUBLE_ANGLE" - cad.end_diaphragm_bottom_chord_section_dims = {"connection_type": "SHORTER_LEG"} - cad.end_diaphragm_bottom_chord_thickness = 5 - def completion_callback(success, msg): self.export_finished.emit(success, msg) - + handler = PlateGirderIfcExportHandler(cad, file_path, completion_callback) handler.export_async() From cb64730b8acf0d6f691318c35947a66c35cf23f5 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Mon, 11 May 2026 01:32:22 +0530 Subject: [PATCH 222/225] Add Save 3D CAD functionality --- .../plate_girder/cad_generator.py | 84 ++++++++++++ src/osdagbridge/core/utils/common.py | 31 +++++ src/osdagbridge/desktop/ui/template_page.py | 122 +++++++++++++++++- 3 files changed, 235 insertions(+), 2 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index d6066adee..c4646e557 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -820,6 +820,90 @@ def _calculate_skew_offset(lateral_position, reference_position=0): "railings": railings } + def create3Dcad(self): + """ + Collect generated model parts from `self.model_data`, normalize and fuse + them into a single TopoDS_Shape suitable for export (STEP/IGS/STL/BREP). + + Returns: + TopoDS_Shape or None + """ + + + if not getattr(self, 'model_data', None): + return None + + + + # Local imports to avoid heavy deps at module import time + from OCC.Core.TopoDS import TopoDS_Shape + from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse + from OCC.Core.TopExp import TopExp_Explorer + from OCC.Core.TopAbs import TopAbs_SOLID + + def _flatten(obj): + """Flatten nested containers/dicts into a list of elements.""" + if obj is None: + return [] + if isinstance(obj, dict): + out = [] + for v in obj.values(): + out.extend(_flatten(v)) + return out + if isinstance(obj, (list, tuple)): + out = [] + for i in obj: + out.extend(_flatten(i)) + return out + return [obj] + + def _explode_compound(shape): + """If a compound contains many solids, return the contained solids.""" + solids = [] + try: + exp = TopExp_Explorer(shape, TopAbs_SOLID) + while exp.More(): + solids.append(exp.Current()) + exp.Next() + except Exception: + # Not a compound or explorer failed; return original + return [shape] + + return solids if solids else [shape] + + # Collect shapes from model_data + shapes = [] + for v in self.model_data.values(): + shapes.extend(_flatten(v)) + + # Keep only TopoDS_Shape instances + shapes = [s for s in shapes if isinstance(s, TopoDS_Shape)] + + if not shapes: + return None + + # Explode compounds into solids + normalized = [] + for s in shapes: + normalized.extend(_explode_compound(s)) + + shapes = normalized + + from OCC.Core.BRep import BRep_Builder + from OCC.Core.TopoDS import TopoDS_Compound + + + builder = BRep_Builder() + compound = TopoDS_Compound() + + builder.MakeCompound(compound) + + for shp in shapes: + builder.Add(compound, shp) + + return compound + + def display_3dModel(self, component): hover_dict = { diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index bc947c0a0..888c6b685 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -363,3 +363,34 @@ def connectdb(table_name: str) -> list[str]: except sqlite3.Error as e: raise LookupError(f"Error querying database in connectdb(): {e}") + +import platform +import os + +def get_documents_folder(): + system = platform.system() + + if system == "Windows": + # Windows: typically C:\Users\Username\Documents + docs_path = Path.home() / "Documents" + if not docs_path.exists(): + docs_path = Path.home() / "OneDrive" / "Documents" + elif system == "Darwin": # macOS + # macOS: typically /Users/Username/Documents + docs_path = Path.home() / "Documents" + elif system == "Linux": + # Linux: typically /home/username/Documents + # Also check XDG_DOCUMENTS_DIR for custom locations + xdg_docs = os.environ.get("XDG_DOCUMENTS_DIR") + if xdg_docs: + docs_path = Path(xdg_docs) + else: + docs_path = Path.home() / "Documents" + else: + # Fallback to home directory for unknown systems + docs_path = Path.home() + + # Ensure the directory exists, otherwise fall back to home + if not docs_path.exists(): + docs_path = Path.home() + return str(docs_path) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 8e441f851..4aaf55e98 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -1,10 +1,11 @@ import sys +import os from PySide6.QtWidgets import ( QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, - QMenuBar, QSplitter, QSizePolicy, QPushButton, QLineEdit, QComboBox, + QMenuBar, QSplitter, QSizePolicy, QPushButton, QLineEdit, QComboBox, QFileDialog, ) from PySide6.QtSvgWidgets import QSvgWidget -from PySide6.QtCore import Qt, QFile, QTextStream, Signal,QTimer +from PySide6.QtCore import Qt, QFile, QTextStream, Signal, QTimer from PySide6.QtGui import QIcon, QAction, QKeySequence from osdagbridge.desktop.ui.docks.input_dock import InputDock @@ -906,6 +907,121 @@ def resizeEvent(self, event): # Being deleted, ignore return + def save3DcadImages(self, backend): + """ + Save 3D Model in various formats: IGS, STEP, STL, BREP + """ + # Prefer the 3D CAD widget's generator as the source of shapes + from OCC.Core.STEPControl import STEPControl_Writer, STEPControl_AsIs + from OCC.Core.Interface import Interface_Static_SetCVal + from OCC.Core.IFSelect import IFSelect_RetDone + from OCC.Core.StlAPI import StlAPI_Writer + from OCC.Core import BRepTools + from OCC.Core import IGESControl + + + # Ensure 3D CAD view is currently active / rendered + if not getattr(self, 'cad_3d_view_active', False): + CustomMessageBox( + title="Warning", + text="3D CAD view is not active. Show the 3D CAD view before exporting.", + dialogType=MessageBoxType.Warning + ).exec() + return + + # Prefer shapes from the CAD widget generator if available + fuse_model = None + try: + if hasattr(self, 'cad_3d_widget') and getattr(self.cad_3d_widget, 'generator', None): + fuse_model = self.cad_3d_widget.generator.create3Dcad() + + except Exception: + fuse_model = None + + # Fallback: try backend.create3Dcad() if widget didn't provide one + if fuse_model is None: + try: + fuse_model = backend.create3Dcad() if hasattr(backend, 'create3Dcad') else None + except Exception: + fuse_model = None + + if fuse_model is None: + CustomMessageBox( + title="Warning", + text="Could not generate 3D model. Please run Design and render the 3D CAD view first.", + dialogType=MessageBoxType.Warning + ).exec() + return + + # Open save dialog + files_types = "IGS (*.igs);;STEP (*.stp);;STL (*.stl);;BREP (*.brep)" + default_path = get_documents_folder() + + filePath, _ = QFileDialog.getSaveFileName(self, 'Export', os.path.join(default_path, "untitled.igs"), + files_types) + + fName = str(filePath) + + if not fName: + CustomMessageBox( + title="Warning", + text="File not saved", + dialogType=MessageBoxType.Warning + ).exec() + return + + try: + file_extension = fName.split(".")[-1].lower() + + if file_extension == 'igs' or file_extension == 'iges': + IGESControl.IGESControl_Controller().Init() + iges_writer = IGESControl.IGESControl_Writer() + iges_writer.AddShape(fuse_model) + iges_writer.Write(fName) + + elif file_extension == 'brep': + # BRepTools can write TopoDS shapes directly + try: + BRepTools.Write(fuse_model, fName) + except Exception: + # fallback to breptools namespace if available + try: + BRepTools.breptools.Write(fuse_model, fName) + except Exception as e: + raise + + elif file_extension == 'stp' or file_extension == 'step': + # Initialize the STEP exporter + step_writer = STEPControl_Writer() + Interface_Static_SetCVal("write.step.schema", "AP203") + + # Transfer shapes and write file + step_writer.Transfer(fuse_model, STEPControl_AsIs) + status = step_writer.Write(fName) + + if status != IFSelect_RetDone: + raise Exception("STEP export failed") + + elif file_extension == 'stl': + stl_writer = StlAPI_Writer() + stl_writer.SetASCIIMode(True) + stl_writer.Write(fuse_model, fName) + + else: + raise ValueError(f"Unsupported file format: {file_extension}") + + CustomMessageBox( + title="Success", + text=f"File Saved Successfully: {fName}", + dialogType=MessageBoxType.Success + ).exec() + + except Exception as e: + CustomMessageBox( + title="Error", + text=f"Failed to save file: {str(e)}", + dialogType=MessageBoxType.Critical + ).exec() def create_menu_bar_items(self): # File Menus file_menu = self.menu_bar.addMenu("File") @@ -932,6 +1048,7 @@ def create_menu_bar_items(self): save_3d_action = QAction("Save 3D Model", self) save_3d_action.setShortcut(QKeySequence("Alt+3")) + save_3d_action.triggered.connect(lambda: self.save3DcadImages(self.backend)) file_menu.addAction(save_3d_action) save_cad_action = QAction("Save CAD Image", self) @@ -1164,6 +1281,7 @@ def __init__(self, parent): output_layout.addWidget(self.output_label) self.output_label.setFixedWidth(28) + class CentralPlaceholderWidget(QWidget): """ Temporary placeholder for 3D CAD / Plots views. From cf8a2baf1165b8578685ec5342733e1f580750eb Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Thu, 14 May 2026 00:29:33 +0530 Subject: [PATCH 223/225] changed the order of the icon's --- src/osdagbridge/desktop/ui/template_page.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 4aaf55e98..e93eb7579 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -155,15 +155,6 @@ def mousePressEvent(self, event): control_button_layout.setSpacing(10) control_button_layout.setContentsMargins(5,5,5,5) - # Input Dock - self.input_dock_control = ClickableSvgWidget() - self.input_dock_control.setFixedSize(18, 18) - self.input_dock_control.load(":/vectors/view_btn/input_dock_active.svg") - self.input_dock_control.setToolTip("Toggle Input Dock") - self.input_dock_control.clicked.connect(self.input_dock_toggle) - self.input_dock_active = True - control_button_layout.addWidget(self.input_dock_control) - # Cross-section view control self.cross_section_control = ClickableSvgWidget() self.cross_section_control.setFixedSize(18, 18) @@ -209,6 +200,15 @@ def mousePressEvent(self, event): self.plots_view_active = False control_button_layout.addWidget(self.plots_control) + # Input Dock + self.input_dock_control = ClickableSvgWidget() + self.input_dock_control.setFixedSize(18, 18) + self.input_dock_control.load(":/vectors/view_btn/input_dock_active.svg") + self.input_dock_control.setToolTip("Toggle Input Dock") + self.input_dock_control.clicked.connect(self.input_dock_toggle) + self.input_dock_active = True + control_button_layout.addWidget(self.input_dock_control) + self.output_dock_control = ClickableSvgWidget() self.output_dock_control.load(":/vectors/view_btn/output_dock_inactive.svg") self.output_dock_control.setFixedSize(18, 18) From 8dad15a6159fe852b5fe1dd7bebdd680ed21c3a7 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Mon, 18 May 2026 14:46:54 +0530 Subject: [PATCH 224/225] feat: added navcube to mpl 3d plots --- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 89 +++++++++++++- .../ui/utils/mpl_widget_navcube_sync.py | 116 ++++++++++++++++++ 2 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 src/osdagbridge/desktop/ui/utils/mpl_widget_navcube_sync.py diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index 92e68d93d..b5ea89be6 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -7,9 +7,12 @@ from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QComboBox, QSizePolicy, QPushButton, - QFrame, QLabel, QCheckBox, QScrollArea + QFrame, QLabel, QCheckBox, QScrollArea, QApplication ) -from PySide6.QtCore import Qt, QEvent +from PySide6.QtCore import Qt, QEvent, QTimer + +from navcube import NavCubeOverlay, NavCubeStyle +from osdagbridge.desktop.ui.utils.mpl_widget_navcube_sync import MatplotlibNavCubeSync from osdagbridge.core.bridge_types.plate_girder.plot_generator import ( build_figure_sfd, @@ -137,6 +140,30 @@ def __init__(self, parent=None): self._summary_overlay = SummaryOverlay(self._canvas) self._summary_overlay.hide() + # ── NavCube: create overlay + sync bridge ────────────────── + self._navcube = NavCubeOverlay(self._canvas, overlay=False, style=NavCubeStyle( + size=65, theme="light", + face_color=(242, 244, 247), edge_color=(218, 224, 232), + corner_color=(228, 232, 238), text_color=(45, 55, 72), + border_color=(30, 30, 30), border_secondary_color=(80, 80, 80), + border_width_main=1.6, border_width_secondary=0.9, + hover_color=(145, 176, 20, 235), hover_text_color=(255, 255, 255), + dot_color=(60, 60, 60, 180), shadow_color=(20, 20, 20, 45), + shadow_offset_x=2.0, shadow_offset_y=2.5, + face_color_dark=(52, 62, 76), edge_color_dark=(42, 52, 65), + corner_color_dark=(47, 57, 70), text_color_dark=(210, 220, 232), + border_color_dark=(200, 200, 200), border_secondary_color_dark=(130, 130, 130), + hover_color_dark=(145, 176, 20, 235), + show_gizmo=False, inactive_opacity=0.70, animation_ms=300, + light_direction=(-0.5, -1.0, -1.5), + )) + self._navcube.hide() + self._navcube_sync = MatplotlibNavCubeSync(self._canvas, self._navcube) + self._canvas.mpl_connect("button_press_event", lambda e: self._navcube_sync.set_interaction_active(True) if e.button == 1 else None) + self._canvas.mpl_connect("button_release_event", lambda e: self._navcube_sync.set_interaction_active(False) if e.button == 1 else None) + self._canvas.mpl_connect("motion_notify_event", lambda e: self._navcube_sync.force_sync() if e.button == 1 else None) + # ────────────────────────────────────────────────────────── + # zoom toolbar self._btn_zoom_in = QPushButton("+") self._btn_zoom_out = QPushButton("−") @@ -335,6 +362,63 @@ def update_plot(self, *_args): self._zoom_scale = 1.0 self._store_orig_limits() + # Show NavCube for 3-D plots only, hide for 2-D. + QTimer.singleShot(100, self._update_navcube_visibility) + + # ── NavCube helpers ──────────────────────────────────────────── + + def _update_navcube_visibility(self): + from mpl_toolkits.mplot3d import Axes3D + has_3d = any(isinstance(ax, Axes3D) for ax in self._fig.axes) + if has_3d: + self._resize_navcube() + self._position_navcube() + self._navcube.mark_ready() + self._navcube.show() + self._navcube.raise_() + self._navcube_sync.force_sync() + else: + self._navcube.hide() + + def _resize_navcube(self): + """Scale NavCube to 8% of the shorter canvas edge, DPI-aware. (mirrors CustomViewer3d)""" + vp_logical = min(self._canvas.width(), self._canvas.height()) + if vp_logical < 10: + return + nc = self._navcube + app = QApplication.instance() + screen = nc.screen() if nc.isVisible() else None + if screen is None and app: + screen = app.primaryScreen() + dpr = max(1.0, screen.devicePixelRatio()) if screen else 1.0 + physical_dpi = max(72.0, min(screen.physicalDotsPerInch(), 400.0)) if screen else 96.0 + vp_physical = vp_logical * dpr + ref_size = max(40, min(round(vp_physical * 0.08 * 96.0 / physical_dpi), 90)) + ref_padding = round(10 * 96.0 / physical_dpi) + ref_scale = round(25.0 * ref_size / 100.0, 2) + if (nc._style.size == ref_size and nc._style.padding == ref_padding + and abs(nc._style.scale - ref_scale) < 0.05): + return + nc._style.size = ref_size + nc._style.padding = ref_padding + nc._style.scale = ref_scale + nc._update_dpi() + + def _position_navcube(self): + padding = 10 + x = max(0, self._canvas.width() - self._navcube.width() - padding) + self._navcube.move(x, padding) + + def eventFilter(self, obj, event): + if obj is self._canvas and event.type() == QEvent.Type.Resize: + self._resize_navcube() + self._position_navcube() + if self._navcube.isVisible(): + self._navcube.raise_() + return super().eventFilter(obj, event) + + # ────────────────────────────────────────────────────────────── + # NATIVE SLOTS: The 'checked' variable is now passed instantly by Qt! def _on_summary_toggled(self, checked): self._is_summary_checked = checked @@ -386,6 +470,7 @@ def _on_grillage_toggled(self, checked: bool): self._canvas.draw() self._zoom_scale = 1.0 self._store_orig_limits() + QTimer.singleShot(100, self._update_navcube_visibility) else: self.update_plot() diff --git a/src/osdagbridge/desktop/ui/utils/mpl_widget_navcube_sync.py b/src/osdagbridge/desktop/ui/utils/mpl_widget_navcube_sync.py new file mode 100644 index 000000000..3d4348a7a --- /dev/null +++ b/src/osdagbridge/desktop/ui/utils/mpl_widget_navcube_sync.py @@ -0,0 +1,116 @@ +""" +Bridges a Matplotlib FigureCanvasQTAgg (with an Axes3D) to a NavCubeOverlay. +Mirrors the OCCNavCubeSync pattern exactly. + +Usage: + sync = MatplotlibNavCubeSync(canvas, navicube) + sync.force_sync() # push camera immediately (call after update_plot) + sync.teardown() # call on widget close +""" +import math +from PySide6.QtCore import QTimer + + +def _get_3d_ax(canvas): + from mpl_toolkits.mplot3d import Axes3D + for ax in canvas.figure.axes: + if isinstance(ax, Axes3D): + return ax + return None + + +def _elev_azim_to_inward(elev_deg, azim_deg): + elev = math.radians(elev_deg) + azim = math.radians(azim_deg) + return math.cos(elev) * math.cos(azim), math.cos(elev) * math.sin(azim), math.sin(elev) + + +def _inward_to_elev_azim(dx, dy, dz): + mag = math.sqrt(dx*dx + dy*dy + dz*dz) + if mag < 1e-10: + return 30.0, -60.0 + dx, dy, dz = dx/mag, dy/mag, dz/mag + return math.degrees(math.asin(max(-1.0, min(1.0, dz)))), math.degrees(math.atan2(dy, dx)) + + +def _up_vector(dx, dy, dz, roll_deg=0.0): + ref = (1.0, 0.0, 0.0) if abs(dz) > 0.999 else (0.0, 0.0, 1.0) + dot = ref[0]*dx + ref[1]*dy + ref[2]*dz + ux, uy, uz = ref[0]-dot*dx, ref[1]-dot*dy, ref[2]-dot*dz + m = math.sqrt(ux*ux + uy*uy + uz*uz) + if m < 1e-10: + return 0.0, 0.0, 1.0 + ux, uy, uz = ux/m, uy/m, uz/m + if abs(roll_deg) < 0.01: + return ux, uy, uz + c, s = math.cos(math.radians(roll_deg)), math.sin(math.radians(roll_deg)) + cx, cy, cz = dy*uz-dz*uy, dz*ux-dx*uz, dx*uy-dy*ux + return ux*c+cx*s, uy*c+cy*s, uz*c+cz*s + + +class MatplotlibNavCubeSync: + _TICK_MS = 50 + + def __init__(self, canvas, navicube): + self._canvas = canvas + self._navicube = navicube + self._last = (None, None, None) + + navicube.viewOrientationRequested.connect(self._on_orientation_requested) + + self._tmr = QTimer() + self._tmr.timeout.connect(self._tick) + self._tmr.start(self._TICK_MS) + + def set_interaction_active(self, active: bool): + if self._navicube: + self._navicube.set_interaction_active(active) + + def force_sync(self): + self._last = (None, None, None) + self._tick() + + def teardown(self): + self._tmr.stop() + try: + if self._navicube: + self._navicube.viewOrientationRequested.disconnect(self._on_orientation_requested) + except Exception: + pass + self._canvas = self._navicube = None + + def _tick(self): + if not self._canvas or not self._navicube: + return + ax = _get_3d_ax(self._canvas) + if ax is None: + return + try: + elev = float(ax.elev) + azim = float(ax.azim) + roll = float(getattr(ax, "roll", 0.0)) + except Exception: + return + if (elev, azim, roll) == self._last: + return + self._last = (elev, azim, roll) + dx, dy, dz = _elev_azim_to_inward(elev, azim) + ux, uy, uz = _up_vector(dx, dy, dz, roll) + try: + self._navicube.push_camera(dx, dy, dz, ux, uy, uz) + except Exception: + pass + + def _on_orientation_requested(self, px, py, pz, ux, uy, uz): + if not self._canvas: + return + ax = _get_3d_ax(self._canvas) + if ax is None: + return + elev, azim = _inward_to_elev_azim(-px, -py, -pz) + try: + ax.view_init(elev=elev, azim=azim, roll=0) + self._canvas.draw_idle() + self._last = (None, None, None) + except Exception: + pass \ No newline at end of file From 1ab7c712541839560d412435ebe0189136dda433 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Tue, 19 May 2026 04:14:31 +0530 Subject: [PATCH 225/225] Remove duplicate dump_plot_data methods and dead debug code --- .../plate_girder/plot_generator.py | 605 +++++++++++------- src/osdagbridge/desktop/ui/mpl_plot_widget.py | 170 +++-- tools/view_results.py | 70 ++ 3 files changed, 555 insertions(+), 290 deletions(-) create mode 100644 tools/view_results.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py index 51d0c9e80..14cf5921c 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plot_generator.py @@ -126,42 +126,66 @@ def find_component(name): # DRAWING HELPERS (matplotlib 3-D) # ============================================================================= -def _add_grillage_background(ax, nodes, members, x_tol=3, z_tol=3): - """ - Draw the structural grid by grouping nodes rather than tracing element tags. - - • Longitudinal lines — nodes sharing the same z-position connected in x-order. - • Transverse lines — nodes sharing the same x-position connected in z-order. - - This guarantees that transverse connections are visible regardless of how - ospgrillage numbers its elements or the current camera angle. - """ - from collections import defaultdict - - # round keys to avoid floating-point scatter - by_z = defaultdict(list) # z_key → [x, ...] - by_x = defaultdict(list) # x_key → [z, ...] - - for coord in nodes.values(): - rx = round(coord[0], x_tol) - rz = round(coord[2], z_tol) - by_z[rz].append(coord[0]) - by_x[rx].append(coord[2]) - - long_kw = dict(color="darkgrey", linewidth=0.8, alpha=0.5, zorder=1) - trans_kw = dict(color="slategrey", linewidth=1.8, alpha=0.8, zorder=1) - - # longitudinal lines (along span) - for z_val, x_vals in by_z.items(): - x_sorted = sorted(set(x_vals)) - if len(x_sorted) > 1: - ax.plot(x_sorted, [z_val] * len(x_sorted), [0] * len(x_sorted), **long_kw) - - # transverse lines (across width) - for x_val, z_vals in by_x.items(): - z_sorted = sorted(set(z_vals)) - if len(z_sorted) > 1: - ax.plot([x_val] * len(z_sorted), z_sorted, [0] * len(z_sorted), **trans_kw) +def _add_grillage_background(ax, nodes, members, x_tol=3, z_tol=3, show_transverse=False): + """ + Draw the structural grid by grouping nodes rather than tracing element tags. + """ + from collections import defaultdict + + by_z = defaultdict(list) # z_key → [x, ...] + by_x = defaultdict(list) # x_key → [z, ...] + + for coord in nodes.values(): + rx = round(coord[0], x_tol) + rz = round(coord[2], z_tol) + by_z[rz].append(coord[0]) + by_x[rx].append(coord[2]) + + # ========================================== + # 1. THE LINES (Transparent Green & Grey) + # ========================================== + # Original structural green (#388E3C) but 70% transparent (alpha=0.3) + long_kw = dict(color="#388E3C", linewidth=1.0, alpha=0.3, zorder=1) + + # Soft grey for the transverse cross-beams (alpha=0.4) + trans_kw = dict(color="slategrey", linewidth=1.2, alpha=0.4, zorder=1) + + # longitudinal lines (along span) + for z_val, x_vals in by_z.items(): + x_sorted = sorted(set(x_vals)) + if len(x_sorted) > 1: + ax.plot(x_sorted, [z_val] * len(x_sorted), [0] * len(x_sorted), **long_kw) + + if by_x: # Quick safety check to ensure we have data + min_x = min(by_x.keys()) + max_x = max(by_x.keys()) + + for x_val, z_vals in by_x.items(): + # Check if this specific line is at the absolute start or end of the bridge + is_end_line = (x_val == min_x or x_val == max_x) + + # Draw it if the Master Switch is ON, OR if it's an end line! + if show_transverse or is_end_line: + z_sorted = sorted(set(z_vals)) + if len(z_sorted) > 1: + ax.plot([x_val] * len(z_sorted), z_sorted, [0] * len(z_sorted), **trans_kw) + # ========================================== + # 3. THE DOTS (Sniper Fix for Z-Fighting) + # ========================================== + inner_xs, inner_zs, inner_ys = [], [], [] + + if by_x: + min_x = min(by_x.keys()) + max_x = max(by_x.keys()) + + # Only collect dots that are NOT at the absolute ends of the bridge + for coord in nodes.values(): + if coord[0] != min_x and coord[0] != max_x: + inner_xs.append(coord[0]) + inner_zs.append(coord[2]) + inner_ys.append(0) # Base elevation + + ax.scatter(inner_xs, inner_zs, inner_ys, color="#388E3C", alpha=0.4, s=5, zorder=2, depthshade=False) def _add_coordinate_triad(ax, nodes, scale=0.12): @@ -254,14 +278,14 @@ def _add_supports(ax, nodes, members, edge_dist=0.0): rol_z.append(nodes[n_right][2]) # Pinned supports (Left side) -> Green Diamond - ax.scatter(pin_x, pin_z, np.zeros_like(pin_x), marker='D', s=70, + ax.scatter(pin_x, pin_z, np.zeros_like(pin_x), marker='^', s=70, color='#7CB342', edgecolors='black', linewidths=1.5, - zorder=6, depthshade=False, gid="supports") + zorder=1000, depthshade=False, gid="supports") # Roller supports (Right side) -> Yellow Circle ax.scatter(rol_x, rol_z, np.zeros_like(rol_x), marker='o', s=70, color='#FBC02D', edgecolors='black', linewidths=1.5, - zorder=6, depthshade=False, gid="supports") + zorder=1000, depthshade=False, gid="supports") # ============================================================================= @@ -293,9 +317,9 @@ def build_figure_grillage(nodes, members, edge_dist=0.0): ax.set_zlim(-x_range * 0.05, x_range * 0.15) ax.set_box_aspect([x_range, z_range, x_range * 0.30]) - _add_grillage_background(ax, nodes, members) + _add_grillage_background(ax, nodes, members, show_transverse=True) _add_coordinate_triad(ax, nodes) - _add_supports(ax, nodes, members, edge_dist=edge_dist) + girders = _find_girders(nodes, members) girder_items = list(girders.items()) @@ -377,7 +401,7 @@ def auto_hide(): timer.add_callback(auto_hide) timer.start() - + _add_supports(ax, nodes, members, edge_dist=edge_dist) ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel("", fontsize=10, labelpad=8) @@ -405,26 +429,14 @@ def auto_hide(): def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): """ Build a 3-D matplotlib figure showing the Shear Force Diagram. - - Parameters - ---------- - ds : xarray.Dataset — analysis results (must have 'forces' DataArray) - force_key : str — one of FORCE_MAP keys, e.g. "Fy" - nodes : dict — {tag: [x, y, z]} - members : dict — {tag: [n1, n2]} - edge_dist : float — overhang distance; when > 0 the outermost two - girders are edge beams and are skipped in the - force diagram (their lines remain visible via - the grillage background). - - Returns - ------- - fig : matplotlib.figure.Figure """ comp_i_name, comp_j_name = FORCE_MAP[force_key] disp_key = FORCE_DISPLAY.get(force_key, force_key) girders = _find_girders(nodes, members) + # Use muted gray/slate for standard non-active node values + standard_gray = "#455A64" + fig = plt.figure(figsize=(14, 6), dpi=110, facecolor="white") ax = fig.add_subplot(111, projection="3d", facecolor="white") @@ -432,14 +444,19 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): all_zs = [coord[2] for coord in nodes.values()] x_range = max(all_xs) - min(all_xs) or 1.0 z_range = max(all_zs) - min(all_zs) or 1.0 - ax.set_xlim(min(all_xs), max(all_xs)) - ax.set_ylim(min(all_zs), max(all_zs)) + + x_min, x_max = min(all_xs), max(all_xs) + z_min, z_max = min(all_zs), max(all_zs) + + x_pad = (x_max - x_min) * 0.05 if (x_max - x_min) != 0 else 1.0 + z_pad = (z_max - z_min) * 0.05 if (z_max - z_min) != 0 else 1.0 + + ax.set_xlim(x_min - x_pad, x_max + x_pad) + ax.set_ylim(z_min - z_pad, z_max + z_pad) ax.set_box_aspect([x_range, z_range, x_range * 0.30]) - _add_grillage_background(ax, nodes, members) + _add_grillage_background(ax, nodes, members, show_transverse=False) - _add_supports(ax, nodes, members, edge_dist=edge_dist) - shear_color = "#1565C0" fill_color = "#90CAF9" base_color = "#388E3C" @@ -449,6 +466,8 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): _scatter_objs = [] _scatter_data = {} + summary_data = {} + for i, (z_val, elems) in enumerate(girder_items): is_edge_beam = edge_dist > 0 and (i == 0 or i == n_girders - 1) girder_name = f"G{i}" if edge_dist > 0 else f"G{i + 1}" @@ -457,38 +476,23 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): elems, members, nodes, comp_i_name, comp_j_name, ds ) - # The j-end force from OpenSees uses the opposite sign convention. - # Negate the last value so the rightmost node shows the correct shear. Vy = Vy.copy() Vy[-1] = -Vy[-1] z_base = float(np.mean(zs)) z_arr = np.full_like(xs, z_base) - # baseline (solid) - grey for edge beams, green for structural - ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], - color="slategrey" if is_edge_beam else base_color, - linewidth=1.5, zorder=3) - - # edge beams: baseline only, no markers / label / force diagram if is_edge_beam: continue ax.scatter(xs, z_arr, np.zeros_like(xs), - color=base_color, s=18, zorder=4, depthshade=False) + color=base_color, s=5, zorder=4, depthshade=False, alpha=0.4) - # girder label + dynamic_zorder = 100 - i ax.text(xs[0] - (x_range * 0.02), z_base, 0, f"{girder_name}", - color="black", fontsize=11, fontweight="normal", - ha="right", va="center", zorder=6, - bbox=dict(boxstyle="round,pad=0.2", facecolor="white", - alpha=0.8, edgecolor="none")) - - # val_range = max(Vy) - min(Vy) - # if val_range == 0: - # shear_scale = 1.0 if max(Vy) == 0 else 0.25 * abs((max(xs) - min(xs)) / max(Vy)) - # else: - # shear_scale = 0.25 * abs((max(xs) - min(xs)) / val_range) + color="black", fontsize=11, ha="right", va="center", + zorder=dynamic_zorder, + bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) x_step = np.repeat(xs, 2)[1:-1] Vy_step = np.repeat(Vy[:-1], 2) @@ -502,25 +506,77 @@ def build_figure_sfd(ds, force_key, nodes, members, edge_dist=0.0): color=fill_color, alpha=0.25, linewidth=0, antialiased=False, zorder=2 ) - # shear step line ax.plot(x_step, z_step, y_step, color=shear_color, linewidth=2.0, zorder=4) - # vertical cliff lines for xi, vyi in zip(xs, Vy): ax.plot([xi, xi], [z_base, z_base], [0, vyi], color=shear_color, linewidth=1.2, alpha=0.7, zorder=3) - for xi, vyi in zip(xs, Vy): - ax.text(xi, z_base, vyi, f" {vyi:.2f}", color="#666666", fontsize=6, zorder=5, gid="all_vals") sc = ax.scatter(xs, z_arr, Vy, color=shear_color, s=30, zorder=5, depthshade=False) _scatter_objs.append(sc) _scatter_data[id(sc)] = (node_ids, xs, Vy) - # hover annotations + if len(Vy) > 0: + idx_max = int(np.argmax(Vy)) + idx_min = int(np.argmin(Vy)) + + summary_data[girder_name] = { + "max": float(Vy[idx_max]), + "min": float(Vy[idx_min]) + } + + # ========================================== + # CLEANED Extreme Value Logic (Nodes and Text) + # ========================================== + + # Use Prominent BLACK (like BMD) for extreme node highlights and text + extreme_align_color = "black" + + # Max Node Highlight and Text (Highest Positive) + ax.plot([xs[idx_max]], [z_base], [Vy[idx_max]], + marker="o", markersize=9, color=extreme_align_color, markeredgecolor="white", markeredgewidth=1.5, + linestyle="None", zorder=10, gid="max_line") + + # CLEAN: Removed "Max:" prefix. + ax.text(xs[idx_max], z_base, Vy[idx_max], f" {Vy[idx_max]:.3f} kN", + color=extreme_align_color, fontsize=7, fontweight="bold", ha="left", va="bottom", zorder=11, + gid="max_line", bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) + + # Min Node Highlight and Text (Lowest Negative) + ax.plot([xs[idx_min]], [z_base], [Vy[idx_min]], + marker="o", markersize=9, color=extreme_align_color, markeredgecolor="white", markeredgewidth=1.5, + linestyle="None", zorder=10, gid="min_line") + + # CLEAN: Removed "Min:" prefix. + ax.text(xs[idx_min], z_base, Vy[idx_min], f" {Vy[idx_min]:.3f} kN", + color=extreme_align_color, fontsize=7, fontweight="bold", ha="right", va="top", zorder=11, + gid="min_line", bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8, edgecolor="none")) + + # "All" Values Staggered Labels (Muted Gray) + for j in range(len(xs)): + if abs(Vy[j]) > 1e-4: + if j == idx_max or j == idx_min: + continue + + v_align = "bottom" if j % 2 == 0 else "top" + h_align = "left" if i % 2 == 0 else "right" + + ax.text(xs[j], z_base, Vy[j], + f" {Vy[j]:.3f} kN", + color=standard_gray, fontsize=7, ha=h_align, va=v_align, zorder=6, + gid="all_vals", bbox=dict(boxstyle="round,pad=0.1", facecolor="white", alpha=0.7, edgecolor="none")) + + # ========================================== + # Hover Annotations (With Garbage-Collection Fix) + # ========================================== if _MPLCURSORS and _scatter_objs: cursor = mplcursors.cursor(_scatter_objs, hover=True) - cursor._timers = {} # THE FIX: A safe dictionary to store active timers + + # 🚨 THE FIX: Attach cursor and timers to the figure so Python's + # Garbage Collector doesn't delete them the moment the function ends! + fig._custom_cursor = cursor + fig._hover_timers = {} @cursor.connect("add") def on_add(sel, _data=_scatter_data, _fk=disp_key): @@ -529,30 +585,32 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): sel.annotation.set_text( f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kN" ) - sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) + sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9, edgecolor="#BBBBBB") - fig = sel.annotation.figure - timer = fig.canvas.new_timer(interval=6500) - timer.single_shot = True - - # Store the timer safely in our dictionary using the selection's unique ID + # 1. Stop any existing timer for this specific hover box to prevent glitching sel_id = id(sel) - cursor._timers[sel_id] = timer + if sel_id in fig._hover_timers: + fig._hover_timers[sel_id].stop() + + # 2. Create the new 6.5-second timer + timer = fig.canvas.new_timer(interval=3000) + timer.single_shot = True + fig._hover_timers[sel_id] = timer def auto_hide(): try: - if sel in cursor.selections: - cursor.remove_selection(sel) - fig.canvas.draw_idle() + # Safely hide the text box visually instead of fighting mplcursors internal arrays + sel.annotation.set_visible(False) + fig.canvas.draw_idle() except Exception: pass finally: - # Clean up the dictionary reference to free memory - cursor._timers.pop(sel_id, None) + fig._hover_timers.pop(sel_id, None) timer.add_callback(auto_hide) timer.start() + _add_supports(ax, nodes, members, edge_dist=edge_dist) ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel(f"{disp_key} (kN)", fontsize=10, labelpad=8) @@ -562,7 +620,6 @@ def auto_hide(): ax.xaxis.pane.fill = False ax.yaxis.pane.fill = False ax.zaxis.pane.fill = False - # Professional, high-contrast bounding box borders ax.xaxis.pane.set_edgecolor("#555555") ax.yaxis.pane.set_edgecolor("#555555") ax.zaxis.pane.set_edgecolor("#555555") @@ -574,13 +631,10 @@ def auto_hide(): ax.zaxis.pane.set_alpha(1.0) ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) - # Force the 3D plot to use the maximum available canvas space - # Dedicate 18% of the right side purely to the massive axis labels. - # This naturally shoves the 3D bridge perfectly into the center of the screen! - # fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) _add_coordinate_triad(ax, nodes) - return fig + ax.set_axis_off() + return fig, summary_data # ============================================================================= # BMD PLOT @@ -621,9 +675,9 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): ax.set_ylim(min(all_zs), max(all_zs)) ax.set_box_aspect([x_range, z_range, x_range * 0.30]) - _add_grillage_background(ax, nodes, members) + _add_grillage_background(ax, nodes, members, show_transverse=False) + - _add_supports(ax, nodes, members, edge_dist=edge_dist) moment_color = "#C62828" fill_color = "#EF9A9A" @@ -647,23 +701,31 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): z_arr = np.full_like(xs, z_base) # baseline (solid) - grey for edge beams, green for structural - ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], - color="slategrey" if is_edge_beam else base_color, - linewidth=1.5, zorder=3) + # ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], + # color="slategrey" if is_edge_beam else base_color, + # linewidth=1.0, alpha=0.3, zorder=3) # edge beams: baseline only, no markers / label / force diagram if is_edge_beam: continue ax.scatter(xs, z_arr, np.zeros_like(xs), - color=base_color, s=18, zorder=4, depthshade=False) + color=base_color, s=5, zorder=4, depthshade=False, alpha=0.4) # girder label + # 1. Reverse the stack: G1 (i=0) gets zorder 100, G2 gets 99, etc. + dynamic_zorder = 100 - i + + ax.text(xs[0] - (x_range * 0.02), z_base, 0, f"{girder_name}", - color="black", fontsize=11, fontweight="normal", - ha="right", va="center", zorder=6, - bbox=dict(boxstyle="round,pad=0.2", facecolor="white", - alpha=0.8, edgecolor="none")) + color="black", fontsize=11, ha="right", va="center", + zorder=dynamic_zorder, + bbox=dict( + boxstyle="round,pad=0.2", + facecolor="white", + alpha=0.8, # Fades the white background box + edgecolor="none" + )) # val_range = max(Mz) - min(Mz) # if val_range == 0: @@ -703,10 +765,14 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): for xi, yi, mzi in zip(xs, y_plot, Mz): ax.text(xi, z_base, yi, f" {mzi:.2f}", color="#555555", fontsize=7, zorder=5, gid="all_vals") - sc = ax.scatter(xs, z_arr, y_plot, + # Slicing [1:-1] strips away the first and last dots so the supports stay clean! + sc = ax.scatter(xs[1:-1], z_arr[1:-1], -Mz[1:-1], color=moment_color, s=30, zorder=5, depthshade=False) + _scatter_objs.append(sc) - _scatter_data[id(sc)] = (node_ids, xs, Mz) + + # CRITICAL: You must slice the hover data too, or the tooltip will show the wrong node! + _scatter_data[id(sc)] = (node_ids[1:-1], xs[1:-1], Mz[1:-1]) summary_data[girder_name] = {"max": float(max(Mz)), "min": float(min(Mz))} @@ -718,13 +784,24 @@ def build_figure_bmd(ds, force_key, nodes, members, edge_dist=0.0): def on_add(sel, _data=_scatter_data, _fk=disp_key): nids, xs_g, vals_g = _data[id(sel.artist)] idx = sel.index + + # 1. Dynamically assign the correct engineering unit + if _fk.startswith("M") or _fk.startswith("T"): + unit = "kNm" # Moment and Torsion + elif _fk.startswith("D"): + unit = "mm" # Deflection/Displacement + else: + unit = "kN" # Shear and Axial Forces (F, V) + + # 2. Apply the dynamic unit to the text sel.annotation.set_text( - f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} kNm" + f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} {unit}" ) + sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) fig = sel.annotation.figure - timer = fig.canvas.new_timer(interval=6500) + timer = fig.canvas.new_timer(interval=3000) timer.single_shot = True # Store the timer safely in our dictionary using the selection's unique ID @@ -744,7 +821,7 @@ def auto_hide(): timer.add_callback(auto_hide) timer.start() - + _add_supports(ax, nodes, members, edge_dist=edge_dist) ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) ax.set_zlabel(f"{disp_key} (kNm)", fontsize=10, labelpad=8) @@ -771,6 +848,7 @@ def auto_hide(): # Dedicate 18% of the right side purely to the massive axis labels. # This naturally shoves the 3D bridge perfectly into the center of the screen! _add_coordinate_triad(ax, nodes) + ax.set_axis_off() return fig, summary_data @@ -930,21 +1008,6 @@ def build_figure_bmd_contour(ds, force_key, nodes, members, edge_dist=0.0): def build_figure_deflection(ds, disp_key, nodes, members, edge_dist=0.0): """ Build a 3-D matplotlib figure showing the Deflection Diagram. - - Parameters - ---------- - ds : xarray.Dataset — analysis results for one load case - (must have 'displacements' DataArray keyed - by Node and Component) - disp_key : str — one of DISP_MAP keys: "Dx", "Dy", "Dz" - nodes : dict — {tag: [x, y, z]} - members : dict — {tag: [n1, n2]} - edge_dist : float — overhang distance; outermost girders are - shown as baselines only (no diagram). - - Returns - ------- - fig : matplotlib.figure.Figure """ comp_name = DISP_MAP[disp_key] disp_label = DISP_DISPLAY.get(disp_key, disp_key) @@ -957,114 +1020,172 @@ def build_figure_deflection(ds, disp_key, nodes, members, edge_dist=0.0): all_zs = [coord[2] for coord in nodes.values()] x_range = max(all_xs) - min(all_xs) or 1.0 z_range = max(all_zs) - min(all_zs) or 1.0 - ax.set_xlim(min(all_xs), max(all_xs)) - ax.set_ylim(min(all_zs), max(all_zs)) - ax.set_box_aspect([x_range, z_range, x_range * 0.30]) - - _add_grillage_background(ax, nodes, members) - _add_supports(ax, nodes, members, edge_dist=edge_dist) + # Rigid 3D bounding box (matches our UI zoom fix) + ax.set_box_aspect(aspect=(2.5, 1.2, 1.0)) + + _add_grillage_background(ax, nodes, members, show_transverse=False) defl_color = "#6A1B9A" # deep purple - fill_color = "#CE93D8" # light purple - base_color = "#388E3C" + base_color = "#388E3C" # green baseline - # Resolve the actual component string in the dataset (case-insensitive) + # ========================================================= + # PHASE 1: FOOLPROOF DATA EXTRACTION (ospgrillage Mapping) + # ========================================================= + disp_dict = {} actual_comp = None + + # 1A. Map UI input (Dx, Dy) to the correct static displacement key (x, y) + # This prevents us from accidentally grabbing the 'velocity' components! + _DISP_COMPONENT_MAP = { + "dx": "x", "dy": "y", "dz": "z", + "Dx": "x", "Dy": "y", "Dz": "z" + } + target_ds_key = _DISP_COMPONENT_MAP.get(comp_name, comp_name) + try: - for c in ds["displacements"].coords["Component"].values: - if c.lower() == comp_name.lower(): + available_comps = [str(c) for c in ds["displacements"].coords["Component"].values] + + for c in available_comps: + if str(c).lower() == target_ds_key.lower(): actual_comp = c break - except Exception: - pass - + + except Exception as e: + print(f"[DEBUG] Error reading components: {e}") + + # 1B. Extract node values into the dictionary + if actual_comp is not None: + try: + for node_id in ds["displacements"].coords["Node"].values: + val = float(ds["displacements"].sel(Node=node_id, Component=actual_comp).values) + + # Apply the engineering sign flip for vertical sag (Y or Z axis) + if actual_comp.lower() in ["y", "z"]: + val = -val + + disp_dict[str(int(node_id))] = val * 1000.0 # Convert to mm + + except Exception as e: + print(f"🚨 [CRITICAL ERROR] Extraction crashed: {e}") + else: + print(f"[DEBUG] 🚨 CRITICAL: Target '{target_ds_key}' not found in dataset!") + + # ========================================================= + # PHASE 2: PLOTTING THE DIAGRAM + # ========================================================= girder_items = list(girders.items()) n_girders = len(girder_items) _scatter_objs = [] _scatter_data = {} + summary_data = {} for i, (z_val, elems) in enumerate(girder_items): is_edge_beam = edge_dist > 0 and (i == 0 or i == n_girders - 1) girder_name = f"G{i}" if edge_dist > 0 else f"G{i + 1}" - # Node list in span order (mirrors _build_polyline ordering) node_list = [members[e][0] for e in elems] + [members[elems[-1]][1]] xs = np.array([nodes[n][0] for n in node_list]) zs = np.array([nodes[n][2] for n in node_list]) - # Fetch nodal displacement (m → mm); fall back to 0 on missing data - def _get(n, _comp=actual_comp): - if _comp is None: - return 0.0 - try: - return float( - ds["displacements"].sel(Node=n, Component=_comp).values - ) * 1000.0 - except Exception: - return 0.0 - - vals = np.array([_get(n) for n in node_list]) + # Fetch from our safe dictionary (defaults to 0.0 if missing) + vals = np.array([disp_dict.get(str(int(n)), 0.0) for n in node_list]) z_base = float(np.mean(zs)) z_arr = np.full_like(xs, z_base) - # baseline - ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], - color="slategrey" if is_edge_beam else base_color, - linewidth=1.5, zorder=3) + # Draw Baseline + # ax.plot([xs[0], xs[-1]], [z_base, z_base], [0, 0], + # color="slategrey" if is_edge_beam else base_color, + # linewidth=1.0, alpha=0.3, zorder=3) if is_edge_beam: continue - ax.scatter(xs, z_arr, np.zeros_like(xs), - color=base_color, s=18, zorder=4, depthshade=False) + # Draw Girder Label + # 1. Reverse the stack: G1 (i=0) gets zorder 100, G2 gets 99, etc. + dynamic_zorder = 100 - i + - # girder label ax.text(xs[0] - (x_range * 0.02), z_base, 0, f"{girder_name}", - color="black", fontsize=11, fontweight="normal", - ha="right", va="center", zorder=6, - bbox=dict(boxstyle="round,pad=0.2", facecolor="white", - alpha=0.8, edgecolor="none")) - - # val_range = max(vals) - min(vals) - # if val_range == 0: - # defl_scale = ( - # 1.0 if np.max(np.abs(vals)) == 0 - # else 0.1 * abs((max(xs) - min(xs)) / np.max(np.abs(vals))) - # ) - # else: - # defl_scale = 0.1 * abs((max(xs) - min(xs)) / val_range) + color="black", fontsize=11, ha="right", va="center", + zorder=dynamic_zorder, + bbox=dict( + boxstyle="round,pad=0.2", + facecolor="white", + alpha=0.8, # Fades the white background box + edgecolor="none" + )) y_plot = vals - ax.plot_surface( - np.vstack([xs, xs]), - np.vstack([z_arr, z_arr]), - np.vstack([np.zeros_like(y_plot), y_plot]), - color=fill_color, alpha=0.25, linewidth=0, antialiased=False, zorder=2 - ) + # Draw thick deflection line (NO plot_surface fill!) + ax.plot(xs, z_arr, y_plot, color=defl_color, linewidth=2.5, zorder=4) - ax.plot(xs, z_arr, y_plot, color=defl_color, linewidth=2.0, zorder=4) - - # annotate the node with maximum absolute deflection - idx_max = int(np.argmax(np.abs(vals))) - ax.plot([xs[idx_max], xs[idx_max]], [z_base, z_base], [0, y_plot[idx_max]], - color=defl_color, linewidth=1.5, linestyle="--", zorder=3, gid="max_line") - ax.text(xs[idx_max], z_base, y_plot[idx_max], - f" {vals[idx_max]:.3f} mm", color="#4A4A4A", fontsize=7, fontweight="bold", zorder=6, gid="max_line") - - # 'All' values annotations (Tagged for toggling) - for xi, yi, val in zip(xs, y_plot, vals): - ax.text(xi, z_base, yi, f" {val:.3f}", color="#666666", fontsize=6, zorder=5, gid="all_vals") - - sc = ax.scatter(xs, z_arr, y_plot, - color=defl_color, s=30, zorder=5, depthshade=False) + # Draw Nodes (Pure Black) + sc = ax.scatter(xs[1:-1], z_arr[1:-1], y_plot[1:-1], color="black", s=30, zorder=5, depthshade=False) + _scatter_objs.append(sc) - _scatter_data[id(sc)] = (node_list, xs, vals) + _scatter_data[id(sc)] = (node_list[1:-1], xs[1:-1], vals[1:-1]) + if not is_edge_beam and len(vals) > 0: + summary_data[girder_name] = { + "max": float(np.max(vals)), # Uplift / Least sag + "min": float(np.min(vals)) # Maximum downward deflection + } + + # Annotate maximum deflection + if len(vals) > 0 and np.max(np.abs(vals)) > 0: + idx_max = int(np.argmin(vals)) # Finds the most negative value (Maximum Sag) + idx_min = int(np.argmax(vals)) + + for j in range(len(xs)): + if abs(vals[j]) > 1e-4: + + # 🚨 THE CRITICAL FIX: Skip the nodes that already get Bold Max/Min labels! + if j == idx_max or j == idx_min: + continue + + # 2. Staggering logic (Keeps regular nodes from touching each other) + v_align = "bottom" if j % 2 == 0 else "top" + h_align = "left" if i % 2 == 0 else "right" + + ax.text(xs[j], z_base, y_plot[j], + f" {vals[j]:.3f} mm", + color="#455A64", + fontsize=7, + ha=h_align, + va=v_align, + zorder=6, + gid="all_vals", + bbox=dict(boxstyle="round,pad=0.1", facecolor="white", alpha=0.7, edgecolor="none")) + + # 1. Add gid="max_line" to the dotted line + ax.plot([xs[idx_max], xs[idx_max]], [z_base, z_base], [0, y_plot[idx_max]], + color=defl_color, linewidth=1.5, linestyle="--", zorder=3, gid="max_line") + + # 2. Add gid="max_line" to the text label + ax.text(xs[idx_max], z_base, y_plot[idx_max], + f" {vals[idx_max]:.3f} mm", color="#4A4A4A", fontsize=7, fontweight="bold", zorder=6, gid="max_line") + # 3. Add gid="min_line" to the dotted line + ax.plot([xs[idx_min], xs[idx_min]], [z_base, z_base], [0, y_plot[idx_min]], + color=defl_color, linewidth=1.5, linestyle="--", zorder=3, gid="min_line") + ax.text(xs[idx_min], z_base, y_plot[idx_min], + f" {vals[idx_min]:.3f} mm", color="#4A4A4A", fontsize=7, fontweight="bold", zorder=6, gid="min_line") + + + # ========================================================= + # PHASE 3: FINISHING TOUCHES (Hover, Supports, Axes) + # ========================================================= + # ========================================== + # Hover Annotations (With Garbage-Collection Fix) + # ========================================== if _MPLCURSORS and _scatter_objs: cursor = mplcursors.cursor(_scatter_objs, hover=True) - cursor._timers = {} # THE FIX: A safe dictionary to store active timers + + # 🚨 THE FIX: Attach cursor and timers to the figure so Python's + # Garbage Collector doesn't delete them the moment the function ends! + fig._custom_cursor = cursor + fig._hover_timers = {} @cursor.connect("add") def on_add(sel, _data=_scatter_data, _fk=disp_key): @@ -1073,57 +1194,57 @@ def on_add(sel, _data=_scatter_data, _fk=disp_key): sel.annotation.set_text( f"Node {nids[idx]}\nX: {xs_g[idx]:.2f}\n{_fk}: {vals_g[idx]:.3f} mm" ) - sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9) - - fig = sel.annotation.figure - timer = fig.canvas.new_timer(interval=6500) - timer.single_shot = True + sel.annotation.get_bbox_patch().set(fc="white", alpha=0.9, edgecolor="#BBBBBB") - # Store the timer safely in our dictionary using the selection's unique ID + # 1. Stop any existing timer for this specific hover box to prevent glitching sel_id = id(sel) - cursor._timers[sel_id] = timer + if sel_id in fig._hover_timers: + fig._hover_timers[sel_id].stop() + # 2. Create the new 3-second timer + timer = fig.canvas.new_timer(interval=3000) + timer.single_shot = True + fig._hover_timers[sel_id] = timer + def auto_hide(): try: - if sel in cursor.selections: - cursor.remove_selection(sel) - fig.canvas.draw_idle() + # Safely hide the text box visually instead of fighting mplcursors internal arrays + sel.annotation.set_visible(False) + fig.canvas.draw_idle() except Exception: pass finally: - # Clean up the dictionary reference to free memory - cursor._timers.pop(sel_id, None) - + fig._hover_timers.pop(sel_id, None) + timer.add_callback(auto_hide) timer.start() - ax.set_xlabel("Span Length (m)", fontsize=10, labelpad=8) - ax.set_ylabel("Bridge Width (m)", fontsize=10, labelpad=8) - ax.set_zlabel(f"{disp_label} (mm)", fontsize=10, labelpad=8) - ax.yaxis.set_major_locator(MaxNLocator(nbins=4, steps=[1, 2, 2.5, 5, 10])) + # CRITICAL: Draw supports absolute last so they sit on top of the black nodes + _add_supports(ax, nodes, members, edge_dist=edge_dist) + + # Robust axes and labels + ax.set_xlabel("Span Length (m)", fontsize=10, fontweight="bold", labelpad=8) + ax.set_ylabel("Bridge Width (m)", fontsize=10, fontweight="bold", labelpad=8) + ax.set_zlabel(f"{disp_label} (mm)", fontsize=10, fontweight="bold", labelpad=8) + + from matplotlib.ticker import MaxNLocator + ax.yaxis.set_major_locator(MaxNLocator(nbins=4, integer=True, steps=[1, 2, 4, 5, 10])) + ax.zaxis.set_major_locator(MaxNLocator(nbins=4, steps=[1, 2, 2.5, 5, 10])) + ax.set_title(f"Deflection Diagram — {disp_label}", fontsize=12, fontweight="bold", pad=12) ax.view_init(elev=DEFAULT_ELEV, azim=DEFAULT_AZIM) - ax.xaxis.pane.fill = False - ax.yaxis.pane.fill = False - ax.zaxis.pane.fill = False - # Professional, high-contrast bounding box borders - ax.xaxis.pane.set_edgecolor("#555555") - ax.yaxis.pane.set_edgecolor("#555555") - ax.zaxis.pane.set_edgecolor("#555555") - ax.xaxis.pane.set_linewidth(1.5) - ax.yaxis.pane.set_linewidth(1.5) - ax.zaxis.pane.set_linewidth(1.5) - ax.xaxis.pane.set_alpha(1.0) - ax.yaxis.pane.set_alpha(1.0) - ax.zaxis.pane.set_alpha(1.0) + + # Pane styling + for pane in [ax.xaxis.pane, ax.yaxis.pane, ax.zaxis.pane]: + pane.fill = False + pane.set_edgecolor("#555555") + pane.set_linewidth(1.5) + pane.set_alpha(1.0) + ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) - - # Force the 3D plot to use the maximum available canvas space - # Dedicate 18% of the right side purely to the massive axis labels. - # This naturally shoves the 3D bridge perfectly into the center of the screen! - # fig.subplots_adjust(left=0.05, right=0.88, bottom=0.05, top=0.90) _add_coordinate_triad(ax, nodes) - return fig + ax.set_axis_off() + return fig, summary_data def figure_to_bytes(fig, fmt="png", dpi=150): diff --git a/src/osdagbridge/desktop/ui/mpl_plot_widget.py b/src/osdagbridge/desktop/ui/mpl_plot_widget.py index b5ea89be6..c49be8c08 100644 --- a/src/osdagbridge/desktop/ui/mpl_plot_widget.py +++ b/src/osdagbridge/desktop/ui/mpl_plot_widget.py @@ -112,9 +112,9 @@ def __init__(self, parent=None): # Display States self._grillage_mode = False self._show_nodes = True - self._show_axis = True + self._show_axis = False self._show_supports = True - self._show_grid = True + self._show_grid = False self._is_summary_checked = False self._show_max = False self._show_min = False @@ -216,7 +216,7 @@ def __init__(self, parent=None): self._btn_axis = QPushButton("Axis") self._btn_axis.setCheckable(True) - self._btn_axis.setChecked(True) + self._btn_axis.setChecked(False) self._btn_axis.setFixedHeight(28) self._btn_axis.setFocusPolicy(Qt.NoFocus) self._btn_axis.setStyleSheet(btn_style) @@ -224,12 +224,12 @@ def __init__(self, parent=None): self._btn_grid = QPushButton("Grid") self._btn_grid.setCheckable(True) - self._btn_grid.setChecked(True) + self._btn_grid.setChecked(False) self._btn_grid.setFixedHeight(28) self._btn_grid.setFocusPolicy(Qt.NoFocus) self._btn_grid.setStyleSheet(btn_style) self._btn_grid.toggled.connect(self._on_grid_toggled) - self._canvas.mpl_connect('scroll_event', self._on_scroll) + # self._canvas.mpl_connect('scroll_event', self._on_scroll) toolbar_row = QHBoxLayout() toolbar_row.setContentsMargins(4, 2, 4, 2) @@ -261,6 +261,17 @@ def setup(self, ds_all, loadcases: list, nodes: dict, members: dict, self._members = members self._edge_dist = edge_dist + if hasattr(self, '_fig') and self._fig.axes: + ax = self._fig.axes[0] + + # 1. Switch to Orthographic projection (NO MORE CLIPPING) + # ax.set_proj_type('ortho') + + # 2. Force the 3D box to stretch across the entire PySide6 widget + # We use slight negative values to push the invisible bounding box + # off the edges of the screen, maximizing the bridge resolution. + self._fig.subplots_adjust(left=-0.05, right=1.05, bottom=-0.05, top=1.05) + def link_output_dock(self, output_dock): self._output_dock = output_dock @@ -322,28 +333,41 @@ def update_plot(self, *_args): return ds = self._ds_all.sel(Loadcase=loadcase) + + # ========================================== + # 1. 🚨 CAPTURE CAMERA STATE BEFORE CLOSING + # ========================================== + old_elev, old_azim = None, None + if hasattr(self, '_fig') and self._fig and self._fig.axes: + old_ax = self._fig.axes[0] + if hasattr(old_ax, 'elev'): + old_elev = old_ax.elev + old_azim = old_ax.azim + + # NOW we can safely destroy the old plot plt.close(self._fig) self._summary_data = {} + # (Your existing if/elif/else block to build the new figures) if force_key in _SFD_KEYS: - self._fig = build_figure_sfd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) + self._fig, self._summary_data = build_figure_sfd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) elif force_key in _DEFL_KEYS: - self._fig = build_figure_deflection(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) + self._fig, self._summary_data = build_figure_deflection(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) else: self._fig, self._summary_data = build_figure_bmd(ds, force_key, self._nodes, self._members, edge_dist=self._edge_dist) self._canvas.figure = self._fig self._fig.set_canvas(self._canvas) - # Apply visual states + # (Your existing visibility toggles) self._apply_node_visibility() self._apply_axis_visibility() self._apply_supports_visibility() self._apply_grid_visibility() self._apply_annotation_visibility() - # Update HUD + # (Your existing HUD logic) if self._summary_data: self._summary_overlay.update_data(self._summary_data) if self._is_summary_checked: @@ -353,14 +377,32 @@ def update_plot(self, *_args): self._summary_overlay.hide() if self._fig: - # Strip margins globally before handing the figure to the canvas - self._fig.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0) - - self._fit_figure_to_canvas() - self._canvas.draw() + self._fig.subplots_adjust(left=0.02, right=0.98, bottom=0.02, top=0.92) + + if not self._fig.axes: + return - self._zoom_scale = 1.0 - self._store_orig_limits() + ax = self._fig.axes[0] + + # ========================================== + # 2. 🚨 RESTORE CAMERA STATE TO NEW PLOT + # ========================================== + if old_elev is not None and old_azim is not None: + ax.view_init(elev=old_elev, azim=old_azim) + + # (Keep your existing native zoom logic) + if hasattr(ax, 'set_box_aspect'): + ax.set_box_aspect(aspect=(2.5, 1.2, 1.0), zoom=self._zoom_scale) + + # (Keep your existing anti-clipping loop here) + for line in ax.lines: + line.set_clip_on(False) + for collection in ax.collections: + collection.set_clip_on(False) + for text in ax.texts: + text.set_clip_on(False) + + self._canvas.draw_idle() # Show NavCube for 3-D plots only, hide for 2-D. QTimer.singleShot(100, self._update_navcube_visibility) @@ -545,9 +587,12 @@ def _apply_annotation_visibility(self): def _apply_grid_visibility(self): for ax in self._fig.axes: if self._show_grid: + # Turn everything ON and re-apply your custom dashed grid styling + ax.set_axis_on() ax.grid(True, linestyle="--", linewidth=0.4, alpha=0.5) else: - ax.grid(False) + # Throw the invisibility cloak over the panes, cube, labels, and ticks! + ax.set_axis_off() def _fit_figure_to_canvas(self): w_px = self._canvas.width() @@ -612,49 +657,78 @@ def _apply_zoom(self): # return True # return super().eventFilter(obj, event) + def eventFilter(self, obj, event): + """Intercepts the mouse wheel at the OS level to guarantee zoom triggers.""" + from PySide6.QtCore import QEvent + + if obj is self._canvas and event.type() == QEvent.Type.Wheel: + event.accept() # Tell PySide6 "I handled this, do not scroll the window!" + + delta = event.angleDelta().y() + if delta > 0: + self._zoom_in() + else: + self._zoom_out() + + return True + return super().eventFilter(obj, event) - def _zoom_step(self, factor): - """Natively zooms the Matplotlib 3D camera by scaling the axis limits.""" - if not hasattr(self, '_fig') or not self._fig or not self._fig.axes: - return + # def _zoom_step(self, factor): + # """Natively zooms the Matplotlib 3D camera without clipping the data.""" + # if not hasattr(self, '_fig') or not self._fig or not self._fig.axes: + # return - ax = self._fig.axes[0] - - # 1. Get current boundaries - x0, x1 = ax.get_xlim() - y0, y1 = ax.get_ylim() - z0, z1 = ax.get_zlim() + # ax = self._fig.axes[0] - # 2. Find the exact center of the current view - xc, yc, zc = (x0 + x1) / 2, (y0 + y1) / 2, (z0 + z1) / 2 + # # Multiply the current zoom scale + # self._zoom_scale *= factor - # 3. Scale the ranges by the zoom factor - xr, yr, zr = (x1 - x0) * factor, (y1 - y0) * factor, (z1 - z0) * factor + # # Add safety limits so the user can't zoom in infinitely or zoom out to a dot + # self._zoom_scale = max(0.5, min(self._zoom_scale, 5.0)) - # 4. Apply the new narrowed/widened limits - ax.set_xlim(xc - xr / 2, xc + xr / 2) - ax.set_ylim(yc - yr / 2, yc + yr / 2) - ax.set_zlim(zc - zr / 2, zc + zr / 2) + # # Apply the new optical zoom while preserving your rigid 3D bridge shape! + # if hasattr(ax, 'set_box_aspect'): + # ax.set_box_aspect(aspect=(2.5, 1.2, 1.0), zoom=self._zoom_scale) + + # self._canvas.draw_idle() + + # ========================================== + # BUTTERY SMOOTH CAMERA ZOOMING + # ========================================== + + def _apply_camera_zoom(self): + """Applies zoom to the EXISTING figure without rebuilding it from scratch!""" + if not hasattr(self, '_fig') or not self._fig or not self._fig.axes: + return + + ax = self._fig.axes[0] + # Change the optical zoom instantly without touching limits or layout + if hasattr(ax, 'set_box_aspect'): + ax.set_box_aspect(aspect=(2.5, 1.2, 1.0), zoom=self._zoom_scale) + self._canvas.draw_idle() def _zoom_in(self): - # 85% of current view size (zooms in) - self._zoom_step(0.85) + """Zooms the camera strictly inward.""" + self._zoom_scale *= 1.2 # Increase zoom parameter by 20% + self._apply_camera_zoom() # Call our lightweight function, NOT update_plot() def _zoom_out(self): - # 115% of current view size (zooms out) - self._zoom_step(1.15) - def _on_scroll(self, event): - """Native Matplotlib scroll wheel support.""" - if event.button == 'up': - self._zoom_step(0.85) # Scroll wheel up = Zoom in - elif event.button == 'down': - self._zoom_step(1.15) # Scroll wheel down = Zoom out - + """Zooms the camera strictly outward.""" + self._zoom_scale /= 1.2 # Decrease zoom parameter by 20% + if self._zoom_scale < 0.1: + self._zoom_scale = 0.1 + self._apply_camera_zoom() + def _zoom_reset(self): - # The safest and cleanest way to reset is just to re-trigger the plot update! - self.update_plot() + """Snaps back to 100% scale.""" + self._zoom_scale = 1.0 + self._apply_camera_zoom() + + # ========================================== + # STATE HELPERS + # ========================================== def _current_loadcase(self) -> str: combo = self._output_dock.output_widget.findChild( diff --git a/tools/view_results.py b/tools/view_results.py new file mode 100644 index 000000000..b09a3aa85 --- /dev/null +++ b/tools/view_results.py @@ -0,0 +1,70 @@ +import json +import pandas as pd +from pathlib import Path + +def json_to_dataframes(json_path): + """ + Reads the bridge_plot_data.json and returns two flattened DataFrames: + one for displacements and one for forces. + """ + if not Path(json_path).exists(): + print(f"❌ Error: {json_path} not found.") + return None, None + + with open(json_path, "r") as f: + data = json.load(f) + + # --- 1. Flatten Displacements --- + disp_rows = [] + for lc, nodes in data.get("displacements", {}).items(): + for node_id, components in nodes.items(): + row = {"loadcase": lc, "node_id": node_id} + + # Only add components that actually have valid numbers! + for comp, val in components.items(): + if val is not None and not (isinstance(val, float) and pd.isna(val)): + row[comp] = val + + disp_rows.append(row) + + df_disp = pd.DataFrame(disp_rows) + + # --- 2. Flatten Forces --- + force_rows = [] + for lc, elements in data.get("forces", {}).items(): + for elem_id, components in elements.items(): + row = {"loadcase": lc, "element_id": elem_id} + + # Only add components that actually have valid numbers! + for comp, val in components.items(): + if val is not None and not (isinstance(val, float) and pd.isna(val)): + row[comp] = val + + force_rows.append(row) + + df_force = pd.DataFrame(force_rows) + + return df_disp, df_force + +if __name__ == "__main__": + current_dir = Path(__file__).parent + json_file = current_dir / "bridge_plot_data.json" + + print(f"🔍 Looking for file at: {json_file.resolve()}") + + df_disp, df_force = json_to_dataframes(json_file) + + if df_disp is not None: + print("\n--- NODAL DISPLACEMENTS (First 10 rows) ---") + print(df_disp.head(10).to_string(index=False)) + + print("\n--- ELEMENT FORCES (First 10 rows) ---") + print(df_force.head(10).to_string(index=False)) + + # --- Example: Search for Max Moment Mz --- + if 'Mz_i' in df_force.columns: + max_mom = df_force['Mz_i'].max() + print(f"\n✅ Peak Positive Moment (Mz_i): {max_mom:.2f} kNm") + + # Optional: Save to Excel for manual checking + df_force.to_excel("bridge_results_verification.xlsx") \ No newline at end of file

xJ9H%k*rob039SKfF!U}~VSf1L9_=Kz6q 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%0Aio^wNw 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�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 literal 0 HcmV?d00001 diff --git a/src/osdagbridge/core/data/project_location/zone_lookup.py b/src/osdagbridge/core/data/project_location/zone_lookup.py new file mode 100644 index 000000000..a44924c2c --- /dev/null +++ b/src/osdagbridge/core/data/project_location/zone_lookup.py @@ -0,0 +1,204 @@ +"""Zone lookup module for IRC:6 wind and seismic zone determination. + +This module performs point-in-polygon queries against digitized IRC:6 zone maps +to determine wind speed (Vb) and seismic zone/factor for a given lat/long. + +SHAPEFILE SETUP: +----------------- +1. Digitize IRC:6 wind and seismic zone maps in QGIS +2. Export as shapefiles to: core/data/project_location/shapefiles/ +3. Required files: + - wind_zones.shp (with attributes: zone_id, Vb, source) + - seismic_zones.shp (with attributes: zone_id, seismic_zone, zone_factor, source) + +Once shapefiles are available, set USE_MOCK_DATA = False to enable real lookups. +""" + +from __future__ import annotations + +import os +from typing import Dict, Optional, Any + +# Path to shapefiles directory +SHAPEFILES_DIR = os.path.abspath( + os.path.join(os.path.dirname(__file__), "shapefiles") +) + +WIND_SHAPEFILE = os.path.join(SHAPEFILES_DIR, "wind_zones.shp") +SEISMIC_SHAPEFILE = os.path.join(SHAPEFILES_DIR, "seismic_zones.shp") + +# Cache for loaded geometries (load once, reuse) +_wind_zones = None +_seismic_zones = None + + +def _load_shapefile(filepath: str): + """Load a shapefile and return list of (geometry, attributes) tuples.""" + try: + import fiona + from shapely.geometry import shape + + zones = [] + with fiona.open(filepath, 'r') as src: + for feature in src: + geom = shape(feature['geometry']) + props = dict(feature['properties']) + zones.append((geom, props)) + return zones + except ImportError: + print("Warning: fiona/shapely not installed. Install with: pip install fiona shapely") + return None + except Exception as e: + print(f"Warning: Could not load shapefile {filepath}: {e}") + return None + + +def _ensure_zones_loaded(): + """Lazy-load shapefiles on first use.""" + global _wind_zones, _seismic_zones + + + + if _wind_zones is None and os.path.exists(WIND_SHAPEFILE): + _wind_zones = _load_shapefile(WIND_SHAPEFILE) + + if _seismic_zones is None and os.path.exists(SEISMIC_SHAPEFILE): + _seismic_zones = _load_shapefile(SEISMIC_SHAPEFILE) + + +def _point_in_polygon_lookup(lat: float, lon: float, zones) -> Optional[Dict]: + """Find which polygon contains the given point.""" + if not zones: + return None + + try: + from shapely.geometry import Point + point = Point(lon, lat) # Note: lon, lat order for shapely + + for geom, props in zones: + if geom.contains(point): + return props + + # Check for nearest polygon within threshold (e.g. 0.5 deg ~= 55km) + # This handles points slightly outside boundaries (coastlines, borders) + min_dist = float('inf') + nearest_props = None + + for geom, props in zones: + dist = geom.distance(point) + if dist < min_dist: + min_dist = dist + nearest_props = props + + if nearest_props and min_dist < 0.5: + return nearest_props + + return None + except ImportError: + return None + + +def get_zones_for_coordinates(lat: float, lon: float) -> Dict[str, Any]: + """ + Get wind and seismic zone data for given coordinates. + + Args: + lat: Latitude in degrees + lon: Longitude in degrees + + Returns: + Dictionary with keys: + - wind_Vb: Basic wind speed in m/s (or None) + - seismic_zone: Zone designation (II/III/IV/V or None) + - zone_factor: Z value for seismic design (or None) + - source: Data source ("IRC6" or None) + """ + _ensure_zones_loaded() + + result = { + "wind_Vb": None, + "seismic_zone": None, + "zone_factor": None, + "source": "IRC6" + } + + # Wind zone lookup + if _wind_zones: + wind_props = _point_in_polygon_lookup(lat, lon, _wind_zones) + if wind_props: + result["wind_Vb"] = wind_props.get("Vb") + + # Seismic zone lookup + if _seismic_zones: + seismic_props = _point_in_polygon_lookup(lat, lon, _seismic_zones) + if seismic_props: + # Handle possible attribute name truncation (DBF has 10 char limit) + # seismic_zone -> seismic_zo + # zone_factor -> zone_facto + + s_zone = seismic_props.get("seismic_zone") + if s_zone is None: + s_zone = seismic_props.get("seismic_zo") + + z_factor = seismic_props.get("zone_factor") + if z_factor is None: + z_factor = seismic_props.get("zone_facto") + + result["seismic_zone"] = s_zone + result["zone_factor"] = z_factor + + return result + + + + + +def get_temperature_for_coordinates(lat: float, lon: float) -> Dict[str, Any]: + """ + Get temperature data for the nearest station to given coordinates. + + Returns: + Dictionary with keys: + - max_temp: Maximum temperature in °C (or None) + - min_temp: Minimum temperature in °C (or None) + - nearest_station: Name of the nearest station (or None) + - nearest_state: State of the nearest station (or None) + """ + from .database import Database + + result = { + "max_temp": None, + "min_temp": None, + "nearest_station": None, + "nearest_state": None, + } + + # Get the database path + db_path = os.path.join(os.path.dirname(__file__), "weather.db") + + if not os.path.exists(db_path): + return result + + try: + db = Database(db_path) + db.connect() + temp_data = db.get_nearest_station_temperature(lat, lon) + db.close() + + if temp_data: + result["max_temp"] = temp_data.get("max_temp") + result["min_temp"] = temp_data.get("min_temp") + result["nearest_station"] = temp_data.get("station") + result["nearest_state"] = temp_data.get("state") + except Exception as e: + print(f"Warning: Temperature lookup failed: {e}") + + return result + + +def shapefiles_available() -> Dict[str, bool]: + """Check which shapefiles are available.""" + return { + "wind_zones": os.path.exists(WIND_SHAPEFILE), + "seismic_zones": os.path.exists(SEISMIC_SHAPEFILE) + } diff --git a/src/osdagbridge/desktop/ui/dialogs/project_location.py b/src/osdagbridge/desktop/ui/dialogs/project_location.py index c263e21f4..cf556cfdc 100644 --- a/src/osdagbridge/desktop/ui/dialogs/project_location.py +++ b/src/osdagbridge/desktop/ui/dialogs/project_location.py @@ -1,9 +1,34 @@ +from pathlib import Path + from PySide6.QtWidgets import ( - QDialog, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QWidget, - QCheckBox, QFrame, QPushButton, QComboBox, QSizePolicy, QSizeGrip + QDialog, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QWidget, + QCheckBox, QFrame, QPushButton, QComboBox, QSizePolicy, QSizeGrip, + QRadioButton, QButtonGroup, QStackedWidget, QSpacerItem, QMessageBox ) -from PySide6.QtCore import Qt +from PySide6.QtGui import QDesktopServices +from PySide6.QtCore import Qt, QUrl from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.core.bridge_types.plate_girder.ui_fields_project_location import ( + get_state_list, + get_station_list, + get_default_location, + get_weather, +) + +from PySide6.QtCore import Slot, Signal, QObject, QUrl +from osdagbridge.desktop.ui.widgets.native_map import NativeMapWidget +from osdagbridge.core.data.project_location.zone_lookup import get_zones_for_coordinates, get_temperature_for_coordinates + + +# Session-level state to persist values across dialog open/close cycles +# so that reopening the dialog retains user-entered or looked-up data. +LAST_CUSTOM_WEATHER_DATA = None # Custom data entered via the Custom Data dialog +LAST_WEATHER_DATA = None # Looked-up or persisted weather data (wind, seismic, temp) +LAST_LOCATION_METHOD = None # "location_name" or "map" +LAST_LOCATION_DATA = None # {"state": ..., "district": ...} or {"latitude": ..., "longitude": ...} + + + class NoScrollComboBox(QComboBox): def wheelEvent(self, event): @@ -82,37 +107,321 @@ def apply_field_style(widget): """) +class CustomWeatherDataDialog(QDialog): + """ + Dialog to manually input weather/seismic data. + """ + def __init__(self, parent=None, initial_data=None): + super().__init__(parent) + self.setFixedSize(400, 420) + self.data = initial_data or {} + self.setWindowFlags(Qt.Dialog | Qt.FramelessWindowHint) + + self.setStyleSheet(""" + QDialog { + background-color: #ffffff; + border: 1px solid #90AF13; + } + QLabel { + color: #2d2d2d; + font-size: 12px; + font-weight: 500; + } + QLineEdit { + padding: 4px 8px; + border: 1px solid #dcdcdc; + border-radius: 4px; + background-color: white; + color: black; + font-size: 12px; + } + QLineEdit:focus { + border: 1px solid #90AF13; + } + QPushButton#primary { + background-color: #90AF13; + color: white; + border-radius: 6px; + padding: 6px 16px; + font-weight: 600; + border: none; + } + QPushButton#primary:hover { background-color: #7a9b0f; } + QPushButton#ghost { + background-color: #f1f1f1; + color: #1d1d1d; + border-radius: 6px; + padding: 6px 16px; + font-weight: 600; + border: none; + } + QPushButton#ghost:hover { background-color: #e6e6e6; } + """) + + # Main layout structure for custom title bar + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(1, 1, 1, 1) + main_layout.setSpacing(0) + + self.title_bar = CustomTitleBar() + self.title_bar.setTitle("Custom Weather Data") + main_layout.addWidget(self.title_bar) + + self.content_widget = QWidget(self) + main_layout.addWidget(self.content_widget, 1) + + layout = QVBoxLayout(self.content_widget) + layout.setSpacing(16) + layout.setContentsMargins(25, 25, 25, 25) + + # Basic Wind Speed + wind_layout = QVBoxLayout() + wind_layout.setSpacing(6) + wind_layout.addWidget(QLabel("Basic Wind Speed (m/s)")) + self.wind_input = QLineEdit() + self.wind_input.setPlaceholderText("e.g. 50") + if self.data.get("wind_speed"): + self.wind_input.setText(str(self.data.get("wind_speed"))) + wind_layout.addWidget(self.wind_input) + layout.addLayout(wind_layout) + + # Seismic Zone + zone_label = QLabel("Seismic Zone") + layout.addWidget(zone_label) + + self.zone_combo = NoScrollComboBox() + self.zone_combo.addItems(["Select Zone", "II", "III", "IV", "V"]) + if self.data.get("zone"): + index = self.zone_combo.findText(self.data.get("zone")) + if index >= 0: + self.zone_combo.setCurrentIndex(index) + + # Apply specific combo style locally or via stylesheet above + self.zone_combo.setStyleSheet(""" + QComboBox{ + padding: 4px 8px; + border: 1px solid #dcdcdc; + border-radius: 4px; + background-color: white; + color: black; + } + QComboBox::drop-down{ + subcontrol-origin: padding; + subcontrol-position: top right; + border-left: 0px; + } + QComboBox::down-arrow{ + image: url(:/vectors/arrow_down_light.svg); + width: 12px; + height: 12px; + margin-right: 8px; + } + QComboBox::down-arrow:on { + image: url(:/vectors/arrow_up_light.svg); + width: 12px; + height: 12px; + margin-right: 8px; + } + QComboBox QAbstractItemView{ + background-color: white; + border: 1px solid #dcdcdc; + outline: none; + } + QComboBox QAbstractItemView::item{ + color: black; + background-color: white; + border: none; + border: 1px solid white; + border-radius: 0; + padding: 2px; + } + QComboBox QAbstractItemView::item:hover{ + border: 1px solid #90AF13; + background-color: #90AF13; + color: black; + } + QComboBox QAbstractItemView::item:selected{ + background-color: #90AF13; + color: black; + border: 1px solid #90AF13; + } + QComboBox QAbstractItemView::item:selected:hover{ + background-color: #90AF13; + color: black; + border: 1px solid #94b816; + } + """) + + # Side-by-side layout for Zone and Z-Factor + zone_row = QHBoxLayout() + zone_row.setSpacing(15) + + # Add stretch factor 1 to make them equal width + zone_row.addWidget(self.zone_combo, 1) + + zone_to_z = {"II": "0.10", "III": "0.16", "IV": "0.24", "V": "0.36"} + current_z = zone_to_z.get(self.zone_combo.currentText(), "") + + self.zone_value = QLineEdit(str(current_z)) + self.zone_value.setReadOnly(True) + self.zone_value.setPlaceholderText("Zone Factor (Z)") + self.zone_value.setStyleSheet(""" + QLineEdit { + background-color: #f5f5f5; + color: #707070; + border: 1px solid #dcdcdc; + border-radius: 4px; + padding: 4px 8px; + } + """) + self.zone_combo.currentTextChanged.connect( + lambda text: self.zone_value.setText(zone_to_z.get(text, "")) + ) + + # Add stretch factor 1 to make them equal width + zone_row.addWidget(self.zone_value, 1) + layout.addLayout(zone_row) + + # Shade Air Temperature + temp_lbl = QLabel("Shade Air Temperature (°C)") + layout.addWidget(temp_lbl) + + temp_layout = QHBoxLayout() + temp_layout.setSpacing(15) + + max_col = QVBoxLayout() + max_col.setSpacing(6) + self.max_temp_input = QLineEdit() + self.max_temp_input.setPlaceholderText("Max") + if self.data.get("max_temp"): + self.max_temp_input.setText(str(self.data.get("max_temp"))) + max_col.addWidget(self.max_temp_input) + + min_col = QVBoxLayout() + min_col.setSpacing(6) + self.min_temp_input = QLineEdit() + self.min_temp_input.setPlaceholderText("Min") + if self.data.get("min_temp"): + self.min_temp_input.setText(str(self.data.get("min_temp"))) + min_col.addWidget(self.min_temp_input) + + temp_layout.addLayout(max_col) + temp_layout.addLayout(min_col) + layout.addLayout(temp_layout) + + layout.addStretch() + + # Build Footer + btn_layout = QHBoxLayout() + btn_layout.setSpacing(10) + btn_layout.addStretch() + + save_btn = QPushButton("Save") + save_btn.setObjectName("primary") + save_btn.setCursor(Qt.PointingHandCursor) + save_btn.clicked.connect(self.validate_and_save) + btn_layout.addWidget(save_btn) + + cancel_btn = QPushButton("Cancel") + cancel_btn.setObjectName("ghost") + cancel_btn.setCursor(Qt.PointingHandCursor) + cancel_btn.clicked.connect(self.reject) + btn_layout.addWidget(cancel_btn) + + layout.addLayout(btn_layout) + + def validate_and_save(self): + wind = self.wind_input.text().strip() + zone = self.zone_combo.currentText() + max_t = self.max_temp_input.text().strip() + min_t = self.min_temp_input.text().strip() + + if not wind or not max_t or not min_t or zone == "Select Zone": + QMessageBox.warning(self, "Incomplete Data", "Please enter all fields (Wind Speed, Seismic Zone, and Temperatures) before saving.") + return + + self.accept() + + def get_data(self): + # Map zone to z_value automatically + zone_to_z = { + "II": "0.10", + "III": "0.16", + "IV": "0.24", + "V": "0.36" + } + selected_zone = self.zone_combo.currentText() if self.zone_combo.currentText() != "Select Zone" else "" + z_value = zone_to_z.get(selected_zone, "") + + return { + "wind_speed": self.wind_input.text(), + "zone": selected_zone, + "z_value": z_value, + "max_temp": self.max_temp_input.text(), + "min_temp": self.min_temp_input.text() + } + + def showEvent(self, event): + """Center dialog on parent window when shown.""" + super().showEvent(event) + if self.parent(): + parent_geo = self.parent().geometry() + x = parent_geo.x() + (parent_geo.width() - self.width()) // 2 + y = parent_geo.y() + (parent_geo.height() - self.height()) // 2 + self.move(x, y) + + class ProjectLocationDialog(QDialog): - """Dialog for selecting project location with multiple input methods""" - - STATE_DISTRICTS = { - "Select State": ["Select District"], - "Delhi": ["Central Delhi", "East Delhi", "New Delhi", "North Delhi", "North East Delhi", - "North West Delhi", "South Delhi", "South East Delhi", "South West Delhi", "West Delhi"], - "Maharashtra": ["Mumbai", "Pune", "Nagpur", "Thane", "Nashik", "Aurangabad", "Solapur", - "Amravati", "Kolhapur", "Raigad", "Satara", "Sangli"], - "Karnataka": ["Bangalore", "Mysore", "Hubli", "Belgaum", "Mangalore", "Gulbarga", - "Bellary", "Bijapur", "Shimoga", "Tumkur", "Davangere"], - "Tamil Nadu": ["Chennai", "Coimbatore", "Madurai", "Tiruchirappalli", "Salem", "Tirunelveli", - "Tiruppur", "Erode", "Vellore", "Thoothukudi", "Dindigul"], - "West Bengal": ["Kolkata", "Howrah", "Darjeeling", "Siliguri", "Asansol", "Durgapur", - "Bardhaman", "Malda", "Jalpaiguri", "Murshidabad", "Nadia"] - } - + """Dialog for selecting project location with multiple input methods.""" + def __init__(self, parent=None): super().__init__(parent) - self.setMinimumWidth(850) - self.setMinimumHeight(650) + self.setMinimumWidth(780) + self.setMinimumHeight(520) self.setObjectName("project_location_dialog") + self.default_location = get_default_location() + + # Restore session-level state + self.custom_weather_data = LAST_CUSTOM_WEATHER_DATA + self._current_weather_data = LAST_WEATHER_DATA # Track current displayed weather + self.setStyleSheet(""" QDialog#project_location_dialog { - background-color: #FFFFFF; + background-color: #ffffff; border: 1px solid #90AF13; } + QLabel#headline { font-size: 15px; font-weight: 700; color: #2d2d2d; } + QLabel#hint { color: #4a4a4a; } + QRadioButton { font-size: 12px; color: #1f1f1f; } + QRadioButton::indicator { width: 16px; height: 16px; } + QRadioButton::indicator::unchecked { border: 2px solid #90AF13; border-radius: 9px; background: transparent; } + QRadioButton::indicator::checked { border: 2px solid #90AF13; background: #90AF13; border-radius: 9px; } + QCheckBox { font-size: 12px; color: #1f1f1f; } + QPushButton#primary { + background-color: #90AF13; + color: white; + border-radius: 6px; + padding: 8px 18px; + font-weight: 600; + } + QPushButton#primary:hover { background-color: #7a9b0f; } + QPushButton#primary:pressed { background-color: #64850c; } + QPushButton#ghost { + background-color: #f1f1f1; + color: #1d1d1d; + border-radius: 6px; + padding: 8px 14px; + font-weight: 600; + } + QPushButton#ghost:hover { background-color: #e6e6e6; } + QPushButton#ghost:pressed { background-color: #d9d9d9; } """) - + self._setup_ui() self._connect_signals() + + # Restore previous session state if available, otherwise apply defaults + self._restore_session_state() def setupWrapper(self): self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) @@ -138,250 +447,706 @@ def setupWrapper(self): main_layout.addLayout(overlay) def _setup_ui(self): - """Setup the user interface""" self.setupWrapper() main_layout = QVBoxLayout(self.content_widget) - main_layout.setContentsMargins(20, 20, 20, 20) - main_layout.setSpacing(15) - - # Add sections - self._add_coordinates_section(main_layout) - self._add_separator(main_layout) - self._add_location_name_section(main_layout) - self._add_separator(main_layout) - self._add_map_section(main_layout) - self._add_separator(main_layout) - self._add_irc_values_section(main_layout) - self._add_separator(main_layout) - self._add_custom_params_section(main_layout) - - main_layout.addStretch() - - self._add_buttons(main_layout) + main_layout.setContentsMargins(18, 18, 18, 14) + main_layout.setSpacing(12) + + self._add_method_toggle(main_layout) + self._build_body(main_layout) + self._add_footer_buttons(main_layout) - def _add_coordinates_section(self, layout): - """Add the coordinates input section""" - coords_row = QHBoxLayout() - coords_row.setSpacing(15) - - self.coords_checkbox = QCheckBox("Enter Coordinates") - coords_row.addWidget(self.coords_checkbox) - coords_row.addStretch() - - lat_label = QLabel("Latitude (°)") - lat_label.setStyleSheet("font-size: 11px;") - coords_row.addWidget(lat_label) - - self.latitude_input = QLineEdit() - self.latitude_input.setMaximumWidth(120) - self.latitude_input.setEnabled(False) - apply_field_style(self.latitude_input) - coords_row.addWidget(self.latitude_input) + def _add_method_toggle(self, layout): + bar = QHBoxLayout() + bar.setSpacing(18) + + self.method_group = QButtonGroup(self) + self.method_radio_location = QRadioButton("Enter Location Name") + self.method_radio_map = QRadioButton("Select on Map") + + for radio in (self.method_radio_location, self.method_radio_map): + radio.setCursor(Qt.PointingHandCursor) + self.method_group.addButton(radio) + bar.addWidget(radio) + + self.method_radio_location.setChecked(True) + bar.addStretch() + + layout.addLayout(bar) + + def _build_body(self, layout): + body = QHBoxLayout() + body.setSpacing(14) + + left_card = QFrame() + left_card.setObjectName("leftCard") + left_card.setStyleSheet(""" + QFrame#leftCard { + background-color: #ffffff; + border: 1px solid #d8e2c4; + border-radius: 10px; + } + """) + left_layout = QVBoxLayout(left_card) + left_layout.setContentsMargins(14, 12, 14, 12) + left_layout.setSpacing(12) + + self.method_stack = QStackedWidget() + self._add_location_page() + self._add_map_page() + self.method_stack.setCurrentIndex(0) + left_layout.addWidget(self.method_stack) + + # Removed Lookup and Clear buttons row + + body.addWidget(left_card, 2) + + right_card = QFrame() + right_card.setObjectName("ircCard") + right_card.setStyleSheet(""" + QFrame#ircCard { + background-color: #f7fbf1; + border: 1px solid #90AF13; + border-radius: 10px; + } + QFrame#ircCard QLabel { border: none; background: transparent; } + QLabel#valueTitle { font-size: 12px; color: #4c6b10; font-weight: 700; } + QLabel#valueLabel { font-size: 12px; color: #1f1f1f; } + QLabel#valueStrong { font-size: 14px; font-weight: 800; color: #0f3e0a; } + """) + right_layout = QVBoxLayout(right_card) + right_layout.setContentsMargins(14, 12, 14, 12) + right_layout.setSpacing(8) + + title = QLabel("IRC 6 (2017) Values:") + title.setObjectName("valueTitle") + right_layout.addWidget(title) + + self.wind_speed_label = QLabel("Basic Wind Speed (m/sec): —") + self.wind_speed_label.setObjectName("valueLabel") + right_layout.addWidget(self.wind_speed_label) + + self.seismic_zone_label = QLabel("Seismic Zone: — Z = —") + self.seismic_zone_label.setObjectName("valueLabel") + right_layout.addWidget(self.seismic_zone_label) + + self.temp_label = QLabel("Shade Air Temperature (°C): — / —") + self.temp_label.setObjectName("valueLabel") + right_layout.addWidget(self.temp_label) + + right_layout.addItem(QSpacerItem(0, 6)) + + self.btn_custom_data = QPushButton("Custom Data") + self.btn_custom_data.setObjectName("primary") + self.btn_custom_data.setCursor(Qt.PointingHandCursor) + self.btn_custom_data.setMinimumWidth(150) + self.btn_custom_data.setAutoDefault(False) + right_layout.addWidget(self.btn_custom_data) - lng_label = QLabel("Longitude (°)") - lng_label.setStyleSheet("font-size: 11px;") - coords_row.addWidget(lng_label) + hint = QLabel("Manually overwrite wind, seismic zone & zone factor, and shade temps.") + hint.setWordWrap(True) + hint.setObjectName("hint") + right_layout.addWidget(hint) - self.longitude_input = QLineEdit() - self.longitude_input.setMaximumWidth(120) - self.longitude_input.setEnabled(False) - apply_field_style(self.longitude_input) - coords_row.addWidget(self.longitude_input) + # Zone Legend (shown when overlay is active) + self.legend_container = QWidget() + self.legend_container.setVisible(False) + legend_layout = QVBoxLayout(self.legend_container) + legend_layout.setContentsMargins(0, 10, 0, 0) + legend_layout.setSpacing(4) - layout.addLayout(coords_row) - - def _add_location_name_section(self, layout): - """Add the location name input section""" - location_row = QHBoxLayout() - location_row.setSpacing(15) + self.legend_title = QLabel("Legend:") + self.legend_title.setStyleSheet("font-weight: 700; font-size: 11px; color: #2d2d2d; border: none;") + legend_layout.addWidget(self.legend_title) - self.location_checkbox = QCheckBox("Enter Location Name") - location_row.addWidget(self.location_checkbox) - location_row.addStretch() + self.legend_items_widget = QWidget() + self.legend_items_layout = QVBoxLayout(self.legend_items_widget) + self.legend_items_layout.setContentsMargins(0, 0, 0, 0) + self.legend_items_layout.setSpacing(3) + legend_layout.addWidget(self.legend_items_widget) - state_label = QLabel("State") - state_label.setStyleSheet("font-size: 11px;") - location_row.addWidget(state_label) + right_layout.addWidget(self.legend_container) + right_layout.addStretch() + body.addWidget(right_card, 1) + + layout.addLayout(body) + + + def _add_location_page(self): + page = QWidget() + vbox = QVBoxLayout(page) + vbox.setContentsMargins(2, 2, 2, 2) + vbox.setSpacing(10) + + label = QLabel("Search by location name") + label.setObjectName("hint") + label.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + label.setStyleSheet("font-weight: 700; color: #2d2d2d;") + vbox.addWidget(label) + + state_col = QVBoxLayout() + state_lbl = QLabel("State") self.state_combo = NoScrollComboBox() - self.state_combo.setMaximumWidth(150) - self.state_combo.setEnabled(False) - self.state_combo.addItems(list(self.STATE_DISTRICTS.keys())) + self.state_combo.addItems(get_state_list()) apply_field_style(self.state_combo) - location_row.addWidget(self.state_combo) - - district_label = QLabel("District") - district_label.setStyleSheet("font-size: 11px;") - location_row.addWidget(district_label) - + state_col.addWidget(state_lbl) + state_col.addWidget(self.state_combo) + + district_col = QVBoxLayout() + district_lbl = QLabel("District") self.district_combo = NoScrollComboBox() - self.district_combo.setMaximumWidth(150) - self.district_combo.setEnabled(False) self.district_combo.addItems(["Select District"]) apply_field_style(self.district_combo) - location_row.addWidget(self.district_combo) - - layout.addLayout(location_row) - - def _add_map_section(self, layout): - """Add the map selection section""" - map_section = QVBoxLayout() - map_section.setSpacing(8) - - self.map_checkbox = QCheckBox("Select on Map") - map_section.addWidget(self.map_checkbox) - - # Map placeholder - self.map_placeholder = QLabel() - self.map_placeholder.setAlignment(Qt.AlignCenter) - self.map_placeholder.setMinimumHeight(200) - self.map_placeholder.setText("Map Placeholder\n(Will be added later)") - self.map_placeholder.setEnabled(False) - map_section.addWidget(self.map_placeholder) - - layout.addLayout(map_section) - - def _add_irc_values_section(self, layout): - """Add the IRC 6 (2017) values section""" - results_section = QVBoxLayout() - results_section.setSpacing(8) + district_col.addWidget(district_lbl) + district_col.addWidget(self.district_combo) + + row = QHBoxLayout() + row.setSpacing(10) + row.addLayout(state_col) + row.addLayout(district_col) + row.addStretch() + vbox.addLayout(row) + vbox.addStretch() + + self.method_stack.addWidget(page) + + def _add_map_page(self): + page = QWidget() + page.setStyleSheet("background-color: #f5f8f2;") + vbox = QVBoxLayout(page) + vbox.setContentsMargins(0, 0, 0, 0) + vbox.setSpacing(6) + + # Zone overlay dropdown + overlay_container = QWidget() + overlay_container.setStyleSheet("background-color: #ffffff; border-bottom: 1px solid #d8e2c4;") + overlay_layout = QHBoxLayout(overlay_container) + overlay_layout.setContentsMargins(10, 8, 10, 8) + overlay_layout.setSpacing(10) - results_title = QLabel("IRC 6 (2017) Values") - results_section.addWidget(results_title) + overlay_label = QLabel("Zone Overlay:") + overlay_label.setStyleSheet("font-weight: 600; color: #2d2d2d; border: none;") + #overlay_layout.addWidget(overlay_label) - self.wind_speed_label = QLabel("Basic Wind Speed (m/sec)") - results_section.addWidget(self.wind_speed_label) + self.zone_overlay_combo = NoScrollComboBox() + self.zone_overlay_combo.addItems(["None", "Seismic Zone", "Wind Zone"]) + self.zone_overlay_combo.setMinimumWidth(140) + apply_field_style(self.zone_overlay_combo) + #overlay_layout.addWidget(self.zone_overlay_combo) - self.seismic_zone_label = QLabel("Seismic Zone and Zone Factor") - results_section.addWidget(self.seismic_zone_label) + overlay_layout.addStretch() + vbox.addWidget(overlay_container) + + self.map_view = NativeMapWidget() + vbox.addWidget(self.map_view, 1) + + # Coordinate inputs integrated here + coord_container = QWidget() + coord_container.setStyleSheet("background-color: #ffffff; border-top: 1px solid #d8e2c4;") + coord_layout = QVBoxLayout(coord_container) + coord_layout.setContentsMargins(10, 10, 10, 10) - self.temp_label = QLabel("Shade Air Temperature (°C)") - results_section.addWidget(self.temp_label) + coord_label = QLabel("Enter Coordinates or Select on Map") + coord_label.setStyleSheet("font-weight: bold; color: #2d2d2d;") + coord_layout.addWidget(coord_label) + + row = QHBoxLayout() + row.setSpacing(10) + + lat_col = QVBoxLayout() + lat_lbl = QLabel("Latitude (°)") + self.latitude_input = QLineEdit() + apply_field_style(self.latitude_input) + lat_col.addWidget(lat_lbl) + lat_col.addWidget(self.latitude_input) + + lng_col = QVBoxLayout() + lng_lbl = QLabel("Longitude (°)") + self.longitude_input = QLineEdit() + apply_field_style(self.longitude_input) + lng_col.addWidget(lng_lbl) + lng_col.addWidget(self.longitude_input) + + row.addLayout(lat_col) + row.addLayout(lng_col) + coord_layout.addLayout(row) - layout.addLayout(results_section) - - def _add_custom_params_section(self, layout): - """Add the custom loading parameters checkbox""" - self.custom_params_checkbox = QCheckBox("Tabulate Custom Loading Parameters") - layout.addWidget(self.custom_params_checkbox) - - def _add_separator(self, layout): - """Add a horizontal separator line""" - line = QFrame() - line.setFrameShape(QFrame.HLine) - line.setFrameShadow(QFrame.Sunken) - line.setStyleSheet("background-color: #d0d0d0;") - layout.addWidget(line) - - def _add_buttons(self, layout): - """Add OK and Cancel buttons""" - btn_layout = QHBoxLayout() - btn_layout.addStretch() + vbox.addWidget(coord_container) + + # Connect map signal + self.map_view.locationSelected.connect(self._on_map_location_selected) + + self.method_stack.addWidget(page) + + def validate_and_save(self): + if not self._current_weather_data: + QMessageBox.warning(self, "Incomplete Data", "Please select a location either on the map or from the dropdown menu.") + return + + # Ensure all critical fields are present + w = self._current_weather_data + missing = [] + if not w.get("wind_speed") and w.get("wind_speed") != 0: + missing.append("Wind Speed") + if not w.get("zone"): + missing.append("Seismic Zone") + if w.get("max_temp") is None or w.get("min_temp") is None: + missing.append("Temperature") + if missing: + QMessageBox.warning(self, "Incomplete Data", f"Missing data: {', '.join(missing)}.\nPlease select a different location or use Custom Data to enter values manually.") + return + + self.accept() + + def _add_footer_buttons(self, layout): + footer = QHBoxLayout() + footer.addStretch() + ok_btn = QPushButton("OK") + ok_btn.setObjectName("primary") ok_btn.setCursor(Qt.CursorShape.PointingHandCursor) - ok_btn.setMinimumWidth(100) - ok_btn.clicked.connect(self.accept) - btn_layout.addWidget(ok_btn) - + ok_btn.setMinimumWidth(90) + ok_btn.clicked.connect(self.validate_and_save) + ok_btn.setAutoDefault(False) + footer.addWidget(ok_btn) + cancel_btn = QPushButton("Cancel") + cancel_btn.setObjectName("ghost") cancel_btn.setCursor(Qt.CursorShape.PointingHandCursor) - cancel_btn.setMinimumWidth(100) + cancel_btn.setMinimumWidth(90) cancel_btn.clicked.connect(self.reject) - btn_layout.addWidget(cancel_btn) - - layout.addLayout(btn_layout) + cancel_btn.setAutoDefault(False) + footer.addWidget(cancel_btn) + + layout.addLayout(footer) def _connect_signals(self): - """Connect all signal handlers""" - # Enable/disable coordinates inputs - self.coords_checkbox.stateChanged.connect( - lambda state: self._toggle_coordinates_inputs(state == 2) - ) + self.method_radio_location.toggled.connect(lambda: self._set_active_method("location_name")) + self.method_radio_map.toggled.connect(lambda: self._set_active_method("map")) + self.state_combo.currentTextChanged.connect(self._on_state_changed) + # Auto-update on district change + self.district_combo.currentTextChanged.connect(self._on_district_changed) - # Enable/disable location inputs - self.location_checkbox.stateChanged.connect( - lambda state: self._toggle_location_inputs(state == 2) - ) + # New Signals + self.btn_custom_data.clicked.connect(self._open_custom_dialog) - # Handle map checkbox - self.map_checkbox.stateChanged.connect(self._on_map_checkbox_changed) + # Enter key on coordinates updates map + self.latitude_input.returnPressed.connect(self._sync_map_from_inputs) + self.longitude_input.returnPressed.connect(self._sync_map_from_inputs) - # Update districts when state changes - self.state_combo.currentTextChanged.connect(self._on_state_changed) + # Zone overlay dropdown + self.zone_overlay_combo.currentTextChanged.connect(self._on_zone_overlay_changed) + + def _set_active_method(self, method): + if method == "location_name" and self.method_radio_location.isChecked(): + self.method_stack.setCurrentIndex(0) + self.latitude_input.setEnabled(False) + self.longitude_input.setEnabled(False) + self.state_combo.setEnabled(True) + self.district_combo.setEnabled(True) + self.map_view.setEnabled(False) + elif method == "map" and self.method_radio_map.isChecked(): + self.method_stack.setCurrentIndex(1) + self.latitude_input.setEnabled(True) + self.longitude_input.setEnabled(True) + self.state_combo.setEnabled(False) + self.district_combo.setEnabled(False) + self.map_view.setEnabled(True) + + def _apply_default_location(self): + state = self.default_location.get("state", "") + station = self.default_location.get("station", "") + + # Block signals to avoid overwriting persisted custom data during initialization + self.state_combo.blockSignals(True) + self.district_combo.blockSignals(True) + + if state: + idx = self.state_combo.findText(state) + if idx >= 0: + self.state_combo.setCurrentIndex(idx) + + if station: + idx = self.district_combo.findText(station) + if idx >= 0: + self.district_combo.setCurrentIndex(idx) + + self.state_combo.blockSignals(False) + self.district_combo.blockSignals(False) + + def _restore_session_state(self): + """Restore previous session state or apply defaults if first open.""" + global LAST_LOCATION_METHOD, LAST_LOCATION_DATA, LAST_WEATHER_DATA + + if self.custom_weather_data: + self._clear_map_selection() + self._clear_location_selection() + LAST_LOCATION_METHOD = None + LAST_LOCATION_DATA = None + self._current_weather_data = self.custom_weather_data + self._update_irc_values(self.custom_weather_data) + return + + if LAST_LOCATION_METHOD and LAST_LOCATION_DATA: + # Restore the previously selected method + if LAST_LOCATION_METHOD == "location_name": + self.method_radio_location.setChecked(True) + self._set_active_method("location_name") + + # Restore state and district + self.state_combo.blockSignals(True) + self.district_combo.blockSignals(True) + + state = LAST_LOCATION_DATA.get("state", "") + district = LAST_LOCATION_DATA.get("district", "") + + if state: + idx = self.state_combo.findText(state) + if idx >= 0: + self.state_combo.setCurrentIndex(idx) + # Populate districts for selected state + districts = get_station_list(state, include_placeholder=True) + self.district_combo.clear() + self.district_combo.addItems(districts) + + if district: + idx = self.district_combo.findText(district) + if idx >= 0: + self.district_combo.setCurrentIndex(idx) + + self.state_combo.blockSignals(False) + self.district_combo.blockSignals(False) + + elif LAST_LOCATION_METHOD == "map": + self.method_radio_map.setChecked(True) + self._set_active_method("map") + + # Restore coordinates + lat = LAST_LOCATION_DATA.get("latitude", "") + lon = LAST_LOCATION_DATA.get("longitude", "") + + if lat: + self.latitude_input.setText(str(lat)) + if lon: + self.longitude_input.setText(str(lon)) + + # Update map marker if coordinates are valid + try: + if lat and lon: + self.map_view.set_marker_location(float(lat), float(lon)) + except (ValueError, TypeError): + pass + + # Restore weather data (custom or looked-up) + if self.custom_weather_data: + self._update_irc_values(self.custom_weather_data) + elif LAST_WEATHER_DATA: + self._update_irc_values(LAST_WEATHER_DATA) + else: + # First time opening - apply defaults + self._apply_default_location() + self._set_active_method("location_name") + + def _on_map_location_selected(self, lat, lng): + self.latitude_input.setText(f"{lat:.6f}") + self.longitude_input.setText(f"{lng:.6f}") + # Perform zone lookup for coordinates + self._lookup_zones_for_coordinates(lat, lng) + + def _sync_map_from_inputs(self): + """Called when Enter is pressed on manual coordinate inputs.""" + try: + lat = float(self.latitude_input.text()) + lon = float(self.longitude_input.text()) + # Update map + self.map_view.set_marker_location(lat, lon) + # Perform zone lookup for coordinates + self._lookup_zones_for_coordinates(lat, lon) + except ValueError: + # Optionally show error or just ignore invalid input until valid + pass - def _toggle_coordinates_inputs(self, enabled): - """Enable or disable coordinate input fields""" - self.latitude_input.setEnabled(enabled) - self.longitude_input.setEnabled(enabled) + def _on_zone_overlay_changed(self, text: str): + """Handle zone overlay dropdown change.""" + overlay_map = { + "None": "none", + "Seismic Zone": "seismic", + "Wind Zone": "wind" + } + overlay_type = overlay_map.get(text, "none") + self.map_view.set_overlay_type(overlay_type, opacity=0.5) + + # Update legend + self._update_zone_legend(overlay_type) - def _toggle_location_inputs(self, enabled): - """Enable or disable location input fields""" - self.state_combo.setEnabled(enabled) - self.district_combo.setEnabled(enabled) + def _update_zone_legend(self, overlay_type: str): + """Update the legend display based on overlay type.""" + # Clear existing legend items + while self.legend_items_layout.count(): + item = self.legend_items_layout.takeAt(0) + if item.widget(): + item.widget().deleteLater() + + if overlay_type == "none": + self.legend_container.setVisible(False) + return + + self.legend_container.setVisible(True) + + if overlay_type == "seismic": + # Seismic zone legend colors (from the seismic map image) + zones = [ + ("Zone II", "#a8d8f0"), # Light blue + ("Zone III", "#f5f5a0"), # Light yellow + ("Zone IV", "#90d090"), # Light green + ("Zone V", "#f0a060"), # Orange + ] + elif overlay_type == "wind": + # Wind zone legend colors (from the wind map image) + zones = [ + ("56 m/s", "#f2b6c8"), # Light pink + ("50 m/s", "#e57373"), # Red / salmon + ("47 m/s", "#c6e6b8"), # Light green + ("44 m/s", "#cfe8f3"), # Light blue / cyan + ("39 m/s", "#fff3b0"), # Pale yellow + ("33 m/s", "#d6cfee"), # Light lavender + ] + + else: + return + + for label_text, color in zones: + self._add_legend_item(label_text, color) - def _on_state_changed(self, state_name): - """Update districts based on selected state""" - districts = self.STATE_DISTRICTS.get(state_name, ["Select District"]) - self.district_combo.clear() - self.district_combo.addItems(districts) + def _add_legend_item(self, label_text: str, color: str): + """Add a single legend item with a colored box and label.""" + item_widget = QWidget() + item_layout = QHBoxLayout(item_widget) + item_layout.setContentsMargins(0, 0, 0, 0) + item_layout.setSpacing(6) + + # Color box + color_box = QLabel() + color_box.setFixedSize(16, 12) + color_box.setStyleSheet(f"background-color: {color}; border: 1px solid #888; border-radius: 2px;") + item_layout.addWidget(color_box) + + # Label + label = QLabel(label_text) + label.setStyleSheet("font-size: 10px; color: #333; border: none;") + item_layout.addWidget(label) + item_layout.addStretch() + + self.legend_items_layout.addWidget(item_widget) - def _on_map_checkbox_changed(self, state): - """Handle map checkbox state changes""" - enabled = (state == 2) - self.map_placeholder.setEnabled(enabled) - - if enabled: - self.map_placeholder.setStyleSheet(""" - QLabel { - border: 2px solid #90AF13; - background-color: white; - padding: 20px; - color: #666666; - } - """) - self.map_placeholder.setText( - "Map Placeholder\n(Click to select location)\n(Will be implemented later)" - ) - else: - self.map_placeholder.setStyleSheet(""" - QLabel { - border: 1px solid #e0e0e0; - background-color: #f5f5f5; - padding: 20px; - color: #999999; - } - """) - self.map_placeholder.setText("Map Placeholder\n(Will be added later)") + def _clear_map_selection(self): + """Clear map marker and coordinate inputs.""" + # Clear the map marker + self.map_view.marker_lat = None + self.map_view.marker_lon = None + self.map_view.update() + + # Clear coordinate inputs + self.latitude_input.clear() + self.longitude_input.clear() - def get_selected_location(self): - """ - Get the selected location data + def _clear_location_selection(self): + """Reset location name dropdowns to default state.""" + # Block signals to prevent triggering data fetch + self.state_combo.blockSignals(True) + self.district_combo.blockSignals(True) - Returns: - dict: Dictionary containing location information based on selection method - """ - result = { - 'method': None, - 'data': {} + # Reset to first item ("Select State") + if self.state_combo.count() > 0: + self.state_combo.setCurrentIndex(0) + + # Reset district to placeholder + self.district_combo.clear() + self.district_combo.addItems(["Select District"]) + + self.state_combo.blockSignals(False) + self.district_combo.blockSignals(False) + + def _lookup_zones_for_coordinates(self, lat: float, lon: float): + """Lookup wind, seismic zones and temperature for given coordinates and update UI.""" + global LAST_CUSTOM_WEATHER_DATA, LAST_WEATHER_DATA, LAST_LOCATION_METHOD, LAST_LOCATION_DATA + + zone_data = get_zones_for_coordinates(lat, lon) + temp_data = get_temperature_for_coordinates(lat, lon) + # Assuming that valid locations within India will always have a seismic zone/wind speed + missing_zone = not zone_data.get("seismic_zone") + missing_wind = zone_data.get("wind_Vb") in (None, "") + missing_max_temp = temp_data.get("max_temp") is None + missing_min_temp = temp_data.get("min_temp") is None + if missing_zone or missing_wind or missing_max_temp or missing_min_temp: + QMessageBox.warning(self, "Location Error", "Data for this location is not available.") + # Clear the pin from the map + self._clear_map_selection() + # Clear IRC values + self._update_irc_values(None) + # Clear global session variables + self.custom_weather_data = None + LAST_CUSTOM_WEATHER_DATA = None + LAST_WEATHER_DATA = None + LAST_LOCATION_METHOD = None + LAST_LOCATION_DATA = None + self._current_weather_data = None + return + # Convert to weather dict format for _update_irc_values + weather = { + "wind_speed": zone_data.get("wind_Vb"), + "zone": zone_data.get("seismic_zone"), + "z_value": zone_data.get("zone_factor"), + "max_temp": temp_data.get("max_temp"), + "min_temp": temp_data.get("min_temp"), } - if self.coords_checkbox.isChecked(): - result['method'] = 'coordinates' - result['data'] = { - 'latitude': self.latitude_input.text(), - 'longitude': self.longitude_input.text() - } - elif self.location_checkbox.isChecked(): + # Clear location name selection since we're using map method + self._clear_location_selection() + + self.custom_weather_data = None + LAST_CUSTOM_WEATHER_DATA = None + + # Save looked-up weather and location data + LAST_WEATHER_DATA = weather + LAST_LOCATION_METHOD = "map" + LAST_LOCATION_DATA = { + "latitude": self.latitude_input.text(), + "longitude": self.longitude_input.text() + } + self._current_weather_data = weather + self._update_irc_values(weather) + + def _on_state_changed(self, state_name): + global LAST_WEATHER_DATA, LAST_LOCATION_METHOD, LAST_LOCATION_DATA + + districts = get_station_list(state_name, include_placeholder=True) + self.district_combo.blockSignals(True) # Prevent premature triggering + self.district_combo.clear() + self.district_combo.addItems(districts) + self.district_combo.blockSignals(False) + self._current_weather_data = None + LAST_WEATHER_DATA = None + LAST_LOCATION_METHOD = None + LAST_LOCATION_DATA = None + self._update_irc_values(None) # Clear values on state change + + def _on_district_changed(self, district_name): + global LAST_CUSTOM_WEATHER_DATA, LAST_WEATHER_DATA, LAST_LOCATION_METHOD, LAST_LOCATION_DATA + + if not district_name or district_name == "Select District": + self.custom_weather_data = None + LAST_CUSTOM_WEATHER_DATA = None + LAST_WEATHER_DATA = None + LAST_LOCATION_METHOD = None + LAST_LOCATION_DATA = None + self._current_weather_data = None + self._update_irc_values(None) + return + + state = self.state_combo.currentText() + if not state or state == "Select State": + return # Should not happen if logic is correct + + weather = get_weather(state, district_name) + + # If DB is missing zone/wind data, use lat/long to query shapefiles + if weather and (not weather.get("zone") or not weather.get("wind_speed")): + lat = weather.get("latitude") + lon = weather.get("longitude") + if lat is not None and lon is not None: + # Use coordinates to fetch from shapefiles + zone_data = get_zones_for_coordinates(float(lat), float(lon)) + + # Fill in missing values + if not weather.get("zone") and zone_data.get("seismic_zone"): + weather["zone"] = zone_data.get("seismic_zone") + if zone_data.get("zone_factor"): + weather["z_value"] = zone_data.get("zone_factor") + + if not weather.get("wind_speed") and zone_data.get("wind_Vb"): + weather["wind_speed"] = zone_data.get("wind_Vb") + + # Clear map selection since we're using location name method + self._clear_map_selection() + + # Clear custom data if user selects a new district, implying they want database values + self.custom_weather_data = None + LAST_CUSTOM_WEATHER_DATA = None + + # Save looked-up weather and location data + LAST_WEATHER_DATA = weather + LAST_LOCATION_METHOD = "location_name" + LAST_LOCATION_DATA = { + "state": state, + "district": district_name + } + self._current_weather_data = weather + self._update_irc_values(weather) + + def _open_custom_dialog(self): + dlg = CustomWeatherDataDialog(self, self.custom_weather_data) + if dlg.exec() == QDialog.Accepted: + self.custom_weather_data = dlg.get_data() + global LAST_CUSTOM_WEATHER_DATA, LAST_WEATHER_DATA, LAST_LOCATION_METHOD, LAST_LOCATION_DATA + LAST_CUSTOM_WEATHER_DATA = self.custom_weather_data + LAST_WEATHER_DATA = self.custom_weather_data + LAST_LOCATION_METHOD = None + LAST_LOCATION_DATA = None + self._clear_map_selection() + self._clear_location_selection() + self._current_weather_data = self.custom_weather_data + self._update_irc_values(self.custom_weather_data) + + def _update_irc_values(self, weather): + if not weather: + self.wind_speed_label.setText("Basic Wind Speed (m/sec): —") + self.seismic_zone_label.setText("Seismic Zone: — Z = —") + self.temp_label.setText("Shade Air Temperature (°C): — / —") + return + + wind_txt = "—" if weather.get("wind_speed") is None else f"{weather['wind_speed']}" + zone_txt = weather.get("zone") if weather.get("zone") else "—" + z_val = weather.get("z_value") + z_txt = "—" if z_val is None else f"{z_val}" + if not z_txt or z_txt == "None": z_txt = "—" + + max_temp = weather.get("max_temp") + min_temp = weather.get("min_temp") + max_txt = "—" if max_temp is None else f"{max_temp}" + min_txt = "—" if min_temp is None else f"{min_temp}" + + self.wind_speed_label.setText(f"Basic Wind Speed (m/sec): {wind_txt}") + self.seismic_zone_label.setText(f"Seismic Zone: {zone_txt} Z = {z_txt}") + self.temp_label.setText(f"Shade Air Temperature (°C): {max_txt} / {min_txt}") + + def get_selected_location(self): + result = {'method': None, 'data': {}, 'weather_data': None} + + if self.method_radio_location.isChecked(): result['method'] = 'location_name' result['data'] = { 'state': self.state_combo.currentText(), 'district': self.district_combo.currentText() } - elif self.map_checkbox.isChecked(): + elif self.method_radio_map.isChecked(): result['method'] = 'map' - result['data'] = {} # Will be populated when map is implemented + # Both map clicks and manual coordinate entry populate these fields + result['data'] = { + 'latitude': self.latitude_input.text(), + 'longitude': self.longitude_input.text() + } - result['custom_params'] = self.custom_params_checkbox.isChecked() + # Include weather data (custom or looked-up) for backend calculations + if self.custom_weather_data: + result['weather_data'] = self.custom_weather_data + elif self._current_weather_data: + result['weather_data'] = self._current_weather_data - return result \ No newline at end of file + # Deprecated: kept for backward compatibility + if self.custom_weather_data: + result['custom_weather_data'] = self.custom_weather_data + + return result diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index f170b83e4..3c3196670 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -712,23 +712,9 @@ def show_project_location_dialog(self): if dialog.exec() == QDialog.Accepted: location_data = dialog.get_selected_location() + if hasattr(self.backend, "set_input_value"): + self.backend.set_input_value(KEY_PROJECT_LOCATION, location_data) - # Process the location data as needed - if location_data['method'] == 'coordinates': - lat = location_data['data']['latitude'] - lon = location_data['data']['longitude'] - print(f"Selected coordinates: {lat}, {lon}") - - elif location_data['method'] == 'location_name': - state = location_data['data']['state'] - district = location_data['data']['district'] - print(f"Selected location: {district}, {state}") - - elif location_data['method'] == 'map': - print("Map selection (to be implemented)") - - if location_data['custom_params']: - print("Custom loading parameters requested") # Lock-Tooltip-Events-Starts------------------------------------------------------------------------- def eventFilter(self, obj, event): diff --git a/src/osdagbridge/desktop/ui/widgets/native_map.py b/src/osdagbridge/desktop/ui/widgets/native_map.py new file mode 100644 index 000000000..604992881 --- /dev/null +++ b/src/osdagbridge/desktop/ui/widgets/native_map.py @@ -0,0 +1,362 @@ + +import math +from pathlib import Path +from functools import lru_cache +from PySide6.QtWidgets import QWidget +from PySide6.QtCore import Qt, Signal, QPoint, QPointF, QRect, QRectF, QUrl +from PySide6.QtGui import QPainter, QPixmap, QImage, QBrush, QColor, QPen, QMouseEvent, QWheelEvent, QPainterPath +from PySide6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkDiskCache, QNetworkReply + +# Path to zone overlay images +_DATA_DIR = Path(__file__).resolve().parent.parent.parent.parent / "core" / "data" / "project_location" +SEISMIC_ZONE_IMAGE = _DATA_DIR / "seismic.png" +WIND_ZONE_IMAGE = _DATA_DIR / "wind.png" + +# India bounding box (approximate) for overlay alignment +# These are the geographic bounds the overlay images represent +INDIA_BOUNDS = { + "north": 35, # Northern-most latitude + "south": 6.5, # Southern-most latitude + "west": 68.0, # Western-most longitude + "east": 97.5, # Eastern-most longitude +} + +class NativeMapWidget(QWidget): + """ + A native tile-based map widget that fetches OpenStreetMap tiles + and renders them using QPainter. this avoids QWebEngineView dependency. + """ + locationSelected = Signal(float, float) # Emits (lat, lon) on click + + def __init__(self, parent=None): + super().__init__(parent) + self.setMouseTracking(True) + + # Initial View (Center of India roughly) + self.latitude = 20.5937 + self.longitude = 78.9629 + self.zoom = 5 + self.min_zoom = 4 # Restrict zoom out to keep focus on India + self.max_zoom = 18 + + # Marker (None initially, or set to a default) + self.marker_lat = None + self.marker_lon = None + + # Tile size + self.tile_size = 256 + + # Network Manager for fetching tiles + self.manager = QNetworkAccessManager(self) + self.cache = QNetworkDiskCache(self) + self.cache.setCacheDirectory("osdag_map_cache") + self.cache.setMaximumCacheSize(50 * 1024 * 1024) # 50 MB + self.manager.setCache(self.cache) + + # In-memory image cache (url -> QPixmap) + self.pixmap_cache = {} + + # Interaction state + self._last_mouse_pos = QPoint() + self._is_panning = False + self._mouse_press_pos = QPoint() # To distinguish click from pan + + # Overlay settings ("none", "seismic", "wind") + self._overlay_type = "none" + self._overlay_opacity = 0.5 # 50% opacity + self._overlay_pixmap = None # Cached QPixmap for the overlay + + # Initialize + self.setMinimumSize(400, 300) + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + + width = self.width() + height = self.height() + + # 1. Calculate center pixel in world coordinates + center_px_x, center_px_y = self.lat_lon_to_pixel(self.latitude, self.longitude, self.zoom) + + # 2. Determine visible tile range + # Top-left of the viewport in world pixels + view_x = center_px_x - width / 2 + view_y = center_px_y - height / 2 + + start_col = math.floor(view_x / self.tile_size) + end_col = math.floor((view_x + width) / self.tile_size) + start_row = math.floor(view_y / self.tile_size) + end_row = math.floor((view_y + height) / self.tile_size) + + total_tiles = 2 ** self.zoom + + # 3. Draw Tiles + for col in range(start_col, end_col + 1): + for row in range(start_row, end_row + 1): + # Handle wrapping for x (longitude) + tile_x = col % total_tiles + tile_y = row + + # Check bounds for y (latitude doesn't wrap typically for Mercator) + if tile_y < 0 or tile_y >= total_tiles: + continue + + # Logic to draw the specific tile + self.draw_tile(painter, tile_x, tile_y, col, row, view_x, view_y) + + # 3.5. Draw zone overlay if active + if self._overlay_type != "none" and self._overlay_pixmap: + self._draw_zone_overlay(painter, view_x, view_y) + + # 4. Draw Marker (Pin) if it exists + if self.marker_lat is not None and self.marker_lon is not None: + marker_px_x, marker_px_y = self.lat_lon_to_pixel(self.marker_lat, self.marker_lon, self.zoom) + screen_marker_x = marker_px_x - view_x + screen_marker_y = marker_px_y - view_y + + # Draw simple pin + painter.setBrush(QBrush(QColor(255, 0, 0))) + painter.setPen(Qt.NoPen) + # Circle head + painter.drawEllipse(QPointF(screen_marker_x, screen_marker_y - 15), 8, 8) + # Triangle pointing down + path = QPainterPath() + path.moveTo(screen_marker_x - 7, screen_marker_y - 11) + path.lineTo(screen_marker_x + 7, screen_marker_y - 11) + path.lineTo(screen_marker_x, screen_marker_y) + path.closeSubpath() + painter.drawPath(path) + + painter.end() + + def draw_tile(self, painter, tile_x, tile_y, col, row, view_x, view_y): + url = f"https://tile.openstreetmap.org/{self.zoom}/{tile_x}/{tile_y}.png" + + # Calculate screen position + screen_x = (col * self.tile_size) - view_x + screen_y = (row * self.tile_size) - view_y + + if url in self.pixmap_cache: + painter.drawPixmap(int(screen_x), int(screen_y), self.pixmap_cache[url]) + else: + # Draw placeholder + painter.setBrush(QColor(240, 240, 240)) + painter.drawRect(int(screen_x), int(screen_y), self.tile_size, self.tile_size) + self.fetch_tile(url) + + def fetch_tile(self, url): + request = QNetworkRequest(QUrl(url)) + request.setAttribute(QNetworkRequest.CacheLoadControlAttribute, QNetworkRequest.PreferCache) + # Identify user agent as polite usage policy requires + request.setHeader(QNetworkRequest.UserAgentHeader, "OsdagBridge/1.0 (Garvit)") + + reply = self.manager.get(request) + reply.finished.connect(lambda: self.on_tile_loaded(reply, url)) + + def on_tile_loaded(self, reply, url): + if reply.error() == QNetworkReply.NoError: + data = reply.readAll() + pixmap = QPixmap() + pixmap.loadFromData(data) + self.pixmap_cache[url] = pixmap + self.update() # Trigger repaint + reply.deleteLater() + + # --- Interaction --- + def mousePressEvent(self, event: QMouseEvent): + if event.button() == Qt.LeftButton: + self._is_panning = True + self._last_mouse_pos = event.pos() + self._mouse_press_pos = event.pos() + self.setCursor(Qt.ClosedHandCursor) + + def mouseMoveEvent(self, event: QMouseEvent): + if self._is_panning: + delta = event.pos() - self._last_mouse_pos + self._last_mouse_pos = event.pos() + + # Panning moves the map view provided we shift center opposite to mouse + # Convert screen delta to world pixel delta + self.pan_map(-delta.x(), -delta.y()) + + def mouseReleaseEvent(self, event: QMouseEvent): + if event.button() == Qt.LeftButton: + self._is_panning = False + self.setCursor(Qt.ArrowCursor) + + # Check if it was a click (distance moved < threshold) + dist = (event.pos() - self._mouse_press_pos).manhattanLength() + if dist < 5: + # Clicked! Place marker. + self.place_marker_at_screen_pos(event.pos()) + + def place_marker_at_screen_pos(self, screen_pos): + # Convert screen click to world lat/lon + width = self.width() + height = self.height() + + center_px_x, center_px_y = self.lat_lon_to_pixel(self.latitude, self.longitude, self.zoom) + view_x = center_px_x - width / 2 + view_y = center_px_y - height / 2 + + click_px_x = view_x + screen_pos.x() + click_px_y = view_y + screen_pos.y() + + lat, lon = self.pixel_to_lat_lon(click_px_x, click_px_y, self.zoom) + + self.marker_lat = lat + self.marker_lon = lon + self.locationSelected.emit(lat, lon) + self.update() + + def wheelEvent(self, event: QWheelEvent): + angle = event.angleDelta().y() + if angle > 0: + self.zoom_in() + else: + self.zoom_out() + + def zoom_in(self): + new_zoom = min(self.zoom + 1, self.max_zoom) + self.set_zoom(new_zoom) + + def zoom_out(self): + new_zoom = max(self.zoom - 1, self.min_zoom) + self.set_zoom(new_zoom) + + def set_zoom(self, new_zoom): + if new_zoom != self.zoom: + self.zoom = new_zoom + self.pixmap_cache.clear() # Clear cache on zoom change for simplicity or manage better + self.update() + + def pan_map(self, dx_px, dy_px): + # Convert pixel delta to lat/lon delta at current zoom + center_px_x, center_px_y = self.lat_lon_to_pixel(self.latitude, self.longitude, self.zoom) + + new_px_x = center_px_x + dx_px + new_px_y = center_px_y + dy_px + + self.latitude, self.longitude = self.pixel_to_lat_lon(new_px_x, new_px_y, self.zoom) + + # Clamp to India bounds to prevent navigating away + self.latitude = max(min(self.latitude, INDIA_BOUNDS["north"] + 1.0), INDIA_BOUNDS["south"] - 1.0) + self.longitude = max(min(self.longitude, INDIA_BOUNDS["east"] + 1.0), INDIA_BOUNDS["west"] - 1.0) + + self.update() + + # --- Math Helpers (Web Mercator) --- + def lat_lon_to_pixel(self, lat, lon, zoom): + n = 2 ** zoom + # x + x_norm = (lon + 180) / 360 + x_pixel = x_norm * n * self.tile_size + + # y + lat_rad = math.radians(lat) + # Avoid infinity at poles + lat_rad = max(min(lat_rad, 1.4844), -1.4844) + + y_norm = (1 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2 + y_pixel = y_norm * n * self.tile_size + + return x_pixel, y_pixel + + def pixel_to_lat_lon(self, x_pixel, y_pixel, zoom): + n = 2 ** zoom + + # lon + x_norm = x_pixel / (n * self.tile_size) + lon = x_norm * 360 - 180 + + # lat + y_norm = y_pixel / (n * self.tile_size) + n_inv_pi = math.pi * (1 - 2 * y_norm) + state = math.atan(math.sinh(n_inv_pi)) + lat = math.degrees(state) + + return lat, lon + + + def set_marker_location(self, lat, lon): + """ + Sets the marker location programmatically and centers the map. + This is useful for syncing when coordinates are entered manually. + """ + self.marker_lat = lat + self.marker_lon = lon + self.latitude = lat + self.longitude = lon + + # Center the view on the new location + if self.pixmap_cache: + # Optionally clear cache or just let it fetch new tiles + # self.pixmap_cache.clear() + pass + + self.locationSelected.emit(lat, lon) # Optional: emit signal if we want uniform behavior, + # but beware of infinite loops if connected to inputs! + # Typically we don't emit if setting FROM the input. + # We won't emit here to avoid loops. + self.update() + + def set_overlay_type(self, overlay_type: str, opacity: float = 0.5): + """ + Set the zone overlay to display on top of the map. + + Args: + overlay_type: One of "none", "seismic", or "wind" + opacity: Overlay opacity (0.0 to 1.0), default 0.5 (50%) + """ + self._overlay_type = overlay_type.lower() + self._overlay_opacity = max(0.0, min(1.0, opacity)) + + if self._overlay_type == "seismic" and SEISMIC_ZONE_IMAGE.exists(): + self._overlay_pixmap = QPixmap(str(SEISMIC_ZONE_IMAGE)) + elif self._overlay_type == "wind" and WIND_ZONE_IMAGE.exists(): + self._overlay_pixmap = QPixmap(str(WIND_ZONE_IMAGE)) + else: + self._overlay_pixmap = None + self._overlay_type = "none" + + self.update() + + def _draw_zone_overlay(self, painter: QPainter, view_x: float, view_y: float): + """ + Draw the zone overlay image on the map, aligned to India's geographic bounds. + """ + if not self._overlay_pixmap or self._overlay_pixmap.isNull(): + return + + # Calculate screen position for India's bounding box + # Top-left corner (north-west) + nw_px_x, nw_px_y = self.lat_lon_to_pixel( + INDIA_BOUNDS["north"], INDIA_BOUNDS["west"], self.zoom + ) + # Bottom-right corner (south-east) + se_px_x, se_px_y = self.lat_lon_to_pixel( + INDIA_BOUNDS["south"], INDIA_BOUNDS["east"], self.zoom + ) + + # Convert world pixels to screen pixels + screen_x = nw_px_x - view_x + screen_y = nw_px_y - view_y + screen_width = se_px_x - nw_px_x + screen_height = se_px_y - nw_px_y + + # Skip drawing if completely outside viewport + if (screen_x + screen_width < 0 or screen_x > self.width() or + screen_y + screen_height < 0 or screen_y > self.height()): + return + + # Set opacity + painter.setOpacity(self._overlay_opacity) + + # Draw scaled overlay + target_rect = QRectF(screen_x, screen_y, screen_width, screen_height) + source_rect = QRectF(self._overlay_pixmap.rect()) + painter.drawPixmap(target_rect.toRect(), self._overlay_pixmap, source_rect.toRect()) + + # Reset opacity + painter.setOpacity(1.0) From 5a563b0691f01dc054cb73ec9c31ee0fe896cfaa Mon Sep 17 00:00:00 2001 From: Nidhikhare12 Date: Thu, 12 Feb 2026 12:47:21 +0530 Subject: [PATCH 002/225] Logic: Update analysis and DB generation --- .../plate_girder/ui_fields_project_location.py | 4 ++-- .../core/data/project_location/database.py | 11 +++++++++-- .../core/data/project_location/zone_lookup.py | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_project_location.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_project_location.py index 91747ab83..b934e0a31 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_project_location.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_project_location.py @@ -12,9 +12,9 @@ from osdagbridge.core.data.project_location.database import Database -# Compute absolute path to weather.db sitting under core/data/project_location +# Compute absolute path to weather.sqlite sitting under core/data/project_location DB_PATH = os.path.abspath( - os.path.join(os.path.dirname(__file__), "..", "..", "data", "project_location", "weather.db") + os.path.join(os.path.dirname(__file__), "..", "..", "data", "project_location", "weather.sqlite") ) diff --git a/src/osdagbridge/core/data/project_location/database.py b/src/osdagbridge/core/data/project_location/database.py index 7c158d9fc..42899bd0f 100644 --- a/src/osdagbridge/core/data/project_location/database.py +++ b/src/osdagbridge/core/data/project_location/database.py @@ -9,7 +9,7 @@ class Database: stations = parent; temperature/zone/windspeed = children. """ - def __init__(self, db_name: str = 'weather.db'): + def __init__(self, db_name: str = 'weather.sqlite'): self.db_name = db_name self.connection: Optional[sqlite3.Connection] = None self.cursor: Optional[sqlite3.Cursor] = None @@ -18,9 +18,16 @@ def __init__(self, db_name: str = 'weather.db'): def connect(self): """Establish connection to the database.""" + db_missing = not os.path.exists(self.db_name) self.connection = sqlite3.connect(self.db_name) self.connection.execute("PRAGMA foreign_keys = ON") self.cursor = self.connection.cursor() + if db_missing or not self._table_exists("stations"): + schema_file = os.path.join(os.path.dirname(__file__), 'schema.sql') + if os.path.exists(schema_file): + with open(schema_file, 'r', encoding='utf-8') as f: + self.connection.executescript(f.read()) + self.connection.commit() def close(self): """Close the database connection.""" @@ -346,7 +353,7 @@ def get_statistics(self) -> Dict: # -------------------- quick manual test -------------------- if __name__ == '__main__': - db = Database('weather.db') + db = Database('weather.sqlite') print("Creating and populating database...") db.run_schema('schema.sql') diff --git a/src/osdagbridge/core/data/project_location/zone_lookup.py b/src/osdagbridge/core/data/project_location/zone_lookup.py index a44924c2c..e9f356ff0 100644 --- a/src/osdagbridge/core/data/project_location/zone_lookup.py +++ b/src/osdagbridge/core/data/project_location/zone_lookup.py @@ -174,7 +174,7 @@ def get_temperature_for_coordinates(lat: float, lon: float) -> Dict[str, Any]: } # Get the database path - db_path = os.path.join(os.path.dirname(__file__), "weather.db") + db_path = os.path.join(os.path.dirname(__file__), "weather.sqlite") if not os.path.exists(db_path): return result From b34a8df44f06c8eb8f59b4cb463fb21ff39676c8 Mon Sep 17 00:00:00 2001 From: AdityaWagh06 Date: Tue, 17 Feb 2026 14:27:55 +0530 Subject: [PATCH 003/225] refactor: material properties and UI cleanup --- .../bridge_types/plate_girder/ui_fields.py | 10 +- .../core/data/ResourceFiles/Intg_osdag.sqlite | Bin 249856 -> 0 bytes .../desktop/ui/dialogs/material_properties.py | 708 ++++++++++++++++++ .../desktop/ui/docks/dock_utils.py | 42 ++ .../desktop/ui/docks/input_dock.py | 639 +--------------- 5 files changed, 766 insertions(+), 633 deletions(-) delete mode 100644 src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sqlite create mode 100644 src/osdagbridge/desktop/ui/dialogs/material_properties.py create mode 100644 src/osdagbridge/desktop/ui/docks/dock_utils.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 9dad090bf..dbb32b442 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -1,5 +1,6 @@ from osdagbridge.core.utils.common import * + class FrontendData: """Backend for Highway Bridge Design""" @@ -37,21 +38,18 @@ def input_values(self): t1 = (KEY_MODULE, KEY_DISP_FINPLATE, TYPE_MODULE, None, True, 'No Validator') options_list.append(t1) - # Type of Structure section t2 = (None, DISP_TITLE_STRUCTURE, TYPE_TITLE, None, True, 'No Validator') options_list.append(t2) t3 = (KEY_STRUCTURE_TYPE, KEY_DISP_STRUCTURE_TYPE, TYPE_COMBOBOX, VALUES_STRUCTURE_TYPE, True, 'No Validator') options_list.append(t3) - # Project Location section t4 = (None, DISP_TITLE_PROJECT, TYPE_TITLE, None, True, 'No Validator') options_list.append(t4) t5 = (KEY_PROJECT_LOCATION, KEY_DISP_PROJECT_LOCATION, TYPE_COMBOBOX, VALUES_PROJECT_LOCATION, True, 'No Validator') options_list.append(t5) - # Geometric Details section t6 = (None, DISP_TITLE_GEOMETRIC, TYPE_TITLE, None, True, 'No Validator') options_list.append(t6) @@ -67,7 +65,6 @@ def input_values(self): t10 = (KEY_SKEW_ANGLE, KEY_DISP_SKEW_ANGLE, TYPE_TEXTBOX, None, True, 'Double Validator') options_list.append(t10) - # Material Inputs section t11 = (None, DISP_TITLE_MATERIAL, TYPE_TITLE, None, True, 'No Validator') options_list.append(t11) @@ -81,7 +78,7 @@ def input_values(self): options_list.append(t14) return options_list - + def set_osdaglogger(self, key): """Logger setup""" print("Logger set up (mock)") @@ -92,5 +89,4 @@ def output_values(self, flag): def func_for_validation(self, design_inputs): """Validation Function""" - return None - + return None \ No newline at end of file diff --git a/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sqlite b/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sqlite deleted file mode 100644 index b03b1a1672d9d8c16b2a42290708beb46e1f44e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249856 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≪w!dG*xrE!dkoOEQCZ+GHdN>7RO<}2faFY3LEZ6u%$U;S*M#}uR$l4|no;(zy!wmx8&=Kr$I%y)Yf%kyaq5cAcb z4Lcp6Yem**>qC-w%Qzrh-E~JDk0SX^<^9I!AgR7*6w}@o;3+U2W(0%^Ihygry$1T~ z=sB9&33)3|P#aq7%d8NBnr=`)bGuQg2r18qxm z%qhw2fL4ilGq~?8`k|C0c8i>@nx-!Bh~#f+9-L}AO%=(Hp5xtVE%z<7?_kFVtc{74 zIR6h~oh64%RE3Y&wOAl0Gb zEyZ>9_)=Murh7+Va@^c<$sV1ssI8)iuA;TanhuM(LI%*m&BQmJKDq{*-l^Qp4N=U0 zLD&MIf$cT0L$wIDwno4Xr)Y7#qzS_)q?n0NU*xLr#p(N zFWCK9%+{gl^?WNT1-x)YHNIBi_IB|~LjKZ4a*KsM6{PjLCrhdp>4xr+qTsjQSuxY( z`lyC2)7_q5ME3jN>yBQepo+Ji zZi9 z-F% zk+1ti%@4|Sh5T6$*tdo9+>docu_=TQQ%%WJ076QxQ-aa`i~@9vKJuOdP$-0nw;S%HIbBVyRCsxs=2oQ0Q@?k}xurUD zw)homN9j!a^X@42eV`4?Dg64FS?@SFgwP5=-$+-j^hEG(`!bw@$~hQ>Q@HZpa~_1T zQd+_~6?gb`uDpsDJY5(}I(*|{qrW?&*!_WQ_pgMC6$f~vUPty02OCc;X+=1l_3Nu1 zfw58sFhECobcoOX+VBc@kM%C!{*V0*aM=Cf^uSftV~%MhtT;?3zt8Osbd2_k6uG{A zWKc6Sf`kLvl<|`9vmyg(>_>Sc`zQLfb@k}eEUGiCu??i zh3kom_2`Q3;s@_2HgLM5ri(+Obz0|`T&M=iJgZ=RJ2|0d*u|(F)UjkB3e&dvc;15r zG`l=O{z-Qa^4o6=ec6+0KgOF5fPvZ>)%_a~Xlz4HG`kSGPB4R^lTyxkq1_*sYXL6T z@7{o(Zx?N96 z7eBwmdYV^=laSk8HYEV(kjQ!m9d|u5%;nwbso@js82>t>iTg4rC!!M$MqNd4ZY{O2 z=OOD6UY=eY$+zETNJv!&1Njv6EV$Kvym+Vkd3zH3a4<8J?2abx%#a8io_??c#Y%Fa zahG);ii?U|qi+(&ZX0LiZ+5+jb&5~@BR0v^(dF@rA>Ik)oMa_7 zdBi04C67pb!XC43=H)5r7@iq^Z{Z2u*A{Z6?r%vuz`x9R8$IX`?>O&0Gsn(o!gdT= zIBT5By&fI=_0Tn!4zZi8n|P&QooJl<0-P#|~ryPK^tZJ@lg0pjJ>E)9i&uz936kP4zZ@n8w%kHS|$q;7? zCz@Sl9eSPXVL5GG>>t?O!T3lqoM7E?1BMfnF%0>1a?QHHPRV{B`^Ns7egEadW|Cde zrCNcRk>a;5f;1m6;$b)Rv?$cxv6vc8)-Gx-`LH| za$~~U8P$Cm^cp0Ox2CL9w_z#^3hRcK$oae)fl5Z&-#LPeR9)(!K&;ShZxp`idbwmQ zGBSs~|D857$L{FjgmX*;uCh|(My zZx(%ud`x9WzliaX;{SKC;MaoQ)T>jou>W6u;Ba74^6!$D`2XSGlJsTLE{y-*>Z|rX z?w#xTgJ-q-OZRT~0M{L^dixpsJnK(Zx0S-L<+UBN#M12pKHkqx0ikI!XC^j zIxWb!cTX*qSVQwcIr7J0DdC_!7dku4KyKY?U9PVv0-wP0>7(`ob6k_zFZEUZ5EPHoD zPvPmp#LHF!G_%%Xf_Xi3jG=dwhgPSe8eJgq}iD(pB z&jzGuF~H+Vi=I<-IMs|aH>+F=i=QNrs{T~RHw?&gCRlkox@Ft`CVR`~bv=2#K;f}I zA*gWuP?-FRWD*v&E`CVF8wwx3*y>kz`X6v$j2of}VCyU~32)|n2gAF+1xF<-OXoA&P%F$d; zBwdR3yOdMi-%%$88JM+o_7NB%K8+_a4YObag1viX5BA`YAjvHnFQZPHR#lIHCL$r` zCbln?sC)H2A_mr|68kJ|_-f&_?pb7e*|nQ{ussArXk8CB-jIT$CW#B=B!I*Enn9g? z$_5FWrQ^VW?d`kva$#JZ8$k8AsS9fm#=7^zoobu zT~M<~4DcF&Wv|ha*LvnGJyq37a>Tu^p(&b$*87*(GuRXBd$7BPb6K1e7J`}-AOO>8 zPCN|D9*{6}w@zL2644z-O7F0D#z5}sw4P-LSM{V5NZ};tvk#L;o2FNVJwZzez?6e> z?ijujs*c8pJ)b1Y?Ru0h3~bHtl3JzZrsMcmY5y zENYe1#XDH^jD{@dN41S@sK2$_XIU4$GnV$659w=2*!UP9}H6u$q`ApC{zCC z(=8he#9|kgla~p~qdM0T+P}f-fcb>y<{s>q;gpy7rQrY^t{r0TIIe&TUXjy;-re-| zR10k0Yy#y9Fn_7W%7-}%q^KD?*QDMs6mcs=Ull`UqjWL^h0$)vP2^jMa$4I({K{?JjmJD{ww{T6;Lrr|9 z-wCYKFH?xBFc4oj0Jl|jlhWEA?43c&MT!$juu~ZjsR?j3)G3}dDAX%qfqJy+*x)sQ z)0c18r4JS#oWtkBIQr=N9&C}(hqqc6gsQ8MxRq66^QsD;1=HwDSUIyqg@dFaiE^Xw z(=oK&W8J200|>|+fbowPVwaR}tn0z<7=1u$t~xbIiKMI$QJD zfc()6{?>(?d$0+HQ^m#!a2&)+)Ae-RD}t>1@G|Hn6b3?e5~mHs^mF*nbiyJe(;xYw zbNH1oZJ;b13iV0y_az($VL{Kf|4Jdwx?cFW(iFWPSa2XABd8Nga{s|NAK znnNpk@I)-FJEsopMPn^T^@Mpb=dfU_oU}*xtTPZ(=3y7)!Qzj&pfp5(ArFmQ+v67O zG=`)oUytoyadQmyFJNC7AywB(f^I9KMJGA;LKsXa=};*>;nZI38wiZ^f;gL-i@xtT{zD>QZJ;W_nuG|UaiZ*K0f6;Yk) z$Z*pE7+vnlWl)Uw+_VwipeIaas$oOhq`|yO%a%U#u;U}S1+yNKs9w}#3BaeGF>y0& z^2yJU#Ogr!N*(EtFqDXgiZh7{AN%Ur0h5$q6IIx6im{crvTru`@KaE{Ql7agCH%_z zOsH#;)IteeK)*qz;-)ej3}AN?yHZz}==)XK-h6D{F7(NOKM;%egS&%isozR1 zPPq^3|9>8smHhkUcK@IKYm(ke+Lq+U{{LrT55QW_Vb4_e3+@YCZ@aqe&+N-=uXQQ^ zl3&GB{;l=@n|j9KwW`>kf{rn^jf{y|`t_AUWmZ*+Oo4D+9X7MO_$@hodoOIGSUFS^ zYhWzVC!()3^?#PhesrN0SuLRFB>Of@;3+BFddAA@Tm@LPYfc5XDh!)8N(#buSwD0X zc3&)k!nQIp$HRm}u>qd6yPMtcE{r`+pHs)=>YKeY$81WT+SSt-2OMpyK9i;mIfOpn zu5>A3aG?tO?*5RF={{SMLbo48;413u{n7R@e;J}9i^DIqPgLf48l$WSG*n^o^a`UB zsTI`fFs!?iplmFsarYsDh5~+Y1NxW9Ogs28=DGZ>ue?c)Io0kOtS+ zxAkDQ5u%_aPHZE+B~Fo{q7qihJ^3iC`&^R2{u*>C@~iWs>29m3?>ez-@YB$!P*(Ss z6b!c36o1!#abwRp1RSCEoquhOFuy`I(z%6+Mk~a$QMs;bmGj1!4LTa-uVL*ej%fFQ z{ew9J-Zg<7r5$r3){^`$?VoMz!K@?4DvO_U9N5}0_B>j>Th7+{6xLG`s5x}0j_Wb7 z1K-R$4Cn47p`d($j;v(M%Biu3cK4hePwF^1j{}S4TuT;`q%D_h>#*L3_1DVDY9EXa z${FC+HPu-&inJ%S$~7|yCecJpROjc z)pQ`^J~-zPA(bVEaPU69Dr2xUy1S?T6mzYq6IP$vziTU?eWHW`t8*oXtsld>Pvmdr zKwV2pHFz!GoBoV-@x~tP03sG{!nG4OS2P(G5j0pzwG`Gt_AeMJ!FK38 zaRZh={dRg0kU9-RKY=E0mwS06xX&uu)`R^&PO2|zu>G~p>JD__r zO*W)}t8QdQi0x3rIlqU|3SFsgo<5rUsQpRdxt`LEJ=pf+qzl&x97FW%5Ofl)txo8c zwbA=@-Lj4m7_ioy!{z@0^~VW0b*jvqWc?}Y4%e17Jz+6tL20F?oPOIlu$U&aA z1|^q4cR&(P`xbN&kO9m8djH@E)RS;~(}LF0^!M!_boO8?4=0VOWJLMi2wo^8^96-K z?I0K(6D3@0C3HS1e>44fbS=C-N%8w{N#C36PA%nMOB-n|UDH!Z;EW{oot^?GB#FSl z(m&H$U55A5>K+=p^4$Q6hJxlUAa~$fd|v88E4#a=0^u1WyO&0an_gvj11zS!#%hDk zT{N#!DO6#-=|&8=IsH>s##*@x{Pylk9?eGtp5wpU)-x)esBs%z98}!sw0YSkCGaTT z(AU{bqO6L@v|BL-yv&unL|4yfvoz_qoFzB%JzIOQiAT)J?looXxFyt~Tss&qoadow zp1(j&z{-ME!{l$~=%RK#1Dn0{)1*02O=6_eMe$tvhom~bY-`Vm(}Z1z72&%{m?GtJ zw9;TzF2Nq8h^};F4E95Zyf5i%pgA`*-0;*X?PD?5tYGpgLk#%6@Vr%{( z0xViKmGnddkG(h3e`#-cz7IL`SMmSY+Jj9xPAXF>CRi_`0vKnXf32L7b_(*}!irpi zSxR%%x6c~qGQ01)NoQ#*PPb?D-o`%gJ;=9r^_0cKjx%MPu+d_l+e)w(cFU3f2A0#3 zHg1N>L-H>%*!ydJ!!k8c&tKT9-q(4{>K^RRL5K4MyL%kaPzywgYb?*w{)L5&ouUgcPOvu>M2!IOk_7Xp^1>-wQ>S5@1W!$|1~TpvLzTDbSRuj%s3;e4run^RRR!iIY~3q2uxsv1woZu4_Mph|$`i z=2+7dkXTcMJ4+GKU_mb!OpYT^EeK#r77xjMRUE%qiXR`aJ?oqB=U0&?` ze;5nice8icJSkg=UZNTKx#FTZ{E=sAVKc}d>^IpoPIP?)<*M*63%T@(5au3}5A#?J zpHN;8x=nOixN5)H@G(_l19X$H6_AL*xByLG^*(R-2UT3~`%G#@v@kE1WlMZem~{_E zM2kzLu*O#Vj|yc*g@0NZqzHbB;7<&-kLWFE-YWlOy6UJ-p$#7rK|tDCsLs+Qo?&wv zg^KGo{ORmvk%BvYYh(DO4bCIps9vcw+br%n?jf_#hgRgZM)Dh}*tO zrFdibjYf9Q7?5nh<3YY6lS0dDH+)Wnv7Uv=if09sf7kFY;nzBI&xoinvs*sS z+@#auktEQS*bV=r&$(l%cG2Aajy2I2RkSMgnz$%ro0y6gyclj&&%;x+2Ne2I{%OM} z#8#M~$fi3CPFDXuizv|W56Y6Y9*wa&Crgr1uUE4;6d7^7>K@gFl!dlzgsrcdbgYdN zBnR6~d084I{x+yTn23t9RZM5nfg~*r$8Nmst=513hWlcu`TH3Ti$yDU1M!MkSkuSJ zyBwzk1dETt%va=!#QGS78ug2NszOJft1}m@uN#*OY~};@%iWNr6*RCsaKg&LyhA zxCIh5_6AZ%Ij$VIsCAXR0uMI>7fa;~7O78+JvQ!^G{I>0tWt@zwixC(_KaZiDXD{d zhSChW)PlXyteyM`FtSL|`FFF2poEMZ%`a>Xrs^4ZHq1Ou80m{-0x{~O`4x4fA*IzZ zsv(jcp>^t-h}-AVQ`nIv6N6IcEWCm?Nl*^C%7{7MP7HqzkWf2x_!DoqI-4HFj_K>H zwN4l{K88{->6Apm&8tRXG=>1MBhw&9;E0<>UyM}n)my;64#kQ{oVHl@0F0JG7{;sY zrl=VV`jt$i9{zC*qikP{NWx$ero6D9h)8HT4Tl;fLVAYx#E7KMDQ)ItsA)hPh@wSzHcRN`Gw-qG0alEidN!0hX_eK(}|fr0_&}s-80SP>meO0F<{5oanIv!c9`Vwi>OTMUTu_7{g%n9LyXlI%6SudD*yyG%VWH>u$hr7IB0(i(gjk}u-_`FM~I zE=v6cM*nx5IsXfao;m-EZll;nRqIK)*E<&$`XkPq|8b$7IsbQboH_rWIsczI|MN5F ze`&(#^W>THzxJ!0IseCwwtY|AXU_l9if3oe|Kf~!=KO!={EsexGw1*C|K$1qGUK42 z^Zz|8I5+iCJpX?q@DcX@e=vE3|8{>?(&fHSe3yD(^^W)8UB&Jzu)4+w-PIz z?CgkE?5Gk1!5TIZ1Vp!-aOG-Gvp~fWtr*JQXfDw*27sely zzBpc|@AuRxvI`vX(6q3F5(v64_|phbL;~8O3u^NI>)EqV5|l1oa48x42aHwB$$?pI z#2j@y_7q2eB0Z!;L^>_{qI7x@ib%4-Nkt^Ro7wF!K#@s>anM=Vu#?bx1DcLYg6Ru! zoDqtoN(Y$|aOt!{6p>^PSjzob%Dw}|iawSwAf7(Texg(E+3#Q)Q3?irDx87aov{gj zMT|b^lvFGuk1k4#3{L1I%CkuV**(*>I*OIFIAHA)dixWE-MqR>sazzLaHJc7vUj7LOtgv0|jIYnJB5x-kIk?l&h6LKhm4K~G&)X?MYfFe|O&KAg_P>7CuuGGE3w`q+68Km!= z!H9n4k_dtTk`wqUe>4Vh(TJUL0*+`zL`Ngsz{vf~e+(_VSQ)}N0}w=J3_z&T1TAn5a>J*RTpjG^ph^oN zNPKGeSRpg6iI7t1GBEM5WJDS$?46;9(qVCt8-bK$sbZ)z_8=({?i+i+3U>K?W>7q# zWV`jC#MQ*7bnM{+lEN%qFafIcRf|W1yzyYt-7IE;Y%Eh=W-0lkk8nQ|`8}8_i1!%4 z#Nz~PIXkj%l8xp~kr_nMOO8 z1}idoRK5XBJ|yWQGI{~IVXQ+~7kJ1v?!lY8kD@?}L z>3%A)pWCrMRZ(j&qJ&FI=mD|Dl%XMRy+IOT%1Qw=(xcg@%XGG$zG%{sZr~;XO4w=L_#Pdfkdb}$85oGL`=q<4(G>m9&8FM zCY`{d=@N=h>pmjvO=zHbV2Vg{K%%4TiRV5T6W_cNB{HEszk(^W=%J9TfwD0% z{IZH;_z7VW|0|;z`6vQgI(fH7%4P=|9VXjR)$Qu2hsn3qHh^p64k(~lvavue)oILV z5b0cqe#H2^yJL8z4T#qRQe_L|q*!qf~}y6H<|DCHIPA(fOkLP?-gPU5PcCUPZ6wS-MdonmDSIc2R` z54A&%CY5^3yorQu__!Qb!B~)j0Y2KG({f_S^)Hn4l4?`(P)Hl@at?Z-eNd|AT}~s~ z2dZYp+lD7FnzBwo#*0O!GzmPYM5I*FQ18TFgQDK!`7&rKB^vcprxB(M-lpAzx=MA1<^=-h zeNZbu-q9cr1KZy4)EG>~`QH=xGYf7_eJ6EI%HL8};6Kj%oT0!O3Y?+9848@Cz!?gh zp}-jmoT0!O3Y?+9|CcFn(HQMuNB@!Z@ne_)9TTF85CaXu&1lL9kIUmyf-=HL(5L-0 zXSZ2nbp4=>J&{`JsAXS{MI%7Ru(-lO`|RHEh0B2w2NC}1RSrf{ec+}8>(Gt-ANueJ zK01L~jnMp#JONtY-=+_J&XU24Myo)F@H0vx#3K<`GDv4eUVeco8H}Wu=xM=WOy1WW zNZb^~dm|__%2uxe}Wr6;>L_DCfK*0l)0o@<$K;QI=QtNZ#k(h#s(hrix}~0mr5Oy zfNVh<^w$&-Q=m>cl+>v2=hGt$Qk2qT*?Zy(8$gXy1i(;ubY*>gZ8Vsl&dxavleXU_yaQ@%_?Pg??A@nF7^pDU;}GH;s4)(sw7k1JT^IBjSaF3vC-^GS99&Jpo|(MJm3dF zjSZhtd|QwDl65l<%$4i}HO65R$WCXqiD?rfPIzPp(b4|*ppwsiDvDeFoOq)J)To_! zdNj>5Bo^rG8=#~~jq&L8KMizHau6LYIVnnVG8C1DA19rr#)i*GSoNqclQUx>sR&SG z96J82bQVrb9qjNa1t%m~CA(bW8ut?`AWby^>9uwnJ|mjx5&A0u(_^0cz8d3@arKje zBV4xXN2wpt%nc0$`8u+qtjwjG&|3D8Gn~ zmfvJ0zv&9CLCQ(3MjZjxBV?+->oG?WM~!jlB&UBhaZq9q8!a(jwTe=d;wx6fQDei$ z#2P(9nj(%KNr1M48so5Wr%B@Uk(h9uBn}R8v#Ka9bwN<*2wa{06tPQ`vQcA$6zGqB zp-0H1z1@sC3NJOr;gK9nOcla|&_IzXEj1#OqG+6`Zhbg&Vu(gN&J`ZJ(ZnJySr zW5Wr8rbkFspVMQ8*55S7VdF}c*z^@(sd~d|=dKtu$OQqVIaP=d@|BIF#s-!6p+^X+ z?Lv<_RHeo^Gy?vUNDP^Mga=B@pg~4ryh_QWDgn+>=%}&bLy{;xLO}6Uk9yBnV>~)Z zr-2S?8AL}j$)$*{1v*Qiqs9i=9{A~_delA0&8VlL#yE5=Uph9_bMBI~FNNi`4C19~ zBx++9B&kJgY(0fkKN@vMEIoqCWHMu#TI6bsLn6s5ktT|tQmc3 zJ*zPe7uzi@n7%7W?vG)yJtB9Cid?!n8&cJJR>kF@i_G66Np4UhxYb6XM|H)6zIP!G zi)7bHv4FZYfeniJ;==X zjuIU`_S(H0K36u58mF|P2$t93%UJ~}!9~pH{Rs;`8eE|H z@Q-JHBn2+3O!j6M7V;~qH!fb%**(-Ve&24NMH@UH;th!>D_}lcw-Q6Wg z_^hTf?1Nig9Fp%gcC|0=`|f!2RQ>I-ecsu4Vc+k~?)%on&c$n&x3_k#Tii<`H(Sl}-BTzLc4!Pm4-#nL=6V{nr1Iu>7AX7|!+fza}8HN#5-Ie163QQYz~@H?3LQJ&uN~ zcp*{m{+}x*O2awnm`JS@kDoBHaZc0h;chI$bUE{};g-`_-!Da?9t<9ypL+ zIa5l`gbkY(cQ&qF-q{}eEf_C9u|M_d&6>sKT|ddjAx<`<&1Gv=u1)ZV)7{XzPWI%klRf$0vjsX=Xzwjf znIQ=jV1oVa@+7Y}d&m%e^p%o$Nci&$G*rzeZi zGLKY~$JRw1o5q^oyzz1v`-7Ciw&pIhe!DhqT{Nx}jqtXl8FQvjXqhq& zbzcgbTjSVahxHuy{+{A3CnS{>&CA3?(X8UFRK4)LAS z7DBlzp-V-b+{8a;;?~vM!;--DHm~oe8vDLAH^EzCGwTgt?#cvjPU-u(NZ+?w61>&D zq3@f$NRLxZa5T8opF;HAF6rAcxfTB#8Bbq)rw@I<@+c}On}DzhyjlOZX+33If|KQx ztqJV(mPDUyN%YA`qEAK=e)5#=%dbAWC1ggx$qY=X!~e?SnSt+|VMd?j6#4fv<4hny zM>Wm_5>9uwIul4JNhB=)fAI(ZU+ujKc%4mf=~*j6slP05fl|1xFBjB5d`(B7p;2rI`xVQ4s}4UUIZ0HDq>}@%!B^d z-s`va`<|g8-}l|;e)s>}q|b9!b8^nR*IIk6wfA1rer-c|*;EW@X zV9x)1&xu!hNy)<{n~J|Tk^i5Rtuc}Rk5rh6{Qvh%MDiR|OqJFR4bT z;W%CW5#f%)3d026R4UxOR6eJ08@L3Rgic|++*^^MQn0nP4IMPr=>K?*_UwsK+jYX@ z?%xSk2Tl{_C@hCUDct-;nIna#e$!TL5nvKFrLCEJX9zYdzZRGMwX9Nm_Be&oRuG*~ zuq*S0KMKpCKngdN2<8g6-e&cH0FyA9)MEML6kLlK9e><^c+$EVDb=aPs7Gsu$nL*c z*rZTfw<_GQNsv&ud9Tcx&qqgN)B-#@pyzw95Q$Y-g5qw4>*vV03O9aV z6bvvKkLGdU!HPaQnxp+OC=Nxx#8wR+B865^cu%fyXr>rCg(GvsZ~`Xdv2YxC@J4TR zG@Bat$#a^I30=FS9}p=lwdB{3!a-=X!nJqE_W+adC|i)Z`%6zN6x{xYZ7?g<>t5%S zYGIDBy!Cz&l?#mc@*1JA5b~{X)s5!#vXK-HpDk(+n1oVvei$WF*(mE~8cJ*j86}n8 zMuPz_<%^(F=Ur-xEJavK!pQu7el0Q^+!a<0h16aZOm+sEhb4AbudP5o=|(*3|5_c zhOkUwA?8oviX~!|6b^o0q!};?qmsGfViC_7BcyXy55Z|XCJ#RAHzG(13k?I=Ppy#3 zWE-Mz`Ek>i*?NQ6Hia<^qp;g@^C&6o1ycc&&?szp zZKiPjG&4oJA830U4H|8HSj>sST*!>V_VY!G6?Xklq#iH{o1*&6TdpqdKEQU50l)I< zy_z?cmeqVkGZvtxkIGhI>rJv6E5wx$q_AhIh`7RK2Slj=lhDbj%e*k8pwqH?bvD)7 z$LyimPl-fs`gdWALhbaSu;YX!fD|qP9e_!A6xN<(k}N-jD?CZe6`iE%h6%U*n(D0N zRMN=JBDo4<7)@dPLS7Ph!>X{us1fTCU=lWw8Z|X)0L2`4ntiA_Apr7{;QP+h)R^hv z1$wq6yRD~3Z%}fu6&z96@q~yyU=j{x)tQ$BJ9ZceHZP2XRR|_$y5&j%)q)+X2gS@N zL<2%?L`aM9Ifc6W08B!ud{(*FuN<+v&=6Z3O6EU2Rg9BP)l`eZPMQUl4=yzSIZ6s~ zi=5sjM++ce3R~_F8UVvM+5Z2gyukkMvKNB37;J^e2CO9y`fe8*w zaA1N16C9Y}zyt^W*K;6|x6Fp*(*5Gy)+633pqt~BU-G_`M+48unR@LPBmN#rfjVKf2+ zmUYPF2{0_X#k(a&OYA5+iGC*Tnj8O=45uQ_pzxe3@!cxi`DXFK0Vbi6+rw_7Okr<} z1K+A>oLPpgj7bi4E*BSPFGhU#UE(iOIMw`_V}=UPJY5*1@EnA_0mGP>^Z)e7yG;K7 zBPE-Qzgyg1bZ1dj;q`@C1()R?%RfEuXL+l0zm_{M_VHM0&ehpZW}lJuvn-0<6|Lbf zP5k`Vav)L4&Ha~#lOZ^a!DX_1BdK^ddjyyygwLMlqC2TM2=BQ~tjHA)h@W#BbVCDh zuiq_x(9Pc#u{nE#1Ru8jtMz?_#UoL|z5RPmf)V?vfRM>SV1z25{;4SlH+))Ljr%?? zay-pg2lii;KyG(@O5}OtZ>%MvGv6Yg+j3qyLdD$Pzbg|$+%BGVrrUDJFzCjOjzOt0 zz4?7%4K~Z4+e3i5wBM{0- zLlCQeBZAa-q5WPGLNV_6&kRc1aan{o2O%ubEu-=DFxZ*j70DcYqez7IP}ci$m;6%x z-ujXt&~GU^O6^auBCO(znM1pWVs7@Iai)?GVaNSw+&S)317W945=mJ8BJhDmc@~W; zsncu^dH=Tv4C}Q5+(xaZTZ^59PZ2l$PrX^hFs7%I*;3oyZ3USP&zUXG?xY67&is*m zJ`E0vVigEF{@;Pt(pSaa#0}QGzgUiW>$KeAd(lJe$&s%AY4enVPRp4s>4C7JK%IeO8&%WKsFU{NnROs)H5j^+rqN!VoS_YZ7XcEJ_ClY!CEI~nxa zj4DjZnu|pwTW1={JdI)^qW()Fnlukgs2gde9%g#vby0jU=;E#`!W2vbn#NNtCL?Ni)AXEw0-{nsEZ9$$_o)#OLC<7txa0q8 zVZ(F8*ytRUVbsa8E2chC2&%^VoMrW@z&~N9?lh{C->DM3(pz+<*(sfugiQhW{7=0p z$nd7qTD!J3BR7jWme;vOGWAxlO2T?Cc!D@_W!Sq z4^I~3<0cD&sTYDR-E0SBD2YEsd;vhFrK!`3 zaG>A4fqtjTPB)C}{BDZ}MMP%&7Zsg@mR~d-=+4IP)iQla=oIh`0GVXRp0!Qh{eBZ~ zkGuZ=ln)swgT-%LZiv5|N?`L|5}ELyFjL4jagxXq1*IZ%N8um&VFsGJ#X>q=K&mwaM;XMiGN7GrCTW-3|$>OJsP8^Az9WcAnu*Nv+5ciZ&zKJH?P918p-3yL2FTaYirBZ z?hMh=0_twH0zB`c(pySa&=n8KyX!!e-e(jS!Alygc8t*sOU-B%u=5MS%lK~l;Q4EK zwDW1-+eK%FY6X@ERsg68FMtgevwDh)n@@rL92-W{IBw8SJGvhg|;z)QMURV9`-n0wALD;c`mDWkxWH+ynQpn z;{|$w@%T&?9#0pJhEEv_JCEkccnz&3xy5tnynk4ONc1C-(^C8EX|zZ_9Uk_w89Z#c z(ZggpZE59Oa;!S`w9t0!ODY6ynhO)yEWcO1P_(~rEuFhd76}q3Xgi> zbe5p)q=2rG*fJUrNCRb!IKoDGI^D{>u3 zo@@1g-i&QL>MeBUoz}3>k|oAyUP*;!2gSC(N!TAAb?>w?Z$Ua^k=e^S+1)~0dkofx zoMtwFuk&QSDuxRFod0z?4G!9#^)jn!@atq13=ewF)H1Iz;A;dztAhqZ@-Yjj&k>7S zS;=EPLEHYry!{+?{IivuEUFjT2@kS&%2<@~Vi^qMj!`p&K~yIza^)Wi{#;N?n~qu$ zq1K-p!Z(uMtyV8ulr-q%jDvP{E^4)6+R@oTn_{wPs4~_-HfGD9#Xrm6me)%oRzp{l z9u9C_FIA=6fW4Jt4a$NO8dNp13Vf{<0V;Vf54w+rB4QU7!aighx#2_ebeZWSN-M@1 zl-K^ypt=XBG|IqR`A0?NO6T*Sx6jBVw(L*&R?_tMho6)WtgmQny-p`Q3#_fnS=0HdrLAB zh_P5bgVCINY6-(6d2G%(Ie*QWO^sN(VfOtOL1=cmLEl?E)}YMQ(4flI0xZ#GB0o9T z^PpWc$MRt(m5Z?YFG9*7ykSZ&D9X&$_@Z`W6WZdmQWmIe(&$Eo>@%`%&1ui>p}LpE zjKfE(*K7JV&}#hvZvVKqFf)NN7IQTi&2cpk`c^9Xm-P}4dLdN{_w@2Q|2eTv{@)EQ zZ+bXP;NF6<2IVU0(4cx-S~mCx?q>Tu=#5mxyJxlylqY|6w^aT^-VYCYL4HQAwzbLr zoHyrmzY&B(d}|$6cpPP-x!Da_jimQ^LztZw14_U2_I5M!BhmmAG-)m<_t zViR4%gYIzac0?rDe_GT>ukA}3G*xfl(x{4V|I3wQvX$K2jCistj#(ldaXOp=_Qtb5gGT7iL@mRnlsj* zhSFeArSt{N7OuIAT*`xfMz7;_6k5#qlDo%5hm!`)9(&NX(4bKjN5EG^HzL>Zpx<=r z_>@?6|1Tn}{$rxVNrPr(9<x~32+rIHSaIck3?(yKfvAyJ*)j=vR3-P6KL=MYhB6n+R|X+{|$U_ zFTJ_6rsOjv9mNype=~g(=l_ZG|HS#9!#We^e{4=C&i@=Ol+tBhYbVbC>=K$d|J$wM z#QEPuA12QK6X*Z8PMrVEvG{oSFf(!fpE&>XA=Q6w;{4BnfV=-^od1KMxjFyWbCp5q zJ4z>&e5ho0@#l&=i@sg7uJG4|Zz%X%!IcHs`R~fF$-67BC-*zKL$P1RcIG^v^Y)yw z>EFH+nRBdgNGScO=FS`7is~y^`H76()F?6%OUc+xbk!e&5y><2BqZ+0q3x z{J8aZ(8dd_uh%>D@#@HochTXW&owefZ+ucBdbRLvZ|JgqpRkeIIbe>v!FUmg1nYR+ zq2cmq)n@C$p;N>g=Y4!}b!28C-9>w?=V0GT>ujRhZ(5h(V0fI%S7-z{BVC<~+Cn2y zm3bcfB9*h%sclns(c5t>yz)+eB zM)gbNiUwy{O1wMjc-(i>rw$3bFR3!0J4ChOW}*!e>I;v1QNPY(QV=-a+GAsSt?UwQ zp$pHk_!rT-PYUNYU27S9**()Anff%{b)KD7y5c!Y7R?gZAgz7WemZG58hf~w&~OE` z=3e6mokt_Ptn=}WAD#Zlw2SGpGiA8TuCq%S%>pxq&aqCz@NgISDm8|>Dh>H4b={%S zxD@OcGD~Z(v(k9gyLhy}(w#NS*~k4{ysKr=nogPpP7XbiHrD0KGS475X(T6LrIQ?z z!DywCl<&O9d&@7TKT@@gK5@GU)P+3~l&!X$tfApe7RNA+m-mf1u92M3xGFh*j?Cl= zIXrvU{F=wzL$|)$ynmeDaGUV9TD-nAygOZDdtYN*c5FM*p((PsP~QP7skHna%Vh7` z5AnFy(8s^t%|cT{=U*(ApxTnzM#FD00S1!{>ViO*FCBAS4(f-;t-ynNPB*rohDZqV z-gYOC`xW|#Cu}&kSC%k?HBLS7HLIv$GB4^Gd$^X+a0N7YhdgljH&!=JyK(CGCU2nI zDi-myt)`2wv0R|(V*Y7mqvdjVxLw_0O$jnzKwWoev^>&G%~e~B^gMUw!#vtg>0?(} z-qHoO+0Aj9Zbf)Ct^9yxYIwALT{?$JR!4csx)K`C=}MoSs~TEuns%YM2|9O^c=U&6ZZlVu(q9Nz}Lf~{W z-<(V^SY{J$lBn%?jbYov!)o$WkJY$J@}IH~+<7Yxdnw)0Aja?PHDVa1n?GK1I}Mtd zw)GHBQTDZuIjqS@3nbR1zjR_r=@msi?`0nL19a1GMV!w(-y%cP4U0Lia&RP#+KbvU z3vQ>x*;`w3{Lu6SeRos-(=0~ZT*=b^Rg6#K_L_q*oiQYTbt&SzY_Ka#MFU>}I;*b28lPR*2qAwU(}c=#Z7Hq+u72IjoVO(6ANud2Q6T-Lj3kKV?_%Q&#e@ zZ=!d6S0w1vt3^+yT3)k37D-APcF}7L+YugC6OH1c0n{ZH{*(uJ*mu#}*H{xp+k{M- zDt{%q$1*=W?5^gMNK%L03Rzl5Z?i<^(Xv;qNYaXLS~$>Nxnj~V-6Vrx#htp(#duIWx|`(W+6H z$cq<*hBZ03$f)d;VT}poDb-=s1a@I+`wrR_WOZHT%1QTS{g6(>R8KKjvCZ`}Oy>O1 zfF{K;bwDe+I-nEXmGZ!)GHq)Lna(Ha`W%t09W53Onqq$C{jG1vOm=GQn>XgL5M3Qs zMK}JEFs^%nec;-~l`ASHvkX}kp>1!s0!_|7$k)Q`-PiOQ!&=eRVO4ZB^{(@<<@4I_ z@UTtvwm*u-Y+WoGGX*x6>h1eU!!~9fwnH*wjD2Y9pmQJ|%H+12t(;KzQ`U(0T|4PZ zEX+&T9)AAgCH=I^6}l_J3#FA&YGu)liLDN_<=vN``375u_0eQ#-P z$=6CY6#uz+PjR&9pZE@d!-XsO4--EV9GKw11P3NKFu{Qd4oq-hf&&vA_@B*z-5b*%ocZmsb)K7(G~V-I&lwEaSR7^5>=>;^uvVf%vHo4!c*-DQ$xSJQicE*tD7 zd#cz-XUp*-yoKI9GWK{aq45f6%R0ODr`OH4$D_#hcPzMl-eUUczZ@}Kr5moXo&##K zNBcc=_UG(>!sA`EUOfpJ>FW*+mq#1s$WeETA>+1RN6z{M5BE9x!M*>&$G*Gix;Bs} zCj&bBk+ie!?sb{Ti?`Xlc4j9#;xAifJ;X({P0nHT`g85Lk%}i9kIeoF{pfk?5uxjE zl{58RW-gz===44IfD|Tg_bFqK*Ag19fHv)rBMzE&L}r}Ycx28H-Scg8#@wzv1D2KzF}R&hXcuj&JTZ`TdM`OJ0i9=N^*`Hrq4naKiOgHycw}xned~o|hVOLM2d$LQ+Z(grzlVN0Q6$>`~}!{pK01`+R(I}Dq4dOy64hj}M`<$*8r^XAc;(Eq0Xo5H>= z&s(g*!|YyVq{FzfGO&#&%MRqGX~3Y%d|G?1m45GMc|6{;^u=vIw{Pz|D1WYh(25al zwX)lnG~VDC-t?R7X zg~v1X|M{gqGg{JT>iXwvwoX(zo|1bwiYo3jIIWOV--U@={&BS1&Z9AFa@EPZjTRXX^x z(YV`w?H`AU@QlIb$d$rkqwpO5KtY**&#voNye|<8QByuXYTC#HiaB_A@>G-JWpj;7hDiJYgY6|q`Z^APlkfwleKu1m8rwp3& zC@KLarQX38+S!|zwLM2ilMT{xr{bvNW@C%=Q z`A@s99|))!C{k)787y?0?b%~qIw=o^2G{8|G{kZgeT7se=qPk#Ob5BI0NtlB2@2K3 zYw?~MH$cj_mb-@Xp=iIA=Y_~993L4Su5uqe_!=5=a{Q+hEudcv+Y9K(m}*UKfv+-@ z@;(1qLDSVBK9AV|q#Qw;a{D z(Xv;qDpvTcpy|pPQ;mECsuzJU{<{cQh>ZO4kKOZd9jxvGV;bG!z?GZSzHI9$r+k|@2sw7 zq57++p29#C@xGE#2-VaQQ!MDZu=`Kr?|*=KRq_=69cCU)9Q~u~f4_8e$E*+;x#J_F z-G_Q=PqON27OGTqP|&Z&%?VX5Wco4ezK%nu6srAJGO!EN-I%WQ+8M$B*5&tpspr(P z5E-%YkbAY&*;$;h-NwoTIPOGoN#R8{5Zp2b&luP}94(8Wz(6ty{Ql+?V{Hc_s8a*fd z2ch_X0*@7{#wj(AK(Q67#^~bvwJFyvh!zcpsL2{1HEsUiU_zglA*!mf95u>Yg^xp` z6zbe4Z+``eLjAw?0dOVfzsH*Cv`i zl%cXRJKN>YYaRVV*wZRhG8Fz8lcM^qP}yJ|IeaSnH6~5rqfjvP+wl)yW;a|RG9u$6 zqs@1wMkc4SGArBHxmS2U76pZhzLNR9@7N8K({I&togF2ExzU^G;n$^!IsCdLQO2)5 zSMp2udHm9~kzYD{`K6m@W-kjXiC(i#9 z=YOo15J;Lh|8rPCcLfvY|G;y`elzFIm^lAWod4Nw9CaJQiSvJ^y-wi9m^lA)taal2 zZ???-#Q8rrx5l#`4Er*1{%75oIREpZ+jVTyGwQ_opEV`$%}kvCJ@xxJ_`mG@Z}VHe z^B!NJZ7|P1tB2qz`}m`0_P?X+6z9e;=l@D?pH~_$*<1YCqDPCW3r7mxlK-W=V|g{X zXT)yIxjQE-yCZ8~^c#_9Bfb2=|B9c)K;u}x6MNr@ed*RJdOday4(8>OcHvdHnk-TT zs8dgydW=)$5VcncjEG~M6l%Bw0eNb8r*+Uc*m_W&+iJef&%qTPj(3U9xnVNGxBQqD zEFhzks>InwwZrB(eROazmh1lm4m7~Ia~O6N5+~vgpB#% zAMWtbU_0d?f}mtn$rz+?uHhAT^91xCHZj5#w*+K#&Q>ziXU*wN=7*=E#_P24LG#j0 zxE6#O4qKM?_vdN3vj2DZK>=w6m=5TuS!apaS*G!2g_H%CJi=B~D^6>LrKRMF!#F^^ zuOSt2gR=aD5$~j_@>QMU{{EOl{8f<(ACQ(+iI@U9#8(}YX=oC5Mx&GspXf6PomPR- z3XN-!f2dJd;UBjt8gl~thw9Vt2lhsO0>*bxh0HNkiLm$g=Q#Xd5z>4>>XEro=MnowLg$LR)NYk4@U+z6R>@^SOWC|I1gO3Gg4P4dd@7 zLh-lhCFZ4@W`dRVA}YPTff}GMuMbFlkO@FX&8i#BAC3~F$$te43m{3cXrIgOz~#d3 zvf+6^0Z`R1L`}{3sOhB1Vg_l3C|qxEpc^m4wgOTYMg?@#EC)3WGB>Wx^Q$mL?mDlB zW$q@6u9L!skD9S-r~%P~$Hm1TP}5f(rY23c+}w1~B&5OMI^o{lKvP~q7!0to(&6tz zwrUYJd{t!K2Mls&u=GuW#w*mGIJMBl-=*f34a^GT&myH}ivP>H;qY%KP3)Q^V%pmq z=!OQ!^m4Wq%m$!RGo7T9jmuEcV6I*qsfkQfBEdQbr;8BM4205uY7*qOMuTY>nwdgI zNK0zG4zozumu{+p!KyuI6}qb{P?49gQUFq?d_hklm5(LR(tPMWpd+IlqBj{U+zTSDzCzuiJt@zlVi^QKO_cGKDPA=wenwY z0J&fO9wKAP_{eCdJZu|Fg=6t}Hj@G42uSt#44@;U8RV5f(Nk2**MuG=Lod2fsB6n4 z7>pm7)KvR$6Ha&>yN)^!3ycEGFUP@lGm(QK=NUZ*C4!dQ+*;`$GX870pl$ zTrlD;Ot9L_ zzNC)Vb-Z>`&zFr}K1a0O2>7AhyZO4m3fSNRkyQeWoEte;ry$zly^oNU>0lXj1O}E? zk>!emTVi&~X-korzoWENrqQuIv3RM$oC^@_me61xY^-X$B+TQ~CW}th?%hQJ%K0#c zfRU<5m7*N^)@4*6BRW`yakiwB3%M}_K6wDjbFkX_%YZd!QBn9IZYPs3& zX{e*hK6Ur*f&g*7GY8On%6rNoet=HBL&it7gjP*Zxrm+ffk?sGPEt6u*V5CK8}PWX zXQtN(9!DaE$BMDpyM}q(P4k7^^4+`h9Hv=W-gmw4I^4Qx^Fs5fqpm2#C5K=+RR>46 zA(|aV3I~VfdxP8MePmS!nD%xnZ;eSw!<26rH%%|?Yn)ntDZE8Lm(kH8ssnTMwjMz5 zKJPw<{wcJ@V8Q4k@7BQ*tp2cwsYgFri|?(yU(lapzy}Y7(C->I`Yp6b>@l@f*{6(- z7C7`{7zoh&lJ_Ntel=~pNhCH8x~i}Q+iW%9J;UZPM@iw}Vfo(R5z8gQUN}I%xzosr z5ftSf_s=VW|4sUH5jMtSP!Xw2bj+a2+MfP42kY`;RQoKxzUs~g|_?Vc0c6sKG9f5$m zOm$h-xaaIG4(lgqJ&=NbloS@qr1`JF^U`Gmge64b%Dr|j7EptnRRXM+w4DrVBN`#B zTWJ1MMveARYn9>Mp&dH{xyH>v1n4Eagv0u%Q!g#fQdlTf-+u*;fp!rXQn(zyFDH>} zY~lmtyW-)Eipq(wJ&b%e&A}dOfiPyrjzFrl3JvhW3mxX4p}`{IV+?#%i1IS$OKLeN z7%J>LY*BZH2IeY+dF%Kv?<6=b^sKyNMkYT`0n;hoXP`^x)CdNC6&7aG0PVrVz zr!YvN-X0!c-rAx9V-8HIJnuGQZeLi;7Xk+y8%9Qo@+b@2HNf-Eb2#5dD~|{lvoP-p z^Mw2U3((a#xUEqAkA&~z+VueE?!{r8Sw4bwl2`T+&Mnl4lNN5b9T_ReqbPP33bzi6 zQ~){(-sLP>3YG54I=%96F=kF-FZ8-sD9Z^@U%W^K1?-09HbNdoy_*_WF(I< zhs6e5yH;`CN6Wy(6d`i=!RbBZ^B@okyD*GGcc-BiYYsGrF&1Ui*D%K14H&XeFFYR^ ziRHP14lV4kqp>9eRQze{{f5j#)CEn;f`TiAJ@;S47!4ppp>qa_Db`Ej0>&>}m?ASt zjPEiIHT%-qLUS9;;J4F4k=vo6f?SFKAB7v|+9@VLrQ=ds27X3iViaPFpsC@sK&I8f zZV=Qh1kfa7oG-aOAfRsn&qKuS4l@*(1q5{GYy4?wh+~ftoY@s>s18sOr)|d#0!K;5 zkHUy6%#|&p!#~BRKv?^z-STB8Wyum2;6E^bEIA7B?<9oos7^$BXeh=ZRAGmM>eUBy zWNd`|v;mDM_Ff8ev9f9Z3V z93}%?1#D_^h_A=|>ym>aQgw)vmIbMYZI%cpDNJ=$rJkD;E1OajAQ^FE=xqR)6<{_F zL-S>f!9i94t&>xD%3RA~0(5k2i^==l7VJ#>UXDCdi^&PcHU~TKy$;wjI2+vrnDhS> z?;~F6aLJ9ue=P1QdVk@c3wsLQpZ{$BhP*H3P03v!dwb52>=&}TvaX6AiRMK{_{0BQ zKZ%x&day8pVa`RmG?`6ft1T13YYWBa3ah%RtnJ&sKXm3SfFlVovNW<(SsZ!ROHeVk z$qHdE+}h^$S`d?wH`+0lQ+29c>DZu~b459j>133N#WYV7IRvA#7-WS%8*VD5*;JT>XbteGd}rHVXnM<%J5a=Ay!qnceP$_rjuyyZqocVFZR8?oPJ(x>cderB-A6;fDi2#7g{3fmdUtGG z9!v`1YEqYzF5dz6o$CVgmu&nD*Mkg_E<*T);2<0vH2Od*4-0z$6=m80MARj%ULS=x z^Qljm>L7^aE@y2J0_ z384ef(Xp{s#1-q0iitwP_RQDZi`k%CVSHGYVZiKwfR)21C4e~}1U8v~x(khUI9}M> z8xW9EZc6>oD?mrU5D3GDS(6rHkpnZIZzgK zbp>?1j6)_MEx~wzj*gW@!bqfs_^BaXtiUd&ITIU8h1vu~VL__h99SD@LZHF&KaS9v z_0+y}69VKk%P8}+cgN#-F<1Gn;lCDREqMP6=*Uw!fo-S4 zI-D5lhAlhvlJ-EX2G)#^j4rAa&eL?UA@O)FlVPRZQ%LIl2Xtg~fxIf&6S+1F+K%Dx zu&PhWv#A_`2!+)cyV_8}Wg4ik56GCY+O7uCs5MG%;pO`jqEXH`wJtHdcF@K*3bVJp z&8`OCz23c5rBne{YnN}p;&&InTj`km=A2t-8g|qQt3g|-yzf2dJs0_U8nnP9UGq{>{{p)F+a3P5Hi?R2G~u(K?Ja{v#?XKEB{&chiMu%1`0KitW@ON`+@g^ z$OVxL&kc~P8$2m;Y*@m`wRY0#74}#{>trD{$d!eVgS1T%nBSe>t;m(!m30qI6Af^% z1}ra?>Gf{&Zi_TV8fmS(AK+NCG9!-GNuGjZoR;shLPD$d+Q%3iivk=c8ztoaK7hG1 zb7v}!g`1;~(=>P`6xPTIfJ!CSd*Fcgu=g-^4%;z87!HhuA$O5ydmyiT*Z82U!!%rF z1<`l~D~p@}mSc(mv#-j&N-@lx8+nK(!F#VzMFMA=i!SoM?|q*(-eHA1z_58mMhxvX zl{X$C40)dWkySEi$o%n9gJD?+L(DUpOl5s5>syLp&Qp{Atb zpYT3GE4Eu+1o$pkeiD3H#Z&N&)6%sTCF+-_7<`KYe9Odm6JYf5=;MlS_J<>_TKndp zTI^hy9o?M(zWL3BV_Jaitp1GH+6_kvwk_28gtddzCvtAEEeK(Yy-k_G=o_PNRBW>z zi*SKFs8OhCI0&IGS#tjQ)F9st@S9I|+nH)0t;>(`GleVmrIsgu**C4RpcOaRY4YCU zy(JWSEP(<6M$d|#<ykb95s;JKQGa_qkdor?d>e?%h zL*Ac3HWYL$#)1MEc`)*zA{%|yyIZx|!Ah*3*`oDrZM3aOWK|nQF0^X3GvI9ZvW&>u zoj@|OE!2i%T~C!2c7tr_&{u@N0!H2!d7ne}TJMuo29JWmN~}bh$goo8ixh4GYc{>n zjz+bgvZtT`_13 zWkZ(xg{uVU(|XWSZfCd6;Vkk0FM6e?l-yK&thle}U4<_eZYlUeK}G(`yeo3Q5PLk< zkaJr0`?7wLl^dnVLGO#QMfv~lH8FIaZn4aXFZl;MMJXN&(g$S?idP4Xu3i$8>!ZDc zuJbM*4BanihA>(kSN@B#RzX zZU5l9wLB+A(@leJd=-D~$)sJ`%AxA;d;0f%%+e7eV|09Ew3B+E!Qy7qjOclA=TBJR zbO}L+LjO0Io*CHRYd0RvEYt2knkn{2V&4`{CY4wl6aB9a%O<+|rCgXEY$miVm>?VghS!%|ZDuqfH+V^P0Su^(iyUsr4 zzNbI^N@zCD9+M2S`Lk7TofO0B2^-&3#Y*AGfDzPIecDn_b$c3=;3){97O88?7p*cx z?G(XzqWxU7x1p~MJRhk48CO@mGepK&<0GSkTr5veYN}%0P#skhRRON6(8vN(K$Bt0 z{vvN^Owx6G)9!Ct0;VSFF{~BHFYwVb$hXa4JugJYnd2j)T}zrMOSZdBRjeCUv(3e~ zSh7lCK~I1jC8HegyB<%lyxJ!1Sy`QZalx(DGqN@Wa?R`hCLi#R2zeng&KMsVZSK*? zJ8i0B-B2!~@eaWS=*!l#Qu_x{A!gwZm=$eicMQU&-QSdqzrm9I9y=?wP{&~cJ}Ybp z$XIc@l99Ch+4M=2OtJjB~$D_EUTPzN-6KLdT2F-{~r)B zZOEnH(@uR4$YI~Dir_+E-a&18gRaxYM@?FRZgpkQpi8lM2JE%(;9TmcwNS`S0?9AJ8iI!y`8omwmVDX9hf%B zoxP`u)DvLwl;SD61+Tm}XE#m5dap3m`SVxruaSR_eAfG1ApdncPKuq`WJ`91ePz$U zTB}A!X~SHLh{-6c46v&d9nsDm>^#z=*)&_hmbvWka#MZ{#`6U0j z==*7k95Wo80ZtYPHCJBg{oeaMt*~qho&B1(1vn+e`vj-3PovJ$t(HE%x5XmuV8VWD2JMLrtMP^@M#Y0h(E%p;Ub5Zapc!CMPzGZwJwX z)|3;n&5W0#G=wjFI^_bhuFtw&@y+>o_rf1p}Znh#tbj&_&|Nhbtu9#!!YvkLJZ#!JS=Y5Te z!E=S`U(>RKwf2!aN#VAK1oLe&mS&g+n73>?3FhJe2*<1A)N!NPC2gdoGRpq_AwLT; z76~wNY2;Fe`LOo^O7X)uPg@igOuA&4>?njB1c$OY|5tjWrv87l_?DudqW|B& z<(D`oAaxjyzC`ed!x5U{t}tZAN+suljyrrm&c?tt__SM=gF!H*J(ow8@_25 zy^%Pl+-RA&cBWqsiEpbi|2gD#UKyRl6K(p;{4Dir|svNYvxlgDsfj zQDWdt8S%$v#jZ6Le=gU?0T4HgkHk6GCI=f=Y)ol2@YIkXI!@Bi5zAYud&z8}t|a)( ze4KSD2Zv1U&0T*`K95ko`cP>mb}?yH+nsL=lVQ1UNia2?;c4KiZA=3y@kipEYm+VS zX^YYMgp@bO|5bO0h*_oLOE94E{&TW7bY1D6#{AVlJCT!7LQ^rqL#aFW;r*IxleFap z|80_xm|6}tTN!902*FU?g*qu)@NlUzDo2Pt`1b>^jj|4twk?1)aB`Gw+3vYer>6dC zhzR*7u1pN+^&xS(Lgyic96JvIIo&i1;#7akvUVu$icy_(W0y#4w;S{iQCy@;ckHx| zL`vqsG9XLSNfq*XRVy@+mMVpj6$CN!k>e1MF?9J!$gpNQAfuC}K(S`Zv2ZBvs!&}3 zA081Jz$Bmu&5^O{h>)Ri@hmajPPkNAR5`Tjv=lntY#F$dWc-WyOPT?$XqggPUy(qby-+r>@sh(1s2!ll~~szX9d)L)XYu|&5>seHU}DmW4wA4;$=?P5osf> ze@Equ_W!4-u-k`+sE{hKb#8<4tCvHKI=Dmguy@RPFs>hqdAGV|39JZSmw7{c;~+=q7kCz((zH#NtJRsqv>M3 z2f0=dttB*P(MbbAmgj)UdRSi$DM7CdO|o^#F}Ux+$Dy5O!Xty*3uqo}r(W*xXWNH* zZ9vVyo-j3`1w=I7%}odC?t6-;-ymO`zX|CDLq zx__)6lSOp;n{#61$$L&Iv@)X}bUg^+R=RM0)_aItw-uExm8MDXWFA$> z1JVor2QC_u46798B`tBOw~3`m-F>=l^}tfW(zs1YA9Nc{ZTwfE6i>sYh1FT^s{hMd zX*!feEB+ht{i)DClv)JRG_Y%YWTaL4_cpOKp%;%2S30#H6ycvGv*4ETF1(LKBwrJi zG){w-UXBbj+R<$S)n6!nh;r=Z(kuNh93L5JmHxd=TfqWa z4PBz+JvEftwZ-j~{sWFLHDD-h(f%eHBK5V43u0`fB@DPhgDUYHHIV7oMx8%CYSONa zidP5MMrj03Lv3pPHO8dW)a^6q@TGB(K&46pxAv^a7mq158u)xd%#~*TxfoUIwNVoP z|B;FRzpeP&#o0xx3U4a-Rl&6UbMo%UeJr;jwln9h94~uK){W8MN82L@y&qY{{-5}g zXie~CYupZilNQb1#APkoeXn!JwVIj|-uJdQm{sw1>JiK6-LkiUx2ag|5c$;p?$MQz z`Pw%udY|_ZLM)C7v4KYnPJ6-85X^W#Sx%ix>rU7wYrc74cUuyCr&?nsqA;y zwxj{hjS0Rvt=dqnQv zNut`PkrtFX`-w%}p*n0)-bkyDSUzjnOMvR41Ye7mjH+O2kWEIFyB56DTDr*x&L{|> z3M+{aZDh5_-8991M{cGqzmR#=EG;BXD9>Dl(uyKst~v)cY&YCJL<9F*80uQkp5Uv` zB(+|d>o87cE_W^XrZvUo2hPX~5H1mOt}TNjMc&&~4kAOeK?Wq9ffzOl<=FRl`1Z16 z_CFLic$*4COJ^GqzMs~^pe@07ok@ka#hc604V0fGPIuC5s0~~v2hNBE=xb9SY|Ol) z=PCBy-@9C5Sq$hRYOLE**XV7bVJq_&&UWfKXaz)569NHQnBcq38d(_lhtr8T1|m7n z7H>t{Iy2a2EUJ>H!u5Dyh~-4LGH9F^iPM&tWu1>agUF_~Y~8L>8G>-y3Qf;!>Yo_7 zLD;R^*0g2?@dRID1~vm*dOfu`u5 z>qT%FrO?!39>D6k=CI7bGW;Dy!vPUX5`0ftqm^?dB1t_%L~t(ytc@t27##|F8RWwY zjjghGJ8cpa)CuL?yTILx7=f3kQ1(=sJxAJw&1vZ|nF2liAY&)Mz9+%glZDzxgr>l* zk^%PI%%Iy^XLa_B4h78&@?{G2*ujaEBfBjB9P*!Zl|0&C2MJQ@sZtRn^<*`Q*igUF zFqu%A93bDC$POdVY=``C`LPlH0D10bfE8}G%;V@#(9a-G22v-}8)%Ju#^HXDmSXnv zWyMwxkOqT&?BofdhkT7am8mx)Kzd1nFC7zkQM;Hf^w!D1cCm@g1IxXZi;ebkTYy6F z8p&hchiPq$%yv9+8D@4(KK@a5KO}eBIn5|hR+SgCp#!=g_6)~y< z^8NUIv3Z+S7uOdD$hRc;YOw%$-pmG?>g2^D-$~ViC^d+qZM2`81mr{8UJ$D?TCYf7 zN^KZZKZ1HEDincn?sV+|hlZTA1h_YedD0+IfOAj6Q=HYju($wkG#jx+b=>%3{vx|W z)#9ujy+s5EDyf1(P`zttRh1d~kdnZ?xKzkvm?IqMvYbl_0Ua00SaCvZqiSr8@FzgN z`|2?6PCqU7Nw{+}1L!Bbb33>sP;tjav|1CkhX#u51grCdg-GQXyBEziraYXm5zOJB zi%?Dd@(5*>)+z+34_uXU7)=rt+n~m>y_@QD7Z3`v<*Tjb=TTnS4n?Ho~;`WEz#3DVePV&p_{>h@sYvZ3}D*o1n%Ibzm5zDr}k;w zD8JK^VT0CDC1bNT1*Ke=C@p?OizYp6>uG{CH$;o*anH6Ug$J|I@@5qzV>3fj!73b% zu(HW)u$=S=8Z{EEE?3o%K87(Ug=QDZN+~rURLz(!rv7xDtL4Lf999vt)XgG7!ksRbSh$YEvQC({>st!Xif+8lGw_Et}f3CeVEe*RS3X5Eg7h zfL)3#0UVUWX}L}a>F45H!tucsoA=8&lk{BYs@NN_T||d;7Yg9diAq6wgnJ^9OSqbHkmrO#K0Pc@mEqj@MuE%xWdG&Pq2d&Uhi*Qg0Xr#Jr)|9v) zj|xo`Q3F*-3v&a^2NJG1y=6V49{hwc=Ln)KYwG&%H&U;TXf@2b zcB1M^384PD*5p&QY$M$FkZY=)l3dQiG-HQ&@1kvyq*sllaZ+E zrw0uat}lJYiEweAw94+@CL>9*q-xZYv_DksJ~M02>GsBLv?@dud@V?S8qPfpwAf!c z&NEe{)ip4K_nWXI*73pua^Q)N!JtNd3zCgQdHwkNS=O25rL z;hNHqO$T4+hLsbQR88huXH9C?GKgZ(@d*57Dp%T+8j(1SrmG>-u&$#6hFJH0E=Hwt zn0}pm!nLCxn~pY>RgKIynR}g)?B+jc%n=*NT&xtzcclYua{OP4`&E-0+&xVi@6jZF zjq~c~wK5FlD1O>~?zIVSL~nv2;)Qj=5bh%sbxjgn1^rslGlKh(v-oeRR0oQ4+E-!G zg0H(Eo_$<>4@H+pKSPL;QaP4!O+|;x$UAarkZPDhhr0(vSBF~gBa>ibYZNqlvBD1_Z z3FZ0$#tReNNj?L{*4dqcahxOxVjkfJ8-sCC8phMWtzy9>_U5dGs+GAfM84pzj?y*; z$Y7%aq4Wy%=zG7pn$RXEj4!v0A1A&ov;>Pxf0g5KK{~$RaFJN_oc+rH`yuMLdho}GRg_`A##@6xYK_ax@z;89GIUkAcQn*g0m+71 zubI0p;;U89{f75bvRJUMS`$6cheZ=(ynj;1u=fwzbf)b4(wizIxEXu~d~HwO6nxXW zD%?97YO0{~ijHtOANOANe#FBd066SsS==VG_Qq9mpqZkP>GA4I{zw?5B;8U>ubk(&qeM={@R| z`XyHs|4Y#mMRN;JFSsTDC;7#BD|4@n-5rbO3}#=O^@FUE=(fm*_=Ep9{v_fFZUrBB zR9S4`fj3846MnJ@T9T#Jgc(Q6%Kal8V#hJZ#SMP6S_9i){bdGv+e}9g%7Z1R26GBjT$$whwm<`J1punSEPTmKes?z2wOnp%@~7+Qwm;0D!x$xf^iZ3*rP-)O^4W*fzu zkPNt6p8@;A<}Nq8=DW2+>}Z_Bs>L_}osbi$_wH$Gy}8Ipck77J=&n!KL_PITC)B9Q z(%nWY?hw_*=`r1%+Lhp5@JTFZuIrDo9Ig)a(W2B~G|tggD+4SRNCdlFn{_Mh2ebf( zl;hawX?F*A!q$UTrI9M$NXmM3h#EjrT0_{b1h<7B7wTQ=ZXmSD8;$2O>X1{EXS{*p zRc5F|YSk|$jdW=U5N=8;&~L&BwG0c&TC&y)lmN<|-yi0i6mXh~S!T`t(W}LQ^{DB!HJBo3xwoETJUb z@!Oqnjp7Xjsj4b|cqAUped%F7d|s)}*&QZWrYU*wL|;a0wp$W>6jXcfByEDNPGV&1 z=~X`(wszsBIgoj61*2i83UR9h-0w@cKJnmwlFSFVa|{8@Z!{D9DSFKO;)ObnzNQ&&l^!M?@9WU3QWM!g5^n&Yk-$d)B2On_?_KQ;kfghXyF zcG%IMo2T(w7o6U*%MwS+k68qifSuGXZ@B0Od>SrjrG;ARokw>)>cLFleU18r3E-~r z4bE7qy)n=Ph=UpE)Z#9xm-G1!6YoO`j|QGdn>N!8mJlUC+k=rd#f-rhgX~p}+B>6< z&;(64k6{zkA@moijS2`DNN@}J%mf$(wiR*+L)GG8$kHF_Wf9Wi9YkAc`IrUq<->lBCJA$>EM2>P=$J7 z%1AFulHRMTT`1QT3BG+*mL5mP#_jfZQc2hE=@vn|?;spl=xQh0WH7bF+CC>d5wG1| zUV597p5|+1fgR~(Ny>t^j#TYFv3h9mawJ zxw!Krc|TJqF1g>l({S@2D7dAALvg}GnkpO7ktVKz)wLJi_eR3Sqi%;Wa99*WU0~?P zrWVuH0^ zsEIttD@)UCbN(-hP4i0Elzg!Gf#R7(rxkvf^Z#e&pPl!Wy!_nrV&C9DPW()8V1fe^ z9GKw1{~8V?Y7-}EvM&9hq>njV@7=WOkoYuk;xUn~NkNZrEl5Z3Hh(L3;C@J0S$KZ* zVp8{q|f_0jnvxj1dDHD;v~J+GsF)&XoU<(YliKf$KY5R;5ZFq zmIz+CPh>r)IOhLbbP_2Inz=I*t9ib}K{y|H%L%*p<9eHq&~h`xkBH#U76=)(v#-I*$Hm0L}%ru#rVUqxa56 z?`hiDV^2Pz7E$vO+;Y9qxN2RL#cpK~%95$Jt_bc2w&YXh#4}H0Al@xILanScc7n96 z=quh&wDn%r&{ZyWk%d@Ag>cYE55jeX8V2ur8s2WPOmDQ*l;G~`8Ia`+FY7V1TSq~b z8!h29xAdUQ?JYY(VK+T$AW1EHx%XK`Hu`VpyP`Qbov0G|D2Trk?wP9ELxb4zrgm83 z#Kq+SuFTEUduT(r@+C&y);&jER+ieBu|do&N7J&R)4ZFsTqnAbwhr1ECXI3FX{Zue z#s9ztTJLe~kZ04WMOH{@1%6Mv%cwKKUD!ih4xISx%xAx>#as$sI;i`8nJeD_4$t2* zR2syyrhsj)$U!;!qx~wf(G#@k`@mnON4wrq1#)ThuDy*9*$?QY!W_OB*lx$tyy`&R zmM6GBJ3GTwm{UV10p>ll=pLg`t2Jeb5zh}0M_^5>h$BCsO@}SJ^vD-^RDHDs&#D%~ zlL|I^Mw1@4w6V};c@lLW6uK&fIRO>D2{dkpN-7mrFPZ;s#-nTlK%7chP~_h zL-9m3jn{Oc$R}w12_XXsLXoek!&1{P7r{$32avai7TTSI~G;4OW9?rFj zL@yU=2mjM*?Up9Ep?gLt5-St%KkZ^*Mn6=Vi|b>2G=GiErokh2&K(u))CXxOhfhRv z>v58E*|TJnmXGWxCt0d>YnsX!uzyK{uSaL~W$qilIO}Y349=G6YTa7vV`9+}5j-%& z(xVK0)o9rV4@Gur1Vt@msQF4IbpH|P4(hIHEPB~5r1Cisf< z5cVoOD*Qpr)(C$x_WMT|dreIb?qZc5p9~QKiRSDXuGX8%6$)YP8 diff --git a/src/osdagbridge/desktop/ui/dialogs/material_properties.py b/src/osdagbridge/desktop/ui/dialogs/material_properties.py new file mode 100644 index 000000000..eb81e0313 --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/material_properties.py @@ -0,0 +1,708 @@ +from PySide6.QtWidgets import ( + QDialog, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, + QComboBox, QCheckBox, QStackedWidget +) +from PySide6.QtCore import Qt +from PySide6.QtGui import QDoubleValidator + +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style +from osdagbridge.core.bridge_types.plate_girder.ui_fields import VALUES_MATERIAL, VALUES_DECK_CONCRETE_GRADE + + +DIALOG_TITLE_MATERIAL_PROPERTIES = "Material Properties" #ui need to be generalized + +MEMBER_OPTION_GIRDER = "Girder" +MEMBER_OPTION_CROSS_BRACING = "Cross Bracing" +MEMBER_OPTION_END_DIAPHRAGM = "End Diaphragm" +MEMBER_OPTION_DECK = "Deck" + +MEMBER_OPTIONS = [ + MEMBER_OPTION_GIRDER, + MEMBER_OPTION_CROSS_BRACING, + MEMBER_OPTION_END_DIAPHRAGM, + MEMBER_OPTION_DECK +] + +MATPROP_LABEL_MEMBER = "Member" +MATPROP_LABEL_MATERIAL = "Material" +MATPROP_LABEL_DEFAULT = "Default" + +ECM_FACTOR_OPTION_QUARTZITE = "Quartzite/granite aggregates = 1" +ECM_FACTOR_OPTION_LIMESTONE = "Limestone aggregates = 0.9" +ECM_FACTOR_OPTION_SANDSTONE = "Sandstone aggregates = 0.7" +ECM_FACTOR_OPTION_BASALT = "Basalt aggregates = 1.2" +ECM_FACTOR_OPTION_CUSTOM = "Custom" + +ECM_FACTOR_OPTIONS = [ + (ECM_FACTOR_OPTION_QUARTZITE, 1.0), + (ECM_FACTOR_OPTION_LIMESTONE, 0.9), + (ECM_FACTOR_OPTION_SANDSTONE, 0.7), + (ECM_FACTOR_OPTION_BASALT, 1.2), + (ECM_FACTOR_OPTION_CUSTOM, None), +] + +ECM_FACTOR_LABELS = [text for text, _ in ECM_FACTOR_OPTIONS] +DEFAULT_ECM_FACTOR_LABEL = ECM_FACTOR_OPTIONS[0][0] +CUSTOM_ECM_FACTOR_LABEL = ECM_FACTOR_OPTION_CUSTOM + +PLACEHOLDER_CUSTOM_FACTOR = "Custom factor" +INCLUDE_MEDIAN_OPTION_NO = "No" +INCLUDE_MEDIAN_OPTION_YES = "Yes" + +STEEL_MODULUS_E_GPA = 200.0 +STEEL_MODULUS_G_GPA = 77.0 +STEEL_POISSON_RATIO = 0.30 +STEEL_THERMAL_COEFF = 11.7 + +STEEL_GRADE_BASE_VALUES = { + 250: {"Fy": 250, "Fu": 410}, + 275: {"Fy": 275, "Fu": 430}, + 300: {"Fy": 300, "Fu": 440}, + 350: {"Fy": 350, "Fu": 490}, + 410: {"Fy": 410, "Fu": 540}, + 450: {"Fy": 450, "Fu": 570}, + 550: {"Fy": 550, "Fu": 650}, + 600: {"Fy": 600, "Fu": 700}, + 650: {"Fy": 650, "Fu": 750}, +} + +CONCRETE_GRADE_BASE_VALUES = { + "M20": {"fck": 20.0, "fctm": 2.2, "Ecm": 22.0}, + "M25": {"fck": 25.0, "fctm": 2.6, "Ecm": 25.0}, + "M30": {"fck": 30.0, "fctm": 2.9, "Ecm": 30.0}, + "M35": {"fck": 35.0, "fctm": 3.2, "Ecm": 33.0}, + "M40": {"fck": 40.0, "fctm": 3.5, "Ecm": 34.0}, +} + +KEY_CONCRETE_FCK = "Characteristic Compressive (Cube) Strength of Concrete, (fck)cu (MPa)" +KEY_CONCRETE_FCTM = "Mean Tensile Strength of Concrete, fctm (MPa)" +KEY_CONCRETE_ECM = "Secant Modulus of Elasticity of Concrete, Ecm (GPa)" +KEY_ECM_FACTOR = "Ecm Multiplication Factor" +KEY_THERMAL_EXPANSION = "Thermal Expansion Coefficient, (×10⁻⁶/°C)" +KEY_STEEL_FU = "Ultimate Tensile Strength, Fu (MPa)" +KEY_STEEL_FY = "Yield Strength, Fy (MPa)" +KEY_STEEL_E = "Modulus of Elasticity, E (GPa)" +KEY_STEEL_G = "Modulus of Rigidity, G (GPa)" +KEY_STEEL_POISSON = "Poisson's Ratio, ν" + +DISP_CONCRETE_FCK = "Characteristic Compressive (Cube) Strength of Concrete, fck (MPa)" +DISP_CONCRETE_FCTM = "Mean Tensile Strength of Concrete, fctm (MPa)" +DISP_CONCRETE_ECM = "Secant Modulus of Elasticity of Concrete, Ecm (GPa)" +DISP_ECM_FACTOR = "Ecm Multiplication Factor" +DISP_THERMAL_EXPANSION = "Thermal Expansion Coefficient, (×10−6/°C)" +DISP_STEEL_FU = "Ultimate Tensile Strength, Fu (MPa)" +DISP_STEEL_FY = "Yield Strength, Fy (MPa)" +DISP_STEEL_E = "Modulus of Elasticity, E (GPa)" +DISP_STEEL_G = "Modulus of Rigidity, G (GPa)" +DISP_STEEL_POISSON = "Poisson's Ratio, ν" + + +TYPE_TEXTBOX = 'textbox' +TYPE_COMBOBOX = 'combobox' + +def material_properties_values(): + """Return list of material property fields""" + steel_props = [] + t1 = (KEY_STEEL_FU, DISP_STEEL_FU, TYPE_TEXTBOX, None, True, 'Double Validator') + steel_props.append(t1) + + t2 = (KEY_STEEL_FY, DISP_STEEL_FY, TYPE_TEXTBOX, None, True, 'Double Validator') + steel_props.append(t2) + + t3 = (KEY_STEEL_E, DISP_STEEL_E, TYPE_TEXTBOX, None, True, 'Double Validator') + steel_props.append(t3) + + t4 = (KEY_STEEL_G, DISP_STEEL_G, TYPE_TEXTBOX, None, True, 'Double Validator') + steel_props.append(t4) + + t5 = (KEY_STEEL_POISSON, DISP_STEEL_POISSON, TYPE_TEXTBOX, None, True, 'Double Validator') + steel_props.append(t5) + + t6 = (KEY_THERMAL_EXPANSION, DISP_THERMAL_EXPANSION, TYPE_TEXTBOX, None, True, 'Double Validator') + steel_props.append(t6) + + deck_props = [] + t7 = (KEY_CONCRETE_FCK, DISP_CONCRETE_FCK, TYPE_TEXTBOX, None, True, 'Double Validator') + deck_props.append(t7) + + t8 = (KEY_CONCRETE_FCTM, DISP_CONCRETE_FCTM, TYPE_TEXTBOX, None, True, 'Double Validator') + deck_props.append(t8) + + t9 = (KEY_CONCRETE_ECM, DISP_CONCRETE_ECM, TYPE_TEXTBOX, None, True, 'Double Validator') + deck_props.append(t9) + + t10 = (KEY_ECM_FACTOR, DISP_ECM_FACTOR, TYPE_COMBOBOX, ECM_FACTOR_LABELS, True, 'No Validator') + deck_props.append(t10) + + t11 = (KEY_THERMAL_EXPANSION, DISP_THERMAL_EXPANSION, TYPE_TEXTBOX, None, True, 'Double Validator') + deck_props.append(t11) + + return { + 'steel': steel_props, + 'deck': deck_props + } + +class NoScrollComboBox(QComboBox): + def wheelEvent(self, event): + event.ignore() + +class MaterialPropertiesDialog(QDialog): + MEMBER_OPTIONS = MEMBER_OPTIONS + STEEL_MEMBERS = {MEMBER_OPTION_GIRDER, MEMBER_OPTION_CROSS_BRACING, MEMBER_OPTION_END_DIAPHRAGM} + + def __init__(self, parent=None): + super().__init__(parent) + self.setWindowTitle(DIALOG_TITLE_MATERIAL_PROPERTIES) + self.setMinimumWidth(580) + self.setStyleSheet(""" + QDialog { + background-color: white; + border: 1px solid #90AF13; + } + """) + + self.parent_dock = parent + self._loading = False + self.current_member = None + self.member_data = {} + + self.material_props = material_properties_values() + self.steel_fields = self.material_props['steel'] + self.deck_fields = self.material_props['deck'] + + self.member_combo = NoScrollComboBox() + self.member_combo.addItems(self.MEMBER_OPTIONS) + apply_field_style(self.member_combo) + + self.material_combo = NoScrollComboBox() + apply_field_style(self.material_combo) + self.setupWrapper() + main_layout = QVBoxLayout(self.content_widget) + main_layout.setContentsMargins(20, 16, 20, 16) + + form_container = QWidget() + form_layout = QVBoxLayout(form_container) + form_layout.setContentsMargins(0, 0, 0, 0) + form_layout.setSpacing(12) + + member_row = QHBoxLayout() + member_row.setContentsMargins(0, 0, 0, 0) + member_row.setSpacing(18) + member_label = QLabel(MATPROP_LABEL_MEMBER) + member_label.setStyleSheet("font-size: 12px; color: #2d2d2d;") + member_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + member_label.setFixedWidth(280) + self.member_combo.setFixedWidth(242) + member_row.addWidget(member_label) + member_row.addWidget(self.member_combo) + member_row.addStretch() + form_layout.addLayout(member_row) + + material_row = QHBoxLayout() + material_row.setContentsMargins(0, 0, 0, 0) + material_row.setSpacing(18) + material_label = QLabel(MATPROP_LABEL_MATERIAL) + material_label.setStyleSheet("font-size: 12px; color: #2d2d2d;") + material_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + material_label.setFixedWidth(280) + self.material_combo.setFixedWidth(242) + material_row.addWidget(material_label) + material_row.addWidget(self.material_combo) + material_row.addStretch() + form_layout.addLayout(material_row) + + main_layout.addWidget(form_container) + + self.stack = QStackedWidget() + self.stack.setContentsMargins(0, 0, 0, 0) + self.steel_page = self._build_steel_form() + self.deck_page = self._build_deck_form() + self.stack.addWidget(self.steel_page) + self.stack.addWidget(self.deck_page) + main_layout.addWidget(self.stack) + + default_row = QHBoxLayout() + default_row.setContentsMargins(0, 0, 0, 0) + default_row.setSpacing(18) + default_label = QLabel(MATPROP_LABEL_DEFAULT) + default_label.setStyleSheet("font-size: 12px; color: #2d2d2d;") + default_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + default_label.setFixedWidth(280) + self.default_checkbox = QCheckBox() + + checkbox_container = QWidget() + checkbox_layout = QHBoxLayout(checkbox_container) + checkbox_layout.setContentsMargins(0, 0, 0, 0) + checkbox_layout.setSpacing(0) + checkbox_layout.addWidget(self.default_checkbox) + checkbox_layout.addStretch() + + default_row.addWidget(default_label) + default_row.addWidget(checkbox_container) + main_layout.addLayout(default_row) + + self.member_combo.currentTextChanged.connect(self._on_member_changed) + self.material_combo.currentTextChanged.connect(self._on_material_changed) + self.default_checkbox.stateChanged.connect(self._on_default_toggled) + + self._initialize_member_data() + self._on_member_changed(self.member_combo.currentText()) + self.setFixedSize(self.sizeHint()) + + def setupWrapper(self): + self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(1, 1, 1, 1) + main_layout.setSpacing(0) + + self.title_bar = CustomTitleBar() + self.title_bar.setTitle(DIALOG_TITLE_MATERIAL_PROPERTIES) + main_layout.addWidget(self.title_bar) + + self.content_widget = QWidget(self) + main_layout.addWidget(self.content_widget, 1) + + def closeEvent(self, event): + self._save_current_member_form() + super().closeEvent(event) + + def _build_steel_form(self): + widget = QWidget() + layout = QVBoxLayout(widget) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(10) + self.steel_field_inputs = {} + + for field_tuple in self.steel_fields: + key, display_label, widget_type, values, required, validator = field_tuple + + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(18) + + label = QLabel(display_label) + label.setTextFormat(Qt.RichText) + label.setStyleSheet("font-size: 12px; color: #2d2d2d;") + label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + label.setFixedWidth(280) + label.setWordWrap(True) + + line_edit = QLineEdit() + line_edit.setFixedWidth(242) + apply_field_style(line_edit) + line_edit.setValidator(QDoubleValidator(0.0, 99999.0, 1)) + line_edit.textEdited.connect(self._handle_user_override) + self.steel_field_inputs[key] = line_edit + + row.addWidget(label) + row.addWidget(line_edit) + row.addStretch() + layout.addLayout(row) + + layout.addStretch() + return widget + + def _build_deck_form(self): + widget = QWidget() + layout = QVBoxLayout(widget) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(10) + self.deck_field_inputs = {} + + for field_tuple in self.deck_fields: + key, display_label, widget_type, values, required, validator = field_tuple + + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(18) + + label = QLabel(display_label) + label.setTextFormat(Qt.RichText) + label.setStyleSheet("font-size: 12px; color: #2d2d2d;") + label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + label.setFixedWidth(280) + label.setWordWrap(True) + + if key == KEY_ECM_FACTOR: + self.deck_factor_combo = NoScrollComboBox() + self.deck_factor_combo.addItems(values) + self.deck_factor_combo.setFixedWidth(242) + apply_field_style(self.deck_factor_combo) + self.deck_factor_combo.currentTextChanged.connect(self._on_factor_changed) + + self.deck_factor_custom_input = QLineEdit() + apply_field_style(self.deck_factor_custom_input) + self.deck_factor_custom_input.setPlaceholderText(PLACEHOLDER_CUSTOM_FACTOR) + self.deck_factor_custom_input.setFixedWidth(242) + self.deck_factor_custom_input.setVisible(False) + self.deck_factor_custom_input.setEnabled(False) + self.deck_factor_custom_input.setValidator(QDoubleValidator(0.1, 5.0, 1)) + self.deck_factor_custom_input.textEdited.connect(self._handle_user_override) + + row.addWidget(label) + row.addWidget(self.deck_factor_combo) + row.addStretch() + + self.deck_factor_custom_container = QWidget() + custom_layout = QHBoxLayout(self.deck_factor_custom_container) + custom_layout.setContentsMargins(0, 0, 0, 0) + custom_layout.setSpacing(18) + + custom_label = QLabel("") + custom_label.setFixedWidth(280) + custom_layout.addWidget(custom_label) + custom_layout.addWidget(self.deck_factor_custom_input) + custom_layout.addStretch() + + self.deck_factor_custom_container.setVisible(False) + layout.addWidget(self.deck_factor_custom_container) + + self.deck_field_inputs[key] = self.deck_factor_combo + else: + line_edit = QLineEdit() + line_edit.setFixedWidth(242) + apply_field_style(line_edit) + line_edit.setValidator(QDoubleValidator(0.0, 99999.0, 1)) + line_edit.textEdited.connect(self._handle_user_override) + row.addWidget(label) + row.addWidget(line_edit) + row.addStretch() + self.deck_field_inputs[key] = line_edit + + layout.addLayout(row) + + layout.addStretch() + return widget + + def _initialize_member_data(self): + for member in self.MEMBER_OPTIONS: + material = self._get_parent_grade(member) + fields = self._default_fields_for_member(member, material) + self.member_data[member] = { + "material": material, + "fields": fields, + "is_default": False if member == MEMBER_OPTION_DECK else True, + "factor_label": DEFAULT_ECM_FACTOR_LABEL if member == MEMBER_OPTION_DECK else None, + "custom_factor": "1.0" if member == MEMBER_OPTION_DECK else None, + } + + def _default_fields_for_member(self, member, material=None, factor_label=None, custom_factor=None): + if member == MEMBER_OPTION_DECK: + grade = material or self._get_parent_grade(member) or (VALUES_DECK_CONCRETE_GRADE[0] if VALUES_DECK_CONCRETE_GRADE else "") + factor_label = factor_label or DEFAULT_ECM_FACTOR_LABEL + factor_value = self._factor_value_from_label(factor_label, custom_factor) + return self._deck_defaults(grade, factor_value) + grade = material or self._get_parent_grade(member) or (VALUES_MATERIAL[0] if VALUES_MATERIAL else "") + return self._steel_defaults(grade) + + def _steel_defaults(self, grade): + grade_value = self._extract_numeric_grade(grade) + defaults = STEEL_GRADE_BASE_VALUES.get(grade_value, STEEL_GRADE_BASE_VALUES[250]) + + result = {} + for field_tuple in self.steel_fields: + key = field_tuple[0] + if "Fu" in key: + result[key] = "{:.1f}".format(defaults["Fu"]) + elif "Fy" in key: + result[key] = "{:.1f}".format(defaults["Fy"]) + elif "E (GPa)" in key and "Rigidity" not in key: + result[key] = "{:.1f}".format(STEEL_MODULUS_E_GPA) + elif "G (GPa)" in key: + result[key] = "{:.1f}".format(STEEL_MODULUS_G_GPA) + elif "Poisson" in key: + result[key] = "{:.1f}".format(STEEL_POISSON_RATIO) + elif "Thermal" in key: + result[key] = "{:.1f}".format(STEEL_THERMAL_COEFF) + return result + + def _get_concrete_from_code(self, grade): + grade = grade.replace(" ", "").upper() + return CONCRETE_GRADE_BASE_VALUES.get(grade) + + def _deck_defaults(self, grade, factor_value): + data = self._get_concrete_from_code(grade) + + if not data: + return {} + + fck = data["fck"] + fctm = data["fctm"] + ecm = round(data["Ecm"] * factor_value, 1) + + result = {} + for field_tuple in self.deck_fields: + key = field_tuple[0] + if "fck" in key: + result[key] = "{:.1f}".format(fck) + elif "fctm" in key: + result[key] = "{:.1f}".format(fctm) + elif "Ecm (GPa)" in key: + result[key] = "{:.1f}".format(ecm) + elif "Thermal" in key: + result[key] = "11.7" + return result + + def _extract_numeric_grade(self, grade, default=250): + digits = ''.join(ch for ch in grade if ch.isdigit()) + try: + return int(digits) if digits else default + except ValueError: + return default + + def _materials_for_member(self, member): + return VALUES_DECK_CONCRETE_GRADE if member == MEMBER_OPTION_DECK else VALUES_MATERIAL + + def _on_member_changed(self, member): + if self.current_member: + self._save_current_member_form() + + self.current_member = member + is_deck = member == MEMBER_OPTION_DECK + self.stack.setCurrentWidget(self.deck_page if is_deck else self.steel_page) + + data = self.member_data.get(member) + if not data: + self.member_data[member] = self._create_default_entry(member) + data = self.member_data[member] + + materials = self._materials_for_member(member) + self._loading = True + + self.material_combo.clear() + self.material_combo.addItems(materials) + if data["material"] in materials: + self.material_combo.setCurrentText(data["material"]) + elif materials: + self.material_combo.setCurrentIndex(0) + data["material"] = self.material_combo.currentText() + + if data.get("is_default") and not self._loading: + self._apply_defaults_for_member(member, update_ui=True) + else: + if is_deck: + self._populate_deck_fields(data) + else: + self._populate_steel_fields(data) + + self._loading = False + + def _populate_steel_fields(self, data): + for label, widget in self.steel_field_inputs.items(): + value = data["fields"].get(label, "") + try: + formatted_value = "{:.1f}".format(float(value)) + widget.setText(formatted_value) + except (ValueError, TypeError): + widget.setText(value) + + def _populate_deck_fields(self, data): + for label, widget in self.deck_field_inputs.items(): + if label == KEY_ECM_FACTOR: + factor_label = data.get("factor_label", DEFAULT_ECM_FACTOR_LABEL) + if factor_label not in ECM_FACTOR_LABELS: + factor_label = DEFAULT_ECM_FACTOR_LABEL + self.deck_factor_combo.blockSignals(True) + self.deck_factor_combo.setCurrentText(factor_label) + self.deck_factor_combo.blockSignals(False) + self._update_custom_factor_visibility(factor_label) + self.deck_factor_custom_input.blockSignals(True) + custom_val = data.get("custom_factor", "1.0") + try: + formatted_custom = "{:.1f}".format(float(custom_val)) + self.deck_factor_custom_input.setText(formatted_custom) + except (ValueError, TypeError): + self.deck_factor_custom_input.setText(custom_val) + self.deck_factor_custom_input.blockSignals(False) + else: + value = data["fields"].get(label, "") + try: + formatted_value = "{:.1f}".format(float(value)) + widget.setText(formatted_value) + except (ValueError, TypeError): + widget.setText(value) + + for label, widget in self.deck_field_inputs.items(): + if isinstance(widget, QLineEdit): + widget.setReadOnly(False) + widget.setEnabled(True) + + def _save_current_member_form(self): + if not self.current_member: + return + data = self.member_data.setdefault(self.current_member, self._create_default_entry(self.current_member)) + data["material"] = self.material_combo.currentText() + if self.current_member == MEMBER_OPTION_DECK: + for label, widget in self.deck_field_inputs.items(): + if label == KEY_ECM_FACTOR: + data["factor_label"] = self.deck_factor_combo.currentText() + data["custom_factor"] = self.deck_factor_custom_input.text() or "1.0" + else: + data["fields"][label] = widget.text() + factor_value = self._factor_value_from_label(data["factor_label"], data.get("custom_factor")) + data["fields"][KEY_ECM_FACTOR] = "{:.1f}".format(factor_value) + else: + for label, widget in self.steel_field_inputs.items(): + data["fields"][label] = widget.text() + data["is_default"] = self.default_checkbox.isChecked() + + def _create_default_entry(self, member): + material = self._get_parent_grade(member) + return { + "material": material, + "fields": self._default_fields_for_member(member, material), + "is_default": True, + "factor_label": DEFAULT_ECM_FACTOR_LABEL if member == MEMBER_OPTION_DECK else None, + "custom_factor": "1.0" if member == MEMBER_OPTION_DECK else None, + } + + def _apply_defaults_for_member(self, member, update_ui=True): + data = self.member_data.setdefault(member, self._create_default_entry(member)) + + grade = data.get("material") or self._get_parent_grade(member) + data["material"] = grade + + if member == MEMBER_OPTION_DECK: + data["factor_label"] = DEFAULT_ECM_FACTOR_LABEL + data["custom_factor"] = "1.0" + factor_value = self._factor_value_from_label(DEFAULT_ECM_FACTOR_LABEL) + data["fields"] = self._deck_defaults(grade, factor_value) + else: + data["fields"] = self._steel_defaults(grade) + data["is_default"] = True + + if update_ui and member == self.current_member: + self._loading = True + self.material_combo.setCurrentText(grade) + if member == MEMBER_OPTION_DECK: + self._populate_deck_fields(data) + else: + self._populate_steel_fields(data) + self.default_checkbox.setChecked(True) + self._loading = False + + def _factor_value_from_label(self, label, custom_factor=None): + for text, value in ECM_FACTOR_OPTIONS: + if text == label: + if value is None: + try: + return float(custom_factor) if custom_factor else 1.0 + except ValueError: + return 1.0 + return value + return 1.0 + + def _reset_current_member_to_defaults(self): + if not self.current_member: + return + + self._apply_defaults_for_member(self.current_member, update_ui=False) + data = self.member_data.get(self.current_member) + if not data: + return + + target_material = data.get("material", "") + self._loading = True + if target_material: + index = self.material_combo.findText(target_material) + if index >= 0: + self.material_combo.setCurrentIndex(index) + elif self.material_combo.count() > 0: + self.material_combo.setCurrentIndex(0) + data["material"] = self.material_combo.currentText() + if self.current_member == MEMBER_OPTION_DECK: + self._populate_deck_fields(data) + else: + self._populate_steel_fields(data) + self._loading = False + + self.default_checkbox.blockSignals(True) + self.default_checkbox.setChecked(True) + self.default_checkbox.blockSignals(False) + self._save_current_member_form() + + def _update_custom_factor_visibility(self, label): + is_custom = label == CUSTOM_ECM_FACTOR_LABEL + self.deck_factor_custom_container.setVisible(is_custom) + self.deck_factor_custom_input.setEnabled(is_custom) + + def _on_material_changed(self, material): + if self._loading: + return + + data = self.member_data.get(self.current_member) + if not data: + return + + data["material"] = material + + if self.current_member == MEMBER_OPTION_DECK: + factor_value = self._factor_value_from_label( + data.get("factor_label", DEFAULT_ECM_FACTOR_LABEL), + data.get("custom_factor") + ) + data["fields"] = self._deck_defaults(material, factor_value) + self._populate_deck_fields(data) + else: + data["fields"] = self._steel_defaults(material) + self._populate_steel_fields(data) + + data["is_default"] = True + self.default_checkbox.blockSignals(True) + self.default_checkbox.setChecked(True) + self.default_checkbox.blockSignals(False) + + def _on_default_toggled(self, state): + if self._loading: + return + try: + check_state = Qt.CheckState(state) + except ValueError: + check_state = Qt.CheckState.Checked if bool(state) else Qt.CheckState.Unchecked + if check_state == Qt.CheckState.Checked: + self._reset_current_member_to_defaults() + else: + data = self.member_data.get(self.current_member) + if data: + data["is_default"] = False + + def _on_factor_changed(self, label): + self._update_custom_factor_visibility(label) + self._handle_user_override() + + def _handle_user_override(self): + if self._loading: + return + if self.default_checkbox.isChecked(): + self._loading = True + self.default_checkbox.setChecked(False) + self._loading = False + data = self.member_data.get(self.current_member) + if data: + data["is_default"] = False + self._save_current_member_form() + + def _get_parent_grade(self, member): + parent = self.parent_dock + if not parent: + return "" + mapping = { + MEMBER_OPTION_GIRDER: getattr(parent, "girder_combo", None), + MEMBER_OPTION_CROSS_BRACING: getattr(parent, "cross_bracing_combo", None), + MEMBER_OPTION_END_DIAPHRAGM: getattr(parent, "end_diaphragm_combo", None), + MEMBER_OPTION_DECK: getattr(parent, "deck_combo", None), + } + combo = mapping.get(member) + return combo.currentText() if combo else "" + + def set_member(self, member): + index = self.member_combo.findText(member) + if index >= 0: + self.member_combo.setCurrentIndex(index) + + def sync_with_parent_defaults(self): + for member, data in self.member_data.items(): + if data.get("is_default"): + self._apply_defaults_for_member(member, update_ui=(member == self.current_member)) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/docks/dock_utils.py b/src/osdagbridge/desktop/ui/docks/dock_utils.py new file mode 100644 index 000000000..109d9e0f6 --- /dev/null +++ b/src/osdagbridge/desktop/ui/docks/dock_utils.py @@ -0,0 +1,42 @@ +from PySide6.QtWidgets import QComboBox, QLineEdit, QSizePolicy + +def apply_field_style(widget): + widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + widget.setMinimumHeight(28) + + if isinstance(widget, QComboBox): + widget.setStyleSheet(""" + QComboBox{ + padding: 1px 7px; + border: 1px solid black; + border-radius: 5px; + background-color: white; + color: black; + } + QComboBox::drop-down{ + subcontrol-origin: padding; + subcontrol-position: top right; + border-left: 0px; + } + QComboBox::down-arrow{ + image: url(:/vectors/arrow_down_light.svg); + width: 20px; + height: 20px; + margin-right: 8px; + } + QComboBox QAbstractItemView{ + background-color: white; + border: 1px solid black; + color: black; + } + """) + elif isinstance(widget, QLineEdit): + widget.setStyleSheet(""" + QLineEdit { + padding: 1px 7px; + border: 1px solid #070707; + border-radius: 6px; + background-color: white; + color: #000000; + } + """) diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 3c3196670..6a2465d11 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -1,10 +1,12 @@ + import sys import os import math +import sqlite3 from PySide6.QtWidgets import ( QApplication, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, - QComboBox, QScrollArea, QLabel, QFormLayout, QLineEdit, QGroupBox, QSizePolicy, QMessageBox, QInputDialog, QDialog, QCheckBox, QFrame, - QDialogButtonBox, QStackedWidget + QComboBox, QScrollArea, QLabel, QLineEdit, QGroupBox, QSizePolicy, QMessageBox, QDialog, QCheckBox, QFrame, + ) from PySide6.QtCore import Qt, QRegularExpression, QSize, QTimer, QPoint, QEvent, Signal from PySide6.QtGui import QPixmap, QDoubleValidator, QRegularExpressionValidator, QIcon @@ -13,613 +15,14 @@ from osdagbridge.desktop.ui.dialogs.additional_inputs import AdditionalInputs from osdagbridge.desktop.ui.utils.custom_buttons import DockCustomButton from osdagbridge.desktop.ui.dialogs.project_location import ProjectLocationDialog +from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style +from osdagbridge.desktop.ui.dialogs.material_properties import MaterialPropertiesDialog - -STEEL_MEMBER_FIELDS = [ - "Ultimate Tensile Strength, Fu (MPa)", - "Yield Strength, Fy (MPa)", - "Modulus of Elasticity, E (GPa)", - "Modulus of Rigidity, G (GPa)", - "Poisson's Ratio, ν", - "Thermal Expansion Coefficient, (×10⁻⁶/°C)", -] - -DECK_MEMBER_FIELDS = [ - "Characteristic Compressive (Cube) Strength of Concrete, (fck)cu (MPa)", - "Mean Tensile Strength of Concrete, fctm (MPa)", - "Secant Modulus of Elasticity of Concrete, Ecm (GPa)", - "Ecm Multiplication Factor", -] - -STEEL_MODULUS_E_GPA = 200.0 -STEEL_MODULUS_G_GPA = 77.0 -STEEL_POISSON_RATIO = 0.30 -STEEL_THERMAL_COEFF = 11.7 - -STEEL_GRADE_BASE_VALUES = { - 250: {"Fy": 250, "Fu": 410}, - 275: {"Fy": 275, "Fu": 430}, - 300: {"Fy": 300, "Fu": 440}, - 350: {"Fy": 350, "Fu": 490}, - 410: {"Fy": 410, "Fu": 540}, - 450: {"Fy": 450, "Fu": 570}, - 550: {"Fy": 550, "Fu": 650}, - 600: {"Fy": 600, "Fu": 700}, - 650: {"Fy": 650, "Fu": 750}, -} - -ECM_FACTOR_OPTIONS = [ - ("Quartzite/granite aggregates = 1", 1.0), - ("Limestone aggregates = 0.9", 0.9), - ("Sandstone aggregates = 0.7", 0.7), - ("Basalt aggregates = 1.2", 1.2), - ("Custom", None), -] -ECM_FACTOR_LABELS = [text for text, _ in ECM_FACTOR_OPTIONS] -DEFAULT_ECM_FACTOR_LABEL = ECM_FACTOR_OPTIONS[0][0] -CUSTOM_ECM_FACTOR_LABEL = "Custom" - +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar class NoScrollComboBox(QComboBox): def wheelEvent(self, event): - event.ignore() # Prevent changing selection on scroll - -def apply_field_style(widget): - widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - widget.setMinimumHeight(28) - - if isinstance(widget, QComboBox): - style = """ - QComboBox{ - padding: 1px 7px; - border: 1px solid black; - border-radius: 5px; - background-color: white; - color: black; - } - QComboBox::drop-down{ - subcontrol-origin: padding; - subcontrol-position: top right; - border-left: 0px; - } - QComboBox::down-arrow{ - image: url(:/vectors/arrow_down_light.svg); - width: 20px; - height: 20px; - margin-right: 8px; - } - QComboBox::down-arrow:on { - image: url(:/vectors/arrow_up_light.svg); - width: 20px; - height: 20px; - margin-right: 8px; - } - QComboBox QAbstractItemView{ - background-color: white; - border: 1px solid black; - outline: none; - } - QComboBox QAbstractItemView::item{ - color: black; - background-color: white; - border: none; - border: 1px solid white; - border-radius: 0; - padding: 2px; - } - QComboBox QAbstractItemView::item:hover{ - border: 1px solid #90AF13; - background-color: #90AF13; - color: black; - } - QComboBox QAbstractItemView::item:selected{ - background-color: #90AF13; - color: black; - border: 1px solid #90AF13; - } - QComboBox QAbstractItemView::item:selected:hover{ - background-color: #90AF13; - color: black; - border: 1px solid #94b816; - } - QComboBox:disabled{ - background: #f1f1f1; - color: #666; - } - """ - widget.setStyleSheet(style) - elif isinstance(widget, QLineEdit): - widget.setStyleSheet(""" - QLineEdit { - padding: 1px 7px; - border: 1px solid #070707; - border-radius: 6px; - background-color: white; - color: #000000; - font-weight: normal; - } - QLineEdit:disabled{ - background: #f1f1f1; - color: #666; - } - """) - - -class MaterialPropertiesDialog(QDialog): - MEMBER_OPTIONS = ["Girder", "Cross Bracing", "End Diaphragm", "Deck"] - STEEL_MEMBERS = {"Girder", "Cross Bracing", "End Diaphragm"} - - def __init__(self, parent=None): - super().__init__(parent) - self.setWindowTitle("Material Properties") - self.setMinimumWidth(580) - self.setStyleSheet("background-color: white;") - - self.parent_dock = parent - self._loading = False - self.current_member = None - self.member_data = {} - - self.member_combo = NoScrollComboBox() - self.member_combo.addItems(self.MEMBER_OPTIONS) - apply_field_style(self.member_combo) - - self.material_combo = NoScrollComboBox() - apply_field_style(self.material_combo) - - main_layout = QVBoxLayout(self) - main_layout.setContentsMargins(20, 16, 20, 16) - - # Create a container widget for all form fields - form_container = QWidget() - form_layout = QVBoxLayout(form_container) - form_layout.setContentsMargins(0, 0, 0, 0) - form_layout.setSpacing(10) - - # Member row - member_row = QHBoxLayout() - member_row.setContentsMargins(0, 0, 0, 0) - member_row.setSpacing(18) - member_label = QLabel("Member*:") - member_label.setStyleSheet("font-size: 12px; color: #2d2d2d;") - member_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) - member_label.setFixedWidth(280) - self.member_combo.setFixedWidth(242) - member_row.addWidget(member_label) - member_row.addWidget(self.member_combo) - member_row.addStretch() - form_layout.addLayout(member_row) - - # Material row - material_row = QHBoxLayout() - material_row.setContentsMargins(0, 0, 0, 0) - material_row.setSpacing(18) - material_label = QLabel("Material*:") - material_label.setStyleSheet("font-size: 12px; color: #2d2d2d;") - material_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) - material_label.setFixedWidth(280) - self.material_combo.setFixedWidth(242) - material_row.addWidget(material_label) - material_row.addWidget(self.material_combo) - material_row.addStretch() - form_layout.addLayout(material_row) - - main_layout.addWidget(form_container) - - self.stack = QStackedWidget() - self.stack.setContentsMargins(0, 0, 0, 0) - self.steel_page = self._build_steel_form() - self.deck_page = self._build_deck_form() - self.stack.addWidget(self.steel_page) - self.stack.addWidget(self.deck_page) - main_layout.addWidget(self.stack) - - # Updated default row with proper alignment - default_row = QHBoxLayout() - default_row.setContentsMargins(0, 0, 0, 0) - default_row.setSpacing(18) - default_label = QLabel("Default") - default_label.setStyleSheet("font-size: 12px; color: #2d2d2d;") - default_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) - default_label.setFixedWidth(280) - self.default_checkbox = QCheckBox() - # Create container for checkbox to align it to the left - checkbox_container = QWidget() - checkbox_layout = QHBoxLayout(checkbox_container) - checkbox_layout.setContentsMargins(0, 0, 0, 0) - checkbox_layout.setSpacing(0) - checkbox_layout.addWidget(self.default_checkbox) - checkbox_layout.addStretch() - - default_row.addWidget(default_label) - default_row.addWidget(checkbox_container) - main_layout.addLayout(default_row) - - self.member_combo.currentTextChanged.connect(self._on_member_changed) - self.material_combo.currentTextChanged.connect(self._on_material_changed) - self.default_checkbox.stateChanged.connect(self._on_default_toggled) - - self._initialize_member_data() - self._on_member_changed(self.member_combo.currentText()) - - def closeEvent(self, event): - self._save_current_member_form() - super().closeEvent(event) - - def _build_steel_form(self): - widget = QWidget() - layout = QVBoxLayout(widget) - layout.setContentsMargins(0, 0, 0, 0) - layout.setSpacing(10) - self.steel_field_inputs = {} - for label_text in STEEL_MEMBER_FIELDS: - row = QHBoxLayout() - row.setContentsMargins(0, 0, 0, 0) - row.setSpacing(18) - label = QLabel(label_text) - label.setStyleSheet("font-size: 12px; color: #2d2d2d;") - label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) - label.setFixedWidth(280) - line_edit = QLineEdit() - line_edit.setFixedWidth(242) - apply_field_style(line_edit) - # Add validator for 1 decimal place - line_edit.setValidator(QDoubleValidator(0.0, 99999.0, 1)) - line_edit.textEdited.connect(self._handle_user_override) - self.steel_field_inputs[label_text] = line_edit - row.addWidget(label) - row.addWidget(line_edit) - row.addStretch() - layout.addLayout(row) - layout.addStretch() - return widget - - def _build_deck_form(self): - widget = QWidget() - layout = QVBoxLayout(widget) - layout.setSpacing(10) - self.deck_field_inputs = {} - for label_text in DECK_MEMBER_FIELDS: - row = QHBoxLayout() - row.setSpacing(18) - label = QLabel(label_text) - label.setStyleSheet("font-size: 12px; color: #2d2d2d;") - label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) - label.setFixedWidth(280) - if label_text == "Ecm Multiplication Factor": - self.deck_factor_combo = NoScrollComboBox() - self.deck_factor_combo.addItems(ECM_FACTOR_LABELS) - self.deck_factor_combo.setFixedWidth(242) - apply_field_style(self.deck_factor_combo) - self.deck_factor_combo.currentTextChanged.connect(self._on_factor_changed) - - self.deck_factor_custom_input = QLineEdit() - apply_field_style(self.deck_factor_custom_input) - self.deck_factor_custom_input.setPlaceholderText("Custom factor") - self.deck_factor_custom_input.setFixedWidth(242) - self.deck_factor_custom_input.setVisible(False) - self.deck_factor_custom_input.setEnabled(False) - self.deck_factor_custom_input.setValidator(QDoubleValidator(0.1, 5.0, 1)) - self.deck_factor_custom_input.textEdited.connect(self._handle_user_override) - - row.addWidget(label) - row.addWidget(self.deck_factor_combo) - row.addStretch() - - # Add custom input row (hidden by default) - custom_row = QHBoxLayout() - custom_row.setContentsMargins(0, 0, 0, 0) - custom_row.setSpacing(18) - custom_label = QLabel("") # Empty label for alignment - custom_label.setFixedWidth(280) - custom_row.addWidget(custom_label) - custom_row.addWidget(self.deck_factor_custom_input) - custom_row.addStretch() - layout.addLayout(custom_row) - - self.deck_field_inputs[label_text] = self.deck_factor_combo - else: - line_edit = QLineEdit() - line_edit.setFixedWidth(242) - apply_field_style(line_edit) - # Add validator for 1 decimal place - line_edit.setValidator(QDoubleValidator(0.0, 99999.0, 1)) - line_edit.textEdited.connect(self._handle_user_override) - row.addWidget(label) - row.addWidget(line_edit) - row.addStretch() - self.deck_field_inputs[label_text] = line_edit - layout.addLayout(row) - layout.addStretch() - return widget - - def _initialize_member_data(self): - for member in self.MEMBER_OPTIONS: - material = self._get_parent_grade(member) - fields = self._default_fields_for_member(member, material) - self.member_data[member] = { - "material": material, - "fields": fields, - "is_default": True, - "factor_label": DEFAULT_ECM_FACTOR_LABEL if member == "Deck" else None, - "custom_factor": "1.0" if member == "Deck" else None, - } - - def _default_fields_for_member(self, member, material=None, factor_label=None, custom_factor=None): - if member == "Deck": - grade = material or self._get_parent_grade(member) or (VALUES_DECK_CONCRETE_GRADE[0] if VALUES_DECK_CONCRETE_GRADE else "") - factor_label = factor_label or DEFAULT_ECM_FACTOR_LABEL - factor_value = self._factor_value_from_label(factor_label, custom_factor) - return self._deck_defaults(grade, factor_value) - grade = material or self._get_parent_grade(member) or (VALUES_MATERIAL[0] if VALUES_MATERIAL else "") - return self._steel_defaults(grade) - - def _steel_defaults(self, grade): - grade_value = self._extract_numeric_grade(grade) - defaults = STEEL_GRADE_BASE_VALUES.get(grade_value, STEEL_GRADE_BASE_VALUES[250]) - return { - "Ultimate Tensile Strength, Fu (MPa)": "{:.1f}".format(defaults["Fu"]), - "Yield Strength, Fy (MPa)": "{:.1f}".format(defaults["Fy"]), - "Modulus of Elasticity, E (GPa)": "{:.1f}".format(STEEL_MODULUS_E_GPA), - "Modulus of Rigidity, G (GPa)": "{:.1f}".format(STEEL_MODULUS_G_GPA), - "Poisson's Ratio, ν": "{:.1f}".format(STEEL_POISSON_RATIO), - "Thermal Expansion Coefficient, (×10⁻⁶/°C)": "{:.1f}".format(STEEL_THERMAL_COEFF), - } - - def _deck_defaults(self, grade, factor_value): - strength = self._extract_numeric_grade(grade, default=25) - fck = float(strength) - fctm = round(0.7 * math.sqrt(fck), 1) - ecm = round(5.0 * math.sqrt(fck) * factor_value, 1) - return { - "Characteristic Compressive (Cube) Strength of Concrete, (fck)cu (MPa)": "{:.1f}".format(fck), - "Mean Tensile Strength of Concrete, fctm (MPa)": "{:.1f}".format(fctm), - "Secant Modulus of Elasticity of Concrete, Ecm (GPa)": "{:.1f}".format(ecm), - "Ecm Multiplication Factor": "{:.1f}".format(factor_value), - } - - def _extract_numeric_grade(self, grade, default=250): - digits = ''.join(ch for ch in grade if ch.isdigit()) - try: - return int(digits) if digits else default - except ValueError: - return default - - def _materials_for_member(self, member): - return VALUES_DECK_CONCRETE_GRADE if member == "Deck" else VALUES_MATERIAL - - def _on_member_changed(self, member): - if self.current_member: - self._save_current_member_form() - - self.current_member = member - is_deck = member == "Deck" - self.stack.setCurrentWidget(self.deck_page if is_deck else self.steel_page) - - data = self.member_data.get(member) - if not data: - self.member_data[member] = self._create_default_entry(member) - data = self.member_data[member] - - if data.get("is_default"): - self._apply_defaults_for_member(member, update_ui=False) - - materials = self._materials_for_member(member) - self._loading = True - self.material_combo.clear() - self.material_combo.addItems(materials) - if data["material"] in materials: - self.material_combo.setCurrentText(data["material"]) - elif materials: - self.material_combo.setCurrentIndex(0) - data["material"] = self.material_combo.currentText() - - self.default_checkbox.setChecked(data.get("is_default", False)) - if is_deck: - self._populate_deck_fields(data) - else: - self._populate_steel_fields(data) - self._loading = False - - def _populate_steel_fields(self, data): - for label, widget in self.steel_field_inputs.items(): - value = data["fields"].get(label, "") - # Format to 1 decimal place - try: - formatted_value = "{:.1f}".format(float(value)) - widget.setText(formatted_value) - except (ValueError, TypeError): - widget.setText(value) - - def _populate_deck_fields(self, data): - for label, widget in self.deck_field_inputs.items(): - if label == "Ecm Multiplication Factor": - factor_label = data.get("factor_label", DEFAULT_ECM_FACTOR_LABEL) - if factor_label not in ECM_FACTOR_LABELS: - factor_label = DEFAULT_ECM_FACTOR_LABEL - self.deck_factor_combo.blockSignals(True) - self.deck_factor_combo.setCurrentText(factor_label) - self.deck_factor_combo.blockSignals(False) - self._update_custom_factor_visibility(factor_label) - self.deck_factor_custom_input.blockSignals(True) - custom_val = data.get("custom_factor", "1.0") - try: - formatted_custom = "{:.1f}".format(float(custom_val)) - self.deck_factor_custom_input.setText(formatted_custom) - except (ValueError, TypeError): - self.deck_factor_custom_input.setText(custom_val) - self.deck_factor_custom_input.blockSignals(False) - else: - value = data["fields"].get(label, "") - # Format to 1 decimal place - try: - formatted_value = "{:.1f}".format(float(value)) - widget.setText(formatted_value) - except (ValueError, TypeError): - widget.setText(value) - - def _save_current_member_form(self): - if not self.current_member: - return - data = self.member_data.setdefault(self.current_member, self._create_default_entry(self.current_member)) - data["material"] = self.material_combo.currentText() - if self.current_member == "Deck": - for label, widget in self.deck_field_inputs.items(): - if label == "Ecm Multiplication Factor": - data["factor_label"] = self.deck_factor_combo.currentText() - data["custom_factor"] = self.deck_factor_custom_input.text() or "1.0" - else: - data["fields"][label] = widget.text() - factor_value = self._factor_value_from_label(data["factor_label"], data.get("custom_factor")) - data["fields"]["Ecm Multiplication Factor"] = "{:.1f}".format(factor_value) - else: - for label, widget in self.steel_field_inputs.items(): - data["fields"][label] = widget.text() - data["is_default"] = self.default_checkbox.isChecked() - - def _create_default_entry(self, member): - material = self._get_parent_grade(member) - return { - "material": material, - "fields": self._default_fields_for_member(member, material), - "is_default": True, - "factor_label": DEFAULT_ECM_FACTOR_LABEL if member == "Deck" else None, - "custom_factor": "1.0" if member == "Deck" else None, - } - - def _apply_defaults_for_member(self, member, update_ui=True): - data = self.member_data.setdefault(member, self._create_default_entry(member)) - grade = self._get_parent_grade(member) or data.get("material") - materials = self._materials_for_member(member) - if grade not in materials and materials: - grade = materials[0] - data["material"] = grade - if member == "Deck": - data["factor_label"] = DEFAULT_ECM_FACTOR_LABEL - data["custom_factor"] = "1.0" - factor_value = self._factor_value_from_label(DEFAULT_ECM_FACTOR_LABEL) - data["fields"] = self._deck_defaults(grade, factor_value) - else: - data["fields"] = self._steel_defaults(grade) - data["is_default"] = True - - if update_ui and member == self.current_member: - self._loading = True - self.material_combo.setCurrentText(grade) - if member == "Deck": - self._populate_deck_fields(data) - else: - self._populate_steel_fields(data) - self.default_checkbox.setChecked(True) - self._loading = False - - def _factor_value_from_label(self, label, custom_factor=None): - for text, value in ECM_FACTOR_OPTIONS: - if text == label: - if value is None: - try: - return float(custom_factor) if custom_factor else 1.0 - except ValueError: - return 1.0 - return value - return 1.0 - - def _reset_current_member_to_defaults(self): - if not self.current_member: - return - - self._apply_defaults_for_member(self.current_member, update_ui=False) - data = self.member_data.get(self.current_member) - if not data: - return - - target_material = data.get("material", "") - self._loading = True - if target_material: - index = self.material_combo.findText(target_material) - if index >= 0: - self.material_combo.setCurrentIndex(index) - elif self.material_combo.count() > 0: - self.material_combo.setCurrentIndex(0) - data["material"] = self.material_combo.currentText() - if self.current_member == "Deck": - self._populate_deck_fields(data) - else: - self._populate_steel_fields(data) - self._loading = False - - self.default_checkbox.blockSignals(True) - self.default_checkbox.setChecked(True) - self.default_checkbox.blockSignals(False) - self._save_current_member_form() - - def _update_custom_factor_visibility(self, label): - is_custom = label == CUSTOM_ECM_FACTOR_LABEL - self.deck_factor_custom_input.setVisible(is_custom) - self.deck_factor_custom_input.setEnabled(is_custom) - self.deck_factor_combo.setVisible(not is_custom) - - def _on_material_changed(self, material): - if self._loading: - return - data = self.member_data.get(self.current_member) - if data: - data["material"] = material - self._handle_user_override() - - def _on_default_toggled(self, state): - if self._loading: - return - try: - check_state = Qt.CheckState(state) - except ValueError: - check_state = Qt.CheckState.Checked if bool(state) else Qt.CheckState.Unchecked - if check_state == Qt.CheckState.Checked: - self._reset_current_member_to_defaults() - else: - data = self.member_data.get(self.current_member) - if data: - data["is_default"] = False - - def _on_factor_changed(self, label): - self._update_custom_factor_visibility(label) - self._handle_user_override() - - def _handle_user_override(self): - if self._loading: - return - if self.default_checkbox.isChecked(): - self._loading = True - self.default_checkbox.setChecked(False) - self._loading = False - data = self.member_data.get(self.current_member) - if data: - data["is_default"] = False - self._save_current_member_form() - - def _get_parent_grade(self, member): - parent = self.parent_dock - if not parent: - return "" - mapping = { - "Girder": getattr(parent, "girder_combo", None), - "Cross Bracing": getattr(parent, "cross_bracing_combo", None), - "End Diaphragm": getattr(parent, "end_diaphragm_combo", None), - "Deck": getattr(parent, "deck_combo", None), - } - combo = mapping.get(member) - return combo.currentText() if combo else "" - - def set_member(self, member): - index = self.member_combo.findText(member) - if index >= 0: - self.member_combo.setCurrentIndex(index) - - def sync_with_parent_defaults(self): - for member, data in self.member_data.items(): - if data.get("is_default"): - self._apply_defaults_for_member(member, update_ui=(member == self.current_member)) - + event.ignore() class InputDock(QWidget): # Signal emitted when any input value changes @@ -651,13 +54,11 @@ def __init__(self, backend, parent): self.left_container = QWidget() - # Get input fields from backend input_field_list = self.backend.input_values() self.build_left_panel(input_field_list) self.main_layout.addWidget(self.left_container) - # Toggle strip self.toggle_strip = QWidget() self.toggle_strip.setStyleSheet("background-color: #90AF13;") self.toggle_strip.setFixedWidth(6) @@ -716,13 +117,11 @@ def show_project_location_dialog(self): self.backend.set_input_value(KEY_PROJECT_LOCATION, location_data) - # Lock-Tooltip-Events-Starts------------------------------------------------------------------------- def eventFilter(self, obj, event): - # Check if it's the scroll area and it's a mouse press if obj == self.scroll_area and event.type() == QEvent.MouseButtonPress: if self.is_locked: self.show_lock_tooltip() - return True # Block the event + return True return super().eventFilter(obj, event) def clear_force_hover(self): @@ -732,24 +131,21 @@ def clear_force_hover(self): self.lock_btn.update() def show_lock_tooltip(self): - # Stop any existing timer first + if hasattr(self, 'tooltip_timer') and self.tooltip_timer.isActive(): self.tooltip_timer.stop() - - # Position tooltip to the right of the lock button + lock_global_pos = self.lock_btn.mapToGlobal(self.lock_btn.rect().topRight()) tooltip_pos = lock_global_pos + QPoint(5, 0) self.lock_btn.setProperty("forceHover", True) self.lock_btn.style().polish(self.lock_btn) self.lock_btn.update() - # Adjust size and position self.lock_btn_tooltip.adjustSize() self.lock_btn_tooltip.move(tooltip_pos) self.lock_btn_tooltip.show() self.lock_btn_tooltip.raise_() - # Hide after 3 seconds if not hasattr(self, 'tooltip_timer'): self.tooltip_timer = QTimer() self.tooltip_timer.setSingleShot(True) @@ -773,8 +169,7 @@ def update_lock_icon(self): def resizeEvent(self, event): super().resizeEvent(event) - # Checking hasattr is only meant to prevent errors, - # while standalone testing of this widget + if self.parent: if self.width() == 0: if hasattr(self.parent, 'update_docking_icons'): @@ -861,9 +256,6 @@ def toggle_input_dock(self): self.toggle_btn.setText("❯" if is_collapsing else "❮") self.toggle_btn.setToolTip("Show panel" if is_collapsing else "Hide panel") - - # Lock-Tooltip-Events-Ends------------------------------------------------------------------------- - def build_left_panel(self, field_list): left_layout = QVBoxLayout(self.left_container) left_layout.setContentsMargins(0, 0, 0, 0) @@ -875,7 +267,6 @@ def build_left_panel(self, field_list): panel_layout.setContentsMargins(15, 10, 15, 10) panel_layout.setSpacing(0) - # Top Bar with buttons top_bar = QHBoxLayout() top_bar.setSpacing(8) top_bar.setContentsMargins(0, 0, 0, 15) @@ -924,7 +315,6 @@ def build_left_panel(self, field_list): self.additional_inputs_btn.clicked.connect(self.show_additional_inputs) top_bar.addWidget(self.additional_inputs_btn) - # Lock button self.lock_btn = QPushButton() self.lock_btn.setStyleSheet(""" QPushButton { @@ -957,7 +347,6 @@ def build_left_panel(self, field_list): top_bar.addWidget(self.lock_btn) panel_layout.addLayout(top_bar) - #-Lock-ToolTip-------------------------------------- self.lock_btn_tooltip = QLabel("Unlock to Edit") self.lock_btn_tooltip.setStyleSheet(""" QLabel{ @@ -973,9 +362,7 @@ def build_left_panel(self, field_list): self.lock_btn_tooltip.setObjectName("lock_btn_tooltip") self.lock_btn_tooltip.setWindowFlags(Qt.ToolTip) self.lock_btn_tooltip.hide() - #-------------------------------------------------- - # Scroll area scroll_area = QScrollArea() self.scroll_area = scroll_area scroll_area.setWidgetResizable(True) @@ -1774,7 +1161,7 @@ def _is_median_included(self): def show_material_properties_dialog(self): """Open the material properties dialog with the relevant member selected.""" if self.material_dialog is None: - self.material_dialog = MaterialPropertiesDialog(self) + self.material_dialog = MaterialPropertiesDialog() member = "Girder" focus_widget = QApplication.focusWidget() From bdb033cb67b7d24b19f9861908cc5254b564a7d7 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Mon, 12 Jan 2026 23:55:00 +0530 Subject: [PATCH 004/225] Add self-contained builders for plate girder, deck, crash barrier, and railing --- .../super_structure/crash_barrier/builder.py | 241 +++++++++++++ .../super_structure/deck/builder.py | 328 ++++++++++++++++++ .../super_structure/plate_girder/builder.py | 218 ++++++++++++ .../super_structure/railing/builder.py | 122 +++++++ 4 files changed, 909 insertions(+) create mode 100644 src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py create mode 100644 src/osdagbridge/core/bridge_components/super_structure/deck/builder.py create mode 100644 src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py create mode 100644 src/osdagbridge/core/bridge_components/super_structure/railing/builder.py diff --git a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py new file mode 100644 index 000000000..90b3b0f24 --- /dev/null +++ b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py @@ -0,0 +1,241 @@ +""" + +- Contains geometry creation +- Contains placement logic +- Contains footpath-based positioning logic +""" + +from OCC.Core.gp import gp_Pnt, gp_Vec, gp_Trsf, gp_Dir, gp_Ax2 +from OCC.Core.BRepBuilderAPI import ( + BRepBuilderAPI_MakePolygon, + BRepBuilderAPI_MakeFace, + BRepBuilderAPI_Transform +) +from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism + + +# Utility transforms + +def translate(shape, x=0, y=0, z=0): + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(x, y, z)) + return BRepBuilderAPI_Transform(shape, trsf, True).Shape() + + +def mirror_y(shape): + trsf = gp_Trsf() + trsf.SetMirror(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0))) + return BRepBuilderAPI_Transform(shape, trsf, True).Shape() + + +# Crash barrier geometry + +def create_crash_barrier_left( + length, + width, + height, + base_width +): + """ + Creates LEFT crash barrier solid aligned along +X + """ + + base_h = 100.0 + slope_mid_z = 325.0 + + z0 = 0.0 + z1 = base_h + z2 = slope_mid_z + z3 = height + + y_left_base = -base_width / 2.0 + y_right_base = base_width / 2.0 + + y_left_top = -width / 2.0 + y_right_top = width / 2.0 + + mid_width = 250.0 + y_right_mid = mid_width / 2.0 + + # Profile (YZ plane) + p1 = gp_Pnt(0, y_right_base, z0) + p2 = gp_Pnt(0, y_left_base, z0) + + p3 = gp_Pnt(0, y_left_base, z1) + p4 = gp_Pnt(0, y_left_top, z3) + + p5 = gp_Pnt(0, y_right_top, z3) + p6 = gp_Pnt(0, y_right_mid, z2) + p7 = gp_Pnt(0, y_right_mid, z2) + p8 = gp_Pnt(0, y_right_base, z1) + + poly = BRepBuilderAPI_MakePolygon() + for p in (p1, p2, p3, p4, p5, p6, p7, p8): + poly.Add(p) + poly.Close() + + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + + return BRepPrimAPI_MakePrism( + face, + gp_Vec(length, 0, 0) + ).Shape() + + +def create_crash_barrier_right( + length, + width, + height, + base_width +): + return mirror_y( + create_crash_barrier_left( + length, width, height, base_width + ) + ) + + + +def calculate_deck_width( + footpath_config, + carriageway_width, + crash_barrier_base_width, + footpath_width, + railing_width +): + if footpath_config == "NONE": + return carriageway_width + 2 * crash_barrier_base_width + + elif footpath_config in ("LEFT", "RIGHT"): + return ( + carriageway_width + + 2 * crash_barrier_base_width + + footpath_width + + railing_width + ) + + elif footpath_config == "BOTH": + return ( + carriageway_width + + 2 * crash_barrier_base_width + + 2 * footpath_width + + 2 * railing_width + ) + + else: + raise ValueError(f"Invalid footpath_config: {footpath_config}") + + +def calculate_carriageway_offset( + footpath_config, + footpath_width, + railing_width +): + if footpath_config in ("NONE", "BOTH"): + return 0.0 + + elif footpath_config == "LEFT": + return (footpath_width + railing_width) / 2.0 + + elif footpath_config == "RIGHT": + return -(footpath_width + railing_width) / 2.0 + + else: + raise ValueError(f"Invalid footpath_config: {footpath_config}") + + + +def build_crash_barriers( + *, + span_length_L, + deck_top_z, + footpath_config, + carriageway_width, + crash_barrier_width, + crash_barrier_height, + crash_barrier_base_width, + footpath_width, + railing_width +): + """ + Returns list of crash barrier shapes + """ + + crash_barriers = [] + + total_deck_width = calculate_deck_width( + footpath_config, + carriageway_width, + crash_barrier_base_width, + footpath_width, + railing_width + ) + + deck_half = total_deck_width / 2.0 + + carriageway_offset = calculate_carriageway_offset( + footpath_config, + footpath_width, + railing_width + ) + + cw_half = carriageway_width / 2.0 + cw_left = carriageway_offset - cw_half + cw_right = carriageway_offset + cw_half + + # NONE + if footpath_config == "NONE": + + y_r = deck_half - crash_barrier_base_width / 2.0 + y_l = -deck_half + crash_barrier_base_width / 2.0 + + # LEFT footpath + elif footpath_config == "LEFT": + + y_r = deck_half - crash_barrier_base_width / 2.0 + y_l = cw_left - crash_barrier_base_width / 2.0 + + # RIGHT footpath + elif footpath_config == "RIGHT": + + y_l = -deck_half + crash_barrier_base_width / 2.0 + y_r = cw_right + crash_barrier_base_width / 2.0 + + # BOTH footpaths + elif footpath_config == "BOTH": + + y_r = cw_right + crash_barrier_base_width / 2.0 + y_l = cw_left - crash_barrier_base_width / 2.0 + + else: + raise ValueError(f"Invalid footpath_config: {footpath_config}") + + # Right barrier + crash_barriers.append( + translate( + create_crash_barrier_right( + span_length_L, + crash_barrier_width, + crash_barrier_height, + crash_barrier_base_width + ), + y=y_r, + z=deck_top_z + ) + ) + + # Left barrier + crash_barriers.append( + translate( + create_crash_barrier_left( + span_length_L, + crash_barrier_width, + crash_barrier_height, + crash_barrier_base_width + ), + y=y_l, + z=deck_top_z + ) + ) + + return crash_barriers diff --git a/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py b/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py new file mode 100644 index 000000000..d1f08d852 --- /dev/null +++ b/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py @@ -0,0 +1,328 @@ +""" +Deck builder. + +- Deck slab geometry +- Deck texture geometry +- Deck width logic + +""" + +# OCC imports + +from OCC.Core.BRepPrimAPI import ( + BRepPrimAPI_MakeBox, + BRepPrimAPI_MakeCylinder, + BRepPrimAPI_MakePrism +) +from OCC.Core.BRepBuilderAPI import ( + BRepBuilderAPI_Transform, + BRepBuilderAPI_MakePolygon, + BRepBuilderAPI_MakeFace +) +from OCC.Core.gp import ( + gp_Vec, gp_Trsf, gp_Pnt, + gp_Ax1, gp_Dir +) + +import random +import math + + +# Constants + +DOT_RADIUS = 6 +DOT_HEIGHT = 3 + +TRI_SIZE_MAX = 120 +TRI_HEIGHT = 0.4 + +EDGE_GAP = 15 +Z_GAP = 15 + + +# Utility + +def _translate(shape, x=0, y=0, z=0): + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(x, y, z)) + return BRepBuilderAPI_Transform(shape, trsf, True).Shape() + + +# Deck width logic + +def calculate_deck_width( + *, + footpath_config, + carriageway_width, + crash_barrier_base_width, + footpath_width, + railing_width +): + if footpath_config == "NONE": + return carriageway_width + 2 * crash_barrier_base_width + + elif footpath_config in ("LEFT", "RIGHT"): + return ( + carriageway_width + + 2 * crash_barrier_base_width + + footpath_width + + railing_width + ) + + elif footpath_config == "BOTH": + return ( + carriageway_width + + 2 * crash_barrier_base_width + + 2 * footpath_width + + 2 * railing_width + ) + + else: + raise ValueError(f"Invalid footpath_config: {footpath_config}") + + +# Deck slab geometry + +def _create_deck_slab( + *, + span_length, + deck_width, + deck_thickness, + girder_depth +): + slab = BRepPrimAPI_MakeBox( + span_length, + deck_width, + deck_thickness + ).Shape() + + # center X and Y, bottom at Z=0 + slab = _translate( + slab, + -span_length / 2, + -deck_width / 2, + 0 + ) + + # move to final position + return _translate( + slab, + span_length / 2, + 0, + girder_depth + ) + + +# Texture primitives (exact logic from deck_texture.py) + +def _create_dot(x, y, z): + dot = BRepPrimAPI_MakeCylinder(DOT_RADIUS, DOT_HEIGHT).Shape() + return _translate(dot, x, y, z) + + +def _create_dot_z(x, y, z, up=True): + h = DOT_HEIGHT if up else -DOT_HEIGHT + dot = BRepPrimAPI_MakeCylinder(DOT_RADIUS, abs(h)).Shape() + return _translate(dot, x, y, z) + + +def _create_triangle(x, y, z, rot_axis=None, rot_angle=0): + size = random.uniform(80, TRI_SIZE_MAX) + + p1 = gp_Pnt(0, 0, 0) + p2 = gp_Pnt(size, random.uniform(10, size), 0) + p3 = gp_Pnt(random.uniform(10, size), size, 0) + + poly = BRepBuilderAPI_MakePolygon() + poly.Add(p1) + poly.Add(p2) + poly.Add(p3) + poly.Close() + + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + prism = BRepPrimAPI_MakePrism( + face, gp_Vec(0, 0, TRI_HEIGHT) + ).Shape() + + prism = _translate( + prism, + -size / 2, + -size / 2, + -TRI_HEIGHT / 2 + ) + + trsf = gp_Trsf() + if rot_axis: + trsf.SetRotation(rot_axis, rot_angle) + trsf.SetTranslationPart(gp_Vec(x, y, z)) + + return BRepBuilderAPI_Transform(prism, trsf, True).Shape() + + +def _create_triangle_xy(x, y, z, up=True): + size = random.uniform(80, TRI_SIZE_MAX) + + p1 = gp_Pnt(0, 0, 0) + p2 = gp_Pnt(size, random.uniform(10, size), 0) + p3 = gp_Pnt(random.uniform(10, size), size, 0) + + poly = BRepBuilderAPI_MakePolygon() + poly.Add(p1) + poly.Add(p2) + poly.Add(p3) + poly.Close() + + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + h = TRI_HEIGHT if up else -TRI_HEIGHT + + prism = BRepPrimAPI_MakePrism( + face, gp_Vec(0, 0, h) + ).Shape() + + return _translate(prism, x - size / 2, y - size / 2, z) + + + +def _generate_deck_texture( + *, + deck_length, + deck_width, + deck_thickness, + deck_top_z +): + elements = [] + + z_min = Z_GAP + z_max = deck_thickness - Z_GAP - max(DOT_HEIGHT, TRI_HEIGHT) + + # FRONT & BACK (Y faces) + rot_y = gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)) + + for y in (0.2, deck_width - 0.2): + for _ in range(120): + elements.append( + _create_dot( + random.uniform(EDGE_GAP, deck_length - EDGE_GAP), + y, + random.uniform(z_min, z_max) + ) + ) + + for _ in range(15): + elements.append( + _create_triangle( + random.uniform(EDGE_GAP, deck_length - EDGE_GAP), + y, + random.uniform(z_min, z_max), + rot_y, + math.pi / 2 + ) + ) + + # LEFT & RIGHT (X faces) + rot_x = gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0)) + + for x in (0.2, deck_length - 0.2): + for _ in range(100): + elements.append( + _create_dot( + x, + random.uniform(EDGE_GAP, deck_width - EDGE_GAP), + random.uniform(z_min, z_max) + ) + ) + + for _ in range(20): + elements.append( + _create_triangle( + x, + random.uniform(EDGE_GAP, deck_width - EDGE_GAP), + random.uniform(z_min, z_max), + rot_x, + -math.pi / 2 + ) + ) + + # TOP & BOTTOM + for z, up in ( + (deck_thickness - 0.2, True), + (0.2, False) + ): + for _ in range(150): + elements.append( + _create_dot_z( + random.uniform(EDGE_GAP, deck_length - EDGE_GAP), + random.uniform(EDGE_GAP, deck_width - EDGE_GAP), + z, + up + ) + ) + + for _ in range(50): + elements.append( + _create_triangle_xy( + random.uniform(EDGE_GAP, deck_length - EDGE_GAP), + random.uniform(EDGE_GAP, deck_width - EDGE_GAP), + z, + up + ) + ) + + # Center in Y + elements = [ + _translate(e, 0, -deck_width / 2, 0) + for e in elements + ] + + # Lift to deck position + elements = [ + _translate(e, 0, 0, deck_top_z - deck_thickness) + for e in elements + ] + + return elements + + + +def build_deck( + *, + span_length_L, + girder_section_d, + deck_thickness, + + footpath_config, + carriageway_width, + crash_barrier_base_width, + footpath_width, + railing_width +): + total_deck_width = calculate_deck_width( + footpath_config=footpath_config, + carriageway_width=carriageway_width, + crash_barrier_base_width=crash_barrier_base_width, + footpath_width=footpath_width, + railing_width=railing_width + ) + + deck_slab = _create_deck_slab( + span_length=span_length_L, + deck_width=total_deck_width, + deck_thickness=deck_thickness, + girder_depth=girder_section_d + ) + + deck_top_z = girder_section_d + deck_thickness + + deck_textures = _generate_deck_texture( + deck_length=span_length_L, + deck_width=total_deck_width, + deck_thickness=deck_thickness, + deck_top_z=deck_top_z + ) + + return { + "deck_slab": deck_slab, + "deck_textures": deck_textures, + "deck_top_z": deck_top_z, + "total_deck_width": total_deck_width + } diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py new file mode 100644 index 000000000..18aff14ed --- /dev/null +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py @@ -0,0 +1,218 @@ +""" +Plate girder builder. + +- I-section geometry +- stiffener geometry +- girder + stiffener assembly + +""" + +# OCC imports + +from OCC.Core.gp import gp_Vec, gp_Trsf +from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox +from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse +from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform + + +# I-SECTION GEOMETRY + +def create_i_section( + length, + width, + depth, + flange_thickness, + web_thickness +): + """ + Create an I-section CAD solid aligned along +X axis. + """ + + web_height = depth - 2 * flange_thickness + + # Bottom flange + bottom_flange = BRepPrimAPI_MakeBox( + length, width, flange_thickness + ).Shape() + + # Top flange + top_flange = BRepPrimAPI_MakeBox( + length, width, flange_thickness + ).Shape() + + trsf = gp_Trsf() + trsf.SetTranslation( + gp_Vec(0, 0, depth - flange_thickness) + ) + top_flange = BRepBuilderAPI_Transform( + top_flange, trsf, True + ).Shape() + + # Web + web = BRepPrimAPI_MakeBox( + length, + web_thickness, + web_height + ).Shape() + + trsf = gp_Trsf() + trsf.SetTranslation( + gp_Vec( + 0, + (width - web_thickness) / 2, + flange_thickness + ) + ) + web = BRepBuilderAPI_Transform( + web, trsf, True + ).Shape() + + # Fuse + section = BRepAlgoAPI_Fuse( + bottom_flange, top_flange + ).Shape() + section = BRepAlgoAPI_Fuse( + section, web + ).Shape() + + return section + + +# STIFFENER GEOMETRY + +def _translate(shape, dx=0, dy=0, dz=0): + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(dx, dy, dz)) + return BRepBuilderAPI_Transform( + shape, trsf, True + ).Shape() + + +def create_girder_stiffeners( + *, + girder_depth, + girder_flange_thickness, + girder_web_thickness, + girder_flange_width, + stiffener_width, + stiffener_length, + x_offset=0.0 +): + """ + Create LEFT and RIGHT web stiffeners + consistent with create_i_section(). + """ + + stiffener_height = ( + girder_depth - 2 * girder_flange_thickness + ) + + plate = BRepPrimAPI_MakeBox( + stiffener_length, + stiffener_width, + stiffener_height + ).Shape() + + z_offset = girder_flange_thickness + + web_left_y = ( + girder_flange_width - girder_web_thickness + ) / 2 + web_right_y = web_left_y + girder_web_thickness + + left = _translate( + plate, + dx=x_offset, + dy=web_left_y - stiffener_width, + dz=z_offset + ) + + right = _translate( + plate, + dx=x_offset, + dy=web_right_y, + dz=z_offset + ) + + return left, right + + +# GIRDER ASSEMBLY + +def build_girders( + *, + span_length_L, + girder_section_d, + girder_section_bf, + girder_section_tf, + girder_section_tw, + num_girders, + girder_spacing, + stiffener_width, + stiffener_length +): + """ + Builds girders symmetrically about centerline + and places stiffeners at both ends. + """ + + girders = [] + stiffeners = [] + + total_width = (num_girders - 1) * girder_spacing + + for i in range(num_girders): + + # 1. Girder + girder = create_i_section( + span_length_L, + girder_section_bf, + girder_section_d, + girder_section_tf, + girder_section_tw + ) + + # 2. Stiffeners (start) + s_l, s_r = create_girder_stiffeners( + girder_depth=girder_section_d, + girder_flange_width=girder_section_bf, + girder_web_thickness=girder_section_tw, + girder_flange_thickness=girder_section_tf, + stiffener_width=stiffener_width, + stiffener_length=stiffener_length, + x_offset=0.0 + ) + + # 3. Stiffeners (end) + e_l, e_r = create_girder_stiffeners( + girder_depth=girder_section_d, + girder_flange_width=girder_section_bf, + girder_web_thickness=girder_section_tw, + girder_flange_thickness=girder_section_tf, + stiffener_width=stiffener_width, + stiffener_length=stiffener_length, + x_offset=span_length_L - stiffener_length + ) + + local_stiffeners = [s_l, s_r, e_l, e_r] + + # 4. Y placement + y_offset = (i * girder_spacing) - (total_width / 2) + + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(0, y_offset, 0)) + + girders.append( + BRepBuilderAPI_Transform( + girder, trsf, True + ).Shape() + ) + + for stiff in local_stiffeners: + stiffeners.append( + BRepBuilderAPI_Transform( + stiff, trsf, True + ).Shape() + ) + + return girders, stiffeners diff --git a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py new file mode 100644 index 000000000..20a3ce95b --- /dev/null +++ b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py @@ -0,0 +1,122 @@ + +from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox +from OCC.Core.gp import gp_Trsf, gp_Vec +from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform +from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Cut, BRepAlgoAPI_Fuse + + +# Utilities + +def translate(shape, x=0, y=0, z=0): + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(x, y, z)) + return BRepBuilderAPI_Transform(shape, trsf, True).Shape() + + +def create_rectangular_prism(length, breadth, height): + """ + Aligned with crash barrier: + X: 0 → +length + Y: -breadth/2 → +breadth/2 + Z: 0 → height + """ + box = BRepPrimAPI_MakeBox(length, breadth, height).Shape() + + trsf = gp_Trsf() + trsf.SetTranslation( + gp_Vec(0.0, -breadth / 2.0, 0.0) + ) + + return BRepBuilderAPI_Transform(box, trsf, True).Shape() + + +# Geometry + +def create_railing(length, width, height, rail_count): + BASE_HEIGHT = 100 + + body_height = height - BASE_HEIGHT + if body_height <= 0: + raise ValueError("Railing height must be > base height") + + base = create_rectangular_prism(length, width, BASE_HEIGHT) + + body = create_rectangular_prism(length, width, body_height) + body = translate(body, z=BASE_HEIGHT) + + HOLE_LENGTH_RATIO = 1 + HOLE_WIDTH_RATIO = 0.6 + HOLE_HEIGHT_RATIO = 0.5 + HOLE_Y_OFFSET_RATIO = -0.2 + + hole_length = HOLE_LENGTH_RATIO * length + hole_width = HOLE_WIDTH_RATIO * width + hole_height = HOLE_HEIGHT_RATIO * (body_height / rail_count) + + spacing = body_height / (rail_count + 1) + body_with_holes = body + + for i in range(rail_count): + z_center = BASE_HEIGHT + (i + 1) * spacing + + hole = create_rectangular_prism( + hole_length, hole_width, hole_height + ) + + hole = translate( + hole, + x=(length - hole_length) / 2, + y=(width - hole_width) / 2 + HOLE_Y_OFFSET_RATIO * width, + z=z_center - hole_height / 2 + ) + + body_with_holes = BRepAlgoAPI_Cut( + body_with_holes, hole + ).Shape() + + return BRepAlgoAPI_Fuse(base, body_with_holes).Shape() + + +def build_railings( + *, + span_length, + deck_top_z, + total_deck_width, + footpath_config, + railing_width, + railing_height, + rail_count +): + + if footpath_config == "NONE": + return [] + + railing_proto = create_railing( + length=span_length, + width=railing_width, + height=railing_height, + rail_count=rail_count + ) + + deck_half = total_deck_width / 2.0 + railings = [] + + if footpath_config in ("LEFT", "BOTH"): + railings.append( + translate( + railing_proto, + y=-deck_half + railing_width / 2.0, + z=deck_top_z + ) + ) + + if footpath_config in ("RIGHT", "BOTH"): + railings.append( + translate( + railing_proto, + y=deck_half - railing_width / 2.0, + z=deck_top_z + ) + ) + + return railings From e0e7310dce931e601a54477453e4fd81f9f7476e Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Mon, 12 Jan 2026 23:57:47 +0530 Subject: [PATCH 005/225] Integrate superstructure builders in plate girder CAD generator --- .../plate_girder/cad_generator.py | 164 +++++++++++++++++- .../tests/test_plate_girder_only.py | 71 ++++++++ 2 files changed, 231 insertions(+), 4 deletions(-) create mode 100644 src/osdagbridge/tests/test_plate_girder_only.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 78490ca4b..51852f1e8 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -1,4 +1,160 @@ -"""CAD generator for plate girder (pythonOCC stub).""" -def export_step(dto, path): - with open(path, "w") as f: - f.write("STEP placeholder") +""" +CAD generator for Plate Girder Bridge. + +Thin orchestration layer: +- Defines all high-level parameters +- Calls individual builders +- Returns assembled CAD components +""" + +# --------------------------------------------------------------------- +# Builder imports (ONLY high-level builders) +# --------------------------------------------------------------------- + +from osdagbridge.core.bridge_components.super_structure.plate_girder.builder import ( + build_girders +) + +from osdagbridge.core.bridge_components.super_structure.deck.builder import ( + build_deck +) + +from osdagbridge.core.bridge_components.super_structure.crash_barrier.builder import ( + build_crash_barriers +) + +from osdagbridge.core.bridge_components.super_structure.railing.builder import ( + build_railings +) + +# --------------------------------------------------------------------- +# GIRDERS PARAMETERS +# --------------------------------------------------------------------- + +span_length_L = 25000 + +girder_section_d = 900 +girder_section_bf = 500 +girder_section_tf = 260 +girder_section_tw = 100 + +num_girders = 5 +girder_spacing = 2750 + +# --------------------------------------------------------------------- +# DECK PARAMETERS +# --------------------------------------------------------------------- + +carriageway_width = 12000 +deck_thickness = 400 + +footpath_config = "BOTH" # NONE / LEFT / RIGHT / BOTH +crash_barrier_base_width = 600 +footpath_width = 1500 +railing_width = 300 + +# --------------------------------------------------------------------- +# CRASH BARRIER PARAMETERS +# --------------------------------------------------------------------- + +crash_barrier_width = 175 +crash_barrier_height = 900 + +# --------------------------------------------------------------------- +# RAILING PARAMETERS +# --------------------------------------------------------------------- + +railing_height = 1200 +rail_count = 3 + +# --------------------------------------------------------------------- +# STIFFENER PARAMETERS +# --------------------------------------------------------------------- + +stiffener_width = 200 +stiffener_length = 10 + +# --------------------------------------------------------------------- +# PUBLIC API +# --------------------------------------------------------------------- + +def generate_cad(): + + # ------------------------- + # Plate girder system + # ------------------------- + girders, stiffeners = build_girders( + span_length_L=span_length_L, + girder_section_d=girder_section_d, + girder_section_bf=girder_section_bf, + girder_section_tf=girder_section_tf, + girder_section_tw=girder_section_tw, + num_girders=num_girders, + girder_spacing=girder_spacing, + stiffener_width=stiffener_width, + stiffener_length=stiffener_length + ) + + # ------------------------- + # Deck system + # ------------------------- + deck_out = build_deck( + span_length_L=span_length_L, + girder_section_d=girder_section_d, + deck_thickness=deck_thickness, + + footpath_config=footpath_config, + carriageway_width=carriageway_width, + crash_barrier_base_width=crash_barrier_base_width, + footpath_width=footpath_width, + railing_width=railing_width + ) + + # ------------------------- + # Crash barrier system + # ------------------------- + crash_barriers = build_crash_barriers( + span_length_L=span_length_L, + deck_top_z=deck_out["deck_top_z"], + + footpath_config=footpath_config, + carriageway_width=carriageway_width, + + crash_barrier_width=crash_barrier_width, + crash_barrier_height=crash_barrier_height, + crash_barrier_base_width=crash_barrier_base_width, + + footpath_width=footpath_width, + railing_width=railing_width + ) + + # ------------------------- + # Railing system (FIXED) + # ------------------------- + railings = build_railings( + span_length=span_length_L, + deck_top_z=deck_out["deck_top_z"], + total_deck_width=deck_out["total_deck_width"], + + footpath_config=footpath_config, + + railing_width=railing_width, + railing_height=railing_height, + rail_count=rail_count + ) + + # ------------------------- + # Final output + # ------------------------- + return { + "girders": girders, + "stiffeners": stiffeners, + + "deck_slab": deck_out["deck_slab"], + "deck_textures": deck_out["deck_textures"], + "deck_top_z": deck_out["deck_top_z"], + "total_deck_width": deck_out["total_deck_width"], + + "crash_barriers": crash_barriers, + "railings": railings + } diff --git a/src/osdagbridge/tests/test_plate_girder_only.py b/src/osdagbridge/tests/test_plate_girder_only.py new file mode 100644 index 000000000..9bb70818d --- /dev/null +++ b/src/osdagbridge/tests/test_plate_girder_only.py @@ -0,0 +1,71 @@ +""" +Test file for Plate Girder Bridge CAD Generator +(Girder + Stiffeners + Deck + Crash Barriers + Railings) +""" + +from OCC.Display.SimpleGui import init_display +from OCC.Display.backend import load_backend +from OCC.Core.Quantity import Quantity_Color, Quantity_TOC_RGB + +load_backend("pyside6") + +from osdagbridge.core.bridge_types.plate_girder.cad_generator import ( + generate_cad +) + +# Colors (RGB 0–1) + +COLOR_GIRDER = (72/255, 72/255, 54/255) +COLOR_STIFFENER = (30/255, 30/255, 30/255) +COLOR_DECK = (180/255, 180/255, 180/255) +COLOR_DECK_TEXTURE = (150/255, 150/255, 150/255) +COLOR_CRASH_BARRIER = (120/255, 120/255, 120/255) +COLOR_RAILING = (90/255, 90/255, 90/255) + + +def main(): + display, start_display, _, _ = init_display() + + cad = generate_cad() + + # Quantity colors + girder_color = Quantity_Color(*COLOR_GIRDER, Quantity_TOC_RGB) + stiffener_color = Quantity_Color(*COLOR_STIFFENER, Quantity_TOC_RGB) + deck_color = Quantity_Color(*COLOR_DECK, Quantity_TOC_RGB) + deck_texture_color = Quantity_Color(*COLOR_DECK_TEXTURE, Quantity_TOC_RGB) + crash_barrier_color = Quantity_Color(*COLOR_CRASH_BARRIER, Quantity_TOC_RGB) + railing_color = Quantity_Color(*COLOR_RAILING, Quantity_TOC_RGB) + + # Display girders + for girder in cad["girders"]: + display.DisplayColoredShape(girder, girder_color, update=False) + + # Display stiffeners + for stiffener in cad["stiffeners"]: + display.DisplayColoredShape(stiffener, stiffener_color, update=False) + + # Display deck slab + display.DisplayColoredShape( + cad["deck_slab"], + deck_color, + update=False + ) + + # Display deck textures + for tex in cad["deck_textures"]: + display.DisplayColoredShape(tex, deck_texture_color, update=False) + + # Display crash barriers + for barrier in cad["crash_barriers"]: + display.DisplayColoredShape(barrier, crash_barrier_color, update=False) + + # Display railings + for railing in cad["railings"]: + display.DisplayColoredShape(railing, railing_color, update=False) + + display.FitAll() + start_display() + + +if __name__ == "__main__": + main() From 029b9cd8c0e3d8bb5b4ace816e22a79b3d6472e1 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 13 Jan 2026 00:26:18 +0530 Subject: [PATCH 006/225] Add median builder and integrate median in plate girder CAD generator --- .../super_structure/median/builder.py | 72 +++++++++++++++++++ .../plate_girder/cad_generator.py | 36 +++++++++- 2 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 src/osdagbridge/core/bridge_components/super_structure/median/builder.py diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py new file mode 100644 index 000000000..ee045f26e --- /dev/null +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -0,0 +1,72 @@ +""" + +Creates median barriers using existing crash barrier geometry. +""" + +from OCC.Core.gp import gp_Trsf, gp_Vec +from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform + +from osdagbridge.core.bridge_components.super_structure.crash_barrier.builder import ( + create_crash_barrier_left, + create_crash_barrier_right +) + + +def _translate(shape, x=0.0, y=0.0, z=0.0): + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(x, y, z)) + return BRepBuilderAPI_Transform(shape, trsf, True).Shape() + + +def build_median( + span_length, + deck_top_z, + carriageway_center_y, + crash_barrier_width, + crash_barrier_height, + crash_barrier_base_width, + median_gap +): + """ + Build median barriers. + """ + + median_barriers = [] + + offset = (median_gap / 2.0) + (crash_barrier_base_width / 2.0) + + # Left median barrier + left_barrier = create_crash_barrier_left( + length=span_length, + width=crash_barrier_width, + height=crash_barrier_height, + base_width=crash_barrier_base_width + ) + + left_barrier = _translate( + left_barrier, + x=0.0, + y=carriageway_center_y - offset, + z=deck_top_z + ) + + median_barriers.append(left_barrier) + + # Right median barrier + right_barrier = create_crash_barrier_right( + length=span_length, + width=crash_barrier_width, + height=crash_barrier_height, + base_width=crash_barrier_base_width + ) + + right_barrier = _translate( + right_barrier, + x=0.0, + y=carriageway_center_y + offset, + z=deck_top_z + ) + + median_barriers.append(right_barrier) + + return median_barriers diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 51852f1e8..ea63de554 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -27,6 +27,10 @@ build_railings ) +from osdagbridge.core.bridge_components.super_structure.median.builder import ( + build_median +) + # --------------------------------------------------------------------- # GIRDERS PARAMETERS # --------------------------------------------------------------------- @@ -48,7 +52,7 @@ carriageway_width = 12000 deck_thickness = 400 -footpath_config = "BOTH" # NONE / LEFT / RIGHT / BOTH +footpath_config = "LEFT" # NONE / LEFT / RIGHT / BOTH crash_barrier_base_width = 600 footpath_width = 1500 railing_width = 300 @@ -60,6 +64,13 @@ crash_barrier_width = 175 crash_barrier_height = 900 +# --------------------------------------------------------------------- +# MEDIAN PARAMETERS +# --------------------------------------------------------------------- + +enable_median = True +median_gap = 800 + # --------------------------------------------------------------------- # RAILING PARAMETERS # --------------------------------------------------------------------- @@ -129,7 +140,27 @@ def generate_cad(): ) # ------------------------- - # Railing system (FIXED) + # Median system + # ------------------------- + median_barriers = [] + + if enable_median: + carriageway_center_y = deck_out["carriageway_center_y"] + + median_barriers = build_median( + span_length=span_length_L, + deck_top_z=deck_out["deck_top_z"], + carriageway_center_y=carriageway_center_y, + + crash_barrier_width=crash_barrier_width, + crash_barrier_height=crash_barrier_height, + crash_barrier_base_width=crash_barrier_base_width, + + median_gap=median_gap + ) + + # ------------------------- + # Railing system # ------------------------- railings = build_railings( span_length=span_length_L, @@ -156,5 +187,6 @@ def generate_cad(): "total_deck_width": deck_out["total_deck_width"], "crash_barriers": crash_barriers, + "median_barriers": median_barriers, "railings": railings } From 32a4948d756c12cc202dbddfde2072fac11469df Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 13 Jan 2026 00:26:26 +0530 Subject: [PATCH 007/225] Fix carriageway center calculation and update test visualization --- .../super_structure/deck/builder.py | 49 ++++++++++++++++++- .../tests/test_plate_girder_only.py | 11 ++++- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py b/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py index d1f08d852..6443985f0 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py @@ -81,6 +81,37 @@ def calculate_deck_width( raise ValueError(f"Invalid footpath_config: {footpath_config}") +def calculate_carriageway_center_y( + *, + footpath_config, + total_deck_width, + carriageway_width, + crash_barrier_base_width, + footpath_width, + railing_width +): + """ + Calculates carriageway center Y coordinate. + + Deck is centered at Y = 0. + """ + + # Start from LEFT edge of deck + y = -total_deck_width / 2 + + # Left crash barrier always exists + y += crash_barrier_base_width + + # Optional left footpath + railing + if footpath_config in ("LEFT", "BOTH"): + y += footpath_width + railing_width + + # Move to center of carriageway + y += carriageway_width / 2 + + return y + + # Deck slab geometry def _create_deck_slab( @@ -296,6 +327,8 @@ def build_deck( footpath_width, railing_width ): + + total_deck_width = calculate_deck_width( footpath_config=footpath_config, carriageway_width=carriageway_width, @@ -304,6 +337,17 @@ def build_deck( railing_width=railing_width ) + + carriageway_center_y = calculate_carriageway_center_y( + footpath_config=footpath_config, + total_deck_width=total_deck_width, + carriageway_width=carriageway_width, + crash_barrier_base_width=crash_barrier_base_width, + footpath_width=footpath_width, + railing_width=railing_width + ) + + deck_slab = _create_deck_slab( span_length=span_length_L, deck_width=total_deck_width, @@ -324,5 +368,8 @@ def build_deck( "deck_slab": deck_slab, "deck_textures": deck_textures, "deck_top_z": deck_top_z, - "total_deck_width": total_deck_width + "total_deck_width": total_deck_width, + "carriageway_center_y": carriageway_center_y } + + diff --git a/src/osdagbridge/tests/test_plate_girder_only.py b/src/osdagbridge/tests/test_plate_girder_only.py index 9bb70818d..bb70c310f 100644 --- a/src/osdagbridge/tests/test_plate_girder_only.py +++ b/src/osdagbridge/tests/test_plate_girder_only.py @@ -1,6 +1,6 @@ """ Test file for Plate Girder Bridge CAD Generator -(Girder + Stiffeners + Deck + Crash Barriers + Railings) +(Girder + Stiffeners + Deck + Crash Barriers + Median + Railings) """ from OCC.Display.SimpleGui import init_display @@ -20,6 +20,7 @@ COLOR_DECK = (180/255, 180/255, 180/255) COLOR_DECK_TEXTURE = (150/255, 150/255, 150/255) COLOR_CRASH_BARRIER = (120/255, 120/255, 120/255) +COLOR_MEDIAN = (110/255, 110/255, 110/255) COLOR_RAILING = (90/255, 90/255, 90/255) @@ -34,6 +35,7 @@ def main(): deck_color = Quantity_Color(*COLOR_DECK, Quantity_TOC_RGB) deck_texture_color = Quantity_Color(*COLOR_DECK_TEXTURE, Quantity_TOC_RGB) crash_barrier_color = Quantity_Color(*COLOR_CRASH_BARRIER, Quantity_TOC_RGB) + median_color = Quantity_Color(*COLOR_MEDIAN, Quantity_TOC_RGB) railing_color = Quantity_Color(*COLOR_RAILING, Quantity_TOC_RGB) # Display girders @@ -59,7 +61,12 @@ def main(): for barrier in cad["crash_barriers"]: display.DisplayColoredShape(barrier, crash_barrier_color, update=False) - # Display railings + # Display median barriers (optional) + if "median_barriers" in cad: + for median in cad["median_barriers"]: + display.DisplayColoredShape(median, median_color, update=False) + + # Display railings for railing in cad["railings"]: display.DisplayColoredShape(railing, railing_color, update=False) From 30fefc29968717ddb1b2b2a0108c876a034627b3 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 13 Jan 2026 19:57:23 +0530 Subject: [PATCH 008/225] Add cross bracing builder and integrate into plate girder CAD --- .../super_structure/cross_bracing/builder.py | 386 ++++++++++++++++++ .../plate_girder/cad_generator.py | 95 +++-- .../tests/test_plate_girder_only.py | 36 +- 3 files changed, 470 insertions(+), 47 deletions(-) create mode 100644 src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py diff --git a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py new file mode 100644 index 000000000..0af8d8306 --- /dev/null +++ b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py @@ -0,0 +1,386 @@ +""" +Cross bracing builder. + +- Angle / Channel / Double Angle / Double Channel sections +- X and K bracing systems +- Geometry + placement +""" + +# OCC imports + +import math + +from OCC.Core.gp import ( + gp_Pnt, gp_Vec, gp_Trsf, gp_Ax1, gp_Ax2, gp_Dir +) +from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox +from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse +from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform + + +# SECTION GEOMETRY + +def _create_angle_section(length, leg_h, leg_w, thickness): + + leg1 = BRepPrimAPI_MakeBox(length, thickness, leg_h).Shape() + leg2 = BRepPrimAPI_MakeBox(length, leg_w, thickness).Shape() + + angle = BRepAlgoAPI_Fuse(leg1, leg2).Shape() + + trsf = gp_Trsf() + trsf.SetTranslation( + gp_Vec(-length / 2, -leg_w / 2, -leg_h / 2) + ) + + return BRepBuilderAPI_Transform(angle, trsf, True).Shape() + + +def _create_channel_section( + length, depth, flange_width, web_thickness, flange_thickness +): + + web = BRepPrimAPI_MakeBox( + length, web_thickness, depth + ).Shape() + + bottom = BRepPrimAPI_MakeBox( + length, flange_width, flange_thickness + ).Shape() + + top = BRepPrimAPI_MakeBox( + length, flange_width, flange_thickness + ).Shape() + + trsf_top = gp_Trsf() + trsf_top.SetTranslation( + gp_Vec(0, 0, depth - flange_thickness) + ) + top = BRepBuilderAPI_Transform(top, trsf_top, True).Shape() + + channel = BRepAlgoAPI_Fuse(web, bottom).Shape() + channel = BRepAlgoAPI_Fuse(channel, top).Shape() + + trsf = gp_Trsf() + trsf.SetTranslation( + gp_Vec(-length / 2, -flange_width / 2, -depth / 2) + ) + + return BRepBuilderAPI_Transform(channel, trsf, True).Shape() + + +def _create_double_angle_section( + length, leg_h, leg_w, thickness, connection_type="LONGER_LEG" +): + + base = _create_angle_section(length, leg_h, leg_w, thickness) + + mirror = gp_Trsf() + mirror.SetMirror(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0))) + mirrored = BRepBuilderAPI_Transform(base, mirror, True).Shape() + + offset = leg_h / 2 if connection_type == "LONGER_LEG" else leg_w / 2 + + t1 = gp_Trsf() + t1.SetTranslation(gp_Vec(0, +offset, 0)) + + t2 = gp_Trsf() + t2.SetTranslation(gp_Vec(0, -offset, 0)) + + a1 = BRepBuilderAPI_Transform(base, t1, True).Shape() + a2 = BRepBuilderAPI_Transform(mirrored, t2, True).Shape() + + return BRepAlgoAPI_Fuse(a1, a2).Shape() + + +def _create_double_channel_section( + length, depth, flange_width, web_thickness, flange_thickness +): + + base = _create_channel_section( + length, depth, flange_width, web_thickness, flange_thickness + ) + + mirror = gp_Trsf() + mirror.SetMirror(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0))) + mirrored = BRepBuilderAPI_Transform(base, mirror, True).Shape() + + offset = flange_width / 2 + + t1 = gp_Trsf() + t1.SetTranslation(gp_Vec(0, +offset, 0)) + + t2 = gp_Trsf() + t2.SetTranslation(gp_Vec(0, -offset, 0)) + + c1 = BRepBuilderAPI_Transform(base, t1, True).Shape() + c2 = BRepBuilderAPI_Transform(mirrored, t2, True).Shape() + + return BRepAlgoAPI_Fuse(c1, c2).Shape() + + +# INTERNAL UTILITIES + +def _get_roll_angle(section_type, roll_sign): + if section_type in ("ANGLE", "CHANNEL"): + return roll_sign * (math.pi / 2) + return 0.0 + + +def _create_section_solid(section_type, length, thickness, dims): + + if section_type == "ANGLE": + return _create_angle_section( + length, dims["leg_h"], dims["leg_w"], thickness + ) + + if section_type == "CHANNEL": + return _create_channel_section( + length, + dims["depth"], + dims["flange_width"], + dims["web_thickness"], + dims["flange_thickness"] + ) + + if section_type == "DOUBLE_ANGLE": + return _create_double_angle_section( + length, + dims["leg_h"], + dims["leg_w"], + thickness, + dims.get("connection_type", "LONGER_LEG") + ) + + if section_type == "DOUBLE_CHANNEL": + return _create_double_channel_section( + length, + dims["depth"], + dims["flange_width"], + dims["web_thickness"], + dims["flange_thickness"] + ) + + raise ValueError("Unsupported section type") + + +# MEMBER CREATION + +def _create_diagonal_member(p1, p2, thickness, section_type, dims, roll_sign): + + vec = gp_Vec(p1, p2) + length = vec.Magnitude() + + solid = _create_section_solid( + section_type, length, thickness, dims + ) + + x_dir = gp_Dir(1, 0, 0) + tgt = gp_Dir(vec) + + axis = gp_Vec(x_dir.Crossed(tgt)) + angle = x_dir.Angle(tgt) + + if axis.Magnitude() > 1e-6: + tr = gp_Trsf() + tr.SetRotation(gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(axis)), angle) + solid = BRepBuilderAPI_Transform(solid, tr, True).Shape() + + roll = _get_roll_angle(section_type, roll_sign) + if abs(roll) > 1e-6: + tr = gp_Trsf() + tr.SetRotation(gp_Ax1(gp_Pnt(0, 0, 0), tgt), roll) + solid = BRepBuilderAPI_Transform(solid, tr, True).Shape() + + mid = gp_Pnt( + (p1.X() + p2.X()) / 2, + (p1.Y() + p2.Y()) / 2, + (p1.Z() + p2.Z()) / 2 + ) + + tr = gp_Trsf() + tr.SetTranslation(gp_Vec(mid.X(), mid.Y(), mid.Z())) + + return BRepBuilderAPI_Transform(solid, tr, True).Shape() + + +def _create_horizontal_member_y( + x, yL, yR, z, thickness, flange_width, section_type, dims, roll_sign +): + + y0 = yL + flange_width + y1 = yR + length = y1 - y0 + y_mid = (y0 + y1) / 2 + + solid = _create_section_solid( + section_type, length, thickness, dims + ) + + tr = gp_Trsf() + tr.SetRotation( + gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), + math.pi / 2 + ) + solid = BRepBuilderAPI_Transform(solid, tr, True).Shape() + + roll = _get_roll_angle(section_type, roll_sign) + if abs(roll) > 1e-6: + tr = gp_Trsf() + tr.SetRotation(gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0)), roll) + solid = BRepBuilderAPI_Transform(solid, tr, True).Shape() + + tr = gp_Trsf() + tr.SetTranslation(gp_Vec(x, y_mid, z)) + + return BRepBuilderAPI_Transform(solid, tr, True).Shape() + + +# BRACING TOPOLOGIES + +def _x_bracing( + x, yL, yR, depth, tf, thickness, flange_w, + section_type, dims, bracket +): + + z0 = tf / 2 + z1 = depth - tf / 2 + + yl = yL + flange_w + yr = yR + + braces = [ + _create_diagonal_member( + gp_Pnt(x, yl, z0), gp_Pnt(x, yr, z1), + thickness, section_type, dims, +1 + ), + _create_diagonal_member( + gp_Pnt(x, yl, z1), gp_Pnt(x, yr, z0), + thickness, section_type, dims, -1 + ) + ] + + if bracket in ("LOWER", "BOTH"): + braces.append( + _create_horizontal_member_y( + x, yL, yR, z0, + thickness, flange_w, + section_type, dims, +1 + ) + ) + + if bracket in ("UPPER", "BOTH"): + braces.append( + _create_horizontal_member_y( + x, yL, yR, z1, + thickness, flange_w, + section_type, dims, +1 + ) + ) + + return braces + + +def _k_bracing( + x, yL, yR, depth, tf, thickness, flange_w, + section_type, dims, top_bracket +): + + z0 = tf / 2 + z1 = depth - tf / 2 + + yl = yL + flange_w + yr = yR + ym = (yl + yr) / 2 + + braces = [ + _create_diagonal_member( + gp_Pnt(x, yl, z1), gp_Pnt(x, ym, z0), + thickness, section_type, dims, +1 + ), + _create_diagonal_member( + gp_Pnt(x, yr, z1), gp_Pnt(x, ym, z0), + thickness, section_type, dims, -1 + ), + _create_horizontal_member_y( + x, yL, yR, z0, + thickness, flange_w, + section_type, dims, +1 + ) + ] + + if top_bracket: + braces.append( + _create_horizontal_member_y( + x, yL, yR, z1, + thickness, flange_w, + section_type, dims, +1 + ) + ) + + return braces + + +# PUBLIC API + +def build_cross_bracings( + *, + span_length_L, + num_girders, + girder_spacing, + girder_depth, + flange_thickness, + flange_width, + + bracing_type, # "X" or "K" + section_type, # "ANGLE", "CHANNEL", "DOUBLE_ANGLE", "DOUBKE_CHANNEL" + section_dims, + thickness, + + panel_spacing, + bracket_option="BOTH", + top_bracket=False +): + """ + Build cross bracings for entire bridge. + """ + + bracings = [] + + # Number of bracing frames along span + n = int(span_length_L / panel_spacing) - 1 + n_total = n + 2 + spacing = span_length_L / (n_total - 1) + x_positions = [i * spacing for i in range(n_total)] + + total_width = (num_girders - 1) * girder_spacing + for x in x_positions: + for i in range(num_girders - 1): + + yL = (i * girder_spacing) - total_width / 2 + yR = yL + girder_spacing + + if bracing_type == "X": + bracings.extend( + _x_bracing( + x, yL, yR, + girder_depth, flange_thickness, + thickness, flange_width, + section_type, section_dims, + bracket_option + ) + ) + + elif bracing_type == "K": + bracings.extend( + _k_bracing( + x, yL, yR, + girder_depth, flange_thickness, + thickness, flange_width, + section_type, section_dims, + top_bracket + ) + ) + + x += panel_spacing + + return bracings diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index ea63de554..f63f32a55 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -1,15 +1,10 @@ """ CAD generator for Plate Girder Bridge. -Thin orchestration layer: -- Defines all high-level parameters -- Calls individual builders - Returns assembled CAD components """ -# --------------------------------------------------------------------- -# Builder imports (ONLY high-level builders) -# --------------------------------------------------------------------- + from osdagbridge.core.bridge_components.super_structure.plate_girder.builder import ( build_girders @@ -31,9 +26,11 @@ build_median ) -# --------------------------------------------------------------------- +from osdagbridge.core.bridge_components.super_structure.cross_bracing.builder import ( + build_cross_bracings +) + # GIRDERS PARAMETERS -# --------------------------------------------------------------------- span_length_L = 25000 @@ -45,9 +42,7 @@ num_girders = 5 girder_spacing = 2750 -# --------------------------------------------------------------------- # DECK PARAMETERS -# --------------------------------------------------------------------- carriageway_width = 12000 deck_thickness = 400 @@ -57,43 +52,63 @@ footpath_width = 1500 railing_width = 300 -# --------------------------------------------------------------------- # CRASH BARRIER PARAMETERS -# --------------------------------------------------------------------- crash_barrier_width = 175 crash_barrier_height = 900 -# --------------------------------------------------------------------- # MEDIAN PARAMETERS -# --------------------------------------------------------------------- enable_median = True median_gap = 800 -# --------------------------------------------------------------------- # RAILING PARAMETERS -# --------------------------------------------------------------------- railing_height = 1200 rail_count = 3 -# --------------------------------------------------------------------- # STIFFENER PARAMETERS -# --------------------------------------------------------------------- stiffener_width = 200 stiffener_length = 10 -# --------------------------------------------------------------------- -# PUBLIC API -# --------------------------------------------------------------------- +# CROSS BRACING PARAMETERS + +cross_bracing_spacing = 4000 +cross_bracing_thickness = 5 + +bracing_type = "K" # "X" or "K" + +# X bracing option: "NONE" | "LOWER" | "UPPER" | "BOTH" +x_bracket_option = "BOTH" + +# K bracing option +k_top_bracket = True + +# ---- SECTION SELECTION (NUMERIC ONLY) ---- + +cross_bracing_section_type = "CHANNEL" + +#CHANNEL – ISMC 100 +cross_bracing_section_dims = { + "depth": 100, + "flange_width": 50, + "web_thickness": 5, + "flange_thickness": 7 +} + +# # If you want DOUBLE_ANGLE instead, comment above and use: +# cross_bracing_section_type = "DOUBLE_ANGLE" +# cross_bracing_section_dims = { +# "leg_h": 75, +# "leg_w": 75, +# "connection_type": "SHORTER_LEG" +# } + def generate_cad(): - # ------------------------- # Plate girder system - # ------------------------- girders, stiffeners = build_girders( span_length_L=span_length_L, girder_section_d=girder_section_d, @@ -106,9 +121,26 @@ def generate_cad(): stiffener_length=stiffener_length ) - # ------------------------- + # Cross bracing system + cross_bracings = build_cross_bracings( + span_length_L=span_length_L, + num_girders=num_girders, + girder_spacing=girder_spacing, + girder_depth=girder_section_d, + flange_thickness=girder_section_tf, + flange_width=girder_section_bf, + + bracing_type=bracing_type, + section_type=cross_bracing_section_type, + section_dims=cross_bracing_section_dims, + thickness=cross_bracing_thickness, + + panel_spacing=cross_bracing_spacing, + bracket_option=x_bracket_option, + top_bracket=k_top_bracket + ) + # Deck system - # ------------------------- deck_out = build_deck( span_length_L=span_length_L, girder_section_d=girder_section_d, @@ -121,9 +153,7 @@ def generate_cad(): railing_width=railing_width ) - # ------------------------- # Crash barrier system - # ------------------------- crash_barriers = build_crash_barriers( span_length_L=span_length_L, deck_top_z=deck_out["deck_top_z"], @@ -139,18 +169,14 @@ def generate_cad(): railing_width=railing_width ) - # ------------------------- # Median system - # ------------------------- median_barriers = [] if enable_median: - carriageway_center_y = deck_out["carriageway_center_y"] - median_barriers = build_median( span_length=span_length_L, deck_top_z=deck_out["deck_top_z"], - carriageway_center_y=carriageway_center_y, + carriageway_center_y=deck_out["carriageway_center_y"], crash_barrier_width=crash_barrier_width, crash_barrier_height=crash_barrier_height, @@ -159,9 +185,7 @@ def generate_cad(): median_gap=median_gap ) - # ------------------------- # Railing system - # ------------------------- railings = build_railings( span_length=span_length_L, deck_top_z=deck_out["deck_top_z"], @@ -174,12 +198,11 @@ def generate_cad(): rail_count=rail_count ) - # ------------------------- # Final output - # ------------------------- return { "girders": girders, "stiffeners": stiffeners, + "cross_bracings": cross_bracings, "deck_slab": deck_out["deck_slab"], "deck_textures": deck_out["deck_textures"], diff --git a/src/osdagbridge/tests/test_plate_girder_only.py b/src/osdagbridge/tests/test_plate_girder_only.py index bb70c310f..3497e313a 100644 --- a/src/osdagbridge/tests/test_plate_girder_only.py +++ b/src/osdagbridge/tests/test_plate_girder_only.py @@ -1,6 +1,6 @@ """ Test file for Plate Girder Bridge CAD Generator -(Girder + Stiffeners + Deck + Crash Barriers + Median + Railings) +(Girder + Stiffeners + Cross Bracings + Deck + Crash Barriers + Median + Railings) """ from OCC.Display.SimpleGui import init_display @@ -17,13 +17,18 @@ COLOR_GIRDER = (72/255, 72/255, 54/255) COLOR_STIFFENER = (30/255, 30/255, 30/255) +COLOR_CROSS_BRACING = (60/255, 60/255, 60/255) + COLOR_DECK = (180/255, 180/255, 180/255) COLOR_DECK_TEXTURE = (150/255, 150/255, 150/255) + COLOR_CRASH_BARRIER = (120/255, 120/255, 120/255) COLOR_MEDIAN = (110/255, 110/255, 110/255) COLOR_RAILING = (90/255, 90/255, 90/255) +# Main + def main(): display, start_display, _, _ = init_display() @@ -32,44 +37,53 @@ def main(): # Quantity colors girder_color = Quantity_Color(*COLOR_GIRDER, Quantity_TOC_RGB) stiffener_color = Quantity_Color(*COLOR_STIFFENER, Quantity_TOC_RGB) + cross_bracing_color = Quantity_Color(*COLOR_CROSS_BRACING, Quantity_TOC_RGB) + deck_color = Quantity_Color(*COLOR_DECK, Quantity_TOC_RGB) deck_texture_color = Quantity_Color(*COLOR_DECK_TEXTURE, Quantity_TOC_RGB) + crash_barrier_color = Quantity_Color(*COLOR_CRASH_BARRIER, Quantity_TOC_RGB) median_color = Quantity_Color(*COLOR_MEDIAN, Quantity_TOC_RGB) railing_color = Quantity_Color(*COLOR_RAILING, Quantity_TOC_RGB) - # Display girders + # Girders for girder in cad["girders"]: display.DisplayColoredShape(girder, girder_color, update=False) - # Display stiffeners + # Stiffeners for stiffener in cad["stiffeners"]: display.DisplayColoredShape(stiffener, stiffener_color, update=False) - # Display deck slab + # Cross bracings + if "cross_bracings" in cad: + for brace in cad["cross_bracings"]: + display.DisplayColoredShape(brace, cross_bracing_color, update=False) + + # Deck slab display.DisplayColoredShape( cad["deck_slab"], deck_color, update=False ) - # Display deck textures + # Deck textures for tex in cad["deck_textures"]: display.DisplayColoredShape(tex, deck_texture_color, update=False) - # Display crash barriers + # Crash barriers for barrier in cad["crash_barriers"]: display.DisplayColoredShape(barrier, crash_barrier_color, update=False) - # Display median barriers (optional) - if "median_barriers" in cad: - for median in cad["median_barriers"]: - display.DisplayColoredShape(median, median_color, update=False) + # Median barriers + for median in cad.get("median_barriers", []): + display.DisplayColoredShape(median, median_color, update=False) - # Display railings + # Railings for railing in cad["railings"]: display.DisplayColoredShape(railing, railing_color, update=False) + + display.FitAll() start_display() From f2543f0c8facbf3a296a925d5b0a55ac5994cc9d Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 15 Jan 2026 01:04:17 +0530 Subject: [PATCH 009/225] Add QMainWindow-based 3D CAD viewer for plate girder bridge --- src/osdagbridge/desktop/ui/cad_3d.py | 158 +++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 src/osdagbridge/desktop/ui/cad_3d.py diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py new file mode 100644 index 000000000..a35a72644 --- /dev/null +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -0,0 +1,158 @@ +""" +3D CAD Viewer Window for OsdagBridge. + +- Embeds CustomViewer3d +- Calls CAD generator +""" + +import sys + +from PySide6.QtWidgets import ( + QApplication, + QMainWindow, + QWidget, + QVBoxLayout +) + +from OCC.Core.Quantity import Quantity_Color, Quantity_TOC_RGB + +# CAD generator +from osdagbridge.core.bridge_types.plate_girder.cad_generator import ( + PlateGirderCADGenerator +) + +# Custom 3D Viewer +from osdagbridge.desktop.ui.utils.custom_3dviewer import CustomViewer3d + + +# MAIN WINDOW + +class CAD3DWindow(QMainWindow): + """ + Main 3D CAD window for OsdagBridge. + """ + + def __init__(self, parent=None): + super().__init__(parent) + + self.setWindowTitle("OsdagBridge 3D CAD Viewer") + self.resize(1200, 800) + + # CAD generator + self.generator = PlateGirderCADGenerator() + + # UI setup + self.setup_ui() + self.setup_viewer() + + # Load initial CAD + self.load_bridge() + + # UI SETUP + + def setup_ui(self): + central_widget = QWidget(self) + self.setCentralWidget(central_widget) + + self.layout = QVBoxLayout(central_widget) + self.layout.setContentsMargins(0, 0, 0, 0) + + def setup_viewer(self): + self.viewer = CustomViewer3d(self) + self.viewer.setMouseTracking(True) + + # Initialize OCC driver + self.viewer.InitDriver() + + self.viewer.context = self.viewer._display.Context + self.viewer.view = self.viewer._display.View + + self.layout.addWidget(self.viewer) + + # CAD DISPLAY + + def load_bridge(self): + """ + Generate and display bridge CAD. + """ + cad_data = self.generator.generate() + display = self.viewer._display + + if hasattr(self.viewer, "cleanup_for_new_model"): + self.viewer.cleanup_for_new_model() + display.EraseAll() + + # Colors + GIRDER_COLOR = Quantity_Color(72/255, 72/255, 54/255, Quantity_TOC_RGB) + STIFFENER_COLOR = Quantity_Color(30/255, 30/255, 30/255, Quantity_TOC_RGB) + DECK_COLOR = Quantity_Color(180/255, 180/255, 180/255, Quantity_TOC_RGB) + BARRIER_COLOR = Quantity_Color(120/255, 120/255, 120/255, Quantity_TOC_RGB) + BRACING_COLOR = Quantity_Color(60/255, 60/255, 60/255, Quantity_TOC_RGB) + + # Girders + for g in cad_data.get("girders", []): + display.DisplayShape(g, color=GIRDER_COLOR, update=False) + + # Stiffeners + for s in cad_data.get("stiffeners", []): + display.DisplayShape(s, color=STIFFENER_COLOR, update=False) + + # Cross bracings + for b in cad_data.get("cross_bracings", []): + display.DisplayShape(b, color=BRACING_COLOR, update=False) + + # Deck + display.DisplayShape( + cad_data["deck_slab"], + color=DECK_COLOR, + update=False + ) + # Deck textures + for tex in cad_data.get("deck_textures", []): + display.DisplayShape( + tex, + color=Quantity_Color(0.2,0.2,0.2, Quantity_TOC_RGB), + update=False + ) + + # Crash barriers + for cb in cad_data.get("crash_barriers", []): + display.DisplayShape(cb, color=BARRIER_COLOR, update=False) + + # Median + for mb in cad_data.get("median_barriers", []): + display.DisplayShape(mb, color=BARRIER_COLOR, update=False) + + # Railings + for r in cad_data.get("railings", []): + display.DisplayShape(r, color=BARRIER_COLOR, update=False) + + # View setup (Osdag standard) + display.View_Iso() + display.FitAll() + + if hasattr(self.viewer, "display_view_cube"): + self.viewer.display_view_cube() + + # REGENERATION + + def regenerate_bridge(self): + """ + Regenerate CAD (used when parameters change). + """ + self.load_bridge() + + +# ENTRY POINT + +def main(): + app = QApplication(sys.argv) + + win = CAD3DWindow() + win.show() + + sys.exit(app.exec()) + + +if __name__ == "__main__": + main() From 6493b77515c37647952ce48fe578c285f4b1440a Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 15 Jan 2026 01:05:35 +0530 Subject: [PATCH 010/225] Add 3D CAD viewer window using CustomViewer3d --- .../desktop/ui/utils/custom_3dviewer.py | 391 ++++++++++++++++++ 1 file changed, 391 insertions(+) create mode 100644 src/osdagbridge/desktop/ui/utils/custom_3dviewer.py diff --git a/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py b/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py new file mode 100644 index 000000000..c7b22b695 --- /dev/null +++ b/src/osdagbridge/desktop/ui/utils/custom_3dviewer.py @@ -0,0 +1,391 @@ +""" +Custom 3D CAD Viewer with stable hover highlighting for models and ViewCube. +""" +from PySide6.QtCore import QTimer, QTime, Qt +from PySide6.QtWidgets import QToolTip, QApplication +from OCC.Display.backend import load_backend + +# from osdag_gui.__config__ import CAD_BACKEND +try: + from osdag_gui.__config__ import CAD_BACKEND +except ImportError: + CAD_BACKEND = "OCC" + + +load_backend('pyside6') + +from OCC.Display.qtDisplay import qtViewer3d +from OCC.Core.AIS import AIS_ViewCube +from OCC.Core.Prs3d import Prs3d_DatumAspect, Prs3d_Drawer +from OCC.Core.Quantity import ( + Quantity_Color, + Quantity_NOC_WHITE, + Quantity_NOC_GRAY50, + Quantity_NOC_BLACK, + Quantity_NOC_CYAN, +) +from OCC.Core.V3d import V3d_Zpos +from OCC.Core.Aspect import Aspect_GT_Rectangular, Aspect_GDM_Lines + + +class CustomViewer3d(qtViewer3d): + def __init__(self, parent=None): + super().__init__(parent) + + self.context = None + self.view = None + + self.model_ais_objects = {} + self.model_hover_labels = {} + + self.current_hovered_model = None + self.current_highlighted_ais_list = [] + + self.hover_timer = QTimer(self) + self.hover_timer.setSingleShot(True) + self.hover_timer.timeout.connect(self.show_tooltip) + self.hover_position = None + + # ViewCube interaction state + self.view_cube = None + self.view_cube_active = False + self.is_interacting_with_cube = False + self.mouse_press_pos = None + self.mouse_press_time = 0 + + # ------------------------------------------------------------------ + # Mouse Move Event (FIXED) + # ------------------------------------------------------------------ + def mouseMoveEvent(self, event): + if not self.context or not self.view: + super().mouseMoveEvent(event) + return + + if self.is_interacting_with_cube: + super().mouseMoveEvent(event) + return + + try: + pixel_ratio = self.devicePixelRatioF() + x = int(event.position().x() * pixel_ratio) + y = int(event.position().y() * pixel_ratio) + + self.context.MoveTo(x, y, self.view, True) + + hovered_model = None + + if self.context.HasDetected(): + detected = self.context.DetectedInteractive() + + # ------------------------------------------------------ + # VIEW CUBE HOVER (STABLE – NO FLICKER) + # ------------------------------------------------------ + if self.view_cube and detected == self.view_cube: + if not self.view_cube_active: + self.context.SetAutomaticHilight(True) + self.view_cube_active = True + return + + # ------------------------------------------------------ + # LEFT VIEW CUBE → CLEANUP + # ------------------------------------------------------ + if self.view_cube_active: + self.context.SetAutomaticHilight(False) + self.view_cube_active = False + try: + self.context.Unhilight(self.view_cube, True) + except: + pass + + # ------------------------------------------------------ + # STANDARD MODEL HIGHLIGHTING + # ------------------------------------------------------ + for model_name, ais_list in self.model_ais_objects.items(): + for ais in ais_list: + if detected == ais: + hovered_model = model_name + break + if hovered_model: + break + + objects_to_highlight = [] + + if hovered_model in ("Bolt", "Nut"): + objects_to_highlight.extend(self.model_ais_objects.get("Bolt", [])) + objects_to_highlight.extend(self.model_ais_objects.get("Nut", [])) + elif detected: + objects_to_highlight.append(detected) + + if set(objects_to_highlight) != set(self.current_highlighted_ais_list): + for obj in self.current_highlighted_ais_list: + try: + self.context.Unhilight(obj, False) + except: + pass + + self.current_highlighted_ais_list = objects_to_highlight + + for obj in self.current_highlighted_ais_list: + try: + self.context.HilightWithColor( + obj, self.context.HighlightStyle(), False + ) + except: + pass + + self.view.Redraw() + + else: + # Nothing detected → cleanup + if self.view_cube_active: + self.context.SetAutomaticHilight(False) + self.view_cube_active = False + try: + self.context.Unhilight(self.view_cube, True) + except: + pass + + if self.current_highlighted_ais_list: + for obj in self.current_highlighted_ais_list: + try: + self.context.Unhilight(obj, False) + except: + pass + self.current_highlighted_ais_list = [] + self.view.Redraw() + + self.hover_position = event.globalPosition().toPoint() + if hovered_model != self.current_hovered_model: + self.current_hovered_model = hovered_model + self.hover_timer.start(100) + elif hovered_model is None: + QToolTip.hideText() + + except Exception as e: + print(f"mouseMoveEvent error: {e}") + QToolTip.hideText() + + super().mouseMoveEvent(event) + + # ------------------------------------------------------------------ + # Tooltip + # ------------------------------------------------------------------ + def show_tooltip(self): + if ( + self.current_hovered_model + and self.current_hovered_model in self.model_hover_labels + and self.hover_position + ): + QToolTip.showText( + self.hover_position, + self.model_hover_labels[self.current_hovered_model], + self, + ) + + # ------------------------------------------------------------------ + # Leave Event + # ------------------------------------------------------------------ + def leaveEvent(self, event): + self.hover_timer.stop() + self.current_hovered_model = None + + if self.view_cube_active: + self.context.SetAutomaticHilight(False) + self.view_cube_active = False + try: + self.context.Unhilight(self.view_cube, True) + except: + pass + + if self.current_highlighted_ais_list: + for obj in self.current_highlighted_ais_list: + try: + self.context.Unhilight(obj, False) + except: + pass + self.current_highlighted_ais_list = [] + self.view.Redraw() + + QToolTip.hideText() + + # restore holding cursor so cursor can update + self.unsetCursor() + QApplication.restoreOverrideCursor() + self.releaseMouse() + super().leaveEvent(event) + + def cleanup_for_new_model(self): + """ + Clean up all internal state before displaying a new model. + This prevents memory corruption from stale OCC object references. + """ + import gc + + # Reset view cube state + if hasattr(self, 'view_cube') and self.view_cube: + try: + # Try to remove from context if possible + if self.context: + try: + self.context.Remove(self.view_cube, False) + except Exception: + pass # May already be removed by EraseAll + except Exception: + pass + self.view_cube = None + + # Reset View Cube interaction state + self.view_cube_active = False + self.is_interacting_with_cube = False + + # Clear highlighted objects list + if self.current_highlighted_ais_list and self.context: + for obj in self.current_highlighted_ais_list: + try: + self.context.Unhilight(obj, False) + except Exception: + pass + self.current_highlighted_ais_list = [] + elif self.current_highlighted_ais_list: + # Context not available, just clear the list + self.current_highlighted_ais_list = [] + + self.current_highlighted_owner = None + self.current_hovered_model = None + + # Clear the model AIS objects dictionary + self.model_ais_objects.clear() + + # Clear hover labels + self.model_hover_labels.clear() + + # Force garbage collection to clean up OCC shapes + gc.collect() + + # ------------------------------------------------------------------ + # View Cube Display + # ------------------------------------------------------------------ + + def display_view_cube(self): + import gc + + try: + # Force garbage collection before OCC operations to prevent heap corruption + gc.collect() + + # Remove existing view cube if it exists using safe method + if hasattr(self, 'view_cube') and self.view_cube: + try: + self.context.Remove(self.view_cube, False) + except Exception as remove_error: + # Object may have been displayed in a different context or already removed + # Just log and continue - we'll create a fresh one + print(f"Note: Could not remove old ViewCube (may already be removed): {remove_error}") + self.view_cube = None + + self.view_cube = AIS_ViewCube() + self.view_cube.SetSize(45) + self.view_cube.SetFontHeight(12) + self.view_cube.SetAxesLabels("", "", "") + self.view_cube.SetDrawAxes(False) + + # Make corner and edge pieces larger for better interaction + self.view_cube.SetBoxFacetExtension(12) + + # Configure Highlight Attributes + highlight_drawer = Prs3d_Drawer() + highlight_drawer.SetColor(Quantity_Color(Quantity_NOC_CYAN)) + self.view_cube.SetHilightAttributes(highlight_drawer) + + # Style + drawer = self.view_cube.Attributes() + drawer.SetDatumAspect(Prs3d_DatumAspect()) + + # Colors + color_white = Quantity_Color(Quantity_NOC_WHITE) + color_gray = Quantity_Color(Quantity_NOC_GRAY50) + color_black = Quantity_Color(Quantity_NOC_BLACK) + + self.view_cube.SetColor(color_white) + self.view_cube.SetBoxColor(color_gray) + self.view_cube.SetTextColor(color_black) + + # Display + self.context.Display(self.view_cube, False) + + try: + from OCC.Core.Graphic3d import Graphic3d_TransformPers, Graphic3d_TMF_TriedronPers, Graphic3d_Vec2i + from OCC.Core.Aspect import Aspect_TOTP_RIGHT_UPPER + + # Create transform persistence anchored to top-right corner + offset = Graphic3d_Vec2i(60, 70) + transform_pers = Graphic3d_TransformPers(Graphic3d_TMF_TriedronPers, Aspect_TOTP_RIGHT_UPPER, offset) + self.view_cube.SetTransformPersistence(transform_pers) + except Exception as e: + # Fallback to old method if Graphic3d classes not available + print(f"Using fallback positioning: {e}") + try: + # Try 2D persistence as fallback + from OCC.Core.Graphic3d import Graphic3d_TransformPers, Graphic3d_TMF_2d + from OCC.Core.gp import gp_Pnt2d + # Try explicit coordinates if corner persistence fails + offset = gp_Pnt2d(850, 40) + transform_pers = Graphic3d_TransformPers(Graphic3d_TMF_2d, offset) + self.view_cube.SetTransformPersistence(transform_pers) + except: + self.view_cube.SetTransformPersistence( + V3d_Zpos, + Aspect_GT_Rectangular, + Aspect_GDM_Lines + ) + + self.view.Redraw() + except Exception as e: + print(f"Error displaying View Cube: {e}") + + # ------------------------------------------------------------------ + # Mouse Press + # ------------------------------------------------------------------ + def mousePressEvent(self, event): + if not self.context or not self.view: + super().mousePressEvent(event) + return + + pixel_ratio = self.devicePixelRatioF() + x = int(event.position().x() * pixel_ratio) + y = int(event.position().y() * pixel_ratio) + + self.context.MoveTo(x, y, self.view, True) + + if self.context.HasDetected(): + if self.context.DetectedInteractive() == self.view_cube: + self.is_interacting_with_cube = True + self.mouse_press_pos = event.position() + self.mouse_press_time = QTime.currentTime().msecsSinceStartOfDay() + + super().mousePressEvent(event) + + # ------------------------------------------------------------------ + # Mouse Release + # ------------------------------------------------------------------ + def mouseReleaseEvent(self, event): + if self.is_interacting_with_cube: + current_time = QTime.currentTime().msecsSinceStartOfDay() + dt = current_time - self.mouse_press_time + dist = (event.position() - self.mouse_press_pos).manhattanLength() + + if dt < 500 and dist < 10: + super().mouseReleaseEvent(event) + else: + self.context.MoveTo(-1, -1, self.view, True) + super().mouseReleaseEvent(event) + + self.is_interacting_with_cube = False + self.mouse_press_pos = None + return + + # restore holding cursor so cursor can update + self.unsetCursor() + QApplication.restoreOverrideCursor() + self.releaseMouse() + super().mouseReleaseEvent(event) From a4617822ce45f9435523f1a9b12c45a84b95718a Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 15 Jan 2026 01:06:46 +0530 Subject: [PATCH 011/225] Introduce class-based PlateGirder CAD generator --- .../plate_girder/cad_generator.py | 332 +++++++++--------- 1 file changed, 164 insertions(+), 168 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index f63f32a55..f4195ca55 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -1,10 +1,9 @@ """ CAD generator for Plate Girder Bridge. -- Returns assembled CAD components """ - +# Builder imports from osdagbridge.core.bridge_components.super_structure.plate_girder.builder import ( build_girders @@ -30,186 +29,183 @@ build_cross_bracings ) -# GIRDERS PARAMETERS - -span_length_L = 25000 - -girder_section_d = 900 -girder_section_bf = 500 -girder_section_tf = 260 -girder_section_tw = 100 - -num_girders = 5 -girder_spacing = 2750 - -# DECK PARAMETERS - -carriageway_width = 12000 -deck_thickness = 400 - -footpath_config = "LEFT" # NONE / LEFT / RIGHT / BOTH -crash_barrier_base_width = 600 -footpath_width = 1500 -railing_width = 300 - -# CRASH BARRIER PARAMETERS - -crash_barrier_width = 175 -crash_barrier_height = 900 - -# MEDIAN PARAMETERS - -enable_median = True -median_gap = 800 - -# RAILING PARAMETERS - -railing_height = 1200 -rail_count = 3 - -# STIFFENER PARAMETERS -stiffener_width = 200 -stiffener_length = 10 - -# CROSS BRACING PARAMETERS - -cross_bracing_spacing = 4000 -cross_bracing_thickness = 5 - -bracing_type = "K" # "X" or "K" - -# X bracing option: "NONE" | "LOWER" | "UPPER" | "BOTH" -x_bracket_option = "BOTH" - -# K bracing option -k_top_bracket = True +# CAD GENERATOR CLASS + +class PlateGirderCADGenerator: + """ + Plate Girder Bridge CAD Generator. + + Holds parameters and generates assembled CAD geometry. + """ + + def __init__(self): + + # GIRDERS PARAMETERS + self.span_length_L = 25000 + + self.girder_section_d = 900 + self.girder_section_bf = 500 + self.girder_section_tf = 260 + self.girder_section_tw = 100 + + self.num_girders = 5 + self.girder_spacing = 2750 + + # DECK PARAMETERS + self.carriageway_width = 12000 + self.deck_thickness = 400 + + self.footpath_config = "LEFT" # NONE / LEFT / RIGHT / BOTH + self.crash_barrier_base_width = 600 + self.footpath_width = 1500 + self.railing_width = 300 + + # CRASH BARRIER PARAMETERS + self.crash_barrier_width = 175 + self.crash_barrier_height = 900 + + # MEDIAN PARAMETERS + self.enable_median = True + self.median_gap = 800 + + # RAILING PARAMETERS + self.railing_height = 1200 + self.rail_count = 3 + + # STIFFENER PARAMETERS + self.stiffener_width = 200 + self.stiffener_length = 10 + + # CROSS BRACING PARAMETERS + self.cross_bracing_spacing = 4000 + self.cross_bracing_thickness = 5 + + self.bracing_type = "K" # "X" or "K" + self.x_bracket_option = "BOTH" + self.k_top_bracket = True + + self.cross_bracing_section_type = "CHANNEL" + self.cross_bracing_section_dims = { + "depth": 100, + "flange_width": 50, + "web_thickness": 5, + "flange_thickness": 7 + } + + # MAIN CAD GENERATION + + def generate(self): + """ + Generate full bridge CAD. + + Returns + ------- + dict + Dictionary of assembled CAD components + """ + + # Plate girder system + girders, stiffeners = build_girders( + span_length_L=self.span_length_L, + girder_section_d=self.girder_section_d, + girder_section_bf=self.girder_section_bf, + girder_section_tf=self.girder_section_tf, + girder_section_tw=self.girder_section_tw, + num_girders=self.num_girders, + girder_spacing=self.girder_spacing, + stiffener_width=self.stiffener_width, + stiffener_length=self.stiffener_length + ) -# ---- SECTION SELECTION (NUMERIC ONLY) ---- + # Cross bracing system + cross_bracings = build_cross_bracings( + span_length_L=self.span_length_L, + num_girders=self.num_girders, + girder_spacing=self.girder_spacing, + girder_depth=self.girder_section_d, + flange_thickness=self.girder_section_tf, + flange_width=self.girder_section_bf, + + bracing_type=self.bracing_type, + section_type=self.cross_bracing_section_type, + section_dims=self.cross_bracing_section_dims, + thickness=self.cross_bracing_thickness, + + panel_spacing=self.cross_bracing_spacing, + bracket_option=self.x_bracket_option, + top_bracket=self.k_top_bracket + ) -cross_bracing_section_type = "CHANNEL" + # Deck system + deck_out = build_deck( + span_length_L=self.span_length_L, + girder_section_d=self.girder_section_d, + deck_thickness=self.deck_thickness, + + footpath_config=self.footpath_config, + carriageway_width=self.carriageway_width, + crash_barrier_base_width=self.crash_barrier_base_width, + footpath_width=self.footpath_width, + railing_width=self.railing_width + ) -#CHANNEL – ISMC 100 -cross_bracing_section_dims = { - "depth": 100, - "flange_width": 50, - "web_thickness": 5, - "flange_thickness": 7 -} + # Crash barrier system + crash_barriers = build_crash_barriers( + span_length_L=self.span_length_L, + deck_top_z=deck_out["deck_top_z"], -# # If you want DOUBLE_ANGLE instead, comment above and use: -# cross_bracing_section_type = "DOUBLE_ANGLE" -# cross_bracing_section_dims = { -# "leg_h": 75, -# "leg_w": 75, -# "connection_type": "SHORTER_LEG" -# } + footpath_config=self.footpath_config, + carriageway_width=self.carriageway_width, + crash_barrier_width=self.crash_barrier_width, + crash_barrier_height=self.crash_barrier_height, + crash_barrier_base_width=self.crash_barrier_base_width, -def generate_cad(): + footpath_width=self.footpath_width, + railing_width=self.railing_width + ) - # Plate girder system - girders, stiffeners = build_girders( - span_length_L=span_length_L, - girder_section_d=girder_section_d, - girder_section_bf=girder_section_bf, - girder_section_tf=girder_section_tf, - girder_section_tw=girder_section_tw, - num_girders=num_girders, - girder_spacing=girder_spacing, - stiffener_width=stiffener_width, - stiffener_length=stiffener_length - ) + # Median system + median_barriers = [] + if self.enable_median: + median_barriers = build_median( + span_length=self.span_length_L, + deck_top_z=deck_out["deck_top_z"], + carriageway_center_y=deck_out["carriageway_center_y"], - # Cross bracing system - cross_bracings = build_cross_bracings( - span_length_L=span_length_L, - num_girders=num_girders, - girder_spacing=girder_spacing, - girder_depth=girder_section_d, - flange_thickness=girder_section_tf, - flange_width=girder_section_bf, + crash_barrier_width=self.crash_barrier_width, + crash_barrier_height=self.crash_barrier_height, + crash_barrier_base_width=self.crash_barrier_base_width, - bracing_type=bracing_type, - section_type=cross_bracing_section_type, - section_dims=cross_bracing_section_dims, - thickness=cross_bracing_thickness, + median_gap=self.median_gap + ) - panel_spacing=cross_bracing_spacing, - bracket_option=x_bracket_option, - top_bracket=k_top_bracket - ) + # Railing system + railings = build_railings( + span_length=self.span_length_L, + deck_top_z=deck_out["deck_top_z"], + total_deck_width=deck_out["total_deck_width"], - # Deck system - deck_out = build_deck( - span_length_L=span_length_L, - girder_section_d=girder_section_d, - deck_thickness=deck_thickness, + footpath_config=self.footpath_config, - footpath_config=footpath_config, - carriageway_width=carriageway_width, - crash_barrier_base_width=crash_barrier_base_width, - footpath_width=footpath_width, - railing_width=railing_width - ) + railing_width=self.railing_width, + railing_height=self.railing_height, + rail_count=self.rail_count + ) - # Crash barrier system - crash_barriers = build_crash_barriers( - span_length_L=span_length_L, - deck_top_z=deck_out["deck_top_z"], - - footpath_config=footpath_config, - carriageway_width=carriageway_width, - - crash_barrier_width=crash_barrier_width, - crash_barrier_height=crash_barrier_height, - crash_barrier_base_width=crash_barrier_base_width, - - footpath_width=footpath_width, - railing_width=railing_width - ) - - # Median system - median_barriers = [] - - if enable_median: - median_barriers = build_median( - span_length=span_length_L, - deck_top_z=deck_out["deck_top_z"], - carriageway_center_y=deck_out["carriageway_center_y"], + return { + "girders": girders, + "stiffeners": stiffeners, + "cross_bracings": cross_bracings, - crash_barrier_width=crash_barrier_width, - crash_barrier_height=crash_barrier_height, - crash_barrier_base_width=crash_barrier_base_width, + "deck_slab": deck_out["deck_slab"], + "deck_textures": deck_out["deck_textures"], + "deck_top_z": deck_out["deck_top_z"], + "total_deck_width": deck_out["total_deck_width"], - median_gap=median_gap - ) + "crash_barriers": crash_barriers, + "median_barriers": median_barriers, + "railings": railings + } - # Railing system - railings = build_railings( - span_length=span_length_L, - deck_top_z=deck_out["deck_top_z"], - total_deck_width=deck_out["total_deck_width"], - - footpath_config=footpath_config, - - railing_width=railing_width, - railing_height=railing_height, - rail_count=rail_count - ) - - # Final output - return { - "girders": girders, - "stiffeners": stiffeners, - "cross_bracings": cross_bracings, - - "deck_slab": deck_out["deck_slab"], - "deck_textures": deck_out["deck_textures"], - "deck_top_z": deck_out["deck_top_z"], - "total_deck_width": deck_out["total_deck_width"], - - "crash_barriers": crash_barriers, - "median_barriers": median_barriers, - "railings": railings - } From f8d413970d0b6809239173e2a52f72f6b98857e0 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sat, 17 Jan 2026 01:57:14 +0530 Subject: [PATCH 012/225] Add zoom in/out buttons to CAD viewer --- src/osdagbridge/desktop/ui/cad_3d.py | 259 +++++++++++++++++++++------ 1 file changed, 204 insertions(+), 55 deletions(-) diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index a35a72644..d12c1658a 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -11,22 +11,23 @@ QApplication, QMainWindow, QWidget, - QVBoxLayout + QVBoxLayout, + QPushButton ) +from PySide6.QtCore import QTimer, Qt from OCC.Core.Quantity import Quantity_Color, Quantity_TOC_RGB +from OCC.Display.backend import load_backend # CAD generator from osdagbridge.core.bridge_types.plate_girder.cad_generator import ( PlateGirderCADGenerator ) -# Custom 3D Viewer +# Custom 3D Viewer from osdagbridge.desktop.ui.utils.custom_3dviewer import CustomViewer3d -# MAIN WINDOW - class CAD3DWindow(QMainWindow): """ Main 3D CAD window for OsdagBridge. @@ -41,14 +42,18 @@ def __init__(self, parent=None): # CAD generator self.generator = PlateGirderCADGenerator() - # UI setup - self.setup_ui() - self.setup_viewer() + self.generator.model_data = self.generator.generate() - # Load initial CAD - self.load_bridge() + # Internal CAD state + self.viewer = None + self.display = None + self._cad_init_pending = True + + # UI + CAD setup + self.setup_ui() + self.init_display() - # UI SETUP + # -UI SETUP def setup_ui(self): central_widget = QWidget(self) @@ -57,100 +62,244 @@ def setup_ui(self): self.layout = QVBoxLayout(central_widget) self.layout.setContentsMargins(0, 0, 0, 0) - def setup_viewer(self): + # CAD INITIALIZATION + + def init_display(self): + """ + CAD initialization. + + - Locks pythonOCC backend + - Creates CustomViewer3d + - Defers InitDriver for safety + """ + + load_backend("pyside6") + self.viewer = CustomViewer3d(self) self.viewer.setMouseTracking(True) + self.layout.addWidget(self.viewer) - # Initialize OCC driver - self.viewer.InitDriver() + QTimer.singleShot(0, self._deferred_init_driver) - self.viewer.context = self.viewer._display.Context - self.viewer.view = self.viewer._display.View + def _deferred_init_driver(self): + if not self._cad_init_pending: + return - self.layout.addWidget(self.viewer) + self.viewer.InitDriver() + self._cad_init_pending = False - # CAD DISPLAY + self._complete_cad_init() + self.load_bridge() - def load_bridge(self): + def _complete_cad_init(self): """ - Generate and display bridge CAD. + Complete CAD setup after InitDriver. + REQUIRED for hover, selection, view cube. """ - cad_data = self.generator.generate() - display = self.viewer._display + + self.display = self.viewer._display + + self.viewer.context = self.display.Context + self.viewer.view = self.display.View + + self.viewer.context.SetAutomaticHilight(False) + + if hasattr(self.viewer, "display_view_cube"): + self.viewer.display_view_cube() + + # ADD ZOOM BUTTONS + self.create_cad_view_controls() + + def _is_display_ready(self): + return self.display is not None and not self._cad_init_pending + + # CAD DISPLAY + def load_bridge(self): + if not self._is_display_ready(): + return + + cad_data = self.generator.model_data + display = self.display + context = self.viewer.context if hasattr(self.viewer, "cleanup_for_new_model"): self.viewer.cleanup_for_new_model() display.EraseAll() - # Colors + # ---------- COLORS ---------- GIRDER_COLOR = Quantity_Color(72/255, 72/255, 54/255, Quantity_TOC_RGB) STIFFENER_COLOR = Quantity_Color(30/255, 30/255, 30/255, Quantity_TOC_RGB) DECK_COLOR = Quantity_Color(180/255, 180/255, 180/255, Quantity_TOC_RGB) BARRIER_COLOR = Quantity_Color(120/255, 120/255, 120/255, Quantity_TOC_RGB) BRACING_COLOR = Quantity_Color(60/255, 60/255, 60/255, Quantity_TOC_RGB) - # Girders - for g in cad_data.get("girders", []): - display.DisplayShape(g, color=GIRDER_COLOR, update=False) + # ---------- HELPER ---------- + def display_and_register(shapes, key, label, color): + if not shapes: + return - # Stiffeners - for s in cad_data.get("stiffeners", []): - display.DisplayShape(s, color=STIFFENER_COLOR, update=False) + if not isinstance(shapes, list): + shapes = [shapes] - # Cross bracings - for b in cad_data.get("cross_bracings", []): - display.DisplayShape(b, color=BRACING_COLOR, update=False) + ais_list = [] - # Deck - display.DisplayShape( - cad_data["deck_slab"], - color=DECK_COLOR, - update=False + for shp in shapes: + ais = display.DisplayShape(shp, color=color, update=False) + ais = ais[0] if isinstance(ais, list) else ais + + context.Activate(ais, 0) # REQUIRED for hover + ais_list.append(ais) + + self.viewer.model_ais_objects[key] = ais_list + self.viewer.model_hover_labels[key] = label + + # ---------- DISPLAY + REGISTER ---------- + display_and_register( + cad_data.get("girders", []), + "Girder", + "Girder", + GIRDER_COLOR ) - # Deck textures + + display_and_register( + cad_data.get("stiffeners", []), + "Stiffener", + "Stiffener", + STIFFENER_COLOR + ) + + display_and_register( + cad_data.get("cross_bracings", []), + "Cross Bracing", + "Cross Bracing", + BRACING_COLOR + ) + + display_and_register( + cad_data.get("deck_slab"), + "Deck", + "Deck Slab", + DECK_COLOR + ) + # ---------- DECK TEXTURES (DISPLAY ONLY, NO HOVER) ---------- for tex in cad_data.get("deck_textures", []): display.DisplayShape( tex, - color=Quantity_Color(0.2,0.2,0.2, Quantity_TOC_RGB), + color=Quantity_Color(0.2, 0.2, 0.2, Quantity_TOC_RGB), update=False ) - # Crash barriers - for cb in cad_data.get("crash_barriers", []): - display.DisplayShape(cb, color=BARRIER_COLOR, update=False) - # Median - for mb in cad_data.get("median_barriers", []): - display.DisplayShape(mb, color=BARRIER_COLOR, update=False) + display_and_register( + cad_data.get("crash_barriers", []), + "Crash Barrier", + "Crash Barrier", + BARRIER_COLOR + ) + + display_and_register( + cad_data.get("median_barriers", []), + "Median", + "Median Barrier", + BARRIER_COLOR + ) - # Railings - for r in cad_data.get("railings", []): - display.DisplayShape(r, color=BARRIER_COLOR, update=False) + display_and_register( + cad_data.get("railings", []), + "Railing", + "Railing", + BARRIER_COLOR + ) - # View setup (Osdag standard) + # ---------- FINAL VIEW ---------- display.View_Iso() display.FitAll() if hasattr(self.viewer, "display_view_cube"): self.viewer.display_view_cube() - # REGENERATION + + # ZOOM CONTROLS + + def create_cad_view_controls(self): + """Create zoom buttons below the view cube.""" + + self._view_cube_size = 75 + self._view_cube_margin = 10 + self._zoom_btn_size = 40 + self._zoom_spacing = 6 + + self.zoom_in_btn = QPushButton("+", self.viewer) + self.zoom_in_btn.setFixedSize(self._zoom_btn_size, self._zoom_btn_size) + self.zoom_in_btn.setCursor(Qt.PointingHandCursor) + self.zoom_in_btn.clicked.connect(lambda: self.display.ZoomFactor(1.1)) + self._style_zoom_button(self.zoom_in_btn) + + self.zoom_out_btn = QPushButton("-", self.viewer) + self.zoom_out_btn.setFixedSize(self._zoom_btn_size, self._zoom_btn_size) + self.zoom_out_btn.setCursor(Qt.PointingHandCursor) + self.zoom_out_btn.clicked.connect(lambda: self.display.ZoomFactor(1 / 1.1)) + self._style_zoom_button(self.zoom_out_btn) + + self.zoom_in_btn.show() + self.zoom_out_btn.show() + + self.position_zoom_buttons() + + self._orig_resize_event = self.viewer.resizeEvent + self.viewer.resizeEvent = self._cad_resize_proxy + + def _style_zoom_button(self, btn): + btn.setStyleSheet(""" + QPushButton { + font-size: 20px; + font-weight: bold; + background-color: white; + border: 1px solid #bdbdbd; + } + QPushButton:hover { + background-color: #e6e6e6; + } + QPushButton:pressed { + background-color: #d6d6d6; + } + """) + + def position_zoom_buttons(self): + if not hasattr(self, "zoom_in_btn"): + return + + w = self.viewer.width() + + cube_right = w - self._view_cube_margin + cube_left = cube_right - self._view_cube_size + + cube_bottom = self._view_cube_margin + self._view_cube_size + 30 + + center_x = cube_left + self._view_cube_size // 2 + btn_x = center_x - self._zoom_btn_size // 2 + + btn_y_1 = cube_bottom + self._zoom_spacing + btn_y_2 = btn_y_1 + self._zoom_btn_size + self._zoom_spacing + + self.zoom_in_btn.move(btn_x, btn_y_1) + self.zoom_out_btn.move(btn_x, btn_y_2) + + def _cad_resize_proxy(self, event): + if self._orig_resize_event: + self._orig_resize_event(event) + self.position_zoom_buttons() + def regenerate_bridge(self): - """ - Regenerate CAD (used when parameters change). - """ self.load_bridge() -# ENTRY POINT def main(): app = QApplication(sys.argv) - win = CAD3DWindow() win.show() - sys.exit(app.exec()) From d55c834cf08d8669426a33618827cf6a65023e2f Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sat, 17 Jan 2026 01:57:31 +0530 Subject: [PATCH 013/225] Enable hover labels for CAD components --- .../plate_girder/cad_generator.py | 149 +++++++++++++++++- 1 file changed, 148 insertions(+), 1 deletion(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index f4195ca55..0943ad396 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -3,6 +3,11 @@ """ +from OCC.Core.Quantity import Quantity_Color, Quantity_TOC_RGB, Quantity_NOC_BLACK +from OCC.Core.TopoDS import TopoDS_Shape +from OCC.Core.AIS import AIS_Shape +from OCC.Core.TopAbs import TopAbs_EDGE + # Builder imports from osdagbridge.core.bridge_components.super_structure.plate_girder.builder import ( @@ -30,6 +35,17 @@ ) +KEY_CAD_GIRDER = "Girder" +KEY_CAD_STIFFENER = "Stiffener" +KEY_CAD_CROSS_BRACING = "Cross Bracing" +KEY_CAD_DECK = "Deck" +KEY_CAD_CRASH_BARRIER = "Crash Barrier" +KEY_CAD_RAILING = "Railing" +KEY_CAD_MEDIAN = "Median" +KEY_MODULE_PG = "Plate Girder" + + + # CAD GENERATOR CLASS class PlateGirderCADGenerator: @@ -39,8 +55,9 @@ class PlateGirderCADGenerator: Holds parameters and generates assembled CAD geometry. """ - def __init__(self): + def __init__(self, bridge_type = KEY_MODULE_PG): + self.bridge_type = bridge_type # GIRDERS PARAMETERS self.span_length_L = 25000 @@ -209,3 +226,133 @@ def generate(self): "railings": railings } + def display_3dModel(self, component): + + hover_dict = { + KEY_CAD_GIRDER: "Girder", + KEY_CAD_STIFFENER: "Stiffener", + KEY_CAD_DECK: "Deck", + KEY_CAD_CRASH_BARRIER: "Crash Barrier", + KEY_CAD_RAILING: "Railing", + KEY_CAD_MEDIAN: "Median" + } + + GIRDER_COLOR = Quantity_Color(72/255, 72/255, 54/255, Quantity_TOC_RGB) + STIFFENER_COLOR = Quantity_Color(30/255, 30/255, 30/255, Quantity_TOC_RGB) + DECK_COLOR = Quantity_Color(180/255, 180/255, 180/255, Quantity_TOC_RGB) + BARRIER_COLOR = Quantity_Color(120/255, 120/255, 120/255, Quantity_TOC_RGB) + BRACING_COLOR = Quantity_Color(60/255, 60/255, 60/255, Quantity_TOC_RGB) + RAILING_COLOR = Quantity_Color(120/255, 120/255, 120/255, Quantity_TOC_RGB) + MEDIAN_COLOR = Quantity_Color(120/255, 120/255, 120/255, Quantity_TOC_RGB) + + self.component = component + + if self.component == "Girder": + label = [KEY_CAD_GIRDER, hover_dict.get(KEY_CAD_GIRDER)] + shapes = self.model_data["girders"] + osdag_display_shape(self.display, shapes, color=GIRDER_COLOR, update=True, label=label, canvas=self.cad_widget) + + elif self.component == "Stiffener": + label = [KEY_CAD_STIFFENER, hover_dict.get(KEY_CAD_STIFFENER)] + shapes = self.model_data["stiffeners"] + osdag_display_shape(self.display, shapes, color=STIFFENER_COLOR, update=True, label=label, canvas=self.cad_widget) + + elif self.component == "Cross Bracing": + label = [KEY_CAD_CROSS_BRACING, hover_dict.get(KEY_CAD_CROSS_BRACING)] + shapes = self.model_data["cross_bracings"] + osdag_display_shape(self.display, shapes, color=BRACING_COLOR, update=True, label=label, canvas=self.cad_widget) + + elif self.component == "Deck": + label = [KEY_CAD_DECK, hover_dict.get(KEY_CAD_DECK)] + shapes = self.model_data["deck_slab"] + osdag_display_shape(self.display, shapes, color=DECK_COLOR, update=True, label=label, canvas=self.cad_widget) + + elif self.component == "Crash Barrier": + label = [KEY_CAD_CRASH_BARRIER, hover_dict.get(KEY_CAD_CRASH_BARRIER)] + shapes = self.model_data["crash_barriers"] + osdag_display_shape(self.display, shapes, color=BARRIER_COLOR, update=True, label=label, canvas=self.cad_widget) + + elif self.component == "Railing": + label = [KEY_CAD_RAILING, hover_dict.get(KEY_CAD_RAILING)] + shapes = self.model_data["railings"] + osdag_display_shape(self.display, shapes, color=RAILING_COLOR, update=True, label=label, canvas=self.cad_widget) + + elif self.component == "Median": + label = [KEY_CAD_MEDIAN, hover_dict.get(KEY_CAD_MEDIAN)] + shapes = self.model_data["median_barriers"] + osdag_display_shape(self.display, shapes, color=MEDIAN_COLOR, update=True, label=label, canvas=self.cad_widget) + + +def osdag_display_shape(display, shapes, material=None, texture=None, color=None, transparency=None, update=False, label=[], canvas=None): + """ + Display a shape with edge styling and register with memory manager. + + All shapes and AIS objects are registered with OCCMemoryManager to prevent + Python's garbage collector from freeing them while OCC/OpenGL are using them. + """ + + set_default_edge_style(shapes, display) + ais_object = display.DisplayShape(shapes, material, texture, color, transparency, update=update) + ais = ais_object[0] if isinstance(ais_object, list) else ais_object + + + if canvas.model_ais_objects.get(label[0]) is None: + canvas.model_ais_objects[label[0]] = [ais] + else: + canvas.model_ais_objects[label[0]] += [ais] + + # Activate selection mode for whole entity + display.Context.Activate(ais, 0) + + +def color_the_edges(shp, display, color, width): + """ + Colors the edges of a given shape. + + :param shp: The shape to color (TopoDS_Shape). + :param display: The display context for rendering the shape. + :param color: The color to apply to the edges (Quantity_Color or predefined constant like Quantity_NOC_BLACK). + :param width: The width of the edges. + """ + if not isinstance(shp, TopoDS_Shape): + raise TypeError("The 'shp' parameter must be a valid TopoDS_Shape.") + # shapeList = [] + try: + # Initialize the edge explorer for the given shape + Ex = TopExp_Explorer(shp, TopAbs_EDGE) + # Get the display context + ctx = display.Context + # Iterate over the edges in the shape + while Ex.More(): + # Extract the current edge + aEdge = topods.Edge(Ex.Current()) + + # Create an AIS_Shape for the edge + ais_shape = AIS_Shape(aEdge) + # Set the color + ais_shape.SetColor(color) + # Display the edge + ctx.Display(ais_shape, False) + + # Store the edge for tracking + # shapeList.append(aEdge) + + # Move to the next edge + Ex.Next() + + except Exception as e: + print(f"An error occurred: {e}") + traceback.print_exc() # This will print the full traceback + + raise RuntimeError(f"Error while coloring edges: {e}") + + # return shapeList + + + +def set_default_edge_style(shp, display): + try: + color_the_edges(shp, display, Quantity_Color(Quantity_NOC_BLACK), 0.5) + except Exception as e: + # Edge styling is optional - don't crash if it fails + pass From 803388716bb17cbf197b98b538d61b501cce9804 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 27 Jan 2026 18:30:02 +0530 Subject: [PATCH 014/225] Implement checkbox-based component isolation in 3D CAD viewer --- src/osdagbridge/desktop/ui/cad_3d.py | 158 +++++++++++++++++++++++++-- 1 file changed, 150 insertions(+), 8 deletions(-) diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index d12c1658a..1abc49c3a 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -12,6 +12,8 @@ QMainWindow, QWidget, QVBoxLayout, + QHBoxLayout, + QCheckBox, QPushButton ) from PySide6.QtCore import QTimer, Qt @@ -53,7 +55,7 @@ def __init__(self, parent=None): self.setup_ui() self.init_display() - # -UI SETUP + # UI SETUP def setup_ui(self): central_widget = QWidget(self) @@ -62,13 +64,18 @@ def setup_ui(self): self.layout = QVBoxLayout(central_widget) self.layout.setContentsMargins(0, 0, 0, 0) + # Component selector + self.component_selector = BridgeComponentCheckbox(self) + self.component_selector.hide() + self.layout.addWidget(self.component_selector) + + # CAD INITIALIZATION def init_display(self): """ CAD initialization. - - Locks pythonOCC backend - Creates CustomViewer3d - Defers InitDriver for safety """ @@ -126,14 +133,14 @@ def load_bridge(self): self.viewer.cleanup_for_new_model() display.EraseAll() - # ---------- COLORS ---------- + # COLORS GIRDER_COLOR = Quantity_Color(72/255, 72/255, 54/255, Quantity_TOC_RGB) STIFFENER_COLOR = Quantity_Color(30/255, 30/255, 30/255, Quantity_TOC_RGB) DECK_COLOR = Quantity_Color(180/255, 180/255, 180/255, Quantity_TOC_RGB) BARRIER_COLOR = Quantity_Color(120/255, 120/255, 120/255, Quantity_TOC_RGB) BRACING_COLOR = Quantity_Color(60/255, 60/255, 60/255, Quantity_TOC_RGB) - # ---------- HELPER ---------- + # HELPER def display_and_register(shapes, key, label, color): if not shapes: return @@ -153,7 +160,10 @@ def display_and_register(shapes, key, label, color): self.viewer.model_ais_objects[key] = ais_list self.viewer.model_hover_labels[key] = label - # ---------- DISPLAY + REGISTER ---------- + # DISPLAY + REGISTER + + self.viewer.model_ais_objects = {} + display_and_register( cad_data.get("girders", []), "Girder", @@ -181,13 +191,18 @@ def display_and_register(shapes, key, label, color): "Deck Slab", DECK_COLOR ) - # ---------- DECK TEXTURES (DISPLAY ONLY, NO HOVER) ---------- + # DECK TEXTURES (DISPLAY ONLY, NO HOVER) + self.viewer.deck_texture_ais = [] + for tex in cad_data.get("deck_textures", []): - display.DisplayShape( + ais = display.DisplayShape( tex, color=Quantity_Color(0.2, 0.2, 0.2, Quantity_TOC_RGB), update=False ) + ais = ais[0] if isinstance(ais, list) else ais + self.viewer.deck_texture_ais.append(ais) + display_and_register( @@ -211,7 +226,7 @@ def display_and_register(shapes, key, label, color): BARRIER_COLOR ) - # ---------- FINAL VIEW ---------- + # FINAL VIEW display.View_Iso() display.FitAll() @@ -219,6 +234,8 @@ def display_and_register(shapes, key, label, color): self.viewer.display_view_cube() + self.component_selector.show() + # ZOOM CONTROLS def create_cad_view_controls(self): @@ -290,12 +307,137 @@ def _cad_resize_proxy(self, event): self._orig_resize_event(event) self.position_zoom_buttons() + def show_full_model(self): + """ + Display all bridge components + """ + if not self._is_display_ready(): + return + + context = self.viewer.context + + # Show all structural components + for ais_list in self.viewer.model_ais_objects.values(): + for ais in ais_list: + context.Display(ais, False) + + # Show deck textures + for ais in getattr(self.viewer, "deck_texture_ais", []): + context.Display(ais, False) + + self.display.FitAll() + self.display.Repaint() + + + def isolate_component(self, component_key): + """ + Isolate a single bridge component using AIS visibility + Deck textures shown ONLY for Deck + """ + if not self._is_display_ready(): + return + + context = self.viewer.context + + # Hide all structural components + for ais_list in self.viewer.model_ais_objects.values(): + for ais in ais_list: + context.Erase(ais, False) + + # Hide deck textures by default + for ais in getattr(self.viewer, "deck_texture_ais", []): + context.Erase(ais, False) + + # Show selected component + for ais in self.viewer.model_ais_objects.get(component_key, []): + context.Display(ais, False) + + # Show deck textures ONLY if Deck is selected + if component_key == "Deck": + for ais in getattr(self.viewer, "deck_texture_ais", []): + context.Display(ais, False) + + self.display.FitAll() + self.display.Repaint() + + def regenerate_bridge(self): self.load_bridge() +class BridgeComponentCheckbox(QWidget): + """ + Horizontal component selector + """ + def __init__(self, parent: CAD3DWindow): + super().__init__(parent) + self.parent = parent + + self.setObjectName("cad_component_selector") + self.setFixedHeight(30) + + layout = QHBoxLayout(self) + layout.setContentsMargins(12, 4, 12, 4) + layout.setSpacing(16) + + layout.addStretch() + + self.checkboxes = [] + + + self.components = [ + ("Model", None), + ("Girder", "Girder"), + ("Deck", "Deck"), + ("Cross Bracing", "Cross Bracing"), + ("Crash Barrier", "Crash Barrier"), + ("Median", "Median"), + ("Railing", "Railing"), + ] + + for label, key in self.components: + cb = QCheckBox(label, self) + cb.setObjectName(label) + cb.setCursor(Qt.PointingHandCursor) + + cb.clicked.connect( + lambda checked, k=key, c=cb: self._on_click(k, c, checked) + ) + + layout.addWidget(cb) + self.checkboxes.append(cb) + + layout.addStretch() + + # Default selection → Model + self.checkboxes[0].setChecked(True) + + def _on_click(self, component_key, clicked_cb, checked): + """ + Enforce single selection (Osdag behavior) + """ + if checked: + # Uncheck all others + for cb in self.checkboxes: + if cb != clicked_cb: + cb.blockSignals(True) + cb.setChecked(False) + cb.blockSignals(False) + + # if none is selected -> then full model + if component_key is None: + self.parent.show_full_model() + else: + self.parent.isolate_component(component_key) + + else: + # Prevent "no selection" state + clicked_cb.blockSignals(True) + clicked_cb.setChecked(True) + clicked_cb.blockSignals(False) + def main(): app = QApplication(sys.argv) win = CAD3DWindow() From 9b2308c4dad2670047a2dc982e11a728784d1484 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 28 Jan 2026 01:30:56 +0530 Subject: [PATCH 015/225] plate girder: use plate girder geometry for bridge model --- .../super_structure/plate_girder/builder.py | 349 +++++++++--------- 1 file changed, 176 insertions(+), 173 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py index 18aff14ed..c722f8656 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py @@ -1,218 +1,221 @@ """ -Plate girder builder. - -- I-section geometry -- stiffener geometry -- girder + stiffener assembly +Plate Girder Geometry Builder (Geometry Only) +- Based on standalone Osdag CAD plate girder logic +- NO welds +- NO viewer +- NO fusion +- Returns raw TopoDS_Shapes for Bridge CAD pipeline """ -# OCC imports +import math +import numpy as np -from OCC.Core.gp import gp_Vec, gp_Trsf -from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox -from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse -from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform +from OCC.Core.gp import gp_Pnt, gp_Vec, gp_Trsf, gp_Ax3, gp_Dir +from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism +from OCC.Core.BRepBuilderAPI import ( + BRepBuilderAPI_MakeEdge, + BRepBuilderAPI_MakeWire, + BRepBuilderAPI_MakeFace, + BRepBuilderAPI_Transform +) -# I-SECTION GEOMETRY +# ------------------------------------------------------------------ +# Helper geometry utilities (from standalone code) +# ------------------------------------------------------------------ -def create_i_section( - length, - width, - depth, - flange_thickness, - web_thickness -): - """ - Create an I-section CAD solid aligned along +X axis. - """ +def _make_edge(p1, p2): + return BRepBuilderAPI_MakeEdge(p1, p2).Edge() - web_height = depth - 2 * flange_thickness - # Bottom flange - bottom_flange = BRepPrimAPI_MakeBox( - length, width, flange_thickness - ).Shape() +def _make_wire_from_points(points): + wire_maker = BRepBuilderAPI_MakeWire() + for i in range(len(points)): + p_start = points[i] + p_end = points[(i + 1) % len(points)] + wire_maker.Add(_make_edge(p_start, p_end)) + return wire_maker.Wire() - # Top flange - top_flange = BRepPrimAPI_MakeBox( - length, width, flange_thickness - ).Shape() - trsf = gp_Trsf() - trsf.SetTranslation( - gp_Vec(0, 0, depth - flange_thickness) - ) - top_flange = BRepBuilderAPI_Transform( - top_flange, trsf, True - ).Shape() +def _make_plate(origin, length, width, thickness, u_dir, w_dir): + """ + Generic rectangular plate creator using face + prism. + """ + v_dir = np.cross(w_dir, u_dir) - # Web - web = BRepPrimAPI_MakeBox( - length, - web_thickness, - web_height - ).Shape() + a1 = origin + (thickness / 2) * u_dir + (length / 2) * v_dir + a2 = origin - (thickness / 2) * u_dir + (length / 2) * v_dir + a3 = origin - (thickness / 2) * u_dir - (length / 2) * v_dir + a4 = origin + (thickness / 2) * u_dir - (length / 2) * v_dir - trsf = gp_Trsf() - trsf.SetTranslation( - gp_Vec( - 0, - (width - web_thickness) / 2, - flange_thickness - ) - ) - web = BRepBuilderAPI_Transform( - web, trsf, True - ).Shape() + pts = [ + gp_Pnt(*a1), + gp_Pnt(*a2), + gp_Pnt(*a3), + gp_Pnt(*a4), + ] - # Fuse - section = BRepAlgoAPI_Fuse( - bottom_flange, top_flange - ).Shape() - section = BRepAlgoAPI_Fuse( - section, web - ).Shape() + wire = _make_wire_from_points(pts) + face = BRepBuilderAPI_MakeFace(wire).Face() - return section + extrude_vec = gp_Vec(*(width * w_dir)) + return BRepPrimAPI_MakePrism(face, extrude_vec).Shape() -# STIFFENER GEOMETRY +from OCC.Core.gp import gp_Ax1, gp_Dir +from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform -def _translate(shape, dx=0, dy=0, dz=0): +def _rotate_about_z(shape, angle_deg): trsf = gp_Trsf() - trsf.SetTranslation(gp_Vec(dx, dy, dz)) - return BRepBuilderAPI_Transform( - shape, trsf, True - ).Shape() + trsf.SetRotation(gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), + math.radians(angle_deg)) + return BRepBuilderAPI_Transform(shape, trsf, True).Shape() -def create_girder_stiffeners( - *, - girder_depth, - girder_flange_thickness, - girder_web_thickness, - girder_flange_width, - stiffener_width, - stiffener_length, - x_offset=0.0 -): +def _create_stiffener_plate(position, width, height, thickness, chamfer, side): """ - Create LEFT and RIGHT web stiffeners - consistent with create_i_section(). + Creates a single stiffener plate (left or right). + Geometry copied from standalone logic (no welds). """ + x, y, z = map(float, position) + c = chamfer + + if side == "right": + pts = [ + gp_Pnt(0, 0, height/2 - c), + gp_Pnt(c, 0, height/2), + gp_Pnt(width, 0, height/2), + gp_Pnt(width, 0, -height/2), + gp_Pnt(c, 0, -height/2), + gp_Pnt(0, 0, -height/2 + c), + ] + else: # left + pts = [ + gp_Pnt(0, 0, height/2 - c), + gp_Pnt(0, 0, -height/2 + c), + gp_Pnt(-c, 0, -height/2), + gp_Pnt(-width, 0, -height/2), + gp_Pnt(-width, 0, height/2), + gp_Pnt(-c, 0, height/2), + ] + + wire = BRepBuilderAPI_MakeWire() + for i in range(len(pts)): + wire.Add(BRepBuilderAPI_MakeEdge(pts[i], pts[(i + 1) % len(pts)]).Edge()) + + face = BRepBuilderAPI_MakeFace(wire.Wire()).Face() + solid = BRepPrimAPI_MakePrism(face, gp_Vec(0, thickness, 0)).Shape() + + local_ax = gp_Ax3(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1), gp_Dir(0, 1, 0)) + global_ax = gp_Ax3(gp_Pnt(x, y - thickness / 2, z), gp_Dir(0, 0, 1), gp_Dir(0, 1, 0)) - stiffener_height = ( - girder_depth - 2 * girder_flange_thickness - ) - - plate = BRepPrimAPI_MakeBox( - stiffener_length, - stiffener_width, - stiffener_height - ).Shape() - - z_offset = girder_flange_thickness - - web_left_y = ( - girder_flange_width - girder_web_thickness - ) / 2 - web_right_y = web_left_y + girder_web_thickness - - left = _translate( - plate, - dx=x_offset, - dy=web_left_y - stiffener_width, - dz=z_offset - ) - - right = _translate( - plate, - dx=x_offset, - dy=web_right_y, - dz=z_offset - ) + trsf = gp_Trsf() + trsf.SetDisplacement(local_ax, global_ax) - return left, right + return BRepBuilderAPI_Transform(solid, trsf, True).Shape() -# GIRDER ASSEMBLY +# ------------------------------------------------------------------ +# MAIN API — this replaces old I-section builder +# ------------------------------------------------------------------ -def build_girders( +def build_plate_girder_geometry( *, - span_length_L, - girder_section_d, - girder_section_bf, - girder_section_tf, - girder_section_tw, - num_girders, - girder_spacing, - stiffener_width, - stiffener_length + D, + tw, + length, + T_ft, + T_fb, + B_ft, + B_fb, + stiffener_spacing, + T_is, + chamfer_length ): """ - Builds girders symmetrically about centerline - and places stiffeners at both ends. + Geometry-only Plate Girder builder for Osdag Bridge. """ - girders = [] - stiffeners = [] - - total_width = (num_girders - 1) * girder_spacing + # Directions (same as standalone) + u_dir = np.array([0., 0., 1.]) + w_dir = np.array([0., 1., 0.]) + + # Web plate + web = _make_plate( + origin=np.array([0., 0., 0.]), + length=tw, + width=length, + thickness=D, + u_dir=u_dir, + w_dir=w_dir + ) - for i in range(num_girders): + # Top flange + top_flange = _make_plate( + origin=np.array([0., 0., (D + T_ft) / 2]), + length=B_ft, + width=length, + thickness=T_ft, + u_dir=u_dir, + w_dir=w_dir + ) - # 1. Girder - girder = create_i_section( - span_length_L, - girder_section_bf, - girder_section_d, - girder_section_tf, - girder_section_tw - ) + # Bottom flange + bottom_flange = _make_plate( + origin=np.array([0., 0., -(D + T_fb) / 2]), + length=B_fb, + width=length, + thickness=T_fb, + u_dir=u_dir, + w_dir=w_dir + ) - # 2. Stiffeners (start) - s_l, s_r = create_girder_stiffeners( - girder_depth=girder_section_d, - girder_flange_width=girder_section_bf, - girder_web_thickness=girder_section_tw, - girder_flange_thickness=girder_section_tf, - stiffener_width=stiffener_width, - stiffener_length=stiffener_length, - x_offset=0.0 + # Stiffeners (intermediate only, no end stiffeners) + stiffeners = [] + eff_depth = D - T_ft - T_fb + stiff_width = (min(B_ft, B_fb) - tw) / 2 + + num_panels = max(1, int(length // stiffener_spacing)) + + for i in range(1, num_panels): + y = i * stiffener_spacing + + stiffeners.append( + _create_stiffener_plate( + position=[ tw / 2, y, 0 ], + width=stiff_width, + height=D, + thickness=T_is, + chamfer=chamfer_length, + side="right" + ) ) - # 3. Stiffeners (end) - e_l, e_r = create_girder_stiffeners( - girder_depth=girder_section_d, - girder_flange_width=girder_section_bf, - girder_web_thickness=girder_section_tw, - girder_flange_thickness=girder_section_tf, - stiffener_width=stiffener_width, - stiffener_length=stiffener_length, - x_offset=span_length_L - stiffener_length + stiffeners.append( + _create_stiffener_plate( + position=[ -tw / 2, y, 0 ], + width=stiff_width, + height=D, + thickness=T_is, + chamfer=chamfer_length, + side="left" + ) ) - local_stiffeners = [s_l, s_r, e_l, e_r] - # 4. Y placement - y_offset = (i * girder_spacing) - (total_width / 2) + web = _rotate_about_z(web, -90) + top_flange = _rotate_about_z(top_flange, -90) + bottom_flange = _rotate_about_z(bottom_flange, -90) - trsf = gp_Trsf() - trsf.SetTranslation(gp_Vec(0, y_offset, 0)) + stiffeners = [ + _rotate_about_z(s, -90) for s in stiffeners + ] - girders.append( - BRepBuilderAPI_Transform( - girder, trsf, True - ).Shape() - ) - - for stiff in local_stiffeners: - stiffeners.append( - BRepBuilderAPI_Transform( - stiff, trsf, True - ).Shape() - ) - return girders, stiffeners + return { + "web": web, + "top_flange": top_flange, + "bottom_flange": bottom_flange, + "stiffeners": stiffeners + } From 2636d785d49e67b65be5818fb013320e2b5a3859 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 28 Jan 2026 01:34:11 +0530 Subject: [PATCH 016/225] cross bracing: align members with plate girder geometry --- .../super_structure/cross_bracing/builder.py | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py index 0af8d8306..3f6190ed7 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py @@ -207,7 +207,7 @@ def _create_horizontal_member_y( x, yL, yR, z, thickness, flange_width, section_type, dims, roll_sign ): - y0 = yL + flange_width + y0 = yL y1 = yR length = y1 - y0 y_mid = (y0 + y1) / 2 @@ -242,19 +242,23 @@ def _x_bracing( section_type, dims, bracket ): - z0 = tf / 2 - z1 = depth - tf / 2 + # ✅ WEB–FLANGE JUNCTIONS + z_bot = -depth / 2 + z_top = +depth / 2 - yl = yL + flange_w + yl = yL yr = yR + braces = [ + # Left TOP → Right BOTTOM _create_diagonal_member( - gp_Pnt(x, yl, z0), gp_Pnt(x, yr, z1), + gp_Pnt(x, yl, z_top), gp_Pnt(x, yr, z_bot), thickness, section_type, dims, +1 ), + # Left BOTTOM → Right TOP _create_diagonal_member( - gp_Pnt(x, yl, z1), gp_Pnt(x, yr, z0), + gp_Pnt(x, yl, z_bot), gp_Pnt(x, yr, z_top), thickness, section_type, dims, -1 ) ] @@ -262,7 +266,7 @@ def _x_bracing( if bracket in ("LOWER", "BOTH"): braces.append( _create_horizontal_member_y( - x, yL, yR, z0, + x, yL, yR, z_bot, thickness, flange_w, section_type, dims, +1 ) @@ -271,7 +275,7 @@ def _x_bracing( if bracket in ("UPPER", "BOTH"): braces.append( _create_horizontal_member_y( - x, yL, yR, z1, + x, yL, yR, z_top, thickness, flange_w, section_type, dims, +1 ) @@ -285,24 +289,24 @@ def _k_bracing( section_type, dims, top_bracket ): - z0 = tf / 2 - z1 = depth - tf / 2 + z_bot = -depth / 2 + z_top = +depth / 2 - yl = yL + flange_w + yl = yL yr = yR ym = (yl + yr) / 2 braces = [ _create_diagonal_member( - gp_Pnt(x, yl, z1), gp_Pnt(x, ym, z0), + gp_Pnt(x, yl, z_top), gp_Pnt(x, ym, z_bot), thickness, section_type, dims, +1 ), _create_diagonal_member( - gp_Pnt(x, yr, z1), gp_Pnt(x, ym, z0), + gp_Pnt(x, yr, z_top), gp_Pnt(x, ym, z_bot), thickness, section_type, dims, -1 ), _create_horizontal_member_y( - x, yL, yR, z0, + x, yL, yR, z_bot, thickness, flange_w, section_type, dims, +1 ) @@ -311,7 +315,7 @@ def _k_bracing( if top_bracket: braces.append( _create_horizontal_member_y( - x, yL, yR, z1, + x, yL, yR, z_top, thickness, flange_w, section_type, dims, +1 ) @@ -319,7 +323,6 @@ def _k_bracing( return braces - # PUBLIC API def build_cross_bracings( From b7522a3c966ef11d2d6b0951719ed0f367e59942 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 28 Jan 2026 01:36:34 +0530 Subject: [PATCH 017/225] Fixed minor issues in plate girder geometry --- .../super_structure/plate_girder/builder.py | 9 +- .../plate_girder/cad_generator.py | 111 +++++++++++++----- 2 files changed, 82 insertions(+), 38 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py index c722f8656..559731808 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py @@ -1,7 +1,6 @@ """ Plate Girder Geometry Builder (Geometry Only) -- Based on standalone Osdag CAD plate girder logic - NO welds - NO viewer - NO fusion @@ -21,9 +20,7 @@ ) -# ------------------------------------------------------------------ -# Helper geometry utilities (from standalone code) -# ------------------------------------------------------------------ +# Helper geometry utilities ( def _make_edge(p1, p2): return BRepBuilderAPI_MakeEdge(p1, p2).Edge() @@ -116,9 +113,7 @@ def _create_stiffener_plate(position, width, height, thickness, chamfer, side): return BRepBuilderAPI_Transform(solid, trsf, True).Shape() -# ------------------------------------------------------------------ # MAIN API — this replaces old I-section builder -# ------------------------------------------------------------------ def build_plate_girder_geometry( *, @@ -137,7 +132,7 @@ def build_plate_girder_geometry( Geometry-only Plate Girder builder for Osdag Bridge. """ - # Directions (same as standalone) + # Directions u_dir = np.array([0., 0., 1.]) w_dir = np.array([0., 1., 0.]) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 0943ad396..47328b66d 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -11,9 +11,10 @@ # Builder imports from osdagbridge.core.bridge_components.super_structure.plate_girder.builder import ( - build_girders + build_plate_girder_geometry ) + from osdagbridge.core.bridge_components.super_structure.deck.builder import ( build_deck ) @@ -55,25 +56,28 @@ class PlateGirderCADGenerator: Holds parameters and generates assembled CAD geometry. """ - def __init__(self, bridge_type = KEY_MODULE_PG): + def __init__(self, bridge_type=KEY_MODULE_PG): self.bridge_type = bridge_type + # GIRDERS PARAMETERS self.span_length_L = 25000 - self.girder_section_d = 900 - self.girder_section_bf = 500 - self.girder_section_tf = 260 + self.girder_section_d = 900 # clear web depth + self.girder_section_bf = 500 #top flange width + self.girder_section_bf_b = 500 #bottom flange width + self.girder_section_tf = 260 #top flange thickness + self.girder_section_tf_b = 260 #bottom flange thickness self.girder_section_tw = 100 self.num_girders = 5 - self.girder_spacing = 2750 + self.girder_spacing = 2750 # center-to-center spacing # DECK PARAMETERS self.carriageway_width = 12000 self.deck_thickness = 400 - self.footpath_config = "LEFT" # NONE / LEFT / RIGHT / BOTH + self.footpath_config = "BOTH" # NONE / LEFT / RIGHT / BOTH self.crash_barrier_base_width = 600 self.footpath_width = 1500 self.railing_width = 300 @@ -98,7 +102,7 @@ def __init__(self, bridge_type = KEY_MODULE_PG): self.cross_bracing_spacing = 4000 self.cross_bracing_thickness = 5 - self.bracing_type = "K" # "X" or "K" + self.bracing_type = "K" # "X" or "K" self.x_bracket_option = "BOTH" self.k_top_bracket = True @@ -115,32 +119,75 @@ def __init__(self, bridge_type = KEY_MODULE_PG): def generate(self): """ Generate full bridge CAD. - - Returns - ------- - dict - Dictionary of assembled CAD components """ - # Plate girder system - girders, stiffeners = build_girders( - span_length_L=self.span_length_L, - girder_section_d=self.girder_section_d, - girder_section_bf=self.girder_section_bf, - girder_section_tf=self.girder_section_tf, - girder_section_tw=self.girder_section_tw, - num_girders=self.num_girders, - girder_spacing=self.girder_spacing, - stiffener_width=self.stiffener_width, - stiffener_length=self.stiffener_length + # Local helpers + from OCC.Core.gp import gp_Trsf, gp_Vec + from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform + + def _translate(shape, dx=0, dy=0, dz=0): + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(dx, dy, dz)) + return BRepBuilderAPI_Transform(shape, trsf, True).Shape() + + # 1. BUILD SINGLE PLATE GIRDER GEOMETRY + pg = build_plate_girder_geometry( + D=self.girder_section_d, + tw=self.girder_section_tw, + length=self.span_length_L, + T_ft=self.girder_section_tf, + T_fb=self.girder_section_tf_b, + B_ft=self.girder_section_bf, + B_fb=self.girder_section_bf_b, + stiffener_spacing=750, + T_is=20, + chamfer_length=40 + ) + + # 2. PLACE MULTIPLE GIRDERS (Y-DIRECTION, CENTERED) + girders = [] + stiffeners = [] + + total_width = (self.num_girders - 1) * self.girder_spacing + + for i in range(self.num_girders): + y_offset = (i * self.girder_spacing) - (total_width / 2) + + # Web + flanges + for part in ("web", "top_flange", "bottom_flange"): + girders.append( + _translate(pg[part], dy=y_offset) + ) + + # Stiffeners + for stiff in pg["stiffeners"]: + stiffeners.append( + _translate(stiff, dy=y_offset) + ) + + # 3. REFERENCE Z-LEVELS + + # True girder depth (symmetric about web center) + # This restores the semantic contract expected by cross bracing builder + bracing_girder_depth = ( + (self.girder_section_d / 2) + + self.girder_section_tf ) - # Cross bracing system + + + # Top of girder for deck placement ONLY + girder_top_z = (self.girder_section_d / 2) + self.girder_section_tf + + # 4. CROSS BRACING SYSTEM cross_bracings = build_cross_bracings( span_length_L=self.span_length_L, num_girders=self.num_girders, girder_spacing=self.girder_spacing, - girder_depth=self.girder_section_d, + + + girder_depth=bracing_girder_depth, + flange_thickness=self.girder_section_tf, flange_width=self.girder_section_bf, @@ -154,10 +201,10 @@ def generate(self): top_bracket=self.k_top_bracket ) - # Deck system + # 5. DECK SYSTEM (USES TOP-OF-GIRDER Z) deck_out = build_deck( span_length_L=self.span_length_L, - girder_section_d=self.girder_section_d, + girder_section_d=girder_top_z, deck_thickness=self.deck_thickness, footpath_config=self.footpath_config, @@ -167,7 +214,7 @@ def generate(self): railing_width=self.railing_width ) - # Crash barrier system + # 6. CRASH BARRIERS crash_barriers = build_crash_barriers( span_length_L=self.span_length_L, deck_top_z=deck_out["deck_top_z"], @@ -183,7 +230,7 @@ def generate(self): railing_width=self.railing_width ) - # Median system + # 7. MEDIAN median_barriers = [] if self.enable_median: median_barriers = build_median( @@ -198,7 +245,7 @@ def generate(self): median_gap=self.median_gap ) - # Railing system + # 8. RAILINGS railings = build_railings( span_length=self.span_length_L, deck_top_z=deck_out["deck_top_z"], @@ -211,6 +258,7 @@ def generate(self): rail_count=self.rail_count ) + # FINAL RETURN return { "girders": girders, "stiffeners": stiffeners, @@ -226,6 +274,7 @@ def generate(self): "railings": railings } + def display_3dModel(self, component): hover_dict = { From 246dd6a7b675a1a3e8abddf6f5fb2112cca7e325 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 29 Jan 2026 23:10:39 +0530 Subject: [PATCH 018/225] Add End Stiffeners --- .../super_structure/plate_girder/builder.py | 73 ++++++++++++++++--- 1 file changed, 61 insertions(+), 12 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py index 559731808..bcf9f41f3 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py @@ -73,7 +73,6 @@ def _rotate_about_z(shape, angle_deg): def _create_stiffener_plate(position, width, height, thickness, chamfer, side): """ Creates a single stiffener plate (left or right). - Geometry copied from standalone logic (no welds). """ x, y, z = map(float, position) c = chamfer @@ -113,20 +112,21 @@ def _create_stiffener_plate(position, width, height, thickness, chamfer, side): return BRepBuilderAPI_Transform(solid, trsf, True).Shape() -# MAIN API — this replaces old I-section builder def build_plate_girder_geometry( *, - D, - tw, - length, - T_ft, - T_fb, - B_ft, - B_fb, - stiffener_spacing, - T_is, - chamfer_length + D, # Total depth + tw, # Web thickness + length, # Length along Y axis + T_ft, # Top flange thickness + T_fb, # Bottom flange thickness + B_ft, # Top flange width + B_fb, # Bottom flange width + stiffener_spacing, # Space between each stiffener plate + T_is, # Stiffener thickness + chamfer_length, # Triangular chamfer length + include_end_stiffeners=False, # Whether to include end stiffeners + T_es=None # End stiffener thickness ): """ Geometry-only Plate Girder builder for Osdag Bridge. @@ -173,9 +173,21 @@ def build_plate_girder_geometry( num_panels = max(1, int(length // stiffener_spacing)) + start_y = 0.0 + end_y = length + + if include_end_stiffeners: + end_stiffener_gap = T_es / 2.0 + start_y = end_stiffener_gap + 50.0 + end_y = length - (end_stiffener_gap + 50.0) + + for i in range(1, num_panels): y = i * stiffener_spacing + if y <= start_y or y >= end_y: + continue + stiffeners.append( _create_stiffener_plate( position=[ tw / 2, y, 0 ], @@ -198,6 +210,43 @@ def build_plate_girder_geometry( ) ) + # End stiffeners + if include_end_stiffeners: + if T_es is None: + T_es = T_is + + end_stiffener_gap = (T_es / 2.0) + + end_positions = [ + end_stiffener_gap, + end_stiffener_gap + 50.0, + length - (end_stiffener_gap + 50.0), + length - end_stiffener_gap, + ] + + for y in end_positions: + stiffeners.append( + _create_stiffener_plate( + position=[ tw / 2, y, 0 ], + width=stiff_width, + height=D, + thickness=T_es, + chamfer=chamfer_length, + side="right" + ) + ) + + stiffeners.append( + _create_stiffener_plate( + position=[ -tw / 2, y, 0 ], + width=stiff_width, + height=D, + thickness=T_es, + chamfer=chamfer_length, + side="left" + ) + ) + web = _rotate_about_z(web, -90) top_flange = _rotate_about_z(top_flange, -90) From 0380be20b1ebe694d035e0f2adb12277255bde9c Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 1 Feb 2026 01:34:34 +0530 Subject: [PATCH 019/225] Add IRC5-based crash barrier geometry (single/double W-beam) and update median geometry --- .../super_structure/crash_barrier/builder.py | 443 ++++++++++++++--- .../super_structure/median/builder.py | 469 ++++++++++++++++-- .../plate_girder/cad_generator.py | 104 +++- 3 files changed, 891 insertions(+), 125 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py index 90b3b0f24..28d7caea1 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py @@ -5,13 +5,20 @@ - Contains footpath-based positioning logic """ -from OCC.Core.gp import gp_Pnt, gp_Vec, gp_Trsf, gp_Dir, gp_Ax2 +from OCC.Core.gp import gp_Pnt, gp_Vec, gp_Trsf, gp_Dir, gp_Ax2, gp_Ax1,gp_Pnt2d, gp_Ax2d, gp_Dir2d from OCC.Core.BRepBuilderAPI import ( BRepBuilderAPI_MakePolygon, BRepBuilderAPI_MakeFace, - BRepBuilderAPI_Transform + BRepBuilderAPI_Transform, + BRepBuilderAPI_MakeWire, + BRepBuilderAPI_MakeEdge ) from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism +from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse +from OCC.Core.GCE2d import GCE2d_MakeArcOfCircle +from OCC.Core.Geom import Geom_Plane +from OCC.Core.gp import gp_Pln +import math # Utility transforms @@ -23,76 +30,331 @@ def translate(shape, x=0, y=0, z=0): def mirror_y(shape): + if shape.IsNull(): + return shape + trsf = gp_Trsf() trsf.SetMirror(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0))) - return BRepBuilderAPI_Transform(shape, trsf, True).Shape() + + transformer = BRepBuilderAPI_Transform(trsf) + transformer.Perform(shape, True) + return transformer.Shape() + -# Crash barrier geometry -def create_crash_barrier_left( +def create_rigid_rcc_crash_barrier( + *, length, - width, - height, - base_width + design_dict, + side="LEFT" +): + + + # READ IRC DESIGN DATA + H_total = design_dict.get("crash_barrier_height") + W_base = design_dict.get("crash_barrier_width") + W_top = design_dict.get("crash_barrier_top_notch") + + H_base = design_dict.get("crash_barrier_base_notch") + H_mid = design_dict.get("crash_barrier_middle_length") + wearing = design_dict.get("wearing_course_thickness") + + + + H_transition = 250 # Height of transition section (from IRC figure) + W_at_transition = W_base - 200 # Approximately 250mm at transition level + + # Z LEVELS (heights) + z0 = 0.0 # Bottom + z1 = H_base + wearing + z2 = z1 + H_transition # End of transition slope (150 + 250 = 400) + z3 = H_total # Top (1100) + + # Y LEVELS (half-widths from centerline) + y_base = W_base / 2.0 # 225mm from center + y_top = W_top / 2.0 # 87.5mm from center + y_trans = W_at_transition / 2.0 # 125mm from center at transition + + # PROFILE POINTS (YZ PLANE) + # Right side is outer edge (road side), Left is inner edge + + # Points traced clockwise from bottom-right: + p1 = gp_Pnt(0, y_base, z0) # Bottom right + p2 = gp_Pnt(0, -y_base, z0) # Bottom left + + p3 = gp_Pnt(0, -y_base, z1) # Left side - top of base vertical + p4 = gp_Pnt(0, -y_top, z3) # Left side - top corner (straight slope from base to top) + + p5 = gp_Pnt(0, y_top, z3) # Right side - top corner + p6 = gp_Pnt(0, y_trans, z2) # Right side - end of main slope / start of transition + p7 = gp_Pnt(0, y_base, z1) # Right side - top of base vertical + + # Build face + poly = BRepBuilderAPI_MakePolygon() + for p in (p1, p2, p3, p4, p5, p6, p7): + poly.Add(p) + poly.Close() + + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + solid = BRepPrimAPI_MakePrism(face, gp_Vec(length, 0, 0)).Shape() + + # MIRROR FOR RIGHT SIDE + if side.upper() == "RIGHT": + solid = mirror_y(solid) + + return solid + + + +def create_semi_rigid_metallic_barrier( + *, + length, + design_dict, + side="LEFT" ): """ - Creates LEFT crash barrier solid aligned along +X + Creates semi-rigid metallic crash barrier (IRC Fig 4). + Geometry: RCC kerb base + steel post channel + spacer channel + W-beam(s). """ - base_h = 100.0 - slope_mid_z = 325.0 + import numpy as np + import math - z0 = 0.0 - z1 = base_h - z2 = slope_mid_z - z3 = height + # READ DESIGN DATA + kerb_height = design_dict.get("kerb_height", 100) + kerb_top_width = design_dict.get("kerb_top_width", 500) + kerb_bottom_width = design_dict.get("kerb_bottom_width", 550) - y_left_base = -base_width / 2.0 - y_right_base = base_width / 2.0 + post_height = design_dict.get("post_height", 950) + post_spacing = design_dict.get("post_spacing", 1000) + spacer_height = design_dict.get("spacer_height", 330) - y_left_top = -width / 2.0 - y_right_top = width / 2.0 + number_of_w_beams = design_dict.get("number_of_w_beams", 1) - mid_width = 250.0 - y_right_mid = mid_width / 2.0 - # Profile (YZ plane) - p1 = gp_Pnt(0, y_right_base, z0) - p2 = gp_Pnt(0, y_left_base, z0) - p3 = gp_Pnt(0, y_left_base, z1) - p4 = gp_Pnt(0, y_left_top, z3) + # RCC KERB + z0 = 0.0 + z1 = kerb_height + + y_bottom_l = -kerb_bottom_width / 2.0 + y_bottom_r = kerb_bottom_width / 2.0 + y_top_l = -kerb_top_width / 2.0 + y_top_r = kerb_top_width / 2.0 + + p1 = gp_Pnt(0, y_bottom_l, z0) + p2 = gp_Pnt(0, y_bottom_r, z0) + p3 = gp_Pnt(0, y_top_r, z1) + p4 = gp_Pnt(0, y_top_l, z1) + + kerb_poly = BRepBuilderAPI_MakePolygon() + for p in (p1, p2, p3, p4): + kerb_poly.Add(p) + kerb_poly.Close() + + kerb_face = BRepBuilderAPI_MakeFace(kerb_poly.Wire()).Face() + kerb_solid = BRepPrimAPI_MakePrism( + kerb_face, gp_Vec(length, 0, 0) + ).Shape() - p5 = gp_Pnt(0, y_right_top, z3) - p6 = gp_Pnt(0, y_right_mid, z2) - p7 = gp_Pnt(0, y_right_mid, z2) - p8 = gp_Pnt(0, y_right_base, z1) + # POSTS (ISMC 150) + post_depth = design_dict.get("post_depth", 150) # Along X (Bridge Length) + post_width = design_dict.get("post_width", 75) # Along Y (Transverse) + post_web_thk = design_dict.get("post_web_thickness", 5.0) + post_flange_thk = design_dict.get("post_flange_thickness", 7.8) + post_offset_from_edge = design_dict.get("post_offset_from_edge", 75) # From outer edge + + num_posts = int(length / post_spacing) + 1 + posts_combined = None + + def create_vertical_channel(h, d, w, tw, tf): + # Creates a C-channel prism along Z. + # d is along X, w is along Y. + x_web_back = -tw / 2.0 + x_web_front = tw / 2.0 + x_flange_tip = d - tw / 2.0 + y_left = -w / 2.0 + y_right = w / 2.0 + + pts = [ + gp_Pnt(x_flange_tip, y_left, 0), + gp_Pnt(x_web_back, y_left, 0), + gp_Pnt(x_web_back, y_right, 0), + gp_Pnt(x_flange_tip, y_right, 0), + gp_Pnt(x_flange_tip, y_right - tf, 0), + gp_Pnt(x_web_front, y_right - tf, 0), + gp_Pnt(x_web_front, y_left + tf, 0), + gp_Pnt(x_flange_tip, y_left + tf, 0), + ] + poly = BRepBuilderAPI_MakePolygon() + for p in pts: + poly.Add(p) + poly.Close() + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + return BRepPrimAPI_MakePrism(face, gp_Vec(0, 0, h)).Shape() + + # LEFT SIDE LOGIC (Default) + # Post is on the Left (Outer) side. + # Spacer is to the Right of Post. + # Beam is to the Right of Spacer. + + # Calculate Post Y (Center of Post) + post_y_center = ( + -kerb_top_width / 2.0 + + post_offset_from_edge + + post_width / 2.0 + ) - poly = BRepBuilderAPI_MakePolygon() - for p in (p1, p2, p3, p4, p5, p6, p7, p8): - poly.Add(p) - poly.Close() + for i in range(num_posts): + x_pos = i * post_spacing + if x_pos > length: + break - face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + post_solid = create_vertical_channel( + post_height, post_depth, + post_width, post_web_thk, post_flange_thk + ) - return BRepPrimAPI_MakePrism( - face, - gp_Vec(length, 0, 0) - ).Shape() + post_solid = translate( + post_solid, + x=x_pos, + y=post_y_center, + z=kerb_height + ) + posts_combined = ( + post_solid if posts_combined is None + else BRepAlgoAPI_Fuse(posts_combined, post_solid).Shape() + ) -def create_crash_barrier_right( - length, - width, - height, - base_width -): - return mirror_y( - create_crash_barrier_left( - length, width, height, base_width + spacer_depth = design_dict.get("spacer_depth", 150) + spacer_width = design_dict.get("spacer_width", 75) + spacer_web_thk = design_dict.get("spacer_web_thickness", 5.0) + spacer_flange_thk = design_dict.get("spacer_flange_thickness", 7.8) + + spacers_combined = None + + # ========================================================= + # W-BEAM + # ========================================================= + # Corrected Geometry: Vertical orientation (W-profile in Y-Z plane) + + W_BEAM_HEIGHT = spacer_height # Aligned with spacer height as requested + W_BEAM_DEPTH = 83.0 # Standard W-beam depth + W_BEAM_THICKNESS = design_dict.get("w_beam_thickness", 3.0) + + def make_w_beam_wire(): + points = 40 + zs = np.linspace(0, W_BEAM_HEIGHT, points) + + # Double Wave Profile + # Two guassians or sin waves in Y based on Z + + # Sum of gaussians as before, but on Z + sigma = W_BEAM_HEIGHT / 10.0 + mu1 = W_BEAM_HEIGHT * 0.25 + mu2 = W_BEAM_HEIGHT * 0.75 + amp = W_BEAM_DEPTH * 1.5 + + poly = BRepBuilderAPI_MakePolygon() + + for z in zs: + # Gaussian bumps + y = (amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2))) + + poly.Add(gp_Pnt(0.0, y, z)) + + # Close the back face (flat at y=0) to form a solid cross-section + poly.Add(gp_Pnt(0.0, 0.0, W_BEAM_HEIGHT)) + poly.Add(gp_Pnt(0.0, 0.0, 0.0)) + poly.Close() + + return poly.Wire() + + beams_combined = None + + if number_of_w_beams == 1: + # Top of beam/spacer aligns with post top + # Center = post_height - height / 2.0 + beam_center_heights = [post_height - spacer_height / 2.0] + else: + # Upper beam/spacer starts at post top + h_upper = post_height - spacer_height / 2.0 + # Lower beam/spacer comes after 145mm gap + # Lower Top = Upper Bottom - 145 = (h_upper - spacer_height/2) - 145 + # Lower Center = Lower Top - spacer_height/2 = h_upper - spacer_height - 145 + h_lower = h_upper - spacer_height - 145 + beam_center_heights = [h_lower, h_upper] + + for h_center in beam_center_heights: # Take min of required locally + if beams_combined is not None and number_of_w_beams == 1: break + + # beam_z is bottom of the beam + beam_z = kerb_height + h_center - W_BEAM_HEIGHT / 2.0 + + # SPACER GENERATION (Per Beam) + spacer_z = kerb_height + h_center - spacer_height / 2.0 + spacer_y_center = post_y_center + post_width / 2.0 + spacer_width / 2.0 + + for i in range(num_posts): + x_pos = i * post_spacing + if x_pos > length: + break + + spacer_solid = create_vertical_channel( + spacer_height, spacer_depth, + spacer_width, spacer_web_thk, spacer_flange_thk + ) + + spacer_solid = translate( + spacer_solid, + x=x_pos, + y=spacer_y_center, + z=spacer_z + ) + + spacers_combined = ( + spacer_solid if spacers_combined is None + else BRepAlgoAPI_Fuse(spacers_combined, spacer_solid).Shape() + ) + + # BEAM GENERATION + beam_y_pos = spacer_y_center + spacer_width / 2.0 + + wire = make_w_beam_wire() + beam_face = BRepBuilderAPI_MakeFace(wire).Face() + + beam_solid = BRepPrimAPI_MakePrism( + beam_face, gp_Vec(length, 0, 0) + ).Shape() + + beam_solid = translate( + beam_solid, + y=beam_y_pos, + z=beam_z ) - ) + + beams_combined = ( + beam_solid if beams_combined is None + else BRepAlgoAPI_Fuse(beams_combined, beam_solid).Shape() + ) + + # COMBINE ALL + combined = kerb_solid + if posts_combined: + combined = BRepAlgoAPI_Fuse(combined, posts_combined).Shape() + if spacers_combined: + combined = BRepAlgoAPI_Fuse(combined, spacers_combined).Shape() + if beams_combined: + combined = BRepAlgoAPI_Fuse(combined, beams_combined).Shape() + + # IF RIGHT SIDE: MIRROR + if side.upper() == "RIGHT": + combined = mirror_y(combined) + + return combined @@ -135,7 +397,7 @@ def calculate_carriageway_offset( return 0.0 elif footpath_config == "LEFT": - return (footpath_width + railing_width) / 2.0 + return (footpath_width + railing_width ) / 2.0 elif footpath_config == "RIGHT": return -(footpath_width + railing_width) / 2.0 @@ -151,16 +413,34 @@ def build_crash_barriers( deck_top_z, footpath_config, carriageway_width, - crash_barrier_width, - crash_barrier_height, - crash_barrier_base_width, footpath_width, - railing_width + railing_width, + design_dict, + barrier_type="Rigid" ): """ - Returns list of crash barrier shapes + Returns list of crash barrier shapes. + + Parameters + ---------- + barrier_type : str + Type of crash barrier: "Rigid" (RCC) or "Semi-Rigid" (metallic W-beam) """ + # READ IRC DESIGN DATA + # For rigid barriers, use crash_barrier dimensions + # For semi-rigid, use kerb dimensions + if barrier_type == "Rigid": + crash_barrier_height = design_dict.get("crash_barrier_height") + crash_barrier_width = design_dict.get("crash_barrier_top_notch") + crash_barrier_base_width = design_dict.get("crash_barrier_width") + + else: + # Semi-rigid uses kerb as base + crash_barrier_height = design_dict.get("crash_barrier_height", 1050) + crash_barrier_base_width = design_dict.get("kerb_bottom_width", 550) + crash_barrier_width = design_dict.get("kerb_top_width", 500) + crash_barriers = [] total_deck_width = calculate_deck_width( @@ -186,14 +466,14 @@ def build_crash_barriers( # NONE if footpath_config == "NONE": - y_r = deck_half - crash_barrier_base_width / 2.0 - y_l = -deck_half + crash_barrier_base_width / 2.0 + y_r = deck_half - crash_barrier_base_width/2 + y_l = -deck_half + crash_barrier_base_width/2 # LEFT footpath elif footpath_config == "LEFT": - y_r = deck_half - crash_barrier_base_width / 2.0 - y_l = cw_left - crash_barrier_base_width / 2.0 + y_r = deck_half - crash_barrier_base_width / 2.0 + y_l = cw_left + crash_barrier_base_width / 2.0 # RIGHT footpath elif footpath_config == "RIGHT": @@ -210,32 +490,49 @@ def build_crash_barriers( else: raise ValueError(f"Invalid footpath_config: {footpath_config}") - # Right barrier + # SELECT GEOMETRY BASED ON BARRIER TYPE + if barrier_type == "Rigid": + right_shape = create_rigid_rcc_crash_barrier( + length=span_length_L, + design_dict=design_dict, + side="RIGHT" + ) + left_shape = create_rigid_rcc_crash_barrier( + length=span_length_L, + design_dict=design_dict, + side="LEFT" + ) + elif barrier_type == "Semi-Rigid": + right_shape = create_semi_rigid_metallic_barrier( + length=span_length_L, + design_dict=design_dict, + side="RIGHT" + ) + left_shape = create_semi_rigid_metallic_barrier( + length=span_length_L, + design_dict=design_dict, + side="LEFT" + ) + else: + raise ValueError(f"Invalid barrier_type: {barrier_type}. Use 'Rigid' or 'Semi-Rigid'") + + # PLACE SHAPES + crash_barriers.append( translate( - create_crash_barrier_right( - span_length_L, - crash_barrier_width, - crash_barrier_height, - crash_barrier_base_width - ), + right_shape, y=y_r, z=deck_top_z ) ) - # Left barrier crash_barriers.append( translate( - create_crash_barrier_left( - span_length_L, - crash_barrier_width, - crash_barrier_height, - crash_barrier_base_width - ), + left_shape, y=y_l, z=deck_top_z ) ) + return crash_barriers diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index ee045f26e..f91d3eebd 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -1,15 +1,21 @@ """ - -Creates median barriers using existing crash barrier geometry. +Creates median barriers. +Median geometry is independent of edge crash barriers (IRC Fig 5 series). +Supports three types per IRC 5:2015: + - Raised Kerb (Fig 5a) + - RCC Crash Barrier (Fig 5b) + - Metallic Crash Barrier (Fig 5c) """ -from OCC.Core.gp import gp_Trsf, gp_Vec -from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform - -from osdagbridge.core.bridge_components.super_structure.crash_barrier.builder import ( - create_crash_barrier_left, - create_crash_barrier_right +from OCC.Core.gp import gp_Trsf, gp_Vec, gp_Pnt, gp_Dir, gp_Ax2, gp_Ax1 +from OCC.Core.BRepBuilderAPI import ( + BRepBuilderAPI_Transform, + BRepBuilderAPI_MakePolygon, + BRepBuilderAPI_MakeFace ) +from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox, BRepPrimAPI_MakePrism +from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse +import math def _translate(shape, x=0.0, y=0.0, z=0.0): @@ -18,55 +24,454 @@ def _translate(shape, x=0.0, y=0.0, z=0.0): return BRepBuilderAPI_Transform(shape, trsf, True).Shape() +def _mirror_y(shape): + """Mirror shape about YZ plane (flip in Y direction).""" + trsf = gp_Trsf() + trsf.SetMirror(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0))) + return BRepBuilderAPI_Transform(shape, trsf, True).Shape() + + +def _create_channel_section(length, depth, flange_width, web_thickness, flange_thickness): + """ + Creates a C-channel section extruded along Z-axis (initially). + Origin at center of the back of the web. + """ + # Re-using the logic from crash_barrier/builder.py + + y_web_back = -web_thickness / 2.0 + y_web_front = web_thickness / 2.0 + y_flange_tip = depth - web_thickness / 2.0 + + z_bottom = -flange_width / 2.0 + z_top = flange_width / 2.0 + + # Points for C-shape (facing +Y) in YZ plane + p1 = gp_Pnt(0, y_flange_tip, z_bottom) + p2 = gp_Pnt(0, y_web_back, z_bottom) + p3 = gp_Pnt(0, y_web_back, z_top) + p4 = gp_Pnt(0, y_flange_tip, z_top) + p5 = gp_Pnt(0, y_flange_tip, z_top - flange_thickness) + p6 = gp_Pnt(0, y_web_front, z_top - flange_thickness) + p7 = gp_Pnt(0, y_web_front, z_bottom + flange_thickness) + p8 = gp_Pnt(0, y_flange_tip, z_bottom + flange_thickness) + + poly = BRepBuilderAPI_MakePolygon() + for p in (p1, p2, p3, p4, p5, p6, p7, p8): + poly.Add(p) + poly.Close() + + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + solid = BRepPrimAPI_MakePrism(face, gp_Vec(length, 0, 0)).Shape() + + return solid + + +def create_raised_kerb(length, design_dict): + """ + Creates raised kerb median (IRC Fig 5a). + Trapezoidal profile extruded along span. + """ + kerb_height = design_dict.get("kerb_height") + kerb_top_width = design_dict.get("kerb_top_width") + kerb_bottom_width = design_dict.get("kerb_bottom_width") + + # Profile in YZ plane + z0 = 0.0 + z1 = kerb_height + + y_bottom_l = -kerb_bottom_width / 2.0 + y_bottom_r = kerb_bottom_width / 2.0 + y_top_l = -kerb_top_width / 2.0 + y_top_r = kerb_top_width / 2.0 + + # Trapezoidal profile (counter-clockwise) + p1 = gp_Pnt(0, y_bottom_l, z0) + p2 = gp_Pnt(0, y_bottom_r, z0) + p3 = gp_Pnt(0, y_top_r, z1) + p4 = gp_Pnt(0, y_top_l, z1) + + poly = BRepBuilderAPI_MakePolygon() + for p in (p1, p2, p3, p4): + poly.Add(p) + poly.Close() + + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + solid = BRepPrimAPI_MakePrism(face, gp_Vec(length, 0, 0)).Shape() + + return solid + + +def create_rcc_crash_barrier_median(length, design_dict): + """ + Creates RCC crash barrier median (IRC Fig 5b). + Single New Jersey barrier profile (will be mirrored for the other side). + Uses the same IRC-5R profile geometry as the edge crash barrier. + """ +def create_rcc_crash_barrier_median(length, design_dict): + """ + Creates RCC crash barrier median (IRC Fig 5b). + Uses the same IRC-5R profile geometry as the edge crash barrier. + """ + barrier_height = design_dict.get("barrier_height", 900) + barrier_top_width = design_dict.get("barrier_top_width", 175) + barrier_bottom_width = design_dict.get("barrier_bottom_width", 450) + + # Profile heights from IRC + barrier_base_h = design_dict.get("barrier_split_h3", 100) + barrier_mid_h = design_dict.get("barrier_split_h2", 250) + design_dict.get("barrier_split_h1", 500) + + wearing = design_dict.get("wearing_course_thickness", 50) + + # Calculate intermediate width at transition point + H_transition = 250 # Height of transition section + W_at_transition = barrier_bottom_width - 200 + + # Z levels + z0 = 0.0 # Start at structural deck level + z1 = wearing + barrier_base_h # Top of base vertical + z2 = z1 + H_transition # End of transition slope + z3 = barrier_height # Top + + # Y levels (half-widths) - Centered System + y_base = barrier_bottom_width / 2.0 + y_top = barrier_top_width / 2.0 + y_trans = W_at_transition / 2.0 + + # 1. Bottom Right (Road side base) + p1 = gp_Pnt(0, y_base, z0) + + # 2. Bottom Left (Median side base) + p2 = gp_Pnt(0, -y_base, z0) + + # 3. Base Top Left (Median side) + p3 = gp_Pnt(0, -y_base, z1) + + # 4. Top Left (Median side) - Sloped back face + p4 = gp_Pnt(0, -y_top, z3) + + # 5. Top Right (Road side) + p5 = gp_Pnt(0, y_top, z3) + + # 6. Transition Top Right (End of main slope) + p6 = gp_Pnt(0, y_trans, z2) + + # 7. Base Top Right (Start of transition) + p7 = gp_Pnt(0, y_base, z1) + + # Create Polygon + poly = BRepBuilderAPI_MakePolygon() + for p in (p1, p2, p3, p4, p5, p6, p7): + poly.Add(p) + poly.Close() + + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + solid = BRepPrimAPI_MakePrism(face, gp_Vec(length, 0, 0)).Shape() + + return solid + + + +def create_metallic_crash_barrier_median(length, design_dict): + """ + Creates metallic crash barrier median (IRC Fig 5c). + Single side (will be mirrored). + """ + # Kerb dimensions + kerb_height = design_dict.get("kerb_height", 100) + kerb_top_width = design_dict.get("kerb_top_width", 500) + kerb_bottom_width = design_dict.get("kerb_bottom_width", 550) + + # Post dimensions + post_height = design_dict.get("post_height", 950) + post_spacing = design_dict.get("post_spacing", 1000) + spacer_height = design_dict.get("spacer_height", 330) + + # W-beam + number_of_w_beams = design_dict.get("number_of_w_beams", 1) + w_beam_thickness = design_dict.get("w_beam_thickness", 3.0) + + # Guard rail heights (Computed dynamically below) + # guard_rail_height_single = 620 + # guard_rail_height_double_lower = 330 + # guard_rail_height_double_upper = 805 + + # CREATE KERB + z0 = 0.0 + z1 = kerb_height + + y_bottom_l = -kerb_bottom_width / 2.0 + y_bottom_r = kerb_bottom_width / 2.0 + y_top_l = -kerb_top_width / 2.0 + y_top_r = kerb_top_width / 2.0 + + p1 = gp_Pnt(0, y_bottom_l, z0) + p2 = gp_Pnt(0, y_bottom_r, z0) + p3 = gp_Pnt(0, y_top_r, z1) + p4 = gp_Pnt(0, y_top_l, z1) + + kerb_poly = BRepBuilderAPI_MakePolygon() + for p in (p1, p2, p3, p4): + kerb_poly.Add(p) + kerb_poly.Close() + + kerb_face = BRepBuilderAPI_MakeFace(kerb_poly.Wire()).Face() + kerb_solid = BRepPrimAPI_MakePrism(kerb_face, gp_Vec(length, 0, 0)).Shape() + + # CREATE POSTS (ISMC 150 as per IRC 5 Fig 5c) + post_depth = design_dict.get("post_depth", 150) + post_width = design_dict.get("post_width", 75) + post_web_thk = design_dict.get("post_web_thickness", 5.0) + post_flange_thk = design_dict.get("post_flange_thickness", 7.8) + post_offset = design_dict.get("post_offset_from_edge", 75) # From kerb edge + + num_posts = int(length / post_spacing) + 1 + posts_combined = None + + for i in range(num_posts): + x_pos = i * post_spacing + if x_pos > length: + break + + # Post on outer side (road facing) + # Center of post in Y + post_y_center = kerb_top_width / 2.0 - post_offset - post_depth / 2.0 + + # Create vertical channel post + def create_vertical_channel(h, d, w, tw, tf): + x_web_back = -tw / 2.0 + x_web_front = tw / 2.0 + x_flange_tip = d - tw / 2.0 + y_left = -w / 2.0 + y_right = w / 2.0 + pts = [ + gp_Pnt(x_flange_tip, y_left, 0), + gp_Pnt(x_web_back, y_left, 0), + gp_Pnt(x_web_back, y_right, 0), + gp_Pnt(x_flange_tip, y_right, 0), + gp_Pnt(x_flange_tip, y_right - tf, 0), + gp_Pnt(x_web_front, y_right - tf, 0), + gp_Pnt(x_web_front, y_left + tf, 0), + gp_Pnt(x_flange_tip, y_left + tf, 0) + ] + poly = BRepBuilderAPI_MakePolygon() + for p in pts: + poly.Add(p) + poly.Close() + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + return BRepPrimAPI_MakePrism(face, gp_Vec(0, 0, h)).Shape() + + post_solid = create_vertical_channel(post_height, post_depth, post_width, post_web_thk, post_flange_thk) + + + tr_rot = gp_Trsf() + tr_rot.SetRotation(gp_Ax1(gp_Pnt(0,0,0), gp_Dir(0,0,1)), 0.0) + post_solid = BRepBuilderAPI_Transform(post_solid, tr_rot, True).Shape() + + post_solid = _translate(post_solid, x=x_pos, y=post_y_center, z=kerb_height) + + if posts_combined is None: + posts_combined = post_solid + else: + posts_combined = BRepAlgoAPI_Fuse(posts_combined, post_solid).Shape() + + # CREATE SPACER CHANNELS PARAMETERS (ISMC 150) + spacer_width = design_dict.get("spacer_width", 75) + spacer_depth = design_dict.get("spacer_depth", 150) + spacer_web_thk = design_dict.get("spacer_web_thickness", 5.0) + spacer_flange_thk = design_dict.get("spacer_flange_thickness", 7.8) + + spacers_combined = None + + # CREATE W-BEAMS + import numpy as np + + W_BEAM_HEIGHT = spacer_height # Aligned with spacer height + W_BEAM_DEPTH = 83.0 # Standard W-beam depth + W_BEAM_THICKNESS = w_beam_thickness + + def make_w_beam_wire(): + points = 40 + zs = np.linspace(0, W_BEAM_HEIGHT, points) + + # Double Wave Profile + # Two guassians or sin waves in Y based on Z + + # Sum of gaussians as before, but on Z + sigma = W_BEAM_HEIGHT / 6.0 + mu1 = W_BEAM_HEIGHT * 0.25 + mu2 = W_BEAM_HEIGHT * 0.75 + amp = W_BEAM_DEPTH + + poly = BRepBuilderAPI_MakePolygon() + + for z in zs: + # Gaussian bumps + y = (amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2))) + + poly.Add(gp_Pnt(0.0, y, z)) + + # Close the back face (flat at y=0) to form a solid cross-section + poly.Add(gp_Pnt(0.0, 0.0, W_BEAM_HEIGHT)) + poly.Add(gp_Pnt(0.0, 0.0, 0.0)) + poly.Close() + + return poly.Wire() + + beams_combined = None + + if number_of_w_beams == 1: + # Top of beam/spacer aligns with post top + beam_heights = [post_height - spacer_height / 2.0] + else: + # Upper beam/spacer starts at post top + h_upper = post_height - spacer_height / 2.0 + # Lower beam/spacer comes after 145mm gap + h_lower = h_upper - spacer_height - 145 + beam_heights = [h_lower, h_upper] + + for beam_h in beam_heights[:number_of_w_beams]: + # Beam Z is bottom of the beam + beam_z = kerb_height + beam_h - W_BEAM_HEIGHT / 2.0 + + # Post Position + post_y_center = kerb_top_width / 2.0 - post_offset - post_depth / 2.0 + + # SPACER GENERATION (Per Beam) + # Spacer Center aligned with Beam Center + # Spacer Z (base) = kerb_height + beam_h - spacer_height / 2.0 + spacer_z = kerb_height + beam_h - spacer_height / 2.0 + + # Spacer Y ends at: post_y_center + post_width/2 + spacer_width + spacer_y_center = post_y_center + post_width/2.0 + spacer_width/2.0 + + for i in range(num_posts): + x_pos = i * post_spacing + if x_pos > length: + break + + def create_vertical_spacer(h, d, w, tw, tf): + x_web_back = -tw / 2.0 + x_web_front = tw / 2.0 + x_flange_tip = d - tw / 2.0 + y_left = -w / 2.0 + y_right = w / 2.0 + pts = [ + gp_Pnt(x_flange_tip, y_left, 0), + gp_Pnt(x_web_back, y_left, 0), + gp_Pnt(x_web_back, y_right, 0), + gp_Pnt(x_flange_tip, y_right, 0), + gp_Pnt(x_flange_tip, y_right - tf, 0), + gp_Pnt(x_web_front, y_right - tf, 0), + gp_Pnt(x_web_front, y_left + tf, 0), + gp_Pnt(x_flange_tip, y_left + tf, 0) + ] + poly = BRepBuilderAPI_MakePolygon() + for p in pts: + poly.Add(p) + poly.Close() + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + return BRepPrimAPI_MakePrism(face, gp_Vec(0, 0, h)).Shape() + + spacer_solid = create_vertical_spacer(spacer_height, spacer_depth, spacer_width, spacer_web_thk, spacer_flange_thk) + + # Rotate 0 deg (C faces +X) + tr_rot = gp_Trsf() + tr_rot.SetRotation(gp_Ax1(gp_Pnt(0,0,0), gp_Dir(0,0,1)), 0.0) + spacer_solid = BRepBuilderAPI_Transform(spacer_solid, tr_rot, True).Shape() + + spacer_solid = _translate(spacer_solid, x=x_pos, y=spacer_y_center, z=spacer_z) + + if spacers_combined is None: + spacers_combined = spacer_solid + else: + spacers_combined = BRepAlgoAPI_Fuse(spacers_combined, spacer_solid).Shape() + + + + + beam_y_pos = spacer_y_center + spacer_width / 2.0 + + # Create Wire -> Face -> Solid + wire = make_w_beam_wire() + beam_face = BRepBuilderAPI_MakeFace(wire).Face() + beam_solid = BRepPrimAPI_MakePrism(beam_face, gp_Vec(length, 0, 0)).Shape() + + # Translate to position + beam_solid = _translate( + beam_solid, + x=0, + y=beam_y_pos, + z=beam_z + ) + + if beams_combined is None: + beams_combined = beam_solid + else: + beams_combined = BRepAlgoAPI_Fuse(beams_combined, beam_solid).Shape() + + # COMBINE + combined = kerb_solid + if posts_combined is not None: + combined = BRepAlgoAPI_Fuse(combined, posts_combined).Shape() + if spacers_combined is not None: + combined = BRepAlgoAPI_Fuse(combined, spacers_combined).Shape() + if beams_combined is not None: + combined = BRepAlgoAPI_Fuse(combined, beams_combined).Shape() + + return combined + + def build_median( span_length, deck_top_z, carriageway_center_y, - crash_barrier_width, - crash_barrier_height, - crash_barrier_base_width, - median_gap + design_dict, + median_type="RCC Crash Barrier" ): """ Build median barriers. + Always creates TWO barriers separated by the median width. """ median_barriers = [] + + # Get median width from design_dict (default 1200) + median_total_width = design_dict.get("median_width", 1200) + + # Create the base shape (one side) + if median_type == "Raised Kerb": + barrier_shape = create_raised_kerb(span_length, design_dict) + barrier_base_width = design_dict.get("kerb_bottom_width", 550) + elif median_type == "RCC Crash Barrier": + barrier_shape = create_rcc_crash_barrier_median(span_length, design_dict) + barrier_base_width = design_dict.get("barrier_bottom_width", 450) + elif median_type == "Metallic Crash Barrier": + barrier_shape = create_metallic_crash_barrier_median(span_length, design_dict) + barrier_base_width = design_dict.get("kerb_bottom_width", 550) + else: + raise ValueError(f"Invalid median_type: {median_type}") - offset = (median_gap / 2.0) + (crash_barrier_base_width / 2.0) - - # Left median barrier - left_barrier = create_crash_barrier_left( - length=span_length, - width=crash_barrier_width, - height=crash_barrier_height, - base_width=crash_barrier_base_width - ) + + offset = (median_total_width ) - (barrier_base_width / 2.0) + + left_barrier = _mirror_y(barrier_shape) left_barrier = _translate( left_barrier, x=0.0, y=carriageway_center_y - offset, z=deck_top_z ) - median_barriers.append(left_barrier) - # Right median barrier - right_barrier = create_crash_barrier_right( - length=span_length, - width=crash_barrier_width, - height=crash_barrier_height, - base_width=crash_barrier_base_width - ) - + right_barrier = _translate( - right_barrier, + barrier_shape, x=0.0, y=carriageway_center_y + offset, z=deck_top_z ) - median_barriers.append(right_barrier) return median_barriers diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 47328b66d..555252124 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -77,7 +77,7 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.carriageway_width = 12000 self.deck_thickness = 400 - self.footpath_config = "BOTH" # NONE / LEFT / RIGHT / BOTH + self.footpath_config = "LEFT" # NONE / LEFT / RIGHT / BOTH self.crash_barrier_base_width = 600 self.footpath_width = 1500 self.railing_width = 300 @@ -85,10 +85,12 @@ def __init__(self, bridge_type=KEY_MODULE_PG): # CRASH BARRIER PARAMETERS self.crash_barrier_width = 175 self.crash_barrier_height = 900 + self.barrier_type = "Semi-Rigid" # "Rigid" or "Semi-Rigid" + self.crash_barrier_subtype = "Double W-beam" # "IRC-5R", "High Containment", "Single W-beam", "Double W-beam" # MEDIAN PARAMETERS self.enable_median = True - self.median_gap = 800 + self.median_type = "Metallic Crash Barrier" # "Raised Kerb", "RCC Crash Barrier", "Metallic Crash Barrier" # RAILING PARAMETERS self.railing_height = 1200 @@ -98,6 +100,11 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.stiffener_width = 200 self.stiffener_length = 10 + # END STIFFENER PARAMETERS + self.include_end_stiffeners = True + self.end_stiffener_thickness = 25 + + # CROSS BRACING PARAMETERS self.cross_bracing_spacing = 4000 self.cross_bracing_thickness = 5 @@ -114,6 +121,8 @@ def __init__(self, bridge_type=KEY_MODULE_PG): "flange_thickness": 7 } + + # MAIN CAD GENERATION def generate(self): @@ -141,7 +150,9 @@ def _translate(shape, dx=0, dy=0, dz=0): B_fb=self.girder_section_bf_b, stiffener_spacing=750, T_is=20, - chamfer_length=40 + chamfer_length=40, + include_end_stiffeners=self.include_end_stiffeners, + T_es=self.end_stiffener_thickness ) # 2. PLACE MULTIPLE GIRDERS (Y-DIRECTION, CENTERED) @@ -167,8 +178,6 @@ def _translate(shape, dx=0, dy=0, dz=0): # 3. REFERENCE Z-LEVELS - # True girder depth (symmetric about web center) - # This restores the semantic contract expected by cross bracing builder bracing_girder_depth = ( (self.girder_section_d / 2) + self.girder_section_tf @@ -215,34 +224,91 @@ def _translate(shape, dx=0, dy=0, dz=0): ) # 6. CRASH BARRIERS + + from osdagbridge.core.utils.codes.irc5_2015 import IRC5_2015 + from osdagbridge.core.utils.common import ( + KEY_CRASH_BARRIER_TYPE, + KEY_FOOTPATH, + KEY_RAILING_TYPE, + KEY_RIGID_CRASH_BARRIER_TYPE, + KEY_METALLIC_CRASH_BARRIER_TYPE, + KEY_MEDIAN_TYPE + ) + + # IRC DESIGN (CRASH BARRIER) + # Map barrier_type string to KEY_CRASH_BARRIER_TYPE index + barrier_type_map = {"Flexible": 0, "Semi-Rigid": 1, "Rigid": 2} + barrier_idx = barrier_type_map.get(self.barrier_type, 2) + + # Map crash_barrier_subtype for rigid barriers + rigid_subtype_map = {"IRC-5R": 0, "High Containment": 1} + metallic_subtype_map = {"Single W-beam": 0, "Double W-beam": 1} + + if self.barrier_type == "Rigid": + # Use rigid barrier specifications + # Get the crash barrier subtype (IRC-5R or High Containment) + rigid_subtype_idx = rigid_subtype_map.get(self.crash_barrier_subtype, 0) + + if self.footpath_config == "NONE": + design_dict = IRC5_2015.cl_109_6_3_shapes( + barrier_type=KEY_CRASH_BARRIER_TYPE[barrier_idx], + footpath=KEY_FOOTPATH[0], + railing_type=None, + design_dict={}, + crash_barrier_type=KEY_RIGID_CRASH_BARRIER_TYPE[rigid_subtype_idx] + ) + else: + # For footpath cases, we still need to pass the crash_barrier_type + # to get the correct dimensions (IRC-5R vs High Containment) + design_dict = IRC5_2015.cl_109_6_3_shapes( + barrier_type=KEY_CRASH_BARRIER_TYPE[barrier_idx], + footpath=KEY_FOOTPATH[1], + railing_type=KEY_RAILING_TYPE[0], + design_dict={}, + crash_barrier_type=KEY_RIGID_CRASH_BARRIER_TYPE[rigid_subtype_idx] + ) + else: + # Use semi-rigid/metallic barrier specifications + design_dict = IRC5_2015.cl_109_6_3_shapes( + barrier_type=KEY_CRASH_BARRIER_TYPE[1], # Semi-rigid + footpath=KEY_FOOTPATH[0] if self.footpath_config == "NONE" else KEY_FOOTPATH[1], + railing_type=None, + design_dict={}, + crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_map.get(self.crash_barrier_subtype, 0)] + ) + crash_barriers = build_crash_barriers( span_length_L=self.span_length_L, deck_top_z=deck_out["deck_top_z"], - footpath_config=self.footpath_config, carriageway_width=self.carriageway_width, - - crash_barrier_width=self.crash_barrier_width, - crash_barrier_height=self.crash_barrier_height, - crash_barrier_base_width=self.crash_barrier_base_width, - footpath_width=self.footpath_width, - railing_width=self.railing_width + railing_width=self.railing_width, + design_dict=design_dict, + barrier_type=self.barrier_type ) # 7. MEDIAN median_barriers = [] if self.enable_median: + # Get median design specifications from IRC5_2015 + median_type_map = {"Raised Kerb": 0, "RCC Crash Barrier": 1, "Metallic Crash Barrier": 2} + median_idx = median_type_map.get(self.median_type, 1) + + median_design_dict = IRC5_2015.cl_109_6_3_shapes( + barrier_type=KEY_MEDIAN_TYPE[median_idx], + footpath=KEY_FOOTPATH[0], + railing_type=None, + design_dict={}, + crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[0] if self.median_type == "Metallic Crash Barrier" else None + ) + median_barriers = build_median( span_length=self.span_length_L, deck_top_z=deck_out["deck_top_z"], carriageway_center_y=deck_out["carriageway_center_y"], - - crash_barrier_width=self.crash_barrier_width, - crash_barrier_height=self.crash_barrier_height, - crash_barrier_base_width=self.crash_barrier_base_width, - - median_gap=self.median_gap + design_dict=median_design_dict, + median_type=self.median_type ) # 8. RAILINGS @@ -250,9 +316,7 @@ def _translate(shape, dx=0, dy=0, dz=0): span_length=self.span_length_L, deck_top_z=deck_out["deck_top_z"], total_deck_width=deck_out["total_deck_width"], - footpath_config=self.footpath_config, - railing_width=self.railing_width, railing_height=self.railing_height, rail_count=self.rail_count From 040c615f8f693335e2841bf67c08ee24eb8da0a1 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 1 Feb 2026 02:21:26 +0530 Subject: [PATCH 020/225] Add double W-beam median geometry and updated to single median for raised kerb median type --- .../super_structure/median/builder.py | 79 +++++++++++-------- .../plate_girder/cad_generator.py | 63 ++++++++------- 2 files changed, 76 insertions(+), 66 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index f91d3eebd..8b08e6210 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -234,7 +234,8 @@ def create_metallic_crash_barrier_median(length, design_dict): # Post on outer side (road facing) # Center of post in Y - post_y_center = kerb_top_width / 2.0 - post_offset - post_depth / 2.0 + # For Median: width (75) is along Y, depth (150) is along X. + post_y_center = kerb_top_width / 2.0 - post_offset - post_width / 2.0 # Create vertical channel post def create_vertical_channel(h, d, w, tw, tf): @@ -335,7 +336,7 @@ def make_w_beam_wire(): beam_z = kerb_height + beam_h - W_BEAM_HEIGHT / 2.0 # Post Position - post_y_center = kerb_top_width / 2.0 - post_offset - post_depth / 2.0 + post_y_center = kerb_top_width / 2.0 - post_offset - post_width / 2.0 # SPACER GENERATION (Per Beam) # Spacer Center aligned with Beam Center @@ -431,7 +432,8 @@ def build_median( ): """ Build median barriers. - Always creates TWO barriers separated by the median width. + - Raised Kerb: Creates ONE central barrier. + - RCC & Metallic: Creates TWO barriers separated by the median width. """ median_barriers = [] @@ -439,39 +441,48 @@ def build_median( # Get median width from design_dict (default 1200) median_total_width = design_dict.get("median_width", 1200) - # Create the base shape (one side) + # CASE 1: RAISED KERB (Single Central) if median_type == "Raised Kerb": barrier_shape = create_raised_kerb(span_length, design_dict) - barrier_base_width = design_dict.get("kerb_bottom_width", 550) - elif median_type == "RCC Crash Barrier": - barrier_shape = create_rcc_crash_barrier_median(span_length, design_dict) - barrier_base_width = design_dict.get("barrier_bottom_width", 450) - elif median_type == "Metallic Crash Barrier": - barrier_shape = create_metallic_crash_barrier_median(span_length, design_dict) - barrier_base_width = design_dict.get("kerb_bottom_width", 550) - else: - raise ValueError(f"Invalid median_type: {median_type}") - - - offset = (median_total_width ) - (barrier_base_width / 2.0) + # Centralized single barrier + central_barrier = _translate( + barrier_shape, + x=0.0, + y=carriageway_center_y, + z=deck_top_z + ) + median_barriers.append(central_barrier) + return median_barriers - - left_barrier = _mirror_y(barrier_shape) - left_barrier = _translate( - left_barrier, - x=0.0, - y=carriageway_center_y - offset, - z=deck_top_z - ) - median_barriers.append(left_barrier) + # CASE 2: RCC or METALLIC (Double Side mirrored) + elif median_type in ("RCC Crash Barrier", "Metallic Crash Barrier"): + if median_type == "RCC Crash Barrier": + barrier_shape = create_rcc_crash_barrier_median(span_length, design_dict) + barrier_base_width = design_dict.get("barrier_bottom_width", 450) + else: # Metallic + barrier_shape = create_metallic_crash_barrier_median(span_length, design_dict) + barrier_base_width = design_dict.get("kerb_bottom_width", 550) + + # Calculate offset so outer edges are at median_total_width / 2 + # offset is the distance from center to barrier center + offset = (median_total_width - barrier_base_width) / 2.0 - - right_barrier = _translate( - barrier_shape, - x=0.0, - y=carriageway_center_y + offset, - z=deck_top_z - ) - median_barriers.append(right_barrier) + left_barrier = _mirror_y(barrier_shape) + left_barrier = _translate( + left_barrier, + x=0.0, + y=carriageway_center_y - offset, + z=deck_top_z + ) + median_barriers.append(left_barrier) - return median_barriers + right_barrier = _translate( + barrier_shape, + x=0.0, + y=carriageway_center_y + offset, + z=deck_top_z + ) + median_barriers.append(right_barrier) + return median_barriers + else: + raise ValueError(f"Invalid median_type: {median_type}") diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 555252124..03c7cf8b9 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -77,20 +77,17 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.carriageway_width = 12000 self.deck_thickness = 400 - self.footpath_config = "LEFT" # NONE / LEFT / RIGHT / BOTH - self.crash_barrier_base_width = 600 + self.footpath_config = "NONE" # NONE / LEFT / RIGHT / BOTH self.footpath_width = 1500 self.railing_width = 300 # CRASH BARRIER PARAMETERS - self.crash_barrier_width = 175 - self.crash_barrier_height = 900 self.barrier_type = "Semi-Rigid" # "Rigid" or "Semi-Rigid" self.crash_barrier_subtype = "Double W-beam" # "IRC-5R", "High Containment", "Single W-beam", "Double W-beam" # MEDIAN PARAMETERS self.enable_median = True - self.median_type = "Metallic Crash Barrier" # "Raised Kerb", "RCC Crash Barrier", "Metallic Crash Barrier" + self.median_type = "Raised Kerb" # "Raised Kerb", "RCC Crash Barrier", "Metallic Crash Barrier" # RAILING PARAMETERS self.railing_height = 1200 @@ -210,21 +207,7 @@ def _translate(shape, dx=0, dy=0, dz=0): top_bracket=self.k_top_bracket ) - # 5. DECK SYSTEM (USES TOP-OF-GIRDER Z) - deck_out = build_deck( - span_length_L=self.span_length_L, - girder_section_d=girder_top_z, - deck_thickness=self.deck_thickness, - - footpath_config=self.footpath_config, - carriageway_width=self.carriageway_width, - crash_barrier_base_width=self.crash_barrier_base_width, - footpath_width=self.footpath_width, - railing_width=self.railing_width - ) - - # 6. CRASH BARRIERS - + # 5. IRC 5 SPECIFICATIONS (CRASH BARRIER) from osdagbridge.core.utils.codes.irc5_2015 import IRC5_2015 from osdagbridge.core.utils.common import ( KEY_CRASH_BARRIER_TYPE, @@ -235,20 +218,16 @@ def _translate(shape, dx=0, dy=0, dz=0): KEY_MEDIAN_TYPE ) - # IRC DESIGN (CRASH BARRIER) # Map barrier_type string to KEY_CRASH_BARRIER_TYPE index barrier_type_map = {"Flexible": 0, "Semi-Rigid": 1, "Rigid": 2} barrier_idx = barrier_type_map.get(self.barrier_type, 2) - # Map crash_barrier_subtype for rigid barriers + # Map crash_barrier_subtype rigid_subtype_map = {"IRC-5R": 0, "High Containment": 1} metallic_subtype_map = {"Single W-beam": 0, "Double W-beam": 1} if self.barrier_type == "Rigid": - # Use rigid barrier specifications - # Get the crash barrier subtype (IRC-5R or High Containment) rigid_subtype_idx = rigid_subtype_map.get(self.crash_barrier_subtype, 0) - if self.footpath_config == "NONE": design_dict = IRC5_2015.cl_109_6_3_shapes( barrier_type=KEY_CRASH_BARRIER_TYPE[barrier_idx], @@ -258,8 +237,6 @@ def _translate(shape, dx=0, dy=0, dz=0): crash_barrier_type=KEY_RIGID_CRASH_BARRIER_TYPE[rigid_subtype_idx] ) else: - # For footpath cases, we still need to pass the crash_barrier_type - # to get the correct dimensions (IRC-5R vs High Containment) design_dict = IRC5_2015.cl_109_6_3_shapes( barrier_type=KEY_CRASH_BARRIER_TYPE[barrier_idx], footpath=KEY_FOOTPATH[1], @@ -267,16 +244,35 @@ def _translate(shape, dx=0, dy=0, dz=0): design_dict={}, crash_barrier_type=KEY_RIGID_CRASH_BARRIER_TYPE[rigid_subtype_idx] ) + # For rigid, the base width is in "crash_barrier_width" + actual_base_width = design_dict.get("crash_barrier_width", 450) else: - # Use semi-rigid/metallic barrier specifications + # Semi-rigid / Metallic + metallic_subtype_idx = metallic_subtype_map.get(self.crash_barrier_subtype, 0) design_dict = IRC5_2015.cl_109_6_3_shapes( - barrier_type=KEY_CRASH_BARRIER_TYPE[1], # Semi-rigid + barrier_type=KEY_CRASH_BARRIER_TYPE[1], footpath=KEY_FOOTPATH[0] if self.footpath_config == "NONE" else KEY_FOOTPATH[1], railing_type=None, design_dict={}, - crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_map.get(self.crash_barrier_subtype, 0)] + crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_idx] ) + # For semi-rigid/metallic, the kerb bottom width is the base width + actual_base_width = design_dict.get("kerb_bottom_width", 550) + # 6. DECK SYSTEM (USES TOP-OF-GIRDER Z) + deck_out = build_deck( + span_length_L=self.span_length_L, + girder_section_d=girder_top_z, + deck_thickness=self.deck_thickness, + + footpath_config=self.footpath_config, + carriageway_width=self.carriageway_width, + crash_barrier_base_width=actual_base_width, + footpath_width=self.footpath_width, + railing_width=self.railing_width + ) + + # 7. CRASH BARRIER PLACEMENT crash_barriers = build_crash_barriers( span_length_L=self.span_length_L, deck_top_z=deck_out["deck_top_z"], @@ -288,19 +284,22 @@ def _translate(shape, dx=0, dy=0, dz=0): barrier_type=self.barrier_type ) - # 7. MEDIAN + # 8. MEDIAN median_barriers = [] if self.enable_median: # Get median design specifications from IRC5_2015 median_type_map = {"Raised Kerb": 0, "RCC Crash Barrier": 1, "Metallic Crash Barrier": 2} median_idx = median_type_map.get(self.median_type, 1) + # Map metallic subtype for median + metallic_subtype_idx = metallic_subtype_map.get(self.crash_barrier_subtype, 0) + median_design_dict = IRC5_2015.cl_109_6_3_shapes( barrier_type=KEY_MEDIAN_TYPE[median_idx], footpath=KEY_FOOTPATH[0], railing_type=None, design_dict={}, - crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[0] if self.median_type == "Metallic Crash Barrier" else None + crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_idx] if self.median_type == "Metallic Crash Barrier" else None ) median_barriers = build_median( From 0999e363f8d9dc437eca1b008c1c32de9a932f01 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 1 Feb 2026 18:57:22 +0530 Subject: [PATCH 021/225] Corrected the placement of post channel in metallic type crash barrier --- .../super_structure/crash_barrier/builder.py | 10 +- .../super_structure/median/builder.py | 385 +++++++++--------- 2 files changed, 190 insertions(+), 205 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py index 28d7caea1..af03608ac 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py @@ -159,8 +159,8 @@ def create_semi_rigid_metallic_barrier( ).Shape() # POSTS (ISMC 150) - post_depth = design_dict.get("post_depth", 150) # Along X (Bridge Length) - post_width = design_dict.get("post_width", 75) # Along Y (Transverse) + post_depth = design_dict.get("post_depth", 100) # Along X (Bridge Length) + post_width = design_dict.get("post_width", 150) # Along Y (Transverse) post_web_thk = design_dict.get("post_web_thickness", 5.0) post_flange_thk = design_dict.get("post_flange_thickness", 7.8) post_offset_from_edge = design_dict.get("post_offset_from_edge", 75) # From outer edge @@ -229,19 +229,17 @@ def create_vertical_channel(h, d, w, tw, tf): ) spacer_depth = design_dict.get("spacer_depth", 150) - spacer_width = design_dict.get("spacer_width", 75) + spacer_width = design_dict.get("spacer_width", 200) spacer_web_thk = design_dict.get("spacer_web_thickness", 5.0) spacer_flange_thk = design_dict.get("spacer_flange_thickness", 7.8) spacers_combined = None - # ========================================================= # W-BEAM - # ========================================================= # Corrected Geometry: Vertical orientation (W-profile in Y-Z plane) W_BEAM_HEIGHT = spacer_height # Aligned with spacer height as requested - W_BEAM_DEPTH = 83.0 # Standard W-beam depth + W_BEAM_DEPTH = 60.0 # Standard W-beam depth W_BEAM_THICKNESS = design_dict.get("w_beam_thickness", 3.0) def make_w_beam_wire(): diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index 8b08e6210..d921ed764 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -16,6 +16,7 @@ from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox, BRepPrimAPI_MakePrism from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse import math +import numpy as np def _translate(shape, x=0.0, y=0.0, z=0.0): @@ -107,11 +108,6 @@ def create_rcc_crash_barrier_median(length, design_dict): Single New Jersey barrier profile (will be mirrored for the other side). Uses the same IRC-5R profile geometry as the edge crash barrier. """ -def create_rcc_crash_barrier_median(length, design_dict): - """ - Creates RCC crash barrier median (IRC Fig 5b). - Uses the same IRC-5R profile geometry as the edge crash barrier. - """ barrier_height = design_dict.get("barrier_height", 900) barrier_top_width = design_dict.get("barrier_top_width", 175) barrier_bottom_width = design_dict.get("barrier_bottom_width", 450) @@ -168,19 +164,23 @@ def create_rcc_crash_barrier_median(length, design_dict): solid = BRepPrimAPI_MakePrism(face, gp_Vec(length, 0, 0)).Shape() return solid - - -def create_metallic_crash_barrier_median(length, design_dict): + +def create_metallic_barrier_system(length, design_dict, kerb_top_width, kerb_height): """ - Creates metallic crash barrier median (IRC Fig 5c). - Single side (will be mirrored). + Creates metallic crash barrier system (IRC Fig 5c) - posts, spacers, and W-beams only. + Single side system (will be positioned on each side of the central kerb). + Kerb is created separately. + + Args: + length: Length of the barrier along the span + design_dict: Design parameters + kerb_top_width: Width of the kerb top (for positioning) + kerb_height: Height of the kerb (needed for positioning) + + Returns: + Combined shape of posts, spacers, and W-beams """ - # Kerb dimensions - kerb_height = design_dict.get("kerb_height", 100) - kerb_top_width = design_dict.get("kerb_top_width", 500) - kerb_bottom_width = design_dict.get("kerb_bottom_width", 550) - # Post dimensions post_height = design_dict.get("post_height", 950) post_spacing = design_dict.get("post_spacing", 1000) @@ -190,231 +190,133 @@ def create_metallic_crash_barrier_median(length, design_dict): number_of_w_beams = design_dict.get("number_of_w_beams", 1) w_beam_thickness = design_dict.get("w_beam_thickness", 3.0) - # Guard rail heights (Computed dynamically below) - # guard_rail_height_single = 620 - # guard_rail_height_double_lower = 330 - # guard_rail_height_double_upper = 805 - - # CREATE KERB - z0 = 0.0 - z1 = kerb_height - - y_bottom_l = -kerb_bottom_width / 2.0 - y_bottom_r = kerb_bottom_width / 2.0 - y_top_l = -kerb_top_width / 2.0 - y_top_r = kerb_top_width / 2.0 - - p1 = gp_Pnt(0, y_bottom_l, z0) - p2 = gp_Pnt(0, y_bottom_r, z0) - p3 = gp_Pnt(0, y_top_r, z1) - p4 = gp_Pnt(0, y_top_l, z1) - - kerb_poly = BRepBuilderAPI_MakePolygon() - for p in (p1, p2, p3, p4): - kerb_poly.Add(p) - kerb_poly.Close() - - kerb_face = BRepBuilderAPI_MakeFace(kerb_poly.Wire()).Face() - kerb_solid = BRepPrimAPI_MakePrism(kerb_face, gp_Vec(length, 0, 0)).Shape() - # CREATE POSTS (ISMC 150 as per IRC 5 Fig 5c) - post_depth = design_dict.get("post_depth", 150) - post_width = design_dict.get("post_width", 75) + post_depth = design_dict.get("post_depth", 100) + post_width = design_dict.get("post_width", 150) post_web_thk = design_dict.get("post_web_thickness", 5.0) post_flange_thk = design_dict.get("post_flange_thickness", 7.8) post_offset = design_dict.get("post_offset_from_edge", 75) # From kerb edge num_posts = int(length / post_spacing) + 1 - posts_combined = None - for i in range(num_posts): - x_pos = i * post_spacing - if x_pos > length: - break - - # Post on outer side (road facing) - # Center of post in Y - # For Median: width (75) is along Y, depth (150) is along X. - post_y_center = kerb_top_width / 2.0 - post_offset - post_width / 2.0 - - # Create vertical channel post - def create_vertical_channel(h, d, w, tw, tf): - x_web_back = -tw / 2.0 - x_web_front = tw / 2.0 - x_flange_tip = d - tw / 2.0 - y_left = -w / 2.0 - y_right = w / 2.0 - pts = [ - gp_Pnt(x_flange_tip, y_left, 0), - gp_Pnt(x_web_back, y_left, 0), - gp_Pnt(x_web_back, y_right, 0), - gp_Pnt(x_flange_tip, y_right, 0), - gp_Pnt(x_flange_tip, y_right - tf, 0), - gp_Pnt(x_web_front, y_right - tf, 0), - gp_Pnt(x_web_front, y_left + tf, 0), - gp_Pnt(x_flange_tip, y_left + tf, 0) - ] - poly = BRepBuilderAPI_MakePolygon() - for p in pts: - poly.Add(p) - poly.Close() - face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() - return BRepPrimAPI_MakePrism(face, gp_Vec(0, 0, h)).Shape() - - post_solid = create_vertical_channel(post_height, post_depth, post_width, post_web_thk, post_flange_thk) - - - tr_rot = gp_Trsf() - tr_rot.SetRotation(gp_Ax1(gp_Pnt(0,0,0), gp_Dir(0,0,1)), 0.0) - post_solid = BRepBuilderAPI_Transform(post_solid, tr_rot, True).Shape() - - post_solid = _translate(post_solid, x=x_pos, y=post_y_center, z=kerb_height) - - if posts_combined is None: - posts_combined = post_solid - else: - posts_combined = BRepAlgoAPI_Fuse(posts_combined, post_solid).Shape() - - # CREATE SPACER CHANNELS PARAMETERS (ISMC 150) - spacer_width = design_dict.get("spacer_width", 75) + # SPACER PARAMETERS + spacer_width = design_dict.get("spacer_width", 200) spacer_depth = design_dict.get("spacer_depth", 150) spacer_web_thk = design_dict.get("spacer_web_thickness", 5.0) spacer_flange_thk = design_dict.get("spacer_flange_thickness", 7.8) - spacers_combined = None - - # CREATE W-BEAMS - import numpy as np - + # W-BEAM PARAMETERS W_BEAM_HEIGHT = spacer_height # Aligned with spacer height - W_BEAM_DEPTH = 83.0 # Standard W-beam depth + W_BEAM_DEPTH = 83.0 # Standard W-beam depth W_BEAM_THICKNESS = w_beam_thickness + # Gaussian parameters for wave profile + sigma = W_BEAM_HEIGHT / 10.0 + mu1 = W_BEAM_HEIGHT * 0.25 + mu2 = W_BEAM_HEIGHT * 0.75 + amp = W_BEAM_DEPTH * 1.5 # Effective depth of the W-beam wave + def make_w_beam_wire(): points = 40 zs = np.linspace(0, W_BEAM_HEIGHT, points) - - # Double Wave Profile - # Two guassians or sin waves in Y based on Z - - # Sum of gaussians as before, but on Z - sigma = W_BEAM_HEIGHT / 6.0 - mu1 = W_BEAM_HEIGHT * 0.25 - mu2 = W_BEAM_HEIGHT * 0.75 - amp = W_BEAM_DEPTH - poly = BRepBuilderAPI_MakePolygon() - for z in zs: - # Gaussian bumps - y = (amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + - amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2))) - - poly.Add(gp_Pnt(0.0, y, z)) - - # Close the back face (flat at y=0) to form a solid cross-section + y_wave = (amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2))) + poly.Add(gp_Pnt(0.0, y_wave, z)) + # Close the back face (flat at local y=0) to form a solid cross-section poly.Add(gp_Pnt(0.0, 0.0, W_BEAM_HEIGHT)) poly.Add(gp_Pnt(0.0, 0.0, 0.0)) poly.Close() - return poly.Wire() + + # ARRANGEMENT CALCULATIONS + # Right side template: Post -> Spacer -> W-beam -> 75mm gap -> Kerb edge + # Kerb edge is at +kerb_top_width / 2.0 + gap_from_edge = 75.0 + kerb_edge_y = kerb_top_width / 2.0 + + # Beam peak face should be at gap_from_edge from kerb edge + beam_back_y = kerb_edge_y - gap_from_edge - amp + # Spacer is attached to the back of the beam + spacer_y_center = beam_back_y - spacer_width / 2.0 + + # Post is attached to the back of the spacer + post_y_center = beam_back_y - spacer_width - post_width / 2.0 + + # GENERATE POSTS + posts_combined = None + for i in range(num_posts): + x_pos = i * post_spacing + if x_pos > length: break + + def create_vertical_channel(h, d, w, tw, tf): + x_web_back, x_web_front = -tw / 2.0, tw / 2.0 + x_flange_tip = d - tw / 2.0 + y_left, y_right = -w / 2.0, w / 2.0 + pts = [ + gp_Pnt(x_flange_tip, y_left, 0), gp_Pnt(x_web_back, y_left, 0), + gp_Pnt(x_web_back, y_right, 0), gp_Pnt(x_flange_tip, y_right, 0), + gp_Pnt(x_flange_tip, y_right - tf, 0), gp_Pnt(x_web_front, y_right - tf, 0), + gp_Pnt(x_web_front, y_left + tf, 0), gp_Pnt(x_flange_tip, y_left + tf, 0) + ] + poly = BRepBuilderAPI_MakePolygon() + for p in pts: poly.Add(p) + poly.Close() + return BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(poly.Wire()).Face(), gp_Vec(0, 0, h)).Shape() + + post_solid = create_vertical_channel(post_height, post_depth, post_width, post_web_thk, post_flange_thk) + post_solid = _translate(post_solid, x=x_pos, y=post_y_center, z=kerb_height) + posts_combined = post_solid if posts_combined is None else BRepAlgoAPI_Fuse(posts_combined, post_solid).Shape() + + # GENERATE BEAMS AND SPACERS + spacers_combined = None beams_combined = None if number_of_w_beams == 1: - # Top of beam/spacer aligns with post top beam_heights = [post_height - spacer_height / 2.0] else: - # Upper beam/spacer starts at post top h_upper = post_height - spacer_height / 2.0 - # Lower beam/spacer comes after 145mm gap h_lower = h_upper - spacer_height - 145 beam_heights = [h_lower, h_upper] for beam_h in beam_heights[:number_of_w_beams]: - # Beam Z is bottom of the beam beam_z = kerb_height + beam_h - W_BEAM_HEIGHT / 2.0 - - # Post Position - post_y_center = kerb_top_width / 2.0 - post_offset - post_width / 2.0 - - # SPACER GENERATION (Per Beam) - # Spacer Center aligned with Beam Center - # Spacer Z (base) = kerb_height + beam_h - spacer_height / 2.0 spacer_z = kerb_height + beam_h - spacer_height / 2.0 - - # Spacer Y ends at: post_y_center + post_width/2 + spacer_width - spacer_y_center = post_y_center + post_width/2.0 + spacer_width/2.0 + # Spacers (one per post) for i in range(num_posts): x_pos = i * post_spacing - if x_pos > length: - break + if x_pos > length: break def create_vertical_spacer(h, d, w, tw, tf): - x_web_back = -tw / 2.0 - x_web_front = tw / 2.0 + x_web_back, x_web_front = -tw / 2.0, tw / 2.0 x_flange_tip = d - tw / 2.0 - y_left = -w / 2.0 - y_right = w / 2.0 + y_left, y_right = -w / 2.0, w / 2.0 pts = [ - gp_Pnt(x_flange_tip, y_left, 0), - gp_Pnt(x_web_back, y_left, 0), - gp_Pnt(x_web_back, y_right, 0), - gp_Pnt(x_flange_tip, y_right, 0), - gp_Pnt(x_flange_tip, y_right - tf, 0), - gp_Pnt(x_web_front, y_right - tf, 0), - gp_Pnt(x_web_front, y_left + tf, 0), - gp_Pnt(x_flange_tip, y_left + tf, 0) + gp_Pnt(x_flange_tip, y_left, 0), gp_Pnt(x_web_back, y_left, 0), + gp_Pnt(x_web_back, y_right, 0), gp_Pnt(x_flange_tip, y_right, 0), + gp_Pnt(x_flange_tip, y_right - tf, 0), gp_Pnt(x_web_front, y_right - tf, 0), + gp_Pnt(x_web_front, y_left + tf, 0), gp_Pnt(x_flange_tip, y_left + tf, 0) ] poly = BRepBuilderAPI_MakePolygon() - for p in pts: - poly.Add(p) + for p in pts: poly.Add(p) poly.Close() - face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() - return BRepPrimAPI_MakePrism(face, gp_Vec(0, 0, h)).Shape() + return BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(poly.Wire()).Face(), gp_Vec(0, 0, h)).Shape() spacer_solid = create_vertical_spacer(spacer_height, spacer_depth, spacer_width, spacer_web_thk, spacer_flange_thk) - - # Rotate 0 deg (C faces +X) - tr_rot = gp_Trsf() - tr_rot.SetRotation(gp_Ax1(gp_Pnt(0,0,0), gp_Dir(0,0,1)), 0.0) - spacer_solid = BRepBuilderAPI_Transform(spacer_solid, tr_rot, True).Shape() - spacer_solid = _translate(spacer_solid, x=x_pos, y=spacer_y_center, z=spacer_z) - - if spacers_combined is None: - spacers_combined = spacer_solid - else: - spacers_combined = BRepAlgoAPI_Fuse(spacers_combined, spacer_solid).Shape() - + spacers_combined = spacer_solid if spacers_combined is None else BRepAlgoAPI_Fuse(spacers_combined, spacer_solid).Shape() - - - beam_y_pos = spacer_y_center + spacer_width / 2.0 - - # Create Wire -> Face -> Solid + # Beam solid wire = make_w_beam_wire() - beam_face = BRepBuilderAPI_MakeFace(wire).Face() - beam_solid = BRepPrimAPI_MakePrism(beam_face, gp_Vec(length, 0, 0)).Shape() - - # Translate to position - beam_solid = _translate( - beam_solid, - x=0, - y=beam_y_pos, - z=beam_z - ) - - if beams_combined is None: - beams_combined = beam_solid - else: - beams_combined = BRepAlgoAPI_Fuse(beams_combined, beam_solid).Shape() - - # COMBINE - combined = kerb_solid - if posts_combined is not None: - combined = BRepAlgoAPI_Fuse(combined, posts_combined).Shape() + beam_solid = BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(wire).Face(), gp_Vec(length, 0, 0)).Shape() + beam_solid = _translate(beam_solid, x=0, y=beam_back_y, z=beam_z) + beams_combined = beam_solid if beams_combined is None else BRepAlgoAPI_Fuse(beams_combined, beam_solid).Shape() + + # COMBINE all components (posts, spacers, beams) + combined = posts_combined if spacers_combined is not None: combined = BRepAlgoAPI_Fuse(combined, spacers_combined).Shape() if beams_combined is not None: @@ -423,6 +325,49 @@ def create_vertical_spacer(h, d, w, tw, tf): return combined +def create_median_kerb(length, median_width, design_dict): + """ + Creates a single continuous median kerb with specified total width. + Used for metallic crash barrier median as per IRC Fig 5c. + + Args: + length: Length of the kerb along the span + median_width: Total width of the median (center to center distance) + design_dict: Design parameters containing kerb dimensions + + Returns: + Kerb solid centered at y=0 + """ + kerb_height = design_dict.get("kerb_height", 100) + # Use the median_width as the total kerb width + kerb_top_width = median_width + kerb_bottom_width = median_width + 50 # Slight taper at base + + z0 = 0.0 + z1 = kerb_height + + y_bottom_l = -kerb_bottom_width / 2.0 + y_bottom_r = kerb_bottom_width / 2.0 + y_top_l = -kerb_top_width / 2.0 + y_top_r = kerb_top_width / 2.0 + + # Trapezoidal profile (counter-clockwise) + p1 = gp_Pnt(0, y_bottom_l, z0) + p2 = gp_Pnt(0, y_bottom_r, z0) + p3 = gp_Pnt(0, y_top_r, z1) + p4 = gp_Pnt(0, y_top_l, z1) + + poly = BRepBuilderAPI_MakePolygon() + for p in (p1, p2, p3, p4): + poly.Add(p) + poly.Close() + + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + solid = BRepPrimAPI_MakePrism(face, gp_Vec(length, 0, 0)).Shape() + + return solid + + def build_median( span_length, deck_top_z, @@ -433,7 +378,9 @@ def build_median( """ Build median barriers. - Raised Kerb: Creates ONE central barrier. - - RCC & Metallic: Creates TWO barriers separated by the median width. + - RCC Crash Barrier: Creates TWO barriers separated by the median width. + - Metallic Crash Barrier: Creates ONE continuous kerb with TWO metallic barrier systems + (posts + spacers + W-beams) on either side. """ median_barriers = [] @@ -454,14 +401,10 @@ def build_median( median_barriers.append(central_barrier) return median_barriers - # CASE 2: RCC or METALLIC (Double Side mirrored) - elif median_type in ("RCC Crash Barrier", "Metallic Crash Barrier"): - if median_type == "RCC Crash Barrier": - barrier_shape = create_rcc_crash_barrier_median(span_length, design_dict) - barrier_base_width = design_dict.get("barrier_bottom_width", 450) - else: # Metallic - barrier_shape = create_metallic_crash_barrier_median(span_length, design_dict) - barrier_base_width = design_dict.get("kerb_bottom_width", 550) + # CASE 2: RCC CRASH BARRIER (Double Side mirrored) + elif median_type == "RCC Crash Barrier": + barrier_shape = create_rcc_crash_barrier_median(span_length, design_dict) + barrier_base_width = design_dict.get("barrier_bottom_width", 450) # Calculate offset so outer edges are at median_total_width / 2 # offset is the distance from center to barrier center @@ -484,5 +427,49 @@ def build_median( ) median_barriers.append(right_barrier) return median_barriers + + # CASE 3: METALLIC CRASH BARRIER (Single continuous kerb + two barrier systems) + elif median_type == "Metallic Crash Barrier": + kerb_height = design_dict.get("kerb_height", 100) + + # Create single continuous kerb with total width = median_width + kerb_shape = create_median_kerb(span_length, median_total_width, design_dict) + kerb_positioned = _translate( + kerb_shape, + x=0.0, + y=carriageway_center_y, + z=deck_top_z + ) + median_barriers.append(kerb_positioned) + + # Create metallic barrier system (posts, spacers, W-beams) for one side + barrier_system = create_metallic_barrier_system( + span_length, + design_dict, + median_total_width, # Pass the total median width as kerb_top_width + kerb_height + ) + + # Position left barrier system (mirrored) + left_barrier_system = _mirror_y(barrier_system) + left_barrier_system = _translate( + left_barrier_system, + x=0.0, + y=carriageway_center_y, + z=deck_top_z + ) + median_barriers.append(left_barrier_system) + + # Position right barrier system + right_barrier_system = _translate( + barrier_system, + x=0.0, + y=carriageway_center_y, + z=deck_top_z + ) + median_barriers.append(right_barrier_system) + + return median_barriers + else: - raise ValueError(f"Invalid median_type: {median_type}") + raise ValueError(f"Invalid median_type: {median_type}") \ No newline at end of file From 5d8058bfcbd57dae661fe3062099f97e2a28f7f9 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 1 Feb 2026 18:58:51 +0530 Subject: [PATCH 022/225] Added different colors for flange and web of the girder --- .../plate_girder/cad_generator.py | 28 +++++++++++++++---- src/osdagbridge/desktop/ui/cad_3d.py | 25 ++++++++++++----- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 03c7cf8b9..e2b86465b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -87,7 +87,7 @@ def __init__(self, bridge_type=KEY_MODULE_PG): # MEDIAN PARAMETERS self.enable_median = True - self.median_type = "Raised Kerb" # "Raised Kerb", "RCC Crash Barrier", "Metallic Crash Barrier" + self.median_type = "Metallic Crash Barrier" # "Raised Kerb", "RCC Crash Barrier", "Metallic Crash Barrier" # RAILING PARAMETERS self.railing_height = 1200 @@ -156,16 +156,29 @@ def _translate(shape, dx=0, dy=0, dz=0): girders = [] stiffeners = [] + girder_web = [] + girder_flanges = [] + total_width = (self.num_girders - 1) * self.girder_spacing for i in range(self.num_girders): y_offset = (i * self.girder_spacing) - (total_width / 2) - # Web + flanges - for part in ("web", "top_flange", "bottom_flange"): - girders.append( - _translate(pg[part], dy=y_offset) - ) + # Web + web = _translate(pg["web"], dy=y_offset) + girders.append(web) + girder_web.append(web) + + # Top flange + top_flange = _translate(pg["top_flange"], dy=y_offset) + girders.append(top_flange) + girder_flanges.append(top_flange) + + # Bottom flange + bottom_flange = _translate(pg["bottom_flange"], dy=y_offset) + girders.append(bottom_flange) + girder_flanges.append(bottom_flange) + # Stiffeners for stiff in pg["stiffeners"]: @@ -324,6 +337,9 @@ def _translate(shape, dx=0, dy=0, dz=0): # FINAL RETURN return { "girders": girders, + "girder_web": girder_web, + "girder_flanges": girder_flanges, + "stiffeners": stiffeners, "cross_bracings": cross_bracings, diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index 1abc49c3a..cd9a353f1 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -134,10 +134,11 @@ def load_bridge(self): display.EraseAll() # COLORS - GIRDER_COLOR = Quantity_Color(72/255, 72/255, 54/255, Quantity_TOC_RGB) - STIFFENER_COLOR = Quantity_Color(30/255, 30/255, 30/255, Quantity_TOC_RGB) + WEB_COLOR = Quantity_Color(47/255.0, 47/255.0, 35/255.0, Quantity_TOC_RGB) + FLANGE_COLOR = Quantity_Color(134/255.0, 134/255.0, 100/255.0, Quantity_TOC_RGB) + STIFFENER_COLOR = Quantity_Color(72/255, 72/255, 54/255, Quantity_TOC_RGB) DECK_COLOR = Quantity_Color(180/255, 180/255, 180/255, Quantity_TOC_RGB) - BARRIER_COLOR = Quantity_Color(120/255, 120/255, 120/255, Quantity_TOC_RGB) + BARRIER_COLOR = Quantity_Color(40/255, 40/255, 40/255, Quantity_TOC_RGB) #Quantity_Color(120/255, 120/255, 120/255, Quantity_TOC_RGB) BRACING_COLOR = Quantity_Color(60/255, 60/255, 60/255, Quantity_TOC_RGB) # HELPER @@ -164,13 +165,23 @@ def display_and_register(shapes, key, label, color): self.viewer.model_ais_objects = {} + # PLATE GIRDER (WEB + FLANGES SEPARATE COLORS) + display_and_register( - cad_data.get("girders", []), - "Girder", - "Girder", - GIRDER_COLOR + cad_data.get("girder_web", []), + "Girder Web", + "Girder Web", + WEB_COLOR ) + display_and_register( + cad_data.get("girder_flanges", []), + "Girder Flange", + "Girder Flange", + FLANGE_COLOR + ) + + display_and_register( cad_data.get("stiffeners", []), "Stiffener", From b13ce85f09e9267cb11583dfc559dfcd0232e85f Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 1 Feb 2026 19:22:34 +0530 Subject: [PATCH 023/225] Return W beam as a separate shape and added a color to the beam --- .../super_structure/crash_barrier/builder.py | 57 ++++++++----------- .../super_structure/median/builder.py | 42 ++++++-------- .../plate_girder/cad_generator.py | 36 +++++++++++- src/osdagbridge/desktop/ui/cad_3d.py | 17 +++++- 4 files changed, 89 insertions(+), 63 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py index af03608ac..f5d13fe23 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py @@ -339,20 +339,19 @@ def make_w_beam_wire(): else BRepAlgoAPI_Fuse(beams_combined, beam_solid).Shape() ) - # COMBINE ALL - combined = kerb_solid - if posts_combined: - combined = BRepAlgoAPI_Fuse(combined, posts_combined).Shape() - if spacers_combined: - combined = BRepAlgoAPI_Fuse(combined, spacers_combined).Shape() - if beams_combined: - combined = BRepAlgoAPI_Fuse(combined, beams_combined).Shape() - # IF RIGHT SIDE: MIRROR + res = { + "kerb": kerb_solid, + "posts": posts_combined, + "spacers": spacers_combined, + "w_beams": beams_combined + } + if side.upper() == "RIGHT": - combined = mirror_y(combined) + res = {k: mirror_y(v) for k, v in res.items() if v} + + return res - return combined @@ -500,37 +499,31 @@ def build_crash_barriers( design_dict=design_dict, side="LEFT" ) + + crash_barriers.append(translate(right_shape, y=y_r, z=deck_top_z)) + crash_barriers.append(translate(left_shape, y=y_l, z=deck_top_z)) + elif barrier_type == "Semi-Rigid": - right_shape = create_semi_rigid_metallic_barrier( + right_parts = create_semi_rigid_metallic_barrier( length=span_length_L, design_dict=design_dict, side="RIGHT" ) - left_shape = create_semi_rigid_metallic_barrier( + + left_parts = create_semi_rigid_metallic_barrier( length=span_length_L, design_dict=design_dict, side="LEFT" ) + + # Apply translations and store as dictionaries for coloring + right_dict = {k: translate(v, y=y_r, z=deck_top_z) for k, v in right_parts.items() if v} + left_dict = {k: translate(v, y=y_l, z=deck_top_z) for k, v in left_parts.items() if v} + + crash_barriers.append(right_dict) + crash_barriers.append(left_dict) + else: raise ValueError(f"Invalid barrier_type: {barrier_type}. Use 'Rigid' or 'Semi-Rigid'") - # PLACE SHAPES - - crash_barriers.append( - translate( - right_shape, - y=y_r, - z=deck_top_z - ) - ) - - crash_barriers.append( - translate( - left_shape, - y=y_l, - z=deck_top_z - ) - ) - - return crash_barriers diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index d921ed764..57ee736ac 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -315,14 +315,11 @@ def create_vertical_spacer(h, d, w, tw, tf): beam_solid = _translate(beam_solid, x=0, y=beam_back_y, z=beam_z) beams_combined = beam_solid if beams_combined is None else BRepAlgoAPI_Fuse(beams_combined, beam_solid).Shape() - # COMBINE all components (posts, spacers, beams) - combined = posts_combined - if spacers_combined is not None: - combined = BRepAlgoAPI_Fuse(combined, spacers_combined).Shape() - if beams_combined is not None: - combined = BRepAlgoAPI_Fuse(combined, beams_combined).Shape() - - return combined + return { + "posts": posts_combined, + "spacers": spacers_combined, + "w_beams": beams_combined + } def create_median_kerb(length, median_width, design_dict): @@ -440,10 +437,10 @@ def build_median( y=carriageway_center_y, z=deck_top_z ) - median_barriers.append(kerb_positioned) + median_barriers.append({"kerb": kerb_positioned}) # Create metallic barrier system (posts, spacers, W-beams) for one side - barrier_system = create_metallic_barrier_system( + barrier_system_parts = create_metallic_barrier_system( span_length, design_dict, median_total_width, # Pass the total median width as kerb_top_width @@ -451,23 +448,18 @@ def build_median( ) # Position left barrier system (mirrored) - left_barrier_system = _mirror_y(barrier_system) - left_barrier_system = _translate( - left_barrier_system, - x=0.0, - y=carriageway_center_y, - z=deck_top_z - ) - median_barriers.append(left_barrier_system) + left_dict = { + k: _translate(_mirror_y(v), x=0.0, y=carriageway_center_y, z=deck_top_z) + for k, v in barrier_system_parts.items() if v + } + median_barriers.append(left_dict) # Position right barrier system - right_barrier_system = _translate( - barrier_system, - x=0.0, - y=carriageway_center_y, - z=deck_top_z - ) - median_barriers.append(right_barrier_system) + right_dict = { + k: _translate(v, x=0.0, y=carriageway_center_y, z=deck_top_z) + for k, v in barrier_system_parts.items() if v + } + median_barriers.append(right_dict) return median_barriers diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index e2b86465b..0e322ce12 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -83,7 +83,7 @@ def __init__(self, bridge_type=KEY_MODULE_PG): # CRASH BARRIER PARAMETERS self.barrier_type = "Semi-Rigid" # "Rigid" or "Semi-Rigid" - self.crash_barrier_subtype = "Double W-beam" # "IRC-5R", "High Containment", "Single W-beam", "Double W-beam" + self.crash_barrier_subtype = "Single W-beam" # "IRC-5R", "High Containment", "Single W-beam", "Double W-beam" # MEDIAN PARAMETERS self.enable_median = True @@ -286,7 +286,11 @@ def _translate(shape, dx=0, dy=0, dz=0): ) # 7. CRASH BARRIER PLACEMENT - crash_barriers = build_crash_barriers( + + crash_barrier_w_beams = [] + crash_barrier_other = [] + + crash_barriers_raw = build_crash_barriers( span_length_L=self.span_length_L, deck_top_z=deck_out["deck_top_z"], footpath_config=self.footpath_config, @@ -297,6 +301,19 @@ def _translate(shape, dx=0, dy=0, dz=0): barrier_type=self.barrier_type ) + crash_barriers = [] + + for cb in crash_barriers_raw: + if isinstance(cb, dict): + if cb.get("w_beams"): + crash_barrier_w_beams.append(cb["w_beams"]) + for k in ("kerb", "posts", "spacers"): + if cb.get(k): + crash_barrier_other.append(cb[k]) + crash_barriers.append(cb[k]) + else: + crash_barriers.append(cb) + # 8. MEDIAN median_barriers = [] if self.enable_median: @@ -315,13 +332,25 @@ def _translate(shape, dx=0, dy=0, dz=0): crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_idx] if self.median_type == "Metallic Crash Barrier" else None ) - median_barriers = build_median( + median_barriers_raw = build_median( span_length=self.span_length_L, deck_top_z=deck_out["deck_top_z"], carriageway_center_y=deck_out["carriageway_center_y"], design_dict=median_design_dict, median_type=self.median_type ) + + median_barriers = [] + for mb in median_barriers_raw: + if isinstance(mb, dict): + if mb.get("w_beams"): + crash_barrier_w_beams.append(mb["w_beams"]) + for k in ("kerb", "posts", "spacers"): + if mb.get(k): + crash_barrier_other.append(mb[k]) # Using same 'other' list for coloring + median_barriers.append(mb[k]) + else: + median_barriers.append(mb) # 8. RAILINGS railings = build_railings( @@ -349,6 +378,7 @@ def _translate(shape, dx=0, dy=0, dz=0): "total_deck_width": deck_out["total_deck_width"], "crash_barriers": crash_barriers, + "crash_barrier_w_beams": crash_barrier_w_beams, "median_barriers": median_barriers, "railings": railings } diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index cd9a353f1..601989be3 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -140,6 +140,9 @@ def load_bridge(self): DECK_COLOR = Quantity_Color(180/255, 180/255, 180/255, Quantity_TOC_RGB) BARRIER_COLOR = Quantity_Color(40/255, 40/255, 40/255, Quantity_TOC_RGB) #Quantity_Color(120/255, 120/255, 120/255, Quantity_TOC_RGB) BRACING_COLOR = Quantity_Color(60/255, 60/255, 60/255, Quantity_TOC_RGB) + WBEAM_COLOR = Quantity_Color(160/255, 160/255, 120/255, Quantity_TOC_RGB) + BARRIER_POST_COLOR = Quantity_Color(40/255, 40/255, 40/255, Quantity_TOC_RGB) + # HELPER def display_and_register(shapes, key, label, color): @@ -161,7 +164,7 @@ def display_and_register(shapes, key, label, color): self.viewer.model_ais_objects[key] = ais_list self.viewer.model_hover_labels[key] = label - # DISPLAY + REGISTER + self.viewer.model_ais_objects = {} @@ -216,13 +219,21 @@ def display_and_register(shapes, key, label, color): + display_and_register( + cad_data.get("crash_barrier_w_beams", []), + "Crash Barrier W-Beam", + "W-Beam", + WBEAM_COLOR + ) + display_and_register( cad_data.get("crash_barriers", []), "Crash Barrier", - "Crash Barrier", - BARRIER_COLOR + "Posts / Kerb", + BARRIER_POST_COLOR ) + display_and_register( cad_data.get("median_barriers", []), "Median", From 3994adcaa8817e92e1487f842184e874767d1e61 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 1 Feb 2026 22:20:14 +0530 Subject: [PATCH 024/225] Made W-Beam Hollow and improved the visual appearance --- .../super_structure/crash_barrier/builder.py | 86 ++++++++++++----- .../super_structure/median/builder.py | 96 +++++++++++++++---- 2 files changed, 140 insertions(+), 42 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py index f5d13fe23..79d388ef3 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py @@ -18,6 +18,7 @@ from OCC.Core.GCE2d import GCE2d_MakeArcOfCircle from OCC.Core.Geom import Geom_Plane from OCC.Core.gp import gp_Pln +import numpy as np import math @@ -241,35 +242,69 @@ def create_vertical_channel(h, d, w, tw, tf): W_BEAM_HEIGHT = spacer_height # Aligned with spacer height as requested W_BEAM_DEPTH = 60.0 # Standard W-beam depth W_BEAM_THICKNESS = design_dict.get("w_beam_thickness", 3.0) + + sigma = W_BEAM_HEIGHT / 10.0 + mu1 = W_BEAM_HEIGHT * 0.25 + mu2 = W_BEAM_HEIGHT * 0.75 + amp = W_BEAM_DEPTH * 1.5 - def make_w_beam_wire(): + from OCC.Core.GeomAPI import GeomAPI_PointsToBSpline + from OCC.Core.TColgp import TColgp_Array1OfPnt + from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeWire + from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge + + def make_w_beam_face(): points = 40 zs = np.linspace(0, W_BEAM_HEIGHT, points) + + # ---------- OUTER CURVE ---------- + outer_pts = TColgp_Array1OfPnt(1, points) + for i, z in enumerate(zs, start=1): + y_wave = ( + amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2)) + ) + outer_pts.SetValue(i, gp_Pnt(0.0, y_wave, z)) - # Double Wave Profile - # Two guassians or sin waves in Y based on Z - - # Sum of gaussians as before, but on Z - sigma = W_BEAM_HEIGHT / 10.0 - mu1 = W_BEAM_HEIGHT * 0.25 - mu2 = W_BEAM_HEIGHT * 0.75 - amp = W_BEAM_DEPTH * 1.5 - - poly = BRepBuilderAPI_MakePolygon() - - for z in zs: - # Gaussian bumps - y = (amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + - amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2))) - - poly.Add(gp_Pnt(0.0, y, z)) + y_top_outer = y_wave + y_bottom_outer = ( + amp * math.exp(-((zs[0] - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((zs[0] - mu2) ** 2) / (2 * sigma ** 2)) + ) + + outer_curve = GeomAPI_PointsToBSpline(outer_pts).Curve() + + # ---------- INNER CURVE (OFFSET) ---------- + inner_pts = TColgp_Array1OfPnt(1, points) + for i, z in enumerate(zs, start=1): + y_wave_inner = ( + amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2)) + ) - W_BEAM_THICKNESS + inner_pts.SetValue(i, gp_Pnt(0.0, y_wave_inner, z)) - # Close the back face (flat at y=0) to form a solid cross-section - poly.Add(gp_Pnt(0.0, 0.0, W_BEAM_HEIGHT)) - poly.Add(gp_Pnt(0.0, 0.0, 0.0)) - poly.Close() - - return poly.Wire() + y_top_inner = y_wave_inner + y_bottom_inner = ( + amp * math.exp(-((zs[0] - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((zs[0] - mu2) ** 2) / (2 * sigma ** 2)) + ) - W_BEAM_THICKNESS + + inner_curve = GeomAPI_PointsToBSpline(inner_pts).Curve() + + # ---------- COMBINE INTO CLOSED WIRE ---------- + wire = BRepBuilderAPI_MakeWire() + wire.Add(BRepBuilderAPI_MakeEdge(outer_curve).Edge()) + wire.Add(BRepBuilderAPI_MakeEdge( + gp_Pnt(0.0, y_top_outer, W_BEAM_HEIGHT), + gp_Pnt(0.0, y_top_inner, W_BEAM_HEIGHT) + ).Edge()) + wire.Add(BRepBuilderAPI_MakeEdge(inner_curve).Edge()) + wire.Add(BRepBuilderAPI_MakeEdge( + gp_Pnt(0.0, y_bottom_inner, 0.0), + gp_Pnt(0.0, y_bottom_outer, 0.0) + ).Edge()) + + return BRepBuilderAPI_MakeFace(wire.Wire()).Face() beams_combined = None @@ -321,8 +356,7 @@ def make_w_beam_wire(): # BEAM GENERATION beam_y_pos = spacer_y_center + spacer_width / 2.0 - wire = make_w_beam_wire() - beam_face = BRepBuilderAPI_MakeFace(wire).Face() + beam_face = make_w_beam_face() beam_solid = BRepPrimAPI_MakePrism( beam_face, gp_Vec(length, 0, 0) diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index 57ee736ac..aeadfb559 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -216,19 +216,70 @@ def create_metallic_barrier_system(length, design_dict, kerb_top_width, kerb_hei mu2 = W_BEAM_HEIGHT * 0.75 amp = W_BEAM_DEPTH * 1.5 # Effective depth of the W-beam wave - def make_w_beam_wire(): + from OCC.Core.GeomAPI import GeomAPI_PointsToBSpline + from OCC.Core.TColgp import TColgp_Array1OfPnt + from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeWire + from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge + + + def make_w_beam_face(): points = 40 zs = np.linspace(0, W_BEAM_HEIGHT, points) - poly = BRepBuilderAPI_MakePolygon() - for z in zs: - y_wave = (amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + - amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2))) - poly.Add(gp_Pnt(0.0, y_wave, z)) - # Close the back face (flat at local y=0) to form a solid cross-section - poly.Add(gp_Pnt(0.0, 0.0, W_BEAM_HEIGHT)) - poly.Add(gp_Pnt(0.0, 0.0, 0.0)) - poly.Close() - return poly.Wire() + + # ---------- OUTER CURVE ---------- + outer_pts = TColgp_Array1OfPnt(1, points) + for i, z in enumerate(zs, start=1): + y_wave = ( + amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2)) + ) + outer_pts.SetValue(i, gp_Pnt(0.0, y_wave, z)) + + y_top_outer = y_wave # Last y_wave value + y_bottom_outer = ( + amp * math.exp(-((zs[0] - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((zs[0] - mu2) ** 2) / (2 * sigma ** 2)) + ) + + outer_curve = GeomAPI_PointsToBSpline(outer_pts).Curve() + + # ---------- INNER CURVE (OFFSET) ---------- + inner_pts = TColgp_Array1OfPnt(1, points) + for i, z in enumerate(zs, start=1): + y_wave_inner = ( + amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2)) + ) - W_BEAM_THICKNESS + inner_pts.SetValue(i, gp_Pnt(0.0, y_wave_inner, z)) + + y_top_inner = y_wave_inner + y_bottom_inner = ( + amp * math.exp(-((zs[0] - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((zs[0] - mu2) ** 2) / (2 * sigma ** 2)) + ) - W_BEAM_THICKNESS + + inner_curve = GeomAPI_PointsToBSpline(inner_pts).Curve() + + # ---------- COMBINE INTO CLOSED WIRE ---------- + wire = BRepBuilderAPI_MakeWire() + # Outer curve (upwards) + wire.Add(BRepBuilderAPI_MakeEdge(outer_curve).Edge()) + # Top connecting edge + wire.Add(BRepBuilderAPI_MakeEdge( + gp_Pnt(0.0, y_top_outer, W_BEAM_HEIGHT), + gp_Pnt(0.0, y_top_inner, W_BEAM_HEIGHT) + ).Edge()) + # Inner curve (downwards) + wire.Add(BRepBuilderAPI_MakeEdge(inner_curve).Edge()) + # Bottom connecting edge + wire.Add(BRepBuilderAPI_MakeEdge( + gp_Pnt(0.0, y_bottom_inner, 0.0), + gp_Pnt(0.0, y_bottom_outer, 0.0) + ).Edge()) + + return BRepBuilderAPI_MakeFace(wire.Wire()).Face() + + # ARRANGEMENT CALCULATIONS # Right side template: Post -> Spacer -> W-beam -> 75mm gap -> Kerb edge @@ -309,11 +360,24 @@ def create_vertical_spacer(h, d, w, tw, tf): spacer_solid = _translate(spacer_solid, x=x_pos, y=spacer_y_center, z=spacer_z) spacers_combined = spacer_solid if spacers_combined is None else BRepAlgoAPI_Fuse(spacers_combined, spacer_solid).Shape() - # Beam solid - wire = make_w_beam_wire() - beam_solid = BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(wire).Face(), gp_Vec(length, 0, 0)).Shape() - beam_solid = _translate(beam_solid, x=0, y=beam_back_y, z=beam_z) - beams_combined = beam_solid if beams_combined is None else BRepAlgoAPI_Fuse(beams_combined, beam_solid).Shape() + # Beam solid (HOLLOW W-BEAM) + beam_face = make_w_beam_face() + + beam_solid = BRepPrimAPI_MakePrism( + beam_face, + gp_Vec(length, 0, 0) + ).Shape() + + beam_solid = _translate( + beam_solid, + x=0, y=beam_back_y, z=beam_z + ) + + beams_combined = ( + beam_solid if beams_combined is None + else BRepAlgoAPI_Fuse(beams_combined, beam_solid).Shape() + ) + return { "posts": posts_combined, From 64669bc3c30f0973649b2fd1c1a5ef572e7e2c2c Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 3 Feb 2026 19:14:23 +0530 Subject: [PATCH 025/225] Add girder supports and integrate into CAD viewer --- .../super_structure/plate_girder/builder.py | 84 ++++++++++++++++++- .../plate_girder/cad_generator.py | 29 ++++++- src/osdagbridge/desktop/ui/cad_3d.py | 41 ++++++++- 3 files changed, 146 insertions(+), 8 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py index bcf9f41f3..75b1910d4 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py @@ -10,8 +10,8 @@ import math import numpy as np -from OCC.Core.gp import gp_Pnt, gp_Vec, gp_Trsf, gp_Ax3, gp_Dir -from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism +from OCC.Core.gp import gp_Pnt, gp_Vec, gp_Trsf, gp_Ax3, gp_Dir, gp_Ax2 +from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism, BRepPrimAPI_MakeCylinder from OCC.Core.BRepBuilderAPI import ( BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire, @@ -113,6 +113,7 @@ def _create_stiffener_plate(position, width, height, thickness, chamfer, side): + def build_plate_girder_geometry( *, D, # Total depth @@ -247,6 +248,72 @@ def build_plate_girder_geometry( ) ) + # SUPPORTS + + supports_tri = [] + supports_cyl = [] + + # Contact level (bottom of bottom flange) + z_contact = -(D / 2.0 + T_fb) + + # Support width spans flange width + support_width = max(B_ft, B_fb) + + + base_dim = min(0.10 * length, 0.75 * D) + + # Triangle proportions + h_supp = base_dim / 1.5 + w_supp = base_dim / 2.0 + + # Cylinder radius + r_cyl = h_supp / 2.0 + + # TRIANGULAR SUPPORT (LEFT) + + y_apex = w_supp + z_apex = z_contact + x_face = -support_width / 2.0 + + p1 = gp_Pnt(x_face, y_apex, z_apex) + p2 = gp_Pnt(x_face, y_apex - w_supp, z_apex - h_supp) + p3 = gp_Pnt(x_face, y_apex + w_supp, z_apex - h_supp) + + e1 = BRepBuilderAPI_MakeEdge(p1, p2).Edge() + e2 = BRepBuilderAPI_MakeEdge(p2, p3).Edge() + e3 = BRepBuilderAPI_MakeEdge(p3, p1).Edge() + + wire = BRepBuilderAPI_MakeWire() + wire.Add(e1) + wire.Add(e2) + wire.Add(e3) + + face = BRepBuilderAPI_MakeFace(wire.Wire()).Face() + + tri_support = BRepPrimAPI_MakePrism( + face, + gp_Vec(support_width, 0, 0) + ).Shape() + + supports_tri.append(tri_support) + + # CYLINDRICAL SUPPORT (RIGHT) + + y_cyl = length - r_cyl + z_cyl_center = z_contact - r_cyl + + pt_cyl = gp_Pnt(-support_width / 2.0, y_cyl, z_cyl_center) + axis = gp_Ax2(pt_cyl, gp_Dir(1, 0, 0)) + + cyl_support = BRepPrimAPI_MakeCylinder( + axis, + r_cyl, + support_width + ).Shape() + + supports_cyl.append(cyl_support) + + web = _rotate_about_z(web, -90) top_flange = _rotate_about_z(top_flange, -90) @@ -256,10 +323,21 @@ def build_plate_girder_geometry( _rotate_about_z(s, -90) for s in stiffeners ] + supports_tri = [ + _rotate_about_z(s, -90) for s in supports_tri + ] + + supports_cyl = [ + _rotate_about_z(s, -90) for s in supports_cyl + ] + + return { "web": web, "top_flange": top_flange, "bottom_flange": bottom_flange, - "stiffeners": stiffeners + "stiffeners": stiffeners, + "supports_tri": supports_tri, + "supports_cyl": supports_cyl } diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 0e322ce12..9925a6ea2 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -61,7 +61,7 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.bridge_type = bridge_type # GIRDERS PARAMETERS - self.span_length_L = 25000 + self.span_length_L = 10000 self.girder_section_d = 900 # clear web depth self.girder_section_bf = 500 #top flange width @@ -186,6 +186,19 @@ def _translate(shape, dx=0, dy=0, dz=0): _translate(stiff, dy=y_offset) ) + supports_tri = [] + supports_cyl = [] + + for i in range(self.num_girders): + y_offset = (i * self.girder_spacing) - (total_width / 2) + + for s in pg["supports_tri"]: + supports_tri.append(_translate(s, dy=y_offset)) + + for s in pg["supports_cyl"]: + supports_cyl.append(_translate(s, dy=y_offset)) + + # 3. REFERENCE Z-LEVELS bracing_girder_depth = ( @@ -316,6 +329,7 @@ def _translate(shape, dx=0, dy=0, dz=0): # 8. MEDIAN median_barriers = [] + median_w_beams = [] if self.enable_median: # Get median design specifications from IRC5_2015 median_type_map = {"Raised Kerb": 0, "RCC Crash Barrier": 1, "Metallic Crash Barrier": 2} @@ -341,10 +355,11 @@ def _translate(shape, dx=0, dy=0, dz=0): ) median_barriers = [] + median_w_beams = [] for mb in median_barriers_raw: if isinstance(mb, dict): if mb.get("w_beams"): - crash_barrier_w_beams.append(mb["w_beams"]) + median_w_beams.append(mb["w_beams"]) for k in ("kerb", "posts", "spacers"): if mb.get(k): crash_barrier_other.append(mb[k]) # Using same 'other' list for coloring @@ -363,6 +378,9 @@ def _translate(shape, dx=0, dy=0, dz=0): rail_count=self.rail_count ) + supports = supports_tri + supports_cyl + + # FINAL RETURN return { "girders": girders, @@ -370,6 +388,12 @@ def _translate(shape, dx=0, dy=0, dz=0): "girder_flanges": girder_flanges, "stiffeners": stiffeners, + + "supports": supports, + "supports_tri": supports_tri, + "supports_cyl": supports_cyl, + + "cross_bracings": cross_bracings, "deck_slab": deck_out["deck_slab"], @@ -380,6 +404,7 @@ def _translate(shape, dx=0, dy=0, dz=0): "crash_barriers": crash_barriers, "crash_barrier_w_beams": crash_barrier_w_beams, "median_barriers": median_barriers, + "median_w_beams": median_w_beams, "railings": railings } diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index 601989be3..1e81e9c4a 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -142,6 +142,8 @@ def load_bridge(self): BRACING_COLOR = Quantity_Color(60/255, 60/255, 60/255, Quantity_TOC_RGB) WBEAM_COLOR = Quantity_Color(160/255, 160/255, 120/255, Quantity_TOC_RGB) BARRIER_POST_COLOR = Quantity_Color(40/255, 40/255, 40/255, Quantity_TOC_RGB) + SUPPORT_COLOR = Quantity_Color(20/255.0, 20/255.0, 20/255.0, Quantity_TOC_RGB) + # HELPER @@ -192,6 +194,14 @@ def display_and_register(shapes, key, label, color): STIFFENER_COLOR ) + display_and_register( + cad_data.get("supports", []), + "Support", + "Support", + SUPPORT_COLOR + ) + + display_and_register( cad_data.get("cross_bracings", []), "Cross Bracing", @@ -226,10 +236,18 @@ def display_and_register(shapes, key, label, color): WBEAM_COLOR ) + + display_and_register( + cad_data.get("median_w_beams", []), + "Median W-Beam", + "Median W-Beam", + WBEAM_COLOR + ) + display_and_register( cad_data.get("crash_barriers", []), "Crash Barrier", - "Posts / Kerb", + "Crash Barrier", BARRIER_POST_COLOR ) @@ -371,8 +389,25 @@ def isolate_component(self, component_key): context.Erase(ais, False) # Show selected component - for ais in self.viewer.model_ais_objects.get(component_key, []): - context.Display(ais, False) + if component_key == "Crash Barrier": + for key in ("Crash Barrier", "Crash Barrier W-Beam"): + for ais in self.viewer.model_ais_objects.get(key, []): + context.Display(ais, False) + + elif component_key == "Median": + for key in ("Median", "Median W-Beam"): + for ais in self.viewer.model_ais_objects.get(key, []): + context.Display(ais, False) + + + elif component_key == "Girder": + for key in ("Girder Web", "Girder Flange", "Support"): + for ais in self.viewer.model_ais_objects.get(key, []): + context.Display(ais, False) + + else: + for ais in self.viewer.model_ais_objects.get(component_key, []): + context.Display(ais, False) # Show deck textures ONLY if Deck is selected if component_key == "Deck": From 85d13604a8772a6008757656f21403eb961ee61c Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 4 Feb 2026 01:58:24 +0530 Subject: [PATCH 026/225] Add transparency to the girder supports and adjusted shape of W-beam --- .../super_structure/median/builder.py | 8 ++++---- src/osdagbridge/desktop/ui/cad_3d.py | 13 +++++++------ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index aeadfb559..bcb58cb1d 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -207,7 +207,7 @@ def create_metallic_barrier_system(length, design_dict, kerb_top_width, kerb_hei # W-BEAM PARAMETERS W_BEAM_HEIGHT = spacer_height # Aligned with spacer height - W_BEAM_DEPTH = 83.0 # Standard W-beam depth + W_BEAM_DEPTH = 83.0 W_BEAM_THICKNESS = w_beam_thickness # Gaussian parameters for wave profile @@ -226,7 +226,7 @@ def make_w_beam_face(): points = 40 zs = np.linspace(0, W_BEAM_HEIGHT, points) - # ---------- OUTER CURVE ---------- + # OUTER CURVE outer_pts = TColgp_Array1OfPnt(1, points) for i, z in enumerate(zs, start=1): y_wave = ( @@ -243,7 +243,7 @@ def make_w_beam_face(): outer_curve = GeomAPI_PointsToBSpline(outer_pts).Curve() - # ---------- INNER CURVE (OFFSET) ---------- + # INNER CURVE (OFFSET) inner_pts = TColgp_Array1OfPnt(1, points) for i, z in enumerate(zs, start=1): y_wave_inner = ( @@ -260,7 +260,7 @@ def make_w_beam_face(): inner_curve = GeomAPI_PointsToBSpline(inner_pts).Curve() - # ---------- COMBINE INTO CLOSED WIRE ---------- + # COMBINE INTO CLOSED WIRE wire = BRepBuilderAPI_MakeWire() # Outer curve (upwards) wire.Add(BRepBuilderAPI_MakeEdge(outer_curve).Edge()) diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index 1e81e9c4a..5ac2047a0 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -137,17 +137,17 @@ def load_bridge(self): WEB_COLOR = Quantity_Color(47/255.0, 47/255.0, 35/255.0, Quantity_TOC_RGB) FLANGE_COLOR = Quantity_Color(134/255.0, 134/255.0, 100/255.0, Quantity_TOC_RGB) STIFFENER_COLOR = Quantity_Color(72/255, 72/255, 54/255, Quantity_TOC_RGB) - DECK_COLOR = Quantity_Color(180/255, 180/255, 180/255, Quantity_TOC_RGB) + DECK_COLOR = Quantity_Color(100/255, 100/255, 100/255, Quantity_TOC_RGB) BARRIER_COLOR = Quantity_Color(40/255, 40/255, 40/255, Quantity_TOC_RGB) #Quantity_Color(120/255, 120/255, 120/255, Quantity_TOC_RGB) BRACING_COLOR = Quantity_Color(60/255, 60/255, 60/255, Quantity_TOC_RGB) - WBEAM_COLOR = Quantity_Color(160/255, 160/255, 120/255, Quantity_TOC_RGB) - BARRIER_POST_COLOR = Quantity_Color(40/255, 40/255, 40/255, Quantity_TOC_RGB) + WBEAM_COLOR = Quantity_Color(128/255, 128/255, 128/255, Quantity_TOC_RGB) + BARRIER_POST_COLOR = Quantity_Color(20/255, 20/255, 20/255, Quantity_TOC_RGB) SUPPORT_COLOR = Quantity_Color(20/255.0, 20/255.0, 20/255.0, Quantity_TOC_RGB) # HELPER - def display_and_register(shapes, key, label, color): + def display_and_register(shapes, key, label, color, transparency=None): if not shapes: return @@ -157,7 +157,7 @@ def display_and_register(shapes, key, label, color): ais_list = [] for shp in shapes: - ais = display.DisplayShape(shp, color=color, update=False) + ais = display.DisplayShape(shp, color=color, transparency=transparency, update=False) ais = ais[0] if isinstance(ais, list) else ais context.Activate(ais, 0) # REQUIRED for hover @@ -198,7 +198,8 @@ def display_and_register(shapes, key, label, color): cad_data.get("supports", []), "Support", "Support", - SUPPORT_COLOR + SUPPORT_COLOR, + transparency=0.6 ) From 6fd1b47808bfae584db9b615e6e7a9ecb432e2fc Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 4 Feb 2026 01:59:55 +0530 Subject: [PATCH 027/225] Add steel railing and follow the conditions of irc5_2015.py file --- .../super_structure/crash_barrier/builder.py | 2 +- .../super_structure/railing/builder.py | 168 ++++++++++++++++-- .../plate_girder/cad_generator.py | 83 ++++++--- 3 files changed, 204 insertions(+), 49 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py index 79d388ef3..fa47b1bc5 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py @@ -240,7 +240,7 @@ def create_vertical_channel(h, d, w, tw, tf): # Corrected Geometry: Vertical orientation (W-profile in Y-Z plane) W_BEAM_HEIGHT = spacer_height # Aligned with spacer height as requested - W_BEAM_DEPTH = 60.0 # Standard W-beam depth + W_BEAM_DEPTH = 83.0 W_BEAM_THICKNESS = design_dict.get("w_beam_thickness", 3.0) sigma = W_BEAM_HEIGHT / 10.0 diff --git a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py index 20a3ce95b..933c776cc 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py @@ -1,6 +1,6 @@ from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox -from OCC.Core.gp import gp_Trsf, gp_Vec +from OCC.Core.gp import gp_Trsf, gp_Vec, gp_Ax2, gp_Pnt, gp_Dir from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Cut, BRepAlgoAPI_Fuse @@ -13,6 +13,18 @@ def translate(shape, x=0, y=0, z=0): return BRepBuilderAPI_Transform(shape, trsf, True).Shape() +def mirror_y(shape): + if shape.IsNull(): + return shape + + trsf = gp_Trsf() + trsf.SetMirror(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0))) + + transformer = BRepBuilderAPI_Transform(trsf) + transformer.Perform(shape, True) + return transformer.Shape() + + def create_rectangular_prism(length, breadth, height): """ Aligned with crash barrier: @@ -32,16 +44,33 @@ def create_rectangular_prism(length, breadth, height): # Geometry -def create_railing(length, width, height, rail_count): +def create_rcc_railing( + *, + length, + design_dict, + side="LEFT" +): + + railing_width = 275 # Explicit width as per user request + # If height is None in dict, fall back to default? Or user input passed separately? + # Usually height is generic. Let's look for "railing_height". + railing_height = design_dict.get("railing_height") + if railing_height is None: + railing_height = 1100 + + # We can hardcode rail_count for RCC if standard, or get from somewhere. + # IRC5 RCC is typically 3 rails (including top). + rail_count = 3 + BASE_HEIGHT = 100 - body_height = height - BASE_HEIGHT + body_height = railing_height - BASE_HEIGHT if body_height <= 0: raise ValueError("Railing height must be > base height") - base = create_rectangular_prism(length, width, BASE_HEIGHT) + base = create_rectangular_prism(length, railing_width, BASE_HEIGHT) - body = create_rectangular_prism(length, width, body_height) + body = create_rectangular_prism(length, railing_width, body_height) body = translate(body, z=BASE_HEIGHT) HOLE_LENGTH_RATIO = 1 @@ -50,7 +79,7 @@ def create_railing(length, width, height, rail_count): HOLE_Y_OFFSET_RATIO = -0.2 hole_length = HOLE_LENGTH_RATIO * length - hole_width = HOLE_WIDTH_RATIO * width + hole_width = HOLE_WIDTH_RATIO * railing_width hole_height = HOLE_HEIGHT_RATIO * (body_height / rail_count) spacing = body_height / (rail_count + 1) @@ -66,7 +95,7 @@ def create_railing(length, width, height, rail_count): hole = translate( hole, x=(length - hole_length) / 2, - y=(width - hole_width) / 2 + HOLE_Y_OFFSET_RATIO * width, + y=(railing_width - hole_width) / 2 + HOLE_Y_OFFSET_RATIO * railing_width, z=z_center - hole_height / 2 ) @@ -74,7 +103,94 @@ def create_railing(length, width, height, rail_count): body_with_holes, hole ).Shape() - return BRepAlgoAPI_Fuse(base, body_with_holes).Shape() + final_shape = BRepAlgoAPI_Fuse(base, body_with_holes).Shape() + + # Mirror based on side? + # For RCC railing (rectangular usually), mirroring Y might not change much unless Holes are asymmetric. + # Holes are offset by HOLE_Y_OFFSET_RATIO (-0.2 * width). + # So yes, we should mirror if RIGHT side. + + if side == "RIGHT": + final_shape = mirror_y(final_shape) + + return final_shape + + +def create_steel_railing( + *, + length, + design_dict, + side="LEFT" +): + """ + Creates a steel railing with posts and rails. + aligned with typical railing coordinate system. + """ + railing_width = 200 + railing_height = design_dict.get("railing_height") + if railing_height is None: + railing_height = 1100 + + # Parameters for steel railing + POST_SIZE = railing_width + + POST_SPACING = 1000 + RAIL_SIZE = 80 + + # Posts + post_height = railing_height + + # Calculate number of gaps + # Safe length for posts center-to-beginning + effective_length = length - POST_SIZE + if effective_length < 0: + effective_length = 0 + + num_spaces = int(effective_length / POST_SPACING) + if num_spaces < 1: + num_spaces = 1 + + actual_spacing = effective_length / num_spaces + + posts_shape = None + + # Create posts + # We need num_spaces + 1 posts to cover 0 to effective_length + for i in range(num_spaces + 1): + x = i * actual_spacing + + # Clamp x to be safe + if x > length - POST_SIZE: + x = length - POST_SIZE + + post = create_rectangular_prism(POST_SIZE, POST_SIZE, post_height) + post = translate(post, x=x) + + if posts_shape is None: + posts_shape = post + else: + posts_shape = BRepAlgoAPI_Fuse(posts_shape, post).Shape() + + # Rails + # Top Rail + top_rail = create_rectangular_prism(length, RAIL_SIZE, RAIL_SIZE) + top_rail = translate(top_rail, z=railing_height - 2 * RAIL_SIZE) + + # Mid Rail + mid_rail = create_rectangular_prism(length, RAIL_SIZE, RAIL_SIZE) + mid_rail = translate(mid_rail, z=railing_height * 0.5) + + rails_fused = BRepAlgoAPI_Fuse(top_rail, mid_rail).Shape() + + if posts_shape: + final_shape = BRepAlgoAPI_Fuse(posts_shape, rails_fused).Shape() + else: + final_shape = rails_fused + + if side == "RIGHT": + final_shape = mirror_y(final_shape) + + return final_shape def build_railings( @@ -83,37 +199,51 @@ def build_railings( deck_top_z, total_deck_width, footpath_config, - railing_width, - railing_height, - rail_count + design_dict ): if footpath_config == "NONE": return [] - railing_proto = create_railing( - length=span_length, - width=railing_width, - height=railing_height, - rail_count=rail_count - ) + # Extract railing type from design_dict (populated by IRC5 logic) + # Default to RCC if not found + railing_type = design_dict.get("railing_type", "RCC") + + if railing_type == "steel": + railing_width = 200 + else: + railing_width = 275 deck_half = total_deck_width / 2.0 railings = [] + # Helper to create correct type + def create_shape(side): + if railing_type == "steel": + return create_steel_railing(length=span_length, design_dict=design_dict, side=side) + else: + return create_rcc_railing(length=span_length, design_dict=design_dict, side=side) + + # Placement Logic + # Left Railing: + # Center Y = -deck_half + width/2 if footpath_config in ("LEFT", "BOTH"): + shape = create_shape("LEFT") railings.append( translate( - railing_proto, + shape, y=-deck_half + railing_width / 2.0, z=deck_top_z ) ) + # Right Railing: + # Center Y = +deck_half - width/2 if footpath_config in ("RIGHT", "BOTH"): + shape = create_shape("RIGHT") railings.append( translate( - railing_proto, + shape, y=deck_half - railing_width / 2.0, z=deck_top_z ) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 9925a6ea2..2acc2f302 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -77,21 +77,21 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.carriageway_width = 12000 self.deck_thickness = 400 - self.footpath_config = "NONE" # NONE / LEFT / RIGHT / BOTH + self.footpath_config = "BOTH" # NONE / LEFT / RIGHT / BOTH self.footpath_width = 1500 self.railing_width = 300 # CRASH BARRIER PARAMETERS - self.barrier_type = "Semi-Rigid" # "Rigid" or "Semi-Rigid" - self.crash_barrier_subtype = "Single W-beam" # "IRC-5R", "High Containment", "Single W-beam", "Double W-beam" + self.barrier_type = "Rigid" # "Rigid" or "Semi-Rigid" + self.crash_barrier_subtype = "IRC-5R" # "IRC-5R", "High Containment", "Single W-beam", "Double W-beam" # MEDIAN PARAMETERS self.enable_median = True self.median_type = "Metallic Crash Barrier" # "Raised Kerb", "RCC Crash Barrier", "Metallic Crash Barrier" # RAILING PARAMETERS - self.railing_height = 1200 self.rail_count = 3 + self.railing_type = "rcc" # STIFFENER PARAMETERS self.stiffener_width = 200 @@ -241,7 +241,8 @@ def _translate(shape, dx=0, dy=0, dz=0): KEY_RAILING_TYPE, KEY_RIGID_CRASH_BARRIER_TYPE, KEY_METALLIC_CRASH_BARRIER_TYPE, - KEY_MEDIAN_TYPE + KEY_MEDIAN_TYPE, + VALUES_RAILING_TYPE ) # Map barrier_type string to KEY_CRASH_BARRIER_TYPE index @@ -252,25 +253,40 @@ def _translate(shape, dx=0, dy=0, dz=0): rigid_subtype_map = {"IRC-5R": 0, "High Containment": 1} metallic_subtype_map = {"Single W-beam": 0, "Double W-beam": 1} + # Map railing type + railing_map = { + VALUES_RAILING_TYPE[0]: KEY_RAILING_TYPE[0], # RCC + VALUES_RAILING_TYPE[1]: KEY_RAILING_TYPE[1], # Steel + } + + # Robust selection: Check map, then check for rough string match (e.g. "steel") + selected_railing_key = railing_map.get(self.railing_type) + if selected_railing_key is None: + if "steel" in self.railing_type.lower(): + selected_railing_key = KEY_RAILING_TYPE[1] + else: + selected_railing_key = KEY_RAILING_TYPE[0] + + # If Semi-Rigid, force default RCC railing + if self.barrier_type != "Rigid": + selected_railing_key = KEY_RAILING_TYPE[0] + + # Determine explicit railing width for Deck Sizing + if selected_railing_key == KEY_RAILING_TYPE[1]: # Steel + actual_railing_width = 200 + else: + actual_railing_width = 275 + + # Populate design_dict if self.barrier_type == "Rigid": rigid_subtype_idx = rigid_subtype_map.get(self.crash_barrier_subtype, 0) - if self.footpath_config == "NONE": - design_dict = IRC5_2015.cl_109_6_3_shapes( - barrier_type=KEY_CRASH_BARRIER_TYPE[barrier_idx], - footpath=KEY_FOOTPATH[0], - railing_type=None, - design_dict={}, - crash_barrier_type=KEY_RIGID_CRASH_BARRIER_TYPE[rigid_subtype_idx] - ) - else: - design_dict = IRC5_2015.cl_109_6_3_shapes( - barrier_type=KEY_CRASH_BARRIER_TYPE[barrier_idx], - footpath=KEY_FOOTPATH[1], - railing_type=KEY_RAILING_TYPE[0], - design_dict={}, - crash_barrier_type=KEY_RIGID_CRASH_BARRIER_TYPE[rigid_subtype_idx] - ) - # For rigid, the base width is in "crash_barrier_width" + design_dict = IRC5_2015.cl_109_6_3_shapes( + barrier_type=KEY_CRASH_BARRIER_TYPE[barrier_idx], + footpath=KEY_FOOTPATH[0] if self.footpath_config == "NONE" else KEY_FOOTPATH[1], + railing_type=selected_railing_key, + design_dict={}, + crash_barrier_type=KEY_RIGID_CRASH_BARRIER_TYPE[rigid_subtype_idx] + ) actual_base_width = design_dict.get("crash_barrier_width", 450) else: # Semi-rigid / Metallic @@ -278,13 +294,21 @@ def _translate(shape, dx=0, dy=0, dz=0): design_dict = IRC5_2015.cl_109_6_3_shapes( barrier_type=KEY_CRASH_BARRIER_TYPE[1], footpath=KEY_FOOTPATH[0] if self.footpath_config == "NONE" else KEY_FOOTPATH[1], - railing_type=None, + railing_type=selected_railing_key, # Passing this ensures dictionary gets updated with railing params design_dict={}, crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_idx] ) - # For semi-rigid/metallic, the kerb bottom width is the base width actual_base_width = design_dict.get("kerb_bottom_width", 550) + + # Ensure railing params are in design_dict + if selected_railing_key == KEY_RAILING_TYPE[1]: + design_dict["railing_type"] = "steel" + design_dict["railing_width"] = 200 + else: + design_dict["railing_type"] = "RCC" + design_dict["railing_width"] = 275 + # 6. DECK SYSTEM (USES TOP-OF-GIRDER Z) deck_out = build_deck( span_length_L=self.span_length_L, @@ -295,7 +319,7 @@ def _translate(shape, dx=0, dy=0, dz=0): carriageway_width=self.carriageway_width, crash_barrier_base_width=actual_base_width, footpath_width=self.footpath_width, - railing_width=self.railing_width + railing_width=actual_railing_width ) # 7. CRASH BARRIER PLACEMENT @@ -309,7 +333,7 @@ def _translate(shape, dx=0, dy=0, dz=0): footpath_config=self.footpath_config, carriageway_width=self.carriageway_width, footpath_width=self.footpath_width, - railing_width=self.railing_width, + railing_width=actual_railing_width, design_dict=design_dict, barrier_type=self.barrier_type ) @@ -368,14 +392,15 @@ def _translate(shape, dx=0, dy=0, dz=0): median_barriers.append(mb) # 8. RAILINGS + + + railings = build_railings( span_length=self.span_length_L, deck_top_z=deck_out["deck_top_z"], total_deck_width=deck_out["total_deck_width"], footpath_config=self.footpath_config, - railing_width=self.railing_width, - railing_height=self.railing_height, - rail_count=self.rail_count + design_dict=design_dict ) supports = supports_tri + supports_cyl From 543f0247fe9e8dcd9a1201c4094d634d1fa08fba Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Fri, 6 Feb 2026 23:57:33 +0530 Subject: [PATCH 028/225] Fix distance between the metallic type median --- .../core/bridge_components/super_structure/median/builder.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index bcb58cb1d..86a4ed4fd 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -191,7 +191,7 @@ def create_metallic_barrier_system(length, design_dict, kerb_top_width, kerb_hei w_beam_thickness = design_dict.get("w_beam_thickness", 3.0) # CREATE POSTS (ISMC 150 as per IRC 5 Fig 5c) - post_depth = design_dict.get("post_depth", 100) + post_depth = design_dict.get("post_depth", 170) post_width = design_dict.get("post_width", 150) post_web_thk = design_dict.get("post_web_thickness", 5.0) post_flange_thk = design_dict.get("post_flange_thickness", 7.8) @@ -284,7 +284,7 @@ def make_w_beam_face(): # ARRANGEMENT CALCULATIONS # Right side template: Post -> Spacer -> W-beam -> 75mm gap -> Kerb edge # Kerb edge is at +kerb_top_width / 2.0 - gap_from_edge = 75.0 + gap_from_edge = 5.0 kerb_edge_y = kerb_top_width / 2.0 # Beam peak face should be at gap_from_edge from kerb edge From 045d379938aaa4e25f0e2789d78d67294ede72cc Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sat, 7 Feb 2026 03:20:34 +0530 Subject: [PATCH 029/225] Add skew angle in each component --- .../super_structure/crash_barrier/builder.py | 23 ++- .../super_structure/cross_bracing/builder.py | 69 +++++--- .../super_structure/deck/builder.py | 156 ++++++++++++------ .../super_structure/median/builder.py | 35 ++-- .../super_structure/railing/builder.py | 23 ++- .../plate_girder/cad_generator.py | 77 +++++++-- 6 files changed, 267 insertions(+), 116 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py index fa47b1bc5..6957d838f 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py @@ -257,7 +257,7 @@ def make_w_beam_face(): points = 40 zs = np.linspace(0, W_BEAM_HEIGHT, points) - # ---------- OUTER CURVE ---------- + # OUTER CURVE outer_pts = TColgp_Array1OfPnt(1, points) for i, z in enumerate(zs, start=1): y_wave = ( @@ -274,7 +274,7 @@ def make_w_beam_face(): outer_curve = GeomAPI_PointsToBSpline(outer_pts).Curve() - # ---------- INNER CURVE (OFFSET) ---------- + # INNER CURVE (OFFSET) inner_pts = TColgp_Array1OfPnt(1, points) for i, z in enumerate(zs, start=1): y_wave_inner = ( @@ -291,7 +291,7 @@ def make_w_beam_face(): inner_curve = GeomAPI_PointsToBSpline(inner_pts).Curve() - # ---------- COMBINE INTO CLOSED WIRE ---------- + # COMBINE INTO CLOSED WIRE wire = BRepBuilderAPI_MakeWire() wire.Add(BRepBuilderAPI_MakeEdge(outer_curve).Edge()) wire.Add(BRepBuilderAPI_MakeEdge( @@ -447,7 +447,8 @@ def build_crash_barriers( footpath_width, railing_width, design_dict, - barrier_type="Rigid" + barrier_type="Rigid", + skew_angle=0 ): """ Returns list of crash barrier shapes. @@ -521,6 +522,12 @@ def build_crash_barriers( else: raise ValueError(f"Invalid footpath_config: {footpath_config}") + # SKEW OFFSET CALCULATION + def get_skew_x(y): + if skew_angle == 0: + return 0.0 + return y * math.tan(math.radians(skew_angle)) + # SELECT GEOMETRY BASED ON BARRIER TYPE if barrier_type == "Rigid": right_shape = create_rigid_rcc_crash_barrier( @@ -534,8 +541,8 @@ def build_crash_barriers( side="LEFT" ) - crash_barriers.append(translate(right_shape, y=y_r, z=deck_top_z)) - crash_barriers.append(translate(left_shape, y=y_l, z=deck_top_z)) + crash_barriers.append(translate(right_shape, x=get_skew_x(y_r), y=y_r, z=deck_top_z)) + crash_barriers.append(translate(left_shape, x=get_skew_x(y_l), y=y_l, z=deck_top_z)) elif barrier_type == "Semi-Rigid": right_parts = create_semi_rigid_metallic_barrier( @@ -551,8 +558,8 @@ def build_crash_barriers( ) # Apply translations and store as dictionaries for coloring - right_dict = {k: translate(v, y=y_r, z=deck_top_z) for k, v in right_parts.items() if v} - left_dict = {k: translate(v, y=y_l, z=deck_top_z) for k, v in left_parts.items() if v} + right_dict = {k: translate(v, x=get_skew_x(y_r), y=y_r, z=deck_top_z) for k, v in right_parts.items() if v} + left_dict = {k: translate(v, x=get_skew_x(y_l), y=y_l, z=deck_top_z) for k, v in left_parts.items() if v} crash_barriers.append(right_dict) crash_barriers.append(left_dict) diff --git a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py index 3f6190ed7..93e85b888 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py @@ -239,7 +239,7 @@ def _create_horizontal_member_y( def _x_bracing( x, yL, yR, depth, tf, thickness, flange_w, - section_type, dims, bracket + section_type, dims, bracket, skew_angle=0 ): # ✅ WEB–FLANGE JUNCTIONS @@ -249,35 +249,42 @@ def _x_bracing( yl = yL yr = yR + def get_skew_x(y): + if skew_angle == 0: + return 0.0 + return y * math.tan(math.radians(skew_angle)) + + x_l = x + get_skew_x(yl) + x_r = x + get_skew_x(yr) + braces = [ # Left TOP → Right BOTTOM _create_diagonal_member( - gp_Pnt(x, yl, z_top), gp_Pnt(x, yr, z_bot), + gp_Pnt(x_l, yl, z_top), gp_Pnt(x_r, yr, z_bot), thickness, section_type, dims, +1 ), # Left BOTTOM → Right TOP _create_diagonal_member( - gp_Pnt(x, yl, z_bot), gp_Pnt(x, yr, z_top), + gp_Pnt(x_l, yl, z_bot), gp_Pnt(x_r, yr, z_top), thickness, section_type, dims, -1 ) ] if bracket in ("LOWER", "BOTH"): + # Use diagonal member logic for skewed "horizontal" members braces.append( - _create_horizontal_member_y( - x, yL, yR, z_bot, - thickness, flange_w, - section_type, dims, +1 + _create_diagonal_member( + gp_Pnt(x_l, yl, z_bot), gp_Pnt(x_r, yr, z_bot), + thickness, section_type, dims, +1 ) ) if bracket in ("UPPER", "BOTH"): braces.append( - _create_horizontal_member_y( - x, yL, yR, z_top, - thickness, flange_w, - section_type, dims, +1 + _create_diagonal_member( + gp_Pnt(x_l, yl, z_top), gp_Pnt(x_r, yr, z_top), + thickness, section_type, dims, +1 ) ) @@ -286,7 +293,7 @@ def _x_bracing( def _k_bracing( x, yL, yR, depth, tf, thickness, flange_w, - section_type, dims, top_bracket + section_type, dims, top_bracket, skew_angle=0 ): z_bot = -depth / 2 @@ -296,28 +303,35 @@ def _k_bracing( yr = yR ym = (yl + yr) / 2 + def get_skew_x(y): + if skew_angle == 0: + return 0.0 + return y * math.tan(math.radians(skew_angle)) + + x_l = x + get_skew_x(yl) + x_r = x + get_skew_x(yr) + x_m = x + get_skew_x(ym) + braces = [ _create_diagonal_member( - gp_Pnt(x, yl, z_top), gp_Pnt(x, ym, z_bot), + gp_Pnt(x_l, yl, z_top), gp_Pnt(x_m, ym, z_bot), thickness, section_type, dims, +1 ), _create_diagonal_member( - gp_Pnt(x, yr, z_top), gp_Pnt(x, ym, z_bot), + gp_Pnt(x_r, yr, z_top), gp_Pnt(x_m, ym, z_bot), thickness, section_type, dims, -1 ), - _create_horizontal_member_y( - x, yL, yR, z_bot, - thickness, flange_w, - section_type, dims, +1 + _create_diagonal_member( + gp_Pnt(x_l, yl, z_bot), gp_Pnt(x_r, yr, z_bot), + thickness, section_type, dims, +1 ) ] if top_bracket: braces.append( - _create_horizontal_member_y( - x, yL, yR, z_top, - thickness, flange_w, - section_type, dims, +1 + _create_diagonal_member( + gp_Pnt(x_l, yl, z_top), gp_Pnt(x_r, yr, z_top), + thickness, section_type, dims, +1 ) ) @@ -341,7 +355,8 @@ def build_cross_bracings( panel_spacing, bracket_option="BOTH", - top_bracket=False + top_bracket=False, + skew_angle=0 ): """ Build cross bracings for entire bridge. @@ -369,7 +384,8 @@ def build_cross_bracings( girder_depth, flange_thickness, thickness, flange_width, section_type, section_dims, - bracket_option + bracket_option, + skew_angle=skew_angle ) ) @@ -380,10 +396,9 @@ def build_cross_bracings( girder_depth, flange_thickness, thickness, flange_width, section_type, section_dims, - top_bracket + top_bracket, + skew_angle=skew_angle ) ) - x += panel_spacing - return bracings diff --git a/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py b/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py index 6443985f0..b6a9a6699 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/deck/builder.py @@ -119,29 +119,60 @@ def _create_deck_slab( span_length, deck_width, deck_thickness, - girder_depth + girder_depth, + skew_angle=0 ): - slab = BRepPrimAPI_MakeBox( - span_length, - deck_width, - deck_thickness - ).Shape() - - # center X and Y, bottom at Z=0 - slab = _translate( - slab, - -span_length / 2, - -deck_width / 2, - 0 - ) + if skew_angle == 0: + slab = BRepPrimAPI_MakeBox( + span_length, + deck_width, + deck_thickness + ).Shape() + + # center X and Y, bottom at Z=0 + slab = _translate( + slab, + -span_length / 2, + -deck_width / 2, + 0 + ) - # move to final position - return _translate( - slab, - span_length / 2, - 0, - girder_depth - ) + # move to final position + return _translate( + slab, + span_length / 2, + 0, + girder_depth + ) + else: + # Skewed deck logic (Parallelogram in plan-view) + skew_rad = math.radians(skew_angle) + y_half = deck_width / 2 + + # Calculate X shifts for top and bottom edges based on lateral distance from Y=0 + shift_top = y_half * math.tan(skew_rad) + shift_bottom = -y_half * math.tan(skew_rad) + + # Vertices for the skewed footprint (centered in span) + # Start at 0, end at span_length in the local girder-aligned system + p1 = gp_Pnt(shift_bottom, -y_half, 0) # Bottom Left + p2 = gp_Pnt(span_length + shift_bottom, -y_half, 0) # Bottom Right + p3 = gp_Pnt(span_length + shift_top, y_half, 0) # Top Right + p4 = gp_Pnt(shift_top, y_half, 0) # Top Left + + poly = BRepBuilderAPI_MakePolygon() + poly.Add(p1) + poly.Add(p2) + poly.Add(p3) + poly.Add(p4) + poly.Close() + + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + # Extrude upwards + slab = BRepPrimAPI_MakePrism(face, gp_Vec(0, 0, deck_thickness)).Shape() + + # Move to top of girders + return _translate(slab, 0, 0, girder_depth) # Texture primitives (exact logic from deck_texture.py) @@ -219,55 +250,79 @@ def _generate_deck_texture( deck_length, deck_width, deck_thickness, - deck_top_z + deck_top_z, + skew_angle=0 ): elements = [] z_min = Z_GAP z_max = deck_thickness - Z_GAP - max(DOT_HEIGHT, TRI_HEIGHT) + + skew_rad = math.radians(skew_angle) + + def get_skew_x(x, y): + """Helper to shift X based on Y if skewed""" + if skew_angle == 0: + return x + # Shift relative to deck center Y=0 + return x + y * math.tan(skew_rad) # FRONT & BACK (Y faces) rot_y = gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)) + # FRONT & BACK (Y faces) + # These faces are long edges (usually parallel to X axis, but skewed now) + rot_y = gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)) + for y in (0.2, deck_width - 0.2): + # Local y relative to center for skew calculation + y_local = y - deck_width / 2 for _ in range(120): + x_rand = random.uniform(EDGE_GAP, deck_length - EDGE_GAP) elements.append( _create_dot( - random.uniform(EDGE_GAP, deck_length - EDGE_GAP), - y, + get_skew_x(x_rand, y_local), + y_local, random.uniform(z_min, z_max) ) ) for _ in range(15): + x_rand = random.uniform(EDGE_GAP, deck_length - EDGE_GAP) elements.append( _create_triangle( - random.uniform(EDGE_GAP, deck_length - EDGE_GAP), - y, + get_skew_x(x_rand, y_local), + y_local, random.uniform(z_min, z_max), rot_y, math.pi / 2 ) ) - # LEFT & RIGHT (X faces) + # LEFT & RIGHT (X faces - these are the skewed abutment faces) rot_x = gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0)) - for x in (0.2, deck_length - 0.2): + # Note: rotation for textures on skewed faces might not be perfectly perpendicular + # but using normal dir or just shifting is usually enough for visual noise. + for x_base in (0.2, deck_length - 0.2): for _ in range(100): + y_rand = random.uniform(0.2, deck_width - 0.2) + y_local = y_rand - deck_width / 2 elements.append( _create_dot( - x, - random.uniform(EDGE_GAP, deck_width - EDGE_GAP), + get_skew_x(x_base, y_local), + y_local, random.uniform(z_min, z_max) ) ) for _ in range(20): + y_rand = random.uniform(0.2, deck_width - 0.2) + y_local = y_rand - deck_width / 2 elements.append( _create_triangle( - x, - random.uniform(EDGE_GAP, deck_width - EDGE_GAP), + get_skew_x(x_base, y_local), + y_local, random.uniform(z_min, z_max), rot_x, -math.pi / 2 @@ -275,37 +330,37 @@ def _generate_deck_texture( ) # TOP & BOTTOM - for z, up in ( + for z_local, up in ( (deck_thickness - 0.2, True), (0.2, False) ): for _ in range(150): + x_rand = random.uniform(EDGE_GAP, deck_length - EDGE_GAP) + y_rand = random.uniform(EDGE_GAP, deck_width - EDGE_GAP) + y_local = y_rand - deck_width / 2 elements.append( _create_dot_z( - random.uniform(EDGE_GAP, deck_length - EDGE_GAP), - random.uniform(EDGE_GAP, deck_width - EDGE_GAP), - z, + get_skew_x(x_rand, y_local), + y_local, + z_local, up ) ) for _ in range(50): + x_rand = random.uniform(EDGE_GAP, deck_length - EDGE_GAP) + y_rand = random.uniform(EDGE_GAP, deck_width - EDGE_GAP) + y_local = y_rand - deck_width / 2 elements.append( _create_triangle_xy( - random.uniform(EDGE_GAP, deck_length - EDGE_GAP), - random.uniform(EDGE_GAP, deck_width - EDGE_GAP), - z, + get_skew_x(x_rand, y_local), + y_local, + z_local, up ) ) - # Center in Y - elements = [ - _translate(e, 0, -deck_width / 2, 0) - for e in elements - ] - - # Lift to deck position + # Lift to deck position (already shifted in Y/X above) elements = [ _translate(e, 0, 0, deck_top_z - deck_thickness) for e in elements @@ -325,7 +380,8 @@ def build_deck( carriageway_width, crash_barrier_base_width, footpath_width, - railing_width + railing_width, + skew_angle=0 ): @@ -352,7 +408,8 @@ def build_deck( span_length=span_length_L, deck_width=total_deck_width, deck_thickness=deck_thickness, - girder_depth=girder_section_d + girder_depth=girder_section_d, + skew_angle=skew_angle ) deck_top_z = girder_section_d + deck_thickness @@ -361,7 +418,8 @@ def build_deck( deck_length=span_length_L, deck_width=total_deck_width, deck_thickness=deck_thickness, - deck_top_z=deck_top_z + deck_top_z=deck_top_z, + skew_angle=skew_angle ) return { diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index 86a4ed4fd..9350eb5c1 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -434,7 +434,8 @@ def build_median( deck_top_z, carriageway_center_y, design_dict, - median_type="RCC Crash Barrier" + median_type="RCC Crash Barrier", + skew_angle=0 ): """ Build median barriers. @@ -444,6 +445,12 @@ def build_median( (posts + spacers + W-beams) on either side. """ + # SKEW OFFSET CALCULATION + def get_skew_x(y): + if skew_angle == 0: + return 0.0 + return y * math.tan(math.radians(skew_angle)) + median_barriers = [] # Get median width from design_dict (default 1200) @@ -453,10 +460,11 @@ def build_median( if median_type == "Raised Kerb": barrier_shape = create_raised_kerb(span_length, design_dict) # Centralized single barrier + y_pos = carriageway_center_y central_barrier = _translate( barrier_shape, - x=0.0, - y=carriageway_center_y, + x=get_skew_x(y_pos), + y=y_pos, z=deck_top_z ) median_barriers.append(central_barrier) @@ -471,19 +479,21 @@ def build_median( # offset is the distance from center to barrier center offset = (median_total_width - barrier_base_width) / 2.0 + y_l = carriageway_center_y - offset left_barrier = _mirror_y(barrier_shape) left_barrier = _translate( left_barrier, - x=0.0, - y=carriageway_center_y - offset, + x=get_skew_x(y_l), + y=y_l, z=deck_top_z ) median_barriers.append(left_barrier) + y_r = carriageway_center_y + offset right_barrier = _translate( barrier_shape, - x=0.0, - y=carriageway_center_y + offset, + x=get_skew_x(y_r), + y=y_r, z=deck_top_z ) median_barriers.append(right_barrier) @@ -495,10 +505,11 @@ def build_median( # Create single continuous kerb with total width = median_width kerb_shape = create_median_kerb(span_length, median_total_width, design_dict) + y_kerb = carriageway_center_y kerb_positioned = _translate( kerb_shape, - x=0.0, - y=carriageway_center_y, + x=get_skew_x(y_kerb), + y=y_kerb, z=deck_top_z ) median_barriers.append({"kerb": kerb_positioned}) @@ -512,15 +523,17 @@ def build_median( ) # Position left barrier system (mirrored) + # For simplicity, use the kerb center Y for skew shift if the systems are close to it + y_sys = carriageway_center_y left_dict = { - k: _translate(_mirror_y(v), x=0.0, y=carriageway_center_y, z=deck_top_z) + k: _translate(_mirror_y(v), x=get_skew_x(y_sys), y=carriageway_center_y, z=deck_top_z) for k, v in barrier_system_parts.items() if v } median_barriers.append(left_dict) # Position right barrier system right_dict = { - k: _translate(v, x=0.0, y=carriageway_center_y, z=deck_top_z) + k: _translate(v, x=get_skew_x(y_sys), y=carriageway_center_y, z=deck_top_z) for k, v in barrier_system_parts.items() if v } median_barriers.append(right_dict) diff --git a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py index 933c776cc..d991e05c9 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py @@ -51,9 +51,7 @@ def create_rcc_railing( side="LEFT" ): - railing_width = 275 # Explicit width as per user request - # If height is None in dict, fall back to default? Or user input passed separately? - # Usually height is generic. Let's look for "railing_height". + railing_width = 275 # railing_height = design_dict.get("railing_height") if railing_height is None: railing_height = 1100 @@ -105,7 +103,6 @@ def create_rcc_railing( final_shape = BRepAlgoAPI_Fuse(base, body_with_holes).Shape() - # Mirror based on side? # For RCC railing (rectangular usually), mirroring Y might not change much unless Holes are asymmetric. # Holes are offset by HOLE_Y_OFFSET_RATIO (-0.2 * width). # So yes, we should mirror if RIGHT side. @@ -199,8 +196,10 @@ def build_railings( deck_top_z, total_deck_width, footpath_config, - design_dict + design_dict, + skew_angle=0 ): + import math if footpath_config == "NONE": return [] @@ -224,15 +223,23 @@ def create_shape(side): else: return create_rcc_railing(length=span_length, design_dict=design_dict, side=side) + # SKEW OFFSET CALCULATION + def get_skew_x(y): + if skew_angle == 0: + return 0.0 + return y * math.tan(math.radians(skew_angle)) + # Placement Logic # Left Railing: # Center Y = -deck_half + width/2 if footpath_config in ("LEFT", "BOTH"): shape = create_shape("LEFT") + y_pos = -deck_half + railing_width / 2.0 railings.append( translate( shape, - y=-deck_half + railing_width / 2.0, + x=get_skew_x(y_pos), + y=y_pos, z=deck_top_z ) ) @@ -241,10 +248,12 @@ def create_shape(side): # Center Y = +deck_half - width/2 if footpath_config in ("RIGHT", "BOTH"): shape = create_shape("RIGHT") + y_pos = deck_half - railing_width / 2.0 railings.append( translate( shape, - y=deck_half - railing_width / 2.0, + x=get_skew_x(y_pos), + y=y_pos, z=deck_top_z ) ) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 2acc2f302..ae018d200 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -73,6 +73,9 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.num_girders = 5 self.girder_spacing = 2750 # center-to-center spacing + # SKEW ANGLE PARAMETER + self.skew_angle = 25 # skew angle in degrees (0 = no skew) + # DECK PARAMETERS self.carriageway_width = 12000 self.deck_thickness = 400 @@ -128,6 +131,7 @@ def generate(self): """ # Local helpers + import math from OCC.Core.gp import gp_Trsf, gp_Vec from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform @@ -135,6 +139,25 @@ def _translate(shape, dx=0, dy=0, dz=0): trsf = gp_Trsf() trsf.SetTranslation(gp_Vec(dx, dy, dz)) return BRepBuilderAPI_Transform(shape, trsf, True).Shape() + + def _calculate_skew_offset(lateral_position, reference_position=0): + """ + Calculate longitudinal offset due to skew angle. + Plan-view geometric offset: shift = L × tan(θ) + + Args: + lateral_position: Transverse position (Y-coordinate) + reference_position: Reference lateral position with zero offset + + Returns: + Longitudinal offset (X-coordinate shift) + """ + if self.skew_angle == 0: + return 0.0 + + skew_rad = math.radians(self.skew_angle) + lateral_distance = lateral_position - reference_position + return lateral_distance * math.tan(skew_rad) # 1. BUILD SINGLE PLATE GIRDER GEOMETRY pg = build_plate_girder_geometry( @@ -152,7 +175,7 @@ def _translate(shape, dx=0, dy=0, dz=0): T_es=self.end_stiffener_thickness ) - # 2. PLACE MULTIPLE GIRDERS (Y-DIRECTION, CENTERED) + # 2. PLACE MULTIPLE GIRDERS (Y-DIRECTION, CENTERED) WITH SKEW OFFSET girders = [] stiffeners = [] @@ -160,43 +183,53 @@ def _translate(shape, dx=0, dy=0, dz=0): girder_flanges = [] total_width = (self.num_girders - 1) * self.girder_spacing + + # Reference position for skew (centerline = 0) + reference_position = 0.0 for i in range(self.num_girders): + # Transverse offset (Y-direction) y_offset = (i * self.girder_spacing) - (total_width / 2) + + # Longitudinal offset due to skew (X-direction) + # Each girder shifts by L × tan(θ) based on lateral distance from center + x_offset = _calculate_skew_offset(y_offset, reference_position) # Web - web = _translate(pg["web"], dy=y_offset) + web = _translate(pg["web"], dx=x_offset, dy=y_offset) girders.append(web) girder_web.append(web) # Top flange - top_flange = _translate(pg["top_flange"], dy=y_offset) + top_flange = _translate(pg["top_flange"], dx=x_offset, dy=y_offset) girders.append(top_flange) girder_flanges.append(top_flange) # Bottom flange - bottom_flange = _translate(pg["bottom_flange"], dy=y_offset) + bottom_flange = _translate(pg["bottom_flange"], dx=x_offset, dy=y_offset) girders.append(bottom_flange) girder_flanges.append(bottom_flange) - # Stiffeners + # Stiffeners (follow parent girder's offset) for stiff in pg["stiffeners"]: stiffeners.append( - _translate(stiff, dy=y_offset) + _translate(stiff, dx=x_offset, dy=y_offset) ) supports_tri = [] supports_cyl = [] for i in range(self.num_girders): + # Same offset calculation as girders y_offset = (i * self.girder_spacing) - (total_width / 2) + x_offset = _calculate_skew_offset(y_offset, reference_position) for s in pg["supports_tri"]: - supports_tri.append(_translate(s, dy=y_offset)) + supports_tri.append(_translate(s, dx=x_offset, dy=y_offset)) for s in pg["supports_cyl"]: - supports_cyl.append(_translate(s, dy=y_offset)) + supports_cyl.append(_translate(s, dx=x_offset, dy=y_offset)) # 3. REFERENCE Z-LEVELS @@ -210,8 +243,15 @@ def _translate(shape, dx=0, dy=0, dz=0): # Top of girder for deck placement ONLY girder_top_z = (self.girder_section_d / 2) + self.girder_section_tf + + # 4. SKEW ANGLE (HANDLED BY COMPONENT BUILDERS) + # We pass self.skew_angle to components that support skewed geometry (like deck) + # Components that are placed relative to girders (like cross-bracing) follow girder offsets. + pass - # 4. CROSS BRACING SYSTEM + # 5. CROSS BRACING SYSTEM + # Note: Cross bracings connect girders at their actual (skewed) positions + # The bracing builder handles placement and skew internally. cross_bracings = build_cross_bracings( span_length_L=self.span_length_L, num_girders=self.num_girders, @@ -230,7 +270,8 @@ def _translate(shape, dx=0, dy=0, dz=0): panel_spacing=self.cross_bracing_spacing, bracket_option=self.x_bracket_option, - top_bracket=self.k_top_bracket + top_bracket=self.k_top_bracket, + skew_angle=self.skew_angle ) # 5. IRC 5 SPECIFICATIONS (CRASH BARRIER) @@ -310,6 +351,7 @@ def _translate(shape, dx=0, dy=0, dz=0): # 6. DECK SYSTEM (USES TOP-OF-GIRDER Z) + # Deck handles skewed geometry (parallelogram) internally deck_out = build_deck( span_length_L=self.span_length_L, girder_section_d=girder_top_z, @@ -319,10 +361,14 @@ def _translate(shape, dx=0, dy=0, dz=0): carriageway_width=self.carriageway_width, crash_barrier_base_width=actual_base_width, footpath_width=self.footpath_width, - railing_width=actual_railing_width + railing_width=actual_railing_width, + skew_angle=self.skew_angle ) # 7. CRASH BARRIER PLACEMENT + # Barriers follow deck edges. + # Note: For skew, we might need to apply shifts to barriers as well + # if the barrier builder doesn't handle skew internally. crash_barrier_w_beams = [] crash_barrier_other = [] @@ -335,7 +381,8 @@ def _translate(shape, dx=0, dy=0, dz=0): footpath_width=self.footpath_width, railing_width=actual_railing_width, design_dict=design_dict, - barrier_type=self.barrier_type + barrier_type=self.barrier_type, + skew_angle=self.skew_angle ) crash_barriers = [] @@ -375,7 +422,8 @@ def _translate(shape, dx=0, dy=0, dz=0): deck_top_z=deck_out["deck_top_z"], carriageway_center_y=deck_out["carriageway_center_y"], design_dict=median_design_dict, - median_type=self.median_type + median_type=self.median_type, + skew_angle=self.skew_angle ) median_barriers = [] @@ -400,7 +448,8 @@ def _translate(shape, dx=0, dy=0, dz=0): deck_top_z=deck_out["deck_top_z"], total_deck_width=deck_out["total_deck_width"], footpath_config=self.footpath_config, - design_dict=design_dict + design_dict=design_dict, + skew_angle=self.skew_angle ) supports = supports_tri + supports_cyl From 090ae543568a2d93bacda5351871c0c42b68210a Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sat, 7 Feb 2026 18:59:32 +0530 Subject: [PATCH 030/225] Add some offset to fix the metallic type median post placement --- .../super_structure/median/builder.py | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index 9350eb5c1..46c2abd7e 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -298,9 +298,23 @@ def make_w_beam_face(): # GENERATE POSTS posts_combined = None + + # Start posts with an offset from the beginning to keep them within deck bounds + START_OFFSET = 170.0 + effective_length = length - 2 * START_OFFSET + if effective_length < 0: + effective_length = 0 + num_spaces = 0 + else: + num_spaces = int(effective_length / post_spacing) + if num_spaces < 1: + num_spaces = 1 + + actual_spacing = effective_length / num_spaces if num_spaces > 0 else 0 + num_posts = num_spaces + 1 if num_spaces > 0 else 1 + for i in range(num_posts): - x_pos = i * post_spacing - if x_pos > length: break + x_pos = START_OFFSET + i * actual_spacing def create_vertical_channel(h, d, w, tw, tf): x_web_back, x_web_front = -tw / 2.0, tw / 2.0 @@ -338,8 +352,7 @@ def create_vertical_channel(h, d, w, tw, tf): # Spacers (one per post) for i in range(num_posts): - x_pos = i * post_spacing - if x_pos > length: break + x_pos = START_OFFSET + i * actual_spacing def create_vertical_spacer(h, d, w, tw, tf): x_web_back, x_web_front = -tw / 2.0, tw / 2.0 @@ -363,14 +376,15 @@ def create_vertical_spacer(h, d, w, tw, tf): # Beam solid (HOLLOW W-BEAM) beam_face = make_w_beam_face() + # Extrude W-beam for the effective length only beam_solid = BRepPrimAPI_MakePrism( beam_face, - gp_Vec(length, 0, 0) + gp_Vec(effective_length, 0, 0) ).Shape() beam_solid = _translate( beam_solid, - x=0, y=beam_back_y, z=beam_z + x=START_OFFSET, y=beam_back_y, z=beam_z ) beams_combined = ( From 51382501f940a522f8b39164a55108560bfbc2ae Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sat, 7 Feb 2026 19:00:28 +0530 Subject: [PATCH 031/225] Add concrete base and make circular railing post in steel type railing --- .../super_structure/railing/builder.py | 63 +++++++++++++------ 1 file changed, 43 insertions(+), 20 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py index d991e05c9..197daaa3b 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py @@ -1,5 +1,5 @@ -from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox +from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox, BRepPrimAPI_MakeCylinder from OCC.Core.gp import gp_Trsf, gp_Vec, gp_Ax2, gp_Pnt, gp_Dir from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Cut, BRepAlgoAPI_Fuse @@ -42,6 +42,16 @@ def create_rectangular_prism(length, breadth, height): return BRepBuilderAPI_Transform(box, trsf, True).Shape() +def create_cylinder(radius, height): + """ + Creates a cylinder centered at origin, extending along Z-axis. + X, Y: centered at 0 + Z: 0 → height + """ + cylinder = BRepPrimAPI_MakeCylinder(radius, height).Shape() + return cylinder + + # Geometry def create_rcc_railing( @@ -120,7 +130,7 @@ def create_steel_railing( side="LEFT" ): """ - Creates a steel railing with posts and rails. + Creates a steel railing with posts and rails on a concrete base. aligned with typical railing coordinate system. """ railing_width = 200 @@ -128,18 +138,25 @@ def create_steel_railing( if railing_height is None: railing_height = 1100 - # Parameters for steel railing - POST_SIZE = railing_width - + # Concrete base dimensions + BASE_HEIGHT = 100 # 100mm height as per IRC standards + BASE_WIDTH = 375 # 375mm width for concrete base + + # Create concrete base with 375mm width + base = create_rectangular_prism(length, BASE_WIDTH, BASE_HEIGHT) + + # Parameters for steel railing (sits on top of base) + POST_DIAMETER = 150 # Circular post diameter in mm + POST_RADIUS = POST_DIAMETER / 2.0 POST_SPACING = 1000 RAIL_SIZE = 80 - # Posts - post_height = railing_height + # Posts height (from top of base to top of railing) + post_height = railing_height - BASE_HEIGHT # Calculate number of gaps # Safe length for posts center-to-beginning - effective_length = length - POST_SIZE + effective_length = length - POST_DIAMETER if effective_length < 0: effective_length = 0 @@ -151,38 +168,43 @@ def create_steel_railing( posts_shape = None - # Create posts + # Create circular posts (starting from top of base) # We need num_spaces + 1 posts to cover 0 to effective_length for i in range(num_spaces + 1): - x = i * actual_spacing + x = i * actual_spacing + POST_RADIUS # Center the cylinder at x position # Clamp x to be safe - if x > length - POST_SIZE: - x = length - POST_SIZE + if x > length - POST_RADIUS: + x = length - POST_RADIUS - post = create_rectangular_prism(POST_SIZE, POST_SIZE, post_height) - post = translate(post, x=x) + # Create cylindrical post + post = create_cylinder(POST_RADIUS, post_height) + post = translate(post, x=x, z=BASE_HEIGHT) if posts_shape is None: posts_shape = post else: posts_shape = BRepAlgoAPI_Fuse(posts_shape, post).Shape() - # Rails + # Rails (positioned relative to total railing height) # Top Rail top_rail = create_rectangular_prism(length, RAIL_SIZE, RAIL_SIZE) top_rail = translate(top_rail, z=railing_height - 2 * RAIL_SIZE) # Mid Rail mid_rail = create_rectangular_prism(length, RAIL_SIZE, RAIL_SIZE) - mid_rail = translate(mid_rail, z=railing_height * 0.5) + mid_rail = translate(mid_rail, z=BASE_HEIGHT + (post_height * 0.5)) rails_fused = BRepAlgoAPI_Fuse(top_rail, mid_rail).Shape() + # Combine all components if posts_shape: - final_shape = BRepAlgoAPI_Fuse(posts_shape, rails_fused).Shape() + steel_structure = BRepAlgoAPI_Fuse(posts_shape, rails_fused).Shape() else: - final_shape = rails_fused + steel_structure = rails_fused + + # Fuse concrete base with steel structure + final_shape = BRepAlgoAPI_Fuse(base, steel_structure).Shape() if side == "RIGHT": final_shape = mirror_y(final_shape) @@ -208,10 +230,11 @@ def build_railings( # Default to RCC if not found railing_type = design_dict.get("railing_type", "RCC") + # Use the actual base width for positioning if railing_type == "steel": - railing_width = 200 + railing_width = 375 # Steel railing base width else: - railing_width = 275 + railing_width = 275 # RCC railing width deck_half = total_deck_width / 2.0 railings = [] From 3a988cb14b557ba6695680ffa39d43353e070d4e Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 10 Feb 2026 00:33:25 +0530 Subject: [PATCH 032/225] Modify the circular post of steel railing to rectangle and fix the metallic median post position --- .../super_structure/median/builder.py | 45 ++++++++++--------- .../super_structure/railing/builder.py | 22 ++++----- 2 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index 46c2abd7e..55270be15 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -296,25 +296,31 @@ def make_w_beam_face(): # Post is attached to the back of the spacer post_y_center = beam_back_y - spacer_width - post_width / 2.0 - # GENERATE POSTS + # Initialize combined shapes posts_combined = None + spacers_combined = None + beams_combined = None + + # Calculate spacing range to keep posts/spacers within [0, length] + # Component spans from x_pos - tw/2 to x_pos + depth - tw/2 + # To keep within [0, length]: + # x_pos - tw/2 >= 0 => x_pos >= tw/2 + # x_pos + post_depth - tw/2 <= length => x_pos <= length - post_depth + tw/2 - # Start posts with an offset from the beginning to keep them within deck bounds - START_OFFSET = 170.0 - effective_length = length - 2 * START_OFFSET - if effective_length < 0: - effective_length = 0 - num_spaces = 0 - else: - num_spaces = int(effective_length / post_spacing) - if num_spaces < 1: - num_spaces = 1 + start_x = post_web_thk / 2.0 + end_x = length - post_depth + post_web_thk / 2.0 + + post_range = end_x - start_x - actual_spacing = effective_length / num_spaces if num_spaces > 0 else 0 - num_posts = num_spaces + 1 if num_spaces > 0 else 1 + # Calculate number of posts based on original post_spacing + num_posts = int(length / post_spacing) + 1 + if num_posts < 2: + num_posts = 2 + + actual_spacing = post_range / (num_posts - 1) for i in range(num_posts): - x_pos = START_OFFSET + i * actual_spacing + x_pos = start_x + (i * actual_spacing) def create_vertical_channel(h, d, w, tw, tf): x_web_back, x_web_front = -tw / 2.0, tw / 2.0 @@ -336,9 +342,6 @@ def create_vertical_channel(h, d, w, tw, tf): posts_combined = post_solid if posts_combined is None else BRepAlgoAPI_Fuse(posts_combined, post_solid).Shape() # GENERATE BEAMS AND SPACERS - spacers_combined = None - beams_combined = None - if number_of_w_beams == 1: beam_heights = [post_height - spacer_height / 2.0] else: @@ -352,7 +355,7 @@ def create_vertical_channel(h, d, w, tw, tf): # Spacers (one per post) for i in range(num_posts): - x_pos = START_OFFSET + i * actual_spacing + x_pos = start_x + (i * actual_spacing) def create_vertical_spacer(h, d, w, tw, tf): x_web_back, x_web_front = -tw / 2.0, tw / 2.0 @@ -376,15 +379,15 @@ def create_vertical_spacer(h, d, w, tw, tf): # Beam solid (HOLLOW W-BEAM) beam_face = make_w_beam_face() - # Extrude W-beam for the effective length only + # Extrude W-beam for the full length beam_solid = BRepPrimAPI_MakePrism( beam_face, - gp_Vec(effective_length, 0, 0) + gp_Vec(length, 0, 0) ).Shape() beam_solid = _translate( beam_solid, - x=START_OFFSET, y=beam_back_y, z=beam_z + x=0.0, y=beam_back_y, z=beam_z ) beams_combined = ( diff --git a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py index 197daaa3b..94ab3149f 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py @@ -133,7 +133,7 @@ def create_steel_railing( Creates a steel railing with posts and rails on a concrete base. aligned with typical railing coordinate system. """ - railing_width = 200 + # railing_width = 200 railing_height = design_dict.get("railing_height") if railing_height is None: railing_height = 1100 @@ -146,17 +146,17 @@ def create_steel_railing( base = create_rectangular_prism(length, BASE_WIDTH, BASE_HEIGHT) # Parameters for steel railing (sits on top of base) - POST_DIAMETER = 150 # Circular post diameter in mm - POST_RADIUS = POST_DIAMETER / 2.0 + POST_LENGTH = 150 # Rectangular post length in mm + POST_BREADTH = 150 # Rectangular post breadth in mm POST_SPACING = 1000 - RAIL_SIZE = 80 + RAIL_SIZE = 40 # Posts height (from top of base to top of railing) post_height = railing_height - BASE_HEIGHT # Calculate number of gaps # Safe length for posts center-to-beginning - effective_length = length - POST_DIAMETER + effective_length = length - POST_LENGTH if effective_length < 0: effective_length = 0 @@ -168,17 +168,17 @@ def create_steel_railing( posts_shape = None - # Create circular posts (starting from top of base) + # Create rectangular posts (starting from top of base) # We need num_spaces + 1 posts to cover 0 to effective_length for i in range(num_spaces + 1): - x = i * actual_spacing + POST_RADIUS # Center the cylinder at x position + x = i * actual_spacing # Clamp x to be safe - if x > length - POST_RADIUS: - x = length - POST_RADIUS + if x > length - POST_LENGTH: + x = length - POST_LENGTH - # Create cylindrical post - post = create_cylinder(POST_RADIUS, post_height) + # Create rectangular post + post = create_rectangular_prism(POST_LENGTH, POST_BREADTH, post_height) post = translate(post, x=x, z=BASE_HEIGHT) if posts_shape is None: From 40d7ae6ff85d5da82dab9605f62633a119de3c21 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 10 Feb 2026 03:25:51 +0530 Subject: [PATCH 033/225] Fix the double angle section type cross bracinngs and refactored the code --- .../super_structure/cross_bracing/builder.py | 829 +++++++++++++----- .../plate_girder/cad_generator.py | 454 +++++++--- 2 files changed, 911 insertions(+), 372 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py index 93e85b888..4a853333b 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py @@ -1,382 +1,751 @@ """ -Cross bracing builder. +Cross Bracing Builder for Plate Girder Bridges +=============================================== -- Angle / Channel / Double Angle / Double Channel sections -- X and K bracing systems -- Geometry + placement -""" +This module provides functionality to create cross bracing systems for steel plate girder bridges. +It supports multiple section types and bracing configurations with skew angle capability. -# OCC imports +Supported Section Types: + - ANGLE: Single angle section (L-shape) + - CHANNEL: Channel section (C-shape) + - DOUBLE_ANGLE: Back-to-back double angle + - DOUBLE_CHANNEL: Back-to-back double channel + - I_SECTION: I-beam or H-beam section -import math +Supported Bracing Patterns: + - X-bracing: Diagonal cross pattern + - K-bracing: K-pattern with central node + - Horizontal Diaphragm: Rolled or welded beam diaphragms + +Features: + - Skew angle support for skewed bridges + - Configurable bracket options + - End diaphragm customization + + +""" -from OCC.Core.gp import ( - gp_Pnt, gp_Vec, gp_Trsf, gp_Ax1, gp_Ax2, gp_Dir -) +import math +from OCC.Core.gp import gp_Pnt, gp_Vec, gp_Trsf, gp_Ax1, gp_Ax2, gp_Dir from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform -# SECTION GEOMETRY +# SECTION GEOMETRY CREATORS def _create_angle_section(length, leg_h, leg_w, thickness): - + """ + Create a single angle section (L-shape). + + Args: + length: Length of the section along X-axis + leg_h: Height of the vertical leg (longer leg) + leg_w: Width of the horizontal leg (shorter leg) + thickness: Thickness of the angle + + Returns: + TopoDS_Shape: The angle section at origin + """ + # Create two perpendicular legs + # Vertical leg (longer) leg1 = BRepPrimAPI_MakeBox(length, thickness, leg_h).Shape() + + # Horizontal leg (shorter) leg2 = BRepPrimAPI_MakeBox(length, leg_w, thickness).Shape() - + + # Fuse the two legs to form L-shape angle = BRepAlgoAPI_Fuse(leg1, leg2).Shape() + + return angle - trsf = gp_Trsf() - trsf.SetTranslation( - gp_Vec(-length / 2, -leg_w / 2, -leg_h / 2) - ) - - return BRepBuilderAPI_Transform(angle, trsf, True).Shape() - - -def _create_channel_section( - length, depth, flange_width, web_thickness, flange_thickness -): - - web = BRepPrimAPI_MakeBox( - length, web_thickness, depth - ).Shape() - - bottom = BRepPrimAPI_MakeBox( - length, flange_width, flange_thickness - ).Shape() - - top = BRepPrimAPI_MakeBox( - length, flange_width, flange_thickness - ).Shape() +def _create_channel_section(length, depth, flange_width, web_thickness, flange_thickness): + """ + Create a channel section (C-shape). + + Args: + length: Length of the section along X-axis + depth: Overall depth of the channel + flange_width: Width of top and bottom flanges + web_thickness: Thickness of the web + flange_thickness: Thickness of the flanges + + Returns: + TopoDS_Shape: The channel section centered at origin + """ + # Create web + web = BRepPrimAPI_MakeBox(length, web_thickness, depth).Shape() + + # Create bottom flange + bottom = BRepPrimAPI_MakeBox(length, flange_width, flange_thickness).Shape() + + # Create top flange + top = BRepPrimAPI_MakeBox(length, flange_width, flange_thickness).Shape() + + # Position top flange trsf_top = gp_Trsf() - trsf_top.SetTranslation( - gp_Vec(0, 0, depth - flange_thickness) - ) + trsf_top.SetTranslation(gp_Vec(0, 0, depth - flange_thickness)) top = BRepBuilderAPI_Transform(top, trsf_top, True).Shape() - + + # Fuse all components channel = BRepAlgoAPI_Fuse(web, bottom).Shape() channel = BRepAlgoAPI_Fuse(channel, top).Shape() - + + # Center the section at origin trsf = gp_Trsf() - trsf.SetTranslation( - gp_Vec(-length / 2, -flange_width / 2, -depth / 2) - ) - + trsf.SetTranslation(gp_Vec(-length / 2, -flange_width / 2, -depth / 2)) + return BRepBuilderAPI_Transform(channel, trsf, True).Shape() - -def _create_double_angle_section( - length, leg_h, leg_w, thickness, connection_type="LONGER_LEG" -): - - base = _create_angle_section(length, leg_h, leg_w, thickness) - - mirror = gp_Trsf() - mirror.SetMirror(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0))) - mirrored = BRepBuilderAPI_Transform(base, mirror, True).Shape() - - offset = leg_h / 2 if connection_type == "LONGER_LEG" else leg_w / 2 - - t1 = gp_Trsf() - t1.SetTranslation(gp_Vec(0, +offset, 0)) - - t2 = gp_Trsf() - t2.SetTranslation(gp_Vec(0, -offset, 0)) - - a1 = BRepBuilderAPI_Transform(base, t1, True).Shape() - a2 = BRepBuilderAPI_Transform(mirrored, t2, True).Shape() - - return BRepAlgoAPI_Fuse(a1, a2).Shape() - - -def _create_double_channel_section( - length, depth, flange_width, web_thickness, flange_thickness -): - - base = _create_channel_section( - length, depth, flange_width, web_thickness, flange_thickness - ) - +def _create_double_angle_section(length, leg_h, leg_w, thickness, connection_type="SHORTER_LEG"): + """ + Create a double angle section (back-to-back angles). + + Args: + length: Length of the section along X-axis + leg_h: Height of the longer leg + leg_w: Width of the shorter leg + thickness: Thickness of each angle + connection_type: "LONGER_LEG" or "SHORTER_LEG" + + Returns: + TopoDS_Shape: The double angle section centered at origin + """ + if connection_type == "SHORTER_LEG": + # SHORTER_LEG connection: shorter legs are back-to-back (vertical) + # Longer legs point OUTWARD horizontally in opposite directions + + # First angle: L shape + # Shorter leg (vertical) - back-to-back part + vertical_leg1 = BRepPrimAPI_MakeBox( + gp_Pnt(0, -thickness/2, 0), + gp_Pnt(length, thickness/2, leg_w) + ).Shape() + # Longer leg (horizontal) - pointing RIGHT + horizontal_leg1 = BRepPrimAPI_MakeBox( + gp_Pnt(0, thickness/2, leg_w - thickness), + gp_Pnt(length, thickness/2 + leg_h, leg_w) + ).Shape() + angle1 = BRepAlgoAPI_Fuse(vertical_leg1, horizontal_leg1).Shape() + + # Second angle: Mirrored L + # Shorter leg (vertical) - back-to-back part (same position as first) + vertical_leg2 = BRepPrimAPI_MakeBox( + gp_Pnt(0, -thickness/2, 0), + gp_Pnt(length, thickness/2, leg_w) + ).Shape() + # Longer leg (horizontal) - pointing LEFT + horizontal_leg2 = BRepPrimAPI_MakeBox( + gp_Pnt(0, -thickness/2 - leg_h, leg_w - thickness), + gp_Pnt(length, -thickness/2, leg_w) + ).Shape() + angle2 = BRepAlgoAPI_Fuse(vertical_leg2, horizontal_leg2).Shape() + + # Fuse both angles + double_angle = BRepAlgoAPI_Fuse(angle1, angle2).Shape() + + # Center at origin + center_trsf = gp_Trsf() + center_trsf.SetTranslation(gp_Vec(-length/2, 0, -leg_w/2)) + + else: # LONGER_LEG connection + # LONGER_LEG connection: longer legs are back-to-back (vertical) + # Shorter legs point OUTWARD horizontally in opposite directions + + # First angle: L shape + # Longer leg (vertical) - back-to-back part + vertical_leg1 = BRepPrimAPI_MakeBox( + gp_Pnt(0, -thickness/2, 0), + gp_Pnt(length, thickness/2, leg_h) + ).Shape() + # Shorter leg (horizontal) - pointing RIGHT + horizontal_leg1 = BRepPrimAPI_MakeBox( + gp_Pnt(0, thickness/2, leg_h - thickness), + gp_Pnt(length, thickness/2 + leg_w, leg_h) + ).Shape() + angle1 = BRepAlgoAPI_Fuse(vertical_leg1, horizontal_leg1).Shape() + + # Second angle: Mirrored L + # Longer leg (vertical) - back-to-back part (same position as first) + vertical_leg2 = BRepPrimAPI_MakeBox( + gp_Pnt(0, -thickness/2, 0), + gp_Pnt(length, thickness/2, leg_h) + ).Shape() + # Shorter leg (horizontal) - pointing LEFT + horizontal_leg2 = BRepPrimAPI_MakeBox( + gp_Pnt(0, -thickness/2 - leg_w, leg_h - thickness), + gp_Pnt(length, -thickness/2, leg_h) + ).Shape() + angle2 = BRepAlgoAPI_Fuse(vertical_leg2, horizontal_leg2).Shape() + + # Fuse both angles + double_angle = BRepAlgoAPI_Fuse(angle1, angle2).Shape() + + # Center at origin + center_trsf = gp_Trsf() + center_trsf.SetTranslation(gp_Vec(-length/2, 0, -leg_h/2)) + + return BRepBuilderAPI_Transform(double_angle, center_trsf, True).Shape() + + +def _create_double_channel_section(length, depth, flange_width, web_thickness, flange_thickness): + """ + Create a double channel section (back-to-back channels). + + Args: + length: Length of the section along X-axis + depth: Overall depth of each channel + flange_width: Width of flanges + web_thickness: Thickness of the web + flange_thickness: Thickness of the flanges + + Returns: + TopoDS_Shape: The double channel section centered at origin + """ + # Create base channel + base = _create_channel_section(length, depth, flange_width, web_thickness, flange_thickness) + + # Create mirrored channel mirror = gp_Trsf() mirror.SetMirror(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0))) mirrored = BRepBuilderAPI_Transform(base, mirror, True).Shape() - + + # Spacing between channels offset = flange_width / 2 - + + # Position first channel t1 = gp_Trsf() t1.SetTranslation(gp_Vec(0, +offset, 0)) - + c1 = BRepBuilderAPI_Transform(base, t1, True).Shape() + + # Position second channel t2 = gp_Trsf() t2.SetTranslation(gp_Vec(0, -offset, 0)) - - c1 = BRepBuilderAPI_Transform(base, t1, True).Shape() c2 = BRepBuilderAPI_Transform(mirrored, t2, True).Shape() - + + # Fuse both channels return BRepAlgoAPI_Fuse(c1, c2).Shape() -# INTERNAL UTILITIES +def _create_i_section(length, depth, flange_width, web_thickness, flange_thickness): + """ + Create an I-section (I-beam or H-beam). + + Args: + length: Length of the section along X-axis + depth: Overall depth of the I-section + flange_width: Width of top and bottom flanges + web_thickness: Thickness of the web + flange_thickness: Thickness of the flanges + + Returns: + TopoDS_Shape: The I-section centered at origin + """ + # Create web + web = BRepPrimAPI_MakeBox(length, web_thickness, depth).Shape() + + # Create bottom flange + bottom = BRepPrimAPI_MakeBox(length, flange_width, flange_thickness).Shape() + + # Create top flange + top = BRepPrimAPI_MakeBox(length, flange_width, flange_thickness).Shape() + + # Position top flange + trsf_top = gp_Trsf() + trsf_top.SetTranslation( + gp_Vec(0, -flange_width / 2 + web_thickness / 2, depth - flange_thickness) + ) + top = BRepBuilderAPI_Transform(top, trsf_top, True).Shape() + + # Position bottom flange + trsf_bot = gp_Trsf() + trsf_bot.SetTranslation( + gp_Vec(0, -flange_width / 2 + web_thickness / 2, 0) + ) + bottom = BRepBuilderAPI_Transform(bottom, trsf_bot, True).Shape() + + # Fuse all components + i_section = BRepAlgoAPI_Fuse(web, bottom).Shape() + i_section = BRepAlgoAPI_Fuse(i_section, top).Shape() + + # Center the section at origin + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(-length / 2, -web_thickness / 2, -depth / 2)) + + return BRepBuilderAPI_Transform(i_section, trsf, True).Shape() + + +# UTILITY FUNCTIONS def _get_roll_angle(section_type, roll_sign): + """ + Determine the roll angle for section orientation. + + Args: + section_type: Type of section ("ANGLE", "CHANNEL", etc.) + roll_sign: Sign indicating roll direction (+1 or -1) + + Returns: + float: Roll angle in radians + """ if section_type in ("ANGLE", "CHANNEL"): return roll_sign * (math.pi / 2) return 0.0 def _create_section_solid(section_type, length, thickness, dims): - + """ + Create a section solid based on type and dimensions. + + Args: + section_type: Type of section to create + length: Length of the section + thickness: Thickness parameter (used for angles) + dims: Dictionary containing section dimensions + + Returns: + TopoDS_Shape: The created section + + Raises: + ValueError: If section type is not supported + """ if section_type == "ANGLE": - return _create_angle_section( - length, dims["leg_h"], dims["leg_w"], thickness - ) - + # Support both angle-specific and generic dimension keys + h = dims.get("leg_h", dims.get("depth", 100)) + w = dims.get("leg_w", dims.get("flange_width", 50)) + return _create_angle_section(length, h, w, thickness) + if section_type == "CHANNEL": - return _create_channel_section( - length, - dims["depth"], - dims["flange_width"], - dims["web_thickness"], - dims["flange_thickness"] - ) - + d = dims.get("depth", 100) + wf = dims.get("flange_width", 50) + tw = dims.get("web_thickness", 5) + tf = dims.get("flange_thickness", 7) + return _create_channel_section(length, d, wf, tw, tf) + if section_type == "DOUBLE_ANGLE": + h = dims.get("leg_h", dims.get("depth", 100)) + w = dims.get("leg_w", dims.get("flange_width", 50)) return _create_double_angle_section( - length, - dims["leg_h"], - dims["leg_w"], - thickness, + length, h, w, thickness, dims.get("connection_type", "LONGER_LEG") ) - + if section_type == "DOUBLE_CHANNEL": - return _create_double_channel_section( - length, - dims["depth"], - dims["flange_width"], - dims["web_thickness"], - dims["flange_thickness"] - ) - - raise ValueError("Unsupported section type") - - -# MEMBER CREATION + d = dims.get("depth", 100) + wf = dims.get("flange_width", 50) + tw = dims.get("web_thickness", 5) + tf = dims.get("flange_thickness", 7) + return _create_double_channel_section(length, d, wf, tw, tf) + + if section_type == "I_SECTION": + d = dims.get("depth", 100) + wf = dims.get("flange_width", 50) + tw = dims.get("web_thickness", 10) + tf = dims.get("flange_thickness", 15) + return _create_i_section(length, d, wf, tw, tf) + + raise ValueError(f"Unsupported section type: {section_type}") + + +# MEMBER CREATION FUNCTIONS def _create_diagonal_member(p1, p2, thickness, section_type, dims, roll_sign): - + """ + Create a diagonal bracing member between two points. + + + Args: + p1: Starting point (gp_Pnt) + p2: Ending point (gp_Pnt) + thickness: Section thickness + section_type: Type of section + dims: Section dimensions dictionary + roll_sign: Roll direction indicator + + Returns: + TopoDS_Shape: The positioned bracing member + """ + # Calculate vector and length vec = gp_Vec(p1, p2) length = vec.Magnitude() - - solid = _create_section_solid( - section_type, length, thickness, dims - ) - - x_dir = gp_Dir(1, 0, 0) - tgt = gp_Dir(vec) - + + # Create section at origin + solid = _create_section_solid(section_type, length, thickness, dims) + + # Calculate rotation to align with target vector + x_dir = gp_Dir(1, 0, 0) # Initial direction + tgt = gp_Dir(vec) # Target direction + axis = gp_Vec(x_dir.Crossed(tgt)) angle = x_dir.Angle(tgt) - + + # Apply rotation if needed if axis.Magnitude() > 1e-6: tr = gp_Trsf() tr.SetRotation(gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(axis)), angle) solid = BRepBuilderAPI_Transform(solid, tr, True).Shape() - + + # Apply roll angle for proper orientation roll = _get_roll_angle(section_type, roll_sign) if abs(roll) > 1e-6: tr = gp_Trsf() tr.SetRotation(gp_Ax1(gp_Pnt(0, 0, 0), tgt), roll) solid = BRepBuilderAPI_Transform(solid, tr, True).Shape() - + + # Calculate midpoint mid = gp_Pnt( (p1.X() + p2.X()) / 2, (p1.Y() + p2.Y()) / 2, (p1.Z() + p2.Z()) / 2 ) - + + # Translate to position tr = gp_Trsf() tr.SetTranslation(gp_Vec(mid.X(), mid.Y(), mid.Z())) - - return BRepBuilderAPI_Transform(solid, tr, True).Shape() - - -def _create_horizontal_member_y( - x, yL, yR, z, thickness, flange_width, section_type, dims, roll_sign -): - - y0 = yL - y1 = yR - length = y1 - y0 - y_mid = (y0 + y1) / 2 - - solid = _create_section_solid( - section_type, length, thickness, dims - ) - - tr = gp_Trsf() - tr.SetRotation( - gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), - math.pi / 2 - ) - solid = BRepBuilderAPI_Transform(solid, tr, True).Shape() - - roll = _get_roll_angle(section_type, roll_sign) - if abs(roll) > 1e-6: - tr = gp_Trsf() - tr.SetRotation(gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0)), roll) - solid = BRepBuilderAPI_Transform(solid, tr, True).Shape() - - tr = gp_Trsf() - tr.SetTranslation(gp_Vec(x, y_mid, z)) - + return BRepBuilderAPI_Transform(solid, tr, True).Shape() -# BRACING TOPOLOGIES - -def _x_bracing( - x, yL, yR, depth, tf, thickness, flange_w, - section_type, dims, bracket, skew_angle=0 -): +# BRACING PATTERN FUNCTIONS - # ✅ WEB–FLANGE JUNCTIONS +def _x_bracing(x, yL, yR, depth, tf, thickness, flange_w, + section_type, dims, bracket, skew_angle=0): + """ + Create X-bracing pattern between two girders. + + X-bracing consists of two diagonal members crossing each other, + with optional horizontal brackets at top and/or bottom. + + Args: + x: Longitudinal position + yL: Left girder lateral position + yR: Right girder lateral position + depth: Girder depth + tf: Flange thickness + thickness: Bracing member thickness + flange_w: Flange width + section_type: Section type for bracing + dims: Section dimensions + bracket: Bracket option ("NONE", "UPPER", "LOWER", "BOTH") + skew_angle: Bridge skew angle in degrees + + Returns: + list: List of bracing member shapes + """ + # Calculate vertical positions (top and bottom of web) z_bot = -depth / 2 z_top = +depth / 2 - - yl = yL - yr = yR - + def get_skew_x(y): + """Calculate longitudinal offset due to skew.""" if skew_angle == 0: return 0.0 return y * math.tan(math.radians(skew_angle)) - - x_l = x + get_skew_x(yl) - x_r = x + get_skew_x(yr) - - + + # Apply skew offsets + x_l = x + get_skew_x(yL) + x_r = x + get_skew_x(yR) + + # Create main X-diagonals braces = [ - # Left TOP → Right BOTTOM + # Left TOP → Right BOTTOM diagonal _create_diagonal_member( - gp_Pnt(x_l, yl, z_top), gp_Pnt(x_r, yr, z_bot), + gp_Pnt(x_l, yL, z_top), + gp_Pnt(x_r, yR, z_bot), thickness, section_type, dims, +1 ), - # Left BOTTOM → Right TOP + # Left BOTTOM → Right TOP diagonal _create_diagonal_member( - gp_Pnt(x_l, yl, z_bot), gp_Pnt(x_r, yr, z_top), + gp_Pnt(x_l, yL, z_bot), + gp_Pnt(x_r, yR, z_top), thickness, section_type, dims, -1 ) ] - + + # Add optional brackets if bracket in ("LOWER", "BOTH"): - # Use diagonal member logic for skewed "horizontal" members braces.append( _create_diagonal_member( - gp_Pnt(x_l, yl, z_bot), gp_Pnt(x_r, yr, z_bot), + gp_Pnt(x_l, yL, z_bot), + gp_Pnt(x_r, yR, z_bot), thickness, section_type, dims, +1 ) ) - + if bracket in ("UPPER", "BOTH"): braces.append( _create_diagonal_member( - gp_Pnt(x_l, yl, z_top), gp_Pnt(x_r, yr, z_top), + gp_Pnt(x_l, yL, z_top), + gp_Pnt(x_r, yR, z_top), thickness, section_type, dims, +1 ) ) - + return braces -def _k_bracing( - x, yL, yR, depth, tf, thickness, flange_w, - section_type, dims, top_bracket, skew_angle=0 -): - +def _k_bracing(x, yL, yR, depth, tf, thickness, flange_w, + section_type, dims, top_bracket, skew_angle=0): + """ + Create K-bracing pattern between two girders. + + K-bracing consists of two diagonal members meeting at a central + bottom node, with a mandatory bottom horizontal and optional top horizontal. + + Args: + x: Longitudinal position + yL: Left girder lateral position + yR: Right girder lateral position + depth: Girder depth + tf: Flange thickness + thickness: Bracing member thickness + flange_w: Flange width + section_type: Section type for bracing + dims: Section dimensions + top_bracket: Whether to include top horizontal bracket + skew_angle: Bridge skew angle in degrees + + Returns: + list: List of bracing member shapes + """ + # Calculate vertical positions z_bot = -depth / 2 z_top = +depth / 2 - - yl = yL - yr = yR - ym = (yl + yr) / 2 - + + # Calculate midpoint between girders + ym = (yL + yR) / 2 + def get_skew_x(y): + """Calculate longitudinal offset due to skew.""" if skew_angle == 0: return 0.0 return y * math.tan(math.radians(skew_angle)) - - x_l = x + get_skew_x(yl) - x_r = x + get_skew_x(yr) + + # Apply skew offsets + x_l = x + get_skew_x(yL) + x_r = x + get_skew_x(yR) x_m = x + get_skew_x(ym) - + + # Create K-pattern members braces = [ + # Left TOP → Middle BOTTOM diagonal _create_diagonal_member( - gp_Pnt(x_l, yl, z_top), gp_Pnt(x_m, ym, z_bot), + gp_Pnt(x_l, yL, z_top), + gp_Pnt(x_m, ym, z_bot), thickness, section_type, dims, +1 ), + # Right TOP → Middle BOTTOM diagonal _create_diagonal_member( - gp_Pnt(x_r, yr, z_top), gp_Pnt(x_m, ym, z_bot), + gp_Pnt(x_r, yR, z_top), + gp_Pnt(x_m, ym, z_bot), thickness, section_type, dims, -1 ), + # Bottom horizontal (mandatory for K-bracing) _create_diagonal_member( - gp_Pnt(x_l, yl, z_bot), gp_Pnt(x_r, yr, z_bot), + gp_Pnt(x_l, yL, z_bot), + gp_Pnt(x_r, yR, z_bot), thickness, section_type, dims, +1 ) ] - + + # Add optional top bracket if top_bracket: braces.append( _create_diagonal_member( - gp_Pnt(x_l, yl, z_top), gp_Pnt(x_r, yr, z_top), + gp_Pnt(x_l, yL, z_top), + gp_Pnt(x_r, yR, z_top), thickness, section_type, dims, +1 ) ) - + return braces -# PUBLIC API + +def _diaphragm_bracing(x, yL, yR, depth, tf, thickness, section_type, dims, skew_angle=0): + """ + Create a horizontal diaphragm member (rolled or welded beam). + + Diaphragm is placed at the top of the girder depth, typically used + at bridge ends for load distribution and stability. + + Args: + x: Longitudinal position + yL: Left girder lateral position + yR: Right girder lateral position + depth: Girder depth + tf: Flange thickness + thickness: Diaphragm thickness + section_type: Section type (typically I_SECTION) + dims: Section dimensions + skew_angle: Bridge skew angle in degrees + + Returns: + list: List containing the diaphragm member shape + """ + # Place at top of girder + z_top = depth / 2 + + def get_skew_x(y): + """Calculate longitudinal offset due to skew.""" + if skew_angle == 0: + return 0.0 + return y * math.tan(math.radians(skew_angle)) + + # Apply skew offsets + x_l = x + get_skew_x(yL) + x_r = x + get_skew_x(yR) + + # Create horizontal diaphragm member + return [ + _create_diagonal_member( + gp_Pnt(x_l, yL, z_top), + gp_Pnt(x_r, yR, z_top), + thickness, + section_type, + dims, + +1 + ) + ] + + + def build_cross_bracings( *, + # Bridge geometry parameters span_length_L, num_girders, girder_spacing, girder_depth, flange_thickness, flange_width, - + + # Bracing configuration bracing_type, # "X" or "K" - section_type, # "ANGLE", "CHANNEL", "DOUBLE_ANGLE", "DOUBKE_CHANNEL" - section_dims, - thickness, - - panel_spacing, - bracket_option="BOTH", - top_bracket=False, - skew_angle=0 + section_type, # "ANGLE", "CHANNEL", "DOUBLE_ANGLE", etc. + section_dims, # Dictionary with section dimensions + thickness, # Member thickness + + # Spacing and options + panel_spacing, # Spacing between bracing frames + bracket_option="BOTH", # For X-bracing: "NONE", "UPPER", "LOWER", "BOTH" + top_bracket=False, # For K-bracing: include top horizontal + skew_angle=0, # Bridge skew angle in degrees + + # End diaphragm configuration + end_diaphragm_type="Cross Bracing", # "Cross Bracing", "Rolled Beam", "Welded Beam" + end_diaphragm_section="I_SECTION", # Section type for diaphragm + end_diaphragm_dims=None, # Custom dimensions for diaphragm + end_diaphragm_spacing=0 ): - """ - Build cross bracings for entire bridge. - """ bracings = [] - - # Number of bracing frames along span - n = int(span_length_L / panel_spacing) - 1 - n_total = n + 2 + + # Calculate bracing frame positions along the span + # Number of internal panels + n_internal = int(span_length_L / panel_spacing) - 1 + # Total number of frames (internal + 2 end frames) + n_total = n_internal + 2 + # Actual spacing (may differ slightly from panel_spacing) spacing = span_length_L / (n_total - 1) + # Generate longitudinal positions x_positions = [i * spacing for i in range(n_total)] - + + # Calculate total transverse width total_width = (num_girders - 1) * girder_spacing + + # Loop through all bracing frames for x in x_positions: + # Loop through all bays between girders for i in range(num_girders - 1): - + # Calculate lateral positions of left and right girders yL = (i * girder_spacing) - total_width / 2 yR = yL + girder_spacing - + + # Check if this is an end position (first or last frame) + is_end = (x == x_positions[0] or x == x_positions[-1]) + + # END DIAPHRAGM HANDLING + if is_end: + if end_diaphragm_type == "Cross Bracing": + # Use the same bracing type (X or K) as internal panels + if bracing_type == "X": + bracings.extend( + _x_bracing( + x, yL, yR, + girder_depth, flange_thickness, + thickness, flange_width, + section_type, section_dims, + bracket_option, + skew_angle=skew_angle + ) + ) + elif bracing_type == "K": + bracings.extend( + _k_bracing( + x, yL, yR, + girder_depth, flange_thickness, + thickness, flange_width, + section_type, section_dims, + top_bracket, + skew_angle=skew_angle + ) + ) + + elif end_diaphragm_type == "Rolled Beam": + # Use I-section for rolled beam diaphragm + diaphragm_dims = end_diaphragm_dims if end_diaphragm_dims is not None else section_dims + + # Validate dimensions or use defaults + if "depth" not in diaphragm_dims or "flange_width" not in diaphragm_dims: + diaphragm_dims = { + "depth": girder_depth * 0.8, + "flange_width": 200, + "web_thickness": 10, + "flange_thickness": 15 + } + + bracings.extend( + _diaphragm_bracing( + x, yL, yR, + girder_depth, flange_thickness, + thickness, + "I_SECTION", + diaphragm_dims, + skew_angle=skew_angle + ) + ) + + elif end_diaphragm_type == "Welded Beam": + # Use I-section for welded beam diaphragm + # Welded beams can have different proportions than rolled + diaphragm_dims = end_diaphragm_dims if end_diaphragm_dims is not None else section_dims + + # Validate dimensions or use defaults (slightly larger than rolled) + if "depth" not in diaphragm_dims or "flange_width" not in diaphragm_dims: + diaphragm_dims = { + "depth": girder_depth * 0.85, # Slightly deeper + "flange_width": 250, # Wider flange + "web_thickness": 12, # Thicker web + "flange_thickness": 20 # Thicker flange + } + + bracings.extend( + _diaphragm_bracing( + x, yL, yR, + girder_depth, flange_thickness, + thickness, + "I_SECTION", + diaphragm_dims, + skew_angle=skew_angle + ) + ) + + continue + + # INTERNAL BRACING HANDLING + # Build normal X or K bracing for internal panels if bracing_type == "X": bracings.extend( _x_bracing( @@ -388,7 +757,7 @@ def build_cross_bracings( skew_angle=skew_angle ) ) - + elif bracing_type == "K": bracings.extend( _k_bracing( @@ -400,5 +769,5 @@ def build_cross_bracings( skew_angle=skew_angle ) ) - - return bracings + + return bracings \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index ae018d200..640465ecc 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -1,5 +1,25 @@ """ -CAD generator for Plate Girder Bridge. +Plate Girder Bridge CAD Generator +================================== + +This module generates complete 3D CAD models for plate girder bridges, +including girders, deck, crash barriers, railings, median, and cross bracing systems. + +Components Generated: + - Plate Girders: Web, top flange, bottom flange, stiffeners + - Deck System: Concrete deck slab with textures + - Safety Features: Crash barriers, railings, median + - Bracing System: Cross bracings and end diaphragms + - Supports: Bearing supports (triangular and cylindrical) + +Features: + - Configurable number of girders and spacing + - Multiple bracing patterns (X, K) + - Various end diaphragm options + - Skew angle support + - IRC-compliant crash barriers and railings + - Flexible footpath and median configurations + """ @@ -8,34 +28,27 @@ from OCC.Core.AIS import AIS_Shape from OCC.Core.TopAbs import TopAbs_EDGE -# Builder imports - +# Component builder imports from osdagbridge.core.bridge_components.super_structure.plate_girder.builder import ( build_plate_girder_geometry ) - - from osdagbridge.core.bridge_components.super_structure.deck.builder import ( build_deck ) - from osdagbridge.core.bridge_components.super_structure.crash_barrier.builder import ( build_crash_barriers ) - from osdagbridge.core.bridge_components.super_structure.railing.builder import ( build_railings ) - from osdagbridge.core.bridge_components.super_structure.median.builder import ( build_median ) - from osdagbridge.core.bridge_components.super_structure.cross_bracing.builder import ( build_cross_bracings ) - +# Component keys for CAD organization KEY_CAD_GIRDER = "Girder" KEY_CAD_STIFFENER = "Stiffener" KEY_CAD_CROSS_BRACING = "Cross Bracing" @@ -46,96 +59,247 @@ KEY_MODULE_PG = "Plate Girder" - # CAD GENERATOR CLASS class PlateGirderCADGenerator: """ Plate Girder Bridge CAD Generator. - - Holds parameters and generates assembled CAD geometry. + + This class manages all parameters for a plate girder bridge and + generates the complete 3D CAD geometry. + + Attributes: + bridge_type: Type of bridge module + + Girder Parameters: + span_length_L: Total span length + girder_section_d: Clear web depth + girder_section_bf: Top flange width + girder_section_bf_b: Bottom flange width + girder_section_tf: Top flange thickness + girder_section_tf_b: Bottom flange thickness + girder_section_tw: Web thickness + num_girders: Number of parallel girders + girder_spacing: Center-to-center girder spacing + + Geometry: + skew_angle: Bridge skew angle in degrees (0 = no skew) + + Deck Parameters: + carriageway_width: Width of traffic lanes + deck_thickness: Deck slab thickness + footpath_config: Footpath configuration ("NONE", "LEFT", "RIGHT", "BOTH") + footpath_width: Width of footpath + railing_width: Width of railing + + Safety Features: + barrier_type: Type of crash barrier ("Rigid", "Semi-Rigid", "Flexible") + crash_barrier_subtype: Specific barrier design + enable_median: Whether to include median barrier + median_type: Type of median barrier + railing_type: Type of railing ("rcc", "steel") + rail_count: Number of rails + + Bracing System: + cross_bracing_spacing: Spacing between bracing frames + cross_bracing_thickness: Thickness of bracing members + bracing_type: Bracing pattern ("X" or "K") + x_bracket_option: X-bracing bracket option + k_top_bracket: K-bracing top bracket option + cross_bracing_section_type: Section type for bracing + cross_bracing_section_dims: Section dimensions + For ANGLE/DOUBLE_ANGLE sections: + - leg_h: vertical leg height + - leg_w: horizontal leg width + - connection_type (DOUBLE_ANGLE only): "LONGER_LEG" or "SHORTER_LEG" + determines which legs are connected back-to-back + For CHANNEL/DOUBLE_CHANNEL/I_SECTION: + - depth: overall depth + - flange_width: flange width + - web_thickness: web thickness + - flange_thickness: flange thickness + + End Diaphragm: + end_diaphragm_type: Type of end treatment + end_diaphragm_section: Section type for diaphragm + end_diaphragm_dims: Diaphragm dimensions + end_diaphragm_spacing: Reserved for future use """ def __init__(self, bridge_type=KEY_MODULE_PG): - + """ + Initialize the CAD generator with default parameters. + + Args: + bridge_type: Type of bridge module (default: Plate Girder) + """ self.bridge_type = bridge_type - # GIRDERS PARAMETERS - self.span_length_L = 10000 + # GIRDER PARAMETERS + self.span_length_L = 10000 # Total span length (mm) - self.girder_section_d = 900 # clear web depth - self.girder_section_bf = 500 #top flange width - self.girder_section_bf_b = 500 #bottom flange width - self.girder_section_tf = 260 #top flange thickness - self.girder_section_tf_b = 260 #bottom flange thickness - self.girder_section_tw = 100 + self.girder_section_d = 900 # Clear web depth (mm) + self.girder_section_bf = 500 # Top flange width (mm) + self.girder_section_bf_b = 500 # Bottom flange width (mm) + self.girder_section_tf = 260 # Top flange thickness (mm) + self.girder_section_tf_b = 260 # Bottom flange thickness (mm) + self.girder_section_tw = 100 # Web thickness (mm) - self.num_girders = 5 - self.girder_spacing = 2750 # center-to-center spacing + self.num_girders = 5 # Number of girders + self.girder_spacing = 2750 # Center-to-center spacing (mm) - # SKEW ANGLE PARAMETER - self.skew_angle = 25 # skew angle in degrees (0 = no skew) + # GEOMETRY PARAMETERS + self.skew_angle = 0 # Skew angle in degrees (0 = no skew) # DECK PARAMETERS - self.carriageway_width = 12000 - self.deck_thickness = 400 + self.carriageway_width = 12000 # Width of traffic lanes (mm) + self.deck_thickness = 400 # Deck slab thickness (mm) - self.footpath_config = "BOTH" # NONE / LEFT / RIGHT / BOTH - self.footpath_width = 1500 - self.railing_width = 300 + self.footpath_config = "BOTH" # "NONE" / "LEFT" / "RIGHT" / "BOTH" + self.footpath_width = 1500 # Footpath width (mm) + self.railing_width = 300 # Railing width (mm) # CRASH BARRIER PARAMETERS - self.barrier_type = "Rigid" # "Rigid" or "Semi-Rigid" - self.crash_barrier_subtype = "IRC-5R" # "IRC-5R", "High Containment", "Single W-beam", "Double W-beam" + self.barrier_type = "Rigid" # "Rigid", "Semi-Rigid", or "Flexible" + self.crash_barrier_subtype = "IRC-5R" # Specific barrier design + + # Options: + # - Rigid: "IRC-5R", "High Containment" + # - Semi-Rigid/Metallic: "Single W-beam", "Double W-beam" # MEDIAN PARAMETERS - self.enable_median = True - self.median_type = "Metallic Crash Barrier" # "Raised Kerb", "RCC Crash Barrier", "Metallic Crash Barrier" + self.enable_median = True # Include median barrier + self.median_type = "Metallic Crash Barrier" + # Options: "Raised Kerb", "RCC Crash Barrier", "Metallic Crash Barrier" # RAILING PARAMETERS - self.rail_count = 3 - self.railing_type = "rcc" + self.rail_count = 3 # Number of rails + self.railing_type = "rcc" # "rcc" or "steel" # STIFFENER PARAMETERS - self.stiffener_width = 200 - self.stiffener_length = 10 - - # END STIFFENER PARAMETERS - self.include_end_stiffeners = True - self.end_stiffener_thickness = 25 + self.stiffener_width = 200 # Stiffener width (mm) + self.stiffener_length = 10 # Stiffener length (mm) + # End stiffener configuration + self.include_end_stiffeners = True # Include end stiffeners + self.end_stiffener_thickness = 25 # End stiffener thickness (mm) # CROSS BRACING PARAMETERS - self.cross_bracing_spacing = 4000 - self.cross_bracing_thickness = 5 + self.cross_bracing_spacing = 4000 # Spacing between bracing frames (mm) + self.cross_bracing_thickness = 5 # Bracing member thickness (mm) - self.bracing_type = "K" # "X" or "K" - self.x_bracket_option = "BOTH" - self.k_top_bracket = True + self.bracing_type = "K" # "X" or "K" + self.x_bracket_option = "BOTH" # For X-bracing: "NONE", "UPPER", "LOWER", "BOTH" + self.k_top_bracket = True # For K-bracing: include top bracket - self.cross_bracing_section_type = "CHANNEL" + # Section configuration - Choose one of the following: + + # OPTION 1: CHANNEL section (current default) + # self.cross_bracing_section_type = "CHANNEL" + # self.cross_bracing_section_dims = { + # "depth": 100, + # "flange_width": 50, + # "web_thickness": 5, + # "flange_thickness": 7 + # } + + # OPTION 2: DOUBLE_ANGLE section (uncomment to use) + self.cross_bracing_section_type = "DOUBLE_ANGLE" self.cross_bracing_section_dims = { - "depth": 100, - "flange_width": 50, - "web_thickness": 5, - "flange_thickness": 7 + "leg_h": 100, # Vertical leg height (longer leg) + "leg_w": 50, # Horizontal leg width (shorter leg) + "connection_type": "LONGER_LEG" # "LONGER_LEG" or "SHORTER_LEG" } - - + + + # OPTION 3: ANGLE section (uncomment to use) + # self.cross_bracing_section_type = "ANGLE" + # self.cross_bracing_section_dims = { + # "leg_h": 100, # Vertical leg height + # "leg_w": 50 # Horizontal leg width + # } + + # OPTION 4: DOUBLE_CHANNEL section (uncomment to use) + # self.cross_bracing_section_type = "DOUBLE_CHANNEL" + # self.cross_bracing_section_dims = { + # "depth": 100, + # "flange_width": 50, + # "web_thickness": 5, + # "flange_thickness": 7 + # } + + # END DIAPHRAGM PARAMETERS + self.end_diaphragm_type = "Cross Bracing" # Options: "Cross Bracing", "Rolled Beam", "Welded Beam" + + + # If using "Cross Bracing" type, end diaphragms will use the same + # section as cross_bracing_section_type and cross_bracing_section_dims + + # If using "Rolled Beam" or "Welded Beam", these parameters are used: + self.end_diaphragm_section = "I_SECTION" + self.end_diaphragm_dims = { + "depth": 800, + "flange_width": 250, + "web_thickness": 12, + "flange_thickness": 20 + } + self.end_diaphragm_spacing = 0 # MAIN CAD GENERATION def generate(self): """ - Generate full bridge CAD. + Generate complete bridge CAD geometry. + + This method orchestrates the creation of all bridge components: + 1. Plate girders (web, flanges, stiffeners) + 2. Cross bracing system + 3. Deck slab + 4. Crash barriers + 5. Median barriers (if enabled) + 6. Railings + 7. Support structures + + Returns: + dict: Dictionary containing all generated CAD components: + - girders: List of girder components (web + flanges) + - girder_web: List of web components only + - girder_flanges: List of flange components only + - stiffeners: List of stiffener components + - supports: All support structures + - supports_tri: Triangular supports + - supports_cyl: Cylindrical supports + - cross_bracings: Cross bracing members + - deck_slab: Deck slab geometry + - deck_textures: Deck surface textures + - deck_top_z: Z-coordinate of deck top surface + - total_deck_width: Total width of deck + - crash_barriers: Crash barrier components + - crash_barrier_w_beams: W-beam components (if metallic) + - median_barriers: Median barrier components + - median_w_beams: Median W-beams (if metallic) + - railings: Railing components """ - - # Local helpers + + # HELPER FUNCTIONS + import math from OCC.Core.gp import gp_Trsf, gp_Vec from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform def _translate(shape, dx=0, dy=0, dz=0): + """ + Translate a shape by the specified offsets. + + Args: + shape: TopoDS_Shape to translate + dx: X-offset + dy: Y-offset + dz: Z-offset + + Returns: + Translated TopoDS_Shape + """ trsf = gp_Trsf() trsf.SetTranslation(gp_Vec(dx, dy, dz)) return BRepBuilderAPI_Transform(shape, trsf, True).Shape() @@ -143,12 +307,14 @@ def _translate(shape, dx=0, dy=0, dz=0): def _calculate_skew_offset(lateral_position, reference_position=0): """ Calculate longitudinal offset due to skew angle. - Plan-view geometric offset: shift = L × tan(θ) + + This implements the plan-view geometric offset for skewed bridges: + longitudinal_shift = lateral_distance × tan(skew_angle) Args: lateral_position: Transverse position (Y-coordinate) reference_position: Reference lateral position with zero offset - + Returns: Longitudinal offset (X-coordinate shift) """ @@ -159,7 +325,8 @@ def _calculate_skew_offset(lateral_position, reference_position=0): lateral_distance = lateral_position - reference_position return lateral_distance * math.tan(skew_rad) - # 1. BUILD SINGLE PLATE GIRDER GEOMETRY + # STEP 1: BUILD SINGLE PLATE GIRDER GEOMETRY + pg = build_plate_girder_geometry( D=self.girder_section_d, tw=self.girder_section_tw, @@ -175,106 +342,101 @@ def _calculate_skew_offset(lateral_position, reference_position=0): T_es=self.end_stiffener_thickness ) - # 2. PLACE MULTIPLE GIRDERS (Y-DIRECTION, CENTERED) WITH SKEW OFFSET + # STEP 2: PLACE MULTIPLE GIRDERS WITH SKEW OFFSET + girders = [] stiffeners = [] - girder_web = [] girder_flanges = [] total_width = (self.num_girders - 1) * self.girder_spacing - - # Reference position for skew (centerline = 0) - reference_position = 0.0 + reference_position = 0.0 # Centerline reference for skew for i in range(self.num_girders): - # Transverse offset (Y-direction) + # Calculate transverse offset (Y-direction) y_offset = (i * self.girder_spacing) - (total_width / 2) - # Longitudinal offset due to skew (X-direction) - # Each girder shifts by L × tan(θ) based on lateral distance from center + # Calculate longitudinal offset due to skew (X-direction) x_offset = _calculate_skew_offset(y_offset, reference_position) - # Web + # Place web web = _translate(pg["web"], dx=x_offset, dy=y_offset) girders.append(web) girder_web.append(web) - # Top flange + # Place top flange top_flange = _translate(pg["top_flange"], dx=x_offset, dy=y_offset) girders.append(top_flange) girder_flanges.append(top_flange) - # Bottom flange + # Place bottom flange bottom_flange = _translate(pg["bottom_flange"], dx=x_offset, dy=y_offset) girders.append(bottom_flange) girder_flanges.append(bottom_flange) - - # Stiffeners (follow parent girder's offset) + # Place stiffeners (follow parent girder's offset) for stiff in pg["stiffeners"]: stiffeners.append( _translate(stiff, dx=x_offset, dy=y_offset) ) + # STEP 3: PLACE SUPPORT STRUCTURES + supports_tri = [] supports_cyl = [] for i in range(self.num_girders): - # Same offset calculation as girders + # Calculate offsets (same as girders) y_offset = (i * self.girder_spacing) - (total_width / 2) x_offset = _calculate_skew_offset(y_offset, reference_position) + # Place triangular supports for s in pg["supports_tri"]: supports_tri.append(_translate(s, dx=x_offset, dy=y_offset)) + # Place cylindrical supports for s in pg["supports_cyl"]: supports_cyl.append(_translate(s, dx=x_offset, dy=y_offset)) - - # 3. REFERENCE Z-LEVELS - + # STEP 4: CALCULATE REFERENCE Z-LEVELS + + # Bracing girder depth (for cross bracing placement) bracing_girder_depth = ( - (self.girder_section_d / 2) - + self.girder_section_tf + (self.girder_section_d / 2) + + self.girder_section_tf ) - - - # Top of girder for deck placement ONLY + # Top of girder for deck placement girder_top_z = (self.girder_section_d / 2) + self.girder_section_tf - - # 4. SKEW ANGLE (HANDLED BY COMPONENT BUILDERS) - # We pass self.skew_angle to components that support skewed geometry (like deck) - # Components that are placed relative to girders (like cross-bracing) follow girder offsets. - pass - # 5. CROSS BRACING SYSTEM - # Note: Cross bracings connect girders at their actual (skewed) positions - # The bracing builder handles placement and skew internally. + # STEP 5: BUILD CROSS BRACING SYSTEM + cross_bracings = build_cross_bracings( span_length_L=self.span_length_L, num_girders=self.num_girders, girder_spacing=self.girder_spacing, - - girder_depth=bracing_girder_depth, - flange_thickness=self.girder_section_tf, flange_width=self.girder_section_bf, - + bracing_type=self.bracing_type, section_type=self.cross_bracing_section_type, section_dims=self.cross_bracing_section_dims, thickness=self.cross_bracing_thickness, - + panel_spacing=self.cross_bracing_spacing, bracket_option=self.x_bracket_option, top_bracket=self.k_top_bracket, - skew_angle=self.skew_angle + skew_angle=self.skew_angle, + + end_diaphragm_type=self.end_diaphragm_type, + end_diaphragm_section=self.end_diaphragm_section, + end_diaphragm_dims=self.end_diaphragm_dims, + end_diaphragm_spacing=self.end_diaphragm_spacing ) - # 5. IRC 5 SPECIFICATIONS (CRASH BARRIER) + # STEP 6: CONFIGURE CRASH BARRIER SPECIFICATIONS (IRC 5:2015) + from osdagbridge.core.utils.codes.irc5_2015 import IRC5_2015 from osdagbridge.core.utils.common import ( KEY_CRASH_BARRIER_TYPE, @@ -286,21 +448,20 @@ def _calculate_skew_offset(lateral_position, reference_position=0): VALUES_RAILING_TYPE ) - # Map barrier_type string to KEY_CRASH_BARRIER_TYPE index + # Map barrier types to indices barrier_type_map = {"Flexible": 0, "Semi-Rigid": 1, "Rigid": 2} barrier_idx = barrier_type_map.get(self.barrier_type, 2) - # Map crash_barrier_subtype rigid_subtype_map = {"IRC-5R": 0, "High Containment": 1} metallic_subtype_map = {"Single W-beam": 0, "Double W-beam": 1} - # Map railing type + # Map railing types railing_map = { - VALUES_RAILING_TYPE[0]: KEY_RAILING_TYPE[0], # RCC - VALUES_RAILING_TYPE[1]: KEY_RAILING_TYPE[1], # Steel + VALUES_RAILING_TYPE[0]: KEY_RAILING_TYPE[0], # RCC + VALUES_RAILING_TYPE[1]: KEY_RAILING_TYPE[1], # Steel } - # Robust selection: Check map, then check for rough string match (e.g. "steel") + # Robust railing selection selected_railing_key = railing_map.get(self.railing_type) if selected_railing_key is None: if "steel" in self.railing_type.lower(): @@ -308,17 +469,17 @@ def _calculate_skew_offset(lateral_position, reference_position=0): else: selected_railing_key = KEY_RAILING_TYPE[0] - # If Semi-Rigid, force default RCC railing + # Force RCC railing for Semi-Rigid barriers if self.barrier_type != "Rigid": selected_railing_key = KEY_RAILING_TYPE[0] - # Determine explicit railing width for Deck Sizing - if selected_railing_key == KEY_RAILING_TYPE[1]: # Steel + # Determine railing width + if selected_railing_key == KEY_RAILING_TYPE[1]: # Steel actual_railing_width = 200 else: actual_railing_width = 275 - # Populate design_dict + # Populate design dictionary based on barrier type if self.barrier_type == "Rigid": rigid_subtype_idx = rigid_subtype_map.get(self.crash_barrier_subtype, 0) design_dict = IRC5_2015.cl_109_6_3_shapes( @@ -330,18 +491,18 @@ def _calculate_skew_offset(lateral_position, reference_position=0): ) actual_base_width = design_dict.get("crash_barrier_width", 450) else: - # Semi-rigid / Metallic + # Semi-Rigid / Metallic barrier metallic_subtype_idx = metallic_subtype_map.get(self.crash_barrier_subtype, 0) design_dict = IRC5_2015.cl_109_6_3_shapes( barrier_type=KEY_CRASH_BARRIER_TYPE[1], footpath=KEY_FOOTPATH[0] if self.footpath_config == "NONE" else KEY_FOOTPATH[1], - railing_type=selected_railing_key, # Passing this ensures dictionary gets updated with railing params + railing_type=selected_railing_key, design_dict={}, crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_idx] ) actual_base_width = design_dict.get("kerb_bottom_width", 550) - - # Ensure railing params are in design_dict + + # Ensure railing parameters are in design dictionary if selected_railing_key == KEY_RAILING_TYPE[1]: design_dict["railing_type"] = "steel" design_dict["railing_width"] = 200 @@ -349,14 +510,12 @@ def _calculate_skew_offset(lateral_position, reference_position=0): design_dict["railing_type"] = "RCC" design_dict["railing_width"] = 275 + # STEP 7: BUILD DECK SYSTEM - # 6. DECK SYSTEM (USES TOP-OF-GIRDER Z) - # Deck handles skewed geometry (parallelogram) internally deck_out = build_deck( span_length_L=self.span_length_L, girder_section_d=girder_top_z, deck_thickness=self.deck_thickness, - footpath_config=self.footpath_config, carriageway_width=self.carriageway_width, crash_barrier_base_width=actual_base_width, @@ -365,11 +524,8 @@ def _calculate_skew_offset(lateral_position, reference_position=0): skew_angle=self.skew_angle ) - # 7. CRASH BARRIER PLACEMENT - # Barriers follow deck edges. - # Note: For skew, we might need to apply shifts to barriers as well - # if the barrier builder doesn't handle skew internally. - + # STEP 8: BUILD CRASH BARRIERS + crash_barrier_w_beams = [] crash_barrier_other = [] @@ -387,6 +543,7 @@ def _calculate_skew_offset(lateral_position, reference_position=0): crash_barriers = [] + # Separate W-beams from other barrier components for cb in crash_barriers_raw: if isinstance(cb, dict): if cb.get("w_beams"): @@ -398,15 +555,20 @@ def _calculate_skew_offset(lateral_position, reference_position=0): else: crash_barriers.append(cb) - # 8. MEDIAN + # STEP 9: BUILD MEDIAN BARRIERS (IF ENABLED) + median_barriers = [] - median_w_beams = [] + median_w_beams = [] + if self.enable_median: - # Get median design specifications from IRC5_2015 - median_type_map = {"Raised Kerb": 0, "RCC Crash Barrier": 1, "Metallic Crash Barrier": 2} + # Get median design specifications from IRC 5:2015 + median_type_map = { + "Raised Kerb": 0, + "RCC Crash Barrier": 1, + "Metallic Crash Barrier": 2 + } median_idx = median_type_map.get(self.median_type, 1) - # Map metallic subtype for median metallic_subtype_idx = metallic_subtype_map.get(self.crash_barrier_subtype, 0) median_design_dict = IRC5_2015.cl_109_6_3_shapes( @@ -414,7 +576,8 @@ def _calculate_skew_offset(lateral_position, reference_position=0): footpath=KEY_FOOTPATH[0], railing_type=None, design_dict={}, - crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_idx] if self.median_type == "Metallic Crash Barrier" else None + crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_idx] + if self.median_type == "Metallic Crash Barrier" else None ) median_barriers_raw = build_median( @@ -426,22 +589,19 @@ def _calculate_skew_offset(lateral_position, reference_position=0): skew_angle=self.skew_angle ) - median_barriers = [] - median_w_beams = [] + # Separate W-beams from other median components for mb in median_barriers_raw: if isinstance(mb, dict): if mb.get("w_beams"): median_w_beams.append(mb["w_beams"]) for k in ("kerb", "posts", "spacers"): if mb.get(k): - crash_barrier_other.append(mb[k]) # Using same 'other' list for coloring + crash_barrier_other.append(mb[k]) median_barriers.append(mb[k]) else: median_barriers.append(mb) - # 8. RAILINGS - - + # STEP 10: BUILD RAILINGS railings = build_railings( span_length=self.span_length_L, @@ -452,37 +612,47 @@ def _calculate_skew_offset(lateral_position, reference_position=0): skew_angle=self.skew_angle ) + # STEP 11: CONSOLIDATE SUPPORT STRUCTURES + supports = supports_tri + supports_cyl - - # FINAL RETURN + # RETURN ALL GENERATED COMPONENTS + return { + # Girder components "girders": girders, "girder_web": girder_web, "girder_flanges": girder_flanges, - + + # Stiffeners "stiffeners": stiffeners, - - "supports": supports, + + # Support structures + "supports": supports, "supports_tri": supports_tri, "supports_cyl": supports_cyl, - - + + # Cross bracing system "cross_bracings": cross_bracings, - + + # Deck system "deck_slab": deck_out["deck_slab"], "deck_textures": deck_out["deck_textures"], "deck_top_z": deck_out["deck_top_z"], "total_deck_width": deck_out["total_deck_width"], - + + # Crash barriers "crash_barriers": crash_barriers, "crash_barrier_w_beams": crash_barrier_w_beams, + + # Median barriers "median_barriers": median_barriers, "median_w_beams": median_w_beams, + + # Railings "railings": railings } - def display_3dModel(self, component): hover_dict = { From 84b019df5fe00586b6bbaad39ab5b5686c11cb21 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 11 Feb 2026 01:11:40 +0530 Subject: [PATCH 034/225] Align railing, crash barrier, and median geometry with be=ridge skew --- .../super_structure/crash_barrier/builder.py | 93 +++++++---- .../super_structure/median/builder.py | 144 +++++++++++------- .../super_structure/railing/builder.py | 77 ++++++---- 3 files changed, 201 insertions(+), 113 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py index 6957d838f..514b0a239 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py @@ -48,7 +48,8 @@ def create_rigid_rcc_crash_barrier( *, length, design_dict, - side="LEFT" + side="LEFT", + skew_angle=0 ): @@ -77,19 +78,24 @@ def create_rigid_rcc_crash_barrier( y_top = W_top / 2.0 # 87.5mm from center y_trans = W_at_transition / 2.0 # 125mm from center at transition - # PROFILE POINTS (YZ PLANE) + # SKEW LOGIC + skew_rad = math.radians(skew_angle) + def get_skew_x(y): + return y * math.tan(skew_rad) + + # PROFILE POINTS (YZ PLANE -> SKEWED XY PLANE) # Right side is outer edge (road side), Left is inner edge # Points traced clockwise from bottom-right: - p1 = gp_Pnt(0, y_base, z0) # Bottom right - p2 = gp_Pnt(0, -y_base, z0) # Bottom left + p1 = gp_Pnt(get_skew_x(y_base), y_base, z0) # Bottom right + p2 = gp_Pnt(get_skew_x(-y_base), -y_base, z0) # Bottom left - p3 = gp_Pnt(0, -y_base, z1) # Left side - top of base vertical - p4 = gp_Pnt(0, -y_top, z3) # Left side - top corner (straight slope from base to top) + p3 = gp_Pnt(get_skew_x(-y_base), -y_base, z1) # Left side - top of base vertical + p4 = gp_Pnt(get_skew_x(-y_top), -y_top, z3) # Left side - top corner (straight slope from base to top) - p5 = gp_Pnt(0, y_top, z3) # Right side - top corner - p6 = gp_Pnt(0, y_trans, z2) # Right side - end of main slope / start of transition - p7 = gp_Pnt(0, y_base, z1) # Right side - top of base vertical + p5 = gp_Pnt(get_skew_x(y_top), y_top, z3) # Right side - top corner + p6 = gp_Pnt(get_skew_x(y_trans), y_trans, z2) # Right side - end of main slope / start of transition + p7 = gp_Pnt(get_skew_x(y_base), y_base, z1) # Right side - top of base vertical # Build face poly = BRepBuilderAPI_MakePolygon() @@ -98,6 +104,7 @@ def create_rigid_rcc_crash_barrier( poly.Close() face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + # Extrude along X (length) solid = BRepPrimAPI_MakePrism(face, gp_Vec(length, 0, 0)).Shape() # MIRROR FOR RIGHT SIDE @@ -112,7 +119,8 @@ def create_semi_rigid_metallic_barrier( *, length, design_dict, - side="LEFT" + side="LEFT", + skew_angle=0 ): """ Creates semi-rigid metallic crash barrier (IRC Fig 4). @@ -135,6 +143,11 @@ def create_semi_rigid_metallic_barrier( + # SKEW LOGIC + skew_rad = math.radians(skew_angle) + def get_skew_x(y): + return y * math.tan(skew_rad) + # RCC KERB z0 = 0.0 z1 = kerb_height @@ -144,10 +157,10 @@ def create_semi_rigid_metallic_barrier( y_top_l = -kerb_top_width / 2.0 y_top_r = kerb_top_width / 2.0 - p1 = gp_Pnt(0, y_bottom_l, z0) - p2 = gp_Pnt(0, y_bottom_r, z0) - p3 = gp_Pnt(0, y_top_r, z1) - p4 = gp_Pnt(0, y_top_l, z1) + p1 = gp_Pnt(get_skew_x(y_bottom_l), y_bottom_l, z0) + p2 = gp_Pnt(get_skew_x(y_bottom_r), y_bottom_r, z0) + p3 = gp_Pnt(get_skew_x(y_top_r), y_top_r, z1) + p4 = gp_Pnt(get_skew_x(y_top_l), y_top_l, z1) kerb_poly = BRepBuilderAPI_MakePolygon() for p in (p1, p2, p3, p4): @@ -166,7 +179,24 @@ def create_semi_rigid_metallic_barrier( post_flange_thk = design_dict.get("post_flange_thickness", 7.8) post_offset_from_edge = design_dict.get("post_offset_from_edge", 75) # From outer edge + # Component spans from x_pos - post_web_thk/2 to x_pos + post_depth - post_web_thk/2 + # To keep within [0, length]: + # x_pos - post_web_thk/2 >= 0 => x_pos >= post_web_thk/2 + # x_pos + post_depth - post_web_thk/2 <= length => x_pos <= length - post_depth + post_web_thk/2 + + start_x = post_web_thk / 2.0 + end_x = length - post_depth + post_web_thk / 2.0 + + post_range = end_x - start_x + if post_range < 0: + post_range = 0 + num_posts = int(length / post_spacing) + 1 + if num_posts < 2: + num_posts = 2 + + actual_spacing = post_range / (num_posts - 1) if num_posts > 1 else 0 + posts_combined = None def create_vertical_channel(h, d, w, tw, tf): @@ -208,9 +238,7 @@ def create_vertical_channel(h, d, w, tw, tf): ) for i in range(num_posts): - x_pos = i * post_spacing - if x_pos > length: - break + x_pos = start_x + (i * actual_spacing) post_solid = create_vertical_channel( post_height, post_depth, @@ -264,7 +292,8 @@ def make_w_beam_face(): amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2)) ) - outer_pts.SetValue(i, gp_Pnt(0.0, y_wave, z)) + # Offset X by y_wave * tan(skew) + outer_pts.SetValue(i, gp_Pnt(get_skew_x(y_wave), y_wave, z)) y_top_outer = y_wave y_bottom_outer = ( @@ -281,7 +310,8 @@ def make_w_beam_face(): amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2)) ) - W_BEAM_THICKNESS - inner_pts.SetValue(i, gp_Pnt(0.0, y_wave_inner, z)) + # Offset X by y_wave_inner * tan(skew) + inner_pts.SetValue(i, gp_Pnt(get_skew_x(y_wave_inner), y_wave_inner, z)) y_top_inner = y_wave_inner y_bottom_inner = ( @@ -295,13 +325,13 @@ def make_w_beam_face(): wire = BRepBuilderAPI_MakeWire() wire.Add(BRepBuilderAPI_MakeEdge(outer_curve).Edge()) wire.Add(BRepBuilderAPI_MakeEdge( - gp_Pnt(0.0, y_top_outer, W_BEAM_HEIGHT), - gp_Pnt(0.0, y_top_inner, W_BEAM_HEIGHT) + gp_Pnt(get_skew_x(y_top_outer), y_top_outer, W_BEAM_HEIGHT), + gp_Pnt(get_skew_x(y_top_inner), y_top_inner, W_BEAM_HEIGHT) ).Edge()) wire.Add(BRepBuilderAPI_MakeEdge(inner_curve).Edge()) wire.Add(BRepBuilderAPI_MakeEdge( - gp_Pnt(0.0, y_bottom_inner, 0.0), - gp_Pnt(0.0, y_bottom_outer, 0.0) + gp_Pnt(get_skew_x(y_bottom_inner), y_bottom_inner, 0.0), + gp_Pnt(get_skew_x(y_bottom_outer), y_bottom_outer, 0.0) ).Edge()) return BRepBuilderAPI_MakeFace(wire.Wire()).Face() @@ -331,10 +361,9 @@ def make_w_beam_face(): spacer_z = kerb_height + h_center - spacer_height / 2.0 spacer_y_center = post_y_center + post_width / 2.0 + spacer_width / 2.0 + # Spacers (one per post) for i in range(num_posts): - x_pos = i * post_spacing - if x_pos > length: - break + x_pos = start_x + (i * actual_spacing) spacer_solid = create_vertical_channel( spacer_height, spacer_depth, @@ -533,12 +562,14 @@ def get_skew_x(y): right_shape = create_rigid_rcc_crash_barrier( length=span_length_L, design_dict=design_dict, - side="RIGHT" + side="RIGHT", + skew_angle=-skew_angle ) left_shape = create_rigid_rcc_crash_barrier( length=span_length_L, design_dict=design_dict, - side="LEFT" + side="LEFT", + skew_angle=skew_angle ) crash_barriers.append(translate(right_shape, x=get_skew_x(y_r), y=y_r, z=deck_top_z)) @@ -548,13 +579,15 @@ def get_skew_x(y): right_parts = create_semi_rigid_metallic_barrier( length=span_length_L, design_dict=design_dict, - side="RIGHT" + side="RIGHT", + skew_angle=-skew_angle ) left_parts = create_semi_rigid_metallic_barrier( length=span_length_L, design_dict=design_dict, - side="LEFT" + side="LEFT", + skew_angle=skew_angle ) # Apply translations and store as dictionaries for coloring diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index 55270be15..eab616b94 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -32,13 +32,15 @@ def _mirror_y(shape): return BRepBuilderAPI_Transform(shape, trsf, True).Shape() -def _create_channel_section(length, depth, flange_width, web_thickness, flange_thickness): +def _create_channel_section(length, depth, flange_width, web_thickness, flange_thickness, skew_angle=0): """ - Creates a C-channel section extruded along Z-axis (initially). - Origin at center of the back of the web. + Creates a C-channel section extruded along X-axis. + Supports skewing the end faces. """ - # Re-using the logic from crash_barrier/builder.py - + skew_rad = math.radians(skew_angle) + def get_skew_x(y): + return y * math.tan(skew_rad) + y_web_back = -web_thickness / 2.0 y_web_front = web_thickness / 2.0 y_flange_tip = depth - web_thickness / 2.0 @@ -46,15 +48,15 @@ def _create_channel_section(length, depth, flange_width, web_thickness, flange_t z_bottom = -flange_width / 2.0 z_top = flange_width / 2.0 - # Points for C-shape (facing +Y) in YZ plane - p1 = gp_Pnt(0, y_flange_tip, z_bottom) - p2 = gp_Pnt(0, y_web_back, z_bottom) - p3 = gp_Pnt(0, y_web_back, z_top) - p4 = gp_Pnt(0, y_flange_tip, z_top) - p5 = gp_Pnt(0, y_flange_tip, z_top - flange_thickness) - p6 = gp_Pnt(0, y_web_front, z_top - flange_thickness) - p7 = gp_Pnt(0, y_web_front, z_bottom + flange_thickness) - p8 = gp_Pnt(0, y_flange_tip, z_bottom + flange_thickness) + # Points for C-shape (facing +Y) in YZ plane -> SKEWED XY plane + p1 = gp_Pnt(get_skew_x(y_flange_tip), y_flange_tip, z_bottom) + p2 = gp_Pnt(get_skew_x(y_web_back), y_web_back, z_bottom) + p3 = gp_Pnt(get_skew_x(y_web_back), y_web_back, z_top) + p4 = gp_Pnt(get_skew_x(y_flange_tip), y_flange_tip, z_top) + p5 = gp_Pnt(get_skew_x(y_flange_tip), y_flange_tip, z_top - flange_thickness) + p6 = gp_Pnt(get_skew_x(y_web_front), y_web_front, z_top - flange_thickness) + p7 = gp_Pnt(get_skew_x(y_web_front), y_web_front, z_bottom + flange_thickness) + p8 = gp_Pnt(get_skew_x(y_flange_tip), y_flange_tip, z_bottom + flange_thickness) poly = BRepBuilderAPI_MakePolygon() for p in (p1, p2, p3, p4, p5, p6, p7, p8): @@ -67,11 +69,14 @@ def _create_channel_section(length, depth, flange_width, web_thickness, flange_t return solid -def create_raised_kerb(length, design_dict): +def create_raised_kerb(length, design_dict, skew_angle=0): """ Creates raised kerb median (IRC Fig 5a). Trapezoidal profile extruded along span. """ + skew_rad = math.radians(skew_angle) + def get_skew_x(y): + return y * math.tan(skew_rad) kerb_height = design_dict.get("kerb_height") kerb_top_width = design_dict.get("kerb_top_width") kerb_bottom_width = design_dict.get("kerb_bottom_width") @@ -86,10 +91,10 @@ def create_raised_kerb(length, design_dict): y_top_r = kerb_top_width / 2.0 # Trapezoidal profile (counter-clockwise) - p1 = gp_Pnt(0, y_bottom_l, z0) - p2 = gp_Pnt(0, y_bottom_r, z0) - p3 = gp_Pnt(0, y_top_r, z1) - p4 = gp_Pnt(0, y_top_l, z1) + p1 = gp_Pnt(get_skew_x(y_bottom_l), y_bottom_l, z0) + p2 = gp_Pnt(get_skew_x(y_bottom_r), y_bottom_r, z0) + p3 = gp_Pnt(get_skew_x(y_top_r), y_top_r, z1) + p4 = gp_Pnt(get_skew_x(y_top_l), y_top_l, z1) poly = BRepBuilderAPI_MakePolygon() for p in (p1, p2, p3, p4): @@ -102,7 +107,7 @@ def create_raised_kerb(length, design_dict): return solid -def create_rcc_crash_barrier_median(length, design_dict): +def create_rcc_crash_barrier_median(length, design_dict, skew_angle=0): """ Creates RCC crash barrier median (IRC Fig 5b). Single New Jersey barrier profile (will be mirrored for the other side). @@ -133,26 +138,31 @@ def create_rcc_crash_barrier_median(length, design_dict): y_top = barrier_top_width / 2.0 y_trans = W_at_transition / 2.0 + # SKEW LOGIC + skew_rad = math.radians(skew_angle) + def get_skew_x(y): + return y * math.tan(skew_rad) + # 1. Bottom Right (Road side base) - p1 = gp_Pnt(0, y_base, z0) + p1 = gp_Pnt(get_skew_x(y_base), y_base, z0) # 2. Bottom Left (Median side base) - p2 = gp_Pnt(0, -y_base, z0) + p2 = gp_Pnt(get_skew_x(-y_base), -y_base, z0) # 3. Base Top Left (Median side) - p3 = gp_Pnt(0, -y_base, z1) + p3 = gp_Pnt(get_skew_x(-y_base), -y_base, z1) # 4. Top Left (Median side) - Sloped back face - p4 = gp_Pnt(0, -y_top, z3) + p4 = gp_Pnt(get_skew_x(-y_top), -y_top, z3) # 5. Top Right (Road side) - p5 = gp_Pnt(0, y_top, z3) + p5 = gp_Pnt(get_skew_x(y_top), y_top, z3) # 6. Transition Top Right (End of main slope) - p6 = gp_Pnt(0, y_trans, z2) + p6 = gp_Pnt(get_skew_x(y_trans), y_trans, z2) # 7. Base Top Right (Start of transition) - p7 = gp_Pnt(0, y_base, z1) + p7 = gp_Pnt(get_skew_x(y_base), y_base, z1) # Create Polygon poly = BRepBuilderAPI_MakePolygon() @@ -166,7 +176,7 @@ def create_rcc_crash_barrier_median(length, design_dict): return solid -def create_metallic_barrier_system(length, design_dict, kerb_top_width, kerb_height): +def create_metallic_barrier_system(length, design_dict, kerb_top_width, kerb_height, skew_angle=0): """ Creates metallic crash barrier system (IRC Fig 5c) - posts, spacers, and W-beams only. Single side system (will be positioned on each side of the central kerb). @@ -222,6 +232,12 @@ def create_metallic_barrier_system(length, design_dict, kerb_top_width, kerb_hei from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge + # SKEW LOGIC + skew_rad = math.radians(skew_angle) + def get_skew_x(y): + return y * math.tan(skew_rad) + + def make_w_beam_face(): points = 40 zs = np.linspace(0, W_BEAM_HEIGHT, points) @@ -233,7 +249,8 @@ def make_w_beam_face(): amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2)) ) - outer_pts.SetValue(i, gp_Pnt(0.0, y_wave, z)) + # Offset X by y_wave * tan(skew) + outer_pts.SetValue(i, gp_Pnt(get_skew_x(y_wave), y_wave, z)) y_top_outer = y_wave # Last y_wave value y_bottom_outer = ( @@ -250,7 +267,8 @@ def make_w_beam_face(): amp * math.exp(-((z - mu1) ** 2) / (2 * sigma ** 2)) + amp * math.exp(-((z - mu2) ** 2) / (2 * sigma ** 2)) ) - W_BEAM_THICKNESS - inner_pts.SetValue(i, gp_Pnt(0.0, y_wave_inner, z)) + # Offset X by y_wave_inner * tan(skew) + inner_pts.SetValue(i, gp_Pnt(get_skew_x(y_wave_inner), y_wave_inner, z)) y_top_inner = y_wave_inner y_bottom_inner = ( @@ -266,15 +284,15 @@ def make_w_beam_face(): wire.Add(BRepBuilderAPI_MakeEdge(outer_curve).Edge()) # Top connecting edge wire.Add(BRepBuilderAPI_MakeEdge( - gp_Pnt(0.0, y_top_outer, W_BEAM_HEIGHT), - gp_Pnt(0.0, y_top_inner, W_BEAM_HEIGHT) + gp_Pnt(get_skew_x(y_top_outer), y_top_outer, W_BEAM_HEIGHT), + gp_Pnt(get_skew_x(y_top_inner), y_top_inner, W_BEAM_HEIGHT) ).Edge()) # Inner curve (downwards) wire.Add(BRepBuilderAPI_MakeEdge(inner_curve).Edge()) # Bottom connecting edge wire.Add(BRepBuilderAPI_MakeEdge( - gp_Pnt(0.0, y_bottom_inner, 0.0), - gp_Pnt(0.0, y_bottom_outer, 0.0) + gp_Pnt(get_skew_x(y_bottom_inner), y_bottom_inner, 0.0), + gp_Pnt(get_skew_x(y_bottom_outer), y_bottom_outer, 0.0) ).Edge()) return BRepBuilderAPI_MakeFace(wire.Wire()).Face() @@ -282,7 +300,7 @@ def make_w_beam_face(): # ARRANGEMENT CALCULATIONS - # Right side template: Post -> Spacer -> W-beam -> 75mm gap -> Kerb edge + # Right side template: Post -> Spacer -> W-beam -> Kerb edge # Kerb edge is at +kerb_top_width / 2.0 gap_from_edge = 5.0 kerb_edge_y = kerb_top_width / 2.0 @@ -338,6 +356,8 @@ def create_vertical_channel(h, d, w, tw, tf): return BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(poly.Wire()).Face(), gp_Vec(0, 0, h)).Shape() post_solid = create_vertical_channel(post_height, post_depth, post_width, post_web_thk, post_flange_thk) + # Post itself is typically not skewed, but we could skew it if needed. + # Keeping post vertical for now as standard. post_solid = _translate(post_solid, x=x_pos, y=post_y_center, z=kerb_height) posts_combined = post_solid if posts_combined is None else BRepAlgoAPI_Fuse(posts_combined, post_solid).Shape() @@ -403,7 +423,7 @@ def create_vertical_spacer(h, d, w, tw, tf): } -def create_median_kerb(length, median_width, design_dict): +def create_median_kerb(length, median_width, design_dict, skew_angle=0): """ Creates a single continuous median kerb with specified total width. Used for metallic crash barrier median as per IRC Fig 5c. @@ -412,10 +432,15 @@ def create_median_kerb(length, median_width, design_dict): length: Length of the kerb along the span median_width: Total width of the median (center to center distance) design_dict: Design parameters containing kerb dimensions + skew_angle: Bridge skew angle Returns: Kerb solid centered at y=0 """ + skew_rad = math.radians(skew_angle) + def get_skew_x(y): + return y * math.tan(skew_rad) + kerb_height = design_dict.get("kerb_height", 100) # Use the median_width as the total kerb width kerb_top_width = median_width @@ -430,10 +455,10 @@ def create_median_kerb(length, median_width, design_dict): y_top_r = kerb_top_width / 2.0 # Trapezoidal profile (counter-clockwise) - p1 = gp_Pnt(0, y_bottom_l, z0) - p2 = gp_Pnt(0, y_bottom_r, z0) - p3 = gp_Pnt(0, y_top_r, z1) - p4 = gp_Pnt(0, y_top_l, z1) + p1 = gp_Pnt(get_skew_x(y_bottom_l), y_bottom_l, z0) + p2 = gp_Pnt(get_skew_x(y_bottom_r), y_bottom_r, z0) + p3 = gp_Pnt(get_skew_x(y_top_r), y_top_r, z1) + p4 = gp_Pnt(get_skew_x(y_top_l), y_top_l, z1) poly = BRepBuilderAPI_MakePolygon() for p in (p1, p2, p3, p4): @@ -489,15 +514,16 @@ def get_skew_x(y): # CASE 2: RCC CRASH BARRIER (Double Side mirrored) elif median_type == "RCC Crash Barrier": - barrier_shape = create_rcc_crash_barrier_median(span_length, design_dict) + # Left barrier (mirrored) + # For mirrored side, we need to invert skew angle during generation + left_shape = create_rcc_crash_barrier_median(span_length, design_dict, skew_angle=-skew_angle) barrier_base_width = design_dict.get("barrier_bottom_width", 450) # Calculate offset so outer edges are at median_total_width / 2 - # offset is the distance from center to barrier center offset = (median_total_width - barrier_base_width) / 2.0 y_l = carriageway_center_y - offset - left_barrier = _mirror_y(barrier_shape) + left_barrier = _mirror_y(left_shape) left_barrier = _translate( left_barrier, x=get_skew_x(y_l), @@ -506,9 +532,11 @@ def get_skew_x(y): ) median_barriers.append(left_barrier) + # Right barrier (not mirrored) + right_shape = create_rcc_crash_barrier_median(span_length, design_dict, skew_angle=skew_angle) y_r = carriageway_center_y + offset right_barrier = _translate( - barrier_shape, + right_shape, x=get_skew_x(y_r), y=y_r, z=deck_top_z @@ -521,7 +549,7 @@ def get_skew_x(y): kerb_height = design_dict.get("kerb_height", 100) # Create single continuous kerb with total width = median_width - kerb_shape = create_median_kerb(span_length, median_total_width, design_dict) + kerb_shape = create_median_kerb(span_length, median_total_width, design_dict, skew_angle=skew_angle) y_kerb = carriageway_center_y kerb_positioned = _translate( kerb_shape, @@ -532,26 +560,36 @@ def get_skew_x(y): median_barriers.append({"kerb": kerb_positioned}) # Create metallic barrier system (posts, spacers, W-beams) for one side - barrier_system_parts = create_metallic_barrier_system( + # PASS SKEW ANGLE TO SYSTEM PARTS + + # Left barrier system (mirrored) + left_parts = create_metallic_barrier_system( span_length, design_dict, - median_total_width, # Pass the total median width as kerb_top_width - kerb_height + median_total_width, + kerb_height, + skew_angle=-skew_angle # Invert for mirror ) - # Position left barrier system (mirrored) - # For simplicity, use the kerb center Y for skew shift if the systems are close to it y_sys = carriageway_center_y left_dict = { k: _translate(_mirror_y(v), x=get_skew_x(y_sys), y=carriageway_center_y, z=deck_top_z) - for k, v in barrier_system_parts.items() if v + for k, v in left_parts.items() if v } median_barriers.append(left_dict) - # Position right barrier system + # Right barrier system + right_parts = create_metallic_barrier_system( + span_length, + design_dict, + median_total_width, + kerb_height, + skew_angle=skew_angle + ) + right_dict = { k: _translate(v, x=get_skew_x(y_sys), y=carriageway_center_y, z=deck_top_z) - for k, v in barrier_system_parts.items() if v + for k, v in right_parts.items() if v } median_barriers.append(right_dict) diff --git a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py index 94ab3149f..8d06d49bf 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/railing/builder.py @@ -1,7 +1,7 @@ -from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox, BRepPrimAPI_MakeCylinder +from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox, BRepPrimAPI_MakeCylinder, BRepPrimAPI_MakePrism from OCC.Core.gp import gp_Trsf, gp_Vec, gp_Ax2, gp_Pnt, gp_Dir -from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform +from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform, BRepBuilderAPI_MakePolygon, BRepBuilderAPI_MakeFace from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Cut, BRepAlgoAPI_Fuse @@ -25,21 +25,38 @@ def mirror_y(shape): return transformer.Shape() -def create_rectangular_prism(length, breadth, height): +def create_rectangular_prism(length, breadth, height, skew_angle=0): """ Aligned with crash barrier: X: 0 → +length Y: -breadth/2 → +breadth/2 Z: 0 → height + Supports skewing the end faces. """ - box = BRepPrimAPI_MakeBox(length, breadth, height).Shape() - - trsf = gp_Trsf() - trsf.SetTranslation( - gp_Vec(0.0, -breadth / 2.0, 0.0) - ) + import math + skew_rad = math.radians(skew_angle) + + # Vertices for the skewed footprint (parallelogram in plan-view) + y_half = breadth / 2.0 + + def get_skew_x(y): + return y * math.tan(skew_rad) - return BRepBuilderAPI_Transform(box, trsf, True).Shape() + p1 = gp_Pnt(get_skew_x(-y_half), -y_half, 0) + p2 = gp_Pnt(length + get_skew_x(-y_half), -y_half, 0) + p3 = gp_Pnt(length + get_skew_x(y_half), y_half, 0) + p4 = gp_Pnt(get_skew_x(y_half), y_half, 0) + + poly = BRepBuilderAPI_MakePolygon() + poly.Add(p1) + poly.Add(p2) + poly.Add(p3) + poly.Add(p4) + poly.Close() + + face = BRepBuilderAPI_MakeFace(poly.Wire()).Face() + # Extrude along Z + return BRepPrimAPI_MakePrism(face, gp_Vec(0, 0, height)).Shape() def create_cylinder(radius, height): @@ -58,7 +75,8 @@ def create_rcc_railing( *, length, design_dict, - side="LEFT" + side="LEFT", + skew_angle=0 ): railing_width = 275 # @@ -76,9 +94,9 @@ def create_rcc_railing( if body_height <= 0: raise ValueError("Railing height must be > base height") - base = create_rectangular_prism(length, railing_width, BASE_HEIGHT) + base = create_rectangular_prism(length, railing_width, BASE_HEIGHT, skew_angle=skew_angle) - body = create_rectangular_prism(length, railing_width, body_height) + body = create_rectangular_prism(length, railing_width, body_height, skew_angle=skew_angle) body = translate(body, z=BASE_HEIGHT) HOLE_LENGTH_RATIO = 1 @@ -97,7 +115,7 @@ def create_rcc_railing( z_center = BASE_HEIGHT + (i + 1) * spacing hole = create_rectangular_prism( - hole_length, hole_width, hole_height + hole_length, hole_width, hole_height, skew_angle=skew_angle ) hole = translate( @@ -127,7 +145,8 @@ def create_steel_railing( *, length, design_dict, - side="LEFT" + side="LEFT", + skew_angle=0 ): """ Creates a steel railing with posts and rails on a concrete base. @@ -143,19 +162,16 @@ def create_steel_railing( BASE_WIDTH = 375 # 375mm width for concrete base # Create concrete base with 375mm width - base = create_rectangular_prism(length, BASE_WIDTH, BASE_HEIGHT) + base = create_rectangular_prism(length, BASE_WIDTH, BASE_HEIGHT, skew_angle=skew_angle) # Parameters for steel railing (sits on top of base) + post_height = railing_height - BASE_HEIGHT POST_LENGTH = 150 # Rectangular post length in mm POST_BREADTH = 150 # Rectangular post breadth in mm POST_SPACING = 1000 RAIL_SIZE = 40 - # Posts height (from top of base to top of railing) - post_height = railing_height - BASE_HEIGHT - - # Calculate number of gaps - # Safe length for posts center-to-beginning + # Calculate spacing effective_length = length - POST_LENGTH if effective_length < 0: effective_length = 0 @@ -168,17 +184,16 @@ def create_steel_railing( posts_shape = None - # Create rectangular posts (starting from top of base) - # We need num_spaces + 1 posts to cover 0 to effective_length + # Create rectangular posts for i in range(num_spaces + 1): x = i * actual_spacing - # Clamp x to be safe if x > length - POST_LENGTH: x = length - POST_LENGTH - # Create rectangular post - post = create_rectangular_prism(POST_LENGTH, POST_BREADTH, post_height) + # Posts are NOT skewed themselves in standard practice, + # but here we keep them square for simplicity and only skew the rails/base + post = create_rectangular_prism(POST_LENGTH, POST_BREADTH, post_height, skew_angle=skew_angle) post = translate(post, x=x, z=BASE_HEIGHT) if posts_shape is None: @@ -188,11 +203,11 @@ def create_steel_railing( # Rails (positioned relative to total railing height) # Top Rail - top_rail = create_rectangular_prism(length, RAIL_SIZE, RAIL_SIZE) + top_rail = create_rectangular_prism(length, RAIL_SIZE, RAIL_SIZE, skew_angle=skew_angle) top_rail = translate(top_rail, z=railing_height - 2 * RAIL_SIZE) # Mid Rail - mid_rail = create_rectangular_prism(length, RAIL_SIZE, RAIL_SIZE) + mid_rail = create_rectangular_prism(length, RAIL_SIZE, RAIL_SIZE, skew_angle=skew_angle) mid_rail = translate(mid_rail, z=BASE_HEIGHT + (post_height * 0.5)) rails_fused = BRepAlgoAPI_Fuse(top_rail, mid_rail).Shape() @@ -241,10 +256,12 @@ def build_railings( # Helper to create correct type def create_shape(side): + # Invert skew for RIGHT side to compensate for mirror_y + s_angle = skew_angle if side == "LEFT" else -skew_angle if railing_type == "steel": - return create_steel_railing(length=span_length, design_dict=design_dict, side=side) + return create_steel_railing(length=span_length, design_dict=design_dict, side=side, skew_angle=s_angle) else: - return create_rcc_railing(length=span_length, design_dict=design_dict, side=side) + return create_rcc_railing(length=span_length, design_dict=design_dict, side=side, skew_angle=s_angle) # SKEW OFFSET CALCULATION def get_skew_x(y): From 294bb1b5b4799e696937dc14c82ef37051d427a9 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 11 Feb 2026 18:07:42 +0530 Subject: [PATCH 035/225] Remove plate girder test file --- .../tests/test_plate_girder_only.py | 92 ------------------- 1 file changed, 92 deletions(-) delete mode 100644 src/osdagbridge/tests/test_plate_girder_only.py diff --git a/src/osdagbridge/tests/test_plate_girder_only.py b/src/osdagbridge/tests/test_plate_girder_only.py deleted file mode 100644 index 3497e313a..000000000 --- a/src/osdagbridge/tests/test_plate_girder_only.py +++ /dev/null @@ -1,92 +0,0 @@ -""" -Test file for Plate Girder Bridge CAD Generator -(Girder + Stiffeners + Cross Bracings + Deck + Crash Barriers + Median + Railings) -""" - -from OCC.Display.SimpleGui import init_display -from OCC.Display.backend import load_backend -from OCC.Core.Quantity import Quantity_Color, Quantity_TOC_RGB - -load_backend("pyside6") - -from osdagbridge.core.bridge_types.plate_girder.cad_generator import ( - generate_cad -) - -# Colors (RGB 0–1) - -COLOR_GIRDER = (72/255, 72/255, 54/255) -COLOR_STIFFENER = (30/255, 30/255, 30/255) -COLOR_CROSS_BRACING = (60/255, 60/255, 60/255) - -COLOR_DECK = (180/255, 180/255, 180/255) -COLOR_DECK_TEXTURE = (150/255, 150/255, 150/255) - -COLOR_CRASH_BARRIER = (120/255, 120/255, 120/255) -COLOR_MEDIAN = (110/255, 110/255, 110/255) -COLOR_RAILING = (90/255, 90/255, 90/255) - - -# Main - -def main(): - display, start_display, _, _ = init_display() - - cad = generate_cad() - - # Quantity colors - girder_color = Quantity_Color(*COLOR_GIRDER, Quantity_TOC_RGB) - stiffener_color = Quantity_Color(*COLOR_STIFFENER, Quantity_TOC_RGB) - cross_bracing_color = Quantity_Color(*COLOR_CROSS_BRACING, Quantity_TOC_RGB) - - deck_color = Quantity_Color(*COLOR_DECK, Quantity_TOC_RGB) - deck_texture_color = Quantity_Color(*COLOR_DECK_TEXTURE, Quantity_TOC_RGB) - - crash_barrier_color = Quantity_Color(*COLOR_CRASH_BARRIER, Quantity_TOC_RGB) - median_color = Quantity_Color(*COLOR_MEDIAN, Quantity_TOC_RGB) - railing_color = Quantity_Color(*COLOR_RAILING, Quantity_TOC_RGB) - - # Girders - for girder in cad["girders"]: - display.DisplayColoredShape(girder, girder_color, update=False) - - # Stiffeners - for stiffener in cad["stiffeners"]: - display.DisplayColoredShape(stiffener, stiffener_color, update=False) - - # Cross bracings - if "cross_bracings" in cad: - for brace in cad["cross_bracings"]: - display.DisplayColoredShape(brace, cross_bracing_color, update=False) - - # Deck slab - display.DisplayColoredShape( - cad["deck_slab"], - deck_color, - update=False - ) - - # Deck textures - for tex in cad["deck_textures"]: - display.DisplayColoredShape(tex, deck_texture_color, update=False) - - # Crash barriers - for barrier in cad["crash_barriers"]: - display.DisplayColoredShape(barrier, crash_barrier_color, update=False) - - # Median barriers - for median in cad.get("median_barriers", []): - display.DisplayColoredShape(median, median_color, update=False) - - # Railings - for railing in cad["railings"]: - display.DisplayColoredShape(railing, railing_color, update=False) - - - - display.FitAll() - start_display() - - -if __name__ == "__main__": - main() From 6fb5eed05376ed5d4d5e1f4b12b4d3699a27ce5b Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 12 Feb 2026 02:54:24 +0530 Subject: [PATCH 036/225] Fix and place the rolled beam end diaphragm behind the girder --- .../super_structure/cross_bracing/builder.py | 32 +++++++++++++------ .../plate_girder/cad_generator.py | 18 +++++------ 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py index 4a853333b..ff3f3058d 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py @@ -583,8 +583,11 @@ def _diaphragm_bracing(x, yL, yR, depth, tf, thickness, section_type, dims, skew Returns: list: List containing the diaphragm member shape """ - # Place at top of girder - z_top = depth / 2 + # Place exactly at the bottom of the girder top flange + # top edge of web is at +depth / 2 + # diaphragm is centered at gp_Pnt, so center = (top_edge) - (member_depth / 2) + member_depth = dims.get("depth", 100) + z_center = (depth / 2) - (member_depth / 2) def get_skew_x(y): """Calculate longitudinal offset due to skew.""" @@ -599,8 +602,8 @@ def get_skew_x(y): # Create horizontal diaphragm member return [ _create_diagonal_member( - gp_Pnt(x_l, yL, z_top), - gp_Pnt(x_r, yR, z_top), + gp_Pnt(x_l, yL, z_center), + gp_Pnt(x_r, yR, z_center), thickness, section_type, dims, @@ -656,7 +659,7 @@ def build_cross_bracings( total_width = (num_girders - 1) * girder_spacing # Loop through all bracing frames - for x in x_positions: + for idx_x, x in enumerate(x_positions): # Loop through all bays between girders for i in range(num_girders - 1): # Calculate lateral positions of left and right girders @@ -665,15 +668,26 @@ def build_cross_bracings( # Check if this is an end position (first or last frame) is_end = (x == x_positions[0] or x == x_positions[-1]) + is_first = (x == x_positions[0]) + is_last = (x == x_positions[-1]) # END DIAPHRAGM HANDLING if is_end: + # Apply longitudinal offset for end diaphragms + # Default offset if spacing is 0 + offset = end_diaphragm_spacing if end_diaphragm_spacing > 0 else 200.0 + + if is_first: + x_eff = x + offset + else: # is_last + x_eff = x - offset + if end_diaphragm_type == "Cross Bracing": # Use the same bracing type (X or K) as internal panels if bracing_type == "X": bracings.extend( _x_bracing( - x, yL, yR, + x_eff, yL, yR, girder_depth, flange_thickness, thickness, flange_width, section_type, section_dims, @@ -684,7 +698,7 @@ def build_cross_bracings( elif bracing_type == "K": bracings.extend( _k_bracing( - x, yL, yR, + x_eff, yL, yR, girder_depth, flange_thickness, thickness, flange_width, section_type, section_dims, @@ -708,7 +722,7 @@ def build_cross_bracings( bracings.extend( _diaphragm_bracing( - x, yL, yR, + x_eff, yL, yR, girder_depth, flange_thickness, thickness, "I_SECTION", @@ -733,7 +747,7 @@ def build_cross_bracings( bracings.extend( _diaphragm_bracing( - x, yL, yR, + x_eff, yL, yR, girder_depth, flange_thickness, thickness, "I_SECTION", diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 640465ecc..839781d42 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -136,7 +136,7 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.bridge_type = bridge_type # GIRDER PARAMETERS - self.span_length_L = 10000 # Total span length (mm) + self.span_length_L = 25000 # Total span length (mm) self.girder_section_d = 900 # Clear web depth (mm) self.girder_section_bf = 500 # Top flange width (mm) @@ -174,7 +174,7 @@ def __init__(self, bridge_type=KEY_MODULE_PG): # RAILING PARAMETERS self.rail_count = 3 # Number of rails - self.railing_type = "rcc" # "rcc" or "steel" + self.railing_type = "steel" # "rcc" or "steel" # STIFFENER PARAMETERS self.stiffener_width = 200 # Stiffener width (mm) @@ -229,7 +229,7 @@ def __init__(self, bridge_type=KEY_MODULE_PG): # } # END DIAPHRAGM PARAMETERS - self.end_diaphragm_type = "Cross Bracing" # Options: "Cross Bracing", "Rolled Beam", "Welded Beam" + self.end_diaphragm_type = "Rolled Beam" # Options: "Cross Bracing", "Rolled Beam", "Welded Beam" # If using "Cross Bracing" type, end diaphragms will use the same @@ -241,9 +241,9 @@ def __init__(self, bridge_type=KEY_MODULE_PG): "depth": 800, "flange_width": 250, "web_thickness": 12, - "flange_thickness": 20 + "flange_thickness": 100 } - self.end_diaphragm_spacing = 0 + self.end_diaphragm_spacing = 200 # MAIN CAD GENERATION @@ -309,7 +309,7 @@ def _calculate_skew_offset(lateral_position, reference_position=0): Calculate longitudinal offset due to skew angle. This implements the plan-view geometric offset for skewed bridges: - longitudinal_shift = lateral_distance × tan(skew_angle) + longitudinal_shift = lateral_distance x tan(skew_angle) Args: lateral_position: Transverse position (Y-coordinate) @@ -401,10 +401,8 @@ def _calculate_skew_offset(lateral_position, reference_position=0): # STEP 4: CALCULATE REFERENCE Z-LEVELS # Bracing girder depth (for cross bracing placement) - bracing_girder_depth = ( - (self.girder_section_d / 2) + - self.girder_section_tf - ) + # Use clear web depth D, so top/bottom are at +/- D/2 + bracing_girder_depth = self.girder_section_d # Top of girder for deck placement girder_top_z = (self.girder_section_d / 2) + self.girder_section_tf From bd62b74fbe39b8b3ca613f1e1bbd230a0727621b Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 12 Feb 2026 23:54:33 +0530 Subject: [PATCH 037/225] Adjust metallic post and end-diaphragm offsets for skewed bridges --- .../super_structure/crash_barrier/builder.py | 30 +++++++++++-------- .../super_structure/cross_bracing/builder.py | 17 +++++++++-- .../super_structure/median/builder.py | 20 ++++++++----- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py index 514b0a239..4d076e6ad 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/crash_barrier/builder.py @@ -179,13 +179,25 @@ def get_skew_x(y): post_flange_thk = design_dict.get("post_flange_thickness", 7.8) post_offset_from_edge = design_dict.get("post_offset_from_edge", 75) # From outer edge - # Component spans from x_pos - post_web_thk/2 to x_pos + post_depth - post_web_thk/2 - # To keep within [0, length]: - # x_pos - post_web_thk/2 >= 0 => x_pos >= post_web_thk/2 - # x_pos + post_depth - post_web_thk/2 <= length => x_pos <= length - post_depth + post_web_thk/2 + # Calculate Post Y (Center of Post) + post_y_center = ( + -kerb_top_width / 2.0 + + post_offset_from_edge + + post_width / 2.0 + ) + + # SKEW ADJUSTMENT FOR POSTS/SPACERS + # Use absolute skew to ensure symmetric offsets for left/right alignment. + # We use the maximum possible kerb shift to ensure all parts stay inside. + skew_rad_abs = math.radians(abs(skew_angle)) + safe_skew_shift = (kerb_bottom_width / 2.0) * math.tan(skew_rad_abs) - start_x = post_web_thk / 2.0 - end_x = length - post_depth + post_web_thk / 2.0 + # Added end offset (margin) to stay well within deck + end_offset = 150.0 + total_start_offset = safe_skew_shift + end_offset + + start_x = total_start_offset + post_web_thk / 2.0 + end_x = length - total_start_offset - (post_depth - post_web_thk / 2.0) post_range = end_x - start_x if post_range < 0: @@ -230,12 +242,6 @@ def create_vertical_channel(h, d, w, tw, tf): # Spacer is to the Right of Post. # Beam is to the Right of Spacer. - # Calculate Post Y (Center of Post) - post_y_center = ( - -kerb_top_width / 2.0 - + post_offset_from_edge - + post_width / 2.0 - ) for i in range(num_posts): x_pos = start_x + (i * actual_spacing) diff --git a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py index ff3f3058d..a671bc2ad 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py @@ -674,8 +674,21 @@ def build_cross_bracings( # END DIAPHRAGM HANDLING if is_end: # Apply longitudinal offset for end diaphragms - # Default offset if spacing is 0 - offset = end_diaphragm_spacing if end_diaphragm_spacing > 0 else 200.0 + # Base offset from parameters or default + base_offset = end_diaphragm_spacing if end_diaphragm_spacing > 0 else 200.0 + + # Skew-aware adjustment: + # Stiffeners are perpendicular to the girder axis (global Y in girder local coords). + # Diaphragms are skewed (parallel to skew). + # To clear the stiffener tip (which extends ~200mm from web), + # we need an extra shift equal to (stiffener_width * tan(skew)). + + # We use a hardcoded 200mm for stiffener width for now to match cad_generator defaults + stiffener_width = 300.0 + skew_rad = math.radians(abs(skew_angle)) + extra_offset = stiffener_width * math.tan(skew_rad) + + offset = base_offset + extra_offset if is_first: x_eff = x + offset diff --git a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py index eab616b94..02aebe378 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/median/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/median/builder.py @@ -319,14 +319,18 @@ def make_w_beam_face(): spacers_combined = None beams_combined = None - # Calculate spacing range to keep posts/spacers within [0, length] - # Component spans from x_pos - tw/2 to x_pos + depth - tw/2 - # To keep within [0, length]: - # x_pos - tw/2 >= 0 => x_pos >= tw/2 - # x_pos + post_depth - tw/2 <= length => x_pos <= length - post_depth + tw/2 - - start_x = post_web_thk / 2.0 - end_x = length - post_depth + post_web_thk / 2.0 + # SKEW ADJUSTMENT FOR POSTS/SPACERS + # Use absolute skew to ensure symmetric offsets for left/right alignment. + # We use the maximum possible kerb shift to ensure all parts stay inside. + skew_rad_abs = math.radians(abs(skew_angle)) + safe_skew_shift = (kerb_top_width / 2.0 + 25.0) * math.tan(skew_rad_abs) + + # Added end offset (margin) to stay well within deck + end_offset = 150.0 + total_start_offset = safe_skew_shift + end_offset + + start_x = total_start_offset + post_web_thk / 2.0 + end_x = length - total_start_offset - (post_depth - post_web_thk / 2.0) post_range = end_x - start_x From 21a1fbd02e60391761880d7d8e35dcd1e7096544 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 17 Feb 2026 02:50:14 +0530 Subject: [PATCH 038/225] Add multi components selection in the viewer --- src/osdagbridge/desktop/ui/cad_3d.py | 134 +++++++++++++++++---------- 1 file changed, 83 insertions(+), 51 deletions(-) diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index 5ac2047a0..6bf634154 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -3,6 +3,7 @@ - Embeds CustomViewer3d - Calls CAD generator +- Multi-select component visibility """ import sys @@ -370,56 +371,56 @@ def show_full_model(self): self.display.Repaint() - def isolate_component(self, component_key): + def update_component_visibility(self, selected_components): """ - Isolate a single bridge component using AIS visibility - Deck textures shown ONLY for Deck + Show/hide components based on multi-selection. + + Args: + selected_components: List of component keys that should be visible """ if not self._is_display_ready(): return context = self.viewer.context - # Hide all structural components - for ais_list in self.viewer.model_ais_objects.values(): + # Component key mappings (handles composite components) + component_map = { + "Crash Barrier": ["Crash Barrier", "Crash Barrier W-Beam"], + "Median": ["Median", "Median W-Beam"], + "Girder": ["Girder Web", "Girder Flange", "Support", "Stiffener"], + "Deck": ["Deck"], + "Cross Bracing": ["Cross Bracing"], + "Railing": ["Railing"], + "Stiffener": ["Stiffener"] + } + + # Collect all keys that should be visible + visible_keys = set() + for comp in selected_components: + if comp in component_map: + visible_keys.update(component_map[comp]) + + # Update visibility for all structural components + for key, ais_list in self.viewer.model_ais_objects.items(): + should_show = key in visible_keys for ais in ais_list: - context.Erase(ais, False) - - # Hide deck textures by default - for ais in getattr(self.viewer, "deck_texture_ais", []): - context.Erase(ais, False) - - # Show selected component - if component_key == "Crash Barrier": - for key in ("Crash Barrier", "Crash Barrier W-Beam"): - for ais in self.viewer.model_ais_objects.get(key, []): + if should_show: context.Display(ais, False) + else: + context.Erase(ais, False) - elif component_key == "Median": - for key in ("Median", "Median W-Beam"): - for ais in self.viewer.model_ais_objects.get(key, []): - context.Display(ais, False) - - - elif component_key == "Girder": - for key in ("Girder Web", "Girder Flange", "Support"): - for ais in self.viewer.model_ais_objects.get(key, []): - context.Display(ais, False) - - else: - for ais in self.viewer.model_ais_objects.get(component_key, []): - context.Display(ais, False) - - # Show deck textures ONLY if Deck is selected - if component_key == "Deck": - for ais in getattr(self.viewer, "deck_texture_ais", []): + # Handle deck textures (show only if Deck is selected) + show_deck_textures = "Deck" in selected_components + for ais in getattr(self.viewer, "deck_texture_ais", []): + if show_deck_textures: context.Display(ais, False) + else: + context.Erase(ais, False) self.display.FitAll() self.display.Repaint() - def regenerate_bridge(self): self.load_bridge() @@ -427,7 +428,7 @@ def regenerate_bridge(self): class BridgeComponentCheckbox(QWidget): """ - Horizontal component selector + Horizontal component selector with multi-select capability """ def __init__(self, parent: CAD3DWindow): super().__init__(parent) @@ -446,7 +447,7 @@ def __init__(self, parent: CAD3DWindow): self.components = [ - ("Model", None), + ("Model", None), # Special: shows full model ("Girder", "Girder"), ("Deck", "Deck"), ("Cross Bracing", "Cross Bracing"), @@ -474,27 +475,58 @@ def __init__(self, parent: CAD3DWindow): def _on_click(self, component_key, clicked_cb, checked): """ - Enforce single selection (Osdag behavior) + Handle multi-select logic: + - "Model" is exclusive (unchecks all others) + - Other components can be multi-selected + - Selecting any component unchecks "Model" """ - if checked: - # Uncheck all others - for cb in self.checkboxes: - if cb != clicked_cb: + model_cb = self.checkboxes[0] # "Model" checkbox + + if component_key is None: # "Model" clicked + if checked: + # Uncheck all other components + for cb in self.checkboxes[1:]: cb.blockSignals(True) cb.setChecked(False) cb.blockSignals(False) - - # if none is selected -> then full model - if component_key is None: self.parent.show_full_model() else: - self.parent.isolate_component(component_key) + # Don't allow unchecking Model if nothing else is selected + if not any(cb.isChecked() for cb in self.checkboxes[1:]): + clicked_cb.blockSignals(True) + clicked_cb.setChecked(True) + clicked_cb.blockSignals(False) + + else: # Component clicked + if checked: + # Uncheck "Model" when selecting a specific component + model_cb.blockSignals(True) + model_cb.setChecked(False) + model_cb.blockSignals(False) + else: + # If all components are unchecked, check "Model" + if not any(cb.isChecked() for cb in self.checkboxes): + model_cb.blockSignals(True) + model_cb.setChecked(True) + model_cb.blockSignals(False) + self.parent.show_full_model() + return + + # Update visibility based on selected components + selected = [ + key for cb, (_, key) in zip(self.checkboxes[1:], self.components[1:]) + if cb.isChecked() and key is not None + ] + + if selected: + self.parent.update_component_visibility(selected) + else: + # If nothing selected, show full model + model_cb.blockSignals(True) + model_cb.setChecked(True) + model_cb.blockSignals(False) + self.parent.show_full_model() - else: - # Prevent "no selection" state - clicked_cb.blockSignals(True) - clicked_cb.setChecked(True) - clicked_cb.blockSignals(False) def main(): app = QApplication(sys.argv) @@ -504,4 +536,4 @@ def main(): if __name__ == "__main__": - main() + main() \ No newline at end of file From 278b094f46025d9b4fdc6a39e14e4504c04f2a60 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 17 Feb 2026 02:51:49 +0530 Subject: [PATCH 039/225] Add option of selecting different sections for top, bottom and diagonal members for cross-bracings and end-diaphragm --- .../super_structure/cross_bracing/builder.py | 212 ++++++++++++------ .../plate_girder/cad_generator.py | 140 ++++++++---- 2 files changed, 240 insertions(+), 112 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py index a671bc2ad..b42ec2b8a 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/cross_bracing/builder.py @@ -45,7 +45,7 @@ def _create_angle_section(length, leg_h, leg_w, thickness): thickness: Thickness of the angle Returns: - TopoDS_Shape: The angle section at origin + TopoDS_Shape: The angle section centered at origin """ # Create two perpendicular legs # Vertical leg (longer) @@ -57,7 +57,13 @@ def _create_angle_section(length, leg_h, leg_w, thickness): # Fuse the two legs to form L-shape angle = BRepAlgoAPI_Fuse(leg1, leg2).Shape() - return angle + # Center the section at origin (similar to channel and double angle sections) + # The angle should be centered around the X-axis + # Move it so the inner corner is at the centroid + trsf = gp_Trsf() + trsf.SetTranslation(gp_Vec(-length / 2, -leg_w / 2, -leg_h / 2)) + + return BRepBuilderAPI_Transform(angle, trsf, True).Shape() def _create_channel_section(length, depth, flange_width, web_thickness, flange_thickness): @@ -409,8 +415,11 @@ def _create_diagonal_member(p1, p2, thickness, section_type, dims, roll_sign): # BRACING PATTERN FUNCTIONS -def _x_bracing(x, yL, yR, depth, tf, thickness, flange_w, - section_type, dims, bracket, skew_angle=0): +def _x_bracing(x, yL, yR, depth, tf, flange_w, + diagonal_thickness, diagonal_section_type, diagonal_dims, + top_chord_thickness, top_chord_section_type, top_chord_dims, + bottom_chord_thickness, bottom_chord_section_type, bottom_chord_dims, + bracket, skew_angle=0): """ Create X-bracing pattern between two girders. @@ -423,10 +432,20 @@ def _x_bracing(x, yL, yR, depth, tf, thickness, flange_w, yR: Right girder lateral position depth: Girder depth tf: Flange thickness - thickness: Bracing member thickness flange_w: Flange width - section_type: Section type for bracing - dims: Section dimensions + + diagonal_thickness: Thickness of diagonal members + diagonal_section_type: Section type for diagonal members + diagonal_dims: Section dimensions for diagonal members + + top_chord_thickness: Thickness of top chord/bracket + top_chord_section_type: Section type for top chord/bracket + top_chord_dims: Section dimensions for top chord/bracket + + bottom_chord_thickness: Thickness of bottom chord/bracket + bottom_chord_section_type: Section type for bottom chord/bracket + bottom_chord_dims: Section dimensions for bottom chord/bracket + bracket: Bracket option ("NONE", "UPPER", "LOWER", "BOTH") skew_angle: Bridge skew angle in degrees @@ -447,46 +466,50 @@ def get_skew_x(y): x_l = x + get_skew_x(yL) x_r = x + get_skew_x(yR) - # Create main X-diagonals + # Create main X-diagonals using diagonal section braces = [ # Left TOP → Right BOTTOM diagonal _create_diagonal_member( gp_Pnt(x_l, yL, z_top), gp_Pnt(x_r, yR, z_bot), - thickness, section_type, dims, +1 + diagonal_thickness, diagonal_section_type, diagonal_dims, +1 ), # Left BOTTOM → Right TOP diagonal _create_diagonal_member( gp_Pnt(x_l, yL, z_bot), gp_Pnt(x_r, yR, z_top), - thickness, section_type, dims, -1 + diagonal_thickness, diagonal_section_type, diagonal_dims, -1 ) ] - # Add optional brackets + # Add optional bottom bracket using bottom chord section if bracket in ("LOWER", "BOTH"): braces.append( _create_diagonal_member( gp_Pnt(x_l, yL, z_bot), gp_Pnt(x_r, yR, z_bot), - thickness, section_type, dims, +1 + bottom_chord_thickness, bottom_chord_section_type, bottom_chord_dims, +1 ) ) + # Add optional top bracket using top chord section if bracket in ("UPPER", "BOTH"): braces.append( _create_diagonal_member( gp_Pnt(x_l, yL, z_top), gp_Pnt(x_r, yR, z_top), - thickness, section_type, dims, +1 + top_chord_thickness, top_chord_section_type, top_chord_dims, +1 ) ) return braces -def _k_bracing(x, yL, yR, depth, tf, thickness, flange_w, - section_type, dims, top_bracket, skew_angle=0): +def _k_bracing(x, yL, yR, depth, tf, flange_w, + diagonal_thickness, diagonal_section_type, diagonal_dims, + top_chord_thickness, top_chord_section_type, top_chord_dims, + bottom_chord_thickness, bottom_chord_section_type, bottom_chord_dims, + top_bracket, skew_angle=0): """ Create K-bracing pattern between two girders. @@ -499,10 +522,20 @@ def _k_bracing(x, yL, yR, depth, tf, thickness, flange_w, yR: Right girder lateral position depth: Girder depth tf: Flange thickness - thickness: Bracing member thickness flange_w: Flange width - section_type: Section type for bracing - dims: Section dimensions + + diagonal_thickness: Thickness of diagonal members + diagonal_section_type: Section type for diagonal members + diagonal_dims: Section dimensions for diagonal members + + top_chord_thickness: Thickness of top chord/bracket + top_chord_section_type: Section type for top chord/bracket + top_chord_dims: Section dimensions for top chord/bracket + + bottom_chord_thickness: Thickness of bottom chord/bracket + bottom_chord_section_type: Section type for bottom chord/bracket + bottom_chord_dims: Section dimensions for bottom chord/bracket + top_bracket: Whether to include top horizontal bracket skew_angle: Bridge skew angle in degrees @@ -529,33 +562,33 @@ def get_skew_x(y): # Create K-pattern members braces = [ - # Left TOP → Middle BOTTOM diagonal + # Left TOP → Middle BOTTOM diagonal (using diagonal section) _create_diagonal_member( gp_Pnt(x_l, yL, z_top), gp_Pnt(x_m, ym, z_bot), - thickness, section_type, dims, +1 + diagonal_thickness, diagonal_section_type, diagonal_dims, +1 ), - # Right TOP → Middle BOTTOM diagonal + # Right TOP → Middle BOTTOM diagonal (using diagonal section) _create_diagonal_member( gp_Pnt(x_r, yR, z_top), gp_Pnt(x_m, ym, z_bot), - thickness, section_type, dims, -1 + diagonal_thickness, diagonal_section_type, diagonal_dims, -1 ), - # Bottom horizontal (mandatory for K-bracing) + # Bottom horizontal (mandatory for K-bracing, using bottom chord section) _create_diagonal_member( gp_Pnt(x_l, yL, z_bot), gp_Pnt(x_r, yR, z_bot), - thickness, section_type, dims, +1 + bottom_chord_thickness, bottom_chord_section_type, bottom_chord_dims, +1 ) ] - # Add optional top bracket + # Add optional top bracket using top chord section if top_bracket: braces.append( _create_diagonal_member( gp_Pnt(x_l, yL, z_top), gp_Pnt(x_r, yR, z_top), - thickness, section_type, dims, +1 + top_chord_thickness, top_chord_section_type, top_chord_dims, +1 ) ) @@ -624,11 +657,23 @@ def build_cross_bracings( flange_thickness, flange_width, - # Bracing configuration + # Internal bracing configuration bracing_type, # "X" or "K" - section_type, # "ANGLE", "CHANNEL", "DOUBLE_ANGLE", etc. - section_dims, # Dictionary with section dimensions - thickness, # Member thickness + + # Diagonal member configuration + diagonal_section_type, + diagonal_section_dims, + diagonal_thickness, + + # Top chord/bracket configuration + top_chord_section_type, + top_chord_section_dims, + top_chord_thickness, + + # Bottom chord/bracket configuration + bottom_chord_section_type, + bottom_chord_section_dims, + bottom_chord_thickness, # Spacing and options panel_spacing, # Spacing between bracing frames @@ -638,9 +683,27 @@ def build_cross_bracings( # End diaphragm configuration end_diaphragm_type="Cross Bracing", # "Cross Bracing", "Rolled Beam", "Welded Beam" - end_diaphragm_section="I_SECTION", # Section type for diaphragm - end_diaphragm_dims=None, # Custom dimensions for diaphragm - end_diaphragm_spacing=0 + end_diaphragm_bracing_type=None, # If None, use bracing_type + + # End diaphragm diagonal configuration + end_diaphragm_diagonal_section_type=None, # If None, error + end_diaphragm_diagonal_section_dims=None, + end_diaphragm_diagonal_thickness=None, + + # End diaphragm top chord configuration + end_diaphragm_top_chord_section_type=None, + end_diaphragm_top_chord_section_dims=None, + end_diaphragm_top_chord_thickness=None, + + # End diaphragm bottom chord configuration + end_diaphragm_bottom_chord_section_type=None, + end_diaphragm_bottom_chord_section_dims=None, + end_diaphragm_bottom_chord_thickness=None, + + # For Rolled/Welded beam diaphragms + end_diaphragm_section="I_SECTION", + end_diaphragm_dims=None, + end_diaphragm_spacing=0 ): bracings = [] @@ -696,25 +759,39 @@ def build_cross_bracings( x_eff = x - offset if end_diaphragm_type == "Cross Bracing": - # Use the same bracing type (X or K) as internal panels - if bracing_type == "X": + # Use end diaphragm section configurations + if end_diaphragm_bracing_type == "X": bracings.extend( _x_bracing( x_eff, yL, yR, - girder_depth, flange_thickness, - thickness, flange_width, - section_type, section_dims, + girder_depth, flange_thickness, flange_width, + end_diaphragm_diagonal_thickness, + end_diaphragm_diagonal_section_type, + end_diaphragm_diagonal_section_dims, + end_diaphragm_top_chord_thickness, + end_diaphragm_top_chord_section_type, + end_diaphragm_top_chord_section_dims, + end_diaphragm_bottom_chord_thickness, + end_diaphragm_bottom_chord_section_type, + end_diaphragm_bottom_chord_section_dims, bracket_option, skew_angle=skew_angle ) ) - elif bracing_type == "K": + elif end_diaphragm_bracing_type == "K": bracings.extend( _k_bracing( x_eff, yL, yR, - girder_depth, flange_thickness, - thickness, flange_width, - section_type, section_dims, + girder_depth, flange_thickness, flange_width, + end_diaphragm_diagonal_thickness, + end_diaphragm_diagonal_section_type, + end_diaphragm_diagonal_section_dims, + end_diaphragm_top_chord_thickness, + end_diaphragm_top_chord_section_type, + end_diaphragm_top_chord_section_dims, + end_diaphragm_bottom_chord_thickness, + end_diaphragm_bottom_chord_section_type, + end_diaphragm_bottom_chord_section_dims, top_bracket, skew_angle=skew_angle ) @@ -722,22 +799,18 @@ def build_cross_bracings( elif end_diaphragm_type == "Rolled Beam": # Use I-section for rolled beam diaphragm - diaphragm_dims = end_diaphragm_dims if end_diaphragm_dims is not None else section_dims - - # Validate dimensions or use defaults - if "depth" not in diaphragm_dims or "flange_width" not in diaphragm_dims: - diaphragm_dims = { - "depth": girder_depth * 0.8, - "flange_width": 200, - "web_thickness": 10, - "flange_thickness": 15 - } + diaphragm_dims = end_diaphragm_dims if end_diaphragm_dims is not None else { + "depth": girder_depth * 0.8, + "flange_width": 200, + "web_thickness": 10, + "flange_thickness": 15 + } bracings.extend( _diaphragm_bracing( x_eff, yL, yR, girder_depth, flange_thickness, - thickness, + diagonal_thickness, "I_SECTION", diaphragm_dims, skew_angle=skew_angle @@ -747,22 +820,27 @@ def build_cross_bracings( elif end_diaphragm_type == "Welded Beam": # Use I-section for welded beam diaphragm # Welded beams can have different proportions than rolled - diaphragm_dims = end_diaphragm_dims if end_diaphragm_dims is not None else section_dims + diaphragm_dims = end_diaphragm_dims if end_diaphragm_dims is not None else { + "depth": girder_depth * 0.85, + "flange_width": 250, + "web_thickness": 12, + "flange_thickness": 20 + } # Validate dimensions or use defaults (slightly larger than rolled) if "depth" not in diaphragm_dims or "flange_width" not in diaphragm_dims: diaphragm_dims = { - "depth": girder_depth * 0.85, # Slightly deeper - "flange_width": 250, # Wider flange - "web_thickness": 12, # Thicker web - "flange_thickness": 20 # Thicker flange + "depth": girder_depth * 0.85, + "flange_width": 250, + "web_thickness": 12, + "flange_thickness": 20 } bracings.extend( _diaphragm_bracing( x_eff, yL, yR, girder_depth, flange_thickness, - thickness, + diagonal_thickness, "I_SECTION", diaphragm_dims, skew_angle=skew_angle @@ -772,14 +850,15 @@ def build_cross_bracings( continue # INTERNAL BRACING HANDLING - # Build normal X or K bracing for internal panels + # Build normal X or K bracing for internal panels using separate sections if bracing_type == "X": bracings.extend( _x_bracing( x, yL, yR, - girder_depth, flange_thickness, - thickness, flange_width, - section_type, section_dims, + girder_depth, flange_thickness, flange_width, + diagonal_thickness, diagonal_section_type, diagonal_section_dims, + top_chord_thickness, top_chord_section_type, top_chord_section_dims, + bottom_chord_thickness, bottom_chord_section_type, bottom_chord_section_dims, bracket_option, skew_angle=skew_angle ) @@ -789,9 +868,10 @@ def build_cross_bracings( bracings.extend( _k_bracing( x, yL, yR, - girder_depth, flange_thickness, - thickness, flange_width, - section_type, section_dims, + girder_depth, flange_thickness, flange_width, + diagonal_thickness, diagonal_section_type, diagonal_section_dims, + top_chord_thickness, top_chord_section_type, top_chord_section_dims, + bottom_chord_thickness, bottom_chord_section_type, bottom_chord_section_dims, top_bracket, skew_angle=skew_angle ) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 839781d42..7344949c1 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -160,8 +160,8 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.railing_width = 300 # Railing width (mm) # CRASH BARRIER PARAMETERS - self.barrier_type = "Rigid" # "Rigid", "Semi-Rigid", or "Flexible" - self.crash_barrier_subtype = "IRC-5R" # Specific barrier design + self.barrier_type = "Semi-Rigid" # "Rigid", "Semi-Rigid", or "Flexible" + self.crash_barrier_subtype = "Double W-beam" # Specific barrier design # Options: # - Rigid: "IRC-5R", "High Containment" @@ -174,7 +174,7 @@ def __init__(self, bridge_type=KEY_MODULE_PG): # RAILING PARAMETERS self.rail_count = 3 # Number of rails - self.railing_type = "steel" # "rcc" or "steel" + self.railing_type = "rcc" # "rcc" or "steel" # STIFFENER PARAMETERS self.stiffener_width = 200 # Stiffener width (mm) @@ -186,64 +186,80 @@ def __init__(self, bridge_type=KEY_MODULE_PG): # CROSS BRACING PARAMETERS self.cross_bracing_spacing = 4000 # Spacing between bracing frames (mm) - self.cross_bracing_thickness = 5 # Bracing member thickness (mm) self.bracing_type = "K" # "X" or "K" self.x_bracket_option = "BOTH" # For X-bracing: "NONE", "UPPER", "LOWER", "BOTH" self.k_top_bracket = True # For K-bracing: include top bracket - # Section configuration - Choose one of the following: - - # OPTION 1: CHANNEL section (current default) - # self.cross_bracing_section_type = "CHANNEL" - # self.cross_bracing_section_dims = { - # "depth": 100, - # "flange_width": 50, - # "web_thickness": 5, - # "flange_thickness": 7 - # } - - # OPTION 2: DOUBLE_ANGLE section (uncomment to use) - self.cross_bracing_section_type = "DOUBLE_ANGLE" - self.cross_bracing_section_dims = { + # Diagonal members section configuration + self.diagonal_section_type = "ANGLE" + self.diagonal_section_dims = { "leg_h": 100, # Vertical leg height (longer leg) "leg_w": 50, # Horizontal leg width (shorter leg) "connection_type": "LONGER_LEG" # "LONGER_LEG" or "SHORTER_LEG" } - - - # OPTION 3: ANGLE section (uncomment to use) - # self.cross_bracing_section_type = "ANGLE" - # self.cross_bracing_section_dims = { - # "leg_h": 100, # Vertical leg height - # "leg_w": 50 # Horizontal leg width - # } - - # OPTION 4: DOUBLE_CHANNEL section (uncomment to use) - # self.cross_bracing_section_type = "DOUBLE_CHANNEL" - # self.cross_bracing_section_dims = { - # "depth": 100, - # "flange_width": 50, - # "web_thickness": 5, - # "flange_thickness": 7 - # } + self.diagonal_thickness = 5 # Diagonal member thickness (mm) + + # Top chord/bracket section configuration + self.top_chord_section_type = "ANGLE" + self.top_chord_section_dims = { + "leg_h": 80, + "leg_w": 40, + "connection_type": "LONGER_LEG" + } + self.top_chord_thickness = 5 # Top chord thickness (mm) + + # Bottom chord/bracket section configuration + self.bottom_chord_section_type = "ANGLE" + self.bottom_chord_section_dims = { + "leg_h": 80, + "leg_w": 40, + "connection_type": "LONGER_LEG" + } + self.bottom_chord_thickness = 5 # Bottom chord thickness (mm) # END DIAPHRAGM PARAMETERS - self.end_diaphragm_type = "Rolled Beam" # Options: "Cross Bracing", "Rolled Beam", "Welded Beam" - - - # If using "Cross Bracing" type, end diaphragms will use the same - # section as cross_bracing_section_type and cross_bracing_section_dims + self.end_diaphragm_type = "Cross Bracing" # Options: "Cross Bracing", "Rolled Beam", "Welded Beam" + self.end_diaphragm_spacing = 100 # Longitudinal offset from bridge ends (mm) + + # For "Cross Bracing" type end diaphragms - separate section configuration + self.end_diaphragm_bracing_type = "K" # "X" or "K" + + # End diaphragm diagonal members + self.end_diaphragm_diagonal_section_type = "ANGLE" + self.end_diaphragm_diagonal_section_dims = { + "leg_h": 100, + "leg_w": 50, + "connection_type": "LONGER_LEG" + } + self.end_diaphragm_diagonal_thickness = 5 + + # End diaphragm top chord + self.end_diaphragm_top_chord_section_type = "ANGLE" + self.end_diaphragm_top_chord_section_dims = { + "leg_h": 80, + "leg_w": 40, + "connection_type": "LONGER_LEG" + } + self.end_diaphragm_top_chord_thickness = 5 + + # End diaphragm bottom chord + self.end_diaphragm_bottom_chord_section_type = "ANGLE" + self.end_diaphragm_bottom_chord_section_dims = { + "leg_h": 80, + "leg_w": 40, + "connection_type": "LONGER_LEG" + } + self.end_diaphragm_bottom_chord_thickness = 5 - # If using "Rolled Beam" or "Welded Beam", these parameters are used: + # For "Rolled Beam" or "Welded Beam" types (unchanged) self.end_diaphragm_section = "I_SECTION" self.end_diaphragm_dims = { "depth": 800, "flange_width": 250, "web_thickness": 12, "flange_thickness": 100 - } - self.end_diaphragm_spacing = 200 + } # MAIN CAD GENERATION @@ -417,17 +433,49 @@ def _calculate_skew_offset(lateral_position, reference_position=0): flange_thickness=self.girder_section_tf, flange_width=self.girder_section_bf, + # Internal bracing configuration bracing_type=self.bracing_type, - section_type=self.cross_bracing_section_type, - section_dims=self.cross_bracing_section_dims, - thickness=self.cross_bracing_thickness, + + # Diagonal members + diagonal_section_type=self.diagonal_section_type, + diagonal_section_dims=self.diagonal_section_dims, + diagonal_thickness=self.diagonal_thickness, + + # Top chord/bracket + top_chord_section_type=self.top_chord_section_type, + top_chord_section_dims=self.top_chord_section_dims, + top_chord_thickness=self.top_chord_thickness, + + # Bottom chord/bracket + bottom_chord_section_type=self.bottom_chord_section_type, + bottom_chord_section_dims=self.bottom_chord_section_dims, + bottom_chord_thickness=self.bottom_chord_thickness, panel_spacing=self.cross_bracing_spacing, bracket_option=self.x_bracket_option, top_bracket=self.k_top_bracket, skew_angle=self.skew_angle, + # End diaphragm configuration end_diaphragm_type=self.end_diaphragm_type, + end_diaphragm_bracing_type=self.end_diaphragm_bracing_type, + + # End diaphragm diagonal members + end_diaphragm_diagonal_section_type=self.end_diaphragm_diagonal_section_type, + end_diaphragm_diagonal_section_dims=self.end_diaphragm_diagonal_section_dims, + end_diaphragm_diagonal_thickness=self.end_diaphragm_diagonal_thickness, + + # End diaphragm top chord + end_diaphragm_top_chord_section_type=self.end_diaphragm_top_chord_section_type, + end_diaphragm_top_chord_section_dims=self.end_diaphragm_top_chord_section_dims, + end_diaphragm_top_chord_thickness=self.end_diaphragm_top_chord_thickness, + + # End diaphragm bottom chord + end_diaphragm_bottom_chord_section_type=self.end_diaphragm_bottom_chord_section_type, + end_diaphragm_bottom_chord_section_dims=self.end_diaphragm_bottom_chord_section_dims, + end_diaphragm_bottom_chord_thickness=self.end_diaphragm_bottom_chord_thickness, + + # For Rolled/Welded beam diaphragms end_diaphragm_section=self.end_diaphragm_section, end_diaphragm_dims=self.end_diaphragm_dims, end_diaphragm_spacing=self.end_diaphragm_spacing From ea9d5704885515722a23472e83a7117467b0e2b5 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 17 Feb 2026 19:23:19 +0530 Subject: [PATCH 040/225] Add option of selecting number and thickness of end bearings --- .../super_structure/plate_girder/builder.py | 119 +++++++++--------- .../plate_girder/cad_generator.py | 22 ++-- 2 files changed, 76 insertions(+), 65 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py index 75b1910d4..739c44311 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py @@ -20,6 +20,10 @@ ) +# END STIFFENER SPACING +END_STIFFENER_SPACING = 50.0 # Spacing between end stiffener pairs (mm) + + # Helper geometry utilities ( def _make_edge(p1, p2): @@ -123,11 +127,12 @@ def build_plate_girder_geometry( T_fb, # Bottom flange thickness B_ft, # Top flange width B_fb, # Bottom flange width - stiffener_spacing, # Space between each stiffener plate - T_is, # Stiffener thickness - chamfer_length, # Triangular chamfer length - include_end_stiffeners=False, # Whether to include end stiffeners - T_es=None # End stiffener thickness + include_intermediate_stiffeners=True, # Whether to include intermediate stiffeners + intermediate_stiffener_spacing=750, # Space between intermediate stiffeners (mm) + intermediate_stiffener_thickness=20, # Intermediate stiffener thickness (mm) + chamfer_length=40, # Triangular chamfer length + num_end_stiffener_pairs=2, # Number of end stiffener pairs on each end + T_es=25 # End stiffener thickness (mm) ): """ Geometry-only Plate Girder builder for Osdag Bridge. @@ -167,71 +172,34 @@ def build_plate_girder_geometry( w_dir=w_dir ) - # Stiffeners (intermediate only, no end stiffeners) + # Stiffeners stiffeners = [] eff_depth = D - T_ft - T_fb stiff_width = (min(B_ft, B_fb) - tw) / 2 - num_panels = max(1, int(length // stiffener_spacing)) + # Intermediate stiffeners (only if enabled) + if include_intermediate_stiffeners: + num_panels = max(1, int(length // intermediate_stiffener_spacing)) - start_y = 0.0 - end_y = length - - if include_end_stiffeners: + # Calculate exclusion zone for end stiffeners end_stiffener_gap = T_es / 2.0 - start_y = end_stiffener_gap + 50.0 - end_y = length - (end_stiffener_gap + 50.0) - - - for i in range(1, num_panels): - y = i * stiffener_spacing - - if y <= start_y or y >= end_y: - continue - - stiffeners.append( - _create_stiffener_plate( - position=[ tw / 2, y, 0 ], - width=stiff_width, - height=D, - thickness=T_is, - chamfer=chamfer_length, - side="right" - ) - ) + end_stiffener_zone = end_stiffener_gap + (num_end_stiffener_pairs - 1) * END_STIFFENER_SPACING + END_STIFFENER_SPACING + start_y = end_stiffener_zone + end_y = length - end_stiffener_zone - stiffeners.append( - _create_stiffener_plate( - position=[ -tw / 2, y, 0 ], - width=stiff_width, - height=D, - thickness=T_is, - chamfer=chamfer_length, - side="left" - ) - ) - # End stiffeners - if include_end_stiffeners: - if T_es is None: - T_es = T_is + for i in range(1, num_panels): + y = i * intermediate_stiffener_spacing - end_stiffener_gap = (T_es / 2.0) + if y <= start_y or y >= end_y: + continue - end_positions = [ - end_stiffener_gap, - end_stiffener_gap + 50.0, - length - (end_stiffener_gap + 50.0), - length - end_stiffener_gap, - ] - - for y in end_positions: stiffeners.append( _create_stiffener_plate( position=[ tw / 2, y, 0 ], width=stiff_width, height=D, - thickness=T_es, + thickness=intermediate_stiffener_thickness, chamfer=chamfer_length, side="right" ) @@ -242,12 +210,51 @@ def build_plate_girder_geometry( position=[ -tw / 2, y, 0 ], width=stiff_width, height=D, - thickness=T_es, + thickness=intermediate_stiffener_thickness, chamfer=chamfer_length, side="left" ) ) + # End stiffeners (always present) + end_stiffener_gap = (T_es / 2.0) + + # Generate positions for the specified number of pairs + end_positions = [] + + # Left end stiffeners + for i in range(num_end_stiffener_pairs): + y_pos = end_stiffener_gap + i * END_STIFFENER_SPACING + end_positions.append(y_pos) + + # Right end stiffeners + for i in range(num_end_stiffener_pairs): + y_pos = length - end_stiffener_gap - i * END_STIFFENER_SPACING + end_positions.append(y_pos) + + for y in end_positions: + stiffeners.append( + _create_stiffener_plate( + position=[ tw / 2, y, 0 ], + width=stiff_width, + height=D, + thickness=T_es, + chamfer=chamfer_length, + side="right" + ) + ) + + stiffeners.append( + _create_stiffener_plate( + position=[ -tw / 2, y, 0 ], + width=stiff_width, + height=D, + thickness=T_es, + chamfer=chamfer_length, + side="left" + ) + ) + # SUPPORTS supports_tri = [] diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index 7344949c1..a30b0aa3c 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -177,12 +177,15 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.railing_type = "rcc" # "rcc" or "steel" # STIFFENER PARAMETERS - self.stiffener_width = 200 # Stiffener width (mm) - self.stiffener_length = 10 # Stiffener length (mm) - - # End stiffener configuration - self.include_end_stiffeners = True # Include end stiffeners - self.end_stiffener_thickness = 25 # End stiffener thickness (mm) + + # Intermediate stiffener configuration + self.include_intermediate_stiffeners = True # Include intermediate stiffeners + self.intermediate_stiffener_spacing = 750 # Spacing between intermediate stiffeners (mm) + self.intermediate_stiffener_thickness = 20 # Intermediate stiffener thickness (mm) + + # End stiffener configuration + self.num_end_stiffener_pairs = 4 # Number of end stiffener pairs on each end + self.end_stiffener_thickness = 20 # End stiffener thickness (mm) # CROSS BRACING PARAMETERS self.cross_bracing_spacing = 4000 # Spacing between bracing frames (mm) @@ -351,10 +354,11 @@ def _calculate_skew_offset(lateral_position, reference_position=0): T_fb=self.girder_section_tf_b, B_ft=self.girder_section_bf, B_fb=self.girder_section_bf_b, - stiffener_spacing=750, - T_is=20, + include_intermediate_stiffeners=self.include_intermediate_stiffeners, + intermediate_stiffener_spacing=self.intermediate_stiffener_spacing, + intermediate_stiffener_thickness=self.intermediate_stiffener_thickness, chamfer_length=40, - include_end_stiffeners=self.include_end_stiffeners, + num_end_stiffener_pairs=self.num_end_stiffener_pairs, T_es=self.end_stiffener_thickness ) From 67ffd3e1073c4c2a21393e15a12414525ba35e11 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 19 Feb 2026 00:57:35 +0530 Subject: [PATCH 041/225] Add outstand option for intermediate and end stiffeners --- .../super_structure/plate_girder/builder.py | 48 ++++++++++++++++--- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py index 739c44311..0458dd40a 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py @@ -132,7 +132,13 @@ def build_plate_girder_geometry( intermediate_stiffener_thickness=20, # Intermediate stiffener thickness (mm) chamfer_length=40, # Triangular chamfer length num_end_stiffener_pairs=2, # Number of end stiffener pairs on each end - T_es=25 # End stiffener thickness (mm) + T_es=25, # End stiffener thickness (mm) + intermediate_stiffener_outstand=None, # Custom outstand for intermediate stiffeners + end_stiffener_outstand=None, # Custom outstand for end stiffeners + include_longitudinal_stiffeners=False, # Whether to include longitudinal stiffeners + num_longitudinal_stiffeners=1, # Number of longitudinal stiffeners (1 or 2) + longitudinal_stiffener_thickness=20, # Thickness of longitudinal stiffeners (mm) + longitudinal_stiffener_outstand=None # Custom outstand for longitudinal stiffeners ): """ Geometry-only Plate Girder builder for Osdag Bridge. @@ -175,7 +181,12 @@ def build_plate_girder_geometry( # Stiffeners stiffeners = [] eff_depth = D - T_ft - T_fb - stiff_width = (min(B_ft, B_fb) - tw) / 2 + + # Calculate default outstand if not provided + default_stiff_width = (min(B_ft, B_fb) - tw) / 2 + + int_stiff_width = intermediate_stiffener_outstand if intermediate_stiffener_outstand is not None else default_stiff_width + end_stiff_width = end_stiffener_outstand if end_stiffener_outstand is not None else default_stiff_width # Intermediate stiffeners (only if enabled) if include_intermediate_stiffeners: @@ -197,7 +208,7 @@ def build_plate_girder_geometry( stiffeners.append( _create_stiffener_plate( position=[ tw / 2, y, 0 ], - width=stiff_width, + width=int_stiff_width, height=D, thickness=intermediate_stiffener_thickness, chamfer=chamfer_length, @@ -208,7 +219,7 @@ def build_plate_girder_geometry( stiffeners.append( _create_stiffener_plate( position=[ -tw / 2, y, 0 ], - width=stiff_width, + width=int_stiff_width, height=D, thickness=intermediate_stiffener_thickness, chamfer=chamfer_length, @@ -236,7 +247,7 @@ def build_plate_girder_geometry( stiffeners.append( _create_stiffener_plate( position=[ tw / 2, y, 0 ], - width=stiff_width, + width=end_stiff_width, height=D, thickness=T_es, chamfer=chamfer_length, @@ -247,7 +258,7 @@ def build_plate_girder_geometry( stiffeners.append( _create_stiffener_plate( position=[ -tw / 2, y, 0 ], - width=stiff_width, + width=end_stiff_width, height=D, thickness=T_es, chamfer=chamfer_length, @@ -255,6 +266,31 @@ def build_plate_girder_geometry( ) ) + # Longitudinal Stiffeners + if include_longitudinal_stiffeners: + long_stiff_width = longitudinal_stiffener_outstand if longitudinal_stiffener_outstand is not None else default_stiff_width + + # Calculate vertical positions from the web top (D/2) + heights = [] + if num_longitudinal_stiffeners == 1: + # 1/3 height from web top + heights.append(D / 2 - D / 3) + elif num_longitudinal_stiffeners == 2: + # 1/3 and 2/3 height from web top + heights.append(D / 2 - D / 3) + heights.append(D / 2 - 2 * D / 3) + + for h in heights: + long_stiff = _make_plate( + origin=np.array([tw / 2 + long_stiff_width / 2, length / 2, h]), + length=long_stiff_width, + width=length, + thickness=longitudinal_stiffener_thickness, + u_dir=np.array([0., 0., 1.]), # Thickness along Z + w_dir=np.array([0., 1., 0.]) # Length along Y + ) + stiffeners.append(long_stiff) + # SUPPORTS supports_tri = [] From 396a57105d1c238fc62790b9d45417c8b8edeff4 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 19 Feb 2026 01:22:38 +0530 Subject: [PATCH 042/225] Add longitudinal stiffeners with outstand option --- .../super_structure/plate_girder/builder.py | 8 ++++-- .../plate_girder/cad_generator.py | 26 ++++++++++++++----- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py index 0458dd40a..d1933ac2b 100644 --- a/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py +++ b/src/osdagbridge/core/bridge_components/super_structure/plate_girder/builder.py @@ -270,6 +270,10 @@ def build_plate_girder_geometry( if include_longitudinal_stiffeners: long_stiff_width = longitudinal_stiffener_outstand if longitudinal_stiffener_outstand is not None else default_stiff_width + # Start after the first end stiffener and end before the last one + long_stiff_start = T_es + long_stiff_len = length - 2 * long_stiff_start + # Calculate vertical positions from the web top (D/2) heights = [] if num_longitudinal_stiffeners == 1: @@ -282,9 +286,9 @@ def build_plate_girder_geometry( for h in heights: long_stiff = _make_plate( - origin=np.array([tw / 2 + long_stiff_width / 2, length / 2, h]), + origin=np.array([tw / 2 + long_stiff_width / 2, long_stiff_start, h]), length=long_stiff_width, - width=length, + width=long_stiff_len, thickness=longitudinal_stiffener_thickness, u_dir=np.array([0., 0., 1.]), # Thickness along Z w_dir=np.array([0., 1., 0.]) # Length along Y diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index a30b0aa3c..c007fb511 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -180,17 +180,25 @@ def __init__(self, bridge_type=KEY_MODULE_PG): # Intermediate stiffener configuration self.include_intermediate_stiffeners = True # Include intermediate stiffeners - self.intermediate_stiffener_spacing = 750 # Spacing between intermediate stiffeners (mm) + self.intermediate_stiffener_spacing = 2000 # Spacing between intermediate stiffeners (mm) self.intermediate_stiffener_thickness = 20 # Intermediate stiffener thickness (mm) + self.intermediate_stiffener_outstand = None # outstand for intermediate stiffeners # End stiffener configuration self.num_end_stiffener_pairs = 4 # Number of end stiffener pairs on each end - self.end_stiffener_thickness = 20 # End stiffener thickness (mm) + self.end_stiffener_thickness = 30 # End stiffener thickness (mm) + self.end_stiffener_outstand = None # outstand for end stiffeners + + # Longitudinal stiffener configuration + self.include_longitudinal_stiffeners = True # Whether to include longitudinal stiffeners + self.num_longitudinal_stiffeners = 2 # Number of longitudinal stiffeners (1 or 2) + self.longitudinal_stiffener_thickness = 20 # Thickness of longitudinal stiffeners (mm) + self.longitudinal_stiffener_outstand = None # outstand for longitudinal stiffeners # CROSS BRACING PARAMETERS self.cross_bracing_spacing = 4000 # Spacing between bracing frames (mm) - self.bracing_type = "K" # "X" or "K" + self.bracing_type = "X" # "X" or "K" self.x_bracket_option = "BOTH" # For X-bracing: "NONE", "UPPER", "LOWER", "BOTH" self.k_top_bracket = True # For K-bracing: include top bracket @@ -204,7 +212,7 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.diagonal_thickness = 5 # Diagonal member thickness (mm) # Top chord/bracket section configuration - self.top_chord_section_type = "ANGLE" + self.top_chord_section_type = "DOUBLE_CHANNEL" self.top_chord_section_dims = { "leg_h": 80, "leg_w": 40, @@ -238,7 +246,7 @@ def __init__(self, bridge_type=KEY_MODULE_PG): self.end_diaphragm_diagonal_thickness = 5 # End diaphragm top chord - self.end_diaphragm_top_chord_section_type = "ANGLE" + self.end_diaphragm_top_chord_section_type = "CHANNEL" self.end_diaphragm_top_chord_section_dims = { "leg_h": 80, "leg_w": 40, @@ -359,7 +367,13 @@ def _calculate_skew_offset(lateral_position, reference_position=0): intermediate_stiffener_thickness=self.intermediate_stiffener_thickness, chamfer_length=40, num_end_stiffener_pairs=self.num_end_stiffener_pairs, - T_es=self.end_stiffener_thickness + T_es=self.end_stiffener_thickness, + intermediate_stiffener_outstand=self.intermediate_stiffener_outstand, + end_stiffener_outstand=self.end_stiffener_outstand, + include_longitudinal_stiffeners=self.include_longitudinal_stiffeners, + num_longitudinal_stiffeners=self.num_longitudinal_stiffeners, + longitudinal_stiffener_thickness=self.longitudinal_stiffener_thickness, + longitudinal_stiffener_outstand=self.longitudinal_stiffener_outstand ) # STEP 2: PLACE MULTIPLE GIRDERS WITH SKEW OFFSET From a7bab29699fea2a898d8b9360dac253e3538ec48 Mon Sep 17 00:00:00 2001 From: AdityaWagh06 Date: Thu, 19 Feb 2026 04:12:06 +0530 Subject: [PATCH 043/225] feat: implement loading module with custom load integration --- .../ui_fields_additional_input.py | 697 ++++++++++++++++++ .../desktop/ui/dialogs/additional_inputs.py | 76 +- .../desktop/ui/dialogs/tabs/loading_tab.py | 105 ++- .../tabs/sub_tabs/loading/custom_load_tab.py | 625 ++++++++++++---- .../tabs/sub_tabs/loading/live_load_tab.py | 579 +++++++++++---- .../sub_tabs/loading/load_combination_tab.py | 559 ++++++++++---- .../sub_tabs/loading/permanent_load_tab.py | 190 ++++- .../tabs/sub_tabs/loading/seismic_load_tab.py | 371 ++++++---- .../sub_tabs/loading/temperature_load_tab.py | 195 +++-- .../tabs/sub_tabs/loading/wind_load_tab.py | 414 +++++++---- 10 files changed, 2897 insertions(+), 914 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py index 94b1f0502..ea4eed544 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py @@ -413,6 +413,703 @@ } ], } +PERMANENT_LOAD_TAB_SCHEMA = { + "id": "permanent_load_tab", + "label_width": 220, + "sections": [ + { + "title": "Dead Load (DL):", + "fields": [ + { + "id": "include_self_weight", + "label": "Include Member Self Weight:", + "type": "combo", + "choices": ["Yes", "No"], + "default": "Yes", + "bind": "include_self_weight_combo", + }, + { + "id": "self_weight_factor", + "label": "Self-weight factor:", + "type": "line", + "validator": {"type": "double_range", "bottom": 0.0, "top": 10.0, "decimals": 2}, + "default": "1.00", + "bind": "self_weight_factor_input", + }, + { + "id": "include_deck_weight", + "label": "Include Concrete Deck Weight:", + "type": "combo", + "choices": ["Yes", "No"], + "default": "Yes", + "bind": "include_deck_weight_combo", + }, + ], + }, + { + "title": "Dead Load for Surfacing (DW):", + "fields": [ + { + "id": "include_wearing_course", + "label": "Include Load from Wearing Course:", + "type": "combo", + "choices": ["Yes", "No"], + "default": "Yes", + "bind": "include_wearing_course_combo", + }, + ], + }, + { + "title": "Super-Imposed Dead Load (SIDL):", + "fields": [ + { + "id": "include_crash_barrier", + "label": "Include Load from Crash Barrier:", + "type": "combo", + "choices": ["Yes", "No"], + "default": "Yes", + "bind": "include_crash_barrier_combo", + }, + { + "id": "include_median", + "label": "Include Load from Median:", + "type": "combo", + "choices": ["Yes", "No"], + "default": "Yes", + "bind": "include_median_combo", + }, + { + "id": "include_railing", + "label": "Include Load from Railing:", + "type": "combo", + "choices": ["Yes", "No"], + "default": "Yes", + "bind": "include_railing_combo", + }, + ], + }, + ], +} + +LIVE_LOAD_TAB_SCHEMA = { + "id": "live_load_tab", + "label_width": 220, + "field_width": 180, + "field_height": 28, + "sections": [ + { + "id": "irc_vehicles_section", + "title": "Vehicles from IRC 6:", + "type": "checkbox_list", + "items": [ + "Class A", + "Class 70R Wheeled", + "Class 70R Tracked", + "Class AA Wheeled", + "Class AA Tracked", + "Class SV", + "Fatigue Truck", + ], + "bind": "irc_vehicle_checkboxes", + "default_checked": True, + }, + { + "id": "custom_vehicle_section", + "title": "Custom Vehicle:", + "type": "custom_vehicle_table", + "bind": "custom_vehicle_table", + "add_button_bind": "custom_vehicle_add_button", + }, + { + "id": "braking_section", + "title": "Braking Load from Vehicles:", + "type": "dynamic_checkbox_list", + "bind": "braking_vehicle_checkboxes", + "default_checked": True, + }, + { + "id": "eccentricity", + "label": "Eccentricity from top of Deck (m):", + "type": "line", + "validator": {"type": "double_range", "bottom": 0.0, "top": 100.0, "decimals": 2}, + "default": "0.00", + "bind": "eccentricity_input", + }, + { + "id": "footpath_pressure", + "label": "Footpath Pressure (kN/mm²):", + "type": "mode_line", + "mode_choices": ["Automatic", "User-defined"], + "default_mode": "Automatic", + "bind_mode": "footpath_mode_combo", + "bind_value": "footpath_value_input", + "default_value": "5.00", + "mode_width": 120, + "value_width": 80, + "on_mode_change": "_on_footpath_mode_changed", + }, + ], + "description": { + "title": "Description Box", + "text": ( + "or on any other type of bridge unit shall be assumed to have the following value:\n\n" + "a) In the case of a single lane or a two lane bridge: twenty percent of the first train " + "load plus ten percent of the load of the succeeding trains or part thereof, the train " + "loads in one lane only being considered for the purpose of this subclause. Where the " + "entire first train is not on the full span, the braking force shall be taken as equal to " + "twenty percent of the loads actually on the span or continuous unit of spans.\n" + "b) In the case of bridges having more than two lanes: as in (a) above for the first two " + "lanes plus five percent of the loads on the lanes in excess of two." + ), + }, +} + +SEISMIC_LOAD_TAB_SCHEMA = { + "id": "seismic_load_tab", + "label_width": 220, + "field_width": 180, + "field_height": 28, + "sections": [ + { + "id": "seismic_inputs_section", + "title": "Seismic/Earthquake Load (EL) Inputs:", + "type": "input_group", + "fields": [ + { + "id": "seismic_zone", + "label": "Seismic Zone:", + "type": "combo", + "choices": ["II", "III", "IV", "V"], + "default": "II", + "bind": "seismic_zone_combo", + }, + { + "id": "importance_factor", + "label": "Importance Factor:", + "type": "line", + "default": "1.0", + "bind": "importance_factor_input", + }, + { + "id": "soil_type", + "label": "Type of Soil:", + "type": "combo", + "choices": [ + "Type I – Rocky or Hard", + "Type II – Medium Soil", + "Type III – Soft Soil", + ], + "default": "Type I – Rocky or Hard Soil", + "bind": "soil_type_combo", + }, + { + "id": "time_period", + "label": "Time Period:", + "type": "line", + "bind": "time_period_input", + }, + { + "id": "damping", + "label": "Damping Percentage:", + "type": "line", + "default": "2", + "bind": "damping_input", + }, + { + "id": "response_reduction_factor", + "label": "Response Reduction Factor:", + "type": "combo", + "choices": ["1", "2", "3", "4", "5"], + "default": "1", + "bind": "response_factor_combo", + }, + { + "id": "dead_load_seismic", + "label": "Dead Load for Seismic Force (kN):", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "dead_load_seismic_combo", + "bind_value": "dead_load_custom_input", + "placeholder": "Custom Value", + "on_mode_change": "_toggle_seismic_custom_inputs", + }, + { + "id": "live_load_seismic", + "label": "Live Load for Seismic Force (kN):", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "live_load_seismic_combo", + "bind_value": "live_load_custom_input", + "placeholder": "Custom Value", + "on_mode_change": "_toggle_seismic_custom_inputs", + }, + ], + }, + { + "id": "computed_values_section", + "title": "Computed Values", + "type": "computed_group", + "fields": [ + { + "id": "zone_factor", + "label": "Zone Factor:", + "type": "computed", + "bind": "zone_factor", + }, + { + "id": "spectral_coeff", + "label": "Spectral Acceleration Coefficient:", + "type": "computed", + "bind": "spectral_coeff", + }, + { + "id": "horizontal_coeff", + "label": "Horizontal Seismic Coefficient:", + "type": "computed", + "bind": "horizontal_coeff", + }, + { + "id": "vertical_coeff", + "label": "Vertical Seismic Coefficient:", + "type": "computed", + "bind": "vertical_coeff", + }, + ], + }, + ], + "description": { + "title": "Description Box", + "text": ( + "Importance factor for normal, important, and critical bridges.\n\n" + "Seismic zone factors are defined according to IRC 6 specifications.\n\n" + "The spectral acceleration coefficient depends on soil type and time period." + ), + }, +} + +WIND_LOAD_TAB_SCHEMA = { + "id": "wind_load_tab", + "label_width": 260, + "field_width": 140, + "field_height": 28, + "sections": [ + { + "id": "wind_inputs_section", + "title": "Wind Load (WL) Inputs:", + "type": "input_group", + "fields": [ + { + "id": "basic_wind_speed", + "label": "Basic Wind Speed (m/s):", + "type": "line", + "bind": "basic_wind_speed_input", + }, + { + "id": "avg_exposed_height", + "label": "Average Exposed Height (m):", + "type": "line", + "default": "10", + "placeholder": "10", + "bind": "avg_exposed_height_input", + }, + { + "id": "terrain_type", + "label": "Type of Terrain:", + "type": "combo", + "choices": ["Plain Terrain", "Terrain with Obstructions"], + "default": "Plain Terrain", + "bind": "terrain_type_combo", + }, + { + "id": "site_topography", + "label": "Site Topography:", + "type": "combo", + "choices": ["Flat", "Hill, ridge, escarpment or cliff"], + "default": "Flat", + "bind": "site_topography_combo", + }, + { + "id": "gust_factor", + "label": "Gust Factor, G:", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "gust_factor_combo", + "bind_value": "gust_factor_value", + "default_value": "2", + "placeholder": "2", + "on_mode_change": "_toggle_wind_custom_input", + }, + { + "id": "drag_coeff", + "label": "Drag Coefficient, CD:", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "drag_coeff_combo", + "bind_value": "drag_coeff_value", + "placeholder": "Custom Value", + "on_mode_change": "_toggle_wind_custom_input", + }, + { + "id": "drag_coeff_ll", + "label": "Drag Coefficient against Live Load, CDLL:", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "drag_coeff_ll_combo", + "bind_value": "drag_coeff_ll_value", + "default_value": "1.2", + "placeholder": "1.2", + "on_mode_change": "_toggle_wind_custom_input", + }, + { + "id": "lift_coeff", + "label": "Lift Coefficient, CL:", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "lift_coeff_combo", + "bind_value": "lift_coeff_value", + "default_value": "0.75", + "placeholder": "0.75", + "on_mode_change": "_toggle_wind_custom_input", + }, + { + "id": "super_area_elev", + "label": "Superstructure Area in Elevation (m²):", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "super_area_elev_combo", + "bind_value": "super_area_elev_value", + "placeholder": "Custom Value", + "on_mode_change": "_toggle_wind_custom_input", + }, + { + "id": "super_area_plain", + "label": "Superstructure Area in Plain (m²):", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "super_area_plain_combo", + "bind_value": "super_area_plain_value", + "placeholder": "Custom Value", + "on_mode_change": "_toggle_wind_custom_input", + }, + { + "id": "exposed_frontal_area", + "label": "Exposed Frontal Area of Live Load (m²):", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "exposed_frontal_area_combo", + "bind_value": "exposed_frontal_area_value", + "placeholder": "Custom Value", + "on_mode_change": "_toggle_wind_custom_input", + }, + { + "id": "wind_ecc_deck", + "label": "Wind Load Eccentricity from Top of Deck (m):", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "wind_ecc_deck_combo", + "bind_value": "wind_ecc_deck_value", + "placeholder": "Custom Value", + "on_mode_change": "_toggle_wind_custom_input", + }, + { + "id": "wind_ll_ecc", + "label": "Wind on Live Load Eccentricity from Top of Deck (m):", + "type": "mode_line", + "mode_choices": ["Automatic", "Custom"], + "default_mode": "Automatic", + "bind_mode": "wind_ll_ecc_combo", + "bind_value": "wind_ll_ecc_value", + "placeholder": "Custom Value", + "on_mode_change": "_toggle_wind_custom_input", + }, + ], + }, + { + "id": "computed_values_section", + "title": "Computed Values", + "type": "computed_group", + "fields": [ + { + "id": "hourly_mean_wind", + "label": "Hourly Mean Wind Speed (m/s):", + "type": "computed", + "bind": "hourly_mean_wind", + }, + { + "id": "hourly_wind_pressure", + "label": "Hourly Wind Pressure N/m²:", + "type": "computed", + "bind": "hourly_wind_pressure", + }, + { + "id": "transverse_wind_force", + "label": "Transverse Wind Force N:", + "type": "computed", + "bind": "transverse_wind_force", + }, + { + "id": "longitudinal_wind_force", + "label": "Longitudinal Wind Force N:", + "type": "computed", + "bind": "longitudinal_wind_force", + }, + { + "id": "vertical_wind_force", + "label": "Vertical Wind Force N:", + "type": "computed", + "bind": "vertical_wind_force", + }, + { + "id": "transverse_wind_ll", + "label": "Transverse Wind Force on Live Load N:", + "type": "computed", + "bind": "transverse_wind_ll", + }, + { + "id": "longitudinal_wind_ll", + "label": "Longitudinal Wind Force on Live Load N:", + "type": "computed", + "bind": "longitudinal_wind_ll", + }, + ], + }, + ], + "description": { + "title": "Description Box", + "text": ( + "Wind load calculations per IRC 6 specifications.\n\n" + "The basic wind speed should be obtained from relevant meteorological data.\n\n" + "Gust factor accounts for wind fluctuations.\n\n" + "Note: Wind load eccentricity values should be negative for positions below the deck." + ), + }, +} + +TEMPERATURE_LOAD_TAB_SCHEMA = { + "id": "temperature_load_tab", + "label_width": 240, + "field_width": 140, + "sections": [ + { + "id": "temperature_inputs_section", + "title": "Temperature Load (TL) Inputs for Evaluation per IRC6", + "type": "input_group", + "fields": [ + { + "id": "highest_max_temp", + "label": "Highest Maximum Air Temperature\n(°C):", + "type": "line", + "placeholder": "From Project Location", + "bind": "highest_max_temp_input", + "validator": {"type": "double_range", "bottom": -50.0, "top": 100.0, "decimals": 2}, + }, + { + "id": "lowest_min_temp", + "label": "Lowest Minimum Air Temperature\n(°C):", + "type": "line", + "placeholder": "From Project Location", + "bind": "lowest_min_temp_input", + "validator": {"type": "double_range", "bottom": -50.0, "top": 100.0, "decimals": 2}, + }, + { + "id": "thermal_coeff_steel", + "label": "Coefficient of Thermal Expansion for Steel\n(1/°C):", + "type": "line", + "default": "12.0e-6", + "bind": "thermal_coeff_steel_input", + "validator": {"type": "double_range", "bottom": 0.0, "top": 1.0, "decimals": 8}, + }, + { + "id": "thermal_coeff_rcc", + "label": "Coefficient of Thermal Expansion for RCC\n(1/°C):", + "type": "line", + "default": "12.0e-6", + "bind": "thermal_coeff_rcc_input", + "validator": {"type": "double_range", "bottom": 0.0, "top": 1.0, "decimals": 8}, + }, + ], + }, + { + "id": "bridge_temp_range_section", + "title": "Range of Effective Bridge Temperature:", + "type": "output_group", + "fields": [ + { + "id": "bridge_temp_min", + "label": "Minimum (°C):", + "type": "line", + "read_only": True, + "bind": "bridge_temp_min_input", + }, + { + "id": "bridge_temp_max", + "label": "Maximum (°C):", + "type": "line", + "read_only": True, + "bind": "bridge_temp_max_input", + }, + ], + }, + { + "id": "temp_design_section", + "title": "Temperature for Design:", + "type": "output_group", + "fields": [ + { + "id": "temp_rise", + "label": "Rise (°C):", + "type": "line", + "read_only": True, + "bind": "temp_rise_input", + }, + { + "id": "temp_fall", + "label": "Fall (°C):", + "type": "line", + "read_only": True, + "bind": "temp_fall_input", + }, + ], + }, + ], +} + +CUSTOM_LOAD_TAB_SCHEMA = { + "id": "custom_load_tab", + "label_width": 260, + "field_width": 140, + "load_case_choices": [ + "DL", "DW", "SIDL", "LL", "EL", "WL", "TL", "Custom" + ], + "load_type_choices": ["Point", "Line", "Area"], + "fields": { + "load_case": { + "id": "custom_load_case", + "label": "Load Case:", + "type": "combo", + "bind": "custom_load_case_combo", + }, + "custom_load_case_name": { + "id": "custom_load_case_name", + "label": "", # Hidden label, uses spacer + "type": "line", + "placeholder": "custom", + "bind": "custom_load_case_name_input", + "enabled": False, + }, + "load_type": { + "id": "custom_load_type", + "label": "Load Type:", + "type": "combo", + "bind": "custom_load_type_combo", + }, + "point_left": { + "id": "custom_point_left", + "label": "Distance from Left Edge of Bridge (m):", + "type": "line", + "bind": "custom_point_left_input", + "validator": {"type": "double_range", "bottom": 0.0, "top": 1000.0, "decimals": 3}, + }, + "point_bearing": { + "id": "custom_point_bearing", + "label": "Distance from Center Line of Bearing (m):", + "type": "line", + "bind": "custom_point_bearing_input", + "validator": {"type": "double_range", "bottom": -1000.0, "top": 1000.0, "decimals": 3}, + }, + "line_left_start": { + "id": "custom_line_left_start", + "label": "Distance from Left Edge of Bridge (m):", + "sub_label": "Start", + "type": "line", + "bind": "custom_line_left_start", + "field_width": 70, + "validator": {"type": "double_range", "bottom": 0.0, "top": 1000.0, "decimals": 3}, + }, + "line_left_end": { + "id": "custom_line_left_end", + "sub_label": "End", + "type": "line", + "bind": "custom_line_left_end", + "field_width": 70, + "validator": {"type": "double_range", "bottom": 0.0, "top": 1000.0, "decimals": 3}, + }, + "line_bearing_start": { + "id": "custom_line_bearing_start", + "label": "Distance from Center Line of Bearing (m):", + "sub_label": "Start", + "type": "line", + "bind": "custom_line_bearing_start", + "field_width": 70, + "validator": {"type": "double_range", "bottom": -1000.0, "top": 1000.0, "decimals": 3}, + }, + "line_bearing_end": { + "id": "custom_line_bearing_end", + "sub_label": "End", + "type": "line", + "bind": "custom_line_bearing_end", + "field_width": 70, + "validator": {"type": "double_range", "bottom": -1000.0, "top": 1000.0, "decimals": 3}, + }, + }, +} + +LOAD_COMBINATION_TAB_SCHEMA = { + "id": "load_combination_tab", + "label_width": 280, + "rows": [ + { + "fields": [ + { + "id": "auto_include_irc6", + "label": "Auto include all IRC 6 Load Combinations", + "type": "checkbox", + "bind": "auto_include_checkbox", + } + ] + }, + ], + "controls": [ + { + "id": "add", + "label": "Add", + "type": "button", + "bind": "load_combo_add_btn", + "width": 60, + }, + { + "id": "edit", + "label": "Edit", + "type": "button", + "bind": "load_combo_edit_btn", + "width": 60, + }, + { + "id": "delete", + "label": "Delete", + "type": "button", + "bind": "load_combo_delete_btn", + "width": 60, + }, + { + "id": "default", + "label": "Default", + "type": "button", + "bind": "load_combo_default_btn", + "width": 60, + }, + ], +} SUPPORT_CONDITIONS_SCHEMA = { "id": "support_conditions", diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 5e47d4b82..76dc48078 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -222,70 +222,36 @@ def _create_schema_widget(self, field_def, field_width): return widget def _apply_defaults(self): + + """Apply default values to all tabs""" + if hasattr(self, "typical_section_tab") and hasattr(self.typical_section_tab, "reset_defaults"): self.typical_section_tab.reset_defaults() + if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "reset_defaults"): self.section_properties_tab.reset_defaults() - if not (hasattr(self, "typical_section_tab") or hasattr(self, "section_properties_tab")): - self._show_placeholder_message("Defaults") - - def _save_inputs(self): - """ - Save additional inputs and close dialog. - Data will be collected by template_page via get_all_values(). - """ - self.accept() - - def get_all_values(self): - """ - Return CAD-relevant numeric values from Additional Inputs. - This is consumed by InputDock / template_page. - """ - - from osdagbridge.core.utils.common import ( - KEY_NO_OF_GIRDERS, - KEY_GIRDER_SPACING, - KEY_DECK_OVERHANG, - KEY_DECK_THICKNESS, - KEY_FOOTPATH_WIDTH, - KEY_FOOTPATH_THICKNESS, - KEY_CROSS_BRACING_SPACING, - ) - - values = {} - - # ---- Typical Section tab ---- - ts = self.typical_section_tab - - if hasattr(ts, "no_of_girders") and ts.no_of_girders.text(): - values[KEY_NO_OF_GIRDERS] = int(float(ts.no_of_girders.text())) - - if hasattr(ts, "girder_spacing") and ts.girder_spacing.text(): - values[KEY_GIRDER_SPACING] = float(ts.girder_spacing.text()) - - if hasattr(ts, "deck_overhang") and ts.deck_overhang.text(): - values[KEY_DECK_OVERHANG] = float(ts.deck_overhang.text()) - if hasattr(ts, "deck_thickness") and ts.deck_thickness.text(): - values[KEY_DECK_THICKNESS] = float(ts.deck_thickness.text()) + if hasattr(self, "loading_tab"): + self.loading_tab.reset_defaults() - if hasattr(ts, "footpath_width") and ts.footpath_width.text(): - values[KEY_FOOTPATH_WIDTH] = float(ts.footpath_width.text()) + for i in range(self.loading_tab.load_tabs.count()): + tab = self.loading_tab.load_tabs.widget(i) + if hasattr(tab, "reset_defaults"): + tab.reset_defaults() - if hasattr(ts, "footpath_thickness") and ts.footpath_thickness.text(): - values[KEY_FOOTPATH_THICKNESS] = float(ts.footpath_thickness.text()) - - # ---- Cross bracing spacing (Section Properties tab) ---- - try: - bracing_tab = self.section_properties_tab.cross_bracing_details_tab - if hasattr(bracing_tab, "bracing_spacing") and bracing_tab.bracing_spacing.text(): - values[KEY_CROSS_BRACING_SPACING] = float(bracing_tab.bracing_spacing.text()) - except Exception: - pass - - return values + if hasattr(self, "typical_section_tab") and hasattr(self.typical_section_tab, "reset_defaults"): + self.typical_section_tab.reset_defaults() + if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "reset_defaults"): + self.section_properties_tab.reset_defaults() + if not (hasattr(self, "typical_section_tab") or hasattr(self, "section_properties_tab")): + self._show_placeholder_message("Defaults") + def _save_inputs(self): + saved = {} + if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "save_properties"): + saved.update(self.section_properties_tab.save_properties() or {}) + # No popup; silently succeed for now def _build_sections_from_schema(self, parent_layout, sections, heading_style, label_style, field_width): for section in sections: diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py index c15942f10..864deb9b3 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py @@ -30,9 +30,17 @@ class LoadingTab(QWidget): def __init__(self, parent=None): super().__init__(parent) + + # REQUIRED for Live Load defaults (MUST be before _build_ui) + self.irc_vehicle_checkboxes = [] + self.irc_vehicle_labels = [] + self.braking_vehicle_checkboxes = [] + self.braking_vehicle_labels = [] + self.custom_vehicle_dialog = CustomVehicleDialog(self) self.custom_load_items = [] self.load_combo_items = [] + self._build_ui() def _build_ui(self): @@ -42,22 +50,50 @@ def _build_ui(self): self.load_tabs = QTabWidget() self.load_tabs.setDocumentMode(True) + + self.load_tabs.setUsesScrollButtons(True) + self.load_tabs.tabBar().setExpanding(False) + + self.load_tabs.setMovable(False) + self.load_tabs.setStyleSheet( - "QTabWidget::pane { border: none; background: #f5f5f5; }" - "QTabBar::tab { background: #e8e8e8; color: #4b4b4b; border: 1px solid #cfcfcf;" - " border-bottom: none; padding: 8px 20px; margin-right: 2px; min-width: 120px;" - " font-size: 11px; }" - "QTabBar::tab:selected { background: #90AF13; color: #ffffff; font-weight: bold; }" - "QTabBar::tab:!selected { margin-top: 2px; }" - ) + "QTabBar::scroller {" + " width: 24px;" + "}" + + "QTabBar::right-arrow {" + " image: none;" + " border: none;" + " background: transparent;" + "}" + + "QTabBar::left-arrow {" + " image: none;" + " border: none;" + " background: transparent;" + "}" + + "QTabBar::left-arrow:!enabled {" + " width: 0px;" + "}" - self.load_tabs.addTab(PermanentLoadTab(self), "Permanent Load") - self.load_tabs.addTab(LiveLoadTab(self), "Live Load") - self.load_tabs.addTab(SeismicLoadTab(self), "Seismic Load") - self.load_tabs.addTab(WindLoadTab(self), "Wind Load") - self.load_tabs.addTab(TemperatureLoadTab(self), "Temperature Load") - self.load_tabs.addTab(CustomLoadTab(self), "Custom Load") - self.load_tabs.addTab(LoadCombinationTab(self), "Load Combination") + ) + self.permanent_load_tab = PermanentLoadTab(self) + self.live_load_tab = LiveLoadTab(self) + self.seismic_load_tab = SeismicLoadTab(self) + self.wind_load_tab = WindLoadTab(self) + self.temperature_load_tab = TemperatureLoadTab(self) + self.custom_load_tab = CustomLoadTab(self) + self.load_combination_tab = LoadCombinationTab(self) + + self.load_tabs.addTab(self.permanent_load_tab, "Permanent Load") + self.load_tabs.addTab(self.live_load_tab, "Live Load") + self.load_tabs.addTab(self.seismic_load_tab, "Seismic Load") + self.load_tabs.addTab(self.wind_load_tab, "Wind Load") + self.load_tabs.addTab(self.temperature_load_tab, "Temperature Load") + self.load_tabs.addTab(self.custom_load_tab, "Custom Load") + self.load_tabs.addTab(self.load_combination_tab, "Load Combination") + layout.addWidget(self.load_tabs) @@ -131,6 +167,16 @@ def _add_checkbox_section(self, parent_layout, title, items): ) checkbox = QCheckBox() checkbox.setChecked(False) + + # Store references for Live Load defaults + if "Vehicles from IRC 6" in title: + self.irc_vehicle_checkboxes.append(checkbox) + self.irc_vehicle_labels.append(label) + + elif "Braking Load" in title: + self.braking_vehicle_checkboxes.append(checkbox) + self.braking_vehicle_labels.append(label) + grid.addWidget(label, row, 0, Qt.AlignLeft | Qt.AlignVCenter) grid.addWidget(checkbox, row, 1, Qt.AlignRight | Qt.AlignVCenter) @@ -161,3 +207,34 @@ def show_custom_vehicle_dialog(self): self.custom_vehicle_dialog.show() self.custom_vehicle_dialog.raise_() self.custom_vehicle_dialog.activateWindow() + + def update_permanent_load_dependencies(self, has_median: bool, has_footpath: bool): + """ + Forward dependency updates to PermanentLoadTab + """ + if hasattr(self, "load_tabs"): + for i in range(self.load_tabs.count()): + tab = self.load_tabs.widget(i) + if hasattr(tab, "update_dependency_states"): + tab.update_dependency_states( + has_median=has_median, + has_footpath=has_footpath + ) + def reset_defaults(self): + """Reset all loading sub-tabs to default values""" + + if hasattr(self, "permanent_load_tab"): + self.permanent_load_tab.reset_defaults() + + if hasattr(self, "live_load_tab") and hasattr(self.live_load_tab, "reset_defaults"): + self.live_load_tab.reset_defaults() + if hasattr(self, "seismic_load_tab") and hasattr(self.seismic_load_tab, "reset_defaults"): + self.seismic_load_tab.reset_defaults() + + if hasattr(self, "wind_load_tab") and hasattr(self.wind_load_tab, "reset_defaults"): + self.wind_load_tab.reset_defaults() + + if hasattr(self, "temperature_load_tab") and hasattr(self.temperature_load_tab, "reset_defaults"): + self.temperature_load_tab.reset_defaults() + if hasattr(self, "custom_load_tab") and hasattr(self.custom_load_tab, "reset_defaults"): + self.custom_load_tab.reset_defaults() \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/custom_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/custom_load_tab.py index a43f82677..3cfe392f9 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/custom_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/custom_load_tab.py @@ -1,4 +1,5 @@ from PySide6.QtCore import Qt, QSize +from PySide6.QtGui import QDoubleValidator from PySide6.QtWidgets import ( QCheckBox, QComboBox, @@ -9,30 +10,49 @@ QLineEdit, QMessageBox, QPushButton, + QScrollArea, QStackedWidget, QSizePolicy, + QTableWidget, + QTableWidgetItem, + QHeaderView, QVBoxLayout, QWidget, ) from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import CUSTOM_LOAD_TAB_SCHEMA class CustomLoadTab(QWidget): - """Custom load input editor.""" def __init__(self, owner): super().__init__(owner) self.owner = owner self.custom_load_items = getattr(owner, "custom_load_items", []) owner.custom_load_items = self.custom_load_items + self.schema = CUSTOM_LOAD_TAB_SCHEMA self._build_ui() def _build_ui(self): owner = self.owner + schema = self.schema self.setStyleSheet("background-color: #f0f0f0;") - page_layout = QVBoxLayout(self) + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(0, 0, 0, 0) + main_layout.setSpacing(0) + + scroll_area = QScrollArea() + scroll_area.setWidgetResizable(True) + scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + scroll_area.setStyleSheet("QScrollArea { border: none; background-color: #f0f0f0; }") + + scroll_content = QWidget() + scroll_content.setStyleSheet("background-color: #f0f0f0;") + + page_layout = QVBoxLayout(scroll_content) page_layout.setContentsMargins(8, 8, 8, 8) page_layout.setSpacing(8) @@ -42,7 +62,9 @@ def _build_ui(self): label_style = "font-size: 11px; color: #2a2a2a; background: transparent; border: none;" heading_style = "font-size: 11px; font-weight: 700; color: #1a1a1a; background: transparent; border: none;" - field_width = 105 + + label_width = schema.get("label_width", 260) + field_width = schema.get("field_width", 140) left_column = QVBoxLayout() left_column.setContentsMargins(0, 0, 0, 0) @@ -76,45 +98,59 @@ def _build_ui(self): title.setStyleSheet(heading_style) input_layout.addWidget(title) - form_grid = QGridLayout() - form_grid.setContentsMargins(0, 0, 0, 0) - form_grid.setHorizontalSpacing(8) - form_grid.setVerticalSpacing(8) - form_grid.setColumnMinimumWidth(0, 120) - form_grid.setColumnStretch(0, 0) - form_grid.setColumnStretch(1, 0) - form_grid.setColumnStretch(2, 0) + all_fields_layout = QVBoxLayout() + all_fields_layout.setContentsMargins(0, 0, 0, 0) + all_fields_layout.setSpacing(10) - lbl = QLabel("Load Case:") + load_case_field = schema["fields"]["load_case"] + load_case_row = QHBoxLayout() + load_case_row.setSpacing(8) + + lbl = QLabel(load_case_field["label"]) lbl.setStyleSheet(label_style) + lbl.setFixedWidth(label_width) + owner.custom_load_case_combo = QComboBox() - owner.custom_load_case_combo.addItems(["", "LL", "DL", "Custom"]) + owner.custom_load_case_combo.addItems(schema["load_case_choices"]) owner.custom_load_case_combo.setFixedWidth(field_width) apply_field_style(owner.custom_load_case_combo) - form_grid.addWidget(lbl, 0, 0, Qt.AlignLeft | Qt.AlignVCenter) - form_grid.addWidget(owner.custom_load_case_combo, 0, 1, Qt.AlignLeft) - - owner.custom_load_case_button = QPushButton("Custom") - owner.custom_load_case_button.setFixedWidth(field_width) - owner.custom_load_case_button.setStyleSheet( - "QPushButton { background: #e8e8e8; border: 1px solid #a0a0a0; border-radius: 3px; padding: 3px 8px; font-size: 11px; color: #2a2a2a; }" - "QPushButton:hover { background: #f0f0f0; }" - "QPushButton:pressed { background: #d8d8d8; }" - ) - form_grid.addWidget(owner.custom_load_case_button, 0, 2, Qt.AlignLeft) - - lbl = QLabel("Load Type:") + + load_case_row.addWidget(lbl) + load_case_row.addWidget(owner.custom_load_case_combo) + + custom_name_field = schema["fields"]["custom_load_case_name"] + owner.custom_load_case_name_input = QLineEdit() + owner.custom_load_case_name_input.setPlaceholderText(custom_name_field["placeholder"]) + owner.custom_load_case_name_input.setFixedWidth(field_width) + owner.custom_load_case_name_input.setEnabled(custom_name_field["enabled"]) + apply_field_style(owner.custom_load_case_name_input) + + load_case_row.addWidget(owner.custom_load_case_name_input) + load_case_row.addStretch() + all_fields_layout.addLayout(load_case_row) + + load_type_field = schema["fields"]["load_type"] + load_type_row = QHBoxLayout() + load_type_row.setSpacing(8) + + lbl = QLabel(load_type_field["label"]) lbl.setStyleSheet(label_style) + lbl.setFixedWidth(label_width) + owner.custom_load_type_combo = QComboBox() - owner.custom_load_type_combo.addItems(["Point", "Line/Area"]) + owner.custom_load_type_combo.addItems(schema["load_type_choices"]) owner.custom_load_type_combo.setFixedWidth(field_width) apply_field_style(owner.custom_load_type_combo) - form_grid.addWidget(lbl, 1, 0, Qt.AlignLeft | Qt.AlignVCenter) - form_grid.addWidget(owner.custom_load_type_combo, 1, 1, Qt.AlignLeft) + + load_type_row.addWidget(lbl) + load_type_row.addWidget(owner.custom_load_type_combo) + load_type_row.addStretch() + all_fields_layout.addLayout(load_type_row) + + input_layout.addLayout(all_fields_layout) self.custom_load_stack = QStackedWidget() - self.custom_load_stack.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - self.custom_load_stack.setFixedWidth(360) + self.custom_load_stack.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.custom_load_stack.setStyleSheet( "QStackedWidget { border: none; background: transparent; }" "QWidget#customPointWidget, QWidget#customLineWidget { background: transparent; }" @@ -122,104 +158,174 @@ def _build_ui(self): point_widget = QWidget() point_widget.setObjectName("customPointWidget") - point_grid = QGridLayout(point_widget) - point_grid.setContentsMargins(0, 0, 0, 0) - point_grid.setHorizontalSpacing(8) - point_grid.setVerticalSpacing(8) - point_grid.setColumnMinimumWidth(0, 240) - point_grid.setColumnStretch(0, 0) - point_grid.setColumnStretch(1, 0) - - lbl = QLabel("Distance from Left Edge of Bridge Cross\nSection (m):") + point_layout = QVBoxLayout(point_widget) + point_layout.setContentsMargins(0, 8, 0, 0) + point_layout.setSpacing(10) + + point_left_field = schema["fields"]["point_left"] + point_left_row = QHBoxLayout() + point_left_row.setSpacing(8) + + lbl = QLabel(point_left_field["label"]) lbl.setStyleSheet(label_style) + lbl.setFixedWidth(label_width) + owner.custom_point_left_input = QLineEdit() - owner.custom_point_left_input.setFixedWidth(105) + owner.custom_point_left_input.setFixedWidth(field_width) apply_field_style(owner.custom_point_left_input) - point_grid.addWidget(lbl, 0, 0, Qt.AlignLeft | Qt.AlignVCenter) - point_grid.addWidget(owner.custom_point_left_input, 0, 1, Qt.AlignLeft) - - lbl = QLabel("Distance from Center Line of Bearing\n(m):") + self._apply_validator(owner.custom_point_left_input, point_left_field.get("validator")) + + point_left_row.addWidget(lbl) + point_left_row.addWidget(owner.custom_point_left_input) + point_left_row.addStretch() + point_layout.addLayout(point_left_row) + + point_bearing_field = schema["fields"]["point_bearing"] + point_bearing_row = QHBoxLayout() + point_bearing_row.setSpacing(8) + + lbl = QLabel(point_bearing_field["label"]) lbl.setStyleSheet(label_style) + lbl.setFixedWidth(label_width) + owner.custom_point_bearing_input = QLineEdit() - owner.custom_point_bearing_input.setFixedWidth(105) + owner.custom_point_bearing_input.setFixedWidth(field_width) apply_field_style(owner.custom_point_bearing_input) - point_grid.addWidget(lbl, 1, 0, Qt.AlignLeft | Qt.AlignVCenter) - point_grid.addWidget(owner.custom_point_bearing_input, 1, 1, Qt.AlignLeft) + self._apply_validator(owner.custom_point_bearing_input, point_bearing_field.get("validator")) + + point_bearing_row.addWidget(lbl) + point_bearing_row.addWidget(owner.custom_point_bearing_input) + point_bearing_row.addStretch() + point_layout.addLayout(point_bearing_row) self.custom_load_stack.addWidget(point_widget) line_widget = QWidget() line_widget.setObjectName("customLineWidget") - line_grid = QGridLayout(line_widget) - line_grid.setContentsMargins(0, 0, 0, 0) - line_grid.setHorizontalSpacing(8) - line_grid.setVerticalSpacing(4) - line_grid.setColumnMinimumWidth(0, 240) - - def _start_end_row(label_text, start_attr, end_attr, row_idx): - row_label = QLabel(label_text) - row_label.setStyleSheet(label_style) - start_field = QLineEdit() - end_field = QLineEdit() - start_field.setFixedWidth(52) - end_field.setFixedWidth(52) - apply_field_style(start_field) - apply_field_style(end_field) - - line_grid.addWidget(row_label, row_idx * 2, 0, Qt.AlignLeft | Qt.AlignVCenter) - line_grid.addWidget(start_field, row_idx * 2, 1, Qt.AlignLeft) - line_grid.addWidget(end_field, row_idx * 2, 2, Qt.AlignLeft) - - start_lbl = QLabel("Start") - start_lbl.setStyleSheet("font-size: 9px; color: #505050;") - end_lbl = QLabel("End") - end_lbl.setStyleSheet("font-size: 9px; color: #505050;") - line_grid.addWidget(start_lbl, row_idx * 2 + 1, 1, Qt.AlignHCenter | Qt.AlignTop) - line_grid.addWidget(end_lbl, row_idx * 2 + 1, 2, Qt.AlignHCenter | Qt.AlignTop) - - setattr(owner, start_attr, start_field) - setattr(owner, end_attr, end_field) - - _start_end_row( - "Distance from Left Edge of Bridge Cross\nSection (m):", - "custom_line_left_start", - "custom_line_left_end", - 0, - ) - _start_end_row( - "Distance from Center Line of Bearing\n(m):", - "custom_line_bearing_start", - "custom_line_bearing_end", - 1, - ) + line_layout = QVBoxLayout(line_widget) + line_layout.setContentsMargins(0, 8, 0, 0) + line_layout.setSpacing(10) + + line_left_start_field = schema["fields"]["line_left_start"] + line_left_end_field = schema["fields"]["line_left_end"] + + left_edge_row = QHBoxLayout() + left_edge_row.setSpacing(8) + + left_label = QLabel(line_left_start_field["label"]) + left_label.setStyleSheet(label_style) + left_label.setFixedWidth(label_width) + + left_start_container = QVBoxLayout() + left_start_container.setSpacing(4) + left_start_lbl = QLabel(line_left_start_field["sub_label"]) + left_start_lbl.setStyleSheet("font-size: 9px; color: #505050;") + left_start_lbl.setAlignment(Qt.AlignCenter) + owner.custom_line_left_start = QLineEdit() + owner.custom_line_left_start.setFixedWidth(line_left_start_field["field_width"]) + apply_field_style(owner.custom_line_left_start) + self._apply_validator(owner.custom_line_left_start, line_left_start_field.get("validator")) + left_start_container.addWidget(left_start_lbl) + left_start_container.addWidget(owner.custom_line_left_start) + + left_end_container = QVBoxLayout() + left_end_container.setSpacing(4) + left_end_lbl = QLabel(line_left_end_field["sub_label"]) + left_end_lbl.setStyleSheet("font-size: 9px; color: #505050;") + left_end_lbl.setAlignment(Qt.AlignCenter) + owner.custom_line_left_end = QLineEdit() + owner.custom_line_left_end.setFixedWidth(line_left_end_field["field_width"]) + apply_field_style(owner.custom_line_left_end) + self._apply_validator(owner.custom_line_left_end, line_left_end_field.get("validator")) + left_end_container.addWidget(left_end_lbl) + left_end_container.addWidget(owner.custom_line_left_end) + + left_edge_row.addWidget(left_label) + left_edge_row.addLayout(left_start_container) + left_edge_row.addLayout(left_end_container) + left_edge_row.addStretch() + line_layout.addLayout(left_edge_row) + + line_bearing_start_field = schema["fields"]["line_bearing_start"] + line_bearing_end_field = schema["fields"]["line_bearing_end"] + + bearing_row = QHBoxLayout() + bearing_row.setSpacing(8) + + bearing_label = QLabel(line_bearing_start_field["label"]) + bearing_label.setStyleSheet(label_style) + bearing_label.setFixedWidth(label_width) + + bearing_start_container = QVBoxLayout() + bearing_start_container.setSpacing(4) + bearing_start_lbl = QLabel(line_bearing_start_field["sub_label"]) + bearing_start_lbl.setStyleSheet("font-size: 9px; color: #505050;") + bearing_start_lbl.setAlignment(Qt.AlignCenter) + owner.custom_line_bearing_start = QLineEdit() + owner.custom_line_bearing_start.setFixedWidth(line_bearing_start_field["field_width"]) + apply_field_style(owner.custom_line_bearing_start) + self._apply_validator(owner.custom_line_bearing_start, line_bearing_start_field.get("validator")) + bearing_start_container.addWidget(bearing_start_lbl) + bearing_start_container.addWidget(owner.custom_line_bearing_start) + + bearing_end_container = QVBoxLayout() + bearing_end_container.setSpacing(4) + bearing_end_lbl = QLabel(line_bearing_end_field["sub_label"]) + bearing_end_lbl.setStyleSheet("font-size: 9px; color: #505050;") + bearing_end_lbl.setAlignment(Qt.AlignCenter) + owner.custom_line_bearing_end = QLineEdit() + owner.custom_line_bearing_end.setFixedWidth(line_bearing_end_field["field_width"]) + apply_field_style(owner.custom_line_bearing_end) + self._apply_validator(owner.custom_line_bearing_end, line_bearing_end_field.get("validator")) + bearing_end_container.addWidget(bearing_end_lbl) + bearing_end_container.addWidget(owner.custom_line_bearing_end) + + bearing_row.addWidget(bearing_label) + bearing_row.addLayout(bearing_start_container) + bearing_row.addLayout(bearing_end_container) + bearing_row.addStretch() + line_layout.addLayout(bearing_row) self.custom_load_stack.addWidget(line_widget) - form_grid.addWidget(self.custom_load_stack, 2, 0, 1, 3) - - input_layout.addLayout(form_grid) + input_layout.addWidget(self.custom_load_stack) save_btn = QPushButton("Save") - save_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + save_btn.setMinimumWidth(120) + save_btn.setFixedHeight(28) save_btn.setStyleSheet( - "QPushButton { background: #c8c8c8; border: 1px solid #a0a0a0; border-radius: 3px; padding: 5px 16px; font-weight: 600; font-size: 11px; color: #2a2a2a; }" - "QPushButton:hover { background: #d8d8d8; }" - "QPushButton:pressed { background: #b8b8b8; }" + "QPushButton { " + " background: #ffffff; " + " border: 1px solid #a0a0a0; " + " border-radius: 3px; " + " padding: 3px 8px; " + " font-size: 11px; " + " color: #2a2a2a; " + "} " + "QPushButton:hover { background: #f0f0f0; } " + "QPushButton:pressed { background: #e0e0e0; }" ) + + save_row = QHBoxLayout() - save_row.setContentsMargins(0, 4, 0, 0) - save_row.addWidget(save_btn) + save_row.setContentsMargins(0, 12, 0, 0) + + save_row.addStretch() + save_row.addWidget(save_btn) + save_row.addStretch() + input_layout.addLayout(save_row) + left_column.addWidget(input_card) list_card = owner._create_card() list_card.setStyleSheet( "QFrame { border: 1px solid #a0a0a0; border-radius: 4px; background-color: #ffffff; }" ) - list_card.setMinimumHeight(120) + list_card.setMinimumHeight(250) list_layout = QVBoxLayout(list_card) - list_layout.setContentsMargins(10, 10, 10, 10) + list_layout.setContentsMargins(4, 10, 10, 10) list_layout.setSpacing(8) list_title = QLabel("Custom Load Name") @@ -228,10 +334,9 @@ def _start_end_row(label_text, start_attr, end_attr, row_idx): controls_row = QHBoxLayout() controls_row.setSpacing(6) - owner.custom_add_btn = QPushButton("Add") owner.custom_edit_btn = QPushButton("Edit") owner.custom_delete_btn = QPushButton("Delete") - for btn in (owner.custom_add_btn, owner.custom_edit_btn, owner.custom_delete_btn): + for btn in (owner.custom_edit_btn, owner.custom_delete_btn): btn.setFixedWidth(55) btn.setStyleSheet( "QPushButton { background: #ffffff; border: 1px solid #a0a0a0; border-radius: 3px; padding: 3px 8px; font-size: 11px; color: #2a2a2a; }" @@ -241,16 +346,84 @@ def _start_end_row(label_text, start_attr, end_attr, row_idx): controls_row.addWidget(btn) controls_row.addStretch() list_layout.addLayout(controls_row) + # ---- Table wrapper to ensure visible borders ---- + table_frame = QFrame() + table_frame.setStyleSheet( + """ + QFrame { + border-left: 2px solid #7a7a7a; + border-right: 2px solid #7a7a7a; + border-bottom: 2px solid #7a7a7a; + border-top: 0px; + background: #ffffff; + } + """ + ) + + table_layout = QVBoxLayout(table_frame) + table_layout.setContentsMargins(0, 0, 0, 0) + table_layout.setSpacing(0) + + self.custom_load_table = QTableWidget(0, 4) + + self.custom_load_table.setFrameStyle(QFrame.NoFrame) + self.custom_load_table.setContentsMargins(0, 0, 0, 0) + self.custom_load_table.viewport().setContentsMargins(0, 0, 0, 0) + self.custom_load_table.setShowGrid(True) + + self.custom_load_table.setHorizontalHeaderLabels([ + "Load Case", + "Load Type", + "Distance from Left (m)", + "Distance from Bearing (m)" + ]) + + self.custom_load_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.custom_load_table.verticalHeader().setVisible(False) + self.custom_load_table.setSelectionBehavior(QTableWidget.SelectRows) + self.custom_load_table.setSelectionMode(QTableWidget.SingleSelection) + self.custom_load_table.setStyleSheet( + """ + QTableWidget { + background: #ffffff; + border: none; + } + + /* 🔥 REAL visible borders (this is the fix) */ + QTableWidget::viewport { + border-left: 3px solid #8f8f8f; + border-right: 2px solid #8f8f8f; + border-bottom: 2px solid #8f8f8f; + background: #ffffff; + } + + QTableWidget::item { + padding: 4px; + font-size: 10px; + color: #3a3a3a; + border-bottom: 1px solid #c0c0c0; + } + + QTableWidget::item:selected { + background: #d0e8ff; + } + + QHeaderView::section { + color: #2a2a2a; + background: #f0f0f0; + font-size: 10px; + font-weight: 600; + padding: 5px; + border: 1px solid #d0d0d0; + } + """ + ) - owner.custom_load_list_container = QWidget() - self.custom_load_list_layout = QVBoxLayout(owner.custom_load_list_container) - self.custom_load_list_layout.setContentsMargins(2, 2, 2, 2) - self.custom_load_list_layout.setSpacing(4) - self.custom_load_list_layout.addStretch() - list_layout.addWidget(owner.custom_load_list_container) + self.custom_load_table.setMinimumHeight(180) + + list_layout.addWidget(self.custom_load_table) left_column.addWidget(list_card) - left_column.addStretch() right_card = owner._create_card() right_card.setStyleSheet( @@ -274,62 +447,206 @@ def _start_end_row(label_text, start_attr, end_attr, row_idx): content_row.addWidget(right_card, 2) page_layout.addLayout(content_row) + scroll_area.setWidget(scroll_content) + main_layout.addWidget(scroll_area) + owner.custom_load_type_combo.currentTextChanged.connect(self._on_custom_load_type_changed) self._on_custom_load_type_changed(owner.custom_load_type_combo.currentText()) - owner.custom_add_btn.clicked.connect(self._on_add_custom_load) + save_btn.clicked.connect(self._on_save_custom_load) owner.custom_delete_btn.clicked.connect(self._on_delete_custom_load) - owner.custom_edit_btn.clicked.connect( - lambda: QMessageBox.information(self, "Edit", "Edit functionality will be added in a future update.") + owner.custom_edit_btn.clicked.connect(self._on_edit_custom_load) + owner.custom_load_case_combo.currentTextChanged.connect( + lambda t: self._on_load_case_changed(t) ) - self._refresh_custom_load_list() + self._refresh_custom_load_table() + + def _apply_validator(self, widget, validator_config): + if not validator_config: + return + + if validator_config["type"] == "double_range": + validator = QDoubleValidator( + validator_config["bottom"], + validator_config["top"], + validator_config.get("decimals", 2), + widget + ) + validator.setNotation(QDoubleValidator.StandardNotation) + widget.setValidator(validator) def _on_custom_load_type_changed(self, text): - if text.lower().startswith("point"): + if text == "Point": self.custom_load_stack.setCurrentIndex(0) - else: + else: self.custom_load_stack.setCurrentIndex(1) - def _refresh_custom_load_list(self): - if not hasattr(self, "custom_load_list_layout"): + def _on_load_case_changed(self, text): + is_custom = (text == "Custom") + self.owner.custom_load_case_name_input.setEnabled(is_custom) + if not is_custom: + self.owner.custom_load_case_name_input.clear() + + def _refresh_custom_load_table(self): + self.custom_load_table.setRowCount(0) + + for row_idx, load_data in enumerate(self.custom_load_items): + self.custom_load_table.insertRow(row_idx) + + load_case = load_data.get("load_case", "") + if load_case == "Custom": + load_case_display = load_data.get("custom_load_case_name", "custom") + else: + load_case_display = load_case + + item = QTableWidgetItem(load_case_display) + item.setFlags(item.flags() & ~Qt.ItemIsEditable) + self.custom_load_table.setItem(row_idx, 0, item) + + load_type = load_data.get("load_type", "") + item = QTableWidgetItem(load_type) + item.setFlags(item.flags() & ~Qt.ItemIsEditable) + self.custom_load_table.setItem(row_idx, 1, item) + + if load_type == "Point": + dist_left = load_data.get("point_left", "") + else: + start = load_data.get("line_left_start", "") + end = load_data.get("line_left_end", "") + dist_left = f"{start} - {end}" + + item = QTableWidgetItem(dist_left) + item.setFlags(item.flags() & ~Qt.ItemIsEditable) + self.custom_load_table.setItem(row_idx, 2, item) + + if load_type == "Point": + dist_bearing = load_data.get("point_bearing", "") + else: + start = load_data.get("line_bearing_start", "") + end = load_data.get("line_bearing_end", "") + dist_bearing = f"{start} - {end}" + + item = QTableWidgetItem(dist_bearing) + item.setFlags(item.flags() & ~Qt.ItemIsEditable) + self.custom_load_table.setItem(row_idx, 3, item) + + def _on_save_custom_load(self): + owner = self.owner + + load_data = { + "load_case": owner.custom_load_case_combo.currentText(), + "load_type": owner.custom_load_type_combo.currentText(), + } + + if owner.custom_load_case_combo.currentText() == "Custom": + load_data["custom_load_case_name"] = owner.custom_load_case_name_input.text().strip() + + if owner.custom_load_type_combo.currentText() == "Point": + load_data["point_left"] = owner.custom_point_left_input.text().strip() + load_data["point_bearing"] = owner.custom_point_bearing_input.text().strip() + else: + load_data["line_left_start"] = owner.custom_line_left_start.text().strip() + load_data["line_left_end"] = owner.custom_line_left_end.text().strip() + load_data["line_bearing_start"] = owner.custom_line_bearing_start.text().strip() + load_data["line_bearing_end"] = owner.custom_line_bearing_end.text().strip() + + if hasattr(self, '_editing_load_data') and self._editing_load_data: + for i, item in enumerate(self.custom_load_items): + if item == self._editing_load_data: + self.custom_load_items[i] = load_data + break + self._editing_load_data = None + else: + self.custom_load_items.append(load_data) + + self._clear_inputs() + self._refresh_custom_load_table() + + msg = QMessageBox(self) + msg.setIcon(QMessageBox.Information) + msg.setWindowTitle("Saved") + msg.setText("Custom load has been saved.") + msg.setStyleSheet("QLabel { color: black; }") + msg.exec() + + def _on_edit_custom_load(self): + selected_rows = self.custom_load_table.selectionModel().selectedRows() + + if len(selected_rows) == 0: + QMessageBox.information(self, "Edit", "Please select one custom load to edit.") return - while self.custom_load_list_layout.count(): - item = self.custom_load_list_layout.takeAt(0) - widget = item.widget() - if widget: - widget.deleteLater() - self.custom_load_checkboxes = [] - for name in self.custom_load_items: - row = QHBoxLayout() - row.setContentsMargins(2, 0, 2, 0) - row.setSpacing(4) - label = QLabel(name) - label.setStyleSheet( - "font-size: 11px; font-style: italic; color: #3a3a3a; background: transparent; border: none;" - ) - checkbox = QCheckBox() - row.addWidget(label) - row.addStretch() - row.addWidget(checkbox) - container = QWidget() - container.setLayout(row) - self.custom_load_list_layout.addWidget(container) - self.custom_load_checkboxes.append((name, checkbox)) - self.custom_load_list_layout.addStretch() - - def _on_add_custom_load(self): - next_index = len(self.custom_load_items) + 1 - new_name = f"Custom Load {next_index}" - self.custom_load_items.append(new_name) - self._refresh_custom_load_list() + + if len(selected_rows) > 1: + QMessageBox.information(self, "Edit", "Please select only one custom load to edit.") + return + + row_idx = selected_rows[0].row() + load_data = self.custom_load_items[row_idx] + self._editing_load_data = load_data + + owner = self.owner + + load_case = load_data.get("load_case", "DL") + index = owner.custom_load_case_combo.findText(load_case) + if index >= 0: + owner.custom_load_case_combo.setCurrentIndex(index) + + if load_case == "Custom": + owner.custom_load_case_name_input.setText(load_data.get("custom_load_case_name", "")) + + load_type = load_data.get("load_type", "Point") + index = owner.custom_load_type_combo.findText(load_type) + if index >= 0: + owner.custom_load_type_combo.setCurrentIndex(index) + + if load_type == "Point": + owner.custom_point_left_input.setText(load_data.get("point_left", "")) + owner.custom_point_bearing_input.setText(load_data.get("point_bearing", "")) + else: + owner.custom_line_left_start.setText(load_data.get("line_left_start", "")) + owner.custom_line_left_end.setText(load_data.get("line_left_end", "")) + owner.custom_line_bearing_start.setText(load_data.get("line_bearing_start", "")) + owner.custom_line_bearing_end.setText(load_data.get("line_bearing_end", "")) def _on_delete_custom_load(self): - if not getattr(self, "custom_load_checkboxes", None): - return - remaining = [name for name, cb in self.custom_load_checkboxes if not cb.isChecked()] - if len(remaining) == len(self.custom_load_checkboxes): - QMessageBox.information(self, "Delete", "Select at least one custom load to delete.") + selected_rows = self.custom_load_table.selectionModel().selectedRows() + + if len(selected_rows) == 0: + QMessageBox.information(self, "Delete", "Please select at least one custom load to delete.") return - self.custom_load_items[:] = remaining - self._refresh_custom_load_list() + + rows_to_delete = sorted([row.row() for row in selected_rows], reverse=True) + + for row_idx in rows_to_delete: + if 0 <= row_idx < len(self.custom_load_items): + del self.custom_load_items[row_idx] + + self._refresh_custom_load_table() + + msg = QMessageBox(self) + msg.setIcon(QMessageBox.Information) + msg.setWindowTitle("Deleted") + msg.setText(f"{len(rows_to_delete)} custom load(s) deleted.") + msg.setStyleSheet("QLabel { color: black; } QPushButton { color: black; }") + msg.exec() + + def _clear_inputs(self): + owner = self.owner + owner.custom_load_case_combo.setCurrentIndex(0) + owner.custom_load_case_name_input.clear() + owner.custom_load_type_combo.setCurrentIndex(0) + owner.custom_point_left_input.clear() + owner.custom_point_bearing_input.clear() + owner.custom_line_left_start.clear() + owner.custom_line_left_end.clear() + owner.custom_line_bearing_start.clear() + owner.custom_line_bearing_end.clear() + + def reset_defaults(self): + self._clear_inputs() + self.owner.custom_load_case_name_input.setEnabled(False) + self.custom_load_items.clear() + self._refresh_custom_load_table() + if hasattr(self, '_editing_load_data'): + self._editing_load_data = None \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/live_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/live_load_tab.py index 6d51708a4..f69b8133c 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/live_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/live_load_tab.py @@ -1,18 +1,25 @@ from PySide6.QtCore import Qt from PySide6.QtWidgets import ( - QWidget, - QVBoxLayout, - QHBoxLayout, - QLabel, - QCheckBox, - QComboBox, - QLineEdit, - QPushButton, - QScrollArea, - QFrame, + QWidget, QVBoxLayout, QHBoxLayout, QLabel, QCheckBox, QComboBox, + QLineEdit, QPushButton, QScrollArea, QFrame, QTableWidget, + QTableWidgetItem, QMessageBox, QDialog, QHeaderView, QStyledItemDelegate ) - +from PySide6.QtGui import QPainter, QPen from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.desktop.ui.dialogs.tabs.custom_vehicle_dialog import CustomVehicleDialog +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import LIVE_LOAD_TAB_SCHEMA + +class BorderDelegate(QStyledItemDelegate): + """Custom delegate to draw borders only between items, not after the last one""" + def paint(self, painter, option, index): + super().paint(painter, option, index) + if index.row() < index.model().rowCount() - 1: + painter.save() + pen = QPen(Qt.GlobalColor.lightGray) + pen.setWidth(1) + painter.setPen(pen) + painter.drawLine(option.rect.bottomLeft(), option.rect.bottomRight()) + painter.restore() class LiveLoadTab(QWidget): @@ -21,13 +28,32 @@ class LiveLoadTab(QWidget): def __init__(self, owner): super().__init__(owner) self.owner = owner + self.custom_vehicles = {} + self.has_real_custom_vehicle = False + self.schema = LIVE_LOAD_TAB_SCHEMA self._build_ui() def _build_ui(self): owner = self.owner - + schema = self.schema + + LABEL_MIN_WIDTH = schema.get("label_width", 220) + FIELD_WIDTH = schema.get("field_width", 180) + FIELD_HEIGHT = schema.get("field_height", 28) + self.setStyleSheet("background-color: #f5f5f5;") - page_layout = QVBoxLayout(self) + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(0, 0, 0, 0) + main_layout.setSpacing(0) + + scroll_area = QScrollArea() + scroll_area.setWidgetResizable(True) + scroll_area.setFrameShape(QFrame.NoFrame) + scroll_area.setStyleSheet("QScrollArea { background-color: #f5f5f5; border: none; }") + + scroll_content = QWidget() + scroll_content.setStyleSheet("background-color: #f5f5f5;") + page_layout = QVBoxLayout(scroll_content) page_layout.setContentsMargins(12, 12, 12, 12) page_layout.setSpacing(12) @@ -35,118 +61,197 @@ def _build_ui(self): content_row.setContentsMargins(0, 0, 0, 0) content_row.setSpacing(16) + # LEFT CARD left_card = owner._create_card() left_card.setStyleSheet("QFrame { border: 1px solid #b2b2b2; border-radius: 10px; background-color: #ffffff; }") left_card_layout = QVBoxLayout(left_card) left_card_layout.setContentsMargins(0, 0, 0, 0) left_card_layout.setSpacing(0) - # Wrap the tall content in a scroll area so long vehicle lists stay usable on smaller windows. - scroll = QScrollArea() - scroll.setWidgetResizable(True) - scroll.setFrameShape(QFrame.NoFrame) - scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - scroll.setStyleSheet("QScrollArea { border: none; background: transparent; } QScrollArea > QWidget > QWidget { background: transparent; }") - - scroll_content = QWidget() - scroll_content.setStyleSheet("background: #ffffff;") - left_layout = QVBoxLayout(scroll_content) + content_wrapper = QWidget() + content_wrapper.setStyleSheet("background-color: #ffffff;") + left_layout = QVBoxLayout(content_wrapper) left_layout.setContentsMargins(14, 14, 14, 14) - left_layout.setSpacing(8) + left_layout.setSpacing(12) title = QLabel("Live Load (LL) Inputs:") title.setStyleSheet("font-size: 12px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") left_layout.addWidget(title) - irc_vehicles = [ - "Class A", "Class 70R Wheeled", "Class 70R Tracked", - "Class AA Wheeled", "Class AA Tracked", "Class SV", "Fatigue Truck" - ] - owner._add_checkbox_section(left_layout, "Vehicles from IRC 6:", irc_vehicles) - - custom_header = QHBoxLayout() - custom_header.setSpacing(8) - custom_label = QLabel("Custom Vehicle:") - custom_label.setStyleSheet("font-size: 12px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") - custom_header.addWidget(custom_label) - custom_header.addStretch() - owner.custom_vehicle_add_button = QPushButton("Add") - owner.custom_vehicle_edit_button = QPushButton("Edit") - for btn in (owner.custom_vehicle_add_button, owner.custom_vehicle_edit_button): - btn.setFixedWidth(50) - btn.setStyleSheet( - "QPushButton { background: #ffffff; color: #2f2f2f; border: 1px solid #7a7a7a; border-radius: 4px; padding: 4px 10px; }" - "QPushButton:hover { background: #f0f0f0; }" - "QPushButton:pressed { background: #e0e0e0; }" - ) - custom_header.addWidget(btn) - left_layout.addLayout(custom_header) - - owner.custom_vehicle_checkboxes = [] - for index in range(2): - row_layout = QHBoxLayout() - row_layout.setContentsMargins(0, 0, 0, 0) - row_layout.setSpacing(8) - label = QLabel(f"Vehicle Name {index + 1}") - label.setStyleSheet("font-size: 11px; font-style: italic; color: #4b4b4b; background: transparent; border: none;") - checkbox = QCheckBox() - checkbox.setChecked(False) - row_layout.addWidget(label) - row_layout.addStretch() - row_layout.addWidget(checkbox) - left_layout.addLayout(row_layout) - owner.custom_vehicle_checkboxes.append(checkbox) - - braking_vehicles = irc_vehicles + ["Vehicle Name 1", "Vehicle Name 2"] - owner._add_checkbox_section(left_layout, "Braking Load from Vehicles:", braking_vehicles) - - input_width = 120 - - ecc_row = QHBoxLayout() - ecc_row.setSpacing(10) - ecc_label = QLabel("Eccentricity from top of Deck (m):") - ecc_label.setStyleSheet("font-size: 11px; font-weight: 600; color: #3a3a3a; background: transparent; border: none;") - ecc_label.setMinimumWidth(200) - owner.eccentricity_input = QLineEdit() - owner.eccentricity_input.setFixedWidth(input_width) - apply_field_style(owner.eccentricity_input) - ecc_row.addWidget(ecc_label) - ecc_row.addWidget(owner.eccentricity_input) - ecc_row.addStretch() - left_layout.addLayout(ecc_row) - - footpath_row = QHBoxLayout() - footpath_row.setSpacing(10) - footpath_label = QLabel("Footpath Pressure (kN/mm2 ):") - footpath_label.setStyleSheet("font-size: 11px; font-weight: 600; color: #3a3a3a; background: transparent; border: none;") - footpath_label.setMinimumWidth(200) - owner.footpath_mode_combo = QComboBox() - owner.footpath_mode_combo.addItems(["Automatic", "User-defined"]) - owner.footpath_mode_combo.setFixedWidth(input_width) - apply_field_style(owner.footpath_mode_combo) - footpath_row.addWidget(footpath_label) - footpath_row.addWidget(owner.footpath_mode_combo) - footpath_row.addStretch() - left_layout.addLayout(footpath_row) - - value_row = QHBoxLayout() - value_row.setContentsMargins(0, 0, 0, 0) - value_row.setSpacing(10) - value_spacer = QLabel("") - value_spacer.setMinimumWidth(200) - owner.footpath_value_input = QLineEdit() - owner.footpath_value_input.setPlaceholderText("Value") - owner.footpath_value_input.setFixedWidth(input_width) - apply_field_style(owner.footpath_value_input) - value_row.addWidget(value_spacer) - value_row.addWidget(owner.footpath_value_input) - value_row.addStretch() - left_layout.addLayout(value_row) + label_style = "font-size: 11px; font-weight: 600; color: #3a3a3a; background: transparent; border: none;" - left_layout.addStretch() + for section in schema.get("sections", []): + section_type = section.get("type") + + # IRC VEHICLES SECTION + if section_type == "checkbox_list" and section.get("id") == "irc_vehicles_section": + irc_box = QFrame() + irc_box.setStyleSheet("QFrame { border: 1px solid #9c9c9c; border-radius: 6px; background-color: #ffffff; padding: 0px; }") + irc_box_layout = QVBoxLayout(irc_box) + irc_box_layout.setContentsMargins(12, 12, 12, 12) + irc_box_layout.setSpacing(8) + + irc_title = QLabel(section.get("title", "")) + irc_title.setStyleSheet("font-size: 11px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") + irc_box_layout.addWidget(irc_title) + + owner.irc_vehicle_checkboxes = [] + owner.irc_vehicle_labels = [] + default_checked = section.get("default_checked", False) + + for vehicle in section.get("items", []): + row = QHBoxLayout() + row.setSpacing(10) + label = QLabel(vehicle) + label.setStyleSheet(label_style) + label.setMinimumWidth(LABEL_MIN_WIDTH) + checkbox = QCheckBox() + checkbox.setChecked(default_checked) + checkbox.setFixedHeight(FIELD_HEIGHT) + row.addWidget(label) + row.addWidget(checkbox) + row.addStretch() + irc_box_layout.addLayout(row) + owner.irc_vehicle_checkboxes.append(checkbox) + owner.irc_vehicle_labels.append(label) + + left_layout.addWidget(irc_box) + + # CUSTOM VEHICLE SECTION + elif section_type == "custom_vehicle_table" and section.get("id") == "custom_vehicle_section": + self.custom_vehicle_box = QFrame() + self.custom_vehicle_box.setStyleSheet("QFrame { border: 1px solid #9c9c9c; border-radius: 6px; background-color: #ffffff; padding: 0px; }") + custom_box_layout = QVBoxLayout(self.custom_vehicle_box) + custom_box_layout.setContentsMargins(12, 12, 12, 12) + custom_box_layout.setSpacing(8) + + header_row = QHBoxLayout() + header_row.setContentsMargins(0, 0, 0, 0) + header_row.setSpacing(10) + + header_label = QLabel(section.get("title", "")) + header_label.setStyleSheet("font-size: 11px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") + header_label.setMinimumWidth(LABEL_MIN_WIDTH) + header_row.addWidget(header_label) + + add_button_bind = section.get("add_button_bind") + if add_button_bind: + setattr(owner, add_button_bind, QPushButton("Add")) + add_button = getattr(owner, add_button_bind) + add_button.setStyleSheet("QPushButton { background-color: white; border: 1px solid #3a3a3a; border-radius: 3px; font-size: 10px; font-weight: 600; color: #3a3a3a; padding: 3px 8px; } QPushButton:hover { background-color: #f8f8f8; }") + add_button.setFixedHeight(FIELD_HEIGHT) + header_row.addWidget(add_button) + + header_row.addStretch() + custom_box_layout.addLayout(header_row) + + table_bind = section.get("bind") + if table_bind: + setattr(self, table_bind, QTableWidget(0, 4)) + self.custom_vehicle_table = getattr(self, table_bind) + + self.custom_vehicle_table.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.custom_vehicle_table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.custom_vehicle_table.verticalHeader().setDefaultSectionSize(FIELD_HEIGHT + 4) + self.custom_vehicle_table.verticalHeader().setMinimumSectionSize(FIELD_HEIGHT + 4) + self.custom_vehicle_table.horizontalHeader().setVisible(False) + self.custom_vehicle_table.verticalHeader().setVisible(False) + self.custom_vehicle_table.setEditTriggers(QTableWidget.NoEditTriggers) + self.custom_vehicle_table.setSelectionMode(QTableWidget.NoSelection) + self.custom_vehicle_table.setShowGrid(False) + self.custom_vehicle_table.setFrameShape(QFrame.NoFrame) + self.custom_vehicle_table.setContentsMargins(0, 0, 0, 0) - scroll.setWidget(scroll_content) - left_card_layout.addWidget(scroll) + header = self.custom_vehicle_table.horizontalHeader() + header.setSectionResizeMode(0, QHeaderView.Fixed) + header.setSectionResizeMode(1, QHeaderView.Fixed) + header.setSectionResizeMode(2, QHeaderView.Fixed) + header.setSectionResizeMode(3, QHeaderView.Fixed) + self.custom_vehicle_table.setColumnWidth(0, LABEL_MIN_WIDTH + 10) + self.custom_vehicle_table.setColumnWidth(1, 30) + self.custom_vehicle_table.setColumnWidth(2, 60) + self.custom_vehicle_table.setColumnWidth(3, 70) + + self.custom_vehicle_table.setStyleSheet("QTableWidget { border: none; background-color: transparent; margin-top: 4px; } QTableWidget::item { padding: 2px 0px; border: none; color: #3a3a3a; font-size: 11px; }") + + custom_box_layout.addWidget(self.custom_vehicle_table) + left_layout.addWidget(self.custom_vehicle_box) + self._update_custom_vehicle_box_height() + + remaining_box = QFrame() + remaining_box.setStyleSheet("QFrame { border: 1px solid #9c9c9c; border-radius: 6px; background-color: #ffffff; padding: 0px; }") + self.remaining_box_layout = QVBoxLayout(remaining_box) + self.remaining_box_layout.setContentsMargins(12, 12, 12, 12) + self.remaining_box_layout.setSpacing(8) + + braking_section = next((s for s in schema.get("sections", []) if s.get("id") == "braking_section"), None) + if braking_section: + self.braking_section_label = QLabel(braking_section.get("title", "")) + self.braking_section_label.setStyleSheet("font-size: 11px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") + self.remaining_box_layout.addWidget(self.braking_section_label) + + self.braking_checkboxes_container = QWidget() + self.braking_checkboxes_layout = QVBoxLayout(self.braking_checkboxes_container) + self.braking_checkboxes_layout.setContentsMargins(0, 0, 0, 0) + self.braking_checkboxes_layout.setSpacing(8) + self.remaining_box_layout.addWidget(self.braking_checkboxes_container) + self._update_braking_vehicles_section() + + ecc_section = next((s for s in schema.get("sections", []) if s.get("id") == "eccentricity"), None) + if ecc_section: + ecc_row = QHBoxLayout() + ecc_row.setSpacing(10) + ecc_label = QLabel(ecc_section.get("label", "")) + ecc_label.setStyleSheet(label_style) + ecc_label.setMinimumWidth(LABEL_MIN_WIDTH) + + bind_name = ecc_section.get("bind") + if bind_name: + setattr(owner, bind_name, QLineEdit()) + ecc_input = getattr(owner, bind_name) + ecc_input.setFixedSize(FIELD_WIDTH, FIELD_HEIGHT) + ecc_input.setText(ecc_section.get("default", "")) + apply_field_style(ecc_input) + + ecc_row.addWidget(ecc_label) + ecc_row.addWidget(ecc_input) + ecc_row.addStretch() + self.remaining_box_layout.addLayout(ecc_row) + + footpath_section = next((s for s in schema.get("sections", []) if s.get("id") == "footpath_pressure"), None) + if footpath_section: + footpath_row = QHBoxLayout() + footpath_row.setSpacing(10) + footpath_label = QLabel(footpath_section.get("label", "")) + footpath_label.setStyleSheet(label_style) + footpath_label.setMinimumWidth(LABEL_MIN_WIDTH) + + mode_bind = footpath_section.get("bind_mode") + if mode_bind: + setattr(owner, mode_bind, QComboBox()) + mode_combo = getattr(owner, mode_bind) + mode_combo.addItems(footpath_section.get("mode_choices", [])) + mode_combo.setCurrentText(footpath_section.get("default_mode", "")) + mode_combo.setFixedSize(footpath_section.get("mode_width", 120), FIELD_HEIGHT) + apply_field_style(mode_combo) + + value_bind = footpath_section.get("bind_value") + if value_bind: + setattr(owner, value_bind, QLineEdit()) + value_input = getattr(owner, value_bind) + value_input.setFixedSize(footpath_section.get("value_width", 80), FIELD_HEIGHT) + value_input.setText(footpath_section.get("default_value", "")) + apply_field_style(value_input) + + footpath_row.addWidget(footpath_label) + footpath_row.addWidget(mode_combo) + footpath_row.addWidget(value_input) + footpath_row.addStretch() + self.remaining_box_layout.addLayout(footpath_row) + + left_layout.addWidget(remaining_box) + left_layout.addStretch() + left_card_layout.addWidget(content_wrapper) right_card = owner._create_card() right_card.setStyleSheet("QFrame { border: 1px solid #9c9c9c; border-radius: 10px; background-color: #d4d4d4; }") @@ -156,22 +261,13 @@ def _build_ui(self): right_layout.setContentsMargins(16, 16, 16, 16) right_layout.setSpacing(10) - desc_label = QLabel("Description Box") + description = schema.get("description", {}) + desc_label = QLabel(description.get("title", "")) desc_label.setAlignment(Qt.AlignCenter) desc_label.setStyleSheet("font-size: 12px; font-weight: 700; color: #000000; background: transparent; border: none;") right_layout.addWidget(desc_label) - description_text = ( - "or on any other type of bridge unit shall be assumed to have the following value:\n\n" - "a) In the case of a single lane or a two lane bridge: twenty percent of the first train " - "load plus ten percent of the load of the succeeding trains or part thereof, the train " - "loads in one lane only being considered for the purpose of this subclause. Where the " - "entire first train is not on the full span, the braking force shall be taken as equal to " - "twenty percent of the loads actually on the span or continuous unit of spans.\n" - "b) In the case of bridges having more than two lanes: as in (a) above for the first two " - "lanes plus five percent of the loads on the lanes in excess of two." - ) - description_label = QLabel(description_text) + description_label = QLabel(description.get("text", "")) description_label.setWordWrap(True) description_label.setStyleSheet("font-size: 11px; color: #4b4b4b; background: transparent; border: none;") right_layout.addWidget(description_label) @@ -181,7 +277,236 @@ def _build_ui(self): content_row.addWidget(right_card, 2) page_layout.addLayout(content_row) - owner.custom_vehicle_add_button.clicked.connect(owner.show_custom_vehicle_dialog) - owner.custom_vehicle_edit_button.clicked.connect(owner.show_custom_vehicle_dialog) - owner.footpath_mode_combo.currentTextChanged.connect(owner._on_footpath_mode_changed) - owner._on_footpath_mode_changed(owner.footpath_mode_combo.currentText()) + scroll_area.setWidget(scroll_content) + main_layout.addWidget(scroll_area) + + owner.custom_vehicle_add_button.clicked.connect(self.show_custom_vehicle_dialog) + + footpath_section = next((s for s in schema.get("sections", []) if s.get("id") == "footpath_pressure"), None) + if footpath_section: + on_mode_change = footpath_section.get("on_mode_change") + if on_mode_change and hasattr(owner, on_mode_change): + owner.footpath_mode_combo.currentTextChanged.connect(getattr(owner, on_mode_change)) + getattr(owner, on_mode_change)(owner.footpath_mode_combo.currentText()) + + def _update_braking_vehicles_section(self): + """Update the braking vehicles checkbox section with IRC + custom vehicles""" + while self.braking_checkboxes_layout.count(): + item = self.braking_checkboxes_layout.takeAt(0) + if item.widget(): + item.widget().deleteLater() + elif item.layout(): + while item.layout().count(): + sub_item = item.layout().takeAt(0) + if sub_item.widget(): + sub_item.widget().deleteLater() + + irc_section = next((s for s in self.schema.get("sections", []) if s.get("id") == "irc_vehicles_section"), None) + irc_vehicles = irc_section.get("items", []) if irc_section else [] + custom_vehicle_names = list(self.custom_vehicles.keys()) if self.has_real_custom_vehicle else [] + all_braking_vehicles = irc_vehicles + custom_vehicle_names + + self.owner.braking_vehicle_checkboxes = [] + self.owner.braking_vehicle_labels = [] + label_style = "font-size: 11px; font-weight: 600; color: #3a3a3a; background: transparent; border: none;" + LABEL_MIN_WIDTH = self.schema.get("label_width", 220) + FIELD_HEIGHT = self.schema.get("field_height", 28) + braking_section = next((s for s in self.schema.get("sections", []) if s.get("id") == "braking_section"), None) + default_checked = braking_section.get("default_checked", True) if braking_section else True + + for vehicle in all_braking_vehicles: + row = QHBoxLayout() + row.setSpacing(10) + label = QLabel(vehicle) + label.setStyleSheet(label_style) + label.setMinimumWidth(LABEL_MIN_WIDTH) + checkbox = QCheckBox() + checkbox.setChecked(default_checked) + checkbox.setFixedHeight(FIELD_HEIGHT) + row.addWidget(label) + row.addWidget(checkbox) + row.addStretch() + self.braking_checkboxes_layout.addLayout(row) + self.owner.braking_vehicle_checkboxes.append(checkbox) + self.owner.braking_vehicle_labels.append(label) + + + def show_custom_vehicle_dialog(self): + dialog = CustomVehicleDialog(self) + if dialog.exec() == QDialog.Accepted: + vehicle_data = dialog.vehicle_data + self._add_custom_vehicle(vehicle_data) + + def _add_custom_vehicle(self, vehicle_data): + if not self.has_real_custom_vehicle: + self.custom_vehicle_table.setRowCount(0) + self.custom_vehicles.clear() + self.has_real_custom_vehicle = True + + name = vehicle_data["name"] + if name in self.custom_vehicles: + QMessageBox.warning(self, "Duplicate Vehicle", f"Custom vehicle '{name}' already exists.") + return + + self.custom_vehicles[name] = vehicle_data + row = self.custom_vehicle_table.rowCount() + self.custom_vehicle_table.insertRow(row) + FIELD_HEIGHT = self.schema.get("field_height", 28) + + name_item = QTableWidgetItem(name) + name_item.setTextAlignment(Qt.AlignVCenter | Qt.AlignLeft) + name_item.setFlags(Qt.ItemIsEnabled) + self.custom_vehicle_table.setItem(row, 0, name_item) + + checkbox = QCheckBox() + checkbox.setChecked(True) + checkbox_container = QWidget() + checkbox_layout = QHBoxLayout(checkbox_container) + checkbox_layout.setContentsMargins(0, 0, 0, 0) + checkbox_layout.setSpacing(0) + checkbox_layout.addWidget(checkbox, 0, Qt.AlignVCenter) + checkbox_layout.addStretch() + self.custom_vehicle_table.setCellWidget(row, 1, checkbox_container) + + edit_btn = QPushButton("Edit") + edit_btn.setFixedSize(48, FIELD_HEIGHT) + edit_btn.setStyleSheet("QPushButton { background-color: white; border: 1px solid #3a3a3a; border-radius: 3px; font-size: 10px; font-weight: 600; color: #3a3a3a; padding: 0px; } QPushButton:hover { background-color: #f8f8f8; }") + edit_btn.clicked.connect(lambda _, n=name: self._edit_custom_vehicle(n)) + edit_container = QWidget() + edit_layout = QHBoxLayout(edit_container) + edit_layout.setContentsMargins(0, 0, 0, 0) + edit_layout.setSpacing(0) + edit_layout.addWidget(edit_btn, 0, Qt.AlignVCenter) + edit_layout.addStretch() + self.custom_vehicle_table.setCellWidget(row, 2, edit_container) + + delete_btn = QPushButton("Delete") + delete_btn.setFixedSize(60, FIELD_HEIGHT) + delete_btn.setStyleSheet("QPushButton { background-color: white; border: 1px solid #3a3a3a; border-radius: 3px; font-size: 10px; font-weight: 600; color: #3a3a3a; padding: 0px; } QPushButton:hover { background-color: #f8f8f8; }") + delete_btn.clicked.connect(lambda _, n=name: self._delete_custom_vehicle(n)) + delete_container = QWidget() + delete_layout = QHBoxLayout(delete_container) + delete_layout.setContentsMargins(0, 0, 0, 0) + delete_layout.setSpacing(0) + delete_layout.addWidget(delete_btn, 0, Qt.AlignVCenter) + delete_layout.addStretch() + self.custom_vehicle_table.setCellWidget(row, 3, delete_container) + + self.custom_vehicle_table.setRowHeight(row, FIELD_HEIGHT + 4) + self._update_custom_vehicle_table_height() + self._update_custom_vehicle_box_height() + self._update_braking_vehicles_section() + + def _update_row_borders(self): + """Force table to repaint with updated borders""" + self.custom_vehicle_table.viewport().update() + + def _edit_custom_vehicle(self, name): + vehicle_data = self.custom_vehicles[name] + dialog = CustomVehicleDialog(self) + dialog.load_vehicle_data(vehicle_data) + + if dialog.exec() == QDialog.Accepted: + new_data = dialog.vehicle_data + new_name = new_data["name"] + + if new_name != name: + if new_name in self.custom_vehicles: + QMessageBox.warning(self, "Duplicate Vehicle", f"Custom vehicle '{new_name}' already exists.") + return + + self.custom_vehicles.pop(name) + self.custom_vehicles[new_name] = new_data + + for row in range(self.custom_vehicle_table.rowCount()): + item = self.custom_vehicle_table.item(row, 0) + if item and item.text() == name: + item.setText(new_name) + break + + self._update_braking_vehicles_section() + else: + self.custom_vehicles[name] = new_data + + def _delete_custom_vehicle(self, name): + msg = QMessageBox(self) + msg.setWindowTitle("Delete Vehicle") + msg.setText(f"Delete custom vehicle '{name}'?") + msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) + msg.setStyleSheet("QLabel { color: black; font-size: 12px; } QPushButton { min-width: 70px; font-size: 11px; }") + reply = msg.exec() + + if reply == QMessageBox.Yes: + self.custom_vehicles.pop(name, None) + + for row in range(self.custom_vehicle_table.rowCount()): + item = self.custom_vehicle_table.item(row, 0) + if item and item.text() == name: + self.custom_vehicle_table.removeRow(row) + break + + if self.custom_vehicle_table.rowCount() == 0: + self.has_real_custom_vehicle = False + else: + self._update_row_borders() + + self._update_custom_vehicle_table_height() + self._update_custom_vehicle_box_height() + self._update_braking_vehicles_section() + + def reset_defaults(self): + """Reset Live Load inputs to schema default values""" + irc_section = next((s for s in self.schema.get("sections", []) if s.get("id") == "irc_vehicles_section"), None) + if irc_section: + default_checked = irc_section.get("default_checked", True) + for checkbox in self.owner.irc_vehicle_checkboxes: + checkbox.setChecked(default_checked) + + ecc_section = next((s for s in self.schema.get("sections", []) if s.get("id") == "eccentricity"), None) + if ecc_section: + self.owner.eccentricity_input.setText(ecc_section.get("default", "")) + + footpath_section = next((s for s in self.schema.get("sections", []) if s.get("id") == "footpath_pressure"), None) + if footpath_section: + self.owner.footpath_mode_combo.setCurrentText(footpath_section.get("default_mode", "")) + self.owner.footpath_value_input.setText(footpath_section.get("default_value", "")) + self.owner.footpath_value_input.setDisabled(True) + + self.custom_vehicle_table.setRowCount(0) + self.custom_vehicles.clear() + self.has_real_custom_vehicle = False + self._update_custom_vehicle_table_height() + self._update_custom_vehicle_box_height() + self._update_braking_vehicles_section() + + braking_section = next((s for s in self.schema.get("sections", []) if s.get("id") == "braking_section"), None) + if braking_section: + default_checked = braking_section.get("default_checked", True) + for checkbox in self.owner.braking_vehicle_checkboxes: + checkbox.setChecked(default_checked) + + def _update_custom_vehicle_table_height(self): + rows = self.custom_vehicle_table.rowCount() + if rows == 0: + self.custom_vehicle_table.setFixedHeight(0) + return + + total_height = 0 + for row in range(rows): + total_height += self.custom_vehicle_table.rowHeight(row) + total_height += 4 + total_height = min(total_height, 150) + self.custom_vehicle_table.setFixedHeight(total_height) + + def _update_custom_vehicle_box_height(self): + """Update the custom vehicle box height based on content""" + rows = self.custom_vehicle_table.rowCount() + FIELD_HEIGHT = self.schema.get("field_height", 28) + base_height = FIELD_HEIGHT + 24 + 8 + + if rows == 0: + self.custom_vehicle_box.setFixedHeight(base_height) + else: + table_height = self.custom_vehicle_table.height() + total_height = base_height + table_height + self.custom_vehicle_box.setFixedHeight(total_height) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py index 03089c797..f91ec3773 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py @@ -17,21 +17,17 @@ from PySide6.QtWidgets import QHeaderView from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style - +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( + LOAD_COMBINATION_TAB_SCHEMA, +) class LoadCombinationTab(QWidget): - """Load combination editor with add/edit modal.""" def __init__(self, owner): super().__init__(owner) self.owner = owner - self.load_combo_items = getattr(owner, "load_combo_items", []) or [ - {"name": "DL + LL", "items": [{"case": "DL", "factor": "1.0"}, {"case": "LL", "factor": "1.0"}]}, - { - "name": "1.35 DL + 1.5 LL", - "items": [{"case": "DL", "factor": "1.35"}, {"case": "LL", "factor": "1.5"}], - }, - ] + self.load_combo_items = getattr(owner, "load_combo_items", []) owner.load_combo_items = self.load_combo_items self._build_ui() @@ -48,7 +44,6 @@ def _build_ui(self): content_row.setSpacing(16) heading_style = "font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;" - label_style = "font-size: 11px; color: #3a3a3a; background: transparent; border: none;" left_card = owner._create_card() left_card.setStyleSheet( @@ -58,56 +53,66 @@ def _build_ui(self): left_layout.setContentsMargins(16, 16, 16, 16) left_layout.setSpacing(10) - title = QLabel("Inputs:") + title = QLabel("Load Combination Inputs") title.setStyleSheet(heading_style) left_layout.addWidget(title) - combo_label = QLabel("Load Combination") - combo_label.setStyleSheet( - "font-size: 11px; font-style: italic; color: #2b2b2b; background: transparent; border: none;" - ) - left_layout.addWidget(combo_label) - - auto_row = QHBoxLayout() - auto_row.setSpacing(8) - auto_row.setContentsMargins(0, 0, 0, 0) - auto_label = QLabel("Auto include all IRC 6 Load Combinations") - auto_label.setStyleSheet(label_style) - owner.auto_include_checkbox = QCheckBox() - auto_row.addWidget(auto_label) - auto_row.addWidget(owner.auto_include_checkbox) - auto_row.addStretch() - left_layout.addLayout(auto_row) - - controls_row = QHBoxLayout() - controls_row.setSpacing(6) - owner.load_combo_add_btn = QPushButton("Add") - owner.load_combo_edit_btn = QPushButton("Edit") - owner.load_combo_delete_btn = QPushButton("Delete") - for btn in (owner.load_combo_add_btn, owner.load_combo_edit_btn, owner.load_combo_delete_btn): - btn.setFixedWidth(60) - btn.setStyleSheet( - "QPushButton { background: #ffffff; border: 1px solid #a0a0a0; border-radius: 3px; padding: 4px 10px; font-size: 11px; color: #2a2a2a; }" - "QPushButton:hover { background: #f0f0f0; }" - "QPushButton:pressed { background: #e0e0e0; }" - ) - controls_row.addWidget(btn) - controls_row.addStretch() + controls_row = self._build_controls_row() left_layout.addLayout(controls_row) - list_card = QFrame() - list_card.setStyleSheet( - "QFrame { border: 1px solid #a0a0a0; border-radius: 4px; background-color: #ffffff; }" - ) - list_layout = QVBoxLayout(list_card) - list_layout.setContentsMargins(10, 10, 10, 10) - list_layout.setSpacing(6) - - self.load_combo_list_layout = QVBoxLayout() - self.load_combo_list_layout.setContentsMargins(2, 2, 2, 2) - self.load_combo_list_layout.setSpacing(6) - list_layout.addLayout(self.load_combo_list_layout) - left_layout.addWidget(list_card) + self.load_combo_table = QTableWidget(0, 3) + self.load_combo_table.setHorizontalHeaderLabels(["Sr. No.", "Combination Name", "Include"]) + self.load_combo_table.verticalHeader().setDefaultSectionSize(40) + + self.load_combo_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed) + self.load_combo_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) + self.load_combo_table.horizontalHeader().setSectionResizeMode(2, QHeaderView.Fixed) + self.load_combo_table.setColumnWidth(0, 80) + self.load_combo_table.setColumnWidth(2, 100) + + self.load_combo_table.verticalHeader().setVisible(False) + self.load_combo_table.horizontalHeader().setStretchLastSection(True) + self.load_combo_table.setSelectionBehavior(QTableWidget.SelectRows) + self.load_combo_table.setSelectionMode(QTableWidget.SingleSelection) + self.load_combo_table.setShowGrid(True) + + self.load_combo_table.setStyleSheet(""" + QTableWidget { + background-color: #ffffff; + border: 1px solid #a0a0a0; + border-radius: 4px; + gridline-color: #d0d0d0; + selection-background-color: #e3f2fd; + } + QTableWidget::item { + padding: 8px; + color: #2a2a2a; + font-size: 11px; + border: none; + } + QTableWidget::item:selected { + background-color: #e3f2fd; + color: #1a1a1a; + } + QHeaderView::section { + background-color: #f8f8f8; + color: #2a2a2a; + font-size: 11px; + font-weight: 600; + padding: 8px; + border: none; + border-right: 1px solid #d0d0d0; + border-bottom: 1px solid #d0d0d0; + } + QHeaderView::section:last { + + } + """) + self.load_combo_table.setFixedHeight(180) + self.load_combo_table.setMaximumHeight(260) + self.load_combo_table.setAlternatingRowColors(False) + + left_layout.addWidget(self.load_combo_table) left_layout.addStretch() right_card = owner._create_card() @@ -134,169 +139,359 @@ def _build_ui(self): owner.load_combo_edit_btn.clicked.connect(self._on_edit_load_combo) owner.load_combo_delete_btn.clicked.connect(self._on_delete_load_combo) - self._refresh_load_combo_list() + self._refresh_load_combo_table() + + def _build_controls_row(self): + schema = LOAD_COMBINATION_TAB_SCHEMA + controls_row = QHBoxLayout() + controls_row.setSpacing(6) + + button_style = ( + "QPushButton { background: #ffffff; border: 1px solid #a0a0a0; border-radius: 3px; " + "padding: 4px 10px; font-size: 11px; color: #2a2a2a; }" + "QPushButton:hover { background: #f0f0f0; }" + "QPushButton:pressed { background: #e0e0e0; }" + ) + + for btn_config in schema["controls"]: + if btn_config["label"] == "Default": + continue + btn = QPushButton(btn_config["label"]) + btn.setFixedWidth(btn_config["width"]) + btn.setStyleSheet(button_style) + setattr(self.owner, btn_config["bind"], btn) + controls_row.addWidget(btn) + + controls_row.addStretch() + return controls_row + + def _get_default_combos(self): + return [] - def _refresh_load_combo_list(self): - if not hasattr(self, "load_combo_list_layout"): + def _refresh_load_combo_table(self): + if not hasattr(self, "load_combo_table"): return - while self.load_combo_list_layout.count(): - item = self.load_combo_list_layout.takeAt(0) - widget = item.widget() - if widget: - widget.deleteLater() - self.load_combo_checkboxes = [] + + self.load_combo_table.setRowCount(0) + if not self.load_combo_items: - empty_lbl = QLabel("No combinations added yet.") - empty_lbl.setStyleSheet("font-size: 11px; color: #6a6a6a; background: transparent; border: none;") - self.load_combo_list_layout.addWidget(empty_lbl) - self.load_combo_list_layout.addStretch() + self.load_combo_table.setFixedHeight(180) return - for combo in self.load_combo_items: - row = QHBoxLayout() - row.setContentsMargins(2, 0, 2, 0) - row.setSpacing(6) - label = QLabel(combo.get("name", "Combination")) - label.setStyleSheet( - "font-size: 11px; font-style: italic; color: #3a3a3a; background: transparent; border: none;" - ) + + for idx, combo in enumerate(self.load_combo_items): + row_idx = self.load_combo_table.rowCount() + self.load_combo_table.insertRow(row_idx) + + sr_no_item = QTableWidgetItem(str(idx + 1)) + sr_no_item.setTextAlignment(Qt.AlignCenter) + sr_no_item.setFlags(sr_no_item.flags() & ~Qt.ItemIsEditable) + self.load_combo_table.setItem(row_idx, 0, sr_no_item) + + name_item = QTableWidgetItem(combo.get("name", "Combination")) + name_item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter) + name_item.setFlags(name_item.flags() & ~Qt.ItemIsEditable) + self.load_combo_table.setItem(row_idx, 1, name_item) + + checkbox_widget = QWidget() + checkbox_widget.setStyleSheet("background-color: transparent;") + checkbox_layout = QHBoxLayout(checkbox_widget) + checkbox_layout.setContentsMargins(0, 0, 0, 0) + checkbox_layout.setSpacing(0) + checkbox_layout.setAlignment(Qt.AlignCenter) + checkbox = QCheckBox() - row.addWidget(label) - row.addStretch() - row.addWidget(checkbox) - container = QWidget() - container.setLayout(row) - self.load_combo_list_layout.addWidget(container) - self.load_combo_checkboxes.append((combo, checkbox)) - - self.load_combo_list_layout.addStretch() - - def _get_selected_load_combos(self): - if not getattr(self, "load_combo_checkboxes", None): - return [] - return [idx for idx, (_, cb) in enumerate(self.load_combo_checkboxes) if cb.isChecked()] + checkbox.setChecked(combo.get("included", False)) + checkbox.setFixedHeight(28) + checkbox.setStyleSheet(""" + QCheckBox { + spacing: 0px; + background-color: transparent; + } + """) + checkbox.setChecked(combo.get("included", False)) + checkbox_layout.addWidget(checkbox) + + self.load_combo_table.setCellWidget(row_idx, 2, checkbox_widget) + + + row_height = self.load_combo_table.verticalHeader().defaultSectionSize() + header_height = self.load_combo_table.horizontalHeader().height() + row_count = self.load_combo_table.rowCount() + + extra = 8 + new_height = header_height + (row_count * row_height) + extra + new_height = max(180, min(new_height, 260)) + self.load_combo_table.setFixedHeight(new_height) + + + def _get_selected_load_combo_index(self): + current_row = self.load_combo_table.currentRow() + if current_row < 0 or current_row >= len(self.load_combo_items): + return None + return current_row + + def _get_included_load_combos(self): + included = [] + for row_idx in range(self.load_combo_table.rowCount()): + checkbox_widget = self.load_combo_table.cellWidget(row_idx, 2) + if checkbox_widget: + checkbox = checkbox_widget.findChild(QCheckBox) + if checkbox and checkbox.isChecked(): + included.append(row_idx) + return included def _on_add_load_combo(self): data = self._open_load_combo_dialog() if data: self.load_combo_items.append(data) - self._refresh_load_combo_list() + self._refresh_load_combo_table() def _on_edit_load_combo(self): - selected = self._get_selected_load_combos() - if not selected: + index = self._get_selected_load_combo_index() + if index is None: return - if len(selected) > 1: - return - index = selected[0] + current = self.load_combo_items[index] data = self._open_load_combo_dialog(existing=current) if data: self.load_combo_items[index] = data - self._refresh_load_combo_list() + self._refresh_load_combo_table() def _on_delete_load_combo(self): - selected = self._get_selected_load_combos() - if not selected: + index = self._get_selected_load_combo_index() + if index is None: return - self.load_combo_items = [item for idx, item in enumerate(self.load_combo_items) if idx not in selected] + + self.load_combo_items.pop(index) self.owner.load_combo_items = self.load_combo_items - self._refresh_load_combo_list() + self._refresh_load_combo_table() def _open_load_combo_dialog(self, existing=None): dialog = QDialog(self) + dialog.setObjectName("LoadCombinationDialog") + dialog.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog) dialog.setModal(True) - dialog.setWindowTitle("Edit Load Combination" if existing else "Add Load Combination") - dialog.setMinimumWidth(520) - - layout = QVBoxLayout(dialog) - layout.setContentsMargins(14, 14, 14, 14) - layout.setSpacing(10) + dialog.setMinimumWidth(600) + dialog.setMinimumHeight(500) + + main_layout = QVBoxLayout(dialog) + main_layout.setContentsMargins(1, 1, 1, 1) + main_layout.setSpacing(0) + + title_bar = CustomTitleBar() + title_bar.setObjectName("LoadComboTitleBar") + title_bar.setTitle("Edit Load Combination" if existing else "Add Load Combination") + main_layout.addWidget(title_bar) + + separator = QFrame() + separator.setFixedHeight(1) + separator.setStyleSheet("background-color: rgba(144, 175, 19, 85);") + main_layout.addWidget(separator) + + content_widget = QWidget(dialog) + main_layout.addWidget(content_widget, 1) + + dialog.setStyleSheet(""" + QDialog#LoadCombinationDialog { + background-color: #ffffff; + border: 1px solid rgba(144, 175, 19, 140); + border-radius: 4px; + } + """) + + title_bar.setStyleSheet(""" + QWidget#LoadComboTitleBar { + background-color: transparent; + } + QToolButton#CloseButton { + background-color: transparent; + border: none; + color: #2b2b2b; + font-size: 16px; + } + QToolButton#CloseButton:hover { + background-color: #e81123; + color: white; + } + QToolButton#CloseButton:pressed { + background-color: #c50d1c; + } + """) + + layout = QVBoxLayout(content_widget) + layout.setContentsMargins(16, 16, 16, 16) + layout.setSpacing(8) label_style = "font-size: 11px; color: #2a2a2a; background: transparent; border: none;" name_row = QHBoxLayout() - name_row.setSpacing(8) + name_row.setSpacing(10) name_label = QLabel("Combination Name:") name_label.setStyleSheet(label_style) + name_label.setFixedWidth(140) name_input = QLineEdit() - name_input.setMinimumWidth(220) + name_input.setMinimumWidth(120) apply_field_style(name_input) name_row.addWidget(name_label) - name_row.addWidget(name_input, 1) + name_row.addWidget(name_input) + name_row.addStretch() layout.addLayout(name_row) - fields_row = QGridLayout() - fields_row.setContentsMargins(0, 0, 0, 0) - fields_row.setHorizontalSpacing(10) - fields_row.setVerticalSpacing(6) + input_section = QFrame() + input_section.setStyleSheet( + "QFrame { border: 1px solid #c0c0c0; border-radius: 4px; background-color: #f8f8f8; padding: 8px; }" + ) + input_section_layout = QVBoxLayout(input_section) + input_section_layout.setContentsMargins(12, 12, 12, 12) + input_section_layout.setSpacing(10) + + fields_row = QHBoxLayout() + fields_row.setSpacing(12) load_case_label = QLabel("Load Case:") load_case_label.setStyleSheet(label_style) load_case_combo = QComboBox() load_case_combo.addItems(["DL", "SIDL", "LL", "WL", "EL", "IMF", "TL"]) + load_case_combo.setMinimumWidth(100) apply_field_style(load_case_combo) factor_label = QLabel("Partial Safety Factor:") factor_label.setStyleSheet(label_style) factor_input = QLineEdit() factor_input.setText("1.0") - factor_input.setMinimumWidth(80) + factor_input.setFixedWidth(100) apply_field_style(factor_input) - fields_row.addWidget(load_case_label, 0, 0, Qt.AlignLeft) - fields_row.addWidget(load_case_combo, 0, 1, Qt.AlignLeft) - fields_row.addWidget(factor_label, 0, 2, Qt.AlignLeft) - fields_row.addWidget(factor_input, 0, 3, Qt.AlignLeft) - fields_row.setColumnStretch(4, 1) - layout.addLayout(fields_row) + fields_row.addWidget(load_case_label) + fields_row.addWidget(load_case_combo) + fields_row.addSpacing(20) + fields_row.addWidget(factor_label) + fields_row.addWidget(factor_input) + fields_row.addStretch() - table_row = QHBoxLayout() - table_row.setSpacing(8) + input_section_layout.addLayout(fields_row) + layout.addWidget(input_section) + + table_container = QFrame() + table_container.setStyleSheet( + "QFrame { border: 1px solid #c0c0c0; border-radius: 4px; background-color: #ffffff; }" + ) + table_container_layout = QHBoxLayout(table_container) + table_container_layout.setContentsMargins(10, 10, 10, 10) + table_container_layout.setSpacing(10) table = QTableWidget(0, 3) - table.setHorizontalHeaderLabels(["S.No", "Load Case", "Partial Safety Factor"]) - table.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeToContents) + table.setHorizontalHeaderLabels(["Sr.No", "Load Case", "Partial Safety Factor"]) + + table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed) table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) - table.horizontalHeader().setSectionResizeMode(2, QHeaderView.ResizeToContents) + table.horizontalHeader().setSectionResizeMode(2, QHeaderView.Stretch) + table.setColumnWidth(0, 60) + table.verticalHeader().setVisible(False) - table.setStyleSheet( - "QTableWidget { background: #ffffff; } QHeaderView::section { color: #2a2a2a; background: #efefef; font-size: 10px; }" - ) - table.setMinimumHeight(220) + table.setSelectionBehavior(QTableWidget.SelectRows) + table.setSelectionMode(QTableWidget.SingleSelection) + + table.setStyleSheet(""" + QTableWidget { + background-color: #ffffff; + border: 1px solid #d0d0d0; + gridline-color: #e0e0e0; + selection-background-color: #d0e8ff; + } + QTableWidget::item { + padding: 6px; + color: #2a2a2a; + font-size: 11px; + border-bottom: 1px solid #e8e8e8; + } + QTableWidget::item:selected { + background-color: #d0e8ff; + color: #1a1a1a; + } + QHeaderView::section { + background-color: #f0f0f0; + color: #2a2a2a; + font-size: 11px; + font-weight: 600; + padding: 8px; + border: 1px solid #d0d0d0; + border-bottom: 2px solid #a0a0a0; + } + QHeaderView::section:horizontal { + border-top: none; + } + """) + + table.setMinimumHeight(250) + table.setAlternatingRowColors(True) button_col = QVBoxLayout() - button_col.setSpacing(6) + button_col.setSpacing(8) add_btn = QPushButton("Add") modify_btn = QPushButton("Modify") delete_btn = QPushButton("Delete") + for btn in (add_btn, modify_btn, delete_btn): - btn.setFixedWidth(80) + btn.setFixedWidth(90) + btn.setFixedHeight(32) btn.setStyleSheet( - "QPushButton { background: #ffffff; border: 1px solid #a0a0a0; border-radius: 3px; padding: 5px 12px; font-size: 11px; color: #2a2a2a; }" - "QPushButton:hover { background: #f0f0f0; }" - "QPushButton:pressed { background: #e0e0e0; }" + "QPushButton { " + " background: #ffffff; " + " border: 1px solid #a0a0a0; " + " border-radius: 4px; " + " padding: 6px 12px; " + " font-size: 11px; " + " font-weight: 500; " + " color: #2a2a2a; " + "}" + "QPushButton:hover { " + " background: #f0f0f0; " + " border: 1px solid #808080; " + "}" + "QPushButton:pressed { " + " background: #e0e0e0; " + "}" ) button_col.addWidget(btn) + button_col.addStretch() - table_row.addWidget(table, 1) - table_row.addLayout(button_col) - layout.addLayout(table_row) + table_container_layout.addWidget(table, 1) + table_container_layout.addLayout(button_col) + + layout.addWidget(table_container) action_row = QHBoxLayout() - action_row.setContentsMargins(0, 4, 0, 0) + action_row.setContentsMargins(0, 8, 0, 0) action_row.addStretch() cancel_btn = QPushButton("Cancel") save_btn = QPushButton("Save") + for btn in (cancel_btn, save_btn): - btn.setFixedWidth(80) + btn.setFixedWidth(100) + btn.setFixedHeight(36) btn.setStyleSheet( - "QPushButton { background: #c8c8c8; border: 1px solid #a0a0a0; border-radius: 3px; padding: 6px 14px; font-weight: 600; font-size: 11px; color: #2a2a2a; }" - "QPushButton:hover { background: #d8d8d8; }" - "QPushButton:pressed { background: #b8b8b8; }" + "QPushButton { " + " background: #c8c8c8; " + " border: 1px solid #a0a0a0; " + " border-radius: 4px; " + " padding: 8px 16px; " + " font-weight: 600; " + " font-size: 11px; " + " color: #2a2a2a; " + "}" + "QPushButton:hover { " + " background: #d8d8d8; " + "}" + "QPushButton:pressed { " + " background: #b8b8b8; " + "}" ) + action_row.addWidget(cancel_btn) + action_row.addSpacing(8) action_row.addWidget(save_btn) layout.addLayout(action_row) @@ -305,24 +500,57 @@ def refresh_row_numbers(): item = table.item(row_idx, 0) if item: item.setText(str(row_idx + 1)) + else: + new_item = QTableWidgetItem(str(row_idx + 1)) + new_item.setTextAlignment(Qt.AlignCenter) + new_item.setFlags(new_item.flags() & ~Qt.ItemIsEditable) + table.setItem(row_idx, 0, new_item) def add_row(): case_text = load_case_combo.currentText().strip() factor_text = factor_input.text().strip() or "1.0" + + if not case_text: + return + row_idx = table.rowCount() table.insertRow(row_idx) - table.setItem(row_idx, 0, QTableWidgetItem(str(row_idx + 1))) - table.setItem(row_idx, 1, QTableWidgetItem(case_text)) - table.setItem(row_idx, 2, QTableWidgetItem(factor_text)) + + s_no_item = QTableWidgetItem(str(row_idx + 1)) + s_no_item.setTextAlignment(Qt.AlignCenter) + s_no_item.setFlags(s_no_item.flags() & ~Qt.ItemIsEditable) + table.setItem(row_idx, 0, s_no_item) + + case_item = QTableWidgetItem(case_text) + case_item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter) + case_item.setFlags(case_item.flags() & ~Qt.ItemIsEditable) + table.setItem(row_idx, 1, case_item) + + factor_item = QTableWidgetItem(factor_text) + factor_item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter) + factor_item.setFlags(factor_item.flags() & ~Qt.ItemIsEditable) + table.setItem(row_idx, 2, factor_item) + refresh_row_numbers() + factor_input.setText("1.0") def modify_row(): row_idx = table.currentRow() if row_idx < 0: return - table.setItem(row_idx, 1, QTableWidgetItem(load_case_combo.currentText().strip())) - table.setItem(row_idx, 2, QTableWidgetItem(factor_input.text().strip() or "1.0")) - refresh_row_numbers() + + case_text = load_case_combo.currentText().strip() + factor_text = factor_input.text().strip() or "1.0" + + case_item = QTableWidgetItem(case_text) + case_item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter) + case_item.setFlags(case_item.flags() & ~Qt.ItemIsEditable) + table.setItem(row_idx, 1, case_item) + + factor_item = QTableWidgetItem(factor_text) + factor_item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter) + factor_item.setFlags(factor_item.flags() & ~Qt.ItemIsEditable) + table.setItem(row_idx, 2, factor_item) def delete_row(): row_idx = table.currentRow() @@ -331,29 +559,51 @@ def delete_row(): table.removeRow(row_idx) refresh_row_numbers() + def on_table_selection_changed(): + row_idx = table.currentRow() + if row_idx >= 0: + case_item = table.item(row_idx, 1) + factor_item = table.item(row_idx, 2) + + if case_item: + load_case_combo.setCurrentText(case_item.text()) + if factor_item: + factor_input.setText(factor_item.text()) + def load_existing(): if not existing: return + name_input.setText(existing.get("name", "")) + for item in existing.get("items", []): case_text = item.get("case", "") - factor_text = item.get("factor", "") + factor_text = item.get("factor", "1.0") + if case_text: load_case_combo.setCurrentText(case_text) - factor_input.setText(factor_text or "1.0") - add_row() + factor_input.setText(factor_text) + add_row() def on_save(): name_text = name_input.text().strip() or "Load Combination" rows = [] + for row_idx in range(table.rowCount()): case_item = table.item(row_idx, 1) factor_item = table.item(row_idx, 2) + if not case_item or not factor_item: continue - rows.append({"case": case_item.text(), "factor": factor_item.text()}) + + rows.append({ + "case": case_item.text(), + "factor": factor_item.text() + }) + if not rows: return + dialog.accept() dialog.result_data = {"name": name_text, "items": rows} @@ -362,9 +612,10 @@ def on_save(): delete_btn.clicked.connect(delete_row) save_btn.clicked.connect(on_save) cancel_btn.clicked.connect(dialog.reject) + table.itemSelectionChanged.connect(on_table_selection_changed) load_existing() if dialog.exec() == QDialog.Accepted: return getattr(dialog, "result_data", None) - return None + return None \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/permanent_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/permanent_load_tab.py index a0b0c1a4c..66e7582a9 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/permanent_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/permanent_load_tab.py @@ -1,5 +1,12 @@ -from PySide6.QtCore import Qt -from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel +from PySide6.QtCore import Qt, QLocale +from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QFrame, QComboBox, QLineEdit +from PySide6.QtGui import QDoubleValidator + +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import PERMANENT_LOAD_TAB_SCHEMA + +LABEL_MIN_WIDTH = 220 +FIELD_WIDTH = 180 +FIELD_HEIGHT = 28 class PermanentLoadTab(QWidget): @@ -26,44 +33,165 @@ def _build_ui(self): left_card.setStyleSheet( "QFrame { border: 1px solid #b2b2b2; border-radius: 10px; background-color: #ffffff; }" ) - left_layout = QVBoxLayout(left_card) - left_layout.setContentsMargins(16, 16, 16, 16) - left_layout.setSpacing(16) - - owner._add_load_section(left_layout, "Dead Load (DL):", [ - ("Include Member Self Weight:", owner._create_yes_no_combo()), - ("Self-weight factor:", owner._create_line_edit()), - ("Include Concrete Deck Weight:", owner._create_yes_no_combo()), - ]) - - owner._add_load_section(left_layout, "Dead Load for Surfacing (DW):", [ - ("Include Load from Wearing Course:", owner._create_yes_no_combo()), - ]) - - owner._add_load_section(left_layout, "Super-Imposed Dead Load (SIDL):", [ - ("Include Load from Crash Barrier:", owner._create_yes_no_combo()), - ("Include Load from Median:", owner._create_yes_no_combo()), - ("Include Load from Railing:", owner._create_yes_no_combo()), - ]) + left_card_layout = QVBoxLayout(left_card) + left_card_layout.setContentsMargins(0, 0, 0, 0) + left_card_layout.setSpacing(0) + + content_wrapper = QWidget() + content_wrapper.setStyleSheet("background-color: #ffffff;") + left_layout = QVBoxLayout(content_wrapper) + left_layout.setContentsMargins(14, 14, 14, 14) + left_layout.setSpacing(12) + + schema = PERMANENT_LOAD_TAB_SCHEMA + label_width = schema.get("label_width", LABEL_MIN_WIDTH) + + for section in schema.get("sections", []): + section_box = self._create_section_box(section, label_width) + left_layout.addWidget(section_box) left_layout.addStretch() + left_card_layout.addWidget(content_wrapper) right_card = owner._create_card() right_card.setStyleSheet( - "QFrame { border: 1px solid #9c9c9c; border-radius: 10px; background-color: #c8c8c8; }" + "QFrame { border: 1px solid #9c9c9c; border-radius: 10px; background-color: #d4d4d4; }" ) - right_card.setMinimumWidth(270) - right_card.setMinimumHeight(360) + right_card.setMinimumWidth(260) + right_card.setMinimumHeight(420) right_layout = QVBoxLayout(right_card) - right_layout.setContentsMargins(18, 18, 18, 18) - right_layout.setSpacing(12) - description_label = QLabel("Description Box") - description_label.setAlignment(Qt.AlignCenter) - description_label.setStyleSheet("font-size: 12px; font-weight: 700; color: #000000;") - description_label.setMinimumHeight(320) - right_layout.addWidget(description_label) + right_layout.setContentsMargins(16, 16, 16, 16) + right_layout.setSpacing(10) + + description = schema.get("description", {}) + + desc_title = QLabel(description.get("title", "Description Box")) + desc_title.setAlignment(Qt.AlignCenter) + desc_title.setStyleSheet("font-size: 12px; font-weight: 700; color: #000000; background: transparent; border: none;") + right_layout.addWidget(desc_title) + + desc_text = QLabel(description.get("text", "")) + desc_text.setWordWrap(True) + desc_text.setStyleSheet("font-size: 11px; color: #4b4b4b; background: transparent; border: none;") + right_layout.addWidget(desc_text) + right_layout.addStretch() content_row.addWidget(left_card, 3) content_row.addWidget(right_card, 2) page_layout.addLayout(content_row) + + def _create_section_box(self, section, label_width): + """Create a grouped section box from schema definition""" + section_box = QFrame() + section_box.setStyleSheet(""" + QFrame { + border: 1px solid #9c9c9c; + border-radius: 6px; + background-color: #ffffff; + padding: 0px; + } + """) + section_box_layout = QVBoxLayout(section_box) + section_box_layout.setContentsMargins(12, 12, 12, 12) + section_box_layout.setSpacing(14) + + if "title" in section: + title_label = QLabel(section["title"]) + title_label.setStyleSheet("font-size: 11px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") + section_box_layout.addWidget(title_label) + + label_style = "font-size: 11px; font-weight: 600; color: #3a3a3a; background: transparent; border: none;" + + for field_def in section.get("fields", []): + row = QHBoxLayout() + row.setSpacing(10) + + label = QLabel(field_def["label"]) + label.setStyleSheet(label_style) + label.setMinimumWidth(label_width) + row.addWidget(label) + + widget = self._create_field_widget(field_def) + widget.setFixedSize(FIELD_WIDTH, FIELD_HEIGHT) + row.addWidget(widget) + + row.addStretch() + section_box_layout.addLayout(row) + + return section_box + + def _create_field_widget(self, field_def): + """Create widget from field definition and bind it""" + field_type = field_def.get("type") + bind_name = field_def.get("bind") + + if field_type == "combo": + widget = self.owner._create_yes_no_combo() if field_def.get("choices") == ["Yes", "No"] else QComboBox() + + if field_def.get("choices") != ["Yes", "No"]: + choices = field_def.get("choices", []) + widget.addItems(choices) + + default = field_def.get("default") + if default: + widget.setCurrentText(default) + + elif field_type == "line": + widget = self.owner._create_line_edit() + + default = field_def.get("default") + if default: + widget.setText(default) + + validator_def = field_def.get("validator") + if validator_def and validator_def.get("type") == "double_range": + validator = QDoubleValidator( + validator_def.get("bottom", 0.0), + validator_def.get("top", 999999.0), + validator_def.get("decimals", 2), + widget + ) + validator.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) + validator.setNotation(QDoubleValidator.StandardNotation) + widget.setValidator(validator) + else: + widget = self.owner._create_line_edit() + + if bind_name: + setattr(self, bind_name, widget) + + return widget + + def update_dependency_states(self, has_median: bool, has_footpath: bool): + """ + Enable/disable load options based on basic inputs + """ + # Median dependency + if hasattr(self, 'include_median_combo'): + self.include_median_combo.setEnabled(has_median) + if not has_median: + self.include_median_combo.setCurrentText("No") + + # Railing dependency + if hasattr(self, 'include_railing_combo'): + self.include_railing_combo.setEnabled(has_footpath) + if not has_footpath: + self.include_railing_combo.setCurrentText("No") + + def reset_defaults(self): + """Reset Permanent Load inputs to default values""" + schema = PERMANENT_LOAD_TAB_SCHEMA + + for section in schema.get("sections", []): + for field_def in section.get("fields", []): + bind_name = field_def.get("bind") + default = field_def.get("default") + + if bind_name and default and hasattr(self, bind_name): + widget = getattr(self, bind_name) + + if isinstance(widget, QComboBox): + widget.setCurrentText(default) + elif isinstance(widget, QLineEdit): + widget.setText(default) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/seismic_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/seismic_load_tab.py index 8fe20485d..f391e7e8d 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/seismic_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/seismic_load_tab.py @@ -7,11 +7,11 @@ QComboBox, QLineEdit, QFrame, - QGridLayout, + QScrollArea, ) from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style - +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import SEISMIC_LOAD_TAB_SCHEMA class SeismicLoadTab(QWidget): """Seismic/Earthquake Load tab content extracted from LoadingTab.""" @@ -19,13 +19,31 @@ class SeismicLoadTab(QWidget): def __init__(self, owner): super().__init__(owner) self.owner = owner + self.schema = SEISMIC_LOAD_TAB_SCHEMA self._build_ui() def _build_ui(self): owner = self.owner + schema = self.schema + + LABEL_MIN_WIDTH = schema.get("label_width", 220) + FIELD_WIDTH = schema.get("field_width", 180) + FIELD_HEIGHT = schema.get("field_height", 28) self.setStyleSheet("background-color: #f5f5f5;") - page_layout = QVBoxLayout(self) + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(0, 0, 0, 0) + main_layout.setSpacing(0) + + scroll_area = QScrollArea() + scroll_area.setWidgetResizable(True) + scroll_area.setFrameShape(QFrame.NoFrame) + scroll_area.setStyleSheet("QScrollArea { background-color: #f5f5f5; border: none; }") + + scroll_content = QWidget() + scroll_content.setStyleSheet("background-color: #f5f5f5;") + page_layout = QVBoxLayout(scroll_content) page_layout.setContentsMargins(12, 12, 12, 12) page_layout.setSpacing(12) @@ -35,145 +53,181 @@ def _build_ui(self): left_card = owner._create_card() left_card.setStyleSheet("QFrame { border: 1px solid #b2b2b2; border-radius: 10px; background-color: #ffffff; }") - left_layout = QVBoxLayout(left_card) - left_layout.setContentsMargins(16, 16, 16, 16) + left_card_layout = QVBoxLayout(left_card) + left_card_layout.setContentsMargins(0, 0, 0, 0) + left_card_layout.setSpacing(0) + + content_wrapper = QWidget() + content_wrapper.setStyleSheet("background-color: #ffffff;") + left_layout = QVBoxLayout(content_wrapper) + left_layout.setContentsMargins(14, 14, 14, 14) left_layout.setSpacing(12) - title = QLabel("Seismic/Earthquake Load (EL) Inputs for Evaluation per IRC 6") - title.setStyleSheet("font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;") - left_layout.addWidget(title) - - label_style = "font-size: 11px; color: #3a3a3a; background: transparent; border: none;" - field_width = 120 - field_height = 28 - - seismic_inputs_box = QFrame() - seismic_inputs_box.setStyleSheet("QFrame { border: 1px solid #b2b2b2; border-radius: 8px; background-color: #ffffff; }") - seismic_inputs_layout = QGridLayout(seismic_inputs_box) - seismic_inputs_layout.setContentsMargins(12, 16, 12, 16) - seismic_inputs_layout.setHorizontalSpacing(12) - seismic_inputs_layout.setVerticalSpacing(6) - seismic_inputs_layout.setColumnMinimumWidth(0, 200) - seismic_inputs_layout.setColumnMinimumWidth(1, 140) - seismic_inputs_layout.setColumnMinimumWidth(2, 140) - seismic_inputs_layout.setColumnStretch(2, 1) - - row = 0 - - def add_combo(label_text, combo_items, attr_name, with_custom=False, placeholder="Custom Value"): - nonlocal row - lbl = QLabel(label_text) - lbl.setStyleSheet(label_style) - lbl.setFixedHeight(field_height) - combo = QComboBox() - combo.addItems(combo_items) - combo.setFixedSize(field_width, field_height) - apply_field_style(combo) - seismic_inputs_layout.addWidget(lbl, row, 0, Qt.AlignLeft | Qt.AlignVCenter) - seismic_inputs_layout.addWidget(combo, row, 1, Qt.AlignLeft) - setattr(owner, attr_name, combo) - - if with_custom: - custom = QLineEdit() - custom.setPlaceholderText(placeholder) - custom.setFixedSize(field_width, field_height) - custom.setEnabled(False) - apply_field_style(custom) - seismic_inputs_layout.addWidget(custom, row, 2, Qt.AlignLeft) - row += 1 - return combo, custom - - row += 1 - - return combo, None - - def add_line_edit(label_text, attr_name, default=None): - nonlocal row - lbl = QLabel(label_text) - lbl.setStyleSheet(label_style) - lbl.setFixedHeight(field_height) - line = QLineEdit() - if default is not None: - line.setText(default) - line.setFixedSize(field_width, field_height) - apply_field_style(line) - seismic_inputs_layout.addWidget(lbl, row, 0, Qt.AlignLeft | Qt.AlignVCenter) - seismic_inputs_layout.addWidget(line, row, 1, Qt.AlignLeft) - setattr(owner, attr_name, line) - row += 1 - - add_combo("Seismic Zone:", ["II", "III", "IV", "V"], "seismic_zone_combo") - add_line_edit("Importance Factor:", "importance_factor_input", "1") - add_combo("Type of Soil:", [ - "Type I – Rocky or Hard", - "Type II – Medium Soil", - "Type III – Soft Soil" - ], "soil_type_combo") - add_line_edit("Time Period:", "time_period_input") - add_line_edit("Damping Percentage:", "damping_input", "2") - add_combo("Response Reduction Factor:", ["1", "2", "3", "4", "5"], "response_factor_combo") - owner.response_factor_combo.setCurrentText("1") - _, owner.dead_load_custom_input = add_combo( - "Dead Load for Seismic Force (kN):", - ["Automatic", "Custom"], - "dead_load_seismic_combo", - with_custom=True, - ) + label_style = "font-size: 11px; font-weight: 600; color: #3a3a3a; background: transparent; border: none;" - _, owner.live_load_custom_input = add_combo( - "Live Load for Seismic Force (kN):", - ["Automatic", "Custom"], - "live_load_seismic_combo", - with_custom=True, - ) + for section in schema.get("sections", []): + section_type = section.get("type") + section_id = section.get("id") + + if section_type == "input_group" and section_id == "seismic_inputs_section": + seismic_inputs_box = QFrame() + seismic_inputs_box.setStyleSheet(""" + QFrame { + border: 1px solid #9c9c9c; + border-radius: 6px; + background-color: #ffffff; + padding: 0px; + } + """) + seismic_inputs_box_layout = QVBoxLayout(seismic_inputs_box) + seismic_inputs_box_layout.setContentsMargins(12, 12, 12, 12) + seismic_inputs_box_layout.setSpacing(14) + + seismic_title = QLabel(section.get("title", "")) + seismic_title.setStyleSheet("font-size: 12px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") + seismic_inputs_box_layout.addWidget(seismic_title) + + for field in section.get("fields", []): + field_type = field.get("type") + + row_layout = QHBoxLayout() + row_layout.setSpacing(10) + + lbl = QLabel(field.get("label", "")) + lbl.setStyleSheet(label_style) + lbl.setMinimumWidth(LABEL_MIN_WIDTH) + row_layout.addWidget(lbl) + + if field_type == "combo": + widget = QComboBox() + widget.addItems(field.get("choices", [])) + if field.get("default"): + widget.setCurrentText(field.get("default")) + widget.setFixedSize(FIELD_WIDTH, FIELD_HEIGHT) + apply_field_style(widget) + + bind_name = field.get("bind") + if bind_name: + setattr(self, bind_name, widget) + + row_layout.addWidget(widget) + + elif field_type == "line": + widget = QLineEdit() + if field.get("default"): + widget.setText(field.get("default")) + widget.setFixedSize(FIELD_WIDTH, FIELD_HEIGHT) + apply_field_style(widget) + + bind_name = field.get("bind") + if bind_name: + setattr(self, bind_name, widget) + + row_layout.addWidget(widget) + + elif field_type == "mode_line": + mode_combo = QComboBox() + mode_combo.addItems(field.get("mode_choices", [])) + if field.get("default_mode"): + mode_combo.setCurrentText(field.get("default_mode")) + mode_combo.setFixedSize(FIELD_WIDTH, FIELD_HEIGHT) + apply_field_style(mode_combo) + + mode_bind = field.get("bind_mode") + if mode_bind: + setattr(self, mode_bind, mode_combo) + + row_layout.addWidget(mode_combo) + + value_input = QLineEdit() + value_input.setPlaceholderText(field.get("placeholder", "")) + value_input.setFixedSize(FIELD_WIDTH, FIELD_HEIGHT) + value_input.setEnabled(False) + apply_field_style(value_input) + + value_bind = field.get("bind_value") + if value_bind: + setattr(self, value_bind, value_input) + + row_layout.addWidget(value_input) + + row_layout.addStretch() + seismic_inputs_box_layout.addLayout(row_layout) + + left_layout.addWidget(seismic_inputs_box) + + elif section_type == "computed_group" and section_id == "computed_values_section": + computed_box = QFrame() + computed_box.setStyleSheet(""" + QFrame { + border: 1px solid #9c9c9c; + border-radius: 6px; + background-color: #ffffff; + padding: 0px; + } + """) + computed_box_layout = QVBoxLayout(computed_box) + computed_box_layout.setContentsMargins(12, 12, 12, 12) + computed_box_layout.setSpacing(14) + + computed_title = QLabel(section.get("title", "")) + computed_title.setStyleSheet("font-size: 11px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") + computed_box_layout.addWidget(computed_title) + + self.seismic_computed_fields = {} + + for field in section.get("fields", []): + row_layout = QHBoxLayout() + row_layout.setSpacing(10) + + lbl = QLabel(field.get("label", "")) + lbl.setStyleSheet(label_style) + lbl.setMinimumWidth(LABEL_MIN_WIDTH) + + computed_field = QLineEdit() + computed_field.setFixedSize(FIELD_WIDTH, FIELD_HEIGHT) + computed_field.setReadOnly(True) + computed_field.setStyleSheet(""" + QLineEdit { + background-color: #f0f0f0; + border: 1px solid #8a8a8a; + border-radius: 5px; + padding: 5px 8px; + color: #5a5a5a; + font-size: 11px; + } + """) + + bind_name = field.get("bind") + if bind_name: + self.seismic_computed_fields[bind_name] = computed_field + + row_layout.addWidget(lbl) + row_layout.addWidget(computed_field) + row_layout.addStretch() + + computed_box_layout.addLayout(row_layout) + + left_layout.addWidget(computed_box) - left_layout.addWidget(seismic_inputs_box) - - computed_box = QFrame() - computed_box.setStyleSheet("QFrame { border: 1px solid #b2b2b2; border-radius: 8px; background-color: #ffffff; }") - computed_layout = QGridLayout(computed_box) - computed_layout.setContentsMargins(12, 16, 12, 16) - computed_layout.setHorizontalSpacing(12) - computed_layout.setVerticalSpacing(6) - computed_layout.setColumnMinimumWidth(0, 200) - - computed_fields = [ - ("Zone Factor:", "zone_factor"), - ("Spectral Acceleration Coefficient:", "spectral_coeff"), - ("Horizontal Seismic Coefficient:", "horizontal_coeff"), - ("Vertical Seismic Coefficient:", "vertical_coeff"), - ] - - owner.seismic_computed_fields = {} - for idx, (label_text, field_name) in enumerate(computed_fields): - lbl = QLabel(label_text) - lbl.setStyleSheet(label_style) - lbl.setFixedHeight(field_height) - field = QLineEdit() - field.setFixedSize(field_width, field_height) - field.setReadOnly(True) - apply_field_style(field) - computed_layout.addWidget(lbl, idx, 0, Qt.AlignLeft | Qt.AlignVCenter) - computed_layout.addWidget(field, idx, 1, Qt.AlignLeft) - owner.seismic_computed_fields[field_name] = field - - left_layout.addWidget(computed_box) left_layout.addStretch() + left_card_layout.addWidget(content_wrapper) right_card = owner._create_card() right_card.setStyleSheet("QFrame { border: 1px solid #9c9c9c; border-radius: 10px; background-color: #d4d4d4; }") - right_card.setMinimumWidth(200) - right_card.setMinimumHeight(400) + right_card.setMinimumWidth(260) + right_card.setMinimumHeight(420) right_layout = QVBoxLayout(right_card) right_layout.setContentsMargins(16, 16, 16, 16) right_layout.setSpacing(10) - desc_title = QLabel("Description Box") + description = schema.get("description", {}) + desc_title = QLabel(description.get("title", "")) desc_title.setAlignment(Qt.AlignCenter) - desc_title.setStyleSheet("font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;") + desc_title.setStyleSheet("font-size: 12px; font-weight: 700; color: #000000; background: transparent; border: none;") right_layout.addWidget(desc_title) - desc_text = QLabel("Importance factor for normal, important, and critical bridges.") + desc_text = QLabel(description.get("text", "")) desc_text.setWordWrap(True) desc_text.setStyleSheet("font-size: 11px; color: #4b4b4b; background: transparent; border: none;") right_layout.addWidget(desc_text) @@ -184,5 +238,64 @@ def add_line_edit(label_text, attr_name, default=None): page_layout.addLayout(content_row) - owner.dead_load_seismic_combo.currentTextChanged.connect(owner._on_dead_load_mode_changed) - owner.live_load_seismic_combo.currentTextChanged.connect(owner._on_live_load_mode_changed) + scroll_area.setWidget(scroll_content) + main_layout.addWidget(scroll_area) + + seismic_inputs = next( + (s for s in schema.get("sections", []) if s.get("id") == "seismic_inputs_section"), + None + ) + + if seismic_inputs: + for field in seismic_inputs.get("fields", []): + on_mode_change = field.get("on_mode_change") + if on_mode_change: + mode_bind = field.get("bind_mode") + if mode_bind and hasattr(self, mode_bind): + combo = getattr(self, mode_bind) + combo.currentTextChanged.connect(lambda _: self._toggle_seismic_custom_inputs()) + + self._apply_seismic_defaults() + self._toggle_seismic_custom_inputs() + + if hasattr(self.owner, "project_seismic_zone"): + self.seismic_zone_combo.setCurrentText(self.owner.project_seismic_zone) + + def _apply_seismic_defaults(self): + """Apply default values from schema""" + seismic_inputs = next( + (s for s in self.schema.get("sections", []) if s.get("id") == "seismic_inputs_section"), + None + ) + + if not seismic_inputs: + return + + for field in seismic_inputs.get("fields", []): + bind_name = field.get("bind") or field.get("bind_mode") + if not bind_name or not hasattr(self, bind_name): + continue + + widget = getattr(self, bind_name) + default_value = field.get("default") or field.get("default_mode") + + if default_value: + if isinstance(widget, QComboBox): + widget.setCurrentText(default_value) + elif isinstance(widget, QLineEdit): + widget.setText(default_value) + + def _toggle_seismic_custom_inputs(self): + """Enable/disable custom inputs based on mode selection""" + if hasattr(self, 'dead_load_seismic_combo') and hasattr(self, 'dead_load_custom_input'): + dead_is_custom = self.dead_load_seismic_combo.currentText() == "Custom" + self.dead_load_custom_input.setEnabled(dead_is_custom) + + if hasattr(self, 'live_load_seismic_combo') and hasattr(self, 'live_load_custom_input'): + live_is_custom = self.live_load_seismic_combo.currentText() == "Custom" + self.live_load_custom_input.setEnabled(live_is_custom) + + def reset_defaults(self): + """Reset Seismic Load inputs to schema default values""" + self._apply_seismic_defaults() + self._toggle_seismic_custom_inputs() \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/temperature_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/temperature_load_tab.py index 03b77ec6f..1e601907f 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/temperature_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/temperature_load_tab.py @@ -1,7 +1,9 @@ from PySide6.QtCore import Qt +from PySide6.QtGui import QDoubleValidator, QIntValidator from PySide6.QtWidgets import QFrame, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QVBoxLayout, QWidget from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import TEMPERATURE_LOAD_TAB_SCHEMA class TemperatureLoadTab(QWidget): @@ -14,6 +16,7 @@ def __init__(self, owner): def _build_ui(self): owner = self.owner + schema = TEMPERATURE_LOAD_TAB_SCHEMA self.setStyleSheet("background-color: #f5f5f5;") page_layout = QVBoxLayout(self) @@ -34,117 +37,87 @@ def _build_ui(self): label_style = "font-size: 11px; color: #3a3a3a; background: transparent; border: none;" heading_style = "font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;" - field_width = 140 + field_width = schema.get("field_width", 140) + label_width = schema.get("label_width", 240) + + readonly_input_style = """ + QLineEdit { + color: #9e9e9e; + background-color: #f3f3f3; + border: 1px solid #3a3a3a; + border-radius: 4px; + padding: 4px; + } + """ + + for section in schema.get("sections", []): + section_box = QFrame() + section_box.setStyleSheet( + "QFrame { border: 1px solid #b2b2b2; border-radius: 8px; background-color: #ffffff; }" + ) + section_layout = QVBoxLayout(section_box) + section_layout.setContentsMargins(12, 12, 12, 12) + section_layout.setSpacing(10) + + section_title = QLabel(section.get("title", "")) + section_title.setStyleSheet(heading_style) + section_layout.addWidget(section_title) + + grid = QGridLayout() + grid.setContentsMargins(0, 4, 0, 0) + grid.setHorizontalSpacing(12) + grid.setVerticalSpacing(10) + grid.setColumnMinimumWidth(0, label_width) + + row = 0 + for field in section.get("fields", []): + lbl = QLabel(field.get("label", "")) + lbl.setStyleSheet(label_style) + grid.addWidget(lbl, row, 0, Qt.AlignLeft | Qt.AlignVCenter) + + input_widget = QLineEdit() + input_widget.setFixedWidth(field_width) + apply_field_style(input_widget) + + if "placeholder" in field: + input_widget.setPlaceholderText(field["placeholder"]) + + if "default" in field: + input_widget.setText(field["default"]) + + if "validator" in field: + validator_config = field["validator"] + if validator_config["type"] == "double_range": + validator = QDoubleValidator( + validator_config["bottom"], + validator_config["top"], + validator_config.get("decimals", 2), + input_widget + ) + validator.setNotation(QDoubleValidator.StandardNotation) + input_widget.setValidator(validator) + elif validator_config["type"] == "int_range": + validator = QIntValidator( + validator_config["bottom"], + validator_config["top"], + input_widget + ) + input_widget.setValidator(validator) + + if field.get("read_only", False): + input_widget.setReadOnly(True) + input_widget.setStyleSheet(readonly_input_style) + + bind_name = field.get("bind") + if bind_name: + setattr(owner, bind_name, input_widget) + + grid.addWidget(input_widget, row, 1, Qt.AlignLeft) + row += 1 + + section_layout.addLayout(grid) + left_layout.addWidget(section_box) - tl_box = QFrame() - tl_box.setStyleSheet( - "QFrame { border: 1px solid #b2b2b2; border-radius: 8px; background-color: #ffffff; }" - ) - tl_layout = QVBoxLayout(tl_box) - tl_layout.setContentsMargins(12, 12, 12, 12) - tl_layout.setSpacing(10) - - tl_title = QLabel("Temperature Load (TL) Inputs for evaluation per IRC6") - tl_title.setStyleSheet(heading_style) - tl_layout.addWidget(tl_title) - - tl_grid = QGridLayout() - tl_grid.setContentsMargins(0, 4, 0, 0) - tl_grid.setHorizontalSpacing(12) - tl_grid.setVerticalSpacing(10) - tl_grid.setColumnMinimumWidth(0, 240) - - lbl = QLabel("Highest Maximum Air Temperature\n(°C):") - lbl.setStyleSheet(label_style) - owner.highest_max_temp_input = QLineEdit() - owner.highest_max_temp_input.setFixedWidth(field_width) - apply_field_style(owner.highest_max_temp_input) - tl_grid.addWidget(lbl, 0, 0, Qt.AlignLeft | Qt.AlignVCenter) - tl_grid.addWidget(owner.highest_max_temp_input, 0, 1, Qt.AlignLeft) - - lbl = QLabel("Lowest Minimum Air Temperature\n(°C):") - lbl.setStyleSheet(label_style) - owner.lowest_min_temp_input = QLineEdit() - owner.lowest_min_temp_input.setFixedWidth(field_width) - apply_field_style(owner.lowest_min_temp_input) - tl_grid.addWidget(lbl, 1, 0, Qt.AlignLeft | Qt.AlignVCenter) - tl_grid.addWidget(owner.lowest_min_temp_input, 1, 1, Qt.AlignLeft) - - lbl = QLabel("Coefficient of Thermal Expansion for Steel\n(1/°C):") - lbl.setStyleSheet(label_style) - owner.thermal_coeff_steel_input = QLineEdit() - owner.thermal_coeff_steel_input.setFixedWidth(field_width) - apply_field_style(owner.thermal_coeff_steel_input) - tl_grid.addWidget(lbl, 2, 0, Qt.AlignLeft | Qt.AlignVCenter) - tl_grid.addWidget(owner.thermal_coeff_steel_input, 2, 1, Qt.AlignLeft) - - lbl = QLabel("Coefficient of Thermal Expansion for RCC\n(1/°C):") - lbl.setStyleSheet(label_style) - owner.thermal_coeff_rcc_input = QLineEdit() - owner.thermal_coeff_rcc_input.setFixedWidth(field_width) - apply_field_style(owner.thermal_coeff_rcc_input) - tl_grid.addWidget(lbl, 3, 0, Qt.AlignLeft | Qt.AlignVCenter) - tl_grid.addWidget(owner.thermal_coeff_rcc_input, 3, 1, Qt.AlignLeft) - - tl_layout.addLayout(tl_grid) - left_layout.addWidget(tl_box) - - range_box = QFrame() - range_box.setStyleSheet( - "QFrame { border: 1px solid #b2b2b2; border-radius: 8px; background-color: #ffffff; }" - ) - range_layout = QVBoxLayout(range_box) - range_layout.setContentsMargins(12, 12, 12, 12) - range_layout.setSpacing(10) - - range_title = QLabel("Range of Effective Bridge Temperature:") - range_title.setStyleSheet(heading_style) - range_layout.addWidget(range_title) - - range_grid = QGridLayout() - range_grid.setContentsMargins(0, 4, 0, 0) - range_grid.setHorizontalSpacing(12) - range_grid.setVerticalSpacing(10) - range_grid.setColumnMinimumWidth(0, 200) - - lbl = QLabel("Minimum (°C):") - lbl.setStyleSheet(label_style) - owner.bridge_temp_min_input = QLineEdit() - owner.bridge_temp_min_input.setFixedWidth(field_width) - apply_field_style(owner.bridge_temp_min_input) - range_grid.addWidget(lbl, 0, 0, Qt.AlignLeft | Qt.AlignVCenter) - range_grid.addWidget(owner.bridge_temp_min_input, 0, 1, Qt.AlignLeft) - - lbl = QLabel("Maximum (°C):") - lbl.setStyleSheet(label_style) - owner.bridge_temp_max_input = QLineEdit() - owner.bridge_temp_max_input.setFixedWidth(field_width) - apply_field_style(owner.bridge_temp_max_input) - range_grid.addWidget(lbl, 1, 0, Qt.AlignLeft | Qt.AlignVCenter) - range_grid.addWidget(owner.bridge_temp_max_input, 1, 1, Qt.AlignLeft) - - temp_design_label = QLabel("Temperature for Design:") - temp_design_label.setStyleSheet(label_style + " font-weight: 600;") - range_grid.addWidget(temp_design_label, 2, 0, 1, 2, Qt.AlignLeft) - - lbl = QLabel("Rise (°C):") - lbl.setStyleSheet(label_style) - owner.temp_rise_input = QLineEdit() - owner.temp_rise_input.setFixedWidth(field_width) - apply_field_style(owner.temp_rise_input) - range_grid.addWidget(lbl, 3, 0, Qt.AlignLeft | Qt.AlignVCenter) - range_grid.addWidget(owner.temp_rise_input, 3, 1, Qt.AlignLeft) - - lbl = QLabel("Fall (°C):") - lbl.setStyleSheet(label_style) - owner.temp_fall_input = QLineEdit() - owner.temp_fall_input.setFixedWidth(field_width) - apply_field_style(owner.temp_fall_input) - range_grid.addWidget(lbl, 4, 0, Qt.AlignLeft | Qt.AlignVCenter) - range_grid.addWidget(owner.temp_fall_input, 4, 1, Qt.AlignLeft) - - range_layout.addLayout(range_grid) - left_layout.addWidget(range_box) left_layout.addStretch() right_card = owner._create_card() @@ -168,4 +141,4 @@ def _build_ui(self): content_row.addWidget(left_card, 3) content_row.addWidget(right_card, 2) - page_layout.addLayout(content_row) + page_layout.addLayout(content_row) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/wind_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/wind_load_tab.py index bdd7081af..f217a476d 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/wind_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/wind_load_tab.py @@ -7,12 +7,11 @@ QComboBox, QLineEdit, QFrame, - QGridLayout, QScrollArea, ) from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style - +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import WIND_LOAD_TAB_SCHEMA class WindLoadTab(QWidget): """Wind Load tab content extracted from LoadingTab.""" @@ -20,13 +19,32 @@ class WindLoadTab(QWidget): def __init__(self, owner): super().__init__(owner) self.owner = owner + self.schema = WIND_LOAD_TAB_SCHEMA self._build_ui() def _build_ui(self): owner = self.owner + schema = self.schema + + LABEL_MIN_WIDTH = schema.get("label_width", 260) + FIELD_WIDTH = schema.get("field_width", 140) + FIELD_HEIGHT = schema.get("field_height", 28) + COMBO_WIDTH = FIELD_WIDTH self.setStyleSheet("background-color: #f5f5f5;") - page_layout = QVBoxLayout(self) + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(0, 0, 0, 0) + main_layout.setSpacing(0) + + scroll_area = QScrollArea() + scroll_area.setWidgetResizable(True) + scroll_area.setFrameShape(QFrame.NoFrame) + scroll_area.setStyleSheet("QScrollArea { background-color: #f5f5f5; border: none; }") + + scroll_content = QWidget() + scroll_content.setStyleSheet("background-color: #f5f5f5;") + page_layout = QVBoxLayout(scroll_content) page_layout.setContentsMargins(12, 12, 12, 12) page_layout.setSpacing(12) @@ -40,155 +58,273 @@ def _build_ui(self): left_card_layout.setContentsMargins(0, 0, 0, 0) left_card_layout.setSpacing(0) - scroll = QScrollArea() - scroll.setWidgetResizable(True) - scroll.setFrameShape(QFrame.NoFrame) - scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - scroll.setStyleSheet( - "QScrollArea { border: none; background: transparent; }" - "QScrollArea > QWidget > QWidget { background: transparent; }" - ) - - scroll_content = QWidget() - scroll_content.setStyleSheet("background: #ffffff;") - left_layout = QVBoxLayout(scroll_content) - left_layout.setContentsMargins(16, 16, 16, 16) + content_wrapper = QWidget() + content_wrapper.setStyleSheet("background-color: #ffffff;") + left_layout = QVBoxLayout(content_wrapper) + left_layout.setContentsMargins(14, 14, 14, 14) left_layout.setSpacing(12) - label_style = "font-size: 11px; color: #3a3a3a; background: transparent; border: none;" - field_width = 120 - - wind_inputs_box = QFrame() - wind_inputs_box.setStyleSheet("QFrame { border: 1px solid #b2b2b2; border-radius: 8px; background-color: #ffffff; }") - wind_inputs_layout = QVBoxLayout(wind_inputs_box) - wind_inputs_layout.setContentsMargins(12, 12, 12, 12) - wind_inputs_layout.setSpacing(10) - - wind_title = QLabel("Wind Load (WL) Inputs for Evaluation per IRC6") - wind_title.setStyleSheet("font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;") - wind_inputs_layout.addWidget(wind_title) - - wind_grid = QGridLayout() - wind_grid.setContentsMargins(0, 4, 0, 0) - wind_grid.setHorizontalSpacing(12) - wind_grid.setVerticalSpacing(8) - wind_grid.setColumnMinimumWidth(0, 220) - - row = 0 - - def add_line(label_text, attr_name, is_combo=False, items=None, placeholder=None, enable_on_custom=False): - nonlocal row - lbl = QLabel(label_text) - lbl.setStyleSheet(label_style) - widget = QComboBox() if is_combo else QLineEdit() - if is_combo and items: - widget.addItems(items) - if placeholder and not is_combo: - widget.setPlaceholderText(placeholder) - widget.setFixedWidth(field_width) - apply_field_style(widget) - wind_grid.addWidget(lbl, row, 0, Qt.AlignLeft | Qt.AlignVCenter) - wind_grid.addWidget(widget, row, 1, Qt.AlignLeft) - setattr(owner, attr_name, widget) - row += 1 - return widget - - add_line("Basic Wind Speed (m/s):", "basic_wind_speed_input") - add_line("Average Exposed Height (m):", "avg_exposed_height_input") - add_line("Type of Terrain:", "terrain_type_combo", is_combo=True, items=["Plain", "Hilly", "Coastal"]) - add_line("Site Topography:", "site_topography_combo", is_combo=True, items=["Flat", "Hilly", "Ridge", "Valley"]) - owner.gust_factor_combo = add_line("Gust Factor, G:", "gust_factor_combo", is_combo=True, items=["Automatic", "Custom"], enable_on_custom=True) - owner.gust_factor_value = add_line("", "gust_factor_value", placeholder="Value") - owner.gust_factor_value.setEnabled(False) - owner.drag_coeff_combo = add_line("Drag Coefficient, CD:", "drag_coeff_combo", is_combo=True, items=["Automatic", "Custom"], enable_on_custom=True) - owner.drag_coeff_value = add_line("", "drag_coeff_value", placeholder="Custom Value") - owner.drag_coeff_value.setEnabled(False) - owner.drag_coeff_ll_combo = add_line("Drag Coefficient against Live Load, CDLL:", "drag_coeff_ll_combo", is_combo=True, items=["Automatic", "Custom"], enable_on_custom=True) - owner.drag_coeff_ll_value = add_line("", "drag_coeff_ll_value", placeholder="Value") - owner.drag_coeff_ll_value.setEnabled(False) - owner.lift_coeff_combo = add_line("Lift Coefficient, CL:", "lift_coeff_combo", is_combo=True, items=["Automatic", "Custom"], enable_on_custom=True) - owner.lift_coeff_value = add_line("", "lift_coeff_value", placeholder="Value") - owner.lift_coeff_value.setEnabled(False) - owner.super_area_elev_combo = add_line("Superstructure Area in Elevation (m2):", "super_area_elev_combo", is_combo=True, items=["Automatic", "Custom"], enable_on_custom=True) - owner.super_area_elev_value = add_line("", "super_area_elev_value", placeholder="Custom Value") - owner.super_area_elev_value.setEnabled(False) - owner.super_area_plain_combo = add_line("Superstructure Area in Plain (m2):", "super_area_plain_combo", is_combo=True, items=["Automatic", "Custom"], enable_on_custom=True) - owner.super_area_plain_value = add_line("", "super_area_plain_value", placeholder="Custom Value") - owner.super_area_plain_value.setEnabled(False) - owner.exposed_frontal_area_combo = add_line("Exposed Frontal Area of Live Load (m2):", "exposed_frontal_area_combo", is_combo=True, items=["Automatic", "Custom"], enable_on_custom=True) - owner.exposed_frontal_area_value = add_line("", "exposed_frontal_area_value", placeholder="Custom Value") - owner.exposed_frontal_area_value.setEnabled(False) - owner.wind_ecc_deck_combo = add_line("Wind Load Eccentricity from Top of Deck\n(m): Negative for below deck", "wind_ecc_deck_combo", is_combo=True, items=["Automatic", "Custom"], enable_on_custom=True) - owner.wind_ecc_deck_value = add_line("", "wind_ecc_deck_value", placeholder="Value") - owner.wind_ecc_deck_value.setEnabled(False) - owner.wind_ll_ecc_combo = add_line("Wind on Live Load Eccentricity from Top\nof Deck (m):", "wind_ll_ecc_combo", is_combo=True, items=["Automatic", "Custom"], enable_on_custom=True) - owner.wind_ll_ecc_value = add_line("", "wind_ll_ecc_value", placeholder="Value") - owner.wind_ll_ecc_value.setEnabled(False) - - wind_inputs_layout.addLayout(wind_grid) - left_layout.addWidget(wind_inputs_box) - - computed_box = QFrame() - computed_box.setStyleSheet("QFrame { border: 1px solid #b2b2b2; border-radius: 8px; background-color: #ffffff; }") - computed_layout = QGridLayout(computed_box) - computed_layout.setContentsMargins(12, 12, 12, 12) - computed_layout.setHorizontalSpacing(12) - computed_layout.setVerticalSpacing(8) - computed_layout.setColumnMinimumWidth(0, 220) - - computed_fields = [ - ("Hourly Mean Wind Speed (m/s):", "hourly_mean_wind"), - ("Hourly Wind Pressure in N/m2:", "hourly_wind_pressure"), - ("Transverse Wind Force in N:", "transverse_wind_force"), - ("Longitudinal Wind Force in N:", "longitudinal_wind_force"), - ("Vertical Wind Force in N:", "vertical_wind_force"), - ("Transverse Wind Force on Live\nLoad in N:", "transverse_wind_ll"), - ("Longitudinal Wind Force on Live\nLoad in N:", "longitudinal_wind_ll"), - ] - - owner.wind_computed_fields = {} - for idx, (label_text, field_name) in enumerate(computed_fields): - lbl = QLabel(label_text) - lbl.setStyleSheet(label_style) - field = QLineEdit() - field.setFixedWidth(field_width) - field.setReadOnly(True) - apply_field_style(field) - computed_layout.addWidget(lbl, idx, 0, Qt.AlignLeft | Qt.AlignVCenter) - computed_layout.addWidget(field, idx, 1, Qt.AlignLeft) - owner.wind_computed_fields[field_name] = field - - left_layout.addWidget(computed_box) - left_layout.addStretch() + label_style = "font-size: 11px; font-weight: 600; color: #3a3a3a; background: transparent; border: none;" + + for section in schema.get("sections", []): + section_type = section.get("type") + section_id = section.get("id") + + if section_type == "input_group" and section_id == "wind_inputs_section": + wind_inputs_box = QFrame() + wind_inputs_box.setStyleSheet(""" + QFrame { + border: 1px solid #9c9c9c; + border-radius: 6px; + background-color: #ffffff; + padding: 0px; + } + """) + wind_inputs_layout = QVBoxLayout(wind_inputs_box) + wind_inputs_layout.setContentsMargins(12, 12, 12, 12) + wind_inputs_layout.setSpacing(14) + + wind_title = QLabel(section.get("title", "")) + wind_title.setStyleSheet("font-size: 12px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") + wind_inputs_layout.addWidget(wind_title) + + for field in section.get("fields", []): + field_type = field.get("type") + + row_layout = QHBoxLayout() + row_layout.setSpacing(10) + + lbl = QLabel(field.get("label", "")) + lbl.setStyleSheet(label_style) + lbl.setMinimumWidth(LABEL_MIN_WIDTH) + row_layout.addWidget(lbl) + + if field_type == "line": + widget = QLineEdit() + if field.get("default"): + widget.setText(field.get("default")) + if field.get("placeholder"): + widget.setPlaceholderText(field.get("placeholder")) + widget.setFixedSize(FIELD_WIDTH, FIELD_HEIGHT) + apply_field_style(widget) + + bind_name = field.get("bind") + if bind_name: + setattr(owner, bind_name, widget) + + row_layout.addWidget(widget) + + elif field_type == "combo": + widget = QComboBox() + widget.addItems(field.get("choices", [])) + if field.get("default"): + widget.setCurrentText(field.get("default")) + widget.setFixedSize(COMBO_WIDTH, FIELD_HEIGHT) + apply_field_style(widget) + + bind_name = field.get("bind") + if bind_name: + setattr(owner, bind_name, widget) + + row_layout.addWidget(widget) + + elif field_type == "mode_line": + mode_combo = QComboBox() + mode_combo.addItems(field.get("mode_choices", [])) + if field.get("default_mode"): + mode_combo.setCurrentText(field.get("default_mode")) + mode_combo.setFixedSize(COMBO_WIDTH, FIELD_HEIGHT) + apply_field_style(mode_combo) + + mode_bind = field.get("bind_mode") + if mode_bind: + setattr(owner, mode_bind, mode_combo) + + row_layout.addWidget(mode_combo) + + value_input = QLineEdit() + if field.get("default_value"): + value_input.setText(field.get("default_value")) + if field.get("placeholder"): + value_input.setPlaceholderText(field.get("placeholder")) + value_input.setFixedSize(FIELD_WIDTH, FIELD_HEIGHT) + value_input.setEnabled(False) + apply_field_style(value_input) + + value_bind = field.get("bind_value") + if value_bind: + setattr(owner, value_bind, value_input) + + row_layout.addWidget(value_input) + + row_layout.addStretch() + wind_inputs_layout.addLayout(row_layout) + + left_layout.addWidget(wind_inputs_box) - scroll.setWidget(scroll_content) - left_card_layout.addWidget(scroll) + elif section_type == "computed_group" and section_id == "computed_values_section": + computed_box = QFrame() + computed_box.setStyleSheet(""" + QFrame { + border: 1px solid #9c9c9c; + border-radius: 6px; + background-color: #ffffff; + padding: 0px; + } + """) + computed_box_layout = QVBoxLayout(computed_box) + computed_box_layout.setContentsMargins(12, 12, 12, 12) + computed_box_layout.setSpacing(14) + + computed_title = QLabel(section.get("title", "")) + computed_title.setStyleSheet("font-size: 11px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") + computed_box_layout.addWidget(computed_title) + + owner.wind_computed_fields = {} + + for field in section.get("fields", []): + row_layout = QHBoxLayout() + row_layout.setSpacing(10) + + lbl = QLabel(field.get("label", "")) + lbl.setStyleSheet(label_style) + lbl.setMinimumWidth(LABEL_MIN_WIDTH) + + computed_field = QLineEdit() + computed_field.setFixedSize(FIELD_WIDTH, FIELD_HEIGHT) + computed_field.setReadOnly(True) + computed_field.setStyleSheet(""" + QLineEdit { + background-color: #f0f0f0; + border: 1px solid #8a8a8a; + border-radius: 5px; + padding: 5px 8px; + color: #5a5a5a; + font-size: 11px; + } + """) + + bind_name = field.get("bind") + if bind_name: + owner.wind_computed_fields[bind_name] = computed_field + + row_layout.addWidget(lbl) + row_layout.addWidget(computed_field) + row_layout.addStretch() + + computed_box_layout.addLayout(row_layout) + + left_layout.addWidget(computed_box) + + left_layout.addStretch() + left_card_layout.addWidget(content_wrapper) right_card = owner._create_card() right_card.setStyleSheet("QFrame { border: 1px solid #9c9c9c; border-radius: 10px; background-color: #d4d4d4; }") - right_card.setMinimumWidth(150) - right_card.setMaximumWidth(200) + right_card.setMinimumWidth(260) + right_card.setMinimumHeight(420) right_layout = QVBoxLayout(right_card) right_layout.setContentsMargins(16, 16, 16, 16) right_layout.setSpacing(10) - desc_title = QLabel("Description\nBox") + description = schema.get("description", {}) + desc_title = QLabel(description.get("title", "")) desc_title.setAlignment(Qt.AlignCenter) - desc_title.setStyleSheet("font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;") + desc_title.setStyleSheet("font-size: 12px; font-weight: 700; color: #000000; background: transparent; border: none;") right_layout.addWidget(desc_title) - right_layout.addStretch() + desc_text = QLabel(description.get("text", "")) + desc_text.setWordWrap(True) + desc_text.setStyleSheet("font-size: 11px; color: #4b4b4b; background: transparent; border: none;") + right_layout.addWidget(desc_text) + right_layout.addStretch() content_row.addWidget(left_card, 3) - content_row.addWidget(right_card, 1) - + content_row.addWidget(right_card, 2) page_layout.addLayout(content_row) + scroll_area.setWidget(scroll_content) + main_layout.addWidget(scroll_area) + + wind_inputs = next( + (s for s in schema.get("sections", []) if s.get("id") == "wind_inputs_section"), + None + ) + + if wind_inputs: + for field in wind_inputs.get("fields", []): + if field.get("type") == "mode_line": + mode_bind = field.get("bind_mode") + value_bind = field.get("bind_value") + + if mode_bind and value_bind and hasattr(owner, mode_bind) and hasattr(owner, value_bind): + mode_combo = getattr(owner, mode_bind) + value_input = getattr(owner, value_bind) + + mode_combo.currentTextChanged.connect( + lambda text, v=value_input: v.setEnabled(text == "Custom") + ) + self.reset_defaults() + + def _block(self, widgets, block=True): + """Temporarily block signals for a list of widgets""" + for w in widgets: + if w is not None: + w.blockSignals(block) - owner.gust_factor_combo.currentTextChanged.connect(lambda t: owner.gust_factor_value.setEnabled(t == "Custom")) - owner.drag_coeff_combo.currentTextChanged.connect(lambda t: owner.drag_coeff_value.setEnabled(t == "Custom")) - owner.drag_coeff_ll_combo.currentTextChanged.connect(lambda t: owner.drag_coeff_ll_value.setEnabled(t == "Custom")) - owner.lift_coeff_combo.currentTextChanged.connect(lambda t: owner.lift_coeff_value.setEnabled(t == "Custom")) - owner.super_area_elev_combo.currentTextChanged.connect(lambda t: owner.super_area_elev_value.setEnabled(t == "Custom")) - owner.super_area_plain_combo.currentTextChanged.connect(lambda t: owner.super_area_plain_value.setEnabled(t == "Custom")) - owner.exposed_frontal_area_combo.currentTextChanged.connect(lambda t: owner.exposed_frontal_area_value.setEnabled(t == "Custom")) - owner.wind_ecc_deck_combo.currentTextChanged.connect(lambda t: owner.wind_ecc_deck_value.setEnabled(t == "Custom")) - owner.wind_ll_ecc_combo.currentTextChanged.connect(lambda t: owner.wind_ll_ecc_value.setEnabled(t == "Custom")) + def reset_defaults(self): + """Reset Wind Load inputs to schema default values""" + wind_inputs = next( + (s for s in self.schema.get("sections", []) if s.get("id") == "wind_inputs_section"), + None + ) + + if not wind_inputs: + return + + mode_combos = [] + for field in wind_inputs.get("fields", []): + if field.get("type") == "mode_line": + mode_bind = field.get("bind_mode") + if mode_bind and hasattr(self.owner, mode_bind): + mode_combos.append(getattr(self.owner, mode_bind)) + + self._block(mode_combos, True) + + for field in wind_inputs.get("fields", []): + field_type = field.get("type") + + if field_type == "line": + bind_name = field.get("bind") + if bind_name and hasattr(self.owner, bind_name): + widget = getattr(self.owner, bind_name) + default_value = field.get("default", "") + widget.setText(default_value) + + elif field_type == "combo": + bind_name = field.get("bind") + if bind_name and hasattr(self.owner, bind_name): + widget = getattr(self.owner, bind_name) + default_value = field.get("default") + if default_value: + widget.setCurrentText(default_value) + + elif field_type == "mode_line": + mode_bind = field.get("bind_mode") + value_bind = field.get("bind_value") + + if mode_bind and hasattr(self.owner, mode_bind): + mode_combo = getattr(self.owner, mode_bind) + default_mode = field.get("default_mode", "Automatic") + mode_combo.setCurrentText(default_mode) + + if value_bind and hasattr(self.owner, value_bind): + value_input = getattr(self.owner, value_bind) + default_value = field.get("default_value", "") + + if default_value: + value_input.setText(default_value) + else: + value_input.clear() + + value_input.setEnabled(False) + + self._block(mode_combos, False) \ No newline at end of file From 40fc8e4b8f4f83cd6ada96b3fc061a78e04ef0db Mon Sep 17 00:00:00 2001 From: Yugh Juneja Date: Mon, 16 Feb 2026 21:53:43 +0530 Subject: [PATCH 044/225] Implemented Dynamic UI for Additional Input and Colors for Top View --- .../dialogs/tabs/typical_section_details.py | 84 +++++++++++++++---- .../desktop/ui/docks/cad_cross_section.py | 60 ++++++++++--- .../desktop/ui/docks/cad_top_view.py | 9 +- 3 files changed, 120 insertions(+), 33 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 3d2438c78..5b22a0e3a 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -22,6 +22,8 @@ from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.typical_section.railing_tab import RailingTab from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.typical_section.wearing_course_tab import WearingCourseTab from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.typical_section.lane_details_tab import LaneDetailsTab +from osdagbridge.desktop.ui.docks.cad_cross_section import CrossSectionCADWidget + def _styled_message_box(icon, title, text, parent=None): @@ -155,28 +157,33 @@ def init_ui(self): border-radius: 8px; } """) - diagram_widget.setMinimumHeight(150) - diagram_widget.setMaximumHeight(200) + diagram_widget.setMinimumHeight(280) + diagram_widget.setMaximumHeight(380) + diagram_layout = QVBoxLayout(diagram_widget) - diagram_layout.setContentsMargins(20, 20, 20, 20) - diagram_layout.setAlignment(Qt.AlignCenter) - - diagram_label = QLabel("Typical Section Details\nDiagram") - diagram_label.setAlignment(Qt.AlignCenter) - diagram_label.setStyleSheet(""" - QLabel { - background-color: transparent; - border: none; - padding: 20px; - font-size: 13px; - color: #333; - } - """) - diagram_layout.addWidget(diagram_label) + diagram_layout.setContentsMargins(5, 5, 5, 5) + + # --- Cross Section CAD Preview --- + from osdagbridge.desktop.ui.docks.cad_cross_section import CrossSectionCADWidget + + cad_scroll = QScrollArea() + cad_scroll.setWidgetResizable(True) + cad_scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + cad_scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) + cad_scroll.setFrameShape(QFrame.NoFrame) + cad_scroll.setStyleSheet("QScrollArea { background: transparent; border: none; }") + + self.cad_preview = CrossSectionCADWidget() + self.cad_preview.scale_factor = 0.85 + self.cad_preview.setMinimumHeight(400) + + cad_scroll.setWidget(self.cad_preview) + diagram_layout.addWidget(cad_scroll) main_layout.addWidget(diagram_widget) main_layout.addSpacing(10) + input_container = QWidget() input_container.setStyleSheet("QWidget { background-color: white; }") input_layout = QVBoxLayout(input_container) @@ -242,6 +249,21 @@ def init_ui(self): self.deck_thickness.textChanged.connect(self.update_footpath_thickness) self.recalculate_girders() + + # Update CAD when fields change + if hasattr(self, "girder_spacing"): + self.girder_spacing.editingFinished.connect(self._update_cad_preview) + if hasattr(self, "no_of_girders"): + self.no_of_girders.editingFinished.connect(self._update_cad_preview) + if hasattr(self, "deck_overhang"): + self.deck_overhang.editingFinished.connect(self._update_cad_preview) + if hasattr(self, "deck_thickness"): + self.deck_thickness.editingFinished.connect(self._update_cad_preview) + if hasattr(self, "footpath_width"): + self.footpath_width.editingFinished.connect(self._update_cad_preview) + if hasattr(self, "footpath_thickness"): + self.footpath_thickness.editingFinished.connect(self._update_cad_preview) + # Initialize crash barrier visibility/load state if hasattr(self, "crash_barrier_type"): barrier_type = self.crash_barrier_type.currentText() @@ -260,6 +282,34 @@ def init_ui(self): self.girder_count_changed.emit(int(self.no_of_girders.text())) except Exception: pass + + def _update_cad_preview(self): + if not hasattr(self, 'cad_preview'): + return + + params = {} + + if hasattr(self, "no_of_girders") and self.no_of_girders.text(): + params['num_girders'] = int(float(self.no_of_girders.text())) + + if hasattr(self, "girder_spacing") and self.girder_spacing.text(): + params['girder_spacing'] = float(self.girder_spacing.text()) * 1000 + + if hasattr(self, "deck_overhang") and self.deck_overhang.text(): + params['deck_overhang'] = float(self.deck_overhang.text()) * 1000 + + if hasattr(self, "deck_thickness") and self.deck_thickness.text(): + params['deck_thickness'] = float(self.deck_thickness.text()) + + if hasattr(self, "footpath_width") and self.footpath_width.text(): + params['footpath_width'] = float(self.footpath_width.text()) * 1000 + + if hasattr(self, "footpath_thickness") and self.footpath_thickness.text(): + params['footpath_thickness'] = float(self.footpath_thickness.text()) + + if params: + self.cad_preview.update_params(params) + def _get_footpath_count(self): if self.footpath_value == "Both": diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 6a99da65a..681ed99ec 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -13,7 +13,18 @@ class CrossSectionCADWidget(QWidget): """Widget for drawing bridge cross-section view""" - + # ===== SHARED CAD COLORS ===== + GIRDER_COLOR = QColor(179, 180, 160) + STIFFENER_COLOR = QColor(79, 78, 70) + CROSS_BRACING_COLOR = QColor(235, 236, 211) + END_DIAPHRAGM_COLOR = QColor(134, 134, 100) + + CONCRETE_COLOR = QColor(225, 225, 225) + BARRIER_COLOR = QColor(126, 126, 126) + MEDIAN_COLOR = QColor(221, 221, 221) + RAILING_COLOR = QColor(126, 126, 126) + + BEARING_COLOR = QColor(255, 0, 0) def __init__(self, parent=None): super().__init__(parent) @@ -555,8 +566,14 @@ def draw_dimension_arrow(self, painter, x1, y1, x2, y2, text, horizontal=True, o text_x = x1 + (12 if offset >= 0 else -45) + text_offset text_y = (y1 + y2) / 2 + 3 + painter.save() + painter.setCompositionMode(QPainter.CompositionMode_SourceOver) + + self.draw_text_with_background(painter, text_x, text_y, text, QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, True) + painter.restore() + def draw_dimension_arrow_text_outside(self, painter, x1, y1, x2, y2, text, horizontal=True, text_side='right', text_offset=15): @@ -1153,12 +1170,25 @@ def draw_cross_section(self, painter): # Mid of top & bottom flange (REFERENCE POINTS) top_flange_mid_y = girder_top_edge + tf_top / 2 bottom_flange_mid_y = girder_bottom_edge - tf_bottom / 2 + # --- Correct connection points (flange-web junction) --- + top_connection_y = girder_top_edge + tf_top + (0.02 * girder_depth_visual) + bottom_connection_y = girder_bottom_edge - tf_bottom + (0.02 * girder_depth_visual) + for i in range(n - 1): - x1 = positions[i] - x2 = positions[i + 1] + # Shift bracing attachment from girder center to inner web face + web_thickness_px = ( + self.girder['web_thickness'] * scale * + self.girder_visual_scale['web_thickness'] + ) + + half_web = web_thickness_px / 2.0 + + x1 = positions[i] + half_web + x2 = positions[i + 1] - half_web + # Draw cross bracing lines line_spacing = 3 @@ -1182,10 +1212,10 @@ def draw_cross_section(self, painter): # CROSS BRACING 1 (\ direction) - p1 = QPointF(x1 + off_x, top_flange_mid_y + off_y) - p2 = QPointF(x2 + off_x, bottom_flange_mid_y + off_y) - p3 = QPointF(x2 - off_x, bottom_flange_mid_y - off_y) - p4 = QPointF(x1 - off_x, top_flange_mid_y - off_y) + p1 = QPointF(x1 + off_x, top_connection_y + off_y) + p2 = QPointF(x2 + off_x, bottom_connection_y + off_y) + p3 = QPointF(x2 - off_x, bottom_connection_y - off_y) + p4 = QPointF(x1 - off_x, top_connection_y - off_y) painter.setPen(Qt.NoPen) painter.setBrush(QBrush(CROSS_BRACING_COLOR)) @@ -1198,10 +1228,10 @@ def draw_cross_section(self, painter): # CROSS BRACING 2 (/ direction) - p1 = QPointF(x1 + off_x, bottom_flange_mid_y + off_y) - p2 = QPointF(x2 + off_x, top_flange_mid_y + off_y) - p3 = QPointF(x2 - off_x, top_flange_mid_y - off_y) - p4 = QPointF(x1 - off_x, bottom_flange_mid_y - off_y) + p1 = QPointF(x1 + off_x, bottom_connection_y + off_y) + p2 = QPointF(x2 + off_x, top_connection_y + off_y) + p3 = QPointF(x2 - off_x, top_connection_y - off_y) + p4 = QPointF(x1 - off_x, bottom_connection_y - off_y) painter.setPen(Qt.NoPen) painter.setBrush(QBrush(CROSS_BRACING_COLOR)) @@ -1395,7 +1425,9 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r fp_start_x = deck_left_x + railing_width_px fp_end_x = left_barrier_x fp_visible_mm = (fp_end_x - fp_start_x) / scale - fp_visible_m = fp_visible_mm / 1000 + fp_visible_mm = round(fp_visible_mm, 1) + + fp_visible_m = round(fp_visible_mm / 1000.0, 2) if fp_visible_m > 0: self.draw_dimension_arrow(painter, fp_start_x, Y_TOP_COMMON, fp_end_x, Y_TOP_COMMON, @@ -1445,7 +1477,9 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r fp_start_x = right_barrier_end_x fp_end_x = deck_right_x - railing_width_px fp_visible_mm = (fp_end_x - fp_start_x) / scale - fp_visible_m = fp_visible_mm / 1000 + fp_visible_mm = round(fp_visible_mm, 1) + + fp_visible_m = round(fp_visible_mm / 1000.0, 2) if fp_visible_m > 0: self.draw_dimension_arrow(painter, fp_start_x, Y_TOP_COMMON, fp_end_x, Y_TOP_COMMON, diff --git a/src/osdagbridge/desktop/ui/docks/cad_top_view.py b/src/osdagbridge/desktop/ui/docks/cad_top_view.py index cb0f24011..4fce0fc3d 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_top_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_top_view.py @@ -8,6 +8,8 @@ from PySide6.QtWidgets import QWidget, QPushButton, QScrollArea from PySide6.QtCore import Qt, QRectF, QPointF from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF +from .cad_cross_section import CrossSectionCADWidget + class TopViewCADWidget(QWidget): """Widget for drawing bridge top view""" @@ -739,9 +741,10 @@ def draw_top_view(self, painter): self.top_view_hover_zones = [] # Define colors - GIRDER_COLOR = QColor(40, 90, 160) - CROSS_BRACING_COLOR = QColor(220, 130, 40) - END_DIAPHRAGM_COLOR = QColor(120, 70, 40) + GIRDER_COLOR = CrossSectionCADWidget.GIRDER_COLOR + CROSS_BRACING_COLOR = CrossSectionCADWidget.CROSS_BRACING_COLOR + END_DIAPHRAGM_COLOR = CrossSectionCADWidget.END_DIAPHRAGM_COLOR + # Highlight colors GIRDER_HIGHLIGHT = QColor(80, 140, 220) From 93dc3a7c31da277929ecd61853b9f2bc08c25c78 Mon Sep 17 00:00:00 2001 From: nishikantmandal007 Date: Thu, 19 Feb 2026 14:49:30 +0530 Subject: [PATCH 045/225] Added the plategirderbridge.py file --- .../plate_girder/plategirderbridge.py | 448 ++++++++++++++++++ 1 file changed, 448 insertions(+) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index e69de29bb..c776cc09b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -0,0 +1,448 @@ +"""Main plate-girder workflow stitcher. + +This module wires the plate girder pieces together in one place: +basic input -> additional input -> initial sizing -> geometry -> +analysis -> analysis results -> girder design -> modifier hook -> +plot/CAD/report outputs. +""" + +from __future__ import annotations + +from dataclasses import asdict, dataclass, field +from typing import Any, Callable, Dict, Mapping, Optional + +from osdagbridge.core.utils.common import ( + DEFAULT_CRASH_BARRIER_WIDTH, + DEFAULT_GIRDER_SPACING, + DEFAULT_RAILING_WIDTH, + KEY_CARRIAGEWAY_WIDTH, + KEY_CRASH_BARRIER_WIDTH, + KEY_DECK_OVERHANG, + KEY_DECK_THICKNESS, + KEY_FOOTPATH_WIDTH, + KEY_GIRDER_BOTTOM_FLANGE_WIDTH, + KEY_GIRDER_DEPTH, + KEY_GIRDER_SPACING, + KEY_GIRDER_SYMMETRY, + KEY_GIRDER_TOP_FLANGE_WIDTH, + KEY_GIRDER_TOP_FLANGE_THICKNESS, + KEY_GIRDER_WEB_THICKNESS, + KEY_INCLUDE_MEDIAN, + KEY_NO_OF_GIRDERS, + KEY_RAILING_WIDTH, + KEY_SKEW_ANGLE, + KEY_SPAN, + MIN_FOOTPATH_WIDTH, +) + +from .bridge_geometry import BridgeGeometry, CrossSectionLayout +from .cad_generator import export_step +from .designer import design +from .initial_sizing import BridgeConfigurationSolver, preliminary_sizing +from .report_generator import section_report +from .ui_fields import FrontendData +from .ui_fields_additional_input import ( + CRASH_BARRIER_TAB_SCHEMA, + DESIGN_OPTIONS_CONT_SCHEMA, + DESIGN_OPTIONS_SCHEMA, + GIRDER_DETAILS_SCHEMA, + LANE_DETAILS_TAB_SCHEMA, + LAYOUT_TAB_SCHEMA, + MEDIAN_TAB_SCHEMA, + RAILING_TAB_SCHEMA, + SUPPORT_CONDITIONS_SCHEMA, + WEARING_COURSE_TAB_SCHEMA, +) + +try: + from .dto import PlateGirderDTO +except Exception: + @dataclass + class PlateGirderDTO: + """Fallback DTO when dto.py is unavailable.""" + + name: str + + +def _first_present(source: Mapping[str, Any], *keys: str) -> Any: + for key in keys: + if key in source and source[key] not in ("", None): + return source[key] + return None + + +def _as_float(value: Any, default: float) -> float: + if value in ("", None): + return default + try: + return float(value) + except (TypeError, ValueError): + return default + + +def _as_int(value: Any, default: int) -> int: + if value in ("", None): + return default + try: + return int(float(value)) + except (TypeError, ValueError): + return default + + +def _as_bool(value: Any, default: bool = False) -> bool: + if value is None: + return default + if isinstance(value, bool): + return value + if isinstance(value, (int, float)): + return bool(value) + return str(value).strip().lower() in {"1", "true", "yes", "y"} + + +def _to_m(value: Any) -> float: + """Accept meters directly; if value looks like mm, convert to meters.""" + as_float = _as_float(value, 0.0) + return as_float / 1000.0 if as_float > 10.0 else as_float + + +@dataclass +class PlateGirderRunResult: + dto: PlateGirderDTO + initial_sizing: Dict[str, Any] = field(default_factory=dict) + geometry: Dict[str, Any] = field(default_factory=dict) + analysis: Dict[str, Any] = field(default_factory=dict) + analysis_results: Dict[str, Any] = field(default_factory=dict) + design: Dict[str, Any] = field(default_factory=dict) + modifier: Dict[str, Any] = field(default_factory=dict) + cad: Dict[str, Any] = field(default_factory=dict) + report: Dict[str, Any] = field(default_factory=dict) + + def to_dict(self) -> Dict[str, Any]: + return asdict(self) + + +class PlateGirderBridge: + """Coordinator that stitches all plate-girder modules.""" + + def __init__( + self, + basic_inputs: Optional[Mapping[str, Any]] = None, + additional_inputs: Optional[Mapping[str, Any]] = None, + modifier_hook: Optional[Callable[[PlateGirderRunResult], Dict[str, Any]]] = None, + ) -> None: + self.basic_inputs = dict(basic_inputs or {}) + self.additional_inputs = dict(additional_inputs or {}) + self.modifier_hook = modifier_hook + self._analysis_engine = None + + @staticmethod + def get_basic_input_schema() -> list: + return FrontendData().input_values() + + @staticmethod + def get_additional_input_schema() -> Dict[str, Dict[str, Any]]: + return { + "layout": LAYOUT_TAB_SCHEMA, + "crash_barrier": CRASH_BARRIER_TAB_SCHEMA, + "median": MEDIAN_TAB_SCHEMA, + "railing": RAILING_TAB_SCHEMA, + "wearing_course": WEARING_COURSE_TAB_SCHEMA, + "lane_details": LANE_DETAILS_TAB_SCHEMA, + "support_conditions": SUPPORT_CONDITIONS_SCHEMA, + "design_options": DESIGN_OPTIONS_SCHEMA, + "design_options_cont": DESIGN_OPTIONS_CONT_SCHEMA, + "girder_details": GIRDER_DETAILS_SCHEMA, + } + + def _footpath_count(self) -> int: + footpath_value = _first_present(self.basic_inputs, "footpath", "Footpath") + if footpath_value is None: + return 0 + text = str(footpath_value).strip().lower() + if "both" in text: + return 2 + if "single" in text: + return 1 + return 0 + + def _build_dto(self) -> PlateGirderDTO: + structure_name = _first_present( + self.basic_inputs, + "Structure Type", + "structure_type", + "name", + ) + return PlateGirderDTO(name=str(structure_name or "plate_girder_bridge")) + + def _run_initial_sizing(self, dto: PlateGirderDTO) -> Dict[str, Any]: + span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) + carriageway_width = _as_float( + _first_present(self.basic_inputs, KEY_CARRIAGEWAY_WIDTH, "carriageway_width"), + 10.0, + ) + no_of_footpaths = self._footpath_count() + include_median = _as_bool(_first_present(self.basic_inputs, KEY_INCLUDE_MEDIAN, "include_median")) + + crash_barrier_width = _as_float( + _first_present(self.additional_inputs, KEY_CRASH_BARRIER_WIDTH, "crash_barrier_width"), + DEFAULT_CRASH_BARRIER_WIDTH, + ) + footpath_width = _as_float( + _first_present(self.additional_inputs, KEY_FOOTPATH_WIDTH, "footpath_width"), + MIN_FOOTPATH_WIDTH if no_of_footpaths else 0.0, + ) + railing_width = _as_float( + _first_present(self.additional_inputs, KEY_RAILING_WIDTH, "railing_width"), + DEFAULT_RAILING_WIDTH if no_of_footpaths else 0.0, + ) + median_width = _as_float(_first_present(self.additional_inputs, "median_width"), 0.0) + if not include_median: + median_width = 0.0 + + n_girders = max( + 2, + _as_int(_first_present(self.additional_inputs, KEY_NO_OF_GIRDERS, "no_of_girders"), 4), + ) + girder_spacing = _as_float( + _first_present(self.additional_inputs, KEY_GIRDER_SPACING, "girder_spacing"), + DEFAULT_GIRDER_SPACING, + ) + deck_overhang = _as_float( + _first_present(self.additional_inputs, KEY_DECK_OVERHANG, "deck_overhang"), + 0.5 * DEFAULT_GIRDER_SPACING, + ) + + top_flange_w = _to_m( + _first_present(self.additional_inputs, KEY_GIRDER_TOP_FLANGE_WIDTH, "top_flange_width") + ) + bot_flange_w = _to_m( + _first_present(self.additional_inputs, KEY_GIRDER_BOTTOM_FLANGE_WIDTH, "bottom_flange_width") + ) + max_flange_width = max(top_flange_w, bot_flange_w, 0.0) + + solver = BridgeConfigurationSolver( + carriageway_width=carriageway_width, + crash_barrier_width=crash_barrier_width, + footpath_width=footpath_width, + railing_width=railing_width, + median_width=median_width, + no_of_footpaths=no_of_footpaths, + flange_width=max_flange_width, + ) + + changed_field = "girders" + if _first_present(self.additional_inputs, KEY_DECK_OVERHANG, "deck_overhang") is not None: + changed_field = "overhang" + elif _first_present(self.additional_inputs, KEY_GIRDER_SPACING, "girder_spacing") is not None: + changed_field = "spacing" + + layout_result = solver._solve_layout( + no_of_girders=n_girders, + girder_spacing=girder_spacing, + deck_overhang=deck_overhang, + changed_field=changed_field, + ) + + deck_thickness = solver.get_deck_thickness( + _as_float(_first_present(self.additional_inputs, KEY_DECK_THICKNESS, "deck_thickness"), 200.0) + ) + footpath_width_checked = solver.get_footpath_width( + user_value=footpath_width, + footpath={0: "None", 1: "Single Side", 2: "Both Sides"}.get(no_of_footpaths, "None"), + ) + section_properties = solver.compute_section_properties( + span=span, + symmetry=str( + _first_present(self.additional_inputs, KEY_GIRDER_SYMMETRY, "symmetry") + or "Girder Symmetric" + ), + user_depth=_to_m(_first_present(self.additional_inputs, KEY_GIRDER_DEPTH, "depth")), + B_top=top_flange_w, + B_bot=bot_flange_w, + t_f_top=_to_m( + _first_present(self.additional_inputs, KEY_GIRDER_TOP_FLANGE_THICKNESS, "top_flange_thickness") + ), + t_f_bot=_to_m(_first_present(self.additional_inputs, "bottom_flange_thickness")), + t_w=_to_m(_first_present(self.additional_inputs, KEY_GIRDER_WEB_THICKNESS, "web_thickness")), + ) + + return { + "legacy_initial_sizing": preliminary_sizing(dto), + "layout": asdict(layout_result), + "deck_thickness_mm": deck_thickness, + "footpath_width_m": footpath_width_checked, + "section_properties": section_properties, + "inputs_resolved": { + "span_m": span, + "carriageway_width_m": carriageway_width, + "crash_barrier_width_m": crash_barrier_width, + "railing_width_m": railing_width, + "median_width_m": median_width, + "no_of_footpaths": no_of_footpaths, + }, + } + + def _build_geometry(self, initial_sizing: Dict[str, Any]) -> Dict[str, Any]: + span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) + layout_data = initial_sizing["layout"] + resolved = initial_sizing["inputs_resolved"] + + layout = CrossSectionLayout( + carriageway_width=resolved["carriageway_width_m"], + crash_barrier_width=resolved["crash_barrier_width_m"], + railing_width=resolved["railing_width_m"], + footpath_width=initial_sizing["footpath_width_m"], + median_width=resolved["median_width_m"], + no_of_footpaths=resolved["no_of_footpaths"], + ) + geometry = BridgeGeometry(span=span, width=layout.total_width) + layout.verify_bridge_width( + num_long_grid=layout_data["no_of_girders"], + ext_to_int_dist=layout_data["girder_spacing"], + edge_beam_dist=layout_data["deck_overhang"], + tol=1e-3, + ) + + return { + "span_m": geometry.span, + "width_m": geometry.width, + "bounds": geometry.bounds(), + "cross_section": layout.describe(), + } + + def _prepare_or_run_analysis( + self, + initial_sizing: Dict[str, Any], + run_analysis: bool, + include_live_load: bool, + ) -> Dict[str, Any]: + try: + from .analyser import BridgeGrillageModel # Imported lazily: heavy deps. + except Exception as exc: + return {"status": "skipped", "reason": f"analysis backend import failed: {exc}"} + + layout = initial_sizing["layout"] + span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) + skew = _as_float(_first_present(self.basic_inputs, KEY_SKEW_ANGLE, "skew_angle"), 0.0) + + engine = BridgeGrillageModel() + engine.L = span + engine.n_l = layout["no_of_girders"] + engine.ext_to_int_dist = layout["girder_spacing"] + engine.edge_dist = layout["deck_overhang"] + engine.angle = skew + engine.create_model() + + created_dead = [] + for method_name in ( + "create_self_weight_load", + "create_deck_load", + "create_wearing_course_load", + "create_footpath_load", + "create_crash_barrier_load", + "create_railing_load", + "create_median_load", + ): + method = getattr(engine, method_name) + load_case = method() + if load_case is not None: + created_dead.append(method_name) + + created_live = [] + if include_live_load: + for method_name in ( + "create_vehicle_load_cases", + "add_vehicle_load_cases_from_combinations", + "create_moving_vehicle_load_cases", + ): + getattr(engine, method_name)() + created_live.append(method_name) + + status = "prepared" + if run_analysis: + engine.analyze() + status = "completed" + + self._analysis_engine = engine + return { + "status": status, + "dead_load_steps": created_dead, + "live_load_steps": created_live, + } + + def _collect_analysis_results(self, analysis: Dict[str, Any]) -> Dict[str, Any]: + if analysis.get("status") == "skipped": + return {"status": "skipped", "reason": analysis.get("reason")} + if analysis.get("status") != "completed": + return { + "status": "not_run", + "note": "Analysis model is prepared. Run with run_analysis=True to produce results.", + } + return {"status": "completed", "note": "Use BridgeGrillageModel results/plot APIs for detailed tables."} + + def run( + self, + *, + run_analysis: bool = False, + include_live_load: bool = True, + cad_path: Optional[str] = None, + ) -> PlateGirderRunResult: + dto = self._build_dto() + initial_sizing = self._run_initial_sizing(dto) + geometry = self._build_geometry(initial_sizing) + analysis = self._prepare_or_run_analysis(initial_sizing, run_analysis, include_live_load) + analysis_results = self._collect_analysis_results(analysis) + design_result = design(dto) + + modifier_result: Dict[str, Any] = {"status": "skipped", "reason": "no modifier hook provided"} + if self.modifier_hook is not None: + temp = PlateGirderRunResult( + dto=dto, + initial_sizing=initial_sizing, + geometry=geometry, + analysis=analysis, + analysis_results=analysis_results, + design=design_result, + ) + modifier_result = self.modifier_hook(temp) + + cad_result: Dict[str, Any] = {"status": "skipped"} + if cad_path: + export_step(dto, cad_path) + cad_result = {"status": "generated", "path": cad_path} + + report_result = section_report(dto) + + return PlateGirderRunResult( + dto=dto, + initial_sizing=initial_sizing, + geometry=geometry, + analysis=analysis, + analysis_results=analysis_results, + design=design_result, + modifier=modifier_result, + cad=cad_result, + report=report_result, + ) + + +def run_plategirder_bridge( + basic_inputs: Optional[Mapping[str, Any]] = None, + additional_inputs: Optional[Mapping[str, Any]] = None, + *, + run_analysis: bool = False, + include_live_load: bool = True, + cad_path: Optional[str] = None, + modifier_hook: Optional[Callable[[PlateGirderRunResult], Dict[str, Any]]] = None, +) -> Dict[str, Any]: + """Functional wrapper around PlateGirderBridge.""" + bridge = PlateGirderBridge( + basic_inputs=basic_inputs, + additional_inputs=additional_inputs, + modifier_hook=modifier_hook, + ) + return bridge.run( + run_analysis=run_analysis, + include_live_load=include_live_load, + cad_path=cad_path, + ).to_dict() From 752cf32e99fe5c359c74fdd39f4897e630f0afce Mon Sep 17 00:00:00 2001 From: nishikantmandal007 Date: Thu, 19 Feb 2026 15:19:12 +0530 Subject: [PATCH 046/225] added main file --- .../core/bridge_types/plate_girder/plategirderbridge.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index c776cc09b..fad6604b1 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -1,10 +1,4 @@ -"""Main plate-girder workflow stitcher. - -This module wires the plate girder pieces together in one place: -basic input -> additional input -> initial sizing -> geometry -> -analysis -> analysis results -> girder design -> modifier hook -> -plot/CAD/report outputs. -""" +"""Main PG bridge file """ from __future__ import annotations From 31d610a5c5e1199dec61e5343750d9783ceac33c Mon Sep 17 00:00:00 2001 From: Sreejesh06 Date: Mon, 23 Feb 2026 20:11:24 +0530 Subject: [PATCH 047/225] Sqaushed All Works - Basic Input Generalisation - Member properties Enhancement (Rolled section / Welded section Preview Developed) - Cross Bracing enhanced Consistency - End Diaphragm is Completely Refactored - Saving Methodology Introduced for Additional Inputs --- .gitignore | 4 + .../bridge_types/plate_girder/ui_fields.py | 487 ++- .../ui_fields_additional_input.py | 34 +- src/osdagbridge/core/utils/common.py | 40 +- .../desktop/ui/dialogs/additional_inputs.py | 117 +- .../desktop/ui/dialogs/tabs/common.py | 84 + .../ui/dialogs/tabs/section_properties_tab.py | 195 ++ .../cross_bracing_details_tab.py | 620 +++- .../end_diaphragm_details_tab.py | 1351 ++++++++- .../section_properties/girder_details_tab.py | 2621 +++++++++++++++-- .../stiffener_details_tab.py | 515 +++- .../dialogs/tabs/typical_section_details.py | 38 +- .../desktop/ui/docks/input_dock.py | 1296 ++++---- .../desktop/ui/docks/output_dock.py | 624 ++-- src/osdagbridge/desktop/ui/template_page.py | 2 +- .../desktop/ui/utils/cad_palette.py | 29 + .../ui/utils/rolled_section_preview.py | 700 +++++ .../ui/widgets/placeholder_section_preview.py | 66 + .../desktop/ui/widgets/section_viewer.py | 36 +- 19 files changed, 7489 insertions(+), 1370 deletions(-) create mode 100644 src/osdagbridge/desktop/ui/utils/cad_palette.py create mode 100644 src/osdagbridge/desktop/ui/utils/rolled_section_preview.py create mode 100644 src/osdagbridge/desktop/ui/widgets/placeholder_section_preview.py diff --git a/.gitignore b/.gitignore index bdbaf4cb5..0dd896628 100644 --- a/.gitignore +++ b/.gitignore @@ -202,6 +202,10 @@ cython_debug/ .cursorignore .cursorindexingignore +# macOS +.DS_Store +**/.DS_Store + # Marimo marimo/_static/ marimo/_lsp/ diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index dbb32b442..9c5216b4f 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -1,6 +1,16 @@ from osdagbridge.core.utils.common import * +""" +( + key, + display_name, + ui_type, + values, + is_visible, + validator, + ui_config_dict +) - +""" class FrontendData: """Backend for Highway Bridge Design""" @@ -8,74 +18,316 @@ def __init__(self): self.module = KEY_DISP_FINPLATE self.design_status = False self.design_button_status = False - # Session-level UI input state (in-memory only) + + # Simple UI state store (input/output docks). + # The docks can set values here, and `input_values()` can use them as defaults. self._input_state: dict[str, object] = {} self._output_state: dict[str, object] = {} - def set_input_value(self, key: str, value: object) -> None: - """Store a single UI input value in memory.""" + # ----------------------------- + # Generic state getters/setters + # ----------------------------- + def set_input_value(self, key: str, value): + if not key: + return self._input_state[key] = value + # print(f"DEBUG: Backend updated -> {key}: {value}") - def get_input_value(self, key: str, default: object = None) -> object: - """Retrieve a single UI input value from memory.""" + def get_input_value(self, key: str, default=None): + if not key: + return default return self._input_state.get(key, default) - def set_input_values(self, values: dict[str, object] | None) -> None: - """Bulk update input state.""" - if values: - self._input_state.update(values) - - def get_input_values_dict(self, include_empty: bool = True) -> dict[str, object]: - """Export all current input state.""" - if include_empty: - return dict(self._input_state) - return {k: v for k, v in self._input_state.items() if v not in (None, "", [])} - - def input_values(self): - """Return list of input fields for the UI""" - options_list = [] - - t1 = (KEY_MODULE, KEY_DISP_FINPLATE, TYPE_MODULE, None, True, 'No Validator') - options_list.append(t1) + def set_output_value(self, key: str, value): + if not key: + return + self._output_state[key] = value - t2 = (None, DISP_TITLE_STRUCTURE, TYPE_TITLE, None, True, 'No Validator') - options_list.append(t2) + def get_output_value(self, key: str, default=None): + if not key: + return default + return self._output_state.get(key, default) - t3 = (KEY_STRUCTURE_TYPE, KEY_DISP_STRUCTURE_TYPE, TYPE_COMBOBOX, VALUES_STRUCTURE_TYPE, True, 'No Validator') - options_list.append(t3) + def set_input_values(self, values: dict): + """Bulk update input state (e.g., when loading a saved project).""" + if not isinstance(values, dict): + return + for k, v in values.items(): + if isinstance(k, str): + self._input_state[k] = v + - t4 = (None, DISP_TITLE_PROJECT, TYPE_TITLE, None, True, 'No Validator') - options_list.append(t4) + def get_input_values_dict(self, include_empty: bool = False) -> dict: + """Export current input state; can be fed into analyzers/designers later.""" + if include_empty: + return dict(self._input_state) + return {k: v for k, v in self._input_state.items() if v not in (None, "")} - t5 = (KEY_PROJECT_LOCATION, KEY_DISP_PROJECT_LOCATION, TYPE_COMBOBOX, VALUES_PROJECT_LOCATION, True, 'No Validator') - options_list.append(t5) + def _iter_defined_input_keys(self): + """Yield keys that represent actual inputs (not titles/modules).""" + for item in self.input_values(): + if not isinstance(item, tuple) or len(item) < 3: + continue + key, _label, ui_type = item[0], item[1], item[2] + if not isinstance(key, str): + continue + if ui_type in (TYPE_TITLE, TYPE_MODULE): + continue + yield key - t6 = (None, DISP_TITLE_GEOMETRIC, TYPE_TITLE, None, True, 'No Validator') - options_list.append(t6) + def list_input_keys(self) -> list[str]: + """Return input keys in UI definition order.""" + seen: set[str] = set() + ordered: list[str] = [] + for key in self._iter_defined_input_keys(): + if key in seen: + continue + seen.add(key) + ordered.append(key) + return ordered - t7 = (KEY_SPAN, KEY_DISP_SPAN, TYPE_TEXTBOX, None, True, 'Double Validator') - options_list.append(t7) + def export_basic_inputs_as_list(self, include_empty: bool = False) -> list[dict]: + """Export basic inputs as a list of single-key dictionaries. - t8 = (KEY_CARRIAGEWAY_WIDTH, KEY_DISP_CARRIAGEWAY_WIDTH, TYPE_TEXTBOX, None, True, 'Double Validator') - options_list.append(t8) + Example: [{"span": 30.0}, {"carriageway_width": 7.5}, ...] + """ + values = self.get_input_values_dict(include_empty=include_empty) + out: list[dict] = [] + for key in self.list_input_keys(): + if key not in values: + continue + value = values.get(key) + if not include_empty and value in (None, ""): + continue + out.append({key: value}) + return out - t9 = (KEY_FOOTPATH, KEY_DISP_FOOTPATH, TYPE_COMBOBOX, VALUES_FOOTPATH, True, 'No Validator') - options_list.append(t9) + def set_final_design_inputs(self, final_inputs: list[dict]) -> None: + """Persist the final merged input payload for design execution.""" + if not isinstance(final_inputs, list): + return + self.set_input_value("final_design_inputs", final_inputs) + + def input_values(self): + """Return structured list of input definitions for the UI""" + options_list = [] - t10 = (KEY_SKEW_ANGLE, KEY_DISP_SKEW_ANGLE, TYPE_TEXTBOX, None, True, 'Double Validator') - options_list.append(t10) + options_list.append( + (KEY_MODULE, KEY_DISP_FINPLATE, TYPE_MODULE, None, True, 'No Validator', {}) + ) - t11 = (None, DISP_TITLE_MATERIAL, TYPE_TITLE, None, True, 'No Validator') - options_list.append(t11) + # Type of Structure + options_list.append( + ( + "section_structure", + DISP_TITLE_STRUCTURE, + TYPE_TITLE, + None, + True, + 'No Validator', + { + "container": "main", + "post_note": { + "text": "*Other structures not included", + "attr": "structure_note", + }, + }, + ) + ) + options_list.append( + ( + KEY_STRUCTURE_TYPE, + KEY_DISP_STRUCTURE_TYPE, + TYPE_COMBOBOX, + VALUES_STRUCTURE_TYPE, + True, + 'No Validator', + {}, + ) + ) - t12 = (KEY_GIRDER, KEY_DISP_GIRDER, TYPE_COMBOBOX, connectdb("Material"), True, 'No Validator') - options_list.append(t12) + # Project Location (custom content handled in dock) + options_list.append( + ( + "section_project_location", + DISP_TITLE_PROJECT, + TYPE_TITLE, + None, + True, + 'No Validator', + { + "container": "main", + "custom_content": "project_location", + "show_group_title": False, + "header_label": "Project Location*", + "button_rows": [ + { + "type": "project_location", + "buttons": [ + { + "text": "Add Here", + "action": "show_project_location_dialog", + } + ], + } + ], + }, + ) + ) - t13 = (KEY_CROSS_BRACING, KEY_DISP_CROSS_BRACING, TYPE_COMBOBOX, connectdb("Material"), True, 'No Validator') - options_list.append(t13) + # Geometric Details + options_list.append( + ( + "section_geometric", + DISP_TITLE_GEOMETRIC, + TYPE_TITLE, + None, + True, + 'No Validator', + { + "container": "superstructure", + "post_rows": [ + { + "type": "additional_geometry", + "label": "Additional Geometry", + "buttons": [ + { + "text": "Modify Here", + "action": "show_additional_inputs", + } + ], + } + ], + }, + ) + ) + options_list.append( + ( + KEY_SPAN, + KEY_DISP_SPAN, + TYPE_TEXTBOX, + None, + True, + 'Double Validator', + {"label": "Span*"}, + ) + ) + options_list.append( + ( + KEY_CARRIAGEWAY_WIDTH, + KEY_DISP_CARRIAGEWAY_WIDTH, + TYPE_TEXTBOX, + None, + True, + 'Double Validator', + {"label": "Carriageway Width*"}, + ) + ) + options_list.append( + ( + KEY_INCLUDE_MEDIAN, + "Include Median", + TYPE_COMBOBOX, + VALUES_YES_NO, + True, + 'No Validator', + {"label": "Include Median", "default": "No", "add_stretch": True}, + ) + ) + options_list.append( + ( + KEY_FOOTPATH, + KEY_DISP_FOOTPATH, + TYPE_COMBOBOX, + VALUES_FOOTPATH, + True, + 'No Validator', + {"label": "Footpath", "default": "None"}, + ) + ) + options_list.append( + ( + KEY_SKEW_ANGLE, + KEY_DISP_SKEW_ANGLE, + TYPE_TEXTBOX, + None, + True, + 'Double Validator', + {"label": "Skew Angle"}, + ) + ) - t14 = (KEY_DECK, KEY_DISP_DECK, TYPE_COMBOBOX, connectdb("Material"), True, 'No Validator') - options_list.append(t14) + # Material Inputs + options_list.append( + ( + "section_material", + DISP_TITLE_MATERIAL, + TYPE_TITLE, + None, + True, + 'No Validator', + { + "container": "superstructure", + "post_rows": [ + { + "type": "material_properties", + "label": "Properties", + "buttons": [ + { + "text": "Modify Here", + "action": "show_material_properties_dialog", + } + ], + } + ], + }, + ) + ) + material_values = connectdb("Material") + options_list.append( + ( + KEY_GIRDER, + KEY_DISP_GIRDER, + TYPE_COMBOBOX, + material_values, + True, + 'No Validator', + {"label": "Girder"}, + ) + ) + options_list.append( + ( + KEY_CROSS_BRACING, + KEY_DISP_CROSS_BRACING, + TYPE_COMBOBOX, + material_values, + True, + 'No Validator', + {"label": "Cross Bracing"}, + ) + ) + options_list.append( + ( + KEY_END_DIAPHRAGM, + KEY_DISP_END_DIAPHRAGM, + TYPE_COMBOBOX, + material_values, + True, + 'No Validator', + {"label": "End Diaphragm"}, + ) + ) + options_list.append( + ( + KEY_DECK_CONCRETE_GRADE_BASIC, + KEY_DISP_DECK_CONCRETE_GRADE, + TYPE_COMBOBOX, + VALUES_DECK_CONCRETE_GRADE, + True, + 'No Validator', + {"label": "Deck", "default": "M 25"}, + ) + ) return options_list @@ -83,10 +335,139 @@ def set_osdaglogger(self, key): """Logger setup""" print("Logger set up (mock)") - def output_values(self, flag): - """output values List""" - return [] + def output_values(self, flag=None): + """Return output dock definitions using the same tuple structure as input_values.""" + outputs = [] + + outputs.append( + ( + "section_output_analysis", + "Analysis Results", + TYPE_TITLE, + None, + True, + "No Validator", + { + "kind": "analysis", + "fields": [ + ( + "analysis_member", + "Member:", + "combobox", + ["All"], + True, + "No Validator", + {"label_min_width": 100}, + ), + ( + "analysis_load_combination", + "Load Combination:", + "combobox", + ["Envelope"], + True, + "No Validator", + {"label_min_width": 100}, + ), + ( + "analysis_forces", + "Forces", + "checkbox_grid", + [ + ["Fx", "Mx", "Dx"], + ["Fy", "My", "Dy"], + ["Fz", "Mz", "Dz"], + ], + True, + "No Validator", + {}, + ), + ( + "analysis_display_options", + "Display Options:", + "checkbox_row", + ["Max", "Min"], + True, + "No Validator", + {}, + ), + ( + "analysis_utilization", + "Controlling Utilization Ratio", + "checkbox", + None, + True, + "No Validator", + {}, + ), + ], + }, + ) + ) + + outputs.append( + ( + "section_output_superstructure", + "Superstructure", + TYPE_TITLE, + None, + True, + "No Validator", + { + "kind": "design", + "rows": [ + { + "label": "Steel Design", + "buttons": [ + {"text": "Here", "action": "show_additional_inputs"}, + ], + }, + { + "label": "Deck Design", + "buttons": [ + {"text": "Here", "action": "show_additional_inputs"}, + ], + }, + ] + }, + ) + ) + + outputs.append( + ( + "section_output_substructure", + "Substructure", + TYPE_TITLE, + None, + True, + "No Validator", + { + "kind": "design", + "rows": [], + }, + ) + ) + + return outputs def func_for_validation(self, design_inputs): """Validation Function""" - return None \ No newline at end of file + return None + + def prime_defaults_from_definitions(self): + """Populate state with any defaults declared in `input_values()` metadata.""" + for item in self.input_values(): + if not isinstance(item, tuple) or len(item) < 7: + continue + key, _label, ui_type, values, _required, _validator, metadata = item + if not isinstance(key, str): + continue + if ui_type in (TYPE_TITLE, TYPE_MODULE): + continue + if key in self._input_state: + continue + default = (metadata or {}).get("default") + if default is not None: + self._input_state[key] = default + elif ui_type == TYPE_COMBOBOX and isinstance(values, (list, tuple)) and values: + # If no explicit default is provided, keep the first item as a sensible initial value. + self._input_state[key] = values[0] diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py index ea4eed544..1178ea2e7 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py @@ -11,6 +11,14 @@ DEFAULT_RAILING_WIDTH, MIN_FOOTPATH_WIDTH, MIN_RAILING_HEIGHT, + VALUES_GIRDER_DESIGN_MODE, + VALUES_GIRDER_SPAN_MODE, + VALUES_GIRDER_SYMMETRY, + VALUES_GIRDER_TYPE, + VALUES_PROFILE_SCOPE, + VALUES_TORSIONAL_RESTRAINT, + VALUES_WARPING_RESTRAINT, + VALUES_WEB_TYPE, VALUES_RAILING_TYPE, VALUES_WEARING_COAT_MATERIAL, ) @@ -35,7 +43,7 @@ "type": "line", "validator": {"type": "int_range", "bottom": 1, "top": 100}, "bind": "no_of_girders", - "on_text_changed": "on_no_of_girders_changed", + "on_editing_finished": "on_no_of_girders_changed", }, ] }, @@ -1342,7 +1350,7 @@ "id": "span", "label": "Span:", "type": "combo", - "choices": ["Full Length", "Custom"], + "choices": VALUES_GIRDER_SPAN_MODE, "bind": "span_combo", }, ], @@ -1351,7 +1359,7 @@ "id": "design", "label": "Design:", "type": "combo", - "choices": ["Customized", "Optimized"], + "choices": VALUES_GIRDER_DESIGN_MODE, "bind": "design_combo", "visible_for": ["welded"], }, @@ -1359,14 +1367,14 @@ "id": "type", "label": "Type:", "type": "combo", - "choices": ["Welded", "Rolled"], + "choices": VALUES_GIRDER_TYPE, "bind": "type_combo", }, { "id": "symmetry", "label": "Symmetry:", "type": "combo", - "choices": ["Girder Symmetric", "Girder Unsymmetric"], + "choices": VALUES_GIRDER_SYMMETRY, "bind": "symmetry_combo", "visible_for": ["welded"], }, @@ -1394,7 +1402,7 @@ "id": "top_flange_thickness", "label": "Top Flange Thickness (mm):", "type": "mode_line", - "mode_choices": ["All", "Custom"], + "mode_choices": VALUES_PROFILE_SCOPE, "default_mode": "All", "bind_mode": "top_thickness_mode_combo", "bind_value": "top_thickness_input", @@ -1414,7 +1422,7 @@ "id": "bottom_flange_thickness", "label": "Bottom Flange Thickness (mm):", "type": "mode_line", - "mode_choices": ["All", "Custom"], + "mode_choices": VALUES_PROFILE_SCOPE, "default_mode": "All", "bind_mode": "bottom_thickness_mode_combo", "bind_value": "bottom_thickness_input", @@ -1424,7 +1432,7 @@ "id": "web_thickness", "label": "Web Thickness (mm):", "type": "mode_line", - "mode_choices": ["All", "Custom"], + "mode_choices": VALUES_PROFILE_SCOPE, "default_mode": "All", "bind_mode": "web_thickness_mode_combo", "bind_value": "web_thickness_input", @@ -1445,24 +1453,24 @@ "id": "torsional_restraint", "label": "Torsional Restraint:", "type": "combo", - "choices": [ - "Fully Restrained", "Partially Restrained - Support Connect", "Partially Restrained - Bearing Support", - ], + "choices": VALUES_TORSIONAL_RESTRAINT, "bind": "torsion_combo", }, { "id": "warping_restraint", "label": "Warping Restraint:", "type": "combo", - "choices": ["Both Flange Restraint", "No Restraint"], + "choices": VALUES_WARPING_RESTRAINT, "bind": "warping_combo", }, { "id": "web_type", "label": "Web Type*:", "type": "combo", - "choices": ["Thin Web with ITS", "Thick Web"], + "choices": VALUES_WEB_TYPE, "bind": "web_type_combo", }, ], } + +#function -> store in dict design dict \ No newline at end of file diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index 5336059f3..553d8dea4 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -29,6 +29,7 @@ KEY_SPAN = "Span" KEY_CARRIAGEWAY_WIDTH = "Carriageway Width" KEY_INCLUDE_MEDIAN = "Include Median" +# KEY_FOOTPATH = "Footpath" KEY_FOOTPATH = ["None", "Single Side", "Both Sides"] KEY_SKEW_ANGLE = "Skew Angle" KEY_GIRDER = "Girder" @@ -223,10 +224,17 @@ VALUES_GIRDER_TYPE = ["IS Standard Rolled Beam", "Plate Girder"] VALUES_GIRDER_SYMMETRY = ["Symmetrical", "Unsymmetrical"] VALUES_OPTIMIZATION_MODE = ["Optimized", "Customized", "All"] -VALUES_TORSIONAL_RESTRAINT = ["Fully Restrained", "Partially Restrained - Support Connect", "Partially Restrained - Bearing Support"] -VALUES_WARPING_RESTRAINT = ["Both Flange Restraint", "No Restraint"] -VALUES_WEB_TYPE = ["Thin Web", "Thick Web"] -VALUES_STIFFENER_DESIGN = ["Simple Post", "Tension Field"] +VALUES_TORSIONAL_RESTRAINT = [ + "Fully Restrained", + "Partially Restrained - Support Connection", + "Partially Restrained - Bearing Support", +] +VALUES_WARPING_RESTRAINT = ["Both Flanges Restrained", "No Restraint"] +# Plate girder web classification used by the Section Properties UI. +# Thin webs typically require intermediate transverse stiffeners (ITS), whereas +# thick webs do not; keep the labels consistent across desktop UI + schemas. +VALUES_WEB_TYPE = ["Thin Web with ITS", "Thick Web without ITS"] +VALUES_STIFFENER_DESIGN = ["Simple Post Critical", "Tension Field"] VALUES_CROSS_BRACING_TYPE = ["K-bracing", "K-bracing with top bracket", "X-bracing", "X-bracing with bottom bracket", "X-bracing with top and bottom brackets"] VALUES_END_DIAPHRAGM_TYPE = ["Cross Bracing", "Rolled Beam", "Welded Beam"] VALUES_WEARING_COAT_MATERIAL = ["Concrete", "Bituminous", "Other"] @@ -485,13 +493,23 @@ def connectdb(table_name, popup=None): "IRC 5 - Flush Median", "Custom" ] -VALUES_GIRDER_TYPE = ["IS Standard Rolled Beam", "Plate Girder"] -VALUES_GIRDER_SYMMETRY = ["Symmetrical", "Unsymmetrical"] +VALUES_GIRDER_TYPE = ["Welded", "Rolled"] +VALUES_GIRDER_SYMMETRY = ["Girder Symmetric", "Girder Unsymmetric"] +VALUES_GIRDER_DESIGN_MODE = ["Optimized", "Customized"] +VALUES_GIRDER_SPAN_MODE = ["Full Length", "Custom"] +VALUES_PROFILE_SCOPE = ["All", "Custom"] VALUES_OPTIMIZATION_MODE = ["Optimized", "Customized", "All"] -VALUES_TORSIONAL_RESTRAINT = ["Fully Restrained", "Partially Restrained - Support Connect", "Partially Restrained - Bearing Support"] -VALUES_WARPING_RESTRAINT = ["Both Flange Restraint", "No Restraint"] -VALUES_WEB_TYPE = ["Thin Web", "Thick Web"] -VALUES_STIFFENER_DESIGN = ["Simple Post", "Tension Field"] +VALUES_TORSIONAL_RESTRAINT = [ + "Fully Restrained", + "Partially Restrained - Support Connection", + "Partially Restrained - Bearing Support", +] +VALUES_WARPING_RESTRAINT = ["Both Flanges Restrained", "No Restraint"] +# Plate girder web classification used by the Section Properties UI. +# Thin webs typically require intermediate transverse stiffeners (ITS), whereas +# thick webs do not; keep the labels consistent across desktop UI + schemas. +VALUES_WEB_TYPE = ["Thin Web with ITS", "Thick Web without ITS"] +VALUES_STIFFENER_DESIGN = ["Simple Post Critical", "Tension Field"] VALUES_CROSS_BRACING_TYPE = ["K-bracing", "K-bracing with top bracket", "X-bracing", "X-bracing with bottom bracket", "X-bracing with top and bottom brackets"] VALUES_END_DIAPHRAGM_TYPE = ["Cross Bracing", "Rolled Beam", "Welded Beam"] VALUES_WEARING_COAT_MATERIAL = ["Concrete", "Bituminous", "Other"] @@ -503,7 +521,6 @@ def connectdb(table_name, popup=None): VALUES_CUSTOM_AXLE_TYPE = ["Single", "Bogie"] VALUES_FOOTPATH_PRESSURE_MODE = ["Automatic", "User-defined"] VALUES_SUPPORT_TYPE = ["Fixed", "Pinned"] - # Default values DEFAULT_SELF_WEIGHT_FACTOR = 1.0 DEFAULT_CONCRETE_DENSITY = 25.0 # kN/m³ @@ -540,7 +557,6 @@ def connectdb(table_name, popup=None): GPa = kilo * MPa kPa = kilo * Pa - KEY_FOOTPATH = ["None", "Single Side", "Both Sides"] KEY_SAFETY_KERB_MIN_WIDTH = 750 # in mm KEY_SAFETY_KERB_PLACEMENT = ['Single Side', 'Both Sides', ] diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 76dc48078..f5603c0fe 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -47,6 +47,7 @@ def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None): self.setSizeGripEnabled(True) self.footpath_value = footpath_value self.carriageway_width = carriageway_width + self._last_saved_data = {} # Track last saved state self.init_ui() self.setStyleSheet(""" QDialog { @@ -222,36 +223,82 @@ def _create_schema_widget(self, field_def, field_width): return widget def _apply_defaults(self): + """Apply defaults only to the currently visible top-level tab. - """Apply default values to all tabs""" + Important UX: within Member Properties, Defaults should only reset the + currently active sub-tab (not the entire Member Properties area). + """ - if hasattr(self, "typical_section_tab") and hasattr(self.typical_section_tab, "reset_defaults"): - self.typical_section_tab.reset_defaults() - - if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "reset_defaults"): - self.section_properties_tab.reset_defaults() - - if hasattr(self, "loading_tab"): - self.loading_tab.reset_defaults() - - for i in range(self.loading_tab.load_tabs.count()): - tab = self.loading_tab.load_tabs.widget(i) - if hasattr(tab, "reset_defaults"): - tab.reset_defaults() - - if hasattr(self, "typical_section_tab") and hasattr(self.typical_section_tab, "reset_defaults"): - self.typical_section_tab.reset_defaults() - if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "reset_defaults"): - self.section_properties_tab.reset_defaults() - if not (hasattr(self, "typical_section_tab") or hasattr(self, "section_properties_tab")): - self._show_placeholder_message("Defaults") + try: + current_widget = self.tabs.currentWidget() + except Exception: + current_widget = None + + if current_widget is getattr(self, "typical_section_tab", None): + if hasattr(self.typical_section_tab, "reset_defaults"): + self.typical_section_tab.reset_defaults() + return + + if current_widget is getattr(self, "section_properties_tab", None): + # Member Properties: reset only active sub-tab. + if hasattr(self.section_properties_tab, "reset_active_tab_defaults"): + self.section_properties_tab.reset_active_tab_defaults() + elif hasattr(self.section_properties_tab, "reset_defaults"): + # Fallback to legacy behavior. + self.section_properties_tab.reset_defaults() + return + + # Other tabs: best-effort reset if supported. + if current_widget is not None and hasattr(current_widget, "reset_defaults"): + try: + current_widget.reset_defaults() + return + except Exception: + pass + self._show_placeholder_message("Defaults") def _save_inputs(self): saved = {} - if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "save_properties"): - saved.update(self.section_properties_tab.save_properties() or {}) - # No popup; silently succeed for now + try: + if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "save_properties"): + saved.update(self.section_properties_tab.save_properties() or {}) + except Exception as exc: + # If saving fails, the old code would never reach the confirmation popup. + QMessageBox.critical(self, "Save Failed", f"Could not save inputs.\n\n{exc}") + return + + # Store the saved data for later retrieval + self._last_saved_data = saved + + # Confirm save to the user (requested behavior). Use an explicit message box + # instance so it stays on top of the frameless dialog. + box = QMessageBox(self) + box.setIcon(QMessageBox.Information) + box.setWindowTitle("Saved") + + # Build detailed message + saved_items = [] + if "girder_details" in saved: + saved_items.append("✓ Girder Details") + if "stiffener_details" in saved: + stiffener_data = saved.get("stiffener_details", {}) + member_count = len(stiffener_data.get("stiffener_by_member", {})) + saved_items.append(f"✓ Stiffener Details ({member_count} members)") + if "cross_bracing" in saved: + saved_items.append("✓ Cross-Bracing Details") + if "end_diaphragm" in saved: + saved_items.append("✓ End Diaphragm Details") + + message = "Inputs saved successfully.\n\n" + if saved_items: + message += "Saved:\n" + "\n".join(saved_items) + + box.setText(message) + box.setStandardButtons(QMessageBox.Ok) + box.setDefaultButton(QMessageBox.Ok) + box.setWindowModality(Qt.ApplicationModal) + box.exec() def _build_sections_from_schema(self, parent_layout, sections, heading_style, label_style, field_width): for section in sections: @@ -453,4 +500,24 @@ def update_footpath_value(self, footpath_value): self.typical_section_tab.update_footpath_value(footpath_value) def _show_placeholder_message(self, action_name): - QMessageBox.information(self, "Coming soon", f"{action_name} action not implemented yet.") \ No newline at end of file + QMessageBox.information(self, "Coming soon", f"{action_name} action not implemented yet.") + + def get_saved_data(self) -> dict: + """Get the last saved properties data. + + Returns: + Dictionary containing all saved properties including stiffener details. + """ + return self._last_saved_data + + def set_properties_data(self, data: dict) -> None: + """Restore properties data from a previous save. + + Args: + data: Dictionary containing properties to restore. + """ + if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "restore_properties"): + try: + self.section_properties_tab.restore_properties(data) + except Exception: + pass diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/common.py b/src/osdagbridge/desktop/ui/dialogs/tabs/common.py index fbd7685a2..064fef034 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/common.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/common.py @@ -1,4 +1,7 @@ """Shared helpers for the Additional Inputs dialog and its tabs.""" + +from PySide6.QtCore import Qt, Signal +from PySide6.QtGui import QStandardItemModel from PySide6.QtWidgets import ( QComboBox, QLineEdit, @@ -9,6 +12,83 @@ ) +class CheckableComboBox(QComboBox): + """Multi-select combo with All/individual toggle behavior.""" + + checkedItemsChanged = Signal() + + def __init__(self, parent=None): + super().__init__(parent) + model = QStandardItemModel(self) + self.setModel(model) + self._updating_selection = False + model.itemChanged.connect(self._handle_item_changed) + + def addItem(self, text, userData=None): # noqa: N802 (Qt naming) + super().addItem(text, userData) + self._initialize_item(self.count() - 1) + + def addItems(self, texts): # noqa: N802 (Qt naming) + for text in texts: + self.addItem(text) + + def _initialize_item(self, index): + item = self.model().item(index) + if not item: + return + item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) + item.setData( + Qt.Checked if item.text().strip().lower() == "all" else Qt.Unchecked, + Qt.CheckStateRole, + ) + + def _handle_item_changed(self, item): + if self._updating_selection or item is None: + return + self._updating_selection = True + try: + if item.text().strip().lower() == "all": + if item.checkState() == Qt.Checked: + self._uncheck_non_all_items() + else: + if item.checkState() == Qt.Checked: + self._uncheck_all_item() + finally: + self._updating_selection = False + self.checkedItemsChanged.emit() + + def _uncheck_non_all_items(self): + for row in range(self.model().rowCount()): + item = self.model().item(row) + if item and item.text().strip().lower() != "all": + item.setCheckState(Qt.Unchecked) + + def _uncheck_all_item(self): + for row in range(self.model().rowCount()): + item = self.model().item(row) + if item and item.text().strip().lower() == "all": + item.setCheckState(Qt.Unchecked) + break + + def checked_items(self, include_all: bool = False): + selected, all_checked = [], False + for row in range(self.model().rowCount()): + item = self.model().item(row) + if not item or item.checkState() != Qt.Checked: + continue + text = item.text() + if text.strip().lower() == "all": + all_checked = True + if include_all: + selected.append(text) + else: + selected.append(text) + if all_checked and not include_all: + return [] + return selected + + + def get_combobox_style(): """Return the common stylesheet for dropdowns with the SVG icon from resources.""" return """ @@ -86,6 +166,10 @@ def get_lineedit_style(): background: #f1f1f1; color: #666; } + QLineEdit:read-only{ + background: #f6f6f6; + color: #555555; + } QLineEdit:hover { border: 1px solid #5d5d5d; } diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py index 2d4ab49a1..8eecfd420 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py @@ -55,20 +55,215 @@ def init_ui(self): main_layout.addWidget(self.section_tabs) + # Bind stiffener tab to the girder tab for member list + optimized state. + try: + self.stiffener_details_tab.bind_girder_details_tab(self.girder_details_tab) + except Exception: + pass + + # Bind Cross Bracing + End Diaphragm to Girder Details for dynamic girder options. + try: + self.cross_bracing_tab.bind_girder_details_tab(self.girder_details_tab) + except Exception: + pass + try: + self.end_diaphragm_tab.bind_girder_details_tab(self.girder_details_tab) + except Exception: + pass + + # Refresh stiffener members whenever the tab becomes active. + try: + self.section_tabs.currentChanged.connect(self._on_section_tab_changed) + except Exception: + pass + + def _on_section_tab_changed(self, index: int) -> None: + try: + widget = self.section_tabs.widget(index) + except Exception: + return + if widget is getattr(self, "stiffener_details_tab", None): + try: + self.stiffener_details_tab.refresh_girder_members() + except Exception: + pass + elif widget is getattr(self, "cross_bracing_tab", None): + try: + self.cross_bracing_tab.refresh_girder_options() + except Exception: + pass + elif widget is getattr(self, "end_diaphragm_tab", None): + try: + self.end_diaphragm_tab.refresh_girder_options() + except Exception: + pass + def set_girder_count(self, count): if hasattr(self, "girder_details_tab") and hasattr(self.girder_details_tab, "set_girder_count"): self.girder_details_tab.set_girder_count(count) + # Keep dependent tabs in sync. + try: + self.stiffener_details_tab.refresh_girder_members() + except Exception: + pass + try: + self.cross_bracing_tab.refresh_girder_options() + except Exception: + pass + try: + self.end_diaphragm_tab.refresh_girder_options() + except Exception: + pass def reset_defaults(self): + """Reset the entire Member Properties area back to its initial/default state.""" + + # Reset girder first so dependent tabs get a fresh member/pair list. if hasattr(self, "girder_details_tab") and hasattr(self.girder_details_tab, "reset_defaults"): self.girder_details_tab.reset_defaults() + + # Ensure dependent tabs see updated girder/member options. + try: + self.stiffener_details_tab.refresh_girder_members() + except Exception: + pass + try: + self.cross_bracing_tab.refresh_girder_options() + except Exception: + pass + try: + self.end_diaphragm_tab.refresh_girder_options() + except Exception: + pass + + # Now reset each dependent tab's own stored state. + if hasattr(self, "stiffener_details_tab") and hasattr(self.stiffener_details_tab, "reset_defaults"): + self.stiffener_details_tab.reset_defaults() if hasattr(self, "cross_bracing_tab") and hasattr(self.cross_bracing_tab, "reset_defaults"): self.cross_bracing_tab.reset_defaults() + if hasattr(self, "end_diaphragm_tab") and hasattr(self.end_diaphragm_tab, "reset_defaults"): + self.end_diaphragm_tab.reset_defaults() + + # Default to the first sub-tab for a consistent UX. + try: + self.section_tabs.setCurrentIndex(0) + except Exception: + pass + + def reset_active_tab_defaults(self) -> None: + """Reset only the currently active Member Properties sub-tab. + + This is used by the dialog-level Defaults button to avoid wiping other + Member Properties tabs' inputs. + """ + + try: + active_widget = self.section_tabs.currentWidget() + except Exception: + active_widget = None + + if active_widget is None: + return + + # Girder Details has extra selection widgets (girder selector + segment table) + # that should not be reset when applying defaults for just this tab. + if active_widget is getattr(self, "girder_details_tab", None): + try: + self.girder_details_tab.reset_defaults(preserve_selection=True, preserve_segments=True) + except TypeError: + # Backward compatibility if signature differs. + self.girder_details_tab.reset_defaults() + return + + # Dependent tabs rely on Girder Details for member/girder options. + # Ensure options are fresh but do not alter Girder Details state. + if active_widget is getattr(self, "stiffener_details_tab", None): + try: + self.stiffener_details_tab.refresh_girder_members() + except Exception: + pass + elif active_widget is getattr(self, "cross_bracing_tab", None): + try: + self.cross_bracing_tab.refresh_girder_options() + except Exception: + pass + elif active_widget is getattr(self, "end_diaphragm_tab", None): + try: + self.end_diaphragm_tab.refresh_girder_options() + except Exception: + pass + + if hasattr(active_widget, "reset_defaults"): + try: + active_widget.reset_defaults() + except Exception: + pass def save_properties(self): data = {} if hasattr(self, "girder_details_tab") and hasattr(self.girder_details_tab, "collect_data"): data["girder_details"] = self.girder_details_tab.collect_data() + if hasattr(self, "stiffener_details_tab"): + # Validate stiffener inputs before saving. + if hasattr(self.stiffener_details_tab, "validate"): + self.stiffener_details_tab.validate() + if hasattr(self.stiffener_details_tab, "collect_data"): + data["stiffener_details"] = self.stiffener_details_tab.collect_data() if hasattr(self, "cross_bracing_tab") and hasattr(self.cross_bracing_tab, "collect_data"): data["cross_bracing"] = self.cross_bracing_tab.collect_data() + if hasattr(self, "end_diaphragm_tab") and hasattr(self.end_diaphragm_tab, "collect_data"): + data["end_diaphragm"] = self.end_diaphragm_tab.collect_data() return data + + def restore_properties(self, data: dict) -> None: + """Restore previously saved properties into the sub-tabs.""" + if not isinstance(data, dict): + return + + girder_data = data.get("girder_details") + if isinstance(girder_data, dict) and hasattr(self, "girder_details_tab") and hasattr(self.girder_details_tab, "restore_data"): + try: + self.girder_details_tab.restore_data(girder_data) + except Exception: + pass + + stiffener_data = data.get("stiffener_details") + if isinstance(stiffener_data, dict) and hasattr(self, "stiffener_details_tab") and hasattr(self.stiffener_details_tab, "restore_data"): + try: + self.stiffener_details_tab.restore_data(stiffener_data) + except Exception: + pass + + cross_data = data.get("cross_bracing") + if isinstance(cross_data, dict) and hasattr(self, "cross_bracing_tab") and hasattr(self.cross_bracing_tab, "restore_data"): + try: + self.cross_bracing_tab.restore_data(cross_data) + except Exception: + pass + + end_data = data.get("end_diaphragm") + if isinstance(end_data, dict) and hasattr(self, "end_diaphragm_tab") and hasattr(self.end_diaphragm_tab, "restore_data"): + try: + self.end_diaphragm_tab.restore_data(end_data) + except Exception: + pass + + # If stiffeners were restored, refresh member list (depends on girder segments). + try: + if hasattr(self, "stiffener_details_tab") and hasattr(self.stiffener_details_tab, "refresh_girder_members"): + self.stiffener_details_tab.refresh_girder_members() + except Exception: + pass + + # Dependent tabs rely on Girder Details for selector options. + try: + if hasattr(self, "cross_bracing_tab") and hasattr(self.cross_bracing_tab, "refresh_girder_options"): + self.cross_bracing_tab.refresh_girder_options() + except Exception: + pass + try: + if hasattr(self, "end_diaphragm_tab") and hasattr(self.end_diaphragm_tab, "refresh_girder_options"): + self.end_diaphragm_tab.refresh_girder_options() + except Exception: + pass + diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py index 50b1835e1..ad90649a0 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py @@ -1,5 +1,6 @@ import sys import os +import math from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QTabWidget, QTabBar, QLabel, QLineEdit, QComboBox, QGroupBox, QFormLayout, QPushButton, QScrollArea, @@ -14,6 +15,7 @@ from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.widgets.section_viewer import SectionPreviewWidget, SectionCatalog +from osdagbridge.desktop.ui.widgets.placeholder_section_preview import PlaceholderSectionPreviewWidget class CrossBracingDetailsTab(QWidget): """Tab for Cross-Bracing Details with visual previews""" @@ -21,6 +23,16 @@ class CrossBracingDetailsTab(QWidget): def __init__(self, parent=None): super().__init__(parent) self.catalog = SectionCatalog() + self._girder_details_tab = None + + # Keep all combo boxes strictly uniform in width. + self._combo_width = 190 + + # Persist UI state per (girder-pair, member-id) so switching selection + # restores user inputs for that specific member. + self._state_by_member_key: dict[str, dict] = {} + self._active_member_key: str | None = None + self._selection_sync_guard = False self.init_ui() def init_ui(self): @@ -42,13 +54,13 @@ def init_ui(self): scroll.setWidget(container) container_layout = QVBoxLayout(container) - container_layout.setContentsMargins(6, 6, 6, 6) + container_layout.setContentsMargins(0, 0, 0, 0) container_layout.setSpacing(8) primary_card = self._create_card_frame() card_layout = QHBoxLayout(primary_card) - card_layout.setContentsMargins(10, 8, 10, 8) - card_layout.setSpacing(8) + card_layout.setContentsMargins(12, 12, 12, 12) + card_layout.setSpacing(12) # Left column (inputs) left_column = QWidget() @@ -59,23 +71,46 @@ def init_ui(self): selection_box = self._create_inner_box() selection_layout = QGridLayout(selection_box) - selection_layout.setContentsMargins(8, 4, 8, 4) - selection_layout.setHorizontalSpacing(6) - selection_layout.setVerticalSpacing(2) - selection_layout.setColumnMinimumWidth(0, 130) - selection_layout.setColumnStretch(1, 1) + selection_layout.setContentsMargins(12, 8, 12, 8) + selection_layout.setHorizontalSpacing(12) + selection_layout.setVerticalSpacing(8) + selection_layout.setColumnMinimumWidth(0, 180) + selection_layout.setColumnStretch(0, 0) + selection_layout.setColumnStretch(1, 0) self.select_girders_combo = QComboBox() - self.select_girders_combo.addItems(["G1 to G2", "G3 to G4", "All"]) + # Populated from Girder Details when bound. + self._configure_combo_box(self.select_girders_combo) apply_field_style(self.select_girders_combo) selection_layout.addWidget(self._create_label("Select Girders:"), 0, 0) selection_layout.addWidget(self.select_girders_combo, 0, 1) self.member_id_combo = QComboBox() - self.member_id_combo.addItems(["B1-1 to B1-15", "B2-1 to B2-10", "Custom"]) - apply_field_style(self.member_id_combo) + # Populated from Girder Details when bound. (No Custom option.) + self._configure_combo_box(self.member_id_combo) + # Member IDs are software-generated and must not be typed/edited. + self.member_id_combo.setEditable(False) + try: + self.member_id_combo.setInsertPolicy(QComboBox.NoInsert) + except Exception: + pass + # Hide the dropdown entirely; show a read-only display instead. + self.member_id_combo.setVisible(False) + + self.member_id_display = QLineEdit() + self.member_id_display.setReadOnly(True) + self.member_id_display.setFixedSize(self._combo_width, 28) + self.member_id_display.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + try: + self.member_id_display.setFocusPolicy(Qt.NoFocus) + except Exception: + pass + apply_field_style(self.member_id_display) selection_layout.addWidget(self._create_label("Member ID:"), 1, 0) - selection_layout.addWidget(self.member_id_combo, 1, 1) + selection_layout.addWidget(self.member_id_display, 1, 1) + + # Keep the two selectors aligned and persist state per selection. + self.select_girders_combo.currentIndexChanged.connect(self._on_select_girders_index_changed) selection_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) left_layout.addWidget(selection_box) @@ -91,19 +126,21 @@ def init_ui(self): inputs_grid.setContentsMargins(0, 0, 0, 0) inputs_grid.setHorizontalSpacing(12) inputs_grid.setVerticalSpacing(8) - inputs_grid.setColumnMinimumWidth(0, 130) + inputs_grid.setColumnMinimumWidth(0, 180) inputs_grid.setColumnStretch(0, 0) - inputs_grid.setColumnStretch(1, 1) + inputs_grid.setColumnStretch(1, 0) self.design_combo = QComboBox() self.design_combo.addItems(["Customized", "Optimized"]) if self.design_combo.count() > 1: self.design_combo.setCurrentIndex(1) # Default to Optimized + self._configure_combo_box(self.design_combo) apply_field_style(self.design_combo) row = self._add_grid_row(inputs_grid, 0, "Design:", self.design_combo) self.bracing_type_combo = QComboBox() self.bracing_type_combo.addItems(["K-Bracing", "X-Bracing"]) + self._configure_combo_box(self.bracing_type_combo) apply_field_style(self.bracing_type_combo) row = self._add_grid_row(inputs_grid, row, "Type of Bracing:", self.bracing_type_combo) @@ -117,36 +154,43 @@ def init_ui(self): self.bracing_section_type_combo = QComboBox() self.bracing_section_type_combo.addItems(section_type_options) + self._configure_combo_box(self.bracing_section_type_combo) apply_field_style(self.bracing_section_type_combo) row = self._add_grid_row(inputs_grid, row, "Bracing Section Type:", self.bracing_section_type_combo) self.bracing_section_combo = QComboBox() + self._configure_combo_box(self.bracing_section_combo) apply_field_style(self.bracing_section_combo) row = self._add_grid_row(inputs_grid, row, "Bracing Section:", self.bracing_section_combo) self.top_bracket_type_combo = QComboBox() self.top_bracket_type_combo.addItems(section_type_options) + self._configure_combo_box(self.top_bracket_type_combo) apply_field_style(self.top_bracket_type_combo) row = self._add_grid_row(inputs_grid, row, "Top Bracket Section:", self.top_bracket_type_combo) self.top_bracket_size_combo = QComboBox() + self._configure_combo_box(self.top_bracket_size_combo) apply_field_style(self.top_bracket_size_combo) row = self._add_grid_row(inputs_grid, row, "Top Bracket Size:", self.top_bracket_size_combo) self.bottom_bracket_type_combo = QComboBox() self.bottom_bracket_type_combo.addItems(section_type_options) + self._configure_combo_box(self.bottom_bracket_type_combo) apply_field_style(self.bottom_bracket_type_combo) row = self._add_grid_row(inputs_grid, row, "Bottom Bracket Section:", self.bottom_bracket_type_combo) self.bottom_bracket_size_combo = QComboBox() + self._configure_combo_box(self.bottom_bracket_size_combo) apply_field_style(self.bottom_bracket_size_combo) row = self._add_grid_row(inputs_grid, row, "Bottom Bracket Size:", self.bottom_bracket_size_combo) self.spacing_input = QLineEdit() - self.spacing_input.setPlaceholderText("Spacing (mm)") self.spacing_input.setValidator(QDoubleValidator(0, 100000, 2)) apply_field_style(self.spacing_input) - self._add_grid_row(inputs_grid, row, "Spacing:", self.spacing_input) + self.spacing_input.setFixedSize(self._combo_width, 28) + self.spacing_input.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self._add_grid_row(inputs_grid, row, "Spacing (m):", self.spacing_input) inputs_layout.addLayout(inputs_grid) left_layout.addWidget(inputs_box) @@ -160,7 +204,17 @@ def init_ui(self): right_column.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) right_layout = QVBoxLayout(right_column) right_layout.setContentsMargins(0, 0, 0, 0) - right_layout.setSpacing(14) + right_layout.setSpacing(10) + + # Match End Diaphragm cross-bracing view: show a bracing-layout diagram at the top. + type_box = self._create_inner_box() + type_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + type_layout = QVBoxLayout(type_box) + type_layout.setContentsMargins(12, 8, 12, 10) + type_layout.setSpacing(6) + type_layout.addWidget(self._create_heading_label("Type of Bracing")) + type_layout.addWidget(self._create_bracing_layout_placeholder("Bracing Layout", 170)) + right_layout.addWidget(type_box) self.bracing_preview_box, self.bracing_preview_label = self._create_preview_box("Bracing") right_layout.addWidget(self.bracing_preview_box) @@ -171,9 +225,11 @@ def init_ui(self): self.bottom_bracket_preview_box, self.bottom_bracket_preview_label = self._create_preview_box("Bottom Bracket") right_layout.addWidget(self.bottom_bracket_preview_box) + right_layout.addStretch() + card_layout.addWidget(right_column) card_layout.setStretch(0, 3) - card_layout.setStretch(1, 2) + card_layout.setStretch(1, 4) container_layout.addWidget(primary_card) container_layout.addStretch() @@ -185,9 +241,367 @@ def init_ui(self): self.bottom_bracket_type_combo.currentTextChanged.connect(self._on_bottom_bracket_type_changed) self.bottom_bracket_size_combo.currentTextChanged.connect(self._update_previews) self.design_combo.currentTextChanged.connect(self._on_design_changed) + self.spacing_input.textChanged.connect(self._on_span_or_spacing_changed) self._populate_designations() self._on_design_changed(self.design_combo.currentText()) + # Seed selection drop-downs with a safe default until Girder Details is bound. + self.refresh_girder_options() + + # Ensure initial selection loads its saved/default state. + self._load_state_for_current_member() + + def _on_span_or_spacing_changed(self, *_args) -> None: + # Member IDs are derived from Span + Spacing (software-driven). + try: + self._refresh_member_id_display() + except Exception: + pass + + def _current_member_id(self) -> str: + return f"B{self._pair_index()}M1" + + def _current_member_key(self) -> str: + pair = (self.select_girders_combo.currentText() or "").strip() + member = self._current_member_id() + return f"{pair}::{member}".strip(":") + + @staticmethod + def _normalize_member_id(text: str, pair_index: int | None = None) -> str: + """Normalize legacy IDs/ranges to the canonical format B{pair}M{member}. + + Accepts: + - 'B1M3' (canonical) + - 'B1-3' (legacy hyphen) + - 'B1-1 to B1-15' (legacy range; coerces to M1) + """ + raw = (text or "").strip().replace(" ", "") + if not raw: + return "" + + upper = raw.upper() + + # Canonical already. + if "M" in upper and upper.startswith("B"): + return upper + + # Legacy range like B1-1toB1-15 -> choose first. + if upper.startswith("B") and "TO" in upper: + # Try to keep the pair index if provided. + if pair_index is not None: + return f"B{pair_index}M1" + # Attempt to parse pair number from prefix. + try: + after_b = upper[1:] + pair_num = int("".join(ch for ch in after_b if ch.isdigit()) or 0) + except Exception: + pair_num = 0 + return f"B{pair_num}M1" if pair_num > 0 else "" + + # Legacy single member like B1-3. + if upper.startswith("B") and "-" in upper: + try: + b_part, m_part = upper.split("-", 1) + pair_num = int(b_part[1:]) + mem_num = int("".join(ch for ch in m_part if ch.isdigit())) + return f"B{pair_num}M{mem_num}" + except Exception: + return "" + + # Fallback: if only a member number is present and pair_index is known. + if pair_index is not None: + try: + mem_num = int("".join(ch for ch in upper if ch.isdigit())) + if mem_num > 0: + return f"B{pair_index}M{mem_num}" + except Exception: + pass + return "" + + @staticmethod + def _member_number(text: str) -> int | None: + text = (text or "").strip().upper().replace(" ", "") + if not text: + return None + if text.startswith("B") and "M" in text: + try: + _b, m = text.split("M", 1) + return int("".join(ch for ch in m if ch.isdigit()) or 0) or None + except Exception: + return None + if text.startswith("B") and "-" in text: + try: + _b, m = text.split("-", 1) + return int("".join(ch for ch in m if ch.isdigit()) or 0) or None + except Exception: + return None + return None + + def _pair_index(self) -> int: + return max(0, int(self.select_girders_combo.currentIndex())) + 1 + + def _get_total_span_m(self) -> float | None: + tab = self._girder_details_tab + if tab is None: + return None + getter = getattr(tab, "_get_total_span", None) + if getter is None or not callable(getter): + return None + try: + span = getter() + except Exception: + return None + try: + span = float(span) + except Exception: + return None + return span if span > 0 else None + + def _get_cross_bracing_spacing_m(self) -> float | None: + text = (self.spacing_input.text() or "").strip() + if not text: + return None + try: + spacing_m = float(text) + except Exception: + return None + if spacing_m <= 0: + return None + return spacing_m + + def _cross_bracing_member_count(self) -> int: + """Compute number of cross bracing members (m) for a pair. + + Based on the provided reference: + m = Span / CrossBracingSpacing - 1 + + Span is read from Girder Details "Total Span (m)". + Spacing is read from this tab "Spacing (m)". + """ + span_m = self._get_total_span_m() + spacing_m = self._get_cross_bracing_spacing_m() + if not span_m or not spacing_m: + return 1 + raw = (span_m / spacing_m) - 1.0 + try: + m = int(math.floor(raw + 1e-9)) + except Exception: + m = 1 + return max(1, m) + + def _member_ids_for_pair(self, pair_index: int) -> list[str]: + count = self._cross_bracing_member_count() + return [f"B{pair_index}M{i}" for i in range(1, count + 1)] + + def _refresh_member_id_display(self) -> None: + pair_index = self._pair_index() + count = self._cross_bracing_member_count() + member_id = f"B{pair_index}M1" + display_text = member_id if count <= 1 else f"B{pair_index}M1 to B{pair_index}M{count}" + if hasattr(self, "member_id_display") and self.member_id_display is not None: + prev = self.member_id_display.blockSignals(True) + try: + self.member_id_display.setText(display_text) + finally: + self.member_id_display.blockSignals(prev) + + # Keep the hidden combo in sync for any existing code paths. + block = self.member_id_combo.blockSignals(True) + try: + self.member_id_combo.clear() + self.member_id_combo.addItems([member_id]) + self.member_id_combo.setCurrentIndex(0) + finally: + self.member_id_combo.blockSignals(block) + + def _default_member_state(self) -> dict: + # Use the tab defaults (Optimized + first options) for new members. + return { + "design": "Optimized", + "bracing_type": "K-Bracing", + "bracing_section_type": "Angle", + "bracing_section_data": None, + "bracing_section_text": "", + "top_bracket_type": "Angle", + "top_bracket_data": None, + "top_bracket_text": "", + "bottom_bracket_type": "Angle", + "bottom_bracket_data": None, + "bottom_bracket_text": "", + "spacing": "3", + } + + def _snapshot_current_state(self) -> dict: + return { + "design": self.design_combo.currentText(), + "bracing_type": self.bracing_type_combo.currentText(), + "bracing_section_type": self.bracing_section_type_combo.currentText(), + "bracing_section_data": self.bracing_section_combo.currentData(), + "bracing_section_text": self.bracing_section_combo.currentText(), + "top_bracket_type": self.top_bracket_type_combo.currentText(), + "top_bracket_data": self.top_bracket_size_combo.currentData(), + "top_bracket_text": self.top_bracket_size_combo.currentText(), + "bottom_bracket_type": self.bottom_bracket_type_combo.currentText(), + "bottom_bracket_data": self.bottom_bracket_size_combo.currentData(), + "bottom_bracket_text": self.bottom_bracket_size_combo.currentText(), + "spacing": self.spacing_input.text(), + } + + def _store_current_member_state(self) -> None: + if not hasattr(self, "select_girders_combo") or not hasattr(self, "member_id_combo"): + return + key = self._active_member_key or self._current_member_key() + if not key: + return + self._state_by_member_key[key] = self._snapshot_current_state() + self._active_member_key = key + + def _set_combo_to_data_or_text(self, combo: QComboBox, desired_data, desired_text: str) -> None: + if desired_data is not None: + idx = combo.findData(desired_data) + if idx >= 0: + combo.setCurrentIndex(idx) + return + if desired_text: + idx = combo.findText(desired_text) + if idx >= 0: + combo.setCurrentIndex(idx) + + def _apply_state(self, state: dict) -> None: + # Apply in a safe order: set section types first (to repopulate size combos), + # then set sizes, then design mode. + self.design_combo.setCurrentText(state.get("design") or self.design_combo.currentText()) + self.bracing_type_combo.setCurrentText(state.get("bracing_type") or self.bracing_type_combo.currentText()) + + self.bracing_section_type_combo.setCurrentText(state.get("bracing_section_type") or self.bracing_section_type_combo.currentText()) + self._update_designations_for(self.bracing_section_combo, self.bracing_section_type_combo.currentText()) + self._set_combo_to_data_or_text( + self.bracing_section_combo, + state.get("bracing_section_data"), + state.get("bracing_section_text") or "", + ) + + self.top_bracket_type_combo.setCurrentText(state.get("top_bracket_type") or self.top_bracket_type_combo.currentText()) + self._update_designations_for(self.top_bracket_size_combo, self.top_bracket_type_combo.currentText()) + self._set_combo_to_data_or_text( + self.top_bracket_size_combo, + state.get("top_bracket_data"), + state.get("top_bracket_text") or "", + ) + + self.bottom_bracket_type_combo.setCurrentText(state.get("bottom_bracket_type") or self.bottom_bracket_type_combo.currentText()) + self._update_designations_for(self.bottom_bracket_size_combo, self.bottom_bracket_type_combo.currentText()) + self._set_combo_to_data_or_text( + self.bottom_bracket_size_combo, + state.get("bottom_bracket_data"), + state.get("bottom_bracket_text") or "", + ) + + self.spacing_input.setText(state.get("spacing") or "") + + # Ensure enable/disable and previews match the restored design state. + self._on_design_changed(self.design_combo.currentText()) + + def _load_state_for_current_member(self) -> None: + key = self._current_member_key() + if not key: + return + self._active_member_key = key + state = self._state_by_member_key.get(key) + if state is None: + state = self._default_member_state() + guard_a = self.design_combo.blockSignals(True) + guard_b = self.bracing_type_combo.blockSignals(True) + guard_c = self.bracing_section_type_combo.blockSignals(True) + guard_d = self.bracing_section_combo.blockSignals(True) + guard_e = self.top_bracket_type_combo.blockSignals(True) + guard_f = self.top_bracket_size_combo.blockSignals(True) + guard_g = self.bottom_bracket_type_combo.blockSignals(True) + guard_h = self.bottom_bracket_size_combo.blockSignals(True) + try: + self._apply_state(state) + finally: + self.design_combo.blockSignals(guard_a) + self.bracing_type_combo.blockSignals(guard_b) + self.bracing_section_type_combo.blockSignals(guard_c) + self.bracing_section_combo.blockSignals(guard_d) + self.top_bracket_type_combo.blockSignals(guard_e) + self.top_bracket_size_combo.blockSignals(guard_f) + self.bottom_bracket_type_combo.blockSignals(guard_g) + self.bottom_bracket_size_combo.blockSignals(guard_h) + + # After restoring, refresh previews explicitly. + self._update_previews() + + def _on_select_girders_index_changed(self, idx: int) -> None: + if self._selection_sync_guard: + return + self._store_current_member_state() + self._selection_sync_guard = True + try: + self._refresh_member_id_display() + finally: + self._selection_sync_guard = False + self._load_state_for_current_member() + + def bind_girder_details_tab(self, girder_details_tab) -> None: + """Bind to Girder Details so girder pair options reflect user inputs.""" + self._girder_details_tab = girder_details_tab + try: + length_input = getattr(girder_details_tab, "length_input", None) + if length_input is not None and hasattr(length_input, "textChanged"): + length_input.textChanged.connect(self._on_span_or_spacing_changed) + except Exception: + pass + self.refresh_girder_options() + + def showEvent(self, event): # noqa: N802 (Qt naming) + super().showEvent(event) + # When the tab becomes visible, refresh in case girder count changed. + self.refresh_girder_options() + + def _girder_pairs(self) -> list[str]: + girders = [] + if self._girder_details_tab is not None and hasattr(self._girder_details_tab, "available_girders"): + try: + girders = list(getattr(self._girder_details_tab, "available_girders") or []) + except Exception: + girders = [] + + if not girders: + girders = ["G1", "G2"] + + pairs = [f"{girders[i]} to {girders[i + 1]}" for i in range(len(girders) - 1)] + return pairs or ["G1 to G2"] + + def refresh_girder_options(self) -> None: + """Populate Select Girders + Member ID based on Girder Details.""" + # Save current member state before rebuilding lists. + try: + self._store_current_member_state() + except Exception: + pass + pairs = self._girder_pairs() + + prev_pair = self.select_girders_combo.currentText().strip() if hasattr(self, "select_girders_combo") else "" + + block_a = self.select_girders_combo.blockSignals(True) + try: + self.select_girders_combo.clear() + self.select_girders_combo.addItems(pairs) + if prev_pair in pairs: + self.select_girders_combo.setCurrentText(prev_pair) + else: + self.select_girders_combo.setCurrentIndex(0) + finally: + self.select_girders_combo.blockSignals(block_a) + + # Update the (read-only) Member ID display for the selected pair. + self._refresh_member_id_display() + + # Restore saved/default state for the currently selected member after refresh. + self._load_state_for_current_member() + def _create_card_frame(self): card = QFrame() card.setStyleSheet("QFrame { border: 1px solid #d0d0d0; border-radius: 12px; background-color: #ffffff; }") @@ -206,37 +620,61 @@ def _create_inner_box(self): def _create_heading_label(self, text): label = QLabel(text) - label.setStyleSheet("font-size: 12px; font-weight: 600; color: #4b4b4b; border: none;") + label.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none;") return label def _create_label(self, text): label = QLabel(text) - label.setStyleSheet("font-size: 11px; color: #4b4b4b; border: none;") + # Keep default label styling, but emphasize the bracing type selector. + weight = "700" if (text or "").strip() == "Type of Bracing:" else "400" + label.setStyleSheet(f"font-size: 11px; font-weight: {weight}; color: #4b4b4b; border: none;") return label def _add_grid_row(self, layout, row, text, widget): label = self._create_label(text) layout.addWidget(label, row, 0, Qt.AlignLeft | Qt.AlignVCenter) - widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - layout.addWidget(widget, row, 1) + # Respect fixed-width widgets (e.g., combo boxes) so all fields remain uniform. + try: + fixed_width = widget.minimumWidth() == widget.maximumWidth() and widget.minimumWidth() > 0 + except Exception: + fixed_width = False + if fixed_width: + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + else: + widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + # Left-align the widget so fixed-width combos line up. + layout.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) return row + 1 - def _create_image_placeholder(self, height): - widget = SectionPreviewWidget() - widget.setMinimumHeight(height) - widget.setStyleSheet("QWidget { border: 1px solid #d0d0d0; border-radius: 10px; background-color: #0f0f0f; }") - return widget + def _configure_combo_box(self, combo: QComboBox) -> None: + """Keep combos stable without forcing the right-side diagram to collapse.""" + combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLengthWithIcon) + combo.setMinimumContentsLength(12) + try: + combo.setFixedWidth(int(getattr(self, "_combo_width", 190))) + combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + except Exception: + pass + + def _create_bracing_layout_placeholder(self, text: str, height: int): + label = QLabel(text) + label.setAlignment(Qt.AlignCenter) + label.setMinimumHeight(height) + label.setStyleSheet( + "QLabel { border: 1px solid #d0d0d0; border-radius: 10px; background-color: #f7f7f7; " + "font-weight: bold; color: #5b5b5b; }" + ) + return label def _create_preview_box(self, title): box = self._create_inner_box() layout = QVBoxLayout(box) layout.setContentsMargins(12, 10, 12, 10) layout.setSpacing(8) - # Preview headings should be visually stronger — make them bold only here heading = QLabel(title) heading.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none;") layout.addWidget(heading) - image = self._create_image_placeholder(150) + image = PlaceholderSectionPreviewWidget(title, 110) layout.addWidget(image) return box, image @@ -255,8 +693,9 @@ def _update_previews(self): self._set_preview(self.bottom_bracket_preview_label, self.bottom_bracket_type_combo, self.bottom_bracket_size_combo) def _apply_custom_mode(self, is_custom: bool): - # Only allow manual section selection (and show previews) in Customized mode. - self.right_column.setVisible(is_custom) + # Only allow manual section selection in Customized mode. + # Keep the preview/diagram column visible in Optimized mode (like Girder Details). + self.right_column.setVisible(True) for widget in [ self.bracing_section_type_combo, self.bracing_section_combo, @@ -335,21 +774,63 @@ def _update_designations_for(self, combo: QComboBox, type_label: str): # ---- External API ----------------------------------------------------- def reset_defaults(self): - # Reset types to single angle and reload designations - for combo in [self.bracing_section_type_combo, self.top_bracket_type_combo, self.bottom_bracket_type_combo]: - combo.blockSignals(True) - combo.setCurrentIndex(0) - combo.blockSignals(False) - self._populate_designations() - # Select first designation for each - for combo in [self.bracing_section_combo, self.top_bracket_size_combo, self.bottom_bracket_size_combo]: - combo.setCurrentIndex(0 if combo.count() > 0 else -1) - self._update_previews() + # Clear per-member persistence so Defaults returns to a clean slate. + self._state_by_member_key.clear() + self._active_member_key = None + + # Refresh girder options (may have changed after Girder Defaults). + try: + self.refresh_girder_options() + except Exception: + pass + + # Drop any state that may have been snapshotted during refresh. + self._state_by_member_key.clear() + self._active_member_key = None + + # Reset selection to the first pair/member in a guarded way. + self._selection_sync_guard = True + try: + if self.select_girders_combo.count() > 0: + self.select_girders_combo.setCurrentIndex(0) + if self.member_id_combo.count() > 0: + self.member_id_combo.setCurrentIndex(0) + finally: + self._selection_sync_guard = False + + # With no saved state for this member, this applies default UI values + # (Optimized + first options) and updates enable/disable + previews. + self._load_state_for_current_member() def collect_data(self): + # Ensure the latest edits are persisted to the active member. + self._store_current_member_state() + + pairs = self._girder_pairs() + + # For the UI we configure only one member (always M1) per pair. + # For the solver/export, expand the configured state to all members. + by_member: dict[str, dict] = {} + for pair_idx, pair_label in enumerate(pairs, start=1): + base_member = f"B{pair_idx}M1" + base_key = f"{pair_label}::{base_member}" + base_state = self._state_by_member_key.get(base_key) + if base_state is None: + base_state = dict(self._default_member_state()) + self._state_by_member_key[base_key] = dict(base_state) + + for member_id in self._member_ids_for_pair(pair_idx): + payload = dict(base_state or {}) + payload["select_girders"] = pair_label + payload["member_id"] = member_id + by_member[member_id] = payload + + # Backward compatible: keep current selection fields at the top-level. + current_pair = (self.select_girders_combo.currentText() or "").strip() + current_member = self._current_member_id().strip().upper() return { - "select_girders": self.select_girders_combo.currentText(), - "member_id": self.member_id_combo.currentText(), + "select_girders": current_pair, + "member_id": current_member, "design": self.design_combo.currentText(), "bracing_type": self.bracing_type_combo.currentText(), "bracing_section_type": self.bracing_section_type_combo.currentText(), @@ -359,4 +840,57 @@ def collect_data(self): "bottom_bracket_type": self.bottom_bracket_type_combo.currentText(), "bottom_bracket_size": self.bottom_bracket_size_combo.currentText(), "spacing": self.spacing_input.text(), + "cross_bracing_by_member": by_member, } + + def restore_data(self, data: dict) -> None: + """Restore previously saved cross bracing inputs.""" + if not isinstance(data, dict): + return + + restored = data.get("cross_bracing_by_member") + if isinstance(restored, dict): + # Prefer restoring from the configured member (always M1) for each pair. + rebuilt: dict[str, dict] = {} + for _member_id, payload in restored.items(): + if not isinstance(payload, dict): + continue + pair_label = str(payload.get("select_girders") or "").strip() + member_id = str(payload.get("member_id") or _member_id or "").strip().upper() + if not pair_label: + continue + # Only store state for M1 in the UI. + if not member_id.endswith("M1"): + continue + state = dict(payload) + state.pop("select_girders", None) + state.pop("member_id", None) + rebuilt[f"{pair_label}::{member_id}"] = state + if rebuilt: + self._state_by_member_key = rebuilt + + # Refresh dropdowns and try to restore selection. + try: + self.refresh_girder_options() + except Exception: + pass + + target_pair = str(data.get("select_girders") or "").strip() + target_member = str(data.get("member_id") or "").strip().upper() + if target_pair: + try: + self.select_girders_combo.setCurrentText(target_pair) + except Exception: + pass + # Member ID is software-driven (always M1) so just refresh the display. + try: + self._refresh_member_id_display() + except Exception: + pass + + # Ensure UI reflects stored state for restored selection. + try: + self._load_state_for_current_member() + except Exception: + pass + diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py index 5fed7e684..d56ee5530 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py @@ -1,4 +1,11 @@ -"""Auto-generated tab module extracted from additional_inputs.""" +"""End diaphragm section-properties UI. + +This tab supports Cross Bracing, Rolled Beam and Welded Beam views. +Rolled/Welded views render a live section preview and auto-fill section +properties, matching the behavior used in the Girder tab. +""" + +import math import sys import os from PySide6.QtWidgets import ( @@ -14,14 +21,456 @@ from osdagbridge.core.utils.common import * from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview +from osdagbridge.desktop.ui.widgets.section_viewer import SectionCatalog, SectionPreviewWidget +from osdagbridge.desktop.ui.widgets.placeholder_section_preview import PlaceholderSectionPreviewWidget + +# Reuse the same rolled section catalog that backs the Girder tab. +from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.girder_details_tab import ( # noqa: E501 + girder_properties, +) class EndDiaphragmDetailsTab(QWidget): """Tab for End Diaphragm Details with type-specific layouts""" def __init__(self, parent=None): super().__init__(parent) + self._girder_details_tab = None + self._select_girders_combos = [] + self._member_id_combos = [] + # Member ID is software-generated (E{pair}M1 / E{pair}M2). + # Show both IDs as a read-only display; inputs apply to both ends. + self._member_id_display_by_view: dict[str, QLineEdit] = {} + + # Keep all combo boxes strictly uniform in width. + self._combo_width = 190 + + # Persist UI state per (view_type, girder-pair, member-id). + # Also sync selection (girder/member index) across all three views. + self._selection_by_view: dict[str, tuple[QComboBox, QComboBox]] = {} + self._state_by_view_member_key: dict[str, dict] = {} + self._active_key_by_view: dict[str, str] = {} + self._block_selection_sync = False + # Cross bracing uses angle/channel section previews backed by the Osdag DB. + self._cross_catalog = SectionCatalog() + self._cross_previews = {} + self.cross_right_column = None + self.cross_design_combo = None + self.cross_bracing_section_type_combo = None + self.cross_bracing_section_combo = None + self.cross_top_bracket_type_combo = None + self.cross_top_bracket_size_combo = None + self.cross_bottom_bracket_type_combo = None + self.cross_bottom_bracket_size_combo = None + self.cross_bracing_type_combo = None + + self._rolled_property_inputs = {} + self._welded_property_inputs = {} + self._rolled_preview = None + self._welded_preview = None + self._rolled_caption = None + self._welded_caption = None + + self.rolled_design_combo = None + self.welded_design_combo = None + self._rolled_inputs = [] + self._welded_inputs = [] self.init_ui() + def bind_girder_details_tab(self, girder_details_tab) -> None: + """Bind to Girder Details so Select Girders reflects user inputs.""" + self._girder_details_tab = girder_details_tab + self.refresh_girder_options() + + def showEvent(self, event): # noqa: N802 (Qt naming) + super().showEvent(event) + self.refresh_girder_options() + + def _girder_pairs(self) -> list[str]: + girders = [] + if self._girder_details_tab is not None and hasattr(self._girder_details_tab, "available_girders"): + try: + girders = list(getattr(self._girder_details_tab, "available_girders") or []) + except Exception: + girders = [] + if not girders: + girders = ["G1", "G2"] + pairs = [f"{girders[i]} to {girders[i + 1]}" for i in range(len(girders) - 1)] + return pairs or ["G1 to G2"] + + def refresh_girder_options(self) -> None: + """Populate all view selection combos based on Girder Details.""" + # Save current states before rebuilding options. + try: + self._store_all_view_states() + except Exception: + pass + + pairs = self._girder_pairs() + + for combo in list(self._select_girders_combos): + if combo is None: + continue + prev = combo.currentText().strip() + block = combo.blockSignals(True) + try: + combo.clear() + combo.addItems(pairs) + combo.setCurrentText(prev if prev in pairs else pairs[0]) + finally: + combo.blockSignals(block) + + # Member IDs are generated per girder-pair selection. + # End diaphragm uses 2 members per pair: E{pair}M1, E{pair}M2. + for view_key, (girders_combo, member_combo) in (self._selection_by_view or {}).items(): + if girders_combo is None or member_combo is None: + continue + self._rebuild_member_ids_for_view(view_key, previous_member=(member_combo.currentText() or "").strip()) + try: + self._refresh_member_id_display(view_key) + except Exception: + pass + + # After refresh, ensure state is restored for current selection. + self._restore_all_views_for_current_selection() + + @staticmethod + def _member_number(text: str) -> int | None: + raw = (text or "").strip().upper().replace(" ", "") + if not raw: + return None + if "M" in raw: + try: + _p, m = raw.split("M", 1) + return int("".join(ch for ch in m if ch.isdigit()) or 0) or None + except Exception: + return None + if "-" in raw: + try: + _p, m = raw.split("-", 1) + return int("".join(ch for ch in m if ch.isdigit()) or 0) or None + except Exception: + return None + return None + + def _pair_index_for_combo(self, girders_combo: QComboBox | None) -> int: + return max(0, int(girders_combo.currentIndex() if girders_combo is not None else 0)) + 1 + + def _member_ids_for_pair(self, pair_index: int) -> list[str]: + return [f"E{pair_index}M1", f"E{pair_index}M2"] + + def _refresh_member_id_display(self, view_key: str) -> None: + combos = self._selection_by_view.get(view_key) + display = self._member_id_display_by_view.get(view_key) + if not combos or display is None: + return + girders_combo, _member_combo = combos + pair_index = self._pair_index_for_combo(girders_combo) + members = self._member_ids_for_pair(pair_index) + text = " / ".join(members) + prev = display.blockSignals(True) + try: + display.setText(text) + finally: + display.blockSignals(prev) + + def _rebuild_member_ids_for_view(self, view_key: str, previous_member: str = "") -> None: + combos = self._selection_by_view.get(view_key) + if not combos: + return + girders_combo, member_combo = combos + if member_combo is None: + return + pair_index = self._pair_index_for_combo(girders_combo) + items = self._member_ids_for_pair(pair_index) + + block = member_combo.blockSignals(True) + try: + member_combo.clear() + member_combo.addItems(items) + desired = (previous_member or "").strip().upper() + if desired and desired in [i.upper() for i in items]: + member_combo.setCurrentText(desired) + else: + member_combo.setCurrentText(f"E{pair_index}M1") + member_combo.setCurrentIndex(0) + finally: + member_combo.blockSignals(block) + + try: + self._refresh_member_id_display(view_key) + except Exception: + pass + + def _selection_key(self, view_key: str) -> str: + combos = self._selection_by_view.get(view_key) + if not combos: + return "" + girders_combo, member_combo = combos + pair = (girders_combo.currentText() or "").strip() + member = (member_combo.currentText() or "").strip() + return f"{view_key}::{pair}::{member}".strip(":") + + def _default_state_for_view(self, view_key: str) -> dict: + key = (view_key or "").strip() + if key == "Cross Bracing": + angles = [] + try: + angles = list(self._cross_catalog.list_angles() or []) + except Exception: + angles = [] + first_angle = angles[0] if angles else "" + return { + "design": "Optimized", + "bracing_type": "K-Bracing", + "bracing_section_type": "Angle", + "bracing_section_data": first_angle, + "bracing_section_text": "", + "top_bracket_type": "Angle", + "top_bracket_data": first_angle, + "top_bracket_text": "", + "bottom_bracket_type": "Angle", + "bottom_bracket_data": first_angle, + "bottom_bracket_text": "", + } + if key == "Rolled Beam": + first = "" + if self.rolled_is_section_combo is not None and self.rolled_is_section_combo.count() > 0: + first = self.rolled_is_section_combo.itemText(0) + return { + "design": "Optimized", + "is_section": first, + } + if key == "Welded Beam": + return { + "design": "Optimized", + "welded_values": ["" for _ in (self._welded_inputs or [])], + } + return {"design": "Optimized"} + + def _snapshot_view_state(self, view_key: str) -> dict: + key = (view_key or "").strip() + if key == "Cross Bracing": + return { + "design": self.cross_design_combo.currentText() if self.cross_design_combo is not None else "", + "bracing_type": self.cross_bracing_type_combo.currentText() if self.cross_bracing_type_combo is not None else "", + "bracing_section_type": self.cross_bracing_section_type_combo.currentText() if self.cross_bracing_section_type_combo is not None else "", + "bracing_section_data": self.cross_bracing_section_combo.currentData() if self.cross_bracing_section_combo is not None else None, + "bracing_section_text": self.cross_bracing_section_combo.currentText() if self.cross_bracing_section_combo is not None else "", + "top_bracket_type": self.cross_top_bracket_type_combo.currentText() if self.cross_top_bracket_type_combo is not None else "", + "top_bracket_data": self.cross_top_bracket_size_combo.currentData() if self.cross_top_bracket_size_combo is not None else None, + "top_bracket_text": self.cross_top_bracket_size_combo.currentText() if self.cross_top_bracket_size_combo is not None else "", + "bottom_bracket_type": self.cross_bottom_bracket_type_combo.currentText() if self.cross_bottom_bracket_type_combo is not None else "", + "bottom_bracket_data": self.cross_bottom_bracket_size_combo.currentData() if self.cross_bottom_bracket_size_combo is not None else None, + "bottom_bracket_text": self.cross_bottom_bracket_size_combo.currentText() if self.cross_bottom_bracket_size_combo is not None else "", + } + if key == "Rolled Beam": + return { + "design": self.rolled_design_combo.currentText() if self.rolled_design_combo is not None else "", + "is_section": self.rolled_is_section_combo.currentText() if self.rolled_is_section_combo is not None else "", + } + if key == "Welded Beam": + values = [] + for widget in (self._welded_inputs or []): + if isinstance(widget, QComboBox): + values.append(widget.currentText()) + elif isinstance(widget, QLineEdit): + values.append(widget.text()) + else: + values.append("") + return { + "design": self.welded_design_combo.currentText() if self.welded_design_combo is not None else "", + "welded_values": values, + } + return {"design": ""} + + def _set_combo_to_data_or_text(self, combo: QComboBox, desired_data, desired_text: str) -> None: + if combo is None: + return + if desired_data is not None: + idx = combo.findData(desired_data) + if idx >= 0: + combo.setCurrentIndex(idx) + return + if desired_text: + idx = combo.findText(desired_text) + if idx >= 0: + combo.setCurrentIndex(idx) + + def _apply_view_state(self, view_key: str, state: dict) -> None: + key = (view_key or "").strip() + if key == "Cross Bracing": + if self.cross_design_combo is not None: + self.cross_design_combo.setCurrentText(state.get("design") or self.cross_design_combo.currentText()) + if self.cross_bracing_type_combo is not None: + desired = (state.get("bracing_type") or "").strip() + # Backward compatibility: older UI exposed Diagonal/Horizontal. + if desired in {"Diagonal", "Horizontal"}: + desired = "X-Bracing" + if desired and self.cross_bracing_type_combo.findText(desired) >= 0: + self.cross_bracing_type_combo.setCurrentText(desired) + else: + # Keep current selection if desired isn't supported. + self.cross_bracing_type_combo.setCurrentText(self.cross_bracing_type_combo.currentText()) + + if self.cross_bracing_section_type_combo is not None: + self.cross_bracing_section_type_combo.setCurrentText(state.get("bracing_section_type") or self.cross_bracing_section_type_combo.currentText()) + self._cross_update_designations_for(self.cross_bracing_section_combo, self.cross_bracing_section_type_combo.currentText()) + self._set_combo_to_data_or_text( + self.cross_bracing_section_combo, + state.get("bracing_section_data"), + state.get("bracing_section_text") or "", + ) + + if self.cross_top_bracket_type_combo is not None: + self.cross_top_bracket_type_combo.setCurrentText(state.get("top_bracket_type") or self.cross_top_bracket_type_combo.currentText()) + self._cross_update_designations_for(self.cross_top_bracket_size_combo, self.cross_top_bracket_type_combo.currentText()) + self._set_combo_to_data_or_text( + self.cross_top_bracket_size_combo, + state.get("top_bracket_data"), + state.get("top_bracket_text") or "", + ) + + if self.cross_bottom_bracket_type_combo is not None: + self.cross_bottom_bracket_type_combo.setCurrentText(state.get("bottom_bracket_type") or self.cross_bottom_bracket_type_combo.currentText()) + self._cross_update_designations_for(self.cross_bottom_bracket_size_combo, self.cross_bottom_bracket_type_combo.currentText()) + self._set_combo_to_data_or_text( + self.cross_bottom_bracket_size_combo, + state.get("bottom_bracket_data"), + state.get("bottom_bracket_text") or "", + ) + + self._on_cross_design_changed(self.cross_design_combo.currentText() if self.cross_design_combo is not None else "") + self._update_cross_previews() + return + + if key == "Rolled Beam": + if self.rolled_design_combo is not None: + self.rolled_design_combo.setCurrentText(state.get("design") or self.rolled_design_combo.currentText()) + if self.rolled_is_section_combo is not None: + desired = state.get("is_section") or "" + if desired: + self.rolled_is_section_combo.setCurrentText(desired) + elif self.rolled_is_section_combo.count() > 0: + self.rolled_is_section_combo.setCurrentIndex(0) + self._on_rolled_design_changed(self.rolled_design_combo.currentText() if self.rolled_design_combo is not None else "") + self._update_rolled_preview_and_props() + return + + if key == "Welded Beam": + if self.welded_design_combo is not None: + self.welded_design_combo.setCurrentText(state.get("design") or self.welded_design_combo.currentText()) + values = list(state.get("welded_values") or []) + for i, widget in enumerate(self._welded_inputs or []): + val = values[i] if i < len(values) else "" + if isinstance(widget, QComboBox): + if val: + widget.setCurrentText(val) + elif widget.count() > 0: + widget.setCurrentIndex(0) + elif isinstance(widget, QLineEdit): + widget.setText(val or "") + self._on_welded_design_changed(self.welded_design_combo.currentText() if self.welded_design_combo is not None else "") + self._update_welded_preview_and_props() + return + + def _store_view_state(self, view_key: str) -> None: + selection_key = self._selection_key(view_key) + if not selection_key: + return + self._state_by_view_member_key[selection_key] = self._snapshot_view_state(view_key) + self._active_key_by_view[view_key] = selection_key + + def _load_view_state(self, view_key: str) -> None: + selection_key = self._selection_key(view_key) + if not selection_key: + return + self._active_key_by_view[view_key] = selection_key + state = self._state_by_view_member_key.get(selection_key) + if state is None: + state = self._default_state_for_view(view_key) + self._apply_view_state(view_key, state) + + def _store_all_view_states(self) -> None: + for view_key in list(self._selection_by_view.keys()): + self._store_view_state(view_key) + + def _restore_all_views_for_current_selection(self) -> None: + for view_key in list(self._selection_by_view.keys()): + self._load_view_state(view_key) + + def _sync_selection_index_to_all_views(self, idx: int) -> None: + # Backward compatibility: treat this as girder-pair sync only. + self._sync_girder_index_to_all_views(idx) + + def _sync_girder_index_to_all_views(self, idx: int) -> None: + if self._block_selection_sync: + return + self._store_all_view_states() + self._block_selection_sync = True + try: + for view_key, (girders_combo, member_combo) in self._selection_by_view.items(): + if girders_combo is not None and girders_combo.count() > 0: + girders_combo.setCurrentIndex(min(max(idx, 0), girders_combo.count() - 1)) + # Rebuild member IDs to match the newly selected pair while + # preserving the M# selection when possible. + if member_combo is not None: + self._rebuild_member_ids_for_view(view_key, previous_member=(member_combo.currentText() or "").strip()) + try: + self._refresh_member_id_display(view_key) + except Exception: + pass + finally: + self._block_selection_sync = False + self._restore_all_views_for_current_selection() + + def _sync_member_index_to_all_views(self, member_idx: int) -> None: + if self._block_selection_sync: + return + self._store_all_view_states() + self._block_selection_sync = True + try: + for _view_key, (_girders_combo, member_combo) in self._selection_by_view.items(): + if member_combo is not None and member_combo.count() > 0: + member_combo.setCurrentIndex(min(max(member_idx, 0), member_combo.count() - 1)) + finally: + self._block_selection_sync = False + self._restore_all_views_for_current_selection() + + def _is_optimized(self, combo: QComboBox | None) -> bool: + if combo is None: + return False + return (combo.currentText() or "").strip() == "Optimized" + + def _design_combo_for_type(self, view_type: str | None) -> QComboBox | None: + key = (view_type or "").strip() + if key == "Cross Bracing": + return self.cross_design_combo + if key == "Rolled Beam": + return self.rolled_design_combo + if key == "Welded Beam": + return self.welded_design_combo + return None + + def _apply_rolled_custom_mode(self, is_custom: bool) -> None: + for widget in self._rolled_inputs: + if widget is not None: + widget.setEnabled(is_custom) + + def _on_rolled_design_changed(self, label: str) -> None: + is_custom = (label or "").strip() == "Customized" + self._apply_rolled_custom_mode(is_custom) + + def _apply_welded_custom_mode(self, is_custom: bool) -> None: + for widget in self._welded_inputs: + if widget is not None: + widget.setEnabled(is_custom) + self._update_welded_thickness_value_enabled_state() + + def _on_welded_design_changed(self, label: str) -> None: + is_custom = (label or "").strip() == "Customized" + self._apply_welded_custom_mode(is_custom) + def init_ui(self): main_layout = QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) @@ -63,6 +512,10 @@ def init_ui(self): self._set_current_type("Cross Bracing") + # Now that all views/widgets exist, restore saved/default state for the + # current (girder, member) selection across all views. + self._restore_all_views_for_current_selection() + def _add_type_view(self, key, widget, type_selector): self.views[key] = widget self.view_order.append(key) @@ -90,21 +543,41 @@ def _create_inner_box(self): def _create_heading_label(self, text): label = QLabel(text) - label.setStyleSheet("font-size: 12px; font-weight: 600; color: #4b4b4b; border: none; padding: 0px; margin: 0px;") + label.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none; padding: 0px; margin: 0px;") return label def _create_label(self, text): label = QLabel(text) - label.setStyleSheet("font-size: 11px; color: #4b4b4b; border: none;") + # Keep default label styling, but emphasize the bracing type selector. + weight = "700" if (text or "").strip() == "Type of Bracing:" else "400" + label.setStyleSheet(f"font-size: 11px; font-weight: {weight}; color: #4b4b4b; border: none;") return label def _add_grid_row(self, layout, row, text, widget): label = self._create_label(text) layout.addWidget(label, row, 0, Qt.AlignLeft | Qt.AlignVCenter) - widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + # Respect fixed-width widgets (e.g., combo boxes) so all fields remain uniform. + try: + fixed_width = widget.minimumWidth() == widget.maximumWidth() and widget.minimumWidth() > 0 + except Exception: + fixed_width = False + if fixed_width: + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + else: + widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) layout.addWidget(widget, row, 1) return row + 1 + def _configure_combo_box(self, combo: QComboBox) -> None: + """Keep combos stable without forcing the right-side diagram to collapse.""" + combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLengthWithIcon) + combo.setMinimumContentsLength(12) + try: + combo.setFixedWidth(int(getattr(self, "_combo_width", 190))) + combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + except Exception: + pass + def _create_image_placeholder(self, text, min_height=140): label = QLabel(text) label.setAlignment(Qt.AlignCenter) @@ -119,7 +592,53 @@ def _create_line_edit(self, placeholder=""): apply_field_style(line_edit) return line_edit - def _create_selection_box(self): + def _create_mode_value_widget(self, mode_combo: QComboBox, value_input: QLineEdit) -> QWidget: + widget = QWidget() + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + try: + widget.setFixedWidth(int(getattr(self, "_combo_width", 190))) + except Exception: + pass + widget.setMinimumHeight(28) + + layout = QHBoxLayout(widget) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(6) + layout.addWidget(mode_combo) + layout.addWidget(value_input) + return widget + + def _is_custom_thickness_mode(self, combo: QComboBox | None) -> bool: + if combo is None: + return False + return (combo.currentText() or "").strip().lower() == "custom" + + def _update_welded_thickness_value_enabled_state(self) -> None: + is_custom_design = (self.welded_design_combo.currentText() or "").strip() == "Customized" if self.welded_design_combo else False + + for mode_combo, value_input in ( + (getattr(self, "welded_web_thickness_combo", None), getattr(self, "welded_web_thickness_value", None)), + (getattr(self, "welded_top_thickness_combo", None), getattr(self, "welded_top_thickness_value", None)), + (getattr(self, "welded_bottom_thickness_combo", None), getattr(self, "welded_bottom_thickness_value", None)), + ): + if mode_combo is None or value_input is None: + continue + + show_value = bool(is_custom_design and self._is_custom_thickness_mode(mode_combo)) + value_input.setVisible(show_value) + value_input.setEnabled(show_value) + + try: + total_width = int(getattr(self, "_combo_width", 190)) + if show_value: + mode_combo.setFixedWidth(max(96, total_width - 84)) + value_input.setFixedWidth(78) + else: + mode_combo.setFixedWidth(total_width) + except Exception: + pass + + def _create_selection_box(self, view_key: str): box = self._create_inner_box() box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) layout = QGridLayout(box) @@ -130,19 +649,179 @@ def _create_selection_box(self): layout.setColumnStretch(1, 1) girders_combo = QComboBox() - girders_combo.addItems(["G1 to G2", "G3 to G4", "All"]) + # Populated from Girder Details when bound. (No All option.) + self._configure_combo_box(girders_combo) apply_field_style(girders_combo) layout.addWidget(self._create_label("Select Girders:"), 0, 0) layout.addWidget(girders_combo, 0, 1) + self._select_girders_combos.append(girders_combo) + member_combo = QComboBox() - member_combo.addItems(["E1-1, E1-2", "E2-1, E2-2", "Custom"]) + # Populated from Girder Details when bound. (No Custom option.) + self._configure_combo_box(member_combo) + # Member IDs are software-generated and should not be edited. + # Keep an internal (hidden) combo for state keys; display both ends. + member_combo.setEditable(False) + member_combo.setEnabled(False) + member_combo.setVisible(False) + try: + member_combo.setInsertPolicy(QComboBox.NoInsert) + except Exception: + pass apply_field_style(member_combo) + + member_display = QLineEdit() + member_display.setReadOnly(True) + apply_field_style(member_display) + try: + member_display.setFixedWidth(int(getattr(self, "_combo_width", 190))) + except Exception: + pass layout.addWidget(self._create_label("Member ID:"), 1, 0) - layout.addWidget(member_combo, 1, 1) + layout.addWidget(member_display, 1, 1) + + self._member_id_combos.append(member_combo) + + # Register selection widgets for state persistence. + self._selection_by_view[view_key] = (girders_combo, member_combo) + self._member_id_display_by_view[view_key] = member_display + + # Keep selection synced across views. + girders_combo.currentIndexChanged.connect(lambda idx, _k=view_key: self._sync_girder_index_to_all_views(idx)) + + # Seed with safe defaults so the UI isn't empty before binding. + try: + self.refresh_girder_options() + except Exception: + pass + + try: + self._refresh_member_id_display(view_key) + except Exception: + pass return box + def collect_data(self) -> dict: + """Serialize End Diaphragm inputs for all views/pairs/members.""" + # Persist any in-flight edits first. + try: + self._store_all_view_states() + except Exception: + pass + + pairs = self._girder_pairs() + view_keys = list(self._selection_by_view.keys()) + + # Serialize End Diaphragm inputs for both ends (M1/M2) for each girder-pair. + # Inputs are shared: M1 is treated as source-of-truth and duplicated to M2. + by_view: dict[str, dict] = {} + for view_key in view_keys: + by_view.setdefault(view_key, {}) + default_state = self._default_state_for_view(view_key) + for pair_idx, pair_label in enumerate(pairs, start=1): + source_key = f"{view_key}::{pair_label}::E{pair_idx}M1" + state = self._state_by_view_member_key.get(source_key) + if state is None: + # Backward compatibility: if an older save had only M2, use it. + state = self._state_by_view_member_key.get(f"{view_key}::{pair_label}::E{pair_idx}M2") + if state is None: + state = dict(default_state) + # Normalize back into M1 so internal state remains stable. + self._state_by_view_member_key[source_key] = dict(state) + + for member_id in self._member_ids_for_pair(pair_idx): + member_id = (member_id or "").strip().upper() + payload = dict(state or {}) + payload["select_girders"] = pair_label + payload["member_id"] = member_id + by_view[view_key][payload["member_id"]] = payload + + # Current selection (for convenience/backward compatibility). + current_view = str(self.current_type or "").strip() or "Cross Bracing" + current_pair = "" + current_member = "" + combos = self._selection_by_view.get(current_view) + if combos: + girders_combo, member_combo = combos + current_pair = (girders_combo.currentText() or "").strip() if girders_combo is not None else "" + current_member = (member_combo.currentText() or "").strip().upper() if member_combo is not None else "" + + return { + "type": current_view, + "select_girders": current_pair, + "member_id": current_member, + "end_diaphragm_by_view": by_view, + } + + def restore_data(self, data: dict) -> None: + """Restore previously saved End Diaphragm inputs.""" + if not isinstance(data, dict): + return + + restored = data.get("end_diaphragm_by_view") + if isinstance(restored, dict): + rebuilt: dict[str, dict] = {} + # Rebuild internal selection-key map. + for view_key, members in restored.items(): + if not isinstance(members, dict): + continue + for member_id, payload in members.items(): + if not isinstance(payload, dict): + continue + pair_label = str(payload.get("select_girders") or "").strip() + canonical_member = str(payload.get("member_id") or member_id or "").strip().upper() + # Inputs apply to both ends; normalize any M2 state into M1. + if canonical_member.endswith("M2"): + canonical_member = canonical_member[:-1] + "1" + if not view_key or not pair_label or not canonical_member: + continue + state = dict(payload) + state.pop("select_girders", None) + state.pop("member_id", None) + rebuilt[f"{view_key}::{pair_label}::{canonical_member}"] = state + self._state_by_view_member_key = rebuilt + + # Refresh combos and restore selection/type where possible. + try: + self.refresh_girder_options() + except Exception: + pass + + target_type = str(data.get("type") or "").strip() + if target_type: + try: + self._set_current_type(target_type) + except Exception: + pass + + target_pair = str(data.get("select_girders") or "").strip() + target_member = str(data.get("member_id") or "").strip().upper() + combos = self._selection_by_view.get(str(self.current_type or "Cross Bracing")) + if combos: + girders_combo, member_combo = combos + try: + if target_pair and girders_combo is not None: + girders_combo.setCurrentText(target_pair) + except Exception: + pass + try: + if member_combo is not None: + # Ensure items match selected pair, then set member. + self._rebuild_member_ids_for_view(str(self.current_type or "Cross Bracing"), previous_member=target_member) + try: + self._refresh_member_id_display(str(self.current_type or "Cross Bracing")) + except Exception: + pass + except Exception: + pass + + try: + self._restore_all_views_for_current_selection() + except Exception: + pass + def _create_section_properties_box(self, title): box = self._create_inner_box() layout = QVBoxLayout(box) @@ -175,6 +854,7 @@ def _create_section_properties_box(self, title): for row, name in enumerate(properties): label = self._create_label(name) field = self._create_line_edit() + field.setReadOnly(True) grid.addWidget(label, row, 0) grid.addWidget(field, row, 1) inputs[name] = field @@ -182,6 +862,336 @@ def _create_section_properties_box(self, title): layout.addLayout(grid) return box, inputs + @staticmethod + def _format_property_value(value): + if value is None: + return "" + if isinstance(value, (int, float)): + return f"{value:.2f}" + return str(value) + + @staticmethod + def _parse_float(text): + try: + return float(text) + except (TypeError, ValueError): + return None + + def _apply_section_properties(self, inputs, values): + for key, widget in inputs.items(): + previous = widget.blockSignals(True) + widget.setText(self._format_property_value(values.get(key))) + widget.blockSignals(previous) + + def _clear_section_properties(self, inputs): + for widget in inputs.values(): + previous = widget.blockSignals(True) + widget.clear() + widget.blockSignals(previous) + + def _populate_rolled_sections(self, combo: QComboBox) -> None: + designations = sorted(girder_properties.list_available_sections().keys()) + if not designations: + designations = [ + "ISMB 500", + "ISMB 550", + "ISMB 600", + "ISWB 500", + "ISWB 550", + "ISWB 600", + ] + block = combo.blockSignals(True) + combo.clear() + combo.addItems(designations) + combo.setCurrentIndex(0 if designations else -1) + combo.blockSignals(block) + + def _fetch_rolled_properties(self, designation: str): + if not designation: + return None + beam = girder_properties.get_beam_profile(designation) + if not beam: + return None + values = { + "Mass, M (Kg/m)": beam.mass_per_meter_kg, + "Sectional Area, a (cm2)": beam.area_cm2, + "2nd Moment of Area, Iz (cm4)": beam.moment_of_inertia_zz_cm4, + "2nd Moment of Area, Iy (cm4)": beam.moment_of_inertia_yy_cm4, + "Radius of Gyration, rz (cm)": beam.radius_of_gyration_z_cm, + "Radius of Gyration, ry (cm)": beam.radius_of_gyration_y_cm, + "Elastic Modulus, Zz (cm3)": beam.elastic_section_modulus_z_cm3, + "Elastic Modulus, Zy (cm3)": beam.elastic_section_modulus_y_cm3, + "Plastic Modulus, Zuz (cm3)": beam.plastic_section_modulus_z_cm3, + "Plastic Modulus, Zuy (cm3)": beam.plastic_section_modulus_y_cm3, + } + + area = values.get("Sectional Area, a (cm2)") + iz = values.get("2nd Moment of Area, Iz (cm4)") + iy = values.get("2nd Moment of Area, Iy (cm4)") + if values.get("Radius of Gyration, rz (cm)") is None and area and iz: + values["Radius of Gyration, rz (cm)"] = math.sqrt(iz / area) + if values.get("Radius of Gyration, ry (cm)") is None and area and iy: + values["Radius of Gyration, ry (cm)"] = math.sqrt(iy / area) + return values + + def _gather_welded_dimensions(self): + depth = self._parse_float(getattr(self, "welded_total_depth", QLineEdit()).text()) + top_width = self._parse_float(getattr(self, "welded_top_width", QLineEdit()).text()) + bottom_width = self._parse_float(getattr(self, "welded_bottom_width", QLineEdit()).text()) or top_width + + if not depth or not top_width or not bottom_width: + return None + + # Match Girder welded behavior: infer thicknesses unless Custom value is provided. + web_default = max(8.0, depth * 0.02) + flange_default = max(10.0, depth * 0.03) + + web_thickness = web_default + web_mode = getattr(self, "welded_web_thickness_combo", None) + web_value = getattr(self, "welded_web_thickness_value", None) + if self._is_custom_thickness_mode(web_mode): + web_thickness = self._parse_float(web_value.text() if web_value is not None else "") or web_default + + top_thickness = flange_default + top_mode = getattr(self, "welded_top_thickness_combo", None) + top_value = getattr(self, "welded_top_thickness_value", None) + if self._is_custom_thickness_mode(top_mode): + top_thickness = self._parse_float(top_value.text() if top_value is not None else "") or flange_default + + bottom_thickness = flange_default + bottom_mode = getattr(self, "welded_bottom_thickness_combo", None) + bottom_value = getattr(self, "welded_bottom_thickness_value", None) + if self._is_custom_thickness_mode(bottom_mode): + bottom_thickness = self._parse_float(bottom_value.text() if bottom_value is not None else "") or flange_default + + return { + "designation": "Custom Welded End Diaphragm", + "section_type": "welded", + "depth_mm": depth, + "top_flange_width_mm": top_width, + "bottom_flange_width_mm": bottom_width, + "web_thickness_mm": web_thickness, + "top_flange_thickness_mm": top_thickness, + "bottom_flange_thickness_mm": bottom_thickness, + } + + def _compute_welded_properties(self, dims): + depth = dims["depth_mm"] + top_width = dims["top_flange_width_mm"] + bottom_width = dims["bottom_flange_width_mm"] + web_thickness = dims["web_thickness_mm"] + top_thickness = dims["top_flange_thickness_mm"] + bottom_thickness = dims["bottom_flange_thickness_mm"] + + h_web = max(depth - top_thickness - bottom_thickness, 1.0) + area_top = top_width * top_thickness + area_bottom = bottom_width * bottom_thickness + area_web = web_thickness * h_web + area_total_mm2 = area_top + area_bottom + area_web + area_cm2 = area_total_mm2 / 100.0 + mass_kg_per_m = (area_total_mm2 / 1_000_000.0) * 7850.0 + + iz_web = (web_thickness * h_web**3) / 12.0 + iz_top = (top_width * top_thickness**3) / 12.0 + iz_bottom = (bottom_width * bottom_thickness**3) / 12.0 + distance_top = h_web / 2.0 + top_thickness / 2.0 + distance_bottom = h_web / 2.0 + bottom_thickness / 2.0 + iz_top += area_top * distance_top**2 + iz_bottom += area_bottom * distance_bottom**2 + iz_cm4 = (iz_web + iz_top + iz_bottom) / 10000.0 + + iy_web = (h_web * web_thickness**3) / 12.0 + iy_top = (top_thickness * top_width**3) / 12.0 + iy_bottom = (bottom_thickness * bottom_width**3) / 12.0 + iy_cm4 = (iy_web + iy_top + iy_bottom) / 10000.0 + + rz_cm = math.sqrt(iz_cm4 / area_cm2) if area_cm2 > 0 else None + ry_cm = math.sqrt(iy_cm4 / area_cm2) if area_cm2 > 0 else None + + depth_cm = depth / 10.0 + width_cm = max(top_width, bottom_width) / 10.0 + zz_cm3 = iz_cm4 / (depth_cm / 2.0) if depth_cm > 0 else None + zy_cm3 = iy_cm4 / (width_cm / 2.0) if width_cm > 0 else None + + zpl_major = ( + area_top * distance_top + area_bottom * distance_bottom + (web_thickness * h_web**2) / 4.0 + ) / 1000.0 + zpl_minor = ( + (top_thickness * top_width**2) / 4.0 + + (bottom_thickness * bottom_width**2) / 4.0 + + (h_web * web_thickness**2) / 4.0 + ) / 1000.0 + + return { + "Mass, M (Kg/m)": mass_kg_per_m, + "Sectional Area, a (cm2)": area_cm2, + "2nd Moment of Area, Iz (cm4)": iz_cm4, + "2nd Moment of Area, Iy (cm4)": iy_cm4, + "Radius of Gyration, rz (cm)": rz_cm, + "Radius of Gyration, ry (cm)": ry_cm, + "Elastic Modulus, Zz (cm3)": zz_cm3, + "Elastic Modulus, Zy (cm3)": zy_cm3, + "Plastic Modulus, Zuz (cm3)": zpl_major, + "Plastic Modulus, Zuy (cm3)": zpl_minor, + } + + def _update_rolled_preview_and_props(self): + if not self._rolled_preview: + return + + designation = getattr(self, "rolled_is_section_combo", QComboBox()).currentText() + beam = girder_properties.get_beam_profile(designation) + outline = girder_properties.get_rolled_section(designation) if beam is None else None + has_data = bool(beam or outline) + caption = f"Rolled section • {designation}" if has_data else "Rolled section unavailable" + + if beam: + self._rolled_preview.set_section(beam) + elif outline: + self._rolled_preview.set_dimensions( + depth_mm=outline["depth_mm"], + flange_width_mm=outline["top_flange_width_mm"], + bottom_flange_width_mm=outline["bottom_flange_width_mm"], + web_thickness_mm=outline["web_thickness_mm"], + flange_thickness_mm=outline["top_flange_thickness_mm"], + bottom_flange_thickness_mm=outline["bottom_flange_thickness_mm"], + ) + else: + self._rolled_preview.clear() + + if self._rolled_caption: + self._rolled_caption.setText(caption) + + values = self._fetch_rolled_properties(designation) + if values: + self._apply_section_properties(self._rolled_property_inputs, values) + else: + self._clear_section_properties(self._rolled_property_inputs) + + def _update_welded_preview_and_props(self): + if not self._welded_preview: + return + dims = self._gather_welded_dimensions() + caption = "Welded section preview" if dims else "Enter depth and flange widths" + + if dims: + self._welded_preview.set_dimensions( + depth_mm=dims["depth_mm"], + flange_width_mm=dims["top_flange_width_mm"], + bottom_flange_width_mm=dims["bottom_flange_width_mm"], + web_thickness_mm=dims["web_thickness_mm"], + flange_thickness_mm=dims["top_flange_thickness_mm"], + bottom_flange_thickness_mm=dims["bottom_flange_thickness_mm"], + show_welds=True, + ) + values = self._compute_welded_properties(dims) + self._apply_section_properties(self._welded_property_inputs, values) + else: + self._welded_preview.clear() + self._clear_section_properties(self._welded_property_inputs) + + if self._welded_caption: + self._welded_caption.setText(caption) + + # ---- Cross bracing helpers (angle/channel previews) ----------------- + def _cross_map_section_type(self, label: str) -> str: + mapping = { + "Angle": "angle", + "Double Angle (Long Leg)": "double_angle_long", + "Double Angle (Short Leg)": "double_angle_short", + "Channel": "channel", + "Double Channel": "double_channel", + } + return mapping.get((label or "").strip(), "angle") + + def _cross_display_name_for(self, designation: str, section_type: str) -> str: + name = (designation or "").strip() + if section_type in ("angle", "double_angle_long", "double_angle_short"): + name = name.lstrip("∠⌒⟡⟠").strip() + if name and not name.upper().startswith("IS"): + name = f"IS {name}" + return name + + def _cross_fill_combo(self, combo: QComboBox, items, section_type: str) -> None: + if combo is None: + return + block = combo.blockSignals(True) + combo.clear() + for des in items: + combo.addItem(self._cross_display_name_for(des, section_type), des) + combo.setCurrentIndex(0 if combo.count() > 0 else -1) + combo.blockSignals(block) + + def _cross_update_designations_for(self, combo: QComboBox, type_label: str) -> None: + stype = self._cross_map_section_type(type_label) + if stype in ("angle", "double_angle_long", "double_angle_short"): + items = self._cross_catalog.list_angles() + else: + items = self._cross_catalog.list_channels() + self._cross_fill_combo(combo, items, stype) + + def _cross_populate_designations(self) -> None: + angles = self._cross_catalog.list_angles() + self._cross_fill_combo(self.cross_bracing_section_combo, angles, "angle") + self._cross_fill_combo(self.cross_top_bracket_size_combo, angles, "angle") + self._cross_fill_combo(self.cross_bottom_bracket_size_combo, angles, "angle") + + def _cross_set_preview(self, key: str, type_combo: QComboBox, size_combo: QComboBox) -> None: + widget = self._cross_previews.get(key) + if not widget: + return + stype = self._cross_map_section_type(type_combo.currentText()) + designation = size_combo.currentData() or size_combo.currentText() + # Match CrossBracingDetailsTab behavior: for double angles, don't show total envelope. + show_double_total = stype not in ("double_angle_long", "double_angle_short") + widget.set_section(stype, designation, show_double_total) + + def _update_cross_previews(self) -> None: + if not self.cross_design_combo: + return + + is_custom = self.cross_design_combo.currentText() == "Customized" + if not is_custom: + for widget in self._cross_previews.values(): + widget.set_section("", "") + return + + self._cross_set_preview( + "bracing", + self.cross_bracing_section_type_combo, + self.cross_bracing_section_combo, + ) + self._cross_set_preview( + "top", + self.cross_top_bracket_type_combo, + self.cross_top_bracket_size_combo, + ) + self._cross_set_preview( + "bottom", + self.cross_bottom_bracket_type_combo, + self.cross_bottom_bracket_size_combo, + ) + + def _apply_cross_custom_mode(self, is_custom: bool) -> None: + # Keep preview/diagram column visible even in Optimized mode. + if self.cross_right_column is not None: + self.cross_right_column.setVisible(True) + for widget in ( + self.cross_bracing_section_type_combo, + self.cross_bracing_section_combo, + self.cross_top_bracket_type_combo, + self.cross_top_bracket_size_combo, + self.cross_bottom_bracket_type_combo, + self.cross_bottom_bracket_size_combo, + ): + if widget is not None: + widget.setEnabled(is_custom) + + def _on_cross_design_changed(self, label: str) -> None: + is_custom = (label or "").strip() == "Customized" + self._apply_cross_custom_mode(is_custom) + self._update_cross_previews() + # ---- View builders ---- def _build_cross_bracing_view(self): view = self._create_card_frame() @@ -193,14 +1203,14 @@ def _build_cross_bracing_view(self): left_layout = QVBoxLayout(left_column) left_layout.setContentsMargins(0, 0, 0, 0) left_layout.setSpacing(6) - left_layout.addWidget(self._create_selection_box()) + left_layout.addWidget(self._create_selection_box("Cross Bracing")) inputs_box = self._create_inner_box() inputs_layout = QVBoxLayout(inputs_box) inputs_layout.setContentsMargins(12, 4, 12, 8) inputs_layout.setSpacing(6) title = self._create_heading_label("Section Inputs:") - title.setStyleSheet("font-size: 12px; font-weight: 600; color: #4b4b4b; border: none; margin-top: 0px; margin-bottom: 2px;") + title.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none; margin-top: 0px; margin-bottom: 2px;") inputs_layout.addWidget(title) grid = QGridLayout() @@ -213,43 +1223,74 @@ def _build_cross_bracing_view(self): design_combo = QComboBox() design_combo.addItems(["Customized", "Optimized"]) + if design_combo.count() > 1: + design_combo.setCurrentIndex(1) # Default to Optimized + self._configure_combo_box(design_combo) apply_field_style(design_combo) row = self._add_grid_row(grid, 0, "Design:", design_combo) + self.cross_design_combo = design_combo type_selector = QComboBox() type_selector.addItems(VALUES_END_DIAPHRAGM_TYPE) type_selector.setCurrentText("Cross Bracing") + self._configure_combo_box(type_selector) apply_field_style(type_selector) row = self._add_grid_row(grid, row, "Type:", type_selector) bracing_combo = QComboBox() - bracing_combo.addItems(["K-Bracing", "X-Bracing", "Diagonal", "Horizontal"]) + # Keep consistent with the standalone Cross Bracing tab. + bracing_combo.addItems(["K-Bracing", "X-Bracing"]) + self._configure_combo_box(bracing_combo) apply_field_style(bracing_combo) row = self._add_grid_row(grid, row, "Type of Bracing:", bracing_combo) - - section_options = [ - "Double Angles", "Single Angle", "Channel", - "ISA 100 x 100 x 8", "ISA 110 x 110 x 10" + self.cross_bracing_type_combo = bracing_combo + + section_type_options = [ + "Angle", + "Double Angle (Long Leg)", + "Double Angle (Short Leg)", + "Channel", + "Double Channel", ] - bracing_section = QComboBox() - bracing_section.addItems(section_options) - apply_field_style(bracing_section) - row = self._add_grid_row(grid, row, "Bracing Section:", bracing_section) - - top_bracket = QComboBox() - top_bracket.addItems(section_options) - apply_field_style(top_bracket) - row = self._add_grid_row(grid, row, "Top Bracket Section:", top_bracket) - - bottom_bracket = QComboBox() - bottom_bracket.addItems(section_options) - apply_field_style(bottom_bracket) - row = self._add_grid_row(grid, row, "Bottom Bracket Section:", bottom_bracket) - - spacing_input = self._create_line_edit("Spacing (mm)") - spacing_input.setValidator(QDoubleValidator(0, 100000, 2)) - self._add_grid_row(grid, row, "Spacing:", spacing_input) + bracing_section_type = QComboBox() + bracing_section_type.addItems(section_type_options) + self._configure_combo_box(bracing_section_type) + apply_field_style(bracing_section_type) + row = self._add_grid_row(grid, row, "Bracing Section Type:", bracing_section_type) + self.cross_bracing_section_type_combo = bracing_section_type + + bracing_section_size = QComboBox() + self._configure_combo_box(bracing_section_size) + apply_field_style(bracing_section_size) + row = self._add_grid_row(grid, row, "Bracing Section:", bracing_section_size) + self.cross_bracing_section_combo = bracing_section_size + + top_bracket_type = QComboBox() + top_bracket_type.addItems(section_type_options) + self._configure_combo_box(top_bracket_type) + apply_field_style(top_bracket_type) + row = self._add_grid_row(grid, row, "Top Bracket Section:", top_bracket_type) + self.cross_top_bracket_type_combo = top_bracket_type + + top_bracket_size = QComboBox() + self._configure_combo_box(top_bracket_size) + apply_field_style(top_bracket_size) + row = self._add_grid_row(grid, row, "Top Bracket Size:", top_bracket_size) + self.cross_top_bracket_size_combo = top_bracket_size + + bottom_bracket_type = QComboBox() + bottom_bracket_type.addItems(section_type_options) + self._configure_combo_box(bottom_bracket_type) + apply_field_style(bottom_bracket_type) + row = self._add_grid_row(grid, row, "Bottom Bracket Section:", bottom_bracket_type) + self.cross_bottom_bracket_type_combo = bottom_bracket_type + + bottom_bracket_size = QComboBox() + self._configure_combo_box(bottom_bracket_size) + apply_field_style(bottom_bracket_size) + row = self._add_grid_row(grid, row, "Bottom Bracket Size:", bottom_bracket_size) + self.cross_bottom_bracket_size_combo = bottom_bracket_size inputs_layout.addLayout(grid) inputs_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) @@ -259,6 +1300,7 @@ def _build_cross_bracing_view(self): layout.addWidget(left_column) right_column = QWidget() + self.cross_right_column = right_column right_layout = QVBoxLayout(right_column) right_layout.setContentsMargins(0, 0, 0, 0) right_layout.setSpacing(10) @@ -272,7 +1314,7 @@ def _build_cross_bracing_view(self): type_layout.addWidget(self._create_image_placeholder("Bracing Layout", 170)) right_layout.addWidget(type_box) - for title in ["Bracing", "Top Bracket", "Bottom Bracket"]: + for key, title in [("bracing", "Bracing"), ("top", "Top Bracket"), ("bottom", "Bottom Bracket")]: preview_box = self._create_inner_box() preview_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) preview_layout = QVBoxLayout(preview_box) @@ -282,13 +1324,36 @@ def _build_cross_bracing_view(self): preview_heading = QLabel(title) preview_heading.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none;") preview_layout.addWidget(preview_heading) - preview_layout.addWidget(self._create_image_placeholder("Preview", 110)) + widget = PlaceholderSectionPreviewWidget(title, 110) + preview_layout.addWidget(widget) + self._cross_previews[key] = widget right_layout.addWidget(preview_box) right_layout.addStretch() layout.addWidget(right_column) layout.setStretch(0, 3) layout.setStretch(1, 4) + + # Wire up dynamic designations + previews (same logic as CrossBracingDetailsTab). + design_combo.currentTextChanged.connect(self._on_cross_design_changed) + + bracing_section_type.currentTextChanged.connect( + lambda label: (self._cross_update_designations_for(bracing_section_size, label), self._update_cross_previews()) + ) + bracing_section_size.currentTextChanged.connect(self._update_cross_previews) + + top_bracket_type.currentTextChanged.connect( + lambda label: (self._cross_update_designations_for(top_bracket_size, label), self._update_cross_previews()) + ) + top_bracket_size.currentTextChanged.connect(self._update_cross_previews) + + bottom_bracket_type.currentTextChanged.connect( + lambda label: (self._cross_update_designations_for(bottom_bracket_size, label), self._update_cross_previews()) + ) + bottom_bracket_size.currentTextChanged.connect(self._update_cross_previews) + + self._cross_populate_designations() + self._on_cross_design_changed(design_combo.currentText()) return view, type_selector def _build_rolled_view(self): @@ -301,7 +1366,7 @@ def _build_rolled_view(self): left_layout = QVBoxLayout(left_column) left_layout.setContentsMargins(0, 0, 0, 0) left_layout.setSpacing(8) - left_layout.addWidget(self._create_selection_box()) + left_layout.addWidget(self._create_selection_box("Rolled Beam")) inputs_box = self._create_inner_box() inputs_layout = QVBoxLayout(inputs_box) @@ -321,22 +1386,27 @@ def _build_rolled_view(self): design_combo = QComboBox() design_combo.addItems(["Customized", "Optimized"]) + if design_combo.count() > 1: + design_combo.setCurrentIndex(1) # Default to Optimized + self.rolled_design_combo = design_combo + self._configure_combo_box(design_combo) apply_field_style(design_combo) row = self._add_grid_row(grid, 0, "Design:", design_combo) type_selector = QComboBox() type_selector.addItems(VALUES_END_DIAPHRAGM_TYPE) type_selector.setCurrentText("Rolled Beam") + self._configure_combo_box(type_selector) apply_field_style(type_selector) row = self._add_grid_row(grid, row, "Type:", type_selector) is_section_combo = QComboBox() - is_section_combo.addItems([ - "ISMB 500", "ISMB 550", "ISMB 600", - "ISWB 500", "ISWB 550", "ISWB 600" - ]) + self._configure_combo_box(is_section_combo) apply_field_style(is_section_combo) + self._populate_rolled_sections(is_section_combo) self._add_grid_row(grid, row, "IS Section:", is_section_combo) + self.rolled_is_section_combo = is_section_combo + self._rolled_inputs = [is_section_combo] inputs_layout.addLayout(grid) inputs_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) @@ -354,16 +1424,30 @@ def _build_rolled_view(self): image_layout = QVBoxLayout(image_box) image_layout.setContentsMargins(12, 8, 12, 10) image_layout.setSpacing(6) - image_layout.addWidget(self._create_heading_label("Dynamic Image")) - image_layout.addWidget(self._create_image_placeholder("Rolled Section", 170)) + + self._rolled_preview = RolledSectionPreview() + image_layout.addWidget(self._rolled_preview, 1) + + self._rolled_caption = QLabel("Select a rolled section") + self._rolled_caption.setAlignment(Qt.AlignCenter) + self._rolled_caption.setStyleSheet( + "QLabel { font-size: 12px; font-weight: 700; color: #1e1e1e; border: none; padding-top: 6px; }" + ) + image_layout.addWidget(self._rolled_caption) right_layout.addWidget(image_box) - props_box, _ = self._create_section_properties_box("Section Properties:") + props_box, props_inputs = self._create_section_properties_box("Section Properties:") + self._rolled_property_inputs = props_inputs props_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) right_layout.addWidget(props_box) right_layout.addStretch() layout.addWidget(right_column) + + design_combo.currentTextChanged.connect(self._on_rolled_design_changed) + is_section_combo.currentTextChanged.connect(self._update_rolled_preview_and_props) + self._update_rolled_preview_and_props() + self._on_rolled_design_changed(design_combo.currentText()) return view, type_selector def _build_welded_view(self): @@ -376,7 +1460,7 @@ def _build_welded_view(self): left_layout = QVBoxLayout(left_column) left_layout.setContentsMargins(0, 0, 0, 0) left_layout.setSpacing(8) - left_layout.addWidget(self._create_selection_box()) + left_layout.addWidget(self._create_selection_box("Welded Beam")) inputs_box = self._create_inner_box() inputs_layout = QVBoxLayout(inputs_box) @@ -394,46 +1478,122 @@ def _build_welded_view(self): design_combo = QComboBox() design_combo.addItems(["Customized", "Optimized"]) + if design_combo.count() > 1: + design_combo.setCurrentIndex(1) # Default to Optimized + self.welded_design_combo = design_combo + self._configure_combo_box(design_combo) apply_field_style(design_combo) row = self._add_grid_row(grid, 0, "Design:", design_combo) type_selector = QComboBox() type_selector.addItems(VALUES_END_DIAPHRAGM_TYPE) type_selector.setCurrentText("Welded Beam") + self._configure_combo_box(type_selector) apply_field_style(type_selector) row = self._add_grid_row(grid, row, "Type:", type_selector) symmetry_combo = QComboBox() symmetry_combo.addItems(["Girder Symmetric", "Girder Unsymmetric"]) + self._configure_combo_box(symmetry_combo) apply_field_style(symmetry_combo) row = self._add_grid_row(grid, row, "Symmetry:", symmetry_combo) total_depth = self._create_line_edit() + total_depth.setValidator(QDoubleValidator(0, 1_000_000, 3)) + try: + total_depth.setFixedWidth(int(getattr(self, "_combo_width", 190))) + total_depth.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + except Exception: + pass row = self._add_grid_row(grid, row, "Total Depth (mm):", total_depth) + self.welded_total_depth = total_depth web_thick_combo = QComboBox() - web_thick_combo.addItems(["All", "Custom"]) + web_thick_combo.addItems(VALUES_PROFILE_SCOPE if "VALUES_PROFILE_SCOPE" in globals() else ["All", "Custom"]) + self._configure_combo_box(web_thick_combo) apply_field_style(web_thick_combo) - row = self._add_grid_row(grid, row, "Web Thickness (mm):", web_thick_combo) + + web_thick_value = self._create_line_edit() + web_thick_value.setValidator(QDoubleValidator(0, 1_000_000, 3)) + try: + web_thick_value.setFixedWidth(78) + web_thick_value.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + except Exception: + pass + + web_thick_widget = self._create_mode_value_widget(web_thick_combo, web_thick_value) + row = self._add_grid_row(grid, row, "Web Thickness (mm):", web_thick_widget) + self.welded_web_thickness_combo = web_thick_combo + self.welded_web_thickness_value = web_thick_value top_width = self._create_line_edit() + top_width.setValidator(QDoubleValidator(0, 1_000_000, 3)) + try: + top_width.setFixedWidth(int(getattr(self, "_combo_width", 190))) + top_width.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + except Exception: + pass row = self._add_grid_row(grid, row, "Width of Top Flange (mm):", top_width) + self.welded_top_width = top_width top_thickness_combo = QComboBox() - top_thickness_combo.addItems(["All", "Custom"]) + top_thickness_combo.addItems(VALUES_PROFILE_SCOPE if "VALUES_PROFILE_SCOPE" in globals() else ["All", "Custom"]) + self._configure_combo_box(top_thickness_combo) apply_field_style(top_thickness_combo) - row = self._add_grid_row(grid, row, "Top Flange Thickness (mm):", top_thickness_combo) + + top_thickness_value = self._create_line_edit() + top_thickness_value.setValidator(QDoubleValidator(0, 1_000_000, 3)) + try: + top_thickness_value.setFixedWidth(78) + top_thickness_value.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + except Exception: + pass + + top_thickness_widget = self._create_mode_value_widget(top_thickness_combo, top_thickness_value) + row = self._add_grid_row(grid, row, "Top Flange Thickness (mm):", top_thickness_widget) + self.welded_top_thickness_combo = top_thickness_combo + self.welded_top_thickness_value = top_thickness_value bottom_width = self._create_line_edit() + bottom_width.setValidator(QDoubleValidator(0, 1_000_000, 3)) + try: + bottom_width.setFixedWidth(int(getattr(self, "_combo_width", 190))) + bottom_width.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + except Exception: + pass row = self._add_grid_row(grid, row, "Width of Bottom Flange (mm):", bottom_width) + self.welded_bottom_width = bottom_width bottom_thickness_combo = QComboBox() - bottom_thickness_combo.addItems(["All", "Custom"]) + bottom_thickness_combo.addItems(VALUES_PROFILE_SCOPE if "VALUES_PROFILE_SCOPE" in globals() else ["All", "Custom"]) + self._configure_combo_box(bottom_thickness_combo) apply_field_style(bottom_thickness_combo) - row = self._add_grid_row(grid, row, "Bottom Flange Thickness (mm):", bottom_thickness_combo) - bearing_thickness = self._create_line_edit() - self._add_grid_row(grid, row, "Bearing Stiffener Thickness (mm):", bearing_thickness) + bottom_thickness_value = self._create_line_edit() + bottom_thickness_value.setValidator(QDoubleValidator(0, 1_000_000, 3)) + try: + bottom_thickness_value.setFixedWidth(78) + bottom_thickness_value.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + except Exception: + pass + + bottom_thickness_widget = self._create_mode_value_widget(bottom_thickness_combo, bottom_thickness_value) + row = self._add_grid_row(grid, row, "Bottom Flange Thickness (mm):", bottom_thickness_widget) + self.welded_bottom_thickness_combo = bottom_thickness_combo + self.welded_bottom_thickness_value = bottom_thickness_value + + self._welded_inputs = [ + symmetry_combo, + total_depth, + web_thick_combo, + web_thick_value, + top_width, + top_thickness_combo, + top_thickness_value, + bottom_width, + bottom_thickness_combo, + bottom_thickness_value, + ] inputs_layout.addLayout(grid) inputs_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) @@ -451,16 +1611,37 @@ def _build_welded_view(self): image_layout = QVBoxLayout(image_box) image_layout.setContentsMargins(12, 8, 12, 10) image_layout.setSpacing(6) - image_layout.addWidget(self._create_heading_label("Dynamic Image")) - image_layout.addWidget(self._create_image_placeholder("Welded Section", 170)) + + self._welded_preview = RolledSectionPreview() + image_layout.addWidget(self._welded_preview, 1) + + self._welded_caption = QLabel("Enter welded inputs to preview") + self._welded_caption.setAlignment(Qt.AlignCenter) + self._welded_caption.setStyleSheet( + "QLabel { font-size: 12px; font-weight: 700; color: #1e1e1e; border: none; padding-top: 6px; }" + ) + image_layout.addWidget(self._welded_caption) right_layout.addWidget(image_box) - props_box, _ = self._create_section_properties_box("Section Properties:") + props_box, props_inputs = self._create_section_properties_box("Section Properties:") + self._welded_property_inputs = props_inputs props_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) right_layout.addWidget(props_box) right_layout.addStretch() layout.addWidget(right_column) + + design_combo.currentTextChanged.connect(self._on_welded_design_changed) + for watcher in (total_depth, top_width, bottom_width): + watcher.textChanged.connect(self._update_welded_preview_and_props) + for watcher in (web_thick_value, top_thickness_value, bottom_thickness_value): + watcher.textChanged.connect(self._update_welded_preview_and_props) + for combo in (web_thick_combo, top_thickness_combo, bottom_thickness_combo): + combo.currentTextChanged.connect(lambda _t: self._update_welded_thickness_value_enabled_state()) + combo.currentTextChanged.connect(self._update_welded_preview_and_props) + self._update_welded_preview_and_props() + self._on_welded_design_changed(design_combo.currentText()) + self._update_welded_thickness_value_enabled_state() return view, type_selector def _handle_type_selection(self, value): @@ -474,6 +1655,10 @@ def _set_current_type(self, target): return if self.current_type == target: return + + previous_type = self.current_type + previous_was_optimized = self._is_optimized(self._design_combo_for_type(previous_type)) + self.current_type = target index = self.view_order.index(target) self.type_stack.setCurrentIndex(index) @@ -481,3 +1666,59 @@ def _set_current_type(self, target): for selector in self.type_selectors: selector.setCurrentText(target) self.block_type_sync = False + + # If the user was in Optimized mode, keep Optimized when switching types. + if previous_was_optimized: + next_design_combo = self._design_combo_for_type(target) + if next_design_combo is not None: + next_design_combo.setCurrentText("Optimized") + + # Ensure enabled/disabled state matches the selected design for the active view. + if target == "Cross Bracing" and self.cross_design_combo is not None: + self._on_cross_design_changed(self.cross_design_combo.currentText()) + elif target == "Rolled Beam" and self.rolled_design_combo is not None: + self._on_rolled_design_changed(self.rolled_design_combo.currentText()) + elif target == "Welded Beam" and self.welded_design_combo is not None: + self._on_welded_design_changed(self.welded_design_combo.currentText()) + + # Refresh preview/properties for the active view. + if target == "Cross Bracing": + self._update_cross_previews() + elif target == "Rolled Beam": + self._update_rolled_preview_and_props() + elif target == "Welded Beam": + self._update_welded_preview_and_props() + + # ---- External API ----------------------------------------------------- + def reset_defaults(self) -> None: + """Reset End Diaphragm inputs (all views) back to initial/default state.""" + + # Clear per-selection persistence. + self._state_by_view_member_key.clear() + self._active_key_by_view.clear() + + # Reset selection combos to the first option across all views. + self._block_selection_sync = True + try: + for girders_combo, member_combo in (self._selection_by_view or {}).values(): + if girders_combo is not None and girders_combo.count() > 0: + girders_combo.setCurrentIndex(0) + if member_combo is not None and member_combo.count() > 0: + member_combo.setCurrentIndex(0) + finally: + self._block_selection_sync = False + + # Set the default type and ensure it doesn't try to preserve optimized + # state from a previous selection. + try: + self.current_type = None + self._set_current_type("Cross Bracing") + except Exception: + pass + + # Apply default view state for current selection. + try: + self._restore_all_views_for_current_selection() + except Exception: + pass + diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py index dc9943062..8185ab623 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py @@ -1,25 +1,299 @@ -"""Schema-driven Girder Details tab for member properties.""" +from __future__ import annotations +import math +import copy +import sqlite3 +from dataclasses import dataclass +from pathlib import Path +from typing import Dict, List, Optional + +from PySide6.QtCore import Qt +from PySide6.QtGui import QDoubleValidator, QColor, QPalette, QPen from PySide6.QtWidgets import ( - QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, - QComboBox, QScrollArea, QSizePolicy, QFrame, QGridLayout + QComboBox, + QFrame, + QGridLayout, + QHBoxLayout, + QHeaderView, + QLabel, + QLineEdit, + QMessageBox, + QPushButton, + QScrollArea, + QSizePolicy, + QStyledItemDelegate, + QStyle, + QStyleOptionViewItem, + QTableWidget, + QTableWidgetItem, + QVBoxLayout, + QWidget, ) -from PySide6.QtCore import Qt -from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import GIRDER_DETAILS_SCHEMA +from osdagbridge.core.utils.common import ( + VALUES_GIRDER_DESIGN_MODE, + VALUES_GIRDER_SPAN_MODE, + VALUES_GIRDER_SYMMETRY, + VALUES_GIRDER_TYPE, + VALUES_PROFILE_SCOPE, + VALUES_TORSIONAL_RESTRAINT, + VALUES_WARPING_RESTRAINT, + VALUES_WEB_TYPE, +) from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview + + +DEFAULT_MEMBER_LENGTH_M = 30.0 +DEFAULT_DISTANCE_START_M = 0.0 +# Upper bound for girder-specific UI controls (dropdowns/tables). +# This is a UI safety cap; actual girder count is driven by the "No. of Girders" input. +MAX_GIRDER_COUNT = 20 + + +def _locate_database() -> Path: + current = Path(__file__).resolve() + for parent in current.parents: + candidate = parent / "core" / "data" / "ResourceFiles" / "Intg_osdag.sqlite" + if candidate.exists(): + return candidate + # Fall back to the repo-relative location even if it does not exist to avoid crashes. + return current.parents[1] / "core" / "data" / "ResourceFiles" / "Intg_osdag.sqlite" + + +DB_PATH = _locate_database() + + +@dataclass(frozen=True) +class BeamSection: + """Data container for rolled beam properties.""" + + designation: str + type_name: str + mass_per_meter_kg: float + area_cm2: float + depth_mm: float + flange_width_mm: float + web_thickness_mm: float + flange_thickness_mm: float + root_radius_mm: float + toe_radius_mm: float + moment_of_inertia_zz_cm4: float + moment_of_inertia_yy_cm4: float + radius_of_gyration_z_cm: float + radius_of_gyration_y_cm: float + elastic_section_modulus_z_cm3: float + elastic_section_modulus_y_cm3: float + plastic_section_modulus_z_cm3: float + plastic_section_modulus_y_cm3: float + torsion_constant_cm4: float + warping_constant_cm6: float + + +class GirderSectionCatalog: + """Loads rolled girder information from the bundled SQLite database.""" + + def __init__(self, db_path: Path = DB_PATH) -> None: + self.db_path = db_path + self._sections: Dict[str, BeamSection] = {} + self._outlines: Dict[str, dict] = {} + self._load() + + def _load(self) -> None: + if not self.db_path.exists(): + return + connection = sqlite3.connect(self.db_path) + cursor = connection.cursor() + try: + cursor.execute( + """ + SELECT + Designation, Type, Mass, Area, D, B, tw, T, + R1, R2, Iz, Iy, rz, ry, Zz, Zy, Zpz, Zpy, It, Iw + FROM Beams + """ + ) + for row in cursor.fetchall(): + ( + designation, + type_name, + mass, + area, + depth, + flange_width, + web_thickness, + flange_thickness, + r1, + r2, + iz, + iy, + rz, + ry, + zz, + zy, + zpz, + zpy, + it, + iw, + ) = row + section = BeamSection( + designation=str(designation).strip(), + type_name=str(type_name or "").strip(), + mass_per_meter_kg=float(mass or 0.0), + area_cm2=float(area or 0.0), + depth_mm=float(depth or 0.0), + flange_width_mm=float(flange_width or 0.0), + web_thickness_mm=float(web_thickness or 0.0), + flange_thickness_mm=float(flange_thickness or 0.0), + root_radius_mm=float(r1 or 0.0), + toe_radius_mm=float(r2 or 0.0), + moment_of_inertia_zz_cm4=float(iz or 0.0), + moment_of_inertia_yy_cm4=float(iy or 0.0), + radius_of_gyration_z_cm=float(rz or 0.0), + radius_of_gyration_y_cm=float(ry or 0.0), + elastic_section_modulus_z_cm3=float(zz or 0.0), + elastic_section_modulus_y_cm3=float(zy or 0.0), + plastic_section_modulus_z_cm3=float(zpz or 0.0), + plastic_section_modulus_y_cm3=float(zpy or 0.0), + torsion_constant_cm4=float(it or 0.0), + warping_constant_cm6=float(iw or 0.0), + ) + self._sections[section.designation] = section + self._outlines[section.designation] = { + "designation": section.designation, + "depth_mm": section.depth_mm, + "top_flange_width_mm": section.flange_width_mm, + "bottom_flange_width_mm": section.flange_width_mm, + "web_thickness_mm": section.web_thickness_mm, + "top_flange_thickness_mm": section.flange_thickness_mm, + "bottom_flange_thickness_mm": section.flange_thickness_mm, + } + finally: + connection.close() + + def list_available_sections(self) -> Dict[str, BeamSection]: + return dict(self._sections) + + def get_beam_profile(self, designation: str) -> Optional[BeamSection]: + if not designation: + return None + return self._sections.get(designation.strip()) + + def get_rolled_section(self, designation: str) -> Optional[dict]: + if not designation: + return None + return self._outlines.get(designation.strip()) + + +girder_properties = GirderSectionCatalog() + + +class _ReadOnlyCellDelegate(QStyledItemDelegate): + """Render read-only table cells in a muted gray, regardless of selection.""" + + _bg = QColor("#fafafa") + _text = QColor("#666666") + + def paint(self, painter, option, index): # noqa: N802 (Qt naming) + opt = QStyleOptionViewItem(option) + # Keep read-only cells gray even when the row is selected. + if opt.state & QStyle.State_Selected: + opt.state &= ~QStyle.State_Selected + opt.backgroundBrush = self._bg + opt.palette.setColor(QPalette.Base, self._bg) + opt.palette.setColor(QPalette.Text, self._text) + super().paint(painter, opt, index) + + +class _EndDistanceDelegate(QStyledItemDelegate): + """Make the End column feel editable (white) with a visible edit affordance.""" + + _bg = QColor("#ffffff") + _border = QColor("#c0c0c0") + + def paint(self, painter, option, index): # noqa: N802 (Qt naming) + # Keep End cells white even when the row is selected. + opt = QStyleOptionViewItem(option) + if opt.state & QStyle.State_Selected: + opt.state &= ~QStyle.State_Selected + + opt.backgroundBrush = self._bg + opt.palette.setColor(QPalette.Base, self._bg) + + super().paint(painter, opt, index) + + # Border indicates "editable". + painter.save() + pen = QPen(self._border) + pen.setWidth(1) + painter.setPen(pen) + painter.drawRoundedRect(opt.rect.adjusted(3, 3, -3, -3), 4, 4) + painter.restore() + + def createEditor(self, parent, option, index): # noqa: N802 (Qt naming) + editor = QLineEdit(parent) + editor.setAlignment(Qt.AlignCenter) + editor.setValidator(QDoubleValidator(0.0, 1e12, 3, editor)) + editor.setStyleSheet( + "QLineEdit { padding: 0px 4px; border: 2px solid #90AF13; border-radius: 4px; " + "background: #ffffff; color: #000000; selection-background-color: #90AF13; selection-color: #ffffff; }" + ) + return editor + + def setEditorData(self, editor, index): # noqa: N802 (Qt naming) + value = index.data() or "" + editor.setText(str(value)) + editor.selectAll() + + def setModelData(self, editor, model, index): # noqa: N802 (Qt naming) + model.setData(index, editor.text()) class GirderDetailsTab(QWidget): - """Tab for Girder Details using the schema definition.""" + """Tab for Girder Details styled to match the provided reference.""" def __init__(self, parent=None): super().__init__(parent) self.welded_rows = [] self.rolled_rows = [] + self.symmetry_row = [] + self.web_type_row = [] self.section_property_inputs = {} - self.girder_count = 2 - self.widgets = {} + # Segment chain is stored per girder: + # { 'G1': [ {'id': 'G1M1', 'start': 0.0, 'end': 30.0}, ... ], 'G2': [...] } + self.segment_chain: Dict[str, List[Dict[str, float]]] = {} + self._suppress_distance_updates = False + self._suppress_member_state_updates = False + # Always expose up to MAX_GIRDER_COUNT main girders in the UI. + self.available_girders = [f"G{i}" for i in range(1, MAX_GIRDER_COUNT + 1)] + self._girder_combo_connected = False + + # Master-Detail UI state + self._current_girder: str = self.available_girders[0] if self.available_girders else "G1" + self._current_segment_index: int = 0 + + # Per-member (Member ID) persistence + dirty tracking. + # {"G1": {"G1M1": {"inputs": {...}}}} + self._member_state: Dict[str, Dict[str, dict]] = {} + self._dirty_members: set[tuple[str, str]] = set() + self._last_member_combo_index: int = 0 + # Template state used when a member is first visited. + self._default_member_state: Optional[dict] = None + # Section Inputs widgets are built later than the overview card. Avoid + # applying/storing per-member UI state before they exist. + self._section_inputs_built: bool = False + + # Segment Manager widgets (right column) + self.girder_dropdown: Optional[QComboBox] = None + self.segment_table: Optional[QTableWidget] = None + self.split_add_button: Optional[QPushButton] = None + self.split_remove_button: Optional[QPushButton] = None + + # Segment Details widgets (left column) + self.segment_length_input: Optional[QLineEdit] = None + + # Section Inputs widgets + self.member_id_combo: Optional[QComboBox] = None self.init_ui() def init_ui(self): @@ -43,67 +317,876 @@ def init_ui(self): content_layout.setSpacing(12) content_layout.addWidget(self._build_overview_card()) - content_layout.addWidget(self._build_section_card()) + # content_layout.addWidget(self._build_section_card()) content_layout.addStretch() def _build_overview_card(self): card = self._create_card_frame() - layout = QGridLayout(card) - layout.setContentsMargins(18, 16, 18, 16) - layout.setHorizontalSpacing(20) - layout.setVerticalSpacing(12) - - row = 0 - for field_def in GIRDER_DETAILS_SCHEMA["overview"]: - label = self._create_label(field_def["label"]) - widget = self._create_field(field_def) - if field_def.get("id") == "span": - layout.addWidget(label, row, 2) - layout.addWidget(widget, row, 3) - else: - layout.addWidget(label, row, 0) - layout.addWidget(widget, row, 1) - row += 1 - - self.member_id_input = QLineEdit("G1-1") - apply_field_style(self.member_id_input) - self._set_field_width(self.member_id_input) + outer = QGridLayout(card) + outer.setContentsMargins(18, 16, 18, 16) + outer.setHorizontalSpacing(16) + outer.setVerticalSpacing(16) + + def _cad_placeholder(label: str) -> QFrame: + frame = QFrame() + frame.setFixedHeight(160) + frame.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + frame.setStyleSheet( + "QFrame { border: 2px dashed #b7b7b7; border-radius: 8px; background: #ffffff; }" + ) + layout = QVBoxLayout(frame) + layout.setContentsMargins(10, 10, 10, 10) + layout.setSpacing(0) + text = QLabel(label) + text.setAlignment(Qt.AlignCenter) + text.setStyleSheet("font-size: 12px; font-weight: 700; color: #6f6f6f;") + layout.addWidget(text) + return frame + + # LEFT: Select Girder + Total Span (matches reference layout) + left_panel = self._create_inner_box() + left_panel.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + left_layout = QVBoxLayout(left_panel) + left_layout.setContentsMargins(12, 10, 12, 10) + left_layout.setSpacing(10) + + # Placeholder area for CAD diagram (left) + left_layout.addWidget(_cad_placeholder("CAD Diagram Placeholder")) + + details_box = QWidget() + details_layout = QGridLayout(details_box) + details_layout.setContentsMargins(0, 0, 0, 0) + details_layout.setHorizontalSpacing(16) + details_layout.setVerticalSpacing(10) + details_layout.setColumnMinimumWidth(0, 160) + details_layout.setColumnStretch(0, 0) + details_layout.setColumnStretch(1, 1) + + # Keep span mode internally (for existing behavior) but hide it to match the reference UI. + self.span_combo = QComboBox() + self.span_combo.addItems(VALUES_GIRDER_SPAN_MODE) + apply_field_style(self.span_combo) + self._set_field_width(self.span_combo) + self.span_combo.currentTextChanged.connect(self._on_span_changed) + span_label = self._create_label("Span:") + span_label.setVisible(False) + self.span_combo.setVisible(False) + details_layout.addWidget(span_label, 0, 0, Qt.AlignLeft | Qt.AlignVCenter) + details_layout.addWidget(self.span_combo, 0, 1) + + details_layout.addWidget(self._create_label("Select Girder:"), 1, 0, Qt.AlignLeft | Qt.AlignVCenter) + self.girder_dropdown = QComboBox() + # Display-friendly names while keeping stable internal IDs. + for girder in self.available_girders: + label = f"Girder {girder[1:]}" if girder.startswith("G") and girder[1:].isdigit() else girder + self.girder_dropdown.addItem(label, girder) + apply_field_style(self.girder_dropdown) + self._set_field_width(self.girder_dropdown) + self.girder_dropdown.currentIndexChanged.connect(lambda _idx: self._on_girder_changed(self.girder_dropdown.currentData())) + details_layout.addWidget(self.girder_dropdown, 1, 1) self.length_input = QLineEdit("30") apply_field_style(self.length_input) self._set_field_width(self.length_input) + self.length_input.setReadOnly(False) + self.length_input.textChanged.connect(self._on_length_changed) + details_layout.addWidget(self._create_label("Total Span (m):"), 2, 0, Qt.AlignLeft | Qt.AlignVCenter) + details_layout.addWidget(self.length_input, 2, 1) - layout.addWidget(self._create_label("Member ID:"), row, 0) - layout.addWidget(self.member_id_input, row, 1) - layout.addWidget(self._create_label("Length (m):"), row, 2) - layout.addWidget(self.length_input, row, 3) - row += 1 + # Hidden legacy fields: still used by existing split/ripple logic. + self.member_id_input = QLineEdit() + apply_field_style(self.member_id_input) + self.member_id_input.setReadOnly(True) + self.member_id_input.setVisible(False) self.distance_start_input = QLineEdit("0") - self.distance_end_input = QLineEdit("30") apply_field_style(self.distance_start_input) + self.distance_start_input.setReadOnly(True) + self.distance_start_input.setVisible(False) + + self.distance_end_input = QLineEdit("30") apply_field_style(self.distance_end_input) - self._set_field_width(self.distance_start_input, 80) - self._set_field_width(self.distance_end_input, 80) + self.distance_end_input.editingFinished.connect(self._on_distance_end_changed) + self.distance_end_input.setVisible(False) + + self.segment_length_input = QLineEdit("30") + apply_field_style(self.segment_length_input) + self.segment_length_input.setReadOnly(True) + self.segment_length_input.setVisible(False) + + details_layout.addWidget(self.member_id_input, 3, 0, 1, 2) + details_layout.addWidget(self.distance_start_input, 4, 0, 1, 2) + details_layout.addWidget(self.distance_end_input, 5, 0, 1, 2) + details_layout.addWidget(self.segment_length_input, 6, 0, 1, 2) + + left_layout.addWidget(details_box) + left_layout.addStretch(1) + + # RIGHT: Member segments table + add/remove buttons (matches reference layout) + manager_box = self._create_inner_box() + manager_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + manager_layout = QVBoxLayout(manager_box) + manager_layout.setContentsMargins(12, 10, 12, 10) + manager_layout.setSpacing(10) + + # Placeholder area for CAD diagram (right) + manager_layout.addWidget(_cad_placeholder("CAD Diagram Placeholder")) + + table_row = QWidget() + table_row_layout = QHBoxLayout(table_row) + table_row_layout.setContentsMargins(0, 0, 0, 0) + table_row_layout.setSpacing(10) + + self.segment_table = QTableWidget(0, 4) + self.segment_table.setHorizontalHeaderLabels(["Member ID", "Start (m)", "End (m)", "Length (m)"]) + self.segment_table.horizontalHeader().setVisible(True) + self.segment_table.verticalHeader().setVisible(False) + self.segment_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.segment_table.horizontalHeader().setMinimumHeight(34) + self.segment_table.verticalHeader().setDefaultSectionSize(34) + self.segment_table.verticalHeader().setMinimumSectionSize(28) + self.segment_table.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) + self.segment_table.setShowGrid(True) + self.segment_table.setGridStyle(Qt.SolidLine) + self.segment_table.setAlternatingRowColors(True) + self.segment_table.setSelectionBehavior(QTableWidget.SelectRows) + self.segment_table.setSelectionMode(QTableWidget.SingleSelection) + # Allow editing End values (used for split/ripple), other columns remain read-only by item flags. + self.segment_table.setEditTriggers(QTableWidget.DoubleClicked | QTableWidget.SelectedClicked | QTableWidget.EditKeyPressed) + # Show only ~2 rows; scroll for additional rows. + _row_h = int(self.segment_table.verticalHeader().defaultSectionSize() or 34) + _hdr_h = 34 + self.segment_table.setFixedHeight(_hdr_h + (2 * _row_h) + 10) + self.segment_table.setStyleSheet( + "QTableWidget { background: #ffffff; border: 1px solid #d6d6d6; border-radius: 6px; gridline-color: #d0d0d0; }" + "QTableWidget::item { color: #1f1f1f; padding: 6px; }" + "QTableWidget::item:selected { background: #e8f0c9; color: #1a1a1a; }" + "QTableWidget::item:focus { outline: none; }" + "QTableWidget QLineEdit { background: #ffffff; color: #000000; }" + "QHeaderView::section { background: #f3f3f3; color: #2b2b2b; font-weight: 700; border: 1px solid #d0d0d0; padding: 6px; }" + "QTableCornerButton::section { background: #f3f3f3; border: 1px solid #d0d0d0; }" + ) + ro_delegate = _ReadOnlyCellDelegate(self.segment_table) + self.segment_table.setItemDelegateForColumn(0, ro_delegate) + self.segment_table.setItemDelegateForColumn(1, ro_delegate) + self.segment_table.setItemDelegateForColumn(3, ro_delegate) + self.segment_table.setItemDelegateForColumn(2, _EndDistanceDelegate(self.segment_table)) + self.segment_table.currentCellChanged.connect(self._on_segment_row_changed) + # Single-click editing for End column (better UX) while keeping row selection. + self.segment_table.cellClicked.connect(self._on_segment_cell_clicked) + self.segment_table.itemChanged.connect(self._on_segment_table_item_changed) + table_row_layout.addWidget(self.segment_table, 1) + + buttons_col = QWidget() + buttons_layout = QVBoxLayout(buttons_col) + buttons_layout.setContentsMargins(0, 0, 0, 0) + buttons_layout.setSpacing(8) + + self.split_add_button = QPushButton("+") + self.split_add_button.setFixedSize(36, 36) + self.split_add_button.setStyleSheet( + "QPushButton { background-color: #90AF13; color: #111111; border: 1px solid #6f850f; border-radius: 6px; padding: 0px; font-weight: 900; font-size: 22px; }" + "QPushButton:hover { background-color: #7a9410; }" + "QPushButton:pressed { background-color: #6a840d; }" + ) + self.split_add_button.setToolTip("Add/Split member segment") + self.split_add_button.clicked.connect(self._on_split_add_clicked) + + self.split_remove_button = QPushButton("X") + self.split_remove_button.setFixedSize(36, 36) + self.split_remove_button.setStyleSheet( + "QPushButton { background-color: #c72626; color: #ffffff; border: 1px solid #8f1c1c; border-radius: 6px; padding: 0px; font-weight: 900; font-size: 16px; }" + "QPushButton:hover { background-color: #ae1f1f; }" + "QPushButton:pressed { background-color: #991a1a; }" + ) + self.split_remove_button.setToolTip("Remove selected segment") + self.split_remove_button.clicked.connect(self._on_remove_segment_clicked) + + buttons_layout.addWidget(self.split_add_button) + buttons_layout.addWidget(self.split_remove_button) + buttons_layout.addStretch(1) + table_row_layout.addWidget(buttons_col, 0) + + manager_layout.addWidget(table_row) + + # Remove local add to layout, we will build the grid at the end + # outer.addWidget(left_panel, 1) + # outer.addWidget(manager_box, 1) + + # Initialize segment chain and UI selections + self._initialize_segment_chain_if_needed() + # Default to an editable span (Custom) while keeping legacy span-mode support. + if self.span_combo.findText("Custom") >= 0: + self.span_combo.setCurrentText("Custom") + self._on_span_changed(self.span_combo.currentText()) + self._on_girder_changed(self._current_girder) + + outer.addWidget(left_panel, 0, 0) + outer.addWidget(manager_box, 0, 1) + + # Build Section Properties (Inputs + Preview) inline with the grid layout + # for perfect vertical alignment of left/right columns. + section_container = self._build_section_card() + # Extract the two main widgets from the section container to place them directly + # into the main grid layout so they align with the columns above. + + # NOTE: _build_section_card returns a container with a QHBoxLayout containing + # left_column and right_column widgets. We extract them here. + section_layout = section_container.layout() + if section_layout and section_layout.count() >= 2: + left_col_widget = section_layout.itemAt(0).widget() + right_col_widget = section_layout.itemAt(1).widget() + + # Re-parent them to the main card just in case, though adding to layout handles it. + outer.addWidget(left_col_widget, 1, 0) + outer.addWidget(right_col_widget, 1, 1) + + # Set column stretch to match left/right panels (equal width usually) + outer.setColumnStretch(0, 1) + outer.setColumnStretch(1, 1) - layout.addWidget(self._create_label("Distance from left edge (m):"), row, 0) - layout.addLayout(self._build_distance_row(), row, 1) + return card - layout.addWidget(self._create_label("Member:"), row, 2) - member_combo = self._create_member_combo() - layout.addWidget(member_combo, row, 3) + # ===== Master-Detail / Segment Chain helpers ===== - return card + @staticmethod + def _make_segment_id(girder: str, index: int) -> str: + """Format a segment/member ID as G1M1, G1M2, ...""" + return f"{girder}M{int(index)}" - def _build_distance_row(self): - row = QHBoxLayout() - row.setContentsMargins(0, 0, 0, 0) - row.setSpacing(8) - row.addWidget(self._create_small_label("Start")) - row.addWidget(self.distance_start_input) - row.addWidget(self._create_small_label("End")) - row.addWidget(self.distance_end_input) - return row + def _migrate_member_state_key(self, girder: str, old_id: str, new_id: str) -> None: + if not old_id or not new_id or old_id == new_id: + return + if girder in self._member_state and old_id in self._member_state[girder] and new_id not in self._member_state[girder]: + self._member_state[girder][new_id] = self._member_state[girder].pop(old_id) + if (girder, old_id) in self._dirty_members and (girder, new_id) not in self._dirty_members: + self._dirty_members.discard((girder, old_id)) + self._dirty_members.add((girder, new_id)) + + def _initialize_segment_chain_if_needed(self) -> None: + """Ensure each available girder has at least one segment spanning the total span.""" + total_span = self._get_total_span() or DEFAULT_MEMBER_LENGTH_M + if not self.segment_chain: + for girder in self.available_girders: + self.segment_chain[girder] = [ + {"id": self._make_segment_id(girder, 1), "start": 0.0, "end": float(total_span)}, + ] + + def _ensure_girder_segments(self, girder: str) -> List[Dict[str, float]]: + total_span = self._get_total_span() or DEFAULT_MEMBER_LENGTH_M + segments = self.segment_chain.get(girder) + if not segments: + segments = [{"id": self._make_segment_id(girder, 1), "start": 0.0, "end": float(total_span)}] + self.segment_chain[girder] = segments + + # Normalize ids to the requested GxMy format, migrating any stored member-state. + for i, seg in enumerate(segments, start=1): + desired = self._make_segment_id(girder, i) + existing = str(seg.get("id") or "").strip() + if not existing: + seg["id"] = desired + continue + # Migrate legacy pattern like "G1-2" -> "G1M2". + base, idx = self._split_member_id(existing) + if base == girder and isinstance(idx, int) and idx >= 1: + new_id = self._make_segment_id(girder, idx) + if existing != new_id: + self._migrate_member_state_key(girder, existing, new_id) + seg["id"] = new_id + else: + # If it doesn't match either format, leave it as-is. + pass + + # Normalize starts to always equal previous end, and last end to total span. + segments[0]["start"] = 0.0 + for i in range(1, len(segments)): + segments[i]["start"] = float(segments[i - 1].get("end", 0.0)) + # Do NOT force the current last segment to end at total span here. + # End-at-span is enforced by the split logic (creating a fill segment), + # and by total span changes. + if "end" not in segments[-1] or segments[-1]["end"] is None: + segments[-1]["end"] = float(total_span) + return segments + + @staticmethod + def _fmt_m(value: float) -> str: + text = f"{value:.3f}".rstrip("0").rstrip(".") + return text if text else "0" + + def _refresh_segment_list(self, girder: str) -> None: + if not self.segment_table: + return + segments = self._ensure_girder_segments(girder) + self.segment_table.blockSignals(True) + try: + self.segment_table.setRowCount(len(segments)) + for row, seg in enumerate(segments): + start = float(seg.get("start", 0.0)) + end = float(seg.get("end", 0.0)) + length = max(0.0, end - start) + + # Member ID + id_item = QTableWidgetItem(str(seg.get("id", ""))) + id_item.setTextAlignment(Qt.AlignCenter) + id_item.setFlags(id_item.flags() & ~Qt.ItemIsEditable) + id_item.setToolTip("Read-only") + self.segment_table.setItem(row, 0, id_item) + + start_item = QTableWidgetItem(self._fmt_m(start)) + start_item.setTextAlignment(Qt.AlignCenter) + start_item.setFlags(start_item.flags() & ~Qt.ItemIsEditable) + start_item.setToolTip("Read-only") + self.segment_table.setItem(row, 1, start_item) + + end_item = QTableWidgetItem(self._fmt_m(end)) + end_item.setTextAlignment(Qt.AlignCenter) + end_item.setToolTip("Editable") + self.segment_table.setItem(row, 2, end_item) + + length_item = QTableWidgetItem(self._fmt_m(length)) + length_item.setTextAlignment(Qt.AlignCenter) + length_item.setFlags(length_item.flags() & ~Qt.ItemIsEditable) + length_item.setToolTip("Read-only") + self.segment_table.setItem(row, 3, length_item) + finally: + self.segment_table.blockSignals(False) + + self._sync_remove_button_visibility() + + def _sync_remove_button_visibility(self) -> None: + """Hide X when only one segment exists (must always keep at least one).""" + if not self.split_remove_button: + return + segments = self._ensure_girder_segments(self._current_girder) + show_remove = len(segments) > 1 + self.split_remove_button.setVisible(show_remove) + self.split_remove_button.setEnabled(show_remove) + + self._refresh_member_id_combo() + + # ===== Member (Member ID) state + dirty tracking ===== + + def _current_member_key(self) -> tuple[str, str]: + segments = self._ensure_girder_segments(self._current_girder) + if not segments: + return (self._current_girder, f"{self._current_girder}-1") + idx = max(0, min(self._current_segment_index, len(segments) - 1)) + seg_id = str(segments[idx].get("id", f"{self._current_girder}-{idx + 1}")) + return (self._current_girder, seg_id) + + def _ensure_member_state_initialized(self) -> None: + """Ensure current member has an initial stored state.""" + girder, member_id = self._current_member_key() + if girder not in self._member_state: + self._member_state[girder] = {} + if member_id not in self._member_state[girder]: + # IMPORTANT: don't capture the *current* UI here because it may still + # reflect the previously selected member. Use a stable template. + if self._default_member_state is not None: + self._member_state[girder][member_id] = copy.deepcopy(self._default_member_state) + else: + self._member_state[girder][member_id] = self._capture_member_state() + + def _mark_current_member_dirty(self) -> None: + if self._suppress_member_state_updates: + return + girder, member_id = self._current_member_key() + self._dirty_members.add((girder, member_id)) + + def _is_current_member_dirty(self) -> bool: + return self._current_member_key() in self._dirty_members + + def _commit_current_member_state(self) -> None: + girder, member_id = self._current_member_key() + if girder not in self._member_state: + self._member_state[girder] = {} + self._member_state[girder][member_id] = self._capture_member_state() + self._dirty_members.discard((girder, member_id)) + + def _capture_member_state(self) -> dict: + """Capture Section Inputs for the current member (properties are derived).""" + return { + "inputs": { + "design": self.design_combo.currentText() if hasattr(self, "design_combo") else "", + "type": self.type_combo.currentText() if hasattr(self, "type_combo") else "", + "symmetry": self.symmetry_combo.currentText() if hasattr(self, "symmetry_combo") else "", + "total_depth": self.total_depth_input.text() if hasattr(self, "total_depth_input") else "", + "top_width": self.top_width_input.text() if hasattr(self, "top_width_input") else "", + "bottom_width": self.bottom_width_input.text() if hasattr(self, "bottom_width_input") else "", + "web_thickness": self.web_thickness_combo.currentText() if hasattr(self, "web_thickness_combo") else "", + "top_thickness": self.top_thickness_combo.currentText() if hasattr(self, "top_thickness_combo") else "", + "bottom_thickness": self.bottom_thickness_combo.currentText() if hasattr(self, "bottom_thickness_combo") else "", + "web_thickness_value": self.web_thickness_value_input.text() if hasattr(self, "web_thickness_value_input") else "", + "top_thickness_value": self.top_thickness_value_input.text() if hasattr(self, "top_thickness_value_input") else "", + "bottom_thickness_value": self.bottom_thickness_value_input.text() if hasattr(self, "bottom_thickness_value_input") else "", + "is_section": self.is_section_combo.currentText() if hasattr(self, "is_section_combo") else "", + "torsion": self.torsion_combo.currentText() if hasattr(self, "torsion_combo") else "", + "warping": self.warping_combo.currentText() if hasattr(self, "warping_combo") else "", + "web_type": self.web_type_combo.currentText() if hasattr(self, "web_type_combo") else "", + } + } + + def _apply_member_state(self, state: dict) -> None: + # During early init, the overview card triggers segment selection before + # Section Inputs widgets are created. + if not getattr(self, "_section_inputs_built", False): + return + inputs = (state or {}).get("inputs", {}) + self._suppress_member_state_updates = True + try: + if inputs.get("design"): + self.design_combo.setCurrentText(inputs["design"]) + if inputs.get("type"): + self.type_combo.setCurrentText(inputs["type"]) + if inputs.get("symmetry"): + self.symmetry_combo.setCurrentText(inputs["symmetry"]) + + self.total_depth_input.setText(inputs.get("total_depth", "")) + self.top_width_input.setText(inputs.get("top_width", "")) + self.bottom_width_input.setText(inputs.get("bottom_width", "")) + + if inputs.get("web_thickness"): + self.web_thickness_combo.setCurrentText(inputs["web_thickness"]) + if inputs.get("top_thickness"): + self.top_thickness_combo.setCurrentText(inputs["top_thickness"]) + if inputs.get("bottom_thickness"): + self.bottom_thickness_combo.setCurrentText(inputs["bottom_thickness"]) + + self.web_thickness_value_input.setText(inputs.get("web_thickness_value", "")) + self.top_thickness_value_input.setText(inputs.get("top_thickness_value", "")) + self.bottom_thickness_value_input.setText(inputs.get("bottom_thickness_value", "")) + + if inputs.get("is_section"): + self.is_section_combo.setCurrentText(inputs["is_section"]) + if inputs.get("torsion"): + self.torsion_combo.setCurrentText(inputs["torsion"]) + if inputs.get("warping"): + self.warping_combo.setCurrentText(inputs["warping"]) + if inputs.get("web_type"): + self.web_type_combo.setCurrentText(inputs["web_type"]) + finally: + self._suppress_member_state_updates = False + + self._update_thickness_value_enabled_state() + self._update_preview() + + def _wire_member_dirty_tracking(self) -> None: + """Mark current member dirty when Section Inputs change.""" + def connect_combo(combo: QComboBox) -> None: + combo.currentTextChanged.connect(lambda _t: self._mark_current_member_dirty()) + + def connect_line(line: QLineEdit) -> None: + line.textChanged.connect(lambda _t: self._mark_current_member_dirty()) + + connect_combo(self.design_combo) + connect_combo(self.type_combo) + connect_combo(self.symmetry_combo) + connect_combo(self.web_thickness_combo) + connect_combo(self.top_thickness_combo) + connect_combo(self.bottom_thickness_combo) + connect_combo(self.is_section_combo) + connect_combo(self.torsion_combo) + connect_combo(self.warping_combo) + connect_combo(self.web_type_combo) + + connect_line(self.total_depth_input) + connect_line(self.top_width_input) + connect_line(self.bottom_width_input) + connect_line(self.web_thickness_value_input) + connect_line(self.top_thickness_value_input) + connect_line(self.bottom_thickness_value_input) + + def _confirm_switch_if_dirty(self) -> str: + """Return 'save'|'discard'|'cancel' before switching member.""" + if not self._is_current_member_dirty(): + return "discard" + _, member_id = self._current_member_key() + box = QMessageBox(self) + box.setIcon(QMessageBox.Warning) + box.setWindowTitle("Unsaved Changes") + box.setText(f"You have unsaved changes for {member_id}. Save before switching?") + box.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) + box.setDefaultButton(QMessageBox.Save) + result = box.exec() + if result == QMessageBox.Save: + return "save" + if result == QMessageBox.Discard: + self._dirty_members.discard(self._current_member_key()) + return "discard" + return "cancel" + + def _refresh_member_id_combo(self) -> None: + """Keep the Member ID dropdown in sync with the current girder's segments.""" + if not self.member_id_combo: + return + segments = self._ensure_girder_segments(self._current_girder) + block = self.member_id_combo.blockSignals(True) + try: + current_index = self._current_segment_index + self.member_id_combo.clear() + for seg in segments: + seg_id = str(seg.get("id", "")) + self.member_id_combo.addItem(seg_id, seg_id) + if self.member_id_combo.count(): + self.member_id_combo.setCurrentIndex(max(0, min(current_index, self.member_id_combo.count() - 1))) + self._last_member_combo_index = self.member_id_combo.currentIndex() + finally: + self.member_id_combo.blockSignals(block) + + def _on_member_id_combo_changed(self, index: int) -> None: + if index is None or index < 0: + return + # Prompt if user is leaving a dirty member without saving. + if int(index) != int(self._current_segment_index): + decision = self._confirm_switch_if_dirty() + if decision == "cancel": + prev = self.member_id_combo.blockSignals(True) + try: + self.member_id_combo.setCurrentIndex(self._last_member_combo_index) + finally: + self.member_id_combo.blockSignals(prev) + return + if decision == "save": + self._commit_current_member_state() + # Confirm member-level save immediately (requested UX). + try: + QMessageBox.information(self, "Saved", "Member inputs saved successfully.") + except Exception: + pass + + self._select_segment_index(int(index)) + self._last_member_combo_index = int(index) + + def _on_segment_table_item_changed(self, item: QTableWidgetItem) -> None: + """Bridge UI edits (End column) into the existing split/ripple logic.""" + if not item or self._suppress_distance_updates: + return + # Only respond to End column edits. + if item.column() != 2: + return + + row = item.row() + if row is None or row < 0: + return + + # Select row so downstream logic uses correct current segment index. + self._current_segment_index = int(row) + if self.distance_end_input is None: + return + + self.distance_end_input.setText(item.text()) + self._on_distance_end_changed() + + def _on_segment_cell_clicked(self, row: int, column: int) -> None: + """Start editing End (m) on single click.""" + if not self.segment_table: + return + if row is None or row < 0: + return + if column != 2: + return + item = self.segment_table.item(row, column) + if item is None: + return + # Ensure the correct row is selected and open the editor immediately. + self.segment_table.setCurrentCell(row, column) + self.segment_table.editItem(item) + + def _on_remove_segment_clicked(self) -> None: + """Remove the selected segment (keeps at least one segment).""" + girder = self._current_girder + segments = self._ensure_girder_segments(girder) + if not segments: + return + if len(segments) == 1: + return + + idx = self._current_segment_index + idx = max(0, min(int(idx), len(segments) - 1)) + segments.pop(idx) + + # Renormalize starts, enforce last end == total span, and re-id sequentially. + total_span = float(self._get_total_span() or DEFAULT_MEMBER_LENGTH_M) + segments[0]["start"] = 0.0 + for i in range(1, len(segments)): + segments[i]["start"] = float(segments[i - 1].get("end", 0.0)) + segments[-1]["end"] = float(total_span) + for i, seg in enumerate(segments, start=1): + old_id = str(seg.get("id") or "").strip() + new_id = self._make_segment_id(girder, i) + if old_id and old_id != new_id: + self._migrate_member_state_key(girder, old_id, new_id) + seg["id"] = new_id + self.segment_chain[girder] = segments + + self._refresh_segment_list(girder) + self._select_segment_index(min(idx, len(segments) - 1)) + + def _select_segment_index(self, index: int) -> None: + segments = self._ensure_girder_segments(self._current_girder) + if not segments: + return + index = max(0, min(index, len(segments) - 1)) + self._current_segment_index = index + if self.segment_table and self.segment_table.rowCount() > index: + self.segment_table.blockSignals(True) + try: + self.segment_table.setCurrentCell(index, 0) + finally: + self.segment_table.blockSignals(False) + self._load_segment_details(self._current_girder, index) + + # Keep Member ID combo selection aligned without triggering confirmation loops. + if self.member_id_combo and self.member_id_combo.currentIndex() != index: + prev = self.member_id_combo.blockSignals(True) + try: + self.member_id_combo.setCurrentIndex(index) + finally: + self.member_id_combo.blockSignals(prev) + self._last_member_combo_index = index + + # Load per-member Section Inputs for the selected Member ID. + if getattr(self, "_section_inputs_built", False): + self._ensure_member_state_initialized() + girder, member_id = self._current_member_key() + stored = self._member_state.get(girder, {}).get(member_id) + if stored: + self._apply_member_state(stored) + + def _load_segment_details(self, girder: str, index: int) -> None: + segments = self._ensure_girder_segments(girder) + if not segments: + return + index = max(0, min(index, len(segments) - 1)) + seg = segments[index] + start = float(seg.get("start", 0.0)) + end = float(seg.get("end", 0.0)) + length = max(0.0, end - start) + + self._suppress_distance_updates = True + try: + self.member_id_input.setText(seg["id"]) + self.distance_start_input.setText(self._fmt_m(start)) + self.distance_end_input.setText(self._fmt_m(end)) + if self.segment_length_input: + self.segment_length_input.setText(self._fmt_m(length)) + finally: + self._suppress_distance_updates = False + + def _on_girder_changed(self, girder: str) -> None: + if not girder: + return + + girder = str(girder).strip() + if not girder or girder == getattr(self, "_current_girder", ""): + return + + # If user is leaving a dirty member, confirm save/discard/cancel. + # This mirrors Member ID switching behavior and ensures dependent tabs + # (e.g., Stiffener Details) see the correct per-member design mode. + if self._is_current_member_dirty(): + decision = self._confirm_switch_if_dirty() + if decision == "cancel": + # Revert the dropdown selection back to the previous girder. + try: + if self.girder_dropdown is not None: + prev = self.girder_dropdown.blockSignals(True) + try: + old = getattr(self, "_current_girder", "") + idx = self.girder_dropdown.findData(old) + if idx >= 0: + self.girder_dropdown.setCurrentIndex(idx) + finally: + self.girder_dropdown.blockSignals(prev) + except Exception: + pass + return + if decision == "save": + self._commit_current_member_state() + try: + QMessageBox.information(self, "Saved", "Member inputs saved successfully.") + except Exception: + pass + + self._current_girder = girder + self._refresh_segment_list(girder) + self._select_segment_index(0) + self._sync_remove_button_visibility() + + def _on_segment_row_changed(self, current_row: int, _current_column: int, _previous_row: int, _previous_column: int) -> None: + if current_row is None or current_row < 0: + return + self._select_segment_index(int(current_row)) + + def _on_split_add_clicked(self) -> None: + """Split/Add Segment. + + Spec-aligned behavior: + - If the selected segment is the last segment and its End Distance is < total span, + create the next segment to fill the gap (no popups). + """ + girder = self._current_girder + segments = self._ensure_girder_segments(girder) + total_span = float(self._get_total_span() or DEFAULT_MEMBER_LENGTH_M) + if not segments: + return + + idx = max(0, min(self._current_segment_index, len(segments) - 1)) + if idx != len(segments) - 1: + # Only support add/fill from last segment for now (matches the described rule). + self._select_segment_index(len(segments) - 1) + idx = len(segments) - 1 + + current = segments[idx] + start = float(current.get("start", 0.0)) + + new_end = self._parse_float(self.distance_end_input.text()) if self.distance_end_input else None + if new_end is None: + new_end = float(current.get("end", total_span)) + + # Clamp/validate + new_end = max(start, min(float(new_end), total_span)) + + # If no gap, do nothing (no popup) + if abs(new_end - total_span) < 1e-9: + current["end"] = float(total_span) + self._refresh_segment_list(girder) + self._select_segment_index(idx) + return + + # Update last segment end and create the fill segment + current["end"] = float(new_end) + next_id = self._make_segment_id(girder, len(segments) + 1) + segments.append({"id": next_id, "start": float(new_end), "end": float(total_span)}) + + # Normalize starts for safety and enforce last end + segments[0]["start"] = 0.0 + for i in range(1, len(segments)): + segments[i]["start"] = float(segments[i - 1].get("end", 0.0)) + segments[-1]["end"] = float(total_span) + self.segment_chain[girder] = segments + + self._refresh_segment_list(girder) + self._select_segment_index(idx) + + # ===== Span/Length + Auto-split handlers ===== + + def _on_span_changed(self, span_text): + """Toggle total span editability. + + - Custom: user can edit total span. + - Full Length: total span is locked (read-only). + """ + is_full = (span_text or "").strip() == "Full Length" + self.length_input.setReadOnly(is_full) + + self._initialize_segment_chain_if_needed() + self._refresh_segment_list(self._current_girder) + self._select_segment_index(self._current_segment_index) + + def _on_length_changed(self, _): + """When total span changes, update the chain so the final segment ends at the new span.""" + total_span = self._get_total_span() + if total_span is None: + return + + for girder in self.available_girders: + segments = self._ensure_girder_segments(girder) + if not segments: + continue + + # Clamp and remove segments beyond new span. + pruned: List[Dict[str, float]] = [] + for seg in segments: + start = float(seg.get("start", 0.0)) + end = float(seg.get("end", 0.0)) + if start >= total_span: + break + seg["end"] = min(end, float(total_span)) + pruned.append(seg) + + if not pruned: + pruned = [{"id": self._make_segment_id(girder, 1), "start": 0.0, "end": float(total_span)}] + + # Renormalize starts and ids (keep ids stable if possible). + pruned[0]["start"] = 0.0 + for i in range(1, len(pruned)): + pruned[i]["start"] = float(pruned[i - 1].get("end", 0.0)) + pruned[-1]["end"] = float(total_span) + self.segment_chain[girder] = pruned + + self._refresh_segment_list(self._current_girder) + self._select_segment_index(min(self._current_segment_index, len(self._ensure_girder_segments(self._current_girder)) - 1)) + + def _on_distance_end_changed(self): + """Auto-split algorithm + ripple edit. + + - If user shortens the current *last* segment, a new fill segment is created. + - If user edits an intermediate segment, the next segment start is updated. + """ + if self._suppress_distance_updates: + return + if not self.distance_end_input: + return + + girder = self._current_girder + segments = self._ensure_girder_segments(girder) + if not segments: + return + + idx = max(0, min(self._current_segment_index, len(segments) - 1)) + current = segments[idx] + + new_end = self._parse_float(self.distance_end_input.text()) + if new_end is None: + # Revert to current stored end + self._load_segment_details(girder, idx) + return + + total_span = float(self._get_total_span() or DEFAULT_MEMBER_LENGTH_M) + start = float(current.get("start", 0.0)) + old_end = float(current.get("end", start)) + + # Clamp instead of warning popups. + if new_end < start: + new_end = start + + is_last = idx == (len(segments) - 1) + if is_last: + if new_end > total_span: + new_end = total_span + else: + next_seg = segments[idx + 1] + next_end = float(next_seg.get("end", total_span)) + if new_end > next_end: + new_end = next_end + + # Apply edit + current["end"] = float(new_end) + + if not is_last: + # Ripple: set the next start = new end + segments[idx + 1]["start"] = float(new_end) + else: + # Split trigger: if user shortens the last segment, create fill segment + if new_end < old_end and new_end < total_span: + next_id = self._make_segment_id(girder, len(segments) + 1) + segments.append({"id": next_id, "start": float(new_end), "end": float(total_span)}) + elif new_end > total_span: + current["end"] = float(total_span) + + # Renormalize starts for all subsequent segments + segments[0]["start"] = 0.0 + for i in range(1, len(segments)): + segments[i]["start"] = float(segments[i - 1].get("end", 0.0)) + + # Always enforce last end == total span after edits + segments[-1]["end"] = float(total_span) + self.segment_chain[girder] = segments + + # Refresh master list + keep selection + self._refresh_segment_list(girder) + self._select_segment_index(idx) def _build_section_card(self): container = QWidget() @@ -112,95 +1195,211 @@ def _build_section_card(self): main_layout.setContentsMargins(0, 0, 0, 0) main_layout.setSpacing(16) + # Left side - single bordered box (Section Inputs + restraint fields) left_column = QWidget() left_column.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) left_column_layout = QVBoxLayout(left_column) left_column_layout.setContentsMargins(0, 0, 0, 0) - left_column_layout.setSpacing(12) + left_column_layout.setSpacing(0) + left_column_layout.setAlignment(Qt.AlignTop) + # Section Inputs box (single frame containing all fields) section_inputs_box = self._create_inner_box() section_inputs_layout = QVBoxLayout(section_inputs_box) section_inputs_layout.setContentsMargins(12, 8, 12, 12) section_inputs_layout.setSpacing(8) + section_inputs_layout.setAlignment(Qt.AlignTop) section_inputs_title = self._create_label("Section Inputs:") + section_inputs_title.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none;") section_inputs_layout.addWidget(section_inputs_title) inputs_grid = QGridLayout() inputs_grid.setContentsMargins(0, 0, 0, 0) inputs_grid.setHorizontalSpacing(16) - inputs_grid.setVerticalSpacing(12) - inputs_grid.setColumnMinimumWidth(0, 150) + inputs_grid.setVerticalSpacing(10) + # Match the reference UI's aligned label column. + inputs_grid.setColumnMinimumWidth(0, 160) inputs_grid.setColumnStretch(0, 0) inputs_grid.setColumnStretch(1, 1) - row = 0 - for field_def in GIRDER_DETAILS_SCHEMA["section_inputs"]: - if field_def.get("id") in {"torsional_restraint", "warping_restraint", "web_type"}: - continue - row = self._add_schema_row(inputs_grid, row, field_def) + # Member ID (segment selector) - mirrors reference UI. + self.member_id_combo = QComboBox() + apply_field_style(self.member_id_combo) + self._set_field_width(self.member_id_combo) + self.member_id_combo.currentIndexChanged.connect(self._on_member_id_combo_changed) + row = self._add_box_row(inputs_grid, 0, "Member ID:", self.member_id_combo) + + self.design_combo = QComboBox() + self.design_combo.addItems(VALUES_GIRDER_DESIGN_MODE) + apply_field_style(self.design_combo) + self._set_field_width(self.design_combo) + row = self._add_box_row(inputs_grid, row, "Design:", self.design_combo) + + self.type_combo = QComboBox() + self.type_combo.addItems(VALUES_GIRDER_TYPE) + apply_field_style(self.type_combo) + self._set_field_width(self.type_combo) + row = self._add_box_row(inputs_grid, row, "Type:", self.type_combo) + + self.symmetry_combo = QComboBox() + self.symmetry_combo.addItems(VALUES_GIRDER_SYMMETRY) + apply_field_style(self.symmetry_combo) + self._set_field_width(self.symmetry_combo) + row = self._add_box_row(inputs_grid, row, "Symmetry:", self.symmetry_combo, self.symmetry_row) + + self.total_depth_input = self._create_line_edit() + row = self._add_box_row( + inputs_grid, + row, + "Total Depth (d, mm):", + self.total_depth_input, + self.welded_rows, + ) - section_inputs_layout.addLayout(inputs_grid) - left_column_layout.addWidget(section_inputs_box) + self.web_thickness_combo = QComboBox() + self.web_thickness_combo.addItems(VALUES_PROFILE_SCOPE) + apply_field_style(self.web_thickness_combo) + self._set_field_width(self.web_thickness_combo, 180) + + self.web_thickness_value_input = self._create_line_edit() + self._set_field_width(self.web_thickness_value_input, 78) + self.web_thickness_value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.web_thickness_value_input)) + + self.web_thickness_widget = self._create_mode_value_widget(self.web_thickness_combo, self.web_thickness_value_input) + row = self._add_box_row( + inputs_grid, + row, + "Web Thickness (wt, mm):", + self.web_thickness_widget, + self.welded_rows, + ) - restraint_box = self._create_inner_box() - restraint_layout = QVBoxLayout(restraint_box) - restraint_layout.setContentsMargins(12, 8, 12, 12) - restraint_layout.setSpacing(8) + self.top_width_input = self._create_line_edit() + row = self._add_box_row( + inputs_grid, + row, + "Width of Top Flange (tfw, mm):", + self.top_width_input, + self.welded_rows, + ) - restraint_title = self._create_label("Restraint & Web Details:") - restraint_layout.addWidget(restraint_title) + self.top_thickness_combo = QComboBox() + self.top_thickness_combo.addItems(VALUES_PROFILE_SCOPE) + apply_field_style(self.top_thickness_combo) + self._set_field_width(self.top_thickness_combo, 180) + + self.top_thickness_value_input = self._create_line_edit() + self._set_field_width(self.top_thickness_value_input, 78) + self.top_thickness_value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.top_thickness_value_input)) + + self.top_thickness_widget = self._create_mode_value_widget(self.top_thickness_combo, self.top_thickness_value_input) + row = self._add_box_row( + inputs_grid, + row, + "Top Flange Thickness (tft, mm):", + self.top_thickness_widget, + self.welded_rows, + ) - restraint_grid = QGridLayout() - restraint_grid.setContentsMargins(0, 0, 0, 0) - restraint_grid.setHorizontalSpacing(16) - restraint_grid.setVerticalSpacing(12) - restraint_grid.setColumnMinimumWidth(0, 150) - restraint_grid.setColumnStretch(0, 0) - restraint_grid.setColumnStretch(1, 1) + self.bottom_width_input = self._create_line_edit() + row = self._add_box_row( + inputs_grid, + row, + "Width of Bottom Flange (bfw, mm):", + self.bottom_width_input, + self.welded_rows, + ) - rrow = 0 - for field_def in GIRDER_DETAILS_SCHEMA["section_inputs"]: - if field_def.get("id") in {"torsional_restraint", "warping_restraint", "web_type"}: - rrow = self._add_schema_row(restraint_grid, rrow, field_def) + self.bottom_thickness_combo = QComboBox() + self.bottom_thickness_combo.addItems(VALUES_PROFILE_SCOPE) + apply_field_style(self.bottom_thickness_combo) + self._set_field_width(self.bottom_thickness_combo, 180) + + self.bottom_thickness_value_input = self._create_line_edit() + self._set_field_width(self.bottom_thickness_value_input, 78) + self.bottom_thickness_value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.bottom_thickness_value_input)) + + self.bottom_thickness_widget = self._create_mode_value_widget(self.bottom_thickness_combo, self.bottom_thickness_value_input) + row = self._add_box_row( + inputs_grid, + row, + "Bottom Flange Thickness (bft, mm):", + self.bottom_thickness_widget, + self.welded_rows, + ) - restraint_layout.addLayout(restraint_grid) - left_column_layout.addWidget(restraint_box) + self.is_section_combo = QComboBox() + self._populate_rolled_section_combo() + apply_field_style(self.is_section_combo) + self._set_field_width(self.is_section_combo) + self._add_box_row(inputs_grid, row, "IS Section:", self.is_section_combo, self.rolled_rows) + + # Append restraint/web fields into the same Section Inputs box (no extra frame / spacing). + self.torsion_combo = QComboBox() + apply_field_style(self.torsion_combo) + self._set_field_width(self.torsion_combo) + row = self._add_box_row(inputs_grid, row + 1, "Torsional Restraint:", self.torsion_combo) + + self.warping_combo = QComboBox() + apply_field_style(self.warping_combo) + self._set_field_width(self.warping_combo) + row = self._add_box_row(inputs_grid, row, "Warping Restraint:", self.warping_combo) + + self.web_type_combo = QComboBox() + apply_field_style(self.web_type_combo) + self._set_field_width(self.web_type_combo) + self._add_box_row(inputs_grid, row, "Web Type*:", self.web_type_combo, self.web_type_row) + + section_inputs_layout.addLayout(inputs_grid) + # Prevent the grid rows from stretching vertically (which creates large blank bands + # above the first input when the right column is taller). Extra height goes below. + section_inputs_layout.addStretch(1) + left_column_layout.addWidget(section_inputs_box) + self._configure_restraint_fields() main_layout.addWidget(left_column) + # Right side - image + section properties box right_column = QWidget() right_column.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) right_column_layout = QVBoxLayout(right_column) right_column_layout.setContentsMargins(0, 0, 0, 0) - right_column_layout.setSpacing(12) + right_column_layout.setSpacing(10) + # Dynamic image box image_box = self._create_inner_box() image_layout = QVBoxLayout(image_box) image_layout.setContentsMargins(10, 10, 10, 10) image_layout.setSpacing(5) - self.dynamic_image_label = QLabel("Welded Girder") - self.dynamic_image_label.setAlignment(Qt.AlignCenter) - self.dynamic_image_label.setMinimumSize(240, 140) - self.dynamic_image_label.setStyleSheet("QLabel { border: 1px solid #d0d0d0; border-radius: 4px; background-color: #fafafa; font-weight: bold; color: #5b5b5b; }") - image_layout.addWidget(self.dynamic_image_label) + self.section_preview = RolledSectionPreview() + image_layout.addWidget(self.section_preview, 1) + + self.preview_caption = QLabel("Provide girder inputs to preview") + self.preview_caption.setAlignment(Qt.AlignCenter) + self.preview_caption.setStyleSheet( + "QLabel { font-size: 13px; font-weight: 700; color: #1e1e1e; border: none; padding-top: 6px; font-family: 'Ubuntu Sans', 'Segoe UI', sans-serif; }" + ) + image_layout.addWidget(self.preview_caption) right_column_layout.addWidget(image_box) + # Section Properties box props_box = self._create_inner_box() props_layout = QVBoxLayout(props_box) props_layout.setContentsMargins(12, 10, 12, 10) props_layout.setSpacing(10) props_title = self._create_label("Section Properties:") + props_title.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none;") props_layout.addWidget(props_title) properties_grid = QGridLayout() properties_grid.setContentsMargins(0, 0, 0, 0) - properties_grid.setHorizontalSpacing(12) + properties_grid.setHorizontalSpacing(16) properties_grid.setVerticalSpacing(10) - properties_grid.setColumnMinimumWidth(0, 140) + properties_grid.setColumnMinimumWidth(0, 160) properties_grid.setColumnStretch(0, 0) properties_grid.setColumnStretch(1, 1) @@ -216,12 +1415,13 @@ def _build_section_card(self): "Plastic Modulus, Zuz (cm3)", "Plastic Modulus, Zuy (cm3)", "Torsion Constant, It (cm4)", - "Warping Constant, Iw (cm6)", + "Warping Constant, Iw (cm6)" ] for index, text in enumerate(property_fields): label = self._create_small_label(text) line_edit = self._create_line_edit() + line_edit.setPlaceholderText("") properties_grid.addWidget(label, index, 0) properties_grid.addWidget(line_edit, index, 1) self.section_property_inputs[text] = line_edit @@ -231,11 +1431,30 @@ def _build_section_card(self): main_layout.addWidget(right_column) - if hasattr(self, "type_combo"): - self.type_combo.currentTextChanged.connect(self._on_type_changed) - self._apply_mode_states() - if hasattr(self, "type_combo"): - self._on_type_changed(self.type_combo.currentText()) + self.design_combo.currentTextChanged.connect(self._on_design_changed) + self.type_combo.currentTextChanged.connect(self._on_type_changed) + self.is_section_combo.currentTextChanged.connect(self._update_preview) + for watcher in (self.total_depth_input, self.top_width_input, self.bottom_width_input): + watcher.textChanged.connect(self._update_preview) + for combo in (self.web_thickness_combo, self.top_thickness_combo, self.bottom_thickness_combo): + combo.currentTextChanged.connect(lambda _t: self._update_thickness_value_enabled_state()) + combo.currentTextChanged.connect(self._update_preview) + for watcher in (self.web_thickness_value_input, self.top_thickness_value_input, self.bottom_thickness_value_input): + watcher.textChanged.connect(self._update_preview) + self._on_design_changed(self.design_combo.currentText()) + self._on_type_changed(self.type_combo.currentText()) + self._update_thickness_value_enabled_state() + + # Capture a stable template state for new members. + self._default_member_state = self._capture_member_state() + + # Track per-member edits and ensure current member has a baseline saved state. + self._wire_member_dirty_tracking() + self._section_inputs_built = True + self._refresh_member_id_combo() + # Now that Section Inputs exist, sync UI state to current segment and seed + # per-member state from the visible defaults. + self._select_segment_index(self._current_segment_index) return container @@ -260,127 +1479,390 @@ def _create_small_label(self, text): def _create_line_edit(self): line_edit = QLineEdit() apply_field_style(line_edit) + self._set_field_width(line_edit) return line_edit - def _create_member_combo(self): - combo = QComboBox() - apply_field_style(combo) - self._set_field_width(combo) - self.widgets["member_select_combo"] = combo - self._populate_member_list() - return combo - - def _create_field(self, field_def): - field_type = field_def.get("type") - bind_name = field_def.get("bind") - - if field_type == "combo_dynamic": - combo = QComboBox() - apply_field_style(combo) - self._set_field_width(combo) - if bind_name: - self.widgets[bind_name] = combo - self._populate_girder_lists() - return combo - - if field_type == "combo": - combo = QComboBox() - combo.addItems(field_def.get("choices", [])) - apply_field_style(combo) - self._set_field_width(combo) - if bind_name: - self.widgets[bind_name] = combo - return combo + def _create_mode_value_widget(self, mode_combo: QComboBox, value_input: QLineEdit) -> QWidget: + widget = QWidget() + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self._set_field_width(widget, 180) + + layout = QHBoxLayout(widget) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(6) + layout.addWidget(mode_combo) + layout.addWidget(value_input) + return widget + + def _is_custom_thickness_mode(self, combo: QComboBox) -> bool: + return (combo.currentText() or "").strip().lower() == "custom" + + def _update_thickness_value_enabled_state(self) -> None: + is_welded = self.type_combo.currentText().lower() == "welded" + is_custom_design = self.design_combo.currentText().lower() == "customized" + allow_inputs = is_welded and is_custom_design + + for mode_combo, value_input, wrapper in ( + ( + getattr(self, "web_thickness_combo", None), + getattr(self, "web_thickness_value_input", None), + getattr(self, "web_thickness_widget", None), + ), + ( + getattr(self, "top_thickness_combo", None), + getattr(self, "top_thickness_value_input", None), + getattr(self, "top_thickness_widget", None), + ), + ( + getattr(self, "bottom_thickness_combo", None), + getattr(self, "bottom_thickness_value_input", None), + getattr(self, "bottom_thickness_widget", None), + ), + ): + if not mode_combo or not value_input: + continue - line_edit = QLineEdit() - apply_field_style(line_edit) - if bind_name: - self.widgets[bind_name] = line_edit - return line_edit + show_value = bool(allow_inputs and self._is_custom_thickness_mode(mode_combo)) - def _add_schema_row(self, layout, row, field_def): - visible_for = field_def.get("visible_for") - tracker = None - if visible_for: - if "welded" in visible_for: - tracker = self.welded_rows - elif "rolled" in visible_for: - tracker = self.rolled_rows - - if field_def.get("type") == "mode_line": - mode_combo = QComboBox() - mode_combo.addItems(field_def.get("mode_choices", [])) - if field_def.get("default_mode"): - mode_combo.setCurrentText(field_def["default_mode"]) - apply_field_style(mode_combo) - self._set_field_width(mode_combo, 130) - - value_field = self._create_line_edit() - self._set_field_width(value_field) - - bind_mode = field_def.get("bind_mode") - bind_value = field_def.get("bind_value") - if bind_mode: - self.widgets[bind_mode] = mode_combo - if bind_value: - self.widgets[bind_value] = value_field - - row = self._add_mode_row(layout, row, field_def["label"], mode_combo, value_field, tracker) - mode_combo.currentTextChanged.connect(self._apply_mode_states) - return row - - if field_def.get("type") == "combo": - combo = QComboBox() - combo.addItems(field_def.get("choices", [])) - apply_field_style(combo) - self._set_field_width(combo) - bind_name = field_def.get("bind") - if bind_name: - self.widgets[bind_name] = combo - return self._add_box_row(layout, row, field_def["label"], combo, tracker) - - widget = self._create_field(field_def) - return self._add_box_row(layout, row, field_def["label"], widget, tracker) + value_input.setEnabled(show_value) + value_input.setVisible(show_value) - def _add_box_row(self, layout, row, label_text, widget, visibility_list=None): - label = self._create_small_label(label_text) - layout.addWidget(label, row, 0, Qt.AlignLeft | Qt.AlignVCenter) - layout.addWidget(widget, row, 1) - if visibility_list is not None: - visibility_list.append((label, widget)) - return row + 1 + if wrapper is not None: + self._set_field_width(wrapper, 180) - def _add_mode_row(self, layout, row, label_text, mode_combo, value_field, visibility_list=None): - wrapper = QHBoxLayout() - wrapper.setContentsMargins(0, 0, 0, 0) - wrapper.setSpacing(8) - wrapper.addWidget(mode_combo) - wrapper.addWidget(value_field) - wrapper.addStretch() + if show_value: + self._set_field_width(mode_combo, 96) + self._set_field_width(value_input, 78) + else: + self._set_field_width(mode_combo, 180) - label = self._create_small_label(label_text) - layout.addWidget(label, row, 0, Qt.AlignLeft | Qt.AlignVCenter) - layout.addLayout(wrapper, row, 1) - if visibility_list is not None: - visibility_list.append((label, mode_combo)) - visibility_list.append((None, value_field)) + def _add_section_row(self, layout, row, text, widget, tracker=None): + label = self._create_label(text) + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self._set_field_width(widget) + layout.addWidget(label, row, 0) + layout.addWidget(widget, row, 1) + if tracker is not None: + tracker.append((label, widget)) return row + 1 - def _set_field_width(self, widget, width=230): + def _set_field_width(self, widget, width=180): widget.setMaximumWidth(width) - widget.setMinimumWidth(min(width, 160)) + widget.setMinimumWidth(min(width, 140)) + widget.setMinimumHeight(28) + widget.setMaximumHeight(40) + + def _setup_girder_selector(self): + if not hasattr(self, "select_girder_combo"): + return + if not self._girder_combo_connected: + if hasattr(self.select_girder_combo, "checkedItemsChanged"): + self.select_girder_combo.checkedItemsChanged.connect(self._on_girders_selection_changed) + else: + self.select_girder_combo.currentTextChanged.connect(self._on_girders_selection_changed) + self._girder_combo_connected = True + self._on_girders_selection_changed() + + def _refresh_girder_combo_items(self, preferred_selection: Optional[List[str]] = None) -> None: + if not hasattr(self, "select_girder_combo"): + return + if hasattr(self.select_girder_combo, "checked_items"): + # Preserve multi-selection if possible. + current_selection = preferred_selection or self.select_girder_combo.checked_items() or [] + desired = [g for g in current_selection if g in self.available_girders] + + block = self.select_girder_combo.blockSignals(True) + try: + # Temporarily suppress the internal toggle handler while rebuilding. + if hasattr(self.select_girder_combo, "_updating_selection"): + self.select_girder_combo._updating_selection = True # type: ignore[attr-defined] + self.select_girder_combo.clear() + self.select_girder_combo.addItems(["All"] + self.available_girders) + + if desired: + # Uncheck 'All', then check desired girders. + for row in range(self.select_girder_combo.model().rowCount()): + item = self.select_girder_combo.model().item(row) + if not item: + continue + if item.text().strip().lower() == "all": + item.setCheckState(Qt.Unchecked) + elif item.text() in desired: + item.setCheckState(Qt.Checked) + else: + item.setCheckState(Qt.Unchecked) + finally: + if hasattr(self.select_girder_combo, "_updating_selection"): + self.select_girder_combo._updating_selection = False # type: ignore[attr-defined] + self.select_girder_combo.blockSignals(block) + else: + current_text = self.select_girder_combo.currentText().strip() + current_selection = preferred_selection or [] + candidate = next((girder for girder in current_selection if girder in self.available_girders), None) + if not candidate and current_text in self.available_girders: + candidate = current_text + + block = self.select_girder_combo.blockSignals(True) + self.select_girder_combo.clear() + self.select_girder_combo.addItems(["All"] + self.available_girders) + if candidate: + index = self.select_girder_combo.findText(candidate, Qt.MatchFixedString) + self.select_girder_combo.setCurrentIndex(index if index != -1 else 0) + else: + self.select_girder_combo.setCurrentIndex(0) + self.select_girder_combo.blockSignals(block) + + def _on_girders_selection_changed(self, *args): + if self.span_combo.currentText() == "Full Length": + self._update_member_id_edit_state() + return + current_text = self.member_id_input.text().strip() + if not self._is_valid_segment_id(current_text): + default_id = self._default_member_segment_id() + self._set_member_id_text(default_id) + self._update_member_id_edit_state() + + def _get_selected_girders(self): + if not hasattr(self, "select_girder_combo"): + return self.available_girders.copy() + if hasattr(self.select_girder_combo, "checked_items"): + # In this widget, checked_items() returns [] when "All" is selected. + checked = [g for g in self.select_girder_combo.checked_items() if g in self.available_girders] + return checked or self.available_girders.copy() + + current = self.select_girder_combo.currentText().strip() + if not current or current.lower() == "all": + return self.available_girders.copy() + if current in self.available_girders: + return [current] + return self.available_girders.copy() + + def _default_member_segment_id(self, girders=None): + girders = girders or self._get_selected_girders() + base = girders[0] if girders else "G1" + return self._make_segment_id(base, 1) + + def _set_member_id_text(self, value, block_signals=False): + if block_signals: + previous = self.member_id_input.blockSignals(True) + self.member_id_input.setText(value) + self.member_id_input.blockSignals(previous) + else: + self.member_id_input.setText(value) + + def _is_valid_segment_id(self, member_id): + member_id = str(member_id or "").strip() + if not member_id: + return False + base, index = self._split_member_id(member_id) + return bool(base and base in self.available_girders and isinstance(index, int) and index >= 1) + + def _update_member_id_edit_state(self): + is_full_span = self.span_combo.currentText() == "Full Length" + self.member_id_input.setReadOnly(is_full_span) + if is_full_span: + girders = self._get_selected_girders() + display = ", ".join(girders) if girders else "G1" + self._set_member_id_text(display, block_signals=True) + else: + current_text = self.member_id_input.text().strip() + if not self._is_valid_segment_id(current_text): + default_id = self._default_member_segment_id() + self._set_member_id_text(default_id) + self._update_distance_field_states() + + def _on_design_changed(self, text): + is_custom = text.lower() == "customized" + toggle_targets = ( + self.type_combo, + self.symmetry_combo, + self.total_depth_input, + self.top_width_input, + self.bottom_width_input, + ) + for widget in toggle_targets: + widget.setEnabled(is_custom) + if not is_custom: + self._lock_type_to_welded() + self._reset_section_state() + self._apply_type_state() def _on_type_changed(self, text): - is_welded = text.lower() == "welded" + self._apply_type_state() + self._update_preview() + + def _apply_type_state(self): + is_welded = self.type_combo.currentText().lower() == "welded" + is_custom = self.design_combo.currentText().lower() == "customized" + self._set_row_visibility(self.welded_rows, is_welded) self._set_row_visibility(self.rolled_rows, not is_welded) - self.dynamic_image_label.setText("Welded Girder" if is_welded else "Rolled Section") - self._apply_mode_states() + + for label, widget in self.symmetry_row: + label.setVisible(is_welded) + widget.setVisible(is_welded) + self.symmetry_combo.setEnabled(is_welded and is_custom) + + plate_widgets = ( + self.total_depth_input, + self.web_thickness_widget, + self.top_width_input, + self.top_thickness_widget, + self.bottom_width_input, + self.bottom_thickness_widget, + ) + for widget in plate_widgets: + widget.setEnabled(is_welded and is_custom) + widget.setVisible(is_welded) + + for label, widget in self.web_type_row: + label.setVisible(is_welded) + widget.setVisible(is_welded) + widget.setEnabled(is_welded and is_custom) + + self.is_section_combo.setVisible(not is_welded) + self.is_section_combo.setEnabled(not is_welded) + self._update_thickness_value_enabled_state() + + def _lock_type_to_welded(self): + welded_index = self.type_combo.findText("Welded", Qt.MatchFixedString) + if welded_index != -1 and self.type_combo.currentIndex() != welded_index: + previous = self.type_combo.blockSignals(True) + self.type_combo.setCurrentIndex(welded_index) + self.type_combo.blockSignals(previous) + + def _reset_section_state(self): + for widget in (self.total_depth_input, self.top_width_input, self.bottom_width_input): + previous = widget.blockSignals(True) + widget.clear() + widget.blockSignals(previous) + for widget in (self.web_thickness_value_input, self.top_thickness_value_input, self.bottom_thickness_value_input): + previous = widget.blockSignals(True) + widget.clear() + widget.blockSignals(previous) + self._update_preview() + + def _update_distance_field_states(self): + # Master-Detail spec: + # - Member ID: read-only + # - Start distance: read-only + # - End distance: editable + self.member_id_input.setReadOnly(True) + self.distance_start_input.setReadOnly(True) + self.distance_end_input.setReadOnly(False) + if self.segment_length_input: + self.segment_length_input.setReadOnly(True) + + def _on_span_changed(self, span_text): + # Preserve legacy span-mode behavior for total span editability. + is_full = (span_text or "").strip() == "Full Length" + self.length_input.setReadOnly(is_full) + + self._initialize_segment_chain_if_needed() + self._refresh_segment_list(self._current_girder) + self._select_segment_index(self._current_segment_index) + self._update_distance_field_states() + + def _on_length_changed(self, _): + # Total span changes affect all girders, regardless of mode. + total_span = self._get_total_span() + if total_span is None: + return + + for girder in self.available_girders: + segments = self._ensure_girder_segments(girder) + if not segments: + self.segment_chain[girder] = [{"id": self._make_segment_id(girder, 1), "start": 0.0, "end": float(total_span)}] + continue + + # If any segment ends beyond the new span, clamp and drop trailing. + pruned: List[Dict[str, float]] = [] + for seg in segments: + start = float(seg.get("start", 0.0)) + if start >= total_span: + break + end = float(seg.get("end", 0.0)) + seg["end"] = min(end, float(total_span)) + pruned.append(seg) + if not pruned: + pruned = [{"id": self._make_segment_id(girder, 1), "start": 0.0, "end": float(total_span)}] + pruned[0]["start"] = 0.0 + for i in range(1, len(pruned)): + pruned[i]["start"] = float(pruned[i - 1].get("end", 0.0)) + pruned[-1]["end"] = float(total_span) + self.segment_chain[girder] = pruned + + self._refresh_segment_list(self._current_girder) + self._select_segment_index(self._current_segment_index) + + def _get_total_span(self): + text = (self.length_input.text() or "").strip() + if not text: + return None + return self._parse_float(text) + + def _split_member_id(self, member_id): + member_id = str(member_id or "").strip() + if not member_id: + return "", None + + # Preferred format: G1M2 + if "M" in member_id: + base, index = member_id.rsplit("M", 1) + if base and index.isdigit(): + return base, int(index) + + # Backward compatible: G1-2 + if "-" in member_id: + base, index = member_id.rsplit("-", 1) + if index.isdigit(): + return base, int(index) + return base, None + + return member_id, None + + def _set_line_edit_value(self, line_edit, value): + if value is None: + return + text = f"{value:.3f}".rstrip("0").rstrip(".") + if not text: + text = "0" + previous_state = line_edit.blockSignals(True) + line_edit.setText(text) + line_edit.blockSignals(previous_state) + + def validate_member_properties(self) -> bool: + if self.design_combo.currentText() != "Customized": + return True + required_fields = [ + (self.total_depth_input, "Total Depth (d, mm)"), + (self.top_width_input, "Width of Top Flange (t_fw, mm)"), + (self.bottom_width_input, "Width of Bottom Flange (b_fw, mm)"), + ] + if self._is_custom_thickness_mode(self.web_thickness_combo): + required_fields.append((self.web_thickness_value_input, "Web Thickness (w_t, mm)")) + if self._is_custom_thickness_mode(self.top_thickness_combo): + required_fields.append((self.top_thickness_value_input, "Top Flange Thickness (t_ft, mm)")) + if self._is_custom_thickness_mode(self.bottom_thickness_combo): + required_fields.append((self.bottom_thickness_value_input, "Bottom Flange Thickness (b_ft, mm)")) + missing = [] + for field, label in required_fields: + value = self._parse_float(field.text()) + if value is None or value <= 0: + missing.append(label) + if missing: + QMessageBox.critical( + self, + "Incomplete Girder Inputs", + f"Please provide valid values for: {', '.join(missing)}.", + ) + return False + return True def _create_inner_box(self): + """Create a bordered box for grouped controls""" box = QFrame() - box.setStyleSheet( - """ + box.setStyleSheet(""" QFrame { border: 1px solid #b0b0b0; border-radius: 6px; @@ -405,67 +1887,706 @@ def _create_inner_box(self): padding: 0px; margin: 0px; } - """ - ) + """) return box + def _create_small_label(self, text): + """Create a smaller label for compact layouts""" + label = QLabel(text) + label.setStyleSheet(""" + QLabel { + color: #2b2b2b; + font-size: 11px; + font-weight: 500; + background: transparent; + border: none; + padding: 0px; + margin: 0px; + } + """) + label.setAutoFillBackground(False) + return label + + def _add_box_row(self, layout, row, label_text, widget, visibility_list=None): + """Add a row to a box grid layout""" + label = self._create_small_label(label_text) + layout.addWidget(label, row, 0, Qt.AlignLeft | Qt.AlignVCenter) + layout.addWidget(widget, row, 1) + if visibility_list is not None: + visibility_list.append((label, widget)) + return row + 1 + def _set_row_visibility(self, rows, visible): for label, widget in rows: - if label is not None: - label.setVisible(visible) + label.setVisible(visible) widget.setVisible(visible) - def _sync_mode_field(self, mode_combo, value_field, optimized_placeholder=None, custom_label=None): - mode_text = mode_combo.currentText() - is_optimized = mode_text.lower().startswith("opt") or mode_text.lower() == "all" - is_custom = mode_text.lower().startswith("custom") - if is_optimized and optimized_placeholder is not None: - value_field.setReadOnly(True) - value_field.setPlaceholderText(optimized_placeholder) - value_field.clear() - elif is_custom: - value_field.setReadOnly(False) - if custom_label: - value_field.setPlaceholderText(custom_label) - else: - value_field.setReadOnly(False) - value_field.setEnabled(True) - - def _populate_girder_lists(self): - combo = self.widgets.get("select_girder_combo") - if not combo: - return - items = [f"Girder {i}" for i in range(1, self.girder_count + 1)] + ["All"] + def _populate_rolled_section_combo(self): + designations = sorted(girder_properties.list_available_sections().keys()) + if not designations: + designations = [ + "ISMB 500", "ISMB 550", "ISMB 600", + "ISWB 500", "ISWB 550", "ISWB 600", + ] + self.is_section_combo.clear() + self.is_section_combo.addItems(designations) + + def _configure_restraint_fields(self): + torsion_items = self._constant_items("VALUES_TORSIONAL_RESTRAINT") + warping_items = self._constant_items("VALUES_WARPING_RESTRAINT") + web_type_items = self._constant_items("VALUES_WEB_TYPE") + + self._reload_combo_items(self.torsion_combo, torsion_items) + self._reload_combo_items(self.warping_combo, warping_items) + self._reload_combo_items(self.web_type_combo, web_type_items) + + @staticmethod + def _reload_combo_items(combo, items): + block = combo.blockSignals(True) combo.clear() combo.addItems(items) + combo.setCurrentIndex(0 if items else -1) + combo.blockSignals(block) + + @staticmethod + def _constant_items(constant_name): + return list(globals().get(constant_name, [])) - def _populate_member_list(self): - combo = self.widgets.get("member_select_combo") - if not combo: + def _update_preview(self): + if not hasattr(self, "section_preview"): return - items = [f"Girder {i}" for i in range(1, self.girder_count + 1)] - combo.clear() - combo.addItems(items) - def set_girder_count(self, count): + is_welded = self.type_combo.currentText().lower() == "welded" + if is_welded: + dims = self._gather_welded_dimensions() + caption = "Welded girder preview" if dims else "Enter depth and flange widths" + if dims: + self.section_preview.set_dimensions( + depth_mm=dims["depth_mm"], + flange_width_mm=dims["top_flange_width_mm"], + bottom_flange_width_mm=dims["bottom_flange_width_mm"], + web_thickness_mm=dims["web_thickness_mm"], + flange_thickness_mm=dims["top_flange_thickness_mm"], + bottom_flange_thickness_mm=dims["bottom_flange_thickness_mm"], + show_welds=True, + ) + else: + self.section_preview.clear() + else: + designation = self.is_section_combo.currentText() + beam = girder_properties.get_beam_profile(designation) + outline = girder_properties.get_rolled_section(designation) if beam is None else None + has_data = bool(beam or outline) + caption = f"Rolled section • {designation}" if has_data else "Rolled section unavailable" + if beam: + self.section_preview.set_section(beam) + elif outline: + self.section_preview.set_dimensions( + depth_mm=outline["depth_mm"], + flange_width_mm=outline["top_flange_width_mm"], + bottom_flange_width_mm=outline["bottom_flange_width_mm"], + web_thickness_mm=outline["web_thickness_mm"], + flange_thickness_mm=outline["top_flange_thickness_mm"], + bottom_flange_thickness_mm=outline["bottom_flange_thickness_mm"], + ) + else: + self.section_preview.clear() + + if hasattr(self, "preview_caption"): + self.preview_caption.setText(caption) + self._update_section_properties() + + def _gather_welded_dimensions(self): + depth = self._parse_float(self.total_depth_input.text()) + top_width = self._parse_float(self.top_width_input.text()) + bottom_width = self._parse_float(self.bottom_width_input.text()) or top_width + + if not depth or not top_width or not bottom_width: + return None + + web_default = max(8.0, depth * 0.02) + flange_default = max(10.0, depth * 0.03) + + web_thickness = web_default + if self._is_custom_thickness_mode(self.web_thickness_combo): + web_thickness = self._parse_float(self.web_thickness_value_input.text()) or web_default + + top_thickness = flange_default + if self._is_custom_thickness_mode(self.top_thickness_combo): + top_thickness = self._parse_float(self.top_thickness_value_input.text()) or flange_default + + bottom_thickness = flange_default + if self._is_custom_thickness_mode(self.bottom_thickness_combo): + bottom_thickness = self._parse_float(self.bottom_thickness_value_input.text()) or flange_default + + return { + "designation": "Custom Welded Girder", + "section_type": "welded", + "depth_mm": depth, + "top_flange_width_mm": top_width, + "bottom_flange_width_mm": bottom_width, + "web_thickness_mm": web_thickness, + "top_flange_thickness_mm": top_thickness, + "bottom_flange_thickness_mm": bottom_thickness, + } + + def _update_section_properties(self): + if not self.section_property_inputs: + return + values = None + if self.type_combo.currentText().lower() == "welded": + dims = self._gather_welded_dimensions() + if dims: + values = self._compute_welded_properties(dims) + else: + designation = self.is_section_combo.currentText() + values = self._fetch_rolled_properties(designation) + if values: + self._apply_section_properties(values) + else: + self._clear_section_properties() + + def _fetch_rolled_properties(self, designation): + if not designation: + return None + beam = girder_properties.get_beam_profile(designation) + if not beam: + return None + values = { + "Mass, M (Kg/m)": beam.mass_per_meter_kg, + "Sectional Area, a (cm2)": beam.area_cm2, + "2nd Moment of Area, Iz (cm4)": beam.moment_of_inertia_zz_cm4, + "2nd Moment of Area, Iy (cm4)": beam.moment_of_inertia_yy_cm4, + "Radius of Gyration, rz (cm)": beam.radius_of_gyration_z_cm, + "Radius of Gyration, ry (cm)": beam.radius_of_gyration_y_cm, + "Elastic Modulus, Zz (cm3)": beam.elastic_section_modulus_z_cm3, + "Elastic Modulus, Zy (cm3)": beam.elastic_section_modulus_y_cm3, + "Plastic Modulus, Zuz (cm3)": beam.plastic_section_modulus_z_cm3, + "Plastic Modulus, Zuy (cm3)": beam.plastic_section_modulus_y_cm3, + "Torsion Constant, It (cm4)": beam.torsion_constant_cm4, + "Warping Constant, Iw (cm6)": beam.warping_constant_cm6, + } + area = values.get("Sectional Area, a (cm2)") + iz = values.get("2nd Moment of Area, Iz (cm4)") + iy = values.get("2nd Moment of Area, Iy (cm4)") + if values.get("Radius of Gyration, rz (cm)") is None and area and iz: + values["Radius of Gyration, rz (cm)"] = math.sqrt(iz / area) + if values.get("Radius of Gyration, ry (cm)") is None and area and iy: + values["Radius of Gyration, ry (cm)"] = math.sqrt(iy / area) + return values + + def _compute_welded_properties(self, dims): + depth = dims["depth_mm"] + top_width = dims["top_flange_width_mm"] + bottom_width = dims["bottom_flange_width_mm"] + web_thickness = dims["web_thickness_mm"] + top_thickness = dims["top_flange_thickness_mm"] + bottom_thickness = dims["bottom_flange_thickness_mm"] + + h_web = max(depth - top_thickness - bottom_thickness, 1.0) + area_top = top_width * top_thickness + area_bottom = bottom_width * bottom_thickness + area_web = web_thickness * h_web + area_total_mm2 = area_top + area_bottom + area_web + area_cm2 = area_total_mm2 / 100.0 + mass_kg_per_m = (area_total_mm2 / 1_000_000.0) * 7850.0 + + iz_web = (web_thickness * h_web ** 3) / 12.0 + iz_top = (top_width * top_thickness ** 3) / 12.0 + iz_bottom = (bottom_width * bottom_thickness ** 3) / 12.0 + distance_top = h_web / 2.0 + top_thickness / 2.0 + distance_bottom = h_web / 2.0 + bottom_thickness / 2.0 + iz_top += area_top * distance_top ** 2 + iz_bottom += area_bottom * distance_bottom ** 2 + iz_cm4 = (iz_web + iz_top + iz_bottom) / 10000.0 + + iy_web = (h_web * web_thickness ** 3) / 12.0 + iy_top = (top_thickness * top_width ** 3) / 12.0 + iy_bottom = (bottom_thickness * bottom_width ** 3) / 12.0 + iy_cm4 = (iy_web + iy_top + iy_bottom) / 10000.0 + + rz_cm = math.sqrt(iz_cm4 / area_cm2) if area_cm2 > 0 else None + ry_cm = math.sqrt(iy_cm4 / area_cm2) if area_cm2 > 0 else None + + depth_cm = depth / 10.0 + width_cm = max(top_width, bottom_width) / 10.0 + zz_cm3 = iz_cm4 / (depth_cm / 2.0) if depth_cm > 0 else None + zy_cm3 = iy_cm4 / (width_cm / 2.0) if width_cm > 0 else None + + zpl_major = ( + area_top * distance_top + + area_bottom * distance_bottom + + (web_thickness * h_web ** 2) / 4.0 + ) / 1000.0 + zpl_minor = ( + (top_thickness * top_width ** 2) / 4.0 + + (bottom_thickness * bottom_width ** 2) / 4.0 + + (h_web * web_thickness ** 2) / 4.0 + ) / 1000.0 + + torsion_constant_cm4 = ( + (top_width * top_thickness ** 3) / 3.0 + + (bottom_width * bottom_thickness ** 3) / 3.0 + + (h_web * web_thickness ** 3) / 3.0 + ) / 10000.0 + + warping_constant_cm6 = ( + ((top_width * top_thickness ** 3) + (bottom_width * bottom_thickness ** 3)) * h_web ** 2 / 24.0 + ) / 1_000_000.0 + + return { + "Mass, M (Kg/m)": mass_kg_per_m, + "Sectional Area, a (cm2)": area_cm2, + "2nd Moment of Area, Iz (cm4)": iz_cm4, + "2nd Moment of Area, Iy (cm4)": iy_cm4, + "Radius of Gyration, rz (cm)": rz_cm, + "Radius of Gyration, ry (cm)": ry_cm, + "Elastic Modulus, Zz (cm3)": zz_cm3, + "Elastic Modulus, Zy (cm3)": zy_cm3, + "Plastic Modulus, Zuz (cm3)": zpl_major, + "Plastic Modulus, Zuy (cm3)": zpl_minor, + "Torsion Constant, It (cm4)": torsion_constant_cm4, + "Warping Constant, Iw (cm6)": warping_constant_cm6, + } + + def _apply_section_properties(self, values): + for label, widget in self.section_property_inputs.items(): + display = self._format_property_value(values.get(label)) + previous = widget.blockSignals(True) + widget.setText(display) + widget.blockSignals(previous) + + def _clear_section_properties(self): + for widget in self.section_property_inputs.values(): + previous = widget.blockSignals(True) + widget.clear() + widget.blockSignals(previous) + + @staticmethod + def _format_property_value(value): + if value is None: + return "" + if isinstance(value, (int, float)): + return f"{value:.2f}" + return str(value) + + @staticmethod + def _parse_float(text): + try: + return float(text) + except (TypeError, ValueError): + return None + + def set_girder_count(self, count: Optional[int]) -> None: + try: + total = int(count) if count is not None else len(self.available_girders) + except (TypeError, ValueError): + total = len(self.available_girders) + total = max(1, min(MAX_GIRDER_COUNT, total)) + self.available_girders = [f"G{i}" for i in range(1, total + 1)] + + # Prune segment chains for removed girders and initialize new ones. + self.segment_chain = {g: segs for g, segs in self.segment_chain.items() if g in self.available_girders} + total_span = float(self._get_total_span() or DEFAULT_MEMBER_LENGTH_M) + for girder in self.available_girders: + if girder not in self.segment_chain: + self.segment_chain[girder] = [{"id": self._make_segment_id(girder, 1), "start": 0.0, "end": total_span}] + + # Refresh dropdown + if self.girder_dropdown: + prev = self.girder_dropdown.blockSignals(True) + self.girder_dropdown.clear() + for girder in self.available_girders: + label = f"Girder {girder[1:]}" if girder.startswith("G") and girder[1:].isdigit() else girder + self.girder_dropdown.addItem(label, girder) + self.girder_dropdown.setCurrentIndex(0) + self.girder_dropdown.blockSignals(prev) + + self._current_girder = self.available_girders[0] if self.available_girders else "G1" + self._on_girder_changed(self._current_girder) + + def reset_defaults(self, preserve_selection: bool = False, preserve_segments: bool = False) -> None: + """Reset UI + stored values to initial defaults. + + Args: + preserve_selection: When True, keep the currently selected girder in + the girder selector. + preserve_segments: When True, keep the Member ID / Start / End + segment table (segment_chain) intact. + """ + + selected_girder = None + selected_segment_index = None + if preserve_selection: + try: + selected_girder = self._current_girder + except Exception: + selected_girder = None + try: + selected_segment_index = int(getattr(self, "_current_segment_index", 0)) + except Exception: + selected_segment_index = 0 + + preserved_segment_chain = None + if preserve_segments: + try: + preserved_segment_chain = {g: [dict(seg) for seg in segs] for g, segs in self.segment_chain.items()} + except Exception: + preserved_segment_chain = None + + # Clear per-member persistence so Defaults truly returns to a clean slate. + try: + self._member_state.clear() + except Exception: + self._member_state = {} + try: + self._dirty_members.clear() + except Exception: + self._dirty_members = set() + self._last_member_combo_index = 0 + + if not preserve_segments: + self.segment_chain.clear() + + def _reset_combo(combo: QComboBox, index: int = 0): + previous = combo.blockSignals(True) + combo.setCurrentIndex(index if combo.count() > index >= 0 else 0) + combo.blockSignals(previous) + + for combo in ( + self.span_combo, + self.design_combo, + self.type_combo, + self.symmetry_combo, + self.web_thickness_combo, + self.top_thickness_combo, + self.bottom_thickness_combo, + self.torsion_combo, + self.warping_combo, + self.web_type_combo, + ): + _reset_combo(combo) + + if self.is_section_combo.count() > 0: + _reset_combo(self.is_section_combo) + + # Total span default + self._set_line_edit_value(self.length_input, DEFAULT_MEMBER_LENGTH_M) + + # Segment chain defaults: one segment per girder spanning the full span + # (only when not preserving segments, or if preserving but chain is empty). + if (not preserve_segments) or (not getattr(self, "segment_chain", None)): + total_span = float(self._get_total_span() or DEFAULT_MEMBER_LENGTH_M) + for girder in self.available_girders: + self.segment_chain[girder] = [{"id": self._make_segment_id(girder, 1), "start": 0.0, "end": total_span}] + elif preserved_segment_chain: + # Restore preserved segments after any internal recomputation. + self.segment_chain = preserved_segment_chain + + for field in ( + self.total_depth_input, + self.top_width_input, + self.bottom_width_input, + self.web_thickness_value_input, + self.top_thickness_value_input, + self.bottom_thickness_value_input, + ): + previous = field.blockSignals(True) + field.clear() + field.blockSignals(previous) + + self._on_design_changed(self.design_combo.currentText()) + self._on_type_changed(self.type_combo.currentText()) + self._update_preview() + self._update_section_properties() + + # Capture the default template used when new members are first visited. + try: + self._default_member_state = self._capture_member_state() + except Exception: + self._default_member_state = None + + # Refresh master-detail UI + if self.girder_dropdown: + prev = self.girder_dropdown.blockSignals(True) + self.girder_dropdown.clear() + + # Keep display-friendly labels while preserving stable internal IDs via userData. + for girder in self.available_girders: + label = f"Girder {girder[1:]}" if girder.startswith("G") and girder[1:].isdigit() else girder + self.girder_dropdown.addItem(label, girder) + + # Preserve selection when requested (match by userData, not label). + if preserve_selection and selected_girder and selected_girder in self.available_girders: + idx = self.girder_dropdown.findData(selected_girder) + self.girder_dropdown.setCurrentIndex(idx if idx != -1 else 0) + else: + self.girder_dropdown.setCurrentIndex(0) + + self.girder_dropdown.blockSignals(prev) + + if preserve_selection and selected_girder and selected_girder in self.available_girders: + self._current_girder = selected_girder + else: + self._current_girder = self.available_girders[0] if self.available_girders else "G1" + + self._refresh_segment_list(self._current_girder) + if preserve_segments and selected_segment_index is not None: + self._select_segment_index(max(0, selected_segment_index)) + else: + self._select_segment_index(0) + self._update_distance_field_states() + + def collect_data(self) -> dict: + # Treat the dialog-level Save as committing the current Member ID. + if self._is_current_member_dirty(): + self._commit_current_member_state() + + welded_inputs = { + "total_depth_mm": self.total_depth_input.text().strip(), + "top_flange_width_mm": self.top_width_input.text().strip(), + "bottom_flange_width_mm": self.bottom_width_input.text().strip(), + "web_thickness_mode": self.web_thickness_combo.currentText(), + "top_thickness_mode": self.top_thickness_combo.currentText(), + "bottom_thickness_mode": self.bottom_thickness_combo.currentText(), + "web_thickness_value_mm": self.web_thickness_value_input.text().strip(), + "top_thickness_value_mm": self.top_thickness_value_input.text().strip(), + "bottom_thickness_value_mm": self.bottom_thickness_value_input.text().strip(), + } + properties_snapshot = { + label: field.text().strip() + for label, field in self.section_property_inputs.items() + } + current_segments = self._ensure_girder_segments(self._current_girder) + current_segment = None + if current_segments: + idx = max(0, min(self._current_segment_index, len(current_segments) - 1)) + current_segment = dict(current_segments[idx]) + return { + "selected_girders": [self._current_girder], + "selected_girder": self._current_girder, + "span_mode": self.span_combo.currentText(), + "member_id": self.member_id_input.text().strip(), + "distance_start_m": self._parse_float(self.distance_start_input.text()), + "distance_end_m": self._parse_float(self.distance_end_input.text()), + "total_span_m": self._parse_float(self.length_input.text()), + "current_segment": current_segment, + "design_mode": self.design_combo.currentText(), + "girder_type": self.type_combo.currentText(), + "symmetry": self.symmetry_combo.currentText(), + "torsional_restraint": self.torsion_combo.currentText(), + "warping_restraint": self.warping_combo.currentText(), + "web_type": self.web_type_combo.currentText(), + "rolled_section": self.is_section_combo.currentText(), + "welded_inputs": welded_inputs, + "segment_chain": { + girder: [ + {"id": seg.get("id"), "start": seg.get("start"), "end": seg.get("end")} + for seg in segments + ] + for girder, segments in self.segment_chain.items() + }, + # Per-member saved Section Inputs keyed by girder/member_id. + "member_states": self._member_state, + "section_properties": properties_snapshot, + } + + def restore_data(self, data: dict) -> None: + """Restore previously saved girder details. + + This is used by the Additional Inputs dialog to persist Member Properties + (including segment chains) across dialog reopen. + + Args: + data: Dict as returned by collect_data() (or compatible). + """ + if not isinstance(data, dict): + return + + # Restore total span early so segment normalization uses the right length. + total_span = data.get("total_span_m") + if total_span is not None and hasattr(self, "length_input") and self.length_input is not None: + try: + self._set_line_edit_value(self.length_input, float(total_span)) + except Exception: + # Some callers may store this as an empty string. + try: + text = str(total_span).strip() + if text: + self.length_input.setText(text) + except Exception: + pass + + segment_chain = data.get("segment_chain") + if isinstance(segment_chain, dict) and segment_chain: + # Normalize segment records to {id,start,end}. + normalized = {} + for girder, segments in segment_chain.items(): + if not isinstance(segments, list): + continue + seg_list = [] + for seg in segments: + if not isinstance(seg, dict): + continue + seg_list.append( + { + "id": str(seg.get("id") or "").strip() or None, + "start": float(seg.get("start") or 0.0), + "end": float(seg.get("end") or 0.0), + } + ) + if seg_list: + normalized[str(girder)] = seg_list + if normalized: + self.segment_chain = normalized + + member_states = data.get("member_states") + if isinstance(member_states, dict): + self._member_state = member_states + + # Restore current girder + current segment, then refresh dependent UI. + selected_girder = str(data.get("selected_girder") or data.get("selected_girders", [""])[0] or "").strip() + if selected_girder and selected_girder in self.available_girders: + self._current_girder = selected_girder + + # Update dropdown and segment list. + if self.girder_dropdown is not None: + prev = self.girder_dropdown.blockSignals(True) + try: + if self.girder_dropdown.findText(self._current_girder) >= 0: + self.girder_dropdown.setCurrentText(self._current_girder) + finally: + self.girder_dropdown.blockSignals(prev) + + self._refresh_segment_list(self._current_girder) + self._refresh_member_id_combo() + + # Try to restore the previously active segment. + target_index = 0 + current_segment = data.get("current_segment") + if isinstance(current_segment, dict): + target_id = str(current_segment.get("id") or "").strip() + if target_id: + segments = self._ensure_girder_segments(self._current_girder) + for idx, seg in enumerate(segments): + if str(seg.get("id") or "").strip() == target_id: + target_index = idx + break + self._select_segment_index(int(target_index)) + + # ===== Public helpers for other Member Properties tabs ===== + + def list_all_member_ids(self) -> List[str]: + """Return all current member IDs (segments) across all available girders.""" + member_ids: List[str] = [] + for girder in self.available_girders: + segments = self._ensure_girder_segments(girder) + for seg in segments: + seg_id = str(seg.get("id") or "").strip() + if seg_id: + member_ids.append(seg_id) + return member_ids + + def is_member_optimized(self, member_id: str) -> bool: + """True if the given member is set to Optimized design in Girder Details.""" + member_id = str(member_id or "").strip() + if not member_id: + return False + + girder, _idx = self._split_member_id(member_id) + + # If the requested member is currently active, reflect the live UI. + try: + current_girder, current_member_id = self._current_member_key() + if current_girder == girder and current_member_id == member_id: + return (self.design_combo.currentText() if hasattr(self, "design_combo") else "") == "Optimized" + except Exception: + pass + + stored = (self._member_state.get(girder) or {}).get(member_id) or {} + design = ((stored.get("inputs") or {}).get("design") or "").strip() + if design: + return design == "Optimized" + + def get_member_section_dimensions(self, member_id: str) -> Optional[dict]: + """Return basic section dimensions for the given member. + + Output keys: top_flange_width_mm, bottom_flange_width_mm, web_thickness_mm. + """ + member_id = str(member_id or "").strip() + if not member_id: + return None + + girder, _idx = self._split_member_id(member_id) + + inputs = None + try: + current_girder, current_member_id = self._current_member_key() + if current_girder == girder and current_member_id == member_id: + inputs = (self._capture_member_state() or {}).get("inputs") + except Exception: + inputs = None + + if inputs is None: + stored = (self._member_state.get(girder) or {}).get(member_id) or {} + inputs = (stored.get("inputs") or {}) + + return self._compute_section_dimensions_from_inputs(inputs) + + def _compute_section_dimensions_from_inputs(self, inputs: dict) -> Optional[dict]: + if not isinstance(inputs, dict): + return None + + section_type = str(inputs.get("type") or "").strip().lower() + if section_type == "welded": + depth = self._parse_float(inputs.get("total_depth")) + top_width = self._parse_float(inputs.get("top_width")) + bottom_width = self._parse_float(inputs.get("bottom_width")) or top_width + + if not depth or not top_width or not bottom_width: + return None + + web_thickness = None + if str(inputs.get("web_thickness") or "").strip().lower() == "custom": + web_thickness = self._parse_float(inputs.get("web_thickness_value")) + + if not web_thickness: + web_thickness = max(8.0, depth * 0.02) + + return { + "top_flange_width_mm": top_width, + "bottom_flange_width_mm": bottom_width, + "web_thickness_mm": web_thickness, + } + + designation = str(inputs.get("is_section") or "").strip() + if not designation: + return None + + beam = girder_properties.get_beam_profile(designation) + outline = girder_properties.get_rolled_section(designation) if beam is None else None + if beam: + return { + "top_flange_width_mm": float(beam.flange_width_mm), + "bottom_flange_width_mm": float(beam.flange_width_mm), + "web_thickness_mm": float(beam.web_thickness_mm), + } + if outline: + return { + "top_flange_width_mm": float(outline.get("top_flange_width_mm") or 0.0), + "bottom_flange_width_mm": float(outline.get("bottom_flange_width_mm") or 0.0), + "web_thickness_mm": float(outline.get("web_thickness_mm") or 0.0), + } + return None + + # Fallback: if the member hasn't been visited/saved yet, do NOT inherit + # whatever the currently active member is set to. New/unvisited members + # should behave like the UI default (Optimized) until explicitly changed. try: - count_int = int(max(1, count)) + template = getattr(self, "_default_member_state", None) or {} + default_design = str(((template.get("inputs") or {}).get("design") or "")).strip() + if default_design: + return default_design == "Optimized" except Exception: - count_int = 1 - self.girder_count = count_int - self._populate_girder_lists() - self._populate_member_list() - - def _apply_mode_states(self): - def sync_pair(mode_name, value_name, opt_placeholder=None, custom_label=None): - mode_widget = self.widgets.get(mode_name) - value_widget = self.widgets.get(value_name) - if mode_widget and value_widget: - self._sync_mode_field(mode_widget, value_widget, optimized_placeholder=opt_placeholder, custom_label=custom_label) - - sync_pair("depth_mode_combo", "depth_input", opt_placeholder="Auto") - sync_pair("top_width_mode_combo", "top_width_input", opt_placeholder="Auto") - sync_pair("bottom_width_mode_combo", "bottom_width_input", opt_placeholder="Auto") - sync_pair("top_thickness_mode_combo", "top_thickness_input", custom_label="Custom") - sync_pair("bottom_thickness_mode_combo", "bottom_thickness_input", custom_label="Custom") - sync_pair("web_thickness_mode_combo", "web_thickness_input", custom_label="Custom") + pass + return True diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py index 4ce85b0f7..82fff7d4b 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py @@ -1,29 +1,52 @@ -"""Auto-generated tab module extracted from additional_inputs.""" -import sys -import os +"""Stiffener Details tab. + +This tab is part of Member Properties (Section Properties) and stores inputs per girder member. +""" + +from __future__ import annotations + +from typing import Dict, Optional + +from PySide6.QtCore import Qt +from PySide6.QtGui import QIntValidator from PySide6.QtWidgets import ( - QWidget, QVBoxLayout, QHBoxLayout, QTabWidget, QTabBar, QLabel, QLineEdit, - QComboBox, QGroupBox, QFormLayout, QPushButton, QScrollArea, - QCheckBox, QMessageBox, QSizePolicy, QSpacerItem, QStackedWidget, - QFrame, QGridLayout, QTableWidget, QTableWidgetItem, QHeaderView, - QTextEdit, QDialog, QSizePolicy, QSizeGrip + QComboBox, + QFrame, + QGridLayout, + QHBoxLayout, + QLabel, + QLineEdit, + QMessageBox, + QPushButton, + QScrollArea, + QSizePolicy, + QTextEdit, + QVBoxLayout, + QWidget, ) -from PySide6.QtCore import Qt, Signal, QSize -from PySide6.QtGui import QDoubleValidator, QIntValidator -from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.core.utils.common import VALUES_YES_NO, VALUES_STIFFENER_DESIGN from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style -from osdagbridge.desktop.ui.dialogs.tabs.optimizable_field import OptimizableField + +OUTSTAND_DEFAULT_TEXT = "NA" +VALUES_BEARING_STIFFENER_COUNT = ["1", "2", "3", "4"] +VALUES_STIFFENER_THICKNESS_MODE = ["All", "Customized"] +VALUES_LONGITUDINAL_STIFFENER = ["No", "Yes and 1 stiffener", "Yes and 2 stiffeners"] class StiffenerDetailsTab(QWidget): """Tab for Stiffener Details with compact layout""" def __init__(self, parent=None): super().__init__(parent) + self._girder_details_tab = None + self._state_by_member: Dict[str, dict] = {} + self._active_member_id: Optional[str] = None + self._is_loading_ui: bool = False self.init_ui() def init_ui(self): + combo_width = 190 # keep all combo boxes strictly same width + main_layout = QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) main_layout.setSpacing(0) @@ -62,19 +85,34 @@ def init_ui(self): girder_row.setContentsMargins(0, 0, 0, 0) girder_row.setSpacing(10) - girder_label = QLabel("Select Girder Member:") + girder_label = QLabel("Select Member ID:") girder_label.setStyleSheet("font-size: 11px; font-weight: 600; color: #3a3a3a; border: none;") girder_row.addWidget(girder_label) self.girder_member_combo = QComboBox() - self.girder_member_combo.addItems(["G1-1", "G1-2", "G1-3", "All"]) apply_field_style(self.girder_member_combo) - self.girder_member_combo.setFixedWidth(190) + self.girder_member_combo.setFixedWidth(combo_width) self.girder_member_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) girder_row.addWidget(self.girder_member_combo, 1) left_layout.addLayout(girder_row) + action_row = QHBoxLayout() + action_row.setContentsMargins(0, 0, 0, 0) + action_row.setSpacing(8) + self.apply_to_all_btn = QPushButton("Apply changes to all custom") + self.apply_to_all_btn.setFixedHeight(26) + self.apply_to_all_btn.setStyleSheet( + "QPushButton { background: #ffffff; border: 1px solid #cfcfcf; border-radius: 6px; " + "padding: 4px 10px; font-size: 11px; color: #2b2b2b; }" + "QPushButton:hover { border-color: #90AF13; }" + "QPushButton:pressed { background: #f0f0f0; }" + "QPushButton:disabled { color: #8a8a8a; }" + ) + action_row.addStretch(1) + action_row.addWidget(self.apply_to_all_btn) + left_layout.addLayout(action_row) + stiffener_heading = QLabel("Stiffener Inputs") stiffener_heading.setStyleSheet("font-size: 11px; font-weight: 700; color: #000000; border: none; margin-top: 4px;") left_layout.addWidget(stiffener_heading) @@ -83,37 +121,84 @@ def init_ui(self): inputs_grid.setContentsMargins(0, 0, 0, 0) inputs_grid.setHorizontalSpacing(12) inputs_grid.setVerticalSpacing(10) - inputs_grid.setColumnMinimumWidth(0, 180) + inputs_grid.setColumnMinimumWidth(0, 220) inputs_grid.setColumnStretch(0, 0) inputs_grid.setColumnStretch(1, 1) + self.bearing_count_combo = QComboBox() + self.bearing_count_combo.addItems(VALUES_BEARING_STIFFENER_COUNT) + apply_field_style(self.bearing_count_combo) + self.bearing_count_combo.setFixedWidth(combo_width) + self.bearing_count_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + row = self._add_form_row( + inputs_grid, + 0, + "No. of Bearing Stiffeners at each end (on one side only):", + self.bearing_count_combo, + ) + + self.bearing_thick_combo = QComboBox() + self.bearing_thick_combo.addItems(VALUES_STIFFENER_THICKNESS_MODE) + apply_field_style(self.bearing_thick_combo) + self.bearing_thick_combo.setFixedWidth(combo_width) + self.bearing_thick_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + row = self._add_form_row(inputs_grid, row, "Bearing Stiffener Thickness (mm):", self.bearing_thick_combo) + + self.bearing_outstand_input = QTextEdit() + self.bearing_outstand_input.setReadOnly(True) + self.bearing_outstand_input.setText(OUTSTAND_DEFAULT_TEXT) + self.bearing_outstand_input.setFixedHeight(34) + self.bearing_outstand_input.setFixedWidth(combo_width) + self.bearing_outstand_input.setStyleSheet( + "QTextEdit { border: 1px solid #d0d0d0; border-radius: 6px; background: #ffffff; " + "color: #5b5b5b; font-size: 11px; }" + ) + row = self._add_form_row(inputs_grid, row, "Outstand of Bearing Stiffener (mm):", self.bearing_outstand_input) + self.intermediate_combo = QComboBox() - self.intermediate_combo.addItems(["No", "Yes - At Supports", "Yes - Spaced"]) + self.intermediate_combo.addItems(VALUES_YES_NO) apply_field_style(self.intermediate_combo) - row = self._add_form_row(inputs_grid, 0, "Intermediate Stiffener:", self.intermediate_combo) + self.intermediate_combo.setFixedWidth(combo_width) + self.intermediate_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + row = self._add_form_row(inputs_grid, row, "Intermediate Stiffener:", self.intermediate_combo) + + self.intermediate_spacing_input = QLineEdit() + self.intermediate_spacing_input.setValidator(QIntValidator(1, 10**9, self.intermediate_spacing_input)) + apply_field_style(self.intermediate_spacing_input) + self.intermediate_spacing_input.setPlaceholderText("NA") + row = self._add_form_row(inputs_grid, row, "Intermediate Stiffener Spacing:", self.intermediate_spacing_input) - self.spacing_field = OptimizableField("Intermediate Stiffener Spacing") - self.spacing_field.mode_combo.clear() - self.spacing_field.mode_combo.addItems(["NA", "Optimized", "Customized"]) - self.spacing_field.on_mode_changed(self.spacing_field.mode_combo.currentText()) - self._prepare_optimizable_field(self.spacing_field) - row = self._add_form_row(inputs_grid, row, "Intermediate Stiffener Spacing:", self.spacing_field) + self.intermediate_thick_combo = QComboBox() + self.intermediate_thick_combo.addItems(VALUES_STIFFENER_THICKNESS_MODE) + apply_field_style(self.intermediate_thick_combo) + self.intermediate_thick_combo.setFixedWidth(combo_width) + self.intermediate_thick_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + row = self._add_form_row(inputs_grid, row, "Intermediate Stiffener Thickness (mm):", self.intermediate_thick_combo) + + self.intermediate_outstand_input = QTextEdit() + self.intermediate_outstand_input.setReadOnly(True) + self.intermediate_outstand_input.setText(OUTSTAND_DEFAULT_TEXT) + self.intermediate_outstand_input.setFixedHeight(34) + self.intermediate_outstand_input.setFixedWidth(combo_width) + self.intermediate_outstand_input.setStyleSheet( + "QTextEdit { border: 1px solid #d0d0d0; border-radius: 6px; background: #ffffff; " + "color: #5b5b5b; font-size: 11px; }" + ) + row = self._add_form_row(inputs_grid, row, "Outstand of Intermediate Stiffener (mm):", self.intermediate_outstand_input) self.longitudinal_combo = QComboBox() - self.longitudinal_combo.addItems(["None", "Yes and 1 stiffener", "Yes and 2 stiffeners"]) + self.longitudinal_combo.addItems(VALUES_LONGITUDINAL_STIFFENER) apply_field_style(self.longitudinal_combo) + self.longitudinal_combo.setFixedWidth(combo_width) + self.longitudinal_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) row = self._add_form_row(inputs_grid, row, "Longitudinal Stiffener:", self.longitudinal_combo) - self.intermediate_thick_combo = QComboBox() - self.intermediate_thick_combo.addItems(["All", "Custom"]) - apply_field_style(self.intermediate_thick_combo) - row = self._add_form_row(inputs_grid, row, "Intermediate Stiffener Thickness:", self.intermediate_thick_combo) - self.long_thick_combo = QComboBox() - self.long_thick_combo.addItems(["All", "Custom"]) - self.long_thick_combo.setEnabled(False) + self.long_thick_combo.addItems(VALUES_STIFFENER_THICKNESS_MODE) apply_field_style(self.long_thick_combo) - row = self._add_form_row(inputs_grid, row, "Longitudinal Stiffener Thickness:", self.long_thick_combo) + self.long_thick_combo.setFixedWidth(combo_width) + self.long_thick_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + row = self._add_form_row(inputs_grid, row, "Longitudinal Stiffener Thickness (mm):", self.long_thick_combo) left_layout.addLayout(inputs_grid) @@ -130,6 +215,8 @@ def init_ui(self): self.method_combo = QComboBox() self.method_combo.addItems(VALUES_STIFFENER_DESIGN) apply_field_style(self.method_combo) + self.method_combo.setFixedWidth(combo_width) + self.method_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) self._add_form_row(buckling_grid, 0, "Shear Buckling Design Method:", self.method_combo) left_layout.addLayout(buckling_grid) @@ -177,7 +264,21 @@ def init_ui(self): # Signals - self.longitudinal_combo.currentTextChanged.connect(self.on_longitudinal_changed) + self.girder_member_combo.currentTextChanged.connect(self._on_member_changed) + self.bearing_count_combo.currentTextChanged.connect(self._on_any_input_changed) + self.bearing_thick_combo.currentTextChanged.connect(self._on_any_input_changed) + self.intermediate_combo.currentTextChanged.connect(self._on_intermediate_changed) + self.longitudinal_combo.currentTextChanged.connect(self._on_longitudinal_changed) + self.intermediate_spacing_input.textChanged.connect(self._on_any_input_changed) + self.intermediate_thick_combo.currentTextChanged.connect(self._on_any_input_changed) + self.long_thick_combo.currentTextChanged.connect(self._on_any_input_changed) + self.method_combo.currentTextChanged.connect(self._on_any_input_changed) + self.apply_to_all_btn.clicked.connect(self._apply_current_to_all_members) + + # Defaults + self._on_intermediate_changed(self.intermediate_combo.currentText()) + self._on_longitudinal_changed(self.longitudinal_combo.currentText()) + self.refresh_girder_members() def _create_card_frame(self): card = QFrame() @@ -189,21 +290,349 @@ def _create_card_frame(self): def _create_label(self, text): label = QLabel(text) label.setStyleSheet("font-size: 11px; color: #3a3a3a; border: none;") + label.setWordWrap(True) return label def _add_form_row(self, layout, row, text, widget): label = self._create_label(text) layout.addWidget(label, row, 0, Qt.AlignLeft | Qt.AlignVCenter) - widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + # Respect fixed-width widgets (e.g., combo boxes) so all fields remain uniform. + try: + fixed_width = widget.minimumWidth() == widget.maximumWidth() and widget.minimumWidth() > 0 + except Exception: + fixed_width = False + if fixed_width: + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + else: + widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) layout.addWidget(widget, row, 1) return row + 1 - def _prepare_optimizable_field(self, field): - field.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - apply_field_style(field.mode_combo) - apply_field_style(field.input_field) + def bind_girder_details_tab(self, girder_details_tab) -> None: + """Bind to the Girder Details tab to populate members and detect optimized members.""" + self._girder_details_tab = girder_details_tab + self.refresh_girder_members() + + def refresh_girder_members(self) -> None: + """Refresh the Select Girder Member dropdown from Girder Details segment chains.""" + # Persist any in-progress edits before rebuilding the member list. + self._store_current_member_state() + + members = [] + if self._girder_details_tab is not None and hasattr(self._girder_details_tab, "list_all_member_ids"): + try: + members = list(self._girder_details_tab.list_all_member_ids() or []) + except Exception: + members = [] + + # Fall back to a sane default when Girder Details is not bound yet. + if not members: + members = ["G1-1"] + + previous = self.girder_member_combo.blockSignals(True) + try: + current = self.girder_member_combo.currentText().strip() + self.girder_member_combo.clear() + for member_id in members: + self.girder_member_combo.addItem(str(member_id), str(member_id)) + # Default should show the very first girder member. + target = current if current in members else members[0] + self.girder_member_combo.setCurrentText(target) + finally: + self.girder_member_combo.blockSignals(previous) + + # Ensure state exists and UI is synced to the active selection. + self._on_member_changed(self.girder_member_combo.currentText()) + + def validate(self) -> None: + """Validate current stored inputs before saving the dialog.""" + self._store_current_member_state() + for member_id, state in self._state_by_member.items(): + if self._is_member_optimized(member_id): + continue + if state.get("intermediate_stiffener") == "Yes": + spacing = str(state.get("intermediate_spacing_mm") or "").strip() + if not spacing.isdigit() or int(spacing) <= 0: + # Guide the user to the offending member + field. + try: + self.girder_member_combo.setCurrentText(str(member_id)) + except Exception: + pass + try: + self.intermediate_spacing_input.setFocus() + self.intermediate_spacing_input.selectAll() + except Exception: + pass + raise ValueError( + f"Intermediate Stiffener Spacing (mm) is required for member '{member_id}' when Intermediate Stiffener is Yes." + ) + + def collect_data(self) -> dict: + self._store_current_member_state() + # Ensure all current members get a state entry so save/restore is consistent. + for member_id in self._list_current_member_ids(): + if member_id not in self._state_by_member: + self._state_by_member[member_id] = dict(self._default_member_state()) + return { + "stiffener_by_member": dict(self._state_by_member), + } + + def reset_defaults(self) -> None: + """Reset UI + per-member stored values to the initial defaults.""" + self._state_by_member.clear() + self._active_member_id = None + + # Refresh members first (depends on Girder Details). + try: + self.refresh_girder_members() + except Exception: + pass + + # Force UI to default member state for current selection. + member_id = (self.girder_member_combo.currentText() or "").strip() + if member_id: + self._active_member_id = member_id + self._load_member_state(member_id) + + def restore_data(self, data: dict) -> None: + """Restore previously saved stiffener inputs. + + Args: + data: Dict as returned by collect_data() (or compatible). + """ + if not isinstance(data, dict): + return + restored = data.get("stiffener_by_member", {}) + if not isinstance(restored, dict): + restored = {} + # Replace the per-member state and refresh UI. + self._state_by_member = dict(restored) + try: + self.refresh_girder_members() + except Exception: + pass + + def showEvent(self, event): # noqa: N802 (Qt naming) + super().showEvent(event) + # When the tab becomes visible, refresh member list in case girder segments changed. + self.refresh_girder_members() + + def _default_member_state(self) -> dict: + return { + "bearing_stiffeners_each_end": "2", + "bearing_thickness_mode": "All", + "bearing_outstand_mm": OUTSTAND_DEFAULT_TEXT, + "intermediate_stiffener": "No", + "intermediate_spacing_mm": "NA", + "intermediate_outstand_mm": OUTSTAND_DEFAULT_TEXT, + "longitudinal_stiffener": "Yes and 1 stiffener", + "intermediate_thickness_mode": "All", + "longitudinal_thickness_mode": "All", + "shear_buckling_method": VALUES_STIFFENER_DESIGN[0] if VALUES_STIFFENER_DESIGN else "", + } + + def _store_current_member_state(self) -> None: + if self._is_loading_ui: + return + if not self._active_member_id: + return + self._state_by_member[self._active_member_id] = { + "bearing_stiffeners_each_end": self.bearing_count_combo.currentText(), + "bearing_thickness_mode": self.bearing_thick_combo.currentText(), + "bearing_outstand_mm": self.bearing_outstand_input.toPlainText().strip(), + "intermediate_stiffener": self.intermediate_combo.currentText(), + "intermediate_spacing_mm": self.intermediate_spacing_input.text().strip(), + "intermediate_outstand_mm": self.intermediate_outstand_input.toPlainText().strip(), + "longitudinal_stiffener": self.longitudinal_combo.currentText(), + "intermediate_thickness_mode": self.intermediate_thick_combo.currentText(), + "longitudinal_thickness_mode": self.long_thick_combo.currentText(), + "shear_buckling_method": self.method_combo.currentText(), + } + + def _load_member_state(self, member_id: str) -> None: + # Ensure every member has a state entry. + if member_id not in self._state_by_member: + self._state_by_member[member_id] = dict(self._default_member_state()) + state = dict(self._state_by_member.get(member_id) or self._default_member_state()) + + self._is_loading_ui = True + + block_a = self.intermediate_combo.blockSignals(True) + block_b = self.longitudinal_combo.blockSignals(True) + block_c = self.method_combo.blockSignals(True) + try: + self.intermediate_combo.setCurrentText(state.get("intermediate_stiffener", "No")) + self.longitudinal_combo.setCurrentText(state.get("longitudinal_stiffener", "Yes and 1 stiffener")) + self.intermediate_thick_combo.setCurrentText(state.get("intermediate_thickness_mode", "All")) + self.long_thick_combo.setCurrentText(state.get("longitudinal_thickness_mode", "All")) + self.method_combo.setCurrentText(state.get("shear_buckling_method", self.method_combo.itemText(0))) + + self.bearing_count_combo.setCurrentText(state.get("bearing_stiffeners_each_end", "2")) + self.bearing_thick_combo.setCurrentText(state.get("bearing_thickness_mode", "All")) + self.bearing_outstand_input.setText(state.get("bearing_outstand_mm", OUTSTAND_DEFAULT_TEXT)) + self.intermediate_outstand_input.setText(state.get("intermediate_outstand_mm", OUTSTAND_DEFAULT_TEXT)) + + # spacing text is managed by _on_intermediate_changed + self.intermediate_spacing_input.setText(str(state.get("intermediate_spacing_mm", "NA"))) + finally: + self.intermediate_combo.blockSignals(block_a) + self.longitudinal_combo.blockSignals(block_b) + self.method_combo.blockSignals(block_c) + self._is_loading_ui = False + + self._on_intermediate_changed(self.intermediate_combo.currentText()) + self._on_longitudinal_changed(self.longitudinal_combo.currentText()) + self._update_outstand_fields(member_id) + self._refresh_enabled_state(member_id) + # Keep in-memory state synced even when user only edits a single member. + self._store_current_member_state() + + def _on_member_changed(self, member_id: str) -> None: + member_id = str(member_id or "").strip() + if not member_id: + return + + if self._active_member_id and self._active_member_id != member_id: + self._store_current_member_state() + + self._active_member_id = member_id + self._load_member_state(member_id) + + def _on_any_input_changed(self, *_args) -> None: + """Persist UI edits into per-member state as the user types/selects.""" + self._store_current_member_state() + + def _update_outstand_fields(self, member_id: str) -> None: + computed = self._compute_outstand_value(member_id) + value = computed if computed is not None else OUTSTAND_DEFAULT_TEXT + prev_a = self.bearing_outstand_input.blockSignals(True) + prev_b = self.intermediate_outstand_input.blockSignals(True) + try: + self.bearing_outstand_input.setText(value) + self.intermediate_outstand_input.setText(value) + finally: + self.bearing_outstand_input.blockSignals(prev_a) + self.intermediate_outstand_input.blockSignals(prev_b) + + def _compute_outstand_value(self, member_id: str) -> Optional[str]: + if self._girder_details_tab is None: + return None + if not hasattr(self._girder_details_tab, "get_member_section_dimensions"): + return None + + dims = None + try: + dims = self._girder_details_tab.get_member_section_dimensions(member_id) + except Exception: + dims = None + + if not isinstance(dims, dict): + return None + + try: + top_width = float(dims.get("top_flange_width_mm") or 0.0) + bottom_width = float(dims.get("bottom_flange_width_mm") or 0.0) + web_thickness = float(dims.get("web_thickness_mm") or 0.0) + except (TypeError, ValueError): + return None + + if top_width <= 0 or bottom_width <= 0 or web_thickness <= 0: + return None + + outstand = (min(top_width, bottom_width) - web_thickness) / 2.0 + if outstand <= 0: + return None + + text = f"{outstand:.3f}".rstrip("0").rstrip(".") + return text or None + + def _on_intermediate_changed(self, text: str) -> None: + is_yes = str(text).strip().startswith("Yes") + if not is_yes: + prev = self.intermediate_spacing_input.blockSignals(True) + try: + self.intermediate_spacing_input.setText("NA") + finally: + self.intermediate_spacing_input.blockSignals(prev) + # Reset dependent selections when not applicable. + prev_mode = self.intermediate_thick_combo.blockSignals(True) + try: + self.intermediate_thick_combo.setCurrentText("All") + finally: + self.intermediate_thick_combo.blockSignals(prev_mode) + else: + if self.intermediate_spacing_input.text().strip().upper() == "NA": + self.intermediate_spacing_input.clear() + self._refresh_enabled_state(self._active_member_id or "") + self._store_current_member_state() + + def _on_longitudinal_changed(self, text: str) -> None: + is_yes = str(text).strip() == "Yes" + if not is_yes: + prev_mode = self.long_thick_combo.blockSignals(True) + try: + self.long_thick_combo.setCurrentText("All") + finally: + self.long_thick_combo.blockSignals(prev_mode) + self._refresh_enabled_state(self._active_member_id or "") + self._store_current_member_state() + + def _is_member_optimized(self, member_id: str) -> bool: + if self._girder_details_tab is None: + return False + if hasattr(self._girder_details_tab, "is_member_optimized"): + try: + return bool(self._girder_details_tab.is_member_optimized(member_id)) + except Exception: + return False + return False + + def _refresh_enabled_state(self, member_id: str) -> None: + member_id = str(member_id or self._active_member_id or "").strip() + optimized = self._is_member_optimized(member_id) if member_id else False + + base_enabled = not optimized + self.bearing_count_combo.setEnabled(base_enabled) + self.bearing_thick_combo.setEnabled(base_enabled) + self.bearing_outstand_input.setEnabled(base_enabled) + self.intermediate_outstand_input.setEnabled(base_enabled) + self.intermediate_combo.setEnabled(base_enabled) + self.longitudinal_combo.setEnabled(base_enabled) + self.method_combo.setEnabled(base_enabled) + + intermediate_yes = self.intermediate_combo.currentText().strip() == "Yes" + longitudinal_yes = self.longitudinal_combo.currentText().strip().startswith("Yes") + + self.intermediate_spacing_input.setEnabled(base_enabled and intermediate_yes) + self.intermediate_thick_combo.setEnabled(base_enabled and intermediate_yes) + self.long_thick_combo.setEnabled(base_enabled and longitudinal_yes) + + # If optimized, applying changes makes no sense. + self.apply_to_all_btn.setEnabled(base_enabled) + + def _list_current_member_ids(self) -> list[str]: + members: list[str] = [] + for i in range(self.girder_member_combo.count()): + try: + members.append(str(self.girder_member_combo.itemText(i)).strip()) + except Exception: + continue + return [m for m in members if m] + + def _apply_current_to_all_members(self) -> None: + """Copy the currently selected member's inputs to all members.""" + self._store_current_member_state() + if not self._active_member_id: + return + + template = dict(self._state_by_member.get(self._active_member_id) or self._default_member_state()) + for member_id in self._list_current_member_ids(): + if self._is_member_optimized(member_id): + continue + self._state_by_member[member_id] = dict(template) + + # Re-load to ensure the UI reflects the stored state for the active member. + self._load_member_state(self._active_member_id) + - def on_longitudinal_changed(self, text): - has_longitudinal = text.lower().startswith("yes") - self.long_thick_combo.setEnabled(has_longitudinal) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 5b22a0e3a..908ded84d 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -875,6 +875,23 @@ def _solve_layout(self, changed_field="width"): old_overhang = overhang_input old_spacing = spacing_input + # If the selected number of girders cannot fit within the current + # overall bridge width, clamp to the maximum feasible count. + # With minimum spacing and non-negative overhang: + # overall_width >= (n-1) * spacing_min => n_max = floor(overall_width/spacing_min) + 1 + try: + spacing_min = float(spacing_bounds[0]) + except Exception: + spacing_min = 1.0 + if spacing_min <= 0: + spacing_min = 1.0 + n_max = int(math.floor((overall_width + 1e-9) / spacing_min) + 1) + n_max = max(2, n_max) + if n > n_max: + # Clamp and proceed with a valid solution rather than leaving + # the UI with an impossible n value. + n = n_max + # For n >= 2: overall_width = 2*overhang + (n-1)*spacing # Keep n fixed, try to find spacing and overhang such that overhang is in ideal range # Ideal overhang = 0.35 to 0.5 of spacing @@ -895,7 +912,24 @@ def _solve_layout(self, changed_field="width"): # Check if overhang is within valid range if overhang_use < o_min - 1e-6 or overhang_use > o_max + 1e-6: - show_warning(self, "Layout", "Cannot satisfy constraints with the selected number of girders.") + show_warning( + self, + "Layout", + "Cannot satisfy constraints with the selected number of girders. " + f"For the current overall width ({overall_width:.2f} m) and minimum spacing ({spacing_min:.2f} m), " + f"maximum feasible girders is {n_max}.", + ) + # Revert to a safe fallback (previous value if available, else 2) + fallback_n = int(getattr(self, "_last_girders_value", 2) or 2) + fallback_n = max(2, min(fallback_n, n_max)) + pick = self._pick_n_for_spacing(overall_width, spacing_use, spacing_bounds) + if pick: + _, fallback_n2, spacing_f, overhang_f = pick + fallback_n = max(2, min(int(fallback_n2), n_max)) + self._set_layout_fields(spacing_f, overhang_f, fallback_n) + else: + self._set_layout_fields(self._clamp(spacing_use, *spacing_bounds), self._clamp(max(0.0, overhang_use), o_min, o_max), fallback_n) + self._update_overall_bridge_width_display() return self._set_layout_fields(spacing_use, overhang_use, n) @@ -904,6 +938,8 @@ def _solve_layout(self, changed_field="width"): reason_parts.append(f"spacing {old_spacing:.2f}→{spacing_use:.2f}") if abs(overhang_use - old_overhang) > 1e-6: reason_parts.append(f"overhang {old_overhang:.2f}→{overhang_use:.2f}") + if girders_input is not None and n != girders_input: + reason_parts.append(f"girders {girders_input}→{n}") # Check if overhang exceeds girder spacing and show warning warning_msg = None diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 6a2465d11..4d4e620f9 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -2,7 +2,7 @@ import sys import os import math -import sqlite3 +import json from PySide6.QtWidgets import ( QApplication, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QComboBox, QScrollArea, QLabel, QLineEdit, QGroupBox, QSizePolicy, QMessageBox, QDialog, QCheckBox, QFrame, @@ -34,6 +34,7 @@ def __init__(self, backend, parent): self.backend = backend self.input_widget = None self.structure_type_combo = None + self.structure_note = None self.project_location_combo = None self.custom_location_input = None self.include_median_combo = None @@ -47,6 +48,15 @@ def __init__(self, backend, parent): self.scroll_area = None self.is_locked = False + # Saved session snapshots. + self._basic_inputs_saved_list: list[dict] = [] + self._additional_inputs_saved_list: list[dict] = [] + self._final_inputs_saved_list: list[dict] = [] + + # Bottom action buttons (wired in build_left_panel). + self.save_input_btn = None + self.design_btn = None + self.setStyleSheet("background: transparent;") self.main_layout = QHBoxLayout(self) self.main_layout.setContentsMargins(0, 0, 0, 0) @@ -54,6 +64,13 @@ def __init__(self, backend, parent): self.left_container = QWidget() + # Get input fields from backend + # Prime backend defaults once per session (safe no-op if not implemented). + try: + if hasattr(self.backend, "prime_defaults_from_definitions"): + self.backend.prime_defaults_from_definitions() + except Exception: + pass input_field_list = self.backend.input_values() self.build_left_panel(input_field_list) @@ -416,576 +433,11 @@ def build_left_panel(self, field_list): group_container_layout = QVBoxLayout(group_container) group_container_layout.setContentsMargins(0, 0, 0, 0) group_container_layout.setSpacing(12) - - - # === Type of Structure Box === - type_box = QGroupBox("Type of Structure") - type_box.setStyleSheet(""" - QGroupBox { - border: 1px solid #90AF13; - border-radius: 4px; - background-color: white; - padding: 8px; - margin-top: 12px; - font-size: 10px; - font-weight: bold; - color: #333; - } - QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - left: 8px; - padding: 0 4px; - margin-top: 4px; - background-color: white; - color: #333; - } - """) - type_box_layout = QVBoxLayout(type_box) - type_box_layout.setContentsMargins(8, 8, 8, 8) - type_box_layout.setSpacing(8) - - # Type of Structure field - type_row = QHBoxLayout() - type_field_label = QLabel("Type of Structure") - type_field_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - type_field_label.setMinimumWidth(110) - - self.structure_type_combo = NoScrollComboBox() - self.structure_type_combo.setObjectName(KEY_STRUCTURE_TYPE) - apply_field_style(self.structure_type_combo) - self.structure_type_combo.addItems(VALUES_STRUCTURE_TYPE) - - type_row.addWidget(type_field_label) - type_row.addWidget(self.structure_type_combo, 1) - type_box_layout.addLayout(type_row) - - self.structure_note = QLabel("*Other structures not included") - self.structure_note.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - self.structure_note.setVisible(False) - type_box_layout.addWidget(self.structure_note) - - self.structure_type_combo.currentTextChanged.connect(self.on_structure_type_changed) - group_container_layout.addWidget(type_box) - - # === Project Location Box === - location_box = QGroupBox() - location_box.setStyleSheet(""" - QGroupBox { - border: 1px solid #90AF13; - border-radius: 4px; - background-color: white; - padding: 8px; - margin-top: 12px; - } - """) - location_box_layout = QVBoxLayout(location_box) - location_box_layout.setContentsMargins(8, 8, 8, 8) - location_box_layout.setSpacing(8) - - loc_header = QHBoxLayout() - loc_title = QLabel("Project Location*") - loc_title.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - loc_title.setMinimumWidth(110) - loc_header.addWidget(loc_title) - - add_here_btn = QPushButton("Add Here") - add_here_btn.setCursor(Qt.CursorShape.PointingHandCursor) - add_here_btn.setStyleSheet(""" - QPushButton { - background-color: #90AF13; - color: white; - font-weight: bold; - border: none; - border-radius: 4px; - padding: 8px 20px; - font-size: 11px; - min-width: 80px; - } - QPushButton:hover { - background-color: #7a9a12; - } - QPushButton:disabled{ - background: #D0D0D0; - color: #666; - } - - """) - add_here_btn.clicked.connect(self.show_project_location_dialog) - loc_header.addWidget(add_here_btn, 1) - location_box_layout.addLayout(loc_header) - group_container_layout.addWidget(location_box) - - # === Superstructure Section (Contains Everything) === - structure_group = QGroupBox() - structure_group.setStyleSheet(""" - QGroupBox { - border: 1px solid #90AF13; - border-radius: 5px; - margin-top: 0px; - padding-top: 5px; - background-color: white; - } - """) - structure_layout = QVBoxLayout() - structure_layout.setContentsMargins(10, 10, 10, 10) - structure_layout.setSpacing(10) - - # Header with title and collapse icon - struct_header = QHBoxLayout() - struct_title = QLabel("Superstructure") - struct_title.setStyleSheet("font-size: 13px; font-weight: bold; color: #333;") - struct_header.addWidget(struct_title) - struct_header.addStretch() - - # Collapse/expand toggle using SVG icon - toggle_btn = QPushButton() - toggle_btn.setCursor(Qt.CursorShape.PointingHandCursor) - toggle_btn.setCheckable(True) - toggle_btn.setChecked(True) - toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg")) - toggle_btn.setIconSize(QSize(20, 20)) - toggle_btn.setStyleSheet(""" - QPushButton { - background: transparent; - border: none; - padding: 2px; - } - QPushButton:hover { - background: transparent; - } - QPushButton:pressed { - background: transparent; - } - """) - struct_header.addWidget(toggle_btn) - - structure_layout.addLayout(struct_header) - - # body widget that contains everything inside the Superstructure and can be hidden - structure_body = QFrame() - structure_body.setFrameShape(QFrame.NoFrame) - structure_body_layout = QVBoxLayout(structure_body) - structure_body_layout.setContentsMargins(0, 0, 0, 0) - structure_body_layout.setSpacing(10) - structure_body.setVisible(True) - structure_layout.addWidget(structure_body) - - def _toggle_structure(checked): - # checked True means show body (open) - structure_body.setVisible(checked) - toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg" if checked else ":/vectors/arrow_down_light.svg")) - - toggle_btn.toggled.connect(_toggle_structure) - - # === Geometric Details Box === - geo_box = QGroupBox("Geometric Details") - geo_box.setStyleSheet(""" - QGroupBox { - border: 1px solid #90AF13; - border-radius: 4px; - background-color: white; - padding: 8px; - margin-top: 12px; - font-size: 10px; - font-weight: bold; - color: #333; - } - QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - left: 8px; - padding: 0 4px; - margin-top: 4px; - background-color: white; - color: #333; - } - """) - geo_box_layout = QVBoxLayout(geo_box) - geo_box_layout.setContentsMargins(8, 8, 8, 8) - geo_box_layout.setSpacing(8) - - # Span - span_row = QHBoxLayout() - span_label = QLabel("Span*") - span_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - span_label.setMinimumWidth(110) - self.span_input = QLineEdit() - self.span_input.setObjectName(KEY_SPAN) - apply_field_style(self.span_input) - self.span_input.setValidator(QDoubleValidator(SPAN_MIN, SPAN_MAX, 2)) - self.span_input.setPlaceholderText(f"{SPAN_MIN}-{SPAN_MAX} m") - self.span_input.textChanged.connect(self.emit_value_changed) - span_row.addWidget(span_label) - span_row.addWidget(self.span_input, 1) - geo_box_layout.addLayout(span_row) - - # Carriageway Width - carriageway_row = QHBoxLayout() - carriageway_label = QLabel("Carriageway Width*") - carriageway_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - carriageway_label.setMinimumWidth(110) - self.carriageway_input = QLineEdit() - self.carriageway_input.setObjectName(KEY_CARRIAGEWAY_WIDTH) - apply_field_style(self.carriageway_input) - self.carriageway_input.setValidator(QDoubleValidator(0.0, 100.0, 2)) - self.carriageway_input.editingFinished.connect(self.validate_carriageway_width) - self.carriageway_input.textChanged.connect(self.emit_value_changed) - carriageway_row.addWidget(carriageway_label) - carriageway_row.addWidget(self.carriageway_input, 1) - geo_box_layout.addLayout(carriageway_row) - - # Include Median option - median_row = QHBoxLayout() - median_row.setContentsMargins(0, 0, 0, 0) - median_row.setSpacing(8) - - median_label = QLabel("Include Median") - median_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - median_label.setMinimumWidth(110) - median_row.addWidget(median_label) - - self.include_median_combo = NoScrollComboBox() - self.include_median_combo.addItems(["No", "Yes"]) - self.include_median_combo.setCurrentIndex(0) - self.include_median_combo.setObjectName(KEY_INCLUDE_MEDIAN) - apply_field_style(self.include_median_combo) - #self.include_median_combo.setMaximumWidth(110) - self.include_median_combo.currentTextChanged.connect(self.on_include_median_changed) - self.include_median_combo.currentTextChanged.connect(self.emit_value_changed) - median_row.addWidget(self.include_median_combo, 1) - median_row.addStretch() - geo_box_layout.addLayout(median_row) - self._update_carriageway_placeholder() - - # Footpath - footpath_row = QHBoxLayout() - footpath_label = QLabel("Footpath") - footpath_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - footpath_label.setMinimumWidth(110) - self.footpath_combo = NoScrollComboBox() - self.footpath_combo.setObjectName("footpath") - apply_field_style(self.footpath_combo) - self.footpath_combo.addItems(VALUES_FOOTPATH) - self.footpath_combo.setCurrentIndex(0) - self.footpath_combo.currentTextChanged.connect(self.on_footpath_changed) - self.footpath_combo.currentTextChanged.connect(self.emit_value_changed) - footpath_row.addWidget(footpath_label) - footpath_row.addWidget(self.footpath_combo, 1) - geo_box_layout.addLayout(footpath_row) - - # Skew Angle - skew_row = QHBoxLayout() - skew_label = QLabel("Skew Angle") - skew_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - skew_label.setMinimumWidth(110) - self.skew_input = QLineEdit() - self.skew_input.setObjectName(KEY_SKEW_ANGLE) - apply_field_style(self.skew_input) - self.skew_input.setValidator(QDoubleValidator(SKEW_ANGLE_MIN, SKEW_ANGLE_MAX, 1)) - #self.skew_input.setText(f"{str(SKEW_ANGLE_DEFAULT)}°") - self.skew_input.setPlaceholderText(f"{SKEW_ANGLE_MIN} - {SKEW_ANGLE_MAX}°") - self.skew_input.textChanged.connect(self.emit_value_changed) - skew_row.addWidget(skew_label) - skew_row.addWidget(self.skew_input, 1) - geo_box_layout.addLayout(skew_row) - - # Additional Geometry (inside Geometric Details) - add_geo_row = QHBoxLayout() - add_geo_label = QLabel("Additional Geometry") - add_geo_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - add_geo_label.setMinimumWidth(110) - add_geo_row.addWidget(add_geo_label) - - modify_geo_btn = QPushButton("Modify Here") - modify_geo_btn.setCursor(Qt.CursorShape.PointingHandCursor) - modify_geo_btn.setStyleSheet(""" - QPushButton { - background-color: #90AF13; - color: white; - font-weight: bold; - border: none; - border-radius: 4px; - padding: 8px 20px; - font-size: 11px; - min-width: 80px; - } - QPushButton:hover { - background-color: #7a9a12; - } - QPushButton:disabled{ - background: #D0D0D0; - color: #666; - } - """) - modify_geo_btn.clicked.connect(self.show_additional_inputs) - add_geo_row.addWidget(modify_geo_btn, 1) - geo_box_layout.addLayout(add_geo_row) - - structure_body_layout.addWidget(geo_box) - - # === Material Inputs Box === - material_box = QGroupBox("Material Inputs") - material_box.setStyleSheet(""" - QGroupBox { - border: 1px solid #90AF13; - border-radius: 4px; - background-color: white; - padding: 8px; - margin-top: 12px; - font-size: 10px; - font-weight: bold; - color: #333; - } - QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - left: 8px; - padding: 0 4px; - margin-top: 4px; - background-color: white; - color: #333; - } - """) - material_box_layout = QVBoxLayout(material_box) - material_box_layout.setContentsMargins(8, 8, 8, 8) - material_box_layout.setSpacing(8) - # Girder - girder_row = QHBoxLayout() - girder_label = QLabel("Girder") - girder_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - girder_label.setMinimumWidth(110) - self.girder_combo = NoScrollComboBox() - self.girder_combo.setObjectName(KEY_GIRDER) - apply_field_style(self.girder_combo) - self.girder_combo.addItems(VALUES_MATERIAL) - girder_row.addWidget(girder_label) - girder_row.addWidget(self.girder_combo, 1) - material_box_layout.addLayout(girder_row) - - # Cross Bracing - cross_bracing_row = QHBoxLayout() - cross_bracing_label = QLabel("Cross Bracing") - cross_bracing_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - cross_bracing_label.setMinimumWidth(110) - self.cross_bracing_combo = NoScrollComboBox() - self.cross_bracing_combo.setObjectName(KEY_CROSS_BRACING) - apply_field_style(self.cross_bracing_combo) - self.cross_bracing_combo.addItems(VALUES_MATERIAL) - cross_bracing_row.addWidget(cross_bracing_label) - cross_bracing_row.addWidget(self.cross_bracing_combo, 1) - material_box_layout.addLayout(cross_bracing_row) - - # End Diaphragm - end_diaphragm_row = QHBoxLayout() - end_diaphragm_label = QLabel("End Diaphragm") - end_diaphragm_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - end_diaphragm_label.setMinimumWidth(110) - self.end_diaphragm_combo = NoScrollComboBox() - self.end_diaphragm_combo.setObjectName(KEY_END_DIAPHRAGM) - apply_field_style(self.end_diaphragm_combo) - self.end_diaphragm_combo.addItems(VALUES_MATERIAL) - end_diaphragm_row.addWidget(end_diaphragm_label) - end_diaphragm_row.addWidget(self.end_diaphragm_combo, 1) - material_box_layout.addLayout(end_diaphragm_row) - - # Deck - deck_row = QHBoxLayout() - deck_label = QLabel("Deck") - deck_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - deck_label.setMinimumWidth(110) - self.deck_combo = NoScrollComboBox() - self.deck_combo.setObjectName(KEY_DECK_CONCRETE_GRADE_BASIC) - apply_field_style(self.deck_combo) - self.deck_combo.addItems(VALUES_DECK_CONCRETE_GRADE) - self.deck_combo.setCurrentText("M 25") - deck_row.addWidget(deck_label) - deck_row.addWidget(self.deck_combo, 1) - material_box_layout.addLayout(deck_row) - - # Material Properties header with button - mat_prop_header = QHBoxLayout() - mat_prop_title = QLabel("Properties") - mat_prop_title.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - mat_prop_title.setMinimumWidth(110) - mat_prop_header.addWidget(mat_prop_title) - - modify_mat_btn = QPushButton("Modify Here") - modify_mat_btn.setCursor(Qt.CursorShape.PointingHandCursor) - modify_mat_btn.setStyleSheet(""" - QPushButton { - background-color: #90AF13; - color: white; - font-weight: bold; - border: none; - border-radius: 4px; - padding: 8px 20px; - font-size: 11px; - min-width: 80px; - } - QPushButton:hover { - background-color: #7a9a12; - } - QPushButton:disabled{ - background: #f1f1f1; - color: #666; - } - """) - modify_mat_btn.clicked.connect(self.show_material_properties_dialog) - mat_prop_header.addWidget(modify_mat_btn, 1) - material_box_layout.addLayout(mat_prop_header) - - structure_body_layout.addWidget(material_box) - - # Close the Superstructure section - structure_group.setLayout(structure_layout) - group_container_layout.addWidget(structure_group) - - # === Substructure Section (empty body for now) === - sub_group = QGroupBox() - sub_group.setStyleSheet(""" - QGroupBox { - border: 1px solid #90AF13; - border-radius: 5px; - margin-top: 8px; - padding-top: 5px; - background-color: white; - } - """) - sub_layout = QVBoxLayout() - sub_layout.setContentsMargins(10, 10, 10, 10) - sub_layout.setSpacing(8) - - # Header with toggle - sub_header = QHBoxLayout() - sub_title = QLabel("Substructure") - sub_title.setStyleSheet("font-size: 13px; font-weight: bold; color: #333;") - sub_header.addWidget(sub_title) - sub_header.addStretch() - - sub_toggle = QPushButton() - sub_toggle.setCursor(Qt.CursorShape.PointingHandCursor) - sub_toggle.setCheckable(True) - sub_toggle.setChecked(True) - sub_toggle.setIcon(QIcon(":/vectors/arrow_up_light.svg")) - sub_toggle.setIconSize(QSize(20, 20)) - sub_toggle.setStyleSheet(""" - QPushButton { - background: transparent; - border: none; - padding: 2px; - } - QPushButton:hover { - background: transparent; - } - QPushButton:pressed { - background: transparent; - } - """) - sub_header.addWidget(sub_toggle) - sub_layout.addLayout(sub_header) - - sub_body = QFrame() - sub_body.setFrameShape(QFrame.NoFrame) - sub_body_layout = QVBoxLayout(sub_body) - sub_body_layout.setContentsMargins(0,0,0,0) - sub_body_layout.setSpacing(6) - sub_body.setVisible(True) - sub_layout.addWidget(sub_body) + self.section_contexts = {} + self.container_layouts = {} - def _toggle_sub(checked): - sub_body.setVisible(checked) - sub_toggle.setIcon(QIcon(":/vectors/arrow_up_light.svg" if checked else ":/vectors/arrow_down_light.svg")) - - sub_toggle.toggled.connect(_toggle_sub) - - sub_group.setLayout(sub_layout) - group_container_layout.addWidget(sub_group) + self._build_basic_inputs(field_list, group_container_layout) group_container_layout.addStretch() scroll_area.setWidget(group_container) @@ -1002,10 +454,22 @@ def _toggle_sub(checked): save_input_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) btn_button_layout.addWidget(save_input_btn) + self.save_input_btn = save_input_btn + try: + self.save_input_btn.clicked.connect(self._on_save_input_clicked) + except Exception: + pass + design_btn = DockCustomButton("Design", ":/vectors/design.svg") design_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) btn_button_layout.addWidget(design_btn) + self.design_btn = design_btn + try: + self.design_btn.clicked.connect(self._on_design_clicked) + except Exception: + pass + panel_layout.addLayout(btn_button_layout) # Horizontal scroll area @@ -1043,17 +507,231 @@ def _toggle_sub(checked): left_layout.addWidget(h_scroll_area) self._apply_lock_state() + + # ----------------------------- + # Input serialization helpers + # ----------------------------- + def _sync_basic_widgets_to_backend(self) -> None: + """Push the latest widget values into backend state. + + Rationale: clicking Design can happen while a QLineEdit still has focus, + so editingFinished may not have fired yet. + """ + if not self.backend or not hasattr(self.backend, "set_input_value"): + return + + # Prefer definition order from backend if available. + keys = [] + try: + if hasattr(self.backend, "list_input_keys"): + keys = list(self.backend.list_input_keys() or []) + except Exception: + keys = [] + + # Fallback: use all named widgets under the input panel. + if not keys and getattr(self, "left_panel", None) is not None: + try: + for widget in self.left_panel.findChildren((QLineEdit, QComboBox)): + name = (widget.objectName() or "").strip() + if name: + keys.append(name) + except Exception: + return + + for key in keys: + if not isinstance(key, str) or not key: + continue + widget = None + try: + widget = self.left_panel.findChild(QWidget, key) if getattr(self, "left_panel", None) is not None else None + except Exception: + widget = None + + try: + if isinstance(widget, QLineEdit): + self.backend.set_input_value(key, widget.text().strip()) + elif isinstance(widget, QComboBox): + self.backend.set_input_value(key, widget.currentText()) + except Exception: + continue + + def _collect_basic_inputs_list(self) -> list[dict]: + self._sync_basic_widgets_to_backend() + try: + if hasattr(self.backend, "export_basic_inputs_as_list"): + return list(self.backend.export_basic_inputs_as_list(include_empty=False) or []) + except Exception: + pass + + # Fallback: best-effort build from backend dict. + values = {} + try: + if hasattr(self.backend, "get_input_values_dict"): + values = self.backend.get_input_values_dict(include_empty=False) or {} + except Exception: + values = {} + out: list[dict] = [] + for k, v in (values or {}).items(): + if v in (None, ""): + continue + out.append({k: v}) + return out + + def _collect_additional_inputs_snapshot(self) -> dict: + """Return the best available Additional Inputs payload. + + Priority: + 1) Live dialog (even if not yet saved), + 2) last saved dialog state from the session, + 3) empty. + """ + # 1) Live dialog (if open) + try: + if self.additional_inputs is not None and hasattr(self.additional_inputs, "section_properties_tab"): + tab = self.additional_inputs.section_properties_tab + if tab is not None and hasattr(tab, "save_properties"): + live = tab.save_properties() or {} + if isinstance(live, dict) and live: + return live + except Exception: + pass + + # 2) Last saved + saved = getattr(self, "_additional_inputs_saved_data", None) + return saved if isinstance(saved, dict) else {} + + def _collect_additional_inputs_list(self) -> list[dict]: + snapshot = self._collect_additional_inputs_snapshot() + if not isinstance(snapshot, dict) or not snapshot: + return [] + out: list[dict] = [] + # Keep order stable for downstream consumers. + for key in ("girder_details", "stiffener_details", "cross_bracing", "end_diaphragm"): + if key in snapshot: + out.append({key: snapshot.get(key)}) + # Include any unknown keys last. + for key, val in snapshot.items(): + if key in {"girder_details", "stiffener_details", "cross_bracing", "end_diaphragm"}: + continue + out.append({key: val}) + return out + + def _collect_final_inputs_list(self) -> list[dict]: + basic_list = self._collect_basic_inputs_list() + additional_list = self._collect_additional_inputs_list() + final_list = list(basic_list) + list(additional_list) + return final_list + + def _debug_dump_final_inputs(self, final_inputs: list[dict], max_chars: int = 12000) -> None: + """Developer-oriented dump of the merged inputs. + + Prints to stdout and (if available) appends to the GUI Logs dock. + Payload is truncated to avoid freezing the UI/terminal. + """ + try: + payload = json.dumps(final_inputs, indent=2, ensure_ascii=False, default=str) + except Exception: + payload = str(final_inputs) + + truncated = False + if isinstance(payload, str) and len(payload) > max_chars: + payload = payload[:max_chars] + f"\n... (truncated, total {len(payload)} chars)" + truncated = True + + header = ( + f"[OsdagBridge] final_design_inputs prepared: {len(final_inputs)} items" + + (" (truncated)" if truncated else "") + ) + + try: + print(header) + print(payload) + except Exception: + pass + + # If the parent page has a Logs dock, mirror the dump there too. + try: + log_widget = getattr(self.parent, "textEdit", None) + if log_widget is not None and hasattr(log_widget, "append"): + log_widget.append(header) + # Keep the GUI log smaller than terminal. + gui_payload = payload if len(payload) <= 4000 else payload[:4000] + "\n... (truncated for GUI log)" + log_widget.append(gui_payload) + except Exception: + pass + + # ----------------------------- + # Button handlers + # ----------------------------- + def _on_save_input_clicked(self) -> None: + self._basic_inputs_saved_list = self._collect_basic_inputs_list() + self._additional_inputs_saved_list = self._collect_additional_inputs_list() + self._final_inputs_saved_list = list(self._basic_inputs_saved_list) + list(self._additional_inputs_saved_list) + + # Persist to backend for later export (csv/osi) or design execution. + try: + if hasattr(self.backend, "set_input_value"): + self.backend.set_input_value("basic_inputs_list", self._basic_inputs_saved_list) + self.backend.set_input_value("additional_inputs_list", self._additional_inputs_saved_list) + if hasattr(self.backend, "set_final_design_inputs"): + self.backend.set_final_design_inputs(self._final_inputs_saved_list) + except Exception: + pass + + QMessageBox.information( + self, + "Inputs Saved", + "Basic + Additional inputs saved for this session.", + ) + + def _on_design_clicked(self) -> None: + self._final_inputs_saved_list = self._collect_final_inputs_list() + + try: + if hasattr(self.backend, "set_final_design_inputs"): + self.backend.set_final_design_inputs(self._final_inputs_saved_list) + elif hasattr(self.backend, "set_input_value"): + self.backend.set_input_value("final_design_inputs", self._final_inputs_saved_list) + except Exception: + pass + + QMessageBox.information( + self, + "Design Input Ready", + "Final merged input payload is prepared (Basic + Additional).", + ) + + # Option 2: print merged inputs for quick verification. + self._debug_dump_final_inputs(self._final_inputs_saved_list) def show_additional_inputs(self): """Show Additional Inputs dialog""" footpath_value = self.footpath_combo.currentText() if self.footpath_combo else "None" carriageway_width = self._get_effective_carriageway_width() - + + # Lazily create the in-session storage for Additional Inputs. + if not hasattr(self, "_additional_inputs_saved_data"): + self._additional_inputs_saved_data = {} + self.additional_inputs = AdditionalInputs(footpath_value, carriageway_width) - + self.additional_inputs_widget = self.additional_inputs + + # Restore previously saved dialog state (includes stiffener details). + if isinstance(getattr(self, "_additional_inputs_saved_data", None), dict) and self._additional_inputs_saved_data: + try: + self.additional_inputs.set_properties_data(self._additional_inputs_saved_data) + except Exception: + pass + + # Capture state when dialog closes. + try: + self.additional_inputs.finished.connect(self._handle_additional_inputs_closed) + except Exception: + pass + # Connect to accept signal to handle save - result = self.additional_inputs.exec() + result = self.additional_inputs.exec_() # If user clicked Save (accepted), get values and trigger update if result == AdditionalInputs.Accepted: @@ -1082,9 +760,483 @@ def _set_additional_inputs_enabled(self, enabled): self.additional_inputs_widget.setEnabled(enabled) def _handle_additional_inputs_closed(self): + # Persist the last saved Additional Inputs data for the session. + try: + if self.additional_inputs is not None and hasattr(self.additional_inputs, "get_saved_data"): + saved = self.additional_inputs.get_saved_data() + if isinstance(saved, dict) and saved: + self._additional_inputs_saved_data = saved + except Exception: + pass self.additional_inputs = None self.additional_inputs_widget = None + def _build_basic_inputs(self, field_definitions, root_layout): + current_section_id = None + for definition in field_definitions: + key, label, field_type, values, required, validator, metadata = self._normalize_definition(definition) + if field_type == TYPE_MODULE: + continue + if field_type == TYPE_TITLE: + section_id = key or label + section_context = self._create_section_context(section_id, label, metadata, root_layout) + current_section_id = section_context["id"] + continue + if current_section_id is None: + continue + section_context = self.section_contexts.get(current_section_id) + if not section_context: + continue + self._create_field_row(section_context, key, label, field_type, values, validator, metadata) + + self._finalize_section_contexts() + self._update_carriageway_placeholder() + + def _normalize_definition(self, definition): + if len(definition) == 6: + return (*definition, {}) + return definition + + def _create_section_context(self, section_id, title, metadata, root_layout): + container_key = (metadata or {}).get("container", "main") + parent_layout = self._get_container_layout(container_key, root_layout, metadata) + + show_title = metadata.get("show_group_title", True) if metadata else True + group_title = title if show_title and title else "" + group_box = QGroupBox(group_title) if group_title else QGroupBox() + group_box.setStyleSheet(self._section_groupbox_style()) + + layout = QVBoxLayout(group_box) + layout.setContentsMargins(8, 8, 8, 8) + layout.setSpacing(8) + + if metadata and metadata.get("custom_content") == "project_location": + self._add_project_location_controls(layout, metadata) + + parent_layout.addWidget(group_box) + context = { + "id": section_id, + "layout": layout, + "metadata": metadata or {}, + "group_box": group_box, + } + self.section_contexts[section_id] = context + return context + + def _section_groupbox_style(self): + return ( + "QGroupBox {\n" + " border: 1px solid #90AF13;\n" + " border-radius: 4px;\n" + " background-color: white;\n" + " padding: 8px;\n" + " margin-top: 12px;\n" + " font-size: 10px;\n" + " font-weight: bold;\n" + " color: #333;\n" + "}\n" + "QGroupBox::title {\n" + " subcontrol-origin: margin;\n" + " subcontrol-position: top left;\n" + " left: 8px;\n" + " padding: 0 4px;\n" + " margin-top: 4px;\n" + " background-color: white;\n" + " color: #333;\n" + "}" + ) + + def _get_container_layout(self, container_key, root_layout, metadata=None): + if not container_key or container_key == "main": + return root_layout + if container_key in self.container_layouts: + return self.container_layouts[container_key] + body_layout = self._create_container_group(container_key, root_layout, metadata) + self.container_layouts[container_key] = body_layout + return body_layout + + def _container_display_name(self, container_key, metadata): + if metadata: + custom = metadata.get("container_label") or metadata.get("container_title") + if custom: + return custom + fallback = container_key or "Section" + return fallback.replace("_", " ").title() + + def _create_container_group(self, container_key, root_layout, metadata=None): + display_name = self._container_display_name(container_key, metadata or {}) + group = QGroupBox() + group.setStyleSheet( + "QGroupBox {\n" + " border: 1px solid #90AF13;\n" + " border-radius: 5px;\n" + " margin-top: 0px;\n" + " padding-top: 5px;\n" + " background-color: white;\n" + "}\n" + ) + container_layout = QVBoxLayout() + container_layout.setContentsMargins(10, 10, 10, 10) + container_layout.setSpacing(10) + + header = QHBoxLayout() + title_label = QLabel(display_name) + title_label.setStyleSheet("font-size: 13px; font-weight: bold; color: #333;") + header.addWidget(title_label) + header.addStretch() + + toggle_btn = QPushButton() + toggle_btn.setCursor(Qt.CursorShape.PointingHandCursor) + toggle_btn.setCheckable(True) + toggle_btn.setChecked(True) + toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg")) + toggle_btn.setIconSize(QSize(20, 20)) + toggle_btn.setStyleSheet( + "QPushButton {\n" + " background: transparent;\n" + " border: none;\n" + " padding: 2px;\n" + "}\n" + "QPushButton:hover {\n" + " background: transparent;\n" + "}\n" + "QPushButton:pressed {\n" + " background: transparent;\n" + "}" + ) + header.addWidget(toggle_btn) + container_layout.addLayout(header) + + container_body = QFrame() + container_body.setFrameShape(QFrame.NoFrame) + body_layout = QVBoxLayout(container_body) + body_layout.setContentsMargins(0, 0, 0, 0) + body_layout.setSpacing(10) + container_body.setVisible(True) + container_layout.addWidget(container_body) + + def _toggle(checked): + container_body.setVisible(checked) + icon = ":/vectors/arrow_up_light.svg" if checked else ":/vectors/arrow_down_light.svg" + toggle_btn.setIcon(QIcon(icon)) + + toggle_btn.toggled.connect(_toggle) + + group.setLayout(container_layout) + root_layout.addWidget(group) + return body_layout + + def _add_project_location_controls(self, layout, metadata): + label_text = metadata.get("header_label") or "Project Location*" + button_rows = metadata.get("button_rows") + if button_rows: + for row_entry in button_rows: + row_config = self._prepare_button_row_config(row_entry, {"label": label_text}) + if row_config: + self._add_button_row(layout, row_config) + return + + fallback_row = self._prepare_button_row_config("project_location", {"label": label_text}) + self._add_button_row(layout, fallback_row) + + def _section_label_style(self): + return ( + "QLabel {\n" + " color: #000000;\n" + " font-size: 12px;\n" + " background: transparent;\n" + "}" + ) + + def _default_action_button_style(self): + return ( + "QPushButton {\n" + " background-color: #90AF13;\n" + " color: white;\n" + " font-weight: bold;\n" + " border: none;\n" + " border-radius: 4px;\n" + " padding: 8px 20px;\n" + " font-size: 11px;\n" + " min-width: 80px;\n" + "}\n" + "QPushButton:hover {\n" + " background-color: #7a9a12;\n" + "}\n" + "QPushButton:disabled{\n" + " background: #D0D0D0;\n" + " color: #666;\n" + "}" + ) + + def _default_row_config(self, row_type): + mapping = { + "project_location": { + "label": "Project Location*", + "buttons": [ + {"text": "Add Here", "action": "show_project_location_dialog"}, + ], + }, + "additional_geometry": { + "label": "Additional Geometry", + "buttons": [ + {"text": "Modify Here", "action": "show_additional_inputs"}, + ], + }, + "material_properties": { + "label": "Properties", + "buttons": [ + {"text": "Modify Here", "action": "show_material_properties_dialog"}, + ], + }, + } + return mapping.get(row_type, {}) + + def _prepare_button_row_config(self, config_entry, fallback_defaults=None): + fallback_defaults = fallback_defaults or {} + if isinstance(config_entry, str): + config = {"type": config_entry} + else: + config = dict(config_entry or {}) + + row_type = config.get("type") + defaults = self._default_row_config(row_type) + + resolved = {} + resolved.update(defaults) + resolved.update(fallback_defaults) + resolved.update(config) + + if not resolved.get("buttons"): + extra_defaults = self._default_row_config(resolved.get("type")) + if extra_defaults: + resolved.setdefault("buttons", extra_defaults.get("buttons")) + resolved.setdefault("label", extra_defaults.get("label")) + + return resolved if resolved.get("buttons") else None + + def _add_button_row(self, layout, config): + if not config: + return + + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(8) + + label_text = config.get("label") + if label_text: + field_label = QLabel(label_text) + field_label.setStyleSheet(self._section_label_style()) + field_label.setMinimumWidth(config.get("label_min_width", 110)) + row.addWidget(field_label) + + buttons = config.get("buttons", []) + for button_config in buttons: + button = self._create_action_button(button_config) + stretch = button_config.get("stretch", 1 if len(buttons) == 1 else 0) + row.addWidget(button, stretch) + + if config.get("add_stretch", True): + row.addStretch() + + layout.addLayout(row) + + def _create_action_button(self, config): + button = QPushButton(config.get("text", "Action")) + button.setCursor(Qt.CursorShape.PointingHandCursor) + if config.get("size_policy") == "fixed": + button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + else: + button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + + icon_path = config.get("icon") + if icon_path: + button.setIcon(QIcon(icon_path)) + icon_size = config.get("icon_size") + if isinstance(icon_size, (list, tuple)) and len(icon_size) == 2: + button.setIconSize(QSize(icon_size[0], icon_size[1])) + + style = config.get("style") or self._default_action_button_style() + button.setStyleSheet(style) + + tooltip = config.get("tooltip") + if tooltip: + button.setToolTip(tooltip) + + action_name = config.get("action") + callback = getattr(self, action_name, None) if action_name else None + if callable(callback): + button.clicked.connect(callback) + else: + button.setEnabled(False) + + return button + + def _create_field_row(self, section_context, key, label, field_type, values, validator, metadata): + widget = self._create_input_widget(key, field_type, values, validator, metadata) + if widget is None: + return + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(8) + display_label = (metadata or {}).get("label") if metadata else None + field_label = QLabel(display_label or label) + field_label.setStyleSheet(self._section_label_style()) + field_label.setMinimumWidth(110) + row.addWidget(field_label) + row.addWidget(widget, 1) + if metadata.get("add_stretch"): + row.addStretch() + section_context["layout"].addLayout(row) + + def _create_input_widget(self, key, field_type, values, validator, metadata): + key_name = key if isinstance(key, str) else None + + if field_type == TYPE_COMBOBOX: + widget = NoScrollComboBox() + apply_field_style(widget) + if values: + widget.addItems(values) + + # Prefer backend-stored value, else metadata default. + try: + backend_value = self.backend.get_input_value(key_name) if key_name and hasattr(self.backend, "get_input_value") else None + except Exception: + backend_value = None + + default_value = (metadata or {}).get("default") + + init_value = backend_value if backend_value not in (None, "") else default_value + if init_value not in (None, ""): + idx = widget.findText(str(init_value)) + if idx >= 0: + widget.setCurrentIndex(idx) + + # Persist changes back into backend. + if key_name and hasattr(widget, "currentTextChanged"): + try: + widget.currentTextChanged.connect(lambda text, k=key_name: self._push_backend_value(k, text)) + except Exception: + pass + elif field_type == TYPE_TEXTBOX: + widget = QLineEdit() + apply_field_style(widget) + validator_instance = self.get_validator(validator) + if validator_instance: + widget.setValidator(validator_instance) + + # Restore value from backend if present. + try: + backend_value = self.backend.get_input_value(key_name) if key_name and hasattr(self.backend, "get_input_value") else None + except Exception: + backend_value = None + + if backend_value not in (None, ""): + widget.setText(str(backend_value)) + + # Persist changes back into backend. + if key_name: + try: + widget.editingFinished.connect(lambda k=key_name, w=widget: self._push_backend_value(k, w.text())) + except Exception: + pass + else: + return None + + if key_name: + widget.setObjectName(key_name) + self._register_input_widget(key_name, widget) + self._apply_field_specific_config(key_name, widget, metadata or {}) + return widget + + def _push_backend_value(self, key: str, value): + if not key: + return + if not self.backend or not hasattr(self.backend, "set_input_value"): + return + try: + self.backend.set_input_value(key, value) + except Exception: + pass + + def _register_input_widget(self, key, widget): + if key == KEY_STRUCTURE_TYPE: + self.structure_type_combo = widget + elif key == KEY_SPAN: + self.span_input = widget + elif key == KEY_CARRIAGEWAY_WIDTH: + self.carriageway_input = widget + elif key == KEY_INCLUDE_MEDIAN: + self.include_median_combo = widget + elif key == KEY_FOOTPATH: + self.footpath_combo = widget + elif key == KEY_SKEW_ANGLE: + self.skew_input = widget + elif key == KEY_GIRDER: + self.girder_combo = widget + elif key == KEY_CROSS_BRACING: + self.cross_bracing_combo = widget + elif key == KEY_END_DIAPHRAGM: + self.end_diaphragm_combo = widget + elif key == KEY_DECK_CONCRETE_GRADE_BASIC: + self.deck_combo = widget + + def _apply_field_specific_config(self, key, widget, metadata): + if not key or widget is None: + return + if key == KEY_STRUCTURE_TYPE and hasattr(widget, "currentTextChanged"): + widget.currentTextChanged.connect(self.on_structure_type_changed) + elif key == KEY_SPAN and isinstance(widget, QLineEdit): + widget.setValidator(QDoubleValidator(SPAN_MIN, SPAN_MAX, 2)) + widget.setPlaceholderText(f"{SPAN_MIN}-{SPAN_MAX} m") + elif key == KEY_CARRIAGEWAY_WIDTH and isinstance(widget, QLineEdit): + widget.setValidator(QDoubleValidator(0.0, 100.0, 2)) + widget.editingFinished.connect(self.validate_carriageway_width) + elif key == KEY_INCLUDE_MEDIAN and hasattr(widget, "currentTextChanged"): + widget.currentTextChanged.connect(self.on_include_median_changed) + default_value = metadata.get("default") + if default_value: + idx = widget.findText(default_value) + if idx >= 0: + widget.setCurrentIndex(idx) + elif key == KEY_FOOTPATH and hasattr(widget, "currentTextChanged"): + widget.currentTextChanged.connect(self.on_footpath_changed) + default_value = metadata.get("default") + if default_value: + idx = widget.findText(default_value) + if idx >= 0: + widget.setCurrentIndex(idx) + elif key == KEY_SKEW_ANGLE and isinstance(widget, QLineEdit): + widget.setValidator(QDoubleValidator(SKEW_ANGLE_MIN, SKEW_ANGLE_MAX, 1)) + widget.setPlaceholderText(f"{SKEW_ANGLE_MIN} - {SKEW_ANGLE_MAX}°") + elif key == KEY_DECK_CONCRETE_GRADE_BASIC and hasattr(widget, "findText"): + default_value = metadata.get("default") + if default_value: + idx = widget.findText(default_value) + if idx >= 0: + widget.setCurrentIndex(idx) + + def _finalize_section_contexts(self): + for context in self.section_contexts.values(): + metadata = context.get("metadata", {}) + note_config = metadata.get("post_note") + if note_config: + self._add_section_note(context, note_config) + + for row_entry in metadata.get("post_rows", []): + row_config = self._prepare_button_row_config(row_entry) + if row_config: + self._add_button_row(context["layout"], row_config) + + def _add_section_note(self, context, note_config): + note_label = QLabel(note_config.get("text", "")) + note_label.setStyleSheet(self._section_label_style()) + note_label.setVisible(False) + context["layout"].addWidget(note_label) + attr_name = note_config.get("attr") + if attr_name: + setattr(self, attr_name, note_label) + def on_footpath_changed(self, footpath_value): """Update additional inputs when footpath changes""" if self.additional_inputs and self.additional_inputs.isVisible(): diff --git a/src/osdagbridge/desktop/ui/docks/output_dock.py b/src/osdagbridge/desktop/ui/docks/output_dock.py index b678dc409..9ec492fc6 100644 --- a/src/osdagbridge/desktop/ui/docks/output_dock.py +++ b/src/osdagbridge/desktop/ui/docks/output_dock.py @@ -1,11 +1,12 @@ from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QLabel, QSizePolicy, - QPushButton, QGroupBox, QCheckBox, QScrollArea, QFrame, QComboBox + QPushButton, QGroupBox, QCheckBox, QScrollArea, QFrame, QComboBox, QLineEdit ) from PySide6.QtCore import Qt, QSize from PySide6.QtGui import QIcon from osdagbridge.desktop.ui.utils.custom_buttons import DockCustomButton +from osdagbridge.core.utils.common import TYPE_TITLE class NoScrollComboBox(QComboBox): def wheelEvent(self, event): @@ -85,10 +86,15 @@ def apply_field_style(widget): class OutputDock(QWidget): """Output dock with collapsible design controls and scrollable layout.""" - def __init__(self, parent): + def __init__(self, backend=None, parent=None): super().__init__() self.parent = parent + self.backend = backend self.setStyleSheet("background: transparent;") + configs = self._load_configs() + self.analysis_config = configs.get("analysis") + # Configurable button rows per section; populated from backend ui_fields + self.section_configs = configs.get("design", []) self.init_ui() def toggle_output_dock(self): @@ -190,90 +196,9 @@ def init_ui(self): scroll_layout.setContentsMargins(0, 0, 0, 0) scroll_layout.setSpacing(10) - results_group = QGroupBox("Analysis Results") - results_group.setStyleSheet( - """ - QGroupBox { - font-weight: bold; - font-size: 11px; - color: #333; - border: 1px solid #90AF13; - border-radius: 4px; - margin-top: 8px; - padding-top: 12px; - background-color: white; - } - QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - left: 8px; - padding: 0 4px; - background-color: white; - } - """ - ) - results_layout = QVBoxLayout(results_group) - results_layout.setContentsMargins(10, 8, 10, 10) - results_layout.setSpacing(8) - - member_row = QHBoxLayout() - member_label = QLabel("Member:") - member_label.setStyleSheet("font-size: 10px; color: #333; font-weight: normal;") - member_label.setMinimumWidth(100) - self.member_combo = NoScrollComboBox() - self.member_combo.addItems(["All"]) - apply_field_style(self.member_combo) - member_row.addWidget(member_label) - member_row.addWidget(self.member_combo) - results_layout.addLayout(member_row) - - load_combo_row = QHBoxLayout() - load_combo_label = QLabel("Load Combination:") - load_combo_label.setStyleSheet("font-size: 10px; color: #333; font-weight: normal;") - load_combo_label.setMinimumWidth(100) - self.load_combo = NoScrollComboBox() - self.load_combo.addItems(["Envelope"]) - apply_field_style(self.load_combo) - load_combo_row.addWidget(load_combo_label) - load_combo_row.addWidget(self.load_combo) - results_layout.addLayout(load_combo_row) - - forces_grid = QHBoxLayout() - forces_grid.setSpacing(8) - - col1 = QVBoxLayout() - for text in ["Fx", "Mx", "Dx"]: - cb = QCheckBox(text) - col1.addWidget(cb) - col2 = QVBoxLayout() - for text in ["Fy", "My", "Dy"]: - cb = QCheckBox(text) - col2.addWidget(cb) - col3 = QVBoxLayout() - for text in ["Fz", "Mz", "Dz"]: - cb = QCheckBox(text) - col3.addWidget(cb) - forces_grid.addLayout(col1) - forces_grid.addLayout(col2) - forces_grid.addLayout(col3) - results_layout.addLayout(forces_grid) - - display_label = QLabel("Display Options:") - display_label.setStyleSheet("font-size: 10px; color: #333; font-weight: normal; margin-top: 4px;") - results_layout.addWidget(display_label) - - display_row = QHBoxLayout() - display_row.setSpacing(12) - for text in ["Max", "Min"]: - cb = QCheckBox(text) - display_row.addWidget(cb) - display_row.addStretch() - results_layout.addLayout(display_row) - - utilization_check = QCheckBox("Controlling Utilization Ratio") - results_layout.addWidget(utilization_check) - - scroll_layout.addWidget(results_group) + analysis_group = self._build_analysis_group() + if analysis_group: + scroll_layout.addWidget(analysis_group) design_group = QGroupBox("Design") design_group.setStyleSheet( @@ -301,209 +226,10 @@ def init_ui(self): design_layout.setContentsMargins(10, 8, 10, 10) design_layout.setSpacing(8) - # === Superstructure Section (Contains Everything) === - structure_group = QGroupBox() - structure_group.setStyleSheet(""" - QGroupBox { - border: 1px solid #90AF13; - border-radius: 5px; - margin-top: 0px; - padding-top: 5px; - background-color: white; - } - """) - structure_layout = QVBoxLayout() - structure_layout.setContentsMargins(10, 10, 10, 10) - structure_layout.setSpacing(10) - - # Header with title and collapse icon - struct_header = QHBoxLayout() - struct_title = QLabel("Superstructure") - struct_title.setStyleSheet("font-size: 13px; font-weight: bold; color: #333;") - struct_header.addWidget(struct_title) - struct_header.addStretch() - - # Collapse/expand toggle using SVG icon - super_toggle_btn = QPushButton() - super_toggle_btn.setCursor(Qt.CursorShape.PointingHandCursor) - super_toggle_btn.setCheckable(True) - super_toggle_btn.setChecked(True) - super_toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg")) - super_toggle_btn.setIconSize(QSize(20, 20)) - super_toggle_btn.setStyleSheet(""" - QPushButton { - background: transparent; - border: none; - padding: 2px; - } - QPushButton:hover { - background: transparent; - } - QPushButton:pressed { - background: transparent; - } - """) - struct_header.addWidget(super_toggle_btn) - - structure_layout.addLayout(struct_header) - - # body widget that contains everything inside the Superstructure and can be hidden - super_body = QFrame() - super_body.setFrameShape(QFrame.NoFrame) - super_body_layout = QVBoxLayout(super_body) - super_body_layout.setContentsMargins(0, 0, 0, 0) - super_body_layout.setSpacing(10) - super_body.setVisible(True) - - # Additional Geometry (inside Superstructure body) - add_geo_row = QHBoxLayout() - add_geo_label = QLabel("Steel Design") - add_geo_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - add_geo_label.setMinimumWidth(110) - add_geo_row.addWidget(add_geo_label) - - modify_geo_btn = QPushButton("Here") - modify_geo_btn.setCursor(Qt.CursorShape.PointingHandCursor) - modify_geo_btn.setStyleSheet(""" - QPushButton { - background-color: #90AF13; - color: white; - font-weight: bold; - border: none; - border-radius: 4px; - padding: 8px 20px; - font-size: 11px; - min-width: 80px; - } - QPushButton:hover { - background-color: #7a9a12; - } - """) - modify_geo_btn.clicked.connect(self.show_additional_inputs) - add_geo_row.addWidget(modify_geo_btn, 1) - super_body_layout.addLayout(add_geo_row) - - #--------------------------------------------- - - # Additional Geometry (inside Superstructure body) - add_geo_row = QHBoxLayout() - add_geo_label = QLabel("Deck Design") - add_geo_label.setStyleSheet(""" - QLabel { - color: #000000; - font-size: 12px; - background: transparent; - } - """) - add_geo_label.setMinimumWidth(110) - add_geo_row.addWidget(add_geo_label) - - modify_geo_btn = QPushButton("Here") - modify_geo_btn.setCursor(Qt.CursorShape.PointingHandCursor) - modify_geo_btn.setStyleSheet(""" - QPushButton { - background-color: #90AF13; - color: white; - font-weight: bold; - border: none; - border-radius: 4px; - padding: 8px 20px; - font-size: 11px; - min-width: 80px; - } - QPushButton:hover { - background-color: #7a9a12; - } - """) - modify_geo_btn.clicked.connect(self.show_additional_inputs) - add_geo_row.addWidget(modify_geo_btn, 1) - super_body_layout.addLayout(add_geo_row) - - - # Add body to structure layout - structure_layout.addWidget(super_body) - - def _toggle_superstructure(checked, body=super_body, btn=super_toggle_btn): - # checked True means show body (open) - body.setVisible(checked) - btn.setIcon(QIcon(":/vectors/arrow_up_light.svg" if checked else ":/vectors/arrow_down_light.svg")) - - super_toggle_btn.toggled.connect(_toggle_superstructure) - structure_group.setLayout(structure_layout) - design_layout.addWidget(structure_group) - - # === Substructure Section (Contains Everything) === - structure_group = QGroupBox() - structure_group.setStyleSheet(""" - QGroupBox { - border: 1px solid #90AF13; - border-radius: 5px; - margin-top: 0px; - padding-top: 5px; - background-color: white; - } - """) - structure_layout = QVBoxLayout() - structure_layout.setContentsMargins(10, 10, 10, 10) - structure_layout.setSpacing(10) - - # Header with title and collapse icon - struct_header = QHBoxLayout() - struct_title = QLabel("Substructure") - struct_title.setStyleSheet("font-size: 13px; font-weight: bold; color: #333;") - struct_header.addWidget(struct_title) - struct_header.addStretch() - - # Collapse/expand toggle using SVG icon - toggle_btn = QPushButton() - toggle_btn.setCursor(Qt.CursorShape.PointingHandCursor) - toggle_btn.setCheckable(True) - toggle_btn.setChecked(True) - toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg")) - toggle_btn.setIconSize(QSize(20, 20)) - toggle_btn.setStyleSheet(""" - QPushButton { - background: transparent; - border: none; - padding: 2px; - } - QPushButton:hover { - background: transparent; - } - QPushButton:pressed { - background: transparent; - } - """) - struct_header.addWidget(toggle_btn) - - structure_layout.addLayout(struct_header) - - # body widget that contains everything inside the Superstructure and can be hidden - structure_body = QFrame() - structure_body.setFrameShape(QFrame.NoFrame) - structure_body_layout = QVBoxLayout(structure_body) - structure_body_layout.setContentsMargins(0, 0, 0, 0) - structure_body_layout.setSpacing(10) - structure_body.setVisible(True) - - - # Add body to structure layout - structure_layout.addWidget(structure_body) - - def _toggle_structure(checked): - # checked True means show body (open) - structure_body.setVisible(checked) - toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg" if checked else ":/vectors/arrow_down_light.svg")) - - toggle_btn.toggled.connect(_toggle_structure) - structure_group.setLayout(structure_layout) - design_layout.addWidget(structure_group) + # Dynamic design sections + for section_cfg in self.section_configs: + section_group = self._create_toggle_group(section_cfg) + design_layout.addWidget(section_group) scroll_layout.addWidget(design_group) scroll_layout.addStretch() @@ -531,4 +257,322 @@ def _toggle_structure(checked): def show_additional_inputs(self): """Handle showing additional geometry inputs.""" # Implement your logic here - print("Show additional inputs clicked") \ No newline at end of file + print("Show additional inputs clicked") + + # --- Helpers for dynamic section/button rendering --- + def _load_configs(self): + if self.backend and hasattr(self.backend, "output_values"): + try: + cfg = self.backend.output_values(flag=None) + if cfg is not None: + return self._normalize_section_configs(cfg) + except Exception: + pass + return {"analysis": None, "design": []} + + def _normalize_section_configs(self, cfg): + result = {"analysis": None, "design": []} + if not cfg: + return result + + # Already structured dict + if isinstance(cfg, dict): + result["analysis"] = cfg.get("analysis") + if isinstance(cfg.get("design"), list): + result["design"] = cfg.get("design") + return result + + # Legacy dict list: treat as design-only + if isinstance(cfg, list) and all(isinstance(item, dict) for item in cfg): + result["design"] = cfg + return result + + # Tuple-based definitions similar to input_values + if isinstance(cfg, list) and all(isinstance(item, tuple) for item in cfg): + for item in cfg: + if len(item) < 7: + continue + _, display_name, ui_type, _, is_visible, _, metadata = item + if ui_type != TYPE_TITLE or not is_visible: + continue + metadata = metadata or {} + kind = metadata.get("kind", "design") + if kind == "analysis": + result["analysis"] = { + "title": display_name, + "fields": metadata.get("fields", []), + } + continue + rows = metadata.get("rows") or metadata.get("post_rows") or [] + if not isinstance(rows, list): + rows = [] + result["design"].append({"title": display_name, "rows": rows}) + return result + + return result + + def _default_analysis_config(self): + return { + "title": "Analysis Results", + "fields": [ + {"type": "combobox", "label": "Member:", "values": ["All"]}, + { + "type": "combobox", + "label": "Load Combination:", + "values": ["Envelope"], + }, + { + "type": "checkbox_grid", + "columns": [["Fx", "Mx", "Dx"], ["Fy", "My", "Dy"], ["Fz", "Mz", "Dz"]], + }, + { + "type": "checkbox_row", + "label": "Display Options:", + "options": ["Max", "Min"], + }, + {"type": "checkbox", "label": "Controlling Utilization Ratio"}, + ], + } + + def _analysis_group_style(self): + return ( + "QGroupBox {\n" + " font-weight: bold;\n" + " font-size: 11px;\n" + " color: #333;\n" + " border: 1px solid #90AF13;\n" + " border-radius: 4px;\n" + " margin-top: 8px;\n" + " padding-top: 12px;\n" + " background-color: white;\n" + "}\n" + "QGroupBox::title {\n" + " subcontrol-origin: margin;\n" + " subcontrol-position: top left;\n" + " left: 8px;\n" + " padding: 0 4px;\n" + " background-color: white;\n" + "}" + ) + + def _build_analysis_group(self): + cfg = self.analysis_config or self._default_analysis_config() + if not cfg: + return None + + group = QGroupBox(cfg.get("title", "Analysis Results")) + group.setStyleSheet(self._analysis_group_style()) + layout = QVBoxLayout(group) + layout.setContentsMargins(10, 8, 10, 10) + layout.setSpacing(8) + + for field_cfg in cfg.get("fields", []): + self._add_analysis_field(layout, field_cfg) + + return group + + def _normalize_field_cfg(self, field_cfg): + if isinstance(field_cfg, dict): + return field_cfg + if isinstance(field_cfg, tuple) and len(field_cfg) >= 7: + key, label, field_type, values, is_visible, _validator, metadata = field_cfg + if not is_visible: + return None + meta = metadata or {} + normalized = { + "key": key, + "label": label, + "type": field_type, + "values": values, + } + normalized.update(meta) + return normalized + return None + + def _add_analysis_field(self, layout, field_cfg): + cfg = self._normalize_field_cfg(field_cfg) + if not cfg: + return + field_type = cfg.get("type") + if field_type == "combobox": + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(8) + label = QLabel(cfg.get("label", "")) + label.setStyleSheet("font-size: 10px; color: #333; font-weight: normal;") + label.setMinimumWidth(cfg.get("label_min_width", 100)) + combo = NoScrollComboBox() + values = cfg.get("values") or [] + combo.addItems(values) + default = cfg.get("default") + if default and default in values: + combo.setCurrentText(default) + apply_field_style(combo) + row.addWidget(label) + row.addWidget(combo) + layout.addLayout(row) + elif field_type == "checkbox_grid": + columns = cfg.get("columns") or cfg.get("values") or [] + grid = QHBoxLayout() + grid.setContentsMargins(0, 0, 0, 0) + grid.setSpacing(8) + for col_items in columns: + col_layout = QVBoxLayout() + col_layout.setContentsMargins(0, 0, 0, 0) + col_layout.setSpacing(2) + for text in col_items or []: + cb = QCheckBox(str(text)) + col_layout.addWidget(cb) + grid.addLayout(col_layout) + if cfg.get("add_stretch", True): + grid.addStretch() + layout.addLayout(grid) + elif field_type == "checkbox_row": + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(12) + label = cfg.get("label") + if label: + lbl = QLabel(label) + lbl.setStyleSheet("font-size: 10px; color: #333; font-weight: normal; margin-top: 4px;") + row.addWidget(lbl) + options = cfg.get("options") or cfg.get("values") or [] + for text in options: + cb = QCheckBox(str(text)) + row.addWidget(cb) + if cfg.get("add_stretch", True): + row.addStretch() + layout.addLayout(row) + elif field_type == "checkbox": + cb = QCheckBox(cfg.get("label", "")) + layout.addWidget(cb) + + def _section_label_style(self): + return ( + "QLabel {\n" + " color: #000000;\n" + " font-size: 12px;\n" + " background: transparent;\n" + "}" + ) + + def _default_action_button_style(self): + return ( + "QPushButton {\n" + " background-color: #90AF13;\n" + " color: white;\n" + " font-weight: bold;\n" + " border: none;\n" + " border-radius: 4px;\n" + " padding: 8px 20px;\n" + " font-size: 11px;\n" + " min-width: 80px;\n" + "}\n" + "QPushButton:hover {\n" + " background-color: #7a9a12;\n" + "}\n" + ) + + def _create_action_button(self, cfg): + btn = QPushButton(cfg.get("text", "Action")) + btn.setCursor(Qt.CursorShape.PointingHandCursor) + btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + style = cfg.get("style") or self._default_action_button_style() + btn.setStyleSheet(style) + if cfg.get("icon"): + btn.setIcon(QIcon(cfg["icon"])) + icon_size = cfg.get("icon_size") + if isinstance(icon_size, (list, tuple)) and len(icon_size) == 2: + btn.setIconSize(QSize(icon_size[0], icon_size[1])) + cb_name = cfg.get("action") + cb = getattr(self, cb_name, None) if cb_name else None + if callable(cb): + btn.clicked.connect(cb) + else: + btn.setEnabled(False) + return btn + + def _add_button_row(self, parent_layout, row_cfg): + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(8) + + label_text = row_cfg.get("label") + if label_text: + label = QLabel(label_text) + label.setStyleSheet(self._section_label_style()) + label.setMinimumWidth(row_cfg.get("label_min_width", 110)) + row.addWidget(label) + + buttons = row_cfg.get("buttons", []) + for cfg in buttons: + btn = self._create_action_button(cfg) + row.addWidget(btn, cfg.get("stretch", 1 if len(buttons) == 1 else 0)) + + if row_cfg.get("add_stretch", True): + row.addStretch() + + parent_layout.addLayout(row) + + def _create_toggle_group(self, section_cfg): + group = QGroupBox() + group.setStyleSheet( + "QGroupBox {\n" + " border: 1px solid #90AF13;\n" + " border-radius: 5px;\n" + " margin-top: 0px;\n" + " padding-top: 5px;\n" + " background-color: white;\n" + "}" + ) + layout = QVBoxLayout() + layout.setContentsMargins(10, 10, 10, 10) + layout.setSpacing(10) + + header = QHBoxLayout() + title = QLabel(section_cfg.get("title", "")) + title.setStyleSheet("font-size: 13px; font-weight: bold; color: #333;") + header.addWidget(title) + header.addStretch() + + toggle_btn = QPushButton() + toggle_btn.setCursor(Qt.CursorShape.PointingHandCursor) + toggle_btn.setCheckable(True) + toggle_btn.setChecked(True) + toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg")) + toggle_btn.setIconSize(QSize(20, 20)) + toggle_btn.setStyleSheet( + "QPushButton {\n" + " background: transparent;\n" + " border: none;\n" + " padding: 2px;\n" + "}\n" + "QPushButton:hover {\n" + " background: transparent;\n" + "}\n" + "QPushButton:pressed {\n" + " background: transparent;\n" + "}" + ) + header.addWidget(toggle_btn) + layout.addLayout(header) + + body = QFrame() + body.setFrameShape(QFrame.NoFrame) + body_layout = QVBoxLayout(body) + body_layout.setContentsMargins(0, 0, 0, 0) + body_layout.setSpacing(10) + body.setVisible(True) + + for row_cfg in section_cfg.get("rows", []): + self._add_button_row(body_layout, row_cfg) + + layout.addWidget(body) + + def _toggle(checked): + body.setVisible(checked) + toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg" if checked else ":/vectors/arrow_down_light.svg")) + + toggle_btn.toggled.connect(_toggle) + group.setLayout(layout) + return group \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 9daf3b151..c93729456 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -215,7 +215,7 @@ def mousePressEvent(self, event): self.splitter.addWidget(self.central_widget) # root is the greatest level of parent that is the MainWindow - self.output_dock = OutputDock(parent=self) + self.output_dock = OutputDock(backend=self.backend, parent=self) self.splitter.addWidget(self.output_dock) # self.output_dock.setStyleSheet(self.output_dock.styleSheet()) self.output_dock.hide() diff --git a/src/osdagbridge/desktop/ui/utils/cad_palette.py b/src/osdagbridge/desktop/ui/utils/cad_palette.py new file mode 100644 index 000000000..dc11f6d7c --- /dev/null +++ b/src/osdagbridge/desktop/ui/utils/cad_palette.py @@ -0,0 +1,29 @@ +"""Shared color palette for 2D CAD-style previews. + +Keep all 2D CAD previews visually consistent across the desktop UI. +""" + +from __future__ import annotations + +from PySide6.QtGui import QColor + + +# Brand / primary accent used in CAD dimension lines. +OSDAG_BRAND_GREEN = QColor("#90AF13") + +# Typography used by CAD preview widgets. +OSDAG_FONT_FAMILY = "Ubuntu Sans" + +# Core CAD canvas + ink. +CAD_CANVAS_BG = QColor("#ffffff") +CAD_SHAPE_FILL = QColor("#fefefe") +CAD_OUTLINE = QColor("#1b1b1b") +CAD_TEXT = QColor("#0f0f0f") + +# Dimension system colors. +CAD_DIMENSION = QColor(OSDAG_BRAND_GREEN) +CAD_LABEL_BG = QColor(255, 255, 255, 230) + +# Placeholder styling (when no section/geometry is available). +CAD_PLACEHOLDER_BORDER = QColor("#b7b7b7") +CAD_PLACEHOLDER_TEXT = QColor("#6f6f6f") diff --git a/src/osdagbridge/desktop/ui/utils/rolled_section_preview.py b/src/osdagbridge/desktop/ui/utils/rolled_section_preview.py new file mode 100644 index 000000000..fabf29d32 --- /dev/null +++ b/src/osdagbridge/desktop/ui/utils/rolled_section_preview.py @@ -0,0 +1,700 @@ +"""Interactive section preview widget shared across Additional Inputs tabs.""" +from __future__ import annotations + +import math +from typing import Any, Dict, Optional + +from PySide6.QtCore import QPointF, QRectF, Qt +from PySide6.QtGui import QColor, QFont, QPainter, QPaintEvent, QPainterPath, QPen, QTextDocument +from PySide6.QtWidgets import QSizePolicy, QWidget + +from osdagbridge.desktop.ui.utils.cad_palette import ( + CAD_CANVAS_BG, + CAD_DIMENSION, + CAD_LABEL_BG, + CAD_OUTLINE, + CAD_PLACEHOLDER_BORDER, + CAD_PLACEHOLDER_TEXT, + CAD_SHAPE_FILL, + CAD_TEXT, + OSDAG_BRAND_GREEN, + OSDAG_FONT_FAMILY, +) + +try: # pragma: no cover - optional dependency + from osdagbridge.core.bridge_components.super_structure.girder.properties import BeamSection # type: ignore +except Exception: # pragma: no cover - fallback when module missing in current build + BeamSection = Any # type: ignore[misc,assignment] + +class RolledSectionPreview(QWidget): + """Render a rolled or welded section with CAD-style dimension annotations.""" + + def __init__(self, parent: Optional[QWidget] = None) -> None: + super().__init__(parent) + self._section: Optional[BeamSection] = None + self._dimensions: Dict[str, float] = {} + + self._outline_color = QColor(CAD_OUTLINE) + self._outline_width = 3.0 + self._brand_color = QColor(OSDAG_BRAND_GREEN) + self._dimension_color = QColor(CAD_DIMENSION) + self._dimension_keys = ("tfw", "tft", "bfw", "bft", "d", "wt") + self._dimension_palette = {key: QColor(CAD_DIMENSION) for key in self._dimension_keys} + self._label_bg = QColor(CAD_LABEL_BG) + self._text_color = QColor(CAD_TEXT) + self._brand_font_family = OSDAG_FONT_FAMILY + self._show_welds = False + + self._outer_margin = 16 + self._annotation_margin_top = 36 + self._annotation_margin_bottom = 28 + self._annotation_margin_left = 52 + self._annotation_margin_right = 74 + self._dim_gap = 12 + self._arrow_size = 9 + + self._min_root_radius_px = 8.0 + self._min_toe_radius_px = 4.0 + + self.setMinimumSize(360, 260) + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + def set_section(self, section: Optional[BeamSection]) -> None: + """Update the preview to show the supplied rolled ``BeamSection``.""" + + self._section = section + if section is None: + self._dimensions = {} + else: + self._dimensions = { + "depth": self._extract_dimension(section, ("depth_mm", "depth"), 0.0), + "top_flange_width": self._extract_dimension(section, ("flange_width_mm", "top_flange_width_mm"), 0.0), + "bottom_flange_width": self._extract_dimension(section, ("flange_width_mm", "bottom_flange_width_mm"), 0.0), + "web_thickness": self._extract_dimension(section, ("web_thickness_mm", "web_thickness"), 0.0), + "top_flange_thickness": self._extract_dimension(section, ("flange_thickness_mm", "top_flange_thickness_mm"), 0.0), + "bottom_flange_thickness": self._extract_dimension(section, ("flange_thickness_mm", "bottom_flange_thickness_mm"), 0.0), + "root_radius_mm": self._extract_dimension(section, ("root_radius_r1_mm", "root_radius_mm", "root_radius"), 0.0), + "toe_radius_mm": self._extract_dimension(section, ("root_radius_r2_mm", "toe_radius_mm", "toe_radius"), 0.0), + } + self._show_welds = False + self.update() + + def set_dimensions( + self, + *, + depth_mm: float, + flange_width_mm: float, + web_thickness_mm: float, + flange_thickness_mm: float, + bottom_flange_width_mm: Optional[float] = None, + bottom_flange_thickness_mm: Optional[float] = None, + show_welds: bool = False, + ) -> None: + """Feed custom dimensions directly (e.g., for welded sections).""" + + self._section = None + self._dimensions = { + "depth": float(depth_mm), + "top_flange_width": float(flange_width_mm), + "bottom_flange_width": float(bottom_flange_width_mm or flange_width_mm), + "web_thickness": float(web_thickness_mm), + "top_flange_thickness": float(flange_thickness_mm), + "bottom_flange_thickness": float(bottom_flange_thickness_mm or flange_thickness_mm), + "root_radius_mm": 0.0, + "toe_radius_mm": 0.0, + } + self._show_welds = show_welds + self.update() + + def clear(self) -> None: + """Reset the preview to an empty placeholder.""" + + self._section = None + self._dimensions = {} + self._show_welds = False + self.update() + + # ------------------------------------------------------------------ + # QWidget overrides + # ------------------------------------------------------------------ + def paintEvent(self, event: QPaintEvent) -> None: # noqa: D401 - Qt override + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing, True) + # Force a light canvas so the widget stays readable even when the + # application uses a dark palette. + painter.fillRect(self.rect(), QColor(CAD_CANVAS_BG)) + + if not self._dimensions: + self._draw_placeholder(painter) + return + + dims = self._dimensions + depth = max(dims.get("depth", 0.0), 1.0) + top_width = max(dims.get("top_flange_width", 0.0), 1.0) + bottom_width = max(dims.get("bottom_flange_width", top_width), 1.0) + web_thickness = max(dims.get("web_thickness", 0.0), 0.5) + top_thickness = max(dims.get("top_flange_thickness", 0.0), 0.5) + bottom_thickness = max(dims.get("bottom_flange_thickness", top_thickness), 0.5) + + usable_rect = self.rect().adjusted( + self._outer_margin + 20, + self._outer_margin, + -self._outer_margin, + -self._outer_margin, + ) + beam_rect = QRectF( + usable_rect.left() + self._annotation_margin_left, + usable_rect.top() + self._annotation_margin_top, + max(20.0, usable_rect.width() - self._annotation_margin_left - self._annotation_margin_right), + max(20.0, usable_rect.height() - self._annotation_margin_top - self._annotation_margin_bottom), + ) + + max_width = max(top_width, bottom_width) + scale_w = beam_rect.width() / max_width + scale_h = beam_rect.height() / depth + scale = min(scale_w, scale_h) * 0.92 + + beam_height = depth * scale + top_height = min(top_thickness * scale, beam_height * 0.4) + bottom_height = min(bottom_thickness * scale, beam_height * 0.4) + web_height = max(beam_height - top_height - bottom_height, scale * 2.0) + + center_x = beam_rect.center().x() + top_y = beam_rect.center().y() - (top_height + web_height + bottom_height) / 2.0 + + top_flange = QRectF( + center_x - (top_width * scale) / 2.0, + top_y, + top_width * scale, + top_height, + ) + web = QRectF( + center_x - (web_thickness * scale) / 2.0, + top_flange.bottom(), + max(1.0, web_thickness * scale), + web_height, + ) + bottom_flange = QRectF( + center_x - (bottom_width * scale) / 2.0, + web.bottom(), + bottom_width * scale, + bottom_height, + ) + + root_radius_px = float(dims.get("root_radius_mm", 0.0)) * scale + toe_radius_px = float(dims.get("toe_radius_mm", 0.0)) * scale + + section_path = self._build_section_path( + top_flange, + web, + bottom_flange, + root_radius_px, + toe_radius_px, + ) + + painter.save() + outline_pen = QPen(self._outline_color, self._outline_width) + outline_pen.setJoinStyle(Qt.MiterJoin) + painter.setPen(outline_pen) + painter.setBrush(QColor(CAD_SHAPE_FILL)) + if section_path is not None: + painter.drawPath(section_path) + else: + painter.drawRect(top_flange) + painter.drawRect(web) + painter.drawRect(bottom_flange) + painter.restore() + + if self._show_welds: + self._draw_welds(painter, top_flange, web, bottom_flange) + + font = QFont(self.font()) + font.setFamily(self._brand_font_family) + font.setPointSizeF(max(9.0, font.pointSizeF())) + painter.setFont(font) + + tfw_color = self._set_dimension_pen(painter, "tfw") + width_dim_y = self._snap_coordinate(top_flange.top() - self._dim_gap) + left_extension_end = QPointF(self._snap_coordinate(top_flange.left()), width_dim_y) + right_extension_end = QPointF(self._snap_coordinate(top_flange.right()), width_dim_y) + painter.drawLine(QPointF(left_extension_end.x(), top_flange.top()), left_extension_end) + painter.drawLine(QPointF(right_extension_end.x(), top_flange.top()), right_extension_end) + self._draw_dimension_line( + painter, + left_extension_end, + right_extension_end, + tfw_color, + ) + self._draw_label( + painter, + self._format_label_markup("tfw", top_width), + QPointF(top_flange.center().x(), width_dim_y - 6), + Qt.AlignHCenter | Qt.AlignBottom, + with_background=False, + color=tfw_color, + ) + + tft_color = self._set_dimension_pen(painter, "tft") + self._draw_vertical_thickness_dimension( + painter, + top_flange.left(), + top_flange.top(), + top_flange.bottom(), + top_thickness, + tft_color, + label_symbol="tft", + label_align=Qt.AlignRight | Qt.AlignVCenter, + ) + + bfw_color = self._set_dimension_pen(painter, "bfw") + bottom_width_dim_y = self._snap_coordinate(bottom_flange.bottom() + self._dim_gap) + bottom_left_extension = QPointF(self._snap_coordinate(bottom_flange.left()), bottom_width_dim_y) + bottom_right_extension = QPointF(self._snap_coordinate(bottom_flange.right()), bottom_width_dim_y) + painter.drawLine(QPointF(bottom_left_extension.x(), bottom_flange.bottom()), bottom_left_extension) + painter.drawLine(QPointF(bottom_right_extension.x(), bottom_flange.bottom()), bottom_right_extension) + self._draw_dimension_line( + painter, + bottom_left_extension, + bottom_right_extension, + bfw_color, + ) + self._draw_label( + painter, + self._format_label_markup("bfw", bottom_width), + QPointF(bottom_flange.center().x(), bottom_width_dim_y + 6), + Qt.AlignHCenter | Qt.AlignTop, + with_background=False, + color=bfw_color, + ) + + bft_color = self._set_dimension_pen(painter, "bft") + self._draw_vertical_thickness_dimension( + painter, + bottom_flange.left(), + bottom_flange.top(), + bottom_flange.bottom(), + bottom_thickness, + bft_color, + label_symbol="bft", + label_align=Qt.AlignRight | Qt.AlignVCenter, + ) + + depth_color = self._set_dimension_pen(painter, "d") + anchor_x = self._snap_coordinate(bottom_flange.right()) + depth_dim_x = self._snap_coordinate(anchor_x + self._dim_gap) + top_depth_extension = QPointF(depth_dim_x, self._snap_coordinate(top_flange.top())) + bottom_depth_extension = QPointF(depth_dim_x, self._snap_coordinate(bottom_flange.bottom())) + painter.drawLine(QPointF(anchor_x, top_depth_extension.y()), top_depth_extension) + painter.drawLine(QPointF(anchor_x, bottom_depth_extension.y()), bottom_depth_extension) + self._draw_dimension_line( + painter, + top_depth_extension, + bottom_depth_extension, + depth_color, + ) + self._draw_label( + painter, + self._format_label_markup("d", depth), + QPointF(depth_dim_x + 10, (top_flange.top() + bottom_flange.bottom()) / 2.0), + Qt.AlignLeft | Qt.AlignVCenter, + with_background=False, + color=depth_color, + ) + + wt_color = self._set_dimension_pen(painter, "wt") + self._draw_web_thickness_dimension( + painter, + web.left(), + web.right(), + web.center().y(), + web_thickness, + wt_color, + label_symbol="wt", + ) + + # ------------------------------------------------------------------ + # Drawing helpers + # ------------------------------------------------------------------ + def _build_section_path( + self, + top_flange: QRectF, + web: QRectF, + bottom_flange: QRectF, + root_radius: float, + toe_radius: float, + ) -> Optional[QPainterPath]: + if min(top_flange.width(), bottom_flange.width(), web.width()) <= 0: + return None + + tf_left, tf_right = top_flange.left(), top_flange.right() + tf_top, tf_bottom = top_flange.top(), top_flange.bottom() + bf_left, bf_right = bottom_flange.left(), bottom_flange.right() + bf_top, bf_bottom = bottom_flange.top(), bottom_flange.bottom() + web_left, web_right = web.left(), web.right() + + top_root = self._effective_root_radius_px(root_radius, top_flange, web) + bottom_root = self._effective_root_radius_px(root_radius, bottom_flange, web) + top_toe = self._effective_toe_radius_px(toe_radius, top_flange) + bottom_toe = self._effective_toe_radius_px(toe_radius, bottom_flange) + + path = QPainterPath() + path.moveTo(tf_left, tf_top) + path.lineTo(tf_right, tf_top) + path.lineTo(tf_right, tf_bottom - top_toe) + if top_toe > 0: + rect = QRectF(tf_right - 2 * top_toe, tf_bottom - 2 * top_toe, 2 * top_toe, 2 * top_toe) + path.arcTo(rect, 0, -90) + else: + path.lineTo(tf_right, tf_bottom) + path.lineTo(web_right + top_root, tf_bottom) + if top_root > 0: + rect = QRectF(web_right, tf_bottom, 2 * top_root, 2 * top_root) + path.arcTo(rect, 90, 90) + else: + path.lineTo(web_right, tf_bottom) + path.lineTo(web_right, bf_top - bottom_root) + if bottom_root > 0: + rect = QRectF(web_right, bf_top - 2 * bottom_root, 2 * bottom_root, 2 * bottom_root) + path.arcTo(rect, 180, 90) + else: + path.lineTo(web_right, bf_top) + path.lineTo(bf_right - bottom_toe, bf_top) + if bottom_toe > 0: + rect = QRectF(bf_right - 2 * bottom_toe, bf_top, 2 * bottom_toe, 2 * bottom_toe) + path.arcTo(rect, 90, -90) + else: + path.lineTo(bf_right, bf_top) + path.lineTo(bf_right, bf_bottom) + path.lineTo(bf_left, bf_bottom) + path.lineTo(bf_left, bf_top + bottom_toe) + if bottom_toe > 0: + rect = QRectF(bf_left, bf_top, 2 * bottom_toe, 2 * bottom_toe) + path.arcTo(rect, 180, -90) + else: + path.lineTo(bf_left, bf_top) + path.lineTo(web_left - bottom_root, bf_top) + if bottom_root > 0: + rect = QRectF(web_left - 2 * bottom_root, bf_top - 2 * bottom_root, 2 * bottom_root, 2 * bottom_root) + path.arcTo(rect, 270, 90) + else: + path.lineTo(web_left, bf_top) + path.lineTo(web_left, tf_bottom + top_root) + if top_root > 0: + rect = QRectF(web_left - 2 * top_root, tf_bottom, 2 * top_root, 2 * top_root) + path.arcTo(rect, 0, 90) + else: + path.lineTo(web_left, tf_bottom) + path.lineTo(tf_left + top_toe, tf_bottom) + if top_toe > 0: + rect = QRectF(tf_left, tf_bottom - 2 * top_toe, 2 * top_toe, 2 * top_toe) + path.arcTo(rect, 270, -90) + else: + path.lineTo(tf_left, tf_bottom) + path.lineTo(tf_left, tf_top) + path.closeSubpath() + return path + + def _snap_coordinate(self, value: float, *, precision: float = 0.5) -> float: + if not precision or precision <= 0: + return value + return round(value / precision) * precision + + def _effective_toe_radius_px(self, requested: float, flange: QRectF) -> float: + if self._show_welds: + return 0.0 + max_radius = max(0.0, min(flange.width() / 2.0, flange.height())) + if max_radius == 0.0: + return 0.0 + val = max(requested, self._min_toe_radius_px) + return self._snap_coordinate(min(val, max_radius)) + + def _effective_root_radius_px(self, requested: float, flange: QRectF, web: QRectF) -> float: + if self._show_welds: + return 0.0 + flange_overhang = (flange.width() - web.width()) / 2.0 + max_radius = max(0.0, min(flange_overhang, web.height() / 2.0)) + if max_radius == 0.0: + return 0.0 + val = max(requested, self._min_root_radius_px) + return self._snap_coordinate(min(val, max_radius)) + + def _draw_welds(self, painter: QPainter, top_flange: QRectF, web: QRectF, bottom_flange: QRectF) -> None: + painter.save() + painter.setRenderHint(QPainter.Antialiasing, True) + # Keep weld triangles visible on a light theme. + fill_color = QColor("#111111") + outline_pen = QPen(QColor("#111111"), 0.9) + outline_pen.setCosmetic(True) + painter.setBrush(fill_color) + painter.setPen(outline_pen) + + horizontal_leg = max(4.0, min(web.width() * 0.8, 24.0)) + top_vertical_leg = max(4.0, min(top_flange.height() * 0.9, 22.0)) + bottom_vertical_leg = max(4.0, min(bottom_flange.height() * 0.9, 22.0)) + + for sign in (-1, 1): + top_corner_x = web.left() if sign < 0 else web.right() + top_corner = QPointF(top_corner_x, top_flange.bottom()) + painter.drawPath( + self._build_fillet_path( + top_corner, + horizontal_leg, + top_vertical_leg, + horizontal_sign=sign, + vertical_sign=1.0, + ) + ) + + bottom_corner_x = web.left() if sign < 0 else web.right() + bottom_corner = QPointF(bottom_corner_x, bottom_flange.top()) + painter.drawPath( + self._build_fillet_path( + bottom_corner, + horizontal_leg, + bottom_vertical_leg, + horizontal_sign=sign, + vertical_sign=-1.0, + ) + ) + + painter.restore() + + def _build_fillet_path( + self, + corner: QPointF, + horizontal_leg: float, + vertical_leg: float, + *, + horizontal_sign: float, + vertical_sign: float, + ) -> QPainterPath: + leg_x = horizontal_leg * horizontal_sign + leg_y = vertical_leg * vertical_sign + path = QPainterPath(corner) + path.lineTo(QPointF(corner.x() + leg_x, corner.y())) + control = QPointF(corner.x() + leg_x * 0.55, corner.y() + leg_y * 0.55) + path.quadTo(control, QPointF(corner.x(), corner.y() + leg_y)) + path.closeSubpath() + return path + + def _draw_placeholder(self, painter: QPainter) -> None: + painter.save() + pen = QPen(QColor(CAD_PLACEHOLDER_BORDER), 1.2, Qt.DashLine) + pen.setCosmetic(True) + painter.setPen(pen) + painter.drawRect(self.rect().adjusted(12, 12, -12, -12)) + painter.setPen(QColor(CAD_PLACEHOLDER_TEXT)) + font = QFont(self.font()) + font.setFamily(self._brand_font_family) + font.setPointSizeF(max(font.pointSizeF(), 10.0)) + painter.setFont(font) + painter.drawText(self.rect(), Qt.AlignCenter, "Select a section to preview") + painter.restore() + + def _set_dimension_pen(self, painter: QPainter, key: str) -> QColor: + color = self._dimension_palette.get(key, self._dimension_color) + pen = QPen(color, 1.6) + pen.setCosmetic(True) + pen.setCapStyle(Qt.FlatCap) + painter.setPen(pen) + return color + + def _draw_vertical_thickness_dimension( + self, + painter: QPainter, + flange_edge_x: float, + top_y: float, + bottom_y: float, + thickness: Optional[float], + color: QColor, + *, + label_symbol: str, + label_align: Qt.Alignment, + ) -> None: + extension = self._dim_gap * 0.9 + anchor_x = self._snap_coordinate(flange_edge_x) + dimension_x = self._snap_coordinate(anchor_x - extension) + snapped_top_y = self._snap_coordinate(top_y) + snapped_bottom_y = self._snap_coordinate(bottom_y) + top_extension = QPointF(dimension_x, snapped_top_y) + bottom_extension = QPointF(dimension_x, snapped_bottom_y) + + painter.drawLine(QPointF(anchor_x, snapped_top_y), top_extension) + painter.drawLine(QPointF(anchor_x, snapped_bottom_y), bottom_extension) + painter.drawLine(top_extension, bottom_extension) + self._draw_arrow_head(painter, top_extension, QPointF(0, -1), color) + self._draw_arrow_head(painter, bottom_extension, QPointF(0, 1), color) + + label_anchor = QPointF( + dimension_x - self._dim_gap * 0.4, + (snapped_top_y + snapped_bottom_y) / 2.0, + ) + self._draw_label( + painter, + self._format_label_markup(label_symbol, thickness), + label_anchor, + label_align, + with_background=False, + color=color, + ) + + def _draw_web_thickness_dimension( + self, + painter: QPainter, + left_x: float, + right_x: float, + mid_y: float, + thickness: Optional[float], + color: QColor, + *, + label_symbol: str, + ) -> None: + snapped_mid_y = self._snap_coordinate(mid_y) + left_point = QPointF(self._snap_coordinate(left_x), snapped_mid_y) + right_point = QPointF(self._snap_coordinate(right_x), snapped_mid_y) + painter.drawLine(left_point, right_point) + self._draw_arrow_head(painter, left_point, QPointF(-1, 0), color) + self._draw_arrow_head(painter, right_point, QPointF(1, 0), color) + + label_offset = self._dim_gap * 0.6 + label_anchor = QPointF(left_point.x() - label_offset, snapped_mid_y) + self._draw_label( + painter, + self._format_label_markup(label_symbol, thickness), + label_anchor, + Qt.AlignRight | Qt.AlignVCenter, + with_background=False, + color=color, + ) + + def _draw_dimension_line( + self, + painter: QPainter, + start: QPointF, + end: QPointF, + color: QColor, + *, + external: bool = False, + ) -> None: + direction = QPointF(end.x() - start.x(), end.y() - start.y()) + length = math.hypot(direction.x(), direction.y()) + if length == 0: + return + painter.drawLine(start, end) + self._draw_arrow_head(painter, start, direction, color) + self._draw_arrow_head(painter, end, QPointF(-direction.x(), -direction.y()), color) + + def _draw_arrow_head(self, painter: QPainter, tip: QPointF, direction: QPointF, color: QColor) -> None: + length = math.hypot(direction.x(), direction.y()) + if length == 0: + return + + unit = QPointF(direction.x() / length, direction.y() / length) + normal = QPointF(-unit.y(), unit.x()) + + arrow = self._arrow_size + arrow_length = arrow * 1.3 + arrow_half_width = arrow * 0.25 + + base = tip + unit * arrow_length + left = base + normal * arrow_half_width + right = base - normal * arrow_half_width + + painter.save() + painter.setBrush(color) + painter.setPen(Qt.NoPen) + painter.drawPolygon([tip, left, right]) + painter.restore() + + def _draw_label( + self, + painter: QPainter, + text: str, + anchor: QPointF, + align: Qt.Alignment, + *, + with_background: bool = True, + color: Optional[QColor] = None, + ) -> None: + text_color = color or self._text_color + html_text = text if color is None else f'{text}' + + doc = QTextDocument() + doc.setDefaultFont(painter.font()) + doc.setHtml(html_text) + text_size = doc.size() + padding_x = 6 + padding_y = 4 + rect = QRectF(0, 0, text_size.width() + padding_x * 2, text_size.height() + padding_y * 2) + + if align & Qt.AlignLeft: + rect.moveLeft(anchor.x()) + elif align & Qt.AlignRight: + rect.moveRight(anchor.x()) + else: + rect.moveCenter(QPointF(anchor.x(), rect.center().y())) + + if align & Qt.AlignTop: + rect.moveTop(anchor.y()) + elif align & Qt.AlignBottom: + rect.moveBottom(anchor.y()) + else: + rect.moveCenter(QPointF(rect.center().x(), anchor.y())) + + content_rect = QRectF( + rect.left() + padding_x, + rect.top() + padding_y, + text_size.width(), + text_size.height(), + ) + + if with_background: + painter.save() + painter.setPen(Qt.NoPen) + painter.setBrush(self._label_bg) + painter.drawRoundedRect(rect, 4, 4) + painter.restore() + + painter.save() + painter.translate(content_rect.topLeft()) + doc.drawContents(painter) + painter.restore() + + def _format_label_markup(self, symbol: str, value: Optional[float] = None) -> str: + formatted_symbol = self._format_symbol_markup(symbol) + if value is None: + return formatted_symbol + return f"{formatted_symbol} = {self._format_mm(value)}" + + @staticmethod + def _format_symbol_markup(symbol: str) -> str: + clean = symbol.lower().strip() + if len(clean) <= 1: + return clean or symbol + return f"{clean[0]}{clean[1:]}" + + @staticmethod + def _color_to_hex(color: QColor) -> str: + return color.name(QColor.HexRgb) + + @staticmethod + def _format_mm(value: float) -> str: + rounded = round(value) + if abs(value - rounded) < 0.01: + return f"{rounded} mm" + return f"{value:.1f} mm" + + @staticmethod + def _extract_dimension(section: BeamSection, names, default: float) -> float: + for attr in names if isinstance(names, (tuple, list)) else (names,): + if hasattr(section, attr): + raw = getattr(section, attr) + if raw is not None: + try: + return float(raw) + except (TypeError, ValueError): + continue + return float(default) diff --git a/src/osdagbridge/desktop/ui/widgets/placeholder_section_preview.py b/src/osdagbridge/desktop/ui/widgets/placeholder_section_preview.py new file mode 100644 index 000000000..000834a00 --- /dev/null +++ b/src/osdagbridge/desktop/ui/widgets/placeholder_section_preview.py @@ -0,0 +1,66 @@ +from __future__ import annotations + +from PySide6.QtCore import Qt +from PySide6.QtWidgets import QLabel, QStackedLayout, QWidget + +from osdagbridge.desktop.ui.widgets.section_viewer import SectionPreviewWidget + + +class PlaceholderSectionPreviewWidget(QWidget): + """A SectionPreviewWidget that shows a placeholder when empty. + + The underlying SectionPreviewWidget renders nothing when no section is set, + which can look like a blank/disabled UI. This wrapper keeps a consistent + placeholder text (e.g. "Bracing", "Top Bracket") until a section is set. + """ + + def __init__(self, placeholder_text: str, min_height: int = 110, parent: QWidget | None = None): + super().__init__(parent) + + self._placeholder = QLabel(placeholder_text) + self._placeholder.setAlignment(Qt.AlignCenter) + self._placeholder.setMinimumHeight(min_height) + self._placeholder.setStyleSheet( + "QLabel { border: 1px solid #d0d0d0; border-radius: 10px; " + "background-color: #f7f7f7; font-weight: bold; color: #5b5b5b; }" + ) + + self._preview = SectionPreviewWidget() + self._preview.setMinimumHeight(min_height) + self._preview.setStyleSheet( + "QWidget { border: 1px solid #d0d0d0; border-radius: 10px; background-color: #ffffff; }" + ) + + self._stack = QStackedLayout(self) + self._stack.setContentsMargins(0, 0, 0, 0) + self._stack.addWidget(self._placeholder) + self._stack.addWidget(self._preview) + + self.set_section("", "") + + def set_section(self, section_type: str, designation: str, *args): + section_type = (section_type or "").strip() + designation = (designation or "").strip() + + if not section_type and not designation: + # Ensure placeholder is visible. + self._stack.setCurrentWidget(self._placeholder) + try: + self._preview.set_section("", "") + except Exception: + pass + return + + self._stack.setCurrentWidget(self._preview) + try: + self._preview.set_section(section_type, designation, *args) + except TypeError: + # Some call sites may pass an optional third argument. + self._preview.set_section(section_type, designation) + + def clear(self) -> None: + self.set_section("", "") + + @property + def preview(self) -> SectionPreviewWidget: + return self._preview diff --git a/src/osdagbridge/desktop/ui/widgets/section_viewer.py b/src/osdagbridge/desktop/ui/widgets/section_viewer.py index 85d5ed0a7..bea985765 100644 --- a/src/osdagbridge/desktop/ui/widgets/section_viewer.py +++ b/src/osdagbridge/desktop/ui/widgets/section_viewer.py @@ -10,6 +10,15 @@ from PySide6.QtGui import QColor, QFont, QFontMetrics, QPainter, QPainterPath, QPen from PySide6.QtWidgets import QWidget +from osdagbridge.desktop.ui.utils.cad_palette import ( + CAD_CANVAS_BG, + CAD_DIMENSION, + CAD_OUTLINE, + CAD_PLACEHOLDER_BORDER, + CAD_PLACEHOLDER_TEXT, + CAD_SHAPE_FILL, +) + DB_PATH = Path(__file__).resolve().parents[3] / "core" / "data" / "ResourceFiles" / "Intg_osdag.sqlite" @@ -306,10 +315,13 @@ def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) # Force a light background for clarity in embedded previews - painter.fillRect(self.rect(), QColor("#ffffff")) + painter.fillRect(self.rect(), QColor(CAD_CANVAS_BG)) if not self._geometry: - painter.setPen(QPen(QColor("#ffffff"), 1, Qt.DashLine)) + pen = QPen(QColor(CAD_PLACEHOLDER_BORDER), 1.2, Qt.DashLine) + painter.setPen(pen) + painter.drawRect(self.rect().adjusted(12, 12, -12, -12)) + painter.setPen(QColor(CAD_PLACEHOLDER_TEXT)) painter.drawText(self.rect(), Qt.AlignCenter, "No section") return @@ -337,8 +349,8 @@ def paintEvent(self, event): painter.scale(scale, -scale) # flip Y for engineering orientation painter.translate(-combined.center()) - pen = QPen(QColor("#90AF13"), 1.8 / max(scale, 1e-3)) - fill_brush = QColor("#BBE31A") + pen = QPen(QColor(CAD_OUTLINE), 1.8 / max(scale, 1e-3)) + fill_brush = QColor(CAD_SHAPE_FILL) for path in self._geometry: painter.setPen(pen) @@ -435,12 +447,12 @@ def _draw_channel_dimensions(self, painter: QPainter, bbox: QRectF, scale: float # For double channel, show tw at the center where the two webs meet, but keep it visible self._draw_dim_line_h(painter, scale, -tw, 0, y_top - offset, "t", self._fmt_val(tw), subscript="w", outer_arrows=True, label_pos="below") - helper_pen = QPen(QColor("#000000"), 1.2 / max(scale, 1e-3)) + helper_pen = QPen(QColor(CAD_DIMENSION), 1.2 / max(scale, 1e-3)) painter.setPen(helper_pen) start_y = y_top painter.drawLine(QPointF(-tw, start_y), QPointF(0, start_y)) # Dashed leader lines from the web edges up to the dimension line to show what tw measures - dash_pen = QPen(QColor("#000000"), 0.9 / max(scale, 1e-3), Qt.DashLine) + dash_pen = QPen(QColor(CAD_DIMENSION), 0.9 / max(scale, 1e-3), Qt.DashLine) painter.setPen(dash_pen) # Draw from bottom of flange (y_top + tf) to dimension line (y_top - offset) painter.drawLine(QPointF(-tw, start_y + tf), QPointF(-tw, y_top - offset)) @@ -460,7 +472,7 @@ def _draw_dim_line_h(self, painter: QPainter, scale: float, symbol: str, value: str, subscript: str = None, outer_arrows: bool = False, label_pos: str = "above") -> None: """Draw horizontal dimension line with arrows and label.""" - dim_pen = QPen(QColor("#000000"), 0.8 / max(scale, 1e-3)) + dim_pen = QPen(QColor(CAD_DIMENSION), 0.8 / max(scale, 1e-3)) painter.setPen(dim_pen) painter.setBrush(Qt.NoBrush) @@ -475,7 +487,7 @@ def _draw_dim_line_h(self, painter: QPainter, scale: float, # Arrowheads - keep consistent pixel size by scaling down in world space (3:1 ratio) arrow_length = 9.0 / max(scale, 1e-3) arrow_half_width = 3.0 / max(scale, 1e-3) - painter.setBrush(QColor("#000000")) # Fill the arrowheads + painter.setBrush(QColor(CAD_DIMENSION)) # Fill the arrowheads if outer_arrows: # Arrows pointing inward from outside (for small dimensions) ext_len = 12.0 @@ -522,7 +534,7 @@ def _draw_dim_line_v(self, painter: QPainter, scale: float, symbol: str, value: str, subscript: str = None, outer_arrows: bool = False, label_right: bool = False) -> None: """Draw vertical dimension line with arrows and label.""" - dim_pen = QPen(QColor("#000000"), 0.8 / max(scale, 1e-3)) + dim_pen = QPen(QColor(CAD_DIMENSION), 0.8 / max(scale, 1e-3)) painter.setPen(dim_pen) painter.setBrush(Qt.NoBrush) @@ -537,7 +549,7 @@ def _draw_dim_line_v(self, painter: QPainter, scale: float, # Arrowheads - keep consistent pixel size by scaling down in world space (3:1 ratio) arrow_length = 9.0 / max(scale, 1e-3) arrow_half_width = 3.0 / max(scale, 1e-3) - painter.setBrush(QColor("#000000")) # Fill the arrowheads + painter.setBrush(QColor(CAD_DIMENSION)) # Fill the arrowheads if outer_arrows: # Arrows pointing inward from outside (for small dimensions) ext_len = 12.0 @@ -650,7 +662,7 @@ def _draw_subscript_label(self, painter: QPainter, scale: float, text_height = fm_main.height() # Background rect: slightly padded bg_rect = QRectF(start_x - 2, py - text_height + 4, total_width + 4, text_height) - painter.fillRect(bg_rect, QColor("#0f0f0f")) + painter.fillRect(bg_rect, QColor(255, 255, 255, 235)) # Draw function for a single pass def draw_segments(color: QColor, offset_x: float = 0, offset_y: float = 0): @@ -662,7 +674,7 @@ def draw_segments(color: QColor, offset_x: float = 0, offset_y: float = 0): painter.drawText(QPointF(cursor_x, py + y_shift + offset_y), text) cursor_x += fm.horizontalAdvance(text) - draw_segments(QColor("#000000")) + draw_segments(QColor(CAD_DIMENSION)) painter.restore() From 7275d48eb03e50394700113e3af30db45d3be72e Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Wed, 25 Feb 2026 17:35:24 +0530 Subject: [PATCH 048/225] Connect CAD update when value changed --- src/osdagbridge/desktop/ui/docks/input_dock.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 4d4e620f9..963c6f7dc 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -1094,6 +1094,9 @@ def _create_input_widget(self, key, field_type, values, validator, metadata): if field_type == TYPE_COMBOBOX: widget = NoScrollComboBox() + # Connect instant 2D CAD update + # widget.currentTextChanged.connect(self.emit_value_changed) + apply_field_style(widget) if values: widget.addItems(values) @@ -1120,6 +1123,9 @@ def _create_input_widget(self, key, field_type, values, validator, metadata): pass elif field_type == TYPE_TEXTBOX: widget = QLineEdit() + # Connect instant 2D CAD update + # widget.textChanged.connect(self.emit_value_changed) + apply_field_style(widget) validator_instance = self.get_validator(validator) if validator_instance: From 34d99af328ac7ea6c9011ac4783a15290a421842 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Sat, 28 Feb 2026 17:02:32 +0530 Subject: [PATCH 049/225] fix: 2d cad update on input dock value changed Collect values in get_all_input_values() using key and self.input_dock_widget --- .gitignore | 1 + src/osdagbridge/core/utils/common.py | 2 +- .../desktop/ui/docks/cad_dual_view.py | 4 +- .../desktop/ui/docks/input_dock.py | 66 +++++++++++++------ src/osdagbridge/desktop/ui/template_page.py | 1 + 5 files changed, 52 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 0dd896628..51234242b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.py[codz] *$py.class .DS_Store +*/.vscode/* # C extensions *.so diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index 553d8dea4..b8bed19aa 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -557,7 +557,7 @@ def connectdb(table_name, popup=None): GPa = kilo * MPa kPa = kilo * Pa -KEY_FOOTPATH = ["None", "Single Side", "Both Sides"] +KEY_FOOTPATH = "Footpath" KEY_SAFETY_KERB_MIN_WIDTH = 750 # in mm KEY_SAFETY_KERB_PLACEMENT = ['Single Side', 'Both Sides', ] KEY_FOOTPATH_CLEAR_MIN_WIDTH = 1500 # in mm diff --git a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py index 81056f64a..2994a8a70 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py @@ -193,8 +193,8 @@ def update_from_osdag_inputs(self, input_dict): params['footpath_thickness'] = float(input_dict[KEY_FOOTPATH_THICKNESS]) # Map footpath configuration - if "footpath" in input_dict: - footpath_value = input_dict["footpath"] + if KEY_FOOTPATH in input_dict: + footpath_value = input_dict[KEY_FOOTPATH] if footpath_value == "None": params['footpath_config'] = 'none' elif footpath_value == "Single Sided": diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 963c6f7dc..8f32878d9 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -200,6 +200,7 @@ def paintEvent(self, event): self.update_lock_icon() return super().paintEvent(event) + # Collect all the input dock data to update 2D Cad def get_all_input_values(self): """Collect all input values from the input dock""" input_values = {} @@ -213,34 +214,57 @@ def get_numeric_value(widget): return float(text) except ValueError: pass + elif isinstance(widget, QComboBox): + text = widget.currentText().strip() + return text return None + # # Collect all the Input Fields + # for tupple in self.backend.input_values(): + # if tupple[2] in [TYPE_COMBOBOX, TYPE_TEXTBOX]: + # key = tupple[0] + # widget = self.input_dock_widget.findChild(QWidget, key) + # if widget: + # val = get_numeric_value(widget) + # if val is not None: + # input_values[key] = val + # else: + # if key == KEY_SKEW_ANGLE: + # input_values[key] = 0.0 # Default skew angle + + # Hard code temporarily, will genralize after fixing inputdock generalization + + # Collect span - if hasattr(self, 'span_input'): - val = get_numeric_value(self.span_input) - if val is not None: - input_values[KEY_SPAN] = val + widget = self.input_dock_widget.findChild(QWidget, KEY_SPAN) + val = get_numeric_value(widget) + if val is not None: + input_values[KEY_SPAN] = get_numeric_value(widget) # Collect carriageway width - if hasattr(self, 'carriageway_input'): - val = get_numeric_value(self.carriageway_input) - if val is not None: - input_values[KEY_CARRIAGEWAY_WIDTH] = val + widget = self.input_dock_widget.findChild(QWidget, KEY_CARRIAGEWAY_WIDTH) + val = get_numeric_value(widget) + if val is not None: + input_values[KEY_CARRIAGEWAY_WIDTH] = get_numeric_value(widget) # Collect skew angle - if hasattr(self, 'skew_input'): - val = get_numeric_value(self.skew_input) - if val is not None: - input_values[KEY_SKEW_ANGLE] = val - else: - input_values[KEY_SKEW_ANGLE] = 0.0 # Default + widget = self.input_dock_widget.findChild(QWidget, KEY_SKEW_ANGLE) + val = get_numeric_value(widget) + if val is not None: + input_values[KEY_SKEW_ANGLE] = get_numeric_value(widget) + else: + input_values[KEY_SKEW_ANGLE] = 0.0 # Default # Collect footpath - if hasattr(self, 'footpath_combo'): - input_values["footpath"] = self.footpath_combo.currentText() + widget = self.input_dock_widget.findChild(QWidget, KEY_FOOTPATH) + val = get_numeric_value(widget) + if val is not None: + input_values[KEY_FOOTPATH] = get_numeric_value(widget) # Collect median - if hasattr(self, 'include_median_combo'): + widget = self.input_dock_widget.findChild(QWidget, KEY_INCLUDE_MEDIAN) + val = get_numeric_value(widget) + if val is not None: input_values[KEY_INCLUDE_MEDIAN] = (self.include_median_combo.currentText() == "Yes") # Add default values for parameters that CAD widget needs @@ -429,6 +453,10 @@ def build_left_panel(self, field_list): """) group_container = QWidget() + + # This contains all the dynamically created UI + self.input_dock_widget = group_container + self.input_widget = group_container group_container_layout = QVBoxLayout(group_container) group_container_layout.setContentsMargins(0, 0, 0, 0) @@ -1095,7 +1123,7 @@ def _create_input_widget(self, key, field_type, values, validator, metadata): if field_type == TYPE_COMBOBOX: widget = NoScrollComboBox() # Connect instant 2D CAD update - # widget.currentTextChanged.connect(self.emit_value_changed) + widget.currentTextChanged.connect(self.emit_value_changed) apply_field_style(widget) if values: @@ -1124,7 +1152,7 @@ def _create_input_widget(self, key, field_type, values, validator, metadata): elif field_type == TYPE_TEXTBOX: widget = QLineEdit() # Connect instant 2D CAD update - # widget.textChanged.connect(self.emit_value_changed) + widget.textChanged.connect(self.emit_value_changed) apply_field_style(widget) validator_instance = self.get_validator(validator) diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index c93729456..b70d66394 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -280,6 +280,7 @@ def update_cad_from_inputs(self): return input_values = self.input_dock.get_all_input_values() + # print("[DEBUG] Collected input values from InputDock:", input_values) if not input_values: return From ff6c43bb6746bbf53001d1d6559f893bdd25d3a7 Mon Sep 17 00:00:00 2001 From: khp11 Date: Sat, 28 Feb 2026 20:07:33 +0530 Subject: [PATCH 050/225] steel design/deck design --- .../desktop/ui/dialogs/deck_design.py | 296 ++++++++++++ .../desktop/ui/dialogs/steel_design.py | 95 ++++ .../ui/dialogs/tabs/steel_design_check.py | 273 +++++++++++ .../ui/dialogs/tabs/steel_design_details.py | 431 ++++++++++++++++++ 4 files changed, 1095 insertions(+) create mode 100644 src/osdagbridge/desktop/ui/dialogs/deck_design.py create mode 100644 src/osdagbridge/desktop/ui/dialogs/steel_design.py create mode 100644 src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py create mode 100644 src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py diff --git a/src/osdagbridge/desktop/ui/dialogs/deck_design.py b/src/osdagbridge/desktop/ui/dialogs/deck_design.py new file mode 100644 index 000000000..80407105b --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/deck_design.py @@ -0,0 +1,296 @@ +from PySide6.QtWidgets import ( + QDialog, + QWidget, + QVBoxLayout, + QHBoxLayout, + QGridLayout, + QLabel, + QLineEdit, + QFrame, + QSizePolicy, + QTableWidget, + QTableWidgetItem, + QHeaderView, + QTextEdit, + QSizeGrip, +) +from PySide6.QtCore import Qt + +from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar + + +class NoScrollTable(QTableWidget): + """Passes wheel events to parent scroll area — table never scrolls.""" + def wheelEvent(self, event): + event.ignore() + + +class DeckDesign(QDialog): + + def __init__(self, parent=None): + super().__init__(parent) + self.setObjectName("DeckDesign") + self.resize(1024, 720) + self.setMinimumSize(900, 520) + self.setSizeGripEnabled(True) + self.init_ui() + self.setStyleSheet(""" + QDialog { + background-color: #ffffff; + border: 1px solid #90AF13; + } + """) + + def setupWrapper(self): + self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(1, 1, 1, 1) + main_layout.setSpacing(0) + + self.title_bar = CustomTitleBar() + self.title_bar.setTitle("Deck Design") + main_layout.addWidget(self.title_bar) + + self.content_widget = QWidget(self) + main_layout.addWidget(self.content_widget, 1) + + size_grip = QSizeGrip(self) + size_grip.setFixedSize(16, 16) + + overlay = QHBoxLayout() + overlay.setContentsMargins(0, 0, 4, 4) + overlay.addStretch(1) + overlay.addWidget(size_grip, 0, Qt.AlignBottom | Qt.AlignRight) + main_layout.addLayout(overlay) + + def init_ui(self): + self.setupWrapper() + + main_layout = QVBoxLayout(self.content_widget) + main_layout.setContentsMargins(8, 8, 8, 8) + main_layout.setSpacing(2) + + + + # ── SCROLL AREA ─────────────────────────────────────────────────────── + scroll_area = StyledScrollArea() + + container = QWidget() + container.setStyleSheet("background-color: white;") + + container_layout = QVBoxLayout(container) + container_layout.setContentsMargins(10, 10, 10, 10) + container_layout.setSpacing(12) + + container_layout.addWidget(self._build_properties_section()) + container_layout.addWidget(self._build_reinforcement_section()) + container_layout.addWidget(self._build_design_check_section()) + container_layout.addStretch() + + scroll_area.setWidget(container) + main_layout.addWidget(scroll_area) + + # ── HELPERS — same as steel_design_details.py ───────────────────────────── + + def _create_card_frame(self): + frame = QFrame() + frame.setObjectName("girderCard") + frame.setStyleSheet( + "QFrame#girderCard { background-color: white; border: 1px solid #cfcfcf; border-radius: 10px; }" + ) + return frame + + def _create_label(self, text): + label = QLabel(text) + label.setStyleSheet( + "font-size: 12px; color: #2f2f2f; font-weight: 600; background: transparent;" + ) + label.setAutoFillBackground(False) + return label + + def _create_small_label(self, text): + label = QLabel(text) + label.setStyleSheet("font-size: 10px; color: #5a5a5a; background: transparent;") + label.setAutoFillBackground(False) + return label + + def _readonly_field(self): + field = QLineEdit() + field.setReadOnly(True) + field.setFixedWidth(150) + field.setMinimumHeight(28) + field.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + apply_field_style(field) + return field + + def _make_grid(self): + grid = QGridLayout() + grid.setContentsMargins(0, 0, 0, 0) + grid.setHorizontalSpacing(16) + grid.setVerticalSpacing(12) + grid.setColumnMinimumWidth(0, 180) + grid.setColumnStretch(0, 0) + grid.setColumnStretch(1, 0) + grid.setColumnStretch(2, 1) + return grid + + def _add_row(self, grid, row, text, widget): + grid.addWidget(self._create_small_label(text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) + grid.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) + return row + 1 + + # ── SECTIONS ────────────────────────────────────────────────────────────── + + def _build_properties_section(self): + card = self._create_card_frame() + card.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred) + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(18, 16, 18, 16) + card_layout.setSpacing(10) + card_layout.addWidget(self._create_label("Deck Properties:")) + + grid = self._make_grid() + self.grade_field = self._readonly_field() + self.thickness_field = self._readonly_field() + + r = 0 + r = self._add_row(grid, r, "Grade of Material:", self.grade_field) + r = self._add_row(grid, r, "Thickness (mm):", self.thickness_field) + + card_layout.addLayout(grid) + return card + + def _build_reinforcement_section(self): + card = self._create_card_frame() + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(18, 16, 18, 16) + card_layout.setSpacing(10) + card_layout.addWidget(self._create_label("Reinforcement Details:")) + + table_frame = QFrame() + table_frame.setStyleSheet(""" + QFrame { + border: 1px solid #b0b0b0; + border-radius: 0px; + background: white; + } + """) + table_frame.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + table_frame_layout = QVBoxLayout(table_frame) + table_frame_layout.setContentsMargins(0, 0, 0, 0) + table_frame_layout.setSpacing(0) + + self.rebar_table = NoScrollTable() + self.rebar_table.setRowCount(2) + self.rebar_table.setColumnCount(6) + self.rebar_table.setHorizontalHeaderLabels([ + "Position", + "Material Yield\nStrength (MPa)", + "Diameter (mm)", + "Spacing (mm)", + "Clear Cover from\nTop (mm)", + "Area (mm\u00b2)", + ]) + + for row, name in enumerate(["Top Layer", "Bottom Layer"]): + item = QTableWidgetItem(name) + item.setFlags(Qt.ItemIsEnabled) + self.rebar_table.setItem(row, 0, item) + for col in range(1, 6): + empty = QTableWidgetItem("") + empty.setFlags(Qt.ItemIsEnabled) + self.rebar_table.setItem(row, col, empty) + + self.rebar_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.rebar_table.verticalHeader().setVisible(False) + self.rebar_table.verticalHeader().setDefaultSectionSize(30) + self.rebar_table.setEditTriggers(QTableWidget.NoEditTriggers) + self.rebar_table.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.rebar_table.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.rebar_table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + + self.rebar_table.setStyleSheet(""" + QTableWidget { + background-color: white; + gridline-color: #cfcfcf; + color: black; + font-size: 10px; + border: none; + } + QHeaderView::section { + background-color: #EAEAEA; + color: black; + font-weight: bold; + border: none; + border-right: 1px solid #cfcfcf; + border-bottom: 1px solid #cfcfcf; + padding: 3px; + font-size: 10px; + } + QHeaderView::section:last { + border-right: none; + } + QTableWidget::item { + color: black; + } + """) + + self.rebar_table.setViewportMargins(0, 0, -1, 0) + + table_frame_layout.addWidget(self.rebar_table) + self.rebar_table.resizeRowsToContents() + def _fit_table(): + h = (self.rebar_table.horizontalHeader().height() + + sum(self.rebar_table.rowHeight(r) for r in range(self.rebar_table.rowCount())) + + 2) + self.rebar_table.setFixedHeight(h) + table_frame.setFixedHeight(h) + from PySide6.QtCore import QTimer + QTimer.singleShot(0, _fit_table) + + card_layout.addWidget(table_frame) + return card + + def _build_design_check_section(self): + card = self._create_card_frame() + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(18, 16, 18, 16) + card_layout.setSpacing(10) + card_layout.addWidget(self._create_label("Design Check:")) + + self.design_check_text = QTextEdit() + self.design_check_text.setReadOnly(True) + self.design_check_text.setMinimumHeight(200) + self.design_check_text.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self.design_check_text.setStyleSheet(""" + QTextEdit { + background-color: white; + border: none; + font-size: 10px; + color: #222; + } + """) + card_layout.addWidget(self.design_check_text) + return card + + # ── PUBLIC API ──────────────────────────────────────────────────────────── + + def load_data(self, cad_state: dict): + if not cad_state: + return + + self.grade_field.setText(str(cad_state.get("deck_grade", ""))) + self.thickness_field.setText(str(cad_state.get("deck_thickness", ""))) + + rebar_map = {0: "top", 1: "bottom"} + for row, prefix in rebar_map.items(): + self.rebar_table.setItem(row, 1, QTableWidgetItem(str(cad_state.get(f"rebar_{prefix}_yield", "")))) + self.rebar_table.setItem(row, 2, QTableWidgetItem(str(cad_state.get(f"rebar_{prefix}_dia", "")))) + self.rebar_table.setItem(row, 3, QTableWidgetItem(str(cad_state.get(f"rebar_{prefix}_spacing", "")))) + self.rebar_table.setItem(row, 4, QTableWidgetItem(str(cad_state.get(f"rebar_{prefix}_cover", "")))) + self.rebar_table.setItem(row, 5, QTableWidgetItem(str(cad_state.get(f"rebar_{prefix}_area", "")))) + + self.design_check_text.setPlainText(str(cad_state.get("deck_design_check", ""))) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/steel_design.py b/src/osdagbridge/desktop/ui/dialogs/steel_design.py new file mode 100644 index 000000000..93c6a7d10 --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/steel_design.py @@ -0,0 +1,95 @@ +from PySide6.QtWidgets import ( + QDialog, QVBoxLayout, QHBoxLayout, QTabWidget, QWidget, QSizeGrip, QSizePolicy +) +from PySide6.QtCore import Qt + +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.tabs.steel_design_details import SteelDesignDetailsTab +from osdagbridge.desktop.ui.dialogs.tabs.steel_design_analysis import SteelDesignAnalysisTab +from osdagbridge.desktop.ui.dialogs.tabs.steel_design_check import SteelDesignCheckTab + + +class SteelDesign(QDialog): + + def __init__(self, parent=None): + super().__init__(parent) + self._main_window = parent + self.setObjectName("SteelDesign") + self.resize(1024, 720) + self.setMinimumSize(900, 520) + self.setSizeGripEnabled(True) + self.init_ui() + self.setStyleSheet(""" + QDialog { + background-color: #ffffff; + border: 1px solid #90AF13; + } + """) + + def setupWrapper(self): + self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(1, 1, 1, 1) + main_layout.setSpacing(0) + + self.title_bar = CustomTitleBar(parent=self) + self.title_bar.setTitle("Steel Design") + main_layout.addWidget(self.title_bar) + + self.content_widget = QWidget(self) + main_layout.addWidget(self.content_widget, 1) + + size_grip = QSizeGrip(self) + size_grip.setFixedSize(16, 16) + + overlay = QHBoxLayout() + overlay.setContentsMargins(0, 0, 4, 4) + overlay.addStretch(1) + overlay.addWidget(size_grip, 0, Qt.AlignBottom | Qt.AlignRight) + main_layout.addLayout(overlay) + + def init_ui(self): + self.setupWrapper() + + main_layout = QVBoxLayout(self.content_widget) + main_layout.setContentsMargins(8, 8, 8, 8) + main_layout.setSpacing(2) + + + + # ── Tabs ────────────────────────────────────────────────────────────── + self.tabs = QTabWidget() + self.tabs.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self.tabs.setDocumentMode(True) + self.tabs.tabBar().setExpanding(True) + self.tabs.tabBar().setUsesScrollButtons(False) + self.tabs.setStyleSheet(""" + QTabWidget::pane { border: none; } + QTabBar { qproperty-drawBase: 0; } + QTabBar::tab { + background: #E6E6E6; + color: black; + border: 1px solid #CCCCCC; + padding: 8px 0px; + border-radius: 8px; + margin-right: 2px; + } + QTabBar::tab:selected { + background: #90AF13; + color: white; + font-weight: bold; + border: 1px solid #90AF13; + } + QTabBar::tab:hover { background: #DADADA; } + """) + + self.details_tab = SteelDesignDetailsTab(self) + self.tabs.addTab(self.details_tab, "Details") + self.tabs.addTab(SteelDesignAnalysisTab(self), "Analysis Results") + self.tabs.addTab(SteelDesignCheckTab(self), "Design Check") + + main_layout.addWidget(self.tabs) + + if hasattr(self._main_window, "cad_state"): + self.details_tab.load_data(self._main_window.cad_state) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py new file mode 100644 index 000000000..485b1c31b --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_check.py @@ -0,0 +1,273 @@ +from PySide6.QtWidgets import ( + QWidget, + QVBoxLayout, + QHBoxLayout, + QGridLayout, + QLabel, + QLineEdit, + QFrame, + QSizePolicy, + QTextEdit, +) +from PySide6.QtCore import Qt + +from osdagbridge.desktop.ui.docks.output_dock import ( + NoScrollComboBox, +) +from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea + +# From load_combination_tab.py defaults + output_dock +LOAD_COMBINATIONS = [ + "Envelope", + "DL + LL", + "1.35 DL + 1.5 LL", + "DL", "SIDL", "LL", + "WL", "EL", "IMF", "TL", +] + +# 8 design checks from the screenshot — 2 columns × 4 rows +DESIGN_CHECKS = [ + ("flexure", "Strength Limit State (Flexure)"), + ("shear_long_trans", "Resistance to Longitudinal and Transverse Shear"), + ("shear", "Strength Limit State (Shear)"), + ("fatigue", "Resistance to Fatigue"), + ("interaction", "Interaction"), + ("stress", "Stress Limitation"), + ("ltb", "Lateral Torsional Buckling"), + ("deflection", "Deflection and Crack Control"), +] + + +class SteelDesignCheckTab(QWidget): + + def __init__(self, parent=None): + self.check_outputs = {} # key → QTextEdit for each check result + + super().__init__(parent) + + # ── identical white bg to SteelDesignDetailsTab ─────────────────────── + self.setStyleSheet("background-color: white;") + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(0, 0, 0, 0) + main_layout.setSpacing(0) + + scroll_area = StyledScrollArea() + + container = QWidget() + container.setStyleSheet("background-color: white;") + + container_layout = QVBoxLayout(container) + container_layout.setContentsMargins(18, 6, 18, 12) + container_layout.setSpacing(16) + + # ── TOP BAR: Member ID (left) + Load Combination (right) ───────────── + container_layout.addLayout(self._build_top_bar()) + + # ── CHECK CARDS GRID: 2 columns ─────────────────────────────────────── + container_layout.addLayout(self._build_checks_grid()) + + container_layout.addStretch() + + scroll_area.setWidget(container) + main_layout.addWidget(scroll_area) + + # ── HELPERS — exact copy from steel_design_details.py ──────────────────── + + def _section_card(self, title): + card = QFrame() + card.setObjectName("sectionCard") + card.setStyleSheet(""" + QFrame#sectionCard { + background-color: white; + border: none; + } + """) + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(0, 0, 0, 0) + card_layout.setSpacing(10) + + title_label = QLabel(title) + title_label.setStyleSheet("font-size: 12px; font-weight: bold; color: #000;") + card_layout.addWidget(title_label) + + return card, card_layout + + def _row_label(self, text): + lbl = QLabel(text) + lbl.setStyleSheet("font-size: 13px; color: #000;") + lbl.setMinimumWidth(180) + return lbl + + def _make_grid(self): + grid = QGridLayout() + grid.setContentsMargins(0, 0, 0, 0) + grid.setHorizontalSpacing(24) + grid.setVerticalSpacing(10) + grid.setColumnStretch(0, 0) + grid.setColumnStretch(1, 0) + grid.setColumnStretch(2, 1) + return grid + + def _readonly_field(self): + field = QLineEdit() + field.setReadOnly(True) + field.setFixedWidth(150) + field.setFixedHeight(22) + field.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + apply_field_style(field) + return field + + def _add_row(self, grid, row, text, widget): + grid.addWidget(self._row_label(text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) + grid.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) + return row + 1 + + # ── TOP BAR ─────────────────────────────────────────────────────────────── + + def _build_top_bar(self): + bar = QHBoxLayout() + bar.setSpacing(24) + bar.setContentsMargins(0, 0, 0, 0) + + # Member ID + member_lbl = QLabel("Member ID") + member_lbl.setStyleSheet("font-size: 11px; color: #000;") + + self.member_combo = NoScrollComboBox() + apply_field_style(self.member_combo) + self.member_combo.setFixedWidth(150) + self.member_combo.setFixedHeight(22) + self.member_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.member_combo.addItems(["All", "Girder 1", "Girder 2"]) + + bar.addWidget(member_lbl) + bar.addWidget(self.member_combo) + + bar.addSpacing(40) + + # Load Combination + load_lbl = QLabel("Load Combination:") + load_lbl.setStyleSheet("font-size: 11px; color: #000;") + + self.load_combo = NoScrollComboBox() + apply_field_style(self.load_combo) + self.load_combo.setFixedWidth(150) + self.load_combo.setFixedHeight(22) + self.load_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.load_combo.addItems(LOAD_COMBINATIONS) + + bar.addWidget(load_lbl) + bar.addWidget(self.load_combo) + bar.addStretch() + + return bar + + # ── CHECK CARDS GRID ────────────────────────────────────────────────────── + + def _build_checks_grid(self): + """ + 2-column grid of check cards. + Left column: flexure, shear, interaction, LTB + Right column: longitudinal/transverse shear, fatigue, stress, deflection + """ + grid = QGridLayout() + grid.setHorizontalSpacing(16) + grid.setVerticalSpacing(16) + grid.setContentsMargins(0, 0, 0, 0) + grid.setColumnStretch(0, 1) + grid.setColumnStretch(1, 1) + + for idx, (key, title) in enumerate(DESIGN_CHECKS): + col = idx % 2 + row = idx // 2 + card = self._build_check_card(key, title) + grid.addWidget(card, row, col) + + return grid + + def _build_check_card(self, key, title): + """ + Single check card: + - Rounded border matching the screenshot style + - Bold title at top + - Expanding QTextEdit output area below (readonly) + """ + card = QFrame() + card.setObjectName("checkCard") + card.setStyleSheet(""" + QFrame#checkCard { + background-color: white; + border: 1px solid #CFCFCF; + border-radius: 8px; + } + """) + card.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(12, 10, 12, 10) + card_layout.setSpacing(8) + + # Title + title_lbl = QLabel(title) + title_lbl.setStyleSheet(""" + QLabel { + font-size: 11px; + font-weight: bold; + color: #000; + background: transparent; + border: none; + } + """) + title_lbl.setWordWrap(True) + card_layout.addWidget(title_lbl) + + # Output area — readonly, expandable, shows check results + output = QTextEdit() + output.setReadOnly(True) + output.setFixedHeight(60) + output.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + output.setStyleSheet(""" + QTextEdit { + background-color: white; + border: none; + font-size: 10px; + color: #333; + } + """) + card_layout.addWidget(output) + + self.check_outputs[key] = output + return card + + # ── PUBLIC API ──────────────────────────────────────────────────────────── + + def set_girder_count(self, count): + """Mirrors GirderDetailsTab.set_girder_count.""" + self.member_combo.clear() + self.member_combo.addItems(["All"] + [f"Girder {i}" for i in range(1, count + 1)]) + + def load_data(self, cad_state: dict): + """Populate from cad_state — populate girder count if available.""" + if not cad_state: + return + try: + self.set_girder_count(int(cad_state.get("no_of_girders", 2))) + except (ValueError, TypeError): + pass + + # Populate check output areas if results are in cad_state + for key, output in self.check_outputs.items(): + result = cad_state.get(f"check_{key}", "") + output.setPlainText(str(result) if result else "") + + def set_check_result(self, key: str, text: str): + """Set result text for a specific check card.""" + if key in self.check_outputs: + self.check_outputs[key].setPlainText(text) + + def clear_results(self): + """Clear all check output areas.""" + for output in self.check_outputs.values(): + output.clear() \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py new file mode 100644 index 000000000..d7f075ec8 --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_details.py @@ -0,0 +1,431 @@ +from PySide6.QtWidgets import ( + QWidget, + QVBoxLayout, + QHBoxLayout, + QGridLayout, + QLabel, + QLineEdit, + QFrame, + QSizePolicy, + QTableWidget, + QTableWidgetItem, + QHeaderView, +) +from PySide6.QtCore import Qt + +from osdagbridge.desktop.ui.docks.output_dock import ( + NoScrollComboBox, +) + +from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style + + +from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea + + +class NoScrollTable(QTableWidget): + """QTableWidget that passes wheel events up to the parent scroll area.""" + def wheelEvent(self, event): + event.ignore() + + +class SteelDesignDetailsTab(QWidget): + + def __init__(self, parent=None): + self.member_fields = {} + self.dim_fields = {} + self.shear_fields = {} + self.section_fields = {} + self.stiffener_fields = {} + + super().__init__(parent) + + self.setStyleSheet("background-color: white;") + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(0, 0, 0, 0) + main_layout.setSpacing(0) + + scroll_area = StyledScrollArea() + + container = QWidget() + container.setStyleSheet("background-color: white;") + + # Same outer margins/spacing as girder_details_tab content_layout + container_layout = QVBoxLayout(container) + container_layout.setContentsMargins(10, 10, 10, 10) + container_layout.setSpacing(12) + + # ── TOP ROW: Member Info card (left) + CAD placeholder (right) ─────── + top_row = QHBoxLayout() + top_row.setSpacing(12) + top_row.setContentsMargins(0, 0, 0, 0) + top_row.addWidget(self._build_member_section(), 2) + top_row.addWidget(self._build_top_cad_placeholder(), 0) + container_layout.addLayout(top_row) + + # ── BODY: Dimensional + Shear (left) | Section Properties (right) ──── + body_row = QHBoxLayout() + body_row.setSpacing(12) + body_row.setContentsMargins(0, 0, 0, 0) + + left_col = QVBoxLayout() + left_col.setSpacing(12) + left_col.setContentsMargins(0, 0, 0, 0) + left_col.addWidget(self._build_dimensional_section()) + left_col.addWidget(self._build_shear_section()) + left_col.addStretch() + + right_col = QVBoxLayout() + right_col.setSpacing(12) + right_col.setContentsMargins(0, 0, 0, 0) + right_col.addWidget(self._build_section_properties_section()) + right_col.addStretch() + + body_row.addLayout(left_col, 2) + body_row.addLayout(right_col, 1) + container_layout.addLayout(body_row) + + # ── STIFFENER TABLE ─────────────────────────────────────────────────── + container_layout.addWidget(self._build_stiffener_section()) + + # ── BOTTOM CAD placeholder ──────────────────────────────────────────── + container_layout.addWidget(self._build_bottom_cad_section()) + + container_layout.addStretch() + + scroll_area.setWidget(container) + main_layout.addWidget(scroll_area) + + # ── HELPERS: exact girder_details_tab pattern ───────────────────────────── + + def _create_card_frame(self): + """Outer card — same as GirderDetailsTab._create_card_frame.""" + frame = QFrame() + frame.setObjectName("girderCard") + frame.setStyleSheet( + "QFrame#girderCard { background-color: white; border: 1px solid #cfcfcf; border-radius: 10px; }" + ) + return frame + + def _create_label(self, text): + """Section title label — same as GirderDetailsTab._create_label.""" + label = QLabel(text) + label.setStyleSheet( + "font-size: 12px; color: #2f2f2f; font-weight: 600; background: transparent;" + ) + label.setAutoFillBackground(False) + return label + + def _create_small_label(self, text): + """Row field label — same as GirderDetailsTab._create_small_label.""" + label = QLabel(text) + label.setStyleSheet("font-size: 10px; color: #5a5a5a; background: transparent;") + label.setAutoFillBackground(False) + return label + + def _readonly_field(self): + """Readonly output field matching inner_box min-height.""" + field = QLineEdit() + field.setReadOnly(True) + field.setFixedWidth(150) + field.setMinimumHeight(28) + field.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + apply_field_style(field) + return field + + def _make_grid(self): + """Grid matching girder_details_tab inputs_grid spacing.""" + grid = QGridLayout() + grid.setContentsMargins(0, 0, 0, 0) + grid.setHorizontalSpacing(16) + grid.setVerticalSpacing(12) + grid.setColumnMinimumWidth(0, 180) + grid.setColumnStretch(0, 0) + grid.setColumnStretch(1, 0) + grid.setColumnStretch(2, 1) + return grid + + def _add_row(self, grid, row, text, widget): + grid.addWidget(self._create_small_label(text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) + grid.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) + return row + 1 + + # ── SECTIONS ────────────────────────────────────────────────────────────── + + def _build_member_section(self): + card = self._create_card_frame() + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(18, 16, 18, 16) + card_layout.setSpacing(10) + card_layout.addWidget(self._create_label("Member Info:")) + + grid = self._make_grid() + + self.member_combo = NoScrollComboBox() + apply_field_style(self.member_combo) + self.member_combo.setFixedWidth(150) + self.member_combo.setMinimumHeight(28) + self.member_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + + self.grade_field = self._readonly_field() + self.type_field = self._readonly_field() + + r = 0 + r = self._add_row(grid, r, "Member ID:", self.member_combo) + r = self._add_row(grid, r, "Grade of Material:", self.grade_field) + r = self._add_row(grid, r, "Type:", self.type_field) + + card_layout.addLayout(grid) + + self.member_fields["member_id"] = self.member_combo + self.member_fields["grade_of_material"] = self.grade_field + self.member_fields["section_type"] = self.type_field + + return card + + def _build_dimensional_section(self): + card = self._create_card_frame() + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(18, 16, 18, 16) + card_layout.setSpacing(10) + card_layout.addWidget(self._create_label("Dimensional Details:")) + + grid = self._make_grid() + labels = { + "section_designation": "Section Designation", + "section_class": "Section Class", + "total_depth": "Total Depth (mm)", + "web_thickness": "Web Thickness (mm)", + "top_flange_width": "Top Flange Width (mm)", + "top_flange_thickness": "Top Flange Thickness (mm)", + "bottom_flange_width": "Bottom Flange Width (mm)", + "bottom_flange_thickness": "Bottom Flange Thickness (mm)", + "torsional_restraint": "Torsional Restraint", + "warping_restraint": "Warping Restraint", + "web_type": "Web Type", + "effective_slab_width": "Effective Width of Slab (mm)", + } + r = 0 + for key, text in labels.items(): + field = self._readonly_field() + r = self._add_row(grid, r, text, field) + self.dim_fields[key] = field + + card_layout.addLayout(grid) + return card + + def _build_shear_section(self): + card = self._create_card_frame() + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(18, 16, 18, 16) + card_layout.setSpacing(10) + card_layout.addWidget(self._create_label("Shear Connector Details:")) + + grid = self._make_grid() + labels = { + "shear_material": "Material", + "shear_diameter": "Diameter (mm)", + "shear_height": "Height (mm)", + "shear_transverse_spacing": "Transverse Spacing (mm)", + "shear_studs_per_section": "No. of Shear Studs per Section", + "shear_longitudinal_spacing": "Average Longitudinal Spacing (mm)", + } + r = 0 + for key, text in labels.items(): + field = self._readonly_field() + r = self._add_row(grid, r, text, field) + self.shear_fields[key] = field + + card_layout.addLayout(grid) + return card + + def _build_section_properties_section(self): + card = self._create_card_frame() + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(18, 16, 18, 16) + card_layout.setSpacing(10) + card_layout.addWidget(self._create_label("Section Properties:")) + + grid = self._make_grid() + labels = { + "mass": "Mass, M (Kg/m)", + "area": "Sectional Area (cm\u00b2)", + "iz": "2nd Moment of Area, Iz (cm\u2074)", + "iv": "2nd Moment of Area, Iv (cm\u2074)", + "rz": "Radius of Gyration, rz (cm)", + "rv": "Radius of Gyration, rv (cm)", + "zz": "Elastic Modulus, Zz (cm\u00b3)", + "zv": "Elastic Modulus, Zv (cm\u00b3)", + "zuz": "Plastic Modulus, Zuz (cm\u00b3)", + "zuv": "Plastic Modulus, Zuv (cm\u00b3)", + "it": "Torsion Constant, It (cm\u2074)", + "iw": "Warping Constant, Iw (cm\u2076)", + } + r = 0 + for key, text in labels.items(): + field = self._readonly_field() + r = self._add_row(grid, r, text, field) + self.section_fields[key] = field + + card_layout.addLayout(grid) + return card + + # ── CAD PLACEHOLDERS ────────────────────────────────────────────────────── + + def _build_top_cad_placeholder(self): + self.cad_placeholder = QLabel() + self.cad_placeholder.setFixedSize(385, 160) + self.cad_placeholder.setAlignment(Qt.AlignCenter) + self.cad_placeholder.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.cad_placeholder.setStyleSheet(""" + QLabel { + border: 1px solid #cfcfcf; + background-color: #F5F5F5; + border-radius: 10px; + } + """) + return self.cad_placeholder + + def _build_bottom_cad_section(self): + card = self._create_card_frame() + layout = QVBoxLayout(card) + layout.setContentsMargins(18, 16, 18, 16) + + bottom_cad = QLabel() + bottom_cad.setFixedSize(400, 200) + bottom_cad.setAlignment(Qt.AlignCenter) + bottom_cad.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + bottom_cad.setStyleSheet(""" + QLabel { + border: 1px solid #cfcfcf; + background-color: #F5F5F5; + border-radius: 6px; + } + """) + layout.addWidget(bottom_cad, alignment=Qt.AlignCenter) + return card + + # ── STIFFENER TABLE ─────────────────────────────────────────────────────── + + def _build_stiffener_section(self): + card = self._create_card_frame() + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(18, 16, 18, 16) + card_layout.setSpacing(10) + + card_layout.addWidget(self._create_label("Stiffener Details:")) + + # ── Wrap table in a QFrame so the border is drawn by the frame, + # not QAbstractScrollArea's viewport (which clips the left edge). + table_frame = QFrame() + table_frame.setStyleSheet(""" + QFrame { + border: 1px solid #b0b0b0; + border-radius: 0px; + background: white; + } + """) + table_frame.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + table_frame_layout = QVBoxLayout(table_frame) + # right margin -1 pulls table 1px under the frame border, hiding the last gridline + table_frame_layout.setContentsMargins(0, 0, 0, 0) + table_frame_layout.setSpacing(0) + + self.stiffener_table = NoScrollTable() + self.stiffener_table.setRowCount(3) + self.stiffener_table.setColumnCount(5) + self.stiffener_table.setHorizontalHeaderLabels([ + "Type", "Grade of Material", "Thickness (mm)", "Width (mm)", "Spacing (mm)" + ]) + + for row, name in enumerate(["Intermediate", "Longitudinal", "Bearing"]): + item = QTableWidgetItem(name) + item.setFlags(Qt.ItemIsEnabled) + self.stiffener_table.setItem(row, 0, item) + for col in range(1, 5): + empty = QTableWidgetItem("") + empty.setFlags(Qt.ItemIsEnabled) + self.stiffener_table.setItem(row, col, empty) + + self.stiffener_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.stiffener_table.verticalHeader().setVisible(False) + self.stiffener_table.verticalHeader().setDefaultSectionSize(26) + self.stiffener_table.setEditTriggers(QTableWidget.NoEditTriggers) + self.stiffener_table.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.stiffener_table.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.stiffener_table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + # Use sizeHint-based height after headers/rows are configured + # header ~30px + 3 rows * 26px + 1px bottom = 109px; frame adds 2px + self.stiffener_table.setMinimumHeight(109) + self.stiffener_table.setMaximumHeight(109) + + self.stiffener_table.setStyleSheet(""" + QTableWidget { + background-color: white; + gridline-color: #cfcfcf; + color: black; + font-size: 10px; + border: none; + } + QHeaderView::section { + background-color: #EAEAEA; + color: black; + font-weight: bold; + border: none; + border-right: 1px solid #cfcfcf; + border-bottom: 1px solid #cfcfcf; + padding: 3px; + font-size: 10px; + } + QHeaderView::section:last { + border-right: none; + } + QTableWidget::item { + color: black; + } + """) + + # Pull right edge of viewport 1px left so last gridline sits under frame border + self.stiffener_table.setViewportMargins(0, 0, -1, 0) + table_frame_layout.addWidget(self.stiffener_table) + table_frame.setMinimumHeight(111) + table_frame.setMaximumHeight(111) + card_layout.addWidget(table_frame) + return card + + # ── LOAD DATA (unchanged logic) ─────────────────────────────────────────── + + def load_data(self, cad_state: dict): + if not cad_state: + return + + for key, field in self.member_fields.items(): + value = cad_state.get(key, "") + if isinstance(field, NoScrollComboBox): + field.clear() + field.addItem(str(value)) + else: + field.setText(str(value)) + + for key, field in self.dim_fields.items(): + field.setText(str(cad_state.get(key, ""))) + + for key, field in self.shear_fields.items(): + field.setText(str(cad_state.get(key, ""))) + + for key, field in self.section_fields.items(): + field.setText(str(cad_state.get(key, ""))) + + if hasattr(self, "stiffener_table"): + stiffener_map = {0: "intermediate", 1: "longitudinal", 2: "bearing"} + for row, prefix in stiffener_map.items(): + grade = cad_state.get(f"stiff_{prefix}_grade", "") + thickness = cad_state.get(f"stiff_{prefix}_thickness", "") + width = cad_state.get(f"stiff_{prefix}_width", "") + spacing = cad_state.get(f"stiff_{prefix}_spacing", "") + + self.stiffener_table.setItem(row, 1, QTableWidgetItem(str(grade))) + self.stiffener_table.setItem(row, 2, QTableWidgetItem(str(thickness))) + self.stiffener_table.setItem(row, 3, QTableWidgetItem(str(width))) + self.stiffener_table.setItem(row, 4, QTableWidgetItem(str(spacing))) \ No newline at end of file From 77eebb523a75db2ed2fd3eed87d1aa41d0031e9a Mon Sep 17 00:00:00 2001 From: khp11 Date: Sat, 28 Feb 2026 20:21:42 +0530 Subject: [PATCH 051/225] steel design --- .../ui/dialogs/tabs/steel_design_analysis.py | 301 ++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py new file mode 100644 index 000000000..7438384db --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/steel_design_analysis.py @@ -0,0 +1,301 @@ +from PySide6.QtWidgets import ( + QWidget, + QVBoxLayout, + QHBoxLayout, + QGridLayout, + QLabel, + QLineEdit, + QFrame, + QSizePolicy, + QSpacerItem, +) +from PySide6.QtCore import Qt + +from osdagbridge.desktop.ui.docks.output_dock import ( + NoScrollComboBox, +) +from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea + +# From load_combination_tab.py defaults + output_dock +LOAD_COMBINATIONS = [ + "Envelope", + "DL + LL", + "1.35 DL + 1.5 LL", + "DL", "SIDL", "LL", + "WL", "EL", "IMF", "TL", +] + + +class SteelDesignAnalysisTab(QWidget): + + def __init__(self, parent=None): + self.result_fields = {} + self.x_fields = {} + + super().__init__(parent) + + self.setStyleSheet("background-color: white;") + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(0, 0, 0, 0) + main_layout.setSpacing(0) + + scroll_area = StyledScrollArea() + + container = QWidget() + container.setStyleSheet("background-color: white;") + + # Same margins/spacing as girder_details_tab content_layout + container_layout = QVBoxLayout(container) + container_layout.setContentsMargins(10, 10, 10, 10) + container_layout.setSpacing(12) + + # ── MAIN ROW ───────────────────────────────────────────────────────── + main_row = QHBoxLayout() + main_row.setSpacing(12) + main_row.setContentsMargins(0, 0, 0, 0) + + main_row.addWidget(self._build_left_panel(), 0) + main_row.addWidget(self._build_diagram_section(), 1) + + container_layout.addLayout(main_row) + container_layout.addStretch() + + scroll_area.setWidget(container) + main_layout.addWidget(scroll_area) + + # ── HELPERS — exact girder_details_tab pattern ─────────────────────────── + + def _create_card_frame(self): + """Outer card — same as GirderDetailsTab._create_card_frame.""" + frame = QFrame() + frame.setObjectName("girderCard") + frame.setStyleSheet( + "QFrame#girderCard { background-color: white; border: 1px solid #cfcfcf; border-radius: 10px; }" + ) + return frame + + def _create_label(self, text): + """Section title — same as GirderDetailsTab._create_label.""" + label = QLabel(text) + label.setStyleSheet( + "font-size: 12px; color: #2f2f2f; font-weight: 600; background: transparent;" + ) + label.setAutoFillBackground(False) + return label + + def _create_small_label(self, text): + """Row label — same as GirderDetailsTab._create_small_label.""" + label = QLabel(text) + label.setTextFormat(Qt.RichText) + label.setStyleSheet("font-size: 10px; color: #5a5a5a; background: transparent;") + label.setAutoFillBackground(False) + return label + + def _side_label(self, text): + """Short label beside diagram fields.""" + lbl = QLabel(text) + lbl.setTextFormat(Qt.RichText) + lbl.setStyleSheet("font-size: 10px; color: #5a5a5a; background: transparent;") + lbl.setFixedWidth(40) + return lbl + + def _make_grid(self): + grid = QGridLayout() + grid.setContentsMargins(0, 0, 0, 0) + grid.setHorizontalSpacing(16) + grid.setVerticalSpacing(12) + grid.setColumnMinimumWidth(0, 180) + grid.setColumnStretch(0, 0) + grid.setColumnStretch(1, 0) + grid.setColumnStretch(2, 1) + return grid + + def _readonly_field(self): + field = QLineEdit() + field.setReadOnly(True) + field.setFixedWidth(150) + field.setMinimumHeight(28) + field.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + apply_field_style(field) + return field + + def _side_field(self): + field = QLineEdit() + field.setReadOnly(True) + field.setFixedWidth(120) + field.setMinimumHeight(28) + field.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + apply_field_style(field) + return field + + def _add_row(self, grid, row, text, widget): + grid.addWidget(self._create_small_label(text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) + grid.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) + return row + 1 + + # ── LEFT PANEL ──────────────────────────────────────────────────────────── + + def _build_left_panel(self): + panel = QWidget() + panel.setStyleSheet("background-color: transparent;") + panel.setFixedWidth(360) + panel.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Preferred) + + layout = QVBoxLayout(panel) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(12) + + # ── Selection card ──────────────────────────────────────────────────── + sel_card = self._create_card_frame() + sel_layout = QVBoxLayout(sel_card) + sel_layout.setContentsMargins(18, 16, 18, 16) + sel_layout.setSpacing(10) + sel_layout.addWidget(self._create_label("Selection:")) + + sel_grid = self._make_grid() + + self.member_combo = NoScrollComboBox() + apply_field_style(self.member_combo) + self.member_combo.setFixedWidth(150) + self.member_combo.setMinimumHeight(28) + self.member_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.member_combo.addItems(["All", "Girder 1", "Girder 2"]) + + self.load_combo = NoScrollComboBox() + apply_field_style(self.load_combo) + self.load_combo.setFixedWidth(150) + self.load_combo.setMinimumHeight(28) + self.load_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.load_combo.addItems(LOAD_COMBINATIONS) + + r = 0 + r = self._add_row(sel_grid, r, "Member ID:", self.member_combo) + r = self._add_row(sel_grid, r, "Load Combination:", self.load_combo) + sel_layout.addLayout(sel_grid) + layout.addWidget(sel_card) + + # ── Results card ────────────────────────────────────────────────────── + res_card = self._create_card_frame() + res_layout = QVBoxLayout(res_card) + res_layout.setContentsMargins(18, 16, 18, 16) + res_layout.setSpacing(10) + res_layout.addWidget(self._create_label("Results:")) + + res_grid = self._make_grid() + r = 0 + for key, label in [ + ("R_A", "RA"), + ("R_B", "RB"), + ("M_max", "Mmax"), + ("V_max", "Vmax"), + ("D_max", "Dmax"), + ]: + field = self._readonly_field() + r = self._add_row(res_grid, r, label, field) + self.result_fields[key] = field + + res_layout.addLayout(res_grid) + layout.addWidget(res_card) + layout.addStretch() + + return panel + + # ── DIAGRAM SECTION ─────────────────────────────────────────────────────── + + def _build_diagram_section(self): + """ + Diagram and right-side fields sit side-by-side with NO outer card — + the diagram placeholder itself is the visual element. + """ + wrapper = QWidget() + wrapper.setStyleSheet("background: transparent;") + wrapper.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + inner_row = QHBoxLayout(wrapper) + inner_row.setSpacing(12) + inner_row.setContentsMargins(0, 0, 0, 0) + + # Diagram placeholder — standalone, no card around it + self.diagram_placeholder = QLabel() + self.diagram_placeholder.setMinimumSize(260, 440) + self.diagram_placeholder.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self.diagram_placeholder.setAlignment(Qt.AlignCenter) + self.diagram_placeholder.setText("[BMD / SFD / Deflection Diagram]") + self.diagram_placeholder.setStyleSheet(""" + QLabel { + border: 1px solid #cfcfcf; + background-color: #F5F5F5; + color: #9a9a9a; + font-size: 10px; + border-radius: 10px; + } + """) + inner_row.addWidget(self.diagram_placeholder, 1) + + # Right column: x input + M_x / V_x / D_x spaced to diagram zones + right_col = QWidget() + right_col.setStyleSheet("background: transparent;") + right_col.setFixedWidth(170) + right_col.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) + + right_layout = QVBoxLayout(right_col) + right_layout.setContentsMargins(0, 0, 0, 0) + right_layout.setSpacing(0) + + self.x_input = QLineEdit() + self.x_input.setFixedWidth(120) + self.x_input.setMinimumHeight(28) + self.x_input.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + apply_field_style(self.x_input) + right_layout.addLayout(self._side_row("x", self.x_input)) + + right_layout.addSpacerItem(QSpacerItem(0, 100, QSizePolicy.Fixed, QSizePolicy.Fixed)) + self.mx_field = self._side_field() + right_layout.addLayout(self._side_row("Mx", self.mx_field)) + + right_layout.addSpacerItem(QSpacerItem(0, 100, QSizePolicy.Fixed, QSizePolicy.Fixed)) + self.vx_field = self._side_field() + right_layout.addLayout(self._side_row("Vx", self.vx_field)) + + right_layout.addSpacerItem(QSpacerItem(0, 100, QSizePolicy.Fixed, QSizePolicy.Fixed)) + self.dx_field = self._side_field() + right_layout.addLayout(self._side_row("Dx", self.dx_field)) + + right_layout.addStretch() + + self.x_fields["M_x"] = self.mx_field + self.x_fields["V_x"] = self.vx_field + self.x_fields["D_x"] = self.dx_field + + inner_row.addWidget(right_col, 0) + return wrapper + + def _side_row(self, label_text, widget): + row = QHBoxLayout() + row.setSpacing(6) + row.setContentsMargins(0, 0, 0, 0) + row.addWidget(self._side_label(label_text)) + row.addWidget(widget) + row.addStretch() + return row + + # ── PUBLIC API ──────────────────────────────────────────────────────────── + + def set_girder_count(self, count): + """Mirrors GirderDetailsTab.set_girder_count — no hardcoding.""" + self.member_combo.clear() + self.member_combo.addItems(["All"] + [f"Girder {i}" for i in range(1, count + 1)]) + + def load_data(self, cad_state: dict): + if not cad_state: + return + try: + self.set_girder_count(int(cad_state.get("no_of_girders", 2))) + except (ValueError, TypeError): + pass + for key, field in self.result_fields.items(): + field.setText(str(cad_state.get(key, ""))) + for key, field in self.x_fields.items(): + field.setText(str(cad_state.get(key, ""))) \ No newline at end of file From 6addbcb25bf636dadd06e914d50fbb8bf1bee9cd Mon Sep 17 00:00:00 2001 From: khp11 Date: Sat, 28 Feb 2026 20:42:00 +0530 Subject: [PATCH 052/225] template_page.py: only added missing QTimer import --- src/osdagbridge/desktop/ui/template_page.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index b70d66394..75ea6a886 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -4,7 +4,7 @@ QMenuBar, QSplitter, QSizePolicy, QPushButton, QScrollArea, QFrame, ) from PySide6.QtSvgWidgets import QSvgWidget -from PySide6.QtCore import Qt, QFile, QTextStream, Signal +from PySide6.QtCore import Qt, QFile, QTextStream, Signal,QTimer from PySide6.QtGui import QIcon, QAction, QKeySequence from osdagbridge.desktop.ui.docks.input_dock import InputDock From 441e23efe55514c46a71006860ad1174868f14a5 Mon Sep 17 00:00:00 2001 From: khp11 Date: Sat, 28 Feb 2026 20:43:49 +0530 Subject: [PATCH 053/225] added common scrollbar layout for consistency and everyone can use --- .../desktop/ui/utils/styled_scroll_area.py | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/osdagbridge/desktop/ui/utils/styled_scroll_area.py diff --git a/src/osdagbridge/desktop/ui/utils/styled_scroll_area.py b/src/osdagbridge/desktop/ui/utils/styled_scroll_area.py new file mode 100644 index 000000000..167b8667f --- /dev/null +++ b/src/osdagbridge/desktop/ui/utils/styled_scroll_area.py @@ -0,0 +1,53 @@ +from PySide6.QtWidgets import QScrollArea, QSizePolicy +from PySide6.QtCore import Qt + + +class StyledScrollArea(QScrollArea): + def __init__(self, parent=None): + super().__init__(parent) + + self.setWidgetResizable(True) + self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + self.setStyleSheet(""" + QScrollArea { + background: transparent; + padding: 0px 5px; + border-top: 1px solid #909090; + border-bottom: 1px solid #909090; + } + + QScrollArea QScrollBar:vertical { + border: none; + background: #f0f0f0; + width: 8px; + margin-left: 2px; + } + + QScrollArea QScrollBar::handle:vertical { + background: #c0c0c0; + border-radius: 4px; + min-height: 20px; + } + + QScrollArea QScrollBar::handle:vertical:hover { + background: #a0a0a0; + } + + QScrollArea QScrollBar::handle:vertical:pressed { + background: #808080; + } + + QScrollArea QScrollBar::add-line:vertical, + QScrollArea QScrollBar::sub-line:vertical { + border: none; + background: none; + } + + QScrollArea QScrollBar::add-page:vertical, + QScrollArea QScrollBar::sub-page:vertical { + background: none; + } + """) From eca76a9da5dfddf369a97c49d79c3176139f7c89 Mon Sep 17 00:00:00 2001 From: khp11 Date: Sat, 28 Feb 2026 21:42:19 +0530 Subject: [PATCH 054/225] changed line 421, 428 for right button call --- src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 9c5216b4f..f62856874 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -418,13 +418,13 @@ def output_values(self, flag=None): { "label": "Steel Design", "buttons": [ - {"text": "Here", "action": "show_additional_inputs"}, + {"text": "Here", "action": "open_steel_design"}, ], }, { "label": "Deck Design", "buttons": [ - {"text": "Here", "action": "show_additional_inputs"}, + {"text": "Here", "action": "open_deck_design"}, ], }, ] From f48d1a609fc58310cf4fc09bdf28f528bb3b3288 Mon Sep 17 00:00:00 2001 From: khp11 Date: Sat, 28 Feb 2026 21:42:55 +0530 Subject: [PATCH 055/225] added methods to open steel design and deck design dialogue box --- src/osdagbridge/desktop/ui/docks/output_dock.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/osdagbridge/desktop/ui/docks/output_dock.py b/src/osdagbridge/desktop/ui/docks/output_dock.py index 9ec492fc6..d64307e6b 100644 --- a/src/osdagbridge/desktop/ui/docks/output_dock.py +++ b/src/osdagbridge/desktop/ui/docks/output_dock.py @@ -254,6 +254,18 @@ def init_ui(self): # Add content container to main layout self.main_layout.addWidget(content_container) + def open_steel_design(self): + """Open the Steel Design dialog.""" + from osdagbridge.desktop.ui.dialogs.steel_design import SteelDesign + dlg = SteelDesign(parent=self.parent) + dlg.exec() + + def open_deck_design(self): + """Open the Deck Design dialog.""" + from osdagbridge.desktop.ui.dialogs.deck_design import DeckDesign + dlg = DeckDesign(parent=self.parent) + dlg.exec() + def show_additional_inputs(self): """Handle showing additional geometry inputs.""" # Implement your logic here From bff27f8a5662cf905327cdac48c137232b23124c Mon Sep 17 00:00:00 2001 From: Sreejesh06 Date: Sun, 1 Mar 2026 19:47:20 +0530 Subject: [PATCH 056/225] refactor(ui): squash dev-v2 updates after pr baseline --- .../plate_girder/cad_generator.py | 8 +- .../bridge_types/plate_girder/ui_fields.py | 13 +- src/osdagbridge/core/utils/codes/keyfile.py | 8 +- src/osdagbridge/core/utils/common.py | 438 +----- .../desktop/ui/dialogs/additional_inputs.py | 82 +- .../ui/dialogs/tabs/section_properties_tab.py | 64 +- .../cross_bracing_details_tab.py | 31 +- .../end_diaphragm_details_tab.py | 384 +++++- .../section_properties/girder_details_tab.py | 1210 +++++++++++++++-- .../stiffener_details_tab.py | 23 +- .../desktop/ui/docks/input_dock.py | 31 + 11 files changed, 1658 insertions(+), 634 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py index c007fb511..ef9b3ab60 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/cad_generator.py @@ -504,7 +504,7 @@ def _calculate_skew_offset(lateral_position, reference_position=0): from osdagbridge.core.utils.codes.irc5_2015 import IRC5_2015 from osdagbridge.core.utils.common import ( KEY_CRASH_BARRIER_TYPE, - KEY_FOOTPATH, + VALUES_FOOTPATH, KEY_RAILING_TYPE, KEY_RIGID_CRASH_BARRIER_TYPE, KEY_METALLIC_CRASH_BARRIER_TYPE, @@ -548,7 +548,7 @@ def _calculate_skew_offset(lateral_position, reference_position=0): rigid_subtype_idx = rigid_subtype_map.get(self.crash_barrier_subtype, 0) design_dict = IRC5_2015.cl_109_6_3_shapes( barrier_type=KEY_CRASH_BARRIER_TYPE[barrier_idx], - footpath=KEY_FOOTPATH[0] if self.footpath_config == "NONE" else KEY_FOOTPATH[1], + footpath=VALUES_FOOTPATH[0] if self.footpath_config == "NONE" else VALUES_FOOTPATH[1], railing_type=selected_railing_key, design_dict={}, crash_barrier_type=KEY_RIGID_CRASH_BARRIER_TYPE[rigid_subtype_idx] @@ -559,7 +559,7 @@ def _calculate_skew_offset(lateral_position, reference_position=0): metallic_subtype_idx = metallic_subtype_map.get(self.crash_barrier_subtype, 0) design_dict = IRC5_2015.cl_109_6_3_shapes( barrier_type=KEY_CRASH_BARRIER_TYPE[1], - footpath=KEY_FOOTPATH[0] if self.footpath_config == "NONE" else KEY_FOOTPATH[1], + footpath=VALUES_FOOTPATH[0] if self.footpath_config == "NONE" else VALUES_FOOTPATH[1], railing_type=selected_railing_key, design_dict={}, crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_idx] @@ -637,7 +637,7 @@ def _calculate_skew_offset(lateral_position, reference_position=0): median_design_dict = IRC5_2015.cl_109_6_3_shapes( barrier_type=KEY_MEDIAN_TYPE[median_idx], - footpath=KEY_FOOTPATH[0], + footpath=VALUES_FOOTPATH[0], railing_type=None, design_dict={}, crash_barrier_type=KEY_METALLIC_CRASH_BARRIER_TYPE[metallic_subtype_idx] diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index f62856874..4e775404a 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -256,6 +256,17 @@ def input_values(self): {"label": "Skew Angle"}, ) ) + options_list.append( + ( + "Design", + "Design", + TYPE_COMBOBOX, + ["Optimized", "Customized"], + True, + 'No Validator', + {"label": "Design", "default": "Optimized"}, + ) + ) # Material Inputs options_list.append( @@ -330,7 +341,7 @@ def input_values(self): ) return options_list - + def set_osdaglogger(self, key): """Logger setup""" print("Logger set up (mock)") diff --git a/src/osdagbridge/core/utils/codes/keyfile.py b/src/osdagbridge/core/utils/codes/keyfile.py index 6d688aa74..fd9214571 100644 --- a/src/osdagbridge/core/utils/codes/keyfile.py +++ b/src/osdagbridge/core/utils/codes/keyfile.py @@ -36,7 +36,7 @@ KEY_CRASH_BARRIER_TYPE = ['Flexible', 'Semi-Rigid', 'Rigid'] KEY_METALLIC_CRASH_BARRIER_TYPE = ['Single W-beam', 'Double W-beam'] KEY_RIGID_CRASH_BARRIER_TYPE = ['IRC-5R', 'High Containment'] -KEY_RAILING_TYPE = ['RCC', 'steel'] +KEY_RAILING_TYPE = ['IRC 5 RCC railing', 'IRC 5 steel railing'] KEY_MEDIAN_TYPE = [ 'Raised Kerb', 'RCC Crash Barrier', @@ -57,12 +57,6 @@ 'Crowded Footway': 500, } -KEY_RAILING_TYPE = ['IRC 5 RCC railing','IRC 5 steel railing'] -KEY_CRASH_BARRIER_TYPE = [ - "Rigid", - "Semi-rigid", - "Flexible" -] KEY_TERRAIN_TYPE = ['plain','obstructed'] diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index b8bed19aa..fad123924 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -14,261 +14,6 @@ kPa = kilo * Pa g = 9.81 -# Constants for input types -TYPE_MODULE = "module" -TYPE_TITLE = "title" -TYPE_COMBOBOX = "combobox" -TYPE_COMBOBOX_CUSTOMIZED = "combobox_customized" -TYPE_TEXTBOX = "textbox" -TYPE_IMAGE = "image" - -# Keys for inputs -KEY_MODULE = "Module" -KEY_STRUCTURE_TYPE = "Structure Type" -KEY_PROJECT_LOCATION = "Project Location" -KEY_SPAN = "Span" -KEY_CARRIAGEWAY_WIDTH = "Carriageway Width" -KEY_INCLUDE_MEDIAN = "Include Median" -# KEY_FOOTPATH = "Footpath" -KEY_FOOTPATH = ["None", "Single Side", "Both Sides"] -KEY_SKEW_ANGLE = "Skew Angle" -KEY_GIRDER = "Girder" -KEY_CROSS_BRACING = "Cross Bracing" -KEY_END_DIAPHRAGM = "End Diaphragm" -KEY_DECK = "Deck" -KEY_DECK_CONCRETE_GRADE_BASIC = "Deck Concrete Grade" - -# Display names -KEY_DISP_FINPLATE = "Highway Bridge Design" -DISP_TITLE_STRUCTURE = "Type of Structure" -KEY_DISP_STRUCTURE_TYPE = "Structure Type" -DISP_TITLE_PROJECT = "Project Location" -KEY_DISP_PROJECT_LOCATION = "City in India*" -DISP_TITLE_GEOMETRIC = "Geometric Details" -KEY_DISP_SPAN = "Span (m)* [20-45]" -KEY_DISP_CARRIAGEWAY_WIDTH = "Carriageway Width (m)* [≥4.25]" -KEY_DISP_FOOTPATH = "Footpath" -KEY_DISP_SKEW_ANGLE = "Skew Angle (degrees) [±15]" -DISP_TITLE_MATERIAL = "Material Inputs" -KEY_DISP_GIRDER = "Girder" -KEY_DISP_CROSS_BRACING = "Cross Bracing" -KEY_DISP_END_DIAPHRAGM = "End Diaphragm" -KEY_DISP_DECK = "Deck" -KEY_DISP_DECK_CONCRETE_GRADE = "Deck Concrete Grade [M25+]" - -# Sample values -# Type of Structure: Defines the application of the steel girder bridge -# Currently only covers highway bridge -VALUES_STRUCTURE_TYPE = ["Highway Bridge", "Other"] - -# Project Location: Cities in India for load calculations -# Organized by regions for easier navigation -VALUES_PROJECT_LOCATION = [ - "Delhi", "Mumbai", "Bangalore", "Kolkata", "Chennai", "Hyderabad", - "Ahmedabad", "Pune", "Surat", "Jaipur", "Lucknow", "Kanpur", - "Nagpur", "Indore", "Thane", "Bhopal", "Visakhapatnam", "Pimpri-Chinchwad", - "Patna", "Vadodara", "Ghaziabad", "Ludhiana", "Agra", "Nashik", - "Faridabad", "Meerut", "Rajkot", "Kalyan-Dombivali", "Vasai-Virar", "Varanasi", - "Srinagar", "Aurangabad", "Dhanbad", "Amritsar", "Navi Mumbai", "Allahabad", - "Ranchi", "Howrah", "Coimbatore", "Jabalpur", "Gwalior", "Vijayawada", - "Jodhpur", "Madurai", "Raipur", "Kota", "Chandigarh", "Guwahati", - "Custom" # Allow custom location entry -] - -# Footpath: Single sided or none or both -# Default: None -# Note: IRC 5 Clause 101.41 requires safety kerb when footpath is not present -VALUES_FOOTPATH = ["None", "Single Sided", "Both"] - -VALUES_MATERIAL = [ - "E 250A", "E 250BR", "E 250B0", "E 250C", - "E 275A", "E 275BR", "E 275B0", "E 275C", - "E 300A", "E 300BR", "E 300B0", "E 300C", - "E 350A", "E 350BR", "E 350B0", "E 350C", - "E 410A", "E 410BR", "E 410B0", "E 410C", - "E 450A", "E 450BR", - "E 550A", "E 550BR", - "E 600A", "E 600BR", - "E 650A", "E 650BR" -] - -# Validation limits -# Span: Between 20 to 45 meters -SPAN_MIN = 20.0 -SPAN_MAX = 45.0 - -# Carriageway Width limits per IRC 5 Clause 104.3.1 -CARRIAGEWAY_WIDTH_MIN = 4.25 # No median present -CARRIAGEWAY_WIDTH_MIN_WITH_MEDIAN = 7.5 # Each carriageway when median provided -CARRIAGEWAY_WIDTH_MAX_LIMIT = 23.6 # Current software cap (subject to change) - -# Skew Angle: IRC 24 (2010) requires detailed analysis when skew angle exceeds ±15 degrees -# Default: 0 degrees -SKEW_ANGLE_MIN = -15.0 -SKEW_ANGLE_MAX = 15.0 -SKEW_ANGLE_DEFAULT = 0.0 - -# ===== Additional Inputs Constants ===== - -# Typical Section Details Keys -KEY_GIRDER_SPACING = "Girder Spacing" -KEY_DECK_OVERHANG = "Deck Overhang Width" -KEY_NO_OF_GIRDERS = "No. of Girders" -KEY_DECK_THICKNESS = "Deck Thickness" -KEY_DECK_CONCRETE_GRADE = "Deck Concrete Grade" -KEY_DECK_REINF_MATERIAL = "Deck Reinforcement Material" -KEY_DECK_REINF_SIZE = "Deck Reinforcement Size" -KEY_DECK_REINF_SPACING_LONG = "Deck Reinforcement Spacing Longitudinal" -KEY_DECK_REINF_SPACING_TRANS = "Deck Reinforcement Spacing Transverse" -KEY_FOOTPATH_WIDTH = "Footpath Width" -KEY_FOOTPATH_THICKNESS = "Footpath Thickness" -KEY_RAILING_PRESENT = "Railing Present" -KEY_RAILING_WIDTH = "Railing Width" -KEY_RAILING_HEIGHT = "Railing Height" -KEY_SAFETY_KERB_PRESENT = "Safety Kerb Present" -KEY_SAFETY_KERB_WIDTH = "Safety Kerb Width" -KEY_SAFETY_KERB_MIN_WIDTH = 750 # in mm -KEY_SAFETY_KERB_PLACEMENT = ['Single Side', 'Both Sides', ] -KEY_SAFETY_KERB_THICKNESS = "Safety Kerb Thickness" -KEY_CRASH_BARRIER_PRESENT = "Crash Barrier Present" -KEY_CRASH_BARRIER_TYPE = ['Flexible', 'Semi-Rigid', 'Rigid'] -KEY_CRASH_BARRIER_DENSITY = "Crash Barrier Material Density" -KEY_CRASH_BARRIER_WIDTH = "Crash Barrier Width" -KEY_CRASH_BARRIER_AREA = "Crash Barrier Area" - -# Section Properties Keys -KEY_GIRDER_TYPE = "Girder Type" -KEY_GIRDER_IS_SECTION = "Girder IS Section" -KEY_GIRDER_SYMMETRY = "Girder Symmetry" -KEY_GIRDER_TOP_FLANGE_WIDTH = "Girder Top Flange Width" -KEY_GIRDER_TOP_FLANGE_THICKNESS = "Girder Top Flange Thickness" -KEY_GIRDER_BOTTOM_FLANGE_WIDTH = "Girder Bottom Flange Width" -KEY_GIRDER_BOTTOM_FLANGE_THICKNESS = "Girder Bottom Flange Thickness" -KEY_GIRDER_DEPTH = "Girder Depth" -KEY_GIRDER_WEB_THICKNESS = "Girder Web Thickness" -KEY_GIRDER_TORSIONAL_RESTRAINT = "Torsional Restraint" -KEY_GIRDER_WARPING_RESTRAINT = "Warping Restraint" -KEY_GIRDER_WEB_TYPE = "Web Type" - -KEY_STIFFENER_DESIGN_METHOD = "Stiffener Design Method" -KEY_STIFFENER_PLATE_THICKNESS = "Stiffener Plate Thickness" -KEY_STIFFENER_SPACING = "Stiffener Spacing" -KEY_LONGITUDINAL_STIFFENER = "Longitudinal Stiffener" -KEY_LONGITUDINAL_STIFFENER_THICKNESS = "Longitudinal Stiffener Thickness" - -KEY_CROSS_BRACING_TYPE = "Cross Bracing Type" -KEY_CROSS_BRACING_SECTION = "Cross Bracing Section" -KEY_BRACKET_SECTION = "Bracket Section" -KEY_CROSS_BRACING_SPACING = "Cross Bracing Spacing" - -KEY_END_DIAPHRAGM_TYPE = "End Diaphragm Type" -KEY_END_DIAPHRAGM_SECTION = "End Diaphragm Section" -KEY_END_DIAPHRAGM_SPACING = "End Diaphragm Spacing" - -# Dead Load Keys -KEY_SELF_WEIGHT = "Self Weight" -KEY_SELF_WEIGHT_FACTOR = "Self Weight Factor" -KEY_WEARING_COAT_MATERIAL = "Wearing Coat Material" -KEY_WEARING_COAT_DENSITY = "Wearing Coat Density" -KEY_WEARING_COAT_THICKNESS = "Wearing Coat Thickness" -KEY_RAILING_TYPE = ['RCC', 'steel'] -KEY_RAILING_LOAD_COUNT = "No. of Railings" -KEY_RAILING_LOAD = "Railing Load" -KEY_RAILING_LOAD_LOCATION = "Railing Load Location" -KEY_CRASH_BARRIER_LOAD_COUNT = "No. of Crash Barriers" -KEY_CRASH_BARRIER_LOAD = "Crash Barrier Load" -KEY_CRASH_BARRIER_LOAD_LOCATION = "Crash Barrier Load Location" - -# Live Load Keys -KEY_IRC_CLASS_A = "IRC Class A" -KEY_IRC_CLASS_70R = "IRC Class 70R" -KEY_IRC_CLASS_AA = "IRC Class AA" -KEY_IRC_CLASS_SV = "IRC Class SV" -KEY_CUSTOM_VEHICLE = "Custom Vehicle" -KEY_CUSTOM_AXLE_TYPE = "Custom Axle Type" -KEY_CUSTOM_NO_AXLES = "Custom Number of Axles" -KEY_CUSTOM_AXLE_LOAD = "Custom Axle Load" -KEY_CUSTOM_AXLE_SPACING = "Custom Axle Spacing" -KEY_CUSTOM_VEHICLE_SPACING = "Custom Vehicle Spacing" -KEY_CUSTOM_ECCENTRICITY = "Custom Eccentricity" -KEY_FOOTPATH_PRESSURE = "Footpath Pressure" -KEY_FOOTPATH_PRESSURE_VALUE = "Footpath Pressure Value" -KEY_FOOTPATH_CLEAR_MIN_WIDTH = 1500 # in mm - -# Support Condition Keys -KEY_LEFT_SUPPORT = "Left Support" -KEY_RIGHT_SUPPORT = "Right Support" -KEY_BEARING_LENGTH = "Bearing Length" -KEY_RIGID_CRASH_BARRIER_TYPE = ['IRC-5R', 'High Containment'] - -# Value Lists for Additional Inputs -VALUES_YES_NO = ["No", "Yes"] -VALUES_DECK_CONCRETE_GRADE = [ - "M 25", "M 30", "M 35", "M 40", "M 45", "M 50", - "M 55", "M 60", "M 65", "M 70", "M 75", "M 80", - "M 85", "M 90" -] -VALUES_REINF_MATERIAL = ["Fe 415", "Fe 500", "Fe 550"] -VALUES_REINF_SIZE = ["8", "10", "12", "16", "20", "25", "32"] -VALUES_CRASH_BARRIER_TYPE = [ - "IRC 5 - RCC Crash Barrier", - "IRC 5 - Steel Crash Barrier", - "IRC 5 - Metal Beam", - "Custom" -] -VALUES_MEDIAN_TYPE = [ - "IRC 5 - Raised Kerb", - "IRC 5 - Flush Median", - "Custom" -] -VALUES_GIRDER_TYPE = ["IS Standard Rolled Beam", "Plate Girder"] -VALUES_GIRDER_SYMMETRY = ["Symmetrical", "Unsymmetrical"] -VALUES_OPTIMIZATION_MODE = ["Optimized", "Customized", "All"] -VALUES_TORSIONAL_RESTRAINT = [ - "Fully Restrained", - "Partially Restrained - Support Connection", - "Partially Restrained - Bearing Support", -] -VALUES_WARPING_RESTRAINT = ["Both Flanges Restrained", "No Restraint"] -# Plate girder web classification used by the Section Properties UI. -# Thin webs typically require intermediate transverse stiffeners (ITS), whereas -# thick webs do not; keep the labels consistent across desktop UI + schemas. -VALUES_WEB_TYPE = ["Thin Web with ITS", "Thick Web without ITS"] -VALUES_STIFFENER_DESIGN = ["Simple Post Critical", "Tension Field"] -VALUES_CROSS_BRACING_TYPE = ["K-bracing", "K-bracing with top bracket", "X-bracing", "X-bracing with bottom bracket", "X-bracing with top and bottom brackets"] -VALUES_END_DIAPHRAGM_TYPE = ["Cross Bracing", "Rolled Beam", "Welded Beam"] -VALUES_WEARING_COAT_MATERIAL = ["Concrete", "Bituminous", "Other"] -VALUES_RAILING_TYPE = [ - "IRC 5 - RCC Railing", - "IRC 5 - Steel Railing", - "Custom" -] -VALUES_CUSTOM_AXLE_TYPE = ["Single", "Bogie"] -VALUES_FOOTPATH_PRESSURE_MODE = ["Automatic", "User-defined"] -VALUES_SUPPORT_TYPE = ["Fixed", "Pinned"] - -# Default values -DEFAULT_SELF_WEIGHT_FACTOR = 1.0 -DEFAULT_CONCRETE_DENSITY = 25.0 # kN/m³ -DEFAULT_STEEL_DENSITY = 78.5 # kN/m³ -DEFAULT_BEARING_LENGTH = 0.0 # mm - -# Typical Section Details Validation Constants (IRC 5) -MIN_FOOTPATH_WIDTH = 1.5 # meters (IRC 5 Clause 104.3.6) -MIN_RAILING_HEIGHT = 1.0 # meters (IRC 5 Clauses 109.7.2.3 & 109.7.2.4) -MIN_SAFETY_KERB_WIDTH = 0.75 # meters (IRC 5 Clause 101.41) -DEFAULT_GIRDER_SPACING = 2.5 # meters (preliminary design assumption) -DEFAULT_DECK_OVERHANG = 1.0 # meters (preliminary design assumption) -DEFAULT_CRASH_BARRIER_WIDTH = 0.5 # meters (typical) -DEFAULT_RAILING_WIDTH = 0.15 # meters (typical) - -def connectdb(table_name, popup=None): - """Mock database connection - returns sample data""" - if table_name == "Material": - return VALUES_MATERIAL - return [] - - # Constants for input types TYPE_MODULE = "module" TYPE_TITLE = "title" @@ -311,12 +56,8 @@ def connectdb(table_name, popup=None): KEY_DISP_DECK_CONCRETE_GRADE = "Deck Concrete Grade [M25+]" # Sample values -# Type of Structure: Defines the application of the steel girder bridge -# Currently only covers highway bridge VALUES_STRUCTURE_TYPE = ["Highway Bridge", "Other"] -# Project Location: Cities in India for load calculations -# Organized by regions for easier navigation VALUES_PROJECT_LOCATION = [ "Delhi", "Mumbai", "Bangalore", "Kolkata", "Chennai", "Hyderabad", "Ahmedabad", "Pune", "Surat", "Jaipur", "Lucknow", "Kanpur", @@ -326,13 +67,11 @@ def connectdb(table_name, popup=None): "Srinagar", "Aurangabad", "Dhanbad", "Amritsar", "Navi Mumbai", "Allahabad", "Ranchi", "Howrah", "Coimbatore", "Jabalpur", "Gwalior", "Vijayawada", "Jodhpur", "Madurai", "Raipur", "Kota", "Chandigarh", "Guwahati", - "Custom" # Allow custom location entry + "Custom", ] -# Footpath: Single sided or none or both -# Default: None -# Note: IRC 5 Clause 101.41 requires safety kerb when footpath is not present -VALUES_FOOTPATH = ["None", "Single Sided", "Both"] +# Canonical footpath options used across UI + CAD/code clauses. +VALUES_FOOTPATH = ["None", "Single Side", "Both Sides"] VALUES_MATERIAL = [ "E 250A", "E 250BR", "E 250B0", "E 250C", @@ -343,21 +82,15 @@ def connectdb(table_name, popup=None): "E 450A", "E 450BR", "E 550A", "E 550BR", "E 600A", "E 600BR", - "E 650A", "E 650BR" + "E 650A", "E 650BR", ] # Validation limits -# Span: Between 20 to 45 meters SPAN_MIN = 20.0 SPAN_MAX = 45.0 - -# Carriageway Width limits per IRC 5 Clause 104.3.1 -CARRIAGEWAY_WIDTH_MIN = 4.25 # No median present -CARRIAGEWAY_WIDTH_MIN_WITH_MEDIAN = 7.5 # Each carriageway when median provided -CARRIAGEWAY_WIDTH_MAX_LIMIT = 23.6 # Current software cap (subject to change) - -# Skew Angle: IRC 24 (2010) requires detailed analysis when skew angle exceeds ±15 degrees -# Default: 0 degrees +CARRIAGEWAY_WIDTH_MIN = 4.25 +CARRIAGEWAY_WIDTH_MIN_WITH_MEDIAN = 7.5 +CARRIAGEWAY_WIDTH_MAX_LIMIT = 23.6 SKEW_ANGLE_MIN = -15.0 SKEW_ANGLE_MAX = 15.0 SKEW_ANGLE_DEFAULT = 0.0 @@ -378,38 +111,33 @@ def connectdb(table_name, popup=None): KEY_FOOTPATH_THICKNESS = "Footpath Thickness" KEY_RAILING_PRESENT = "Railing Present" KEY_RAILING_WIDTH = "Railing Width" -KEY_RAILING_MIN_HEIGHT = [1100, 1250] # in mm -KEY_CYCLE_TRACK = ['None', 'Single', 'Both Sides'] -KEY_MIN_SKEW_ANGLE = 30 # in degrees -KEY_MIN_LOGITUDINAL_GRADIENT = 0.3 # in percent -KEY_MAX_BRIDGE_LENGTH_SINGLE_CURVE = 30 # in meters -# Metallic crash barrier sub-types -KEY_METALLIC_CRASH_BARRIER_TYPE = ['Single W-beam', 'Double W-beam'] -KEY_CRASH_BARRIER_TYPE = [ - "Rigid", - "Semi-rigid", - "Flexible" -] - -KEY_MIN_SINGLE_LANE = 4.25 # in meters -KEY_MIN_DOUBLE_LANE = 7.5 # in meters -KEY_ADDITIONAL_LANE = 3.5 # in meters -KEY_MEDIAN_TYPE = [ - 'Raised Kerb', - 'RCC Crash Barrier', - 'Metallic Crash Barrier' -] - KEY_RAILING_HEIGHT = "Railing Height" +KEY_RAILING_MIN_HEIGHT = [1100, 1250] +KEY_CYCLE_TRACK = ["None", "Single", "Both Sides"] +KEY_MIN_SKEW_ANGLE = 30 +KEY_MIN_LOGITUDINAL_GRADIENT = 0.3 +KEY_MAX_BRIDGE_LENGTH_SINGLE_CURVE = 30 +KEY_MIN_SINGLE_LANE = 4.25 +KEY_MIN_DOUBLE_LANE = 7.5 +KEY_ADDITIONAL_LANE = 3.5 + KEY_SAFETY_KERB_PRESENT = "Safety Kerb Present" KEY_SAFETY_KERB_WIDTH = "Safety Kerb Width" KEY_SAFETY_KERB_THICKNESS = "Safety Kerb Thickness" +KEY_SAFETY_KERB_MIN_WIDTH = 750 +KEY_SAFETY_KERB_PLACEMENT = ["Single Side", "Both Sides"] + KEY_CRASH_BARRIER_PRESENT = "Crash Barrier Present" -KEY_CRASH_BARRIER_TYPE = "Crash Barrier Type" KEY_CRASH_BARRIER_DENSITY = "Crash Barrier Material Density" KEY_CRASH_BARRIER_WIDTH = "Crash Barrier Width" KEY_CRASH_BARRIER_AREA = "Crash Barrier Area" +KEY_METALLIC_CRASH_BARRIER_TYPE = ["Single W-beam", "Double W-beam"] +KEY_RIGID_CRASH_BARRIER_TYPE = ["IRC-5R", "High Containment"] +KEY_CRASH_BARRIER_TYPE = ["Flexible", "Semi-Rigid", "Rigid"] +KEY_MEDIAN_TYPE = ["Raised Kerb", "RCC Crash Barrier", "Metallic Crash Barrier"] +KEY_FOOTPATH_CLEAR_MIN_WIDTH = 1500 + # Section Properties Keys KEY_GIRDER_TYPE = "Girder Type" KEY_GIRDER_IS_SECTION = "Girder IS Section" @@ -442,10 +170,11 @@ def connectdb(table_name, popup=None): # Dead Load Keys KEY_SELF_WEIGHT = "Self Weight" KEY_SELF_WEIGHT_FACTOR = "Self Weight Factor" -KEY_WEARING_COAT = ['bituminous', 'concrete'] +KEY_WEARING_COAT = ["bituminous", "concrete"] KEY_WEARING_COAT_MATERIAL = "Wearing Coat Material" KEY_WEARING_COAT_DENSITY = "Wearing Coat Density" KEY_WEARING_COAT_THICKNESS = "Wearing Coat Thickness" +KEY_RAILING_TYPE = ["IRC 5 RCC railing", "IRC 5 steel railing"] KEY_RAILING_LOAD_COUNT = "No. of Railings" KEY_RAILING_LOAD = "Railing Load" KEY_RAILING_LOAD_LOCATION = "Railing Load Location" @@ -478,7 +207,7 @@ def connectdb(table_name, popup=None): VALUES_DECK_CONCRETE_GRADE = [ "M 25", "M 30", "M 35", "M 40", "M 45", "M 50", "M 55", "M 60", "M 65", "M 70", "M 75", "M 80", - "M 85", "M 90" + "M 85", "M 90", ] VALUES_REINF_MATERIAL = ["Fe 415", "Fe 500", "Fe 550"] VALUES_REINF_SIZE = ["8", "10", "12", "16", "20", "25", "32"] @@ -486,15 +215,20 @@ def connectdb(table_name, popup=None): "IRC 5 - RCC Crash Barrier", "IRC 5 - Steel Crash Barrier", "IRC 5 - Metal Beam", - "Custom" + "Custom", ] VALUES_MEDIAN_TYPE = [ "IRC 5 - Raised Kerb", "IRC 5 - Flush Median", - "Custom" + "Custom", ] VALUES_GIRDER_TYPE = ["Welded", "Rolled"] VALUES_GIRDER_SYMMETRY = ["Girder Symmetric", "Girder Unsymmetric"] +VALUES_GIRDER_SUPPORT_TYPE = [ + "Major Laterally Supported", + "Minor Laterally Unsupported", + "Major Laterally Unsupported", +] VALUES_GIRDER_DESIGN_MODE = ["Optimized", "Customized"] VALUES_GIRDER_SPAN_MODE = ["Full Length", "Custom"] VALUES_PROFILE_SCOPE = ["All", "Custom"] @@ -505,86 +239,52 @@ def connectdb(table_name, popup=None): "Partially Restrained - Bearing Support", ] VALUES_WARPING_RESTRAINT = ["Both Flanges Restrained", "No Restraint"] -# Plate girder web classification used by the Section Properties UI. -# Thin webs typically require intermediate transverse stiffeners (ITS), whereas -# thick webs do not; keep the labels consistent across desktop UI + schemas. VALUES_WEB_TYPE = ["Thin Web with ITS", "Thick Web without ITS"] VALUES_STIFFENER_DESIGN = ["Simple Post Critical", "Tension Field"] -VALUES_CROSS_BRACING_TYPE = ["K-bracing", "K-bracing with top bracket", "X-bracing", "X-bracing with bottom bracket", "X-bracing with top and bottom brackets"] +VALUES_CROSS_BRACING_TYPE = [ + "K-bracing", + "K-bracing with top bracket", + "X-bracing", + "X-bracing with bottom bracket", + "X-bracing with top and bottom brackets", +] VALUES_END_DIAPHRAGM_TYPE = ["Cross Bracing", "Rolled Beam", "Welded Beam"] VALUES_WEARING_COAT_MATERIAL = ["Concrete", "Bituminous", "Other"] -VALUES_RAILING_TYPE = [ - "IRC 5 - RCC Railing", - "IRC 5 - Steel Railing", - "Custom" -] +VALUES_RAILING_TYPE = ["IRC 5 - RCC Railing", "IRC 5 - Steel Railing", "Custom"] VALUES_CUSTOM_AXLE_TYPE = ["Single", "Bogie"] VALUES_FOOTPATH_PRESSURE_MODE = ["Automatic", "User-defined"] VALUES_SUPPORT_TYPE = ["Fixed", "Pinned"] -# Default values + +# Defaults + validation helpers DEFAULT_SELF_WEIGHT_FACTOR = 1.0 -DEFAULT_CONCRETE_DENSITY = 25.0 # kN/m³ -DEFAULT_STEEL_DENSITY = 78.5 # kN/m³ -DEFAULT_BEARING_LENGTH = 0.0 # mm +DEFAULT_CONCRETE_DENSITY = 25.0 +DEFAULT_STEEL_DENSITY = 78.5 +DEFAULT_BEARING_LENGTH = 0.0 + +MIN_FOOTPATH_WIDTH = 1.5 +MIN_RAILING_HEIGHT = 1.0 +MIN_SAFETY_KERB_WIDTH = 0.75 +DEFAULT_GIRDER_SPACING = 2.5 +DEFAULT_DECK_OVERHANG = 1.0 +DEFAULT_CRASH_BARRIER_WIDTH = 0.5 +DEFAULT_RAILING_WIDTH = 0.15 + +# IRC helper option constants +KEY_VEHICLE = ["Class70R(W)", "Class70R(T)", "ClassA", "ClassB"] +KEY_TYPE_BRIDGE = ["Highway", "Rural"] +KEY_DESIGN_FATIGUE = ["Dont design for fatigue", "Regular Vehicles", "Heavy Vehicles"] +KEY_TYPE_FOOTWAY = ["Default", "Regular Footway", "Crowded Footway"] +FOOTWAY_LOADS = { + "Default": 500, + "Regular Footway": 400, + "Crowded Footway": 500, +} +KEY_TERRAIN_TYPE = ["plain", "obstructed"] -# Typical Section Details Validation Constants (IRC 5) -MIN_FOOTPATH_WIDTH = 1.5 # meters (IRC 5 Clause 104.3.6) -MIN_RAILING_HEIGHT = 1.0 # meters (IRC 5 Clauses 109.7.2.3 & 109.7.2.4) -MIN_SAFETY_KERB_WIDTH = 0.75 # meters (IRC 5 Clause 101.41) -DEFAULT_GIRDER_SPACING = 2.5 # meters (preliminary design assumption) -DEFAULT_DECK_OVERHANG = 1.0 # meters (preliminary design assumption) -DEFAULT_CRASH_BARRIER_WIDTH = 0.5 # meters (typical) -DEFAULT_RAILING_WIDTH = 0.15 # meters (typical) def connectdb(table_name, popup=None): - """Mock database connection - returns sample data""" + """Mock database connection - returns sample data.""" if table_name == "Material": return VALUES_MATERIAL return [] -# Unit definitions -kilo = 1e3 -milli = 1e-3 -N = 1 -m = 1 -mm = milli * m -m2 = m ** 2 -m3 = m ** 3 -m4 = m ** 4 -kN = kilo * N -Pa = 1 -MPa = N / ((mm) ** 2) -GPa = kilo * MPa -kPa = kilo * Pa - -KEY_FOOTPATH = "Footpath" -KEY_SAFETY_KERB_MIN_WIDTH = 750 # in mm -KEY_SAFETY_KERB_PLACEMENT = ['Single Side', 'Both Sides', ] -KEY_FOOTPATH_CLEAR_MIN_WIDTH = 1500 # in mm -KEY_RAILING_MIN_HEIGHT = [1100, 1250] # in mm -KEY_CYCLE_TRACK = ['None', 'Single', 'Both Sides'] -KEY_MIN_SKEW_ANGLE = 30 # in degrees -KEY_WEARING_COAT = ['bituminous', 'concrete'] -KEY_CRASH_BARRIER_TYPE = ['Flexible', 'Semi-Rigid', 'Rigid'] -KEY_RAILING_TYPE = ['RCC', 'steel'] -KEY_MIN_LOGITUDINAL_GRADIENT = 0.3 # in percent -KEY_MAX_BRIDGE_LENGTH_SINGLE_CURVE = 30 # in meters -KEY_RIGID_CRASH_BARRIER_TYPE = ['IRC-5R', 'High Containment'] - -KEY_MIN_SINGLE_LANE = 4.25 # in meters -KEY_MIN_DOUBLE_LANE = 7.5 # in meters -KEY_ADDITIONAL_LANE = 3.5 # in meters -KEY_VEHICLE = ['Class70R(W)','Class70R(T)','ClassA','ClassB'] -KEY_TYPE_BRIDGE = ['Highway','Rural'] -KEY_DESIGN_FATIGUE = ['Dont design for fatigue','Regular Vehicles','Heavy Vehicles'] -KEY_TYPE_FOOTWAY = ['Default','Regular Footway','Crowded Footway'] - -# Characteristic loads for footway types (kg/m^2) -FOOTWAY_LOADS = { - 'Default': 500, - 'Regular Footway': 400, - 'Crowded Footway': 500, -} - -KEY_RAILING_TYPE = ['IRC 5 RCC railing','IRC 5 steel railing'] -KEY_TERRAIN_TYPE = ['plain','obstructed'] diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index f5603c0fe..093e3fa7b 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -47,6 +47,7 @@ def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None): self.setSizeGripEnabled(True) self.footpath_value = footpath_value self.carriageway_width = carriageway_width + self._member_properties_editable = True self._last_saved_data = {} # Track last saved state self.init_ui() self.setStyleSheet(""" @@ -115,6 +116,7 @@ def init_ui(self): color: #ffffff; } """) + self._last_top_tab_index = 0 # Sub-Tab 1: Typical Section Details self.typical_section_tab = TypicalSectionDetailsTab(self.footpath_value, self.carriageway_width) @@ -123,6 +125,7 @@ def init_ui(self): # Sub-Tab 2: Member Properties self.section_properties_tab = SectionPropertiesTab() self.tabs.addTab(self.section_properties_tab, "Member Properties") + self.section_properties_tab.set_editable_mode(self._member_properties_editable) # Keep girder count in sync across tabs try: @@ -145,6 +148,7 @@ def init_ui(self): # Sub-Tab 6: Design Options (Cont.) analysis_design_tab = self._build_design_options_cont_tab() self.tabs.addTab(analysis_design_tab, "Design Options (Cont.)") + self.tabs.currentChanged.connect(self._on_top_tab_changed) main_layout.addWidget(self.tabs) @@ -222,6 +226,10 @@ def _create_schema_widget(self, field_def, field_width): return widget + def set_member_properties_design_mode(self, mode_str: str): + if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "set_design_mode"): + self.section_properties_tab.set_design_mode(mode_str) + def _apply_defaults(self): """Apply defaults only to the currently visible top-level tab. @@ -265,7 +273,12 @@ def _save_inputs(self): saved.update(self.section_properties_tab.save_properties() or {}) except Exception as exc: # If saving fails, the old code would never reach the confirmation popup. - QMessageBox.critical(self, "Save Failed", f"Could not save inputs.\n\n{exc}") + box = QMessageBox(self) + box.setIcon(QMessageBox.Critical) + box.setWindowTitle("Save Failed") + box.setText(f"Could not save inputs.\n\n{exc}") + box.setStandardButtons(QMessageBox.Ok) + box.exec() return # Store the saved data for later retrieval @@ -276,25 +289,7 @@ def _save_inputs(self): box = QMessageBox(self) box.setIcon(QMessageBox.Information) box.setWindowTitle("Saved") - - # Build detailed message - saved_items = [] - if "girder_details" in saved: - saved_items.append("✓ Girder Details") - if "stiffener_details" in saved: - stiffener_data = saved.get("stiffener_details", {}) - member_count = len(stiffener_data.get("stiffener_by_member", {})) - saved_items.append(f"✓ Stiffener Details ({member_count} members)") - if "cross_bracing" in saved: - saved_items.append("✓ Cross-Bracing Details") - if "end_diaphragm" in saved: - saved_items.append("✓ End Diaphragm Details") - - message = "Inputs saved successfully.\n\n" - if saved_items: - message += "Saved:\n" + "\n".join(saved_items) - - box.setText(message) + box.setText("Inputs saved successfully.") box.setStandardButtons(QMessageBox.Ok) box.setDefaultButton(QMessageBox.Ok) box.setWindowModality(Qt.ApplicationModal) @@ -499,8 +494,53 @@ def update_footpath_value(self, footpath_value): self.footpath_value = footpath_value self.typical_section_tab.update_footpath_value(footpath_value) + def set_member_properties_editable(self, editable: bool) -> None: + self._member_properties_editable = bool(editable) + if hasattr(self, "section_properties_tab") and self.section_properties_tab is not None: + try: + self.section_properties_tab.set_editable_mode(self._member_properties_editable) + except Exception: + pass + def _show_placeholder_message(self, action_name): - QMessageBox.information(self, "Coming soon", f"{action_name} action not implemented yet.") + box = QMessageBox(self) + box.setIcon(QMessageBox.Information) + box.setWindowTitle("Coming soon") + box.setText(f"{action_name} action not implemented yet.") + box.setStandardButtons(QMessageBox.Ok) + box.exec() + + def _on_top_tab_changed(self, index: int) -> None: + if index < 0: + return + + previous = getattr(self, "_last_top_tab_index", 0) + if previous == index: + return + + leaving_member_properties = ( + previous == self.tabs.indexOf(getattr(self, "section_properties_tab", None)) + ) + if leaving_member_properties: + try: + if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "has_unsaved_changes"): + if self.section_properties_tab.has_unsaved_changes(): + box = QMessageBox(self) + box.setIcon(QMessageBox.Warning) + box.setWindowTitle("Unsaved Inputs") + box.setText("Please save Member Properties before switching tabs.") + box.setStandardButtons(QMessageBox.Ok) + box.setDefaultButton(QMessageBox.Ok) + box.setWindowModality(Qt.ApplicationModal) + box.exec() + prev = self.tabs.blockSignals(True) + self.tabs.setCurrentIndex(previous) + self.tabs.blockSignals(prev) + return + except Exception: + pass + + self._last_top_tab_index = index def get_saved_data(self) -> dict: """Get the last saved properties data. diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py index 8eecfd420..896eee012 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py @@ -6,10 +6,10 @@ QComboBox, QGroupBox, QFormLayout, QPushButton, QScrollArea, QCheckBox, QMessageBox, QSizePolicy, QSpacerItem, QStackedWidget, QFrame, QGridLayout, QTableWidget, QTableWidgetItem, QHeaderView, - QTextEdit, QDialog, QSizePolicy, QSizeGrip + QTextEdit, QDialog, QSizePolicy, QSizeGrip, QGraphicsDropShadowEffect ) from PySide6.QtCore import Qt, Signal, QSize -from PySide6.QtGui import QDoubleValidator, QIntValidator +from PySide6.QtGui import QDoubleValidator, QIntValidator, QColor from osdagbridge.core.utils.common import * from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar @@ -32,6 +32,12 @@ def init_ui(self): main_layout.setContentsMargins(0, 0, 0, 0) main_layout.setSpacing(0) + self._content_frame = QFrame() + self._content_frame.setFrameShape(QFrame.NoFrame) + content_layout = QVBoxLayout(self._content_frame) + content_layout.setContentsMargins(0, 0, 0, 0) + content_layout.setSpacing(0) + self.section_tabs = QTabWidget() self.section_tabs.setDocumentMode(True) self.section_tabs.setStyleSheet( @@ -52,8 +58,10 @@ def init_ui(self): self.section_tabs.addTab(self.stiffener_details_tab, "Stiffener Details") self.section_tabs.addTab(self.cross_bracing_tab, "Cross-Bracing Details") self.section_tabs.addTab(self.end_diaphragm_tab, "End Diaphragm Details") + self._last_section_tab_index = self.section_tabs.currentIndex() - main_layout.addWidget(self.section_tabs) + content_layout.addWidget(self.section_tabs) + main_layout.addWidget(self._content_frame) # Bind stiffener tab to the girder tab for member list + optimized state. try: @@ -77,11 +85,61 @@ def init_ui(self): except Exception: pass + def resizeEvent(self, event): + super().resizeEvent(event) + self._update_lock_overlay_geometry() + + def _update_lock_overlay_geometry(self): + return + + def set_editable_mode(self, editable: bool) -> None: + pass + + def set_design_mode(self, mode_str: str) -> None: + if hasattr(self, "girder_details_tab") and hasattr(self.girder_details_tab, "set_design_mode"): + self.girder_details_tab.set_design_mode(mode_str) + if hasattr(self, "cross_bracing_tab") and hasattr(self.cross_bracing_tab, "set_design_mode"): + self.cross_bracing_tab.set_design_mode(mode_str) + if hasattr(self, "end_diaphragm_tab") and hasattr(self.end_diaphragm_tab, "set_design_mode"): + self.end_diaphragm_tab.set_design_mode(mode_str) + + def has_unsaved_changes(self) -> bool: + try: + if hasattr(self, "girder_details_tab") and hasattr(self.girder_details_tab, "has_unsaved_changes"): + return bool(self.girder_details_tab.has_unsaved_changes()) + except Exception: + pass + return False + def _on_section_tab_changed(self, index: int) -> None: + previous = getattr(self, "_last_section_tab_index", 0) + if previous != index: + try: + leaving_girder_tab = previous == self.section_tabs.indexOf(getattr(self, "girder_details_tab", None)) + if leaving_girder_tab and hasattr(self, "girder_details_tab") and hasattr(self.girder_details_tab, "has_unsaved_changes"): + if self.girder_details_tab.has_unsaved_changes(): + box = QMessageBox(self) + box.setIcon(QMessageBox.Warning) + box.setWindowTitle("Unsaved Inputs") + box.setText("Please save Member Properties before switching tabs.") + box.setStandardButtons(QMessageBox.Ok) + box.setDefaultButton(QMessageBox.Ok) + box.setWindowModality(Qt.ApplicationModal) + box.exec() + prev = self.section_tabs.blockSignals(True) + self.section_tabs.setCurrentIndex(previous) + self.section_tabs.blockSignals(prev) + return + except Exception: + pass + try: widget = self.section_tabs.widget(index) except Exception: return + + self._last_section_tab_index = index + if widget is getattr(self, "stiffener_details_tab", None): try: self.stiffener_details_tab.refresh_girder_members() diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py index ad90649a0..ce59b45a5 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py @@ -24,6 +24,7 @@ def __init__(self, parent=None): super().__init__(parent) self.catalog = SectionCatalog() self._girder_details_tab = None + self._global_design_mode = "Optimized" # Keep all combo boxes strictly uniform in width. self._combo_width = 190 @@ -136,7 +137,8 @@ def init_ui(self): self.design_combo.setCurrentIndex(1) # Default to Optimized self._configure_combo_box(self.design_combo) apply_field_style(self.design_combo) - row = self._add_grid_row(inputs_grid, 0, "Design:", self.design_combo) + self.design_combo.setVisible(False) + row = 0 self.bracing_type_combo = QComboBox() self.bracing_type_combo.addItems(["K-Bracing", "X-Bracing"]) @@ -243,7 +245,7 @@ def init_ui(self): self.design_combo.currentTextChanged.connect(self._on_design_changed) self.spacing_input.textChanged.connect(self._on_span_or_spacing_changed) self._populate_designations() - self._on_design_changed(self.design_combo.currentText()) + self._on_design_changed(self._global_design_mode) # Seed selection drop-downs with a safe default until Girder Details is bound. self.refresh_girder_options() @@ -417,7 +419,7 @@ def _refresh_member_id_display(self) -> None: def _default_member_state(self) -> dict: # Use the tab defaults (Optimized + first options) for new members. return { - "design": "Optimized", + "design": self._global_design_mode, "bracing_type": "K-Bracing", "bracing_section_type": "Angle", "bracing_section_data": None, @@ -433,7 +435,7 @@ def _default_member_state(self) -> dict: def _snapshot_current_state(self) -> dict: return { - "design": self.design_combo.currentText(), + "design": self._global_design_mode, "bracing_type": self.bracing_type_combo.currentText(), "bracing_section_type": self.bracing_section_type_combo.currentText(), "bracing_section_data": self.bracing_section_combo.currentData(), @@ -470,7 +472,7 @@ def _set_combo_to_data_or_text(self, combo: QComboBox, desired_data, desired_tex def _apply_state(self, state: dict) -> None: # Apply in a safe order: set section types first (to repopulate size combos), # then set sizes, then design mode. - self.design_combo.setCurrentText(state.get("design") or self.design_combo.currentText()) + self.design_combo.setCurrentText(self._global_design_mode) self.bracing_type_combo.setCurrentText(state.get("bracing_type") or self.bracing_type_combo.currentText()) self.bracing_section_type_combo.setCurrentText(state.get("bracing_section_type") or self.bracing_section_type_combo.currentText()) @@ -500,7 +502,7 @@ def _apply_state(self, state: dict) -> None: self.spacing_input.setText(state.get("spacing") or "") # Ensure enable/disable and previews match the restored design state. - self._on_design_changed(self.design_combo.currentText()) + self._on_design_changed(self._global_design_mode) def _load_state_for_current_member(self) -> None: key = self._current_member_key() @@ -625,9 +627,7 @@ def _create_heading_label(self, text): def _create_label(self, text): label = QLabel(text) - # Keep default label styling, but emphasize the bracing type selector. - weight = "700" if (text or "").strip() == "Type of Bracing:" else "400" - label.setStyleSheet(f"font-size: 11px; font-weight: {weight}; color: #4b4b4b; border: none;") + label.setStyleSheet("font-size: 11px; font-weight: 400; color: #4b4b4b; border: none;") return label def _add_grid_row(self, layout, row, text, widget): @@ -711,6 +711,17 @@ def _on_design_changed(self, label: str): self._apply_custom_mode(is_custom) self._update_previews() + def set_design_mode(self, mode_str: str) -> None: + mode = "Customized" if str(mode_str or "").strip().lower() == "customized" else "Optimized" + self._global_design_mode = mode + if hasattr(self, "design_combo") and self.design_combo is not None: + prev = self.design_combo.blockSignals(True) + try: + self.design_combo.setCurrentText(mode) + finally: + self.design_combo.blockSignals(prev) + self._on_design_changed(mode) + # ---- Helpers for section labels ------------------------------------- def _display_name_for(self, designation: str, section_type: str) -> str: name = (designation or "").strip() @@ -831,7 +842,7 @@ def collect_data(self): return { "select_girders": current_pair, "member_id": current_member, - "design": self.design_combo.currentText(), + "design": self._global_design_mode, "bracing_type": self.bracing_type_combo.currentText(), "bracing_section_type": self.bracing_section_type_combo.currentText(), "bracing_section": self.bracing_section_combo.currentText(), diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py index d56ee5530..65a0e9189 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py @@ -27,7 +27,9 @@ # Reuse the same rolled section catalog that backs the Girder tab. from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.girder_details_tab import ( # noqa: E501 + _BoundsDialog, girder_properties, + SAIL_APPROVED_THICKNESS_VALUES, ) class EndDiaphragmDetailsTab(QWidget): @@ -36,6 +38,12 @@ class EndDiaphragmDetailsTab(QWidget): def __init__(self, parent=None): super().__init__(parent) self._girder_details_tab = None + self._global_design_mode = "Optimized" + self._dimension_bounds = { + "total_depth": {"lower": 200.0, "upper": 2000.0, "increment": 25.0}, + "top_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + "bottom_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + } self._select_girders_combos = [] self._member_id_combos = [] # Member ID is software-generated (E{pair}M1 / E{pair}M2). @@ -221,7 +229,7 @@ def _default_state_for_view(self, view_key: str) -> dict: angles = [] first_angle = angles[0] if angles else "" return { - "design": "Optimized", + "design": self._global_design_mode, "bracing_type": "K-Bracing", "bracing_section_type": "Angle", "bracing_section_data": first_angle, @@ -238,15 +246,18 @@ def _default_state_for_view(self, view_key: str) -> dict: if self.rolled_is_section_combo is not None and self.rolled_is_section_combo.count() > 0: first = self.rolled_is_section_combo.itemText(0) return { - "design": "Optimized", + "design": self._global_design_mode, "is_section": first, } if key == "Welded Beam": return { - "design": "Optimized", + "design": self._global_design_mode, "welded_values": ["" for _ in (self._welded_inputs or [])], + "total_depth_bounds": dict(self._dimension_bounds.get("total_depth") or {}), + "top_width_bounds": dict(self._dimension_bounds.get("top_width") or {}), + "bottom_width_bounds": dict(self._dimension_bounds.get("bottom_width") or {}), } - return {"design": "Optimized"} + return {"design": self._global_design_mode} def _snapshot_view_state(self, view_key: str) -> dict: key = (view_key or "").strip() @@ -281,6 +292,9 @@ def _snapshot_view_state(self, view_key: str) -> dict: return { "design": self.welded_design_combo.currentText() if self.welded_design_combo is not None else "", "welded_values": values, + "total_depth_bounds": dict(self._dimension_bounds.get("total_depth") or {}), + "top_width_bounds": dict(self._dimension_bounds.get("top_width") or {}), + "bottom_width_bounds": dict(self._dimension_bounds.get("bottom_width") or {}), } return {"design": ""} @@ -301,7 +315,7 @@ def _apply_view_state(self, view_key: str, state: dict) -> None: key = (view_key or "").strip() if key == "Cross Bracing": if self.cross_design_combo is not None: - self.cross_design_combo.setCurrentText(state.get("design") or self.cross_design_combo.currentText()) + self.cross_design_combo.setCurrentText(self._global_design_mode) if self.cross_bracing_type_combo is not None: desired = (state.get("bracing_type") or "").strip() # Backward compatibility: older UI exposed Diagonal/Horizontal. @@ -340,26 +354,52 @@ def _apply_view_state(self, view_key: str, state: dict) -> None: state.get("bottom_bracket_text") or "", ) - self._on_cross_design_changed(self.cross_design_combo.currentText() if self.cross_design_combo is not None else "") + self._on_cross_design_changed(self._global_design_mode) self._update_cross_previews() return if key == "Rolled Beam": if self.rolled_design_combo is not None: - self.rolled_design_combo.setCurrentText(state.get("design") or self.rolled_design_combo.currentText()) + self.rolled_design_combo.setCurrentText(self._global_design_mode) if self.rolled_is_section_combo is not None: desired = state.get("is_section") or "" if desired: self.rolled_is_section_combo.setCurrentText(desired) elif self.rolled_is_section_combo.count() > 0: self.rolled_is_section_combo.setCurrentIndex(0) - self._on_rolled_design_changed(self.rolled_design_combo.currentText() if self.rolled_design_combo is not None else "") + self._on_rolled_design_changed(self._global_design_mode) self._update_rolled_preview_and_props() return if key == "Welded Beam": if self.welded_design_combo is not None: - self.welded_design_combo.setCurrentText(state.get("design") or self.welded_design_combo.currentText()) + self.welded_design_combo.setCurrentText(self._global_design_mode) + + total_depth_bounds = state.get("total_depth_bounds") + if isinstance(total_depth_bounds, dict): + self._dimension_bounds["total_depth"] = { + "lower": float(total_depth_bounds.get("lower", 200.0)), + "upper": float(total_depth_bounds.get("upper", 2000.0)), + "increment": float(total_depth_bounds.get("increment", 25.0)), + } + + top_width_bounds = state.get("top_width_bounds") + if isinstance(top_width_bounds, dict): + self._dimension_bounds["top_width"] = { + "lower": float(top_width_bounds.get("lower", 100.0)), + "upper": float(top_width_bounds.get("upper", 1000.0)), + "increment": float(top_width_bounds.get("increment", 10.0)), + } + + bottom_width_bounds = state.get("bottom_width_bounds") + if isinstance(bottom_width_bounds, dict): + self._dimension_bounds["bottom_width"] = { + "lower": float(bottom_width_bounds.get("lower", 100.0)), + "upper": float(bottom_width_bounds.get("upper", 1000.0)), + "increment": float(bottom_width_bounds.get("increment", 10.0)), + } + + self._refresh_bounds_tooltips() values = list(state.get("welded_values") or []) for i, widget in enumerate(self._welded_inputs or []): val = values[i] if i < len(values) else "" @@ -370,10 +410,28 @@ def _apply_view_state(self, view_key: str, state: dict) -> None: widget.setCurrentIndex(0) elif isinstance(widget, QLineEdit): widget.setText(val or "") - self._on_welded_design_changed(self.welded_design_combo.currentText() if self.welded_design_combo is not None else "") + self._on_welded_design_changed(self._global_design_mode) self._update_welded_preview_and_props() return + def set_design_mode(self, mode_str: str) -> None: + mode = "Customized" if str(mode_str or "").strip().lower() == "customized" else "Optimized" + self._global_design_mode = mode + + for combo in (self.cross_design_combo, self.rolled_design_combo, self.welded_design_combo): + if combo is None: + continue + prev = combo.blockSignals(True) + try: + combo.setCurrentText(mode) + finally: + combo.blockSignals(prev) + + self._on_cross_design_changed(mode) + self._on_rolled_design_changed(mode) + self._on_welded_design_changed(mode) + self._restore_all_views_for_current_selection() + def _store_view_state(self, view_key: str) -> None: selection_key = self._selection_key(view_key) if not selection_key: @@ -470,6 +528,7 @@ def _apply_welded_custom_mode(self, is_custom: bool) -> None: def _on_welded_design_changed(self, label: str) -> None: is_custom = (label or "").strip() == "Customized" self._apply_welded_custom_mode(is_custom) + self._update_welded_dimension_field_mode() def init_ui(self): main_layout = QVBoxLayout(self) @@ -548,9 +607,7 @@ def _create_heading_label(self, text): def _create_label(self, text): label = QLabel(text) - # Keep default label styling, but emphasize the bracing type selector. - weight = "700" if (text or "").strip() == "Type of Bracing:" else "400" - label.setStyleSheet(f"font-size: 11px; font-weight: {weight}; color: #4b4b4b; border: none;") + label.setStyleSheet("font-size: 11px; font-weight: 400; color: #4b4b4b; border: none;") return label def _add_grid_row(self, layout, row, text, widget): @@ -608,6 +665,149 @@ def _create_mode_value_widget(self, mode_combo: QComboBox, value_input: QLineEdi layout.addWidget(value_input) return widget + def _create_dimension_input_widget(self, field_key: str): + widget = QWidget() + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + try: + widget.setFixedWidth(int(getattr(self, "_combo_width", 190))) + except Exception: + pass + + layout = QHBoxLayout(widget) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + + value_input = self._create_line_edit() + value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, value_input)) + + bounds_button = QPushButton("Set Bounds") + bounds_button.setCursor(Qt.PointingHandCursor) + bounds_button.setMinimumHeight(28) + bounds_button.setStyleSheet( + "QPushButton {" + " border: 1px solid #2f2f2f; border-radius: 8px;" + " background: #ffffff; color: #111111; font-size: 12px; font-weight: 700;" + " padding: 4px 10px;" + "}" + "QPushButton:hover { background: #f2f2f2; }" + "QPushButton:pressed { background: #e9e9e9; }" + ) + bounds_button.clicked.connect(lambda _checked=False, key=field_key: self._open_bounds_dialog(key)) + + layout.addWidget(value_input) + layout.addWidget(bounds_button) + return widget, value_input, bounds_button + + def _default_dimension_bounds(self, field_key: str) -> dict: + defaults = { + "total_depth": {"lower": 200.0, "upper": 2000.0, "increment": 25.0}, + "top_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + "bottom_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + } + return dict(defaults.get(field_key, {"lower": 0.0, "upper": 0.0, "increment": 0.0})) + + def _normalized_dimension_bounds(self, field_key: str) -> dict: + defaults = self._default_dimension_bounds(field_key) + current = self._dimension_bounds.get(field_key) or {} + out = {} + for key in ("lower", "upper", "increment"): + try: + out[key] = float(current.get(key, defaults[key])) + except Exception: + out[key] = float(defaults[key]) + return out + + def _format_bounds_tooltip(self, field_key: str) -> str: + bounds = self._normalized_dimension_bounds(field_key) + try: + lower = float(bounds.get("lower", 0.0)) + upper = float(bounds.get("upper", 0.0)) + increment = float(bounds.get("increment", 0.0)) + except Exception: + lower, upper, increment = 0.0, 0.0, 0.0 + return ( + f"Lower Bound: {lower:.2f}\n" + f"Upper Bound: {upper:.2f}\n" + f"Increment: {increment:.2f}" + ) + + def _refresh_bounds_tooltips(self) -> None: + for field_key in ("total_depth", "top_width", "bottom_width"): + bounds_button = getattr(self, f"welded_{field_key}_bounds_button", None) + if bounds_button is not None: + bounds_button.setToolTip(self._format_bounds_tooltip(field_key)) + + def _open_bounds_dialog(self, field_key: str) -> None: + current = self._normalized_dimension_bounds(field_key) + titles = { + "total_depth": "Select Bound: Total Depth", + "top_width": "Select Bound: Topflange Width", + "bottom_width": "Select Bound: Bottomflange Width", + } + dialog = _BoundsDialog(titles.get(field_key, "Select Bound"), current, self) + if dialog.exec() != QDialog.Accepted: + return + + result = dialog.result_bounds() + if not isinstance(result, dict): + return + + self._dimension_bounds[field_key] = { + "lower": float(result.get("lower", 0.0)), + "upper": float(result.get("upper", 0.0)), + "increment": float(result.get("increment", 0.0)), + } + self._refresh_bounds_tooltips() + self._update_welded_preview_and_props() + + def _update_welded_dimension_field_mode(self) -> None: + is_custom_design = (self.welded_design_combo.currentText() or "").strip().lower() == "customized" if self.welded_design_combo else False + + for field_key in ("total_depth", "top_width", "bottom_width"): + value_input = getattr(self, f"welded_{field_key}", None) + bounds_button = getattr(self, f"welded_{field_key}_bounds_button", None) + if value_input is None or bounds_button is None: + continue + + show_line_edit = bool(is_custom_design) + value_input.setVisible(show_line_edit) + value_input.setEnabled(show_line_edit) + bounds_button.setVisible(not show_line_edit) + bounds_button.setEnabled(not show_line_edit) + + def _attach_thickness_value_dropdown(self, wrapper: QWidget, value_input: QLineEdit) -> QComboBox: + combo = QComboBox() + combo.addItems(SAIL_APPROVED_THICKNESS_VALUES) + apply_field_style(combo) + combo.setVisible(False) + self._configure_combo_box(combo) + + combo.currentTextChanged.connect(lambda text, inp=value_input: inp.setText(str(text or ""))) + combo.currentTextChanged.connect(self._update_welded_preview_and_props) + + layout = wrapper.layout() + if layout is not None: + layout.addWidget(combo) + return combo + + def _sync_thickness_value_dropdown(self, mode_combo: QComboBox | None, value_input: QLineEdit | None, value_combo: QComboBox | None) -> None: + if mode_combo is None or value_input is None or value_combo is None: + return + if not self._is_custom_thickness_mode(mode_combo): + return + + current_text = str(value_input.text() or "").strip() + if current_text not in SAIL_APPROVED_THICKNESS_VALUES: + current_text = SAIL_APPROVED_THICKNESS_VALUES[0] + value_input.setText(current_text) + + prev = value_combo.blockSignals(True) + try: + idx = value_combo.findText(current_text, Qt.MatchFixedString) + value_combo.setCurrentIndex(idx if idx >= 0 else 0) + finally: + value_combo.blockSignals(prev) + def _is_custom_thickness_mode(self, combo: QComboBox | None) -> bool: if combo is None: return False @@ -616,27 +816,73 @@ def _is_custom_thickness_mode(self, combo: QComboBox | None) -> bool: def _update_welded_thickness_value_enabled_state(self) -> None: is_custom_design = (self.welded_design_combo.currentText() or "").strip() == "Customized" if self.welded_design_combo else False - for mode_combo, value_input in ( - (getattr(self, "welded_web_thickness_combo", None), getattr(self, "welded_web_thickness_value", None)), - (getattr(self, "welded_top_thickness_combo", None), getattr(self, "welded_top_thickness_value", None)), - (getattr(self, "welded_bottom_thickness_combo", None), getattr(self, "welded_bottom_thickness_value", None)), + for mode_combo, value_input, value_combo, wrapper in ( + ( + getattr(self, "welded_web_thickness_combo", None), + getattr(self, "welded_web_thickness_value", None), + getattr(self, "welded_web_thickness_value_combo", None), + getattr(self, "welded_web_thickness_widget", None), + ), + ( + getattr(self, "welded_top_thickness_combo", None), + getattr(self, "welded_top_thickness_value", None), + getattr(self, "welded_top_thickness_value_combo", None), + getattr(self, "welded_top_thickness_widget", None), + ), + ( + getattr(self, "welded_bottom_thickness_combo", None), + getattr(self, "welded_bottom_thickness_value", None), + getattr(self, "welded_bottom_thickness_value_combo", None), + getattr(self, "welded_bottom_thickness_widget", None), + ), ): if mode_combo is None or value_input is None: continue - show_value = bool(is_custom_design and self._is_custom_thickness_mode(mode_combo)) - value_input.setVisible(show_value) - value_input.setEnabled(show_value) + # Match Girder welded behavior: + # Customized -> force Custom mode and show SAIL-value dropdown only. + if is_custom_design: + if mode_combo.currentText().strip().lower() != "custom": + prev = mode_combo.blockSignals(True) + mode_combo.setCurrentText("Custom") + mode_combo.blockSignals(prev) - try: - total_width = int(getattr(self, "_combo_width", 190)) - if show_value: - mode_combo.setFixedWidth(max(96, total_width - 84)) - value_input.setFixedWidth(78) - else: - mode_combo.setFixedWidth(total_width) - except Exception: - pass + mode_combo.setVisible(False) + mode_combo.setEnabled(False) + + value_input.setVisible(False) + value_input.setEnabled(False) + value_input.setReadOnly(True) + + if value_combo is not None: + value_combo.setVisible(True) + value_combo.setEnabled(True) + self._sync_thickness_value_dropdown(mode_combo, value_input, value_combo) + + if wrapper is not None: + try: + wrapper.setFixedWidth(int(getattr(self, "_combo_width", 190))) + except Exception: + pass + continue + + # Optimized -> show only mode combo; keep value controls hidden. + mode_combo.setVisible(True) + mode_combo.setEnabled(True) + + value_input.setVisible(False) + value_input.setEnabled(False) + value_input.setReadOnly(True) + + if value_combo is not None: + value_combo.setVisible(False) + value_combo.setEnabled(False) + + if wrapper is not None: + try: + wrapper.setFixedWidth(int(getattr(self, "_combo_width", 190))) + except Exception: + pass def _create_selection_box(self, view_key: str): box = self._create_inner_box() @@ -838,26 +1084,27 @@ def _create_section_properties_box(self, title): grid.setColumnStretch(1, 1) properties = [ - "Mass, M (Kg/m)", - "Sectional Area, a (cm2)", - "2nd Moment of Area, Iz (cm4)", - "2nd Moment of Area, Iy (cm4)", - "Radius of Gyration, rz (cm)", - "Radius of Gyration, ry (cm)", - "Elastic Modulus, Zz (cm3)", - "Elastic Modulus, Zy (cm3)", - "Plastic Modulus, Zuz (cm3)", - "Plastic Modulus, Zuy (cm3)" + ("Mass, M (Kg/m)", "Mass, M (Kg/m)"), + ("Sectional Area, a (cm2)", "Sectional Area, a (cm2)"), + ("2nd Moment of Area, Iz (cm4)", "2nd Moment of Area, Iz (cm4)"), + ("2nd Moment of Area, Iy (cm4)", "2nd Moment of Area, Iy (cm4)"), + ("Radius of Gyration, rz (cm)", "Radius of Gyration, rz (cm)"), + ("Radius of Gyration, ry (cm)", "Radius of Gyration, ry (cm)"), + ("Elastic Modulus, Zz (cm3)", "Elastic Modulus, Zz (cm3)"), + ("Elastic Modulus, Zy (cm3)", "Elastic Modulus, Zy (cm3)"), + ("Plastic Modulus, Zuz (cm3)", "Plastic Modulus, Zuz (cm3)"), + ("Plastic Modulus, Zuy (cm3)", "Plastic Modulus, Zuy (cm3)"), ] inputs = {} - for row, name in enumerate(properties): - label = self._create_label(name) + for row, (key, label_text) in enumerate(properties): + label = self._create_label(label_text) + label.setTextFormat(Qt.RichText) field = self._create_line_edit() field.setReadOnly(True) grid.addWidget(label, row, 0) grid.addWidget(field, row, 1) - inputs[name] = field + inputs[key] = field layout.addLayout(grid) return box, inputs @@ -1227,7 +1474,8 @@ def _build_cross_bracing_view(self): design_combo.setCurrentIndex(1) # Default to Optimized self._configure_combo_box(design_combo) apply_field_style(design_combo) - row = self._add_grid_row(grid, 0, "Design:", design_combo) + design_combo.setVisible(False) + row = 0 self.cross_design_combo = design_combo type_selector = QComboBox() @@ -1391,7 +1639,8 @@ def _build_rolled_view(self): self.rolled_design_combo = design_combo self._configure_combo_box(design_combo) apply_field_style(design_combo) - row = self._add_grid_row(grid, 0, "Design:", design_combo) + design_combo.setVisible(False) + row = 0 type_selector = QComboBox() type_selector.addItems(VALUES_END_DIAPHRAGM_TYPE) @@ -1483,7 +1732,8 @@ def _build_welded_view(self): self.welded_design_combo = design_combo self._configure_combo_box(design_combo) apply_field_style(design_combo) - row = self._add_grid_row(grid, 0, "Design:", design_combo) + design_combo.setVisible(False) + row = 0 type_selector = QComboBox() type_selector.addItems(VALUES_END_DIAPHRAGM_TYPE) @@ -1498,15 +1748,11 @@ def _build_welded_view(self): apply_field_style(symmetry_combo) row = self._add_grid_row(grid, row, "Symmetry:", symmetry_combo) - total_depth = self._create_line_edit() - total_depth.setValidator(QDoubleValidator(0, 1_000_000, 3)) - try: - total_depth.setFixedWidth(int(getattr(self, "_combo_width", 190))) - total_depth.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - except Exception: - pass - row = self._add_grid_row(grid, row, "Total Depth (mm):", total_depth) + total_depth_widget, total_depth, total_depth_bounds_button = self._create_dimension_input_widget("total_depth") + row = self._add_grid_row(grid, row, "Total Depth (mm):", total_depth_widget) self.welded_total_depth = total_depth + self.welded_total_depth_widget = total_depth_widget + self.welded_total_depth_bounds_button = total_depth_bounds_button web_thick_combo = QComboBox() web_thick_combo.addItems(VALUES_PROFILE_SCOPE if "VALUES_PROFILE_SCOPE" in globals() else ["All", "Custom"]) @@ -1525,16 +1771,14 @@ def _build_welded_view(self): row = self._add_grid_row(grid, row, "Web Thickness (mm):", web_thick_widget) self.welded_web_thickness_combo = web_thick_combo self.welded_web_thickness_value = web_thick_value + self.welded_web_thickness_widget = web_thick_widget + self.welded_web_thickness_value_combo = self._attach_thickness_value_dropdown(web_thick_widget, web_thick_value) - top_width = self._create_line_edit() - top_width.setValidator(QDoubleValidator(0, 1_000_000, 3)) - try: - top_width.setFixedWidth(int(getattr(self, "_combo_width", 190))) - top_width.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - except Exception: - pass - row = self._add_grid_row(grid, row, "Width of Top Flange (mm):", top_width) + top_width_widget, top_width, top_width_bounds_button = self._create_dimension_input_widget("top_width") + row = self._add_grid_row(grid, row, "Width of Top Flange (mm):", top_width_widget) self.welded_top_width = top_width + self.welded_top_width_widget = top_width_widget + self.welded_top_width_bounds_button = top_width_bounds_button top_thickness_combo = QComboBox() top_thickness_combo.addItems(VALUES_PROFILE_SCOPE if "VALUES_PROFILE_SCOPE" in globals() else ["All", "Custom"]) @@ -1553,16 +1797,14 @@ def _build_welded_view(self): row = self._add_grid_row(grid, row, "Top Flange Thickness (mm):", top_thickness_widget) self.welded_top_thickness_combo = top_thickness_combo self.welded_top_thickness_value = top_thickness_value + self.welded_top_thickness_widget = top_thickness_widget + self.welded_top_thickness_value_combo = self._attach_thickness_value_dropdown(top_thickness_widget, top_thickness_value) - bottom_width = self._create_line_edit() - bottom_width.setValidator(QDoubleValidator(0, 1_000_000, 3)) - try: - bottom_width.setFixedWidth(int(getattr(self, "_combo_width", 190))) - bottom_width.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - except Exception: - pass - row = self._add_grid_row(grid, row, "Width of Bottom Flange (mm):", bottom_width) + bottom_width_widget, bottom_width, bottom_width_bounds_button = self._create_dimension_input_widget("bottom_width") + row = self._add_grid_row(grid, row, "Width of Bottom Flange (mm):", bottom_width_widget) self.welded_bottom_width = bottom_width + self.welded_bottom_width_widget = bottom_width_widget + self.welded_bottom_width_bounds_button = bottom_width_bounds_button bottom_thickness_combo = QComboBox() bottom_thickness_combo.addItems(VALUES_PROFILE_SCOPE if "VALUES_PROFILE_SCOPE" in globals() else ["All", "Custom"]) @@ -1581,6 +1823,8 @@ def _build_welded_view(self): row = self._add_grid_row(grid, row, "Bottom Flange Thickness (mm):", bottom_thickness_widget) self.welded_bottom_thickness_combo = bottom_thickness_combo self.welded_bottom_thickness_value = bottom_thickness_value + self.welded_bottom_thickness_widget = bottom_thickness_widget + self.welded_bottom_thickness_value_combo = self._attach_thickness_value_dropdown(bottom_thickness_widget, bottom_thickness_value) self._welded_inputs = [ symmetry_combo, @@ -1642,6 +1886,8 @@ def _build_welded_view(self): self._update_welded_preview_and_props() self._on_welded_design_changed(design_combo.currentText()) self._update_welded_thickness_value_enabled_state() + self._update_welded_dimension_field_mode() + self._refresh_bounds_tooltips() return view, type_selector def _handle_type_selection(self, value): diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py index 8185ab623..764e91852 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py @@ -10,7 +10,9 @@ from PySide6.QtCore import Qt from PySide6.QtGui import QDoubleValidator, QColor, QPalette, QPen from PySide6.QtWidgets import ( + QAbstractItemView, QComboBox, + QDialog, QFrame, QGridLayout, QHBoxLayout, @@ -19,6 +21,7 @@ QLineEdit, QMessageBox, QPushButton, + QListWidget, QScrollArea, QSizePolicy, QStyledItemDelegate, @@ -34,6 +37,7 @@ VALUES_GIRDER_DESIGN_MODE, VALUES_GIRDER_SPAN_MODE, VALUES_GIRDER_SYMMETRY, + VALUES_GIRDER_SUPPORT_TYPE, VALUES_GIRDER_TYPE, VALUES_PROFILE_SCOPE, VALUES_TORSIONAL_RESTRAINT, @@ -41,6 +45,7 @@ VALUES_WEB_TYPE, ) from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview @@ -50,7 +55,10 @@ # This is a UI safety cap; actual girder count is driven by the "No. of Girders" input. MAX_GIRDER_COUNT = 20 - +SAIL_APPROVED_THICKNESS_VALUES = [ + "8", "10", "12", "14", "16", "18", "20", "22", "25", "28", "32", "36", + "40", "45", "50", "56", "63", "75", "80", "90", "100", "110", "120", +] def _locate_database() -> Path: current = Path(__file__).resolve() for parent in current.parents: @@ -249,6 +257,320 @@ def setModelData(self, editor, model, index): # noqa: N802 (Qt naming) model.setData(index, editor.text()) +class _BoundsDialog(QDialog): + def __init__(self, title: str, bounds: dict, parent=None): + super().__init__(parent) + self.setWindowTitle(title) + self.setWindowFlags(Qt.Dialog | Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) + self.setWindowModality(Qt.ApplicationModal) + self.setModal(True) + self.setMinimumWidth(560) + self.setStyleSheet("QDialog { background: #ffffff; border: 1px solid #90AF13; }") + + root_layout = QVBoxLayout(self) + root_layout.setContentsMargins(1, 1, 1, 1) + root_layout.setSpacing(0) + + self.title_bar = CustomTitleBar(parent=self) + self.title_bar.setTitle(title) + root_layout.addWidget(self.title_bar) + + content = QWidget(self) + content.setStyleSheet("background: #f3f3f3;") + root_layout.addWidget(content) + + layout = QVBoxLayout(content) + layout.setContentsMargins(22, 16, 22, 16) + layout.setSpacing(12) + + form_grid = QGridLayout() + form_grid.setHorizontalSpacing(14) + form_grid.setVerticalSpacing(10) + + lower = float(bounds.get("lower", 0.0)) + upper = float(bounds.get("upper", 0.0)) + increment = float(bounds.get("increment", 0.0)) + + self.lower_input = QLineEdit(f"{lower:.2f}") + self.upper_input = QLineEdit(f"{upper:.2f}") + self.increment_input = QLineEdit(f"{increment:.2f}") + + for line_edit in (self.lower_input, self.upper_input, self.increment_input): + line_edit.setValidator(QDoubleValidator(0.0, 1e12, 3, line_edit)) + line_edit.setMinimumHeight(34) + line_edit.setStyleSheet( + "QLineEdit {" + " border: 1px solid #c8c8c8; border-radius: 8px;" + " background: #ffffff; color: #111111; padding: 6px 10px; font-size: 13px;" + "}" + ) + + labels = ( + ("Lower Bound:", self.lower_input), + ("Upper Bound:", self.upper_input), + ("Increment:", self.increment_input), + ) + for row, (text, widget) in enumerate(labels): + lbl = QLabel(text) + lbl.setStyleSheet("font-size: 12px; color: #202020; background: transparent;") + form_grid.addWidget(lbl, row, 0, Qt.AlignLeft | Qt.AlignVCenter) + form_grid.addWidget(widget, row, 1) + + layout.addLayout(form_grid) + + button_row = QHBoxLayout() + button_row.setContentsMargins(0, 4, 0, 0) + button_row.setSpacing(10) + button_row.addStretch(1) + + cancel_btn = QPushButton("Cancel") + ok_btn = QPushButton("OK") + for button in (cancel_btn, ok_btn): + button.setMinimumHeight(34) + button.setStyleSheet( + "QPushButton {" + " background: #ffffff; color: #111111;" + " border: 1px solid #1f1f1f; border-radius: 10px;" + " min-width: 86px;" + " font-size: 12px; font-weight: 700;" + "}" + "QPushButton:hover { background: #f3f3f3; }" + "QPushButton:pressed { background: #e9e9e9; }" + ) + + cancel_btn.clicked.connect(self.reject) + ok_btn.clicked.connect(self._on_accept) + button_row.addWidget(cancel_btn) + button_row.addWidget(ok_btn) + layout.addLayout(button_row) + + self._result = None + + def _on_accept(self) -> None: + lower = self._parse_positive(self.lower_input.text()) + upper = self._parse_positive(self.upper_input.text()) + increment = self._parse_positive(self.increment_input.text()) + + if lower is None or upper is None or increment is None: + box = QMessageBox(self) + box.setIcon(QMessageBox.Warning) + box.setWindowTitle("Invalid Bounds") + box.setText("Please enter valid positive numeric values.") + box.setStandardButtons(QMessageBox.Ok) + box.exec() + return + if upper <= lower: + box = QMessageBox(self) + box.setIcon(QMessageBox.Warning) + box.setWindowTitle("Invalid Bounds") + box.setText("Upper bound must be greater than lower bound.") + box.setStandardButtons(QMessageBox.Ok) + box.exec() + return + if increment <= 0.0: + box = QMessageBox(self) + box.setIcon(QMessageBox.Warning) + box.setWindowTitle("Invalid Bounds") + box.setText("Increment must be greater than zero.") + box.setStandardButtons(QMessageBox.Ok) + box.exec() + return + + self._result = { + "lower": float(lower), + "upper": float(upper), + "increment": float(increment), + } + self.accept() + + @staticmethod + def _parse_positive(text: str) -> Optional[float]: + try: + return float(str(text).strip()) + except Exception: + return None + + def result_bounds(self) -> Optional[dict]: + return self._result + + +class _ThicknessSelectionDialog(QDialog): + def __init__(self, title: str, selected_values: List[str], parent=None): + super().__init__(parent) + self.setWindowTitle(title) + self.setWindowFlags(Qt.Dialog | Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) + self.setWindowModality(Qt.ApplicationModal) + self.setModal(True) + self.setMinimumSize(620, 520) + self.setStyleSheet("QDialog { background: #ffffff; border: 1px solid #90AF13; }") + + root_layout = QVBoxLayout(self) + root_layout.setContentsMargins(1, 1, 1, 1) + root_layout.setSpacing(0) + + self.title_bar = CustomTitleBar(parent=self) + self.title_bar.setTitle(title) + root_layout.addWidget(self.title_bar) + + content = QWidget(self) + content.setStyleSheet("background: #f3f3f3;") + root_layout.addWidget(content) + + layout = QVBoxLayout(content) + layout.setContentsMargins(24, 18, 24, 18) + layout.setSpacing(14) + + top_row = QHBoxLayout() + top_row.setSpacing(18) + + left_col = QVBoxLayout() + left_col.setSpacing(8) + left_lbl = QLabel("Available:") + left_lbl.setStyleSheet("font-size: 12px; font-weight: 600; color: #1f1f1f;") + self.available_list = QListWidget() + self.available_list.setSelectionMode(QAbstractItemView.ExtendedSelection) + self.available_list.setStyleSheet( + "QListWidget { background: #ffffff; border: 1px solid #c8c8c8; border-radius: 10px;" + " font-size: 14px; color: #1f1f1f; padding: 4px; }" + ) + left_col.addWidget(left_lbl) + left_col.addWidget(self.available_list, 1) + + buttons_col = QVBoxLayout() + buttons_col.setSpacing(10) + buttons_col.addStretch(1) + self.move_all_right_btn = self._move_btn(">>", True) + self.move_right_btn = self._move_btn(">", False) + self.move_left_btn = self._move_btn("<", False) + self.move_all_left_btn = self._move_btn("<<", True) + buttons_col.addWidget(self.move_all_right_btn) + buttons_col.addWidget(self.move_right_btn) + buttons_col.addWidget(self.move_left_btn) + buttons_col.addWidget(self.move_all_left_btn) + buttons_col.addStretch(1) + + right_col = QVBoxLayout() + right_col.setSpacing(8) + right_lbl = QLabel("Selected:") + right_lbl.setStyleSheet("font-size: 12px; font-weight: 600; color: #1f1f1f;") + self.selected_list = QListWidget() + self.selected_list.setSelectionMode(QAbstractItemView.ExtendedSelection) + self.selected_list.setStyleSheet( + "QListWidget { background: #ffffff; border: 1px solid #c8c8c8; border-radius: 10px;" + " font-size: 14px; color: #1f1f1f; padding: 4px; }" + ) + right_col.addWidget(right_lbl) + right_col.addWidget(self.selected_list, 1) + + top_row.addLayout(left_col, 1) + top_row.addLayout(buttons_col) + top_row.addLayout(right_col, 1) + layout.addLayout(top_row, 1) + + submit_row = QHBoxLayout() + submit_row.addStretch(1) + submit_btn = QPushButton("Submit") + submit_btn.setMinimumHeight(40) + submit_btn.setMinimumWidth(220) + submit_btn.setStyleSheet( + "QPushButton {" + " background: #90AF13; color: #ffffff;" + " border: 1px solid #90AF13; border-radius: 10px;" + " font-size: 14px; font-weight: 700;" + "}" + "QPushButton:hover { background: #7f9d11; }" + "QPushButton:pressed { background: #6f8b0f; }" + ) + submit_btn.clicked.connect(self.accept) + submit_row.addWidget(submit_btn) + submit_row.addStretch(1) + layout.addLayout(submit_row) + + selected = [v for v in selected_values if v in SAIL_APPROVED_THICKNESS_VALUES] + if not selected: + selected = list(SAIL_APPROVED_THICKNESS_VALUES) + available = [v for v in SAIL_APPROVED_THICKNESS_VALUES if v not in selected] + + self.available_list.addItems(available) + self.selected_list.addItems(selected) + + self.move_all_right_btn.clicked.connect(self._move_all_right) + self.move_right_btn.clicked.connect(self._move_selected_right) + self.move_left_btn.clicked.connect(self._move_selected_left) + self.move_all_left_btn.clicked.connect(self._move_all_left) + + self._refresh_button_states() + self.available_list.itemSelectionChanged.connect(self._refresh_button_states) + self.selected_list.itemSelectionChanged.connect(self._refresh_button_states) + + def _move_btn(self, text: str, primary: bool) -> QPushButton: + button = QPushButton(text) + button.setMinimumSize(84, 48) + if primary: + button.setStyleSheet( + "QPushButton { background: #90AF13; color: #ffffff; border: 1px solid #90AF13;" + " border-radius: 10px; font-size: 18px; font-weight: 800; }" + "QPushButton:hover { background: #7f9d11; }" + "QPushButton:pressed { background: #6f8b0f; }" + "QPushButton:disabled { background: #d2d2d2; color: #8a8a8a; border-color: #d2d2d2; }" + ) + else: + button.setStyleSheet( + "QPushButton { background: #cfcfcf; color: #6b6b6b; border: 1px solid #cfcfcf;" + " border-radius: 10px; font-size: 18px; font-weight: 800; }" + "QPushButton:disabled { background: #dcdcdc; color: #9a9a9a; border-color: #dcdcdc; }" + ) + return button + + def _move_selected_right(self) -> None: + self._move_items(self.available_list, self.selected_list, selected_only=True) + + def _move_selected_left(self) -> None: + self._move_items(self.selected_list, self.available_list, selected_only=True) + + def _move_all_right(self) -> None: + self._move_items(self.available_list, self.selected_list, selected_only=False) + + def _move_all_left(self) -> None: + self._move_items(self.selected_list, self.available_list, selected_only=False) + + def _move_items(self, source: QListWidget, target: QListWidget, selected_only: bool) -> None: + rows = [] + if selected_only: + rows = sorted([source.row(item) for item in source.selectedItems()], reverse=True) + else: + rows = list(range(source.count() - 1, -1, -1)) + + moved = [] + for row in rows: + item = source.takeItem(row) + if item is not None: + moved.append(item.text()) + for text in moved: + target.addItem(text) + + self._sort_list(self.available_list) + self._sort_list(self.selected_list) + self._refresh_button_states() + + def _sort_list(self, widget: QListWidget) -> None: + values = [] + for i in range(widget.count()): + values.append(widget.item(i).text()) + values = sorted(values, key=lambda v: SAIL_APPROVED_THICKNESS_VALUES.index(v) if v in SAIL_APPROVED_THICKNESS_VALUES else 9999) + widget.clear() + widget.addItems(values) + + def _refresh_button_states(self) -> None: + self.move_right_btn.setEnabled(bool(self.available_list.selectedItems())) + self.move_left_btn.setEnabled(bool(self.selected_list.selectedItems())) + self.move_all_right_btn.setEnabled(self.available_list.count() > 0) + self.move_all_left_btn.setEnabled(self.selected_list.count() > 0) + + def selected_values(self) -> List[str]: + return [self.selected_list.item(i).text() for i in range(self.selected_list.count())] + + class GirderDetailsTab(QWidget): """Tab for Girder Details styled to match the provided reference.""" @@ -277,6 +599,7 @@ def __init__(self, parent=None): self._member_state: Dict[str, Dict[str, dict]] = {} self._dirty_members: set[tuple[str, str]] = set() self._last_member_combo_index: int = 0 + self._suppress_member_switch_prompt: bool = True # Template state used when a member is first visited. self._default_member_state: Optional[dict] = None # Section Inputs widgets are built later than the overview card. Avoid @@ -294,8 +617,17 @@ def __init__(self, parent=None): # Section Inputs widgets self.member_id_combo: Optional[QComboBox] = None + self._dimension_bounds = { + "total_depth": {"lower": 200.0, "upper": 2000.0, "increment": 25.0}, + "top_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + "bottom_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + } self.init_ui() + def set_design_mode(self, mode_str: str): + if hasattr(self, "design_combo"): + self.design_combo.setCurrentText(mode_str) + def init_ui(self): main_layout = QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) @@ -388,11 +720,46 @@ def _cad_placeholder(label: str) -> QFrame: self.length_input = QLineEdit("30") apply_field_style(self.length_input) self._set_field_width(self.length_input) - self.length_input.setReadOnly(False) + self.length_input.setReadOnly(True) + self.length_input.setToolTip("Total Span is auto-controlled and cannot be edited here") self.length_input.textChanged.connect(self._on_length_changed) details_layout.addWidget(self._create_label("Total Span (m):"), 2, 0, Qt.AlignLeft | Qt.AlignVCenter) details_layout.addWidget(self.length_input, 2, 1) + # Exterior/Interior copy buttons layout (Row 3, spans 2 columns) + copy_buttons_layout = QHBoxLayout() + copy_buttons_layout.setContentsMargins(0, 0, 0, 0) + copy_buttons_layout.setSpacing(10) + + self.apply_exterior_button = QPushButton("Apply changes to exterior girders") + self.apply_exterior_button.setFixedHeight(26) + self.apply_exterior_button.setStyleSheet( + "QPushButton { background: #f0f0f0; border: 1px solid #b5b5b5; border-radius: 2px; " + "padding: 4px 10px; font-size: 11px; color: #000000; font-weight: 400; }" + "QPushButton:hover { background: #f0f0f0; border: 1px solid #b5b5b5; color: #000000; }" + "QPushButton:pressed { background: #f0f0f0; border: 1px solid #b5b5b5; color: #000000; }" + "QPushButton:disabled { color: #8a8a8a; border: 1px solid #cfcfcf; }" + ) + self.apply_exterior_button.setToolTip("Apply changes to exterior girders (first and last)") + self.apply_exterior_button.clicked.connect(self._on_apply_exterior_clicked) + + self.apply_interior_button = QPushButton("Apply changes to interior girder") + self.apply_interior_button.setFixedHeight(26) + self.apply_interior_button.setStyleSheet( + "QPushButton { background: #f0f0f0; border: 1px solid #b5b5b5; border-radius: 2px; " + "padding: 4px 10px; font-size: 11px; color: #000000; font-weight: 400; }" + "QPushButton:hover { background: #f0f0f0; border: 1px solid #b5b5b5; color: #000000; }" + "QPushButton:pressed { background: #f0f0f0; border: 1px solid #b5b5b5; color: #000000; }" + "QPushButton:disabled { color: #8a8a8a; border: 1px solid #cfcfcf; }" + ) + self.apply_interior_button.setToolTip("Apply changes to interior girder(s)") + self.apply_interior_button.clicked.connect(self._on_apply_interior_clicked) + + copy_buttons_layout.addWidget(self.apply_exterior_button) + copy_buttons_layout.addWidget(self.apply_interior_button) + + details_layout.addLayout(copy_buttons_layout, 3, 0, 1, 2) + # Hidden legacy fields: still used by existing split/ripple logic. self.member_id_input = QLineEdit() apply_field_style(self.member_id_input) @@ -414,15 +781,15 @@ def _cad_placeholder(label: str) -> QFrame: self.segment_length_input.setReadOnly(True) self.segment_length_input.setVisible(False) - details_layout.addWidget(self.member_id_input, 3, 0, 1, 2) - details_layout.addWidget(self.distance_start_input, 4, 0, 1, 2) - details_layout.addWidget(self.distance_end_input, 5, 0, 1, 2) - details_layout.addWidget(self.segment_length_input, 6, 0, 1, 2) + details_layout.addWidget(self.member_id_input, 4, 0, 1, 2) + details_layout.addWidget(self.distance_start_input, 5, 0, 1, 2) + details_layout.addWidget(self.distance_end_input, 6, 0, 1, 2) + details_layout.addWidget(self.segment_length_input, 7, 0, 1, 2) left_layout.addWidget(details_box) left_layout.addStretch(1) - # RIGHT: Member segments table + add/remove buttons (matches reference layout) + # RIGHT: Member segments table with per-row actions manager_box = self._create_inner_box() manager_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) manager_layout = QVBoxLayout(manager_box) @@ -435,16 +802,21 @@ def _cad_placeholder(label: str) -> QFrame: table_row = QWidget() table_row_layout = QHBoxLayout(table_row) table_row_layout.setContentsMargins(0, 0, 0, 0) - table_row_layout.setSpacing(10) + table_row_layout.setSpacing(0) - self.segment_table = QTableWidget(0, 4) - self.segment_table.setHorizontalHeaderLabels(["Member ID", "Start (m)", "End (m)", "Length (m)"]) + self.segment_table = QTableWidget(0, 5) + self.segment_table.setHorizontalHeaderLabels(["Member ID", "Start (m)", "End (m)", "Length (m)", "Action"]) self.segment_table.horizontalHeader().setVisible(True) self.segment_table.verticalHeader().setVisible(False) - self.segment_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.segment_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch) + self.segment_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) + self.segment_table.horizontalHeader().setSectionResizeMode(2, QHeaderView.Stretch) + self.segment_table.horizontalHeader().setSectionResizeMode(3, QHeaderView.Stretch) + self.segment_table.horizontalHeader().setSectionResizeMode(4, QHeaderView.Fixed) + self.segment_table.setColumnWidth(4, 132) self.segment_table.horizontalHeader().setMinimumHeight(34) - self.segment_table.verticalHeader().setDefaultSectionSize(34) - self.segment_table.verticalHeader().setMinimumSectionSize(28) + self.segment_table.verticalHeader().setDefaultSectionSize(38) + self.segment_table.verticalHeader().setMinimumSectionSize(34) self.segment_table.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.segment_table.setShowGrid(True) self.segment_table.setGridStyle(Qt.SolidLine) @@ -459,7 +831,7 @@ def _cad_placeholder(label: str) -> QFrame: self.segment_table.setFixedHeight(_hdr_h + (2 * _row_h) + 10) self.segment_table.setStyleSheet( "QTableWidget { background: #ffffff; border: 1px solid #d6d6d6; border-radius: 6px; gridline-color: #d0d0d0; }" - "QTableWidget::item { color: #1f1f1f; padding: 6px; }" + "QTableWidget::item { color: #1f1f1f; padding: 4px 6px; }" "QTableWidget::item:selected { background: #e8f0c9; color: #1a1a1a; }" "QTableWidget::item:focus { outline: none; }" "QTableWidget QLineEdit { background: #ffffff; color: #000000; }" @@ -477,36 +849,6 @@ def _cad_placeholder(label: str) -> QFrame: self.segment_table.itemChanged.connect(self._on_segment_table_item_changed) table_row_layout.addWidget(self.segment_table, 1) - buttons_col = QWidget() - buttons_layout = QVBoxLayout(buttons_col) - buttons_layout.setContentsMargins(0, 0, 0, 0) - buttons_layout.setSpacing(8) - - self.split_add_button = QPushButton("+") - self.split_add_button.setFixedSize(36, 36) - self.split_add_button.setStyleSheet( - "QPushButton { background-color: #90AF13; color: #111111; border: 1px solid #6f850f; border-radius: 6px; padding: 0px; font-weight: 900; font-size: 22px; }" - "QPushButton:hover { background-color: #7a9410; }" - "QPushButton:pressed { background-color: #6a840d; }" - ) - self.split_add_button.setToolTip("Add/Split member segment") - self.split_add_button.clicked.connect(self._on_split_add_clicked) - - self.split_remove_button = QPushButton("X") - self.split_remove_button.setFixedSize(36, 36) - self.split_remove_button.setStyleSheet( - "QPushButton { background-color: #c72626; color: #ffffff; border: 1px solid #8f1c1c; border-radius: 6px; padding: 0px; font-weight: 900; font-size: 16px; }" - "QPushButton:hover { background-color: #ae1f1f; }" - "QPushButton:pressed { background-color: #991a1a; }" - ) - self.split_remove_button.setToolTip("Remove selected segment") - self.split_remove_button.clicked.connect(self._on_remove_segment_clicked) - - buttons_layout.addWidget(self.split_add_button) - buttons_layout.addWidget(self.split_remove_button) - buttons_layout.addStretch(1) - table_row_layout.addWidget(buttons_col, 0) - manager_layout.addWidget(table_row) # Remove local add to layout, we will build the grid at the end @@ -594,16 +936,16 @@ def _ensure_girder_segments(self, girder: str) -> List[Dict[str, float]]: self._migrate_member_state_key(girder, existing, new_id) seg["id"] = new_id else: - # If it doesn't match either format, leave it as-is. - pass + # Invalid/legacy ID: force canonical sequence and migrate state key. + self._migrate_member_state_key(girder, existing, desired) + seg["id"] = desired - # Normalize starts to always equal previous end, and last end to total span. - segments[0]["start"] = 0.0 + # Keep explicit user-entered starts/ends as-is; only fill missing values. + if "start" not in segments[0] or segments[0]["start"] is None: + segments[0]["start"] = 0.0 for i in range(1, len(segments)): - segments[i]["start"] = float(segments[i - 1].get("end", 0.0)) - # Do NOT force the current last segment to end at total span here. - # End-at-span is enforced by the split logic (creating a fill segment), - # and by total span changes. + if "start" not in segments[i] or segments[i]["start"] is None: + segments[i]["start"] = float(segments[i - 1].get("end", 0.0)) if "end" not in segments[-1] or segments[-1]["end"] is None: segments[-1]["end"] = float(total_span) return segments @@ -619,14 +961,33 @@ def _refresh_segment_list(self, girder: str) -> None: segments = self._ensure_girder_segments(girder) self.segment_table.blockSignals(True) try: + # Hard reset row widgets/items each refresh to avoid stale cell-widgets + # being painted in wrong columns after repeated split/remove updates. + self.segment_table.clearContents() + self.segment_table.setRowCount(0) self.segment_table.setRowCount(len(segments)) for row, seg in enumerate(segments): + # Defensive cleanup: ensure no stale widgets leak into data columns. + for col in (0, 1, 2, 3): + if self.segment_table.cellWidget(row, col) is not None: + self.segment_table.removeCellWidget(row, col) + + # Enforce canonical member id at render-time. + desired_id = self._make_segment_id(girder, row + 1) + seg_id = str(seg.get("id") or "").strip() + base, index = self._split_member_id(seg_id) + if not (base == girder and isinstance(index, int) and index == (row + 1)): + if seg_id and seg_id != desired_id: + self._migrate_member_state_key(girder, seg_id, desired_id) + seg_id = desired_id + seg["id"] = seg_id + start = float(seg.get("start", 0.0)) end = float(seg.get("end", 0.0)) length = max(0.0, end - start) # Member ID - id_item = QTableWidgetItem(str(seg.get("id", ""))) + id_item = QTableWidgetItem(seg_id) id_item.setTextAlignment(Qt.AlignCenter) id_item.setFlags(id_item.flags() & ~Qt.ItemIsEditable) id_item.setToolTip("Read-only") @@ -648,22 +1009,111 @@ def _refresh_segment_list(self, girder: str) -> None: length_item.setFlags(length_item.flags() & ~Qt.ItemIsEditable) length_item.setToolTip("Read-only") self.segment_table.setItem(row, 3, length_item) + + action_widget = self._create_segment_action_widget(row, can_remove=(len(segments) > 1)) + self.segment_table.setCellWidget(row, 4, action_widget) finally: self.segment_table.blockSignals(False) self._sync_remove_button_visibility() + self._update_segment_action_row_highlight(self._current_segment_index) def _sync_remove_button_visibility(self) -> None: - """Hide X when only one segment exists (must always keep at least one).""" - if not self.split_remove_button: - return + """Keep per-row remove action disabled when only one segment exists.""" segments = self._ensure_girder_segments(self._current_girder) - show_remove = len(segments) > 1 - self.split_remove_button.setVisible(show_remove) - self.split_remove_button.setEnabled(show_remove) + can_remove = len(segments) > 1 + + if self.segment_table is not None: + for row in range(self.segment_table.rowCount()): + action_widget = self.segment_table.cellWidget(row, 4) + if action_widget is None: + continue + remove_btn = action_widget.findChild(QPushButton, "segmentRemoveBtn") + if remove_btn is not None: + remove_btn.setEnabled(can_remove) + remove_btn.setToolTip("Remove this segment" if can_remove else "At least one segment is required") self._refresh_member_id_combo() + def _update_segment_action_row_highlight(self, current_row: int | None = None) -> None: + if self.segment_table is None: + return + selected_row = self.segment_table.currentRow() if current_row is None else int(current_row) + for row in range(self.segment_table.rowCount()): + action_widget = self.segment_table.cellWidget(row, 4) + if action_widget is None: + continue + bg = "#e8f0c9" if row == selected_row else "transparent" + action_widget.setStyleSheet( + "QWidget#segmentActionCell {" + f" background: {bg};" + " border: none;" + "}" + ) + + def _create_segment_action_widget(self, row: int, can_remove: bool) -> QWidget: + container = QWidget() + container.setObjectName("segmentActionCell") + container.setFixedWidth(118) + container.setMinimumHeight(28) + container.setMaximumHeight(34) + layout = QHBoxLayout(container) + layout.setContentsMargins(0, 2, 0, 2) + layout.setSpacing(6) + layout.setAlignment(Qt.AlignCenter) + container.setStyleSheet("QWidget#segmentActionCell { background: transparent; border: none; }") + + add_btn = QPushButton("+") + add_btn.setObjectName("segmentAddBtn") + add_btn.setFixedSize(34, 24) + add_btn.setFocusPolicy(Qt.NoFocus) + add_btn.setCursor(Qt.PointingHandCursor) + add_btn.setToolTip("Split/Add segment") + add_btn.setStyleSheet( + "QPushButton { background-color: #90AF13; color: #111111; border: 1px solid #6f850f; border-radius: 7px; font-weight: 900; font-size: 17px; }" + "QPushButton:hover { background-color: #7a9410; }" + "QPushButton:pressed { background-color: #6a840d; }" + ) + add_btn.clicked.connect(lambda _checked=False, r=row: self._on_add_segment_for_row(r)) + + remove_btn = QPushButton("−") + remove_btn.setObjectName("segmentRemoveBtn") + remove_btn.setFixedSize(34, 24) + remove_btn.setFocusPolicy(Qt.NoFocus) + remove_btn.setCursor(Qt.PointingHandCursor) + remove_btn.setEnabled(can_remove) + remove_btn.setToolTip("Remove this segment" if can_remove else "At least one segment is required") + remove_btn.setStyleSheet( + "QPushButton { background-color: #c72626; color: #ffffff; border: 1px solid #8f1c1c; border-radius: 7px; font-weight: 900; font-size: 17px; }" + "QPushButton:hover { background-color: #ae1f1f; }" + "QPushButton:pressed { background-color: #991a1a; }" + "QPushButton:disabled { background-color: #d6d6d6; color: #8c8c8c; border-color: #d6d6d6; }" + ) + remove_btn.clicked.connect(lambda _checked=False, r=row: self._on_remove_segment_for_row(r)) + + layout.addStretch(1) + layout.addWidget(add_btn) + if can_remove: + layout.addWidget(remove_btn) + layout.addStretch(1) + return container + + def _on_add_segment_for_row(self, row: int) -> None: + if self.segment_table is None: + return + row = max(0, min(int(row), self.segment_table.rowCount() - 1)) + self.segment_table.setCurrentCell(row, 2) + self._current_segment_index = row + self._on_split_add_clicked() + + def _on_remove_segment_for_row(self, row: int) -> None: + if self.segment_table is None: + return + row = max(0, min(int(row), self.segment_table.rowCount() - 1)) + self.segment_table.setCurrentCell(row, 2) + self._current_segment_index = row + self._on_remove_segment_clicked() + # ===== Member (Member ID) state + dirty tracking ===== def _current_member_key(self) -> tuple[str, str]: @@ -696,6 +1146,12 @@ def _mark_current_member_dirty(self) -> None: def _is_current_member_dirty(self) -> bool: return self._current_member_key() in self._dirty_members + def has_unsaved_changes(self) -> bool: + # Show unsaved-warning popups only for the active member the user is + # currently editing. Other member-level dirty flags are handled when + # switching member/girder and should not block unrelated tab switches. + return self._is_current_member_dirty() + def _commit_current_member_state(self) -> None: girder, member_id = self._current_member_key() if girder not in self._member_state: @@ -709,16 +1165,21 @@ def _capture_member_state(self) -> dict: "inputs": { "design": self.design_combo.currentText() if hasattr(self, "design_combo") else "", "type": self.type_combo.currentText() if hasattr(self, "type_combo") else "", + "support_type": self.support_type_combo.currentText() if hasattr(self, "support_type_combo") else "", "symmetry": self.symmetry_combo.currentText() if hasattr(self, "symmetry_combo") else "", "total_depth": self.total_depth_input.text() if hasattr(self, "total_depth_input") else "", "top_width": self.top_width_input.text() if hasattr(self, "top_width_input") else "", "bottom_width": self.bottom_width_input.text() if hasattr(self, "bottom_width_input") else "", + "total_depth_bounds": dict(self._dimension_bounds.get("total_depth") or {}), + "top_width_bounds": dict(self._dimension_bounds.get("top_width") or {}), + "bottom_width_bounds": dict(self._dimension_bounds.get("bottom_width") or {}), "web_thickness": self.web_thickness_combo.currentText() if hasattr(self, "web_thickness_combo") else "", "top_thickness": self.top_thickness_combo.currentText() if hasattr(self, "top_thickness_combo") else "", "bottom_thickness": self.bottom_thickness_combo.currentText() if hasattr(self, "bottom_thickness_combo") else "", "web_thickness_value": self.web_thickness_value_input.text() if hasattr(self, "web_thickness_value_input") else "", "top_thickness_value": self.top_thickness_value_input.text() if hasattr(self, "top_thickness_value_input") else "", "bottom_thickness_value": self.bottom_thickness_value_input.text() if hasattr(self, "bottom_thickness_value_input") else "", + "support_width": self.support_width_input.text() if hasattr(self, "support_width_input") else "", "is_section": self.is_section_combo.currentText() if hasattr(self, "is_section_combo") else "", "torsion": self.torsion_combo.currentText() if hasattr(self, "torsion_combo") else "", "warping": self.warping_combo.currentText() if hasattr(self, "warping_combo") else "", @@ -738,6 +1199,8 @@ def _apply_member_state(self, state: dict) -> None: self.design_combo.setCurrentText(inputs["design"]) if inputs.get("type"): self.type_combo.setCurrentText(inputs["type"]) + if inputs.get("support_type"): + self.support_type_combo.setCurrentText(inputs["support_type"]) if inputs.get("symmetry"): self.symmetry_combo.setCurrentText(inputs["symmetry"]) @@ -745,6 +1208,30 @@ def _apply_member_state(self, state: dict) -> None: self.top_width_input.setText(inputs.get("top_width", "")) self.bottom_width_input.setText(inputs.get("bottom_width", "")) + total_depth_bounds = inputs.get("total_depth_bounds") + if isinstance(total_depth_bounds, dict): + self._dimension_bounds["total_depth"] = { + "lower": float(total_depth_bounds.get("lower", 200.0)), + "upper": float(total_depth_bounds.get("upper", 2000.0)), + "increment": float(total_depth_bounds.get("increment", 25.0)), + } + + top_width_bounds = inputs.get("top_width_bounds") + if isinstance(top_width_bounds, dict): + self._dimension_bounds["top_width"] = { + "lower": float(top_width_bounds.get("lower", 100.0)), + "upper": float(top_width_bounds.get("upper", 1000.0)), + "increment": float(top_width_bounds.get("increment", 10.0)), + } + + bottom_width_bounds = inputs.get("bottom_width_bounds") + if isinstance(bottom_width_bounds, dict): + self._dimension_bounds["bottom_width"] = { + "lower": float(bottom_width_bounds.get("lower", 100.0)), + "upper": float(bottom_width_bounds.get("upper", 1000.0)), + "increment": float(bottom_width_bounds.get("increment", 10.0)), + } + if inputs.get("web_thickness"): self.web_thickness_combo.setCurrentText(inputs["web_thickness"]) if inputs.get("top_thickness"): @@ -755,6 +1242,7 @@ def _apply_member_state(self, state: dict) -> None: self.web_thickness_value_input.setText(inputs.get("web_thickness_value", "")) self.top_thickness_value_input.setText(inputs.get("top_thickness_value", "")) self.bottom_thickness_value_input.setText(inputs.get("bottom_thickness_value", "")) + self.support_width_input.setText(inputs.get("support_width", "")) if inputs.get("is_section"): self.is_section_combo.setCurrentText(inputs["is_section"]) @@ -768,6 +1256,8 @@ def _apply_member_state(self, state: dict) -> None: self._suppress_member_state_updates = False self._update_thickness_value_enabled_state() + self._update_dimension_field_mode() + self._refresh_bounds_tooltips() self._update_preview() def _wire_member_dirty_tracking(self) -> None: @@ -780,6 +1270,7 @@ def connect_line(line: QLineEdit) -> None: connect_combo(self.design_combo) connect_combo(self.type_combo) + connect_combo(self.support_type_combo) connect_combo(self.symmetry_combo) connect_combo(self.web_thickness_combo) connect_combo(self.top_thickness_combo) @@ -795,6 +1286,7 @@ def connect_line(line: QLineEdit) -> None: connect_line(self.web_thickness_value_input) connect_line(self.top_thickness_value_input) connect_line(self.bottom_thickness_value_input) + connect_line(self.support_width_input) def _confirm_switch_if_dirty(self) -> str: """Return 'save'|'discard'|'cancel' before switching member.""" @@ -836,6 +1328,10 @@ def _refresh_member_id_combo(self) -> None: def _on_member_id_combo_changed(self, index: int) -> None: if index is None or index < 0: return + if self._suppress_member_switch_prompt: + self._select_segment_index(int(index)) + self._last_member_combo_index = int(index) + return # Prompt if user is leaving a dirty member without saving. if int(index) != int(self._current_segment_index): decision = self._confirm_switch_if_dirty() @@ -850,7 +1346,12 @@ def _on_member_id_combo_changed(self, index: int) -> None: self._commit_current_member_state() # Confirm member-level save immediately (requested UX). try: - QMessageBox.information(self, "Saved", "Member inputs saved successfully.") + box = QMessageBox(self) + box.setIcon(QMessageBox.Information) + box.setWindowTitle("Saved") + box.setText("Member inputs saved successfully.") + box.setStandardButtons(QMessageBox.Ok) + box.exec() except Exception: pass @@ -899,6 +1400,12 @@ def _on_remove_segment_clicked(self) -> None: if not segments: return if len(segments) == 1: + box = QMessageBox(self) + box.setIcon(QMessageBox.Warning) + box.setWindowTitle("Cannot Remove") + box.setText("At least one member segment is required.") + box.setStandardButtons(QMessageBox.Ok) + box.exec() return idx = self._current_segment_index @@ -921,6 +1428,7 @@ def _on_remove_segment_clicked(self) -> None: self._refresh_segment_list(girder) self._select_segment_index(min(idx, len(segments) - 1)) + self._mark_current_member_dirty() def _select_segment_index(self, index: int) -> None: segments = self._ensure_girder_segments(self._current_girder) @@ -953,6 +1461,88 @@ def _select_segment_index(self, index: int) -> None: if stored: self._apply_member_state(stored) + def _copy_girder_settings(self, source_girder: str, target_girders: List[str]) -> None: + """Copy all segments and their properties from source to target girders.""" + if not source_girder or not target_girders: + return + + # 1. Commit current state to ensure source is up-to-date + self._commit_current_member_state() # Always capture current UI state first + + # 2. Get the full detailed structure of the source girder + # source_segments has IDs like G1M1, G1M2... + source_segments = self._ensure_girder_segments(source_girder) + + # We need to map G1My -> GxMy for each target Gx. + + successful_targets = [] + + for target in target_girders: + if target == source_girder: + continue + + # Create a FRESH segment list for target based on source geometry + new_target_segments = [] + + # Wipe old state for this target to prevent ghost data + if target in self._member_state: + self._member_state[target] = {} # Clear properties + else: + self._member_state[target] = {} + + for idx, src_seg in enumerate(source_segments): + # 1. Geometry copy + # Create a new segment dict with target ID + target_id = self._make_segment_id(target, idx + 1) + new_seg = copy.deepcopy(src_seg) + new_seg["id"] = target_id + new_target_segments.append(new_seg) + + # 2. Property state copy + src_id = str(src_seg.get("id")) + if source_girder in self._member_state and src_id in self._member_state[source_girder]: + # Clone the property dict + props = copy.deepcopy(self._member_state[source_girder][src_id]) + self._member_state[target][target_id] = props + + # Commit the new geometry chain + self.segment_chain[target] = new_target_segments + successful_targets.append(target) + + if successful_targets: + # If target includes *current* girder (unlikely due to check above, but safe), refresh UI + if self._current_girder in successful_targets: + self._refresh_segment_list(self._current_girder) + self._select_segment_index(0) + + QMessageBox.information( + self, + "Applied Changes", + f"Configuration applied to: {', '.join(successful_targets)}" + ) + + def _on_apply_exterior_clicked(self) -> None: + """Apply current girder configuration to First and Last girders.""" + if not self.available_girders: + return + + first = self.available_girders[0] + last = self.available_girders[-1] + + # Unique targets, excluding self is handled inside _copy_girder_settings + targets = sorted(list(set([first, last]))) + + self._copy_girder_settings(self._current_girder, targets) + + def _on_apply_interior_clicked(self) -> None: + """Apply current girder configuration to all Interior girders (G2 to Gn-1).""" + if len(self.available_girders) <= 2: + QMessageBox.information(self, "Info", "No interior girders available (Total girders < 3).") + return + + targets = self.available_girders[1:-1] + self._copy_girder_settings(self._current_girder, targets) + def _load_segment_details(self, girder: str, index: int) -> None: segments = self._ensure_girder_segments(girder) if not segments: @@ -1004,7 +1594,12 @@ def _on_girder_changed(self, girder: str) -> None: if decision == "save": self._commit_current_member_state() try: - QMessageBox.information(self, "Saved", "Member inputs saved successfully.") + box = QMessageBox(self) + box.setIcon(QMessageBox.Information) + box.setWindowTitle("Saved") + box.setText("Member inputs saved successfully.") + box.setStandardButtons(QMessageBox.Ok) + box.exec() except Exception: pass @@ -1016,58 +1611,90 @@ def _on_girder_changed(self, girder: str) -> None: def _on_segment_row_changed(self, current_row: int, _current_column: int, _previous_row: int, _previous_column: int) -> None: if current_row is None or current_row < 0: return + self._update_segment_action_row_highlight(current_row) self._select_segment_index(int(current_row)) def _on_split_add_clicked(self) -> None: - """Split/Add Segment. - - Spec-aligned behavior: - - If the selected segment is the last segment and its End Distance is < total span, - create the next segment to fill the gap (no popups). - """ + """Split the selected segment into two equal halves.""" girder = self._current_girder segments = self._ensure_girder_segments(girder) - total_span = float(self._get_total_span() or DEFAULT_MEMBER_LENGTH_M) if not segments: return - idx = max(0, min(self._current_segment_index, len(segments) - 1)) - if idx != len(segments) - 1: - # Only support add/fill from last segment for now (matches the described rule). - self._select_segment_index(len(segments) - 1) + # Get the selected segment index. + idx = self.segment_table.currentRow() + if idx < 0: idx = len(segments) - 1 - + current = segments[idx] start = float(current.get("start", 0.0)) - - new_end = self._parse_float(self.distance_end_input.text()) if self.distance_end_input else None - if new_end is None: - new_end = float(current.get("end", total_span)) - - # Clamp/validate - new_end = max(start, min(float(new_end), total_span)) - - # If no gap, do nothing (no popup) - if abs(new_end - total_span) < 1e-9: - current["end"] = float(total_span) - self._refresh_segment_list(girder) - self._select_segment_index(idx) + end = float(current.get("end", 0.0)) + length = end - start + + if length <= 0.01: + # Too small to split sensibly return - # Update last segment end and create the fill segment - current["end"] = float(new_end) - next_id = self._make_segment_id(girder, len(segments) + 1) - segments.append({"id": next_id, "start": float(new_end), "end": float(total_span)}) + midpoint = start + (length / 2.0) + + # Update current segment end to midpoint + current["end"] = midpoint + + # Insert new segment from midpoint to original end + new_segment = {"id": "", "start": midpoint, "end": end} + segments.insert(idx + 1, new_segment) + + # 1. Capture existing states mapped to their original indices + # We need to map the new segment list back to the old states carefully. + # The new list has one extra element at idx+1. + + reordered_states = [] + + for i in range(len(segments)): + if i == idx + 1: + # This is the newly inserted segment. + # It should inherit properties from the segment it was split from (idx). + original_index = idx + elif i <= idx: + # These segments haven't moved. + original_index = i + else: + # These segments are shifted by 1. + original_index = i - 1 + + original_id = self._make_segment_id(girder, original_index + 1) + + state = None + if girder in self._member_state and original_id in self._member_state[girder]: + state = self._member_state[girder][original_id] + + # If duplicating state for the new segment, ensure deep copy + if i == idx + 1 and state: + state = copy.deepcopy(state) + + reordered_states.append(state) + + # 2. Clear old state for this girder completely + if girder in self._member_state: + self._member_state[girder] = {} + + # 3. Re-assign IDs and restore states to the new IDs + for i, seg in enumerate(segments): + new_id = self._make_segment_id(girder, i + 1) + seg["id"] = new_id + + state_to_restore = reordered_states[i] + if state_to_restore: + if girder not in self._member_state: + self._member_state[girder] = {} + self._member_state[girder][new_id] = state_to_restore - # Normalize starts for safety and enforce last end - segments[0]["start"] = 0.0 - for i in range(1, len(segments)): - segments[i]["start"] = float(segments[i - 1].get("end", 0.0)) - segments[-1]["end"] = float(total_span) self.segment_chain[girder] = segments self._refresh_segment_list(girder) - self._select_segment_index(idx) + # Select the new segment (second half) + self._select_segment_index(idx + 1) + self._mark_current_member_dirty() # ===== Span/Length + Auto-split handlers ===== @@ -1077,8 +1704,7 @@ def _on_span_changed(self, span_text): - Custom: user can edit total span. - Full Length: total span is locked (read-only). """ - is_full = (span_text or "").strip() == "Full Length" - self.length_input.setReadOnly(is_full) + self.length_input.setReadOnly(True) self._initialize_segment_chain_if_needed() self._refresh_segment_list(self._current_girder) @@ -1187,6 +1813,7 @@ def _on_distance_end_changed(self): # Refresh master list + keep selection self._refresh_segment_list(girder) self._select_segment_index(idx) + self._mark_current_member_dirty() def _build_section_card(self): container = QWidget() @@ -1230,12 +1857,11 @@ def _build_section_card(self): self.member_id_combo.currentIndexChanged.connect(self._on_member_id_combo_changed) row = self._add_box_row(inputs_grid, 0, "Member ID:", self.member_id_combo) + # Hidden design combo to maintain compatibility with existing logic self.design_combo = QComboBox() self.design_combo.addItems(VALUES_GIRDER_DESIGN_MODE) - apply_field_style(self.design_combo) - self._set_field_width(self.design_combo) - row = self._add_box_row(inputs_grid, row, "Design:", self.design_combo) - + self.design_combo.hide() + self.type_combo = QComboBox() self.type_combo.addItems(VALUES_GIRDER_TYPE) apply_field_style(self.type_combo) @@ -1248,12 +1874,17 @@ def _build_section_card(self): self._set_field_width(self.symmetry_combo) row = self._add_box_row(inputs_grid, row, "Symmetry:", self.symmetry_combo, self.symmetry_row) - self.total_depth_input = self._create_line_edit() + self.support_type_combo = QComboBox() + self.support_type_combo.addItems(VALUES_GIRDER_SUPPORT_TYPE) + apply_field_style(self.support_type_combo) + self._set_field_width(self.support_type_combo) + + self.total_depth_widget, self.total_depth_input, self.total_depth_bounds_button = self._create_dimension_input_widget("total_depth") row = self._add_box_row( inputs_grid, row, "Total Depth (d, mm):", - self.total_depth_input, + self.total_depth_widget, self.welded_rows, ) @@ -1267,6 +1898,11 @@ def _build_section_card(self): self.web_thickness_value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.web_thickness_value_input)) self.web_thickness_widget = self._create_mode_value_widget(self.web_thickness_combo, self.web_thickness_value_input) + self.web_thickness_value_combo = self._attach_thickness_value_dropdown( + self.web_thickness_widget, + self.web_thickness_value_input, + "web_thickness", + ) row = self._add_box_row( inputs_grid, row, @@ -1275,12 +1911,12 @@ def _build_section_card(self): self.welded_rows, ) - self.top_width_input = self._create_line_edit() + self.top_width_widget, self.top_width_input, self.top_width_bounds_button = self._create_dimension_input_widget("top_width") row = self._add_box_row( inputs_grid, row, "Width of Top Flange (tfw, mm):", - self.top_width_input, + self.top_width_widget, self.welded_rows, ) @@ -1294,6 +1930,11 @@ def _build_section_card(self): self.top_thickness_value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.top_thickness_value_input)) self.top_thickness_widget = self._create_mode_value_widget(self.top_thickness_combo, self.top_thickness_value_input) + self.top_thickness_value_combo = self._attach_thickness_value_dropdown( + self.top_thickness_widget, + self.top_thickness_value_input, + "top_thickness", + ) row = self._add_box_row( inputs_grid, row, @@ -1302,12 +1943,12 @@ def _build_section_card(self): self.welded_rows, ) - self.bottom_width_input = self._create_line_edit() + self.bottom_width_widget, self.bottom_width_input, self.bottom_width_bounds_button = self._create_dimension_input_widget("bottom_width") row = self._add_box_row( inputs_grid, row, "Width of Bottom Flange (bfw, mm):", - self.bottom_width_input, + self.bottom_width_widget, self.welded_rows, ) @@ -1321,6 +1962,11 @@ def _build_section_card(self): self.bottom_thickness_value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.bottom_thickness_value_input)) self.bottom_thickness_widget = self._create_mode_value_widget(self.bottom_thickness_combo, self.bottom_thickness_value_input) + self.bottom_thickness_value_combo = self._attach_thickness_value_dropdown( + self.bottom_thickness_widget, + self.bottom_thickness_value_input, + "bottom_thickness", + ) row = self._add_box_row( inputs_grid, row, @@ -1329,6 +1975,23 @@ def _build_section_card(self): self.welded_rows, ) + self.support_width_input = self._create_line_edit() + self.support_width_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.support_width_input)) + row = self._add_box_row( + inputs_grid, + row, + "Support Type:", + self.support_type_combo, + self.welded_rows, + ) + row = self._add_box_row( + inputs_grid, + row, + "Support Width (mm):", + self.support_width_input, + self.welded_rows, + ) + self.is_section_combo = QComboBox() self._populate_rolled_section_combo() apply_field_style(self.is_section_combo) @@ -1404,27 +2067,27 @@ def _build_section_card(self): properties_grid.setColumnStretch(1, 1) property_fields = [ - "Mass, M (Kg/m)", - "Sectional Area, a (cm2)", - "2nd Moment of Area, Iz (cm4)", - "2nd Moment of Area, Iy (cm4)", - "Radius of Gyration, rz (cm)", - "Radius of Gyration, ry (cm)", - "Elastic Modulus, Zz (cm3)", - "Elastic Modulus, Zy (cm3)", - "Plastic Modulus, Zuz (cm3)", - "Plastic Modulus, Zuy (cm3)", - "Torsion Constant, It (cm4)", - "Warping Constant, Iw (cm6)" + ("Mass, M (Kg/m)", "Mass, M (Kg/m)"), + ("Sectional Area, a (cm2)", "Sectional Area, a (cm2)"), + ("2nd Moment of Area, Iz (cm4)", "2nd Moment of Area, Iz (cm4)"), + ("2nd Moment of Area, Iy (cm4)", "2nd Moment of Area, Iy (cm4)"), + ("Radius of Gyration, rz (cm)", "Radius of Gyration, rz (cm)"), + ("Radius of Gyration, ry (cm)", "Radius of Gyration, ry (cm)"), + ("Elastic Modulus, Zz (cm3)", "Elastic Modulus, Zz (cm3)"), + ("Elastic Modulus, Zy (cm3)", "Elastic Modulus, Zy (cm3)"), + ("Plastic Modulus, Zuz (cm3)", "Plastic Modulus, Zuz (cm3)"), + ("Plastic Modulus, Zuy (cm3)", "Plastic Modulus, Zuy (cm3)"), + ("Torsion Constant, It (cm4)", "Torsion Constant, It (cm4)"), + ("Warping Constant, Iw (cm6)", "Warping Constant, Iw (cm6)"), ] - for index, text in enumerate(property_fields): - label = self._create_small_label(text) + for index, (key, label_text) in enumerate(property_fields): + label = self._create_small_label(label_text) line_edit = self._create_line_edit() line_edit.setPlaceholderText("") properties_grid.addWidget(label, index, 0) properties_grid.addWidget(line_edit, index, 1) - self.section_property_inputs[text] = line_edit + self.section_property_inputs[key] = line_edit props_layout.addLayout(properties_grid) right_column_layout.addWidget(props_box) @@ -1433,17 +2096,27 @@ def _build_section_card(self): self.design_combo.currentTextChanged.connect(self._on_design_changed) self.type_combo.currentTextChanged.connect(self._on_type_changed) + self.support_type_combo.currentTextChanged.connect(self._on_support_type_changed) self.is_section_combo.currentTextChanged.connect(self._update_preview) for watcher in (self.total_depth_input, self.top_width_input, self.bottom_width_input): watcher.textChanged.connect(self._update_preview) - for combo in (self.web_thickness_combo, self.top_thickness_combo, self.bottom_thickness_combo): - combo.currentTextChanged.connect(lambda _t: self._update_thickness_value_enabled_state()) - combo.currentTextChanged.connect(self._update_preview) + self.web_thickness_combo.currentTextChanged.connect( + lambda text: self._on_thickness_mode_changed("web_thickness", text) + ) + self.top_thickness_combo.currentTextChanged.connect( + lambda text: self._on_thickness_mode_changed("top_thickness", text) + ) + self.bottom_thickness_combo.currentTextChanged.connect( + lambda text: self._on_thickness_mode_changed("bottom_thickness", text) + ) for watcher in (self.web_thickness_value_input, self.top_thickness_value_input, self.bottom_thickness_value_input): watcher.textChanged.connect(self._update_preview) self._on_design_changed(self.design_combo.currentText()) self._on_type_changed(self.type_combo.currentText()) + self._on_support_type_changed(self.support_type_combo.currentText()) self._update_thickness_value_enabled_state() + self._update_dimension_field_mode() + self._refresh_bounds_tooltips() # Capture a stable template state for new members. self._default_member_state = self._capture_member_state() @@ -1455,6 +2128,7 @@ def _build_section_card(self): # Now that Section Inputs exist, sync UI state to current segment and seed # per-member state from the visible defaults. self._select_segment_index(self._current_segment_index) + self._suppress_member_switch_prompt = False return container @@ -1494,6 +2168,198 @@ def _create_mode_value_widget(self, mode_combo: QComboBox, value_input: QLineEdi layout.addWidget(value_input) return widget + def _attach_thickness_value_dropdown(self, wrapper: QWidget, value_input: QLineEdit, field_key: str) -> QComboBox: + combo = QComboBox() + combo.addItems(SAIL_APPROVED_THICKNESS_VALUES) + apply_field_style(combo) + combo.setVisible(False) + self._set_field_width(combo, 180) + + combo.currentTextChanged.connect(lambda text, inp=value_input: inp.setText(str(text or ""))) + combo.currentTextChanged.connect(lambda _text: self._mark_current_member_dirty()) + combo.currentTextChanged.connect(lambda _text: self._update_preview()) + + layout = wrapper.layout() + if layout is not None: + layout.addWidget(combo) + return combo + + def _sync_thickness_value_dropdown(self, field_key: str) -> None: + value_input = getattr(self, f"{field_key}_value_input", None) + value_combo = getattr(self, f"{field_key}_value_combo", None) + if value_input is None or value_combo is None: + return + first = "" + selected = self._parse_selected_thickness_values(value_input.text()) + if selected: + first = selected[0] + else: + parsed = str(value_input.text() or "").strip() + if parsed in SAIL_APPROVED_THICKNESS_VALUES: + first = parsed + if not first: + first = SAIL_APPROVED_THICKNESS_VALUES[0] + value_input.setText(first) + + prev = value_combo.blockSignals(True) + try: + idx = value_combo.findText(first, Qt.MatchFixedString) + value_combo.setCurrentIndex(idx if idx >= 0 else 0) + finally: + value_combo.blockSignals(prev) + + def _parse_selected_thickness_values(self, text: str) -> List[str]: + chunks = [c.strip() for c in str(text or "").split(",") if str(c).strip()] + return [v for v in chunks if v in SAIL_APPROVED_THICKNESS_VALUES] + + def _on_thickness_mode_changed(self, field_key: str, _text: str) -> None: + self._update_thickness_value_enabled_state() + self._update_preview() + + # Avoid auto-popup during restore/init signal cascades. + if self._suppress_member_state_updates or not getattr(self, "_section_inputs_built", False): + return + + combo = getattr(self, f"{field_key}_combo", None) + if combo is None: + return + if not self._is_custom_thickness_mode(combo): + return + + is_welded = (self.type_combo.currentText() or "").strip().lower() == "welded" + is_custom_design = (self.design_combo.currentText() or "").strip().lower() == "customized" + if is_welded and (not is_custom_design): + self._open_thickness_values_dialog(field_key) + + def _open_thickness_values_dialog(self, field_key: str) -> None: + value_input = getattr(self, f"{field_key}_value_input", None) + if value_input is None: + return + + selected = self._parse_selected_thickness_values(value_input.text()) + titles = { + "web_thickness": "Select Values: Web Thickness", + "top_thickness": "Select Values: Top Flange Thickness", + "bottom_thickness": "Select Values: Bottom Flange Thickness", + } + dialog = _ThicknessSelectionDialog(titles.get(field_key, "Select Values"), selected, self) + if dialog.exec() != QDialog.Accepted: + return + + chosen = dialog.selected_values() + value_input.setText(", ".join(chosen)) + self._sync_thickness_value_dropdown(field_key) + self._mark_current_member_dirty() + self._update_preview() + + def _create_dimension_input_widget(self, field_key: str): + widget = QWidget() + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self._set_field_width(widget, 180) + + layout = QHBoxLayout(widget) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + + value_input = self._create_line_edit() + value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, value_input)) + + bounds_button = QPushButton("Set Bounds") + bounds_button.setCursor(Qt.PointingHandCursor) + bounds_button.setMinimumHeight(28) + bounds_button.setStyleSheet( + "QPushButton {" + " border: 1px solid #2f2f2f; border-radius: 8px;" + " background: #ffffff; color: #111111; font-size: 12px; font-weight: 700;" + " padding: 4px 10px;" + "}" + "QPushButton:hover { background: #f2f2f2; }" + "QPushButton:pressed { background: #e9e9e9; }" + ) + bounds_button.clicked.connect(lambda _checked=False, key=field_key: self._open_bounds_dialog(key)) + + layout.addWidget(value_input) + layout.addWidget(bounds_button) + return widget, value_input, bounds_button + + def _update_dimension_field_mode(self) -> None: + is_custom = (self.design_combo.currentText() or "").strip().lower() == "customized" + is_welded = (self.type_combo.currentText() or "").strip().lower() == "welded" + + for field_key in ("total_depth", "top_width", "bottom_width"): + value_input = getattr(self, f"{field_key}_input", None) + bounds_button = getattr(self, f"{field_key}_bounds_button", None) + if value_input is None or bounds_button is None: + continue + + show_line_edit = bool(is_custom and is_welded) + value_input.setVisible(show_line_edit) + value_input.setEnabled(show_line_edit) + bounds_button.setVisible((not show_line_edit) and is_welded) + bounds_button.setEnabled((not show_line_edit) and is_welded) + + def _default_dimension_bounds(self, field_key: str) -> dict: + defaults = { + "total_depth": {"lower": 200.0, "upper": 2000.0, "increment": 25.0}, + "top_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + "bottom_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + } + return dict(defaults.get(field_key, {"lower": 0.0, "upper": 0.0, "increment": 0.0})) + + def _normalized_dimension_bounds(self, field_key: str) -> dict: + defaults = self._default_dimension_bounds(field_key) + current = self._dimension_bounds.get(field_key) or {} + out = {} + for key in ("lower", "upper", "increment"): + try: + out[key] = float(current.get(key, defaults[key])) + except Exception: + out[key] = float(defaults[key]) + return out + + def _format_bounds_tooltip(self, field_key: str) -> str: + bounds = self._normalized_dimension_bounds(field_key) + try: + lower = float(bounds.get("lower", 0.0)) + upper = float(bounds.get("upper", 0.0)) + increment = float(bounds.get("increment", 0.0)) + except Exception: + lower, upper, increment = 0.0, 0.0, 0.0 + return ( + f"Lower Bound: {lower:.2f}\n" + f"Upper Bound: {upper:.2f}\n" + f"Increment: {increment:.2f}" + ) + + def _refresh_bounds_tooltips(self) -> None: + for field_key in ("total_depth", "top_width", "bottom_width"): + bounds_button = getattr(self, f"{field_key}_bounds_button", None) + if bounds_button is not None: + bounds_button.setToolTip(self._format_bounds_tooltip(field_key)) + + def _open_bounds_dialog(self, field_key: str) -> None: + current = self._normalized_dimension_bounds(field_key) + titles = { + "total_depth": "Select Bound: Total Depth", + "top_width": "Select Bound: Topflange Width", + "bottom_width": "Select Bound: Bottomflange Width", + } + dialog = _BoundsDialog(titles.get(field_key, "Select Bound"), current, self) + if dialog.exec() != QDialog.Accepted: + return + + result = dialog.result_bounds() + if not isinstance(result, dict): + return + + self._dimension_bounds[field_key] = { + "lower": float(result.get("lower", 0.0)), + "upper": float(result.get("upper", 0.0)), + "increment": float(result.get("increment", 0.0)), + } + self._refresh_bounds_tooltips() + self._mark_current_member_dirty() + def _is_custom_thickness_mode(self, combo: QComboBox) -> bool: return (combo.currentText() or "").strip().lower() == "custom" @@ -1502,39 +2368,72 @@ def _update_thickness_value_enabled_state(self) -> None: is_custom_design = self.design_combo.currentText().lower() == "customized" allow_inputs = is_welded and is_custom_design - for mode_combo, value_input, wrapper in ( + for field_key, mode_combo, value_input, value_combo, wrapper in ( ( + "web_thickness", getattr(self, "web_thickness_combo", None), getattr(self, "web_thickness_value_input", None), + getattr(self, "web_thickness_value_combo", None), getattr(self, "web_thickness_widget", None), ), ( + "top_thickness", getattr(self, "top_thickness_combo", None), getattr(self, "top_thickness_value_input", None), + getattr(self, "top_thickness_value_combo", None), getattr(self, "top_thickness_widget", None), ), ( + "bottom_thickness", getattr(self, "bottom_thickness_combo", None), getattr(self, "bottom_thickness_value_input", None), + getattr(self, "bottom_thickness_value_combo", None), getattr(self, "bottom_thickness_widget", None), ), ): if not mode_combo or not value_input: continue - show_value = bool(allow_inputs and self._is_custom_thickness_mode(mode_combo)) + is_custom_mode = self._is_custom_thickness_mode(mode_combo) + + # Customized mode: one-box dropdown only (SAIL values). + if allow_inputs: + if mode_combo.currentText().strip().lower() != "custom": + prev = mode_combo.blockSignals(True) + mode_combo.setCurrentText("Custom") + mode_combo.blockSignals(prev) + + mode_combo.setVisible(False) + mode_combo.setEnabled(False) + + value_input.setVisible(False) + value_input.setEnabled(False) + value_input.setReadOnly(True) + + if value_combo is not None: + value_combo.setVisible(True) + value_combo.setEnabled(True) + self._sync_thickness_value_dropdown(field_key) + + if wrapper is not None: + self._set_field_width(wrapper, 180) + continue + + # Optimized mode: mode combo only; custom opens popup directly. + mode_combo.setVisible(is_welded) + mode_combo.setEnabled(is_welded) - value_input.setEnabled(show_value) - value_input.setVisible(show_value) + value_input.setVisible(False) + value_input.setEnabled(False) + value_input.setReadOnly(True) + + if value_combo is not None: + value_combo.setVisible(False) + value_combo.setEnabled(False) if wrapper is not None: self._set_field_width(wrapper, 180) - - if show_value: - self._set_field_width(mode_combo, 96) - self._set_field_width(value_input, 78) - else: - self._set_field_width(mode_combo, 180) + self._set_field_width(mode_combo, 180) def _add_section_row(self, layout, row, text, widget, tracker=None): label = self._create_label(text) @@ -1676,21 +2575,23 @@ def _on_design_changed(self, text): toggle_targets = ( self.type_combo, self.symmetry_combo, - self.total_depth_input, - self.top_width_input, - self.bottom_width_input, ) for widget in toggle_targets: widget.setEnabled(is_custom) if not is_custom: self._lock_type_to_welded() self._reset_section_state() + self._update_dimension_field_mode() self._apply_type_state() def _on_type_changed(self, text): self._apply_type_state() self._update_preview() + def _on_support_type_changed(self, support_type: str) -> None: + """Handle Support Type change.""" + self._mark_current_member_dirty() + def _apply_type_state(self): is_welded = self.type_combo.currentText().lower() == "welded" is_custom = self.design_combo.currentText().lower() == "customized" @@ -1703,16 +2604,18 @@ def _apply_type_state(self): widget.setVisible(is_welded) self.symmetry_combo.setEnabled(is_welded and is_custom) + # Dimension rows remain enabled in Optimized mode so "Set Bounds" stays clickable. + for widget in (self.total_depth_widget, self.top_width_widget, self.bottom_width_widget): + widget.setVisible(is_welded) + widget.setEnabled(is_welded) + plate_widgets = ( - self.total_depth_input, self.web_thickness_widget, - self.top_width_input, self.top_thickness_widget, - self.bottom_width_input, self.bottom_thickness_widget, ) for widget in plate_widgets: - widget.setEnabled(is_welded and is_custom) + widget.setEnabled(is_welded) widget.setVisible(is_welded) for label, widget in self.web_type_row: @@ -1723,6 +2626,7 @@ def _apply_type_state(self): self.is_section_combo.setVisible(not is_welded) self.is_section_combo.setEnabled(not is_welded) self._update_thickness_value_enabled_state() + self._update_dimension_field_mode() def _lock_type_to_welded(self): welded_index = self.type_combo.findText("Welded", Qt.MatchFixedString) @@ -1755,8 +2659,7 @@ def _update_distance_field_states(self): def _on_span_changed(self, span_text): # Preserve legacy span-mode behavior for total span editability. - is_full = (span_text or "").strip() == "Full Length" - self.length_input.setReadOnly(is_full) + self.length_input.setReadOnly(True) self._initialize_segment_chain_if_needed() self._refresh_segment_list(self._current_girder) @@ -1893,6 +2796,7 @@ def _create_inner_box(self): def _create_small_label(self, text): """Create a smaller label for compact layouts""" label = QLabel(text) + label.setTextFormat(Qt.RichText) label.setStyleSheet(""" QLabel { color: #2b2b2b; @@ -2028,6 +2932,7 @@ def _gather_welded_dimensions(self): "web_thickness_mm": web_thickness, "top_flange_thickness_mm": top_thickness, "bottom_flange_thickness_mm": bottom_thickness, + "support_width_mm": self._parse_float(self.support_width_input.text()) or 0.0, } def _update_section_properties(self): @@ -2257,6 +3162,7 @@ def _reset_combo(combo: QComboBox, index: int = 0): self.span_combo, self.design_combo, self.type_combo, + self.support_type_combo, self.symmetry_combo, self.web_thickness_combo, self.top_thickness_combo, @@ -2290,11 +3196,19 @@ def _reset_combo(combo: QComboBox, index: int = 0): self.web_thickness_value_input, self.top_thickness_value_input, self.bottom_thickness_value_input, + self.support_width_input, ): previous = field.blockSignals(True) field.clear() field.blockSignals(previous) + self._dimension_bounds = { + "total_depth": {"lower": 200.0, "upper": 2000.0, "increment": 25.0}, + "top_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + "bottom_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + } + self._refresh_bounds_tooltips() + self._on_design_changed(self.design_combo.currentText()) self._on_type_changed(self.type_combo.currentText()) self._update_preview() @@ -2341,17 +3255,23 @@ def collect_data(self) -> dict: # Treat the dialog-level Save as committing the current Member ID. if self._is_current_member_dirty(): self._commit_current_member_state() + # Save action marks member edits clean for this session. + self._dirty_members.clear() welded_inputs = { "total_depth_mm": self.total_depth_input.text().strip(), "top_flange_width_mm": self.top_width_input.text().strip(), "bottom_flange_width_mm": self.bottom_width_input.text().strip(), + "total_depth_bounds": dict(self._dimension_bounds.get("total_depth") or {}), + "top_flange_width_bounds": dict(self._dimension_bounds.get("top_width") or {}), + "bottom_flange_width_bounds": dict(self._dimension_bounds.get("bottom_width") or {}), "web_thickness_mode": self.web_thickness_combo.currentText(), "top_thickness_mode": self.top_thickness_combo.currentText(), "bottom_thickness_mode": self.bottom_thickness_combo.currentText(), "web_thickness_value_mm": self.web_thickness_value_input.text().strip(), "top_thickness_value_mm": self.top_thickness_value_input.text().strip(), "bottom_thickness_value_mm": self.bottom_thickness_value_input.text().strip(), + "support_width_mm": self.support_width_input.text().strip(), } properties_snapshot = { label: field.text().strip() diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py index 82fff7d4b..7561a4d0f 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py @@ -46,6 +46,7 @@ def __init__(self, parent=None): def init_ui(self): combo_width = 190 # keep all combo boxes strictly same width + self._form_label_width = 245 main_layout = QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) @@ -121,7 +122,7 @@ def init_ui(self): inputs_grid.setContentsMargins(0, 0, 0, 0) inputs_grid.setHorizontalSpacing(12) inputs_grid.setVerticalSpacing(10) - inputs_grid.setColumnMinimumWidth(0, 220) + inputs_grid.setColumnMinimumWidth(0, self._form_label_width) inputs_grid.setColumnStretch(0, 0) inputs_grid.setColumnStretch(1, 1) @@ -133,7 +134,7 @@ def init_ui(self): row = self._add_form_row( inputs_grid, 0, - "No. of Bearing Stiffeners at each end (on one side only):", + "No. of Bearing Stiffeners at each end\n(on one side only):", self.bearing_count_combo, ) @@ -147,8 +148,11 @@ def init_ui(self): self.bearing_outstand_input = QTextEdit() self.bearing_outstand_input.setReadOnly(True) self.bearing_outstand_input.setText(OUTSTAND_DEFAULT_TEXT) - self.bearing_outstand_input.setFixedHeight(34) + self.bearing_outstand_input.setFixedHeight(28) self.bearing_outstand_input.setFixedWidth(combo_width) + self.bearing_outstand_input.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.bearing_outstand_input.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.bearing_outstand_input.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) self.bearing_outstand_input.setStyleSheet( "QTextEdit { border: 1px solid #d0d0d0; border-radius: 6px; background: #ffffff; " "color: #5b5b5b; font-size: 11px; }" @@ -166,6 +170,8 @@ def init_ui(self): self.intermediate_spacing_input.setValidator(QIntValidator(1, 10**9, self.intermediate_spacing_input)) apply_field_style(self.intermediate_spacing_input) self.intermediate_spacing_input.setPlaceholderText("NA") + self.intermediate_spacing_input.setFixedWidth(combo_width) + self.intermediate_spacing_input.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) row = self._add_form_row(inputs_grid, row, "Intermediate Stiffener Spacing:", self.intermediate_spacing_input) self.intermediate_thick_combo = QComboBox() @@ -178,8 +184,11 @@ def init_ui(self): self.intermediate_outstand_input = QTextEdit() self.intermediate_outstand_input.setReadOnly(True) self.intermediate_outstand_input.setText(OUTSTAND_DEFAULT_TEXT) - self.intermediate_outstand_input.setFixedHeight(34) + self.intermediate_outstand_input.setFixedHeight(28) self.intermediate_outstand_input.setFixedWidth(combo_width) + self.intermediate_outstand_input.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.intermediate_outstand_input.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.intermediate_outstand_input.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) self.intermediate_outstand_input.setStyleSheet( "QTextEdit { border: 1px solid #d0d0d0; border-radius: 6px; background: #ffffff; " "color: #5b5b5b; font-size: 11px; }" @@ -210,7 +219,7 @@ def init_ui(self): buckling_grid.setContentsMargins(0, 0, 0, 0) buckling_grid.setHorizontalSpacing(12) buckling_grid.setVerticalSpacing(10) - buckling_grid.setColumnMinimumWidth(0, 180) + buckling_grid.setColumnMinimumWidth(0, self._form_label_width) self.method_combo = QComboBox() self.method_combo.addItems(VALUES_STIFFENER_DESIGN) @@ -291,6 +300,10 @@ def _create_label(self, text): label = QLabel(text) label.setStyleSheet("font-size: 11px; color: #3a3a3a; border: none;") label.setWordWrap(True) + label_width = int(getattr(self, "_form_label_width", 245) or 245) + label.setMinimumWidth(label_width) + label.setMaximumWidth(label_width) + label.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Preferred) return label def _add_form_row(self, layout, row, text, widget): diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 8f32878d9..91e5af80f 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -56,6 +56,8 @@ def __init__(self, backend, parent): # Bottom action buttons (wired in build_left_panel). self.save_input_btn = None self.design_btn = None + self.design_mode_combo = None + self._current_design_mode = "Optimized" self.setStyleSheet("background: transparent;") self.main_layout = QHBoxLayout(self) @@ -752,6 +754,11 @@ def show_additional_inputs(self): except Exception: pass + try: + self.additional_inputs.set_member_properties_design_mode(self._get_basic_design_mode()) + except Exception: + pass + # Capture state when dialog closes. try: self.additional_inputs.finished.connect(self._handle_additional_inputs_closed) @@ -1196,6 +1203,8 @@ def _push_backend_value(self, key: str, value): def _register_input_widget(self, key, widget): if key == KEY_STRUCTURE_TYPE: self.structure_type_combo = widget + elif key == "Design": + self.design_mode_combo = widget elif key == KEY_SPAN: self.span_input = widget elif key == KEY_CARRIAGEWAY_WIDTH: @@ -1249,6 +1258,28 @@ def _apply_field_specific_config(self, key, widget, metadata): idx = widget.findText(default_value) if idx >= 0: widget.setCurrentIndex(idx) + elif key == "Design" and hasattr(widget, "currentTextChanged"): + widget.currentTextChanged.connect(self._on_design_mode_changed) + self._on_design_mode_changed(widget.currentText()) + + def _get_basic_design_mode(self) -> str: + if self.design_mode_combo is not None and hasattr(self.design_mode_combo, "currentText"): + value = str(self.design_mode_combo.currentText() or "").strip() + if value: + return value + value = str(getattr(self, "_current_design_mode", "") or "").strip() + return value or "Optimized" + + def _on_design_mode_changed(self, mode_text: str) -> None: + mode = str(mode_text or "").strip() or "Optimized" + self._current_design_mode = mode + + if self.additional_inputs is not None: + try: + if hasattr(self.additional_inputs, "set_member_properties_design_mode"): + self.additional_inputs.set_member_properties_design_mode(mode) + except Exception: + pass def _finalize_section_contexts(self): for context in self.section_contexts.values(): From 7fdc01e19dcc6fa8719329dd6afc9cbc5a9b532a Mon Sep 17 00:00:00 2001 From: Manav Sharma Date: Thu, 29 Jan 2026 20:46:03 +0530 Subject: [PATCH 057/225] Add BFS girder identification and element connectivity output --- .../bridge_types/plate_girder/analyser.py | 45 +- .../plate_girder/analysis_results.py | 462 ++++++++++++++++++ 2 files changed, 491 insertions(+), 16 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 8768ff8bd..3628a5626 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -5,6 +5,7 @@ from osdagbridge.core.utils.common import * from osdagbridge.core.bridge_types.plate_girder.bridge_geometry import * import warnings +from osdagbridge.core.bridge_types.plate_girder.analysis_results import PlateGirderAnalysisResults class BridgeGrillageModel: @@ -1076,16 +1077,17 @@ def add_vehicle_load_with_moving_path( "moving_load_case": moving_lc, "moving_path": path, } - def analyze(self, model=None): + model = model or self.model if model is None: - raise ValueError("Model is not available. Create model before adding loads.") - # Analysis + raise ValueError("Model not created") + model.analyze() - # results = model.get_results(load_case=['girder self weight', 'Deck slab load', 'Wearing course self weight', 'Footpath load', 'Crash barrier load', 'Railing load', 'Median load']) + # results = model.get_results(load_case=['girder self weight', 'Deck slab load', 'Wearing course self weight', + # 'Footpath load', 'Crash barrier load', 'Railing load', 'Median load']) results = model.get_results() print("results") print(results) @@ -1096,19 +1098,19 @@ def analyze(self, model=None): df = Fy.to_pandas() df.to_excel("Mz_results_moving1.xlsx") - girder_results = model.get_results(load_case=[ 'girder self weight']) - print("girder_sw_results") - print(girder_results) - - # extract elements and nodes of beam 1 - member_name = "exterior_main_beam_1" - - # get the tag of elements and nodes - ext_beam_elements = model.get_element(member=member_name, options="elements",) - print(f"The element tags for Beam 1 is {ext_beam_elements}") + results = model.get_results( + load_case=[ + "girder self weight", + "Deck slab load", + "Wearing course self weight", + "Footpath load", + "Crash barrier load", + "Railing load", + "Median load" + ] + ) - ext_beam_nodes = model.get_element(member=member_name, options="nodes") - print(f"The node tags for Beam 1 is {ext_beam_nodes[0]}") + return results def plot(self, model=None): model = model or self.model @@ -1186,3 +1188,14 @@ def plot(self, model=None): bridge.create_moving_vehicle_load_cases() bridge.analyze() # bridge.plot() + bridge.plot() + + results = bridge.analyze() + + result_handler = PlateGirderAnalysisResults( + dataset=results, + model=bridge.model + ) + + result_handler.run_interactive_viewer() + diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index e69de29bb..a6db0a869 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -0,0 +1,462 @@ +# ============================================================ +# Plate Girder Analysis Results +# ============================================================ +# 1. Reads OpenSees result dataset (forces, moments) +# 2. Builds logical girders using BFS +# 3. Allows girder-wise interactive result viewing +# ============================================================ + +import math +from collections import defaultdict, deque +import openseespy.opensees as ops + + +class PlateGirderAnalysisResults: + + # ======================================================== + # INITIALIZATION + # ======================================================== + def __init__(self, dataset, model): #storing analysis result + self.ds = dataset + self.model = model + + + # ======================================================== + # DATASET BASED RESULTS (FORCES / MOMENTS) + # ======================================================== + def get_beam_element_results(self, element_ids, loadcase, component): #reads beam force and moment + + results = {} + + for eid in element_ids: + try: + val = self.ds.sel( + Loadcase=loadcase, + Element=eid, + Component=component + )["forces"] + + results[eid] = val.values + except Exception: + results[eid] = None + + return results + + + def get_available_loadcases(self): #get loadcases + return list(self.ds.coords["Loadcase"].values) + + + # ======================================================== + # OPENSEES NODAL DEFLECTION (FINAL STATE) + # ======================================================== + def get_girder_deflection(self, girder_nodes, direction): #give total deflection + + dof_map = {"x": 1, "y": 2, "z": 3} + dof = dof_map[direction] + + disp = {} + for n in girder_nodes: + try: + disp[n] = ops.nodeDisp(n, dof) + except Exception: + disp[n] = 0.0 + + return disp + # ======================================================== + # OPENSEES DEFLECTION PER LOADCASE (RE-ANALYSIS) + # ======================================================== + def get_deflection_per_loadcase(self, girder_nodes, loadcase, direction): + + dof_map = {"x": 1, "y": 2, "z": 3} + dof = dof_map[direction] + + # reset previous analysis + ops.wipeAnalysis() + + # analyze only this loadcase + self.model.analyze(load_case=[loadcase]) + + disp = {} + for n in girder_nodes: + try: + disp[n] = ops.nodeDisp(n, dof) + except Exception: + disp[n] = 0.0 + + return disp + + + # ======================================================== + # GRILLAGE CONNECTIVITY + # ======================================================== + def build_grillage_connectivity(self): #connectivity between nodes[raph for bfs] + + nodes = {} + for n in ops.getNodeTags(): + nodes[n] = ops.nodeCoord(n) + + elements = {} + for e in ops.getEleTags(): + elements[e] = ops.eleNodes(e) + + adj = defaultdict(set) + + for conn in elements.values(): + if len(conn) != 2: + continue # safety + + n1, n2 = conn + + adj[n1].add(n2) + adj[n2].add(n1) + + return nodes, elements, adj + + + # ======================================================== + # BFS SHORTEST PATH + # ======================================================== + def bfs_shortest_path(self, adj, start, end): + # finds path shortest + queue = deque([[start]]) + visited = {start} + + while queue: + path = queue.popleft() + node = path[-1] + + if node == end: + return path + + for nbr in adj[node]: + if nbr not in visited: + visited.add(nbr) + queue.append(path + [nbr]) + + return None + + def get_elements_along_path(self, path, elements): + """ + Returns: + - list of element IDs along the path + - list of (eid, n1, n2) connectivity + """ + + path_elements = [] + element_map = [] + + for i in range(len(path) - 1): + n1 = path[i] + n2 = path[i + 1] + + for eid, conn in elements.items(): + if set(conn) == {n1, n2}: + path_elements.append(eid) + element_map.append((eid, n1, n2)) + break + + return path_elements, element_map + + # ======================================================== + # PATH LENGTH COMPUTATION + # ======================================================== + def compute_path_distance(self, nodes, path): + # calculate girder length + dist = 0.0 + for i in range(len(path) - 1): + x1, y1, z1 = nodes[path[i]] + x2, y2, z2 = nodes[path[i + 1]] + + dist += math.sqrt( + (x2 - x1) ** 2 + + (y2 - y1) ** 2 + + (z2 - z1) ** 2 + ) + + return dist + + + def get_elements_along_path(self, path, elements): + """ + Returns: + - list of element IDs along the girder + - connectivity info for printing + """ + + path_elements = [] + element_map = [] + + for eid, conn in elements.items(): + if len(conn) != 2: + continue + + n1, n2 = conn + + # element lies on girder if both nodes are in BFS path + if n1 in path and n2 in path: + path_elements.append(eid) + element_map.append((eid, n1, n2)) + + return path_elements, element_map + # ======================================================== + # BUILD LOGICAL GIRDERS (g1, g2, g3...) + # ======================================================== + def build_girders(self): #create girder + + nodes, elements, adj = self.build_grillage_connectivity() + + start_nodes = self.model.get_element( + member="start_edge", options="nodes" + ) + end_nodes = self.model.get_element( + member="end_edge", options="nodes" + ) + + print("\nStart edge nodes :", start_nodes) + print("End edge nodes :", end_nodes) + + # span length + x_coords = [c[0] for c in nodes.values()] + span_length = max(x_coords) - min(x_coords) + + print(f"\nSpan length from geometry = {span_length}\n") + + girder_map = {} + + for i, (s, e) in enumerate(zip(start_nodes, end_nodes), start=1): + path = self.bfs_shortest_path(adj, s, e) + path_elements, element_map = self.get_elements_along_path(path, elements) + length = self.compute_path_distance(nodes, path) + + status = "VERIFIED" if abs(length - span_length) < 1e-6 else "NOT MATCHING" + + print("----------------------------------------") + print(f"Girder g{i}") + print("----------------------------------------") + + print("Path :", path) + print("Elements :", path_elements) + + print("\nElement connectivity:") + for eid, n1, n2 in element_map: + print(f"{eid:<5}: {n1} -> {n2}") + + print(f"\nLength : {length:.3f} m ({status})") + print("----------------------------------------\n") + + girder_map[f"g{i}"] = { + "start": s, + "end": e, + "path": path, + "elements": path_elements, + "element_map": element_map, + "length": length + } + + return girder_map, elements + + def print_girder_paths_with_input(self): + """ + Asks user for basic grillage info and prints + girder-wise BFS paths in formatted form. + """ + + # ----------------------------- + # User input + # ----------------------------- + try: + n_long = int(input("Enter number of longitudinal beams: ")) + n_trans = int(input("Enter number of transverse slabs: ")) + spacing = float(input("Enter spacing / distance (m): ")) + except: + print("❌ Invalid input") + return + + nodes, elements, adj = self.build_grillage_connectivity() + + start_nodes = self.model.get_element( + member="start_edge", options="nodes" + ) + + end_nodes = self.model.get_element( + member="end_edge", options="nodes" + ) + + print("\nStart edge nodes:", start_nodes) + print("End edge nodes :", end_nodes) + print() + + # ----------------------------- + # Loop over girders + # ----------------------------- + for i, (s, e) in enumerate(zip(start_nodes, end_nodes), start=1): + + path = self.bfs_shortest_path(adj, s, e) + path_elements, element_map = self.get_elements_along_path(path, elements) + length = self.compute_path_distance(nodes, path) + + print("----------------------------------------") + print(f"Girder g{i}") + print("----------------------------------------") + + print(f"Start node : {s}") + print(f"End node : {e}") + print(f"Path : {path}") + print(f"Elements : {path_elements}") + + print("\nElement connectivity:") + for eid, n1, n2 in element_map: + print(f"{eid:<5}: {n1} -> {n2}") + + print(f"\nLength : {length:.3f} m") + print("----------------------------------------\n") + + # ======================================================== + # INTERACTIVE VIEWER + # ======================================================== + def run_interactive_viewer(self): + + while True: + + print("\n==============================") + print("Select Option:") + print("1. Show girder paths (BFS)") + print("2. Show analysis results") + print("0. Exit") + print("==============================") + + main_choice = input("Enter choice: ").strip() + + if main_choice == "0": + break + + # ====================================================== + # OPTION 1 → ONLY BFS / GIRDER CONNECTIVITY + # ====================================================== + if main_choice == "1": + self.print_girder_paths_with_input() + continue + + # ====================================================== + # OPTION 2 → EXISTING RESULT VIEWER (UNCHANGED) + # ====================================================== + if main_choice == "2": + + girder_map, elements = self.build_girders() + loadcases = self.get_available_loadcases() + + component_map = { + "1": "Vx_i", + "2": "Vy_i", + "3": "Vz_i", + "4": "Mx_i", + "5": "My_i", + "6": "Mz_i", + "7": "Dx", + "8": "Dy", + "9": "Dz" + } + + while True: + + print("\nSelect Girder:") + for i, g in enumerate(girder_map.keys(), 1): + print(f"{i}. {g}") + print("0. Back") + + g = input().strip() + + if g == "0": + break + + if not g.isdigit(): + print("❌ Invalid input") + continue + + g = int(g) + if g < 1 or g > len(girder_map): + print("❌ Invalid girder number") + continue + + key = list(girder_map.keys())[g - 1] + girder = girder_map[key] + girder_nodes = girder["path"] + + girder_elements = [ + eid for eid, conn in elements.items() + if conn[0] in girder_nodes and conn[1] in girder_nodes + ] + + # ================= LOADCASE LOOP ================= + while True: + + print("\nSelect Loadcase:") + for i, lc in enumerate(loadcases, 1): + print(f"{i}. {lc}") + print("0. Back") + + lc_in = input().strip() + + if lc_in == "0": + break + + if not lc_in.isdigit(): + print("❌ Invalid input") + continue + + lc_in = int(lc_in) + if lc_in < 1 or lc_in > len(loadcases): + print("❌ Invalid loadcase") + continue + + lc = loadcases[lc_in - 1] + + # ================= RESULT TYPE LOOP ================= + while True: + + print("\nSelect Result Type:") + for k, v in component_map.items(): + print(f"{k}. {v}") + print("0. Back") + + r = input().strip() + + if r == "0": + break + + if r not in component_map: + print("❌ Invalid selection") + continue + + comp = component_map[r] + + # ---------------- DEFLECTION ---------------- + if comp in ["Dx", "Dy", "Dz"]: + + direction = comp[-1].lower() + + disp = self.get_deflection_per_loadcase( + girder_nodes, lc, direction + ) + + print(f"\nDeflection ({comp}) | {lc}") + print("--------------------------------") + for n, v in disp.items(): + print(f"Node {n}: {v}") + print("--------------------------------") + continue + + # ---------------- FORCES ---------------- + res = self.get_beam_element_results( + girder_elements, lc, comp + ) + + print(f"\nResults | {key} | {lc} | {comp}") + for eid, val in res.items(): + print(f"Element {eid}: {val}") + + continue + + else: + print("❌ Invalid option") \ No newline at end of file From 48d0c3dd0d4157a30343014291de549450957c63 Mon Sep 17 00:00:00 2001 From: Manav Sharma Date: Mon, 9 Feb 2026 17:57:55 +0530 Subject: [PATCH 058/225] Add plots widget using analysis_results dataset and integrate girder force extraction Added plots widget + analysis integration Added plots widget + analysis integration Updated analysis results logic fixed the irregularities in output of data WIP: plots widget updates Plot Widget Changes Add plots widget using analysis_results dataset and integrate girder force extraction Added plots widget + analysis integration fixed the irregularities in output of data WIP: plots widget updates Plot Widget Changes --- .gitignore | 22 +- mat_lib.json | 162 +++ .../bridge_types/plate_girder/analyser.py | 4 + .../plate_girder/analysis_results.py | 296 ++--- .../bridge_types/plate_girder/mat_lib.json | 162 +++ .../plate_girder/plategirderbridge.py | 442 ------- .../bridge_types/plate_girder/plots_widget.py | 1174 +++++++++++++++++ 7 files changed, 1668 insertions(+), 594 deletions(-) create mode 100644 mat_lib.json create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/mat_lib.json delete mode 100644 src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py diff --git a/.gitignore b/.gitignore index 51234242b..116fc130d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,24 @@ -# Byte-compiled / optimized / DLL files +# Mac +.DS_Store + +# IDE +.idea/ + +# Python env +osdagbridge-env/ +venv/ +env/ + +# Sub repos / libs +ospgrillage/ + +# Temp plots +temp_plot.html +*.html + +# Python cache +__pycache__/ +*.pyc# Byte-compiled / optimized / DLL files */__pycache__/ *.py[codz] *$py.class diff --git a/mat_lib.json b/mat_lib.json new file mode 100644 index 000000000..b5407cafe --- /dev/null +++ b/mat_lib.json @@ -0,0 +1,162 @@ +{ + "concrete": { + "AS5100-2017": { + "units": "SI", + "25MPa": { + "fc": 25, + "E": 26.7, + "v": 0.2, + "rho": 2400.0 + }, + "32MPa": { + "fc": 32, + "E": 30.1, + "v": 0.2, + "rho": 2400.0 + }, + "40MPa": { + "fc": 40, + "E": 32.8, + "v": 0.2, + "rho": 2400.0 + }, + "50MPa": { + "fc": 50, + "E": 34.8, + "v": 0.2, + "rho": 2400.0 + }, + "65MPa": { + "fc": 65, + "E": 37.4, + "v": 0.2, + "rho": 2400.0 + }, + "80MPa": { + "fc": 80, + "E": 39.6, + "v": 0.2, + "rho": 2400.0 + }, + "100MPa": { + "fc": 100, + "E": 42.2, + "v": 0.2, + "rho": 2400.0 + } + }, + "AASHTO-LRFD-8th": { + "units": "SI", + "2.4ksi": { + "fc": 16.55, + "E": 23.2223, + "v": 0.2, + "rho": 2402.7 + }, + "3.0ksi": { + "fc": 20.68, + "E": 24.997, + "v": 0.2, + "rho": 2402.7 + }, + "3.6ksi": { + "fc": 24.82, + "E": 26.547, + "v": 0.2, + "rho": 2402.7 + }, + "4.0ksi": { + "fc": 27.58, + "E": 27.486, + "v": 0.2, + "rho": 2402.7 + }, + "5.0ksi": { + "fc": 34.47, + "E": 29.587, + "v": 0.2, + "rho": 2402.7 + }, + "6.0ksi": { + "fc": 41.37, + "E": 31.856, + "v": 0.2, + "rho": 2402.7 + }, + "7.5ksi": { + "fc": 51.71, + "E": 34.999, + "v": 0.2, + "rho": 2402.7 + }, + "10.0ksi": { + "fc": 68.95, + "E": 39.8, + "v": 0.2, + "rho": 2402.7 + }, + "15.0ksi": { + "fc": 103.42, + "E": 48.582, + "v": 0.2, + "rho": 2402.7 + } + } + }, + "steel": { + "AS5100.6-2004": { + "units": "SI", + "R250N": { + "fy": 250, + "E": 200.0, + "v": 0.25, + "rho": 7850 + }, + "D500N": { + "fy": 500, + "E": 200.0, + "v": 0.25, + "rho": 7850 + }, + "D500L": { + "fy": 500, + "E": 200.0, + "v": 0.25, + "rho": 7850 + } + }, + "AASHTO-LRFD-8th": { + "units": "SI", + "A615-40": { + "fy": 275.8, + "E": 200.0, + "v": 0.3, + "rho": 7849 + }, + "A615-60": { + "fy": 413.67, + "E": 200.0, + "v": 0.3, + "rho": 7849 + }, + "A615-75": { + "fy": 517.12, + "E": 200.0, + "v": 0.3, + "rho": 7849 + }, + "A615-80": { + "fy": 551.58, + "E": 200.0, + "v": 0.3, + "rho": 7849 + }, + "A615-100": { + "fy": 689.48, + "E": 200.0, + "v": 0.3, + "rho": 7849 + } + } + } +} \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 3628a5626..2385cbc9c 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -1110,6 +1110,8 @@ def analyze(self, model=None): ] ) + self.dataset = results + return results def plot(self, model=None): @@ -1189,6 +1191,8 @@ def plot(self, model=None): bridge.analyze() # bridge.plot() bridge.plot() + # bridge.analyze() + # bridge.plot() results = bridge.analyze() diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index a6db0a869..87464c4fb 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -50,41 +50,41 @@ def get_available_loadcases(self): # ======================================================== # OPENSEES NODAL DEFLECTION (FINAL STATE) # ======================================================== - def get_girder_deflection(self, girder_nodes, direction): #give total deflection - - dof_map = {"x": 1, "y": 2, "z": 3} - dof = dof_map[direction] - - disp = {} - for n in girder_nodes: - try: - disp[n] = ops.nodeDisp(n, dof) - except Exception: - disp[n] = 0.0 - - return disp - # ======================================================== - # OPENSEES DEFLECTION PER LOADCASE (RE-ANALYSIS) - # ======================================================== - def get_deflection_per_loadcase(self, girder_nodes, loadcase, direction): - - dof_map = {"x": 1, "y": 2, "z": 3} - dof = dof_map[direction] - - # reset previous analysis - ops.wipeAnalysis() - - # analyze only this loadcase - self.model.analyze(load_case=[loadcase]) - - disp = {} - for n in girder_nodes: - try: - disp[n] = ops.nodeDisp(n, dof) - except Exception: - disp[n] = 0.0 - - return disp + # def get_girder_deflection(self, girder_nodes, direction): #give total deflection + # + # dof_map = {"x": 1, "y": 2, "z": 3} + # dof = dof_map[direction] + # + # disp = {} + # for n in girder_nodes: + # try: + # disp[n] = ops.nodeDisp(n, dof) + # except Exception: + # disp[n] = 0.0 + # + # return disp + # # ======================================================== + # # OPENSEES DEFLECTION PER LOADCASE (RE-ANALYSIS) + # # ======================================================== + # def get_deflection_per_loadcase(self, girder_nodes, loadcase, direction): + # + # dof_map = {"x": 1, "y": 2, "z": 3} + # dof = dof_map[direction] + # + # # reset previous analysis + # ops.wipeAnalysis() + # + # # analyze only this loadcase + # self.model.analyze(load_case=[loadcase]) + # + # disp = {} + # for n in girder_nodes: + # try: + # disp[n] = ops.nodeDisp(n, dof) + # except Exception: + # disp[n] = 0.0 + # + # return disp # ======================================================== @@ -176,51 +176,35 @@ def compute_path_distance(self, nodes, path): return dist - - def get_elements_along_path(self, path, elements): - """ - Returns: - - list of element IDs along the girder - - connectivity info for printing - """ - - path_elements = [] - element_map = [] - - for eid, conn in elements.items(): - if len(conn) != 2: - continue - - n1, n2 = conn - - # element lies on girder if both nodes are in BFS path - if n1 in path and n2 in path: - path_elements.append(eid) - element_map.append((eid, n1, n2)) - - return path_elements, element_map # ======================================================== # BUILD LOGICAL GIRDERS (g1, g2, g3...) # ======================================================== - def build_girders(self): #create girder + def build_girders(self, verbose=True): nodes, elements, adj = self.build_grillage_connectivity() - start_nodes = self.model.get_element( - member="start_edge", options="nodes" - ) - end_nodes = self.model.get_element( - member="end_edge", options="nodes" - ) + # AUTO EXTRACT START / END + x_coords = {n: coord[0] for n, coord in nodes.items()} + + min_x = min(x_coords.values()) + max_x = max(x_coords.values()) + + start_nodes = [n for n, x in x_coords.items() if x == min_x] + end_nodes = [n for n, x in x_coords.items() if x == max_x] + + start_nodes.sort(key=lambda n: nodes[n][2]) + end_nodes.sort(key=lambda n: nodes[n][2]) - print("\nStart edge nodes :", start_nodes) - print("End edge nodes :", end_nodes) + if verbose: + print("\nStart edge nodes :", start_nodes) + print("End edge nodes :", end_nodes) # span length x_coords = [c[0] for c in nodes.values()] span_length = max(x_coords) - min(x_coords) - print(f"\nSpan length from geometry = {span_length}\n") + if verbose: + print(f"\nSpan length from geometry = {span_length}\n") girder_map = {} @@ -231,19 +215,20 @@ def build_girders(self): status = "VERIFIED" if abs(length - span_length) < 1e-6 else "NOT MATCHING" - print("----------------------------------------") - print(f"Girder g{i}") - print("----------------------------------------") + if verbose: + print("----------------------------------------") + print(f"Girder g{i}") + print("----------------------------------------") - print("Path :", path) - print("Elements :", path_elements) + print("Path :", path) + print("Elements :", path_elements) - print("\nElement connectivity:") - for eid, n1, n2 in element_map: - print(f"{eid:<5}: {n1} -> {n2}") + print("\nElement connectivity:") + for eid, n1, n2 in element_map: + print(f"{eid:<5}: {n1} -> {n2}") - print(f"\nLength : {length:.3f} m ({status})") - print("----------------------------------------\n") + print(f"\nLength : {length:.3f} m ({status})") + print("----------------------------------------\n") girder_map[f"g{i}"] = { "start": s, @@ -256,65 +241,42 @@ def build_girders(self): return girder_map, elements - def print_girder_paths_with_input(self): - """ - Asks user for basic grillage info and prints - girder-wise BFS paths in formatted form. + # ======================================================== + # PRINT SINGLE GIRDER (FORMATTED) + # ======================================================== + def print_single_girder(self, girder_key): """ + Prints one girder in formatted report style. - # ----------------------------- - # User input - # ----------------------------- - try: - n_long = int(input("Enter number of longitudinal beams: ")) - n_trans = int(input("Enter number of transverse slabs: ")) - spacing = float(input("Enter spacing / distance (m): ")) - except: - print("❌ Invalid input") - return - - nodes, elements, adj = self.build_grillage_connectivity() - - start_nodes = self.model.get_element( - member="start_edge", options="nodes" - ) - - end_nodes = self.model.get_element( - member="end_edge", options="nodes" - ) - - print("\nStart edge nodes:", start_nodes) - print("End edge nodes :", end_nodes) - print() + Example input: + g1 + g2 + g3 + """ - # ----------------------------- - # Loop over girders - # ----------------------------- - for i, (s, e) in enumerate(zip(start_nodes, end_nodes), start=1): + girder_map, _ = self.build_girders() - path = self.bfs_shortest_path(adj, s, e) - path_elements, element_map = self.get_elements_along_path(path, elements) - length = self.compute_path_distance(nodes, path) + if girder_key not in girder_map: + print("❌ Girder not found") + return - print("----------------------------------------") - print(f"Girder g{i}") - print("----------------------------------------") + girder = girder_map[girder_key] - print(f"Start node : {s}") - print(f"End node : {e}") - print(f"Path : {path}") - print(f"Elements : {path_elements}") + print("----------------------------------------") + print(f"Girder {girder_key}") + print("----------------------------------------") - print("\nElement connectivity:") - for eid, n1, n2 in element_map: - print(f"{eid:<5}: {n1} -> {n2}") + print(f"Start node : {girder['start']}") + print(f"End node : {girder['end']}") + print(f"Path : {girder['path']}") + print(f"Elements : {girder['elements']}") - print(f"\nLength : {length:.3f} m") - print("----------------------------------------\n") + print("\nElement connectivity:") + for eid, n1, n2 in girder["element_map"]: + print(f"{eid:<5}: {n1} -> {n2}") - # ======================================================== - # INTERACTIVE VIEWER - # ======================================================== + print(f"\nLength : {girder['length']:.3f} m") + print("----------------------------------------") def run_interactive_viewer(self): while True: @@ -332,18 +294,49 @@ def run_interactive_viewer(self): break # ====================================================== - # OPTION 1 → ONLY BFS / GIRDER CONNECTIVITY + # OPTION 1 → SHOW SINGLE GIRDER PATH # ====================================================== if main_choice == "1": - self.print_girder_paths_with_input() + + # Build WITHOUT printing + girder_map, _ = self.build_girders(verbose=False) + + print("\nAvailable Girders:") + for g in girder_map.keys(): + print(g) + + key = input("\nEnter girder : ").strip() + + if key not in girder_map: + print("❌ Invalid girder") + continue + + girder = girder_map[key] + + print("\n----------------------------------------") + print(f"Girder {key}") + print("----------------------------------------") + print(f"Start node : {girder['start']}") + print(f"End node : {girder['end']}") + print(f"Node Path : {girder['path']}") + print(f"Elements : {girder['elements']}") + + print("\nElement connectivity:") + for eid, n1, n2 in girder["element_map"]: + print(f"{eid:<5}: {n1} -> {n2}") + + print(f"\nLength : {girder['length']:.3f} m") + print("----------------------------------------") + continue + # ====================================================== - # OPTION 2 → EXISTING RESULT VIEWER (UNCHANGED) + # OPTION 2 → EXISTING RESULT VIEWER # ====================================================== if main_choice == "2": - girder_map, elements = self.build_girders() + girder_map, elements = self.build_girders(verbose=False) loadcases = self.get_available_loadcases() component_map = { @@ -353,9 +346,9 @@ def run_interactive_viewer(self): "4": "Mx_i", "5": "My_i", "6": "Mz_i", - "7": "Dx", - "8": "Dy", - "9": "Dz" + # "7": "Dx", + # "8": "Dy", + # "9": "Dz" } while True: @@ -411,7 +404,8 @@ def run_interactive_viewer(self): continue lc = loadcases[lc_in - 1] - + import plots_widget + plots_widget.CURRENT_LOADCASE = lc # ================= RESULT TYPE LOOP ================= while True: @@ -432,20 +426,20 @@ def run_interactive_viewer(self): comp = component_map[r] # ---------------- DEFLECTION ---------------- - if comp in ["Dx", "Dy", "Dz"]: - - direction = comp[-1].lower() - - disp = self.get_deflection_per_loadcase( - girder_nodes, lc, direction - ) - - print(f"\nDeflection ({comp}) | {lc}") - print("--------------------------------") - for n, v in disp.items(): - print(f"Node {n}: {v}") - print("--------------------------------") - continue + # if comp in ["Dx", "Dy", "Dz"]: + # + # direction = comp[-1].lower() + # + # disp = self.get_deflection_per_loadcase( + # girder_nodes, lc, direction + # ) + # + # print(f"\nDeflection ({comp}) | {lc}") + # print("--------------------------------") + # for n, v in disp.items(): + # print(f"Node {n}: {v}") + # print("--------------------------------") + # continue # ---------------- FORCES ---------------- res = self.get_beam_element_results( @@ -459,4 +453,4 @@ def run_interactive_viewer(self): continue else: - print("❌ Invalid option") \ No newline at end of file + print("❌ Invalid option") diff --git a/src/osdagbridge/core/bridge_types/plate_girder/mat_lib.json b/src/osdagbridge/core/bridge_types/plate_girder/mat_lib.json new file mode 100644 index 000000000..b5407cafe --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/mat_lib.json @@ -0,0 +1,162 @@ +{ + "concrete": { + "AS5100-2017": { + "units": "SI", + "25MPa": { + "fc": 25, + "E": 26.7, + "v": 0.2, + "rho": 2400.0 + }, + "32MPa": { + "fc": 32, + "E": 30.1, + "v": 0.2, + "rho": 2400.0 + }, + "40MPa": { + "fc": 40, + "E": 32.8, + "v": 0.2, + "rho": 2400.0 + }, + "50MPa": { + "fc": 50, + "E": 34.8, + "v": 0.2, + "rho": 2400.0 + }, + "65MPa": { + "fc": 65, + "E": 37.4, + "v": 0.2, + "rho": 2400.0 + }, + "80MPa": { + "fc": 80, + "E": 39.6, + "v": 0.2, + "rho": 2400.0 + }, + "100MPa": { + "fc": 100, + "E": 42.2, + "v": 0.2, + "rho": 2400.0 + } + }, + "AASHTO-LRFD-8th": { + "units": "SI", + "2.4ksi": { + "fc": 16.55, + "E": 23.2223, + "v": 0.2, + "rho": 2402.7 + }, + "3.0ksi": { + "fc": 20.68, + "E": 24.997, + "v": 0.2, + "rho": 2402.7 + }, + "3.6ksi": { + "fc": 24.82, + "E": 26.547, + "v": 0.2, + "rho": 2402.7 + }, + "4.0ksi": { + "fc": 27.58, + "E": 27.486, + "v": 0.2, + "rho": 2402.7 + }, + "5.0ksi": { + "fc": 34.47, + "E": 29.587, + "v": 0.2, + "rho": 2402.7 + }, + "6.0ksi": { + "fc": 41.37, + "E": 31.856, + "v": 0.2, + "rho": 2402.7 + }, + "7.5ksi": { + "fc": 51.71, + "E": 34.999, + "v": 0.2, + "rho": 2402.7 + }, + "10.0ksi": { + "fc": 68.95, + "E": 39.8, + "v": 0.2, + "rho": 2402.7 + }, + "15.0ksi": { + "fc": 103.42, + "E": 48.582, + "v": 0.2, + "rho": 2402.7 + } + } + }, + "steel": { + "AS5100.6-2004": { + "units": "SI", + "R250N": { + "fy": 250, + "E": 200.0, + "v": 0.25, + "rho": 7850 + }, + "D500N": { + "fy": 500, + "E": 200.0, + "v": 0.25, + "rho": 7850 + }, + "D500L": { + "fy": 500, + "E": 200.0, + "v": 0.25, + "rho": 7850 + } + }, + "AASHTO-LRFD-8th": { + "units": "SI", + "A615-40": { + "fy": 275.8, + "E": 200.0, + "v": 0.3, + "rho": 7849 + }, + "A615-60": { + "fy": 413.67, + "E": 200.0, + "v": 0.3, + "rho": 7849 + }, + "A615-75": { + "fy": 517.12, + "E": 200.0, + "v": 0.3, + "rho": 7849 + }, + "A615-80": { + "fy": 551.58, + "E": 200.0, + "v": 0.3, + "rho": 7849 + }, + "A615-100": { + "fy": 689.48, + "E": 200.0, + "v": 0.3, + "rho": 7849 + } + } + } +} \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py deleted file mode 100644 index fad6604b1..000000000 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ /dev/null @@ -1,442 +0,0 @@ -"""Main PG bridge file """ - -from __future__ import annotations - -from dataclasses import asdict, dataclass, field -from typing import Any, Callable, Dict, Mapping, Optional - -from osdagbridge.core.utils.common import ( - DEFAULT_CRASH_BARRIER_WIDTH, - DEFAULT_GIRDER_SPACING, - DEFAULT_RAILING_WIDTH, - KEY_CARRIAGEWAY_WIDTH, - KEY_CRASH_BARRIER_WIDTH, - KEY_DECK_OVERHANG, - KEY_DECK_THICKNESS, - KEY_FOOTPATH_WIDTH, - KEY_GIRDER_BOTTOM_FLANGE_WIDTH, - KEY_GIRDER_DEPTH, - KEY_GIRDER_SPACING, - KEY_GIRDER_SYMMETRY, - KEY_GIRDER_TOP_FLANGE_WIDTH, - KEY_GIRDER_TOP_FLANGE_THICKNESS, - KEY_GIRDER_WEB_THICKNESS, - KEY_INCLUDE_MEDIAN, - KEY_NO_OF_GIRDERS, - KEY_RAILING_WIDTH, - KEY_SKEW_ANGLE, - KEY_SPAN, - MIN_FOOTPATH_WIDTH, -) - -from .bridge_geometry import BridgeGeometry, CrossSectionLayout -from .cad_generator import export_step -from .designer import design -from .initial_sizing import BridgeConfigurationSolver, preliminary_sizing -from .report_generator import section_report -from .ui_fields import FrontendData -from .ui_fields_additional_input import ( - CRASH_BARRIER_TAB_SCHEMA, - DESIGN_OPTIONS_CONT_SCHEMA, - DESIGN_OPTIONS_SCHEMA, - GIRDER_DETAILS_SCHEMA, - LANE_DETAILS_TAB_SCHEMA, - LAYOUT_TAB_SCHEMA, - MEDIAN_TAB_SCHEMA, - RAILING_TAB_SCHEMA, - SUPPORT_CONDITIONS_SCHEMA, - WEARING_COURSE_TAB_SCHEMA, -) - -try: - from .dto import PlateGirderDTO -except Exception: - @dataclass - class PlateGirderDTO: - """Fallback DTO when dto.py is unavailable.""" - - name: str - - -def _first_present(source: Mapping[str, Any], *keys: str) -> Any: - for key in keys: - if key in source and source[key] not in ("", None): - return source[key] - return None - - -def _as_float(value: Any, default: float) -> float: - if value in ("", None): - return default - try: - return float(value) - except (TypeError, ValueError): - return default - - -def _as_int(value: Any, default: int) -> int: - if value in ("", None): - return default - try: - return int(float(value)) - except (TypeError, ValueError): - return default - - -def _as_bool(value: Any, default: bool = False) -> bool: - if value is None: - return default - if isinstance(value, bool): - return value - if isinstance(value, (int, float)): - return bool(value) - return str(value).strip().lower() in {"1", "true", "yes", "y"} - - -def _to_m(value: Any) -> float: - """Accept meters directly; if value looks like mm, convert to meters.""" - as_float = _as_float(value, 0.0) - return as_float / 1000.0 if as_float > 10.0 else as_float - - -@dataclass -class PlateGirderRunResult: - dto: PlateGirderDTO - initial_sizing: Dict[str, Any] = field(default_factory=dict) - geometry: Dict[str, Any] = field(default_factory=dict) - analysis: Dict[str, Any] = field(default_factory=dict) - analysis_results: Dict[str, Any] = field(default_factory=dict) - design: Dict[str, Any] = field(default_factory=dict) - modifier: Dict[str, Any] = field(default_factory=dict) - cad: Dict[str, Any] = field(default_factory=dict) - report: Dict[str, Any] = field(default_factory=dict) - - def to_dict(self) -> Dict[str, Any]: - return asdict(self) - - -class PlateGirderBridge: - """Coordinator that stitches all plate-girder modules.""" - - def __init__( - self, - basic_inputs: Optional[Mapping[str, Any]] = None, - additional_inputs: Optional[Mapping[str, Any]] = None, - modifier_hook: Optional[Callable[[PlateGirderRunResult], Dict[str, Any]]] = None, - ) -> None: - self.basic_inputs = dict(basic_inputs or {}) - self.additional_inputs = dict(additional_inputs or {}) - self.modifier_hook = modifier_hook - self._analysis_engine = None - - @staticmethod - def get_basic_input_schema() -> list: - return FrontendData().input_values() - - @staticmethod - def get_additional_input_schema() -> Dict[str, Dict[str, Any]]: - return { - "layout": LAYOUT_TAB_SCHEMA, - "crash_barrier": CRASH_BARRIER_TAB_SCHEMA, - "median": MEDIAN_TAB_SCHEMA, - "railing": RAILING_TAB_SCHEMA, - "wearing_course": WEARING_COURSE_TAB_SCHEMA, - "lane_details": LANE_DETAILS_TAB_SCHEMA, - "support_conditions": SUPPORT_CONDITIONS_SCHEMA, - "design_options": DESIGN_OPTIONS_SCHEMA, - "design_options_cont": DESIGN_OPTIONS_CONT_SCHEMA, - "girder_details": GIRDER_DETAILS_SCHEMA, - } - - def _footpath_count(self) -> int: - footpath_value = _first_present(self.basic_inputs, "footpath", "Footpath") - if footpath_value is None: - return 0 - text = str(footpath_value).strip().lower() - if "both" in text: - return 2 - if "single" in text: - return 1 - return 0 - - def _build_dto(self) -> PlateGirderDTO: - structure_name = _first_present( - self.basic_inputs, - "Structure Type", - "structure_type", - "name", - ) - return PlateGirderDTO(name=str(structure_name or "plate_girder_bridge")) - - def _run_initial_sizing(self, dto: PlateGirderDTO) -> Dict[str, Any]: - span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) - carriageway_width = _as_float( - _first_present(self.basic_inputs, KEY_CARRIAGEWAY_WIDTH, "carriageway_width"), - 10.0, - ) - no_of_footpaths = self._footpath_count() - include_median = _as_bool(_first_present(self.basic_inputs, KEY_INCLUDE_MEDIAN, "include_median")) - - crash_barrier_width = _as_float( - _first_present(self.additional_inputs, KEY_CRASH_BARRIER_WIDTH, "crash_barrier_width"), - DEFAULT_CRASH_BARRIER_WIDTH, - ) - footpath_width = _as_float( - _first_present(self.additional_inputs, KEY_FOOTPATH_WIDTH, "footpath_width"), - MIN_FOOTPATH_WIDTH if no_of_footpaths else 0.0, - ) - railing_width = _as_float( - _first_present(self.additional_inputs, KEY_RAILING_WIDTH, "railing_width"), - DEFAULT_RAILING_WIDTH if no_of_footpaths else 0.0, - ) - median_width = _as_float(_first_present(self.additional_inputs, "median_width"), 0.0) - if not include_median: - median_width = 0.0 - - n_girders = max( - 2, - _as_int(_first_present(self.additional_inputs, KEY_NO_OF_GIRDERS, "no_of_girders"), 4), - ) - girder_spacing = _as_float( - _first_present(self.additional_inputs, KEY_GIRDER_SPACING, "girder_spacing"), - DEFAULT_GIRDER_SPACING, - ) - deck_overhang = _as_float( - _first_present(self.additional_inputs, KEY_DECK_OVERHANG, "deck_overhang"), - 0.5 * DEFAULT_GIRDER_SPACING, - ) - - top_flange_w = _to_m( - _first_present(self.additional_inputs, KEY_GIRDER_TOP_FLANGE_WIDTH, "top_flange_width") - ) - bot_flange_w = _to_m( - _first_present(self.additional_inputs, KEY_GIRDER_BOTTOM_FLANGE_WIDTH, "bottom_flange_width") - ) - max_flange_width = max(top_flange_w, bot_flange_w, 0.0) - - solver = BridgeConfigurationSolver( - carriageway_width=carriageway_width, - crash_barrier_width=crash_barrier_width, - footpath_width=footpath_width, - railing_width=railing_width, - median_width=median_width, - no_of_footpaths=no_of_footpaths, - flange_width=max_flange_width, - ) - - changed_field = "girders" - if _first_present(self.additional_inputs, KEY_DECK_OVERHANG, "deck_overhang") is not None: - changed_field = "overhang" - elif _first_present(self.additional_inputs, KEY_GIRDER_SPACING, "girder_spacing") is not None: - changed_field = "spacing" - - layout_result = solver._solve_layout( - no_of_girders=n_girders, - girder_spacing=girder_spacing, - deck_overhang=deck_overhang, - changed_field=changed_field, - ) - - deck_thickness = solver.get_deck_thickness( - _as_float(_first_present(self.additional_inputs, KEY_DECK_THICKNESS, "deck_thickness"), 200.0) - ) - footpath_width_checked = solver.get_footpath_width( - user_value=footpath_width, - footpath={0: "None", 1: "Single Side", 2: "Both Sides"}.get(no_of_footpaths, "None"), - ) - section_properties = solver.compute_section_properties( - span=span, - symmetry=str( - _first_present(self.additional_inputs, KEY_GIRDER_SYMMETRY, "symmetry") - or "Girder Symmetric" - ), - user_depth=_to_m(_first_present(self.additional_inputs, KEY_GIRDER_DEPTH, "depth")), - B_top=top_flange_w, - B_bot=bot_flange_w, - t_f_top=_to_m( - _first_present(self.additional_inputs, KEY_GIRDER_TOP_FLANGE_THICKNESS, "top_flange_thickness") - ), - t_f_bot=_to_m(_first_present(self.additional_inputs, "bottom_flange_thickness")), - t_w=_to_m(_first_present(self.additional_inputs, KEY_GIRDER_WEB_THICKNESS, "web_thickness")), - ) - - return { - "legacy_initial_sizing": preliminary_sizing(dto), - "layout": asdict(layout_result), - "deck_thickness_mm": deck_thickness, - "footpath_width_m": footpath_width_checked, - "section_properties": section_properties, - "inputs_resolved": { - "span_m": span, - "carriageway_width_m": carriageway_width, - "crash_barrier_width_m": crash_barrier_width, - "railing_width_m": railing_width, - "median_width_m": median_width, - "no_of_footpaths": no_of_footpaths, - }, - } - - def _build_geometry(self, initial_sizing: Dict[str, Any]) -> Dict[str, Any]: - span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) - layout_data = initial_sizing["layout"] - resolved = initial_sizing["inputs_resolved"] - - layout = CrossSectionLayout( - carriageway_width=resolved["carriageway_width_m"], - crash_barrier_width=resolved["crash_barrier_width_m"], - railing_width=resolved["railing_width_m"], - footpath_width=initial_sizing["footpath_width_m"], - median_width=resolved["median_width_m"], - no_of_footpaths=resolved["no_of_footpaths"], - ) - geometry = BridgeGeometry(span=span, width=layout.total_width) - layout.verify_bridge_width( - num_long_grid=layout_data["no_of_girders"], - ext_to_int_dist=layout_data["girder_spacing"], - edge_beam_dist=layout_data["deck_overhang"], - tol=1e-3, - ) - - return { - "span_m": geometry.span, - "width_m": geometry.width, - "bounds": geometry.bounds(), - "cross_section": layout.describe(), - } - - def _prepare_or_run_analysis( - self, - initial_sizing: Dict[str, Any], - run_analysis: bool, - include_live_load: bool, - ) -> Dict[str, Any]: - try: - from .analyser import BridgeGrillageModel # Imported lazily: heavy deps. - except Exception as exc: - return {"status": "skipped", "reason": f"analysis backend import failed: {exc}"} - - layout = initial_sizing["layout"] - span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) - skew = _as_float(_first_present(self.basic_inputs, KEY_SKEW_ANGLE, "skew_angle"), 0.0) - - engine = BridgeGrillageModel() - engine.L = span - engine.n_l = layout["no_of_girders"] - engine.ext_to_int_dist = layout["girder_spacing"] - engine.edge_dist = layout["deck_overhang"] - engine.angle = skew - engine.create_model() - - created_dead = [] - for method_name in ( - "create_self_weight_load", - "create_deck_load", - "create_wearing_course_load", - "create_footpath_load", - "create_crash_barrier_load", - "create_railing_load", - "create_median_load", - ): - method = getattr(engine, method_name) - load_case = method() - if load_case is not None: - created_dead.append(method_name) - - created_live = [] - if include_live_load: - for method_name in ( - "create_vehicle_load_cases", - "add_vehicle_load_cases_from_combinations", - "create_moving_vehicle_load_cases", - ): - getattr(engine, method_name)() - created_live.append(method_name) - - status = "prepared" - if run_analysis: - engine.analyze() - status = "completed" - - self._analysis_engine = engine - return { - "status": status, - "dead_load_steps": created_dead, - "live_load_steps": created_live, - } - - def _collect_analysis_results(self, analysis: Dict[str, Any]) -> Dict[str, Any]: - if analysis.get("status") == "skipped": - return {"status": "skipped", "reason": analysis.get("reason")} - if analysis.get("status") != "completed": - return { - "status": "not_run", - "note": "Analysis model is prepared. Run with run_analysis=True to produce results.", - } - return {"status": "completed", "note": "Use BridgeGrillageModel results/plot APIs for detailed tables."} - - def run( - self, - *, - run_analysis: bool = False, - include_live_load: bool = True, - cad_path: Optional[str] = None, - ) -> PlateGirderRunResult: - dto = self._build_dto() - initial_sizing = self._run_initial_sizing(dto) - geometry = self._build_geometry(initial_sizing) - analysis = self._prepare_or_run_analysis(initial_sizing, run_analysis, include_live_load) - analysis_results = self._collect_analysis_results(analysis) - design_result = design(dto) - - modifier_result: Dict[str, Any] = {"status": "skipped", "reason": "no modifier hook provided"} - if self.modifier_hook is not None: - temp = PlateGirderRunResult( - dto=dto, - initial_sizing=initial_sizing, - geometry=geometry, - analysis=analysis, - analysis_results=analysis_results, - design=design_result, - ) - modifier_result = self.modifier_hook(temp) - - cad_result: Dict[str, Any] = {"status": "skipped"} - if cad_path: - export_step(dto, cad_path) - cad_result = {"status": "generated", "path": cad_path} - - report_result = section_report(dto) - - return PlateGirderRunResult( - dto=dto, - initial_sizing=initial_sizing, - geometry=geometry, - analysis=analysis, - analysis_results=analysis_results, - design=design_result, - modifier=modifier_result, - cad=cad_result, - report=report_result, - ) - - -def run_plategirder_bridge( - basic_inputs: Optional[Mapping[str, Any]] = None, - additional_inputs: Optional[Mapping[str, Any]] = None, - *, - run_analysis: bool = False, - include_live_load: bool = True, - cad_path: Optional[str] = None, - modifier_hook: Optional[Callable[[PlateGirderRunResult], Dict[str, Any]]] = None, -) -> Dict[str, Any]: - """Functional wrapper around PlateGirderBridge.""" - bridge = PlateGirderBridge( - basic_inputs=basic_inputs, - additional_inputs=additional_inputs, - modifier_hook=modifier_hook, - ) - return bridge.run( - run_analysis=run_analysis, - include_live_load=include_live_load, - cad_path=cad_path, - ).to_dict() diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py b/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py new file mode 100644 index 000000000..170e92eea --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py @@ -0,0 +1,1174 @@ + +import sys +import openseespy.opensees as ops +from pathlib import Path +from PySide6.QtWidgets import ( + QApplication, QWidget, QVBoxLayout, QHBoxLayout, + QRadioButton, QButtonGroup, QLabel, QComboBox, QCheckBox +) +from PySide6.QtWebEngineWidgets import QWebEngineView +from PySide6.QtCore import QUrl + +import xarray as xr +import numpy as np +import plotly.graph_objects as go + +from osdagbridge.core.bridge_types.plate_girder.analyser import BridgeGrillageModel + +FORCE_MAP = { + "Fx": ("Vx_i", "Vx_j"), + "Fy": ("Vy_i", "Vy_j"), + "Fz": ("Vz_i", "Vz_j"), + "Mx": ("Mx_i", "Mx_j"), + "My": ("My_i", "My_j"), + "Mz": ("Mz_i", "Mz_j"), +} + +bridge = BridgeGrillageModel() +bridge.create_model() +bridge.create_self_weight_load() +bridge.create_deck_load() +bridge.create_wearing_course_load() +bridge.create_footpath_load() +bridge.create_crash_barrier_load() +bridge.create_railing_load() +bridge.create_median_load() +bridge.analyze() + +results = bridge.model.get_results() + +# results = convert_object_to_float(girder_results) + + +LOADCASES = [ + "girder self weight", + "Deck slab load", + "Wearing course self weight", + "Footpath load", + "Crash barrier load", + "Railing load", + "Median load", +] + +ds_all = results + + +def get_ds(loadcase): + return ds_all.sel(Loadcase=loadcase) + + +# ============================================================ +# TEMP HTML (single file, overwritten) +''' +TEMP_HTML = ( + Path(__file__).resolve() + .parent.parent.parent # (file → dir → parent → parent) + / "temp_files" + / "temp_plot.html" +) +TEMP_HTML = str(TEMP_HTML) +''' + +# Base directory (same as your logic) +BASE_DIR = ( + Path(__file__).resolve() + .parent.parent.parent +) + +# Ensure temp_files directory exists +TEMP_DIR = BASE_DIR / "temp_files" +TEMP_DIR.mkdir(parents=True, exist_ok=True) + +# Final HTML file path +TEMP_HTML = TEMP_DIR / "temp_plot.html" + +# If you really need string +TEMP_HTML = str(TEMP_HTML) + +# COMMON IMPORTS (unchanged) + + +# LOAD NODES & ELEMENT CONNECTIVITY (unchanged) + + +# -------------------------------------------------- +# Extract all nodes from in-memory OpenSees model +# ................................................... +# ============================================================ +# BUILD GEOMETRY ONCE (NO FILES, NO EXEC) +# ============================================================ + +# Node coordinates +nodes = { + int(n): list(map(float, ops.nodeCoord(n))) + for n in ops.getNodeTags() +} + +# Element connectivity +members = { + int(e): list(map(int, ops.eleNodes(e))) + for e in ops.getEleTags() +} + + +# ============================================================ +# SFD (UNCHANGED) +def build_figure_sfd(ds, force_key): + def find_component(name): + for c in ds["Component"].values: + if c.lower() == name.lower(): + return c + return None + + comp_i_name, comp_j_name = FORCE_MAP[force_key] + + comp_i = find_component(comp_i_name) + comp_j = find_component(comp_j_name) + + def get_force(elem, comp): + return float(ds["forces"].sel(Element=elem, Component=comp).values) + + # GIRDER GROUPING + Z_TOL = 3 # decimals for grouping (important!) + + node_z = {} + for n in ops.getNodeTags(): + z = float(ops.nodeCoord(n)[2]) + node_z[int(n)] = round(z, Z_TOL) + from collections import defaultdict + + girders = defaultdict(list) + + for ele in ops.getEleTags(): + n1, n2 = map(int, ops.eleNodes(ele)) + + z1 = node_z[n1] + z2 = node_z[n2] + + # only longitudinal members (same Z at both ends) + if z1 == z2: + girders[z1].append(int(ele)) + + # BUILD GIRDER POLYLINES + def build_polyline(elem_list, comp_i, comp_j): + xs, ys, zs, vals, node_ids = [], [], [], [], [] + + for e in elem_list: + n1, n2 = members[e] + x1, y1, z1 = nodes[n1] + + xs.append(x1) + ys.append(y1) + zs.append(z1) + vals.append(round(get_force(e, comp_i), 3)) + node_ids.append(n1) + + # Last end node + last_e = elem_list[-1] + n1, n2 = members[last_e] + x2, y2, z2 = nodes[n2] + + xs.append(x2) + ys.append(y2) + zs.append(z2) + vals.append(round(get_force(last_e, comp_j), 3)) + node_ids.append(n2) + + return np.array(xs), np.array(ys), np.array(zs), np.array(vals), node_ids + + # ===================== 3D STEPPED SFD ===================== + + fig_sfd = go.Figure() + + # girder_spacing = 3.0 + + for i, (gid, elems) in enumerate(girders.items()): + + xs, ys, zs, vy, node_ids = build_polyline(elems, comp_i, comp_j) + + Vy = vy.astype(float) + + # use real Z from coordinates file + z_base = np.mean(zs) # or zs[0] + + if max(Vy) - min(Vy) == 0: + shear_scale = 0.1 * abs((max(xs) - min(xs)) / (max(Vy) - 0)) + + else: + shear_scale = 0.1 * abs((max(xs) - min(xs)) / (max(Vy) - min(Vy))) + + # ---------- BASELINE (GROUND) ------------- + fig_sfd.add_trace(go.Scatter3d( + x=xs, + y=[0] * len(xs), + z=zs, # [z_base] * len(xs), + mode="lines", + line=dict(color="green", width=3), + hoverinfo="skip", + showlegend=False + )) + + # ---------- STEPPED SHEAR (MOUNTAINS) ---------- + x_step = np.repeat(xs, 2)[1:-1] + Vy_step = np.repeat(Vy[:-1], 2) + + y_step = Vy_step * shear_scale + z_step = [z_base] * len(y_step) + + fig_sfd.add_trace(go.Scatter3d( + x=x_step, + y=y_step, + z=z_step, + mode="lines", + line=dict(color="blue", width=6), + hoverinfo="text", + text=[ + # f"Girder {gid}" + f"
Node {nid}" + f"
X = {x:.3f}" + f"
{force_key} = {v:.3f}" + for x, v, nid in zip(x_step, Vy_step, np.repeat(node_ids, 2)[1:-1]) + ], + showlegend=False + )) + + # ---------- VERTICAL WALLS (CLIFFS) ---------- + + for xi, vyi in zip(xs, Vy): + if xi == xs[-1]: + fig_sfd.add_trace(go.Scatter3d( + x=[xi, xi], + y=[0, -vyi * shear_scale], + z=[z_base, z_base], + mode="lines", + line=dict(color="blue", width=4), + hoverinfo="skip", + showlegend=False + + )) + # skip end nodes + else: + fig_sfd.add_trace(go.Scatter3d( + x=[xi, xi], + y=[0, vyi * shear_scale], + z=[z_base, z_base], + mode="lines", + line=dict(color="blue", width=4), + hoverinfo="skip", + showlegend=False + + )) + # fig_bmd = go.Figure() + # ------------ SUPPORT GEOMETRY ----------- + L = max(xs) - min(xs) + h = 0.0199 * L # support height + w = 0.006 * L # support half-width + r = 0.0025 * L # roller radius + # ---------- PIN SUPPORT (START NODE) ---------- + x0, z0 = xs[0], zs[0] + + fig_sfd.add_trace(go.Scatter3d( + x=[x0 - w, x0, x0 + w, x0 - w], + y=[-h, 0, -h, -h], + z=[z0, z0, z0, z0], + mode="lines", + line=dict(color="green", width=5), + showlegend=False, + hoverinfo="skip" + )) + # ===== PIN SUPPORT BASE (GROUND + HATCH) ===== + n_hatch = 6 + hatch_len = 0.15 * h + + # ground line + fig_sfd.add_trace(go.Scatter3d( + x=[x0 - 1.3 * w, x0 + 1.3 * w], + y=[-h, -h], + z=[z_base, z_base], + mode="lines", + line=dict(color="green", width=4), + showlegend=False, + hoverinfo="skip" + )) + + # hatch lines + xs_hatch = np.linspace(x0 - 1.2 * w, x0 + 1.2 * w, n_hatch) + + for xh in xs_hatch: + fig_sfd.add_trace(go.Scatter3d( + x=[xh - 0.04 * w, xh + 0.04 * w], + y=[-h, -h - hatch_len], + z=[z_base, z_base], + mode="lines", + line=dict(color="green", width=2), + showlegend=False, + hoverinfo="skip" + )) + + # --------ROLLER SUPPORT(END NODE)-------------- + x1, z1 = xs[-1], zs[-1] + + # Triangle + fig_sfd.add_trace(go.Scatter3d( + x=[x1 - w, x1, x1 + w, x1 - w], + y=[-h, 0, -h, -h], + z=[z1, z1, z1, z1], + mode="lines", + line=dict(color="green", width=5), + showlegend=False, + hoverinfo="skip" + )) + Yb = -h # base of triangle + + # Rollers (two wheels) + theta = np.linspace(0, 2 * np.pi, 60) + + for dx in [-w / 2, w / 2]: + fig_sfd.add_trace(go.Scatter3d( + x=x1 + dx + r * np.cos(theta), + y=(Yb - r) + r * np.sin(theta), # tangent to triangle base + z=[z1] * len(theta), + mode="lines", + line=dict(color="green", width=5), + showlegend=False, + hoverinfo="skip" + )) + # ===== ROLLER SUPPORT BASE (GROUND + HATCH) ===== + # ===== ROLLER SUPPORT BASE (TANGENT TO ROLLERS) ===== + n_hatch = 6 + hatch_len = 0.15 * h + + y_ground = Yb - 2 * r # tangent to roller bottom + + # ground line + fig_sfd.add_trace(go.Scatter3d( + x=[x1 - 1.3 * w, x1 + 1.3 * w], + y=[y_ground, y_ground], + z=[z_base, z_base], + mode="lines", + line=dict(color="green", width=4), + showlegend=False, + hoverinfo="skip" + )) + + # hatch lines + xs_hatch = np.linspace(x1 - 1.2 * w, x1 + 1.2 * w, n_hatch) + + for xh in xs_hatch: + fig_sfd.add_trace(go.Scatter3d( + x=[xh - 0.04 * w, xh + 0.04 * w], + y=[y_ground, y_ground - hatch_len], + z=[z_base, z_base], + mode="lines", + line=dict(color="green", width=2), + showlegend=False, + hoverinfo="skip" + )) + + fig_sfd.update_layout( + title="3D Shear Force Diagram", + scene=dict( + + xaxis=dict( + showbackground=False, showticklabels=False, title="", showspikes=False + # + + ), + yaxis=dict( + showbackground=False, showticklabels=False, title="", showspikes=False + # + ), + zaxis=dict( + showbackground=False, showticklabels=False, title="", showspikes=False, autorange="reversed" + # + + ), + + aspectmode="data", + camera=dict( + eye=dict(x=1.6, y=1.2, z=1.6), + up=dict(x=0, y=1, z=0) + ), + + ), + margin=dict(l=0, r=0, t=40, b=0) + ) + fig_sfd.write_html(TEMP_HTML, include_plotlyjs=True, full_html=True) + + +# ============================================================ +# BMD + + +def build_figure_bmd(ds, force_key): + # LOAD INTERNAL FORCES (NETCDF) + def find_component(name): + for c in ds["Component"].values: + if c.lower() == name.lower(): + return c + return None + + comp_i_name, comp_j_name = FORCE_MAP[force_key] + comp_i = find_component(comp_i_name) + comp_j = find_component(comp_j_name) + + def get_force(elem, comp): + return float(ds["forces"].sel(Element=elem, Component=comp).values) + + Z_TOL = 3 # decimals for grouping (important!) + + node_z = {} + for n in ops.getNodeTags(): + z = float(ops.nodeCoord(n)[2]) + node_z[int(n)] = round(z, Z_TOL) + from collections import defaultdict + + girders = defaultdict(list) + + for ele in ops.getEleTags(): + n1, n2 = map(int, ops.eleNodes(ele)) + + z1 = node_z[n1] + z2 = node_z[n2] + + # only longitudinal members (same Z at both ends) + if z1 == z2: + girders[z1].append(int(ele)) + + # BUILD GIRDER POLYLINES + def build_polyline(elem_list, comp_i, comp_j): + xs, ys, zs, vals, node_ids = [], [], [], [], [] + + for e in elem_list: + n1, n2 = members[e] + x1, y1, z1 = nodes[n1] + xs.append(x1) + ys.append(y1) + zs.append(z1) + vals.append(round(get_force(e, comp_i), 3)) + node_ids.append(n1) + print(f"Element list: {elem_list}") + # Last end node + last_e = elem_list[-1] + n1, n2 = members[last_e] + x2, y2, z2 = nodes[n2] + + xs.append(x2) + ys.append(y2) + zs.append(z2) + vals.append(round(get_force(last_e, comp_j), 3)) + node_ids.append(n2) + + return np.array(xs), np.array(ys), np.array(zs), np.array(vals), node_ids + + # PLOTLY 3D BMD INTERACTIVE + fig_bmd = go.Figure() + ''' + xfull=[] + mzfull =[] + for gid, elems in girders.items(): + xs, ys, zs, mz, node_ids = build_polyline(elems, Mz_i, Mz_j) + xfull.extend(xs) + mzfull.extend(mz) + diffxfull = max(xfull)-min(xfull) + diffmzfull = max(mzfull)-min(mzfull) + #factormz= abs(diffmzfull/diffxfull)*0.2 + ''' + for gid, elems in girders.items(): + xs, ys, zs, mz, node_ids = build_polyline(elems, comp_i, comp_j) + if max(mz) - min(mz) == 0: + factormz = 0.1 * abs((max(xs) - min(xs)) / (max(mz) - 0)) + + + else: + factormz = 0.1 * abs((max(xs) - min(xs)) / (max(mz) - min(mz))) + y_plot = mz * factormz # * 0.05 # moment scale + hover_text = [ + f"Node {nid}
X = {x:.3f}
{force_key} = {v:.3f}
Z = {z:.3f}" + for nid, x, v, z in zip(node_ids, xs, mz, zs) + ] + + fig_bmd.add_trace(go.Scatter3d( + x=xs, + y=y_plot, + z=zs, + mode='lines+markers', + line=dict(color="red", width=4), + marker=dict(size=3, color="red"), + # name=f"Girder {gid}", + showlegend=False, + text=hover_text, + hoverinfo="text" + )) + + # baseline + fig_bmd.add_trace(go.Scatter3d( + x=[xs[0], xs[-1]], # first and last node X + y=[0, 0], # Mz = 0 baseline + z=[zs[0], zs[0]], # same girder elevation + mode='lines', + line=dict( + color="green", + width=3, + dash='solid' + ), + showlegend=False, + hoverinfo='skip' + )) + + fig_bmd.add_trace(go.Scatter3d( + x=[xs[np.argmax(mz)], xs[np.argmax(mz)]], + y=[0, max(mz) * factormz], + z=[zs[0]] * 2, + mode="lines", + line=dict(color="black", width=3), + legendgroup="max_lines", + showlegend=False, + visible=False, # start OFF + hoverinfo="skip" + )) + + fig_bmd.add_trace(go.Scatter3d( + x=[xs[np.argmin(mz)]] * 2, + y=[0, min(mz) * factormz], + z=[zs[0]] * 2, + mode="lines", + line=dict(color="black", width=3), + legendgroup="min_lines", + showlegend=False, + visible=False, # start OFF + hoverinfo="skip" + )) + + # ------------ SUPPORT GEOMETRY ----------- + L = max(xs) - min(xs) + h = 0.0399 * L # support height + w = 0.015 * L # support half-width + r = 0.005 * L # roller radius + + # ---------- PIN SUPPORT (START NODE) ---------- + x0, z0 = xs[0], zs[0] + + fig_bmd.add_trace(go.Scatter3d( + x=[x0 - w, x0, x0 + w, x0 - w], + y=[-h, 0, -h, -h], + z=[z0, z0, z0, z0], + mode="lines", + line=dict(color="green", width=5), + showlegend=False, + hoverinfo="skip" + )) + n_hatch = 6 + hatch_len = 0.15 * h + + # ground line + fig_bmd.add_trace(go.Scatter3d( + x=[x0 - 1.3 * w, x0 + 1.3 * w], + y=[-h, -h], + z=[z0, z0], + mode="lines", + line=dict(color="green", width=4), + showlegend=False, + hoverinfo="skip" + )) + + # hatch lines + xs_hatch = np.linspace(x0 - 1.2 * w, x0 + 1.2 * w, n_hatch) + + for xh in xs_hatch: + fig_bmd.add_trace(go.Scatter3d( + x=[xh - 0.04 * w, xh + 0.04 * w], + y=[-h, -h - hatch_len], + z=[z0, z0], + mode="lines", + line=dict(color="green", width=2), + showlegend=False, + hoverinfo="skip" + )) + # --------ROLLER SUPPORT(END NODE)-------------- + x1, z1 = xs[-1], zs[-1] + + # Triangle + fig_bmd.add_trace(go.Scatter3d( + x=[x1 - w, x1, x1 + w, x1 - w], + y=[-h, 0, -h, -h], + z=[z1, z1, z1, z1], + mode="lines", + line=dict(color="green", width=5), + showlegend=False, + hoverinfo="skip" + )) + Yb = -h # base of triangle + + # Rollers (two wheels) + theta = np.linspace(0, 2 * np.pi, 60) + + for dx in [-w / 2, w / 2]: + fig_bmd.add_trace(go.Scatter3d( + x=x1 + dx + r * np.cos(theta), + y=(Yb - r) + r * np.sin(theta), # tangent to triangle base + z=[z1] * len(theta), + mode="lines", + line=dict(color="green", width=5), + showlegend=False, + hoverinfo="skip" + )) + n_hatch = 6 + hatch_len = 0.15 * h + + y_ground = Yb - 2 * r # tangent to roller bottom + + # ground line + fig_bmd.add_trace(go.Scatter3d( + x=[x1 - 1.3 * w, x1 + 1.3 * w], + y=[y_ground, y_ground], + z=[z1, z1], + mode="lines", + line=dict(color="green", width=4), + showlegend=False, + hoverinfo="skip" + )) + + # hatch lines + xs_hatch = np.linspace(x1 - 1.2 * w, x1 + 1.2 * w, n_hatch) + + for xh in xs_hatch: + fig_bmd.add_trace(go.Scatter3d( + x=[xh - 0.04 * w, xh + 0.04 * w], + y=[y_ground, y_ground - hatch_len], + z=[z1, z1], + mode="lines", + line=dict(color="green", width=2), + showlegend=False, + hoverinfo="skip" + )) + + # pad = 0.01*(max(xfull) - min(xfull)) + # pad2 = 0.01*(max(mzfull) - min(mzfull)) + + max_idx = [i for i, t in enumerate(fig_bmd.data) if t.legendgroup == "max_lines"] + min_idx = [i for i, t in enumerate(fig_bmd.data) if t.legendgroup == "min_lines"] + + fig_bmd.update_layout( + updatemenus=[ + dict( + type="buttons", + direction="right", + x=0.5, + y=1.15, + showactive=True, + active=-1, + buttons=[ + # -------- MAX TOGGLE -------- + dict( + label="MAX", + method="update", + + # OFF → ON + args=[{ + "visible": [ + True if t.legendgroup == "max_lines" else t.visible + for t in fig_bmd.data + ] + }], + + # ON → OFF + args2=[{ + "visible": [ + False if t.legendgroup == "max_lines" else t.visible + for t in fig_bmd.data + ] + }] + ), + + # -------- MIN TOGGLE -------- + dict( + label="MIN", + method="update", + + # OFF → ON + args=[{ + "visible": [ + True if t.legendgroup == "min_lines" else t.visible + for t in fig_bmd.data + ] + }], + + # ON → OFF + args2=[{ + "visible": [ + False if t.legendgroup == "min_lines" else t.visible + for t in fig_bmd.data + ] + }] + ), + ] + ) + ], + title="Interactive 3D BMD", + + scene=dict( + + camera=dict( + # eye=dict(x=2.5, y=1, z=10), # pull camera along X + up=dict(x=0, y=0.5, z=0), + # center=dict(x=0, y=0, z=0), + # projection=dict(type="orthographic") + ), + xaxis=dict( + title="girder length", + # range=[min(xfull) - pad, max(xfull) + pad], + showbackground=False, # removes YZ plane + showgrid=False, + zeroline=False, + visible=False + ), + yaxis=dict( + # range=[min(mzfull) - 0.25 * (max(mzfull) - min(mzfull)),max(mzfull) + 0.25 * (max(mzfull) - min(mzfull))], + title="Mz values", + # range = [min(mzfull)-pad2,max(mzfull)+pad2], + showbackground=True, # + backgroundcolor="rgba(200,200,200,0.15)", + showgrid=False, + zeroline=False, + visible=False # showaxis line, keep plane + ), + zaxis=dict( + showbackground=False, # removes XY plane + showgrid=False, + zeroline=False, + visible=False, + autorange="reversed" + ), + aspectmode='data', + + ), + + # legend=dict(title="Girders") + ) + + fig_bmd.write_html(TEMP_HTML, include_plotlyjs=True, full_html=True) + + +# ============================================================ +# BMD CONTOUR +def build_figure_bmd_contour(ds, force_key): + def find_component(name): + for c in ds["Component"].values: + if c.lower() == name.lower(): + return c + return None + + comp_i_name, comp_j_name = FORCE_MAP[force_key] + comp_i = find_component(comp_i_name) + comp_j = find_component(comp_j_name) + + def get_force(elem, comp): + return float(ds["forces"].sel(Element=elem, Component=comp).values) + + # ------------------------------------------------------------- + # GIRDER GROUPING + # ------------------------------------------------------------- + Z_TOL = 3 # decimals for grouping (important!) + + node_z = {} + for n in ops.getNodeTags(): + z = float(ops.nodeCoord(n)[2]) + node_z[int(n)] = round(z, Z_TOL) + from collections import defaultdict + + girders = defaultdict(list) + + for ele in ops.getEleTags(): + n1, n2 = map(int, ops.eleNodes(ele)) + + z1 = node_z[n1] + z2 = node_z[n2] + + # only longitudinal members (same Z at both ends) + if z1 == z2: + girders[z1].append(int(ele)) + + # ------------------------------------------------------------- + # BUILD GIRDER POLYLINE + # ------------------------------------------------------------- + def build_polyline(elem_list, comp_i, comp_j): + xs, ys, zs, mz, node_ids = [], [], [], [], [] + + for e in elem_list: + n1, n2 = members[e] + x1, y1, z1 = nodes[n1] + + xs.append(x1) + ys.append(y1) + zs.append(z1) + mz.append(round(get_force(e, comp_i), 3)) + node_ids.append(n1) + + last_e = elem_list[-1] + n1, n2 = members[last_e] + x2, y2, z2 = nodes[n2] + + xs.append(x2) + ys.append(y2) + zs.append(z2) + mz.append(round(get_force(last_e, comp_j), 3)) + node_ids.append(n2) + + return np.array(xs), np.array(ys), np.array(zs), np.array(mz), node_ids + + xfull, mzfull = [], [] + for elems in girders.values(): + xs, ys, zs, mz, _ = build_polyline(elems, comp_i, comp_j) + xfull.extend(xs) + mzfull.extend(mz) + + # moment_scale = 0.2 * abs(dx / dmz) # visual-only scale + + # ------------------------------------------------------------- + # FIGURE + # ------------------------------------------------------------- + fig = go.Figure() + + for gid, elems in girders.items(): + xs, ys, zs, mz, node_ids = build_polyline(elems, comp_i, comp_j) + if max(mz) - min(mz) == 0: + moment_scale = 0.1 * abs((max(xs) - min(xs)) / (max(mz) - 0)) + + else: + moment_scale = 0.1 * abs((max(xs) - min(xs)) / (max(mz) - min(mz))) + y_plot = mz * moment_scale + + # -------- CONTOUR-STYLE BMD LINE -------- + fig.add_trace(go.Scatter3d( + x=xs, + y=y_plot, + z=zs, + mode="lines", + line=dict( + width=6, + color=mz, # color by Mz + colorscale="Jet", + cmin=min(mzfull), + cmax=max(mzfull) + ), + showlegend=False, + hoverinfo="text", + text=[ + f"Node {nid}
X={x:.3f}
{force_key}={v:.3f}" + for nid, x, v in zip(node_ids, xs, mz) + ] + )) + + # -------- BASELINE (Mz = 0) -------- + fig.add_trace(go.Scatter3d( + x=[xs[0], xs[-1]], + y=[0, 0], + z=[zs[0], zs[0]], + mode="lines", + line=dict(color="green", width=3), + hoverinfo="skip", + showlegend=False + )) + + # ---------- DROPLINES FROM BASELINE TO BMD ---------- + for xi, zi, mzi in zip(xs, zs, mz): + fig.add_trace(go.Scatter3d( + x=[xi, xi], + y=[0, mzi * moment_scale], # baseline → BMD + z=[zi, zi], + mode="lines", + line=dict( + width=4, + color=[mzi, mzi], # same color as contour + colorscale="Jet", + cmin=min(mzfull), + cmax=max(mzfull) + ), + showlegend=False, + hoverinfo="skip" + )) + + # ------------ SUPPORT GEOMETRY ----------- + L = max(xs) - min(xs) + h = 0.0399 * L # support height + w = 0.015 * L # support half-width + r = 0.005 * L # roller radius + + # ---------- PIN SUPPORT (FIRST NODE) ---------- + x0, z0 = xs[0], zs[0] + + fig.add_trace(go.Scatter3d( + x=[x0 - w, x0, x0 + w, x0 - w], + y=[-h, 0, -h, -h], + z=[z0, z0, z0, z0], + mode="lines", + line=dict(color="green", width=5), + showlegend=False, + hoverinfo="skip" + )) + + # ---------- ROLLER SUPPORT (LAST NODE) ---------- + x1, z1 = xs[-1], zs[-1] + + # Triangle + fig.add_trace(go.Scatter3d( + x=[x1 - w, x1, x1 + w, x1 - w], + y=[-h, 0, -h, -h], + z=[z1, z1, z1, z1], + mode="lines", + line=dict(color="green", width=5), + showlegend=False, + hoverinfo="skip" + )) + + Yb = -h # base of triangle + theta = np.linspace(0, 2 * np.pi, 60) + + # Two rollers + for dxr in [-w / 2, w / 2]: + fig.add_trace(go.Scatter3d( + x=x1 + dxr + r * np.cos(theta), + y=(Yb - r) + r * np.sin(theta), + z=[z1] * len(theta), + mode="lines", + line=dict(color="green", width=5), + showlegend=False, + hoverinfo="skip" + )) + n_hatch = 6 + hatch_len = 0.15 * h + + # ground line + fig.add_trace(go.Scatter3d( + x=[x0 - 1.3 * w, x0 + 1.3 * w], + y=[-h, -h], + z=[z0, z0], + mode="lines", + line=dict(color="green", width=4), + showlegend=False, + hoverinfo="skip" + )) + + # hatch lines + xs_hatch = np.linspace(x0 - 1.2 * w, x0 + 1.2 * w, n_hatch) + + for xh in xs_hatch: + fig.add_trace(go.Scatter3d( + x=[xh - 0.04 * w, xh + 0.04 * w], + y=[-h, -h - hatch_len], + z=[z0, z0], + mode="lines", + line=dict(color="green", width=2), + showlegend=False, + hoverinfo="skip" + )) + + y_ground = Yb - 2 * r # tangent to roller bottom + + # ground line + fig.add_trace(go.Scatter3d( + x=[x1 - 1.3 * w, x1 + 1.3 * w], + y=[y_ground, y_ground], + z=[z1, z1], + mode="lines", + line=dict(color="green", width=4), + showlegend=False, + hoverinfo="skip" + )) + + # hatch lines + xs_hatch = np.linspace(x1 - 1.2 * w, x1 + 1.2 * w, n_hatch) + + for xh in xs_hatch: + fig.add_trace(go.Scatter3d( + x=[xh - 0.04 * w, xh + 0.04 * w], + y=[y_ground, y_ground - hatch_len], + z=[z1, z1], + mode="lines", + line=dict(color="green", width=2), + showlegend=False, + hoverinfo="skip" + )) + + # LAYOUT (POST-PROCESSOR STYLE) + + fig.update_layout( + title="3D Bending Moment Diagram Contour View", + + scene=dict( + + camera=dict( + # eye=dict(x=2.5, y=0.15, z=10), # 👈 pull camera along X + up=dict(x=0, y=1, z=0), + # center=dict(x=0, y=0, z=0), + # projection=dict(type="orthographic") + ), + xaxis=dict( + title="girder length", + # range=[min(xfull) - pad, max(xfull) + pad], + showbackground=False, # removes YZ plane + showgrid=False, + zeroline=False, + visible=False + ), + yaxis=dict( + # range=[min(mzfull) - 0.25 * (max(mzfull) - min(mzfull)),max(mzfull) + 0.25 * (max(mzfull) - min(mzfull))], + title="Mz values", + # range = [min(mzfull)-pad2,max(mzfull)+pad2], + showbackground=True, # + backgroundcolor="rgba(200,200,200,0.15)", + showgrid=False, + zeroline=False, + visible=False # showaxis line, keep plane + ), + zaxis=dict( + showbackground=False, # removes XY plane + showgrid=False, + zeroline=False, + visible=False, + autorange="reversed" + ), + aspectmode='data', + + ), + ) + + fig.write_html(TEMP_HTML, include_plotlyjs=True, full_html=True) + + +# ============================================================ +# ====================== QT WIDGET +''' +class PlotWidget(QWidget): + + def __init__(self): + super().__init__() + self.setWindowTitle("Plate Girder Plots") + + layout = QVBoxLayout(self) + + top = QHBoxLayout() + self.sfd = QRadioButton("SFD") + self.bmd = QRadioButton("BMD") + self.contour = QRadioButton("BMD Contour") + + self.sfd.setChecked(True) + + group = QButtonGroup(self) + group.setExclusive(True) + group.addButton(self.sfd) + group.addButton(self.bmd) + group.addButton(self.contour) + group.buttonClicked.connect(self.update_plot) + + top.addWidget(self.sfd) + top.addWidget(self.bmd) + top.addWidget(self.contour) + + self.web = QWebEngineView() + + layout.addLayout(top) + layout.addWidget(self.web) + + self.update_plot(self.sfd) + + def update_plot(self, btn): + if btn == self.sfd: + build_figure_sfd() + elif btn == self.bmd: + build_figure_bmd() + else: + build_figure_bmd_contour() + + self.web.load(QUrl.fromLocalFile(TEMP_HTML)) +''' + + +# ====================== QT WIDGET +# ============================================================ +class PlotWidget(QWidget): + + def __init__(self): + super().__init__() + self.setWindowTitle("Plate Girder Results") + + layout = QVBoxLayout(self) + + top = QHBoxLayout() + + # ---------- LOADCASE ---------- + top.addWidget(QLabel("Load case:")) + + self.combo = QComboBox() + self.combo.addItems(LOADCASES) + self.combo.currentTextChanged.connect(self.update_plot) + top.addWidget(self.combo) + + # ---------- FORCE ---------- + top.addWidget(QLabel("Force:")) + + self.force_combo = QComboBox() + self.force_combo.addItems(list(FORCE_MAP.keys())) + self.force_combo.setCurrentText("Fy") + self.force_combo.currentTextChanged.connect(self.update_plot) + top.addWidget(self.force_combo) + + # ---------- CONTOUR ---------- + self.contour = QCheckBox("Contour (Moments only)") + self.contour.stateChanged.connect(self.update_plot) + top.addWidget(self.contour) + + top.addStretch() + + self.web = QWebEngineView() + + layout.addLayout(top) + layout.addWidget(self.web) + + self.update_plot() + + def update_plot(self): + loadcase = self.combo.currentText() + force_key = self.force_combo.currentText() + + ds = get_ds(loadcase) + + # -------- FORCE TYPE -------- + is_force = force_key.startswith("F") # Fx, Fy, Fz + is_moment = force_key.startswith("M") # Mx, My, Mz + + # -------- UI LOGIC -------- + if is_force: + # Forces → SFD, contour disabled + self.contour.blockSignals(True) + self.contour.setChecked(False) + self.contour.setEnabled(False) + self.contour.blockSignals(False) + + build_figure_sfd(ds, force_key) + + elif is_moment: + # Moments → BMD (+ optional contour) + self.contour.setEnabled(True) + + if self.contour.isChecked(): + build_figure_bmd_contour(ds, force_key) + else: + build_figure_bmd(ds, force_key) + + else: + raise ValueError(f"Unsupported force: {force_key}") + + # -------- UPDATE VIEW -------- + self.web.load(QUrl.fromLocalFile(TEMP_HTML)) + + +# ======================= MAIN +if __name__ == "__main__": + app = QApplication(sys.argv) + w = PlotWidget() + w.resize(1200, 800) + w.show() + sys.exit(app.exec()) + sys.exit(app.exec()) From ba5f3bc23a68ffef2e7343eb43b149b238e67c3e Mon Sep 17 00:00:00 2001 From: Manav Sharma Date: Mon, 16 Feb 2026 13:56:18 +0530 Subject: [PATCH 059/225] Modified the code to get the result for every LoadCase --- .../bridge_types/plate_girder/analyser.py | 198 +++++------ .../plate_girder/analysis_results.py | 309 +++++++++++++++--- 2 files changed, 344 insertions(+), 163 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 2385cbc9c..fda4c9938 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -18,45 +18,45 @@ def __init__(self): ) self.concrete_custom = og.create_material( - material="concrete", E=50 * GPa, v=0.3, rho=24 * kN / m**3 + material="concrete", E=50 * GPa, v=0.3, rho=24 * kN / m ** 3 ) # -------------------- SECTIONS -------------------- self.edge_longitudinal_section = og.create_section( - A=0.934 * m**2, - J=0.1857 * m**3, - Iz=0.3478 * m**4, - Iy=0.213602 * m**4, - Az=0.444795 * m**2, - Ay=0.258704 * m**2, + A=0.934 * m ** 2, + J=0.1857 * m ** 3, + Iz=0.3478 * m ** 4, + Iy=0.213602 * m ** 4, + Az=0.444795 * m ** 2, + Ay=0.258704 * m ** 2, ) self.longitudinal_section = og.create_section( - A=1.025 * m**2, - J=0.1878 * m**3, - Iz=0.3694 * m**4, - Iy=0.3634 * m**4, - Az=0.4979 * m**2, - Ay=0.309 * m**2, + A=1.025 * m ** 2, + J=0.1878 * m ** 3, + Iz=0.3694 * m ** 4, + Iy=0.3634 * m ** 4, + Az=0.4979 * m ** 2, + Ay=0.309 * m ** 2, ) self.transverse_section = og.create_section( - A=0.504 * m**2, - J=5.22303e-3 * m**3, - Iy=0.32928 * m**4, - Iz=1.3608e-3 * m**4, - Ay=0.42 * m**2, - Az=0.42 * m**2, + A=0.504 * m ** 2, + J=5.22303e-3 * m ** 3, + Iy=0.32928 * m ** 4, + Iz=1.3608e-3 * m ** 4, + Ay=0.42 * m ** 2, + Az=0.42 * m ** 2, unit_width=True, ) self.end_transverse_section = og.create_section( - A=0.504 / 2 * m**2, - J=2.5012e-3 * m**3, - Iy=0.04116 * m**4, - Iz=0.6804e-3 * m**4, - Ay=0.21 * m**2, - Az=0.21 * m**2, + A=0.504 / 2 * m ** 2, + J=2.5012e-3 * m ** 3, + Iy=0.04116 * m ** 4, + Iz=0.6804e-3 * m ** 4, + Ay=0.21 * m ** 2, + Az=0.21 * m ** 2, ) # -------------------- GRILLAGE MEMBERS -------------------- @@ -93,7 +93,7 @@ def __init__(self): # placeholder for self weight load case created later self.self_weight_load_case = None - + # self.geometry = GeometryDefinitions(self.L, self.w, self.model) # -------------------- GEOMETRY / LAYOUT -------------------- @@ -101,24 +101,21 @@ def __init__(self): self.bridge_geometry = None self.load_manager = None - - - # ============================================================ # CREATE THE GRILLAGE MODEL # ============================================================ - def create_model(self): - + def create_model(self): + # ------------------------------------------------- # Create cross-section layout (UI inputs) # ------------------------------------------------- self.layout = CrossSectionLayout( - carriageway_width=10.0, # TODO: get from UI - crash_barrier_width=0.45, # TODO: get from UI - footpath_width=1.50, # TODO: get from UI - railing_width=0.30, # TODO: get from UI - median_width=0.0, # TODO: get from UI - no_of_footpaths=2, # TODO: get from UI + carriageway_width=10.0, # TODO: get from UI + crash_barrier_width=0.45, # TODO: get from UI + footpath_width=1.50, # TODO: get from UI + railing_width=0.30, # TODO: get from UI + median_width=0.0, # TODO: get from UI + no_of_footpaths=2, # TODO: get from UI ) # ------------------------------------------------- @@ -145,7 +142,6 @@ def create_model(self): # ------------------------------------------------- self.w = self.bridge_geometry.width - self.model = og.create_grillage( bridge_name="Osdag Bridge", long_dim=self.L, @@ -200,7 +196,7 @@ def create_self_weight_load(self, model=None, L=None): raise ValueError("Model is not available. Create model before adding loads.") L = L or self.L - + start_beam = 0 end_beam = L beam_mag = 22.4 * kN / 1.0 # kN/m @@ -219,8 +215,8 @@ def create_self_weight_load(self, model=None, L=None): ) DL_self_weight.add_load(line_load) - - #store reference on the instance + + # store reference on the instance self.self_weight_load_case = DL_self_weight model.add_load_case(DL_self_weight) @@ -240,7 +236,7 @@ def create_deck_load(self, model=None): # ------------------------------------------------- # Load magnitude (UDL over area) # ------------------------------------------------- - deck_mag = 25.0 * kN / (1.0 ** 2) # <-- update as per slab + wearing course if needed + deck_mag = 25.0 * kN / (1.0 ** 2) # <-- update as per slab + wearing course if needed # ------------------------------------------------- # Get geometry from load manager @@ -301,7 +297,7 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0): # L = L or self.L # w = w or self.w - overlay_mag = 4.32 * kN / (1.0**2) + overlay_mag = 4.32 * kN / (1.0 ** 2) # -------------------------------- # Get geometry from geometry module @@ -343,7 +339,7 @@ def create_wearing_course_load(self, model=None, edge_clearance=0.0): self.overlay_load_case = DL_overlay return DL_overlay - + def create_footpath_load(self, model=None): """ Creates footpath patch loads on both sides of the bridge. @@ -363,7 +359,7 @@ def create_footpath_load(self, model=None): # ------------------------------------------------- # Load magnitude (UDL over area) # ------------------------------------------------- - footpath_mag = 5.00 * kN / (1.0 ** 2) # <-- update as per IRC value + footpath_mag = 5.00 * kN / (1.0 ** 2) # <-- update as per IRC value # ------------------------------------------------- # Create load case @@ -474,7 +470,6 @@ def create_crash_barrier_load(self, model=None): return DL_barrier - def create_railing_load(self, model=None): """ Creates railing line loads on both sides of the bridge. @@ -485,7 +480,7 @@ def create_railing_load(self, model=None): model = model or self.model if model is None: raise ValueError("Model is not available. Create model before adding loads.") - + # If there is no railing component in the layout, skip creating railing load if not self.layout.has_component("railing_left") or not self.layout.has_component("railing_right"): warnings.warn("No railing component in layout; skipping railing load creation") @@ -495,7 +490,7 @@ def create_railing_load(self, model=None): # ------------------------------------------------- # Load magnitude (UDL along length) # ------------------------------------------------- - railing_udl = 1.50 * kN / m # <-- update if code value differs + railing_udl = 1.50 * kN / m # <-- update if code value differs # ------------------------------------------------- # Create load case @@ -551,7 +546,7 @@ def create_median_load(self, model=None): # ------------------------------------------------- # Load magnitude (UDL along length) # ------------------------------------------------- - median_udl = 4.00 * kN / m # <-- update as per IRC / project data + median_udl = 4.00 * kN / m # <-- update as per IRC / project data # If there is no median component in the layout, skip creating median load if not self.layout.has_component("median"): @@ -596,7 +591,6 @@ def create_median_load(self, model=None): return DL_median - # ============================================================ # Live Load # ============================================================ @@ -716,7 +710,7 @@ def vehicle_lane_coordinates(self): result_cases.append(case_data) - print(f"Vehicle lane coordinate cases: {result_cases}") + # print(f"Vehicle lane coordinate cases: {result_cases}") return result_cases def create_vehicle_load_cases(self, model=None): @@ -746,7 +740,6 @@ def create_vehicle_load_cases(self, model=None): for vehicle_type, coord_list in combinations.items(): for lane_index, (x_coord, z_coord) in enumerate(coord_list, start=1): - # --------------------------------------- # Create vehicle # --------------------------------------- @@ -771,14 +764,13 @@ def create_vehicle_load_cases(self, model=None): all_vehicle_load_cases.append(lc) - print(f"Created load case: {load_case_name}") + # print(f"Created load case: {load_case_name}") self.vehicle_load_cases_list = all_vehicle_load_cases return all_vehicle_load_cases - - def add_vehicle_load_cases_from_combinations(self,model=None): + def add_vehicle_load_cases_from_combinations(self, model=None): """ Create vehicle load cases using coordinates from vehicle_lane_coordinates(). @@ -793,7 +785,7 @@ def add_vehicle_load_cases_from_combinations(self,model=None): raise ValueError("Model not created yet.") vehicle_cases = self.vehicle_lane_coordinates() - + alf = [1.0, 0.8, 0.4] dla = 1.3 # ------------------------------------------------- @@ -814,7 +806,7 @@ def add_vehicle_load_cases_from_combinations(self,model=None): # ----------------------------- # Create load case name # ----------------------------- - lc_name = f"Case{case_num} {vehicle_type} L{i+1}" + lc_name = f"Case{case_num} {vehicle_type} L{i + 1}" lc = og.create_load_case(name=lc_name) # ----------------------------- @@ -864,17 +856,17 @@ def add_vehicle_load_cases_from_combinations(self,model=None): self.vehicle_load_cases_list.append(lc) self.vehicle_moving_loads.append(vehicle) - print( - f"Created {lc_name} at x={x_coord}, z={z_coord}" - ) + # print( + # f"Created {lc_name} at x={x_coord}, z={z_coord}" + # ) return self.vehicle_load_cases_list def create_moving_vehicle_load_cases( - self, - model=None, - start_offset=-25.0, - span=None, + self, + model=None, + start_offset=-25.0, + span=None, ): """ Creates moving load cases corresponding to @@ -907,7 +899,6 @@ def create_moving_vehicle_load_cases( self.moving_load_cases_list = [] for i, vehicle in enumerate(self.vehicle_moving_loads): - # Use static load case name static_lc_name = self.vehicle_load_cases_list[i].name @@ -922,11 +913,10 @@ def create_moving_vehicle_load_cases( self.moving_load_cases_list.append(moving_load) - print(f"Created moving load case: {moving_name}") + # print(f"Created moving load case: {moving_name}") return self.moving_load_cases_list - def vehicle_combination(self, carriageway_width=None): """ Generate all ordered vehicle placement sequences for design lanes determined @@ -991,15 +981,15 @@ def _build(remaining_lanes, current_seq): return sequences def add_vehicle_load_with_moving_path( - self, - model=None, - vehicle_type="CLASS70R", - load_case_name="Class 70R", - x_coord=0.0, - z_coord=0.0, - spacing=1.5, - span=None, - y_coord=0.0, + self, + model=None, + vehicle_type="CLASS70R", + load_case_name="Class 70R", + x_coord=0.0, + z_coord=0.0, + spacing=1.5, + span=None, + y_coord=0.0, ): """ Adds a vehicle load (static + moving) to the grillage model. @@ -1086,29 +1076,14 @@ def analyze(self, model=None): model.analyze() - # results = model.get_results(load_case=['girder self weight', 'Deck slab load', 'Wearing course self weight', - # 'Footpath load', 'Crash barrier load', 'Railing load', 'Median load']) + # Get ALL loadcases results = model.get_results() - print("results") - print(results) - - forces_table = results.forces - Fy = forces_table.sel(Component = "Mz_i") - print(Fy) - df = Fy.to_pandas() - df.to_excel("Mz_results_moving1.xlsx") - - results = model.get_results( - load_case=[ - "girder self weight", - "Deck slab load", - "Wearing course self weight", - "Footpath load", - "Crash barrier load", - "Railing load", - "Median load" - ] - ) + + # ✅ DEBUG: Show all detected loadcases + # print(results.coords["Loadcase"].values) + + # print("Results dataset:") + # print(results) self.dataset = results @@ -1124,11 +1099,11 @@ def plot(self, model=None): ext_beam_nodes = model.get_element(member="exterior_main_beam_1", options="nodes") - max_def = max(results.displacements.sel(Loadcase=load_case_of_interest,Component="dy",Node=ext_beam_nodes[0])) - max_report_def = f"The maximum deflection = {max_def.values*1000:.2f} mm" - + max_def = max(results.displacements.sel(Loadcase=load_case_of_interest, Component="dy", Node=ext_beam_nodes[0])) + max_report_def = f"The maximum deflection = {max_def.values * 1000:.2f} mm" + # Plot deflection - og.plot_defo(model, results, member="exterior_main_beam_1", option="nodes",loadcase=load_case_of_interest) + og.plot_defo(model, results, member="exterior_main_beam_1", option="nodes", loadcase=load_case_of_interest) og.plt.title(max_report_def) og.plt.show() @@ -1136,7 +1111,7 @@ def plot(self, model=None): static_lc_result = model.get_results(load_case=['Deck slab load']) print("static_lc_result") print(static_lc_result) - + static_lc_forces = static_lc_result.forces # Select a specific load case from result @@ -1146,20 +1121,20 @@ def plot(self, model=None): member_name = "exterior_main_beam_1" # get the tag of elements and nodes - ext_beam_elements = model.get_element(member=member_name, options="elements",) + ext_beam_elements = model.get_element(member=member_name, options="elements", ) print(f"The element tags for Beam 1 is {ext_beam_elements}") # extract maximum bending moment from beam 1(member_name) from static_lc_result - max_bending = max(static_lc_forces.sel(Component="Mz_i",Element=ext_beam_elements)).values/1000 - print(f" Maximum bending moment = {max_bending:.2f} kNm") + max_bending = max(static_lc_forces.sel(Component="Mz_i", Element=ext_beam_elements)).values / 1000 + print(f" Maximum bending moment = {max_bending:.2f} kNm") # ------------------------------------------------------------------------------ # Plotting # ------------------------------------------------------------------------------ # Plot BMD and SFD (change component as needed) - load_case_of_interest = load_case_name - og.plot_force(model, results, member="exterior_main_beam_1",component="Mz",loadcase=load_case_of_interest) + load_case_of_interest = load_case_name + og.plot_force(model, results, member="exterior_main_beam_1", component="Mz", loadcase=load_case_of_interest) max_report_bending = f"Maximum bending moment = {max_bending:.2f} kNm" @@ -1167,7 +1142,6 @@ def plot(self, model=None): og.plt.show() - # ============================================================ # USAGE EXAMPLE # ============================================================ @@ -1188,10 +1162,6 @@ def plot(self, model=None): bridge.create_vehicle_load_cases() bridge.add_vehicle_load_cases_from_combinations() bridge.create_moving_vehicle_load_cases() - bridge.analyze() - # bridge.plot() - bridge.plot() - # bridge.analyze() # bridge.plot() results = bridge.analyze() @@ -1200,6 +1170,8 @@ def plot(self, model=None): dataset=results, model=bridge.model ) + # result_handler.debug_loadcase_detection() result_handler.run_interactive_viewer() + # result_handler.print_moving_load_trace() diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index 87464c4fb..40376f9c9 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -16,15 +16,14 @@ class PlateGirderAnalysisResults: # ======================================================== # INITIALIZATION # ======================================================== - def __init__(self, dataset, model): #storing analysis result + def __init__(self, dataset, model): # storing analysis result self.ds = dataset self.model = model - # ======================================================== # DATASET BASED RESULTS (FORCES / MOMENTS) # ======================================================== - def get_beam_element_results(self, element_ids, loadcase, component): #reads beam force and moment + def get_beam_element_results(self, element_ids, loadcase, component): # reads beam force and moment results = {} @@ -42,10 +41,53 @@ def get_beam_element_results(self, element_ids, loadcase, component): return results - - def get_available_loadcases(self): #get loadcases + def get_available_loadcases(self): # get loadcases return list(self.ds.coords["Loadcase"].values) + # ======================================================== + # LOADCASE CLASSIFICATION + def classify_loadcases(self): + + all_lc = self.get_available_loadcases() + + vehicle_static = [] + vehicle_moving = [] + dead_loads = [] + + for lc in all_lc: + + name = str(lc).lower() + + # ----------------------------- + # MOVING VEHICLES + # ----------------------------- + if "moving" in name: + vehicle_moving.append(lc) + continue + + # ----------------------------- + # STATIC VEHICLES + # Detect your naming pattern + # ----------------------------- + if name.startswith("case"): + vehicle_static.append(lc) + continue + + if "classa" in name or "70r" in name: + vehicle_static.append(lc) + continue + + # ----------------------------- + # DEAD LOADS + # ----------------------------- + dead_loads.append(lc) + + return { + "all": all_lc, + "dead": dead_loads, + "vehicle_static": vehicle_static, + "vehicle_moving": vehicle_moving, + } # ======================================================== # OPENSEES NODAL DEFLECTION (FINAL STATE) @@ -86,11 +128,10 @@ def get_available_loadcases(self): # # return disp - # ======================================================== # GRILLAGE CONNECTIVITY # ======================================================== - def build_grillage_connectivity(self): #connectivity between nodes[raph for bfs] + def build_grillage_connectivity(self): # connectivity between nodes[raph for bfs] nodes = {} for n in ops.getNodeTags(): @@ -113,7 +154,6 @@ def build_grillage_connectivity(self): #connectivity between nodes[raph return nodes, elements, adj - # ======================================================== # BFS SHORTEST PATH # ======================================================== @@ -162,7 +202,7 @@ def get_elements_along_path(self, path, elements): # PATH LENGTH COMPUTATION # ======================================================== def compute_path_distance(self, nodes, path): - # calculate girder length + # calculate girder length dist = 0.0 for i in range(len(path) - 1): x1, y1, z1 = nodes[path[i]] @@ -242,41 +282,157 @@ def build_girders(self, verbose=True): return girder_map, elements # ======================================================== - # PRINT SINGLE GIRDER (FORMATTED) + # PRINT MOVING LOAD TRACE # ======================================================== - def print_single_girder(self, girder_key): + def print_moving_load_trace(self, load_case_filter=None, girder_filter=None, element_filter=None): """ - Prints one girder in formatted report style. + Prints the BMD and SFD for every point (element) when cars are moving. + Iterates through all moving load cases and all girders. - Example input: - g1 - g2 - g3 + :param load_case_filter: (str or list) Print only load cases containing this string(s). + :param girder_filter: (str or list) Print only girders matching this name(s) (e.g. "g1"). + :param element_filter: (int or list) Print only specific element IDs. """ - girder_map, _ = self.build_girders() + # Helper to normalize input to list + def to_list(val): + if val is None: return None + return [val] if not isinstance(val, (list, tuple)) else val + + lc_filter = to_list(load_case_filter) + g_filter = to_list(girder_filter) + e_filter = to_list(element_filter) + + # 1. Classify loadcases to find moving ones + lc_groups = self.classify_loadcases() + moving_lcs = lc_groups["vehicle_moving"] - if girder_key not in girder_map: - print("❌ Girder not found") + if not moving_lcs: + print("❌ No moving load cases found.") return - girder = girder_map[girder_key] + # 2. Build girders + girder_map, _ = self.build_girders(verbose=False) - print("----------------------------------------") - print(f"Girder {girder_key}") - print("----------------------------------------") + print("\n================ MOVING LOAD TRACE ================") + + # 3. Iterate through moving load cases + for lc in moving_lcs: + # Apply load case filter + if lc_filter: + # Check if ANY of the filter strings are in the load case name + if not any(str(f) in lc for f in lc_filter): + continue + + print(f"\n>>> Load Case: {lc}") + + # 4. Iterate through girders + for girder_name, girder_data in girder_map.items(): + # Apply girder filter + if g_filter and girder_name not in g_filter: + continue + + print(f" --- Girder: {girder_name} ---") + print( + f" {'Element':<10} | {'Vy_i (kN)':<12} | {'Vy_j (kN)':<12} | {'Mz_i (kNm)':<12} | {'Mz_j (kNm)':<12}") + print(" " + "-" * 70) + + elements = girder_data["elements"] + + # Filter elements if requested + if e_filter: + elements = [e for e in elements if e in e_filter] + if not elements: + continue # Skip if no elements match + + # 5. Get results for this girder and loadcase + # Retrieve all required components at once for efficiency + try: + # Using dataset directly for speed scaling with multiple elements + # Select specific loadcase and elements + subset = self.ds.sel(Loadcase=lc, Element=elements) + + # Extract values + vy_i = subset.sel(Component="Vy_i")["forces"].values + vy_j = subset.sel(Component="Vy_j")["forces"].values + mz_i = subset.sel(Component="Mz_i")["forces"].values + mz_j = subset.sel(Component="Mz_j")["forces"].values + + # 6. Print results for each element + for idx, eid in enumerate(elements): + print( + f" {eid:<10} | {vy_i[idx]:<12.3f} | {vy_j[idx]:<12.3f} | {mz_i[idx]:<12.3f} | {mz_j[idx]:<12.3f}") + + except Exception as e: + print(f" ❌ Error retrieving results for girder {girder_name}: {e}") + + print("\n===================================================") + + # ======================================================== + # PRINT VEHICLE ENVELOPES + # ======================================================== + def print_envelopes(self, load_case_filter=None, girder_filter=None): + """ + Calculates and prints the max/min values for SFD and BMD for every moving load case position. + """ - print(f"Start node : {girder['start']}") - print(f"End node : {girder['end']}") - print(f"Path : {girder['path']}") - print(f"Elements : {girder['elements']}") + def to_list(val): + if val is None: return None + return [val] if not isinstance(val, (list, tuple)) else val - print("\nElement connectivity:") - for eid, n1, n2 in girder["element_map"]: - print(f"{eid:<5}: {n1} -> {n2}") + lc_filter = to_list(load_case_filter) + g_filter = to_list(girder_filter) + + lc_groups = self.classify_loadcases() + moving_lcs = lc_groups["vehicle_moving"] + + if not moving_lcs: + print("❌ No moving load cases found.") + return + + if lc_filter: + moving_lcs = [lc for lc in moving_lcs if any(str(f) in lc for f in lc_filter)] + if not moving_lcs: + print("❌ No moving load cases match the filter.") + return + + girder_map, _ = self.build_girders(verbose=False) + + print("\n================ VEHICLE ENVELOPES (PER POSITION) ================") + + for lc in moving_lcs: + print(f"\n>>> Load Case: {lc}") + print( + f"{'Girder':<10} | {'Max Vy (kN)':<12} | {'Min Vy (kN)':<12} | {'Max Mz (kNm)':<12} | {'Min Mz (kNm)':<12}") + print("-" * 75) + + for girder_name, girder_data in girder_map.items(): + if g_filter and girder_name not in g_filter: + continue + + elements = girder_data["elements"] + + try: + # Select ONLY this loadcase and elements for this girder + subset = self.ds.sel(Loadcase=lc, Element=elements) + + # Get max/min across elements and both i/j components for this specific loadcase + vy_max = max(subset.sel(Component="Vy_i")["forces"].max().values, + subset.sel(Component="Vy_j")["forces"].max().values) + vy_min = min(subset.sel(Component="Vy_i")["forces"].min().values, + subset.sel(Component="Vy_j")["forces"].min().values) + mz_max = max(subset.sel(Component="Mz_i")["forces"].max().values, + subset.sel(Component="Mz_j")["forces"].max().values) + mz_min = min(subset.sel(Component="Mz_i")["forces"].min().values, + subset.sel(Component="Mz_j")["forces"].min().values) + + print( + f"{girder_name:<10} | {float(vy_max):<12.3f} | {float(vy_min):<12.3f} | {float(mz_max):<12.3f} | {float(mz_min):<12.3f}") + except Exception as e: + print(f"{girder_name:<10} | ❌ Error: {e}") + + print("\n===================================================================") - print(f"\nLength : {girder['length']:.3f} m") - print("----------------------------------------") def run_interactive_viewer(self): while True: @@ -284,7 +440,9 @@ def run_interactive_viewer(self): print("\n==============================") print("Select Option:") print("1. Show girder paths (BFS)") - print("2. Show analysis results") + print("2. Show Analysis Result") + print("3. Show moving load trace") + print("4. Show max/min envelopes") print("0. Exit") print("==============================") @@ -330,7 +488,6 @@ def run_interactive_viewer(self): continue - # ====================================================== # OPTION 2 → EXISTING RESULT VIEWER # ====================================================== @@ -425,22 +582,6 @@ def run_interactive_viewer(self): comp = component_map[r] - # ---------------- DEFLECTION ---------------- - # if comp in ["Dx", "Dy", "Dz"]: - # - # direction = comp[-1].lower() - # - # disp = self.get_deflection_per_loadcase( - # girder_nodes, lc, direction - # ) - # - # print(f"\nDeflection ({comp}) | {lc}") - # print("--------------------------------") - # for n, v in disp.items(): - # print(f"Node {n}: {v}") - # print("--------------------------------") - # continue - # ---------------- FORCES ---------------- res = self.get_beam_element_results( girder_elements, lc, comp @@ -452,5 +593,73 @@ def run_interactive_viewer(self): continue + + elif main_choice == "3": + print("\n--- Moving Load Trace Configuration ---") + + # Get moving load cases + lc_groups = self.classify_loadcases() + moving_lcs = lc_groups["vehicle_moving"] + + if not moving_lcs: + print("❌ No moving load cases found.") + continue + + # Show available girders + girder_map, _ = self.build_girders(verbose=False) + print("\nAvailable Girders:") + for g in girder_map.keys(): + print(f" - {g}") + + g_input = input("Enter Girder Name (or leave blank for all): ").strip() + if not g_input: + g_input = None + + # Show available moving load cases + print("\nAvailable Moving Load Cases:") + # Group by case type for better readability + case_types = {} + for lc in moving_lcs: + # Extract case type (e.g., "Case1 ClassA" from "Moving Case1 ClassA L1 at...") + parts = lc.split() + if len(parts) >= 3: + case_type = f"{parts[1]} {parts[2]}" # e.g., "Case1 ClassA" + if case_type not in case_types: + case_types[case_type] = [] + case_types[case_type].append(lc) + + for case_type in sorted(case_types.keys()): + print(f" - {case_type} ({len(case_types[case_type])} positions)") + + print("\nEnter Load Case Filter (e.g., 'Case1', 'ClassA', 'Case2 Class70R')") + lc_input = input("Filter (or leave blank for all): ").strip() + if not lc_input: + lc_input = None + + print("\n") + self.print_moving_load_trace(load_case_filter=lc_input, girder_filter=g_input) + + continue + + elif main_choice == "4": + print("\n--- Envelope Configuration ---") + + # Show available girders + girder_map, _ = self.build_girders(verbose=False) + print("\nAvailable Girders:") + for g in girder_map.keys(): + print(f" - {g}") + + g_input = input("Enter Girder Name (or leave blank for all): ").strip() + if not g_input: + g_input = None + + lc_input = input("Enter Load Case Filter (or leave blank for all): ").strip() + if not lc_input: + lc_input = None + + self.print_envelopes(load_case_filter=lc_input, girder_filter=g_input) + continue + else: print("❌ Invalid option") From 97ba49179c323259bdb1128d63ed19a320c450d9 Mon Sep 17 00:00:00 2001 From: Manav Sharma Date: Mon, 16 Feb 2026 14:23:46 +0530 Subject: [PATCH 060/225] Added Elements to the Final Output Table --- .../plate_girder/analysis_results.py | 64 ++++++++++++++----- 1 file changed, 48 insertions(+), 16 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index 40376f9c9..b87a824e0 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -402,9 +402,8 @@ def to_list(val): for lc in moving_lcs: print(f"\n>>> Load Case: {lc}") - print( - f"{'Girder':<10} | {'Max Vy (kN)':<12} | {'Min Vy (kN)':<12} | {'Max Mz (kNm)':<12} | {'Min Mz (kNm)':<12}") - print("-" * 75) + print(f"{'Girder':<8} | {'Ele':<8} | {'Max Vy (kN)':>12} | {'Min Vy (kN)':>12} | {'Max Mz (kNm)':>12} | {'Min Mz (kNm)':>12}") + print("-" * 90) for girder_name, girder_data in girder_map.items(): if g_filter and girder_name not in g_filter: @@ -416,20 +415,53 @@ def to_list(val): # Select ONLY this loadcase and elements for this girder subset = self.ds.sel(Loadcase=lc, Element=elements) - # Get max/min across elements and both i/j components for this specific loadcase - vy_max = max(subset.sel(Component="Vy_i")["forces"].max().values, - subset.sel(Component="Vy_j")["forces"].max().values) - vy_min = min(subset.sel(Component="Vy_i")["forces"].min().values, - subset.sel(Component="Vy_j")["forces"].min().values) - mz_max = max(subset.sel(Component="Mz_i")["forces"].max().values, - subset.sel(Component="Mz_j")["forces"].max().values) - mz_min = min(subset.sel(Component="Mz_i")["forces"].min().values, - subset.sel(Component="Mz_j")["forces"].min().values) - - print( - f"{girder_name:<10} | {float(vy_max):<12.3f} | {float(vy_min):<12.3f} | {float(mz_max):<12.3f} | {float(mz_min):<12.3f}") + # --- Vy Envelope --- + vy_i = subset.sel(Component="Vy_i")["forces"] + vy_j = subset.sel(Component="Vy_j")["forces"] + + mxi, mxj = float(vy_i.max()), float(vy_j.max()) + if mxi >= mxj: + v_max, v_max_e = mxi, int(vy_i.idxmax()) + else: + v_max, v_max_e = mxj, int(vy_j.idxmax()) + + mni, mnj = float(vy_i.min()), float(vy_j.min()) + if mni <= mnj: + v_min, v_min_e = mni, int(vy_i.idxmin()) + else: + v_min, v_min_e = mnj, int(vy_j.idxmin()) + + # --- Mz Envelope --- + mz_i = subset.sel(Component="Mz_i")["forces"] + mz_j = subset.sel(Component="Mz_j")["forces"] + + mmxi, mmxj = float(mz_i.max()), float(mz_j.max()) + if mmxi >= mmxj: + m_max, m_max_e = mmxi, int(mz_i.idxmax()) + else: + m_max, m_max_e = mmxj, int(mz_j.idxmax()) + + mmni, mmnj = float(mz_i.min()), float(mz_j.min()) + if mmni <= mmnj: + m_min, m_min_e = mmni, int(mz_i.idxmin()) + else: + m_min, m_min_e = mmnj, int(mz_j.idxmin()) + + # Group results by element to avoid redundant rows + # Each element that holds at least one extreme will get a row + crit_eles = defaultdict(lambda: {"v_max": "-", "v_min": "-", "m_max": "-", "m_min": "-"}) + crit_eles[v_max_e]["v_max"] = f"{v_max:.3f}" + crit_eles[v_min_e]["v_min"] = f"{v_min:.3f}" + crit_eles[m_max_e]["m_max"] = f"{m_max:.3f}" + crit_eles[m_min_e]["m_min"] = f"{m_min:.3f}" + + # Sort by element ID for consistent output + for eid in sorted(crit_eles.keys()): + vals = crit_eles[eid] + print(f"{girder_name:<8} | {eid:<8} | {vals['v_max']:>12} | {vals['min_vy' if False else 'v_min']:>12} | {vals['m_max']:>12} | {vals['m_min']:>12}") + except Exception as e: - print(f"{girder_name:<10} | ❌ Error: {e}") + print(f"{girder_name:<8} | ❌ Error: {e}") print("\n===================================================================") From 92e24590e2fdf4782dd66064826e69a8f1e792c4 Mon Sep 17 00:00:00 2001 From: Manav Sharma Date: Tue, 17 Feb 2026 23:31:36 +0530 Subject: [PATCH 061/225] Added Tables Using Pandas --- .../plate_girder/analysis_results.py | 222 +++++++++++++++--- 1 file changed, 192 insertions(+), 30 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index b87a824e0..e4fdad1d6 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -9,6 +9,7 @@ import math from collections import defaultdict, deque import openseespy.opensees as ops +import pandas as pd class PlateGirderAnalysisResults: @@ -333,9 +334,6 @@ def to_list(val): continue print(f" --- Girder: {girder_name} ---") - print( - f" {'Element':<10} | {'Vy_i (kN)':<12} | {'Vy_j (kN)':<12} | {'Mz_i (kNm)':<12} | {'Mz_j (kNm)':<12}") - print(" " + "-" * 70) elements = girder_data["elements"] @@ -346,22 +344,18 @@ def to_list(val): continue # Skip if no elements match # 5. Get results for this girder and loadcase - # Retrieve all required components at once for efficiency try: - # Using dataset directly for speed scaling with multiple elements - # Select specific loadcase and elements subset = self.ds.sel(Loadcase=lc, Element=elements) - # Extract values - vy_i = subset.sel(Component="Vy_i")["forces"].values - vy_j = subset.sel(Component="Vy_j")["forces"].values - mz_i = subset.sel(Component="Mz_i")["forces"].values - mz_j = subset.sel(Component="Mz_j")["forces"].values - - # 6. Print results for each element - for idx, eid in enumerate(elements): - print( - f" {eid:<10} | {vy_i[idx]:<12.3f} | {vy_j[idx]:<12.3f} | {mz_i[idx]:<12.3f} | {mz_j[idx]:<12.3f}") + # Extract values and create DataFrame + df = pd.DataFrame({ + "Element": elements, + "Vy_i (kN)": subset.sel(Component="Vy_i")["forces"].values, + "Vy_j (kN)": subset.sel(Component="Vy_j")["forces"].values, + "Mz_i (kNm)": subset.sel(Component="Mz_i")["forces"].values, + "Mz_j (kNm)": subset.sel(Component="Mz_j")["forces"].values + }) + print(df.to_string(index=False)) except Exception as e: print(f" ❌ Error retrieving results for girder {girder_name}: {e}") @@ -402,8 +396,8 @@ def to_list(val): for lc in moving_lcs: print(f"\n>>> Load Case: {lc}") - print(f"{'Girder':<8} | {'Ele':<8} | {'Max Vy (kN)':>12} | {'Min Vy (kN)':>12} | {'Max Mz (kNm)':>12} | {'Min Mz (kNm)':>12}") - print("-" * 90) + + lc_data = [] for girder_name, girder_data in girder_map.items(): if g_filter and girder_name not in g_filter: @@ -448,23 +442,175 @@ def to_list(val): m_min, m_min_e = mmnj, int(mz_j.idxmin()) # Group results by element to avoid redundant rows - # Each element that holds at least one extreme will get a row - crit_eles = defaultdict(lambda: {"v_max": "-", "v_min": "-", "m_max": "-", "m_min": "-"}) - crit_eles[v_max_e]["v_max"] = f"{v_max:.3f}" - crit_eles[v_min_e]["v_min"] = f"{v_min:.3f}" - crit_eles[m_max_e]["m_max"] = f"{m_max:.3f}" - crit_eles[m_min_e]["m_min"] = f"{m_min:.3f}" - - # Sort by element ID for consistent output + crit_eles = defaultdict( + lambda: {"Max Vy (kN)": "-", "Min Vy (kN)": "-", "Max Mz (kNm)": "-", "Min Mz (kNm)": "-"}) + crit_eles[v_max_e]["Max Vy (kN)"] = f"{v_max:.3f}" + crit_eles[v_min_e]["Min Vy (kN)"] = f"{v_min:.3f}" + crit_eles[m_max_e]["Max Mz (kNm)"] = f"{m_max:.3f}" + crit_eles[m_min_e]["Min Mz (kNm)"] = f"{m_min:.3f}" + + # Add to loadcase data for eid in sorted(crit_eles.keys()): - vals = crit_eles[eid] - print(f"{girder_name:<8} | {eid:<8} | {vals['v_max']:>12} | {vals['min_vy' if False else 'v_min']:>12} | {vals['m_max']:>12} | {vals['m_min']:>12}") + row = {"Girder": girder_name, "Ele": eid} + row.update(crit_eles[eid]) + lc_data.append(row) except Exception as e: - print(f"{girder_name:<8} | ❌ Error: {e}") + lc_data.append({"Girder": girder_name, "Ele": "ERROR", "Max Vy (kN)": str(e)}) + + if lc_data: + df = pd.DataFrame(lc_data) + print(df.to_string(index=False)) print("\n===================================================================") + def print_critical_max_state(self): + """ + Finds the global maximum for a selected component across all moving load cases + within a selected category and displays the bridge-wide state at that critical position. + """ + print("\n--- Critical Maximum Result Viewer ---") + + # 1. Component Selection + print("Select Component:") + print("1. Vy_i") + print("2. Vy_j") + print("3. Mz_i") + print("4. Mz_j") + print("0. Back") + + choice = input("Enter choice: ").strip() + if choice == "0": + return + + comp_map = {"1": "Vy_i", "2": "Vy_j", "3": "Mz_i", "4": "Mz_j"} + if choice not in comp_map: + print("❌ Invalid selection") + return + + comp = comp_map[choice] + + # 2. Category Selection (Moving Load Cases) + lc_groups = self.classify_loadcases() + moving_lcs = lc_groups["vehicle_moving"] + + if not moving_lcs: + print("❌ No moving load cases found.") + return + + # Group by case type (e.g., "Case1 ClassA", "Case2 Class70R") + case_types = {} + for lc in moving_lcs: + parts = lc.split() + if len(parts) >= 3: + case_type = f"{parts[1]} {parts[2]}" + if case_type not in case_types: + case_types[case_type] = [] + case_types[case_type].append(lc) + + categories = sorted(case_types.keys()) + print("\nSelect Moving Load Category:") + for i, category in enumerate(categories, 1): + print(f"{i}. {category}") + print("0. Back") + + cat_choice = input("Enter choice: ").strip() + if cat_choice == "0": + return + + if not cat_choice.isdigit() or int(cat_choice) < 1 or int(cat_choice) > len(categories): + print("❌ Invalid selection") + return + + selected_category = categories[int(cat_choice) - 1] + relevant_lcs = case_types[selected_category] + + girder_map, _ = self.build_girders(verbose=False) + + global_max = -float('inf') + crit_lc = None + crit_girder = None + crit_ele = None + + print(f"\nSearching for maximum {comp} in {selected_category} ({len(relevant_lcs)} positions)...") + + # 3. Search for global maximum within selected category + for lc in relevant_lcs: + for g_name, g_data in girder_map.items(): + elements = g_data["elements"] + try: + subset = self.ds.sel(Loadcase=lc, Element=elements, Component=comp)["forces"] + current_max = float(subset.max()) + if current_max > global_max: + global_max = current_max + crit_lc = lc + crit_girder = g_name + crit_ele = int(subset.idxmax()) + except Exception: + continue + + if crit_lc is None: + print("❌ No results found.") + return + + print("\n" + "=" * 100) + print(" " * 35 + "GLOBAL CRITICAL MAXIMUM SUMMARY") + print("=" * 100) + + # 3.1 Parse load case string for short name and position + # Format usually: "Moving Case1 ClassA L2 at global position [23.95,0.00,0.00]" + short_lc = crit_lc + position_str = "-" + if " at global position " in crit_lc: + parts = crit_lc.split(" at global position ") + short_lc = parts[0].replace("Moving ", "") # e.g. "Case1 ClassA L2" + position_str = parts[1] # e.g. "[23.95,0.00,0.00]" + + summary_data = [{ + "Component": comp, + "Girder": crit_girder, + "Element": crit_ele, + "Value": f"{global_max:.3f}", + "Loadcase (Short)": short_lc, + "Position": position_str + }] + summary_df = pd.DataFrame(summary_data) + print(summary_df.to_string(index=False)) + print("=" * 100) + + # 4. Print bridge-wide state at this critical load case position + print(f"\n--- Bridge State at {crit_lc} ---") + + for g_name, g_data in girder_map.items(): + elements = g_data["elements"] + print(f"\n>>> Girder: {g_name}") + try: + subset = self.ds.sel(Loadcase=crit_lc, Element=elements) + + vy_i = subset.sel(Component="Vy_i")["forces"].values + vy_j = subset.sel(Component="Vy_j")["forces"].values + mz_i = subset.sel(Component="Mz_i")["forces"].values + mz_j = subset.sel(Component="Mz_j")["forces"].values + + # Separate girder data collection + girder_data = [] + for i, eid in enumerate(elements): + row = { + "Element": eid, + "Vy_i": f"{vy_i[i]:.3f}", + "Vy_j": f"{vy_j[i]:.3f}", + "Mz_i": f"{mz_i[i]:.3f}", + "Mz_j": f"{mz_j[i]:.3f}" + } + girder_data.append(row) + + df = pd.DataFrame(girder_data) + print(df.to_string(index=False)) + except Exception as e: + print(f" ❌ Error for girder {g_name}: {e}") + + print("\n" + "=" * 80) + def run_interactive_viewer(self): while True: @@ -475,6 +621,7 @@ def run_interactive_viewer(self): print("2. Show Analysis Result") print("3. Show moving load trace") print("4. Show max/min envelopes") + print("5. Show critical maximum state") print("0. Exit") print("==============================") @@ -620,8 +767,19 @@ def run_interactive_viewer(self): ) print(f"\nResults | {key} | {lc} | {comp}") + + # Convert results to a pandas DataFrame for better formatting + data = [] for eid, val in res.items(): - print(f"Element {eid}: {val}") + try: + # Handle potential array values to get a clean scalar + scalar_val = float(val) if val is not None else val + except (TypeError, ValueError): + scalar_val = val + data.append({"Element": eid, comp: scalar_val}) + + df = pd.DataFrame(data) + print(df.to_string(index=False)) continue @@ -693,5 +851,9 @@ def run_interactive_viewer(self): self.print_envelopes(load_case_filter=lc_input, girder_filter=g_input) continue + elif main_choice == "5": + self.print_critical_max_state() + continue + else: print("❌ Invalid option") From 7f2f4a3094d31317ae1f357c24c16bf298c54948 Mon Sep 17 00:00:00 2001 From: Manav Sharma Date: Sun, 22 Feb 2026 15:06:17 +0530 Subject: [PATCH 062/225] Added Neccessay Values To The Table And Also Changed Accordingly For Absolute Maximum Added Neccessary Changes Added Logic For Overhang Updated The Girder And Overhang Logic Restore plategirderbridge.py to match upstream dev Removed Unecessary files Added Changes To Gitignore Added Changes To Gitignore Changes chore: remove redundant mat_lib.json Made Changes To Gitignore --- .gitignore | 67 ++- mat_lib.json | 162 ------- .../bridge_types/plate_girder/analyser.py | 7 +- .../plate_girder/analysis_results.py | 311 +++++++++--- .../bridge_types/plate_girder/mat_lib.json | 162 ------- .../plate_girder/plategirderbridge.py | 442 ++++++++++++++++++ 6 files changed, 737 insertions(+), 414 deletions(-) delete mode 100644 mat_lib.json delete mode 100644 src/osdagbridge/core/bridge_types/plate_girder/mat_lib.json create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py diff --git a/.gitignore b/.gitignore index 116fc130d..b4add9f52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,28 +1,7 @@ -# Mac -.DS_Store - -# IDE -.idea/ - -# Python env -osdagbridge-env/ -venv/ -env/ - -# Sub repos / libs -ospgrillage/ - -# Temp plots -temp_plot.html -*.html - -# Python cache -__pycache__/ -*.pyc# Byte-compiled / optimized / DLL files +# Byte-compiled / optimized / DLL files */__pycache__/ *.py[codz] *$py.class -.DS_Store */.vscode/* # C extensions @@ -73,6 +52,36 @@ coverage.xml .pytest_cache/ cover/ +# Type Checkers +.mypy_cache/ +.dmypy.json +dmypy.json +.pyre/ +.pytype/ +.ruff_cache/ + +# Documentation +docs/_build/ +/site +site/ + +# Jupyter / IPython +.ipynb_checkpoints +profile_default/ +ipython_config.py + +# Web / Flask / Django / Scrapy +instance/ +.webassets-cache +.scrapy +local_settings.py + +# Project-specific temp files +temp_plot.html +*.html +src/osdag_map_cache/ +/osdag_map_cache/ + # Translations *.mo *.pot @@ -165,6 +174,8 @@ venv/ ENV/ env.bak/ venv.bak/ +osdagbridge-env/ + # Spyder project settings .spyderproject @@ -195,7 +206,8 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ +.idea/ + # Abstra # Abstra is an AI-powered process automation framework. @@ -208,7 +220,7 @@ cython_debug/ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore # and can be added to the global gitignore or merged into this file. However, if you prefer, # you could uncomment the following to ignore the entire vscode folder -# .vscode/ +.vscode/ # Ruff stuff: .ruff_cache/ @@ -239,4 +251,9 @@ src/osdag_map_cache/ # Database files *.db *.sqlite -*.sqlite3 \ No newline at end of file +*.sqlite3 + +# Project-specific ignores +ospgrillage/ +temp_plot.html +*.html \ No newline at end of file diff --git a/mat_lib.json b/mat_lib.json deleted file mode 100644 index b5407cafe..000000000 --- a/mat_lib.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "concrete": { - "AS5100-2017": { - "units": "SI", - "25MPa": { - "fc": 25, - "E": 26.7, - "v": 0.2, - "rho": 2400.0 - }, - "32MPa": { - "fc": 32, - "E": 30.1, - "v": 0.2, - "rho": 2400.0 - }, - "40MPa": { - "fc": 40, - "E": 32.8, - "v": 0.2, - "rho": 2400.0 - }, - "50MPa": { - "fc": 50, - "E": 34.8, - "v": 0.2, - "rho": 2400.0 - }, - "65MPa": { - "fc": 65, - "E": 37.4, - "v": 0.2, - "rho": 2400.0 - }, - "80MPa": { - "fc": 80, - "E": 39.6, - "v": 0.2, - "rho": 2400.0 - }, - "100MPa": { - "fc": 100, - "E": 42.2, - "v": 0.2, - "rho": 2400.0 - } - }, - "AASHTO-LRFD-8th": { - "units": "SI", - "2.4ksi": { - "fc": 16.55, - "E": 23.2223, - "v": 0.2, - "rho": 2402.7 - }, - "3.0ksi": { - "fc": 20.68, - "E": 24.997, - "v": 0.2, - "rho": 2402.7 - }, - "3.6ksi": { - "fc": 24.82, - "E": 26.547, - "v": 0.2, - "rho": 2402.7 - }, - "4.0ksi": { - "fc": 27.58, - "E": 27.486, - "v": 0.2, - "rho": 2402.7 - }, - "5.0ksi": { - "fc": 34.47, - "E": 29.587, - "v": 0.2, - "rho": 2402.7 - }, - "6.0ksi": { - "fc": 41.37, - "E": 31.856, - "v": 0.2, - "rho": 2402.7 - }, - "7.5ksi": { - "fc": 51.71, - "E": 34.999, - "v": 0.2, - "rho": 2402.7 - }, - "10.0ksi": { - "fc": 68.95, - "E": 39.8, - "v": 0.2, - "rho": 2402.7 - }, - "15.0ksi": { - "fc": 103.42, - "E": 48.582, - "v": 0.2, - "rho": 2402.7 - } - } - }, - "steel": { - "AS5100.6-2004": { - "units": "SI", - "R250N": { - "fy": 250, - "E": 200.0, - "v": 0.25, - "rho": 7850 - }, - "D500N": { - "fy": 500, - "E": 200.0, - "v": 0.25, - "rho": 7850 - }, - "D500L": { - "fy": 500, - "E": 200.0, - "v": 0.25, - "rho": 7850 - } - }, - "AASHTO-LRFD-8th": { - "units": "SI", - "A615-40": { - "fy": 275.8, - "E": 200.0, - "v": 0.3, - "rho": 7849 - }, - "A615-60": { - "fy": 413.67, - "E": 200.0, - "v": 0.3, - "rho": 7849 - }, - "A615-75": { - "fy": 517.12, - "E": 200.0, - "v": 0.3, - "rho": 7849 - }, - "A615-80": { - "fy": 551.58, - "E": 200.0, - "v": 0.3, - "rho": 7849 - }, - "A615-100": { - "fy": 689.48, - "E": 200.0, - "v": 0.3, - "rho": 7849 - } - } - } -} \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index fda4c9938..c786036bf 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -81,7 +81,7 @@ def __init__(self): # self.w = 11.565 * m self.n_l = 7 self.n_t = 11 - self.edge_dist = 1.05 * m + self.edge_dist = 0 * m self.ext_to_int_dist = 2.2775 * m self.angle = 0 @@ -149,7 +149,7 @@ def create_model(self): skew=self.angle, num_long_grid=self.n_l, num_trans_grid=self.n_t, - edge_beam_dist=self.edge_dist, + edge_beam_dist=self.edge_dist, #0-no overhang ext_to_int_dist=self.ext_to_int_dist, mesh_type="Oblique" # ('Ortho' or 'Oblique') ) @@ -1168,7 +1168,8 @@ def plot(self, model=None): result_handler = PlateGirderAnalysisResults( dataset=results, - model=bridge.model + model=bridge.model, + edge_dist=bridge.edge_dist ) # result_handler.debug_loadcase_detection() diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index e4fdad1d6..6b0293499 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -17,9 +17,10 @@ class PlateGirderAnalysisResults: # ======================================================== # INITIALIZATION # ======================================================== - def __init__(self, dataset, model): # storing analysis result + def __init__(self, dataset, model, edge_dist=0): # storing analysis result self.ds = dataset self.model = model + self.edge_dist = edge_dist # ======================================================== # DATASET BASED RESULTS (FORCES / MOMENTS) @@ -248,8 +249,21 @@ def build_girders(self, verbose=True): print(f"\nSpan length from geometry = {span_length}\n") girder_map = {} + all_pairs = list(zip(start_nodes, end_nodes)) + num_pairs = len(all_pairs) + + for i, (s, e) in enumerate(all_pairs, start=1): + # --- NAMING LOGIC --- + if self.edge_dist > 0: + if i == 1: + name = "EB1" + elif i == num_pairs: + name = "EB2" + else: + name = f"G{i - 1}" + else: + name = f"G{i}" - for i, (s, e) in enumerate(zip(start_nodes, end_nodes), start=1): path = self.bfs_shortest_path(adj, s, e) path_elements, element_map = self.get_elements_along_path(path, elements) length = self.compute_path_distance(nodes, path) @@ -258,7 +272,7 @@ def build_girders(self, verbose=True): if verbose: print("----------------------------------------") - print(f"Girder g{i}") + print(f"Member: {name}") print("----------------------------------------") print("Path :", path) @@ -271,7 +285,7 @@ def build_girders(self, verbose=True): print(f"\nLength : {length:.3f} m ({status})") print("----------------------------------------\n") - girder_map[f"g{i}"] = { + girder_map[name] = { "start": s, "end": e, "path": path, @@ -282,6 +296,18 @@ def build_girders(self, verbose=True): return girder_map, elements + def filter_girders(self, girder_map): + if self.edge_dist > 0: + # If there's an overhang, show everything (EB1, G1...Gn, EB2) + return girder_map + else: + # If no overhang (dist=0), hide the physical edge girders (G1 and Gn) + keys = list(girder_map.keys()) + if len(keys) <= 2: + return girder_map + filtered_keys = keys[1:-1] + return {k: girder_map[k] for k in filtered_keys} + # ======================================================== # PRINT MOVING LOAD TRACE # ======================================================== @@ -291,7 +317,7 @@ def print_moving_load_trace(self, load_case_filter=None, girder_filter=None, ele Iterates through all moving load cases and all girders. :param load_case_filter: (str or list) Print only load cases containing this string(s). - :param girder_filter: (str or list) Print only girders matching this name(s) (e.g. "g1"). + :param girder_filter: (str or list) Print only girders matching this name(s) (e.g. "G1"). :param element_filter: (int or list) Print only specific element IDs. """ @@ -314,6 +340,7 @@ def to_list(val): # 2. Build girders girder_map, _ = self.build_girders(verbose=False) + girder_map = self.filter_girders(girder_map) print("\n================ MOVING LOAD TRACE ================") @@ -350,10 +377,18 @@ def to_list(val): # Extract values and create DataFrame df = pd.DataFrame({ "Element": elements, - "Vy_i (kN)": subset.sel(Component="Vy_i")["forces"].values, - "Vy_j (kN)": subset.sel(Component="Vy_j")["forces"].values, - "Mz_i (kNm)": subset.sel(Component="Mz_i")["forces"].values, - "Mz_j (kNm)": subset.sel(Component="Mz_j")["forces"].values + "Vx_i": subset.sel(Component="Vx_i")["forces"].values, + "Vx_j": subset.sel(Component="Vx_j")["forces"].values, + "Vy_i": subset.sel(Component="Vy_i")["forces"].values, + "Vy_j": subset.sel(Component="Vy_j")["forces"].values, + "Vz_i": subset.sel(Component="Vz_i")["forces"].values, + "Vz_j": subset.sel(Component="Vz_j")["forces"].values, + "Mx_i": subset.sel(Component="Mx_i")["forces"].values, + "Mx_j": subset.sel(Component="Mx_j")["forces"].values, + "My_i": subset.sel(Component="My_i")["forces"].values, + "My_j": subset.sel(Component="My_j")["forces"].values, + "Mz_i": subset.sel(Component="Mz_i")["forces"].values, + "Mz_j": subset.sel(Component="Mz_j")["forces"].values, }) print(df.to_string(index=False)) @@ -391,6 +426,7 @@ def to_list(val): return girder_map, _ = self.build_girders(verbose=False) + girder_map = self.filter_girders(girder_map) print("\n================ VEHICLE ENVELOPES (PER POSITION) ================") @@ -413,6 +449,27 @@ def to_list(val): vy_i = subset.sel(Component="Vy_i")["forces"] vy_j = subset.sel(Component="Vy_j")["forces"] + # --- Vx Envelope --- + vx_i = subset.sel(Component="Vx_i")["forces"] + vx_j = subset.sel(Component="Vx_j")["forces"] + + # --- Vz Envelope --- + vz_i = subset.sel(Component="Vz_i")["forces"] + vz_j = subset.sel(Component="Vz_j")["forces"] + + # --- Mx Envelope --- + mx_i = subset.sel(Component="Mx_i")["forces"] + mx_j = subset.sel(Component="Mx_j")["forces"] + + # --- My Envelope --- + my_i = subset.sel(Component="My_i")["forces"] + my_j = subset.sel(Component="My_j")["forces"] + + # --- Mz Envelope --- + mz_i = subset.sel(Component="Mz_i")["forces"] + mz_j = subset.sel(Component="Mz_j")["forces"] + + # Compute max/min for Vy mxi, mxj = float(vy_i.max()), float(vy_j.max()) if mxi >= mxj: v_max, v_max_e = mxi, int(vy_i.idxmax()) @@ -425,10 +482,59 @@ def to_list(val): else: v_min, v_min_e = mnj, int(vy_j.idxmin()) - # --- Mz Envelope --- - mz_i = subset.sel(Component="Mz_i")["forces"] - mz_j = subset.sel(Component="Mz_j")["forces"] + # Compute max/min for Vx + mx_i_val, mx_j_val = float(vx_i.max()), float(vx_j.max()) + if mx_i_val >= mx_j_val: + vx_max, vx_max_e = mx_i_val, int(vx_i.idxmax()) + else: + vx_max, vx_max_e = mx_j_val, int(vx_j.idxmax()) + + mn_i_val, mn_j_val = float(vx_i.min()), float(vx_j.min()) + if mn_i_val <= mn_j_val: + vx_min, vx_min_e = mn_i_val, int(vx_i.idxmin()) + else: + vx_min, vx_min_e = mn_j_val, int(vx_j.idxmin()) + + # Compute max/min for Vz + mz_i_val, mz_j_val = float(vz_i.max()), float(vz_j.max()) + if mz_i_val >= mz_j_val: + vz_max, vz_max_e = mz_i_val, int(vz_i.idxmax()) + else: + vz_max, vz_max_e = mz_j_val, int(vz_j.idxmax()) + + mnz_i_val, mnz_j_val = float(vz_i.min()), float(vz_j.min()) + if mnz_i_val <= mnz_j_val: + vz_min, vz_min_e = mnz_i_val, int(vz_i.idxmin()) + else: + vz_min, vz_min_e = mnz_j_val, int(vz_j.idxmin()) + + # Compute max/min for Mx + mx_i_val, mx_j_val = float(mx_i.max()), float(mx_j.max()) + if mx_i_val >= mx_j_val: + mx_max, mx_max_e = mx_i_val, int(mx_i.idxmax()) + else: + mx_max, mx_max_e = mx_j_val, int(mx_j.idxmax()) + + mnx_i_val, mnx_j_val = float(mx_i.min()), float(mx_j.min()) + if mnx_i_val <= mnx_j_val: + mx_min, mx_min_e = mnx_i_val, int(mx_i.idxmin()) + else: + mx_min, mx_min_e = mnx_j_val, int(mx_j.idxmin()) + + # Compute max/min for My + my_i_val, my_j_val = float(my_i.max()), float(my_j.max()) + if my_i_val >= my_j_val: + my_max, my_max_e = my_i_val, int(my_i.idxmax()) + else: + my_max, my_max_e = my_j_val, int(my_j.idxmax()) + mny_i_val, mny_j_val = float(my_i.min()), float(my_j.min()) + if mny_i_val <= mny_j_val: + my_min, my_min_e = mny_i_val, int(my_i.idxmin()) + else: + my_min, my_min_e = mny_j_val, int(my_j.idxmin()) + + # Compute max/min for Mz mmxi, mmxj = float(mz_i.max()), float(mz_j.max()) if mmxi >= mmxj: m_max, m_max_e = mmxi, int(mz_i.idxmax()) @@ -443,9 +549,30 @@ def to_list(val): # Group results by element to avoid redundant rows crit_eles = defaultdict( - lambda: {"Max Vy (kN)": "-", "Min Vy (kN)": "-", "Max Mz (kNm)": "-", "Min Mz (kNm)": "-"}) + lambda: { + "Max Vy (kN)": "-", + "Min Vy (kN)": "-", + "Max Vx (kN)": "-", + "Min Vx (kN)": "-", + "Max Vz (kN)": "-", + "Min Vz (kN)": "-", + "Max Mx (kNm)": "-", + "Min Mx (kNm)": "-", + "Max My (kNm)": "-", + "Min My (kNm)": "-", + "Max Mz (kNm)": "-", + "Min Mz (kNm)": "-", + }) crit_eles[v_max_e]["Max Vy (kN)"] = f"{v_max:.3f}" crit_eles[v_min_e]["Min Vy (kN)"] = f"{v_min:.3f}" + crit_eles[vx_max_e]["Max Vx (kN)"] = f"{vx_max:.3f}" + crit_eles[vx_min_e]["Min Vx (kN)"] = f"{vx_min:.3f}" + crit_eles[vz_max_e]["Max Vz (kN)"] = f"{vz_max:.3f}" + crit_eles[vz_min_e]["Min Vz (kN)"] = f"{vz_min:.3f}" + crit_eles[mx_max_e]["Max Mx (kNm)"] = f"{mx_max:.3f}" + crit_eles[mx_min_e]["Min Mx (kNm)"] = f"{mx_min:.3f}" + crit_eles[my_max_e]["Max My (kNm)"] = f"{my_max:.3f}" + crit_eles[my_min_e]["Min My (kNm)"] = f"{my_min:.3f}" crit_eles[m_max_e]["Max Mz (kNm)"] = f"{m_max:.3f}" crit_eles[m_min_e]["Min Mz (kNm)"] = f"{m_min:.3f}" @@ -483,7 +610,12 @@ def print_critical_max_state(self): if choice == "0": return - comp_map = {"1": "Vy_i", "2": "Vy_j", "3": "Mz_i", "4": "Mz_j"} + comp_map = { + "1": "Vy_i", + "2": "Vy_j", + "3": "Mz_i", + "4": "Mz_j", + } if choice not in comp_map: print("❌ Invalid selection") return @@ -526,26 +658,43 @@ def print_critical_max_state(self): relevant_lcs = case_types[selected_category] girder_map, _ = self.build_girders(verbose=False) + girder_map = self.filter_girders(girder_map) - global_max = -float('inf') + global_abs_max = -1.0 + crit_val = 0.0 crit_lc = None crit_girder = None crit_ele = None - print(f"\nSearching for maximum {comp} in {selected_category} ({len(relevant_lcs)} positions)...") + print(f"\nSearching for absolute maximum {comp} in {selected_category} ({len(relevant_lcs)} positions)...") - # 3. Search for global maximum within selected category + # 3. Search for absolute maximum within selected category for lc in relevant_lcs: for g_name, g_data in girder_map.items(): elements = g_data["elements"] try: subset = self.ds.sel(Loadcase=lc, Element=elements, Component=comp)["forces"] - current_max = float(subset.max()) - if current_max > global_max: - global_max = current_max + + # Find both max and min in this subset + s_max = float(subset.max()) + s_min = float(subset.min()) + + # Determine which has larger magnitude + if abs(s_max) >= abs(s_min): + local_abs_max = abs(s_max) + local_val = s_max + local_ele = int(subset.idxmax()) + else: + local_abs_max = abs(s_min) + local_val = s_min + local_ele = int(subset.idxmin()) + + if local_abs_max > global_abs_max: + global_abs_max = local_abs_max + crit_val = local_val crit_lc = lc crit_girder = g_name - crit_ele = int(subset.idxmax()) + crit_ele = local_ele except Exception: continue @@ -570,7 +719,7 @@ def print_critical_max_state(self): "Component": comp, "Girder": crit_girder, "Element": crit_ele, - "Value": f"{global_max:.3f}", + "Value": f"{crit_val:.3f}", "Loadcase (Short)": short_lc, "Position": position_str }] @@ -587,8 +736,16 @@ def print_critical_max_state(self): try: subset = self.ds.sel(Loadcase=crit_lc, Element=elements) + vx_i = subset.sel(Component="Vx_i")["forces"].values + vx_j = subset.sel(Component="Vx_j")["forces"].values vy_i = subset.sel(Component="Vy_i")["forces"].values vy_j = subset.sel(Component="Vy_j")["forces"].values + vz_i = subset.sel(Component="Vz_i")["forces"].values + vz_j = subset.sel(Component="Vz_j")["forces"].values + mx_i = subset.sel(Component="Mx_i")["forces"].values + mx_j = subset.sel(Component="Mx_j")["forces"].values + my_i = subset.sel(Component="My_i")["forces"].values + my_j = subset.sel(Component="My_j")["forces"].values mz_i = subset.sel(Component="Mz_i")["forces"].values mz_j = subset.sel(Component="Mz_j")["forces"].values @@ -597,8 +754,16 @@ def print_critical_max_state(self): for i, eid in enumerate(elements): row = { "Element": eid, + "Vx_i": f"{vx_i[i]:.3f}", + "Vx_j": f"{vx_j[i]:.3f}", "Vy_i": f"{vy_i[i]:.3f}", "Vy_j": f"{vy_j[i]:.3f}", + "Vz_i": f"{vz_i[i]:.3f}", + "Vz_j": f"{vz_j[i]:.3f}", + "Mx_i": f"{mx_i[i]:.3f}", + "Mx_j": f"{mx_j[i]:.3f}", + "My_i": f"{my_i[i]:.3f}", + "My_j": f"{my_j[i]:.3f}", "Mz_i": f"{mz_i[i]:.3f}", "Mz_j": f"{mz_j[i]:.3f}" } @@ -673,6 +838,7 @@ def run_interactive_viewer(self): if main_choice == "2": girder_map, elements = self.build_girders(verbose=False) + girder_map = self.filter_girders(girder_map) loadcases = self.get_available_loadcases() component_map = { @@ -740,8 +906,7 @@ def run_interactive_viewer(self): continue lc = loadcases[lc_in - 1] - import plots_widget - plots_widget.CURRENT_LOADCASE = lc + # Plotting disabled as per user request. # ================= RESULT TYPE LOOP ================= while True: @@ -786,67 +951,88 @@ def run_interactive_viewer(self): elif main_choice == "3": print("\n--- Moving Load Trace Configuration ---") - - # Get moving load cases lc_groups = self.classify_loadcases() moving_lcs = lc_groups["vehicle_moving"] - if not moving_lcs: print("❌ No moving load cases found.") continue - # Show available girders girder_map, _ = self.build_girders(verbose=False) - print("\nAvailable Girders:") - for g in girder_map.keys(): - print(f" - {g}") - - g_input = input("Enter Girder Name (or leave blank for all): ").strip() - if not g_input: + girder_map = self.filter_girders(girder_map) + g_list = list(girder_map.keys()) + + print("\nSelect Girder:") + for i, g in enumerate(g_list, 1): + print(f"{i}. {g}") + print(f"{len(g_list)+1}. All Girders") + print("0. Back") + + g_choice = input("Enter choice: ").strip() + if g_choice == "0": continue + + if not g_choice: + g_input = None + elif g_choice == str(len(g_list)+1): g_input = None + elif g_choice.isdigit() and 1 <= int(g_choice) <= len(g_list): + g_input = g_list[int(g_choice)-1] + else: + print("❌ Invalid selection") + continue # Show available moving load cases - print("\nAvailable Moving Load Cases:") - # Group by case type for better readability - case_types = {} + print("\nAvailable Moving Load Categories:") + case_types = defaultdict(list) for lc in moving_lcs: - # Extract case type (e.g., "Case1 ClassA" from "Moving Case1 ClassA L1 at...") parts = lc.split() if len(parts) >= 3: - case_type = f"{parts[1]} {parts[2]}" # e.g., "Case1 ClassA" - if case_type not in case_types: - case_types[case_type] = [] - case_types[case_type].append(lc) - - for case_type in sorted(case_types.keys()): - print(f" - {case_type} ({len(case_types[case_type])} positions)") - - print("\nEnter Load Case Filter (e.g., 'Case1', 'ClassA', 'Case2 Class70R')") - lc_input = input("Filter (or leave blank for all): ").strip() - if not lc_input: + case_types[f"{parts[1]} {parts[2]}"].append(lc) + + cats = sorted(case_types.keys()) + for i, cat in enumerate(cats, 1): + print(f"{i}. {cat}") + print(f"{len(cats)+1}. All Categories") + print("0. Back") + + lc_choice = input("Enter choice: ").strip() + if lc_choice == "0": continue + + if not lc_choice or lc_choice == str(len(cats)+1): lc_input = None + elif lc_choice.isdigit() and 1 <= int(lc_choice) <= len(cats): + lc_input = cats[int(lc_choice)-1] + else: + print("❌ Invalid selection") + continue - print("\n") self.print_moving_load_trace(load_case_filter=lc_input, girder_filter=g_input) - continue elif main_choice == "4": print("\n--- Envelope Configuration ---") - - # Show available girders girder_map, _ = self.build_girders(verbose=False) - print("\nAvailable Girders:") - for g in girder_map.keys(): - print(f" - {g}") - - g_input = input("Enter Girder Name (or leave blank for all): ").strip() - if not g_input: + girder_map = self.filter_girders(girder_map) + g_list = list(girder_map.keys()) + + print("\nSelect Girder:") + for i, g in enumerate(g_list, 1): + print(f"{i}. {g}") + print(f"{len(g_list)+1}. All Girders") + print("0. Back") + + g_choice = input("Enter choice: ").strip() + if g_choice == "0": continue + + if not g_choice or g_choice == str(len(g_list)+1): g_input = None + elif g_choice.isdigit() and 1 <= int(g_choice) <= len(g_list): + g_input = g_list[int(g_choice)-1] + else: + print("❌ Invalid selection") + continue - lc_input = input("Enter Load Case Filter (or leave blank for all): ").strip() - if not lc_input: - lc_input = None + lc_input = input("Enter Load Case Filter (e.g. 'ClassA') or leave blank for all: ").strip() + if not lc_input: lc_input = None self.print_envelopes(load_case_filter=lc_input, girder_filter=g_input) continue @@ -857,3 +1043,4 @@ def run_interactive_viewer(self): else: print("❌ Invalid option") + diff --git a/src/osdagbridge/core/bridge_types/plate_girder/mat_lib.json b/src/osdagbridge/core/bridge_types/plate_girder/mat_lib.json deleted file mode 100644 index b5407cafe..000000000 --- a/src/osdagbridge/core/bridge_types/plate_girder/mat_lib.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "concrete": { - "AS5100-2017": { - "units": "SI", - "25MPa": { - "fc": 25, - "E": 26.7, - "v": 0.2, - "rho": 2400.0 - }, - "32MPa": { - "fc": 32, - "E": 30.1, - "v": 0.2, - "rho": 2400.0 - }, - "40MPa": { - "fc": 40, - "E": 32.8, - "v": 0.2, - "rho": 2400.0 - }, - "50MPa": { - "fc": 50, - "E": 34.8, - "v": 0.2, - "rho": 2400.0 - }, - "65MPa": { - "fc": 65, - "E": 37.4, - "v": 0.2, - "rho": 2400.0 - }, - "80MPa": { - "fc": 80, - "E": 39.6, - "v": 0.2, - "rho": 2400.0 - }, - "100MPa": { - "fc": 100, - "E": 42.2, - "v": 0.2, - "rho": 2400.0 - } - }, - "AASHTO-LRFD-8th": { - "units": "SI", - "2.4ksi": { - "fc": 16.55, - "E": 23.2223, - "v": 0.2, - "rho": 2402.7 - }, - "3.0ksi": { - "fc": 20.68, - "E": 24.997, - "v": 0.2, - "rho": 2402.7 - }, - "3.6ksi": { - "fc": 24.82, - "E": 26.547, - "v": 0.2, - "rho": 2402.7 - }, - "4.0ksi": { - "fc": 27.58, - "E": 27.486, - "v": 0.2, - "rho": 2402.7 - }, - "5.0ksi": { - "fc": 34.47, - "E": 29.587, - "v": 0.2, - "rho": 2402.7 - }, - "6.0ksi": { - "fc": 41.37, - "E": 31.856, - "v": 0.2, - "rho": 2402.7 - }, - "7.5ksi": { - "fc": 51.71, - "E": 34.999, - "v": 0.2, - "rho": 2402.7 - }, - "10.0ksi": { - "fc": 68.95, - "E": 39.8, - "v": 0.2, - "rho": 2402.7 - }, - "15.0ksi": { - "fc": 103.42, - "E": 48.582, - "v": 0.2, - "rho": 2402.7 - } - } - }, - "steel": { - "AS5100.6-2004": { - "units": "SI", - "R250N": { - "fy": 250, - "E": 200.0, - "v": 0.25, - "rho": 7850 - }, - "D500N": { - "fy": 500, - "E": 200.0, - "v": 0.25, - "rho": 7850 - }, - "D500L": { - "fy": 500, - "E": 200.0, - "v": 0.25, - "rho": 7850 - } - }, - "AASHTO-LRFD-8th": { - "units": "SI", - "A615-40": { - "fy": 275.8, - "E": 200.0, - "v": 0.3, - "rho": 7849 - }, - "A615-60": { - "fy": 413.67, - "E": 200.0, - "v": 0.3, - "rho": 7849 - }, - "A615-75": { - "fy": 517.12, - "E": 200.0, - "v": 0.3, - "rho": 7849 - }, - "A615-80": { - "fy": 551.58, - "E": 200.0, - "v": 0.3, - "rho": 7849 - }, - "A615-100": { - "fy": 689.48, - "E": 200.0, - "v": 0.3, - "rho": 7849 - } - } - } -} \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py new file mode 100644 index 000000000..fad6604b1 --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -0,0 +1,442 @@ +"""Main PG bridge file """ + +from __future__ import annotations + +from dataclasses import asdict, dataclass, field +from typing import Any, Callable, Dict, Mapping, Optional + +from osdagbridge.core.utils.common import ( + DEFAULT_CRASH_BARRIER_WIDTH, + DEFAULT_GIRDER_SPACING, + DEFAULT_RAILING_WIDTH, + KEY_CARRIAGEWAY_WIDTH, + KEY_CRASH_BARRIER_WIDTH, + KEY_DECK_OVERHANG, + KEY_DECK_THICKNESS, + KEY_FOOTPATH_WIDTH, + KEY_GIRDER_BOTTOM_FLANGE_WIDTH, + KEY_GIRDER_DEPTH, + KEY_GIRDER_SPACING, + KEY_GIRDER_SYMMETRY, + KEY_GIRDER_TOP_FLANGE_WIDTH, + KEY_GIRDER_TOP_FLANGE_THICKNESS, + KEY_GIRDER_WEB_THICKNESS, + KEY_INCLUDE_MEDIAN, + KEY_NO_OF_GIRDERS, + KEY_RAILING_WIDTH, + KEY_SKEW_ANGLE, + KEY_SPAN, + MIN_FOOTPATH_WIDTH, +) + +from .bridge_geometry import BridgeGeometry, CrossSectionLayout +from .cad_generator import export_step +from .designer import design +from .initial_sizing import BridgeConfigurationSolver, preliminary_sizing +from .report_generator import section_report +from .ui_fields import FrontendData +from .ui_fields_additional_input import ( + CRASH_BARRIER_TAB_SCHEMA, + DESIGN_OPTIONS_CONT_SCHEMA, + DESIGN_OPTIONS_SCHEMA, + GIRDER_DETAILS_SCHEMA, + LANE_DETAILS_TAB_SCHEMA, + LAYOUT_TAB_SCHEMA, + MEDIAN_TAB_SCHEMA, + RAILING_TAB_SCHEMA, + SUPPORT_CONDITIONS_SCHEMA, + WEARING_COURSE_TAB_SCHEMA, +) + +try: + from .dto import PlateGirderDTO +except Exception: + @dataclass + class PlateGirderDTO: + """Fallback DTO when dto.py is unavailable.""" + + name: str + + +def _first_present(source: Mapping[str, Any], *keys: str) -> Any: + for key in keys: + if key in source and source[key] not in ("", None): + return source[key] + return None + + +def _as_float(value: Any, default: float) -> float: + if value in ("", None): + return default + try: + return float(value) + except (TypeError, ValueError): + return default + + +def _as_int(value: Any, default: int) -> int: + if value in ("", None): + return default + try: + return int(float(value)) + except (TypeError, ValueError): + return default + + +def _as_bool(value: Any, default: bool = False) -> bool: + if value is None: + return default + if isinstance(value, bool): + return value + if isinstance(value, (int, float)): + return bool(value) + return str(value).strip().lower() in {"1", "true", "yes", "y"} + + +def _to_m(value: Any) -> float: + """Accept meters directly; if value looks like mm, convert to meters.""" + as_float = _as_float(value, 0.0) + return as_float / 1000.0 if as_float > 10.0 else as_float + + +@dataclass +class PlateGirderRunResult: + dto: PlateGirderDTO + initial_sizing: Dict[str, Any] = field(default_factory=dict) + geometry: Dict[str, Any] = field(default_factory=dict) + analysis: Dict[str, Any] = field(default_factory=dict) + analysis_results: Dict[str, Any] = field(default_factory=dict) + design: Dict[str, Any] = field(default_factory=dict) + modifier: Dict[str, Any] = field(default_factory=dict) + cad: Dict[str, Any] = field(default_factory=dict) + report: Dict[str, Any] = field(default_factory=dict) + + def to_dict(self) -> Dict[str, Any]: + return asdict(self) + + +class PlateGirderBridge: + """Coordinator that stitches all plate-girder modules.""" + + def __init__( + self, + basic_inputs: Optional[Mapping[str, Any]] = None, + additional_inputs: Optional[Mapping[str, Any]] = None, + modifier_hook: Optional[Callable[[PlateGirderRunResult], Dict[str, Any]]] = None, + ) -> None: + self.basic_inputs = dict(basic_inputs or {}) + self.additional_inputs = dict(additional_inputs or {}) + self.modifier_hook = modifier_hook + self._analysis_engine = None + + @staticmethod + def get_basic_input_schema() -> list: + return FrontendData().input_values() + + @staticmethod + def get_additional_input_schema() -> Dict[str, Dict[str, Any]]: + return { + "layout": LAYOUT_TAB_SCHEMA, + "crash_barrier": CRASH_BARRIER_TAB_SCHEMA, + "median": MEDIAN_TAB_SCHEMA, + "railing": RAILING_TAB_SCHEMA, + "wearing_course": WEARING_COURSE_TAB_SCHEMA, + "lane_details": LANE_DETAILS_TAB_SCHEMA, + "support_conditions": SUPPORT_CONDITIONS_SCHEMA, + "design_options": DESIGN_OPTIONS_SCHEMA, + "design_options_cont": DESIGN_OPTIONS_CONT_SCHEMA, + "girder_details": GIRDER_DETAILS_SCHEMA, + } + + def _footpath_count(self) -> int: + footpath_value = _first_present(self.basic_inputs, "footpath", "Footpath") + if footpath_value is None: + return 0 + text = str(footpath_value).strip().lower() + if "both" in text: + return 2 + if "single" in text: + return 1 + return 0 + + def _build_dto(self) -> PlateGirderDTO: + structure_name = _first_present( + self.basic_inputs, + "Structure Type", + "structure_type", + "name", + ) + return PlateGirderDTO(name=str(structure_name or "plate_girder_bridge")) + + def _run_initial_sizing(self, dto: PlateGirderDTO) -> Dict[str, Any]: + span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) + carriageway_width = _as_float( + _first_present(self.basic_inputs, KEY_CARRIAGEWAY_WIDTH, "carriageway_width"), + 10.0, + ) + no_of_footpaths = self._footpath_count() + include_median = _as_bool(_first_present(self.basic_inputs, KEY_INCLUDE_MEDIAN, "include_median")) + + crash_barrier_width = _as_float( + _first_present(self.additional_inputs, KEY_CRASH_BARRIER_WIDTH, "crash_barrier_width"), + DEFAULT_CRASH_BARRIER_WIDTH, + ) + footpath_width = _as_float( + _first_present(self.additional_inputs, KEY_FOOTPATH_WIDTH, "footpath_width"), + MIN_FOOTPATH_WIDTH if no_of_footpaths else 0.0, + ) + railing_width = _as_float( + _first_present(self.additional_inputs, KEY_RAILING_WIDTH, "railing_width"), + DEFAULT_RAILING_WIDTH if no_of_footpaths else 0.0, + ) + median_width = _as_float(_first_present(self.additional_inputs, "median_width"), 0.0) + if not include_median: + median_width = 0.0 + + n_girders = max( + 2, + _as_int(_first_present(self.additional_inputs, KEY_NO_OF_GIRDERS, "no_of_girders"), 4), + ) + girder_spacing = _as_float( + _first_present(self.additional_inputs, KEY_GIRDER_SPACING, "girder_spacing"), + DEFAULT_GIRDER_SPACING, + ) + deck_overhang = _as_float( + _first_present(self.additional_inputs, KEY_DECK_OVERHANG, "deck_overhang"), + 0.5 * DEFAULT_GIRDER_SPACING, + ) + + top_flange_w = _to_m( + _first_present(self.additional_inputs, KEY_GIRDER_TOP_FLANGE_WIDTH, "top_flange_width") + ) + bot_flange_w = _to_m( + _first_present(self.additional_inputs, KEY_GIRDER_BOTTOM_FLANGE_WIDTH, "bottom_flange_width") + ) + max_flange_width = max(top_flange_w, bot_flange_w, 0.0) + + solver = BridgeConfigurationSolver( + carriageway_width=carriageway_width, + crash_barrier_width=crash_barrier_width, + footpath_width=footpath_width, + railing_width=railing_width, + median_width=median_width, + no_of_footpaths=no_of_footpaths, + flange_width=max_flange_width, + ) + + changed_field = "girders" + if _first_present(self.additional_inputs, KEY_DECK_OVERHANG, "deck_overhang") is not None: + changed_field = "overhang" + elif _first_present(self.additional_inputs, KEY_GIRDER_SPACING, "girder_spacing") is not None: + changed_field = "spacing" + + layout_result = solver._solve_layout( + no_of_girders=n_girders, + girder_spacing=girder_spacing, + deck_overhang=deck_overhang, + changed_field=changed_field, + ) + + deck_thickness = solver.get_deck_thickness( + _as_float(_first_present(self.additional_inputs, KEY_DECK_THICKNESS, "deck_thickness"), 200.0) + ) + footpath_width_checked = solver.get_footpath_width( + user_value=footpath_width, + footpath={0: "None", 1: "Single Side", 2: "Both Sides"}.get(no_of_footpaths, "None"), + ) + section_properties = solver.compute_section_properties( + span=span, + symmetry=str( + _first_present(self.additional_inputs, KEY_GIRDER_SYMMETRY, "symmetry") + or "Girder Symmetric" + ), + user_depth=_to_m(_first_present(self.additional_inputs, KEY_GIRDER_DEPTH, "depth")), + B_top=top_flange_w, + B_bot=bot_flange_w, + t_f_top=_to_m( + _first_present(self.additional_inputs, KEY_GIRDER_TOP_FLANGE_THICKNESS, "top_flange_thickness") + ), + t_f_bot=_to_m(_first_present(self.additional_inputs, "bottom_flange_thickness")), + t_w=_to_m(_first_present(self.additional_inputs, KEY_GIRDER_WEB_THICKNESS, "web_thickness")), + ) + + return { + "legacy_initial_sizing": preliminary_sizing(dto), + "layout": asdict(layout_result), + "deck_thickness_mm": deck_thickness, + "footpath_width_m": footpath_width_checked, + "section_properties": section_properties, + "inputs_resolved": { + "span_m": span, + "carriageway_width_m": carriageway_width, + "crash_barrier_width_m": crash_barrier_width, + "railing_width_m": railing_width, + "median_width_m": median_width, + "no_of_footpaths": no_of_footpaths, + }, + } + + def _build_geometry(self, initial_sizing: Dict[str, Any]) -> Dict[str, Any]: + span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) + layout_data = initial_sizing["layout"] + resolved = initial_sizing["inputs_resolved"] + + layout = CrossSectionLayout( + carriageway_width=resolved["carriageway_width_m"], + crash_barrier_width=resolved["crash_barrier_width_m"], + railing_width=resolved["railing_width_m"], + footpath_width=initial_sizing["footpath_width_m"], + median_width=resolved["median_width_m"], + no_of_footpaths=resolved["no_of_footpaths"], + ) + geometry = BridgeGeometry(span=span, width=layout.total_width) + layout.verify_bridge_width( + num_long_grid=layout_data["no_of_girders"], + ext_to_int_dist=layout_data["girder_spacing"], + edge_beam_dist=layout_data["deck_overhang"], + tol=1e-3, + ) + + return { + "span_m": geometry.span, + "width_m": geometry.width, + "bounds": geometry.bounds(), + "cross_section": layout.describe(), + } + + def _prepare_or_run_analysis( + self, + initial_sizing: Dict[str, Any], + run_analysis: bool, + include_live_load: bool, + ) -> Dict[str, Any]: + try: + from .analyser import BridgeGrillageModel # Imported lazily: heavy deps. + except Exception as exc: + return {"status": "skipped", "reason": f"analysis backend import failed: {exc}"} + + layout = initial_sizing["layout"] + span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) + skew = _as_float(_first_present(self.basic_inputs, KEY_SKEW_ANGLE, "skew_angle"), 0.0) + + engine = BridgeGrillageModel() + engine.L = span + engine.n_l = layout["no_of_girders"] + engine.ext_to_int_dist = layout["girder_spacing"] + engine.edge_dist = layout["deck_overhang"] + engine.angle = skew + engine.create_model() + + created_dead = [] + for method_name in ( + "create_self_weight_load", + "create_deck_load", + "create_wearing_course_load", + "create_footpath_load", + "create_crash_barrier_load", + "create_railing_load", + "create_median_load", + ): + method = getattr(engine, method_name) + load_case = method() + if load_case is not None: + created_dead.append(method_name) + + created_live = [] + if include_live_load: + for method_name in ( + "create_vehicle_load_cases", + "add_vehicle_load_cases_from_combinations", + "create_moving_vehicle_load_cases", + ): + getattr(engine, method_name)() + created_live.append(method_name) + + status = "prepared" + if run_analysis: + engine.analyze() + status = "completed" + + self._analysis_engine = engine + return { + "status": status, + "dead_load_steps": created_dead, + "live_load_steps": created_live, + } + + def _collect_analysis_results(self, analysis: Dict[str, Any]) -> Dict[str, Any]: + if analysis.get("status") == "skipped": + return {"status": "skipped", "reason": analysis.get("reason")} + if analysis.get("status") != "completed": + return { + "status": "not_run", + "note": "Analysis model is prepared. Run with run_analysis=True to produce results.", + } + return {"status": "completed", "note": "Use BridgeGrillageModel results/plot APIs for detailed tables."} + + def run( + self, + *, + run_analysis: bool = False, + include_live_load: bool = True, + cad_path: Optional[str] = None, + ) -> PlateGirderRunResult: + dto = self._build_dto() + initial_sizing = self._run_initial_sizing(dto) + geometry = self._build_geometry(initial_sizing) + analysis = self._prepare_or_run_analysis(initial_sizing, run_analysis, include_live_load) + analysis_results = self._collect_analysis_results(analysis) + design_result = design(dto) + + modifier_result: Dict[str, Any] = {"status": "skipped", "reason": "no modifier hook provided"} + if self.modifier_hook is not None: + temp = PlateGirderRunResult( + dto=dto, + initial_sizing=initial_sizing, + geometry=geometry, + analysis=analysis, + analysis_results=analysis_results, + design=design_result, + ) + modifier_result = self.modifier_hook(temp) + + cad_result: Dict[str, Any] = {"status": "skipped"} + if cad_path: + export_step(dto, cad_path) + cad_result = {"status": "generated", "path": cad_path} + + report_result = section_report(dto) + + return PlateGirderRunResult( + dto=dto, + initial_sizing=initial_sizing, + geometry=geometry, + analysis=analysis, + analysis_results=analysis_results, + design=design_result, + modifier=modifier_result, + cad=cad_result, + report=report_result, + ) + + +def run_plategirder_bridge( + basic_inputs: Optional[Mapping[str, Any]] = None, + additional_inputs: Optional[Mapping[str, Any]] = None, + *, + run_analysis: bool = False, + include_live_load: bool = True, + cad_path: Optional[str] = None, + modifier_hook: Optional[Callable[[PlateGirderRunResult], Dict[str, Any]]] = None, +) -> Dict[str, Any]: + """Functional wrapper around PlateGirderBridge.""" + bridge = PlateGirderBridge( + basic_inputs=basic_inputs, + additional_inputs=additional_inputs, + modifier_hook=modifier_hook, + ) + return bridge.run( + run_analysis=run_analysis, + include_live_load=include_live_load, + cad_path=cad_path, + ).to_dict() From ad50912b01d0dcc414657be48045a20b2f225e52 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Tue, 3 Mar 2026 21:49:37 +0530 Subject: [PATCH 063/225] Include new message icons --- .../desktop/resources/resources.qrc | 6 +- .../desktop/resources/resources_rc.py | 2296 ++++++++++------- .../desktop/resources/vectors/msg_about.svg | 11 + .../resources/vectors/msg_critical.svg | 3 + .../desktop/resources/vectors/msg_success.svg | 19 + .../desktop/resources/vectors/msg_warning.svg | 12 + 6 files changed, 1372 insertions(+), 975 deletions(-) create mode 100644 src/osdagbridge/desktop/resources/vectors/msg_about.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/msg_critical.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/msg_success.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/msg_warning.svg diff --git a/src/osdagbridge/desktop/resources/resources.qrc b/src/osdagbridge/desktop/resources/resources.qrc index 768af0f26..0201236c7 100644 --- a/src/osdagbridge/desktop/resources/resources.qrc +++ b/src/osdagbridge/desktop/resources/resources.qrc @@ -36,6 +36,10 @@ vectors/cross_section_closed_light.svg vectors/top_view_open_light.svg vectors/top_view_closed_light.svg + vectors/msg_success.svg + vectors/msg_warning.svg + vectors/msg_critical.svg + vectors/msg_about.svg - + \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/resources_rc.py b/src/osdagbridge/desktop/resources/resources_rc.py index 17936b672..e5be7bf4e 100644 --- a/src/osdagbridge/desktop/resources/resources_rc.py +++ b/src/osdagbridge/desktop/resources/resources_rc.py @@ -1,90 +1,91 @@ # Resource object code (Python 3) # Created by: object code -# Created by: The Resource Compiler for Qt version 6.10.1 +# Created by: The Resource Compiler for Qt version 6.10.2 # WARNING! All changes made in this file will be lost! from PySide6 import QtCore qt_resource_data = b"\ -\x00\x00\x04\xcf\ +\x00\x00\x04\xd8\ (\ -\xb5/\xfd`\xf5\x13-&\x00v\xac\x88 \xe0Z7\ -\x94\xee\xe5\xddk}\xaaM\xde\x1bp\xf6\xcaXi\xb5\ -\xbc9+\x1dP\xe7I\x19\xcc\xb0A>\x1c\x85\x00~\ -\x00|\x00\xa6\xc22\xd1,f\x05-\xc6\xa0\x07\x00\x88\ -\x91\xb7\x8e#5[\xa6\xe6\xdc\xadd\xa6\xe5\x968Q\ -\x0d\x12\xf0\xb1Z\xac\xbde&~\xcc8\xb28\x05\x9c\ -\xcb\xd8b1\x1b\xef\x893\x99\x12i\xe80g\xe1\xf1\ -\xd6\xd1\xadT\xe3!\x88\xf5T\xc57A\xbe5\xfdo\ -\xe0\xdf\xa4\xe3|\x17?$\x00\x00D\xc1I`\x86\x92\ -\xb1d(^\x07\xe4\xa4\xce+^)\xb3\x99\x5c>\x1c\ -\xcf\x1c\xf4<\x0c\xc8\xfbH \xc83\xa1\x8b_&\x15\ -\x10\xc7\xdd\x01\x12/ \x020_d\x1a\x9aJ\xd3\x93\ -\xd44\xfd\xa6\xd6,\x7f\x072\xed\xce\xfb\x1a\x02\xb9\xd2\ -\x07\x84\x16\x7f\x85\xe0\x066\x9f\xce=I\xcb\x0a\xf3\xf1\ -E\xc6\xaf0\x8a\xdb\xb6\x8d\x22\xeb\xa3\x1a\xa8=VV\ -\xc6\x9b\x8au\xbc\x95\xe3\x1a\x225\xf5\xb6\xc1\xba\xb7\xae\ -\x0d\xf2\x16\x0eS\xe2\xa3(ni\x88\xedE\xab\xbc\x1d\ -/Eq\xdc\xae\xd6\x04y\xf2SD\x13\xe7\xf6\xfd\xf2\ -\x92\xd5\xd2\xcc\xb5\xf3\x9b8\x9b*}\xd6\x91\xe6\xec_\ -Ug\xfb\xe2S+\xa7\x86V\xd6[5\x01L\xe2/\ -`?\xa4\x9fwow\x05K\xbc\xf5I\x09\xec'\xc7\ -:\x12\x9d\xdb\xad\xdf\x0b\x86GF\xcb\xb2\xe1\xef\x8ab\ -]\xbc\xf7\xd9\xa1\xf4\xd9\xb1\xbf\xfa\xcf_\xd3n\xc3\x01\ -\xc1P\xe7\xdf\xe4\xe3m\xbcM\x91\xf8\x8b/@\xbb_\ -\x16\x1eM\x9c+\x0f\x16\xce\x99f%\xde\x1b\x87\x9as\ -&\xdey\x9f\xdefZ\xa6\xe6k\xcd\xd2\xf0\x12\x0b\x7f\ -xZ\x7f6\xb7\xf8\xf65\xb7\xefgj\xeaK\xf3v\ -\x8e\x11~\xffY\xfbC\xa7\x9f\xa9F\x98\xa7\xfe\xb1b\ -\xc2S\x1bn\xb5\x99_\x9c?\x95iEsh[v\ -kY\xbeF\x9b\xe4\xad\xfdQ\xdb\xb3\xeb3\xe9\x9f\x17\ -\x10\x1e\xd1,\x15\xeb\xce\xbf\xe22\xed\xac\xc5Y\x04=\ -\xbe\xb8t\x83\x80\xf5\x1b\xcf_\xf3\x89)\x02\xe7\x5c\xb6\ -\x96\xf4\xf4\xd8u\xf4v\xeb\xc1\xd8\xa6\xf0\xd1d\x11\x85\ -\x94\x88+\x99. \xfe\xd6\xaf\x0b\x15\x90M\x13\xc5M\ -\x5c8^cK\xc9x\xeb\xff\xb4h\x83&\x02\x81 \ -\xa8\xe1\xa9\x224$\x22IJ\x924\x07a\x88B\x94\ -\x92\xd89\xbc\x01\xc2\x800\xccp\x18\xc2 \x0c\x8a\x08\ -\x10!\xc4(\xe2\x18!\x81H\xa0\xd2H\x93\x16\xd6\x9b\ -\x04\xc4\x11\x99\xc8,jq\xc7\xcf\x18\x0d\x01\x9eq\x90\ -F\xd2\xf0\xae\xc3O@\x80\xa4\xf3\x99#a\xd1\xd9\xc7\ -\x9c\xce\xf0YdV@\x1c\x0a\xc7>D\x16\xb5\x8d\x8d\ -\xb6\xb5\xef\x8azf\x0b\xb6\xe7#\x02O\xa51\xc1\x90\ -\xbe\xdf\xa3\xaf\x1e\xcf\x1e$/\xc3-/\xd9o\xd0\xa7\ -\xdd\x00\x0a\x89\x11\xbb[\x81\x22\xaa\xaa\xe4\x82\x06:\xcb\ -\xc60E\xc9\x91\x88\x0b\xa2\xbc\x8c\x10\xd2E\x22\xcf\x1f\ -\xff\xd8k\x17\x0a\xbd\xe1\xdf\xfe\xb1\xe7\x12o\xc4\xb5\x08\ -)(3\x22\x9b\xc9\x85<\xdb\xd8\x91\xc6\xe8\xa4\x16\x9e\ -k\x85(\xd7\x16\x80l\xa9\xfc\x08\xff\xaa\x22\xc6M\xf7\ -)O\x06b{\x05\xfe\x06'\xae\x84\x11\xb7Gb\x99\ -\x9b\x84\xbc\x05G\xdd*\x86\x82z\xdcV\xa1\xbdb;\ -\xa0 \xd9\xa1\x85\xc4'[\x18H\x9b\xca\xdd,\x8c\x88\ -\xcfZ\xde\xc3\x09\xd31,3&\x00g-<\x98\xd5\ -;\x8c\x8a\xc0I\xf8\xb0$\x8a\xd7\x9c\xeaZ\xa8\x81\x0b\ -\xe9\x8f\xd9\x1cp\x8d\x16c^\xdd\x0d}\x88}\xe0\xce\ -\xd0o\xf9O\x0c\x18\xe8_\xd4\xd7\x9f\x014GD\xd3\ -g\xde\xaa\x09\x1f?\xa8\xae\xae\x99\xc5\xfa\x9c\xc3\xff\x19\ -(\xd6@x\x1d\xfc\xd3\xa9nW #/\x8d\x19\x1e\ -\xc8\xf05\x15\x81\x92,j\x11\xd6\xa1\xa6\xd1\xd9\x90\xba\ -\x8eQ\xe9\x1d\x9eY\xbes8\xc1\x97&\xca\x13+\x9d\ -\xb3\xe2\x0e\xdb\x8fv?G,\x98\xd0\xd0\xb6\x1b\xc1\xe9\ -\xd6(\xcb\xc0\x81q\x1e\xbb\xaa!>n\xe1\xf3\xb2\xd7\ -\xcc&2\x19\x1b\x06)4\x11$P\xd4)\xc7}]\ -zx#\x11\xca{r\xf3\xe4\x90h\xca\x0e\xf1\xd0\xf0\ -\xd0\xb0m\x80\xc4cf\xc1R\xf3l\xe5\xa0\x83\xf1 \ -\xbe\xb3\x8c\xec\xc2\xe1\x97\xaf\xe0\x07\xea2U$H\x8c\ -\x055\xca7\xd7I\xf0\xe9\x84\x1d\xc7R\x017\x89\xe1\ -\xfc\xf1\xf3]7\x85\x86\xbd\x0e\xe5@\x17\xbe\xde\x84\xe8\ -De^}\xfe\xd5\xcc\x9a \xcc\x9a(\xb9\x8a\xc5\xa6\ -\xae4\xc2g\x0a\x7f\xd7\x16%7\xb8Q\xa6\xae\xb0\x04\ -\x8a\xbc\xeb \xd8\x94\xe1\xa1\xb4\xe1W\xea\xee=\x87z\ -\x86\xd7 \x8f6`\xcd\xab\xd8\x18/(_I\x09J\ -d-3Y6?\x1f\xbc\xb0?\x0c\xdfxgo\xf2\ -\x1a2\x05\x00 6ov\xc5*<\x07\x01\x9a\x89\xe4\ -.G\xb6\xf5\xe3\xd66\xe8\x91\xac\xed\xdaIu\x17\xaa\ -/6\xc0\xb0 \x9f\xb9|x\xa0Y(\xdf\xdf\x17!\ -\x22B\xfb\xae=&.l\x8a\xe4\xdf\xb8\x9b\x0e\x12\xb4\ -\x1ft\xe4\xc1\xc1Qw0\xd6\x91\xd2\xb1\xe6\x01\ +\xb5/\xfd`\xe8\x14u&\x00&,\x88 \xd0\x5c7\ +\x98j\xfb\xe6\xb5.\xc56n\x15\xd6t\x0a+\x9d\xc1\ +\x15\x8e\x8a\xa8\xc6\xde/\xa3\xd4\xd3\xcb\x80\x12\x85\x00~\ +\x00|\x00\x17\xcav1\xab\xc8b,\xfa\xcc\xc8[\xc7\ +\x91\x9a/s\xf3\xeeV2\xd3\x92S\xa4\xe8\x16\x11\xf8\ +X-\xd6\xfe2\x15?f,a\xa4\x04\xdeel\xb1\ +\xa8\x8d\xf7\xc4\x99\x5c\x894t\x99\xbb\xf0xk\xe9V\ +\xba\xf9\x14\xc4\x9a\xaa\xe2\x9b!\xdf\x9a>Hp\x90\xe2\ +u@\x8c#\x14\x80\x00 \x900\xb8I\xa4\xa9h.\ +\x9a\xca\xe7\x09\xb9\xc9s\xcbw\xd2p(\x18P\xc75\ +\x17}_&\xf4\x81&Q\xc85#\x8cc(\x96P\ +\xc7\xdd\x01\x81\x89\x1b\x12\x014D\x95\xa8'\xa9\x89\xfa\ +M\xadY\xfe\x16d\xea\x9d\xf77\x05\xb2\xa5\x11\x09-\ +~+\xd1\x11l>\xbd{\x92\x96U\xe6\xe3\x8b\x8do\ +aU\xc7q[E\xd6W9T{\xac\xae\x8c7\x15\ +\xebxk\xd79Djj\x8e\xdbd\xde[\xd8\x0e\xf9\ +\x0b\x87+\xf1U\x15\xb74\xc4\x16\xb3Y\xde\x8e\x97\xaa\ +\xbanWk\x86>\xf9+$\x8aw\xfb~y\xc9j\ +\xa9\x06\xdb\xf9M\x9cM\x96>\xebH\xb3\xf6\xb1\xaa\xb5\ +}q\xeae.\x02[Yo\xdd\x080\x89A\x81\xfd\ +\x90\x82\xee\xbd\xddUT\xe2\xad\xcf\x8a`?9\xd6\x92\ +\xe8\xdd~\xfdf4\x5c2Z\x1c\xbal\xf8\xbb\xaa\x5c\ +\x17\xef}z*}z\xec\xb7\x1e\xf4\xd7\xd4\xe3tD\ +\xa2\x91\xe7 \x05\xf4q>n\xa1\xf8\x8b/C\xbb_\ +\x17\x1eM\x9c-\x10\x17\xce\x99j%\xde\x1b\x87&\xde\ +y\xa7\xdej[\xa6\xe6\xeb\xed\xe2\xf8\x14\x0c\x87|Z\ +\x7f6\xb7\xf8\xf6u\xb7\xefgj\xeaK\xf3\xf6\xae\xc1\ +\xc8\x01~\xff]\xfbC\xa7\x9f\xa9N\x98\xa7\xfe\xb1f\ +\xc2S\x1fn\xb5\x9a_\x9c\x7f\x95\xa9e{l\x9cv\ +kY\xfef\xa3\xe4\xad\xfdU\xdb3N9\xec3\xe9\ +\xa0K6K\xc5\xba\xf3\xb7\xbaL=kq\x16C\x8f\ +/.\xfd0p=\xc7\xf3\xd7|\xe2\xca\xc0;\x98\xad\ +%MAv\x1d\xbf\xfdz\xd1\x8c[\xf8\x88\xb2+\x11\ +[4\xfd\xb7\x82^\xb8\x88p\x9b(r\x22\xe3\xf1\x1a\ +\xdbJ\xc6[?\xe8E\x1dT\x91r\x04\x81$\xa8\xe1\ +\xa9\x224#\x22\x92\x14$Isq\x88B\x14\x92\x16\ +\xb2\xbc\x01\xb2X@\x85R,\xc2 \x10\x86\x08\x95\x80\ +\x10L\x882\xc6\x04\x22\x81\x92 \x125\xad\x01\x9e\xa4\ +\x92\x89d\xdc\xe6x\x05\xf1Ct{1!\xff\x8dN\ +\xd1D44\xf5\xc0$\x07\x17\xa8R\xcam\xdb\xc9\xaa\ +x\x86e1\xb3\x0e$%\x94\x03\xf0\xc6\xee\xbbz\xfa\ +\xfa9\xc7\xfaU\x901\xd4\x17\x22\x96\x05\x1aGn\x96\ +\x98\x00B\xaaa\x8fC\xc1h\xb6\xb50\xc4=\xd1\xaa\ +\xcb@\x1b\xd5f\x82\xdd\x03{\xb4u\xcb\x8d\x1a\xd4\x96\ +\xc1\xa6\x8bK\x10v;g\xdb\x13\xb2\x86)T\xfa\xfa\ +\x84\xc0\xf2\xdb\xd3)\x1a\xaey\xdd\xf6\x00\x0e\xa4XP\ +\xc2\x8d\x92`\x0aF?\xd5\xca\xe6c0\x81&\xa9I\ +\xed\xb6\xc27\xf6\x06\x8c\xb9\xaf\xef\x1d\xfcmh\x8c\xe7\ +\xc9\x8eY$\xeb0\x8ei\xe4X)\x07\xb5w,\x00\ +3\xb3\xfczP\x1d\x5c]Rk3\xb1\x86\x9c\xda\xaa\ +Sz\xc7\xf6\xa3^\xbb\x0f\x8b\xcf\xd3\xb5\x06\x5c;\xce\ +\x83\x9eb\xc6a\xc2\xc4\xd33g\xc7\xa5R\x10%W\ +\xa3\xaa\xe4\x1c\xf5l\xbb\x22#\xc5\x0b\x9b\xff|\x13)\ +\xb0\xdc4XH\xba\xb3A\xa3\xc2\xda\xb7\x7fg\x07\xa8\ +\x98wV\xd10\x0f\xb8\x1f\x18{\xa9\xb9\xaf\xeb\x92\xe1\ +ZT\x03\x10\x85y\xa8\xe1\x88\x08\xbaI\xe9\x18\x5c?\ +]!g\x98\x04\xb3\x90\xc6\x9as\xc3\x9fq\xfdK\x98\ +\xf8:\xf4gX\x03\x02\x80P=\x19\x0f\x93\xb2\xcdI\ +.\x93\x9d\xcfJ\xd2\xd9\x95\x05\x16\xe0\xaa\x8c\xb6\xe5\x06\ +b\xd2\xdc2\x8e\x1bP\xa7\xc9{\xf0\xff^17\xa6\ +\xc0?\xa3\xd9\xcc7\x02\x15\xf1\xc6\x14P\xe7\x8b\xf8\x95\ +\x95\xcaD\xb2\xf8\xf0\x8d\x951\x1f\x97:\x11\xa5\xe6\xbf\ +K\xd5O\xc7\x10Fm\x97\xc4\xf5\xe8\xce\xf2\xcc\x9cU\ +\x02\x8d\x17\xb7\x9a\xc6\xd6\x16\x0c\xe4\x0e;&\x13\x91\x16\ +\xbd\x07\xcf'\x0fF\xc3\xdbU^\x9c]wp\x0c\x02\ +\xa2\xdc\x19\xdfL\xe8\x8f\xb0d\xb8q(>\xbc\x07\x22\ +\xe1\x80`\xc1m\xe4\x11\x9d2\xe9}\xbe\xf4a\x11\xdd\ +\xfe\xac\xab]x\x18\x0eB\x12z/`\xbfq0+\ +\x85\x9f\x18\xe4Tk\x84\xe6\xdfz\xa5g\xaa|ow\ +=\xd18\x13\x8c\xc0e9\ -\x00\x00\x02*\ +\x00\x00\x02-\ <\ svg width=\x2240\x22 h\ eight=\x2240\x22 viewB\ ox=\x220 0 40 40\x22 f\ ill=\x22none\x22 xmlns\ =\x22http://www.w3.\ -org/2000/svg\x22>\x0a<\ -path d=\x22M7.77792\ - 35C7.01403 35 6\ -.36 34.7281 5.81\ -583 34.1842C5.27\ -194 33.64 5 32.9\ -86 5 32.2221V7.7\ -7792C5 7.01403 5\ -.27194 6.36 5.81\ -583 5.81583C6.36\ - 5.27195 7.01403\ - 5 7.77792 5H32.\ -2221C32.986 5 33\ -.64 5.27195 34.1\ -842 5.81583C34.7\ -281 6.36 35 7.01\ -403 35 7.77792V3\ -2.2221C35 32.986\ - 34.7281 33.64 3\ -4.1842 34.1842C3\ -3.64 34.7281 32.\ -986 35 32.2221 3\ -5H7.77792ZM7.777\ -92 29.5V23V7.777\ -92V32.2221V29.5Z\ -M16.3054 32.2221\ -H32.2221V7.77792\ -H16.3054V32.2221\ -Z\x22 fill=\x22black\x22/\ ->\x0a\x0a\ -\x00\x00\x01V\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a\x0d\x0a\ +\x00\x00\x01c\ <\ svg width=\x2222\x22 h\ eight=\x2222\x22 viewB\ -ox=\x220 0 22 22\x22\x0a \ - xmlns=\x22http:\ -//www.w3.org/200\ -0/svg\x22\x0a shap\ -e-rendering=\x22cri\ -spEdges\x22>\x0a\x0a \x0a\x0a \x0a\x0a\ -\x00\x00\x0e,\ +ox=\x220 0 22 22\x22\x0d\x0a\ + xmlns=\x22http\ +://www.w3.org/20\ +00/svg\x22\x0d\x0a sh\ +ape-rendering=\x22c\ +rispEdges\x22>\x0d\x0a\x0d\x0a \ + \x0d\x0a\x0d\x0a \ + \x0d\x0a\ +\x0d\x0a\ +\x00\x00\x0e;\ <\ svg width=\x22149\x22 \ height=\x22141\x22 vie\ @@ -168,251 +170,338 @@ 1\x22 fill=\x22none\x22 x\ mlns=\x22http://www\ .w3.org/2000/svg\ -\x22>\x0a\x0a\x0a\x0a\x0a\x0a<\ -path d=\x22M1.50342\ - 84.0288H102.954\ -V93.6366H1.50342\ -V84.0288Z\x22 fill=\ -\x22#91B014\x22/>\x0a\x0a\x0a<\ -path d=\x22M45.2158\ - 45.9443V46.9182\ -V57.508H147.665V\ -45.9443H45.2158Z\ -M47.1635 47.8993\ -H145.718V55.5603\ -H47.1635V47.8993\ -Z\x22 fill=\x22black\x22/\ ->\x0a\x0a\x0a\x0a\x0a\x0a\ -\x00\x00\x01V\ +\x22>\x0d\x0a\x0d\x0a<\ +path d=\x22M130.212\ + 67.3074L115.887\ + 51.8725L130.121\ + 36.1514L130.212\ + 67.3074Z\x22 fill=\ +\x22black\x22/>\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\ +\x0d\x0a\x0d\x0a\ +\x0d\x0a\x0d\x0a\ +\x00\x00\x01c\ <\ svg width=\x2222\x22 h\ eight=\x2222\x22 viewB\ -ox=\x220 0 22 22\x22\x0a \ - xmlns=\x22http:\ -//www.w3.org/200\ -0/svg\x22\x0a shap\ -e-rendering=\x22cri\ -spEdges\x22>\x0a\x0a \x0a\x0a \x0a\x0a\ +ox=\x220 0 22 22\x22\x0d\x0a\ + xmlns=\x22http\ +://www.w3.org/20\ +00/svg\x22\x0d\x0a sh\ +ape-rendering=\x22c\ +rispEdges\x22>\x0d\x0a\x0d\x0a \ + \x0d\x0a\x0d\x0a \ + \x0d\x0a\ +\x0d\x0a\ +\x00\x00\x05&\ +<\ +?xml version=\x221.\ +0\x22 encoding=\x22utf\ +-8\x22?>\x0a\x0a\ +<\ +/svg>\ \x00\x00\x02\xfe\ <\ svg xmlns=\x22http:\ @@ -463,41 +552,41 @@ V-636ZM226.67-14\ 6.67v-422.66 422\ .66Z\x22/>\ -\x00\x00\x02\x04\ +\x00\x00\x02\x07\ <\ svg width=\x2240\x22 h\ eight=\x2240\x22 viewB\ ox=\x220 0 40 40\x22 f\ ill=\x22none\x22 xmlns\ =\x22http://www.w3.\ -org/2000/svg\x22>\x0a<\ -path d=\x22M7.77792\ - 35C7.01403 35 6\ -.36 34.7281 5.81\ -583 34.1842C5.27\ -194 33.64 5 32.9\ -86 5 32.2221V7.7\ -7792C5 7.01403 5\ -.27194 6.36 5.81\ -583 5.81583C6.36\ - 5.27195 7.01403\ - 5 7.77792 5H32.\ -2221C32.986 5 33\ -.64 5.27195 34.1\ -842 5.81583C34.7\ -281 6.36 35 7.01\ -403 35 7.77792V3\ -2.2221C35 32.986\ - 34.7281 33.64 3\ -4.1842 34.1842C3\ -3.64 34.7281 32.\ -986 35 32.2221 3\ -5H7.77792ZM7.777\ -92 23.6946H32.22\ -21V7.77792H7.777\ -92V23.6946Z\x22 fil\ -l=\x22black\x22/>\x0a\x0a\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a\x0d\x0a\ \x00\x00\x021\ <\ svg xmlns=\x22http:\ @@ -613,142 +702,144 @@ 3 65.67 65.66L61\ 2-612.33Z\x22/>\ -\x00\x00\x01U\ +\x00\x00\x01b\ <\ svg width=\x2222\x22 h\ eight=\x2222\x22 viewB\ -ox=\x220 0 22 22\x22\x0a \ - xmlns=\x22http:\ -//www.w3.org/200\ -0/svg\x22\x0a shap\ -e-rendering=\x22cri\ -spEdges\x22>\x0a\x0a \x0a\x0a \x0a\x0a\ -\x00\x00\x05L\ +ox=\x220 0 22 22\x22\x0d\x0a\ + xmlns=\x22http\ +://www.w3.org/20\ +00/svg\x22\x0d\x0a sh\ +ape-rendering=\x22c\ +rispEdges\x22>\x0d\x0a\x0d\x0a \ + \x0d\x0a\x0d\x0a \ + \x0d\x0a\x0d\ +\x0a\ +\x00\x00\x05O\ <\ svg width=\x2240\x22 h\ eight=\x2240\x22 viewB\ ox=\x220 0 40 40\x22 f\ ill=\x22none\x22 xmlns\ =\x22http://www.w3.\ -org/2000/svg\x22>\x0a<\ -path d=\x22M20.0001\ - 15.1667L13.7222\ - 21.4722H26.3055\ -L20.0001 15.1667\ -ZM20.0001 3.3334\ -1C22.287 3.33341\ - 24.4444 3.77091\ - 26.4722 4.64591\ -C28.4999 5.52091\ - 30.2686 6.713 3\ -1.778 8.22216C33\ -.2872 9.73161 34\ -.4792 11.5002 35\ -.3542 13.528C36.\ -2292 15.5558 36.\ -6667 17.7131 36.\ -6667 20.0001C36.\ -6667 22.3056 36.\ -2292 24.4723 35.\ -3542 26.5001C34.\ -4792 28.5279 33.\ -2872 30.2917 31.\ -778 31.7917C30.2\ -686 33.2917 28.4\ -999 34.4792 26.4\ -722 35.3542C24.4\ -444 36.2292 22.2\ -87 36.6667 20.00\ -01 36.6667C17.69\ -45 36.6667 15.52\ -79 36.2292 13.50\ -01 35.3542C11.47\ -23 34.4792 9.708\ -41 33.2917 8.208\ -41 31.7917C6.708\ -41 30.2917 5.520\ -91 28.5279 4.645\ -91 26.5001C3.770\ -91 24.4723 3.333\ -41 22.3056 3.333\ -41 20.0001C3.333\ -41 17.7131 3.770\ -91 15.5558 4.645\ -91 13.528C5.5209\ -1 11.5002 6.7084\ -1 9.73161 8.2084\ -1 8.22216C9.7084\ -1 6.713 11.4723 \ -5.52091 13.5001 \ -4.64591C15.5279 \ -3.77091 17.6945 \ -3.33341 20.0001 \ -3.33341ZM20.0001\ - 6.11133C16.1298\ - 6.11133 12.8474\ - 7.46313 10.153 \ -10.1667C7.45855 \ -12.8704 6.11133 \ -16.1481 6.11133 \ -20.0001C6.11133 \ -23.8704 7.45855 \ -27.1527 10.153 2\ -9.8472C12.8474 3\ -2.5416 16.1298 3\ -3.8888 20.0001 3\ -3.8888C23.852 33\ -.8888 27.1298 32\ -.5416 29.8334 29\ -.8472C32.537 27.\ -1527 33.8888 23.\ -8704 33.8888 20.\ -0001C33.8888 16.\ -1481 32.537 12.8\ -704 29.8334 10.1\ -667C27.1298 7.46\ -313 23.852 6.111\ -33 20.0001 6.111\ -33Z\x22 fill=\x22black\ -\x22/>\x0a\x0a\ -\x00\x00\x01U\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a\x0d\x0a\ +\x00\x00\x01b\ <\ svg width=\x2222\x22 h\ eight=\x2222\x22 viewB\ -ox=\x220 0 22 22\x22\x0a \ - xmlns=\x22http:\ -//www.w3.org/200\ -0/svg\x22\x0a shap\ -e-rendering=\x22cri\ -spEdges\x22>\x0a\x0a \x0a\x0a \x0a\x0a\ -\x00\x00\x08'\ +ox=\x220 0 22 22\x22\x0d\x0a\ + xmlns=\x22http\ +://www.w3.org/20\ +00/svg\x22\x0d\x0a sh\ +ape-rendering=\x22c\ +rispEdges\x22>\x0d\x0a\x0d\x0a \ + \x0d\x0a\x0d\x0a \ + \x0d\x0a\x0d\ +\x0a\ +\x00\x00\x08+\ <\ svg width=\x2236\x22 h\ eight=\x22922\x22 view\ @@ -756,131 +847,221 @@ fill=\x22none\x22 xml\ ns=\x22http://www.w\ 3.org/2000/svg\x22>\ -\x0a\x0a\x0a<\ -/svg>\x0a\ +\x0d\x0a\x0d\x0a\ +\x0d\x0a\x0d\x0a\ +\x00\x00\x05~\ +<\ +svg width=\x2224\x22 h\ +eight=\x2224\x22 viewB\ +ox=\x220 0 24 24\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +g clip-path=\x22url\ +(#clip0_1945_994\ +)\x22>\x0a\x0a\x0a
\x0a\x0a<\ +clipPath id=\x22cli\ +p0_1945_994\x22>\x0a\x0a\x0a\x0a\x0a\ \x00\x00\x02\xde\ <\ svg xmlns=\x22http:\ @@ -967,7 +1148,7 @@ .33 236 97.33ZM4\ 80-480Z\x22/>\ \ -\x00\x00\x0aR\ +\x00\x00\x0aV\ <\ svg width=\x2236\x22 h\ eight=\x22918\x22 view\ @@ -975,253 +1156,352 @@ fill=\x22none\x22 xml\ ns=\x22http://www.w\ 3.org/2000/svg\x22>\ -\x0a\x0a\x0a\ -\x0a\ -\x00\x00\x05L\ +\x0d\x0a\x0d\x0a\ +\x0d\x0a\x0d\x0a\ +\x00\x00\x06\x0f\ +<\ +?xml version=\x221.\ +0\x22 encoding=\x22iso\ +-8859-1\x22?>\x0a\x0a\x0a\x0a\x09\x0a\x09\x0a\x0a<\ +path style=\x22fill\ +:url(#SVGID_1_);\ +\x22 d=\x22M44,24c0,11\ +.045-8.955,20-20\ +,20S4,35.045,4,2\ +4S12.955,4,24,4S\ +44,12.955,44,24z\ +\x22/>\x0a\x0a\x0a\x0a\ +\x00\x00\x05O\ <\ svg width=\x2240\x22 h\ eight=\x2240\x22 viewB\ ox=\x220 0 40 40\x22 f\ ill=\x22none\x22 xmlns\ =\x22http://www.w3.\ -org/2000/svg\x22>\x0a<\ -path d=\x22M20.0001\ - 15.1667L13.7222\ - 21.4722H26.3055\ -L20.0001 15.1667\ -ZM20.0001 3.3334\ -1C22.287 3.33341\ - 24.4444 3.77091\ - 26.4722 4.64591\ -C28.4999 5.52091\ - 30.2686 6.713 3\ -1.778 8.22216C33\ -.2872 9.73161 34\ -.4792 11.5002 35\ -.3542 13.528C36.\ -2292 15.5558 36.\ -6667 17.7131 36.\ -6667 20.0001C36.\ -6667 22.3056 36.\ -2292 24.4723 35.\ -3542 26.5001C34.\ -4792 28.5279 33.\ -2872 30.2917 31.\ -778 31.7917C30.2\ -686 33.2917 28.4\ -999 34.4792 26.4\ -722 35.3542C24.4\ -444 36.2292 22.2\ -87 36.6667 20.00\ -01 36.6667C17.69\ -45 36.6667 15.52\ -79 36.2292 13.50\ -01 35.3542C11.47\ -23 34.4792 9.708\ -41 33.2917 8.208\ -41 31.7917C6.708\ -41 30.2917 5.520\ -91 28.5279 4.645\ -91 26.5001C3.770\ -91 24.4723 3.333\ -41 22.3056 3.333\ -41 20.0001C3.333\ -41 17.7131 3.770\ -91 15.5558 4.645\ -91 13.528C5.5209\ -1 11.5002 6.7084\ -1 9.73161 8.2084\ -1 8.22216C9.7084\ -1 6.713 11.4723 \ -5.52091 13.5001 \ -4.64591C15.5279 \ -3.77091 17.6945 \ -3.33341 20.0001 \ -3.33341ZM20.0001\ - 6.11133C16.1298\ - 6.11133 12.8474\ - 7.46313 10.153 \ -10.1667C7.45855 \ -12.8704 6.11133 \ -16.1481 6.11133 \ -20.0001C6.11133 \ -23.8704 7.45855 \ -27.1527 10.153 2\ -9.8472C12.8474 3\ -2.5416 16.1298 3\ -3.8888 20.0001 3\ -3.8888C23.852 33\ -.8888 27.1298 32\ -.5416 29.8334 29\ -.8472C32.537 27.\ -1527 33.8888 23.\ -8704 33.8888 20.\ -0001C33.8888 16.\ -1481 32.537 12.8\ -704 29.8334 10.1\ -667C27.1298 7.46\ -313 23.852 6.111\ -33 20.0001 6.111\ -33Z\x22 fill=\x22white\ -\x22/>\x0a\x0a\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a\x0d\x0a\ \x00\x00\x02\xbb\ <\ svg xmlns=\x22http:\ @@ -1268,43 +1548,87 @@ 9.83Zm-293.33 60\ 8v-586.66 586.66\ Z\x22/>\ -\x00\x00\x02,\ +\x00\x00\x02/\ <\ svg width=\x2240\x22 h\ eight=\x2240\x22 viewB\ ox=\x220 0 40 40\x22 f\ ill=\x22none\x22 xmlns\ =\x22http://www.w3.\ -org/2000/svg\x22>\x0a<\ -path d=\x22M7.77792\ - 35C7.01403 35 6\ -.36 34.7281 5.81\ -583 34.1842C5.27\ -194 33.64 5 32.9\ -86 5 32.2221V7.7\ -7792C5 7.01403 5\ -.27194 6.36 5.81\ -583 5.81583C6.36\ - 5.27195 7.01403\ - 5 7.77792 5H32.\ -2221C32.986 5 33\ -.64 5.27195 34.1\ -842 5.81583C34.7\ -281 6.36 35 7.01\ -403 35 7.77792V3\ -2.2221C35 32.986\ - 34.7281 33.64 3\ -4.1842 34.1842C3\ -3.64 34.7281 32.\ -986 35 32.2221 3\ -5H7.77792ZM32.22\ -21 31.5V32.2221V\ -7.77792V14.5V31.\ -5ZM23.6946 32.22\ -21V7.77792H7.777\ -92V32.2221H23.69\ -46Z\x22 fill=\x22black\ -\x22/>\x0a\x0a\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a\x0d\x0a\ +\x00\x00\x02\x95\ +<\ +?xml version=\x221.\ +0\x22 encoding=\x22utf\ +-8\x22?>\x0a\x0d\x0a\ +\x0a\x0d\x0a\x0d\ +\x0a\x0d\x0a\x0d\x0a\x0d\ +\x0a\x0d\x0a\x0d\x0a\x0d
\x0a\x0d\ \x00\x00\x01\x9d\ <\ svg xmlns=\x22http:\ @@ -1438,6 +1762,10 @@ \x00t\ \x00o\x00p\x00_\x00v\x00i\x00e\x00w\x00_\x00c\x00l\x00o\x00s\x00e\x00d\x00_\x00l\ \x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ +\x00\x10\ +\x020hg\ +\x00m\ +\x00s\x00g\x00_\x00c\x00r\x00i\x00t\x00i\x00c\x00a\x00l\x00.\x00s\x00v\x00g\ \x00\x0e\ \x0d\xd6\xeag\ \x00l\ @@ -1482,6 +1810,10 @@ \x00n\x00p\x00u\x00t\x00s\x00_\x00l\x00a\x00b\x00e\x00l\x00_\x00l\x00i\x00g\x00h\ \x00t\x00.\x00s\x00v\x00g\ \x00\x0d\ +\x0f\xfd\xf4'\ +\x00m\ +\x00s\x00g\x00_\x00a\x00b\x00o\x00u\x00t\x00.\x00s\x00v\x00g\ +\x00\x0d\ \x005w\xc7\ \x00l\ \x00o\x00c\x00k\x00_\x00o\x00p\x00e\x00n\x00.\x00s\x00v\x00g\ @@ -1495,6 +1827,10 @@ \x00o\ \x00u\x00t\x00p\x00u\x00t\x00s\x00_\x00l\x00a\x00b\x00e\x00l\x00_\x00l\x00i\x00g\ \x00h\x00t\x00.\x00s\x00v\x00g\ +\x00\x0f\ +\x06r\xfb\x87\ +\x00m\ +\x00s\x00g\x00_\x00s\x00u\x00c\x00c\x00e\x00s\x00s\x00.\x00s\x00v\x00g\ \x00\x11\ \x03\xf9t'\ \x00a\ @@ -1510,6 +1846,10 @@ \x00o\ \x00u\x00t\x00p\x00u\x00t\x00_\x00d\x00o\x00c\x00k\x00_\x00a\x00c\x00t\x00i\x00v\ \x00e\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ +\x00\x0f\ +\x06\x94\x9a'\ +\x00m\ +\x00s\x00g\x00_\x00w\x00a\x00r\x00n\x00i\x00n\x00g\x00.\x00s\x00v\x00g\ \x00\x1c\ \x01\xd8[\xc7\ \x00l\ @@ -1529,58 +1869,66 @@ qt_resource_struct = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1a\ +\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1e\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x17\x00\x00\x00\x03\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x02\xee\x00\x00\x00\x00\x00\x01\x00\x004\x86\ -\x00\x00\x01\x9b\x97S.\xe9\ -\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x07\xb7\ -\x00\x00\x01\x9c-\x88\x8f\xb9\ -\x00\x00\x00H\x00\x00\x00\x00\x00\x01\x00\x00\x04\xd3\ -\x00\x00\x01\x9b\x97S.\xe8\ -\x00\x00\x03\x0e\x00\x00\x00\x00\x00\x01\x00\x007h\ -\x00\x00\x01\x9b\x97S.\xe7\ -\x00\x00\x03\xfe\x00\x00\x00\x00\x00\x01\x00\x00N2\ -\x00\x00\x01\x9b\x97S.\xe9\ -\x00\x00\x03p\x00\x00\x00\x00\x00\x01\x00\x00C\xf3\ -\x00\x00\x01\x9b\x97S.\xe8\ -\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x09\x11\ -\x00\x00\x01\x9b\x97S.\xe7\ -\x00\x00\x00\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x17A\ -\x00\x00\x01\x9c-\x88|\x8e\ -\x00\x00\x01\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xda\ -\x00\x00\x01\x9b\x97S.\xe9\ -\x00\x00\x03\x98\x00\x00\x00\x00\x00\x01\x00\x00IC\ -\x00\x00\x01\x9b\x97S.\xe8\ -\x00\x00\x04|\x00\x00\x00\x00\x00\x01\x00\x00Qy\ -\x00\x00\x01\x9b\x97S.\xe9\ -\x00\x00\x02z\x00\x00\x00\x00\x00\x01\x00\x00+\x02\ -\x00\x00\x01\x9c-\x88X\x0f\ -\x00\x00\x02P\x00\x00\x00\x00\x00\x01\x00\x00%\xb2\ -\x00\x00\x01\x9b\x97S.\xe8\ -\x00\x00\x00d\x00\x00\x00\x00\x00\x01\x00\x00\x05\x89\ -\x00\x00\x01\x9b\x97S.\xe8\ -\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x01\x00\x00L\x02\ -\x00\x00\x01\x9b\x97S.\xe9\ -\x00\x00\x01P\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x9d\ -\x00\x00\x01\x9b\x97S.\xe9\ -\x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x1d\xa5\ -\x00\x00\x01\x9b\x97S.\xe7\ -\x00\x00\x03<\x00\x00\x00\x00\x00\x01\x00\x009\x9d\ -\x00\x00\x01\x9b\x97S.\xe9\ -\x00\x00\x01.\x00\x00\x00\x00\x00\x01\x00\x00\x18\x9b\ -\x00\x00\x01\x9b\x97S.\xe9\ -\x00\x00\x02\xbc\x00\x00\x00\x00\x00\x01\x00\x00,[\ -\x00\x00\x01\x9b\x97S.\xe9\ -\x00\x00\x04<\x00\x00\x00\x00\x00\x01\x00\x00O\xd3\ -\x00\x00\x01\x9b\x97S.\xe8\ -\x00\x00\x02\x12\x00\x00\x00\x00\x00\x01\x00\x00$Y\ -\x00\x00\x01\x9c-\x88i\xfa\ -\x00\x00\x01\xf8\x00\x00\x00\x00\x00\x01\x00\x00!\x82\ -\x00\x00\x01\x9b\x97S.\xe8\ +\x00\x00\x034\x00\x00\x00\x00\x00\x01\x00\x00?\x8b\ +\x00\x00\x01\x9b&Y\xfe\xde\ +\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x07\xc3\ +\x00\x00\x01\x9c|\xb1\x92v\ +\x00\x00\x00H\x00\x00\x00\x00\x00\x01\x00\x00\x04\xdc\ +\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x03T\x00\x00\x00\x00\x00\x01\x00\x00Bm\ +\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x04\x8c\x00\x00\x00\x00\x00\x01\x00\x00a\xed\ +\x00\x00\x01\x9b&Y\xfe\xde\ +\x00\x00\x01.\x00\x00\x00\x00\x00\x01\x00\x00\x18\xd0\ +\x00\x00\x01\x9c\xafj\xfd\xb9\ +\x00\x00\x03\xda\x00\x00\x00\x00\x00\x01\x00\x00U\x0f\ +\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x03\xb6\x00\x00\x00\x00\x00\x01\x00\x00N\xfc\ +\x00\x00\x01\x9c\xafk\x18\xf4\ +\x00\x00\x04h\x00\x00\x00\x00\x00\x01\x00\x00_T\ +\x00\x00\x01\x9c\xafk9:\ +\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x09*\ +\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x00\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x17i\ +\x00\x00\x01\x9c|\xb1\x92u\ +\x00\x00\x01\xdc\x00\x00\x00\x00\x00\x01\x00\x00%<\ +\x00\x00\x01\x9b&Y\xfe\xde\ +\x00\x00\x04\x02\x00\x00\x00\x00\x00\x01\x00\x00Zb\ +\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x05\x0a\x00\x00\x00\x00\x00\x01\x00\x00e4\ +\x00\x00\x01\x9b&Y\xfe\xde\ +\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x000t\ +\x00\x00\x01\x9c|\xb1\x92t\ +\x00\x00\x02v\x00\x00\x00\x00\x00\x01\x00\x00+!\ +\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x00d\x00\x00\x00\x00\x00\x01\x00\x00\x05\x92\ +\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x04*\x00\x00\x00\x00\x00\x01\x00\x00]!\ +\x00\x00\x01\x9b&Y\xfe\xde\ +\x00\x00\x01v\x00\x00\x00\x00\x00\x01\x00\x00 \xfc\ +\x00\x00\x01\x9b&Y\xfe\xde\ +\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00#\x07\ +\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x03\x82\x00\x00\x00\x00\x00\x01\x00\x00D\xa2\ +\x00\x00\x01\x9b&Y\xfe\xde\ +\x00\x00\x01T\x00\x00\x00\x00\x00\x01\x00\x00\x1d\xfa\ +\x00\x00\x01\x9b&Y\xfe\xde\ +\x00\x00\x02\xe2\x00\x00\x00\x00\x00\x01\x00\x001\xda\ +\x00\x00\x01\x9b&Y\xfe\xde\ +\x00\x00\x04\xca\x00\x00\x00\x00\x00\x01\x00\x00c\x8e\ +\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x028\x00\x00\x00\x00\x00\x01\x00\x00)\xbb\ +\x00\x00\x01\x9c|\xb1\x92u\ +\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00&\xe4\ +\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x03\x14\x00\x00\x00\x00\x00\x01\x00\x00:\x09\ +\x00\x00\x01\x9c\xafj\xd4)\ \x00\x00\x00&\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x9b\x97S.\xe7\ +\x00\x00\x01\x9b&Y\xfe\xda\ " def qInitResources(): diff --git a/src/osdagbridge/desktop/resources/vectors/msg_about.svg b/src/osdagbridge/desktop/resources/vectors/msg_about.svg new file mode 100644 index 000000000..1ac95438a --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/msg_about.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/msg_critical.svg b/src/osdagbridge/desktop/resources/vectors/msg_critical.svg new file mode 100644 index 000000000..8a8e20409 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/msg_critical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/vectors/msg_success.svg b/src/osdagbridge/desktop/resources/vectors/msg_success.svg new file mode 100644 index 000000000..81c695d67 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/msg_success.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/vectors/msg_warning.svg b/src/osdagbridge/desktop/resources/vectors/msg_warning.svg new file mode 100644 index 000000000..15f3e0ff3 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/msg_warning.svg @@ -0,0 +1,12 @@ + + + \ No newline at end of file From d3f4b24fcf7baca0e1cdefe729a9582961249598 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Tue, 3 Mar 2026 21:51:32 +0530 Subject: [PATCH 064/225] feat: introduce custom titlebar, messagebox files and update imports --- .../desktop/ui/dialogs/additional_inputs.py | 2 +- .../desktop/ui/dialogs/custom_messagebox.py | 237 ++++++++++++++++++ .../ui/{utils => dialogs}/custom_titlebar.py | 2 +- .../desktop/ui/dialogs/deck_design.py | 2 +- .../desktop/ui/dialogs/steel_design.py | 2 +- .../ui/dialogs/tabs/custom_vehicle_dialog.py | 2 +- .../ui/dialogs/tabs/optimizable_field.py | 2 +- .../ui/dialogs/tabs/section_properties_tab.py | 2 +- .../sub_tabs/loading/load_combination_tab.py | 2 +- .../cross_bracing_details_tab.py | 2 +- .../end_diaphragm_details_tab.py | 2 +- .../section_properties/girder_details_tab.py | 2 +- .../dialogs/tabs/typical_section_details.py | 2 +- 13 files changed, 249 insertions(+), 12 deletions(-) create mode 100644 src/osdagbridge/desktop/ui/dialogs/custom_messagebox.py rename src/osdagbridge/desktop/ui/{utils => dialogs}/custom_titlebar.py (99%) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 093e3fa7b..a2e5674bb 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -15,7 +15,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style, create_action_button_bar from osdagbridge.desktop.ui.dialogs.tabs.typical_section_details import TypicalSectionDetailsTab from osdagbridge.desktop.ui.dialogs.tabs.optimizable_field import OptimizableField diff --git a/src/osdagbridge/desktop/ui/dialogs/custom_messagebox.py b/src/osdagbridge/desktop/ui/dialogs/custom_messagebox.py new file mode 100644 index 000000000..697f41cab --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/custom_messagebox.py @@ -0,0 +1,237 @@ +import sys +from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QPushButton, QHBoxLayout, QWidget, QSizeGrip +from PySide6.QtCore import Qt, QPoint +from PySide6.QtGui import QIcon, QPixmap + +# for standalone testing +# from custom_titlebar import CustomTitleBar +# from resources_rc import * + +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.resources.resources_rc import * + +class MessageBoxType: + Information = "Information" + Warning = "Warning" + Critical = "Critical" + Success = "Success" + About = "About" + +class CustomMessageBox(QDialog): + def __init__(self, title="Message", text="Message", informativeText="", buttons=["OK"], dialogType=MessageBoxType.Information): + super().__init__() + self.setWindowFlags(Qt.FramelessWindowHint) + self.setAttribute(Qt.WA_StyledBackground, True) + self.setWindowIcon(QIcon(":/images/osdag_logo.png")) + self.setObjectName("CustomDialog") + + # Base stylesheet for the dialog + self.setStyleSheet( + """ + QDialog { + background-color: #ffffff; + border: 1px solid #90AF13; + } + """ + ) + + # Make dialog resizable + self.setSizeGripEnabled(True) + + # Main layout + mainLayout = QVBoxLayout(self) + mainLayout.setContentsMargins(1, 1, 1, 1) + mainLayout.setSpacing(0) + + # Custom title bar + self.titleBar = CustomTitleBar() + self.titleBar.setTitle(title) + mainLayout.addWidget(self.titleBar) + + # Content widget + contentWidget = QWidget(self) + contentWidget.setObjectName("ContentWidget") + contentLayout = QVBoxLayout(contentWidget) + contentLayout.setContentsMargins(20, 20, 20, 20) + contentLayout.setSpacing(8) + + # Icon and text layout + contentInnerLayout = QHBoxLayout() + self.iconLabel = QLabel(self) + self.setIconForType(dialogType) + contentInnerLayout.addWidget(self.iconLabel) + + # Text layout + textLayout = QVBoxLayout() + self.textLabel = QLabel(text, self) + self.textLabel.setStyleSheet(""" + color: #1f1f1f; + font-size: 12px; + border: none; + background: transparent; + """) + self.textLabel.setAlignment(Qt.AlignLeft) + textLayout.addWidget(self.textLabel) + + if informativeText: + self.informativeLabel = QLabel(informativeText, self) + self.informativeLabel.setStyleSheet("font-size: 12px; color: #555555;") + self.informativeLabel.setAlignment(Qt.AlignLeft) + self.informativeLabel.setWordWrap(True) + textLayout.addWidget(self.informativeLabel) + + contentInnerLayout.addLayout(textLayout) + contentLayout.addLayout(contentInnerLayout) + + # Button layout + buttonLayout = QHBoxLayout() + buttonLayout.setSpacing(6) + buttonLayout.setContentsMargins(0, 8, 0, 0) + buttonLayout.addStretch() + + # Button styling based on dialog type + buttonStyle = self.getButtonStyleForType(dialogType) + self.buttonMap = {} + for buttonText in buttons: + button = QPushButton(buttonText, self) + button.setFixedHeight(30) + button.setStyleSheet(buttonStyle) + button.clicked.connect(lambda checked, txt=buttonText: self.buttonClicked(txt)) + buttonLayout.addWidget(button, alignment=Qt.AlignmentFlag.AlignRight) + self.buttonMap[buttonText] = button + + contentLayout.addLayout(buttonLayout) + mainLayout.addWidget(contentWidget) + + self.result = None + self.dialogType = dialogType + + def setIconForType(self, dialogType): + # Use Qt's standard icons (replace with custom paths if needed) + icon_map = { + MessageBoxType.Information: ":/vectors/msg_info.svg", + MessageBoxType.Warning: ":/vectors/msg_warning.svg", + MessageBoxType.Success: ":/vectors/msg_success.svg", + MessageBoxType.Critical: ":/vectors/msg_critical.svg", + MessageBoxType.About: ":/vectors/msg_about.svg" + } + icon_path = icon_map.get(dialogType, icon_map[MessageBoxType.Information]) + self.iconLabel.setPixmap(QIcon(icon_path).pixmap(32, 32)) + self.iconLabel.setFixedSize(34, 34) + self.iconLabel.setStyleSheet("margin-right: 2px;") + + def getButtonStyleForType(self, dialogType): + # Define button styles based on dialog type + style_map = { + MessageBoxType.Information: """ + QPushButton { + background-color: #2196F3; + color: white; + border: none; + border-radius: 5px; + padding: 5px 15px; + font-size: 12px; + } + QPushButton:hover { + background-color: #1E88E5; + } + QPushButton:pressed { + background-color: #1976D2; + } + """, + MessageBoxType.Warning: """ + QPushButton { + background-color: #FF9800; + color: white; + border: none; + border-radius: 5px; + padding: 5px 15px; + font-size: 12px; + } + QPushButton:hover { + background-color: #FB8C00; + } + QPushButton:pressed { + background-color: #F57C00; + } + """, + MessageBoxType.Critical: """ + QPushButton { + background-color: #F44336; + color: white; + border: none; + border-radius: 5px; + padding: 5px 15px; + font-size: 12px; + } + QPushButton:hover { + background-color: #E53935; + } + QPushButton:pressed { + background-color: #D32F2F; + } + """, + MessageBoxType.Success: """ + QPushButton { + background-color: #4CAF50; + color: white; + border: none; + border-radius: 5px; + padding: 5px 15px; + font-size: 12px; + } + QPushButton:hover { + background-color: #45A049; + } + QPushButton:pressed { + background-color: #3D8B40; + } + """, + MessageBoxType.About: """ + QPushButton { + background-color: #64B5F6; + color: white; + border: none; + border-radius: 5px; + padding: 5px 15px; + font-size: 12px; + } + QPushButton:hover { + background-color: #42A5F5; + } + QPushButton:pressed { + background-color: #2196F3; + } + """ + } + return style_map.get(dialogType, style_map[MessageBoxType.Information]) + + def buttonClicked(self, buttonText): + self.result = buttonText + self.accept() + + def exec(self): + super().exec() + return self.result + + +# Test different dialog types +# if __name__ == "__main__": +# app = QApplication(sys.argv) +# dialog_types = [ +# (MessageBoxType.Information, "Information", "This is an information message!", "Additional details here.", ["OK"]), +# (MessageBoxType.Warning, "Warning", "This is a warning message!", "Proceed with caution.", ["OK", "Cancel"]), +# (MessageBoxType.Success, "Success", "Successfully build This Application", "Version 1.0, Created by Me", ["OK"]), +# (MessageBoxType.Critical, "Critical", "A critical error occurred!", "Please check your system.", ["Retry", "Cancel"]), +# (MessageBoxType.About, "About", "About This Application", "Version 1.0, Created by Me", ["OK"]) +# ] +# for dialog_type, title, text, informativeText, buttons in dialog_types: +# msgBox = CustomMessageBox( +# title=title, +# text=text, +# informativeText=informativeText, +# buttons=buttons, +# dialogType=dialog_type +# ) +# result = msgBox.exec() +# print(f"{dialog_type} Dialog result: {result}") \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/utils/custom_titlebar.py b/src/osdagbridge/desktop/ui/dialogs/custom_titlebar.py similarity index 99% rename from src/osdagbridge/desktop/ui/utils/custom_titlebar.py rename to src/osdagbridge/desktop/ui/dialogs/custom_titlebar.py index be46a2e46..4d2f68e4b 100644 --- a/src/osdagbridge/desktop/ui/utils/custom_titlebar.py +++ b/src/osdagbridge/desktop/ui/dialogs/custom_titlebar.py @@ -165,4 +165,4 @@ def mouseDoubleClickEvent(self, event: QMouseEvent): self._update_max_restore_icon() event.accept() else: - super().mouseDoubleClickEvent(event) + super().mouseDoubleClickEvent(event) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/deck_design.py b/src/osdagbridge/desktop/ui/dialogs/deck_design.py index 80407105b..7cd688a2f 100644 --- a/src/osdagbridge/desktop/ui/dialogs/deck_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/deck_design.py @@ -18,7 +18,7 @@ from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar class NoScrollTable(QTableWidget): diff --git a/src/osdagbridge/desktop/ui/dialogs/steel_design.py b/src/osdagbridge/desktop/ui/dialogs/steel_design.py index 93c6a7d10..e214494aa 100644 --- a/src/osdagbridge/desktop/ui/dialogs/steel_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/steel_design.py @@ -3,7 +3,7 @@ ) from PySide6.QtCore import Qt -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.steel_design_details import SteelDesignDetailsTab from osdagbridge.desktop.ui.dialogs.tabs.steel_design_analysis import SteelDesignAnalysisTab from osdagbridge.desktop.ui.dialogs.tabs.steel_design_check import SteelDesignCheckTab diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py b/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py index 07859e9c3..e7aa848b2 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py @@ -12,7 +12,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style class CustomVehicleDialog(QDialog): diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py b/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py index 09eb0cd43..c052595c0 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py @@ -12,7 +12,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style class OptimizableField(QWidget): diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py index 896eee012..716560e11 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py @@ -12,7 +12,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator, QColor from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.girder_details_tab import GirderDetailsTab from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.stiffener_details_tab import StiffenerDetailsTab diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py index f91ec3773..2e116d73d 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py @@ -17,7 +17,7 @@ from PySide6.QtWidgets import QHeaderView from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( LOAD_COMBINATION_TAB_SCHEMA, ) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py index ce59b45a5..b468696aa 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py @@ -12,7 +12,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.widgets.section_viewer import SectionPreviewWidget, SectionCatalog from osdagbridge.desktop.ui.widgets.placeholder_section_preview import PlaceholderSectionPreviewWidget diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py index 65a0e9189..51ec3d1e6 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py @@ -19,7 +19,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview from osdagbridge.desktop.ui.widgets.section_viewer import SectionCatalog, SectionPreviewWidget diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py index 764e91852..24e824399 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py @@ -45,7 +45,7 @@ VALUES_WEB_TYPE, ) from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 908ded84d..a96b3a7e6 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -14,7 +14,7 @@ from osdagbridge.core.bridge_types.plate_girder.bridge_geometry import CrossSectionLayout from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.typical_section.layout_tab import LayoutTab from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.typical_section.crash_barrier_tab import CrashBarrierTab From ced0990cb252aade3f31171ea44167bb29c58e76 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Wed, 4 Mar 2026 01:10:17 +0530 Subject: [PATCH 065/225] feat: introduced custom location input and design --- .../desktop/ui/dialogs/project_location.py | 584 +++++++----------- 1 file changed, 240 insertions(+), 344 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/project_location.py b/src/osdagbridge/desktop/ui/dialogs/project_location.py index cf556cfdc..a250eb2b5 100644 --- a/src/osdagbridge/desktop/ui/dialogs/project_location.py +++ b/src/osdagbridge/desktop/ui/dialogs/project_location.py @@ -1,33 +1,27 @@ -from pathlib import Path - from PySide6.QtWidgets import ( QDialog, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QWidget, - QCheckBox, QFrame, QPushButton, QComboBox, QSizePolicy, QSizeGrip, - QRadioButton, QButtonGroup, QStackedWidget, QSpacerItem, QMessageBox + QFrame, QPushButton, QComboBox, QSizePolicy, QSizeGrip, + QRadioButton, QButtonGroup, QStackedWidget, QSpacerItem ) -from PySide6.QtGui import QDesktopServices -from PySide6.QtCore import Qt, QUrl -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from PySide6.QtCore import Qt +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.core.bridge_types.plate_girder.ui_fields_project_location import ( get_state_list, get_station_list, get_default_location, get_weather, ) - -from PySide6.QtCore import Slot, Signal, QObject, QUrl from osdagbridge.desktop.ui.widgets.native_map import NativeMapWidget from osdagbridge.core.data.project_location.zone_lookup import get_zones_for_coordinates, get_temperature_for_coordinates # Session-level state to persist values across dialog open/close cycles # so that reopening the dialog retains user-entered or looked-up data. -LAST_CUSTOM_WEATHER_DATA = None # Custom data entered via the Custom Data dialog -LAST_WEATHER_DATA = None # Looked-up or persisted weather data (wind, seismic, temp) -LAST_LOCATION_METHOD = None # "location_name" or "map" -LAST_LOCATION_DATA = None # {"state": ..., "district": ...} or {"latitude": ..., "longitude": ...} - - +LAST_CUSTOM_WEATHER_DATA = None +LAST_WEATHER_DATA = None +LAST_LOCATION_METHOD = None # "location_name", "map", or "custom_data" +LAST_LOCATION_DATA = None # {"state": ..., "district": ...} or {"latitude": ..., "longitude": ...} class NoScrollComboBox(QComboBox): @@ -107,270 +101,6 @@ def apply_field_style(widget): """) -class CustomWeatherDataDialog(QDialog): - """ - Dialog to manually input weather/seismic data. - """ - def __init__(self, parent=None, initial_data=None): - super().__init__(parent) - self.setFixedSize(400, 420) - self.data = initial_data or {} - self.setWindowFlags(Qt.Dialog | Qt.FramelessWindowHint) - - self.setStyleSheet(""" - QDialog { - background-color: #ffffff; - border: 1px solid #90AF13; - } - QLabel { - color: #2d2d2d; - font-size: 12px; - font-weight: 500; - } - QLineEdit { - padding: 4px 8px; - border: 1px solid #dcdcdc; - border-radius: 4px; - background-color: white; - color: black; - font-size: 12px; - } - QLineEdit:focus { - border: 1px solid #90AF13; - } - QPushButton#primary { - background-color: #90AF13; - color: white; - border-radius: 6px; - padding: 6px 16px; - font-weight: 600; - border: none; - } - QPushButton#primary:hover { background-color: #7a9b0f; } - QPushButton#ghost { - background-color: #f1f1f1; - color: #1d1d1d; - border-radius: 6px; - padding: 6px 16px; - font-weight: 600; - border: none; - } - QPushButton#ghost:hover { background-color: #e6e6e6; } - """) - - # Main layout structure for custom title bar - main_layout = QVBoxLayout(self) - main_layout.setContentsMargins(1, 1, 1, 1) - main_layout.setSpacing(0) - - self.title_bar = CustomTitleBar() - self.title_bar.setTitle("Custom Weather Data") - main_layout.addWidget(self.title_bar) - - self.content_widget = QWidget(self) - main_layout.addWidget(self.content_widget, 1) - - layout = QVBoxLayout(self.content_widget) - layout.setSpacing(16) - layout.setContentsMargins(25, 25, 25, 25) - - # Basic Wind Speed - wind_layout = QVBoxLayout() - wind_layout.setSpacing(6) - wind_layout.addWidget(QLabel("Basic Wind Speed (m/s)")) - self.wind_input = QLineEdit() - self.wind_input.setPlaceholderText("e.g. 50") - if self.data.get("wind_speed"): - self.wind_input.setText(str(self.data.get("wind_speed"))) - wind_layout.addWidget(self.wind_input) - layout.addLayout(wind_layout) - - # Seismic Zone - zone_label = QLabel("Seismic Zone") - layout.addWidget(zone_label) - - self.zone_combo = NoScrollComboBox() - self.zone_combo.addItems(["Select Zone", "II", "III", "IV", "V"]) - if self.data.get("zone"): - index = self.zone_combo.findText(self.data.get("zone")) - if index >= 0: - self.zone_combo.setCurrentIndex(index) - - # Apply specific combo style locally or via stylesheet above - self.zone_combo.setStyleSheet(""" - QComboBox{ - padding: 4px 8px; - border: 1px solid #dcdcdc; - border-radius: 4px; - background-color: white; - color: black; - } - QComboBox::drop-down{ - subcontrol-origin: padding; - subcontrol-position: top right; - border-left: 0px; - } - QComboBox::down-arrow{ - image: url(:/vectors/arrow_down_light.svg); - width: 12px; - height: 12px; - margin-right: 8px; - } - QComboBox::down-arrow:on { - image: url(:/vectors/arrow_up_light.svg); - width: 12px; - height: 12px; - margin-right: 8px; - } - QComboBox QAbstractItemView{ - background-color: white; - border: 1px solid #dcdcdc; - outline: none; - } - QComboBox QAbstractItemView::item{ - color: black; - background-color: white; - border: none; - border: 1px solid white; - border-radius: 0; - padding: 2px; - } - QComboBox QAbstractItemView::item:hover{ - border: 1px solid #90AF13; - background-color: #90AF13; - color: black; - } - QComboBox QAbstractItemView::item:selected{ - background-color: #90AF13; - color: black; - border: 1px solid #90AF13; - } - QComboBox QAbstractItemView::item:selected:hover{ - background-color: #90AF13; - color: black; - border: 1px solid #94b816; - } - """) - - # Side-by-side layout for Zone and Z-Factor - zone_row = QHBoxLayout() - zone_row.setSpacing(15) - - # Add stretch factor 1 to make them equal width - zone_row.addWidget(self.zone_combo, 1) - - zone_to_z = {"II": "0.10", "III": "0.16", "IV": "0.24", "V": "0.36"} - current_z = zone_to_z.get(self.zone_combo.currentText(), "") - - self.zone_value = QLineEdit(str(current_z)) - self.zone_value.setReadOnly(True) - self.zone_value.setPlaceholderText("Zone Factor (Z)") - self.zone_value.setStyleSheet(""" - QLineEdit { - background-color: #f5f5f5; - color: #707070; - border: 1px solid #dcdcdc; - border-radius: 4px; - padding: 4px 8px; - } - """) - self.zone_combo.currentTextChanged.connect( - lambda text: self.zone_value.setText(zone_to_z.get(text, "")) - ) - - # Add stretch factor 1 to make them equal width - zone_row.addWidget(self.zone_value, 1) - layout.addLayout(zone_row) - - # Shade Air Temperature - temp_lbl = QLabel("Shade Air Temperature (°C)") - layout.addWidget(temp_lbl) - - temp_layout = QHBoxLayout() - temp_layout.setSpacing(15) - - max_col = QVBoxLayout() - max_col.setSpacing(6) - self.max_temp_input = QLineEdit() - self.max_temp_input.setPlaceholderText("Max") - if self.data.get("max_temp"): - self.max_temp_input.setText(str(self.data.get("max_temp"))) - max_col.addWidget(self.max_temp_input) - - min_col = QVBoxLayout() - min_col.setSpacing(6) - self.min_temp_input = QLineEdit() - self.min_temp_input.setPlaceholderText("Min") - if self.data.get("min_temp"): - self.min_temp_input.setText(str(self.data.get("min_temp"))) - min_col.addWidget(self.min_temp_input) - - temp_layout.addLayout(max_col) - temp_layout.addLayout(min_col) - layout.addLayout(temp_layout) - - layout.addStretch() - - # Build Footer - btn_layout = QHBoxLayout() - btn_layout.setSpacing(10) - btn_layout.addStretch() - - save_btn = QPushButton("Save") - save_btn.setObjectName("primary") - save_btn.setCursor(Qt.PointingHandCursor) - save_btn.clicked.connect(self.validate_and_save) - btn_layout.addWidget(save_btn) - - cancel_btn = QPushButton("Cancel") - cancel_btn.setObjectName("ghost") - cancel_btn.setCursor(Qt.PointingHandCursor) - cancel_btn.clicked.connect(self.reject) - btn_layout.addWidget(cancel_btn) - - layout.addLayout(btn_layout) - - def validate_and_save(self): - wind = self.wind_input.text().strip() - zone = self.zone_combo.currentText() - max_t = self.max_temp_input.text().strip() - min_t = self.min_temp_input.text().strip() - - if not wind or not max_t or not min_t or zone == "Select Zone": - QMessageBox.warning(self, "Incomplete Data", "Please enter all fields (Wind Speed, Seismic Zone, and Temperatures) before saving.") - return - - self.accept() - - def get_data(self): - # Map zone to z_value automatically - zone_to_z = { - "II": "0.10", - "III": "0.16", - "IV": "0.24", - "V": "0.36" - } - selected_zone = self.zone_combo.currentText() if self.zone_combo.currentText() != "Select Zone" else "" - z_value = zone_to_z.get(selected_zone, "") - - return { - "wind_speed": self.wind_input.text(), - "zone": selected_zone, - "z_value": z_value, - "max_temp": self.max_temp_input.text(), - "min_temp": self.min_temp_input.text() - } - - def showEvent(self, event): - """Center dialog on parent window when shown.""" - super().showEvent(event) - if self.parent(): - parent_geo = self.parent().geometry() - x = parent_geo.x() + (parent_geo.width() - self.width()) // 2 - y = parent_geo.y() + (parent_geo.height() - self.height()) // 2 - self.move(x, y) - - class ProjectLocationDialog(QDialog): """Dialog for selecting project location with multiple input methods.""" @@ -380,6 +110,8 @@ def __init__(self, parent=None): self.setMinimumHeight(520) self.setObjectName("project_location_dialog") self.default_location = get_default_location() + self._session_committed = False + self._initial_session_state = None # Restore session-level state self.custom_weather_data = LAST_CUSTOM_WEATHER_DATA @@ -392,28 +124,29 @@ def __init__(self, parent=None): } QLabel#headline { font-size: 15px; font-weight: 700; color: #2d2d2d; } QLabel#hint { color: #4a4a4a; } + QLabel { color: #1f1f1f; } QRadioButton { font-size: 12px; color: #1f1f1f; } QRadioButton::indicator { width: 16px; height: 16px; } QRadioButton::indicator::unchecked { border: 2px solid #90AF13; border-radius: 9px; background: transparent; } QRadioButton::indicator::checked { border: 2px solid #90AF13; background: #90AF13; border-radius: 9px; } QCheckBox { font-size: 12px; color: #1f1f1f; } QPushButton#primary { - background-color: #90AF13; - color: white; + background-color: #ffffff; + color: #1f1f1f; border-radius: 6px; padding: 8px 18px; font-weight: 600; } - QPushButton#primary:hover { background-color: #7a9b0f; } + QPushButton#primary:hover { background-color: #90AF13; } QPushButton#primary:pressed { background-color: #64850c; } QPushButton#ghost { - background-color: #f1f1f1; + background-color: #ffffff; color: #1d1d1d; border-radius: 6px; padding: 8px 14px; font-weight: 600; } - QPushButton#ghost:hover { background-color: #e6e6e6; } + QPushButton#ghost:hover { background-color: #90AF13; } QPushButton#ghost:pressed { background-color: #d9d9d9; } """) @@ -422,6 +155,41 @@ def __init__(self, parent=None): # Restore previous session state if available, otherwise apply defaults self._restore_session_state() + self._capture_initial_session_state() + + def _capture_initial_session_state(self): + """Capture module-level session state at dialog open time for cancel rollback.""" + self._initial_session_state = { + "custom_weather": LAST_CUSTOM_WEATHER_DATA, + "weather": LAST_WEATHER_DATA, + "location_method": LAST_LOCATION_METHOD, + "location_data": LAST_LOCATION_DATA, + } + + def _restore_initial_session_state(self): + """Restore module-level session state captured when dialog was opened.""" + global LAST_CUSTOM_WEATHER_DATA, LAST_WEATHER_DATA, LAST_LOCATION_METHOD, LAST_LOCATION_DATA + if not self._initial_session_state: + return + + LAST_CUSTOM_WEATHER_DATA = self._initial_session_state.get("custom_weather") + LAST_WEATHER_DATA = self._initial_session_state.get("weather") + LAST_LOCATION_METHOD = self._initial_session_state.get("location_method") + LAST_LOCATION_DATA = self._initial_session_state.get("location_data") + + def accept(self): + self._session_committed = True + super().accept() + + def reject(self): + if not self._session_committed: + self._restore_initial_session_state() + super().reject() + + def closeEvent(self, event): + if not self._session_committed: + self._restore_initial_session_state() + super().closeEvent(event) def setupWrapper(self): self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) @@ -456,6 +224,22 @@ def _setup_ui(self): self._build_body(main_layout) self._add_footer_buttons(main_layout) + def _add_code_selector(self, layout): + self.code_widget = QWidget() + row = QHBoxLayout(self.code_widget) + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(10) + code_label = QLabel("Design Code") + code_label.setStyleSheet("font-size: 12px; font-weight: 600; color: #2d2d2d;") + self.code_combo = NoScrollComboBox() + self.code_combo.addItems(["IRC 6 (2017)"]) + apply_field_style(self.code_combo) + self.code_combo.setFixedWidth(200) + row.addWidget(code_label) + row.addWidget(self.code_combo) + row.addStretch() + layout.addWidget(self.code_widget) + def _add_method_toggle(self, layout): bar = QHBoxLayout() bar.setSpacing(18) @@ -463,8 +247,9 @@ def _add_method_toggle(self, layout): self.method_group = QButtonGroup(self) self.method_radio_location = QRadioButton("Enter Location Name") self.method_radio_map = QRadioButton("Select on Map") + self.method_custom_data = QRadioButton("Input Custom Data") - for radio in (self.method_radio_location, self.method_radio_map): + for radio in (self.method_radio_location, self.method_radio_map, self.method_custom_data): radio.setCursor(Qt.PointingHandCursor) self.method_group.addButton(radio) bar.addWidget(radio) @@ -491,14 +276,15 @@ def _build_body(self, layout): left_layout.setContentsMargins(14, 12, 14, 12) left_layout.setSpacing(12) + self._add_code_selector(left_layout) + self.method_stack = QStackedWidget() self._add_location_page() self._add_map_page() + self._add_custom_data_page() self.method_stack.setCurrentIndex(0) left_layout.addWidget(self.method_stack) - # Removed Lookup and Clear buttons row - body.addWidget(left_card, 2) right_card = QFrame() @@ -518,9 +304,9 @@ def _build_body(self, layout): right_layout.setContentsMargins(14, 12, 14, 12) right_layout.setSpacing(8) - title = QLabel("IRC 6 (2017) Values:") - title.setObjectName("valueTitle") - right_layout.addWidget(title) + self.irc_title_label = QLabel("IRC 6 (2017) Values:") + self.irc_title_label.setObjectName("valueTitle") + right_layout.addWidget(self.irc_title_label) self.wind_speed_label = QLabel("Basic Wind Speed (m/sec): —") self.wind_speed_label.setObjectName("valueLabel") @@ -536,18 +322,6 @@ def _build_body(self, layout): right_layout.addItem(QSpacerItem(0, 6)) - self.btn_custom_data = QPushButton("Custom Data") - self.btn_custom_data.setObjectName("primary") - self.btn_custom_data.setCursor(Qt.PointingHandCursor) - self.btn_custom_data.setMinimumWidth(150) - self.btn_custom_data.setAutoDefault(False) - right_layout.addWidget(self.btn_custom_data) - - hint = QLabel("Manually overwrite wind, seismic zone & zone factor, and shade temps.") - hint.setWordWrap(True) - hint.setObjectName("hint") - right_layout.addWidget(hint) - # Zone Legend (shown when overlay is active) self.legend_container = QWidget() self.legend_container.setVisible(False) @@ -618,35 +392,18 @@ def _add_map_page(self): vbox.setContentsMargins(0, 0, 0, 0) vbox.setSpacing(6) - # Zone overlay dropdown - overlay_container = QWidget() - overlay_container.setStyleSheet("background-color: #ffffff; border-bottom: 1px solid #d8e2c4;") - overlay_layout = QHBoxLayout(overlay_container) - overlay_layout.setContentsMargins(10, 8, 10, 8) - overlay_layout.setSpacing(10) - - overlay_label = QLabel("Zone Overlay:") - overlay_label.setStyleSheet("font-weight: 600; color: #2d2d2d; border: none;") - #overlay_layout.addWidget(overlay_label) - self.zone_overlay_combo = NoScrollComboBox() self.zone_overlay_combo.addItems(["None", "Seismic Zone", "Wind Zone"]) - self.zone_overlay_combo.setMinimumWidth(140) - apply_field_style(self.zone_overlay_combo) - #overlay_layout.addWidget(self.zone_overlay_combo) - - overlay_layout.addStretch() - vbox.addWidget(overlay_container) self.map_view = NativeMapWidget() vbox.addWidget(self.map_view, 1) - # Coordinate inputs integrated here + # Coordinate inputs coord_container = QWidget() coord_container.setStyleSheet("background-color: #ffffff; border-top: 1px solid #d8e2c4;") coord_layout = QVBoxLayout(coord_container) coord_layout.setContentsMargins(10, 10, 10, 10) - + coord_label = QLabel("Enter Coordinates or Select on Map") coord_label.setStyleSheet("font-weight: bold; color: #2d2d2d;") coord_layout.addWidget(coord_label) @@ -671,7 +428,7 @@ def _add_map_page(self): row.addLayout(lat_col) row.addLayout(lng_col) coord_layout.addLayout(row) - + vbox.addWidget(coord_container) # Connect map signal @@ -679,10 +436,132 @@ def _add_map_page(self): self.method_stack.addWidget(page) + def _add_custom_data_page(self): + page = QWidget() + vbox = QVBoxLayout(page) + vbox.setContentsMargins(2, 2, 2, 2) + vbox.setSpacing(10) + + label = QLabel("Enter Custom Weather Data") + label.setObjectName("hint") + label.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + label.setStyleSheet("font-weight: 700; color: #2d2d2d;") + vbox.addWidget(label) + + # Basic Wind Speed + wind_row = QHBoxLayout() + wind_row.setSpacing(10) + wind_lbl = QLabel("Basic Wind Speed (m/s)") + wind_lbl.setFixedWidth(200) + self.custom_wind_input = QLineEdit() + self.custom_wind_input.setPlaceholderText("e.g. 50") + apply_field_style(self.custom_wind_input) + wind_row.addWidget(wind_lbl) + wind_row.addWidget(self.custom_wind_input) + vbox.addLayout(wind_row) + + # Seismic Zone + Zone Factor + zone_row = QHBoxLayout() + zone_row.setSpacing(10) + zone_lbl = QLabel("Seismic Zone") + zone_lbl.setFixedWidth(200) + self.custom_zone_combo = NoScrollComboBox() + self.custom_zone_combo.addItems(["Select Zone", "II", "III", "IV", "V"]) + apply_field_style(self.custom_zone_combo) + self.custom_zone_value = QLineEdit() + self.custom_zone_value.setReadOnly(True) + self.custom_zone_value.setPlaceholderText("Zone Factor (Z)") + self.custom_zone_value.setFixedWidth(100) + apply_field_style(self.custom_zone_value) + self.custom_zone_value.setStyleSheet(""" + QLineEdit { + padding: 1px 7px; + border: 1px solid #d0d0d0; + border-radius: 6px; + background-color: #f5f5f5; + color: #707070; + } + """) + _zone_to_z = {"II": "0.10", "III": "0.16", "IV": "0.24", "V": "0.36"} + self.custom_zone_combo.currentTextChanged.connect( + lambda text: self.custom_zone_value.setText(_zone_to_z.get(text, "")) + ) + zone_row.addWidget(zone_lbl) + zone_row.addWidget(self.custom_zone_combo, 1) + zone_row.addWidget(self.custom_zone_value) + vbox.addLayout(zone_row) + + # Shade Air Temperature + temp_lbl = QLabel("Shade Air Temperature (°C)") + vbox.addWidget(temp_lbl) + temp_row = QHBoxLayout() + temp_row.setSpacing(10) + self.custom_max_temp = QLineEdit() + self.custom_max_temp.setPlaceholderText("Max") + apply_field_style(self.custom_max_temp) + self.custom_min_temp = QLineEdit() + self.custom_min_temp.setPlaceholderText("Min") + apply_field_style(self.custom_min_temp) + temp_row.addWidget(self.custom_max_temp) + temp_row.addWidget(self.custom_min_temp) + vbox.addLayout(temp_row) + + # Apply button + apply_btn = QPushButton("Apply") + apply_btn.setObjectName("primary") + apply_btn.setCursor(Qt.PointingHandCursor) + apply_btn.setAutoDefault(False) + apply_btn.clicked.connect(self._apply_custom_data_inline) + vbox.addWidget(apply_btn, 0, Qt.AlignLeft) + + vbox.addStretch() + self.method_stack.addWidget(page) + + def _apply_custom_data_inline(self): + """Validate and apply the inline custom data fields.""" + global LAST_CUSTOM_WEATHER_DATA, LAST_WEATHER_DATA, LAST_LOCATION_METHOD, LAST_LOCATION_DATA + wind = self.custom_wind_input.text().strip() + zone = self.custom_zone_combo.currentText() + max_t = self.custom_max_temp.text().strip() + min_t = self.custom_min_temp.text().strip() + + if not wind or not max_t or not min_t or zone == "Select Zone": + CustomMessageBox( + title="Incomplete Data", + text="Please fill in all fields (Wind Speed, Seismic Zone, Max/Min Temperature).", + dialogType=MessageBoxType.Warning + ).exec() + return + + _zone_to_z = {"II": "0.10", "III": "0.16", "IV": "0.24", "V": "0.36"} + data = { + "wind_speed": wind, + "zone": zone, + "z_value": _zone_to_z.get(zone, ""), + "max_temp": max_t, + "min_temp": min_t, + } + self.custom_weather_data = data + LAST_CUSTOM_WEATHER_DATA = data + LAST_WEATHER_DATA = data + LAST_LOCATION_METHOD = None + LAST_LOCATION_DATA = None + self._current_weather_data = data + self._update_irc_values(data) + def validate_and_save(self): - + # If custom_data radio is selected, auto-apply first + if self.method_custom_data.isChecked(): + self._apply_custom_data_inline() + if not self._current_weather_data: + return + if not self._current_weather_data: - QMessageBox.warning(self, "Incomplete Data", "Please select a location either on the map or from the dropdown menu.") + CustomMessageBox( + title="Incomplete Data", + text="Please select a location either on the map or from the dropdown menu.", + dialogType=MessageBoxType.Warning + ).exec() return # Ensure all critical fields are present @@ -695,7 +574,11 @@ def validate_and_save(self): if w.get("max_temp") is None or w.get("min_temp") is None: missing.append("Temperature") if missing: - QMessageBox.warning(self, "Incomplete Data", f"Missing data: {', '.join(missing)}.\nPlease select a different location or use Custom Data to enter values manually.") + CustomMessageBox( + title="Incomplete Data", + text=f"Missing data: {', '.join(missing)}.\nPlease select a different location or use Custom Data to enter values manually.", + dialogType=MessageBoxType.Warning + ).exec() return self.accept() @@ -725,13 +608,11 @@ def _add_footer_buttons(self, layout): def _connect_signals(self): self.method_radio_location.toggled.connect(lambda: self._set_active_method("location_name")) self.method_radio_map.toggled.connect(lambda: self._set_active_method("map")) + self.method_custom_data.toggled.connect(lambda: self._set_active_method("custom_data")) self.state_combo.currentTextChanged.connect(self._on_state_changed) # Auto-update on district change self.district_combo.currentTextChanged.connect(self._on_district_changed) - # New Signals - self.btn_custom_data.clicked.connect(self._open_custom_dialog) - # Enter key on coordinates updates map self.latitude_input.returnPressed.connect(self._sync_map_from_inputs) self.longitude_input.returnPressed.connect(self._sync_map_from_inputs) @@ -742,18 +623,40 @@ def _connect_signals(self): def _set_active_method(self, method): if method == "location_name" and self.method_radio_location.isChecked(): self.method_stack.setCurrentIndex(0) + self.code_widget.setVisible(True) self.latitude_input.setEnabled(False) self.longitude_input.setEnabled(False) self.state_combo.setEnabled(True) self.district_combo.setEnabled(True) self.map_view.setEnabled(False) + self.irc_title_label.setText("IRC 6 (2017) Values:") elif method == "map" and self.method_radio_map.isChecked(): self.method_stack.setCurrentIndex(1) + self.code_widget.setVisible(True) self.latitude_input.setEnabled(True) self.longitude_input.setEnabled(True) self.state_combo.setEnabled(False) self.district_combo.setEnabled(False) self.map_view.setEnabled(True) + self.irc_title_label.setText("IRC 6 (2017) Values:") + elif method == "custom_data" and self.method_custom_data.isChecked(): + self.method_stack.setCurrentIndex(2) + self.code_widget.setVisible(False) + self.latitude_input.setEnabled(False) + self.longitude_input.setEnabled(False) + self.state_combo.setEnabled(False) + self.district_combo.setEnabled(False) + self.map_view.setEnabled(False) + self.irc_title_label.setText("Custom Values:") + # Pre-fill inline fields from any previously saved custom data + if self.custom_weather_data: + self.custom_wind_input.setText(str(self.custom_weather_data.get("wind_speed", ""))) + zone = self.custom_weather_data.get("zone", "") + idx = self.custom_zone_combo.findText(zone) + if idx >= 0: + self.custom_zone_combo.setCurrentIndex(idx) + self.custom_max_temp.setText(str(self.custom_weather_data.get("max_temp", ""))) + self.custom_min_temp.setText(str(self.custom_weather_data.get("min_temp", ""))) def _apply_default_location(self): state = self.default_location.get("state", "") @@ -981,7 +884,11 @@ def _lookup_zones_for_coordinates(self, lat: float, lon: float): missing_max_temp = temp_data.get("max_temp") is None missing_min_temp = temp_data.get("min_temp") is None if missing_zone or missing_wind or missing_max_temp or missing_min_temp: - QMessageBox.warning(self, "Location Error", "Data for this location is not available.") + CustomMessageBox( + title="Location Error", + text="Data for this location is not available.\n (Outside of India)", + dialogType=MessageBoxType.Critical + ).exec() # Clear the pin from the map self._clear_map_selection() # Clear IRC values @@ -1086,19 +993,6 @@ def _on_district_changed(self, district_name): self._current_weather_data = weather self._update_irc_values(weather) - def _open_custom_dialog(self): - dlg = CustomWeatherDataDialog(self, self.custom_weather_data) - if dlg.exec() == QDialog.Accepted: - self.custom_weather_data = dlg.get_data() - global LAST_CUSTOM_WEATHER_DATA, LAST_WEATHER_DATA, LAST_LOCATION_METHOD, LAST_LOCATION_DATA - LAST_CUSTOM_WEATHER_DATA = self.custom_weather_data - LAST_WEATHER_DATA = self.custom_weather_data - LAST_LOCATION_METHOD = None - LAST_LOCATION_DATA = None - self._clear_map_selection() - self._clear_location_selection() - self._current_weather_data = self.custom_weather_data - self._update_irc_values(self.custom_weather_data) def _update_irc_values(self, weather): if not weather: @@ -1133,11 +1027,13 @@ def get_selected_location(self): } elif self.method_radio_map.isChecked(): result['method'] = 'map' - # Both map clicks and manual coordinate entry populate these fields result['data'] = { 'latitude': self.latitude_input.text(), 'longitude': self.longitude_input.text() } + elif self.method_custom_data.isChecked(): + result['method'] = 'custom_data' + result['data'] = {} # Include weather data (custom or looked-up) for backend calculations if self.custom_weather_data: @@ -1149,4 +1045,4 @@ def get_selected_location(self): if self.custom_weather_data: result['custom_weather_data'] = self.custom_weather_data - return result + return result \ No newline at end of file From 6a6cbd9a3e5594dbacce7417bdf8eae0775c4f3a Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Wed, 4 Mar 2026 01:11:53 +0530 Subject: [PATCH 066/225] chore: remove unused declarations --- .../core/bridge_types/plate_girder/ui_fields.py | 14 +------------- src/osdagbridge/core/utils/common.py | 12 ------------ 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 4e775404a..f67f36a06 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -220,7 +220,7 @@ def input_values(self): None, True, 'Double Validator', - {"label": "Carriageway Width*"}, + {"label": "Carriageway Width*\n(Each way)"}, ) ) options_list.append( @@ -279,18 +279,6 @@ def input_values(self): 'No Validator', { "container": "superstructure", - "post_rows": [ - { - "type": "material_properties", - "label": "Properties", - "buttons": [ - { - "text": "Modify Here", - "action": "show_material_properties_dialog", - } - ], - } - ], }, ) ) diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index fad123924..09b548361 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -58,18 +58,6 @@ # Sample values VALUES_STRUCTURE_TYPE = ["Highway Bridge", "Other"] -VALUES_PROJECT_LOCATION = [ - "Delhi", "Mumbai", "Bangalore", "Kolkata", "Chennai", "Hyderabad", - "Ahmedabad", "Pune", "Surat", "Jaipur", "Lucknow", "Kanpur", - "Nagpur", "Indore", "Thane", "Bhopal", "Visakhapatnam", "Pimpri-Chinchwad", - "Patna", "Vadodara", "Ghaziabad", "Ludhiana", "Agra", "Nashik", - "Faridabad", "Meerut", "Rajkot", "Kalyan-Dombivali", "Vasai-Virar", "Varanasi", - "Srinagar", "Aurangabad", "Dhanbad", "Amritsar", "Navi Mumbai", "Allahabad", - "Ranchi", "Howrah", "Coimbatore", "Jabalpur", "Gwalior", "Vijayawada", - "Jodhpur", "Madurai", "Raipur", "Kota", "Chandigarh", "Guwahati", - "Custom", -] - # Canonical footpath options used across UI + CAD/code clauses. VALUES_FOOTPATH = ["None", "Single Side", "Both Sides"] From ce6160bdb7f5e7ad1f1e7c89a33eac76d2f5caff Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Wed, 4 Mar 2026 01:12:38 +0530 Subject: [PATCH 067/225] feat: introduced i buttons showing info for each material selected and added custom material properties dialog --- .../desktop/ui/dialogs/material_properties.py | 777 +++++++----------- .../desktop/ui/docks/input_dock.py | 193 ++++- 2 files changed, 437 insertions(+), 533 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/material_properties.py b/src/osdagbridge/desktop/ui/dialogs/material_properties.py index eb81e0313..67874d5ba 100644 --- a/src/osdagbridge/desktop/ui/dialogs/material_properties.py +++ b/src/osdagbridge/desktop/ui/dialogs/material_properties.py @@ -1,32 +1,20 @@ from PySide6.QtWidgets import ( - QDialog, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, - QComboBox, QCheckBox, QStackedWidget + QDialog, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton ) from PySide6.QtCore import Qt from PySide6.QtGui import QDoubleValidator +import re -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style -from osdagbridge.core.bridge_types.plate_girder.ui_fields import VALUES_MATERIAL, VALUES_DECK_CONCRETE_GRADE +from osdagbridge.core.utils.common import VALUES_MATERIAL, VALUES_DECK_CONCRETE_GRADE -DIALOG_TITLE_MATERIAL_PROPERTIES = "Material Properties" #ui need to be generalized +DIALOG_TITLE_MATERIAL_PROPERTIES = "Enter Custom Properties" +CUSTOM_MATERIAL_PREFIX = "Cus_" -MEMBER_OPTION_GIRDER = "Girder" -MEMBER_OPTION_CROSS_BRACING = "Cross Bracing" -MEMBER_OPTION_END_DIAPHRAGM = "End Diaphragm" -MEMBER_OPTION_DECK = "Deck" - -MEMBER_OPTIONS = [ - MEMBER_OPTION_GIRDER, - MEMBER_OPTION_CROSS_BRACING, - MEMBER_OPTION_END_DIAPHRAGM, - MEMBER_OPTION_DECK -] - -MATPROP_LABEL_MEMBER = "Member" MATPROP_LABEL_MATERIAL = "Material" -MATPROP_LABEL_DEFAULT = "Default" ECM_FACTOR_OPTION_QUARTZITE = "Quartzite/granite aggregates = 1" ECM_FACTOR_OPTION_LIMESTONE = "Limestone aggregates = 0.9" @@ -41,14 +29,7 @@ (ECM_FACTOR_OPTION_BASALT, 1.2), (ECM_FACTOR_OPTION_CUSTOM, None), ] - -ECM_FACTOR_LABELS = [text for text, _ in ECM_FACTOR_OPTIONS] DEFAULT_ECM_FACTOR_LABEL = ECM_FACTOR_OPTIONS[0][0] -CUSTOM_ECM_FACTOR_LABEL = ECM_FACTOR_OPTION_CUSTOM - -PLACEHOLDER_CUSTOM_FACTOR = "Custom factor" -INCLUDE_MEDIAN_OPTION_NO = "No" -INCLUDE_MEDIAN_OPTION_YES = "Yes" STEEL_MODULUS_E_GPA = 200.0 STEEL_MODULUS_G_GPA = 77.0 @@ -73,12 +54,21 @@ "M30": {"fck": 30.0, "fctm": 2.9, "Ecm": 30.0}, "M35": {"fck": 35.0, "fctm": 3.2, "Ecm": 33.0}, "M40": {"fck": 40.0, "fctm": 3.5, "Ecm": 34.0}, + "M45": {"fck": 45.0, "fctm": 3.8, "Ecm": 36.0}, + "M50": {"fck": 50.0, "fctm": 4.1, "Ecm": 37.0}, + "M55": {"fck": 55.0, "fctm": 4.2, "Ecm": 38.0}, + "M60": {"fck": 60.0, "fctm": 4.4, "Ecm": 39.0}, + "M65": {"fck": 65.0, "fctm": 4.5, "Ecm": 40.0}, + "M70": {"fck": 70.0, "fctm": 4.6, "Ecm": 41.0}, + "M75": {"fck": 75.0, "fctm": 4.7, "Ecm": 42.0}, + "M80": {"fck": 80.0, "fctm": 4.8, "Ecm": 42.0}, + "M85": {"fck": 85.0, "fctm": 4.9, "Ecm": 43.0}, + "M90": {"fck": 90.0, "fctm": 5.0, "Ecm": 44.0}, } KEY_CONCRETE_FCK = "Characteristic Compressive (Cube) Strength of Concrete, (fck)cu (MPa)" KEY_CONCRETE_FCTM = "Mean Tensile Strength of Concrete, fctm (MPa)" KEY_CONCRETE_ECM = "Secant Modulus of Elasticity of Concrete, Ecm (GPa)" -KEY_ECM_FACTOR = "Ecm Multiplication Factor" KEY_THERMAL_EXPANSION = "Thermal Expansion Coefficient, (×10⁻⁶/°C)" KEY_STEEL_FU = "Ultimate Tensile Strength, Fu (MPa)" KEY_STEEL_FY = "Yield Strength, Fy (MPa)" @@ -89,7 +79,6 @@ DISP_CONCRETE_FCK = "Characteristic Compressive (Cube) Strength of Concrete, fck (MPa)" DISP_CONCRETE_FCTM = "Mean Tensile Strength of Concrete, fctm (MPa)" DISP_CONCRETE_ECM = "Secant Modulus of Elasticity of Concrete, Ecm (GPa)" -DISP_ECM_FACTOR = "Ecm Multiplication Factor" DISP_THERMAL_EXPANSION = "Thermal Expansion Coefficient, (×10−6/°C)" DISP_STEEL_FU = "Ultimate Tensile Strength, Fu (MPa)" DISP_STEEL_FY = "Yield Strength, Fy (MPa)" @@ -99,84 +88,82 @@ TYPE_TEXTBOX = 'textbox' -TYPE_COMBOBOX = 'combobox' - -def material_properties_values(): - """Return list of material property fields""" - steel_props = [] - t1 = (KEY_STEEL_FU, DISP_STEEL_FU, TYPE_TEXTBOX, None, True, 'Double Validator') - steel_props.append(t1) - - t2 = (KEY_STEEL_FY, DISP_STEEL_FY, TYPE_TEXTBOX, None, True, 'Double Validator') - steel_props.append(t2) - - t3 = (KEY_STEEL_E, DISP_STEEL_E, TYPE_TEXTBOX, None, True, 'Double Validator') - steel_props.append(t3) - - t4 = (KEY_STEEL_G, DISP_STEEL_G, TYPE_TEXTBOX, None, True, 'Double Validator') - steel_props.append(t4) - - t5 = (KEY_STEEL_POISSON, DISP_STEEL_POISSON, TYPE_TEXTBOX, None, True, 'Double Validator') - steel_props.append(t5) - - t6 = (KEY_THERMAL_EXPANSION, DISP_THERMAL_EXPANSION, TYPE_TEXTBOX, None, True, 'Double Validator') - steel_props.append(t6) - - deck_props = [] - t7 = (KEY_CONCRETE_FCK, DISP_CONCRETE_FCK, TYPE_TEXTBOX, None, True, 'Double Validator') - deck_props.append(t7) - - t8 = (KEY_CONCRETE_FCTM, DISP_CONCRETE_FCTM, TYPE_TEXTBOX, None, True, 'Double Validator') - deck_props.append(t8) - - t9 = (KEY_CONCRETE_ECM, DISP_CONCRETE_ECM, TYPE_TEXTBOX, None, True, 'Double Validator') - deck_props.append(t9) - - t10 = (KEY_ECM_FACTOR, DISP_ECM_FACTOR, TYPE_COMBOBOX, ECM_FACTOR_LABELS, True, 'No Validator') - deck_props.append(t10) - - t11 = (KEY_THERMAL_EXPANSION, DISP_THERMAL_EXPANSION, TYPE_TEXTBOX, None, True, 'Double Validator') - deck_props.append(t11) - - return { - 'steel': steel_props, - 'deck': deck_props - } -class NoScrollComboBox(QComboBox): - def wheelEvent(self, event): - event.ignore() +def steel_material_properties_values(): + return [ + (KEY_STEEL_FY, DISP_STEEL_FY, TYPE_TEXTBOX, None, True, 'Double Validator'), + (KEY_STEEL_FU, DISP_STEEL_FU, TYPE_TEXTBOX, None, True, 'Double Validator'), + (KEY_STEEL_E, DISP_STEEL_E, TYPE_TEXTBOX, None, True, 'Double Validator'), + (KEY_STEEL_G, DISP_STEEL_G, TYPE_TEXTBOX, None, True, 'Double Validator'), + (KEY_STEEL_POISSON, DISP_STEEL_POISSON, TYPE_TEXTBOX, None, True, 'Double Validator'), + (KEY_THERMAL_EXPANSION, DISP_THERMAL_EXPANSION, TYPE_TEXTBOX, None, True, 'Double Validator'), + ] + +def deck_material_properties_values(): + return [ + (KEY_CONCRETE_FCK, DISP_CONCRETE_FCK, TYPE_TEXTBOX, None, True, 'Double Validator'), + (KEY_CONCRETE_FCTM, DISP_CONCRETE_FCTM, TYPE_TEXTBOX, None, True, 'Double Validator'), + (KEY_CONCRETE_ECM, DISP_CONCRETE_ECM, TYPE_TEXTBOX, None, True, 'Double Validator'), + (KEY_THERMAL_EXPANSION, DISP_THERMAL_EXPANSION, TYPE_TEXTBOX, None, True, 'Double Validator'), + ] class MaterialPropertiesDialog(QDialog): - MEMBER_OPTIONS = MEMBER_OPTIONS - STEEL_MEMBERS = {MEMBER_OPTION_GIRDER, MEMBER_OPTION_CROSS_BRACING, MEMBER_OPTION_END_DIAPHRAGM} - - def __init__(self, parent=None): + def __init__(self, parent=None, read_only=False, selected_material=None, member=None, custom_fields=None): super().__init__(parent) + self.read_only = read_only + self.selected_material = selected_material or "" + self.member = member + self.custom_fields = custom_fields + self.is_deck_material = (self.member == "Deck") or self._is_deck_material(self.selected_material) self.setWindowTitle(DIALOG_TITLE_MATERIAL_PROPERTIES) + self.setObjectName("material_properties_dialog") self.setMinimumWidth(580) self.setStyleSheet(""" - QDialog { + QDialog#material_properties_dialog { background-color: white; border: 1px solid #90AF13; } + QPushButton#primary { + background-color: #ffffff; + color: #1f1f1f; + border-radius: 6px; + padding: 8px 18px; + font-weight: 600; + } + QPushButton#primary:hover { background-color: #90AF13; } + QPushButton#primary:pressed { background-color: #64850c; } + QPushButton#ghost { + background-color: #ffffff; + color: #1d1d1d; + border-radius: 6px; + padding: 8px 14px; + font-weight: 600; + } + QPushButton#ghost:hover { background-color: #90AF13; } + QPushButton#ghost:pressed { background-color: #d9d9d9; } """) - self.parent_dock = parent + self.fields = deck_material_properties_values() if self.is_deck_material else steel_material_properties_values() self._loading = False - self.current_member = None - self.member_data = {} - - self.material_props = material_properties_values() - self.steel_fields = self.material_props['steel'] - self.deck_fields = self.material_props['deck'] - - self.member_combo = NoScrollComboBox() - self.member_combo.addItems(self.MEMBER_OPTIONS) - apply_field_style(self.member_combo) + initial_material = self.selected_material.strip() if self.read_only else CUSTOM_MATERIAL_PREFIX + self.form_data = { + "material": initial_material or CUSTOM_MATERIAL_PREFIX, + "fields": self._defaults_for_material(initial_material or CUSTOM_MATERIAL_PREFIX), + } - self.material_combo = NoScrollComboBox() - apply_field_style(self.material_combo) + self.material_input = QLineEdit(self.form_data["material"]) + self.material_input.setReadOnly(True) + self.material_input.setFixedWidth(242) + self.material_input.setMinimumHeight(28) + self.material_input.setStyleSheet(""" + QLineEdit { + padding: 1px 7px; + border: 1px solid #a8a8a8; + border-radius: 6px; + background-color: #f1f1f1; + color: #555555; + } + """) self.setupWrapper() main_layout = QVBoxLayout(self.content_widget) main_layout.setContentsMargins(20, 16, 20, 16) @@ -186,19 +173,6 @@ def __init__(self, parent=None): form_layout.setContentsMargins(0, 0, 0, 0) form_layout.setSpacing(12) - member_row = QHBoxLayout() - member_row.setContentsMargins(0, 0, 0, 0) - member_row.setSpacing(18) - member_label = QLabel(MATPROP_LABEL_MEMBER) - member_label.setStyleSheet("font-size: 12px; color: #2d2d2d;") - member_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) - member_label.setFixedWidth(280) - self.member_combo.setFixedWidth(242) - member_row.addWidget(member_label) - member_row.addWidget(self.member_combo) - member_row.addStretch() - form_layout.addLayout(member_row) - material_row = QHBoxLayout() material_row.setContentsMargins(0, 0, 0, 0) material_row.setSpacing(18) @@ -206,58 +180,37 @@ def __init__(self, parent=None): material_label.setStyleSheet("font-size: 12px; color: #2d2d2d;") material_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) material_label.setFixedWidth(280) - self.material_combo.setFixedWidth(242) material_row.addWidget(material_label) - material_row.addWidget(self.material_combo) + material_row.addWidget(self.material_input) material_row.addStretch() form_layout.addLayout(material_row) main_layout.addWidget(form_container) - self.stack = QStackedWidget() - self.stack.setContentsMargins(0, 0, 0, 0) - self.steel_page = self._build_steel_form() - self.deck_page = self._build_deck_form() - self.stack.addWidget(self.steel_page) - self.stack.addWidget(self.deck_page) - main_layout.addWidget(self.stack) - - default_row = QHBoxLayout() - default_row.setContentsMargins(0, 0, 0, 0) - default_row.setSpacing(18) - default_label = QLabel(MATPROP_LABEL_DEFAULT) - default_label.setStyleSheet("font-size: 12px; color: #2d2d2d;") - default_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) - default_label.setFixedWidth(280) - self.default_checkbox = QCheckBox() - - checkbox_container = QWidget() - checkbox_layout = QHBoxLayout(checkbox_container) - checkbox_layout.setContentsMargins(0, 0, 0, 0) - checkbox_layout.setSpacing(0) - checkbox_layout.addWidget(self.default_checkbox) - checkbox_layout.addStretch() - - default_row.addWidget(default_label) - default_row.addWidget(checkbox_container) - main_layout.addLayout(default_row) + self.fields_page = self._build_fields_form() + main_layout.addWidget(self.fields_page) - self.member_combo.currentTextChanged.connect(self._on_member_changed) - self.material_combo.currentTextChanged.connect(self._on_material_changed) - self.default_checkbox.stateChanged.connect(self._on_default_toggled) + self._add_footer_buttons(main_layout) - self._initialize_member_data() - self._on_member_changed(self.member_combo.currentText()) + if self.read_only: + self._load_material_info_for_view(self.selected_material) + self._set_read_only_fields(True) + self.setWindowTitle("Material Information") + self.title_bar.setTitle("Material Information") + + else: + self._populate_fields() + self._update_custom_material_name() self.setFixedSize(self.sizeHint()) def setupWrapper(self): - self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) + self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint | Qt.Dialog) main_layout = QVBoxLayout(self) main_layout.setContentsMargins(1, 1, 1, 1) main_layout.setSpacing(0) - self.title_bar = CustomTitleBar() + self.title_bar = CustomTitleBar(parent=self) self.title_bar.setTitle(DIALOG_TITLE_MATERIAL_PROPERTIES) main_layout.addWidget(self.title_bar) @@ -265,18 +218,60 @@ def setupWrapper(self): main_layout.addWidget(self.content_widget, 1) def closeEvent(self, event): - self._save_current_member_form() super().closeEvent(event) - def _build_steel_form(self): + def _add_footer_buttons(self, layout): + footer = QHBoxLayout() + footer.addStretch() + + if self.read_only: + ok_btn = QPushButton("OK") + ok_btn.setObjectName("primary") + ok_btn.setCursor(Qt.CursorShape.PointingHandCursor) + ok_btn.setMinimumWidth(90) + ok_btn.setAutoDefault(False) + ok_btn.clicked.connect(self.accept) + footer.addWidget(ok_btn) + else: + add_btn = QPushButton("Add") + add_btn.setObjectName("primary") + add_btn.setCursor(Qt.CursorShape.PointingHandCursor) + add_btn.setMinimumWidth(90) + add_btn.setAutoDefault(False) + add_btn.clicked.connect(self._validate_and_save) + footer.addWidget(add_btn) + + cancel_btn = QPushButton("Cancel") + cancel_btn.setObjectName("ghost") + cancel_btn.setCursor(Qt.CursorShape.PointingHandCursor) + cancel_btn.setMinimumWidth(90) + cancel_btn.setAutoDefault(False) + cancel_btn.clicked.connect(self.reject) + footer.addWidget(cancel_btn) + + layout.addLayout(footer) + + def _validate_and_save(self): + for key, widget in self.field_inputs.items(): + if not widget.text().strip(): + CustomMessageBox( + title="Validation Error", + text=f"Please enter a valid value for {key}", + dialogType=MessageBoxType.Critical, + ).exec() + return + self._save_form() + self.accept() + + def _build_fields_form(self): widget = QWidget() layout = QVBoxLayout(widget) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(10) - self.steel_field_inputs = {} + self.field_inputs = {} - for field_tuple in self.steel_fields: - key, display_label, widget_type, values, required, validator = field_tuple + for field_tuple in self.fields: + key, display_label, _, _, _, _ = field_tuple row = QHBoxLayout() row.setContentsMargins(0, 0, 0, 0) @@ -294,7 +289,11 @@ def _build_steel_form(self): apply_field_style(line_edit) line_edit.setValidator(QDoubleValidator(0.0, 99999.0, 1)) line_edit.textEdited.connect(self._handle_user_override) - self.steel_field_inputs[key] = line_edit + if self.is_deck_material and key in (KEY_CONCRETE_FCK, KEY_CONCRETE_FCTM): + line_edit.textEdited.connect(self._update_custom_material_name) + elif (not self.is_deck_material) and key in (KEY_STEEL_FU, KEY_STEEL_FY): + line_edit.textEdited.connect(self._update_custom_material_name) + self.field_inputs[key] = line_edit row.addWidget(label) row.addWidget(line_edit) @@ -304,105 +303,21 @@ def _build_steel_form(self): layout.addStretch() return widget - def _build_deck_form(self): - widget = QWidget() - layout = QVBoxLayout(widget) - layout.setContentsMargins(0, 0, 0, 0) - layout.setSpacing(10) - self.deck_field_inputs = {} - - for field_tuple in self.deck_fields: - key, display_label, widget_type, values, required, validator = field_tuple - - row = QHBoxLayout() - row.setContentsMargins(0, 0, 0, 0) - row.setSpacing(18) - - label = QLabel(display_label) - label.setTextFormat(Qt.RichText) - label.setStyleSheet("font-size: 12px; color: #2d2d2d;") - label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) - label.setFixedWidth(280) - label.setWordWrap(True) - - if key == KEY_ECM_FACTOR: - self.deck_factor_combo = NoScrollComboBox() - self.deck_factor_combo.addItems(values) - self.deck_factor_combo.setFixedWidth(242) - apply_field_style(self.deck_factor_combo) - self.deck_factor_combo.currentTextChanged.connect(self._on_factor_changed) - - self.deck_factor_custom_input = QLineEdit() - apply_field_style(self.deck_factor_custom_input) - self.deck_factor_custom_input.setPlaceholderText(PLACEHOLDER_CUSTOM_FACTOR) - self.deck_factor_custom_input.setFixedWidth(242) - self.deck_factor_custom_input.setVisible(False) - self.deck_factor_custom_input.setEnabled(False) - self.deck_factor_custom_input.setValidator(QDoubleValidator(0.1, 5.0, 1)) - self.deck_factor_custom_input.textEdited.connect(self._handle_user_override) - - row.addWidget(label) - row.addWidget(self.deck_factor_combo) - row.addStretch() - - self.deck_factor_custom_container = QWidget() - custom_layout = QHBoxLayout(self.deck_factor_custom_container) - custom_layout.setContentsMargins(0, 0, 0, 0) - custom_layout.setSpacing(18) - - custom_label = QLabel("") - custom_label.setFixedWidth(280) - custom_layout.addWidget(custom_label) - custom_layout.addWidget(self.deck_factor_custom_input) - custom_layout.addStretch() - - self.deck_factor_custom_container.setVisible(False) - layout.addWidget(self.deck_factor_custom_container) - - self.deck_field_inputs[key] = self.deck_factor_combo - else: - line_edit = QLineEdit() - line_edit.setFixedWidth(242) - apply_field_style(line_edit) - line_edit.setValidator(QDoubleValidator(0.0, 99999.0, 1)) - line_edit.textEdited.connect(self._handle_user_override) - row.addWidget(label) - row.addWidget(line_edit) - row.addStretch() - self.deck_field_inputs[key] = line_edit - - layout.addLayout(row) - - layout.addStretch() - return widget + def _is_deck_material(self, material_name: str) -> bool: + normalized = (material_name or "").strip() + return normalized in VALUES_DECK_CONCRETE_GRADE - def _initialize_member_data(self): - for member in self.MEMBER_OPTIONS: - material = self._get_parent_grade(member) - fields = self._default_fields_for_member(member, material) - self.member_data[member] = { - "material": material, - "fields": fields, - "is_default": False if member == MEMBER_OPTION_DECK else True, - "factor_label": DEFAULT_ECM_FACTOR_LABEL if member == MEMBER_OPTION_DECK else None, - "custom_factor": "1.0" if member == MEMBER_OPTION_DECK else None, - } - - def _default_fields_for_member(self, member, material=None, factor_label=None, custom_factor=None): - if member == MEMBER_OPTION_DECK: - grade = material or self._get_parent_grade(member) or (VALUES_DECK_CONCRETE_GRADE[0] if VALUES_DECK_CONCRETE_GRADE else "") - factor_label = factor_label or DEFAULT_ECM_FACTOR_LABEL - factor_value = self._factor_value_from_label(factor_label, custom_factor) - return self._deck_defaults(grade, factor_value) - grade = material or self._get_parent_grade(member) or (VALUES_MATERIAL[0] if VALUES_MATERIAL else "") - return self._steel_defaults(grade) + def _defaults_for_material(self, material_name): + if self.is_deck_material: + return self._deck_defaults(material_name, self._factor_value_from_label(DEFAULT_ECM_FACTOR_LABEL)) + return self._steel_defaults(material_name) def _steel_defaults(self, grade): grade_value = self._extract_numeric_grade(grade) defaults = STEEL_GRADE_BASE_VALUES.get(grade_value, STEEL_GRADE_BASE_VALUES[250]) result = {} - for field_tuple in self.steel_fields: + for field_tuple in steel_material_properties_values(): key = field_tuple[0] if "Fu" in key: result[key] = "{:.1f}".format(defaults["Fu"]) @@ -417,172 +332,29 @@ def _steel_defaults(self, grade): elif "Thermal" in key: result[key] = "{:.1f}".format(STEEL_THERMAL_COEFF) return result - + def _get_concrete_from_code(self, grade): - grade = grade.replace(" ", "").upper() - return CONCRETE_GRADE_BASE_VALUES.get(grade) + normalized = (grade or "").replace(" ", "").upper() + return CONCRETE_GRADE_BASE_VALUES.get(normalized) def _deck_defaults(self, grade, factor_value): data = self._get_concrete_from_code(grade) - if not data: - return {} + return { + KEY_CONCRETE_FCK: "", + KEY_CONCRETE_FCTM: "", + KEY_CONCRETE_ECM: "", + KEY_THERMAL_EXPANSION: "{:.1f}".format(STEEL_THERMAL_COEFF), + } - fck = data["fck"] - fctm = data["fctm"] ecm = round(data["Ecm"] * factor_value, 1) - - result = {} - for field_tuple in self.deck_fields: - key = field_tuple[0] - if "fck" in key: - result[key] = "{:.1f}".format(fck) - elif "fctm" in key: - result[key] = "{:.1f}".format(fctm) - elif "Ecm (GPa)" in key: - result[key] = "{:.1f}".format(ecm) - elif "Thermal" in key: - result[key] = "11.7" - return result - - def _extract_numeric_grade(self, grade, default=250): - digits = ''.join(ch for ch in grade if ch.isdigit()) - try: - return int(digits) if digits else default - except ValueError: - return default - - def _materials_for_member(self, member): - return VALUES_DECK_CONCRETE_GRADE if member == MEMBER_OPTION_DECK else VALUES_MATERIAL - - def _on_member_changed(self, member): - if self.current_member: - self._save_current_member_form() - - self.current_member = member - is_deck = member == MEMBER_OPTION_DECK - self.stack.setCurrentWidget(self.deck_page if is_deck else self.steel_page) - - data = self.member_data.get(member) - if not data: - self.member_data[member] = self._create_default_entry(member) - data = self.member_data[member] - - materials = self._materials_for_member(member) - self._loading = True - - self.material_combo.clear() - self.material_combo.addItems(materials) - if data["material"] in materials: - self.material_combo.setCurrentText(data["material"]) - elif materials: - self.material_combo.setCurrentIndex(0) - data["material"] = self.material_combo.currentText() - - if data.get("is_default") and not self._loading: - self._apply_defaults_for_member(member, update_ui=True) - else: - if is_deck: - self._populate_deck_fields(data) - else: - self._populate_steel_fields(data) - - self._loading = False - - def _populate_steel_fields(self, data): - for label, widget in self.steel_field_inputs.items(): - value = data["fields"].get(label, "") - try: - formatted_value = "{:.1f}".format(float(value)) - widget.setText(formatted_value) - except (ValueError, TypeError): - widget.setText(value) - - def _populate_deck_fields(self, data): - for label, widget in self.deck_field_inputs.items(): - if label == KEY_ECM_FACTOR: - factor_label = data.get("factor_label", DEFAULT_ECM_FACTOR_LABEL) - if factor_label not in ECM_FACTOR_LABELS: - factor_label = DEFAULT_ECM_FACTOR_LABEL - self.deck_factor_combo.blockSignals(True) - self.deck_factor_combo.setCurrentText(factor_label) - self.deck_factor_combo.blockSignals(False) - self._update_custom_factor_visibility(factor_label) - self.deck_factor_custom_input.blockSignals(True) - custom_val = data.get("custom_factor", "1.0") - try: - formatted_custom = "{:.1f}".format(float(custom_val)) - self.deck_factor_custom_input.setText(formatted_custom) - except (ValueError, TypeError): - self.deck_factor_custom_input.setText(custom_val) - self.deck_factor_custom_input.blockSignals(False) - else: - value = data["fields"].get(label, "") - try: - formatted_value = "{:.1f}".format(float(value)) - widget.setText(formatted_value) - except (ValueError, TypeError): - widget.setText(value) - - for label, widget in self.deck_field_inputs.items(): - if isinstance(widget, QLineEdit): - widget.setReadOnly(False) - widget.setEnabled(True) - - def _save_current_member_form(self): - if not self.current_member: - return - data = self.member_data.setdefault(self.current_member, self._create_default_entry(self.current_member)) - data["material"] = self.material_combo.currentText() - if self.current_member == MEMBER_OPTION_DECK: - for label, widget in self.deck_field_inputs.items(): - if label == KEY_ECM_FACTOR: - data["factor_label"] = self.deck_factor_combo.currentText() - data["custom_factor"] = self.deck_factor_custom_input.text() or "1.0" - else: - data["fields"][label] = widget.text() - factor_value = self._factor_value_from_label(data["factor_label"], data.get("custom_factor")) - data["fields"][KEY_ECM_FACTOR] = "{:.1f}".format(factor_value) - else: - for label, widget in self.steel_field_inputs.items(): - data["fields"][label] = widget.text() - data["is_default"] = self.default_checkbox.isChecked() - - def _create_default_entry(self, member): - material = self._get_parent_grade(member) return { - "material": material, - "fields": self._default_fields_for_member(member, material), - "is_default": True, - "factor_label": DEFAULT_ECM_FACTOR_LABEL if member == MEMBER_OPTION_DECK else None, - "custom_factor": "1.0" if member == MEMBER_OPTION_DECK else None, + KEY_CONCRETE_FCK: "{:.1f}".format(data["fck"]), + KEY_CONCRETE_FCTM: "{:.1f}".format(data["fctm"]), + KEY_CONCRETE_ECM: "{:.1f}".format(ecm), + KEY_THERMAL_EXPANSION: "{:.1f}".format(STEEL_THERMAL_COEFF), } - def _apply_defaults_for_member(self, member, update_ui=True): - data = self.member_data.setdefault(member, self._create_default_entry(member)) - - grade = data.get("material") or self._get_parent_grade(member) - data["material"] = grade - - if member == MEMBER_OPTION_DECK: - data["factor_label"] = DEFAULT_ECM_FACTOR_LABEL - data["custom_factor"] = "1.0" - factor_value = self._factor_value_from_label(DEFAULT_ECM_FACTOR_LABEL) - data["fields"] = self._deck_defaults(grade, factor_value) - else: - data["fields"] = self._steel_defaults(grade) - data["is_default"] = True - - if update_ui and member == self.current_member: - self._loading = True - self.material_combo.setCurrentText(grade) - if member == MEMBER_OPTION_DECK: - self._populate_deck_fields(data) - else: - self._populate_steel_fields(data) - self.default_checkbox.setChecked(True) - self._loading = False - def _factor_value_from_label(self, label, custom_factor=None): for text, value in ECM_FACTOR_OPTIONS: if text == label: @@ -593,116 +365,135 @@ def _factor_value_from_label(self, label, custom_factor=None): return 1.0 return value return 1.0 + + def _extract_numeric_grade(self, grade, default=250): + text = (grade or "").upper().replace(" ", "") - def _reset_current_member_to_defaults(self): - if not self.current_member: - return - - self._apply_defaults_for_member(self.current_member, update_ui=False) - data = self.member_data.get(self.current_member) - if not data: - return - - target_material = data.get("material", "") - self._loading = True - if target_material: - index = self.material_combo.findText(target_material) - if index >= 0: - self.material_combo.setCurrentIndex(index) - elif self.material_combo.count() > 0: - self.material_combo.setCurrentIndex(0) - data["material"] = self.material_combo.currentText() - if self.current_member == MEMBER_OPTION_DECK: - self._populate_deck_fields(data) - else: - self._populate_steel_fields(data) - self._loading = False + # Primary path: extract the base 3-digit steel grade from codes like + # E350B0, E350BR, E 250A, etc. + match = re.search(r"E?(250|275|300|350|410|450|550|600|650)", text) + if match: + return int(match.group(1)) - self.default_checkbox.blockSignals(True) - self.default_checkbox.setChecked(True) - self.default_checkbox.blockSignals(False) - self._save_current_member_form() + digits = ''.join(ch for ch in text if ch.isdigit()) + if not digits: + return default - def _update_custom_factor_visibility(self, label): - is_custom = label == CUSTOM_ECM_FACTOR_LABEL - self.deck_factor_custom_container.setVisible(is_custom) - self.deck_factor_custom_input.setEnabled(is_custom) + # Fallback path: if extra suffix digits exist, try first 3 digits. + if len(digits) >= 3: + first_three = int(digits[:3]) + if first_three in STEEL_GRADE_BASE_VALUES: + return first_three - def _on_material_changed(self, material): - if self._loading: - return + try: + parsed = int(digits) + return parsed if parsed in STEEL_GRADE_BASE_VALUES else default + except ValueError: + return default - data = self.member_data.get(self.current_member) - if not data: - return - - data["material"] = material - - if self.current_member == MEMBER_OPTION_DECK: - factor_value = self._factor_value_from_label( - data.get("factor_label", DEFAULT_ECM_FACTOR_LABEL), - data.get("custom_factor") - ) - data["fields"] = self._deck_defaults(material, factor_value) - self._populate_deck_fields(data) - else: - data["fields"] = self._steel_defaults(material) - self._populate_steel_fields(data) + def _populate_fields(self): + for label, widget in self.field_inputs.items(): + value = self.form_data["fields"].get(label, "") + try: + formatted_value = "{:.1f}".format(float(value)) + widget.setText(formatted_value) + except (ValueError, TypeError): + widget.setText(value) - data["is_default"] = True - self.default_checkbox.blockSignals(True) - self.default_checkbox.setChecked(True) - self.default_checkbox.blockSignals(False) + def _save_form(self): + self.form_data["material"] = self.material_input.text().strip() or CUSTOM_MATERIAL_PREFIX + for label, widget in self.field_inputs.items(): + self.form_data["fields"][label] = widget.text() - def _on_default_toggled(self, state): + def _handle_user_override(self): if self._loading: return + + def _normalize_material_token(self, text): + value = (text or "").strip() + if not value: + return "" try: - check_state = Qt.CheckState(state) + num = float(value) + if num.is_integer(): + return str(int(num)) + return f"{num:g}" except ValueError: - check_state = Qt.CheckState.Checked if bool(state) else Qt.CheckState.Unchecked - if check_state == Qt.CheckState.Checked: - self._reset_current_member_to_defaults() - else: - data = self.member_data.get(self.current_member) - if data: - data["is_default"] = False + return value - def _on_factor_changed(self, label): - self._update_custom_factor_visibility(label) - self._handle_user_override() - - def _handle_user_override(self): - if self._loading: + def _update_custom_material_name(self, *_): + if self.read_only: return - if self.default_checkbox.isChecked(): - self._loading = True - self.default_checkbox.setChecked(False) - self._loading = False - data = self.member_data.get(self.current_member) - if data: - data["is_default"] = False - self._save_current_member_form() - - def _get_parent_grade(self, member): - parent = self.parent_dock - if not parent: - return "" - mapping = { - MEMBER_OPTION_GIRDER: getattr(parent, "girder_combo", None), - MEMBER_OPTION_CROSS_BRACING: getattr(parent, "cross_bracing_combo", None), - MEMBER_OPTION_END_DIAPHRAGM: getattr(parent, "end_diaphragm_combo", None), - MEMBER_OPTION_DECK: getattr(parent, "deck_combo", None), - } - combo = mapping.get(member) - return combo.currentText() if combo else "" + + if self.is_deck_material: + fck_input = self.field_inputs.get(KEY_CONCRETE_FCK) + fctm_input = self.field_inputs.get(KEY_CONCRETE_FCTM) + val1 = self._normalize_material_token(fck_input.text() if fck_input else "") + val2 = self._normalize_material_token(fctm_input.text() if fctm_input else "") + else: + fy_input = self.field_inputs.get(KEY_STEEL_FY) + fu_input = self.field_inputs.get(KEY_STEEL_FU) + val1 = self._normalize_material_token(fy_input.text() if fy_input else "") + val2 = self._normalize_material_token(fu_input.text() if fu_input else "") + + parts = [part for part in (val1, val2) if part] + material_name = CUSTOM_MATERIAL_PREFIX + "_".join(parts) if parts else CUSTOM_MATERIAL_PREFIX + self.material_input.setText(material_name) + + def _set_read_only_fields(self, enabled: bool): + for widget in self.field_inputs.values(): + widget.setReadOnly(enabled) + widget.setEnabled(not enabled) + if enabled: + widget.setStyleSheet(""" + QLineEdit { + padding: 1px 7px; + border: 1px solid #a8a8a8; + border-radius: 6px; + background-color: #f1f1f1; + color: #555555; + } + """) + + def _load_material_info_for_view(self, material_name: str): + name = (material_name or "").strip() + if not name: + name = CUSTOM_MATERIAL_PREFIX + + self.form_data["material"] = name + + if self.custom_fields: + self.form_data["fields"] = self.custom_fields.copy() + else: + if self.is_deck_material: + factor = self._factor_value_from_label(DEFAULT_ECM_FACTOR_LABEL) + self.form_data["fields"] = self._deck_defaults(name, factor) + else: + fy_value = "" + fu_value = "" + + custom_match = re.match(r"^Cus_([0-9]+(?:\.[0-9]+)?)_([0-9]+(?:\.[0-9]+)?)$", name, re.IGNORECASE) + if custom_match: + fy_value = custom_match.group(1) + fu_value = custom_match.group(2) + else: + grade_value = self._extract_numeric_grade(name, default=None) + defaults = STEEL_GRADE_BASE_VALUES.get(grade_value) if grade_value is not None else None + if defaults: + fy_value = "{:.1f}".format(defaults["Fy"]) + fu_value = "{:.1f}".format(defaults["Fu"]) + + self.form_data["fields"] = { + KEY_STEEL_FY: fy_value, + KEY_STEEL_FU: fu_value, + KEY_STEEL_E: "{:.1f}".format(STEEL_MODULUS_E_GPA), + KEY_STEEL_G: "{:.1f}".format(STEEL_MODULUS_G_GPA), + KEY_STEEL_POISSON: "{:.1f}".format(STEEL_POISSON_RATIO), + KEY_THERMAL_EXPANSION: "{:.1f}".format(STEEL_THERMAL_COEFF), + } + + self.material_input.setText(name) + self._populate_fields() def set_member(self, member): - index = self.member_combo.findText(member) - if index >= 0: - self.member_combo.setCurrentIndex(index) - - def sync_with_parent_defaults(self): - for member, data in self.member_data.items(): - if data.get("is_default"): - self._apply_defaults_for_member(member, update_ui=(member == self.current_member)) \ No newline at end of file + _ = member \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 91e5af80f..a4f8fd3e4 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -5,7 +5,7 @@ import json from PySide6.QtWidgets import ( QApplication, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, - QComboBox, QScrollArea, QLabel, QLineEdit, QGroupBox, QSizePolicy, QMessageBox, QDialog, QCheckBox, QFrame, + QComboBox, QScrollArea, QLabel, QLineEdit, QGroupBox, QSizePolicy, QMessageBox, QDialog, QToolButton, QFrame, ) from PySide6.QtCore import Qt, QRegularExpression, QSize, QTimer, QPoint, QEvent, Signal @@ -18,7 +18,8 @@ from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style from osdagbridge.desktop.ui.dialogs.material_properties import MaterialPropertiesDialog -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType class NoScrollComboBox(QComboBox): def wheelEvent(self, event): @@ -27,6 +28,7 @@ def wheelEvent(self, event): class InputDock(QWidget): # Signal emitted when any input value changes input_value_changed = Signal() + MATERIAL_CUSTOM_OPTION = "Custom" def __init__(self, backend, parent): super().__init__() @@ -58,6 +60,9 @@ def __init__(self, backend, parent): self.design_btn = None self.design_mode_combo = None self._current_design_mode = "Optimized" + self._material_custom_fields = {} + self._material_previous_selection = {} + self._material_combo_map = {} self.setStyleSheet("background: transparent;") self.main_layout = QHBoxLayout(self) @@ -1018,12 +1023,6 @@ def _default_row_config(self, row_type): {"text": "Modify Here", "action": "show_additional_inputs"}, ], }, - "material_properties": { - "label": "Properties", - "buttons": [ - {"text": "Modify Here", "action": "show_material_properties_dialog"}, - ], - }, } return mapping.get(row_type, {}) @@ -1119,7 +1118,29 @@ def _create_field_row(self, section_context, key, label, field_type, values, val field_label.setStyleSheet(self._section_label_style()) field_label.setMinimumWidth(110) row.addWidget(field_label) - row.addWidget(widget, 1) + if self._is_material_input_key(key) and isinstance(widget, QComboBox): + combo_container = QWidget() + combo_layout = QHBoxLayout(combo_container) + combo_layout.setContentsMargins(0, 0, 0, 0) + combo_layout.setSpacing(4) + combo_layout.addWidget(widget, 1) + + info_btn = QToolButton() + info_btn.setCursor(Qt.CursorShape.PointingHandCursor) + info_btn.setToolTip("View material properties") + info_btn.setAutoRaise(True) + info_btn.setIcon(QIcon(":/vectors/msg_about.svg")) + info_btn.setFixedSize(20, 20) + info_btn.setStyleSheet("QToolButton { border: none; padding: 0px; background: transparent; }") + if info_btn.icon().isNull(): + info_btn.setText("i") + info_btn.setToolTip("View selected material properties") + info_btn.clicked.connect(lambda _checked=False, k=key: self._show_selected_material_info_for_key(k)) + combo_layout.addWidget(info_btn) + + row.addWidget(combo_container, 1) + else: + row.addWidget(widget, 1) if metadata.get("add_stretch"): row.addStretch() section_context["layout"].addLayout(row) @@ -1134,7 +1155,11 @@ def _create_input_widget(self, key, field_type, values, validator, metadata): apply_field_style(widget) if values: - widget.addItems(values) + items = [str(v) for v in values] + if self._is_material_input_key(key_name): + items = [item for item in items if item != self.MATERIAL_CUSTOM_OPTION] + items.append(self.MATERIAL_CUSTOM_OPTION) + widget.addItems(items) # Prefer backend-stored value, else metadata default. try: @@ -1147,6 +1172,9 @@ def _create_input_widget(self, key, field_type, values, validator, metadata): init_value = backend_value if backend_value not in (None, "") else default_value if init_value not in (None, ""): idx = widget.findText(str(init_value)) + if idx < 0 and self._is_material_input_key(key_name): + self._ensure_material_option(widget, str(init_value)) + idx = widget.findText(str(init_value)) if idx >= 0: widget.setCurrentIndex(idx) @@ -1252,16 +1280,125 @@ def _apply_field_specific_config(self, key, widget, metadata): elif key == KEY_SKEW_ANGLE and isinstance(widget, QLineEdit): widget.setValidator(QDoubleValidator(SKEW_ANGLE_MIN, SKEW_ANGLE_MAX, 1)) widget.setPlaceholderText(f"{SKEW_ANGLE_MIN} - {SKEW_ANGLE_MAX}°") - elif key == KEY_DECK_CONCRETE_GRADE_BASIC and hasattr(widget, "findText"): - default_value = metadata.get("default") - if default_value: - idx = widget.findText(default_value) - if idx >= 0: - widget.setCurrentIndex(idx) + elif self._is_material_input_key(key) and isinstance(widget, QComboBox): + if key == KEY_DECK_CONCRETE_GRADE_BASIC and hasattr(widget, "findText"): + default_value = metadata.get("default") + if default_value: + idx = widget.findText(default_value) + if idx >= 0: + widget.setCurrentIndex(idx) + self._material_combo_map[key] = widget + current_text = str(widget.currentText() or "").strip() + if current_text and current_text != self.MATERIAL_CUSTOM_OPTION: + self._material_previous_selection[key] = current_text + widget.currentTextChanged.connect( + lambda text, k=key, w=widget: self._on_material_selection_changed(k, w, text) + ) elif key == "Design" and hasattr(widget, "currentTextChanged"): widget.currentTextChanged.connect(self._on_design_mode_changed) self._on_design_mode_changed(widget.currentText()) + def _is_material_input_key(self, key) -> bool: + return key in { + KEY_GIRDER, + KEY_CROSS_BRACING, + KEY_END_DIAPHRAGM, + KEY_DECK_CONCRETE_GRADE_BASIC, + } + + def _material_member_for_key(self, key: str) -> str: + return "Deck" if key in {KEY_DECK_CONCRETE_GRADE_BASIC, KEY_DECK} else "Girder" + + def _set_combo_text_without_signal(self, combo: QComboBox, text: str) -> None: + idx = combo.findText(text) + if idx < 0: + return + blocked = combo.blockSignals(True) + try: + combo.setCurrentIndex(idx) + finally: + combo.blockSignals(blocked) + + def _ensure_material_option(self, combo: QComboBox, material_name: str) -> None: + name = str(material_name or "").strip() + if not name or combo.findText(name) >= 0: + return + custom_idx = combo.findText(self.MATERIAL_CUSTOM_OPTION) + insert_at = custom_idx if custom_idx >= 0 else combo.count() + combo.insertItem(insert_at, name) + + def _first_non_custom_option(self, combo: QComboBox) -> str: + for idx in range(combo.count()): + value = str(combo.itemText(idx) or "").strip() + if value and value != self.MATERIAL_CUSTOM_OPTION: + return value + return "" + + def _open_custom_material_dialog_for_key(self, key: str, combo: QComboBox) -> bool: + member = self._material_member_for_key(key) + previous_value = self._material_previous_selection.get(key, "") + + # Intentionally not passing parent to preserve original dialog appearance. + dialog = MaterialPropertiesDialog(read_only=False, selected_material=previous_value, member=member) + if dialog.exec() != QDialog.Accepted: + return False + + form_data = getattr(dialog, "form_data", {}) + material_name = str(form_data.get("material", "") or "").strip() + fields = form_data.get("fields", {}) + if not material_name: + return False + + self._material_custom_fields[material_name] = dict(fields) if isinstance(fields, dict) else {} + self._ensure_material_option(combo, material_name) + self._set_combo_text_without_signal(combo, material_name) + self._material_previous_selection[key] = material_name + self._push_backend_value(key, material_name) + self.emit_value_changed() + return True + + def _on_material_selection_changed(self, key: str, combo: QComboBox, selected_text: str) -> None: + selected = str(selected_text or "").strip() + if not selected: + return + + if selected == self.MATERIAL_CUSTOM_OPTION: + accepted = self._open_custom_material_dialog_for_key(key, combo) + if accepted: + return + fallback = self._material_previous_selection.get(key) or self._first_non_custom_option(combo) + if fallback: + self._set_combo_text_without_signal(combo, fallback) + self._push_backend_value(key, fallback) + return + + self._material_previous_selection[key] = selected + + def _show_selected_material_info_for_key(self, key: str) -> None: + combo = self._material_combo_map.get(key) + if combo is None: + return + + selected_material = str(combo.currentText() or "").strip() + if not selected_material or selected_material == self.MATERIAL_CUSTOM_OPTION: + CustomMessageBox( + title="Material Data Unavailable", + text="No material selected or custom material details not provided.", + dialogType=MessageBoxType.Warning + ).exec() + return + + member = self._material_member_for_key(key) + custom_fields = self._material_custom_fields.get(selected_material) + # Intentionally not passing parent to preserve original dialog appearance. + dialog = MaterialPropertiesDialog( + read_only=True, + selected_material=selected_material, + member=member, + custom_fields=custom_fields, + ) + dialog.exec() + def _get_basic_design_mode(self) -> str: if self.design_mode_combo is not None and hasattr(self.design_mode_combo, "currentText"): value = str(self.design_mode_combo.currentText() or "").strip() @@ -1374,27 +1511,3 @@ def _is_median_included(self): if not self.include_median_combo: return False return self.include_median_combo.currentText().lower() == "yes" - - def show_material_properties_dialog(self): - """Open the material properties dialog with the relevant member selected.""" - if self.material_dialog is None: - self.material_dialog = MaterialPropertiesDialog() - - member = "Girder" - focus_widget = QApplication.focusWidget() - focus_map = { - getattr(self, 'girder_combo', None): "Girder", - getattr(self, 'deck_combo', None): "Deck", - getattr(self, 'cross_bracing_combo', None): "Cross Bracing", - getattr(self, 'end_diaphragm_combo', None): "End Diaphragm", - } - for widget, name in focus_map.items(): - if widget is not None and widget is focus_widget: - member = name - break - - self.material_dialog.sync_with_parent_defaults() - self.material_dialog.set_member(member) - self.material_dialog.show() - self.material_dialog.raise_() - self.material_dialog.activateWindow() \ No newline at end of file From 5292f889cc8c8ef74417f275bb7af5df44cc7d81 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Thu, 5 Mar 2026 00:56:02 +0530 Subject: [PATCH 068/225] disable other option and sync all custom material properties across all steel members --- .../desktop/ui/dialogs/material_properties.py | 25 +++++++++++++++++-- .../desktop/ui/docks/input_dock.py | 17 +++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/material_properties.py b/src/osdagbridge/desktop/ui/dialogs/material_properties.py index 67874d5ba..20a376152 100644 --- a/src/osdagbridge/desktop/ui/dialogs/material_properties.py +++ b/src/osdagbridge/desktop/ui/dialogs/material_properties.py @@ -8,7 +8,7 @@ from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style -from osdagbridge.core.utils.common import VALUES_MATERIAL, VALUES_DECK_CONCRETE_GRADE +from osdagbridge.core.utils.common import VALUES_MATERIAL, VALUES_DECK_CONCRETE_GRADE, KEY_GIRDER, KEY_CROSS_BRACING, KEY_END_DIAPHRAGM DIALOG_TITLE_MATERIAL_PROPERTIES = "Enter Custom Properties" @@ -496,4 +496,25 @@ def _load_material_info_for_view(self, material_name: str): self._populate_fields() def set_member(self, member): - _ = member \ No newline at end of file + _ = member + +def sync_custom_materials_across_steel_members(combo_map, ensure_option_callback, material_name=None): + steel_keys = [KEY_GIRDER, KEY_CROSS_BRACING, KEY_END_DIAPHRAGM] + custom_materials = set() + + if material_name: + custom_materials.add(material_name) + else: + for key in steel_keys: + if key in combo_map: + combo = combo_map[key] + for i in range(combo.count()): + text = combo.itemText(i) + if text.startswith("Cus_"): + custom_materials.add(text) + + for key in steel_keys: + if key in combo_map: + combo = combo_map[key] + for mat in custom_materials: + ensure_option_callback(combo, mat) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index a4f8fd3e4..09d9b3b19 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -9,14 +9,14 @@ ) from PySide6.QtCore import Qt, QRegularExpression, QSize, QTimer, QPoint, QEvent, Signal -from PySide6.QtGui import QPixmap, QDoubleValidator, QRegularExpressionValidator, QIcon +from PySide6.QtGui import QPixmap, QDoubleValidator, QRegularExpressionValidator, QIcon, QColor, QBrush from PySide6.QtSvgWidgets import * from osdagbridge.core.utils.common import * from osdagbridge.desktop.ui.dialogs.additional_inputs import AdditionalInputs from osdagbridge.desktop.ui.utils.custom_buttons import DockCustomButton from osdagbridge.desktop.ui.dialogs.project_location import ProjectLocationDialog from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style -from osdagbridge.desktop.ui.dialogs.material_properties import MaterialPropertiesDialog +from osdagbridge.desktop.ui.dialogs.material_properties import MaterialPropertiesDialog, sync_custom_materials_across_steel_members from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType @@ -831,6 +831,7 @@ def _build_basic_inputs(self, field_definitions, root_layout): self._finalize_section_contexts() self._update_carriageway_placeholder() + sync_custom_materials_across_steel_members(self._material_combo_map, self._ensure_material_option) def _normalize_definition(self, definition): if len(definition) == 6: @@ -1161,6 +1162,16 @@ def _create_input_widget(self, key, field_type, values, validator, metadata): items.append(self.MATERIAL_CUSTOM_OPTION) widget.addItems(items) + for i, text in enumerate(items): + # Intentionally disabling other option + if text == "Other": + widget.setItemData(i, QBrush(QColor("gray")), Qt.ItemDataRole.ForegroundRole) + model = widget.model() + if hasattr(model, 'item'): + item = model.item(i) + if item: + item.setEnabled(False) + # Prefer backend-stored value, else metadata default. try: backend_value = self.backend.get_input_value(key_name) if key_name and hasattr(self.backend, "get_input_value") else None @@ -1351,6 +1362,8 @@ def _open_custom_material_dialog_for_key(self, key: str, combo: QComboBox) -> bo self._material_custom_fields[material_name] = dict(fields) if isinstance(fields, dict) else {} self._ensure_material_option(combo, material_name) + if member == "Girder": + sync_custom_materials_across_steel_members(self._material_combo_map, self._ensure_material_option, material_name) self._set_combo_text_without_signal(combo, material_name) self._material_previous_selection[key] = material_name self._push_backend_value(key, material_name) From b5dfa109c74cc1edf377a8698c0494735a5eb2a0 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Thu, 5 Mar 2026 00:58:56 +0530 Subject: [PATCH 069/225] Move custom titlebar back to utils --- src/osdagbridge/desktop/ui/dialogs/additional_inputs.py | 2 +- src/osdagbridge/desktop/ui/dialogs/custom_messagebox.py | 2 +- src/osdagbridge/desktop/ui/dialogs/deck_design.py | 2 +- src/osdagbridge/desktop/ui/dialogs/material_properties.py | 2 +- src/osdagbridge/desktop/ui/dialogs/project_location.py | 2 +- src/osdagbridge/desktop/ui/dialogs/steel_design.py | 2 +- .../desktop/ui/dialogs/tabs/custom_vehicle_dialog.py | 2 +- src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py | 2 +- .../desktop/ui/dialogs/tabs/section_properties_tab.py | 2 +- .../ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py | 2 +- .../sub_tabs/section_properties/cross_bracing_details_tab.py | 2 +- .../sub_tabs/section_properties/end_diaphragm_details_tab.py | 2 +- .../tabs/sub_tabs/section_properties/girder_details_tab.py | 2 +- .../desktop/ui/dialogs/tabs/typical_section_details.py | 2 +- src/osdagbridge/desktop/ui/docks/input_dock.py | 2 +- .../desktop/ui/{dialogs => utils}/custom_titlebar.py | 0 16 files changed, 15 insertions(+), 15 deletions(-) rename src/osdagbridge/desktop/ui/{dialogs => utils}/custom_titlebar.py (100%) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index a2e5674bb..093e3fa7b 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -15,7 +15,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style, create_action_button_bar from osdagbridge.desktop.ui.dialogs.tabs.typical_section_details import TypicalSectionDetailsTab from osdagbridge.desktop.ui.dialogs.tabs.optimizable_field import OptimizableField diff --git a/src/osdagbridge/desktop/ui/dialogs/custom_messagebox.py b/src/osdagbridge/desktop/ui/dialogs/custom_messagebox.py index 697f41cab..4efbbf442 100644 --- a/src/osdagbridge/desktop/ui/dialogs/custom_messagebox.py +++ b/src/osdagbridge/desktop/ui/dialogs/custom_messagebox.py @@ -7,7 +7,7 @@ # from custom_titlebar import CustomTitleBar # from resources_rc import * -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.resources.resources_rc import * class MessageBoxType: diff --git a/src/osdagbridge/desktop/ui/dialogs/deck_design.py b/src/osdagbridge/desktop/ui/dialogs/deck_design.py index 7cd688a2f..80407105b 100644 --- a/src/osdagbridge/desktop/ui/dialogs/deck_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/deck_design.py @@ -18,7 +18,7 @@ from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.styled_scroll_area import StyledScrollArea -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar class NoScrollTable(QTableWidget): diff --git a/src/osdagbridge/desktop/ui/dialogs/material_properties.py b/src/osdagbridge/desktop/ui/dialogs/material_properties.py index 20a376152..008e28bd3 100644 --- a/src/osdagbridge/desktop/ui/dialogs/material_properties.py +++ b/src/osdagbridge/desktop/ui/dialogs/material_properties.py @@ -5,7 +5,7 @@ from PySide6.QtGui import QDoubleValidator import re -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style from osdagbridge.core.utils.common import VALUES_MATERIAL, VALUES_DECK_CONCRETE_GRADE, KEY_GIRDER, KEY_CROSS_BRACING, KEY_END_DIAPHRAGM diff --git a/src/osdagbridge/desktop/ui/dialogs/project_location.py b/src/osdagbridge/desktop/ui/dialogs/project_location.py index a250eb2b5..92089e0cb 100644 --- a/src/osdagbridge/desktop/ui/dialogs/project_location.py +++ b/src/osdagbridge/desktop/ui/dialogs/project_location.py @@ -4,7 +4,7 @@ QRadioButton, QButtonGroup, QStackedWidget, QSpacerItem ) from PySide6.QtCore import Qt -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.core.bridge_types.plate_girder.ui_fields_project_location import ( get_state_list, diff --git a/src/osdagbridge/desktop/ui/dialogs/steel_design.py b/src/osdagbridge/desktop/ui/dialogs/steel_design.py index e214494aa..93c6a7d10 100644 --- a/src/osdagbridge/desktop/ui/dialogs/steel_design.py +++ b/src/osdagbridge/desktop/ui/dialogs/steel_design.py @@ -3,7 +3,7 @@ ) from PySide6.QtCore import Qt -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.steel_design_details import SteelDesignDetailsTab from osdagbridge.desktop.ui.dialogs.tabs.steel_design_analysis import SteelDesignAnalysisTab from osdagbridge.desktop.ui.dialogs.tabs.steel_design_check import SteelDesignCheckTab diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py b/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py index e7aa848b2..07859e9c3 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py @@ -12,7 +12,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style class CustomVehicleDialog(QDialog): diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py b/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py index c052595c0..09eb0cd43 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py @@ -12,7 +12,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style class OptimizableField(QWidget): diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py index 716560e11..896eee012 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py @@ -12,7 +12,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator, QColor from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.girder_details_tab import GirderDetailsTab from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.stiffener_details_tab import StiffenerDetailsTab diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py index 2e116d73d..f91ec3773 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py @@ -17,7 +17,7 @@ from PySide6.QtWidgets import QHeaderView from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( LOAD_COMBINATION_TAB_SCHEMA, ) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py index b468696aa..ce59b45a5 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py @@ -12,7 +12,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.widgets.section_viewer import SectionPreviewWidget, SectionCatalog from osdagbridge.desktop.ui.widgets.placeholder_section_preview import PlaceholderSectionPreviewWidget diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py index 51ec3d1e6..65a0e9189 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py @@ -19,7 +19,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview from osdagbridge.desktop.ui.widgets.section_viewer import SectionCatalog, SectionPreviewWidget diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py index 24e824399..764e91852 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py @@ -45,7 +45,7 @@ VALUES_WEB_TYPE, ) from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index a96b3a7e6..908ded84d 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -14,7 +14,7 @@ from osdagbridge.core.bridge_types.plate_girder.bridge_geometry import CrossSectionLayout from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.typical_section.layout_tab import LayoutTab from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.typical_section.crash_barrier_tab import CrashBarrierTab diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 09d9b3b19..db44f93db 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -18,7 +18,7 @@ from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style from osdagbridge.desktop.ui.dialogs.material_properties import MaterialPropertiesDialog, sync_custom_materials_across_steel_members -from osdagbridge.desktop.ui.dialogs.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType class NoScrollComboBox(QComboBox): diff --git a/src/osdagbridge/desktop/ui/dialogs/custom_titlebar.py b/src/osdagbridge/desktop/ui/utils/custom_titlebar.py similarity index 100% rename from src/osdagbridge/desktop/ui/dialogs/custom_titlebar.py rename to src/osdagbridge/desktop/ui/utils/custom_titlebar.py From cd9c67c67741635f5e9f0be9a1efb2acf1e94acf Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Thu, 5 Mar 2026 02:20:19 +0530 Subject: [PATCH 070/225] Move design type below modify additional geometry and connect Custom option to open member props --- .../bridge_types/plate_girder/ui_fields.py | 58 ++++++++++++++----- .../desktop/ui/docks/input_dock.py | 30 ++++++++-- 2 files changed, 68 insertions(+), 20 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index f67f36a06..c3040fd76 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -186,18 +186,6 @@ def input_values(self): 'No Validator', { "container": "superstructure", - "post_rows": [ - { - "type": "additional_geometry", - "label": "Additional Geometry", - "buttons": [ - { - "text": "Modify Here", - "action": "show_additional_inputs", - } - ], - } - ], }, ) ) @@ -256,15 +244,55 @@ def input_values(self): {"label": "Skew Angle"}, ) ) + options_list.append( + ( + "section_additional_geometry", + "", + TYPE_TITLE, + None, + True, + 'No Validator', + { + "container": "superstructure", + "show_group_title": False, + "post_rows": [ + { + "type": "additional_geometry", + "label": "Additional Geometry", + "buttons": [ + { + "text": "Modify Here", + "action": "show_additional_inputs", + } + ], + } + ], + }, + ) + ) + options_list.append( + ( + "section_design_type", + "", + TYPE_TITLE, + None, + True, + 'No Validator', + { + "container": "superstructure", + "show_group_title": False, + }, + ) + ) options_list.append( ( "Design", - "Design", + "Design Type", TYPE_COMBOBOX, - ["Optimized", "Customized"], + ["Optimized", "Custom"], True, 'No Validator', - {"label": "Design", "default": "Optimized"}, + {"label": "Design Type", "default": "Optimized"}, ) ) diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index db44f93db..fd2c0c104 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -739,8 +739,8 @@ def _on_design_clicked(self) -> None: # Option 2: print merged inputs for quick verification. self._debug_dump_final_inputs(self._final_inputs_saved_list) - def show_additional_inputs(self): - """Show Additional Inputs dialog""" + def _show_additional_inputs_dialog(self, target_tab_name=None): + """Show Additional Inputs dialog and optionally focus a specific top-level tab.""" footpath_value = self.footpath_combo.currentText() if self.footpath_combo else "None" carriageway_width = self._get_effective_carriageway_width() @@ -764,6 +764,16 @@ def show_additional_inputs(self): except Exception: pass + if target_tab_name: + try: + for idx in range(self.additional_inputs.tabs.count()): + tab_text = str(self.additional_inputs.tabs.tabText(idx) or "").strip() + if tab_text.lower() == str(target_tab_name).strip().lower(): + self.additional_inputs.tabs.setCurrentIndex(idx) + break + except Exception: + pass + # Capture state when dialog closes. try: self.additional_inputs.finished.connect(self._handle_additional_inputs_closed) @@ -781,6 +791,10 @@ def show_additional_inputs(self): self.additional_input_values = values # Emit signal to trigger CAD update self.input_value_changed.emit() + + def show_additional_inputs(self): + """Show Additional Inputs dialog with its default initial tab.""" + self._show_additional_inputs_dialog() def _apply_lock_state(self): self.update_lock_icon() @@ -1306,8 +1320,8 @@ def _apply_field_specific_config(self, key, widget, metadata): lambda text, k=key, w=widget: self._on_material_selection_changed(k, w, text) ) elif key == "Design" and hasattr(widget, "currentTextChanged"): - widget.currentTextChanged.connect(self._on_design_mode_changed) - self._on_design_mode_changed(widget.currentText()) + widget.currentTextChanged.connect(self._on_design_mode_changed_from_user) + self._set_design_mode(widget.currentText(), open_member_properties=False) def _is_material_input_key(self, key) -> bool: return key in { @@ -1420,7 +1434,7 @@ def _get_basic_design_mode(self) -> str: value = str(getattr(self, "_current_design_mode", "") or "").strip() return value or "Optimized" - def _on_design_mode_changed(self, mode_text: str) -> None: + def _set_design_mode(self, mode_text: str, open_member_properties: bool = False) -> None: mode = str(mode_text or "").strip() or "Optimized" self._current_design_mode = mode @@ -1431,6 +1445,12 @@ def _on_design_mode_changed(self, mode_text: str) -> None: except Exception: pass + if open_member_properties and mode.lower() in {"custom"}: + self._show_additional_inputs_dialog("Member Properties") + + def _on_design_mode_changed_from_user(self, mode_text: str) -> None: + self._set_design_mode(mode_text, open_member_properties=True) + def _finalize_section_contexts(self): for context in self.section_contexts.values(): metadata = context.get("metadata", {}) From 38624396a3180071de9b0e03228dc545c0508314 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Fri, 6 Mar 2026 17:55:19 +0530 Subject: [PATCH 071/225] remove hard coded deck and steel data (now using DB) and add DB tables for same --- .../bridge_types/plate_girder/ui_fields.py | 2 +- .../core/data/ResourceFiles/Intg_osdag.sql | 69 ++++++-- src/osdagbridge/core/utils/common.py | 2 +- .../desktop/ui/dialogs/material_properties.py | 151 +++++++++++++----- 4 files changed, 169 insertions(+), 55 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index c3040fd76..ad58c28ea 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -352,7 +352,7 @@ def input_values(self): VALUES_DECK_CONCRETE_GRADE, True, 'No Validator', - {"label": "Deck", "default": "M 25"}, + {"label": "Deck"}, ) ) diff --git a/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql b/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql index 8000cd4f2..16ed4ee18 100644 --- a/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql +++ b/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql @@ -63,23 +63,38 @@ INSERT INTO Angle_Pitch VALUES(11,150,20,2,55,55,NULL); INSERT INTO Angle_Pitch VALUES(13,200,30,2,75,75,NULL); INSERT INTO Angle_Pitch VALUES(12,200,20,3,55,55,55); CREATE TABLE IF NOT EXISTS "Material" ( - "Grade" TEXT, - "Yield Stress (< 20)" INTEGER, - "Yield Stress (20 -40)" INTEGER, - "Yield Stress (> 40)" INTEGER, - "Ultimate Tensile Stress" INTEGER, - "Elongation " INTEGER + "Material Name" TEXT, + "Yield Strength" INTEGER, + "Ultimate Tensile Strength" INTEGER ); -INSERT INTO Material VALUES('E 165 (Fe 290)',165,165,165,290,23); -INSERT INTO Material VALUES('E 250 (Fe 410 W)A',250,240,230,410,23); -INSERT INTO Material VALUES('E 250 (Fe 410 W)B',250,240,230,410,23); -INSERT INTO Material VALUES('E 250 (Fe 410 W)C',250,240,230,410,23); -INSERT INTO Material VALUES('E 300 (Fe 440)',300,290,280,440,22); -INSERT INTO Material VALUES('E 350 (Fe 490)',350,330,320,490,22); -INSERT INTO Material VALUES('E 410 (Fe 540)',410,390,380,540,20); -INSERT INTO Material VALUES('E 450 (Fe 570)D',450,430,420,570,20); -INSERT INTO Material VALUES('E 450 (Fe 590) E',450,430,420,590,20); -INSERT INTO Material VALUES('Cus_400_500_600_1400',400,500,600,1400,20); +INSERT INTO Material VALUES('E 250A',250,410); +INSERT INTO Material VALUES('E 250BR',250,410); +INSERT INTO Material VALUES('E 250B0',250,410); +INSERT INTO Material VALUES('E 250C',250,410); +INSERT INTO Material VALUES('E 275A',275,430); +INSERT INTO Material VALUES('E 275BR',275,430); +INSERT INTO Material VALUES('E 275B0',275,430); +INSERT INTO Material VALUES('E 275C',275,430); +INSERT INTO Material VALUES('E 300A',300,440); +INSERT INTO Material VALUES('E 300BR',300,440); +INSERT INTO Material VALUES('E 300B0',300,440); +INSERT INTO Material VALUES('E 300C',300,440); +INSERT INTO Material VALUES('E 350A',350,490); +INSERT INTO Material VALUES('E 350BR',350,490); +INSERT INTO Material VALUES('E 350B0',350,490); +INSERT INTO Material VALUES('E 350C',350,490); +INSERT INTO Material VALUES('E 410A',410,540); +INSERT INTO Material VALUES('E 410BR',410,540); +INSERT INTO Material VALUES('E 410B0',410,540); +INSERT INTO Material VALUES('E 410C',410,540); +INSERT INTO Material VALUES('E 450A',450,570); +INSERT INTO Material VALUES('E 450BR',450,570); +INSERT INTO Material VALUES('E 550A',550,650); +INSERT INTO Material VALUES('E 550BR',550,650); +INSERT INTO Material VALUES('E 600A',600,730); +INSERT INTO Material VALUES('E 600BR',600,730); +INSERT INTO Material VALUES('E 650A',650,780); +INSERT INTO Material VALUES('E 650BR',650,780); CREATE TABLE IF NOT EXISTS "Bolt_fy_fu" ( `Property_Class` NUMERIC, `Diameter_min` INTEGER, @@ -1357,4 +1372,26 @@ INSERT INTO Angles VALUES(196,'150 x 90 x 15',26.66,33.9,150.0,90.0,15.0,12.0,4. INSERT INTO Angles VALUES(197,'200 x 100 x 15',33.86,43.1,200.0,100.0,15.0,15.0,4.8,7.17,2.23,1770.0,303.0,0.25,1870.0,196.0,6.41,2.65,6.6,2.13,138.0,39.0,241.0,72.9,32.0,'IS808_Rev',NULL); INSERT INTO Angles VALUES(198,'200 x 150 x 15',39.75,50.6,200.0,150.0,15.0,15.0,4.8,6.22,3.75,2030.0,988.0,0.5,2490.0,530.0,6.34,4.42,7.02,3.24,147.0,87.8,268.0,157.0,37.6,'IS808_Rev',NULL); INSERT INTO Angles VALUES(199,'200 x 150 x 18',47.21,60.1,200.0,150.0,18.0,15.0,4.8,6.34,3.86,2390.0,1150.0,0.5,2920.0,623.0,6.3,4.38,6.97,3.22,175.0,103.0,317.0,187.0,64.5,'IS808_Rev',NULL); +CREATE TABLE IF NOT EXISTS "Concrete_Grade_Properties" ( + "Grade" TEXT NOT NULL UNIQUE, + "fck" REAL NOT NULL, + "fctm" REAL NOT NULL, + "Ecm" REAL NOT NULL +); +INSERT INTO Concrete_Grade_Properties VALUES('M15',15.0,1.6,27.0); +INSERT INTO Concrete_Grade_Properties VALUES('M20',20.0,1.9,29.0); +INSERT INTO Concrete_Grade_Properties VALUES('M25',25.0,2.2,30.0); +INSERT INTO Concrete_Grade_Properties VALUES('M30',30.0,2.5,31.0); +INSERT INTO Concrete_Grade_Properties VALUES('M35',35.0,2.8,32.0); +INSERT INTO Concrete_Grade_Properties VALUES('M40',40.0,3.0,33.0); +INSERT INTO Concrete_Grade_Properties VALUES('M45',45.0,3.3,34.0); +INSERT INTO Concrete_Grade_Properties VALUES('M50',50.0,3.5,35.0); +INSERT INTO Concrete_Grade_Properties VALUES('M55',55.0,3.7,36.0); +INSERT INTO Concrete_Grade_Properties VALUES('M60',60.0,4.0,37.0); +INSERT INTO Concrete_Grade_Properties VALUES('M65',65.0,4.4,38.0); +INSERT INTO Concrete_Grade_Properties VALUES('M70',70.0,4.5,38.0); +INSERT INTO Concrete_Grade_Properties VALUES('M75',75.0,4.7,39.0); +INSERT INTO Concrete_Grade_Properties VALUES('M80',80.0,4.8,40.0); +INSERT INTO Concrete_Grade_Properties VALUES('M85',85.0,4.9,40.0); +INSERT INTO Concrete_Grade_Properties VALUES('M90',90.0,5.0,41.0); COMMIT; diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index 09b548361..2ec16dd19 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -193,7 +193,7 @@ # Value Lists for Additional Inputs VALUES_YES_NO = ["No", "Yes"] VALUES_DECK_CONCRETE_GRADE = [ - "M 25", "M 30", "M 35", "M 40", "M 45", "M 50", + "M 15", "M 20", "M 25", "M 30", "M 35", "M 40", "M 45", "M 50", "M 55", "M 60", "M 65", "M 70", "M 75", "M 80", "M 85", "M 90", ] diff --git a/src/osdagbridge/desktop/ui/dialogs/material_properties.py b/src/osdagbridge/desktop/ui/dialogs/material_properties.py index 008e28bd3..e616d7611 100644 --- a/src/osdagbridge/desktop/ui/dialogs/material_properties.py +++ b/src/osdagbridge/desktop/ui/dialogs/material_properties.py @@ -3,6 +3,8 @@ ) from PySide6.QtCore import Qt from PySide6.QtGui import QDoubleValidator +from pathlib import Path +import sqlite3 import re from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar @@ -36,35 +38,93 @@ STEEL_POISSON_RATIO = 0.30 STEEL_THERMAL_COEFF = 11.7 -STEEL_GRADE_BASE_VALUES = { - 250: {"Fy": 250, "Fu": 410}, - 275: {"Fy": 275, "Fu": 430}, - 300: {"Fy": 300, "Fu": 440}, - 350: {"Fy": 350, "Fu": 490}, - 410: {"Fy": 410, "Fu": 540}, - 450: {"Fy": 450, "Fu": 570}, - 550: {"Fy": 550, "Fu": 650}, - 600: {"Fy": 600, "Fu": 700}, - 650: {"Fy": 650, "Fu": 750}, -} - -CONCRETE_GRADE_BASE_VALUES = { - "M20": {"fck": 20.0, "fctm": 2.2, "Ecm": 22.0}, - "M25": {"fck": 25.0, "fctm": 2.6, "Ecm": 25.0}, - "M30": {"fck": 30.0, "fctm": 2.9, "Ecm": 30.0}, - "M35": {"fck": 35.0, "fctm": 3.2, "Ecm": 33.0}, - "M40": {"fck": 40.0, "fctm": 3.5, "Ecm": 34.0}, - "M45": {"fck": 45.0, "fctm": 3.8, "Ecm": 36.0}, - "M50": {"fck": 50.0, "fctm": 4.1, "Ecm": 37.0}, - "M55": {"fck": 55.0, "fctm": 4.2, "Ecm": 38.0}, - "M60": {"fck": 60.0, "fctm": 4.4, "Ecm": 39.0}, - "M65": {"fck": 65.0, "fctm": 4.5, "Ecm": 40.0}, - "M70": {"fck": 70.0, "fctm": 4.6, "Ecm": 41.0}, - "M75": {"fck": 75.0, "fctm": 4.7, "Ecm": 42.0}, - "M80": {"fck": 80.0, "fctm": 4.8, "Ecm": 42.0}, - "M85": {"fck": 85.0, "fctm": 4.9, "Ecm": 43.0}, - "M90": {"fck": 90.0, "fctm": 5.0, "Ecm": 44.0}, -} +def _locate_resource_file(file_name: str) -> Path: + current = Path(__file__).resolve() + for parent in current.parents: + candidate = parent / "core" / "data" / "ResourceFiles" / file_name + if candidate.exists(): + return candidate + return current.parents[3] / "core" / "data" / "ResourceFiles" / file_name + + +def _execute_resource_query(query: str): + db_path = _locate_resource_file("Intg_osdag.sqlite") + if not db_path.exists(): + return None + + connection = sqlite3.connect(str(db_path)) + cursor = connection.cursor() + try: + cursor.execute(query) + return cursor.fetchall() + except sqlite3.Error: + return None + finally: + connection.close() + + +def _load_concrete_grade_values_from_db(): + rows = _execute_resource_query( + """ + SELECT Grade, fck, fctm, Ecm + FROM Concrete_Grade_Properties + """ + ) + + values = {} + if rows is not None: + for grade, fck, fctm, ecm in rows: + key = str(grade).strip().upper() + values[key] = { + "fck": float(fck), + "fctm": float(fctm), + "Ecm": float(ecm), + } + + return values + + +def _normalize_steel_material_name(name: str) -> str: + return "".join(str(name or "").upper().split()) + + +def _load_steel_material_values_from_db(): + values = {} + rows = _execute_resource_query( + ''' + SELECT [Material Name], [Yield Strength], [Ultimate Tensile Strength] + FROM Material + ''' + ) + if rows is None: + # Backward-compatibility for older local DBs. + rows = _execute_resource_query( + ''' + SELECT Grade, [Yield Stress (< 20)], [Ultimate Tensile Stress] + FROM Material + ''' + ) + + if rows is None: + return {} + + try: + for material_name, fy, fu in rows: + key = _normalize_steel_material_name(material_name) + if not key: + continue + + fy_val = float(fy) + fu_val = float(fu) + values[key] = {"Fy": fy_val, "Fu": fu_val} + + return values + except (TypeError, ValueError): + return {} + + +STEEL_MATERIAL_BASE_VALUES = _load_steel_material_values_from_db() +CONCRETE_GRADE_BASE_VALUES = _load_concrete_grade_values_from_db() KEY_CONCRETE_FCK = "Characteristic Compressive (Cube) Strength of Concrete, (fck)cu (MPa)" KEY_CONCRETE_FCTM = "Mean Tensile Strength of Concrete, fctm (MPa)" @@ -313,16 +373,25 @@ def _defaults_for_material(self, material_name): return self._steel_defaults(material_name) def _steel_defaults(self, grade): - grade_value = self._extract_numeric_grade(grade) - defaults = STEEL_GRADE_BASE_VALUES.get(grade_value, STEEL_GRADE_BASE_VALUES[250]) + normalized_name = _normalize_steel_material_name(grade) + defaults = STEEL_MATERIAL_BASE_VALUES.get(normalized_name) or {} + + if not defaults: + # Backward fallback for custom/older naming patterns. + grade_value = self._extract_numeric_grade(grade) + prefix = f"E{grade_value}" + for key, values in STEEL_MATERIAL_BASE_VALUES.items(): + if key.startswith(prefix): + defaults = values + break result = {} for field_tuple in steel_material_properties_values(): key = field_tuple[0] if "Fu" in key: - result[key] = "{:.1f}".format(defaults["Fu"]) + result[key] = "{:.1f}".format(defaults.get("Fu", 0.0)) elif "Fy" in key: - result[key] = "{:.1f}".format(defaults["Fy"]) + result[key] = "{:.1f}".format(defaults.get("Fy", 0.0)) elif "E (GPa)" in key and "Rigidity" not in key: result[key] = "{:.1f}".format(STEEL_MODULUS_E_GPA) elif "G (GPa)" in key: @@ -382,12 +451,12 @@ def _extract_numeric_grade(self, grade, default=250): # Fallback path: if extra suffix digits exist, try first 3 digits. if len(digits) >= 3: first_three = int(digits[:3]) - if first_three in STEEL_GRADE_BASE_VALUES: + if any(key.startswith(f"E{first_three}") for key in STEEL_MATERIAL_BASE_VALUES): return first_three try: parsed = int(digits) - return parsed if parsed in STEEL_GRADE_BASE_VALUES else default + return parsed if any(key.startswith(f"E{parsed}") for key in STEEL_MATERIAL_BASE_VALUES) else default except ValueError: return default @@ -477,8 +546,16 @@ def _load_material_info_for_view(self, material_name: str): fy_value = custom_match.group(1) fu_value = custom_match.group(2) else: - grade_value = self._extract_numeric_grade(name, default=None) - defaults = STEEL_GRADE_BASE_VALUES.get(grade_value) if grade_value is not None else None + defaults = STEEL_MATERIAL_BASE_VALUES.get(_normalize_steel_material_name(name)) + if not defaults: + grade_value = self._extract_numeric_grade(name, default=None) + defaults = None + if grade_value is not None: + prefix = f"E{grade_value}" + for key, values in STEEL_MATERIAL_BASE_VALUES.items(): + if key.startswith(prefix): + defaults = values + break if defaults: fy_value = "{:.1f}".format(defaults["Fy"]) fu_value = "{:.1f}".format(defaults["Fu"]) From 24654b2a0c3e97b85fa5a7a83f54f6a8b51019dd Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Fri, 6 Mar 2026 18:54:24 +0530 Subject: [PATCH 072/225] feat: auto build sqlite file is not present or populate it if it's empty --- src/osdagbridge/core/utils/resource_db.py | 76 +++++++++++++++++++ .../desktop/ui/dialogs/material_properties.py | 12 +-- .../section_properties/girder_details_tab.py | 9 +-- .../desktop/ui/widgets/section_viewer.py | 4 +- 4 files changed, 83 insertions(+), 18 deletions(-) create mode 100644 src/osdagbridge/core/utils/resource_db.py diff --git a/src/osdagbridge/core/utils/resource_db.py b/src/osdagbridge/core/utils/resource_db.py new file mode 100644 index 000000000..6098cad48 --- /dev/null +++ b/src/osdagbridge/core/utils/resource_db.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +from pathlib import Path +import sqlite3 +from typing import Optional + +RESOURCE_DB_NAME = "Intg_osdag.sqlite" +RESOURCE_SQL_NAME = "Intg_osdag.sql" +REQUIRED_TABLES = ("Material", "Beams", "Concrete_Grade_Properties") + + +def _resource_files_dir(start_path: Optional[Path] = None) -> Path: + """Resolve the ResourceFiles directory from a calling module path.""" + probe = (start_path or Path(__file__)).resolve() + for parent in (probe, *probe.parents): + candidate = parent / "core" / "data" / "ResourceFiles" + if candidate.exists(): + return candidate + + # Fallback from this module location: core/utils -> core/data/ResourceFiles + return Path(__file__).resolve().parents[1] / "data" / "ResourceFiles" + + +def locate_resource_database(start_path: Optional[Path] = None) -> Path: + return _resource_files_dir(start_path) / RESOURCE_DB_NAME + + +def _sql_seed_path(start_path: Optional[Path] = None) -> Path: + return _resource_files_dir(start_path) / RESOURCE_SQL_NAME + + +def _has_required_tables(db_path: Path) -> bool: + if not db_path.exists(): + return False + + try: + connection = sqlite3.connect(str(db_path)) + cursor = connection.cursor() + cursor.execute("SELECT name FROM sqlite_master WHERE type='table'") + available = {str(row[0]).strip() for row in cursor.fetchall() if row and row[0]} + return all(table in available for table in REQUIRED_TABLES) + except sqlite3.Error: + return False + finally: + try: + connection.close() + except Exception: + pass + + +def ensure_resource_database(start_path: Optional[Path] = None) -> Path: + """Create and seed Intg_osdag.sqlite from Intg_osdag.sql when needed.""" + db_path = locate_resource_database(start_path) + + if _has_required_tables(db_path): + return db_path + + sql_path = _sql_seed_path(start_path) + if not sql_path.exists(): + return db_path + + db_path.parent.mkdir(parents=True, exist_ok=True) + + # Rebuild when the DB file exists but is empty/corrupt/incomplete. + if db_path.exists(): + db_path.unlink() + + connection = sqlite3.connect(str(db_path)) + try: + script = sql_path.read_text(encoding="utf-8") + connection.executescript(script) + connection.commit() + finally: + connection.close() + + return db_path diff --git a/src/osdagbridge/desktop/ui/dialogs/material_properties.py b/src/osdagbridge/desktop/ui/dialogs/material_properties.py index e616d7611..6e366fcfd 100644 --- a/src/osdagbridge/desktop/ui/dialogs/material_properties.py +++ b/src/osdagbridge/desktop/ui/dialogs/material_properties.py @@ -11,6 +11,7 @@ from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style from osdagbridge.core.utils.common import VALUES_MATERIAL, VALUES_DECK_CONCRETE_GRADE, KEY_GIRDER, KEY_CROSS_BRACING, KEY_END_DIAPHRAGM +from osdagbridge.core.utils.resource_db import ensure_resource_database DIALOG_TITLE_MATERIAL_PROPERTIES = "Enter Custom Properties" @@ -38,17 +39,8 @@ STEEL_POISSON_RATIO = 0.30 STEEL_THERMAL_COEFF = 11.7 -def _locate_resource_file(file_name: str) -> Path: - current = Path(__file__).resolve() - for parent in current.parents: - candidate = parent / "core" / "data" / "ResourceFiles" / file_name - if candidate.exists(): - return candidate - return current.parents[3] / "core" / "data" / "ResourceFiles" / file_name - - def _execute_resource_query(query: str): - db_path = _locate_resource_file("Intg_osdag.sqlite") + db_path = ensure_resource_database(Path(__file__).resolve()) if not db_path.exists(): return None diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py index 764e91852..9561f4d55 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py @@ -47,6 +47,7 @@ from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview +from osdagbridge.core.utils.resource_db import ensure_resource_database DEFAULT_MEMBER_LENGTH_M = 30.0 @@ -60,13 +61,7 @@ "40", "45", "50", "56", "63", "75", "80", "90", "100", "110", "120", ] def _locate_database() -> Path: - current = Path(__file__).resolve() - for parent in current.parents: - candidate = parent / "core" / "data" / "ResourceFiles" / "Intg_osdag.sqlite" - if candidate.exists(): - return candidate - # Fall back to the repo-relative location even if it does not exist to avoid crashes. - return current.parents[1] / "core" / "data" / "ResourceFiles" / "Intg_osdag.sqlite" + return ensure_resource_database(Path(__file__).resolve()) DB_PATH = _locate_database() diff --git a/src/osdagbridge/desktop/ui/widgets/section_viewer.py b/src/osdagbridge/desktop/ui/widgets/section_viewer.py index bea985765..a8275c288 100644 --- a/src/osdagbridge/desktop/ui/widgets/section_viewer.py +++ b/src/osdagbridge/desktop/ui/widgets/section_viewer.py @@ -18,9 +18,10 @@ CAD_PLACEHOLDER_TEXT, CAD_SHAPE_FILL, ) +from osdagbridge.core.utils.resource_db import ensure_resource_database, locate_resource_database -DB_PATH = Path(__file__).resolve().parents[3] / "core" / "data" / "ResourceFiles" / "Intg_osdag.sqlite" +DB_PATH = locate_resource_database(Path(__file__).resolve()) @dataclass @@ -54,6 +55,7 @@ def __init__(self, db_path: Path = DB_PATH) -> None: self._load() def _load(self) -> None: + self.db_path = ensure_resource_database(Path(__file__).resolve()) con = sqlite3.connect(self.db_path) cur = con.cursor() From 3b01fbd889860b692c8f8637141d619174be14f9 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Fri, 6 Mar 2026 18:59:53 +0530 Subject: [PATCH 073/225] pre fill deck custom --- src/osdagbridge/desktop/ui/dialogs/material_properties.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/material_properties.py b/src/osdagbridge/desktop/ui/dialogs/material_properties.py index 6e366fcfd..dd6c4f72c 100644 --- a/src/osdagbridge/desktop/ui/dialogs/material_properties.py +++ b/src/osdagbridge/desktop/ui/dialogs/material_properties.py @@ -16,6 +16,7 @@ DIALOG_TITLE_MATERIAL_PROPERTIES = "Enter Custom Properties" CUSTOM_MATERIAL_PREFIX = "Cus_" +DEFAULT_DECK_CUSTOM_GRADE = "M 15" MATPROP_LABEL_MATERIAL = "Material" @@ -361,7 +362,10 @@ def _is_deck_material(self, material_name: str) -> bool: def _defaults_for_material(self, material_name): if self.is_deck_material: - return self._deck_defaults(material_name, self._factor_value_from_label(DEFAULT_ECM_FACTOR_LABEL)) + grade = (material_name or "").strip() + if not grade or grade.startswith(CUSTOM_MATERIAL_PREFIX) or self._get_concrete_from_code(grade) is None: + grade = DEFAULT_DECK_CUSTOM_GRADE + return self._deck_defaults(grade, self._factor_value_from_label(DEFAULT_ECM_FACTOR_LABEL)) return self._steel_defaults(material_name) def _steel_defaults(self, grade): From 2dc2fe8f7a67bcf751ec433586115b9516d63137 Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Sat, 7 Mar 2026 14:49:54 +0530 Subject: [PATCH 074/225] Revert "feat: auto build sqlite file is not present or populate it if it's empty" This reverts commit a2298c808cd401a103f626c336f598dd62b291f5. --- src/osdagbridge/core/utils/resource_db.py | 76 ------------------- .../desktop/ui/dialogs/material_properties.py | 12 ++- .../section_properties/girder_details_tab.py | 9 ++- .../desktop/ui/widgets/section_viewer.py | 4 +- 4 files changed, 18 insertions(+), 83 deletions(-) delete mode 100644 src/osdagbridge/core/utils/resource_db.py diff --git a/src/osdagbridge/core/utils/resource_db.py b/src/osdagbridge/core/utils/resource_db.py deleted file mode 100644 index 6098cad48..000000000 --- a/src/osdagbridge/core/utils/resource_db.py +++ /dev/null @@ -1,76 +0,0 @@ -from __future__ import annotations - -from pathlib import Path -import sqlite3 -from typing import Optional - -RESOURCE_DB_NAME = "Intg_osdag.sqlite" -RESOURCE_SQL_NAME = "Intg_osdag.sql" -REQUIRED_TABLES = ("Material", "Beams", "Concrete_Grade_Properties") - - -def _resource_files_dir(start_path: Optional[Path] = None) -> Path: - """Resolve the ResourceFiles directory from a calling module path.""" - probe = (start_path or Path(__file__)).resolve() - for parent in (probe, *probe.parents): - candidate = parent / "core" / "data" / "ResourceFiles" - if candidate.exists(): - return candidate - - # Fallback from this module location: core/utils -> core/data/ResourceFiles - return Path(__file__).resolve().parents[1] / "data" / "ResourceFiles" - - -def locate_resource_database(start_path: Optional[Path] = None) -> Path: - return _resource_files_dir(start_path) / RESOURCE_DB_NAME - - -def _sql_seed_path(start_path: Optional[Path] = None) -> Path: - return _resource_files_dir(start_path) / RESOURCE_SQL_NAME - - -def _has_required_tables(db_path: Path) -> bool: - if not db_path.exists(): - return False - - try: - connection = sqlite3.connect(str(db_path)) - cursor = connection.cursor() - cursor.execute("SELECT name FROM sqlite_master WHERE type='table'") - available = {str(row[0]).strip() for row in cursor.fetchall() if row and row[0]} - return all(table in available for table in REQUIRED_TABLES) - except sqlite3.Error: - return False - finally: - try: - connection.close() - except Exception: - pass - - -def ensure_resource_database(start_path: Optional[Path] = None) -> Path: - """Create and seed Intg_osdag.sqlite from Intg_osdag.sql when needed.""" - db_path = locate_resource_database(start_path) - - if _has_required_tables(db_path): - return db_path - - sql_path = _sql_seed_path(start_path) - if not sql_path.exists(): - return db_path - - db_path.parent.mkdir(parents=True, exist_ok=True) - - # Rebuild when the DB file exists but is empty/corrupt/incomplete. - if db_path.exists(): - db_path.unlink() - - connection = sqlite3.connect(str(db_path)) - try: - script = sql_path.read_text(encoding="utf-8") - connection.executescript(script) - connection.commit() - finally: - connection.close() - - return db_path diff --git a/src/osdagbridge/desktop/ui/dialogs/material_properties.py b/src/osdagbridge/desktop/ui/dialogs/material_properties.py index dd6c4f72c..95ba43e7a 100644 --- a/src/osdagbridge/desktop/ui/dialogs/material_properties.py +++ b/src/osdagbridge/desktop/ui/dialogs/material_properties.py @@ -11,7 +11,6 @@ from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style from osdagbridge.core.utils.common import VALUES_MATERIAL, VALUES_DECK_CONCRETE_GRADE, KEY_GIRDER, KEY_CROSS_BRACING, KEY_END_DIAPHRAGM -from osdagbridge.core.utils.resource_db import ensure_resource_database DIALOG_TITLE_MATERIAL_PROPERTIES = "Enter Custom Properties" @@ -40,8 +39,17 @@ STEEL_POISSON_RATIO = 0.30 STEEL_THERMAL_COEFF = 11.7 +def _locate_resource_file(file_name: str) -> Path: + current = Path(__file__).resolve() + for parent in current.parents: + candidate = parent / "core" / "data" / "ResourceFiles" / file_name + if candidate.exists(): + return candidate + return current.parents[3] / "core" / "data" / "ResourceFiles" / file_name + + def _execute_resource_query(query: str): - db_path = ensure_resource_database(Path(__file__).resolve()) + db_path = _locate_resource_file("Intg_osdag.sqlite") if not db_path.exists(): return None diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py index 9561f4d55..764e91852 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py @@ -47,7 +47,6 @@ from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview -from osdagbridge.core.utils.resource_db import ensure_resource_database DEFAULT_MEMBER_LENGTH_M = 30.0 @@ -61,7 +60,13 @@ "40", "45", "50", "56", "63", "75", "80", "90", "100", "110", "120", ] def _locate_database() -> Path: - return ensure_resource_database(Path(__file__).resolve()) + current = Path(__file__).resolve() + for parent in current.parents: + candidate = parent / "core" / "data" / "ResourceFiles" / "Intg_osdag.sqlite" + if candidate.exists(): + return candidate + # Fall back to the repo-relative location even if it does not exist to avoid crashes. + return current.parents[1] / "core" / "data" / "ResourceFiles" / "Intg_osdag.sqlite" DB_PATH = _locate_database() diff --git a/src/osdagbridge/desktop/ui/widgets/section_viewer.py b/src/osdagbridge/desktop/ui/widgets/section_viewer.py index a8275c288..bea985765 100644 --- a/src/osdagbridge/desktop/ui/widgets/section_viewer.py +++ b/src/osdagbridge/desktop/ui/widgets/section_viewer.py @@ -18,10 +18,9 @@ CAD_PLACEHOLDER_TEXT, CAD_SHAPE_FILL, ) -from osdagbridge.core.utils.resource_db import ensure_resource_database, locate_resource_database -DB_PATH = locate_resource_database(Path(__file__).resolve()) +DB_PATH = Path(__file__).resolve().parents[3] / "core" / "data" / "ResourceFiles" / "Intg_osdag.sqlite" @dataclass @@ -55,7 +54,6 @@ def __init__(self, db_path: Path = DB_PATH) -> None: self._load() def _load(self) -> None: - self.db_path = ensure_resource_database(Path(__file__).resolve()) con = sqlite3.connect(self.db_path) cur = con.cursor() From 738429ca69d8daa60e0901611b0d5664cf068034 Mon Sep 17 00:00:00 2001 From: Nidhikhare12 Date: Mon, 9 Mar 2026 00:47:59 +0530 Subject: [PATCH 075/225] Validator draft. Only basic input part is checked. --- .../bridge_types/plate_girder/validator.py | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/validator.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/validator.py b/src/osdagbridge/core/bridge_types/plate_girder/validator.py new file mode 100644 index 000000000..cfc68fedb --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/validator.py @@ -0,0 +1,201 @@ +""" +Osdag Bridge Input Validators +Validates Basic and Additional Inputs +""" + +from math import isclose + +from osdagbridge.core.utils.codes.keyfile import * +from osdagbridge.core.utils.codes.irc5_2015 import IRC5_2015 + + +class BridgeInputValidator: + + # ========================================================== + # BASIC INPUT VALIDATION (DDCL 2.1.2) + # ========================================================== + + def validate_basic_inputs(self, inputs: dict) -> dict: + + errors = {} + + span = self._to_float(inputs.get("span")) + carriageway_width = self._to_float(inputs.get("carriageway_width")) + median = inputs.get("median") + footpath = inputs.get("footpath") + skew_angle = self._to_float(inputs.get("skew_angle")) + + # ---------------------------------- + # Span (Software Scope Limit) + # ---------------------------------- + if span is None or not (20 <= span <= 45): + errors["span"] = "Span must be between 20 m and 45 m (software limitation)." + + + # ---------------------------------- + # Carriageway Width (IRC 5 Cl.104.3.1) + # ---------------------------------- + if carriageway_width is None: + errors["carriageway_width"] = "Carriageway width must be specified." + + else: + # Determine minimum lane assumption + if median == "No": + assumed_lanes = 1 + else: + assumed_lanes = 2 + + required_width = IRC5_2015.cl_104_3_1_carriageway_width( + carriageway_width, + assumed_lanes + ) + + if carriageway_width < required_width: + errors["carriageway_width"] = ( + f"Minimum carriageway width required is " + f"{required_width:.2f} m as per IRC 5:2015 Clause 104.3.1." + ) + + # Software upper limit + if carriageway_width > 23.6: + errors["carriageway_width"] = ( + "Carriageway width exceeds 23.6 m (software limitation)." + ) + + + # ---------------------------- + # Skew Angle (IRC 24 via keyfile) + # ---------------------------- + if skew_angle is not None: + if not (SKEW_ANGLE_MIN <= skew_angle <= SKEW_ANGLE_MAX): + errors["skew_angle"] = ( + f"Skew angle must be between " + f"{SKEW_ANGLE_MIN}° and {SKEW_ANGLE_MAX}°." + ) + + return self._format_response(errors) + + + # ========================================================== + # ADDITIONAL INPUT VALIDATION (DDCL 2.1.3) + # ========================================================== + + def validate_additional_inputs(self, inputs: dict) -> dict: + + errors = {} + + overall_width = self._to_float(inputs.get("overall_bridge_width")) + girder_spacing = self._to_float(inputs.get("girder_spacing")) + overhang = self._to_float(inputs.get("deck_overhang")) + no_girders = self._to_int(inputs.get("no_of_girders")) + + # ---------------------------- + # Layout Equation Check + # ---------------------------- + if all(v is not None for v in + [overall_width, girder_spacing, overhang, no_girders]): + + lhs = (no_girders - 1) * girder_spacing + 2 * overhang + + if not isclose(lhs, overall_width, rel_tol=1e-2): + errors["layout_equation"] = ( + "Layout must satisfy: " + "Overall Width = (No. of Girders − 1) × Spacing + 2 × Overhang." + ) + + # ---------------------------- + # Safety Kerb Check (IRC 5 Cl.101.41) + # ---------------------------- + kerb_width = self._to_float(inputs.get("kerb_width")) + footpath = inputs.get("footpath") + + if kerb_width is not None: + + kerb_result = IRC5_2015.cl_101_41_safety_kerb_width( + kerb_width, + footpath + ) + + if kerb_result["applicable"] and not kerb_result["is_compliant"]: + errors["kerb_width"] = kerb_result["remarks"] + + # ---------------------------- + # Footpath Width (IRC 5 Cl.104.3.6) + # ---------------------------- + footpath_width = self._to_float(inputs.get("footpath_width")) + + result = IRC5_2015.cl_104_3_6_footpath_width( + footpath, + footpath_width + ) + + if result["applicable"] and not result["is_compliant"]: + errors["footpath_width"] = result["remarks"] + + # ---------------------------- + # Railing Height (IRC 5 Cl.109.7.2) + # ---------------------------- + railing_height = self._to_float(inputs.get("railing_height")) + + if railing_height is not None and footpath in KEY_FOOTPATH: + if railing_height < KEY_RAILING_MIN_HEIGHT[0]: + errors["railing_height"] = ( + f"Minimum railing height is " + f"{KEY_RAILING_MIN_HEIGHT[0]} mm." + ) + + # ---------------------------- + # Stud Detailing (Keyfile constants) + # ---------------------------- + stud_height = self._to_float(inputs.get("stud_height")) + stud_diameter = self._to_float(inputs.get("stud_diameter")) + flange_thickness = self._to_float(inputs.get("top_flange_thickness")) + + if stud_height is not None: + if stud_height < MIN_STUD_HEIGHT_MM: + errors["stud_height"] = ( + f"Minimum stud height must be " + f"{MIN_STUD_HEIGHT_MM} mm." + ) + + if stud_diameter and flange_thickness: + if stud_diameter > MAX_STUD_DIAMETER_FACTOR * flange_thickness: + errors["stud_diameter"] = ( + "Stud diameter exceeds permitted proportion of flange thickness." + ) + + # ---------------------------- + # Edge Distance + # ---------------------------- + edge_distance = self._to_float(inputs.get("stud_edge_distance")) + + if edge_distance is not None: + if edge_distance < MIN_EDGE_DISTANCE_MM: + errors["stud_edge_distance"] = ( + f"Minimum edge distance must be " + f"{MIN_EDGE_DISTANCE_MM} mm." + ) + + return self._format_response(errors) + + # ========================================================== + # INTERNAL HELPERS + # ========================================================== + + def _format_response(self, errors: dict) -> dict: + return { + "status": len(errors) == 0, + "errors": errors + } + + def _to_float(self, value): + try: + return float(value) + except (TypeError, ValueError): + return None + + def _to_int(self, value): + try: + return int(value) + except (TypeError, ValueError): + return None From b0c569cf315bd207b803fd0aad465863cf880839 Mon Sep 17 00:00:00 2001 From: Nidhikhare12 Date: Mon, 9 Mar 2026 18:33:10 +0530 Subject: [PATCH 076/225] Design check file to be integrated with analysis results.py --- .../bridge_types/plate_girder/designer.py | 1429 ++++++++++++++++- 1 file changed, 1426 insertions(+), 3 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index 0a6bf4eb2..252b3f6dd 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -1,3 +1,1426 @@ -"""Plate girder designer: section sizing & checks (stub).""" -def design(dto): - return {"design": "ok"} +""" +IRC 22:2015 Composite Bridge Design Checker — Single-File Pipeline +=================================================================== + +Automated limit-state verification of steel-concrete composite bridge +girders per IRC:22-2015 (Limit State Method for Composite Construction). + +Pipeline Flow +------------- + Step 1 - BridgeConfig : Material, section, geometry parameters + Step 2 - DemandExtractor : Factored force demands (Mu, Vu, deflections) + Step 3 - IRC22Capacity : Clause-by-clause capacity computation + Step 4 - DCREngine : Demand / Capacity ratios & PASS/WARN/FAIL + Step 5 - ReportGenerator : Formatted engineering report + +Clause Coverage (IRC 22:2015) +----------------------------- + Cl. 603.2.1 - Effective width of concrete flange + Cl. 603 - Section classification (web + flange) + Cl. 603.3.1 - Positive moment capacity (plastic) + Cl. 603.3.3.1 - Lateral-torsional buckling resistance + Cl. 603.3.3.2 - Plastic shear resistance + Cl. 603.3.3.3 - Combined bending + high shear + Cl. 604.3 - Modular ratio + Cl. 604.3.1 - SLS limiting stresses + Cl. 604.3.2 - Deflection limits + Cl. 605 - Fatigue assessment + Cl. 606.3.1 - Shear stud connector strength + Cl. 606.4.1 - Longitudinal shear & stud spacing + +Author : Karn Agarwal +Affiliation : Dayalbagh Educational Institute, Agra +License : MIT +Version : 1.0.0 + +Usage +----- + python main.py +""" + +from __future__ import annotations + +import math +import os +from dataclasses import dataclass, field +from datetime import datetime +from typing import Dict, List, Optional + + +# ====================================================================== +# SECTION 1 -- BRIDGE CONFIGURATION (Input Dataclasses) +# ====================================================================== + + +@dataclass +class MaterialProperties: + """ + Material strengths and partial safety factors. + + References + ---------- + IRC 22:2015 Annexure III - Steel, Concrete, Reinforcement properties + IRC 22:2015 Table 1 (Cl.601.4) - Partial safety factors + """ + # -- Structural steel (IS 2062 / IRC 22 Annex III) -- + steel_grade: str = "E350" + fy: float = 350.0 # MPa - characteristic yield strength + fu: float = 490.0 # MPa - ultimate tensile strength + Es: float = 200_000.0 # MPa - modulus of elasticity (Cl.602) + + # -- Concrete (IRC 22 Annex III Table III.1) -- + concrete_grade: str = "M65" + fck: float = 65.0 # MPa - cube compressive strength + fctm: float = 4.1 # MPa - mean tensile strength + Ecm: float = 38_000.0 # MPa - secant modulus at 28 days + + # -- Reinforcement (IS 1786 / IRC 22 Annex III) -- + rebar_grade: str = "Fe500" + fy_rebar: float = 500.0 # MPa - characteristic yield strength + + # -- Partial safety factors (IRC 22 Table 1, Cl.601.4) -- + gamma_m0: float = 1.10 # yielding / instability + gamma_m1: float = 1.25 # ultimate stress + gamma_v: float = 1.25 # shear connectors + gamma_mft: float = 1.35 # fatigue strength + + +@dataclass +class SteelSection: + """ + Plate girder / rolled I-section dimensions (all in mm). + + Depth relation : D = tf_top + dw + tf_bot + Shear area Av = dw x tw + """ + D: float # overall depth + bf_top: float # top flange width + tf_top: float # top flange thickness + bf_bot: float # bottom flange width + tf_bot: float # bottom flange thickness + tw: float # web thickness + fabrication: str = "welded" # "welded" or "rolled" + + @property + def dw(self) -> float: + return self.D - self.tf_top - self.tf_bot + + @property + def Af_top(self) -> float: + return self.bf_top * self.tf_top + + @property + def Af_bot(self) -> float: + return self.bf_bot * self.tf_bot + + @property + def Aw(self) -> float: + return self.dw * self.tw + + @property + def A_steel(self) -> float: + return self.Af_top + self.Aw + self.Af_bot + + @property + def y_cg_from_bot(self) -> float: + """Steel centroid measured from bottom fibre (mm).""" + y_b = self.tf_bot / 2.0 + y_w = self.tf_bot + self.dw / 2.0 + y_t = self.tf_bot + self.dw + self.tf_top / 2.0 + return ( + self.Af_bot * y_b + self.Aw * y_w + self.Af_top * y_t + ) / self.A_steel + + @property + def Iz_steel(self) -> float: + """Second moment of area about centroidal strong axis (mm^4).""" + yc = self.y_cg_from_bot + y_b = self.tf_bot / 2.0 + y_w = self.tf_bot + self.dw / 2.0 + y_t = self.tf_bot + self.dw + self.tf_top / 2.0 + return ( + self.bf_bot * self.tf_bot ** 3 / 12.0 + + self.Af_bot * (yc - y_b) ** 2 + + self.tw * self.dw ** 3 / 12.0 + + self.Aw * (yc - y_w) ** 2 + + self.bf_top * self.tf_top ** 3 / 12.0 + + self.Af_top * (yc - y_t) ** 2 + ) + + @property + def Zp_steel(self) -> float: + """Plastic section modulus about strong axis (mm^3).""" + half_area = self.A_steel / 2.0 + if self.Af_bot >= half_area: + y_pna = half_area / self.bf_bot + elif self.Af_bot + self.Aw >= half_area: + y_pna = self.tf_bot + (half_area - self.Af_bot) / self.tw + else: + y_pna = (self.tf_bot + self.dw + + (half_area - self.Af_bot - self.Aw) / self.bf_top) + + def rect_moment(b, t, y_bot_of_rect): + y_top = y_bot_of_rect + t + if y_pna >= y_top: + return b * t * (y_pna - (y_bot_of_rect + t / 2.0)) + elif y_pna <= y_bot_of_rect: + return b * t * ((y_bot_of_rect + t / 2.0) - y_pna) + else: + t_below = y_pna - y_bot_of_rect + t_above = y_top - y_pna + return b * t_below * t_below / 2.0 + b * t_above * t_above / 2.0 + + return ( + rect_moment(self.bf_bot, self.tf_bot, 0.0) + + rect_moment(self.tw, self.dw, self.tf_bot) + + rect_moment(self.bf_top, self.tf_top, self.tf_bot + self.dw) + ) + + @property + def Ze_steel(self) -> float: + """Elastic section modulus about strong axis (mm^3).""" + yc = self.y_cg_from_bot + y_top = self.D - yc + return self.Iz_steel / max(yc, y_top) + + +@dataclass +class SlabProperties: + """Concrete slab dimensions and reinforcement (all mm).""" + thickness: float + haunch_depth: float = 0.0 + rebar_area_top: float = 0.0 + rebar_area_bot: float = 0.0 + cover_top: float = 40.0 + cover_bot: float = 25.0 + + +@dataclass +class GeometryConfig: + """Bridge-level geometry parameters (lengths in m).""" + span: float + beam_spacing: float + carriageway_width: float + beam_type: str = "inner" + n_girders: int = 7 + edge_distance: float = 1.05 + support_type: str = "simply_supported" + + +@dataclass +class ShearStudConfig: + """Headed stud connector properties (Cl.606).""" + diameter: float = 22.0 + height: float = 150.0 + fu: float = 500.0 + n_per_section: int = 2 + + +@dataclass +class FatigueConfig: + """Fatigue design parameters (Cl.605).""" + Nsc: int = 2_000_000 + stress_range: float = 55.0 + shear_range: float = 30.0 + detail_category: str = "welded" + ffn: float = 92.0 + tfn: float = 59.0 + + +@dataclass +class BridgeConfig: + """ + Master bridge configuration - single input to the entire pipeline. + + BridgeConfig + |-- DemandExtractor + |-- IRC22CapacityCalculator + |-- DCREngine + +-- ReportGenerator + """ + material: MaterialProperties = field(default_factory=MaterialProperties) + section: SteelSection = field(default_factory=lambda: SteelSection( + D=1500, bf_top=400, tf_top=20, bf_bot=500, tf_bot=25, tw=12, + )) + slab: SlabProperties = field(default_factory=lambda: SlabProperties(thickness=250)) + geometry: GeometryConfig = field(default_factory=lambda: GeometryConfig( + span=33.5, beam_spacing=2.2775, carriageway_width=10.0, + )) + studs: ShearStudConfig = field(default_factory=ShearStudConfig) + fatigue: FatigueConfig = field(default_factory=FatigueConfig) + + @classmethod + def example_33m_bridge(cls) -> "BridgeConfig": + """ + Factory: realistic 33.5 m simply-supported composite bridge + matching the ospgrillage analyser model. + """ + return cls( + material=MaterialProperties( + steel_grade="E350", fy=350.0, fu=490.0, Es=200_000.0, + concrete_grade="M65", fck=65.0, fctm=4.1, Ecm=38_000.0, + rebar_grade="Fe500", fy_rebar=500.0, + ), + section=SteelSection( + D=1500, bf_top=400, tf_top=20, + bf_bot=500, tf_bot=25, tw=12, fabrication="welded", + ), + slab=SlabProperties( + thickness=250, haunch_depth=0, + rebar_area_top=1257.0, rebar_area_bot=1257.0, + ), + geometry=GeometryConfig( + span=33.5, beam_spacing=2.2775, + carriageway_width=10.0, beam_type="inner", + n_girders=7, edge_distance=1.05, + ), + studs=ShearStudConfig(diameter=22, height=150, fu=500, n_per_section=2), + fatigue=FatigueConfig( + Nsc=2_000_000, stress_range=55.0, shear_range=30.0, + detail_category="welded", ffn=92.0, tfn=59.0, + ), + ) + + def summary(self) -> str: + s = self.section + g = self.geometry + m = self.material + return ( + f"L={g.span}m | {m.steel_grade}/{m.concrete_grade} | " + f"D={s.D}mm | {g.n_girders} girders @ {g.beam_spacing}m" + ) + + +# ====================================================================== +# SECTION 2 -- DEMAND EXTRACTOR (Analyser Stage) +# ====================================================================== + + +@dataclass +class DemandEnvelope: + """ + Factored force demands at the critical section. + Every field carries its unit in the name suffix for clarity. + """ + # -- ULS demands -- + Mu_kNm: float = 0.0 + Vu_kN: float = 0.0 + Nu_kN: float = 0.0 + + # -- SLS demands -- + delta_live_mm: float = 0.0 + delta_total_mm: float = 0.0 + + # -- Fatigue demands -- + stress_range_MPa: float = 0.0 + shear_range_MPa: float = 0.0 + Nsc: int = 2_000_000 + + # -- Metadata -- + governing_combination: str = "ULS Combination I" + location: str = "midspan" + member: str = "" + source: str = "manual" + + +class DemandExtractor: + """ + Factory for DemandEnvelope objects. + + Two entry-points: + 1. from_manual(...) - user supplies demand values directly + 2. apply_load_factors(...) - builds envelope from unfactored DL/LL + """ + + @staticmethod + def from_manual( + Mu_kNm: float, + Vu_kN: float, + Nu_kN: float = 0.0, + delta_live_mm: float = 0.0, + delta_total_mm: float = 0.0, + stress_range_MPa: float = 0.0, + shear_range_MPa: float = 0.0, + Nsc: int = 2_000_000, + combination: str = "ULS Combination I", + location: str = "midspan", + member: str = "interior_girder", + ) -> DemandEnvelope: + """Create demand envelope from user-supplied values.""" + return DemandEnvelope( + Mu_kNm=Mu_kNm, Vu_kN=Vu_kN, Nu_kN=Nu_kN, + delta_live_mm=delta_live_mm, delta_total_mm=delta_total_mm, + stress_range_MPa=stress_range_MPa, shear_range_MPa=shear_range_MPa, + Nsc=Nsc, governing_combination=combination, + location=location, member=member, source="manual", + ) + + @staticmethod + def apply_load_factors( + M_dead_kNm: float, + M_live_kNm: float, + V_dead_kN: float, + V_live_kN: float, + gamma_dead: float = 1.35, + gamma_live: float = 1.50, + impact_factor: float = 1.10, + ) -> DemandEnvelope: + """ + Build demand envelope from unfactored dead/live force components. + IRC:6-2017 load combination factors applied. + """ + Mu = gamma_dead * M_dead_kNm + gamma_live * impact_factor * M_live_kNm + Vu = gamma_dead * V_dead_kN + gamma_live * impact_factor * V_live_kN + return DemandEnvelope( + Mu_kNm=round(Mu, 3), Vu_kN=round(Vu, 3), + governing_combination=( + f"gDL={gamma_dead} x DL + gLL={gamma_live} x IF={impact_factor} x LL" + ), + location="midspan", source="factored_components", + ) + + +# ====================================================================== +# SECTION 3 -- IRC 22:2015 CAPACITY CALCULATOR +# ====================================================================== + + +@dataclass +class CapacityResults: + """Aggregated capacity values from all IRC 22 checks.""" + + # Cl.603.2.1 - Effective width + beff_mm: float = 0.0 + + # Cl.603.3.1 - Positive moment capacity + xu_mm: float = 0.0 + pna_location: str = "" + Mp_kNm: float = 0.0 + Md_kNm: float = 0.0 + + # Cl.603.3.3.1 - Buckling resistance moment + Mcr_kNm: float = 0.0 + lambda_LT: float = 0.0 + chi_LT: float = 0.0 + Mb_kNm: float = 0.0 + + # Cl.603.3.3.2 - Shear + Av_mm2: float = 0.0 + Vn_kN: float = 0.0 + Vd_kN: float = 0.0 + + # Cl.603.3.3.3 - Combined bending + shear + Mdv_kNm: float = 0.0 + beta_interaction: float = 0.0 + + # Cl.604.3.2 - Deflection limits + defl_limit_live_mm: float = 0.0 + defl_limit_total_mm: float = 0.0 + + # Cl.604.3.1 - SLS stress limits + sigma_c_limit_MPa: float = 0.0 + sigma_s_limit_MPa: float = 0.0 + + # Cl.605 - Fatigue + f_fd_MPa: float = 0.0 + tau_fd_MPa: float = 0.0 + + # Cl.606 - Shear connectors + Qu_kN: float = 0.0 + stud_spacing_mm: float = 0.0 + + # Meta + source: str = "built-in" + details: Dict[str, dict] = field(default_factory=dict) + + +class IRC22CapacityCalculator: + """ + Clause-by-clause IRC 22:2015 capacity calculator. + Uses built-in formulas for all clause computations. + + Usage + ----- + config = BridgeConfig.example_33m_bridge() + calc = IRC22CapacityCalculator(config) + results = calc.compute_all(Vu_kN=850.0) + """ + + def __init__(self, config: BridgeConfig): + self.cfg = config + self.mat = config.material + self.sec = config.section + self.slab = config.slab + self.geo = config.geometry + self.studs = config.studs + self.fatigue = config.fatigue + + # --------------------------------------------------------- + # Cl.603.2.1 - Effective Width (Simply Supported) + # --------------------------------------------------------- + + def compute_effective_width(self) -> dict: + """IRC 22:2015 Cl.603.2.1 - Effective width of concrete flange.""" + Lo_mm = self.geo.span * 1000.0 + B_mm = self.geo.beam_spacing * 1000.0 + + if self.geo.beam_type == "inner": + beff = min(Lo_mm / 4.0, B_mm) + method = f"inner beam: min(Lo/4={Lo_mm/4:.1f}, B={B_mm:.1f})" + else: + B1 = B_mm / 2.0 + B0 = self.geo.edge_distance * 1000.0 + beff = min(Lo_mm / 8.0, B1 / 2.0) + min(B0, Lo_mm / 8.0) + method = "outer beam: min(Lo/8, B1/2) + min(B0, Lo/8)" + + return { + "beff_mm": round(beff, 1), "Lo_mm": Lo_mm, "B_mm": B_mm, + "beam_type": self.geo.beam_type, "method": method, + "clause": "IRC 22:2015 - Cl.603.2.1", "source": "built-in", + } + + # --------------------------------------------------------- + # Cl.603 - Section Classification + # --------------------------------------------------------- + + def classify_section(self) -> dict: + """IRC 22:2015 Cl.603 - web & flange classification.""" + fy = self.mat.fy + epsilon = math.sqrt(250.0 / fy) + sec = self.sec + d_tw = sec.dw / sec.tw + b_tf = (sec.bf_bot / 2.0 - sec.tw / 2.0) / sec.tf_bot + + web_class = self._classify_web(d_tw, epsilon) + flange_class = self._classify_flange(b_tf, epsilon, sec.fabrication) + class_order = {"Plastic": 1, "Compact": 2, "Semi-Compact": 3, "Slender": 4} + governing = max(web_class, flange_class, key=lambda c: class_order.get(c, 4)) + + return { + "epsilon": round(epsilon, 4), + "d_tw_ratio": round(d_tw, 2), "b_tf_ratio": round(b_tf, 2), + "web_class": web_class, "flange_class": flange_class, + "governing_class": governing, + "clause": "IRC 22:2015 - Cl.603", "source": "built-in", + } + + @staticmethod + def _classify_web(d_tw: float, epsilon: float) -> str: + if d_tw <= 84.0 * epsilon: + return "Plastic" + elif d_tw <= 105.0 * epsilon: + return "Compact" + elif d_tw <= 126.0 * epsilon: + return "Semi-Compact" + return "Slender" + + @staticmethod + def _classify_flange(b_tf: float, epsilon: float, fab: str) -> str: + limits = [9.4, 13.6] if fab == "welded" else [10.5, 15.7] + if b_tf <= 8.4 * epsilon: + return "Plastic" + elif b_tf <= limits[0] * epsilon: + return "Compact" + elif b_tf <= limits[1] * epsilon: + return "Semi-Compact" + return "Slender" + + # --------------------------------------------------------- + # Cl.603.3.1 - Positive Moment Capacity (Plastic) + # --------------------------------------------------------- + + def compute_moment_capacity(self, beff_mm: float) -> dict: + """IRC 22:2015 Cl.603.3.1 - Plastic moment capacity (sagging).""" + sec = self.sec + mat = self.mat + slab = self.slab + fy, fck, gm0 = mat.fy, mat.fck, mat.gamma_m0 + ds, h_haunch = slab.thickness, slab.haunch_depth + + T_all = sec.A_steel * fy + C_max = 0.36 * fck * beff_mm * ds + + if T_all <= C_max: + xu = T_all / (0.36 * fck * beff_mm) + pna_location = "slab" + y_steel_cg = ds + h_haunch + sec.D - sec.y_cg_from_bot + Mp_Nmm = T_all * (y_steel_cg - xu / 2.0) + else: + C_conc = C_max + F_excess = T_all - C_conc + pna_location, y_pna, Mp_Nmm = self._pna_in_steel( + C_conc, F_excess, beff_mm, ds, h_haunch + ) + xu = ds + + Mp_kNm = Mp_Nmm / 1e6 + Md_kNm = Mp_kNm / gm0 + + return { + "xu_mm": round(xu, 2), "pna_location": pna_location, + "T_steel_kN": round(T_all / 1e3, 2), + "C_conc_max_kN": round(C_max / 1e3, 2), + "Mp_kNm": round(Mp_kNm, 2), "Md_kNm": round(Md_kNm, 2), + "gamma_m0": gm0, + "clause": "IRC 22:2015 - Cl.603.3.1", "source": "built-in", + } + + def _pna_in_steel(self, C_conc, F_excess, beff_mm, ds, h_haunch): + sec = self.sec + fy = self.mat.fy + A_switch = F_excess / (2.0 * fy) + + if A_switch <= sec.Af_top: + pna_location = "top_flange" + elif A_switch <= sec.Af_top + sec.Aw: + pna_location = "web" + else: + pna_location = "bottom_flange" + + if pna_location == "top_flange": + y_pna = ds + h_haunch + A_switch / sec.bf_top + elif pna_location == "web": + y_pna = ds + h_haunch + sec.tf_top + (A_switch - sec.Af_top) / sec.tw + else: + y_pna = ds + h_haunch + sec.tf_top + sec.dw + + steel_elements = self._steel_elements(ds, h_haunch) + Mp_Nmm = C_conc * (y_pna - ds / 2.0) + + for (y_bot, height, width) in steel_elements: + y_top_elem = y_bot + height + if y_top_elem <= y_pna: + Mp_Nmm += fy * width * height * (y_pna - (y_bot + height / 2.0)) + elif y_bot >= y_pna: + Mp_Nmm += fy * width * height * ((y_bot + height / 2.0) - y_pna) + else: + h_comp = y_pna - y_bot + h_tens = y_top_elem - y_pna + Mp_Nmm += fy * width * h_comp * h_comp / 2.0 + Mp_Nmm += fy * width * h_tens * h_tens / 2.0 + + return pna_location, y_pna, Mp_Nmm + + def _steel_elements(self, ds, h_haunch): + sec = self.sec + base = ds + h_haunch + return [ + (base, sec.tf_top, sec.bf_top), + (base + sec.tf_top, sec.dw, sec.tw), + (base + sec.tf_top + sec.dw, sec.tf_bot, sec.bf_bot), + ] + + # --------------------------------------------------------- + # Cl.603.3.3.2 - Plastic Shear Resistance + # --------------------------------------------------------- + + def compute_shear_capacity(self) -> dict: + """IRC 22:2015 Cl.603.3.3.2 - Plastic shear resistance.""" + sec = self.sec + fyw, gm0 = self.mat.fy, self.mat.gamma_m0 + Av = sec.dw * sec.tw + Vn = Av * fyw / math.sqrt(3.0) + Vd = Vn / gm0 + + return { + "Av_mm2": round(Av, 1), "fyw_MPa": fyw, + "Vn_kN": round(Vn / 1e3, 2), "Vd_kN": round(Vd / 1e3, 2), + "gamma_m0": gm0, + "clause": "IRC 22:2015 - Cl.603.3.3.2", "source": "built-in", + } + + # --------------------------------------------------------- + # Cl.603.3.3.1 - Lateral-Torsional Buckling Resistance + # --------------------------------------------------------- + + def compute_buckling_resistance(self, beff_mm: float) -> dict: + """IRC 22:2015 Cl.603.3.3.1 - Buckling resistance moment.""" + sec = self.sec + mat = self.mat + fy, Es = mat.fy, mat.Es + G = Es / (2.0 * (1.0 + 0.3)) + LLT_mm = self.geo.span * 1000.0 + + It = (sec.bf_top * sec.tf_top ** 3 + + sec.dw * sec.tw ** 3 + + sec.bf_bot * sec.tf_bot ** 3) / 3.0 + + Iy = (sec.tf_top * sec.bf_top ** 3 / 12.0 + + sec.dw * sec.tw ** 3 / 12.0 + + sec.tf_bot * sec.bf_bot ** 3 / 12.0) + + hw = sec.dw + sec.tf_top / 2.0 + sec.tf_bot / 2.0 + Iw = sec.Af_bot * (hw ** 2) / 4.0 * (sec.bf_bot ** 2 / 12.0) + + Zp = sec.Zp_steel + + pi2_EIy = math.pi ** 2 * Es * Iy / (LLT_mm ** 2) + Mcr_Nmm = math.sqrt( + pi2_EIy * (G * It + math.pi ** 2 * Es * Iw / LLT_mm ** 2) + ) + Mcr_kNm = Mcr_Nmm / 1e6 + + lambda_LT = math.sqrt(Zp * fy / Mcr_Nmm) if Mcr_Nmm > 0 else 999.0 + alpha_LT = 0.49 if sec.fabrication == "welded" else 0.21 + phi_LT = 0.5 * (1.0 + alpha_LT * (lambda_LT - 0.2) + lambda_LT ** 2) + + discriminant = phi_LT ** 2 - lambda_LT ** 2 + chi_LT = min(1.0 / (phi_LT + math.sqrt(discriminant)), 1.0) if discriminant > 0 else 1.0 + chi_LT = max(chi_LT, 0.0) + + Mb_kNm = chi_LT * Zp * fy / mat.gamma_m0 / 1e6 + + return { + "It_mm4": round(It, 1), "Iy_mm4": round(Iy, 1), + "LLT_mm": LLT_mm, "Mcr_kNm": round(Mcr_kNm, 2), + "lambda_LT": round(lambda_LT, 4), "alpha_LT": alpha_LT, + "phi_LT": round(phi_LT, 4), "chi_LT": round(chi_LT, 4), + "Mb_kNm": round(Mb_kNm, 2), + "clause": "IRC 22:2015 - Cl.603.3.3.1", "source": "built-in", + } + + # --------------------------------------------------------- + # Cl.603.3.3.3 - Combined Bending + High Shear + # --------------------------------------------------------- + + def compute_combined_bending_shear(self, Md_kNm: float, V_kN: float, Vd_kN: float) -> dict: + """IRC 22:2015 Cl.603.3.3.3 - Reduced bending under high shear.""" + sec = self.sec + fy, gm0 = self.mat.fy, self.mat.gamma_m0 + hw = sec.dw + sec.tf_top / 2.0 + sec.tf_bot / 2.0 + Mfd_kNm = fy * sec.Af_bot * hw / 1e6 / gm0 + + if V_kN <= 0.6 * Vd_kN: + return { + "Mdv_kNm": round(Md_kNm, 2), "Mfd_kNm": round(Mfd_kNm, 2), + "beta": 0.0, "reduction_required": False, + "clause": "IRC 22:2015 - Cl.603.3.3.3", "source": "built-in", + } + + beta = min((2.0 * V_kN / Vd_kN - 1.0) ** 2, 1.0) + Mdv_kNm = Md_kNm - beta * (Md_kNm - Mfd_kNm) + + return { + "Mdv_kNm": round(Mdv_kNm, 2), "Mfd_kNm": round(Mfd_kNm, 2), + "beta": round(beta, 4), "reduction_required": True, + "clause": "IRC 22:2015 - Cl.603.3.3.3", "source": "built-in", + } + + # --------------------------------------------------------- + # Cl.604.3 - Modular Ratio + # --------------------------------------------------------- + + def compute_modular_ratio(self) -> dict: + """IRC 22:2015 Cl.604.3 - Short- and long-term modular ratio.""" + Es, Ecm = self.mat.Es, self.mat.Ecm + Kc = 0.5 + m_short = max(Es / Ecm, 7.5) + m_long = max(Es / (Kc * Ecm), 15.0) + return { + "Es_MPa": Es, "Ecm_MPa": Ecm, "Kc": Kc, + "m_short": round(m_short, 3), "m_long": round(m_long, 3), + "clause": "IRC 22:2015 - Cl.604.3", "source": "built-in", + } + + # --------------------------------------------------------- + # Cl.604.3.1 - SLS Limiting Stresses + # --------------------------------------------------------- + + def compute_sls_stress_limits(self) -> dict: + """IRC 22:2015 Cl.604.3.1 - Allowable stresses for serviceability.""" + return { + "sigma_c_allow_MPa": round(0.48 * self.mat.fck, 2), + "sigma_rebar_allow_MPa": round(0.80 * self.mat.fy_rebar, 2), + "sigma_steel_allow_MPa": round(0.9 * self.mat.fy, 2), + "clause": "IRC 22:2015 - Cl.604.3.1", "source": "built-in", + } + + # --------------------------------------------------------- + # Cl.604.3.2 - Deflection Limits + # --------------------------------------------------------- + + def compute_deflection_limits(self) -> dict: + """IRC 22:2015 Cl.604.3.2 - Deflection limits.""" + span_mm = self.geo.span * 1000.0 + return { + "span_mm": span_mm, + "defl_limit_live_mm": round(span_mm / 800.0, 3), + "defl_limit_total_mm": round(span_mm / 600.0, 3), + "clause": "IRC 22:2015 - Cl.604.3.2", "source": "built-in", + } + + # --------------------------------------------------------- + # Cl.605 - Fatigue Assessment + # --------------------------------------------------------- + + def compute_fatigue(self) -> dict: + """IRC 22:2015 Cl.605 - Fatigue design strength.""" + fat = self.fatigue + mat = self.mat + Nsc, ffn, tfn = fat.Nsc, fat.ffn, fat.tfn + gamma_mft = mat.gamma_mft + tp = max(self.sec.tf_top, self.sec.tf_bot) + + if self.sec.fabrication == "welded" and tp > 25.0: + mu_r = min((25.0 / tp) ** 0.25, 1.0) + else: + mu_r = 1.0 + + exponent = 1.0 / 3.0 if Nsc <= 5e6 else 1.0 / 5.0 + f_f = ffn * (5e6 / Nsc) ** exponent + tau_f = tfn * (5e6 / Nsc) ** (1.0 / 5.0) + f_fd = mu_r * f_f / gamma_mft + tau_fd = mu_r * tau_f / gamma_mft + + return { + "mu_r": round(mu_r, 4), + "f_f_MPa": round(f_f, 3), "tau_f_MPa": round(tau_f, 3), + "f_fd_MPa": round(f_fd, 3), "tau_fd_MPa": round(tau_fd, 3), + "Nsc": Nsc, + "exempt_stress_check": fat.stress_range < 27.0 / gamma_mft, + "clause": "IRC 22:2015 - Cl.605.2 / 605.3 / 605.4", + "source": "built-in", + } + + # --------------------------------------------------------- + # Cl.606.3.1 - Shear Stud Connector Strength + # --------------------------------------------------------- + + def compute_stud_capacity(self) -> dict: + """IRC 22:2015 Cl.606.3.1 - Design strength of headed stud.""" + stud = self.studs + mat = self.mat + gv = mat.gamma_v + d, hs, fu = stud.diameter, stud.height, stud.fu + fck_cu, Ecm = mat.fck, mat.Ecm + + fck_cyl = 0.8 * fck_cu + hd = hs / d + alpha = 1.0 if hd >= 4.0 else 0.2 * (hd + 1.0) + A_stud = math.pi * d ** 2 / 4.0 + + Qu_steel = 0.8 * fu * A_stud / gv + Qu_conc = 0.29 * alpha * d ** 2 * math.sqrt(fck_cyl * Ecm) / gv + Qu = min(Qu_steel, Qu_conc) + governs = "steel" if Qu_steel <= Qu_conc else "concrete" + + return { + "Qu_kN": round(Qu / 1e3, 3), + "Qu_steel_kN": round(Qu_steel / 1e3, 3), + "Qu_conc_kN": round(Qu_conc / 1e3, 3), + "governs": governs, "alpha": round(alpha, 4), + "fck_cyl_MPa": round(fck_cyl, 2), + "clause": "IRC 22:2015 - Cl.606.3.1 (Eq 6.1)", + "source": "built-in", + } + + # --------------------------------------------------------- + # Cl.606.4.1 - Longitudinal Shear & Stud Spacing + # --------------------------------------------------------- + + def compute_stud_spacing(self, Vu_kN: float, beff_mm: float, + xu_mm: float, Qu_kN: float) -> dict: + """IRC 22:2015 Cl.606.4.1 - Required stud spacing at ULS.""" + sec, mat, slab = self.sec, self.mat, self.slab + ds, h_haunch = slab.thickness, slab.haunch_depth + n_studs = self.studs.n_per_section + + n = mat.Es / mat.Ecm + t_eff = min(xu_mm, ds) + Aec = beff_mm * t_eff / n + y_steel = ds + h_haunch + sec.D - sec.y_cg_from_bot + y_conc = t_eff / 2.0 + total_A = sec.A_steel + Aec + y_composite = (sec.A_steel * y_steel + Aec * y_conc) / total_A + I_steel = sec.Iz_steel + sec.A_steel * (y_steel - y_composite) ** 2 + I_conc = beff_mm * t_eff ** 3 / (12.0 * n) + Aec * (y_composite - y_conc) ** 2 + Ic = I_steel + I_conc + Y = abs(y_composite - y_conc) + VL = Vu_kN * 1e3 * Aec * Y / Ic + spacing = n_studs * Qu_kN * 1e3 / VL if VL > 0 else float("inf") + + return { + "modular_ratio": round(n, 3), "Aec_mm2": round(Aec, 1), + "Ic_mm4": round(Ic, 0), "Y_mm": round(Y, 2), + "VL_N_per_mm": round(VL, 3), "spacing_mm": round(spacing, 1), + "n_studs_per_section": n_studs, + "clause": "IRC 22:2015 - Cl.606.4.1", "source": "built-in", + } + + # --------------------------------------------------------- + # Master: compute_all() + # --------------------------------------------------------- + + def compute_all(self, Vu_kN: float = 0.0) -> CapacityResults: + """Run every IRC 22 capacity computation and return aggregated results.""" + results = CapacityResults() + results.source = "built-in" + + # 1. Effective width + eff_w = self.compute_effective_width() + results.beff_mm = eff_w["beff_mm"] + results.details["effective_width"] = eff_w + + # 2. Section classification + sec_class = self.classify_section() + results.details["section_class"] = sec_class + + # 3. Moment capacity + moment = self.compute_moment_capacity(results.beff_mm) + results.xu_mm = moment["xu_mm"] + results.pna_location = moment["pna_location"] + results.Mp_kNm = moment["Mp_kNm"] + results.Md_kNm = moment["Md_kNm"] + results.details["moment_capacity"] = moment + + # 4. Shear capacity + shear = self.compute_shear_capacity() + results.Av_mm2 = shear["Av_mm2"] + results.Vn_kN = shear["Vn_kN"] + results.Vd_kN = shear["Vd_kN"] + results.details["shear_capacity"] = shear + + # 5. LTB buckling resistance + ltb = self.compute_buckling_resistance(results.beff_mm) + results.Mcr_kNm = ltb["Mcr_kNm"] + results.lambda_LT = ltb["lambda_LT"] + results.chi_LT = ltb["chi_LT"] + results.Mb_kNm = ltb["Mb_kNm"] + results.details["buckling_resistance"] = ltb + + # 6. Combined bending + shear + combined = self.compute_combined_bending_shear( + results.Md_kNm, Vu_kN, results.Vd_kN + ) + results.Mdv_kNm = combined["Mdv_kNm"] + results.beta_interaction = combined["beta"] + results.details["combined_bending_shear"] = combined + + # 7. Modular ratio + results.details["modular_ratio"] = self.compute_modular_ratio() + + # 8. SLS stress limits + sls_stress = self.compute_sls_stress_limits() + results.sigma_c_limit_MPa = sls_stress["sigma_c_allow_MPa"] + results.sigma_s_limit_MPa = sls_stress["sigma_steel_allow_MPa"] + results.details["sls_stress_limits"] = sls_stress + + # 9. Deflection limits + defl = self.compute_deflection_limits() + results.defl_limit_live_mm = defl["defl_limit_live_mm"] + results.defl_limit_total_mm = defl["defl_limit_total_mm"] + results.details["deflection_limits"] = defl + + # 10. Fatigue + fatigue = self.compute_fatigue() + results.f_fd_MPa = fatigue["f_fd_MPa"] + results.tau_fd_MPa = fatigue["tau_fd_MPa"] + results.details["fatigue"] = fatigue + + # 11. Shear stud capacity + stud_cap = self.compute_stud_capacity() + results.Qu_kN = stud_cap["Qu_kN"] + results.details["stud_capacity"] = stud_cap + + # 12. Stud spacing + if Vu_kN > 0 and results.xu_mm > 0: + stud_sp = self.compute_stud_spacing( + Vu_kN, results.beff_mm, results.xu_mm, results.Qu_kN + ) + results.stud_spacing_mm = stud_sp["spacing_mm"] + results.details["stud_spacing"] = stud_sp + + return results + + +# ====================================================================== +# SECTION 4 -- DCR ENGINE (Demand-to-Capacity Ratios) +# ====================================================================== + + +@dataclass +class CheckResult: + """Single design-check output row.""" + check_id: int + name: str + clause: str + demand: float + demand_unit: str + capacity: float + capacity_unit: str + dcr: float + status: str # "PASS" | "WARN" | "FAIL" | "INFO" + note: str = "" + + +class DCREngine: + """ + Demand-to-Capacity Ratio engine. + + Classification: + PASS : DCR < 0.90 + WARN : 0.90 <= DCR < 1.00 + FAIL : DCR >= 1.00 + """ + + PASS_THRESHOLD = 0.90 + FAIL_THRESHOLD = 1.00 + + def __init__(self, demand: DemandEnvelope, capacity: CapacityResults): + self.demand = demand + self.capacity = capacity + self.checks: List[CheckResult] = [] + + @staticmethod + def classify(dcr: float) -> str: + if dcr < DCREngine.PASS_THRESHOLD: + return "PASS" + elif dcr < DCREngine.FAIL_THRESHOLD: + return "WARN" + return "FAIL" + + def _add_check(self, check_id, name, clause, demand, capacity, unit, note=""): + if capacity > 0: + dcr = demand / capacity + status = self.classify(dcr) + else: + dcr = float("inf") + status = "FAIL" + + result = CheckResult( + check_id=check_id, name=name, clause=clause, + demand=round(demand, 2), demand_unit=unit, + capacity=round(capacity, 2), capacity_unit=unit, + dcr=round(dcr, 4), status=status, note=note, + ) + self.checks.append(result) + return result + + def run_all_checks(self) -> List[CheckResult]: + """ + Execute all IRC 22 design checks: + 1. ULS Flexure (Cl.603.3.1) + 2. ULS Shear (Cl.603.3.3.2) + 3. Bending-Shear (Cl.603.3.3.3) + 4. LTB Construction (Cl.603.3.3.1) + 5. SLS Deflection Live (Cl.604.3.2) + 6. SLS Deflection Total (Cl.604.3.2) + 7. Fatigue Normal (Cl.605) + 8. Fatigue Shear (Cl.605) + """ + self.checks.clear() + d, c = self.demand, self.capacity + + self._add_check(1, "ULS Flexure", "Cl.603.3.1", + d.Mu_kNm, c.Md_kNm, "kNm", + note=f"PNA in {c.pna_location}, xu={c.xu_mm:.1f} mm") + + self._add_check(2, "ULS Shear", "Cl.603.3.3.2", + d.Vu_kN, c.Vd_kN, "kN", + note=f"Av={c.Av_mm2:.0f} mm2") + + effective_Md = c.Mdv_kNm if c.beta_interaction > 0 else c.Md_kNm + self._add_check(3, "Bending-Shear Interaction", "Cl.603.3.3.3", + d.Mu_kNm, effective_Md, "kNm", + note=f"beta={c.beta_interaction:.4f}") + + self._add_check(4, "LTB (Construction Stage)", "Cl.603.3.3.1", + d.Mu_kNm, c.Mb_kNm, "kNm", + note=f"lambda_LT={c.lambda_LT:.4f}, chi_LT={c.chi_LT:.4f}") + + if d.delta_live_mm > 0: + self._add_check(5, "SLS Deflection (Live)", "Cl.604.3.2", + d.delta_live_mm, c.defl_limit_live_mm, "mm", + note="Limit = L/800") + + if d.delta_total_mm > 0: + self._add_check(6, "SLS Deflection (Total)", "Cl.604.3.2", + d.delta_total_mm, c.defl_limit_total_mm, "mm", + note="Limit = L/600") + + if d.stress_range_MPa > 0 and c.f_fd_MPa > 0: + self._add_check(7, "Fatigue Normal Stress", "Cl.605", + d.stress_range_MPa, c.f_fd_MPa, "MPa", + note=f"Nsc={d.Nsc:,}") + + if d.shear_range_MPa > 0 and c.tau_fd_MPa > 0: + self._add_check(8, "Fatigue Shear Stress", "Cl.605", + d.shear_range_MPa, c.tau_fd_MPa, "MPa", + note=f"Nsc={d.Nsc:,}") + + return self.checks + + def overall_status(self) -> str: + if not self.checks: + return "NO CHECKS RUN" + if any(c.status == "FAIL" for c in self.checks): + return "FAIL" + if any(c.status == "WARN" for c in self.checks): + return "WARN" + return "PASS" + + def max_dcr(self) -> float: + return max((c.dcr for c in self.checks), default=0.0) + + def critical_check(self) -> CheckResult: + return max(self.checks, key=lambda c: c.dcr) + + def n_pass(self) -> int: + return sum(1 for c in self.checks if c.status == "PASS") + + def n_warn(self) -> int: + return sum(1 for c in self.checks if c.status == "WARN") + + def n_fail(self) -> int: + return sum(1 for c in self.checks if c.status == "FAIL") + + +# ====================================================================== +# SECTION 5 -- REPORT GENERATOR +# ====================================================================== + + +class ReportGenerator: + """Generates formatted design-check reports.""" + + LINE_WIDTH = 78 + BAR_WIDTH = 45 + + def __init__(self, config: BridgeConfig, demand: DemandEnvelope, + capacity: CapacityResults, engine: DCREngine): + self.cfg = config + self.demand = demand + self.capacity = capacity + self.engine = engine + + def _header_box(self, *lines: str) -> str: + w = self.LINE_WIDTH + border = "=" * w + out = [border] + for line in lines: + out.append(line.center(w)) + out.append(border) + return "\n".join(out) + + def _section_title(self, title: str) -> str: + return f"\n{title}\n{'-' * len(title)}" + + def _kv(self, key: str, value, unit: str = "", width: int = 24) -> str: + if isinstance(value, float): + val_str = f"{value:,.3f}" if value < 1 else f"{value:,.2f}" + else: + val_str = str(value) + return f" {key:<{width}}: {val_str} {unit}".rstrip() + + def _build_header(self) -> str: + return self._header_box( + "IRC 22:2015 COMPOSITE BRIDGE DESIGN CHECK REPORT", + "Demand (Analyser) --> IRC 22 Capacity --> DCR Pipeline", + f"Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}", + ) + + def _build_config(self) -> str: + c, s, g, m, slab = self.cfg, self.cfg.section, self.cfg.geometry, self.cfg.material, self.cfg.slab + lines = [self._section_title("BRIDGE CONFIGURATION")] + lines.append(self._kv("Span", g.span, "m")) + lines.append(self._kv("Support", g.support_type)) + lines.append(self._kv("Carriageway Width", g.carriageway_width, "m")) + lines.append(self._kv("Girder Spacing", g.beam_spacing, "m")) + lines.append(self._kv("No. of Girders", g.n_girders)) + lines.append(self._kv("Beam Type", g.beam_type)) + lines.append(self._kv("Steel Grade", m.steel_grade, f"(fy = {m.fy} MPa)")) + lines.append(self._kv("Concrete Grade", m.concrete_grade, f"(fck = {m.fck} MPa)")) + lines.append(self._kv("Rebar Grade", m.rebar_grade)) + + lines.append(self._section_title(f"STEEL SECTION (Plate Girder - {s.fabrication.title()})")) + lines.append(self._kv("Overall Depth D", s.D, "mm")) + lines.append(self._kv("Top Flange", f"{s.bf_top} x {s.tf_top}", "mm")) + lines.append(self._kv("Bottom Flange", f"{s.bf_bot} x {s.tf_bot}", "mm")) + lines.append(self._kv("Web", f"{s.dw:.0f} x {s.tw}", "mm")) + lines.append(self._kv("A_steel", f"{s.A_steel:,.0f}", "mm2")) + lines.append(self._kv("Iz_steel", f"{s.Iz_steel:,.0f}", "mm4")) + + lines.append(self._section_title("CONCRETE SLAB")) + lines.append(self._kv("Slab Thickness", slab.thickness, "mm")) + lines.append(self._kv("Haunch Depth", slab.haunch_depth, "mm")) + return "\n".join(lines) + + def _build_demands(self) -> str: + d = self.demand + lines = [self._section_title(f"DESIGN DEMANDS ({d.governing_combination})")] + lines.append(self._kv("Location", d.location)) + lines.append(self._kv("Member", d.member)) + lines.append(self._kv("Source", d.source)) + lines.append("") + lines.append(self._kv("Mu (factored)", d.Mu_kNm, "kNm")) + lines.append(self._kv("Vu (factored)", d.Vu_kN, "kN")) + if d.Nu_kN != 0: + lines.append(self._kv("Nu (factored)", d.Nu_kN, "kN")) + lines.append(self._kv("delta_live", d.delta_live_mm, "mm")) + lines.append(self._kv("delta_total", d.delta_total_mm, "mm")) + if d.stress_range_MPa > 0: + lines.append(self._kv("Stress Range", d.stress_range_MPa, "MPa")) + if d.shear_range_MPa > 0: + lines.append(self._kv("Shear Range", d.shear_range_MPa, "MPa")) + if d.Nsc > 0: + lines.append(self._kv("Nsc", f"{d.Nsc:,}", "cycles")) + return "\n".join(lines) + + def _build_capacity_summary(self) -> str: + c = self.capacity + sc = c.details.get("section_class", {}) + lines = [self._section_title("IRC 22:2015 CAPACITY COMPUTATIONS")] + + lines.append(f"\n 1. Effective Width (Cl.603.2.1)") + lines.append(f" beff = {c.beff_mm:.1f} mm") + + lines.append(f"\n 2. Section Classification (Cl.603)") + lines.append(f" epsilon = {sc.get('epsilon', 0):.4f}") + lines.append(f" Web: {sc.get('web_class', '?')} (d/tw = {sc.get('d_tw_ratio', 0):.1f})") + lines.append(f" Flange: {sc.get('flange_class', '?')} (b/tf = {sc.get('b_tf_ratio', 0):.1f})") + lines.append(f" Governing: {sc.get('governing_class', '?')}") + + lines.append(f"\n 3. Positive Moment Capacity (Cl.603.3.1)") + lines.append(f" PNA Location: {c.pna_location}") + lines.append(f" xu = {c.xu_mm:.2f} mm") + lines.append(f" Mp = {c.Mp_kNm:,.2f} kNm") + lines.append(f" Md = Mp / gamma_m0 = {c.Md_kNm:,.2f} kNm") + + lines.append(f"\n 4. Plastic Shear Resistance (Cl.603.3.3.2)") + lines.append(f" Av = {c.Av_mm2:,.0f} mm2") + lines.append(f" Vn = {c.Vn_kN:,.2f} kN") + lines.append(f" Vd = Vn / gamma_m0 = {c.Vd_kN:,.2f} kN") + + lines.append(f"\n 5. Buckling Resistance Moment (Cl.603.3.3.1)") + lines.append(f" Mcr = {c.Mcr_kNm:,.2f} kNm") + lines.append(f" lambda_LT = {c.lambda_LT:.4f}") + lines.append(f" chi_LT = {c.chi_LT:.4f}") + lines.append(f" Mb = {c.Mb_kNm:,.2f} kNm") + + lines.append(f"\n 6. Combined Bending + Shear (Cl.603.3.3.3)") + lines.append(f" beta = {c.beta_interaction:.4f}") + lines.append(f" Mdv = {c.Mdv_kNm:,.2f} kNm") + + lines.append(f"\n 7. Deflection Limits (Cl.604.3.2)") + lines.append(f" Live + impact <= L/800 = {c.defl_limit_live_mm:.2f} mm") + lines.append(f" Total <= L/600 = {c.defl_limit_total_mm:.2f} mm") + + lines.append(f"\n 8. Fatigue Assessment (Cl.605)") + lines.append(f" f_fd = {c.f_fd_MPa:.3f} MPa") + lines.append(f" tau_fd = {c.tau_fd_MPa:.3f} MPa") + + lines.append(f"\n 9. Shear Stud Capacity (Cl.606.3.1)") + lines.append(f" Qu = {c.Qu_kN:.3f} kN per stud") + if c.stud_spacing_mm > 0: + lines.append(f" Required spacing = {c.stud_spacing_mm:.1f} mm") + + return "\n".join(lines) + + def _build_dcr_table(self) -> str: + checks = self.engine.checks + if not checks: + return "\n No checks executed." + + lines = [self._section_title("DESIGN CHECK RESULTS (DCR = Demand / Capacity)")] + hdr = f" {'#':>3} {'Check':<28} {'Demand':>10} {'Capacity':>10} {'DCR':>7} {'Status':>6}" + sep = " " + "-" * (len(hdr) - 2) + lines += [sep, hdr, sep] + + for c in checks: + status_tag = {"PASS": " PASS ", "WARN": " WARN ", "FAIL": "*FAIL*", "INFO": " INFO "}.get(c.status, c.status) + lines.append( + f" {c.check_id:>3} {c.name:<28} " + f"{c.demand:>10.2f} {c.capacity:>10.2f} {c.dcr:>7.3f} {status_tag}" + ) + lines.append(sep) + return "\n".join(lines) + + def _build_bar_chart(self) -> str: + checks = self.engine.checks + if not checks: + return "" + lines = [self._section_title("DCR BAR CHART")] + bw = self.BAR_WIDTH + for c in checks: + label = f" {c.name:<22}" + filled = int(min(c.dcr, 1.0) * bw) + bar_char = "X" if c.status == "FAIL" else ("#" if c.status == "WARN" else "|") + bar = bar_char * filled + "." * (bw - filled) + lines.append(f"{label} [{bar}] {c.dcr:.3f}") + return "\n".join(lines) + + def _build_verdict(self) -> str: + eng = self.engine + status = eng.overall_status() + crit = eng.critical_check() if eng.checks else None + + lines = [self._section_title("OVERALL VERDICT"), ""] + lines.append(f" Status : {status}") + lines.append(f" Checks Run : {len(eng.checks)}") + lines.append(f" PASS / WARN / FAIL: {eng.n_pass()} / {eng.n_warn()} / {eng.n_fail()}") + lines.append(f" Maximum DCR : {eng.max_dcr():.4f}") + if crit: + lines.append(f" Critical Check : {crit.name} ({crit.clause})") + lines.append("") + if status == "PASS": + lines.append(" >>> ALL CHECKS SATISFIED - DESIGN IS ADEQUATE <<<") + elif status == "WARN": + lines.append(" >>> DESIGN WITHIN 10% OF LIMIT - REVIEW RECOMMENDED <<<") + else: + lines.append(" >>> DESIGN FAILS ONE OR MORE CHECKS - REVISION REQUIRED <<<") + lines.append("") + return "\n".join(lines) + + def generate(self) -> str: + """Build the complete formatted report string.""" + return "\n".join([ + self._build_header(), self._build_config(), self._build_demands(), + self._build_capacity_summary(), self._build_dcr_table(), + self._build_bar_chart(), self._build_verdict(), + ]) + + def save(self, filepath: str) -> str: + """Write the report to a text file.""" + report_text = self.generate() + os.makedirs(os.path.dirname(filepath) or ".", exist_ok=True) + with open(filepath, "w", encoding="utf-8") as f: + f.write(report_text) + return os.path.abspath(filepath) + + +# ====================================================================== +# SECTION 6 -- MAIN PIPELINE +# ====================================================================== + + +def _example_demands(config: BridgeConfig) -> DemandEnvelope: + """ + Realistic factored demand values for the 33.5 m bridge. + + Dead Load Components (per girder): + Steel self-weight : ~3 kN/m + Deck slab : 25 kN/m3 x t_slab x beam_spacing + SDL (wearing, rail): distributed + + Live Load (IRC Class 70R + Class A): + M_LL ~ 1,800 kNm, V_LL ~ 350 kN (per interior girder) + + Factored (ULS Comb I): + gamma_DL = 1.35, gamma_LL = 1.50, Impact Factor = 1.10 + """ + L = config.geometry.span + A_steel_m2 = config.section.A_steel * 1e-6 + w_sw = A_steel_m2 * 78.5 + w_slab = 25.0 * (config.slab.thickness / 1000.0) * config.geometry.beam_spacing + w_sdl = (4.32 * config.geometry.beam_spacing + 1.5 + 4.0 / config.geometry.n_girders) + w_total_dl = w_sw + w_slab + w_sdl + + M_dl = w_total_dl * L ** 2 / 8.0 + V_dl = w_total_dl * L / 2.0 + M_ll, V_ll = 1800.0, 350.0 + gamma_dl, gamma_ll, impact = 1.35, 1.50, 1.10 + + Mu = gamma_dl * M_dl + gamma_ll * impact * M_ll + Vu = gamma_dl * V_dl + gamma_ll * impact * V_ll + + return DemandExtractor.from_manual( + Mu_kNm=round(Mu, 2), Vu_kN=round(Vu, 2), + delta_live_mm=28.0, delta_total_mm=38.0, + stress_range_MPa=config.fatigue.stress_range, + shear_range_MPa=config.fatigue.shear_range, + Nsc=config.fatigue.Nsc, + combination=f"ULS Comb I: {gamma_dl}*DL + {gamma_ll}*{impact}*LL", + location="midspan (interior girder)", + member="interior_longitudinal_beam", + ) + + +def run_design_check( + config: BridgeConfig | None = None, + demand: DemandEnvelope | None = None, + save_report: bool = True, + report_path: str = "design_check_report.txt", + print_report: bool = True, +) -> str: + """ + Execute the complete IRC 22:2015 design-check pipeline. + + Pipeline + -------- + Step 1 -> BridgeConfig (configuration) + Step 2 -> DemandExtractor (analyser - demand extraction) + Step 3 -> IRC22CapacityCalc (IRC 22 - clause-by-clause capacity) + Step 4 -> DCREngine (demand / capacity ratios) + Step 5 -> ReportGenerator (formatted report) + + Parameters + ---------- + config : BridgeConfig (default: 33.5 m example bridge) + demand : DemandEnvelope (default: example demands) + save_report : save .txt report file + report_path : output file path + print_report : print report to console + """ + print("=" * 60) + print(" IRC 22:2015 DESIGN CHECK PIPELINE") + print("=" * 60) + + # -- Step 1: Configuration -- + print("\n[Step 1/5] Loading bridge configuration ...") + if config is None: + config = BridgeConfig.example_33m_bridge() + print(f" Config: {config.summary()}") + + # -- Step 2: Demand from Analyser -- + print("\n[Step 2/5] Extracting design demands (Analyser) ...") + if demand is None: + demand = _example_demands(config) + print(f" Mu = {demand.Mu_kNm:.2f} kNm") + print(f" Vu = {demand.Vu_kN:.2f} kN") + print(f" Source: {demand.source}") + + # -- Step 3: IRC 22 Capacity -- + print("\n[Step 3/5] Computing IRC 22:2015 capacities ...") + calculator = IRC22CapacityCalculator(config) + capacity = calculator.compute_all(Vu_kN=demand.Vu_kN) + print(f" beff = {capacity.beff_mm:.1f} mm (Cl.603.2.1)") + print(f" Md = {capacity.Md_kNm:,.2f} kNm (Cl.603.3.1)") + print(f" Vd = {capacity.Vd_kN:,.2f} kN (Cl.603.3.3.2)") + print(f" Mb = {capacity.Mb_kNm:,.2f} kNm (Cl.603.3.3.1)") + print(f" Qu = {capacity.Qu_kN:.3f} kN/stud (Cl.606.3.1)") + + # -- Step 4: DCR Engine -- + print("\n[Step 4/5] Running DCR checks ...") + engine = DCREngine(demand, capacity) + checks = engine.run_all_checks() + for chk in checks: + icon = {"PASS": "+", "WARN": "~", "FAIL": "X"}.get(chk.status, "?") + print(f" [{icon}] {chk.name:<28} DCR = {chk.dcr:.3f} {chk.status}") + + # -- Step 5: Report -- + print("\n[Step 5/5] Generating report ...") + reporter = ReportGenerator(config, demand, capacity, engine) + report_text = reporter.generate() + + if print_report: + print("\n" + report_text) + + if save_report: + base_dir = os.path.dirname(os.path.abspath(__file__)) + full_path = os.path.join(base_dir, report_path) + saved = reporter.save(full_path) + print(f"\n Report saved to: {saved}") + + print("\n" + "=" * 60) + print(f" PIPELINE COMPLETE - Overall: {engine.overall_status()}") + print("=" * 60) + + return report_text + + +# ====================================================================== +# ENTRY POINT +# ====================================================================== + +if __name__ == "__main__": + run_design_check() From c2ab48731c583dee7e21dcdeef0a2690371e1e01 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Fri, 13 Mar 2026 19:50:15 +0530 Subject: [PATCH 077/225] refactor gridge_geometry.py and made a new file load_placement.py file --- .../bridge_types/plate_girder/analyser.py | 1 + .../plate_girder/bridge_geometry.py | 257 +----------------- .../plate_girder/load_placement.py | 223 +++++++++++++++ 3 files changed, 226 insertions(+), 255 deletions(-) create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/load_placement.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index c786036bf..abdfc9383 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -4,6 +4,7 @@ from osdagbridge.core.utils.codes.irc6_2017 import * from osdagbridge.core.utils.common import * from osdagbridge.core.bridge_types.plate_girder.bridge_geometry import * +from osdagbridge.core.bridge_types.plate_girder.load_placement import LoadPlacementManager import warnings from osdagbridge.core.bridge_types.plate_girder.analysis_results import PlateGirderAnalysisResults diff --git a/src/osdagbridge/core/bridge_types/plate_girder/bridge_geometry.py b/src/osdagbridge/core/bridge_types/plate_girder/bridge_geometry.py index 826eaa982..d6699f371 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/bridge_geometry.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/bridge_geometry.py @@ -61,174 +61,6 @@ def bounds(self): } -class BridgeComponent: - def __init__(self, bridge: BridgeGeometry): - self.bridge = bridge - - def to_global(self): - """ - Must return LineLoadGeometry or PatchLoadGeometry - """ - raise NotImplementedError - - -class CrashBarrier(BridgeComponent): - def __init__(self, bridge, offset_from_edge: float, side="left"): - super().__init__(bridge) - self.offset = offset_from_edge - self.side = side - - def to_global(self) -> LineLoadGeometry: - if self.side == "left": - z = self.offset - elif self.side == "right": - z = self.bridge.width - self.offset - else: - raise ValueError("side must be 'left' or 'right'") - - return LineLoadGeometry( - start=Point(x=0.0, z=z), - end=Point(x=self.bridge.span, z=z), - ) - -class DeckLoad(BridgeComponent): - def to_global(self) -> PatchLoadGeometry: - return PatchLoadGeometry( - p1=Point(0.0, 0.0), - p2=Point(self.bridge.span, 0.0), - p3=Point(self.bridge.span, self.bridge.width), - p4=Point(0.0, self.bridge.width), - ) - - -class OverlayLoad(BridgeComponent): - def __init__(self, bridge, edge_clearance: float): - super().__init__(bridge) - self.c = edge_clearance - - def to_global(self) -> PatchLoadGeometry: - return PatchLoadGeometry( - p1=Point(0.0, self.c), - p2=Point(self.bridge.span, self.c), - p3=Point(self.bridge.span, self.bridge.width - self.c), - p4=Point(0.0, self.bridge.width - self.c), - ) - - -class RailingLoad(BridgeComponent): - def __init__(self, bridge, offset_from_edge: float, side="left"): - super().__init__(bridge) - self.offset = offset_from_edge - self.side = side - - def to_global(self) -> LineLoadGeometry: - z = self.offset if self.side == "left" else self.bridge.width - self.offset - - return LineLoadGeometry( - start=Point(x=0.0, z=z), - end=Point(x=self.bridge.span, z=z), - ) - - -class MedianLoad(BridgeComponent): - def __init__(self, bridge, offset_from_edge: float, side="left"): - super().__init__(bridge) - self.offset = offset_from_edge - self.side = side - - def to_global(self) -> LineLoadGeometry: - z = self.offset if self.side == "left" else self.bridge.width - self.offset - - return LineLoadGeometry( - start=Point(x=0.0, z=z), - end=Point(x=self.bridge.span, z=z), - ) - - -class FootpathLoad(BridgeComponent): - def __init__(self, bridge, start_offset: float, width: float): - super().__init__(bridge) - self.start = start_offset - self.width = width - - def to_global(self) -> PatchLoadGeometry: - return PatchLoadGeometry( - p1=Point(0.0, self.start), - p2=Point(self.bridge.span, 0.0), - p3=Point(self.bridge.span, self.start + self.width), - p4=Point(0.0, self.start + self.width), - ) - - -class LoadPlacementManager: - """ - Generates load geometries using BridgeGeometry and CrossSectionLayout - """ - - def __init__(self, bridge: BridgeGeometry, layout: CrossSectionLayout): - self.bridge = bridge - self.layout = layout - - # ------------------------- - # Patch loads - # ------------------------- - def deck_load(self) -> PatchLoadGeometry: - return PatchLoadGeometry( - p1=Point(0.0, 0.0), - p2=Point(self.bridge.span, 0.0), - p3=Point(self.bridge.span, self.bridge.width), - p4=Point(0.0, self.bridge.width), - ) - - def overlay_load(self, edge_clearance: float) -> PatchLoadGeometry: - return PatchLoadGeometry( - p1=Point(0.0, edge_clearance), - p2=Point(self.bridge.span, edge_clearance), - p3=Point(self.bridge.span, self.bridge.width - edge_clearance), - p4=Point(0.0, self.bridge.width - edge_clearance), - ) - - def footpath_load(self, side: str) -> PatchLoadGeometry: - comp = self.layout.get_component(f"footpath_{side}") - return PatchLoadGeometry( - p1=Point(0.0, comp.z_start), - p2=Point(self.bridge.span, comp.z_start), - p3=Point(self.bridge.span, comp.z_end), - p4=Point(0.0, comp.z_end), - ) - - - # ------------------------- - # Line loads - # ------------------------- - def crash_barrier_load(self, side: str) -> LineLoadGeometry: - comp = self.layout.get_component(f"crash_barrier_{side}") - z = comp.center - return LineLoadGeometry( - start=Point(0.0, z), - end=Point(self.bridge.span, z), - ) - - def railing_load(self, side: str) -> LineLoadGeometry: - comp = self.layout.get_component(f"railing_{side}") - z = comp.center - return LineLoadGeometry( - start=Point(0.0, z), - end=Point(self.bridge.span, z), - ) - - def median_line_load(self) -> LineLoadGeometry: - """ - Line load corresponding to median (acting along its centerline) - """ - comp = self.layout.get_component("median") - z = comp.center - - return LineLoadGeometry( - start=Point(0.0, z), - end=Point(self.bridge.span, z), - ) - class CrossSectionLayout: """ Defines ordered cross-section layout of bridge deck. @@ -392,7 +224,7 @@ def describe(self): ) - +''' # @warnings.deprecated("This function is deprecated, use CrossSectionLayout.total_width instead.") def calculate_bridge_width( carriageway_width: float, @@ -418,89 +250,4 @@ def calculate_bridge_width( + no_of_footpaths * footpath_width + no_of_footpaths * railing_width ) - -def create_default_load_placement( - span: float, - carriageway_width: float, - crash_barrier_width: float, - no_of_footpaths: int, - footpath_width: float, - railing_width: float, - median_width: float, -) -> LoadPlacementManager: - """ - Create default bridge load placement from UI inputs. - """ - - # ----------------------------- - # Calculate bridge width - # ----------------------------- - bridge_width = calculate_bridge_width( - carriageway_width=carriageway_width, - crash_barrier_width=crash_barrier_width, - no_of_footpaths=no_of_footpaths, - footpath_width=footpath_width, - railing_width=railing_width, - median_width=median_width, - ) - - # ----------------------------- - # Bridge geometry - # ----------------------------- - bridge = BridgeGeometry(span=span, width=bridge_width) - - manager = LoadPlacementManager(bridge) - - # ----------------------------- - # Components - # ----------------------------- - deck = DeckLoad(bridge) - overlay = OverlayLoad(bridge, edge_clearance=0.30) #is edge clearance needed? - - # Crash barriers (both sides of carriageway) - left_crash_barrier = CrashBarrier( - bridge, - offset_from_edge=crash_barrier_width / 2.0, - side="left", - ) - - right_crash_barrier = CrashBarrier( - bridge, - offset_from_edge=crash_barrier_width / 2.0, - side="right", - ) - - medain = MedianLoad( - bridge, - offset_from_edge=median_width / 2.0, - side="left" - ) - - # Footpath & railing (example: left side only) - if no_of_footpaths >= 1: - footpath = FootpathLoad( - bridge, - start_offset=crash_barrier_width, - width=footpath_width, - ) - - railing = RailingLoad( - bridge, - offset_from_edge=crash_barrier_width + footpath_width + railing_width / 2.0, - side="left", - ) - - manager.add_component(footpath) - manager.add_component(railing) - - # ----------------------------- - # Register common components - # ----------------------------- - manager.add_component(deck) - manager.add_component(overlay) - manager.add_component(medain) - manager.add_component(left_crash_barrier) - manager.add_component(right_crash_barrier) - - return manager - +''' \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/load_placement.py b/src/osdagbridge/core/bridge_types/plate_girder/load_placement.py new file mode 100644 index 000000000..41b1c0282 --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/load_placement.py @@ -0,0 +1,223 @@ +from __future__ import annotations + +from .bridge_geometry import ( + BridgeGeometry, + CrossSectionLayout, + LineLoadGeometry, + PatchLoadGeometry, + Point, +) + + +class BridgeComponent: + def __init__(self, bridge: BridgeGeometry): + self.bridge = bridge + + def to_global(self): + """ + Must return LineLoadGeometry or PatchLoadGeometry + """ + raise NotImplementedError + + +class CrashBarrier(BridgeComponent): + def __init__(self, bridge, offset_from_edge: float, side="left"): + super().__init__(bridge) + self.offset = offset_from_edge + self.side = side + + def to_global(self) -> LineLoadGeometry: + if self.side == "left": + z = self.offset + elif self.side == "right": + z = self.bridge.width - self.offset + else: + raise ValueError("side must be 'left' or 'right'") + + return LineLoadGeometry( + start=Point(x=0.0, z=z), + end=Point(x=self.bridge.span, z=z), + ) + +class DeckLoad(BridgeComponent): + def to_global(self) -> PatchLoadGeometry: + return PatchLoadGeometry( + p1=Point(0.0, 0.0), + p2=Point(self.bridge.span, 0.0), + p3=Point(self.bridge.span, self.bridge.width), + p4=Point(0.0, self.bridge.width), + ) + + +class OverlayLoad(BridgeComponent): + def __init__(self, bridge, edge_clearance: float): + super().__init__(bridge) + self.c = edge_clearance + + def to_global(self) -> PatchLoadGeometry: + return PatchLoadGeometry( + p1=Point(0.0, self.c), + p2=Point(self.bridge.span, self.c), + p3=Point(self.bridge.span, self.bridge.width - self.c), + p4=Point(0.0, self.bridge.width - self.c), + ) + + +class RailingLoad(BridgeComponent): + def __init__(self, bridge, offset_from_edge: float, side="left"): + super().__init__(bridge) + self.offset = offset_from_edge + self.side = side + + def to_global(self) -> LineLoadGeometry: + z = self.offset if self.side == "left" else self.bridge.width - self.offset + + return LineLoadGeometry( + start=Point(x=0.0, z=z), + end=Point(x=self.bridge.span, z=z), + ) + + +class MedianLoad(BridgeComponent): + def __init__(self, bridge, offset_from_edge: float, side="left"): + super().__init__(bridge) + self.offset = offset_from_edge + self.side = side + + def to_global(self) -> LineLoadGeometry: + z = self.offset if self.side == "left" else self.bridge.width - self.offset + + return LineLoadGeometry( + start=Point(x=0.0, z=z), + end=Point(x=self.bridge.span, z=z), + ) + + +class FootpathLoad(BridgeComponent): + def __init__(self, bridge, start_offset: float, width: float): + super().__init__(bridge) + self.start = start_offset + self.width = width + + def to_global(self) -> PatchLoadGeometry: + return PatchLoadGeometry( + p1=Point(0.0, self.start), + p2=Point(self.bridge.span, 0.0), + p3=Point(self.bridge.span, self.start + self.width), + p4=Point(0.0, self.start + self.width), + ) + + +class LoadPlacementManager: + """ + Generates load geometries using BridgeGeometry and CrossSectionLayout + """ + + def __init__(self, bridge: BridgeGeometry, layout: CrossSectionLayout): + self.bridge = bridge + self.layout = layout + + # ------------------------- + # Patch loads + # ------------------------- + def deck_load(self) -> PatchLoadGeometry: + return PatchLoadGeometry( + p1=Point(0.0, 0.0), + p2=Point(self.bridge.span, 0.0), + p3=Point(self.bridge.span, self.bridge.width), + p4=Point(0.0, self.bridge.width), + ) + + def overlay_load(self, edge_clearance: float) -> PatchLoadGeometry: + return PatchLoadGeometry( + p1=Point(0.0, edge_clearance), + p2=Point(self.bridge.span, edge_clearance), + p3=Point(self.bridge.span, self.bridge.width - edge_clearance), + p4=Point(0.0, self.bridge.width - edge_clearance), + ) + + def footpath_load(self, side: str) -> PatchLoadGeometry: + comp = self.layout.get_component(f"footpath_{side}") + return PatchLoadGeometry( + p1=Point(0.0, comp.z_start), + p2=Point(self.bridge.span, comp.z_start), + p3=Point(self.bridge.span, comp.z_end), + p4=Point(0.0, comp.z_end), + ) + + + # ------------------------- + # Line loads + # ------------------------- + def crash_barrier_load(self, side: str) -> LineLoadGeometry: + comp = self.layout.get_component(f"crash_barrier_{side}") + z = comp.center + return LineLoadGeometry( + start=Point(0.0, z), + end=Point(self.bridge.span, z), + ) + + def railing_load(self, side: str) -> LineLoadGeometry: + comp = self.layout.get_component(f"railing_{side}") + z = comp.center + return LineLoadGeometry( + start=Point(0.0, z), + end=Point(self.bridge.span, z), + ) + + def median_line_load(self) -> LineLoadGeometry: + """ + Line load corresponding to median (acting along its centerline) + """ + comp = self.layout.get_component("median") + z = comp.center + + return LineLoadGeometry( + start=Point(0.0, z), + end=Point(self.bridge.span, z), + ) + +''' +def create_default_load_placement( + span: float, + carriageway_width: float, + crash_barrier_width: float, + no_of_footpaths: int, + footpath_width: float, + railing_width: float, + median_width: float, +) -> LoadPlacementManager: + """ + Create default bridge load placement from UI inputs. + """ + + # ----------------------------- + # Calculate bridge width + # ----------------------------- + bridge_width = calculate_bridge_width( + carriageway_width=carriageway_width, + crash_barrier_width=crash_barrier_width, + no_of_footpaths=no_of_footpaths, + footpath_width=footpath_width, + railing_width=railing_width, + median_width=median_width, + ) + + # ----------------------------- + # Bridge geometry + # ----------------------------- + bridge = BridgeGeometry(span=span, width=bridge_width) + + layout = CrossSectionLayout( + carriageway_width=carriageway_width, + crash_barrier_width=crash_barrier_width, + railing_width=railing_width, + footpath_width=footpath_width, + median_width=median_width, + no_of_footpaths=no_of_footpaths, + ) + + manager = LoadPlacementManager(bridge, layout) + + return manager +''' \ No newline at end of file From 0ca11ad050612d46f448e59412ea436e0c3e2fcd Mon Sep 17 00:00:00 2001 From: Jatin1628 Date: Sat, 28 Feb 2026 19:37:10 +0530 Subject: [PATCH 078/225] created files for seperate tabs in additional inputs section Made changes in schema for setting ranges and defaults Made changes to additional inputs files to add new tabs minor label changes label chnges fixed the Save button not working issue minor changes created files for seperate tabs in additional inputs section Made changes to additional inputs files to add new tabs fixed the Save button not working issue Change the folder of the tabs in additional input section Changed validation for errors and made single popup for all errors Changed the schema of input fields according to pdf and requirements Changing of the tabs directory and removing the unneccessary files Rebase complete --- .../ui_fields_additional_input.py | 362 ++++++++--- .../desktop/ui/dialogs/additional_inputs.py | 582 ++++++++++++------ .../dialogs/tabs/design_options_cont_tab.py | 175 ++++++ .../ui/dialogs/tabs/design_options_tab.py | 128 ++++ .../ui/dialogs/tabs/support_conditions_tab.py | 86 +++ 5 files changed, 1069 insertions(+), 264 deletions(-) create mode 100644 src/osdagbridge/desktop/ui/dialogs/tabs/design_options_cont_tab.py create mode 100644 src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py create mode 100644 src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py index 1178ea2e7..da92c0edc 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py @@ -1124,40 +1124,42 @@ "title": "Support Conditions", "sections": [ { - "title": "Support Condition*", + "title": "Support Conditions", "fields": [ { "id": "left_support", - "label": "Left Support:", + "label": "Left Support", "type": "combo", "choices": ["Fixed", "Pinned", "Roller"], - "default": "Fixed", + "default": "Pinned", + "enabled_choices": ["Pinned"], "bind": "left_support_combo", }, { "id": "right_support", - "label": "Right Support:", + "label": "Right Support", "type": "combo", "choices": ["Fixed", "Pinned", "Roller"], - "default": "Pinned", + "default": "Roller", + "enabled_choices": ["Roller"], "bind": "right_support_combo", }, ], }, { - "title": "Bearing length*", + "title": "Bearing length", "fields": [ { "id": "bearing_length", - "label": "Bearing Length Value", + "label": "Bearing Length Value (mm)", "type": "line", - "default": "0", + "default": "400", "placeholder": "Length", "bind": "bearing_length_input", "validator": { "type": "double_range", - "bottom": 0.0, - "top": 1e6, + "bottom": 0.00, + "top": 600.00, "decimals": 3, }, } @@ -1169,15 +1171,17 @@ DESIGN_OPTIONS_SCHEMA = { "id": "design_options", "cards": [ + + # ---------------- Construction ---------------- { - "title": "Construction Stage", + "title": "Construction Stages", "field_width": 150, "sections": [ { "fields": [ { "id": "construction_stage", - "label": "Included:", + "label": "Include automatic", "type": "combo", "choices": ["Yes", "No"], "default": "Yes", @@ -1187,55 +1191,164 @@ } ], }, + + # ---------------- Deck Design ---------------- { - "title": "Deck and Shear Studs", + "title": "Deck Design", "field_width": 150, "sections": [ { - "title": "Deck Design:", "fields": [ { "id": "reinforcement_size", - "label": "Reinforcement Size:", + "label": "Reinforcement Size", "type": "combo", - "choices": ["8 mm", "10 mm", "12 mm", "16 mm", "20 mm"], + "choices": [ "4 mm", "5 mm", "6 mm", "8 mm","10 mm","12 mm", "16 mm","20 mm","25 mm","28 mm","32 mm","36 mm","40 mm"], "default": "12 mm", "bind": "reinforcement_size_combo", + }, { "id": "reinforcement_material", - "label": "Reinforcement Material:", + "label": "Reinforcement Material", "type": "combo", - "choices": ["Fe 415", "Fe 500", "Fe 550"], + "choices": [ + "Fe 415", + "Fe 415D", + "Fe 500", + "Fe 500D", + "Fe 550", + "Fe 550D", + "Fe 600" + ], "default": "Fe 500", "bind": "reinforcement_material_combo", }, + { + + "id": "top_clear_cover", + "bind": "top_clear_cover_input", + "label": "Top Clear Cover (mm)", + "type": "number", + "default": 50.0, + "validator": { + "type": "double_range", + "bottom": 40.0, + "top": 75.0, + "decimals": 1, + }, + "bind": "top_clear_cover_input", + }, + + { + "id": "bottom_clear_cover", + "label": "Bottom Clear Cover (mm)", + "type": "number", + "default": 40.0, + "validator": { + "type": "double_range", + "bottom": 35.0, + "top": 75.0, + "decimals": 1, + }, + "bind": "bottom_clear_cover_input", + }, + + { + "id": "side_clear_cover", + "label": "Side Clear Cover (mm)", + "type": "number", + "default": 40.0, + "validator": { + "type": "double_range", + "bottom": 35.0, + "top": 75.0, + "decimals": 1, + }, + "bind": "side_clear_cover_input", + }, ], - }, + } + ], + }, + + # ---------------- Shear Studs ---------------- + { + "title": "Shear Studs", + "field_width": 150, + "sections": [ { - "title": "Shear Studs:", "fields": [ { - "id": "shear_stud_material", - "label": "Material:", + "id": "shear_stud_yield_strength", + "label": "Yield Strength (MPa)", "type": "line", - "placeholder": "Material", - "bind": "shear_stud_material_input", + "default": "385", + "validator": { + "type": "double_range", + "bottom": 350, + "top": 600, + "decimals": 2, + }, + "bind": "shear_stud_yield_strength_input", }, { - "id": "shear_stud_diameter", - "label": "Diameter (mm):", + "id": "shear_stud_ultimate_strength", + "label": "Ultimate Strength (MPa)", "type": "line", - "bind": "shear_stud_diameter_input", + "default": "495", + "validator": { + "type": "double_range", + "bottom": 350, + "top": 600, + "decimals": 2, + }, + "bind": "shear_stud_ultimate_strength_input", + }, + { + "id": "shear_stud_diameter", + "label": "Diameter (mm)", + "type": "combo", + "choices": ["12", "16", "20", "22", "25"], + "default": "20", + "bind": "shear_stud_diameter_combo", }, { "id": "shear_stud_height", - "label": "Height (mm):", + "label": "Height (mm)", "type": "line", + "default": "100", + "validator": { + "type": "double_range", + "bottom": 0.0, + "top": 500.0, + "decimals": 2, + }, "bind": "shear_stud_height_input", }, + { + "id": "shear_stud_count", + "label": "No. of Shear Studs per Section", + "type": "combo", + "choices": [str(i) for i in range(1, 11)], + "default": "2", + "bind": "shear_stud_count_combo", + }, + { + "id": "shear_stud_transverse_spacing", + "label": "Transverse Spacing (mm)", + "type": "line", + "default": "100", + "validator": { + "type": "double_range", + "bottom": 0.0, + "top": 5000.0, + "decimals": 2, + }, + "bind": "shear_stud_spacing_input", + }, ], - }, + } ], }, ], @@ -1244,69 +1357,163 @@ DESIGN_OPTIONS_CONT_SCHEMA = { "id": "design_options_cont", "sections": [ + + # ---------------- Partial Factor ---------------- { - "title": "Partial Safety Factors", - "field_width": 150, - "fields": [ - {"id": "gamma_c_basic", "label": "Concrete basic & seismic(Gamma_C)", "type": "line", "bind": "gamma_c_basic_input"}, - {"id": "gamma_c_accidental", "label": "Concrete Accidental (Gamma_C)", "type": "line", "bind": "gamma_c_accidental_input"}, - {"id": "gamma_m0", "label": "Structural steel for Yielding and Buckling(Gamma_M0)", "type": "line", "bind": "gamma_m0_input"}, - {"id": "gamma_m1", "label": "Structural Steel For Ultimate Stress(Gamme_M1)", "type": "line", "bind": "gamma_m1_input"}, - {"id": "gamma_s", "label": "Reinforcing Steel (Gamma_s)", "type": "line", "bind": "gamma_s_input"}, - {"id": "gamma_v", "label": "Shear Connectors For Yield(Gamma_v)", "type": "line", "bind": "gamma_v_input"}, - {"id": "gamma_flt", "label": "Fatigue Load(Gamma_flt)", "type": "line", "bind": "gamma_flt_input"}, - {"id": "gamma_mf", "label": "Fatigue Strength(Gamma_Mf, t)", "type": "line", "bind": "gamma_mf_input"}, - ], - }, - { - "title": "Number of Load Cycles", - "field_width": 200, + "title": "Partial Factor", "fields": [ + { - "id": "load_cycles", - "label": "Number of Load Cycles(Cl605.3,Cl605.4)", + "id": "gamma_c_basic", + "label": "Concrete basic & seismic, γc", "type": "line", - "bind": "load_cycles_input", - } - ], - }, - { - "title": "K Factors", - "field_width": 120, - "fields": [ + "default": "1.5", + "bind": "gamma_c_basic_input", + "validator": { + "type": "double_range", + "bottom": 1.0, + "top": 2.0, + "decimals": 2, + }, + }, + { - "row_fields": [ - {"id": "k1", "label": "K1:", "type": "line", "bind": "k1_input", "width": 80}, - {"id": "k3", "label": "K3:", "type": "line", "bind": "k3_input", "width": 80}, - {"id": "k4", "label": "K4:", "type": "line", "bind": "k4_input", "width": 80}, - {"id": "k6", "label": "K6:", "type": "line", "bind": "k6_input", "width": 80}, - ] + "id": "gamma_c_accidental", + "label": "Concrete Accidental, γc", + "type": "line", + "default": "1.2", + "bind": "gamma_c_accidental_input", + "validator": { + "type": "double_range", + "bottom": 1.0, + "top": 2.0, + "decimals": 2, + }, }, + { - "row_fields": [ - {"id": "limit_l", "label": "Limit : L (m)", "type": "line", "bind": "limit_input", "width": 120} - ] + "id": "gamma_m0", + "label": "Structural steel for Yielding and Buckling, γM0", + "type": "line", + "default": "1.1", + "bind": "gamma_m0_input", + "validator": { + "type": "double_range", + "bottom": 1.0, + "top": 2.0, + "decimals": 2, + }, }, + { - "row_fields": [ - {"id": "k3_second", "label": "K3:", "type": "line", "bind": "k3_second_input", "width": 80}, - {"id": "k4_second", "label": "K4:", "type": "line", "bind": "k4_second_input", "width": 80}, - {"id": "exposure", "label": "Exposure:", "type": "line", "bind": "exposure_input", "width": 100}, - ] + "id": "gamma_m1", + "label": "Structural Steel For Ultimate Stress, γM1", + "type": "line", + "default": "1.25", + "bind": "gamma_m1_input", + "validator": { + "type": "double_range", + "bottom": 1.0, + "top": 2.0, + "decimals": 2, + }, + }, + + { + "id": "gamma_s", + "label": "Reinforcing Steel, γs", + "type": "line", + "default": "1.15", + "bind": "gamma_s_input", + "validator": { + "type": "double_range", + "bottom": 1.0, + "top": 2.0, + "decimals": 2, + }, + }, + + { + "id": "gamma_v", + "label": "Shear Connectors For Yield, γv", + "type": "line", + "default": "1.25", + "bind": "gamma_v_input", + "validator": { + "type": "double_range", + "bottom": 1.0, + "top": 2.0, + "decimals": 2, + }, + }, + + { + "id": "gamma_flt", + "label": "Fatigue Load, γflt", + "type": "line", + "default": "1", + "bind": "gamma_flt_input", + "validator": { + "type": "double_range", + "bottom": 1.0, + "top": 2.0, + "decimals": 2, + }, + }, + + { + "id": "gamma_mf", + "label": "Fatigue Strength, γMf,t", + "type": "line", + "default": "1.35", + "bind": "gamma_mf_input", + "validator": { + "type": "double_range", + "bottom": 1.0, + "top": 2.0, + "decimals": 2, + }, + }, + ] + }, + + # ---------------- Resistance to Fatigue ---------------- + { + "title": "Resistance to Fatigue", + "fields": [ + {"id": "load_cycles", "label": "Number of Load Cycles", "type": "line", "default": "2000000", "bind": "load_cycles_input", + "validator": { + "type": "double_range", + "bottom": 100000, + "top": 100000000, + "decimals": 2, + }, }, ], }, + + # ---------------- Deflection Control ---------------- { - "title": "Post-buckling", + "title": "Deflection Control", "fields": [ { - "id": "post_buckling", - "label": "Post-buckling Tension Field Action for Shear Resistance", - "type": "checkbox", - "bind": "post_buckling_checkbox", - } + "row_fields": [ + {"label": "Limit :", "type": "label","after_spacing": 408}, + {"label": "L /", "type": "label"}, + {"id": "limit_l", "label": "", "type": "line", "default": "600", "bind": "limit_input", "width": 150, + "validator": { + "type": "int_range", + "bottom": 300, + "top": 800, + } + }, + {"label": "m", "type": "label"}, + ] + }, ], }, + + # ---------------- Limit States ---------------- { "title": "Limit States", "checkbox_groups": [ @@ -1321,6 +1528,7 @@ "Resistance to Fatigue", ], "bind": "ultimate_checkboxes", + "default_checked": True, }, { "title": "Serviceability Limit States", @@ -1331,12 +1539,12 @@ "Crack Width Check", ], "bind": "service_checkboxes", + "default_checked": True, }, ], }, ], } - GIRDER_DETAILS_SCHEMA = { "overview": [ { @@ -1473,4 +1681,4 @@ ], } -#function -> store in dict design dict \ No newline at end of file +#function -> store in dict design dict diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 093e3fa7b..9f1eb608c 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -2,36 +2,73 @@ Additional Inputs Widget for Highway Bridge Design Provides detailed input fields for manual bridge parameter definition """ -import sys -import os from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QTabWidget, QTabBar, QLabel, QLineEdit, QComboBox, QGroupBox, QFormLayout, QPushButton, QScrollArea, QCheckBox, QMessageBox, QSizePolicy, QSpacerItem, QStackedWidget, QFrame, QGridLayout, QTableWidget, QTableWidgetItem, QHeaderView, - QTextEdit, QDialog, QSizePolicy, QSizeGrip + QTextEdit, QDialog, QSizePolicy, QSizeGrip, QListView, QStyledItemDelegate ) from PySide6.QtCore import Qt, Signal, QSize -from PySide6.QtGui import QDoubleValidator, QIntValidator +from PySide6.QtGui import QDoubleValidator, QIntValidator, QColor, QValidator from osdagbridge.core.utils.common import * from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style, create_action_button_bar -from osdagbridge.desktop.ui.dialogs.tabs.typical_section_details import TypicalSectionDetailsTab -from osdagbridge.desktop.ui.dialogs.tabs.optimizable_field import OptimizableField + +from osdagbridge.desktop.ui.dialogs.tabs.typical_section_details import TypicalSectionDetailsTab, show_warning from osdagbridge.desktop.ui.dialogs.tabs.section_properties_tab import SectionPropertiesTab -from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.girder_details_tab import GirderDetailsTab -from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.stiffener_details_tab import StiffenerDetailsTab -from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.cross_bracing_details_tab import CrossBracingDetailsTab -from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.end_diaphragm_details_tab import EndDiaphragmDetailsTab -from osdagbridge.desktop.ui.dialogs.tabs.custom_vehicle_dialog import CustomVehicleDialog from osdagbridge.desktop.ui.dialogs.tabs.loading_tab import LoadingTab +from osdagbridge.desktop.ui.dialogs.tabs.support_conditions_tab import SupportConditionsTab +from osdagbridge.desktop.ui.dialogs.tabs.design_options_tab import DesignOptionsTab +from osdagbridge.desktop.ui.dialogs.tabs.design_options_cont_tab import DesignOptionsContTab from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( - SUPPORT_CONDITIONS_SCHEMA, DESIGN_OPTIONS_SCHEMA, DESIGN_OPTIONS_CONT_SCHEMA, ) +# ================================================================================= +# CUSTOM COMBOBOX VIEW WITH SMART CURSOR HANDLING +# ================================================================================= + +class ComboBoxItemDelegate(QStyledItemDelegate): + """Delegate that renders disabled items in grey.""" + + def paint(self, painter, option, index): + item = index.model().item(index.row()) + if item and not item.isEnabled(): + # For disabled items, draw background and text in grey + painter.fillRect(option.rect, option.palette.base()) + painter.setPen(QColor(120, 120, 120)) # Grey color + text = index.data() + painter.drawText(option.rect, Qt.AlignLeft | Qt.AlignVCenter, f" {text}") + else: + super().paint(painter, option, index) + +class SmartCursorComboBoxView(QListView): + """Custom list view for combobox that shows pointing hand for enabled items, + forbidden cursor for disabled items, and renders disabled items in grey.""" + + def __init__(self): + super().__init__() + self.setItemDelegate(ComboBoxItemDelegate()) + + def mouseMoveEvent(self, event): + index = self.indexAt(event.pos()) + if index.isValid(): + item = self.model().item(index.row()) + if item and not item.isEnabled(): + self.setCursor(Qt.ForbiddenCursor) + else: + self.setCursor(Qt.PointingHandCursor) + else: + self.setCursor(Qt.PointingHandCursor) + super().mouseMoveEvent(event) + + def leaveEvent(self, event): + self.setCursor(Qt.ArrowCursor) + super().leaveEvent(event) + # ================================================================================= # MAIN IMPLEMENTATION # ================================================================================= @@ -47,8 +84,8 @@ def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None): self.setSizeGripEnabled(True) self.footpath_value = footpath_value self.carriageway_width = carriageway_width - self._member_properties_editable = True - self._last_saved_data = {} # Track last saved state + self.saved_values = {} # Store all input values here + self._member_properties_editable = True # Default to editable self.init_ui() self.setStyleSheet(""" QDialog { @@ -56,7 +93,185 @@ def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None): border: 1px solid #90AF13; } """) + + #this fuction validtes the range for input fields + def _validate_widget(self, widget): + validator = widget.validator() + if not validator: + return None + + text = widget.text().strip() + field_name = widget.objectName().replace("_", " ").title() + + if text == "": + return f"{field_name} cannot be empty." + + try: + value = float(text) + except ValueError: + return f"{field_name} must be a valid number." + + if isinstance(validator, QDoubleValidator) or isinstance(validator, QIntValidator): + bottom = validator.bottom() + top = validator.top() + + if value < bottom or value > top: + return f"{field_name} must be between {bottom} and {top}." + + # ============================== + # SPECIAL: Shear Stud Height + # ============================== + if widget.objectName() == "shear_stud_height": + try: + diameter = float(self.shear_stud_diameter_combo.currentText()) + deck_thickness = float(self.typical_section_tab.deck_thickness.text()) + + dynamic_min = max(4 * diameter, 100) + dynamic_max = deck_thickness - 25 + + if value < dynamic_min or value > dynamic_max: + return ( + f"Shear Stud Height must be between " + f"{dynamic_min:.0f} mm and {dynamic_max:.0f} mm." + ) + except Exception: + pass + + return None + + #This function is set to validate only Three tabs, Add the rest three tabs accordingly + def _validate_all_fields(self): + errors = [] + + # Tabs we want to validate + valid_tabs = [ + self.support_tab, + self.design_options_tab, + self.design_options_cont_tab, + ] + + # Get all QLineEdits in entire dialog + all_line_edits = self.findChildren(QLineEdit) + + for widget in all_line_edits: + + # Skip invisible widgets + if not widget.isVisible(): + continue + + # Check if widget belongs to one of the target tabs + for tab in valid_tabs: + if tab and tab.isAncestorOf(widget): + error = self._validate_widget(widget) + if error: + errors.append(error) + break # Stop checking other tabs + + return errors + + + def _save_inputs(self): + """ + Save additional inputs. + Validate all fields first. + If errors exist -> show popup and DO NOT close dialog. + """ + #this line takes all errors and show them together in the popup + errors = self._validate_all_fields() + + if errors: + error_message = "\n\n".join(f"• {err}" for err in errors) + + self._show_validation_errors(errors) + + return # STOP here, do not close dialog + + # If everything is valid → continue saving + + + self._collect_all_values() + + if hasattr(self, "typical_section_tab") and hasattr(self.typical_section_tab, "save_values"): + self.saved_values.update(self.typical_section_tab.save_values() or {}) + + if hasattr(self, "section_properties_tab"): + if hasattr(self.section_properties_tab, "save_properties"): + self.section_properties_tab.save_properties() + if hasattr(self.section_properties_tab, "save_values"): + self.saved_values.update(self.section_properties_tab.save_values() or {}) + + if hasattr(self, "loading_tab") and hasattr(self.loading_tab, "save_values"): + self.saved_values.update(self.loading_tab.save_values() or {}) + + if hasattr(self, "support_tab") and hasattr(self.support_tab, "save_values"): + self.saved_values.update(self.support_tab.save_values() or {}) + + if hasattr(self, "design_options_tab") and hasattr(self.design_options_tab, "save_values"): + self.saved_values.update(self.design_options_tab.save_values() or {}) + + if hasattr(self, "design_options_cont_tab") and hasattr(self.design_options_cont_tab, "save_values"): + self.saved_values.update(self.design_options_cont_tab.save_values() or {}) + + self.accept() + + #This part checks for all the errors in a particular tab and gives a popup after clicking save. + def _show_validation_errors(self, errors): + message = "\n\n".join(f"• {err}" for err in errors) + + msg = QMessageBox(self) + msg.setIcon(QMessageBox.Warning) + msg.setWindowTitle("Validation Errors") + msg.setText(message) + + msg.setStyleSheet(""" + QMessageBox { + background-color: #ffffff; + } + QMessageBox QLabel { + color: #b00020; + font-size: 12px; + } + QMessageBox QPushButton { + background-color: #f0f0f0; + color: #000000; + border: 1px solid #888888; + border-radius: 4px; + padding: 6px 20px; + min-width: 80px; + } + QMessageBox QPushButton:hover { + background-color: #e0e0e0; + } + """) + + msg.exec() + + def _collect_all_values(self): + """Collect values from all bound widgets across all tabs.""" + # Qt's findChildren doesn't accept a tuple; grab all QWidget descendants and filter + from PySide6.QtWidgets import QWidget + + for widget in self.findChildren(QWidget): + widget_name = widget.objectName() + if not widget_name: + continue + if isinstance(widget, QLineEdit): + self.saved_values[widget_name] = widget.text() + elif isinstance(widget, QComboBox): + self.saved_values[widget_name] = widget.currentText() + elif isinstance(widget, QCheckBox): + self.saved_values[widget_name] = widget.isChecked() + + def get_saved_values(self): + """Return the dictionary of saved values.""" + return self.saved_values.copy() + + # compatibility helper used elsewhere in codebase + def get_all_values(self): + """Alias to get_saved_values for older callers.""" + return self.get_saved_values() + def setupWrapper(self): self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) @@ -138,18 +353,17 @@ def init_ui(self): self.tabs.addTab(self.loading_tab, "Loading") # Sub-Tab 4: Support Conditions - support_tab = self._build_support_conditions_tab() - self.tabs.addTab(support_tab, "Support Conditions") + self.support_tab = SupportConditionsTab(self) + self.tabs.addTab(self.support_tab, "Support Conditions") # Sub-Tab 5: Analysis/Design Options - design_options_tab = self._build_design_options_tab() - self.tabs.addTab(design_options_tab, "Analysis/Design Options") + self.design_options_tab = DesignOptionsTab(self) + self.tabs.addTab(self.design_options_tab, "Analysis/Design Options") # Sub-Tab 6: Design Options (Cont.) - analysis_design_tab = self._build_design_options_cont_tab() - self.tabs.addTab(analysis_design_tab, "Design Options (Cont.)") - self.tabs.currentChanged.connect(self._on_top_tab_changed) - + self.design_options_cont_tab = DesignOptionsContTab(self) + self.tabs.addTab(self.design_options_cont_tab, "Design Options (Cont.)") + self.tabs.currentChanged.connect(self._on_top_tab_changed) main_layout.addWidget(self.tabs) action_bar, self.defaults_button, self.save_button = create_action_button_bar() @@ -157,12 +371,13 @@ def init_ui(self): self.save_button.clicked.connect(self._save_inputs) main_layout.addSpacing(6) main_layout.addWidget(action_bar) - + # Enforce max 2 decimal places for all double validators in the dialog self._enforce_decimal_places(2) # Normalize existing numeric text to 2 decimal places for consistent display self._normalize_numeric_texts(2) + def _enforce_decimal_places(self, places=2): """Force all QDoubleValidator instances in this dialog to the given decimal places.""" for line_edit in self.findChildren(QLineEdit): @@ -190,31 +405,78 @@ def _create_schema_widget(self, field_def, field_width): if field_type == "combo": widget = QComboBox() - widget.addItems(field_def.get("choices") or []) + choices = field_def.get("choices") or [] + + for choice in choices: + widget.addItem(choice) + + # apply enabled/disabled states if specified + enabled_list = field_def.get("enabled_choices") + if enabled_list is not None: + # after adding items we can disable the others + for idx in range(widget.count()): + text = widget.itemText(idx) + if text not in enabled_list: + item = widget.model().item(idx) + if item is not None: + item.setEnabled(False) + # grey out the text + item.setForeground(Qt.gray) + default = field_def.get("default") if default: widget.setCurrentText(str(default)) + widget.setFixedWidth(field_width) + # use custom view with smart cursor handling for disabled items + try: + custom_view = SmartCursorComboBoxView() + widget.setView(custom_view) + except Exception: + pass + + if field_def.get("id") == "shear_stud_diameter": + widget.currentTextChanged.connect( + lambda: self._validate_widget(self.shear_stud_spacing_input), + ) + elif field_type == "checkbox": widget = QCheckBox(field_def.get("label", "")) widget.setChecked(bool(field_def.get("default", False))) - else: + + elif field_type == "label": + widget = QLabel(field_def.get("default", "")) + widget.setFixedWidth(field_width) + + elif field_type in ["line", "number"]: widget = QLineEdit() + default = field_def.get("default") if default is not None: widget.setText(str(default)) + widget.setProperty("default_value", default) validator_def = field_def.get("validator") - if validator_def and validator_def.get("type") == "double_range": - bottom = validator_def.get("bottom", 0.0) - top = validator_def.get("top", 1e9) - decimals = validator_def.get("decimals", 2) - widget.setValidator(QDoubleValidator(bottom, top, decimals)) - placeholder = field_def.get("placeholder") - if placeholder: - widget.setPlaceholderText(placeholder) + + if validator_def: + if validator_def.get("type") == "double_range": + bottom = validator_def.get("bottom", 0.0) + top = validator_def.get("top", 1e9) + decimals = validator_def.get("decimals", 2) + validator = QDoubleValidator(bottom, top, decimals) + widget.setValidator(validator) + # placeholder showing range + widget.setPlaceholderText(f"{bottom} - {top}") + + elif validator_def.get("type") == "int_range": + bottom = validator_def.get("bottom", 0) + top = validator_def.get("top", 1_000_000) + validator = QIntValidator(bottom, top) + widget.setValidator(validator) + widget.setPlaceholderText(f"{bottom} - {top}") + widget.setFixedWidth(field_width) - if field_type != "checkbox": + if field_type not in ["checkbox", "label"]: apply_field_style(widget) bind_name = field_def.get("bind") @@ -256,44 +518,66 @@ def _apply_defaults(self): self.section_properties_tab.reset_defaults() return - # Other tabs: best-effort reset if supported. - if current_widget is not None and hasattr(current_widget, "reset_defaults"): - try: - current_widget.reset_defaults() - return - except Exception: - pass + for i in range(self.loading_tab.load_tabs.count()): + tab = self.loading_tab.load_tabs.widget(i) + if hasattr(tab, "reset_defaults"): + tab.reset_defaults() + + if hasattr(self, "typical_section_tab") and hasattr(self.typical_section_tab, "reset_defaults"): + self.typical_section_tab.reset_defaults() + if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "reset_defaults"): + self.section_properties_tab.reset_defaults() + if not (hasattr(self, "typical_section_tab") or hasattr(self, "section_properties_tab")): + self._show_placeholder_message("Defaults") + if hasattr(self, "left_support_combo"): + self.left_support_combo.setCurrentText("Pinned") + if hasattr(self, "right_support_combo"): + self.right_support_combo.setCurrentText("Roller") + if hasattr(self, "bearing_length_input"): + self.bearing_length_input.setText("400") + + # -------- Reset Design Options -------- + for card in DESIGN_OPTIONS_SCHEMA.get("cards", []): + for section in card.get("sections", []): + for field in section.get("fields", []): + bind_name = field.get("bind") + default_value = field.get("default") + + if bind_name and default_value is not None and hasattr(self, bind_name): + widget = getattr(self, bind_name) + + if isinstance(widget, QLineEdit): + widget.setText(str(default_value)) + + elif isinstance(widget, QComboBox): + widget.setCurrentText(str(default_value)) + + # -------- Reset Design Options (Cont.) -------- + for section in DESIGN_OPTIONS_CONT_SCHEMA.get("sections", []): + # Normal fields + for field in section.get("fields", []): + bind_name = field.get("bind") + default_value = field.get("default") + + if bind_name and default_value is not None and hasattr(self, bind_name): + widget = getattr(self, bind_name) + if isinstance(widget, QLineEdit): + widget.setText(str(default_value)) + elif isinstance(widget, QComboBox): + widget.setCurrentText(str(default_value)) + + # Checkbox groups (Limit States) + for group in section.get("checkbox_groups", []): + bind_name = group.get("bind") + default_checked = group.get("default_checked", False) + + if bind_name and hasattr(self, bind_name): + checkboxes = getattr(self, bind_name) + for cb in checkboxes: + cb.setChecked(default_checked) self._show_placeholder_message("Defaults") - def _save_inputs(self): - saved = {} - try: - if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "save_properties"): - saved.update(self.section_properties_tab.save_properties() or {}) - except Exception as exc: - # If saving fails, the old code would never reach the confirmation popup. - box = QMessageBox(self) - box.setIcon(QMessageBox.Critical) - box.setWindowTitle("Save Failed") - box.setText(f"Could not save inputs.\n\n{exc}") - box.setStandardButtons(QMessageBox.Ok) - box.exec() - return - - # Store the saved data for later retrieval - self._last_saved_data = saved - - # Confirm save to the user (requested behavior). Use an explicit message box - # instance so it stays on top of the frameless dialog. - box = QMessageBox(self) - box.setIcon(QMessageBox.Information) - box.setWindowTitle("Saved") - box.setText("Inputs saved successfully.") - box.setStandardButtons(QMessageBox.Ok) - box.setDefaultButton(QMessageBox.Ok) - box.setWindowModality(Qt.ApplicationModal) - box.exec() def _build_sections_from_schema(self, parent_layout, sections, heading_style, label_style, field_width): for section in sections: @@ -315,11 +599,15 @@ def _build_sections_from_schema(self, parent_layout, sections, heading_style, la vbox.setContentsMargins(16, 24, 16, 16) vbox.setSpacing(12) checkboxes = [] + default_checked = group.get("default_checked", False) + for text in group.get("items", []): cb = QCheckBox(text) + cb.setChecked(default_checked) cb.setStyleSheet("QCheckBox { font-size: 11px; color: #333333; background: transparent; spacing: 8px; }") vbox.addWidget(cb) checkboxes.append(cb) + bind_name = group.get("bind") if bind_name: @@ -350,15 +638,30 @@ def _build_sections_from_schema(self, parent_layout, sections, heading_style, la for field_def in section.get("fields", []): row_fields = field_def.get("row_fields") if row_fields: - col = 0 - for inline_def in row_fields: - lbl = QLabel(inline_def.get("label", "")) - lbl.setStyleSheet(label_style) - grid.addWidget(lbl, row_index, col, Qt.AlignLeft | Qt.AlignVCenter) - widget = self._create_schema_widget(inline_def, inline_def.get("width", section_field_width)) - grid.addWidget(widget, row_index, col + 1, Qt.AlignLeft) - col += 2 - row_index += 1 + row_layout = QHBoxLayout() + row_layout.setSpacing(8) # reduce gap + row_layout.setContentsMargins(0, 0, 0, 0) + + for i, inline_def in enumerate(row_fields): + + if inline_def.get("type") == "label": + lbl = QLabel(inline_def.get("label", "")) + lbl.setStyleSheet(label_style) + row_layout.addWidget(lbl) + + # Add extra spacing only after "Limit :" + if inline_def.get("after_spacing"): + row_layout.addSpacing(inline_def["after_spacing"]) + + else: + widget = self._create_schema_widget( + inline_def, + inline_def.get("width", section_field_width) + ) + row_layout.addWidget(widget) + + row_layout.addStretch() # keep left aligned + parent_layout.addLayout(row_layout) continue field_type = field_def.get("type") @@ -369,125 +672,30 @@ def _build_sections_from_schema(self, parent_layout, sections, heading_style, la continue lbl = QLabel(field_def.get("label", "")) + lbl.setTextFormat(Qt.RichText) lbl.setStyleSheet(label_style) grid.addWidget(lbl, row_index, 0, Qt.AlignLeft | Qt.AlignVCenter) widget = self._create_schema_widget(field_def, section_field_width) - grid.addWidget(widget, row_index, 1, Qt.AlignLeft) - row_index += 1 - - parent_layout.addLayout(grid) - - def _build_support_conditions_tab(self): - """Build the Support Conditions tab using schema-driven sections.""" - widget = QWidget() - widget.setStyleSheet("background-color: #f5f5f5;") - - main_layout = QVBoxLayout(widget) - main_layout.setContentsMargins(12, 12, 12, 12) - main_layout.setSpacing(12) - - card_style = "QFrame { border: 1px solid #b2b2b2; border-radius: 8px; background-color: #ffffff; }" - heading_style = "font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;" - label_style = "font-size: 11px; color: #3a3a3a; background: transparent; border: none;" - field_width = 160 - - card = QFrame() - card.setStyleSheet(card_style) - card_layout = QVBoxLayout(card) - card_layout.setContentsMargins(16, 16, 16, 16) - card_layout.setSpacing(12) - - self._build_sections_from_schema( - card_layout, - SUPPORT_CONDITIONS_SCHEMA.get("sections", []), - heading_style, - label_style, - field_width, - ) - - card_layout.addStretch() - main_layout.addWidget(card) - main_layout.addStretch() + # Create vertical container for error + field + field_container = QVBoxLayout() + field_container.setContentsMargins(0, 0, 0, 0) + field_container.setSpacing(2) - return widget - - def _build_design_options_tab(self): - """Build the Design Options tab matching reference design""" - widget = QWidget() - widget.setStyleSheet("background-color: #f5f5f5;") - - main_layout = QVBoxLayout(widget) - main_layout.setContentsMargins(12, 12, 12, 12) - main_layout.setSpacing(12) - card_style = "QFrame { border: 1px solid #b2b2b2; border-radius: 8px; background-color: #ffffff; }" - label_style = "font-size: 11px; color: #3a3a3a; background: transparent; border: none;" - heading_style = "font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;" - default_field_width = 150 - - for card_schema in DESIGN_OPTIONS_SCHEMA.get("cards", []): - card = QFrame() - card.setStyleSheet(card_style) - card_layout = QVBoxLayout(card) - card_layout.setContentsMargins(16, 14, 16, 14) - card_layout.setSpacing(10) - - card_title = card_schema.get("title") - if card_title: - title_lbl = QLabel(f"{card_title}:") - title_lbl.setStyleSheet(heading_style) - card_layout.addWidget(title_lbl) + error_label = getattr(widget, "_error_label", None) + if error_label is not None: + field_container.addWidget(error_label) - self._build_sections_from_schema( - card_layout, - card_schema.get("sections", []), - heading_style, - label_style, - card_schema.get("field_width", default_field_width), - ) + field_container.addWidget(widget) - main_layout.addWidget(card) + container_widget = QWidget() + container_widget.setLayout(field_container) - main_layout.addStretch() - - return widget - - def _build_design_options_cont_tab(self): - """Build the Design Options (Cont.) tab to match provided layout""" - widget = QWidget() - widget.setStyleSheet("background-color: #f5f5f5;") - - scroll = QScrollArea() - scroll.setWidgetResizable(True) - scroll.setFrameShape(QFrame.NoFrame) - scroll.setStyleSheet("QScrollArea { background: transparent; border: none; }") - - scroll_content = QWidget() - scroll_content.setStyleSheet("background-color: #f5f5f5;") - main_layout = QVBoxLayout(scroll_content) - main_layout.setContentsMargins(20, 20, 20, 20) - main_layout.setSpacing(16) - - label_style = "font-size: 11px; color: #333333; background: transparent; border: none;" - heading_style = "font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;" - - self._build_sections_from_schema( - main_layout, - DESIGN_OPTIONS_CONT_SCHEMA.get("sections", []), - heading_style, - label_style, - 140, - ) - - main_layout.addStretch() + grid.addWidget(container_widget, row_index, 1, Qt.AlignLeft) + row_index += 1 - scroll.setWidget(scroll_content) - - outer_layout = QVBoxLayout(widget) - outer_layout.setContentsMargins(0, 0, 0, 0) - outer_layout.addWidget(scroll) + parent_layout.addLayout(grid) - return widget def update_footpath_value(self, footpath_value): """Update footpath value across all tabs""" diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_cont_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_cont_tab.py new file mode 100644 index 000000000..dff1f2eca --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_cont_tab.py @@ -0,0 +1,175 @@ +from PySide6.QtWidgets import ( + QWidget, + QVBoxLayout, + QFrame, + QLabel, + QScrollArea, + QHBoxLayout, + QGroupBox, + QCheckBox, +) +from PySide6.QtCore import Qt + +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( + DESIGN_OPTIONS_CONT_SCHEMA, +) + + +class DesignOptionsContTab(QWidget): + """ + Design Options (Cont.) Tab + Includes scroll area and limit state checkbox groups + """ + + def __init__(self, parent_dialog): + super().__init__() + self.parent_dialog = parent_dialog + self.init_ui() + + def save_values(self): + """Collect and return all design option (cont.) values.""" + values = {} + for field_name in dir(self.parent_dialog): + if field_name.endswith("_combo") or field_name.endswith("_input"): + widget = getattr(self.parent_dialog, field_name, None) + if widget: + from PySide6.QtWidgets import QLineEdit, QComboBox + if isinstance(widget, QLineEdit): + values[field_name] = widget.text() + elif isinstance(widget, QComboBox): + values[field_name] = widget.currentText() + return values + + def init_ui(self): + #Changed Bg color + self.setStyleSheet("background-color: #ffffff;") + + #Scroll Area + scroll = QScrollArea() + scroll.setWidgetResizable(True) + scroll.setFrameShape(QFrame.NoFrame) + scroll.setStyleSheet( + "QScrollArea { background: transparent; border: none; }" + ) + + scroll_content = QWidget() + scroll_content.setStyleSheet("background-color: #ffffff;") + + main_layout = QVBoxLayout(scroll_content) + main_layout.setContentsMargins(20, 20, 20, 20) + main_layout.setSpacing(16) + + card_style = """ + QFrame { + border: 1px solid #b2b2b2; + border-radius: 8px; + background-color: #ffffff; + } + """ + + heading_style = """ + font-size: 12px; + font-weight: 700; + color: #2b2b2b; + background: transparent; + border: none; + """ + + label_style = """ + font-size: 11px; + color: #3a3a3a; + background: transparent; + border: none; + """ + + field_width = 150 + + for section in DESIGN_OPTIONS_CONT_SCHEMA.get("sections", []): + + # -------- LIMIT STATES (Checkbox Groups) -------- + if section.get("checkbox_groups"): + + title_lbl = QLabel(section.get("title", "")) + title_lbl.setStyleSheet(""" + font-size: 12px; + font-weight: 700; + color: #000000; + margin-left: 4px; + """) + main_layout.addWidget(title_lbl, alignment=Qt.AlignLeft) + + groups_layout = QHBoxLayout() + groups_layout.setSpacing(20) + + for group in section.get("checkbox_groups", []): + box = QGroupBox(group.get("title", "")) + box.setStyleSheet(""" + QGroupBox { + border: 1px solid #000000; + border-radius: 8px; + margin-top: 12px; + padding: 8px; + background-color: #ffffff; + } + QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + left: 12px; + padding: 0 6px; + background-color: #ffffff; + font-weight: 600; + font-size: 11px; + color: #000000; + } + """) + + vbox = QVBoxLayout(box) + vbox.setContentsMargins(16, 20, 16, 16) + vbox.setSpacing(8) + + checkboxes = [] + for text in group.get("items", []): + cb = QCheckBox(text) + cb.setStyleSheet(""" + QCheckBox { + font-size: 11px; + color: #333333; + spacing: 6px; + } + """) + vbox.addWidget(cb) + checkboxes.append(cb) + vbox.addStretch() + # bind to parent dialog + setattr(self.parent_dialog, group.get("bind"), checkboxes) + + groups_layout.addWidget(box) + + main_layout.addLayout(groups_layout) + continue + + # -------- NORMAL CARD SECTIONS -------- + card = QFrame() + card.setStyleSheet(card_style) + + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(16, 16, 16, 16) + card_layout.setSpacing(10) + + self.parent_dialog._build_sections_from_schema( + card_layout, + [section], + heading_style, + label_style, + field_width, + ) + + main_layout.addWidget(card) + + main_layout.addStretch() + + scroll.setWidget(scroll_content) + + outer_layout = QVBoxLayout(self) + outer_layout.setContentsMargins(0, 0, 0, 0) + outer_layout.addWidget(scroll) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py new file mode 100644 index 000000000..8b1a23cb6 --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py @@ -0,0 +1,128 @@ +from PySide6.QtWidgets import ( + QWidget, + QVBoxLayout, + QFrame, + QLabel, + QScrollArea, +) +from PySide6.QtCore import Qt + +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( + DESIGN_OPTIONS_SCHEMA, +) + + +class DesignOptionsTab(QWidget): + """ + Design Options Tab + Schema-driven UI matching Osdag card layout + Now includes vertical scroll support + """ + + def __init__(self, parent_dialog): + super().__init__() + self.parent_dialog = parent_dialog + self.init_ui() + + def save_values(self): + """Collect and return all design option values.""" + values = {} + for field_name in dir(self.parent_dialog): + if field_name.endswith("_combo") or field_name.endswith("_input"): + widget = getattr(self.parent_dialog, field_name, None) + if widget: + from PySide6.QtWidgets import QLineEdit, QComboBox + if isinstance(widget, QLineEdit): + values[field_name] = widget.text() + elif isinstance(widget, QComboBox): + values[field_name] = widget.currentText() + return values + + def init_ui(self): + # Changed Bg color + self.setStyleSheet("background-color: #f5f5f5;") + + # Scroll Area Setup + scroll = QScrollArea() + scroll.setWidgetResizable(True) + scroll.setFrameShape(QFrame.NoFrame) + scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) + + scroll.setStyleSheet(""" + QScrollArea { + border: none; + background-color: #f5f5f5; + } + """) + + # Scroll content container + scroll_content = QWidget() + scroll_content.setStyleSheet("background-color: #ffffff;") + + main_layout = QVBoxLayout(scroll_content) + main_layout.setContentsMargins(12, 12, 12, 12) + main_layout.setSpacing(12) + + card_style = """ + QFrame { + border: 1px solid #b2b2b2; + border-radius: 8px; + background-color: #ffffff; + } + """ + + heading_style = """ + font-size: 12px; + font-weight: 700; + color: #2b2b2b; + background: transparent; + border: none; + """ + + label_style = """ + font-size: 11px; + color: #3a3a3a; + background: transparent; + border: none; + """ + + default_field_width = 150 + + + # Built Cards from Schema + for card_schema in DESIGN_OPTIONS_SCHEMA.get("cards", []): + + card = QFrame() + card.setStyleSheet(card_style) + + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(16, 14, 16, 14) + card_layout.setSpacing(10) + + card_title = card_schema.get("title") + if card_title: + title_lbl = QLabel(f"{card_title}") + title_lbl.setStyleSheet(heading_style) + card_layout.addWidget(title_lbl) + + # Reuse parent dialog schema renderer + self.parent_dialog._build_sections_from_schema( + card_layout, + card_schema.get("sections", []), + heading_style, + label_style, + card_schema.get("field_width", default_field_width), + ) + + main_layout.addWidget(card) + + # Push everything up + main_layout.addStretch() + + # Final scroll wiring + scroll.setWidget(scroll_content) + + outer_layout = QVBoxLayout(self) + outer_layout.setContentsMargins(0, 0, 0, 0) + outer_layout.addWidget(scroll) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py new file mode 100644 index 000000000..86306cfaf --- /dev/null +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py @@ -0,0 +1,86 @@ +from PySide6.QtWidgets import QWidget, QVBoxLayout, QFrame +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import SUPPORT_CONDITIONS_SCHEMA + + +class SupportConditionsTab(QWidget): + + def __init__(self, parent_dialog): + super().__init__() + self.setObjectName("support_tab_widget") + self.parent_dialog = parent_dialog + self.init_ui() + + def save_values(self): + """Save support conditions values.""" + values = {} + if hasattr(self.parent_dialog, "left_support_combo"): + values["left_support"] = self.parent_dialog.left_support_combo.currentText() + if hasattr(self.parent_dialog, "right_support_combo"): + values["right_support"] = self.parent_dialog.right_support_combo.currentText() + if hasattr(self.parent_dialog, "bearing_length_input"): + values["bearing_length"] = self.parent_dialog.bearing_length_input.text() + return values + + def reset_defaults(self): + """Reset to default values.""" + if hasattr(self.parent_dialog, "left_support_combo"): + self.parent_dialog.left_support_combo.setCurrentText("Pinned") + if hasattr(self.parent_dialog, "right_support_combo"): + self.parent_dialog.right_support_combo.setCurrentText("Roller") + if hasattr(self.parent_dialog, "bearing_length_input"): + self.parent_dialog.bearing_length_input.setText("400") + + def init_ui(self): + + self.setStyleSheet(""" + + + #support_tab_widget QLabel { + border: none; + background: transparent; + padding: 0; + border-radius: 0; + } + #support_tab_widget { + background-color: #f5f5f5; + } + + """) + + main_layout = QVBoxLayout() + self.setLayout(main_layout) + main_layout.setContentsMargins(12, 12, 12, 12) + main_layout.setSpacing(12) + + card = QFrame() + card.setObjectName("support_card") + card.setStyleSheet(""" + QFrame#support_card { + border: 1px solid #b2b2b2; + border-radius: 8px; + background-color: #ffffff; + } + /* this selector is even more specific than the app stylesheet */ + QFrame#support_card QLabel { + background: transparent; + border: none; + border-radius: 0; + padding: 0; + } + """) + + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(16, 16, 16, 16) + card_layout.setSpacing(12) + + + self.parent_dialog._build_sections_from_schema( + card_layout, + SUPPORT_CONDITIONS_SCHEMA["sections"], + "font-size: 12px; font-weight: 700; color: #2b2b2b;", + "font-size: 11px; color: #3a3a3a;", + 160, + ) + + main_layout.addWidget(card) + main_layout.addStretch() \ No newline at end of file From 234e82b1c1a262c0b37812f30f066dce8f33e817 Mon Sep 17 00:00:00 2001 From: Jatin1628 Date: Wed, 4 Mar 2026 17:17:39 +0530 Subject: [PATCH 079/225] Removed uneccessary code from this file Fixed the coming soon error when clicking defaults created seperate cards for support conditions and bearing length Changed Structure of additional inputs and make seperate files for utils Made changes in schema to make default values upto two decimal Made Cleaner structure for additional inputs and shifted defaults to respective fields Removed validation.py and moved validation to seperate tabs minor fixes to additional inputs Fixed the inputs saved issue --- .../ui_fields_additional_input.py | 28 +- .../desktop/ui/dialogs/additional_inputs.py | 347 +++++++----------- .../dialogs/tabs/design_options_cont_tab.py | 86 ++++- .../ui/dialogs/tabs/design_options_tab.py | 112 +++++- .../ui/dialogs/tabs/support_conditions_tab.py | 102 +++-- .../desktop/ui/utils/combobox_utils.py | 91 +++++ 6 files changed, 494 insertions(+), 272 deletions(-) create mode 100644 src/osdagbridge/desktop/ui/utils/combobox_utils.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py index da92c0edc..cc5c8590e 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py @@ -1153,7 +1153,7 @@ "id": "bearing_length", "label": "Bearing Length Value (mm)", "type": "line", - "default": "400", + "default": "400.00", "placeholder": "Length", "bind": "bearing_length_input", "validator": { @@ -1230,10 +1230,10 @@ "bind": "top_clear_cover_input", "label": "Top Clear Cover (mm)", "type": "number", - "default": 50.0, + "default": 50.00, "validator": { "type": "double_range", - "bottom": 40.0, + "bottom": 40.00, "top": 75.0, "decimals": 1, }, @@ -1244,7 +1244,7 @@ "id": "bottom_clear_cover", "label": "Bottom Clear Cover (mm)", "type": "number", - "default": 40.0, + "default": 40.00, "validator": { "type": "double_range", "bottom": 35.0, @@ -1283,7 +1283,7 @@ "id": "shear_stud_yield_strength", "label": "Yield Strength (MPa)", "type": "line", - "default": "385", + "default": "385.00", "validator": { "type": "double_range", "bottom": 350, @@ -1296,7 +1296,7 @@ "id": "shear_stud_ultimate_strength", "label": "Ultimate Strength (MPa)", "type": "line", - "default": "495", + "default": "495.00", "validator": { "type": "double_range", "bottom": 350, @@ -1317,7 +1317,7 @@ "id": "shear_stud_height", "label": "Height (mm)", "type": "line", - "default": "100", + "default": "100.00", "validator": { "type": "double_range", "bottom": 0.0, @@ -1338,7 +1338,7 @@ "id": "shear_stud_transverse_spacing", "label": "Transverse Spacing (mm)", "type": "line", - "default": "100", + "default": "100.00", "validator": { "type": "double_range", "bottom": 0.0, @@ -1367,7 +1367,7 @@ "id": "gamma_c_basic", "label": "Concrete basic & seismic, γc", "type": "line", - "default": "1.5", + "default": "1.50", "bind": "gamma_c_basic_input", "validator": { "type": "double_range", @@ -1381,7 +1381,7 @@ "id": "gamma_c_accidental", "label": "Concrete Accidental, γc", "type": "line", - "default": "1.2", + "default": "1.20", "bind": "gamma_c_accidental_input", "validator": { "type": "double_range", @@ -1395,7 +1395,7 @@ "id": "gamma_m0", "label": "Structural steel for Yielding and Buckling, γM0", "type": "line", - "default": "1.1", + "default": "1.10", "bind": "gamma_m0_input", "validator": { "type": "double_range", @@ -1451,7 +1451,7 @@ "id": "gamma_flt", "label": "Fatigue Load, γflt", "type": "line", - "default": "1", + "default": "1.00", "bind": "gamma_flt_input", "validator": { "type": "double_range", @@ -1481,7 +1481,7 @@ { "title": "Resistance to Fatigue", "fields": [ - {"id": "load_cycles", "label": "Number of Load Cycles", "type": "line", "default": "2000000", "bind": "load_cycles_input", + {"id": "load_cycles", "label": "Number of Load Cycles", "type": "line", "default": "2000000.00", "bind": "load_cycles_input", "validator": { "type": "double_range", "bottom": 100000, @@ -1500,7 +1500,7 @@ "row_fields": [ {"label": "Limit :", "type": "label","after_spacing": 408}, {"label": "L /", "type": "label"}, - {"id": "limit_l", "label": "", "type": "line", "default": "600", "bind": "limit_input", "width": 150, + {"id": "limit_l", "label": "", "type": "line", "default": "600.00", "bind": "limit_input", "width": 150, "validator": { "type": "int_range", "bottom": 300, diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 9f1eb608c..10c300920 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -15,59 +15,19 @@ from osdagbridge.core.utils.common import * from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style, create_action_button_bar - from osdagbridge.desktop.ui.dialogs.tabs.typical_section_details import TypicalSectionDetailsTab, show_warning from osdagbridge.desktop.ui.dialogs.tabs.section_properties_tab import SectionPropertiesTab from osdagbridge.desktop.ui.dialogs.tabs.loading_tab import LoadingTab from osdagbridge.desktop.ui.dialogs.tabs.support_conditions_tab import SupportConditionsTab from osdagbridge.desktop.ui.dialogs.tabs.design_options_tab import DesignOptionsTab from osdagbridge.desktop.ui.dialogs.tabs.design_options_cont_tab import DesignOptionsContTab +from osdagbridge.desktop.ui.utils.combobox_utils import SmartCursorComboBoxView from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( DESIGN_OPTIONS_SCHEMA, DESIGN_OPTIONS_CONT_SCHEMA, ) -# ================================================================================= -# CUSTOM COMBOBOX VIEW WITH SMART CURSOR HANDLING -# ================================================================================= -class ComboBoxItemDelegate(QStyledItemDelegate): - """Delegate that renders disabled items in grey.""" - - def paint(self, painter, option, index): - item = index.model().item(index.row()) - if item and not item.isEnabled(): - # For disabled items, draw background and text in grey - painter.fillRect(option.rect, option.palette.base()) - painter.setPen(QColor(120, 120, 120)) # Grey color - text = index.data() - painter.drawText(option.rect, Qt.AlignLeft | Qt.AlignVCenter, f" {text}") - else: - super().paint(painter, option, index) - -class SmartCursorComboBoxView(QListView): - """Custom list view for combobox that shows pointing hand for enabled items, - forbidden cursor for disabled items, and renders disabled items in grey.""" - - def __init__(self): - super().__init__() - self.setItemDelegate(ComboBoxItemDelegate()) - - def mouseMoveEvent(self, event): - index = self.indexAt(event.pos()) - if index.isValid(): - item = self.model().item(index.row()) - if item and not item.isEnabled(): - self.setCursor(Qt.ForbiddenCursor) - else: - self.setCursor(Qt.PointingHandCursor) - else: - self.setCursor(Qt.PointingHandCursor) - super().mouseMoveEvent(event) - - def leaveEvent(self, event): - self.setCursor(Qt.ArrowCursor) - super().leaveEvent(event) # ================================================================================= # MAIN IMPLEMENTATION @@ -84,8 +44,9 @@ def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None): self.setSizeGripEnabled(True) self.footpath_value = footpath_value self.carriageway_width = carriageway_width + self._member_properties_editable = True + self._last_saved_data = {} self.saved_values = {} # Store all input values here - self._member_properties_editable = True # Default to editable self.init_ui() self.setStyleSheet(""" QDialog { @@ -93,128 +54,87 @@ def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None): border: 1px solid #90AF13; } """) - - #this fuction validtes the range for input fields - def _validate_widget(self, widget): - validator = widget.validator() - if not validator: - return None - - text = widget.text().strip() - field_name = widget.objectName().replace("_", " ").title() - - if text == "": - return f"{field_name} cannot be empty." - - try: - value = float(text) - except ValueError: - return f"{field_name} must be a valid number." - - if isinstance(validator, QDoubleValidator) or isinstance(validator, QIntValidator): - bottom = validator.bottom() - top = validator.top() - - if value < bottom or value > top: - return f"{field_name} must be between {bottom} and {top}." - - # ============================== - # SPECIAL: Shear Stud Height - # ============================== - if widget.objectName() == "shear_stud_height": - try: - diameter = float(self.shear_stud_diameter_combo.currentText()) - deck_thickness = float(self.typical_section_tab.deck_thickness.text()) - - dynamic_min = max(4 * diameter, 100) - dynamic_max = deck_thickness - 25 - - if value < dynamic_min or value > dynamic_max: - return ( - f"Shear Stud Height must be between " - f"{dynamic_min:.0f} mm and {dynamic_max:.0f} mm." - ) - except Exception: - pass - - return None - - #This function is set to validate only Three tabs, Add the rest three tabs accordingly - def _validate_all_fields(self): - errors = [] - - # Tabs we want to validate - valid_tabs = [ - self.support_tab, - self.design_options_tab, - self.design_options_cont_tab, - ] - - # Get all QLineEdits in entire dialog - all_line_edits = self.findChildren(QLineEdit) - - for widget in all_line_edits: - - # Skip invisible widgets - if not widget.isVisible(): - continue - - # Check if widget belongs to one of the target tabs - for tab in valid_tabs: - if tab and tab.isAncestorOf(widget): - error = self._validate_widget(widget) - if error: - errors.append(error) - break # Stop checking other tabs - - return errors - def _save_inputs(self): + saved = {} """ Save additional inputs. Validate all fields first. If errors exist -> show popup and DO NOT close dialog. """ - #this line takes all errors and show them together in the popup - errors = self._validate_all_fields() + #calls validate_widgets_in_tabs which validates all the fields in the following tabs + + #this funciton now asks all tabs to validate themselves + errors = [] - if errors: - error_message = "\n\n".join(f"• {err}" for err in errors) + for tab in [ + self.support_tab, + self.design_options_tab, + self.design_options_cont_tab, + ]: + if hasattr(tab, "validate_tab"): + tab_errors = tab.validate_tab() + if tab_errors: + errors.extend(tab_errors) + if errors: self._show_validation_errors(errors) - - return # STOP here, do not close dialog - + return # If everything is valid → continue saving - + #clears dictionary before saving new values + self.saved_values.clear() + #collects all inputs self._collect_all_values() - if hasattr(self, "typical_section_tab") and hasattr(self.typical_section_tab, "save_values"): - self.saved_values.update(self.typical_section_tab.save_values() or {}) + saved = self.saved_values.copy() + + tabs = [ + getattr(self, "typical_section_tab", None), + getattr(self, "section_properties_tab", None), + getattr(self, "loading_tab", None), + getattr(self, "support_tab", None), + getattr(self, "design_options_tab", None), + getattr(self, "design_options_cont_tab", None), + ] - if hasattr(self, "section_properties_tab"): - if hasattr(self.section_properties_tab, "save_properties"): - self.section_properties_tab.save_properties() - if hasattr(self.section_properties_tab, "save_values"): - self.saved_values.update(self.section_properties_tab.save_values() or {}) + for tab in tabs: + if not tab: + continue - if hasattr(self, "loading_tab") and hasattr(self.loading_tab, "save_values"): - self.saved_values.update(self.loading_tab.save_values() or {}) + # save simple UI values + if hasattr(tab, "save_values"): + saved.update(tab.save_values() or {}) - if hasattr(self, "support_tab") and hasattr(self.support_tab, "save_values"): - self.saved_values.update(self.support_tab.save_values() or {}) + # save complex data structures + if hasattr(tab, "save_properties"): + saved.update(tab.save_properties() or {}) - if hasattr(self, "design_options_tab") and hasattr(self.design_options_tab, "save_values"): - self.saved_values.update(self.design_options_tab.save_values() or {}) + self._last_saved_data = saved - if hasattr(self, "design_options_cont_tab") and hasattr(self.design_options_cont_tab, "save_values"): - self.saved_values.update(self.design_options_cont_tab.save_values() or {}) + box = QMessageBox(self) + box.setIcon(QMessageBox.Information) + box.setWindowTitle("Saved") + box.setText("Inputs saved successfully.") + box.setStandardButtons(QMessageBox.Ok) + box.setDefaultButton(QMessageBox.Ok) + box.setWindowModality(Qt.ApplicationModal) + + box.setStyleSheet(""" + QMessageBox { + background-color: #ffffff; + } + + QMessageBox QLabel { + color: #2b2b2b; + font-size: 12px; + } + """) + + box.exec() - self.accept() + # self.accept() - #This part checks for all the errors in a particular tab and gives a popup after clicking save. def _show_validation_errors(self, errors): message = "\n\n".join(f"• {err}" for err in errors) @@ -239,17 +159,13 @@ def _show_validation_errors(self, errors): padding: 6px 20px; min-width: 80px; } - QMessageBox QPushButton:hover { - background-color: #e0e0e0; - } """) - msg.exec() + msg.exec() def _collect_all_values(self): """Collect values from all bound widgets across all tabs.""" # Qt's findChildren doesn't accept a tuple; grab all QWidget descendants and filter - from PySide6.QtWidgets import QWidget for widget in self.findChildren(QWidget): widget_name = widget.objectName() @@ -331,6 +247,7 @@ def init_ui(self): color: #ffffff; } """) + self._last_top_tab_index = 0 # Sub-Tab 1: Typical Section Details @@ -363,6 +280,8 @@ def init_ui(self): # Sub-Tab 6: Design Options (Cont.) self.design_options_cont_tab = DesignOptionsContTab(self) self.tabs.addTab(self.design_options_cont_tab, "Design Options (Cont.)") + + self.tabs.currentChanged.connect(self._on_top_tab_changed) main_layout.addWidget(self.tabs) @@ -435,11 +354,6 @@ def _create_schema_widget(self, field_def, field_width): except Exception: pass - if field_def.get("id") == "shear_stud_diameter": - widget.currentTextChanged.connect( - lambda: self._validate_widget(self.shear_stud_spacing_input), - ) - elif field_type == "checkbox": widget = QCheckBox(field_def.get("label", "")) widget.setChecked(bool(field_def.get("default", False))) @@ -518,66 +432,27 @@ def _apply_defaults(self): self.section_properties_tab.reset_defaults() return + if current_widget is getattr(self, "loading_tab", None): for i in range(self.loading_tab.load_tabs.count()): tab = self.loading_tab.load_tabs.widget(i) if hasattr(tab, "reset_defaults"): tab.reset_defaults() - - if hasattr(self, "typical_section_tab") and hasattr(self.typical_section_tab, "reset_defaults"): - self.typical_section_tab.reset_defaults() - if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "reset_defaults"): - self.section_properties_tab.reset_defaults() - if not (hasattr(self, "typical_section_tab") or hasattr(self, "section_properties_tab")): - self._show_placeholder_message("Defaults") - if hasattr(self, "left_support_combo"): - self.left_support_combo.setCurrentText("Pinned") - if hasattr(self, "right_support_combo"): - self.right_support_combo.setCurrentText("Roller") - if hasattr(self, "bearing_length_input"): - self.bearing_length_input.setText("400") - - # -------- Reset Design Options -------- - for card in DESIGN_OPTIONS_SCHEMA.get("cards", []): - for section in card.get("sections", []): - for field in section.get("fields", []): - bind_name = field.get("bind") - default_value = field.get("default") - - if bind_name and default_value is not None and hasattr(self, bind_name): - widget = getattr(self, bind_name) - - if isinstance(widget, QLineEdit): - widget.setText(str(default_value)) - - elif isinstance(widget, QComboBox): - widget.setCurrentText(str(default_value)) - - # -------- Reset Design Options (Cont.) -------- - for section in DESIGN_OPTIONS_CONT_SCHEMA.get("sections", []): - # Normal fields - for field in section.get("fields", []): - bind_name = field.get("bind") - default_value = field.get("default") - - if bind_name and default_value is not None and hasattr(self, bind_name): - widget = getattr(self, bind_name) - if isinstance(widget, QLineEdit): - widget.setText(str(default_value)) - elif isinstance(widget, QComboBox): - widget.setCurrentText(str(default_value)) - - # Checkbox groups (Limit States) - for group in section.get("checkbox_groups", []): - bind_name = group.get("bind") - default_checked = group.get("default_checked", False) - - if bind_name and hasattr(self, bind_name): - checkboxes = getattr(self, bind_name) - for cb in checkboxes: - cb.setChecked(default_checked) - - self._show_placeholder_message("Defaults") - + return + + if current_widget is getattr(self, "support_tab", None): + if hasattr(self.support_tab, "reset_defaults"): + self.support_tab.reset_defaults() + return + + if current_widget is getattr(self, "design_options_tab", None): + if hasattr(self.design_options_tab, "reset_defaults"): + self.design_options_tab.reset_defaults() + return + + if current_widget is getattr(self, "design_options_cont_tab", None): + if hasattr(self.design_options_cont_tab, "reset_defaults"): + self.design_options_cont_tab.reset_defaults() + return def _build_sections_from_schema(self, parent_layout, sections, heading_style, label_style, field_width): for section in sections: @@ -756,7 +631,7 @@ def get_saved_data(self) -> dict: Returns: Dictionary containing all saved properties including stiffener details. """ - return self._last_saved_data + return self._last_saved_data.copy() def set_properties_data(self, data: dict) -> None: """Restore properties data from a previous save. @@ -764,8 +639,50 @@ def set_properties_data(self, data: dict) -> None: Args: data: Dictionary containing properties to restore. """ - if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "restore_properties"): - try: - self.section_properties_tab.restore_properties(data) - except Exception: - pass + + tabs = [ + getattr(self, "typical_section_tab", None), + getattr(self, "section_properties_tab", None), + getattr(self, "loading_tab", None), + getattr(self, "support_tab", None), + getattr(self, "design_options_tab", None), + getattr(self, "design_options_cont_tab", None), + ] + + for tab in tabs: + if not tab: + continue + + if hasattr(tab, "restore_values"): + try: + tab.restore_values(data) + except Exception: + pass + + if hasattr(tab, "restore_properties"): + try: + tab.restore_properties(data) + except Exception: + pass + + # Generic restore fallback + try: + for widget in self.findChildren(QWidget): + name = widget.objectName() + + if not name or name not in data: + continue + + value = data[name] + + if isinstance(widget, QLineEdit): + widget.setText(str(value)) + + elif isinstance(widget, QComboBox): + widget.setCurrentText(str(value)) + + elif isinstance(widget, QCheckBox): + widget.setChecked(bool(value)) + + except Exception: + pass \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_cont_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_cont_tab.py index dff1f2eca..2c835cc86 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_cont_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_cont_tab.py @@ -7,9 +7,11 @@ QHBoxLayout, QGroupBox, QCheckBox, + QLineEdit, + QComboBox ) from PySide6.QtCore import Qt - +from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( DESIGN_OPTIONS_CONT_SCHEMA, ) @@ -33,13 +35,93 @@ def save_values(self): if field_name.endswith("_combo") or field_name.endswith("_input"): widget = getattr(self.parent_dialog, field_name, None) if widget: - from PySide6.QtWidgets import QLineEdit, QComboBox if isinstance(widget, QLineEdit): values[field_name] = widget.text() elif isinstance(widget, QComboBox): values[field_name] = widget.currentText() + + for group_name in ("ultimate_checkboxes", "service_checkboxes"): + group = getattr(self.parent_dialog, group_name, None) + if isinstance(group, list) and group and isinstance(group[0], QCheckBox): + values[group_name] = {cb.text(): cb.isChecked() for cb in group} + return values + def restore_values(self, data: dict): + """Restore previously saved checkbox groups and other values.""" + if not isinstance(data, dict): + return + + # Restore checkbox group states (Limit States) + for group_name in ("ultimate_checkboxes", "service_checkboxes"): + group_state = data.get(group_name) + group = getattr(self.parent_dialog, group_name, None) + if isinstance(group_state, dict) and isinstance(group, list): + for cb in group: + if cb.text() in group_state: + cb.setChecked(bool(group_state[cb.text()])) + + def reset_defaults(self): + """Reset Design Options (Cont.) fields to schema defaults.""" + for section in DESIGN_OPTIONS_CONT_SCHEMA.get("sections", []): + + # normal fields + for field in section.get("fields", []): + bind_name = field.get("bind") + default_value = field.get("default") + + if bind_name and default_value is not None and hasattr(self.parent_dialog, bind_name): + widget = getattr(self.parent_dialog, bind_name) + + from PySide6.QtWidgets import QLineEdit, QComboBox + + if isinstance(widget, QLineEdit): + widget.setText(str(default_value)) + elif isinstance(widget, QComboBox): + widget.setCurrentText(str(default_value)) + + # checkbox groups + for group in section.get("checkbox_groups", []): + bind_name = group.get("bind") + default_checked = group.get("default_checked", False) + + if bind_name and hasattr(self.parent_dialog, bind_name): + checkboxes = getattr(self.parent_dialog, bind_name) + for cb in checkboxes: + cb.setChecked(default_checked) + def validate_tab(self): + errors = [] + + widgets = self.findChildren(QLineEdit) + + for widget in widgets: + + if not widget.isVisible(): + continue + + text = widget.text().strip() + field_name = widget.objectName().replace("_", " ").title() + + if not text: + errors.append(f"{field_name} cannot be empty.") + continue + + validator = widget.validator() + + try: + value = float(text) + except ValueError: + errors.append(f"{field_name} must be a valid number.") + continue + + if isinstance(validator, (QDoubleValidator, QIntValidator)): + if value < validator.bottom() or value > validator.top(): + errors.append( + f"{field_name} must be between {validator.bottom()} and {validator.top()}." + ) + + return errors + def init_ui(self): #Changed Bg color self.setStyleSheet("background-color: #ffffff;") diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py index 8b1a23cb6..6143055cc 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py @@ -4,9 +4,10 @@ QFrame, QLabel, QScrollArea, + QLineEdit ) from PySide6.QtCore import Qt - +from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( DESIGN_OPTIONS_SCHEMA, ) @@ -38,6 +39,71 @@ def save_values(self): values[field_name] = widget.currentText() return values + def reset_defaults(self): + """Reset Design Options fields to schema defaults.""" + for card in DESIGN_OPTIONS_SCHEMA.get("cards", []): + for section in card.get("sections", []): + for field in section.get("fields", []): + bind_name = field.get("bind") + default_value = field.get("default") + + if bind_name and default_value is not None and hasattr(self.parent_dialog, bind_name): + widget = getattr(self.parent_dialog, bind_name) + + from PySide6.QtWidgets import QLineEdit, QComboBox + + if isinstance(widget, QLineEdit): + widget.setText(str(default_value)) + elif isinstance(widget, QComboBox): + widget.setCurrentText(str(default_value)) + + def validate_tab(self): + errors = [] + + widgets = self.findChildren(QLineEdit) + + for widget in widgets: + + if not widget.isVisible(): + continue + + text = widget.text().strip() + field_name = widget.objectName().replace("_", " ").title() + + if not text: + errors.append(f"{field_name} cannot be empty.") + continue + + validator = widget.validator() + + try: + value = float(text) + except ValueError: + errors.append(f"{field_name} must be a valid number.") + continue + + if isinstance(validator, (QDoubleValidator, QIntValidator)): + if value < validator.bottom() or value > validator.top(): + errors.append( + f"{field_name} must be between {validator.bottom()} and {validator.top()}." + ) + + if hasattr(self.parent_dialog, "shear_stud_diameter_combo") and hasattr(self.parent_dialog, "shear_stud_spacing_input"): + + try: + diameter = float(self.parent_dialog.shear_stud_diameter_combo.currentText()) + spacing = float(self.parent_dialog.shear_stud_spacing_input.text()) + + if spacing < 4 * diameter: + errors.append( + f"Shear Stud Spacing must be at least {4*diameter:.2f} mm for diameter {diameter:.2f} mm." + ) + + except ValueError: + pass + + return list(set(errors)) + def init_ui(self): # Changed Bg color self.setStyleSheet("background-color: #f5f5f5;") @@ -125,4 +191,46 @@ def init_ui(self): outer_layout = QVBoxLayout(self) outer_layout.setContentsMargins(0, 0, 0, 0) - outer_layout.addWidget(scroll) \ No newline at end of file + outer_layout.addWidget(scroll) + + self._connect_validations() + + def _connect_validations(self): + + if hasattr(self.parent_dialog, "shear_stud_diameter") and hasattr(self.parent_dialog, "shear_stud_spacing_input"): + + self.parent_dialog.shear_stud_diameter.currentTextChanged.connect( + self.validate_shear_stud_spacing + ) + + def validate_shear_stud_spacing(self): + spacing_widget = getattr(self.parent_dialog, "shear_stud_spacing_input", None) + + if not spacing_widget: + return + + text = spacing_widget.text().strip() + + if not text: + return + + try: + spacing = float(text) + except ValueError: + return + + validator = spacing_widget.validator() + + if validator: + bottom = validator.bottom() + top = validator.top() + + if spacing < bottom or spacing > top: + + from PySide6.QtWidgets import QMessageBox + + QMessageBox.warning( + self, + "Invalid Shear Stud Spacing", + f"Shear Stud Spacing must be between {bottom} and {top}.", + ) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py index 86306cfaf..e16e028e7 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py @@ -20,15 +20,25 @@ def save_values(self): if hasattr(self.parent_dialog, "bearing_length_input"): values["bearing_length"] = self.parent_dialog.bearing_length_input.text() return values - - def reset_defaults(self): - """Reset to default values.""" - if hasattr(self.parent_dialog, "left_support_combo"): - self.parent_dialog.left_support_combo.setCurrentText("Pinned") - if hasattr(self.parent_dialog, "right_support_combo"): - self.parent_dialog.right_support_combo.setCurrentText("Roller") + + def validate_tab(self): + errors = [] + if hasattr(self.parent_dialog, "bearing_length_input"): - self.parent_dialog.bearing_length_input.setText("400") + widget = self.parent_dialog.bearing_length_input + text = widget.text().strip() + + if not text: + errors.append("Bearing Length cannot be empty.") + else: + try: + value = float(text) + if value <= 0: + errors.append("Bearing Length must be greater than 0.") + except ValueError: + errors.append("Bearing Length must be a valid number.") + + return errors def init_ui(self): @@ -52,35 +62,49 @@ def init_ui(self): main_layout.setContentsMargins(12, 12, 12, 12) main_layout.setSpacing(12) - card = QFrame() - card.setObjectName("support_card") - card.setStyleSheet(""" - QFrame#support_card { - border: 1px solid #b2b2b2; - border-radius: 8px; - background-color: #ffffff; - } - /* this selector is even more specific than the app stylesheet */ - QFrame#support_card QLabel { - background: transparent; - border: none; - border-radius: 0; - padding: 0; - } - """) - - card_layout = QVBoxLayout(card) - card_layout.setContentsMargins(16, 16, 16, 16) - card_layout.setSpacing(12) + # create a separate card for each section defined in the schema + for section in SUPPORT_CONDITIONS_SCHEMA["sections"]: + card = QFrame() + card.setObjectName("support_card") + card.setStyleSheet(""" + QFrame#support_card { + border: 1px solid #b2b2b2; + border-radius: 8px; + background-color: #ffffff; + } + /* this selector is even more specific than the app stylesheet */ + QFrame#support_card QLabel { + background: transparent; + border: none; + border-radius: 0; + padding: 0; + } + """) - - self.parent_dialog._build_sections_from_schema( - card_layout, - SUPPORT_CONDITIONS_SCHEMA["sections"], - "font-size: 12px; font-weight: 700; color: #2b2b2b;", - "font-size: 11px; color: #3a3a3a;", - 160, - ) - - main_layout.addWidget(card) - main_layout.addStretch() \ No newline at end of file + card_layout = QVBoxLayout(card) + card_layout.setContentsMargins(16, 16, 16, 16) + card_layout.setSpacing(12) + + # build only the current section inside its own frame + self.parent_dialog._build_sections_from_schema( + card_layout, + [section], + "font-size: 12px; font-weight: 700; color: #2b2b2b;", + "font-size: 11px; color: #3a3a3a;", + 160, + ) + + main_layout.addWidget(card) + + main_layout.addStretch() + + def reset_defaults(self): + """Reset support conditions to default values.""" + if hasattr(self.parent_dialog, "left_support_combo"): + self.parent_dialog.left_support_combo.setCurrentText("Pinned") + + if hasattr(self.parent_dialog, "right_support_combo"): + self.parent_dialog.right_support_combo.setCurrentText("Roller") + + if hasattr(self.parent_dialog, "bearing_length_input"): + self.parent_dialog.bearing_length_input.setText("400") \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/utils/combobox_utils.py b/src/osdagbridge/desktop/ui/utils/combobox_utils.py new file mode 100644 index 000000000..a4b6584ef --- /dev/null +++ b/src/osdagbridge/desktop/ui/utils/combobox_utils.py @@ -0,0 +1,91 @@ +""" +Combobox UI utilities. + +Provides enhanced combobox views with: +- Greyed-out disabled items +- Smart cursor behaviour +- Better UX feedback for selectable vs non-selectable items +""" + +from PySide6.QtWidgets import QListView, QStyledItemDelegate +from PySide6.QtCore import Qt +from PySide6.QtGui import QColor + + +# ================================================================================= +# ITEM DELEGATE FOR DISABLED ITEMS +# ================================================================================= + +class ComboBoxItemDelegate(QStyledItemDelegate): + """ + Custom delegate to render disabled combobox items in grey. + + This improves UX by visually distinguishing disabled options + from selectable ones in dropdown lists. + """ + + def paint(self, painter, option, index): + model = index.model() + item = model.item(index.row()) if hasattr(model, "item") else None + + if item and not item.isEnabled(): + # Draw background normally + painter.fillRect(option.rect, option.palette.base()) + + # Draw disabled text in grey + painter.setPen(QColor(120, 120, 120)) + text = index.data() + painter.drawText( + option.rect, + Qt.AlignLeft | Qt.AlignVCenter, + f" {text}", + ) + else: + super().paint(painter, option, index) + + +# ================================================================================= +# SMART COMBOBOX VIEW +# ================================================================================= + +class SmartCursorComboBoxView(QListView): + """ + Custom QListView used inside QComboBox. + + Features: + - Shows pointing hand cursor for enabled items + - Shows forbidden cursor for disabled items + - Uses ComboBoxItemDelegate for grey rendering + """ + + def __init__(self, parent=None): + super().__init__(parent) + + # Apply custom delegate + self.setItemDelegate(ComboBoxItemDelegate()) + + def mouseMoveEvent(self, event): + """ + Update cursor depending on whether hovered item is enabled. + """ + index = self.indexAt(event.pos()) + + if index.isValid(): + model = index.model() + item = model.item(index.row()) if hasattr(model, "item") else None + + if item and not item.isEnabled(): + self.setCursor(Qt.ForbiddenCursor) + else: + self.setCursor(Qt.PointingHandCursor) + else: + self.setCursor(Qt.PointingHandCursor) + + super().mouseMoveEvent(event) + + def leaveEvent(self, event): + """ + Reset cursor when leaving the dropdown. + """ + self.setCursor(Qt.ArrowCursor) + super().leaveEvent(event) \ No newline at end of file From 59befca20853b5d74df9158c49985ee6640bdf6b Mon Sep 17 00:00:00 2001 From: Aditya Date: Mon, 16 Mar 2026 15:28:25 +0530 Subject: [PATCH 080/225] refactored analyser.py file --- .../bridge_types/plate_girder/analyser.py | 389 ++++++++++++++---- 1 file changed, 311 insertions(+), 78 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index abdfc9383..5af777f15 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -6,85 +6,145 @@ from osdagbridge.core.bridge_types.plate_girder.bridge_geometry import * from osdagbridge.core.bridge_types.plate_girder.load_placement import LoadPlacementManager import warnings +from dataclasses import dataclass from osdagbridge.core.bridge_types.plate_girder.analysis_results import PlateGirderAnalysisResults +@dataclass +class SectionProperties: + """ + Holds cross-section properties for a single grillage member. + + Attributes + ---------- + A : float + Cross-sectional area (m^2). + J : float + Torsional constant (m^3). + Iz : float + Second moment of area about z-axis (m^4). + Iy : float + Second moment of area about y-axis (m^4). + Az : float + Shear area in z-direction (m^2). + Ay : float + Shear area in y-direction (m^2). + """ + A: float + J: float + Iz: float + Iy: float + Az: float + Ay: float + + +@dataclass +class MaterialProperties: + """ + Holds custom material properties for a grillage member. + + Attributes + ---------- + material : str + Material type string (e.g. "steel", "concrete"). + E : float + Elastic modulus (Pa). + v : float + Poisson's ratio. + rho : float + Density (kN/m^3). + Fy : float, optional + Yield strength (Pa). Required for steel. + E0 : float, optional + Initial elastic modulus (Pa). Required for steel. + b : float, optional + Strain-hardening ratio. Required for steel. + """ + material: str + E: float + v: float + rho: float + Fy: float = None + E0: float = None + b: float = None + + +@dataclass +class GrillageGeometry: + """ + Holds grillage geometry and cross-section layout parameters. + + Attributes + ---------- + L : float + Bridge span length (m). + n_l : int + Number of longitudinal grid lines. + n_t : int + Number of transverse grid lines. + edge_dist : float + Edge beam distance / overhang (m). Use 0 for no overhang. + ext_to_int_dist : float + Distance from exterior to interior beam (m). + angle : float + Skew angle in degrees. Use 0 for a right bridge. + carriageway_width : float + Width of the carriageway (m). + crash_barrier_width : float + Width of each crash barrier (m). + footpath_width : float + Width of each footpath (m). + railing_width : float + Width of each railing (m). + median_width : float + Width of the median (m). Use 0 if no median. + no_of_footpaths : int + Number of footpaths. + """ + L: float + n_l: int + n_t: int + edge_dist: float + ext_to_int_dist: float + angle: float + carriageway_width: float + crash_barrier_width: float + footpath_width: float + railing_width: float + median_width: float + no_of_footpaths: int + + class BridgeGrillageModel: def __init__(self): # -------------------- MATERIALS -------------------- - self.concrete = og.create_material( - material="concrete", code="AS5100-2017", grade="65MPa" - ) - - self.concrete_custom = og.create_material( - material="concrete", E=50 * GPa, v=0.3, rho=24 * kN / m ** 3 - ) + # Materials are set via create_material() + self.steel_custom = None # -------------------- SECTIONS -------------------- - self.edge_longitudinal_section = og.create_section( - A=0.934 * m ** 2, - J=0.1857 * m ** 3, - Iz=0.3478 * m ** 4, - Iy=0.213602 * m ** 4, - Az=0.444795 * m ** 2, - Ay=0.258704 * m ** 2, - ) - - self.longitudinal_section = og.create_section( - A=1.025 * m ** 2, - J=0.1878 * m ** 3, - Iz=0.3694 * m ** 4, - Iy=0.3634 * m ** 4, - Az=0.4979 * m ** 2, - Ay=0.309 * m ** 2, - ) - - self.transverse_section = og.create_section( - A=0.504 * m ** 2, - J=5.22303e-3 * m ** 3, - Iy=0.32928 * m ** 4, - Iz=1.3608e-3 * m ** 4, - Ay=0.42 * m ** 2, - Az=0.42 * m ** 2, - unit_width=True, - ) - - self.end_transverse_section = og.create_section( - A=0.504 / 2 * m ** 2, - J=2.5012e-3 * m ** 3, - Iy=0.04116 * m ** 4, - Iz=0.6804e-3 * m ** 4, - Ay=0.21 * m ** 2, - Az=0.21 * m ** 2, - ) + # Sections are set via create_sections() + self.edge_longitudinal_section = None + self.longitudinal_section = None + self.transverse_section = None + self.end_transverse_section = None # -------------------- GRILLAGE MEMBERS -------------------- - self.longitudinal_beam = og.create_member( - section=self.longitudinal_section, material=self.concrete - ) - - self.edge_longitudinal_beam = og.create_member( - section=self.edge_longitudinal_section, material=self.concrete - ) - - self.transverse_slab = og.create_member( - section=self.transverse_section, material=self.concrete - ) - - self.end_transverse_slab = og.create_member( - section=self.end_transverse_section, material=self.concrete - ) + # Members are set via create_material() once sections and material are ready + self.longitudinal_beam = None + self.edge_longitudinal_beam = None + self.transverse_slab = None + self.end_transverse_slab = None # -------------------- GEOMETRY -------------------- - self.L = 33.5 * m - # self.w = 11.565 * m - self.n_l = 7 - self.n_t = 11 - self.edge_dist = 0 * m - self.ext_to_int_dist = 2.2775 * m - self.angle = 0 + # Geometry is set via set_geometry() + self.L = None + self.n_l = None + self.n_t = None + self.edge_dist = None + self.ext_to_int_dist = None + self.angle = None # placeholder for model self.model = None @@ -103,33 +163,143 @@ def __init__(self): self.load_manager = None # ============================================================ - # CREATE THE GRILLAGE MODEL + # SET GEOMETRY # ============================================================ - def create_model(self): + def set_geometry(self, geometry: GrillageGeometry): + """ + Sets grillage geometry and builds the cross-section layout and bridge + geometry from user-supplied GrillageGeometry. + + Parameters + ---------- + geometry : GrillageGeometry + Geometry parameters supplied by the user. + """ + self.L = geometry.L + self.n_l = geometry.n_l + self.n_t = geometry.n_t + self.edge_dist = geometry.edge_dist + self.ext_to_int_dist = geometry.ext_to_int_dist + self.angle = geometry.angle # ------------------------------------------------- - # Create cross-section layout (UI inputs) + # Cross-section layout # ------------------------------------------------- self.layout = CrossSectionLayout( - carriageway_width=10.0, # TODO: get from UI - crash_barrier_width=0.45, # TODO: get from UI - footpath_width=1.50, # TODO: get from UI - railing_width=0.30, # TODO: get from UI - median_width=0.0, # TODO: get from UI - no_of_footpaths=2, # TODO: get from UI + carriageway_width=geometry.carriageway_width, + crash_barrier_width=geometry.crash_barrier_width, + footpath_width=geometry.footpath_width, + railing_width=geometry.railing_width, + median_width=geometry.median_width, + no_of_footpaths=geometry.no_of_footpaths, ) # ------------------------------------------------- - # Bridge geometry (width from layout) + # Bridge geometry (width derived from layout) # ------------------------------------------------- self.bridge_geometry = BridgeGeometry( span=self.L, - width=self.layout.total_width + width=self.layout.total_width, ) print(f"Bridge width from layout: {self.layout.total_width} m") self.layout.validate_against_bridge(self.bridge_geometry.width) + # ============================================================ + # CREATE SECTIONS + # ============================================================ + def create_sections(self, + longitudinal: SectionProperties, + edge_longitudinal: SectionProperties, + transverse: SectionProperties, + end_transverse: SectionProperties): + """ + Creates all four grillage sections from user-supplied SectionProperties. + + Parameters + ---------- + longitudinal : SectionProperties + Properties for the interior longitudinal beam. + edge_longitudinal : SectionProperties + Properties for the edge longitudinal beam. + transverse : SectionProperties + Properties for the transverse slab (unit_width=True). + end_transverse : SectionProperties + Properties for the end transverse slab. + """ + self.longitudinal_section = og.create_section( + A=longitudinal.A, + J=longitudinal.J, + Iz=longitudinal.Iz, + Iy=longitudinal.Iy, + Az=longitudinal.Az, + Ay=longitudinal.Ay, + ) + + self.edge_longitudinal_section = og.create_section( + A=edge_longitudinal.A, + J=edge_longitudinal.J, + Iz=edge_longitudinal.Iz, + Iy=edge_longitudinal.Iy, + Az=edge_longitudinal.Az, + Ay=edge_longitudinal.Ay, + ) + + self.transverse_section = og.create_section( + A=transverse.A, + J=transverse.J, + Iy=transverse.Iy, + Iz=transverse.Iz, + Ay=transverse.Ay, + Az=transverse.Az, + unit_width=True, + ) + + self.end_transverse_section = og.create_section( + A=end_transverse.A, + J=end_transverse.J, + Iy=end_transverse.Iy, + Iz=end_transverse.Iz, + Ay=end_transverse.Ay, + Az=end_transverse.Az, + ) + + # ============================================================ + # CREATE MATERIAL + # ============================================================ + def create_material(self, props: MaterialProperties): + """ + Creates a custom material and assigns it to all grillage members. + + Parameters + ---------- + props : MaterialProperties + Material properties supplied by the user. + """ + self.steel_custom = og.create_material( + material=props.material, E=props.E, v=props.v, rho=props.rho, + Fy=props.Fy, E0=props.E0, b=props.b + ) + + # Re-assign members now that material is defined + self.longitudinal_beam = og.create_member( + section=self.longitudinal_section, material=self.steel_custom + ) + self.edge_longitudinal_beam = og.create_member( + section=self.edge_longitudinal_section, material=self.steel_custom + ) + self.transverse_slab = og.create_member( + section=self.transverse_section, material=self.steel_custom + ) + self.end_transverse_slab = og.create_member( + section=self.end_transverse_section, material=self.steel_custom + ) + + # ============================================================ + # CREATE THE GRILLAGE MODEL + # ============================================================ + def create_model(self): + # ------------------------------------------------- # Load placement manager # ------------------------------------------------- @@ -1148,6 +1318,70 @@ def plot(self, model=None): # ============================================================ if __name__ == "__main__": bridge = BridgeGrillageModel() + + # --- Test geometry values (replace with UI inputs later) --- + bridge.set_geometry(GrillageGeometry( + L=33.5 * m, + n_l=7, + n_t=11, + edge_dist=0 * m, + ext_to_int_dist=2.2775 * m, + angle=0, + carriageway_width=10.0 * m, + crash_barrier_width=0.45 * m, + footpath_width=1.50 * m, + railing_width=0.30 * m, + median_width=0.0 * m, + no_of_footpaths=2, + )) + + # --- Test section values (replace with UI inputs later) --- + bridge.create_sections( + longitudinal=SectionProperties( + A=1.025 * m ** 2, + J=0.1878 * m ** 3, + Iz=0.3694 * m ** 4, + Iy=0.3634 * m ** 4, + Az=0.4979 * m ** 2, + Ay=0.309 * m ** 2, + ), + edge_longitudinal=SectionProperties( + A=0.934 * m ** 2, + J=0.1857 * m ** 3, + Iz=0.3478 * m ** 4, + Iy=0.213602 * m ** 4, + Az=0.444795 * m ** 2, + Ay=0.258704 * m ** 2, + ), + transverse=SectionProperties( + A=0.504 * m ** 2, + J=5.22303e-3 * m ** 3, + Iz=1.3608e-3 * m ** 4, + Iy=0.32928 * m ** 4, + Az=0.42 * m ** 2, + Ay=0.42 * m ** 2, + ), + end_transverse=SectionProperties( + A=0.504 / 2 * m ** 2, + J=2.5012e-3 * m ** 3, + Iz=0.6804e-3 * m ** 4, + Iy=0.04116 * m ** 4, + Az=0.21 * m ** 2, + Ay=0.21 * m ** 2, + ), + ) + + # --- Test material values (replace with UI inputs later) --- + bridge.create_material(MaterialProperties( + material="steel", + E=200 * GPa, + v=0.3, + rho=78.5 * kN / m ** 3, + Fy=250 * MPa, + E0=200 * GPa, + b=0.01, + )) + bridge.create_model() # bridge.plot_model() # bridge.add_dead_loads() @@ -1175,5 +1409,4 @@ def plot(self, model=None): # result_handler.debug_loadcase_detection() result_handler.run_interactive_viewer() - # result_handler.print_moving_load_trace() - + # result_handler.print_moving_load_trace() \ No newline at end of file From 4c7054a3b5c931ea293daab8b73a7397969a884e Mon Sep 17 00:00:00 2001 From: Garvit Singh Rathore Date: Wed, 25 Mar 2026 12:55:57 +0530 Subject: [PATCH 081/225] feat: loading v2 (validation, UI, DB integration, fixes) --- .../ui_fields_additional_input.py | 269 +++------ .../desktop/ui/dialogs/additional_inputs.py | 109 ++-- .../ui/dialogs/tabs/custom_vehicle_dialog.py | 538 +++++++++++++++--- .../desktop/ui/dialogs/tabs/loading_tab.py | 225 +++++++- .../tabs/sub_tabs/loading/custom_load_tab.py | 117 ++-- .../tabs/sub_tabs/loading/live_load_tab.py | 74 ++- .../sub_tabs/loading/load_combination_tab.py | 226 +++++--- .../sub_tabs/loading/permanent_load_tab.py | 16 - .../tabs/sub_tabs/loading/seismic_load_tab.py | 41 +- .../sub_tabs/loading/temperature_load_tab.py | 27 +- .../tabs/sub_tabs/loading/wind_load_tab.py | 27 +- .../desktop/ui/docks/input_dock.py | 5 + 12 files changed, 1195 insertions(+), 479 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py index cc5c8590e..fbb5fdb5e 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py @@ -426,74 +426,16 @@ "label_width": 220, "sections": [ { - "title": "Dead Load (DL):", + "title": "Dead Load (DL)", "fields": [ - { - "id": "include_self_weight", - "label": "Include Member Self Weight:", - "type": "combo", - "choices": ["Yes", "No"], - "default": "Yes", - "bind": "include_self_weight_combo", - }, { "id": "self_weight_factor", - "label": "Self-weight factor:", + "label": "Self-weight modification factor", "type": "line", "validator": {"type": "double_range", "bottom": 0.0, "top": 10.0, "decimals": 2}, "default": "1.00", "bind": "self_weight_factor_input", }, - { - "id": "include_deck_weight", - "label": "Include Concrete Deck Weight:", - "type": "combo", - "choices": ["Yes", "No"], - "default": "Yes", - "bind": "include_deck_weight_combo", - }, - ], - }, - { - "title": "Dead Load for Surfacing (DW):", - "fields": [ - { - "id": "include_wearing_course", - "label": "Include Load from Wearing Course:", - "type": "combo", - "choices": ["Yes", "No"], - "default": "Yes", - "bind": "include_wearing_course_combo", - }, - ], - }, - { - "title": "Super-Imposed Dead Load (SIDL):", - "fields": [ - { - "id": "include_crash_barrier", - "label": "Include Load from Crash Barrier:", - "type": "combo", - "choices": ["Yes", "No"], - "default": "Yes", - "bind": "include_crash_barrier_combo", - }, - { - "id": "include_median", - "label": "Include Load from Median:", - "type": "combo", - "choices": ["Yes", "No"], - "default": "Yes", - "bind": "include_median_combo", - }, - { - "id": "include_railing", - "label": "Include Load from Railing:", - "type": "combo", - "choices": ["Yes", "No"], - "default": "Yes", - "bind": "include_railing_combo", - }, ], }, ], @@ -507,7 +449,7 @@ "sections": [ { "id": "irc_vehicles_section", - "title": "Vehicles from IRC 6:", + "title": "Vehicles from IRC 6", "type": "checkbox_list", "items": [ "Class A", @@ -516,28 +458,28 @@ "Class AA Wheeled", "Class AA Tracked", "Class SV", - "Fatigue Truck", + "Class 70R Bogie", ], "bind": "irc_vehicle_checkboxes", "default_checked": True, }, { "id": "custom_vehicle_section", - "title": "Custom Vehicle:", + "title": "Custom Vehicle", "type": "custom_vehicle_table", "bind": "custom_vehicle_table", "add_button_bind": "custom_vehicle_add_button", }, { "id": "braking_section", - "title": "Braking Load from Vehicles:", + "title": "Braking Load from Vehicles", "type": "dynamic_checkbox_list", "bind": "braking_vehicle_checkboxes", "default_checked": True, }, { "id": "eccentricity", - "label": "Eccentricity from top of Deck (m):", + "label": "Eccentricity from top of Deck (m)", "type": "line", "validator": {"type": "double_range", "bottom": 0.0, "top": 100.0, "decimals": 2}, "default": "0.00", @@ -545,7 +487,7 @@ }, { "id": "footpath_pressure", - "label": "Footpath Pressure (kN/mm²):", + "label": "Footpath Pressure (kN/mm²)", "type": "mode_line", "mode_choices": ["Automatic", "User-defined"], "default_mode": "Automatic", @@ -560,7 +502,7 @@ "description": { "title": "Description Box", "text": ( - "or on any other type of bridge unit shall be assumed to have the following value:\n\n" + "211.2 The braking effect on a simply supported span or a continuous unit of spans or on any other type of bridge unit shall be assumed to have the following value:\n\n" "a) In the case of a single lane or a two lane bridge: twenty percent of the first train " "load plus ten percent of the load of the succeeding trains or part thereof, the train " "loads in one lane only being considered for the purpose of this subclause. Where the " @@ -580,27 +522,25 @@ "sections": [ { "id": "seismic_inputs_section", - "title": "Seismic/Earthquake Load (EL) Inputs:", + "title": "Seismic/Earthquake Load (EL) Inputs", "type": "input_group", "fields": [ { "id": "seismic_zone", - "label": "Seismic Zone:", - "type": "combo", - "choices": ["II", "III", "IV", "V"], - "default": "II", + "label": "Seismic Zone", + "type": "line", "bind": "seismic_zone_combo", }, { "id": "importance_factor", - "label": "Importance Factor:", + "label": "Importance Factor, I", "type": "line", "default": "1.0", "bind": "importance_factor_input", }, { "id": "soil_type", - "label": "Type of Soil:", + "label": "Type of Soil", "type": "combo", "choices": [ "Type I – Rocky or Hard", @@ -612,20 +552,20 @@ }, { "id": "time_period", - "label": "Time Period:", + "label": "Fundamental Time Period, T (sec)", "type": "line", "bind": "time_period_input", }, { "id": "damping", - "label": "Damping Percentage:", + "label": "Damping Percentage", "type": "line", "default": "2", "bind": "damping_input", }, { "id": "response_reduction_factor", - "label": "Response Reduction Factor:", + "label": "Response Reduction Factor, R", "type": "combo", "choices": ["1", "2", "3", "4", "5"], "default": "1", @@ -633,7 +573,7 @@ }, { "id": "dead_load_seismic", - "label": "Dead Load for Seismic Force (kN):", + "label": "Dead Load for Seismic Force (kN)", "type": "mode_line", "mode_choices": ["Automatic", "Custom"], "default_mode": "Automatic", @@ -644,7 +584,7 @@ }, { "id": "live_load_seismic", - "label": "Live Load for Seismic Force (kN):", + "label": "Live Load for Seismic Force (kN)", "type": "mode_line", "mode_choices": ["Automatic", "Custom"], "default_mode": "Automatic", @@ -662,25 +602,25 @@ "fields": [ { "id": "zone_factor", - "label": "Zone Factor:", + "label": "Zone Factor, Z", "type": "computed", "bind": "zone_factor", }, { "id": "spectral_coeff", - "label": "Spectral Acceleration Coefficient:", + "label": "Spectral Acceleration Coefficient, Sa/g", "type": "computed", "bind": "spectral_coeff", }, { "id": "horizontal_coeff", - "label": "Horizontal Seismic Coefficient:", + "label": "Horizontal Seismic Coefficient, Ah", "type": "computed", "bind": "horizontal_coeff", }, { "id": "vertical_coeff", - "label": "Vertical Seismic Coefficient:", + "label": "Vertical Seismic Coefficient, Av", "type": "computed", "bind": "vertical_coeff", }, @@ -690,9 +630,9 @@ "description": { "title": "Description Box", "text": ( - "Importance factor for normal, important, and critical bridges.\n\n" - "Seismic zone factors are defined according to IRC 6 specifications.\n\n" - "The spectral acceleration coefficient depends on soil type and time period." + "Seismic Zone is auto-filled from software output (project location).\n\n" + "The spectral acceleration coefficient depends on soil type and " + "fundamental time period, T.\n\n" ), }, } @@ -705,18 +645,20 @@ "sections": [ { "id": "wind_inputs_section", - "title": "Wind Load (WL) Inputs:", + "title": "Wind Load (WL) Inputs", "type": "input_group", "fields": [ { "id": "basic_wind_speed", - "label": "Basic Wind Speed (m/s):", + "label": "Basic Wind Speed, Vb (m/s)", "type": "line", + "read_only": True, + "enabled": False, "bind": "basic_wind_speed_input", }, { "id": "avg_exposed_height", - "label": "Average Exposed Height (m):", + "label": "Average Exposed Height, H (m)", "type": "line", "default": "10", "placeholder": "10", @@ -724,15 +666,15 @@ }, { "id": "terrain_type", - "label": "Type of Terrain:", + "label": "Type of Terrain", "type": "combo", - "choices": ["Plain Terrain", "Terrain with Obstructions"], + "choices": ["Plain Terrain", "Terrain with \nObstructions"], "default": "Plain Terrain", "bind": "terrain_type_combo", }, { "id": "site_topography", - "label": "Site Topography:", + "label": "Site Topography", "type": "combo", "choices": ["Flat", "Hill, ridge, escarpment or cliff"], "default": "Flat", @@ -740,10 +682,10 @@ }, { "id": "gust_factor", - "label": "Gust Factor, G:", + "label": "Gust Factor, G", "type": "mode_line", - "mode_choices": ["Automatic", "Custom"], - "default_mode": "Automatic", + "mode_choices": ["As per Code", "Custom"], + "default_mode": "As per Code", "bind_mode": "gust_factor_combo", "bind_value": "gust_factor_value", "default_value": "2", @@ -752,10 +694,10 @@ }, { "id": "drag_coeff", - "label": "Drag Coefficient, CD:", + "label": "Drag Coefficient, CD", "type": "mode_line", - "mode_choices": ["Automatic", "Custom"], - "default_mode": "Automatic", + "mode_choices": ["As per Code", "Custom"], + "default_mode": "As per Code", "bind_mode": "drag_coeff_combo", "bind_value": "drag_coeff_value", "placeholder": "Custom Value", @@ -763,10 +705,10 @@ }, { "id": "drag_coeff_ll", - "label": "Drag Coefficient against Live Load, CDLL:", + "label": "Drag Coefficient against Live Load, CDLL", "type": "mode_line", - "mode_choices": ["Automatic", "Custom"], - "default_mode": "Automatic", + "mode_choices": ["As per Code", "Custom"], + "default_mode": "As per Code", "bind_mode": "drag_coeff_ll_combo", "bind_value": "drag_coeff_ll_value", "default_value": "1.2", @@ -775,10 +717,10 @@ }, { "id": "lift_coeff", - "label": "Lift Coefficient, CL:", + "label": "Lift Coefficient, CL", "type": "mode_line", - "mode_choices": ["Automatic", "Custom"], - "default_mode": "Automatic", + "mode_choices": ["As per Code", "Custom"], + "default_mode": "As per Code", "bind_mode": "lift_coeff_combo", "bind_value": "lift_coeff_value", "default_value": "0.75", @@ -787,7 +729,7 @@ }, { "id": "super_area_elev", - "label": "Superstructure Area in Elevation (m²):", + "label": "Superstructure Area in Elevation, A1 (m²)", "type": "mode_line", "mode_choices": ["Automatic", "Custom"], "default_mode": "Automatic", @@ -798,7 +740,7 @@ }, { "id": "super_area_plain", - "label": "Superstructure Area in Plain (m²):", + "label": "Superstructure Area in Plain, A3 (m²)", "type": "mode_line", "mode_choices": ["Automatic", "Custom"], "default_mode": "Automatic", @@ -809,7 +751,7 @@ }, { "id": "exposed_frontal_area", - "label": "Exposed Frontal Area of Live Load (m²):", + "label": "Exposed Frontal Area of Live Load, A1LL (m²)", "type": "mode_line", "mode_choices": ["Automatic", "Custom"], "default_mode": "Automatic", @@ -820,10 +762,10 @@ }, { "id": "wind_ecc_deck", - "label": "Wind Load Eccentricity from Top of Deck (m):", + "label": "Wind Load Eccentricity from \nTop of Deck (m)", "type": "mode_line", - "mode_choices": ["Automatic", "Custom"], - "default_mode": "Automatic", + "mode_choices": ["As per Code", "Custom"], + "default_mode": "As per Code", "bind_mode": "wind_ecc_deck_combo", "bind_value": "wind_ecc_deck_value", "placeholder": "Custom Value", @@ -831,10 +773,10 @@ }, { "id": "wind_ll_ecc", - "label": "Wind on Live Load Eccentricity from Top of Deck (m):", + "label": "Wind on Live Load Eccentricity from \nTop of Deck (m)", "type": "mode_line", - "mode_choices": ["Automatic", "Custom"], - "default_mode": "Automatic", + "mode_choices": ["As per Code", "Custom"], + "default_mode": "As per Code", "bind_mode": "wind_ll_ecc_combo", "bind_value": "wind_ll_ecc_value", "placeholder": "Custom Value", @@ -849,43 +791,43 @@ "fields": [ { "id": "hourly_mean_wind", - "label": "Hourly Mean Wind Speed (m/s):", + "label": "Hourly Mean Wind Speed, Vz (m/s)", "type": "computed", "bind": "hourly_mean_wind", }, { "id": "hourly_wind_pressure", - "label": "Hourly Wind Pressure N/m²:", + "label": "Hourly Wind Pressure, Pz (N/m²)", "type": "computed", "bind": "hourly_wind_pressure", }, { "id": "transverse_wind_force", - "label": "Transverse Wind Force N:", + "label": "Transverse Wind Force, FT (N)", "type": "computed", "bind": "transverse_wind_force", }, { "id": "longitudinal_wind_force", - "label": "Longitudinal Wind Force N:", + "label": "Longitudinal Wind Force, FL (N)", "type": "computed", "bind": "longitudinal_wind_force", }, { "id": "vertical_wind_force", - "label": "Vertical Wind Force N:", + "label": "Vertical Wind Force, FV (N)", "type": "computed", "bind": "vertical_wind_force", }, { "id": "transverse_wind_ll", - "label": "Transverse Wind Force on Live Load N:", + "label": "Transverse Wind Force on Live Load, FTLL (N)", "type": "computed", "bind": "transverse_wind_ll", }, { "id": "longitudinal_wind_ll", - "label": "Longitudinal Wind Force on Live Load N:", + "label": "Longitudinal Wind Force on Live Load, FLLL (N)", "type": "computed", "bind": "longitudinal_wind_ll", }, @@ -895,10 +837,7 @@ "description": { "title": "Description Box", "text": ( - "Wind load calculations per IRC 6 specifications.\n\n" - "The basic wind speed should be obtained from relevant meteorological data.\n\n" - "Gust factor accounts for wind fluctuations.\n\n" - "Note: Wind load eccentricity values should be negative for positions below the deck." + "Basic Wind Speed is auto-filled from software output (project location).\n\n" ), }, } @@ -915,35 +854,37 @@ "fields": [ { "id": "highest_max_temp", - "label": "Highest Maximum Air Temperature\n(°C):", + "label": "Highest Maximum Air Temperature (°C)", "type": "line", "placeholder": "From Project Location", "bind": "highest_max_temp_input", "validator": {"type": "double_range", "bottom": -50.0, "top": 100.0, "decimals": 2}, + "enabled": False, }, { "id": "lowest_min_temp", - "label": "Lowest Minimum Air Temperature\n(°C):", + "label": "Lowest Minimum Air Temperature (°C)", "type": "line", "placeholder": "From Project Location", "bind": "lowest_min_temp_input", "validator": {"type": "double_range", "bottom": -50.0, "top": 100.0, "decimals": 2}, + "enabled": False, }, { "id": "thermal_coeff_steel", - "label": "Coefficient of Thermal Expansion for Steel\n(1/°C):", + "label": "Coefficient of Thermal Expansion for Steel (1/°C)", "type": "line", "default": "12.0e-6", "bind": "thermal_coeff_steel_input", - "validator": {"type": "double_range", "bottom": 0.0, "top": 1.0, "decimals": 8}, + "validator": {"type": "double_range", "bottom": 0.0, "top": 1.0, "decimals": 8, "notation": "scientific"}, }, { "id": "thermal_coeff_rcc", - "label": "Coefficient of Thermal Expansion for RCC\n(1/°C):", + "label": "Coefficient of Thermal Expansion for RCC (1/°C)", "type": "line", "default": "12.0e-6", "bind": "thermal_coeff_rcc_input", - "validator": {"type": "double_range", "bottom": 0.0, "top": 1.0, "decimals": 8}, + "validator": {"type": "double_range", "bottom": 0.0, "top": 1.0, "decimals": 8, "notation": "scientific"}, }, ], }, @@ -954,14 +895,14 @@ "fields": [ { "id": "bridge_temp_min", - "label": "Minimum (°C):", + "label": "Minimum (°C)", "type": "line", "read_only": True, "bind": "bridge_temp_min_input", }, { "id": "bridge_temp_max", - "label": "Maximum (°C):", + "label": "Maximum (°C)", "type": "line", "read_only": True, "bind": "bridge_temp_max_input", @@ -970,19 +911,19 @@ }, { "id": "temp_design_section", - "title": "Temperature for Design:", + "title": "Temperature for Design", "type": "output_group", "fields": [ { "id": "temp_rise", - "label": "Rise (°C):", + "label": "Rise (°C)", "type": "line", "read_only": True, "bind": "temp_rise_input", }, { "id": "temp_fall", - "label": "Fall (°C):", + "label": "Fall (°C)", "type": "line", "read_only": True, "bind": "temp_fall_input", @@ -1003,7 +944,7 @@ "fields": { "load_case": { "id": "custom_load_case", - "label": "Load Case:", + "label": "Load Case", "type": "combo", "bind": "custom_load_case_combo", }, @@ -1011,26 +952,26 @@ "id": "custom_load_case_name", "label": "", # Hidden label, uses spacer "type": "line", - "placeholder": "custom", + "placeholder": "Custom", "bind": "custom_load_case_name_input", "enabled": False, }, "load_type": { "id": "custom_load_type", - "label": "Load Type:", + "label": "Load Type", "type": "combo", "bind": "custom_load_type_combo", }, "point_left": { "id": "custom_point_left", - "label": "Distance from Left Edge of Bridge (m):", + "label": "Distance from Left Edge of Bridge (m)", "type": "line", "bind": "custom_point_left_input", "validator": {"type": "double_range", "bottom": 0.0, "top": 1000.0, "decimals": 3}, }, "point_bearing": { "id": "custom_point_bearing", - "label": "Distance from Center Line of Bearing (m):", + "label": "Distance from Center Line of Bearing (m)", "type": "line", "bind": "custom_point_bearing_input", "validator": {"type": "double_range", "bottom": -1000.0, "top": 1000.0, "decimals": 3}, @@ -1075,46 +1016,20 @@ LOAD_COMBINATION_TAB_SCHEMA = { "id": "load_combination_tab", "label_width": 280, - "rows": [ - { - "fields": [ - { - "id": "auto_include_irc6", - "label": "Auto include all IRC 6 Load Combinations", - "type": "checkbox", - "bind": "auto_include_checkbox", - } - ] - }, - ], - "controls": [ - { - "id": "add", - "label": "Add", - "type": "button", - "bind": "load_combo_add_btn", - "width": 60, - }, - { - "id": "edit", - "label": "Edit", - "type": "button", - "bind": "load_combo_edit_btn", - "width": 60, - }, + "sections": [ { - "id": "delete", - "label": "Delete", - "type": "button", - "bind": "load_combo_delete_btn", - "width": 60, + "id": "irc_load_combos_section", + "title": "Load Combinations from IRC 6", + "type": "dynamic_checkbox_list", + "bind": "irc_load_combos_checkboxes", + "default_checked": False, }, { - "id": "default", - "label": "Default", - "type": "button", - "bind": "load_combo_default_btn", - "width": 60, + "id": "custom_load_combo_section", + "title": "Custom Load Combination", + "type": "custom_load_combo_table", + "bind": "custom_load_combo_table", + "add_button_bind": "load_combo_add_btn", }, ], } diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 10c300920..9706799be 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -1,4 +1,4 @@ -""" +""" Additional Inputs Widget for Highway Bridge Design Provides detailed input fields for manual bridge parameter definition """ @@ -15,6 +15,7 @@ from osdagbridge.core.utils.common import * from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style, create_action_button_bar +from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.desktop.ui.dialogs.tabs.typical_section_details import TypicalSectionDetailsTab, show_warning from osdagbridge.desktop.ui.dialogs.tabs.section_properties_tab import SectionPropertiesTab from osdagbridge.desktop.ui.dialogs.tabs.loading_tab import LoadingTab @@ -68,6 +69,7 @@ def _save_inputs(self): errors = [] for tab in [ + self.loading_tab, self.support_tab, self.design_options_tab, self.design_options_cont_tab, @@ -112,56 +114,24 @@ def _save_inputs(self): self._last_saved_data = saved - box = QMessageBox(self) - box.setIcon(QMessageBox.Information) - box.setWindowTitle("Saved") - box.setText("Inputs saved successfully.") - box.setStandardButtons(QMessageBox.Ok) - box.setDefaultButton(QMessageBox.Ok) - box.setWindowModality(Qt.ApplicationModal) - - box.setStyleSheet(""" - QMessageBox { - background-color: #ffffff; - } - - QMessageBox QLabel { - color: #2b2b2b; - font-size: 12px; - } - """) - - box.exec() + CustomMessageBox( + title="Saved", + text="Inputs saved successfully.", + buttons=["OK"], + dialogType=MessageBoxType.Success, + ).exec() # self.accept() def _show_validation_errors(self, errors): message = "\n\n".join(f"• {err}" for err in errors) - msg = QMessageBox(self) - msg.setIcon(QMessageBox.Warning) - msg.setWindowTitle("Validation Errors") - msg.setText(message) - - msg.setStyleSheet(""" - QMessageBox { - background-color: #ffffff; - } - QMessageBox QLabel { - color: #b00020; - font-size: 12px; - } - QMessageBox QPushButton { - background-color: #f0f0f0; - color: #000000; - border: 1px solid #888888; - border-radius: 4px; - padding: 6px 20px; - min-width: 80px; - } - """) - - msg.exec() + CustomMessageBox( + title="Validation Errors", + text=message, + buttons=["OK"], + dialogType=MessageBoxType.Warning, + ).exec() def _collect_all_values(self): """Collect values from all bound widgets across all tabs.""" @@ -302,13 +272,20 @@ def _enforce_decimal_places(self, places=2): for line_edit in self.findChildren(QLineEdit): validator = line_edit.validator() if isinstance(validator, QDoubleValidator): - validator.setDecimals(places) - validator.setNotation(QDoubleValidator.StandardNotation) + # Only enforce standard notation decimals if it's not explicitly scientific + if validator.notation() != QDoubleValidator.ScientificNotation: + validator.setDecimals(places) + validator.setNotation(QDoubleValidator.StandardNotation) def _normalize_numeric_texts(self, places=2): """Format any numeric QLineEdit text to the specified decimal places.""" fmt = f"{{:.{places}f}}" for line_edit in self.findChildren(QLineEdit): + # Skip fields with scientific validators + validator = line_edit.validator() + if isinstance(validator, QDoubleValidator) and validator.notation() == QDoubleValidator.ScientificNotation: + continue + text = line_edit.text().strip() if not text: continue @@ -577,6 +554,18 @@ def update_footpath_value(self, footpath_value): self.footpath_value = footpath_value self.typical_section_tab.update_footpath_value(footpath_value) + def update_project_location(self, location_data): + """Update dependent tabs when project location changes""" + if hasattr(self, "loading_tab"): + if hasattr(self.loading_tab, "temperature_load_tab") and hasattr(self.loading_tab.temperature_load_tab, "update_project_location"): + self.loading_tab.temperature_load_tab.update_project_location(location_data) + + if hasattr(self.loading_tab, "seismic_load_tab") and hasattr(self.loading_tab.seismic_load_tab, "update_project_location"): + self.loading_tab.seismic_load_tab.update_project_location(location_data) + + if hasattr(self.loading_tab, "wind_load_tab") and hasattr(self.loading_tab.wind_load_tab, "update_project_location"): + self.loading_tab.wind_load_tab.update_project_location(location_data) + def set_member_properties_editable(self, editable: bool) -> None: self._member_properties_editable = bool(editable) if hasattr(self, "section_properties_tab") and self.section_properties_tab is not None: @@ -586,12 +575,12 @@ def set_member_properties_editable(self, editable: bool) -> None: pass def _show_placeholder_message(self, action_name): - box = QMessageBox(self) - box.setIcon(QMessageBox.Information) - box.setWindowTitle("Coming soon") - box.setText(f"{action_name} action not implemented yet.") - box.setStandardButtons(QMessageBox.Ok) - box.exec() + CustomMessageBox( + title="Coming soon", + text=f"{action_name} action not implemented yet.", + buttons=["OK"], + dialogType=MessageBoxType.Information, + ).exec() def _on_top_tab_changed(self, index: int) -> None: if index < 0: @@ -608,14 +597,12 @@ def _on_top_tab_changed(self, index: int) -> None: try: if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "has_unsaved_changes"): if self.section_properties_tab.has_unsaved_changes(): - box = QMessageBox(self) - box.setIcon(QMessageBox.Warning) - box.setWindowTitle("Unsaved Inputs") - box.setText("Please save Member Properties before switching tabs.") - box.setStandardButtons(QMessageBox.Ok) - box.setDefaultButton(QMessageBox.Ok) - box.setWindowModality(Qt.ApplicationModal) - box.exec() + CustomMessageBox( + title="Unsaved Inputs", + text="Please save Member Properties before switching tabs.", + buttons=["OK"], + dialogType=MessageBoxType.Warning, + ).exec() prev = self.tabs.blockSignals(True) self.tabs.setCurrentIndex(previous) self.tabs.blockSignals(prev) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py b/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py index 07859e9c3..5deabbb98 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/custom_vehicle_dialog.py @@ -1,42 +1,67 @@ -"""Auto-generated tab module extracted from additional_inputs.""" -import sys -import os +"""Dialog for adding or editing custom live load vehicles.""" + +from PySide6.QtCore import Qt +from PySide6.QtGui import QDoubleValidator from PySide6.QtWidgets import ( - QWidget, QVBoxLayout, QHBoxLayout, QTabWidget, QTabBar, QLabel, QLineEdit, - QComboBox, QGroupBox, QFormLayout, QPushButton, QScrollArea, - QCheckBox, QMessageBox, QSizePolicy, QSpacerItem, QStackedWidget, - QFrame, QGridLayout, QTableWidget, QTableWidgetItem, QHeaderView, - QTextEdit, QDialog, QSizePolicy, QSizeGrip + QComboBox, + QDialog, + QGridLayout, + QHBoxLayout, + QHeaderView, + QLabel, + QLineEdit, + QMessageBox, + QPushButton, + QStackedWidget, + QTableWidget, + QTableWidgetItem, + QVBoxLayout, + QWidget, ) -from PySide6.QtCore import Qt, Signal, QSize -from PySide6.QtGui import QDoubleValidator, QIntValidator - -from osdagbridge.core.utils.common import * -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar class CustomVehicleDialog(QDialog): """Dialog for adding or editing custom live load vehicles""" def __init__(self, parent=None): super().__init__(parent) + self.vehicle_data = None + self._selected_axle_row = None self.setWindowTitle("Live Load Custom Vehicle Add/Edit") + self.setObjectName("custom_vehicle_dialog") self.setModal(True) - self.setMinimumWidth(420) - self.setMinimumHeight(500) + self.resize(640, 580) + self.setMinimumSize(620, 560) + self.setMaximumSize(16777215, 16777215) self.setStyleSheet(""" - QDialog { background-color: #ffffff; } - QLabel { color: #2b2b2b; font-size: 11px; background: transparent; } - QLineEdit { - background-color: #ffffff; - border: 1px solid #8a8a8a; - border-radius: 4px; - padding: 4px 8px; - min-height: 24px; + QDialog#custom_vehicle_dialog { + background-color: #ffffff; + border: 1px solid #90AF13; + } + QDialog#custom_vehicle_dialog QWidget#CustomTitleBar { + background-color: #ffffff; + } + QDialog#custom_vehicle_dialog QLabel#TitleLabel { color: #2b2b2b; } - QLineEdit:focus { border: 1px solid #5a5a5a; } - QLineEdit:read-only { background-color: #f0f0f0; color: #5a5a5a; } + QDialog#custom_vehicle_dialog QWidget#BottomLine { + background-color: #90AF13; + } + QDialog#custom_vehicle_dialog QToolButton#CloseButton { + background: transparent; + color: #1f1f1f; + border: none; + } + QDialog#custom_vehicle_dialog QToolButton#CloseButton:hover { + background: #e81123; + color: #ffffff; + } + QDialog#custom_vehicle_dialog QToolButton#CloseButton:pressed { + background: #c50f1f; + color: #ffffff; + } + QLabel { color: #2b2b2b; font-size: 11px; background: transparent; } QPushButton { background-color: #ffffff; color: #2b2b2b; @@ -62,12 +87,33 @@ def __init__(self, parent=None): font-weight: 600; } """) + self.setupWrapper() self.init_ui() + self._setup_validators() + self._connect_signals() + self._refresh_axle_buttons_state() + self._on_vehicle_type_changed(self.vehicle_type_combo.currentText()) + + def setupWrapper(self): + # Keep frameless behavior but avoid native min/max tracking glitches on Windows. + self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog) + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(1, 1, 1, 1) + main_layout.setSpacing(0) + + self.title_bar = CustomTitleBar(parent=self) + self.title_bar.setTitle("Live Load Custom Vehicle Add/Edit") + main_layout.addWidget(self.title_bar) + + self.content_widget = QWidget(self) + self.content_widget.setStyleSheet("background-color: #ffffff;") + main_layout.addWidget(self.content_widget, 1) def init_ui(self): - layout = QVBoxLayout(self) - layout.setContentsMargins(16, 16, 16, 16) - layout.setSpacing(12) + layout = QVBoxLayout(self.content_widget) + layout.setContentsMargins(12, 12, 12, 12) + layout.setSpacing(8) # Vehicle Name row name_row = QHBoxLayout() @@ -75,26 +121,50 @@ def init_ui(self): name_label = QLabel("Vehicle Name:") name_label.setStyleSheet("font-weight: 600;") self.vehicle_name_input = QLineEdit() - self.vehicle_name_input.setFixedWidth(120) + self.vehicle_name_input.setFixedWidth(165) + apply_field_style(self.vehicle_name_input) name_row.addWidget(name_label) name_row.addWidget(self.vehicle_name_input) + + name_row.addSpacing(20) + type_label = QLabel("Vehicle Type:") + type_label.setStyleSheet("font-weight: 600;") + self.vehicle_type_combo = QComboBox() + self.vehicle_type_combo.addItems(["Wheeled", "Tracked", "Bogie"]) + self.vehicle_type_combo.setFixedWidth(120) + apply_field_style(self.vehicle_type_combo) + name_row.addWidget(type_label) + name_row.addWidget(self.vehicle_type_combo) + name_row.addStretch() layout.addLayout(name_row) + self.stacked_widget = QStackedWidget() + layout.addWidget(self.stacked_widget) + + # --- Page 1: Wheeled --- + self.wheeled_page = QWidget() + wheeled_layout = QVBoxLayout(self.wheeled_page) + wheeled_layout.setContentsMargins(0, 0, 0, 0) + wheeled_layout.setSpacing(8) + wheeled_layout.setAlignment(Qt.AlignTop) + # P# D# row with Add/Modify/Delete buttons pd_button_row = QHBoxLayout() pd_button_row.setSpacing(8) - p_label = QLabel("P#") + self.p_label = QLabel("Load, P# (kN)") self.P_input = QLineEdit() - self.P_input.setFixedWidth(50) - pd_button_row.addWidget(p_label) + self.P_input.setFixedWidth(68) + apply_field_style(self.P_input) + pd_button_row.addWidget(self.p_label) pd_button_row.addWidget(self.P_input) - d_label = QLabel("D#") + self.d_label = QLabel("Spacing, D# (m)") self.D_input = QLineEdit() - self.D_input.setFixedWidth(50) - pd_button_row.addWidget(d_label) + self.D_input.setFixedWidth(68) + apply_field_style(self.D_input) + pd_button_row.addWidget(self.d_label) pd_button_row.addWidget(self.D_input) pd_button_row.addStretch() @@ -106,27 +176,37 @@ def init_ui(self): pd_button_row.addWidget(self.modify_axle_button) pd_button_row.addWidget(self.delete_axle_button) - layout.addLayout(pd_button_row) + wheeled_layout.addLayout(pd_button_row) # Table and diagram row table_diagram_row = QHBoxLayout() - table_diagram_row.setSpacing(12) + table_diagram_row.setSpacing(10) # Axle table self.axle_table = QTableWidget() self.axle_table.setColumnCount(3) - self.axle_table.setHorizontalHeaderLabels(["No.", "Load (kN)", "Spacing (m)"]) - self.axle_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.axle_table.setHorizontalHeaderLabels(["S.No.", "Load (kN)", "Spacing (m)"]) + self.axle_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed) + self.axle_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) + self.axle_table.horizontalHeader().setSectionResizeMode(2, QHeaderView.Stretch) + self.axle_table.setColumnWidth(0, 52) self.axle_table.verticalHeader().setVisible(False) - self.axle_table.setMinimumHeight(120) - self.axle_table.setMaximumHeight(140) + self.axle_table.setSelectionBehavior(QTableWidget.SelectRows) + self.axle_table.setSelectionMode(QTableWidget.SingleSelection) + self.axle_table.setEditTriggers(QTableWidget.NoEditTriggers) + self.axle_table.setShowGrid(True) + self.axle_table.setFrameShape(QTableWidget.StyledPanel) + self.axle_table.setLineWidth(1) + self.axle_table.setMinimumHeight(118) + self.axle_table.setMaximumHeight(118) table_diagram_row.addWidget(self.axle_table, 1) # Axle diagram placeholder - axle_diagram = QLabel("Axle Layout Diagram") - axle_diagram.setAlignment(Qt.AlignCenter) - axle_diagram.setMinimumHeight(120) - axle_diagram.setStyleSheet(""" + self.axle_diagram = QLabel("Axle Layout Diagram") + self.axle_diagram.setAlignment(Qt.AlignCenter) + self.axle_diagram.setMinimumHeight(118) + self.axle_diagram.setMaximumHeight(118) + self.axle_diagram.setStyleSheet(""" QLabel { border: 1px solid #8a8a8a; border-radius: 4px; @@ -135,49 +215,123 @@ def init_ui(self): font-size: 10px; } """) - table_diagram_row.addWidget(axle_diagram, 1) + table_diagram_row.addWidget(self.axle_diagram, 1) + + wheeled_layout.addLayout(table_diagram_row) + self.stacked_widget.addWidget(self.wheeled_page) + + # --- Page 2: Tracked / Bogie --- + self.tb_page = QWidget() + tb_layout = QVBoxLayout(self.tb_page) + tb_layout.setContentsMargins(0, 0, 0, 0) + tb_layout.setSpacing(8) + tb_layout.setAlignment(Qt.AlignTop) + + # Spacer strictly balancing the top buttons row from wheeled_page + top_spacer = QWidget() + top_spacer.setFixedHeight(30) + tb_layout.addWidget(top_spacer) - layout.addLayout(table_diagram_row) + tb_bottom_row = QHBoxLayout() + tb_bottom_row.setSpacing(10) + + # Left side inputs (P, D) + tb_inputs_layout = QVBoxLayout() + tb_inputs_layout.setSpacing(8) + tb_inputs_layout.setContentsMargins(0, 0, 0, 0) + + tb_inputs_layout.addStretch() + + tb_p_row = QHBoxLayout() + self.tb_p_label = QLabel("P (kN)") + self.tb_p_label.setFixedWidth(50) + self.tb_P_input = QLineEdit() + self.tb_P_input.setFixedWidth(68) + apply_field_style(self.tb_P_input) + tb_p_row.addWidget(self.tb_p_label) + tb_p_row.addWidget(self.tb_P_input) + tb_p_row.addStretch() + + tb_d_row = QHBoxLayout() + self.tb_d_label = QLabel("D (m)") + self.tb_d_label.setFixedWidth(50) + self.tb_D_input = QLineEdit() + self.tb_D_input.setFixedWidth(68) + apply_field_style(self.tb_D_input) + tb_d_row.addWidget(self.tb_d_label) + tb_d_row.addWidget(self.tb_D_input) + tb_d_row.addStretch() + + tb_inputs_layout.addLayout(tb_p_row) + tb_inputs_layout.addLayout(tb_d_row) + tb_inputs_layout.addStretch() + + left_widget = QWidget() + left_widget.setLayout(tb_inputs_layout) + tb_bottom_row.addWidget(left_widget, 1) + + # Right side diagram + self.tb_axle_diagram = QLabel("Tracked Layout Diagram") + self.tb_axle_diagram.setAlignment(Qt.AlignCenter) + self.tb_axle_diagram.setMinimumHeight(118) + self.tb_axle_diagram.setMaximumHeight(118) + self.tb_axle_diagram.setStyleSheet(""" + QLabel { + border: 1px solid #8a8a8a; + border-radius: 4px; + background: #ffffff; + color: #6a6a6a; + font-size: 10px; + } + """) + tb_bottom_row.addWidget(self.tb_axle_diagram, 1) + + tb_layout.addLayout(tb_bottom_row) + + self.stacked_widget.addWidget(self.tb_page) # Input fields grid fields_grid = QGridLayout() - fields_grid.setContentsMargins(0, 8, 0, 0) - fields_grid.setHorizontalSpacing(12) - fields_grid.setVerticalSpacing(10) - fields_grid.setColumnMinimumWidth(0, 240) + fields_grid.setContentsMargins(0, 6, 0, 0) + fields_grid.setHorizontalSpacing(10) + fields_grid.setVerticalSpacing(12) + fields_grid.setColumnMinimumWidth(0, 340) field_labels = [ - "Minimum nose to tail distance (m):", - "Width of Wheel, w (mm):", - "Minimum Clearance from Carriageway\nEdge, f (mm):", - "Minimum Clearance from Crossing Vehicles,\ng (mm):", - "Wheel Spacing in Transverse Direction (m):", - "Impact Factor:", + "Minimum nose to tail distance (m)", + "Width of Wheel, w (mm)", + "Minimum Clearance from Carriageway Edge, f (mm)", + "Minimum Clearance from Crossing Vehicles, g (mm)", + "Wheel Spacing in Transverse Direction (m)", + "Impact Factor", ] + self._required_labels = field_labels[:-1] self.custom_fields = {} for row, text in enumerate(field_labels): lbl = QLabel(text) + lbl.setWordWrap(False) + lbl.setFixedWidth(340) field = QLineEdit() if "Impact" in text: field.setText("0.25") field.setReadOnly(True) - field.setFixedWidth(100) + field.setFixedWidth(150) + field.setFixedHeight(28) + apply_field_style(field) + fields_grid.setRowMinimumHeight(row, 32) fields_grid.addWidget(lbl, row, 0, Qt.AlignLeft | Qt.AlignVCenter) fields_grid.addWidget(field, row, 1, Qt.AlignLeft | Qt.AlignVCenter) self.custom_fields[text] = field layout.addLayout(fields_grid) - # Bottom diagram - Clear Carriageway Width - bottom_diagram_label = QLabel("CLEAR CARRIAGEWAY WIDTH") - bottom_diagram_label.setAlignment(Qt.AlignCenter) - bottom_diagram_label.setStyleSheet("font-size: 9px; font-weight: 600; color: #5a5a5a; background: transparent;") - layout.addWidget(bottom_diagram_label) + # Keep heading clear from the last input row. + layout.addSpacing(16) bottom_diagram = QLabel("") bottom_diagram.setAlignment(Qt.AlignCenter) - bottom_diagram.setMinimumHeight(80) + bottom_diagram.setMinimumHeight(62) bottom_diagram.setStyleSheet(""" QLabel { border: 1px solid #8a8a8a; @@ -187,5 +341,259 @@ def init_ui(self): """) layout.addWidget(bottom_diagram) - layout.addStretch() + button_row = QHBoxLayout() + button_row.addStretch() + self.save_button = QPushButton("Save") + self.cancel_button = QPushButton("Cancel") + self.save_button.setFixedWidth(90) + self.cancel_button.setFixedWidth(90) + button_row.addWidget(self.save_button) + button_row.addWidget(self.cancel_button) + layout.addLayout(button_row) + + def _setup_validators(self): + numeric = QDoubleValidator(0.0, 1_000_000.0, 3, self) + numeric.setNotation(QDoubleValidator.StandardNotation) + self.P_input.setValidator(numeric) + self.D_input.setValidator(numeric) + self.tb_P_input.setValidator(numeric) + self.tb_D_input.setValidator(numeric) + + for label, field in self.custom_fields.items(): + if "Impact" in label: + continue + validator = QDoubleValidator(0.0, 1_000_000.0, 3, self) + validator.setNotation(QDoubleValidator.StandardNotation) + field.setValidator(validator) + + def _connect_signals(self): + self.add_axle_button.clicked.connect(self._add_axle) + self.modify_axle_button.clicked.connect(self._modify_axle) + self.delete_axle_button.clicked.connect(self._delete_axle) + self.axle_table.itemSelectionChanged.connect(self._on_axle_selection_changed) + self.save_button.clicked.connect(self._save_and_accept) + self.cancel_button.clicked.connect(self.reject) + self.vehicle_type_combo.currentTextChanged.connect(self._on_vehicle_type_changed) + + def _on_vehicle_type_changed(self, text): + is_wheeled = text == "Wheeled" + if is_wheeled: + self.stacked_widget.setCurrentIndex(0) + self._refresh_axle_buttons_state() + else: + self.stacked_widget.setCurrentIndex(1) + is_bogie = text == "Bogie" + self.tb_p_label.setText("Pb (kN)" if is_bogie else "P (kN)") + self.tb_d_label.setText("Db (m)" if is_bogie else "D (m)") + self.tb_axle_diagram.setText("Bogie Layout Diagram" if is_bogie else "Tracked Layout Diagram") + + def _refresh_axle_buttons_state(self): + enabled = self._selected_axle_row is not None + self.modify_axle_button.setEnabled(enabled) + self.delete_axle_button.setEnabled(enabled) + + @staticmethod + def _fmt(value): + text = f"{value:.3f}".rstrip("0").rstrip(".") + return text if text else "0" + + def _validate_axle_inputs(self): + p_text = self.P_input.text().strip() + d_text = self.D_input.text().strip() + if not p_text or not d_text: + QMessageBox.warning(self, "Invalid Axle", "Please enter both P# and D# values.") + return None + + try: + p_value = float(p_text) + d_value = float(d_text) + except ValueError: + QMessageBox.warning(self, "Invalid Axle", "P# and D# must be numeric values.") + return None + + if p_value <= 0: + QMessageBox.warning(self, "Invalid Axle", "P# must be greater than 0.") + return None + if d_value < 0: + QMessageBox.warning(self, "Invalid Axle", "D# cannot be negative.") + return None + return p_value, d_value + + def _set_axle_row(self, row, load_value, spacing_value): + load_item = QTableWidgetItem(self._fmt(load_value)) + spacing_item = QTableWidgetItem(self._fmt(spacing_value)) + for item in (load_item, spacing_item): + item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) + item.setTextAlignment(Qt.AlignCenter) + self.axle_table.setItem(row, 1, load_item) + self.axle_table.setItem(row, 2, spacing_item) + + def _renumber_rows(self): + for row in range(self.axle_table.rowCount()): + serial_item = QTableWidgetItem(str(row + 1)) + serial_item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) + serial_item.setTextAlignment(Qt.AlignCenter) + self.axle_table.setItem(row, 0, serial_item) + + def _on_axle_selection_changed(self): + selected = self.axle_table.selectedItems() + if not selected: + self._selected_axle_row = None + self._refresh_axle_buttons_state() + return + + row = selected[0].row() + self._selected_axle_row = row + load_item = self.axle_table.item(row, 1) + spacing_item = self.axle_table.item(row, 2) + self.P_input.setText(load_item.text() if load_item else "") + self.D_input.setText(spacing_item.text() if spacing_item else "") + self._refresh_axle_buttons_state() + + def _add_axle(self): + values = self._validate_axle_inputs() + if values is None: + return + load_value, spacing_value = values + row = self.axle_table.rowCount() + self.axle_table.insertRow(row) + self._set_axle_row(row, load_value, spacing_value) + self._renumber_rows() + self.axle_table.selectRow(row) + + def _modify_axle(self): + if self._selected_axle_row is None: + QMessageBox.information(self, "No Selection", "Select an axle row to modify.") + return + values = self._validate_axle_inputs() + if values is None: + return + load_value, spacing_value = values + self._set_axle_row(self._selected_axle_row, load_value, spacing_value) + + def _delete_axle(self): + if self._selected_axle_row is None: + QMessageBox.information(self, "No Selection", "Select an axle row to delete.") + return + self.axle_table.removeRow(self._selected_axle_row) + self._selected_axle_row = None + self._renumber_rows() + self.P_input.clear() + self.D_input.clear() + self._refresh_axle_buttons_state() + + def _field_float(self, label_text): + text = self.custom_fields[label_text].text().strip() + if not text: + return None + try: + return float(text) + except ValueError: + return None + + def _save_and_accept(self): + name = self.vehicle_name_input.text().strip() + if not name: + QMessageBox.warning(self, "Invalid Vehicle", "Please enter vehicle name.") + return + + vtype = self.vehicle_type_combo.currentText() + if vtype in ["Tracked", "Bogie"]: + p_text = self.tb_P_input.text().strip() + d_text = self.tb_D_input.text().strip() + if not p_text or not d_text: + QMessageBox.warning(self, "Invalid Vehicle", "Please enter both Load and Spacing.") + return + try: + load_kN = float(p_text) + spacing_m = float(d_text) + except ValueError: + QMessageBox.warning(self, "Invalid Vehicle", "Load and Spacing must be numeric values.") + return + if load_kN <= 0: + QMessageBox.warning(self, "Invalid Vehicle", "Load must be greater than 0.") + return + if spacing_m < 0: + QMessageBox.warning(self, "Invalid Vehicle", "Spacing cannot be negative.") + return + axles = [{"load_kN": load_kN, "spacing_m": spacing_m}] + else: + if self.axle_table.rowCount() == 0: + QMessageBox.warning(self, "Invalid Vehicle", "Please add at least one axle.") + return + axles = [] + for row in range(self.axle_table.rowCount()): + load_item = self.axle_table.item(row, 1) + spacing_item = self.axle_table.item(row, 2) + if not load_item or not spacing_item: + continue + axles.append({"load_kN": float(load_item.text()), "spacing_m": float(spacing_item.text())}) + + for label in self._required_labels: + if self._field_float(label) is None: + QMessageBox.warning( + self, + "Incomplete Inputs", + f"Please enter a valid value for: {label.replace(chr(10), ' ')}", + ) + return + + self.vehicle_data = { + "name": name, + "vehicle_type": self.vehicle_type_combo.currentText(), + "axles": axles, + "axle_loads": [a["load_kN"] for a in axles], + "axle_spacings": [a["spacing_m"] for a in axles], + "minimum_nose_to_tail_distance_m": self._field_float("Minimum nose to tail distance (m)"), + "wheel_width_mm": self._field_float("Width of Wheel, w (mm)"), + "minimum_clearance_carriageway_edge_mm": self._field_float("Minimum Clearance from Carriageway Edge, f (mm)"), + "minimum_clearance_crossing_vehicles_mm": self._field_float("Minimum Clearance from Crossing Vehicles, g (mm)"), + "wheel_spacing_transverse_m": self._field_float("Wheel Spacing in Transverse Direction (m)"), + "impact_factor": self._field_float("Impact Factor") or 0.25, + } + self.accept() + + def load_vehicle_data(self, vehicle_data): + self.vehicle_name_input.setText(str(vehicle_data.get("name", ""))) + vtype = vehicle_data.get("vehicle_type", "Wheeled") + idx = self.vehicle_type_combo.findText(vtype) + if idx >= 0: + self.vehicle_type_combo.setCurrentIndex(idx) + self.axle_table.setRowCount(0) + self._selected_axle_row = None + + axles = vehicle_data.get("axles") + if not axles: + loads = vehicle_data.get("axle_loads", []) + spacings = vehicle_data.get("axle_spacings", []) + axles = [ + {"load_kN": loads[i], "spacing_m": spacings[i]} + for i in range(min(len(loads), len(spacings))) + ] + + if vtype in ["Tracked", "Bogie"]: + if axles: + self.tb_P_input.setText(self._fmt(float(axles[0].get("load_kN", 0.0)))) + self.tb_D_input.setText(self._fmt(float(axles[0].get("spacing_m", 0.0)))) + else: + for axle in axles: + row = self.axle_table.rowCount() + self.axle_table.insertRow(row) + self._set_axle_row(row, float(axle.get("load_kN", 0.0)), float(axle.get("spacing_m", 0.0))) + self._renumber_rows() + + mapping = { + "Minimum nose to tail distance (m)": "minimum_nose_to_tail_distance_m", + "Width of Wheel, w (mm)": "wheel_width_mm", + "Minimum Clearance from Carriageway Edge, f (mm)": "minimum_clearance_carriageway_edge_mm", + "Minimum Clearance from Crossing Vehicles, g (mm)": "minimum_clearance_crossing_vehicles_mm", + "Wheel Spacing in Transverse Direction (m)": "wheel_spacing_transverse_m", + "Impact Factor": "impact_factor", + } + for label, key in mapping.items(): + value = vehicle_data.get(key) + self.custom_fields[label].setText("") if value is None else self.custom_fields[label].setText(self._fmt(float(value))) + + self._refresh_axle_buttons_state() + self._on_vehicle_type_changed(vtype) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py index 864deb9b3..301f0bd1a 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py @@ -12,10 +12,11 @@ QSizePolicy, ) from PySide6.QtCore import Qt +from PySide6.QtGui import QDoubleValidator, QIntValidator, QValidator +import copy from osdagbridge.core.utils.common import VALUES_YES_NO from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style -from osdagbridge.desktop.ui.dialogs.tabs.custom_vehicle_dialog import CustomVehicleDialog from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.loading.permanent_load_tab import PermanentLoadTab from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.loading.live_load_tab import LiveLoadTab from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.loading.seismic_load_tab import SeismicLoadTab @@ -37,7 +38,6 @@ def __init__(self, parent=None): self.braking_vehicle_checkboxes = [] self.braking_vehicle_labels = [] - self.custom_vehicle_dialog = CustomVehicleDialog(self) self.custom_load_items = [] self.load_combo_items = [] @@ -203,11 +203,6 @@ def _on_live_load_mode_changed(self, mode): if not is_custom: self.live_load_custom_input.clear() - def show_custom_vehicle_dialog(self): - self.custom_vehicle_dialog.show() - self.custom_vehicle_dialog.raise_() - self.custom_vehicle_dialog.activateWindow() - def update_permanent_load_dependencies(self, has_median: bool, has_footpath: bool): """ Forward dependency updates to PermanentLoadTab @@ -237,4 +232,218 @@ def reset_defaults(self): if hasattr(self, "temperature_load_tab") and hasattr(self.temperature_load_tab, "reset_defaults"): self.temperature_load_tab.reset_defaults() if hasattr(self, "custom_load_tab") and hasattr(self.custom_load_tab, "reset_defaults"): - self.custom_load_tab.reset_defaults() \ No newline at end of file + self.custom_load_tab.reset_defaults() + + def _format_field_name(self, name: str) -> str: + return str(name or "field").replace("_", " ").strip().title() + + def _build_named_widget_map(self): + named_widgets = {} + + def collect(scope_obj, prefix=""): + for attr_name, value in vars(scope_obj).items(): + if isinstance(value, (QLineEdit, QComboBox, QCheckBox)): + key = f"{prefix}.{attr_name}" if prefix else attr_name + named_widgets[key] = value + + collect(self) + for tab_name in ( + "permanent_load_tab", + "live_load_tab", + "seismic_load_tab", + "wind_load_tab", + "temperature_load_tab", + "custom_load_tab", + "load_combination_tab", + ): + tab = getattr(self, tab_name, None) + if tab is not None: + collect(tab, tab_name) + + return named_widgets + + def _sync_load_combo_included_flags(self): + tab = getattr(self, "load_combination_tab", None) + table = getattr(tab, "load_combo_table", None) if tab else None + if not tab or table is None: + return + + for row_idx in range(table.rowCount()): + if row_idx >= len(self.load_combo_items): + break + included = False + checkbox_widget = table.cellWidget(row_idx, 2) + if checkbox_widget is not None: + checkbox = checkbox_widget.findChild(QCheckBox) + if checkbox is not None: + included = checkbox.isChecked() + self.load_combo_items[row_idx]["included"] = included + + def validate_tab(self): + errors = [] + named_widgets = self._build_named_widget_map() + #Validate only fields from the currently active Loading sub-tab. + active_tab = self.load_tabs.currentWidget() if hasattr(self, "load_tabs") else None + active_tab_name = None + for tab_name in ( + "permanent_load_tab", + "live_load_tab", + "seismic_load_tab", + "wind_load_tab", + "temperature_load_tab", + "custom_load_tab", + "load_combination_tab", + ): + if getattr(self, tab_name, None) is active_tab: + active_tab_name = tab_name + break + + custom_entry_fields = { + "custom_load_case_name_input", + "custom_point_left_input", + "custom_point_bearing_input", + "custom_line_left_start", + "custom_line_left_end", + "custom_line_bearing_start", + "custom_line_bearing_end", + } + + for key, widget in named_widgets.items(): + if not isinstance(widget, QLineEdit): + continue + + # Validate only fields from the currently active Loading sub-tab. + key_parts = key.split(".", 1) + if len(key_parts) == 2: + key_tab_name, attr_name = key_parts + if active_tab_name and key_tab_name != active_tab_name: + continue + else: + attr_name = key_parts[0] + + # Custom Load Add/Edit inputs are transient and validated on tab-level Save. + if active_tab_name == "custom_load_tab" and attr_name in custom_entry_fields: + continue + + if not widget.isEnabled() or widget.isReadOnly(): + continue + if not widget.isVisible(): + continue + + field_name = self._format_field_name(key.split(".")[-1]) + text = widget.text().strip() + if not text: + errors.append(f"{field_name} cannot be empty.") + continue + + validator = widget.validator() + if validator is None: + continue + + state = validator.validate(text, 0)[0] + if state == QValidator.Acceptable: + continue + + if isinstance(validator, (QDoubleValidator, QIntValidator)): + errors.append( + f"{field_name} must be between {validator.bottom()} and {validator.top()}." + ) + else: + errors.append(f"{field_name} has invalid value.") + + # Additional consistency checks for custom collections used in Loading. + custom_load_tab = getattr(self, "custom_load_tab", None) + if custom_load_tab is not None and hasattr(custom_load_tab, "_editing_load_data"): + if getattr(custom_load_tab, "_editing_load_data", None): + errors.append("Please save or clear the Custom Load currently being edited.") + + return list(dict.fromkeys(errors)) + + def save_values(self): + values = {} + named_widgets = self._build_named_widget_map() + + for key, widget in named_widgets.items(): + if isinstance(widget, QLineEdit): + values[key] = widget.text() + elif isinstance(widget, QComboBox): + values[key] = widget.currentText() + elif isinstance(widget, QCheckBox): + values[key] = widget.isChecked() + + # Persist checkbox list states that are dynamically generated. + if getattr(self, "irc_vehicle_labels", None) and getattr(self, "irc_vehicle_checkboxes", None): + values["loading.irc_vehicle_checks"] = { + lbl.text(): cb.isChecked() + for lbl, cb in zip(self.irc_vehicle_labels, self.irc_vehicle_checkboxes) + } + + if getattr(self, "braking_vehicle_labels", None) and getattr(self, "braking_vehicle_checkboxes", None): + values["loading.braking_vehicle_checks"] = { + lbl.text(): cb.isChecked() + for lbl, cb in zip(self.braking_vehicle_labels, self.braking_vehicle_checkboxes) + } + + self._sync_load_combo_included_flags() + values["loading.custom_load_items"] = copy.deepcopy(self.custom_load_items) + values["loading.load_combo_items"] = copy.deepcopy(self.load_combo_items) + + live_tab = getattr(self, "live_load_tab", None) + if live_tab is not None: + values["loading.live_custom_vehicles"] = copy.deepcopy(getattr(live_tab, "custom_vehicles", {})) + values["loading.live_has_real_custom_vehicle"] = bool(getattr(live_tab, "has_real_custom_vehicle", False)) + + return values + + def restore_values(self, data: dict): + if not isinstance(data, dict): + return + + named_widgets = self._build_named_widget_map() + for key, value in data.items(): + if key not in named_widgets: + continue + widget = named_widgets[key] + if isinstance(widget, QLineEdit): + widget.setText(str(value)) + elif isinstance(widget, QComboBox): + widget.setCurrentText(str(value)) + elif isinstance(widget, QCheckBox): + widget.setChecked(bool(value)) + + custom_load_items = data.get("loading.custom_load_items") + if isinstance(custom_load_items, list): + self.custom_load_items.clear() + self.custom_load_items.extend(copy.deepcopy(custom_load_items)) + if hasattr(self, "custom_load_tab") and hasattr(self.custom_load_tab, "_refresh_custom_load_table"): + self.custom_load_tab._refresh_custom_load_table() + + load_combo_items = data.get("loading.load_combo_items") + if isinstance(load_combo_items, list): + self.load_combo_items.clear() + self.load_combo_items.extend(copy.deepcopy(load_combo_items)) + if hasattr(self, "load_combination_tab") and hasattr(self.load_combination_tab, "_refresh_load_combo_table"): + self.load_combination_tab._refresh_load_combo_table() + + irc_states = data.get("loading.irc_vehicle_checks") + if isinstance(irc_states, dict): + for lbl, cb in zip(getattr(self, "irc_vehicle_labels", []), getattr(self, "irc_vehicle_checkboxes", [])): + cb.setChecked(bool(irc_states.get(lbl.text(), cb.isChecked()))) + + braking_states = data.get("loading.braking_vehicle_checks") + if isinstance(braking_states, dict): + for lbl, cb in zip(getattr(self, "braking_vehicle_labels", []), getattr(self, "braking_vehicle_checkboxes", [])): + cb.setChecked(bool(braking_states.get(lbl.text(), cb.isChecked()))) + + live_tab = getattr(self, "live_load_tab", None) + custom_vehicles = data.get("loading.live_custom_vehicles") + if live_tab is not None and isinstance(custom_vehicles, dict): + if hasattr(live_tab, "custom_vehicle_table"): + live_tab.custom_vehicle_table.setRowCount(0) + live_tab.custom_vehicles.clear() + live_tab.has_real_custom_vehicle = bool(data.get("loading.live_has_real_custom_vehicle", bool(custom_vehicles))) + for vehicle_name, vehicle_data in custom_vehicles.items(): + merged = dict(vehicle_data) + merged["name"] = vehicle_name + if hasattr(live_tab, "_add_custom_vehicle"): + live_tab._add_custom_vehicle(merged) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/custom_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/custom_load_tab.py index 3cfe392f9..aa53fb952 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/custom_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/custom_load_tab.py @@ -8,7 +8,6 @@ QHBoxLayout, QLabel, QLineEdit, - QMessageBox, QPushButton, QScrollArea, QStackedWidget, @@ -21,6 +20,7 @@ ) from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style +from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import CUSTOM_LOAD_TAB_SCHEMA @@ -63,7 +63,7 @@ def _build_ui(self): label_style = "font-size: 11px; color: #2a2a2a; background: transparent; border: none;" heading_style = "font-size: 11px; font-weight: 700; color: #1a1a1a; background: transparent; border: none;" - label_width = schema.get("label_width", 260) + label_width = schema.get("label_width", 280) field_width = schema.get("field_width", 140) left_column = QVBoxLayout() @@ -139,7 +139,7 @@ def _build_ui(self): owner.custom_load_type_combo = QComboBox() owner.custom_load_type_combo.addItems(schema["load_type_choices"]) - owner.custom_load_type_combo.setFixedWidth(field_width) + owner.custom_load_type_combo.setFixedWidth(field_width * 2 + 8) apply_field_style(owner.custom_load_type_combo) load_type_row.addWidget(lbl) @@ -159,7 +159,7 @@ def _build_ui(self): point_widget = QWidget() point_widget.setObjectName("customPointWidget") point_layout = QVBoxLayout(point_widget) - point_layout.setContentsMargins(0, 8, 0, 0) + point_layout.setContentsMargins(0, 0, 0, 0) point_layout.setSpacing(10) point_left_field = schema["fields"]["point_left"] @@ -171,7 +171,7 @@ def _build_ui(self): lbl.setFixedWidth(label_width) owner.custom_point_left_input = QLineEdit() - owner.custom_point_left_input.setFixedWidth(field_width) + owner.custom_point_left_input.setFixedWidth(field_width * 2 + 8) apply_field_style(owner.custom_point_left_input) self._apply_validator(owner.custom_point_left_input, point_left_field.get("validator")) @@ -189,7 +189,7 @@ def _build_ui(self): lbl.setFixedWidth(label_width) owner.custom_point_bearing_input = QLineEdit() - owner.custom_point_bearing_input.setFixedWidth(field_width) + owner.custom_point_bearing_input.setFixedWidth(field_width * 2 + 8) apply_field_style(owner.custom_point_bearing_input) self._apply_validator(owner.custom_point_bearing_input, point_bearing_field.get("validator")) @@ -203,14 +203,14 @@ def _build_ui(self): line_widget = QWidget() line_widget.setObjectName("customLineWidget") line_layout = QVBoxLayout(line_widget) - line_layout.setContentsMargins(0, 8, 0, 0) + line_layout.setContentsMargins(0, 0, 0, 0) line_layout.setSpacing(10) line_left_start_field = schema["fields"]["line_left_start"] line_left_end_field = schema["fields"]["line_left_end"] left_edge_row = QHBoxLayout() - left_edge_row.setSpacing(8) + left_edge_row.setSpacing(4) left_label = QLabel(line_left_start_field["label"]) left_label.setStyleSheet(label_style) @@ -222,7 +222,7 @@ def _build_ui(self): left_start_lbl.setStyleSheet("font-size: 9px; color: #505050;") left_start_lbl.setAlignment(Qt.AlignCenter) owner.custom_line_left_start = QLineEdit() - owner.custom_line_left_start.setFixedWidth(line_left_start_field["field_width"]) + owner.custom_line_left_start.setFixedWidth(field_width + 2) apply_field_style(owner.custom_line_left_start) self._apply_validator(owner.custom_line_left_start, line_left_start_field.get("validator")) left_start_container.addWidget(left_start_lbl) @@ -234,7 +234,7 @@ def _build_ui(self): left_end_lbl.setStyleSheet("font-size: 9px; color: #505050;") left_end_lbl.setAlignment(Qt.AlignCenter) owner.custom_line_left_end = QLineEdit() - owner.custom_line_left_end.setFixedWidth(line_left_end_field["field_width"]) + owner.custom_line_left_end.setFixedWidth(field_width + 2) apply_field_style(owner.custom_line_left_end) self._apply_validator(owner.custom_line_left_end, line_left_end_field.get("validator")) left_end_container.addWidget(left_end_lbl) @@ -250,7 +250,7 @@ def _build_ui(self): line_bearing_end_field = schema["fields"]["line_bearing_end"] bearing_row = QHBoxLayout() - bearing_row.setSpacing(8) + bearing_row.setSpacing(4) bearing_label = QLabel(line_bearing_start_field["label"]) bearing_label.setStyleSheet(label_style) @@ -262,7 +262,7 @@ def _build_ui(self): bearing_start_lbl.setStyleSheet("font-size: 9px; color: #505050;") bearing_start_lbl.setAlignment(Qt.AlignCenter) owner.custom_line_bearing_start = QLineEdit() - owner.custom_line_bearing_start.setFixedWidth(line_bearing_start_field["field_width"]) + owner.custom_line_bearing_start.setFixedWidth(field_width + 2) apply_field_style(owner.custom_line_bearing_start) self._apply_validator(owner.custom_line_bearing_start, line_bearing_start_field.get("validator")) bearing_start_container.addWidget(bearing_start_lbl) @@ -274,7 +274,7 @@ def _build_ui(self): bearing_end_lbl.setStyleSheet("font-size: 9px; color: #505050;") bearing_end_lbl.setAlignment(Qt.AlignCenter) owner.custom_line_bearing_end = QLineEdit() - owner.custom_line_bearing_end.setFixedWidth(line_bearing_end_field["field_width"]) + owner.custom_line_bearing_end.setFixedWidth(field_width + 2) apply_field_style(owner.custom_line_bearing_end) self._apply_validator(owner.custom_line_bearing_end, line_bearing_end_field.get("validator")) bearing_end_container.addWidget(bearing_end_lbl) @@ -351,10 +351,7 @@ def _build_ui(self): table_frame.setStyleSheet( """ QFrame { - border-left: 2px solid #7a7a7a; - border-right: 2px solid #7a7a7a; - border-bottom: 2px solid #7a7a7a; - border-top: 0px; + border: none; background: #ffffff; } """ @@ -378,22 +375,24 @@ def _build_ui(self): "Distance from Bearing (m)" ]) - self.custom_load_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.custom_load_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch) + self.custom_load_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) + self.custom_load_table.horizontalHeader().setSectionResizeMode(2, QHeaderView.Stretch) + self.custom_load_table.horizontalHeader().setSectionResizeMode(3, QHeaderView.Stretch) self.custom_load_table.verticalHeader().setVisible(False) self.custom_load_table.setSelectionBehavior(QTableWidget.SelectRows) self.custom_load_table.setSelectionMode(QTableWidget.SingleSelection) + self.custom_load_table.setCornerButtonEnabled(False) self.custom_load_table.setStyleSheet( """ QTableWidget { background: #ffffff; - border: none; + border: 1px solid #a0a0a0; + gridline-color: #d0d0d0; } - /* 🔥 REAL visible borders (this is the fix) */ QTableWidget::viewport { - border-left: 3px solid #8f8f8f; - border-right: 2px solid #8f8f8f; - border-bottom: 2px solid #8f8f8f; + border: none; background: #ffffff; } @@ -414,14 +413,17 @@ def _build_ui(self): font-size: 10px; font-weight: 600; padding: 5px; - border: 1px solid #d0d0d0; + border: none; + border-right: 1px solid #d0d0d0; + border-bottom: 1px solid #d0d0d0; } """ ) self.custom_load_table.setMinimumHeight(180) - - list_layout.addWidget(self.custom_load_table) + + table_layout.addWidget(self.custom_load_table) + list_layout.addWidget(table_frame) left_column.addWidget(list_card) @@ -540,16 +542,45 @@ def _on_save_custom_load(self): } if owner.custom_load_case_combo.currentText() == "Custom": - load_data["custom_load_case_name"] = owner.custom_load_case_name_input.text().strip() + custom_name = owner.custom_load_case_name_input.text().strip() + if not custom_name: + CustomMessageBox(title="Invalid Input", text="Please provide a name for the Custom load case.", buttons=["OK"], dialogType=MessageBoxType.Warning).exec() + return + load_data["custom_load_case_name"] = custom_name if owner.custom_load_type_combo.currentText() == "Point": - load_data["point_left"] = owner.custom_point_left_input.text().strip() - load_data["point_bearing"] = owner.custom_point_bearing_input.text().strip() + point_l = owner.custom_point_left_input.text().strip() + point_b = owner.custom_point_bearing_input.text().strip() + if not point_l or not point_b: + CustomMessageBox(title="Invalid Input", text="Please fill in all distance fields for the Point load.", buttons=["OK"], dialogType=MessageBoxType.Warning).exec() + return + load_data["point_left"] = point_l + load_data["point_bearing"] = point_b else: - load_data["line_left_start"] = owner.custom_line_left_start.text().strip() - load_data["line_left_end"] = owner.custom_line_left_end.text().strip() - load_data["line_bearing_start"] = owner.custom_line_bearing_start.text().strip() - load_data["line_bearing_end"] = owner.custom_line_bearing_end.text().strip() + line_l_start = owner.custom_line_left_start.text().strip() + line_l_end = owner.custom_line_left_end.text().strip() + line_b_start = owner.custom_line_bearing_start.text().strip() + line_b_end = owner.custom_line_bearing_end.text().strip() + + if not line_l_start or not line_l_end or not line_b_start or not line_b_end: + CustomMessageBox(title="Invalid Input", text="Please fill in all distance fields for the Line/Area load.", buttons=["OK"], dialogType=MessageBoxType.Warning).exec() + return + + try: + if float(line_l_start) > float(line_l_end): + CustomMessageBox(title="Invalid Input", text="Distance from Left Edge Start cannot be greater than End.", buttons=["OK"], dialogType=MessageBoxType.Warning).exec() + return + if float(line_b_start) > float(line_b_end): + CustomMessageBox(title="Invalid Input", text="Distance from Bearing Start cannot be greater than End.", buttons=["OK"], dialogType=MessageBoxType.Warning).exec() + return + except ValueError: + CustomMessageBox(title="Invalid Input", text="Distance fields must be numeric.", buttons=["OK"], dialogType=MessageBoxType.Warning).exec() + return + + load_data["line_left_start"] = line_l_start + load_data["line_left_end"] = line_l_end + load_data["line_bearing_start"] = line_b_start + load_data["line_bearing_end"] = line_b_end if hasattr(self, '_editing_load_data') and self._editing_load_data: for i, item in enumerate(self.custom_load_items): @@ -563,22 +594,17 @@ def _on_save_custom_load(self): self._clear_inputs() self._refresh_custom_load_table() - msg = QMessageBox(self) - msg.setIcon(QMessageBox.Information) - msg.setWindowTitle("Saved") - msg.setText("Custom load has been saved.") - msg.setStyleSheet("QLabel { color: black; }") - msg.exec() + CustomMessageBox(title="Saved", text="Custom load has been saved.", buttons=["OK"], dialogType=MessageBoxType.Success).exec() def _on_edit_custom_load(self): selected_rows = self.custom_load_table.selectionModel().selectedRows() if len(selected_rows) == 0: - QMessageBox.information(self, "Edit", "Please select one custom load to edit.") + CustomMessageBox(title="Edit", text="Please select one custom load to edit.", buttons=["OK"], dialogType=MessageBoxType.Information).exec() return if len(selected_rows) > 1: - QMessageBox.information(self, "Edit", "Please select only one custom load to edit.") + CustomMessageBox(title="Edit", text="Please select only one custom load to edit.", buttons=["OK"], dialogType=MessageBoxType.Information).exec() return row_idx = selected_rows[0].row() @@ -613,7 +639,7 @@ def _on_delete_custom_load(self): selected_rows = self.custom_load_table.selectionModel().selectedRows() if len(selected_rows) == 0: - QMessageBox.information(self, "Delete", "Please select at least one custom load to delete.") + CustomMessageBox(title="Delete", text="Please select at least one custom load to delete.", buttons=["OK"], dialogType=MessageBoxType.Information).exec() return rows_to_delete = sorted([row.row() for row in selected_rows], reverse=True) @@ -624,12 +650,7 @@ def _on_delete_custom_load(self): self._refresh_custom_load_table() - msg = QMessageBox(self) - msg.setIcon(QMessageBox.Information) - msg.setWindowTitle("Deleted") - msg.setText(f"{len(rows_to_delete)} custom load(s) deleted.") - msg.setStyleSheet("QLabel { color: black; } QPushButton { color: black; }") - msg.exec() + CustomMessageBox(title="Deleted", text=f"{len(rows_to_delete)} custom load(s) deleted.", buttons=["OK"], dialogType=MessageBoxType.Information).exec() def _clear_inputs(self): owner = self.owner diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/live_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/live_load_tab.py index f69b8133c..aa91e076d 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/live_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/live_load_tab.py @@ -2,11 +2,12 @@ from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QLabel, QCheckBox, QComboBox, QLineEdit, QPushButton, QScrollArea, QFrame, QTableWidget, - QTableWidgetItem, QMessageBox, QDialog, QHeaderView, QStyledItemDelegate + QTableWidgetItem, QDialog, QHeaderView, QStyledItemDelegate ) from PySide6.QtGui import QPainter, QPen from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.dialogs.tabs.custom_vehicle_dialog import CustomVehicleDialog +from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import LIVE_LOAD_TAB_SCHEMA class BorderDelegate(QStyledItemDelegate): @@ -74,7 +75,7 @@ def _build_ui(self): left_layout.setContentsMargins(14, 14, 14, 14) left_layout.setSpacing(12) - title = QLabel("Live Load (LL) Inputs:") + title = QLabel("Live Load (LL) Inputs") title.setStyleSheet("font-size: 12px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") left_layout.addWidget(title) @@ -129,14 +130,14 @@ def _build_ui(self): header_row.setContentsMargins(0, 0, 0, 0) header_row.setSpacing(10) - header_label = QLabel(section.get("title", "")) - header_label.setStyleSheet("font-size: 11px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") - header_label.setMinimumWidth(LABEL_MIN_WIDTH) - header_row.addWidget(header_label) + self.custom_vehicle_header_label = QLabel(section.get("title", "")) + self.custom_vehicle_header_label.setStyleSheet("font-size: 11px; font-weight: 700; color: #3a3a3a; background: transparent; border: none;") + self.custom_vehicle_header_label.setMinimumWidth(LABEL_MIN_WIDTH) + header_row.addWidget(self.custom_vehicle_header_label) add_button_bind = section.get("add_button_bind") if add_button_bind: - setattr(owner, add_button_bind, QPushButton("Add")) + setattr(owner, add_button_bind, QPushButton("Add Custom Vehicle")) add_button = getattr(owner, add_button_bind) add_button.setStyleSheet("QPushButton { background-color: white; border: 1px solid #3a3a3a; border-radius: 3px; font-size: 10px; font-weight: 600; color: #3a3a3a; padding: 3px 8px; } QPushButton:hover { background-color: #f8f8f8; }") add_button.setFixedHeight(FIELD_HEIGHT) @@ -218,8 +219,16 @@ def _build_ui(self): ecc_row.addStretch() self.remaining_box_layout.addLayout(ecc_row) + left_layout.addWidget(remaining_box) + footpath_section = next((s for s in schema.get("sections", []) if s.get("id") == "footpath_pressure"), None) if footpath_section: + footpath_box = QFrame() + footpath_box.setStyleSheet("QFrame { border: 1px solid #9c9c9c; border-radius: 6px; background-color: #ffffff; padding: 0px; }") + footpath_box_layout = QVBoxLayout(footpath_box) + footpath_box_layout.setContentsMargins(12, 12, 12, 12) + footpath_box_layout.setSpacing(8) + footpath_row = QHBoxLayout() footpath_row.setSpacing(10) footpath_label = QLabel(footpath_section.get("label", "")) @@ -247,9 +256,8 @@ def _build_ui(self): footpath_row.addWidget(mode_combo) footpath_row.addWidget(value_input) footpath_row.addStretch() - self.remaining_box_layout.addLayout(footpath_row) - - left_layout.addWidget(remaining_box) + footpath_box_layout.addLayout(footpath_row) + left_layout.addWidget(footpath_box) left_layout.addStretch() left_card_layout.addWidget(content_wrapper) @@ -281,6 +289,7 @@ def _build_ui(self): main_layout.addWidget(scroll_area) owner.custom_vehicle_add_button.clicked.connect(self.show_custom_vehicle_dialog) + self._update_custom_vehicle_header() footpath_section = next((s for s in schema.get("sections", []) if s.get("id") == "footpath_pressure"), None) if footpath_section: @@ -303,8 +312,9 @@ def _update_braking_vehicles_section(self): irc_section = next((s for s in self.schema.get("sections", []) if s.get("id") == "irc_vehicles_section"), None) irc_vehicles = irc_section.get("items", []) if irc_section else [] + irc_braking_vehicles = [v for v in irc_vehicles if v == "Class SV"] custom_vehicle_names = list(self.custom_vehicles.keys()) if self.has_real_custom_vehicle else [] - all_braking_vehicles = irc_vehicles + custom_vehicle_names + all_braking_vehicles = irc_braking_vehicles + custom_vehicle_names self.owner.braking_vehicle_checkboxes = [] self.owner.braking_vehicle_labels = [] @@ -345,7 +355,12 @@ def _add_custom_vehicle(self, vehicle_data): name = vehicle_data["name"] if name in self.custom_vehicles: - QMessageBox.warning(self, "Duplicate Vehicle", f"Custom vehicle '{name}' already exists.") + CustomMessageBox( + title="Duplicate Vehicle", + text=f"Custom vehicle '{name}' already exists.", + buttons=["OK"], + dialogType=MessageBoxType.Warning, + ).exec() return self.custom_vehicles[name] = vehicle_data @@ -396,6 +411,7 @@ def _add_custom_vehicle(self, vehicle_data): self._update_custom_vehicle_table_height() self._update_custom_vehicle_box_height() self._update_braking_vehicles_section() + self._update_custom_vehicle_header() def _update_row_borders(self): """Force table to repaint with updated borders""" @@ -412,7 +428,12 @@ def _edit_custom_vehicle(self, name): if new_name != name: if new_name in self.custom_vehicles: - QMessageBox.warning(self, "Duplicate Vehicle", f"Custom vehicle '{new_name}' already exists.") + CustomMessageBox( + title="Duplicate Vehicle", + text=f"Custom vehicle '{new_name}' already exists.", + buttons=["OK"], + dialogType=MessageBoxType.Warning, + ).exec() return self.custom_vehicles.pop(name) @@ -429,14 +450,14 @@ def _edit_custom_vehicle(self, name): self.custom_vehicles[name] = new_data def _delete_custom_vehicle(self, name): - msg = QMessageBox(self) - msg.setWindowTitle("Delete Vehicle") - msg.setText(f"Delete custom vehicle '{name}'?") - msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) - msg.setStyleSheet("QLabel { color: black; font-size: 12px; } QPushButton { min-width: 70px; font-size: 11px; }") - reply = msg.exec() - - if reply == QMessageBox.Yes: + reply = CustomMessageBox( + title="Delete Vehicle", + text=f"Delete custom vehicle '{name}'?", + buttons=["Yes", "No"], + dialogType=MessageBoxType.Warning, + ).exec() + + if reply == "Yes": self.custom_vehicles.pop(name, None) for row in range(self.custom_vehicle_table.rowCount()): @@ -453,6 +474,7 @@ def _delete_custom_vehicle(self, name): self._update_custom_vehicle_table_height() self._update_custom_vehicle_box_height() self._update_braking_vehicles_section() + self._update_custom_vehicle_header() def reset_defaults(self): """Reset Live Load inputs to schema default values""" @@ -478,6 +500,7 @@ def reset_defaults(self): self._update_custom_vehicle_table_height() self._update_custom_vehicle_box_height() self._update_braking_vehicles_section() + self._update_custom_vehicle_header() braking_section = next((s for s in self.schema.get("sections", []) if s.get("id") == "braking_section"), None) if braking_section: @@ -498,6 +521,15 @@ def _update_custom_vehicle_table_height(self): total_height = min(total_height, 150) self.custom_vehicle_table.setFixedHeight(total_height) + def _update_custom_vehicle_header(self): + has_vehicles = self.custom_vehicle_table.rowCount() > 0 + if has_vehicles: + self.custom_vehicle_header_label.setVisible(True) + self.owner.custom_vehicle_add_button.setText("Add") + else: + self.custom_vehicle_header_label.setVisible(False) + self.owner.custom_vehicle_add_button.setText("Add Custom Vehicle") + def _update_custom_vehicle_box_height(self): """Update the custom vehicle box height based on content""" rows = self.custom_vehicle_table.rowCount() diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py index f91ec3773..8f6925c61 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/load_combination_tab.py @@ -18,6 +18,7 @@ from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( LOAD_COMBINATION_TAB_SCHEMA, ) @@ -34,6 +35,8 @@ def __init__(self, owner): def _build_ui(self): owner = self.owner + schema = LOAD_COMBINATION_TAB_SCHEMA + self.setStyleSheet("background-color: #f5f5f5;") page_layout = QVBoxLayout(self) page_layout.setContentsMargins(12, 12, 12, 12) @@ -43,25 +46,110 @@ def _build_ui(self): content_row.setContentsMargins(0, 0, 0, 0) content_row.setSpacing(16) - heading_style = "font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;" + left_container = QWidget() + left_container.setStyleSheet("background-color: transparent;") + left_layout = QVBoxLayout(left_container) + left_layout.setContentsMargins(0, 0, 0, 0) + left_layout.setSpacing(16) + + # Build sections from schema + for section in schema.get("sections", []): + if section["type"] == "dynamic_checkbox_list": + section_widget = self._build_dynamic_checkbox_section(section) + elif section["type"] == "custom_load_combo_table": + section_widget = self._build_custom_combo_section(section) + else: + section_widget = owner._build_section(section, schema) + left_layout.addWidget(section_widget) + + left_layout.addStretch() - left_card = owner._create_card() - left_card.setStyleSheet( - "QFrame { border: 1px solid #b2b2b2; border-radius: 10px; background-color: #ffffff; }" - ) - left_layout = QVBoxLayout(left_card) - left_layout.setContentsMargins(16, 16, 16, 16) - left_layout.setSpacing(10) + right_card = owner._create_card() + right_card.setStyleSheet("QFrame { border: 1px solid #9c9c9c; border-radius: 10px; background-color: #c8c8c8; }") + right_card.setMinimumWidth(270) + right_card.setMinimumHeight(360) + right_layout = QVBoxLayout(right_card) + right_layout.setContentsMargins(18, 18, 18, 18) + right_layout.setSpacing(12) + description_label = QLabel("Description Box") + description_label.setAlignment(Qt.AlignCenter) + description_label.setStyleSheet("font-size: 12px; font-weight: 700; color: #000000;") + description_label.setMinimumHeight(320) + right_layout.addWidget(description_label) - title = QLabel("Load Combination Inputs") - title.setStyleSheet(heading_style) - left_layout.addWidget(title) + content_row.addWidget(left_container, 3) + content_row.addWidget(right_card, 2) + page_layout.addLayout(content_row) - controls_row = self._build_controls_row() - left_layout.addLayout(controls_row) + owner.load_combo_add_btn.clicked.connect(self._on_add_load_combo) + self.edit_btn.clicked.connect(self._on_edit_load_combo) + self.delete_btn.clicked.connect(self._on_delete_load_combo) + + self.load_combo_table.itemSelectionChanged.connect(self._on_table_selection_changed) + self._refresh_load_combo_table() + + def _build_dynamic_checkbox_section(self, section): + from PySide6.QtWidgets import QFrame + frame = QFrame() + frame.setStyleSheet("QFrame { border: 1px solid #b2b2b2; border-radius: 6px; background-color: #ffffff; }") + layout = QVBoxLayout(frame) + layout.setContentsMargins(12, 12, 12, 12) + layout.setSpacing(10) + + title = QLabel(section.get("title", "")) + title.setStyleSheet("font-size: 11px; font-weight: bold; color: #2b2b2b; border: none;") + layout.addWidget(title) + + self.irc_content_layout = QVBoxLayout() + layout.addLayout(self.irc_content_layout) + + self.irc_placeholder = QWidget() + self.irc_placeholder.setMinimumHeight(100) + self.irc_placeholder.setStyleSheet("border: none;") + self.irc_content_layout.addWidget(self.irc_placeholder) + + return frame + + def _build_custom_combo_section(self, section_config): + from PySide6.QtWidgets import QFrame + frame = QFrame() + frame.setStyleSheet("QFrame { border: 1px solid #b2b2b2; border-radius: 6px; background-color: #ffffff; }") + layout = QVBoxLayout(frame) + layout.setContentsMargins(12, 12, 12, 12) + layout.setSpacing(10) + + header_row = QHBoxLayout() + self.custom_combo_title = QLabel(section_config.get("title", "")) + self.custom_combo_title.setStyleSheet("font-size: 11px; font-weight: bold; color: #2b2b2b; border: none;") + self.custom_combo_title.setVisible(bool(self.load_combo_items)) + header_row.addWidget(self.custom_combo_title) + + button_style = ( + "QPushButton { background: #ffffff; border: 1px solid #a0a0a0; border-radius: 3px; " + "padding: 4px 10px; font-size: 11px; color: #2a2a2a; }" + "QPushButton:hover { background: #f0f0f0; }" + "QPushButton:pressed { background: #e0e0e0; }" + ) + add_btn = QPushButton("Add Custom Combination") + add_btn.setStyleSheet(button_style) + setattr(self.owner, section_config["add_button_bind"], add_btn) + header_row.addWidget(add_btn) + + self.edit_btn = QPushButton("Modify") + self.edit_btn.setStyleSheet(button_style) + self.edit_btn.setVisible(False) + header_row.addWidget(self.edit_btn) + + self.delete_btn = QPushButton("Delete") + self.delete_btn.setStyleSheet(button_style) + self.delete_btn.setVisible(False) + header_row.addWidget(self.delete_btn) + + header_row.addStretch() + layout.addLayout(header_row) self.load_combo_table = QTableWidget(0, 3) - self.load_combo_table.setHorizontalHeaderLabels(["Sr. No.", "Combination Name", "Include"]) + self.load_combo_table.setHorizontalHeaderLabels(["S.No.", "Combination Name", "Include"]) self.load_combo_table.verticalHeader().setDefaultSectionSize(40) self.load_combo_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed) @@ -112,58 +200,10 @@ def _build_ui(self): self.load_combo_table.setMaximumHeight(260) self.load_combo_table.setAlternatingRowColors(False) - left_layout.addWidget(self.load_combo_table) - left_layout.addStretch() - - right_card = owner._create_card() - right_card.setStyleSheet( - "QFrame { border: 1px solid #9c9c9c; border-radius: 10px; background-color: #c8c8c8; }" - ) - right_card.setMinimumWidth(270) - right_card.setMinimumHeight(360) - right_layout = QVBoxLayout(right_card) - right_layout.setContentsMargins(18, 18, 18, 18) - right_layout.setSpacing(12) - description_label = QLabel("Description Box") - description_label.setAlignment(Qt.AlignCenter) - description_label.setStyleSheet("font-size: 12px; font-weight: 700; color: #000000;") - description_label.setMinimumHeight(320) - right_layout.addWidget(description_label) - - content_row.addWidget(left_card, 3) - content_row.addWidget(right_card, 2) - - page_layout.addLayout(content_row) - - owner.load_combo_add_btn.clicked.connect(self._on_add_load_combo) - owner.load_combo_edit_btn.clicked.connect(self._on_edit_load_combo) - owner.load_combo_delete_btn.clicked.connect(self._on_delete_load_combo) - - self._refresh_load_combo_table() - - def _build_controls_row(self): - schema = LOAD_COMBINATION_TAB_SCHEMA - controls_row = QHBoxLayout() - controls_row.setSpacing(6) + layout.addWidget(self.load_combo_table) + setattr(self.owner, section_config["bind"], self.load_combo_table) - button_style = ( - "QPushButton { background: #ffffff; border: 1px solid #a0a0a0; border-radius: 3px; " - "padding: 4px 10px; font-size: 11px; color: #2a2a2a; }" - "QPushButton:hover { background: #f0f0f0; }" - "QPushButton:pressed { background: #e0e0e0; }" - ) - - for btn_config in schema["controls"]: - if btn_config["label"] == "Default": - continue - btn = QPushButton(btn_config["label"]) - btn.setFixedWidth(btn_config["width"]) - btn.setStyleSheet(button_style) - setattr(self.owner, btn_config["bind"], btn) - controls_row.addWidget(btn) - - controls_row.addStretch() - return controls_row + return frame def _get_default_combos(self): return [] @@ -171,13 +211,19 @@ def _get_default_combos(self): def _refresh_load_combo_table(self): if not hasattr(self, "load_combo_table"): return + + has_items = bool(self.load_combo_items) + if hasattr(self, "custom_combo_title"): + self.custom_combo_title.setVisible(has_items) self.load_combo_table.setRowCount(0) - if not self.load_combo_items: - self.load_combo_table.setFixedHeight(180) + if not has_items: + self.load_combo_table.setVisible(False) return + self.load_combo_table.setVisible(True) + for idx, combo in enumerate(self.load_combo_items): row_idx = self.load_combo_table.rowCount() @@ -241,6 +287,13 @@ def _get_included_load_combos(self): included.append(row_idx) return included + def _on_table_selection_changed(self): + has_selection = bool(self.load_combo_table.selectedItems()) + if hasattr(self, 'edit_btn'): + self.edit_btn.setVisible(has_selection) + if hasattr(self, 'delete_btn'): + self.delete_btn.setVisible(has_selection) + def _on_add_load_combo(self): data = self._open_load_combo_dialog() if data: @@ -290,11 +343,14 @@ def _open_load_combo_dialog(self, existing=None): main_layout.addWidget(separator) content_widget = QWidget(dialog) + content_widget.setObjectName("LoadCombinationContent") main_layout.addWidget(content_widget, 1) dialog.setStyleSheet(""" - QDialog#LoadCombinationDialog { + QDialog#LoadCombinationDialog, QWidget#LoadCombinationContent { background-color: #ffffff; + } + QDialog#LoadCombinationDialog { border: 1px solid rgba(144, 175, 19, 140); border-radius: 4px; } @@ -339,9 +395,7 @@ def _open_load_combo_dialog(self, existing=None): layout.addLayout(name_row) input_section = QFrame() - input_section.setStyleSheet( - "QFrame { border: 1px solid #c0c0c0; border-radius: 4px; background-color: #f8f8f8; padding: 8px; }" - ) + input_section.setStyleSheet("QFrame { border: none; background-color: transparent; }") input_section_layout = QVBoxLayout(input_section) input_section_layout.setContentsMargins(12, 12, 12, 12) input_section_layout.setSpacing(10) @@ -352,7 +406,21 @@ def _open_load_combo_dialog(self, existing=None): load_case_label = QLabel("Load Case:") load_case_label.setStyleSheet(label_style) load_case_combo = QComboBox() - load_case_combo.addItems(["DL", "SIDL", "LL", "WL", "EL", "IMF", "TL"]) + + base_items = ["DL", "DW", "SIDL", "LL", "WL", "EL", "TL"] + custom_items = [] + if hasattr(self.owner, "custom_load_items"): + for item in self.owner.custom_load_items: + case = item.get("load_case", "") + if case == "Custom": + custom_name = item.get("custom_load_case_name", "") + if custom_name and custom_name not in custom_items and custom_name not in base_items: + custom_items.append(custom_name) + elif case and case not in custom_items and case not in base_items: + custom_items.append(case) + + load_case_combo.addItems(base_items + custom_items) + load_case_combo.setMinimumWidth(100) apply_field_style(load_case_combo) @@ -382,7 +450,7 @@ def _open_load_combo_dialog(self, existing=None): table_container_layout.setSpacing(10) table = QTableWidget(0, 3) - table.setHorizontalHeaderLabels(["Sr.No", "Load Case", "Partial Safety Factor"]) + table.setHorizontalHeaderLabels(["S.No", "Load Case", "Partial Safety Factor"]) table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed) table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) @@ -587,6 +655,18 @@ def load_existing(): def on_save(): name_text = name_input.text().strip() or "Load Combination" + + # Prevent duplicate names + existing_names = [item.get("name") for item in self.load_combo_items if item != existing] + if name_text in existing_names: + CustomMessageBox( + title="Duplicate Name", + text=f"A load combination with the name '{name_text}' already exists. Please choose a different name.", + buttons=["OK"], + dialogType=MessageBoxType.Warning, + ).exec() + return + rows = [] for row_idx in range(table.rowCount()): diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/permanent_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/permanent_load_tab.py index 66e7582a9..a57a165da 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/permanent_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/permanent_load_tab.py @@ -163,22 +163,6 @@ def _create_field_widget(self, field_def): return widget - def update_dependency_states(self, has_median: bool, has_footpath: bool): - """ - Enable/disable load options based on basic inputs - """ - # Median dependency - if hasattr(self, 'include_median_combo'): - self.include_median_combo.setEnabled(has_median) - if not has_median: - self.include_median_combo.setCurrentText("No") - - # Railing dependency - if hasattr(self, 'include_railing_combo'): - self.include_railing_combo.setEnabled(has_footpath) - if not has_footpath: - self.include_railing_combo.setCurrentText("No") - def reset_defaults(self): """Reset Permanent Load inputs to default values""" schema = PERMANENT_LOAD_TAB_SCHEMA diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/seismic_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/seismic_load_tab.py index f391e7e8d..8fc259d80 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/seismic_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/seismic_load_tab.py @@ -109,7 +109,8 @@ def _build_ui(self): bind_name = field.get("bind") if bind_name: setattr(self, bind_name, widget) - + + # Seismic zone combo (if configured as combo) is derived from project location output. row_layout.addWidget(widget) elif field_type == "line": @@ -122,6 +123,13 @@ def _build_ui(self): bind_name = field.get("bind") if bind_name: setattr(self, bind_name, widget) + + if field.get("id") == "seismic_zone": + widget.setReadOnly(True) + widget.setToolTip("Auto-filled from software output (project location seismic zone)") + + if not field.get("enabled", True): + widget.setEnabled(False) row_layout.addWidget(widget) @@ -258,8 +266,12 @@ def _build_ui(self): self._apply_seismic_defaults() self._toggle_seismic_custom_inputs() - if hasattr(self.owner, "project_seismic_zone"): - self.seismic_zone_combo.setCurrentText(self.owner.project_seismic_zone) + if hasattr(self.owner, "project_seismic_zone") and hasattr(self, "seismic_zone_combo"): + zone_val = str(self.owner.project_seismic_zone) + if isinstance(self.seismic_zone_combo, QComboBox): + self.seismic_zone_combo.setCurrentText(zone_val) + elif isinstance(self.seismic_zone_combo, QLineEdit): + self.seismic_zone_combo.setText(zone_val) def _apply_seismic_defaults(self): """Apply default values from schema""" @@ -298,4 +310,25 @@ def _toggle_seismic_custom_inputs(self): def reset_defaults(self): """Reset Seismic Load inputs to schema default values""" self._apply_seismic_defaults() - self._toggle_seismic_custom_inputs() \ No newline at end of file + self._toggle_seismic_custom_inputs() + + def update_project_location(self, location_data): + if not location_data: + return + + weather = location_data.get("weather_data") + if weather: + zone = weather.get("zone") + z_val = weather.get("z_value") + + if zone is not None and hasattr(self, "seismic_zone_combo"): + if isinstance(self.seismic_zone_combo, QComboBox): + # Check if 'zone' text exists in choices, avoiding errors + idx = self.seismic_zone_combo.findText(str(zone)) + if idx >= 0: + self.seismic_zone_combo.setCurrentIndex(idx) + elif isinstance(self.seismic_zone_combo, QLineEdit): + self.seismic_zone_combo.setText(str(zone)) + + if z_val is not None and "zone_factor" in getattr(self, "seismic_computed_fields", {}): + self.seismic_computed_fields["zone_factor"].setText(str(z_val)) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/temperature_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/temperature_load_tab.py index 1e601907f..a64043c8a 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/temperature_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/temperature_load_tab.py @@ -94,7 +94,10 @@ def _build_ui(self): validator_config.get("decimals", 2), input_widget ) - validator.setNotation(QDoubleValidator.StandardNotation) + if validator_config.get("notation") == "scientific": + validator.setNotation(QDoubleValidator.ScientificNotation) + else: + validator.setNotation(QDoubleValidator.StandardNotation) input_widget.setValidator(validator) elif validator_config["type"] == "int_range": validator = QIntValidator( @@ -107,6 +110,9 @@ def _build_ui(self): if field.get("read_only", False): input_widget.setReadOnly(True) input_widget.setStyleSheet(readonly_input_style) + + if not field.get("enabled", True): + input_widget.setEnabled(False) bind_name = field.get("bind") if bind_name: @@ -130,7 +136,8 @@ def _build_ui(self): right_layout.setContentsMargins(16, 16, 16, 16) right_layout.setSpacing(10) - desc_title = QLabel("Description Box") + description = schema.get("description", {}) + desc_title = QLabel(description.get("title", "Description Box")) desc_title.setAlignment(Qt.AlignCenter) desc_title.setStyleSheet( "font-size: 12px; font-weight: 700; color: #2b2b2b; background: transparent; border: none;" @@ -141,4 +148,18 @@ def _build_ui(self): content_row.addWidget(left_card, 3) content_row.addWidget(right_card, 2) - page_layout.addLayout(content_row) \ No newline at end of file + page_layout.addLayout(content_row) + + def update_project_location(self, location_data): + if not location_data: + return + + weather = location_data.get("weather_data") + if weather: + max_t = weather.get("max_temp") + min_t = weather.get("min_temp") + + if max_t is not None and hasattr(self.owner, "highest_max_temp_input"): + self.owner.highest_max_temp_input.setText(str(max_t)) + if min_t is not None and hasattr(self.owner, "lowest_min_temp_input"): + self.owner.lowest_min_temp_input.setText(str(min_t)) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/wind_load_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/wind_load_tab.py index f217a476d..1ba132346 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/wind_load_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/loading/wind_load_tab.py @@ -70,7 +70,7 @@ def _build_ui(self): section_type = section.get("type") section_id = section.get("id") - if section_type == "input_group" and section_id == "wind_inputs_section": + if section_type == "input_group": wind_inputs_box = QFrame() wind_inputs_box.setStyleSheet(""" QFrame { @@ -90,6 +90,7 @@ def _build_ui(self): for field in section.get("fields", []): field_type = field.get("type") + field_id = field.get("id") row_layout = QHBoxLayout() row_layout.setSpacing(10) @@ -111,6 +112,14 @@ def _build_ui(self): bind_name = field.get("bind") if bind_name: setattr(owner, bind_name, widget) + + if field.get("read_only"): + widget.setReadOnly(True) + if field_id == "basic_wind_speed": + widget.setToolTip("Auto-filled from software output (project location wind speed)") + + if not field.get("enabled", True): + widget.setEnabled(False) row_layout.addWidget(widget) @@ -119,7 +128,8 @@ def _build_ui(self): widget.addItems(field.get("choices", [])) if field.get("default"): widget.setCurrentText(field.get("default")) - widget.setFixedSize(COMBO_WIDTH, FIELD_HEIGHT) + combo_width = COMBO_WIDTH + widget.setFixedSize(combo_width, FIELD_HEIGHT) apply_field_style(widget) bind_name = field.get("bind") @@ -327,4 +337,15 @@ def reset_defaults(self): value_input.setEnabled(False) - self._block(mode_combos, False) \ No newline at end of file + self._block(mode_combos, False) + + def update_project_location(self, location_data): + if not location_data: + return + + weather = location_data.get("weather_data") + if weather: + wind = weather.get("wind_speed") + + if wind is not None and hasattr(self.owner, "basic_wind_speed_input"): + self.owner.basic_wind_speed_input.setText(str(wind)) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index fd2c0c104..4fdd3cc54 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -751,6 +751,11 @@ def _show_additional_inputs_dialog(self, target_tab_name=None): self.additional_inputs = AdditionalInputs(footpath_value, carriageway_width) self.additional_inputs_widget = self.additional_inputs + + # Propagate project location data to additional inputs (for Temperature Load etc) + location_data = self.backend.get_input_value(KEY_PROJECT_LOCATION) if hasattr(self.backend, "get_input_value") else None + if location_data and hasattr(self.additional_inputs, 'update_project_location'): + self.additional_inputs.update_project_location(location_data) # Restore previously saved dialog state (includes stiffener details). if isinstance(getattr(self, "_additional_inputs_saved_data", None), dict) and self._additional_inputs_saved_data: From 754ec2f2c96352a47a4ac0a5b2d6f122b963d9b9 Mon Sep 17 00:00:00 2001 From: Manav Sharma Date: Mon, 16 Mar 2026 17:35:09 +0530 Subject: [PATCH 082/225] Added Dead Load Cases Removed Waste Files Sucessfully updated the logic of overhang with correct naming Connected the Analyser and Analysis_Result File Via The Help of Instance Added Reaction And Verification Added A Verification Table Added Consistency To Data Corrected the Logic For finding the reaction of moving load case --- .gitignore | 1 + .../bridge_types/plate_girder/analyser.py | 17 +- .../plate_girder/analysis_results.py | 331 ++++++++++++++---- 3 files changed, 278 insertions(+), 71 deletions(-) diff --git a/.gitignore b/.gitignore index b4add9f52..834cec667 100644 --- a/.gitignore +++ b/.gitignore @@ -79,6 +79,7 @@ local_settings.py # Project-specific temp files temp_plot.html *.html +mat_lib.json src/osdag_map_cache/ /osdag_map_cache/ diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index 5af777f15..f30afafa8 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -329,7 +329,12 @@ def create_model(self): self.model.set_member(self.longitudinal_beam, member="interior_main_beam") self.model.set_member(self.longitudinal_beam, member="exterior_main_beam_1") self.model.set_member(self.longitudinal_beam, member="exterior_main_beam_2") - self.model.set_member(self.edge_longitudinal_beam, member="edge_beam") + + # Assign edge properties only if overhang exists; otherwise treat as normal girders + if self.edge_dist > 0: + self.model.set_member(self.edge_longitudinal_beam, member="edge_beam") + else: + self.model.set_member(self.longitudinal_beam, member="edge_beam") self.model.set_member(self.transverse_slab, member="transverse_slab") self.model.set_member(self.end_transverse_slab, member="start_edge") self.model.set_member(self.end_transverse_slab, member="end_edge") @@ -1324,7 +1329,7 @@ def plot(self, model=None): L=33.5 * m, n_l=7, n_t=11, - edge_dist=0 * m, + edge_dist=0 * m, # 0-consider edge , else not overhang-edgebeams ext_to_int_dist=2.2775 * m, angle=0, carriageway_width=10.0 * m, @@ -1403,10 +1408,12 @@ def plot(self, model=None): result_handler = PlateGirderAnalysisResults( dataset=results, - model=bridge.model, + bridge=bridge, edge_dist=bridge.edge_dist ) - # result_handler.debug_loadcase_detection() + result_handler.run_interactive_viewer() - # result_handler.print_moving_load_trace() \ No newline at end of file + + # result_handler.print_moving_load_trace() + diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py index 6b0293499..6ca2bdad6 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analysis_results.py @@ -17,9 +17,10 @@ class PlateGirderAnalysisResults: # ======================================================== # INITIALIZATION # ======================================================== - def __init__(self, dataset, model, edge_dist=0): # storing analysis result + def __init__(self, dataset, bridge, edge_dist=0): # storing analysis result self.ds = dataset - self.model = model + self.bridge = bridge + self.model = getattr(bridge, 'model', None) self.edge_dist = edge_dist # ======================================================== @@ -47,7 +48,30 @@ def get_available_loadcases(self): # get loadcases return list(self.ds.coords["Loadcase"].values) # ======================================================== - # LOADCASE CLASSIFICATION + # LOADCASE CLASSIFICATION AND DISPLAY + # ======================================================== + def print_load_availability(self): + """ + Prints a summarized view of available load cases/categories. + """ + lc_groups = self.classify_loadcases() + print("\nAvailable Load Categories:") + if lc_groups["dead"]: + print(f"- Dead Loads: {', '.join(lc_groups['dead'])}") + if lc_groups["vehicle_static"]: + unique_statics = sorted(list(set(lc_groups["vehicle_static"]))) + print(f"- Static Vehicles: {', '.join(unique_statics)}") + + if lc_groups["vehicle_moving"]: + # Moving cases have many positions, extract unique base names + moving_cases = [] + for lc in lc_groups["vehicle_moving"]: + base_name = lc.split(" at global position ")[0] if " at global position " in str(lc) else str(lc) + moving_cases.append(base_name) + + unique_moving = sorted(list(set(moving_cases))) + print(f"- Moving Vehicles: {', '.join(unique_moving)} (Total positions: {len(lc_groups['vehicle_moving'])})") + def classify_loadcases(self): all_lc = self.get_available_loadcases() @@ -254,15 +278,12 @@ def build_girders(self, verbose=True): for i, (s, e) in enumerate(all_pairs, start=1): # --- NAMING LOGIC --- + name = f"G{i}" if self.edge_dist > 0: if i == 1: name = "EB1" elif i == num_pairs: name = "EB2" - else: - name = f"G{i - 1}" - else: - name = f"G{i}" path = self.bfs_shortest_path(adj, s, e) path_elements, element_map = self.get_elements_along_path(path, elements) @@ -297,16 +318,7 @@ def build_girders(self, verbose=True): return girder_map, elements def filter_girders(self, girder_map): - if self.edge_dist > 0: - # If there's an overhang, show everything (EB1, G1...Gn, EB2) - return girder_map - else: - # If no overhang (dist=0), hide the physical edge girders (G1 and Gn) - keys = list(girder_map.keys()) - if len(keys) <= 2: - return girder_map - filtered_keys = keys[1:-1] - return {k: girder_map[k] for k in filtered_keys} + return girder_map # ======================================================== # PRINT MOVING LOAD TRACE @@ -372,23 +384,25 @@ def to_list(val): # 5. Get results for this girder and loadcase try: - subset = self.ds.sel(Loadcase=lc, Element=elements) + subset = self.ds.sel(Loadcase=lc, Element=elements).copy() + + # Extract values and create DataFrame df = pd.DataFrame({ "Element": elements, - "Vx_i": subset.sel(Component="Vx_i")["forces"].values, - "Vx_j": subset.sel(Component="Vx_j")["forces"].values, - "Vy_i": subset.sel(Component="Vy_i")["forces"].values, - "Vy_j": subset.sel(Component="Vy_j")["forces"].values, - "Vz_i": subset.sel(Component="Vz_i")["forces"].values, - "Vz_j": subset.sel(Component="Vz_j")["forces"].values, - "Mx_i": subset.sel(Component="Mx_i")["forces"].values, - "Mx_j": subset.sel(Component="Mx_j")["forces"].values, - "My_i": subset.sel(Component="My_i")["forces"].values, - "My_j": subset.sel(Component="My_j")["forces"].values, - "Mz_i": subset.sel(Component="Mz_i")["forces"].values, - "Mz_j": subset.sel(Component="Mz_j")["forces"].values, + "Vx_i (kN)": subset.sel(Component="Vx_i")["forces"].values / 1000, + "Vx_j (kN)": subset.sel(Component="Vx_j")["forces"].values / 1000, + "Vy_i (kN)": subset.sel(Component="Vy_i")["forces"].values / 1000, + "Vy_j (kN)": subset.sel(Component="Vy_j")["forces"].values / 1000, + "Vz_i (kN)": subset.sel(Component="Vz_i")["forces"].values / 1000, + "Vz_j (kN)": subset.sel(Component="Vz_j")["forces"].values / 1000, + "Mx_i (kNm)": subset.sel(Component="Mx_i")["forces"].values / 1000, + "Mx_j (kNm)": subset.sel(Component="Mx_j")["forces"].values / 1000, + "My_i (kNm)": subset.sel(Component="My_i")["forces"].values / 1000, + "My_j (kNm)": subset.sel(Component="My_j")["forces"].values / 1000, + "Mz_i (kNm)": subset.sel(Component="Mz_i")["forces"].values / 1000, + "Mz_j (kNm)": subset.sel(Component="Mz_j")["forces"].values / 1000, }) print(df.to_string(index=False)) @@ -439,11 +453,16 @@ def to_list(val): if g_filter and girder_name not in g_filter: continue + if self.edge_dist > 0 and girder_name in ["EB1", "EB2"]: + continue # dont calculate it for calculating other values + elements = girder_data["elements"] try: # Select ONLY this loadcase and elements for this girder - subset = self.ds.sel(Loadcase=lc, Element=elements) + subset = self.ds.sel(Loadcase=lc, Element=elements).copy() + + # --- Vy Envelope --- vy_i = subset.sel(Component="Vy_i")["forces"] @@ -472,80 +491,80 @@ def to_list(val): # Compute max/min for Vy mxi, mxj = float(vy_i.max()), float(vy_j.max()) if mxi >= mxj: - v_max, v_max_e = mxi, int(vy_i.idxmax()) + v_max, v_max_e = mxi / 1000, int(vy_i.idxmax()) else: - v_max, v_max_e = mxj, int(vy_j.idxmax()) + v_max, v_max_e = mxj / 1000, int(vy_j.idxmax()) mni, mnj = float(vy_i.min()), float(vy_j.min()) if mni <= mnj: - v_min, v_min_e = mni, int(vy_i.idxmin()) + v_min, v_min_e = mni / 1000, int(vy_i.idxmin()) else: - v_min, v_min_e = mnj, int(vy_j.idxmin()) + v_min, v_min_e = mnj / 1000, int(vy_j.idxmin()) # Compute max/min for Vx mx_i_val, mx_j_val = float(vx_i.max()), float(vx_j.max()) if mx_i_val >= mx_j_val: - vx_max, vx_max_e = mx_i_val, int(vx_i.idxmax()) + vx_max, vx_max_e = mx_i_val / 1000, int(vx_i.idxmax()) else: - vx_max, vx_max_e = mx_j_val, int(vx_j.idxmax()) + vx_max, vx_max_e = mx_j_val / 1000, int(vx_j.idxmax()) mn_i_val, mn_j_val = float(vx_i.min()), float(vx_j.min()) if mn_i_val <= mn_j_val: - vx_min, vx_min_e = mn_i_val, int(vx_i.idxmin()) + vx_min, vx_min_e = mn_i_val / 1000, int(vx_i.idxmin()) else: - vx_min, vx_min_e = mn_j_val, int(vx_j.idxmin()) + vx_min, vx_min_e = mn_j_val / 1000, int(vx_j.idxmin()) # Compute max/min for Vz mz_i_val, mz_j_val = float(vz_i.max()), float(vz_j.max()) if mz_i_val >= mz_j_val: - vz_max, vz_max_e = mz_i_val, int(vz_i.idxmax()) + vz_max, vz_max_e = mz_i_val / 1000, int(vz_i.idxmax()) else: - vz_max, vz_max_e = mz_j_val, int(vz_j.idxmax()) + vz_max, vz_max_e = mz_j_val / 1000, int(vz_j.idxmax()) mnz_i_val, mnz_j_val = float(vz_i.min()), float(vz_j.min()) if mnz_i_val <= mnz_j_val: - vz_min, vz_min_e = mnz_i_val, int(vz_i.idxmin()) + vz_min, vz_min_e = mnz_i_val / 1000, int(vz_i.idxmin()) else: - vz_min, vz_min_e = mnz_j_val, int(vz_j.idxmin()) + vz_min, vz_min_e = mnz_j_val / 1000, int(vz_j.idxmin()) # Compute max/min for Mx mx_i_val, mx_j_val = float(mx_i.max()), float(mx_j.max()) if mx_i_val >= mx_j_val: - mx_max, mx_max_e = mx_i_val, int(mx_i.idxmax()) + mx_max, mx_max_e = mx_i_val / 1000, int(mx_i.idxmax()) else: - mx_max, mx_max_e = mx_j_val, int(mx_j.idxmax()) + mx_max, mx_max_e = mx_j_val / 1000, int(mx_j.idxmax()) mnx_i_val, mnx_j_val = float(mx_i.min()), float(mx_j.min()) if mnx_i_val <= mnx_j_val: - mx_min, mx_min_e = mnx_i_val, int(mx_i.idxmin()) + mx_min, mx_min_e = mnx_i_val / 1000, int(mx_i.idxmin()) else: - mx_min, mx_min_e = mnx_j_val, int(mx_j.idxmin()) + mx_min, mx_min_e = mnx_j_val / 1000, int(mx_j.idxmin()) # Compute max/min for My my_i_val, my_j_val = float(my_i.max()), float(my_j.max()) if my_i_val >= my_j_val: - my_max, my_max_e = my_i_val, int(my_i.idxmax()) + my_max, my_max_e = my_i_val / 1000, int(my_i.idxmax()) else: - my_max, my_max_e = my_j_val, int(my_j.idxmax()) + my_max, my_max_e = my_j_val / 1000, int(my_j.idxmax()) mny_i_val, mny_j_val = float(my_i.min()), float(my_j.min()) if mny_i_val <= mny_j_val: - my_min, my_min_e = mny_i_val, int(my_i.idxmin()) + my_min, my_min_e = mny_i_val / 1000, int(my_i.idxmin()) else: - my_min, my_min_e = mny_j_val, int(my_j.idxmin()) + my_min, my_min_e = mny_j_val / 1000, int(my_j.idxmin()) # Compute max/min for Mz mmxi, mmxj = float(mz_i.max()), float(mz_j.max()) if mmxi >= mmxj: - m_max, m_max_e = mmxi, int(mz_i.idxmax()) + m_max, m_max_e = mmxi / 1000, int(mz_i.idxmax()) else: - m_max, m_max_e = mmxj, int(mz_j.idxmax()) + m_max, m_max_e = mmxj / 1000, int(mz_j.idxmax()) mmni, mmnj = float(mz_i.min()), float(mz_j.min()) if mmni <= mmnj: - m_min, m_min_e = mmni, int(mz_i.idxmin()) + m_min, m_min_e = mmni / 1000, int(mz_i.idxmin()) else: - m_min, m_min_e = mmnj, int(mz_j.idxmin()) + m_min, m_min_e = mmnj / 1000, int(mz_j.idxmin()) # Group results by element to avoid redundant rows crit_eles = defaultdict( @@ -671,9 +690,13 @@ def print_critical_max_state(self): # 3. Search for absolute maximum within selected category for lc in relevant_lcs: for g_name, g_data in girder_map.items(): + if self.edge_dist > 0 and g_name in ["EB1", "EB2"]: + continue # Skip EB1 and EB2 when finding maximum + elements = g_data["elements"] try: - subset = self.ds.sel(Loadcase=lc, Element=elements, Component=comp)["forces"] + subset = self.ds.sel(Loadcase=lc, Element=elements, Component=comp)["forces"].copy() + # Find both max and min in this subset s_max = float(subset.max()) @@ -700,7 +723,7 @@ def print_critical_max_state(self): if crit_lc is None: print("❌ No results found.") - return + return # reactions vy start ra and end rb, point load and line load , point-coordinate,line-start and end print("\n" + "=" * 100) print(" " * 35 + "GLOBAL CRITICAL MAXIMUM SUMMARY") @@ -719,7 +742,7 @@ def print_critical_max_state(self): "Component": comp, "Girder": crit_girder, "Element": crit_ele, - "Value": f"{crit_val:.3f}", + "Value (kN/kNm)": f"{crit_val / 1000:.3f}", "Loadcase (Short)": short_lc, "Position": position_str }] @@ -734,7 +757,9 @@ def print_critical_max_state(self): elements = g_data["elements"] print(f"\n>>> Girder: {g_name}") try: - subset = self.ds.sel(Loadcase=crit_lc, Element=elements) + subset = self.ds.sel(Loadcase=crit_lc, Element=elements).copy() + + vx_i = subset.sel(Component="Vx_i")["forces"].values vx_j = subset.sel(Component="Vx_j")["forces"].values @@ -776,6 +801,145 @@ def print_critical_max_state(self): print("\n" + "=" * 80) + def print_girder_reactions(self, load_case_filter=None, girder_filter=None): + """ + Calculates and prints Ra (shear at start node) and Rb (shear at end node) + for every girder under every selected load case. + + :param load_case_filter: (str or list) Filter load cases by name. + :param girder_filter: (str or list) Filter girders by name. + """ + def to_list(val): + if val is None: return None + return [val] if not isinstance(val, (list, tuple)) else val + + lc_filter = to_list(load_case_filter) + g_filter = to_list(girder_filter) + + all_lcs = self.get_available_loadcases() + + if lc_filter: + all_lcs = [lc for lc in all_lcs if any(str(f).lower() in str(lc).lower() for f in lc_filter)] + + if not all_lcs: + print("❌ No load cases matched the filter.") + return + + girder_map, _ = self.build_girders(verbose=False) + girder_map = self.filter_girders(girder_map) + + print("\n" + "=" * 60) + print(" " * 15 + "GIRDER REACTIONS (Ra, Rb) SUMMARY") + print("=" * 60) + + for lc in all_lcs: + print(f"\n>>> Load Case: {lc}") + + rows = [] + for g_name, g_data in girder_map.items(): + if g_filter and g_name not in g_filter: + continue + + element_map = g_data["element_map"] + if not element_map: + continue + + # First element: Ra is at the start node n1 + eid_start, n1_start, _ = element_map[0] + # Last element: Rb is at the end node n2 + eid_end, _, n2_end = element_map[-1] + + try: + # Identify components based on element connectivity in OpenSees + # ops.eleNodes(eid) returns [iNode, jNode] + nodes_start = ops.eleNodes(eid_start) + comp_ra = "Vy_i" if n1_start == nodes_start[0] else "Vy_j" + + nodes_end = ops.eleNodes(eid_end) + comp_rb = "Vy_j" if n2_end == nodes_end[1] else "Vy_i" + + # Fetch raw values from dataset (divide by 1000 for kN) + ra_val = float(self.ds.sel(Loadcase=lc, Element=eid_start, Component=comp_ra)["forces"]) / 1000 + # Rb is usually shown as negative at the end of a girder in SFDs + rb_val = -float(self.ds.sel(Loadcase=lc, Element=eid_end, Component=comp_rb)["forces"]) / 1000 + + + rows.append({ + "Girder": g_name, + "Ra (kN)": f"{ra_val:.3f}", + "Rb (kN)": f"{rb_val:.3f}" + }) + except Exception as e: + rows.append({ + "Girder": g_name, + "Ra (kN)": "ERR", + "Rb (kN)": "N/A" + }) + + if rows: + df = pd.DataFrame(rows) + print(df.to_string(index=False)) + + print("\n" + "=" * 60) + + def verify_sections(self): + """ + Prints the section properties for a sample element of each member type + from the bridge model to verify correct implementation. + """ + print("\n" + "=" * 105) + print(" " * 35 + "SECTION PROPERTIES VERIFICATION LOG") + print("=" * 105) + + # Determine which section attribute was assigned to edge beams based on edge distance + eb_attr_name = "edge_longitudinal_section" if self.edge_dist > 0 else "longitudinal_section" + + # Member categories to check vs the bridge instance attributes + categories = [ + ("Edge Beams (EB)", "edge_beam", eb_attr_name), + ("Interior Girders (G)", "interior_main_beam", "longitudinal_section"), + ("Exterior Girders (G)", "exterior_main_beam_1", "longitudinal_section"), + ("Transverse Slabs", "transverse_slab", "transverse_section") + ] + + rows = [] + for label, m_type, attr_name in categories: + try: + # Find which elements belong to this category + elements = self.bridge.model.get_element(member=m_type, options="elements") + section_obj = getattr(self.bridge, attr_name, None) + + if not elements or section_obj is None: + continue + + eid = elements[0] + + # Extract properties from the ospgrillage section object + rows.append({ + "Girder Category": label, + "Assigned Section Object": f"bridge.{attr_name}", + "Sample ID": eid, + "Area (A)": f"{section_obj.A:.4f}", + "Torsion (J)": f"{section_obj.J:.4f}", + "Iz (strong)": f"{section_obj.Iz:.4f}", + "Iy (weak)": f"{section_obj.Iy:.4f}", + "Az": f"{section_obj.Az:.4f}", + "Ay": f"{section_obj.Ay:.4f}", + }) + + except Exception: + continue + + if rows: + df = pd.DataFrame(rows) + print(df.to_string(index=False)) + else: + print("❌ No section data could be retrieved for verification.") + + print("\n" + "=" * 105) + print(" " * 30 + "End of Verification (Exiting Analysis Tools)") + print("=" * 105) + def run_interactive_viewer(self): while True: @@ -787,12 +951,14 @@ def run_interactive_viewer(self): print("3. Show moving load trace") print("4. Show max/min envelopes") print("5. Show critical maximum state") + print("6. Show girder reactions (Ra, Rb)") print("0. Exit") print("==============================") main_choice = input("Enter choice: ").strip() if main_choice == "0": + self.verify_sections() break # ====================================================== @@ -885,7 +1051,7 @@ def run_interactive_viewer(self): # ================= LOADCASE LOOP ================= while True: - + self.print_load_availability() print("\nSelect Loadcase:") for i, lc in enumerate(loadcases, 1): print(f"{i}. {lc}") @@ -926,7 +1092,7 @@ def run_interactive_viewer(self): comp = component_map[r] - # ---------------- FORCES ---------------- + # ---------------- FORCES / MOMENTS ---------------- res = self.get_beam_element_results( girder_elements, lc, comp ) @@ -937,11 +1103,12 @@ def run_interactive_viewer(self): data = [] for eid, val in res.items(): try: - # Handle potential array values to get a clean scalar - scalar_val = float(val) if val is not None else val + # Handle potential array values to get a clean scalar and convert to kN/kNm + scalar_val = float(val) / 1000 if val is not None else val except (TypeError, ValueError): scalar_val = val - data.append({"Element": eid, comp: scalar_val}) + unit = "kN" if "V" in comp else "kNm" + data.append({"Element": eid, f"{comp} ({unit})": scalar_val}) df = pd.DataFrame(data) print(df.to_string(index=False)) @@ -981,7 +1148,8 @@ def run_interactive_viewer(self): continue # Show available moving load cases - print("\nAvailable Moving Load Categories:") + self.print_load_availability() + print("\nSelect Moving Load Category:") case_types = defaultdict(list) for lc in moving_lcs: parts = lc.split() @@ -1031,7 +1199,8 @@ def run_interactive_viewer(self): print("❌ Invalid selection") continue - lc_input = input("Enter Load Case Filter (e.g. 'ClassA') or leave blank for all: ").strip() + self.print_load_availability() + lc_input = input("\nEnter Load Case Filter (e.g. 'ClassA') or leave blank for all: ").strip() if not lc_input: lc_input = None self.print_envelopes(load_case_filter=lc_input, girder_filter=g_input) @@ -1041,6 +1210,36 @@ def run_interactive_viewer(self): self.print_critical_max_state() continue + elif main_choice == "6": + print("\n--- Girder Reactions Configuration ---") + girder_map, _ = self.build_girders(verbose=False) + girder_map = self.filter_girders(girder_map) + g_list = list(girder_map.keys()) + + print("\nSelect Girder:") + for i, g in enumerate(g_list, 1): + print(f"{i}. {g}") + print(f"{len(g_list)+1}. All Girders") + print("0. Back") + + g_choice = input("Enter choice: ").strip() + if g_choice == "0": continue + + if not g_choice or g_choice == str(len(g_list)+1): + g_input = None + elif g_choice.isdigit() and 1 <= int(g_choice) <= len(g_list): + g_input = g_list[int(g_choice)-1] + else: + print("❌ Invalid selection") + continue + + self.print_load_availability() + lc_input = input("\nEnter Load Case Filter (e.g. 'ClassA' or 'Dead') or leave blank for all: ").strip() + if not lc_input: lc_input = None + + self.print_girder_reactions(load_case_filter=lc_input, girder_filter=g_input) + continue + else: print("❌ Invalid option") From 646f314745bcfccba0f04139770e8dc2285c9be5 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Mon, 30 Mar 2026 19:12:34 +0530 Subject: [PATCH 083/225] Add tonne and change wheel load units from kN to t --- src/osdagbridge/core/utils/codes/irc6_2017.py | 28 +++++++++---------- src/osdagbridge/core/utils/codes/keyfile.py | 3 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/osdagbridge/core/utils/codes/irc6_2017.py b/src/osdagbridge/core/utils/codes/irc6_2017.py index 0a544823c..8564eff12 100644 --- a/src/osdagbridge/core/utils/codes/irc6_2017.py +++ b/src/osdagbridge/core/utils/codes/irc6_2017.py @@ -67,8 +67,8 @@ def cl_204_1_Class70R_vehicle_wheel(): # Mapping to the 7 longitudinal positions in `load_positions_x`. # Values provided by user (converted to kN): # [8, 12, 12, 17, 17, 17, 17] - wheel_loads = [8 * kN, 12 * kN, 12 * kN, 17 * kN, - 17 * kN, 17 * kN, 17 * kN] + wheel_loads = [8 * t, 12 * t, 12 * t, 17 * t, + 17 * t, 17 * t, 17 * t] # Define longitudinal positions of each axle load_positions_x = [ @@ -106,14 +106,14 @@ def cl_204_1_Class70R_vehicle_track(): Returns a dictionary with keys: 'x' - list of longitudinal load positions vertex(m) 'z' - list of transverse load positions vertex(m) - 'wheel_loads' - list of wheel loads (kN) + 'wheel_loads' - list of wheel loads (t) """ # Define units start_vertex_x = 0.0 * m end_vertex_x = 4.570 * m - # Define track loads (kN/m2) - track_loads_udl = 4.32 * kN / m2 + # Define track loads (t/m) + track_loads_udl = 7.66 * t / m # Define longitudinal positions of track vertices load_positions_x = [ @@ -157,8 +157,8 @@ def cl_204_1_ClassA_vehicle(): # Mapping to the 8 longitudinal positions in `load_positions_x`. # Values provided by user (converted to kN): # [2.7, 2.7, 11.4, 11.4, 6.8, 6.8, 6.8, 6.8] - wheel_loads = [2.7 * kN, 2.7 * kN, 11.4 * kN, 11.4 * kN, - 6.8 * kN, 6.8 * kN, 6.8 * kN, 6.8 * kN] + wheel_loads = [2.7 * t, 2.7 * t, 11.4 * t, 11.4 * t, + 6.8 * t, 6.8 * t, 6.8 * t, 6.8 * t] # Define longitudinal positions of each axle load_positions_x = [ @@ -363,18 +363,18 @@ def cl_204_6_fatigue_load(): Returns a dictionary with keys: 'x' - list of longitudinal load positions (m) 'z' - list of transverse load positions (m) - 'wheel_loads' - list of wheel loads (kN) + 'wheel_loads' - list of wheel loads (t) """ # Define units axle_dist1= 4.50 * m axle_dist2= 1.40 * m - # Define wheel loads (kN) for each longitudinal axle position + # Define wheel loads (t) for each longitudinal axle position # Mapping to the 3 longitudinal positions in `load_positions_x`. - # Values provided by user (converted to kN): + # Values provided by user (converted to t): # [12, 14, 14] - wheel_loads = [12 * kN, 14 * kN, 14 * kN] + wheel_loads = [12 * t, 14 * t, 14 * t] # Define longitudinal positions of each axle load_positions_x = [ @@ -826,15 +826,15 @@ def cl_211_2_braking_force(design_lanes): """ Returns braking force as per IRC:6-2017 Clause 211.2. Returns: - float: Braking force in kN (rounded to 3 decimal places) + float: Braking force in t (rounded to 3 decimal places) """ for lane in range(1, design_lanes + 1): if lane == 1 or lane == 2: wheel_load = IRC6_2017.cl_204_1_ClassA_vehicle()['wheel_loads'] - braking_force_1 = 0.20 * sum(wheel_load) # kN + braking_force_1 = 0.20 * sum(wheel_load) # t if lane > 2: wheel_load = IRC6_2017.cl_204_1_Class70R_vehicle_wheel()['wheel_loads'] - braking_force_2 = 0.05 * sum(wheel_load) # kN + braking_force_2 = 0.05 * sum(wheel_load) # t total_braking_force = braking_force_1 + braking_force_2 return round(total_braking_force, 3) diff --git a/src/osdagbridge/core/utils/codes/keyfile.py b/src/osdagbridge/core/utils/codes/keyfile.py index fd9214571..8b2c2d44c 100644 --- a/src/osdagbridge/core/utils/codes/keyfile.py +++ b/src/osdagbridge/core/utils/codes/keyfile.py @@ -3,16 +3,17 @@ milli = 1e-3 N = 1 m = 1 +g = 9.81 mm = milli * m m2 = m ** 2 m3 = m ** 3 m4 = m ** 4 kN = kilo * N +t = kN * g Pa = 1 MPa = N / ((mm) ** 2) GPa = kilo * MPa kPa = kilo * Pa -g = 9.81 # Carriageway Width limits per IRC 5 Clause 104.3.1 CARRIAGEWAY_WIDTH_MIN = 4.25 # No median present From 6398a338c44af94ae4c740cb709b488c01a524b4 Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Mon, 30 Mar 2026 19:54:44 +0530 Subject: [PATCH 084/225] corrected axle geometry for class 70R and class A vehicle --- src/osdagbridge/core/utils/codes/irc6_2017.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/osdagbridge/core/utils/codes/irc6_2017.py b/src/osdagbridge/core/utils/codes/irc6_2017.py index 8564eff12..847f54981 100644 --- a/src/osdagbridge/core/utils/codes/irc6_2017.py +++ b/src/osdagbridge/core/utils/codes/irc6_2017.py @@ -78,7 +78,8 @@ def cl_204_1_Class70R_vehicle_wheel(): front_gap + axle_dist1 + axle_dist2 + gap_bogie, front_gap + axle_dist1 + axle_dist2 + gap_bogie + bogie_axle_dist1, front_gap + axle_dist1 + axle_dist2 + gap_bogie + bogie_axle_dist1 + bogie_axle_dist2, - front_gap + axle_dist1 + axle_dist2 + gap_bogie + bogie_axle_dist1 + bogie_axle_dist2 + rear_gap, + front_gap + axle_dist1 + axle_dist2 + gap_bogie + bogie_axle_dist1 + bogie_axle_dist2 + bogie_axle_dist1, + front_gap + axle_dist1 + axle_dist2 + gap_bogie + bogie_axle_dist1 + bogie_axle_dist2 + bogie_axle_dist1 + rear_gap, ] # Transverse position of each wheel @@ -169,6 +170,7 @@ def cl_204_1_ClassA_vehicle(): front_gap + axle_dist1 + axle_dist2 + axle_dist3 + gap_bogie, front_gap + axle_dist1 + axle_dist2 + axle_dist3 + gap_bogie + bogie_axle_dist, front_gap + axle_dist1 + axle_dist2 + axle_dist3 + gap_bogie + bogie_axle_dist + bogie_axle_dist, + front_gap + axle_dist1 + axle_dist2 + axle_dist3 + gap_bogie + bogie_axle_dist + bogie_axle_dist + bogie_axle_dist, front_gap + axle_dist1 + axle_dist2 + axle_dist3 + gap_bogie + bogie_axle_dist + bogie_axle_dist + bogie_axle_dist + rear_gap, ] # Transverse position of each wheel From 5540c49cb2c6ecc3bf921676aed98f2b3c4ec6a8 Mon Sep 17 00:00:00 2001 From: Yugh Juneja Date: Thu, 26 Feb 2026 14:32:51 +0530 Subject: [PATCH 085/225] Changes for colors, irc , spacing , slope --- src/osdagbridge/desktop/cad/irc5_geometry.py | 101 ++ .../desktop/ui/dialogs/additional_inputs.py | 134 +++ .../dialogs/tabs/typical_section_details.py | 261 +++++- .../desktop/ui/docks/cad_cross_section.py | 876 +++++++++++++----- .../desktop/ui/docks/cad_dual_view.py | 62 +- .../desktop/ui/docks/cad_top_view.py | 80 +- src/osdagbridge/desktop/ui/template_page.py | 58 +- 7 files changed, 1267 insertions(+), 305 deletions(-) create mode 100644 src/osdagbridge/desktop/cad/irc5_geometry.py diff --git a/src/osdagbridge/desktop/cad/irc5_geometry.py b/src/osdagbridge/desktop/cad/irc5_geometry.py new file mode 100644 index 000000000..79b88b344 --- /dev/null +++ b/src/osdagbridge/desktop/cad/irc5_geometry.py @@ -0,0 +1,101 @@ +class CrashBarrierGeometry: + + @staticmethod + def get_geometry(barrier_type: str) -> dict: + + if barrier_type == "IRC 5 - High Containment RCC Crash Barrier": + return { + "type": "rcc", + "total_height": 900.0, + "top_width": 175.0, + "bottom_width": 350.0, + "base_vertical": 100.0, + "mid_offset": 350.0, + } + + elif barrier_type == "IRC 5 - RCC Crash Barrier": + return { + "type": "rcc", + "total_height": 750.0, + "top_width": 150.0, + "bottom_width": 300.0, + "base_vertical": 100.0, + "mid_offset": 300.0, + } + + elif barrier_type == "IRC 5 - Metallic Crash Barrier with Single W-Beam": + return { + "type": "metallic", + "w_beams": 1, + "post_height": 750.0, + "kerb_height": 150.0, + } + + elif barrier_type == "IRC 5 - Metallic Crash Barrier with Double W-Beam": + return { + "type": "metallic", + "w_beams": 2, + "post_height": 750.0, + "kerb_height": 150.0, + } + + return {} + + +class RailingGeometry: + + @staticmethod + def get_geometry(railing_type: str) -> dict: + + if railing_type == "IRC 5 - RCC Railing": + return { + "type": "rcc", + "height": 1100, + "width": 275, + "post_spacing": 2000, + } + + elif railing_type == "IRC 5 - Steel Railing": + return { + "type": "steel", + "height": 1100, + "post_dia": 50, + "rail_count": 3, + "post_spacing": 2000, + } + + return {} + + +class MedianGeometry: + + @staticmethod + def get_geometry(median_type: str) -> dict: + + if median_type == "IRC 5 - Raised Kerb": + return { + "type": "kerb", + "median_width": 1200, + "kerb_height": 225, + "kerb_top_width": 1150, + "kerb_bottom_width": 1200, + } + + elif median_type == "IRC 5 - RCC Crash Barrier": + return { + "type": "rcc_barrier", + "median_width": 1200, + "barrier_height": 900, + "top_width": 175, + "bottom_width": 450, + } + + elif median_type == "IRC 5 - Metallic Crash Barrier": + return { + "type": "metallic", + "median_width": 1200, + "post_height": 950, + "w_beams": 1, + } + + return {} \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 9706799be..0ae7d0b54 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -430,6 +430,140 @@ def _apply_defaults(self): if hasattr(self.design_options_cont_tab, "reset_defaults"): self.design_options_cont_tab.reset_defaults() return + # Confirm save to the user (requested behavior). Use an explicit message box + # instance so it stays on top of the frameless dialog. + box = QMessageBox(self) + box.setIcon(QMessageBox.Information) + box.setWindowTitle("Saved") + box.setText("Inputs saved successfully.") + box.setStandardButtons(QMessageBox.Ok) + box.setDefaultButton(QMessageBox.Ok) + box.setWindowModality(Qt.ApplicationModal) + box.exec() + """ + Save additional inputs and close dialog. + Data will be collected by template_page via get_all_values(). + """ + self.accept() + + def get_all_values(self): + """ + Return CAD-relevant numeric values from Additional Inputs. + This is consumed by InputDock / template_page. + """ + + from osdagbridge.core.utils.common import ( + KEY_NO_OF_GIRDERS, + KEY_GIRDER_SPACING, + KEY_DECK_OVERHANG, + KEY_DECK_THICKNESS, + KEY_FOOTPATH_WIDTH, + KEY_FOOTPATH_THICKNESS, + KEY_CROSS_BRACING_SPACING, + KEY_WEARING_COAT_THICKNESS, + KEY_WEARING_COAT_DENSITY, + KEY_WEARING_COAT_MATERIAL, + ) + + values = {} + + # ---- Typical Section tab ---- + ts = self.typical_section_tab + + if hasattr(ts, "no_of_girders") and ts.no_of_girders.text(): + values[KEY_NO_OF_GIRDERS] = int(float(ts.no_of_girders.text())) + + if hasattr(ts, "girder_spacing") and ts.girder_spacing.text(): + values[KEY_GIRDER_SPACING] = float(ts.girder_spacing.text()) + + if hasattr(ts, "deck_overhang") and ts.deck_overhang.text(): + values[KEY_DECK_OVERHANG] = float(ts.deck_overhang.text()) + + if hasattr(ts, "deck_thickness") and ts.deck_thickness.text(): + values[KEY_DECK_THICKNESS] = float(ts.deck_thickness.text()) + + if hasattr(ts, "footpath_width") and ts.footpath_width.text(): + values[KEY_FOOTPATH_WIDTH] = float(ts.footpath_width.text()) + + if hasattr(ts, "footpath_thickness") and ts.footpath_thickness.text(): + values[KEY_FOOTPATH_THICKNESS] = float(ts.footpath_thickness.text()) + + if hasattr(ts, "wearing_material"): + values[KEY_WEARING_COAT_MATERIAL] = ts.wearing_material.currentText() + + if hasattr(ts, "wearing_thickness") and ts.wearing_thickness.text(): + values[KEY_WEARING_COAT_THICKNESS] = float(ts.wearing_thickness.text()) + + if hasattr(ts, "wearing_density") and ts.wearing_density.text(): + values[KEY_WEARING_COAT_DENSITY] = float(ts.wearing_density.text()) + + # ---- Crash Barrier ---- + if hasattr(ts, "crash_barrier_type"): + values["crash_barrier_type"] = ts.crash_barrier_type.currentText() + + if hasattr(ts, "crash_barrier_width") and ts.crash_barrier_width.text(): + values["crash_barrier_width"] = float(ts.crash_barrier_width.text()) + + if hasattr(ts, "crash_barrier_height") and ts.crash_barrier_height.text(): + values["crash_barrier_height"] = float(ts.crash_barrier_height.text()) + + # ---- Railing ---- + if hasattr(ts, "railing_type"): + values["railing_type"] = ts.railing_type.currentText() + + if hasattr(ts, "railing_height") and ts.railing_height.text(): + values["railing_height"] = float(ts.railing_height.text()) + + if hasattr(ts, "railing_post_spacing") and ts.railing_post_spacing.text(): + values["railing_post_spacing"] = float(ts.railing_post_spacing.text()) + + if hasattr(ts, "railing_rail_count") and ts.railing_rail_count.text(): + values["railing_rail_count"] = int(float(ts.railing_rail_count.text())) + + if hasattr(ts, "railing_post_dia") and ts.railing_post_dia.text(): + values["railing_post_dia"] = float(ts.railing_post_dia.text()) + + if hasattr(ts, "railing_top_width") and ts.railing_top_width.text(): + values["railing_top_width"] = float(ts.railing_top_width.text()) + + if hasattr(ts, "railing_bottom_width") and ts.railing_bottom_width.text(): + values["railing_bottom_width"] = float(ts.railing_bottom_width.text()) + + # ---- Median ---- + if hasattr(ts, "median_type"): + values["median_type"] = ts.median_type.currentText() + + if hasattr(ts, "median_width") and ts.median_width.text(): + values["median_width"] = float(ts.median_width.text()) + + if hasattr(ts, "median_kerb_height") and ts.median_kerb_height.text(): + values["median_kerb_height"] = float(ts.median_kerb_height.text()) + + if hasattr(ts, "median_top_width") and ts.median_top_width.text(): + values["median_top_width"] = float(ts.median_top_width.text()) + + if hasattr(ts, "median_bottom_width") and ts.median_bottom_width.text(): + values["median_bottom_width"] = float(ts.median_bottom_width.text()) + + if hasattr(ts, "median_barrier_height") and ts.median_barrier_height.text(): + values["median_barrier_height"] = float(ts.median_barrier_height.text()) + + if hasattr(ts, "median_post_height") and ts.median_post_height.text(): + values["median_post_height"] = float(ts.median_post_height.text()) + + + # ---- Cross bracing spacing (Section Properties tab) ---- + try: + bracing_tab = self.section_properties_tab.cross_bracing_details_tab + if hasattr(bracing_tab, "bracing_spacing") and bracing_tab.bracing_spacing.text(): + values[KEY_CROSS_BRACING_SPACING] = float(bracing_tab.bracing_spacing.text()) + + except Exception: + pass + + return values + + def _build_sections_from_schema(self, parent_layout, sections, heading_style, label_style, field_width): for section in sections: diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 908ded84d..ca9319bc3 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -23,6 +23,11 @@ from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.typical_section.wearing_course_tab import WearingCourseTab from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.typical_section.lane_details_tab import LaneDetailsTab from osdagbridge.desktop.ui.docks.cad_cross_section import CrossSectionCADWidget +from osdagbridge.desktop.cad.irc5_geometry import ( + CrashBarrierGeometry, + MedianGeometry, + RailingGeometry, +) @@ -240,7 +245,32 @@ def init_ui(self): self.lane_details_tab = LaneDetailsTab(self) self.input_tabs.addTab(self.lane_details_tab, "Lane Details") + + # CONNECT COMBO BOXES TO IRC DEFAULT HANDLERS + + if hasattr(self, "crash_barrier_type"): + self.crash_barrier_type.currentTextChanged.connect( + self.on_crash_barrier_type_changed + ) + + # CONNECT MEDIAN TAB DROPDOWN + if hasattr(self.median_tab, "median_type"): + self.median_tab.median_type.currentTextChanged.connect( + self.on_median_type_changed + ) + + # CONNECT RAILING TAB DROPDOWN + if hasattr(self.railing_tab, "railing_type"): + self.railing_tab.railing_type.currentTextChanged.connect( + self.on_railing_type_changed + ) + if hasattr(self, "wearing_thickness"): + self.wearing_thickness.editingFinished.connect(self._update_cad_preview) + + if hasattr(self, "wearing_material"): + self.wearing_material.currentTextChanged.connect(self._update_cad_preview) + input_layout.addWidget(self.input_tabs) main_layout.addWidget(input_container) @@ -306,10 +336,85 @@ def _update_cad_preview(self): if hasattr(self, "footpath_thickness") and self.footpath_thickness.text(): params['footpath_thickness'] = float(self.footpath_thickness.text()) + + if hasattr(self, "crash_barrier_type"): + ui_cb_type = self.crash_barrier_type.currentText() + params["crash_barrier_type"] = ui_cb_type + + # ---- Wearing Course ---- + if hasattr(self, "wearing_coat_thickness") and self.wearing_coat_thickness.text(): + params[KEY_WEARING_COAT_THICKNESS] = float(self.wearing_coat_thickness.text()) + + if hasattr(self, "wearing_coat_density") and self.wearing_coat_density.text(): + params[KEY_WEARING_COAT_DENSITY] = float(self.wearing_coat_density.text()) + + if hasattr(self, "wearing_coat_material"): + params[KEY_WEARING_COAT_MATERIAL] = self.wearing_coat_material.currentText() + + # ---- Median ---- + if hasattr(self, "median_type"): + params["median_type"] = self.median_type.currentText() + + if hasattr(self, "median_width") and self.median_width.text(): + params["median_width"] = float(self.median_width.text()) * 1000 + + if hasattr(self, "median_height") and self.median_height.text(): + params["median_height"] = float(self.median_height.text()) * 1000 + + # ---- Railing ---- + if hasattr(self, "railing_type"): + params["railing_type"] = self.railing_type.currentText() + + if hasattr(self, "railing_width") and self.railing_width.text(): + params["railing_width"] = float(self.railing_width.text()) * 1000 + + if hasattr(self, "railing_height") and self.railing_height.text(): + params["railing_height"] = float(self.railing_height.text()) * 1000 + + # ---- Median presence ---- + if hasattr(self, "median_type"): + params["median_present"] = self.median_type.currentText() != "None" if params: self.cad_preview.update_params(params) + + def get_typical_section_params(self) -> dict: + params = {} + + # ---- Crash Barrier ---- + if hasattr(self, "crash_barrier_type"): + params["crash_barrier_type"] = self.crash_barrier_type.currentText() + + if hasattr(self, "crash_barrier_width") and self.crash_barrier_width.text(): + params["crash_barrier_width"] = float(self.crash_barrier_width.text()) * 1000 + + if hasattr(self, "crash_barrier_height") and self.crash_barrier_height.text(): + params["crash_barrier_height"] = float(self.crash_barrier_height.text()) * 1000 + + # ---- Median (ADD THIS) ---- + if hasattr(self, "median_type"): + params["median_type"] = self.median_type.currentText() + + if hasattr(self, "median_present"): + params["median_present"] = self.median_present.isChecked() + if hasattr(self, "median_width") and self.median_width.text(): + params["median_width"] = float(self.median_width.text()) * 1000 + + if hasattr(self, "median_height") and self.median_height.text(): + params["median_height"] = float(self.median_height.text()) * 1000 + + # ---- Railing (ADD THIS) ---- + if hasattr(self, "railing_type"): + params["railing_type"] = self.railing_type.currentText() + + if hasattr(self, "railing_width") and self.railing_width.text(): + params["railing_width"] = float(self.railing_width.text()) * 1000 + + if hasattr(self, "railing_height") and self.railing_height.text(): + params["railing_height"] = float(self.railing_height.text()) * 1000 + + return params def _get_footpath_count(self): if self.footpath_value == "Both": @@ -1052,9 +1157,8 @@ def _apply_crash_barrier_defaults(self, barrier_type: str, force: bool = False): is_metallic = self._is_metallic_barrier(barrier_type) is_custom = barrier_type == "Custom" - default_density = DEFAULT_CONCRETE_DENSITY # kN/m3 - default_width = f"{DEFAULT_CRASH_BARRIER_WIDTH}" # m - default_height = "0.75" # m + geom = CrashBarrierGeometry.get_geometry(barrier_type) + def _set(widget, value: str): if widget is None: @@ -1062,10 +1166,14 @@ def _set(widget, value: str): if force or not widget.text(): widget.setText(value) - if is_rcc: - _set(self.crash_barrier_density, f"{default_density:.1f}") - _set(self.crash_barrier_width, default_width) - _set(self.crash_barrier_height, default_height) + if is_rcc and geom: + _set(self.crash_barrier_density, f"{DEFAULT_CONCRETE_DENSITY:.1f}") + + if "top_width" in geom: + _set(self.crash_barrier_width, f"{geom['top_width'] / 1000:.2f}") + + if "total_height" in geom: + _set(self.crash_barrier_height, f"{geom['total_height'] / 1000:.2f}") if self.crash_barrier_width and self.crash_barrier_height: try: w_val = float(self.crash_barrier_width.text() or 0.0) @@ -1085,17 +1193,29 @@ def _set(widget, value: str): self.crash_barrier_load.clear() self._update_crash_barrier_visibility(barrier_type) + # ---- CAD UPDATE AFTER DEFAULTS CHANGE ---- + if hasattr(self, "cad_preview"): + params = { + "crash_barrier_type": barrier_type, + } + + if self.crash_barrier_width and self.crash_barrier_width.text(): + params["crash_barrier_width"] = float(self.crash_barrier_width.text()) * 1000 + + if self.crash_barrier_height and self.crash_barrier_height.text(): + params["crash_barrier_height"] = float(self.crash_barrier_height.text()) * 1000 + + self.cad_preview.update_params(params) def _apply_median_defaults(self, median_type: str, force: bool = False): if not hasattr(self, "median_density"): return + is_rcc = self._is_rcc_median(median_type) is_metallic = self._is_metallic_median(median_type) is_custom = median_type == "Custom" - default_density = DEFAULT_CONCRETE_DENSITY # kN/m3 - default_width = f"{DEFAULT_CRASH_BARRIER_WIDTH}" # m - default_height = "0.75" # m + geom = MedianGeometry.get_geometry(median_type) def _set(widget, value: str): if widget is None: @@ -1103,16 +1223,22 @@ def _set(widget, value: str): if force or not widget.text(): widget.setText(value) - if is_rcc: - _set(self.median_density, f"{default_density:.1f}") - _set(self.median_width, default_width) - _set(self.median_height, default_height) + if is_rcc and geom: + _set(self.median_density, f"{DEFAULT_CONCRETE_DENSITY:.1f}") + + if "median_width" in geom: + _set(self.median_width, f"{geom['median_width'] / 1000:.2f}") + + if "barrier_height" in geom: + _set(self.median_height, f"{geom['barrier_height'] / 1000:.2f}") + elif "kerb_height" in geom: + _set(self.median_height, f"{geom['kerb_height'] / 1000:.2f}") + if self.median_width and self.median_height: try: - w_val = float(self.median_width.text() or 0.0) - h_val = float(self.median_height.text() or 0.0) - area_val = w_val * h_val - _set(self.median_area, f"{area_val:.2f}") + w = float(self.median_width.text()) + h = float(self.median_height.text()) + _set(self.median_area, f"{w * h:.2f}") except: pass self._auto_compute_median_load() @@ -1127,21 +1253,79 @@ def _set(widget, value: str): self._update_median_visibility(median_type, include_median=True) + geom = MedianGeometry.get_geometry(median_type) + + params = { + "median_type": median_type, + } + + if geom: + if "median_width" in geom: + params["median_width"] = geom["median_width"] + + if "barrier_height" in geom: + params["median_height"] = geom["barrier_height"] + elif "kerb_height" in geom: + params["median_height"] = geom["kerb_height"] + + self.cad_preview.update_params(params) + + if hasattr(self, "cad_preview"): + params = { + "median_present": True, + "median_type": median_type, + } + + if self.median_width and self.median_width.text(): + params["median_width"] = float(self.median_width.text()) * 1000 + + if self.median_height and self.median_height.text(): + params["median_height"] = float(self.median_height.text()) * 1000 + + self.cad_preview.update_params(params) + def _apply_railing_defaults(self, force: bool = False): if not hasattr(self, "railing_type"): return + railing_type = self.railing_type.currentText() + geom = RailingGeometry.get_geometry(railing_type) + def _set(widget, value: str): if widget is None: return if force or not widget.text(): widget.setText(value) - _set(self.railing_width, f"{DEFAULT_RAILING_WIDTH * 1000:.0f}") - _set(self.railing_height, f"{MIN_RAILING_HEIGHT:.2f}") + if geom: + if "width" in geom: + _set(self.railing_width, f"{geom['width'] / 1000:.2f}") + + if "height" in geom: + _set(self.railing_height, f"{geom['height'] / 1000:.2f}") + if hasattr(self, "railing_load_mode"): + self.railing_load_mode.blockSignals(True) self.railing_load_mode.setCurrentText("Automatic (IRC 6)") - self.on_railing_load_mode_changed(self.railing_load_mode.currentText()) + self.railing_load_mode.blockSignals(False) + + # Manually apply once + self.on_railing_load_mode_changed("Automatic (IRC 6)") + + geom = RailingGeometry.get_geometry(railing_type) + + params = { + "railing_type": railing_type, + } + + if geom: + if "height" in geom: + params["railing_height"] = geom["height"] + + if "width" in geom: + params["railing_width"] = geom["width"] + + self.cad_preview.update_params(params) def _is_metallic_barrier(self, barrier_type): return barrier_type.startswith("IRC 5 - Metallic Crash Barrier") @@ -1200,8 +1384,24 @@ def _auto_compute_median_load(self): self.median_load.clear() def on_median_type_changed(self, median_type): - self._update_median_visibility(median_type, include_median=True) - self._apply_median_defaults(median_type) + print(f"Median type changed to: {median_type}") + self._apply_median_defaults(median_type, force=True) + + if hasattr(self, "cad_preview"): + params = {"median_type": median_type} + self.cad_preview.update_params(params) + + self.recalculate_girders() + + def on_railing_type_changed(self, railing_type): + print(f"Railing type changed to: {railing_type}") + self._apply_railing_defaults(force=True) + + if hasattr(self, "cad_preview"): + params = {"railing_type": railing_type} + self.cad_preview.update_params(params) + + self.recalculate_girders() def _update_median_visibility(self, median_type, include_median=True): is_metallic = self._is_metallic_median(median_type) @@ -1413,11 +1613,18 @@ def update_footpath_thickness(self): def on_crash_barrier_type_changed(self, barrier_type): if (barrier_type in ["Flexible", "Semi-Rigid"]) and (self.footpath_value == "None"): - show_critical(self, "Crash Barrier Type Not Permitted", - f"{barrier_type} crash barriers are not permitted on bridges without an outer footpath per IRC 5 Clause 109.6.4.") - # Apply new visibility and load rules + show_critical( + self, + "Crash Barrier Type Not Permitted", + f"{barrier_type} crash barriers are not permitted on bridges without an outer footpath per IRC 5 Clause 109.6.4.", + ) + + # IMPORTANT: force=True so layout recalculation cannot override geometry self._update_crash_barrier_visibility(barrier_type) - self._apply_crash_barrier_defaults(barrier_type) + self._apply_crash_barrier_defaults(barrier_type, force=True) + + # Recalculate AFTER geometry is locked + self.recalculate_girders() def on_railing_load_mode_changed(self, mode): if not hasattr(self, "railing_load_value"): diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 681ed99ec..cf5aee493 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -9,8 +9,57 @@ from PySide6.QtCore import Qt, QRectF, QPointF, QTimer from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF from PySide6.QtGui import QPixmap +from osdagbridge.desktop.cad.irc5_geometry import ( + CrashBarrierGeometry, + RailingGeometry, + MedianGeometry, +) +from osdagbridge.core.utils.common import ( + KEY_WEARING_COAT_THICKNESS, + KEY_WEARING_COAT_DENSITY, + KEY_WEARING_COAT_MATERIAL, +) import random +CRASH_BARRIER_TYPES = { + + # === RCC BARRIERS === + "IRC 5 - RCC Crash Barrier": { + "type": "rcc", + "total_height": 750.0, + "top_width": 150.0, + "bottom_width": 300.0, + "base_vertical": 100.0, + "mid_offset": 300.0, + }, + + "IRC 5 - High Containment RCC Crash Barrier": { + "type": "rcc", + "total_height": 900.0, + "top_width": 175.0, + "bottom_width": 350.0, + "base_vertical": 100.0, + "mid_offset": 350.0, + }, + + # === METALLIC BARRIERS === + "IRC 5 - Metallic Crash Barrier with Single W-Beam": { + "type": "metallic", + "post_height": 750.0, + "kerb_height": 150.0, + "w_beams": 1, + }, + + "IRC 5 - Metallic Crash Barrier with Double W-Beam": { + "type": "metallic", + "post_height": 750.0, + "kerb_height": 150.0, + "w_beams": 2, + }, +} + + + class CrossSectionCADWidget(QWidget): """Widget for drawing bridge cross-section view""" # ===== SHARED CAD COLORS ===== @@ -28,8 +77,13 @@ class CrossSectionCADWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) + self.show_dimensions = False self.setMouseTracking(True) # enable mouse tracking for hover self.concrete_brush = self.create_concrete_brush() + self.crash_barrier_params = {} + self.crash_barrier_type = "IRC 5 - High Containment RCC Crash Barrier" + self.railing_type = None + self.median_type = None # hover label regions: list of (QRectF, text, bg_color, text_color) self.hover_labels = [] self.hovered_label_index = -1 @@ -70,18 +124,18 @@ def __init__(self, parent=None): self.girder = { 'depth': 500, 'top_flange_width': 180, - 'top_flange_thickness': 17.2, + 'top_flange_thickness': 22, 'bottom_flange_width': 180, - 'bottom_flange_thickness': 17.2, - 'web_thickness': 10.2, + 'bottom_flange_thickness': 22, + 'web_thickness': 15, # Legacy support for symmetric sections 'flange_width': 180, - 'flange_thickness': 17.2, + 'flange_thickness': 22, } # stiffener dimensions self.stiffener = { - 'width': 84.9, + 'width': 312, 'height': 465.6, } @@ -362,8 +416,36 @@ def resizeEvent(self, event): super().resizeEvent(event) self._position_zoom_buttons() - def update_params(self, params): + def update_params(self, params: dict): + self.show_dimensions = True + + + if "crash_barrier_geometry" in params: + self.crash_barrier_params = params["crash_barrier_geometry"] + + if "railing_type" in params: + self.railing_type = params["railing_type"] + + if "median_type" in params: + self.median_type = params["median_type"] + + # ---- Wearing Course ---- + if KEY_WEARING_COAT_THICKNESS in params: + self.params["wearing_coat_thickness"] = params[KEY_WEARING_COAT_THICKNESS] + + if KEY_WEARING_COAT_MATERIAL in params: + self.params["wearing_coat_material"] = params[KEY_WEARING_COAT_MATERIAL] + + if KEY_WEARING_COAT_DENSITY in params: + self.params["wearing_coat_density"] = params[KEY_WEARING_COAT_DENSITY] + + self.params.update(params) + + + print("WEARING:", self.params.get("wearing_coat_thickness")) + + # ---- Trigger redraw ---- self.update() def mouseMoveEvent(self, event): @@ -774,7 +856,10 @@ def create_concrete_brush(self): def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color): """Draw two crash barriers for median, facing outward""" painter.setBrush(QBrush(median_color)) - MEDIAN_GREY = QColor(221, 221, 221) + if self.hovered_element == 'median': + MEDIAN_GREY = QColor(255, 250, 220) # same highlight as crash barrier + else: + MEDIAN_GREY = QColor(126, 126, 126) CONCRETE_COLOR = QColor(225, 225, 225) @@ -854,21 +939,31 @@ def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck painter.setBrush(QBrush(MEDIAN_GREY)) painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) painter.drawPolygon(QPolygonF(points_right)) + # ---- Register hover zone for median ---- + hover_rect = QRectF( + median_start_x, + y_top, + median_end_x - median_start_x, + h + ) + self.cross_section_hover_zones.append((hover_rect, 'median')) def draw_cross_section(self, painter): """Draw cross-section with median support and hover highlighting""" GIRDER_COLOR = QColor(179, 180, 160) # girder → dark olive-grey STIFFENER_COLOR = QColor(79, 78, 70) # stiffener → very dark olive - CROSS_BRACING_COLOR = QColor(235, 236, 211) # cross bracing → light olive + CROSS_BRACING_COLOR = QColor(239, 240, 215) # cross bracing → light olive END_DIAPHRAGM_COLOR = QColor(134, 134, 100) BARRIER_GREY = QColor(221, 221, 221) # slightly dark grey RAILING_GREY = QColor(221, 221, 221) MEDIAN_GREY = QColor(221, 221, 221) CONCRETE_COLOR = QColor(225, 225, 225) + WEARING_COAT_COLOR = QColor(200, 200, 200) # slightly darker than deck base_width = 800 base_height = 400 + width = base_width * self.zoom_level height = base_height * self.zoom_level @@ -881,24 +976,38 @@ def draw_cross_section(self, painter): # Reduced margins for better space utilization margin = 80 - scale = min((width - 2*margin) / total_deck_width, - (height - 2*margin - 80) / (self.girder['depth'] * self.girder_visual_scale['depth'] + - self.params['deck_thickness'] + - self.params['footpath_thickness'] + 1500)) + scale = min( + (width - 2*margin) / total_deck_width, + (height - 2*margin - 80) / ( + self.girder['depth'] * self.girder_visual_scale['depth'] + + self.params['deck_thickness'] + + self.params['footpath_thickness'] + + self.params.get("wearing_coat_thickness", 0) + + 1500 + ) + ) # Apply scale factor for size adjustment (zoom_level already applied to width/height) scale = scale * self.scale_factor + # ================= WEARING COAT THICKNESS ================= + wearing_coat_px = 0.0 + if "wearing_coat_thickness" in self.params: + wearing_coat_px = float(self.params["wearing_coat_thickness"]) * scale + DIM_OFFSET = 510 * scale DIM_OFFSET_SMALL = 588 * scale center_x = self.width() / 2 # Position bridge in the center vertically - total_bridge_height = (self.girder['depth'] * scale * self.girder_visual_scale['depth'] + - self.params['deck_thickness'] * scale + - self.params['footpath_thickness'] * scale + - self.crash_barrier['height'] * scale + - self.railing['height'] * scale) + total_bridge_height = ( + self.girder['depth'] * scale * self.girder_visual_scale['depth'] + + self.params['deck_thickness'] * scale + + self.params['footpath_thickness'] * scale + + wearing_coat_px + + self.crash_barrier['height'] * scale + + self.railing['height'] * scale + ) # Ensure proper positioning - use margin from top instead of centering for small heights top_margin = 20 @@ -911,14 +1020,34 @@ def draw_cross_section(self, painter): girder_top_y = base_y - girder_depth_visual deck_thick_px = self.params['deck_thickness'] * scale fp_thick_px = self.params['footpath_thickness'] * scale + deck_start_x = center_x - (total_deck_width * scale) / 2 + deck_left_x = deck_start_x + deck_right_x = deck_start_x + total_deck_width * scale + + # ================= DECK SLOPE ================= + DECK_SLOPE = 0.025 # 2.5% cross slope (IRC) + deck_center_x = (deck_left_x + deck_right_x) / 2 + + def deck_y_at_x(x, base_y): + dx = x - deck_center_x + return base_y + dx * DECK_SLOPE + deck_bottom_y = girder_top_y - deck_top_y = deck_bottom_y - deck_thick_px + def slope_offset_at_x(x): + """Vertical shift due to deck slope at x""" + return deck_y_at_x(x, deck_bottom_y) - deck_bottom_y + deck_thick_px = self.params['deck_thickness'] * scale fp_bottom_y = deck_bottom_y fp_top_y = fp_bottom_y - fp_thick_px - deck_start_x = center_x - (total_deck_width * scale) / 2 - deck_left_x = deck_start_x - deck_right_x = deck_start_x + total_deck_width * scale + deck_top_y_left = deck_y_at_x(deck_left_x, deck_bottom_y - deck_thick_px) + deck_top_y_right = deck_y_at_x(deck_right_x, deck_bottom_y - deck_thick_px) + + deck_top_y_left -= wearing_coat_px + deck_top_y_right -= wearing_coat_px + + # use a single representative value + deck_top_y = (deck_top_y_left + deck_top_y_right) / 2 # Calculate all widths in pixels crash_barrier_width_px = self.params['crash_barrier_width'] * scale @@ -994,23 +1123,91 @@ def draw_cross_section(self, painter): deck_hovered = (self.hovered_element == 'deck') deck_color = QColor(240, 240, 240) if deck_hovered else CONCRETE_COLOR - painter.setPen(QPen(QColor(0, 0, 0), 2)) - painter.setBrush(Qt.NoBrush) - painter.drawRect(QRectF(deck_slab_left, deck_top_y, - deck_slab_right - deck_slab_left, deck_thick_px)) + #painter.setPen(QPen(QColor(0, 0, 0), 2)) + #painter.setBrush(Qt.NoBrush) + #painter.drawRect(QRectF(deck_slab_left, deck_top_y, + #deck_slab_right - deck_slab_left, deck_thick_px)) + + # ================= WEARING COAT LAYER ================= + if KEY_WEARING_COAT_THICKNESS in self.params: + wc_thickness_mm = self.params[KEY_WEARING_COAT_THICKNESS] + + if wc_thickness_mm > 0: + wc_px = wc_thickness_mm * scale + + # Wearing coat follows deck slope + wc_top_left_y = deck_top_y_left + wc_top_right_y = deck_top_y_right + + wc_bottom_left_y = wc_top_left_y + wc_px + wc_bottom_right_y = wc_top_right_y + wc_px + + wearing_coat_poly = QPolygonF([ + QPointF(deck_slab_left, wc_top_left_y), + QPointF(deck_slab_right, wc_top_right_y), + QPointF(deck_slab_right, wc_bottom_right_y), + QPointF(deck_slab_left, wc_bottom_left_y), + ]) + + painter.setBrush(QBrush(WEARING_COAT_COLOR)) + painter.setPen(QPen(QColor(0, 0, 0), 1.0)) + painter.drawPolygon(wearing_coat_poly) + + # Hover zone (optional but recommended) + self.cross_section_hover_zones.append( + (wearing_coat_poly.boundingRect(), 'wearing_coat') + ) # ---- DRAW FULL DECK SLAB (ONCE) ---- painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) - painter.drawRect(QRectF( - deck_slab_left, - deck_top_y, - deck_slab_right - deck_slab_left, - deck_thick_px - )) + deck_polygon = QPolygonF([ + QPointF(deck_slab_left, deck_top_y_left), # top-left + QPointF(deck_slab_right, deck_top_y_right), # top-right + QPointF(deck_slab_right, deck_top_y_right + deck_thick_px),# bottom-right + QPointF(deck_slab_left, deck_top_y_left + deck_thick_px) # bottom-left + ]) + painter.setBrush(self.concrete_brush) + painter.setPen(QPen(QColor(0, 0, 0), 2)) + painter.drawPolygon(deck_polygon) + + # ---- OUTLINE DECK TOP EDGES OUTSIDE CARRIAGEWAY (CONSISTENCY FIX) ---- + painter.setPen(QPen(QColor(0, 0, 0), 2)) + painter.setBrush(Qt.NoBrush) - if median_present: + # LEFT side: between railing and crash barrier + if fp_config in ['left', 'both'] and left_fp_width > 0: + painter.drawLine( + QPointF(deck_left_x, deck_y_at_x(deck_left_x, deck_bottom_y - deck_thick_px)), + QPointF(deck_slab_left, deck_y_at_x(deck_slab_left, deck_bottom_y - deck_thick_px)) + ) + + # RIGHT side: between crash barrier and railing + if fp_config in ['right', 'both'] and right_fp_width > 0: + painter.drawLine( + QPointF(deck_slab_right, deck_y_at_x(deck_slab_right, deck_bottom_y - deck_thick_px)), + QPointF(deck_right_x, deck_y_at_x(deck_right_x, deck_bottom_y - deck_thick_px)) + ) + # ---- OUTLINE DECK BOTTOM EDGES UNDER FOOTPATHS (CONSISTENCY FIX) ---- + painter.setPen(QPen(QColor(0, 0, 0), 1.5)) + painter.setBrush(Qt.NoBrush) + + # LEFT bottom edge (under left footpath) + if fp_config in ['left', 'both'] and left_fp_width > 0: + painter.drawLine( + QPointF(deck_left_x, deck_y_at_x(deck_left_x, deck_bottom_y)), + QPointF(deck_slab_left, deck_y_at_x(deck_slab_left, deck_bottom_y)) + ) + + # RIGHT bottom edge (under right footpath) + if fp_config in ['right', 'both'] and right_fp_width > 0: + painter.drawLine( + QPointF(deck_slab_right, deck_y_at_x(deck_slab_right, deck_bottom_y)), + QPointF(deck_right_x, deck_y_at_x(deck_right_x, deck_bottom_y)) + ) + + '''if median_present: painter.setPen(QPen(QColor(0, 0, 0), 2)) painter.setBrush(Qt.NoBrush) painter.drawRect(QRectF(deck_slab_left, deck_top_y, @@ -1020,21 +1217,20 @@ def draw_cross_section(self, painter): painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) painter.drawRect(QRectF(carriageway_start_x, deck_top_y, - carriageway_end_x - carriageway_start_x, deck_thick_px)) + carriageway_end_x - carriageway_start_x, deck_thick_px))''' # Register hover zone for deck - deck_hover_rect = QRectF(deck_slab_left, deck_top_y, - deck_slab_right - deck_slab_left, deck_thick_px) + deck_hover_rect = deck_polygon.boundingRect() self.cross_section_hover_zones.append((deck_hover_rect, 'deck')) # Crash barrier deck zones painter.setBrush(self.concrete_brush) - painter.drawRect(QRectF(left_barrier_x, deck_top_y, + '''painter.drawRect(QRectF(left_barrier_x, deck_top_y, crash_barrier_width_px, deck_thick_px)) painter.drawRect(QRectF(right_barrier_x, deck_top_y, - crash_barrier_width_px, deck_thick_px)) + crash_barrier_width_px, deck_thick_px))''' # footpath to deck connecting line dashed_pen = QPen(QColor(0, 0, 0), 1.5, Qt.DashLine) @@ -1046,37 +1242,57 @@ def draw_cross_section(self, painter): painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) - painter.drawRect(QRectF(left_fp_x, fp_top_y, - left_fp_width_px, fp_thick_px)) + fp_left_top_y = deck_y_at_x(left_fp_x, deck_bottom_y) - fp_thick_px + fp_right_top_y = deck_y_at_x(left_barrier_x, deck_bottom_y) - fp_thick_px + + left_fp_poly = QPolygonF([ + QPointF(left_fp_x, fp_left_top_y), + QPointF(left_barrier_x, fp_right_top_y), + QPointF(left_barrier_x, fp_right_top_y + fp_thick_px), + QPointF(left_fp_x, fp_left_top_y + fp_thick_px), + ]) + + painter.drawPolygon(left_fp_poly) # Draw horizontal edges as solid - painter.setPen(QPen(QColor(0, 0, 0), 2)) - painter.setBrush(Qt.NoBrush) + #painter.setPen(QPen(QColor(0, 0, 0), 2)) + #painter.setBrush(Qt.NoBrush) # Top edge - painter.drawLine(QPointF(left_fp_x, fp_top_y), - QPointF(left_fp_x + left_fp_width_px, fp_top_y)) + #painter.drawLine(QPointF(left_fp_x, fp_top_y), + #QPointF(left_fp_x + left_fp_width_px, fp_top_y)) # Bottom edge - painter.drawLine(QPointF(left_fp_x, fp_top_y + fp_thick_px), - QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) + #painter.drawLine(QPointF(left_fp_x, fp_top_y + fp_thick_px), + #QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) # Left edge - painter.setPen(QPen(QColor(0, 0, 0), 2)) - painter.drawLine(QPointF(left_fp_x, fp_top_y), - QPointF(left_fp_x, fp_top_y + fp_thick_px)) + #painter.setPen(QPen(QColor(0, 0, 0), 2)) + #painter.drawLine(QPointF(left_fp_x, fp_top_y), + #QPointF(left_fp_x, fp_top_y + fp_thick_px)) # Right edge - painter.setPen(dashed_pen) - painter.drawLine(QPointF(left_fp_x + left_fp_width_px, fp_top_y), - QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) + #painter.setPen(dashed_pen) + #painter.drawLine(QPointF(left_fp_x + left_fp_width_px, fp_top_y), + #QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) if fp_config in ['right', 'both'] and right_fp_width > 0: # Draw footpath fill painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) - painter.drawRect(QRectF(right_fp_x, fp_top_y, - right_fp_width_px, fp_thick_px)) + fp_right_top_y1 = deck_y_at_x(right_fp_x, deck_bottom_y) - fp_thick_px + fp_right_top_y2 = deck_y_at_x(deck_right_x, deck_bottom_y) - fp_thick_px + + right_fp_poly = QPolygonF([ + QPointF(right_fp_x, fp_right_top_y1), + QPointF(deck_right_x, fp_right_top_y2), + QPointF(deck_right_x, fp_right_top_y2 + fp_thick_px), + QPointF(right_fp_x, fp_right_top_y1 + fp_thick_px), + ]) + + painter.setBrush(self.concrete_brush) + painter.setPen(Qt.NoPen) + painter.drawPolygon(right_fp_poly) - # Draw horizontal edges as solid + '''# Draw horizontal edges as solid painter.setPen(QPen(QColor(0, 0, 0), 2)) painter.setBrush(Qt.NoBrush) # Top edge @@ -1094,58 +1310,109 @@ def draw_cross_section(self, painter): # Right edge (outer edge where railing sits) - SOLID painter.setPen(QPen(QColor(0, 0, 0), 2)) painter.drawLine(QPointF(right_fp_x + right_fp_width_px, fp_top_y), - QPointF(right_fp_x + right_fp_width_px, fp_top_y + fp_thick_px)) + QPointF(right_fp_x + right_fp_width_px, fp_top_y + fp_thick_px))''' # Draw crash barriers - cb_y = deck_top_y + #cb_y = deck_top_y - 1 # Left barrier: x is where it STARTS (left edge) - self.draw_crash_barrier(painter, left_barrier_x, cb_y, scale, side='left') + #self.draw_crash_barrier(painter, left_barrier_x, cb_y, scale, side='left') # Right barrier: x is where it ENDS (right edge) = right_barrier_end_x - self.draw_crash_barrier(painter, right_barrier_end_x, cb_y, scale, side='right') + #self.draw_crash_barrier(painter, right_barrier_end_x, cb_y, scale, side='right') - if median_present: - self.draw_median_crash_barriers(painter, median_start_x, median_end_x, deck_top_y, scale, MEDIAN_GREY) + if median_present and median_start_x is not None and median_end_x is not None: + median_center_x = (median_start_x + median_end_x) / 2 + + median_deck_y = deck_y_at_x( + median_center_x, + deck_bottom_y - deck_thick_px - wearing_coat_px + ) + + self.draw_median_crash_barriers( + painter, + median_start_x, + median_end_x, + median_deck_y, + scale, + MEDIAN_GREY + ) # Draw the main deck bottom line solid (only the deck slab portion) painter.setPen(QPen(QColor(0, 0, 0), 1.5)) - painter.drawLine(QPointF(deck_slab_left, deck_bottom_y), - QPointF(deck_slab_right, deck_bottom_y)) + painter.drawLine( + QPointF(deck_slab_left, deck_y_at_x(deck_slab_left, deck_bottom_y)), + QPointF(deck_slab_right, deck_y_at_x(deck_slab_right, deck_bottom_y)) + ) # Draw dashed lines for footpath area bottom and vertical connections # Left footpath area if fp_config in ['left', 'both'] and left_fp_width > 0: + fp_dim_x = left_fp_x + left_fp_width_px / 2 + + fp_top_dim_y = deck_y_at_x(fp_dim_x, deck_bottom_y) - fp_thick_px + fp_bottom_dim_y = deck_y_at_x(fp_dim_x, deck_bottom_y) + painter.setPen(dashed_pen) - # Bottom line under footpath area (dashed) - painter.drawLine(QPointF(deck_left_x, deck_bottom_y), - QPointF(deck_slab_left, deck_bottom_y)) + painter.drawLine( + QPointF(fp_dim_x, fp_top_dim_y), + QPointF(fp_dim_x, fp_bottom_dim_y) + ) # Outer vertical line from footpath bottom to deck bottom level (dashed) - painter.drawLine(QPointF(deck_left_x, fp_top_y + fp_thick_px), - QPointF(deck_left_x, deck_bottom_y)) + fp_outer_bottom_y = deck_y_at_x(deck_left_x, deck_bottom_y) + + painter.drawLine( + QPointF(deck_left_x, fp_outer_bottom_y - fp_thick_px), + QPointF(deck_left_x, fp_outer_bottom_y) + ) # Right footpath area if fp_config in ['right', 'both'] and right_fp_width > 0: + fp_dim_x = right_fp_x + right_fp_width_px / 2 + + fp_top_dim_y = deck_y_at_x(fp_dim_x, deck_bottom_y) - fp_thick_px + fp_bottom_dim_y = deck_y_at_x(fp_dim_x, deck_bottom_y) + painter.setPen(dashed_pen) - # Bottom line under footpath area (dashed) - painter.drawLine(QPointF(deck_slab_right, deck_bottom_y), - QPointF(deck_right_x, deck_bottom_y)) + painter.drawLine( + QPointF(fp_dim_x, fp_top_dim_y), + QPointF(fp_dim_x, fp_bottom_dim_y) + ) # Outer vertical line from footpath bottom to deck bottom level (dashed) - painter.drawLine(QPointF(deck_right_x, fp_top_y + fp_thick_px), - QPointF(deck_right_x, deck_bottom_y)) + fp_outer_bottom_y = deck_y_at_x(deck_right_x, deck_bottom_y) + + painter.drawLine( + QPointF(deck_right_x, fp_outer_bottom_y - fp_thick_px), + QPointF(deck_right_x, fp_outer_bottom_y) + ) # Draw girders and stiffeners for girder_x in positions: - self.draw_i_section(painter, girder_x, base_y, scale, GIRDER_COLOR) - self.draw_stiffeners(painter, girder_x, base_y, scale, STIFFENER_COLOR) - - # -------- 4.d CL OF BEARING (DASHED BLACK) -------- - painter.setPen(QPen(QColor(0, 0, 0), 1.0, Qt.DashLine)) - painter.setBrush(Qt.NoBrush) + y_shift = slope_offset_at_x(girder_x) + + self.draw_i_section( + painter, + girder_x, + base_y + y_shift, + scale, + GIRDER_COLOR + ) - for girder_x in positions: - painter.drawLine( - QPointF(girder_x, base_y), - QPointF(girder_x, deck_bottom_y) + self.draw_stiffeners( + painter, + girder_x, + base_y + y_shift, + scale, + STIFFENER_COLOR ) + # -------- 4.d CL OF BEARING (DASHED BLACK) -------- + # painter.setPen(QPen(QColor(0, 0, 0), 1.0, Qt.DashLine)) + # painter.setBrush(Qt.NoBrush) + + # for girder_x in positions: + # painter.drawLine( + # QPointF(girder_x, base_y), + # QPointF(girder_x, deck_bottom_y) + # ) + # ---- Flange thickness (same as I-section) ---- if 'top_flange_thickness' in self.girder and 'bottom_flange_thickness' in self.girder: tf_top = self.girder['top_flange_thickness'] * scale * self.girder_visual_scale['flange_thickness'] @@ -1162,106 +1429,154 @@ def draw_cross_section(self, painter): bf_thickness = self.girder['bottom_flange_thickness'] * scale * self.girder_visual_scale['flange_thickness'] else: bf_thickness = self.girder['flange_thickness'] * scale * self.girder_visual_scale['flange_thickness'] + + - girder_top_edge = base_y - girder_depth_visual - # Correct bottom edge: above base_y by bottom flange thickness - girder_bottom_edge = base_y - bf_thickness - - # Mid of top & bottom flange (REFERENCE POINTS) + '''# Mid of top & bottom flange (REFERENCE POINTS) top_flange_mid_y = girder_top_edge + tf_top / 2 bottom_flange_mid_y = girder_bottom_edge - tf_bottom / 2 # --- Correct connection points (flange-web junction) --- top_connection_y = girder_top_edge + tf_top + (0.02 * girder_depth_visual) - bottom_connection_y = girder_bottom_edge - tf_bottom + (0.02 * girder_depth_visual) + bottom_connection_y = girder_bottom_edge - tf_bottom + (0.02 * girder_depth_visual)''' - for i in range(n - 1): - # Shift bracing attachment from girder center to inner web face - web_thickness_px = ( - self.girder['web_thickness'] * scale * - self.girder_visual_scale['web_thickness'] - ) + for i in range(n - 1): + # Web offset + web_thickness_px = ( + self.girder['web_thickness'] * scale * + self.girder_visual_scale['web_thickness'] + ) + half_web = web_thickness_px / 2.0 - half_web = web_thickness_px / 2.0 + # X locations + x1 = positions[i] + half_web + x2 = positions[i + 1] - half_web - x1 = positions[i] + half_web - x2 = positions[i + 1] - half_web + # Independent slope offsets + y_shift_left = slope_offset_at_x(positions[i]) + y_shift_right = slope_offset_at_x(positions[i + 1]) - - # Draw cross bracing lines - line_spacing = 3 - painter.setBrush(Qt.NoBrush) - painter.setPen(QPen(CROSS_BRACING_COLOR, 1.0)) - - dx = x2 - x1 - dy = girder_bottom_edge - girder_top_edge - length = math.sqrt(dx * dx + dy * dy) - - if length > 0: - perp_x = -dy / length - perp_y = dx / length + # Girder edges + girder_top_left = (base_y + y_shift_left) - girder_depth_visual + girder_bottom_left = (base_y + y_shift_left) - bf_thickness - thickness = 3.0 # visual thickness of bracing - half_t = thickness / 2 + girder_top_right = (base_y + y_shift_right) - girder_depth_visual + girder_bottom_right = (base_y + y_shift_right) - bf_thickness - off_x = perp_x * half_t - off_y = perp_y * half_t + # Connection points + top_L = girder_top_left + tf_top + 0.02 * girder_depth_visual + bottom_L = girder_bottom_left - tf_bottom + 0.02 * girder_depth_visual + top_R = girder_top_right + tf_top + 0.02 * girder_depth_visual + bottom_R = girder_bottom_right - tf_bottom + 0.02 * girder_depth_visual - # CROSS BRACING 1 (\ direction) + # Geometry vector (true bracing direction) + dx = x2 - x1 + dy = bottom_R - top_L + length = math.hypot(dx, dy) + if length <= 0: + continue - p1 = QPointF(x1 + off_x, top_connection_y + off_y) - p2 = QPointF(x2 + off_x, bottom_connection_y + off_y) - p3 = QPointF(x2 - off_x, bottom_connection_y - off_y) - p4 = QPointF(x1 - off_x, top_connection_y - off_y) + # Perpendicular direction + perp_x = -dy / length + perp_y = dx / length - painter.setPen(Qt.NoPen) - painter.setBrush(QBrush(CROSS_BRACING_COLOR)) - painter.drawPolygon(QPolygonF([p1, p2, p3, p4])) + thickness = 3.5 * (self.zoom_level / 1.2) + off_x = perp_x * thickness / 2 + off_y = perp_y * thickness / 2 - # DARK BOUNDARY LINES - painter.setPen(QPen(CROSS_BRACING_COLOR.darker(220), 1.5)) - painter.drawLine(p1, p2) - painter.drawLine(p4, p3) + # ===== CROSS BRACING (\) ===== + p1 = QPointF(x1 + off_x, top_L + off_y) + p2 = QPointF(x2 + off_x, bottom_R + off_y) + p3 = QPointF(x2 - off_x, bottom_R - off_y) + p4 = QPointF(x1 - off_x, top_L - off_y) - # CROSS BRACING 2 (/ direction) + painter.setPen(Qt.NoPen) + painter.setBrush(QBrush(CROSS_BRACING_COLOR)) + painter.drawPolygon(QPolygonF([p1, p2, p3, p4])) - p1 = QPointF(x1 + off_x, bottom_connection_y + off_y) - p2 = QPointF(x2 + off_x, top_connection_y + off_y) - p3 = QPointF(x2 - off_x, top_connection_y - off_y) - p4 = QPointF(x1 - off_x, bottom_connection_y - off_y) + painter.setPen(QPen(CROSS_BRACING_COLOR.darker(220), 1.5)) + painter.drawLine(p1, p2) + painter.drawLine(p4, p3) - painter.setPen(Qt.NoPen) - painter.setBrush(QBrush(CROSS_BRACING_COLOR)) - painter.drawPolygon(QPolygonF([p1, p2, p3, p4])) + # ===== CROSS BRACING (/) ===== + p1 = QPointF(x1 + off_x, bottom_L + off_y) + p2 = QPointF(x2 + off_x, top_R + off_y) + p3 = QPointF(x2 - off_x, top_R - off_y) + p4 = QPointF(x1 - off_x, bottom_L - off_y) - painter.setPen(QPen(CROSS_BRACING_COLOR.darker(220), 1.5)) - painter.drawLine(p1, p2) - painter.drawLine(p4, p3) + painter.setPen(Qt.NoPen) + painter.setBrush(QBrush(CROSS_BRACING_COLOR)) + painter.drawPolygon(QPolygonF([p1, p2, p3, p4])) + painter.setPen(QPen(CROSS_BRACING_COLOR.darker(220), 1.5)) + painter.drawLine(p1, p2) + painter.drawLine(p4, p3) # Draw railings left_railing_rect = None right_railing_rect = None + # LEFT railing if fp_config in ['left', 'both'] and left_fp_width > 0: railing_x = deck_left_x - left_railing_rect = self.draw_railing_post_fixed(painter, railing_x, fp_top_y, scale, "left") - + railing_base_y = deck_y_at_x( + railing_x + railing_width_px / 2, + deck_bottom_y + ) + left_railing_rect = self.draw_railing_post_fixed( + painter, railing_x, railing_base_y, scale, "left" + ) + + # RIGHT railing if fp_config in ['right', 'both'] and right_fp_width > 0: railing_x = deck_right_x - railing_outer_width_px - right_railing_rect = self.draw_railing_post_fixed(painter, railing_x, fp_top_y, scale, "right") + railing_base_y = deck_y_at_x( + railing_x + railing_width_px / 2, + deck_bottom_y + ) + right_railing_rect = self.draw_railing_post_fixed( + painter, railing_x, railing_base_y, scale, "right" + ) + # LEFT crash barrier base sits on sloped deck + cb_left_y = deck_y_at_x( + left_barrier_x + crash_barrier_width_px / 2, + deck_bottom_y - deck_thick_px + ) - # Add dimensions - self.add_professional_cross_section_dimensions( - painter, deck_left_x, deck_right_x, carriageway_start_x, carriageway_end_x, - left_barrier_x, right_barrier_x, deck_top_y, deck_bottom_y, fp_top_y, - base_y, scale, positions, n, fp_config, left_fp_width, right_fp_width, - left_fp_x, right_fp_x, railing_width_px, girder_depth_visual, - median_present, median_start_x, median_end_x, median_width, - crash_barrier_width_px, left_barrier_end_x, right_barrier_end_x, DIM_OFFSET, DIM_OFFSET_SMALL + # RIGHT crash barrier base sits on sloped deck + cb_right_y = deck_y_at_x( + right_barrier_x + crash_barrier_width_px / 2, + deck_bottom_y - deck_thick_px + ) + + self.draw_crash_barrier( + painter, + left_barrier_x, + cb_left_y, + scale, + side='left' + ) + + self.draw_crash_barrier( + painter, + right_barrier_end_x, + cb_right_y, + scale, + side='right' ) + # Add dimensions + if self.show_dimensions: + self.add_professional_cross_section_dimensions( + painter, deck_left_x, deck_right_x, carriageway_start_x, carriageway_end_x, + left_barrier_x, right_barrier_x, deck_top_y, deck_bottom_y, fp_top_y, + base_y, scale, positions, n, fp_config, left_fp_width, right_fp_width, + left_fp_x, right_fp_x, railing_width_px, girder_depth_visual, + median_present, median_start_x, median_end_x, median_width, + crash_barrier_width_px, left_barrier_end_x, right_barrier_end_x, + DIM_OFFSET, DIM_OFFSET_SMALL + ) # Add hover labels self.add_cross_section_hover_labels( @@ -1322,7 +1637,7 @@ def draw_railing_post_fixed(self, painter, x, y, scale, side): inner_height = post_h - inner_top_margin - inner_bottom_margin if inner_w > 3 and inner_height > 5: - painter.setBrush(QBrush(QColor(255, 255, 255))) + painter.setBrush(QBrush(QColor(220, 220, 220))) painter.setPen(QPen(QColor(120, 120, 120), max(1, scale))) inner_rect = QRectF(inner_x, post_top_y + inner_top_margin, inner_w, inner_height) @@ -1340,14 +1655,14 @@ def draw_railing_post_fixed(self, painter, x, y, scale, side): rail_rect = QRectF(inner_x + 2, rail_y, inner_w - 4, rail_height) painter.drawRect(rail_rect) - painter.setPen(QPen(QColor(150, 150, 150), 1, Qt.DashLine)) - painter.setBrush(Qt.NoBrush) - outline_margin = 2 - outline_rect = QRectF(rect_x - outline_margin, - post_top_y - outline_margin, - outer_w + 2 * outline_margin, - total_h + 2 * outline_margin) - painter.drawRoundedRect(outline_rect, corner_radius + 2, corner_radius + 2) + #painter.setPen(QPen(QColor(150, 150, 150), 1, Qt.DashLine)) + #painter.setBrush(Qt.NoBrush) + #outline_margin = 2 + #outline_rect = QRectF(rect_x - outline_margin, + #post_top_y - outline_margin, + #outer_w + 2 * outline_margin, + #total_h + 2 * outline_margin) + #painter.drawRoundedRect(outline_rect, corner_radius + 2, corner_radius + 2) # Return bounding box with actual outer width return (rect_x, post_top_y, rect_x + outer_w, y, outer_w) @@ -1659,13 +1974,25 @@ def add_cross_section_hover_labels(self, painter, carriageway_start_x, carriagew railing_top_y = right_railing_rect[1] components.append((railing_rect, "Railing", railing_center_x, railing_top_y, 'on_figure_top', None)) - # Median barriers - straight line same level as deck + # Median barriers - text on top of figure (like railing) if median_present and median_start_x is not None: - median_rect = QRectF(median_start_x, deck_top_y - cb_height, - median_end_x - median_start_x, cb_height) + median_rect = QRectF( + median_start_x, + deck_top_y - cb_height, + median_end_x - median_start_x, + cb_height + ) median_center_x = (median_start_x + median_end_x) / 2 - components.append((median_rect, "Median", - median_center_x, deck_bottom_y, 'straight_line', None)) + median_top_y = deck_top_y - cb_height + + components.append(( + median_rect, + "Median", + median_center_x, + median_top_y, + 'on_figure_top', # SAME AS RAILING + None + )) # Girders with stiffeners - pointer 50 below for i, girder_x in enumerate(positions): @@ -1890,24 +2217,43 @@ def draw_stiffeners(self, painter, x, base_y, scale, stiffener_color): """Draw vertical stiffeners with chamfered inner corners""" visual = self.girder_visual_scale - stiff_w = self.stiffener['width'] * scale * visual['flange_width'] - stiff_h = self.stiffener['height'] * scale * visual['depth'] * 0.976 + '''stiff_w = ( + (min(self.girder['top_flange_width'], self.girder['bottom_flange_width']) + - self.girder['web_thickness']) / 2 + ) * scale * visual['web_thickness'] ''' + stiff_w = self.stiffener['width'] * scale + + stiff_h = ( + self.girder['depth'] + - self.girder['top_flange_thickness'] + - self.girder['bottom_flange_thickness'] + ) * scale * visual['depth'] tw = self.girder['web_thickness'] * scale * visual['web_thickness'] - # Flange thickness (top) + # Flange thickness (top) — MUST match depth scaling if 'top_flange_thickness' in self.girder: - flange_thick = self.girder['top_flange_thickness'] * scale * visual['flange_thickness'] + flange_thick = self.girder['top_flange_thickness'] * scale * visual['depth'] else: - flange_thick = self.girder['flange_thickness'] * scale * visual['flange_thickness'] + flange_thick = self.girder['flange_thickness'] * scale * visual['depth'] girder_depth_visual = self.girder['depth'] * scale * visual['depth'] painter.setBrush(QBrush(stiffener_color)) painter.setPen(QPen(QColor(0, 0, 0), 1)) - stiff_top_y = base_y - girder_depth_visual + flange_thick - stiff_bottom_y = stiff_top_y + stiff_h + # --- vertical limits of stiffener --- + + stiff_top_y = ( + base_y + - girder_depth_visual + + self.girder['top_flange_thickness'] * scale * visual['flange_thickness'] + ) + + stiff_bottom_y = ( + base_y + - self.girder['bottom_flange_thickness'] * scale * visual['flange_thickness'] + ) # Chamfer size (small & proportional) chamfer = min(stiff_w, flange_thick) * 1.3 @@ -1943,79 +2289,125 @@ def draw_stiffeners(self, painter, x, base_y, scale, stiffener_color): painter.drawPolygon(right_stiffener) def draw_crash_barrier(self, painter, x, y, scale, side='left'): - """Draw RCC crash barrier matching the exact irc diamentions.""" - - # DIMENSIONS (in mm) - TOTAL_HEIGHT = 900.0 - TOP_WIDTH = 175.0 - BOTTOM_WIDTH = 350.0 - BASE_VERTICAL = 100.0 - - # Scale everything - h = TOTAL_HEIGHT * scale - top_w = TOP_WIDTH * scale - bottom_w = BOTTOM_WIDTH * scale - base_v = BASE_VERTICAL * scale - - # Key Y positions (from deck going up, so negative) - y_bottom = y - y_base_top = y - base_v - y_mid = y - (1000 - 650) * scale - y_top = y - h - - # Offsets - right_at_mid = (400 - 150) * scale # 250 * scale - left_at_top = (200 - 150) * scale # 50 * scale - right_at_top = (375 - 150) * scale # 225 * scale - - # Check if crash barrier is hovered (more visible brightness) - barrier_hovered = (self.hovered_element == 'crash_barrier') - if barrier_hovered: - barrier_color = QColor(255, 250, 220) # Strong glow effect - else: - barrier_color = QColor(126,126,126) - - if side == 'left': - # Left barrier: x is the LEFT edge (where barrier starts) - # Barrier extends to the RIGHT from x - - p0 = QPointF(x, y_bottom) # bottom-left - p1 = QPointF(x + bottom_w, y_bottom) # bottom-right - p2 = QPointF(x + bottom_w, y_base_top) # right after base - p3 = QPointF(x + right_at_mid, y_mid) # right at middle - p4 = QPointF(x + right_at_top, y_top) # top-right - p5 = QPointF(x + left_at_top, y_top) # top-left - p6 = QPointF(x, y_base_top) # left after base - - points = [p0, p1, p2, p3, p4, p5, p6] - - # Register hover zone for left crash barrier - hover_rect = QRectF(x, y_top, bottom_w, h) - self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) - - else: # right side - # Right barrier: x is the RIGHT edge (where barrier ends) - # Barrier extends to the LEFT from x - # The shape is mirrored so front (sloped side) faces left toward carriageway - - x_right = x # Right edge of barrier - x_left = x - bottom_w # Left edge of barrier at bottom - - p0 = QPointF(x_left, y_bottom) # bottom-left - p1 = QPointF(x_right, y_bottom) # bottom-right - p2 = QPointF(x_right, y_base_top) # right after base - p3 = QPointF(x_right - left_at_top, y_top) # top-right (mirrored) - p4 = QPointF(x_right - right_at_top, y_top) # top-left (mirrored) - p5 = QPointF(x_right - right_at_mid, y_mid) # left at middle (mirrored) - p6 = QPointF(x_left, y_base_top) # left after base - - points = [p0, p1, p2, p3, p4, p5, p6] + + cb_type = self.crash_barrier_type + cb = CRASH_BARRIER_TYPES.get(cb_type) + + if not cb: + return + + + # ================= RCC CRASH BARRIER ================= + if cb["type"] == "rcc": + TOTAL_HEIGHT = cb["total_height"] + TOP_WIDTH = cb["top_width"] + BOTTOM_WIDTH = cb["bottom_width"] + BASE_VERTICAL = cb["base_vertical"] + MID_OFFSET = cb["mid_offset"] + + h = TOTAL_HEIGHT * scale + bottom_w = self.params['crash_barrier_width'] * scale + base_v = BASE_VERTICAL * scale - # Register hover zone for right crash barrier - hover_rect = QRectF(x_left, y_top, bottom_w, h) + # ----- slope-aware base correction ----- + half_w = bottom_w / 2 + + if side == 'left': + x_left = x + x_right = x + bottom_w + center_x = x + half_w + else: + x_right = x + x_left = x - bottom_w + center_x = x - half_w + + # deck slope correction + slope = 0.025 # MUST match DECK_SLOPE used elsewhere + + y_left = y + y_right = y + y_base_top_left = y_left - base_v + y_base_top_right = y_right - base_v + + y_mid_left = y_left - MID_OFFSET * scale + y_mid_right = y_right - MID_OFFSET * scale + + y_top_left = y_left - h + y_top_right = y_right - h + # top Y for hover rect (safe) + y_top_min = min(y_top_left, y_top_right) + right_at_mid = 250 * scale + left_at_top = 50 * scale + right_at_top = 225 * scale + + barrier_color = QColor(126, 126, 126) + + if self.hovered_element == 'crash_barrier': + barrier_color = QColor(255, 250, 220) + + if side == 'left': + points = [ + QPointF(x_left, y_left), + QPointF(x_right, y_right), + QPointF(x_right, y_base_top_right), + QPointF(x_right + right_at_mid - bottom_w, y_mid_right), + QPointF(x + right_at_top, y_top_right), + QPointF(x + left_at_top, y_top_left), + QPointF(x_left, y_base_top_left), + ] + hover_rect = QRectF(x_left, y_top_min, bottom_w, h) + else: + points = [ + QPointF(x_left, y_left), + QPointF(x_right, y_right), + QPointF(x_right, y_base_top_right), + QPointF(x_right - left_at_top, y_top_right), + QPointF(x_right - right_at_top, y_top_right), + QPointF(x_right - right_at_mid, y_mid_right), + QPointF(x_left, y_base_top_left), + ] + hover_rect = QRectF(x_left, y_top_min, bottom_w, h) + self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) - - # Draw the barrier + painter.setBrush(QBrush(barrier_color)) + painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) + painter.drawPolygon(QPolygonF(points)) + return + + # ================= METALLIC W-BEAM ================= + # Simple, visible, correct representation (posts + beams) + + post_h = 750 * scale + kerb_h = 150 * scale + beam_spacing = 200 * scale + beam_thickness = 20 * scale + width = 350 * scale + + barrier_color = QColor(0, 120, 255) if "Single" in cb_type else QColor(255, 120, 0) + + if self.hovered_element == 'crash_barrier': + barrier_color = QColor(255, 250, 220) + + if side == 'left': + base_x = x + else: + base_x = x - width + + # Kerb + painter.setBrush(QBrush(QColor(180, 180, 180))) + painter.setPen(QPen(Qt.black, 1.2)) + painter.drawRect(QRectF(base_x, y - kerb_h, width, kerb_h)) + + # Posts + post_x = base_x + width / 2 painter.setBrush(QBrush(barrier_color)) - painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) - painter.drawPolygon(QPolygonF(points)) \ No newline at end of file + painter.drawRect(QRectF(post_x - 10 * scale, y - kerb_h - post_h, 20 * scale, post_h)) + + # W-beams + beams = 1 if "Single" in cb_type else 2 + for i in range(beams): + beam_y = y - kerb_h - 200 * scale - i * beam_spacing + painter.drawRect(QRectF(base_x + 20 * scale, beam_y, width - 40 * scale, beam_thickness)) + + hover_rect = QRectF(base_x, y - kerb_h - post_h, width, post_h + kerb_h) + self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py index 2994a8a70..1751b3d9e 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py @@ -8,6 +8,11 @@ from PySide6.QtCore import Qt, QPropertyAnimation, QEasingCurve from .cad_cross_section import CrossSectionCADWidget from .cad_top_view import TopViewCADWidget +from osdagbridge.desktop.cad.irc5_geometry import ( + CrashBarrierGeometry, + MedianGeometry, + RailingGeometry, +) class BridgeDualCADWidget(QWidget): """Split view widget showing both cross-section and top view with individual controls""" @@ -151,7 +156,7 @@ def update_from_osdag_inputs(self, input_dict): KEY_SPAN, KEY_CARRIAGEWAY_WIDTH, KEY_SKEW_ANGLE, KEY_FOOTPATH, KEY_NO_OF_GIRDERS, KEY_GIRDER_SPACING, KEY_DECK_OVERHANG, KEY_DECK_THICKNESS, KEY_FOOTPATH_WIDTH, KEY_FOOTPATH_THICKNESS, - KEY_CROSS_BRACING_SPACING, KEY_INCLUDE_MEDIAN + KEY_CROSS_BRACING_SPACING, KEY_INCLUDE_MEDIAN, KEY_WEARING_COAT_THICKNESS, KEY_WEARING_COAT_DENSITY, KEY_WEARING_COAT_MATERIAL, ) params = {} @@ -191,6 +196,61 @@ def update_from_osdag_inputs(self, input_dict): # Map footpath thickness (mm) if KEY_FOOTPATH_THICKNESS in input_dict: params['footpath_thickness'] = float(input_dict[KEY_FOOTPATH_THICKNESS]) + + if "crash_barrier_type" in input_dict: + params['crash_barrier_type'] = input_dict["crash_barrier_type"] + + if "crash_barrier_height" in input_dict: + params['crash_barrier_height'] = float(input_dict["crash_barrier_height"]) * 1000 + + if "crash_barrier_width" in input_dict: + params['crash_barrier_width'] = float(input_dict["crash_barrier_width"]) * 1000 + + if "railing_type" in input_dict: + railing_type = input_dict["railing_type"] + geom = RailingGeometry.get_geometry(railing_type) + + params["railing_type"] = railing_type + + if geom: + if "height" in geom: + params["railing_height"] = geom["height"] + + if "width" in geom: + params["railing_width"] = geom["width"] + + + if "median_type" in input_dict: + median_type = input_dict["median_type"] + geom = MedianGeometry.get_geometry(median_type) + + params["median_type"] = median_type + + if geom: + if "median_width" in geom: + params["median_width"] = geom["median_width"] + + if "barrier_height" in geom: + params["median_height"] = geom["barrier_height"] + elif "kerb_height" in geom: + params["median_height"] = geom["kerb_height"] + + # ---- Wearing Coat ---- + if KEY_WEARING_COAT_THICKNESS in input_dict: + params[KEY_WEARING_COAT_THICKNESS] = float( + input_dict[KEY_WEARING_COAT_THICKNESS] + ) + + if KEY_WEARING_COAT_DENSITY in input_dict: + params[KEY_WEARING_COAT_DENSITY] = float( + input_dict[KEY_WEARING_COAT_DENSITY] + ) + + if KEY_WEARING_COAT_MATERIAL in input_dict: + params[KEY_WEARING_COAT_MATERIAL] = input_dict[ + KEY_WEARING_COAT_MATERIAL + ] + # Map footpath configuration if KEY_FOOTPATH in input_dict: diff --git a/src/osdagbridge/desktop/ui/docks/cad_top_view.py b/src/osdagbridge/desktop/ui/docks/cad_top_view.py index 4fce0fc3d..cb96f30be 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_top_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_top_view.py @@ -10,12 +10,27 @@ from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF from .cad_cross_section import CrossSectionCADWidget +# ---- CAD Grey Palette ---- +CAD_DARK_GREY = QColor(90, 90, 90) +CAD_MEDIUM_GREY = QColor(130, 130, 130) +CAD_LIGHT_GREY = QColor(180, 180, 180) +CAD_HOVER_GREY = QColor(110, 110, 110) +GIRDER_HIGHLIGHT = CAD_HOVER_GREY +CROSS_BRACING_HIGHLIGHT = CAD_HOVER_GREY +END_DIAPHRAGM_HIGHLIGHT = CAD_HOVER_GREY +BEARING_HIGHLIGHT = CAD_HOVER_GREY +# ---- Dimension text spacing (CAD standard) ---- +DIM_TEXT_GAP = 15 # distance from dimension line to text +DIM_STACK_GAP = 15 # vertical gap between stacked dimensions +LEADER_TEXT_OFFSET = 25 # leader label distance + class TopViewCADWidget(QWidget): """Widget for drawing bridge top view""" def __init__(self, parent=None): super().__init__(parent) + self.show_dimensions = False self.setMouseTracking(True) # enable mouse tracking for hover # top view hover tracking @@ -327,6 +342,11 @@ def eventFilter(self, obj, event): def update_params(self, params): self.params.update(params) + + # Show dimensions once user provides inputs + if params: + self.show_dimensions = True + self.update() def mouseMoveEvent(self, event): @@ -747,10 +767,10 @@ def draw_top_view(self, painter): # Highlight colors - GIRDER_HIGHLIGHT = QColor(80, 140, 220) - CROSS_BRACING_HIGHLIGHT = QColor(255, 180, 90) - END_DIAPHRAGM_HIGHLIGHT = QColor(180, 120, 80) - BEARING_HIGHLIGHT = QColor(255, 80, 80) + GIRDER_HIGHLIGHT = CAD_HOVER_GREY + CROSS_BRACING_HIGHLIGHT = CAD_HOVER_GREY + END_DIAPHRAGM_HIGHLIGHT = CAD_HOVER_GREY + BEARING_HIGHLIGHT = CAD_HOVER_GREY # Use base canvas dimensions for consistent drawing regardless of zoom width = 800 * self.zoom_level @@ -913,7 +933,7 @@ def draw_top_view(self, painter): )) # Draw center line of bearings - bearing_color = BEARING_HIGHLIGHT if bearing_hovered else QColor(255, 0, 0) + bearing_color = BEARING_HIGHLIGHT if bearing_hovered else CAD_DARK_GREY bearing_width = 2.5 if bearing_hovered else 1.5 pen = QPen(bearing_color, bearing_width, Qt.CustomDashLine) @@ -981,12 +1001,13 @@ def draw_top_view(self, painter): skew_rad, scale, left_bearing_base_x) # Add dimensions (always visible) and hover labels (only on hover) - self.add_clean_top_view_dimensions( - painter, girder_lines, girder_positions_y, scale, n, bracing_positions_x, - skew_rad, start_x_base, end_x_base, left_bearing_base_x, right_bearing_base_x, - top_extent, bottom_extent, left_top_x, right_top_x, - GIRDER_COLOR, CROSS_BRACING_COLOR, END_DIAPHRAGM_COLOR - ) + if self.show_dimensions: + self.add_clean_top_view_dimensions( + painter, girder_lines, girder_positions_y, scale, n, bracing_positions_x, + skew_rad, start_x_base, end_x_base, left_bearing_base_x, right_bearing_base_x, + top_extent, bottom_extent, left_top_x, right_top_x, + GIRDER_COLOR, CROSS_BRACING_COLOR, END_DIAPHRAGM_COLOR + ) # Notes removed for cleaner layout in split view @@ -1117,7 +1138,8 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ y_offset_last = last_girder_y - girder_positions_y[0] x_offset_last = y_offset_last * math.tan(skew_rad) - dim_y_base = last_girder_y + 50 + #dim_y_base = last_girder_y + 50 + dim_y_base = last_girder_y + 28 # SPAN LENGTH dimension (always visible) dim_y1 = dim_y_base @@ -1132,7 +1154,8 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ # BRACING SPACING dimension (always visible) if self.params['cross_bracing_spacing'] > 0 and len(bracing_positions) > 1: - dim_y2 = dim_y_base + 15 + #dim_y2 = dim_y_base + 15 + dim_y2 = dim_y_base + DIM_STACK_GAP cb_spacing_m = self.params['cross_bracing_spacing'] / 1000 x1_brace = bracing_positions[0] + x_offset_last @@ -1163,8 +1186,9 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ ) # Girder Spacing label + value (3 lines) - label_x = max(x1_at_end, x2_at_end) + 25 - label_y = (y1 + y2) / 2 + label_x = max(x1_at_end, x2_at_end) + 12 + LABEL_OFFSET = 14 # tweak 10–18 if needed + label_y = (y1 + y2) / 2 + LABEL_OFFSET label_text = f"Girder\nSpacing\n= {gs_m:.2f} m" @@ -1172,22 +1196,22 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ painter, label_x, label_y, label_text, QColor(255, 255, 255, 250), - QColor(0, 100, 0), 9, True + CAD_DARK_GREY, 9, True ) # CL OF BEARING labels - ALWAYS VISIBLE (moved outside hover condition) - label_y_bearing = top_extent - 15 + label_y_bearing = top_extent - 8 - left_label_x = left_top_x - 80 + left_label_x = left_top_x - 45 right_label_x = right_top_x - 45 self.draw_text_with_background(painter, left_label_x, label_y_bearing, "CL of Bearing", QColor(255, 255, 255, 250), - QColor(200, 0, 0), 9, True) + CAD_DARK_GREY, 9, True) self.draw_text_with_background(painter, right_label_x, label_y_bearing, "CL of Bearing", QColor(255, 255, 255, 250), - QColor(200, 0, 0), 9, True) + CAD_DARK_GREY, 9, True) # HOVER LABELS (only shown when hovered) @@ -1198,10 +1222,12 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ target_y = first_girder['y'] label_x = target_x - label_y = target_y - 30 + + label_y = target_y - LEADER_TEXT_OFFSET + label_offset = LEADER_TEXT_OFFSET self.draw_clean_leader_line(painter, target_x, target_y, label_x, label_y, - "Girder", girder_color, QColor(0, 100, 0)) + "Girder", CAD_DARK_GREY, CAD_DARK_GREY) # 2. CROSS BRACING label - show only when cross bracing is hovered if n > 1 and len(bracing_positions) > 0 and self.hovered_top_view_element == 'cross_bracing': @@ -1224,7 +1250,7 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ label_y = target_y - label_offset self.draw_clean_leader_line(painter, target_x, target_y, label_x, label_y, - "Cross Bracing", cross_bracing_color, QColor(200, 100, 0)) + "Cross Bracing", CAD_DARK_GREY, CAD_DARK_GREY) # 3. END DIAPHRAGM label - show only when end diaphragm is hovered if n > 1 and len(girder_positions_y) >= 2 and self.hovered_top_view_element == 'end_diaphragm': @@ -1244,7 +1270,7 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ label_y = target_y + 5 self.draw_clean_leader_line(painter, target_x, target_y, label_x, label_y, - "End Diaphragm", end_diaphragm_color, QColor(139, 69, 19)) + "End Diaphragm", CAD_DARK_GREY, QColor(139, 69, 19)) def draw_dimension_arrow_with_extensions_up(self, painter, x1, y1, x2, y2, text, girder_y): """Dimension line with arrows and extension lines going UP to girder level (dimension below)""" @@ -1290,7 +1316,7 @@ def draw_dimension_arrow_with_extensions_up(self, painter, x1, y1, x2, y2, text, # Draw text BELOW the dimension line (above in terms of value since we add to y) text_x = (x1 + x2) / 2 - text_y = y1 + 15 # Below the dimension line + text_y = y1 + DIM_TEXT_GAP # Below the dimension line font = QFont('Arial', 9, QFont.Bold) painter.setFont(font) @@ -1366,8 +1392,8 @@ def draw_skewed_dimension_arrow(self, painter, x1, y1, x2, y2, text, skew_rad): mid_x = (x1 + x2) / 2 mid_y = (y1 + y2) / 2 - text_x = mid_x + 8 - text_y = mid_y + 4 + text_x = mid_x + DIM_TEXT_GAP + text_y = mid_y self.draw_text_with_background(painter, text_x, text_y, text, QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 75ea6a886..c127d37e2 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -32,17 +32,59 @@ def __init__(self, title: str, backend: object, parent=None): margin: 0px; padding: 0px; } - QMenuBar { - background-color: #F4F4F4; - color: #000000; - padding: 0px; + + /* ===== SLIM SCROLLBARS (GLOBAL) ===== */ + + QScrollBar:vertical { + width: 8px; + background: transparent; + margin: 0px; + } + + QScrollBar::handle:vertical { + background: #B0B0B0; + min-height: 30px; + border-radius: 4px; + } + + QScrollBar::handle:vertical:hover { + background: #8A8A8A; + } + + QScrollBar::add-line:vertical, + QScrollBar::sub-line:vertical { + height: 0px; + } + + QScrollBar::add-page:vertical, + QScrollBar::sub-page:vertical { + background: transparent; } - QMenuBar::item { - padding: 5px 10px; + + QScrollBar:horizontal { + height: 8px; background: transparent; + margin: 0px; + } + + QScrollBar::handle:horizontal { + background: #B0B0B0; + min-width: 30px; + border-radius: 4px; } - QMenuBar::item:selected { - background: #FFFFFF; + + QScrollBar::handle:horizontal:hover { + background: #8A8A8A; + } + + QScrollBar::add-line:horizontal, + QScrollBar::sub-line:horizontal { + width: 0px; + } + + QScrollBar::add-page:horizontal, + QScrollBar::sub-page:horizontal { + background: transparent; } """ ) From 740b317e5121bb648a9b747b7dc24e7033d7691e Mon Sep 17 00:00:00 2001 From: Yugh Juneja Date: Thu, 26 Feb 2026 22:26:47 +0530 Subject: [PATCH 086/225] Reverted Changes for Wearing Course and Slope --- .../desktop/ui/docks/cad_cross_section.py | 500 ++++++------------ 1 file changed, 150 insertions(+), 350 deletions(-) diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index cf5aee493..8cc350635 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -417,9 +417,10 @@ def resizeEvent(self, event): self._position_zoom_buttons() def update_params(self, params: dict): + + self.params.update(params) self.show_dimensions = True - if "crash_barrier_geometry" in params: self.crash_barrier_params = params["crash_barrier_geometry"] @@ -429,23 +430,6 @@ def update_params(self, params: dict): if "median_type" in params: self.median_type = params["median_type"] - # ---- Wearing Course ---- - if KEY_WEARING_COAT_THICKNESS in params: - self.params["wearing_coat_thickness"] = params[KEY_WEARING_COAT_THICKNESS] - - if KEY_WEARING_COAT_MATERIAL in params: - self.params["wearing_coat_material"] = params[KEY_WEARING_COAT_MATERIAL] - - if KEY_WEARING_COAT_DENSITY in params: - self.params["wearing_coat_density"] = params[KEY_WEARING_COAT_DENSITY] - - - self.params.update(params) - - - print("WEARING:", self.params.get("wearing_coat_thickness")) - - # ---- Trigger redraw ---- self.update() def mouseMoveEvent(self, event): @@ -959,11 +943,9 @@ def draw_cross_section(self, painter): RAILING_GREY = QColor(221, 221, 221) MEDIAN_GREY = QColor(221, 221, 221) CONCRETE_COLOR = QColor(225, 225, 225) - WEARING_COAT_COLOR = QColor(200, 200, 200) # slightly darker than deck base_width = 800 base_height = 400 - width = base_width * self.zoom_level height = base_height * self.zoom_level @@ -976,38 +958,24 @@ def draw_cross_section(self, painter): # Reduced margins for better space utilization margin = 80 - scale = min( - (width - 2*margin) / total_deck_width, - (height - 2*margin - 80) / ( - self.girder['depth'] * self.girder_visual_scale['depth'] + - self.params['deck_thickness'] + - self.params['footpath_thickness'] + - self.params.get("wearing_coat_thickness", 0) + - 1500 - ) - ) + scale = min((width - 2*margin) / total_deck_width, + (height - 2*margin - 80) / (self.girder['depth'] * self.girder_visual_scale['depth'] + + self.params['deck_thickness'] + + self.params['footpath_thickness'] + 1500)) # Apply scale factor for size adjustment (zoom_level already applied to width/height) scale = scale * self.scale_factor - # ================= WEARING COAT THICKNESS ================= - wearing_coat_px = 0.0 - if "wearing_coat_thickness" in self.params: - wearing_coat_px = float(self.params["wearing_coat_thickness"]) * scale - DIM_OFFSET = 510 * scale DIM_OFFSET_SMALL = 588 * scale center_x = self.width() / 2 # Position bridge in the center vertically - total_bridge_height = ( - self.girder['depth'] * scale * self.girder_visual_scale['depth'] + - self.params['deck_thickness'] * scale + - self.params['footpath_thickness'] * scale + - wearing_coat_px + - self.crash_barrier['height'] * scale + - self.railing['height'] * scale - ) + total_bridge_height = (self.girder['depth'] * scale * self.girder_visual_scale['depth'] + + self.params['deck_thickness'] * scale + + self.params['footpath_thickness'] * scale + + self.crash_barrier['height'] * scale + + self.railing['height'] * scale) # Ensure proper positioning - use margin from top instead of centering for small heights top_margin = 20 @@ -1020,34 +988,22 @@ def draw_cross_section(self, painter): girder_top_y = base_y - girder_depth_visual deck_thick_px = self.params['deck_thickness'] * scale fp_thick_px = self.params['footpath_thickness'] * scale - deck_start_x = center_x - (total_deck_width * scale) / 2 - deck_left_x = deck_start_x - deck_right_x = deck_start_x + total_deck_width * scale - - # ================= DECK SLOPE ================= - DECK_SLOPE = 0.025 # 2.5% cross slope (IRC) - deck_center_x = (deck_left_x + deck_right_x) / 2 - - def deck_y_at_x(x, base_y): - dx = x - deck_center_x - return base_y + dx * DECK_SLOPE - deck_bottom_y = girder_top_y - def slope_offset_at_x(x): - """Vertical shift due to deck slope at x""" - return deck_y_at_x(x, deck_bottom_y) - deck_bottom_y - deck_thick_px = self.params['deck_thickness'] * scale + deck_top_y = deck_bottom_y - deck_thick_px + + '''# ===== WEARING COURSE ===== + wc_thickness_mm = self.params.get(KEY_WEARING_COAT_THICKNESS, 0) + wc_thickness_px = wc_thickness_mm * scale + + wc_bottom_y = deck_top_y + wc_top_y = wc_bottom_y - wc_thickness_px''' + fp_bottom_y = deck_bottom_y fp_top_y = fp_bottom_y - fp_thick_px - deck_top_y_left = deck_y_at_x(deck_left_x, deck_bottom_y - deck_thick_px) - deck_top_y_right = deck_y_at_x(deck_right_x, deck_bottom_y - deck_thick_px) - - deck_top_y_left -= wearing_coat_px - deck_top_y_right -= wearing_coat_px - - # use a single representative value - deck_top_y = (deck_top_y_left + deck_top_y_right) / 2 + deck_start_x = center_x - (total_deck_width * scale) / 2 + deck_left_x = deck_start_x + deck_right_x = deck_start_x + total_deck_width * scale # Calculate all widths in pixels crash_barrier_width_px = self.params['crash_barrier_width'] * scale @@ -1123,91 +1079,23 @@ def slope_offset_at_x(x): deck_hovered = (self.hovered_element == 'deck') deck_color = QColor(240, 240, 240) if deck_hovered else CONCRETE_COLOR - #painter.setPen(QPen(QColor(0, 0, 0), 2)) - #painter.setBrush(Qt.NoBrush) - #painter.drawRect(QRectF(deck_slab_left, deck_top_y, - #deck_slab_right - deck_slab_left, deck_thick_px)) - - # ================= WEARING COAT LAYER ================= - if KEY_WEARING_COAT_THICKNESS in self.params: - wc_thickness_mm = self.params[KEY_WEARING_COAT_THICKNESS] - - if wc_thickness_mm > 0: - wc_px = wc_thickness_mm * scale - - # Wearing coat follows deck slope - wc_top_left_y = deck_top_y_left - wc_top_right_y = deck_top_y_right - - wc_bottom_left_y = wc_top_left_y + wc_px - wc_bottom_right_y = wc_top_right_y + wc_px - - wearing_coat_poly = QPolygonF([ - QPointF(deck_slab_left, wc_top_left_y), - QPointF(deck_slab_right, wc_top_right_y), - QPointF(deck_slab_right, wc_bottom_right_y), - QPointF(deck_slab_left, wc_bottom_left_y), - ]) - - painter.setBrush(QBrush(WEARING_COAT_COLOR)) - painter.setPen(QPen(QColor(0, 0, 0), 1.0)) - painter.drawPolygon(wearing_coat_poly) - - # Hover zone (optional but recommended) - self.cross_section_hover_zones.append( - (wearing_coat_poly.boundingRect(), 'wearing_coat') - ) + painter.setPen(QPen(QColor(0, 0, 0), 2)) + painter.setBrush(Qt.NoBrush) + painter.drawRect(QRectF(deck_slab_left, deck_top_y, + deck_slab_right - deck_slab_left, deck_thick_px)) # ---- DRAW FULL DECK SLAB (ONCE) ---- painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) - deck_polygon = QPolygonF([ - QPointF(deck_slab_left, deck_top_y_left), # top-left - QPointF(deck_slab_right, deck_top_y_right), # top-right - QPointF(deck_slab_right, deck_top_y_right + deck_thick_px),# bottom-right - QPointF(deck_slab_left, deck_top_y_left + deck_thick_px) # bottom-left - ]) + painter.drawRect(QRectF( + deck_slab_left, + deck_top_y, + deck_slab_right - deck_slab_left, + deck_thick_px + )) - painter.setBrush(self.concrete_brush) - painter.setPen(QPen(QColor(0, 0, 0), 2)) - painter.drawPolygon(deck_polygon) - - # ---- OUTLINE DECK TOP EDGES OUTSIDE CARRIAGEWAY (CONSISTENCY FIX) ---- - painter.setPen(QPen(QColor(0, 0, 0), 2)) - painter.setBrush(Qt.NoBrush) - - # LEFT side: between railing and crash barrier - if fp_config in ['left', 'both'] and left_fp_width > 0: - painter.drawLine( - QPointF(deck_left_x, deck_y_at_x(deck_left_x, deck_bottom_y - deck_thick_px)), - QPointF(deck_slab_left, deck_y_at_x(deck_slab_left, deck_bottom_y - deck_thick_px)) - ) - - # RIGHT side: between crash barrier and railing - if fp_config in ['right', 'both'] and right_fp_width > 0: - painter.drawLine( - QPointF(deck_slab_right, deck_y_at_x(deck_slab_right, deck_bottom_y - deck_thick_px)), - QPointF(deck_right_x, deck_y_at_x(deck_right_x, deck_bottom_y - deck_thick_px)) - ) - # ---- OUTLINE DECK BOTTOM EDGES UNDER FOOTPATHS (CONSISTENCY FIX) ---- - painter.setPen(QPen(QColor(0, 0, 0), 1.5)) - painter.setBrush(Qt.NoBrush) - - # LEFT bottom edge (under left footpath) - if fp_config in ['left', 'both'] and left_fp_width > 0: - painter.drawLine( - QPointF(deck_left_x, deck_y_at_x(deck_left_x, deck_bottom_y)), - QPointF(deck_slab_left, deck_y_at_x(deck_slab_left, deck_bottom_y)) - ) - - # RIGHT bottom edge (under right footpath) - if fp_config in ['right', 'both'] and right_fp_width > 0: - painter.drawLine( - QPointF(deck_slab_right, deck_y_at_x(deck_slab_right, deck_bottom_y)), - QPointF(deck_right_x, deck_y_at_x(deck_right_x, deck_bottom_y)) - ) - '''if median_present: + if median_present: painter.setPen(QPen(QColor(0, 0, 0), 2)) painter.setBrush(Qt.NoBrush) painter.drawRect(QRectF(deck_slab_left, deck_top_y, @@ -1217,20 +1105,61 @@ def slope_offset_at_x(x): painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) painter.drawRect(QRectF(carriageway_start_x, deck_top_y, - carriageway_end_x - carriageway_start_x, deck_thick_px))''' + carriageway_end_x - carriageway_start_x, deck_thick_px)) + + '''if wc_thickness_px > 0 and not median_present: + painter.setBrush(QBrush(QColor(90, 90, 90))) + painter.setPen(Qt.NoPen) + + painter.drawRect(QRectF( + carriageway_start_x, + wc_top_y, + carriageway_end_x - carriageway_start_x, + wc_thickness_px + )) + + if wc_thickness_px > 0 and median_present: + painter.setBrush(QBrush(QColor(90, 90, 90))) + painter.setPen(Qt.NoPen) + + # Left carriageway wearing course + painter.drawRect(QRectF( + carriageway_start_x, + wc_top_y, + median_start_x - carriageway_start_x, + wc_thickness_px + )) + + # Right carriageway wearing course + painter.drawRect(QRectF( + median_end_x, + wc_top_y, + carriageway_end_x - median_end_x, + wc_thickness_px + )) + + if wc_thickness_px > 0: + wc_hover_rect = QRectF( + carriageway_start_x, + wc_top_y, + carriageway_end_x - carriageway_start_x, + wc_thickness_px + ) + self.cross_section_hover_zones.append((wc_hover_rect, 'wearing_course'))''' # Register hover zone for deck - deck_hover_rect = deck_polygon.boundingRect() + deck_hover_rect = QRectF(deck_slab_left, deck_top_y, + deck_slab_right - deck_slab_left, deck_thick_px) self.cross_section_hover_zones.append((deck_hover_rect, 'deck')) # Crash barrier deck zones painter.setBrush(self.concrete_brush) - '''painter.drawRect(QRectF(left_barrier_x, deck_top_y, + painter.drawRect(QRectF(left_barrier_x, deck_top_y, crash_barrier_width_px, deck_thick_px)) painter.drawRect(QRectF(right_barrier_x, deck_top_y, - crash_barrier_width_px, deck_thick_px))''' + crash_barrier_width_px, deck_thick_px)) # footpath to deck connecting line dashed_pen = QPen(QColor(0, 0, 0), 1.5, Qt.DashLine) @@ -1242,57 +1171,37 @@ def slope_offset_at_x(x): painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) - fp_left_top_y = deck_y_at_x(left_fp_x, deck_bottom_y) - fp_thick_px - fp_right_top_y = deck_y_at_x(left_barrier_x, deck_bottom_y) - fp_thick_px - - left_fp_poly = QPolygonF([ - QPointF(left_fp_x, fp_left_top_y), - QPointF(left_barrier_x, fp_right_top_y), - QPointF(left_barrier_x, fp_right_top_y + fp_thick_px), - QPointF(left_fp_x, fp_left_top_y + fp_thick_px), - ]) - - painter.drawPolygon(left_fp_poly) + painter.drawRect(QRectF(left_fp_x, fp_top_y, + left_fp_width_px, fp_thick_px)) # Draw horizontal edges as solid - #painter.setPen(QPen(QColor(0, 0, 0), 2)) - #painter.setBrush(Qt.NoBrush) + painter.setPen(QPen(QColor(0, 0, 0), 2)) + painter.setBrush(Qt.NoBrush) # Top edge - #painter.drawLine(QPointF(left_fp_x, fp_top_y), - #QPointF(left_fp_x + left_fp_width_px, fp_top_y)) + painter.drawLine(QPointF(left_fp_x, fp_top_y), + QPointF(left_fp_x + left_fp_width_px, fp_top_y)) # Bottom edge - #painter.drawLine(QPointF(left_fp_x, fp_top_y + fp_thick_px), - #QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) + painter.drawLine(QPointF(left_fp_x, fp_top_y + fp_thick_px), + QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) # Left edge - #painter.setPen(QPen(QColor(0, 0, 0), 2)) - #painter.drawLine(QPointF(left_fp_x, fp_top_y), - #QPointF(left_fp_x, fp_top_y + fp_thick_px)) + painter.setPen(QPen(QColor(0, 0, 0), 2)) + painter.drawLine(QPointF(left_fp_x, fp_top_y), + QPointF(left_fp_x, fp_top_y + fp_thick_px)) # Right edge - #painter.setPen(dashed_pen) - #painter.drawLine(QPointF(left_fp_x + left_fp_width_px, fp_top_y), - #QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) + painter.setPen(dashed_pen) + painter.drawLine(QPointF(left_fp_x + left_fp_width_px, fp_top_y), + QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) if fp_config in ['right', 'both'] and right_fp_width > 0: # Draw footpath fill painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) - fp_right_top_y1 = deck_y_at_x(right_fp_x, deck_bottom_y) - fp_thick_px - fp_right_top_y2 = deck_y_at_x(deck_right_x, deck_bottom_y) - fp_thick_px - - right_fp_poly = QPolygonF([ - QPointF(right_fp_x, fp_right_top_y1), - QPointF(deck_right_x, fp_right_top_y2), - QPointF(deck_right_x, fp_right_top_y2 + fp_thick_px), - QPointF(right_fp_x, fp_right_top_y1 + fp_thick_px), - ]) - - painter.setBrush(self.concrete_brush) - painter.setPen(Qt.NoPen) - painter.drawPolygon(right_fp_poly) + painter.drawRect(QRectF(right_fp_x, fp_top_y, + right_fp_width_px, fp_thick_px)) - '''# Draw horizontal edges as solid + # Draw horizontal edges as solid painter.setPen(QPen(QColor(0, 0, 0), 2)) painter.setBrush(Qt.NoBrush) # Top edge @@ -1310,7 +1219,7 @@ def slope_offset_at_x(x): # Right edge (outer edge where railing sits) - SOLID painter.setPen(QPen(QColor(0, 0, 0), 2)) painter.drawLine(QPointF(right_fp_x + right_fp_width_px, fp_top_y), - QPointF(right_fp_x + right_fp_width_px, fp_top_y + fp_thick_px))''' + QPointF(right_fp_x + right_fp_width_px, fp_top_y + fp_thick_px)) # Draw crash barriers #cb_y = deck_top_y - 1 # Left barrier: x is where it STARTS (left edge) @@ -1318,90 +1227,39 @@ def slope_offset_at_x(x): # Right barrier: x is where it ENDS (right edge) = right_barrier_end_x #self.draw_crash_barrier(painter, right_barrier_end_x, cb_y, scale, side='right') - if median_present and median_start_x is not None and median_end_x is not None: - median_center_x = (median_start_x + median_end_x) / 2 - - median_deck_y = deck_y_at_x( - median_center_x, - deck_bottom_y - deck_thick_px - wearing_coat_px - ) - - self.draw_median_crash_barriers( - painter, - median_start_x, - median_end_x, - median_deck_y, - scale, - MEDIAN_GREY - ) + if median_present: + self.draw_median_crash_barriers(painter, median_start_x, median_end_x, deck_top_y, scale, MEDIAN_GREY) # Draw the main deck bottom line solid (only the deck slab portion) painter.setPen(QPen(QColor(0, 0, 0), 1.5)) - painter.drawLine( - QPointF(deck_slab_left, deck_y_at_x(deck_slab_left, deck_bottom_y)), - QPointF(deck_slab_right, deck_y_at_x(deck_slab_right, deck_bottom_y)) - ) + painter.drawLine(QPointF(deck_slab_left, deck_bottom_y), + QPointF(deck_slab_right, deck_bottom_y)) # Draw dashed lines for footpath area bottom and vertical connections # Left footpath area if fp_config in ['left', 'both'] and left_fp_width > 0: - fp_dim_x = left_fp_x + left_fp_width_px / 2 - - fp_top_dim_y = deck_y_at_x(fp_dim_x, deck_bottom_y) - fp_thick_px - fp_bottom_dim_y = deck_y_at_x(fp_dim_x, deck_bottom_y) - painter.setPen(dashed_pen) - painter.drawLine( - QPointF(fp_dim_x, fp_top_dim_y), - QPointF(fp_dim_x, fp_bottom_dim_y) - ) + # Bottom line under footpath area (dashed) + painter.drawLine(QPointF(deck_left_x, deck_bottom_y), + QPointF(deck_slab_left, deck_bottom_y)) # Outer vertical line from footpath bottom to deck bottom level (dashed) - fp_outer_bottom_y = deck_y_at_x(deck_left_x, deck_bottom_y) - - painter.drawLine( - QPointF(deck_left_x, fp_outer_bottom_y - fp_thick_px), - QPointF(deck_left_x, fp_outer_bottom_y) - ) + painter.drawLine(QPointF(deck_left_x, fp_top_y + fp_thick_px), + QPointF(deck_left_x, deck_bottom_y)) # Right footpath area if fp_config in ['right', 'both'] and right_fp_width > 0: - fp_dim_x = right_fp_x + right_fp_width_px / 2 - - fp_top_dim_y = deck_y_at_x(fp_dim_x, deck_bottom_y) - fp_thick_px - fp_bottom_dim_y = deck_y_at_x(fp_dim_x, deck_bottom_y) - painter.setPen(dashed_pen) - painter.drawLine( - QPointF(fp_dim_x, fp_top_dim_y), - QPointF(fp_dim_x, fp_bottom_dim_y) - ) + # Bottom line under footpath area (dashed) + painter.drawLine(QPointF(deck_slab_right, deck_bottom_y), + QPointF(deck_right_x, deck_bottom_y)) # Outer vertical line from footpath bottom to deck bottom level (dashed) - fp_outer_bottom_y = deck_y_at_x(deck_right_x, deck_bottom_y) - - painter.drawLine( - QPointF(deck_right_x, fp_outer_bottom_y - fp_thick_px), - QPointF(deck_right_x, fp_outer_bottom_y) - ) + painter.drawLine(QPointF(deck_right_x, fp_top_y + fp_thick_px), + QPointF(deck_right_x, deck_bottom_y)) # Draw girders and stiffeners for girder_x in positions: - y_shift = slope_offset_at_x(girder_x) - - self.draw_i_section( - painter, - girder_x, - base_y + y_shift, - scale, - GIRDER_COLOR - ) - - self.draw_stiffeners( - painter, - girder_x, - base_y + y_shift, - scale, - STIFFENER_COLOR - ) + self.draw_i_section(painter, girder_x, base_y, scale, GIRDER_COLOR) + self.draw_stiffeners(painter, girder_x, base_y, scale, STIFFENER_COLOR) # -------- 4.d CL OF BEARING (DASHED BLACK) -------- # painter.setPen(QPen(QColor(0, 0, 0), 1.0, Qt.DashLine)) @@ -1454,16 +1312,12 @@ def slope_offset_at_x(x): x1 = positions[i] + half_web x2 = positions[i + 1] - half_web - # Independent slope offsets - y_shift_left = slope_offset_at_x(positions[i]) - y_shift_right = slope_offset_at_x(positions[i + 1]) - # Girder edges - girder_top_left = (base_y + y_shift_left) - girder_depth_visual - girder_bottom_left = (base_y + y_shift_left) - bf_thickness + girder_top_left = base_y - girder_depth_visual + girder_bottom_left = base_y - bf_thickness - girder_top_right = (base_y + y_shift_right) - girder_depth_visual - girder_bottom_right = (base_y + y_shift_right) - bf_thickness + girder_top_right = base_y - girder_depth_visual + girder_bottom_right = base_y - bf_thickness # Connection points top_L = girder_top_left + tf_top + 0.02 * girder_depth_visual @@ -1518,54 +1372,19 @@ def slope_offset_at_x(x): left_railing_rect = None right_railing_rect = None - # LEFT railing if fp_config in ['left', 'both'] and left_fp_width > 0: railing_x = deck_left_x - railing_base_y = deck_y_at_x( - railing_x + railing_width_px / 2, - deck_bottom_y - ) - left_railing_rect = self.draw_railing_post_fixed( - painter, railing_x, railing_base_y, scale, "left" - ) - - # RIGHT railing + left_railing_rect = self.draw_railing_post_fixed(painter, railing_x, fp_top_y, scale, "left") + if fp_config in ['right', 'both'] and right_fp_width > 0: railing_x = deck_right_x - railing_outer_width_px - railing_base_y = deck_y_at_x( - railing_x + railing_width_px / 2, - deck_bottom_y - ) - right_railing_rect = self.draw_railing_post_fixed( - painter, railing_x, railing_base_y, scale, "right" - ) - # LEFT crash barrier base sits on sloped deck - cb_left_y = deck_y_at_x( - left_barrier_x + crash_barrier_width_px / 2, - deck_bottom_y - deck_thick_px - ) - - # RIGHT crash barrier base sits on sloped deck - cb_right_y = deck_y_at_x( - right_barrier_x + crash_barrier_width_px / 2, - deck_bottom_y - deck_thick_px - ) - - self.draw_crash_barrier( - painter, - left_barrier_x, - cb_left_y, - scale, - side='left' - ) - - self.draw_crash_barrier( - painter, - right_barrier_end_x, - cb_right_y, - scale, - side='right' - ) + right_railing_rect = self.draw_railing_post_fixed(painter, railing_x, fp_top_y, scale, "right") + # Draw crash barriers + cb_y = deck_top_y + # Left barrier: x is where it STARTS (left edge) + self.draw_crash_barrier(painter, left_barrier_x, cb_y, scale, side='left') + # Right barrier: x is where it ENDS (right edge) = right_barrier_end_x + self.draw_crash_barrier(painter, right_barrier_end_x, cb_y, scale, side='right') # Add dimensions if self.show_dimensions: self.add_professional_cross_section_dimensions( @@ -2308,34 +2127,12 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): h = TOTAL_HEIGHT * scale bottom_w = self.params['crash_barrier_width'] * scale base_v = BASE_VERTICAL * scale - - # ----- slope-aware base correction ----- - half_w = bottom_w / 2 - if side == 'left': - x_left = x - x_right = x + bottom_w - center_x = x + half_w - else: - x_right = x - x_left = x - bottom_w - center_x = x - half_w - - # deck slope correction - slope = 0.025 # MUST match DECK_SLOPE used elsewhere + y_bottom = y + y_base_top = y - base_v + y_mid = y - MID_OFFSET * scale + y_top = y - h - y_left = y - y_right = y - y_base_top_left = y_left - base_v - y_base_top_right = y_right - base_v - - y_mid_left = y_left - MID_OFFSET * scale - y_mid_right = y_right - MID_OFFSET * scale - - y_top_left = y_left - h - y_top_right = y_right - h - # top Y for hover rect (safe) - y_top_min = min(y_top_left, y_top_right) right_at_mid = 250 * scale left_at_top = 50 * scale right_at_top = 225 * scale @@ -2347,26 +2144,28 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): if side == 'left': points = [ - QPointF(x_left, y_left), - QPointF(x_right, y_right), - QPointF(x_right, y_base_top_right), - QPointF(x_right + right_at_mid - bottom_w, y_mid_right), - QPointF(x + right_at_top, y_top_right), - QPointF(x + left_at_top, y_top_left), - QPointF(x_left, y_base_top_left), + QPointF(x, y_bottom), + QPointF(x + bottom_w, y_bottom), + QPointF(x + bottom_w, y_base_top), + QPointF(x + right_at_mid, y_mid), + QPointF(x + right_at_top, y_top), + QPointF(x + left_at_top, y_top), + QPointF(x, y_base_top), ] - hover_rect = QRectF(x_left, y_top_min, bottom_w, h) + hover_rect = QRectF(x, y_top, bottom_w, h) else: + x_right = x + x_left = x - bottom_w points = [ - QPointF(x_left, y_left), - QPointF(x_right, y_right), - QPointF(x_right, y_base_top_right), - QPointF(x_right - left_at_top, y_top_right), - QPointF(x_right - right_at_top, y_top_right), - QPointF(x_right - right_at_mid, y_mid_right), - QPointF(x_left, y_base_top_left), + QPointF(x_left, y_bottom), + QPointF(x_right, y_bottom), + QPointF(x_right, y_base_top), + QPointF(x_right - left_at_top, y_top), + QPointF(x_right - right_at_top, y_top), + QPointF(x_right - right_at_mid, y_mid), + QPointF(x_left, y_base_top), ] - hover_rect = QRectF(x_left, y_top_min, bottom_w, h) + hover_rect = QRectF(x_left, y_top, bottom_w, h) self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) painter.setBrush(QBrush(barrier_color)) @@ -2410,4 +2209,5 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): painter.drawRect(QRectF(base_x + 20 * scale, beam_y, width - 40 * scale, beam_thickness)) hover_rect = QRectF(base_x, y - kerb_h - post_h, width, post_h + kerb_h) - self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) \ No newline at end of file + self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) + From b2ed455babdc19e0e7ff6ecf1470dfd616d72ff7 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Fri, 27 Feb 2026 04:10:56 +0530 Subject: [PATCH 087/225] Correct crash barrier CAD rendering and sync with IRC 5 spec --- .../dialogs/tabs/typical_section_details.py | 4 + .../desktop/ui/docks/cad_cross_section.py | 175 ++++++++---------- 2 files changed, 80 insertions(+), 99 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index ca9319bc3..07b181a99 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -1626,6 +1626,10 @@ def on_crash_barrier_type_changed(self, barrier_type): # Recalculate AFTER geometry is locked self.recalculate_girders() + # Refresh CAD preview to show the newly selected barrier shape + self._update_cad_preview() + + def on_railing_load_mode_changed(self, mode): if not hasattr(self, "railing_load_value"): return diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 8cc350635..2257df41c 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -21,45 +21,6 @@ ) import random -CRASH_BARRIER_TYPES = { - - # === RCC BARRIERS === - "IRC 5 - RCC Crash Barrier": { - "type": "rcc", - "total_height": 750.0, - "top_width": 150.0, - "bottom_width": 300.0, - "base_vertical": 100.0, - "mid_offset": 300.0, - }, - - "IRC 5 - High Containment RCC Crash Barrier": { - "type": "rcc", - "total_height": 900.0, - "top_width": 175.0, - "bottom_width": 350.0, - "base_vertical": 100.0, - "mid_offset": 350.0, - }, - - # === METALLIC BARRIERS === - "IRC 5 - Metallic Crash Barrier with Single W-Beam": { - "type": "metallic", - "post_height": 750.0, - "kerb_height": 150.0, - "w_beams": 1, - }, - - "IRC 5 - Metallic Crash Barrier with Double W-Beam": { - "type": "metallic", - "post_height": 750.0, - "kerb_height": 150.0, - "w_beams": 2, - }, -} - - - class CrossSectionCADWidget(QWidget): """Widget for drawing bridge cross-section view""" # ===== SHARED CAD COLORS ===== @@ -81,7 +42,7 @@ def __init__(self, parent=None): self.setMouseTracking(True) # enable mouse tracking for hover self.concrete_brush = self.create_concrete_brush() self.crash_barrier_params = {} - self.crash_barrier_type = "IRC 5 - High Containment RCC Crash Barrier" + self.crash_barrier_type = "IRC 5 - RCC Crash Barrier" self.railing_type = None self.median_type = None # hover label regions: list of (QRectF, text, bg_color, text_color) @@ -424,6 +385,10 @@ def update_params(self, params: dict): if "crash_barrier_geometry" in params: self.crash_barrier_params = params["crash_barrier_geometry"] + # Store crash barrier type so draw_crash_barrier() can dispatch on it + if "crash_barrier_type" in params: + self.crash_barrier_type = params["crash_barrier_type"] + if "railing_type" in params: self.railing_type = params["railing_type"] @@ -2108,24 +2073,27 @@ def draw_stiffeners(self, painter, x, base_y, scale, stiffener_color): painter.drawPolygon(right_stiffener) def draw_crash_barrier(self, painter, x, y, scale, side='left'): - + """Draw crash barrier cross-section using IRC 5 geometry spec. + """ cb_type = self.crash_barrier_type - cb = CRASH_BARRIER_TYPES.get(cb_type) + geo = CrashBarrierGeometry.get_geometry(cb_type) - if not cb: + if not geo: return - - # ================= RCC CRASH BARRIER ================= - if cb["type"] == "rcc": - TOTAL_HEIGHT = cb["total_height"] - TOP_WIDTH = cb["top_width"] - BOTTOM_WIDTH = cb["bottom_width"] - BASE_VERTICAL = cb["base_vertical"] - MID_OFFSET = cb["mid_offset"] + barrier_color = QColor(126, 126, 126) + if self.hovered_element == 'crash_barrier': + barrier_color = QColor(255, 250, 220) + + # ------- RCC CRASH BARRIER -------- + if geo["type"] == "rcc": + TOTAL_HEIGHT = geo["total_height"] + BOTTOM_WIDTH = geo["bottom_width"] + BASE_VERTICAL = geo["base_vertical"] + MID_OFFSET = geo["mid_offset"] h = TOTAL_HEIGHT * scale - bottom_w = self.params['crash_barrier_width'] * scale + bottom_w = BOTTOM_WIDTH * scale base_v = BASE_VERTICAL * scale y_bottom = y @@ -2133,80 +2101,89 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): y_mid = y - MID_OFFSET * scale y_top = y - h - right_at_mid = 250 * scale - left_at_top = 50 * scale - right_at_top = 225 * scale - - barrier_color = QColor(126, 126, 126) + + # Reference shape is High Containment (bottom_width=350 mm). + # All offsets scale proportionally to the actual bottom_width. + shape_scale = BOTTOM_WIDTH / 350.0 + right_at_mid = 250 * scale * shape_scale # outer wall x at inflection + left_at_top = 50 * scale * shape_scale # inner wall x at top (lean) + right_at_top = 225 * scale * shape_scale # outer wall x at top - if self.hovered_element == 'crash_barrier': - barrier_color = QColor(255, 250, 220) + painter.setBrush(QBrush(barrier_color)) + painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) if side == 'left': + # Same as median RIGHT barrier (carriageway-facing curve on the right) points = [ - QPointF(x, y_bottom), - QPointF(x + bottom_w, y_bottom), - QPointF(x + bottom_w, y_base_top), - QPointF(x + right_at_mid, y_mid), - QPointF(x + right_at_top, y_top), - QPointF(x + left_at_top, y_top), - QPointF(x, y_base_top), + QPointF(x, y_bottom), # BL + QPointF(x + bottom_w, y_bottom), # BR + QPointF(x + bottom_w, y_base_top), # R1 (outer, vertical base) + QPointF(x + right_at_mid, y_mid), # R2 (outer wall kink) + QPointF(x + right_at_top, y_top), # TR (outer wall top) + QPointF(x + left_at_top, y_top), # TL (inner wall top, leans in) + QPointF(x, y_base_top), # L1 (inner, vertical base) ] hover_rect = QRectF(x, y_top, bottom_w, h) else: - x_right = x - x_left = x - bottom_w + # Same as median LEFT barrier (carriageway-facing curve on the left) + # x is the RIGHT edge of this barrier points = [ - QPointF(x_left, y_bottom), - QPointF(x_right, y_bottom), - QPointF(x_right, y_base_top), - QPointF(x_right - left_at_top, y_top), - QPointF(x_right - right_at_top, y_top), - QPointF(x_right - right_at_mid, y_mid), - QPointF(x_left, y_base_top), + QPointF(x - bottom_w, y_bottom), # BL + QPointF(x, y_bottom), # BR + QPointF(x, y_base_top), # R1 (inner, vertical base) + QPointF(x - left_at_top, y_top), # TR (inner wall top, leans in) + QPointF(x - right_at_top, y_top), # TL (outer wall top) + QPointF(x - right_at_mid, y_mid), # L2 (outer wall kink) + QPointF(x - bottom_w, y_base_top), # L1 (outer, vertical base) ] - hover_rect = QRectF(x_left, y_top, bottom_w, h) + hover_rect = QRectF(x - bottom_w, y_top, bottom_w, h) self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) - painter.setBrush(QBrush(barrier_color)) - painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) painter.drawPolygon(QPolygonF(points)) return - # ================= METALLIC W-BEAM ================= - # Simple, visible, correct representation (posts + beams) - post_h = 750 * scale - kerb_h = 150 * scale - beam_spacing = 200 * scale - beam_thickness = 20 * scale - width = 350 * scale + # ================= METALLIC W-BEAM CRASH BARRIER ================= + # Shape: kerb rectangle at deck level + thin post on top + w_beams horizontal beams + post_h_mm = geo.get("post_height", 750) + kerb_h_mm = geo.get("kerb_height", 150) + n_beams = geo.get("w_beams", 1) - barrier_color = QColor(0, 120, 255) if "Single" in cb_type else QColor(255, 120, 0) + post_h = post_h_mm * scale + kerb_h = kerb_h_mm * scale + # Use crash_barrier_width param for total footprint width + width = self.params.get('crash_barrier_width', 350) * scale + post_w = max(4, 25 * scale) # post cross-section width + beam_t = max(3, 18 * scale) # W-beam thickness + beam_w = max(10, width * 0.7) # W-beam length + metallic_post_color = QColor(80, 80, 200) if n_beams == 1 else QColor(200, 100, 0) if self.hovered_element == 'crash_barrier': - barrier_color = QColor(255, 250, 220) + metallic_post_color = QColor(255, 250, 220) if side == 'left': base_x = x else: base_x = x - width - # Kerb + # Kerb rectangle painter.setBrush(QBrush(QColor(180, 180, 180))) - painter.setPen(QPen(Qt.black, 1.2)) + painter.setPen(QPen(Qt.black, max(1.0, scale))) painter.drawRect(QRectF(base_x, y - kerb_h, width, kerb_h)) - # Posts - post_x = base_x + width / 2 - painter.setBrush(QBrush(barrier_color)) - painter.drawRect(QRectF(post_x - 10 * scale, y - kerb_h - post_h, 20 * scale, post_h)) - - # W-beams - beams = 1 if "Single" in cb_type else 2 - for i in range(beams): - beam_y = y - kerb_h - 200 * scale - i * beam_spacing - painter.drawRect(QRectF(base_x + 20 * scale, beam_y, width - 40 * scale, beam_thickness)) + # Vertical post (centred on kerb) + post_x = base_x + (width - post_w) / 2 + painter.setBrush(QBrush(metallic_post_color)) + painter.setPen(QPen(Qt.black, max(1.0, scale))) + painter.drawRect(QRectF(post_x, y - kerb_h - post_h, post_w, post_h)) + + # Horizontal W-beams – evenly spaced along post height + beam_x = base_x + (width - beam_w) / 2 + spacing = post_h / (n_beams + 1) + painter.setBrush(QBrush(metallic_post_color)) + for i in range(n_beams): + beam_y = y - kerb_h - spacing * (i + 1) - beam_t / 2 + painter.drawRect(QRectF(beam_x, beam_y, beam_w, beam_t)) hover_rect = QRectF(base_x, y - kerb_h - post_h, width, post_h + kerb_h) self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) From 10bab7d6a7011932d3465405185b2d325239e11d Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 1 Mar 2026 03:26:07 +0530 Subject: [PATCH 088/225] Add crash barrier types - Single and Double W beam --- .../desktop/ui/docks/cad_cross_section.py | 170 ++++++++++++++---- 1 file changed, 137 insertions(+), 33 deletions(-) diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 2257df41c..07e9ba3a5 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -2143,48 +2143,152 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): return - # ================= METALLIC W-BEAM CRASH BARRIER ================= - # Shape: kerb rectangle at deck level + thin post on top + w_beams horizontal beams + # METALLIC W-BEAM CRASH BARRIER post_h_mm = geo.get("post_height", 750) kerb_h_mm = geo.get("kerb_height", 150) n_beams = geo.get("w_beams", 1) - post_h = post_h_mm * scale - kerb_h = kerb_h_mm * scale - # Use crash_barrier_width param for total footprint width - width = self.params.get('crash_barrier_width', 350) * scale - post_w = max(4, 25 * scale) # post cross-section width - beam_t = max(3, 18 * scale) # W-beam thickness - beam_w = max(10, width * 0.7) # W-beam length - - metallic_post_color = QColor(80, 80, 200) if n_beams == 1 else QColor(200, 100, 0) - if self.hovered_element == 'crash_barrier': - metallic_post_color = QColor(255, 250, 220) - + # Fallback dimensions from 3D CAD/IRC 5 standards for missing details + kerb_top_w_mm = 500.0 + kerb_bottom_w_mm = 550.0 + post_w_mm = 150.0 + post_offset_mm = 75.0 # Offset from kerb edge + spacer_w_mm = 200.0 + spacer_h_mm = 330.0 + w_beam_h_mm = 330.0 + w_beam_depth_mm = 83.0 + w_beam_thk_mm = 3.0 + + # Scale all dimensions + post_h = post_h_mm * scale + kerb_h = kerb_h_mm * scale + kerb_top_w = kerb_top_w_mm * scale + kerb_bottom_w = kerb_bottom_w_mm * scale + post_w = post_w_mm * scale + post_offset = post_offset_mm * scale + spacer_w = spacer_w_mm * scale + spacer_h = spacer_h_mm * scale + w_beam_h = w_beam_h_mm * scale + w_beam_depth = w_beam_depth_mm * scale + w_beam_thk = w_beam_thk_mm * scale + + # Calculate positioning if side == 'left': base_x = x + # Points for kerb (Trapezoid: outer wall vertical, inner wall slopes) + # Symmetric trapezoid as per 3D code logic + kerb_points = [ + QPointF(x, y), # Bottom Left + QPointF(x + kerb_bottom_w, y), # Bottom Right + QPointF(x + (kerb_bottom_w + kerb_top_w)/2, y - kerb_h), # Top Right + QPointF(x + (kerb_bottom_w - kerb_top_w)/2, y - kerb_h) # Top Left + ] + + # Post positioning (75mm from left end of kerb) + post_rect_x = x + post_offset + + # Spacer starts at post right edge and grows right + spacer_x_start = post_rect_x + post_w + spacer_width_val = spacer_w + + # W-Beam starts at spacer right edge + beam_root_x = spacer_x_start + spacer_w + else: - base_x = x - width - - # Kerb rectangle + # Mirror for right side + base_x = x - kerb_bottom_w + kerb_points = [ + QPointF(x - kerb_bottom_w, y), + QPointF(x, y), + QPointF(x - (kerb_bottom_w - kerb_top_w)/2, y - kerb_h), + QPointF(x - (kerb_bottom_w + kerb_top_w)/2, y - kerb_h) + ] + + # Post positioning (75mm from right end of kerb) + # x is the bottom-right coordinate of the kerb + post_rect_x = x - post_offset - post_w + + # Spacer starts at post left edge and grows left + spacer_x_start = post_rect_x + spacer_width_val = -spacer_w + + # W-Beam starts at spacer left edge (which is spacer_x_start - spacer_w) + beam_root_x = post_rect_x - spacer_w + + # Draw Kerb painter.setBrush(QBrush(QColor(180, 180, 180))) painter.setPen(QPen(Qt.black, max(1.0, scale))) - painter.drawRect(QRectF(base_x, y - kerb_h, width, kerb_h)) - - # Vertical post (centred on kerb) - post_x = base_x + (width - post_w) / 2 - painter.setBrush(QBrush(metallic_post_color)) - painter.setPen(QPen(Qt.black, max(1.0, scale))) - painter.drawRect(QRectF(post_x, y - kerb_h - post_h, post_w, post_h)) - - # Horizontal W-beams – evenly spaced along post height - beam_x = base_x + (width - beam_w) / 2 - spacing = post_h / (n_beams + 1) - painter.setBrush(QBrush(metallic_post_color)) - for i in range(n_beams): - beam_y = y - kerb_h - spacing * (i + 1) - beam_t / 2 - painter.drawRect(QRectF(beam_x, beam_y, beam_w, beam_t)) + painter.drawPolygon(QPolygonF(kerb_points)) + + # Draw Post + post_color = QColor(80, 80, 80) # Steel color + if self.hovered_element == 'crash_barrier': + post_color = QColor(255, 250, 220) + painter.setBrush(QBrush(post_color)) + painter.drawRect(QRectF(post_rect_x, y - kerb_h - post_h, post_w, post_h)) + + # Draw Spacer and W-Beam + if n_beams == 1: + h_centers = [post_h_mm - spacer_h_mm / 2.0] + else: + # Upper beam at top, lower beam below with 145mm gap (from 3D logic) + h_upper = post_h_mm - spacer_h_mm / 2.0 + h_lower = h_upper - spacer_h_mm - 145 + h_centers = [h_lower, h_upper] + + for h_center_mm in h_centers: + h_center = h_center_mm * scale + spacer_y = y - kerb_h - h_center - spacer_h / 2 + + # Draw Spacer + painter.setBrush(QBrush(post_color)) + painter.drawRect(QRectF(spacer_x_start, spacer_y, spacer_width_val, spacer_h)) + + # Draw W-Beam Profile (The double wave) + # Generate wave points + num_pts = 20 # Increased points for smoother wave + + def get_wave_y(z_rel): # z_rel from 0 to w_beam_h + sigma = w_beam_h / 10.0 + mu1 = w_beam_h * 0.25 + mu2 = w_beam_h * 0.75 + amp = w_beam_depth * 1.5 + + wave = ( + amp * math.exp(-((z_rel - mu1) ** 2) / (2 * sigma ** 2)) + + amp * math.exp(-((z_rel - mu2) ** 2) / (2 * sigma ** 2)) + ) + return wave + + outer_wave = [] + inner_wave = [] + + for pt_idx in range(num_pts + 1): + z_rel = (pt_idx / num_pts) * w_beam_h + wave_val = get_wave_y(z_rel) + + curr_y = spacer_y + (w_beam_h - z_rel) + + if side == 'left': + outer_wave.append(QPointF(beam_root_x + wave_val, curr_y)) + inner_wave.insert(0, QPointF(beam_root_x + wave_val - w_beam_thk, curr_y)) + else: + outer_wave.append(QPointF(beam_root_x - wave_val, curr_y)) + inner_wave.insert(0, QPointF(beam_root_x - wave_val + w_beam_thk, curr_y)) + + w_beam_polygon = QPolygonF(outer_wave + inner_wave) + painter.setBrush(QBrush(QColor(120, 120, 120))) + painter.drawPolygon(w_beam_polygon) - hover_rect = QRectF(base_x, y - kerb_h - post_h, width, post_h + kerb_h) + # Hover rect for the whole assembly + assembly_top_y = y - kerb_h - post_h + assembly_bottom_y = y + if side == 'left': + assembly_width = max(kerb_bottom_w, (beam_root_x + w_beam_depth - x)) + hover_rect = QRectF(x, assembly_top_y, abs(assembly_width), assembly_bottom_y - assembly_top_y) + else: + assembly_width = max(kerb_bottom_w, (x - (beam_root_x - w_beam_depth))) + hover_rect = QRectF(x - assembly_width, assembly_top_y, abs(assembly_width), assembly_bottom_y - assembly_top_y) + self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) From be6b143564c9bd604b166fb5d1885a5947db7f7e Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 1 Mar 2026 17:52:19 +0530 Subject: [PATCH 089/225] Add different medians CAD rendering and sync with IRC 5 spec --- src/osdagbridge/desktop/cad/irc5_geometry.py | 14 +- .../desktop/ui/docks/cad_cross_section.py | 204 +++++++++++++++++- 2 files changed, 204 insertions(+), 14 deletions(-) diff --git a/src/osdagbridge/desktop/cad/irc5_geometry.py b/src/osdagbridge/desktop/cad/irc5_geometry.py index 79b88b344..cc846d6b9 100644 --- a/src/osdagbridge/desktop/cad/irc5_geometry.py +++ b/src/osdagbridge/desktop/cad/irc5_geometry.py @@ -27,7 +27,7 @@ def get_geometry(barrier_type: str) -> dict: return { "type": "metallic", "w_beams": 1, - "post_height": 750.0, + "post_height": 950.0, "kerb_height": 150.0, } @@ -35,7 +35,7 @@ def get_geometry(barrier_type: str) -> dict: return { "type": "metallic", "w_beams": 2, - "post_height": 750.0, + "post_height": 950.0, "kerb_height": 150.0, } @@ -90,7 +90,7 @@ def get_geometry(median_type: str) -> dict: "bottom_width": 450, } - elif median_type == "IRC 5 - Metallic Crash Barrier": + elif median_type == "IRC 5 - Metallic Crash Barrier with Single W-Beam": return { "type": "metallic", "median_width": 1200, @@ -98,4 +98,12 @@ def get_geometry(median_type: str) -> dict: "w_beams": 1, } + elif median_type == "IRC 5 - Metallic Crash Barrier with Double W-Beam": + return { + "type": "metallic", + "median_width": 1200, + "post_height": 950, + "w_beams": 2, + } + return {} \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 07e9ba3a5..c3a7dd7c5 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -802,13 +802,181 @@ def create_concrete_brush(self): p.end() return QBrush(pixmap) - def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color): - """Draw two crash barriers for median, facing outward""" - painter.setBrush(QBrush(median_color)) + def draw_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color): + """Dispatcher for different median types based on IRC 5 geometry""" + geo = MedianGeometry.get_geometry(self.median_type) + if not geo: + return + + if geo["type"] == "kerb": + self.draw_raised_kerb_median(painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo) + elif geo["type"] == "rcc_barrier": + self.draw_rcc_barrier_median(painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo) + elif geo["type"] == "metallic": + self.draw_metallic_median(painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo) + + def draw_raised_kerb_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo): + """Draw Raised Kerb median (trapezoid shape)""" + h = geo.get("kerb_height", 225) * scale + top_w = geo.get("kerb_top_width", 1200) * scale + bottom_w = geo.get("kerb_bottom_width", 1200) * scale + + median_width_px = median_end_x - median_start_x + offset = (median_width_px - bottom_w) / 2 + + y_bottom = deck_top_y + y_top = deck_top_y - h + + x_bl = median_start_x + offset + x_br = x_bl + bottom_w + x_tl = x_bl + (bottom_w - top_w) / 2 + x_tr = x_tl + top_w + + points = [QPointF(x_bl, y_bottom), QPointF(x_br, y_bottom), QPointF(x_tr, y_top), QPointF(x_tl, y_top)] + if self.hovered_element == 'median': - MEDIAN_GREY = QColor(255, 250, 220) # same highlight as crash barrier + painter.setBrush(QBrush(QColor(255, 250, 220))) else: - MEDIAN_GREY = QColor(126, 126, 126) + painter.setBrush(QBrush(median_color)) + + painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) + painter.drawPolygon(QPolygonF(points)) + + hover_rect = QRectF(median_start_x, y_top, median_width_px, h) + self.cross_section_hover_zones.append((hover_rect, 'median')) + + def draw_rcc_barrier_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo): + """Draw two RCC crash barriers for median following standard shape""" + barrier_h_mm = geo.get("barrier_height", 900.0) + bottom_w_mm = geo.get("bottom_width", 450.0) + top_w_mm = geo.get("top_width", 175.0) + + h = barrier_h_mm * scale + bottom_w = bottom_w_mm * scale + median_width_px = median_end_x - median_start_x + + # Shape offsets proportional to standard HC barrier (350mm bottom) + shape_scale = bottom_w_mm / 350.0 + base_v = 100.0 * scale + mid_y_off = 350.0 * scale + right_at_mid = 250.0 * scale * shape_scale + left_at_top = 50.0 * scale * shape_scale + right_at_top = 225.0 * scale * shape_scale + + y_bottom = deck_top_y + y_base_top = y_bottom - base_v + y_mid = y_bottom - mid_y_off + y_top = y_bottom - h + + barrier_brush = QBrush(QColor(255, 250, 220)) if self.hovered_element == 'median' else QBrush(QColor(126, 126, 126)) + painter.setBrush(barrier_brush) + painter.setPen(QPen(Qt.black, max(1.5, scale * 1.5))) + + # LEFT assembly (faces LEFT) + x_l = median_start_x + bottom_w + points_l = [ + QPointF(x_l - bottom_w, y_bottom), QPointF(x_l, y_bottom), QPointF(x_l, y_base_top), + QPointF(x_l - left_at_top, y_top), QPointF(x_l - right_at_top, y_top), + QPointF(x_l - right_at_mid, y_mid), QPointF(x_l - bottom_w, y_base_top) + ] + painter.drawPolygon(QPolygonF(points_l)) + + # RIGHT assembly (faces RIGHT) + x_r = median_end_x - bottom_w + points_r = [ + QPointF(x_r, y_bottom), QPointF(x_r + bottom_w, y_bottom), QPointF(x_r + bottom_w, y_base_top), + QPointF(x_r + right_at_mid, y_mid), QPointF(x_r + right_at_top, y_top), + QPointF(x_r + left_at_top, y_top), QPointF(x_r, y_base_top) + ] + painter.drawPolygon(QPolygonF(points_r)) + + hover_rect = QRectF(median_start_x, y_top, median_width_px, h) + self.cross_section_hover_zones.append((hover_rect, 'median')) + + def draw_metallic_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo): + """Draw Metallic median with a common kerb base and beams on both sides""" + post_h_mm = geo.get("post_height", 950) + n_beams = geo.get("w_beams", 1) + median_width_mm = geo.get("median_width", 1200) + median_width_px = median_end_x - median_start_x + + kerb_h_mm = 225.0 + h_kerb = kerb_h_mm * scale + top_w = (median_width_mm - 50.0) * scale + bottom_w = median_width_mm * scale + post_h = post_h_mm * scale + + y_bottom = deck_top_y + y_top_kerb = deck_top_y - h_kerb + x_bl, x_br = median_start_x, median_end_x + x_tl = x_bl + (bottom_w - top_w) / 2 + x_tr = x_tl + top_w + + painter.setBrush(QBrush(QColor(180, 180, 180))) + painter.setPen(QPen(Qt.black, max(1.0, scale))) + painter.drawPolygon(QPolygonF([QPointF(x_bl, y_bottom), QPointF(x_br, y_bottom), QPointF(x_tr, y_top_kerb), QPointF(x_tl, y_top_kerb)])) + + post_w, post_offset = 150.0 * scale, 75.0 * scale + spacer_w, spacer_h = 200.0 * scale, 330.0 * scale + w_beam_h, w_beam_depth, w_beam_thk = 330.0 * scale, 83.0 * scale, 3.0 * scale + post_color = QColor(255, 250, 220) if self.hovered_element == 'median' else QColor(80, 80, 80) + + def draw_side_assembly(is_left): + # Assembly on Left side of median (near x_tl): [Beam] [Spacer] [Post] -> Facing left carriageway + # Assembly on Right side of median (near x_tr): [Post] [Spacer] [Beam] -> Facing right carriageway + + if is_left: + # x_tl is the left kerb end. Order: Beam (outer), Spacer (mid), Post (inner) + b_root_x = x_tl + w_beam_depth + s_x = x_tl + w_beam_depth + p_x = s_x + spacer_w + else: + # x_tr is the right kerb end. Order: Post (inner), Spacer (mid), Beam (outer) + b_root_x = x_tr - w_beam_depth + s_x = b_root_x - spacer_w + p_x = s_x - post_w + + # Draw Post + painter.setBrush(QBrush(post_color)) + painter.setPen(QPen(Qt.black, 1)) + painter.drawRect(QRectF(p_x, y_top_kerb - post_h, post_w, post_h)) + + h_centers = [post_h_mm - 165] if n_beams == 1 else [post_h_mm - 165, post_h_mm - 165 - 145 - 330] + for hc_mm in h_centers: + sy = y_top_kerb - hc_mm * scale - spacer_h / 2 + + # Draw Spacer + painter.setBrush(QBrush(post_color)) + painter.drawRect(QRectF(s_x, sy, spacer_w, spacer_h)) + + # Draw W-Beam Profile (Wave) + num_pts = 15 + outer_wave, inner_wave = [], [] + for i in range(num_pts + 1): + z_rel = (i / num_pts) * w_beam_h + wave_val = (w_beam_depth * 1.5) * (math.exp(-((z_rel - w_beam_h*0.25)**2)/(2*(w_beam_h/10)**2)) + math.exp(-((z_rel - w_beam_h*0.75)**2)/(2*(w_beam_h/10)**2))) + curr_y = sy + (w_beam_h - z_rel) + + if is_left: + wx = b_root_x - wave_val # Faces LEFT + outer_wave.append(QPointF(wx, curr_y)) + inner_wave.insert(0, QPointF(wx + w_beam_thk, curr_y)) + else: + wx = b_root_x + wave_val # Faces RIGHT + outer_wave.append(QPointF(wx, curr_y)) + inner_wave.insert(0, QPointF(wx - w_beam_thk, curr_y)) + + painter.setBrush(QBrush(QColor(120, 120, 120))) + painter.drawPolygon(QPolygonF(outer_wave + inner_wave)) + + draw_side_assembly(True) + draw_side_assembly(False) + hover_rect = QRectF(median_start_x, y_top_kerb - post_h, median_width_px, post_h + h_kerb) + self.cross_section_hover_zones.append((hover_rect, 'median')) + + def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color): + """DEPRECATED: Use draw_rcc_barrier_median or dispatcher instead.""" + pass CONCRETE_COLOR = QColor(225, 225, 225) @@ -1193,7 +1361,7 @@ def draw_cross_section(self, painter): #self.draw_crash_barrier(painter, right_barrier_end_x, cb_y, scale, side='right') if median_present: - self.draw_median_crash_barriers(painter, median_start_x, median_end_x, deck_top_y, scale, MEDIAN_GREY) + self.draw_median(painter, median_start_x, median_end_x, deck_top_y, scale, MEDIAN_GREY) # Draw the main deck bottom line solid (only the deck slab portion) painter.setPen(QPen(QColor(0, 0, 0), 1.5)) @@ -1758,23 +1926,37 @@ def add_cross_section_hover_labels(self, painter, carriageway_start_x, carriagew railing_top_y = right_railing_rect[1] components.append((railing_rect, "Railing", railing_center_x, railing_top_y, 'on_figure_top', None)) - # Median barriers - text on top of figure (like railing) + # Median - text on top of figure (like railing or crash barrier) if median_present and median_start_x is not None: + # Get actual median height for correct label positioning + m_geo = MedianGeometry.get_geometry(self.median_type) + m_h = 0 + if m_geo: + if m_geo.get("type") == "kerb": + m_h = m_geo.get("kerb_height", 225) * scale + elif m_geo.get("type") == "rcc_barrier": + m_h = m_geo.get("barrier_height", 900) * scale + elif m_geo.get("type") == "metallic": + m_h = m_geo.get("post_height", 950) * scale + + if m_h == 0: + m_h = cb_height # Fallback + median_rect = QRectF( median_start_x, - deck_top_y - cb_height, + deck_top_y - m_h, median_end_x - median_start_x, - cb_height + m_h ) median_center_x = (median_start_x + median_end_x) / 2 - median_top_y = deck_top_y - cb_height + median_top_y = deck_top_y - m_h components.append(( median_rect, "Median", median_center_x, median_top_y, - 'on_figure_top', # SAME AS RAILING + 'on_figure_top', None )) From a754b8332ae4b42b61fe830ab1d2623be893e38f Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 1 Mar 2026 20:58:44 +0530 Subject: [PATCH 090/225] fix: Table/Database Intg_osdag.sqlite not found --- src/osdagbridge/desktop/__main__.py | 91 +++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/src/osdagbridge/desktop/__main__.py b/src/osdagbridge/desktop/__main__.py index 1149e7ff6..71840a4e5 100644 --- a/src/osdagbridge/desktop/__main__.py +++ b/src/osdagbridge/desktop/__main__.py @@ -3,6 +3,97 @@ from PySide6.QtCore import QFile, QTextStream from osdagbridge.desktop.resources import resources_rc +# Create Intg_osdag.sqlite if not Exist +def create_sqlite(): + import sqlite3 + import subprocess + from importlib.resources import files + import shutil + + try: + # Get paths + sqlpath = files('osdagbridge.core.data.ResourceFiles').joinpath('Intg_osdag.sql') + sqlitepath = files('osdagbridge.core.data.ResourceFiles').joinpath('Intg_osdag.sqlite') + + if not sqlpath.exists(): + print(f"[ERROR] SQL file not found: {sqlpath}") + return + + # Determine if we need to create or update + needs_creation = not sqlitepath.exists() + needs_update = (sqlitepath.exists() and + (sqlitepath.stat().st_size == 0 or + sqlitepath.stat().st_mtime < sqlpath.stat().st_mtime - 1)) + + if not needs_creation and not needs_update: + # print("[INFO] Database is up to date") + return + + # Create backup if updating existing database + backup_path = None + if needs_update: + backup_path = sqlitepath.with_suffix('.sqlite.backup') + shutil.copy2(sqlitepath, backup_path) + + # Create/update database + target_path = sqlitepath + if needs_update: + # Create in temp location first + target_path = sqlitepath.parent / 'Intg_osdag_temp.sqlite' + + # Try Python sqlite3 first + try: + with open(sqlpath, 'r', encoding='utf-8') as sql_file: + sql_content = sql_file.read() + + conn = sqlite3.connect(target_path) + conn.executescript(sql_content) + conn.close() + + print(f"[INFO] Intg_osdag sqlite database {'created' if needs_creation else 'updated'} using python sqlite3") + + except Exception as e: + print(f"[ERROR] Python sqlite3 failed: {e}, trying command line") + + # Fallback to command line + result = subprocess.run([ + 'sqlite3', str(target_path), + f'.read {sqlpath}' + ], capture_output=True, text=True, timeout=30) + + if result.returncode != 0: + raise Exception(f"[ERROR] Command line sqlite3 failed: {result.stderr}") + + print(f"[INFO] Intg_osdag sqlite database {'created' if needs_creation else 'updated'} using command line") + + # If updating, replace the original + if needs_update: + sqlitepath.unlink() + target_path.rename(sqlitepath) + if backup_path and backup_path.exists(): + backup_path.unlink() + + # Touch the SQL file to update timestamp + sqlpath.touch() + + except Exception as e: + print(f"[ERROR] Database setup failed: {e}") + + # Cleanup on failure + if needs_update: + # Restore backup if available + if backup_path and backup_path.exists(): + if not sqlitepath.exists(): + shutil.copy2(backup_path, sqlitepath) + backup_path.unlink() + + # Remove temp file + temp_path = sqlitepath.parent / 'Intg_osdag_temp.sqlite' + if temp_path.exists(): + temp_path.unlink() + +create_sqlite() + # Import template_page from osdagbridge.desktop.ui.template_page import CustomWindow from osdagbridge.core.bridge_types.plate_girder.ui_fields import FrontendData From d5522b90a0d95d2507cffd23c96265bd058b6966 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Mon, 2 Mar 2026 22:27:33 +0530 Subject: [PATCH 091/225] Add steel railing --- .../ui_fields_additional_input.py | 1 + src/osdagbridge/desktop/cad/irc5_geometry.py | 2 +- .../desktop/ui/docks/cad_cross_section.py | 210 +++++++++++------- 3 files changed, 133 insertions(+), 80 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py index fbb5fdb5e..a2d80bd7b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py @@ -309,6 +309,7 @@ "type": "combo", "choices": VALUES_RAILING_TYPE, "bind": "railing_type", + "on_change": "on_railing_type_changed", } ] }, diff --git a/src/osdagbridge/desktop/cad/irc5_geometry.py b/src/osdagbridge/desktop/cad/irc5_geometry.py index cc846d6b9..323cd57d7 100644 --- a/src/osdagbridge/desktop/cad/irc5_geometry.py +++ b/src/osdagbridge/desktop/cad/irc5_geometry.py @@ -59,7 +59,7 @@ def get_geometry(railing_type: str) -> dict: return { "type": "steel", "height": 1100, - "post_dia": 50, + "post_dia": 100, "rail_count": 3, "post_spacing": 2000, } diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index c3a7dd7c5..c2f168dea 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -378,7 +378,6 @@ def resizeEvent(self, event): self._position_zoom_buttons() def update_params(self, params: dict): - self.params.update(params) self.show_dimensions = True @@ -815,6 +814,135 @@ def draw_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, elif geo["type"] == "metallic": self.draw_metallic_median(painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo) + def draw_railing(self, painter, x, y, scale, side): + """Dispatcher for different railing types based on IRC 5 geometry""" + geo = RailingGeometry.get_geometry(self.railing_type) + if not geo: + # Fallback to existing RCC railing if type is not recognized + return self.draw_rcc_railing(painter, x, y, scale, side) + + if geo["type"] == "rcc": + return self.draw_rcc_railing(painter, x, y, scale, side, geo) + elif geo["type"] == "steel": + return self.draw_steel_railing(painter, x, y, scale, side, geo) + + return self.draw_rcc_railing(painter, x, y, scale, side) + + def draw_rcc_railing(self, painter, x, y, scale, side, geo=None): + """Draw RCC railing with exact dimensions: + - Height: 1100 mm + - Outer width: 375 mm + - Inner spacing: 275 mm + - Base thickness: 100 mm + """ + RAILING_HEIGHT_MM = geo.get("height", 1100) if geo else 1100 + OUTER_WIDTH_MM = 375 + INNER_SPACING_MM = 275 + BASE_THICKNESS_MM = 100 + + wall_thickness_mm = (OUTER_WIDTH_MM - INNER_SPACING_MM) / 2 + + total_h = RAILING_HEIGHT_MM * scale + outer_w = max(4, OUTER_WIDTH_MM * scale) + inner_w = max(2, INNER_SPACING_MM * scale) + base_h = max(3, BASE_THICKNESS_MM * scale) + wall_t = max(1, wall_thickness_mm * scale) + + post_h = total_h - base_h + + rect_x = x + base_top_y = y - base_h + post_top_y = y - total_h + + corner_radius = min(outer_w * 0.05, 4) + + painter.setBrush(QBrush(QColor(126,126,126) )) + painter.setPen(QPen(QColor(34, 34, 34), max(1.5, scale * 2))) + base_rect = QRectF(rect_x, base_top_y, outer_w, base_h) + painter.drawRect(base_rect) + + painter.setBrush(QBrush(QColor(126,126,126) )) + painter.setPen(QPen(QColor(34, 34, 34), max(1.5, scale * 2))) + post_rect = QRectF(rect_x, post_top_y, outer_w, post_h) + painter.drawRoundedRect(post_rect, corner_radius, corner_radius) + + inner_x = rect_x + wall_t + inner_top_margin = post_h * 0.08 + inner_bottom_margin = post_h * 0.05 + inner_height = post_h - inner_top_margin - inner_bottom_margin + + if inner_w > 3 and inner_height > 5: + painter.setBrush(QBrush(QColor(220, 220, 220))) + painter.setPen(QPen(QColor(120, 120, 120), max(1, scale))) + + inner_rect = QRectF(inner_x, post_top_y + inner_top_margin, inner_w, inner_height) + painter.drawRoundedRect(inner_rect, corner_radius * 0.5, corner_radius * 0.5) + + n_rails = 4 + rail_spacing = inner_height / (n_rails + 1) + rail_height = max(2, 3 * scale) + + painter.setBrush(QBrush(QColor(180, 180, 180))) + painter.setPen(QPen(QColor(100, 100, 100), max(0.5, scale * 0.5))) + + for i in range(1, n_rails + 1): + rail_y = post_top_y + inner_top_margin + i * rail_spacing - rail_height/2 + rail_rect = QRectF(inner_x + 2, rail_y, inner_w - 4, rail_height) + painter.drawRect(rail_rect) + + return (rect_x, post_top_y, rect_x + outer_w, y, outer_w) + + def draw_steel_railing(self, painter, x, y, scale, side, geo): + """Draw Steel railing with: + - Concrete base: 100mm height, 375mm width + - Steel posts: 150mm x 150mm + - Steel rails: 40mm x 40mm (Top and Mid) + """ + RAILING_HEIGHT_MM = geo.get("height", 1100) + BASE_HEIGHT_MM = 100 + BASE_WIDTH_MM = 375 + POST_SIZE_MM = 150 + RAIL_SIZE_MM = 20 + + total_h = RAILING_HEIGHT_MM * scale + base_h = max(3, BASE_HEIGHT_MM * scale) + base_w = max(4, BASE_WIDTH_MM * scale) + post_size = max(2, POST_SIZE_MM * scale) + rail_size = max(1, RAIL_SIZE_MM * scale) + + rect_x = x + base_top_y = y - base_h + railing_top_y = y - total_h + + # 1. Concrete Base + painter.setBrush(QBrush(QColor(126, 126, 126))) + painter.setPen(QPen(QColor(34, 34, 34), max(1.5, scale * 2))) + base_rect = QRectF(rect_x, base_top_y, base_w, base_h) + painter.drawRect(base_rect) + + # 2. Steel Post (center aligned on base in cross-section) + post_x = rect_x + (base_w - post_size) / 2 + post_h = total_h - base_h + + painter.setBrush(QBrush(QColor(100, 100, 100))) # Darker grey for steel + painter.setPen(QPen(QColor(30, 30, 30), max(1.5, scale * 2))) + post_rect = QRectF(post_x, railing_top_y, post_size, post_h) + painter.drawRect(post_rect) + + # 3. Rails + # Top Rail (positioned relative to total railing height) + top_rail_y = railing_top_y + rail_size # Slightly down from very top + top_rail_rect = QRectF(post_x, top_rail_y, post_size, rail_size) + painter.setBrush(QBrush(QColor(80, 80, 80))) + painter.drawRect(top_rail_rect) + + # Mid Rail + mid_rail_y = base_top_y - (post_h * 0.5) - rail_size / 2 + mid_rail_rect = QRectF(post_x, mid_rail_y, post_size, rail_size) + painter.drawRect(mid_rail_rect) + + return (rect_x, railing_top_y, rect_x + base_w, y, base_w) + def draw_raised_kerb_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo): """Draw Raised Kerb median (trapezoid shape)""" h = geo.get("kerb_height", 225) * scale @@ -1507,11 +1635,11 @@ def draw_cross_section(self, painter): if fp_config in ['left', 'both'] and left_fp_width > 0: railing_x = deck_left_x - left_railing_rect = self.draw_railing_post_fixed(painter, railing_x, fp_top_y, scale, "left") + left_railing_rect = self.draw_railing(painter, railing_x, fp_top_y, scale, "left") if fp_config in ['right', 'both'] and right_fp_width > 0: railing_x = deck_right_x - railing_outer_width_px - right_railing_rect = self.draw_railing_post_fixed(painter, railing_x, fp_top_y, scale, "right") + right_railing_rect = self.draw_railing(painter, railing_x, fp_top_y, scale, "right") # Draw crash barriers cb_y = deck_top_y # Left barrier: x is where it STARTS (left edge) @@ -1542,82 +1670,6 @@ def draw_cross_section(self, painter): - def draw_railing_post_fixed(self, painter, x, y, scale, side): - """Draw RCC railing with exact dimensions: - - Height: 1100 mm - - Outer width: 375 mm - - Inner spacing: 275 mm - - Base thickness: 100 mm - """ - RAILING_HEIGHT_MM = 1100 - OUTER_WIDTH_MM = 375 - INNER_SPACING_MM = 275 - BASE_THICKNESS_MM = 100 - - wall_thickness_mm = (OUTER_WIDTH_MM - INNER_SPACING_MM) / 2 - - total_h = RAILING_HEIGHT_MM * scale - outer_w = max(4, OUTER_WIDTH_MM * scale) - inner_w = max(2, INNER_SPACING_MM * scale) - base_h = max(3, BASE_THICKNESS_MM * scale) - wall_t = max(1, wall_thickness_mm * scale) - - post_h = total_h - base_h - - rect_x = x - base_bottom_y = y - base_top_y = y - base_h - post_top_y = y - total_h - - corner_radius = min(outer_w * 0.05, 4) - - painter.setBrush(QBrush(QColor(126,126,126) )) - - painter.setPen(QPen(QColor(34, 34, 34), max(1.5, scale * 2))) - base_rect = QRectF(rect_x, base_top_y, outer_w, base_h) - painter.drawRect(base_rect) - - painter.setBrush(QBrush(QColor(126,126,126) )) - - painter.setPen(QPen(QColor(34, 34, 34), max(1.5, scale * 2))) - post_rect = QRectF(rect_x, post_top_y, outer_w, post_h) - painter.drawRoundedRect(post_rect, corner_radius, corner_radius) - - inner_x = rect_x + wall_t - inner_top_margin = post_h * 0.08 - inner_bottom_margin = post_h * 0.05 - inner_height = post_h - inner_top_margin - inner_bottom_margin - - if inner_w > 3 and inner_height > 5: - painter.setBrush(QBrush(QColor(220, 220, 220))) - painter.setPen(QPen(QColor(120, 120, 120), max(1, scale))) - - inner_rect = QRectF(inner_x, post_top_y + inner_top_margin, inner_w, inner_height) - painter.drawRoundedRect(inner_rect, corner_radius * 0.5, corner_radius * 0.5) - - n_rails = 4 - rail_spacing = inner_height / (n_rails + 1) - rail_height = max(2, 3 * scale) - - painter.setBrush(QBrush(QColor(180, 180, 180))) - painter.setPen(QPen(QColor(100, 100, 100), max(0.5, scale * 0.5))) - - for i in range(1, n_rails + 1): - rail_y = post_top_y + inner_top_margin + i * rail_spacing - rail_height/2 - rail_rect = QRectF(inner_x + 2, rail_y, inner_w - 4, rail_height) - painter.drawRect(rail_rect) - - #painter.setPen(QPen(QColor(150, 150, 150), 1, Qt.DashLine)) - #painter.setBrush(Qt.NoBrush) - #outline_margin = 2 - #outline_rect = QRectF(rect_x - outline_margin, - #post_top_y - outline_margin, - #outer_w + 2 * outline_margin, - #total_h + 2 * outline_margin) - #painter.drawRoundedRect(outline_rect, corner_radius + 2, corner_radius + 2) - - # Return bounding box with actual outer width - return (rect_x, post_top_y, rect_x + outer_w, y, outer_w) def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_right_x, carriageway_start_x, carriageway_end_x, From 0f7ae9ba289c9de372e4062d9cade122d698064f Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Fri, 6 Mar 2026 02:47:50 +0530 Subject: [PATCH 092/225] Initialize Additional Inputs CAD preview using homepage CAD state - Pass initial CAD state from InputDock to AdditionalInputs - Sync TypicalSectionDetails preview with homepage cross-section - Fix footpath mapping (Single Side / Both Sides) - Add default median geometry when enabled - Minor debug prints and comments --- .../desktop/ui/dialogs/additional_inputs.py | 8 +++++-- .../dialogs/tabs/typical_section_details.py | 8 ++++++- .../desktop/ui/docks/cad_cross_section.py | 1 + .../desktop/ui/docks/cad_dual_view.py | 21 +++++++++++++++++-- .../desktop/ui/docks/cad_top_view.py | 1 + .../desktop/ui/docks/input_dock.py | 14 ++++++++++++- 6 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 0ae7d0b54..bc1874921 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -37,7 +37,8 @@ class AdditionalInputs(QDialog): """Main dialog for Additional Inputs with tabbed interface""" - def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None): + def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None, initial_cad_state=None): + self._initial_cad_state = initial_cad_state or {} super().__init__(parent) self.setObjectName("AdditionalInputs") self.resize(1024, 720) @@ -221,7 +222,10 @@ def init_ui(self): self._last_top_tab_index = 0 # Sub-Tab 1: Typical Section Details - self.typical_section_tab = TypicalSectionDetailsTab(self.footpath_value, self.carriageway_width) + self.typical_section_tab = TypicalSectionDetailsTab( + self.footpath_value, self.carriageway_width, + initial_cad_state=self._initial_cad_state, + ) self.tabs.addTab(self.typical_section_tab, "Typical Section Details") # Sub-Tab 2: Member Properties diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 07b181a99..b01f0c1b9 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -87,7 +87,8 @@ class TypicalSectionDetailsTab(QWidget): footpath_changed = Signal(str) girder_count_changed = Signal(int) - def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None): + def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None, initial_cad_state=None): + self._initial_cad_state = initial_cad_state or {} super().__init__(parent) self.footpath_value = footpath_value self.carriageway_width = carriageway_width @@ -106,6 +107,9 @@ def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None): "(NoOfFootpaths x RailingWidth)" ) self.init_ui() + # Apply homepage CAD state so the preview starts in sync + if self._initial_cad_state: + self.cad_preview.update_params(self._initial_cad_state) def style_input_field(self, field): apply_field_style(field) @@ -377,6 +381,8 @@ def _update_cad_preview(self): if params: self.cad_preview.update_params(params) + + print(f"params: {params}") def get_typical_section_params(self) -> dict: params = {} diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index c2f168dea..40cbb18a4 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -62,6 +62,7 @@ def __init__(self, parent=None): self._zoom_controls_setup = False # bridge parameters with default values (all in mm) + # These are the CAD state variables self.params = { 'span_length': 35000, 'num_girders': 4, diff --git a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py index 1751b3d9e..da9ac1a96 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py @@ -257,9 +257,9 @@ def update_from_osdag_inputs(self, input_dict): footpath_value = input_dict[KEY_FOOTPATH] if footpath_value == "None": params['footpath_config'] = 'none' - elif footpath_value == "Single Sided": + elif footpath_value == "Single Side": params['footpath_config'] = 'left' - elif footpath_value == "Both": + elif footpath_value == "Both Sides": params['footpath_config'] = 'both' # Map cross bracing spacing (meters to mm) @@ -269,10 +269,27 @@ def update_from_osdag_inputs(self, input_dict): # Map median present if KEY_INCLUDE_MEDIAN in input_dict: params['median_present'] = bool(input_dict[KEY_INCLUDE_MEDIAN]) + # When enabling median from homepage and no median_type was set yet, + # provide a sensible default so the CAD can draw a shape. + if params['median_present'] and 'median_type' not in input_dict: + default_type = "IRC 5 - Raised Kerb" + params['median_type'] = default_type + geom = MedianGeometry.get_geometry(default_type) + if geom: + if "median_width" in geom: + params["median_width"] = geom["median_width"] + if "kerb_height" in geom: + params["median_height"] = geom["kerb_height"] + elif "barrier_height" in geom: + params["median_height"] = geom["barrier_height"] + + print(f"@@{params}") # Update both widgets with same parameters self.cross_section_widget.update_params(params) self.top_view_widget.update_params(params) + + def update_specific_param(self, param_key, value): """ diff --git a/src/osdagbridge/desktop/ui/docks/cad_top_view.py b/src/osdagbridge/desktop/ui/docks/cad_top_view.py index cb96f30be..7edba4749 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_top_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_top_view.py @@ -47,6 +47,7 @@ def __init__(self, parent=None): self.scroll_area = None # bridge parameters with default values (all in mm) + # These are the CAD state variables self.params = { 'span_length': 35000, 'num_girders': 4, diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 4fdd3cc54..c07e9aa5b 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -288,6 +288,8 @@ def get_numeric_value(widget): # Merge values from Additional Inputs dialog if they exist if hasattr(self, 'additional_input_values') and self.additional_input_values: input_values.update(self.additional_input_values) + + print(f"input_values: {input_values}") return input_values @@ -749,7 +751,15 @@ def _show_additional_inputs_dialog(self, target_tab_name=None): if not hasattr(self, "_additional_inputs_saved_data"): self._additional_inputs_saved_data = {} - self.additional_inputs = AdditionalInputs(footpath_value, carriageway_width) + # Grab homepage CAD state so dialog preview starts in sync + initial_cad_state = {} + try: + if hasattr(self.parent, 'cad_comp_widget'): + initial_cad_state = dict(self.parent.cad_comp_widget.cross_section_widget.params) + except Exception: + pass + + self.additional_inputs = AdditionalInputs(footpath_value, carriageway_width, initial_cad_state=initial_cad_state) self.additional_inputs_widget = self.additional_inputs # Propagate project location data to additional inputs (for Temperature Load etc) @@ -1482,6 +1492,8 @@ def on_footpath_changed(self, footpath_value): if self.additional_inputs and self.additional_inputs.isVisible(): if hasattr(self, 'additional_inputs_widget'): self.additional_inputs_widget.update_footpath_value(footpath_value) + # Notify CAD so the homepage cross-section updates immediately + self.emit_value_changed() def on_include_median_changed(self, _value): self._update_carriageway_placeholder() From 965b7b09dbe58bede7f2f3b6074a6d049533c4d2 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Fri, 6 Mar 2026 20:30:20 +0530 Subject: [PATCH 093/225] Fix race condition when closing AdditionalInputs dialog by keeping a local dialog reference --- .../ui/dialogs/tabs/typical_section_details.py | 4 +++- .../desktop/ui/docks/cad_cross_section.py | 4 ++-- src/osdagbridge/desktop/ui/docks/input_dock.py | 16 +++++++++++----- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index b01f0c1b9..742e4ace2 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -324,7 +324,7 @@ def _update_cad_preview(self): params = {} if hasattr(self, "no_of_girders") and self.no_of_girders.text(): - params['num_girders'] = int(float(self.no_of_girders.text())) + params['num_girders'] = int(self.no_of_girders.text()) if hasattr(self, "girder_spacing") and self.girder_spacing.text(): params['girder_spacing'] = float(self.girder_spacing.text()) * 1000 @@ -382,6 +382,8 @@ def _update_cad_preview(self): if params: self.cad_preview.update_params(params) + + print(f"params: {params}") def get_typical_section_params(self) -> dict: diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 40cbb18a4..82449604f 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -382,8 +382,8 @@ def update_params(self, params: dict): self.params.update(params) self.show_dimensions = True - if "crash_barrier_geometry" in params: - self.crash_barrier_params = params["crash_barrier_geometry"] + # if "crash_barrier_geometry" in params: + # self.crash_barrier_params = params["crash_barrier_geometry"] # Store crash barrier type so draw_crash_barrier() can dispatch on it if "crash_barrier_type" in params: diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index c07e9aa5b..f0e8413ef 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -761,21 +761,27 @@ def _show_additional_inputs_dialog(self, target_tab_name=None): self.additional_inputs = AdditionalInputs(footpath_value, carriageway_width, initial_cad_state=initial_cad_state) self.additional_inputs_widget = self.additional_inputs + + dialog = AdditionalInputs(footpath_value, carriageway_width, initial_cad_state=initial_cad_state) + + self.additional_inputs = dialog + self.additional_inputs_widget = dialog # Propagate project location data to additional inputs (for Temperature Load etc) location_data = self.backend.get_input_value(KEY_PROJECT_LOCATION) if hasattr(self.backend, "get_input_value") else None if location_data and hasattr(self.additional_inputs, 'update_project_location'): self.additional_inputs.update_project_location(location_data) + # Restore previously saved dialog state (includes stiffener details). if isinstance(getattr(self, "_additional_inputs_saved_data", None), dict) and self._additional_inputs_saved_data: try: - self.additional_inputs.set_properties_data(self._additional_inputs_saved_data) + dialog.set_properties_data(self._additional_inputs_saved_data) except Exception: pass try: - self.additional_inputs.set_member_properties_design_mode(self._get_basic_design_mode()) + dialog.set_member_properties_design_mode(self._get_basic_design_mode()) except Exception: pass @@ -791,16 +797,16 @@ def _show_additional_inputs_dialog(self, target_tab_name=None): # Capture state when dialog closes. try: - self.additional_inputs.finished.connect(self._handle_additional_inputs_closed) + dialog.finished.connect(self._handle_additional_inputs_closed) except Exception: pass # Connect to accept signal to handle save - result = self.additional_inputs.exec_() + result = dialog.exec_() # If user clicked Save (accepted), get values and trigger update if result == AdditionalInputs.Accepted: - values = self.additional_inputs.get_all_values() + values = dialog.get_all_values() if values: # Merge with existing input values self.additional_input_values = values From ca132e28fd05971fae6f9e73bee82463a040abdc Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Mon, 9 Mar 2026 19:25:50 +0530 Subject: [PATCH 094/225] implement conditional dimension visibility and default labeling - Enable dimension labels by default on CAD initialization. - Introduce 'show_span_values' and 'show_carriageway_values' flags to hide numeric values until relevant inputs are provided. - Update cross-section and top view drawing logic to separate static labels from dynamic value strings. --- .../desktop/ui/docks/cad_cross_section.py | 80 ++++++++++++++----- .../desktop/ui/docks/cad_top_view.py | 40 +++++++--- 2 files changed, 89 insertions(+), 31 deletions(-) diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 82449604f..2ee90100b 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -38,7 +38,9 @@ class CrossSectionCADWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) - self.show_dimensions = False + self.show_dimensions = True + self.show_span_values = False + self.show_carriageway_values = False self.setMouseTracking(True) # enable mouse tracking for hover self.concrete_brush = self.create_concrete_brush() self.crash_barrier_params = {} @@ -380,21 +382,23 @@ def resizeEvent(self, event): def update_params(self, params: dict): self.params.update(params) - self.show_dimensions = True - # if "crash_barrier_geometry" in params: - # self.crash_barrier_params = params["crash_barrier_geometry"] + if "span_length" in params: + self.show_span_values = True + + if "carriageway_width" in params: + self.show_carriageway_values = True - # Store crash barrier type so draw_crash_barrier() can dispatch on it if "crash_barrier_type" in params: self.crash_barrier_type = params["crash_barrier_type"] - + if "railing_type" in params: self.railing_type = params["railing_type"] if "median_type" in params: self.median_type = params["median_type"] + self.show_dimensions = True self.update() def mouseMoveEvent(self, event): @@ -1198,7 +1202,7 @@ def draw_cross_section(self, painter): """Draw cross-section with median support and hover highlighting""" GIRDER_COLOR = QColor(179, 180, 160) # girder → dark olive-grey - STIFFENER_COLOR = QColor(79, 78, 70) # stiffener → very dark olive + STIFFENER_COLOR = QColor(150, 150, 150) CROSS_BRACING_COLOR = QColor(239, 240, 215) # cross bracing → light olive END_DIAPHRAGM_COLOR = QColor(134, 134, 100) BARRIER_GREY = QColor(221, 221, 221) # slightly dark grey @@ -1718,7 +1722,9 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r ) mid_x = (deck_left_x + deck_right_x) / 2.0 - label_text = f"Overall Bridge Width = {total_width_m:.2f} m" + label_text = "Overall Bridge Width" + if self.show_carriageway_values: + label_text += f" = {total_width_m:.2f} m" font = QFont('Arial', 9, QFont.Bold) painter.setFont(font) @@ -1749,9 +1755,13 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r fp_visible_m = round(fp_visible_mm / 1000.0, 2) if fp_visible_m > 0: + label_text = "Footpath Width" + if self.show_carriageway_values: + label_text += f" = {fp_visible_m:.2f} m" + self.draw_dimension_arrow(painter, fp_start_x, Y_TOP_COMMON, fp_end_x, Y_TOP_COMMON, - f"Footpath Width = {fp_visible_m:.2f} m", True, + label_text, True, extension_direction='down', extension_end_y=fp_top_y) @@ -1766,29 +1776,41 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r cw_m = self.params['carriageway_width'] / 1000 # Left carriageway - starts exactly at left barrier visual end + label_cw = "Carriageway" + if self.show_carriageway_values: + label_cw += f" = {cw_m:.2f} m" + self.draw_dimension_arrow(painter, actual_cw_start, Y_TOP_COMMON, median_start_x, Y_TOP_COMMON, - f"Carriageway = {cw_m:.2f} m", True, + label_cw, True, extension_direction='down', extension_end_y=deck_top_y) # Median dimension median_m = median_width / 1000 + label_median = "Median" + if self.show_carriageway_values: + label_median += f" = {median_m:.2f} m" + self.draw_dimension_arrow(painter, median_start_x, Y_TOP_COMMON - 35, median_end_x, Y_TOP_COMMON - 35, - f"Median = {median_m:.2f} m", True, + label_median, True, extension_direction='down', extension_end_y=deck_top_y) # Right carriageway - ends exactly at right barrier visual start self.draw_dimension_arrow(painter, median_end_x, Y_TOP_COMMON, actual_cw_end, Y_TOP_COMMON, - f"Carriageway = {cw_m:.2f} m", True, + label_cw, True, extension_direction='down', extension_end_y=deck_top_y) else: # Single carriageway cw_m = self.params['carriageway_width'] / 1000 # From left barrier visual end to right barrier visual start + label_cw = "Carriageway Width" + if self.show_carriageway_values: + label_cw += f" = {cw_m:.2f} m" + self.draw_dimension_arrow(painter, actual_cw_start, Y_TOP_COMMON, actual_cw_end, Y_TOP_COMMON, - f"Carriageway Width = {cw_m:.2f} m", True, + label_cw, True, extension_direction='down', extension_end_y=deck_top_y) @@ -1801,9 +1823,13 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r fp_visible_m = round(fp_visible_mm / 1000.0, 2) if fp_visible_m > 0: + label_fp = "Footpath Width" + if self.show_carriageway_values: + label_fp += f" = {fp_visible_m:.2f} m" + self.draw_dimension_arrow(painter, fp_start_x, Y_TOP_COMMON, fp_end_x, Y_TOP_COMMON, - f"Footpath Width = {fp_visible_m:.2f} m", True, + label_fp, True, extension_direction='down', extension_end_y=fp_top_y) @@ -1814,8 +1840,12 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r if n > 0 and len(positions) > 0: first_girder_x = positions[0] overhang_m = self.params.get('deck_overhang', 1000) / 1000 + label_overhang = "Overhang" + if self.show_carriageway_values: + label_overhang += f" = {overhang_m:.2f} m" + self.draw_dimension_arrow(painter, deck_left_x, Y_BOTTOM_COMMON, first_girder_x, Y_BOTTOM_COMMON, - f"Overhang = {overhang_m:.2f} m", True, + label_overhang, True, extension_direction='up', extension_end_y=deck_bottom_y) @@ -1828,8 +1858,12 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r x_right = positions[1] gs_m = self.params['girder_spacing'] / 1000 + label_gs = "Girder Spacing" + if self.show_carriageway_values: + label_gs += f" = {gs_m:.2f} m" + self.draw_dimension_arrow(painter, x_left, Y_BOTTOM_COMMON, x_right, Y_BOTTOM_COMMON, - f"Girder Spacing = {gs_m:.2f} m", True, + label_gs, True, extension_direction='up', extension_end_y=base_y) @@ -1838,13 +1872,19 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r if fp_config in ['left', 'both'] and left_fp_width > 0 and fp_thick_px > 5: x_dim = deck_left_x - 8 + label_ft = "Footpath\nThickness" + if self.show_carriageway_values: + label_ft += f" = {fp_t_mm:.0f} mm" self.draw_vertical_dimension_with_arrow(painter, x_dim, fp_top_y, deck_bottom_y, - f"Footpath\nThickness = {fp_t_mm:.0f} mm", 'left') + label_ft, 'left') if fp_config == 'right' and right_fp_width > 0 and fp_thick_px > 5: x_dim = deck_right_x + 8 + label_ft = "Footpath\nThickness" + if self.show_carriageway_values: + label_ft += f" = {fp_t_mm:.0f} mm" self.draw_vertical_dimension_with_arrow(painter, x_dim, fp_top_y, deck_bottom_y, - f"Footpath\nThickness = {fp_t_mm:.0f} mm", 'right') + label_ft, 'right') # DECK THICKNESS DIMENSION - position adjusted for median deck_t_mm = self.params['deck_thickness'] @@ -1888,7 +1928,9 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r QPointF(deck_center_x + tick_len, deck_bottom_y)) # Renamed to "Deck Thickness" - text = f"Deck Thickness = {deck_t_mm:.0f} mm" + text = "Deck Thickness" + if self.show_carriageway_values: + text += f" = {deck_t_mm:.0f} mm" font = QFont('Arial', 9, QFont.Bold) painter.setFont(font) metrics = painter.fontMetrics() diff --git a/src/osdagbridge/desktop/ui/docks/cad_top_view.py b/src/osdagbridge/desktop/ui/docks/cad_top_view.py index 7edba4749..e222269a1 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_top_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_top_view.py @@ -30,7 +30,9 @@ class TopViewCADWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) - self.show_dimensions = False + self.show_dimensions = True + self.show_span_values = False + self.show_carriageway_values = False self.setMouseTracking(True) # enable mouse tracking for hover # top view hover tracking @@ -341,13 +343,17 @@ def eventFilter(self, obj, event): self._position_zoom_buttons() return super().eventFilter(obj, event) - def update_params(self, params): + def update_params(self, params: dict): self.params.update(params) - # Show dimensions once user provides inputs - if params: - self.show_dimensions = True + # enable value display only when user edits inputs + if "span_length" in params: + self.show_span_values = True + if "carriageway_width" in params: + self.show_carriageway_values = True + + self.show_dimensions = True self.update() def mouseMoveEvent(self, event): @@ -1102,10 +1108,12 @@ def draw_skew_angle_indicator(self, painter, girder_start_x, girder_y, skew_rad, label_y = ref_y - label_radius * math.sin(label_angle_rad) # Format with explicit sign (+ or -) - showing ORIGINAL input value - if skew_deg >= 0: - angle_text = f"Skew = +{abs(skew_deg):.1f}°" - else: - angle_text = f"Skew = {skew_deg:.1f}°" + angle_text = "Skew" + if self.show_carriageway_values: + if skew_deg >= 0: + angle_text += f" = +{abs(skew_deg):.1f}°" + else: + angle_text += f" = {skew_deg:.1f}°" # Adjust label position based on skew direction if skew_deg > 0: @@ -1147,10 +1155,13 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ x1_span = last_girder['x1'] x2_span = last_girder['x2'] span_m = self.params['span_length'] / 1000 + label_span = "Span Length" + if self.show_span_values: + label_span += f" = {span_m:.1f} m" self.draw_dimension_arrow_with_extensions_up( painter, x1_span, dim_y1, x2_span, dim_y1, - f"Span Length = {span_m:.1f} m", last_girder_y + label_span, last_girder_y ) # BRACING SPACING dimension (always visible) @@ -1158,13 +1169,16 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ #dim_y2 = dim_y_base + 15 dim_y2 = dim_y_base + DIM_STACK_GAP cb_spacing_m = self.params['cross_bracing_spacing'] / 1000 + label_cb = "Bracing Spacing" + if self.show_span_values: + label_cb += f" = {cb_spacing_m:.2f} m" x1_brace = bracing_positions[0] + x_offset_last x2_brace = bracing_positions[1] + x_offset_last self.draw_dimension_arrow_with_extensions_up( painter, x1_brace, dim_y2, x2_brace, dim_y2, - f"Bracing Spacing = {cb_spacing_m:.2f} m", last_girder_y + label_cb, last_girder_y ) # GIRDER SPACING dimension (always visible) @@ -1191,7 +1205,9 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ LABEL_OFFSET = 14 # tweak 10–18 if needed label_y = (y1 + y2) / 2 + LABEL_OFFSET - label_text = f"Girder\nSpacing\n= {gs_m:.2f} m" + label_text = "Girder\nSpacing" + if self.show_carriageway_values: + label_text += f"\n= {gs_m:.2f} m" self.draw_text_with_background( painter, label_x, label_y, From 3cd174da2a28bdc6c6dc2bfa965c230e47e03dab Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 10 Mar 2026 02:45:21 +0530 Subject: [PATCH 095/225] synchronize initial CAD state and ensure safe startup - Reorder CustomWindow initialization to ensure 'cad state' is defined before UI setup - Call 'update_cad_from_inputs' during initialization to sync the default UI state --- src/osdagbridge/desktop/ui/dialogs/additional_inputs.py | 5 +---- src/osdagbridge/desktop/ui/docks/input_dock.py | 1 + src/osdagbridge/desktop/ui/template_page.py | 7 ++++++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index bc1874921..14cc08b69 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -222,10 +222,7 @@ def init_ui(self): self._last_top_tab_index = 0 # Sub-Tab 1: Typical Section Details - self.typical_section_tab = TypicalSectionDetailsTab( - self.footpath_value, self.carriageway_width, - initial_cad_state=self._initial_cad_state, - ) + self.typical_section_tab = TypicalSectionDetailsTab(self.footpath_value, self.carriageway_width, initial_cad_state=self._initial_cad_state) self.tabs.addTab(self.typical_section_tab, "Typical Section Details") # Sub-Tab 2: Member Properties diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index f0e8413ef..cbf46ed1c 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -1,4 +1,5 @@ +from osdagbridge.core.utils.common import KEY_CARRIAGEWAY_WIDTH import sys import os import math diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index c127d37e2..c268ce782 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -91,10 +91,12 @@ def __init__(self, title: str, backend: object, parent=None): self.input_dock = None self.output_dock = None - self.init_ui() # Central CAD state (single source of truth) + # Must be initialized BEFORE init_ui because init_ui calls update_cad_from_inputs self.cad_state = {} + self.init_ui() + def _init_log_splitter_once(self): if self._log_splitter_initialized: @@ -276,6 +278,9 @@ def mousePressEvent(self, event): # Connect input dock changes to CAD widget for real-time updates self.setup_cad_connections() + + # Initial CAD update to sync with starting UI values (e.g., footpath=None) + self.update_cad_from_inputs() def setup_cad_connections(self): """Connect input dock field changes to CAD widget for real-time updates""" From 279daa3567846d343fc7b7ba7e15bf34af323ab4 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Tue, 10 Mar 2026 23:23:29 +0530 Subject: [PATCH 096/225] Fix deck width and footpath layout by including railing width - Update default RCC railing width to 375 mm as per IRC - Correct deck width calculation to include railing width with footpaths - Fix cross-section layout to place footpath after railing - Update footpath dimension logic to show clear walking width - Make RCC railing geometry use configurable parameters - Align top-view and cross-section deck width calculations --- src/osdagbridge/core/utils/common.py | 2 +- src/osdagbridge/desktop/cad/irc5_geometry.py | 3 +- .../desktop/ui/docks/cad_cross_section.py | 118 +++++++++--------- .../desktop/ui/docks/cad_top_view.py | 21 +++- 4 files changed, 79 insertions(+), 65 deletions(-) diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index 2ec16dd19..f908be17c 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -255,7 +255,7 @@ DEFAULT_GIRDER_SPACING = 2.5 DEFAULT_DECK_OVERHANG = 1.0 DEFAULT_CRASH_BARRIER_WIDTH = 0.5 -DEFAULT_RAILING_WIDTH = 0.15 +DEFAULT_RAILING_WIDTH = 0.375 # IRC helper option constants KEY_VEHICLE = ["Class70R(W)", "Class70R(T)", "ClassA", "ClassB"] diff --git a/src/osdagbridge/desktop/cad/irc5_geometry.py b/src/osdagbridge/desktop/cad/irc5_geometry.py index 323cd57d7..5da71ab39 100644 --- a/src/osdagbridge/desktop/cad/irc5_geometry.py +++ b/src/osdagbridge/desktop/cad/irc5_geometry.py @@ -51,7 +51,7 @@ def get_geometry(railing_type: str) -> dict: return { "type": "rcc", "height": 1100, - "width": 275, + "width": 375, "post_spacing": 2000, } @@ -59,6 +59,7 @@ def get_geometry(railing_type: str) -> dict: return { "type": "steel", "height": 1100, + "width": 375, "post_dia": 100, "rail_count": 3, "post_spacing": 2000, diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 2ee90100b..dae040767 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -79,7 +79,7 @@ def __init__(self, parent=None): 'railing_height': 1000, 'footpath_config': 'both', 'deck_overhang': 1000, - 'railing_width': 100, + 'railing_width': 375, 'median_present': False, 'median_width': 1200, } @@ -734,32 +734,27 @@ def draw_clean_leader_line(self, painter, target_x, target_y, label_x, label_y, QColor(255, 255, 255, 255), text_color, 9, True) def compute_deck_total_width(self): - """Compute total deck width including median if present""" + carriageway = self.params.get('carriageway_width', 10500) crash_barrier = self.params.get('crash_barrier_width', 500) footpath_width = self.params.get('footpath_width', 1500) fp_config = self.params.get('footpath_config', 'both') median_present = self.params.get('median_present', False) median_width = self.params.get('median_width', 1200) - - if fp_config == 'both': - num_fp = 2 - elif fp_config in ['left', 'right']: - num_fp = 1 - else: - num_fp = 0 - - # If median is present, we have full carriageway on each side - if median_present: - deck_total = (carriageway * 2 + # Full carriageway on each side - median_width + - 2 * crash_barrier + - num_fp * footpath_width) - else: - deck_total = (carriageway + - 2 * crash_barrier + - num_fp * footpath_width) - + railing_width = self.params.get('railing_width', 375) + + num_fp = {'both':2, 'left':1, 'right':1, 'none':0}.get(fp_config, 0) + + carriageway_total = carriageway * 2 if median_present else carriageway + median = median_width if median_present else 0 + + deck_total = ( + carriageway_total + + median + + 2 * crash_barrier + + num_fp * (footpath_width + railing_width) + ) + return deck_total, num_fp def create_concrete_brush(self): @@ -833,17 +828,13 @@ def draw_railing(self, painter, x, y, scale, side): return self.draw_rcc_railing(painter, x, y, scale, side) - def draw_rcc_railing(self, painter, x, y, scale, side, geo=None): - """Draw RCC railing with exact dimensions: - - Height: 1100 mm - - Outer width: 375 mm - - Inner spacing: 275 mm - - Base thickness: 100 mm - """ - RAILING_HEIGHT_MM = geo.get("height", 1100) if geo else 1100 - OUTER_WIDTH_MM = 375 - INNER_SPACING_MM = 275 - BASE_THICKNESS_MM = 100 + def draw_rcc_railing(self, painter, x_start, y_base, scale, side='left', geo=None): + """Draw standard RCC railing based on IRC diagrams""" + # Dimensions for RCC railing (mm) + OUTER_WIDTH_MM = self.params.get('railing_width', 375) + RAILING_HEIGHT_MM = self.params.get('railing_height', 1000) + INNER_SPACING_MM = 275 # Default for RCC + BASE_THICKNESS_MM = 100 # Default for RCC wall_thickness_mm = (OUTER_WIDTH_MM - INNER_SPACING_MM) / 2 @@ -855,9 +846,9 @@ def draw_rcc_railing(self, painter, x, y, scale, side, geo=None): post_h = total_h - base_h - rect_x = x - base_top_y = y - base_h - post_top_y = y - total_h + rect_x = x_start + base_top_y = y_base - base_h + post_top_y = y_base - total_h corner_radius = min(outer_w * 0.05, 4) @@ -895,7 +886,7 @@ def draw_rcc_railing(self, painter, x, y, scale, side, geo=None): rail_rect = QRectF(inner_x + 2, rail_y, inner_w - 4, rail_height) painter.drawRect(rail_rect) - return (rect_x, post_top_y, rect_x + outer_w, y, outer_w) + return (rect_x, post_top_y, rect_x + outer_w, y_base, outer_w) def draw_steel_railing(self, painter, x, y, scale, side, geo): """Draw Steel railing with: @@ -904,10 +895,10 @@ def draw_steel_railing(self, painter, x, y, scale, side, geo): - Steel rails: 40mm x 40mm (Top and Mid) """ RAILING_HEIGHT_MM = geo.get("height", 1100) - BASE_HEIGHT_MM = 100 - BASE_WIDTH_MM = 375 - POST_SIZE_MM = 150 - RAIL_SIZE_MM = 20 + BASE_HEIGHT_MM = geo.get("base_height", 100) + BASE_WIDTH_MM = geo.get("base_width", 375) + POST_SIZE_MM = geo.get("post_size", 150) + RAIL_SIZE_MM = geo.get("rail_size", 20) total_h = RAILING_HEIGHT_MM * scale base_h = max(3, BASE_HEIGHT_MM * scale) @@ -1272,20 +1263,27 @@ def draw_cross_section(self, painter): deck_right_x = deck_start_x + total_deck_width * scale # Calculate all widths in pixels + railing_width_px = self.params['railing_width'] * scale crash_barrier_width_px = self.params['crash_barrier_width'] * scale left_fp_width_px = left_fp_width * scale right_fp_width_px = right_fp_width * scale # LAYOUT FROM LEFT TO RIGHT - # 1. Left footpath starts at deck_left_x - left_fp_x = deck_left_x + left_railing_present = (fp_config in ['left', 'both']) + right_railing_present = (fp_config in ['right', 'both']) - # 2. Left crash barrier starts after left footpath + left_rail_w_px = railing_width_px if left_railing_present else 0 + right_rail_w_px = railing_width_px if right_railing_present else 0 + + # 1. Left footpath starts after left railing (if exists) + left_fp_x = deck_left_x + left_rail_w_px + + # 2. Left crash barrier starts after left footpath clear width left_barrier_x = left_fp_x + left_fp_width_px left_barrier_end_x = left_barrier_x + crash_barrier_width_px - # 3. Right footpath ends at deck_right_x - right_fp_x = deck_right_x - right_fp_width_px + # 3. Right footpath starts after right crash barrier and ends before right railing (if exists) + right_fp_x = deck_right_x - right_rail_w_px - right_fp_width_px # 4. Right crash barrier ENDS where right footpath STARTS right_barrier_end_x = right_fp_x @@ -1333,13 +1331,13 @@ def draw_cross_section(self, painter): max_allowed_x = deck_right_x - flange_half_px - 1 positions = [max(min_allowed_x, min(max_allowed_x, p)) for p in positions] - RAILING_OUTER_WIDTH_MM = 375 - railing_outer_width_px = RAILING_OUTER_WIDTH_MM * scale + # Draw deck slab + railing_outer_width_px = self.params.get('railing_width', 375) * scale railing_width_px = railing_outer_width_px # Draw deck slab - deck_slab_left = left_barrier_x - deck_slab_right = right_barrier_end_x + deck_slab_left = deck_left_x + deck_slab_right = deck_right_x # Check if deck is hovered (visible brightness) deck_hovered = (self.hovered_element == 'deck') @@ -1413,7 +1411,7 @@ def draw_cross_section(self, painter): ) self.cross_section_hover_zones.append((wc_hover_rect, 'wearing_course'))''' - # Register hover zone for deck + # Register hover zone for deck - full width deck_hover_rect = QRectF(deck_slab_left, deck_top_y, deck_slab_right - deck_slab_left, deck_thick_px) self.cross_section_hover_zones.append((deck_hover_rect, 'deck')) @@ -1433,10 +1431,11 @@ def draw_cross_section(self, painter): # making the line dashed if fp_config in ['left', 'both'] and left_fp_width > 0: - # Draw footpath fill only (no border) + # Draw footpath fill only SIT ON TOP of the main slab painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) + # sit one pixel higher or precisely on top y edge painter.drawRect(QRectF(left_fp_x, fp_top_y, left_fp_width_px, fp_thick_px)) @@ -1744,11 +1743,15 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r ) # LEVEL 2: Footpath dimensions - #y_level2 = deck_top_y - 65 # Moved down more + left_railing_present = (fp_config in ['left', 'both']) + right_railing_present = (fp_config in ['right', 'both']) + left_rail_w_px = railing_width_px if left_railing_present else 0 + right_rail_w_px = railing_width_px if right_railing_present else 0 + Y_TOP_COMMON = deck_top_y - (3.2 * DIM_OFFSET) - if fp_config in ['left', 'both'] and left_fp_width > 0: - fp_start_x = deck_left_x + railing_width_px + if left_railing_present and left_fp_width > 0: + fp_start_x = deck_left_x + left_rail_w_px fp_end_x = left_barrier_x fp_visible_mm = (fp_end_x - fp_start_x) / scale fp_visible_mm = round(fp_visible_mm, 1) @@ -1766,8 +1769,7 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r extension_end_y=fp_top_y) # LEVEL 2c: Carriageway/Median Dimensions - #y_level2c = deck_top_y - 35 # Moved down more - Y_TOP_COMMON = deck_top_y - (3.2 * DIM_OFFSET) + # Already defined above as Y_TOP_COMMON actual_cw_start = left_barrier_visual_end actual_cw_end = right_barrier_visual_start @@ -1815,9 +1817,9 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r extension_end_y=deck_top_y) # Right footpath dimension - if fp_config in ['right', 'both'] and right_fp_width > 0: + if right_railing_present and right_fp_width > 0: fp_start_x = right_barrier_end_x - fp_end_x = deck_right_x - railing_width_px + fp_end_x = deck_right_x - right_rail_w_px fp_visible_mm = (fp_end_x - fp_start_x) / scale fp_visible_mm = round(fp_visible_mm, 1) diff --git a/src/osdagbridge/desktop/ui/docks/cad_top_view.py b/src/osdagbridge/desktop/ui/docks/cad_top_view.py index e222269a1..18d9fed2e 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_top_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_top_view.py @@ -64,7 +64,7 @@ def __init__(self, parent=None): 'railing_height': 1000, 'footpath_config': 'both', 'deck_overhang': 1000, - 'railing_width': 100, + 'railing_width': 375, 'median_present': False, 'median_width': 1200, } @@ -661,24 +661,35 @@ def compute_deck_total_width(self): fp_config = self.params.get('footpath_config', 'both') median_present = self.params.get('median_present', False) median_width = self.params.get('median_width', 1200) + RAILING_WIDTH = 375 # Standard outer width of RCC railing in mm if fp_config == 'both': num_fp = 2 - elif fp_config in ['left', 'right']: - num_fp = 1 + elif fp_config in ['left', 'both']: + # Handle cases where config might be 'left' or 'right' + # Note: 'both' is already handled, 'left' or 'right' means 1 footpath + num_fp = 1 if fp_config in ['left', 'right'] else 0 else: num_fp = 0 + + # Re-evaluating num_fp for clarity + num_fp = 0 + if fp_config == 'both': + num_fp = 2 + elif fp_config in ['left', 'right']: + num_fp = 1 # If median is present, we have full carriageway on each side + # Footpath width is clear width, so we add railing width for each footpath if median_present: deck_total = (carriageway * 2 + # Full carriageway on each side median_width + 2 * crash_barrier + - num_fp * footpath_width) + num_fp * (footpath_width + RAILING_WIDTH)) else: deck_total = (carriageway + 2 * crash_barrier + - num_fp * footpath_width) + num_fp * (footpath_width + RAILING_WIDTH)) return deck_total, num_fp From f63d09190a57a9deb58e6ac2b4bba4f598a7aad5 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 11 Mar 2026 04:00:59 +0530 Subject: [PATCH 097/225] Disable Railing and Median tabs in Additional Inputs dialog based on Input Dock selections - Railing tab disabled when Footpath = None - Median tab disabled when Include Median = No - Added helper to locate tabs by name to avoid fixed indices - Styled disabled tabs for better visual feedback - Fixed railing parameter mapping in CAD dual view --- .../desktop/ui/dialogs/additional_inputs.py | 40 +++++++++++++++++++ .../dialogs/tabs/typical_section_details.py | 5 +++ .../desktop/ui/docks/cad_dual_view.py | 4 +- .../desktop/ui/docks/input_dock.py | 6 +++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 14cc08b69..276cb3e73 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -684,6 +684,46 @@ def _build_sections_from_schema(self, parent_layout, sections, heading_style, la parent_layout.addLayout(grid) + + # 2D CAD functions for tab enabling and disabling inside the addition inputs dialog ---> starts here + # Tab visibility helpers + def _find_inner_tab_index(self, tab_widget, tab_name: str) -> int: + """Return the index of an inner tab by its label, or -1 if not found.""" + for i in range(tab_widget.count()): + if tab_widget.tabText(i).strip().lower() == tab_name.strip().lower(): + return i + return -1 + + def apply_tab_visibility(self, footpath_value: str, include_median: str) -> None: + """Disable inner sub-tabs based on the current Input Dock selections. + + Rules: + - Railing tab → disabled when footpath_value == "None" + (no footpath means no railing is needed) + - Median tab → disabled when include_median == "No" + (median excluded by the user) + + This method is called once right after the dialog is created, so the + disabled state is visible from the moment the user opens the dialog. + """ + inner_tabs = self.typical_section_tab.input_tabs + + # Railing tab + railing_index = self._find_inner_tab_index(inner_tabs, "Railing") + if railing_index >= 0: + railing_enabled = (footpath_value != "None") + inner_tabs.setTabEnabled(railing_index, railing_enabled) + + # Median tab + median_index = self._find_inner_tab_index(inner_tabs, "Median") + if median_index >= 0: + median_enabled = (include_median != "No") + inner_tabs.setTabEnabled(median_index, median_enabled) + + # 2D CAD functions for tab enabling and disabling inside the addition inputs dialog ---> ends here + + + def update_footpath_value(self, footpath_value): """Update footpath value across all tabs""" self.footpath_value = footpath_value diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 742e4ace2..b9716c16e 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -217,6 +217,11 @@ def init_ui(self): font-size: 11px; min-width: 80px; } + QTabBar::tab:disabled { + color: #bfbfbf; + background: #e6e6e6; + } + QTabBar::tab:last { border-right: 1px solid #b0b0b0; } diff --git a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py index da9ac1a96..596082892 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py @@ -214,10 +214,10 @@ def update_from_osdag_inputs(self, input_dict): if geom: if "height" in geom: - params["railing_height"] = geom["height"] + params["railing_height"] = geom["railing_height"] if "width" in geom: - params["railing_width"] = geom["width"] + params["railing_width"] = geom["railing_width"] if "median_type" in input_dict: diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index cbf46ed1c..b1896342f 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -774,6 +774,12 @@ def _show_additional_inputs_dialog(self, target_tab_name=None): self.additional_inputs.update_project_location(location_data) + # Disable inner tabs based on current Input Dock selections. + # Railing tab is disabled when no footpath is selected. + # Median tab is disabled when median is not included. + include_median = self.include_median_combo.currentText() if self.include_median_combo else "Yes" + dialog.apply_tab_visibility(footpath_value, include_median) + # Restore previously saved dialog state (includes stiffener details). if isinstance(getattr(self, "_additional_inputs_saved_data", None), dict) and self._additional_inputs_saved_data: try: From 588022379bf46e4180a3a25bdfb2a1d2770d070b Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 12 Mar 2026 01:58:59 +0530 Subject: [PATCH 098/225] Improve cross-section CAD visualization and fix railing geometry parameter mapping --- .../desktop/ui/docks/cad_cross_section.py | 28 ++++++++++++------- .../desktop/ui/docks/cad_dual_view.py | 4 +-- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index dae040767..85cdf504f 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -24,15 +24,17 @@ class CrossSectionCADWidget(QWidget): """Widget for drawing bridge cross-section view""" # ===== SHARED CAD COLORS ===== - GIRDER_COLOR = QColor(179, 180, 160) - STIFFENER_COLOR = QColor(79, 78, 70) + GIRDER_COLOR = QColor(179, 180, 160) + STIFFENER_COLOR = QColor(79, 78, 70) CROSS_BRACING_COLOR = QColor(235, 236, 211) + RAILING_COLOR = QColor(210, 210, 210) + BARRIER_COLOR = QColor(210, 210, 210) + + END_DIAPHRAGM_COLOR = QColor(134, 134, 100) CONCRETE_COLOR = QColor(225, 225, 225) - BARRIER_COLOR = QColor(126, 126, 126) MEDIAN_COLOR = QColor(221, 221, 221) - RAILING_COLOR = QColor(126, 126, 126) BEARING_COLOR = QColor(255, 0, 0) @@ -920,7 +922,8 @@ def draw_steel_railing(self, painter, x, y, scale, side, geo): post_x = rect_x + (base_w - post_size) / 2 post_h = total_h - base_h - painter.setBrush(QBrush(QColor(100, 100, 100))) # Darker grey for steel + # Draw post outline only (no fill) so areas between rails are transparent + painter.setBrush(Qt.NoBrush) painter.setPen(QPen(QColor(30, 30, 30), max(1.5, scale * 2))) post_rect = QRectF(post_x, railing_top_y, post_size, post_h) painter.drawRect(post_rect) @@ -1192,14 +1195,19 @@ def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck def draw_cross_section(self, painter): """Draw cross-section with median support and hover highlighting""" - GIRDER_COLOR = QColor(179, 180, 160) # girder → dark olive-grey - STIFFENER_COLOR = QColor(150, 150, 150) - CROSS_BRACING_COLOR = QColor(239, 240, 215) # cross bracing → light olive + GIRDER_COLOR = QColor(130, 130, 130) + STIFFENER_COLOR = QColor(210, 210, 205) + CROSS_BRACING_COLOR = QColor(250, 240, 211) + RAILING_COLOR = QColor(225, 225, 225) + BARRIER_COLOR = QColor(225, 225, 225) + + + MEDIAN_GREY = QColor(221, 221, 221) + CONCRETE_COLOR = QColor(225, 225, 225) + END_DIAPHRAGM_COLOR = QColor(134, 134, 100) BARRIER_GREY = QColor(221, 221, 221) # slightly dark grey RAILING_GREY = QColor(221, 221, 221) - MEDIAN_GREY = QColor(221, 221, 221) - CONCRETE_COLOR = QColor(225, 225, 225) base_width = 800 base_height = 400 diff --git a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py index 596082892..da9ac1a96 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py @@ -214,10 +214,10 @@ def update_from_osdag_inputs(self, input_dict): if geom: if "height" in geom: - params["railing_height"] = geom["railing_height"] + params["railing_height"] = geom["height"] if "width" in geom: - params["railing_width"] = geom["railing_width"] + params["railing_width"] = geom["width"] if "median_type" in input_dict: From 1699bfb89b5d9103a887ec7d460f0fa47931e852 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 12 Mar 2026 05:46:52 +0530 Subject: [PATCH 099/225] Improve CAD preview scaling, centering, and dimension layout in cross-section and top view - Fix dialog preview sizing by reducing CrossSectionCADWidget minimum height - Add automatic centering after widget show using QTimer + zoom_reset - Adjust base canvas sizes for better layout consistency - Improve dimension placement for overhang, girder spacing, and overall width - Reorder top-view dimensions (Bracing Spacing above Span Length) - Increase dimension stack spacing and line thickness for clarity - Prevent dimension text from covering dimension lines --- .../dialogs/tabs/typical_section_details.py | 2 +- .../desktop/ui/docks/cad_cross_section.py | 87 +++++++++++-------- .../desktop/ui/docks/cad_top_view.py | 60 +++++++------ 3 files changed, 87 insertions(+), 62 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index b9716c16e..f8e6a069c 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -184,7 +184,7 @@ def init_ui(self): self.cad_preview = CrossSectionCADWidget() self.cad_preview.scale_factor = 0.85 - self.cad_preview.setMinimumHeight(400) + self.cad_preview.setMinimumHeight(90) # Allows layout to fit it smoothly without scrollbars cad_scroll.setWidget(self.cad_preview) diagram_layout.addWidget(cad_scroll) diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 85cdf504f..097d18c64 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -252,16 +252,16 @@ def eventFilter(self, obj, event): def showEvent(self, event): - """Setup zoom controls on first show""" + """Standardize size and center after widget is shown""" super().showEvent(event) - if not self._zoom_controls_setup: - self._zoom_controls_setup = True - # Check if this is a preview - is_preview = self.scale_factor < 1.0 if hasattr(self, 'scale_factor') else False - # Only show zoom buttons if NOT a preview - if not is_preview and hasattr(self, 'zoom_in_btn'): - # Position buttons immediately - self._position_zoom_buttons() + # Check if this is a preview + is_preview = self.scale_factor < 1.0 if hasattr(self, 'scale_factor') else False + # Only show zoom buttons and center if NOT a preview + if not is_preview: + # Position zoom buttons + self._position_zoom_buttons() + # Single-shot timer to center after layout is complete + QTimer.singleShot(200, self.zoom_reset) def zoom_in(self): """Zoom in while keeping view centered""" @@ -368,8 +368,16 @@ def _set_scroll_center(self, old_center, zoom_ratio): def _update_widget_size(self): """Update widget size based on zoom level for proper scrolling""" - base_width = 800 - base_height = 600 + # Check if this is a preview + is_preview = self.scale_factor < 1.0 if hasattr(self, 'scale_factor') else False + + if is_preview: + # For dialog previews, don't force a large minimum size + # The preview widget will conform to the dialog's layout + return + + base_width = 1200 + base_height = 800 # Add extra padding (20%) to ensure scrollbar reaches beyond content padding_factor = 1.2 new_width = int(base_width * self.zoom_level * padding_factor) @@ -654,7 +662,7 @@ def draw_dimension_arrow_text_outside(self, painter, x1, y1, x2, y2, text, horiz text_width = metrics.boundingRect(text).width() self.draw_text_with_background(painter, text_x - text_width/2, text_y, text, - QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, False) else: painter.drawLine(QPointF(x1 - ext_len, y1), QPointF(x1 + ext_len, y1)) painter.drawLine(QPointF(x2 - ext_len, y2), QPointF(x2 + ext_len, y2)) @@ -680,7 +688,7 @@ def draw_dimension_arrow_text_outside(self, painter, x1, y1, x2, y2, text, horiz text_x = x1 + text_offset self.draw_text_with_background(painter, text_x, text_y, text, - QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, False) def draw_leader_arrow(self, painter, from_x, from_y, to_x, to_y, text, bg_color=QColor(255, 255, 255, 250), text_color=QColor(0, 0, 0)): """a leader line with arrow pointing to component""" @@ -1209,11 +1217,17 @@ def draw_cross_section(self, painter): BARRIER_GREY = QColor(221, 221, 221) # slightly dark grey RAILING_GREY = QColor(221, 221, 221) - base_width = 800 - base_height = 400 - - width = base_width * self.zoom_level - height = base_height * self.zoom_level + is_preview = self.scale_factor < 1.0 if hasattr(self, 'scale_factor') else False + + if is_preview: + # Fit inside the actual widget dimensions for the dialog preview + width = self.width() + height = self.height() + else: + base_width = 1200 + base_height = 800 + width = base_width * self.zoom_level + height = base_height * self.zoom_level fp_config = self.params.get('footpath_config', 'both') left_fp_width = self.params['footpath_width'] if fp_config in ['left', 'both'] else 0 @@ -1222,11 +1236,15 @@ def draw_cross_section(self, painter): total_deck_width, num_fp = self.compute_deck_total_width() # Reduced margins for better space utilization - margin = 80 - scale = min((width - 2*margin) / total_deck_width, - (height - 2*margin - 80) / (self.girder['depth'] * self.girder_visual_scale['depth'] + + margin_x = 10 if is_preview else 80 + margin_y = 10 if is_preview else 80 + + scale_x = (width - 2 * margin_x) / total_deck_width + scale_y = (height - 2 * margin_y - (40 if is_preview else 80)) / (self.girder['depth'] * self.girder_visual_scale['depth'] + self.params['deck_thickness'] + - self.params['footpath_thickness'] + 1500)) + self.params['footpath_thickness'] + 1500) + + scale = min(scale_x, scale_y) # Apply scale factor for size adjustment (zoom_level already applied to width/height) scale = scale * self.scale_factor @@ -1242,12 +1260,12 @@ def draw_cross_section(self, painter): self.crash_barrier['height'] * scale + self.railing['height'] * scale) - # Ensure proper positioning - use margin from top instead of centering for small heights - top_margin = 20 - if height < 300: # For small heights (like Additional Inputs), position from top - base_y = height - top_margin + # Ensure proper positioning + if is_preview: + # Perfectly center within the preview height, slightly shifted up for bottom labels + base_y = (height + total_bridge_height) / 2 - 20 else: - base_y = (height + total_bridge_height) / 2 - 30 + base_y = (height + total_bridge_height) / 2 - 70 girder_depth_visual = self.girder['depth'] * scale * self.girder_visual_scale['depth'] girder_top_y = base_y - girder_depth_visual @@ -1714,9 +1732,10 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r # Right barrier ENDS at right_barrier_end_x and extends LEFT by crash_barrier_visual_px right_barrier_visual_start = right_barrier_end_x - crash_barrier_visual_px - # LEVEL 1: Overall Bridge Width - #y_level1 = deck_top_y - 115 - Y_OVERALL = base_y + 55 + # DIMENSION LEVELS (Bottom) + Y_OVERHANG = base_y + 35 + Y_GIRDER_SPACING = base_y + 70 + Y_OVERALL = base_y + 105 total_width_m = (deck_right_x - deck_left_x) / scale / 1000.0 self.draw_dimension_arrow( @@ -1854,25 +1873,21 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r if self.show_carriageway_values: label_overhang += f" = {overhang_m:.2f} m" - self.draw_dimension_arrow(painter, deck_left_x, Y_BOTTOM_COMMON, first_girder_x, Y_BOTTOM_COMMON, + self.draw_dimension_arrow(painter, deck_left_x, Y_OVERHANG, first_girder_x, Y_OVERHANG, label_overhang, True, extension_direction='up', extension_end_y=deck_bottom_y) # Girder spacing if n > 1 and len(positions) >= 2: - #y_level4 = base_y + 60 # Moved up - Y_BOTTOM_COMMON = base_y + (1.2 * DIM_OFFSET) - x_left = positions[0] x_right = positions[1] - gs_m = self.params['girder_spacing'] / 1000 label_gs = "Girder Spacing" if self.show_carriageway_values: label_gs += f" = {gs_m:.2f} m" - self.draw_dimension_arrow(painter, x_left, Y_BOTTOM_COMMON, x_right, Y_BOTTOM_COMMON, + self.draw_dimension_arrow(painter, x_left, Y_GIRDER_SPACING, x_right, Y_GIRDER_SPACING, label_gs, True, extension_direction='up', extension_end_y=base_y) diff --git a/src/osdagbridge/desktop/ui/docks/cad_top_view.py b/src/osdagbridge/desktop/ui/docks/cad_top_view.py index 18d9fed2e..0c4c76538 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_top_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_top_view.py @@ -6,7 +6,7 @@ import math from PySide6.QtWidgets import QWidget, QPushButton, QScrollArea -from PySide6.QtCore import Qt, QRectF, QPointF +from PySide6.QtCore import Qt, QRectF, QPointF, QTimer from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF from .cad_cross_section import CrossSectionCADWidget @@ -21,7 +21,7 @@ BEARING_HIGHLIGHT = CAD_HOVER_GREY # ---- Dimension text spacing (CAD standard) ---- DIM_TEXT_GAP = 15 # distance from dimension line to text -DIM_STACK_GAP = 15 # vertical gap between stacked dimensions +DIM_STACK_GAP = 28 # vertical gap between stacked dimensions LEADER_TEXT_OFFSET = 25 # leader label distance @@ -164,6 +164,14 @@ def setup_zoom_controls(self): # Set minimum size for visibility (reduced for better shrinking) self.setMinimumSize(400, 300) + + def showEvent(self, event): + """Standardize size and center after widget is shown""" + super().showEvent(event) + # Position zoom buttons + self._position_zoom_buttons() + # Single-shot timer to center after layout is complete + QTimer.singleShot(200, self.zoom_reset) def zoom_in(self): """Zoom in while keeping view centered""" @@ -791,8 +799,8 @@ def draw_top_view(self, painter): BEARING_HIGHLIGHT = CAD_HOVER_GREY # Use base canvas dimensions for consistent drawing regardless of zoom - width = 800 * self.zoom_level - height = 600 * self.zoom_level + width = 900 * self.zoom_level + height = 750 * self.zoom_level # Reduced margins for better space utilization in split view margin = 60 @@ -1161,24 +1169,9 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ #dim_y_base = last_girder_y + 50 dim_y_base = last_girder_y + 28 - # SPAN LENGTH dimension (always visible) + # BRACING SPACING dimension (closer to bridge) dim_y1 = dim_y_base - x1_span = last_girder['x1'] - x2_span = last_girder['x2'] - span_m = self.params['span_length'] / 1000 - label_span = "Span Length" - if self.show_span_values: - label_span += f" = {span_m:.1f} m" - - self.draw_dimension_arrow_with_extensions_up( - painter, x1_span, dim_y1, x2_span, dim_y1, - label_span, last_girder_y - ) - - # BRACING SPACING dimension (always visible) if self.params['cross_bracing_spacing'] > 0 and len(bracing_positions) > 1: - #dim_y2 = dim_y_base + 15 - dim_y2 = dim_y_base + DIM_STACK_GAP cb_spacing_m = self.params['cross_bracing_spacing'] / 1000 label_cb = "Bracing Spacing" if self.show_span_values: @@ -1188,9 +1181,26 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ x2_brace = bracing_positions[1] + x_offset_last self.draw_dimension_arrow_with_extensions_up( - painter, x1_brace, dim_y2, x2_brace, dim_y2, + painter, x1_brace, dim_y1, x2_brace, dim_y1, label_cb, last_girder_y ) + dim_y_next = dim_y_base + DIM_STACK_GAP + else: + dim_y_next = dim_y_base + + # SPAN LENGTH dimension (below bracing spacing) + dim_y2 = dim_y_next + x1_span = last_girder['x1'] + x2_span = last_girder['x2'] + span_m = self.params['span_length'] / 1000 + label_span = "Span Length" + if self.show_span_values: + label_span += f" = {span_m:.1f} m" + + self.draw_dimension_arrow_with_extensions_up( + painter, x1_span, dim_y2, x2_span, dim_y2, + label_span, last_girder_y + ) # GIRDER SPACING dimension (always visible) if n > 1: @@ -1302,7 +1312,7 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ def draw_dimension_arrow_with_extensions_up(self, painter, x1, y1, x2, y2, text, girder_y): """Dimension line with arrows and extension lines going UP to girder level (dimension below)""" - painter.setPen(QPen(QColor(0, 0, 0), 0.8)) + painter.setPen(QPen(QColor(0, 0, 0), 1.0)) # Draw main dimension line painter.drawLine(QPointF(x1, y1), QPointF(x2, y2)) @@ -1313,7 +1323,7 @@ def draw_dimension_arrow_with_extensions_up(self, painter, x1, y1, x2, y2, text, painter.drawLine(QPointF(x2, y2), QPointF(x2, girder_y)) # Reset pen for arrows - painter.setPen(QPen(QColor(0, 0, 0), 0.8)) + painter.setPen(QPen(QColor(0, 0, 0), 1.0)) # Draw end ticks ext_len = 6 @@ -1342,9 +1352,9 @@ def draw_dimension_arrow_with_extensions_up(self, painter, x1, y1, x2, y2, text, painter.drawPolygon(QPolygonF(right_arrow)) - # Draw text BELOW the dimension line (above in terms of value since we add to y) + # Draw text ABOVE the dimension line to prevent blotting out the line text_x = (x1 + x2) / 2 - text_y = y1 + DIM_TEXT_GAP # Below the dimension line + text_y = y1 - 6 font = QFont('Arial', 9, QFont.Bold) painter.setFont(font) From 15c383e79ffa00beca8f45dc8860b02032be9918 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sun, 15 Mar 2026 15:15:27 +0530 Subject: [PATCH 100/225] Set Osdag-style gradient background for CAD viewer --- src/osdagbridge/desktop/ui/cad_3d.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index 6bf634154..01d60fdde 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -110,6 +110,9 @@ def _complete_cad_init(self): self.viewer.context = self.display.Context self.viewer.view = self.display.View + self.display.set_bg_gradient_color([255, 255, 255], [126, 126, 126]) + + self.viewer.context.SetAutomaticHilight(False) if hasattr(self.viewer, "display_view_cube"): From e604e45f294bb43b2f14ae9c25fe7fc2334cb6c2 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Fri, 20 Mar 2026 05:27:46 +0900 Subject: [PATCH 101/225] enhance crash barrier geometry, CAD rendering, and UI responsiveness - Updated IRC 5 crash barrier dimensions - Improved CAD preview scaling and responsiveness - Added crash barrier input parameters - Refactored CAD annotation styling (removed bold, cleaner look) - Fixed dimension overlap and layout issues - Enhanced crash barrier and railing rendering logic - Unified styling across cross-section and top view CAD --- src/osdagbridge/desktop/cad/irc5_geometry.py | 14 +-- .../dialogs/tabs/typical_section_details.py | 23 ++-- .../desktop/ui/docks/cad_cross_section.py | 109 ++++++++++-------- .../desktop/ui/docks/cad_top_view.py | 36 +++--- 4 files changed, 99 insertions(+), 83 deletions(-) diff --git a/src/osdagbridge/desktop/cad/irc5_geometry.py b/src/osdagbridge/desktop/cad/irc5_geometry.py index 5da71ab39..af8034b7c 100644 --- a/src/osdagbridge/desktop/cad/irc5_geometry.py +++ b/src/osdagbridge/desktop/cad/irc5_geometry.py @@ -6,9 +6,9 @@ def get_geometry(barrier_type: str) -> dict: if barrier_type == "IRC 5 - High Containment RCC Crash Barrier": return { "type": "rcc", - "total_height": 900.0, - "top_width": 175.0, - "bottom_width": 350.0, + "total_height": 1550.0, + "top_width": 250.0, + "bottom_width": 525.0, "base_vertical": 100.0, "mid_offset": 350.0, } @@ -16,11 +16,11 @@ def get_geometry(barrier_type: str) -> dict: elif barrier_type == "IRC 5 - RCC Crash Barrier": return { "type": "rcc", - "total_height": 750.0, - "top_width": 150.0, - "bottom_width": 300.0, + "total_height": 900.0, + "top_width": 175.0, + "bottom_width": 450.0, "base_vertical": 100.0, - "mid_offset": 300.0, + "mid_offset": 350.0, } elif barrier_type == "IRC 5 - Metallic Crash Barrier with Single W-Beam": diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index f8e6a069c..9da4d8a10 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -177,14 +177,12 @@ def init_ui(self): cad_scroll = QScrollArea() cad_scroll.setWidgetResizable(True) - cad_scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - cad_scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) cad_scroll.setFrameShape(QFrame.NoFrame) cad_scroll.setStyleSheet("QScrollArea { background: transparent; border: none; }") self.cad_preview = CrossSectionCADWidget() - self.cad_preview.scale_factor = 0.85 - self.cad_preview.setMinimumHeight(90) # Allows layout to fit it smoothly without scrollbars + self.cad_preview.scale_factor = 0.65 + self.cad_preview.setMinimumHeight(200) cad_scroll.setWidget(self.cad_preview) diagram_layout.addWidget(cad_scroll) @@ -329,7 +327,7 @@ def _update_cad_preview(self): params = {} if hasattr(self, "no_of_girders") and self.no_of_girders.text(): - params['num_girders'] = int(self.no_of_girders.text()) + params['num_girders'] = int(float(self.no_of_girders.text())) if hasattr(self, "girder_spacing") and self.girder_spacing.text(): params['girder_spacing'] = float(self.girder_spacing.text()) * 1000 @@ -369,8 +367,16 @@ def _update_cad_preview(self): if hasattr(self, "median_height") and self.median_height.text(): params["median_height"] = float(self.median_height.text()) * 1000 + + # ---- Crash Barrier ---- + if hasattr(self, "crash_barrier_width") and self.crash_barrier_width.text(): + params["crash_barrier_width"] = float(self.crash_barrier_width.text()) * 1000 + + if hasattr(self, "crash_barrier_height") and self.crash_barrier_height.text(): + params["crash_barrier_height"] = float(self.crash_barrier_height.text()) * 1000 # ---- Railing ---- + if hasattr(self, "railing_type"): params["railing_type"] = self.railing_type.currentText() @@ -1182,8 +1188,9 @@ def _set(widget, value: str): if is_rcc and geom: _set(self.crash_barrier_density, f"{DEFAULT_CONCRETE_DENSITY:.1f}") - if "top_width" in geom: - _set(self.crash_barrier_width, f"{geom['top_width'] / 1000:.2f}") + if "bottom_width" in geom: + _set(self.crash_barrier_width, f"{geom['bottom_width'] / 1000:.2f}") + if "total_height" in geom: _set(self.crash_barrier_height, f"{geom['total_height'] / 1000:.2f}") @@ -1508,6 +1515,8 @@ def _reject_overall_width_override(self, text): def recalculate_girders(self): self._update_overall_bridge_width_display() self._solve_layout("width") + self._update_cad_preview() + def on_girder_spacing_changed(self): if self.updating_fields: diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 097d18c64..a499619c6 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -28,7 +28,7 @@ class CrossSectionCADWidget(QWidget): STIFFENER_COLOR = QColor(79, 78, 70) CROSS_BRACING_COLOR = QColor(235, 236, 211) RAILING_COLOR = QColor(210, 210, 210) - BARRIER_COLOR = QColor(210, 210, 210) + BARRIER_COLOR = QColor(220, 220, 220) END_DIAPHRAGM_COLOR = QColor(134, 134, 100) @@ -574,12 +574,12 @@ def draw_dimension_arrow(self, painter, x1, y1, x2, y2, text, horizontal=True, o # Dimension line is BELOW the figure -> text ABOVE line text_y = y1 - 6 + text_offset - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) metrics = painter.fontMetrics() text_width = metrics.boundingRect(text).width() self.draw_text_with_background(painter, text_x - text_width/2, text_y, text, - QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, False) else: top_arrow = [ QPointF(x1, y1), @@ -616,7 +616,7 @@ def draw_dimension_arrow(self, painter, x1, y1, x2, y2, text, horizontal=True, o self.draw_text_with_background(painter, text_x, text_y, text, - QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, False) painter.restore() @@ -656,7 +656,7 @@ def draw_dimension_arrow_text_outside(self, painter, x1, y1, x2, y2, text, horiz text_x = (x1 + x2) / 2 text_y = y1 + text_offset + 10 - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() text_width = metrics.boundingRect(text).width() @@ -709,7 +709,7 @@ def draw_leader_arrow(self, painter, from_x, from_y, to_x, to_y, text, bg_color= painter.setBrush(QBrush(QColor(0, 0, 0))) painter.drawPolygon(QPolygonF(arrow_points)) - self.draw_text_with_background(painter, from_x - 5, from_y - 5, text, bg_color, text_color, 9, True) + self.draw_text_with_background(painter, from_x - 5, from_y - 5, text, bg_color, text_color, 9, False) def draw_clean_leader_line(self, painter, target_x, target_y, label_x, label_y, text, text_color=QColor(0, 0, 0), line_color=QColor(100, 100, 100)): @@ -725,7 +725,7 @@ def draw_clean_leader_line(self, painter, target_x, target_y, label_x, label_y, painter.drawEllipse(QPointF(target_x, target_y), 3, 3) # Draw text at label position - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() text_width = metrics.boundingRect(text).width() @@ -741,7 +741,7 @@ def draw_clean_leader_line(self, painter, target_x, target_y, label_x, label_y, # Draw text with background self.draw_text_with_background(painter, text_x, text_y, text, - QColor(255, 255, 255, 255), text_color, 9, True) + QColor(255, 255, 255, 255), text_color, 9, False) def compute_deck_total_width(self): @@ -862,39 +862,42 @@ def draw_rcc_railing(self, painter, x_start, y_base, scale, side='left', geo=Non corner_radius = min(outer_w * 0.05, 4) - painter.setBrush(QBrush(QColor(126,126,126) )) + painter.setBrush(QBrush(QColor(220, 220, 220))) # Light grey base painter.setPen(QPen(QColor(34, 34, 34), max(1.5, scale * 2))) base_rect = QRectF(rect_x, base_top_y, outer_w, base_h) painter.drawRect(base_rect) - painter.setBrush(QBrush(QColor(126,126,126) )) + painter.setBrush(QBrush(QColor(220, 220, 220))) # Light grey post body painter.setPen(QPen(QColor(34, 34, 34), max(1.5, scale * 2))) post_rect = QRectF(rect_x, post_top_y, outer_w, post_h) painter.drawRoundedRect(post_rect, corner_radius, corner_radius) inner_x = rect_x + wall_t - inner_top_margin = post_h * 0.08 - inner_bottom_margin = post_h * 0.05 + inner_top_margin = post_h * 0.03 + inner_bottom_margin = post_h * 0.03 inner_height = post_h - inner_top_margin - inner_bottom_margin if inner_w > 3 and inner_height > 5: - painter.setBrush(QBrush(QColor(220, 220, 220))) - painter.setPen(QPen(QColor(120, 120, 120), max(1, scale))) + # Removed inner rectangle lining as requested - inner_rect = QRectF(inner_x, post_top_y + inner_top_margin, inner_w, inner_height) - painter.drawRoundedRect(inner_rect, corner_radius * 0.5, corner_radius * 0.5) + n_voids = 3 + void_w = inner_w * 0.7 + void_h = void_w # Make them squares - n_rails = 4 - rail_spacing = inner_height / (n_rails + 1) - rail_height = max(2, 3 * scale) + # Vertical spacing to distribute voids evenly + void_spacing = (inner_height - n_voids * void_h) / (n_voids + 1) - painter.setBrush(QBrush(QColor(180, 180, 180))) - painter.setPen(QPen(QColor(100, 100, 100), max(0.5, scale * 0.5))) + painter.setBrush(QBrush(QColor(170, 170, 170))) # Dark grey + painter.setPen(QPen(QColor(30, 30, 30), max(1, scale))) - for i in range(1, n_rails + 1): - rail_y = post_top_y + inner_top_margin + i * rail_spacing - rail_height/2 - rail_rect = QRectF(inner_x + 2, rail_y, inner_w - 4, rail_height) - painter.drawRect(rail_rect) + for i in range(n_voids): + v_y = post_top_y + inner_top_margin + (i + 1) * void_spacing + i * void_h + v_x = inner_x + (inner_w - void_w) / 2 + void_rect = QRectF(v_x, v_y, void_w, void_h) + + # Apply rounded corners to voids + v_radius = corner_radius * 0.8 + painter.drawRoundedRect(void_rect, v_radius, v_radius) return (rect_x, post_top_y, rect_x + outer_w, y_base, outer_w) @@ -1207,7 +1210,7 @@ def draw_cross_section(self, painter): STIFFENER_COLOR = QColor(210, 210, 205) CROSS_BRACING_COLOR = QColor(250, 240, 211) RAILING_COLOR = QColor(225, 225, 225) - BARRIER_COLOR = QColor(225, 225, 225) + BARRIER_COLOR = QColor(220, 220, 220) MEDIAN_GREY = QColor(221, 221, 221) @@ -1715,9 +1718,6 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r fp_thick_px = self.params['footpath_thickness'] * scale deck_thick_px = self.params['deck_thickness'] * scale - CRASH_BARRIER_VISUAL_WIDTH = 350.0 # BOTTOM_WIDTH - crash_barrier_visual_px = CRASH_BARRIER_VISUAL_WIDTH * scale - # Calculate barrier positions if not passed if crash_barrier_width_px is None: crash_barrier_width_px = self.params['crash_barrier_width'] * scale @@ -1726,16 +1726,17 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r if right_barrier_end_x is None: right_barrier_end_x = right_barrier_x + crash_barrier_width_px - # Left barrier starts at left_barrier_x and extends RIGHT by crash_barrier_visual_px - left_barrier_visual_end = left_barrier_x + crash_barrier_visual_px + # Left barrier starts at left_barrier_x and extends RIGHT by crash_barrier_width_px + left_barrier_visual_end = left_barrier_x + crash_barrier_width_px - # Right barrier ENDS at right_barrier_end_x and extends LEFT by crash_barrier_visual_px - right_barrier_visual_start = right_barrier_end_x - crash_barrier_visual_px + # Right barrier ENDS at right_barrier_end_x and extends LEFT by crash_barrier_width_px + right_barrier_visual_start = right_barrier_end_x - crash_barrier_width_px + # DIMENSION LEVELS (Bottom) Y_OVERHANG = base_y + 35 - Y_GIRDER_SPACING = base_y + 70 - Y_OVERALL = base_y + 105 + Y_GIRDER_SPACING = base_y + 35 + Y_OVERALL = base_y + 70 total_width_m = (deck_right_x - deck_left_x) / scale / 1000.0 self.draw_dimension_arrow( @@ -1752,7 +1753,7 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r if self.show_carriageway_values: label_text += f" = {total_width_m:.2f} m" - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() text_w = metrics.boundingRect(label_text).width() @@ -1766,7 +1767,7 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, - True + False ) # LEVEL 2: Footpath dimensions @@ -1880,8 +1881,14 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r # Girder spacing if n > 1 and len(positions) >= 2: - x_left = positions[0] - x_right = positions[1] + # Shift to second pair if available to avoid overlap with overhang label + if n > 2: + x_left = positions[1] + x_right = positions[2] + else: + x_left = positions[0] + x_right = positions[1] + gs_m = self.params['girder_spacing'] / 1000 label_gs = "Girder Spacing" if self.show_carriageway_values: @@ -1956,7 +1963,7 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r text = "Deck Thickness" if self.show_carriageway_values: text += f" = {deck_t_mm:.0f} mm" - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() text_width = metrics.boundingRect(text).width() @@ -1964,7 +1971,7 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r text_y = deck_top_y - 8 self.draw_text_with_background(painter, text_x, text_y, text, - QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, False) def add_cross_section_hover_labels(self, painter, carriageway_start_x, carriageway_end_x, left_barrier_x, right_barrier_x, deck_top_y, deck_bottom_y, deck_thick_px, positions, base_y, scale, n, fp_config, @@ -2110,7 +2117,7 @@ def add_cross_section_hover_labels(self, painter, carriageway_start_x, carriagew rect, name, target_x, target_y, label_type, extra = components[self.hovered_label_index] if label_type == 'on_figure_top': - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() text_width = metrics.boundingRect(name).width() @@ -2120,7 +2127,7 @@ def add_cross_section_hover_labels(self, painter, carriageway_start_x, carriagew text_y = target_y - 5 self.draw_text_with_background(painter, text_x, text_y, name, - QColor(255, 255, 255, 220), QColor(60, 60, 60), 9, True) + QColor(255, 255, 255, 220), QColor(60, 60, 60), 9, False) elif label_type == 'straight_line': painter.setPen(QPen(QColor(100, 100, 100), 1.0, Qt.DotLine)) @@ -2130,7 +2137,7 @@ def add_cross_section_hover_labels(self, painter, carriageway_start_x, carriagew painter.setBrush(Qt.NoBrush) painter.drawEllipse(QPointF(target_x, target_y), 3, 3) - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() text_width = metrics.boundingRect(name).width() @@ -2139,7 +2146,7 @@ def add_cross_section_hover_labels(self, painter, carriageway_start_x, carriagew text_y = label_line_y + 6 self.draw_text_with_background(painter, text_x, text_y, name, - QColor(255, 255, 255, 255), QColor(60, 60, 60), 9, True) + QColor(255, 255, 255, 255), QColor(60, 60, 60), 9, False) elif label_type == 'tilted_line_left': label_x = target_x - 25 @@ -2152,7 +2159,7 @@ def add_cross_section_hover_labels(self, painter, carriageway_start_x, carriagew painter.setBrush(Qt.NoBrush) painter.drawEllipse(QPointF(target_x, target_y), 3, 3) - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() text_width = metrics.boundingRect(name).width() @@ -2161,7 +2168,7 @@ def add_cross_section_hover_labels(self, painter, carriageway_start_x, carriagew text_y = label_y + 4 self.draw_text_with_background(painter, text_x, text_y, name, - QColor(255, 255, 255, 255), QColor(60, 60, 60), 9, True) + QColor(255, 255, 255, 255), QColor(60, 60, 60), 9, False) elif label_type == 'lower_pointer': label_y = target_y + 35 @@ -2205,7 +2212,7 @@ def draw_vertical_dimension_with_arrow(self, painter, x, y1, y2, text, side='lef painter.drawPolygon(QPolygonF(bottom_arrow)) # TEXT PART (multi-line) - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() @@ -2383,7 +2390,7 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): if not geo: return - barrier_color = QColor(126, 126, 126) + barrier_color = QColor(220, 220, 220) if self.hovered_element == 'crash_barrier': barrier_color = QColor(255, 250, 220) @@ -2406,8 +2413,8 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): # Reference shape is High Containment (bottom_width=350 mm). # All offsets scale proportionally to the actual bottom_width. - shape_scale = BOTTOM_WIDTH / 350.0 - right_at_mid = 250 * scale * shape_scale # outer wall x at inflection + shape_scale = BOTTOM_WIDTH / 525.0 + right_at_mid = 300 * scale * shape_scale # outer wall x at inflection left_at_top = 50 * scale * shape_scale # inner wall x at top (lean) right_at_top = 225 * scale * shape_scale # outer wall x at top diff --git a/src/osdagbridge/desktop/ui/docks/cad_top_view.py b/src/osdagbridge/desktop/ui/docks/cad_top_view.py index 0c4c76538..e11fab6de 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_top_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_top_view.py @@ -486,12 +486,12 @@ def draw_dimension_arrow(self, painter, x1, y1, x2, y2, text, horizontal=True, o text_x = (x1 + x2) / 2 text_y = y1 - 8 + text_offset if offset >= 0 else y1 + 15 + text_offset - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) metrics = painter.fontMetrics() text_width = metrics.boundingRect(text).width() self.draw_text_with_background(painter, text_x - text_width/2, text_y, text, - QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, False) else: top_arrow = [ QPointF(x1, y1), @@ -525,7 +525,7 @@ def draw_dimension_arrow(self, painter, x1, y1, x2, y2, text, horizontal=True, o text_y = (y1 + y2) / 2 + 3 self.draw_text_with_background(painter, text_x, text_y, text, - QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, False) def draw_dimension_arrow_text_outside(self, painter, x1, y1, x2, y2, text, horizontal=True, text_side='right', text_offset=15): @@ -565,13 +565,13 @@ def draw_dimension_arrow_text_outside(self, painter, x1, y1, x2, y2, text, horiz text_x = (x1 + x2) / 2 text_y = y1 + text_offset + 10 - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() text_width = metrics.boundingRect(text).width() self.draw_text_with_background(painter, text_x - text_width/2, text_y, text, - QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, False) else: painter.drawLine(QPointF(x1 - ext_len, y1), QPointF(x1 + ext_len, y1)) painter.drawLine(QPointF(x2 - ext_len, y2), QPointF(x2 + ext_len, y2)) @@ -599,7 +599,7 @@ def draw_dimension_arrow_text_outside(self, painter, x1, y1, x2, y2, text, horiz text_x = x1 + text_offset self.draw_text_with_background(painter, text_x, text_y, text, - QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, False) def draw_leader_arrow(self, painter, from_x, from_y, to_x, to_y, text, bg_color=QColor(255, 255, 255, 250), text_color=QColor(0, 0, 0)): """a leader line with arrow pointing to component""" @@ -627,7 +627,7 @@ def draw_leader_arrow(self, painter, from_x, from_y, to_x, to_y, text, bg_color= painter.setBrush(QBrush(QColor(0, 0, 0))) painter.drawPolygon(QPolygonF(arrow_points)) - self.draw_text_with_background(painter, from_x - 5, from_y - 5, text, bg_color, text_color, 9, True) + self.draw_text_with_background(painter, from_x - 5, from_y - 5, text, bg_color, text_color, 9, False) def draw_clean_leader_line(self, painter, target_x, target_y, label_x, label_y, text, text_color=QColor(0, 0, 0), line_color=QColor(100, 100, 100)): @@ -643,7 +643,7 @@ def draw_clean_leader_line(self, painter, target_x, target_y, label_x, label_y, painter.drawEllipse(QPointF(target_x, target_y), 3, 3) # Draw text at label position - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() text_width = metrics.boundingRect(text).width() @@ -659,7 +659,7 @@ def draw_clean_leader_line(self, painter, target_x, target_y, label_x, label_y, # Draw text with background self.draw_text_with_background(painter, text_x, text_y, text, - QColor(255, 255, 255, 240), text_color, 9, True) + QColor(255, 255, 255, 240), text_color, 9, False) def compute_deck_total_width(self): """Compute total deck width including median if present""" @@ -1233,8 +1233,8 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ self.draw_text_with_background( painter, label_x, label_y, label_text, - QColor(255, 255, 255, 250), - CAD_DARK_GREY, 9, True + QColor(255, 255, 255, 240), + QColor(0, 0, 0), 9, False ) # CL OF BEARING labels - ALWAYS VISIBLE (moved outside hover condition) @@ -1244,12 +1244,12 @@ def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_ right_label_x = right_top_x - 45 self.draw_text_with_background(painter, left_label_x, label_y_bearing, - "CL of Bearing", QColor(255, 255, 255, 250), - CAD_DARK_GREY, 9, True) + "CL of Bearing", QColor(255, 255, 255, 240), + QColor(0, 0 ,0), 9, False) self.draw_text_with_background(painter, right_label_x, label_y_bearing, - "CL of Bearing", QColor(255, 255, 255, 250), - CAD_DARK_GREY, 9, True) + "CL of Bearing", QColor(255, 255, 255, 240), + QColor(0, 0 ,0), 9, False) # HOVER LABELS (only shown when hovered) @@ -1356,13 +1356,13 @@ def draw_dimension_arrow_with_extensions_up(self, painter, x1, y1, x2, y2, text, text_x = (x1 + x2) / 2 text_y = y1 - 6 - font = QFont('Arial', 9, QFont.Bold) + font = QFont('Arial', 9, QFont.Normal) painter.setFont(font) metrics = painter.fontMetrics() text_width = metrics.boundingRect(text).width() self.draw_text_with_background(painter, text_x - text_width/2, text_y, text, - QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, False) def draw_skewed_dimension_arrow(self, painter, x1, y1, x2, y2, text, skew_rad): @@ -1434,7 +1434,7 @@ def draw_skewed_dimension_arrow(self, painter, x1, y1, x2, y2, text, skew_rad): text_y = mid_y self.draw_text_with_background(painter, text_x, text_y, text, - QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, False) def add_clean_top_view_notes(self, painter, height): """Add professional notes""" From a43e1ae415dbca9b540bfef69c59744869cbf438 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 25 Mar 2026 16:13:25 +0530 Subject: [PATCH 102/225] Improve CAD rendering and UI sync - Add realistic deck texture (triangles, dots, scratches) - Sync median with Additional Inputs and CAD preview - Fix cross-bracing geometry and zero-length issues --- .../desktop/ui/dialogs/additional_inputs.py | 4 + .../dialogs/tabs/typical_section_details.py | 6 +- .../desktop/ui/docks/cad_cross_section.py | 188 +++++++++++------- 3 files changed, 127 insertions(+), 71 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 276cb3e73..e2b4f5f5e 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -719,6 +719,10 @@ def apply_tab_visibility(self, footpath_value: str, include_median: str) -> None if median_index >= 0: median_enabled = (include_median != "No") inner_tabs.setTabEnabled(median_index, median_enabled) + + # Trigger CAD update to reflect visibility changes + if hasattr(self.typical_section_tab, "_update_cad_preview"): + self.typical_section_tab._update_cad_preview() # 2D CAD functions for tab enabling and disabling inside the addition inputs dialog ---> ends here diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 9da4d8a10..9045cb2fe 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -387,7 +387,11 @@ def _update_cad_preview(self): params["railing_height"] = float(self.railing_height.text()) * 1000 # ---- Median presence ---- - if hasattr(self, "median_type"): + if hasattr(self, "median_tab"): + median_idx = self.input_tabs.indexOf(self.median_tab) + is_median_enabled = self.input_tabs.isTabEnabled(median_idx) + params["median_present"] = is_median_enabled + elif hasattr(self, "median_type"): params["median_present"] = self.median_type.currentText() != "None" if params: diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index a499619c6..2dfb32bcc 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -768,45 +768,86 @@ def compute_deck_total_width(self): return deck_total, num_fp def create_concrete_brush(self): - """Concrete hatch pattern brush (aggregate look)""" - size = 25 # pattern tile size - pixmap = QPixmap(size, size) - pixmap.fill(Qt.transparent) + import random, math + + + SIZE = 120 + DOT_COUNT = 100 + TRI_COUNT = 30 + rng = random.Random(42) # ← seeded RNG so tiles are deterministic + + def rand(): return rng.random() + def rr(a, b): return a + rand() * (b - a) + + # ── Draw one copy of the content, offset by (ox, oy) + def draw_content(p: QPainter, ox: float, oy: float): + p.save() + p.translate(ox, oy) + + # Fine aggregate — dots (sand / grit) + p.setPen(Qt.NoPen) + for _ in range(DOT_COUNT): + x, y = rr(0, SIZE), rr(0, SIZE) + r = rr(0.6, 2.2) + h = int(rr(40, 110)) + p.setBrush(QColor(h, h, h)) + p.drawEllipse(QPointF(x, y), r, r) + + # Coarse aggregate — irregular triangles + for _ in range(TRI_COUNT): + cx, cy = rr(0, SIZE), rr(0, SIZE) + base_angle = rr(0, 2 * math.pi) + h = int(rr(70, 140)) + sat = int(rr(0, 10)) + + poly = QPolygonF() + for v in range(3): + ang = base_angle + v * (2 * math.pi / 3) + rr(-0.45, 0.45) + dist = rr(SIZE * 0.032, SIZE * 0.072) + poly.append(QPointF(cx + math.cos(ang) * dist, + cy + math.sin(ang) * dist)) + + fill_col = QColor(h + sat, h, h - sat) + alpha = int(rr(64, 140)) # 25–55 % opacity stroke + stroke_col = QColor(20, 20, 20, alpha) + lw = rr(0.4, 0.8) + + p.setBrush(fill_col) + p.setPen(QPen(stroke_col, lw)) + p.drawPolygon(poly) + + # Micro-scratches — cement paste surface texture + p.setBrush(Qt.NoBrush) + scratch_count = int(SIZE * 0.3) + for _ in range(scratch_count): + x, y = rr(0, SIZE), rr(0, SIZE) + length = rr(2, SIZE * 0.08) + ang = rr(0, math.pi * 2) + alpha = int(rr(10, 31)) # 4–12 % opacity + p.setPen(QPen(QColor(90, 85, 80, alpha), rr(0.3, 0.7))) + p.drawLine(QPointF(x, y), + QPointF(x + math.cos(ang) * length, + y + math.sin(ang) * length)) + + p.restore() + + # ── Build tile pixmap + pixmap = QPixmap(SIZE, SIZE) + pixmap.fill(QColor(225, 225, 225)) p = QPainter(pixmap) p.setRenderHint(QPainter.Antialiasing) - # light grey base (optional) - p.fillRect(0, 0, size, size, QColor(245, 245, 245)) - - # dots (sand) - p.setPen(QPen(QColor(150, 150, 150), 1)) - for i in range(35): - x = random.randint(0, size - 1) - y = random.randint(0, size - 1) - p.drawPoint(x, y) - - #Angular stones - p.setPen(QPen(QColor(130, 130, 130), 1.2)) - for _ in range(6): - cx = random.randint(6, size - 6) - cy = random.randint(6, size - 6) - - poly = QPolygonF() - sides = random.randint(3, 5) - base_angle = random.uniform(0, 2 * math.pi) - - for _ in range(sides): - angle = base_angle + random.uniform(-0.8, 0.8) - radius = random.uniform(3, 7) - poly.append( - QPointF( - cx + radius * math.cos(angle), - cy + radius * math.sin(angle) - ) - ) + # Draw all 9 offset copies so shapes that straddle any edge + # are completed on the opposite side → perfect seamless wrap + for dx in (-SIZE, 0, SIZE): + for dy in (-SIZE, 0, SIZE): + draw_content(p, dx, dy) - p.drawPolygon(poly) + # Very subtle wash to unify everything + p.setPen(Qt.NoPen) + p.setBrush(QColor(100, 95, 88, 10)) + p.drawRect(0, 0, SIZE, SIZE) p.end() return QBrush(pixmap) @@ -1006,7 +1047,7 @@ def draw_rcc_barrier_median(self, painter, median_start_x, median_end_x, deck_to y_mid = y_bottom - mid_y_off y_top = y_bottom - h - barrier_brush = QBrush(QColor(255, 250, 220)) if self.hovered_element == 'median' else QBrush(QColor(126, 126, 126)) + barrier_brush = QBrush(QColor(255, 250, 220)) if self.hovered_element == 'median' else QBrush(QColor(220, 220, 220)) painter.setBrush(barrier_brush) painter.setPen(QPen(Qt.black, max(1.5, scale * 1.5))) @@ -1050,14 +1091,14 @@ def draw_metallic_median(self, painter, median_start_x, median_end_x, deck_top_y x_tl = x_bl + (bottom_w - top_w) / 2 x_tr = x_tl + top_w - painter.setBrush(QBrush(QColor(180, 180, 180))) + painter.setBrush(QBrush(QColor(220, 220, 220))) painter.setPen(QPen(Qt.black, max(1.0, scale))) painter.drawPolygon(QPolygonF([QPointF(x_bl, y_bottom), QPointF(x_br, y_bottom), QPointF(x_tr, y_top_kerb), QPointF(x_tl, y_top_kerb)])) post_w, post_offset = 150.0 * scale, 75.0 * scale spacer_w, spacer_h = 200.0 * scale, 330.0 * scale w_beam_h, w_beam_depth, w_beam_thk = 330.0 * scale, 83.0 * scale, 3.0 * scale - post_color = QColor(255, 250, 220) if self.hovered_element == 'median' else QColor(80, 80, 80) + post_color = QColor(255, 250, 220) if self.hovered_element == 'median' else QColor(220, 220, 220) def draw_side_assembly(is_left): # Assembly on Left side of median (near x_tl): [Beam] [Spacer] [Post] -> Facing left carriageway @@ -1622,46 +1663,53 @@ def draw_cross_section(self, painter): # Geometry vector (true bracing direction) dx = x2 - x1 - dy = bottom_R - top_L - length = math.hypot(dx, dy) - if length <= 0: - continue - - # Perpendicular direction - perp_x = -dy / length - perp_y = dx / length - thickness = 3.5 * (self.zoom_level / 1.2) - off_x = perp_x * thickness / 2 - off_y = perp_y * thickness / 2 # ===== CROSS BRACING (\) ===== - p1 = QPointF(x1 + off_x, top_L + off_y) - p2 = QPointF(x2 + off_x, bottom_R + off_y) - p3 = QPointF(x2 - off_x, bottom_R - off_y) - p4 = QPointF(x1 - off_x, top_L - off_y) + dy_bs = bottom_R - top_L + L_bs = math.hypot(dx, dy_bs) + if L_bs > 0: + perp_x_bs = -dy_bs / L_bs + perp_y_bs = dx / L_bs + + off_x_bs = perp_x_bs * thickness / 2 + off_y_bs = perp_y_bs * thickness / 2 + + p1 = QPointF(x1 + off_x_bs, top_L + off_y_bs) + p2 = QPointF(x2 + off_x_bs, bottom_R + off_y_bs) + p3 = QPointF(x2 - off_x_bs, bottom_R - off_y_bs) + p4 = QPointF(x1 - off_x_bs, top_L - off_y_bs) - painter.setPen(Qt.NoPen) - painter.setBrush(QBrush(CROSS_BRACING_COLOR)) - painter.drawPolygon(QPolygonF([p1, p2, p3, p4])) + painter.setPen(Qt.NoPen) + painter.setBrush(QBrush(CROSS_BRACING_COLOR)) + painter.drawPolygon(QPolygonF([p1, p2, p3, p4])) - painter.setPen(QPen(CROSS_BRACING_COLOR.darker(220), 1.5)) - painter.drawLine(p1, p2) - painter.drawLine(p4, p3) + painter.setPen(QPen(CROSS_BRACING_COLOR.darker(220), 1.5)) + painter.drawLine(p1, p2) + painter.drawLine(p4, p3) # ===== CROSS BRACING (/) ===== - p1 = QPointF(x1 + off_x, bottom_L + off_y) - p2 = QPointF(x2 + off_x, top_R + off_y) - p3 = QPointF(x2 - off_x, top_R - off_y) - p4 = QPointF(x1 - off_x, bottom_L - off_y) - - painter.setPen(Qt.NoPen) - painter.setBrush(QBrush(CROSS_BRACING_COLOR)) - painter.drawPolygon(QPolygonF([p1, p2, p3, p4])) - - painter.setPen(QPen(CROSS_BRACING_COLOR.darker(220), 1.5)) - painter.drawLine(p1, p2) - painter.drawLine(p4, p3) + dy_sl = top_R - bottom_L + L_sl = math.hypot(dx, dy_sl) + if L_sl > 0: + perp_x_sl = -dy_sl / L_sl + perp_y_sl = dx / L_sl + + off_x_sl = perp_x_sl * thickness / 2 + off_y_sl = perp_y_sl * thickness / 2 + + p1 = QPointF(x1 + off_x_sl, bottom_L + off_y_sl) + p2 = QPointF(x2 + off_x_sl, top_R + off_y_sl) + p3 = QPointF(x2 - off_x_sl, top_R - off_y_sl) + p4 = QPointF(x1 - off_x_sl, bottom_L - off_y_sl) + + painter.setPen(Qt.NoPen) + painter.setBrush(QBrush(CROSS_BRACING_COLOR)) + painter.drawPolygon(QPolygonF([p1, p2, p3, p4])) + + painter.setPen(QPen(CROSS_BRACING_COLOR.darker(220), 1.5)) + painter.drawLine(p1, p2) + painter.drawLine(p4, p3) # Draw railings left_railing_rect = None right_railing_rect = None From f052bac86497866b7e37d4db9cc11ca04023b11a Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 1 Apr 2026 22:41:44 +0530 Subject: [PATCH 103/225] Trigger CAD update on Save button click and update crash barrier geometry --- .../desktop/ui/dialogs/additional_inputs.py | 2 +- .../desktop/ui/docks/cad_cross_section.py | 6 ++-- .../desktop/ui/docks/input_dock.py | 28 +++++++++++-------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index e2b4f5f5e..7acb2ef1b 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -1,4 +1,4 @@ -""" +""" Additional Inputs Widget for Highway Bridge Design Provides detailed input fields for manual bridge parameter definition """ diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 2dfb32bcc..d3c5fa6f7 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -1034,11 +1034,11 @@ def draw_rcc_barrier_median(self, painter, median_start_x, median_end_x, deck_to bottom_w = bottom_w_mm * scale median_width_px = median_end_x - median_start_x - # Shape offsets proportional to standard HC barrier (350mm bottom) - shape_scale = bottom_w_mm / 350.0 + # Shape offsets proportional to standard HC barrier (525mm bottom) + shape_scale = bottom_w_mm / 525.0 base_v = 100.0 * scale mid_y_off = 350.0 * scale - right_at_mid = 250.0 * scale * shape_scale + right_at_mid = 300.0 * scale * shape_scale left_at_top = 50.0 * scale * shape_scale right_at_top = 225.0 * scale * shape_scale diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index b1896342f..25320956a 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -760,11 +760,7 @@ def _show_additional_inputs_dialog(self, target_tab_name=None): except Exception: pass - self.additional_inputs = AdditionalInputs(footpath_value, carriageway_width, initial_cad_state=initial_cad_state) - self.additional_inputs_widget = self.additional_inputs - dialog = AdditionalInputs(footpath_value, carriageway_width, initial_cad_state=initial_cad_state) - self.additional_inputs = dialog self.additional_inputs_widget = dialog @@ -802,23 +798,31 @@ def _show_additional_inputs_dialog(self, target_tab_name=None): except Exception: pass - # Capture state when dialog closes. + # Capture state when dialog closes or Save is clicked. try: dialog.finished.connect(self._handle_additional_inputs_closed) + if hasattr(dialog, "save_button"): + dialog.save_button.clicked.connect(lambda: self._update_cad_from_additional_inputs(dialog)) except Exception: pass # Connect to accept signal to handle save result = dialog.exec_() - # If user clicked Save (accepted), get values and trigger update + # If user clicked Save (accepted) or closed, trigger final update if result == AdditionalInputs.Accepted: - values = dialog.get_all_values() - if values: - # Merge with existing input values - self.additional_input_values = values - # Emit signal to trigger CAD update - self.input_value_changed.emit() + self._update_cad_from_additional_inputs(dialog) + + def _update_cad_from_additional_inputs(self, dialog): + """Update homepage CAD using values from the Additional Inputs dialog.""" + if not dialog: + return + values = dialog.get_all_values() + if values: + # Merge with existing input values + self.additional_input_values = values + # Emit signal to trigger homepage CAD update + self.input_value_changed.emit() def show_additional_inputs(self): """Show Additional Inputs dialog with its default initial tab.""" From 165f7d6aa9570522173b9559eab8eb0549dbf4ef Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Fri, 3 Apr 2026 02:36:27 +0530 Subject: [PATCH 104/225] add fit-to-screen zoom, improve scaling logic, and fix section input handling - Replaced "Reset" button with icon-based "Fit to Screen" button using SVG resource - Implemented compute_fit_zoom() for adaptive scaling (full fit and height-only modes) - Added fit_to_screen() as default behavior on startup - Updated zoom_reset() to perform height-based fitting instead of fixed zoom - Standardized footpath option handling ("Both Sides", "Single Side") - Added fit_to_screen SVG resource and integrated into UI --- .../desktop/resources/resources.qrc | 1 + .../desktop/resources/resources_rc.py | 847 ++++++++++-------- .../resources/vectors/fit_to_screen.svg | 3 + .../dialogs/tabs/typical_section_details.py | 21 +- .../desktop/ui/docks/cad_cross_section.py | 155 +++- .../desktop/ui/docks/cad_top_view.py | 143 ++- .../desktop/ui/docks/input_dock.py | 2 - 7 files changed, 715 insertions(+), 457 deletions(-) create mode 100644 src/osdagbridge/desktop/resources/vectors/fit_to_screen.svg diff --git a/src/osdagbridge/desktop/resources/resources.qrc b/src/osdagbridge/desktop/resources/resources.qrc index 0201236c7..5a1167430 100644 --- a/src/osdagbridge/desktop/resources/resources.qrc +++ b/src/osdagbridge/desktop/resources/resources.qrc @@ -40,6 +40,7 @@ vectors/msg_warning.svg vectors/msg_critical.svg vectors/msg_about.svg + vectors/fit_to_screen.svg \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/resources_rc.py b/src/osdagbridge/desktop/resources/resources_rc.py index e5be7bf4e..7f4e2ab16 100644 --- a/src/osdagbridge/desktop/resources/resources_rc.py +++ b/src/osdagbridge/desktop/resources/resources_rc.py @@ -1,91 +1,92 @@ # Resource object code (Python 3) # Created by: object code -# Created by: The Resource Compiler for Qt version 6.10.2 +# Created by: The Resource Compiler for Qt version 6.10.1 # WARNING! All changes made in this file will be lost! from PySide6 import QtCore qt_resource_data = b"\ -\x00\x00\x04\xd8\ -(\ -\xb5/\xfd`\xe8\x14u&\x00&,\x88 \xd0\x5c7\ -\x98j\xfb\xe6\xb5.\xc56n\x15\xd6t\x0a+\x9d\xc1\ -\x15\x8e\x8a\xa8\xc6\xde/\xa3\xd4\xd3\xcb\x80\x12\x85\x00~\ -\x00|\x00\x17\xcav1\xab\xc8b,\xfa\xcc\xc8[\xc7\ -\x91\x9a/s\xf3\xeeV2\xd3\x92S\xa4\xe8\x16\x11\xf8\ -X-\xd6\xfe2\x15?f,a\xa4\x04\xdeel\xb1\ -\xa8\x8d\xf7\xc4\x99\x5c\x894t\x99\xbb\xf0xk\xe9V\ -\xba\xf9\x14\xc4\x9a\xaa\xe2\x9b!\xdf\x9a>Hp\x90\xe2\ -u@\x8c#\x14\x80\x00 \x900\xb8I\xa4\xa9h.\ -\x9a\xca\xe7\x09\xb9\xc9s\xcbw\xd2p(\x18P\xc75\ -\x17}_&\xf4\x81&Q\xc85#\x8cc(\x96P\ -\xc7\xdd\x01\x81\x89\x1b\x12\x014D\x95\xa8'\xa9\x89\xfa\ -M\xadY\xfe\x16d\xea\x9d\xf77\x05\xb2\xa5\x11\x09-\ -~+\xd1\x11l>\xbd{\x92\x96U\xe6\xe3\x8b\x8do\ -aU\xc7q[E\xd6W9T{\xac\xae\x8c7\x15\ -\xebxk\xd79Djj\x8e\xdbd\xde[\xd8\x0e\xf9\ -\x0b\x87+\xf1U\x15\xb74\xc4\x16\xb3Y\xde\x8e\x97\xaa\ -\xbanWk\x86>\xf9+$\x8aw\xfb~y\xc9j\ -\xa9\x06\xdb\xf9M\x9cM\x96>\xebH\xb3\xf6\xb1\xaa\xb5\ -}q\xeae.\x02[Yo\xdd\x080\x89A\x81\xfd\ -\x90\x82\xee\xbd\xddUT\xe2\xad\xcf\x8a`?9\xd6\x92\ -\xe8\xdd~\xfdf4\x5c2Z\x1c\xbal\xf8\xbb\xaa\x5c\ -\x17\xef}z*}z\xec\xb7\x1e\xf4\xd7\xd4\xe3tD\ -\xa2\x91\xe7 \x05\xf4q>n\xa1\xf8\x8b/C\xbb_\ -\x17\x1eM\x9c-\x10\x17\xce\x99j%\xde\x1b\x87&\xde\ -y\xa7\xdej[\xa6\xe6\xeb\xed\xe2\xf8\x14\x0c\x87|Z\ -\x7f6\xb7\xf8\xf6u\xb7\xefgj\xeaK\xf3\xf6\xae\xc1\ -\xc8\x01~\xff]\xfbC\xa7\x9f\xa9N\x98\xa7\xfe\xb1f\ -\xc2S\x1fn\xb5\x9a_\x9c\x7f\x95\xa9e{l\x9cv\ -kY\xfef\xa3\xe4\xad\xfdU\xdb3N9\xec3\xe9\ -\xa0K6K\xc5\xba\xf3\xb7\xbaL=kq\x16C\x8f\ -/.\xfd0p=\xc7\xf3\xd7|\xe2\xca\xc0;\x98\xad\ -%MAv\x1d\xbf\xfdz\xd1\x8c[\xf8\x88\xb2+\x11\ -[4\xfd\xb7\x82^\xb8\x88p\x9b(r\x22\xe3\xf1\x1a\ -\xdbJ\xc6[?\xe8E\x1dT\x91r\x04\x81$\xa8\xe1\ -\xa9\x224#\x22\x92\x14$Isq\x88B\x14\x92\x16\ -\xb2\xbc\x01\xb2X@\x85R,\xc2 \x10\x86\x08\x95\x80\ -\x10L\x882\xc6\x04\x22\x81\x92 \x125\xad\x01\x9e\xa4\ -\x92\x89d\xdc\xe6x\x05\xf1Ct{1!\xff\x8dN\ -\xd1D44\xf5\xc0$\x07\x17\xa8R\xcam\xdb\xc9\xaa\ -x\x86e1\xb3\x0e$%\x94\x03\xf0\xc6\xee\xbbz\xfa\ -\xfa9\xc7\xfaU\x901\xd4\x17\x22\x96\x05\x1aGn\x96\ -\x98\x00B\xaaa\x8fC\xc1h\xb6\xb50\xc4=\xd1\xaa\ -\xcb@\x1b\xd5f\x82\xdd\x03{\xb4u\xcb\x8d\x1a\xd4\x96\ -\xc1\xa6\x8bK\x10v;g\xdb\x13\xb2\x86)T\xfa\xfa\ -\x84\xc0\xf2\xdb\xd3)\x1a\xaey\xdd\xf6\x00\x0e\xa4XP\ -\xc2\x8d\x92`\x0aF?\xd5\xca\xe6c0\x81&\xa9I\ -\xed\xb6\xc27\xf6\x06\x8c\xb9\xaf\xef\x1d\xfcmh\x8c\xe7\ -\xc9\x8eY$\xeb0\x8ei\xe4X)\x07\xb5w,\x00\ -3\xb3\xfczP\x1d\x5c]Rk3\xb1\x86\x9c\xda\xaa\ -Sz\xc7\xf6\xa3^\xbb\x0f\x8b\xcf\xd3\xb5\x06\x5c;\xce\ -\x83\x9eb\xc6a\xc2\xc4\xd33g\xc7\xa5R\x10%W\ -\xa3\xaa\xe4\x1c\xf5l\xbb\x22#\xc5\x0b\x9b\xff|\x13)\ -\xb0\xdc4XH\xba\xb3A\xa3\xc2\xda\xb7\x7fg\x07\xa8\ -\x98wV\xd10\x0f\xb8\x1f\x18{\xa9\xb9\xaf\xeb\x92\xe1\ -ZT\x03\x10\x85y\xa8\xe1\x88\x08\xbaI\xe9\x18\x5c?\ -]!g\x98\x04\xb3\x90\xc6\x9as\xc3\x9fq\xfdK\x98\ -\xf8:\xf4gX\x03\x02\x80P=\x19\x0f\x93\xb2\xcdI\ -.\x93\x9d\xcfJ\xd2\xd9\x95\x05\x16\xe0\xaa\x8c\xb6\xe5\x06\ -b\xd2\xdc2\x8e\x1bP\xa7\xc9{\xf0\xff^17\xa6\ -\xc0?\xa3\xd9\xcc7\x02\x15\xf1\xc6\x14P\xe7\x8b\xf8\x95\ -\x95\xcaD\xb2\xf8\xf0\x8d\x951\x1f\x97:\x11\xa5\xe6\xbf\ -K\xd5O\xc7\x10Fm\x97\xc4\xf5\xe8\xce\xf2\xcc\x9cU\ -\x02\x8d\x17\xb7\x9a\xc6\xd6\x16\x0c\xe4\x0e;&\x13\x91\x16\ -\xbd\x07\xcf'\x0fF\xc3\xdbU^\x9c]wp\x0c\x02\ -\xa2\xdc\x19\xdfL\xe8\x8f\xb0d\xb8q(>\xbc\x07\x22\ -\xe1\x80`\xc1m\xe4\x11\x9d2\xe9}\xbe\xf4a\x11\xdd\ -\xfe\xac\xab]x\x18\x0eB\x12z/`\xbfq0+\ -\x85\x9f\x18\xe4Tk\x84\xe6\xdfz\xa5g\xaa|ow\ -=\xd18\x13\x8c\xc0e9\xb4\xae-\x85\x8e\x05\xbd\x17\xfd\x82!\x15\ +\x18\xb4\xdb\xc4n\x90\x93\xb8\xad\x85\x1bg\x8eC\xe1\x9d\ +\xf8\xef\xef\xb1\x9b\xef&n`\xef\xcdb\x0du\xb6s\ +\xce\xe3\xc7\x8f\xcf9N\xeb=\xfa\xe7E\xcf\xfe\x1eB\ +\xe8j:\xea\x9f\xa1\xb3o\xe7h:\xbb\x9d\x8c\xa7_\ +\xc6\xe3\x19j\xa2\xab\x9b\xb3\xfe\xe5\xf9\xcf\xf1\x08\x0dn\ +\xd1\xf4\xebxx~z><\x9f\xdd\xeaw^\xe6\x06\ +\xbdo\xed\xef\xed\xef\xb5^\x05\xaf\xf3\x11\x9dM\xae\x06\ +\xfdI\x04\x0f\xbd\x9d\x10\x1cH4\xf5\x89C\xe7\xd4y\ +\xf7Z@\xd7\x17\x98z?\xa8\xe7\xf25\xfa\xad\x8d \ +\x1b;\xf7\x0b\xc1C\xcfm:\x9cqa\xa1\xc6\xfcP\ +\xb5\x93h\x9c\x0b\x97@o\xc7\x7fD\x01g\xd4E\x8d\ +\xcfm<\xeft\xa3\xf1\x15\x16\x0b\xeaY\xa8\xed?F\ +=>v]\xea-\xe2\xaeg\xc5\xc3\xf5\x8cs6\xa3\ +\xbe\xc1\xeb\xa9~\x22\x1bqg[?&(\xfd\xd3\x04\ +J\xe2\xf8\x00&\x1c$x\xe6\xdc\x93\xcd\x80\xfeK\xe0\ +\xcd\xb4wc\xac)\xb0K\xc3 \x0b\xff\x97/\xb8O\ +\x84|jbF\x17\xde\x8ax\xd2B}\xf5\xf3\xfb\x10\ +~\x13\xb1Y\xd3\xf5\xd4gT\xc2\x7f-k\x89=\x97\ +\x11\xc3\xd2Fm\xd5b.@\x13g\x8c\xdb\x98\xa1\xe1\ +\x928\xf76\x7fDS\xf9\x04\x06\xf4\x0e\xe9\xbe\x01\xf4\ +\xfd\xdeF\x9f\x82\x8c-w\xbb\xf1\xe2\x03\x1f;z\xf1\ +\xbd\x98\xf5\xc4\x94e\xc1\x8eS\x07K.b\xabk\xea\ +\xca%X\xec%\x16\x97\x84.\x962\xd7U\xc2wW\ +?\xe5\x14v\xd3\x17K4\xa5\x9fj`\xd6\x92?\x90\ +\x04^\x89\xe7#\xfd\x18\x0c8\xaa\x8f\xb8&]\xc7\x18\ +\xea,\x8e\xae\xf0\x028\x0f\x05{k\xb5\x1e\x88\x03.\ +\x82V\xe4\xe3c\xf0\xb0x\x97H\xfb\x82x\xe1\x00\x8b\ +\x86$+\x9faI\xee|x\xf3\x0et\x13\xde\xd9X\ +\x98\x14\x7f\xa8\x9aI\xf1\xdbGi\x877 \x04\x06b\ +\x9f\xc9\xebG\xb0\xc8\x8czR,\x16\x92\x02{\xa0\x1d\ +\x01\xd26\x9d\x8c\xba\xae\xad\x800 \xabl\x1f\xb2g\ +\xbc\xb69_\x90 \xa8\xb06>V\xad\x965\xa4\xc7\ +\xebF\x9f\x12m$G\xb8\x84\xa1CC\xe8\xab\x85\xab\ +z\xd7L\xe2\xc8F\x86\xce+\xfc\x19\xb6*\xa1e\xdc\ +;m\x17h)\x9c\xf7\xfa>\x03\x022\xcb\x06\xa1$\ +\xe4\x94\x0a\xb3\x01\x9e\xa1\xe5\xd2L\x93\x91\xb9\xb42\xb1\ +=\xea\x16\x1bC[\xfd\x92\xfb\xd9\xd0\x1e\xf5\xda\x5cJ\ +\xbez\xf9&i/M,D\x9a=\xa38z\xbc\x15\ +F\x8f\xd3\xdc\x07\xf1~\x04)\x05r\xae\x87\x94I\x14\ +\xa4\xd1\xbe\x5c\x95\x9bXU3\xebeephN\xc2\ +\x06\xad\x1d\xab\x08\xd13\xe4\x97\x18\x86\xc7=RH\xfd\ +\x9dR\x17\xe6H\x90[B&@\x97K\xed \xc7\xe6\ ++*\xaa.TT\xe3\xcb\xf1\x0d\x94T\x83o\xb3\xd9\ +\xd5eRY\x0dp@\xd0\x84<\x10\xf6\xfa\xaa\xeak\ +\x18,\x07!\x88\xca\xab>J\xeb%\x90\x92_\xaf\xcd\ +`Vv\x17\xd7\x91xl\xce\xdc\x13T\xca\xc4\x91!\ +;g\xed\xe5C\x7f\xaa\x0bI\x1e\xe5\xa6\xb0\xb1\x90\x93\ +)gr\xab($\xe3\xed\xb0\x90\xdb\xbd]\x02-\x10\ +\xb0\xe5\xac\x10\xe2K\xc81\xb3YM\xc4\xc6\xd5\x0f\xea\ +.\x88l\x0c\xc3\x00N\xfd\x8cJF\x06*-\xa3\xdd\ +\xf5\xaf\x0a\x0d\x13l\x13\xd6\xd0\xaf\xe9\x9f\x05\x98\xc6|\ +m\xce\xb5\xa9\xf5\x09_\xf0\x9cqs\x82.\xadg\xb6\ +\xc3@Zxo\x88n\x5cP\x8f\xae`\xc6.\xa9V\ +{,-\xc7\xdb\xbbk\xea,\xb8\x9ey\xfa\x0e\xd4;\ +\xa59\xef\xa8V\xc3Pee\x91\x98\xc2=\xd5JM\ +\xe1\xc7\x1b\x02r\x12\x7f\x1b\x97\x05\xdc\x7f\xc2f\xd1\xd4\ +\x9f\xf09d<\xf8\xcb\xa8\xcc@\xde\xc9\x22\xf9t\xe8\ +t\x9d\xaa\xd3k4\xbd\x9bU\xa7\xdd\xfd|`G\xf1\ +$\x8au\x03]\xe1L\xa8G\xea\x04\xf1g\x95U+\ +\x12\x1c\x84\xa6\xa09\xe2\xce\xbd!\x09\xea\x1c\x18yf\ +0\xff\xce\x85\xf9\xe8\xba\x22\xa2\xa5%\xf7\x81j\xb5\xae\ +?\xdd\xfc\x96\xe5\xf2d\xd5%\xff\xb9\x14\xd4\x0c\xf2\xdf\ +\xd8\xa5\xd2\x84\xebX\xb5\x9aW\x01\xedw\x8eW\x94=\ +Y\xe8\xcd\x90\x87\x82\x82\x14.\xc9\xfa\xcd\x07\xb4\xe2\x1e\ +W\xd7rb\xfc\x10Q\xa7\xdc/_\xcb\xd4\x11\x9c1\ +Hf\x16\xc8O\xc25\x98\x95_\x93\xda\xaa\x9d \xa8\ +\x9c&\x8a7\xb4\x10\xe4\x09\xc0\x08$\x97\x04\x05\xda\x88\ +\xaar\xe1|\x81U\xb5\x99\xa5\x95m\xe6CO\xf2\xaf\ +[uhL[\x90\xc2\x8e\xbe\x9c\x98\xe1\xf7\xdb\xaai\ +\xf8\x17\x04\xac\xaf\xaa\xf0G\x9fa\xe2\x05\xac\xa0\xd2\x8f\ +\xab\xf1n\xfb\xff\x05Zu\xe2\x01\xee\xa7\xb6j\x1a\xee\ +\x08\x8b{\x98\xa5\xe1B`\xdb\xbc\x13\xe3\xce\xa0\xdd\xe9\ +\x1d\x14\xd2dp\x98\x13\xff\x1fr\xc3Ah\xe7\x87\x8b\ +\x17,\xb5z\x05\xe8\x0buI\xa0\xbd\x87~K\xdfG\ +\xf4e&\xa8\x8fB\xdd\x8b\x0c(r\xc3e\xf4\xe8\xdb\ +C\x1e\x0a\x04t\x8cl\x22\xd7\x84x1+\xf0\xb7\x00\ +\xed??\x04\x81\x7f\ \x00\x00\x00\xb2\ <\ svg xmlns=\x22http:\ @@ -417,91 +418,91 @@ fill=\x22current\ Color\x22/>\x0d\x0a\ \x0d\x0a\ -\x00\x00\x05&\ +\x00\x00\x05(\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22utf\ --8\x22?>\x0a\x0a\ -\x0d\x0a\x0d\x0a<\ -/svg>\ +667s12.8-4.26666\ +7 21.333333-4.26\ +6667 14.933333 2\ +.133333 21.33333\ +4 4.266667c6.4 2\ +.133333 12.8 6.4\ + 17.066666 10.66\ +6667 4.266667 4.\ +266667 8.533333 \ +8.533333 10.6666\ +67 14.933333 2.1\ +33333 6.4 4.2666\ +67 12.8 4.266667\ + 19.2s-2.133333 \ +12.8-4.266667 19\ +.2-6.4 10.666667\ +-10.666667 14.93\ +3333c-4.266667 4\ +.266667-10.66666\ +7 8.533333-17.06\ +6666 10.666667-6\ +.4 2.133333-12.8\ + 4.266667-21.333\ +334 4.266667s-14\ +.933333-2.133333\ +-21.333333-4.266\ +667-10.666667-6.\ +4-17.066667-10.6\ +66667c-4.266667-\ +4.266667-8.53333\ +3-8.533333-10.66\ +6666-14.933333s-\ +4.266667-10.6666\ +67-4.266667-19.2\ +z m89.6-98.13333\ +3h-76.8L462.9333\ +33 277.333333h98\ +.133334l-10.6666\ +67 322.133334z\x22 \ +fill=\x22#FFFFFF\x22 /\ +>\ \x00\x00\x02\xfe\ <\ svg xmlns=\x22http:\ @@ -727,6 +728,56 @@ fill=\x22currentC\ olor\x22/>\x0d\x0a\x0d\ \x0a\ +\x00\x00\x02\xf7\ +<\ +svg width=\x2235\x22 h\ +eight=\x2235\x22 viewB\ +ox=\x220 0 35 35\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0a<\ +path d=\x22M31.2499\ + 11.3644V5.22933\ +H26.0251V2H31.24\ +99C31.9924 2 32.\ +6364 2.32017 33.\ +182 2.96052C33.7\ +273 3.60118 34 4\ +.35745 34 5.2293\ +3V11.3644H31.249\ +9ZM1 11.3644V5.2\ +2933C1 4.35745 1\ +.27266 3.60118 1\ +.81799 2.96052C2\ +.36359 2.32017 3\ +.00764 2 3.75014\ + 2H8.97486V5.229\ +33H3.75014V11.36\ +44H1ZM26.0251 33\ +V29.7707H31.2499\ +V23.6356H34V29.7\ +707C34 30.6425 3\ +3.7273 31.3988 3\ +3.182 32.0395C32\ +.6364 32.6798 31\ +.9924 33 31.2499\ + 33H26.0251ZM3.7\ +5014 33C3.00764 \ +33 2.36359 32.67\ +98 1.81799 32.03\ +95C1.27266 31.39\ +88 1 30.6425 1 2\ +9.7707V23.6356H3\ +.75014V29.7707H8\ +.97486V33H3.7501\ +4ZM6.49986 26.54\ +18V8.45817H28.50\ +01V26.5418H6.499\ +86ZM9.25 23.3125\ +H25.75V11.6875H9\ +.25V23.3125Z\x22 fi\ +ll=\x22#1F1F1F\x22/>\x0a<\ +/svg>\x0a\ \x00\x00\x05O\ <\ svg width=\x2240\x22 h\ @@ -972,96 +1023,97 @@ 22.7815 380.553Z\ \x22 fill=\x22black\x22/>\ \x0d\x0a\x0d\x0a\ -\x00\x00\x05~\ +\x00\x00\x05\x89\ <\ svg width=\x2224\x22 h\ eight=\x2224\x22 viewB\ ox=\x220 0 24 24\x22 f\ ill=\x22none\x22 xmlns\ =\x22http://www.w3.\ -org/2000/svg\x22>\x0a<\ -g clip-path=\x22url\ -(#clip0_1945_994\ -)\x22>\x0a\x0a\x0a
\x0a\x0a<\ -clipPath id=\x22cli\ -p0_1945_994\x22>\x0a\x0a\x0a\x0a\x0a\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\ +\x0d\x0a\ \x00\x00\x02\xde\ <\ svg xmlns=\x22http:\ @@ -1316,105 +1368,107 @@ 33V541.685Z\x22 fil\ l=\x22black\x22/>\x0d\x0a\x0d\x0a\ -\x00\x00\x06\x0f\ +\x00\x00\x06!\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22iso\ --8859-1\x22?>\x0a\x0a\x0a\x0a\x09\x0a\x09\x0a\x0a<\ -path style=\x22fill\ -:url(#SVGID_1_);\ -\x22 d=\x22M44,24c0,11\ -.045-8.955,20-20\ -,20S4,35.045,4,2\ -4S12.955,4,24,4S\ -44,12.955,44,24z\ -\x22/>\x0a\x0a\x0a\x0d\x0a\x0d\x0a\x0d\ +\x0a\ +\x0d\x0a\x09\x0d\x0a\x09\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0a\ +l-13,13\x0d\x0a\x09C22.31\ +7,33.098,21.683,\ +33.098,21.293,32\ +.707z\x22/>\x0d\x0a\ +\ \x00\x00\x05O\ <\ svg width=\x2240\x22 h\ @@ -1794,6 +1848,11 @@ \x00c\ \x00r\x00o\x00s\x00s\x00_\x00s\x00e\x00c\x00t\x00i\x00o\x00n\x00_\x00o\x00p\x00e\ \x00n\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ +\x00\x11\ +\x0c\xd8Fg\ +\x00f\ +\x00i\x00t\x00_\x00t\x00o\x00_\x00s\x00c\x00r\x00e\x00e\x00n\x00.\x00s\x00v\x00g\ +\ \x00\x12\ \x0aDDG\ \x00a\ @@ -1869,66 +1928,68 @@ qt_resource_struct = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1e\ +\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1f\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x03\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x034\x00\x00\x00\x00\x00\x01\x00\x00?\x8b\ -\x00\x00\x01\x9b&Y\xfe\xde\ -\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x07\xc3\ -\x00\x00\x01\x9c|\xb1\x92v\ -\x00\x00\x00H\x00\x00\x00\x00\x00\x01\x00\x00\x04\xdc\ -\x00\x00\x01\x9b&Y\xfe\xda\ -\x00\x00\x03T\x00\x00\x00\x00\x00\x01\x00\x00Bm\ -\x00\x00\x01\x9b&Y\xfe\xda\ -\x00\x00\x04\x8c\x00\x00\x00\x00\x00\x01\x00\x00a\xed\ -\x00\x00\x01\x9b&Y\xfe\xde\ -\x00\x00\x01.\x00\x00\x00\x00\x00\x01\x00\x00\x18\xd0\ -\x00\x00\x01\x9c\xafj\xfd\xb9\ -\x00\x00\x03\xda\x00\x00\x00\x00\x00\x01\x00\x00U\x0f\ -\x00\x00\x01\x9b&Y\xfe\xda\ -\x00\x00\x03\xb6\x00\x00\x00\x00\x00\x01\x00\x00N\xfc\ -\x00\x00\x01\x9c\xafk\x18\xf4\ -\x00\x00\x04h\x00\x00\x00\x00\x00\x01\x00\x00_T\ -\x00\x00\x01\x9c\xafk9:\ -\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x09*\ -\x00\x00\x01\x9b&Y\xfe\xda\ -\x00\x00\x00\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x17i\ -\x00\x00\x01\x9c|\xb1\x92u\ -\x00\x00\x01\xdc\x00\x00\x00\x00\x00\x01\x00\x00%<\ -\x00\x00\x01\x9b&Y\xfe\xde\ -\x00\x00\x04\x02\x00\x00\x00\x00\x00\x01\x00\x00Zb\ -\x00\x00\x01\x9b&Y\xfe\xda\ -\x00\x00\x05\x0a\x00\x00\x00\x00\x00\x01\x00\x00e4\ -\x00\x00\x01\x9b&Y\xfe\xde\ -\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x000t\ -\x00\x00\x01\x9c|\xb1\x92t\ -\x00\x00\x02v\x00\x00\x00\x00\x00\x01\x00\x00+!\ -\x00\x00\x01\x9b&Y\xfe\xda\ -\x00\x00\x00d\x00\x00\x00\x00\x00\x01\x00\x00\x05\x92\ -\x00\x00\x01\x9b&Y\xfe\xda\ -\x00\x00\x04*\x00\x00\x00\x00\x00\x01\x00\x00]!\ -\x00\x00\x01\x9b&Y\xfe\xde\ -\x00\x00\x01v\x00\x00\x00\x00\x00\x01\x00\x00 \xfc\ -\x00\x00\x01\x9b&Y\xfe\xde\ -\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00#\x07\ -\x00\x00\x01\x9b&Y\xfe\xda\ -\x00\x00\x03\x82\x00\x00\x00\x00\x00\x01\x00\x00D\xa2\ -\x00\x00\x01\x9b&Y\xfe\xde\ -\x00\x00\x01T\x00\x00\x00\x00\x00\x01\x00\x00\x1d\xfa\ -\x00\x00\x01\x9b&Y\xfe\xde\ -\x00\x00\x02\xe2\x00\x00\x00\x00\x00\x01\x00\x001\xda\ -\x00\x00\x01\x9b&Y\xfe\xde\ -\x00\x00\x04\xca\x00\x00\x00\x00\x00\x01\x00\x00c\x8e\ -\x00\x00\x01\x9b&Y\xfe\xda\ -\x00\x00\x028\x00\x00\x00\x00\x00\x01\x00\x00)\xbb\ -\x00\x00\x01\x9c|\xb1\x92u\ -\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00&\xe4\ -\x00\x00\x01\x9b&Y\xfe\xda\ -\x00\x00\x03\x14\x00\x00\x00\x00\x00\x01\x00\x00:\x09\ -\x00\x00\x01\x9c\xafj\xd4)\ -\x00\x00\x00&\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x9b&Y\xfe\xda\ +\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x00B\xa2\ +\x00\x00\x01\x9bQ\x8a*\x0e\ +\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd2\ +\x00\x00\x01\x9c\xaa\x0eyt\ +\x00\x00\x00H\x00\x00\x00\x00\x00\x01\x00\x00\x04\xeb\ +\x00\x00\x01\x9bQ\x8a*\x0b\ +\x00\x00\x03|\x00\x00\x00\x00\x00\x01\x00\x00E\x84\ +\x00\x00\x01\x9bQ\x8a*\x08\ +\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00e\x16\ +\x00\x00\x01\x9bQ\x8a*\x11\ +\x00\x00\x01.\x00\x00\x00\x00\x00\x01\x00\x00\x18\xdf\ +\x00\x00\x01\x9c\xf0\xe8\x17N\ +\x00\x00\x04\x02\x00\x00\x00\x00\x00\x01\x00\x00X8\ +\x00\x00\x01\x9bQ\x8a*\x08\ +\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x00R\x13\ +\x00\x00\x01\x9c\xf0\xe8\x17N\ +\x00\x00\x04\x90\x00\x00\x00\x00\x00\x01\x00\x00b}\ +\x00\x00\x01\x9c\xf0\xe8\x17N\ +\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x099\ +\x00\x00\x01\x9bQ\x8a*\x07\ +\x00\x00\x00\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x17x\ +\x00\x00\x01\x9c\xaa\x0eys\ +\x00\x00\x01\xdc\x00\x00\x00\x00\x00\x01\x00\x00%M\ +\x00\x00\x01\x9bQ\x8a*\x12\ +\x00\x00\x04*\x00\x00\x00\x00\x00\x01\x00\x00]\x8b\ +\x00\x00\x01\x9bQ\x8a*\x0c\ +\x00\x00\x052\x00\x00\x00\x00\x00\x01\x00\x00h]\ +\x00\x00\x01\x9bQ\x8a*\x13\ +\x00\x00\x02\xc8\x00\x00\x00\x00\x00\x01\x00\x003\x80\ +\x00\x00\x01\x9c\xaa\x0eyq\ +\x00\x00\x02\x9e\x00\x00\x00\x00\x00\x01\x00\x00.-\ +\x00\x00\x01\x9bQ\x8a*\x0a\ +\x00\x00\x00d\x00\x00\x00\x00\x00\x01\x00\x00\x05\xa1\ +\x00\x00\x01\x9bQ\x8a*\x0d\ +\x00\x00\x04R\x00\x00\x00\x00\x00\x01\x00\x00`J\ +\x00\x00\x01\x9bQ\x8a*\x12\ +\x00\x00\x01v\x00\x00\x00\x00\x00\x01\x00\x00!\x0d\ +\x00\x00\x01\x9bQ\x8a*\x10\ +\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00#\x18\ +\x00\x00\x01\x9bQ\x8a*\x07\ +\x00\x00\x02v\x00\x00\x00\x00\x00\x01\x00\x00+2\ +\x00\x00\x01\x9dO\x02\xb6\xc4\ +\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00G\xb9\ +\x00\x00\x01\x9bQ\x8a*\x12\ +\x00\x00\x01T\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x0b\ +\x00\x00\x01\x9bQ\x8a*\x0e\ +\x00\x00\x03\x0a\x00\x00\x00\x00\x00\x01\x00\x004\xe6\ +\x00\x00\x01\x9bQ\x8a*\x0e\ +\x00\x00\x04\xf2\x00\x00\x00\x00\x00\x01\x00\x00f\xb7\ +\x00\x00\x01\x9bQ\x8a*\x0d\ +\x00\x00\x028\x00\x00\x00\x00\x00\x01\x00\x00)\xcc\ +\x00\x00\x01\x9c\xaa\x0eyr\ +\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00&\xf5\ +\x00\x00\x01\x9bQ\x8a*\x0c\ +\x00\x00\x03<\x00\x00\x00\x00\x00\x01\x00\x00=\x15\ +\x00\x00\x01\x9c\xf0\xe8\x17M\ +\x00\x00\x00&\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x9bQ\x8a*\x06\ " def qInitResources(): diff --git a/src/osdagbridge/desktop/resources/vectors/fit_to_screen.svg b/src/osdagbridge/desktop/resources/vectors/fit_to_screen.svg new file mode 100644 index 000000000..59dad60b7 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/fit_to_screen.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 9045cb2fe..810daf0e0 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -102,7 +102,7 @@ def __init__(self, footpath_value="None", carriageway_width=7.5, parent=None, in self._last_girders_value: int | None = None self.crash_barrier_count = 2 # Assume two crash barriers at carriageway edges self.overall_bridge_width_formula = ( - "OverallBridgeWidth = CrossSectionLayout.total_width = CarriagewayWidth + " + "OverallBridgeWidth = CrossSectionLayout.total_width = (2 x CarriagewayWidth if Median else CarriagewayWidth) + " "2 x CrashBarrierWidth + MedianWidth + (NoOfFootpaths x FootpathWidth) + " "(NoOfFootpaths x RailingWidth)" ) @@ -326,6 +326,19 @@ def _update_cad_preview(self): params = {} + # Carriageway Width (always needed for overall width calculation in CAD) + if hasattr(self, "carriageway_width"): + params['carriageway_width'] = float(self.carriageway_width) * 1000 + + # Footpath Config + if hasattr(self, "footpath_value"): + fp_map = { + "Both Sides": "both", + "Single Side": "left", + "None": "none" + } + params['footpath_config'] = fp_map.get(self.footpath_value, "none") + if hasattr(self, "no_of_girders") and self.no_of_girders.text(): params['num_girders'] = int(float(self.no_of_girders.text())) @@ -381,7 +394,7 @@ def _update_cad_preview(self): params["railing_type"] = self.railing_type.currentText() if hasattr(self, "railing_width") and self.railing_width.text(): - params["railing_width"] = float(self.railing_width.text()) * 1000 + params["railing_width"] = float(self.railing_width.text()) if hasattr(self, "railing_height") and self.railing_height.text(): params["railing_height"] = float(self.railing_height.text()) * 1000 @@ -440,9 +453,9 @@ def get_typical_section_params(self) -> dict: return params def _get_footpath_count(self): - if self.footpath_value == "Both": + if self.footpath_value == "Both Sides": return 2 - if self.footpath_value == "Single Sided": + if self.footpath_value == "Single Side": return 1 return 0 diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index d3c5fa6f7..bb2d9f08c 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -7,7 +7,8 @@ import math from PySide6.QtWidgets import QWidget, QPushButton, QScrollArea from PySide6.QtCore import Qt, QRectF, QPointF, QTimer -from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF +from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF, QIcon +from PySide6.QtCore import Qt, QRectF, QPointF, QTimer, QSize from PySide6.QtGui import QPixmap from osdagbridge.desktop.cad.irc5_geometry import ( CrashBarrierGeometry, @@ -171,21 +172,24 @@ def setup_zoom_controls(self): self.zoom_out_btn.clicked.connect(self.zoom_out) self.zoom_out_btn.hide() # Hide initially - self.zoom_reset_btn = QPushButton("Reset", self) - self.zoom_reset_btn.setFixedSize(45, 25) + self.zoom_reset_btn = QPushButton(self) + self.zoom_reset_btn.setFixedSize(25, 25) + self.zoom_reset_btn.setIcon(QIcon(":/vectors/fit_to_screen.svg")) + self.zoom_reset_btn.setIconSize(QSize(25, 25)) + self.zoom_reset_btn.setToolTip("Fit to screen") self.zoom_reset_btn.setStyleSheet(""" QPushButton { background-color: rgba(255, 255, 255, 200); - border: 1px solid #999; - border-radius: 3px; - font-size: 9px; + font-size: 14px; + font-weight: bold; + border: None; } QPushButton:hover { - background-color: rgba(144, 175, 19, 200); + background-color: rgba(55, 55, 55, 50); color: white; } """) - self.zoom_reset_btn.clicked.connect(self.zoom_reset) + self.zoom_reset_btn.clicked.connect(self.fit_to_screen) self.zoom_reset_btn.hide() # Hide initially # Set minimum size for visibility @@ -231,7 +235,7 @@ def _position_zoom_buttons(self): self.zoom_in_btn.move(x + 10, y) self.zoom_out_btn.move(x + 10, y + 30) - self.zoom_reset_btn.move(x, y + 60) + self.zoom_reset_btn.move(x+10, y + 60) # Ensure buttons are visible and on top self.zoom_in_btn.show() @@ -260,8 +264,8 @@ def showEvent(self, event): if not is_preview: # Position zoom buttons self._position_zoom_buttons() - # Single-shot timer to center after layout is complete - QTimer.singleShot(200, self.zoom_reset) + # DEFAULT: Fit to Screen on startup + QTimer.singleShot(200, self.fit_to_screen) def zoom_in(self): """Zoom in while keeping view centered""" @@ -289,19 +293,75 @@ def zoom_out(self): # Restore center position after zoom self._set_scroll_center(old_center, 1/1.1) - def zoom_reset(self): - """Reset zoom to 1.0 while keeping view centered""" - # Store old center position before zoom - old_center = self._get_scroll_center() - zoom_ratio = 1.0 / self.zoom_level + def compute_fit_zoom(self, mode="full"): + """ + Compute zoom level. + mode="full" -> content fits both width and height (min(scale_x, scale_y)) + mode="height" -> content fits only height (unconstrained width) + """ + total_deck_width, _ = self.compute_deck_total_width() - # Apply zoom - self.zoom_level = 1.0 + # Denominator for height fit (matches draw_cross_section logic) + model_h = (self.girder['depth'] * self.girder_visual_scale['depth'] + + self.params['deck_thickness'] + + self.params['footpath_thickness'] + 800) + + # Base dimensions Used in draw_cross_section when zoom=1.0 + base_w, base_h = 1000, 600 + margin_x, margin_y = 80, 80 + avail_base_w = base_w - 2 * margin_x + avail_base_h = base_h - 2 * margin_y - 80 + + base_scale_x = avail_base_w / total_deck_width + base_scale_y = avail_base_h / model_h + base_scale = min(base_scale_x, base_scale_y) + + if base_scale <= 0: return 1.0 + + # Viewport dimensions + if self.scroll_area and self.scroll_area.viewport(): + vp = self.scroll_area.viewport() + vp_w, vp_h = max(vp.width(), 200), max(vp.height(), 150) + else: + vp_w, vp_h = max(self.width(), 400), max(self.height(), 300) + + # Apply padding (15%) + PADDING = 0.15 + avail_vp_w = vp_w * (1.0 - 2 * PADDING) + avail_vp_h = vp_h * (1.0 - 2 * PADDING) + + target_scale_x = avail_vp_w / total_deck_width + target_scale_y = avail_vp_h / model_h + + if mode == "height": + target_scale = target_scale_y + else: + target_scale = min(target_scale_x, target_scale_y) + + return target_scale / base_scale + + def fit_to_screen(self): + """Scale the diagram so it fits perfectly inside the visible viewport and center it.""" + self.zoom_level = self.compute_fit_zoom(mode="full") self._update_widget_size() self.update() - - # Restore center position after zoom - self._set_scroll_center(old_center, zoom_ratio) + self._center_scroll_bars() + + def zoom_reset(self): + """Standard behavior: Fit to height only.""" + self.zoom_level = self.compute_fit_zoom(mode="height") + self._update_widget_size() + self.update() + # Center the scrollbars after size update + QTimer.singleShot(50, self._center_scroll_bars) + + def _center_scroll_bars(self): + """Center the scrollbars of the parent scroll area.""" + if self.scroll_area: + h_bar = self.scroll_area.horizontalScrollBar() + v_bar = self.scroll_area.verticalScrollBar() + h_bar.setValue((h_bar.minimum() + h_bar.maximum()) // 2) + v_bar.setValue((v_bar.minimum() + v_bar.maximum()) // 2) def _get_scroll_center(self): """Get the current center point of the visible viewport in widget coordinates""" @@ -376,12 +436,43 @@ def _update_widget_size(self): # The preview widget will conform to the dialog's layout return - base_width = 1200 - base_height = 800 - # Add extra padding (20%) to ensure scrollbar reaches beyond content - padding_factor = 1.2 - new_width = int(base_width * self.zoom_level * padding_factor) - new_height = int(base_height * self.zoom_level) + base_width = 1000 + base_height = 600 + + # For height-only zoom, we need to ensure the widget is wide enough to contain the content + total_deck_width, _ = self.compute_deck_total_width() + + # Calculate content width at current zoom level + # Scale logic: width = base_width * zoom_level, scale_x = (width - 160) / total_deck_width + # scale_y = (height - 240) / model_h + # So content_width_px = total_deck_width * scale = total_deck_width * (target_scale) + # target_scale = zoom_level * base_scale + + model_h = (self.girder['depth'] * self.girder_visual_scale['depth'] + + self.params['deck_thickness'] + + self.params['footpath_thickness'] + 800) + + margin_x, margin_y = 80, 80 + avail_base_w = base_width - 2 * margin_x + avail_base_h = base_height - 2 * margin_y - 80 + + base_scale_x = avail_base_w / total_deck_width + base_scale_y = avail_base_h / model_h + base_scale = min(base_scale_x, base_scale_y) + + current_scale = self.zoom_level * base_scale + content_width_px = total_deck_width * current_scale + 2 * margin_x + + # The widget should be at least as wide/high as its viewport OR content dimensions + if self.scroll_area and self.scroll_area.viewport(): + vp = self.scroll_area.viewport() + vp_w, vp_h = vp.width(), vp.height() + else: + vp_w, vp_h = base_width, base_height + + new_width = int(max(vp_w, content_width_px + 50)) + new_height = int(max(vp_h, base_height * self.zoom_level)) + self.setMinimumSize(new_width, new_height) self.resize(new_width, new_height) @@ -409,6 +500,7 @@ def update_params(self, params: dict): self.median_type = params["median_type"] self.show_dimensions = True + self.zoom_reset() # Auto-fit height on parameter change self.update() def mouseMoveEvent(self, event): @@ -1268,8 +1360,8 @@ def draw_cross_section(self, painter): width = self.width() height = self.height() else: - base_width = 1200 - base_height = 800 + base_width = 1000 + base_height = 600 width = base_width * self.zoom_level height = base_height * self.zoom_level @@ -1286,7 +1378,7 @@ def draw_cross_section(self, painter): scale_x = (width - 2 * margin_x) / total_deck_width scale_y = (height - 2 * margin_y - (40 if is_preview else 80)) / (self.girder['depth'] * self.girder_visual_scale['depth'] + self.params['deck_thickness'] + - self.params['footpath_thickness'] + 1500) + self.params['footpath_thickness'] + 800) scale = min(scale_x, scale_y) @@ -2647,5 +2739,4 @@ def get_wave_y(z_rel): # z_rel from 0 to w_beam_h assembly_width = max(kerb_bottom_w, (x - (beam_root_x - w_beam_depth))) hover_rect = QRectF(x - assembly_width, assembly_top_y, abs(assembly_width), assembly_bottom_y - assembly_top_y) - self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) - + self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/docks/cad_top_view.py b/src/osdagbridge/desktop/ui/docks/cad_top_view.py index e11fab6de..2ffdb235d 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_top_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_top_view.py @@ -6,8 +6,8 @@ import math from PySide6.QtWidgets import QWidget, QPushButton, QScrollArea -from PySide6.QtCore import Qt, QRectF, QPointF, QTimer -from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF +from PySide6.QtCore import Qt, QRectF, QPointF, QTimer, QSize +from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF, QIcon from .cad_cross_section import CrossSectionCADWidget # ---- CAD Grey Palette ---- @@ -146,21 +146,24 @@ def setup_zoom_controls(self): """) self.zoom_out_btn.clicked.connect(self.zoom_out) - self.zoom_reset_btn = QPushButton("Reset", self) - self.zoom_reset_btn.setFixedSize(45, 25) + self.zoom_reset_btn = QPushButton(self) + self.zoom_reset_btn.setFixedSize(25, 25) + self.zoom_reset_btn.setIcon(QIcon(":/vectors/fit_to_screen.svg")) + self.zoom_reset_btn.setIconSize(QSize(25, 25)) + self.zoom_reset_btn.setToolTip("Fit to screen") self.zoom_reset_btn.setStyleSheet(""" QPushButton { background-color: rgba(255, 255, 255, 200); - border: 1px solid #999; - border-radius: 3px; - font-size: 9px; + font-size: 14px; + font-weight: bold; + border: None; } QPushButton:hover { - background-color: rgba(144, 175, 19, 200); + background-color: rgba(55, 55, 55, 50); color: white; } """) - self.zoom_reset_btn.clicked.connect(self.zoom_reset) + self.zoom_reset_btn.clicked.connect(self.fit_to_screen) # Set minimum size for visibility (reduced for better shrinking) self.setMinimumSize(400, 300) @@ -168,10 +171,10 @@ def setup_zoom_controls(self): def showEvent(self, event): """Standardize size and center after widget is shown""" super().showEvent(event) + # DEFAULT: Fit to Screen on startup + QTimer.singleShot(200, self.fit_to_screen) # Position zoom buttons self._position_zoom_buttons() - # Single-shot timer to center after layout is complete - QTimer.singleShot(200, self.zoom_reset) def zoom_in(self): """Zoom in while keeping view centered""" @@ -199,19 +202,78 @@ def zoom_out(self): # Restore center position after zoom self._set_scroll_center(old_center, 1/1.1) - def zoom_reset(self): - """Reset zoom to 1.0 while keeping view centered""" - # Store old center position before zoom - old_center = self._get_scroll_center() - zoom_ratio = 1.0 / self.zoom_level + def compute_fit_zoom(self, mode="full"): + """ + Compute zoom level. + mode="full" -> content fits both width and height (min(scale_x, scale_y)) + mode="height" -> content fits only height (unconstrained width) + """ + span_length = max(self.params.get('span_length', 35000), 1.0) + n = self.params.get('num_girders', 4) + if n > 1: + total_model_width = (n - 1) * self.params.get('girder_spacing', 2750) + 2 * self.params.get('deck_overhang', 1000) + else: + total_model_width = 2 * self.params.get('deck_overhang', 1000) + total_model_width = max(total_model_width, 1.0) + + # Base dimensions from draw_top_view + base_w, base_h = 900, 750 + margin = 60 + avail_base_w = base_w - 2 * margin + avail_base_h = base_h - 2 * margin - 60 - # Apply zoom - self.zoom_level = 1.0 + base_scale_x = avail_base_w / span_length + base_scale_y = avail_base_h / total_model_width + base_scale = min(base_scale_x, base_scale_y) + + if base_scale <= 0: + return 1.0 + + # Viewport dimensions + if self.scroll_area and self.scroll_area.viewport(): + vp = self.scroll_area.viewport() + vp_w, vp_h = max(vp.width(), 200), max(vp.height(), 150) + else: + vp_w, vp_h = max(self.width(), 400), max(self.height(), 300) + + # Apply padding (~8%) + PADDING = 0.15 + avail_vp_w = vp_w * (1.0 - 2 * PADDING) + avail_vp_h = vp_h * (1.0 - 2 * PADDING) + + target_scale_x = avail_vp_w / span_length + target_scale_y = avail_vp_h / total_model_width + + if mode == "height": + target_scale = target_scale_y + else: + target_scale = min(target_scale_x, target_scale_y) + + fit_zoom = target_scale / base_scale + return max(0.1, min(fit_zoom, 10.0)) + + def fit_to_screen(self): + """Scale the diagram so it fits perfectly inside the visible viewport and center it.""" + self.zoom_level = self.compute_fit_zoom(mode="full") self._update_widget_size() self.update() - - # Restore center position after zoom - self._set_scroll_center(old_center, zoom_ratio) + self._center_scroll_bars() + + def zoom_reset(self): + """Standard behavior: Fit to height only.""" + self.zoom_level = self.compute_fit_zoom(mode="height") + self._update_widget_size() + self.update() + # Center the scrollbars after size update + QTimer.singleShot(50, self._center_scroll_bars) + + def _center_scroll_bars(self): + """Center the scrollbars of the parent scroll area.""" + if self.scroll_area: + h_bar = self.scroll_area.horizontalScrollBar() + v_bar = self.scroll_area.verticalScrollBar() + h_bar.setValue((h_bar.minimum() + h_bar.maximum()) // 2) + v_bar.setValue((v_bar.minimum() + v_bar.maximum()) // 2) def _get_scroll_center(self): """Get the current center point of the visible viewport in widget coordinates""" @@ -280,10 +342,38 @@ def _update_widget_size(self): """Update widget size based on zoom level for proper scrolling""" base_width = 800 base_height = 600 - # Add extra padding (20%) to ensure scrollbar reaches beyond content - padding_factor = 1.2 - new_width = int(base_width * self.zoom_level * padding_factor) - new_height = int(base_height * self.zoom_level) + + # Calculate content width at current zoom level to allow horizontal scrolling + span_length = max(self.params.get('span_length', 35000), 1.0) + n = self.params.get('num_girders', 4) + if n > 1: + total_model_width = (n - 1) * self.params.get('girder_spacing', 2750) + 2 * self.params.get('deck_overhang', 1000) + else: + total_model_width = 2 * self.params.get('deck_overhang', 1000) + total_model_width = max(total_model_width, 1.0) + + base_w_internal, base_h_internal = 900, 750 + margin = 60 + avail_base_w = base_w_internal - 2 * margin + avail_base_h = base_h_internal - 2 * margin - 60 + + base_scale_x = avail_base_w / span_length + base_scale_y = avail_base_h / total_model_width + base_scale = min(base_scale_x, base_scale_y) + + current_scale = self.zoom_level * base_scale + content_width_px = span_length * current_scale + 2 * margin + + # The widget should be at least as wide/high as its viewport OR content dimensions + if self.scroll_area and self.scroll_area.viewport(): + vp = self.scroll_area.viewport() + vp_w, vp_h = vp.width(), vp.height() + else: + vp_w, vp_h = base_width, base_height + + new_width = int(max(vp_w, content_width_px + 50)) + new_height = int(max(vp_h, base_height * self.zoom_level)) + self.setMinimumSize(new_width, new_height) self.resize(new_width, new_height) @@ -332,7 +422,7 @@ def _position_zoom_buttons(self): self.zoom_in_btn.move(int(x + 10), int(y)) self.zoom_out_btn.move(int(x + 10), int(y + 30)) - self.zoom_reset_btn.move(int(x), int(y + 60)) + self.zoom_reset_btn.move(int(x + 10), int(y + 60)) # Ensure buttons are visible on top self.zoom_in_btn.show() @@ -362,6 +452,7 @@ def update_params(self, params: dict): self.show_carriageway_values = True self.show_dimensions = True + self.zoom_reset() # Auto-fit height on parameter change self.update() def mouseMoveEvent(self, event): diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 25320956a..4bc4d39df 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -1570,8 +1570,6 @@ def _get_effective_carriageway_width(self): except ValueError: width = min_width width = max(min_width, min(width, max_width)) - if self._is_median_included(): - return width * 2.0 # Two carriageways, one on each side of the median return width def _is_median_included(self): From 11c92bb6cdd3c40124c93e8f6cda6d084456d2bf Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Fri, 3 Apr 2026 21:57:10 +0530 Subject: [PATCH 105/225] Fix railing width unit handling and improve CAD scaling behavior - Removed incorrect mm conversion for railing width input and display - Synced UI and geometry units for railing width - Improved cross-section viewport resizing with zoom-based scaling - Added buffer to prevent content clipping at higher zoom levels --- .../ui/dialogs/tabs/typical_section_details.py | 4 ++-- .../desktop/ui/docks/cad_cross_section.py | 14 ++++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 810daf0e0..68deb194c 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -445,7 +445,7 @@ def get_typical_section_params(self) -> dict: params["railing_type"] = self.railing_type.currentText() if hasattr(self, "railing_width") and self.railing_width.text(): - params["railing_width"] = float(self.railing_width.text()) * 1000 + params["railing_width"] = float(self.railing_width.text()) if hasattr(self, "railing_height") and self.railing_height.text(): params["railing_height"] = float(self.railing_height.text()) * 1000 @@ -1336,7 +1336,7 @@ def _set(widget, value: str): if geom: if "width" in geom: - _set(self.railing_width, f"{geom['width'] / 1000:.2f}") + _set(self.railing_width, f"{geom['width']:.0f}") if "height" in geom: _set(self.railing_height, f"{geom['height'] / 1000:.2f}") diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index bb2d9f08c..39ccf4feb 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -470,12 +470,14 @@ def _update_widget_size(self): else: vp_w, vp_h = base_width, base_height - new_width = int(max(vp_w, content_width_px + 50)) + content_width_px = base_width * self.zoom_level + + new_width = int(max(vp_w, content_width_px * 1.2)) # extra buffer new_height = int(max(vp_h, base_height * self.zoom_level)) - + self.setMinimumSize(new_width, new_height) self.resize(new_width, new_height) - + def resizeEvent(self, event): """Position zoom controls in top-right corner""" super().resizeEvent(event) @@ -1755,7 +1757,11 @@ def draw_cross_section(self, painter): # Geometry vector (true bracing direction) dx = x2 - x1 - thickness = 3.5 * (self.zoom_level / 1.2) + if is_preview: + # scale for preview to stay proportional to bridge size + thickness = max(1.2, (10 * scale * self.girder_visual_scale['web_thickness'])) * (self.zoom_level / 1.2) + else: + thickness = 3.5 * (self.zoom_level / 1.2) # ===== CROSS BRACING (\) ===== dy_bs = bottom_R - top_L From a7b6b30d0df2634f10601cb9709eaab3210fe3e3 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sat, 4 Apr 2026 02:03:30 +0530 Subject: [PATCH 106/225] Add CAD comments to additional_inputs.py for 2D cross-section render flow Add CAD comments to input_dock.py and typical_section_details.py for 2D cross-section --- .../desktop/ui/dialogs/additional_inputs.py | 58 ++++++++++++------- .../dialogs/tabs/typical_section_details.py | 20 +++++++ .../desktop/ui/docks/input_dock.py | 32 ++++++++-- 3 files changed, 85 insertions(+), 25 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 7acb2ef1b..01cd00c5f 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -446,11 +446,18 @@ def _apply_defaults(self): Data will be collected by template_page via get_all_values(). """ self.accept() - + + def get_all_values(self): """ - Return CAD-relevant numeric values from Additional Inputs. - This is consumed by InputDock / template_page. + @author: Faizan + Collect and return all CAD-relevant numeric parameters from the + Typical Section Details tab. + + Includes values such as girder spacing, deck thickness, crash barrier, + railing, median, wearing course, and cross bracing spacing. + + Used by InputDock to update and redraw the CAD cross-section. """ from osdagbridge.core.utils.common import ( @@ -685,26 +692,26 @@ def _build_sections_from_schema(self, parent_layout, sections, heading_style, la - # 2D CAD functions for tab enabling and disabling inside the addition inputs dialog ---> starts here - # Tab visibility helpers def _find_inner_tab_index(self, tab_widget, tab_name: str) -> int: - """Return the index of an inner tab by its label, or -1 if not found.""" + """ + @author: Faizan + Return the index of an inner tab by its label, or -1 if not found. + """ for i in range(tab_widget.count()): if tab_widget.tabText(i).strip().lower() == tab_name.strip().lower(): return i return -1 def apply_tab_visibility(self, footpath_value: str, include_median: str) -> None: - """Disable inner sub-tabs based on the current Input Dock selections. + """ + @author: Faizan + Enable or disable Railing and Median sub-tabs based on user selections. - Rules: - - Railing tab → disabled when footpath_value == "None" - (no footpath means no railing is needed) - - Median tab → disabled when include_median == "No" - (median excluded by the user) + - Railing tab is enabled only if footpath is present. + - Median tab is enabled only if median is included. - This method is called once right after the dialog is created, so the - disabled state is visible from the moment the user opens the dialog. + After updating tab visibility, the CAD cross-section preview is + refreshed to reflect the changes immediately. """ inner_tabs = self.typical_section_tab.input_tabs @@ -724,15 +731,21 @@ def apply_tab_visibility(self, footpath_value: str, include_median: str) -> None if hasattr(self.typical_section_tab, "_update_cad_preview"): self.typical_section_tab._update_cad_preview() - # 2D CAD functions for tab enabling and disabling inside the addition inputs dialog ---> ends here - def update_footpath_value(self, footpath_value): - """Update footpath value across all tabs""" + """ + @author: Faizan + Update the footpath configuration across UI and CAD preview. + + Propagates the selected footpath value from the Input Dock to the + Typical Section tab, ensuring the CAD cross-section preview updates + accordingly (e.g., both sides, left only, or none). + """ self.footpath_value = footpath_value self.typical_section_tab.update_footpath_value(footpath_value) + def update_project_location(self, location_data): """Update dependent tabs when project location changes""" if hasattr(self, "loading_tab"): @@ -800,10 +813,13 @@ def get_saved_data(self) -> dict: return self._last_saved_data.copy() def set_properties_data(self, data: dict) -> None: - """Restore properties data from a previous save. - - Args: - data: Dictionary containing properties to restore. + """ + @author: Faizan + Restore previously saved UI and CAD properties across all tabs. + + This method repopulates dialog fields (e.g., girder spacing, deck + thickness, barrier/railing/median settings) using saved data so that + the UI and CAD preview resume from the last known state. """ tabs = [ diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 68deb194c..a675a4e62 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -321,6 +321,15 @@ def init_ui(self): pass def _update_cad_preview(self): + """ + @author: Faizan + Collect all current UI field values — girder count, girder spacing, + deck overhang, deck thickness etc. + — convert units to millimetres where required, and push the assembled + params dict to CrossSectionCADWidget.update_params() to trigger an + immediate redraw of the 2D cross-section. + """ + if not hasattr(self, 'cad_preview'): return @@ -415,6 +424,17 @@ def _update_cad_preview(self): print(f"params: {params}") def get_typical_section_params(self) -> dict: + + """ + @author: Faizan + + Reads and returns the current Typical Section parameters from the UI, + including crash barrier, median, and railing properties, as a dictionary + (dimensions in mm). + + The returned values are consistent with those used in + _update_cad_preview(). + """ params = {} # ---- Crash Barrier ---- diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 4bc4d39df..564a7691c 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -210,7 +210,13 @@ def paintEvent(self, event): # Collect all the input dock data to update 2D Cad def get_all_input_values(self): - """Collect all input values from the input dock""" + + """ + @author: Faizan + Collect all input dock values needed by the homepage CAD cross-section. + Merges basic inputs with Additional Inputs dialog values and seeds + safe defaults for any CAD parameter not yet entered by the user. + """ input_values = {} # Helper function to safely get numeric value @@ -295,7 +301,12 @@ def get_numeric_value(widget): return input_values def emit_value_changed(self): - """Emit signal to notify that input values have changed""" + """ + @author: Faizan + Emit input_value_changed to trigger a homepage CAD redraw. + Connected to every basic input field's change signal so the + cross-section updates instantly on every user edit. + """ self.input_value_changed.emit() def toggle_input_dock(self): @@ -743,7 +754,15 @@ def _on_design_clicked(self) -> None: self._debug_dump_final_inputs(self._final_inputs_saved_list) def _show_additional_inputs_dialog(self, target_tab_name=None): - """Show Additional Inputs dialog and optionally focus a specific top-level tab.""" + """ + @author: Faizan + Create the AdditionalInputs dialog, passing current footpath, + carriageway width, and live homepage CAD state as initial_cad_state + so the dialog preview starts in sync with the homepage cross-section. + Restores previously saved dialog state and connects save_button to + _update_cad_from_additional_inputs. + """ + footpath_value = self.footpath_combo.currentText() if self.footpath_combo else "None" carriageway_width = self._get_effective_carriageway_width() @@ -814,7 +833,12 @@ def _show_additional_inputs_dialog(self, target_tab_name=None): self._update_cad_from_additional_inputs(dialog) def _update_cad_from_additional_inputs(self, dialog): - """Update homepage CAD using values from the Additional Inputs dialog.""" + """ + @author: Faizan + Read all values from the Additional Inputs dialog after save, merge + them into additional_input_values, and emit input_value_changed to + trigger a homepage CAD redraw with the updated parameters. + """ if not dialog: return values = dialog.get_all_values() From 32a10f6b568b28f159826322e572bfeda13180f3 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sat, 4 Apr 2026 21:40:57 +0530 Subject: [PATCH 107/225] Fix CAD preview zoom button functionality and added '+' and '-' symbol on the buttons --- .../dialogs/tabs/typical_section_details.py | 1 - .../desktop/ui/docks/cad_cross_section.py | 23 +++++++++++++------ .../desktop/ui/docks/cad_top_view.py | 8 +++++++ .../desktop/ui/docks/input_dock.py | 1 - 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index a675a4e62..009d3af04 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -421,7 +421,6 @@ def _update_cad_preview(self): - print(f"params: {params}") def get_typical_section_params(self) -> dict: diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 39ccf4feb..1746d8b8f 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -141,10 +141,12 @@ def setup_zoom_controls(self): self.zoom_in_btn.setStyleSheet(""" QPushButton { background-color: rgba(255, 255, 255, 200); + color: #333333; border: 1px solid #999; border-radius: 3px; font-size: 14px; font-weight: bold; + padding: 0; } QPushButton:hover { background-color: rgba(144, 175, 19, 200); @@ -159,10 +161,12 @@ def setup_zoom_controls(self): self.zoom_out_btn.setStyleSheet(""" QPushButton { background-color: rgba(255, 255, 255, 200); + color: #333333; border: 1px solid #999; border-radius: 3px; font-size: 14px; font-weight: bold; + padding: 0; } QPushButton:hover { background-color: rgba(144, 175, 19, 200); @@ -180,9 +184,11 @@ def setup_zoom_controls(self): self.zoom_reset_btn.setStyleSheet(""" QPushButton { background-color: rgba(255, 255, 255, 200); + color: #333333; font-size: 14px; font-weight: bold; border: None; + padding: 0; } QPushButton:hover { background-color: rgba(55, 55, 55, 50); @@ -260,8 +266,8 @@ def showEvent(self, event): super().showEvent(event) # Check if this is a preview is_preview = self.scale_factor < 1.0 if hasattr(self, 'scale_factor') else False - # Only show zoom buttons and center if NOT a preview - if not is_preview: + # Enable zoom buttons in regular view OR if it's the Additional Inputs preview (0.65) + if not is_preview or self.scale_factor == 0.65: # Position zoom buttons self._position_zoom_buttons() # DEFAULT: Fit to Screen on startup @@ -431,9 +437,9 @@ def _update_widget_size(self): # Check if this is a preview is_preview = self.scale_factor < 1.0 if hasattr(self, 'scale_factor') else False - if is_preview: - # For dialog previews, don't force a large minimum size - # The preview widget will conform to the dialog's layout + if is_preview and self.scale_factor != 0.65: + # For other previews (if any), don't force a large minimum size + # But for the 0.65 dialog preview, we allow resizing for zoom/scroll return base_width = 1000 @@ -533,6 +539,7 @@ def mouseMoveEvent(self, event): def register_hover_label(self, x, y, text, bg_color, text_color, font_size=9): """lables for catching hover hovering""" + font_size = max(1, font_size) font = QFont('Arial', font_size, QFont.Bold) metrics = self.fontMetrics() text_rect = metrics.boundingRect(text) @@ -568,9 +575,11 @@ def paintEvent(self, event): finally: painter.end() def draw_text_with_background(self, painter, x, y, text, - bg_color=QColor(255, 255, 255, 230), - text_color=QColor(0, 0, 0), font_size=9, bold=False): + bg_color=QColor(255, 255, 255, 230), + text_color=QColor(0, 0, 0), font_size=9, bold=False): + # defensive check: font size must be > 0 + font_size = max(1, font_size) font_weight = QFont.Bold if bold else QFont.Normal font = QFont('Arial', font_size, font_weight) painter.setFont(font) diff --git a/src/osdagbridge/desktop/ui/docks/cad_top_view.py b/src/osdagbridge/desktop/ui/docks/cad_top_view.py index 2ffdb235d..68cf81fef 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_top_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_top_view.py @@ -117,10 +117,12 @@ def setup_zoom_controls(self): self.zoom_in_btn.setStyleSheet(""" QPushButton { background-color: rgba(255, 255, 255, 200); + color: #333333; border: 1px solid #999; border-radius: 3px; font-size: 14px; font-weight: bold; + padding: 0; } QPushButton:hover { background-color: rgba(144, 175, 19, 200); @@ -134,10 +136,12 @@ def setup_zoom_controls(self): self.zoom_out_btn.setStyleSheet(""" QPushButton { background-color: rgba(255, 255, 255, 200); + color: #333333; border: 1px solid #999; border-radius: 3px; font-size: 14px; font-weight: bold; + padding: 0; } QPushButton:hover { background-color: rgba(144, 175, 19, 200); @@ -154,9 +158,11 @@ def setup_zoom_controls(self): self.zoom_reset_btn.setStyleSheet(""" QPushButton { background-color: rgba(255, 255, 255, 200); + color: #333333; font-size: 14px; font-weight: bold; border: None; + padding: 0; } QPushButton:hover { background-color: rgba(55, 55, 55, 50); @@ -484,6 +490,8 @@ def draw_text_with_background(self, painter, x, y, text, bg_color=QColor(255, 255, 255, 230), text_color=QColor(0, 0, 0), font_size=9, bold=False): + # defensive check: font size must be > 0 + font_size = max(1, font_size) font_weight = QFont.Bold if bold else QFont.Normal font = QFont('Arial', font_size, font_weight) painter.setFont(font) diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 564a7691c..95eb59b31 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -296,7 +296,6 @@ def get_numeric_value(widget): if hasattr(self, 'additional_input_values') and self.additional_input_values: input_values.update(self.additional_input_values) - print(f"input_values: {input_values}") return input_values From 413101d26fbd1dfa16b6dd5dc754e556c78dab0d Mon Sep 17 00:00:00 2001 From: Jatin1628 Date: Mon, 30 Mar 2026 21:56:23 +0530 Subject: [PATCH 108/225] Fixed merge conflicts --- .../ui/dialogs/tabs/design_options_tab.py | 100 +- .../ui/dialogs/tabs/support_conditions_tab.py | 61 +- .../ui/docks/support__conditions_cad.py | 1162 +++++++++++++++++ .../desktop/ui/docks/support_detail_cad.py | 550 ++++++++ 4 files changed, 1866 insertions(+), 7 deletions(-) create mode 100644 src/osdagbridge/desktop/ui/docks/support__conditions_cad.py create mode 100644 src/osdagbridge/desktop/ui/docks/support_detail_cad.py diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py index 6143055cc..202d7afc0 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py @@ -4,14 +4,19 @@ QFrame, QLabel, QScrollArea, - QLineEdit + QLineEdit, + QMessageBox, + QGridLayout, + QLineEdit, + QComboBox + ) from PySide6.QtCore import Qt from PySide6.QtGui import QDoubleValidator, QIntValidator from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( DESIGN_OPTIONS_SCHEMA, ) - +from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.girder_details_tab import _BoundsDialog class DesignOptionsTab(QWidget): """ @@ -23,6 +28,12 @@ class DesignOptionsTab(QWidget): def __init__(self, parent_dialog): super().__init__() self.parent_dialog = parent_dialog + self._reinforcement_bounds = { + "lower": 8.0, + "upper": 40.0, + "increment": 1.0 + } + self._reinforcement_values = [8, 10, 12, 16, 20, 25, 28, 32, 36, 40] self.init_ui() def save_values(self): @@ -32,13 +43,33 @@ def save_values(self): if field_name.endswith("_combo") or field_name.endswith("_input"): widget = getattr(self.parent_dialog, field_name, None) if widget: - from PySide6.QtWidgets import QLineEdit, QComboBox if isinstance(widget, QLineEdit): values[field_name] = widget.text() elif isinstance(widget, QComboBox): values[field_name] = widget.currentText() + + values["reinforcement_bounds"] = self._reinforcement_bounds + return values + def restore_properties(self, data: dict): + bounds = data.get("reinforcement_bounds") + + if bounds: + self._reinforcement_bounds = { + "lower": float(bounds.get("lower", 8.0)), + "upper": float(bounds.get("upper", 40.0)), + "increment": float(bounds.get("increment", 1.0)) # safe default + } + + STANDARD = [8, 10, 12, 16, 20, 25, 28, 32, 36, 40] + + self._reinforcement_values = [ + s for s in STANDARD + if self._reinforcement_bounds["lower"] <= s <= self._reinforcement_bounds["upper"] + ] + + def reset_defaults(self): """Reset Design Options fields to schema defaults.""" for card in DESIGN_OPTIONS_SCHEMA.get("cards", []): @@ -233,4 +264,65 @@ def validate_shear_stud_spacing(self): self, "Invalid Shear Stud Spacing", f"Shear Stud Spacing must be between {bottom} and {top}.", - ) \ No newline at end of file + ) + + def _open_reinforcement_bounds(self): + + dialog = BoundsDialogNoIncrement( + "Reinforcement Size", + self._reinforcement_bounds, + self + ) + + if dialog.exec(): + result = dialog.result_bounds() + if result: + result.pop("increment", None) + self._reinforcement_bounds = result + + STANDARD = [8, 10, 12, 16, 20, 25, 28, 32, 36, 40] + + self._reinforcement_values = [ + s for s in STANDARD + if result["lower"] <= s <= result["upper"] + ] + + print("Reinforcement:", self._reinforcement_values) + + + + +class BoundsDialogNoIncrement(_BoundsDialog): + def __init__(self, title, bounds, parent=None): + super().__init__(title, bounds, parent) + + self.increment_input.hide() + + layout = self.findChild(QGridLayout) + if layout: + item = layout.itemAtPosition(2, 0) + if item and item.widget(): + item.widget().hide() + + def _on_accept(self): + lower = self._parse_positive(self.lower_input.text()) + upper = self._parse_positive(self.upper_input.text()) + + if lower is None or upper is None: + QMessageBox.warning(self, "Invalid Bounds", "Please enter valid numbers.") + return + + if upper <= lower: + QMessageBox.warning(self, "Invalid Bounds", "Upper must be greater than lower.") + return + + self._result = { + "lower": float(lower), + "upper": float(upper), + "increment": None + } + self.accept() + + + + diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py index e16e028e7..a7d499928 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py @@ -1,6 +1,7 @@ -from PySide6.QtWidgets import QWidget, QVBoxLayout, QFrame +from PySide6.QtWidgets import QWidget, QVBoxLayout, QFrame, QHBoxLayout, QSizePolicy from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import SUPPORT_CONDITIONS_SCHEMA - +from osdagbridge.desktop.ui.docks.support__conditions_cad import SupportCADWidget +from osdagbridge.desktop.ui.docks.support_detail_cad import SupportDetailCADWidget class SupportConditionsTab(QWidget): @@ -96,6 +97,42 @@ def init_ui(self): main_layout.addWidget(card) + + cad_card = QFrame() + cad_card.setObjectName("support_card") + cad_card.setStyleSheet(""" + QFrame#support_card { + border: 1px solid #b2b2b2; + border-radius: 8px; + background-color: #ffffff; + } + """) + + cad_layout = QVBoxLayout(cad_card) + cad_layout.setContentsMargins(10, 10, 10, 10) + + cad_row = QHBoxLayout() + cad_row.setSpacing(12) + + self.left_cad = SupportCADWidget() + self.left_cad.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self.left_cad.setMinimumSize(300, 250) + cad_row.addWidget(self.left_cad, 1) + + self.right_cad = SupportDetailCADWidget() + self.right_cad.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self.right_cad.setMinimumSize(150, 200) + cad_row.addWidget(self.right_cad, 1) + + if hasattr(self.parent_dialog, "bearing_length_input"): + self.parent_dialog.bearing_length_input.textChanged.connect( + self.update_cad + ) + + cad_layout.addLayout(cad_row) + + main_layout.addWidget(cad_card) + main_layout.addStretch() def reset_defaults(self): @@ -107,4 +144,22 @@ def reset_defaults(self): self.parent_dialog.right_support_combo.setCurrentText("Roller") if hasattr(self.parent_dialog, "bearing_length_input"): - self.parent_dialog.bearing_length_input.setText("400") \ No newline at end of file + self.parent_dialog.bearing_length_input.setText("400") + + + def update_cad(self): + if hasattr(self.parent_dialog, "bearing_length_input"): + text = self.parent_dialog.bearing_length_input.text() + + try: + value = float(text) + except: + value = 400 + + if hasattr(self, "right_cad"): + self.right_cad.update_params({ + "bearing_length": value + }) + + + \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/docks/support__conditions_cad.py b/src/osdagbridge/desktop/ui/docks/support__conditions_cad.py new file mode 100644 index 000000000..638db74a4 --- /dev/null +++ b/src/osdagbridge/desktop/ui/docks/support__conditions_cad.py @@ -0,0 +1,1162 @@ +""" +Top View CAD Widget for OsdagBridge +Handles top/plan view rendering of bridge structures +Author: Arushi +""" + +import math +from PySide6.QtWidgets import QWidget, QPushButton, QScrollArea +from PySide6.QtCore import Qt, QRectF, QPointF +from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF +from .cad_cross_section import CrossSectionCADWidget + + +class SupportCADWidget(QWidget): + """Widget for drawing bridge top view""" + + def __init__(self, parent=None): + super().__init__(parent) + self.setMouseTracking(True) # enable mouse tracking for hover + + # top view hover tracking + self.top_view_hover_zones = [] # list of (QRectF, element_type) + self.hovered_top_view_element = None + + # Zoom level for this widget + self.zoom_level = 1.0 + + # Track scroll area for fixed button positioning + self.scroll_area = None + + # bridge parameters with default values (all in mm) + self.params = { + 'span_length': 35000, + 'num_girders': 4, + 'girder_spacing': 2750, + 'cross_bracing_spacing': 3500, + 'carriageway_width': 10500, + 'skew_angle': 0, + 'deck_thickness': 200, + 'footpath_width': 1500, + 'footpath_thickness': 200, + 'crash_barrier_width': 500, + 'railing_height': 1000, + 'footpath_config': 'both', + 'deck_overhang': 1000, + 'railing_width': 100, + 'median_present': False, + 'median_width': 1200, + } + + # girder dimensions (mm) + self.girder = { + 'depth': 500, + 'top_flange_width': 180, + 'top_flange_thickness': 17.2, + 'bottom_flange_width': 180, + 'bottom_flange_thickness': 17.2, + 'web_thickness': 10.2, + # Legacy support for symmetric sections + 'flange_width': 180, + 'flange_thickness': 17.2, + } + + # stiffener dimensions + self.stiffener = { + 'width': 84.9, + 'height': 465.6, + } + + self.girder_visual_scale = { + 'depth': 3.0, + 'flange_width': 3.75, + 'flange_thickness': 4.05, + 'web_thickness': 3.75, + } + + # crash barrier dimensions (mm) + self.crash_barrier = { + 'width': 500, + 'height': 800, + 'base_width': 300, + } + + # railing dimensions + self.railing = { + 'post_dia': 50, + 'height': 1000, + 'rail_count': 3, + 'width': 100, + } + + + def update_params(self, params): + self.params.update(params) + self.update() + + def mouseMoveEvent(self, event): + """Handle mouse hover for top view""" + pos = event.position() if hasattr(event, 'position') else event.pos() + + # top view hover logic + new_hovered = None + for rect, element_type in self.top_view_hover_zones: + if rect.contains(pos): + new_hovered = element_type + break + + if new_hovered != self.hovered_top_view_element: + self.hovered_top_view_element = new_hovered + self.update() + + def paintEvent(self, event): + # clear hover zones at start of each paint + self.top_view_hover_zones = [] + + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + painter.fillRect(self.rect(), QColor(255, 255, 255)) + + self.draw_top_view(painter) + + def draw_text_with_background(self, painter, x, y, text, + bg_color=QColor(255, 255, 255, 230), + text_color=QColor(0, 0, 0), font_size=9, bold=False): + + font_weight = QFont.Bold if bold else QFont.Normal + font = QFont('Arial', font_size, font_weight) + painter.setFont(font) + metrics = painter.fontMetrics() + + # breaking text in 2 to space be space + lines = text.split("\n") + + line_height = metrics.height() + max_width = max(metrics.boundingRect(line).width() for line in lines) + total_height = line_height * len(lines) + + padding = 2 + + # background rectangle + bg_rect = QRectF( + x - padding, + y - total_height - padding, + max_width + 2 * padding, + total_height + 2 * padding + ) + + painter.setPen(Qt.NoPen) + painter.setBrush(QBrush(bg_color)) + painter.drawRect(bg_rect) + + # Draw each text line + painter.setPen(QPen(text_color, 0.8)) + first_line_y = y - total_height + metrics.ascent() + + for i, line in enumerate(lines): + painter.drawText(int(x), int(first_line_y + i * line_height), line) + + + def draw_dimension_arrow(self, painter, x1, y1, x2, y2, text, horizontal=True, offset=0, text_offset=0, draw_extensions=True, extension_direction='down', extension_end_y=None): + """dimension line with arrows and text with extension lines""" + painter.setPen(QPen(QColor(0, 0, 0), 0.8)) + + painter.drawLine(QPointF(x1, y1), QPointF(x2, y2)) + + ext_len = 6 + if horizontal: + painter.drawLine(QPointF(x1, y1 - ext_len), QPointF(x1, y1 + ext_len)) + painter.drawLine(QPointF(x2, y2 - ext_len), QPointF(x2, y2 + ext_len)) + else: + painter.drawLine(QPointF(x1 - ext_len, y1), QPointF(x1 + ext_len, y1)) + painter.drawLine(QPointF(x2 - ext_len, y2), QPointF(x2 + ext_len, y2)) + + arrow_len = 6 # you can tune this, ratio stays correct + arrow_half = arrow_len / 3 + + painter.setBrush(QBrush(QColor(0, 0, 0))) + + if horizontal: + left_arrow = [ + QPointF(x1, y1), + QPointF(x1 + arrow_len, y1 - arrow_half), + QPointF(x1 + arrow_len, y1 + arrow_half) + ] + painter.drawPolygon(QPolygonF(left_arrow)) + + right_arrow = [ + QPointF(x2, y2), + QPointF(x2 - arrow_len, y2 - arrow_half), + QPointF(x2 - arrow_len, y2 + arrow_half) + ] + painter.drawPolygon(QPolygonF(right_arrow)) + + if draw_extensions: + painter.setPen(QPen(QColor(100, 100, 100), 0.8, Qt.DotLine)) + + if extension_end_y is not None: + # Draw extension lines to specified y coordinate + if extension_direction == 'up': + painter.drawLine(QPointF(x1, y1), QPointF(x1, extension_end_y)) + painter.drawLine(QPointF(x2, y2), QPointF(x2, extension_end_y)) + else: + painter.drawLine(QPointF(x1, y1), QPointF(x1, extension_end_y)) + painter.drawLine(QPointF(x2, y2), QPointF(x2, extension_end_y)) + else: + extension_length = 40 + if extension_direction == 'up': + painter.drawLine(QPointF(x1, y1), QPointF(x1, y1 - extension_length)) + painter.drawLine(QPointF(x2, y2), QPointF(x2, y2 - extension_length)) + else: + painter.drawLine(QPointF(x1, y1), QPointF(x1, y1 + extension_length)) + painter.drawLine(QPointF(x2, y2), QPointF(x2, y2 + extension_length)) + + painter.setPen(QPen(QColor(0, 0, 0), 0.8)) + + text_x = (x1 + x2) / 2 + text_y = y1 - 8 + text_offset if offset >= 0 else y1 + 15 + text_offset + + font = QFont('Arial', 9, QFont.Bold) + metrics = painter.fontMetrics() + text_width = metrics.boundingRect(text).width() + + self.draw_text_with_background(painter, text_x - text_width/2, text_y, text, + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + else: + top_arrow = [ + QPointF(x1, y1), + QPointF(x1 - arrow_half, y1 + arrow_len), + QPointF(x1 + arrow_half, y1 + arrow_len) + ] + + painter.drawPolygon(QPolygonF(top_arrow)) + + bottom_arrow = [ + QPointF(x2, y2), + QPointF(x2 - arrow_half, y2 - arrow_len), + QPointF(x2 + arrow_half, y2 - arrow_len) + ] + painter.drawPolygon(QPolygonF(bottom_arrow)) + + if draw_extensions: + painter.setPen(QPen(QColor(100, 100, 100), 0.8, Qt.DotLine)) + extension_length = 20 + + if extension_direction == 'left': + painter.drawLine(QPointF(x1, y1), QPointF(x1 - extension_length, y1)) + painter.drawLine(QPointF(x2, y2), QPointF(x2 - extension_length, y2)) + else: + painter.drawLine(QPointF(x1, y1), QPointF(x1 + extension_length, y1)) + painter.drawLine(QPointF(x2, y2), QPointF(x2 + extension_length, y2)) + + painter.setPen(QPen(QColor(0, 0, 0), 0.8)) + + text_x = x1 + (12 if offset >= 0 else -45) + text_offset + text_y = (y1 + y2) / 2 + 3 + + self.draw_text_with_background(painter, text_x, text_y, text, + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + + def draw_dimension_arrow_text_outside(self, painter, x1, y1, x2, y2, text, horizontal=True, + text_side='right', text_offset=15): + """Dimension line with arrows""" + painter.setPen(QPen(QColor(0, 0, 0), 0.8)) + + painter.drawLine(QPointF(x1, y1), QPointF(x2, y2)) + + ext_len = 6 + arrow_len = 6 + arrow_half = arrow_len / 3 + + painter.setBrush(QBrush(QColor(0, 0, 0))) + + if horizontal: + painter.drawLine(QPointF(x1, y1 - ext_len), QPointF(x1, y1 + ext_len)) + painter.drawLine(QPointF(x2, y2 - ext_len), QPointF(x2, y2 + ext_len)) + + left_arrow = [ + QPointF(x1, y1), + QPointF(x1 + arrow_len, y1 - arrow_half), + QPointF(x1 + arrow_len, y1 + arrow_half) + ] + painter.drawPolygon(QPolygonF(left_arrow)) + + right_arrow = [ + QPointF(x2, y2), + QPointF(x2 - arrow_len, y2 - arrow_half), + QPointF(x2 - arrow_len, y2 + arrow_half) + ] + painter.drawPolygon(QPolygonF(right_arrow)) + + if text_side == 'top': + text_x = (x1 + x2) / 2 + text_y = y1 - text_offset + else: + text_x = (x1 + x2) / 2 + text_y = y1 + text_offset + 10 + + font = QFont('Arial', 9, QFont.Bold) + painter.setFont(font) + metrics = painter.fontMetrics() + text_width = metrics.boundingRect(text).width() + + self.draw_text_with_background(painter, text_x - text_width/2, text_y, text, + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + else: + painter.drawLine(QPointF(x1 - ext_len, y1), QPointF(x1 + ext_len, y1)) + painter.drawLine(QPointF(x2 - ext_len, y2), QPointF(x2 + ext_len, y2)) + + top_arrow = [ + QPointF(x1, y1), + QPointF(x1 - arrow_half, y1 + arrow_len), + QPointF(x1 + arrow_half, y1 + arrow_len) + ] + + painter.drawPolygon(QPolygonF(top_arrow)) + + bottom_arrow = [ + QPointF(x2, y2), + QPointF(x2 - arrow_half, y2 - arrow_len), + QPointF(x2 + arrow_half, y2 - arrow_len) + ] + + painter.drawPolygon(QPolygonF(bottom_arrow)) + + text_y = (y1 + y2) / 2 + 3 + if text_side == 'left': + text_x = x1 - text_offset - 35 + else: + text_x = x1 + text_offset + + self.draw_text_with_background(painter, text_x, text_y, text, + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + + def draw_leader_arrow(self, painter, from_x, from_y, to_x, to_y, text, bg_color=QColor(255, 255, 255, 250), text_color=QColor(0, 0, 0)): + """a leader line with arrow pointing to component""" + painter.setPen(QPen(QColor(0, 0, 0), 1.0)) + painter.drawLine(QPointF(from_x, from_y), QPointF(to_x, to_y)) + + arrow_len = 9 + arrow_half = arrow_len / 3 + + angle = math.atan2(to_y - from_y, to_x - from_x) + + arrow_points = [ + QPointF(to_x, to_y), + QPointF( + to_x - arrow_len * math.cos(angle) + arrow_half * math.sin(angle), + to_y - arrow_len * math.sin(angle) - arrow_half * math.cos(angle) + ), + QPointF( + to_x - arrow_len * math.cos(angle) - arrow_half * math.sin(angle), + to_y - arrow_len * math.sin(angle) + arrow_half * math.cos(angle) + ) + ] + + + painter.setBrush(QBrush(QColor(0, 0, 0))) + painter.drawPolygon(QPolygonF(arrow_points)) + + self.draw_text_with_background(painter, from_x - 5, from_y - 5, text, bg_color, text_color, 9, True) + + def draw_clean_leader_line(self, painter, target_x, target_y, label_x, label_y, text, + text_color=QColor(0, 0, 0), line_color=QColor(100, 100, 100)): + """draw a clean leader line from target point to label with dotted line""" + # Draw dotted line from target to label + pen = QPen(line_color, 1.0, Qt.DotLine) + painter.setPen(pen) + painter.drawLine(QPointF(target_x, target_y), QPointF(label_x, label_y)) + + # Draw small circle at target point + painter.setPen(QPen(line_color, 1.5)) + painter.setBrush(Qt.NoBrush) + painter.drawEllipse(QPointF(target_x, target_y), 3, 3) + + # Draw text at label position + font = QFont('Arial', 9, QFont.Bold) + painter.setFont(font) + metrics = painter.fontMetrics() + text_width = metrics.boundingRect(text).width() + text_height = metrics.height() + + # Determine text alignment based on relative position + if label_x > target_x: + text_x = label_x + 5 + else: + text_x = label_x - text_width - 5 + + text_y = label_y + text_height / 4 + + # Draw text with background + self.draw_text_with_background(painter, text_x, text_y, text, + QColor(255, 255, 255, 240), text_color, 9, True) + + def compute_deck_total_width(self): + """Compute total deck width including median if present""" + carriageway = self.params.get('carriageway_width', 10500) + crash_barrier = self.params.get('crash_barrier_width', 500) + footpath_width = self.params.get('footpath_width', 1500) + fp_config = self.params.get('footpath_config', 'both') + median_present = self.params.get('median_present', False) + median_width = self.params.get('median_width', 1200) + + if fp_config == 'both': + num_fp = 2 + elif fp_config in ['left', 'right']: + num_fp = 1 + else: + num_fp = 0 + + # If median is present, we have full carriageway on each side + if median_present: + deck_total = (carriageway * 2 + # Full carriageway on each side + median_width + + 2 * crash_barrier + + num_fp * footpath_width) + else: + deck_total = (carriageway + + 2 * crash_barrier + + num_fp * footpath_width) + + return deck_total, num_fp + + def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck_top_y, scale): + """Draw two crash barriers for median, facing outward""" + + # Dimensions + TOTAL_HEIGHT = 900.0 + TOP_WIDTH = 175.0 + BOTTOM_WIDTH = 350.0 + BASE_VERTICAL = 100.0 + + h = TOTAL_HEIGHT * scale + top_w = TOP_WIDTH * scale + bottom_w = BOTTOM_WIDTH * scale + base_v = BASE_VERTICAL * scale + + median_width_px = median_end_x - median_start_x + + # Check if barriers fit + if bottom_w * 2 > median_width_px: + fit_scale = median_width_px / (bottom_w * 2) * 0.9 + h *= fit_scale + top_w *= fit_scale + bottom_w *= fit_scale + base_v *= fit_scale + + gap = median_width_px - 2 * bottom_w + if gap < 5: + gap = 5 + bottom_w = (median_width_px - gap) / 2 + ratio = bottom_w / (BOTTOM_WIDTH * scale) + h *= ratio + top_w *= ratio + base_v *= ratio + + y = deck_top_y + y_base_top = y - base_v + y_mid = y - (350 * scale * (h / (TOTAL_HEIGHT * scale))) # proportional + y_top = y - h + + # Offsets + scale_ratio = bottom_w / (BOTTOM_WIDTH * scale) if BOTTOM_WIDTH * scale > 0 else 1 + right_at_mid = 250 * scale * scale_ratio + left_at_top = 50 * scale * scale_ratio + right_at_top = 225 * scale * scale_ratio + + # LEFT barrier - front faces LEFT (toward left carriageway) + # This is the mirrored version + x_left = median_start_x + + points_left = [ + QPointF(x_left, y), # bottom-left + QPointF(x_left + bottom_w, y), # bottom-right + QPointF(x_left + bottom_w, y_base_top), # right after base + QPointF(x_left + bottom_w - left_at_top, y_top), # top-right + QPointF(x_left + bottom_w - right_at_top, y_top), # top-left + QPointF(x_left + bottom_w - right_at_mid, y_mid), # left at middle + QPointF(x_left, y_base_top), # left after base + ] + + painter.setBrush(QBrush(QColor(255, 210, 160))) + painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) + painter.drawPolygon(QPolygonF(points_left)) + + # RIGHT barrier - front faces RIGHT (toward right carriageway) + # This is the original orientation + x_right = median_end_x - bottom_w + + points_right = [ + QPointF(x_right, y), # bottom-left + QPointF(x_right + bottom_w, y), # bottom-right + QPointF(x_right + bottom_w, y_base_top), # right after base + QPointF(x_right + right_at_mid, y_mid), # right at middle + QPointF(x_right + right_at_top, y_top), # top-right + QPointF(x_right + left_at_top, y_top), # top-left + QPointF(x_right, y_base_top), # left after base + ] + + painter.setBrush(QBrush(QColor(255, 210, 160))) + painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) + painter.drawPolygon(QPolygonF(points_right)) + + def draw_top_view(self, painter): + """Draw top view with hover labels""" + # Clear top view hover zones + self.top_view_hover_zones = [] + + # Define colors + GIRDER_COLOR = CrossSectionCADWidget.GIRDER_COLOR + CROSS_BRACING_COLOR = CrossSectionCADWidget.CROSS_BRACING_COLOR + END_DIAPHRAGM_COLOR = CrossSectionCADWidget.END_DIAPHRAGM_COLOR + + + # Highlight colors + GIRDER_HIGHLIGHT = QColor(80, 140, 220) + CROSS_BRACING_HIGHLIGHT = QColor(255, 180, 90) + END_DIAPHRAGM_HIGHLIGHT = QColor(180, 120, 80) + BEARING_HIGHLIGHT = QColor(255, 80, 80) + + # Use base canvas dimensions for consistent drawing regardless of zoom + width = self.width() + height = self.height() + + # Reduced margins for better space utilization in split view + margin = 60 + available_width = width - 2 * margin + available_height = height - 2 * margin - 60 + + n = self.params['num_girders'] + + if n > 1: + total_girder_width = (n - 1) * self.params['girder_spacing'] + 2 * self.params['deck_overhang'] + else: + total_girder_width = 2 * self.params['deck_overhang'] + + total_model_width = total_girder_width + + span_scale = available_width / max(self.params['span_length'], 1.0) + width_scale = available_height / max(total_model_width, 1.0) + scale = min(span_scale, width_scale) # zoom_level already applied to width/height + + center_x = self.width() / 2 + center_y = self.height() / 2 + + # FIX: Negate the skew angle + skew_rad = math.radians(-self.params['skew_angle']) # CHANGED: Added negative sign + + girder_positions_y = [] + + if n > 1: + spacing_px = self.params['girder_spacing'] * scale + total_width_px = (n - 1) * spacing_px + start_y = center_y - total_width_px / 2 + for i in range(n): + y_pos = start_y + i * spacing_px + girder_positions_y.append(y_pos) + else: + girder_positions_y = [center_y] + + span_length_px = self.params['span_length'] * scale + start_x_base = center_x - span_length_px / 2 + end_x_base = center_x + span_length_px / 2 + + # Check hover states + girder_hovered = self.hovered_top_view_element == 'girder' + bracing_hovered = self.hovered_top_view_element == 'cross_bracing' + diaphragm_hovered = self.hovered_top_view_element == 'end_diaphragm' + bearing_hovered = self.hovered_top_view_element == 'bearing' + + # Draw girders + girder_color = GIRDER_HIGHLIGHT if girder_hovered else GIRDER_COLOR + girder_width = 4.5 if girder_hovered else 2.5 + painter.setPen(QPen(girder_color, girder_width)) + + girder_lines = [] + for y_pos in girder_positions_y: + y_offset_from_first = y_pos - girder_positions_y[0] + x_offset = y_offset_from_first * math.tan(skew_rad) + + x1 = start_x_base + x_offset + x2 = end_x_base + x_offset + + painter.drawLine(QPointF(x1, y_pos), QPointF(x2, y_pos)) + girder_lines.append({'y': y_pos, 'x1': x1, 'x2': x2}) + + # Register hover zone with larger padding for easier selection + hover_padding = 15 + self.top_view_hover_zones.append(( + QRectF(x1, y_pos - hover_padding, x2 - x1, hover_padding * 2), 'girder' + )) + + # Calculate bearing line positions + bearing_gap_px = max(30, 0.3 * self.params['girder_spacing'] * scale) + + top_extent = girder_positions_y[0] - bearing_gap_px + bottom_extent = girder_positions_y[-1] + bearing_gap_px if n > 1 else girder_positions_y[0] + bearing_gap_px + + left_bearing_base_x = start_x_base + right_bearing_base_x = end_x_base + + left_top_x = left_bearing_base_x + (top_extent - girder_positions_y[0]) * math.tan(skew_rad) + left_bottom_x = left_bearing_base_x + (bottom_extent - girder_positions_y[0]) * math.tan(skew_rad) + + right_top_x = right_bearing_base_x + (top_extent - girder_positions_y[0]) * math.tan(skew_rad) + right_bottom_x = right_bearing_base_x + (bottom_extent - girder_positions_y[0]) * math.tan(skew_rad) + + # Draw END DIAPHRAGMS + if n > 1: + diaphragm_color = END_DIAPHRAGM_HIGHLIGHT if diaphragm_hovered else END_DIAPHRAGM_COLOR + diaphragm_width = 4.0 if diaphragm_hovered else 3.0 + + # Use solid line with slight offset for double-line effect + painter.setBrush(Qt.NoBrush) + + # Left end diaphragm + for i in range(len(girder_positions_y) - 1): + y1 = girder_positions_y[i] + y2 = girder_positions_y[i + 1] + + y1_offset = y1 - girder_positions_y[0] + y2_offset = y2 - girder_positions_y[0] + + x1 = left_bearing_base_x + y1_offset * math.tan(skew_rad) + x2 = left_bearing_base_x + y2_offset * math.tan(skew_rad) + + # Draw double solid lines for end diaphragm + line_offset = 2 + dx = x2 - x1 + dy = y2 - y1 + length = math.sqrt(dx*dx + dy*dy) + if length > 0: + perp_x = -dy / length * line_offset + perp_y = dx / length * line_offset + + painter.setPen(QPen(diaphragm_color, diaphragm_width, Qt.SolidLine)) + painter.drawLine(QPointF(x1 + perp_x, y1 + perp_y), QPointF(x2 + perp_x, y2 + perp_y)) + painter.drawLine(QPointF(x1 - perp_x, y1 - perp_y), QPointF(x2 - perp_x, y2 - perp_y)) + + + # Register hover zone with larger padding + hover_padding = 20 + min_x, max_x = min(x1, x2) - hover_padding, max(x1, x2) + hover_padding + min_y, max_y = min(y1, y2), max(y1, y2) + self.top_view_hover_zones.append(( + QRectF(min_x, min_y, max_x - min_x, max_y - min_y), 'end_diaphragm' + )) + + # Right end diaphragm + for i in range(len(girder_positions_y) - 1): + y1 = girder_positions_y[i] + y2 = girder_positions_y[i + 1] + + y1_offset = y1 - girder_positions_y[0] + y2_offset = y2 - girder_positions_y[0] + + x1 = right_bearing_base_x + y1_offset * math.tan(skew_rad) + x2 = right_bearing_base_x + y2_offset * math.tan(skew_rad) + + # Draw double solid lines + line_offset = 2 + dx = x2 - x1 + dy = y2 - y1 + length = math.sqrt(dx*dx + dy*dy) + if length > 0: + perp_x = -dy / length * line_offset + perp_y = dx / length * line_offset + + painter.setPen(QPen(diaphragm_color, diaphragm_width, Qt.SolidLine)) + painter.drawLine(QPointF(x1 + perp_x, y1 + perp_y), QPointF(x2 + perp_x, y2 + perp_y)) + painter.drawLine(QPointF(x1 - perp_x, y1 - perp_y), QPointF(x2 - perp_x, y2 - perp_y)) + + + hover_padding = 20 + min_x, max_x = min(x1, x2) - hover_padding, max(x1, x2) + hover_padding + min_y, max_y = min(y1, y2), max(y1, y2) + self.top_view_hover_zones.append(( + QRectF(min_x, min_y, max_x - min_x, max_y - min_y), 'end_diaphragm' + )) + + # Draw center line of bearings + bearing_color = BEARING_HIGHLIGHT if bearing_hovered else QColor(255, 0, 0) + bearing_width = 2.5 if bearing_hovered else 1.5 + + pen = QPen(bearing_color, bearing_width, Qt.CustomDashLine) + pen.setDashPattern([8, 8]) + painter.setPen(pen) + + painter.drawLine(QPointF(left_top_x, top_extent), + QPointF(left_bottom_x, bottom_extent)) + painter.drawLine(QPointF(right_top_x, top_extent), + QPointF(right_bottom_x, bottom_extent)) + + # Register bearing hover zones with larger padding + hover_padding = 20 + self.top_view_hover_zones.append(( + QRectF(min(left_top_x, left_bottom_x) - hover_padding, top_extent, + abs(left_top_x - left_bottom_x) + hover_padding * 2, bottom_extent - top_extent), 'bearing' + )) + self.top_view_hover_zones.append(( + QRectF(min(right_top_x, right_bottom_x) - hover_padding, top_extent, + abs(right_top_x - right_bottom_x) + hover_padding * 2, bottom_extent - top_extent), 'bearing' + )) + + # Cross bracing + bracing_positions_x = [] + if self.params['cross_bracing_spacing'] > 0 and n > 1: + span_length = self.params['span_length'] + bracing_spacing = self.params['cross_bracing_spacing'] + + num_braces = max(1, int(math.ceil(span_length / bracing_spacing))) + actual_spacing_px = span_length_px / num_braces + + bracing_color = CROSS_BRACING_HIGHLIGHT if bracing_hovered else CROSS_BRACING_COLOR + bracing_width = 3.5 if bracing_hovered else 1.8 + painter.setPen(QPen(bracing_color, bracing_width)) + + for section in range(1, num_braces): + brace_x_base = start_x_base + section * actual_spacing_px + + for i in range(len(girder_positions_y) - 1): + y1 = girder_positions_y[i] + y2 = girder_positions_y[i + 1] + + y1_offset = y1 - girder_positions_y[0] + y2_offset = y2 - girder_positions_y[0] + + x1 = brace_x_base + y1_offset * math.tan(skew_rad) + x2 = brace_x_base + y2_offset * math.tan(skew_rad) + + painter.drawLine(QPointF(x1, y1), QPointF(x2, y2)) + + # Register hover zone with larger padding + hover_padding = 15 + min_x, max_x = min(x1, x2) - hover_padding, max(x1, x2) + hover_padding + min_y, max_y = min(y1, y2), max(y1, y2) + self.top_view_hover_zones.append(( + QRectF(min_x, min_y, max_x - min_x, max_y - min_y), 'cross_bracing' + )) + + if i == 0: + bracing_positions_x.append(brace_x_base) + + # Draw skew angle indicator + if abs(self.params['skew_angle']) > 0.1: + self.draw_skew_angle_indicator(painter, girder_lines[0]['x1'], girder_positions_y[0], + skew_rad, scale, left_bearing_base_x) + + # Add dimensions (always visible) and hover labels (only on hover) + self.add_clean_top_view_dimensions( + painter, girder_lines, girder_positions_y, scale, n, bracing_positions_x, + skew_rad, start_x_base, end_x_base, left_bearing_base_x, right_bearing_base_x, + top_extent, bottom_extent, left_top_x, right_top_x, + GIRDER_COLOR, CROSS_BRACING_COLOR, END_DIAPHRAGM_COLOR + ) + + # Notes removed for cleaner layout in split view + + + def draw_skew_angle_indicator(self, painter, girder_start_x, girder_y, skew_rad, scale, bearing_x): + """Draw skew angle indicator with arc and proper sign display""" + skew_deg = self.params['skew_angle'] # CHANGED + + if abs(skew_deg) < 0.1: + return + + # Reference point at the first girder on the bearing line + ref_x = bearing_x + ref_y = girder_y + + arc_radius = 70 + + # Draw vertical reference line (what 0 skew would look like) + painter.setPen(QPen(QColor(0, 0, 0), 1.5, Qt.DashLine)) + painter.drawLine(QPointF(ref_x, ref_y), QPointF(ref_x, ref_y - arc_radius - 20)) + + # Draw the actual skewed bearing line direction + # The skew causes the bearing line to rotate, so we show that angle + skewed_end_x = ref_x - arc_radius * math.sin(skew_rad) + skewed_end_y = ref_y - arc_radius * math.cos(skew_rad) + + painter.setPen(QPen(QColor(0, 0, 0), 2.0)) + painter.drawLine(QPointF(ref_x, ref_y), QPointF(skewed_end_x, skewed_end_y)) + + # Draw arc from vertical to skewed line + # Qt uses 1/16 degree units, angles measured counter-clockwise from 3 o'clock + # 90 degrees (in Qt) = pointing up + arc_rect = QRectF(ref_x - arc_radius, ref_y - arc_radius, arc_radius * 2, arc_radius * 2) + + # Start angle is 90 degrees (pointing up/vertical) + start_angle_deg = 90 + # Span angle is the skew angle (use original input value for arc direction) + span_angle_deg = skew_deg + + painter.setPen(QPen(QColor(0,0,0), 2.5)) + painter.drawArc(arc_rect, int(start_angle_deg * 16), int(-span_angle_deg * 16)) + + # Draw arrow at end of arc + arrow_angle_rad = math.radians(90 - skew_deg) + arrow_x = ref_x + arc_radius * math.cos(arrow_angle_rad) + arrow_y = ref_y - arc_radius * math.sin(arrow_angle_rad) + + # -------- SHARP SKEW ARROW (CAD STYLE) -------- + + # Arrow geometry (tuned for sharpness) + shaft_len = 12 # length of arrow shaft + head_len = 10 # length of arrow head + head_half_angle = math.radians(18) # narrow = sharp tip + + # Tangent direction (exact) + tangent_angle = arrow_angle_rad + + # Shaft start + shaft_start_x = arrow_x - shaft_len * math.cos(tangent_angle) + shaft_start_y = arrow_y + shaft_len * math.sin(tangent_angle) + + # Draw shaft + painter.setPen(QPen(QColor(0, 0, 0), 2.0)) + painter.drawLine( + QPointF(shaft_start_x, shaft_start_y), + QPointF(arrow_x, arrow_y) + ) + + # Arrowhead points + left_x = arrow_x - head_len * math.cos(tangent_angle - head_half_angle) + left_y = arrow_y + head_len * math.sin(tangent_angle - head_half_angle) + + right_x = arrow_x - head_len * math.cos(tangent_angle + head_half_angle) + right_y = arrow_y + head_len * math.sin(tangent_angle + head_half_angle) + + arrow_head = QPolygonF([ + QPointF(arrow_x, arrow_y), + QPointF(left_x, left_y), + QPointF(right_x, right_y) + ]) + + painter.setBrush(QBrush(QColor(0, 0, 0))) + painter.drawPolygon(arrow_head) + + + # Add angle label with proper sign - using ORIGINAL input value + # Position label near the arc + label_radius = arc_radius + 25 + label_angle_rad = math.radians(90 - skew_deg/2) # Middle of the arc + label_x = ref_x + label_radius * math.cos(label_angle_rad) + label_y = ref_y - label_radius * math.sin(label_angle_rad) + + # Format with explicit sign (+ or -) - showing ORIGINAL input value + if skew_deg >= 0: + angle_text = f"Skew = +{abs(skew_deg):.1f}°" + else: + angle_text = f"Skew = {skew_deg:.1f}°" + + # Adjust label position based on skew direction + if skew_deg > 0: + label_x -= 10 + else: + label_x -= 70 + + self.draw_text_with_background( + painter, label_x, label_y, + angle_text, + QColor(255, 255, 255, 240), + QColor(0, 0, 0), + 9, True) + + + def add_clean_top_view_dimensions(self, painter, girder_lines, girder_positions_y, + scale, n, bracing_positions, skew_rad, + start_x_base, end_x_base, left_bearing_base_x, right_bearing_base_x, + top_extent, bottom_extent, left_top_x, right_top_x, + girder_color, cross_bracing_color, end_diaphragm_color): + """Add dimensions (always visible) and hover labels (only on hover)""" + + if not girder_lines: + return + + # Get last girder for reference + last_girder_idx = len(girder_lines) - 1 + last_girder = girder_lines[last_girder_idx] + last_girder_y = last_girder['y'] + + y_offset_last = last_girder_y - girder_positions_y[0] + x_offset_last = y_offset_last * math.tan(skew_rad) + + dim_y_base = last_girder_y + 50 + + # SPAN LENGTH dimension (always visible) + dim_y1 = dim_y_base + x1_span = last_girder['x1'] + x2_span = last_girder['x2'] + span_m = self.params['span_length'] / 1000 + + self.draw_dimension_arrow_with_extensions_up( + painter, x1_span, dim_y1, x2_span, dim_y1, + f"Span Length = {span_m:.1f} m", last_girder_y + ) + + # BRACING SPACING dimension (always visible) + if self.params['cross_bracing_spacing'] > 0 and len(bracing_positions) > 1: + dim_y2 = dim_y_base + 15 + cb_spacing_m = self.params['cross_bracing_spacing'] / 1000 + + x1_brace = bracing_positions[0] + x_offset_last + x2_brace = bracing_positions[1] + x_offset_last + + self.draw_dimension_arrow_with_extensions_up( + painter, x1_brace, dim_y2, x2_brace, dim_y2, + f"Bracing Spacing = {cb_spacing_m:.2f} m", last_girder_y + ) + + # GIRDER SPACING dimension (always visible) + if n > 1: + y1 = girder_positions_y[0] + y2 = girder_positions_y[1] + + y1_offset = y1 - girder_positions_y[0] + y2_offset = y2 - girder_positions_y[0] + x1_at_end = end_x_base + y1_offset * math.tan(skew_rad) + 30 + x2_at_end = end_x_base + y2_offset * math.tan(skew_rad) + 30 + + gs_m = self.params['girder_spacing'] / 1000 + + # just the skewed dimension line + arrows, no text on it + self.draw_skewed_dimension_arrow( + painter, x1_at_end, y1, x2_at_end, y2, + "", # no inline text + skew_rad + ) + + # Girder Spacing label + value (3 lines) + label_x = max(x1_at_end, x2_at_end) + 25 + label_y = (y1 + y2) / 2 + + label_text = f"Girder\nSpacing\n= {gs_m:.2f} m" + + self.draw_text_with_background( + painter, label_x, label_y, + label_text, + QColor(255, 255, 255, 250), + QColor(0, 100, 0), 9, True + ) + + # CL OF BEARING labels - ALWAYS VISIBLE (moved outside hover condition) + label_y_bearing = top_extent - 15 + + left_label_x = left_top_x - 80 + right_label_x = right_top_x - 45 + + self.draw_text_with_background(painter, left_label_x, label_y_bearing, + "CL of Bearing", QColor(255, 255, 255, 250), + QColor(200, 0, 0), 9, True) + + self.draw_text_with_background(painter, right_label_x, label_y_bearing, + "CL of Bearing", QColor(255, 255, 255, 250), + QColor(200, 0, 0), 9, True) + + # HOVER LABELS (only shown when hovered) + + # 1. GIRDER label - show only when girder is hovered + if len(girder_lines) > 0 and self.hovered_top_view_element == 'girder': + first_girder = girder_lines[0] + target_x = (first_girder['x1'] + first_girder['x2']) / 2 + target_y = first_girder['y'] + + label_x = target_x + label_y = target_y - 30 + + self.draw_clean_leader_line(painter, target_x, target_y, label_x, label_y, + "Girder", girder_color, QColor(0, 100, 0)) + + # 2. CROSS BRACING label - show only when cross bracing is hovered + if n > 1 and len(bracing_positions) > 0 and self.hovered_top_view_element == 'cross_bracing': + brace_index = min(6, len(bracing_positions) - 1) + brace_x_base = bracing_positions[brace_index] + + y1 = girder_positions_y[0] + y2 = girder_positions_y[1] + + y1_offset = y1 - girder_positions_y[0] + y2_offset = y2 - girder_positions_y[0] + x1 = brace_x_base + y1_offset * math.tan(skew_rad) + x2 = brace_x_base + y2_offset * math.tan(skew_rad) + + target_x = (x1 + x2) / 2 + target_y = (y1 + y2) / 2 + + label_offset = 30 + label_x = target_x - label_offset * math.sin(skew_rad) + label_y = target_y - label_offset + + self.draw_clean_leader_line(painter, target_x, target_y, label_x, label_y, + "Cross Bracing", cross_bracing_color, QColor(200, 100, 0)) + + # 3. END DIAPHRAGM label - show only when end diaphragm is hovered + if n > 1 and len(girder_positions_y) >= 2 and self.hovered_top_view_element == 'end_diaphragm': + y1 = girder_positions_y[0] + y2 = girder_positions_y[1] + + y1_offset = y1 - girder_positions_y[0] + y2_offset = y2 - girder_positions_y[0] + x1 = left_bearing_base_x + y1_offset * math.tan(skew_rad) + x2 = left_bearing_base_x + y2_offset * math.tan(skew_rad) + + target_x = (x1 + x2) / 2 + target_y = (y1 + y2) / 2 + + label_offset = 10 + label_x = target_x - label_offset - 10 + label_y = target_y + 5 + + self.draw_clean_leader_line(painter, target_x, target_y, label_x, label_y, + "End Diaphragm", end_diaphragm_color, QColor(139, 69, 19)) + + def draw_dimension_arrow_with_extensions_up(self, painter, x1, y1, x2, y2, text, girder_y): + """Dimension line with arrows and extension lines going UP to girder level (dimension below)""" + painter.setPen(QPen(QColor(0, 0, 0), 0.8)) + + # Draw main dimension line + painter.drawLine(QPointF(x1, y1), QPointF(x2, y2)) + + # Draw extension lines going UP to girder (y1 > girder_y since dimension is below) + painter.setPen(QPen(QColor(100, 100, 100), 0.8, Qt.DotLine)) + painter.drawLine(QPointF(x1, y1), QPointF(x1, girder_y)) + painter.drawLine(QPointF(x2, y2), QPointF(x2, girder_y)) + + # Reset pen for arrows + painter.setPen(QPen(QColor(0, 0, 0), 0.8)) + + # Draw end ticks + ext_len = 6 + painter.drawLine(QPointF(x1, y1 - ext_len), QPointF(x1, y1 + ext_len)) + painter.drawLine(QPointF(x2, y2 - ext_len), QPointF(x2, y2 + ext_len)) + + # Draw arrows + arrow_len = 6 + arrow_half = arrow_len / 3 + + painter.setBrush(QBrush(QColor(0, 0, 0))) + + left_arrow = [ + QPointF(x1, y1), + QPointF(x1 + arrow_len, y1 - arrow_half), + QPointF(x1 + arrow_len, y1 + arrow_half) + ] + + painter.drawPolygon(QPolygonF(left_arrow)) + + right_arrow = [ + QPointF(x2, y2), + QPointF(x2 - arrow_len, y2 - arrow_half), + QPointF(x2 - arrow_len, y2 + arrow_half) + ] + + painter.drawPolygon(QPolygonF(right_arrow)) + + # Draw text BELOW the dimension line (above in terms of value since we add to y) + text_x = (x1 + x2) / 2 + text_y = y1 + 15 # Below the dimension line + + font = QFont('Arial', 9, QFont.Bold) + painter.setFont(font) + metrics = painter.fontMetrics() + text_width = metrics.boundingRect(text).width() + + self.draw_text_with_background(painter, text_x - text_width/2, text_y, text, + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + + + def draw_skewed_dimension_arrow(self, painter, x1, y1, x2, y2, text, skew_rad): + """Draw a dimension arrow that follows skew angle with horizontal text""" + painter.setPen(QPen(QColor(0, 0, 0), 0.8)) + + painter.drawLine(QPointF(x1, y1), QPointF(x2, y2)) + + dx = x2 - x1 + dy = y2 - y1 + length = math.sqrt(dx * dx + dy * dy) + + if length == 0: + return + + nx = dx / length + ny = dy / length + + px = -ny + py = nx + + tick_len = 5 + + painter.drawLine(QPointF(x1 - px * tick_len, y1 - py * tick_len), + QPointF(x1 + px * tick_len, y1 + py * tick_len)) + painter.drawLine(QPointF(x2 - px * tick_len, y2 - py * tick_len), + QPointF(x2 + px * tick_len, y2 + py * tick_len)) + + arrow_len = 6 + arrow_half = arrow_len / 3 + + painter.setBrush(QBrush(QColor(0, 0, 0))) + + angle1 = math.atan2(dy, dx) + arrow1 = [ + QPointF(x1, y1), + QPointF( + x1 + arrow_len * math.cos(angle1) - arrow_half * math.sin(angle1), + y1 + arrow_len * math.sin(angle1) + arrow_half * math.cos(angle1) + ), + QPointF( + x1 + arrow_len * math.cos(angle1) + arrow_half * math.sin(angle1), + y1 + arrow_len * math.sin(angle1) - arrow_half * math.cos(angle1) + ) + ] + + painter.drawPolygon(QPolygonF(arrow1)) + + angle2 = math.atan2(-dy, -dx) + arrow2 = [ + QPointF(x2, y2), + QPointF( + x2 + arrow_len * math.cos(angle2) - arrow_half * math.sin(angle2), + y2 + arrow_len * math.sin(angle2) + arrow_half * math.cos(angle2) + ), + QPointF( + x2 + arrow_len * math.cos(angle2) + arrow_half * math.sin(angle2), + y2 + arrow_len * math.sin(angle2) - arrow_half * math.cos(angle2) + ) + ] + + painter.drawPolygon(QPolygonF(arrow2)) + + # Draw text horizontally at midpoint, offset to the right + mid_x = (x1 + x2) / 2 + mid_y = (y1 + y2) / 2 + + text_x = mid_x + 8 + text_y = mid_y + 4 + + self.draw_text_with_background(painter, text_x, text_y, text, + QColor(255, 255, 255, 240), QColor(0, 0, 0), 9, True) + + def add_clean_top_view_notes(self, painter, height): + """Add professional notes""" + notes_y = height - 160 + + self.draw_text_with_background(painter, 30, notes_y + 5, + "NOTES:", QColor(240, 245, 250, 250), + QColor(0, 0, 0), 9, True) + + notes = [ + f"1. Green lines: Girders (Qty = {self.params['num_girders']})", + f"2. Orange lines: Cross bracing (ISA 100×100×8)", + f"3. Brown lines: End diaphragms at bearing locations", + f"4. Red dashed: Centerline of bearings", + f"5. Skew angle: {self.params['skew_angle']:.1f}°", + f"6. All dimensions in meters", + ] + + painter.setFont(QFont('Arial', 9)) + painter.setPen(QPen(QColor(40, 40, 40), 1)) + + for i, note in enumerate(notes): + note_y = notes_y + 22 + i * 13 + painter.drawText(32, note_y, note) \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/docks/support_detail_cad.py b/src/osdagbridge/desktop/ui/docks/support_detail_cad.py new file mode 100644 index 000000000..df6891de1 --- /dev/null +++ b/src/osdagbridge/desktop/ui/docks/support_detail_cad.py @@ -0,0 +1,550 @@ +""" +Support Detail CAD Widget for OsdagBridge +Draws the end bearing detail of a plate girder. +Layout is pixel-proportional to the widget size. +Only the bearing plate arrow width is driven by bearing_length. + +Author: OsdagBridge +""" + +import math +from PySide6.QtWidgets import QWidget +from PySide6.QtCore import Qt, QPointF, QRectF, QSize +from PySide6.QtGui import ( + QPainter, QPen, QColor, QFont, QBrush, QPolygonF, QPixmap +) + + +class SupportDetailCADWidget(QWidget): + """ + Dynamic 2D CAD of the plate girder end bearing detail. + Only `bearing_length` is dynamic; everything else is fixed. + """ + + DEFAULT_PARAMS = { + "bearing_length": 400, + } + + def __init__(self, parent=None): + super().__init__(parent) + self.params = dict(self.DEFAULT_PARAMS) + self.setMinimumSize(200, 250) + self.concrete_brush = self.create_concrete_brush() + + def sizeHint(self): + """Return preferred size for the widget.""" + return QSize(280, 300) + + def update_params(self, params: dict): + self.params.update(params) + self.update() + + def paintEvent(self, event): + painter = QPainter(self) + try: + painter.setRenderHint(QPainter.Antialiasing) + painter.fillRect(self.rect(), QColor(255, 255, 255)) + self._draw(painter) + finally: + painter.end() + + def _draw(self, painter: QPainter): + scale_factor = 0.75 + W = self.width() + H = self.height() + + # Scale down the drawing with vertical centering + horizontal_padding = W * (1 - scale_factor) / 2 + vertical_padding = H * (1 - scale_factor) / 2 + + painter.translate(horizontal_padding, vertical_padding) + painter.scale(scale_factor, scale_factor) + + bearing_len = max(50, min(600, float(self.params["bearing_length"]))) + + + cx = W * 0.32 + + #concrete block + conc_w = W * 0.3 + conc_left = cx - conc_w / 2 + conc_right = cx + conc_w / 2 + + #bearing plate + max_bp_px = conc_w * 0.90 + bp_px = max_bp_px * (bearing_len / 600.0) + bp_left = cx - bp_px / 2 + bp_right = cx + bp_px / 2 + + #flange lines — start from bearing plate left + fl_left = bp_left + fl_right = cx + W * 0.30 + + + + # Stiffener lines — narrow pair around centre + stiff_offset = W * 0.03 + stiff_half_px = W * 0.014 + # stiff_left = cx - stiff_half_px - stiff_offset + stiff_right = cx + stiff_half_px - stiff_offset + + # Zigzag x — fixed gap beyond flange right edge + zigzag_x = fl_right + + # Vertical positions as fractions of H + tf_top_y = H * 0.05 + tf_bot_y = tf_top_y + H * 0.025 + bf_top_y = tf_bot_y + H * 0.5 + bf_bot_y = bf_top_y + H * 0.025 + bearing_top_y = bf_bot_y + bearing_bot_y = bearing_top_y + H * 0.068 + conc_top_y = bearing_bot_y + conc_bot_y = conc_top_y + H * 0.20 + + zz_top = tf_top_y + H * 0.05 + zz_bot = bf_bot_y - H * 0.05 + + # Dimension arrow y — midpoint of the gap + + dim_y = conc_bot_y + H * 0.10 + + pen_main = QPen(QColor(0, 0, 0), 1) + + #Start Vertical line + painter.setPen(QPen(QColor(0, 0, 0), 1.2)) + + painter.drawLine( + QPointF(bp_left, tf_top_y), + QPointF(bp_left, bearing_bot_y) + ) + + #TOP FLANGE + painter.setPen(pen_main) + painter.setBrush(Qt.NoBrush) + painter.drawLine(QPointF(fl_left, tf_top_y), QPointF(fl_right, tf_top_y)) + painter.drawLine(QPointF(fl_left, tf_bot_y), QPointF(fl_right, tf_bot_y)) + + + #END BEARING STIFFENER + stiff_width = W * 0.02 + stiff_x = cx + + painter.drawRect(QRectF( + stiff_x - stiff_width/2, + tf_bot_y, + stiff_width, + bf_top_y - tf_bot_y + )) + + #BOTTOM FLANGE + painter.setPen(pen_main) + painter.drawLine(QPointF(fl_left, bf_top_y), QPointF(fl_right, bf_top_y)) + painter.drawLine(QPointF(fl_left, bf_bot_y), QPointF(fl_right, bf_bot_y)) + + # BEARING PLATE + bp_h = bearing_bot_y - bearing_top_y + bp_rect = QRectF(bp_left, bearing_top_y, bp_right - bp_left, bp_h) + + painter.save() + painter.setClipRect(bp_rect) + + # Hatch (bold grey) + painter.setPen(QPen(QColor(170, 170, 170), 2.2)) + + hatch_spacing = 7 + x_start = bp_left - bp_h + + while x_start < bp_right: + painter.drawLine( + QPointF(x_start, bearing_bot_y), + QPointF(x_start + bp_h, bearing_top_y) + ) + x_start += hatch_spacing + + painter.restore() + + painter.setPen(QPen(QColor(150, 150, 150), 2.4)) + painter.setBrush(Qt.NoBrush) + painter.drawRect(bp_rect) + + # CONCRETE BLOCK (TEXTURED) + painter.setPen(pen_main) + painter.setBrush(self.concrete_brush) + + painter.drawRect(QRectF( + conc_left, + conc_top_y, + conc_w, + conc_bot_y - conc_top_y + )) + + dash_pen = QPen(QColor(0, 0, 0), 1) + dash_pen.setStyle(Qt.DashLine) + painter.setPen(dash_pen) + + # left projection + painter.drawLine( + QPointF(bp_left, bearing_bot_y), + QPointF(bp_left, dim_y) + ) + + # right projection + painter.drawLine( + QPointF(bp_right, bearing_bot_y), + QPointF(bp_right, dim_y) + ) + + #DIMENSION ARROW + self._draw_dim_arrow(painter, bp_left, dim_y, bp_right, dim_y) + + # Bottom zigzag + ext = W * 0.05 + + # left extension + painter.drawLine(QPointF(conc_left - ext, conc_bot_y), + QPointF(conc_left - 1, conc_bot_y)) + + # zigzag + self._draw_h_zigzag( + painter, + conc_left + 1, + conc_bot_y, + conc_right, + conc_bot_y, + amplitude=12, + steps=2, + segments=2, + pen=QPen(QColor(0, 0, 0), 1) + ) + + # right extension + painter.drawLine( + QPointF(conc_right, conc_bot_y), + QPointF(conc_right + ext, conc_bot_y) + ) + + # 8. RIGHT-SIDE VERTICAL ZIGZAG + ext = W * 0.05 + + # top extension + painter.drawLine( + QPointF(zigzag_x, zz_top - ext), + QPointF(zigzag_x, zz_top) + ) + + # zigzag + self._draw_v_zigzag( + painter, + zigzag_x, + zz_top, + zz_bot, + amplitude=12, + steps=2, + segments=2, + pen=QPen(QColor(0, 0, 0), 1) + ) + + # bottom extension + painter.drawLine( + QPointF(zigzag_x, zz_bot), + QPointF(zigzag_x, zz_bot + ext) + ) + + #same arrow length for all labels + arrow_dx = W * 0.04 + arrow_dy = H * 0.08 + + #LABELS + stiff_mid_y = (tf_bot_y + bf_top_y) / 2 + + # End bearing stiffener — leader from upper-right toward stiffener mid + self._draw_leader( + painter, + stiff_right + arrow_dx, + stiff_mid_y - arrow_dy, + stiff_right + W * 0.02, + stiff_mid_y, + "End bearing\nstiffener" + ) + + # Bearing plate — label always anchored beyond zigzag to avoid overlap + bp_mid_y = (bearing_top_y + bearing_bot_y) / 2 + + self._draw_leader( + painter, + bp_right + arrow_dx, + bp_mid_y - arrow_dy, + bp_right, + bp_mid_y, + "Bearing plate" + ) + + mid_bp_x = (bp_left + bp_right) / 2 + + rect = QRectF( + mid_bp_x - 50, + dim_y + H * 0.03, + 100, + 30 + ) + + text = f"Bearing\nlength = {int(bearing_len)} mm" + + painter.setFont(QFont("Arial", 10)) + painter.drawText(rect, Qt.AlignCenter, "Bearing\nlength") + + # Plate girder — right of zigzag, above bearing plate label + pg_mid_y = (zz_top + zz_bot) / 2 + + self._draw_leader( + painter, + zigzag_x + arrow_dx, + pg_mid_y - arrow_dy, + zigzag_x, + pg_mid_y, + "Plate girder" + ) + + + def _draw_dim_arrow(self, painter, x1, y, x2, y2, text=None): + """Double-headed horizontal dimension arrow, no text.""" + painter.setPen(QPen(QColor(0, 0, 0), 1.0)) + painter.drawLine(QPointF(x1, y), QPointF(x2, y)) + tick = 4 + painter.drawLine(QPointF(x1, y - tick), QPointF(x1, y + tick)) + painter.drawLine(QPointF(x2, y - tick), QPointF(x2, y + tick)) + al, ah = 7.0, 7.0 / 3.0 + painter.setBrush(QBrush(QColor(0, 0, 0))) + painter.drawPolygon(QPolygonF([ + QPointF(x1, y), + QPointF(x1 + al, y - ah), + QPointF(x1 + al, y + ah), + ])) + painter.drawPolygon(QPolygonF([ + QPointF(x2, y), + QPointF(x2 - al, y - ah), + QPointF(x2 - al, y + ah), + ])) + + if text: + mid_x = (x1 + x2) / 2 + painter.setFont(QFont("Arial", 9)) + painter.drawText(QPointF(mid_x - 30, y - 5), text) + + def _draw_h_zigzag(self, painter, x1, y, x2, y2, + amplitude=12, steps=2, segments=2, pen=None): + """ + Draws: straight → zigzag → straight → zigzag → straight (horizontal) + """ + if pen: + painter.setPen(pen) + + total_w = x2 - x1 + + parts = [0.5, 0.6, 3.0, 0.6, 0.5] + + total_parts = sum(parts) + unit_w = total_w / total_parts + + current_x = x1 + + for i, part in enumerate(parts): + seg_w = part * unit_w + + if i % 2 == 0: + # S (straight) + painter.drawLine(QPointF(current_x, y), + QPointF(current_x + seg_w, y)) + else: + # Z (zigzag) + step_w = seg_w / steps + pts = [QPointF(current_x, y)] + + for j in range(steps): + pts.append(QPointF( + current_x + (j + 0.5) * step_w, + y + (amplitude if j % 2 == 0 else -amplitude) + )) + pts.append(QPointF( + current_x + (j + 1) * step_w, + y + )) + + for k in range(len(pts) - 1): + painter.drawLine(pts[k], pts[k + 1]) + + current_x += seg_w + + def _draw_v_zigzag(self, painter, x, y1, y2, + amplitude=12, steps=2, segments=2, pen=None): + """ + Draws: straight → zigzag → straight → zigzag → straight + segments = number of zigzag sections + """ + if pen: + painter.setPen(pen) + + total_h = y2 - y1 + + parts = [1.0, 0.6, 2.5, 0.6, 1.0] + + total_parts = sum(parts) + unit_h = total_h / total_parts + + current_y = y1 + + for i, part in enumerate(parts): + seg_h = part * unit_h + + if i % 2 == 0: + #STRAIGHT (S) + painter.drawLine( + QPointF(x, current_y), + QPointF(x, current_y + seg_h) + ) + + else: + #ZIGZAG (Z) + step_h = seg_h / steps + pts = [QPointF(x, current_y)] + + for j in range(steps): + pts.append(QPointF( + x + (amplitude if j % 2 == 0 else -amplitude), + current_y + (j + 0.5) * step_h + )) + pts.append(QPointF( + x, + current_y + (j + 1) * step_h + )) + + for k in range(len(pts) - 1): + painter.drawLine(pts[k], pts[k + 1]) + + current_y += seg_h + + def _draw_text_bg(self, painter, x, y, text, + bg=QColor(240, 240, 240, 230), + fg=QColor(0, 0, 0), + font_size=11, bold=False): + + font = QFont("Arial", 10) + font.setWeight(QFont.Normal) + painter.setFont(font) + + fm = painter.fontMetrics() + lines = text.split("\n") + lh = fm.height() + mw = max(fm.boundingRect(ln).width() for ln in lines) + th = lh * len(lines) + pad = 3 + + painter.setPen(QPen(fg, 1.0)) + for i, ln in enumerate(lines): + painter.drawText( + int(x), + int(y - th + fm.ascent() + i * lh), + ln + ) + + def _draw_leader(self, painter, from_x, from_y, to_x, to_y, text, + text_color=QColor(0, 0, 0)): + painter.setPen(QPen(QColor(0, 0, 0), 1)) + painter.drawLine(QPointF(from_x, from_y), QPointF(to_x, to_y)) + angle = math.atan2(to_y - from_y, to_x - from_x) + al, ah = 6.0, 2.0 + painter.setBrush(QBrush(QColor(0, 0, 0))) + painter.drawPolygon(QPolygonF([ + QPointF(to_x, to_y), + QPointF(to_x - al * math.cos(angle) + ah * math.sin(angle), + to_y - al * math.sin(angle) - ah * math.cos(angle)), + QPointF(to_x - al * math.cos(angle) - ah * math.sin(angle), + to_y - al * math.sin(angle) + ah * math.cos(angle)), + ])) + self._draw_text_bg(painter, from_x + 3, from_y + 4, text, + fg=text_color, font_size=15, bold=True) + + def create_concrete_brush(self): + import random, math + + + SIZE = 120 + DOT_COUNT = 100 + TRI_COUNT = 30 + rng = random.Random(42) # ← seeded RNG so tiles are deterministic + + def rand(): return rng.random() + def rr(a, b): return a + rand() * (b - a) + + # ── Draw one copy of the content, offset by (ox, oy) + def draw_content(p: QPainter, ox: float, oy: float): + p.save() + p.translate(ox, oy) + + # Fine aggregate — dots (sand / grit) + p.setPen(Qt.NoPen) + for _ in range(DOT_COUNT): + x, y = rr(0, SIZE), rr(0, SIZE) + r = rr(0.6, 2.2) + h = int(rr(40, 110)) + p.setBrush(QColor(h, h, h)) + p.drawEllipse(QPointF(x, y), r, r) + + # Coarse aggregate — irregular triangles + for _ in range(TRI_COUNT): + cx, cy = rr(0, SIZE), rr(0, SIZE) + base_angle = rr(0, 2 * math.pi) + h = int(rr(70, 140)) + sat = int(rr(0, 10)) + + poly = QPolygonF() + for v in range(3): + ang = base_angle + v * (2 * math.pi / 3) + rr(-0.45, 0.45) + dist = rr(SIZE * 0.032, SIZE * 0.072) + poly.append(QPointF(cx + math.cos(ang) * dist, + cy + math.sin(ang) * dist)) + + fill_col = QColor(h + sat, h, h - sat) + alpha = int(rr(64, 140)) # 25–55 % opacity stroke + stroke_col = QColor(20, 20, 20, alpha) + lw = rr(0.4, 0.8) + + p.setBrush(fill_col) + p.setPen(QPen(stroke_col, lw)) + p.drawPolygon(poly) + + # Micro-scratches — cement paste surface texture + p.setBrush(Qt.NoBrush) + scratch_count = int(SIZE * 0.3) + for _ in range(scratch_count): + x, y = rr(0, SIZE), rr(0, SIZE) + length = rr(2, SIZE * 0.08) + ang = rr(0, math.pi * 2) + alpha = int(rr(10, 31)) # 4–12 % opacity + p.setPen(QPen(QColor(90, 85, 80, alpha), rr(0.3, 0.7))) + p.drawLine(QPointF(x, y), + QPointF(x + math.cos(ang) * length, + y + math.sin(ang) * length)) + + p.restore() + + # ── Build tile pixmap + pixmap = QPixmap(SIZE, SIZE) + pixmap.fill(QColor(225, 225, 225)) + + p = QPainter(pixmap) + p.setRenderHint(QPainter.Antialiasing) + + # Draw all 9 offset copies so shapes that straddle any edge + # are completed on the opposite side → perfect seamless wrap + for dx in (-SIZE, 0, SIZE): + for dy in (-SIZE, 0, SIZE): + draw_content(p, dx, dy) + + # Very subtle wash to unify everything + p.setPen(Qt.NoPen) + p.setBrush(QColor(100, 95, 88, 10)) + p.drawRect(0, 0, SIZE, SIZE) + + p.end() + return QBrush(pixmap) \ No newline at end of file From 511af5ccfb813e5b93aadb2e7dd3dd2debc68e7c Mon Sep 17 00:00:00 2001 From: Jatin1628 Date: Wed, 1 Apr 2026 16:04:55 +0530 Subject: [PATCH 109/225] Fixed merge conflicts for additional inputs tab --- .../ui_fields_additional_input.py | 10 +- .../desktop/ui/dialogs/additional_inputs.py | 28 ++- .../ui/dialogs/tabs/design_options_tab.py | 176 ++++++++++++++---- 3 files changed, 164 insertions(+), 50 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py index a2d80bd7b..b1474ab20 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py @@ -1116,13 +1116,11 @@ { "fields": [ { - "id": "reinforcement_size", + "id": "reinforcement_bounds", "label": "Reinforcement Size", - "type": "combo", - "choices": [ "4 mm", "5 mm", "6 mm", "8 mm","10 mm","12 mm", "16 mm","20 mm","25 mm","28 mm","32 mm","36 mm","40 mm"], - "default": "12 mm", - "bind": "reinforcement_size_combo", - + "type": "button", + "text": "Set Bounds", + "bind": "reinforcement_bounds_btn" }, { "id": "reinforcement_material", diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 01cd00c5f..4f82ef463 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -23,10 +23,6 @@ from osdagbridge.desktop.ui.dialogs.tabs.design_options_tab import DesignOptionsTab from osdagbridge.desktop.ui.dialogs.tabs.design_options_cont_tab import DesignOptionsContTab from osdagbridge.desktop.ui.utils.combobox_utils import SmartCursorComboBoxView -from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import ( - DESIGN_OPTIONS_SCHEMA, - DESIGN_OPTIONS_CONT_SCHEMA, -) @@ -340,6 +336,30 @@ def _create_schema_widget(self, field_def, field_width): widget = QLabel(field_def.get("default", "")) widget.setFixedWidth(field_width) + elif field_type == "button": + widget = QPushButton(field_def.get("text", "Set Bounds")) + + widget.setFixedHeight(28) + widget.setFixedWidth(field_width) + + widget.setCursor(Qt.PointingHandCursor) + + widget.setStyleSheet(""" + QPushButton { + background-color: #ffffff; + border: 1px solid #b2b2b2; + border-radius: 6px; + padding: 4px; + } + QPushButton:hover { + background-color: #e6e6e6; + color: #2b2b2b; + } + QPushButton:pressed { + background-color: #d0d0d0; + } + """) + elif field_type in ["line", "number"]: widget = QLineEdit() diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py index 202d7afc0..b35e67fb7 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/design_options_tab.py @@ -1,6 +1,7 @@ from PySide6.QtWidgets import ( QWidget, QVBoxLayout, + QHBoxLayout, QFrame, QLabel, QScrollArea, @@ -17,6 +18,7 @@ DESIGN_OPTIONS_SCHEMA, ) from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.girder_details_tab import _BoundsDialog +from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType class DesignOptionsTab(QWidget): """ @@ -59,7 +61,7 @@ def restore_properties(self, data: dict): self._reinforcement_bounds = { "lower": float(bounds.get("lower", 8.0)), "upper": float(bounds.get("upper", 40.0)), - "increment": float(bounds.get("increment", 1.0)) # safe default + "increment": float(bounds.get("increment", 1.0)) } STANDARD = [8, 10, 12, 16, 20, 25, 28, 32, 36, 40] @@ -68,6 +70,12 @@ def restore_properties(self, data: dict): s for s in STANDARD if self._reinforcement_bounds["lower"] <= s <= self._reinforcement_bounds["upper"] ] + + combo = getattr(self.parent_dialog, "reinforcement_size_combo", None) + if combo: + combo.clear() + for val in self._reinforcement_values: + combo.addItem(f"{val} mm") def reset_defaults(self): @@ -88,6 +96,14 @@ def reset_defaults(self): elif isinstance(widget, QComboBox): widget.setCurrentText(str(default_value)) + self._reinforcement_bounds = { + "lower": 8.0, + "upper": 40.0, + "increment": 1.0 + } + + self._reinforcement_values = [8, 10, 12, 16, 20, 25, 28, 32, 36, 40] + def validate_tab(self): errors = [] @@ -136,30 +152,45 @@ def validate_tab(self): return list(set(errors)) def init_ui(self): - # Changed Bg color self.setStyleSheet("background-color: #f5f5f5;") - # Scroll Area Setup - scroll = QScrollArea() - scroll.setWidgetResizable(True) - scroll.setFrameShape(QFrame.NoFrame) - scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) - - scroll.setStyleSheet(""" - QScrollArea { - border: none; - background-color: #f5f5f5; + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(0, 0, 0, 0) + + scroll_area = QScrollArea() + scroll_area.setWidgetResizable(True) + scroll_area.setFrameShape(QFrame.NoFrame) + scroll_area.setStyleSheet("QScrollArea { background-color: #f5f5f5; border: none; }") + + scroll_content = QWidget() + scroll_content.setStyleSheet("background-color: #f5f5f5;") + + page_layout = QVBoxLayout(scroll_content) + page_layout.setContentsMargins(12, 12, 12, 12) + page_layout.setSpacing(12) + + + content_row = QHBoxLayout() + content_row.setSpacing(16) + + left_card = QFrame() + left_card.setStyleSheet(""" + QFrame { + border: 1px solid #b2b2b2; + border-radius: 10px; + background-color: #ffffff; } """) - # Scroll content container - scroll_content = QWidget() - scroll_content.setStyleSheet("background-color: #ffffff;") + left_card_layout = QVBoxLayout(left_card) + left_card_layout.setContentsMargins(0, 0, 0, 0) + + content_wrapper = QWidget() + content_wrapper.setStyleSheet("background-color: #ffffff;") - main_layout = QVBoxLayout(scroll_content) - main_layout.setContentsMargins(12, 12, 12, 12) - main_layout.setSpacing(12) + left_layout = QVBoxLayout(content_wrapper) + left_layout.setContentsMargins(14, 14, 14, 14) + left_layout.setSpacing(12) card_style = """ QFrame { @@ -173,21 +204,17 @@ def init_ui(self): font-size: 12px; font-weight: 700; color: #2b2b2b; - background: transparent; border: none; """ label_style = """ font-size: 11px; color: #3a3a3a; - background: transparent; border: none; """ default_field_width = 150 - - # Built Cards from Schema for card_schema in DESIGN_OPTIONS_SCHEMA.get("cards", []): card = QFrame() @@ -199,7 +226,7 @@ def init_ui(self): card_title = card_schema.get("title") if card_title: - title_lbl = QLabel(f"{card_title}") + title_lbl = QLabel(card_title) title_lbl.setStyleSheet(heading_style) card_layout.addWidget(title_lbl) @@ -212,17 +239,60 @@ def init_ui(self): card_schema.get("field_width", default_field_width), ) - main_layout.addWidget(card) + left_layout.addWidget(card) + + left_layout.addStretch() + left_card_layout.addWidget(content_wrapper) + + right_card = QFrame() + right_card.setStyleSheet(""" + QFrame { + border: 1px solid #9c9c9c; + border-radius: 10px; + background-color: #d4d4d4; + } + """) + right_card.setMinimumWidth(260) + + right_layout = QVBoxLayout(right_card) + right_layout.setContentsMargins(16, 16, 16, 16) + right_layout.setSpacing(10) + + desc = DESIGN_OPTIONS_SCHEMA.get("description", {}) + + desc_title = QLabel(desc.get("title", "Description Box")) + desc_title.setAlignment(Qt.AlignCenter) + desc_title.setStyleSheet(""" + font-size: 12px; + font-weight: 700; + color: #000; + border: none; + """) + + desc_text = QLabel(desc.get("text", " ")) + desc_text.setWordWrap(True) + desc_text.setStyleSheet(""" + font-size: 11px; + color: #4b4b4b; + border: none; + """) + + right_layout.addWidget(desc_title) + right_layout.addWidget(desc_text) + right_layout.addStretch() + + content_row.addWidget(left_card, 3) + content_row.addWidget(right_card, 2) - # Push everything up - main_layout.addStretch() + page_layout.addLayout(content_row) - # Final scroll wiring - scroll.setWidget(scroll_content) + scroll_area.setWidget(scroll_content) + main_layout.addWidget(scroll_area) - outer_layout = QVBoxLayout(self) - outer_layout.setContentsMargins(0, 0, 0, 0) - outer_layout.addWidget(scroll) + if hasattr(self.parent_dialog, "reinforcement_bounds_btn"): + self.parent_dialog.reinforcement_bounds_btn.clicked.connect( + self._open_reinforcement_bounds + ) self._connect_validations() @@ -277,8 +347,11 @@ def _open_reinforcement_bounds(self): if dialog.exec(): result = dialog.result_bounds() if result: - result.pop("increment", None) - self._reinforcement_bounds = result + self._reinforcement_bounds = { + "lower": result["lower"], + "upper": result["upper"], + "increment": 1.0 + } STANDARD = [8, 10, 12, 16, 20, 25, 28, 32, 36, 40] @@ -287,7 +360,11 @@ def _open_reinforcement_bounds(self): if result["lower"] <= s <= result["upper"] ] - print("Reinforcement:", self._reinforcement_values) + combo = getattr(self.parent_dialog, "reinforcement_size_combo", None) + if combo: + combo.clear() + for val in self._reinforcement_values: + combo.addItem(f"{val} mm") @@ -305,22 +382,41 @@ def __init__(self, title, bounds, parent=None): item.widget().hide() def _on_accept(self): + errors = [] + lower = self._parse_positive(self.lower_input.text()) upper = self._parse_positive(self.upper_input.text()) if lower is None or upper is None: - QMessageBox.warning(self, "Invalid Bounds", "Please enter valid numbers.") - return + errors.append("Please enter valid numeric values.") - if upper <= lower: - QMessageBox.warning(self, "Invalid Bounds", "Upper must be greater than lower.") + else: + if lower < 8: + errors.append("Lower bound cannot be less than 8 mm.") + + if upper > 40: + errors.append("Upper bound cannot be greater than 40 mm.") + + if upper <= lower: + errors.append("Upper bound must be greater than lower bound.") + + if errors: + message = "\n\n".join(f"• {err}" for err in errors) + + CustomMessageBox( + title="Validation Errors", + text=message, + buttons=["OK"], + dialogType=MessageBoxType.Warning, + ).exec() return self._result = { "lower": float(lower), "upper": float(upper), - "increment": None + "increment": 1.0 } + self.accept() From 920a6b4f320a1a6106bd01feb5e3dbb2c69744bb Mon Sep 17 00:00:00 2001 From: Jatin1628 Date: Sat, 28 Feb 2026 19:37:10 +0530 Subject: [PATCH 110/225] created files for seperate tabs in additional inputs section Made changes in schema for setting ranges and defaults Made changes to additional inputs files to add new tabs minor label changes label chnges fixed the Save button not working issue minor changes created files for seperate tabs in additional inputs section Made changes to additional inputs files to add new tabs fixed the Save button not working issue Change the folder of the tabs in additional input section Changed validation for errors and made single popup for all errors Changed the schema of input fields according to pdf and requirements Changing of the tabs directory and removing the unneccessary files Rebase complete --- .../desktop/ui/dialogs/additional_inputs.py | 47 +++++++++++++++++++ .../ui/dialogs/tabs/support_conditions_tab.py | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 4f82ef463..92ebc66ca 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -18,6 +18,11 @@ from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.desktop.ui.dialogs.tabs.typical_section_details import TypicalSectionDetailsTab, show_warning from osdagbridge.desktop.ui.dialogs.tabs.section_properties_tab import SectionPropertiesTab +from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.girder_details_tab import GirderDetailsTab +from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.stiffener_details_tab import StiffenerDetailsTab +from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.cross_bracing_details_tab import CrossBracingDetailsTab +from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.end_diaphragm_details_tab import EndDiaphragmDetailsTab +from osdagbridge.desktop.ui.dialogs.tabs.custom_vehicle_dialog import CustomVehicleDialog from osdagbridge.desktop.ui.dialogs.tabs.loading_tab import LoadingTab from osdagbridge.desktop.ui.dialogs.tabs.support_conditions_tab import SupportConditionsTab from osdagbridge.desktop.ui.dialogs.tabs.design_options_tab import DesignOptionsTab @@ -26,6 +31,48 @@ +# ================================================================================= +# CUSTOM COMBOBOX VIEW WITH SMART CURSOR HANDLING +# ================================================================================= + +class ComboBoxItemDelegate(QStyledItemDelegate): + """Delegate that renders disabled items in grey.""" + + def paint(self, painter, option, index): + item = index.model().item(index.row()) + if item and not item.isEnabled(): + # For disabled items, draw background and text in grey + painter.fillRect(option.rect, option.palette.base()) + painter.setPen(QColor(120, 120, 120)) # Grey color + text = index.data() + painter.drawText(option.rect, Qt.AlignLeft | Qt.AlignVCenter, f" {text}") + else: + super().paint(painter, option, index) + +class SmartCursorComboBoxView(QListView): + """Custom list view for combobox that shows pointing hand for enabled items, + forbidden cursor for disabled items, and renders disabled items in grey.""" + + def __init__(self): + super().__init__() + self.setItemDelegate(ComboBoxItemDelegate()) + + def mouseMoveEvent(self, event): + index = self.indexAt(event.pos()) + if index.isValid(): + item = self.model().item(index.row()) + if item and not item.isEnabled(): + self.setCursor(Qt.ForbiddenCursor) + else: + self.setCursor(Qt.PointingHandCursor) + else: + self.setCursor(Qt.PointingHandCursor) + super().mouseMoveEvent(event) + + def leaveEvent(self, event): + self.setCursor(Qt.ArrowCursor) + super().leaveEvent(event) + # ================================================================================= # MAIN IMPLEMENTATION # ================================================================================= diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py index a7d499928..d11a91ff2 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py @@ -162,4 +162,4 @@ def update_cad(self): }) - \ No newline at end of file + From b5ddb0f18edfe732a5d7fd6a363fb57ae1213e2e Mon Sep 17 00:00:00 2001 From: Jatin1628 Date: Wed, 4 Mar 2026 17:17:39 +0530 Subject: [PATCH 111/225] Removed uneccessary code from this file Fixed the coming soon error when clicking defaults created seperate cards for support conditions and bearing length Changed Structure of additional inputs and make seperate files for utils Made changes in schema to make default values upto two decimal Made Cleaner structure for additional inputs and shifted defaults to respective fields Removed validation.py and moved validation to seperate tabs minor fixes to additional inputs Fixed the inputs saved issue --- .../desktop/ui/dialogs/additional_inputs.py | 40 ------------------- 1 file changed, 40 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 92ebc66ca..329d79262 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -31,47 +31,7 @@ -# ================================================================================= -# CUSTOM COMBOBOX VIEW WITH SMART CURSOR HANDLING -# ================================================================================= -class ComboBoxItemDelegate(QStyledItemDelegate): - """Delegate that renders disabled items in grey.""" - - def paint(self, painter, option, index): - item = index.model().item(index.row()) - if item and not item.isEnabled(): - # For disabled items, draw background and text in grey - painter.fillRect(option.rect, option.palette.base()) - painter.setPen(QColor(120, 120, 120)) # Grey color - text = index.data() - painter.drawText(option.rect, Qt.AlignLeft | Qt.AlignVCenter, f" {text}") - else: - super().paint(painter, option, index) - -class SmartCursorComboBoxView(QListView): - """Custom list view for combobox that shows pointing hand for enabled items, - forbidden cursor for disabled items, and renders disabled items in grey.""" - - def __init__(self): - super().__init__() - self.setItemDelegate(ComboBoxItemDelegate()) - - def mouseMoveEvent(self, event): - index = self.indexAt(event.pos()) - if index.isValid(): - item = self.model().item(index.row()) - if item and not item.isEnabled(): - self.setCursor(Qt.ForbiddenCursor) - else: - self.setCursor(Qt.PointingHandCursor) - else: - self.setCursor(Qt.PointingHandCursor) - super().mouseMoveEvent(event) - - def leaveEvent(self, event): - self.setCursor(Qt.ArrowCursor) - super().leaveEvent(event) # ================================================================================= # MAIN IMPLEMENTATION From e65235e3abcda5f7892aad4a89b47d5e5ca3a615 Mon Sep 17 00:00:00 2001 From: Jatin1628 Date: Fri, 10 Apr 2026 21:29:58 +0530 Subject: [PATCH 112/225] changed file structure of support conditions CADs --- .../tabs/drawings/support_conditions_cad.py} | 2 +- .../ui/{docks => dialogs/tabs/drawings}/support_detail_cad.py | 0 .../desktop/ui/dialogs/tabs/support_conditions_tab.py | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/osdagbridge/desktop/ui/{docks/support__conditions_cad.py => dialogs/tabs/drawings/support_conditions_cad.py} (99%) rename src/osdagbridge/desktop/ui/{docks => dialogs/tabs/drawings}/support_detail_cad.py (100%) diff --git a/src/osdagbridge/desktop/ui/docks/support__conditions_cad.py b/src/osdagbridge/desktop/ui/dialogs/tabs/drawings/support_conditions_cad.py similarity index 99% rename from src/osdagbridge/desktop/ui/docks/support__conditions_cad.py rename to src/osdagbridge/desktop/ui/dialogs/tabs/drawings/support_conditions_cad.py index 638db74a4..6a2b608b3 100644 --- a/src/osdagbridge/desktop/ui/docks/support__conditions_cad.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/drawings/support_conditions_cad.py @@ -8,7 +8,7 @@ from PySide6.QtWidgets import QWidget, QPushButton, QScrollArea from PySide6.QtCore import Qt, QRectF, QPointF from PySide6.QtGui import QPainter, QPen, QColor, QFont, QBrush, QPolygonF -from .cad_cross_section import CrossSectionCADWidget +from ....docks.cad_cross_section import CrossSectionCADWidget class SupportCADWidget(QWidget): diff --git a/src/osdagbridge/desktop/ui/docks/support_detail_cad.py b/src/osdagbridge/desktop/ui/dialogs/tabs/drawings/support_detail_cad.py similarity index 100% rename from src/osdagbridge/desktop/ui/docks/support_detail_cad.py rename to src/osdagbridge/desktop/ui/dialogs/tabs/drawings/support_detail_cad.py diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py index d11a91ff2..ecddf8a2c 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py @@ -1,7 +1,7 @@ from PySide6.QtWidgets import QWidget, QVBoxLayout, QFrame, QHBoxLayout, QSizePolicy from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import SUPPORT_CONDITIONS_SCHEMA -from osdagbridge.desktop.ui.docks.support__conditions_cad import SupportCADWidget -from osdagbridge.desktop.ui.docks.support_detail_cad import SupportDetailCADWidget +from osdagbridge.desktop.ui.dialogs.tabs.drawings.support_conditions_cad import SupportCADWidget +from osdagbridge.desktop.ui.dialogs.tabs.drawings.support_detail_cad import SupportDetailCADWidget class SupportConditionsTab(QWidget): From 6317e46e0214432c74dde6ceffe151ae9c9056dc Mon Sep 17 00:00:00 2001 From: Jatin1628 Date: Fri, 10 Apr 2026 21:30:24 +0530 Subject: [PATCH 113/225] changed file structure of support conditions CADs --- .../desktop/ui/dialogs/tabs/support_conditions_tab.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py index ecddf8a2c..d737694d1 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/support_conditions_tab.py @@ -36,6 +36,8 @@ def validate_tab(self): value = float(text) if value <= 0: errors.append("Bearing Length must be greater than 0.") + elif value > 600: + errors.append("Bearing Length should not be greater than 600.") except ValueError: errors.append("Bearing Length must be a valid number.") From 3749ce757f76cf62088a9361717f6a48b69a3213 Mon Sep 17 00:00:00 2001 From: Sreejesh06 Date: Wed, 1 Apr 2026 17:58:22 +0530 Subject: [PATCH 114/225] feat(ui): refine additional-inputs CAD section property dialogs - unify and polish section-properties UI for girder, stiffener, cross-bracing, and end-diaphragm tabs\n- improve dialog interaction flow and member-properties tab behavior\n- update preview/placeholder viewer wiring and related tab integration\n- preserve latest upstream loading/design updates by rebasing onto Aditya-Donde/dev refactor: standardize terminology from "Customized" to "Custom" across multiple components refactored girder details to have generalisation Generalised Girder and Stiffner Refactor GirderDetailsTab and remove unused schema_builder module - Updated default member length from 30.0 to 25. - Enhanced thickness value retrieval to include SAIL_APPROVED_THICKNESS_VALUES as a fallback. - Improved segment action widget layout and styling, including icon integration for add/remove buttons. - Introduced a caching mechanism for segment action icons to optimize rendering. - Renamed _default_dimension_bounds to _default_dimension_bounds_for_field for clarity. - Adjusted field width settings for better UI consistency. - Deleted the unused schema_builder.py module to streamline the codebase. --- .../plate_girder/plategirderbridge.py | 6 + .../ui_fields_additional_input.py | 549 +++++- src/osdagbridge/core/utils/common.py | 34 +- .../desktop/ui/dialogs/additional_inputs.py | 39 +- .../ui/dialogs/tabs/optimizable_field.py | 2 +- .../ui/dialogs/tabs/section_properties_tab.py | 16 +- .../cross_bracing_details_tab.py | 845 +++++++-- .../end_diaphragm_details_tab.py | 1043 ++++++++--- .../section_properties/girder_details_tab.py | 1655 +++++++++++------ .../stiffener_details_tab.py | 1077 +++++++++-- .../ui/widgets/placeholder_section_preview.py | 4 +- .../desktop/ui/widgets/section_viewer.py | 50 +- 12 files changed, 4096 insertions(+), 1224 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index fad6604b1..1fc1d5e15 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -37,9 +37,12 @@ from .ui_fields import FrontendData from .ui_fields_additional_input import ( CRASH_BARRIER_TAB_SCHEMA, + CROSS_BRACING_DETAILS_SCHEMA, DESIGN_OPTIONS_CONT_SCHEMA, DESIGN_OPTIONS_SCHEMA, + END_DIAPHRAGM_DETAILS_SCHEMA, GIRDER_DETAILS_SCHEMA, + STIFFENER_DETAILS_SCHEMA, LANE_DETAILS_TAB_SCHEMA, LAYOUT_TAB_SCHEMA, MEDIAN_TAB_SCHEMA, @@ -146,6 +149,9 @@ def get_additional_input_schema() -> Dict[str, Dict[str, Any]]: "design_options": DESIGN_OPTIONS_SCHEMA, "design_options_cont": DESIGN_OPTIONS_CONT_SCHEMA, "girder_details": GIRDER_DETAILS_SCHEMA, + "stiffener_details": STIFFENER_DETAILS_SCHEMA, + "cross_bracing_details": CROSS_BRACING_DETAILS_SCHEMA, + "end_diaphragm_details": END_DIAPHRAGM_DETAILS_SCHEMA, } def _footpath_count(self) -> int: diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py index b1474ab20..5ee3c662c 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py @@ -11,16 +11,24 @@ DEFAULT_RAILING_WIDTH, MIN_FOOTPATH_WIDTH, MIN_RAILING_HEIGHT, + SAIL_APPROVED_THICKNESS_VALUES, + VALUES_BEARING_STIFFENER_COUNT, + VALUES_END_DIAPHRAGM_TYPE, VALUES_GIRDER_DESIGN_MODE, VALUES_GIRDER_SPAN_MODE, + VALUES_GIRDER_SUPPORT_TYPE, VALUES_GIRDER_SYMMETRY, VALUES_GIRDER_TYPE, + VALUES_LONGITUDINAL_STIFFENER, VALUES_PROFILE_SCOPE, + VALUES_STIFFENER_DESIGN, VALUES_TORSIONAL_RESTRAINT, VALUES_WARPING_RESTRAINT, VALUES_WEB_TYPE, VALUES_RAILING_TYPE, VALUES_WEARING_COAT_MATERIAL, + VALUES_YES_NO, + STIFFENER_DETAILS_DEFAULTS, ) LAYOUT_TAB_SCHEMA = { @@ -1460,12 +1468,20 @@ ], } GIRDER_DETAILS_SCHEMA = { + "id": "girder_details_tab", + "defaults": { + "member_length_m": 30.0, + "distance_start_m": 0.0, + "max_girder_count": 20, + }, + "SAIL_APPROVED_THICKNESS_VALUES": SAIL_APPROVED_THICKNESS_VALUES, + "thickness_values_mm": SAIL_APPROVED_THICKNESS_VALUES, "overview": [ { "id": "select_girder", "label": "Select Girder:", "type": "combo_dynamic", - "bind": "select_girder_combo", + "bind": "girder_dropdown", "include_all": True, }, { @@ -1475,7 +1491,25 @@ "choices": VALUES_GIRDER_SPAN_MODE, "bind": "span_combo", }, + { + "id": "total_span", + "label": "Total Span (m):", + "type": "line", + "default": "30", + "read_only": True, + "bind": "length_input", + }, ], + "segment_manager": { + "table_headers": ["Member ID", "Start (m)", "End (m)", "Length (m)", "Action"], + "action_column_width": 132, + }, + "cad_view": { + "buttons": [ + {"id": "cross_section", "label": "Cross Section", "mode": "cross", "width": 130, "height": 32}, + {"id": "side_view", "label": "Side View", "mode": "side", "width": 130, "height": 32}, + ] + }, "section_inputs": [ { "id": "design", @@ -1483,6 +1517,7 @@ "type": "combo", "choices": VALUES_GIRDER_DESIGN_MODE, "bind": "design_combo", + "legacy_payload_key": "design_mode", "visible_for": ["welded"], }, { @@ -1491,6 +1526,7 @@ "type": "combo", "choices": VALUES_GIRDER_TYPE, "bind": "type_combo", + "legacy_payload_key": "girder_type", }, { "id": "symmetry", @@ -1498,66 +1534,106 @@ "type": "combo", "choices": VALUES_GIRDER_SYMMETRY, "bind": "symmetry_combo", + "row_bucket": "symmetry_row", + "legacy_payload_key": "symmetry", "visible_for": ["welded"], }, { "id": "depth", - "label": "Total Depth (mm):", - "type": "mode_line", - "mode_choices": ["Optimized", "Customized"], - "default_mode": "Optimized", - "bind_mode": "depth_mode_combo", - "bind_value": "depth_input", + "label": "Total Depth, d (mm):", + "type": "line_with_bounds", + "bounds_key": "total_depth", + "bounds_default": {"lower": 200.0, "upper": 2000.0, "increment": 25.0}, + "bind": "total_depth_input", + "bind_widget": "total_depth_widget", + "bind_bounds_button": "total_depth_bounds_button", + "legacy_welded_key": "total_depth_mm", + "legacy_welded_bounds_key": "total_depth_bounds", "visible_for": ["welded"], }, { "id": "top_flange_width", - "label": "Top Flange Width (mm):", - "type": "mode_line", - "mode_choices": ["Optimized", "Customized"], - "default_mode": "Optimized", - "bind_mode": "top_width_mode_combo", - "bind_value": "top_width_input", + "label": "Width of Top Flange, tfw (mm):", + "type": "line_with_bounds", + "bounds_key": "top_width", + "bounds_default": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + "bind": "top_width_input", + "bind_widget": "top_width_widget", + "bind_bounds_button": "top_width_bounds_button", + "legacy_welded_key": "top_flange_width_mm", + "legacy_welded_bounds_key": "top_flange_width_bounds", "visible_for": ["welded"], }, { "id": "top_flange_thickness", - "label": "Top Flange Thickness (mm):", + "label": "Top Flange Thickness, tft (mm):", "type": "mode_line", "mode_choices": VALUES_PROFILE_SCOPE, "default_mode": "All", - "bind_mode": "top_thickness_mode_combo", - "bind_value": "top_thickness_input", + "bind_mode": "top_thickness_combo", + "bind_value": "top_thickness_value_input", + "bind_wrapper": "top_thickness_widget", + "thickness_key": "top_thickness", + "legacy_welded_mode_key": "top_thickness_mode", + "legacy_welded_value_key": "top_thickness_value_mm", "visible_for": ["welded"], }, { "id": "bottom_flange_width", - "label": "Bottom Flange Width (mm):", - "type": "mode_line", - "mode_choices": ["Optimized", "Customized"], - "default_mode": "Optimized", - "bind_mode": "bottom_width_mode_combo", - "bind_value": "bottom_width_input", + "label": "Width of Bottom Flange, bfw (mm):", + "type": "line_with_bounds", + "bounds_key": "bottom_width", + "bounds_default": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, + "bind": "bottom_width_input", + "bind_widget": "bottom_width_widget", + "bind_bounds_button": "bottom_width_bounds_button", + "legacy_welded_key": "bottom_flange_width_mm", + "legacy_welded_bounds_key": "bottom_flange_width_bounds", "visible_for": ["welded"], }, { "id": "bottom_flange_thickness", - "label": "Bottom Flange Thickness (mm):", + "label": "Bottom Flange Thickness, bft (mm):", "type": "mode_line", "mode_choices": VALUES_PROFILE_SCOPE, "default_mode": "All", - "bind_mode": "bottom_thickness_mode_combo", - "bind_value": "bottom_thickness_input", + "bind_mode": "bottom_thickness_combo", + "bind_value": "bottom_thickness_value_input", + "bind_wrapper": "bottom_thickness_widget", + "thickness_key": "bottom_thickness", + "legacy_welded_mode_key": "bottom_thickness_mode", + "legacy_welded_value_key": "bottom_thickness_value_mm", + "visible_for": ["welded"], + }, + { + "id": "support_type", + "label": "Support Type:", + "type": "combo", + "choices": VALUES_GIRDER_SUPPORT_TYPE, + "bind": "support_type_combo", + "visible_for": ["welded"], + }, + { + "id": "support_width", + "label": "Support Width (mm):", + "type": "line", + "validator": {"type": "double_range", "bottom": 0.0, "top": 1000000.0, "decimals": 3}, + "bind": "support_width_input", + "legacy_welded_key": "support_width_mm", "visible_for": ["welded"], }, { "id": "web_thickness", - "label": "Web Thickness (mm):", + "label": "Web Thickness, wt (mm):", "type": "mode_line", "mode_choices": VALUES_PROFILE_SCOPE, "default_mode": "All", - "bind_mode": "web_thickness_mode_combo", - "bind_value": "web_thickness_input", + "bind_mode": "web_thickness_combo", + "bind_value": "web_thickness_value_input", + "bind_wrapper": "web_thickness_widget", + "thickness_key": "web_thickness", + "legacy_welded_mode_key": "web_thickness_mode", + "legacy_welded_value_key": "web_thickness_value_mm", "visible_for": ["welded"], }, { @@ -1569,6 +1645,7 @@ "ISWB 500", "ISWB 550", "ISWB 600", ], "bind": "is_section_combo", + "legacy_payload_key": "rolled_section", "visible_for": ["rolled"], }, { @@ -1577,6 +1654,8 @@ "type": "combo", "choices": VALUES_TORSIONAL_RESTRAINT, "bind": "torsion_combo", + "aliases": ["torsion"], + "legacy_payload_key": "torsional_restraint", }, { "id": "warping_restraint", @@ -1584,15 +1663,427 @@ "type": "combo", "choices": VALUES_WARPING_RESTRAINT, "bind": "warping_combo", + "aliases": ["warping"], + "legacy_payload_key": "warping_restraint", }, { "id": "web_type", - "label": "Web Type*:", + "label": "Web Type:", "type": "combo", "choices": VALUES_WEB_TYPE, "bind": "web_type_combo", + "row_bucket": "web_type_row", + "legacy_payload_key": "web_type", + "visible_for": ["welded"], + }, + ], +} + +STIFFENER_DETAILS_SCHEMA = { + "id": "stiffener_details_tab", + "overview": [ + { + "id": "member_id", + "label": "Select Member ID:", + "type": "combo_dynamic", + "bind": "girder_member_combo", + }, + ], + "stiffener_inputs": [ + { + "id": "bearing_stiffeners_each_end", + "label": "No. of Bearing Stiffeners\n(on one side only):", + "type": "combo", + "choices": VALUES_BEARING_STIFFENER_COUNT, + "default": str(STIFFENER_DETAILS_DEFAULTS.get("bearing_stiffeners_each_end", "2")), + "bind": "bearing_count_combo", + }, + { + "id": "bearing_spacing_mm", + "label": "Bearing Stiffener Spacing (mm):", + "type": "line", + "validator": {"type": "int_range", "bottom": 1, "top": 1000000000}, + "bind": "bearing_spacing_input", + }, + { + "id": "bearing_thickness", + "label": "Bearing Stiffener Thickness (mm):", + "type": "mode_value", + "mode_choices": VALUES_PROFILE_SCOPE, + "default_mode": VALUES_PROFILE_SCOPE[0], + "bind_mode": "bearing_thick_combo", + "bind_value": "bearing_thick_value_combo", + }, + { + "id": "bearing_outstand_mm", + "label": "Outstand of Bearing Stiffener (mm):", + "type": "line", + "bind": "bearing_outstand_input", + }, + { + "id": "intermediate_stiffener", + "label": "Intermediate Stiffener:", + "type": "combo", + "choices": VALUES_YES_NO, + "bind": "intermediate_combo", + }, + { + "id": "intermediate_spacing_mm", + "label": "Intermediate Stiffener Spacing:", + "type": "line", + "validator": {"type": "int_range", "bottom": 1, "top": 1000000000}, + "default": "NA", + "bind": "intermediate_spacing_input", + }, + { + "id": "intermediate_thickness", + "label": "Intermediate Stiffener Thickness (mm):", + "type": "mode_value", + "mode_choices": VALUES_PROFILE_SCOPE, + "default_mode": VALUES_PROFILE_SCOPE[0], + "bind_mode": "intermediate_thick_combo", + "bind_value": "intermediate_thick_value_combo", + }, + { + "id": "intermediate_outstand_mm", + "label": "Outstand of Intermediate Stiffener (mm):", + "type": "line", + "bind": "intermediate_outstand_input", + }, + { + "id": "longitudinal_stiffener", + "label": "Longitudinal Stiffener:", + "type": "combo", + "choices": VALUES_LONGITUDINAL_STIFFENER, + "bind": "longitudinal_combo", + }, + { + "id": "longitudinal_thickness", + "label": "Longitudinal Stiffener Thickness (mm):", + "type": "mode_value", + "mode_choices": VALUES_PROFILE_SCOPE, + "default_mode": VALUES_PROFILE_SCOPE[0], + "bind_mode": "long_thick_combo", + "bind_value": "long_thick_value_combo", + }, + ], + "web_buckling_inputs": [ + { + "id": "shear_buckling_method", + "label": "Shear Buckling Design Method:", + "type": "combo", + "choices": VALUES_STIFFENER_DESIGN, + "bind": "method_combo", + }, + ], +} + +CROSS_BRACING_DETAILS_SCHEMA = { + "id": "cross_bracing_details_tab", + "overview": [ + { + "id": "select_girders", + "label": "Select Girders:", + "type": "combo_dynamic", + "bind": "select_girders_combo", + }, + { + "id": "member_id", + "label": "Member ID:", + "type": "line", + "read_only": True, + "bind": "member_id_display", }, ], + "section_inputs": [ + { + "id": "design", + "label": "Design:", + "type": "combo", + "choices": VALUES_GIRDER_DESIGN_MODE, + "bind": "design_combo", + "default": "Optimized", + }, + { + "id": "bracing_type", + "label": "Type of Bracing:", + "type": "combo", + "choices": ["K-Bracing", "X-Bracing"], + "bind": "bracing_type_combo", + }, + { + "id": "bracing_section_type", + "label": "Bracing Section Type:", + "type": "combo", + "choices": [ + "Angle", + "Double Angle (Long Leg)", + "Double Angle (Short Leg)", + "Channel", + "Double Channel", + ], + "bind": "bracing_section_type_combo", + }, + { + "id": "bracing_section", + "label": "Bracing Section Designation:", + "type": "combo_dynamic", + "bind": "bracing_section_combo", + }, + { + "id": "top_chord_enabled", + "label": "Top Chord:", + "type": "checkbox", + "bind": "top_chord_checkbox", + "default": False, + }, + { + "id": "top_chord_type", + "label": "Top Chord Section Type:", + "type": "combo", + "choices": [ + "Angle", + "Double Angle (Long Leg)", + "Double Angle (Short Leg)", + "Channel", + "Double Channel", + ], + "bind": "top_chord_type_combo", + }, + { + "id": "top_chord_size", + "label": "Top Chord Section Designation:", + "type": "combo_dynamic", + "bind": "top_chord_size_combo", + }, + { + "id": "bottom_chord_enabled", + "label": "Bottom Chord:", + "type": "checkbox", + "bind": "bottom_chord_checkbox", + "default": True, + }, + { + "id": "bottom_chord_type", + "label": "Bottom Chord Section Type:", + "type": "combo", + "choices": [ + "Angle", + "Double Angle (Long Leg)", + "Double Angle (Short Leg)", + "Channel", + "Double Channel", + ], + "bind": "bottom_chord_type_combo", + }, + { + "id": "bottom_chord_size", + "label": "Bottom Chord Section Designation:", + "type": "combo_dynamic", + "bind": "bottom_chord_size_combo", + }, + { + "id": "spacing", + "label": "Spacing (m):", + "type": "line", + "default": "3", + "validator": {"type": "double_range", "bottom": 0.01, "top": 100000.0, "decimals": 2}, + "bind": "spacing_input", + }, + ], +} + +END_DIAPHRAGM_DETAILS_SCHEMA = { + "id": "end_diaphragm_details_tab", + "views": { + "Cross Bracing": { + "overview": [ + { + "id": "type_selector", + "label": "Type:", + "type": "combo", + "choices": VALUES_END_DIAPHRAGM_TYPE, + "default": "Cross Bracing", + }, + ], + "section_inputs": [ + { + "id": "design", + "label": "Design:", + "type": "combo", + "choices": VALUES_GIRDER_DESIGN_MODE, + "default": "Optimized", + "bind": "cross_design_combo", + }, + { + "id": "bracing_type", + "label": "Type of Bracing:", + "type": "combo", + "choices": ["K-Bracing", "X-Bracing"], + "bind": "cross_bracing_type_combo", + }, + { + "id": "bracing_section_type", + "label": "Bracing Section Type:", + "type": "combo", + "choices": [ + "Angle", + "Double Angle (Long Leg)", + "Double Angle (Short Leg)", + "Channel", + "Double Channel", + ], + "bind": "cross_bracing_section_type_combo", + }, + { + "id": "bracing_section", + "label": "Bracing Section Designation:", + "type": "combo_dynamic", + "bind": "cross_bracing_section_combo", + }, + { + "id": "top_chord_enabled", + "label": "Top Chord:", + "type": "checkbox", + "default": False, + "bind": "cross_top_chord_checkbox", + }, + { + "id": "top_chord_type", + "label": "Top Chord Section Type:", + "type": "combo", + "choices": [ + "Angle", + "Double Angle (Long Leg)", + "Double Angle (Short Leg)", + "Channel", + "Double Channel", + ], + "bind": "cross_top_chord_type_combo", + }, + { + "id": "top_chord_size", + "label": "Top Chord Section Designation:", + "type": "combo_dynamic", + "bind": "cross_top_chord_size_combo", + }, + { + "id": "bottom_chord_enabled", + "label": "Bottom Chord:", + "type": "checkbox", + "default": True, + "bind": "cross_bottom_chord_checkbox", + }, + { + "id": "bottom_chord_type", + "label": "Bottom Chord Section Type:", + "type": "combo", + "choices": [ + "Angle", + "Double Angle (Long Leg)", + "Double Angle (Short Leg)", + "Channel", + "Double Channel", + ], + "bind": "cross_bottom_chord_type_combo", + }, + { + "id": "bottom_chord_size", + "label": "Bottom Chord Section Designation:", + "type": "combo_dynamic", + "bind": "cross_bottom_chord_size_combo", + }, + ], + }, + "Rolled Beam": { + "overview": [ + { + "id": "type_selector", + "label": "Type:", + "type": "combo", + "choices": VALUES_END_DIAPHRAGM_TYPE, + "default": "Rolled Beam", + }, + ], + "section_inputs": [ + { + "id": "design", + "label": "Design:", + "type": "combo", + "choices": VALUES_GIRDER_DESIGN_MODE, + "default": "Optimized", + "bind": "rolled_design_combo", + }, + { + "id": "is_section", + "label": "IS Section:", + "type": "combo_dynamic", + "bind": "rolled_is_section_combo", + }, + ], + }, + "Welded Beam": { + "overview": [ + { + "id": "type_selector", + "label": "Type:", + "type": "combo", + "choices": VALUES_END_DIAPHRAGM_TYPE, + "default": "Welded Beam", + }, + ], + "section_inputs": [ + { + "id": "design", + "label": "Design:", + "type": "combo", + "choices": VALUES_GIRDER_DESIGN_MODE, + "default": "Optimized", + "bind": "welded_design_combo", + }, + { + "id": "symmetry", + "label": "Symmetry:", + "type": "combo", + "choices": VALUES_GIRDER_SYMMETRY, + "bind": "welded_symmetry_combo", + }, + ], + }, + }, +} + +# Versioned contract for schema-driven Member Properties migration. +# This keeps existing schema constants intact while providing a single +# top-level structure that builders can consume incrementally. +MEMBER_PROPERTIES_SCHEMA_V1 = { + "version": 1, + "tabs": { + "girder_details": { + "id": "girder_details", + "title": "Girder Details", + "overview": GIRDER_DETAILS_SCHEMA.get("overview", []), + "section_inputs": GIRDER_DETAILS_SCHEMA.get("section_inputs", []), + }, + "stiffener_details": { + "id": "stiffener_details", + "title": "Stiffener Details", + "overview": STIFFENER_DETAILS_SCHEMA.get("overview", []), + "stiffener_inputs": STIFFENER_DETAILS_SCHEMA.get("stiffener_inputs", []), + "web_buckling_inputs": STIFFENER_DETAILS_SCHEMA.get("web_buckling_inputs", []), + }, + "cross_bracing_details": { + "id": "cross_bracing_details", + "title": "Cross-Bracing Details", + "overview": CROSS_BRACING_DETAILS_SCHEMA.get("overview", []), + "section_inputs": CROSS_BRACING_DETAILS_SCHEMA.get("section_inputs", []), + }, + "end_diaphragm_details": { + "id": "end_diaphragm_details", + "title": "End Diaphragm Details", + "views": END_DIAPHRAGM_DETAILS_SCHEMA.get("views", {}), + }, + }, } #function -> store in dict design dict diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index f908be17c..d39ea98dc 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -217,10 +217,10 @@ "Minor Laterally Unsupported", "Major Laterally Unsupported", ] -VALUES_GIRDER_DESIGN_MODE = ["Optimized", "Customized"] +VALUES_GIRDER_DESIGN_MODE = ["Optimized", "Custom"] VALUES_GIRDER_SPAN_MODE = ["Full Length", "Custom"] VALUES_PROFILE_SCOPE = ["All", "Custom"] -VALUES_OPTIMIZATION_MODE = ["Optimized", "Customized", "All"] +VALUES_OPTIMIZATION_MODE = ["Optimized", "Custom", "All"] VALUES_TORSIONAL_RESTRAINT = [ "Fully Restrained", "Partially Restrained - Support Connection", @@ -229,6 +229,8 @@ VALUES_WARPING_RESTRAINT = ["Both Flanges Restrained", "No Restraint"] VALUES_WEB_TYPE = ["Thin Web with ITS", "Thick Web without ITS"] VALUES_STIFFENER_DESIGN = ["Simple Post Critical", "Tension Field"] +VALUES_BEARING_STIFFENER_COUNT = ["1", "2", "3", "4"] +VALUES_LONGITUDINAL_STIFFENER = ["No", "Yes and 1 stiffener", "Yes and 2 stiffeners"] VALUES_CROSS_BRACING_TYPE = [ "K-bracing", "K-bracing with top bracket", @@ -243,6 +245,33 @@ VALUES_FOOTPATH_PRESSURE_MODE = ["Automatic", "User-defined"] VALUES_SUPPORT_TYPE = ["Fixed", "Pinned"] +#Sail thic +SAIL_APPROVED_THICKNESS_VALUES=[ + "8", "10", "12", "14", "16", "18", "20", "22", "25", "28", "32", "36", + "40", "45", "50", "56", "63", "75", "80", "90", "100", "110", "120", + ] +MIN_BEARING_STIFFENER_SPACING_MM = 50 +STIFFENER_DETAILS_DEFAULTS = { + "form_label_width": 245, + "combo_width": 190, + "outstand_default_text": "NA", + "min_bearing_spacing_mm": MIN_BEARING_STIFFENER_SPACING_MM, + "bearing_stiffeners_each_end": VALUES_BEARING_STIFFENER_COUNT[1], + "bearing_spacing_mm": "", + "bearing_thickness_mode": VALUES_PROFILE_SCOPE[0], + "bearing_thickness_value": SAIL_APPROVED_THICKNESS_VALUES[0], + "bearing_outstand_mm": "", + "intermediate_stiffener": VALUES_YES_NO[0], + "intermediate_spacing_mm": "NA", + "intermediate_outstand_mm": "", + "longitudinal_stiffener": VALUES_LONGITUDINAL_STIFFENER[0], + "intermediate_thickness_mode": VALUES_PROFILE_SCOPE[0], + "intermediate_thickness_value": SAIL_APPROVED_THICKNESS_VALUES[0], + "longitudinal_thickness_mode": VALUES_PROFILE_SCOPE[0], + "longitudinal_thickness_value": SAIL_APPROVED_THICKNESS_VALUES[0], + "shear_buckling_method": VALUES_STIFFENER_DESIGN[0] if VALUES_STIFFENER_DESIGN else "", +} + # Defaults + validation helpers DEFAULT_SELF_WEIGHT_FACTOR = 1.0 DEFAULT_CONCRETE_DENSITY = 25.0 @@ -275,4 +304,3 @@ def connectdb(table_name, popup=None): if table_name == "Material": return VALUES_MATERIAL return [] - diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 329d79262..2e8beb63b 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -236,6 +236,7 @@ def init_ui(self): # Keep girder count in sync across tabs try: self.typical_section_tab.girder_count_changed.connect(self.section_properties_tab.set_girder_count) + self._sync_member_properties_girder_count() except Exception: pass @@ -299,6 +300,29 @@ def _normalize_numeric_texts(self, places=2): except ValueError: continue + def _normalize_member_properties_design_mode(self, mode_str: str) -> str: + """Map upstream design labels to Member Properties supported values.""" + value = str(mode_str or "").strip().lower() + if value in {"custom", "customized"}: + return "Custom" + if value in {"optimized", "optimised"}: + return "Optimized" + return "Optimized" + + def _sync_member_properties_girder_count(self) -> None: + """Push current girder count from Typical Section to Member Properties.""" + try: + count_text = "" + if hasattr(self, "typical_section_tab") and hasattr(self.typical_section_tab, "no_of_girders"): + count_text = str(self.typical_section_tab.no_of_girders.text() or "").strip() + if not count_text: + return + count = int(float(count_text)) + if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "set_girder_count"): + self.section_properties_tab.set_girder_count(count) + except Exception: + pass + def _create_schema_widget(self, field_def, field_width): field_type = field_def.get("type") widget = None @@ -408,8 +432,9 @@ def _create_schema_widget(self, field_def, field_width): return widget def set_member_properties_design_mode(self, mode_str: str): + normalized_mode = self._normalize_member_properties_design_mode(mode_str) if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "set_design_mode"): - self.section_properties_tab.set_design_mode(mode_str) + self.section_properties_tab.set_design_mode(normalized_mode) def _apply_defaults(self): """Apply defaults only to the currently visible top-level tab. @@ -443,17 +468,17 @@ def _apply_defaults(self): if hasattr(tab, "reset_defaults"): tab.reset_defaults() return - + if current_widget is getattr(self, "support_tab", None): if hasattr(self.support_tab, "reset_defaults"): self.support_tab.reset_defaults() return - + if current_widget is getattr(self, "design_options_tab", None): if hasattr(self.design_options_tab, "reset_defaults"): self.design_options_tab.reset_defaults() return - + if current_widget is getattr(self, "design_options_cont_tab", None): if hasattr(self.design_options_cont_tab, "reset_defaults"): self.design_options_cont_tab.reset_defaults() @@ -596,6 +621,9 @@ def get_all_values(self): except Exception: pass + # Keep Member Properties member/pair dropdowns aligned with restored girder count. + self._sync_member_properties_girder_count() + return values @@ -826,6 +854,9 @@ def _on_top_tab_changed(self, index: int) -> None: self.tabs.setCurrentIndex(previous) self.tabs.blockSignals(prev) return + + if hasattr(self, "section_properties_tab") and hasattr(self.section_properties_tab, "save_properties"): + self._last_saved_data = self.section_properties_tab.save_properties() or {} except Exception: pass diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py b/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py index 09eb0cd43..7a6a7c357 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/optimizable_field.py @@ -16,7 +16,7 @@ from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style class OptimizableField(QWidget): - """Widget that allows selection between Optimized/Customized/All modes with input field""" + """Widget that allows selection between Optimized/Custom/All modes with input field""" def __init__(self, label_text, parent=None): super().__init__(parent) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py index 896eee012..1293a3467 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/section_properties_tab.py @@ -116,20 +116,8 @@ def _on_section_tab_changed(self, index: int) -> None: if previous != index: try: leaving_girder_tab = previous == self.section_tabs.indexOf(getattr(self, "girder_details_tab", None)) - if leaving_girder_tab and hasattr(self, "girder_details_tab") and hasattr(self.girder_details_tab, "has_unsaved_changes"): - if self.girder_details_tab.has_unsaved_changes(): - box = QMessageBox(self) - box.setIcon(QMessageBox.Warning) - box.setWindowTitle("Unsaved Inputs") - box.setText("Please save Member Properties before switching tabs.") - box.setStandardButtons(QMessageBox.Ok) - box.setDefaultButton(QMessageBox.Ok) - box.setWindowModality(Qt.ApplicationModal) - box.exec() - prev = self.section_tabs.blockSignals(True) - self.section_tabs.setCurrentIndex(previous) - self.section_tabs.blockSignals(prev) - return + if leaving_girder_tab and hasattr(self, "girder_details_tab") and hasattr(self.girder_details_tab, "_commit_current_member_state"): + self.girder_details_tab._commit_current_member_state() except Exception: pass diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py index ce59b45a5..93e83dc7a 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/cross_bracing_details_tab.py @@ -9,31 +9,312 @@ QTextEdit, QDialog, QSizeGrip ) from PySide6.QtCore import Qt, Signal, QSize -from PySide6.QtGui import QDoubleValidator, QIntValidator +from PySide6.QtGui import QDoubleValidator, QIntValidator, QPainter, QPen, QColor from osdagbridge.core.utils.common import * +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import CROSS_BRACING_DETAILS_SCHEMA from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.utils.cad_palette import CAD_DIMENSION from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.widgets.section_viewer import SectionPreviewWidget, SectionCatalog from osdagbridge.desktop.ui.widgets.placeholder_section_preview import PlaceholderSectionPreviewWidget + +class BracingLayoutCadWidget(QWidget): + """Simple CAD-like bracing layout preview for K/X bracing.""" + + def __init__(self, min_height: int = 170, parent=None): + super().__init__(parent) + self._bracing_type = "K-Bracing" + self._top_chord = False + self._bottom_chord = True + self._member_label = "" + self._girder_pair = "" + self.setMinimumHeight(int(min_height)) + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + + def set_layout( + self, + bracing_type: str, + top_chord: bool, + bottom_chord: bool, + member_label: str = "", + girder_pair: str = "", + ) -> None: + self._bracing_type = (bracing_type or "K-Bracing").strip() or "K-Bracing" + self._top_chord = bool(top_chord) + self._bottom_chord = bool(bottom_chord) + self._member_label = (member_label or "").strip() + self._girder_pair = (girder_pair or "").strip() + self.update() + + def paintEvent(self, _event): # noqa: N802 (Qt naming) + from PySide6.QtCore import QPointF + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing, True) + + # Plain background (no outer border line). + canvas = self.rect() + painter.fillRect(canvas, QColor("#ffffff")) + + # Reserve extra bottom space for member/girder labels so they are never clipped. + draw = canvas.adjusted(24, 14, -24, -38) + if draw.width() <= 10 or draw.height() <= 10: + return + + # Coordinates + x_left = draw.left() + int(draw.width() * 0.15) + x_right = draw.right() - int(draw.width() * 0.15) + y_top = draw.top() + int(draw.height() * 0.10) + y_bottom = draw.bottom() - int(draw.height() * 0.14) + + fw = 40 # flange width + ft = 8 # flange thickness + wt = 6 # web thickness + + # Connection points at web outer faces (clean two-line I-section look). + x_l_conn = x_left + wt // 2 + x_r_conn = x_right - wt // 2 + + strut_offset = 12 + y_T_WP = y_top + strut_offset if self._top_chord else y_top + 15 + y_B_WP = y_bottom - strut_offset if self._bottom_chord else y_bottom - 15 + + wp_tl = QPointF(x_l_conn, y_T_WP) + wp_tr = QPointF(x_r_conn, y_T_WP) + wp_bl = QPointF(x_l_conn, y_B_WP) + wp_br = QPointF(x_r_conn, y_B_WP) + + # Monochrome CAD style: line-only geometry, no fill shading. + line_color = QColor("#000000") + + # 1. Draw top/bottom bracing lines based on current selection. + painter.setPen(QPen(line_color, 2)) + if self._top_chord: + painter.drawLine(wp_tl, wp_tr) + if self._bottom_chord: + painter.drawLine(wp_bl, wp_br) + + # 2. Draw Bracing Members + brace_pen = QPen(line_color, 2) + brace_pen.setCapStyle(Qt.RoundCap) + brace_pen.setJoinStyle(Qt.RoundJoin) + painter.setPen(brace_pen) + + if self._bracing_type == "K-Bracing": + if self._top_chord and not self._bottom_chord: + apex = QPointF((x_l_conn + x_r_conn) / 2.0, y_T_WP) + painter.drawLine(wp_bl, apex) + painter.drawLine(wp_br, apex) + else: + apex = QPointF((x_l_conn + x_r_conn) / 2.0, y_B_WP) + painter.drawLine(wp_tl, apex) + painter.drawLine(wp_tr, apex) + else: + painter.drawLine(wp_tl, wp_br) + painter.drawLine(wp_bl, wp_tr) + + # 3. Draw I-Girders + painter.setPen(QPen(line_color, 1.6)) + painter.setBrush(Qt.NoBrush) + + # Girder body outlines (double-line geometry with flange/web rectangles) + # Left Girder + painter.drawRect(int(x_left - fw//2), int(y_top - ft), fw, ft) + painter.drawRect(int(x_left - fw//2), int(y_bottom), fw, ft) + painter.drawRect(int(x_left - wt//2), int(y_top), wt, int(y_bottom - y_top)) + + # Right Girder + painter.drawRect(int(x_right - fw//2), int(y_top - ft), fw, ft) + painter.drawRect(int(x_right - fw//2), int(y_bottom), fw, ft) + painter.drawRect(int(x_right - wt//2), int(y_top), wt, int(y_bottom - y_top)) + + # 4. Label boxes below the girders (no arrows/leaders). + + def compact_member_label(raw_text: str) -> str: + text = (raw_text or "").strip() + if " to " in text: + parts = [part.strip() for part in text.split(" to ", 1)] + if len(parts) == 2 and parts[0] and parts[1]: + return f"{parts[0]} - {parts[1]}" + return text or "B1M1" + + pair_text = self._girder_pair or "G1 to G2" + left_girder, right_girder = "G1", "G2" + if " to " in pair_text: + parts = [part.strip() for part in pair_text.split(" to ", 1)] + if len(parts) == 2 and parts[0] and parts[1]: + left_girder, right_girder = parts[0], parts[1] + + pen = QPen(CAD_DIMENSION, 1.1) + painter.setPen(pen) + + label_bg = QColor(255, 255, 255, 225) + pad_x = 6 + pad_y = 3 + + def draw_label_box(text: str, center_x: float, box_y: float, font_size: int = 8) -> None: + if not text: + return + + f = painter.font() + f.setPointSize(font_size) + f.setBold(True) + painter.setFont(f) + fm = painter.fontMetrics() + + txt_w = fm.horizontalAdvance(text) + txt_h = fm.height() + box_w = txt_w + (2 * pad_x) + box_h = txt_h + (2 * pad_y) + + box_x = center_x - (box_w / 2.0) + # Keep labels visible while preserving a common baseline. + box_x = max(8.0, min(box_x, self.width() - box_w - 8.0)) + box_y = max(8.0, min(box_y, self.height() - box_h - 8.0)) + + # Draw label box + painter.setPen(Qt.NoPen) + painter.setBrush(label_bg) + painter.drawRoundedRect(int(box_x), int(box_y), int(box_w), int(box_h), 4, 4) + painter.setBrush(Qt.NoBrush) + painter.setPen(QPen(CAD_DIMENSION, 1.0)) + painter.drawText(int(box_x + pad_x), int(box_y + box_h - pad_y - 2), text) + + # Uniform row under girders: left, center, right labels with equal spacing. + member_text = compact_member_label(self._member_label) + label_y = y_bottom + ft + 12 + mid_x = (x_left + x_right) / 2.0 + + draw_label_box(f"Girder {left_girder}", x_left, label_y, 8) + draw_label_box(member_text, mid_x, label_y, 11) + draw_label_box(f"Girder {right_girder}", x_right, label_y, 8) + + +class _CrossBracingDetailsSchemaBuilder: + """Local schema-driven widget builder for Cross Bracing tab.""" + + def __init__(self, owner: QWidget): + self.owner = owner + + def create_widget(self, field_def: dict) -> QWidget: + field_type = str(field_def.get("type") or "line").strip().lower() + + if field_type in {"combo", "combo_dynamic"}: + widget = QComboBox() + for choice in field_def.get("choices") or []: + widget.addItem(str(choice)) + default = field_def.get("default") + if default is not None: + widget.setCurrentText(str(default)) + self.owner._configure_combo_box(widget) + + elif field_type == "checkbox": + widget = QCheckBox() + widget.setChecked(bool(field_def.get("default", False))) + widget.setFixedHeight(28) + widget.setStyleSheet("margin-left: 2px;") + + else: + widget = QLineEdit() + default = field_def.get("default") + if default is not None: + widget.setText(str(default)) + self._apply_validator(widget, field_def.get("validator")) + if bool(field_def.get("read_only", False)): + widget.setReadOnly(True) + try: + widget.setFocusPolicy(Qt.NoFocus) + except Exception: + pass + + if field_type not in {"checkbox"}: + apply_field_style(widget) + + if isinstance(widget, QLineEdit): + widget.setFixedSize(self.owner._combo_width, 28) + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + elif isinstance(widget, QComboBox): + widget.setFixedHeight(28) + widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + + field_id = str(field_def.get("id") or "").strip() + if field_id: + widget.setObjectName(field_id) + + bind_name = str(field_def.get("bind") or "").strip() + if bind_name: + setattr(self.owner, bind_name, widget) + + self._connect_handlers(widget, field_def) + return widget + + def _apply_validator(self, widget: QLineEdit, validator_def: dict | None) -> None: + if not validator_def: + return + + vtype = str(validator_def.get("type") or "").strip().lower() + if vtype == "double_range": + bottom = float(validator_def.get("bottom", 0.0)) + top = float(validator_def.get("top", 1e12)) + decimals = int(validator_def.get("decimals", 3)) + widget.setValidator(QDoubleValidator(bottom, top, decimals, widget)) + return + + if vtype == "int_range": + bottom = int(validator_def.get("bottom", 0)) + top = int(validator_def.get("top", 1_000_000_000)) + widget.setValidator(QIntValidator(bottom, top, widget)) + + def _connect_handlers(self, widget: QWidget, field_def: dict) -> None: + owner = self.owner + + on_change = field_def.get("on_change") + if on_change and isinstance(widget, QComboBox): + handler = getattr(owner, str(on_change), None) + if callable(handler): + widget.currentTextChanged.connect(handler) + + on_text_changed = field_def.get("on_text_changed") + if on_text_changed and isinstance(widget, QLineEdit): + handler = getattr(owner, str(on_text_changed), None) + if callable(handler): + widget.textChanged.connect(handler) + + on_editing_finished = field_def.get("on_editing_finished") + if on_editing_finished and isinstance(widget, QLineEdit): + handler = getattr(owner, str(on_editing_finished), None) + if callable(handler): + widget.editingFinished.connect(handler) + + on_toggled = field_def.get("on_toggled") + if on_toggled and isinstance(widget, QCheckBox): + handler = getattr(owner, str(on_toggled), None) + if callable(handler): + widget.toggled.connect(handler) + class CrossBracingDetailsTab(QWidget): """Tab for Cross-Bracing Details with visual previews""" def __init__(self, parent=None): super().__init__(parent) self.catalog = SectionCatalog() + self._schema_builder = _CrossBracingDetailsSchemaBuilder(self) self._girder_details_tab = None self._global_design_mode = "Optimized" + self._field_widgets: dict[str, QWidget] = {} # Keep all combo boxes strictly uniform in width. self._combo_width = 190 + # Keep label columns uniform across all left-panel grids. + self._label_col_width = 260 # Persist UI state per (girder-pair, member-id) so switching selection # restores user inputs for that specific member. self._state_by_member_key: dict[str, dict] = {} self._active_member_key: str | None = None self._selection_sync_guard = False + self._updating_chord_rules = False self.init_ui() def init_ui(self): @@ -44,11 +325,9 @@ def init_ui(self): scroll = QScrollArea() scroll.setWidgetResizable(True) scroll.setFrameShape(QFrame.NoFrame) + scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - scroll.setStyleSheet( - "QScrollArea { border: none; background: transparent; }" - "QScrollArea > QWidget > QWidget { background: transparent; }" - ) + scroll.setStyleSheet("QScrollArea { border: none; background: transparent; }") main_layout.addWidget(scroll) container = QWidget() @@ -75,16 +354,13 @@ def init_ui(self): selection_layout.setContentsMargins(12, 8, 12, 8) selection_layout.setHorizontalSpacing(12) selection_layout.setVerticalSpacing(8) - selection_layout.setColumnMinimumWidth(0, 180) + selection_layout.setColumnMinimumWidth(0, int(self._label_col_width)) + selection_layout.setColumnMinimumWidth(1, int(self._combo_width)) selection_layout.setColumnStretch(0, 0) - selection_layout.setColumnStretch(1, 0) + selection_layout.setColumnStretch(1, 1) - self.select_girders_combo = QComboBox() - # Populated from Girder Details when bound. - self._configure_combo_box(self.select_girders_combo) - apply_field_style(self.select_girders_combo) - selection_layout.addWidget(self._create_label("Select Girders:"), 0, 0) - selection_layout.addWidget(self.select_girders_combo, 0, 1) + self._build_overview_inputs_from_schema(selection_layout) + self._bind_widgets_from_schema("overview") self.member_id_combo = QComboBox() # Populated from Girder Details when bound. (No Custom option.) @@ -98,18 +374,6 @@ def init_ui(self): # Hide the dropdown entirely; show a read-only display instead. self.member_id_combo.setVisible(False) - self.member_id_display = QLineEdit() - self.member_id_display.setReadOnly(True) - self.member_id_display.setFixedSize(self._combo_width, 28) - self.member_id_display.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - try: - self.member_id_display.setFocusPolicy(Qt.NoFocus) - except Exception: - pass - apply_field_style(self.member_id_display) - selection_layout.addWidget(self._create_label("Member ID:"), 1, 0) - selection_layout.addWidget(self.member_id_display, 1, 1) - # Keep the two selectors aligned and persist state per selection. self.select_girders_combo.currentIndexChanged.connect(self._on_select_girders_index_changed) @@ -127,72 +391,13 @@ def init_ui(self): inputs_grid.setContentsMargins(0, 0, 0, 0) inputs_grid.setHorizontalSpacing(12) inputs_grid.setVerticalSpacing(8) - inputs_grid.setColumnMinimumWidth(0, 180) + inputs_grid.setColumnMinimumWidth(0, int(self._label_col_width)) + inputs_grid.setColumnMinimumWidth(1, int(self._combo_width)) inputs_grid.setColumnStretch(0, 0) - inputs_grid.setColumnStretch(1, 0) - - self.design_combo = QComboBox() - self.design_combo.addItems(["Customized", "Optimized"]) - if self.design_combo.count() > 1: - self.design_combo.setCurrentIndex(1) # Default to Optimized - self._configure_combo_box(self.design_combo) - apply_field_style(self.design_combo) - self.design_combo.setVisible(False) - row = 0 + inputs_grid.setColumnStretch(1, 1) - self.bracing_type_combo = QComboBox() - self.bracing_type_combo.addItems(["K-Bracing", "X-Bracing"]) - self._configure_combo_box(self.bracing_type_combo) - apply_field_style(self.bracing_type_combo) - row = self._add_grid_row(inputs_grid, row, "Type of Bracing:", self.bracing_type_combo) - - section_type_options = [ - "Angle", - "Double Angle (Long Leg)", - "Double Angle (Short Leg)", - "Channel", - "Double Channel", - ] - - self.bracing_section_type_combo = QComboBox() - self.bracing_section_type_combo.addItems(section_type_options) - self._configure_combo_box(self.bracing_section_type_combo) - apply_field_style(self.bracing_section_type_combo) - row = self._add_grid_row(inputs_grid, row, "Bracing Section Type:", self.bracing_section_type_combo) - - self.bracing_section_combo = QComboBox() - self._configure_combo_box(self.bracing_section_combo) - apply_field_style(self.bracing_section_combo) - row = self._add_grid_row(inputs_grid, row, "Bracing Section:", self.bracing_section_combo) - - self.top_bracket_type_combo = QComboBox() - self.top_bracket_type_combo.addItems(section_type_options) - self._configure_combo_box(self.top_bracket_type_combo) - apply_field_style(self.top_bracket_type_combo) - row = self._add_grid_row(inputs_grid, row, "Top Bracket Section:", self.top_bracket_type_combo) - - self.top_bracket_size_combo = QComboBox() - self._configure_combo_box(self.top_bracket_size_combo) - apply_field_style(self.top_bracket_size_combo) - row = self._add_grid_row(inputs_grid, row, "Top Bracket Size:", self.top_bracket_size_combo) - - self.bottom_bracket_type_combo = QComboBox() - self.bottom_bracket_type_combo.addItems(section_type_options) - self._configure_combo_box(self.bottom_bracket_type_combo) - apply_field_style(self.bottom_bracket_type_combo) - row = self._add_grid_row(inputs_grid, row, "Bottom Bracket Section:", self.bottom_bracket_type_combo) - - self.bottom_bracket_size_combo = QComboBox() - self._configure_combo_box(self.bottom_bracket_size_combo) - apply_field_style(self.bottom_bracket_size_combo) - row = self._add_grid_row(inputs_grid, row, "Bottom Bracket Size:", self.bottom_bracket_size_combo) - - self.spacing_input = QLineEdit() - self.spacing_input.setValidator(QDoubleValidator(0, 100000, 2)) - apply_field_style(self.spacing_input) - self.spacing_input.setFixedSize(self._combo_width, 28) - self.spacing_input.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - self._add_grid_row(inputs_grid, row, "Spacing (m):", self.spacing_input) + self._build_section_inputs_from_schema(inputs_grid) + self._bind_widgets_from_schema("section_inputs") inputs_layout.addLayout(inputs_grid) left_layout.addWidget(inputs_box) @@ -214,34 +419,40 @@ def init_ui(self): type_layout = QVBoxLayout(type_box) type_layout.setContentsMargins(12, 8, 12, 10) type_layout.setSpacing(6) - type_layout.addWidget(self._create_heading_label("Type of Bracing")) - type_layout.addWidget(self._create_bracing_layout_placeholder("Bracing Layout", 170)) + type_layout.addWidget(self._create_heading_label(self._schema_label("bracing_type", "Type of Bracing:").rstrip(":"))) + self.bracing_layout_widget = BracingLayoutCadWidget(170) + self.bracing_layout_widget.setFixedHeight(170) + type_layout.addWidget(self.bracing_layout_widget) right_layout.addWidget(type_box) self.bracing_preview_box, self.bracing_preview_label = self._create_preview_box("Bracing") right_layout.addWidget(self.bracing_preview_box) - self.top_bracket_preview_box, self.top_bracket_preview_label = self._create_preview_box("Top Bracket") - right_layout.addWidget(self.top_bracket_preview_box) + self.top_chord_preview_box, self.top_chord_preview_label = self._create_preview_box("Top Chord") + right_layout.addWidget(self.top_chord_preview_box) - self.bottom_bracket_preview_box, self.bottom_bracket_preview_label = self._create_preview_box("Bottom Bracket") - right_layout.addWidget(self.bottom_bracket_preview_box) + self.bottom_chord_preview_box, self.bottom_chord_preview_label = self._create_preview_box("Bottom Chord") + right_layout.addWidget(self.bottom_chord_preview_box) right_layout.addStretch() card_layout.addWidget(right_column) - card_layout.setStretch(0, 3) - card_layout.setStretch(1, 4) + # Keep both panels visually balanced like Girder Details. + card_layout.setStretch(0, 1) + card_layout.setStretch(1, 1) container_layout.addWidget(primary_card) container_layout.addStretch() self.bracing_type_combo.currentTextChanged.connect(self._update_previews) + self.bracing_type_combo.currentTextChanged.connect(self._on_bracing_layout_changed) self.bracing_section_type_combo.currentTextChanged.connect(self._on_bracing_type_changed) self.bracing_section_combo.currentTextChanged.connect(self._update_previews) - self.top_bracket_type_combo.currentTextChanged.connect(self._on_top_bracket_type_changed) - self.top_bracket_size_combo.currentTextChanged.connect(self._update_previews) - self.bottom_bracket_type_combo.currentTextChanged.connect(self._on_bottom_bracket_type_changed) - self.bottom_bracket_size_combo.currentTextChanged.connect(self._update_previews) + self.top_chord_checkbox.toggled.connect(self._on_bracing_layout_changed) + self.top_chord_type_combo.currentTextChanged.connect(self._on_top_chord_type_changed) + self.top_chord_size_combo.currentTextChanged.connect(self._update_previews) + self.bottom_chord_checkbox.toggled.connect(self._on_bracing_layout_changed) + self.bottom_chord_type_combo.currentTextChanged.connect(self._on_bottom_chord_type_changed) + self.bottom_chord_size_combo.currentTextChanged.connect(self._update_previews) self.design_combo.currentTextChanged.connect(self._on_design_changed) self.spacing_input.textChanged.connect(self._on_span_or_spacing_changed) self._populate_designations() @@ -252,6 +463,7 @@ def init_ui(self): # Ensure initial selection loads its saved/default state. self._load_state_for_current_member() + self._on_bracing_layout_changed() def _on_span_or_spacing_changed(self, *_args) -> None: # Member IDs are derived from Span + Spacing (software-driven). @@ -417,38 +629,244 @@ def _refresh_member_id_display(self) -> None: self.member_id_combo.blockSignals(block) def _default_member_state(self) -> dict: - # Use the tab defaults (Optimized + first options) for new members. + # Use schema defaults/choices for new members. + state: dict[str, object] = {} + for field in self._schema_fields("section_inputs"): + field_id = str(field.get("id") or "").strip() + if not field_id: + continue + field_type = str(field.get("type") or "line").strip().lower() + if field_type in {"combo", "combo_dynamic"}: + choices = self._schema_choices(field_id, []) + fallback = choices[0] if choices else "" + state[field_id] = str(self._schema_default(field_id, fallback)) + elif field_type == "checkbox": + state[field_id] = bool(self._schema_default(field_id, False)) + else: + state[field_id] = str(self._schema_default(field_id, "")) + + # Keep extra designation metadata for robust restore. + state["bracing_section_data"] = None + state["bracing_section_text"] = "" + state["top_chord_data"] = None + state["top_chord_text"] = "" + state["bottom_chord_data"] = None + state["bottom_chord_text"] = "" + return state + + def _schema_fields(self, section: str) -> list[dict]: + """Return normalized schema field dicts for a section. + + Filters non-dict entries and returns shallow copies so callers can work + with a stable list without mutating source schema objects. + """ + return [dict(field) for field in CROSS_BRACING_DETAILS_SCHEMA.get(section, []) if isinstance(field, dict)] + + def _bind_widgets_from_schema(self, section: str) -> None: + """Bind registered widgets to schema-declared attribute names. + + For each field with both `id` and `bind`, finds the registered widget + and sets `self.` to that widget. + """ + for field in self._schema_fields(section): + field_id = str(field.get("id") or "").strip() + bind_name = str(field.get("bind") or "").strip() + if not field_id or not bind_name: + continue + + widget = self._widget_for_field(field_id) + if widget is None: + continue + setattr(self, bind_name, widget) + + def _register_field_widget(self, field_id: str, widget: QWidget) -> None: + """Register a created field widget under its schema field id.""" + key = str(field_id or "").strip() + if key: + self._field_widgets[key] = widget + + def _widget_for_field(self, field_id: str): + """Return the registered widget for a schema field id, if present.""" + return self._field_widgets.get(str(field_id or "").strip()) + + def _schema_field_def(self, field_id: str) -> dict: + """Find and return a single schema field definition by id. + + Searches both `overview` and `section_inputs`. Returns empty dict when + no matching field exists. + """ + target = str(field_id or "").strip() + if not target: + return {} + for section in ("overview", "section_inputs"): + for field in self._schema_fields(section): + if str(field.get("id") or "").strip() == target: + return field + return {} + + def _schema_label(self, field_id: str, fallback: str) -> str: + """Resolve field label from schema with fallback text.""" + field = self._schema_field_def(field_id) + label = field.get("label") + return str(label if label is not None else fallback) + + def _schema_choices(self, field_id: str, fallback: list[str]) -> list[str]: + """Resolve combo choices from schema with fallback list.""" + field = self._schema_field_def(field_id) + choices = field.get("choices") or fallback + return [str(choice) for choice in choices] + + def _schema_default(self, field_id: str, fallback): + """Resolve field default value from schema with fallback.""" + field = self._schema_field_def(field_id) + return field.get("default", fallback) + + def _apply_double_validator_from_schema( + self, + line_edit: QLineEdit, + field_id: str, + fallback_bottom: float, + fallback_top: float, + fallback_decimals: int, + ) -> None: + """Apply a numeric range validator using schema validator metadata. + + Uses fallback bounds/decimals when validator metadata is absent. + """ + field = self._schema_field_def(field_id) + validator = field.get("validator") if isinstance(field.get("validator"), dict) else {} + bottom = float(validator.get("bottom", fallback_bottom)) + top = float(validator.get("top", fallback_top)) + decimals = int(validator.get("decimals", fallback_decimals)) + line_edit.setValidator(QDoubleValidator(bottom, top, decimals)) + + def _create_widget_from_schema(self, field_def: dict): + """Create a widget from schema via local schema builder.""" + return self._schema_builder.create_widget(field_def) + + def _build_overview_select_girders_field(self, selection_layout: QGridLayout, row: int, field_def: dict, widget: QWidget) -> int: + """Render the schema-defined `select_girders` overview row.""" + field_id = str(field_def.get("id") or "") + self._register_field_widget(field_id, widget) + label = self._schema_label(field_id, str(field_def.get("label") or "")) + selection_layout.addWidget(self._create_label(label), row, 0, Qt.AlignLeft | Qt.AlignVCenter) + selection_layout.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) + return row + 1 + + def _build_overview_member_id_field(self, selection_layout: QGridLayout, row: int, field_def: dict, widget: QWidget) -> int: + """Render the schema-defined `member_id` overview row.""" + field_id = str(field_def.get("id") or "") + self._register_field_widget(field_id, widget) + label = self._schema_label(field_id, str(field_def.get("label") or "")) + selection_layout.addWidget(self._create_label(label), row, 0, Qt.AlignLeft | Qt.AlignVCenter) + selection_layout.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) + return row + 1 + + def _overview_schema_handlers(self) -> dict[tuple[str, str], callable]: + """Return dispatch map for overview field-specific builders.""" return { - "design": self._global_design_mode, - "bracing_type": "K-Bracing", - "bracing_section_type": "Angle", - "bracing_section_data": None, - "bracing_section_text": "", - "top_bracket_type": "Angle", - "top_bracket_data": None, - "top_bracket_text": "", - "bottom_bracket_type": "Angle", - "bottom_bracket_data": None, - "bottom_bracket_text": "", - "spacing": "3", + ("id", "select_girders"): self._build_overview_select_girders_field, + ("id", "member_id"): self._build_overview_member_id_field, } - def _snapshot_current_state(self) -> dict: + def _build_overview_field_from_schema(self, selection_layout: QGridLayout, row: int, field_def: dict) -> int: + """Build one overview row using handler dispatch + schema metadata.""" + field_id = str(field_def.get("id") or "") + field_type = str(field_def.get("type") or "").strip().lower() + widget = self._schema_builder.create_widget(field_def) + + handlers = self._overview_schema_handlers() + handler = handlers.get(("id", field_id)) or handlers.get(("type", field_type)) + if handler is not None: + return handler(selection_layout, row, field_def, widget) + + self._register_field_widget(field_id, widget) + label = self._schema_label(field_id, str(field_def.get("label") or "")) + selection_layout.addWidget(self._create_label(label), row, 0, Qt.AlignLeft | Qt.AlignVCenter) + selection_layout.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) + return row + 1 + + def _build_overview_inputs_from_schema(self, selection_layout: QGridLayout) -> None: + """Build all overview rows from schema order.""" + row = 0 + for field in self._schema_fields("overview"): + row = self._build_overview_field_from_schema(selection_layout, row, field) + + def _build_section_hidden_design_field(self, inputs_grid: QGridLayout, row: int, field_def: dict) -> int: + """Build hidden design control row (stored but not shown in UI).""" + field_id = str(field_def.get("id") or "") + widget = self._schema_builder.create_widget(field_def) + self._register_field_widget(field_id, widget) + widget.setVisible(False) + return row + + def _build_section_standard_field(self, inputs_grid: QGridLayout, row: int, field_def: dict) -> int: + """Build a standard visible section-input row from schema.""" + field_id = str(field_def.get("id") or "") + widget = self._schema_builder.create_widget(field_def) + self._register_field_widget(field_id, widget) + row = self._add_grid_row(inputs_grid, row, self._schema_label(field_id, str(field_def.get("label") or "")), widget) + + if field_id == "spacing" and isinstance(widget, QLineEdit): + self._apply_double_validator_from_schema(widget, "spacing", 0.0, 100000.0, 2) + return row + + def _section_schema_handlers(self) -> dict[tuple[str, str], callable]: + """Return dispatch map for section-input field builders.""" return { - "design": self._global_design_mode, - "bracing_type": self.bracing_type_combo.currentText(), - "bracing_section_type": self.bracing_section_type_combo.currentText(), - "bracing_section_data": self.bracing_section_combo.currentData(), - "bracing_section_text": self.bracing_section_combo.currentText(), - "top_bracket_type": self.top_bracket_type_combo.currentText(), - "top_bracket_data": self.top_bracket_size_combo.currentData(), - "top_bracket_text": self.top_bracket_size_combo.currentText(), - "bottom_bracket_type": self.bottom_bracket_type_combo.currentText(), - "bottom_bracket_data": self.bottom_bracket_size_combo.currentData(), - "bottom_bracket_text": self.bottom_bracket_size_combo.currentText(), - "spacing": self.spacing_input.text(), + ("id", "design"): self._build_section_hidden_design_field, + ("type", "combo"): self._build_section_standard_field, + ("type", "combo_dynamic"): self._build_section_standard_field, + ("type", "checkbox"): self._build_section_standard_field, + ("type", "line"): self._build_section_standard_field, } + def _build_section_input_from_schema(self, inputs_grid: QGridLayout, row: int, field_def: dict) -> int: + """Build one section-input row using id/type handler dispatch.""" + field_id = str(field_def.get("id") or "") + field_type = str(field_def.get("type") or "").strip().lower() + + handlers = self._section_schema_handlers() + handler = handlers.get(("id", field_id)) or handlers.get(("type", field_type)) + if handler is not None: + return handler(inputs_grid, row, field_def) + + return self._build_section_standard_field(inputs_grid, row, field_def) + + def _build_section_inputs_from_schema(self, inputs_grid: QGridLayout) -> None: + """Build all section-input rows from schema order.""" + row = 0 + for field in self._schema_fields("section_inputs"): + row = self._build_section_input_from_schema(inputs_grid, row, field) + + def _snapshot_current_state(self) -> dict: + """Capture current UI state for the active pair/member selection. + + Includes schema-driven section-input values and extra designation data + required for robust combo restore (data/text for section selections). + """ + state: dict[str, object] = {} + for field in self._schema_fields("section_inputs"): + field_id = str(field.get("id") or "").strip() + if not field_id: + continue + widget = self._widget_for_field(field_id) + if isinstance(widget, QCheckBox): + state[field_id] = widget.isChecked() + elif isinstance(widget, QComboBox): + state[field_id] = widget.currentText() + elif isinstance(widget, QLineEdit): + state[field_id] = widget.text() + + state["design"] = self._global_design_mode + state["bracing_section_data"] = self.bracing_section_combo.currentData() + state["bracing_section_text"] = self.bracing_section_combo.currentText() + state["top_chord_data"] = self.top_chord_size_combo.currentData() + state["top_chord_text"] = self.top_chord_size_combo.currentText() + state["bottom_chord_data"] = self.bottom_chord_size_combo.currentData() + state["bottom_chord_text"] = self.bottom_chord_size_combo.currentText() + return state + def _store_current_member_state(self) -> None: if not hasattr(self, "select_girders_combo") or not hasattr(self, "member_id_combo"): return @@ -483,23 +901,33 @@ def _apply_state(self, state: dict) -> None: state.get("bracing_section_text") or "", ) - self.top_bracket_type_combo.setCurrentText(state.get("top_bracket_type") or self.top_bracket_type_combo.currentText()) - self._update_designations_for(self.top_bracket_size_combo, self.top_bracket_type_combo.currentText()) + self.top_chord_checkbox.setChecked(bool(state.get("top_chord_enabled", False))) + + self.top_chord_type_combo.setCurrentText(state.get("top_chord_type") or self.top_chord_type_combo.currentText()) + self._update_designations_for(self.top_chord_size_combo, self.top_chord_type_combo.currentText()) self._set_combo_to_data_or_text( - self.top_bracket_size_combo, - state.get("top_bracket_data"), - state.get("top_bracket_text") or "", + self.top_chord_size_combo, + state.get("top_chord_data"), + state.get("top_chord_text") or "", ) - self.bottom_bracket_type_combo.setCurrentText(state.get("bottom_bracket_type") or self.bottom_bracket_type_combo.currentText()) - self._update_designations_for(self.bottom_bracket_size_combo, self.bottom_bracket_type_combo.currentText()) + # For K-bracing, bottom chord is mandatory. + effective_bracing = (state.get("bracing_type") or self.bracing_type_combo.currentText() or "").strip() + if effective_bracing == "K-Bracing": + self.bottom_chord_checkbox.setChecked(True) + else: + self.bottom_chord_checkbox.setChecked(bool(state.get("bottom_chord_enabled", True))) + + self.bottom_chord_type_combo.setCurrentText(state.get("bottom_chord_type") or self.bottom_chord_type_combo.currentText()) + self._update_designations_for(self.bottom_chord_size_combo, self.bottom_chord_type_combo.currentText()) self._set_combo_to_data_or_text( - self.bottom_bracket_size_combo, - state.get("bottom_bracket_data"), - state.get("bottom_bracket_text") or "", + self.bottom_chord_size_combo, + state.get("bottom_chord_data"), + state.get("bottom_chord_text") or "", ) self.spacing_input.setText(state.get("spacing") or "") + self._on_bracing_layout_changed() # Ensure enable/disable and previews match the restored design state. self._on_design_changed(self._global_design_mode) @@ -516,10 +944,12 @@ def _load_state_for_current_member(self) -> None: guard_b = self.bracing_type_combo.blockSignals(True) guard_c = self.bracing_section_type_combo.blockSignals(True) guard_d = self.bracing_section_combo.blockSignals(True) - guard_e = self.top_bracket_type_combo.blockSignals(True) - guard_f = self.top_bracket_size_combo.blockSignals(True) - guard_g = self.bottom_bracket_type_combo.blockSignals(True) - guard_h = self.bottom_bracket_size_combo.blockSignals(True) + guard_d2 = self.top_chord_checkbox.blockSignals(True) + guard_e = self.top_chord_type_combo.blockSignals(True) + guard_f = self.top_chord_size_combo.blockSignals(True) + guard_g2 = self.bottom_chord_checkbox.blockSignals(True) + guard_g = self.bottom_chord_type_combo.blockSignals(True) + guard_h = self.bottom_chord_size_combo.blockSignals(True) try: self._apply_state(state) finally: @@ -527,10 +957,12 @@ def _load_state_for_current_member(self) -> None: self.bracing_type_combo.blockSignals(guard_b) self.bracing_section_type_combo.blockSignals(guard_c) self.bracing_section_combo.blockSignals(guard_d) - self.top_bracket_type_combo.blockSignals(guard_e) - self.top_bracket_size_combo.blockSignals(guard_f) - self.bottom_bracket_type_combo.blockSignals(guard_g) - self.bottom_bracket_size_combo.blockSignals(guard_h) + self.top_chord_checkbox.blockSignals(guard_d2) + self.top_chord_type_combo.blockSignals(guard_e) + self.top_chord_size_combo.blockSignals(guard_f) + self.bottom_chord_checkbox.blockSignals(guard_g2) + self.bottom_chord_type_combo.blockSignals(guard_g) + self.bottom_chord_size_combo.blockSignals(guard_h) # After restoring, refresh previews explicitly. self._update_previews() @@ -620,13 +1052,16 @@ def _create_inner_box(self): ) return box + def _normalize_label_text(self, text: str) -> str: + return str(text or "").rstrip(": ") + def _create_heading_label(self, text): - label = QLabel(text) + label = QLabel(self._normalize_label_text(text)) label.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none;") return label def _create_label(self, text): - label = QLabel(text) + label = QLabel(self._normalize_label_text(text)) label.setStyleSheet("font-size: 11px; font-weight: 400; color: #4b4b4b; border: none;") return label @@ -668,6 +1103,7 @@ def _create_bracing_layout_placeholder(self, text: str, height: int): def _create_preview_box(self, title): box = self._create_inner_box() + box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) layout = QVBoxLayout(box) layout.setContentsMargins(12, 10, 12, 10) layout.setSpacing(8) @@ -675,44 +1111,53 @@ def _create_preview_box(self, title): heading.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none;") layout.addWidget(heading) image = PlaceholderSectionPreviewWidget(title, 110) + image.setFixedHeight(110) layout.addWidget(image) + box.setFixedHeight(154) return box, image def _update_previews(self): - if self.design_combo.currentText() != "Customized": + if self.design_combo.currentText() != "Custom": # Hide geometry when optimization controls the section selection. for widget in [ self.bracing_preview_label, - self.top_bracket_preview_label, - self.bottom_bracket_preview_label, + self.top_chord_preview_label, + self.bottom_chord_preview_label, ]: widget.set_section("", "") return self._set_preview(self.bracing_preview_label, self.bracing_section_type_combo, self.bracing_section_combo) - self._set_preview(self.top_bracket_preview_label, self.top_bracket_type_combo, self.top_bracket_size_combo) - self._set_preview(self.bottom_bracket_preview_label, self.bottom_bracket_type_combo, self.bottom_bracket_size_combo) + if self.top_chord_checkbox.isChecked(): + self._set_preview(self.top_chord_preview_label, self.top_chord_type_combo, self.top_chord_size_combo) + else: + self.top_chord_preview_label.set_section("", "") + if self.bottom_chord_checkbox.isChecked(): + self._set_preview(self.bottom_chord_preview_label, self.bottom_chord_type_combo, self.bottom_chord_size_combo) + else: + self.bottom_chord_preview_label.set_section("", "") def _apply_custom_mode(self, is_custom: bool): - # Only allow manual section selection in Customized mode. + # Only allow manual section selection in Custom mode. # Keep the preview/diagram column visible in Optimized mode (like Girder Details). self.right_column.setVisible(True) for widget in [ self.bracing_section_type_combo, self.bracing_section_combo, - self.top_bracket_type_combo, - self.top_bracket_size_combo, - self.bottom_bracket_type_combo, - self.bottom_bracket_size_combo, + self.top_chord_type_combo, + self.top_chord_size_combo, + self.bottom_chord_type_combo, + self.bottom_chord_size_combo, ]: widget.setEnabled(is_custom) + self._on_bracing_layout_changed() def _on_design_changed(self, label: str): - is_custom = label == "Customized" + is_custom = label == "Custom" self._apply_custom_mode(is_custom) self._update_previews() def set_design_mode(self, mode_str: str) -> None: - mode = "Customized" if str(mode_str or "").strip().lower() == "customized" else "Optimized" + mode = "Custom" if str(mode_str or "").strip().lower() in {"custom", "customized"} else "Optimized" self._global_design_mode = mode if hasattr(self, "design_combo") and self.design_combo is not None: prev = self.design_combo.blockSignals(True) @@ -750,8 +1195,8 @@ def _populate_designations(self): angles = self.catalog.list_angles() self._fill_combo(self.bracing_section_combo, angles, "angle") - self._fill_combo(self.top_bracket_size_combo, angles, "angle") - self._fill_combo(self.bottom_bracket_size_combo, angles, "angle") + self._fill_combo(self.top_chord_size_combo, angles, "angle") + self._fill_combo(self.bottom_chord_size_combo, angles, "angle") def _map_section_type(self, label: str) -> str: mapping = { @@ -767,12 +1212,56 @@ def _on_bracing_type_changed(self, label: str): self._update_designations_for(self.bracing_section_combo, label) self._update_previews() - def _on_top_bracket_type_changed(self, label: str): - self._update_designations_for(self.top_bracket_size_combo, label) + def _on_top_chord_type_changed(self, label: str): + self._update_designations_for(self.top_chord_size_combo, label) self._update_previews() - def _on_bottom_bracket_type_changed(self, label: str): - self._update_designations_for(self.bottom_bracket_size_combo, label) + def _on_bottom_chord_type_changed(self, label: str): + self._update_designations_for(self.bottom_chord_size_combo, label) + self._update_previews() + + def _on_bracing_layout_changed(self, *_args): + if self._updating_chord_rules: + return + self._updating_chord_rules = True + try: + bracing = (self.bracing_type_combo.currentText() or "").strip() + is_custom = self.design_combo.currentText() == "Custom" + + if bracing == "K-Bracing": + self.bottom_chord_checkbox.setChecked(True) + # Keep enabled so the checked state is always visually clear. + self.bottom_chord_checkbox.setEnabled(True) + self.top_chord_checkbox.setEnabled(True) + else: + self.bottom_chord_checkbox.setEnabled(True) + self.top_chord_checkbox.setEnabled(True) + + top_enabled = is_custom and self.top_chord_checkbox.isChecked() + bottom_enabled = is_custom and self.bottom_chord_checkbox.isChecked() + + self.top_chord_type_combo.setEnabled(top_enabled) + self.top_chord_size_combo.setEnabled(top_enabled) + self.bottom_chord_type_combo.setEnabled(bottom_enabled) + self.bottom_chord_size_combo.setEnabled(bottom_enabled) + + self.top_chord_preview_box.setVisible(self.top_chord_checkbox.isChecked()) + show_bottom = self.bottom_chord_checkbox.isChecked() or bracing == "K-Bracing" + if show_bottom and not self.bottom_chord_checkbox.isChecked(): + self.bottom_chord_checkbox.setChecked(True) + self.bottom_chord_preview_box.setVisible(show_bottom) + + if hasattr(self, "bracing_layout_widget") and self.bracing_layout_widget is not None: + self.bracing_layout_widget.set_layout( + bracing, + self.top_chord_checkbox.isChecked(), + self.bottom_chord_checkbox.isChecked(), + self.member_id_display.text() if hasattr(self, "member_id_display") else "", + self.select_girders_combo.currentText() if hasattr(self, "select_girders_combo") else "", + ) + finally: + self._updating_chord_rules = False + self._update_previews() def _update_designations_for(self, combo: QComboBox, type_label: str): @@ -839,21 +1328,27 @@ def collect_data(self): # Backward compatible: keep current selection fields at the top-level. current_pair = (self.select_girders_combo.currentText() or "").strip() current_member = self._current_member_id().strip().upper() - return { + payload: dict[str, object] = { "select_girders": current_pair, "member_id": current_member, - "design": self._global_design_mode, - "bracing_type": self.bracing_type_combo.currentText(), - "bracing_section_type": self.bracing_section_type_combo.currentText(), - "bracing_section": self.bracing_section_combo.currentText(), - "top_bracket_type": self.top_bracket_type_combo.currentText(), - "top_bracket_size": self.top_bracket_size_combo.currentText(), - "bottom_bracket_type": self.bottom_bracket_type_combo.currentText(), - "bottom_bracket_size": self.bottom_bracket_size_combo.currentText(), - "spacing": self.spacing_input.text(), "cross_bracing_by_member": by_member, } + for field in self._schema_fields("section_inputs"): + field_id = str(field.get("id") or "").strip() + if not field_id: + continue + widget = self._widget_for_field(field_id) + if isinstance(widget, QCheckBox): + payload[field_id] = widget.isChecked() + elif isinstance(widget, QComboBox): + payload[field_id] = widget.currentText() + elif isinstance(widget, QLineEdit): + payload[field_id] = widget.text() + + payload["design"] = self._global_design_mode + return payload + def restore_data(self, data: dict) -> None: """Restore previously saved cross bracing inputs.""" if not isinstance(data, dict): diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py index 65a0e9189..c15cdedce 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/end_diaphragm_details_tab.py @@ -24,21 +24,42 @@ from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview from osdagbridge.desktop.ui.widgets.section_viewer import SectionCatalog, SectionPreviewWidget from osdagbridge.desktop.ui.widgets.placeholder_section_preview import PlaceholderSectionPreviewWidget +from .cross_bracing_details_tab import BracingLayoutCadWidget +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import END_DIAPHRAGM_DETAILS_SCHEMA # Reuse the same rolled section catalog that backs the Girder tab. from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.section_properties.girder_details_tab import ( # noqa: E501 _BoundsDialog, + _ThicknessSelectionDialog, girder_properties, - SAIL_APPROVED_THICKNESS_VALUES, ) +from osdagbridge.core.utils.common import SAIL_APPROVED_THICKNESS_VALUES + + +def _choice_value(options: list[str], preferred: str, fallback_index: int = 0) -> str: + """Resolve canonical labels by value first, then safe positional fallback.""" + values = [str(value) for value in (options or [])] + if preferred in values: + return preferred + if 0 <= fallback_index < len(values): + return values[fallback_index] + return preferred + + +VIEW_CROSS_BRACING = _choice_value(list(VALUES_END_DIAPHRAGM_TYPE), "Cross Bracing", 0) +VIEW_ROLLED_BEAM = _choice_value(list(VALUES_END_DIAPHRAGM_TYPE), "Rolled Beam", 1) +VIEW_WELDED_BEAM = _choice_value(list(VALUES_END_DIAPHRAGM_TYPE), "Welded Beam", 2) +DESIGN_OPTIMIZED = _choice_value(list(VALUES_GIRDER_DESIGN_MODE), "Optimized", 0) +DESIGN_CUSTOM = _choice_value(list(VALUES_GIRDER_DESIGN_MODE), "Custom", 1) + class EndDiaphragmDetailsTab(QWidget): """Tab for End Diaphragm Details with type-specific layouts""" def __init__(self, parent=None): super().__init__(parent) self._girder_details_tab = None - self._global_design_mode = "Optimized" + self._global_design_mode = DESIGN_OPTIMIZED self._dimension_bounds = { "total_depth": {"lower": 200.0, "upper": 2000.0, "increment": 25.0}, "top_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, @@ -52,6 +73,7 @@ def __init__(self, parent=None): # Keep all combo boxes strictly uniform in width. self._combo_width = 190 + self._label_col_width = 260 # Persist UI state per (view_type, girder-pair, member-id). # Also sync selection (girder/member index) across all three views. @@ -62,15 +84,20 @@ def __init__(self, parent=None): # Cross bracing uses angle/channel section previews backed by the Osdag DB. self._cross_catalog = SectionCatalog() self._cross_previews = {} + self._cross_preview_boxes = {} + self._updating_cross_chord_rules = False self.cross_right_column = None self.cross_design_combo = None self.cross_bracing_section_type_combo = None self.cross_bracing_section_combo = None - self.cross_top_bracket_type_combo = None - self.cross_top_bracket_size_combo = None - self.cross_bottom_bracket_type_combo = None - self.cross_bottom_bracket_size_combo = None + self.cross_top_chord_checkbox = None + self.cross_top_chord_type_combo = None + self.cross_top_chord_size_combo = None + self.cross_bottom_chord_checkbox = None + self.cross_bottom_chord_type_combo = None + self.cross_bottom_chord_size_combo = None self.cross_bracing_type_combo = None + self.cross_bracing_layout_widget = None self._rolled_property_inputs = {} self._welded_property_inputs = {} @@ -78,11 +105,14 @@ def __init__(self, parent=None): self._welded_preview = None self._rolled_caption = None self._welded_caption = None + self._welded_right_column = None + self._welded_view_layout = None self.rolled_design_combo = None self.welded_design_combo = None self._rolled_inputs = [] self._welded_inputs = [] + self._suppress_welded_thickness_popup = False self.init_ui() def bind_girder_details_tab(self, girder_details_tab) -> None: @@ -182,6 +212,12 @@ def _refresh_member_id_display(self, view_key: str) -> None: finally: display.blockSignals(prev) + if view_key == VIEW_CROSS_BRACING: + try: + self._on_cross_bracing_layout_changed() + except Exception: + pass + def _rebuild_member_ids_for_view(self, view_key: str, previous_member: str = "") -> None: combos = self._selection_by_view.get(view_key) if not combos: @@ -221,66 +257,60 @@ def _selection_key(self, view_key: str) -> str: def _default_state_for_view(self, view_key: str) -> dict: key = (view_key or "").strip() - if key == "Cross Bracing": + if key == VIEW_CROSS_BRACING: angles = [] try: angles = list(self._cross_catalog.list_angles() or []) except Exception: angles = [] first_angle = angles[0] if angles else "" - return { - "design": self._global_design_mode, - "bracing_type": "K-Bracing", - "bracing_section_type": "Angle", + state = self._schema_default_state_for_view(VIEW_CROSS_BRACING) + + state.update({ "bracing_section_data": first_angle, "bracing_section_text": "", - "top_bracket_type": "Angle", - "top_bracket_data": first_angle, - "top_bracket_text": "", - "bottom_bracket_type": "Angle", - "bottom_bracket_data": first_angle, - "bottom_bracket_text": "", - } - if key == "Rolled Beam": + "top_chord_data": first_angle, + "top_chord_text": "", + "bottom_chord_data": first_angle, + "bottom_chord_text": "", + }) + return state + if key == VIEW_ROLLED_BEAM: + state = self._schema_default_state_for_view(VIEW_ROLLED_BEAM) first = "" if self.rolled_is_section_combo is not None and self.rolled_is_section_combo.count() > 0: first = self.rolled_is_section_combo.itemText(0) - return { - "design": self._global_design_mode, - "is_section": first, - } - if key == "Welded Beam": - return { - "design": self._global_design_mode, + state["is_section"] = state.get("is_section") or first + return state + if key == VIEW_WELDED_BEAM: + state = self._schema_default_state_for_view(VIEW_WELDED_BEAM) + state.update({ "welded_values": ["" for _ in (self._welded_inputs or [])], "total_depth_bounds": dict(self._dimension_bounds.get("total_depth") or {}), "top_width_bounds": dict(self._dimension_bounds.get("top_width") or {}), "bottom_width_bounds": dict(self._dimension_bounds.get("bottom_width") or {}), - } + }) + return state return {"design": self._global_design_mode} def _snapshot_view_state(self, view_key: str) -> dict: key = (view_key or "").strip() - if key == "Cross Bracing": - return { - "design": self.cross_design_combo.currentText() if self.cross_design_combo is not None else "", - "bracing_type": self.cross_bracing_type_combo.currentText() if self.cross_bracing_type_combo is not None else "", - "bracing_section_type": self.cross_bracing_section_type_combo.currentText() if self.cross_bracing_section_type_combo is not None else "", + if key == VIEW_CROSS_BRACING: + state = self._snapshot_schema_state_for_view(VIEW_CROSS_BRACING) + + state.update({ "bracing_section_data": self.cross_bracing_section_combo.currentData() if self.cross_bracing_section_combo is not None else None, "bracing_section_text": self.cross_bracing_section_combo.currentText() if self.cross_bracing_section_combo is not None else "", - "top_bracket_type": self.cross_top_bracket_type_combo.currentText() if self.cross_top_bracket_type_combo is not None else "", - "top_bracket_data": self.cross_top_bracket_size_combo.currentData() if self.cross_top_bracket_size_combo is not None else None, - "top_bracket_text": self.cross_top_bracket_size_combo.currentText() if self.cross_top_bracket_size_combo is not None else "", - "bottom_bracket_type": self.cross_bottom_bracket_type_combo.currentText() if self.cross_bottom_bracket_type_combo is not None else "", - "bottom_bracket_data": self.cross_bottom_bracket_size_combo.currentData() if self.cross_bottom_bracket_size_combo is not None else None, - "bottom_bracket_text": self.cross_bottom_bracket_size_combo.currentText() if self.cross_bottom_bracket_size_combo is not None else "", - } - if key == "Rolled Beam": - return { - "design": self.rolled_design_combo.currentText() if self.rolled_design_combo is not None else "", - "is_section": self.rolled_is_section_combo.currentText() if self.rolled_is_section_combo is not None else "", - } - if key == "Welded Beam": + "top_chord_data": self.cross_top_chord_size_combo.currentData() if self.cross_top_chord_size_combo is not None else None, + "top_chord_text": self.cross_top_chord_size_combo.currentText() if self.cross_top_chord_size_combo is not None else "", + "bottom_chord_data": self.cross_bottom_chord_size_combo.currentData() if self.cross_bottom_chord_size_combo is not None else None, + "bottom_chord_text": self.cross_bottom_chord_size_combo.currentText() if self.cross_bottom_chord_size_combo is not None else "", + }) + return state + if key == VIEW_ROLLED_BEAM: + return self._snapshot_schema_state_for_view(VIEW_ROLLED_BEAM) + if key == VIEW_WELDED_BEAM: + state = self._snapshot_schema_state_for_view(VIEW_WELDED_BEAM) values = [] for widget in (self._welded_inputs or []): if isinstance(widget, QComboBox): @@ -289,13 +319,13 @@ def _snapshot_view_state(self, view_key: str) -> dict: values.append(widget.text()) else: values.append("") - return { - "design": self.welded_design_combo.currentText() if self.welded_design_combo is not None else "", + state.update({ "welded_values": values, "total_depth_bounds": dict(self._dimension_bounds.get("total_depth") or {}), "top_width_bounds": dict(self._dimension_bounds.get("top_width") or {}), "bottom_width_bounds": dict(self._dimension_bounds.get("bottom_width") or {}), - } + }) + return state return {"design": ""} def _set_combo_to_data_or_text(self, combo: QComboBox, desired_data, desired_text: str) -> None: @@ -311,69 +341,78 @@ def _set_combo_to_data_or_text(self, combo: QComboBox, desired_data, desired_tex if idx >= 0: combo.setCurrentIndex(idx) - def _apply_view_state(self, view_key: str, state: dict) -> None: - key = (view_key or "").strip() - if key == "Cross Bracing": - if self.cross_design_combo is not None: - self.cross_design_combo.setCurrentText(self._global_design_mode) - if self.cross_bracing_type_combo is not None: - desired = (state.get("bracing_type") or "").strip() - # Backward compatibility: older UI exposed Diagonal/Horizontal. - if desired in {"Diagonal", "Horizontal"}: - desired = "X-Bracing" - if desired and self.cross_bracing_type_combo.findText(desired) >= 0: - self.cross_bracing_type_combo.setCurrentText(desired) - else: - # Keep current selection if desired isn't supported. - self.cross_bracing_type_combo.setCurrentText(self.cross_bracing_type_combo.currentText()) - - if self.cross_bracing_section_type_combo is not None: - self.cross_bracing_section_type_combo.setCurrentText(state.get("bracing_section_type") or self.cross_bracing_section_type_combo.currentText()) - self._cross_update_designations_for(self.cross_bracing_section_combo, self.cross_bracing_section_type_combo.currentText()) - self._set_combo_to_data_or_text( - self.cross_bracing_section_combo, - state.get("bracing_section_data"), - state.get("bracing_section_text") or "", - ) + @staticmethod + def _is_custom_design_label(label: str | None) -> bool: + text = str(label or "").strip().lower() + return text in {DESIGN_CUSTOM.lower(), "customized"} + + def _normalize_bracing_type(self, desired: str) -> str: + text = str(desired or "").strip() + if text in {"Diagonal", "Horizontal"}: + # Backward compatibility for older payload values. + return "X-Bracing" + return text + + def _apply_cross_bracing_view_state(self, state: dict) -> None: + self._apply_schema_state_for_view( + VIEW_CROSS_BRACING, + state, + skip_ids={"bracing_section", "top_chord_size", "bottom_chord_size", "bracing_type"}, + ) + if self.cross_bracing_type_combo is not None: + desired = self._normalize_bracing_type(state.get("bracing_type") or "") + if desired and self.cross_bracing_type_combo.findText(desired) >= 0: + self.cross_bracing_type_combo.setCurrentText(desired) + + if self.cross_bracing_section_type_combo is not None: + self.cross_bracing_section_type_combo.setCurrentText( + state.get("bracing_section_type") + or self._end_schema_default(VIEW_CROSS_BRACING, "bracing_section_type", self.cross_bracing_section_type_combo.currentText()) + ) + self._cross_update_designations_for(self.cross_bracing_section_combo, self.cross_bracing_section_type_combo.currentText()) + self._set_combo_to_data_or_text( + self.cross_bracing_section_combo, + state.get("bracing_section_data"), + state.get("bracing_section_text") or "", + ) - if self.cross_top_bracket_type_combo is not None: - self.cross_top_bracket_type_combo.setCurrentText(state.get("top_bracket_type") or self.cross_top_bracket_type_combo.currentText()) - self._cross_update_designations_for(self.cross_top_bracket_size_combo, self.cross_top_bracket_type_combo.currentText()) - self._set_combo_to_data_or_text( - self.cross_top_bracket_size_combo, - state.get("top_bracket_data"), - state.get("top_bracket_text") or "", - ) + if self.cross_top_chord_type_combo is not None: + self.cross_top_chord_type_combo.setCurrentText(state.get("top_chord_type") or self.cross_top_chord_type_combo.currentText()) + self._cross_update_designations_for(self.cross_top_chord_size_combo, self.cross_top_chord_type_combo.currentText()) + self._set_combo_to_data_or_text( + self.cross_top_chord_size_combo, + state.get("top_chord_data"), + state.get("top_chord_text") or "", + ) - if self.cross_bottom_bracket_type_combo is not None: - self.cross_bottom_bracket_type_combo.setCurrentText(state.get("bottom_bracket_type") or self.cross_bottom_bracket_type_combo.currentText()) - self._cross_update_designations_for(self.cross_bottom_bracket_size_combo, self.cross_bottom_bracket_type_combo.currentText()) - self._set_combo_to_data_or_text( - self.cross_bottom_bracket_size_combo, - state.get("bottom_bracket_data"), - state.get("bottom_bracket_text") or "", - ) + if self.cross_bottom_chord_type_combo is not None: + self.cross_bottom_chord_type_combo.setCurrentText(state.get("bottom_chord_type") or self.cross_bottom_chord_type_combo.currentText()) + self._cross_update_designations_for(self.cross_bottom_chord_size_combo, self.cross_bottom_chord_type_combo.currentText()) + self._set_combo_to_data_or_text( + self.cross_bottom_chord_size_combo, + state.get("bottom_chord_data"), + state.get("bottom_chord_text") or "", + ) - self._on_cross_design_changed(self._global_design_mode) - self._update_cross_previews() - return + self._on_cross_design_changed(self._global_design_mode) + self._on_cross_bracing_layout_changed() + self._update_cross_previews() - if key == "Rolled Beam": - if self.rolled_design_combo is not None: - self.rolled_design_combo.setCurrentText(self._global_design_mode) - if self.rolled_is_section_combo is not None: - desired = state.get("is_section") or "" - if desired: - self.rolled_is_section_combo.setCurrentText(desired) - elif self.rolled_is_section_combo.count() > 0: - self.rolled_is_section_combo.setCurrentIndex(0) - self._on_rolled_design_changed(self._global_design_mode) - self._update_rolled_preview_and_props() - return + def _apply_rolled_view_state(self, state: dict) -> None: + self._apply_schema_state_for_view(VIEW_ROLLED_BEAM, state) + if self.rolled_is_section_combo is not None: + desired = state.get("is_section") or "" + if desired: + self.rolled_is_section_combo.setCurrentText(desired) + elif self.rolled_is_section_combo.count() > 0: + self.rolled_is_section_combo.setCurrentIndex(0) + self._on_rolled_design_changed(self._global_design_mode) + self._update_rolled_preview_and_props() - if key == "Welded Beam": - if self.welded_design_combo is not None: - self.welded_design_combo.setCurrentText(self._global_design_mode) + def _apply_welded_view_state(self, state: dict) -> None: + self._suppress_welded_thickness_popup = True + try: + self._apply_schema_state_for_view(VIEW_WELDED_BEAM, state) total_depth_bounds = state.get("total_depth_bounds") if isinstance(total_depth_bounds, dict): @@ -412,10 +451,24 @@ def _apply_view_state(self, view_key: str, state: dict) -> None: widget.setText(val or "") self._on_welded_design_changed(self._global_design_mode) self._update_welded_preview_and_props() - return + finally: + self._suppress_welded_thickness_popup = False + + def _view_state_apply_handlers(self) -> dict[str, callable]: + return { + VIEW_CROSS_BRACING: self._apply_cross_bracing_view_state, + VIEW_ROLLED_BEAM: self._apply_rolled_view_state, + VIEW_WELDED_BEAM: self._apply_welded_view_state, + } + + def _apply_view_state(self, view_key: str, state: dict) -> None: + key = (view_key or "").strip() + handler = self._view_state_apply_handlers().get(key) + if handler is not None: + handler(state) def set_design_mode(self, mode_str: str) -> None: - mode = "Customized" if str(mode_str or "").strip().lower() == "customized" else "Optimized" + mode = DESIGN_CUSTOM if str(mode_str or "").strip().lower() in {"custom", "customized"} else DESIGN_OPTIMIZED self._global_design_mode = mode for combo in (self.cross_design_combo, self.rolled_design_combo, self.welded_design_combo): @@ -430,8 +483,42 @@ def set_design_mode(self, mode_str: str) -> None: self._on_cross_design_changed(mode) self._on_rolled_design_changed(mode) self._on_welded_design_changed(mode) + self._refresh_type_selector_options() self._restore_all_views_for_current_selection() + def _allowed_end_diaphragm_types(self) -> list[str]: + options = self._end_schema_choices(VIEW_CROSS_BRACING, "type_selector", list(VALUES_END_DIAPHRAGM_TYPE)) + if self._global_design_mode == DESIGN_OPTIMIZED: + options = [value for value in options if value != VIEW_ROLLED_BEAM] + return options + + def _refresh_type_selector_options(self) -> None: + allowed_types = self._allowed_end_diaphragm_types() + if not allowed_types: + return + + desired_type = self.current_type if self.current_type in allowed_types else allowed_types[0] + + self.block_type_sync = True + try: + for selector in list(self.type_selectors or []): + if selector is None: + continue + previous_value = (selector.currentText() or "").strip() + block = selector.blockSignals(True) + try: + selector.clear() + selector.addItems(allowed_types) + fallback_value = desired_type if desired_type in allowed_types else allowed_types[0] + selector.setCurrentText(previous_value if previous_value in allowed_types else fallback_value) + finally: + selector.blockSignals(block) + finally: + self.block_type_sync = False + + if desired_type != self.current_type: + self._set_current_type(desired_type) + def _store_view_state(self, view_key: str) -> None: selection_key = self._selection_key(view_key) if not selection_key: @@ -498,15 +585,15 @@ def _sync_member_index_to_all_views(self, member_idx: int) -> None: def _is_optimized(self, combo: QComboBox | None) -> bool: if combo is None: return False - return (combo.currentText() or "").strip() == "Optimized" + return (combo.currentText() or "").strip() == DESIGN_OPTIMIZED def _design_combo_for_type(self, view_type: str | None) -> QComboBox | None: key = (view_type or "").strip() - if key == "Cross Bracing": + if key == VIEW_CROSS_BRACING: return self.cross_design_combo - if key == "Rolled Beam": + if key == VIEW_ROLLED_BEAM: return self.rolled_design_combo - if key == "Welded Beam": + if key == VIEW_WELDED_BEAM: return self.welded_design_combo return None @@ -516,19 +603,27 @@ def _apply_rolled_custom_mode(self, is_custom: bool) -> None: widget.setEnabled(is_custom) def _on_rolled_design_changed(self, label: str) -> None: - is_custom = (label or "").strip() == "Customized" + is_custom = self._is_custom_design_label(label) self._apply_rolled_custom_mode(is_custom) def _apply_welded_custom_mode(self, is_custom: bool) -> None: for widget in self._welded_inputs: if widget is not None: widget.setEnabled(is_custom) + + if self._welded_right_column is not None: + self._welded_right_column.setVisible(is_custom) + if self._welded_view_layout is not None: + self._welded_view_layout.setStretch(0, 1) + self._welded_view_layout.setStretch(1, 1 if is_custom else 0) + self._update_welded_thickness_value_enabled_state() def _on_welded_design_changed(self, label: str) -> None: - is_custom = (label or "").strip() == "Customized" + is_custom = self._is_custom_design_label(label) self._apply_welded_custom_mode(is_custom) self._update_welded_dimension_field_mode() + self._update_welded_preview_and_props() def init_ui(self): main_layout = QVBoxLayout(self) @@ -538,11 +633,9 @@ def init_ui(self): scroll = QScrollArea() scroll.setWidgetResizable(True) scroll.setFrameShape(QFrame.NoFrame) + scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - scroll.setStyleSheet( - "QScrollArea { border: none; background: transparent; }" - "QScrollArea > QWidget > QWidget { background: transparent; }" - ) + scroll.setStyleSheet("QScrollArea { border: none; background: transparent; }") main_layout.addWidget(scroll) container = QWidget() @@ -553,7 +646,9 @@ def init_ui(self): container_layout.setSpacing(8) self.type_stack = QStackedWidget() + self.type_stack.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) container_layout.addWidget(self.type_stack) + container_layout.addStretch(1) self.views = {} self.view_order = [] @@ -563,19 +658,22 @@ def init_ui(self): self.block_type_sync = False cross_view, cross_selector = self._build_cross_bracing_view() - self._add_type_view("Cross Bracing", cross_view, cross_selector) + self._add_type_view(VIEW_CROSS_BRACING, cross_view, cross_selector) rolled_view, rolled_selector = self._build_rolled_view() - self._add_type_view("Rolled Beam", rolled_view, rolled_selector) + self._add_type_view(VIEW_ROLLED_BEAM, rolled_view, rolled_selector) welded_view, welded_selector = self._build_welded_view() - self._add_type_view("Welded Beam", welded_view, welded_selector) + self._add_type_view(VIEW_WELDED_BEAM, welded_view, welded_selector) + + self._refresh_type_selector_options() - self._set_current_type("Cross Bracing") + self._set_current_type(VIEW_CROSS_BRACING) # Now that all views/widgets exist, restore saved/default state for the # current (girder, member) selection across all views. self._restore_all_views_for_current_selection() def _add_type_view(self, key, widget, type_selector): + widget.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.views[key] = widget self.view_order.append(key) self.type_stack.addWidget(widget) @@ -600,13 +698,18 @@ def _create_inner_box(self): ) return box + def _normalize_label_text(self, text: str) -> str: + return str(text or "").rstrip(": ") + def _create_heading_label(self, text): - label = QLabel(text) + label = QLabel(self._normalize_label_text(text)) + label.setTextFormat(Qt.RichText) label.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none; padding: 0px; margin: 0px;") return label def _create_label(self, text): - label = QLabel(text) + label = QLabel(self._normalize_label_text(text)) + label.setTextFormat(Qt.RichText) label.setStyleSheet("font-size: 11px; font-weight: 400; color: #4b4b4b; border: none;") return label @@ -622,7 +725,7 @@ def _add_grid_row(self, layout, row, text, widget): widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) else: widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - layout.addWidget(widget, row, 1) + layout.addWidget(widget, row, 1, Qt.AlignLeft | Qt.AlignVCenter) return row + 1 def _configure_combo_box(self, combo: QComboBox) -> None: @@ -649,6 +752,162 @@ def _create_line_edit(self, placeholder=""): apply_field_style(line_edit) return line_edit + def _end_schema_field(self, view_key: str, field_id: str) -> dict: + """Return a field definition for a given view and field id. + + Looks up both `overview` and `section_inputs` blocks and returns the + first matching schema field dict. Returns an empty dict when no match + exists or the input id is blank. + """ + views = END_DIAPHRAGM_DETAILS_SCHEMA.get("views", {}) + view_schema = views.get(str(view_key or ""), {}) if isinstance(views, dict) else {} + target = str(field_id or "").strip() + if not target: + return {} + + for section_name in ("overview", "section_inputs"): + fields = view_schema.get(section_name, []) + for field in fields: + if not isinstance(field, dict): + continue + if str(field.get("id") or "").strip() == target: + return field + return {} + + def _end_schema_choices(self, view_key: str, field_id: str, fallback: list[str]) -> list[str]: + """Resolve choices for a schema field with a safe fallback list. + + Returns normalized string values from schema `choices` when available; + otherwise returns the provided fallback values. + """ + field = self._end_schema_field(view_key, field_id) + choices = field.get("choices") or fallback + return [str(value) for value in choices] + + def _end_schema_default(self, view_key: str, field_id: str, fallback: str) -> str: + """Resolve a schema default as a string for UI controls. + + Uses the field `default` when present; otherwise returns the supplied + fallback string. + """ + field = self._end_schema_field(view_key, field_id) + value = field.get("default", fallback) + return str(value) + + def _end_schema_default_value(self, view_key: str, field_id: str, fallback): + """Resolve a schema default preserving the original value type. + + Unlike `_end_schema_default`, this helper does not cast to string. + """ + field = self._end_schema_field(view_key, field_id) + return field.get("default", fallback) + + def _bind_end_schema_widget(self, view_key: str, field_id: str, widget: QWidget) -> None: + """Bind a runtime widget to the schema-declared attribute name. + + If the field provides a `bind` key, this sets `self.` to the + supplied widget so later state snapshot/apply routines can access it. + """ + field = self._end_schema_field(view_key, field_id) + bind_name = str(field.get("bind") or "").strip() + if bind_name: + setattr(self, bind_name, widget) + + def _end_schema_section_inputs(self, view_key: str) -> list[dict]: + """Return normalized `section_inputs` fields for one view. + + Filters out non-dict entries and returns shallow copies for safe local + use. + """ + views = END_DIAPHRAGM_DETAILS_SCHEMA.get("views", {}) + view_schema = views.get(str(view_key or ""), {}) if isinstance(views, dict) else {} + fields = view_schema.get("section_inputs", []) + return [dict(field) for field in fields if isinstance(field, dict)] + + def _schema_default_state_for_view(self, view_key: str) -> dict: + """Build default state payload for all schema fields in a view. + + Rules: + - `design` always follows the current global design mode. + - explicit schema defaults are used first. + - combo fields fall back to first choice. + - checkbox fields default to False. + - other fields default to empty string. + """ + state: dict[str, object] = {} + for field in self._end_schema_section_inputs(view_key): + field_id = str(field.get("id") or "").strip() + if not field_id: + continue + + field_type = str(field.get("type") or "").strip().lower() + if field_id == "design": + state[field_id] = self._global_design_mode + continue + + if "default" in field: + state[field_id] = field.get("default") + elif field_type in {"combo", "combo_dynamic"}: + choices = field.get("choices") or [] + state[field_id] = str(choices[0]) if choices else "" + elif field_type == "checkbox": + state[field_id] = False + else: + state[field_id] = "" + + return state + + def _snapshot_schema_state_for_view(self, view_key: str) -> dict: + """Capture current widget values for schema-bound fields in a view. + + Reads values from widgets referenced by each field's `bind` key and + stores them in a plain state dict keyed by schema field id. + """ + state: dict[str, object] = {} + for field in self._end_schema_section_inputs(view_key): + field_id = str(field.get("id") or "").strip() + bind_name = str(field.get("bind") or "").strip() + if not field_id or not bind_name: + continue + + widget = getattr(self, bind_name, None) + if isinstance(widget, QComboBox): + state[field_id] = widget.currentText() + elif isinstance(widget, QCheckBox): + state[field_id] = widget.isChecked() + elif isinstance(widget, QLineEdit): + state[field_id] = widget.text() + + return state + + def _apply_schema_state_for_view(self, view_key: str, state: dict, skip_ids: set[str] | None = None) -> None: + """Apply a state payload into schema-bound widgets for one view. + + For each schema field with a `bind` target: + - skip fields listed in `skip_ids` + - read desired value from `state` or schema default + - force `design` to current global design mode + - write value to the bound widget based on widget type + """ + skip = set(skip_ids or set()) + for field in self._end_schema_section_inputs(view_key): + field_id = str(field.get("id") or "").strip() + bind_name = str(field.get("bind") or "").strip() + if not field_id or not bind_name or field_id in skip: + continue + + widget = getattr(self, bind_name, None) + desired = state.get(field_id, self._end_schema_default_value(view_key, field_id, "")) + if field_id == "design": + desired = self._global_design_mode + + if isinstance(widget, QComboBox): + widget.setCurrentText(str(desired or "")) + elif isinstance(widget, QCheckBox): + widget.setChecked(bool(desired)) + elif isinstance(widget, QLineEdit): + widget.setText(str(desired or "")) + def _create_mode_value_widget(self, mode_combo: QComboBox, value_input: QLineEdit) -> QWidget: widget = QWidget() widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) @@ -761,7 +1020,9 @@ def _open_bounds_dialog(self, field_key: str) -> None: self._update_welded_preview_and_props() def _update_welded_dimension_field_mode(self) -> None: - is_custom_design = (self.welded_design_combo.currentText() or "").strip().lower() == "customized" if self.welded_design_combo else False + is_custom_design = self._is_custom_design_label( + self.welded_design_combo.currentText() if self.welded_design_combo else "" + ) for field_key in ("total_depth", "top_width", "bottom_width"): value_input = getattr(self, f"welded_{field_key}", None) @@ -796,25 +1057,81 @@ def _sync_thickness_value_dropdown(self, mode_combo: QComboBox | None, value_inp if not self._is_custom_thickness_mode(mode_combo): return - current_text = str(value_input.text() or "").strip() - if current_text not in SAIL_APPROVED_THICKNESS_VALUES: - current_text = SAIL_APPROVED_THICKNESS_VALUES[0] - value_input.setText(current_text) + first = "" + selected = self._parse_selected_thickness_values(value_input.text()) + if selected: + first = selected[0] + else: + current_text = str(value_input.text() or "").strip() + if current_text in SAIL_APPROVED_THICKNESS_VALUES: + first = current_text + + if not first: + first = SAIL_APPROVED_THICKNESS_VALUES[0] + value_input.setText(first) prev = value_combo.blockSignals(True) try: - idx = value_combo.findText(current_text, Qt.MatchFixedString) + idx = value_combo.findText(first, Qt.MatchFixedString) value_combo.setCurrentIndex(idx if idx >= 0 else 0) finally: value_combo.blockSignals(prev) + @staticmethod + def _parse_selected_thickness_values(text: str) -> list[str]: + chunks = [c.strip() for c in str(text or "").split(",") if str(c).strip()] + return [v for v in chunks if v in SAIL_APPROVED_THICKNESS_VALUES] + + def _on_welded_thickness_mode_changed(self, field_key: str, _text: str) -> None: + self._update_welded_thickness_value_enabled_state() + self._update_welded_preview_and_props() + + if self._suppress_welded_thickness_popup: + return + + is_custom_design = self._is_custom_design_label( + self.welded_design_combo.currentText() if self.welded_design_combo else "" + ) + if is_custom_design: + return + + mode_combo = getattr(self, f"{field_key}_combo", None) + if mode_combo is None or not self._is_custom_thickness_mode(mode_combo): + return + + self._open_welded_thickness_values_dialog(field_key) + + def _open_welded_thickness_values_dialog(self, field_key: str) -> None: + value_input = getattr(self, f"{field_key}_value", None) + mode_combo = getattr(self, f"{field_key}_combo", None) + value_combo = getattr(self, f"{field_key}_value_combo", None) + if value_input is None or mode_combo is None: + return + + selected = self._parse_selected_thickness_values(value_input.text()) + titles = { + "welded_web_thickness": "Select Values: Web Thickness", + "welded_top_thickness": "Select Values: Top Flange Thickness", + "welded_bottom_thickness": "Select Values: Bottom Flange Thickness", + } + dialog = _ThicknessSelectionDialog(titles.get(field_key, "Select Values"), selected, self) + if dialog.exec() != QDialog.Accepted: + return + + chosen = dialog.selected_values() + value_input.setText(", ".join(chosen)) + self._sync_thickness_value_dropdown(mode_combo, value_input, value_combo) + self._update_welded_preview_and_props() + def _is_custom_thickness_mode(self, combo: QComboBox | None) -> bool: if combo is None: return False - return (combo.currentText() or "").strip().lower() == "custom" + return (combo.currentText() or "").strip().lower() == DESIGN_CUSTOM.lower() def _update_welded_thickness_value_enabled_state(self) -> None: - is_custom_design = (self.welded_design_combo.currentText() or "").strip() == "Customized" if self.welded_design_combo else False + is_custom_design = self._is_custom_design_label( + self.welded_design_combo.currentText() if self.welded_design_combo else "" + ) for mode_combo, value_input, value_combo, wrapper in ( ( @@ -840,11 +1157,11 @@ def _update_welded_thickness_value_enabled_state(self) -> None: continue # Match Girder welded behavior: - # Customized -> force Custom mode and show SAIL-value dropdown only. + # Custom -> force Custom mode and show SAIL-value dropdown only. if is_custom_design: - if mode_combo.currentText().strip().lower() != "custom": + if mode_combo.currentText().strip().lower() != DESIGN_CUSTOM.lower(): prev = mode_combo.blockSignals(True) - mode_combo.setCurrentText("Custom") + mode_combo.setCurrentText(DESIGN_CUSTOM) mode_combo.blockSignals(prev) mode_combo.setVisible(False) @@ -888,18 +1205,22 @@ def _create_selection_box(self, view_key: str): box = self._create_inner_box() box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) layout = QGridLayout(box) - layout.setContentsMargins(10, 8, 10, 8) + layout.setContentsMargins(12, 8, 12, 8) layout.setHorizontalSpacing(12) layout.setVerticalSpacing(8) - layout.setColumnMinimumWidth(0, 120) + layout.setColumnMinimumWidth(0, int(getattr(self, "_label_col_width", 260))) + layout.setColumnMinimumWidth(1, int(getattr(self, "_combo_width", 190))) + layout.setColumnStretch(0, 0) layout.setColumnStretch(1, 1) girders_combo = QComboBox() # Populated from Girder Details when bound. (No All option.) self._configure_combo_box(girders_combo) apply_field_style(girders_combo) - layout.addWidget(self._create_label("Select Girders:"), 0, 0) - layout.addWidget(girders_combo, 0, 1) + girders_combo.setFixedHeight(28) + girders_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + layout.addWidget(self._create_label("Select Girders:"), 0, 0, Qt.AlignLeft | Qt.AlignVCenter) + layout.addWidget(girders_combo, 0, 1, Qt.AlignLeft | Qt.AlignVCenter) self._select_girders_combos.append(girders_combo) @@ -920,12 +1241,14 @@ def _create_selection_box(self, view_key: str): member_display = QLineEdit() member_display.setReadOnly(True) apply_field_style(member_display) + member_display.setFixedSize(int(getattr(self, "_combo_width", 190)), 28) + member_display.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) try: - member_display.setFixedWidth(int(getattr(self, "_combo_width", 190))) + member_display.setFocusPolicy(Qt.NoFocus) except Exception: pass - layout.addWidget(self._create_label("Member ID:"), 1, 0) - layout.addWidget(member_display, 1, 1) + layout.addWidget(self._create_label("Member ID:"), 1, 0, Qt.AlignLeft | Qt.AlignVCenter) + layout.addWidget(member_display, 1, 1, Qt.AlignLeft | Qt.AlignVCenter) self._member_id_combos.append(member_combo) @@ -985,7 +1308,7 @@ def collect_data(self) -> dict: by_view[view_key][payload["member_id"]] = payload # Current selection (for convenience/backward compatibility). - current_view = str(self.current_type or "").strip() or "Cross Bracing" + current_view = str(self.current_type or "").strip() or VIEW_CROSS_BRACING current_pair = "" current_member = "" combos = self._selection_by_view.get(current_view) @@ -1044,7 +1367,7 @@ def restore_data(self, data: dict) -> None: target_pair = str(data.get("select_girders") or "").strip() target_member = str(data.get("member_id") or "").strip().upper() - combos = self._selection_by_view.get(str(self.current_type or "Cross Bracing")) + combos = self._selection_by_view.get(str(self.current_type or VIEW_CROSS_BRACING)) if combos: girders_combo, member_combo = combos try: @@ -1055,9 +1378,9 @@ def restore_data(self, data: dict) -> None: try: if member_combo is not None: # Ensure items match selected pair, then set member. - self._rebuild_member_ids_for_view(str(self.current_type or "Cross Bracing"), previous_member=target_member) + self._rebuild_member_ids_for_view(str(self.current_type or VIEW_CROSS_BRACING), previous_member=target_member) try: - self._refresh_member_id_display(str(self.current_type or "Cross Bracing")) + self._refresh_member_id_display(str(self.current_type or VIEW_CROSS_BRACING)) except Exception: pass except Exception: @@ -1380,8 +1703,8 @@ def _cross_update_designations_for(self, combo: QComboBox, type_label: str) -> N def _cross_populate_designations(self) -> None: angles = self._cross_catalog.list_angles() self._cross_fill_combo(self.cross_bracing_section_combo, angles, "angle") - self._cross_fill_combo(self.cross_top_bracket_size_combo, angles, "angle") - self._cross_fill_combo(self.cross_bottom_bracket_size_combo, angles, "angle") + self._cross_fill_combo(self.cross_top_chord_size_combo, angles, "angle") + self._cross_fill_combo(self.cross_bottom_chord_size_combo, angles, "angle") def _cross_set_preview(self, key: str, type_combo: QComboBox, size_combo: QComboBox) -> None: widget = self._cross_previews.get(key) @@ -1397,7 +1720,7 @@ def _update_cross_previews(self) -> None: if not self.cross_design_combo: return - is_custom = self.cross_design_combo.currentText() == "Customized" + is_custom = self.cross_design_combo.currentText() == DESIGN_CUSTOM if not is_custom: for widget in self._cross_previews.values(): widget.set_section("", "") @@ -1408,16 +1731,85 @@ def _update_cross_previews(self) -> None: self.cross_bracing_section_type_combo, self.cross_bracing_section_combo, ) - self._cross_set_preview( - "top", - self.cross_top_bracket_type_combo, - self.cross_top_bracket_size_combo, - ) - self._cross_set_preview( - "bottom", - self.cross_bottom_bracket_type_combo, - self.cross_bottom_bracket_size_combo, - ) + top_on = bool(self.cross_top_chord_checkbox is not None and self.cross_top_chord_checkbox.isChecked()) + bottom_on = bool(self.cross_bottom_chord_checkbox is not None and self.cross_bottom_chord_checkbox.isChecked()) + bracing = (self.cross_bracing_type_combo.currentText() if self.cross_bracing_type_combo is not None else "").strip() + + if top_on: + self._cross_set_preview( + "top", + self.cross_top_chord_type_combo, + self.cross_top_chord_size_combo, + ) + else: + top_widget = self._cross_previews.get("top") + if top_widget is not None: + top_widget.set_section("", "") + + show_bottom = bottom_on or bracing == "K-Bracing" + if show_bottom: + self._cross_set_preview( + "bottom", + self.cross_bottom_chord_type_combo, + self.cross_bottom_chord_size_combo, + ) + else: + bottom_widget = self._cross_previews.get("bottom") + if bottom_widget is not None: + bottom_widget.set_section("", "") + + def _on_cross_bracing_layout_changed(self, *_args) -> None: + if self._updating_cross_chord_rules: + return + + self._updating_cross_chord_rules = True + try: + bracing = (self.cross_bracing_type_combo.currentText() if self.cross_bracing_type_combo is not None else "").strip() + is_custom = bool(self.cross_design_combo is not None and self.cross_design_combo.currentText() == DESIGN_CUSTOM) + + if bracing == "K-Bracing" and self.cross_bottom_chord_checkbox is not None: + self.cross_bottom_chord_checkbox.setChecked(True) + + top_checked = bool(self.cross_top_chord_checkbox is not None and self.cross_top_chord_checkbox.isChecked()) + bottom_checked = bool(self.cross_bottom_chord_checkbox is not None and self.cross_bottom_chord_checkbox.isChecked()) + + if self.cross_top_chord_type_combo is not None: + self.cross_top_chord_type_combo.setEnabled(is_custom and top_checked) + if self.cross_top_chord_size_combo is not None: + self.cross_top_chord_size_combo.setEnabled(is_custom and top_checked) + if self.cross_bottom_chord_type_combo is not None: + self.cross_bottom_chord_type_combo.setEnabled(is_custom and bottom_checked) + if self.cross_bottom_chord_size_combo is not None: + self.cross_bottom_chord_size_combo.setEnabled(is_custom and bottom_checked) + + top_box = self._cross_preview_boxes.get("top") + if top_box is not None: + top_box.setVisible(top_checked) + + show_bottom = bottom_checked or bracing == "K-Bracing" + bottom_box = self._cross_preview_boxes.get("bottom") + if bottom_box is not None: + bottom_box.setVisible(show_bottom) + + if self.cross_bracing_layout_widget is not None: + display = self._member_id_display_by_view.get(VIEW_CROSS_BRACING) + member_text = display.text() if display is not None else "" + pair_text = "" + combos = self._selection_by_view.get(VIEW_CROSS_BRACING) + if combos and combos[0] is not None: + pair_text = combos[0].currentText() or "" + self.cross_bracing_layout_widget.set_layout( + bracing, + top_checked, + bottom_checked, + member_text, + pair_text, + ) + finally: + self._updating_cross_chord_rules = False + + self._adjust_type_stack() + self._update_cross_previews() def _apply_cross_custom_mode(self, is_custom: bool) -> None: # Keep preview/diagram column visible even in Optimized mode. @@ -1426,18 +1818,19 @@ def _apply_cross_custom_mode(self, is_custom: bool) -> None: for widget in ( self.cross_bracing_section_type_combo, self.cross_bracing_section_combo, - self.cross_top_bracket_type_combo, - self.cross_top_bracket_size_combo, - self.cross_bottom_bracket_type_combo, - self.cross_bottom_bracket_size_combo, ): if widget is not None: widget.setEnabled(is_custom) + for checkbox in (self.cross_top_chord_checkbox, self.cross_bottom_chord_checkbox): + if checkbox is not None: + checkbox.setEnabled(True) + + self._on_cross_bracing_layout_changed() + def _on_cross_design_changed(self, label: str) -> None: - is_custom = (label or "").strip() == "Customized" + is_custom = (label or "").strip() == DESIGN_CUSTOM self._apply_cross_custom_mode(is_custom) - self._update_cross_previews() # ---- View builders ---- def _build_cross_bracing_view(self): @@ -1447,59 +1840,63 @@ def _build_cross_bracing_view(self): layout.setSpacing(12) left_column = QWidget() + left_column.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) left_layout = QVBoxLayout(left_column) left_layout.setContentsMargins(0, 0, 0, 0) left_layout.setSpacing(6) - left_layout.addWidget(self._create_selection_box("Cross Bracing")) + left_layout.addWidget(self._create_selection_box(VIEW_CROSS_BRACING)) inputs_box = self._create_inner_box() inputs_layout = QVBoxLayout(inputs_box) - inputs_layout.setContentsMargins(12, 4, 12, 8) + inputs_layout.setContentsMargins(12, 8, 12, 8) inputs_layout.setSpacing(6) - title = self._create_heading_label("Section Inputs:") - title.setStyleSheet("font-size: 12px; font-weight: 700; color: #4b4b4b; border: none; margin-top: 0px; margin-bottom: 2px;") - inputs_layout.addWidget(title) + inputs_layout.addWidget(self._create_heading_label("Section Inputs:")) grid = QGridLayout() grid.setContentsMargins(0, 0, 0, 0) grid.setHorizontalSpacing(12) - grid.setVerticalSpacing(10) - grid.setColumnMinimumWidth(0, 130) + grid.setVerticalSpacing(8) + grid.setColumnMinimumWidth(0, int(getattr(self, "_label_col_width", 260))) + grid.setColumnMinimumWidth(1, int(getattr(self, "_combo_width", 190))) grid.setColumnStretch(0, 0) grid.setColumnStretch(1, 1) design_combo = QComboBox() - design_combo.addItems(["Customized", "Optimized"]) - if design_combo.count() > 1: - design_combo.setCurrentIndex(1) # Default to Optimized + design_combo.addItems(self._end_schema_choices(VIEW_CROSS_BRACING, "design", list(VALUES_GIRDER_DESIGN_MODE))) + design_combo.setCurrentText(self._end_schema_default(VIEW_CROSS_BRACING, "design", DESIGN_OPTIMIZED)) self._configure_combo_box(design_combo) apply_field_style(design_combo) design_combo.setVisible(False) row = 0 self.cross_design_combo = design_combo + self._bind_end_schema_widget(VIEW_CROSS_BRACING, "design", design_combo) type_selector = QComboBox() - type_selector.addItems(VALUES_END_DIAPHRAGM_TYPE) - type_selector.setCurrentText("Cross Bracing") + type_selector.addItems(self._end_schema_choices(VIEW_CROSS_BRACING, "type_selector", list(VALUES_END_DIAPHRAGM_TYPE))) + type_selector.setCurrentText(self._end_schema_default(VIEW_CROSS_BRACING, "type_selector", VIEW_CROSS_BRACING)) self._configure_combo_box(type_selector) apply_field_style(type_selector) row = self._add_grid_row(grid, row, "Type:", type_selector) bracing_combo = QComboBox() - # Keep consistent with the standalone Cross Bracing tab. - bracing_combo.addItems(["K-Bracing", "X-Bracing"]) + bracing_combo.addItems(self._end_schema_choices(VIEW_CROSS_BRACING, "bracing_type", ["K-Bracing", "X-Bracing"])) self._configure_combo_box(bracing_combo) apply_field_style(bracing_combo) row = self._add_grid_row(grid, row, "Type of Bracing:", bracing_combo) self.cross_bracing_type_combo = bracing_combo - - section_type_options = [ - "Angle", - "Double Angle (Long Leg)", - "Double Angle (Short Leg)", - "Channel", - "Double Channel", - ] + self._bind_end_schema_widget(VIEW_CROSS_BRACING, "bracing_type", bracing_combo) + + section_type_options = self._end_schema_choices( + VIEW_CROSS_BRACING, + "bracing_section_type", + [ + "Angle", + "Double Angle (Long Leg)", + "Double Angle (Short Leg)", + "Channel", + "Double Channel", + ], + ) bracing_section_type = QComboBox() bracing_section_type.addItems(section_type_options) @@ -1507,48 +1904,66 @@ def _build_cross_bracing_view(self): apply_field_style(bracing_section_type) row = self._add_grid_row(grid, row, "Bracing Section Type:", bracing_section_type) self.cross_bracing_section_type_combo = bracing_section_type + self._bind_end_schema_widget(VIEW_CROSS_BRACING, "bracing_section_type", bracing_section_type) bracing_section_size = QComboBox() self._configure_combo_box(bracing_section_size) apply_field_style(bracing_section_size) - row = self._add_grid_row(grid, row, "Bracing Section:", bracing_section_size) + row = self._add_grid_row(grid, row, "Bracing Section Designation:", bracing_section_size) self.cross_bracing_section_combo = bracing_section_size - top_bracket_type = QComboBox() - top_bracket_type.addItems(section_type_options) - self._configure_combo_box(top_bracket_type) - apply_field_style(top_bracket_type) - row = self._add_grid_row(grid, row, "Top Bracket Section:", top_bracket_type) - self.cross_top_bracket_type_combo = top_bracket_type - - top_bracket_size = QComboBox() - self._configure_combo_box(top_bracket_size) - apply_field_style(top_bracket_size) - row = self._add_grid_row(grid, row, "Top Bracket Size:", top_bracket_size) - self.cross_top_bracket_size_combo = top_bracket_size - - bottom_bracket_type = QComboBox() - bottom_bracket_type.addItems(section_type_options) - self._configure_combo_box(bottom_bracket_type) - apply_field_style(bottom_bracket_type) - row = self._add_grid_row(grid, row, "Bottom Bracket Section:", bottom_bracket_type) - self.cross_bottom_bracket_type_combo = bottom_bracket_type - - bottom_bracket_size = QComboBox() - self._configure_combo_box(bottom_bracket_size) - apply_field_style(bottom_bracket_size) - row = self._add_grid_row(grid, row, "Bottom Bracket Size:", bottom_bracket_size) - self.cross_bottom_bracket_size_combo = bottom_bracket_size + self.cross_top_chord_checkbox = QCheckBox() + self.cross_top_chord_checkbox.setFixedHeight(28) + self.cross_top_chord_checkbox.setStyleSheet("margin-left: 2px;") + self.cross_top_chord_checkbox.setChecked(self._end_schema_default(VIEW_CROSS_BRACING, "top_chord_enabled", "False").lower() == "true") + row = self._add_grid_row(grid, row, "Top Chord:", self.cross_top_chord_checkbox) + self._bind_end_schema_widget(VIEW_CROSS_BRACING, "top_chord_enabled", self.cross_top_chord_checkbox) + + top_chord_type = QComboBox() + top_chord_type.addItems(section_type_options) + self._configure_combo_box(top_chord_type) + apply_field_style(top_chord_type) + row = self._add_grid_row(grid, row, "Top Chord Section Type:", top_chord_type) + self.cross_top_chord_type_combo = top_chord_type + self._bind_end_schema_widget(VIEW_CROSS_BRACING, "top_chord_type", top_chord_type) + + top_chord_size = QComboBox() + self._configure_combo_box(top_chord_size) + apply_field_style(top_chord_size) + row = self._add_grid_row(grid, row, "Top Chord Section Designation:", top_chord_size) + self.cross_top_chord_size_combo = top_chord_size + + self.cross_bottom_chord_checkbox = QCheckBox() + self.cross_bottom_chord_checkbox.setFixedHeight(28) + self.cross_bottom_chord_checkbox.setStyleSheet("margin-left: 2px;") + self.cross_bottom_chord_checkbox.setChecked(self._end_schema_default(VIEW_CROSS_BRACING, "bottom_chord_enabled", "True").lower() == "true") + row = self._add_grid_row(grid, row, "Bottom Chord:", self.cross_bottom_chord_checkbox) + self._bind_end_schema_widget(VIEW_CROSS_BRACING, "bottom_chord_enabled", self.cross_bottom_chord_checkbox) + + bottom_chord_type = QComboBox() + bottom_chord_type.addItems(section_type_options) + self._configure_combo_box(bottom_chord_type) + apply_field_style(bottom_chord_type) + row = self._add_grid_row(grid, row, "Bottom Chord Section Type:", bottom_chord_type) + self.cross_bottom_chord_type_combo = bottom_chord_type + self._bind_end_schema_widget(VIEW_CROSS_BRACING, "bottom_chord_type", bottom_chord_type) + + bottom_chord_size = QComboBox() + self._configure_combo_box(bottom_chord_size) + apply_field_style(bottom_chord_size) + row = self._add_grid_row(grid, row, "Bottom Chord Section Designation:", bottom_chord_size) + self.cross_bottom_chord_size_combo = bottom_chord_size inputs_layout.addLayout(grid) - inputs_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + inputs_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) left_layout.addWidget(inputs_box) - left_layout.addStretch() + left_layout.addStretch(1) layout.addWidget(left_column) right_column = QWidget() self.cross_right_column = right_column + right_column.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) right_layout = QVBoxLayout(right_column) right_layout.setContentsMargins(0, 0, 0, 0) right_layout.setSpacing(10) @@ -1559,11 +1974,13 @@ def _build_cross_bracing_view(self): type_layout.setContentsMargins(12, 8, 12, 10) type_layout.setSpacing(6) type_layout.addWidget(self._create_heading_label("Type of Bracing")) - type_layout.addWidget(self._create_image_placeholder("Bracing Layout", 170)) + self.cross_bracing_layout_widget = BracingLayoutCadWidget(min_height=170) + type_layout.addWidget(self.cross_bracing_layout_widget) right_layout.addWidget(type_box) - for key, title in [("bracing", "Bracing"), ("top", "Top Bracket"), ("bottom", "Bottom Bracket")]: + for key, title in [("bracing", "Bracing"), ("top", "Top Chord"), ("bottom", "Bottom Chord")]: preview_box = self._create_inner_box() + self._cross_preview_boxes[key] = preview_box preview_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) preview_layout = QVBoxLayout(preview_box) preview_layout.setContentsMargins(12, 8, 12, 8) @@ -1579,26 +1996,30 @@ def _build_cross_bracing_view(self): right_layout.addStretch() layout.addWidget(right_column) - layout.setStretch(0, 3) - layout.setStretch(1, 4) + layout.setStretch(0, 1) + layout.setStretch(1, 1) # Wire up dynamic designations + previews (same logic as CrossBracingDetailsTab). design_combo.currentTextChanged.connect(self._on_cross_design_changed) + self.cross_bracing_type_combo.currentTextChanged.connect(self._on_cross_bracing_layout_changed) + self.cross_top_chord_checkbox.toggled.connect(self._on_cross_bracing_layout_changed) + self.cross_bottom_chord_checkbox.toggled.connect(self._on_cross_bracing_layout_changed) + bracing_section_type.currentTextChanged.connect( lambda label: (self._cross_update_designations_for(bracing_section_size, label), self._update_cross_previews()) ) bracing_section_size.currentTextChanged.connect(self._update_cross_previews) - top_bracket_type.currentTextChanged.connect( - lambda label: (self._cross_update_designations_for(top_bracket_size, label), self._update_cross_previews()) + top_chord_type.currentTextChanged.connect( + lambda label: (self._cross_update_designations_for(top_chord_size, label), self._update_cross_previews()) ) - top_bracket_size.currentTextChanged.connect(self._update_cross_previews) + top_chord_size.currentTextChanged.connect(self._update_cross_previews) - bottom_bracket_type.currentTextChanged.connect( - lambda label: (self._cross_update_designations_for(bottom_bracket_size, label), self._update_cross_previews()) + bottom_chord_type.currentTextChanged.connect( + lambda label: (self._cross_update_designations_for(bottom_chord_size, label), self._update_cross_previews()) ) - bottom_bracket_size.currentTextChanged.connect(self._update_cross_previews) + bottom_chord_size.currentTextChanged.connect(self._update_cross_previews) self._cross_populate_designations() self._on_cross_design_changed(design_combo.currentText()) @@ -1611,40 +2032,40 @@ def _build_rolled_view(self): layout.setSpacing(12) left_column = QWidget() + left_column.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) left_layout = QVBoxLayout(left_column) left_layout.setContentsMargins(0, 0, 0, 0) - left_layout.setSpacing(8) - left_layout.addWidget(self._create_selection_box("Rolled Beam")) + left_layout.setSpacing(6) + left_layout.addWidget(self._create_selection_box(VIEW_ROLLED_BEAM)) inputs_box = self._create_inner_box() inputs_layout = QVBoxLayout(inputs_box) - inputs_layout.setContentsMargins(12, 4, 12, 8) + inputs_layout.setContentsMargins(12, 8, 12, 8) inputs_layout.setSpacing(6) - title = self._create_heading_label("Section Inputs") - title.setStyleSheet("font-size: 12px; font-weight: 600; color: #4b4b4b; border: none; margin-top: 0px; margin-bottom: 2px;") - inputs_layout.addWidget(title) + inputs_layout.addWidget(self._create_heading_label("Section Inputs:")) grid = QGridLayout() grid.setContentsMargins(0, 0, 0, 0) grid.setHorizontalSpacing(12) grid.setVerticalSpacing(8) - grid.setColumnMinimumWidth(0, 130) + grid.setColumnMinimumWidth(0, int(getattr(self, "_label_col_width", 260))) + grid.setColumnMinimumWidth(1, int(getattr(self, "_combo_width", 190))) grid.setColumnStretch(0, 0) grid.setColumnStretch(1, 1) design_combo = QComboBox() - design_combo.addItems(["Customized", "Optimized"]) - if design_combo.count() > 1: - design_combo.setCurrentIndex(1) # Default to Optimized + design_combo.addItems(self._end_schema_choices(VIEW_ROLLED_BEAM, "design", list(VALUES_GIRDER_DESIGN_MODE))) + design_combo.setCurrentText(self._end_schema_default(VIEW_ROLLED_BEAM, "design", DESIGN_OPTIMIZED)) self.rolled_design_combo = design_combo + self._bind_end_schema_widget(VIEW_ROLLED_BEAM, "design", design_combo) self._configure_combo_box(design_combo) apply_field_style(design_combo) design_combo.setVisible(False) row = 0 type_selector = QComboBox() - type_selector.addItems(VALUES_END_DIAPHRAGM_TYPE) - type_selector.setCurrentText("Rolled Beam") + type_selector.addItems(self._end_schema_choices(VIEW_ROLLED_BEAM, "type_selector", list(VALUES_END_DIAPHRAGM_TYPE))) + type_selector.setCurrentText(self._end_schema_default(VIEW_ROLLED_BEAM, "type_selector", VIEW_ROLLED_BEAM)) self._configure_combo_box(type_selector) apply_field_style(type_selector) row = self._add_grid_row(grid, row, "Type:", type_selector) @@ -1655,15 +2076,17 @@ def _build_rolled_view(self): self._populate_rolled_sections(is_section_combo) self._add_grid_row(grid, row, "IS Section:", is_section_combo) self.rolled_is_section_combo = is_section_combo + self._bind_end_schema_widget(VIEW_ROLLED_BEAM, "is_section", is_section_combo) self._rolled_inputs = [is_section_combo] inputs_layout.addLayout(grid) - inputs_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + inputs_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) left_layout.addWidget(inputs_box) - left_layout.addStretch() + left_layout.addStretch(1) layout.addWidget(left_column) right_column = QWidget() + right_column.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) right_layout = QVBoxLayout(right_column) right_layout.setContentsMargins(0, 0, 0, 0) right_layout.setSpacing(10) @@ -1692,6 +2115,8 @@ def _build_rolled_view(self): right_layout.addStretch() layout.addWidget(right_column) + layout.setStretch(0, 1) + layout.setStretch(1, 1) design_combo.currentTextChanged.connect(self._on_rolled_design_changed) is_section_combo.currentTextChanged.connect(self._update_rolled_preview_and_props) @@ -1702,60 +2127,64 @@ def _build_rolled_view(self): def _build_welded_view(self): view = self._create_card_frame() layout = QHBoxLayout(view) + self._welded_view_layout = layout layout.setContentsMargins(12, 12, 12, 12) layout.setSpacing(12) left_column = QWidget() + left_column.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) left_layout = QVBoxLayout(left_column) left_layout.setContentsMargins(0, 0, 0, 0) - left_layout.setSpacing(8) - left_layout.addWidget(self._create_selection_box("Welded Beam")) + left_layout.setSpacing(6) + left_layout.addWidget(self._create_selection_box(VIEW_WELDED_BEAM)) inputs_box = self._create_inner_box() inputs_layout = QVBoxLayout(inputs_box) - inputs_layout.setContentsMargins(12, 8, 12, 10) - inputs_layout.setSpacing(8) + inputs_layout.setContentsMargins(12, 8, 12, 8) + inputs_layout.setSpacing(6) inputs_layout.addWidget(self._create_heading_label("Section Inputs:")) grid = QGridLayout() grid.setContentsMargins(0, 0, 0, 0) grid.setHorizontalSpacing(12) - grid.setVerticalSpacing(10) - grid.setColumnMinimumWidth(0, 150) + grid.setVerticalSpacing(8) + grid.setColumnMinimumWidth(0, int(getattr(self, "_label_col_width", 260))) + grid.setColumnMinimumWidth(1, int(getattr(self, "_combo_width", 190))) grid.setColumnStretch(0, 0) grid.setColumnStretch(1, 1) design_combo = QComboBox() - design_combo.addItems(["Customized", "Optimized"]) - if design_combo.count() > 1: - design_combo.setCurrentIndex(1) # Default to Optimized + design_combo.addItems(self._end_schema_choices(VIEW_WELDED_BEAM, "design", list(VALUES_GIRDER_DESIGN_MODE))) + design_combo.setCurrentText(self._end_schema_default(VIEW_WELDED_BEAM, "design", DESIGN_OPTIMIZED)) self.welded_design_combo = design_combo + self._bind_end_schema_widget(VIEW_WELDED_BEAM, "design", design_combo) self._configure_combo_box(design_combo) apply_field_style(design_combo) design_combo.setVisible(False) row = 0 type_selector = QComboBox() - type_selector.addItems(VALUES_END_DIAPHRAGM_TYPE) - type_selector.setCurrentText("Welded Beam") + type_selector.addItems(self._end_schema_choices(VIEW_WELDED_BEAM, "type_selector", list(VALUES_END_DIAPHRAGM_TYPE))) + type_selector.setCurrentText(self._end_schema_default(VIEW_WELDED_BEAM, "type_selector", VIEW_WELDED_BEAM)) self._configure_combo_box(type_selector) apply_field_style(type_selector) row = self._add_grid_row(grid, row, "Type:", type_selector) symmetry_combo = QComboBox() - symmetry_combo.addItems(["Girder Symmetric", "Girder Unsymmetric"]) + symmetry_combo.addItems(self._end_schema_choices(VIEW_WELDED_BEAM, "symmetry", list(VALUES_GIRDER_SYMMETRY))) self._configure_combo_box(symmetry_combo) apply_field_style(symmetry_combo) row = self._add_grid_row(grid, row, "Symmetry:", symmetry_combo) + self._bind_end_schema_widget(VIEW_WELDED_BEAM, "symmetry", symmetry_combo) total_depth_widget, total_depth, total_depth_bounds_button = self._create_dimension_input_widget("total_depth") - row = self._add_grid_row(grid, row, "Total Depth (mm):", total_depth_widget) + row = self._add_grid_row(grid, row, "Total Depth, d (mm):", total_depth_widget) self.welded_total_depth = total_depth self.welded_total_depth_widget = total_depth_widget self.welded_total_depth_bounds_button = total_depth_bounds_button web_thick_combo = QComboBox() - web_thick_combo.addItems(VALUES_PROFILE_SCOPE if "VALUES_PROFILE_SCOPE" in globals() else ["All", "Custom"]) + web_thick_combo.addItems(VALUES_PROFILE_SCOPE) self._configure_combo_box(web_thick_combo) apply_field_style(web_thick_combo) @@ -1768,20 +2197,20 @@ def _build_welded_view(self): pass web_thick_widget = self._create_mode_value_widget(web_thick_combo, web_thick_value) - row = self._add_grid_row(grid, row, "Web Thickness (mm):", web_thick_widget) + row = self._add_grid_row(grid, row, "Web Thickness, wt (mm):", web_thick_widget) self.welded_web_thickness_combo = web_thick_combo self.welded_web_thickness_value = web_thick_value self.welded_web_thickness_widget = web_thick_widget self.welded_web_thickness_value_combo = self._attach_thickness_value_dropdown(web_thick_widget, web_thick_value) top_width_widget, top_width, top_width_bounds_button = self._create_dimension_input_widget("top_width") - row = self._add_grid_row(grid, row, "Width of Top Flange (mm):", top_width_widget) + row = self._add_grid_row(grid, row, "Width of Top Flange, tfw (mm):", top_width_widget) self.welded_top_width = top_width self.welded_top_width_widget = top_width_widget self.welded_top_width_bounds_button = top_width_bounds_button top_thickness_combo = QComboBox() - top_thickness_combo.addItems(VALUES_PROFILE_SCOPE if "VALUES_PROFILE_SCOPE" in globals() else ["All", "Custom"]) + top_thickness_combo.addItems(VALUES_PROFILE_SCOPE) self._configure_combo_box(top_thickness_combo) apply_field_style(top_thickness_combo) @@ -1794,20 +2223,20 @@ def _build_welded_view(self): pass top_thickness_widget = self._create_mode_value_widget(top_thickness_combo, top_thickness_value) - row = self._add_grid_row(grid, row, "Top Flange Thickness (mm):", top_thickness_widget) + row = self._add_grid_row(grid, row, "Top Flange Thickness, tft (mm):", top_thickness_widget) self.welded_top_thickness_combo = top_thickness_combo self.welded_top_thickness_value = top_thickness_value self.welded_top_thickness_widget = top_thickness_widget self.welded_top_thickness_value_combo = self._attach_thickness_value_dropdown(top_thickness_widget, top_thickness_value) bottom_width_widget, bottom_width, bottom_width_bounds_button = self._create_dimension_input_widget("bottom_width") - row = self._add_grid_row(grid, row, "Width of Bottom Flange (mm):", bottom_width_widget) + row = self._add_grid_row(grid, row, "Width of Bottom Flange, bfw (mm):", bottom_width_widget) self.welded_bottom_width = bottom_width self.welded_bottom_width_widget = bottom_width_widget self.welded_bottom_width_bounds_button = bottom_width_bounds_button bottom_thickness_combo = QComboBox() - bottom_thickness_combo.addItems(VALUES_PROFILE_SCOPE if "VALUES_PROFILE_SCOPE" in globals() else ["All", "Custom"]) + bottom_thickness_combo.addItems(VALUES_PROFILE_SCOPE) self._configure_combo_box(bottom_thickness_combo) apply_field_style(bottom_thickness_combo) @@ -1820,7 +2249,7 @@ def _build_welded_view(self): pass bottom_thickness_widget = self._create_mode_value_widget(bottom_thickness_combo, bottom_thickness_value) - row = self._add_grid_row(grid, row, "Bottom Flange Thickness (mm):", bottom_thickness_widget) + row = self._add_grid_row(grid, row, "Bottom Flange Thickness, bft (mm):", bottom_thickness_widget) self.welded_bottom_thickness_combo = bottom_thickness_combo self.welded_bottom_thickness_value = bottom_thickness_value self.welded_bottom_thickness_widget = bottom_thickness_widget @@ -1840,12 +2269,14 @@ def _build_welded_view(self): ] inputs_layout.addLayout(grid) - inputs_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + inputs_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) left_layout.addWidget(inputs_box) - left_layout.addStretch() + left_layout.addStretch(1) layout.addWidget(left_column) right_column = QWidget() + self._welded_right_column = right_column + right_column.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) right_layout = QVBoxLayout(right_column) right_layout.setContentsMargins(0, 0, 0, 0) right_layout.setSpacing(10) @@ -1874,15 +2305,23 @@ def _build_welded_view(self): right_layout.addStretch() layout.addWidget(right_column) + layout.setStretch(0, 1) + layout.setStretch(1, 1) design_combo.currentTextChanged.connect(self._on_welded_design_changed) for watcher in (total_depth, top_width, bottom_width): watcher.textChanged.connect(self._update_welded_preview_and_props) for watcher in (web_thick_value, top_thickness_value, bottom_thickness_value): watcher.textChanged.connect(self._update_welded_preview_and_props) - for combo in (web_thick_combo, top_thickness_combo, bottom_thickness_combo): - combo.currentTextChanged.connect(lambda _t: self._update_welded_thickness_value_enabled_state()) - combo.currentTextChanged.connect(self._update_welded_preview_and_props) + web_thick_combo.currentTextChanged.connect( + lambda text: self._on_welded_thickness_mode_changed("welded_web_thickness", text) + ) + top_thickness_combo.currentTextChanged.connect( + lambda text: self._on_welded_thickness_mode_changed("welded_top_thickness", text) + ) + bottom_thickness_combo.currentTextChanged.connect( + lambda text: self._on_welded_thickness_mode_changed("welded_bottom_thickness", text) + ) self._update_welded_preview_and_props() self._on_welded_design_changed(design_combo.currentText()) self._update_welded_thickness_value_enabled_state() @@ -1896,44 +2335,80 @@ def _handle_type_selection(self, value): if value in self.view_order: self._set_current_type(value) + def _adjust_type_stack(self): + if not hasattr(self, "type_stack"): + return + idx = self.type_stack.currentIndex() + for i in range(self.type_stack.count()): + w = self.type_stack.widget(i) + if i == idx: + w.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + else: + w.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) + def _set_current_type(self, target): + allowed_types = self._allowed_end_diaphragm_types() + if not allowed_types: + return + if target not in self.view_order: return + if target not in allowed_types: + target = allowed_types[0] if self.current_type == target: return previous_type = self.current_type + if previous_type: + try: + # Match tab-switch behavior: commit outgoing view before switching. + self._store_view_state(previous_type) + except Exception: + pass previous_was_optimized = self._is_optimized(self._design_combo_for_type(previous_type)) self.current_type = target index = self.view_order.index(target) self.type_stack.setCurrentIndex(index) + self.block_type_sync = True for selector in self.type_selectors: selector.setCurrentText(target) self.block_type_sync = False + self._adjust_type_stack() + + try: + # Load incoming view state for the active girder/member selection. + self._load_view_state(target) + except Exception: + pass + # If the user was in Optimized mode, keep Optimized when switching types. if previous_was_optimized: next_design_combo = self._design_combo_for_type(target) if next_design_combo is not None: - next_design_combo.setCurrentText("Optimized") - - # Ensure enabled/disabled state matches the selected design for the active view. - if target == "Cross Bracing" and self.cross_design_combo is not None: - self._on_cross_design_changed(self.cross_design_combo.currentText()) - elif target == "Rolled Beam" and self.rolled_design_combo is not None: - self._on_rolled_design_changed(self.rolled_design_combo.currentText()) - elif target == "Welded Beam" and self.welded_design_combo is not None: - self._on_welded_design_changed(self.welded_design_combo.currentText()) - - # Refresh preview/properties for the active view. - if target == "Cross Bracing": - self._update_cross_previews() - elif target == "Rolled Beam": - self._update_rolled_preview_and_props() - elif target == "Welded Beam": - self._update_welded_preview_and_props() + next_design_combo.setCurrentText(DESIGN_OPTIMIZED) + + # Ensure enabled/disabled state and previews are updated using view dispatch. + design_apply_handlers = { + VIEW_CROSS_BRACING: lambda: self._on_cross_design_changed(self.cross_design_combo.currentText()) if self.cross_design_combo is not None else None, + VIEW_ROLLED_BEAM: lambda: self._on_rolled_design_changed(self.rolled_design_combo.currentText()) if self.rolled_design_combo is not None else None, + VIEW_WELDED_BEAM: lambda: self._on_welded_design_changed(self.welded_design_combo.currentText()) if self.welded_design_combo is not None else None, + } + preview_refresh_handlers = { + VIEW_CROSS_BRACING: self._update_cross_previews, + VIEW_ROLLED_BEAM: self._update_rolled_preview_and_props, + VIEW_WELDED_BEAM: self._update_welded_preview_and_props, + } + + design_handler = design_apply_handlers.get(target) + if design_handler is not None: + design_handler() + + preview_handler = preview_refresh_handlers.get(target) + if preview_handler is not None: + preview_handler() # ---- External API ----------------------------------------------------- def reset_defaults(self) -> None: @@ -1958,7 +2433,7 @@ def reset_defaults(self) -> None: # state from a previous selection. try: self.current_type = None - self._set_current_type("Cross Bracing") + self._set_current_type(VIEW_CROSS_BRACING) except Exception: pass diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py index 764e91852..f80e406a8 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/girder_details_tab.py @@ -5,12 +5,13 @@ import sqlite3 from dataclasses import dataclass from pathlib import Path -from typing import Dict, List, Optional +from typing import Callable, Dict, List, Optional -from PySide6.QtCore import Qt -from PySide6.QtGui import QDoubleValidator, QColor, QPalette, QPen +from PySide6.QtCore import Qt, QRectF, QSize +from PySide6.QtGui import QDoubleValidator, QColor, QPalette, QPen, QPainter, QIntValidator, QIcon, QPixmap from PySide6.QtWidgets import ( QAbstractItemView, + QCheckBox, QComboBox, QDialog, QFrame, @@ -33,32 +34,12 @@ QWidget, ) -from osdagbridge.core.utils.common import ( - VALUES_GIRDER_DESIGN_MODE, - VALUES_GIRDER_SPAN_MODE, - VALUES_GIRDER_SYMMETRY, - VALUES_GIRDER_SUPPORT_TYPE, - VALUES_GIRDER_TYPE, - VALUES_PROFILE_SCOPE, - VALUES_TORSIONAL_RESTRAINT, - VALUES_WARPING_RESTRAINT, - VALUES_WEB_TYPE, -) +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import GIRDER_DETAILS_SCHEMA from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.utils.rolled_section_preview import RolledSectionPreview -DEFAULT_MEMBER_LENGTH_M = 30.0 -DEFAULT_DISTANCE_START_M = 0.0 -# Upper bound for girder-specific UI controls (dropdowns/tables). -# This is a UI safety cap; actual girder count is driven by the "No. of Girders" input. -MAX_GIRDER_COUNT = 20 - -SAIL_APPROVED_THICKNESS_VALUES = [ - "8", "10", "12", "14", "16", "18", "20", "22", "25", "28", "32", "36", - "40", "45", "50", "56", "63", "75", "80", "90", "100", "110", "120", -] def _locate_database() -> Path: current = Path(__file__).resolve() for parent in current.parents: @@ -257,6 +238,147 @@ def setModelData(self, editor, model, index): # noqa: N802 (Qt naming) model.setData(index, editor.text()) +class _GirderDetailsSchemaBuilder: + """Local schema-driven widget builder for Girder Details tab.""" + + def __init__(self, owner: QWidget): + self.owner = owner + + def create_widget(self, field_def: dict) -> QWidget: + field_type = str(field_def.get("type") or "line").strip().lower() + + if field_type in {"combo", "combo_dynamic"}: + widget = QComboBox() + for choice in field_def.get("choices") or []: + widget.addItem(str(choice)) + default = field_def.get("default") + if default is not None: + widget.setCurrentText(str(default)) + + elif field_type == "mode_line": + mode_combo = QComboBox() + for choice in field_def.get("mode_choices") or []: + mode_combo.addItem(str(choice)) + default_mode = field_def.get("default_mode") + if default_mode is not None: + mode_combo.setCurrentText(str(default_mode)) + + value_input = QLineEdit() + default_value = field_def.get("default_value") + if default_value is not None: + value_input.setText(str(default_value)) + self._apply_validator(value_input, field_def.get("validator")) + + apply_field_style(mode_combo) + apply_field_style(value_input) + + layout_widget = QWidget() + layout = QHBoxLayout(layout_widget) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(6) + layout.addWidget(mode_combo) + layout.addWidget(value_input) + + bind_mode = field_def.get("bind_mode") + if bind_mode: + setattr(self.owner, str(bind_mode), mode_combo) + bind_value = field_def.get("bind_value") + if bind_value: + setattr(self.owner, str(bind_value), value_input) + + self._connect_handlers(mode_combo, {"on_change": field_def.get("on_mode_change")}) + self._connect_handlers(value_input, { + "on_text_changed": field_def.get("on_text_changed"), + "on_editing_finished": field_def.get("on_editing_finished"), + }) + + widget = layout_widget + + elif field_type == "checkbox": + widget = QCheckBox(str(field_def.get("label") or "")) + widget.setChecked(bool(field_def.get("default", False))) + + else: + widget = QLineEdit() + default = field_def.get("default") + if default is not None: + widget.setText(str(default)) + self._apply_validator(widget, field_def.get("validator")) + if field_def.get("placeholder"): + widget.setPlaceholderText(str(field_def["placeholder"])) + if field_def.get("read_only"): + widget.setReadOnly(True) + + if field_type not in {"checkbox", "mode_line"}: + apply_field_style(widget) + + field_id = field_def.get("id") + if field_id: + widget.setObjectName(str(field_id)) + + width = field_def.get("width") + if width: + try: + widget.setFixedWidth(int(width)) + except Exception: + pass + + enabled = field_def.get("enabled") + if enabled is not None: + widget.setEnabled(bool(enabled)) + + bind_name = field_def.get("bind") + if bind_name: + setattr(self.owner, str(bind_name), widget) + + self._connect_handlers(widget, field_def) + return widget + + def _apply_validator(self, widget: QLineEdit, validator_def: dict | None) -> None: + if not validator_def: + return + + vtype = str(validator_def.get("type") or "").strip().lower() + if vtype == "double_range": + bottom = float(validator_def.get("bottom", 0.0)) + top = float(validator_def.get("top", 1e12)) + decimals = int(validator_def.get("decimals", 3)) + widget.setValidator(QDoubleValidator(bottom, top, decimals, widget)) + return + + if vtype == "int_range": + bottom = int(validator_def.get("bottom", 0)) + top = int(validator_def.get("top", 1_000_000_000)) + widget.setValidator(QIntValidator(bottom, top, widget)) + + def _connect_handlers(self, widget: QWidget, field_def: dict) -> None: + owner = self.owner + + on_change = field_def.get("on_change") + if on_change and isinstance(widget, QComboBox): + handler = getattr(owner, str(on_change), None) + if callable(handler): + widget.currentTextChanged.connect(handler) + + on_text_changed = field_def.get("on_text_changed") + if on_text_changed and isinstance(widget, QLineEdit): + handler = getattr(owner, str(on_text_changed), None) + if callable(handler): + widget.textChanged.connect(handler) + + on_editing_finished = field_def.get("on_editing_finished") + if on_editing_finished and isinstance(widget, QLineEdit): + handler = getattr(owner, str(on_editing_finished), None) + if callable(handler): + widget.editingFinished.connect(handler) + + on_toggled = field_def.get("on_toggled") + if on_toggled and isinstance(widget, QCheckBox): + handler = getattr(owner, str(on_toggled), None) + if callable(handler): + widget.toggled.connect(handler) + + class _BoundsDialog(QDialog): def __init__(self, title: str, bounds: dict, parent=None): super().__init__(parent) @@ -394,9 +516,221 @@ def result_bounds(self) -> Optional[dict]: return self._result +class _GirderCad2DView(QWidget): + """Simple 2D segmented girder view driven by member lengths.""" + + def __init__(self, parent=None): + super().__init__(parent) + self.setFixedHeight(160) + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.setStyleSheet("QWidget { background: #f8f8f8; border: 1px solid #d8d8d8; border-radius: 8px; }") + self._segments: List[dict] = [] + self._selected_member_id: str = "" + self._flange_thickness: float = 15.0 + self._view_mode: str = "side" + + @staticmethod + def _fmt_length(length_m: float) -> str: + text = f"{float(length_m):.3f}".rstrip("0").rstrip(".") + return text if text else "0" + + def set_segments(self, segments: List[Dict[str, float]]) -> None: + cleaned: List[dict] = [] + for segment in segments or []: + start = float(segment.get("start", 0.0)) + end = float(segment.get("end", 0.0)) + length = max(0.0, end - start) + if length <= 0.0: + continue + cleaned.append( + { + "id": str(segment.get("id") or ""), + "length": float(length), + } + ) + self._segments = cleaned + self.update() + + def set_selected_member(self, member_id: str) -> None: + self._selected_member_id = str(member_id or "").strip() + self.update() + + def set_view_mode(self, mode: str) -> None: + normalized = str(mode or "").strip().lower() + if normalized not in {"cross", "side"}: + normalized = "side" + if self._view_mode != normalized: + self._view_mode = normalized + self.update() + + def _paint_cross_section(self, painter: QPainter, drawing_rect: QRectF) -> None: + clear_pen = QPen(QColor("#d0d0d0")) + clear_pen.setWidth(1) + painter.setPen(clear_pen) + painter.setBrush(QColor("#ffffff")) + painter.drawRect(drawing_rect) + + usable = drawing_rect.adjusted(drawing_rect.width() * 0.18, 12.0, -drawing_rect.width() * 0.18, -22.0) + if usable.width() <= 0.0 or usable.height() <= 0.0: + return + + top_width = usable.width() * 0.82 + bottom_width = usable.width() * 0.74 + flange_thickness = max(10.0, min(self._flange_thickness, usable.height() * 0.20)) + web_thickness = max(8.0, min(20.0, usable.width() * 0.10)) + + center_x = usable.center().x() + top_flange = QRectF(center_x - (top_width / 2.0), usable.top(), top_width, flange_thickness) + bottom_flange = QRectF(center_x - (bottom_width / 2.0), usable.bottom() - flange_thickness, bottom_width, flange_thickness) + web_top = top_flange.bottom() + web_bottom = bottom_flange.top() + web = QRectF(center_x - (web_thickness / 2.0), web_top, web_thickness, max(2.0, web_bottom - web_top)) + + painter.setPen(Qt.NoPen) + painter.setBrush(QColor("#c9c9c9")) + painter.drawRect(top_flange) + painter.setBrush(QColor("#dcdcdc")) + painter.drawRect(web) + painter.setBrush(QColor("#c9c9c9")) + painter.drawRect(bottom_flange) + + outline = QPen(QColor("#5e5e5e")) + outline.setWidth(1) + painter.setPen(outline) + painter.setBrush(Qt.NoBrush) + painter.drawRect(top_flange) + painter.drawRect(web) + painter.drawRect(bottom_flange) + + label_member = self._selected_member_id or (str(self._segments[0].get("id") or "") if self._segments else "") + label = f"Cross Section • {label_member}" if label_member else "Cross Section" + painter.setPen(QPen(QColor("#2a2a2a"))) + painter.drawText(drawing_rect.adjusted(8.0, 0.0, -8.0, -2.0), Qt.AlignHCenter | Qt.AlignBottom, label) + + def paintEvent(self, event): # noqa: N802 (Qt naming) + super().paintEvent(event) + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing, True) + + drawing_rect = QRectF(self.rect()).adjusted(10.0, 24.0, -10.0, -18.0) + if drawing_rect.width() <= 0 or drawing_rect.height() <= 0: + return + + outer_fill = QColor("#f4f4f4") + outer_border = QPen(QColor("#d0d0d0")) + outer_border.setWidth(1) + painter.setPen(outer_border) + painter.setBrush(outer_fill) + painter.drawRect(drawing_rect) + + if not self._segments: + painter.setPen(QPen(QColor("#5a5a5a"))) + painter.drawText(drawing_rect, Qt.AlignCenter, "No member segments") + return + + total_length = sum(float(segment["length"]) for segment in self._segments) + if total_length <= 0.0: + return + + if self._view_mode == "cross": + self._paint_cross_section(painter, drawing_rect) + return + + # Monochrome palette for a clean technical look. + fill_palette = [QColor("#f5f5f5"), QColor("#eeeeee"), QColor("#e7e7e7")] + partition_pen = QPen(QColor("#888888")) + partition_pen.setWidth(1) + partition_pen.setStyle(Qt.SolidLine) + + # Keep flanges visually meaningful even for compact/tall drawing areas. + flange_thickness = max(10.0, min(self._flange_thickness, drawing_rect.height() * 0.24)) + web_top = drawing_rect.top() + flange_thickness + web_bottom = drawing_rect.bottom() - flange_thickness + web_height = max(2.0, web_bottom - web_top) + + # Flange-web boundary lines improve structural readability in grayscale. + flange_boundary_pen = QPen(QColor("#3a3a3a")) + flange_boundary_pen.setWidth(1) + girder_outline_pen = QPen(QColor("#3a3a3a")) + girder_outline_pen.setWidth(1) + + x = drawing_rect.left() + partition_xs: List[float] = [] + for index, segment in enumerate(self._segments): + ratio = float(segment["length"]) / total_length + segment_width = drawing_rect.width() * ratio + if index == len(self._segments) - 1: + segment_width = max(1.0, drawing_rect.right() - x) + + segment_rect = QRectF(x, drawing_rect.top(), segment_width, drawing_rect.height()) + top_flange_rect = QRectF(segment_rect.left(), segment_rect.top(), segment_rect.width(), flange_thickness) + web_rect = QRectF(segment_rect.left(), web_top, segment_rect.width(), web_height) + bottom_flange_rect = QRectF(segment_rect.left(), web_bottom, segment_rect.width(), flange_thickness) + base_fill = fill_palette[index % len(fill_palette)] + member_id = str(segment.get("id") or "") + is_selected = bool(self._selected_member_id) and member_id == self._selected_member_id + + top_fill = QColor("#c9c9c9") + web_fill = QColor("#dcdcdc") + bottom_fill = QColor("#c9c9c9") + + painter.setPen(Qt.NoPen) + painter.setBrush(top_fill) + painter.drawRect(top_flange_rect) + painter.setBrush(web_fill) + painter.drawRect(web_rect) + painter.setBrush(bottom_fill) + painter.drawRect(bottom_flange_rect) + + # Draw flange boundaries explicitly so thickness is always visible. + painter.setPen(flange_boundary_pen) + painter.setBrush(Qt.NoBrush) + painter.drawLine(top_flange_rect.bottomLeft(), top_flange_rect.bottomRight()) + painter.drawLine(bottom_flange_rect.topLeft(), bottom_flange_rect.topRight()) + + if is_selected: + painter.setPen(Qt.NoPen) + painter.setBrush(QColor(144, 175, 19, 42)) + painter.drawRect(segment_rect.adjusted(2.0, 2.0, -2.0, -2.0)) + + selected_pen = QPen(QColor("#6f850f")) + selected_pen.setWidth(2) + painter.setPen(selected_pen) + painter.setBrush(Qt.NoBrush) + painter.drawRect(segment_rect.adjusted(1.5, 1.5, -1.5, -1.5)) + + label = f"{segment['id']} ({self._fmt_length(segment['length'])} m)" + painter.setPen(QPen(QColor("#121212"))) + text_margin = 6 + text_rect = segment_rect.adjusted(text_margin, 0, -text_margin, 0) + if text_rect.width() > 18: + elided = painter.fontMetrics().elidedText(label, Qt.ElideRight, int(text_rect.width())) + painter.drawText(text_rect, Qt.AlignCenter, elided) + + if index < len(self._segments) - 1: + partition_xs.append(segment_rect.right()) + + x = segment_rect.right() + + # Draw partitions in a final pass so fills/selection cannot hide them. + painter.setPen(girder_outline_pen) + painter.setBrush(Qt.NoBrush) + painter.drawRect(drawing_rect) + painter.drawLine(drawing_rect.left(), web_top, drawing_rect.right(), web_top) + painter.drawLine(drawing_rect.left(), web_bottom, drawing_rect.right(), web_bottom) + + painter.setPen(partition_pen) + for px in partition_xs: + painter.drawLine( + QRectF(px, drawing_rect.top(), 0.0, drawing_rect.height()).topLeft(), + QRectF(px, drawing_rect.top(), 0.0, drawing_rect.height()).bottomLeft(), + ) + + class _ThicknessSelectionDialog(QDialog): - def __init__(self, title: str, selected_values: List[str], parent=None): + def __init__(self, title: str, selected_values: List[str], allowed_values: List[str], parent=None): super().__init__(parent) + self._allowed_values = [str(v).strip() for v in allowed_values if str(v).strip()] self.setWindowTitle(title) self.setWindowFlags(Qt.Dialog | Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) self.setWindowModality(Qt.ApplicationModal) @@ -425,7 +759,7 @@ def __init__(self, title: str, selected_values: List[str], parent=None): left_col = QVBoxLayout() left_col.setSpacing(8) - left_lbl = QLabel("Available:") + left_lbl = QLabel("Available") left_lbl.setStyleSheet("font-size: 12px; font-weight: 600; color: #1f1f1f;") self.available_list = QListWidget() self.available_list.setSelectionMode(QAbstractItemView.ExtendedSelection) @@ -451,7 +785,7 @@ def __init__(self, title: str, selected_values: List[str], parent=None): right_col = QVBoxLayout() right_col.setSpacing(8) - right_lbl = QLabel("Selected:") + right_lbl = QLabel("Selected") right_lbl.setStyleSheet("font-size: 12px; font-weight: 600; color: #1f1f1f;") self.selected_list = QListWidget() self.selected_list.setSelectionMode(QAbstractItemView.ExtendedSelection) @@ -486,10 +820,10 @@ def __init__(self, title: str, selected_values: List[str], parent=None): submit_row.addStretch(1) layout.addLayout(submit_row) - selected = [v for v in selected_values if v in SAIL_APPROVED_THICKNESS_VALUES] + selected = [v for v in selected_values if v in self._allowed_values] if not selected: - selected = list(SAIL_APPROVED_THICKNESS_VALUES) - available = [v for v in SAIL_APPROVED_THICKNESS_VALUES if v not in selected] + selected = list(self._allowed_values) + available = [v for v in self._allowed_values if v not in selected] self.available_list.addItems(available) self.selected_list.addItems(selected) @@ -557,7 +891,7 @@ def _sort_list(self, widget: QListWidget) -> None: values = [] for i in range(widget.count()): values.append(widget.item(i).text()) - values = sorted(values, key=lambda v: SAIL_APPROVED_THICKNESS_VALUES.index(v) if v in SAIL_APPROVED_THICKNESS_VALUES else 9999) + values = sorted(values, key=lambda v: self._allowed_values.index(v) if v in self._allowed_values else 9999) widget.clear() widget.addItems(values) @@ -572,10 +906,24 @@ def selected_values(self) -> List[str]: class GirderDetailsTab(QWidget): - """Tab for Girder Details styled to match the provided reference.""" + """Tab for Girder Details styled to match the provided reference. + + Flow summary: + 1. Read schema defaults/options (span, girder count cap, thickness values). + 2. Build overview + section-input widgets from GIRDER_DETAILS_SCHEMA. + 3. Initialize/maintain per-girder segment chains (GxMy continuity). + 4. Persist per-member UI state and refresh CAD/preview on edits. + """ def __init__(self, parent=None): super().__init__(parent) + # Centralized schema-driven bootstrap for all runtime defaults/options. + self._schema_builder = _GirderDetailsSchemaBuilder(self) + defaults_cfg = self._schema_config("defaults") + self._default_member_length_m = float(defaults_cfg.get("member_length_m", 25)) + self._default_distance_start_m = float(defaults_cfg.get("distance_start_m", 0.0)) + self._max_girder_count = max(1, int(defaults_cfg.get("max_girder_count", 20))) + self._thickness_values = self._schema_thickness_values() self.welded_rows = [] self.rolled_rows = [] self.symmetry_row = [] @@ -586,8 +934,8 @@ def __init__(self, parent=None): self.segment_chain: Dict[str, List[Dict[str, float]]] = {} self._suppress_distance_updates = False self._suppress_member_state_updates = False - # Always expose up to MAX_GIRDER_COUNT main girders in the UI. - self.available_girders = [f"G{i}" for i in range(1, MAX_GIRDER_COUNT + 1)] + # Always expose up to schema-configured main girders in the UI. + self.available_girders = [f"G{i}" for i in range(1, self._max_girder_count + 1)] self._girder_combo_connected = False # Master-Detail UI state @@ -609,6 +957,10 @@ def __init__(self, parent=None): # Segment Manager widgets (right column) self.girder_dropdown: Optional[QComboBox] = None self.segment_table: Optional[QTableWidget] = None + self.girder_cad_view: Optional[_GirderCad2DView] = None + self.cross_section_view_btn: Optional[QPushButton] = None + self.side_view_btn: Optional[QPushButton] = None + self._girder_view_mode: str = "side" self.split_add_button: Optional[QPushButton] = None self.split_remove_button: Optional[QPushButton] = None @@ -617,16 +969,290 @@ def __init__(self, parent=None): # Section Inputs widgets self.member_id_combo: Optional[QComboBox] = None - self._dimension_bounds = { - "total_depth": {"lower": 200.0, "upper": 2000.0, "increment": 25.0}, - "top_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, - "bottom_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, - } + self._dimension_bounds = self._default_dimension_bounds() + self._member_state_bindings_cache: Optional[list[dict]] = None + self._member_state_aliases_cache: Optional[dict[str, list[str]]] = None + self._legacy_payload_maps_cache: Optional[dict[str, dict[str, str]]] = None self.init_ui() def set_design_mode(self, mode_str: str): - if hasattr(self, "design_combo"): - self.design_combo.setCurrentText(mode_str) + combo = getattr(self, "design_combo", None) + if isinstance(combo, QComboBox): + combo.setCurrentText(mode_str) + + def _schema_field(self, field_id: str, section: str = "section_inputs") -> dict: + for field in GIRDER_DETAILS_SCHEMA.get(section, []): + if str(field.get("id")) == field_id: + return dict(field) + return {} + + def _schema_choices(self, field_id: str, section: str = "section_inputs") -> list[str]: + field = self._schema_field(field_id, section) + return [str(choice) for choice in field.get("choices") or []] + + def _schema_config(self, key: str) -> dict: + """Return a top-level schema config block as a dict (or empty dict).""" + value = GIRDER_DETAILS_SCHEMA.get(key) + return dict(value) if isinstance(value, dict) else {} + + def _schema_section_inputs(self) -> list[dict]: + """Return normalized section-input field definitions from schema.""" + return [dict(field) for field in GIRDER_DETAILS_SCHEMA.get("section_inputs", []) if isinstance(field, dict)] + + def _schema_thickness_values(self) -> list[str]: + """Return allowed thickness values from schema with a safe fallback.""" + values = ( + GIRDER_DETAILS_SCHEMA.get("thickness_values_mm") + or GIRDER_DETAILS_SCHEMA.get("SAIL_APPROVED_THICKNESS_VALUES") + or [] + ) + cleaned = [str(v).strip() for v in values if str(v).strip()] + return cleaned or ["8"] + + def _default_dimension_bounds(self) -> dict[str, dict[str, float]]: + bounds: dict[str, dict[str, float]] = {} + for field in self._schema_section_inputs(): + if str(field.get("type") or "").strip().lower() != "line_with_bounds": + continue + bounds_key = str(field.get("bounds_key") or "").strip() + if not bounds_key: + continue + defaults = field.get("bounds_default") or {} + if not isinstance(defaults, dict): + defaults = {} + bounds[bounds_key] = { + "lower": float(defaults.get("lower", 0.0)), + "upper": float(defaults.get("upper", 0.0)), + "increment": float(defaults.get("increment", 0.0)), + } + return bounds + + def _member_state_aliases(self) -> dict[str, list[str]]: + if self._member_state_aliases_cache is not None: + return dict(self._member_state_aliases_cache) + + aliases: dict[str, set[str]] = {} + for field in self._schema_section_inputs(): + state_key = str(field.get("thickness_key") or field.get("bounds_key") or field.get("id") or "").strip() + if not state_key: + continue + raw_aliases = field.get("aliases") or [] + if not isinstance(raw_aliases, list): + continue + for alias in raw_aliases: + alias_key = str(alias or "").strip() + if not alias_key: + continue + aliases.setdefault(state_key, set()).add(alias_key) + aliases.setdefault(alias_key, set()).add(state_key) + + self._member_state_aliases_cache = {key: sorted(values) for key, values in aliases.items()} + return dict(self._member_state_aliases_cache) + + def _legacy_payload_maps(self) -> dict[str, dict[str, str]]: + if self._legacy_payload_maps_cache is not None: + return {k: dict(v) for k, v in self._legacy_payload_maps_cache.items()} + + current_member: dict[str, str] = {} + welded: dict[str, str] = {} + welded_bounds: dict[str, str] = {} + + # Generalization flow: build compatibility maps from schema metadata + # rather than hardcoded payload key translations in code. + for field in self._schema_section_inputs(): + field_type = str(field.get("type") or "").strip().lower() + field_id = str(field.get("id") or "").strip() + bounds_key = str(field.get("bounds_key") or "").strip() + thickness_key = str(field.get("thickness_key") or field_id).strip() + + payload_key = str(field.get("legacy_payload_key") or "").strip() + if payload_key: + current_member[payload_key] = thickness_key if field_type == "mode_line" else (bounds_key or field_id) + + welded_key = str(field.get("legacy_welded_key") or "").strip() + if welded_key: + welded[welded_key] = thickness_key if field_type == "mode_line" else (bounds_key or field_id) + + welded_mode_key = str(field.get("legacy_welded_mode_key") or "").strip() + if welded_mode_key: + welded[welded_mode_key] = thickness_key + + welded_value_key = str(field.get("legacy_welded_value_key") or "").strip() + if welded_value_key: + welded[welded_value_key] = f"{thickness_key}_value" + + welded_bounds_key = str(field.get("legacy_welded_bounds_key") or "").strip() + if welded_bounds_key and bounds_key: + welded_bounds[welded_bounds_key] = bounds_key + + self._legacy_payload_maps_cache = { + "current_member": current_member, + "welded": welded, + "welded_bounds": welded_bounds, + } + return {k: dict(v) for k, v in self._legacy_payload_maps_cache.items()} + + def _schema_visibility_bucket(self, field_def: dict, *, field_id: str) -> Optional[list]: + bucket_attr = str(field_def.get("row_bucket") or "").strip() + if bucket_attr: + bucket = getattr(self, bucket_attr, None) + if isinstance(bucket, list): + return bucket + + visible_for = {str(v).strip().lower() for v in (field_def.get("visible_for") or [])} + mode_rows = { + "welded": self.welded_rows, + "rolled": self.rolled_rows, + } + for mode, rows in mode_rows.items(): + if mode in visible_for: + return rows + return None + + def _add_schema_field_row(self, grid: QGridLayout, row: int, field_def: dict, widget: QWidget) -> int: + field_id = str(field_def.get("id") or "") + label_text = str(field_def.get("label") or "") + return self._add_box_row( + grid, + row, + label_text, + widget, + self._schema_visibility_bucket(field_def, field_id=field_id), + ) + + def _build_overview_span_field(self, details_layout: QGridLayout, row: int, field_def: dict, widget: QWidget) -> int: + label_text = str(field_def.get("label") or "") + self.span_combo = widget + self._set_field_width(self.span_combo) + self.span_combo.currentTextChanged.connect(self._on_span_changed) + label = self._create_label(label_text) + label.setVisible(False) + self.span_combo.setVisible(False) + details_layout.addWidget(label, row, 0, Qt.AlignLeft | Qt.AlignVCenter) + details_layout.addWidget(self.span_combo, row, 1) + return row + 1 + + def _build_overview_girder_field(self, details_layout: QGridLayout, row: int, field_def: dict, widget: QWidget) -> int: + label_text = str(field_def.get("label") or "") + self.girder_dropdown = widget + for girder in self.available_girders: + display = f"Girder {girder[1:]}" if girder.startswith("G") and girder[1:].isdigit() else girder + self.girder_dropdown.addItem(display, girder) + self._set_field_width(self.girder_dropdown) + self.girder_dropdown.currentIndexChanged.connect(lambda _idx: self._on_girder_changed(self.girder_dropdown.currentData())) + details_layout.addWidget(self._create_label(label_text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) + details_layout.addWidget(self.girder_dropdown, row, 1) + return row + 1 + + def _build_overview_total_span_field(self, details_layout: QGridLayout, row: int, field_def: dict, widget: QWidget) -> int: + label_text = str(field_def.get("label") or "") + self.length_input = widget + self._set_field_width(self.length_input) + self.length_input.setToolTip("Total Span is auto-controlled and cannot be edited here") + self.length_input.textChanged.connect(self._on_length_changed) + details_layout.addWidget(self._create_label(label_text), row, 0, Qt.AlignLeft | Qt.AlignVCenter) + details_layout.addWidget(self.length_input, row, 1) + return row + 1 + + def _overview_schema_handlers(self) -> dict[tuple[str, str], Callable[[QGridLayout, int, dict, QWidget], int]]: + # Generalization flow: schema field id/type -> dedicated builder. + # New field variants are added by extending this map, not branching. + return { + ("id", "span"): self._build_overview_span_field, + ("id", "total_span"): self._build_overview_total_span_field, + ("id", "select_girder"): self._build_overview_girder_field, + } + + def _build_overview_field_from_schema(self, details_layout: QGridLayout, row: int, field_def: dict) -> int: + field_id = str(field_def.get("id") or "") + field_type = str(field_def.get("type") or "").strip().lower() + widget = self._schema_builder.create_widget(field_def) + + # Generalization flow: resolve handler from dispatch table first, + # keep fallback as no-op for unknown/unsupported schema fields. + handlers = self._overview_schema_handlers() + handler = handlers.get(("id", field_id)) or handlers.get(("type", field_type)) + if handler is not None: + return handler(details_layout, row, field_def, widget) + + return row + + def _build_hidden_design_field(self, _grid: QGridLayout, row: int, field_def: dict) -> int: + # Hidden compatibility field: still used by existing behavior and persistence. + self.design_combo = self._schema_builder.create_widget(field_def) + self.design_combo.hide() + return row + + def _build_section_combo_field(self, inputs_grid: QGridLayout, row: int, field_def: dict) -> int: + field_id = str(field_def.get("id") or "") + widget = self._schema_builder.create_widget(field_def) + self._set_field_width(widget) + post_create_hooks = { + "is_section": self._populate_rolled_section_combo, + } + hook = post_create_hooks.get(field_id) + if hook is not None: + hook() + return self._add_schema_field_row(inputs_grid, row, field_def, widget) + + def _build_section_line_field(self, inputs_grid: QGridLayout, row: int, field_def: dict) -> int: + widget = self._schema_builder.create_widget(field_def) + self._set_field_width(widget) + return self._add_schema_field_row(inputs_grid, row, field_def, widget) + + def _build_section_line_with_bounds_field(self, inputs_grid: QGridLayout, row: int, field_def: dict) -> int: + bounds_key = str(field_def.get("bounds_key") or "") + widget, input_widget, bounds_button = self._create_dimension_input_widget(bounds_key) + bind_input = str(field_def.get("bind") or "") + bind_widget = str(field_def.get("bind_widget") or "") + bind_bounds = str(field_def.get("bind_bounds_button") or "") + if bind_input: + setattr(self, bind_input, input_widget) + if bind_widget: + setattr(self, bind_widget, widget) + if bind_bounds: + setattr(self, bind_bounds, bounds_button) + return self._add_schema_field_row(inputs_grid, row, field_def, widget) + + def _build_section_mode_line_field(self, inputs_grid: QGridLayout, row: int, field_def: dict) -> int: + wrapper = self._schema_builder.create_widget(field_def) + self._set_field_width(wrapper, 180) + bind_wrapper = str(field_def.get("bind_wrapper") or "") + if bind_wrapper: + setattr(self, bind_wrapper, wrapper) + + thickness_key = str(field_def.get("thickness_key") or "") + value_input_name = str(field_def.get("bind_value") or "") + value_input = getattr(self, value_input_name, None) if value_input_name else None + if thickness_key and value_input is not None: + self._set_field_width(value_input, 78) + value_combo = self._attach_thickness_value_dropdown(wrapper, value_input, thickness_key) + setattr(self, f"{thickness_key}_value_combo", value_combo) + + return self._add_schema_field_row(inputs_grid, row, field_def, wrapper) + + def _section_schema_handlers(self) -> dict[tuple[str, str], Callable[[QGridLayout, int, dict], int]]: + # Generalization flow: section-input rendering is also dispatch-driven + # so schema additions avoid if/else growth. + return { + ("id", "design"): self._build_hidden_design_field, + ("type", "combo"): self._build_section_combo_field, + ("type", "line"): self._build_section_line_field, + ("type", "line_with_bounds"): self._build_section_line_with_bounds_field, + ("type", "mode_line"): self._build_section_mode_line_field, + } + + def _build_section_input_from_schema(self, inputs_grid: QGridLayout, row: int, field_def: dict) -> int: + field_id = str(field_def.get("id") or "") + field_type = str(field_def.get("type") or "").strip().lower() + + # Generalization flow: id-specific handlers take precedence, then type handlers. + handlers = self._section_schema_handlers() + handler = handlers.get(("id", field_id)) or handlers.get(("type", field_type)) + if handler is not None: + return handler(inputs_grid, row, field_def) + + return row def init_ui(self): main_layout = QVBoxLayout(self) @@ -659,32 +1285,13 @@ def _build_overview_card(self): outer.setHorizontalSpacing(16) outer.setVerticalSpacing(16) - def _cad_placeholder(label: str) -> QFrame: - frame = QFrame() - frame.setFixedHeight(160) - frame.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - frame.setStyleSheet( - "QFrame { border: 2px dashed #b7b7b7; border-radius: 8px; background: #ffffff; }" - ) - layout = QVBoxLayout(frame) - layout.setContentsMargins(10, 10, 10, 10) - layout.setSpacing(0) - text = QLabel(label) - text.setAlignment(Qt.AlignCenter) - text.setStyleSheet("font-size: 12px; font-weight: 700; color: #6f6f6f;") - layout.addWidget(text) - return frame - - # LEFT: Select Girder + Total Span (matches reference layout) + # LEFT: Girder selection and span details. left_panel = self._create_inner_box() left_panel.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) left_layout = QVBoxLayout(left_panel) left_layout.setContentsMargins(12, 10, 12, 10) left_layout.setSpacing(10) - # Placeholder area for CAD diagram (left) - left_layout.addWidget(_cad_placeholder("CAD Diagram Placeholder")) - details_box = QWidget() details_layout = QGridLayout(details_box) details_layout.setContentsMargins(0, 0, 0, 0) @@ -694,37 +1301,9 @@ def _cad_placeholder(label: str) -> QFrame: details_layout.setColumnStretch(0, 0) details_layout.setColumnStretch(1, 1) - # Keep span mode internally (for existing behavior) but hide it to match the reference UI. - self.span_combo = QComboBox() - self.span_combo.addItems(VALUES_GIRDER_SPAN_MODE) - apply_field_style(self.span_combo) - self._set_field_width(self.span_combo) - self.span_combo.currentTextChanged.connect(self._on_span_changed) - span_label = self._create_label("Span:") - span_label.setVisible(False) - self.span_combo.setVisible(False) - details_layout.addWidget(span_label, 0, 0, Qt.AlignLeft | Qt.AlignVCenter) - details_layout.addWidget(self.span_combo, 0, 1) - - details_layout.addWidget(self._create_label("Select Girder:"), 1, 0, Qt.AlignLeft | Qt.AlignVCenter) - self.girder_dropdown = QComboBox() - # Display-friendly names while keeping stable internal IDs. - for girder in self.available_girders: - label = f"Girder {girder[1:]}" if girder.startswith("G") and girder[1:].isdigit() else girder - self.girder_dropdown.addItem(label, girder) - apply_field_style(self.girder_dropdown) - self._set_field_width(self.girder_dropdown) - self.girder_dropdown.currentIndexChanged.connect(lambda _idx: self._on_girder_changed(self.girder_dropdown.currentData())) - details_layout.addWidget(self.girder_dropdown, 1, 1) - - self.length_input = QLineEdit("30") - apply_field_style(self.length_input) - self._set_field_width(self.length_input) - self.length_input.setReadOnly(True) - self.length_input.setToolTip("Total Span is auto-controlled and cannot be edited here") - self.length_input.textChanged.connect(self._on_length_changed) - details_layout.addWidget(self._create_label("Total Span (m):"), 2, 0, Qt.AlignLeft | Qt.AlignVCenter) - details_layout.addWidget(self.length_input, 2, 1) + overview_row = 0 + for field_def in GIRDER_DETAILS_SCHEMA.get("overview", []): + overview_row = self._build_overview_field_from_schema(details_layout, overview_row, field_def) # Exterior/Interior copy buttons layout (Row 3, spans 2 columns) copy_buttons_layout = QHBoxLayout() @@ -766,17 +1345,17 @@ def _cad_placeholder(label: str) -> QFrame: self.member_id_input.setReadOnly(True) self.member_id_input.setVisible(False) - self.distance_start_input = QLineEdit("0") + self.distance_start_input = QLineEdit(str(self._default_distance_start_m)) apply_field_style(self.distance_start_input) self.distance_start_input.setReadOnly(True) self.distance_start_input.setVisible(False) - self.distance_end_input = QLineEdit("30") + self.distance_end_input = QLineEdit(str(self._default_member_length_m)) apply_field_style(self.distance_end_input) self.distance_end_input.editingFinished.connect(self._on_distance_end_changed) self.distance_end_input.setVisible(False) - self.segment_length_input = QLineEdit("30") + self.segment_length_input = QLineEdit(str(self._default_member_length_m)) apply_field_style(self.segment_length_input) self.segment_length_input.setReadOnly(True) self.segment_length_input.setVisible(False) @@ -796,16 +1375,15 @@ def _cad_placeholder(label: str) -> QFrame: manager_layout.setContentsMargins(12, 10, 12, 10) manager_layout.setSpacing(10) - # Placeholder area for CAD diagram (right) - manager_layout.addWidget(_cad_placeholder("CAD Diagram Placeholder")) - table_row = QWidget() table_row_layout = QHBoxLayout(table_row) table_row_layout.setContentsMargins(0, 0, 0, 0) table_row_layout.setSpacing(0) - self.segment_table = QTableWidget(0, 5) - self.segment_table.setHorizontalHeaderLabels(["Member ID", "Start (m)", "End (m)", "Length (m)", "Action"]) + manager_cfg = self._schema_config("segment_manager") + table_headers = manager_cfg.get("table_headers") or ["Member ID", "Start (m)", "End (m)", "Length (m)", "Action"] + self.segment_table = QTableWidget(0, len(table_headers)) + self.segment_table.setHorizontalHeaderLabels([str(v) for v in table_headers]) self.segment_table.horizontalHeader().setVisible(True) self.segment_table.verticalHeader().setVisible(False) self.segment_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch) @@ -813,7 +1391,7 @@ def _cad_placeholder(label: str) -> QFrame: self.segment_table.horizontalHeader().setSectionResizeMode(2, QHeaderView.Stretch) self.segment_table.horizontalHeader().setSectionResizeMode(3, QHeaderView.Stretch) self.segment_table.horizontalHeader().setSectionResizeMode(4, QHeaderView.Fixed) - self.segment_table.setColumnWidth(4, 132) + self.segment_table.setColumnWidth(4, int(manager_cfg.get("action_column_width", 132))) self.segment_table.horizontalHeader().setMinimumHeight(34) self.segment_table.verticalHeader().setDefaultSectionSize(38) self.segment_table.verticalHeader().setMinimumSectionSize(34) @@ -851,6 +1429,44 @@ def _cad_placeholder(label: str) -> QFrame: manager_layout.addWidget(table_row) + # Top dedicated CAD section with view switch buttons. + top_cad_box = self._create_inner_box() + top_cad_layout = QHBoxLayout(top_cad_box) + top_cad_layout.setContentsMargins(12, 10, 12, 10) + top_cad_layout.setSpacing(12) + + self.girder_cad_view = _GirderCad2DView() + top_cad_layout.addWidget(self.girder_cad_view, 1) + + view_switch_col = QVBoxLayout() + view_switch_col.setContentsMargins(0, 0, 0, 0) + view_switch_col.setSpacing(8) + + cad_cfg = self._schema_config("cad_view") + button_defs = cad_cfg.get("buttons") or [] + cross_def = next((b for b in button_defs if str(b.get("mode")) == "cross"), {}) + side_def = next((b for b in button_defs if str(b.get("mode")) == "side"), {}) + + self.cross_section_view_btn = QPushButton(str(cross_def.get("label") or "Cross Section")) + self.cross_section_view_btn.setCheckable(True) + self.cross_section_view_btn.setFixedWidth(int(cross_def.get("width", 130))) + self.cross_section_view_btn.setFixedHeight(int(cross_def.get("height", 32))) + + self.side_view_btn = QPushButton(str(side_def.get("label") or "Side View")) + self.side_view_btn.setCheckable(True) + self.side_view_btn.setFixedWidth(int(side_def.get("width", 130))) + self.side_view_btn.setFixedHeight(int(side_def.get("height", 32))) + + self.cross_section_view_btn.clicked.connect(lambda _checked: self._set_girder_cad_view_mode("cross")) + self.side_view_btn.clicked.connect(lambda _checked: self._set_girder_cad_view_mode("side")) + + view_switch_col.addWidget(self.cross_section_view_btn) + view_switch_col.addWidget(self.side_view_btn) + view_switch_col.addStretch(1) + top_cad_layout.addLayout(view_switch_col) + + self._set_girder_cad_view_mode("side") + # Remove local add to layout, we will build the grid at the end # outer.addWidget(left_panel, 1) # outer.addWidget(manager_box, 1) @@ -863,8 +1479,12 @@ def _cad_placeholder(label: str) -> QFrame: self._on_span_changed(self.span_combo.currentText()) self._on_girder_changed(self._current_girder) - outer.addWidget(left_panel, 0, 0) - outer.addWidget(manager_box, 0, 1) + # Row 0: CAD + view switching controls (spans full width). + outer.addWidget(top_cad_box, 0, 0, 1, 2) + + # Row 1: details and member table. + outer.addWidget(left_panel, 1, 0) + outer.addWidget(manager_box, 1, 1) # Build Section Properties (Inputs + Preview) inline with the grid layout # for perfect vertical alignment of left/right columns. @@ -880,8 +1500,8 @@ def _cad_placeholder(label: str) -> QFrame: right_col_widget = section_layout.itemAt(1).widget() # Re-parent them to the main card just in case, though adding to layout handles it. - outer.addWidget(left_col_widget, 1, 0) - outer.addWidget(right_col_widget, 1, 1) + outer.addWidget(left_col_widget, 2, 0) + outer.addWidget(right_col_widget, 2, 1) # Set column stretch to match left/right panels (equal width usually) outer.setColumnStretch(0, 1) @@ -906,19 +1526,20 @@ def _migrate_member_state_key(self, girder: str, old_id: str, new_id: str) -> No self._dirty_members.add((girder, new_id)) def _initialize_segment_chain_if_needed(self) -> None: - """Ensure each available girder has at least one segment spanning the total span.""" - total_span = self._get_total_span() or DEFAULT_MEMBER_LENGTH_M + """Seed one full-span segment per girder when no chain exists yet.""" + total_span = self._get_total_span() or self._default_member_length_m if not self.segment_chain: for girder in self.available_girders: self.segment_chain[girder] = [ - {"id": self._make_segment_id(girder, 1), "start": 0.0, "end": float(total_span)}, + {"id": self._make_segment_id(girder, 1), "start": self._default_distance_start_m, "end": float(total_span)}, ] def _ensure_girder_segments(self, girder: str) -> List[Dict[str, float]]: - total_span = self._get_total_span() or DEFAULT_MEMBER_LENGTH_M + """Return canonical segment list for a girder and repair legacy/missing fields.""" + total_span = self._get_total_span() or self._default_member_length_m segments = self.segment_chain.get(girder) if not segments: - segments = [{"id": self._make_segment_id(girder, 1), "start": 0.0, "end": float(total_span)}] + segments = [{"id": self._make_segment_id(girder, 1), "start": self._default_distance_start_m, "end": float(total_span)}] self.segment_chain[girder] = segments # Normalize ids to the requested GxMy format, migrating any stored member-state. @@ -942,7 +1563,7 @@ def _ensure_girder_segments(self, girder: str) -> List[Dict[str, float]]: # Keep explicit user-entered starts/ends as-is; only fill missing values. if "start" not in segments[0] or segments[0]["start"] is None: - segments[0]["start"] = 0.0 + segments[0]["start"] = self._default_distance_start_m for i in range(1, len(segments)): if "start" not in segments[i] or segments[i]["start"] is None: segments[i]["start"] = float(segments[i - 1].get("end", 0.0)) @@ -955,10 +1576,62 @@ def _fmt_m(value: float) -> str: text = f"{value:.3f}".rstrip("0").rstrip(".") return text if text else "0" + def _update_girder_cad_view(self, girder: str, segments: Optional[List[Dict[str, float]]] = None, selected_index: Optional[int] = None) -> None: + if not self.girder_cad_view: + return + cad_segments = segments if segments is not None else self._ensure_girder_segments(girder) + self.girder_cad_view.set_view_mode(self._girder_view_mode) + self.girder_cad_view.set_segments(cad_segments) + if not cad_segments: + self.girder_cad_view.set_selected_member("") + return + + idx = self._current_segment_index if selected_index is None else int(selected_index) + idx = max(0, min(idx, len(cad_segments) - 1)) + selected_member_id = str(cad_segments[idx].get("id") or "") + self.girder_cad_view.set_selected_member(selected_member_id) + + def _set_girder_cad_view_mode(self, mode: str) -> None: + normalized = str(mode or "").strip().lower() + if normalized not in {"cross", "side"}: + normalized = "side" + self._girder_view_mode = normalized + + if self.girder_cad_view is not None: + self.girder_cad_view.set_view_mode(normalized) + + is_cross = normalized == "cross" + if self.cross_section_view_btn is not None: + block = self.cross_section_view_btn.blockSignals(True) + self.cross_section_view_btn.setChecked(is_cross) + self.cross_section_view_btn.blockSignals(block) + if self.side_view_btn is not None: + block = self.side_view_btn.blockSignals(True) + self.side_view_btn.setChecked(not is_cross) + self.side_view_btn.blockSignals(block) + + active_style = ( + "QPushButton { background: #f2f2f2; border: 1px solid #4a4a4a; border-radius: 2px; " + "color: #1f1f1f; font-size: 12px; font-weight: 600; }" + "QPushButton:hover { background: #f2f2f2; }" + "QPushButton:pressed { background: #e7e7e7; }" + ) + inactive_style = ( + "QPushButton { background: #ffffff; border: 1px solid #8f8f8f; border-radius: 2px; " + "color: #2f2f2f; font-size: 12px; font-weight: 500; }" + "QPushButton:hover { background: #f5f5f5; }" + "QPushButton:pressed { background: #ececec; }" + ) + if self.cross_section_view_btn is not None: + self.cross_section_view_btn.setStyleSheet(active_style if is_cross else inactive_style) + if self.side_view_btn is not None: + self.side_view_btn.setStyleSheet(active_style if not is_cross else inactive_style) + def _refresh_segment_list(self, girder: str) -> None: + segments = self._ensure_girder_segments(girder) + self._update_girder_cad_view(girder, segments, self._current_segment_index) if not self.segment_table: return - segments = self._ensure_girder_segments(girder) self.segment_table.blockSignals(True) try: # Hard reset row widgets/items each refresh to avoid stale cell-widgets @@ -1054,50 +1727,84 @@ def _update_segment_action_row_highlight(self, current_row: int | None = None) - def _create_segment_action_widget(self, row: int, can_remove: bool) -> QWidget: container = QWidget() container.setObjectName("segmentActionCell") - container.setFixedWidth(118) + container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) container.setMinimumHeight(28) container.setMaximumHeight(34) layout = QHBoxLayout(container) - layout.setContentsMargins(0, 2, 0, 2) - layout.setSpacing(6) + layout.setContentsMargins(6, 2, 6, 2) + layout.setSpacing(8) layout.setAlignment(Qt.AlignCenter) container.setStyleSheet("QWidget#segmentActionCell { background: transparent; border: none; }") - add_btn = QPushButton("+") + add_btn = QPushButton("") add_btn.setObjectName("segmentAddBtn") - add_btn.setFixedSize(34, 24) + add_btn.setFixedSize(36, 24) + add_btn.setIcon(self._segment_action_icon("add")) + add_btn.setIconSize(QSize(12, 12)) add_btn.setFocusPolicy(Qt.NoFocus) add_btn.setCursor(Qt.PointingHandCursor) add_btn.setToolTip("Split/Add segment") add_btn.setStyleSheet( - "QPushButton { background-color: #90AF13; color: #111111; border: 1px solid #6f850f; border-radius: 7px; font-weight: 900; font-size: 17px; }" + "QPushButton { background-color: #90AF13; border: 1px solid #6f850f; border-radius: 8px; }" "QPushButton:hover { background-color: #7a9410; }" "QPushButton:pressed { background-color: #6a840d; }" ) add_btn.clicked.connect(lambda _checked=False, r=row: self._on_add_segment_for_row(r)) - remove_btn = QPushButton("−") + remove_btn = QPushButton("") remove_btn.setObjectName("segmentRemoveBtn") - remove_btn.setFixedSize(34, 24) + remove_btn.setFixedSize(36, 24) + remove_btn.setIcon(self._segment_action_icon("remove")) + remove_btn.setIconSize(QSize(12, 12)) remove_btn.setFocusPolicy(Qt.NoFocus) remove_btn.setCursor(Qt.PointingHandCursor) remove_btn.setEnabled(can_remove) remove_btn.setToolTip("Remove this segment" if can_remove else "At least one segment is required") remove_btn.setStyleSheet( - "QPushButton { background-color: #c72626; color: #ffffff; border: 1px solid #8f1c1c; border-radius: 7px; font-weight: 900; font-size: 17px; }" + "QPushButton { background-color: #c72626; border: 1px solid #8f1c1c; border-radius: 8px; }" "QPushButton:hover { background-color: #ae1f1f; }" "QPushButton:pressed { background-color: #991a1a; }" "QPushButton:disabled { background-color: #d6d6d6; color: #8c8c8c; border-color: #d6d6d6; }" ) remove_btn.clicked.connect(lambda _checked=False, r=row: self._on_remove_segment_for_row(r)) - layout.addStretch(1) layout.addWidget(add_btn) - if can_remove: - layout.addWidget(remove_btn) - layout.addStretch(1) + layout.addWidget(remove_btn) return container + def _segment_action_icon(self, kind: str) -> QIcon: + """Return cached crisp +/- icons so button visuals don't depend on font rendering.""" + cache = getattr(self, "_segment_action_icon_cache", None) + if cache is None: + cache = {} + self._segment_action_icon_cache = cache + + key = str(kind or "").strip().lower() + if key in cache: + return cache[key] + + pixmap = QPixmap(12, 12) + pixmap.fill(Qt.transparent) + + painter = QPainter(pixmap) + try: + painter.setRenderHint(QPainter.Antialiasing, False) + painter.setPen(Qt.NoPen) + painter.setBrush(QColor("#ffffff")) + + # Horizontal stroke (common for both plus/minus). + painter.drawRect(1, 5, 10, 2) + + # Vertical stroke only for plus icon. + if key == "add": + painter.drawRect(5, 1, 2, 10) + finally: + painter.end() + + icon = QIcon(pixmap) + cache[key] = icon + return icon + def _on_add_segment_for_row(self, row: int) -> None: if self.segment_table is None: return @@ -1142,15 +1849,15 @@ def _mark_current_member_dirty(self) -> None: return girder, member_id = self._current_member_key() self._dirty_members.add((girder, member_id)) + # Autosave immediately on each state change. + self._commit_current_member_state() def _is_current_member_dirty(self) -> bool: return self._current_member_key() in self._dirty_members def has_unsaved_changes(self) -> bool: - # Show unsaved-warning popups only for the active member the user is - # currently editing. Other member-level dirty flags are handled when - # switching member/girder and should not block unrelated tab switches. - return self._is_current_member_dirty() + # Member state is auto-committed on change. + return False def _commit_current_member_state(self) -> None: girder, member_id = self._current_member_key() @@ -1159,33 +1866,133 @@ def _commit_current_member_state(self) -> None: self._member_state[girder][member_id] = self._capture_member_state() self._dirty_members.discard((girder, member_id)) + def _member_state_bindings(self) -> list[dict]: + if self._member_state_bindings_cache is not None: + return list(self._member_state_bindings_cache) + + # Generalization flow: derive state capture/apply wiring from schema once, + # then reuse cached bindings for capture, apply, and dirty tracking. + bindings: list[dict] = [] + for field_def in GIRDER_DETAILS_SCHEMA.get("section_inputs", []): + field_id = str(field_def.get("id") or "").strip() + if not field_id: + continue + + field_type = str(field_def.get("type") or "").strip().lower() + if field_type == "combo": + bind_name = str(field_def.get("bind") or "").strip() + if bind_name: + bindings.append({ + "state_key": field_id, + "widget_attr": bind_name, + "widget_type": "combo", + }) + continue + + if field_type == "line": + bind_name = str(field_def.get("bind") or "").strip() + if bind_name: + bindings.append({ + "state_key": field_id, + "widget_attr": bind_name, + "widget_type": "line", + }) + continue + + if field_type == "line_with_bounds": + bind_name = str(field_def.get("bind") or "").strip() + bounds_key = str(field_def.get("bounds_key") or "").strip() + if bind_name: + bindings.append({ + "state_key": bounds_key or field_id, + "widget_attr": bind_name, + "widget_type": "line", + "bounds_key": bounds_key or field_id, + }) + continue + + if field_type == "mode_line": + thickness_key = str(field_def.get("thickness_key") or field_id).strip() + bind_mode = str(field_def.get("bind_mode") or "").strip() + bind_value = str(field_def.get("bind_value") or "").strip() + if bind_mode: + bindings.append({ + "state_key": thickness_key, + "widget_attr": bind_mode, + "widget_type": "combo", + }) + if bind_value: + bindings.append({ + "state_key": f"{thickness_key}_value", + "widget_attr": bind_value, + "widget_type": "line", + }) + + self._member_state_bindings_cache = list(bindings) + return list(bindings) + + def _iter_member_state_widgets(self): + for binding in self._member_state_bindings(): + widget = getattr(self, str(binding.get("widget_attr") or ""), None) + if widget is None: + continue + yield binding, widget + + def _read_member_state_input(self, inputs: dict, key: str, default: str = "") -> str: + if not isinstance(inputs, dict): + return default + aliases = self._member_state_aliases().get(key, []) + for candidate in [key, *aliases]: + value = inputs.get(candidate) + if value is None: + continue + if isinstance(value, str): + return value + return str(value) + return default + + def _set_dimension_bounds_from_state(self, inputs: dict, bounds_key: str) -> None: + bounds_value = inputs.get(f"{bounds_key}_bounds") if isinstance(inputs, dict) else None + if not isinstance(bounds_value, dict): + return + + defaults = self._default_dimension_bounds().get( + bounds_key, + {"lower": 0.0, "upper": 0.0, "increment": 0.0}, + ) + self._dimension_bounds[bounds_key] = { + "lower": float(bounds_value.get("lower", defaults.get("lower", 0.0))), + "upper": float(bounds_value.get("upper", defaults.get("upper", 0.0))), + "increment": float(bounds_value.get("increment", defaults.get("increment", 0.0))), + } + def _capture_member_state(self) -> dict: """Capture Section Inputs for the current member (properties are derived).""" - return { - "inputs": { - "design": self.design_combo.currentText() if hasattr(self, "design_combo") else "", - "type": self.type_combo.currentText() if hasattr(self, "type_combo") else "", - "support_type": self.support_type_combo.currentText() if hasattr(self, "support_type_combo") else "", - "symmetry": self.symmetry_combo.currentText() if hasattr(self, "symmetry_combo") else "", - "total_depth": self.total_depth_input.text() if hasattr(self, "total_depth_input") else "", - "top_width": self.top_width_input.text() if hasattr(self, "top_width_input") else "", - "bottom_width": self.bottom_width_input.text() if hasattr(self, "bottom_width_input") else "", - "total_depth_bounds": dict(self._dimension_bounds.get("total_depth") or {}), - "top_width_bounds": dict(self._dimension_bounds.get("top_width") or {}), - "bottom_width_bounds": dict(self._dimension_bounds.get("bottom_width") or {}), - "web_thickness": self.web_thickness_combo.currentText() if hasattr(self, "web_thickness_combo") else "", - "top_thickness": self.top_thickness_combo.currentText() if hasattr(self, "top_thickness_combo") else "", - "bottom_thickness": self.bottom_thickness_combo.currentText() if hasattr(self, "bottom_thickness_combo") else "", - "web_thickness_value": self.web_thickness_value_input.text() if hasattr(self, "web_thickness_value_input") else "", - "top_thickness_value": self.top_thickness_value_input.text() if hasattr(self, "top_thickness_value_input") else "", - "bottom_thickness_value": self.bottom_thickness_value_input.text() if hasattr(self, "bottom_thickness_value_input") else "", - "support_width": self.support_width_input.text() if hasattr(self, "support_width_input") else "", - "is_section": self.is_section_combo.currentText() if hasattr(self, "is_section_combo") else "", - "torsion": self.torsion_combo.currentText() if hasattr(self, "torsion_combo") else "", - "warping": self.warping_combo.currentText() if hasattr(self, "warping_combo") else "", - "web_type": self.web_type_combo.currentText() if hasattr(self, "web_type_combo") else "", - } - } + inputs: dict[str, str | dict] = {} + # Generalization flow: iterate schema-derived bindings instead of + # manually enumerating widgets. + for binding, widget in self._iter_member_state_widgets(): + state_key = str(binding.get("state_key") or "") + if not state_key: + continue + widget_type = str(binding.get("widget_type") or "") + if widget_type == "combo" and isinstance(widget, QComboBox): + inputs[state_key] = widget.currentText() + elif widget_type == "line" and isinstance(widget, QLineEdit): + inputs[state_key] = widget.text() + + bounds_key = str(binding.get("bounds_key") or "").strip() + if bounds_key: + inputs[f"{bounds_key}_bounds"] = dict(self._dimension_bounds.get(bounds_key) or {}) + + # Keep alias keys for backward compatibility payloads. + for state_key, aliases in self._member_state_aliases().items(): + if state_key not in inputs: + continue + for alias in aliases: + inputs.setdefault(alias, inputs[state_key]) + + return {"inputs": inputs} def _apply_member_state(self, state: dict) -> None: # During early init, the overview card triggers segment selection before @@ -1195,63 +2002,25 @@ def _apply_member_state(self, state: dict) -> None: inputs = (state or {}).get("inputs", {}) self._suppress_member_state_updates = True try: - if inputs.get("design"): - self.design_combo.setCurrentText(inputs["design"]) - if inputs.get("type"): - self.type_combo.setCurrentText(inputs["type"]) - if inputs.get("support_type"): - self.support_type_combo.setCurrentText(inputs["support_type"]) - if inputs.get("symmetry"): - self.symmetry_combo.setCurrentText(inputs["symmetry"]) - - self.total_depth_input.setText(inputs.get("total_depth", "")) - self.top_width_input.setText(inputs.get("top_width", "")) - self.bottom_width_input.setText(inputs.get("bottom_width", "")) - - total_depth_bounds = inputs.get("total_depth_bounds") - if isinstance(total_depth_bounds, dict): - self._dimension_bounds["total_depth"] = { - "lower": float(total_depth_bounds.get("lower", 200.0)), - "upper": float(total_depth_bounds.get("upper", 2000.0)), - "increment": float(total_depth_bounds.get("increment", 25.0)), - } + # Generalization flow: apply saved values via the same schema-derived + # bindings used during capture to keep the two paths symmetric. + for binding, widget in self._iter_member_state_widgets(): + state_key = str(binding.get("state_key") or "") + if not state_key: + continue - top_width_bounds = inputs.get("top_width_bounds") - if isinstance(top_width_bounds, dict): - self._dimension_bounds["top_width"] = { - "lower": float(top_width_bounds.get("lower", 100.0)), - "upper": float(top_width_bounds.get("upper", 1000.0)), - "increment": float(top_width_bounds.get("increment", 10.0)), - } + widget_type = str(binding.get("widget_type") or "") + value = self._read_member_state_input(inputs, state_key, default="") - bottom_width_bounds = inputs.get("bottom_width_bounds") - if isinstance(bottom_width_bounds, dict): - self._dimension_bounds["bottom_width"] = { - "lower": float(bottom_width_bounds.get("lower", 100.0)), - "upper": float(bottom_width_bounds.get("upper", 1000.0)), - "increment": float(bottom_width_bounds.get("increment", 10.0)), - } + if widget_type == "combo" and isinstance(widget, QComboBox): + if value: + widget.setCurrentText(value) + elif widget_type == "line" and isinstance(widget, QLineEdit): + widget.setText(value) - if inputs.get("web_thickness"): - self.web_thickness_combo.setCurrentText(inputs["web_thickness"]) - if inputs.get("top_thickness"): - self.top_thickness_combo.setCurrentText(inputs["top_thickness"]) - if inputs.get("bottom_thickness"): - self.bottom_thickness_combo.setCurrentText(inputs["bottom_thickness"]) - - self.web_thickness_value_input.setText(inputs.get("web_thickness_value", "")) - self.top_thickness_value_input.setText(inputs.get("top_thickness_value", "")) - self.bottom_thickness_value_input.setText(inputs.get("bottom_thickness_value", "")) - self.support_width_input.setText(inputs.get("support_width", "")) - - if inputs.get("is_section"): - self.is_section_combo.setCurrentText(inputs["is_section"]) - if inputs.get("torsion"): - self.torsion_combo.setCurrentText(inputs["torsion"]) - if inputs.get("warping"): - self.warping_combo.setCurrentText(inputs["warping"]) - if inputs.get("web_type"): - self.web_type_combo.setCurrentText(inputs["web_type"]) + bounds_key = str(binding.get("bounds_key") or "").strip() + if bounds_key: + self._set_dimension_bounds_from_state(inputs, bounds_key) finally: self._suppress_member_state_updates = False @@ -1262,50 +2031,21 @@ def _apply_member_state(self, state: dict) -> None: def _wire_member_dirty_tracking(self) -> None: """Mark current member dirty when Section Inputs change.""" - def connect_combo(combo: QComboBox) -> None: - combo.currentTextChanged.connect(lambda _t: self._mark_current_member_dirty()) - - def connect_line(line: QLineEdit) -> None: - line.textChanged.connect(lambda _t: self._mark_current_member_dirty()) - - connect_combo(self.design_combo) - connect_combo(self.type_combo) - connect_combo(self.support_type_combo) - connect_combo(self.symmetry_combo) - connect_combo(self.web_thickness_combo) - connect_combo(self.top_thickness_combo) - connect_combo(self.bottom_thickness_combo) - connect_combo(self.is_section_combo) - connect_combo(self.torsion_combo) - connect_combo(self.warping_combo) - connect_combo(self.web_type_combo) - - connect_line(self.total_depth_input) - connect_line(self.top_width_input) - connect_line(self.bottom_width_input) - connect_line(self.web_thickness_value_input) - connect_line(self.top_thickness_value_input) - connect_line(self.bottom_thickness_value_input) - connect_line(self.support_width_input) + # Generalization flow: register change listeners from schema bindings, + # so new fields are auto-tracked without extra wiring code. + for binding, widget in self._iter_member_state_widgets(): + widget_type = str(binding.get("widget_type") or "") + if widget_type == "combo" and isinstance(widget, QComboBox): + widget.currentTextChanged.connect(lambda _t: self._mark_current_member_dirty()) + elif widget_type == "line" and isinstance(widget, QLineEdit): + widget.textChanged.connect(lambda _t: self._mark_current_member_dirty()) def _confirm_switch_if_dirty(self) -> str: - """Return 'save'|'discard'|'cancel' before switching member.""" + """Autosave dirty state and allow switch without prompting.""" if not self._is_current_member_dirty(): return "discard" - _, member_id = self._current_member_key() - box = QMessageBox(self) - box.setIcon(QMessageBox.Warning) - box.setWindowTitle("Unsaved Changes") - box.setText(f"You have unsaved changes for {member_id}. Save before switching?") - box.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) - box.setDefaultButton(QMessageBox.Save) - result = box.exec() - if result == QMessageBox.Save: - return "save" - if result == QMessageBox.Discard: - self._dirty_members.discard(self._current_member_key()) - return "discard" - return "cancel" + self._commit_current_member_state() + return "save" def _refresh_member_id_combo(self) -> None: """Keep the Member ID dropdown in sync with the current girder's segments.""" @@ -1332,28 +2072,9 @@ def _on_member_id_combo_changed(self, index: int) -> None: self._select_segment_index(int(index)) self._last_member_combo_index = int(index) return - # Prompt if user is leaving a dirty member without saving. if int(index) != int(self._current_segment_index): - decision = self._confirm_switch_if_dirty() - if decision == "cancel": - prev = self.member_id_combo.blockSignals(True) - try: - self.member_id_combo.setCurrentIndex(self._last_member_combo_index) - finally: - self.member_id_combo.blockSignals(prev) - return - if decision == "save": + if self._is_current_member_dirty(): self._commit_current_member_state() - # Confirm member-level save immediately (requested UX). - try: - box = QMessageBox(self) - box.setIcon(QMessageBox.Information) - box.setWindowTitle("Saved") - box.setText("Member inputs saved successfully.") - box.setStandardButtons(QMessageBox.Ok) - box.exec() - except Exception: - pass self._select_segment_index(int(index)) self._last_member_combo_index = int(index) @@ -1413,7 +2134,7 @@ def _on_remove_segment_clicked(self) -> None: segments.pop(idx) # Renormalize starts, enforce last end == total span, and re-id sequentially. - total_span = float(self._get_total_span() or DEFAULT_MEMBER_LENGTH_M) + total_span = float(self._get_total_span() or self._default_member_length_m) segments[0]["start"] = 0.0 for i in range(1, len(segments)): segments[i]["start"] = float(segments[i - 1].get("end", 0.0)) @@ -1436,6 +2157,7 @@ def _select_segment_index(self, index: int) -> None: return index = max(0, min(index, len(segments) - 1)) self._current_segment_index = index + self._update_girder_cad_view(self._current_girder, segments, index) if self.segment_table and self.segment_table.rowCount() > index: self.segment_table.blockSignals(True) try: @@ -1571,37 +2293,9 @@ def _on_girder_changed(self, girder: str) -> None: if not girder or girder == getattr(self, "_current_girder", ""): return - # If user is leaving a dirty member, confirm save/discard/cancel. - # This mirrors Member ID switching behavior and ensures dependent tabs - # (e.g., Stiffener Details) see the correct per-member design mode. + # Autosave dirty member state before switching girder. if self._is_current_member_dirty(): - decision = self._confirm_switch_if_dirty() - if decision == "cancel": - # Revert the dropdown selection back to the previous girder. - try: - if self.girder_dropdown is not None: - prev = self.girder_dropdown.blockSignals(True) - try: - old = getattr(self, "_current_girder", "") - idx = self.girder_dropdown.findData(old) - if idx >= 0: - self.girder_dropdown.setCurrentIndex(idx) - finally: - self.girder_dropdown.blockSignals(prev) - except Exception: - pass - return - if decision == "save": - self._commit_current_member_state() - try: - box = QMessageBox(self) - box.setIcon(QMessageBox.Information) - box.setWindowTitle("Saved") - box.setText("Member inputs saved successfully.") - box.setStandardButtons(QMessageBox.Ok) - box.exec() - except Exception: - pass + self._commit_current_member_state() self._current_girder = girder self._refresh_segment_list(girder) @@ -1769,7 +2463,7 @@ def _on_distance_end_changed(self): self._load_segment_details(girder, idx) return - total_span = float(self._get_total_span() or DEFAULT_MEMBER_LENGTH_M) + total_span = float(self._get_total_span() or self._default_member_length_m) start = float(current.get("start", 0.0)) old_end = float(current.get("end", start)) @@ -1857,162 +2551,8 @@ def _build_section_card(self): self.member_id_combo.currentIndexChanged.connect(self._on_member_id_combo_changed) row = self._add_box_row(inputs_grid, 0, "Member ID:", self.member_id_combo) - # Hidden design combo to maintain compatibility with existing logic - self.design_combo = QComboBox() - self.design_combo.addItems(VALUES_GIRDER_DESIGN_MODE) - self.design_combo.hide() - - self.type_combo = QComboBox() - self.type_combo.addItems(VALUES_GIRDER_TYPE) - apply_field_style(self.type_combo) - self._set_field_width(self.type_combo) - row = self._add_box_row(inputs_grid, row, "Type:", self.type_combo) - - self.symmetry_combo = QComboBox() - self.symmetry_combo.addItems(VALUES_GIRDER_SYMMETRY) - apply_field_style(self.symmetry_combo) - self._set_field_width(self.symmetry_combo) - row = self._add_box_row(inputs_grid, row, "Symmetry:", self.symmetry_combo, self.symmetry_row) - - self.support_type_combo = QComboBox() - self.support_type_combo.addItems(VALUES_GIRDER_SUPPORT_TYPE) - apply_field_style(self.support_type_combo) - self._set_field_width(self.support_type_combo) - - self.total_depth_widget, self.total_depth_input, self.total_depth_bounds_button = self._create_dimension_input_widget("total_depth") - row = self._add_box_row( - inputs_grid, - row, - "Total Depth (d, mm):", - self.total_depth_widget, - self.welded_rows, - ) - - self.web_thickness_combo = QComboBox() - self.web_thickness_combo.addItems(VALUES_PROFILE_SCOPE) - apply_field_style(self.web_thickness_combo) - self._set_field_width(self.web_thickness_combo, 180) - - self.web_thickness_value_input = self._create_line_edit() - self._set_field_width(self.web_thickness_value_input, 78) - self.web_thickness_value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.web_thickness_value_input)) - - self.web_thickness_widget = self._create_mode_value_widget(self.web_thickness_combo, self.web_thickness_value_input) - self.web_thickness_value_combo = self._attach_thickness_value_dropdown( - self.web_thickness_widget, - self.web_thickness_value_input, - "web_thickness", - ) - row = self._add_box_row( - inputs_grid, - row, - "Web Thickness (wt, mm):", - self.web_thickness_widget, - self.welded_rows, - ) - - self.top_width_widget, self.top_width_input, self.top_width_bounds_button = self._create_dimension_input_widget("top_width") - row = self._add_box_row( - inputs_grid, - row, - "Width of Top Flange (tfw, mm):", - self.top_width_widget, - self.welded_rows, - ) - - self.top_thickness_combo = QComboBox() - self.top_thickness_combo.addItems(VALUES_PROFILE_SCOPE) - apply_field_style(self.top_thickness_combo) - self._set_field_width(self.top_thickness_combo, 180) - - self.top_thickness_value_input = self._create_line_edit() - self._set_field_width(self.top_thickness_value_input, 78) - self.top_thickness_value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.top_thickness_value_input)) - - self.top_thickness_widget = self._create_mode_value_widget(self.top_thickness_combo, self.top_thickness_value_input) - self.top_thickness_value_combo = self._attach_thickness_value_dropdown( - self.top_thickness_widget, - self.top_thickness_value_input, - "top_thickness", - ) - row = self._add_box_row( - inputs_grid, - row, - "Top Flange Thickness (tft, mm):", - self.top_thickness_widget, - self.welded_rows, - ) - - self.bottom_width_widget, self.bottom_width_input, self.bottom_width_bounds_button = self._create_dimension_input_widget("bottom_width") - row = self._add_box_row( - inputs_grid, - row, - "Width of Bottom Flange (bfw, mm):", - self.bottom_width_widget, - self.welded_rows, - ) - - self.bottom_thickness_combo = QComboBox() - self.bottom_thickness_combo.addItems(VALUES_PROFILE_SCOPE) - apply_field_style(self.bottom_thickness_combo) - self._set_field_width(self.bottom_thickness_combo, 180) - - self.bottom_thickness_value_input = self._create_line_edit() - self._set_field_width(self.bottom_thickness_value_input, 78) - self.bottom_thickness_value_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.bottom_thickness_value_input)) - - self.bottom_thickness_widget = self._create_mode_value_widget(self.bottom_thickness_combo, self.bottom_thickness_value_input) - self.bottom_thickness_value_combo = self._attach_thickness_value_dropdown( - self.bottom_thickness_widget, - self.bottom_thickness_value_input, - "bottom_thickness", - ) - row = self._add_box_row( - inputs_grid, - row, - "Bottom Flange Thickness (bft, mm):", - self.bottom_thickness_widget, - self.welded_rows, - ) - - self.support_width_input = self._create_line_edit() - self.support_width_input.setValidator(QDoubleValidator(0.0, 1e12, 3, self.support_width_input)) - row = self._add_box_row( - inputs_grid, - row, - "Support Type:", - self.support_type_combo, - self.welded_rows, - ) - row = self._add_box_row( - inputs_grid, - row, - "Support Width (mm):", - self.support_width_input, - self.welded_rows, - ) - - self.is_section_combo = QComboBox() - self._populate_rolled_section_combo() - apply_field_style(self.is_section_combo) - self._set_field_width(self.is_section_combo) - self._add_box_row(inputs_grid, row, "IS Section:", self.is_section_combo, self.rolled_rows) - - # Append restraint/web fields into the same Section Inputs box (no extra frame / spacing). - self.torsion_combo = QComboBox() - apply_field_style(self.torsion_combo) - self._set_field_width(self.torsion_combo) - row = self._add_box_row(inputs_grid, row + 1, "Torsional Restraint:", self.torsion_combo) - - self.warping_combo = QComboBox() - apply_field_style(self.warping_combo) - self._set_field_width(self.warping_combo) - row = self._add_box_row(inputs_grid, row, "Warping Restraint:", self.warping_combo) - - self.web_type_combo = QComboBox() - apply_field_style(self.web_type_combo) - self._set_field_width(self.web_type_combo) - self._add_box_row(inputs_grid, row, "Web Type*:", self.web_type_combo, self.web_type_row) + for field_def in GIRDER_DETAILS_SCHEMA.get("section_inputs", []): + row = self._build_section_input_from_schema(inputs_grid, row, field_def) section_inputs_layout.addLayout(inputs_grid) # Prevent the grid rows from stretching vertically (which creates large blank bands @@ -2029,6 +2569,7 @@ def _build_section_card(self): right_column_layout = QVBoxLayout(right_column) right_column_layout.setContentsMargins(0, 0, 0, 0) right_column_layout.setSpacing(10) + self._right_details_column = right_column # Dynamic image box image_box = self._create_inner_box() @@ -2138,14 +2679,17 @@ def _create_card_frame(self): frame.setStyleSheet("QFrame#girderCard { background-color: white; border: 1px solid #cfcfcf; border-radius: 10px; }") return frame + def _normalize_label_text(self, text: str) -> str: + return str(text or "").rstrip(": ") + def _create_label(self, text): - label = QLabel(text) + label = QLabel(self._normalize_label_text(text)) label.setStyleSheet("font-size: 12px; color: #2f2f2f; font-weight: 600; background: transparent;") label.setAutoFillBackground(False) return label def _create_small_label(self, text): - label = QLabel(text) + label = QLabel(self._normalize_label_text(text)) label.setStyleSheet("font-size: 10px; color: #5a5a5a; background: transparent;") label.setAutoFillBackground(False) return label @@ -2169,8 +2713,9 @@ def _create_mode_value_widget(self, mode_combo: QComboBox, value_input: QLineEdi return widget def _attach_thickness_value_dropdown(self, wrapper: QWidget, value_input: QLineEdit, field_key: str) -> QComboBox: + """Attach hidden schema-backed thickness dropdown used in custom mode.""" combo = QComboBox() - combo.addItems(SAIL_APPROVED_THICKNESS_VALUES) + combo.addItems(self._thickness_values) apply_field_style(combo) combo.setVisible(False) self._set_field_width(combo, 180) @@ -2185,6 +2730,7 @@ def _attach_thickness_value_dropdown(self, wrapper: QWidget, value_input: QLineE return combo def _sync_thickness_value_dropdown(self, field_key: str) -> None: + """Sync dropdown selection from text input and enforce valid first value.""" value_input = getattr(self, f"{field_key}_value_input", None) value_combo = getattr(self, f"{field_key}_value_combo", None) if value_input is None or value_combo is None: @@ -2195,12 +2741,16 @@ def _sync_thickness_value_dropdown(self, field_key: str) -> None: first = selected[0] else: parsed = str(value_input.text() or "").strip() - if parsed in SAIL_APPROVED_THICKNESS_VALUES: + if parsed in self._thickness_values: first = parsed - if not first: - first = SAIL_APPROVED_THICKNESS_VALUES[0] + + if not first and self._thickness_values: + first = self._thickness_values[0] value_input.setText(first) + if not self._thickness_values: + return + prev = value_combo.blockSignals(True) try: idx = value_combo.findText(first, Qt.MatchFixedString) @@ -2209,8 +2759,9 @@ def _sync_thickness_value_dropdown(self, field_key: str) -> None: value_combo.blockSignals(prev) def _parse_selected_thickness_values(self, text: str) -> List[str]: + """Parse comma-separated thickness text and keep only allowed schema values.""" chunks = [c.strip() for c in str(text or "").split(",") if str(c).strip()] - return [v for v in chunks if v in SAIL_APPROVED_THICKNESS_VALUES] + return [v for v in chunks if v in self._thickness_values] def _on_thickness_mode_changed(self, field_key: str, _text: str) -> None: self._update_thickness_value_enabled_state() @@ -2227,11 +2778,12 @@ def _on_thickness_mode_changed(self, field_key: str, _text: str) -> None: return is_welded = (self.type_combo.currentText() or "").strip().lower() == "welded" - is_custom_design = (self.design_combo.currentText() or "").strip().lower() == "customized" + is_custom_design = (self.design_combo.currentText() or "").strip().lower() in {"custom", "customized"} if is_welded and (not is_custom_design): self._open_thickness_values_dialog(field_key) def _open_thickness_values_dialog(self, field_key: str) -> None: + """Open the picker dialog and persist selected thickness values for a field.""" value_input = getattr(self, f"{field_key}_value_input", None) if value_input is None: return @@ -2242,7 +2794,7 @@ def _open_thickness_values_dialog(self, field_key: str) -> None: "top_thickness": "Select Values: Top Flange Thickness", "bottom_thickness": "Select Values: Bottom Flange Thickness", } - dialog = _ThicknessSelectionDialog(titles.get(field_key, "Select Values"), selected, self) + dialog = _ThicknessSelectionDialog(titles.get(field_key, "Select Values"), selected, self._thickness_values, self) if dialog.exec() != QDialog.Accepted: return @@ -2283,7 +2835,7 @@ def _create_dimension_input_widget(self, field_key: str): return widget, value_input, bounds_button def _update_dimension_field_mode(self) -> None: - is_custom = (self.design_combo.currentText() or "").strip().lower() == "customized" + is_custom = (self.design_combo.currentText() or "").strip().lower() in {"custom", "customized"} is_welded = (self.type_combo.currentText() or "").strip().lower() == "welded" for field_key in ("total_depth", "top_width", "bottom_width"): @@ -2298,7 +2850,7 @@ def _update_dimension_field_mode(self) -> None: bounds_button.setVisible((not show_line_edit) and is_welded) bounds_button.setEnabled((not show_line_edit) and is_welded) - def _default_dimension_bounds(self, field_key: str) -> dict: + def _default_dimension_bounds_for_field(self, field_key: str) -> dict: defaults = { "total_depth": {"lower": 200.0, "upper": 2000.0, "increment": 25.0}, "top_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, @@ -2307,7 +2859,7 @@ def _default_dimension_bounds(self, field_key: str) -> dict: return dict(defaults.get(field_key, {"lower": 0.0, "upper": 0.0, "increment": 0.0})) def _normalized_dimension_bounds(self, field_key: str) -> dict: - defaults = self._default_dimension_bounds(field_key) + defaults = self._default_dimension_bounds_for_field(field_key) current = self._dimension_bounds.get(field_key) or {} out = {} for key in ("lower", "upper", "increment"): @@ -2365,7 +2917,7 @@ def _is_custom_thickness_mode(self, combo: QComboBox) -> bool: def _update_thickness_value_enabled_state(self) -> None: is_welded = self.type_combo.currentText().lower() == "welded" - is_custom_design = self.design_combo.currentText().lower() == "customized" + is_custom_design = self.design_combo.currentText().lower() in {"custom", "customized"} allow_inputs = is_welded and is_custom_design for field_key, mode_combo, value_input, value_combo, wrapper in ( @@ -2396,7 +2948,7 @@ def _update_thickness_value_enabled_state(self) -> None: is_custom_mode = self._is_custom_thickness_mode(mode_combo) - # Customized mode: one-box dropdown only (SAIL values). + # Custom mode: one-box dropdown only (SAIL values). if allow_inputs: if mode_combo.currentText().strip().lower() != "custom": prev = mode_combo.blockSignals(True) @@ -2446,8 +2998,9 @@ def _add_section_row(self, layout, row, text, widget, tracker=None): return row + 1 def _set_field_width(self, widget, width=180): - widget.setMaximumWidth(width) - widget.setMinimumWidth(min(width, 140)) + effective_width = max(int(width), 220) + widget.setMaximumWidth(effective_width) + widget.setMinimumWidth(min(effective_width, 180)) widget.setMinimumHeight(28) widget.setMaximumHeight(40) @@ -2571,13 +3124,15 @@ def _update_member_id_edit_state(self): self._update_distance_field_states() def _on_design_changed(self, text): - is_custom = text.lower() == "customized" + is_custom = (text or "").strip().lower() in {"custom", "customized"} toggle_targets = ( self.type_combo, self.symmetry_combo, ) for widget in toggle_targets: widget.setEnabled(is_custom) + if hasattr(self, "_right_details_column"): + self._right_details_column.setVisible(is_custom) if not is_custom: self._lock_type_to_welded() self._reset_section_state() @@ -2594,7 +3149,7 @@ def _on_support_type_changed(self, support_type: str) -> None: def _apply_type_state(self): is_welded = self.type_combo.currentText().lower() == "welded" - is_custom = self.design_combo.currentText().lower() == "customized" + is_custom = self.design_combo.currentText().lower() in {"custom", "customized"} self._set_row_visibility(self.welded_rows, is_welded) self._set_row_visibility(self.rolled_rows, not is_welded) @@ -2734,8 +3289,56 @@ def _set_line_edit_value(self, line_edit, value): line_edit.setText(text) line_edit.blockSignals(previous_state) + def _legacy_welded_inputs_from_state_inputs(self, inputs: dict) -> dict: + payload: dict[str, object] = {} + if not isinstance(inputs, dict): + return payload + + maps = self._legacy_payload_maps() + for payload_key, input_key in maps.get("welded", {}).items(): + payload[payload_key] = self._read_member_state_input(inputs, input_key, default="") + + for payload_key, bounds_key in maps.get("welded_bounds", {}).items(): + bounds = inputs.get(f"{bounds_key}_bounds") + payload[payload_key] = dict(bounds) if isinstance(bounds, dict) else {} + return payload + + def _legacy_current_member_payload_from_state_inputs(self, inputs: dict) -> dict: + payload: dict[str, str] = {} + if not isinstance(inputs, dict): + return payload + for payload_key, input_key in self._legacy_payload_maps().get("current_member", {}).items(): + payload[payload_key] = self._read_member_state_input(inputs, input_key, default="") + return payload + + def _state_inputs_from_legacy_payload(self, data: dict) -> dict: + if not isinstance(data, dict): + return {} + + inputs: dict[str, object] = {} + maps = self._legacy_payload_maps() + for payload_key, input_key in maps.get("current_member", {}).items(): + value = data.get(payload_key) + if value in (None, ""): + continue + inputs[input_key] = str(value) + + welded_inputs = data.get("welded_inputs") + if isinstance(welded_inputs, dict): + for payload_key, input_key in maps.get("welded", {}).items(): + value = welded_inputs.get(payload_key) + if value in (None, ""): + continue + inputs[input_key] = str(value) + for payload_key, bounds_key in maps.get("welded_bounds", {}).items(): + bounds = welded_inputs.get(payload_key) + if isinstance(bounds, dict): + inputs[f"{bounds_key}_bounds"] = dict(bounds) + + return inputs + def validate_member_properties(self) -> bool: - if self.design_combo.currentText() != "Customized": + if self.design_combo.currentText() != "Custom": return True required_fields = [ (self.total_depth_input, "Total Depth (d, mm)"), @@ -2795,7 +3398,7 @@ def _create_inner_box(self): def _create_small_label(self, text): """Create a smaller label for compact layouts""" - label = QLabel(text) + label = QLabel(self._normalize_label_text(text)) label.setTextFormat(Qt.RichText) label.setStyleSheet(""" QLabel { @@ -2836,9 +3439,9 @@ def _populate_rolled_section_combo(self): self.is_section_combo.addItems(designations) def _configure_restraint_fields(self): - torsion_items = self._constant_items("VALUES_TORSIONAL_RESTRAINT") - warping_items = self._constant_items("VALUES_WARPING_RESTRAINT") - web_type_items = self._constant_items("VALUES_WEB_TYPE") + torsion_items = self._schema_choices("torsional_restraint") + warping_items = self._schema_choices("warping_restraint") + web_type_items = self._schema_choices("web_type") self._reload_combo_items(self.torsion_combo, torsion_items) self._reload_combo_items(self.warping_combo, warping_items) @@ -2852,10 +3455,6 @@ def _reload_combo_items(combo, items): combo.setCurrentIndex(0 if items else -1) combo.blockSignals(block) - @staticmethod - def _constant_items(constant_name): - return list(globals().get(constant_name, [])) - def _update_preview(self): if not hasattr(self, "section_preview"): return @@ -3083,19 +3682,20 @@ def _parse_float(text): return None def set_girder_count(self, count: Optional[int]) -> None: + """Apply external girder-count updates with schema cap and chain reconciliation.""" try: total = int(count) if count is not None else len(self.available_girders) except (TypeError, ValueError): total = len(self.available_girders) - total = max(1, min(MAX_GIRDER_COUNT, total)) + total = max(1, min(self._max_girder_count, total)) self.available_girders = [f"G{i}" for i in range(1, total + 1)] # Prune segment chains for removed girders and initialize new ones. self.segment_chain = {g: segs for g, segs in self.segment_chain.items() if g in self.available_girders} - total_span = float(self._get_total_span() or DEFAULT_MEMBER_LENGTH_M) + total_span = float(self._get_total_span() or self._default_member_length_m) for girder in self.available_girders: if girder not in self.segment_chain: - self.segment_chain[girder] = [{"id": self._make_segment_id(girder, 1), "start": 0.0, "end": total_span}] + self.segment_chain[girder] = [{"id": self._make_segment_id(girder, 1), "start": self._default_distance_start_m, "end": total_span}] # Refresh dropdown if self.girder_dropdown: @@ -3177,14 +3777,14 @@ def _reset_combo(combo: QComboBox, index: int = 0): _reset_combo(self.is_section_combo) # Total span default - self._set_line_edit_value(self.length_input, DEFAULT_MEMBER_LENGTH_M) + self._set_line_edit_value(self.length_input, self._default_member_length_m) # Segment chain defaults: one segment per girder spanning the full span # (only when not preserving segments, or if preserving but chain is empty). if (not preserve_segments) or (not getattr(self, "segment_chain", None)): - total_span = float(self._get_total_span() or DEFAULT_MEMBER_LENGTH_M) + total_span = float(self._get_total_span() or self._default_member_length_m) for girder in self.available_girders: - self.segment_chain[girder] = [{"id": self._make_segment_id(girder, 1), "start": 0.0, "end": total_span}] + self.segment_chain[girder] = [{"id": self._make_segment_id(girder, 1), "start": self._default_distance_start_m, "end": total_span}] elif preserved_segment_chain: # Restore preserved segments after any internal recomputation. self.segment_chain = preserved_segment_chain @@ -3202,11 +3802,7 @@ def _reset_combo(combo: QComboBox, index: int = 0): field.clear() field.blockSignals(previous) - self._dimension_bounds = { - "total_depth": {"lower": 200.0, "upper": 2000.0, "increment": 25.0}, - "top_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, - "bottom_width": {"lower": 100.0, "upper": 1000.0, "increment": 10.0}, - } + self._dimension_bounds = self._default_dimension_bounds() self._refresh_bounds_tooltips() self._on_design_changed(self.design_combo.currentText()) @@ -3258,21 +3854,10 @@ def collect_data(self) -> dict: # Save action marks member edits clean for this session. self._dirty_members.clear() - welded_inputs = { - "total_depth_mm": self.total_depth_input.text().strip(), - "top_flange_width_mm": self.top_width_input.text().strip(), - "bottom_flange_width_mm": self.bottom_width_input.text().strip(), - "total_depth_bounds": dict(self._dimension_bounds.get("total_depth") or {}), - "top_flange_width_bounds": dict(self._dimension_bounds.get("top_width") or {}), - "bottom_flange_width_bounds": dict(self._dimension_bounds.get("bottom_width") or {}), - "web_thickness_mode": self.web_thickness_combo.currentText(), - "top_thickness_mode": self.top_thickness_combo.currentText(), - "bottom_thickness_mode": self.bottom_thickness_combo.currentText(), - "web_thickness_value_mm": self.web_thickness_value_input.text().strip(), - "top_thickness_value_mm": self.top_thickness_value_input.text().strip(), - "bottom_thickness_value_mm": self.bottom_thickness_value_input.text().strip(), - "support_width_mm": self.support_width_input.text().strip(), - } + current_state = self._capture_member_state() + current_inputs = (current_state or {}).get("inputs", {}) + welded_inputs = self._legacy_welded_inputs_from_state_inputs(current_inputs) + current_payload = self._legacy_current_member_payload_from_state_inputs(current_inputs) properties_snapshot = { label: field.text().strip() for label, field in self.section_property_inputs.items() @@ -3291,13 +3876,7 @@ def collect_data(self) -> dict: "distance_end_m": self._parse_float(self.distance_end_input.text()), "total_span_m": self._parse_float(self.length_input.text()), "current_segment": current_segment, - "design_mode": self.design_combo.currentText(), - "girder_type": self.type_combo.currentText(), - "symmetry": self.symmetry_combo.currentText(), - "torsional_restraint": self.torsion_combo.currentText(), - "warping_restraint": self.warping_combo.currentText(), - "web_type": self.web_type_combo.currentText(), - "rolled_section": self.is_section_combo.currentText(), + **current_payload, "welded_inputs": welded_inputs, "segment_chain": { girder: [ @@ -3373,11 +3952,26 @@ def restore_data(self, data: dict) -> None: if self.girder_dropdown is not None: prev = self.girder_dropdown.blockSignals(True) try: - if self.girder_dropdown.findText(self._current_girder) >= 0: - self.girder_dropdown.setCurrentText(self._current_girder) + idx = self.girder_dropdown.findData(self._current_girder) + if idx >= 0: + self.girder_dropdown.setCurrentIndex(idx) finally: self.girder_dropdown.blockSignals(prev) + if not isinstance(member_states, dict): + legacy_inputs = self._state_inputs_from_legacy_payload(data) + if legacy_inputs: + fallback_state = {"inputs": legacy_inputs} + fallback_member_id = "" + current_segment = data.get("current_segment") + if isinstance(current_segment, dict): + fallback_member_id = str(current_segment.get("id") or "").strip() + if not fallback_member_id: + fallback_member_id = str(data.get("member_id") or "").strip() + if not fallback_member_id: + fallback_member_id = self._make_segment_id(self._current_girder, 1) + self._member_state.setdefault(self._current_girder, {})[fallback_member_id] = fallback_state + self._refresh_segment_list(self._current_girder) self._refresh_member_id_combo() @@ -3419,7 +4013,8 @@ def is_member_optimized(self, member_id: str) -> bool: try: current_girder, current_member_id = self._current_member_key() if current_girder == girder and current_member_id == member_id: - return (self.design_combo.currentText() if hasattr(self, "design_combo") else "") == "Optimized" + combo = getattr(self, "design_combo", None) + return isinstance(combo, QComboBox) and combo.currentText() == "Optimized" except Exception: pass @@ -3428,6 +4023,16 @@ def is_member_optimized(self, member_id: str) -> bool: if design: return design == "Optimized" + # Fallback for members not explicitly visited/saved yet. + try: + template = getattr(self, "_default_member_state", None) or {} + default_design = str(((template.get("inputs") or {}).get("design") or "")).strip() + if default_design: + return default_design == "Optimized" + except Exception: + pass + return True + def get_member_section_dimensions(self, member_id: str) -> Optional[dict]: """Return basic section dimensions for the given member. @@ -3498,15 +4103,3 @@ def _compute_section_dimensions_from_inputs(self, inputs: dict) -> Optional[dict "web_thickness_mm": float(outline.get("web_thickness_mm") or 0.0), } return None - - # Fallback: if the member hasn't been visited/saved yet, do NOT inherit - # whatever the currently active member is set to. New/unvisited members - # should behave like the UI default (Optimized) until explicitly changed. - try: - template = getattr(self, "_default_member_state", None) or {} - default_design = str(((template.get("inputs") or {}).get("design") or "")).strip() - if default_design: - return default_design == "Optimized" - except Exception: - pass - return True diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py index 7561a4d0f..130d1ed6a 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/sub_tabs/section_properties/stiffener_details_tab.py @@ -5,10 +5,11 @@ from __future__ import annotations -from typing import Dict, Optional +import re +from typing import Dict, List, Optional from PySide6.QtCore import Qt -from PySide6.QtGui import QIntValidator +from PySide6.QtGui import QColor, QIntValidator, QPainter, QPen from PySide6.QtWidgets import ( QComboBox, QFrame, @@ -16,7 +17,6 @@ QHBoxLayout, QLabel, QLineEdit, - QMessageBox, QPushButton, QScrollArea, QSizePolicy, @@ -25,28 +25,458 @@ QWidget, ) -from osdagbridge.core.utils.common import VALUES_YES_NO, VALUES_STIFFENER_DESIGN +from osdagbridge.core.bridge_types.plate_girder.ui_fields_additional_input import STIFFENER_DETAILS_SCHEMA +from osdagbridge.core.utils.common import ( + MIN_BEARING_STIFFENER_SPACING_MM, + SAIL_APPROVED_THICKNESS_VALUES, + STIFFENER_DETAILS_DEFAULTS, +) from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style -OUTSTAND_DEFAULT_TEXT = "NA" -VALUES_BEARING_STIFFENER_COUNT = ["1", "2", "3", "4"] -VALUES_STIFFENER_THICKNESS_MODE = ["All", "Customized"] -VALUES_LONGITUDINAL_STIFFENER = ["No", "Yes and 1 stiffener", "Yes and 2 stiffeners"] +_STIFFENER_DEFAULTS = dict(STIFFENER_DETAILS_DEFAULTS) +MIN_BEARING_SPACING_MM = int(_STIFFENER_DEFAULTS.get("min_bearing_spacing_mm", MIN_BEARING_STIFFENER_SPACING_MM)) + + +class StiffenerCadPreviewWidget(QWidget): + """2D CAD-style stiffener preview driven by per-member stiffener inputs.""" + + # Keep preview colors aligned with the desktop theme palette. + THEME_BG = QColor("#f4f4f4") + THEME_BORDER = QColor("#d0d0d0") + THEME_TEXT = QColor("#333333") + THEME_CANVAS = QColor("#f8f8f8") + THEME_GIRDER = QColor("#d9d9d9") + THEME_FLANGE = QColor("#c9c9c9") + THEME_WEB = QColor("#dcdcdc") + THEME_GIRDER_BORDER = QColor("#3a3a3a") + THEME_SEGMENT_LINE = QColor("#888888") + BEARING_COLOR = QColor("#90AF13") + INTERMEDIATE_COLOR = QColor("#6B7D20") + LONG_COLOR = QColor("#4a4a4a") + + def __init__(self, parent=None): + super().__init__(parent) + self._segments: List[dict] = [] + self._stiffener_by_member: Dict[str, dict] = {} + self._section_dims_by_member: Dict[str, dict] = {} + self._active_member_id: str = "" + self.setMinimumHeight(210) + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + + def set_data( + self, + segments: List[dict], + stiffener_by_member: Dict[str, dict], + active_member_id: str, + section_dims_by_member: Optional[Dict[str, dict]] = None, + ) -> None: + cleaned: List[dict] = [] + for seg in segments or []: + try: + start = float(seg.get("start", 0.0)) + end = float(seg.get("end", 0.0)) + except Exception: + continue + length = max(0.0, end - start) + if length <= 0.0: + continue + cleaned.append( + { + "id": str(seg.get("id") or ""), + "start": start, + "end": end, + "length": length, + } + ) + self._segments = cleaned + self._stiffener_by_member = dict(stiffener_by_member or {}) + self._section_dims_by_member = dict(section_dims_by_member or {}) + self._active_member_id = str(active_member_id or "").strip() + self.update() + + @staticmethod + def _member_girder(member_id: str) -> str: + match = re.match(r"^(G\d+)M\d+$", str(member_id or "").strip()) + return match.group(1) if match else "" + + def _state_for(self, member_id: str) -> dict: + return dict(self._stiffener_by_member.get(str(member_id or "").strip()) or {}) + + def _dims_for(self, member_id: str) -> dict: + return dict(self._section_dims_by_member.get(str(member_id or "").strip()) or {}) + + def _parse_positive_int(self, value) -> Optional[int]: + try: + text = str(value or "").strip() + if not text.isdigit(): + return None + parsed = int(text) + return parsed if parsed > 0 else None + except Exception: + return None + + def _longitudinal_levels(self, mode: str, web_top: float, web_height: float) -> List[float]: + text = str(mode or "").strip().lower() + if "2" in text: + return [web_top + (web_height / 3.0), web_top + (2.0 * web_height / 3.0)] + if "1" in text: + return [web_top + (web_height / 3.0)] + return [] + + def paintEvent(self, _event): # noqa: N802 (Qt naming) + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing, True) + + frame = self.rect().adjusted(6, 6, -6, -6) + painter.fillRect(frame, self.THEME_BG) + painter.setPen(QPen(self.THEME_BORDER, 1.0)) + painter.drawRect(frame) + + draw = frame.adjusted(14, 6, -14, -24) + if draw.width() < 20 or draw.height() < 20: + return + + if not self._segments: + painter.setPen(QPen(self.THEME_TEXT, 1.0)) + painter.drawText(draw, Qt.AlignCenter, "No member segments") + return + + total_length = sum(float(seg.get("length") or 0.0) for seg in self._segments) + if total_length <= 0.0: + painter.setPen(QPen(self.THEME_TEXT, 1.0)) + painter.drawText(draw, Qt.AlignCenter, "Invalid segment lengths") + return + + # Girder strip inside a light themed canvas. + cad_bg = draw.adjusted(0, 14, 0, -8) + painter.fillRect(cad_bg, self.THEME_CANVAS) + + girder_rect = cad_bg.adjusted(14, 18, -14, -18) + painter.fillRect(girder_rect, self.THEME_GIRDER) + + # Draw separate top and bottom flange thickness bands similar to girder CAD. + active_dims = self._dims_for(self._active_member_id) + try: + depth_mm = float(active_dims.get("depth_mm") or 0.0) + top_t_mm = float(active_dims.get("top_flange_thickness_mm") or 0.0) + bot_t_mm = float(active_dims.get("bottom_flange_thickness_mm") or 0.0) + except (TypeError, ValueError): + depth_mm = 0.0 + top_t_mm = 0.0 + bot_t_mm = 0.0 + + if depth_mm > 0.0 and top_t_mm > 0.0 and bot_t_mm > 0.0: + top_flange_px = int(round((top_t_mm / depth_mm) * girder_rect.height())) + bottom_flange_px = int(round((bot_t_mm / depth_mm) * girder_rect.height())) + else: + # Fallback for missing dimensions. + top_flange_px = max(4, int(round(girder_rect.height() * 0.08))) + bottom_flange_px = max(4, int(round(girder_rect.height() * 0.08))) + + # Keep a workable web region even with very thick flanges. + max_each = max(4, int(round(girder_rect.height() * 0.22))) + top_flange_px = min(max_each, max(3, top_flange_px)) + bottom_flange_px = min(max_each, max(3, bottom_flange_px)) + if top_flange_px + bottom_flange_px > girder_rect.height() - 8: + overflow = (top_flange_px + bottom_flange_px) - (girder_rect.height() - 8) + reduce_top = overflow // 2 + reduce_bottom = overflow - reduce_top + top_flange_px = max(3, top_flange_px - reduce_top) + bottom_flange_px = max(3, bottom_flange_px - reduce_bottom) + + flange_x = int(girder_rect.left()) + flange_w = int(girder_rect.width()) + top_flange_y = int(girder_rect.top()) + bottom_flange_y = int(girder_rect.bottom() - bottom_flange_px + 1) + + painter.fillRect(flange_x, top_flange_y, flange_w, int(top_flange_px), self.THEME_FLANGE) + painter.fillRect(flange_x, bottom_flange_y, flange_w, int(bottom_flange_px), self.THEME_FLANGE) + + web_top = girder_rect.top() + top_flange_px + web_bottom = girder_rect.bottom() - bottom_flange_px + if web_bottom < web_top: + web_bottom = web_top + + painter.fillRect( + int(girder_rect.left()), + int(web_top), + int(girder_rect.width()), + int(max(1, web_bottom - web_top + 1)), + self.THEME_WEB, + ) + + painter.setPen(QPen(self.THEME_GIRDER_BORDER, 1.0)) + painter.drawRect(girder_rect) + painter.drawLine(int(girder_rect.left()), int(web_top), int(girder_rect.right()), int(web_top)) + painter.drawLine(int(girder_rect.left()), int(web_bottom), int(girder_rect.right()), int(web_bottom)) + + web_height = max(1.0, web_bottom - web_top) + + # Resolve selected girder from active member (fallback to first segment's girder). + active_girder = self._member_girder(self._active_member_id) + if not active_girder and self._segments: + active_girder = self._member_girder(str(self._segments[0].get("id") or "")) + + px_per_mm = girder_rect.width() / max(1.0, total_length * 1000.0) + + def resolve_bearing_params(seg_state: dict, seg_len_mm: float) -> tuple[int, float, float, float]: + count = self._parse_positive_int(seg_state.get("bearing_stiffeners_each_end")) or 2 + count = max(1, min(8, count)) + custom_spacing_mm = self._parse_positive_int(seg_state.get("bearing_spacing_mm")) + if custom_spacing_mm: + spacing_mm = float(custom_spacing_mm) + else: + spacing_mm = max(MIN_BEARING_SPACING_MM, seg_len_mm / float(count + 1)) + spacing_px = max(8.0, min(24.0, spacing_mm * px_per_mm)) + edge_offset = spacing_px + bearing_zone = edge_offset + ((count - 1) * spacing_px) + 6.0 + return count, spacing_px, edge_offset, bearing_zone + + x = float(girder_rect.left()) + segment_rects: List[dict] = [] + for idx, seg in enumerate(self._segments): + ratio = float(seg["length"]) / total_length + width = girder_rect.width() * ratio + if idx == len(self._segments) - 1: + width = max(1.0, float(girder_rect.right()) - x) + segment_rects.append({"id": seg["id"], "left": x, "right": x + width}) + x += width + + # Draw segment labels close to the girder for better visual association. + label_gap = 4 + label_height = 20 + label_bottom = int(max(draw.top() + label_height, girder_rect.top() - label_gap)) + label_top = int(max(draw.top(), label_bottom - label_height)) + for idx, seg_rect in enumerate(segment_rects): + left = float(seg_rect["left"]) + right = float(seg_rect["right"]) + label_rect = draw.adjusted(0, 0, 0, 0) + label_rect.setTop(label_top) + label_rect.setBottom(label_bottom) + label_rect.setLeft(int(left)) + label_rect.setRight(int(right)) + + seg_id = str(seg_rect["id"] or "") + painter.setPen(QPen(self.THEME_TEXT, 1.0)) + painter.drawText(label_rect, Qt.AlignHCenter | Qt.AlignVCenter, seg_id) + + if idx > 0: + painter.setPen(QPen(self.THEME_SEGMENT_LINE, 1.0)) + painter.drawLine(int(left), int(girder_rect.top()), int(left), int(girder_rect.bottom())) + + # Draw per-segment stiffeners. + for idx, seg_rect in enumerate(segment_rects): + seg_id = str(seg_rect["id"] or "") + seg_state = self._state_for(seg_id) + left = float(seg_rect["left"]) + right = float(seg_rect["right"]) + width = max(1.0, right - left) + is_first = idx == 0 + is_last = idx == len(segment_rects) - 1 + + seg_len_mm = float(self._segments[idx]["length"]) * 1000.0 + left_count = right_count = 0 + left_spacing_px = right_spacing_px = 0.0 + left_offset = right_offset = 0.0 + left_zone = right_zone = 0.0 + if is_first: + left_count, left_spacing_px, left_offset, left_zone = resolve_bearing_params(seg_state, seg_len_mm) + if is_last: + right_count, right_spacing_px, right_offset, right_zone = resolve_bearing_params(seg_state, seg_len_mm) + + seg_girder = self._member_girder(seg_id) + if active_girder and seg_girder and seg_girder != active_girder: + continue + + # Intermediate stiffeners between segment ends as per segment-wise spacing. + include_intermediate = str(seg_state.get("intermediate_stiffener") or "").strip() == "Yes" + spacing_mm = self._parse_positive_int(seg_state.get("intermediate_spacing_mm")) + if include_intermediate and spacing_mm and float(self._segments[idx]["length"]) > 0.0: + seg_len_mm = float(self._segments[idx]["length"]) * 1000.0 + if seg_len_mm > spacing_mm: + painter.setPen(QPen(self.INTERMEDIATE_COLOR, 2.0)) + pos_mm = float(spacing_mm) + while pos_mm < seg_len_mm: + ratio = pos_mm / seg_len_mm + x_pos = left + (ratio * width) + if is_first and x_pos <= (left + left_zone): + pos_mm += float(spacing_mm) + continue + if is_last and x_pos >= (right - right_zone): + pos_mm += float(spacing_mm) + continue + if (x_pos - left) > 3.0 and (right - x_pos) > 3.0: + painter.drawLine(int(x_pos), int(web_top), int(x_pos), int(web_bottom)) + pos_mm += float(spacing_mm) + + # Bearing stiffeners only at first and last member of the selected girder. + # Draw these after intermediate lines so bearing stiffeners remain visible. + painter.setPen(QPen(self.BEARING_COLOR, 2.0)) + if is_first and left_count > 0: + for i in range(left_count): + x_pos = left + left_offset + (i * left_spacing_px) + x_pos = max(left + 2.0, min(right - 2.0, x_pos)) + painter.drawLine(int(x_pos), int(web_top), int(x_pos), int(web_bottom)) + if is_last and right_count > 0: + for i in range(right_count): + x_pos = right - right_offset - (i * right_spacing_px) + x_pos = max(left + 2.0, min(right - 2.0, x_pos)) + painter.drawLine(int(x_pos), int(web_top), int(x_pos), int(web_bottom)) + + # Longitudinal stiffeners by option: none / one at 1/3 / two at 1/3 and 2/3 from top. + long_mode = str(seg_state.get("longitudinal_stiffener") or "") + levels = self._longitudinal_levels(long_mode, web_top, web_height) + if levels: + painter.setPen(QPen(self.LONG_COLOR, 3.0)) + for y_pos in levels: + painter.drawLine(int(left), int(y_pos), int(right), int(y_pos)) class StiffenerDetailsTab(QWidget): """Tab for Stiffener Details with compact layout""" def __init__(self, parent=None): super().__init__(parent) + self._defaults = dict(STIFFENER_DETAILS_DEFAULTS) + self._combo_width = int(self._defaults.get("combo_width", 190) or 190) + self._form_label_width = int(self._defaults.get("form_label_width", 245) or 245) + self._thickness_values = self._schema_thickness_values() + self._schema_state_bindings_cache: Optional[list[dict]] = None self._girder_details_tab = None self._state_by_member: Dict[str, dict] = {} self._active_member_id: Optional[str] = None self._is_loading_ui: bool = False self.init_ui() + def _schema_field(self, field_id: str, section: str = "stiffener_inputs") -> dict: + for field in STIFFENER_DETAILS_SCHEMA.get(section, []): + if str(field.get("id")) == field_id: + return dict(field) + return {} + + def _schema_choices(self, field_id: str, section: str = "stiffener_inputs") -> list[str]: + field = self._schema_field(field_id, section) + return [str(choice) for choice in field.get("choices") or []] + + def _schema_label(self, field_id: str, section: str = "stiffener_inputs", fallback: str = "") -> str: + field = self._schema_field(field_id, section) + return str(field.get("label") or fallback) + + def _schema_thickness_values(self) -> list[str]: + return [str(v).strip() for v in SAIL_APPROVED_THICKNESS_VALUES if str(v).strip()] + + def _schema_default(self, key: str, fallback: str = "") -> str: + return str(self._defaults.get(key, fallback)) + + def _schema_fields(self, section: str) -> list[dict]: + return [dict(field) for field in STIFFENER_DETAILS_SCHEMA.get(section, []) if isinstance(field, dict)] + + def _schema_state_bindings(self) -> list[dict]: + if self._schema_state_bindings_cache is not None: + return [dict(entry) for entry in self._schema_state_bindings_cache] + + bindings: list[dict] = [] + for section in ("stiffener_inputs", "web_buckling_inputs"): + for field in self._schema_fields(section): + field_id = str(field.get("id") or "").strip() + if not field_id: + continue + + field_type = str(field.get("type") or "").strip().lower() + if field_type == "mode_value": + bind_mode = str(field.get("bind_mode") or "").strip() + bind_value = str(field.get("bind_value") or "").strip() + if bind_mode: + bindings.append( + { + "state_key": f"{field_id}_mode", + "bind": bind_mode, + "kind": "mode", + "field_id": field_id, + } + ) + if bind_value: + bindings.append( + { + "state_key": f"{field_id}_value", + "bind": bind_value, + "kind": "thickness", + "field_id": field_id, + } + ) + continue + + bind = str(field.get("bind") or "").strip() + if bind: + bindings.append( + { + "state_key": field_id, + "bind": bind, + "kind": field_type, + "field_id": field_id, + } + ) + + self._schema_state_bindings_cache = [dict(entry) for entry in bindings] + return [dict(entry) for entry in bindings] + + def _schema_default_for_state_key(self, state_key: str, *, fallback: str = "") -> str: + if state_key in self._defaults: + return str(self._defaults.get(state_key, fallback)) + if state_key.endswith("_mode"): + return "All" + if state_key.endswith("_value"): + return self._thickness_values[0] if self._thickness_values else "" + return str(fallback) + + def _get_state_widget_value(self, binding: dict) -> str: + widget = getattr(self, str(binding.get("bind") or ""), None) + if widget is None: + return "" + if isinstance(widget, QComboBox): + value = widget.currentText() + elif isinstance(widget, QLineEdit): + value = widget.text().strip() + else: + return "" + + kind = str(binding.get("kind") or "").strip().lower() + if kind == "mode": + return self._normalize_thickness_mode(value) + if kind == "thickness": + return self._normalize_sail_value(value) + return str(value) + + def _set_state_widget_value(self, binding: dict, state: dict) -> None: + widget = getattr(self, str(binding.get("bind") or ""), None) + if widget is None: + return + + key = str(binding.get("state_key") or "").strip() + if not key: + return + raw_value = state.get(key, self._schema_default_for_state_key(key)) + kind = str(binding.get("kind") or "").strip().lower() + value = str(raw_value) + if kind == "mode": + value = self._normalize_thickness_mode(value) + elif kind == "thickness": + value = self._normalize_sail_value(value) + + if isinstance(widget, QComboBox): + widget.setCurrentText(value) + elif isinstance(widget, QLineEdit): + widget.setText(value) + + def _apply_line_validator(self, widget: QLineEdit, validator: dict | None) -> None: + validator = validator if isinstance(validator, dict) else {} + if str(validator.get("type") or "").strip().lower() != "int_range": + return + bottom = int(validator.get("bottom", -2147483648)) + top = int(validator.get("top", 2147483647)) + widget.setValidator(QIntValidator(bottom, top, widget)) + def init_ui(self): - combo_width = 190 # keep all combo boxes strictly same width - self._form_label_width = 245 + combo_width = self._combo_width main_layout = QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) @@ -55,11 +485,9 @@ def init_ui(self): scroll = QScrollArea() scroll.setWidgetResizable(True) scroll.setFrameShape(QFrame.NoFrame) + scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - scroll.setStyleSheet( - "QScrollArea { border: none; background: transparent; }" - "QScrollArea > QWidget > QWidget { background: transparent; }" - ) + scroll.setStyleSheet("QScrollArea { border: none; background: transparent; }") main_layout.addWidget(scroll) container = QWidget() @@ -86,7 +514,7 @@ def init_ui(self): girder_row.setContentsMargins(0, 0, 0, 0) girder_row.setSpacing(10) - girder_label = QLabel("Select Member ID:") + girder_label = QLabel(self._normalize_label_text(self._schema_label("member_id", "overview", "Select Member ID:"))) girder_label.setStyleSheet("font-size: 11px; font-weight: 600; color: #3a3a3a; border: none;") girder_row.addWidget(girder_label) @@ -115,7 +543,9 @@ def init_ui(self): left_layout.addLayout(action_row) stiffener_heading = QLabel("Stiffener Inputs") - stiffener_heading.setStyleSheet("font-size: 11px; font-weight: 700; color: #000000; border: none; margin-top: 4px;") + stiffener_heading.setIndent(0) + stiffener_heading.setContentsMargins(0, 0, 0, 0) + stiffener_heading.setStyleSheet("font-size: 11px; font-weight: 700; color: #000000; border: none;") left_layout.addWidget(stiffener_heading) inputs_grid = QGridLayout() @@ -125,89 +555,7 @@ def init_ui(self): inputs_grid.setColumnMinimumWidth(0, self._form_label_width) inputs_grid.setColumnStretch(0, 0) inputs_grid.setColumnStretch(1, 1) - - self.bearing_count_combo = QComboBox() - self.bearing_count_combo.addItems(VALUES_BEARING_STIFFENER_COUNT) - apply_field_style(self.bearing_count_combo) - self.bearing_count_combo.setFixedWidth(combo_width) - self.bearing_count_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - row = self._add_form_row( - inputs_grid, - 0, - "No. of Bearing Stiffeners at each end\n(on one side only):", - self.bearing_count_combo, - ) - - self.bearing_thick_combo = QComboBox() - self.bearing_thick_combo.addItems(VALUES_STIFFENER_THICKNESS_MODE) - apply_field_style(self.bearing_thick_combo) - self.bearing_thick_combo.setFixedWidth(combo_width) - self.bearing_thick_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - row = self._add_form_row(inputs_grid, row, "Bearing Stiffener Thickness (mm):", self.bearing_thick_combo) - - self.bearing_outstand_input = QTextEdit() - self.bearing_outstand_input.setReadOnly(True) - self.bearing_outstand_input.setText(OUTSTAND_DEFAULT_TEXT) - self.bearing_outstand_input.setFixedHeight(28) - self.bearing_outstand_input.setFixedWidth(combo_width) - self.bearing_outstand_input.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - self.bearing_outstand_input.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - self.bearing_outstand_input.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - self.bearing_outstand_input.setStyleSheet( - "QTextEdit { border: 1px solid #d0d0d0; border-radius: 6px; background: #ffffff; " - "color: #5b5b5b; font-size: 11px; }" - ) - row = self._add_form_row(inputs_grid, row, "Outstand of Bearing Stiffener (mm):", self.bearing_outstand_input) - - self.intermediate_combo = QComboBox() - self.intermediate_combo.addItems(VALUES_YES_NO) - apply_field_style(self.intermediate_combo) - self.intermediate_combo.setFixedWidth(combo_width) - self.intermediate_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - row = self._add_form_row(inputs_grid, row, "Intermediate Stiffener:", self.intermediate_combo) - - self.intermediate_spacing_input = QLineEdit() - self.intermediate_spacing_input.setValidator(QIntValidator(1, 10**9, self.intermediate_spacing_input)) - apply_field_style(self.intermediate_spacing_input) - self.intermediate_spacing_input.setPlaceholderText("NA") - self.intermediate_spacing_input.setFixedWidth(combo_width) - self.intermediate_spacing_input.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - row = self._add_form_row(inputs_grid, row, "Intermediate Stiffener Spacing:", self.intermediate_spacing_input) - - self.intermediate_thick_combo = QComboBox() - self.intermediate_thick_combo.addItems(VALUES_STIFFENER_THICKNESS_MODE) - apply_field_style(self.intermediate_thick_combo) - self.intermediate_thick_combo.setFixedWidth(combo_width) - self.intermediate_thick_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - row = self._add_form_row(inputs_grid, row, "Intermediate Stiffener Thickness (mm):", self.intermediate_thick_combo) - - self.intermediate_outstand_input = QTextEdit() - self.intermediate_outstand_input.setReadOnly(True) - self.intermediate_outstand_input.setText(OUTSTAND_DEFAULT_TEXT) - self.intermediate_outstand_input.setFixedHeight(28) - self.intermediate_outstand_input.setFixedWidth(combo_width) - self.intermediate_outstand_input.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - self.intermediate_outstand_input.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - self.intermediate_outstand_input.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - self.intermediate_outstand_input.setStyleSheet( - "QTextEdit { border: 1px solid #d0d0d0; border-radius: 6px; background: #ffffff; " - "color: #5b5b5b; font-size: 11px; }" - ) - row = self._add_form_row(inputs_grid, row, "Outstand of Intermediate Stiffener (mm):", self.intermediate_outstand_input) - - self.longitudinal_combo = QComboBox() - self.longitudinal_combo.addItems(VALUES_LONGITUDINAL_STIFFENER) - apply_field_style(self.longitudinal_combo) - self.longitudinal_combo.setFixedWidth(combo_width) - self.longitudinal_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - row = self._add_form_row(inputs_grid, row, "Longitudinal Stiffener:", self.longitudinal_combo) - - self.long_thick_combo = QComboBox() - self.long_thick_combo.addItems(VALUES_STIFFENER_THICKNESS_MODE) - apply_field_style(self.long_thick_combo) - self.long_thick_combo.setFixedWidth(combo_width) - self.long_thick_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - row = self._add_form_row(inputs_grid, row, "Longitudinal Stiffener Thickness (mm):", self.long_thick_combo) + self._build_stiffener_inputs_from_schema(inputs_grid, combo_width) left_layout.addLayout(inputs_grid) @@ -220,13 +568,7 @@ def init_ui(self): buckling_grid.setHorizontalSpacing(12) buckling_grid.setVerticalSpacing(10) buckling_grid.setColumnMinimumWidth(0, self._form_label_width) - - self.method_combo = QComboBox() - self.method_combo.addItems(VALUES_STIFFENER_DESIGN) - apply_field_style(self.method_combo) - self.method_combo.setFixedWidth(combo_width) - self.method_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - self._add_form_row(buckling_grid, 0, "Shear Buckling Design Method:", self.method_combo) + self._build_web_buckling_inputs_from_schema(buckling_grid, combo_width) left_layout.addLayout(buckling_grid) @@ -253,8 +595,6 @@ def init_ui(self): card_layout.addWidget(right_column, 3) - container_layout.addWidget(card_frame) - # Dynamic image box image_box = self._create_card_frame() image_layout = QVBoxLayout(image_box) @@ -262,32 +602,79 @@ def init_ui(self): image_layout.setSpacing(8) self.dynamic_image_label = QLabel("Dynamic Image") - self.dynamic_image_label.setAlignment(Qt.AlignCenter) - self.dynamic_image_label.setMinimumHeight(140) - self.dynamic_image_label.setStyleSheet( - "QLabel { border: 1px solid #d8d8d8; border-radius: 8px; background-color: #f8f8f8; " - "font-weight: 600; color: #5b5b5b; font-size: 11px; }" - ) + self.dynamic_image_label.setVisible(False) image_layout.addWidget(self.dynamic_image_label) + + preview_top_row = QWidget() + preview_top_row.setMinimumHeight(240) + preview_top_layout = QHBoxLayout(preview_top_row) + preview_top_layout.setContentsMargins(0, 0, 0, 0) + preview_top_layout.setSpacing(6) + preview_top_layout.setAlignment(Qt.AlignTop) + + self.stiffener_cad_preview = StiffenerCadPreviewWidget() + self.stiffener_cad_preview.setStyleSheet( + "QWidget { border: 1px solid #d8d8d8; border-radius: 8px; background-color: #f8f8f8; }" + ) + preview_top_layout.addWidget(self.stiffener_cad_preview, 3, Qt.AlignTop) + legend_widget = self._create_stiffener_legend_widget() + legend_widget.setMinimumWidth(0) + legend_widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + preview_top_layout.addWidget(legend_widget, 1, Qt.AlignTop) + + image_layout.addWidget(preview_top_row, 0, Qt.AlignTop) + image_layout.addStretch(1) container_layout.addWidget(image_box) + # Input + description card below CAD preview. + container_layout.addWidget(card_frame) + # Signals self.girder_member_combo.currentTextChanged.connect(self._on_member_changed) self.bearing_count_combo.currentTextChanged.connect(self._on_any_input_changed) + self.bearing_spacing_input.textChanged.connect(self._on_any_input_changed) self.bearing_thick_combo.currentTextChanged.connect(self._on_any_input_changed) + self.bearing_thick_combo.currentTextChanged.connect(self._on_thickness_mode_changed) + self.bearing_thick_value_combo.currentTextChanged.connect(self._on_any_input_changed) self.intermediate_combo.currentTextChanged.connect(self._on_intermediate_changed) self.longitudinal_combo.currentTextChanged.connect(self._on_longitudinal_changed) self.intermediate_spacing_input.textChanged.connect(self._on_any_input_changed) self.intermediate_thick_combo.currentTextChanged.connect(self._on_any_input_changed) + self.intermediate_thick_combo.currentTextChanged.connect(self._on_thickness_mode_changed) + self.intermediate_thick_value_combo.currentTextChanged.connect(self._on_any_input_changed) self.long_thick_combo.currentTextChanged.connect(self._on_any_input_changed) + self.long_thick_combo.currentTextChanged.connect(self._on_thickness_mode_changed) + self.long_thick_value_combo.currentTextChanged.connect(self._on_any_input_changed) self.method_combo.currentTextChanged.connect(self._on_any_input_changed) + self.bearing_outstand_input.textChanged.connect(self._on_any_input_changed) + self.intermediate_outstand_input.textChanged.connect(self._on_any_input_changed) self.apply_to_all_btn.clicked.connect(self._apply_current_to_all_members) # Defaults self._on_intermediate_changed(self.intermediate_combo.currentText()) self._on_longitudinal_changed(self.longitudinal_combo.currentText()) + self._update_thickness_value_enabled_state(self._active_member_id or "") self.refresh_girder_members() + self._update_dynamic_cad_preview() + + def _set_field_width(self, widget: QWidget, width: int = 190) -> None: + widget.setMaximumWidth(width) + widget.setMinimumWidth(width) + widget.setMinimumHeight(28) + widget.setMaximumHeight(40) + + def _create_mode_value_widget(self, mode_combo: QComboBox, value_combo: QComboBox) -> QWidget: + wrapper = QWidget() + wrapper.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self._set_field_width(wrapper, 190) + + layout = QHBoxLayout(wrapper) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + layout.addWidget(mode_combo) + layout.addWidget(value_combo) + return wrapper def _create_card_frame(self): card = QFrame() @@ -296,8 +683,54 @@ def _create_card_frame(self): ) return card + def _create_stiffener_legend_widget(self) -> QWidget: + legend = QFrame() + legend.setMinimumWidth(180) + legend.setStyleSheet( + "QFrame { border: 1px solid #d8d8d8; border-radius: 8px; background-color: #ffffff; }" + ) + + layout = QVBoxLayout(legend) + layout.setContentsMargins(10, 10, 10, 10) + layout.setSpacing(8) + + title = QLabel("Legend") + title.setStyleSheet("font-size: 11px; font-weight: 700; color: #333333; border: none;") + layout.addWidget(title) + + items = [ + ("Bearing stiffener", StiffenerCadPreviewWidget.BEARING_COLOR), + ("Intermediate stiffener", StiffenerCadPreviewWidget.INTERMEDIATE_COLOR), + ("Longitudinal stiffener", StiffenerCadPreviewWidget.LONG_COLOR), + ] + + for text, color in items: + row = QWidget() + row_layout = QHBoxLayout(row) + row_layout.setContentsMargins(0, 0, 0, 0) + row_layout.setSpacing(8) + + swatch = QLabel() + swatch.setFixedSize(22, 10) + swatch.setStyleSheet( + f"QLabel {{ border: 1px solid #777777; border-radius: 2px; background-color: {color.name()}; }}" + ) + + label = QLabel(text) + label.setStyleSheet("font-size: 10px; color: #3a3a3a; border: none;") + + row_layout.addWidget(swatch, 0, Qt.AlignVCenter) + row_layout.addWidget(label, 1, Qt.AlignVCenter) + layout.addWidget(row) + + layout.addStretch(1) + return legend + + def _normalize_label_text(self, text: str) -> str: + return str(text or "").rstrip(": ") + def _create_label(self, text): - label = QLabel(text) + label = QLabel(self._normalize_label_text(text)) label.setStyleSheet("font-size: 11px; color: #3a3a3a; border: none;") label.setWordWrap(True) label_width = int(getattr(self, "_form_label_width", 245) or 245) @@ -321,10 +754,119 @@ def _add_form_row(self, layout, row, text, widget): layout.addWidget(widget, row, 1) return row + 1 + def _build_stiffener_inputs_from_schema(self, inputs_grid: QGridLayout, combo_width: int) -> None: + self._bearing_row_widgets = [] + row = 0 + for field in self._schema_fields("stiffener_inputs"): + row = self._build_stiffener_input_row(inputs_grid, row, field, combo_width) + + def _build_web_buckling_inputs_from_schema(self, buckling_grid: QGridLayout, combo_width: int) -> None: + row = 0 + for field in self._schema_fields("web_buckling_inputs"): + row = self._build_stiffener_input_row(buckling_grid, row, field, combo_width, section="web_buckling_inputs") + + def _line_placeholder_for_field(self, field_def: dict) -> str: + field_id = str(field_def.get("id") or "").strip() + explicit = field_def.get("placeholder") + if explicit is not None: + return str(explicit) + if field_id in {"bearing_outstand_mm", "intermediate_outstand_mm"}: + return self._schema_default("outstand_default_text", "NA") + if field_id == "intermediate_spacing_mm": + return self._schema_default("intermediate_spacing_mm", "NA") + return "" + + def _build_stiffener_input_row( + self, + grid: QGridLayout, + row: int, + field_def: dict, + combo_width: int, + *, + section: str = "stiffener_inputs", + ) -> int: + field_id = str(field_def.get("id") or "").strip() + field_type = str(field_def.get("type") or "").strip().lower() + + widget: QWidget + if field_type in {"combo", "combo_dynamic"}: + combo = QComboBox() + for choice in field_def.get("choices") or []: + combo.addItem(str(choice)) + default = field_def.get("default") + if default is not None: + combo.setCurrentText(str(default)) + apply_field_style(combo) + combo.setFixedWidth(combo_width) + combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + bind = str(field_def.get("bind") or "").strip() + if bind: + setattr(self, bind, combo) + widget = combo + + elif field_type == "mode_value": + mode_combo = QComboBox() + for choice in field_def.get("mode_choices") or []: + mode_combo.addItem(str(choice)) + default_mode = field_def.get("default_mode") + if default_mode is not None: + mode_combo.setCurrentText(str(default_mode)) + apply_field_style(mode_combo) + mode_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self._set_field_width(mode_combo, combo_width) + + value_combo = QComboBox() + value_combo.addItems(self._thickness_values) + apply_field_style(value_combo) + value_combo.setVisible(False) + value_combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self._set_field_width(value_combo, combo_width) + + bind_mode = str(field_def.get("bind_mode") or "").strip() + bind_value = str(field_def.get("bind_value") or "").strip() + if bind_mode: + setattr(self, bind_mode, mode_combo) + if bind_value: + setattr(self, bind_value, value_combo) + + wrapper = self._create_mode_value_widget(mode_combo, value_combo) + widget = wrapper + + else: + line = QLineEdit() + default = field_def.get("default") + if default is not None: + line.setText(str(default)) + self._apply_line_validator(line, field_def.get("validator")) + placeholder = self._line_placeholder_for_field(field_def) + if placeholder: + line.setPlaceholderText(placeholder) + apply_field_style(line) + line.setFixedWidth(combo_width) + line.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + bind = str(field_def.get("bind") or "").strip() + if bind: + setattr(self, bind, line) + widget = line + + label_text = str(field_def.get("label") or self._schema_label(field_id, section, field_id)) + current_row = row + row = self._add_form_row(grid, row, label_text, widget) + + if field_id.startswith("bearing_"): + label_widget = grid.itemAtPosition(current_row, 0).widget() + self._bearing_row_widgets.append((label_widget, widget)) + if field_id == "bearing_stiffeners_each_end": + self._bearing_count_label_widget = label_widget + self._bearing_count_field_widget = widget + + return row + def bind_girder_details_tab(self, girder_details_tab) -> None: """Bind to the Girder Details tab to populate members and detect optimized members.""" self._girder_details_tab = girder_details_tab self.refresh_girder_members() + self._update_dynamic_cad_preview() def refresh_girder_members(self) -> None: """Refresh the Select Girder Member dropdown from Girder Details segment chains.""" @@ -356,6 +898,7 @@ def refresh_girder_members(self) -> None: # Ensure state exists and UI is synced to the active selection. self._on_member_changed(self.girder_member_combo.currentText()) + self._update_dynamic_cad_preview() def validate(self) -> None: """Validate current stored inputs before saving the dialog.""" @@ -363,6 +906,7 @@ def validate(self) -> None: for member_id, state in self._state_by_member.items(): if self._is_member_optimized(member_id): continue + self._validate_outstand_values(member_id, state) if state.get("intermediate_stiffener") == "Yes": spacing = str(state.get("intermediate_spacing_mm") or "").strip() if not spacing.isdigit() or int(spacing) <= 0: @@ -431,36 +975,43 @@ def showEvent(self, event): # noqa: N802 (Qt naming) self.refresh_girder_members() def _default_member_state(self) -> dict: - return { - "bearing_stiffeners_each_end": "2", - "bearing_thickness_mode": "All", - "bearing_outstand_mm": OUTSTAND_DEFAULT_TEXT, - "intermediate_stiffener": "No", - "intermediate_spacing_mm": "NA", - "intermediate_outstand_mm": OUTSTAND_DEFAULT_TEXT, - "longitudinal_stiffener": "Yes and 1 stiffener", - "intermediate_thickness_mode": "All", - "longitudinal_thickness_mode": "All", - "shear_buckling_method": VALUES_STIFFENER_DESIGN[0] if VALUES_STIFFENER_DESIGN else "", - } + defaults: dict[str, str] = {} + for binding in self._schema_state_bindings(): + key = str(binding.get("state_key") or "").strip() + if not key: + continue + defaults[key] = self._schema_default_for_state_key(key) + + if "shear_buckling_method" not in defaults: + defaults["shear_buckling_method"] = self.method_combo.itemText(0) if self.method_combo.count() else "" + return defaults + + @staticmethod + def _normalize_thickness_mode(value: str) -> str: + text = str(value or "").strip().lower() + if text in {"custom", "customized"}: + return "Custom" + return "All" + + def _normalize_sail_value(self, value: str) -> str: + text = str(value or "").strip() + if text in self._thickness_values: + return text + return self._thickness_values[0] if self._thickness_values else "" def _store_current_member_state(self) -> None: if self._is_loading_ui: return if not self._active_member_id: return - self._state_by_member[self._active_member_id] = { - "bearing_stiffeners_each_end": self.bearing_count_combo.currentText(), - "bearing_thickness_mode": self.bearing_thick_combo.currentText(), - "bearing_outstand_mm": self.bearing_outstand_input.toPlainText().strip(), - "intermediate_stiffener": self.intermediate_combo.currentText(), - "intermediate_spacing_mm": self.intermediate_spacing_input.text().strip(), - "intermediate_outstand_mm": self.intermediate_outstand_input.toPlainText().strip(), - "longitudinal_stiffener": self.longitudinal_combo.currentText(), - "intermediate_thickness_mode": self.intermediate_thick_combo.currentText(), - "longitudinal_thickness_mode": self.long_thick_combo.currentText(), - "shear_buckling_method": self.method_combo.currentText(), - } + state = dict(self._state_by_member.get(self._active_member_id) or self._default_member_state()) + for binding in self._schema_state_bindings(): + key = str(binding.get("state_key") or "").strip() + if not key: + continue + state[key] = self._get_state_widget_value(binding) + self._state_by_member[self._active_member_id] = state + self._update_dynamic_cad_preview() def _load_member_state(self, member_id: str) -> None: # Ensure every member has a state entry. @@ -470,27 +1021,18 @@ def _load_member_state(self, member_id: str) -> None: self._is_loading_ui = True - block_a = self.intermediate_combo.blockSignals(True) - block_b = self.longitudinal_combo.blockSignals(True) - block_c = self.method_combo.blockSignals(True) + blocked_widgets: list[tuple[QWidget, bool]] = [] + for binding in self._schema_state_bindings(): + widget = getattr(self, str(binding.get("bind") or ""), None) + if widget is None or not hasattr(widget, "blockSignals"): + continue + blocked_widgets.append((widget, widget.blockSignals(True))) try: - self.intermediate_combo.setCurrentText(state.get("intermediate_stiffener", "No")) - self.longitudinal_combo.setCurrentText(state.get("longitudinal_stiffener", "Yes and 1 stiffener")) - self.intermediate_thick_combo.setCurrentText(state.get("intermediate_thickness_mode", "All")) - self.long_thick_combo.setCurrentText(state.get("longitudinal_thickness_mode", "All")) - self.method_combo.setCurrentText(state.get("shear_buckling_method", self.method_combo.itemText(0))) - - self.bearing_count_combo.setCurrentText(state.get("bearing_stiffeners_each_end", "2")) - self.bearing_thick_combo.setCurrentText(state.get("bearing_thickness_mode", "All")) - self.bearing_outstand_input.setText(state.get("bearing_outstand_mm", OUTSTAND_DEFAULT_TEXT)) - self.intermediate_outstand_input.setText(state.get("intermediate_outstand_mm", OUTSTAND_DEFAULT_TEXT)) - - # spacing text is managed by _on_intermediate_changed - self.intermediate_spacing_input.setText(str(state.get("intermediate_spacing_mm", "NA"))) + for binding in self._schema_state_bindings(): + self._set_state_widget_value(binding, state) finally: - self.intermediate_combo.blockSignals(block_a) - self.longitudinal_combo.blockSignals(block_b) - self.method_combo.blockSignals(block_c) + for widget, previous in blocked_widgets: + widget.blockSignals(previous) self._is_loading_ui = False self._on_intermediate_changed(self.intermediate_combo.currentText()) @@ -510,6 +1052,7 @@ def _on_member_changed(self, member_id: str) -> None: self._active_member_id = member_id self._load_member_state(member_id) + self._update_dynamic_cad_preview() def _on_any_input_changed(self, *_args) -> None: """Persist UI edits into per-member state as the user types/selects.""" @@ -517,16 +1060,63 @@ def _on_any_input_changed(self, *_args) -> None: def _update_outstand_fields(self, member_id: str) -> None: computed = self._compute_outstand_value(member_id) - value = computed if computed is not None else OUTSTAND_DEFAULT_TEXT + value = computed if computed is not None else "" + + bearing_current = self.bearing_outstand_input.text().strip() + inter_current = self.intermediate_outstand_input.text().strip() + bearing_value = value if bearing_current == "" else bearing_current + inter_value = value if inter_current == "" else inter_current + prev_a = self.bearing_outstand_input.blockSignals(True) prev_b = self.intermediate_outstand_input.blockSignals(True) try: - self.bearing_outstand_input.setText(value) - self.intermediate_outstand_input.setText(value) + self.bearing_outstand_input.setText(bearing_value) + self.intermediate_outstand_input.setText(inter_value) finally: self.bearing_outstand_input.blockSignals(prev_a) self.intermediate_outstand_input.blockSignals(prev_b) + if computed is not None: + state = dict(self._state_by_member.get(member_id) or self._default_member_state()) + if not str(state.get("bearing_outstand_mm") or "").strip(): + state["bearing_outstand_mm"] = computed + if not str(state.get("intermediate_outstand_mm") or "").strip(): + state["intermediate_outstand_mm"] = computed + self._state_by_member[member_id] = state + + def _parse_non_negative_float(self, value: str) -> Optional[float]: + try: + text = str(value or "").strip() + if text == "": + return None + parsed = float(text) + return parsed if parsed >= 0.0 else None + except Exception: + return None + + def _validate_outstand_values(self, member_id: str, state: dict) -> None: + computed = self._compute_outstand_value(member_id) + max_value = None + if computed is not None: + try: + max_value = float(computed) + except (TypeError, ValueError): + max_value = None + + for key, label in ( + ("bearing_outstand_mm", "Outstand of Bearing Stiffener (mm)"), + ("intermediate_outstand_mm", "Outstand of Intermediate Stiffener (mm)"), + ): + raw = str(state.get(key) or "").strip() + parsed = self._parse_non_negative_float(raw) + if parsed is None: + if max_value is not None: + state[key] = f"{max_value:.3f}".rstrip("0").rstrip(".") + continue + if max_value is not None and parsed > max_value: + raise ValueError(f"{label} must be between 0 and {max_value:.3f} for member '{member_id}'.") + + def _compute_outstand_value(self, member_id: str) -> Optional[str]: if self._girder_details_tab is None: return None @@ -580,7 +1170,7 @@ def _on_intermediate_changed(self, text: str) -> None: self._store_current_member_state() def _on_longitudinal_changed(self, text: str) -> None: - is_yes = str(text).strip() == "Yes" + is_yes = str(text).strip().startswith("Yes") if not is_yes: prev_mode = self.long_thick_combo.blockSignals(True) try: @@ -590,6 +1180,48 @@ def _on_longitudinal_changed(self, text: str) -> None: self._refresh_enabled_state(self._active_member_id or "") self._store_current_member_state() + def _is_custom_thickness_mode(self, combo: QComboBox | None) -> bool: + if combo is None: + return False + return (combo.currentText() or "").strip().lower() == "custom" + + def _on_thickness_mode_changed(self, _text: str) -> None: + self._update_thickness_value_enabled_state(self._active_member_id or "") + self._store_current_member_state() + + def _update_thickness_value_enabled_state(self, member_id: str) -> None: + member_id = str(member_id or self._active_member_id or "").strip() + optimized = self._is_member_optimized(member_id) if member_id else False + base_enabled = not optimized + + intermediate_yes = self.intermediate_combo.currentText().strip() == "Yes" + longitudinal_yes = self.longitudinal_combo.currentText().strip().startswith("Yes") + + configs = [ + (self.bearing_thick_combo, self.bearing_thick_value_combo, True), + (self.intermediate_thick_combo, self.intermediate_thick_value_combo, intermediate_yes), + (self.long_thick_combo, self.long_thick_value_combo, longitudinal_yes), + ] + + for mode_combo, value_combo, applicable in configs: + if not optimized: + if mode_combo.currentText().strip().lower() != "custom": + prev = mode_combo.blockSignals(True) + mode_combo.setCurrentText("Custom") + mode_combo.blockSignals(prev) + mode_combo.setVisible(False) + mode_combo.setEnabled(False) + + value_combo.setVisible(True) + value_combo.setEnabled(base_enabled and applicable) + else: + mode_combo.setVisible(True) + mode_combo.setEnabled(base_enabled and applicable) + + is_custom_mode = self._is_custom_thickness_mode(mode_combo) + value_combo.setVisible(is_custom_mode) + value_combo.setEnabled(base_enabled and applicable and is_custom_mode) + def _is_member_optimized(self, member_id: str) -> bool: if self._girder_details_tab is None: return False @@ -603,9 +1235,25 @@ def _is_member_optimized(self, member_id: str) -> bool: def _refresh_enabled_state(self, member_id: str) -> None: member_id = str(member_id or self._active_member_id or "").strip() optimized = self._is_member_optimized(member_id) if member_id else False + exterior = self._is_exterior_member(member_id) if member_id else False + self._update_bearing_count_label(member_id) base_enabled = not optimized - self.bearing_count_combo.setEnabled(base_enabled) + show_bearing_rows = bool(exterior) + for label_widget, field_widget in getattr(self, "_bearing_row_widgets", []): + if label_widget is not None: + label_widget.setVisible(show_bearing_rows) + if field_widget is not None: + field_widget.setVisible(show_bearing_rows) + self.bearing_count_combo.setEnabled(base_enabled and exterior) + self.bearing_spacing_input.setEnabled(base_enabled and exterior) + if exterior: + self.bearing_count_combo.setToolTip("") + self.bearing_spacing_input.setToolTip("Leave empty for auto spacing from minimum member length.") + else: + hint = "Bearing count/spacing is editable only for exterior member IDs (end members)." + self.bearing_count_combo.setToolTip(hint) + self.bearing_spacing_input.setToolTip(hint) self.bearing_thick_combo.setEnabled(base_enabled) self.bearing_outstand_input.setEnabled(base_enabled) self.intermediate_outstand_input.setEnabled(base_enabled) @@ -619,10 +1267,57 @@ def _refresh_enabled_state(self, member_id: str) -> None: self.intermediate_spacing_input.setEnabled(base_enabled and intermediate_yes) self.intermediate_thick_combo.setEnabled(base_enabled and intermediate_yes) self.long_thick_combo.setEnabled(base_enabled and longitudinal_yes) + self._update_thickness_value_enabled_state(member_id) # If optimized, applying changes makes no sense. self.apply_to_all_btn.setEnabled(base_enabled) + @staticmethod + def _parse_member_indices(member_id: str) -> tuple[Optional[int], Optional[int]]: + match = re.match(r"^G(\d+)M(\d+)$", str(member_id or "").strip()) + if not match: + return None, None + try: + return int(match.group(1)), int(match.group(2)) + except Exception: + return None, None + + def _is_exterior_member(self, member_id: str) -> bool: + current_girder, current_member = self._parse_member_indices(member_id) + if current_girder is None or current_member is None: + return True + + members_in_same_girder: List[int] = [] + for mid in self._list_current_member_ids(): + g_idx, m_idx = self._parse_member_indices(mid) + if g_idx == current_girder and m_idx is not None: + members_in_same_girder.append(m_idx) + + if not members_in_same_girder: + return True + + return current_member in {min(members_in_same_girder), max(members_in_same_girder)} + + def _count_members_in_girder(self, member_id: str) -> int: + current_girder, _ = self._parse_member_indices(member_id) + if current_girder is None: + return 0 + + count = 0 + for mid in self._list_current_member_ids(): + g_idx, _ = self._parse_member_indices(mid) + if g_idx == current_girder: + count += 1 + return count + + def _update_bearing_count_label(self, member_id: str) -> None: + label_widget = getattr(self, "_bearing_count_label_widget", None) + if label_widget is None: + return + + text = "No. of Bearing Stiffeners\n(on one side only)" + label_widget.setText(text) + def _list_current_member_ids(self) -> list[str]: members: list[str] = [] for i in range(self.girder_member_combo.count()): @@ -646,6 +1341,62 @@ def _apply_current_to_all_members(self) -> None: # Re-load to ensure the UI reflects the stored state for the active member. self._load_member_state(self._active_member_id) + self._update_dynamic_cad_preview() + + def _resolve_preview_segments_for_active_member(self) -> List[dict]: + if self._girder_details_tab is None: + return [] + + active_member = str(self._active_member_id or "").strip() + match = re.match(r"^(G\d+)M\d+$", active_member) + girder = match.group(1) if match else "" + if not girder: + current = str(self.girder_member_combo.currentText() or "").strip() + fallback = re.match(r"^(G\d+)M\d+$", current) + girder = fallback.group(1) if fallback else "" + if not girder: + return [] + + try: + if hasattr(self._girder_details_tab, "_ensure_girder_segments"): + segments = self._girder_details_tab._ensure_girder_segments(girder) # type: ignore[attr-defined] + else: + segments = (getattr(self._girder_details_tab, "segment_chain", {}) or {}).get(girder, []) + except Exception: + segments = [] + return list(segments or []) + def _resolve_preview_section_dimensions(self, segments: List[dict]) -> Dict[str, dict]: + dims_by_member: Dict[str, dict] = {} + if self._girder_details_tab is None: + return dims_by_member + if not hasattr(self._girder_details_tab, "get_member_section_dimensions"): + return dims_by_member + for seg in segments or []: + member_id = str((seg or {}).get("id") or "").strip() + if not member_id: + continue + try: + dims = self._girder_details_tab.get_member_section_dimensions(member_id) + except Exception: + dims = None + if isinstance(dims, dict): + dims_by_member[member_id] = dict(dims) + + return dims_by_member + + def _update_dynamic_cad_preview(self) -> None: + if not hasattr(self, "stiffener_cad_preview"): + return + segments = self._resolve_preview_segments_for_active_member() + dims_by_member = self._resolve_preview_section_dimensions(segments) + self.stiffener_cad_preview.set_data( + segments=segments, + stiffener_by_member=self._state_by_member, + active_member_id=self._active_member_id or self.girder_member_combo.currentText(), + section_dims_by_member=dims_by_member, + ) + if self._active_member_id: + self._update_outstand_fields(self._active_member_id) diff --git a/src/osdagbridge/desktop/ui/widgets/placeholder_section_preview.py b/src/osdagbridge/desktop/ui/widgets/placeholder_section_preview.py index 000834a00..d222c1e45 100644 --- a/src/osdagbridge/desktop/ui/widgets/placeholder_section_preview.py +++ b/src/osdagbridge/desktop/ui/widgets/placeholder_section_preview.py @@ -11,7 +11,7 @@ class PlaceholderSectionPreviewWidget(QWidget): The underlying SectionPreviewWidget renders nothing when no section is set, which can look like a blank/disabled UI. This wrapper keeps a consistent - placeholder text (e.g. "Bracing", "Top Bracket") until a section is set. + placeholder text (e.g. "Bracing", "Top Chord") until a section is set. """ def __init__(self, placeholder_text: str, min_height: int = 110, parent: QWidget | None = None): @@ -25,7 +25,7 @@ def __init__(self, placeholder_text: str, min_height: int = 110, parent: QWidget "background-color: #f7f7f7; font-weight: bold; color: #5b5b5b; }" ) - self._preview = SectionPreviewWidget() + self._preview = SectionPreviewWidget(min_height=min_height) self._preview.setMinimumHeight(min_height) self._preview.setStyleSheet( "QWidget { border: 1px solid #d0d0d0; border-radius: 10px; background-color: #ffffff; }" diff --git a/src/osdagbridge/desktop/ui/widgets/section_viewer.py b/src/osdagbridge/desktop/ui/widgets/section_viewer.py index bea985765..580e27f2f 100644 --- a/src/osdagbridge/desktop/ui/widgets/section_viewer.py +++ b/src/osdagbridge/desktop/ui/widgets/section_viewer.py @@ -101,9 +101,9 @@ def get_channel(self, designation: str) -> Optional[ChannelSection]: class SectionPreviewWidget(QWidget): """Simple 2D outline renderer for angle/channel variants.""" - def __init__(self, parent=None): + def __init__(self, parent=None, min_height: int = 150): super().__init__(parent) - self.setMinimumHeight(150) + self.setMinimumHeight(int(min_height)) self.setMinimumWidth(140) self._section_type: str = "" self._designation: str = "" @@ -334,13 +334,15 @@ def paintEvent(self, event): if geom_bbox.width() <= 0 or geom_bbox.height() <= 0: return - # Add fixed world-space padding to accommodate dimension lines/arrows - dim_pad_world = 30.0 + # Adaptive world-space padding keeps small sections legible and + # large sections from feeling cramped in the same preview slot. + max_dim = max(geom_bbox.width(), geom_bbox.height()) + dim_pad_world = max(12.0, min(26.0, max_dim * 0.20)) combined = QRectF(geom_bbox) combined.adjust(-dim_pad_world, -dim_pad_world, dim_pad_world, dim_pad_world) - # Ensure a minimum device-space padding so small sections do not look tiny and large ones do not overflow. - min_pixel_pad = 20.0 + # Keep enough pixel padding for labels but avoid shrinking content too much. + min_pixel_pad = 18.0 rw, rh = self.width(), self.height() usable_w = max(rw - 2 * min_pixel_pad, 1.0) usable_h = max(rh - 2 * min_pixel_pad, 1.0) @@ -391,7 +393,8 @@ def _draw_angle_dimensions(self, painter: QPainter, bbox: QRectF, scale: float, a_val = info.get("h", info.get("a", bbox.height())) b_val = info.get("w", info.get("b", bbox.width())) - offset = 15.0 + max_dim = max(bbox.width(), bbox.height()) + offset = max(6.0, min(14.0, max_dim * 0.12)) # W dimension (horizontal at bottom for double angles, at top for single) if is_double: @@ -425,7 +428,8 @@ def _draw_channel_dimensions(self, painter: QPainter, bbox: QRectF, scale: float b = info.get("b", bbox.width()) is_double = info.get("is_double", False) - offset = 15.0 + max_dim = max(bbox.width(), bbox.height()) + offset = max(6.0, min(14.0, max_dim * 0.12)) # B dimension (horizontal at bottom - flange width) if is_double: @@ -464,7 +468,7 @@ def _draw_channel_dimensions(self, painter: QPainter, bbox: QRectF, scale: float # tf dimension (flange thickness - vertical on the right side, label on right) if tf > 0: - self._draw_dim_line_v(painter, scale, y_top, y_top + tf, x_right + 12.0, + self._draw_dim_line_v(painter, scale, y_top, y_top + tf, x_right + max(8.0, offset * 0.8), "t", self._fmt_val(tf), subscript="f", outer_arrows=True, label_right=True) def _draw_dim_line_h(self, painter: QPainter, scale: float, @@ -619,10 +623,11 @@ def _draw_subscript_label(self, painter: QPainter, scale: float, if valign in ("center", "middle"): py += 4 elif valign == "above": - # Lift labels slightly further off the dimension line to avoid overlap + # Lift labels slightly above dimension line. py -= 8 elif valign == "below": - py += 18 + # Keep below-labels close enough that they remain visible in compact previews. + py += 14 # Build text segments: [(text, font, y_offset), ...] segments = [] @@ -656,13 +661,22 @@ def _draw_subscript_label(self, painter: QPainter, scale: float, else: start_x = px - # Draw background if needed to clear lines - if valign in ("center", "middle"): - fm_main = QFontMetrics(main_font) - text_height = fm_main.height() - # Background rect: slightly padded - bg_rect = QRectF(start_x - 2, py - text_height + 4, total_width + 4, text_height) - painter.fillRect(bg_rect, QColor(255, 255, 255, 235)) + # Clamp label extents to the preview widget bounds so text never gets cut. + fm_main = QFontMetrics(main_font) + text_height = fm_main.height() + left_margin = 6.0 + right_margin = 6.0 + top_margin = 6.0 + bottom_margin = 6.0 + + start_x = max(left_margin, min(start_x, self.width() - right_margin - total_width)) + min_baseline = top_margin + fm_main.ascent() + max_baseline = self.height() - bottom_margin - fm_main.descent() + py = max(min_baseline, min(py, max_baseline)) + + # Draw a subtle background behind labels for legibility over geometry lines. + bg_rect = QRectF(start_x - 2, py - text_height + 4, total_width + 4, text_height) + painter.fillRect(bg_rect, QColor(255, 255, 255, 242)) # Draw function for a single pass def draw_segments(color: QColor, offset_x: float = 0, offset_y: float = 0): From fe85ec191bed575d38e5b51ff9117910a19bbceb Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Mon, 6 Apr 2026 22:20:00 +0530 Subject: [PATCH 115/225] Fix footpath rendering and improve cross-section visuals - Correct left footpath duplication issue - Simplify deck-footpath interface (remove dashed lines) - Standardize border colors across components - Improve median and barrier rendering consistency - Adjust deck camber slope for better realism --- .../desktop/ui/docks/cad_cross_section.py | 176 ++++++++++-------- 1 file changed, 94 insertions(+), 82 deletions(-) diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 1746d8b8f..5e96e377e 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -984,6 +984,7 @@ def draw_railing(self, painter, x, y, scale, side): def draw_rcc_railing(self, painter, x_start, y_base, scale, side='left', geo=None): """Draw standard RCC railing based on IRC diagrams""" + border_color = QColor(120, 120, 120) # Dimensions for RCC railing (mm) OUTER_WIDTH_MM = self.params.get('railing_width', 375) RAILING_HEIGHT_MM = self.params.get('railing_height', 1000) @@ -1007,12 +1008,12 @@ def draw_rcc_railing(self, painter, x_start, y_base, scale, side='left', geo=Non corner_radius = min(outer_w * 0.05, 4) painter.setBrush(QBrush(QColor(220, 220, 220))) # Light grey base - painter.setPen(QPen(QColor(34, 34, 34), max(1.5, scale * 2))) + painter.setPen(QPen(border_color, max(1.5, scale * 2))) base_rect = QRectF(rect_x, base_top_y, outer_w, base_h) painter.drawRect(base_rect) painter.setBrush(QBrush(QColor(220, 220, 220))) # Light grey post body - painter.setPen(QPen(QColor(34, 34, 34), max(1.5, scale * 2))) + painter.setPen(QPen(border_color, max(1.5, scale * 2))) post_rect = QRectF(rect_x, post_top_y, outer_w, post_h) painter.drawRoundedRect(post_rect, corner_radius, corner_radius) @@ -1032,7 +1033,7 @@ def draw_rcc_railing(self, painter, x_start, y_base, scale, side='left', geo=Non void_spacing = (inner_height - n_voids * void_h) / (n_voids + 1) painter.setBrush(QBrush(QColor(170, 170, 170))) # Dark grey - painter.setPen(QPen(QColor(30, 30, 30), max(1, scale))) + painter.setPen(QPen(QColor(130, 130, 130), max(1, scale))) for i in range(n_voids): v_y = post_top_y + inner_top_margin + (i + 1) * void_spacing + i * void_h @@ -1051,6 +1052,7 @@ def draw_steel_railing(self, painter, x, y, scale, side, geo): - Steel posts: 150mm x 150mm - Steel rails: 40mm x 40mm (Top and Mid) """ + border_color = QColor(120, 120, 120) RAILING_HEIGHT_MM = geo.get("height", 1100) BASE_HEIGHT_MM = geo.get("base_height", 100) BASE_WIDTH_MM = geo.get("base_width", 375) @@ -1069,7 +1071,7 @@ def draw_steel_railing(self, painter, x, y, scale, side, geo): # 1. Concrete Base painter.setBrush(QBrush(QColor(126, 126, 126))) - painter.setPen(QPen(QColor(34, 34, 34), max(1.5, scale * 2))) + painter.setPen(QPen(border_color, max(1.5, scale * 2))) base_rect = QRectF(rect_x, base_top_y, base_w, base_h) painter.drawRect(base_rect) @@ -1079,7 +1081,7 @@ def draw_steel_railing(self, painter, x, y, scale, side, geo): # Draw post outline only (no fill) so areas between rails are transparent painter.setBrush(Qt.NoBrush) - painter.setPen(QPen(QColor(30, 30, 30), max(1.5, scale * 2))) + painter.setPen(QPen(border_color, max(1.5, scale * 2))) post_rect = QRectF(post_x, railing_top_y, post_size, post_h) painter.drawRect(post_rect) @@ -1099,6 +1101,7 @@ def draw_steel_railing(self, painter, x, y, scale, side, geo): def draw_raised_kerb_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo): """Draw Raised Kerb median (trapezoid shape)""" + border_color = QColor(120, 120, 120) h = geo.get("kerb_height", 225) * scale top_w = geo.get("kerb_top_width", 1200) * scale bottom_w = geo.get("kerb_bottom_width", 1200) * scale @@ -1119,9 +1122,9 @@ def draw_raised_kerb_median(self, painter, median_start_x, median_end_x, deck_to if self.hovered_element == 'median': painter.setBrush(QBrush(QColor(255, 250, 220))) else: - painter.setBrush(QBrush(median_color)) + painter.setBrush(self.concrete_brush) - painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) + painter.setPen(QPen(border_color, max(1.5, scale * 1.5))) painter.drawPolygon(QPolygonF(points)) hover_rect = QRectF(median_start_x, y_top, median_width_px, h) @@ -1129,6 +1132,7 @@ def draw_raised_kerb_median(self, painter, median_start_x, median_end_x, deck_to def draw_rcc_barrier_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo): """Draw two RCC crash barriers for median following standard shape""" + border_color = QColor(120, 120, 120) barrier_h_mm = geo.get("barrier_height", 900.0) bottom_w_mm = geo.get("bottom_width", 450.0) top_w_mm = geo.get("top_width", 175.0) @@ -1150,9 +1154,9 @@ def draw_rcc_barrier_median(self, painter, median_start_x, median_end_x, deck_to y_mid = y_bottom - mid_y_off y_top = y_bottom - h - barrier_brush = QBrush(QColor(255, 250, 220)) if self.hovered_element == 'median' else QBrush(QColor(220, 220, 220)) + barrier_brush = QBrush(QColor(255, 250, 220)) if self.hovered_element == 'median' else self.concrete_brush painter.setBrush(barrier_brush) - painter.setPen(QPen(Qt.black, max(1.5, scale * 1.5))) + painter.setPen(QPen(border_color, max(1.5, scale * 1.5))) # LEFT assembly (faces LEFT) x_l = median_start_x + bottom_w @@ -1177,6 +1181,7 @@ def draw_rcc_barrier_median(self, painter, median_start_x, median_end_x, deck_to def draw_metallic_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo): """Draw Metallic median with a common kerb base and beams on both sides""" + border_color = QColor(120, 120, 120) post_h_mm = geo.get("post_height", 950) n_beams = geo.get("w_beams", 1) median_width_mm = geo.get("median_width", 1200) @@ -1195,7 +1200,7 @@ def draw_metallic_median(self, painter, median_start_x, median_end_x, deck_top_y x_tr = x_tl + top_w painter.setBrush(QBrush(QColor(220, 220, 220))) - painter.setPen(QPen(Qt.black, max(1.0, scale))) + painter.setPen(QPen(border_color, max(1.0, scale))) painter.drawPolygon(QPolygonF([QPointF(x_bl, y_bottom), QPointF(x_br, y_bottom), QPointF(x_tr, y_top_kerb), QPointF(x_tl, y_top_kerb)])) post_w, post_offset = 150.0 * scale, 75.0 * scale @@ -1220,7 +1225,7 @@ def draw_side_assembly(is_left): # Draw Post painter.setBrush(QBrush(post_color)) - painter.setPen(QPen(Qt.black, 1)) + painter.setPen(QPen(border_color, 1)) painter.drawRect(QRectF(p_x, y_top_kerb - post_h, post_w, post_h)) h_centers = [post_h_mm - 165] if n_beams == 1 else [post_h_mm - 165, post_h_mm - 165 - 145 - 330] @@ -1434,6 +1439,17 @@ def draw_cross_section(self, painter): deck_start_x = center_x - (total_deck_width * scale) / 2 deck_left_x = deck_start_x deck_right_x = deck_start_x + total_deck_width * scale + + + deck_width_px = deck_right_x - deck_left_x + mid_x = (deck_left_x + deck_right_x) / 2 + + # 2% of half width + slope_height = 0.005 * (deck_width_px/2) + + def slope_offset(x): + xi = (x - mid_x) / (deck_width_px / 2) # normalize [-1,1] + return -slope_height * (1 - xi**2) # parabola # Calculate all widths in pixels railing_width_px = self.params['railing_width'] * scale @@ -1516,33 +1532,29 @@ def draw_cross_section(self, painter): deck_hovered = (self.hovered_element == 'deck') deck_color = QColor(240, 240, 240) if deck_hovered else CONCRETE_COLOR - painter.setPen(QPen(QColor(0, 0, 0), 2)) - painter.setBrush(Qt.NoBrush) - painter.drawRect(QRectF(deck_slab_left, deck_top_y, - deck_slab_right - deck_slab_left, deck_thick_px)) + - # ---- DRAW FULL DECK SLAB (ONCE) ---- + # ===== CURVED DECK SLAB ===== + num_points = 50 + top_pts = [] + bottom_pts = [] + + for i in range(num_points + 1): + x = deck_slab_left + i * (deck_slab_right - deck_slab_left) / num_points + + y_top = deck_top_y + slope_offset(x) + y_bottom = deck_bottom_y + + top_pts.append(QPointF(x, y_top)) + bottom_pts.insert(0, QPointF(x, y_bottom)) + + deck_polygon = QPolygonF(top_pts + bottom_pts) + painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) - painter.drawRect(QRectF( - deck_slab_left, - deck_top_y, - deck_slab_right - deck_slab_left, - deck_thick_px - )) + painter.drawPolygon(deck_polygon) - if median_present: - painter.setPen(QPen(QColor(0, 0, 0), 2)) - painter.setBrush(Qt.NoBrush) - painter.drawRect(QRectF(deck_slab_left, deck_top_y, - deck_slab_right - deck_slab_left, deck_thick_px)) - - else: - painter.setBrush(self.concrete_brush) - painter.setPen(Qt.NoPen) - painter.drawRect(QRectF(carriageway_start_x, deck_top_y, - carriageway_end_x - carriageway_start_x, deck_thick_px)) '''if wc_thickness_px > 0 and not median_present: painter.setBrush(QBrush(QColor(90, 90, 90))) @@ -1585,22 +1597,44 @@ def draw_cross_section(self, painter): self.cross_section_hover_zones.append((wc_hover_rect, 'wearing_course'))''' # Register hover zone for deck - full width - deck_hover_rect = QRectF(deck_slab_left, deck_top_y, - deck_slab_right - deck_slab_left, deck_thick_px) + # approximate bounding box for curved deck + deck_hover_rect = QRectF( + deck_slab_left, + deck_top_y - slope_height, + deck_slab_right - deck_slab_left, + deck_thick_px + slope_height + ) self.cross_section_hover_zones.append((deck_hover_rect, 'deck')) # Crash barrier deck zones painter.setBrush(self.concrete_brush) - painter.drawRect(QRectF(left_barrier_x, deck_top_y, - crash_barrier_width_px, deck_thick_px)) - painter.drawRect(QRectF(right_barrier_x, deck_top_y, - crash_barrier_width_px, deck_thick_px)) + # LEFT barrier + x_center = left_barrier_x + crash_barrier_width_px / 2 + y_local = deck_top_y + slope_offset(x_center) + + painter.drawRect(QRectF( + left_barrier_x, + y_local, + crash_barrier_width_px, + deck_thick_px + )) + + x_center = right_barrier_x + crash_barrier_width_px / 2 + y_local = deck_top_y + slope_offset(x_center) + + painter.drawRect(QRectF( + right_barrier_x, + y_local, + crash_barrier_width_px, + deck_thick_px + )) # footpath to deck connecting line dashed_pen = QPen(QColor(0, 0, 0), 1.5, Qt.DashLine) dashed_pen.setDashPattern([2, 2]) # Tiny dashes + deck_outline_pen = QPen(QColor(120, 120, 120), 1.0) # making the line dashed if fp_config in ['left', 'both'] and left_fp_width > 0: @@ -1608,12 +1642,15 @@ def draw_cross_section(self, painter): painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) - # sit one pixel higher or precisely on top y edge - painter.drawRect(QRectF(left_fp_x, fp_top_y, - left_fp_width_px, fp_thick_px)) + painter.drawRect(QRectF( + left_fp_x, + fp_top_y, + left_fp_width_px, + fp_thick_px + )) # Draw horizontal edges as solid - painter.setPen(QPen(QColor(0, 0, 0), 2)) + painter.setPen(deck_outline_pen) painter.setBrush(Qt.NoBrush) # Top edge painter.drawLine(QPointF(left_fp_x, fp_top_y), @@ -1623,14 +1660,9 @@ def draw_cross_section(self, painter): QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) # Left edge - painter.setPen(QPen(QColor(0, 0, 0), 2)) + painter.setPen(deck_outline_pen) painter.drawLine(QPointF(left_fp_x, fp_top_y), QPointF(left_fp_x, fp_top_y + fp_thick_px)) - - # Right edge - painter.setPen(dashed_pen) - painter.drawLine(QPointF(left_fp_x + left_fp_width_px, fp_top_y), - QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) if fp_config in ['right', 'both'] and right_fp_width > 0: # Draw footpath fill @@ -1640,7 +1672,7 @@ def draw_cross_section(self, painter): right_fp_width_px, fp_thick_px)) # Draw horizontal edges as solid - painter.setPen(QPen(QColor(0, 0, 0), 2)) + painter.setPen(deck_outline_pen) painter.setBrush(Qt.NoBrush) # Top edge painter.drawLine(QPointF(right_fp_x, fp_top_y), @@ -1649,13 +1681,8 @@ def draw_cross_section(self, painter): painter.drawLine(QPointF(right_fp_x, fp_top_y + fp_thick_px), QPointF(right_fp_x + right_fp_width_px, fp_top_y + fp_thick_px)) - # Left edge (inner edge connecting to deck) - DASHED - painter.setPen(dashed_pen) - painter.drawLine(QPointF(right_fp_x, fp_top_y), - QPointF(right_fp_x, fp_top_y + fp_thick_px)) - # Right edge (outer edge where railing sits) - SOLID - painter.setPen(QPen(QColor(0, 0, 0), 2)) + painter.setPen(deck_outline_pen) painter.drawLine(QPointF(right_fp_x + right_fp_width_px, fp_top_y), QPointF(right_fp_x + right_fp_width_px, fp_top_y + fp_thick_px)) # Draw crash barriers @@ -1666,33 +1693,17 @@ def draw_cross_section(self, painter): #self.draw_crash_barrier(painter, right_barrier_end_x, cb_y, scale, side='right') if median_present: - self.draw_median(painter, median_start_x, median_end_x, deck_top_y, scale, MEDIAN_GREY) + median_center_x = (median_start_x + median_end_x) / 2 + median_y = deck_top_y + slope_offset(median_center_x) + + self.draw_median(painter, median_start_x, median_end_x, median_y, scale, MEDIAN_GREY) # Draw the main deck bottom line solid (only the deck slab portion) - painter.setPen(QPen(QColor(0, 0, 0), 1.5)) + painter.setPen(deck_outline_pen) painter.drawLine(QPointF(deck_slab_left, deck_bottom_y), QPointF(deck_slab_right, deck_bottom_y)) - # Draw dashed lines for footpath area bottom and vertical connections - # Left footpath area - if fp_config in ['left', 'both'] and left_fp_width > 0: - painter.setPen(dashed_pen) - # Bottom line under footpath area (dashed) - painter.drawLine(QPointF(deck_left_x, deck_bottom_y), - QPointF(deck_slab_left, deck_bottom_y)) - # Outer vertical line from footpath bottom to deck bottom level (dashed) - painter.drawLine(QPointF(deck_left_x, fp_top_y + fp_thick_px), - QPointF(deck_left_x, deck_bottom_y)) - - # Right footpath area - if fp_config in ['right', 'both'] and right_fp_width > 0: - painter.setPen(dashed_pen) - # Bottom line under footpath area (dashed) - painter.drawLine(QPointF(deck_slab_right, deck_bottom_y), - QPointF(deck_right_x, deck_bottom_y)) - # Outer vertical line from footpath bottom to deck bottom level (dashed) - painter.drawLine(QPointF(deck_right_x, fp_top_y + fp_thick_px), - QPointF(deck_right_x, deck_bottom_y)) + # Divider lines between deck and footpaths are intentionally omitted # Draw girders and stiffeners for girder_x in positions: @@ -1961,7 +1972,7 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r cw_m = self.params['carriageway_width'] / 1000 # Left carriageway - starts exactly at left barrier visual end - label_cw = "Carriageway" + label_cw = "Carriageway Width" if self.show_carriageway_values: label_cw += f" = {cw_m:.2f} m" @@ -2539,6 +2550,7 @@ def draw_stiffeners(self, painter, x, base_y, scale, stiffener_color): def draw_crash_barrier(self, painter, x, y, scale, side='left'): """Draw crash barrier cross-section using IRC 5 geometry spec. """ + border_color = QColor(120, 120, 120) cb_type = self.crash_barrier_type geo = CrashBarrierGeometry.get_geometry(cb_type) @@ -2573,8 +2585,8 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): left_at_top = 50 * scale * shape_scale # inner wall x at top (lean) right_at_top = 225 * scale * shape_scale # outer wall x at top - painter.setBrush(QBrush(barrier_color)) - painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) + painter.setBrush(QBrush(QColor(255, 250, 220)) if self.hovered_element == 'crash_barrier' else self.concrete_brush) + painter.setPen(QPen(border_color, max(1.5, scale * 1.5))) if side == 'left': # Same as median RIGHT barrier (carriageway-facing curve on the right) @@ -2681,7 +2693,7 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): # Draw Kerb painter.setBrush(QBrush(QColor(180, 180, 180))) - painter.setPen(QPen(Qt.black, max(1.0, scale))) + painter.setPen(QPen(border_color, max(1.0, scale))) painter.drawPolygon(QPolygonF(kerb_points)) # Draw Post From cdfc9cdaff0b7edb005e6d7d40dee30750917320 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Wed, 8 Apr 2026 02:58:05 +0530 Subject: [PATCH 116/225] Clean unused functions, improve rendering, and fix cross-section issues - Removed unused helper functions from Additional Inputs dialog - Removed redundant get_typical_section_params from Typical Section tab - Added concrete texture styling for median types(raised kerb and RCC barrier) - Removed unnecessary divider/bottom lines from deck/footpaths for cleaner rendering --- .../desktop/ui/dialogs/additional_inputs.py | 9 --- .../dialogs/tabs/typical_section_details.py | 52 +---------------- .../desktop/ui/docks/cad_cross_section.py | 58 ++++++++++++------- 3 files changed, 39 insertions(+), 80 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py index 2e8beb63b..252833c07 100644 --- a/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py +++ b/src/osdagbridge/desktop/ui/dialogs/additional_inputs.py @@ -153,15 +153,6 @@ def _collect_all_values(self): elif isinstance(widget, QCheckBox): self.saved_values[widget_name] = widget.isChecked() - def get_saved_values(self): - """Return the dictionary of saved values.""" - return self.saved_values.copy() - - # compatibility helper used elsewhere in codebase - def get_all_values(self): - """Alias to get_saved_values for older callers.""" - return self.get_saved_values() - def setupWrapper(self): self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 009d3af04..34b62ce29 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -419,57 +419,7 @@ def _update_cad_preview(self): if params: self.cad_preview.update_params(params) - - - - def get_typical_section_params(self) -> dict: - - """ - @author: Faizan - - Reads and returns the current Typical Section parameters from the UI, - including crash barrier, median, and railing properties, as a dictionary - (dimensions in mm). - - The returned values are consistent with those used in - _update_cad_preview(). - """ - params = {} - - # ---- Crash Barrier ---- - if hasattr(self, "crash_barrier_type"): - params["crash_barrier_type"] = self.crash_barrier_type.currentText() - - if hasattr(self, "crash_barrier_width") and self.crash_barrier_width.text(): - params["crash_barrier_width"] = float(self.crash_barrier_width.text()) * 1000 - - if hasattr(self, "crash_barrier_height") and self.crash_barrier_height.text(): - params["crash_barrier_height"] = float(self.crash_barrier_height.text()) * 1000 - - # ---- Median (ADD THIS) ---- - if hasattr(self, "median_type"): - params["median_type"] = self.median_type.currentText() - - if hasattr(self, "median_present"): - params["median_present"] = self.median_present.isChecked() - - if hasattr(self, "median_width") and self.median_width.text(): - params["median_width"] = float(self.median_width.text()) * 1000 - - if hasattr(self, "median_height") and self.median_height.text(): - params["median_height"] = float(self.median_height.text()) * 1000 - - # ---- Railing (ADD THIS) ---- - if hasattr(self, "railing_type"): - params["railing_type"] = self.railing_type.currentText() - - if hasattr(self, "railing_width") and self.railing_width.text(): - params["railing_width"] = float(self.railing_width.text()) - - if hasattr(self, "railing_height") and self.railing_height.text(): - params["railing_height"] = float(self.railing_height.text()) * 1000 - - return params + def _get_footpath_count(self): if self.footpath_value == "Both Sides": diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 5e96e377e..92e416187 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -1340,7 +1340,7 @@ def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck QPointF(x_right, y_base_top), # left after base ] - painter.setBrush(QBrush(MEDIAN_GREY)) + painter.setBrush(QBrush(QColor(221, 221, 221))) painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) painter.drawPolygon(QPolygonF(points_right)) # ---- Register hover zone for median ---- @@ -1352,6 +1352,20 @@ def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck ) self.cross_section_hover_zones.append((hover_rect, 'median')) + def _get_crash_barrier_rendered_width_mm(self): + """Return the actual crash barrier footprint width used by draw_crash_barrier.""" + geo = CrashBarrierGeometry.get_geometry(self.crash_barrier_type) + default_width = float(self.params.get('crash_barrier_width', 500)) + + if not geo: + return default_width + + if geo.get("type") == "rcc": + return float(geo.get("bottom_width", default_width)) + + # Metallic crash barrier in draw_crash_barrier currently uses a 550 mm kerb base. + return float(geo.get("kerb_bottom_width", 550.0)) + def draw_cross_section(self, painter): """Draw cross-section with median support and hover highlighting""" @@ -1655,9 +1669,6 @@ def slope_offset(x): # Top edge painter.drawLine(QPointF(left_fp_x, fp_top_y), QPointF(left_fp_x + left_fp_width_px, fp_top_y)) - # Bottom edge - painter.drawLine(QPointF(left_fp_x, fp_top_y + fp_thick_px), - QPointF(left_fp_x + left_fp_width_px, fp_top_y + fp_thick_px)) # Left edge painter.setPen(deck_outline_pen) @@ -1677,9 +1688,6 @@ def slope_offset(x): # Top edge painter.drawLine(QPointF(right_fp_x, fp_top_y), QPointF(right_fp_x + right_fp_width_px, fp_top_y)) - # Bottom edge - painter.drawLine(QPointF(right_fp_x, fp_top_y + fp_thick_px), - QPointF(right_fp_x + right_fp_width_px, fp_top_y + fp_thick_px)) # Right edge (outer edge where railing sits) - SOLID painter.setPen(deck_outline_pen) @@ -1891,12 +1899,15 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r left_barrier_end_x = left_barrier_x + crash_barrier_width_px if right_barrier_end_x is None: right_barrier_end_x = right_barrier_x + crash_barrier_width_px - - # Left barrier starts at left_barrier_x and extends RIGHT by crash_barrier_width_px - left_barrier_visual_end = left_barrier_x + crash_barrier_width_px - - # Right barrier ENDS at right_barrier_end_x and extends LEFT by crash_barrier_width_px - right_barrier_visual_start = right_barrier_end_x - crash_barrier_width_px + + # Use rendered barrier footprint (geometry-based) so extensions touch barrier ends. + rendered_cb_width_px = self._get_crash_barrier_rendered_width_mm() * scale + + # Left barrier starts at left_barrier_x and extends RIGHT by rendered width. + left_barrier_visual_end = left_barrier_x + rendered_cb_width_px + + # Right barrier ENDS at right_barrier_end_x and extends LEFT by rendered width. + right_barrier_visual_start = right_barrier_end_x - rendered_cb_width_px # DIMENSION LEVELS (Bottom) @@ -2097,8 +2108,15 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r deck_center_x = (deck_slab_left + deck_slab_right) / 2 if deck_thick_px > 5: + # Use local curved deck top so the arrow spans the full visible thickness. + deck_width_px = deck_right_x - deck_left_x + mid_x = (deck_left_x + deck_right_x) / 2 + slope_height = 0.005 * (deck_width_px / 2) + xi = (deck_center_x - mid_x) / (deck_width_px / 2) if deck_width_px != 0 else 0.0 + local_deck_top_y = deck_top_y - slope_height * (1 - xi ** 2) + painter.setPen(QPen(QColor(0, 0, 0), 0.8)) - painter.drawLine(QPointF(deck_center_x, deck_top_y), QPointF(deck_center_x, deck_bottom_y)) + painter.drawLine(QPointF(deck_center_x, local_deck_top_y), QPointF(deck_center_x, deck_bottom_y)) arrow_size = 3.5 arrow_gap = 2 @@ -2106,9 +2124,9 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r painter.setBrush(QBrush(QColor(0, 0, 0))) top_arrow = [ - QPointF(deck_center_x, deck_top_y - arrow_gap), - QPointF(deck_center_x - half_w, deck_top_y - arrow_gap - arrow_size), - QPointF(deck_center_x + half_w, deck_top_y - arrow_gap - arrow_size), + QPointF(deck_center_x, local_deck_top_y - arrow_gap), + QPointF(deck_center_x - half_w, local_deck_top_y - arrow_gap - arrow_size), + QPointF(deck_center_x + half_w, local_deck_top_y - arrow_gap - arrow_size), ] painter.drawPolygon(QPolygonF(top_arrow)) @@ -2120,8 +2138,8 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r painter.drawPolygon(QPolygonF(bottom_arrow)) tick_len = 4 - painter.drawLine(QPointF(deck_center_x - tick_len, deck_top_y), - QPointF(deck_center_x + tick_len, deck_top_y)) + painter.drawLine(QPointF(deck_center_x - tick_len, local_deck_top_y), + QPointF(deck_center_x + tick_len, local_deck_top_y)) painter.drawLine(QPointF(deck_center_x - tick_len, deck_bottom_y), QPointF(deck_center_x + tick_len, deck_bottom_y)) @@ -2134,7 +2152,7 @@ def add_professional_cross_section_dimensions(self, painter, deck_left_x, deck_r metrics = painter.fontMetrics() text_width = metrics.boundingRect(text).width() text_x = deck_center_x - text_width / 2 - text_y = deck_top_y - 8 + text_y = local_deck_top_y - 8 self.draw_text_with_background(painter, text_x, text_y, text, QColor(255, 255, 255, 255), QColor(0, 0, 0), 9, False) From 6aad235b1a0aba893aa1745e93ca3603905ce861 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 9 Apr 2026 01:27:09 +0530 Subject: [PATCH 117/225] Add curved wearing course and clean deck-footpath rendering - Implemented curved wearing course following deck camber using polygon - Removed footpath edge outlines causing unwanted visual lines - Adjusted railing placement to sit on deck top instead of footpath --- .../desktop/ui/docks/cad_cross_section.py | 133 +++++++----------- 1 file changed, 47 insertions(+), 86 deletions(-) diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 92e416187..68676baf3 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -15,12 +15,7 @@ RailingGeometry, MedianGeometry, ) -from osdagbridge.core.utils.common import ( - KEY_WEARING_COAT_THICKNESS, - KEY_WEARING_COAT_DENSITY, - KEY_WEARING_COAT_MATERIAL, -) -import random + class CrossSectionCADWidget(QWidget): """Widget for drawing bridge cross-section view""" @@ -85,6 +80,7 @@ def __init__(self, parent=None): 'railing_width': 375, 'median_present': False, 'median_width': 1200, + 'wearing_course_thickness': 50, } # girder dimensions (mm) @@ -1440,12 +1436,9 @@ def draw_cross_section(self, painter): deck_bottom_y = girder_top_y deck_top_y = deck_bottom_y - deck_thick_px - '''# ===== WEARING COURSE ===== - wc_thickness_mm = self.params.get(KEY_WEARING_COAT_THICKNESS, 0) + # ------ WEARING COURSE --------- + wc_thickness_mm = self.params.get('wearing_course_thickness', 50) wc_thickness_px = wc_thickness_mm * scale - - wc_bottom_y = deck_top_y - wc_top_y = wc_bottom_y - wc_thickness_px''' fp_bottom_y = deck_bottom_y fp_top_y = fp_bottom_y - fp_thick_px @@ -1570,45 +1563,49 @@ def slope_offset(x): - '''if wc_thickness_px > 0 and not median_present: - painter.setBrush(QBrush(QColor(90, 90, 90))) - painter.setPen(Qt.NoPen) + # ===== WEARING COURSE (CURVED) ===== + if wc_thickness_px > 0: - painter.drawRect(QRectF( - carriageway_start_x, - wc_top_y, - carriageway_end_x - carriageway_start_x, - wc_thickness_px - )) - - if wc_thickness_px > 0 and median_present: - painter.setBrush(QBrush(QColor(90, 90, 90))) + painter.setBrush(QBrush(QColor(40, 40, 40))) # asphalt black painter.setPen(Qt.NoPen) - # Left carriageway wearing course - painter.drawRect(QRectF( - carriageway_start_x, - wc_top_y, - median_start_x - carriageway_start_x, - wc_thickness_px - )) + num_points = 50 + top_pts = [] + bottom_pts = [] + + # Function to restrict to carriageway only + def is_in_carriageway(x): + if median_present: + return ((carriageway_start_x <= x <= median_start_x) or + (median_end_x <= x <= carriageway_end_x)) + else: + return (carriageway_start_x <= x <= carriageway_end_x) + + for i in range(num_points + 1): + x = deck_left_x + i * (deck_right_x - deck_left_x) / num_points + + if not (left_barrier_x <= x <= right_barrier_end_x): + continue + + y_bottom = deck_top_y + slope_offset(x) + y_top = y_bottom - wc_thickness_px + + top_pts.append(QPointF(x, y_top)) + bottom_pts.insert(0, QPointF(x, y_bottom)) + + if top_pts and bottom_pts: + wc_polygon = QPolygonF(top_pts + bottom_pts) + painter.drawPolygon(wc_polygon) + + wc_hover_rect = QRectF( + carriageway_start_x, + deck_top_y - slope_height, + carriageway_end_x - carriageway_start_x, + wc_thickness_px + slope_height + ) + self.cross_section_hover_zones.append((wc_hover_rect, 'wearing_course')) + - # Right carriageway wearing course - painter.drawRect(QRectF( - median_end_x, - wc_top_y, - carriageway_end_x - median_end_x, - wc_thickness_px - )) - - if wc_thickness_px > 0: - wc_hover_rect = QRectF( - carriageway_start_x, - wc_top_y, - carriageway_end_x - carriageway_start_x, - wc_thickness_px - ) - self.cross_section_hover_zones.append((wc_hover_rect, 'wearing_course'))''' # Register hover zone for deck - full width # approximate bounding box for curved deck @@ -1620,30 +1617,6 @@ def slope_offset(x): ) self.cross_section_hover_zones.append((deck_hover_rect, 'deck')) - # Crash barrier deck zones - painter.setBrush(self.concrete_brush) - - - # LEFT barrier - x_center = left_barrier_x + crash_barrier_width_px / 2 - y_local = deck_top_y + slope_offset(x_center) - - painter.drawRect(QRectF( - left_barrier_x, - y_local, - crash_barrier_width_px, - deck_thick_px - )) - - x_center = right_barrier_x + crash_barrier_width_px / 2 - y_local = deck_top_y + slope_offset(x_center) - - painter.drawRect(QRectF( - right_barrier_x, - y_local, - crash_barrier_width_px, - deck_thick_px - )) # footpath to deck connecting line dashed_pen = QPen(QColor(0, 0, 0), 1.5, Qt.DashLine) @@ -1663,17 +1636,10 @@ def slope_offset(x): fp_thick_px )) - # Draw horizontal edges as solid - painter.setPen(deck_outline_pen) - painter.setBrush(Qt.NoBrush) + # Top edge painter.drawLine(QPointF(left_fp_x, fp_top_y), QPointF(left_fp_x + left_fp_width_px, fp_top_y)) - - # Left edge - painter.setPen(deck_outline_pen) - painter.drawLine(QPointF(left_fp_x, fp_top_y), - QPointF(left_fp_x, fp_top_y + fp_thick_px)) if fp_config in ['right', 'both'] and right_fp_width > 0: # Draw footpath fill @@ -1688,11 +1654,6 @@ def slope_offset(x): # Top edge painter.drawLine(QPointF(right_fp_x, fp_top_y), QPointF(right_fp_x + right_fp_width_px, fp_top_y)) - - # Right edge (outer edge where railing sits) - SOLID - painter.setPen(deck_outline_pen) - painter.drawLine(QPointF(right_fp_x + right_fp_width_px, fp_top_y), - QPointF(right_fp_x + right_fp_width_px, fp_top_y + fp_thick_px)) # Draw crash barriers #cb_y = deck_top_y - 1 # Left barrier: x is where it STARTS (left edge) @@ -1711,7 +1672,7 @@ def slope_offset(x): painter.drawLine(QPointF(deck_slab_left, deck_bottom_y), QPointF(deck_slab_right, deck_bottom_y)) - # Divider lines between deck and footpaths are intentionally omitted + # Draw girders and stiffeners for girder_x in positions: @@ -1842,11 +1803,11 @@ def slope_offset(x): if fp_config in ['left', 'both'] and left_fp_width > 0: railing_x = deck_left_x - left_railing_rect = self.draw_railing(painter, railing_x, fp_top_y, scale, "left") + left_railing_rect = self.draw_railing(painter, railing_x, deck_top_y, scale, "left") if fp_config in ['right', 'both'] and right_fp_width > 0: railing_x = deck_right_x - railing_outer_width_px - right_railing_rect = self.draw_railing(painter, railing_x, fp_top_y, scale, "right") + right_railing_rect = self.draw_railing(painter, railing_x, deck_top_y, scale, "right") # Draw crash barriers cb_y = deck_top_y # Left barrier: x is where it STARTS (left edge) From 9de4835557b53f4c0394f765890f273dff4ab910 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Sat, 11 Apr 2026 02:04:31 +0530 Subject: [PATCH 118/225] fix cross-section bugs from previous update - fixed camber to apply only on carriageway width - removed wearing course from the median gap - corrected railing position on increasing footpath thickness - fixed footpath edge lines --- .../desktop/ui/docks/cad_cross_section.py | 111 +++++++++++------- 1 file changed, 69 insertions(+), 42 deletions(-) diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 68676baf3..3b3d0d1f0 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -1446,17 +1446,6 @@ def draw_cross_section(self, painter): deck_start_x = center_x - (total_deck_width * scale) / 2 deck_left_x = deck_start_x deck_right_x = deck_start_x + total_deck_width * scale - - - deck_width_px = deck_right_x - deck_left_x - mid_x = (deck_left_x + deck_right_x) / 2 - - # 2% of half width - slope_height = 0.005 * (deck_width_px/2) - - def slope_offset(x): - xi = (x - mid_x) / (deck_width_px / 2) # normalize [-1,1] - return -slope_height * (1 - xi**2) # parabola # Calculate all widths in pixels railing_width_px = self.params['railing_width'] * scale @@ -1510,6 +1499,22 @@ def slope_offset(x): median_start_x = None median_end_x = None + # Apply cross slope only in the carriageway region: + # start after left crash barrier and end before right crash barrier. + slope_start_x = carriageway_start_x + slope_end_x = carriageway_end_x + slope_span = max(1.0, slope_end_x - slope_start_x) + slope_mid_x = (slope_start_x + slope_end_x) / 2.0 + + # 0.5% of half carriageway width (parabolic camber) + slope_height = 0.005 * (slope_span / 2.0) + + def slope_offset(x): + if x < slope_start_x or x > slope_end_x: + return 0.0 + xi = (x - slope_mid_x) / (slope_span / 2.0) # normalize [-1,1] + return -slope_height * (1.0 - xi**2) + n = max(1, int(self.params['num_girders'])) deck_overhang_px = self.params.get('deck_overhang', 1000) * scale @@ -1569,33 +1574,34 @@ def slope_offset(x): painter.setBrush(QBrush(QColor(40, 40, 40))) # asphalt black painter.setPen(Qt.NoPen) - num_points = 50 - top_pts = [] - bottom_pts = [] - - # Function to restrict to carriageway only - def is_in_carriageway(x): - if median_present: - return ((carriageway_start_x <= x <= median_start_x) or - (median_end_x <= x <= carriageway_end_x)) - else: - return (carriageway_start_x <= x <= carriageway_end_x) - - for i in range(num_points + 1): - x = deck_left_x + i * (deck_right_x - deck_left_x) / num_points - - if not (left_barrier_x <= x <= right_barrier_end_x): - continue - - y_bottom = deck_top_y + slope_offset(x) - y_top = y_bottom - wc_thickness_px - - top_pts.append(QPointF(x, y_top)) - bottom_pts.insert(0, QPointF(x, y_bottom)) - - if top_pts and bottom_pts: - wc_polygon = QPolygonF(top_pts + bottom_pts) - painter.drawPolygon(wc_polygon) + # Use rendered barrier footprint so wearing course reaches visual barrier ends. + rendered_cb_width_px = self._get_crash_barrier_rendered_width_mm() * scale + left_barrier_visual_end = left_barrier_x + rendered_cb_width_px + right_barrier_visual_start = right_barrier_end_x - rendered_cb_width_px + + def draw_wearing_segment(x_start, x_end, num_points=50): + if x_end <= x_start: + return + seg_top_pts = [] + seg_bottom_pts = [] + for i in range(num_points + 1): + x = x_start + i * (x_end - x_start) / num_points + y_bottom = deck_top_y + slope_offset(x) + y_top = y_bottom - wc_thickness_px + seg_top_pts.append(QPointF(x, y_top)) + seg_bottom_pts.insert(0, QPointF(x, y_bottom)) + + if seg_top_pts and seg_bottom_pts: + painter.drawPolygon(QPolygonF(seg_top_pts + seg_bottom_pts)) + + if median_present and median_start_x is not None and median_end_x is not None: + # Left carriageway strip + draw_wearing_segment(left_barrier_visual_end, median_start_x) + # Right carriageway strip + draw_wearing_segment(median_end_x, right_barrier_visual_start) + else: + # Single carriageway strip + draw_wearing_segment(left_barrier_visual_end, right_barrier_visual_start) wc_hover_rect = QRectF( carriageway_start_x, @@ -1629,6 +1635,15 @@ def is_in_carriageway(x): painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) + # Raise slab under left railing as well so railing stays on top + if left_railing_present and left_rail_w_px > 0: + painter.drawRect(QRectF( + deck_left_x, + fp_top_y, + left_rail_w_px, + fp_thick_px + )) + painter.drawRect(QRectF( left_fp_x, fp_top_y, @@ -1638,13 +1653,23 @@ def is_in_carriageway(x): # Top edge - painter.drawLine(QPointF(left_fp_x, fp_top_y), + painter.setPen(deck_outline_pen) + painter.drawLine(QPointF(deck_left_x, fp_top_y), QPointF(left_fp_x + left_fp_width_px, fp_top_y)) if fp_config in ['right', 'both'] and right_fp_width > 0: # Draw footpath fill painter.setBrush(self.concrete_brush) painter.setPen(Qt.NoPen) + # Raise slab under right railing as well so railing stays on top + if right_railing_present and right_rail_w_px > 0: + painter.drawRect(QRectF( + deck_right_x - right_rail_w_px, + fp_top_y, + right_rail_w_px, + fp_thick_px + )) + painter.drawRect(QRectF(right_fp_x, fp_top_y, right_fp_width_px, fp_thick_px)) @@ -1653,7 +1678,7 @@ def is_in_carriageway(x): painter.setBrush(Qt.NoBrush) # Top edge painter.drawLine(QPointF(right_fp_x, fp_top_y), - QPointF(right_fp_x + right_fp_width_px, fp_top_y)) + QPointF(deck_right_x, fp_top_y)) # Draw crash barriers #cb_y = deck_top_y - 1 # Left barrier: x is where it STARTS (left edge) @@ -1803,11 +1828,13 @@ def is_in_carriageway(x): if fp_config in ['left', 'both'] and left_fp_width > 0: railing_x = deck_left_x - left_railing_rect = self.draw_railing(painter, railing_x, deck_top_y, scale, "left") + # Place railing on raised footpath top, not on main deck top. + left_railing_rect = self.draw_railing(painter, railing_x, fp_top_y, scale, "left") if fp_config in ['right', 'both'] and right_fp_width > 0: railing_x = deck_right_x - railing_outer_width_px - right_railing_rect = self.draw_railing(painter, railing_x, deck_top_y, scale, "right") + # Place railing on raised footpath top, not on main deck top. + right_railing_rect = self.draw_railing(painter, railing_x, fp_top_y, scale, "right") # Draw crash barriers cb_y = deck_top_y # Left barrier: x is where it STARTS (left edge) From d413354acacad93df38a86c85d33e02d4737b609 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Mon, 13 Apr 2026 22:09:42 +0530 Subject: [PATCH 119/225] refactor: update wearing course inputs and sync with CAD - renamed wearing_coat fields to wearing_* - added wearing_course_* parameters - kept UI and CAD parameters consistent --- .../dialogs/tabs/typical_section_details.py | 21 +++++++++++++------ .../desktop/ui/docks/cad_dual_view.py | 18 ++++++++-------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 34b62ce29..550497c6e 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -275,6 +275,9 @@ def init_ui(self): if hasattr(self, "wearing_thickness"): self.wearing_thickness.editingFinished.connect(self._update_cad_preview) + if hasattr(self, "wearing_density"): + self.wearing_density.editingFinished.connect(self._update_cad_preview) + if hasattr(self, "wearing_material"): self.wearing_material.currentTextChanged.connect(self._update_cad_preview) @@ -371,14 +374,20 @@ def _update_cad_preview(self): params["crash_barrier_type"] = ui_cb_type # ---- Wearing Course ---- - if hasattr(self, "wearing_coat_thickness") and self.wearing_coat_thickness.text(): - params[KEY_WEARING_COAT_THICKNESS] = float(self.wearing_coat_thickness.text()) + if hasattr(self, "wearing_thickness") and self.wearing_thickness.text(): + wearing_thickness = float(self.wearing_thickness.text()) + params[KEY_WEARING_COAT_THICKNESS] = wearing_thickness + params["wearing_course_thickness"] = wearing_thickness - if hasattr(self, "wearing_coat_density") and self.wearing_coat_density.text(): - params[KEY_WEARING_COAT_DENSITY] = float(self.wearing_coat_density.text()) + if hasattr(self, "wearing_density") and self.wearing_density.text(): + wearing_density = float(self.wearing_density.text()) + params[KEY_WEARING_COAT_DENSITY] = wearing_density + params["wearing_course_density"] = wearing_density - if hasattr(self, "wearing_coat_material"): - params[KEY_WEARING_COAT_MATERIAL] = self.wearing_coat_material.currentText() + if hasattr(self, "wearing_material"): + wearing_material = self.wearing_material.currentText() + params[KEY_WEARING_COAT_MATERIAL] = wearing_material + params["wearing_course_material"] = wearing_material # ---- Median ---- if hasattr(self, "median_type"): diff --git a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py index da9ac1a96..de8bda925 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py @@ -237,19 +237,19 @@ def update_from_osdag_inputs(self, input_dict): # ---- Wearing Coat ---- if KEY_WEARING_COAT_THICKNESS in input_dict: - params[KEY_WEARING_COAT_THICKNESS] = float( - input_dict[KEY_WEARING_COAT_THICKNESS] - ) + wearing_thickness = float(input_dict[KEY_WEARING_COAT_THICKNESS]) + params[KEY_WEARING_COAT_THICKNESS] = wearing_thickness + params["wearing_course_thickness"] = wearing_thickness if KEY_WEARING_COAT_DENSITY in input_dict: - params[KEY_WEARING_COAT_DENSITY] = float( - input_dict[KEY_WEARING_COAT_DENSITY] - ) + wearing_density = float(input_dict[KEY_WEARING_COAT_DENSITY]) + params[KEY_WEARING_COAT_DENSITY] = wearing_density + params["wearing_course_density"] = wearing_density if KEY_WEARING_COAT_MATERIAL in input_dict: - params[KEY_WEARING_COAT_MATERIAL] = input_dict[ - KEY_WEARING_COAT_MATERIAL - ] + wearing_material = input_dict[KEY_WEARING_COAT_MATERIAL] + params[KEY_WEARING_COAT_MATERIAL] = wearing_material + params["wearing_course_material"] = wearing_material # Map footpath configuration From 346e4e83d963baad211d95b552a6279b9d0ce959 Mon Sep 17 00:00:00 2001 From: Faizan Khan Date: Thu, 16 Apr 2026 11:42:40 +0530 Subject: [PATCH 120/225] Added Custom type drawing for crash barrier, median and railing --- .../dialogs/tabs/typical_section_details.py | 34 ++++- .../desktop/ui/docks/cad_cross_section.py | 123 ++++++++++++++---- 2 files changed, 127 insertions(+), 30 deletions(-) diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py index 550497c6e..0e713ed30 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/typical_section_details.py @@ -1171,7 +1171,8 @@ def _apply_crash_barrier_defaults(self, barrier_type: str, force: bool = False): is_metallic = self._is_metallic_barrier(barrier_type) is_custom = barrier_type == "Custom" - geom = CrashBarrierGeometry.get_geometry(barrier_type) + effective_barrier_type = self._effective_crash_barrier_type(barrier_type) + geom = CrashBarrierGeometry.get_geometry(effective_barrier_type) def _set(widget, value: str): @@ -1204,6 +1205,11 @@ def _set(widget, value: str): if force and self.crash_barrier_load: self.crash_barrier_load.clear() elif is_custom: + if geom: + if "bottom_width" in geom: + _set(self.crash_barrier_width, f"{geom['bottom_width'] / 1000:.2f}") + if "total_height" in geom: + _set(self.crash_barrier_height, f"{geom['total_height'] / 1000:.2f}") if force and self.crash_barrier_load: self.crash_barrier_load.clear() @@ -1230,7 +1236,8 @@ def _apply_median_defaults(self, median_type: str, force: bool = False): is_metallic = self._is_metallic_median(median_type) is_custom = median_type == "Custom" - geom = MedianGeometry.get_geometry(median_type) + effective_median_type = self._effective_median_type(median_type) + geom = MedianGeometry.get_geometry(effective_median_type) def _set(widget, value: str): if widget is None: @@ -1263,12 +1270,19 @@ def _set(widget, value: str): if force and self.median_load: self.median_load.clear() elif is_custom: + if geom: + if "median_width" in geom: + _set(self.median_width, f"{geom['median_width'] / 1000:.2f}") + if "barrier_height" in geom: + _set(self.median_height, f"{geom['barrier_height'] / 1000:.2f}") + elif "kerb_height" in geom: + _set(self.median_height, f"{geom['kerb_height'] / 1000:.2f}") if force and self.median_load: self.median_load.clear() self._update_median_visibility(median_type, include_median=True) - geom = MedianGeometry.get_geometry(median_type) + geom = MedianGeometry.get_geometry(effective_median_type) params = { "median_type": median_type, @@ -1304,7 +1318,8 @@ def _apply_railing_defaults(self, force: bool = False): return railing_type = self.railing_type.currentText() - geom = RailingGeometry.get_geometry(railing_type) + effective_railing_type = self._effective_railing_type(railing_type) + geom = RailingGeometry.get_geometry(effective_railing_type) def _set(widget, value: str): if widget is None: @@ -1327,7 +1342,7 @@ def _set(widget, value: str): # Manually apply once self.on_railing_load_mode_changed("Automatic (IRC 6)") - geom = RailingGeometry.get_geometry(railing_type) + geom = RailingGeometry.get_geometry(effective_railing_type) params = { "railing_type": railing_type, @@ -1345,6 +1360,15 @@ def _set(widget, value: str): def _is_metallic_barrier(self, barrier_type): return barrier_type.startswith("IRC 5 - Metallic Crash Barrier") + def _effective_crash_barrier_type(self, barrier_type): + return "IRC 5 - RCC Crash Barrier" if barrier_type == "Custom" else barrier_type + + def _effective_median_type(self, median_type): + return "IRC 5 - Raised Kerb" if median_type == "Custom" else median_type + + def _effective_railing_type(self, railing_type): + return "IRC 5 - RCC Railing" if railing_type == "Custom" else railing_type + def _is_rcc_barrier(self, barrier_type): return ( barrier_type.startswith("IRC 5 - RCC Crash Barrier") diff --git a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py index 3b3d0d1f0..3fab9f862 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_cross_section.py +++ b/src/osdagbridge/desktop/ui/docks/cad_cross_section.py @@ -21,7 +21,7 @@ class CrossSectionCADWidget(QWidget): """Widget for drawing bridge cross-section view""" # ===== SHARED CAD COLORS ===== GIRDER_COLOR = QColor(179, 180, 160) - STIFFENER_COLOR = QColor(79, 78, 70) + # STIFFENER_COLOR = QColor(79, 78, 70) CROSS_BRACING_COLOR = QColor(235, 236, 211) RAILING_COLOR = QColor(210, 210, 210) BARRIER_COLOR = QColor(220, 220, 220) @@ -953,19 +953,43 @@ def draw_content(p: QPainter, ox: float, oy: float): def draw_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color): """Dispatcher for different median types based on IRC 5 geometry""" - geo = MedianGeometry.get_geometry(self.median_type) + is_custom = self.median_type == "Custom" + median_type = self._effective_median_type() + geo = MedianGeometry.get_geometry(median_type) if not geo: return if geo["type"] == "kerb": - self.draw_raised_kerb_median(painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo) + self.draw_raised_kerb_median( + painter, + median_start_x, + median_end_x, + deck_top_y, + scale, + median_color, + geo, + dashed_border=is_custom, + ) elif geo["type"] == "rcc_barrier": - self.draw_rcc_barrier_median(painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo) + self.draw_rcc_barrier_median( + painter, + median_start_x, + median_end_x, + deck_top_y, + scale, + median_color, + geo, + dashed_border=is_custom, + ) elif geo["type"] == "metallic": self.draw_metallic_median(painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo) def draw_railing(self, painter, x, y, scale, side): """Dispatcher for different railing types based on IRC 5 geometry""" + if self.railing_type == "Custom": + custom_geo = RailingGeometry.get_geometry("IRC 5 - RCC Railing") + return self.draw_rcc_railing(painter, x, y, scale, side, custom_geo, dashed_border=True) + geo = RailingGeometry.get_geometry(self.railing_type) if not geo: # Fallback to existing RCC railing if type is not recognized @@ -978,7 +1002,7 @@ def draw_railing(self, painter, x, y, scale, side): return self.draw_rcc_railing(painter, x, y, scale, side) - def draw_rcc_railing(self, painter, x_start, y_base, scale, side='left', geo=None): + def draw_rcc_railing(self, painter, x_start, y_base, scale, side='left', geo=None, dashed_border=False): """Draw standard RCC railing based on IRC diagrams""" border_color = QColor(120, 120, 120) # Dimensions for RCC railing (mm) @@ -1002,14 +1026,22 @@ def draw_rcc_railing(self, painter, x_start, y_base, scale, side='left', geo=Non post_top_y = y_base - total_h corner_radius = min(outer_w * 0.05, 4) + + border_pen = QPen( + border_color, + max(1.5, scale * 2), + Qt.DashLine if dashed_border else Qt.SolidLine, + ) + if dashed_border: + border_pen.setDashPattern([6, 4]) - painter.setBrush(QBrush(QColor(220, 220, 220))) # Light grey base - painter.setPen(QPen(border_color, max(1.5, scale * 2))) + painter.setBrush(QBrush(QColor(255, 250, 220)) if self.hovered_element == 'railing' else self.concrete_brush) + painter.setPen(border_pen) base_rect = QRectF(rect_x, base_top_y, outer_w, base_h) painter.drawRect(base_rect) painter.setBrush(QBrush(QColor(220, 220, 220))) # Light grey post body - painter.setPen(QPen(border_color, max(1.5, scale * 2))) + painter.setPen(border_pen) post_rect = QRectF(rect_x, post_top_y, outer_w, post_h) painter.drawRoundedRect(post_rect, corner_radius, corner_radius) @@ -1066,7 +1098,7 @@ def draw_steel_railing(self, painter, x, y, scale, side, geo): railing_top_y = y - total_h # 1. Concrete Base - painter.setBrush(QBrush(QColor(126, 126, 126))) + painter.setBrush(QBrush(QColor(255, 250, 220)) if self.hovered_element == 'railing' else self.concrete_brush) painter.setPen(QPen(border_color, max(1.5, scale * 2))) base_rect = QRectF(rect_x, base_top_y, base_w, base_h) painter.drawRect(base_rect) @@ -1095,7 +1127,7 @@ def draw_steel_railing(self, painter, x, y, scale, side, geo): return (rect_x, railing_top_y, rect_x + base_w, y, base_w) - def draw_raised_kerb_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo): + def draw_raised_kerb_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo, dashed_border=False): """Draw Raised Kerb median (trapezoid shape)""" border_color = QColor(120, 120, 120) h = geo.get("kerb_height", 225) * scale @@ -1119,14 +1151,22 @@ def draw_raised_kerb_median(self, painter, median_start_x, median_end_x, deck_to painter.setBrush(QBrush(QColor(255, 250, 220))) else: painter.setBrush(self.concrete_brush) - - painter.setPen(QPen(border_color, max(1.5, scale * 1.5))) + + border_pen = QPen( + border_color, + max(1.5, scale * 1.5), + Qt.DashLine if dashed_border else Qt.SolidLine, + ) + if dashed_border: + border_pen.setDashPattern([6, 4]) + + painter.setPen(border_pen) painter.drawPolygon(QPolygonF(points)) hover_rect = QRectF(median_start_x, y_top, median_width_px, h) self.cross_section_hover_zones.append((hover_rect, 'median')) - def draw_rcc_barrier_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo): + def draw_rcc_barrier_median(self, painter, median_start_x, median_end_x, deck_top_y, scale, median_color, geo, dashed_border=False): """Draw two RCC crash barriers for median following standard shape""" border_color = QColor(120, 120, 120) barrier_h_mm = geo.get("barrier_height", 900.0) @@ -1152,7 +1192,14 @@ def draw_rcc_barrier_median(self, painter, median_start_x, median_end_x, deck_to barrier_brush = QBrush(QColor(255, 250, 220)) if self.hovered_element == 'median' else self.concrete_brush painter.setBrush(barrier_brush) - painter.setPen(QPen(border_color, max(1.5, scale * 1.5))) + border_pen = QPen( + border_color, + max(1.5, scale * 1.5), + Qt.DashLine if dashed_border else Qt.SolidLine, + ) + if dashed_border: + border_pen.setDashPattern([6, 4]) + painter.setPen(border_pen) # LEFT assembly (faces LEFT) x_l = median_start_x + bottom_w @@ -1195,14 +1242,15 @@ def draw_metallic_median(self, painter, median_start_x, median_end_x, deck_top_y x_tl = x_bl + (bottom_w - top_w) / 2 x_tr = x_tl + top_w - painter.setBrush(QBrush(QColor(220, 220, 220))) + painter.setBrush(QBrush(QColor(255, 250, 220)) if self.hovered_element == 'median' else self.concrete_brush) painter.setPen(QPen(border_color, max(1.0, scale))) painter.drawPolygon(QPolygonF([QPointF(x_bl, y_bottom), QPointF(x_br, y_bottom), QPointF(x_tr, y_top_kerb), QPointF(x_tl, y_top_kerb)])) post_w, post_offset = 150.0 * scale, 75.0 * scale spacer_w, spacer_h = 200.0 * scale, 330.0 * scale w_beam_h, w_beam_depth, w_beam_thk = 330.0 * scale, 83.0 * scale, 3.0 * scale - post_color = QColor(255, 250, 220) if self.hovered_element == 'median' else QColor(220, 220, 220) + # Match metallic post fill with stiffener color used in cross-section rendering. + post_color = QColor(210, 210, 205) if self.hovered_element == 'median' else QColor(210, 210, 205) def draw_side_assembly(is_left): # Assembly on Left side of median (near x_tl): [Beam] [Spacer] [Post] -> Facing left carriageway @@ -1318,7 +1366,7 @@ def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck QPointF(x_left, y_base_top), # left after base ] - painter.setBrush(QBrush(MEDIAN_GREY)) + painter.setBrush(QBrush(self.MEDIAN_COLOR)) painter.setPen(QPen(QColor(0, 0, 0), max(1.5, scale * 1.5))) painter.drawPolygon(QPolygonF(points_left)) @@ -1350,7 +1398,7 @@ def draw_median_crash_barriers(self, painter, median_start_x, median_end_x, deck def _get_crash_barrier_rendered_width_mm(self): """Return the actual crash barrier footprint width used by draw_crash_barrier.""" - geo = CrashBarrierGeometry.get_geometry(self.crash_barrier_type) + geo = CrashBarrierGeometry.get_geometry(self._effective_crash_barrier_type()) default_width = float(self.params.get('crash_barrier_width', 500)) if not geo: @@ -1372,7 +1420,7 @@ def draw_cross_section(self, painter): BARRIER_COLOR = QColor(220, 220, 220) - MEDIAN_GREY = QColor(221, 221, 221) + MEDIAN_GREY = QColor(210, 210, 205) CONCRETE_COLOR = QColor(225, 225, 225) END_DIAPHRAGM_COLOR = QColor(134, 134, 100) @@ -1697,6 +1745,12 @@ def draw_wearing_segment(x_start, x_end, num_points=50): painter.drawLine(QPointF(deck_slab_left, deck_bottom_y), QPointF(deck_slab_right, deck_bottom_y)) + # Draw side borders of the deck slab (left and right edges) + left_top_y = deck_top_y + slope_offset(deck_slab_left) + right_top_y = deck_top_y + slope_offset(deck_slab_right) + painter.drawLine(QPointF(deck_slab_left, left_top_y), QPointF(deck_slab_left, deck_bottom_y)) + painter.drawLine(QPointF(deck_slab_right, right_top_y), QPointF(deck_slab_right, deck_bottom_y)) + # Draw girders and stiffeners @@ -2557,7 +2611,8 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): """Draw crash barrier cross-section using IRC 5 geometry spec. """ border_color = QColor(120, 120, 120) - cb_type = self.crash_barrier_type + is_custom = self.crash_barrier_type == "Custom" + cb_type = self._effective_crash_barrier_type() geo = CrashBarrierGeometry.get_geometry(cb_type) if not geo: @@ -2592,7 +2647,14 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): right_at_top = 225 * scale * shape_scale # outer wall x at top painter.setBrush(QBrush(QColor(255, 250, 220)) if self.hovered_element == 'crash_barrier' else self.concrete_brush) - painter.setPen(QPen(border_color, max(1.5, scale * 1.5))) + border_pen = QPen( + border_color, + max(1.5, scale * 1.5), + Qt.DashLine if is_custom else Qt.SolidLine, + ) + if is_custom: + border_pen.setDashPattern([6, 4]) + painter.setPen(border_pen) if side == 'left': # Same as median RIGHT barrier (carriageway-facing curve on the right) @@ -2696,14 +2758,15 @@ def draw_crash_barrier(self, painter, x, y, scale, side='left'): # W-Beam starts at spacer left edge (which is spacer_x_start - spacer_w) beam_root_x = post_rect_x - spacer_w - + # Draw Kerb - painter.setBrush(QBrush(QColor(180, 180, 180))) + painter.setBrush(QBrush(QColor(255, 250, 220)) if self.hovered_element == 'crash_barrier' else self.concrete_brush) painter.setPen(QPen(border_color, max(1.0, scale))) painter.drawPolygon(QPolygonF(kerb_points)) # Draw Post - post_color = QColor(80, 80, 80) # Steel color + # Match metallic post fill with stiffener color used in cross-section rendering. + post_color = QColor(210, 210, 205) if self.hovered_element == 'crash_barrier': post_color = QColor(255, 250, 220) painter.setBrush(QBrush(post_color)) @@ -2772,4 +2835,14 @@ def get_wave_y(z_rel): # z_rel from 0 to w_beam_h assembly_width = max(kerb_bottom_w, (x - (beam_root_x - w_beam_depth))) hover_rect = QRectF(x - assembly_width, assembly_top_y, abs(assembly_width), assembly_bottom_y - assembly_top_y) - self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) \ No newline at end of file + self.cross_section_hover_zones.append((hover_rect, 'crash_barrier')) + + def _effective_crash_barrier_type(self): + if self.crash_barrier_type == "Custom": + return "IRC 5 - RCC Crash Barrier" + return self.crash_barrier_type + + def _effective_median_type(self): + if self.median_type == "Custom": + return "IRC 5 - Raised Kerb" + return self.median_type \ No newline at end of file From 69fa5856f3b19eb671439145ea55a9aa88b5a96f Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Sun, 8 Mar 2026 20:18:32 +0530 Subject: [PATCH 121/225] Simplified Input_dock generalization More generalization Input Dock --- .../bridge_types/plate_girder/defaults.py | 531 ++++ .../bridge_types/plate_girder/plots_widget.py | 3 +- .../bridge_types/plate_girder/ui_fields.py | 684 ++---- .../bridge_types/plate_girder/validator.py | 38 +- src/osdagbridge/core/utils/common.py | 47 +- .../desktop/ui/dialogs/project_location.py | 11 +- .../desktop/ui/docks/input_dock.py | 2179 ++++++----------- src/osdagbridge/desktop/ui/template_page.py | 27 +- 8 files changed, 1592 insertions(+), 1928 deletions(-) create mode 100644 src/osdagbridge/core/bridge_types/plate_girder/defaults.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/defaults.py b/src/osdagbridge/core/bridge_types/plate_girder/defaults.py new file mode 100644 index 000000000..1e3bcd42b --- /dev/null +++ b/src/osdagbridge/core/bridge_types/plate_girder/defaults.py @@ -0,0 +1,531 @@ +"""Centralized defaults for Plate Girder Bridge.""" + +from __future__ import annotations + +from copy import deepcopy + +from osdagbridge.core.utils.codes.irc5_2015 import IRC5_2015 +from osdagbridge.core.utils.codes.keyfile import ( + KEY_CRASH_BARRIER_TYPE, + KEY_FOOTPATH, + KEY_MEDIAN_TYPE, + KEY_METALLIC_CRASH_BARRIER_TYPE, + KEY_RAILING_TYPE, + KEY_RIGID_CRASH_BARRIER_TYPE, +) +from osdagbridge.core.utils.common import ( + DEFAULT_CONCRETE_DENSITY, + DEFAULT_CRASH_BARRIER_WIDTH, + DEFAULT_GIRDER_SPACING, + DEFAULT_RAILING_WIDTH, +) +from .initial_sizing import ( + DEFAULT_DECK_OVERHANG_RATIO as IS_DEFAULT_DECK_OVERHANG_RATIO, + DEFAULT_DECK_THICKNESS as IS_DEFAULT_DECK_THICKNESS_MM, + DEFAULT_FOOTPATH_WIDTH as IS_DEFAULT_FOOTPATH_WIDTH_M, +) + +# Workflow/runtime defaults used by plategirderbridge.py +DEFAULT_STRUCTURE_NAME = "plate_girder_bridge" +DEFAULT_SPAN_M = 33.5 +DEFAULT_CARRIAGEWAY_WIDTH_M = 10.0 +DEFAULT_MEDIAN_WIDTH_M = 0.0 +DEFAULT_NO_OF_GIRDERS = 4 +DEFAULT_DECK_THICKNESS_MM = float(IS_DEFAULT_DECK_THICKNESS_MM) +DEFAULT_GIRDER_SYMMETRY = "Girder Symmetric" +DEFAULT_SKEW_ANGLE_DEG = 0.0 +DEFAULT_GEOMETRY_TOLERANCE = 1e-3 + +# CAD defaults used by cad_generator.py +DEFAULT_CAD_CHAMFER_LENGTH_MM = 40 +DEFAULT_IRC_RIGID_BARRIER_BASE_WIDTH_MM = 450 +DEFAULT_IRC_METALLIC_BARRIER_BASE_WIDTH_MM = 550 +DEFAULT_STEEL_RAILING_WIDTH_MM = 200 +DEFAULT_RCC_RAILING_WIDTH_MM = 275 + +DEFAULT_CAD_SPAN_LENGTH_L = 25000 +DEFAULT_CAD_GIRDER_SECTION_D = 900 +DEFAULT_CAD_GIRDER_SECTION_BF = 500 +DEFAULT_CAD_GIRDER_SECTION_BF_B = 500 +DEFAULT_CAD_GIRDER_SECTION_TF = 260 +DEFAULT_CAD_GIRDER_SECTION_TF_B = 260 +DEFAULT_CAD_GIRDER_SECTION_TW = 100 +DEFAULT_CAD_NUM_GIRDERS = 5 +DEFAULT_CAD_GIRDER_SPACING = 2750 +DEFAULT_CAD_SKEW_ANGLE = 0 + +DEFAULT_CAD_CARRIAGEWAY_WIDTH = 12000 +DEFAULT_CAD_DECK_THICKNESS = 400 +DEFAULT_CAD_FOOTPATH_CONFIG = "BOTH" +DEFAULT_CAD_FOOTPATH_WIDTH = 1500 +DEFAULT_CAD_RAILING_WIDTH = 300 + +DEFAULT_CAD_BARRIER_TYPE = "Semi-Rigid" +DEFAULT_CAD_CRASH_BARRIER_SUBTYPE = "Double W-beam" +DEFAULT_CAD_ENABLE_MEDIAN = True +DEFAULT_CAD_MEDIAN_TYPE = "Metallic Crash Barrier" +DEFAULT_CAD_RAIL_COUNT = 3 +DEFAULT_CAD_RAILING_TYPE = "rcc" + +DEFAULT_CAD_INCLUDE_INTERMEDIATE_STIFFENERS = True +DEFAULT_CAD_INTERMEDIATE_STIFFENER_SPACING = 2000 +DEFAULT_CAD_INTERMEDIATE_STIFFENER_THICKNESS = 20 +DEFAULT_CAD_INTERMEDIATE_STIFFENER_OUTSTAND = None +DEFAULT_CAD_NUM_END_STIFFENER_PAIRS = 4 +DEFAULT_CAD_END_STIFFENER_THICKNESS = 30 +DEFAULT_CAD_END_STIFFENER_OUTSTAND = None +DEFAULT_CAD_INCLUDE_LONGITUDINAL_STIFFENERS = True +DEFAULT_CAD_NUM_LONGITUDINAL_STIFFENERS = 2 +DEFAULT_CAD_LONGITUDINAL_STIFFENER_THICKNESS = 20 +DEFAULT_CAD_LONGITUDINAL_STIFFENER_OUTSTAND = None + +DEFAULT_CAD_CROSS_BRACING_SPACING = 4000 +DEFAULT_CAD_BRACING_TYPE = "X" +DEFAULT_CAD_X_BRACKET_OPTION = "BOTH" +DEFAULT_CAD_K_TOP_BRACKET = True +DEFAULT_CAD_DIAGONAL_SECTION_TYPE = "ANGLE" +DEFAULT_CAD_DIAGONAL_SECTION_LEG_H = 100 +DEFAULT_CAD_DIAGONAL_SECTION_LEG_W = 50 +DEFAULT_CAD_DIAGONAL_SECTION_CONNECTION_TYPE = "LONGER_LEG" +DEFAULT_CAD_DIAGONAL_THICKNESS = 5 + +DEFAULT_CAD_TOP_CHORD_SECTION_TYPE = "DOUBLE_CHANNEL" +DEFAULT_CAD_TOP_CHORD_SECTION_LEG_H = 80 +DEFAULT_CAD_TOP_CHORD_SECTION_LEG_W = 40 +DEFAULT_CAD_TOP_CHORD_SECTION_CONNECTION_TYPE = "LONGER_LEG" +DEFAULT_CAD_TOP_CHORD_THICKNESS = 5 + +DEFAULT_CAD_BOTTOM_CHORD_SECTION_TYPE = "ANGLE" +DEFAULT_CAD_BOTTOM_CHORD_SECTION_LEG_H = 80 +DEFAULT_CAD_BOTTOM_CHORD_SECTION_LEG_W = 40 +DEFAULT_CAD_BOTTOM_CHORD_SECTION_CONNECTION_TYPE = "LONGER_LEG" +DEFAULT_CAD_BOTTOM_CHORD_THICKNESS = 5 + +DEFAULT_CAD_END_DIAPHRAGM_TYPE = "Cross Bracing" +DEFAULT_CAD_END_DIAPHRAGM_SPACING = 100 +DEFAULT_CAD_END_DIAPHRAGM_BRACING_TYPE = "K" +DEFAULT_CAD_END_DIAPHRAGM_DIAGONAL_SECTION_TYPE = "ANGLE" +DEFAULT_CAD_END_DIAPHRAGM_DIAGONAL_SECTION_LEG_H = 100 +DEFAULT_CAD_END_DIAPHRAGM_DIAGONAL_SECTION_LEG_W = 50 +DEFAULT_CAD_END_DIAPHRAGM_DIAGONAL_SECTION_CONNECTION_TYPE = "LONGER_LEG" +DEFAULT_CAD_END_DIAPHRAGM_DIAGONAL_THICKNESS = 5 + +DEFAULT_CAD_END_DIAPHRAGM_TOP_CHORD_SECTION_TYPE = "CHANNEL" +DEFAULT_CAD_END_DIAPHRAGM_TOP_CHORD_SECTION_LEG_H = 80 +DEFAULT_CAD_END_DIAPHRAGM_TOP_CHORD_SECTION_LEG_W = 40 +DEFAULT_CAD_END_DIAPHRAGM_TOP_CHORD_SECTION_CONNECTION_TYPE = "LONGER_LEG" +DEFAULT_CAD_END_DIAPHRAGM_TOP_CHORD_THICKNESS = 5 + +DEFAULT_CAD_END_DIAPHRAGM_BOTTOM_CHORD_SECTION_TYPE = "ANGLE" +DEFAULT_CAD_END_DIAPHRAGM_BOTTOM_CHORD_SECTION_LEG_H = 80 +DEFAULT_CAD_END_DIAPHRAGM_BOTTOM_CHORD_SECTION_LEG_W = 40 +DEFAULT_CAD_END_DIAPHRAGM_BOTTOM_CHORD_SECTION_CONNECTION_TYPE = "LONGER_LEG" +DEFAULT_CAD_END_DIAPHRAGM_BOTTOM_CHORD_THICKNESS = 5 + +DEFAULT_CAD_END_DIAPHRAGM_SECTION = "I_SECTION" +DEFAULT_CAD_END_DIAPHRAGM_DEPTH = 800 +DEFAULT_CAD_END_DIAPHRAGM_FLANGE_WIDTH = 250 +DEFAULT_CAD_END_DIAPHRAGM_WEB_THICKNESS = 12 +DEFAULT_CAD_END_DIAPHRAGM_FLANGE_THICKNESS = 100 + +# Dictionary-driven Additional-input defaults used by ui_fields_additional_input.py. +# Layout values are sourced from initial_sizing.py to keep UI/backend in sync. +AI_LAYOUT_DEFAULTS = { + "girder_spacing_m": float(DEFAULT_GIRDER_SPACING), + "no_of_girders": int(DEFAULT_NO_OF_GIRDERS), + "deck_overhang_ratio": float(IS_DEFAULT_DECK_OVERHANG_RATIO), + "deck_overhang_m": round(float(DEFAULT_GIRDER_SPACING) * float(IS_DEFAULT_DECK_OVERHANG_RATIO), 3), + "deck_thickness_mm": float(IS_DEFAULT_DECK_THICKNESS_MM), + "footpath_width_m": float(IS_DEFAULT_FOOTPATH_WIDTH_M), + "footpath_thickness_mm": float(IS_DEFAULT_DECK_THICKNESS_MM), +} + +AI_DEFAULTS: dict[str, dict[str, object]] = { + "layout": deepcopy(AI_LAYOUT_DEFAULTS), + "crash_barrier": { + "width_m": float(DEFAULT_CRASH_BARRIER_WIDTH), + "post_spacing_m": "1", + }, + "median": { + "post_spacing_m": "1", + }, + "railing": { + "width_mm": f"{DEFAULT_RAILING_WIDTH * 1000:.0f}", + }, + "wearing_course": { + "density_kn_per_m3": "24.0", + "thickness_mm": "50", + }, + "permanent_load": { + "include_self_weight": "Yes", + "self_weight_factor": "1.00", + "include_deck_weight": "Yes", + "include_wearing_course": "Yes", + "include_crash_barrier": "Yes", + "include_median": "Yes", + "include_railing": "Yes", + }, + "live_load": { + "irc_vehicles_checked": True, + "braking_vehicles_checked": True, + "eccentricity_m": "0.00", + "footpath_mode": "Automatic", + "footpath_pressure_kn_per_mm2": "5.00", + }, + "seismic_load": { + "zone": "II", + "importance_factor": "1.0", + "soil_type": "Type I – Rocky or Hard Soil", + "damping_percent": "2", + "response_reduction_factor": "1", + "dead_load_mode": "Automatic", + "live_load_mode": "Automatic", + }, + "wind_load": { + "avg_exposed_height_m": "10", + "terrain_type": "Plain Terrain", + "site_topography": "Flat", + "gust_factor_mode": "Automatic", + "gust_factor": "2", + "drag_coeff_mode": "Automatic", + "drag_coeff_ll_mode": "Automatic", + "drag_coeff_ll": "1.2", + "lift_coeff_mode": "Automatic", + "lift_coeff": "0.75", + "super_area_elev_mode": "Automatic", + "super_area_plain_mode": "Automatic", + "exposed_frontal_area_mode": "Automatic", + "ecc_deck_mode": "Automatic", + "ll_ecc_mode": "Automatic", + }, + "temperature_load": { + "thermal_coeff_steel_per_c": "12.0e-6", + "thermal_coeff_rcc_per_c": "12.0e-6", + }, + "support_conditions": { + "left": "Fixed", + "right": "Pinned", + "bearing_length": "0", + }, + "design_options": { + "construction_stage": "Yes", + "reinforcement_size": "12 mm", + "reinforcement_material": "Fe 500", + }, + "girder_details": { + "depth_mode": "Optimized", + "top_flange_width_mode": "Optimized", + "top_flange_thickness_mode": "All", + "bottom_flange_width_mode": "Optimized", + "bottom_flange_thickness_mode": "All", + "web_thickness_mode": "All", + }, +} + + +def get_ai_defaults(section: str | None = None) -> dict[str, object] | dict[str, dict[str, object]]: + """Return dictionary-based Additional Inputs defaults.""" + if section is None: + return deepcopy(AI_DEFAULTS) + return deepcopy(AI_DEFAULTS.get(section, {})) + + +# Compatibility aliases consumed across UI/CAD modules. +DEFAULT_AI_LAYOUT_GIRDER_SPACING_M = AI_DEFAULTS["layout"]["girder_spacing_m"] +DEFAULT_AI_LAYOUT_NO_OF_GIRDERS = AI_DEFAULTS["layout"]["no_of_girders"] +DEFAULT_AI_LAYOUT_DECK_OVERHANG_RATIO = AI_DEFAULTS["layout"]["deck_overhang_ratio"] +DEFAULT_AI_LAYOUT_DECK_OVERHANG_M = AI_DEFAULTS["layout"]["deck_overhang_m"] +DEFAULT_AI_LAYOUT_DECK_THICKNESS_MM = f"{AI_DEFAULTS['layout']['deck_thickness_mm']:.0f}" +DEFAULT_AI_LAYOUT_FOOTPATH_WIDTH_M = f"{AI_DEFAULTS['layout']['footpath_width_m']:.2f}" +DEFAULT_AI_LAYOUT_FOOTPATH_THICKNESS_MM = f"{AI_DEFAULTS['layout']['footpath_thickness_mm']:.0f}" + +DEFAULT_AI_CRASH_BARRIER_WIDTH_M = AI_DEFAULTS["crash_barrier"]["width_m"] +DEFAULT_AI_CRASH_BARRIER_POST_SPACING_M = AI_DEFAULTS["crash_barrier"]["post_spacing_m"] +DEFAULT_AI_MEDIAN_POST_SPACING_M = AI_DEFAULTS["median"]["post_spacing_m"] +DEFAULT_AI_RAILING_WIDTH_MM = AI_DEFAULTS["railing"]["width_mm"] + +DEFAULT_AI_WEARING_DENSITY_KN_PER_M3 = AI_DEFAULTS["wearing_course"]["density_kn_per_m3"] +DEFAULT_AI_WEARING_THICKNESS_MM = AI_DEFAULTS["wearing_course"]["thickness_mm"] + +DEFAULT_AI_PERM_INCLUDE_SELF_WEIGHT = AI_DEFAULTS["permanent_load"]["include_self_weight"] +DEFAULT_AI_PERM_SELF_WEIGHT_FACTOR = AI_DEFAULTS["permanent_load"]["self_weight_factor"] +DEFAULT_AI_PERM_INCLUDE_DECK_WEIGHT = AI_DEFAULTS["permanent_load"]["include_deck_weight"] +DEFAULT_AI_PERM_INCLUDE_WEARING_COURSE = AI_DEFAULTS["permanent_load"]["include_wearing_course"] +DEFAULT_AI_PERM_INCLUDE_CRASH_BARRIER = AI_DEFAULTS["permanent_load"]["include_crash_barrier"] +DEFAULT_AI_PERM_INCLUDE_MEDIAN = AI_DEFAULTS["permanent_load"]["include_median"] +DEFAULT_AI_PERM_INCLUDE_RAILING = AI_DEFAULTS["permanent_load"]["include_railing"] + +DEFAULT_AI_LIVE_IRC_VEHICLES_CHECKED = AI_DEFAULTS["live_load"]["irc_vehicles_checked"] +DEFAULT_AI_LIVE_BRAKING_VEHICLES_CHECKED = AI_DEFAULTS["live_load"]["braking_vehicles_checked"] +DEFAULT_AI_LIVE_ECCENTRICITY_M = AI_DEFAULTS["live_load"]["eccentricity_m"] +DEFAULT_AI_LIVE_FOOTPATH_MODE = AI_DEFAULTS["live_load"]["footpath_mode"] +DEFAULT_AI_LIVE_FOOTPATH_PRESSURE_KN_PER_MM2 = AI_DEFAULTS["live_load"]["footpath_pressure_kn_per_mm2"] + +DEFAULT_AI_SEISMIC_ZONE = AI_DEFAULTS["seismic_load"]["zone"] +DEFAULT_AI_SEISMIC_IMPORTANCE_FACTOR = AI_DEFAULTS["seismic_load"]["importance_factor"] +DEFAULT_AI_SEISMIC_SOIL_TYPE = AI_DEFAULTS["seismic_load"]["soil_type"] +DEFAULT_AI_SEISMIC_DAMPING_PERCENT = AI_DEFAULTS["seismic_load"]["damping_percent"] +DEFAULT_AI_SEISMIC_RESPONSE_REDUCTION_FACTOR = AI_DEFAULTS["seismic_load"]["response_reduction_factor"] +DEFAULT_AI_SEISMIC_DEAD_LOAD_MODE = AI_DEFAULTS["seismic_load"]["dead_load_mode"] +DEFAULT_AI_SEISMIC_LIVE_LOAD_MODE = AI_DEFAULTS["seismic_load"]["live_load_mode"] + +DEFAULT_AI_WIND_AVG_EXPOSED_HEIGHT_M = AI_DEFAULTS["wind_load"]["avg_exposed_height_m"] +DEFAULT_AI_WIND_TERRAIN_TYPE = AI_DEFAULTS["wind_load"]["terrain_type"] +DEFAULT_AI_WIND_SITE_TOPOGRAPHY = AI_DEFAULTS["wind_load"]["site_topography"] +DEFAULT_AI_WIND_GUST_FACTOR_MODE = AI_DEFAULTS["wind_load"]["gust_factor_mode"] +DEFAULT_AI_WIND_GUST_FACTOR = AI_DEFAULTS["wind_load"]["gust_factor"] +DEFAULT_AI_WIND_DRAG_COEFF_MODE = AI_DEFAULTS["wind_load"]["drag_coeff_mode"] +DEFAULT_AI_WIND_DRAG_COEFF_LL_MODE = AI_DEFAULTS["wind_load"]["drag_coeff_ll_mode"] +DEFAULT_AI_WIND_DRAG_COEFF_LL = AI_DEFAULTS["wind_load"]["drag_coeff_ll"] +DEFAULT_AI_WIND_LIFT_COEFF_MODE = AI_DEFAULTS["wind_load"]["lift_coeff_mode"] +DEFAULT_AI_WIND_LIFT_COEFF = AI_DEFAULTS["wind_load"]["lift_coeff"] +DEFAULT_AI_WIND_SUPER_AREA_ELEV_MODE = AI_DEFAULTS["wind_load"]["super_area_elev_mode"] +DEFAULT_AI_WIND_SUPER_AREA_PLAIN_MODE = AI_DEFAULTS["wind_load"]["super_area_plain_mode"] +DEFAULT_AI_WIND_EXPOSED_FRONTAL_AREA_MODE = AI_DEFAULTS["wind_load"]["exposed_frontal_area_mode"] +DEFAULT_AI_WIND_ECC_DECK_MODE = AI_DEFAULTS["wind_load"]["ecc_deck_mode"] +DEFAULT_AI_WIND_LL_ECC_MODE = AI_DEFAULTS["wind_load"]["ll_ecc_mode"] + +DEFAULT_AI_TEMP_THERMAL_COEFF_STEEL_PER_C = AI_DEFAULTS["temperature_load"]["thermal_coeff_steel_per_c"] +DEFAULT_AI_TEMP_THERMAL_COEFF_RCC_PER_C = AI_DEFAULTS["temperature_load"]["thermal_coeff_rcc_per_c"] + +DEFAULT_AI_SUPPORT_LEFT = AI_DEFAULTS["support_conditions"]["left"] +DEFAULT_AI_SUPPORT_RIGHT = AI_DEFAULTS["support_conditions"]["right"] +DEFAULT_AI_SUPPORT_BEARING_LENGTH = AI_DEFAULTS["support_conditions"]["bearing_length"] + +DEFAULT_AI_DESIGN_CONSTRUCTION_STAGE = AI_DEFAULTS["design_options"]["construction_stage"] +DEFAULT_AI_DESIGN_REINFORCEMENT_SIZE = AI_DEFAULTS["design_options"]["reinforcement_size"] +DEFAULT_AI_DESIGN_REINFORCEMENT_MATERIAL = AI_DEFAULTS["design_options"]["reinforcement_material"] + +DEFAULT_AI_GIRDER_DEPTH_MODE = AI_DEFAULTS["girder_details"]["depth_mode"] +DEFAULT_AI_GIRDER_TOP_FLANGE_WIDTH_MODE = AI_DEFAULTS["girder_details"]["top_flange_width_mode"] +DEFAULT_AI_GIRDER_TOP_FLANGE_THICKNESS_MODE = AI_DEFAULTS["girder_details"]["top_flange_thickness_mode"] +DEFAULT_AI_GIRDER_BOTTOM_FLANGE_WIDTH_MODE = AI_DEFAULTS["girder_details"]["bottom_flange_width_mode"] +DEFAULT_AI_GIRDER_BOTTOM_FLANGE_THICKNESS_MODE = AI_DEFAULTS["girder_details"]["bottom_flange_thickness_mode"] +DEFAULT_AI_GIRDER_WEB_THICKNESS_MODE = AI_DEFAULTS["girder_details"]["web_thickness_mode"] + +# Additional-input labels used by the Typical Section UI +AI_CRASH_BARRIER_RCC = "IRC 5 - RCC Crash Barrier" +AI_CRASH_BARRIER_HIGH_CONTAINMENT = "IRC 5 - High Containment RCC Crash Barrier" +AI_CRASH_BARRIER_METALLIC_SINGLE = "IRC 5 - Metallic Crash Barrier with Single W-Beam" +AI_CRASH_BARRIER_METALLIC_DOUBLE = "IRC 5 - Metallic Crash Barrier with Double W-Beam" +AI_MEDIAN_RAISED_KERB = "IRC 5 - Raised Kerb" +AI_MEDIAN_RCC = "IRC 5 - RCC Crash Barrier" +AI_MEDIAN_METALLIC_SINGLE = "IRC 5 - Metallic Crash Barrier with Single W-Beam" +AI_MEDIAN_METALLIC_DOUBLE = "IRC 5 - Metallic Crash Barrier with Double W-Beam" +AI_TYPE_CUSTOM = "Custom" + + +def _mm_to_m(value: float | int | None, fallback_m: float) -> float: + if value is None: + return fallback_m + try: + return float(value) / 1000.0 + except (TypeError, ValueError): + return fallback_m + + +def _resolve_irc_footpath(footpath_value: str) -> str: + if footpath_value in KEY_FOOTPATH: + return footpath_value + return KEY_FOOTPATH[1] if len(KEY_FOOTPATH) > 1 else "Single Side" + + +def _resolve_irc_railing(railing_type: str | None) -> str: + if railing_type and "steel" in railing_type.lower(): + return KEY_RAILING_TYPE[1] + return KEY_RAILING_TYPE[0] + + +def get_ai_crash_barrier_defaults( + barrier_type: str, + footpath_value: str = "Both Sides", + railing_type: str | None = None, +) -> dict[str, float | None]: + """Return IRC-backed defaults for Additional Inputs crash-barrier fields.""" + defaults = { + "density": None, + "width_m": None, + "height_m": None, + "area_m2": None, + "load_kn_per_m": None, + "post_spacing_m": None, + } + + if barrier_type == AI_TYPE_CUSTOM: + return defaults + + is_rcc = barrier_type in {AI_CRASH_BARRIER_RCC, AI_CRASH_BARRIER_HIGH_CONTAINMENT} + is_metallic = barrier_type in {AI_CRASH_BARRIER_METALLIC_SINGLE, AI_CRASH_BARRIER_METALLIC_DOUBLE} + if not (is_rcc or is_metallic): + return defaults + + if is_rcc: + irc_barrier = KEY_CRASH_BARRIER_TYPE[2] # Rigid (per IRC helper indexing) + irc_subtype = ( + KEY_RIGID_CRASH_BARRIER_TYPE[1] + if barrier_type == AI_CRASH_BARRIER_HIGH_CONTAINMENT + else KEY_RIGID_CRASH_BARRIER_TYPE[0] + ) + else: + irc_barrier = KEY_CRASH_BARRIER_TYPE[1] # Semi-Rigid + irc_subtype = ( + KEY_METALLIC_CRASH_BARRIER_TYPE[1] + if barrier_type == AI_CRASH_BARRIER_METALLIC_DOUBLE + else KEY_METALLIC_CRASH_BARRIER_TYPE[0] + ) + + try: + design_dict = IRC5_2015.cl_109_6_3_shapes( + barrier_type=irc_barrier, + footpath=_resolve_irc_footpath(footpath_value), + railing_type=_resolve_irc_railing(railing_type), + design_dict={}, + crash_barrier_type=irc_subtype, + ) + except Exception: + design_dict = {} + + if is_rcc: + width_m = _mm_to_m( + design_dict.get("crash_barrier_width"), + float(DEFAULT_AI_CRASH_BARRIER_WIDTH_M), + ) + height_m = _mm_to_m(design_dict.get("crash_barrier_height"), 0.75) + density = float(DEFAULT_CONCRETE_DENSITY) + area_m2 = width_m * height_m + defaults.update( + { + "density": density, + "width_m": width_m, + "height_m": height_m, + "area_m2": area_m2, + "load_kn_per_m": density * area_m2, + } + ) + return defaults + + width_m = _mm_to_m( + design_dict.get("crash_barrier_width"), + DEFAULT_IRC_METALLIC_BARRIER_BASE_WIDTH_MM / 1000.0, + ) + height_m = _mm_to_m(design_dict.get("crash_barrier_height"), 1.05) + post_spacing_m = _mm_to_m( + design_dict.get("post_spacing"), + float(DEFAULT_AI_CRASH_BARRIER_POST_SPACING_M), + ) + defaults.update( + { + "width_m": width_m, + "height_m": height_m, + "post_spacing_m": post_spacing_m, + } + ) + return defaults + + +def get_ai_median_defaults(median_type: str) -> dict[str, float | None]: + """Return IRC-backed defaults for Additional Inputs median fields.""" + defaults = { + "density": None, + "width_m": None, + "height_m": None, + "area_m2": None, + "load_kn_per_m": None, + "post_spacing_m": None, + } + + if median_type == AI_TYPE_CUSTOM: + return defaults + + is_rcc = median_type in {AI_MEDIAN_RAISED_KERB, AI_MEDIAN_RCC} + is_metallic = median_type in {AI_MEDIAN_METALLIC_SINGLE, AI_MEDIAN_METALLIC_DOUBLE} + if not (is_rcc or is_metallic): + return defaults + + if median_type == AI_MEDIAN_RAISED_KERB: + irc_median = KEY_MEDIAN_TYPE[0] + irc_subtype = None + elif median_type == AI_MEDIAN_RCC: + irc_median = KEY_MEDIAN_TYPE[1] + irc_subtype = None + else: + irc_median = KEY_MEDIAN_TYPE[2] + irc_subtype = ( + KEY_METALLIC_CRASH_BARRIER_TYPE[1] + if median_type == AI_MEDIAN_METALLIC_DOUBLE + else KEY_METALLIC_CRASH_BARRIER_TYPE[0] + ) + + try: + design_dict = IRC5_2015.cl_109_6_3_shapes( + barrier_type=irc_median, + footpath=KEY_FOOTPATH[0], + railing_type=None, + design_dict={}, + crash_barrier_type=irc_subtype, + ) + except Exception: + design_dict = {} + + width_m = _mm_to_m(design_dict.get("median_width"), 1.2) + + if median_type == AI_MEDIAN_RAISED_KERB: + height_m = _mm_to_m(design_dict.get("kerb_height"), 0.225) + elif median_type == AI_MEDIAN_RCC: + total_height_mm = (design_dict.get("barrier_height") or 0) + (design_dict.get("kerb_height") or 0) + height_m = _mm_to_m(total_height_mm or None, 1.0) + else: + total_height_mm = (design_dict.get("post_height") or 0) + (design_dict.get("kerb_height") or 0) + height_m = _mm_to_m(total_height_mm or None, 1.05) + + defaults.update({"width_m": width_m, "height_m": height_m}) + + if is_rcc: + density = float(DEFAULT_CONCRETE_DENSITY) + area_m2 = width_m * height_m + defaults.update( + { + "density": density, + "area_m2": area_m2, + "load_kn_per_m": density * area_m2, + } + ) + return defaults + + post_spacing_m = _mm_to_m( + design_dict.get("post_spacing"), + float(DEFAULT_AI_MEDIAN_POST_SPACING_M), + ) + defaults["post_spacing_m"] = post_spacing_m + return defaults + + +#--------------Inp-dict-Start-------------- +from osdagbridge.core.utils.common import ( + KEY_STRUCTURE_TYPE, KEY_PROJECT_LOCATION, KEY_SPAN, KEY_CARRIAGEWAY_WIDTH, KEY_INCLUDE_MEDIAN, + KEY_FOOTPATH, KEY_SKEW_ANGLE, KEY_DESIGN_MODE, KEY_GIRDER, KEY_CROSS_BRACING, KEY_END_DIAPHRAGM, KEY_DECK_CONCRETE_GRADE_BASIC, + VALUES_DECK_CONCRETE_GRADE, + connectdb, +) +material_values = connectdb("Material") + +DEFAULTS_DICT = { + # Input Dock Defaults + KEY_STRUCTURE_TYPE: "Highway Bridge", + KEY_PROJECT_LOCATION: None, + KEY_SPAN: DEFAULT_SPAN_M, + KEY_CARRIAGEWAY_WIDTH: DEFAULT_CARRIAGEWAY_WIDTH_M, + KEY_INCLUDE_MEDIAN: "No", + KEY_FOOTPATH: "None", + KEY_SKEW_ANGLE: DEFAULT_SKEW_ANGLE_DEG, + KEY_DESIGN_MODE: "Optimized", + KEY_GIRDER: material_values[0], + KEY_CROSS_BRACING: material_values[0], + KEY_END_DIAPHRAGM: material_values[0], + KEY_DECK_CONCRETE_GRADE_BASIC: VALUES_DECK_CONCRETE_GRADE[0], + + # Additional Inputs Defaults + + +} +#--------------Inp-dict-End---------------- \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py b/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py index 170e92eea..d596d0027 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py @@ -1170,5 +1170,4 @@ def update_plot(self): w = PlotWidget() w.resize(1200, 800) w.show() - sys.exit(app.exec()) - sys.exit(app.exec()) + sys.exit(app.exec()) \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index ad58c28ea..0b4cd2fdd 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -1,500 +1,272 @@ from osdagbridge.core.utils.common import * +from osdagbridge.core.bridge_types.plate_girder.defaults import DEFAULTS_DICT + """ -( - key, - display_name, - ui_type, - values, - is_visible, - validator, - ui_config_dict -) +Field definition tuple schema: + (key, display_label, ui_type, values, is_visible, validator, ui_config_dict) + +ui_type values: + TYPE_MODULE → module marker, skipped by dock + TYPE_TITLE → opens a new QGroupBox section + TYPE_COMBOBOX → dropdown field + TYPE_TEXTBOX → text/numeric input field + TYPE_BUTTON → action button row + TYPE_NOTE → hidden label, shown/hidden by domain logic + +ui_config_dict recognised keys: + # Layout / container + container : "main" | "superstructure" | ... + show_group_title : bool (default True) — for TYPE_TITLE only + container_label : str — display name for the collapsible wrapper + add_stretch : bool — adds stretch after widget in the row + + # Initial value + default : initial widget value — single source of truth + + # TYPE_TEXTBOX — placeholder + placeholder : str — static placeholder text + placeholder_dynamic : str — name of an InputDock method that returns + the placeholder string; called on init and + whenever a dependency changes. + e.g. "_carriageway_placeholder_text" + + # TYPE_TEXTBOX — callbacks + on_editing_finished : str | list[str] — InputDock method name(s) called + on editingFinished signal + # TYPE_COMBOBOX — behaviour + disabled_options : list[str] — option text values that are greyed-out + and non-selectable in the dropdown + is_material_field : bool — enables Custom material flow + info (ℹ) button + member_type : "Girder" | "Deck" — used when is_material_field=True + to route MaterialPropertiesDialog + sync logic + + # TYPE_COMBOBOX — callbacks + on_changed : str | list[str] — InputDock method name(s) connected + to currentTextChanged signal + trigger_on_init : bool — fire on_changed handler(s) once on widget + creation with the initial value (default False) + + # TYPE_BUTTON + action : str — InputDock method name called on click + button_label : str — button face text (default "Modify Here") + + # TYPE_NOTE + attr : str — attribute name to set on InputDock so domain + logic can call .setVisible() on the label """ + + class FrontendData: - """Backend for Highway Bridge Design""" - + """Backend state store for Highway Bridge Design.""" + def __init__(self): - self.module = KEY_DISP_FINPLATE - self.design_status = False + self.module_key = KEY_MODULE_PLATE_GIRDER + self.design_status = False self.design_button_status = False - - # Simple UI state store (input/output docks). - # The docks can set values here, and `input_values()` can use them as defaults. - self._input_state: dict[str, object] = {} + self._input_state: dict[str, object] = {} self._output_state: dict[str, object] = {} - # ----------------------------- - # Generic state getters/setters - # ----------------------------- + # ── State getters / setters ─────────────────────────────────────────────── + def set_input_value(self, key: str, value): - if not key: - return - self._input_state[key] = value - # print(f"DEBUG: Backend updated -> {key}: {value}") + if key: + self._input_state[key] = value def get_input_value(self, key: str, default=None): - if not key: - return default - return self._input_state.get(key, default) + return self._input_state.get(key, default) if key else default def set_output_value(self, key: str, value): - if not key: - return - self._output_state[key] = value + if key: + self._output_state[key] = value def get_output_value(self, key: str, default=None): - if not key: - return default - return self._output_state.get(key, default) - - def set_input_values(self, values: dict): - """Bulk update input state (e.g., when loading a saved project).""" - if not isinstance(values, dict): - return - for k, v in values.items(): - if isinstance(k, str): - self._input_state[k] = v - - - def get_input_values_dict(self, include_empty: bool = False) -> dict: - """Export current input state; can be fed into analyzers/designers later.""" - if include_empty: - return dict(self._input_state) - return {k: v for k, v in self._input_state.items() if v not in (None, "")} - - def _iter_defined_input_keys(self): - """Yield keys that represent actual inputs (not titles/modules).""" - for item in self.input_values(): - if not isinstance(item, tuple) or len(item) < 3: - continue - key, _label, ui_type = item[0], item[1], item[2] - if not isinstance(key, str): - continue - if ui_type in (TYPE_TITLE, TYPE_MODULE): - continue - yield key - - def list_input_keys(self) -> list[str]: - """Return input keys in UI definition order.""" - seen: set[str] = set() - ordered: list[str] = [] - for key in self._iter_defined_input_keys(): - if key in seen: - continue - seen.add(key) - ordered.append(key) - return ordered - - def export_basic_inputs_as_list(self, include_empty: bool = False) -> list[dict]: - """Export basic inputs as a list of single-key dictionaries. - - Example: [{"span": 30.0}, {"carriageway_width": 7.5}, ...] - """ - values = self.get_input_values_dict(include_empty=include_empty) - out: list[dict] = [] - for key in self.list_input_keys(): - if key not in values: - continue - value = values.get(key) - if not include_empty and value in (None, ""): - continue - out.append({key: value}) - return out + return self._output_state.get(key, default) if key else default def set_final_design_inputs(self, final_inputs: list[dict]) -> None: - """Persist the final merged input payload for design execution.""" - if not isinstance(final_inputs, list): - return - self.set_input_value("final_design_inputs", final_inputs) - + if isinstance(final_inputs, list): + self._input_state["final_design_inputs"] = final_inputs + + # ── UI field definitions ────────────────────────────────────────────────── + def input_values(self): - """Return structured list of input definitions for the UI""" - options_list = [] + """ + Structured list of input field definitions for the InputDock. - options_list.append( - (KEY_MODULE, KEY_DISP_FINPLATE, TYPE_MODULE, None, True, 'No Validator', {}) - ) + Rules: + - tuple[1] is the sole display label. + - metadata["default"] is the sole source of initial widget values. + - TYPE_BUTTON rows sit inline like any other field. + - TYPE_NOTE rows are hidden labels revealed by domain logic. + - TYPE_TITLE metadata carries only container/show_group_title. + - All per-field validation, placeholders, callbacks, and material + behaviour are declared here — InputDock has no key-specific logic. + """ + material_values = connectdb("Material") - # Type of Structure - options_list.append( - ( - "section_structure", - DISP_TITLE_STRUCTURE, - TYPE_TITLE, - None, - True, - 'No Validator', + return [ + # ── Module marker ───────────────────────────────────────────────── + (KEY_MODULE_PLATE_GIRDER, None, TYPE_MODULE, None, True, "No Validator", {}), + + # ── Type of Structure ───────────────────────────────────────────── + (KEY_SECTION_STRUCTURE, DISP_TITLE_STRUCTURE, TYPE_TITLE, None, True, "No Validator", + {"container": "main"}), + + (KEY_STRUCTURE_TYPE, KEY_DISP_STRUCTURE_TYPE, TYPE_COMBOBOX, VALUES_STRUCTURE_TYPE, + True, "No Validator", { - "container": "main", - "post_note": { - "text": "*Other structures not included", - "attr": "structure_note", - }, - }, - ) - ) - options_list.append( - ( - KEY_STRUCTURE_TYPE, - KEY_DISP_STRUCTURE_TYPE, - TYPE_COMBOBOX, - VALUES_STRUCTURE_TYPE, - True, - 'No Validator', - {}, - ) - ) - - # Project Location (custom content handled in dock) - options_list.append( - ( - "section_project_location", - DISP_TITLE_PROJECT, - TYPE_TITLE, - None, - True, - 'No Validator', + "default": DEFAULTS_DICT.get(KEY_STRUCTURE_TYPE), + "disabled_options": ["Other"], + }), + + # ── Project Location ────────────────────────────────────────────── + (KEY_SECTION_PROJECT, DISP_TITLE_PROJECT, TYPE_TITLE, None, True, "No Validator", + {"container": "main", "show_group_title": False}), + + (KEY_PROJECT_LOCATION, "Project Location*", TYPE_BUTTON, None, True, "No Validator", { - "container": "main", - "custom_content": "project_location", - "show_group_title": False, - "header_label": "Project Location*", - "button_rows": [ - { - "type": "project_location", - "buttons": [ - { - "text": "Add Here", - "action": "show_project_location_dialog", - } - ], - } - ], - }, - ) - ) + "action": "show_project_location_dialog", + "button_label": "Select Location", + }), - # Geometric Details - options_list.append( - ( - "section_geometric", - DISP_TITLE_GEOMETRIC, - TYPE_TITLE, - None, - True, - 'No Validator', + # ── Geometric Details ───────────────────────────────────────────── + (KEY_SECTION_GEOMETRIC, DISP_TITLE_GEOMETRIC, TYPE_TITLE, None, True, "No Validator", + {"container": "superstructure"}), + + (KEY_SPAN, KEY_DISP_SPAN, TYPE_TEXTBOX, None, True, "Double Validator", { - "container": "superstructure", - }, - ) - ) - options_list.append( - ( - KEY_SPAN, - KEY_DISP_SPAN, - TYPE_TEXTBOX, - None, - True, - 'Double Validator', - {"label": "Span*"}, - ) - ) - options_list.append( - ( - KEY_CARRIAGEWAY_WIDTH, - KEY_DISP_CARRIAGEWAY_WIDTH, - TYPE_TEXTBOX, - None, - True, - 'Double Validator', - {"label": "Carriageway Width*\n(Each way)"}, - ) - ) - options_list.append( - ( - KEY_INCLUDE_MEDIAN, - "Include Median", - TYPE_COMBOBOX, - VALUES_YES_NO, - True, - 'No Validator', - {"label": "Include Median", "default": "No", "add_stretch": True}, - ) - ) - options_list.append( - ( - KEY_FOOTPATH, - KEY_DISP_FOOTPATH, - TYPE_COMBOBOX, - VALUES_FOOTPATH, - True, - 'No Validator', - {"label": "Footpath", "default": "None"}, - ) - ) - options_list.append( - ( - KEY_SKEW_ANGLE, - KEY_DISP_SKEW_ANGLE, - TYPE_TEXTBOX, - None, - True, - 'Double Validator', - {"label": "Skew Angle"}, - ) - ) - options_list.append( - ( - "section_additional_geometry", - "", - TYPE_TITLE, - None, - True, - 'No Validator', + "placeholder": f"{SPAN_MIN}–{SPAN_MAX} m", + }), + + (KEY_CARRIAGEWAY_WIDTH, KEY_DISP_CARRIAGEWAY_WIDTH, TYPE_TEXTBOX, None, + True, "Double Validator", + { + "placeholder_dynamic": "_carriageway_placeholder_text", + "on_editing_finished": "validate_carriageway_width", + }), + + (KEY_INCLUDE_MEDIAN, "Include Median", TYPE_COMBOBOX, VALUES_YES_NO, + True, "No Validator", { - "container": "superstructure", - "show_group_title": False, - "post_rows": [ - { - "type": "additional_geometry", - "label": "Additional Geometry", - "buttons": [ - { - "text": "Modify Here", - "action": "show_additional_inputs", - } - ], - } + "default": DEFAULTS_DICT.get(KEY_INCLUDE_MEDIAN), + "add_stretch": True, + # When median toggle changes, refresh the carriageway placeholder + # and silently re-validate the carriageway width. + "on_changed": [ + "_update_carriageway_placeholder", + "_validate_carriageway_width_silent", ], - }, - ) - ) - options_list.append( - ( - "section_design_type", - "", - TYPE_TITLE, - None, - True, - 'No Validator', + }), + + (KEY_FOOTPATH, KEY_DISP_FOOTPATH, TYPE_COMBOBOX, VALUES_FOOTPATH, + True, "No Validator", { - "container": "superstructure", - "show_group_title": False, - }, - ) - ) - options_list.append( - ( - "Design", - "Design Type", - TYPE_COMBOBOX, - ["Optimized", "Custom"], - True, - 'No Validator', - {"label": "Design Type", "default": "Optimized"}, - ) - ) - - # Material Inputs - options_list.append( - ( - "section_material", - DISP_TITLE_MATERIAL, - TYPE_TITLE, - None, - True, - 'No Validator', + "default": DEFAULTS_DICT.get(KEY_FOOTPATH), + "on_changed": "_on_footpath_changed", + }), + + (KEY_SKEW_ANGLE, KEY_DISP_SKEW_ANGLE, TYPE_TEXTBOX, None, + True, "Double Validator", { - "container": "superstructure", - }, - ) - ) - material_values = connectdb("Material") - options_list.append( - ( - KEY_GIRDER, - KEY_DISP_GIRDER, - TYPE_COMBOBOX, - material_values, - True, - 'No Validator', - {"label": "Girder"}, - ) - ) - options_list.append( - ( - KEY_CROSS_BRACING, - KEY_DISP_CROSS_BRACING, - TYPE_COMBOBOX, - material_values, - True, - 'No Validator', - {"label": "Cross Bracing"}, - ) - ) - options_list.append( - ( - KEY_END_DIAPHRAGM, - KEY_DISP_END_DIAPHRAGM, - TYPE_COMBOBOX, - material_values, - True, - 'No Validator', - {"label": "End Diaphragm"}, - ) - ) - options_list.append( - ( - KEY_DECK_CONCRETE_GRADE_BASIC, - KEY_DISP_DECK_CONCRETE_GRADE, - TYPE_COMBOBOX, - VALUES_DECK_CONCRETE_GRADE, - True, - 'No Validator', - {"label": "Deck"}, - ) - ) - - return options_list - - def set_osdaglogger(self, key): - """Logger setup""" - print("Logger set up (mock)") - - def output_values(self, flag=None): - """Return output dock definitions using the same tuple structure as input_values.""" - outputs = [] + "placeholder": f"{SKEW_ANGLE_MIN}–{SKEW_ANGLE_MAX}°", + }), + + # ── Additional Geometry ─────────────────────────────────────────── + (KEY_SECTION_ADDITIONAL_GEOMETRY, None, TYPE_TITLE, None, True, "No Validator", + {"container": "superstructure", "show_group_title": False}), + + (KEY_ADDITIONAL_GEOMETRY, "Additional Geometry", TYPE_BUTTON, None, True, "No Validator", + { + "action": "show_additional_inputs", + "button_label": "Modify Here", + }), + + # ── Design Type ─────────────────────────────────────────────────── + (KEY_SECTION_DESIGN_TYPE, "Design Type", TYPE_TITLE, None, True, "No Validator", + {"container": "superstructure", "show_group_title": False}), + + (KEY_DESIGN_MODE, "Design Type", TYPE_COMBOBOX, ["Optimized", "Custom"], + True, "No Validator", + { + "default": DEFAULTS_DICT.get(KEY_DESIGN_MODE), + "on_changed": "_on_design_mode_changed", + "trigger_on_init": True, + }), - outputs.append( + # ── Material Inputs ─────────────────────────────────────────────── + (KEY_SECTION_MATERIAL, DISP_TITLE_MATERIAL, TYPE_TITLE, None, True, "No Validator", + {"container": "superstructure"}), + + (KEY_GIRDER, KEY_DISP_GIRDER, TYPE_COMBOBOX, material_values, + True, "No Validator", + { + "is_material_field": True, + "member_type": "Girder", + }), + + (KEY_CROSS_BRACING, KEY_DISP_CROSS_BRACING, TYPE_COMBOBOX, material_values, + True, "No Validator", + { + "is_material_field": True, + "member_type": "Girder", + }), + + (KEY_END_DIAPHRAGM, KEY_DISP_END_DIAPHRAGM, TYPE_COMBOBOX, material_values, + True, "No Validator", + { + "is_material_field": True, + "member_type": "Girder", + }), + + (KEY_DECK_CONCRETE_GRADE_BASIC, KEY_DISP_DECK_CONCRETE_GRADE, TYPE_COMBOBOX, + VALUES_DECK_CONCRETE_GRADE, True, "No Validator", + { + "default": DEFAULTS_DICT.get(KEY_DECK_CONCRETE_GRADE_BASIC), + "is_material_field": True, + "member_type": "Deck", + }), + ] + + # ── Output field definitions ────────────────────────────────────────────── + + def output_values(self, flag=None): + return [ ( - "section_output_analysis", - "Analysis Results", - TYPE_TITLE, - None, - True, - "No Validator", + "section_output_analysis", "Analysis Results", + TYPE_TITLE, None, True, "No Validator", { "kind": "analysis", "fields": [ - ( - "analysis_member", - "Member:", - "combobox", - ["All"], - True, - "No Validator", - {"label_min_width": 100}, - ), - ( - "analysis_load_combination", - "Load Combination:", - "combobox", - ["Envelope"], - True, - "No Validator", - {"label_min_width": 100}, - ), - ( - "analysis_forces", - "Forces", - "checkbox_grid", - [ - ["Fx", "Mx", "Dx"], - ["Fy", "My", "Dy"], - ["Fz", "Mz", "Dz"], - ], - True, - "No Validator", - {}, - ), - ( - "analysis_display_options", - "Display Options:", - "checkbox_row", - ["Max", "Min"], - True, - "No Validator", - {}, - ), - ( - "analysis_utilization", - "Controlling Utilization Ratio", - "checkbox", - None, - True, - "No Validator", - {}, - ), + ("analysis_member", "Member:", "combobox", ["All"], True, "No Validator", {}), + ("analysis_load_combination", "Load Combination:", "combobox", ["Envelope"], True, "No Validator", {}), + ("analysis_forces", "Forces", "checkbox_grid", [["Fx","Mx","Dx"], ["Fy","My","Dy"], ["Fz","Mz","Dz"]], True, "No Validator", {}), + ("analysis_display_options", "Display Options:", "checkbox_row", ["Max", "Min"], True, "No Validator", {}), + ("analysis_utilization", "Controlling Utilization Ratio", "checkbox", None, True, "No Validator", {}), ], }, - ) - ) - - outputs.append( + ), ( - "section_output_superstructure", - "Superstructure", - TYPE_TITLE, - None, - True, - "No Validator", + "section_output_superstructure", "Superstructure", + TYPE_TITLE, None, True, "No Validator", { "kind": "design", "rows": [ - { - "label": "Steel Design", - "buttons": [ - {"text": "Here", "action": "open_steel_design"}, - ], - }, - { - "label": "Deck Design", - "buttons": [ - {"text": "Here", "action": "open_deck_design"}, - ], - }, - ] + {"label": "Steel Design", "buttons": [{"text": "Here", "action": "open_steel_design"}]}, + {"label": "Deck Design", "buttons": [{"text": "Here", "action": "open_deck_design"}]}, + ], }, - ) - ) - - outputs.append( + ), ( - "section_output_substructure", - "Substructure", - TYPE_TITLE, - None, - True, - "No Validator", - { - "kind": "design", - "rows": [], - }, - ) - ) + "section_output_substructure", "Substructure", + TYPE_TITLE, None, True, "No Validator", + {"kind": "design", "rows": []}, + ), + ] + + # ── Domain hooks ────────────────────────────────────────────────────────── + + def set_osdaglogger(self, key): + pass - return outputs - def func_for_validation(self, design_inputs): - """Validation Function""" - return None - - def prime_defaults_from_definitions(self): - """Populate state with any defaults declared in `input_values()` metadata.""" - for item in self.input_values(): - if not isinstance(item, tuple) or len(item) < 7: - continue - key, _label, ui_type, values, _required, _validator, metadata = item - if not isinstance(key, str): - continue - if ui_type in (TYPE_TITLE, TYPE_MODULE): - continue - if key in self._input_state: - continue - default = (metadata or {}).get("default") - if default is not None: - self._input_state[key] = default - elif ui_type == TYPE_COMBOBOX and isinstance(values, (list, tuple)) and values: - # If no explicit default is provided, keep the first item as a sensible initial value. - self._input_state[key] = values[0] + return None \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/validator.py b/src/osdagbridge/core/bridge_types/plate_girder/validator.py index cfc68fedb..0386fafa3 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/validator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/validator.py @@ -19,46 +19,46 @@ def validate_basic_inputs(self, inputs: dict) -> dict: errors = {} - span = self._to_float(inputs.get("span")) - carriageway_width = self._to_float(inputs.get("carriageway_width")) - median = inputs.get("median") - footpath = inputs.get("footpath") - skew_angle = self._to_float(inputs.get("skew_angle")) + span = self._to_float(inputs.get("span")) + carriageway_width = self._to_float(inputs.get("carriageway_width")) + median = inputs.get("median") + footpath = inputs.get("footpath") + skew_angle = self._to_float(inputs.get("skew_angle")) # ---------------------------------- # Span (Software Scope Limit) # ---------------------------------- - if span is None or not (20 <= span <= 45): - errors["span"] = "Span must be between 20 m and 45 m (software limitation)." + if span is None or not (20 <= span <= 45): + errors["span"] = "Span must be between 20 m and 45 m (software limitation)." # ---------------------------------- # Carriageway Width (IRC 5 Cl.104.3.1) # ---------------------------------- - if carriageway_width is None: - errors["carriageway_width"] = "Carriageway width must be specified." + if carriageway_width is None: + errors["carriageway_width"] = "Carriageway width must be specified." - else: + else: # Determine minimum lane assumption - if median == "No": - assumed_lanes = 1 - else: - assumed_lanes = 2 + if median == "No": + assumed_lanes = 1 + else: + assumed_lanes = 2 - required_width = IRC5_2015.cl_104_3_1_carriageway_width( + required_width = IRC5_2015.cl_104_3_1_carriageway_width( carriageway_width, assumed_lanes ) - if carriageway_width < required_width: - errors["carriageway_width"] = ( + if carriageway_width < required_width: + errors["carriageway_width"] = ( f"Minimum carriageway width required is " f"{required_width:.2f} m as per IRC 5:2015 Clause 104.3.1." ) # Software upper limit - if carriageway_width > 23.6: - errors["carriageway_width"] = ( + if carriageway_width > 23.6: + errors["carriageway_width"] = ( "Carriageway width exceeds 23.6 m (software limitation)." ) diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index d39ea98dc..ca8a40995 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -21,39 +21,50 @@ TYPE_COMBOBOX_CUSTOMIZED = "combobox_customized" TYPE_TEXTBOX = "textbox" TYPE_IMAGE = "image" +TYPE_BUTTON = "button" +TYPE_NOTE = "note" -# Keys for inputs +# Keys for inputs (consistent dot notation for object names) KEY_MODULE = "Module" -KEY_STRUCTURE_TYPE = "Structure Type" -KEY_PROJECT_LOCATION = "Project Location" -KEY_SPAN = "Span" -KEY_CARRIAGEWAY_WIDTH = "Carriageway Width" -KEY_INCLUDE_MEDIAN = "Include Median" -KEY_FOOTPATH = "Footpath" -KEY_SKEW_ANGLE = "Skew Angle" -KEY_GIRDER = "Girder" -KEY_CROSS_BRACING = "Cross Bracing" -KEY_END_DIAPHRAGM = "End Diaphragm" +KEY_STRUCTURE_TYPE = "structure.type" +KEY_PROJECT_LOCATION = "project.location" +KEY_SPAN = "geometry.span" +KEY_CARRIAGEWAY_WIDTH = "geometry.carriageway_width" +KEY_INCLUDE_MEDIAN = "geometry.include_median" +KEY_FOOTPATH = "geometry.footpath" +KEY_SKEW_ANGLE = "geometry.skew_angle" +KEY_ADDITIONAL_GEOMETRY = "geometry.additional_btn" +KEY_DESIGN_MODE = "geometry.design_mode" +KEY_GIRDER = "material.girder" +KEY_CROSS_BRACING = "material.cross_bracing" +KEY_END_DIAPHRAGM = "material.end_diaphragm" KEY_DECK = "Deck" -KEY_DECK_CONCRETE_GRADE_BASIC = "Deck Concrete Grade" +KEY_DECK_CONCRETE_GRADE_BASIC = "material.deck_concrete_grade" + +# Module + section identifiers (also used as UI keys) +KEY_MODULE_PLATE_GIRDER = "module.plate_girder" +KEY_SECTION_STRUCTURE = "section.structure" +KEY_SECTION_PROJECT = "section.project" +KEY_SECTION_GEOMETRIC = "section.geometry" +KEY_SECTION_ADDITIONAL_GEOMETRY = "section.additonal_geometry" +KEY_SECTION_DESIGN_TYPE = "section.design_type" +KEY_SECTION_MATERIAL = "section.material" # Display names -KEY_DISP_FINPLATE = "Highway Bridge Design" DISP_TITLE_STRUCTURE = "Type of Structure" KEY_DISP_STRUCTURE_TYPE = "Structure Type" DISP_TITLE_PROJECT = "Project Location" KEY_DISP_PROJECT_LOCATION = "City in India*" DISP_TITLE_GEOMETRIC = "Geometric Details" -KEY_DISP_SPAN = "Span (m)* [20-45]" -KEY_DISP_CARRIAGEWAY_WIDTH = "Carriageway Width (m)* [≥4.25]" +KEY_DISP_SPAN = "Span*" +KEY_DISP_CARRIAGEWAY_WIDTH = "Carriageway Width*\n(Each way)" KEY_DISP_FOOTPATH = "Footpath" -KEY_DISP_SKEW_ANGLE = "Skew Angle (degrees) [±15]" +KEY_DISP_SKEW_ANGLE = "Skew Angle" DISP_TITLE_MATERIAL = "Material Inputs" KEY_DISP_GIRDER = "Girder" KEY_DISP_CROSS_BRACING = "Cross Bracing" KEY_DISP_END_DIAPHRAGM = "End Diaphragm" -KEY_DISP_DECK = "Deck" -KEY_DISP_DECK_CONCRETE_GRADE = "Deck Concrete Grade [M25+]" +KEY_DISP_DECK_CONCRETE_GRADE = "Deck" # Sample values VALUES_STRUCTURE_TYPE = ["Highway Bridge", "Other"] diff --git a/src/osdagbridge/desktop/ui/dialogs/project_location.py b/src/osdagbridge/desktop/ui/dialogs/project_location.py index 92089e0cb..9e3bbed27 100644 --- a/src/osdagbridge/desktop/ui/dialogs/project_location.py +++ b/src/osdagbridge/desktop/ui/dialogs/project_location.py @@ -15,14 +15,12 @@ from osdagbridge.desktop.ui.widgets.native_map import NativeMapWidget from osdagbridge.core.data.project_location.zone_lookup import get_zones_for_coordinates, get_temperature_for_coordinates - # Session-level state to persist values across dialog open/close cycles # so that reopening the dialog retains user-entered or looked-up data. -LAST_CUSTOM_WEATHER_DATA = None -LAST_WEATHER_DATA = None -LAST_LOCATION_METHOD = None # "location_name", "map", or "custom_data" -LAST_LOCATION_DATA = None # {"state": ..., "district": ...} or {"latitude": ..., "longitude": ...} - +LAST_CUSTOM_WEATHER_DATA = None # Custom data entered via the Custom Data dialog +LAST_WEATHER_DATA = None # Looked-up or persisted weather data (wind, seismic, temp) +LAST_LOCATION_METHOD = None # "location_name" or "map" +LAST_LOCATION_DATA = None # {"state": ..., "district": ...} or {"latitude": ..., "longitude": ...} class NoScrollComboBox(QComboBox): def wheelEvent(self, event): @@ -1016,6 +1014,7 @@ def _update_irc_values(self, weather): self.seismic_zone_label.setText(f"Seismic Zone: {zone_txt} Z = {z_txt}") self.temp_label.setText(f"Shade Air Temperature (°C): {max_txt} / {min_txt}") + # To extract the location selected in popup def get_selected_location(self): result = {'method': None, 'data': {}, 'weather_data': None} diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 95eb59b31..e0d437c8b 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -1,69 +1,81 @@ +""" +Input dock widget for Highway Bridge Design GUI. + +Design principles: + - No named widget references — all widgets found via _w(key) / findChild(QWidget, key). + - Label comes only from tuple[1]. No metadata["label"] duplication. + - Defaults live in input_values() metadata["default"]. No prime_defaults needed. + - TYPE_BUTTON and TYPE_NOTE are first-class field rows, not hidden in TYPE_TITLE metadata. + - One flat loop: TYPE_TITLE opens a group; COMBOBOX/TEXTBOX/BUTTON/NOTE add rows. + - Zero key-specific logic in InputDock — all per-field behaviour is driven by + the ui_config_dict declared in frontend_data.input_values(). +""" -from osdagbridge.core.utils.common import KEY_CARRIAGEWAY_WIDTH -import sys -import os -import math import json from PySide6.QtWidgets import ( - QApplication, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, - QComboBox, QScrollArea, QLabel, QLineEdit, QGroupBox, QSizePolicy, QMessageBox, QDialog, QToolButton, QFrame, - + QWidget, QHBoxLayout, QVBoxLayout, QPushButton, + QComboBox, QScrollArea, QLabel, QLineEdit, QGroupBox, QSizePolicy, + QDialog, QFrame, QToolButton, ) from PySide6.QtCore import Qt, QRegularExpression, QSize, QTimer, QPoint, QEvent, Signal -from PySide6.QtGui import QPixmap, QDoubleValidator, QRegularExpressionValidator, QIcon, QColor, QBrush -from PySide6.QtSvgWidgets import * +from PySide6.QtGui import QDoubleValidator, QRegularExpressionValidator, QIcon, QColor, QBrush + from osdagbridge.core.utils.common import * from osdagbridge.desktop.ui.dialogs.additional_inputs import AdditionalInputs from osdagbridge.desktop.ui.utils.custom_buttons import DockCustomButton from osdagbridge.desktop.ui.dialogs.project_location import ProjectLocationDialog from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style -from osdagbridge.desktop.ui.dialogs.material_properties import MaterialPropertiesDialog, sync_custom_materials_across_steel_members - -from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar +from osdagbridge.desktop.ui.dialogs.material_properties import ( + MaterialPropertiesDialog, sync_custom_materials_across_steel_members, +) from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType +from osdagbridge.core.bridge_types.plate_girder.defaults import DEFAULTS_DICT + + +MATERIAL_CUSTOM_OPTION = "Custom" + +GROUPBOX_STYLE = ( + "QGroupBox { border:1px solid #90AF13; border-radius:4px; background-color:white;" + " padding:8px; margin-top:12px; font-size:10px; font-weight:bold; color:#333; }" + "QGroupBox::title { subcontrol-origin:margin; subcontrol-position:top left;" + " left:8px; padding:0 4px; margin-top:4px; background-color:white; color:#333; }" +) +ACTION_BTN_STYLE = ( + "QPushButton { background-color:#90AF13; color:white; font-weight:bold; border:none;" + " border-radius:4px; padding:8px 20px; font-size:11px; min-width:80px; }" + "QPushButton:hover { background-color:#7a9a12; }" + "QPushButton:disabled { background:#D0D0D0; color:#666; }" +) +LABEL_STYLE = "QLabel { color:#000; font-size:12px; background:transparent; }" + class NoScrollComboBox(QComboBox): def wheelEvent(self, event): - event.ignore() + event.ignore() + class InputDock(QWidget): - # Signal emitted when any input value changes input_value_changed = Signal() - MATERIAL_CUSTOM_OPTION = "Custom" - + def __init__(self, backend, parent): super().__init__() - self.parent = parent + self.parent = parent self.backend = backend - self.input_widget = None - self.structure_type_combo = None - self.structure_note = None - self.project_location_combo = None - self.custom_location_input = None - self.include_median_combo = None - self.footpath_combo = None - self.additional_inputs = None - self.additional_inputs_widget = None - self.additional_input_values = {} # Store values from additional inputs dialog - self.material_dialog = None - self.additional_inputs_btn = None - self.lock_btn = None - self.scroll_area = None - self.is_locked = False - - # Saved session snapshots. - self._basic_inputs_saved_list: list[dict] = [] - self._additional_inputs_saved_list: list[dict] = [] - self._final_inputs_saved_list: list[dict] = [] - # Bottom action buttons (wired in build_left_panel). - self.save_input_btn = None - self.design_btn = None - self.design_mode_combo = None + self.is_locked = False self._current_design_mode = "Optimized" - self._material_custom_fields = {} - self._material_previous_selection = {} - self._material_combo_map = {} + self.additional_inputs = None + self.additional_input_values = {} + self._additional_inputs_saved_data = {} + self._material_combo_map = {} # key → QComboBox (is_material_field only) + self._material_member_type = {} # key → "Girder"|"Deck" + self._material_custom_fields = {} + self._material_previous_selection = {} + # key → list of (widget_ref, placeholder_method_name) for dynamic placeholders + self._dynamic_placeholder_map: dict[str, tuple[QLineEdit, str]] = {} + + self._basic_inputs_saved_list: list[dict] = [] + self._additional_inputs_saved_list: list[dict] = [] self.setStyleSheet("background: transparent;") self.main_layout = QHBoxLayout(self) @@ -71,251 +83,26 @@ def __init__(self, backend, parent): self.main_layout.setSpacing(0) self.left_container = QWidget() - - # Get input fields from backend - # Prime backend defaults once per session (safe no-op if not implemented). - try: - if hasattr(self.backend, "prime_defaults_from_definitions"): - self.backend.prime_defaults_from_definitions() - except Exception: - pass - input_field_list = self.backend.input_values() - - self.build_left_panel(input_field_list) + self.build_left_panel(self.backend.input_values()) self.main_layout.addWidget(self.left_container) + self._build_toggle_strip() - self.toggle_strip = QWidget() - self.toggle_strip.setStyleSheet("background-color: #90AF13;") - self.toggle_strip.setFixedWidth(6) - toggle_layout = QVBoxLayout(self.toggle_strip) - toggle_layout.setContentsMargins(0, 0, 0, 0) - toggle_layout.setSpacing(0) - toggle_layout.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) + # ── Widget lookup ───────────────────────────────────────────────────────── - self.toggle_btn = QPushButton("❮") - self.toggle_btn.setCursor(Qt.CursorShape.PointingHandCursor) - self.toggle_btn.setFixedSize(6, 60) - self.toggle_btn.setToolTip("Hide panel") - self.toggle_btn.clicked.connect(self.toggle_input_dock) - self.toggle_btn.setStyleSheet(""" - QPushButton { - background-color: #6c8408; - color: white; - font-size: 12px; - font-weight: bold; - padding: 0px; - border: none; - } - QPushButton:hover { - background-color: #5e7407; - } - """) - toggle_layout.addStretch() - toggle_layout.addWidget(self.toggle_btn) - toggle_layout.addStretch() - self.main_layout.addWidget(self.toggle_strip) - - def get_validator(self, validator): - if validator == 'Int Validator': - return QRegularExpressionValidator(QRegularExpression("^(0|[1-9]\\d*)(\\.\\d+)?$")) - elif validator == 'Double Validator': - return QDoubleValidator() - else: - return None - - def on_structure_type_changed(self, text): - """Handle structure type combo box changes""" - if text == "Other": - if hasattr(self, 'structure_note'): - self.structure_note.setVisible(True) - else: - if hasattr(self, 'structure_note'): - self.structure_note.setVisible(False) - - def show_project_location_dialog(self): - """Show Project Location selection dialog""" - dialog = ProjectLocationDialog() - - if dialog.exec() == QDialog.Accepted: - location_data = dialog.get_selected_location() - if hasattr(self.backend, "set_input_value"): - self.backend.set_input_value(KEY_PROJECT_LOCATION, location_data) - - - def eventFilter(self, obj, event): - if obj == self.scroll_area and event.type() == QEvent.MouseButtonPress: - if self.is_locked: - self.show_lock_tooltip() - return True - return super().eventFilter(obj, event) - - def clear_force_hover(self): - if self.lock_btn: - self.lock_btn.setProperty("forceHover", False) - self.lock_btn.style().polish(self.lock_btn) - self.lock_btn.update() - - def show_lock_tooltip(self): - - if hasattr(self, 'tooltip_timer') and self.tooltip_timer.isActive(): - self.tooltip_timer.stop() - - lock_global_pos = self.lock_btn.mapToGlobal(self.lock_btn.rect().topRight()) - tooltip_pos = lock_global_pos + QPoint(5, 0) - self.lock_btn.setProperty("forceHover", True) - self.lock_btn.style().polish(self.lock_btn) - self.lock_btn.update() - - self.lock_btn_tooltip.adjustSize() - self.lock_btn_tooltip.move(tooltip_pos) - self.lock_btn_tooltip.show() - self.lock_btn_tooltip.raise_() - - if not hasattr(self, 'tooltip_timer'): - self.tooltip_timer = QTimer() - self.tooltip_timer.setSingleShot(True) - self.tooltip_timer.timeout.connect(self.lock_btn_tooltip.hide) - self.tooltip_timer.timeout.connect(self.clear_force_hover) - - self.tooltip_timer.start(3000) - - def toggle_lock(self): - self.is_locked = not self.is_locked - self.lock_btn.setChecked(self.is_locked) - self.scroll_area.setDisabled(self.is_locked) - self.update_lock_icon() + def _w(self, key) -> QWidget | None: + return self.input_widget.findChild(QWidget, key) if self.input_widget else None - def update_lock_icon(self): - if self.lock_btn: - if self.is_locked: - self.lock_btn.setIcon(QIcon(":/vectors/lock_close.svg")) - else: - self.lock_btn.setIcon(QIcon(":/vectors/lock_open.svg")) - - def resizeEvent(self, event): - super().resizeEvent(event) - - if self.parent: - if self.width() == 0: - if hasattr(self.parent, 'update_docking_icons'): - self.parent.update_docking_icons(input_is_active=False) - elif self.width() > 0: - if hasattr(self.parent, 'update_docking_icons'): - self.parent.update_docking_icons(input_is_active=True) - - - def paintEvent(self, event): - self.update_lock_icon() - return super().paintEvent(event) - - # Collect all the input dock data to update 2D Cad - def get_all_input_values(self): + def _text(self, key) -> str: + w = self._w(key) + if isinstance(w, QLineEdit): return w.text().strip() + if isinstance(w, QComboBox): return w.currentText() + return "" - """ - @author: Faizan - Collect all input dock values needed by the homepage CAD cross-section. - Merges basic inputs with Additional Inputs dialog values and seeds - safe defaults for any CAD parameter not yet entered by the user. - """ - input_values = {} - - # Helper function to safely get numeric value - def get_numeric_value(widget): - if isinstance(widget, QLineEdit): - text = widget.text().strip() - if text: - try: - return float(text) - except ValueError: - pass - elif isinstance(widget, QComboBox): - text = widget.currentText().strip() - return text - return None - - # # Collect all the Input Fields - # for tupple in self.backend.input_values(): - # if tupple[2] in [TYPE_COMBOBOX, TYPE_TEXTBOX]: - # key = tupple[0] - # widget = self.input_dock_widget.findChild(QWidget, key) - # if widget: - # val = get_numeric_value(widget) - # if val is not None: - # input_values[key] = val - # else: - # if key == KEY_SKEW_ANGLE: - # input_values[key] = 0.0 # Default skew angle - - # Hard code temporarily, will genralize after fixing inputdock generalization - - - # Collect span - widget = self.input_dock_widget.findChild(QWidget, KEY_SPAN) - val = get_numeric_value(widget) - if val is not None: - input_values[KEY_SPAN] = get_numeric_value(widget) - - # Collect carriageway width - widget = self.input_dock_widget.findChild(QWidget, KEY_CARRIAGEWAY_WIDTH) - val = get_numeric_value(widget) - if val is not None: - input_values[KEY_CARRIAGEWAY_WIDTH] = get_numeric_value(widget) - - # Collect skew angle - widget = self.input_dock_widget.findChild(QWidget, KEY_SKEW_ANGLE) - val = get_numeric_value(widget) - if val is not None: - input_values[KEY_SKEW_ANGLE] = get_numeric_value(widget) - else: - input_values[KEY_SKEW_ANGLE] = 0.0 # Default - - # Collect footpath - widget = self.input_dock_widget.findChild(QWidget, KEY_FOOTPATH) - val = get_numeric_value(widget) - if val is not None: - input_values[KEY_FOOTPATH] = get_numeric_value(widget) - - # Collect median - widget = self.input_dock_widget.findChild(QWidget, KEY_INCLUDE_MEDIAN) - val = get_numeric_value(widget) - if val is not None: - input_values[KEY_INCLUDE_MEDIAN] = (self.include_median_combo.currentText() == "Yes") - - # Add default values for parameters that CAD widget needs - # These will be overridden by additional inputs if present - input_values.setdefault(KEY_NO_OF_GIRDERS, 4) - input_values.setdefault(KEY_GIRDER_SPACING, 2.75) - input_values.setdefault(KEY_DECK_OVERHANG, 1.0) - input_values.setdefault(KEY_DECK_THICKNESS, 200) - input_values.setdefault(KEY_FOOTPATH_WIDTH, 1.5) - input_values.setdefault(KEY_FOOTPATH_THICKNESS, 200) - input_values.setdefault(KEY_CROSS_BRACING_SPACING, 3.5) - input_values.setdefault(KEY_CRASH_BARRIER_WIDTH, 0.5) - - # Merge values from Additional Inputs dialog if they exist - if hasattr(self, 'additional_input_values') and self.additional_input_values: - input_values.update(self.additional_input_values) - - - return input_values - - def emit_value_changed(self): - """ - @author: Faizan - Emit input_value_changed to trigger a homepage CAD redraw. - Connected to every basic input field's change signal so the - cross-section updates instantly on every user edit. - """ - self.input_value_changed.emit() + def _float(self, key, fallback=None): + try: return float(self._text(key)) + except: return fallback - def toggle_input_dock(self): - parent = self.parent - if hasattr(parent, 'toggle_animate'): - is_collapsing = self.width() > 0 - parent.toggle_animate(show=not is_collapsing, dock='input') - - self.toggle_btn.setText("❯" if is_collapsing else "❮") - self.toggle_btn.setToolTip("Show panel" if is_collapsing else "Hide panel") + # ── Panel construction ──────────────────────────────────────────────────── def build_left_panel(self, field_list): left_layout = QVBoxLayout(self.left_container) @@ -328,77 +115,57 @@ def build_left_panel(self, field_list): panel_layout.setContentsMargins(15, 10, 15, 10) panel_layout.setSpacing(0) + panel_layout.addLayout(self._build_top_bar()) + panel_layout.addWidget(self._build_scroll_area(field_list)) + panel_layout.addLayout(self._build_bottom_buttons()) + + h_scroll = QScrollArea() + h_scroll.setWidgetResizable(True) + h_scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) + h_scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + h_scroll.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + h_scroll.setStyleSheet(""" + QScrollArea { background:transparent; } + QScrollBar:horizontal { background:#E0E0E0; height:8px; border-radius:2px; } + QScrollBar::handle:horizontal { background:#A0A0A0; min-width:30px; border-radius:2px; } + QScrollBar::handle:horizontal:hover { background:#707070; } + QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { width:0px; } + """) + h_scroll.setWidget(self.left_panel) + left_layout.addWidget(h_scroll) + self._apply_lock_state() + + def _build_top_bar(self) -> QHBoxLayout: top_bar = QHBoxLayout() top_bar.setSpacing(8) top_bar.setContentsMargins(0, 0, 0, 15) - - input_dock_btn = QPushButton("Basic Inputs") - input_dock_btn.setStyleSheet(""" - QPushButton { - background-color: #90AF13; - color: white; - font-weight: bold; - font-size: 13px; - border: none; - border-radius: 4px; - padding: 7px 20px; - min-width: 80px; - } + + basic_btn = QPushButton("Basic Inputs") + basic_btn.setStyleSheet(""" + QPushButton { background-color:#90AF13; color:white; font-weight:bold; + font-size:13px; border:none; border-radius:4px; padding:7px 20px; } """) - input_dock_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - top_bar.addWidget(input_dock_btn) - + basic_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + top_bar.addWidget(basic_btn) + self.additional_inputs_btn = QPushButton("Additional Inputs") - self.additional_inputs_btn.setCursor(Qt.CursorShape.PointingHandCursor) + self.additional_inputs_btn.setCursor(Qt.CursorShape.PointingHandCursor) self.additional_inputs_btn.setStyleSheet(""" - QPushButton { - background-color: white; - color: black; - font-weight: bold; - font-size: 13px; - border-radius: 5px; - border: 1px solid black; - padding: 7px 20px; - text-align: center; - } - QPushButton:hover { - background-color: #90AF13; - border: 1px solid #90AF13; - color: white; - } - QPushButton:pressed { - color: black; - background-color: white; - border: 1px solid black; - } + QPushButton { background-color:white; color:black; font-weight:bold; font-size:13px; + border-radius:5px; border:1px solid black; padding:7px 20px; } + QPushButton:hover { background-color:#90AF13; border-color:#90AF13; color:white; } + QPushButton:pressed { color:black; background-color:white; border:1px solid black; } """) self.additional_inputs_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.additional_inputs_btn.clicked.connect(self.show_additional_inputs) - top_bar.addWidget(self.additional_inputs_btn) + top_bar.addWidget(self.additional_inputs_btn) self.lock_btn = QPushButton() self.lock_btn.setStyleSheet(""" - QPushButton { - background-color: #f4f4f4; - border: none; - padding: 7px; - border-radius: 4px; - } - QPushButton:hover { - background-color: #e0e0e0; - } - QPushButton:checked { - background-color: #FFA500; - } - QPushButton:unchecked { - background-color: #f4f4f4; - } - QPushButton:unchecked:hover { - background-color: #e0e0e0; - } - QPushButton:checked:hover { - background-color: #fa7a02; - } + QPushButton { background-color:#f4f4f4; border:none; padding:7px; border-radius:4px; } + QPushButton:hover { background-color:#e0e0e0; } + QPushButton:checked { background-color:#FFA500; } + QPushButton:checked:hover { background-color:#fa7a02; } """) self.lock_btn.setCursor(Qt.CursorShape.PointingHandCursor) self.lock_btn.setObjectName("lock_btn") @@ -406,990 +173,522 @@ def build_left_panel(self, field_list): self.lock_btn.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) self.lock_btn.clicked.connect(self.toggle_lock) top_bar.addWidget(self.lock_btn) - panel_layout.addLayout(top_bar) self.lock_btn_tooltip = QLabel("Unlock to Edit") self.lock_btn_tooltip.setStyleSheet(""" - QLabel{ - background-color: #f1f1f1; - color: #000000; - border: 1px solid #90AF13; - padding: 4px; - font-size: 15px; - border-radius: 0px; - qproperty-alignment: AlignVCenter; - } + QLabel { background-color:#f1f1f1; color:#000; border:1px solid #90AF13; + padding:4px; font-size:15px; border-radius:0px; } """) - self.lock_btn_tooltip.setObjectName("lock_btn_tooltip") self.lock_btn_tooltip.setWindowFlags(Qt.ToolTip) self.lock_btn_tooltip.hide() - - scroll_area = QScrollArea() - self.scroll_area = scroll_area - scroll_area.setWidgetResizable(True) - scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) - scroll_area.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - scroll_area.installEventFilter(self) - scroll_area.setStyleSheet(""" - QScrollArea { - background: transparent; - padding: 0px 5px; - border-top: 1px solid #909090; - border-bottom: 1px solid #909090; - } - - QScrollArea QScrollBar:vertical { - border: none; - background: #f0f0f0; - width: 8px; - margin-left: 2px; - } - - QScrollArea QScrollBar::handle:vertical { - background: #c0c0c0; - border-radius: 4px; - min-height: 20px; - } - - QScrollArea QScrollBar::handle:vertical:hover { - background: #a0a0a0; - } - - QScrollArea QScrollBar::handle:vertical:pressed { - background: #808080; - } - + return top_bar + + def _build_scroll_area(self, field_list) -> QScrollArea: + self.scroll_area = QScrollArea() + self.scroll_area.setWidgetResizable(True) + self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) + self.scroll_area.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self.scroll_area.installEventFilter(self) + self.scroll_area.setStyleSheet(""" + QScrollArea { background:transparent; padding:0px 5px; + border-top:1px solid #909090; border-bottom:1px solid #909090; } + QScrollArea QScrollBar:vertical { border:none; background:#f0f0f0; width:8px; } + QScrollArea QScrollBar::handle:vertical { background:#c0c0c0; border-radius:4px; min-height:20px; } + QScrollArea QScrollBar::handle:vertical:hover { background:#a0a0a0; } QScrollArea QScrollBar::add-line:vertical, - QScrollArea QScrollBar::sub-line:vertical { - border: none; - background: none; - } - - QScrollArea QScrollBar::add-page:vertical, - QScrollArea QScrollBar::sub-page:vertical { - background: none; - } + QScrollArea QScrollBar::sub-line:vertical { border:none; background:none; } """) + self.input_widget = QWidget() + root_layout = QVBoxLayout(self.input_widget) + root_layout.setContentsMargins(0, 0, 0, 0) + root_layout.setSpacing(12) - group_container = QWidget() - - # This contains all the dynamically created UI - self.input_dock_widget = group_container - - self.input_widget = group_container - group_container_layout = QVBoxLayout(group_container) - group_container_layout.setContentsMargins(0, 0, 0, 0) - group_container_layout.setSpacing(12) - - self.section_contexts = {} - self.container_layouts = {} + self._build_field_loop(field_list, root_layout) - self._build_basic_inputs(field_list, group_container_layout) + root_layout.addStretch() + self.scroll_area.setWidget(self.input_widget) + return self.scroll_area - group_container_layout.addStretch() - scroll_area.setWidget(group_container) + def _build_bottom_buttons(self) -> QHBoxLayout: + btn_layout = QHBoxLayout() + btn_layout.setContentsMargins(0, 15, 0, 0) + btn_layout.setSpacing(10) - self.data = {} - panel_layout.addWidget(scroll_area) + self.save_input_btn = DockCustomButton("Save Input", ":/vectors/save.svg") + self.save_input_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.save_input_btn.clicked.connect(self._on_save_input_clicked) + btn_layout.addWidget(self.save_input_btn) - # Bottom buttons - btn_button_layout = QHBoxLayout() - btn_button_layout.setContentsMargins(0, 15, 0, 0) - btn_button_layout.setSpacing(10) - - save_input_btn = DockCustomButton("Save Input", ":/vectors/save.svg") - save_input_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - btn_button_layout.addWidget(save_input_btn) - - self.save_input_btn = save_input_btn - try: - self.save_input_btn.clicked.connect(self._on_save_input_clicked) - except Exception: - pass - - design_btn = DockCustomButton("Design", ":/vectors/design.svg") - design_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - btn_button_layout.addWidget(design_btn) - - self.design_btn = design_btn - try: - self.design_btn.clicked.connect(self._on_design_clicked) - except Exception: - pass - - panel_layout.addLayout(btn_button_layout) - - # Horizontal scroll area - h_scroll_area = QScrollArea() - h_scroll_area.setWidgetResizable(True) - h_scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) - h_scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - h_scroll_area.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - h_scroll_area.setStyleSheet(""" - QScrollArea{ - background: transparent; - } - QScrollBar:horizontal{ - background: #E0E0E0; - height: 8px; - margin: 3px 0px 0px 0px; - border-radius: 2px; - } - QScrollBar::handle:horizontal{ - background: #A0A0A0; - min-width: 30px; - border-radius: 2px; - } - QScrollBar::handle:horizontal:hover{ - background: #707070; - } - QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal{ - width: 0px; - } - QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal{ - background: none; - } - """) - h_scroll_area.setWidget(self.left_panel) - - left_layout.addWidget(h_scroll_area) - self._apply_lock_state() + self.design_btn = DockCustomButton("Design", ":/vectors/design.svg") + self.design_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + self.design_btn.clicked.connect(self._on_design_clicked) + btn_layout.addWidget(self.design_btn) + return btn_layout - # ----------------------------- - # Input serialization helpers - # ----------------------------- - def _sync_basic_widgets_to_backend(self) -> None: - """Push the latest widget values into backend state. + # ── Main build loop ─────────────────────────────────────────────────────── - Rationale: clicking Design can happen while a QLineEdit still has focus, - so editingFinished may not have fired yet. + def _build_field_loop(self, field_list, root_layout: QVBoxLayout): """ - if not self.backend or not hasattr(self.backend, "set_input_value"): - return - - # Prefer definition order from backend if available. - keys = [] - try: - if hasattr(self.backend, "list_input_keys"): - keys = list(self.backend.list_input_keys() or []) - except Exception: - keys = [] - - # Fallback: use all named widgets under the input panel. - if not keys and getattr(self, "left_panel", None) is not None: - try: - for widget in self.left_panel.findChildren((QLineEdit, QComboBox)): - name = (widget.objectName() or "").strip() - if name: - keys.append(name) - except Exception: - return + Single flat loop — every TYPE is handled generically from ui_config_dict. + No key-specific branches anywhere in this method. + """ + container_layouts: dict[str, QVBoxLayout] = {} + track = False + group = None + glayout = None + + def close_group(): + nonlocal track, group, glayout + if track and group: + group.setLayout(glayout) + track = False + + def parent_for(meta) -> QVBoxLayout: + c = (meta or {}).get("container", "main") + if not c or c == "main": + return root_layout + if c not in container_layouts: + container_layouts[c] = self._make_container(c, root_layout, meta) + return container_layouts[c] + + for defn in field_list: + key, label, ftype, values, _, validator, meta = ( + (*defn, {}) if len(defn) == 6 else defn + ) + meta = meta or {} - for key in keys: - if not isinstance(key, str) or not key: + if ftype == TYPE_MODULE: continue - widget = None - try: - widget = self.left_panel.findChild(QWidget, key) if getattr(self, "left_panel", None) is not None else None - except Exception: - widget = None - try: - if isinstance(widget, QLineEdit): - self.backend.set_input_value(key, widget.text().strip()) - elif isinstance(widget, QComboBox): - self.backend.set_input_value(key, widget.currentText()) - except Exception: + if ftype == TYPE_TITLE: + close_group() + show_title = meta.get("show_group_title", True) + group = QGroupBox(label if show_title else "") + group.setObjectName((key or label) + "_group") + group.setStyleSheet(GROUPBOX_STYLE) + glayout = QVBoxLayout() + glayout.setContentsMargins(8, 8, 8, 8) + glayout.setSpacing(8) + track = True + parent_for(meta).addWidget(group) continue - def _collect_basic_inputs_list(self) -> list[dict]: - self._sync_basic_widgets_to_backend() - try: - if hasattr(self.backend, "export_basic_inputs_as_list"): - return list(self.backend.export_basic_inputs_as_list(include_empty=False) or []) - except Exception: - pass - - # Fallback: best-effort build from backend dict. - values = {} - try: - if hasattr(self.backend, "get_input_values_dict"): - values = self.backend.get_input_values_dict(include_empty=False) or {} - except Exception: - values = {} - out: list[dict] = [] - for k, v in (values or {}).items(): - if v in (None, ""): + if not track: continue - out.append({k: v}) - return out - def _collect_additional_inputs_snapshot(self) -> dict: - """Return the best available Additional Inputs payload. + if ftype == TYPE_COMBOBOX: + glayout.addLayout(self._field_row(label, self._make_combobox(key, values, meta), meta)) - Priority: - 1) Live dialog (even if not yet saved), - 2) last saved dialog state from the session, - 3) empty. - """ - # 1) Live dialog (if open) - try: - if self.additional_inputs is not None and hasattr(self.additional_inputs, "section_properties_tab"): - tab = self.additional_inputs.section_properties_tab - if tab is not None and hasattr(tab, "save_properties"): - live = tab.save_properties() or {} - if isinstance(live, dict) and live: - return live - except Exception: - pass - - # 2) Last saved - saved = getattr(self, "_additional_inputs_saved_data", None) - return saved if isinstance(saved, dict) else {} - - def _collect_additional_inputs_list(self) -> list[dict]: - snapshot = self._collect_additional_inputs_snapshot() - if not isinstance(snapshot, dict) or not snapshot: - return [] - out: list[dict] = [] - # Keep order stable for downstream consumers. - for key in ("girder_details", "stiffener_details", "cross_bracing", "end_diaphragm"): - if key in snapshot: - out.append({key: snapshot.get(key)}) - # Include any unknown keys last. - for key, val in snapshot.items(): - if key in {"girder_details", "stiffener_details", "cross_bracing", "end_diaphragm"}: - continue - out.append({key: val}) - return out + elif ftype == TYPE_TEXTBOX: + glayout.addLayout(self._field_row(label, self._make_textbox(key, validator, meta), meta)) - def _collect_final_inputs_list(self) -> list[dict]: - basic_list = self._collect_basic_inputs_list() - additional_list = self._collect_additional_inputs_list() - final_list = list(basic_list) + list(additional_list) - return final_list + elif ftype == TYPE_BUTTON: + glayout.addLayout(self._make_button_row(label, meta)) - def _debug_dump_final_inputs(self, final_inputs: list[dict], max_chars: int = 12000) -> None: - """Developer-oriented dump of the merged inputs. + elif ftype == TYPE_NOTE: + note = QLabel(label or "") + note.setStyleSheet(LABEL_STYLE) + note.setVisible(False) + if meta.get("attr"): + setattr(self, meta["attr"], note) + glayout.addWidget(note) - Prints to stdout and (if available) appends to the GUI Logs dock. - Payload is truncated to avoid freezing the UI/terminal. - """ - try: - payload = json.dumps(final_inputs, indent=2, ensure_ascii=False, default=str) - except Exception: - payload = str(final_inputs) - - truncated = False - if isinstance(payload, str) and len(payload) > max_chars: - payload = payload[:max_chars] + f"\n... (truncated, total {len(payload)} chars)" - truncated = True - - header = ( - f"[OsdagBridge] final_design_inputs prepared: {len(final_inputs)} items" - + (" (truncated)" if truncated else "") - ) + close_group() - try: - print(header) - print(payload) - except Exception: - pass - - # If the parent page has a Logs dock, mirror the dump there too. - try: - log_widget = getattr(self.parent, "textEdit", None) - if log_widget is not None and hasattr(log_widget, "append"): - log_widget.append(header) - # Keep the GUI log smaller than terminal. - gui_payload = payload if len(payload) <= 4000 else payload[:4000] + "\n... (truncated for GUI log)" - log_widget.append(gui_payload) - except Exception: - pass - - # ----------------------------- - # Button handlers - # ----------------------------- - def _on_save_input_clicked(self) -> None: - self._basic_inputs_saved_list = self._collect_basic_inputs_list() - self._additional_inputs_saved_list = self._collect_additional_inputs_list() - self._final_inputs_saved_list = list(self._basic_inputs_saved_list) + list(self._additional_inputs_saved_list) - - # Persist to backend for later export (csv/osi) or design execution. - try: - if hasattr(self.backend, "set_input_value"): - self.backend.set_input_value("basic_inputs_list", self._basic_inputs_saved_list) - self.backend.set_input_value("additional_inputs_list", self._additional_inputs_saved_list) - if hasattr(self.backend, "set_final_design_inputs"): - self.backend.set_final_design_inputs(self._final_inputs_saved_list) - except Exception: - pass + # Post-loop: sync custom materials across all Girder-type material combos. + sync_custom_materials_across_steel_members(self._material_combo_map, self._ensure_material_option) - QMessageBox.information( - self, - "Inputs Saved", - "Basic + Additional inputs saved for this session.", - ) + # Resolve all dynamic placeholders now that all widgets exist. + self._refresh_all_dynamic_placeholders() - def _on_design_clicked(self) -> None: - self._final_inputs_saved_list = self._collect_final_inputs_list() + # ── Widget factories ────────────────────────────────────────────────────── - try: - if hasattr(self.backend, "set_final_design_inputs"): - self.backend.set_final_design_inputs(self._final_inputs_saved_list) - elif hasattr(self.backend, "set_input_value"): - self.backend.set_input_value("final_design_inputs", self._final_inputs_saved_list) - except Exception: - pass + def _make_combobox(self, key, values, meta) -> NoScrollComboBox: + widget = NoScrollComboBox() + widget.setObjectName(key) + apply_field_style(widget) - QMessageBox.information( - self, - "Design Input Ready", - "Final merged input payload is prepared (Basic + Additional).", + if values: + items = [str(v) for v in values] + # Material fields: move Custom to end. + if meta.get("is_material_field"): + items = [i for i in items if i != MATERIAL_CUSTOM_OPTION] + [MATERIAL_CUSTOM_OPTION] + widget.addItems(items) + + # Grey-out any options listed in disabled_options. + disabled = set(meta.get("disabled_options") or []) + for i, t in enumerate(items): + if t in disabled: + item = widget.model().item(i) if hasattr(widget.model(), "item") else None + if item: + item.setEnabled(False) + widget.setItemData(i, QBrush(QColor("gray")), Qt.ItemDataRole.ForegroundRole) + + # Apply default. + default = meta.get("default") + if default is not None: + idx = widget.findText(str(default)) + if idx < 0 and meta.get("is_material_field"): + self._ensure_material_option(widget, str(default)) + idx = widget.findText(str(default)) + if idx >= 0: + widget.setCurrentIndex(idx) + + # Always wire backend sync + change signal. + widget.currentTextChanged.connect( + lambda text, k=key: self.backend.set_input_value(k, text) + if hasattr(self.backend, "set_input_value") else None ) + widget.currentTextChanged.connect(self.input_value_changed) - # Option 2: print merged inputs for quick verification. - self._debug_dump_final_inputs(self._final_inputs_saved_list) - - def _show_additional_inputs_dialog(self, target_tab_name=None): - """ - @author: Faizan - Create the AdditionalInputs dialog, passing current footpath, - carriageway width, and live homepage CAD state as initial_cad_state - so the dialog preview starts in sync with the homepage cross-section. - Restores previously saved dialog state and connects save_button to - _update_cad_from_additional_inputs. - """ - - footpath_value = self.footpath_combo.currentText() if self.footpath_combo else "None" - - carriageway_width = self._get_effective_carriageway_width() - - # Lazily create the in-session storage for Additional Inputs. - if not hasattr(self, "_additional_inputs_saved_data"): - self._additional_inputs_saved_data = {} + # Wire generic on_changed callbacks declared in schema. + for cb_name in self._as_list(meta.get("on_changed")): + cb = getattr(self, cb_name, None) + if callable(cb): + widget.currentTextChanged.connect(cb) - # Grab homepage CAD state so dialog preview starts in sync - initial_cad_state = {} - try: - if hasattr(self.parent, 'cad_comp_widget'): - initial_cad_state = dict(self.parent.cad_comp_widget.cross_section_widget.params) - except Exception: - pass + # Material field wiring. + if meta.get("is_material_field"): + member = meta.get("member_type", "Girder") + self._material_combo_map[key] = widget + self._material_member_type[key] = member + if widget.currentText() and widget.currentText() != MATERIAL_CUSTOM_OPTION: + self._material_previous_selection[key] = widget.currentText() + widget.currentTextChanged.connect( + lambda text, k=key, w=widget: self._on_material_changed(k, w, text) + ) - dialog = AdditionalInputs(footpath_value, carriageway_width, initial_cad_state=initial_cad_state) - self.additional_inputs = dialog - self.additional_inputs_widget = dialog - - # Propagate project location data to additional inputs (for Temperature Load etc) - location_data = self.backend.get_input_value(KEY_PROJECT_LOCATION) if hasattr(self.backend, "get_input_value") else None - if location_data and hasattr(self.additional_inputs, 'update_project_location'): - self.additional_inputs.update_project_location(location_data) - - - # Disable inner tabs based on current Input Dock selections. - # Railing tab is disabled when no footpath is selected. - # Median tab is disabled when median is not included. - include_median = self.include_median_combo.currentText() if self.include_median_combo else "Yes" - dialog.apply_tab_visibility(footpath_value, include_median) - - # Restore previously saved dialog state (includes stiffener details). - if isinstance(getattr(self, "_additional_inputs_saved_data", None), dict) and self._additional_inputs_saved_data: - try: - dialog.set_properties_data(self._additional_inputs_saved_data) - except Exception: - pass + # Fire on_changed handler(s) once with the current value if requested. + if meta.get("trigger_on_init"): + for cb_name in self._as_list(meta.get("on_changed")): + cb = getattr(self, cb_name, None) + if callable(cb): + cb(widget.currentText()) - try: - dialog.set_member_properties_design_mode(self._get_basic_design_mode()) - except Exception: - pass - - if target_tab_name: - try: - for idx in range(self.additional_inputs.tabs.count()): - tab_text = str(self.additional_inputs.tabs.tabText(idx) or "").strip() - if tab_text.lower() == str(target_tab_name).strip().lower(): - self.additional_inputs.tabs.setCurrentIndex(idx) - break - except Exception: - pass + return widget - # Capture state when dialog closes or Save is clicked. - try: - dialog.finished.connect(self._handle_additional_inputs_closed) - if hasattr(dialog, "save_button"): - dialog.save_button.clicked.connect(lambda: self._update_cad_from_additional_inputs(dialog)) - except Exception: - pass + def _make_textbox(self, key, validator, meta) -> QLineEdit: + widget = QLineEdit() + widget.setObjectName(key) + apply_field_style(widget) + + # Validator + if validator == "Int Validator": + widget.setValidator(QRegularExpressionValidator(QRegularExpression(r"^(0|[1-9]\d*)(\.\d+)?$"))) + elif validator == "Double Validator": + widget.setValidator(QDoubleValidator()) + + # Placeholder + if meta.get("placeholder"): + widget.setPlaceholderText(meta["placeholder"]) + if meta.get("placeholder_dynamic"): + self._dynamic_placeholder_map[key] = (widget, meta["placeholder_dynamic"]) + + # Default + default = meta.get("default") + if default is not None: + widget.setText(str(default)) + + # Backend sync + widget.editingFinished.connect( + lambda k=key, w=widget: self.backend.set_input_value(k, w.text()) + if hasattr(self.backend, "set_input_value") else None + ) + widget.textChanged.connect(self.input_value_changed) + + # Extra callbacks declared in schema + for cb_name in self._as_list(meta.get("on_editing_finished")): + cb = getattr(self, cb_name, None) + if callable(cb): + widget.editingFinished.connect(cb) - # Connect to accept signal to handle save - result = dialog.exec_() - - # If user clicked Save (accepted) or closed, trigger final update - if result == AdditionalInputs.Accepted: - self._update_cad_from_additional_inputs(dialog) + return widget - def _update_cad_from_additional_inputs(self, dialog): + def _make_button_row(self, label: str, meta: dict) -> QHBoxLayout: """ - @author: Faizan - Read all values from the Additional Inputs dialog after save, merge - them into additional_input_values, and emit input_value_changed to - trigger a homepage CAD redraw with the updated parameters. + [Label | Action Button] row. + label → tuple[1] + action → meta["action"] — InputDock method name + btn_text → meta["button_label"] (default "Modify Here") """ - if not dialog: - return - values = dialog.get_all_values() - if values: - # Merge with existing input values - self.additional_input_values = values - # Emit signal to trigger homepage CAD update - self.input_value_changed.emit() - - def show_additional_inputs(self): - """Show Additional Inputs dialog with its default initial tab.""" - self._show_additional_inputs_dialog() - - def _apply_lock_state(self): - self.update_lock_icon() - - enabled = not self.is_locked - if self.scroll_area: - self.scroll_area.setEnabled(enabled) - if self.input_widget: - self.input_widget.setEnabled(enabled) - self._set_additional_inputs_enabled(enabled) - - if self.material_dialog: - self.material_dialog.setEnabled(enabled) - - def _set_additional_inputs_enabled(self, enabled): - if self.additional_inputs_widget: - self.additional_inputs_widget.setEnabled(enabled) - - def _handle_additional_inputs_closed(self): - # Persist the last saved Additional Inputs data for the session. - try: - if self.additional_inputs is not None and hasattr(self.additional_inputs, "get_saved_data"): - saved = self.additional_inputs.get_saved_data() - if isinstance(saved, dict) and saved: - self._additional_inputs_saved_data = saved - except Exception: - pass - self.additional_inputs = None - self.additional_inputs_widget = None - - def _build_basic_inputs(self, field_definitions, root_layout): - current_section_id = None - for definition in field_definitions: - key, label, field_type, values, required, validator, metadata = self._normalize_definition(definition) - if field_type == TYPE_MODULE: - continue - if field_type == TYPE_TITLE: - section_id = key or label - section_context = self._create_section_context(section_id, label, metadata, root_layout) - current_section_id = section_context["id"] - continue - if current_section_id is None: - continue - section_context = self.section_contexts.get(current_section_id) - if not section_context: - continue - self._create_field_row(section_context, key, label, field_type, values, validator, metadata) - - self._finalize_section_contexts() - self._update_carriageway_placeholder() - sync_custom_materials_across_steel_members(self._material_combo_map, self._ensure_material_option) + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(8) - def _normalize_definition(self, definition): - if len(definition) == 6: - return (*definition, {}) - return definition - - def _create_section_context(self, section_id, title, metadata, root_layout): - container_key = (metadata or {}).get("container", "main") - parent_layout = self._get_container_layout(container_key, root_layout, metadata) - - show_title = metadata.get("show_group_title", True) if metadata else True - group_title = title if show_title and title else "" - group_box = QGroupBox(group_title) if group_title else QGroupBox() - group_box.setStyleSheet(self._section_groupbox_style()) - - layout = QVBoxLayout(group_box) - layout.setContentsMargins(8, 8, 8, 8) - layout.setSpacing(8) - - if metadata and metadata.get("custom_content") == "project_location": - self._add_project_location_controls(layout, metadata) - - parent_layout.addWidget(group_box) - context = { - "id": section_id, - "layout": layout, - "metadata": metadata or {}, - "group_box": group_box, - } - self.section_contexts[section_id] = context - return context - - def _section_groupbox_style(self): - return ( - "QGroupBox {\n" - " border: 1px solid #90AF13;\n" - " border-radius: 4px;\n" - " background-color: white;\n" - " padding: 8px;\n" - " margin-top: 12px;\n" - " font-size: 10px;\n" - " font-weight: bold;\n" - " color: #333;\n" - "}\n" - "QGroupBox::title {\n" - " subcontrol-origin: margin;\n" - " subcontrol-position: top left;\n" - " left: 8px;\n" - " padding: 0 4px;\n" - " margin-top: 4px;\n" - " background-color: white;\n" - " color: #333;\n" - "}" - ) + lbl = QLabel(label) + lbl.setStyleSheet(LABEL_STYLE) + lbl.setMinimumWidth(110) + row.addWidget(lbl) + + btn_text = meta.get("button_label") + btn = QPushButton(btn_text) + btn.setCursor(Qt.CursorShape.PointingHandCursor) + btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + btn.setStyleSheet(ACTION_BTN_STYLE) + cb = getattr(self, meta.get("action", ""), None) + if callable(cb): + btn.clicked.connect(cb) + else: + btn.setEnabled(False) + row.addWidget(btn, 1) + return row - def _get_container_layout(self, container_key, root_layout, metadata=None): - if not container_key or container_key == "main": - return root_layout - if container_key in self.container_layouts: - return self.container_layouts[container_key] - body_layout = self._create_container_group(container_key, root_layout, metadata) - self.container_layouts[container_key] = body_layout - return body_layout + def _field_row(self, label: str, widget: QWidget, meta: dict) -> QHBoxLayout: + """[Label | widget] row. Material combos get an extra info (ℹ) button.""" + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(8) - def _container_display_name(self, container_key, metadata): - if metadata: - custom = metadata.get("container_label") or metadata.get("container_title") - if custom: - return custom - fallback = container_key or "Section" - return fallback.replace("_", " ").title() - - def _create_container_group(self, container_key, root_layout, metadata=None): - display_name = self._container_display_name(container_key, metadata or {}) - group = QGroupBox() - group.setStyleSheet( - "QGroupBox {\n" - " border: 1px solid #90AF13;\n" - " border-radius: 5px;\n" - " margin-top: 0px;\n" - " padding-top: 5px;\n" - " background-color: white;\n" - "}\n" + lbl = QLabel(label) + lbl.setStyleSheet(LABEL_STYLE) + lbl.setMinimumWidth(110) + row.addWidget(lbl) + + if meta.get("is_material_field") and isinstance(widget, QComboBox): + container = QWidget() + clo = QHBoxLayout(container) + clo.setContentsMargins(0, 0, 0, 0) + clo.setSpacing(4) + clo.addWidget(widget, 1) + info = QToolButton() + info.setCursor(Qt.CursorShape.PointingHandCursor) + info.setAutoRaise(True) + info.setIcon(QIcon(":/vectors/msg_about.svg")) + info.setFixedSize(20, 20) + info.setToolTip("View material properties") + info.setStyleSheet("QToolButton { border:none; padding:0px; background:transparent; }") + if info.icon().isNull(): + info.setText("i") + info.clicked.connect(lambda _=False, k=widget.objectName(): self._show_material_info(k)) + clo.addWidget(info) + row.addWidget(container, 1) + else: + row.addWidget(widget, 1) + return row + + # ── Collapsible container ───────────────────────────────────────────────── + + def _make_container(self, key: str, root_layout: QVBoxLayout, meta: dict) -> QVBoxLayout: + name = (meta.get("container_label") or + meta.get("container_title") or + key.replace("_", " ").title()) + outer = QGroupBox() + outer.setStyleSheet( + "QGroupBox { border:1px solid #90AF13; border-radius:5px;" + " margin-top:0px; padding-top:5px; background-color:white; }" ) - container_layout = QVBoxLayout() - container_layout.setContentsMargins(10, 10, 10, 10) - container_layout.setSpacing(10) + ol = QVBoxLayout() + ol.setContentsMargins(10, 10, 10, 10) + ol.setSpacing(10) header = QHBoxLayout() - title_label = QLabel(display_name) - title_label.setStyleSheet("font-size: 13px; font-weight: bold; color: #333;") - header.addWidget(title_label) + title_lbl = QLabel(name) + title_lbl.setStyleSheet("font-size:13px; font-weight:bold; color:#333;") + header.addWidget(title_lbl) header.addStretch() - toggle_btn = QPushButton() - toggle_btn.setCursor(Qt.CursorShape.PointingHandCursor) - toggle_btn.setCheckable(True) - toggle_btn.setChecked(True) - toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg")) - toggle_btn.setIconSize(QSize(20, 20)) - toggle_btn.setStyleSheet( - "QPushButton {\n" - " background: transparent;\n" - " border: none;\n" - " padding: 2px;\n" - "}\n" - "QPushButton:hover {\n" - " background: transparent;\n" - "}\n" - "QPushButton:pressed {\n" - " background: transparent;\n" - "}" + toggle = QPushButton() + toggle.setCursor(Qt.CursorShape.PointingHandCursor) + toggle.setCheckable(True) + toggle.setChecked(True) + toggle.setIcon(QIcon(":/vectors/arrow_up_light.svg")) + toggle.setIconSize(QSize(20, 20)) + toggle.setStyleSheet( + "QPushButton { background:transparent; border:none; padding:2px; }" + "QPushButton:hover, QPushButton:pressed { background:transparent; }" ) - header.addWidget(toggle_btn) - container_layout.addLayout(header) + header.addWidget(toggle) + ol.addLayout(header) - container_body = QFrame() - container_body.setFrameShape(QFrame.NoFrame) - body_layout = QVBoxLayout(container_body) + body = QFrame() + body.setFrameShape(QFrame.NoFrame) + body_layout = QVBoxLayout(body) body_layout.setContentsMargins(0, 0, 0, 0) body_layout.setSpacing(10) - container_body.setVisible(True) - container_layout.addWidget(container_body) - - def _toggle(checked): - container_body.setVisible(checked) - icon = ":/vectors/arrow_up_light.svg" if checked else ":/vectors/arrow_down_light.svg" - toggle_btn.setIcon(QIcon(icon)) + ol.addWidget(body) - toggle_btn.toggled.connect(_toggle) + toggle.toggled.connect(lambda checked: ( + body.setVisible(checked), + toggle.setIcon(QIcon(":/vectors/arrow_up_light.svg" if checked else ":/vectors/arrow_down_light.svg")), + )) - group.setLayout(container_layout) - root_layout.addWidget(group) + outer.setLayout(ol) + root_layout.addWidget(outer) return body_layout - def _add_project_location_controls(self, layout, metadata): - label_text = metadata.get("header_label") or "Project Location*" - button_rows = metadata.get("button_rows") - if button_rows: - for row_entry in button_rows: - row_config = self._prepare_button_row_config(row_entry, {"label": label_text}) - if row_config: - self._add_button_row(layout, row_config) - return - - fallback_row = self._prepare_button_row_config("project_location", {"label": label_text}) - self._add_button_row(layout, fallback_row) - - def _section_label_style(self): - return ( - "QLabel {\n" - " color: #000000;\n" - " font-size: 12px;\n" - " background: transparent;\n" - "}" - ) - - def _default_action_button_style(self): - return ( - "QPushButton {\n" - " background-color: #90AF13;\n" - " color: white;\n" - " font-weight: bold;\n" - " border: none;\n" - " border-radius: 4px;\n" - " padding: 8px 20px;\n" - " font-size: 11px;\n" - " min-width: 80px;\n" - "}\n" - "QPushButton:hover {\n" - " background-color: #7a9a12;\n" - "}\n" - "QPushButton:disabled{\n" - " background: #D0D0D0;\n" - " color: #666;\n" - "}" - ) - - def _default_row_config(self, row_type): - mapping = { - "project_location": { - "label": "Project Location*", - "buttons": [ - {"text": "Add Here", "action": "show_project_location_dialog"}, - ], - }, - "additional_geometry": { - "label": "Additional Geometry", - "buttons": [ - {"text": "Modify Here", "action": "show_additional_inputs"}, - ], - }, - } - return mapping.get(row_type, {}) - - def _prepare_button_row_config(self, config_entry, fallback_defaults=None): - fallback_defaults = fallback_defaults or {} - if isinstance(config_entry, str): - config = {"type": config_entry} - else: - config = dict(config_entry or {}) - - row_type = config.get("type") - defaults = self._default_row_config(row_type) - - resolved = {} - resolved.update(defaults) - resolved.update(fallback_defaults) - resolved.update(config) - - if not resolved.get("buttons"): - extra_defaults = self._default_row_config(resolved.get("type")) - if extra_defaults: - resolved.setdefault("buttons", extra_defaults.get("buttons")) - resolved.setdefault("label", extra_defaults.get("label")) - - return resolved if resolved.get("buttons") else None + def _build_toggle_strip(self): + self.toggle_strip = QWidget() + self.toggle_strip.setStyleSheet("background-color: #90AF13;") + self.toggle_strip.setFixedWidth(6) + sl = QVBoxLayout(self.toggle_strip) + sl.setContentsMargins(0, 0, 0, 0) + sl.setSpacing(0) + sl.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) - def _add_button_row(self, layout, config): - if not config: - return + self.toggle_btn = QPushButton("❮") + self.toggle_btn.setCursor(Qt.CursorShape.PointingHandCursor) + self.toggle_btn.setFixedSize(6, 60) + self.toggle_btn.setToolTip("Hide panel") + self.toggle_btn.clicked.connect(self.toggle_input_dock) + self.toggle_btn.setStyleSheet(""" + QPushButton { background-color:#6c8408; color:white; font-size:12px; + font-weight:bold; padding:0px; border:none; } + QPushButton:hover { background-color:#5e7407; } + """) + sl.addStretch() + sl.addWidget(self.toggle_btn) + sl.addStretch() + self.main_layout.addWidget(self.toggle_strip) - row = QHBoxLayout() - row.setContentsMargins(0, 0, 0, 0) - row.setSpacing(8) + # ══════════════════════════════════════════════════════════════════════════ + # Dynamic placeholder helpers + # ══════════════════════════════════════════════════════════════════════════ - label_text = config.get("label") - if label_text: - field_label = QLabel(label_text) - field_label.setStyleSheet(self._section_label_style()) - field_label.setMinimumWidth(config.get("label_min_width", 110)) - row.addWidget(field_label) - - buttons = config.get("buttons", []) - for button_config in buttons: - button = self._create_action_button(button_config) - stretch = button_config.get("stretch", 1 if len(buttons) == 1 else 0) - row.addWidget(button, stretch) - - if config.get("add_stretch", True): - row.addStretch() - - layout.addLayout(row) - - def _create_action_button(self, config): - button = QPushButton(config.get("text", "Action")) - button.setCursor(Qt.CursorShape.PointingHandCursor) - if config.get("size_policy") == "fixed": - button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - else: - button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - - icon_path = config.get("icon") - if icon_path: - button.setIcon(QIcon(icon_path)) - icon_size = config.get("icon_size") - if isinstance(icon_size, (list, tuple)) and len(icon_size) == 2: - button.setIconSize(QSize(icon_size[0], icon_size[1])) - - style = config.get("style") or self._default_action_button_style() - button.setStyleSheet(style) - - tooltip = config.get("tooltip") - if tooltip: - button.setToolTip(tooltip) - - action_name = config.get("action") - callback = getattr(self, action_name, None) if action_name else None - if callable(callback): - button.clicked.connect(callback) - else: - button.setEnabled(False) + def _refresh_all_dynamic_placeholders(self): + """Call all registered dynamic placeholder methods to set initial text.""" + for key, (widget, method_name) in self._dynamic_placeholder_map.items(): + self._apply_dynamic_placeholder(widget, method_name) - return button + def _apply_dynamic_placeholder(self, widget: QLineEdit, method_name: str): + method = getattr(self, method_name, None) + if callable(method): + try: + text = method() + if text: + widget.setPlaceholderText(str(text)) + except Exception: + pass - def _create_field_row(self, section_context, key, label, field_type, values, validator, metadata): - widget = self._create_input_widget(key, field_type, values, validator, metadata) - if widget is None: - return - row = QHBoxLayout() - row.setContentsMargins(0, 0, 0, 0) - row.setSpacing(8) - display_label = (metadata or {}).get("label") if metadata else None - field_label = QLabel(display_label or label) - field_label.setStyleSheet(self._section_label_style()) - field_label.setMinimumWidth(110) - row.addWidget(field_label) - if self._is_material_input_key(key) and isinstance(widget, QComboBox): - combo_container = QWidget() - combo_layout = QHBoxLayout(combo_container) - combo_layout.setContentsMargins(0, 0, 0, 0) - combo_layout.setSpacing(4) - combo_layout.addWidget(widget, 1) - - info_btn = QToolButton() - info_btn.setCursor(Qt.CursorShape.PointingHandCursor) - info_btn.setToolTip("View material properties") - info_btn.setAutoRaise(True) - info_btn.setIcon(QIcon(":/vectors/msg_about.svg")) - info_btn.setFixedSize(20, 20) - info_btn.setStyleSheet("QToolButton { border: none; padding: 0px; background: transparent; }") - if info_btn.icon().isNull(): - info_btn.setText("i") - info_btn.setToolTip("View selected material properties") - info_btn.clicked.connect(lambda _checked=False, k=key: self._show_selected_material_info_for_key(k)) - combo_layout.addWidget(info_btn) - - row.addWidget(combo_container, 1) - else: - row.addWidget(widget, 1) - if metadata.get("add_stretch"): - row.addStretch() - section_context["layout"].addLayout(row) + def _update_carriageway_placeholder(self, *_): + """Re-resolve all dynamic placeholders (called when a dependency changes).""" + self._refresh_all_dynamic_placeholders() - def _create_input_widget(self, key, field_type, values, validator, metadata): - key_name = key if isinstance(key, str) else None + def _carriageway_placeholder_text(self) -> str: + """Returns the current placeholder string for the carriageway width field.""" + min_w, max_w = self._carriageway_limits() + suffix = " per side" if self._is_median_included() else "" + return f"{min_w:.2f}–{max_w:.1f} m{suffix}" - if field_type == TYPE_COMBOBOX: - widget = NoScrollComboBox() - # Connect instant 2D CAD update - widget.currentTextChanged.connect(self.emit_value_changed) + # ══════════════════════════════════════════════════════════════════════════ + # Domain event handlers (called by name from schema on_changed / on_editing_finished) + # ══════════════════════════════════════════════════════════════════════════ - apply_field_style(widget) - if values: - items = [str(v) for v in values] - if self._is_material_input_key(key_name): - items = [item for item in items if item != self.MATERIAL_CUSTOM_OPTION] - items.append(self.MATERIAL_CUSTOM_OPTION) - widget.addItems(items) - - for i, text in enumerate(items): - # Intentionally disabling other option - if text == "Other": - widget.setItemData(i, QBrush(QColor("gray")), Qt.ItemDataRole.ForegroundRole) - model = widget.model() - if hasattr(model, 'item'): - item = model.item(i) - if item: - item.setEnabled(False) - - # Prefer backend-stored value, else metadata default. + def _on_footpath_changed(self, value=None): + if value is None: + value = self._text(KEY_FOOTPATH) + if self.additional_inputs and self.additional_inputs.isVisible(): try: - backend_value = self.backend.get_input_value(key_name) if key_name and hasattr(self.backend, "get_input_value") else None + self.additional_inputs.update_footpath_value(value) except Exception: - backend_value = None - - default_value = (metadata or {}).get("default") - - init_value = backend_value if backend_value not in (None, "") else default_value - if init_value not in (None, ""): - idx = widget.findText(str(init_value)) - if idx < 0 and self._is_material_input_key(key_name): - self._ensure_material_option(widget, str(init_value)) - idx = widget.findText(str(init_value)) - if idx >= 0: - widget.setCurrentIndex(idx) - - # Persist changes back into backend. - if key_name and hasattr(widget, "currentTextChanged"): - try: - widget.currentTextChanged.connect(lambda text, k=key_name: self._push_backend_value(k, text)) - except Exception: - pass - elif field_type == TYPE_TEXTBOX: - widget = QLineEdit() - # Connect instant 2D CAD update - widget.textChanged.connect(self.emit_value_changed) - - apply_field_style(widget) - validator_instance = self.get_validator(validator) - if validator_instance: - widget.setValidator(validator_instance) - - # Restore value from backend if present. + pass + + def _on_design_mode_changed(self, mode_text: str = ""): + self._current_design_mode = str(mode_text or "Optimized").strip() + if self.additional_inputs: try: - backend_value = self.backend.get_input_value(key_name) if key_name and hasattr(self.backend, "get_input_value") else None + self.additional_inputs.set_member_properties_design_mode(self._current_design_mode) except Exception: - backend_value = None + pass + if self._current_design_mode.lower() == "custom": + self._open_additional_inputs(target_tab="Member Properties") - if backend_value not in (None, ""): - widget.setText(str(backend_value)) + def _validate_carriageway_width_silent(self, *_): + """Silent validation (no message box) — called from schema on_changed.""" + self.validate_carriageway_width(show_message=False) - # Persist changes back into backend. - if key_name: - try: - widget.editingFinished.connect(lambda k=key_name, w=widget: self._push_backend_value(k, w.text())) - except Exception: - pass - else: - return None + # ══════════════════════════════════════════════════════════════════════════ + # Carriageway validation + # ══════════════════════════════════════════════════════════════════════════ - if key_name: - widget.setObjectName(key_name) - self._register_input_widget(key_name, widget) - self._apply_field_specific_config(key_name, widget, metadata or {}) - return widget + def _is_median_included(self) -> bool: + return self._text(KEY_INCLUDE_MEDIAN).lower() == "yes" - def _push_backend_value(self, key: str, value): - if not key: - return - if not self.backend or not hasattr(self.backend, "set_input_value"): + def _carriageway_limits(self): + min_w = CARRIAGEWAY_WIDTH_MIN_WITH_MEDIAN if self._is_median_included() else CARRIAGEWAY_WIDTH_MIN + return min_w, CARRIAGEWAY_WIDTH_MAX_LIMIT + + def validate_carriageway_width(self, show_message=True): + w = self._w(KEY_CARRIAGEWAY_WIDTH) + if not isinstance(w, QLineEdit) or not w.text().strip(): return try: - self.backend.set_input_value(key, value) - except Exception: - pass - - def _register_input_widget(self, key, widget): - if key == KEY_STRUCTURE_TYPE: - self.structure_type_combo = widget - elif key == "Design": - self.design_mode_combo = widget - elif key == KEY_SPAN: - self.span_input = widget - elif key == KEY_CARRIAGEWAY_WIDTH: - self.carriageway_input = widget - elif key == KEY_INCLUDE_MEDIAN: - self.include_median_combo = widget - elif key == KEY_FOOTPATH: - self.footpath_combo = widget - elif key == KEY_SKEW_ANGLE: - self.skew_input = widget - elif key == KEY_GIRDER: - self.girder_combo = widget - elif key == KEY_CROSS_BRACING: - self.cross_bracing_combo = widget - elif key == KEY_END_DIAPHRAGM: - self.end_diaphragm_combo = widget - elif key == KEY_DECK_CONCRETE_GRADE_BASIC: - self.deck_combo = widget - - def _apply_field_specific_config(self, key, widget, metadata): - if not key or widget is None: + value = float(w.text()) + except ValueError: + w.clear() + if show_message: + CustomMessageBox( + title="Carriageway Width", + text="Please enter a numeric value.", + dialogType=MessageBoxType.Warning + ).exec() return - if key == KEY_STRUCTURE_TYPE and hasattr(widget, "currentTextChanged"): - widget.currentTextChanged.connect(self.on_structure_type_changed) - elif key == KEY_SPAN and isinstance(widget, QLineEdit): - widget.setValidator(QDoubleValidator(SPAN_MIN, SPAN_MAX, 2)) - widget.setPlaceholderText(f"{SPAN_MIN}-{SPAN_MAX} m") - elif key == KEY_CARRIAGEWAY_WIDTH and isinstance(widget, QLineEdit): - widget.setValidator(QDoubleValidator(0.0, 100.0, 2)) - widget.editingFinished.connect(self.validate_carriageway_width) - elif key == KEY_INCLUDE_MEDIAN and hasattr(widget, "currentTextChanged"): - widget.currentTextChanged.connect(self.on_include_median_changed) - default_value = metadata.get("default") - if default_value: - idx = widget.findText(default_value) - if idx >= 0: - widget.setCurrentIndex(idx) - elif key == KEY_FOOTPATH and hasattr(widget, "currentTextChanged"): - widget.currentTextChanged.connect(self.on_footpath_changed) - default_value = metadata.get("default") - if default_value: - idx = widget.findText(default_value) - if idx >= 0: - widget.setCurrentIndex(idx) - elif key == KEY_SKEW_ANGLE and isinstance(widget, QLineEdit): - widget.setValidator(QDoubleValidator(SKEW_ANGLE_MIN, SKEW_ANGLE_MAX, 1)) - widget.setPlaceholderText(f"{SKEW_ANGLE_MIN} - {SKEW_ANGLE_MAX}°") - elif self._is_material_input_key(key) and isinstance(widget, QComboBox): - if key == KEY_DECK_CONCRETE_GRADE_BASIC and hasattr(widget, "findText"): - default_value = metadata.get("default") - if default_value: - idx = widget.findText(default_value) - if idx >= 0: - widget.setCurrentIndex(idx) - self._material_combo_map[key] = widget - current_text = str(widget.currentText() or "").strip() - if current_text and current_text != self.MATERIAL_CUSTOM_OPTION: - self._material_previous_selection[key] = current_text - widget.currentTextChanged.connect( - lambda text, k=key, w=widget: self._on_material_selection_changed(k, w, text) - ) - elif key == "Design" and hasattr(widget, "currentTextChanged"): - widget.currentTextChanged.connect(self._on_design_mode_changed_from_user) - self._set_design_mode(widget.currentText(), open_member_properties=False) - - def _is_material_input_key(self, key) -> bool: - return key in { - KEY_GIRDER, - KEY_CROSS_BRACING, - KEY_END_DIAPHRAGM, - KEY_DECK_CONCRETE_GRADE_BASIC, - } + min_w, max_w = self._carriageway_limits() + msg = None + if value < min_w: + msg = ("IRC 5 Cl.104.3.1: min carriageway width with median is 7.5 m per side." + if self._is_median_included() else + "IRC 5 Cl.104.3.1: min carriageway width is 4.25 m.") + value = min_w + elif value > max_w: + msg = "Software limits carriageway width to 23.6 m." + value = max_w + w.setText(f"{value:.2f}") + if msg and show_message: + CustomMessageBox( + title="Carriageway Width", + text=msg, + dialogType=MessageBoxType.Warning + ).exec() - def _material_member_for_key(self, key: str) -> str: - return "Deck" if key in {KEY_DECK_CONCRETE_GRADE_BASIC, KEY_DECK} else "Girder" + def _get_effective_carriageway_width(self) -> float: + min_w, max_w = self._carriageway_limits() + width = max(min_w, min(self._float(KEY_CARRIAGEWAY_WIDTH, min_w), max_w)) + return width * 2.0 if self._is_median_included() else width - def _set_combo_text_without_signal(self, combo: QComboBox, text: str) -> None: + # ══════════════════════════════════════════════════════════════════════════ + # Material helpers + # ══════════════════════════════════════════════════════════════════════════ + + def _ensure_material_option(self, combo: QComboBox, name: str): + name = str(name or "").strip() + if not name or combo.findText(name) >= 0: + return + idx = combo.findText(MATERIAL_CUSTOM_OPTION) + combo.insertItem(idx if idx >= 0 else combo.count(), name) + + def _on_material_changed(self, key: str, combo: QComboBox, text: str): + if not text or text == MATERIAL_CUSTOM_OPTION: + member = self._material_member_type.get(key, "Girder") + previous = self._material_previous_selection.get(key, "") + dialog = MaterialPropertiesDialog(read_only=False, selected_material=previous, member=member) + if dialog.exec() == QDialog.Accepted: + fd = getattr(dialog, "form_data", {}) + mat = str(fd.get("material", "") or "").strip() + if mat: + self._material_custom_fields[mat] = dict(fd.get("fields") or {}) + self._ensure_material_option(combo, mat) + if member == "Girder": + sync_custom_materials_across_steel_members( + self._material_combo_map, self._ensure_material_option, mat) + self._set_combo_silently(combo, mat) + self._material_previous_selection[key] = mat + self.backend.set_input_value(key, mat) + self.input_value_changed.emit() + return + fallback = self._material_previous_selection.get(key, "") + if not fallback: + for i in range(combo.count()): + v = combo.itemText(i) + if v and v != MATERIAL_CUSTOM_OPTION: + fallback = v + break + if fallback: + self._set_combo_silently(combo, fallback) + else: + self._material_previous_selection[key] = text + + def _set_combo_silently(self, combo: QComboBox, text: str): idx = combo.findText(text) if idx < 0: return @@ -1399,203 +698,231 @@ def _set_combo_text_without_signal(self, combo: QComboBox, text: str) -> None: finally: combo.blockSignals(blocked) - def _ensure_material_option(self, combo: QComboBox, material_name: str) -> None: - name = str(material_name or "").strip() - if not name or combo.findText(name) >= 0: - return - custom_idx = combo.findText(self.MATERIAL_CUSTOM_OPTION) - insert_at = custom_idx if custom_idx >= 0 else combo.count() - combo.insertItem(insert_at, name) - - def _first_non_custom_option(self, combo: QComboBox) -> str: - for idx in range(combo.count()): - value = str(combo.itemText(idx) or "").strip() - if value and value != self.MATERIAL_CUSTOM_OPTION: - return value - return "" - - def _open_custom_material_dialog_for_key(self, key: str, combo: QComboBox) -> bool: - member = self._material_member_for_key(key) - previous_value = self._material_previous_selection.get(key, "") - - # Intentionally not passing parent to preserve original dialog appearance. - dialog = MaterialPropertiesDialog(read_only=False, selected_material=previous_value, member=member) - if dialog.exec() != QDialog.Accepted: - return False - - form_data = getattr(dialog, "form_data", {}) - material_name = str(form_data.get("material", "") or "").strip() - fields = form_data.get("fields", {}) - if not material_name: - return False - - self._material_custom_fields[material_name] = dict(fields) if isinstance(fields, dict) else {} - self._ensure_material_option(combo, material_name) - if member == "Girder": - sync_custom_materials_across_steel_members(self._material_combo_map, self._ensure_material_option, material_name) - self._set_combo_text_without_signal(combo, material_name) - self._material_previous_selection[key] = material_name - self._push_backend_value(key, material_name) - self.emit_value_changed() - return True - - def _on_material_selection_changed(self, key: str, combo: QComboBox, selected_text: str) -> None: - selected = str(selected_text or "").strip() - if not selected: - return - - if selected == self.MATERIAL_CUSTOM_OPTION: - accepted = self._open_custom_material_dialog_for_key(key, combo) - if accepted: - return - fallback = self._material_previous_selection.get(key) or self._first_non_custom_option(combo) - if fallback: - self._set_combo_text_without_signal(combo, fallback) - self._push_backend_value(key, fallback) - return - - self._material_previous_selection[key] = selected - - def _show_selected_material_info_for_key(self, key: str) -> None: + def _show_material_info(self, key: str): combo = self._material_combo_map.get(key) - if combo is None: + if not combo: return - - selected_material = str(combo.currentText() or "").strip() - if not selected_material or selected_material == self.MATERIAL_CUSTOM_OPTION: + selected = combo.currentText().strip() + if not selected or selected == MATERIAL_CUSTOM_OPTION: CustomMessageBox( title="Material Data Unavailable", - text="No material selected or custom material details not provided.", + text="No material selected.", dialogType=MessageBoxType.Warning ).exec() return + member = self._material_member_type.get(key, "Girder") + MaterialPropertiesDialog( + read_only=True, selected_material=selected, member=member, + custom_fields=self._material_custom_fields.get(selected), + ).exec() - member = self._material_member_for_key(key) - custom_fields = self._material_custom_fields.get(selected_material) - # Intentionally not passing parent to preserve original dialog appearance. - dialog = MaterialPropertiesDialog( - read_only=True, - selected_material=selected_material, - member=member, - custom_fields=custom_fields, - ) - dialog.exec() + # ══════════════════════════════════════════════════════════════════════════ + # Dialogs + # ══════════════════════════════════════════════════════════════════════════ + + def show_project_location_dialog(self): + dialog = ProjectLocationDialog() + if dialog.exec() == QDialog.Accepted: + self.backend.set_input_value(KEY_PROJECT_LOCATION, dialog.get_selected_location()) - def _get_basic_design_mode(self) -> str: - if self.design_mode_combo is not None and hasattr(self.design_mode_combo, "currentText"): - value = str(self.design_mode_combo.currentText() or "").strip() - if value: - return value - value = str(getattr(self, "_current_design_mode", "") or "").strip() - return value or "Optimized" + def show_additional_inputs(self): + self._open_additional_inputs() + + def _open_additional_inputs(self, target_tab=None): + footpath_value = self._text(KEY_FOOTPATH) or "None" + carriageway_width = self._get_effective_carriageway_width() - def _set_design_mode(self, mode_text: str, open_member_properties: bool = False) -> None: - mode = str(mode_text or "").strip() or "Optimized" - self._current_design_mode = mode + self.additional_inputs = AdditionalInputs(footpath_value, carriageway_width) - if self.additional_inputs is not None: + if self._additional_inputs_saved_data: try: - if hasattr(self.additional_inputs, "set_member_properties_design_mode"): - self.additional_inputs.set_member_properties_design_mode(mode) + self.additional_inputs.set_properties_data(self._additional_inputs_saved_data) + except Exception: + pass + try: + self.additional_inputs.set_member_properties_design_mode(self._current_design_mode) + except Exception: + pass + if target_tab: + try: + for i in range(self.additional_inputs.tabs.count()): + if self.additional_inputs.tabs.tabText(i).strip().lower() == target_tab.lower(): + self.additional_inputs.tabs.setCurrentIndex(i) + break except Exception: pass - if open_member_properties and mode.lower() in {"custom"}: - self._show_additional_inputs_dialog("Member Properties") - - def _on_design_mode_changed_from_user(self, mode_text: str) -> None: - self._set_design_mode(mode_text, open_member_properties=True) - - def _finalize_section_contexts(self): - for context in self.section_contexts.values(): - metadata = context.get("metadata", {}) - note_config = metadata.get("post_note") - if note_config: - self._add_section_note(context, note_config) - - for row_entry in metadata.get("post_rows", []): - row_config = self._prepare_button_row_config(row_entry) - if row_config: - self._add_button_row(context["layout"], row_config) - - def _add_section_note(self, context, note_config): - note_label = QLabel(note_config.get("text", "")) - note_label.setStyleSheet(self._section_label_style()) - note_label.setVisible(False) - context["layout"].addWidget(note_label) - attr_name = note_config.get("attr") - if attr_name: - setattr(self, attr_name, note_label) - - def on_footpath_changed(self, footpath_value): - """Update additional inputs when footpath changes""" - if self.additional_inputs and self.additional_inputs.isVisible(): - if hasattr(self, 'additional_inputs_widget'): - self.additional_inputs_widget.update_footpath_value(footpath_value) - # Notify CAD so the homepage cross-section updates immediately - self.emit_value_changed() - - def on_include_median_changed(self, _value): - self._update_carriageway_placeholder() - # Re-validate silently so previously entered values honor the new limits - self.validate_carriageway_width(show_message=False) - - def _carriageway_limits(self): - include_median = self._is_median_included() - min_width = CARRIAGEWAY_WIDTH_MIN_WITH_MEDIAN if include_median else CARRIAGEWAY_WIDTH_MIN - return min_width, CARRIAGEWAY_WIDTH_MAX_LIMIT + self.additional_inputs.finished.connect(self._on_additional_inputs_closed) - def _update_carriageway_placeholder(self): - if not hasattr(self, "carriageway_input") or self.carriageway_input is None: - return - min_width, max_width = self._carriageway_limits() - suffix = " per side" if self._is_median_included() else "" - self.carriageway_input.setPlaceholderText(f"{min_width:.2f} - {max_width:.1f} m{suffix}") + if self.additional_inputs.exec_() == AdditionalInputs.Accepted: + values = self.additional_inputs.get_all_values() + if values: + self.additional_input_values = values + self.input_value_changed.emit() - def validate_carriageway_width(self, show_message=True): - if not self.carriageway_input: - return - text = self.carriageway_input.text().strip() - if not text: - return + def _on_additional_inputs_closed(self): try: - value = float(text) - except ValueError: - self.carriageway_input.clear() - if show_message: - QMessageBox.warning(self, "Carriageway Width", "Please enter a numeric carriageway width.") - return + saved = self.additional_inputs.get_saved_data() + if isinstance(saved, dict) and saved: + self._additional_inputs_saved_data = saved + except Exception: + pass + self.additional_inputs = None + + # ══════════════════════════════════════════════════════════════════════════ + # Lock / unlock + # ══════════════════════════════════════════════════════════════════════════ - min_width, max_width = self._carriageway_limits() - include_median = self._is_median_included() - message = None + def toggle_lock(self): + self.is_locked = not self.is_locked + self.lock_btn.setChecked(self.is_locked) + self.scroll_area.setDisabled(self.is_locked) + self._sync_lock_icon() + + def _apply_lock_state(self): + self._sync_lock_icon() - if value < min_width: - if include_median: - message = "IRC 5 Clause 104.3.1 requires minimum carriageway width on both sides of the median to be at least 7.5 m." + def _sync_lock_icon(self): + if self.lock_btn: + self.lock_btn.setIcon(QIcon( + ":/vectors/lock_close.svg" if self.is_locked else ":/vectors/lock_open.svg" + )) + + def show_lock_tooltip(self): + if hasattr(self, "tooltip_timer") and self.tooltip_timer.isActive(): + self.tooltip_timer.stop() + pos = self.lock_btn.mapToGlobal(self.lock_btn.rect().topRight()) + QPoint(5, 0) + self.lock_btn_tooltip.adjustSize() + self.lock_btn_tooltip.move(pos) + self.lock_btn_tooltip.show() + self.lock_btn_tooltip.raise_() + if not hasattr(self, "tooltip_timer"): + self.tooltip_timer = QTimer() + self.tooltip_timer.setSingleShot(True) + self.tooltip_timer.timeout.connect(self.lock_btn_tooltip.hide) + self.tooltip_timer.start(3000) + + def eventFilter(self, obj, event): + if obj == self.scroll_area and event.type() == QEvent.MouseButtonPress: + if self.is_locked: + self.show_lock_tooltip() + return True + return super().eventFilter(obj, event) + + # ══════════════════════════════════════════════════════════════════════════ + # Panel toggle + # ══════════════════════════════════════════════════════════════════════════ + + def toggle_input_dock(self): + if hasattr(self.parent, "toggle_animate"): + collapsing = self.width() > 0 + self.parent.toggle_animate(show=not collapsing, dock="input") + self.toggle_btn.setText("❯" if collapsing else "❮") + self.toggle_btn.setToolTip("Show panel" if collapsing else "Hide panel") + + def resizeEvent(self, event): + super().resizeEvent(event) + if self.parent and hasattr(self.parent, "update_docking_icons"): + self.parent.update_docking_icons(input_is_active=self.width() > 0) + + # ══════════════════════════════════════════════════════════════════════════ + # Input serialization + # ══════════════════════════════════════════════════════════════════════════ + + def _collect_basic_inputs(self) -> list[dict]: + out = [] + for defn in self.backend.input_values(): + key, _, ftype = defn[0], defn[1], defn[2] + if ftype in (TYPE_MODULE, TYPE_TITLE, TYPE_BUTTON, TYPE_NOTE): + continue + if not isinstance(key, str): + continue + w = self._w(key) + if isinstance(w, QLineEdit): + val = w.text().strip() + elif isinstance(w, QComboBox): + val = w.currentText() else: - message = "IRC 5 Clause 104.3.1 requires minimum carriageway width of 4.25 m." - value = min_width - elif value > max_width: - message = "Software limits carriageway width upto 23.6 m" - value = max_width - - self.carriageway_input.setText(f"{value:.2f}") - if message and show_message: - QMessageBox.warning(self, "Carriageway Width", message) - - def _get_effective_carriageway_width(self): - min_width, max_width = self._carriageway_limits() - width = min_width - if self.carriageway_input and self.carriageway_input.text(): - try: - width = float(self.carriageway_input.text()) - except ValueError: - width = min_width - width = max(min_width, min(width, max_width)) - return width - - def _is_median_included(self): - if not self.include_median_combo: - return False - return self.include_median_combo.currentText().lower() == "yes" + continue + if val: + out.append({key: val}) + if hasattr(self.backend, "set_input_value"): + self.backend.set_input_value(key, val) + return out + + def _collect_additional_inputs(self) -> list[dict]: + snapshot = {} + try: + if self.additional_inputs and hasattr(self.additional_inputs, "section_properties_tab"): + tab = self.additional_inputs.section_properties_tab + if tab and hasattr(tab, "save_properties"): + snapshot = tab.save_properties() or {} + except Exception: + pass + if not snapshot: + snapshot = self._additional_inputs_saved_data or {} + ordered = ("girder_details", "stiffener_details", "cross_bracing", "end_diaphragm") + out = [{k: snapshot[k]} for k in ordered if k in snapshot] + out += [{k: v} for k, v in snapshot.items() if k not in ordered] + return out + + def _on_save_input_clicked(self): + self._basic_inputs_saved_list = self._collect_basic_inputs() + self._additional_inputs_saved_list = self._collect_additional_inputs() + final = self._basic_inputs_saved_list + self._additional_inputs_saved_list + if hasattr(self.backend, "set_final_design_inputs"): + self.backend.set_final_design_inputs(final) + CustomMessageBox( + title="Inputs Saved", + text="Basic + Additional inputs saved for this session.", + dialogType=MessageBoxType.Warning + ).exec() + + def _on_design_clicked(self): + final = self._collect_basic_inputs() + self._collect_additional_inputs() + if hasattr(self.backend, "set_final_design_inputs"): + self.backend.set_final_design_inputs(final) + CustomMessageBox( + title="Design Input Ready", + text="Final input payload prepared.", + dialogType=MessageBoxType.Warning + ).exec() + try: + print(f"[OsdagBridge] {len(final)} items") + print(json.dumps(final, indent=2, ensure_ascii=False, default=str)[:12000]) + except Exception: + pass + + # ══════════════════════════════════════════════════════════════════════════ + # CAD update helper + # ══════════════════════════════════════════════════════════════════════════ + + def get_all_input_values(self) -> dict: + values = { + KEY_SPAN: self._float(KEY_SPAN), + KEY_CARRIAGEWAY_WIDTH: self._float(KEY_CARRIAGEWAY_WIDTH), + KEY_SKEW_ANGLE: self._float(KEY_SKEW_ANGLE, 0.0), + KEY_FOOTPATH: self._text(KEY_FOOTPATH), + KEY_INCLUDE_MEDIAN: self._is_median_included(), + } + # Fill remaining defaults from DEFAULTS_DICT — single source of truth. + for key, val in DEFAULTS_DICT.items(): + values.setdefault(key, val) + # Overlay any values captured from the Additional Inputs dialog. + if self.additional_input_values: + values.update(self.additional_input_values) + return values + + def emit_value_changed(self): + self.input_value_changed.emit() + + # ══════════════════════════════════════════════════════════════════════════ + # Utilities + # ══════════════════════════════════════════════════════════════════════════ + + @staticmethod + def _as_list(value) -> list: + """Normalise a schema callback value to a list of strings.""" + if not value: + return [] + return value if isinstance(value, list) else [value] \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index c268ce782..d9b4326c4 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -14,6 +14,7 @@ from osdagbridge.desktop.ui.dialogs.additional_inputs import AdditionalInputs from osdagbridge.core.bridge_types.plate_girder.ui_fields import FrontendData +from osdagbridge.core.bridge_types.plate_girder.defaults import DEFAULTS_DICT from osdagbridge.core.utils.common import * class CustomWindow(QWidget): @@ -21,6 +22,10 @@ def __init__(self, title: str, backend: object, parent=None): super().__init__() self.parent = parent self.backend = backend() + + # Defaults + self.defaults = DEFAULTS_DICT + # one-time log splitter initialization flag self._log_splitter_initialized = False @@ -282,6 +287,24 @@ def mousePressEvent(self, event): # Initial CAD update to sync with starting UI values (e.g., footpath=None) self.update_cad_from_inputs() + #-------Common-Design-Save-Additional-Inputs-Functionality-START------- + + def common_design_func(self, trigger: str): + """ + Trigger belongs to one of ["Design", "Save", "Additional Inputs"] + """ + if trigger == "Design": + # Collect all the values from input Dock + pass + elif trigger == "Save": + # Collect all the values from input Dock and save to osi/csv + pass + elif trigger == "Additional Inputs": + # Show Additional Inputs + pass + + #-------Common-Design-Save-Additional-Inputs-Functionality-END--------- + def setup_cad_connections(self): """Connect input dock field changes to CAD widget for real-time updates""" # Connect to input dock's value changed signals @@ -327,7 +350,9 @@ def update_cad_from_inputs(self): return input_values = self.input_dock.get_all_input_values() - # print("[DEBUG] Collected input values from InputDock:", input_values) + + print("[DEBUG] Collected input values from InputDock:", input_values) + if not input_values: return From 1d237dd1c035aa6c3183414245eda72ba84548cb Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Mon, 9 Mar 2026 03:21:56 +0530 Subject: [PATCH 122/225] Added input_dict and collecting in input_dock --- .../desktop/ui/docks/input_dock.py | 67 +++++++++---------- src/osdagbridge/desktop/ui/template_page.py | 13 ++-- 2 files changed, 38 insertions(+), 42 deletions(-) diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index e0d437c8b..56110a841 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -222,7 +222,7 @@ def _build_bottom_buttons(self) -> QHBoxLayout: self.design_btn = DockCustomButton("Design", ":/vectors/design.svg") self.design_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - self.design_btn.clicked.connect(self._on_design_clicked) + self.design_btn.clicked.connect(lambda _, trigger="Design": self.parent.common_design_func(trigger)) btn_layout.addWidget(self.design_btn) return btn_layout @@ -335,12 +335,10 @@ def _make_combobox(self, key, values, meta) -> NoScrollComboBox: if idx >= 0: widget.setCurrentIndex(idx) - # Always wire backend sync + change signal. + # Signal the change in value so to update the input_dictionary widget.currentTextChanged.connect( - lambda text, k=key: self.backend.set_input_value(k, text) - if hasattr(self.backend, "set_input_value") else None + lambda text, k=key: self._on_field_changed(k, text) ) - widget.currentTextChanged.connect(self.input_value_changed) # Wire generic on_changed callbacks declared in schema. for cb_name in self._as_list(meta.get("on_changed")): @@ -390,12 +388,10 @@ def _make_textbox(self, key, validator, meta) -> QLineEdit: if default is not None: widget.setText(str(default)) - # Backend sync - widget.editingFinished.connect( - lambda k=key, w=widget: self.backend.set_input_value(k, w.text()) - if hasattr(self.backend, "set_input_value") else None - ) - widget.textChanged.connect(self.input_value_changed) + # Signal when value changed to update input_dictionary + widget.textChanged.connect( + lambda text, k=key: self._on_field_changed(k, text) + ) # Extra callbacks declared in schema for cb_name in self._as_list(meta.get("on_editing_finished")): @@ -673,8 +669,6 @@ def _on_material_changed(self, key: str, combo: QComboBox, text: str): self._material_combo_map, self._ensure_material_option, mat) self._set_combo_silently(combo, mat) self._material_previous_selection[key] = mat - self.backend.set_input_value(key, mat) - self.input_value_changed.emit() return fallback = self._material_previous_selection.get(key, "") if not fallback: @@ -723,7 +717,7 @@ def _show_material_info(self, key: str): def show_project_location_dialog(self): dialog = ProjectLocationDialog() if dialog.exec() == QDialog.Accepted: - self.backend.set_input_value(KEY_PROJECT_LOCATION, dialog.get_selected_location()) + self._on_field_changed(KEY_PROJECT_LOCATION, dialog.get_selected_location()) def show_additional_inputs(self): self._open_additional_inputs() @@ -826,8 +820,29 @@ def resizeEvent(self, event): self.parent.update_docking_icons(input_is_active=self.width() > 0) # ══════════════════════════════════════════════════════════════════════════ - # Input serialization + # Inputs Saving using input_dictionary # ══════════════════════════════════════════════════════════════════════════ + + # Update input_dictionary on value changed + def _on_field_changed(self, key: str, value: str): + """ + Called on every widget value change. + If value is empty/None, falls back to DEFAULTS_DICT. + Updates parent input_dict and notifies listeners. + """ + if hasattr(self.parent, "input_dict"): + # If Empty or None Value then set the default + # print(f"@Change: {value}, default: {DEFAULTS_DICT.get(key)}") + if value is None or value == "": + self.parent.input_dict[key] = DEFAULTS_DICT.get(key) + else: + self.parent.input_dict[key] = value + # print(f"@Final: {self.parent.input_dict[key]}") + + else: + print("[ERROR]: template_page.input_dictionary Not Found") + + self.input_value_changed.emit() def _collect_basic_inputs(self) -> list[dict]: out = [] @@ -846,8 +861,8 @@ def _collect_basic_inputs(self) -> list[dict]: continue if val: out.append({key: val}) - if hasattr(self.backend, "set_input_value"): - self.backend.set_input_value(key, val) + # if hasattr(self.backend, "set_input_value"): + # self.backend.set_input_value(key, val) return out def _collect_additional_inputs(self) -> list[dict]: @@ -878,21 +893,6 @@ def _on_save_input_clicked(self): dialogType=MessageBoxType.Warning ).exec() - def _on_design_clicked(self): - final = self._collect_basic_inputs() + self._collect_additional_inputs() - if hasattr(self.backend, "set_final_design_inputs"): - self.backend.set_final_design_inputs(final) - CustomMessageBox( - title="Design Input Ready", - text="Final input payload prepared.", - dialogType=MessageBoxType.Warning - ).exec() - try: - print(f"[OsdagBridge] {len(final)} items") - print(json.dumps(final, indent=2, ensure_ascii=False, default=str)[:12000]) - except Exception: - pass - # ══════════════════════════════════════════════════════════════════════════ # CAD update helper # ══════════════════════════════════════════════════════════════════════════ @@ -913,9 +913,6 @@ def get_all_input_values(self) -> dict: values.update(self.additional_input_values) return values - def emit_value_changed(self): - self.input_value_changed.emit() - # ══════════════════════════════════════════════════════════════════════════ # Utilities # ══════════════════════════════════════════════════════════════════════════ diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index d9b4326c4..e0cc06bc8 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -23,8 +23,9 @@ def __init__(self, title: str, backend: object, parent=None): self.parent = parent self.backend = backend() - # Defaults - self.defaults = DEFAULTS_DICT + # Source for all input values. + # Initialised from DEFAULTS_DICT; updated live as the user edits fields. + self.input_dict = dict(DEFAULTS_DICT) # one-time log splitter initialization flag self._log_splitter_initialized = False @@ -295,7 +296,7 @@ def common_design_func(self, trigger: str): """ if trigger == "Design": # Collect all the values from input Dock - pass + print(f"@@input_dictionary: {self.input_dict}") elif trigger == "Save": # Collect all the values from input Dock and save to osi/csv pass @@ -339,8 +340,6 @@ def update_cad_state(self, source: str, values: dict): # 2. Apply state to CAD UI ONLY if hasattr(self, 'cad_comp_widget'): self.cad_comp_widget.update_from_osdag_inputs(self.cad_state) - - def update_cad_from_inputs(self): """ @@ -351,13 +350,13 @@ def update_cad_from_inputs(self): input_values = self.input_dock.get_all_input_values() - print("[DEBUG] Collected input values from InputDock:", input_values) + # print("[DEBUG] Collected input values from InputDock:", input_values) if not input_values: return # IMPORTANT: send ONLY to interface - self.update_cad_state("input_dock", input_values) + # self.update_cad_state("input_dock", input_values) #---------------------------------Docking-Icons-Functionality-START---------------------------------------------- From 7a3bc0164c5ebba06c0a05e4ce17085f0bf07691 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Mon, 9 Mar 2026 03:54:07 +0530 Subject: [PATCH 123/225] Implemented on-spot-validation of text fields when changed --- .../bridge_types/plate_girder/ui_fields.py | 5 +- .../bridge_types/plate_girder/validator.py | 90 +++++++++---------- src/osdagbridge/core/utils/common.py | 2 +- .../desktop/ui/dialogs/tabs/loading_tab.py | 4 +- .../desktop/ui/docks/input_dock.py | 67 +++++++------- 5 files changed, 76 insertions(+), 92 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 0b4cd2fdd..734f04b2e 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -141,11 +141,10 @@ def input_values(self): (KEY_CARRIAGEWAY_WIDTH, KEY_DISP_CARRIAGEWAY_WIDTH, TYPE_TEXTBOX, None, True, "Double Validator", { - "placeholder_dynamic": "_carriageway_placeholder_text", - "on_editing_finished": "validate_carriageway_width", + "placeholder_dynamic": "_carriageway_placeholder_text" }), - (KEY_INCLUDE_MEDIAN, "Include Median", TYPE_COMBOBOX, VALUES_YES_NO, + (KEY_INCLUDE_MEDIAN, "Include Median", TYPE_COMBOBOX, VALUES_NO_YES, True, "No Validator", { "default": DEFAULTS_DICT.get(KEY_INCLUDE_MEDIAN), diff --git a/src/osdagbridge/core/bridge_types/plate_girder/validator.py b/src/osdagbridge/core/bridge_types/plate_girder/validator.py index 0386fafa3..b3756bbab 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/validator.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/validator.py @@ -7,7 +7,7 @@ from osdagbridge.core.utils.codes.keyfile import * from osdagbridge.core.utils.codes.irc5_2015 import IRC5_2015 - +from osdagbridge.core.utils.common import * class BridgeInputValidator: @@ -15,66 +15,58 @@ class BridgeInputValidator: # BASIC INPUT VALIDATION (DDCL 2.1.2) # ========================================================== - def validate_basic_inputs(self, inputs: dict) -> dict: - - errors = {} - - span = self._to_float(inputs.get("span")) - carriageway_width = self._to_float(inputs.get("carriageway_width")) - median = inputs.get("median") - footpath = inputs.get("footpath") - skew_angle = self._to_float(inputs.get("skew_angle")) + def validate_basic_inputs(self, key: str, inputs: dict) -> dict: + """ + Validate a single field by key against inputs dict. + Returns (corrected_value, message) on error, None if valid. + """ - # ---------------------------------- + # ---------------------------------- # Span (Software Scope Limit) # ---------------------------------- - if span is None or not (20 <= span <= 45): - errors["span"] = "Span must be between 20 m and 45 m (software limitation)." - - + + if key == KEY_SPAN: + span = self._to_float(inputs.get(KEY_SPAN)) + if span is None: + return SPAN_MIN, "Span must be a numeric value." + if span < SPAN_MIN: + return SPAN_MIN, f"Span must be between {SPAN_MIN} m and {SPAN_MAX} m (software limitation)." + if span > SPAN_MAX: + return SPAN_MAX, f"Span must be between {SPAN_MIN} m and {SPAN_MAX} m (software limitation)." + # ---------------------------------- # Carriageway Width (IRC 5 Cl.104.3.1) # ---------------------------------- - if carriageway_width is None: - errors["carriageway_width"] = "Carriageway width must be specified." - - else: - # Determine minimum lane assumption - if median == "No": - assumed_lanes = 1 - else: - assumed_lanes = 2 - - required_width = IRC5_2015.cl_104_3_1_carriageway_width( - carriageway_width, - assumed_lanes - ) - + elif key == KEY_CARRIAGEWAY_WIDTH: + carriageway_width = self._to_float(inputs.get(KEY_CARRIAGEWAY_WIDTH)) + median = inputs.get(KEY_INCLUDE_MEDIAN) + + if carriageway_width is None: + min_w = CARRIAGEWAY_WIDTH_MIN_WITH_MEDIAN if median else CARRIAGEWAY_WIDTH_MIN + return min_w, "Carriageway width must be specified." + + assumed_lanes = 2 if median else 1 + required_width = IRC5_2015.cl_104_3_1_carriageway_width(carriageway_width, assumed_lanes) + if carriageway_width < required_width: - errors["carriageway_width"] = ( - f"Minimum carriageway width required is " - f"{required_width:.2f} m as per IRC 5:2015 Clause 104.3.1." - ) - - # Software upper limit - if carriageway_width > 23.6: - errors["carriageway_width"] = ( - "Carriageway width exceeds 23.6 m (software limitation)." - ) + return required_width, f"Minimum carriageway width required is {required_width:.2f} m as per IRC 5:2015 Clause 104.3.1." + if carriageway_width > CARRIAGEWAY_WIDTH_MAX_LIMIT: + return CARRIAGEWAY_WIDTH_MAX_LIMIT, f"Carriageway width exceeds {CARRIAGEWAY_WIDTH_MAX_LIMIT} m (software limitation)." # ---------------------------- # Skew Angle (IRC 24 via keyfile) # ---------------------------- - if skew_angle is not None: - if not (SKEW_ANGLE_MIN <= skew_angle <= SKEW_ANGLE_MAX): - errors["skew_angle"] = ( - f"Skew angle must be between " - f"{SKEW_ANGLE_MIN}° and {SKEW_ANGLE_MAX}°." - ) + elif key == KEY_SKEW_ANGLE: + skew_angle = self._to_float(inputs.get(KEY_SKEW_ANGLE)) + if skew_angle is None: + return SKEW_ANGLE_MIN, "Skew angle must be a numeric value." + if skew_angle < SKEW_ANGLE_MIN: + return SKEW_ANGLE_MIN, f"Skew angle must be between {SKEW_ANGLE_MIN}° and {SKEW_ANGLE_MAX}°." + if skew_angle > SKEW_ANGLE_MAX: + return SKEW_ANGLE_MAX, f"Skew angle must be between {SKEW_ANGLE_MIN}° and {SKEW_ANGLE_MAX}°." - return self._format_response(errors) - + return None # ========================================================== # ADDITIONAL INPUT VALIDATION (DDCL 2.1.3) @@ -107,7 +99,7 @@ def validate_additional_inputs(self, inputs: dict) -> dict: # Safety Kerb Check (IRC 5 Cl.101.41) # ---------------------------- kerb_width = self._to_float(inputs.get("kerb_width")) - footpath = inputs.get("footpath") + footpath = inputs.get(KEY_FOOTPATH) if kerb_width is not None: diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index ca8a40995..4487cb9d9 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -202,7 +202,7 @@ KEY_BEARING_LENGTH = "Bearing Length" # Value Lists for Additional Inputs -VALUES_YES_NO = ["No", "Yes"] +VALUES_NO_YES = ["No", "Yes"] VALUES_DECK_CONCRETE_GRADE = [ "M 15", "M 20", "M 25", "M 30", "M 35", "M 40", "M 45", "M 50", "M 55", "M 60", "M 65", "M 70", "M 75", "M 80", diff --git a/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py b/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py index 301f0bd1a..28f799258 100644 --- a/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py +++ b/src/osdagbridge/desktop/ui/dialogs/tabs/loading_tab.py @@ -15,7 +15,7 @@ from PySide6.QtGui import QDoubleValidator, QIntValidator, QValidator import copy -from osdagbridge.core.utils.common import VALUES_YES_NO +from osdagbridge.core.utils.common import VALUES_NO_YES from osdagbridge.desktop.ui.dialogs.tabs.common import apply_field_style from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.loading.permanent_load_tab import PermanentLoadTab from osdagbridge.desktop.ui.dialogs.tabs.sub_tabs.loading.live_load_tab import LiveLoadTab @@ -104,7 +104,7 @@ def _create_card(self): def _create_yes_no_combo(self): combo = QComboBox() - combo.addItems(VALUES_YES_NO) + combo.addItems(VALUES_NO_YES) combo.setCurrentText("Yes") apply_field_style(combo) return combo diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 56110a841..8a0b8c822 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -30,6 +30,7 @@ ) from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.core.bridge_types.plate_girder.defaults import DEFAULTS_DICT +from osdagbridge.core.bridge_types.plate_girder.validator import BridgeInputValidator MATERIAL_CUSTOM_OPTION = "Custom" @@ -62,6 +63,9 @@ def __init__(self, backend, parent): self.parent = parent self.backend = backend + # For on spot validation of input fields when changed + self.validator = BridgeInputValidator() + self.is_locked = False self._current_design_mode = "Optimized" self.additional_inputs = None @@ -393,6 +397,12 @@ def _make_textbox(self, key, validator, meta) -> QLineEdit: lambda text, k=key: self._on_field_changed(k, text) ) + # Validation on focus-out — mandatory for all textbox fields + # This will validate the input, either it say nothing or popup warning and set specific valid value + widget.editingFinished.connect( + lambda k=key, w=widget: self._validate_field(k, w) + ) + # Extra callbacks declared in schema for cb_name in self._as_list(meta.get("on_editing_finished")): cb = getattr(self, cb_name, None) @@ -589,10 +599,6 @@ def _on_design_mode_changed(self, mode_text: str = ""): if self._current_design_mode.lower() == "custom": self._open_additional_inputs(target_tab="Member Properties") - def _validate_carriageway_width_silent(self, *_): - """Silent validation (no message box) — called from schema on_changed.""" - self.validate_carriageway_width(show_message=False) - # ══════════════════════════════════════════════════════════════════════════ # Carriageway validation # ══════════════════════════════════════════════════════════════════════════ @@ -604,39 +610,6 @@ def _carriageway_limits(self): min_w = CARRIAGEWAY_WIDTH_MIN_WITH_MEDIAN if self._is_median_included() else CARRIAGEWAY_WIDTH_MIN return min_w, CARRIAGEWAY_WIDTH_MAX_LIMIT - def validate_carriageway_width(self, show_message=True): - w = self._w(KEY_CARRIAGEWAY_WIDTH) - if not isinstance(w, QLineEdit) or not w.text().strip(): - return - try: - value = float(w.text()) - except ValueError: - w.clear() - if show_message: - CustomMessageBox( - title="Carriageway Width", - text="Please enter a numeric value.", - dialogType=MessageBoxType.Warning - ).exec() - return - min_w, max_w = self._carriageway_limits() - msg = None - if value < min_w: - msg = ("IRC 5 Cl.104.3.1: min carriageway width with median is 7.5 m per side." - if self._is_median_included() else - "IRC 5 Cl.104.3.1: min carriageway width is 4.25 m.") - value = min_w - elif value > max_w: - msg = "Software limits carriageway width to 23.6 m." - value = max_w - w.setText(f"{value:.2f}") - if msg and show_message: - CustomMessageBox( - title="Carriageway Width", - text=msg, - dialogType=MessageBoxType.Warning - ).exec() - def _get_effective_carriageway_width(self) -> float: min_w, max_w = self._carriageway_limits() width = max(min_w, min(self._float(KEY_CARRIAGEWAY_WIDTH, min_w), max_w)) @@ -819,6 +792,26 @@ def resizeEvent(self, event): if self.parent and hasattr(self.parent, "update_docking_icons"): self.parent.update_docking_icons(input_is_active=self.width() > 0) + # Validate the value of text box and show warning and set valid value + def _validate_field(self, key: str, widget: QLineEdit): + """ + Called on editingFinished for validated textbox fields. + Reads widget value, validates against current input_dict, + corrects the widget and input_dict if needed, shows message. + """ + result = self.validator.validate_basic_inputs(key, self.parent.input_dict) + if result is None: + return + corrected, message = result + widget.setText(str(corrected)) + # Update value in input_dict + self._on_field_changed(key, str(corrected)) + CustomMessageBox( + title="Input Error", + text=message, + dialogType=MessageBoxType.Warning + ).exec() + # ══════════════════════════════════════════════════════════════════════════ # Inputs Saving using input_dictionary # ══════════════════════════════════════════════════════════════════════════ From ba51ffd8688a67ad10b499bad61343251df7df3b Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Mon, 9 Mar 2026 04:01:26 +0530 Subject: [PATCH 124/225] Removing unusual generalization functions --- .../core/bridge_types/plate_girder/ui_fields.py | 11 ----------- src/osdagbridge/desktop/ui/docks/input_dock.py | 14 +------------- 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 734f04b2e..2c2d7f8a8 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -69,13 +69,6 @@ def __init__(self): # ── State getters / setters ─────────────────────────────────────────────── - def set_input_value(self, key: str, value): - if key: - self._input_state[key] = value - - def get_input_value(self, key: str, default=None): - return self._input_state.get(key, default) if key else default - def set_output_value(self, key: str, value): if key: self._output_state[key] = value @@ -83,10 +76,6 @@ def set_output_value(self, key: str, value): def get_output_value(self, key: str, default=None): return self._output_state.get(key, default) if key else default - def set_final_design_inputs(self, final_inputs: list[dict]) -> None: - if isinstance(final_inputs, list): - self._input_state["final_design_inputs"] = final_inputs - # ── UI field definitions ────────────────────────────────────────────────── def input_values(self): diff --git a/src/osdagbridge/desktop/ui/docks/input_dock.py b/src/osdagbridge/desktop/ui/docks/input_dock.py index 8a0b8c822..a7bf72a4d 100644 --- a/src/osdagbridge/desktop/ui/docks/input_dock.py +++ b/src/osdagbridge/desktop/ui/docks/input_dock.py @@ -221,7 +221,7 @@ def _build_bottom_buttons(self) -> QHBoxLayout: self.save_input_btn = DockCustomButton("Save Input", ":/vectors/save.svg") self.save_input_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - self.save_input_btn.clicked.connect(self._on_save_input_clicked) + # self.save_input_btn.clicked.connect(self._on_save_input_clicked) btn_layout.addWidget(self.save_input_btn) self.design_btn = DockCustomButton("Design", ":/vectors/design.svg") @@ -874,18 +874,6 @@ def _collect_additional_inputs(self) -> list[dict]: out += [{k: v} for k, v in snapshot.items() if k not in ordered] return out - def _on_save_input_clicked(self): - self._basic_inputs_saved_list = self._collect_basic_inputs() - self._additional_inputs_saved_list = self._collect_additional_inputs() - final = self._basic_inputs_saved_list + self._additional_inputs_saved_list - if hasattr(self.backend, "set_final_design_inputs"): - self.backend.set_final_design_inputs(final) - CustomMessageBox( - title="Inputs Saved", - text="Basic + Additional inputs saved for this session.", - dialogType=MessageBoxType.Warning - ).exec() - # ══════════════════════════════════════════════════════════════════════════ # CAD update helper # ══════════════════════════════════════════════════════════════════════════ From 87e10bb69c9be3e3ebb02b89b0cacc46230f244f Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Sun, 15 Mar 2026 02:34:42 +0530 Subject: [PATCH 125/225] Simplified output_dock generalization --- .../bridge_types/plate_girder/ui_fields.py | 70 +- src/osdagbridge/core/utils/common.py | 18 + .../desktop/ui/docks/output_dock.py | 929 ++++++++---------- 3 files changed, 481 insertions(+), 536 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 2c2d7f8a8..6331b19ff 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -219,42 +219,50 @@ def input_values(self): def output_values(self, flag=None): return [ - ( - "section_output_analysis", "Analysis Results", + # ── Analysis Results ────────────────────────────────────────────── + (KEY_SECTION_OUTPUT_ANALYSIS, "Analysis Results", TYPE_TITLE, None, True, "No Validator", - { - "kind": "analysis", - "fields": [ - ("analysis_member", "Member:", "combobox", ["All"], True, "No Validator", {}), - ("analysis_load_combination", "Load Combination:", "combobox", ["Envelope"], True, "No Validator", {}), - ("analysis_forces", "Forces", "checkbox_grid", [["Fx","Mx","Dx"], ["Fy","My","Dy"], ["Fz","Mz","Dz"]], True, "No Validator", {}), - ("analysis_display_options", "Display Options:", "checkbox_row", ["Max", "Min"], True, "No Validator", {}), - ("analysis_utilization", "Controlling Utilization Ratio", "checkbox", None, True, "No Validator", {}), - ], - }, - ), - ( - "section_output_superstructure", "Superstructure", + {"kind": "analysis"}), + + (KEY_ANALYSIS_MEMBER, "Member:", + TYPE_COMBOBOX, ["All"], True, "No Validator", {}), + + (KEY_ANALYSIS_LOAD_COMBINATION, "Load Combination:", + TYPE_COMBOBOX, ["Envelope"], True, "No Validator", {}), + + (KEY_ANALYSIS_FORCES, None, # None = no label + TYPE_CHECKBOX_GRID, + [["Vx","Tx","Dx"], ["Vy","Ty","Dy"], ["Vz","Tz","Dz"]], + True, "No Validator", {"exclusive": True}), + + (KEY_ANALYSIS_DISPLAY_OPTIONS, None, # label goes on the groupbox title instead + TYPE_CHECKBOX_ROW, ["Max", "Min"], + True, "No Validator", + {"exclusive": False, "group_title": "Display Options"}), + + (KEY_ANALYSIS_UTILIZATION, "Controlling Utilization Ratio", + TYPE_CHECKBOX, None, True, "No Validator", + {"group_end": True}), # closes the Display Options box + + # ── Superstructure ──────────────────────────────────────────────── + (KEY_SECTION_OUTPUT_SUPERSTRUCTURE, "Superstructure", TYPE_TITLE, None, True, "No Validator", - { - "kind": "design", - "rows": [ - {"label": "Steel Design", "buttons": [{"text": "Here", "action": "open_steel_design"}]}, - {"label": "Deck Design", "buttons": [{"text": "Here", "action": "open_deck_design"}]}, - ], - }, - ), - ( - "section_output_substructure", "Substructure", + {"kind": "design"}), + + (KEY_BTN_STEEL_DESIGN, "Steel Design", + TYPE_BUTTON, None, True, "No Validator", + {"action": "open_steel_design", "button_label": "Here"}), + + (KEY_BTN_DECK_DESIGN, "Deck Design", + TYPE_BUTTON, None, True, "No Validator", + {"action": "open_deck_design", "button_label": "Here"}), + + # ── Substructure ────────────────────────────────────────────────── + (KEY_SECTION_OUTPUT_SUBSTRUCTURE, "Substructure", TYPE_TITLE, None, True, "No Validator", - {"kind": "design", "rows": []}, - ), + {"kind": "design"}), ] - # ── Domain hooks ────────────────────────────────────────────────────────── def set_osdaglogger(self, key): pass - - def func_for_validation(self, design_inputs): - return None \ No newline at end of file diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index 4487cb9d9..a0217d9a3 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -23,6 +23,9 @@ TYPE_IMAGE = "image" TYPE_BUTTON = "button" TYPE_NOTE = "note" +TYPE_CHECKBOX = "checkbox" +TYPE_CHECKBOX_ROW = "checkbox_row" +TYPE_CHECKBOX_GRID = "checkbox_grid" # Keys for inputs (consistent dot notation for object names) KEY_MODULE = "Module" @@ -41,6 +44,21 @@ KEY_DECK = "Deck" KEY_DECK_CONCRETE_GRADE_BASIC = "material.deck_concrete_grade" +# ── Output section keys ─────────────────────────────────────────────────────── +KEY_SECTION_OUTPUT_ANALYSIS = "section.output.analysis" +KEY_SECTION_OUTPUT_SUPERSTRUCTURE = "section.output.superstructure" +KEY_SECTION_OUTPUT_SUBSTRUCTURE = "section.output.substructure" + +# ── Output field keys ───────────────────────────────────────────────────────── +KEY_ANALYSIS_MEMBER = "analysis.member" +KEY_ANALYSIS_LOAD_COMBINATION = "analysis.load_combination" +KEY_ANALYSIS_FORCES = "analysis.forces" +KEY_ANALYSIS_DISPLAY_OPTIONS = "analysis.display_options" +KEY_ANALYSIS_UTILIZATION = "analysis.utilization" + +KEY_BTN_STEEL_DESIGN = "btn.steel_design" +KEY_BTN_DECK_DESIGN = "btn.deck_design" + # Module + section identifiers (also used as UI keys) KEY_MODULE_PLATE_GIRDER = "module.plate_girder" KEY_SECTION_STRUCTURE = "section.structure" diff --git a/src/osdagbridge/desktop/ui/docks/output_dock.py b/src/osdagbridge/desktop/ui/docks/output_dock.py index d64307e6b..d9ff4a421 100644 --- a/src/osdagbridge/desktop/ui/docks/output_dock.py +++ b/src/osdagbridge/desktop/ui/docks/output_dock.py @@ -1,137 +1,112 @@ +""" +Output dock widget for Highway Bridge Design GUI. + +Design principles (mirrors InputDock): + - No named widget references — all widgets found via _w(key) / findChild. + - Zero key-specific logic in OutputDock — all per-section behaviour is + driven by the ui_config_dict declared in frontend_data.output_values(). + - One flat loop: TYPE_TITLE opens a group (analysis or design); + fields below it belong to that group until the next TYPE_TITLE. + - Field types supported: + TYPE_COMBOBOX — labelled dropdown + TYPE_CHECKBOX — single checkbox + TYPE_CHECKBOX_ROW — horizontal row of checkboxes (exclusive: bool) + TYPE_CHECKBOX_GRID — N-column grid of checkboxes (exclusive: bool) + TYPE_BUTTON — label + action button (design sections) + +ui_config_dict extra keys for analysis fields: + group_title : str — opens a nested bordered QGroupBox with this title; + all following fields land inside it until group_end. + group_end : bool — closes the current nested group after this field. + exclusive : bool — for checkbox types; only one can be checked at a time. +""" + from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QLabel, QSizePolicy, - QPushButton, QGroupBox, QCheckBox, QScrollArea, QFrame, QComboBox, QLineEdit + QPushButton, QGroupBox, QCheckBox, QScrollArea, QFrame, QComboBox, ) from PySide6.QtCore import Qt, QSize from PySide6.QtGui import QIcon +from osdagbridge.core.utils.common import ( + TYPE_TITLE, TYPE_BUTTON, TYPE_COMBOBOX, + TYPE_CHECKBOX, TYPE_CHECKBOX_ROW, TYPE_CHECKBOX_GRID, +) from osdagbridge.desktop.ui.utils.custom_buttons import DockCustomButton -from osdagbridge.core.utils.common import TYPE_TITLE +from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style + + +# ── Styles ──────────────────────────────────────────────────────────────────── + +GROUPBOX_STYLE = ( + "QGroupBox { border:1px solid #90AF13; border-radius:4px; background-color:white;" + " padding:8px; margin-top:12px; font-size:10px; font-weight:bold; color:#333; }" + "QGroupBox::title { subcontrol-origin:margin; subcontrol-position:top left;" + " left:8px; padding:0 4px; margin-top:4px; background-color:white; color:#333; }" +) +SUBGROUP_STYLE = ( + "QGroupBox { border:1px solid #90AF13; border-radius:4px; background-color:white;" + " padding:6px; margin-top:10px; font-size:10px; font-weight:bold; color:#333; }" + "QGroupBox::title { subcontrol-origin:margin; subcontrol-position:top left;" + " left:8px; padding:0 4px; margin-top:4px; background-color:white; color:#333; }" +) +ACTION_BTN_STYLE = ( + "QPushButton { background-color:#90AF13; color:white; font-weight:bold; border:none;" + " border-radius:4px; padding:8px 20px; font-size:11px; min-width:80px; }" + "QPushButton:hover { background-color:#7a9a12; }" + "QPushButton:disabled { background:#D0D0D0; color:#666; }" +) +LABEL_STYLE = "QLabel { color:#000; font-size:12px; background:transparent; }" +SMALL_LABEL_STYLE = "QLabel { color:#333; font-size:10px; font-weight:normal; background:transparent; }" + class NoScrollComboBox(QComboBox): def wheelEvent(self, event): - event.ignore() # Prevent changing selection on scroll - -def apply_field_style(widget): - widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - widget.setMinimumHeight(28) - if isinstance(widget, QComboBox): - style = """ - QComboBox{ - padding: 1px 7px; - border: 1px solid black; - border-radius: 5px; - background-color: white; - color: black; - } - QComboBox::drop-down{ - subcontrol-origin: padding; - subcontrol-position: top right; - border-left: 0px; - } - QComboBox::down-arrow{ - image: url(:/vectors/arrow_down_light.svg); - width: 20px; - height: 20px; - margin-right: 8px; - } - QComboBox::down-arrow:on { - image: url(:/vectors/arrow_up_light.svg); - width: 20px; - height: 20px; - margin-right: 8px; - } - QComboBox QAbstractItemView{ - background-color: white; - border: 1px solid black; - outline: none; - } - QComboBox QAbstractItemView::item{ - color: black; - background-color: white; - border: none; - border: 1px solid white; - border-radius: 0; - padding: 2px; - } - QComboBox QAbstractItemView::item:hover{ - border: 1px solid #90AF13; - background-color: #90AF13; - color: black; - } - QComboBox QAbstractItemView::item:selected{ - background-color: #90AF13; - color: black; - border: 1px solid #90AF13; - } - QComboBox QAbstractItemView::item:selected:hover{ - background-color: #90AF13; - color: black; - border: 1px solid #94b816; - } - """ - widget.setStyleSheet(style) - elif isinstance(widget, QLineEdit): - widget.setStyleSheet(""" - QLineEdit { - padding: 1px 7px; - border: 1px solid #070707; - border-radius: 6px; - background-color: white; - color: #000000; - font-weight: normal; - } - """) + event.ignore() + + +# ── OutputDock ──────────────────────────────────────────────────────────────── class OutputDock(QWidget): - """Output dock with collapsible design controls and scrollable layout.""" + """ + Output dock widget. Built entirely from output_values() schema. + Civil engineer edits output_values() only — never this file. + """ def __init__(self, backend=None, parent=None): super().__init__() - self.parent = parent + self.parent = parent self.backend = backend self.setStyleSheet("background: transparent;") - configs = self._load_configs() - self.analysis_config = configs.get("analysis") - # Configurable button rows per section; populated from backend ui_fields - self.section_configs = configs.get("design", []) - self.init_ui() - def toggle_output_dock(self): - parent = self.parent - if hasattr(parent, 'toggle_animate'): - is_collapsing = self.width() > 0 - parent.toggle_animate(show=not is_collapsing, dock='output') - - self.toggle_btn.setText("❮" if is_collapsing else "❯") - self.toggle_btn.setToolTip("Show panel" if is_collapsing else "Hide panel") - - def resizeEvent(self, event): - super().resizeEvent(event) - # Checking hasattr is only meant to prevent errors - if self.parent: - if self.width() == 0: - if hasattr(self.parent, 'update_docking_icons'): - self.parent.update_docking_icons(output_is_active=False) - elif self.width() > 0: - if hasattr(self.parent, 'update_docking_icons'): - self.parent.update_docking_icons(output_is_active=True) - - - def init_ui(self): - # Main horizontal layout to hold toggle strip and content self.main_layout = QHBoxLayout(self) self.main_layout.setContentsMargins(0, 0, 0, 0) self.main_layout.setSpacing(0) - # Toggle strip on the left + self._build_toggle_strip() + + content_container = QWidget() + content_container.setStyleSheet("background-color: white;") + content_layout = QVBoxLayout(content_container) + content_layout.setContentsMargins(8, 8, 8, 8) + content_layout.setSpacing(10) + + content_layout.addLayout(self._build_top_bar()) + content_layout.addWidget(self._build_scroll_area()) + content_layout.addLayout(self._build_bottom_buttons()) + + self.main_layout.addWidget(content_container) + + # ── Toggle strip ───────────────────────────────────────────────────────── + + def _build_toggle_strip(self): self.toggle_strip = QWidget() self.toggle_strip.setStyleSheet("background-color: #90AF13;") self.toggle_strip.setFixedWidth(6) - toggle_layout = QVBoxLayout(self.toggle_strip) - toggle_layout.setContentsMargins(0, 0, 0, 0) - toggle_layout.setSpacing(0) - toggle_layout.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) + sl = QVBoxLayout(self.toggle_strip) + sl.setContentsMargins(0, 0, 0, 0) + sl.setSpacing(0) + sl.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) self.toggle_btn = QPushButton("❯") self.toggle_btn.setCursor(Qt.CursorShape.PointingHandCursor) @@ -139,452 +114,396 @@ def init_ui(self): self.toggle_btn.setToolTip("Hide panel") self.toggle_btn.clicked.connect(self.toggle_output_dock) self.toggle_btn.setStyleSheet(""" - QPushButton { - background-color: #7a9a12; - color: white; - font-size: 12px; - font-weight: bold; - padding: 0px; - border: none; - } - QPushButton:hover { - background-color: #6a8a10; - } + QPushButton { background-color:#6c8408; color:white; font-size:12px; + font-weight:bold; padding:0px; border:none; } + QPushButton:hover { background-color:#5e7407; } """) - toggle_layout.addStretch() - toggle_layout.addWidget(self.toggle_btn) - toggle_layout.addStretch() + sl.addStretch() + sl.addWidget(self.toggle_btn) + sl.addStretch() self.main_layout.addWidget(self.toggle_strip) - # Content container - content_container = QWidget() - content_container.setStyleSheet("background-color: white;") - content_layout = QVBoxLayout(content_container) - content_layout.setContentsMargins(8, 8, 8, 8) - content_layout.setSpacing(10) + # ── Top bar ─────────────────────────────────────────────────────────────── - # Top Bar with buttons + def _build_top_bar(self) -> QHBoxLayout: top_bar = QHBoxLayout() top_bar.setSpacing(8) top_bar.setContentsMargins(0, 0, 0, 15) - - input_dock_btn = QPushButton("Output Dock") - input_dock_btn.setStyleSheet(""" - QPushButton { - background-color: #90AF13; - color: white; - font-weight: bold; - font-size: 13px; - border: none; - border-radius: 4px; - padding: 7px 20px; - min-width: 80px; - } + + title_btn = QPushButton("Output Dock") + title_btn.setStyleSheet(""" + QPushButton { background-color:#90AF13; color:white; font-weight:bold; + font-size:13px; border:none; border-radius:4px; padding:7px 20px; } """) - input_dock_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - top_bar.addWidget(input_dock_btn) + title_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + top_bar.addWidget(title_btn) top_bar.addStretch() - content_layout.addLayout(top_bar) - - scroll = QScrollArea() - scroll.setWidgetResizable(True) - scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - scroll.setStyleSheet("QScrollArea { border: none; background: white; }") - - scroll_content = QWidget() - scroll_layout = QVBoxLayout(scroll_content) - scroll_layout.setContentsMargins(0, 0, 0, 0) - scroll_layout.setSpacing(10) - - analysis_group = self._build_analysis_group() - if analysis_group: - scroll_layout.addWidget(analysis_group) - - design_group = QGroupBox("Design") - design_group.setStyleSheet( - """ - QGroupBox { - font-weight: bold; - font-size: 11px; - color: #333; - border: 1px solid #90AF13; - border-radius: 4px; - margin-top: 8px; - padding-top: 12px; - background-color: white; - } - QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - left: 8px; - padding: 0 4px; - background-color: white; - } - """ - ) - design_layout = QVBoxLayout(design_group) - design_layout.setContentsMargins(10, 8, 10, 10) - design_layout.setSpacing(8) + return top_bar + + # ── Scroll area ─────────────────────────────────────────────────────────── + + def _build_scroll_area(self) -> QScrollArea: + self.scroll_area = QScrollArea() + self.scroll_area.setWidgetResizable(True) + self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) + self.scroll_area.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self.scroll_area.setStyleSheet(""" + QScrollArea { background:transparent; padding:0px 5px; + border-top:1px solid #909090; border-bottom:1px solid #909090; } + QScrollArea QScrollBar:vertical { border:none; background:#f0f0f0; width:8px; } + QScrollArea QScrollBar::handle:vertical { background:#c0c0c0; border-radius:4px; min-height:20px; } + QScrollArea QScrollBar::handle:vertical:hover { background:#a0a0a0; } + QScrollArea QScrollBar::add-line:vertical, + QScrollArea QScrollBar::sub-line:vertical { border:none; background:none; } + """) + + self.output_widget = QWidget() + root_layout = QVBoxLayout(self.output_widget) + root_layout.setContentsMargins(0, 0, 0, 0) + root_layout.setSpacing(12) - # Dynamic design sections - for section_cfg in self.section_configs: - section_group = self._create_toggle_group(section_cfg) - design_layout.addWidget(section_group) + self._build_field_loop(root_layout) - scroll_layout.addWidget(design_group) - scroll_layout.addStretch() + root_layout.addStretch() + self.scroll_area.setWidget(self.output_widget) + return self.scroll_area - scroll.setWidget(scroll_content) - content_layout.addWidget(scroll) + # ── Bottom buttons ──────────────────────────────────────────────────────── - h_layout = QHBoxLayout() - h_layout.setSpacing(5) - h_layout.setContentsMargins(0, 0, 0, 0) + def _build_bottom_buttons(self) -> QHBoxLayout: + btn_layout = QHBoxLayout() + btn_layout.setContentsMargins(0, 15, 0, 0) + btn_layout.setSpacing(10) results_btn = DockCustomButton("Generate Results Table", ":/vectors/design_report.svg") results_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - h_layout.addWidget(results_btn) + btn_layout.addWidget(results_btn) report_btn = DockCustomButton("Generate Report", ":/vectors/design_report.svg") report_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + btn_layout.addWidget(report_btn) - h_layout.addWidget(report_btn) - content_layout.addLayout(h_layout) - - # Add content container to main layout - self.main_layout.addWidget(content_container) - - def open_steel_design(self): - """Open the Steel Design dialog.""" - from osdagbridge.desktop.ui.dialogs.steel_design import SteelDesign - dlg = SteelDesign(parent=self.parent) - dlg.exec() + return btn_layout - def open_deck_design(self): - """Open the Deck Design dialog.""" - from osdagbridge.desktop.ui.dialogs.deck_design import DeckDesign - dlg = DeckDesign(parent=self.parent) - dlg.exec() + # ── Main build loop ─────────────────────────────────────────────────────── - def show_additional_inputs(self): - """Handle showing additional geometry inputs.""" - # Implement your logic here - print("Show additional inputs clicked") + def _build_field_loop(self, root_layout: QVBoxLayout): + """ + Single flat loop — mirrors InputDock._build_field_loop exactly. + TYPE_TITLE opens a group (analysis or design). + Every field after it belongs to that group until the next TYPE_TITLE. - # --- Helpers for dynamic section/button rendering --- - def _load_configs(self): + Inside analysis groups, group_title opens a nested bordered subgroup; + group_end closes it after that field. + """ + field_list = [] if self.backend and hasattr(self.backend, "output_values"): try: - cfg = self.backend.output_values(flag=None) - if cfg is not None: - return self._normalize_section_configs(cfg) + field_list = self.backend.output_values() or [] except Exception: pass - return {"analysis": None, "design": []} - - def _normalize_section_configs(self, cfg): - result = {"analysis": None, "design": []} - if not cfg: - return result - - # Already structured dict - if isinstance(cfg, dict): - result["analysis"] = cfg.get("analysis") - if isinstance(cfg.get("design"), list): - result["design"] = cfg.get("design") - return result - - # Legacy dict list: treat as design-only - if isinstance(cfg, list) and all(isinstance(item, dict) for item in cfg): - result["design"] = cfg - return result - - # Tuple-based definitions similar to input_values - if isinstance(cfg, list) and all(isinstance(item, tuple) for item in cfg): - for item in cfg: - if len(item) < 7: - continue - _, display_name, ui_type, _, is_visible, _, metadata = item - if ui_type != TYPE_TITLE or not is_visible: - continue - metadata = metadata or {} - kind = metadata.get("kind", "design") - if kind == "analysis": - result["analysis"] = { - "title": display_name, - "fields": metadata.get("fields", []), - } - continue - rows = metadata.get("rows") or metadata.get("post_rows") or [] - if not isinstance(rows, list): - rows = [] - result["design"].append({"title": display_name, "rows": rows}) - return result - - return result - - def _default_analysis_config(self): - return { - "title": "Analysis Results", - "fields": [ - {"type": "combobox", "label": "Member:", "values": ["All"]}, - { - "type": "combobox", - "label": "Load Combination:", - "values": ["Envelope"], - }, - { - "type": "checkbox_grid", - "columns": [["Fx", "Mx", "Dx"], ["Fy", "My", "Dy"], ["Fz", "Mz", "Dz"]], - }, - { - "type": "checkbox_row", - "label": "Display Options:", - "options": ["Max", "Min"], - }, - {"type": "checkbox", "label": "Controlling Utilization Ratio"}, - ], - } - - def _analysis_group_style(self): - return ( - "QGroupBox {\n" - " font-weight: bold;\n" - " font-size: 11px;\n" - " color: #333;\n" - " border: 1px solid #90AF13;\n" - " border-radius: 4px;\n" - " margin-top: 8px;\n" - " padding-top: 12px;\n" - " background-color: white;\n" - "}\n" - "QGroupBox::title {\n" - " subcontrol-origin: margin;\n" - " subcontrol-position: top left;\n" - " left: 8px;\n" - " padding: 0 4px;\n" - " background-color: white;\n" - "}" - ) - def _build_analysis_group(self): - cfg = self.analysis_config or self._default_analysis_config() - if not cfg: - return None + track = False + group = None + glayout = None + # nested subgroup state + subgroup = None + sub_layout = None + + def close_group(): + nonlocal track, group, glayout, subgroup, sub_layout + if track and group: + group.setLayout(glayout) + track = False + subgroup = None + sub_layout = None + + for defn in field_list: + if len(defn) < 7: + continue + key, label, ftype, values, is_visible, _, meta = defn + meta = meta or {} - group = QGroupBox(cfg.get("title", "Analysis Results")) - group.setStyleSheet(self._analysis_group_style()) - layout = QVBoxLayout(group) - layout.setContentsMargins(10, 8, 10, 10) + if not is_visible: + continue + + # ── Section boundary ─────────────────────────────────────────── + if ftype == TYPE_TITLE: + close_group() + kind = meta.get("kind", "design") + group, glayout = self._open_group(label, kind) + root_layout.addWidget(group) + track = True + continue + + if not track: + continue + + # ── Open nested subgroup if group_title declared ─────────────── + if meta.get("group_title"): + subgroup = QGroupBox(meta["group_title"]) + subgroup.setStyleSheet(SUBGROUP_STYLE) + sub_layout = QVBoxLayout() + sub_layout.setContentsMargins(8, 8, 8, 8) + sub_layout.setSpacing(6) + subgroup.setLayout(sub_layout) + glayout.addWidget(subgroup) + + # Route to subgroup if open, otherwise to section layout + target = sub_layout if subgroup is not None else glayout + + # ── Field dispatch ───────────────────────────────────────────── + if ftype == TYPE_BUTTON: + target.addLayout(self._make_button_row(label, meta)) + + elif ftype == TYPE_COMBOBOX: + target.addLayout(self._make_combobox_row(key, label, values, meta)) + + elif ftype == TYPE_CHECKBOX_GRID: + target.addLayout(self._make_checkbox_grid(key, label, values, meta)) + + elif ftype == TYPE_CHECKBOX_ROW: + target.addLayout(self._make_checkbox_row(key, label, values, meta)) + + elif ftype == TYPE_CHECKBOX: + cb = QCheckBox(label or "") + cb.setObjectName(key) + target.addWidget(cb) + + # ── Close nested subgroup if group_end declared ──────────────── + if meta.get("group_end"): + subgroup = None + sub_layout = None + + close_group() + + # ── Group factories ─────────────────────────────────────────────────────── + + def _open_group(self, title: str, kind: str) -> tuple[QWidget, QVBoxLayout]: + if kind == "analysis": + return self._make_analysis_shell(title) + return self._make_design_shell(title) + + def _make_analysis_shell(self, title: str) -> tuple[QGroupBox, QVBoxLayout]: + """Plain QGroupBox — same style as InputDock section groups.""" + group = QGroupBox(title) + group.setStyleSheet(GROUPBOX_STYLE) + layout = QVBoxLayout() + layout.setContentsMargins(8, 8, 8, 8) layout.setSpacing(8) + return group, layout + + def _make_design_shell(self, title: str) -> tuple[QWidget, QVBoxLayout]: + """Collapsible group — mirrors InputDock._make_container.""" + outer = QGroupBox() + outer.setStyleSheet( + "QGroupBox { border:1px solid #90AF13; border-radius:5px;" + " margin-top:0px; padding-top:5px; background-color:white; }" + ) + ol = QVBoxLayout() + ol.setContentsMargins(10, 10, 10, 10) + ol.setSpacing(10) - for field_cfg in cfg.get("fields", []): - self._add_analysis_field(layout, field_cfg) - - return group + header = QHBoxLayout() + title_lbl = QLabel(title) + title_lbl.setStyleSheet("font-size:13px; font-weight:bold; color:#333;") + header.addWidget(title_lbl) + header.addStretch() - def _normalize_field_cfg(self, field_cfg): - if isinstance(field_cfg, dict): - return field_cfg - if isinstance(field_cfg, tuple) and len(field_cfg) >= 7: - key, label, field_type, values, is_visible, _validator, metadata = field_cfg - if not is_visible: - return None - meta = metadata or {} - normalized = { - "key": key, - "label": label, - "type": field_type, - "values": values, - } - normalized.update(meta) - return normalized - return None - - def _add_analysis_field(self, layout, field_cfg): - cfg = self._normalize_field_cfg(field_cfg) - if not cfg: - return - field_type = cfg.get("type") - if field_type == "combobox": - row = QHBoxLayout() - row.setContentsMargins(0, 0, 0, 0) - row.setSpacing(8) - label = QLabel(cfg.get("label", "")) - label.setStyleSheet("font-size: 10px; color: #333; font-weight: normal;") - label.setMinimumWidth(cfg.get("label_min_width", 100)) - combo = NoScrollComboBox() - values = cfg.get("values") or [] - combo.addItems(values) - default = cfg.get("default") - if default and default in values: - combo.setCurrentText(default) - apply_field_style(combo) - row.addWidget(label) - row.addWidget(combo) - layout.addLayout(row) - elif field_type == "checkbox_grid": - columns = cfg.get("columns") or cfg.get("values") or [] - grid = QHBoxLayout() - grid.setContentsMargins(0, 0, 0, 0) - grid.setSpacing(8) - for col_items in columns: - col_layout = QVBoxLayout() - col_layout.setContentsMargins(0, 0, 0, 0) - col_layout.setSpacing(2) - for text in col_items or []: - cb = QCheckBox(str(text)) - col_layout.addWidget(cb) - grid.addLayout(col_layout) - if cfg.get("add_stretch", True): - grid.addStretch() - layout.addLayout(grid) - elif field_type == "checkbox_row": - row = QHBoxLayout() - row.setContentsMargins(0, 0, 0, 0) - row.setSpacing(12) - label = cfg.get("label") - if label: - lbl = QLabel(label) - lbl.setStyleSheet("font-size: 10px; color: #333; font-weight: normal; margin-top: 4px;") - row.addWidget(lbl) - options = cfg.get("options") or cfg.get("values") or [] - for text in options: - cb = QCheckBox(str(text)) - row.addWidget(cb) - if cfg.get("add_stretch", True): - row.addStretch() - layout.addLayout(row) - elif field_type == "checkbox": - cb = QCheckBox(cfg.get("label", "")) - layout.addWidget(cb) - - def _section_label_style(self): - return ( - "QLabel {\n" - " color: #000000;\n" - " font-size: 12px;\n" - " background: transparent;\n" - "}" + toggle = QPushButton() + toggle.setCursor(Qt.CursorShape.PointingHandCursor) + toggle.setCheckable(True) + toggle.setChecked(True) + toggle.setIcon(QIcon(":/vectors/arrow_up_light.svg")) + toggle.setIconSize(QSize(20, 20)) + toggle.setStyleSheet( + "QPushButton { background:transparent; border:none; padding:2px; }" + "QPushButton:hover, QPushButton:pressed { background:transparent; }" ) + header.addWidget(toggle) + ol.addLayout(header) - def _default_action_button_style(self): - return ( - "QPushButton {\n" - " background-color: #90AF13;\n" - " color: white;\n" - " font-weight: bold;\n" - " border: none;\n" - " border-radius: 4px;\n" - " padding: 8px 20px;\n" - " font-size: 11px;\n" - " min-width: 80px;\n" - "}\n" - "QPushButton:hover {\n" - " background-color: #7a9a12;\n" - "}\n" - ) + body = QFrame() + body.setFrameShape(QFrame.NoFrame) + body_layout = QVBoxLayout(body) + body_layout.setContentsMargins(0, 0, 0, 0) + body_layout.setSpacing(8) + ol.addWidget(body) + + toggle.toggled.connect(lambda checked: ( + body.setVisible(checked), + toggle.setIcon(QIcon( + ":/vectors/arrow_up_light.svg" if checked + else ":/vectors/arrow_down_light.svg" + )), + )) + + outer.setLayout(ol) + return outer, body_layout + + # ── Widget factories ────────────────────────────────────────────────────── - def _create_action_button(self, cfg): - btn = QPushButton(cfg.get("text", "Action")) + def _make_button_row(self, label: str, meta: dict) -> QHBoxLayout: + """[Label | Action Button] — mirrors InputDock._make_button_row.""" + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(8) + + lbl = QLabel(label) + lbl.setStyleSheet(LABEL_STYLE) + lbl.setMinimumWidth(110) + row.addWidget(lbl) + + btn = QPushButton(meta.get("button_label", "Here")) btn.setCursor(Qt.CursorShape.PointingHandCursor) btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - style = cfg.get("style") or self._default_action_button_style() - btn.setStyleSheet(style) - if cfg.get("icon"): - btn.setIcon(QIcon(cfg["icon"])) - icon_size = cfg.get("icon_size") - if isinstance(icon_size, (list, tuple)) and len(icon_size) == 2: - btn.setIconSize(QSize(icon_size[0], icon_size[1])) - cb_name = cfg.get("action") - cb = getattr(self, cb_name, None) if cb_name else None + btn.setStyleSheet(ACTION_BTN_STYLE) + cb = getattr(self, meta.get("action", ""), None) if callable(cb): btn.clicked.connect(cb) else: btn.setEnabled(False) - return btn + row.addWidget(btn, 1) + return row - def _add_button_row(self, parent_layout, row_cfg): + def _make_combobox_row(self, key: str, label: str, values, meta: dict) -> QHBoxLayout: + """[Label | Dropdown] row.""" row = QHBoxLayout() row.setContentsMargins(0, 0, 0, 0) row.setSpacing(8) - label_text = row_cfg.get("label") - if label_text: - label = QLabel(label_text) - label.setStyleSheet(self._section_label_style()) - label.setMinimumWidth(row_cfg.get("label_min_width", 110)) - row.addWidget(label) - - buttons = row_cfg.get("buttons", []) - for cfg in buttons: - btn = self._create_action_button(cfg) - row.addWidget(btn, cfg.get("stretch", 1 if len(buttons) == 1 else 0)) - - if row_cfg.get("add_stretch", True): - row.addStretch() - - parent_layout.addLayout(row) - - def _create_toggle_group(self, section_cfg): - group = QGroupBox() - group.setStyleSheet( - "QGroupBox {\n" - " border: 1px solid #90AF13;\n" - " border-radius: 5px;\n" - " margin-top: 0px;\n" - " padding-top: 5px;\n" - " background-color: white;\n" - "}" - ) - layout = QVBoxLayout() - layout.setContentsMargins(10, 10, 10, 10) - layout.setSpacing(10) + lbl = QLabel(label) + lbl.setStyleSheet(LABEL_STYLE) + lbl.setMinimumWidth(110) + row.addWidget(lbl) + + combo = NoScrollComboBox() + combo.setObjectName(key) + items = list(values or []) + combo.addItems(items) + default = meta.get("default") + if default and str(default) in items: + combo.setCurrentText(str(default)) + apply_field_style(combo) + row.addWidget(combo, 1) + return row + + def _make_checkbox_grid(self, key: str, label: str, values, meta: dict) -> QVBoxLayout: + """ + N-column grid of checkboxes, aligned in rows using QGridLayout. + values = [["Fx","Mx","Dx"], ["Fy","My","Dy"], ...] + label = None means no label row is added. + exclusive : bool — if True only one checkbox can be checked at a time. + """ + from PySide6.QtWidgets import QGridLayout - header = QHBoxLayout() - title = QLabel(section_cfg.get("title", "")) - title.setStyleSheet("font-size: 13px; font-weight: bold; color: #333;") - header.addWidget(title) - header.addStretch() + outer = QVBoxLayout() + outer.setContentsMargins(0, 0, 0, 0) + outer.setSpacing(4) - toggle_btn = QPushButton() - toggle_btn.setCursor(Qt.CursorShape.PointingHandCursor) - toggle_btn.setCheckable(True) - toggle_btn.setChecked(True) - toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg")) - toggle_btn.setIconSize(QSize(20, 20)) - toggle_btn.setStyleSheet( - "QPushButton {\n" - " background: transparent;\n" - " border: none;\n" - " padding: 2px;\n" - "}\n" - "QPushButton:hover {\n" - " background: transparent;\n" - "}\n" - "QPushButton:pressed {\n" - " background: transparent;\n" - "}" - ) - header.addWidget(toggle_btn) - layout.addLayout(header) + if label: + lbl = QLabel(label) + lbl.setStyleSheet(LABEL_STYLE) + outer.addWidget(lbl) - body = QFrame() - body.setFrameShape(QFrame.NoFrame) - body_layout = QVBoxLayout(body) - body_layout.setContentsMargins(0, 0, 0, 0) - body_layout.setSpacing(10) - body.setVisible(True) + columns = values if isinstance(values, list) else [] + all_cbs: list[QCheckBox] = [] + num_cols = len(columns) + + grid = QGridLayout() + grid.setContentsMargins(0, 0, 0, 0) + grid.setHorizontalSpacing(8) + grid.setVerticalSpacing(4) + + # Set equal stretch on every column so they fill the width evenly + for c in range(num_cols): + grid.setColumnStretch(c, 1) + + # Fill row by row: row index = position within column + num_rows = max((len(col) for col in columns), default=0) + for row in range(num_rows): + for col, col_items in enumerate(columns): + if row < len(col_items): + cb = QCheckBox(str(col_items[row])) + all_cbs.append(cb) + grid.addWidget(cb, row, col, alignment=Qt.AlignCenter) - for row_cfg in section_cfg.get("rows", []): - self._add_button_row(body_layout, row_cfg) + outer.addLayout(grid) - layout.addWidget(body) + if meta.get("exclusive", False): + self._wire_exclusive(all_cbs) - def _toggle(checked): - body.setVisible(checked) - toggle_btn.setIcon(QIcon(":/vectors/arrow_up_light.svg" if checked else ":/vectors/arrow_down_light.svg")) + return outer - toggle_btn.toggled.connect(_toggle) - group.setLayout(layout) - return group \ No newline at end of file + def _make_checkbox_row(self, key: str, label: str, values, meta: dict) -> QHBoxLayout: + """ + Horizontal row of checkboxes. + values = ["Max", "Min", ...] + exclusive : bool — if True only one checkbox can be checked at a time. + """ + row = QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(12) + + if label: + lbl = QLabel(label) + lbl.setStyleSheet(LABEL_STYLE) + lbl.setMinimumWidth(110) + row.addWidget(lbl) + + options = list(values or []) + cbs: list[QCheckBox] = [] + for text in options: + cb = QCheckBox(str(text)) + cbs.append(cb) + row.addWidget(cb) + + row.addStretch() + + if meta.get("exclusive", False): + self._wire_exclusive(cbs) + + return row + + # ── Exclusive checkbox wiring ───────────────────────────────────────────── + + @staticmethod + def _wire_exclusive(checkboxes: list[QCheckBox]): + """Make a group of checkboxes mutually exclusive (radio-button behaviour).""" + def _on_clicked(checked, clicked_cb): + if checked: + for cb in checkboxes: + if cb is not clicked_cb: + cb.setChecked(False) + for box in checkboxes: + box.clicked.connect(lambda checked, b=box: _on_clicked(checked, b)) + + # ── Widget lookup ───────────────────────────────────────────────────────── + + def _w(self, key) -> QWidget | None: + return self.output_widget.findChild(QWidget, key) if self.output_widget else None + + # ── Panel toggle ────────────────────────────────────────────────────────── + + def toggle_output_dock(self): + if hasattr(self.parent, "toggle_animate"): + collapsing = self.width() > 0 + self.parent.toggle_animate(show=not collapsing, dock="output") + self.toggle_btn.setText("❮" if collapsing else "❯") + self.toggle_btn.setToolTip("Show panel" if collapsing else "Hide panel") + + def resizeEvent(self, event): + super().resizeEvent(event) + if self.parent and hasattr(self.parent, "update_docking_icons"): + self.parent.update_docking_icons(output_is_active=self.width() > 0) + + # ── Action handlers (called by name from schema) ────────────────────────── + + def open_steel_design(self): + from osdagbridge.desktop.ui.dialogs.steel_design import SteelDesign + SteelDesign(parent=self.parent).exec() + + def open_deck_design(self): + from osdagbridge.desktop.ui.dialogs.deck_design import DeckDesign + DeckDesign(parent=self.parent).exec() \ No newline at end of file From 579948e34a9abc379a8ae2e746e12e1b4423e993 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Sun, 15 Mar 2026 02:46:55 +0530 Subject: [PATCH 126/225] Added 3D CAD and Plots widget in template_page --- .../desktop/resources/resources.qrc | 27 +- .../desktop/resources/resources_rc.py | 1781 ++++++++++++----- .../vectors/cross_section_closed_light.svg | 13 - .../vectors/cross_section_open_light.svg | 13 - .../vectors/logs_dock_active_light.svg | 3 - .../vectors/logs_dock_inactive_light.svg | 1 - .../vectors/top_view_closed_light.svg | 13 - .../resources/vectors/top_view_open_light.svg | 13 - .../vectors/view_btn/3d_cad_active.svg | 1 + .../vectors/view_btn/3d_cad_inactive.svg | 1 + .../vectors/view_btn/cross_section_active.svg | 4 + .../view_btn/cross_section_inactive.svg | 4 + .../input_dock_active.svg} | 0 .../input_dock_inactive.svg} | 0 .../vectors/view_btn/logs_dock_active.svg | 1 + .../vectors/view_btn/logs_dock_inactive.svg | 1 + .../output_dock_active.svg} | 0 .../output_dock_inactive.svg} | 0 .../vectors/view_btn/plots_active.svg | 1 + .../vectors/view_btn/plots_inactive.svg | 1 + .../vectors/view_btn/top_view_active.svg | 4 + .../vectors/view_btn/top_view_inactive.svg | 4 + .../desktop/ui/docks/cad_dual_view.py | 40 +- src/osdagbridge/desktop/ui/template_page.py | 302 ++- 24 files changed, 1537 insertions(+), 691 deletions(-) delete mode 100644 src/osdagbridge/desktop/resources/vectors/cross_section_closed_light.svg delete mode 100644 src/osdagbridge/desktop/resources/vectors/cross_section_open_light.svg delete mode 100644 src/osdagbridge/desktop/resources/vectors/logs_dock_active_light.svg delete mode 100644 src/osdagbridge/desktop/resources/vectors/logs_dock_inactive_light.svg delete mode 100644 src/osdagbridge/desktop/resources/vectors/top_view_closed_light.svg delete mode 100644 src/osdagbridge/desktop/resources/vectors/top_view_open_light.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/view_btn/3d_cad_active.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/view_btn/3d_cad_inactive.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/view_btn/cross_section_active.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/view_btn/cross_section_inactive.svg rename src/osdagbridge/desktop/resources/vectors/{input_dock_active_light.svg => view_btn/input_dock_active.svg} (100%) rename src/osdagbridge/desktop/resources/vectors/{input_dock_inactive_light.svg => view_btn/input_dock_inactive.svg} (100%) create mode 100644 src/osdagbridge/desktop/resources/vectors/view_btn/logs_dock_active.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/view_btn/logs_dock_inactive.svg rename src/osdagbridge/desktop/resources/vectors/{output_dock_active_light.svg => view_btn/output_dock_active.svg} (100%) rename src/osdagbridge/desktop/resources/vectors/{output_dock_inactive_light.svg => view_btn/output_dock_inactive.svg} (100%) create mode 100644 src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/view_btn/top_view_active.svg create mode 100644 src/osdagbridge/desktop/resources/vectors/view_btn/top_view_inactive.svg diff --git a/src/osdagbridge/desktop/resources/resources.qrc b/src/osdagbridge/desktop/resources/resources.qrc index 5a1167430..247f7a713 100644 --- a/src/osdagbridge/desktop/resources/resources.qrc +++ b/src/osdagbridge/desktop/resources/resources.qrc @@ -22,20 +22,23 @@ vectors/Osdag_logo.svg vectors/inputs_label_light.svg - vectors/input_dock_active_light.svg - vectors/input_dock_inactive_light.svg - - vectors/logs_dock_active_light.svg - vectors/logs_dock_inactive_light.svg - - vectors/output_dock_active_light.svg - vectors/output_dock_inactive_light.svg vectors/outputs_label_light.svg - vectors/cross_section_open_light.svg - vectors/cross_section_closed_light.svg - vectors/top_view_open_light.svg - vectors/top_view_closed_light.svg + vectors/view_btn/input_dock_active.svg + vectors/view_btn/input_dock_inactive.svg + vectors/view_btn/logs_dock_active.svg + vectors/view_btn/logs_dock_inactive.svg + vectors/view_btn/output_dock_active.svg + vectors/view_btn/output_dock_inactive.svg + vectors/view_btn/cross_section_active.svg + vectors/view_btn/cross_section_inactive.svg + vectors/view_btn/top_view_active.svg + vectors/view_btn/top_view_inactive.svg + vectors/view_btn/3d_cad_active.svg + vectors/view_btn/3d_cad_inactive.svg + vectors/view_btn/plots_active.svg + vectors/view_btn/plots_inactive.svg + vectors/msg_success.svg vectors/msg_warning.svg vectors/msg_critical.svg diff --git a/src/osdagbridge/desktop/resources/resources_rc.py b/src/osdagbridge/desktop/resources/resources_rc.py index 7f4e2ab16..9f73a0546 100644 --- a/src/osdagbridge/desktop/resources/resources_rc.py +++ b/src/osdagbridge/desktop/resources/resources_rc.py @@ -1,92 +1,91 @@ # Resource object code (Python 3) # Created by: object code -# Created by: The Resource Compiler for Qt version 6.10.1 +# Created by: The Resource Compiler for Qt version 6.9.2 # WARNING! All changes made in this file will be lost! from PySide6 import QtCore qt_resource_data = b"\ -\x00\x00\x04\xe7\ -\x00\ -\x00\x15\xe8x\xda\xd5X]O\xdb<\x14\xbeG\xe2?\ -X\xea\xc5>\xb4\xae-\x85\x8e\x05\xbd\x17\xfd\x82!\x15\ -\x18\xb4\xdb\xc4n\x90\x93\xb8\xad\x85\x1bg\x8eC\xe1\x9d\ -\xf8\xef\xef\xb1\x9b\xef&n`\xef\xcdb\x0du\xb6s\ -\xce\xe3\xc7\x8f\xcf9N\xeb=\xfa\xe7E\xcf\xfe\x1eB\ -\xe8j:\xea\x9f\xa1\xb3o\xe7h:\xbb\x9d\x8c\xa7_\ -\xc6\xe3\x19j\xa2\xab\x9b\xb3\xfe\xe5\xf9\xcf\xf1\x08\x0dn\ -\xd1\xf4\xebxx~z><\x9f\xdd\xeaw^\xe6\x06\ -\xbdo\xed\xef\xed\xef\xb5^\x05\xaf\xf3\x11\x9dM\xae\x06\ -\xfdI\x04\x0f\xbd\x9d\x10\x1cH4\xf5\x89C\xe7\xd4y\ -\xf7Z@\xd7\x17\x98z?\xa8\xe7\xf25\xfa\xad\x8d \ -\x1b;\xf7\x0b\xc1C\xcfm:\x9cqa\xa1\xc6\xfcP\ -\xb5\x93h\x9c\x0b\x97@o\xc7\x7fD\x01g\xd4E\x8d\ -\xcfm<\xeft\xa3\xf1\x15\x16\x0b\xeaY\xa8\xed?F\ -=>v]\xea-\xe2\xaeg\xc5\xc3\xf5\x8cs6\xa3\ -\xbe\xc1\xeb\xa9~\x22\x1bqg[?&(\xfd\xd3\x04\ -J\xe2\xf8\x00&\x1c$x\xe6\xdc\x93\xcd\x80\xfeK\xe0\ -\xcd\xb4wc\xac)\xb0K\xc3 \x0b\xff\x97/\xb8O\ -\x84|jbF\x17\xde\x8ax\xd2B}\xf5\xf3\xfb\x10\ -~\x13\xb1Y\xd3\xf5\xd4gT\xc2\x7f-k\x89=\x97\ -\x11\xc3\xd2Fm\xd5b.@\x13g\x8c\xdb\x98\xa1\xe1\ -\x928\xf76\x7fDS\xf9\x04\x06\xf4\x0e\xe9\xbe\x01\xf4\ -\xfd\xdeF\x9f\x82\x8c-w\xbb\xf1\xe2\x03\x1f;z\xf1\ -\xbd\x98\xf5\xc4\x94e\xc1\x8eS\x07K.b\xabk\xea\ -\xca%X\xec%\x16\x97\x84.\x962\xd7U\xc2wW\ -?\xe5\x14v\xd3\x17K4\xa5\x9fj`\xd6\x92?\x90\ -\x04^\x89\xe7#\xfd\x18\x0c8\xaa\x8f\xb8&]\xc7\x18\ -\xea,\x8e\xae\xf0\x028\x0f\x05{k\xb5\x1e\x88\x03.\ -\x82V\xe4\xe3c\xf0\xb0x\x97H\xfb\x82x\xe1\x00\x8b\ -\x86$+\x9faI\xee|x\xf3\x0et\x13\xde\xd9X\ -\x98\x14\x7f\xa8\x9aI\xf1\xdbGi\x877 \x04\x06b\ -\x9f\xc9\xebG\xb0\xc8\x8czR,\x16\x92\x02{\xa0\x1d\ -\x01\xd26\x9d\x8c\xba\xae\xad\x800 \xabl\x1f\xb2g\ -\xbc\xb69_\x90 \xa8\xb06>V\xad\x965\xa4\xc7\ -\xebF\x9f\x12m$G\xb8\x84\xa1CC\xe8\xab\x85\xab\ -z\xd7L\xe2\xc8F\x86\xce+\xfc\x19\xb6*\xa1e\xdc\ -;m\x17h)\x9c\xf7\xfa>\x03\x022\xcb\x06\xa1$\ -\xe4\x94\x0a\xb3\x01\x9e\xa1\xe5\xd2L\x93\x91\xb9\xb42\xb1\ -=\xea\x16\x1bC[\xfd\x92\xfb\xd9\xd0\x1e\xf5\xda\x5cJ\ -\xbez\xf9&i/M,D\x9a=\xa38z\xbc\x15\ -F\x8f\xd3\xdc\x07\xf1~\x04)\x05r\xae\x87\x94I\x14\ -\xa4\xd1\xbe\x5c\x95\x9bXU3\xebeephN\xc2\ -\x06\xad\x1d\xab\x08\xd13\xe4\x97\x18\x86\xc7=RH\xfd\ -\x9dR\x17\xe6H\x90[B&@\x97K\xed \xc7\xe6\ -+*\xaa.TT\xe3\xcb\xf1\x0d\x94T\x83o\xb3\xd9\ -\xd5eRY\x0dp@\xd0\x84<\x10\xf6\xfa\xaa\xeak\ -\x18,\x07!\x88\xca\xab>J\xeb%\x90\x92_\xaf\xcd\ -`Vv\x17\xd7\x91xl\xce\xdc\x13T\xca\xc4\x91!\ -;g\xed\xe5C\x7f\xaa\x0bI\x1e\xe5\xa6\xb0\xb1\x90\x93\ -)gr\xab($\xe3\xed\xb0\x90\xdb\xbd]\x02-\x10\ -\xb0\xe5\xac\x10\xe2K\xc81\xb3YM\xc4\xc6\xd5\x0f\xea\ -.\x88l\x0c\xc3\x00N\xfd\x8cJF\x06*-\xa3\xdd\ -\xf5\xaf\x0a\x0d\x13l\x13\xd6\xd0\xaf\xe9\x9f\x05\x98\xc6|\ -m\xce\xb5\xa9\xf5\x09_\xf0\x9cqs\x82.\xadg\xb6\ -\xc3@Zxo\x88n\x5cP\x8f\xae`\xc6.\xa9V\ -{,-\xc7\xdb\xbbk\xea,\xb8\x9ey\xfa\x0e\xd4;\ -\xa59\xef\xa8V\xc3Pee\x91\x98\xc2=\xd5JM\ -\xe1\xc7\x1b\x02r\x12\x7f\x1b\x97\x05\xdc\x7f\xc2f\xd1\xd4\ -\x9f\xf09d<\xf8\xcb\xa8\xcc@\xde\xc9\x22\xf9t\xe8\ -t\x9d\xaa\xd3k4\xbd\x9bU\xa7\xdd\xfd|`G\xf1\ -$\x8au\x03]\xe1L\xa8G\xea\x04\xf1g\x95U+\ -\x12\x1c\x84\xa6\xa09\xe2\xce\xbd!\x09\xea\x1c\x18yf\ -0\xff\xce\x85\xf9\xe8\xba\x22\xa2\xa5%\xf7\x81j\xb5\xae\ -?\xdd\xfc\x96\xe5\xf2d\xd5%\xff\xb9\x14\xd4\x0c\xf2\xdf\ -\xd8\xa5\xd2\x84\xebX\xb5\x9aW\x01\xedw\x8eW\x94=\ -Y\xe8\xcd\x90\x87\x82\x82\x14.\xc9\xfa\xcd\x07\xb4\xe2\x1e\ -W\xd7rb\xfc\x10Q\xa7\xdc/_\xcb\xd4\x11\x9c1\ -Hf\x16\xc8O\xc25\x98\x95_\x93\xda\xaa\x9d \xa8\ -\x9c&\x8a7\xb4\x10\xe4\x09\xc0\x08$\x97\x04\x05\xda\x88\ -\xaar\xe1|\x81U\xb5\x99\xa5\x95m\xe6CO\xf2\xaf\ -[uhL[\x90\xc2\x8e\xbe\x9c\x98\xe1\xf7\xdb\xaai\ -\xf8\x17\x04\xac\xaf\xaa\xf0G\x9fa\xe2\x05\xac\xa0\xd2\x8f\ -\xab\xf1n\xfb\xff\x05Zu\xe2\x01\xee\xa7\xb6j\x1a\xee\ -\x08\x8b{\x98\xa5\xe1B`\xdb\xbc\x13\xe3\xce\xa0\xdd\xe9\ -\x1d\x14\xd2dp\x98\x13\xff\x1fr\xc3Ah\xe7\x87\x8b\ -\x17,\xb5z\x05\xe8\x0buI\xa0\xbd\x87~K\xdfG\ -\xf4e&\xa8\x8fB\xdd\x8b\x0c(r\xc3e\xf4\xe8\xdb\ -C\x1e\x0a\x04t\x8cl\x22\xd7\x84x1+\xf0\xb7\x00\ -\xed??\x04\x81\x7f\ +\x00\x00\x04\xd8\ +(\ +\xb5/\xfd`\xe8\x14u&\x00&,\x88 \xd0\x5c7\ +\x98j\xfb\xe6\xb5.\xc56n\x15\xd6t\x0a+\x9d\xc1\ +\x15\x8e\x8a\xa8\xc6\xde/\xa3\xd4\xd3\xcb\x80\x12\x85\x00~\ +\x00|\x00\x17\xcav1\xab\xc8b,\xfa\xcc\xc8[\xc7\ +\x91\x9a/s\xf3\xeeV2\xd3\x92S\xa4\xe8\x16\x11\xf8\ +X-\xd6\xfe2\x15?f,a\xa4\x04\xdeel\xb1\ +\xa8\x8d\xf7\xc4\x99\x5c\x894t\x99\xbb\xf0xk\xe9V\ +\xba\xf9\x14\xc4\x9a\xaa\xe2\x9b!\xdf\x9a>Hp\x90\xe2\ +u@\x8c#\x14\x80\x00 \x900\xb8I\xa4\xa9h.\ +\x9a\xca\xe7\x09\xb9\xc9s\xcbw\xd2p(\x18P\xc75\ +\x17}_&\xf4\x81&Q\xc85#\x8cc(\x96P\ +\xc7\xdd\x01\x81\x89\x1b\x12\x014D\x95\xa8'\xa9\x89\xfa\ +M\xadY\xfe\x16d\xea\x9d\xf77\x05\xb2\xa5\x11\x09-\ +~+\xd1\x11l>\xbd{\x92\x96U\xe6\xe3\x8b\x8do\ +aU\xc7q[E\xd6W9T{\xac\xae\x8c7\x15\ +\xebxk\xd79Djj\x8e\xdbd\xde[\xd8\x0e\xf9\ +\x0b\x87+\xf1U\x15\xb74\xc4\x16\xb3Y\xde\x8e\x97\xaa\ +\xbanWk\x86>\xf9+$\x8aw\xfb~y\xc9j\ +\xa9\x06\xdb\xf9M\x9cM\x96>\xebH\xb3\xf6\xb1\xaa\xb5\ +}q\xeae.\x02[Yo\xdd\x080\x89A\x81\xfd\ +\x90\x82\xee\xbd\xddUT\xe2\xad\xcf\x8a`?9\xd6\x92\ +\xe8\xdd~\xfdf4\x5c2Z\x1c\xbal\xf8\xbb\xaa\x5c\ +\x17\xef}z*}z\xec\xb7\x1e\xf4\xd7\xd4\xe3tD\ +\xa2\x91\xe7 \x05\xf4q>n\xa1\xf8\x8b/C\xbb_\ +\x17\x1eM\x9c-\x10\x17\xce\x99j%\xde\x1b\x87&\xde\ +y\xa7\xdej[\xa6\xe6\xeb\xed\xe2\xf8\x14\x0c\x87|Z\ +\x7f6\xb7\xf8\xf6u\xb7\xefgj\xeaK\xf3\xf6\xae\xc1\ +\xc8\x01~\xff]\xfbC\xa7\x9f\xa9N\x98\xa7\xfe\xb1f\ +\xc2S\x1fn\xb5\x9a_\x9c\x7f\x95\xa9e{l\x9cv\ +kY\xfef\xa3\xe4\xad\xfdU\xdb3N9\xec3\xe9\ +\xa0K6K\xc5\xba\xf3\xb7\xbaL=kq\x16C\x8f\ +/.\xfd0p=\xc7\xf3\xd7|\xe2\xca\xc0;\x98\xad\ +%MAv\x1d\xbf\xfdz\xd1\x8c[\xf8\x88\xb2+\x11\ +[4\xfd\xb7\x82^\xb8\x88p\x9b(r\x22\xe3\xf1\x1a\ +\xdbJ\xc6[?\xe8E\x1dT\x91r\x04\x81$\xa8\xe1\ +\xa9\x224#\x22\x92\x14$Isq\x88B\x14\x92\x16\ +\xb2\xbc\x01\xb2X@\x85R,\xc2 \x10\x86\x08\x95\x80\ +\x10L\x882\xc6\x04\x22\x81\x92 \x125\xad\x01\x9e\xa4\ +\x92\x89d\xdc\xe6x\x05\xf1Ct{1!\xff\x8dN\ +\xd1D44\xf5\xc0$\x07\x17\xa8R\xcam\xdb\xc9\xaa\ +x\x86e1\xb3\x0e$%\x94\x03\xf0\xc6\xee\xbbz\xfa\ +\xfa9\xc7\xfaU\x901\xd4\x17\x22\x96\x05\x1aGn\x96\ +\x98\x00B\xaaa\x8fC\xc1h\xb6\xb50\xc4=\xd1\xaa\ +\xcb@\x1b\xd5f\x82\xdd\x03{\xb4u\xcb\x8d\x1a\xd4\x96\ +\xc1\xa6\x8bK\x10v;g\xdb\x13\xb2\x86)T\xfa\xfa\ +\x84\xc0\xf2\xdb\xd3)\x1a\xaey\xdd\xf6\x00\x0e\xa4XP\ +\xc2\x8d\x92`\x0aF?\xd5\xca\xe6c0\x81&\xa9I\ +\xed\xb6\xc27\xf6\x06\x8c\xb9\xaf\xef\x1d\xfcmh\x8c\xe7\ +\xc9\x8eY$\xeb0\x8ei\xe4X)\x07\xb5w,\x00\ +3\xb3\xfczP\x1d\x5c]Rk3\xb1\x86\x9c\xda\xaa\ +Sz\xc7\xf6\xa3^\xbb\x0f\x8b\xcf\xd3\xb5\x06\x5c;\xce\ +\x83\x9eb\xc6a\xc2\xc4\xd33g\xc7\xa5R\x10%W\ +\xa3\xaa\xe4\x1c\xf5l\xbb\x22#\xc5\x0b\x9b\xff|\x13)\ +\xb0\xdc4XH\xba\xb3A\xa3\xc2\xda\xb7\x7fg\x07\xa8\ +\x98wV\xd10\x0f\xb8\x1f\x18{\xa9\xb9\xaf\xeb\x92\xe1\ +ZT\x03\x10\x85y\xa8\xe1\x88\x08\xbaI\xe9\x18\x5c?\ +]!g\x98\x04\xb3\x90\xc6\x9as\xc3\x9fq\xfdK\x98\ +\xf8:\xf4gX\x03\x02\x80P=\x19\x0f\x93\xb2\xcdI\ +.\x93\x9d\xcfJ\xd2\xd9\x95\x05\x16\xe0\xaa\x8c\xb6\xe5\x06\ +b\xd2\xdc2\x8e\x1bP\xa7\xc9{\xf0\xff^17\xa6\ +\xc0?\xa3\xd9\xcc7\x02\x15\xf1\xc6\x14P\xe7\x8b\xf8\x95\ +\x95\xcaD\xb2\xf8\xf0\x8d\x951\x1f\x97:\x11\xa5\xe6\xbf\ +K\xd5O\xc7\x10Fm\x97\xc4\xf5\xe8\xce\xf2\xcc\x9cU\ +\x02\x8d\x17\xb7\x9a\xc6\xd6\x16\x0c\xe4\x0e;&\x13\x91\x16\ +\xbd\x07\xcf'\x0fF\xc3\xdbU^\x9c]wp\x0c\x02\ +\xa2\xdc\x19\xdfL\xe8\x8f\xb0d\xb8q(>\xbc\x07\x22\ +\xe1\x80`\xc1m\xe4\x11\x9d2\xe9}\xbe\xf4a\x11\xdd\ +\xfe\xac\xab]x\x18\x0eB\x12z/`\xbfq0+\ +\x85\x9f\x18\xe4Tk\x84\xe6\xdfz\xa5g\xaa|ow\ +=\xd18\x13\x8c\xc0e9\ -\x00\x00\x02-\ -<\ -svg width=\x2240\x22 h\ -eight=\x2240\x22 viewB\ -ox=\x220 0 40 40\x22 f\ -ill=\x22none\x22 xmlns\ -=\x22http://www.w3.\ -org/2000/svg\x22>\x0d\x0a\ -\x0d\x0a\x0d\x0a\ -\x00\x00\x01c\ -<\ -svg width=\x2222\x22 h\ -eight=\x2222\x22 viewB\ -ox=\x220 0 22 22\x22\x0d\x0a\ - xmlns=\x22http\ -://www.w3.org/20\ -00/svg\x22\x0d\x0a sh\ -ape-rendering=\x22c\ -rispEdges\x22>\x0d\x0a\x0d\x0a \ - \x0d\x0a\x0d\x0a \ - \x0d\x0a\ -\x0d\x0a\ \x00\x00\x0e;\ <\ svg width=\x22149\x22 \ @@ -393,31 +330,6 @@ 140.574 20.646Z\ \x22 fill=\x22black\x22/>\ \x0d\x0a\x0d\x0a\ -\x00\x00\x01c\ -<\ -svg width=\x2222\x22 h\ -eight=\x2222\x22 viewB\ -ox=\x220 0 22 22\x22\x0d\x0a\ - xmlns=\x22http\ -://www.w3.org/20\ -00/svg\x22\x0d\x0a sh\ -ape-rendering=\x22c\ -rispEdges\x22>\x0d\x0a\x0d\x0a \ - \x0d\x0a\x0d\x0a \ - \x0d\x0a\ -\x0d\x0a\ \x00\x00\x05(\ <\ ?xml version=\x221.\ @@ -553,41 +465,6 @@ V-636ZM226.67-14\ 6.67v-422.66 422\ .66Z\x22/>\ -\x00\x00\x02\x07\ -<\ -svg width=\x2240\x22 h\ -eight=\x2240\x22 viewB\ -ox=\x220 0 40 40\x22 f\ -ill=\x22none\x22 xmlns\ -=\x22http://www.w3.\ -org/2000/svg\x22>\x0d\x0a\ -\x0d\x0a\x0d\x0a\ \x00\x00\x021\ <\ svg xmlns=\x22http:\ @@ -626,35 +503,6 @@ .33 236 97.33ZM4\ 80-480Z\x22/>\ \ -\x00\x00\x01\xa4\ -<\ -svg xmlns=\x22http:\ -//www.w3.org/200\ -0/svg\x22 height=\x224\ -0px\x22 viewBox=\x220 \ --960 960 960\x22 wi\ -dth=\x2240px\x22 fill=\ -\x22#000000\x22>\ \x00\x00\x02\xd3\ <\ svg xmlns=\x22http:\ @@ -703,81 +551,56 @@ 3 65.67 65.66L61\ 2-612.33Z\x22/>\ -\x00\x00\x01b\ -<\ -svg width=\x2222\x22 h\ -eight=\x2222\x22 viewB\ -ox=\x220 0 22 22\x22\x0d\x0a\ - xmlns=\x22http\ -://www.w3.org/20\ -00/svg\x22\x0d\x0a sh\ -ape-rendering=\x22c\ -rispEdges\x22>\x0d\x0a\x0d\x0a \ - \x0d\x0a\x0d\x0a \ - \x0d\x0a\x0d\ -\x0a\ -\x00\x00\x02\xf7\ +\x00\x00\x02\xfa\ <\ svg width=\x2235\x22 h\ eight=\x2235\x22 viewB\ ox=\x220 0 35 35\x22 f\ ill=\x22none\x22 xmlns\ =\x22http://www.w3.\ -org/2000/svg\x22>\x0a<\ -path d=\x22M31.2499\ - 11.3644V5.22933\ -H26.0251V2H31.24\ -99C31.9924 2 32.\ -6364 2.32017 33.\ -182 2.96052C33.7\ -273 3.60118 34 4\ -.35745 34 5.2293\ -3V11.3644H31.249\ -9ZM1 11.3644V5.2\ -2933C1 4.35745 1\ -.27266 3.60118 1\ -.81799 2.96052C2\ -.36359 2.32017 3\ -.00764 2 3.75014\ - 2H8.97486V5.229\ -33H3.75014V11.36\ -44H1ZM26.0251 33\ -V29.7707H31.2499\ -V23.6356H34V29.7\ -707C34 30.6425 3\ -3.7273 31.3988 3\ -3.182 32.0395C32\ -.6364 32.6798 31\ -.9924 33 31.2499\ - 33H26.0251ZM3.7\ -5014 33C3.00764 \ -33 2.36359 32.67\ -98 1.81799 32.03\ -95C1.27266 31.39\ -88 1 30.6425 1 2\ -9.7707V23.6356H3\ -.75014V29.7707H8\ -.97486V33H3.7501\ -4ZM6.49986 26.54\ -18V8.45817H28.50\ -01V26.5418H6.499\ -86ZM9.25 23.3125\ -H25.75V11.6875H9\ -.25V23.3125Z\x22 fi\ -ll=\x22#1F1F1F\x22/>\x0a<\ -/svg>\x0a\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\ +\x0a\x0d\x0a\ \x00\x00\x05O\ <\ svg width=\x2240\x22 h\ @@ -865,31 +688,6 @@ 133 20.0001 6.11\ 133Z\x22 fill=\x22blac\ k\x22/>\x0d\x0a\x0d\x0a\ -\x00\x00\x01b\ -<\ -svg width=\x2222\x22 h\ -eight=\x2222\x22 viewB\ -ox=\x220 0 22 22\x22\x0d\x0a\ - xmlns=\x22http\ -://www.w3.org/20\ -00/svg\x22\x0d\x0a sh\ -ape-rendering=\x22c\ -rispEdges\x22>\x0d\x0a\x0d\x0a \ - \x0d\x0a\x0d\x0a \ - \x0d\x0a\x0d\ -\x0a\ \x00\x00\x08+\ <\ svg width=\x2236\x22 h\ @@ -1602,43 +1400,6 @@ 9.83Zm-293.33 60\ 8v-586.66 586.66\ Z\x22/>\ -\x00\x00\x02/\ -<\ -svg width=\x2240\x22 h\ -eight=\x2240\x22 viewB\ -ox=\x220 0 40 40\x22 f\ -ill=\x22none\x22 xmlns\ -=\x22http://www.w3.\ -org/2000/svg\x22>\x0d\x0a\ -\x0d\x0a\x0d\x0a\ \x00\x00\x02\x95\ <\ ?xml version=\x221.\ @@ -1683,7 +1444,45 @@ 6\x22 r=\x224.2\x22>\x0a\x0d\x0a\x0d\x0a\x0d\ -\x00\x00\x01\x9d\ +\x00\x00\x025\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x224\ +0px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2240px\x22 fill=\ +\x22#FFFFFF\x22>\ +\x00\x00\x01\xa2\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ @@ -1705,13 +1504,792 @@ q0 27.5-19.58 47\ .09Q800.83-120 7\ 73.33-120H186.67\ -Zm0-204.67v138h5\ -86.66v-138H186.6\ -7Zm0-66.66h586.6\ -6v-382H186.67v38\ -2Zm0 66.66v138-1\ -38Z\x22/>\ -\x00\x00\x01\xa2\ +Zm138-66.67v-586\ +.66h-138v586.66h\ +138Zm66.66 0h382\ +v-586.66h-382v58\ +6.66Zm-66.66 0h-\ +138 138Z\x22/>\ +\x00\x00\x0d\xc5\ +<\ +svg width=\x2224\x22 h\ +eight=\x2224\x22 viewB\ +ox=\x220 0 24 24\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a<\ +path d=\x22M9.75419\ + 10.6202H8.07738\ +C8.05502 10.448 \ +8.00919 10.2926 \ +7.93988 10.154C7\ +.87057 10.0154 7\ +.77891 9.89691 7\ +.66488 9.79854C7\ +.55086 9.70017 7\ +.4156 9.62527 7.\ +25909 9.57385C7.\ +10483 9.52019 6.\ +93379 9.49336 6.\ +74599 9.49336C6.\ +41287 9.49336 6.\ +12557 9.57496 5.\ +88411 9.73817C5.\ +64489 9.90138 5.\ +46044 10.1373 5.\ +33076 10.4458C5.\ +20333 10.7543 5.\ +13961 11.1277 5.\ +13961 11.5659C5.\ +13961 12.022 5.2\ +0444 12.4043 5.3\ +3412 12.7128C5.4\ +6603 13.0191 5.6\ +5048 13.2505 5.8\ +8746 13.407C6.12\ +669 13.5613 6.40\ +951 13.6384 6.73\ +593 13.6384C6.91\ +926 13.6384 7.08\ +582 13.615 7.235\ +62 13.568C7.3876\ +5 13.5211 7.5206\ +8 13.4529 7.6347\ + 13.3634C7.75096\ + 13.2718 7.84598\ + 13.1611 7.91976\ + 13.0314C7.99577\ + 12.8995 8.04831\ + 12.7508 8.07738\ + 12.5854L9.75419\ + 12.5955C9.72512\ + 12.8995 9.63681\ + 13.1991 9.48925\ + 13.4942C9.34393\ + 13.7893 9.14383\ + 14.0588 8.88895\ + 14.3024C8.63408\ + 14.5439 8.32331\ + 14.7362 7.95665\ + 14.8793C7.59222\ + 15.0224 7.17414\ + 15.0939 6.70239\ + 15.0939C6.08086\ + 15.0939 5.52416\ + 14.9575 5.03229\ + 14.6848C4.54266\ + 14.4098 4.15588\ + 14.0096 3.87194\ + 13.4842C3.588 1\ +2.9588 3.44603 1\ +2.3193 3.44603 1\ +1.5659C3.44603 1\ +0.8102 3.59024 1\ +0.1697 3.87865 9\ +.64427C4.16706 9\ +.11887 4.5572 8.\ +71979 5.04906 8.\ +44703C5.54092 8.\ +17427 6.09204 8.\ +03789 6.70239 8.\ +03789C7.11824 8.\ +03789 7.50279 8.\ +09602 7.85604 8.\ +21228C8.20929 8.\ +3263 8.52005 8.4\ +9398 8.78834 8.7\ +1532C9.05663 8.9\ +3442 9.27462 9.2\ +0383 9.4423 9.52\ +354C9.60998 9.84\ +325 9.71394 10.2\ +088 9.75419 10.6\ +202ZM13.8833 7.8\ +0984L11.6699 16.\ +0329H10.2715L12.\ +4849 7.80984H13.\ +8833ZM18.207 10.\ +1909C18.1846 9.9\ +4498 18.0851 9.7\ +5382 17.9085 9.6\ +1744C17.7341 9.4\ +7883 17.4848 9.4\ +0952 17.1607 9.4\ +0952C16.946 9.40\ +952 16.7672 9.43\ +747 16.6241 9.49\ +336C16.481 9.549\ +25 16.3737 9.626\ +39 16.3021 9.724\ +76C16.2306 9.820\ +9 16.1937 9.9315\ +7 16.1915 10.056\ +8C16.187 10.1596\ + 16.2071 10.2502\ + 16.2518 10.3284\ +C16.2988 10.4067\ + 16.3658 10.476 \ +16.453 10.5363C1\ +6.5425 10.5945 1\ +6.6498 10.6459 1\ +6.775 10.6906C16\ +.9002 10.7353 17\ +.041 10.7744 17.\ +1975 10.808L17.7\ +878 10.9421C18.1\ +276 11.0159 18.4\ +272 11.1143 18.6\ +865 11.2372C18.9\ +481 11.3602 19.1\ +672 11.5066 19.3\ +439 11.6766C19.5\ +227 11.8465 19.6\ +58 12.0421 19.74\ +96 12.2634C19.84\ +13 12.4848 19.88\ +83 12.733 19.890\ +5 13.008C19.8883\ + 13.4417 19.7787\ + 13.8139 19.5618\ + 14.1247C19.345 \ +14.4355 19.0331 \ +14.6736 18.6262 \ +14.839C18.2215 1\ +5.0045 17.733 15\ +.0872 17.1607 15\ +.0872C16.5861 15\ +.0872 16.0853 15\ +.0011 15.6582 14\ +.829C15.2312 14.\ +6568 14.8992 14.\ +3952 14.6622 14.\ +0442C14.4252 13.\ +6932 14.3034 13.\ +2494 14.2967 12.\ +7128H15.8863C15.\ +8997 12.9342 15.\ +9589 13.1186 16.\ +064 13.2662C16.1\ +691 13.4137 16.3\ +133 13.5255 16.4\ +966 13.6015C16.6\ +822 13.6776 16.8\ +968 13.7156 17.1\ +405 13.7156C17.3\ +641 13.7156 17.5\ +541 13.6854 17.7\ +106 13.625C17.86\ +94 13.5647 17.99\ +12 13.4808 18.07\ +62 13.3735C18.16\ +11 13.2662 18.20\ +47 13.1432 18.20\ +7 13.0046C18.204\ +7 12.8749 18.164\ +5 12.7643 18.086\ +2 12.6726C18.008\ + 12.5787 17.8873\ + 12.4982 17.7241\ + 12.4311C17.5631\ + 12.3618 17.3574\ + 12.2981 17.107 \ +12.24L16.3893 12\ +.0723C15.7946 11\ +.9359 15.3262 11\ +.7157 14.9842 11\ +.4116C14.6421 11\ +.1053 14.4722 10\ +.6917 14.4744 10\ +.1708C14.4722 9.\ +746 14.5862 9.37\ +375 14.8165 9.05\ +404C15.0468 8.73\ +432 15.3653 8.48\ +504 15.7723 8.30\ +618C16.1792 8.12\ +732 16.6431 8.03\ +789 17.164 8.037\ +89C17.6961 8.037\ +89 18.1578 8.128\ +44 18.549 8.3095\ +3C18.9425 8.4883\ +9 19.2477 8.7399\ +1 19.4646 9.0641\ +C19.6815 9.38828\ + 19.7921 9.76388\ + 19.7966 10.1909\ +H18.207Z\x22 fill=\x22\ +#999999\x22/>\x0d\x0a\x0d\x0a\ +\x00\x00\x01\x9e\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#000000\x22>\ +\x00\x00\x02-\ +<\ +svg width=\x2240\x22 h\ +eight=\x2240\x22 viewB\ +ox=\x220 0 40 40\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a\x0d\x0a\ +\x00\x00\x08\x9b\ +<\ +svg width=\x2224\x22 h\ +eight=\x2224\x22 viewB\ +ox=\x220 0 24 24\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a\ +\x0d\x0a\x0d\x0a\ +\x00\x00\x01\x05\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#999999\x22>\ +\x00\x00\x01T\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#999999\x22>\ +\x00\x00\x02/\ +<\ +svg width=\x2240\x22 h\ +eight=\x2240\x22 viewB\ +ox=\x220 0 40 40\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a\x0d\x0a\ +\x00\x00\x0d\xc1\ +<\ +svg width=\x2224\x22 h\ +eight=\x2224\x22 viewB\ +ox=\x220 0 24 24\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a\x0d\x0a\x0d\x0a\ +\ +\x00\x00\x01\x9e\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#999999\x22>\ +\x00\x00\x01\x05\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#000000\x22>\ +\x00\x00\x01\xa4\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ @@ -1733,51 +2311,177 @@ q0 27.5-19.58 47\ .09Q800.83-120 7\ 73.33-120H186.67\ -Zm138-66.67v-586\ -.66h-138v586.66h\ -138Zm66.66 0h382\ +Zm448.66-66.67h1\ +38v-586.66h-138v\ +586.66Zm-66.66 0\ v-586.66h-382v58\ -6.66Zm-66.66 0h-\ -138 138Z\x22/>\ -\x00\x00\x025\ +6.66h382Zm66.66 \ +0h138-138Z\x22/>\ +\x00\x00\x01T\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ -0/svg\x22 height=\x224\ -0px\x22 viewBox=\x220 \ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ -960 960 960\x22 wi\ -dth=\x2240px\x22 fill=\ -\x22#FFFFFF\x22>\ +dth=\x2224px\x22 fill=\ +\x22#000000\x22>\ +\x00\x00\x08\x9f\ +<\ +svg width=\x2224\x22 h\ +eight=\x2224\x22 viewB\ +ox=\x220 0 24 24\x22 f\ +ill=\x22none\x22 xmlns\ +=\x22http://www.w3.\ +org/2000/svg\x22>\x0d\x0a\ +\x0d\x0a<\ +path d=\x22M3.27404\ + 9.87423V8.62238\ +H8.6645V9.87423H\ +6.73066V15H5.210\ +99V9.87423H3.274\ +04ZM15.1457 11.8\ +112C15.1457 12.5\ +129 15.0107 13.1\ +077 14.7408 13.5\ +956C14.4709 14.0\ +834 14.1056 14.4\ +54 13.6447 14.70\ +73C13.1859 14.96\ +06 12.671 15.087\ +2 12.1001 15.087\ +2C11.5271 15.087\ +2 11.0112 14.959\ +5 10.5524 14.704\ +2C10.0936 14.448\ +8 9.72925 14.078\ +2 9.45937 13.592\ +4C9.19156 13.104\ +6 9.05765 12.510\ +8 9.05765 11.811\ +2C9.05765 11.109\ +5 9.19156 10.514\ +7 9.45937 10.026\ +8C9.72925 9.5389\ +5 10.0936 9.1683\ +8 10.5524 8.9151\ +C11.0112 8.66182\ + 11.5271 8.53518\ + 12.1001 8.53518\ +C12.671 8.53518 \ +13.1859 8.66182 \ +13.6447 8.9151C1\ +4.1056 9.16838 1\ +4.4709 9.53895 1\ +4.7408 10.0268C1\ +5.0107 10.5147 1\ +5.1457 11.1095 1\ +5.1457 11.8112ZM\ +13.5699 11.8112C\ +13.5699 11.396 1\ +3.5108 11.0451 1\ +3.3924 10.7586C1\ +3.2762 10.4721 1\ +3.108 10.2552 12\ +.888 10.1078C12.\ +67 9.96039 12.40\ +74 9.88669 12.10\ +01 9.88669C11.79\ +49 9.88669 11.53\ +23 9.96039 11.31\ +22 10.1078C11.09\ +22 10.2552 10.92\ +3 10.4721 10.804\ +6 10.7586C10.688\ +4 11.0451 10.630\ +3 11.396 10.6303\ + 11.8112C10.6303\ + 12.2264 10.6884\ + 12.5773 10.8046\ + 12.8637C10.923 \ +13.1502 11.0922 \ +13.3672 11.3122 \ +13.5146C11.5323 \ +13.662 11.7949 1\ +3.7357 12.1001 1\ +3.7357C12.4074 1\ +3.7357 12.67 13.\ +662 12.888 13.51\ +46C13.108 13.367\ +2 13.2762 13.150\ +2 13.3924 12.863\ +7C13.5108 12.577\ +3 13.5699 12.226\ +4 13.5699 11.811\ +2ZM16.0456 15V8.\ +62238H18.6801C19\ +.1576 8.62238 19\ +.5697 8.7158 19.\ +9164 8.90264C20.\ +2652 9.08741 20.\ +5341 9.34588 20.\ +723 9.67805C20.9\ +119 10.0081 21.0\ +064 10.3922 21.0\ +064 10.8303C21.0\ +064 11.2704 20.9\ +098 11.6555 20.7\ +167 11.9856C20.5\ +257 12.3136 20.2\ +527 12.5679 19.8\ +977 12.7485C19.5\ +427 12.9291 19.1\ +213 13.0194 18.6\ +334 13.0194H17.0\ +079V11.805H18.34\ +69C18.5795 11.80\ +5 18.7736 11.764\ +5 18.9293 11.683\ +5C19.087 11.6025\ + 19.2064 11.4894\ + 19.2874 11.3441\ +C19.3683 11.1967\ + 19.4088 11.0254\ + 19.4088 10.8303\ +C19.4088 10.633 \ +19.3683 10.4628 \ +19.2874 10.3195C\ +19.2064 10.1742 \ +19.087 10.0621 1\ +8.9293 9.98323C1\ +8.7715 9.90434 1\ +8.5774 9.86489 1\ +8.3469 9.86489H1\ +7.5871V15H16.045\ +6Z\x22 fill=\x22#99999\ +9\x22/>\x0d\x0a\x0d\x0a\ " qt_resource_name = b"\ @@ -1793,29 +2497,18 @@ \x03\x9b1c\ \x00l\ \x00i\x00g\x00h\x00t\x00s\x00t\x00y\x00l\x00e\x00.\x00q\x00s\x00s\ +\x00\x08\ +\x0f\xcdV.\ +\x00v\ +\x00i\x00e\x00w\x00_\x00b\x00t\x00n\ \x00\x0b\ \x01d\x8d\x87\ \x00c\ \x00h\x00e\x00c\x00k\x00e\x00d\x00.\x00s\x00v\x00g\ -\x00\x1b\ -\x0aa\xaa'\ -\x00i\ -\x00n\x00p\x00u\x00t\x00_\x00d\x00o\x00c\x00k\x00_\x00a\x00c\x00t\x00i\x00v\x00e\ -\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ -\x00\x17\ -\x00Fu\xc7\ -\x00t\ -\x00o\x00p\x00_\x00v\x00i\x00e\x00w\x00_\x00o\x00p\x00e\x00n\x00_\x00l\x00i\x00g\ -\x00h\x00t\x00.\x00s\x00v\x00g\ \x00\x0e\ \x06\xb1\x9b\x07\ \x00O\ \x00s\x00d\x00a\x00g\x00_\x00l\x00o\x00g\x00o\x00.\x00s\x00v\x00g\ -\x00\x19\ -\x06\xee\xf2\xc7\ -\x00t\ -\x00o\x00p\x00_\x00v\x00i\x00e\x00w\x00_\x00c\x00l\x00o\x00s\x00e\x00d\x00_\x00l\ -\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ \x00\x10\ \x020hg\ \x00m\ @@ -1824,30 +2517,15 @@ \x0d\xd6\xeag\ \x00l\ \x00o\x00c\x00k\x00_\x00c\x00l\x00o\x00s\x00e\x00.\x00s\x00v\x00g\ -\x00\x1a\ -\x0b}\x5cG\ -\x00l\ -\x00o\x00g\x00s\x00_\x00d\x00o\x00c\x00k\x00_\x00a\x00c\x00t\x00i\x00v\x00e\x00_\ -\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ \x00\x13\ \x0cPg\xa7\ \x00a\ \x00r\x00r\x00o\x00w\x00_\x00d\x00o\x00w\x00n\x00_\x00d\x00a\x00r\x00k\x00.\x00s\ \x00v\x00g\ -\x00\x1e\ -\x08a\xb9\xc7\ -\x00o\ -\x00u\x00t\x00p\x00u\x00t\x00_\x00d\x00o\x00c\x00k\x00_\x00i\x00n\x00a\x00c\x00t\ -\x00i\x00v\x00e\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ \x00\x0a\ \x0f\xec\x03\xe7\ \x00d\ \x00e\x00s\x00i\x00g\x00n\x00.\x00s\x00v\x00g\ -\x00\x1c\ -\x0f/}G\ -\x00c\ -\x00r\x00o\x00s\x00s\x00_\x00s\x00e\x00c\x00t\x00i\x00o\x00n\x00_\x00o\x00p\x00e\ -\x00n\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ \x00\x11\ \x0c\xd8Fg\ \x00f\ @@ -1858,11 +2536,6 @@ \x00a\ \x00r\x00r\x00o\x00w\x00_\x00u\x00p\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\ \x00g\ -\x00\x1e\ -\x09\xc4m'\ -\x00c\ -\x00r\x00o\x00s\x00s\x00_\x00s\x00e\x00c\x00t\x00i\x00o\x00n\x00_\x00c\x00l\x00o\ -\x00s\x00e\x00d\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ \x00\x16\ \x0e\x16='\ \x00i\ @@ -1900,96 +2573,160 @@ \x00d\ \x00e\x00s\x00i\x00g\x00n\x00_\x00r\x00e\x00p\x00o\x00r\x00t\x00.\x00s\x00v\x00g\ \ -\x00\x1c\ -\x0ap\xe4'\ -\x00o\ -\x00u\x00t\x00p\x00u\x00t\x00_\x00d\x00o\x00c\x00k\x00_\x00a\x00c\x00t\x00i\x00v\ -\x00e\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ \x00\x0f\ \x06\x94\x9a'\ \x00m\ \x00s\x00g\x00_\x00w\x00a\x00r\x00n\x00i\x00n\x00g\x00.\x00s\x00v\x00g\ -\x00\x1c\ -\x01\xd8[\xc7\ -\x00l\ -\x00o\x00g\x00s\x00_\x00d\x00o\x00c\x00k\x00_\x00i\x00n\x00a\x00c\x00t\x00i\x00v\ -\x00e\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ -\x00\x1d\ -\x0e\xaf\xb9\xe7\ -\x00i\ -\x00n\x00p\x00u\x00t\x00_\x00d\x00o\x00c\x00k\x00_\x00i\x00n\x00a\x00c\x00t\x00i\ -\x00v\x00e\x00_\x00l\x00i\x00g\x00h\x00t\x00.\x00s\x00v\x00g\ \x00\x08\ \x08\xc8U\xe7\ \x00s\ \x00a\x00v\x00e\x00.\x00s\x00v\x00g\ +\x00\x17\ +\x01\xa3I\xa7\ +\x00i\ +\x00n\x00p\x00u\x00t\x00_\x00d\x00o\x00c\x00k\x00_\x00i\x00n\x00a\x00c\x00t\x00i\ +\x00v\x00e\x00.\x00s\x00v\x00g\ +\x00\x1a\ +\x0e\xb3x\xe7\ +\x00c\ +\x00r\x00o\x00s\x00s\x00_\x00s\x00e\x00c\x00t\x00i\x00o\x00n\x00_\x00i\x00n\x00a\ +\x00c\x00t\x00i\x00v\x00e\x00.\x00s\x00v\x00g\ +\x00\x11\ +\x00\xec9\xc7\ +\x003\ +\x00d\x00_\x00c\x00a\x00d\x00_\x00a\x00c\x00t\x00i\x00v\x00e\x00.\x00s\x00v\x00g\ +\ +\x00\x15\ +\x03\xc8@G\ +\x00i\ +\x00n\x00p\x00u\x00t\x00_\x00d\x00o\x00c\x00k\x00_\x00a\x00c\x00t\x00i\x00v\x00e\ +\x00.\x00s\x00v\x00g\ +\x00\x13\ +\x04\xf7\x1f\x87\ +\x00t\ +\x00o\x00p\x00_\x00v\x00i\x00e\x00w\x00_\x00a\x00c\x00t\x00i\x00v\x00e\x00.\x00s\ +\x00v\x00g\ +\x00\x12\ +\x06\x85\x01\xc7\ +\x00p\ +\x00l\x00o\x00t\x00s\x00_\x00i\x00n\x00a\x00c\x00t\x00i\x00v\x00e\x00.\x00s\x00v\ +\x00g\ +\x00\x16\ +\x0e\x1cx\xa7\ +\x00l\ +\x00o\x00g\x00s\x00_\x00d\x00o\x00c\x00k\x00_\x00i\x00n\x00a\x00c\x00t\x00i\x00v\ +\x00e\x00.\x00s\x00v\x00g\ +\x00\x16\ +\x03\xd0\xa7G\ +\x00o\ +\x00u\x00t\x00p\x00u\x00t\x00_\x00d\x00o\x00c\x00k\x00_\x00a\x00c\x00t\x00i\x00v\ +\x00e\x00.\x00s\x00v\x00g\ +\x00\x18\ +\x0bkPg\ +\x00c\ +\x00r\x00o\x00s\x00s\x00_\x00s\x00e\x00c\x00t\x00i\x00o\x00n\x00_\x00a\x00c\x00t\ +\x00i\x00v\x00e\x00.\x00s\x00v\x00g\ +\x00\x13\ +\x0dZ\xcf\xe7\ +\x003\ +\x00d\x00_\x00c\x00a\x00d\x00_\x00i\x00n\x00a\x00c\x00t\x00i\x00v\x00e\x00.\x00s\ +\x00v\x00g\ +\x00\x10\ +\x07\xf3b\x07\ +\x00p\ +\x00l\x00o\x00t\x00s\x00_\x00a\x00c\x00t\x00i\x00v\x00e\x00.\x00s\x00v\x00g\ +\x00\x18\ +\x0a\xc8I\xa7\ +\x00o\ +\x00u\x00t\x00p\x00u\x00t\x00_\x00d\x00o\x00c\x00k\x00_\x00i\x00n\x00a\x00c\x00t\ +\x00i\x00v\x00e\x00.\x00s\x00v\x00g\ +\x00\x14\ +\x0bK\xfbg\ +\x00l\ +\x00o\x00g\x00s\x00_\x00d\x00o\x00c\x00k\x00_\x00a\x00c\x00t\x00i\x00v\x00e\x00.\ +\x00s\x00v\x00g\ +\x00\x15\ +\x02\x80\x87\xc7\ +\x00t\ +\x00o\x00p\x00_\x00v\x00i\x00e\x00w\x00_\x00i\x00n\x00a\x00c\x00t\x00i\x00v\x00e\ +\x00.\x00s\x00v\x00g\ " qt_resource_struct = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1f\ +\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00$\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x03\ +\x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x007\x18\ +\x00\x00\x01\x9b\x13E\x17;\ +\x00\x00\x00^\x00\x00\x00\x00\x00\x01\x00\x00\x04\xdc\ +\x00\x00\x01\x9b\x13E\x179\ +\x00\x00\x01\xee\x00\x00\x00\x00\x00\x01\x00\x009\xfa\ +\x00\x00\x01\x9b\x13E\x179\ +\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x13\xd1\ +\x00\x00\x01\x9c\xcem|j\ +\x00\x00\x02t\x00\x00\x00\x00\x00\x01\x00\x00L\xae\ +\x00\x00\x01\x9b\x13E\x179\ +\x00\x00\x02P\x00\x00\x00\x00\x00\x01\x00\x00F\x89\ +\x00\x00\x01\x9c\xcem|k\ +\x00\x00\x02\xc4\x00\x00\x00\x00\x00\x01\x00\x00T\xc0\ +\x00\x00\x01\x9c\xcem|l\ +\x00\x00\x00z\x00\x00\x00\x00\x00\x01\x00\x00\x05\x92\ +\x00\x00\x01\x9b\x13\xd0_\xa8\ +\x00\x00\x02\x9c\x00\x00\x00\x00\x00\x01\x00\x00R\x01\ +\x00\x00\x01\x9b\x13E\x179\ +\x00\x00\x02\xe8\x00\x00\x00\x00\x00\x01\x00\x00WY\ +\x00\x00\x01\x9b\x13E\x17;\ +\x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x00$\x09\ +\x00\x00\x01\x9b\x13E\x179\ +\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xff\ +\x00\x00\x01\x9b\x13E\x179\ +\x00\x00\x01*\x00\x00\x00\x00\x00\x01\x00\x00!\x0b\ +\x00\x00\x01\x9di#\xc4\x14\ +\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00 - - - - - diff --git a/src/osdagbridge/desktop/resources/vectors/cross_section_open_light.svg b/src/osdagbridge/desktop/resources/vectors/cross_section_open_light.svg deleted file mode 100644 index f02a29d45..000000000 --- a/src/osdagbridge/desktop/resources/vectors/cross_section_open_light.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/src/osdagbridge/desktop/resources/vectors/logs_dock_active_light.svg b/src/osdagbridge/desktop/resources/vectors/logs_dock_active_light.svg deleted file mode 100644 index 5d23c8558..000000000 --- a/src/osdagbridge/desktop/resources/vectors/logs_dock_active_light.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/osdagbridge/desktop/resources/vectors/logs_dock_inactive_light.svg b/src/osdagbridge/desktop/resources/vectors/logs_dock_inactive_light.svg deleted file mode 100644 index 56e273486..000000000 --- a/src/osdagbridge/desktop/resources/vectors/logs_dock_inactive_light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/vectors/top_view_closed_light.svg b/src/osdagbridge/desktop/resources/vectors/top_view_closed_light.svg deleted file mode 100644 index 3fff58f34..000000000 --- a/src/osdagbridge/desktop/resources/vectors/top_view_closed_light.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/src/osdagbridge/desktop/resources/vectors/top_view_open_light.svg b/src/osdagbridge/desktop/resources/vectors/top_view_open_light.svg deleted file mode 100644 index fca67dcf8..000000000 --- a/src/osdagbridge/desktop/resources/vectors/top_view_open_light.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/3d_cad_active.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/3d_cad_active.svg new file mode 100644 index 000000000..3cc4ce7b6 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/3d_cad_active.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/3d_cad_inactive.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/3d_cad_inactive.svg new file mode 100644 index 000000000..fc36230a7 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/3d_cad_inactive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/cross_section_active.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/cross_section_active.svg new file mode 100644 index 000000000..daf4dfcb9 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/cross_section_active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/cross_section_inactive.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/cross_section_inactive.svg new file mode 100644 index 000000000..d08ece725 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/cross_section_inactive.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/input_dock_active_light.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/input_dock_active.svg similarity index 100% rename from src/osdagbridge/desktop/resources/vectors/input_dock_active_light.svg rename to src/osdagbridge/desktop/resources/vectors/view_btn/input_dock_active.svg diff --git a/src/osdagbridge/desktop/resources/vectors/input_dock_inactive_light.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/input_dock_inactive.svg similarity index 100% rename from src/osdagbridge/desktop/resources/vectors/input_dock_inactive_light.svg rename to src/osdagbridge/desktop/resources/vectors/view_btn/input_dock_inactive.svg diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/logs_dock_active.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/logs_dock_active.svg new file mode 100644 index 000000000..39094327f --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/logs_dock_active.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/logs_dock_inactive.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/logs_dock_inactive.svg new file mode 100644 index 000000000..3a832868c --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/logs_dock_inactive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/vectors/output_dock_active_light.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/output_dock_active.svg similarity index 100% rename from src/osdagbridge/desktop/resources/vectors/output_dock_active_light.svg rename to src/osdagbridge/desktop/resources/vectors/view_btn/output_dock_active.svg diff --git a/src/osdagbridge/desktop/resources/vectors/output_dock_inactive_light.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/output_dock_inactive.svg similarity index 100% rename from src/osdagbridge/desktop/resources/vectors/output_dock_inactive_light.svg rename to src/osdagbridge/desktop/resources/vectors/view_btn/output_dock_inactive.svg diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg new file mode 100644 index 000000000..5c8b76c17 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_active.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg new file mode 100644 index 000000000..ce8b8299f --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/plots_inactive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/top_view_active.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/top_view_active.svg new file mode 100644 index 000000000..1ba66e57a --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/top_view_active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/osdagbridge/desktop/resources/vectors/view_btn/top_view_inactive.svg b/src/osdagbridge/desktop/resources/vectors/view_btn/top_view_inactive.svg new file mode 100644 index 000000000..6b2f62f83 --- /dev/null +++ b/src/osdagbridge/desktop/resources/vectors/view_btn/top_view_inactive.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py index de8bda925..b29acce39 100644 --- a/src/osdagbridge/desktop/ui/docks/cad_dual_view.py +++ b/src/osdagbridge/desktop/ui/docks/cad_dual_view.py @@ -75,30 +75,30 @@ def setup_ui(self): layout.addWidget(self.splitter) def set_cross_section_visible(self, visible): - """Set cross-section view visibility (called from template_page)""" self.cross_visible = visible - if self.cross_visible: - self.cross_scroll.show() - if not self.top_visible: - self.splitter.setSizes([self.height(), 0]) - else: - self.splitter.setSizes([self.height()//2, self.height()//2]) - else: - self.cross_scroll.hide() - self.splitter.setSizes([0, self.height()]) - + self.cross_scroll.setVisible(visible) + self._restore_splitter() + def set_top_view_visible(self, visible): - """Set top view visibility (called from template_page)""" self.top_visible = visible - if self.top_visible: - self.top_scroll.show() - if not self.cross_visible: - self.splitter.setSizes([0, self.height()]) - else: - self.splitter.setSizes([self.height()//2, self.height()//2]) + self.top_scroll.setVisible(visible) + self._restore_splitter() + + def _restore_splitter(self): + """Reset splitter to correct ratio based on which views are visible.""" + if self.cross_visible and self.top_visible: + # Both visible — equal split via stretch factors, no fixed sizes + self.splitter.setStretchFactor(0, 1) + self.splitter.setStretchFactor(1, 1) + self.splitter.setSizes([1, 1]) # relative, Qt normalises to available height + elif self.cross_visible: + self.splitter.setStretchFactor(0, 1) + self.splitter.setStretchFactor(1, 0) + self.splitter.setSizes([1, 0]) else: - self.top_scroll.hide() - self.splitter.setSizes([self.height(), 0]) + self.splitter.setStretchFactor(0, 0) + self.splitter.setStretchFactor(1, 1) + self.splitter.setSizes([0, 1]) # Cross-section zoom methods def cross_zoom_in(self): diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index e0cc06bc8..5808c46d1 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -27,9 +27,6 @@ def __init__(self, title: str, backend: object, parent=None): # Initialised from DEFAULTS_DICT; updated live as the user edits fields. self.input_dict = dict(DEFAULTS_DICT) - # one-time log splitter initialization flag - self._log_splitter_initialized = False - self.setWindowTitle(title) self.setStyleSheet( """ @@ -101,25 +98,6 @@ def __init__(self, title: str, backend: object, parent=None): # Must be initialized BEFORE init_ui because init_ui calls update_cad_from_inputs self.cad_state = {} - self.init_ui() - - - def _init_log_splitter_once(self): - if self._log_splitter_initialized: - return - - splitter = self.cad_log_splitter - h = splitter.height() - if h <= 0: - return - - splitter.setSizes([ - int(h * 0.8), # CAD - int(h * 0.2), # Logs - ]) - self._log_splitter_initialized = True - - def init_ui(self): # Docking icons Parent class class ClickableSvgWidget(QSvgWidget): @@ -156,10 +134,18 @@ def mousePressEvent(self, event): control_button_layout.setSpacing(10) control_button_layout.setContentsMargins(5,5,5,5) + # Input Dock + self.input_dock_control = ClickableSvgWidget() + self.input_dock_control.setFixedSize(18, 18) + self.input_dock_control.load(":/vectors/view_btn/input_dock_active.svg") + self.input_dock_control.clicked.connect(self.input_dock_toggle) + self.input_dock_active = True + control_button_layout.addWidget(self.input_dock_control) + # Cross-section view control self.cross_section_control = ClickableSvgWidget() self.cross_section_control.setFixedSize(18, 18) - self.cross_section_control.load(":/vectors/cross_section_open_light.svg") + self.cross_section_control.load(":/vectors/view_btn/cross_section_active.svg") self.cross_section_control.clicked.connect(self.cross_section_toggle) self.cross_section_active = True control_button_layout.addWidget(self.cross_section_control) @@ -167,27 +153,37 @@ def mousePressEvent(self, event): # Top view control self.top_view_control = ClickableSvgWidget() self.top_view_control.setFixedSize(18, 18) - self.top_view_control.load(":/vectors/top_view_open_light.svg") + self.top_view_control.load(":/vectors/view_btn/top_view_active.svg") self.top_view_control.clicked.connect(self.top_view_toggle) self.top_view_active = True control_button_layout.addWidget(self.top_view_control) - self.input_dock_control = ClickableSvgWidget() - self.input_dock_control.setFixedSize(18, 18) - self.input_dock_control.load(":/vectors/input_dock_active_light.svg") - self.input_dock_control.clicked.connect(self.input_dock_toggle) - self.input_dock_active = True - control_button_layout.addWidget(self.input_dock_control) - + # Logs Dock Control self.log_dock_control = ClickableSvgWidget() - self.log_dock_control.load(":/vectors/logs_dock_inactive_light.svg") + self.log_dock_control.load(":/vectors/view_btn/logs_dock_inactive.svg") self.log_dock_control.setFixedSize(18, 18) self.log_dock_control.clicked.connect(self.logs_dock_toggle) self.log_dock_active = False control_button_layout.addWidget(self.log_dock_control) + # 3D Cad Control + self.cad_3d_control = ClickableSvgWidget() + self.cad_3d_control.load(":/vectors/view_btn/3d_cad_inactive.svg") + self.cad_3d_control.setFixedSize(18, 18) + self.cad_3d_control.clicked.connect(self.cad_3d_view_toggle) + self.cad_3d_view_active = False + control_button_layout.addWidget(self.cad_3d_control) + + # Plots Control + self.plots_control = ClickableSvgWidget() + self.plots_control.load(":/vectors/view_btn/plots_inactive.svg") + self.plots_control.setFixedSize(18, 18) + self.plots_control.clicked.connect(self.plots_view_toggle) + self.plots_view_active = False + control_button_layout.addWidget(self.plots_control) + self.output_dock_control = ClickableSvgWidget() - self.output_dock_control.load(":/vectors/output_dock_inactive_light.svg") + self.output_dock_control.load(":/vectors/view_btn/output_dock_inactive.svg") self.output_dock_control.setFixedSize(18, 18) self.output_dock_control.clicked.connect(self.output_dock_toggle) self.output_dock_active = False @@ -236,6 +232,16 @@ def mousePressEvent(self, event): ) self.cad_log_splitter.addWidget(self.cad_comp_widget) + # 3D CAD placeholder (mutually exclusive with dual view + plots) + self.cad_3d_widget = CentralPlaceholderWidget("3D CAD Here") + self.cad_3d_widget.setVisible(False) + self.cad_log_splitter.addWidget(self.cad_3d_widget) + + # Plots placeholder (mutually exclusive with dual view + 3d cad) + self.plots_widget = CentralPlaceholderWidget("Analysis Plots Here") + self.plots_widget.setVisible(False) + self.cad_log_splitter.addWidget(self.plots_widget) + # Log dock (inside splitter) self.logs_dock = LogDock(parent=self) self.logs_dock.setVisible(False) @@ -245,10 +251,6 @@ def mousePressEvent(self, event): self.logs_dock.setMinimumHeight(80) self.cad_log_splitter.addWidget(self.logs_dock) - # Stretch ratio: CAD > Logs - self.cad_log_splitter.setStretchFactor(0, 8) - self.cad_log_splitter.setStretchFactor(1, 1) - central_V_layout.addWidget(self.cad_log_splitter) # -------------------------------------------------------------- @@ -294,6 +296,10 @@ def common_design_func(self, trigger: str): """ Trigger belongs to one of ["Design", "Save", "Additional Inputs"] """ + print(f"@plot:{self.plots_view_active}") + print(f"@3d:{self.cad_3d_view_active}") + print(f"@top:{self.top_view_active}") + print(f"@c/s:{self.cross_section_active}") if trigger == "Design": # Collect all the values from input Dock print(f"@@input_dictionary: {self.input_dict}") @@ -361,50 +367,180 @@ def update_cad_from_inputs(self): #---------------------------------Docking-Icons-Functionality-START---------------------------------------------- + def input_dock_toggle(self): + self.input_dock.toggle_input_dock() + + def output_dock_toggle(self): + self.output_dock.toggle_output_dock() + def cross_section_toggle(self): - """Toggle cross-section view visibility""" + # If 3D CAD or Plots is active, restore dual view instead of toggling + if self.cad_3d_view_active or self.plots_view_active: + # Deactivate 3D CAD & update icon + self.cad_3d_view_active = False + self.cad_3d_control.load(":/vectors/view_btn/3d_cad_inactive.svg") + # Deactivate Plots & update icon + self.plots_view_active = False + self.plots_control.load(":/vectors/view_btn/plots_inactive.svg") + # Restore Cross Section as active & update icon + self.cross_section_active = True + self.cross_section_control.load(":/vectors/view_btn/cross_section_active.svg") + # Restore Top View as active & update icon + self.top_view_active = True + self.top_view_control.load(":/vectors/view_btn/top_view_active.svg") + # Switch central area back to dual view widget + self._set_central_view('dual') + # Explicitly show both sub-views inside BridgeDualCADWidget + # (they were hidden when the competing view was activated) + self.cad_comp_widget.set_cross_section_visible(True) + self.cad_comp_widget.set_top_view_visible(True) + return + + # Normal toggle within dual view self.cross_section_active = not self.cross_section_active - if self.cross_section_active: - self.cross_section_control.load(":/vectors/cross_section_open_light.svg") + self.cross_section_control.load(":/vectors/view_btn/cross_section_active.svg") else: - self.cross_section_control.load(":/vectors/cross_section_closed_light.svg") - - # Update CAD widget - if hasattr(self, 'cad_comp_widget'): - self.cad_comp_widget.set_cross_section_visible(self.cross_section_active) - + self.cross_section_control.load(":/vectors/view_btn/cross_section_inactive.svg") + self.cad_comp_widget.set_cross_section_visible(self.cross_section_active) + + def top_view_toggle(self): - """Toggle top view visibility""" + # If 3D CAD or Plots is active, restore dual view instead of toggling + if self.cad_3d_view_active or self.plots_view_active: + # Deactivate 3D CAD & update icon + self.cad_3d_view_active = False + self.cad_3d_control.load(":/vectors/view_btn/3d_cad_inactive.svg") + # Deactivate Plots & update icon + self.plots_view_active = False + self.plots_control.load(":/vectors/view_btn/plots_inactive.svg") + # Restore Top View as active & update icon + self.top_view_active = True + self.top_view_control.load(":/vectors/view_btn/top_view_active.svg") + # Restore Cross Section as active & update icon + self.cross_section_active = True + self.cross_section_control.load(":/vectors/view_btn/cross_section_active.svg") + # Switch central area back to dual view widget + self._set_central_view('dual') + # Explicitly show both sub-views inside BridgeDualCADWidget + # (they were hidden when the competing view was activated) + self.cad_comp_widget.set_cross_section_visible(True) + self.cad_comp_widget.set_top_view_visible(True) + return + + # Normal toggle within dual view self.top_view_active = not self.top_view_active - if self.top_view_active: - self.top_view_control.load(":/vectors/top_view_open_light.svg") + self.top_view_control.load(":/vectors/view_btn/top_view_active.svg") else: - self.top_view_control.load(":/vectors/top_view_closed_light.svg") - - # Update CAD widget - if hasattr(self, 'cad_comp_widget'): - self.cad_comp_widget.set_top_view_visible(self.top_view_active) + self.top_view_control.load(":/vectors/view_btn/top_view_inactive.svg") + self.cad_comp_widget.set_top_view_visible(self.top_view_active) + + + def cad_3d_view_toggle(self): + self.cad_3d_view_active = not self.cad_3d_view_active + + if self.cad_3d_view_active: + # 3D CAD is mutually exclusive — deactivate Plots & update icon + self.plots_view_active = False + self.plots_control.load(":/vectors/view_btn/plots_inactive.svg") + # Hide dual sub-views & update icons + self.cross_section_active = False + self.cross_section_control.load(":/vectors/view_btn/cross_section_inactive.svg") + self.top_view_active = False + self.top_view_control.load(":/vectors/view_btn/top_view_inactive.svg") + # Mark 3D CAD as active & update icon + self.cad_3d_control.load(":/vectors/view_btn/3d_cad_active.svg") + # Switch central area to 3D CAD widget + self._set_central_view('3d') + else: + # 3D CAD turned off — mark inactive & update icon + self.cad_3d_control.load(":/vectors/view_btn/3d_cad_inactive.svg") + # Restore dual view button states & update icons + self.cross_section_active = True + self.top_view_active = True + self.cross_section_control.load(":/vectors/view_btn/cross_section_active.svg") + self.top_view_control.load(":/vectors/view_btn/top_view_active.svg") + # Switch central area back to dual view widget + # widget has a real height when splitter sizes are calculated + self._set_central_view('dual') + # Explicitly show both sub-views inside BridgeDualCADWidget + self.cad_comp_widget.set_cross_section_visible(True) + self.cad_comp_widget.set_top_view_visible(True) + + + def plots_view_toggle(self): + self.plots_view_active = not self.plots_view_active + + if self.plots_view_active: + # Plots is mutually exclusive — deactivate 3D CAD & update icon + self.cad_3d_view_active = False + self.cad_3d_control.load(":/vectors/view_btn/3d_cad_inactive.svg") + # Hide dual sub-views & update icons + self.cross_section_active = False + self.cross_section_control.load(":/vectors/view_btn/cross_section_inactive.svg") + self.top_view_active = False + self.top_view_control.load(":/vectors/view_btn/top_view_inactive.svg") + # Mark Plots as active & update icon + self.plots_control.load(":/vectors/view_btn/plots_active.svg") + # Switch central area to Plots widget + self._set_central_view('plots') + else: + # Plots turned off — mark inactive & update icon + self.plots_control.load(":/vectors/view_btn/plots_inactive.svg") + # Restore dual view button states & update icons + self.cross_section_active = True + self.top_view_active = True + self.cross_section_control.load(":/vectors/view_btn/cross_section_active.svg") + self.top_view_control.load(":/vectors/view_btn/top_view_active.svg") + # Switch central area back to dual view widget + # widget has a real height when splitter sizes are calculated + self._set_central_view('dual') + # Explicitly show both sub-views inside BridgeDualCADWidget + self.cad_comp_widget.set_cross_section_visible(True) + self.cad_comp_widget.set_top_view_visible(True) - def input_dock_toggle(self): - self.input_dock.toggle_input_dock() - - def output_dock_toggle(self): - self.output_dock.toggle_output_dock() def logs_dock_toggle(self): self.log_dock_active = not self.log_dock_active - # >>> UPDATED: splitter-based show/hide + # Re-apply current central view so the vertical splitter ratio + # (4/5 active view : 1/5 log dock) is recalculated after show/hide + if self.cad_3d_view_active: + self._set_central_view('3d') + elif self.plots_view_active: + self._set_central_view('plots') + else: + self._set_central_view('dual') + + # Show/hide log dock & update icon if self.log_dock_active: self.logs_dock.show() - self.log_dock_control.load(":/vectors/logs_dock_active_light.svg") + self.log_dock_control.load(":/vectors/view_btn/logs_dock_active.svg") else: self.logs_dock.hide() - self.log_dock_control.load(":/vectors/logs_dock_inactive_light.svg") - - + self.log_dock_control.load(":/vectors/view_btn/logs_dock_inactive.svg") + + # Helper function to show and hide the 3D CAD | Plots | 2D CAD widgets + def _set_central_view(self, view: str): + # Show only the requested widget; hide the other two + self.cad_comp_widget.setVisible(view == 'dual') + self.cad_3d_widget.setVisible(view == '3d') + self.plots_widget.setVisible(view == 'plots') + + # Enforce 4:1 height ratio between active view and log dock + # Splitter index order: [dual(0), 3d(1), plots(2), logs(3)] + total = self.cad_log_splitter.height() + view_h = int(total * 4 / 5) + log_h = total - view_h + + if view == 'dual': + self.cad_log_splitter.setSizes([view_h, 0, 0, log_h]) + elif view == '3d': + self.cad_log_splitter.setSizes([0, view_h, 0, log_h]) + else: # plots + self.cad_log_splitter.setSizes([0, 0, view_h, log_h]) + def _position_log_dock(self): """Position log dock at bottom of central widget as overlay (max 1/5 height)""" if hasattr(self, 'logs_dock') and hasattr(self, 'cad_comp_widget'): @@ -416,12 +552,6 @@ def _position_log_dock(self): cad_geom.width(), log_height ) - - def resizeEvent(self, event): - """Reposition log dock on window resize""" - super().resizeEvent(event) - if hasattr(self, 'logs_dock') and self.logs_dock.isVisible(): - self._position_log_dock() def update_docking_icons(self, input_is_active=None, log_is_active=None, output_is_active=None): @@ -430,18 +560,18 @@ def update_docking_icons(self, input_is_active=None, log_is_active=None, output_ # Update and save control state self.input_dock_active = input_is_active if self.input_dock_active: - self.input_dock_control.load(":/vectors/input_dock_active_light.svg") + self.input_dock_control.load(":/vectors/view_btn/input_dock_active.svg") else: - self.input_dock_control.load(":/vectors/input_dock_inactive_light.svg") + self.input_dock_control.load(":/vectors/view_btn/input_dock_inactive.svg") # Update output dock icon if(output_is_active is not None): # Update and save control state self.output_dock_active = output_is_active if self.output_dock_active: - self.output_dock_control.load(":/vectors/output_dock_active_light.svg") + self.output_dock_control.load(":/vectors/view_btn/output_dock_active.svg") else: - self.output_dock_control.load(":/vectors/output_dock_inactive_light.svg") + self.output_dock_control.load(":/vectors/view_btn/output_dock_inactive.svg") # Update log dock icon if(log_is_active is not None): @@ -449,9 +579,9 @@ def update_docking_icons(self, input_is_active=None, log_is_active=None, output_ # Update and save control state self.logs_dock_active = log_is_active if self.log_dock_active: - self.log_dock_control.load(":/vectors/logs_dock_active_light.svg") + self.log_dock_control.load(":/vectors/view_btn/logs_dock_active.svg") else: - self.log_dock_control.load(":/vectors/logs_dock_inactive_light.svg") + self.log_dock_control.load(":/vectors/view_btn/logs_dock_inactive.svg") def toggle_animate(self, show: bool, dock: str = 'output', on_finished=None): sizes = self.splitter.sizes() @@ -613,10 +743,6 @@ def resizeEvent(self, event): if not self.isVisible() or self.signalsBlocked(): return - # >>> ADDED: one-time CAD–Log splitter initialization - if hasattr(self, 'cad_log_splitter'): - self._init_log_splitter_once() - # Check if splitter exists and has children try: if not hasattr(self, 'splitter') or self.splitter is None: @@ -887,4 +1013,18 @@ def __init__(self, parent): self.output_label = QSvgWidget(":/vectors/outputs_label_light.svg") output_layout.addWidget(self.output_label) - self.output_label.setFixedWidth(28) \ No newline at end of file + self.output_label.setFixedWidth(28) + +class CentralPlaceholderWidget(QWidget): + """ + Temporary placeholder for 3D CAD / Plots views. + Must be removed after CAD and Plot Integration. + """ + def __init__(self, text: str, parent=None): + super().__init__(parent) + layout = QVBoxLayout(self) + label = QLabel(text) + label.setAlignment(Qt.AlignCenter) + label.setStyleSheet("font-size: 18px; color: #90AF13; font-weight: bold;") + layout.addWidget(label) + self.setStyleSheet("background-color: #F8FAF0; border: 1px solid #90AF13;") \ No newline at end of file From 10298cc01fb236d9d8b00725d26f4f55f5988486 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Sun, 15 Mar 2026 03:15:19 +0530 Subject: [PATCH 127/225] Adding 3D CAD widget in template_page --- src/osdagbridge/desktop/ui/cad_3d.py | 9 +++------ src/osdagbridge/desktop/ui/template_page.py | 3 ++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/osdagbridge/desktop/ui/cad_3d.py b/src/osdagbridge/desktop/ui/cad_3d.py index 01d60fdde..c50ddcba0 100644 --- a/src/osdagbridge/desktop/ui/cad_3d.py +++ b/src/osdagbridge/desktop/ui/cad_3d.py @@ -31,7 +31,7 @@ from osdagbridge.desktop.ui.utils.custom_3dviewer import CustomViewer3d -class CAD3DWindow(QMainWindow): +class CAD3DWindow(QWidget): """ Main 3D CAD window for OsdagBridge. """ @@ -59,10 +59,8 @@ def __init__(self, parent=None): # UI SETUP def setup_ui(self): - central_widget = QWidget(self) - self.setCentralWidget(central_widget) - self.layout = QVBoxLayout(central_widget) + self.layout = QVBoxLayout(self) self.layout.setContentsMargins(0, 0, 0, 0) # Component selector @@ -530,13 +528,12 @@ def _on_click(self, component_key, clicked_cb, checked): model_cb.blockSignals(False) self.parent.show_full_model() - +# Standalone Testing---------------------------- def main(): app = QApplication(sys.argv) win = CAD3DWindow() win.show() sys.exit(app.exec()) - if __name__ == "__main__": main() \ No newline at end of file diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index 5808c46d1..ba17b8ff9 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -232,8 +232,9 @@ def mousePressEvent(self, event): ) self.cad_log_splitter.addWidget(self.cad_comp_widget) + from osdagbridge.desktop.ui.cad_3d import CAD3DWindow # 3D CAD placeholder (mutually exclusive with dual view + plots) - self.cad_3d_widget = CentralPlaceholderWidget("3D CAD Here") + self.cad_3d_widget = CAD3DWindow() self.cad_3d_widget.setVisible(False) self.cad_log_splitter.addWidget(self.cad_3d_widget) From e127509f641a7ca3932a1f9e791239b5f8d6fcac Mon Sep 17 00:00:00 2001 From: Aditya Donde Date: Sun, 22 Mar 2026 11:22:43 +0530 Subject: [PATCH 128/225] added dto.py and imported it in analyser.py,bridge_geometry.py,load_placement.py and corrected bridge width calculation in initial_sizing.py --- .../bridge_types/plate_girder/analyser.py | 215 +++--------------- .../plate_girder/bridge_geometry.py | 127 ++++------- .../core/bridge_types/plate_girder/dto.py | 180 ++++++++++++++- .../plate_girder/initial_sizing.py | 23 +- .../plate_girder/load_placement.py | 2 + 5 files changed, 270 insertions(+), 277 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index f30afafa8..e57498274 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -1,118 +1,13 @@ import ospgrillage as og -from math import * -import openseespy.opensees as ops -from osdagbridge.core.utils.codes.irc6_2017 import * +# from math import sqrt, pi +# import openseespy.opensees as ops +from osdagbridge.core.utils.codes.irc6_2017 import IRC6_2017 from osdagbridge.core.utils.common import * -from osdagbridge.core.bridge_types.plate_girder.bridge_geometry import * +from osdagbridge.core.bridge_types.plate_girder.bridge_geometry import BridgeGeometry, CrossSectionLayout from osdagbridge.core.bridge_types.plate_girder.load_placement import LoadPlacementManager import warnings -from dataclasses import dataclass from osdagbridge.core.bridge_types.plate_girder.analysis_results import PlateGirderAnalysisResults - - -@dataclass -class SectionProperties: - """ - Holds cross-section properties for a single grillage member. - - Attributes - ---------- - A : float - Cross-sectional area (m^2). - J : float - Torsional constant (m^3). - Iz : float - Second moment of area about z-axis (m^4). - Iy : float - Second moment of area about y-axis (m^4). - Az : float - Shear area in z-direction (m^2). - Ay : float - Shear area in y-direction (m^2). - """ - A: float - J: float - Iz: float - Iy: float - Az: float - Ay: float - - -@dataclass -class MaterialProperties: - """ - Holds custom material properties for a grillage member. - - Attributes - ---------- - material : str - Material type string (e.g. "steel", "concrete"). - E : float - Elastic modulus (Pa). - v : float - Poisson's ratio. - rho : float - Density (kN/m^3). - Fy : float, optional - Yield strength (Pa). Required for steel. - E0 : float, optional - Initial elastic modulus (Pa). Required for steel. - b : float, optional - Strain-hardening ratio. Required for steel. - """ - material: str - E: float - v: float - rho: float - Fy: float = None - E0: float = None - b: float = None - - -@dataclass -class GrillageGeometry: - """ - Holds grillage geometry and cross-section layout parameters. - - Attributes - ---------- - L : float - Bridge span length (m). - n_l : int - Number of longitudinal grid lines. - n_t : int - Number of transverse grid lines. - edge_dist : float - Edge beam distance / overhang (m). Use 0 for no overhang. - ext_to_int_dist : float - Distance from exterior to interior beam (m). - angle : float - Skew angle in degrees. Use 0 for a right bridge. - carriageway_width : float - Width of the carriageway (m). - crash_barrier_width : float - Width of each crash barrier (m). - footpath_width : float - Width of each footpath (m). - railing_width : float - Width of each railing (m). - median_width : float - Width of the median (m). Use 0 if no median. - no_of_footpaths : int - Number of footpaths. - """ - L: float - n_l: int - n_t: int - edge_dist: float - ext_to_int_dist: float - angle: float - carriageway_width: float - crash_barrier_width: float - footpath_width: float - railing_width: float - median_width: float - no_of_footpaths: int +from osdagbridge.core.bridge_types.plate_girder.dto import (SectionProperties, MaterialProperties, GrillageGeometry, DeckLayoutProperties) class BridgeGrillageModel: @@ -145,6 +40,7 @@ def __init__(self): self.edge_dist = None self.ext_to_int_dist = None self.angle = None + self.w: float | None = None # updated from bridge geometry width after set_geometry() # placeholder for model self.model = None @@ -165,7 +61,7 @@ def __init__(self): # ============================================================ # SET GEOMETRY # ============================================================ - def set_geometry(self, geometry: GrillageGeometry): + def set_geometry(self, geometry: GrillageGeometry, layout: DeckLayoutProperties): """ Sets grillage geometry and builds the cross-section layout and bridge geometry from user-supplied GrillageGeometry. @@ -186,12 +82,12 @@ def set_geometry(self, geometry: GrillageGeometry): # Cross-section layout # ------------------------------------------------- self.layout = CrossSectionLayout( - carriageway_width=geometry.carriageway_width, - crash_barrier_width=geometry.crash_barrier_width, - footpath_width=geometry.footpath_width, - railing_width=geometry.railing_width, - median_width=geometry.median_width, - no_of_footpaths=geometry.no_of_footpaths, + carriageway_width=layout.carriageway_width, + crash_barrier_width=layout.crash_barrier_width, + footpath_width=layout.footpath_width, + railing_width=layout.railing_width, + median_width=layout.median_width, + n_footpaths=layout.n_footpaths, ) # ------------------------------------------------- @@ -269,7 +165,7 @@ def create_sections(self, # ============================================================ def create_material(self, props: MaterialProperties): """ - Creates a custom material and assigns it to all grillage members. + Creates a custom material from the supplied properties. Parameters ---------- @@ -281,7 +177,14 @@ def create_material(self, props: MaterialProperties): Fy=props.Fy, E0=props.E0, b=props.b ) - # Re-assign members now that material is defined + def assign_members(self): + """ + Creates grillage members by pairing each section with the current + material (``self.steel_custom``). + + Must be called after both ``create_sections()`` and + ``create_material()`` have been called. + """ self.longitudinal_beam = og.create_member( section=self.longitudinal_section, material=self.steel_custom ) @@ -320,7 +223,7 @@ def create_model(self): skew=self.angle, num_long_grid=self.n_l, num_trans_grid=self.n_t, - edge_beam_dist=self.edge_dist, #0-no overhang + edge_beam_dist=self.edge_dist, ext_to_int_dist=self.ext_to_int_dist, mesh_type="Oblique" # ('Ortho' or 'Oblique') ) @@ -1093,68 +996,6 @@ def create_moving_vehicle_load_cases( return self.moving_load_cases_list - def vehicle_combination(self, carriageway_width=None): - """ - Generate all ordered vehicle placement sequences for design lanes determined - from `carriageway_width` using `IRC6_2017.table_6`. - - - 'ClassA' occupies 1 lane - - 'Class70R' occupies 2 lanes - - Example (3 lanes) -> - ['ClassA','ClassA','ClassA'], ['ClassA','Class70R'], ['Class70R','ClassA'] - - Parameters - ---------- - carriageway_width : float, optional - Carriageway width in metres. If omitted, attempts to read from the - instance `self.layout` (single or split carriageway). - - Returns - ------- - list of lists - Each inner list is an ordered sequence of vehicle types that fills - the design lanes exactly. - """ - # Determine carriageway width: prefer provided parameter, else attempt to read from layout - # if carriageway_width is None: - # cw = None - # if getattr(self, 'layout', None) and self.layout.has_component('carriageway'): - # cw = self.layout.get_component('carriageway').width - # else: - # left = 0.0 - # right = 0.0 - # if getattr(self, 'layout', None) and self.layout.has_component('carriageway_left'): - # left = self.layout.get_component('carriageway_left').width - # if getattr(self, 'layout', None) and self.layout.has_component('carriageway_right'): - # right = self.layout.get_component('carriageway_right').width - # if left + right > 0.0: - # cw = left + right - # if cw is None: - # raise ValueError("carriageway_width must be provided or layout with carriageway must exist") - # carriageway_width = cw - - lanes = IRC6_2017.table_6(carriageway_width) - - sequences = [] - - def _build(remaining_lanes, current_seq): - if remaining_lanes == 0: - sequences.append(list(current_seq)) - return - # place ClassA (1 lane) - current_seq.append("ClassA") - _build(remaining_lanes - 1, current_seq) - current_seq.pop() - # place Class70R (2 lanes) if space - if remaining_lanes >= 2: - current_seq.append("Class70R") - _build(remaining_lanes - 2, current_seq) - current_seq.pop() - - _build(lanes, []) - print("Vehicle placement sequences:", sequences) - return sequences def add_vehicle_load_with_moving_path( self, @@ -1329,15 +1170,16 @@ def plot(self, model=None): L=33.5 * m, n_l=7, n_t=11, - edge_dist=0 * m, # 0-consider edge , else not overhang-edgebeams + edge_dist=1.1 * m, ext_to_int_dist=2.2775 * m, angle=0, - carriageway_width=10.0 * m, + ), DeckLayoutProperties( + carriageway_width=7.0 * m, crash_barrier_width=0.45 * m, footpath_width=1.50 * m, railing_width=0.30 * m, median_width=0.0 * m, - no_of_footpaths=2, + n_footpaths=2, )) # --- Test section values (replace with UI inputs later) --- @@ -1387,6 +1229,8 @@ def plot(self, model=None): b=0.01, )) + bridge.assign_members() + bridge.create_model() # bridge.plot_model() # bridge.add_dead_loads() @@ -1398,7 +1242,6 @@ def plot(self, model=None): bridge.create_railing_load() bridge.create_median_load() bridge.vehicle_lane_coordinates() - # bridge.vehicle_combination(carriageway_width=6.0) bridge.create_vehicle_load_cases() bridge.add_vehicle_load_cases_from_combinations() bridge.create_moving_vehicle_load_cases() diff --git a/src/osdagbridge/core/bridge_types/plate_girder/bridge_geometry.py b/src/osdagbridge/core/bridge_types/plate_girder/bridge_geometry.py index d6699f371..a9965f8f1 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/bridge_geometry.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/bridge_geometry.py @@ -1,43 +1,6 @@ from __future__ import annotations -from dataclasses import dataclass -import warnings -@dataclass(frozen=True) -class Point: - x: float - z: float - - -@dataclass(frozen=True) -class LineLoadGeometry: - start: Point - end: Point - - -@dataclass(frozen=True) -class PatchLoadGeometry: - p1: Point - p2: Point - p3: Point - p4: Point - -@dataclass(frozen=True) -class SectionComponent: - name: str - width: float - z_start: float - z_end: float - - @property - def center(self) -> float: - return 0.5 * (self.z_start + self.z_end) - - -@classmethod -def from_layout(cls, layout: CrossSectionLayout, span: float): - bridge = BridgeGeometry(span=span, width=layout.total_width) - layout.validate_against_bridge(bridge.width) - return cls(bridge, layout) +from osdagbridge.core.bridge_types.plate_girder.dto import SectionComponent class BridgeGeometry: @@ -48,11 +11,18 @@ class BridgeGeometry: z → width """ - def __init__(self, span: float, width: float): + def __init__(self, span: float, width: float) -> None: self.span = span self.width = width - def bounds(self): + @classmethod + def from_layout(cls, layout: CrossSectionLayout, span: float) -> BridgeGeometry: + bridge = cls(span=span, width=layout.total_width) + layout.validate_against_bridge(bridge.width) + return bridge + + @property + def bounds(self) -> dict[str, float]: return { "x_min": 0.0, "x_max": self.span, @@ -66,18 +36,6 @@ class CrossSectionLayout: Defines ordered cross-section layout of bridge deck. """ - ORDER = [ - "railing_left", - "footpath_left", - "crash_barrier_left", - "carriageway_left", - "median", - "carriageway_right", - "crash_barrier_right", - "footpath_right", - "railing_right", - ] - def __init__( self, *, @@ -86,22 +44,23 @@ def __init__( railing_width: float = 0.0, footpath_width: float = 0.0, median_width: float = 0.0, - no_of_footpaths: int = 0, # 0, 1, or 2 + n_footpaths: int = 0, # 0, 1, or 2 ): self.carriageway_width = carriageway_width self.crash_barrier_width = crash_barrier_width self.railing_width = railing_width self.footpath_width = footpath_width self.median_width = median_width - self.no_of_footpaths = no_of_footpaths + self.n_footpaths = n_footpaths - self._components = [] + self.total_width: float = 0.0 + self._components: list[SectionComponent] = [] self._build_layout() - def _build_layout(self): + def _build_layout(self) -> None: z = 0.0 - def add(name, width): + def add(name: str, width: float) -> None: nonlocal z if width <= 0: return @@ -113,37 +72,47 @@ def add(name, width): ) self._components.append(comp) z += width + # Left side - if self.no_of_footpaths >= 1: + if self.n_footpaths >= 1: add("railing_left", self.railing_width) add("footpath_left", self.footpath_width) add("crash_barrier_left", self.crash_barrier_width) - # --- Carriageway + median logic --- + # Carriageway + median logic if self.median_width > 0.0: add("carriageway_left", self.carriageway_width) add("median", self.median_width) add("carriageway_right", self.carriageway_width) else: add("carriageway", self.carriageway_width) - + add("crash_barrier_right", self.crash_barrier_width) - if self.no_of_footpaths >= 2: + # Right side + if self.n_footpaths >= 2: add("footpath_right", self.footpath_width) add("railing_right", self.railing_width) - for c in self._components: - print(c.name, c.z_start, c.z_end) - + # for c in self._components: + # print(c.name, c.z_start, c.z_end) self.total_width = z - def verify_bridge_width(self, num_long_grid: int, ext_to_int_dist: float, edge_beam_dist: float, tol: float = 1e-6,) -> bool: + def verify_bridge_width( + self, + num_long_grid: int, + ext_to_int_dist: float, + edge_beam_dist: float, + tol: float = 1e-6, + ) -> bool: """ - Verify that the cross-section total_width matches the computed - overall bridge width from grillage geometry parameters. + Cross-check that the cross-section total_width matches the overall + bridge width derived from grillage geometry parameters. + + This is a grillage geometry cross-check, not a construction validator. + For construction-time width validation, see validate_against_bridge(). Formula: OverallBridgeWidth = (num_long_grid - 1) * ext_to_int_dist + 2 * edge_beam_dist @@ -191,25 +160,29 @@ def get_component(self, name: str) -> SectionComponent: def has_component(self, name: str) -> bool: return any(c.name == name for c in self._components) - def components(self): + @property + def components(self) -> list[SectionComponent]: return list(self._components) - - def validate_against_bridge(self, bridge_width: float, tol: float = 1e-6): + + def validate_against_bridge(self, bridge_width: float, tol: float = 1e-6) -> None: """ Validate that cross-section width matches bridge width. + Called during construction via BridgeGeometry.from_layout(). + + For grillage geometry cross-checking, see verify_bridge_width(). Parameters ---------- bridge_width : float - Width used in BridgeGeometry + Width used in BridgeGeometry. tol : float - Numerical tolerance + Numerical tolerance. Raises ------ - ValueError if widths do not match + ValueError + If widths do not match. """ - if abs(self.total_width - bridge_width) > tol: raise ValueError( f"Cross-section width mismatch:\n" @@ -217,15 +190,15 @@ def validate_against_bridge(self, bridge_width: float, tol: float = 1e-6): f" BridgeGeometry width = {bridge_width:.3f} m\n" f" Difference = {abs(self.total_width - bridge_width):.6f} m" ) - - def describe(self): + + def describe(self) -> str: return " | ".join( f"{c.name}({c.width:.2f})" for c in self._components ) ''' -# @warnings.deprecated("This function is deprecated, use CrossSectionLayout.total_width instead.") +# @warnings.deprecated("This function is deprecated, use CrossSectionLayout.total_width instead.") def calculate_bridge_width( carriageway_width: float, crash_barrier_width: float, diff --git a/src/osdagbridge/core/bridge_types/plate_girder/dto.py b/src/osdagbridge/core/bridge_types/plate_girder/dto.py index 4f2abbb84..7345462e3 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/dto.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/dto.py @@ -1,6 +1,180 @@ -"""Plate girder BridgeModelDTO (stub).""" +from __future__ import annotations + from dataclasses import dataclass +from typing import Optional + +__all__ = [ + "SectionComponent", + "Point", + "LineLoadGeometry", + "PatchLoadGeometry", + "SectionProperties", + "MaterialProperties", + "GrillageGeometry", + "DeckLayoutProperties", +] -@dataclass -class PlateGirderDTO: +# ------------------------------------------------------------------ +# DTOs for cross-section components +# ------------------------------------------------------------------ + +@dataclass(frozen=True) +class SectionComponent: name: str + width: float + z_start: float + z_end: float + + @property + def center(self) -> float: + return 0.5 * (self.z_start + self.z_end) + + +# ------------------------------------------------------------------ +# DTOs for load geometry +# ------------------------------------------------------------------ + +@dataclass(frozen=True) +class Point: + x: float + z: float + + +@dataclass(frozen=True) +class LineLoadGeometry: + start: Point + end: Point + + +@dataclass(frozen=True) +class PatchLoadGeometry: + p1: Point + p2: Point + p3: Point + p4: Point + + +# ------------------------------------------------------------------ +# DTOs for bridge geometry and properties (for analyser file) +# ------------------------------------------------------------------ + +@dataclass(frozen=True) +class SectionProperties: + """ + Holds cross-section properties for a single grillage member. + + Attributes + ---------- + A : float + Cross-sectional area (m^2). + J : float + Torsional constant (m^3). + Iz : float + Second moment of area about z-axis (m^4). + Iy : float + Second moment of area about y-axis (m^4). + Az : float + Shear area in z-direction (m^2). + Ay : float + Shear area in y-direction (m^2). + """ + A: float + J: float + Iz: float + Iy: float + Az: float + Ay: float + + +@dataclass(frozen=True) +class MaterialProperties: + """ + Holds custom material properties for a grillage member. + + Attributes + ---------- + material : str + Material type string (e.g. "steel", "concrete"). + E : float + Elastic modulus (Pa). + v : float + Poisson's ratio. + rho : float + Density (kN/m^3). + Fy : float, optional + Yield strength (Pa). Required for steel. + E0 : float, optional + Initial elastic modulus (Pa). Required for steel. + b : float, optional + Strain-hardening ratio. Required for steel. + """ + material: str + E: float + v: float + rho: float + Fy: Optional[float] = None + E0: Optional[float] = None + b: Optional[float] = None + + def __post_init__(self) -> None: + if self.material == "steel": + if any(val is None for val in (self.Fy, self.E0, self.b)): + raise ValueError( + "Fy, E0, and b are all required when material is 'steel'." + ) + + +@dataclass(frozen=True) +class GrillageGeometry: + """ + Holds grillage grid geometry parameters. + + Attributes + ---------- + L : float + Bridge span length (m). + n_l : int + Number of longitudinal grid lines. + n_t : int + Number of transverse grid lines. + edge_dist : float + Edge beam distance / overhang (m). Use 0 for no overhang. + ext_to_int_dist : float + Distance from exterior to interior beam (m). + angle : float + Skew angle in degrees. Use 0 for a right bridge. + """ + L: float + n_l: int + n_t: int + edge_dist: float + ext_to_int_dist: float + angle: float + + +@dataclass(frozen=True) +class DeckLayoutProperties: + """ + Holds deck cross-section layout properties. + + Attributes + ---------- + carriageway_width : float + Width of the carriageway (m). + crash_barrier_width : float + Width of each crash barrier (m). + footpath_width : float + Width of each footpath (m). + railing_width : float + Width of each railing (m). + median_width : float + Width of the median (m). Use 0 if no median. + n_footpaths : int + Number of footpaths. + """ + carriageway_width: float + crash_barrier_width: float + footpath_width: float + railing_width: float + median_width: float + n_footpaths: int \ No newline at end of file diff --git a/src/osdagbridge/core/bridge_types/plate_girder/initial_sizing.py b/src/osdagbridge/core/bridge_types/plate_girder/initial_sizing.py index 19e707030..2cff258ef 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/initial_sizing.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/initial_sizing.py @@ -1,6 +1,7 @@ from __future__ import annotations from dataclasses import dataclass from math import sqrt +from typing import Optional, Tuple # Import constants from common.py for consistency from osdagbridge.core.utils.common import ( @@ -15,7 +16,6 @@ # Import existing functions from bridge_geometry.py (Point 1 and validation) from osdagbridge.core.bridge_types.plate_girder.bridge_geometry import ( - calculate_bridge_width, CrossSectionLayout, ) @@ -71,7 +71,7 @@ def __init__( footpath_width: float = 0.0, railing_width: float = 0.0, median_width: float = 0.0, - no_of_footpaths: int = 0, + n_footpaths: int = 0, flange_width: float = 0.0, # max of top/bottom flange for spacing limit ): """ @@ -83,7 +83,7 @@ def __init__( - footpath_width : float - Width of each footpath in meters. - railing_width : float - Width of each railing in meters. - median_width : float - Width of median in meters. - - no_of_footpaths : int - Number of footpaths (0, 1, or 2). + - n_footpaths : int - Number of footpaths (0, 1, or 2). - flange_width : float - Maximum flange width for spacing upper bound. """ self.carriageway_width = carriageway_width @@ -91,18 +91,18 @@ def __init__( self.footpath_width = footpath_width if footpath_width > 0 else 0.0 self.railing_width = railing_width self.median_width = median_width - self.no_of_footpaths = no_of_footpaths + self.n_footpaths = n_footpaths self.flange_width = flange_width # ========================================================================= # Point 1: Calculate Overall Bridge Width - # Uses calculate_bridge_width from bridge_geometry.py + # Uses CrossSectionLayout.total_width from bridge_geometry.py # ========================================================================= def calculate_overall_bridge_width(self) -> float: """ Calculate overall bridge width from component widths. - Delegates to calculate_bridge_width() from bridge_geometry.py. + Delegates to CrossSectionLayout.total_width from bridge_geometry.py. Formula: OverallBridgeWidth = CarriagewayWidth + 2 * CrashBarrierWidth @@ -114,14 +114,15 @@ def calculate_overall_bridge_width(self) -> float: float Overall bridge width in meters. """ - return calculate_bridge_width( + layout = CrossSectionLayout( carriageway_width=self.carriageway_width, crash_barrier_width=self.crash_barrier_width, - median_width=self.median_width, - no_of_footpaths=self.no_of_footpaths, footpath_width=self.footpath_width, railing_width=self.railing_width, + median_width=self.median_width, + n_footpaths=self.n_footpaths, ) + return layout.total_width def verify_bridge_width( self, @@ -154,7 +155,7 @@ def verify_bridge_width( railing_width=self.railing_width, footpath_width=self.footpath_width, median_width=self.median_width, - no_of_footpaths=self.no_of_footpaths, + n_footpaths=self.n_footpaths, ) return layout.verify_bridge_width( num_long_grid=no_of_girders, @@ -632,4 +633,4 @@ def compute_section_properties( # Legacy function for backward compatibility def preliminary_sizing(dto): """Legacy stub - use BridgeConfigurationSolver instead.""" - return {"depth_m": dto.name} + return {"name": dto.name} diff --git a/src/osdagbridge/core/bridge_types/plate_girder/load_placement.py b/src/osdagbridge/core/bridge_types/plate_girder/load_placement.py index 41b1c0282..9616b01b0 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/load_placement.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/load_placement.py @@ -3,6 +3,8 @@ from .bridge_geometry import ( BridgeGeometry, CrossSectionLayout, +) +from .dto import ( LineLoadGeometry, PatchLoadGeometry, Point, From 5fdbaaabdf96bd71f722bd46f2825f6ee2c45168 Mon Sep 17 00:00:00 2001 From: Aditya Donde Date: Sun, 22 Mar 2026 14:33:04 +0530 Subject: [PATCH 129/225] modified plategirderbridge.py changed FrontendData to plategirderbridge class in __main__ added design() in template_page.py --- .../bridge_types/plate_girder/analyser.py | 2 +- .../plate_girder/plategirderbridge.py | 725 ++++++++---------- src/osdagbridge/desktop/__main__.py | 4 +- src/osdagbridge/desktop/ui/template_page.py | 6 +- 4 files changed, 324 insertions(+), 413 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index e57498274..fc20a2831 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -99,7 +99,7 @@ def set_geometry(self, geometry: GrillageGeometry, layout: DeckLayoutProperties) ) print(f"Bridge width from layout: {self.layout.total_width} m") - self.layout.validate_against_bridge(self.bridge_geometry.width) + # self.layout.validate_against_bridge(self.bridge_geometry.width) # ============================================================ # CREATE SECTIONS diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 1fc1d5e15..092a89e10 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -1,448 +1,357 @@ -"""Main PG bridge file """ - from __future__ import annotations - -from dataclasses import asdict, dataclass, field -from typing import Any, Callable, Dict, Mapping, Optional +import sqlite3 +from pathlib import Path +from .ui_fields import FrontendData +from .dto import DeckLayoutProperties, GrillageGeometry, SectionProperties, MaterialProperties +from .defaults import ( + DEFAULTS_DICT, + DEFAULT_SPAN_M, + DEFAULT_CARRIAGEWAY_WIDTH_M, + DEFAULT_NO_OF_GIRDERS, + DEFAULT_GIRDER_SYMMETRY, + DEFAULT_MEDIAN_WIDTH_M, +) +from .initial_sizing import BridgeConfigurationSolver, DEFAULT_FOOTPATH_WIDTH +from .analyser import BridgeGrillageModel from osdagbridge.core.utils.common import ( - DEFAULT_CRASH_BARRIER_WIDTH, - DEFAULT_GIRDER_SPACING, - DEFAULT_RAILING_WIDTH, + KEY_STRUCTURE_TYPE, + KEY_PROJECT_LOCATION, + KEY_SPAN, KEY_CARRIAGEWAY_WIDTH, - KEY_CRASH_BARRIER_WIDTH, - KEY_DECK_OVERHANG, - KEY_DECK_THICKNESS, - KEY_FOOTPATH_WIDTH, - KEY_GIRDER_BOTTOM_FLANGE_WIDTH, - KEY_GIRDER_DEPTH, - KEY_GIRDER_SPACING, - KEY_GIRDER_SYMMETRY, - KEY_GIRDER_TOP_FLANGE_WIDTH, - KEY_GIRDER_TOP_FLANGE_THICKNESS, - KEY_GIRDER_WEB_THICKNESS, KEY_INCLUDE_MEDIAN, - KEY_NO_OF_GIRDERS, - KEY_RAILING_WIDTH, + KEY_FOOTPATH, KEY_SKEW_ANGLE, - KEY_SPAN, - MIN_FOOTPATH_WIDTH, -) - -from .bridge_geometry import BridgeGeometry, CrossSectionLayout -from .cad_generator import export_step -from .designer import design -from .initial_sizing import BridgeConfigurationSolver, preliminary_sizing -from .report_generator import section_report -from .ui_fields import FrontendData -from .ui_fields_additional_input import ( - CRASH_BARRIER_TAB_SCHEMA, - CROSS_BRACING_DETAILS_SCHEMA, - DESIGN_OPTIONS_CONT_SCHEMA, - DESIGN_OPTIONS_SCHEMA, - END_DIAPHRAGM_DETAILS_SCHEMA, - GIRDER_DETAILS_SCHEMA, - STIFFENER_DETAILS_SCHEMA, - LANE_DETAILS_TAB_SCHEMA, - LAYOUT_TAB_SCHEMA, - MEDIAN_TAB_SCHEMA, - RAILING_TAB_SCHEMA, - SUPPORT_CONDITIONS_SCHEMA, - WEARING_COURSE_TAB_SCHEMA, + KEY_DESIGN_MODE, + KEY_GIRDER, + KEY_CROSS_BRACING, + KEY_END_DIAPHRAGM, + KEY_DECK_CONCRETE_GRADE_BASIC, + DEFAULT_CRASH_BARRIER_WIDTH, + DEFAULT_RAILING_WIDTH, + DEFAULT_GIRDER_SPACING, + MPa, + GPa, + kN, + m, ) -try: - from .dto import PlateGirderDTO -except Exception: - @dataclass - class PlateGirderDTO: - """Fallback DTO when dto.py is unavailable.""" - - name: str - - -def _first_present(source: Mapping[str, Any], *keys: str) -> Any: - for key in keys: - if key in source and source[key] not in ("", None): - return source[key] - return None - - -def _as_float(value: Any, default: float) -> float: - if value in ("", None): - return default - try: - return float(value) - except (TypeError, ValueError): - return default - +# Default median width (m) used when user enables median but no additional-input +# width has been supplied yet. +_DEFAULT_MEDIAN_WIDTH_M = 1.2 -def _as_int(value: Any, default: int) -> int: - if value in ("", None): - return default - try: - return int(float(value)) - except (TypeError, ValueError): - return default +_DB_PATH = Path(__file__).resolve().parents[2] / "data" / "ResourceFiles" / "Intg_osdag.sqlite" - -def _as_bool(value: Any, default: bool = False) -> bool: - if value is None: - return default - if isinstance(value, bool): - return value - if isinstance(value, (int, float)): - return bool(value) - return str(value).strip().lower() in {"1", "true", "yes", "y"} - - -def _to_m(value: Any) -> float: - """Accept meters directly; if value looks like mm, convert to meters.""" - as_float = _as_float(value, 0.0) - return as_float / 1000.0 if as_float > 10.0 else as_float - - -@dataclass -class PlateGirderRunResult: - dto: PlateGirderDTO - initial_sizing: Dict[str, Any] = field(default_factory=dict) - geometry: Dict[str, Any] = field(default_factory=dict) - analysis: Dict[str, Any] = field(default_factory=dict) - analysis_results: Dict[str, Any] = field(default_factory=dict) - design: Dict[str, Any] = field(default_factory=dict) - modifier: Dict[str, Any] = field(default_factory=dict) - cad: Dict[str, Any] = field(default_factory=dict) - report: Dict[str, Any] = field(default_factory=dict) - - def to_dict(self) -> Dict[str, Any]: - return asdict(self) +# Steel constants (same values used in analyser.py __main__) +_STEEL_E = 200 * GPa # Elastic modulus (Pa) +_STEEL_V = 0.3 # Poisson's ratio +_STEEL_RHO = 78.5 * kN / m ** 3 # Unit weight (N/m³) +_STEEL_E0 = 200 * GPa # Initial elastic modulus (Pa) +_STEEL_B = 0.01 # Strain-hardening ratio +_STEEL_FY_DEFAULT = 250 * MPa # Fallback Fy if material not found in DB (Pa) class PlateGirderBridge: - """Coordinator that stitches all plate-girder modules.""" - - def __init__( - self, - basic_inputs: Optional[Mapping[str, Any]] = None, - additional_inputs: Optional[Mapping[str, Any]] = None, - modifier_hook: Optional[Callable[[PlateGirderRunResult], Dict[str, Any]]] = None, - ) -> None: - self.basic_inputs = dict(basic_inputs or {}) - self.additional_inputs = dict(additional_inputs or {}) - self.modifier_hook = modifier_hook - self._analysis_engine = None - - @staticmethod - def get_basic_input_schema() -> list: - return FrontendData().input_values() - - @staticmethod - def get_additional_input_schema() -> Dict[str, Dict[str, Any]]: - return { - "layout": LAYOUT_TAB_SCHEMA, - "crash_barrier": CRASH_BARRIER_TAB_SCHEMA, - "median": MEDIAN_TAB_SCHEMA, - "railing": RAILING_TAB_SCHEMA, - "wearing_course": WEARING_COURSE_TAB_SCHEMA, - "lane_details": LANE_DETAILS_TAB_SCHEMA, - "support_conditions": SUPPORT_CONDITIONS_SCHEMA, - "design_options": DESIGN_OPTIONS_SCHEMA, - "design_options_cont": DESIGN_OPTIONS_CONT_SCHEMA, - "girder_details": GIRDER_DETAILS_SCHEMA, - "stiffener_details": STIFFENER_DETAILS_SCHEMA, - "cross_bracing_details": CROSS_BRACING_DETAILS_SCHEMA, - "end_diaphragm_details": END_DIAPHRAGM_DETAILS_SCHEMA, + """Core backend for Plate Girder Bridge.""" + + # Keys that originate from the basic input dock. + # Everything else in input_dict is treated as an additional input. + _BASIC_INPUT_KEYS = frozenset({ + KEY_STRUCTURE_TYPE, + KEY_PROJECT_LOCATION, + KEY_SPAN, + KEY_CARRIAGEWAY_WIDTH, + KEY_INCLUDE_MEDIAN, + KEY_FOOTPATH, + KEY_SKEW_ANGLE, + KEY_DESIGN_MODE, + KEY_GIRDER, + KEY_CROSS_BRACING, + KEY_END_DIAPHRAGM, + KEY_DECK_CONCRETE_GRADE_BASIC, + }) + + def __init__(self) -> None: + self.input_dict: dict = {} + self.basic_inputs: dict = {} + self.additional_inputs: dict = {} + self._frontend = FrontendData() + + # Results populated by design() + self.sizing_result = None + self.section_props: dict = {} + self.grillage_geometry: GrillageGeometry | None = None + self.deck_layout: DeckLayoutProperties | None = None + + # Analyser — populated by setup_grillage() + self.grillage_model: BridgeGrillageModel = BridgeGrillageModel() + + def input_values(self) -> list: + """Return UI field definitions for the InputDock (delegated to FrontendData).""" + return self._frontend.input_values() + + def output_values(self) -> list: + """Return UI field definitions for the OutputDock (delegated to FrontendData).""" + return self._frontend.output_values() + + def set_input(self, input_dict: dict) -> None: + """ + Receive and store the input dictionary from the UI. + + Stores the full dict in ``self.input_dict`` and splits it into: + - ``self.basic_inputs`` — keys from the main input dock + - ``self.additional_inputs`` — all remaining keys (additional-input dialog, etc.) + + Parameters + ---------- + input_dict : dict + The flat dictionary built and maintained by ``CustomWindow``. + """ + self.input_dict = dict(input_dict) + self.basic_inputs = { + k: v for k, v in self.input_dict.items() + if k in self._BASIC_INPUT_KEYS + } + self.additional_inputs = { + k: v for k, v in self.input_dict.items() + if k not in self._BASIC_INPUT_KEYS } - def _footpath_count(self) -> int: - footpath_value = _first_present(self.basic_inputs, "footpath", "Footpath") - if footpath_value is None: - return 0 - text = str(footpath_value).strip().lower() - if "both" in text: - return 2 - if "single" in text: - return 1 - return 0 - - def _build_dto(self) -> PlateGirderDTO: - structure_name = _first_present( - self.basic_inputs, - "Structure Type", - "structure_type", - "name", + # ───────────────────────────────────────────────────────────────────────── + # Design pipeline + # ───────────────────────────────────────────────────────────────────────── + + def design(self) -> None: + """ + Run the full initial-sizing pipeline in order: + 1. Parse basic inputs + 2. Solve bridge layout + 3. Build result DTOs + 4. Set up grillage model geometry and sections + """ + parsed = self._parse_basic_inputs() + self._solve_bridge_layout(parsed) + self._build_dtos(parsed) + self.setup_grillage() + + print( + f"[PlateGirderBridge.design] " + f"span={parsed['span']} m | overall_width={self.sizing_result.overall_width} m | " + f"girders={self.sizing_result.no_of_girders} | " + f"spacing={self.sizing_result.girder_spacing} m | " + f"overhang={self.sizing_result.deck_overhang} m | " + f"girder_depth={self.section_props['D']:.3f} m" ) - return PlateGirderDTO(name=str(structure_name or "plate_girder_bridge")) - def _run_initial_sizing(self, dto: PlateGirderDTO) -> Dict[str, Any]: - span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) - carriageway_width = _as_float( - _first_present(self.basic_inputs, KEY_CARRIAGEWAY_WIDTH, "carriageway_width"), - 10.0, + def _parse_basic_inputs(self) -> dict: + """Extract and normalise scalar values from ``self.basic_inputs``.""" + span = self._to_float(KEY_SPAN, DEFAULT_SPAN_M) + cw_width = self._to_float(KEY_CARRIAGEWAY_WIDTH, DEFAULT_CARRIAGEWAY_WIDTH_M) + skew_angle = self._to_float(KEY_SKEW_ANGLE, 0.0) + + include_median = str(self.basic_inputs.get(KEY_INCLUDE_MEDIAN, "No")).strip() + footpath_str = str(self.basic_inputs.get(KEY_FOOTPATH, "None")).strip() + design_mode = str(self.basic_inputs.get(KEY_DESIGN_MODE, "Optimized")).strip() + + if footpath_str in ("None", ""): + n_footpaths = 0 + footpath_width = 0.0 + railing_width = 0.0 + elif "Both" in footpath_str: + n_footpaths = 2 + footpath_width = DEFAULT_FOOTPATH_WIDTH + railing_width = DEFAULT_RAILING_WIDTH + else: # Single Side + n_footpaths = 1 + footpath_width = DEFAULT_FOOTPATH_WIDTH + railing_width = DEFAULT_RAILING_WIDTH + + median_width = ( + _DEFAULT_MEDIAN_WIDTH_M if include_median.lower() == "yes" else 0.0 ) - no_of_footpaths = self._footpath_count() - include_median = _as_bool(_first_present(self.basic_inputs, KEY_INCLUDE_MEDIAN, "include_median")) - crash_barrier_width = _as_float( - _first_present(self.additional_inputs, KEY_CRASH_BARRIER_WIDTH, "crash_barrier_width"), - DEFAULT_CRASH_BARRIER_WIDTH, - ) - footpath_width = _as_float( - _first_present(self.additional_inputs, KEY_FOOTPATH_WIDTH, "footpath_width"), - MIN_FOOTPATH_WIDTH if no_of_footpaths else 0.0, - ) - railing_width = _as_float( - _first_present(self.additional_inputs, KEY_RAILING_WIDTH, "railing_width"), - DEFAULT_RAILING_WIDTH if no_of_footpaths else 0.0, + return dict( + span=span, + cw_width=cw_width, + skew_angle=skew_angle, + design_mode=design_mode, + n_footpaths=n_footpaths, + footpath_width=footpath_width, + railing_width=railing_width, + median_width=median_width, ) - median_width = _as_float(_first_present(self.additional_inputs, "median_width"), 0.0) - if not include_median: - median_width = 0.0 - n_girders = max( - 2, - _as_int(_first_present(self.additional_inputs, KEY_NO_OF_GIRDERS, "no_of_girders"), 4), - ) - girder_spacing = _as_float( - _first_present(self.additional_inputs, KEY_GIRDER_SPACING, "girder_spacing"), - DEFAULT_GIRDER_SPACING, + def _solve_bridge_layout(self, parsed: dict) -> None: + """Run BridgeConfigurationSolver and store sizing + section results.""" + solver = BridgeConfigurationSolver( + carriageway_width=parsed["cw_width"], + crash_barrier_width=DEFAULT_CRASH_BARRIER_WIDTH, + footpath_width=parsed["footpath_width"], + railing_width=parsed["railing_width"], + median_width=parsed["median_width"], + n_footpaths=parsed["n_footpaths"], ) - deck_overhang = _as_float( - _first_present(self.additional_inputs, KEY_DECK_OVERHANG, "deck_overhang"), - 0.5 * DEFAULT_GIRDER_SPACING, + + sizing_result = solver._solve_layout( + no_of_girders=DEFAULT_NO_OF_GIRDERS, + changed_field="girders", ) - top_flange_w = _to_m( - _first_present(self.additional_inputs, KEY_GIRDER_TOP_FLANGE_WIDTH, "top_flange_width") + symmetry = ( + DEFAULT_GIRDER_SYMMETRY + if parsed["design_mode"] == "Optimized" + else "Girder Unsymmetric" ) - bot_flange_w = _to_m( - _first_present(self.additional_inputs, KEY_GIRDER_BOTTOM_FLANGE_WIDTH, "bottom_flange_width") + section_props = solver.compute_section_properties( + span=parsed["span"], + symmetry=symmetry, ) - max_flange_width = max(top_flange_w, bot_flange_w, 0.0) - solver = BridgeConfigurationSolver( - carriageway_width=carriageway_width, - crash_barrier_width=crash_barrier_width, - footpath_width=footpath_width, - railing_width=railing_width, - median_width=median_width, - no_of_footpaths=no_of_footpaths, - flange_width=max_flange_width, + self.sizing_result = sizing_result + self.section_props = section_props + + def _build_dtos(self, parsed: dict) -> None: + """Construct GrillageGeometry and DeckLayoutProperties DTOs from solved results.""" + span = parsed["span"] + # n_t: transverse grid lines — approx one division every 2 × girder spacings + n_t = max(3, int(round(span / (DEFAULT_GIRDER_SPACING * 2)))) + + self.grillage_geometry = GrillageGeometry( + L=span, + n_l=self.sizing_result.no_of_girders, + n_t=n_t, + edge_dist=self.sizing_result.deck_overhang, + ext_to_int_dist=self.sizing_result.girder_spacing, + angle=parsed["skew_angle"], ) - changed_field = "girders" - if _first_present(self.additional_inputs, KEY_DECK_OVERHANG, "deck_overhang") is not None: - changed_field = "overhang" - elif _first_present(self.additional_inputs, KEY_GIRDER_SPACING, "girder_spacing") is not None: - changed_field = "spacing" - - layout_result = solver._solve_layout( - no_of_girders=n_girders, - girder_spacing=girder_spacing, - deck_overhang=deck_overhang, - changed_field=changed_field, + self.deck_layout = DeckLayoutProperties( + carriageway_width=parsed["cw_width"], + crash_barrier_width=DEFAULT_CRASH_BARRIER_WIDTH, + footpath_width=parsed["footpath_width"], + railing_width=parsed["railing_width"], + median_width=parsed["median_width"], + n_footpaths=parsed["n_footpaths"], ) - deck_thickness = solver.get_deck_thickness( - _as_float(_first_present(self.additional_inputs, KEY_DECK_THICKNESS, "deck_thickness"), 200.0) - ) - footpath_width_checked = solver.get_footpath_width( - user_value=footpath_width, - footpath={0: "None", 1: "Single Side", 2: "Both Sides"}.get(no_of_footpaths, "None"), + # ───────────────────────────────────────────────────────────────────────── + # Grillage model setup + # ───────────────────────────────────────────────────────────────────────── + + def setup_grillage(self) -> None: + """ + Initialise and build the BridgeGrillageModel in order: + 1. set_geometry — grillage dimensions and cross-section layout + 2. create_sections — section properties for all member types + 3. create_material — steel material from the DB-backed girder selection + 4. assign_members — pair sections with material to create member objects + 5. create_model — build and run the OpenSees grillage model + + Must be called after design() has populated grillage_geometry, + deck_layout, and section_props. + """ + self.grillage_model.set_geometry(self.grillage_geometry, self.deck_layout) + self.grillage_model.create_sections( + longitudinal=self._girder_section(), + edge_longitudinal=self._girder_section(), + transverse=self._transverse_section(), + end_transverse=self._end_transverse_section(), ) - section_properties = solver.compute_section_properties( - span=span, - symmetry=str( - _first_present(self.additional_inputs, KEY_GIRDER_SYMMETRY, "symmetry") - or "Girder Symmetric" - ), - user_depth=_to_m(_first_present(self.additional_inputs, KEY_GIRDER_DEPTH, "depth")), - B_top=top_flange_w, - B_bot=bot_flange_w, - t_f_top=_to_m( - _first_present(self.additional_inputs, KEY_GIRDER_TOP_FLANGE_THICKNESS, "top_flange_thickness") - ), - t_f_bot=_to_m(_first_present(self.additional_inputs, "bottom_flange_thickness")), - t_w=_to_m(_first_present(self.additional_inputs, KEY_GIRDER_WEB_THICKNESS, "web_thickness")), + self.grillage_model.create_material(self._build_material_props()) + self.grillage_model.assign_members() + self.grillage_model.create_model() + + def _lookup_material_fy(self, material_name: str) -> float: + """ + Query the Osdag SQLite database for the Yield Strength of the given + material name. Returns Fy in Pa. Falls back to _STEEL_FY_DEFAULT + if the DB is missing or the material is not found. + """ + if not _DB_PATH.exists(): + return _STEEL_FY_DEFAULT + try: + con = sqlite3.connect(_DB_PATH) + cur = con.cursor() + cur.execute( + 'SELECT "Yield Strength" FROM Material WHERE "Material Name" = ?', + (material_name,), + ) + row = cur.fetchone() + con.close() + if row: + return float(row[0]) * MPa # DB stores MPa as integer → convert to Pa + except sqlite3.Error: + pass + return _STEEL_FY_DEFAULT + + def _build_material_props(self) -> MaterialProperties: + """Build a MaterialProperties from the selected girder material in basic_inputs.""" + material_name = str(self.basic_inputs.get(KEY_GIRDER, "")).strip() + fy = self._lookup_material_fy(material_name) if material_name else _STEEL_FY_DEFAULT + print(fy) + return MaterialProperties( + material="steel", + E=_STEEL_E, + v=_STEEL_V, + rho=_STEEL_RHO, + Fy=fy, + E0=_STEEL_E0, + b=_STEEL_B, ) - return { - "legacy_initial_sizing": preliminary_sizing(dto), - "layout": asdict(layout_result), - "deck_thickness_mm": deck_thickness, - "footpath_width_m": footpath_width_checked, - "section_properties": section_properties, - "inputs_resolved": { - "span_m": span, - "carriageway_width_m": carriageway_width, - "crash_barrier_width_m": crash_barrier_width, - "railing_width_m": railing_width, - "median_width_m": median_width, - "no_of_footpaths": no_of_footpaths, - }, - } - - def _build_geometry(self, initial_sizing: Dict[str, Any]) -> Dict[str, Any]: - span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) - layout_data = initial_sizing["layout"] - resolved = initial_sizing["inputs_resolved"] - - layout = CrossSectionLayout( - carriageway_width=resolved["carriageway_width_m"], - crash_barrier_width=resolved["crash_barrier_width_m"], - railing_width=resolved["railing_width_m"], - footpath_width=initial_sizing["footpath_width_m"], - median_width=resolved["median_width_m"], - no_of_footpaths=resolved["no_of_footpaths"], - ) - geometry = BridgeGeometry(span=span, width=layout.total_width) - layout.verify_bridge_width( - num_long_grid=layout_data["no_of_girders"], - ext_to_int_dist=layout_data["girder_spacing"], - edge_beam_dist=layout_data["deck_overhang"], - tol=1e-3, + def _girder_section(self) -> SectionProperties: + """Build a SectionProperties for the main/edge longitudinal girder from section_props.""" + sp = self.section_props + Az = sp["d_web"] * sp["t_w"] # web shear area (strong axis) + Ay = 2 * sp["B_top"] * sp["t_f_top"] # flange shear area (weak axis) + return SectionProperties( + A=sp["Area"], + J=sp["I_t"], + Iz=sp["I_z"], + Iy=sp["I_y"], + Az=Az, + Ay=Ay, ) - return { - "span_m": geometry.span, - "width_m": geometry.width, - "bounds": geometry.bounds(), - "cross_section": layout.describe(), - } - - def _prepare_or_run_analysis( - self, - initial_sizing: Dict[str, Any], - run_analysis: bool, - include_live_load: bool, - ) -> Dict[str, Any]: - try: - from .analyser import BridgeGrillageModel # Imported lazily: heavy deps. - except Exception as exc: - return {"status": "skipped", "reason": f"analysis backend import failed: {exc}"} - - layout = initial_sizing["layout"] - span = _as_float(_first_present(self.basic_inputs, KEY_SPAN, "span"), 33.5) - skew = _as_float(_first_present(self.basic_inputs, KEY_SKEW_ANGLE, "skew_angle"), 0.0) - - engine = BridgeGrillageModel() - engine.L = span - engine.n_l = layout["no_of_girders"] - engine.ext_to_int_dist = layout["girder_spacing"] - engine.edge_dist = layout["deck_overhang"] - engine.angle = skew - engine.create_model() - - created_dead = [] - for method_name in ( - "create_self_weight_load", - "create_deck_load", - "create_wearing_course_load", - "create_footpath_load", - "create_crash_barrier_load", - "create_railing_load", - "create_median_load", - ): - method = getattr(engine, method_name) - load_case = method() - if load_case is not None: - created_dead.append(method_name) - - created_live = [] - if include_live_load: - for method_name in ( - "create_vehicle_load_cases", - "add_vehicle_load_cases_from_combinations", - "create_moving_vehicle_load_cases", - ): - getattr(engine, method_name)() - created_live.append(method_name) - - status = "prepared" - if run_analysis: - engine.analyze() - status = "completed" - - self._analysis_engine = engine - return { - "status": status, - "dead_load_steps": created_dead, - "live_load_steps": created_live, - } + def _transverse_section(self) -> SectionProperties: + """Build a SectionProperties for the transverse deck slab (half-depth, unit width).""" + sp = self.section_props + t = sp["D"] / 2 # approximate slab thickness + Az = t * sp["t_w"] + Ay = t * sp["t_w"] + return SectionProperties( + A=sp["Area"] / 2, + J=sp["I_t"] / 2, + Iz=sp["I_z"] / 2, + Iy=sp["I_y"] / 2, + Az=Az, + Ay=Ay, + ) - def _collect_analysis_results(self, analysis: Dict[str, Any]) -> Dict[str, Any]: - if analysis.get("status") == "skipped": - return {"status": "skipped", "reason": analysis.get("reason")} - if analysis.get("status") != "completed": - return { - "status": "not_run", - "note": "Analysis model is prepared. Run with run_analysis=True to produce results.", - } - return {"status": "completed", "note": "Use BridgeGrillageModel results/plot APIs for detailed tables."} - - def run( - self, - *, - run_analysis: bool = False, - include_live_load: bool = True, - cad_path: Optional[str] = None, - ) -> PlateGirderRunResult: - dto = self._build_dto() - initial_sizing = self._run_initial_sizing(dto) - geometry = self._build_geometry(initial_sizing) - analysis = self._prepare_or_run_analysis(initial_sizing, run_analysis, include_live_load) - analysis_results = self._collect_analysis_results(analysis) - design_result = design(dto) - - modifier_result: Dict[str, Any] = {"status": "skipped", "reason": "no modifier hook provided"} - if self.modifier_hook is not None: - temp = PlateGirderRunResult( - dto=dto, - initial_sizing=initial_sizing, - geometry=geometry, - analysis=analysis, - analysis_results=analysis_results, - design=design_result, - ) - modifier_result = self.modifier_hook(temp) - - cad_result: Dict[str, Any] = {"status": "skipped"} - if cad_path: - export_step(dto, cad_path) - cad_result = {"status": "generated", "path": cad_path} - - report_result = section_report(dto) - - return PlateGirderRunResult( - dto=dto, - initial_sizing=initial_sizing, - geometry=geometry, - analysis=analysis, - analysis_results=analysis_results, - design=design_result, - modifier=modifier_result, - cad=cad_result, - report=report_result, + def _end_transverse_section(self) -> SectionProperties: + """Build a SectionProperties for the end transverse slab (quarter-depth).""" + sp = self.section_props + Az = sp["d_web"] / 2 * sp["t_w"] + Ay = sp["B_top"] * sp["t_f_top"] + return SectionProperties( + A=sp["Area"] / 4, + J=sp["I_t"] / 4, + Iz=sp["I_z"] / 4, + Iy=sp["I_y"] / 4, + Az=Az, + Ay=Ay, ) + # ───────────────────────────────────────────────────────────────────────── + # Helpers + # ───────────────────────────────────────────────────────────────────────── -def run_plategirder_bridge( - basic_inputs: Optional[Mapping[str, Any]] = None, - additional_inputs: Optional[Mapping[str, Any]] = None, - *, - run_analysis: bool = False, - include_live_load: bool = True, - cad_path: Optional[str] = None, - modifier_hook: Optional[Callable[[PlateGirderRunResult], Dict[str, Any]]] = None, -) -> Dict[str, Any]: - """Functional wrapper around PlateGirderBridge.""" - bridge = PlateGirderBridge( - basic_inputs=basic_inputs, - additional_inputs=additional_inputs, - modifier_hook=modifier_hook, - ) - return bridge.run( - run_analysis=run_analysis, - include_live_load=include_live_load, - cad_path=cad_path, - ).to_dict() + def _to_float(self, key: str, fallback: float) -> float: + """Safely convert a basic_inputs value to float, falling back on error.""" + val = self.basic_inputs.get(key) + if val is None or str(val).strip().lower() in ("", "none"): + return fallback + try: + return float(val) + except (TypeError, ValueError): + return fallback diff --git a/src/osdagbridge/desktop/__main__.py b/src/osdagbridge/desktop/__main__.py index 71840a4e5..bdf4bf6d8 100644 --- a/src/osdagbridge/desktop/__main__.py +++ b/src/osdagbridge/desktop/__main__.py @@ -96,7 +96,7 @@ def create_sqlite(): # Import template_page from osdagbridge.desktop.ui.template_page import CustomWindow -from osdagbridge.core.bridge_types.plate_girder.ui_fields import FrontendData +from osdagbridge.core.bridge_types.plate_girder.plategirderbridge import PlateGirderBridge def load_stylesheet(): """Load the global QSS stylesheet from resources.""" @@ -117,7 +117,7 @@ def main(): if stylesheet: app.setStyleSheet(stylesheet) - window = CustomWindow("Osdag Bridge", FrontendData) + window = CustomWindow("OsdagBridge", PlateGirderBridge) window.showMaximized() window.show() diff --git a/src/osdagbridge/desktop/ui/template_page.py b/src/osdagbridge/desktop/ui/template_page.py index ba17b8ff9..72596e88c 100644 --- a/src/osdagbridge/desktop/ui/template_page.py +++ b/src/osdagbridge/desktop/ui/template_page.py @@ -234,7 +234,7 @@ def mousePressEvent(self, event): from osdagbridge.desktop.ui.cad_3d import CAD3DWindow # 3D CAD placeholder (mutually exclusive with dual view + plots) - self.cad_3d_widget = CAD3DWindow() + self.cad_3d_widget = CentralPlaceholderWidget("3D CAD Here") self.cad_3d_widget.setVisible(False) self.cad_log_splitter.addWidget(self.cad_3d_widget) @@ -302,8 +302,10 @@ def common_design_func(self, trigger: str): print(f"@top:{self.top_view_active}") print(f"@c/s:{self.cross_section_active}") if trigger == "Design": - # Collect all the values from input Dock + # Collect all the values from input Dock and pass to backend + self.backend.set_input(self.input_dict) print(f"@@input_dictionary: {self.input_dict}") + self.backend.design() elif trigger == "Save": # Collect all the values from input Dock and save to osi/csv pass From 9a981f18340257ca270836114058461244b04f3a Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Mon, 23 Mar 2026 12:02:37 +0530 Subject: [PATCH 130/225] Added E, V, rho in Material Table in Intg_osdag.sqlite --- .../plate_girder/plategirderbridge.py | 46 ++++++++------ .../core/data/ResourceFiles/Intg_osdag.sql | 61 ++++++++++--------- 2 files changed, 61 insertions(+), 46 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 092a89e10..b8b974b9e 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -32,7 +32,7 @@ DEFAULT_GIRDER_SPACING, MPa, GPa, - kN, + N, m, ) @@ -43,9 +43,6 @@ _DB_PATH = Path(__file__).resolve().parents[2] / "data" / "ResourceFiles" / "Intg_osdag.sqlite" # Steel constants (same values used in analyser.py __main__) -_STEEL_E = 200 * GPa # Elastic modulus (Pa) -_STEEL_V = 0.3 # Poisson's ratio -_STEEL_RHO = 78.5 * kN / m ** 3 # Unit weight (N/m³) _STEEL_E0 = 200 * GPa # Initial elastic modulus (Pa) _STEEL_B = 0.01 # Strain-hardening ratio _STEEL_FY_DEFAULT = 250 * MPa # Fallback Fy if material not found in DB (Pa) @@ -261,39 +258,54 @@ def setup_grillage(self) -> None: self.grillage_model.assign_members() self.grillage_model.create_model() - def _lookup_material_fy(self, material_name: str) -> float: + def _lookup_material(self, material_name: str, property: str) -> float: """ - Query the Osdag SQLite database for the Yield Strength of the given - material name. Returns Fy in Pa. Falls back to _STEEL_FY_DEFAULT + Query the Osdag SQLite database for the specified property of the given + material name. Returns the property value in its respective units. Falls back to the default value if the DB is missing or the material is not found. """ if not _DB_PATH.exists(): - return _STEEL_FY_DEFAULT + raise LookupError(f"Material database not found at {_DB_PATH} in PlateGirderBridge._lookup_material") try: con = sqlite3.connect(_DB_PATH) cur = con.cursor() + query_map = { + "E": "Modulus of Elasticity", + "V": "Poisson's Ratio", + "rho": "Density", + "fy": "Yield Strength", + } cur.execute( - 'SELECT "Yield Strength" FROM Material WHERE "Material Name" = ?', + f'SELECT "{query_map.get(property)}" FROM Material WHERE "Material Name" = ?', (material_name,), ) row = cur.fetchone() con.close() if row: - return float(row[0]) * MPa # DB stores MPa as integer → convert to Pa + if property == "E": # Elastic modulus (Pa) + return float(row[0]) * GPa + elif property == "V": # Poisson's ratio (unitless) + return float(row[0]) + elif property == "rho": # Unit weight (N/m³) + return float(row[0]) * N / m ** 3 + elif property == "fy": # Yield strength (Pa) + return float(row[0]) * MPa # DB stores MPa as integer → convert to Pa except sqlite3.Error: - pass - return _STEEL_FY_DEFAULT + raise LookupError(f"Error querying material database in PlateGirderBridge._lookup_material: {sqlite3.Error}") def _build_material_props(self) -> MaterialProperties: """Build a MaterialProperties from the selected girder material in basic_inputs.""" material_name = str(self.basic_inputs.get(KEY_GIRDER, "")).strip() - fy = self._lookup_material_fy(material_name) if material_name else _STEEL_FY_DEFAULT - print(fy) + e = self._lookup_material(material_name, "E") if material_name else _STEEL_FY_DEFAULT + v = self._lookup_material(material_name, "V") if material_name else _STEEL_FY_DEFAULT + rho = self._lookup_material(material_name, "rho") if material_name else _STEEL_FY_DEFAULT + fy = self._lookup_material(material_name, "fy") if material_name else _STEEL_FY_DEFAULT + # print(f"e: {e}, v: {v}, rho: {rho}, fy: {fy}") return MaterialProperties( material="steel", - E=_STEEL_E, - v=_STEEL_V, - rho=_STEEL_RHO, + E=e, + v=v, + rho=rho, Fy=fy, E0=_STEEL_E0, b=_STEEL_B, diff --git a/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql b/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql index 16ed4ee18..c26a04a2a 100644 --- a/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql +++ b/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql @@ -65,36 +65,39 @@ INSERT INTO Angle_Pitch VALUES(12,200,20,3,55,55,55); CREATE TABLE IF NOT EXISTS "Material" ( "Material Name" TEXT, "Yield Strength" INTEGER, - "Ultimate Tensile Strength" INTEGER + "Ultimate Tensile Strength" INTEGER, + "Modulus of Elasticity" INTEGER, + "Poisson's Ratio" NUMERIC, + "Density" INTEGER ); -INSERT INTO Material VALUES('E 250A',250,410); -INSERT INTO Material VALUES('E 250BR',250,410); -INSERT INTO Material VALUES('E 250B0',250,410); -INSERT INTO Material VALUES('E 250C',250,410); -INSERT INTO Material VALUES('E 275A',275,430); -INSERT INTO Material VALUES('E 275BR',275,430); -INSERT INTO Material VALUES('E 275B0',275,430); -INSERT INTO Material VALUES('E 275C',275,430); -INSERT INTO Material VALUES('E 300A',300,440); -INSERT INTO Material VALUES('E 300BR',300,440); -INSERT INTO Material VALUES('E 300B0',300,440); -INSERT INTO Material VALUES('E 300C',300,440); -INSERT INTO Material VALUES('E 350A',350,490); -INSERT INTO Material VALUES('E 350BR',350,490); -INSERT INTO Material VALUES('E 350B0',350,490); -INSERT INTO Material VALUES('E 350C',350,490); -INSERT INTO Material VALUES('E 410A',410,540); -INSERT INTO Material VALUES('E 410BR',410,540); -INSERT INTO Material VALUES('E 410B0',410,540); -INSERT INTO Material VALUES('E 410C',410,540); -INSERT INTO Material VALUES('E 450A',450,570); -INSERT INTO Material VALUES('E 450BR',450,570); -INSERT INTO Material VALUES('E 550A',550,650); -INSERT INTO Material VALUES('E 550BR',550,650); -INSERT INTO Material VALUES('E 600A',600,730); -INSERT INTO Material VALUES('E 600BR',600,730); -INSERT INTO Material VALUES('E 650A',650,780); -INSERT INTO Material VALUES('E 650BR',650,780); +INSERT INTO Material VALUES('E 250A',250,410,200,0.3,78500); +INSERT INTO Material VALUES('E 250BR',250,410,200,0.3,78500); +INSERT INTO Material VALUES('E 250B0',250,410,200,0.3,78500); +INSERT INTO Material VALUES('E 250C',250,410,200,0.3,78500); +INSERT INTO Material VALUES('E 275A',275,430,200,0.3,78500); +INSERT INTO Material VALUES('E 275BR',275,430,200,0.3,78500); +INSERT INTO Material VALUES('E 275B0',275,430,200,0.3,78500); +INSERT INTO Material VALUES('E 275C',275,430,200,0.3,78500); +INSERT INTO Material VALUES('E 300A',300,440,200,0.3,78500); +INSERT INTO Material VALUES('E 300BR',300,440,200,0.3,78500); +INSERT INTO Material VALUES('E 300B0',300,440,200,0.3,78500); +INSERT INTO Material VALUES('E 300C',300,440,200,0.3,78500); +INSERT INTO Material VALUES('E 350A',350,490,200,0.3,78500); +INSERT INTO Material VALUES('E 350BR',350,490,200,0.3,78500); +INSERT INTO Material VALUES('E 350B0',350,490,200,0.3,78500); +INSERT INTO Material VALUES('E 350C',350,490,200,0.3,78500); +INSERT INTO Material VALUES('E 410A',410,540,200,0.3,78500); +INSERT INTO Material VALUES('E 410BR',410,540,200,0.3,78500); +INSERT INTO Material VALUES('E 410B0',410,540,200,0.3,78500); +INSERT INTO Material VALUES('E 410C',410,540,200,0.3,78500); +INSERT INTO Material VALUES('E 450A',450,570,200,0.3,78500); +INSERT INTO Material VALUES('E 450BR',450,570,200,0.3,78500); +INSERT INTO Material VALUES('E 550A',550,650,200,0.3,78500); +INSERT INTO Material VALUES('E 550BR',550,650,200,0.3,78500); +INSERT INTO Material VALUES('E 600A',600,730,200,0.3,78500); +INSERT INTO Material VALUES('E 600BR',600,730,200,0.3,78500); +INSERT INTO Material VALUES('E 650A',650,780,200,0.3,78500); +INSERT INTO Material VALUES('E 650BR',650,780,200,0.3,78500); CREATE TABLE IF NOT EXISTS "Bolt_fy_fu" ( `Property_Class` NUMERIC, `Diameter_min` INTEGER, From a3bf76e07d67bd7012c2ddc78ea9ad5ce365e614 Mon Sep 17 00:00:00 2001 From: Aditya Donde Date: Tue, 24 Mar 2026 15:14:08 +0530 Subject: [PATCH 131/225] added dead load and live load methods in plategirderbridge.py --- .../plate_girder/plategirderbridge.py | 183 ++++++++++++++++++ 1 file changed, 183 insertions(+) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index b8b974b9e..ba553ebfb 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -125,11 +125,16 @@ def design(self) -> None: 2. Solve bridge layout 3. Build result DTOs 4. Set up grillage model geometry and sections + 5. Apply dead loads + 6. Apply live loads """ parsed = self._parse_basic_inputs() self._solve_bridge_layout(parsed) self._build_dtos(parsed) self.setup_grillage() + self.add_dead_loads() + self.add_live_loads() + self.analyze() print( f"[PlateGirderBridge.design] " @@ -354,6 +359,184 @@ def _end_transverse_section(self) -> SectionProperties: Ay=Ay, ) + # ───────────────────────────────────────────────────────────────────────── + # Dead loads — permanent loads applied after the grillage model is built + # ───────────────────────────────────────────────────────────────────────── + + def add_dead_loads(self) -> None: + """ + Apply all permanent dead loads to the grillage model in order: + 1. Girder self weight — line load along each longitudinal member + 2. Deck slab — patch load over the full deck area + 3. Wearing course — patch load over the carriageway area + 4. Footpath — patch load on footpath strips (skipped if none) + 5. Crash barrier — line load at each barrier centreline (skipped if none) + 6. Railing — line load at each railing centreline (skipped if none) + + Must be called after setup_grillage() has built and registered the model. + """ + m = self.grillage_model + m.create_self_weight_load() + m.create_deck_load() + m.create_wearing_course_load() + m.create_footpath_load() + m.create_crash_barrier_load() + m.create_railing_load() + + # ───────────────────────────────────────────────────────────────────────── + # Live loads — vehicle and moving loads applied after the grillage model + # ───────────────────────────────────────────────────────────────────────── + + def add_live_loads(self) -> None: + """ + Apply all live loads to the grillage model in order: + 1. Vehicle load cases — static placements per IRC:6 Table 6A + 2. Moving vehicle load cases — moving paths for each vehicle + + Must be called after setup_grillage() has built and registered the model. + """ + m = self.grillage_model + m.add_vehicle_load_cases_from_combinations() + m.create_moving_vehicle_load_cases() + + def vehicle_lane_coordinates(self) -> list: + """ + Return vehicle-to-coordinate mappings for all IRC:6-2017 Table 6A + combinations. + + Delegates to BridgeGrillageModel.vehicle_lane_coordinates(). + + Returns + ------- + list of dict + Each dict has 'case_num' and 'combinations' keys. + """ + return self.grillage_model.vehicle_lane_coordinates() + + def create_vehicle_load_cases(self) -> list: + """ + Create static vehicle load cases based on IRC:6-2017 lane combinations. + + Delegates to BridgeGrillageModel.create_vehicle_load_cases(). + + Returns + ------- + list + All created load case objects. + """ + return self.grillage_model.create_vehicle_load_cases() + + def add_vehicle_load_cases_from_combinations(self) -> list: + """ + Create vehicle load cases with lane factors (alf) and dynamic load + allowance (dla) applied, using IRC:6-2017 combinations. + + Delegates to BridgeGrillageModel.add_vehicle_load_cases_from_combinations(). + + Returns + ------- + list + All created load case objects. + """ + return self.grillage_model.add_vehicle_load_cases_from_combinations() + + def create_moving_vehicle_load_cases( + self, + start_offset: float = -25.0, + span: float | None = None, + ) -> list: + """ + Create moving load cases for all vehicles previously created by + add_vehicle_load_cases_from_combinations(). + + Delegates to BridgeGrillageModel.create_moving_vehicle_load_cases(). + + Parameters + ---------- + start_offset : float + Longitudinal offset (m) behind the bridge start where vehicles + begin traversal (default -25.0). + span : float, optional + Override the bridge span (m); defaults to the analysed span. + + Returns + ------- + list + All created moving load case objects. + """ + return self.grillage_model.create_moving_vehicle_load_cases( + start_offset=start_offset, + span=span, + ) + + def add_vehicle_load_with_moving_path( + self, + vehicle_type: str = "CLASS70R", + load_case_name: str = "Class 70R", + x_coord: float = 0.0, + z_coord: float = 0.0, + spacing: float = 1.5, + span: float | None = None, + y_coord: float = 0.0, + ) -> dict: + """ + Add a single vehicle (static + moving) at an explicit position. + + Delegates to BridgeGrillageModel.add_vehicle_load_with_moving_path(). + + Parameters + ---------- + vehicle_type : str + Load model type (e.g. ``'CLASS70R'``, ``'CLASSA'``). + load_case_name : str + Name given to the static load case. + x_coord : float + Initial longitudinal position (m) of the vehicle. + z_coord : float + Transverse position (m) of the vehicle. + spacing : float + Distance (m) behind bridge start for the moving path origin. + span : float, optional + Override the bridge span (m). + y_coord : float + Vertical coordinate (default 0.0). + + Returns + ------- + dict + Keys: ``'vehicle'``, ``'static_load_case'``, + ``'moving_load_case'``, ``'moving_path'``. + """ + return self.grillage_model.add_vehicle_load_with_moving_path( + vehicle_type=vehicle_type, + load_case_name=load_case_name, + x_coord=x_coord, + z_coord=z_coord, + spacing=spacing, + span=span, + y_coord=y_coord, + ) + + def analyze(self): + """ + Run the OpenSees grillage analysis for all registered load cases. + + Delegates to BridgeGrillageModel.analyze(), which executes the model, + retrieves results for every load case, and stores them in + ``self.grillage_model.dataset``. + + Must be called after add_dead_loads() and add_live_loads() have + registered all load cases on the model. + + Returns + ------- + xarray.Dataset + Results dataset containing displacements and forces for all load + cases, indexed by Loadcase, Node/Element, and Component. + """ + return self.grillage_model.analyze() + + # ───────────────────────────────────────────────────────────────────────── # Helpers # ───────────────────────────────────────────────────────────────────────── From 939b1ef8230e3078fd27177bdc4feb703c693294 Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Wed, 25 Mar 2026 11:21:26 +0530 Subject: [PATCH 132/225] Adding Concrete Grade dto and refactoring existing Material dto --- .../bridge_types/plate_girder/analyser.py | 12 +- .../bridge_types/plate_girder/defaults.py | 12 +- .../bridge_types/plate_girder/designer.py | 6 +- .../core/bridge_types/plate_girder/dto.py | 55 ++++++++- .../plate_girder/plategirderbridge.py | 78 ++++++++----- .../bridge_types/plate_girder/ui_fields.py | 11 +- .../ui_fields_additional_input.py | 4 +- .../core/data/ResourceFiles/Intg_osdag.sql | 104 +++++++++--------- src/osdagbridge/core/utils/common.py | 59 ++++++---- .../desktop/ui/dialogs/material_properties.py | 5 +- 10 files changed, 215 insertions(+), 131 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py index fc20a2831..35ab30087 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/analyser.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/analyser.py @@ -7,7 +7,7 @@ from osdagbridge.core.bridge_types.plate_girder.load_placement import LoadPlacementManager import warnings from osdagbridge.core.bridge_types.plate_girder.analysis_results import PlateGirderAnalysisResults -from osdagbridge.core.bridge_types.plate_girder.dto import (SectionProperties, MaterialProperties, GrillageGeometry, DeckLayoutProperties) +from osdagbridge.core.bridge_types.plate_girder.dto import (SectionProperties, SteelProperties, MaterialProperties, GrillageGeometry, DeckLayoutProperties) class BridgeGrillageModel: @@ -169,12 +169,12 @@ def create_material(self, props: MaterialProperties): Parameters ---------- - props : MaterialProperties + props : SteelProperties Material properties supplied by the user. """ self.steel_custom = og.create_material( - material=props.material, E=props.E, v=props.v, rho=props.rho, - Fy=props.Fy, E0=props.E0, b=props.b + material="steel", E=props.steel_prop.E, v=props.steel_prop.v, rho=props.steel_prop.rho, + Fy=props.steel_prop.Fy, E0=props.steel_prop.E0, b=props.steel_prop.b ) def assign_members(self): @@ -1219,8 +1219,8 @@ def plot(self, model=None): ) # --- Test material values (replace with UI inputs later) --- - bridge.create_material(MaterialProperties( - material="steel", + bridge.create_material(SteelProperties( + grade="steel", E=200 * GPa, v=0.3, rho=78.5 * kN / m ** 3, diff --git a/src/osdagbridge/core/bridge_types/plate_girder/defaults.py b/src/osdagbridge/core/bridge_types/plate_girder/defaults.py index 1e3bcd42b..6805f53eb 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/defaults.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/defaults.py @@ -504,10 +504,10 @@ def get_ai_median_defaults(median_type: str) -> dict[str, float | None]: from osdagbridge.core.utils.common import ( KEY_STRUCTURE_TYPE, KEY_PROJECT_LOCATION, KEY_SPAN, KEY_CARRIAGEWAY_WIDTH, KEY_INCLUDE_MEDIAN, KEY_FOOTPATH, KEY_SKEW_ANGLE, KEY_DESIGN_MODE, KEY_GIRDER, KEY_CROSS_BRACING, KEY_END_DIAPHRAGM, KEY_DECK_CONCRETE_GRADE_BASIC, - VALUES_DECK_CONCRETE_GRADE, connectdb, ) -material_values = connectdb("Material") +steel_properties = connectdb("Steel_Grade_Properties") +concrete_properies = connectdb("Concrete_Grade_Properties") DEFAULTS_DICT = { # Input Dock Defaults @@ -519,10 +519,10 @@ def get_ai_median_defaults(median_type: str) -> dict[str, float | None]: KEY_FOOTPATH: "None", KEY_SKEW_ANGLE: DEFAULT_SKEW_ANGLE_DEG, KEY_DESIGN_MODE: "Optimized", - KEY_GIRDER: material_values[0], - KEY_CROSS_BRACING: material_values[0], - KEY_END_DIAPHRAGM: material_values[0], - KEY_DECK_CONCRETE_GRADE_BASIC: VALUES_DECK_CONCRETE_GRADE[0], + KEY_GIRDER: steel_properties[0], + KEY_CROSS_BRACING: steel_properties[0], + KEY_END_DIAPHRAGM: steel_properties[0], + KEY_DECK_CONCRETE_GRADE_BASIC: concrete_properies[0], # Additional Inputs Defaults diff --git a/src/osdagbridge/core/bridge_types/plate_girder/designer.py b/src/osdagbridge/core/bridge_types/plate_girder/designer.py index 252b3f6dd..9cbcd9605 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/designer.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/designer.py @@ -53,7 +53,7 @@ @dataclass -class MaterialProperties: +class SteelProperties: """ Material strengths and partial safety factors. @@ -238,7 +238,7 @@ class BridgeConfig: |-- DCREngine +-- ReportGenerator """ - material: MaterialProperties = field(default_factory=MaterialProperties) + material: SteelProperties = field(default_factory=SteelProperties) section: SteelSection = field(default_factory=lambda: SteelSection( D=1500, bf_top=400, tf_top=20, bf_bot=500, tf_bot=25, tw=12, )) @@ -256,7 +256,7 @@ def example_33m_bridge(cls) -> "BridgeConfig": matching the ospgrillage analyser model. """ return cls( - material=MaterialProperties( + material=SteelProperties( steel_grade="E350", fy=350.0, fu=490.0, Es=200_000.0, concrete_grade="M65", fck=65.0, fctm=4.1, Ecm=38_000.0, rebar_grade="Fe500", fy_rebar=500.0, diff --git a/src/osdagbridge/core/bridge_types/plate_girder/dto.py b/src/osdagbridge/core/bridge_types/plate_girder/dto.py index 7345462e3..538a29b82 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/dto.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/dto.py @@ -1,7 +1,7 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Optional +from typing import Literal, Optional, Union __all__ = [ "SectionComponent", @@ -87,13 +87,13 @@ class SectionProperties: @dataclass(frozen=True) -class MaterialProperties: +class SteelProperties: """ Holds custom material properties for a grillage member. Attributes ---------- - material : str + grade : str Material type string (e.g. "steel", "concrete"). E : float Elastic modulus (Pa). @@ -108,7 +108,7 @@ class MaterialProperties: b : float, optional Strain-hardening ratio. Required for steel. """ - material: str + grade: str E: float v: float rho: float @@ -117,12 +117,57 @@ class MaterialProperties: b: Optional[float] = None def __post_init__(self) -> None: - if self.material == "steel": + if self.grade == "steel": if any(val is None for val in (self.Fy, self.E0, self.b)): raise ValueError( "Fy, E0, and b are all required when material is 'steel'." ) +@dataclass(frozen=True) +class ConcreteProperties: + """ + Holds material properties for a concrete grillage member. + + Attributes + ---------- + grade : str + Concrete grade designation (e.g. "M25", "M30"). + fck : float + Characteristic compressive cylinder strength (MPa). + fctm : float + Mean axial tensile strength (MPa). + Ecm : float + Mean secant modulus of elasticity (GPa). + """ + grade: str + fck: float + fctm: float + Ecm: float + + def __post_init__(self) -> None: + if not self.grade: + raise ValueError("grade must not be empty.") + if any(val is None for val in (self.fck, self.fctm, self.Ecm)): + raise ValueError("fck, fctm, and Ecm must not be None.") + +@dataclass(frozen=True) +class MaterialProperties: + """ + Holds material type and its corresponding properties for a grillage member. + + Attributes + ---------- + steel_prop : SteelProperties + concrete_prop : ConcreteProperties + """ + steel_prop: SteelProperties + concrete_prop: ConcreteProperties + + def __post_init__(self) -> None: + if not isinstance(self.steel_prop, SteelProperties): + raise ValueError("steel_prop must be a SteelProperties instance.") + if not isinstance(self.concrete_prop, ConcreteProperties): + raise ValueError("concrete_prop must be a ConcreteProperties instance.") @dataclass(frozen=True) class GrillageGeometry: diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index ba553ebfb..64552312b 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -2,7 +2,7 @@ import sqlite3 from pathlib import Path from .ui_fields import FrontendData -from .dto import DeckLayoutProperties, GrillageGeometry, SectionProperties, MaterialProperties +from .dto import ConcreteProperties, DeckLayoutProperties, GrillageGeometry, SectionProperties, SteelProperties, MaterialProperties, ConcreteProperties from .defaults import ( DEFAULTS_DICT, DEFAULT_SPAN_M, @@ -271,50 +271,74 @@ def _lookup_material(self, material_name: str, property: str) -> float: """ if not _DB_PATH.exists(): raise LookupError(f"Material database not found at {_DB_PATH} in PlateGirderBridge._lookup_material") + + # Choose the table: steel or concrete + table = 'Steel_Grade_Properties' if material_name[0] == 'E' else 'Concrete_Grade_Properties' + try: con = sqlite3.connect(_DB_PATH) cur = con.cursor() - query_map = { - "E": "Modulus of Elasticity", - "V": "Poisson's Ratio", - "rho": "Density", - "fy": "Yield Strength", - } cur.execute( - f'SELECT "{query_map.get(property)}" FROM Material WHERE "Material Name" = ?', + f'SELECT "{property}" FROM {table} WHERE "Grade" = ?', (material_name,), ) row = cur.fetchone() con.close() if row: - if property == "E": # Elastic modulus (Pa) + if property == "Modulus of Elasticity": # Elastic modulus (Pa) return float(row[0]) * GPa - elif property == "V": # Poisson's ratio (unitless) + elif property == "Poisson's Ratio": # Poisson's ratio (unitless) return float(row[0]) - elif property == "rho": # Unit weight (N/m³) + elif property == "Density": # Unit weight (N/m³) return float(row[0]) * N / m ** 3 - elif property == "fy": # Yield strength (Pa) - return float(row[0]) * MPa # DB stores MPa as integer → convert to Pa + elif property == "Yield Strength": # Yield strength (Pa) + return float(row[0]) * MPa # DB stores MPa as integer → convert to Pa + elif property in ("fck", "fctm", "Ecm"): # Concrete properties (MPa or GPa depending on property) + return float(row[0]) + else: + raise SyntaxError(f"Unknown property '{property}' requested in table '{table}' in PlateGirderBridge._lookup_material") + except sqlite3.Error: raise LookupError(f"Error querying material database in PlateGirderBridge._lookup_material: {sqlite3.Error}") def _build_material_props(self) -> MaterialProperties: """Build a MaterialProperties from the selected girder material in basic_inputs.""" - material_name = str(self.basic_inputs.get(KEY_GIRDER, "")).strip() - e = self._lookup_material(material_name, "E") if material_name else _STEEL_FY_DEFAULT - v = self._lookup_material(material_name, "V") if material_name else _STEEL_FY_DEFAULT - rho = self._lookup_material(material_name, "rho") if material_name else _STEEL_FY_DEFAULT - fy = self._lookup_material(material_name, "fy") if material_name else _STEEL_FY_DEFAULT - # print(f"e: {e}, v: {v}, rho: {rho}, fy: {fy}") + + # Collecting Steel Grade Properties + steel_grade = str(self.basic_inputs.get(KEY_GIRDER)).strip() + e = self._lookup_material(steel_grade, "Modulus of Elasticity") + v = self._lookup_material(steel_grade, "Poisson's Ratio") + rho = self._lookup_material(steel_grade, "Density") + fy = self._lookup_material(steel_grade, "Yield Strength") + # print(f"grade: {steel_grade}, e: {e}, v: {v}, rho: {rho}, fy: {fy}") + steel_prop = SteelProperties( + grade=steel_grade, + E=e, + v=v, + rho=rho, + Fy=fy, + E0=_STEEL_E0, + b=_STEEL_B, + ) + + # Collecting Deck Concrete Properties + concrete_grade = str(self.basic_inputs.get(KEY_DECK_CONCRETE_GRADE_BASIC)).strip() + fck = self._lookup_material(concrete_grade, "fck") + fctm = self._lookup_material(concrete_grade, "fctm") + Ecm = self._lookup_material(concrete_grade, "Ecm") + # print(f"grade: {concrete_grade}, fck: {fck}, fctm: {fctm}, Ecm: {Ecm}") + concrete_prop = ConcreteProperties( + grade=concrete_grade, + fck=fck, + fctm=fctm, + Ecm=Ecm, + ) + + # Return Material Properties DTO return MaterialProperties( - material="steel", - E=e, - v=v, - rho=rho, - Fy=fy, - E0=_STEEL_E0, - b=_STEEL_B, - ) + steel_prop=steel_prop, + concrete_prop=concrete_prop + ) def _girder_section(self) -> SectionProperties: """Build a SectionProperties for the main/edge longitudinal girder from section_props.""" diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 6331b19ff..0fe64e5ec 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -91,7 +91,8 @@ def input_values(self): - All per-field validation, placeholders, callbacks, and material behaviour are declared here — InputDock has no key-specific logic. """ - material_values = connectdb("Material") + steel_properties = connectdb("Steel_Grade_Properties") + concrete_properies = connectdb("Concrete_Grade_Properties") return [ # ── Module marker ───────────────────────────────────────────────── @@ -185,21 +186,21 @@ def input_values(self): (KEY_SECTION_MATERIAL, DISP_TITLE_MATERIAL, TYPE_TITLE, None, True, "No Validator", {"container": "superstructure"}), - (KEY_GIRDER, KEY_DISP_GIRDER, TYPE_COMBOBOX, material_values, + (KEY_GIRDER, KEY_DISP_GIRDER, TYPE_COMBOBOX, steel_properties, True, "No Validator", { "is_material_field": True, "member_type": "Girder", }), - (KEY_CROSS_BRACING, KEY_DISP_CROSS_BRACING, TYPE_COMBOBOX, material_values, + (KEY_CROSS_BRACING, KEY_DISP_CROSS_BRACING, TYPE_COMBOBOX, steel_properties, True, "No Validator", { "is_material_field": True, "member_type": "Girder", }), - (KEY_END_DIAPHRAGM, KEY_DISP_END_DIAPHRAGM, TYPE_COMBOBOX, material_values, + (KEY_END_DIAPHRAGM, KEY_DISP_END_DIAPHRAGM, TYPE_COMBOBOX, steel_properties, True, "No Validator", { "is_material_field": True, @@ -207,7 +208,7 @@ def input_values(self): }), (KEY_DECK_CONCRETE_GRADE_BASIC, KEY_DISP_DECK_CONCRETE_GRADE, TYPE_COMBOBOX, - VALUES_DECK_CONCRETE_GRADE, True, "No Validator", + concrete_properies, True, "No Validator", { "default": DEFAULTS_DICT.get(KEY_DECK_CONCRETE_GRADE_BASIC), "is_material_field": True, diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py index 5ee3c662c..f6040c4b3 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields_additional_input.py @@ -27,7 +27,7 @@ VALUES_WEB_TYPE, VALUES_RAILING_TYPE, VALUES_WEARING_COAT_MATERIAL, - VALUES_YES_NO, + VALUES_NO_YES, STIFFENER_DETAILS_DEFAULTS, ) @@ -1724,7 +1724,7 @@ "id": "intermediate_stiffener", "label": "Intermediate Stiffener:", "type": "combo", - "choices": VALUES_YES_NO, + "choices": VALUES_NO_YES, "bind": "intermediate_combo", }, { diff --git a/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql b/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql index c26a04a2a..041c9a3cc 100644 --- a/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql +++ b/src/osdagbridge/core/data/ResourceFiles/Intg_osdag.sql @@ -62,42 +62,64 @@ INSERT INTO Angle_Pitch VALUES(10,125,20,2,45,50,NULL); INSERT INTO Angle_Pitch VALUES(11,150,20,2,55,55,NULL); INSERT INTO Angle_Pitch VALUES(13,200,30,2,75,75,NULL); INSERT INTO Angle_Pitch VALUES(12,200,20,3,55,55,55); -CREATE TABLE IF NOT EXISTS "Material" ( - "Material Name" TEXT, +CREATE TABLE IF NOT EXISTS "Steel_Grade_Properties" ( + "Grade" TEXT NOT NULL UNIQUE, "Yield Strength" INTEGER, "Ultimate Tensile Strength" INTEGER, "Modulus of Elasticity" INTEGER, "Poisson's Ratio" NUMERIC, "Density" INTEGER ); -INSERT INTO Material VALUES('E 250A',250,410,200,0.3,78500); -INSERT INTO Material VALUES('E 250BR',250,410,200,0.3,78500); -INSERT INTO Material VALUES('E 250B0',250,410,200,0.3,78500); -INSERT INTO Material VALUES('E 250C',250,410,200,0.3,78500); -INSERT INTO Material VALUES('E 275A',275,430,200,0.3,78500); -INSERT INTO Material VALUES('E 275BR',275,430,200,0.3,78500); -INSERT INTO Material VALUES('E 275B0',275,430,200,0.3,78500); -INSERT INTO Material VALUES('E 275C',275,430,200,0.3,78500); -INSERT INTO Material VALUES('E 300A',300,440,200,0.3,78500); -INSERT INTO Material VALUES('E 300BR',300,440,200,0.3,78500); -INSERT INTO Material VALUES('E 300B0',300,440,200,0.3,78500); -INSERT INTO Material VALUES('E 300C',300,440,200,0.3,78500); -INSERT INTO Material VALUES('E 350A',350,490,200,0.3,78500); -INSERT INTO Material VALUES('E 350BR',350,490,200,0.3,78500); -INSERT INTO Material VALUES('E 350B0',350,490,200,0.3,78500); -INSERT INTO Material VALUES('E 350C',350,490,200,0.3,78500); -INSERT INTO Material VALUES('E 410A',410,540,200,0.3,78500); -INSERT INTO Material VALUES('E 410BR',410,540,200,0.3,78500); -INSERT INTO Material VALUES('E 410B0',410,540,200,0.3,78500); -INSERT INTO Material VALUES('E 410C',410,540,200,0.3,78500); -INSERT INTO Material VALUES('E 450A',450,570,200,0.3,78500); -INSERT INTO Material VALUES('E 450BR',450,570,200,0.3,78500); -INSERT INTO Material VALUES('E 550A',550,650,200,0.3,78500); -INSERT INTO Material VALUES('E 550BR',550,650,200,0.3,78500); -INSERT INTO Material VALUES('E 600A',600,730,200,0.3,78500); -INSERT INTO Material VALUES('E 600BR',600,730,200,0.3,78500); -INSERT INTO Material VALUES('E 650A',650,780,200,0.3,78500); -INSERT INTO Material VALUES('E 650BR',650,780,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 250A',250,410,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 250BR',250,410,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 250B0',250,410,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 250C',250,410,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 275A',275,430,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 275BR',275,430,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 275B0',275,430,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 275C',275,430,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 300A',300,440,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 300BR',300,440,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 300B0',300,440,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 300C',300,440,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 350A',350,490,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 350BR',350,490,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 350B0',350,490,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 350C',350,490,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 410A',410,540,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 410BR',410,540,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 410B0',410,540,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 410C',410,540,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 450A',450,570,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 450BR',450,570,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 550A',550,650,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 550BR',550,650,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 600A',600,730,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 600BR',600,730,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 650A',650,780,200,0.3,78500); +INSERT INTO Steel_Grade_Properties VALUES('E 650BR',650,780,200,0.3,78500); +CREATE TABLE IF NOT EXISTS "Concrete_Grade_Properties" ( + "Grade" TEXT NOT NULL UNIQUE, + "fck" REAL NOT NULL, + "fctm" REAL NOT NULL, + "Ecm" REAL NOT NULL +); +INSERT INTO Concrete_Grade_Properties VALUES('M15',15.0,1.6,27.0); +INSERT INTO Concrete_Grade_Properties VALUES('M20',20.0,1.9,29.0); +INSERT INTO Concrete_Grade_Properties VALUES('M25',25.0,2.2,30.0); +INSERT INTO Concrete_Grade_Properties VALUES('M30',30.0,2.5,31.0); +INSERT INTO Concrete_Grade_Properties VALUES('M35',35.0,2.8,32.0); +INSERT INTO Concrete_Grade_Properties VALUES('M40',40.0,3.0,33.0); +INSERT INTO Concrete_Grade_Properties VALUES('M45',45.0,3.3,34.0); +INSERT INTO Concrete_Grade_Properties VALUES('M50',50.0,3.5,35.0); +INSERT INTO Concrete_Grade_Properties VALUES('M55',55.0,3.7,36.0); +INSERT INTO Concrete_Grade_Properties VALUES('M60',60.0,4.0,37.0); +INSERT INTO Concrete_Grade_Properties VALUES('M65',65.0,4.4,38.0); +INSERT INTO Concrete_Grade_Properties VALUES('M70',70.0,4.5,38.0); +INSERT INTO Concrete_Grade_Properties VALUES('M75',75.0,4.7,39.0); +INSERT INTO Concrete_Grade_Properties VALUES('M80',80.0,4.8,40.0); +INSERT INTO Concrete_Grade_Properties VALUES('M85',85.0,4.9,40.0); +INSERT INTO Concrete_Grade_Properties VALUES('M90',90.0,5.0,41.0); CREATE TABLE IF NOT EXISTS "Bolt_fy_fu" ( `Property_Class` NUMERIC, `Diameter_min` INTEGER, @@ -1375,26 +1397,4 @@ INSERT INTO Angles VALUES(196,'150 x 90 x 15',26.66,33.9,150.0,90.0,15.0,12.0,4. INSERT INTO Angles VALUES(197,'200 x 100 x 15',33.86,43.1,200.0,100.0,15.0,15.0,4.8,7.17,2.23,1770.0,303.0,0.25,1870.0,196.0,6.41,2.65,6.6,2.13,138.0,39.0,241.0,72.9,32.0,'IS808_Rev',NULL); INSERT INTO Angles VALUES(198,'200 x 150 x 15',39.75,50.6,200.0,150.0,15.0,15.0,4.8,6.22,3.75,2030.0,988.0,0.5,2490.0,530.0,6.34,4.42,7.02,3.24,147.0,87.8,268.0,157.0,37.6,'IS808_Rev',NULL); INSERT INTO Angles VALUES(199,'200 x 150 x 18',47.21,60.1,200.0,150.0,18.0,15.0,4.8,6.34,3.86,2390.0,1150.0,0.5,2920.0,623.0,6.3,4.38,6.97,3.22,175.0,103.0,317.0,187.0,64.5,'IS808_Rev',NULL); -CREATE TABLE IF NOT EXISTS "Concrete_Grade_Properties" ( - "Grade" TEXT NOT NULL UNIQUE, - "fck" REAL NOT NULL, - "fctm" REAL NOT NULL, - "Ecm" REAL NOT NULL -); -INSERT INTO Concrete_Grade_Properties VALUES('M15',15.0,1.6,27.0); -INSERT INTO Concrete_Grade_Properties VALUES('M20',20.0,1.9,29.0); -INSERT INTO Concrete_Grade_Properties VALUES('M25',25.0,2.2,30.0); -INSERT INTO Concrete_Grade_Properties VALUES('M30',30.0,2.5,31.0); -INSERT INTO Concrete_Grade_Properties VALUES('M35',35.0,2.8,32.0); -INSERT INTO Concrete_Grade_Properties VALUES('M40',40.0,3.0,33.0); -INSERT INTO Concrete_Grade_Properties VALUES('M45',45.0,3.3,34.0); -INSERT INTO Concrete_Grade_Properties VALUES('M50',50.0,3.5,35.0); -INSERT INTO Concrete_Grade_Properties VALUES('M55',55.0,3.7,36.0); -INSERT INTO Concrete_Grade_Properties VALUES('M60',60.0,4.0,37.0); -INSERT INTO Concrete_Grade_Properties VALUES('M65',65.0,4.4,38.0); -INSERT INTO Concrete_Grade_Properties VALUES('M70',70.0,4.5,38.0); -INSERT INTO Concrete_Grade_Properties VALUES('M75',75.0,4.7,39.0); -INSERT INTO Concrete_Grade_Properties VALUES('M80',80.0,4.8,40.0); -INSERT INTO Concrete_Grade_Properties VALUES('M85',85.0,4.9,40.0); -INSERT INTO Concrete_Grade_Properties VALUES('M90',90.0,5.0,41.0); COMMIT; diff --git a/src/osdagbridge/core/utils/common.py b/src/osdagbridge/core/utils/common.py index a0217d9a3..2b0e015ea 100644 --- a/src/osdagbridge/core/utils/common.py +++ b/src/osdagbridge/core/utils/common.py @@ -90,18 +90,6 @@ # Canonical footpath options used across UI + CAD/code clauses. VALUES_FOOTPATH = ["None", "Single Side", "Both Sides"] -VALUES_MATERIAL = [ - "E 250A", "E 250BR", "E 250B0", "E 250C", - "E 275A", "E 275BR", "E 275B0", "E 275C", - "E 300A", "E 300BR", "E 300B0", "E 300C", - "E 350A", "E 350BR", "E 350B0", "E 350C", - "E 410A", "E 410BR", "E 410B0", "E 410C", - "E 450A", "E 450BR", - "E 550A", "E 550BR", - "E 600A", "E 600BR", - "E 650A", "E 650BR", -] - # Validation limits SPAN_MIN = 20.0 SPAN_MAX = 45.0 @@ -221,11 +209,6 @@ # Value Lists for Additional Inputs VALUES_NO_YES = ["No", "Yes"] -VALUES_DECK_CONCRETE_GRADE = [ - "M 15", "M 20", "M 25", "M 30", "M 35", "M 40", "M 45", "M 50", - "M 55", "M 60", "M 65", "M 70", "M 75", "M 80", - "M 85", "M 90", -] VALUES_REINF_MATERIAL = ["Fe 415", "Fe 500", "Fe 550"] VALUES_REINF_SIZE = ["8", "10", "12", "16", "20", "25", "32"] VALUES_CRASH_BARRIER_TYPE = [ @@ -290,7 +273,7 @@ "bearing_thickness_mode": VALUES_PROFILE_SCOPE[0], "bearing_thickness_value": SAIL_APPROVED_THICKNESS_VALUES[0], "bearing_outstand_mm": "", - "intermediate_stiffener": VALUES_YES_NO[0], + "intermediate_stiffener": VALUES_NO_YES[0], "intermediate_spacing_mm": "NA", "intermediate_outstand_mm": "", "longitudinal_stiffener": VALUES_LONGITUDINAL_STIFFENER[0], @@ -327,9 +310,39 @@ } KEY_TERRAIN_TYPE = ["plain", "obstructed"] +from pathlib import Path +import sqlite3 +_DB_PATH = Path(__file__).resolve().parents[1] / "data" / "ResourceFiles" / "Intg_osdag.sqlite" + +def connectdb(table_name: str) -> list[str]: + """ + Fetches all grade designations from the Grade column of the given table. + + Parameters + ---------- + table_name : str + Name of the table to query. + + Returns + ------- + list[str] + List of grade strings (e.g. ["M15", "M20", ...]). + + Raises + ------ + LookupError + If the database is not found or the query fails. + """ + if not _DB_PATH.exists(): + raise LookupError(f"Material database not found at {_DB_PATH} in get_grades") + + try: + con = sqlite3.connect(_DB_PATH) + cur = con.cursor() + cur.execute(f'SELECT Grade FROM {table_name}') + rows = cur.fetchall() + con.close() + return [row[0] for row in rows] + except sqlite3.Error as e: + raise LookupError(f"Error querying database in connectdb(): {e}") -def connectdb(table_name, popup=None): - """Mock database connection - returns sample data.""" - if table_name == "Material": - return VALUES_MATERIAL - return [] diff --git a/src/osdagbridge/desktop/ui/dialogs/material_properties.py b/src/osdagbridge/desktop/ui/dialogs/material_properties.py index 95ba43e7a..f1b5d0f4b 100644 --- a/src/osdagbridge/desktop/ui/dialogs/material_properties.py +++ b/src/osdagbridge/desktop/ui/dialogs/material_properties.py @@ -10,8 +10,9 @@ from osdagbridge.desktop.ui.utils.custom_titlebar import CustomTitleBar from osdagbridge.desktop.ui.dialogs.custom_messagebox import CustomMessageBox, MessageBoxType from osdagbridge.desktop.ui.docks.dock_utils import apply_field_style -from osdagbridge.core.utils.common import VALUES_MATERIAL, VALUES_DECK_CONCRETE_GRADE, KEY_GIRDER, KEY_CROSS_BRACING, KEY_END_DIAPHRAGM +from osdagbridge.core.utils.common import connectdb, KEY_GIRDER, KEY_CROSS_BRACING, KEY_END_DIAPHRAGM +concrete_properies = connectdb("Concrete_Grade_Properties") DIALOG_TITLE_MATERIAL_PROPERTIES = "Enter Custom Properties" CUSTOM_MATERIAL_PREFIX = "Cus_" @@ -366,7 +367,7 @@ def _build_fields_form(self): def _is_deck_material(self, material_name: str) -> bool: normalized = (material_name or "").strip() - return normalized in VALUES_DECK_CONCRETE_GRADE + return normalized in concrete_properies def _defaults_for_material(self, material_name): if self.is_deck_material: From 9c881aa36dee5cfd2b1334b3b1cb2ecc7b98b57b Mon Sep 17 00:00:00 2001 From: mhsuhail00 Date: Wed, 25 Mar 2026 23:21:10 +0530 Subject: [PATCH 133/225] Rename output checkbox text and size --- .../bridge_types/plate_girder/ui_fields.py | 4 +- .../desktop/resources/resources_rc.py | 224 +++++++++--------- .../desktop/resources/themes/lightstyle.qss | 2 +- .../desktop/ui/docks/output_dock.py | 6 +- .../desktop/ui/utils/combobox_utils.py | 87 ++++++- 5 files changed, 205 insertions(+), 118 deletions(-) diff --git a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py index 0fe64e5ec..b052dc725 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/ui_fields.py @@ -233,7 +233,9 @@ def output_values(self, flag=None): (KEY_ANALYSIS_FORCES, None, # None = no label TYPE_CHECKBOX_GRID, - [["Vx","Tx","Dx"], ["Vy","Ty","Dy"], ["Vz","Tz","Dz"]], + [["Fx","Vy","Vz"], + ["Tx","My","Mz"], + ["Dx","Dy","Dz"]], True, "No Validator", {"exclusive": True}), (KEY_ANALYSIS_DISPLAY_OPTIONS, None, # label goes on the groupbox title instead diff --git a/src/osdagbridge/desktop/resources/resources_rc.py b/src/osdagbridge/desktop/resources/resources_rc.py index 9f73a0546..de7958227 100644 --- a/src/osdagbridge/desktop/resources/resources_rc.py +++ b/src/osdagbridge/desktop/resources/resources_rc.py @@ -6,86 +6,86 @@ from PySide6 import QtCore qt_resource_data = b"\ -\x00\x00\x04\xd8\ +\x00\x00\x04\xd7\ (\ -\xb5/\xfd`\xe8\x14u&\x00&,\x88 \xd0\x5c7\ -\x98j\xfb\xe6\xb5.\xc56n\x15\xd6t\x0a+\x9d\xc1\ -\x15\x8e\x8a\xa8\xc6\xde/\xa3\xd4\xd3\xcb\x80\x12\x85\x00~\ -\x00|\x00\x17\xcav1\xab\xc8b,\xfa\xcc\xc8[\xc7\ -\x91\x9a/s\xf3\xeeV2\xd3\x92S\xa4\xe8\x16\x11\xf8\ -X-\xd6\xfe2\x15?f,a\xa4\x04\xdeel\xb1\ -\xa8\x8d\xf7\xc4\x99\x5c\x894t\x99\xbb\xf0xk\xe9V\ -\xba\xf9\x14\xc4\x9a\xaa\xe2\x9b!\xdf\x9a>Hp\x90\xe2\ -u@\x8c#\x14\x80\x00 \x900\xb8I\xa4\xa9h.\ -\x9a\xca\xe7\x09\xb9\xc9s\xcbw\xd2p(\x18P\xc75\ -\x17}_&\xf4\x81&Q\xc85#\x8cc(\x96P\ -\xc7\xdd\x01\x81\x89\x1b\x12\x014D\x95\xa8'\xa9\x89\xfa\ -M\xadY\xfe\x16d\xea\x9d\xf77\x05\xb2\xa5\x11\x09-\ -~+\xd1\x11l>\xbd{\x92\x96U\xe6\xe3\x8b\x8do\ -aU\xc7q[E\xd6W9T{\xac\xae\x8c7\x15\ -\xebxk\xd79Djj\x8e\xdbd\xde[\xd8\x0e\xf9\ -\x0b\x87+\xf1U\x15\xb74\xc4\x16\xb3Y\xde\x8e\x97\xaa\ -\xbanWk\x86>\xf9+$\x8aw\xfb~y\xc9j\ -\xa9\x06\xdb\xf9M\x9cM\x96>\xebH\xb3\xf6\xb1\xaa\xb5\ -}q\xeae.\x02[Yo\xdd\x080\x89A\x81\xfd\ -\x90\x82\xee\xbd\xddUT\xe2\xad\xcf\x8a`?9\xd6\x92\ -\xe8\xdd~\xfdf4\x5c2Z\x1c\xbal\xf8\xbb\xaa\x5c\ -\x17\xef}z*}z\xec\xb7\x1e\xf4\xd7\xd4\xe3tD\ -\xa2\x91\xe7 \x05\xf4q>n\xa1\xf8\x8b/C\xbb_\ -\x17\x1eM\x9c-\x10\x17\xce\x99j%\xde\x1b\x87&\xde\ -y\xa7\xdej[\xa6\xe6\xeb\xed\xe2\xf8\x14\x0c\x87|Z\ -\x7f6\xb7\xf8\xf6u\xb7\xefgj\xeaK\xf3\xf6\xae\xc1\ -\xc8\x01~\xff]\xfbC\xa7\x9f\xa9N\x98\xa7\xfe\xb1f\ -\xc2S\x1fn\xb5\x9a_\x9c\x7f\x95\xa9e{l\x9cv\ -kY\xfef\xa3\xe4\xad\xfdU\xdb3N9\xec3\xe9\ -\xa0K6K\xc5\xba\xf3\xb7\xbaL=kq\x16C\x8f\ -/.\xfd0p=\xc7\xf3\xd7|\xe2\xca\xc0;\x98\xad\ -%MAv\x1d\xbf\xfdz\xd1\x8c[\xf8\x88\xb2+\x11\ -[4\xfd\xb7\x82^\xb8\x88p\x9b(r\x22\xe3\xf1\x1a\ -\xdbJ\xc6[?\xe8E\x1dT\x91r\x04\x81$\xa8\xe1\ -\xa9\x224#\x22\x92\x14$Isq\x88B\x14\x92\x16\ -\xb2\xbc\x01\xb2X@\x85R,\xc2 \x10\x86\x08\x95\x80\ -\x10L\x882\xc6\x04\x22\x81\x92 \x125\xad\x01\x9e\xa4\ -\x92\x89d\xdc\xe6x\x05\xf1Ct{1!\xff\x8dN\ -\xd1D44\xf5\xc0$\x07\x17\xa8R\xcam\xdb\xc9\xaa\ -x\x86e1\xb3\x0e$%\x94\x03\xf0\xc6\xee\xbbz\xfa\ -\xfa9\xc7\xfaU\x901\xd4\x17\x22\x96\x05\x1aGn\x96\ -\x98\x00B\xaaa\x8fC\xc1h\xb6\xb50\xc4=\xd1\xaa\ -\xcb@\x1b\xd5f\x82\xdd\x03{\xb4u\xcb\x8d\x1a\xd4\x96\ -\xc1\xa6\x8bK\x10v;g\xdb\x13\xb2\x86)T\xfa\xfa\ -\x84\xc0\xf2\xdb\xd3)\x1a\xaey\xdd\xf6\x00\x0e\xa4XP\ -\xc2\x8d\x92`\x0aF?\xd5\xca\xe6c0\x81&\xa9I\ -\xed\xb6\xc27\xf6\x06\x8c\xb9\xaf\xef\x1d\xfcmh\x8c\xe7\ -\xc9\x8eY$\xeb0\x8ei\xe4X)\x07\xb5w,\x00\ -3\xb3\xfczP\x1d\x5c]Rk3\xb1\x86\x9c\xda\xaa\ -Sz\xc7\xf6\xa3^\xbb\x0f\x8b\xcf\xd3\xb5\x06\x5c;\xce\ -\x83\x9eb\xc6a\xc2\xc4\xd33g\xc7\xa5R\x10%W\ -\xa3\xaa\xe4\x1c\xf5l\xbb\x22#\xc5\x0b\x9b\xff|\x13)\ -\xb0\xdc4XH\xba\xb3A\xa3\xc2\xda\xb7\x7fg\x07\xa8\ -\x98wV\xd10\x0f\xb8\x1f\x18{\xa9\xb9\xaf\xeb\x92\xe1\ -ZT\x03\x10\x85y\xa8\xe1\x88\x08\xbaI\xe9\x18\x5c?\ -]!g\x98\x04\xb3\x90\xc6\x9as\xc3\x9fq\xfdK\x98\ -\xf8:\xf4gX\x03\x02\x80P=\x19\x0f\x93\xb2\xcdI\ -.\x93\x9d\xcfJ\xd2\xd9\x95\x05\x16\xe0\xaa\x8c\xb6\xe5\x06\ -b\xd2\xdc2\x8e\x1bP\xa7\xc9{\xf0\xff^17\xa6\ -\xc0?\xa3\xd9\xcc7\x02\x15\xf1\xc6\x14P\xe7\x8b\xf8\x95\ -\x95\xcaD\xb2\xf8\xf0\x8d\x951\x1f\x97:\x11\xa5\xe6\xbf\ -K\xd5O\xc7\x10Fm\x97\xc4\xf5\xe8\xce\xf2\xcc\x9cU\ -\x02\x8d\x17\xb7\x9a\xc6\xd6\x16\x0c\xe4\x0e;&\x13\x91\x16\ -\xbd\x07\xcf'\x0fF\xc3\xdbU^\x9c]wp\x0c\x02\ -\xa2\xdc\x19\xdfL\xe8\x8f\xb0d\xb8q(>\xbc\x07\x22\ -\xe1\x80`\xc1m\xe4\x11\x9d2\xe9}\xbe\xf4a\x11\xdd\ -\xfe\xac\xab]x\x18\x0eB\x12z/`\xbfq0+\ -\x85\x9f\x18\xe4Tk\x84\xe6\xdfz\xa5g\xaa|ow\ -=\xd18\x13\x8c\xc0e95\x9a\xa42B\xe2\ +\x98W\x92\xd9\xd7\xabx\xea\xf9\xd2\xd2\xfc\xef\x86\x91|\ +cQf@v\xff\xe9\xaf$pC\x9c~y\xe6\xd5\ +/3\x0f\xf5\xffm\xca\xeeF1\xfb\xa3+\xee\xfb&\ +\x89\x09\xcb\xba\x98\xb8\xbaXP\x12\x94\x84@i\xea\xb4\ +r\x99\xa9\xc7cu\x9bY\xf0\xb8\xb5\x0f\xd2\xfc\xdf\xaf\ +\x88]\xf5\xb7\xdf\xe9\x09E\xf6\xd5\xbe\xd1\x83\x85\xa2T\ +x\x81\xba\xb7m}\xd8\xb3\xaf{\xda\xf6\xd5K\x9f}\ +v\x11%L\xbb=\xdf\x17\xbf\xb6\xefN\xeav;J\ +\x88k\xbb\x06TN\x88\xa9\xdb\xee\xb0/\x13)D\x12\ +D\xa5\xa6uDt\xb1\x7f\xb9\xb3g\xeb\x1d\x06i\x8b\ +q\xc5\x0d\xd1|P\xbe\xed\x0fg\xdf4\xa7[\xc8i\ +\xa7\xae\xb1\x81\x80\xa7%\xd8\xb6\xb4\x9bc\x04\xd8\x81L\ +\xa9\xbd\xce\xc2\xcbH\xfd\xa7\xad\x11\x09\x81#\xc7\xec\x80\ +\x9e\x81nSYM\x17\x02\x83\x14A(\xc1\x8aB_\ +\x9f\x18\xeb\x7f\xdb\xe2\xf3,\x8f\xd2\xb1D\x01\x81!\xa8\ +\xd1\xa9\x224$\x22\x92\x14$Isa\x88B\x14\x92\ +\x18\xb2\xbc\x01\xa2`8ES\x1cC!\x0c\x85\x18\x81\ +!\x84`B\x142H \x12\xa8$\x125\xad\x01\x9e\ +\xa4b\x99dd\xe4\xf0\x0f\xe2\xdf\xd1\x0db\xd5\xc8\x8d\ +\xa6\xfb\xc4$4\xb5\x82I\xbe\x11(\xa4\x90\xd9\xcaN\ +\xd6)\x06\x14\x13\xcb\x7f\x90\xa8\x84P\xc0d,\xb5\x0b\ +>n\xf9\xd8\x14\xc54\xd9\xfb\xfa\xbbdY\xa4q\xe4\ +\xe0\x88\x16!\x196$q\xf8\xde\xb2\x00#L\xb6'\ +\x22u\x16\xd1\x86\xb79\xcf\x98\xc8\x1e\xd5n\xb9\xa4\x06\ +\xe5e\xc0t\xb1-\x04\xdd\x8e\xf8\xf6d\xde\xd6\x0a\x95\ +\xc6\x9f\xdbR~z\x9c\xa6\xf5\x9a\x17\xb4\x07\xe4@\x0a\ +z\xd4\x9b\xe3\x82I\x8f~\xe1\xca\x9bp\x0a\x81:S\ +w\xec6\x99o\xcc\x1a\xd2\xb9\xd1\xf3\x0f~\x80\x1a\x83\ +{\xb23}\xce\xda\x1c\xde\x11r1\x96\xc3\xfb\x9d\xf6\ +2\xdf\xac=^+\x07\x7f\x9d$\xb1\x09^!'\xb5\ +t\x0a\xe7\x8c\xfdQ\xd5\x8e\xb6\xc4\xe7\xa9\xad\x5c\x0c\xcd\ +a[\xcf+s\x06\x09z\xaa\xca\xe9\x98\x5c\x09\x14\xf3\ +\xd5\x14*\xb9e\x0d1W\xda\xb1\xb4d\xf3\xc47\xc1\ +\x0a\xecc\x1a\x5c\xa4{4\xb0AH\xf0\xf6\xe3\xd9!\ +\xaa%\xd8\xcdt\xd1\x83\xb0\x07\xe6\x03k\xdetg\xc1\ +\xd0\x16\xa5\x00\x02d^\xdf\xf0\x90\x04eR\xda\x07\xf7\ +\x9f\xb4\x90\xd3\x99\xb49\xa4\xf1mp\x83\xb2!\xe0_\ +\xf4\x04\x88\xd0e\xd4\x86i\x81@:y\xcc\xa6\xc0\x9d\ +C\xd1c\x9c\xcfJ\x86\xb3+\x83\x00\xc6UI2\xc8\ +M+\xd2\x00\xd48\xd4\x80\x12L\xf8\xad\xffb\x8a\xea\ +\x98d\xff\xfag\xbe\xbd9h\x88\xcbB\xc1I\xbe\x1a\ +\xbeb\x94\x090\xc5gj\xacB\xe6;/\xe1)u\ +\xbf]\x0a(\x8d\x06\x8e\xda\xceNZ-\x09\xc6\x1e\xa5\ +\xecx9\xabi\xf60\x0d\xe3\xcb\xc8\x8e=B\xa47\ +\xf7\xec\xf9\x84\x0dI\xc3\xe2*;\xe7Vvp\x0c\x02\ +\xa9\xdce\xdcH\xf6G\xb7d\xa6q\x80>\x1c\x04\x22\ +{\xc0S\xc6h\xdd\x169L\xf2>\xdf\xfd\xb6\x08\xc5\ +\xfe\xf4\xd5\xee\x16GuGk*\x9c\xdcV2\x11\x85\ +!\xbeqZ5p\xf2\xb6^\x953\x95}o\x97\x9e\ +o\x9c\xe9G`\xf0\x1c\x94<\xde\x09\xfb\x90\xebuL\ +\x04&G\x19n\xaf\x5c\xa45J\x89\xd2\xe6\x12a\xaf\ +\x1a\xfc\x95\xf1\x939\xe18\xc9\xb32)\x01$\xdd-\ +\x15$\x96\xff\x84\xd8\xa57\x17\x08\xda\x05\x9d\x83\xe8\xfd\ +\x0f\xc9\xdfkb\xbc+8\x1b\xf6\x0b7\xa0\xf3I0\ +\xf7\x05\x9a=\xbc\x91\xb7z\xd2\x8eE\xbd\x10&\x87\x83\ +\x02;7g\xc1\xd3bd\xb3\x08\x94\xba\xf2\x99\xf0\x00\ +Q\xd4\xfcH\x02t)\x0c\x9f\x1e?\xd1\xa8\xd5\xc3\x97\ +\xee\xd2r\x07\xe4\x01\ \x00\x00\x00\xb2\ <\ svg xmlns=\x22http:\ @@ -2659,74 +2659,74 @@ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x007\x18\ +\x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x007\x17\ \x00\x00\x01\x9b\x13E\x17;\ -\x00\x00\x00^\x00\x00\x00\x00\x00\x01\x00\x00\x04\xdc\ +\x00\x00\x00^\x00\x00\x00\x00\x00\x01\x00\x00\x04\xdb\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x01\xee\x00\x00\x00\x00\x00\x01\x00\x009\xfa\ +\x00\x00\x01\xee\x00\x00\x00\x00\x00\x01\x00\x009\xf9\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x13\xd1\ +\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x13\xd0\ \x00\x00\x01\x9c\xcem|j\ -\x00\x00\x02t\x00\x00\x00\x00\x00\x01\x00\x00L\xae\ +\x00\x00\x02t\x00\x00\x00\x00\x00\x01\x00\x00L\xad\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x02P\x00\x00\x00\x00\x00\x01\x00\x00F\x89\ +\x00\x00\x02P\x00\x00\x00\x00\x00\x01\x00\x00F\x88\ \x00\x00\x01\x9c\xcem|k\ -\x00\x00\x02\xc4\x00\x00\x00\x00\x00\x01\x00\x00T\xc0\ +\x00\x00\x02\xc4\x00\x00\x00\x00\x00\x01\x00\x00T\xbf\ \x00\x00\x01\x9c\xcem|l\ -\x00\x00\x00z\x00\x00\x00\x00\x00\x01\x00\x00\x05\x92\ +\x00\x00\x00z\x00\x00\x00\x00\x00\x01\x00\x00\x05\x91\ \x00\x00\x01\x9b\x13\xd0_\xa8\ -\x00\x00\x02\x9c\x00\x00\x00\x00\x00\x01\x00\x00R\x01\ +\x00\x00\x02\x9c\x00\x00\x00\x00\x00\x01\x00\x00R\x00\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x02\xe8\x00\x00\x00\x00\x00\x01\x00\x00WY\ +\x00\x00\x02\xe8\x00\x00\x00\x00\x00\x01\x00\x00WX\ \x00\x00\x01\x9b\x13E\x17;\ -\x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x00$\x09\ +\x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x00$\x08\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xff\ +\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xfe\ \x00\x00\x01\x9b\x13E\x179\ -\x00\x00\x01*\x00\x00\x00\x00\x00\x01\x00\x00!\x0b\ +\x00\x00\x01*\x00\x00\x00\x00\x00\x01\x00\x00!\x0a\ \x00\x00\x01\x9di#\xc4\x14\ -\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00 QVBox outer.addWidget(lbl) columns = values if isinstance(values, list) else [] - all_cbs: list[QCheckBox] = [] + all_cbs: list[RichCheckBox] = [] num_cols = len(columns) grid = QGridLayout() @@ -425,7 +425,7 @@ def _make_checkbox_grid(self, key: str, label: str, values, meta: dict) -> QVBox for row in range(num_rows): for col, col_items in enumerate(columns): if row < len(col_items): - cb = QCheckBox(str(col_items[row])) + cb = RichCheckBox(str(col_items[row])) all_cbs.append(cb) grid.addWidget(cb, row, col, alignment=Qt.AlignCenter) diff --git a/src/osdagbridge/desktop/ui/utils/combobox_utils.py b/src/osdagbridge/desktop/ui/utils/combobox_utils.py index a4b6584ef..2543dae74 100644 --- a/src/osdagbridge/desktop/ui/utils/combobox_utils.py +++ b/src/osdagbridge/desktop/ui/utils/combobox_utils.py @@ -88,4 +88,89 @@ def leaveEvent(self, event): Reset cursor when leaving the dropdown. """ self.setCursor(Qt.ArrowCursor) - super().leaveEvent(event) \ No newline at end of file + super().leaveEvent(event) + +from PySide6.QtWidgets import QCheckBox, QLabel, QHBoxLayout + +#---------------------------------------------------------------------------------- +# To create a checkbox with text that supports HTML formatting (e.g. subscripts) +#---------------------------------------------------------------------------------- +from PySide6.QtWidgets import QCheckBox, QStyleOptionButton, QStyle, QApplication +from PySide6.QtGui import QPainter, QTextDocument +from PySide6.QtCore import Qt, QSize, QPoint + + +class RichCheckBox(QCheckBox): + def __init__(self, text="", parent=None): + super().__init__("", parent) # Keep native text empty + self._rich_text = text + + def setText(self, text: str): + self._rich_text = text + self.updateGeometry() + self.update() + + def text(self) -> str: + return self._rich_text + + def _doc(self) -> QTextDocument: + """Build a QTextDocument from the rich text.""" + doc = QTextDocument() + doc.setDefaultFont(self.font()) + doc.setHtml(self._rich_text) + return doc + + def sizeHint(self) -> QSize: + doc = self._doc() + # Ideal (unconstrained) size of the HTML content + doc.setTextWidth(-1) + text_size = doc.size() + + opt = QStyleOptionButton() + self.initStyleOption(opt) + + # Width of the native checkbox indicator + indicator_w = self.style().pixelMetric( + QStyle.PM_IndicatorWidth, opt, self + ) + spacing = self.style().pixelMetric( + QStyle.PM_CheckBoxLabelSpacing, opt, self + ) + + w = indicator_w + spacing + int(text_size.width()) + h = max( + self.style().pixelMetric(QStyle.PM_IndicatorHeight, opt, self), + int(text_size.height()), + ) + return QSize(w + 4, h + 4) + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + + opt = QStyleOptionButton() + self.initStyleOption(opt) + + # --- 1. Draw ONLY the checkbox indicator (no text) --- + opt.text = "" + indicator_rect = self.style().subElementRect( + QStyle.SE_CheckBoxIndicator, opt, self + ) + opt.rect = indicator_rect + self.style().drawControl(QStyle.CE_CheckBox, opt, painter, self) + + # --- 2. Draw rich text with QTextDocument --- + indicator_w = self.style().pixelMetric(QStyle.PM_IndicatorWidth, opt, self) + spacing = self.style().pixelMetric(QStyle.PM_CheckBoxLabelSpacing, opt, self) + + text_x = indicator_w + spacing + text_y = (self.height() - int(self._doc().size().height())) // 2 + + painter.save() + painter.translate(QPoint(text_x, text_y)) + + doc = self._doc() + doc.setTextWidth(self.width() - text_x) + doc.drawContents(painter) + + painter.restore() \ No newline at end of file From 096d7b0d61a430644d6a80645a28767406d6c07c Mon Sep 17 00:00:00 2001 From: Aditya-Donde Date: Wed, 1 Apr 2026 14:39:46 +0530 Subject: [PATCH 134/225] added plotly plots in osdagbridge core added plotly plots in osdagbridge core --- .../bridge_types/plate_girder/defaults.py | 2 +- .../plate_girder/plategirderbridge.py | 40 + .../bridge_types/plate_girder/plots_widget.py | 1292 +++++------------ src/osdagbridge/desktop/ui/plots_UI.py | 281 ++++ src/osdagbridge/desktop/ui/template_page.py | 15 +- 5 files changed, 665 insertions(+), 965 deletions(-) create mode 100644 src/osdagbridge/desktop/ui/plots_UI.py diff --git a/src/osdagbridge/core/bridge_types/plate_girder/defaults.py b/src/osdagbridge/core/bridge_types/plate_girder/defaults.py index 6805f53eb..847e0b7b5 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/defaults.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/defaults.py @@ -30,7 +30,7 @@ DEFAULT_SPAN_M = 33.5 DEFAULT_CARRIAGEWAY_WIDTH_M = 10.0 DEFAULT_MEDIAN_WIDTH_M = 0.0 -DEFAULT_NO_OF_GIRDERS = 4 +DEFAULT_NO_OF_GIRDERS = 6 DEFAULT_DECK_THICKNESS_MM = float(IS_DEFAULT_DECK_THICKNESS_MM) DEFAULT_GIRDER_SYMMETRY = "Girder Symmetric" DEFAULT_SKEW_ANGLE_DEG = 0.0 diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py index 64552312b..2d032343d 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plategirderbridge.py @@ -13,6 +13,13 @@ ) from .initial_sizing import BridgeConfigurationSolver, DEFAULT_FOOTPATH_WIDTH from .analyser import BridgeGrillageModel +from .analysis_results import PlateGirderAnalysisResults +from .plots_widget import ( + build_figure_sfd, + build_figure_bmd, + build_figure_bmd_contour, + build_nodes_members, +) from osdagbridge.core.utils.common import ( KEY_STRUCTURE_TYPE, @@ -561,6 +568,39 @@ def analyze(self): return self.grillage_model.analyze() + # ───────────────────────────────────────────────────────────────────────── + # Plotting + # ───────────────────────────────────────────────────────────────────────── + + def get_results_dataset(self): + """Return the xarray Dataset of analysis results.""" + return self.grillage_model.model.get_results() + + def get_available_loadcases(self) -> list[str]: + """Return sorted list of loadcase name strings from the results dataset.""" + results = self.get_results_dataset() + handler = PlateGirderAnalysisResults(dataset=results, bridge=self.grillage_model) + return [str(lc) for lc in handler.get_available_loadcases()] + + def get_nodes_members(self) -> tuple[dict, dict]: + """Return (nodes, members) dicts built from the active openseespy model.""" + return build_nodes_members() + + def build_figure_sfd(self, ds, force_key: str) -> str: + """Build and return Plotly SFD figure JSON for the given dataset slice and force key.""" + nodes, members = self.get_nodes_members() + return build_figure_sfd(ds, force_key, nodes, members) + + def build_figure_bmd(self, ds, force_key: str) -> tuple[str, dict]: + """Build and return (Plotly BMD figure JSON, summary_data) for the given dataset slice.""" + nodes, members = self.get_nodes_members() + return build_figure_bmd(ds, force_key, nodes, members) + + def build_figure_bmd_contour(self, ds, force_key: str) -> str: + """Build and return Plotly BMD contour figure JSON for the given dataset slice.""" + nodes, members = self.get_nodes_members() + return build_figure_bmd_contour(ds, force_key, nodes, members) + # ───────────────────────────────────────────────────────────────────────── # Helpers # ───────────────────────────────────────────────────────────────────────── diff --git a/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py b/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py index d596d0027..87178f994 100644 --- a/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py +++ b/src/osdagbridge/core/bridge_types/plate_girder/plots_widget.py @@ -1,19 +1,6 @@ - -import sys -import openseespy.opensees as ops -from pathlib import Path -from PySide6.QtWidgets import ( - QApplication, QWidget, QVBoxLayout, QHBoxLayout, - QRadioButton, QButtonGroup, QLabel, QComboBox, QCheckBox -) -from PySide6.QtWebEngineWidgets import QWebEngineView -from PySide6.QtCore import QUrl - -import xarray as xr import numpy as np import plotly.graph_objects as go - -from osdagbridge.core.bridge_types.plate_girder.analyser import BridgeGrillageModel +import openseespy.opensees as ops FORCE_MAP = { "Fx": ("Vx_i", "Vx_j"), @@ -24,96 +11,107 @@ "Mz": ("Mz_i", "Mz_j"), } -bridge = BridgeGrillageModel() -bridge.create_model() -bridge.create_self_weight_load() -bridge.create_deck_load() -bridge.create_wearing_course_load() -bridge.create_footpath_load() -bridge.create_crash_barrier_load() -bridge.create_railing_load() -bridge.create_median_load() -bridge.analyze() - -results = bridge.model.get_results() - -# results = convert_object_to_float(girder_results) - - -LOADCASES = [ - "girder self weight", - "Deck slab load", - "Wearing course self weight", - "Footpath load", - "Crash barrier load", - "Railing load", - "Median load", -] - -ds_all = results - - -def get_ds(loadcase): - return ds_all.sel(Loadcase=loadcase) - - # ============================================================ -# TEMP HTML (single file, overwritten) -''' -TEMP_HTML = ( - Path(__file__).resolve() - .parent.parent.parent # (file → dir → parent → parent) - / "temp_files" - / "temp_plot.html" -) -TEMP_HTML = str(TEMP_HTML) -''' - -# Base directory (same as your logic) -BASE_DIR = ( - Path(__file__).resolve() - .parent.parent.parent +# UNIFIED SCENE & CAMERA CONFIGURATION +# ============================================================ +# Used by all 3 plots so the camera never jumps when switching dropdowns +SHARED_SCENE = dict( + camera=dict( + up=dict(x=0, y=1, z=0), + center=dict(x=0, y=0, z=0), + eye=dict(x=0, y=0.1, z=2.5) # Perfect front elevation + ), + xaxis=dict( + title=dict(text="Span Length", font=dict(size=12, color="black")), + showbackground=False, showgrid=True, gridcolor="rgba(100, 100, 100, 0.15)", + zeroline=False, showline=True, linecolor="black", linewidth=2, + ticks="outside", tickfont=dict(size=11, color="black"), + visible=True, showspikes=False + ), + zaxis=dict( + title=dict(text="Bridge Width", font=dict(size=12, color="black")), + showbackground=False, showgrid=True, gridcolor="rgba(100, 100, 100, 0.15)", + zeroline=False, showline=True, linecolor="black", linewidth=2, + ticks="outside", tickfont=dict(size=11, color="black"), + autorange="reversed", visible=True, showspikes=False + ), + yaxis=dict( + showbackground=False, showgrid=False, zeroline=False, + visible=False, showspikes=False + ), + aspectmode='data', ) -# Ensure temp_files directory exists -TEMP_DIR = BASE_DIR / "temp_files" -TEMP_DIR.mkdir(parents=True, exist_ok=True) - -# Final HTML file path -TEMP_HTML = TEMP_DIR / "temp_plot.html" - -# If you really need string -TEMP_HTML = str(TEMP_HTML) - -# COMMON IMPORTS (unchanged) +def build_nodes_members(): + """Build nodes and members dicts from the active openseespy model.""" + nodes = { + int(n): list(map(float, ops.nodeCoord(n))) + for n in ops.getNodeTags() + } + members = { + int(e): list(map(int, ops.eleNodes(e))) + for e in ops.getEleTags() + } + return nodes, members + + +def add_grillage_background(fig, nodes_dict, members_dict): + x_grill, y_grill, z_grill = [], [], [] + for ele_tag, (n1, n2) in members_dict.items(): + x1, _, z1 = nodes_dict[n1] + x2, _, z2 = nodes_dict[n2] + x_grill.extend([x1, x2, None]) + y_grill.extend([0, 0, None]) + z_grill.extend([z1, z2, None]) + + fig.add_trace(go.Scatter3d( + x=x_grill, y=y_grill, z=z_grill, mode='lines', + line=dict(color='darkgrey', width=2), opacity=0.9, + hoverinfo='skip', showlegend=False + )) + +def add_coordinate_triad(fig, nodes, scale=0.10): + xs = [coord[0] for coord in nodes.values()] + ys = [coord[1] for coord in nodes.values()] + zs = [coord[2] for coord in nodes.values()] + + span_x = max(xs) - min(xs) + span_z = max(zs) - min(zs) + span = max(span_x, span_z) + if span == 0: span = 5000 + + L = span * scale + ox, oy, oz = min(xs), min(ys), min(zs) + + cad_colors = {'X': '#FF4136', 'Y': '#2ECC40', 'Z': '#0074D9'} + + def draw_axis(axis_name, end_pt, vec, color): + fig.add_trace(go.Scatter3d( + x=[ox, end_pt[0]], y=[oy, end_pt[1]], z=[oz, end_pt[2]], + mode='lines', line=dict(color=color, width=5), hoverinfo='skip', showlegend=False + )) + fig.add_trace(go.Cone( + x=[end_pt[0]], y=[end_pt[1]], z=[end_pt[2]], u=[vec[0]], v=[vec[1]], w=[vec[2]], + sizemode="absolute", sizeref=L*0.2, anchor="tail", showscale=False, hoverinfo='skip', + colorscale=[[0, color], [1, color]] + )) -# LOAD NODES & ELEMENT CONNECTIVITY (unchanged) + draw_axis('X', [ox + L, oy, oz], [L, 0, 0], cad_colors['X']) + draw_axis('Y', [ox, oy + L, oz], [0, L, 0], cad_colors['Y']) + draw_axis('Z', [ox, oy, oz + L], [0, 0, L], cad_colors['Z']) + fig.add_trace(go.Scatter3d( + x=[ox + L*1.2, ox, ox], y=[oy, oy + L*1.2, oy], z=[oz, oz, oz + L*1.2], + mode='text', text=['X', 'Y', 'Z'], + textfont=dict(color=[cad_colors['X'], cad_colors['Y'], cad_colors['Z']], size=13, family="Arial Black, sans-serif"), + hoverinfo='skip', showlegend=False + )) -# -------------------------------------------------- -# Extract all nodes from in-memory OpenSees model -# ................................................... # ============================================================ -# BUILD GEOMETRY ONCE (NO FILES, NO EXEC) +# SFD # ============================================================ - -# Node coordinates -nodes = { - int(n): list(map(float, ops.nodeCoord(n))) - for n in ops.getNodeTags() -} - -# Element connectivity -members = { - int(e): list(map(int, ops.eleNodes(e))) - for e in ops.getEleTags() -} - - -# ============================================================ -# SFD (UNCHANGED) -def build_figure_sfd(ds, force_key): +def build_figure_sfd(ds, force_key, nodes, members): def find_component(name): for c in ds["Component"].values: if c.lower() == name.lower(): @@ -121,287 +119,131 @@ def find_component(name): return None comp_i_name, comp_j_name = FORCE_MAP[force_key] - comp_i = find_component(comp_i_name) comp_j = find_component(comp_j_name) def get_force(elem, comp): return float(ds["forces"].sel(Element=elem, Component=comp).values) - # GIRDER GROUPING - Z_TOL = 3 # decimals for grouping (important!) - + Z_TOL = 3 node_z = {} for n in ops.getNodeTags(): z = float(ops.nodeCoord(n)[2]) node_z[int(n)] = round(z, Z_TOL) - from collections import defaultdict + from collections import defaultdict girders = defaultdict(list) for ele in ops.getEleTags(): n1, n2 = map(int, ops.eleNodes(ele)) - - z1 = node_z[n1] - z2 = node_z[n2] - - # only longitudinal members (same Z at both ends) + z1, z2 = node_z[n1], node_z[n2] if z1 == z2: girders[z1].append(int(ele)) - # BUILD GIRDER POLYLINES def build_polyline(elem_list, comp_i, comp_j): xs, ys, zs, vals, node_ids = [], [], [], [], [] - for e in elem_list: n1, n2 = members[e] x1, y1, z1 = nodes[n1] - - xs.append(x1) - ys.append(y1) - zs.append(z1) + xs.append(x1); ys.append(y1); zs.append(z1) vals.append(round(get_force(e, comp_i), 3)) node_ids.append(n1) - # Last end node last_e = elem_list[-1] n1, n2 = members[last_e] x2, y2, z2 = nodes[n2] - - xs.append(x2) - ys.append(y2) - zs.append(z2) + xs.append(x2); ys.append(y2); zs.append(z2) vals.append(round(get_force(last_e, comp_j), 3)) node_ids.append(n2) - return np.array(xs), np.array(ys), np.array(zs), np.array(vals), node_ids - # ===================== 3D STEPPED SFD ===================== - fig_sfd = go.Figure() - - # girder_spacing = 3.0 - - for i, (gid, elems) in enumerate(girders.items()): - + add_grillage_background(fig_sfd, nodes, members) + add_coordinate_triad(fig_sfd, nodes) + + master_base_x, master_base_y, master_base_z = [], [], [] + master_shear_x, master_shear_y, master_shear_z = [], [], [] + master_hover_text = [] + master_cliff_x, master_cliff_y, master_cliff_z = [], [], [] + master_label_x, master_label_y, master_label_z, master_label_text = [], [], [], [] + + sorted_girders = sorted(girders.items(), key=lambda item: item[0]) + for i, (z_val, elems) in enumerate(sorted_girders): + girder_name = f"G{i+1}" xs, ys, zs, vy, node_ids = build_polyline(elems, comp_i, comp_j) - Vy = vy.astype(float) - - # use real Z from coordinates file - z_base = np.mean(zs) # or zs[0] + z_base = np.mean(zs) if max(Vy) - min(Vy) == 0: - shear_scale = 0.1 * abs((max(xs) - min(xs)) / (max(Vy) - 0)) - + shear_scale = 1.0 if max(Vy) == 0 else 0.25 * abs((max(xs) - min(xs)) / max(Vy)) else: - shear_scale = 0.1 * abs((max(xs) - min(xs)) / (max(Vy) - min(Vy))) - - # ---------- BASELINE (GROUND) ------------- - fig_sfd.add_trace(go.Scatter3d( - x=xs, - y=[0] * len(xs), - z=zs, # [z_base] * len(xs), - mode="lines", - line=dict(color="green", width=3), - hoverinfo="skip", - showlegend=False - )) + shear_scale = 0.25 * abs((max(xs) - min(xs)) / (max(Vy) - min(Vy))) - # ---------- STEPPED SHEAR (MOUNTAINS) ---------- x_step = np.repeat(xs, 2)[1:-1] Vy_step = np.repeat(Vy[:-1], 2) - y_step = Vy_step * shear_scale z_step = [z_base] * len(y_step) - fig_sfd.add_trace(go.Scatter3d( - x=x_step, - y=y_step, - z=z_step, - mode="lines", - line=dict(color="blue", width=6), - hoverinfo="text", - text=[ - # f"Girder {gid}" - f"
Node {nid}" - f"
X = {x:.3f}" - f"
{force_key} = {v:.3f}" - for x, v, nid in zip(x_step, Vy_step, np.repeat(node_ids, 2)[1:-1]) - ], - showlegend=False + fig_sfd.add_trace(go.Surface( + x=[x_step, x_step], y=[np.zeros(len(y_step)), y_step], z=[z_step, z_step], + surfacecolor=[[1]*len(y_step), [1]*len(y_step)], colorscale=[[0, 'blue'], [1, 'blue']], + opacity=0.2, showscale=False, hoverinfo="skip" )) - # ---------- VERTICAL WALLS (CLIFFS) ---------- + master_base_x.extend(list(xs) + [None]) + master_base_y.extend([0] * len(xs) + [None]) + master_base_z.extend(list(zs) + [None]) - for xi, vyi in zip(xs, Vy): - if xi == xs[-1]: - fig_sfd.add_trace(go.Scatter3d( - x=[xi, xi], - y=[0, -vyi * shear_scale], - z=[z_base, z_base], - mode="lines", - line=dict(color="blue", width=4), - hoverinfo="skip", - showlegend=False - - )) - # skip end nodes - else: - fig_sfd.add_trace(go.Scatter3d( - x=[xi, xi], - y=[0, vyi * shear_scale], - z=[z_base, z_base], - mode="lines", - line=dict(color="blue", width=4), - hoverinfo="skip", - showlegend=False - - )) - # fig_bmd = go.Figure() - # ------------ SUPPORT GEOMETRY ----------- - L = max(xs) - min(xs) - h = 0.0199 * L # support height - w = 0.006 * L # support half-width - r = 0.0025 * L # roller radius - # ---------- PIN SUPPORT (START NODE) ---------- - x0, z0 = xs[0], zs[0] - - fig_sfd.add_trace(go.Scatter3d( - x=[x0 - w, x0, x0 + w, x0 - w], - y=[-h, 0, -h, -h], - z=[z0, z0, z0, z0], - mode="lines", - line=dict(color="green", width=5), - showlegend=False, - hoverinfo="skip" - )) - # ===== PIN SUPPORT BASE (GROUND + HATCH) ===== - n_hatch = 6 - hatch_len = 0.15 * h - - # ground line - fig_sfd.add_trace(go.Scatter3d( - x=[x0 - 1.3 * w, x0 + 1.3 * w], - y=[-h, -h], - z=[z_base, z_base], - mode="lines", - line=dict(color="green", width=4), - showlegend=False, - hoverinfo="skip" - )) + master_shear_x.extend(list(x_step) + [None]) + master_shear_y.extend(list(y_step) + [None]) + master_shear_z.extend(list(z_step) + [None]) - # hatch lines - xs_hatch = np.linspace(x0 - 1.2 * w, x0 + 1.2 * w, n_hatch) - - for xh in xs_hatch: - fig_sfd.add_trace(go.Scatter3d( - x=[xh - 0.04 * w, xh + 0.04 * w], - y=[-h, -h - hatch_len], - z=[z_base, z_base], - mode="lines", - line=dict(color="green", width=2), - showlegend=False, - hoverinfo="skip" - )) - - # --------ROLLER SUPPORT(END NODE)-------------- - x1, z1 = xs[-1], zs[-1] - - # Triangle - fig_sfd.add_trace(go.Scatter3d( - x=[x1 - w, x1, x1 + w, x1 - w], - y=[-h, 0, -h, -h], - z=[z1, z1, z1, z1], - mode="lines", - line=dict(color="green", width=5), - showlegend=False, - hoverinfo="skip" - )) - Yb = -h # base of triangle - - # Rollers (two wheels) - theta = np.linspace(0, 2 * np.pi, 60) - - for dx in [-w / 2, w / 2]: - fig_sfd.add_trace(go.Scatter3d( - x=x1 + dx + r * np.cos(theta), - y=(Yb - r) + r * np.sin(theta), # tangent to triangle base - z=[z1] * len(theta), - mode="lines", - line=dict(color="green", width=5), - showlegend=False, - hoverinfo="skip" - )) - # ===== ROLLER SUPPORT BASE (GROUND + HATCH) ===== - # ===== ROLLER SUPPORT BASE (TANGENT TO ROLLERS) ===== - n_hatch = 6 - hatch_len = 0.15 * h - - y_ground = Yb - 2 * r # tangent to roller bottom - - # ground line - fig_sfd.add_trace(go.Scatter3d( - x=[x1 - 1.3 * w, x1 + 1.3 * w], - y=[y_ground, y_ground], - z=[z_base, z_base], - mode="lines", - line=dict(color="green", width=4), - showlegend=False, - hoverinfo="skip" - )) - - # hatch lines - xs_hatch = np.linspace(x1 - 1.2 * w, x1 + 1.2 * w, n_hatch) + hover_strings = [f"
Node {nid}
X = {x:.2f}
{force_key} = {v:.2f}" + for x, v, nid in zip(x_step, Vy_step, np.repeat(node_ids, 2)[1:-1])] + master_hover_text.extend(hover_strings + [None]) - for xh in xs_hatch: - fig_sfd.add_trace(go.Scatter3d( - x=[xh - 0.04 * w, xh + 0.04 * w], - y=[y_ground, y_ground - hatch_len], - z=[z_base, z_base], - mode="lines", - line=dict(color="green", width=2), - showlegend=False, - hoverinfo="skip" - )) + for xi, vyi in zip(xs, Vy): + master_cliff_x.extend([xi, xi, None]) + master_cliff_z.extend([z_base, z_base, None]) + master_cliff_y.extend([0, -vyi * shear_scale if xi == xs[-1] else vyi * shear_scale, None]) + + master_label_x.append(xs[0]) + master_label_y.append(0) + master_label_z.append(zs[0]) + master_label_text.append(girder_name) + + fig_sfd.add_trace(go.Scatter3d( + x=master_base_x, y=master_base_y, z=master_base_z, mode="lines", + line=dict(color="green", width=3), hoverinfo="skip", showlegend=False + )) + fig_sfd.add_trace(go.Scatter3d( + x=master_shear_x, y=master_shear_y, z=master_shear_z, mode="lines", + line=dict(color="blue", width=6), hoverinfo="text", text=master_hover_text, showlegend=False + )) + fig_sfd.add_trace(go.Scatter3d( + x=master_cliff_x, y=master_cliff_y, z=master_cliff_z, mode="lines", + line=dict(color="blue", width=4), hoverinfo="skip", showlegend=False + )) + fig_sfd.add_trace(go.Scatter3d( + x=master_label_x, y=master_label_y, z=master_label_z, mode="text", + text=master_label_text, textposition="middle left", textfont=dict(size=11, color="black"), + showlegend=False, hoverinfo="skip" + )) fig_sfd.update_layout( - title="3D Shear Force Diagram", - scene=dict( - - xaxis=dict( - showbackground=False, showticklabels=False, title="", showspikes=False - # - - ), - yaxis=dict( - showbackground=False, showticklabels=False, title="", showspikes=False - # - ), - zaxis=dict( - showbackground=False, showticklabels=False, title="", showspikes=False, autorange="reversed" - # - - ), - - aspectmode="data", - camera=dict( - eye=dict(x=1.6, y=1.2, z=1.6), - up=dict(x=0, y=1, z=0) - ), - - ), - margin=dict(l=0, r=0, t=40, b=0) + uirevision="constant_view", + hoverlabel=dict(bgcolor="#E6F2FF", font_size=12, font_color="#2C3E50", bordercolor="#BBD6EE", namelength=-1), + scene=SHARED_SCENE, + margin=dict(l=0, r=0, t=40, b=0), + paper_bgcolor="white", plot_bgcolor="white" ) - fig_sfd.write_html(TEMP_HTML, include_plotlyjs=True, full_html=True) + return fig_sfd.to_json() # ============================================================ -# BMD - - -def build_figure_bmd(ds, force_key): - # LOAD INTERNAL FORCES (NETCDF) +# BMD +# ============================================================ +def build_figure_bmd(ds, force_key, nodes, members): def find_component(name): for c in ds["Component"].values: if c.lower() == name.lower(): @@ -415,344 +257,168 @@ def find_component(name): def get_force(elem, comp): return float(ds["forces"].sel(Element=elem, Component=comp).values) - Z_TOL = 3 # decimals for grouping (important!) - + Z_TOL = 3 node_z = {} for n in ops.getNodeTags(): z = float(ops.nodeCoord(n)[2]) node_z[int(n)] = round(z, Z_TOL) - from collections import defaultdict + from collections import defaultdict girders = defaultdict(list) for ele in ops.getEleTags(): n1, n2 = map(int, ops.eleNodes(ele)) - - z1 = node_z[n1] - z2 = node_z[n2] - - # only longitudinal members (same Z at both ends) + z1, z2 = node_z[n1], node_z[n2] if z1 == z2: girders[z1].append(int(ele)) - # BUILD GIRDER POLYLINES def build_polyline(elem_list, comp_i, comp_j): xs, ys, zs, vals, node_ids = [], [], [], [], [] - for e in elem_list: n1, n2 = members[e] x1, y1, z1 = nodes[n1] - xs.append(x1) - ys.append(y1) - zs.append(z1) + xs.append(x1); ys.append(y1); zs.append(z1) vals.append(round(get_force(e, comp_i), 3)) node_ids.append(n1) - print(f"Element list: {elem_list}") - # Last end node + last_e = elem_list[-1] n1, n2 = members[last_e] x2, y2, z2 = nodes[n2] - - xs.append(x2) - ys.append(y2) - zs.append(z2) + xs.append(x2); ys.append(y2); zs.append(z2) vals.append(round(get_force(last_e, comp_j), 3)) node_ids.append(n2) - return np.array(xs), np.array(ys), np.array(zs), np.array(vals), node_ids - # PLOTLY 3D BMD INTERACTIVE fig_bmd = go.Figure() - ''' - xfull=[] - mzfull =[] - for gid, elems in girders.items(): - xs, ys, zs, mz, node_ids = build_polyline(elems, Mz_i, Mz_j) - xfull.extend(xs) - mzfull.extend(mz) - diffxfull = max(xfull)-min(xfull) - diffmzfull = max(mzfull)-min(mzfull) - #factormz= abs(diffmzfull/diffxfull)*0.2 - ''' - for gid, elems in girders.items(): - xs, ys, zs, mz, node_ids = build_polyline(elems, comp_i, comp_j) - if max(mz) - min(mz) == 0: - factormz = 0.1 * abs((max(xs) - min(xs)) / (max(mz) - 0)) + add_grillage_background(fig_bmd, nodes, members) + add_coordinate_triad(fig_bmd, nodes) + master_line_x, master_line_y, master_line_z = [], [], [] + master_base_x, master_base_y, master_base_z = [], [], [] + master_max_x, master_max_y, master_max_z = [], [], [] + master_min_x, master_min_y, master_min_z = [], [], [] + master_hover_text, master_label_x, master_label_y, master_label_z, master_label_text = [], [], [], [], [] - else: - factormz = 0.1 * abs((max(xs) - min(xs)) / (max(mz) - min(mz))) - y_plot = mz * factormz # * 0.05 # moment scale - hover_text = [ - f"Node {nid}
X = {x:.3f}
{force_key} = {v:.3f}
Z = {z:.3f}" - for nid, x, v, z in zip(node_ids, xs, mz, zs) - ] - - fig_bmd.add_trace(go.Scatter3d( - x=xs, - y=y_plot, - z=zs, - mode='lines+markers', - line=dict(color="red", width=4), - marker=dict(size=3, color="red"), - # name=f"Girder {gid}", - showlegend=False, - text=hover_text, - hoverinfo="text" - )) + summary_data = {} - # baseline - fig_bmd.add_trace(go.Scatter3d( - x=[xs[0], xs[-1]], # first and last node X - y=[0, 0], # Mz = 0 baseline - z=[zs[0], zs[0]], # same girder elevation - mode='lines', - line=dict( - color="green", - width=3, - dash='solid' - ), - showlegend=False, - hoverinfo='skip' - )) - - fig_bmd.add_trace(go.Scatter3d( - x=[xs[np.argmax(mz)], xs[np.argmax(mz)]], - y=[0, max(mz) * factormz], - z=[zs[0]] * 2, - mode="lines", - line=dict(color="black", width=3), - legendgroup="max_lines", - showlegend=False, - visible=False, # start OFF - hoverinfo="skip" - )) + sorted_girders = sorted(girders.items(), key=lambda item: item[0]) + for i, (gid, elems) in enumerate(sorted_girders): + girder_name = f"G{i+1}" + xs, ys, zs, mz, node_ids = build_polyline(elems, comp_i, comp_j) - fig_bmd.add_trace(go.Scatter3d( - x=[xs[np.argmin(mz)]] * 2, - y=[0, min(mz) * factormz], - z=[zs[0]] * 2, - mode="lines", - line=dict(color="black", width=3), - legendgroup="min_lines", - showlegend=False, - visible=False, # start OFF - hoverinfo="skip" - )) + if max(mz) - min(mz) == 0: + factormz = 1.0 if max(mz) == 0 else 0.1 * abs((max(xs) - min(xs)) / max(mz)) + else: + factormz = 0.1 * abs((max(xs) - min(xs)) / (max(mz) - min(mz))) - # ------------ SUPPORT GEOMETRY ----------- - L = max(xs) - min(xs) - h = 0.0399 * L # support height - w = 0.015 * L # support half-width - r = 0.005 * L # roller radius - - # ---------- PIN SUPPORT (START NODE) ---------- - x0, z0 = xs[0], zs[0] - - fig_bmd.add_trace(go.Scatter3d( - x=[x0 - w, x0, x0 + w, x0 - w], - y=[-h, 0, -h, -h], - z=[z0, z0, z0, z0], - mode="lines", - line=dict(color="green", width=5), - showlegend=False, - hoverinfo="skip" - )) - n_hatch = 6 - hatch_len = 0.15 * h - - # ground line - fig_bmd.add_trace(go.Scatter3d( - x=[x0 - 1.3 * w, x0 + 1.3 * w], - y=[-h, -h], - z=[z0, z0], - mode="lines", - line=dict(color="green", width=4), - showlegend=False, - hoverinfo="skip" - )) + y_plot = mz * factormz - # hatch lines - xs_hatch = np.linspace(x0 - 1.2 * w, x0 + 1.2 * w, n_hatch) - - for xh in xs_hatch: - fig_bmd.add_trace(go.Scatter3d( - x=[xh - 0.04 * w, xh + 0.04 * w], - y=[-h, -h - hatch_len], - z=[z0, z0], - mode="lines", - line=dict(color="green", width=2), - showlegend=False, - hoverinfo="skip" - )) - # --------ROLLER SUPPORT(END NODE)-------------- - x1, z1 = xs[-1], zs[-1] - - # Triangle - fig_bmd.add_trace(go.Scatter3d( - x=[x1 - w, x1, x1 + w, x1 - w], - y=[-h, 0, -h, -h], - z=[z1, z1, z1, z1], - mode="lines", - line=dict(color="green", width=5), - showlegend=False, - hoverinfo="skip" - )) - Yb = -h # base of triangle - - # Rollers (two wheels) - theta = np.linspace(0, 2 * np.pi, 60) - - for dx in [-w / 2, w / 2]: - fig_bmd.add_trace(go.Scatter3d( - x=x1 + dx + r * np.cos(theta), - y=(Yb - r) + r * np.sin(theta), # tangent to triangle base - z=[z1] * len(theta), - mode="lines", - line=dict(color="green", width=5), - showlegend=False, - hoverinfo="skip" - )) - n_hatch = 6 - hatch_len = 0.15 * h - - y_ground = Yb - 2 * r # tangent to roller bottom - - # ground line - fig_bmd.add_trace(go.Scatter3d( - x=[x1 - 1.3 * w, x1 + 1.3 * w], - y=[y_ground, y_ground], - z=[z1, z1], - mode="lines", - line=dict(color="green", width=4), - showlegend=False, - hoverinfo="skip" + fig_bmd.add_trace(go.Surface( + x=[xs, xs], y=[np.zeros(len(xs)), y_plot], z=[zs, zs], + surfacecolor=[[1]*len(xs), [1]*len(xs)], colorscale=[[0, 'red'], [1, 'red']], + opacity=0.2, showscale=False, hoverinfo="skip" )) - # hatch lines - xs_hatch = np.linspace(x1 - 1.2 * w, x1 + 1.2 * w, n_hatch) - - for xh in xs_hatch: - fig_bmd.add_trace(go.Scatter3d( - x=[xh - 0.04 * w, xh + 0.04 * w], - y=[y_ground, y_ground - hatch_len], - z=[z1, z1], - mode="lines", - line=dict(color="green", width=2), - showlegend=False, - hoverinfo="skip" - )) - - # pad = 0.01*(max(xfull) - min(xfull)) - # pad2 = 0.01*(max(mzfull) - min(mzfull)) - - max_idx = [i for i, t in enumerate(fig_bmd.data) if t.legendgroup == "max_lines"] - min_idx = [i for i, t in enumerate(fig_bmd.data) if t.legendgroup == "min_lines"] + master_line_x.extend(list(xs) + [None]) + master_line_y.extend(list(y_plot) + [None]) + master_line_z.extend(list(zs) + [None]) + + hover_text = [f"Node {nid}
X = {x:.2f}
{force_key} = {v:.2f}
Z = {z:.2f}" for nid, x, v, z in zip(node_ids, xs, mz, zs)] + master_hover_text.extend(hover_text + [None]) + + master_base_x.extend([xs[0], xs[-1], None]) + master_base_y.extend([0, 0, None]) + master_base_z.extend([zs[0], zs[0], None]) + + master_label_x.append(xs[0]) + master_label_y.append(0) + master_label_z.append(zs[0]) + master_label_text.append(girder_name) + + idx_max, max_val = np.argmax(mz), max(mz) + master_max_x.extend([xs[idx_max], xs[idx_max], None]) + master_max_y.extend([0, max_val * factormz, None]) + master_max_z.extend([zs[0], zs[0], None]) + + idx_min, min_val = np.argmin(mz), min(mz) + master_min_x.extend([xs[idx_min], xs[idx_min], None]) + master_min_y.extend([0, min_val * factormz, None]) + master_min_z.extend([zs[0], zs[0], None]) + + summary_data[girder_name] = {"max": max_val, "min": min_val} + + # ========================================================= + # HUD GENERATOR + # ========================================================= + hud_text = "Extreme Values (N mm)
" + hud_text += "-" * 44 + "
" + + h_girder = "Girder".ljust(6).replace(" ", " ") + h_max = "Max".rjust(14).replace(" ", " ") + h_min = "Min".rjust(14).replace(" ", " ") + + hud_text += f"{h_girder} | {h_max} | {h_min}
" + hud_text += "-" * 44 + "
" + + for girder, vals in summary_data.items(): + g_str = girder.ljust(6).replace(" ", " ") + max_str = f"{vals['max']:.2f}".rjust(14).replace(" ", " ") + min_str = f"{vals['min']:.2f}".rjust(14).replace(" ", " ") + hud_text += f"{g_str} | {max_str} | {min_str}
" + + fig_bmd.add_trace(go.Scatter3d( + x=master_line_x, y=master_line_y, z=master_line_z, mode='lines', line=dict(color="red", width=4), + showlegend=False, text=master_hover_text, hoverinfo="text" + )) + fig_bmd.add_trace(go.Scatter3d( + x=master_base_x, y=master_base_y, z=master_base_z, mode='lines', + line=dict(color="green", width=3, dash='solid'), showlegend=False, hoverinfo='skip' + )) + fig_bmd.add_trace(go.Scatter3d( + x=master_label_x, y=master_label_y, z=master_label_z, mode="text", text=master_label_text, + textposition="middle left", textfont=dict(size=11, color="black"), showlegend=False, hoverinfo="skip" + )) + fig_bmd.add_trace(go.Scatter3d( + x=master_max_x, y=master_max_y, z=master_max_z, mode="lines", line=dict(color="black", width=3), + legendgroup="max_lines", showlegend=False, visible=False, hoverinfo="skip" + )) + fig_bmd.add_trace(go.Scatter3d( + x=master_min_x, y=master_min_y, z=master_min_z, mode="lines", line=dict(color="black", width=3), + legendgroup="min_lines", showlegend=False, visible=False, hoverinfo="skip" + )) fig_bmd.update_layout( + uirevision="constant_view", + annotations=[ + dict( + x=0.02, y=0.98, xref="paper", yref="paper", text=hud_text, showarrow=False, + bgcolor="rgba(33, 37, 43, 0.85)", bordercolor="rgba(255, 255, 255, 0.2)", + borderwidth=1, borderpad=12, + font=dict(family="Consolas, 'Courier New', monospace", size=12, color="white"), + align="left", visible=False + ) + ], + hoverlabel=dict(bgcolor="#FFE4E1", font_size=12, font_color="#2C3E50", bordercolor="#CBD5E1", namelength=-1), updatemenus=[ dict( - type="buttons", - direction="right", - x=0.5, - y=1.15, - showactive=True, - active=-1, + type="buttons", direction="right", x=0.5, y=1.15, showactive=True, active=-1, buttons=[ - # -------- MAX TOGGLE -------- - dict( - label="MAX", - method="update", - - # OFF → ON - args=[{ - "visible": [ - True if t.legendgroup == "max_lines" else t.visible - for t in fig_bmd.data - ] - }], - - # ON → OFF - args2=[{ - "visible": [ - False if t.legendgroup == "max_lines" else t.visible - for t in fig_bmd.data - ] - }] - ), - - # -------- MIN TOGGLE -------- - dict( - label="MIN", - method="update", - - # OFF → ON - args=[{ - "visible": [ - True if t.legendgroup == "min_lines" else t.visible - for t in fig_bmd.data - ] - }], - - # ON → OFF - args2=[{ - "visible": [ - False if t.legendgroup == "min_lines" else t.visible - for t in fig_bmd.data - ] - }] - ), + dict(label="MAX", method="update", args=[{"visible": [True if t.legendgroup == "max_lines" else t.visible for t in fig_bmd.data]}], args2=[{"visible": [False if t.legendgroup == "max_lines" else t.visible for t in fig_bmd.data]}]), + dict(label="MIN", method="update", args=[{"visible": [True if t.legendgroup == "min_lines" else t.visible for t in fig_bmd.data]}], args2=[{"visible": [False if t.legendgroup == "min_lines" else t.visible for t in fig_bmd.data]}]), + dict(label="SUMMARY", method="relayout", args=[{"annotations[0].visible": True}], args2=[{"annotations[0].visible": False}]), ] ) ], - title="Interactive 3D BMD", - - scene=dict( - - camera=dict( - # eye=dict(x=2.5, y=1, z=10), # pull camera along X - up=dict(x=0, y=0.5, z=0), - # center=dict(x=0, y=0, z=0), - # projection=dict(type="orthographic") - ), - xaxis=dict( - title="girder length", - # range=[min(xfull) - pad, max(xfull) + pad], - showbackground=False, # removes YZ plane - showgrid=False, - zeroline=False, - visible=False - ), - yaxis=dict( - # range=[min(mzfull) - 0.25 * (max(mzfull) - min(mzfull)),max(mzfull) + 0.25 * (max(mzfull) - min(mzfull))], - title="Mz values", - # range = [min(mzfull)-pad2,max(mzfull)+pad2], - showbackground=True, # - backgroundcolor="rgba(200,200,200,0.15)", - showgrid=False, - zeroline=False, - visible=False # showaxis line, keep plane - ), - zaxis=dict( - showbackground=False, # removes XY plane - showgrid=False, - zeroline=False, - visible=False, - autorange="reversed" - ), - aspectmode='data', - - ), - - # legend=dict(title="Girders") + scene=SHARED_SCENE, + paper_bgcolor="white", plot_bgcolor="white", margin=dict(l=0, r=0, t=40, b=0) ) - - fig_bmd.write_html(TEMP_HTML, include_plotlyjs=True, full_html=True) + return fig_bmd.to_json(), summary_data # ============================================================ # BMD CONTOUR -def build_figure_bmd_contour(ds, force_key): +# ============================================================ +def build_figure_bmd_contour(ds, force_key, nodes, members): def find_component(name): for c in ds["Component"].values: if c.lower() == name.lower(): @@ -766,55 +432,36 @@ def find_component(name): def get_force(elem, comp): return float(ds["forces"].sel(Element=elem, Component=comp).values) - # ------------------------------------------------------------- - # GIRDER GROUPING - # ------------------------------------------------------------- - Z_TOL = 3 # decimals for grouping (important!) - + Z_TOL = 3 node_z = {} for n in ops.getNodeTags(): z = float(ops.nodeCoord(n)[2]) node_z[int(n)] = round(z, Z_TOL) - from collections import defaultdict + from collections import defaultdict girders = defaultdict(list) for ele in ops.getEleTags(): n1, n2 = map(int, ops.eleNodes(ele)) - - z1 = node_z[n1] - z2 = node_z[n2] - - # only longitudinal members (same Z at both ends) + z1, z2 = node_z[n1], node_z[n2] if z1 == z2: girders[z1].append(int(ele)) - # ------------------------------------------------------------- - # BUILD GIRDER POLYLINE - # ------------------------------------------------------------- def build_polyline(elem_list, comp_i, comp_j): xs, ys, zs, mz, node_ids = [], [], [], [], [] - for e in elem_list: n1, n2 = members[e] x1, y1, z1 = nodes[n1] - - xs.append(x1) - ys.append(y1) - zs.append(z1) + xs.append(x1); ys.append(y1); zs.append(z1) mz.append(round(get_force(e, comp_i), 3)) node_ids.append(n1) last_e = elem_list[-1] n1, n2 = members[last_e] x2, y2, z2 = nodes[n2] - - xs.append(x2) - ys.append(y2) - zs.append(z2) + xs.append(x2); ys.append(y2); zs.append(z2) mz.append(round(get_force(last_e, comp_j), 3)) node_ids.append(n2) - return np.array(xs), np.array(ys), np.array(zs), np.array(mz), node_ids xfull, mzfull = [], [] @@ -823,351 +470,72 @@ def build_polyline(elem_list, comp_i, comp_j): xfull.extend(xs) mzfull.extend(mz) - # moment_scale = 0.2 * abs(dx / dmz) # visual-only scale - - # ------------------------------------------------------------- - # FIGURE - # ------------------------------------------------------------- fig = go.Figure() + add_grillage_background(fig, nodes, members) + add_coordinate_triad(fig, nodes) + + master_drop_x, master_drop_y, master_drop_z, master_drop_color, master_drop_text = [], [], [], [], [] + master_base_x, master_base_y, master_base_z = [], [], [] - for gid, elems in girders.items(): + sorted_girders = sorted(girders.items(), key=lambda item: item[0]) + for i, (gid, elems) in enumerate(sorted_girders): + girder_name = f"G{i+1}" xs, ys, zs, mz, node_ids = build_polyline(elems, comp_i, comp_j) - if max(mz) - min(mz) == 0: - moment_scale = 0.1 * abs((max(xs) - min(xs)) / (max(mz) - 0)) + if max(mz) - min(mz) == 0: + moment_scale = 1.0 if max(mz) == 0 else 0.1 * abs((max(xs) - min(xs)) / max(mz)) else: moment_scale = 0.1 * abs((max(xs) - min(xs)) / (max(mz) - min(mz))) - y_plot = mz * moment_scale - - # -------- CONTOUR-STYLE BMD LINE -------- - fig.add_trace(go.Scatter3d( - x=xs, - y=y_plot, - z=zs, - mode="lines", - line=dict( - width=6, - color=mz, # color by Mz - colorscale="Jet", - cmin=min(mzfull), - cmax=max(mzfull) - ), - showlegend=False, - hoverinfo="text", - text=[ - f"Node {nid}
X={x:.3f}
{force_key}={v:.3f}" - for nid, x, v in zip(node_ids, xs, mz) - ] - )) - # -------- BASELINE (Mz = 0) -------- - fig.add_trace(go.Scatter3d( - x=[xs[0], xs[-1]], - y=[0, 0], - z=[zs[0], zs[0]], - mode="lines", - line=dict(color="green", width=3), - hoverinfo="skip", - showlegend=False - )) - - # ---------- DROPLINES FROM BASELINE TO BMD ---------- - for xi, zi, mzi in zip(xs, zs, mz): - fig.add_trace(go.Scatter3d( - x=[xi, xi], - y=[0, mzi * moment_scale], # baseline → BMD - z=[zi, zi], - mode="lines", - line=dict( - width=4, - color=[mzi, mzi], # same color as contour - colorscale="Jet", - cmin=min(mzfull), - cmax=max(mzfull) - ), - showlegend=False, - hoverinfo="skip" - )) - - # ------------ SUPPORT GEOMETRY ----------- - L = max(xs) - min(xs) - h = 0.0399 * L # support height - w = 0.015 * L # support half-width - r = 0.005 * L # roller radius - - # ---------- PIN SUPPORT (FIRST NODE) ---------- - x0, z0 = xs[0], zs[0] - - fig.add_trace(go.Scatter3d( - x=[x0 - w, x0, x0 + w, x0 - w], - y=[-h, 0, -h, -h], - z=[z0, z0, z0, z0], - mode="lines", - line=dict(color="green", width=5), - showlegend=False, - hoverinfo="skip" - )) - - # ---------- ROLLER SUPPORT (LAST NODE) ---------- - x1, z1 = xs[-1], zs[-1] + y_plot = mz * moment_scale - # Triangle - fig.add_trace(go.Scatter3d( - x=[x1 - w, x1, x1 + w, x1 - w], - y=[-h, 0, -h, -h], - z=[z1, z1, z1, z1], - mode="lines", - line=dict(color="green", width=5), - showlegend=False, - hoverinfo="skip" + fig.add_trace(go.Surface( + x=[xs, xs], y=[np.zeros(len(xs)), y_plot], z=[zs, zs], + surfacecolor=[mz, mz], colorscale="Jet", cmin=min(mzfull), cmax=max(mzfull), + opacity=0.4, showscale=False, hoverinfo="skip" )) - Yb = -h # base of triangle - theta = np.linspace(0, 2 * np.pi, 60) - - # Two rollers - for dxr in [-w / 2, w / 2]: - fig.add_trace(go.Scatter3d( - x=x1 + dxr + r * np.cos(theta), - y=(Yb - r) + r * np.sin(theta), - z=[z1] * len(theta), - mode="lines", - line=dict(color="green", width=5), - showlegend=False, - hoverinfo="skip" - )) - n_hatch = 6 - hatch_len = 0.15 * h - - # ground line fig.add_trace(go.Scatter3d( - x=[x0 - 1.3 * w, x0 + 1.3 * w], - y=[-h, -h], - z=[z0, z0], - mode="lines", - line=dict(color="green", width=4), - showlegend=False, - hoverinfo="skip" + x=xs, y=y_plot, z=zs, mode="lines+markers", + line=dict(width=6, color=mz, colorscale="Jet", cmin=min(mzfull), cmax=max(mzfull)), + marker=dict(size=12, opacity=0), + showlegend=False, text=[f"Node {nid}
X={x:.2f}
{force_key}={v:.2f}" for nid, x, v in zip(node_ids, xs, mz)], + hoverinfo="text" )) - # hatch lines - xs_hatch = np.linspace(x0 - 1.2 * w, x0 + 1.2 * w, n_hatch) - - for xh in xs_hatch: - fig.add_trace(go.Scatter3d( - x=[xh - 0.04 * w, xh + 0.04 * w], - y=[-h, -h - hatch_len], - z=[z0, z0], - mode="lines", - line=dict(color="green", width=2), - showlegend=False, - hoverinfo="skip" - )) - - y_ground = Yb - 2 * r # tangent to roller bottom - - # ground line fig.add_trace(go.Scatter3d( - x=[x1 - 1.3 * w, x1 + 1.3 * w], - y=[y_ground, y_ground], - z=[z1, z1], - mode="lines", - line=dict(color="green", width=4), - showlegend=False, - hoverinfo="skip" + x=[xs[0]], y=[0], z=[zs[0]], mode="text", text=[f"{girder_name}"], + textposition="middle left", textfont=dict(size=14, color="black"), + showlegend=False, hoverinfo="skip" )) - # hatch lines - xs_hatch = np.linspace(x1 - 1.2 * w, x1 + 1.2 * w, n_hatch) - - for xh in xs_hatch: - fig.add_trace(go.Scatter3d( - x=[xh - 0.04 * w, xh + 0.04 * w], - y=[y_ground, y_ground - hatch_len], - z=[z1, z1], - mode="lines", - line=dict(color="green", width=2), - showlegend=False, - hoverinfo="skip" - )) - - # LAYOUT (POST-PROCESSOR STYLE) + master_base_x.extend([xs[0], xs[-1], None]) + master_base_y.extend([0, 0, None]) + master_base_z.extend([zs[0], zs[0], None]) + + for xi, zi, mzi, nid in zip(xs, zs, mz, node_ids): + master_drop_x.extend([xi, xi, None]) + master_drop_y.extend([0, mzi * moment_scale, None]) + master_drop_z.extend([zi, zi, None]) + master_drop_color.extend([mzi, mzi, mzi]) + htext = f"Node {nid}
X={xi:.2f}
{force_key}={mzi:.2f}" + master_drop_text.extend([htext, htext, None]) + + fig.add_trace(go.Scatter3d( + x=master_base_x, y=master_base_y, z=master_base_z, mode="lines", + line=dict(color="green", width=3), hoverinfo="skip", showlegend=False + )) + fig.add_trace(go.Scatter3d( + x=master_drop_x, y=master_drop_y, z=master_drop_z, mode="lines+markers", + line=dict(width=4, color=master_drop_color, colorscale="Jet", cmin=min(mzfull), cmax=max(mzfull)), + marker=dict(size=12, opacity=0), showlegend=False, text=master_drop_text, hoverinfo="text" + )) fig.update_layout( - title="3D Bending Moment Diagram Contour View", - - scene=dict( - - camera=dict( - # eye=dict(x=2.5, y=0.15, z=10), # 👈 pull camera along X - up=dict(x=0, y=1, z=0), - # center=dict(x=0, y=0, z=0), - # projection=dict(type="orthographic") - ), - xaxis=dict( - title="girder length", - # range=[min(xfull) - pad, max(xfull) + pad], - showbackground=False, # removes YZ plane - showgrid=False, - zeroline=False, - visible=False - ), - yaxis=dict( - # range=[min(mzfull) - 0.25 * (max(mzfull) - min(mzfull)),max(mzfull) + 0.25 * (max(mzfull) - min(mzfull))], - title="Mz values", - # range = [min(mzfull)-pad2,max(mzfull)+pad2], - showbackground=True, # - backgroundcolor="rgba(200,200,200,0.15)", - showgrid=False, - zeroline=False, - visible=False # showaxis line, keep plane - ), - zaxis=dict( - showbackground=False, # removes XY plane - showgrid=False, - zeroline=False, - visible=False, - autorange="reversed" - ), - aspectmode='data', - - ), + uirevision="constant_view", + hoverlabel=dict(bgcolor="rgba(15, 23, 42, 0.95)", font_size=12, font_color="#F8F9FA", bordercolor="#0EA5E9", namelength=-1), + scene=SHARED_SCENE, + paper_bgcolor="white", plot_bgcolor="white", margin=dict(l=0, r=0, t=40, b=0) ) - fig.write_html(TEMP_HTML, include_plotlyjs=True, full_html=True) - - -# ============================================================ -# ====================== QT WIDGET -''' -class PlotWidget(QWidget): - - def __init__(self): - super().__init__() - self.setWindowTitle("Plate Girder Plots") - - layout = QVBoxLayout(self) - - top = QHBoxLayout() - self.sfd = QRadioButton("SFD") - self.bmd = QRadioButton("BMD") - self.contour = QRadioButton("BMD Contour") - - self.sfd.setChecked(True) - - group = QButtonGroup(self) - group.setExclusive(True) - group.addButton(self.sfd) - group.addButton(self.bmd) - group.addButton(self.contour) - group.buttonClicked.connect(self.update_plot) - - top.addWidget(self.sfd) - top.addWidget(self.bmd) - top.addWidget(self.contour) - - self.web = QWebEngineView() - - layout.addLayout(top) - layout.addWidget(self.web) - - self.update_plot(self.sfd) - - def update_plot(self, btn): - if btn == self.sfd: - build_figure_sfd() - elif btn == self.bmd: - build_figure_bmd() - else: - build_figure_bmd_contour() - - self.web.load(QUrl.fromLocalFile(TEMP_HTML)) -''' - - -# ====================== QT WIDGET -# ============================================================ -class PlotWidget(QWidget): - - def __init__(self): - super().__init__() - self.setWindowTitle("Plate Girder Results") - - layout = QVBoxLayout(self) - - top = QHBoxLayout() - - # ---------- LOADCASE ---------- - top.addWidget(QLabel("Load case:")) - - self.combo = QComboBox() - self.combo.addItems(LOADCASES) - self.combo.currentTextChanged.connect(self.update_plot) - top.addWidget(self.combo) - - # ---------- FORCE ---------- - top.addWidget(QLabel("Force:")) - - self.force_combo = QComboBox() - self.force_combo.addItems(list(FORCE_MAP.keys())) - self.force_combo.setCurrentText("Fy") - self.force_combo.currentTextChanged.connect(self.update_plot) - top.addWidget(self.force_combo) - - # ---------- CONTOUR ---------- - self.contour = QCheckBox("Contour (Moments only)") - self.contour.stateChanged.connect(self.update_plot) - top.addWidget(self.contour) - - top.addStretch() - - self.web = QWebEngineView() - - layout.addLayout(top) - layout.addWidget(self.web) - - self.update_plot() - - def update_plot(self): - loadcase = self.combo.currentText() - force_key = self.force_combo.currentText() - - ds = get_ds(loadcase) - - # -------- FORCE TYPE -------- - is_force = force_key.startswith("F") # Fx, Fy, Fz - is_moment = force_key.startswith("M") # Mx, My, Mz - - # -------- UI LOGIC -------- - if is_force: - # Forces → SFD, contour disabled - self.contour.blockSignals(True) - self.contour.setChecked(False) - self.contour.setEnabled(False) - self.contour.blockSignals(False) - - build_figure_sfd(ds, force_key) - - elif is_moment: - # Moments → BMD (+ optional contour) - self.contour.setEnabled(True) - - if self.contour.isChecked(): - build_figure_bmd_contour(ds, force_key) - else: - build_figure_bmd(ds, force_key) - - else: - raise ValueError(f"Unsupported force: {force_key}") - - # -------- UPDATE VIEW -------- - self.web.load(QUrl.fromLocalFile(TEMP_HTML)) - - -# ======================= MAIN -if __name__ == "__main__": - app = QApplication(sys.argv) - w = PlotWidget() - w.resize(1200, 800) - w.show() - sys.exit(app.exec()) \ No newline at end of file + return fig.to_json() diff --git a/src/osdagbridge/desktop/ui/plots_UI.py b/src/osdagbridge/desktop/ui/plots_UI.py new file mode 100644 index 000000000..89766ec7c --- /dev/null +++ b/src/osdagbridge/desktop/ui/plots_UI.py @@ -0,0 +1,281 @@ +import sys +import os +import json + +# Performance Flags: Tuned for Screen Recording / Meetings on Windows +os.environ["QT_OPENGL"] = "software" +os.environ["QTWEBENGINE_CHROMIUM_FLAGS"] = ( + "--ignore-gpu-blocklist " + "--enable-gpu-rasterization " + "--enable-webgl " + "--enable-transparent-visuals " + "--disable-software-rasterizer " + "--disable-gpu-driver-bug-workarounds" + "--use-angle=d3d11 " +) + +from PySide6.QtWidgets import ( + QApplication, QWidget, QVBoxLayout, QHBoxLayout, + QLabel, QComboBox, QCheckBox, QTableWidget, QTableWidgetItem, + QHeaderView, QPushButton, QDialog +) +from PySide6.QtWebEngineWidgets import QWebEngineView +from PySide6.QtWebEngineCore import QWebEngineSettings +from PySide6.QtCore import QUrl, Qt, QPoint, QObject, Slot, Signal +from PySide6.QtWebChannel import QWebChannel + +# --- IMPORT THE BACKEND LOGIC --- +from osdagbridge.core.bridge_types.plate_girder.plots_widget import ( + build_figure_sfd, + build_figure_bmd, + build_figure_bmd_contour, + FORCE_MAP, +) + +# ========================================================= +# THE RAM-ONLY FRONTEND +# ========================================================= +HTML_TEMPLATE = """ + + + + + + + + +